#include /*I "petscpartitioner.h" I*/ typedef struct { PetscInt dummy; } PetscPartitioner_Gather; static PetscErrorCode PetscPartitionerDestroy_Gather(PetscPartitioner part) { PetscErrorCode ierr; PetscFunctionBegin; ierr = PetscFree(part->data);CHKERRQ(ierr); PetscFunctionReturn(0); } static PetscErrorCode PetscPartitionerView_Gather_ASCII(PetscPartitioner part, PetscViewer viewer) { PetscFunctionBegin; PetscFunctionReturn(0); } static PetscErrorCode PetscPartitionerView_Gather(PetscPartitioner part, PetscViewer viewer) { PetscBool iascii; PetscErrorCode ierr; PetscFunctionBegin; PetscValidHeaderSpecific(part, PETSCPARTITIONER_CLASSID, 1); PetscValidHeaderSpecific(viewer, PETSC_VIEWER_CLASSID, 2); ierr = PetscObjectTypeCompare((PetscObject) viewer, PETSCVIEWERASCII, &iascii);CHKERRQ(ierr); if (iascii) {ierr = PetscPartitionerView_Gather_ASCII(part, viewer);CHKERRQ(ierr);} PetscFunctionReturn(0); } static PetscErrorCode PetscPartitionerPartition_Gather(PetscPartitioner part, PetscInt nparts, PetscInt numVertices, PetscInt start[], PetscInt adjacency[], PetscSection vertSection, PetscSection targetSection, PetscSection partSection, IS *partition) { PetscInt np; PetscErrorCode ierr; PetscFunctionBegin; ierr = ISCreateStride(PETSC_COMM_SELF, numVertices, 0, 1, partition);CHKERRQ(ierr); ierr = PetscSectionSetDof(partSection,0,numVertices);CHKERRQ(ierr); for (np = 1; np < nparts; ++np) {ierr = PetscSectionSetDof(partSection, np, 0);CHKERRQ(ierr);} PetscFunctionReturn(0); } static PetscErrorCode PetscPartitionerInitialize_Gather(PetscPartitioner part) { PetscFunctionBegin; part->noGraph = PETSC_TRUE; part->ops->view = PetscPartitionerView_Gather; part->ops->destroy = PetscPartitionerDestroy_Gather; part->ops->partition = PetscPartitionerPartition_Gather; PetscFunctionReturn(0); } /*MC PETSCPARTITIONERGATHER = "gather" - A PetscPartitioner object Level: intermediate .seealso: PetscPartitionerType, PetscPartitionerCreate(), PetscPartitionerSetType() M*/ PETSC_EXTERN PetscErrorCode PetscPartitionerCreate_Gather(PetscPartitioner part) { PetscPartitioner_Gather *p; PetscErrorCode ierr; PetscFunctionBegin; PetscValidHeaderSpecific(part, PETSCPARTITIONER_CLASSID, 1); ierr = PetscNewLog(part, &p);CHKERRQ(ierr); part->data = p; ierr = PetscPartitionerInitialize_Gather(part);CHKERRQ(ierr); PetscFunctionReturn(0); }