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 PetscPartitionerView_Gather_ASCII(PetscPartitioner part, PetscViewer viewer)
15: {
16: PetscFunctionBegin;
17: PetscFunctionReturn(PETSC_SUCCESS);
18: }
20: static PetscErrorCode PetscPartitionerView_Gather(PetscPartitioner part, PetscViewer viewer)
21: {
22: PetscBool iascii;
24: PetscFunctionBegin;
27: PetscCall(PetscObjectTypeCompare((PetscObject)viewer, PETSCVIEWERASCII, &iascii));
28: if (iascii) PetscCall(PetscPartitionerView_Gather_ASCII(part, viewer));
29: PetscFunctionReturn(PETSC_SUCCESS);
30: }
32: static PetscErrorCode PetscPartitionerPartition_Gather(PetscPartitioner part, PetscInt nparts, PetscInt numVertices, PetscInt start[], PetscInt adjacency[], PetscSection vertSection, PetscSection targetSection, PetscSection partSection, IS *partition)
33: {
34: PetscInt np;
36: PetscFunctionBegin;
37: PetscCall(ISCreateStride(PETSC_COMM_SELF, numVertices, 0, 1, partition));
38: PetscCall(PetscSectionSetDof(partSection, 0, numVertices));
39: for (np = 1; np < nparts; ++np) PetscCall(PetscSectionSetDof(partSection, np, 0));
40: PetscFunctionReturn(PETSC_SUCCESS);
41: }
43: static PetscErrorCode PetscPartitionerInitialize_Gather(PetscPartitioner part)
44: {
45: PetscFunctionBegin;
46: part->noGraph = PETSC_TRUE;
47: part->ops->view = PetscPartitionerView_Gather;
48: part->ops->destroy = PetscPartitionerDestroy_Gather;
49: part->ops->partition = PetscPartitionerPartition_Gather;
50: PetscFunctionReturn(PETSC_SUCCESS);
51: }
53: /*MC
54: PETSCPARTITIONERGATHER = "gather" - A PetscPartitioner object
56: Level: intermediate
58: .seealso: `PetscPartitionerType`, `PetscPartitionerCreate()`, `PetscPartitionerSetType()`
59: M*/
61: PETSC_EXTERN PetscErrorCode PetscPartitionerCreate_Gather(PetscPartitioner part)
62: {
63: PetscPartitioner_Gather *p;
65: PetscFunctionBegin;
67: PetscCall(PetscNew(&p));
68: part->data = p;
70: PetscCall(PetscPartitionerInitialize_Gather(part));
71: PetscFunctionReturn(PETSC_SUCCESS);
72: }