1 #include <petsc/private/partitionerimpl.h> /*I "petscpartitioner.h" I*/ 2 3 typedef struct { 4 PetscInt dummy; 5 } PetscPartitioner_Gather; 6 7 static PetscErrorCode PetscPartitionerDestroy_Gather(PetscPartitioner part) 8 { 9 PetscErrorCode ierr; 10 11 PetscFunctionBegin; 12 ierr = PetscFree(part->data);CHKERRQ(ierr); 13 PetscFunctionReturn(0); 14 } 15 16 static PetscErrorCode PetscPartitionerView_Gather_ASCII(PetscPartitioner part, PetscViewer viewer) 17 { 18 PetscFunctionBegin; 19 PetscFunctionReturn(0); 20 } 21 22 static PetscErrorCode PetscPartitionerView_Gather(PetscPartitioner part, PetscViewer viewer) 23 { 24 PetscBool iascii; 25 PetscErrorCode ierr; 26 27 PetscFunctionBegin; 28 PetscValidHeaderSpecific(part, PETSCPARTITIONER_CLASSID, 1); 29 PetscValidHeaderSpecific(viewer, PETSC_VIEWER_CLASSID, 2); 30 ierr = PetscObjectTypeCompare((PetscObject) viewer, PETSCVIEWERASCII, &iascii);CHKERRQ(ierr); 31 if (iascii) {ierr = PetscPartitionerView_Gather_ASCII(part, viewer);CHKERRQ(ierr);} 32 PetscFunctionReturn(0); 33 } 34 35 static PetscErrorCode PetscPartitionerPartition_Gather(PetscPartitioner part, PetscInt nparts, PetscInt numVertices, PetscInt start[], PetscInt adjacency[], PetscSection vertSection, PetscSection targetSection, PetscSection partSection, IS *partition) 36 { 37 PetscInt np; 38 PetscErrorCode ierr; 39 40 PetscFunctionBegin; 41 ierr = ISCreateStride(PETSC_COMM_SELF, numVertices, 0, 1, partition);CHKERRQ(ierr); 42 ierr = PetscSectionSetDof(partSection,0,numVertices);CHKERRQ(ierr); 43 for (np = 1; np < nparts; ++np) {ierr = PetscSectionSetDof(partSection, np, 0);CHKERRQ(ierr);} 44 PetscFunctionReturn(0); 45 } 46 47 static PetscErrorCode PetscPartitionerInitialize_Gather(PetscPartitioner part) 48 { 49 PetscFunctionBegin; 50 part->noGraph = PETSC_TRUE; 51 part->ops->view = PetscPartitionerView_Gather; 52 part->ops->destroy = PetscPartitionerDestroy_Gather; 53 part->ops->partition = PetscPartitionerPartition_Gather; 54 PetscFunctionReturn(0); 55 } 56 57 /*MC 58 PETSCPARTITIONERGATHER = "gather" - A PetscPartitioner object 59 60 Level: intermediate 61 62 .seealso: PetscPartitionerType, PetscPartitionerCreate(), PetscPartitionerSetType() 63 M*/ 64 65 PETSC_EXTERN PetscErrorCode PetscPartitionerCreate_Gather(PetscPartitioner part) 66 { 67 PetscPartitioner_Gather *p; 68 PetscErrorCode ierr; 69 70 PetscFunctionBegin; 71 PetscValidHeaderSpecific(part, PETSCPARTITIONER_CLASSID, 1); 72 ierr = PetscNewLog(part, &p);CHKERRQ(ierr); 73 part->data = p; 74 75 ierr = PetscPartitionerInitialize_Gather(part);CHKERRQ(ierr); 76 PetscFunctionReturn(0); 77 } 78 79