1a4963045SJacob Faibussowitsch #pragma once 2abe9303eSLisandro Dalcin 3abe9303eSLisandro Dalcin #include <petscsection.h> 4abe9303eSLisandro Dalcin 5ce78bad3SBarry 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" 38*3b9d9b65SStefano Zampini #define PETSCPARTITIONERMULTISTAGE "multistage" 39abe9303eSLisandro Dalcin 40abe9303eSLisandro Dalcin PETSC_EXTERN PetscFunctionList PetscPartitionerList; 41abe9303eSLisandro Dalcin PETSC_EXTERN PetscErrorCode PetscPartitionerRegister(const char[], PetscErrorCode (*)(PetscPartitioner)); 42abe9303eSLisandro Dalcin 43abe9303eSLisandro Dalcin PETSC_EXTERN PetscErrorCode PetscPartitionerCreate(MPI_Comm, PetscPartitioner *); 44abe9303eSLisandro Dalcin PETSC_EXTERN PetscErrorCode PetscPartitionerDestroy(PetscPartitioner *); 45abe9303eSLisandro Dalcin PETSC_EXTERN PetscErrorCode PetscPartitionerSetType(PetscPartitioner, PetscPartitionerType); 46abe9303eSLisandro Dalcin PETSC_EXTERN PetscErrorCode PetscPartitionerGetType(PetscPartitioner, PetscPartitionerType *); 47abe9303eSLisandro Dalcin PETSC_EXTERN PetscErrorCode PetscPartitionerSetUp(PetscPartitioner); 48abe9303eSLisandro Dalcin PETSC_EXTERN PetscErrorCode PetscPartitionerReset(PetscPartitioner); 49abe9303eSLisandro Dalcin PETSC_EXTERN PetscErrorCode PetscPartitionerSetFromOptions(PetscPartitioner); 50abe9303eSLisandro Dalcin PETSC_EXTERN PetscErrorCode PetscPartitionerViewFromOptions(PetscPartitioner, PetscObject, const char[]); 51abe9303eSLisandro Dalcin PETSC_EXTERN PetscErrorCode PetscPartitionerView(PetscPartitioner, PetscViewer); 5221c92275SMatthew G. Knepley PETSC_EXTERN PetscErrorCode PetscPartitionerPartition(PetscPartitioner, PetscInt, PetscInt, PetscInt[], PetscInt[], PetscSection, PetscSection, PetscSection, PetscSection, IS *); 53abe9303eSLisandro Dalcin 54abe9303eSLisandro Dalcin PETSC_EXTERN PetscErrorCode PetscPartitionerShellSetPartition(PetscPartitioner, PetscInt, const PetscInt[], const PetscInt[]); 55abe9303eSLisandro Dalcin PETSC_EXTERN PetscErrorCode PetscPartitionerShellSetRandom(PetscPartitioner, PetscBool); 56abe9303eSLisandro Dalcin PETSC_EXTERN PetscErrorCode PetscPartitionerShellGetRandom(PetscPartitioner, PetscBool *); 57abe9303eSLisandro Dalcin 58*3b9d9b65SStefano Zampini /*E 59*3b9d9b65SStefano Zampini PetscPartitionerMultistageStrategy - indicates what type of strategy to use 60*3b9d9b65SStefano Zampini 61*3b9d9b65SStefano Zampini Values: 62*3b9d9b65SStefano Zampini + `PETSCPARTITIONER_MS_STRATEGY_NODE` - Use node-aware stages 63*3b9d9b65SStefano Zampini - `PETSCPARTITIONER_MS_STRATEGY_MSECTION` - Use recursive m-sections 64*3b9d9b65SStefano Zampini 65*3b9d9b65SStefano Zampini Level: intermediate 66*3b9d9b65SStefano Zampini 67*3b9d9b65SStefano Zampini .seealso: `PetscPartitionerSetType()`, `PetscPartitioner`, `PETSCPARTITIONERMULTISTAGE` 68*3b9d9b65SStefano Zampini E*/ 69*3b9d9b65SStefano Zampini typedef enum { 70*3b9d9b65SStefano Zampini PETSCPARTITIONER_MS_STRATEGY_NODE, 71*3b9d9b65SStefano Zampini PETSCPARTITIONER_MS_STRATEGY_MSECTION 72*3b9d9b65SStefano Zampini } PetscPartitionerMultistageStrategy; 73*3b9d9b65SStefano Zampini PETSC_EXTERN const char *const PetscPartitionerMultistageStrategyList[]; 74*3b9d9b65SStefano Zampini 75*3b9d9b65SStefano Zampini PetscErrorCode PetscPartitionerMultistageSetStages(PetscPartitioner, PetscInt, MPI_Group[]); 76*3b9d9b65SStefano Zampini 77ce78bad3SBarry Smith /* We should implement PetscPartitioner with MatPartitioning */ 78abe9303eSLisandro Dalcin #include <petscmat.h> 79abe9303eSLisandro Dalcin #define PETSCPARTITIONERMATPARTITIONING "matpartitioning" 80abe9303eSLisandro Dalcin PETSC_EXTERN PetscErrorCode PetscPartitionerMatPartitioningGetMatPartitioning(PetscPartitioner, MatPartitioning *); 81