xref: /petsc/include/petscdmtypes.h (revision ac09b9214d23ea9ad238aa607de9fa447fd4e91b)
126bd1501SBarry Smith #if !defined(PETSCDMTYPES_H)
226bd1501SBarry Smith #define PETSCDMTYPES_H
31e25c274SJed Brown 
4*ac09b921SBarry Smith /* SUBMANSEC = DM */
5*ac09b921SBarry 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 
1195452b02SPatrick Sanan    Notes:
1295452b02SPatrick Sanan     The DMDACreate() based object and the DMCompositeCreate() based object are examples of DMs
131e25c274SJed Brown 
14db781477SPatrick Sanan .seealso: `DMCompositeCreate()`, `DMDACreate()`, `DMSetType()`, `DMType`
151e25c274SJed Brown S*/
161e25c274SJed Brown typedef struct _p_DM* DM;
171e25c274SJed Brown 
18bff4a2f0SMatthew G. Knepley /*E
19bff4a2f0SMatthew G. Knepley   DMBoundaryType - Describes the choice for fill of ghost cells on physical domain boundaries.
20bff4a2f0SMatthew G. Knepley 
21bff4a2f0SMatthew G. Knepley   Level: beginner
22bff4a2f0SMatthew G. Knepley 
23619efd4aSMatthew G. Knepley   A boundary may be of type DM_BOUNDARY_NONE (no ghost nodes), DM_BOUNDARY_GHOSTED (ghost vertices/cells
24dbb368e6SPatrick Sanan   exist but aren't filled; you can put values into them and then apply a stencil that uses those ghost locations),
25dbb368e6SPatrick Sanan   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;
26288e7d53SBarry Smith   not yet implemented for 3d), DM_BOUNDARY_PERIODIC (ghost vertices/cells filled by the opposite
27bff4a2f0SMatthew G. Knepley   edge of the domain), or DM_BOUNDARY_TWIST (like periodic, only glued backwards like a Mobius strip).
28bff4a2f0SMatthew G. Knepley 
29dbb368e6SPatrick Sanan   Notes:
30dbb368e6SPatrick Sanan   This is information for the boundary of the __PHYSICAL__ domain. It has nothing to do with boundaries between
31dbb368e6SPatrick Sanan   processes. That width is always determined by the stencil width; see DMDASetStencilWidth().
32bff4a2f0SMatthew G. Knepley 
33dbb368e6SPatrick Sanan   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 .
34288e7d53SBarry Smith 
3595452b02SPatrick Sanan   Developer Notes:
3695452b02SPatrick Sanan     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
37288e7d53SBarry Smith   as the 0th grid point where the physical boundary serves as the mirror?
38288e7d53SBarry Smith 
39dbb368e6SPatrick Sanan   References:
40606c0280SSatish Balay . * -  https://scicomp.stackexchange.com/questions/5355/writing-the-poisson-equation-finite-difference-matrix-with-neumann-boundary-cond
41288e7d53SBarry Smith 
42db781477SPatrick Sanan .seealso: `DMDASetBoundaryType()`, `DMDACreate1d()`, `DMDACreate2d()`, `DMDACreate3d()`, `DMDACreate()`
43bff4a2f0SMatthew G. Knepley E*/
44bff4a2f0SMatthew G. Knepley typedef enum {DM_BOUNDARY_NONE, DM_BOUNDARY_GHOSTED, DM_BOUNDARY_MIRROR, DM_BOUNDARY_PERIODIC, DM_BOUNDARY_TWIST} DMBoundaryType;
4562a38674SMatthew G. Knepley /*E
469dc85fa5SMatthew G. Knepley   DMBoundaryConditionType - indicates what type of boundary condition is to be imposed
479dc85fa5SMatthew G. Knepley 
489dc85fa5SMatthew G. Knepley   Note: This flag indicates the type of function which will define the condition:
499dc85fa5SMatthew G. Knepley $ DM_BC_ESSENTIAL       - A Dirichlet condition using a function of the coordinates
509dc85fa5SMatthew G. Knepley $ DM_BC_ESSENTIAL_FIELD - A Dirichlet condition using a function of the coordinates and auxiliary field data
51b18799e0SMatthew G. Knepley $ DM_BC_ESSENTIAL_BD_FIELD - A Dirichlet condition using a function of the coordinates, facet normal, and auxiliary field data
529dc85fa5SMatthew G. Knepley $ DM_BC_NATURAL         - A Neumann condition using a function of the coordinates
53b18799e0SMatthew G. Knepley $ DM_BC_NATURAL_FIELD   - A Neumann condition using a function of the coordinates and auxiliary field data
549dc85fa5SMatthew G. Knepley $ DM_BC_NATURAL_RIEMANN - A flux condition which determines the state in ghost cells
559dc85fa5SMatthew G. Knepley The user can check whether a boundary condition is essential using (type & DM_BC_ESSENTIAL), and similarly for
569dc85fa5SMatthew G. Knepley natural conditions (type & DM_BC_NATURAL)
579dc85fa5SMatthew G. Knepley 
589dc85fa5SMatthew G. Knepley   Level: beginner
599dc85fa5SMatthew G. Knepley 
60db781477SPatrick Sanan .seealso: `DMAddBoundary()`, `DSAddBoundary()`, `DSGetBoundary()`
619dc85fa5SMatthew G. Knepley E*/
62b18799e0SMatthew G. Knepley typedef enum {DM_BC_ESSENTIAL = 1, DM_BC_ESSENTIAL_FIELD = 5, DM_BC_NATURAL = 2, DM_BC_NATURAL_FIELD = 6, DM_BC_ESSENTIAL_BD_FIELD = 9, DM_BC_NATURAL_RIEMANN = 10} DMBoundaryConditionType;
639dc85fa5SMatthew G. Knepley 
649dc85fa5SMatthew G. Knepley /*E
6562a38674SMatthew G. Knepley   DMPointLocationType - Describes the method to handle point location failure
6662a38674SMatthew G. Knepley 
6762a38674SMatthew G. Knepley   Level: beginner
6862a38674SMatthew G. Knepley 
6962a38674SMatthew G. Knepley   If a search using DM_POINTLOCATION_NONE fails, the failure is signaled with a negative cell number. On the
7062a38674SMatthew G. Knepley   other hand, if DM_POINTLOCATION_NEAREST is used, on failure, the (approximate) nearest point in the mesh is
712d1fa6caSMatthew G. Knepley   used, replacing the given point in the input vector. DM_POINTLOCATION_REMOVE returns values only for points
722d1fa6caSMatthew G. Knepley   which were located.
7362a38674SMatthew G. Knepley 
74db781477SPatrick Sanan .seealso: `DMLocatePoints()`
7562a38674SMatthew G. Knepley E*/
762d1fa6caSMatthew G. Knepley typedef enum {DM_POINTLOCATION_NONE, DM_POINTLOCATION_NEAREST, DM_POINTLOCATION_REMOVE} DMPointLocationType;
7762a38674SMatthew G. Knepley 
785675c177SMatthew G. Knepley /*E
79174e7490SMatthew G. Knepley   DMAdaptationStrategy - Describes the strategy used for adaptive solves
805675c177SMatthew G. Knepley 
815675c177SMatthew G. Knepley   Level: beginner
825675c177SMatthew G. Knepley 
8359b28e79SMatthew G. Knepley   DM_ADAPTATION_INITIAL will refine a mesh based on an initial guess. DM_ADAPTATION_SEQUENTIAL will refine the
8459b28e79SMatthew G. Knepley   mesh based on a sequence of solves, much like grid sequencing. DM_ADAPTATION_MULTILEVEL will use the sequence
8559b28e79SMatthew G. Knepley   of constructed meshes in a multilevel solve, much like the Systematic Upscaling of Brandt.
865675c177SMatthew G. Knepley 
87db781477SPatrick Sanan .seealso: `DMAdaptorSolve()`
885675c177SMatthew G. Knepley E*/
89174e7490SMatthew G. Knepley typedef enum {DM_ADAPTATION_INITIAL, DM_ADAPTATION_SEQUENTIAL, DM_ADAPTATION_MULTILEVEL} DMAdaptationStrategy;
90174e7490SMatthew G. Knepley 
91174e7490SMatthew G. Knepley /*E
92174e7490SMatthew G. Knepley   DMAdaptationCriterion - Describes the test used to decide whether to coarsen or refine parts of the mesh
93174e7490SMatthew G. Knepley 
94174e7490SMatthew G. Knepley   Level: beginner
95174e7490SMatthew G. Knepley 
96174e7490SMatthew G. Knepley   DM_ADAPTATION_REFINE will uniformly refine a mesh, much like grid sequencing. DM_ADAPTATION_LABEL will adapt
97174e7490SMatthew G. Knepley   the mesh based upon a label of the cells filled with DMAdaptFlag markers. DM_ADAPTATION_METRIC will try to
98174e7490SMatthew G. Knepley   mesh the manifold described by the input metric tensor uniformly. PETSc can also construct such a metric based
99174e7490SMatthew G. Knepley   upon an input primal or a gradient field.
100174e7490SMatthew G. Knepley 
101db781477SPatrick Sanan .seealso: `DMAdaptorSolve()`
102174e7490SMatthew G. Knepley E*/
103174e7490SMatthew G. Knepley typedef enum {DM_ADAPTATION_NONE, DM_ADAPTATION_REFINE, DM_ADAPTATION_LABEL, DM_ADAPTATION_METRIC} DMAdaptationCriterion;
1045675c177SMatthew G. Knepley 
1059dc85fa5SMatthew G. Knepley /*E
1069dc85fa5SMatthew G. Knepley   DMAdaptFlag - Marker in the label prescribing adaptation
1079dc85fa5SMatthew G. Knepley 
1089dc85fa5SMatthew G. Knepley   Level: beginner
1099dc85fa5SMatthew G. Knepley 
110db781477SPatrick Sanan .seealso: `DMAdaptLabel()`
1119dc85fa5SMatthew G. Knepley E*/
112bf2d5fbbSStefano Zampini typedef enum {DM_ADAPT_DETERMINE = PETSC_DETERMINE, DM_ADAPT_KEEP = 0, DM_ADAPT_REFINE, DM_ADAPT_COARSEN, DM_ADAPT_COARSEN_LAST, DM_ADAPT_RESERVED_COUNT} DMAdaptFlag;
1133ee9839eSMatthew G. Knepley 
1143ee9839eSMatthew G. Knepley /*E
1153ee9839eSMatthew G. Knepley   DMDirection - Indicates a coordinate direction
1163ee9839eSMatthew G. Knepley 
1173ee9839eSMatthew G. Knepley   Level: beginner
1183ee9839eSMatthew G. Knepley 
119db781477SPatrick Sanan .seealso: `DMDAGetRay()`, `DMDAGetProcessorSubset()`, `DMPlexShearGeometry()`
1203ee9839eSMatthew G. Knepley E*/
1213ee9839eSMatthew G. Knepley typedef enum {DM_X, DM_Y, DM_Z} DMDirection;
1229dc85fa5SMatthew G. Knepley 
123a6e0b375SMatthew G. Knepley /*E
124a6e0b375SMatthew G. Knepley DMEnclosureType - The type of enclosure relation between one DM and another
125a6e0b375SMatthew G. Knepley 
126a6e0b375SMatthew G. Knepley Level: beginner
127a6e0b375SMatthew G. Knepley 
128a6e0b375SMatthew G. Knepley For example, one DM dmA may be the boundary of another dmB, in which case it would be labeled DM_ENC_SUBMESH. If
129a6e0b375SMatthew G. Knepley the situation is reversed, and dmA has boundary dmB, it would be labeled DM_ENC_SUPERMESH. Likewise, if dmA was
130a6e0b375SMatthew G. Knepley a subregion of dmB, it would be labeled DM_ENC_SUBMESH. If no relation can be determined, DM_ENC_NONE is used.
131a6e0b375SMatthew G. Knepley If a relation is not yet known, then DM_ENC_UNKNOWN is used.
132a6e0b375SMatthew G. Knepley 
133db781477SPatrick Sanan .seealso: `DMGetEnclosureRelation()`
134a6e0b375SMatthew G. Knepley E*/
135a6e0b375SMatthew G. Knepley typedef enum {DM_ENC_EQUALITY, DM_ENC_SUPERMESH, DM_ENC_SUBMESH, DM_ENC_NONE, DM_ENC_UNKNOWN} DMEnclosureType;
136ba2698f1SMatthew G. Knepley 
137ba2698f1SMatthew G. Knepley /*E
138ba2698f1SMatthew G. Knepley   DMPolytopeType - This describes the polytope represented by each cell.
139ba2698f1SMatthew G. Knepley 
140ba2698f1SMatthew G. Knepley   Level: beginner
141ba2698f1SMatthew G. Knepley 
142ba2698f1SMatthew G. Knepley   While most operations only need the topology information in the Plex, we must sometimes have the
143ba2698f1SMatthew G. Knepley   user specify a polytope. For instance, when interpolating from a cell-vertex mesh, the type of
144ba2698f1SMatthew G. Knepley   polytope can be ambiguous. Also, Plex allows different symmetries of prism cell with the same
145ba2698f1SMatthew G. Knepley   constituent points. Normally these types are autoamtically inferred and the user does not specify
146ba2698f1SMatthew G. Knepley   them.
147ba2698f1SMatthew G. Knepley 
148db781477SPatrick Sanan .seealso: `DMPlexComputeCellTypes()`
149ba2698f1SMatthew G. Knepley E*/
150da9060c4SMatthew G. Knepley typedef enum {DM_POLYTOPE_POINT, DM_POLYTOPE_SEGMENT, DM_POLYTOPE_POINT_PRISM_TENSOR, DM_POLYTOPE_TRIANGLE, DM_POLYTOPE_QUADRILATERAL, DM_POLYTOPE_SEG_PRISM_TENSOR, DM_POLYTOPE_TETRAHEDRON, DM_POLYTOPE_HEXAHEDRON, DM_POLYTOPE_TRI_PRISM, DM_POLYTOPE_TRI_PRISM_TENSOR, DM_POLYTOPE_QUAD_PRISM_TENSOR, DM_POLYTOPE_PYRAMID, DM_POLYTOPE_FV_GHOST, DM_POLYTOPE_INTERIOR_GHOST, DM_POLYTOPE_UNKNOWN, DM_NUM_POLYTOPES} DMPolytopeType;
151ba2698f1SMatthew G. Knepley PETSC_EXTERN const char *const DMPolytopeTypes[];
152a6e0b375SMatthew G. Knepley 
1539dc85fa5SMatthew G. Knepley /*E
1549dc85fa5SMatthew G. Knepley   PetscUnit - The seven fundamental SI units
1559dc85fa5SMatthew G. Knepley 
1569dc85fa5SMatthew G. Knepley   Level: beginner
1579dc85fa5SMatthew G. Knepley 
158db781477SPatrick Sanan .seealso: `DMPlexGetScale()`, `DMPlexSetScale()`
1599dc85fa5SMatthew G. Knepley E*/
1609dc85fa5SMatthew G. Knepley typedef enum {PETSC_UNIT_LENGTH, PETSC_UNIT_MASS, PETSC_UNIT_TIME, PETSC_UNIT_CURRENT, PETSC_UNIT_TEMPERATURE, PETSC_UNIT_AMOUNT, PETSC_UNIT_LUMINOSITY, NUM_PETSC_UNITS} PetscUnit;
1619dc85fa5SMatthew G. Knepley 
162b2b58855SToby Isaac /*S
163b2b58855SToby Isaac     DMField - PETSc object for defining a field on a mesh topology
164b2b58855SToby Isaac 
165b2b58855SToby Isaac     Level: intermediate
166b2b58855SToby Isaac S*/
167b2b58855SToby Isaac typedef struct _p_DMField* DMField;
168b2b58855SToby Isaac 
1690fdc7489SMatthew Knepley /*S
1700fdc7489SMatthew Knepley     DMUniversalLabel - A label that encodes a set of DMLabels, bijectively
1710fdc7489SMatthew Knepley 
1720fdc7489SMatthew Knepley     Level: developer
1730fdc7489SMatthew Knepley S*/
1740fdc7489SMatthew Knepley typedef struct _p_UniversalLabel* DMUniversalLabel;
1750fdc7489SMatthew Knepley 
176c0517cd5SMatthew G. Knepley typedef struct _n_DMGeneratorFunctionList *DMGeneratorFunctionList;
177c0517cd5SMatthew G. Knepley 
1781e25c274SJed Brown #endif
179