xref: /petsc/include/petscdmplextypes.h (revision b8b475e76995c5d36088ccb99653458c7610fe03)
1a4963045SJacob Faibussowitsch #pragma once
286fe8405SMatthew G. Knepley 
3ce78bad3SBarry Smith /* MANSEC = DM */
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 
916a05f60SBarry Smith   Values:
1016a05f60SBarry Smith + `DM_SHAPE_BOX`         - The tensor product of intervals in dimension d
1116a05f60SBarry Smith . `DM_SHAPE_BOX_SURFACE` - The surface of a box in dimension d+1
1216a05f60SBarry Smith . `DM_SHAPE_BALL`        - The d-dimensional ball
1316a05f60SBarry Smith . `DM_SHAPE_SPHERE`      - The surface of the (d+1)-dimensional ball
1416a05f60SBarry Smith . `DM_SHAPE_CYLINDER`    - The tensor product of the interval and disk
1516a05f60SBarry Smith . `DM_SHAPE_SCHWARZ_P`   - The Schwarz-P triply periodic minimal surface
1616a05f60SBarry Smith . `DM_SHAPE_GYROID`      - The Gyroid triply periodic minimal surface
1716a05f60SBarry Smith . `DM_SHAPE_DOUBLET`     - The mesh of two cells of a specified type
1816a05f60SBarry Smith . `DM_SHAPE_ANNULUS`     - The area between two concentric spheres in dimension d
1916a05f60SBarry Smith - `DM_SHAPE_HYPERCUBIC`  - The skeleton of the tensor product of the intervals
209318fe57SMatthew G. Knepley 
219318fe57SMatthew G. Knepley   Level: beginner
229318fe57SMatthew G. Knepley 
23be664eb1SMatthew G. Knepley .seealso: [](ch_dmbase), `DMPLEX`, `DMPlexGetCellRefiner()`, `DMPlexSetCellRefiner()`, `DMRefine()`, `DMPolytopeType`, `DMPlexCoordMap`
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,
365dca41c3SJed 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
42be664eb1SMatthew G. Knepley   DMPlexCoordMap - The coordinate mapping used for automatic mesh creation.
43be664eb1SMatthew G. Knepley 
44be664eb1SMatthew G. Knepley   Values:
45be664eb1SMatthew G. Knepley + `DM_COORD_MAP_NONE`     - The identity map
46be664eb1SMatthew G. Knepley . `DM_COORD_MAP_SHEAR`    - The shear (additive) map along some dimension
47be664eb1SMatthew G. Knepley . `DM_COORD_MAP_FLARE`    - The flare (multiplicative) map along some dimension
48be664eb1SMatthew G. Knepley . `DM_COORD_MAP_ANNULUS`  - The map from a rectangle to an annulus
49*530e699aSMatthew G. Knepley . `DM_COORD_MAP_SHELL`    - The map from a rectangular solid to an spherical shell
50*530e699aSMatthew G. Knepley - `DM_COORD_MAP_SINUSOID` - The map from a flat rectangle to a sinusoidal surface
51be664eb1SMatthew G. Knepley 
52be664eb1SMatthew G. Knepley   Level: beginner
53be664eb1SMatthew G. Knepley 
54be664eb1SMatthew G. Knepley .seealso: [](ch_dmbase), `DMPLEX`, `DMPlexGetCellRefiner()`, `DMPlexSetCellRefiner()`, `DMRefine()`, `DMPolytopeType`, `DMPlexShape`
55be664eb1SMatthew G. Knepley E*/
56be664eb1SMatthew G. Knepley typedef enum {
57be664eb1SMatthew G. Knepley   DM_COORD_MAP_NONE,
58be664eb1SMatthew G. Knepley   DM_COORD_MAP_SHEAR,
59be664eb1SMatthew G. Knepley   DM_COORD_MAP_FLARE,
60be664eb1SMatthew G. Knepley   DM_COORD_MAP_ANNULUS,
61be664eb1SMatthew G. Knepley   DM_COORD_MAP_SHELL,
62*530e699aSMatthew G. Knepley   DM_COORD_MAP_SINUSOID,
63be664eb1SMatthew G. Knepley   DM_COORD_MAP_UNKNOWN
64be664eb1SMatthew G. Knepley } DMPlexCoordMap;
65be664eb1SMatthew G. Knepley PETSC_EXTERN const char *const DMPlexCoordMaps[];
66be664eb1SMatthew G. Knepley 
67be664eb1SMatthew G. Knepley /*E
685a107427SMatthew G. Knepley   DMPlexCSRAlgorithm - The algorithm for building the adjacency graph in CSR format, usually for a mesh partitioner
695a107427SMatthew G. Knepley 
7016a05f60SBarry Smith   Values:
7116a05f60SBarry Smith + `DM_PLEX_CSR_MAT`     - Use `MatPartitioning` by first making a matrix
7216a05f60SBarry Smith . `DM_PLEX_CSR_GRAPH`   - Use the original `DMPLEX` and communicate along the boundary
7316a05f60SBarry Smith - `DM_PLEX_CSR_OVERLAP` - Build an overlapped `DMPLEX` and then locally compute
745a107427SMatthew G. Knepley 
755a107427SMatthew G. Knepley   Level: beginner
765a107427SMatthew G. Knepley 
77af27ebaaSBarry Smith .seealso: [](ch_dmbase), `DMPLEX`, `DMPlexCreatePartitionerGraph()`, `PetscPartitionerDMPlexPartition()`, `DMPlexDistribute()`
785a107427SMatthew G. Knepley E*/
799371c9d4SSatish Balay typedef enum {
809371c9d4SSatish Balay   DM_PLEX_CSR_MAT,
819371c9d4SSatish Balay   DM_PLEX_CSR_GRAPH,
829371c9d4SSatish Balay   DM_PLEX_CSR_OVERLAP
839371c9d4SSatish Balay } DMPlexCSRAlgorithm;
845a107427SMatthew G. Knepley PETSC_EXTERN const char *const DMPlexCSRAlgorithms[];
855a107427SMatthew G. Knepley 
86ce78bad3SBarry Smith typedef struct _n_DMPlexPointQueue *DMPlexPointQueue;
87ce78bad3SBarry Smith struct _n_DMPlexPointQueue {
88c50b2d26SMatthew G. Knepley   PetscInt  size;   /* Size of the storage array */
89c50b2d26SMatthew G. Knepley   PetscInt *points; /* Array of mesh points */
90c50b2d26SMatthew G. Knepley   PetscInt  front;  /* Index of the front of the queue */
91c50b2d26SMatthew G. Knepley   PetscInt  back;   /* Index of the back of the queue */
92c50b2d26SMatthew G. Knepley   PetscInt  num;    /* Number of enqueued points */
93c50b2d26SMatthew G. Knepley };
94