1abe9303eSLisandro Dalcin #include <petsc/private/partitionerimpl.h> /*I "petscpartitioner.h" I*/
2abe9303eSLisandro Dalcin
3abe9303eSLisandro Dalcin typedef struct {
4*2a8381b2SBarry Smith PetscInt unused;
5abe9303eSLisandro Dalcin } PetscPartitioner_Gather;
6abe9303eSLisandro Dalcin
PetscPartitionerDestroy_Gather(PetscPartitioner part)7d71ae5a4SJacob Faibussowitsch static PetscErrorCode PetscPartitionerDestroy_Gather(PetscPartitioner part)
8d71ae5a4SJacob Faibussowitsch {
9abe9303eSLisandro Dalcin PetscFunctionBegin;
109566063dSJacob Faibussowitsch PetscCall(PetscFree(part->data));
113ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS);
12abe9303eSLisandro Dalcin }
13abe9303eSLisandro Dalcin
PetscPartitionerPartition_Gather(PetscPartitioner part,PetscInt nparts,PetscInt numVertices,PetscInt start[],PetscInt adjacency[],PetscSection vertSection,PetscSection edgeSection,PetscSection targetSection,PetscSection partSection,IS * partition)1421c92275SMatthew G. Knepley static PetscErrorCode PetscPartitionerPartition_Gather(PetscPartitioner part, PetscInt nparts, PetscInt numVertices, PetscInt start[], PetscInt adjacency[], PetscSection vertSection, PetscSection edgeSection, PetscSection targetSection, PetscSection partSection, IS *partition)
15d71ae5a4SJacob Faibussowitsch {
16abe9303eSLisandro Dalcin PetscInt np;
17abe9303eSLisandro Dalcin
18abe9303eSLisandro Dalcin PetscFunctionBegin;
199566063dSJacob Faibussowitsch PetscCall(ISCreateStride(PETSC_COMM_SELF, numVertices, 0, 1, partition));
209566063dSJacob Faibussowitsch PetscCall(PetscSectionSetDof(partSection, 0, numVertices));
219566063dSJacob Faibussowitsch for (np = 1; np < nparts; ++np) PetscCall(PetscSectionSetDof(partSection, np, 0));
223ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS);
23abe9303eSLisandro Dalcin }
24abe9303eSLisandro Dalcin
PetscPartitionerInitialize_Gather(PetscPartitioner part)25d71ae5a4SJacob Faibussowitsch static PetscErrorCode PetscPartitionerInitialize_Gather(PetscPartitioner part)
26d71ae5a4SJacob Faibussowitsch {
27abe9303eSLisandro Dalcin PetscFunctionBegin;
28abe9303eSLisandro Dalcin part->noGraph = PETSC_TRUE;
29abe9303eSLisandro Dalcin part->ops->destroy = PetscPartitionerDestroy_Gather;
30abe9303eSLisandro Dalcin part->ops->partition = PetscPartitionerPartition_Gather;
313ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS);
32abe9303eSLisandro Dalcin }
33abe9303eSLisandro Dalcin
34abe9303eSLisandro Dalcin /*MC
35abe9303eSLisandro Dalcin PETSCPARTITIONERGATHER = "gather" - A PetscPartitioner object
36abe9303eSLisandro Dalcin
37abe9303eSLisandro Dalcin Level: intermediate
38abe9303eSLisandro Dalcin
39db781477SPatrick Sanan .seealso: `PetscPartitionerType`, `PetscPartitionerCreate()`, `PetscPartitionerSetType()`
40abe9303eSLisandro Dalcin M*/
41abe9303eSLisandro Dalcin
PetscPartitionerCreate_Gather(PetscPartitioner part)42d71ae5a4SJacob Faibussowitsch PETSC_EXTERN PetscErrorCode PetscPartitionerCreate_Gather(PetscPartitioner part)
43d71ae5a4SJacob Faibussowitsch {
44abe9303eSLisandro Dalcin PetscPartitioner_Gather *p;
45abe9303eSLisandro Dalcin
46abe9303eSLisandro Dalcin PetscFunctionBegin;
47abe9303eSLisandro Dalcin PetscValidHeaderSpecific(part, PETSCPARTITIONER_CLASSID, 1);
484dfa11a4SJacob Faibussowitsch PetscCall(PetscNew(&p));
49abe9303eSLisandro Dalcin part->data = p;
50abe9303eSLisandro Dalcin
519566063dSJacob Faibussowitsch PetscCall(PetscPartitionerInitialize_Gather(part));
523ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS);
53abe9303eSLisandro Dalcin }
54