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