1 #pragma once 2 3 /* SUBMANSEC = DMPlex */ 4 5 /*E 6 DMPlexShape - The domain shape used for automatic mesh creation. 7 8 Values: 9 + `DM_SHAPE_BOX` - The tensor product of intervals in dimension d 10 . `DM_SHAPE_BOX_SURFACE` - The surface of a box in dimension d+1 11 . `DM_SHAPE_BALL` - The d-dimensional ball 12 . `DM_SHAPE_SPHERE` - The surface of the (d+1)-dimensional ball 13 . `DM_SHAPE_CYLINDER` - The tensor product of the interval and disk 14 . `DM_SHAPE_SCHWARZ_P` - The Schwarz-P triply periodic minimal surface 15 . `DM_SHAPE_GYROID` - The Gyroid triply periodic minimal surface 16 . `DM_SHAPE_DOUBLET` - The mesh of two cells of a specified type 17 . `DM_SHAPE_ANNULUS` - The area between two concentric spheres in dimension d 18 - `DM_SHAPE_HYPERCUBIC` - The skeleton of the tensor product of the intervals 19 20 Level: beginner 21 22 .seealso: [](ch_dmbase), `DMPLEX`, `DMPlexGetCellRefiner()`, `DMPlexSetCellRefiner()`, `DMRefine()`, `DMPolytopeType` 23 E*/ 24 typedef enum { 25 DM_SHAPE_BOX, 26 DM_SHAPE_BOX_SURFACE, 27 DM_SHAPE_BALL, 28 DM_SHAPE_SPHERE, 29 DM_SHAPE_CYLINDER, 30 DM_SHAPE_SCHWARZ_P, 31 DM_SHAPE_GYROID, 32 DM_SHAPE_DOUBLET, 33 DM_SHAPE_ANNULUS, 34 DM_SHAPE_HYPERCUBIC, 35 DM_SHAPE_ZBOX, 36 DM_SHAPE_UNKNOWN 37 } DMPlexShape; 38 PETSC_EXTERN const char *const DMPlexShapes[]; 39 40 /*E 41 DMPlexCSRAlgorithm - The algorithm for building the adjacency graph in CSR format, usually for a mesh partitioner 42 43 Values: 44 + `DM_PLEX_CSR_MAT` - Use `MatPartitioning` by first making a matrix 45 . `DM_PLEX_CSR_GRAPH` - Use the original `DMPLEX` and communicate along the boundary 46 - `DM_PLEX_CSR_OVERLAP` - Build an overlapped `DMPLEX` and then locally compute 47 48 Level: beginner 49 50 .seealso: [](ch_dmbase), `DMPLEX`, `DMPlexCreatePartitionerGraph()`, `PetscPartitionerDMPlexPartition()`, `DMPlexDistribute()` 51 E*/ 52 typedef enum { 53 DM_PLEX_CSR_MAT, 54 DM_PLEX_CSR_GRAPH, 55 DM_PLEX_CSR_OVERLAP 56 } DMPlexCSRAlgorithm; 57 PETSC_EXTERN const char *const DMPlexCSRAlgorithms[]; 58 59 typedef struct _p_DMPlexPointQueue *DMPlexPointQueue; 60 struct _p_DMPlexPointQueue { 61 PetscInt size; /* Size of the storage array */ 62 PetscInt *points; /* Array of mesh points */ 63 PetscInt front; /* Index of the front of the queue */ 64 PetscInt back; /* Index of the back of the queue */ 65 PetscInt num; /* Number of enqueued points */ 66 }; 67