126bd1501SBarry Smith #if !defined(PETSCDMTYPES_H) 226bd1501SBarry Smith #define PETSCDMTYPES_H 31e25c274SJed Brown 4ac09b921SBarry Smith /* SUBMANSEC = DM */ 5ac09b921SBarry Smith 61e25c274SJed Brown /*S 71e25c274SJed Brown DM - Abstract PETSc object that manages an abstract grid object and its interactions with the algebraic solvers 81e25c274SJed Brown 91e25c274SJed Brown Level: intermediate 101e25c274SJed Brown 1187497f52SBarry Smith .seealso: `DMType`, `DMDGetType()`, `DMCompositeCreate()`, `DMDACreate()`, `DMSetType()`, `DMType`, `DMDA`, `DMPLEX` 121e25c274SJed Brown S*/ 131e25c274SJed Brown typedef struct _p_DM *DM; 141e25c274SJed Brown 15bff4a2f0SMatthew G. Knepley /*E 16bff4a2f0SMatthew G. Knepley DMBoundaryType - Describes the choice for fill of ghost cells on physical domain boundaries. 17bff4a2f0SMatthew G. Knepley 18bff4a2f0SMatthew G. Knepley Level: beginner 19bff4a2f0SMatthew G. Knepley 2087497f52SBarry Smith A boundary may be of type `DM_BOUNDARY_NONE` (no ghost nodes), `DM_BOUNDARY_GHOSTED` (ghost vertices/cells 21dbb368e6SPatrick Sanan exist but aren't filled; you can put values into them and then apply a stencil that uses those ghost locations), 2287497f52SBarry Smith `DM_BOUNDARY_MIRROR` (the ghost value is the same as the value 1 grid point in; that is, the 0th grid point in the real mesh acts like a mirror to define the ghost point value; 2387497f52SBarry Smith not yet implemented for 3d), `DM_BOUNDARY_PERIODIC` (ghost vertices/cells filled by the opposite 2487497f52SBarry Smith edge of the domain), or `DM_BOUNDARY_TWIST` (like periodic, only glued backwards like a Mobius strip). 25bff4a2f0SMatthew G. Knepley 26dbb368e6SPatrick Sanan Notes: 27dbb368e6SPatrick Sanan This is information for the boundary of the __PHYSICAL__ domain. It has nothing to do with boundaries between 2887497f52SBarry Smith processes. That width is always determined by the stencil width; see `DMDASetStencilWidth()`. 29bff4a2f0SMatthew G. Knepley 3087497f52SBarry Smith If the physical grid points have values 0 1 2 3 with `DM_BOUNDARY_MIRROR` then the local vector with ghost points has the values 1 0 1 2 3 2 . 31288e7d53SBarry Smith 3295452b02SPatrick Sanan Developer Notes: 3387497f52SBarry Smith Should` DM_BOUNDARY_MIRROR` have the same meaning with DMDA_Q0, that is a staggered grid? In that case should the ghost point have the same value 34288e7d53SBarry Smith as the 0th grid point where the physical boundary serves as the mirror? 35288e7d53SBarry Smith 36dbb368e6SPatrick Sanan References: 37606c0280SSatish Balay . * - https://scicomp.stackexchange.com/questions/5355/writing-the-poisson-equation-finite-difference-matrix-with-neumann-boundary-cond 38288e7d53SBarry Smith 39db781477SPatrick Sanan .seealso: `DMDASetBoundaryType()`, `DMDACreate1d()`, `DMDACreate2d()`, `DMDACreate3d()`, `DMDACreate()` 40bff4a2f0SMatthew G. Knepley E*/ 41*9371c9d4SSatish Balay typedef enum { 42*9371c9d4SSatish Balay DM_BOUNDARY_NONE, 43*9371c9d4SSatish Balay DM_BOUNDARY_GHOSTED, 44*9371c9d4SSatish Balay DM_BOUNDARY_MIRROR, 45*9371c9d4SSatish Balay DM_BOUNDARY_PERIODIC, 46*9371c9d4SSatish Balay DM_BOUNDARY_TWIST 47*9371c9d4SSatish Balay } DMBoundaryType; 4862a38674SMatthew G. Knepley /*E 499dc85fa5SMatthew G. Knepley DMBoundaryConditionType - indicates what type of boundary condition is to be imposed 509dc85fa5SMatthew G. Knepley 519dc85fa5SMatthew G. Knepley Note: This flag indicates the type of function which will define the condition: 529dc85fa5SMatthew G. Knepley $ DM_BC_ESSENTIAL - A Dirichlet condition using a function of the coordinates 539dc85fa5SMatthew G. Knepley $ DM_BC_ESSENTIAL_FIELD - A Dirichlet condition using a function of the coordinates and auxiliary field data 54b18799e0SMatthew G. Knepley $ DM_BC_ESSENTIAL_BD_FIELD - A Dirichlet condition using a function of the coordinates, facet normal, and auxiliary field data 559dc85fa5SMatthew G. Knepley $ DM_BC_NATURAL - A Neumann condition using a function of the coordinates 56b18799e0SMatthew G. Knepley $ DM_BC_NATURAL_FIELD - A Neumann condition using a function of the coordinates and auxiliary field data 579dc85fa5SMatthew G. Knepley $ DM_BC_NATURAL_RIEMANN - A flux condition which determines the state in ghost cells 589dc85fa5SMatthew G. Knepley The user can check whether a boundary condition is essential using (type & DM_BC_ESSENTIAL), and similarly for 599dc85fa5SMatthew G. Knepley natural conditions (type & DM_BC_NATURAL) 609dc85fa5SMatthew G. Knepley 619dc85fa5SMatthew G. Knepley Level: beginner 629dc85fa5SMatthew G. Knepley 63db781477SPatrick Sanan .seealso: `DMAddBoundary()`, `DSAddBoundary()`, `DSGetBoundary()` 649dc85fa5SMatthew G. Knepley E*/ 65*9371c9d4SSatish Balay typedef enum { 66*9371c9d4SSatish Balay DM_BC_ESSENTIAL = 1, 67*9371c9d4SSatish Balay DM_BC_ESSENTIAL_FIELD = 5, 68*9371c9d4SSatish Balay DM_BC_NATURAL = 2, 69*9371c9d4SSatish Balay DM_BC_NATURAL_FIELD = 6, 70*9371c9d4SSatish Balay DM_BC_ESSENTIAL_BD_FIELD = 9, 71*9371c9d4SSatish Balay DM_BC_NATURAL_RIEMANN = 10 72*9371c9d4SSatish Balay } DMBoundaryConditionType; 739dc85fa5SMatthew G. Knepley 749dc85fa5SMatthew G. Knepley /*E 7562a38674SMatthew G. Knepley DMPointLocationType - Describes the method to handle point location failure 7662a38674SMatthew G. Knepley 7762a38674SMatthew G. Knepley Level: beginner 7862a38674SMatthew G. Knepley 7987497f52SBarry Smith If a search using `DM_POINTLOCATION_NONE` fails, the failure is signaled with a negative cell number. On the 8087497f52SBarry Smith other hand, if `DM_POINTLOCATION_NEAREST` is used, on failure, the (approximate) nearest point in the mesh is 8187497f52SBarry Smith used, replacing the given point in the input vector. `DM_POINTLOCATION_REMOVE` returns values only for points 822d1fa6caSMatthew G. Knepley which were located. 8362a38674SMatthew G. Knepley 84db781477SPatrick Sanan .seealso: `DMLocatePoints()` 8562a38674SMatthew G. Knepley E*/ 86*9371c9d4SSatish Balay typedef enum { 87*9371c9d4SSatish Balay DM_POINTLOCATION_NONE, 88*9371c9d4SSatish Balay DM_POINTLOCATION_NEAREST, 89*9371c9d4SSatish Balay DM_POINTLOCATION_REMOVE 90*9371c9d4SSatish Balay } DMPointLocationType; 9162a38674SMatthew G. Knepley 925675c177SMatthew G. Knepley /*E 93174e7490SMatthew G. Knepley DMAdaptationStrategy - Describes the strategy used for adaptive solves 945675c177SMatthew G. Knepley 955675c177SMatthew G. Knepley Level: beginner 965675c177SMatthew G. Knepley 9759b28e79SMatthew G. Knepley DM_ADAPTATION_INITIAL will refine a mesh based on an initial guess. DM_ADAPTATION_SEQUENTIAL will refine the 9859b28e79SMatthew G. Knepley mesh based on a sequence of solves, much like grid sequencing. DM_ADAPTATION_MULTILEVEL will use the sequence 9959b28e79SMatthew G. Knepley of constructed meshes in a multilevel solve, much like the Systematic Upscaling of Brandt. 1005675c177SMatthew G. Knepley 101db781477SPatrick Sanan .seealso: `DMAdaptorSolve()` 1025675c177SMatthew G. Knepley E*/ 103*9371c9d4SSatish Balay typedef enum { 104*9371c9d4SSatish Balay DM_ADAPTATION_INITIAL, 105*9371c9d4SSatish Balay DM_ADAPTATION_SEQUENTIAL, 106*9371c9d4SSatish Balay DM_ADAPTATION_MULTILEVEL 107*9371c9d4SSatish Balay } DMAdaptationStrategy; 108174e7490SMatthew G. Knepley 109174e7490SMatthew G. Knepley /*E 110174e7490SMatthew G. Knepley DMAdaptationCriterion - Describes the test used to decide whether to coarsen or refine parts of the mesh 111174e7490SMatthew G. Knepley 112174e7490SMatthew G. Knepley Level: beginner 113174e7490SMatthew G. Knepley 11487497f52SBarry Smith `DM_ADAPTATION_REFINE` will uniformly refine a mesh, much like grid sequencing. `DM_ADAPTATION_LABEL` will adapt 11587497f52SBarry Smith the mesh based upon a label of the cells filled with `DMAdaptFlag` markers. `DM_ADAPTATION_METRIC` will try to 116174e7490SMatthew G. Knepley mesh the manifold described by the input metric tensor uniformly. PETSc can also construct such a metric based 117174e7490SMatthew G. Knepley upon an input primal or a gradient field. 118174e7490SMatthew G. Knepley 119db781477SPatrick Sanan .seealso: `DMAdaptorSolve()` 120174e7490SMatthew G. Knepley E*/ 121*9371c9d4SSatish Balay typedef enum { 122*9371c9d4SSatish Balay DM_ADAPTATION_NONE, 123*9371c9d4SSatish Balay DM_ADAPTATION_REFINE, 124*9371c9d4SSatish Balay DM_ADAPTATION_LABEL, 125*9371c9d4SSatish Balay DM_ADAPTATION_METRIC 126*9371c9d4SSatish Balay } DMAdaptationCriterion; 1275675c177SMatthew G. Knepley 1289dc85fa5SMatthew G. Knepley /*E 1299dc85fa5SMatthew G. Knepley DMAdaptFlag - Marker in the label prescribing adaptation 1309dc85fa5SMatthew G. Knepley 1319dc85fa5SMatthew G. Knepley Level: beginner 1329dc85fa5SMatthew G. Knepley 133db781477SPatrick Sanan .seealso: `DMAdaptLabel()` 1349dc85fa5SMatthew G. Knepley E*/ 135*9371c9d4SSatish Balay typedef enum { 136*9371c9d4SSatish Balay DM_ADAPT_DETERMINE = PETSC_DETERMINE, 137*9371c9d4SSatish Balay DM_ADAPT_KEEP = 0, 138*9371c9d4SSatish Balay DM_ADAPT_REFINE, 139*9371c9d4SSatish Balay DM_ADAPT_COARSEN, 140*9371c9d4SSatish Balay DM_ADAPT_COARSEN_LAST, 141*9371c9d4SSatish Balay DM_ADAPT_RESERVED_COUNT 142*9371c9d4SSatish Balay } DMAdaptFlag; 1433ee9839eSMatthew G. Knepley 1443ee9839eSMatthew G. Knepley /*E 1453ee9839eSMatthew G. Knepley DMDirection - Indicates a coordinate direction 1463ee9839eSMatthew G. Knepley 1473ee9839eSMatthew G. Knepley Level: beginner 1483ee9839eSMatthew G. Knepley 149db781477SPatrick Sanan .seealso: `DMDAGetRay()`, `DMDAGetProcessorSubset()`, `DMPlexShearGeometry()` 1503ee9839eSMatthew G. Knepley E*/ 151*9371c9d4SSatish Balay typedef enum { 152*9371c9d4SSatish Balay DM_X, 153*9371c9d4SSatish Balay DM_Y, 154*9371c9d4SSatish Balay DM_Z 155*9371c9d4SSatish Balay } DMDirection; 1569dc85fa5SMatthew G. Knepley 157a6e0b375SMatthew G. Knepley /*E 15887497f52SBarry Smith DMEnclosureType - The type of enclosure relation between one `DM` and another 159a6e0b375SMatthew G. Knepley 160a6e0b375SMatthew G. Knepley Level: beginner 161a6e0b375SMatthew G. Knepley 16287497f52SBarry Smith Notes: 16387497f52SBarry Smith For example, one `DM` dmA may be the boundary of another dmB, in which case it would be labeled `DM_ENC_SUBMESH`. 16487497f52SBarry Smith 16587497f52SBarry Smith If the situation is reversed, and dmA has boundary dmB, it would be labeled `DM_ENC_SUPERMESH`. 16687497f52SBarry Smith 16787497f52SBarry Smith Likewise, if dmA was a subregion of dmB, it would be labeled `DM_ENC_SUBMESH`. 16887497f52SBarry Smith 16987497f52SBarry Smith If no relation can be determined, `DM_ENC_NONE` is used. 17087497f52SBarry Smith 17187497f52SBarry Smith If a relation is not yet known, then `DM_ENC_UNKNOWN` is used. 172a6e0b375SMatthew G. Knepley 173db781477SPatrick Sanan .seealso: `DMGetEnclosureRelation()` 174a6e0b375SMatthew G. Knepley E*/ 175*9371c9d4SSatish Balay typedef enum { 176*9371c9d4SSatish Balay DM_ENC_EQUALITY, 177*9371c9d4SSatish Balay DM_ENC_SUPERMESH, 178*9371c9d4SSatish Balay DM_ENC_SUBMESH, 179*9371c9d4SSatish Balay DM_ENC_NONE, 180*9371c9d4SSatish Balay DM_ENC_UNKNOWN 181*9371c9d4SSatish Balay } DMEnclosureType; 182ba2698f1SMatthew G. Knepley 183ba2698f1SMatthew G. Knepley /*E 184ba2698f1SMatthew G. Knepley DMPolytopeType - This describes the polytope represented by each cell. 185ba2698f1SMatthew G. Knepley 186ba2698f1SMatthew G. Knepley Level: beginner 187ba2698f1SMatthew G. Knepley 18887497f52SBarry Smith While most operations only need the topology information in the `DMPLEX`, we must sometimes have the 189ba2698f1SMatthew G. Knepley user specify a polytope. For instance, when interpolating from a cell-vertex mesh, the type of 19087497f52SBarry Smith polytope can be ambiguous. Also, `DMPLEX` allows different symmetries of a prism cell with the same 191ba2698f1SMatthew G. Knepley constituent points. Normally these types are autoamtically inferred and the user does not specify 192ba2698f1SMatthew G. Knepley them. 193ba2698f1SMatthew G. Knepley 194db781477SPatrick Sanan .seealso: `DMPlexComputeCellTypes()` 195ba2698f1SMatthew G. Knepley E*/ 196*9371c9d4SSatish Balay typedef enum { 197*9371c9d4SSatish Balay DM_POLYTOPE_POINT, 198*9371c9d4SSatish Balay DM_POLYTOPE_SEGMENT, 199*9371c9d4SSatish Balay DM_POLYTOPE_POINT_PRISM_TENSOR, 200*9371c9d4SSatish Balay DM_POLYTOPE_TRIANGLE, 201*9371c9d4SSatish Balay DM_POLYTOPE_QUADRILATERAL, 202*9371c9d4SSatish Balay DM_POLYTOPE_SEG_PRISM_TENSOR, 203*9371c9d4SSatish Balay DM_POLYTOPE_TETRAHEDRON, 204*9371c9d4SSatish Balay DM_POLYTOPE_HEXAHEDRON, 205*9371c9d4SSatish Balay DM_POLYTOPE_TRI_PRISM, 206*9371c9d4SSatish Balay DM_POLYTOPE_TRI_PRISM_TENSOR, 207*9371c9d4SSatish Balay DM_POLYTOPE_QUAD_PRISM_TENSOR, 208*9371c9d4SSatish Balay DM_POLYTOPE_PYRAMID, 209*9371c9d4SSatish Balay DM_POLYTOPE_FV_GHOST, 210*9371c9d4SSatish Balay DM_POLYTOPE_INTERIOR_GHOST, 211*9371c9d4SSatish Balay DM_POLYTOPE_UNKNOWN, 212*9371c9d4SSatish Balay DM_NUM_POLYTOPES 213*9371c9d4SSatish Balay } DMPolytopeType; 214ba2698f1SMatthew G. Knepley PETSC_EXTERN const char *const DMPolytopeTypes[]; 215a6e0b375SMatthew G. Knepley 2169dc85fa5SMatthew G. Knepley /*E 2179dc85fa5SMatthew G. Knepley PetscUnit - The seven fundamental SI units 2189dc85fa5SMatthew G. Knepley 2199dc85fa5SMatthew G. Knepley Level: beginner 2209dc85fa5SMatthew G. Knepley 221db781477SPatrick Sanan .seealso: `DMPlexGetScale()`, `DMPlexSetScale()` 2229dc85fa5SMatthew G. Knepley E*/ 223*9371c9d4SSatish Balay typedef enum { 224*9371c9d4SSatish Balay PETSC_UNIT_LENGTH, 225*9371c9d4SSatish Balay PETSC_UNIT_MASS, 226*9371c9d4SSatish Balay PETSC_UNIT_TIME, 227*9371c9d4SSatish Balay PETSC_UNIT_CURRENT, 228*9371c9d4SSatish Balay PETSC_UNIT_TEMPERATURE, 229*9371c9d4SSatish Balay PETSC_UNIT_AMOUNT, 230*9371c9d4SSatish Balay PETSC_UNIT_LUMINOSITY, 231*9371c9d4SSatish Balay NUM_PETSC_UNITS 232*9371c9d4SSatish Balay } PetscUnit; 2339dc85fa5SMatthew G. Knepley 234b2b58855SToby Isaac /*S 235b2b58855SToby Isaac DMField - PETSc object for defining a field on a mesh topology 236b2b58855SToby Isaac 237b2b58855SToby Isaac Level: intermediate 238b2b58855SToby Isaac S*/ 239b2b58855SToby Isaac typedef struct _p_DMField *DMField; 240b2b58855SToby Isaac 2410fdc7489SMatthew Knepley /*S 24287497f52SBarry Smith DMUniversalLabel - A label that encodes a set of `DMLabel`s, bijectively 2430fdc7489SMatthew Knepley 2440fdc7489SMatthew Knepley Level: developer 2450fdc7489SMatthew Knepley S*/ 2460fdc7489SMatthew Knepley typedef struct _p_UniversalLabel *DMUniversalLabel; 2470fdc7489SMatthew Knepley 248c0517cd5SMatthew G. Knepley typedef struct _n_DMGeneratorFunctionList *DMGeneratorFunctionList; 249c0517cd5SMatthew G. Knepley 2501e25c274SJed Brown #endif 251