xref: /petsc/src/dm/partitioner/impls/gather/partgather.c (revision ccb4e88a40f0b86eaeca07ff64c64e4de2fae686)
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