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