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