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