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