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: PetscFree(part->data);
10: return 0;
11: }
13: static PetscErrorCode PetscPartitionerView_Gather_ASCII(PetscPartitioner part, PetscViewer viewer)
14: {
15: return 0;
16: }
18: static PetscErrorCode PetscPartitionerView_Gather(PetscPartitioner part, PetscViewer viewer)
19: {
20: PetscBool iascii;
24: PetscObjectTypeCompare((PetscObject)viewer, PETSCVIEWERASCII, &iascii);
25: if (iascii) PetscPartitionerView_Gather_ASCII(part, viewer);
26: return 0;
27: }
29: static PetscErrorCode PetscPartitionerPartition_Gather(PetscPartitioner part, PetscInt nparts, PetscInt numVertices, PetscInt start[], PetscInt adjacency[], PetscSection vertSection, PetscSection targetSection, PetscSection partSection, IS *partition)
30: {
31: PetscInt np;
33: ISCreateStride(PETSC_COMM_SELF, numVertices, 0, 1, partition);
34: PetscSectionSetDof(partSection, 0, numVertices);
35: for (np = 1; np < nparts; ++np) PetscSectionSetDof(partSection, np, 0);
36: return 0;
37: }
39: static PetscErrorCode PetscPartitionerInitialize_Gather(PetscPartitioner part)
40: {
41: part->noGraph = PETSC_TRUE;
42: part->ops->view = PetscPartitionerView_Gather;
43: part->ops->destroy = PetscPartitionerDestroy_Gather;
44: part->ops->partition = PetscPartitionerPartition_Gather;
45: return 0;
46: }
48: /*MC
49: PETSCPARTITIONERGATHER = "gather" - A PetscPartitioner object
51: Level: intermediate
53: .seealso: `PetscPartitionerType`, `PetscPartitionerCreate()`, `PetscPartitionerSetType()`
54: M*/
56: PETSC_EXTERN PetscErrorCode PetscPartitionerCreate_Gather(PetscPartitioner part)
57: {
58: PetscPartitioner_Gather *p;
61: PetscNew(&p);
62: part->data = p;
64: PetscPartitionerInitialize_Gather(part);
65: return 0;
66: }