Actual source code: partgather.c

  1: #include <petsc/private/partitionerimpl.h>

  3: typedef struct {
  4:   PetscInt dummy;
  5: } PetscPartitioner_Gather;

  7: static PetscErrorCode PetscPartitionerDestroy_Gather(PetscPartitioner part)
  8: {
  9:   PetscFunctionBegin;
 10:   PetscCall(PetscFree(part->data));
 11:   PetscFunctionReturn(PETSC_SUCCESS);
 12: }

 14: static PetscErrorCode PetscPartitionerPartition_Gather(PetscPartitioner part, PetscInt nparts, PetscInt numVertices, PetscInt start[], PetscInt adjacency[], PetscSection vertSection, PetscSection edgeSection, PetscSection targetSection, PetscSection partSection, IS *partition)
 15: {
 16:   PetscInt np;

 18:   PetscFunctionBegin;
 19:   PetscCall(ISCreateStride(PETSC_COMM_SELF, numVertices, 0, 1, partition));
 20:   PetscCall(PetscSectionSetDof(partSection, 0, numVertices));
 21:   for (np = 1; np < nparts; ++np) PetscCall(PetscSectionSetDof(partSection, np, 0));
 22:   PetscFunctionReturn(PETSC_SUCCESS);
 23: }

 25: static PetscErrorCode PetscPartitionerInitialize_Gather(PetscPartitioner part)
 26: {
 27:   PetscFunctionBegin;
 28:   part->noGraph        = PETSC_TRUE;
 29:   part->ops->destroy   = PetscPartitionerDestroy_Gather;
 30:   part->ops->partition = PetscPartitionerPartition_Gather;
 31:   PetscFunctionReturn(PETSC_SUCCESS);
 32: }

 34: /*MC
 35:   PETSCPARTITIONERGATHER = "gather" - A PetscPartitioner object

 37:   Level: intermediate

 39: .seealso: `PetscPartitionerType`, `PetscPartitionerCreate()`, `PetscPartitionerSetType()`
 40: M*/

 42: PETSC_EXTERN PetscErrorCode PetscPartitionerCreate_Gather(PetscPartitioner part)
 43: {
 44:   PetscPartitioner_Gather *p;

 46:   PetscFunctionBegin;
 48:   PetscCall(PetscNew(&p));
 49:   part->data = p;

 51:   PetscCall(PetscPartitionerInitialize_Gather(part));
 52:   PetscFunctionReturn(PETSC_SUCCESS);
 53: }