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