xref: /petsc/include/petscpartitioner.h (revision fbf9dbe564678ed6eff1806adbc4c4f01b9743f4)
1 #ifndef PETSCPARTITIONER_H
2 #define PETSCPARTITIONER_H
3 
4 #include <petscsection.h>
5 
6 /* SUBMANSEC = MatOrderings */
7 
8 /*S
9   PetscPartitioner - PETSc object that manages a graph partitioner
10 
11   Level: intermediate
12 
13   Note:
14   Also consider `MatPartitioning` which provides an alternative API for partitioning.
15 
16 .seealso: `PetscPartitionerCreate()`, `PetscPartitionerSetType()`, `PetscPartitionerType`, `MatPartitioning`, `MatPartitioningCreate()`
17 S*/
18 typedef struct _p_PetscPartitioner *PetscPartitioner;
19 
20 PETSC_EXTERN PetscClassId   PETSCPARTITIONER_CLASSID;
21 PETSC_EXTERN PetscErrorCode PetscPartitionerInitializePackage(void);
22 PETSC_EXTERN PetscErrorCode PetscPartitionerFinalizePackage(void);
23 
24 /*J
25   PetscPartitionerType - String with the name of a PETSc graph partitioner
26 
27   Level: beginner
28 
29 .seealso: `PetscPartitionerSetType()`, `PetscPartitioner`
30 J*/
31 typedef const char *PetscPartitionerType;
32 #define PETSCPARTITIONERPARMETIS "parmetis"
33 #define PETSCPARTITIONERPTSCOTCH "ptscotch"
34 #define PETSCPARTITIONERCHACO    "chaco"
35 #define PETSCPARTITIONERSIMPLE   "simple"
36 #define PETSCPARTITIONERSHELL    "shell"
37 #define PETSCPARTITIONERGATHER   "gather"
38 
39 PETSC_EXTERN PetscFunctionList PetscPartitionerList;
40 PETSC_EXTERN PetscErrorCode    PetscPartitionerRegister(const char[], PetscErrorCode (*)(PetscPartitioner));
41 
42 PETSC_EXTERN PetscErrorCode PetscPartitionerCreate(MPI_Comm, PetscPartitioner *);
43 PETSC_EXTERN PetscErrorCode PetscPartitionerDestroy(PetscPartitioner *);
44 PETSC_EXTERN PetscErrorCode PetscPartitionerSetType(PetscPartitioner, PetscPartitionerType);
45 PETSC_EXTERN PetscErrorCode PetscPartitionerGetType(PetscPartitioner, PetscPartitionerType *);
46 PETSC_EXTERN PetscErrorCode PetscPartitionerSetUp(PetscPartitioner);
47 PETSC_EXTERN PetscErrorCode PetscPartitionerReset(PetscPartitioner);
48 PETSC_EXTERN PetscErrorCode PetscPartitionerSetFromOptions(PetscPartitioner);
49 PETSC_EXTERN PetscErrorCode PetscPartitionerViewFromOptions(PetscPartitioner, PetscObject, const char[]);
50 PETSC_EXTERN PetscErrorCode PetscPartitionerView(PetscPartitioner, PetscViewer);
51 PETSC_EXTERN PetscErrorCode PetscPartitionerPartition(PetscPartitioner, PetscInt, PetscInt, PetscInt[], PetscInt[], PetscSection, PetscSection, PetscSection, IS *);
52 
53 PETSC_EXTERN PetscErrorCode PetscPartitionerShellSetPartition(PetscPartitioner, PetscInt, const PetscInt[], const PetscInt[]);
54 PETSC_EXTERN PetscErrorCode PetscPartitionerShellSetRandom(PetscPartitioner, PetscBool);
55 PETSC_EXTERN PetscErrorCode PetscPartitionerShellGetRandom(PetscPartitioner, PetscBool *);
56 
57 /* We should implement MatPartitioning with PetscPartitioner */
58 #include <petscmat.h>
59 #define PETSCPARTITIONERMATPARTITIONING "matpartitioning"
60 PETSC_EXTERN PetscErrorCode PetscPartitionerMatPartitioningGetMatPartitioning(PetscPartitioner, MatPartitioning *);
61 
62 #endif
63