1abe9303eSLisandro Dalcin #include <petsc/private/partitionerimpl.h> /*I "petscpartitioner.h" I*/ 2abe9303eSLisandro Dalcin 3abe9303eSLisandro Dalcin typedef struct { 4*2a8381b2SBarry Smith PetscInt unused; 5abe9303eSLisandro Dalcin } PetscPartitioner_Gather; 6abe9303eSLisandro Dalcin 7d71ae5a4SJacob Faibussowitsch static PetscErrorCode PetscPartitionerDestroy_Gather(PetscPartitioner part) 8d71ae5a4SJacob Faibussowitsch { 9abe9303eSLisandro Dalcin PetscFunctionBegin; 109566063dSJacob Faibussowitsch PetscCall(PetscFree(part->data)); 113ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 12abe9303eSLisandro Dalcin } 13abe9303eSLisandro Dalcin 1421c92275SMatthew G. Knepley static PetscErrorCode PetscPartitionerPartition_Gather(PetscPartitioner part, PetscInt nparts, PetscInt numVertices, PetscInt start[], PetscInt adjacency[], PetscSection vertSection, PetscSection edgeSection, PetscSection targetSection, PetscSection partSection, IS *partition) 15d71ae5a4SJacob Faibussowitsch { 16abe9303eSLisandro Dalcin PetscInt np; 17abe9303eSLisandro Dalcin 18abe9303eSLisandro Dalcin PetscFunctionBegin; 199566063dSJacob Faibussowitsch PetscCall(ISCreateStride(PETSC_COMM_SELF, numVertices, 0, 1, partition)); 209566063dSJacob Faibussowitsch PetscCall(PetscSectionSetDof(partSection, 0, numVertices)); 219566063dSJacob Faibussowitsch for (np = 1; np < nparts; ++np) PetscCall(PetscSectionSetDof(partSection, np, 0)); 223ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 23abe9303eSLisandro Dalcin } 24abe9303eSLisandro Dalcin 25d71ae5a4SJacob Faibussowitsch static PetscErrorCode PetscPartitionerInitialize_Gather(PetscPartitioner part) 26d71ae5a4SJacob Faibussowitsch { 27abe9303eSLisandro Dalcin PetscFunctionBegin; 28abe9303eSLisandro Dalcin part->noGraph = PETSC_TRUE; 29abe9303eSLisandro Dalcin part->ops->destroy = PetscPartitionerDestroy_Gather; 30abe9303eSLisandro Dalcin part->ops->partition = PetscPartitionerPartition_Gather; 313ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 32abe9303eSLisandro Dalcin } 33abe9303eSLisandro Dalcin 34abe9303eSLisandro Dalcin /*MC 35abe9303eSLisandro Dalcin PETSCPARTITIONERGATHER = "gather" - A PetscPartitioner object 36abe9303eSLisandro Dalcin 37abe9303eSLisandro Dalcin Level: intermediate 38abe9303eSLisandro Dalcin 39db781477SPatrick Sanan .seealso: `PetscPartitionerType`, `PetscPartitionerCreate()`, `PetscPartitionerSetType()` 40abe9303eSLisandro Dalcin M*/ 41abe9303eSLisandro Dalcin 42d71ae5a4SJacob Faibussowitsch PETSC_EXTERN PetscErrorCode PetscPartitionerCreate_Gather(PetscPartitioner part) 43d71ae5a4SJacob Faibussowitsch { 44abe9303eSLisandro Dalcin PetscPartitioner_Gather *p; 45abe9303eSLisandro Dalcin 46abe9303eSLisandro Dalcin PetscFunctionBegin; 47abe9303eSLisandro Dalcin PetscValidHeaderSpecific(part, PETSCPARTITIONER_CLASSID, 1); 484dfa11a4SJacob Faibussowitsch PetscCall(PetscNew(&p)); 49abe9303eSLisandro Dalcin part->data = p; 50abe9303eSLisandro Dalcin 519566063dSJacob Faibussowitsch PetscCall(PetscPartitionerInitialize_Gather(part)); 523ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 53abe9303eSLisandro Dalcin } 54