16524c165SJacob Faibussowitsch #ifndef 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 11*dce8aebaSBarry Smith .seealso: `DMType`, `DMGetType()`, `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*/ 419371c9d4SSatish Balay typedef enum { 429371c9d4SSatish Balay DM_BOUNDARY_NONE, 439371c9d4SSatish Balay DM_BOUNDARY_GHOSTED, 449371c9d4SSatish Balay DM_BOUNDARY_MIRROR, 459371c9d4SSatish Balay DM_BOUNDARY_PERIODIC, 469371c9d4SSatish Balay DM_BOUNDARY_TWIST 479371c9d4SSatish 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*/ 659371c9d4SSatish Balay typedef enum { 669371c9d4SSatish Balay DM_BC_ESSENTIAL = 1, 679371c9d4SSatish Balay DM_BC_ESSENTIAL_FIELD = 5, 689371c9d4SSatish Balay DM_BC_NATURAL = 2, 699371c9d4SSatish Balay DM_BC_NATURAL_FIELD = 6, 709371c9d4SSatish Balay DM_BC_ESSENTIAL_BD_FIELD = 9, 719371c9d4SSatish Balay DM_BC_NATURAL_RIEMANN = 10 729371c9d4SSatish 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*/ 869371c9d4SSatish Balay typedef enum { 879371c9d4SSatish Balay DM_POINTLOCATION_NONE, 889371c9d4SSatish Balay DM_POINTLOCATION_NEAREST, 899371c9d4SSatish Balay DM_POINTLOCATION_REMOVE 909371c9d4SSatish 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*/ 1039371c9d4SSatish Balay typedef enum { 1049371c9d4SSatish Balay DM_ADAPTATION_INITIAL, 1059371c9d4SSatish Balay DM_ADAPTATION_SEQUENTIAL, 1069371c9d4SSatish Balay DM_ADAPTATION_MULTILEVEL 1079371c9d4SSatish 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*/ 1219371c9d4SSatish Balay typedef enum { 1229371c9d4SSatish Balay DM_ADAPTATION_NONE, 1239371c9d4SSatish Balay DM_ADAPTATION_REFINE, 1249371c9d4SSatish Balay DM_ADAPTATION_LABEL, 1259371c9d4SSatish Balay DM_ADAPTATION_METRIC 1269371c9d4SSatish 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*/ 1359371c9d4SSatish Balay typedef enum { 1369371c9d4SSatish Balay DM_ADAPT_DETERMINE = PETSC_DETERMINE, 1379371c9d4SSatish Balay DM_ADAPT_KEEP = 0, 1389371c9d4SSatish Balay DM_ADAPT_REFINE, 1399371c9d4SSatish Balay DM_ADAPT_COARSEN, 1409371c9d4SSatish Balay DM_ADAPT_COARSEN_LAST, 1419371c9d4SSatish Balay DM_ADAPT_RESERVED_COUNT 1429371c9d4SSatish 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*/ 1519371c9d4SSatish Balay typedef enum { 1529371c9d4SSatish Balay DM_X, 1539371c9d4SSatish Balay DM_Y, 1549371c9d4SSatish Balay DM_Z 1559371c9d4SSatish 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*/ 1759371c9d4SSatish Balay typedef enum { 1769371c9d4SSatish Balay DM_ENC_EQUALITY, 1779371c9d4SSatish Balay DM_ENC_SUPERMESH, 1789371c9d4SSatish Balay DM_ENC_SUBMESH, 1799371c9d4SSatish Balay DM_ENC_NONE, 1809371c9d4SSatish Balay DM_ENC_UNKNOWN 1819371c9d4SSatish 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*/ 1969371c9d4SSatish Balay typedef enum { 1979371c9d4SSatish Balay DM_POLYTOPE_POINT, 1989371c9d4SSatish Balay DM_POLYTOPE_SEGMENT, 1999371c9d4SSatish Balay DM_POLYTOPE_POINT_PRISM_TENSOR, 2009371c9d4SSatish Balay DM_POLYTOPE_TRIANGLE, 2019371c9d4SSatish Balay DM_POLYTOPE_QUADRILATERAL, 2029371c9d4SSatish Balay DM_POLYTOPE_SEG_PRISM_TENSOR, 2039371c9d4SSatish Balay DM_POLYTOPE_TETRAHEDRON, 2049371c9d4SSatish Balay DM_POLYTOPE_HEXAHEDRON, 2059371c9d4SSatish Balay DM_POLYTOPE_TRI_PRISM, 2069371c9d4SSatish Balay DM_POLYTOPE_TRI_PRISM_TENSOR, 2079371c9d4SSatish Balay DM_POLYTOPE_QUAD_PRISM_TENSOR, 2089371c9d4SSatish Balay DM_POLYTOPE_PYRAMID, 2099371c9d4SSatish Balay DM_POLYTOPE_FV_GHOST, 2109371c9d4SSatish Balay DM_POLYTOPE_INTERIOR_GHOST, 2119371c9d4SSatish Balay DM_POLYTOPE_UNKNOWN, 2129371c9d4SSatish Balay DM_NUM_POLYTOPES 2139371c9d4SSatish 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*/ 2239371c9d4SSatish Balay typedef enum { 2249371c9d4SSatish Balay PETSC_UNIT_LENGTH, 2259371c9d4SSatish Balay PETSC_UNIT_MASS, 2269371c9d4SSatish Balay PETSC_UNIT_TIME, 2279371c9d4SSatish Balay PETSC_UNIT_CURRENT, 2289371c9d4SSatish Balay PETSC_UNIT_TEMPERATURE, 2299371c9d4SSatish Balay PETSC_UNIT_AMOUNT, 2309371c9d4SSatish Balay PETSC_UNIT_LUMINOSITY, 2319371c9d4SSatish Balay NUM_PETSC_UNITS 2329371c9d4SSatish 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