xref: /petsc/include/petscdmplextypes.h (revision 5dca41c3d7bef8e7b1b962e5db57c4a0317b6c0a)
16524c165SJacob Faibussowitsch #ifndef PETSCDMPLEXTYPES_H
226bd1501SBarry Smith #define PETSCDMPLEXTYPES_H
386fe8405SMatthew G. Knepley 
4ac09b921SBarry Smith /* SUBMANSEC = DMPlex */
5ac09b921SBarry 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
18669647acSMatthew G. Knepley $ DM_SHAPE_ANNULUS     - The area between two concentric spheres in dimension d
19cfb853baSMatthew G. Knepley $ DM_SHAPE_HYPERCUBIC  - The skeleton of the tensor product of the intervals
209318fe57SMatthew G. Knepley 
219318fe57SMatthew G. Knepley   Level: beginner
229318fe57SMatthew G. Knepley 
23db781477SPatrick Sanan .seealso: `DMPlexGetCellRefiner()`, `DMPlexSetCellRefiner()`, `DMRefine()`, `DMPolytopeType`
249318fe57SMatthew G. Knepley E*/
259371c9d4SSatish Balay typedef enum {
269371c9d4SSatish Balay   DM_SHAPE_BOX,
279371c9d4SSatish Balay   DM_SHAPE_BOX_SURFACE,
289371c9d4SSatish Balay   DM_SHAPE_BALL,
299371c9d4SSatish Balay   DM_SHAPE_SPHERE,
309371c9d4SSatish Balay   DM_SHAPE_CYLINDER,
319371c9d4SSatish Balay   DM_SHAPE_SCHWARZ_P,
329371c9d4SSatish Balay   DM_SHAPE_GYROID,
339371c9d4SSatish Balay   DM_SHAPE_DOUBLET,
34669647acSMatthew G. Knepley   DM_SHAPE_ANNULUS,
35cfb853baSMatthew G. Knepley   DM_SHAPE_HYPERCUBIC,
36*5dca41c3SJed Brown   DM_SHAPE_ZBOX,
379371c9d4SSatish Balay   DM_SHAPE_UNKNOWN
389371c9d4SSatish Balay } DMPlexShape;
399318fe57SMatthew G. Knepley PETSC_EXTERN const char *const DMPlexShapes[];
409318fe57SMatthew G. Knepley 
415a107427SMatthew G. Knepley /*E
425a107427SMatthew G. Knepley   DMPlexCSRAlgorithm - The algorithm for building the adjacency graph in CSR format, usually for a mesh partitioner
435a107427SMatthew G. Knepley 
445a107427SMatthew G. Knepley   Existing shapes include
4587497f52SBarry Smith $ DM_PLEX_CSR_MAT     - Use `MatPartitioning` by first making a matrix
4687497f52SBarry Smith $ DM_PLEX_CSR_GRAPH   - Use the original `DMPLEX` and communicate along the boundary
4787497f52SBarry Smith $ DM_PLEX_CSR_OVERLAP - Build an overlapped `DMPLEX` and then locally compute
485a107427SMatthew G. Knepley 
495a107427SMatthew G. Knepley   Level: beginner
505a107427SMatthew G. Knepley 
51db781477SPatrick Sanan .seealso: `DMPlexCreatePartitionerGraph()`, `PetscPartitionerDMPlexPartition()`, `DMPlexDistribute()`
525a107427SMatthew G. Knepley E*/
539371c9d4SSatish Balay typedef enum {
549371c9d4SSatish Balay   DM_PLEX_CSR_MAT,
559371c9d4SSatish Balay   DM_PLEX_CSR_GRAPH,
569371c9d4SSatish Balay   DM_PLEX_CSR_OVERLAP
579371c9d4SSatish Balay } DMPlexCSRAlgorithm;
585a107427SMatthew G. Knepley PETSC_EXTERN const char *const DMPlexCSRAlgorithms[];
595a107427SMatthew G. Knepley 
60c50b2d26SMatthew G. Knepley typedef struct _p_DMPlexPointQueue *DMPlexPointQueue;
61c50b2d26SMatthew G. Knepley struct _p_DMPlexPointQueue {
62c50b2d26SMatthew G. Knepley   PetscInt  size;   /* Size of the storage array */
63c50b2d26SMatthew G. Knepley   PetscInt *points; /* Array of mesh points */
64c50b2d26SMatthew G. Knepley   PetscInt  front;  /* Index of the front of the queue */
65c50b2d26SMatthew G. Knepley   PetscInt  back;   /* Index of the back of the queue */
66c50b2d26SMatthew G. Knepley   PetscInt  num;    /* Number of enqueued points */
67c50b2d26SMatthew G. Knepley };
68c50b2d26SMatthew G. Knepley 
6986fe8405SMatthew G. Knepley #endif
70