xref: /petsc/include/petscdmplextypes.h (revision 9371c9d470a9602b6d10a8bf50c9b2280a79e45a)
126bd1501SBarry Smith #if !defined(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
189318fe57SMatthew G. Knepley 
199318fe57SMatthew G. Knepley   Level: beginner
209318fe57SMatthew G. Knepley 
21db781477SPatrick Sanan .seealso: `DMPlexGetCellRefiner()`, `DMPlexSetCellRefiner()`, `DMRefine()`, `DMPolytopeType`
229318fe57SMatthew G. Knepley E*/
23*9371c9d4SSatish Balay typedef enum {
24*9371c9d4SSatish Balay   DM_SHAPE_BOX,
25*9371c9d4SSatish Balay   DM_SHAPE_BOX_SURFACE,
26*9371c9d4SSatish Balay   DM_SHAPE_BALL,
27*9371c9d4SSatish Balay   DM_SHAPE_SPHERE,
28*9371c9d4SSatish Balay   DM_SHAPE_CYLINDER,
29*9371c9d4SSatish Balay   DM_SHAPE_SCHWARZ_P,
30*9371c9d4SSatish Balay   DM_SHAPE_GYROID,
31*9371c9d4SSatish Balay   DM_SHAPE_DOUBLET,
32*9371c9d4SSatish Balay   DM_SHAPE_UNKNOWN
33*9371c9d4SSatish Balay } DMPlexShape;
349318fe57SMatthew G. Knepley PETSC_EXTERN const char *const DMPlexShapes[];
359318fe57SMatthew G. Knepley 
365a107427SMatthew G. Knepley /*E
375a107427SMatthew G. Knepley   DMPlexCSRAlgorithm - The algorithm for building the adjacency graph in CSR format, usually for a mesh partitioner
385a107427SMatthew G. Knepley 
395a107427SMatthew G. Knepley   Existing shapes include
4087497f52SBarry Smith $ DM_PLEX_CSR_MAT     - Use `MatPartitioning` by first making a matrix
4187497f52SBarry Smith $ DM_PLEX_CSR_GRAPH   - Use the original `DMPLEX` and communicate along the boundary
4287497f52SBarry Smith $ DM_PLEX_CSR_OVERLAP - Build an overlapped `DMPLEX` and then locally compute
435a107427SMatthew G. Knepley 
445a107427SMatthew G. Knepley   Level: beginner
455a107427SMatthew G. Knepley 
46db781477SPatrick Sanan .seealso: `DMPlexCreatePartitionerGraph()`, `PetscPartitionerDMPlexPartition()`, `DMPlexDistribute()`
475a107427SMatthew G. Knepley E*/
48*9371c9d4SSatish Balay typedef enum {
49*9371c9d4SSatish Balay   DM_PLEX_CSR_MAT,
50*9371c9d4SSatish Balay   DM_PLEX_CSR_GRAPH,
51*9371c9d4SSatish Balay   DM_PLEX_CSR_OVERLAP
52*9371c9d4SSatish Balay } DMPlexCSRAlgorithm;
535a107427SMatthew G. Knepley PETSC_EXTERN const char *const DMPlexCSRAlgorithms[];
545a107427SMatthew G. Knepley 
55c50b2d26SMatthew G. Knepley typedef struct _p_DMPlexPointQueue *DMPlexPointQueue;
56c50b2d26SMatthew G. Knepley struct _p_DMPlexPointQueue {
57c50b2d26SMatthew G. Knepley   PetscInt  size;   /* Size of the storage array */
58c50b2d26SMatthew G. Knepley   PetscInt *points; /* Array of mesh points */
59c50b2d26SMatthew G. Knepley   PetscInt  front;  /* Index of the front of the queue */
60c50b2d26SMatthew G. Knepley   PetscInt  back;   /* Index of the back of the queue */
61c50b2d26SMatthew G. Knepley   PetscInt  num;    /* Number of enqueued points */
62c50b2d26SMatthew G. Knepley };
63c50b2d26SMatthew G. Knepley 
6486fe8405SMatthew G. Knepley #endif
65