xref: /petsc/include/petscpartitioner.h (revision 237137dc2c36cd704ae82eca1d03b531ce3d02f9)
1a4963045SJacob Faibussowitsch #pragma once
2abe9303eSLisandro Dalcin 
3abe9303eSLisandro Dalcin #include <petscsection.h>
4abe9303eSLisandro Dalcin 
5ce78bad3SBarry Smith /* MANSEC = Mat */
68be712e4SBarry Smith /* SUBMANSEC = MatGraphOperations */
7ac09b921SBarry Smith 
8abe9303eSLisandro Dalcin /*S
9abe9303eSLisandro Dalcin   PetscPartitioner - PETSc object that manages a graph partitioner
10abe9303eSLisandro Dalcin 
11abe9303eSLisandro Dalcin   Level: intermediate
12abe9303eSLisandro Dalcin 
1316a05f60SBarry Smith   Note:
1416a05f60SBarry Smith   Also consider `MatPartitioning` which provides an alternative API for partitioning.
1516a05f60SBarry Smith 
1616a05f60SBarry Smith .seealso: `PetscPartitionerCreate()`, `PetscPartitionerSetType()`, `PetscPartitionerType`, `MatPartitioning`, `MatPartitioningCreate()`
17abe9303eSLisandro Dalcin S*/
18abe9303eSLisandro Dalcin typedef struct _p_PetscPartitioner *PetscPartitioner;
19abe9303eSLisandro Dalcin 
20abe9303eSLisandro Dalcin PETSC_EXTERN PetscClassId   PETSCPARTITIONER_CLASSID;
21abe9303eSLisandro Dalcin PETSC_EXTERN PetscErrorCode PetscPartitionerInitializePackage(void);
22abe9303eSLisandro Dalcin PETSC_EXTERN PetscErrorCode PetscPartitionerFinalizePackage(void);
23abe9303eSLisandro Dalcin 
24abe9303eSLisandro Dalcin /*J
25abe9303eSLisandro Dalcin   PetscPartitionerType - String with the name of a PETSc graph partitioner
26abe9303eSLisandro Dalcin 
27abe9303eSLisandro Dalcin   Level: beginner
28abe9303eSLisandro Dalcin 
29db781477SPatrick Sanan .seealso: `PetscPartitionerSetType()`, `PetscPartitioner`
30abe9303eSLisandro Dalcin J*/
31abe9303eSLisandro Dalcin typedef const char *PetscPartitionerType;
32abe9303eSLisandro Dalcin #define PETSCPARTITIONERPARMETIS   "parmetis"
33abe9303eSLisandro Dalcin #define PETSCPARTITIONERPTSCOTCH   "ptscotch"
34abe9303eSLisandro Dalcin #define PETSCPARTITIONERCHACO      "chaco"
35abe9303eSLisandro Dalcin #define PETSCPARTITIONERSIMPLE     "simple"
36abe9303eSLisandro Dalcin #define PETSCPARTITIONERSHELL      "shell"
37abe9303eSLisandro Dalcin #define PETSCPARTITIONERGATHER     "gather"
38*3b9d9b65SStefano Zampini #define PETSCPARTITIONERMULTISTAGE "multistage"
39abe9303eSLisandro Dalcin 
40abe9303eSLisandro Dalcin PETSC_EXTERN PetscFunctionList PetscPartitionerList;
41abe9303eSLisandro Dalcin PETSC_EXTERN PetscErrorCode    PetscPartitionerRegister(const char[], PetscErrorCode (*)(PetscPartitioner));
42abe9303eSLisandro Dalcin 
43abe9303eSLisandro Dalcin PETSC_EXTERN PetscErrorCode PetscPartitionerCreate(MPI_Comm, PetscPartitioner *);
44abe9303eSLisandro Dalcin PETSC_EXTERN PetscErrorCode PetscPartitionerDestroy(PetscPartitioner *);
45abe9303eSLisandro Dalcin PETSC_EXTERN PetscErrorCode PetscPartitionerSetType(PetscPartitioner, PetscPartitionerType);
46abe9303eSLisandro Dalcin PETSC_EXTERN PetscErrorCode PetscPartitionerGetType(PetscPartitioner, PetscPartitionerType *);
47abe9303eSLisandro Dalcin PETSC_EXTERN PetscErrorCode PetscPartitionerSetUp(PetscPartitioner);
48abe9303eSLisandro Dalcin PETSC_EXTERN PetscErrorCode PetscPartitionerReset(PetscPartitioner);
49abe9303eSLisandro Dalcin PETSC_EXTERN PetscErrorCode PetscPartitionerSetFromOptions(PetscPartitioner);
50abe9303eSLisandro Dalcin PETSC_EXTERN PetscErrorCode PetscPartitionerViewFromOptions(PetscPartitioner, PetscObject, const char[]);
51abe9303eSLisandro Dalcin PETSC_EXTERN PetscErrorCode PetscPartitionerView(PetscPartitioner, PetscViewer);
5221c92275SMatthew G. Knepley PETSC_EXTERN PetscErrorCode PetscPartitionerPartition(PetscPartitioner, PetscInt, PetscInt, PetscInt[], PetscInt[], PetscSection, PetscSection, PetscSection, PetscSection, IS *);
53abe9303eSLisandro Dalcin 
54abe9303eSLisandro Dalcin PETSC_EXTERN PetscErrorCode PetscPartitionerShellSetPartition(PetscPartitioner, PetscInt, const PetscInt[], const PetscInt[]);
55abe9303eSLisandro Dalcin PETSC_EXTERN PetscErrorCode PetscPartitionerShellSetRandom(PetscPartitioner, PetscBool);
56abe9303eSLisandro Dalcin PETSC_EXTERN PetscErrorCode PetscPartitionerShellGetRandom(PetscPartitioner, PetscBool *);
57abe9303eSLisandro Dalcin 
58*3b9d9b65SStefano Zampini /*E
59*3b9d9b65SStefano Zampini     PetscPartitionerMultistageStrategy - indicates what type of strategy to use
60*3b9d9b65SStefano Zampini 
61*3b9d9b65SStefano Zampini     Values:
62*3b9d9b65SStefano Zampini +  `PETSCPARTITIONER_MS_STRATEGY_NODE` - Use node-aware stages
63*3b9d9b65SStefano Zampini -  `PETSCPARTITIONER_MS_STRATEGY_MSECTION` - Use recursive m-sections
64*3b9d9b65SStefano Zampini 
65*3b9d9b65SStefano Zampini     Level: intermediate
66*3b9d9b65SStefano Zampini 
67*3b9d9b65SStefano Zampini .seealso: `PetscPartitionerSetType()`, `PetscPartitioner`, `PETSCPARTITIONERMULTISTAGE`
68*3b9d9b65SStefano Zampini E*/
69*3b9d9b65SStefano Zampini typedef enum {
70*3b9d9b65SStefano Zampini   PETSCPARTITIONER_MS_STRATEGY_NODE,
71*3b9d9b65SStefano Zampini   PETSCPARTITIONER_MS_STRATEGY_MSECTION
72*3b9d9b65SStefano Zampini } PetscPartitionerMultistageStrategy;
73*3b9d9b65SStefano Zampini PETSC_EXTERN const char *const PetscPartitionerMultistageStrategyList[];
74*3b9d9b65SStefano Zampini 
75*3b9d9b65SStefano Zampini PetscErrorCode PetscPartitionerMultistageSetStages(PetscPartitioner, PetscInt, MPI_Group[]);
76*3b9d9b65SStefano Zampini 
77ce78bad3SBarry Smith /* We should implement PetscPartitioner with MatPartitioning */
78abe9303eSLisandro Dalcin #include <petscmat.h>
79abe9303eSLisandro Dalcin #define PETSCPARTITIONERMATPARTITIONING "matpartitioning"
80abe9303eSLisandro Dalcin PETSC_EXTERN PetscErrorCode PetscPartitionerMatPartitioningGetMatPartitioning(PetscPartitioner, MatPartitioning *);
81