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