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