xref: /petsc/include/petscdmplextypes.h (revision be664eb1aa8937d3d8706d421fb3e5a6fb48db75)
1a4963045SJacob Faibussowitsch #pragma once
286fe8405SMatthew G. Knepley 
3ac09b921SBarry Smith /* SUBMANSEC = DMPlex */
4ac09b921SBarry Smith 
59318fe57SMatthew G. Knepley /*E
69318fe57SMatthew G. Knepley   DMPlexShape - The domain shape used for automatic mesh creation.
79318fe57SMatthew G. Knepley 
816a05f60SBarry Smith   Values:
916a05f60SBarry Smith + `DM_SHAPE_BOX`         - The tensor product of intervals in dimension d
1016a05f60SBarry Smith . `DM_SHAPE_BOX_SURFACE` - The surface of a box in dimension d+1
1116a05f60SBarry Smith . `DM_SHAPE_BALL`        - The d-dimensional ball
1216a05f60SBarry Smith . `DM_SHAPE_SPHERE`      - The surface of the (d+1)-dimensional ball
1316a05f60SBarry Smith . `DM_SHAPE_CYLINDER`    - The tensor product of the interval and disk
1416a05f60SBarry Smith . `DM_SHAPE_SCHWARZ_P`   - The Schwarz-P triply periodic minimal surface
1516a05f60SBarry Smith . `DM_SHAPE_GYROID`      - The Gyroid triply periodic minimal surface
1616a05f60SBarry Smith . `DM_SHAPE_DOUBLET`     - The mesh of two cells of a specified type
1716a05f60SBarry Smith . `DM_SHAPE_ANNULUS`     - The area between two concentric spheres in dimension d
1816a05f60SBarry Smith - `DM_SHAPE_HYPERCUBIC`  - The skeleton of the tensor product of the intervals
199318fe57SMatthew G. Knepley 
209318fe57SMatthew G. Knepley   Level: beginner
219318fe57SMatthew G. Knepley 
22*be664eb1SMatthew G. Knepley .seealso: [](ch_dmbase), `DMPLEX`, `DMPlexGetCellRefiner()`, `DMPlexSetCellRefiner()`, `DMRefine()`, `DMPolytopeType`, `DMPlexCoordMap`
239318fe57SMatthew G. Knepley E*/
249371c9d4SSatish Balay typedef enum {
259371c9d4SSatish Balay   DM_SHAPE_BOX,
269371c9d4SSatish Balay   DM_SHAPE_BOX_SURFACE,
279371c9d4SSatish Balay   DM_SHAPE_BALL,
289371c9d4SSatish Balay   DM_SHAPE_SPHERE,
299371c9d4SSatish Balay   DM_SHAPE_CYLINDER,
309371c9d4SSatish Balay   DM_SHAPE_SCHWARZ_P,
319371c9d4SSatish Balay   DM_SHAPE_GYROID,
329371c9d4SSatish Balay   DM_SHAPE_DOUBLET,
33669647acSMatthew G. Knepley   DM_SHAPE_ANNULUS,
34cfb853baSMatthew G. Knepley   DM_SHAPE_HYPERCUBIC,
355dca41c3SJed Brown   DM_SHAPE_ZBOX,
369371c9d4SSatish Balay   DM_SHAPE_UNKNOWN
379371c9d4SSatish Balay } DMPlexShape;
389318fe57SMatthew G. Knepley PETSC_EXTERN const char *const DMPlexShapes[];
399318fe57SMatthew G. Knepley 
405a107427SMatthew G. Knepley /*E
41*be664eb1SMatthew G. Knepley   DMPlexCoordMap - The coordinate mapping used for automatic mesh creation.
42*be664eb1SMatthew G. Knepley 
43*be664eb1SMatthew G. Knepley   Values:
44*be664eb1SMatthew G. Knepley + `DM_COORD_MAP_NONE`    - The identity map
45*be664eb1SMatthew G. Knepley . `DM_COORD_MAP_SHEAR`   - The shear (additive) map along some dimension
46*be664eb1SMatthew G. Knepley . `DM_COORD_MAP_FLARE`   - The flare (multiplicative) map along some dimension
47*be664eb1SMatthew G. Knepley . `DM_COORD_MAP_ANNULUS` - The map from a rectangle to an annulus
48*be664eb1SMatthew G. Knepley . `DM_COORD_MAP_SHELL`   - The map from a rectangular solid to an spherical shell
49*be664eb1SMatthew G. Knepley 
50*be664eb1SMatthew G. Knepley   Level: beginner
51*be664eb1SMatthew G. Knepley 
52*be664eb1SMatthew G. Knepley .seealso: [](ch_dmbase), `DMPLEX`, `DMPlexGetCellRefiner()`, `DMPlexSetCellRefiner()`, `DMRefine()`, `DMPolytopeType`, `DMPlexShape`
53*be664eb1SMatthew G. Knepley E*/
54*be664eb1SMatthew G. Knepley typedef enum {
55*be664eb1SMatthew G. Knepley   DM_COORD_MAP_NONE,
56*be664eb1SMatthew G. Knepley   DM_COORD_MAP_SHEAR,
57*be664eb1SMatthew G. Knepley   DM_COORD_MAP_FLARE,
58*be664eb1SMatthew G. Knepley   DM_COORD_MAP_ANNULUS,
59*be664eb1SMatthew G. Knepley   DM_COORD_MAP_SHELL,
60*be664eb1SMatthew G. Knepley   DM_COORD_MAP_UNKNOWN
61*be664eb1SMatthew G. Knepley } DMPlexCoordMap;
62*be664eb1SMatthew G. Knepley PETSC_EXTERN const char *const DMPlexCoordMaps[];
63*be664eb1SMatthew G. Knepley 
64*be664eb1SMatthew G. Knepley /*E
655a107427SMatthew G. Knepley   DMPlexCSRAlgorithm - The algorithm for building the adjacency graph in CSR format, usually for a mesh partitioner
665a107427SMatthew G. Knepley 
6716a05f60SBarry Smith   Values:
6816a05f60SBarry Smith + `DM_PLEX_CSR_MAT`     - Use `MatPartitioning` by first making a matrix
6916a05f60SBarry Smith . `DM_PLEX_CSR_GRAPH`   - Use the original `DMPLEX` and communicate along the boundary
7016a05f60SBarry Smith - `DM_PLEX_CSR_OVERLAP` - Build an overlapped `DMPLEX` and then locally compute
715a107427SMatthew G. Knepley 
725a107427SMatthew G. Knepley   Level: beginner
735a107427SMatthew G. Knepley 
74af27ebaaSBarry Smith .seealso: [](ch_dmbase), `DMPLEX`, `DMPlexCreatePartitionerGraph()`, `PetscPartitionerDMPlexPartition()`, `DMPlexDistribute()`
755a107427SMatthew G. Knepley E*/
769371c9d4SSatish Balay typedef enum {
779371c9d4SSatish Balay   DM_PLEX_CSR_MAT,
789371c9d4SSatish Balay   DM_PLEX_CSR_GRAPH,
799371c9d4SSatish Balay   DM_PLEX_CSR_OVERLAP
809371c9d4SSatish Balay } DMPlexCSRAlgorithm;
815a107427SMatthew G. Knepley PETSC_EXTERN const char *const DMPlexCSRAlgorithms[];
825a107427SMatthew G. Knepley 
83c50b2d26SMatthew G. Knepley typedef struct _p_DMPlexPointQueue *DMPlexPointQueue;
84c50b2d26SMatthew G. Knepley struct _p_DMPlexPointQueue {
85c50b2d26SMatthew G. Knepley   PetscInt  size;   /* Size of the storage array */
86c50b2d26SMatthew G. Knepley   PetscInt *points; /* Array of mesh points */
87c50b2d26SMatthew G. Knepley   PetscInt  front;  /* Index of the front of the queue */
88c50b2d26SMatthew G. Knepley   PetscInt  back;   /* Index of the back of the queue */
89c50b2d26SMatthew G. Knepley   PetscInt  num;    /* Number of enqueued points */
90c50b2d26SMatthew G. Knepley };
91