126bd1501SBarry Smith #if !defined(PETSCDMPLEXTYPES_H) 226bd1501SBarry Smith #define PETSCDMPLEXTYPES_H 386fe8405SMatthew G. Knepley 4*ac09b921SBarry Smith /* SUBMANSEC = DMPlex */ 5*ac09b921SBarry Smith 69318fe57SMatthew G. Knepley /*E 79318fe57SMatthew G. Knepley DMPlexShape - The domain shape used for automatic mesh creation. 89318fe57SMatthew G. Knepley 99318fe57SMatthew G. Knepley Existing shapes include 109318fe57SMatthew G. Knepley $ DM_SHAPE_BOX - The tensor product of intervals in dimension d 119318fe57SMatthew G. Knepley $ DM_SHAPE_BOX_SURFACE - The surface of a box in dimension d+1 129318fe57SMatthew G. Knepley $ DM_SHAPE_BALL - The d-dimensional ball 139318fe57SMatthew G. Knepley $ DM_SHAPE_SPHERE - The surface of the (d+1)-dimensional ball 149318fe57SMatthew G. Knepley $ DM_SHAPE_CYLINDER - The tensor product of the interval and disk 15b7f5c055SJed Brown $ DM_SHAPE_SCHWARZ_P - The Schwarz-P triply periodic minimal surface 16b7f5c055SJed Brown $ DM_SHAPE_GYROID - The Gyroid triply periodic minimal surface 1705bd46c0SStefano Zampini $ DM_SHAPE_DOUBLET - The mesh of two cells of a specified type 189318fe57SMatthew G. Knepley 199318fe57SMatthew G. Knepley Level: beginner 209318fe57SMatthew G. Knepley 21db781477SPatrick Sanan .seealso: `DMPlexGetCellRefiner()`, `DMPlexSetCellRefiner()`, `DMRefine()`, `DMPolytopeType` 229318fe57SMatthew G. Knepley E*/ 2305bd46c0SStefano Zampini typedef enum {DM_SHAPE_BOX, DM_SHAPE_BOX_SURFACE, DM_SHAPE_BALL, DM_SHAPE_SPHERE, DM_SHAPE_CYLINDER, DM_SHAPE_SCHWARZ_P, DM_SHAPE_GYROID, DM_SHAPE_DOUBLET, DM_SHAPE_UNKNOWN} DMPlexShape; 249318fe57SMatthew G. Knepley PETSC_EXTERN const char * const DMPlexShapes[]; 259318fe57SMatthew G. Knepley 265a107427SMatthew G. Knepley /*E 275a107427SMatthew G. Knepley DMPlexCSRAlgorithm - The algorithm for building the adjacency graph in CSR format, usually for a mesh partitioner 285a107427SMatthew G. Knepley 295a107427SMatthew G. Knepley Existing shapes include 305a107427SMatthew G. Knepley $ DM_PLEX_CSR_MAT - Use MatPartition by first making a matrix 315a107427SMatthew G. Knepley $ DM_PLEX_CSR_GRAPH - Use the original Plex and communicate along the boundary 325a107427SMatthew G. Knepley $ DM_PLEX_CSR_OVERLAP - Build an overlapped Plex and then locally compute 335a107427SMatthew G. Knepley 345a107427SMatthew G. Knepley Level: beginner 355a107427SMatthew G. Knepley 36db781477SPatrick Sanan .seealso: `DMPlexCreatePartitionerGraph()`, `PetscPartitionerDMPlexPartition()`, `DMPlexDistribute()` 375a107427SMatthew G. Knepley E*/ 385a107427SMatthew G. Knepley typedef enum {DM_PLEX_CSR_MAT, DM_PLEX_CSR_GRAPH, DM_PLEX_CSR_OVERLAP} DMPlexCSRAlgorithm; 395a107427SMatthew G. Knepley PETSC_EXTERN const char * const DMPlexCSRAlgorithms[]; 405a107427SMatthew G. Knepley 41c50b2d26SMatthew G. Knepley typedef struct _p_DMPlexPointQueue *DMPlexPointQueue; 42c50b2d26SMatthew G. Knepley struct _p_DMPlexPointQueue { 43c50b2d26SMatthew G. Knepley PetscInt size; /* Size of the storage array */ 44c50b2d26SMatthew G. Knepley PetscInt *points; /* Array of mesh points */ 45c50b2d26SMatthew G. Knepley PetscInt front; /* Index of the front of the queue */ 46c50b2d26SMatthew G. Knepley PetscInt back; /* Index of the back of the queue */ 47c50b2d26SMatthew G. Knepley PetscInt num; /* Number of enqueued points */ 48c50b2d26SMatthew G. Knepley }; 49c50b2d26SMatthew G. Knepley 5086fe8405SMatthew G. Knepley #endif 51