1 #if !defined(PARTITIONERIMPL_H)
2 #define PARTITIONERIMPL_H
3 
4 #include <petscviewer.h>
5 #include <petscpartitioner.h>
6 #include <petsc/private/petscimpl.h>
7 
8 PETSC_EXTERN PetscBool      PetscPartitionerRegisterAllCalled;
9 PETSC_EXTERN PetscErrorCode PetscPartitionerRegisterAll(void);
10 
11 typedef struct _PetscPartitionerOps *PetscPartitionerOps;
12 struct _PetscPartitionerOps {
13   PetscErrorCode (*setfromoptions)(PetscOptionItems*, PetscPartitioner);
14   PetscErrorCode (*setup)(PetscPartitioner);
15   PetscErrorCode (*reset)(PetscPartitioner);
16   PetscErrorCode (*view)(PetscPartitioner, PetscViewer);
17   PetscErrorCode (*destroy)(PetscPartitioner);
18   PetscErrorCode (*partition)(PetscPartitioner, PetscInt, PetscInt, PetscInt[], PetscInt[], PetscSection, PetscSection, PetscSection, IS*);
19 };
20 
21 struct _p_PetscPartitioner {
22   PETSCHEADER(struct _PetscPartitionerOps);
23   void        *data;            /* Implementation object */
24   PetscInt    height;           /* Height of points to partition into non-overlapping subsets */
25   PetscInt    edgeCut;          /* The number of edge cut by the partition */
26   PetscReal   balance;          /* The maximum partition size divided by the minimum size */
27   PetscViewer viewer;
28   PetscViewer viewerGraph;
29   PetscBool   viewGraph;
30   PetscBool   noGraph;          /* if true, the partitioner does not need the connectivity graph, only the number of local vertices */
31   PetscBool   usevwgt;          /* if true, the partitioner looks at the local section vertSection to weight the vertices of the graph */
32 };
33 
34 #endif
35