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