xref: /petsc/include/petscdmtypes.h (revision 9dc85fa5ff4b0c5021ec2bcc836eb1e7b7a26685)
11e25c274SJed Brown #if !defined(_PETSCDMTYPES_H)
21e25c274SJed Brown #define _PETSCDMTYPES_H
31e25c274SJed Brown 
41e25c274SJed Brown /*S
51e25c274SJed Brown      DM - Abstract PETSc object that manages an abstract grid object and its interactions with the algebraic solvers
61e25c274SJed Brown 
71e25c274SJed Brown    Level: intermediate
81e25c274SJed Brown 
91e25c274SJed Brown   Concepts: grids, grid refinement
101e25c274SJed Brown 
111e25c274SJed Brown    Notes: The DMDACreate() based object and the DMCompositeCreate() based object are examples of DMs
121e25c274SJed Brown 
131e25c274SJed Brown .seealso:  DMCompositeCreate(), DMDACreate(), DMSetType(), DMType
141e25c274SJed Brown S*/
151e25c274SJed Brown typedef struct _p_DM* DM;
161e25c274SJed Brown 
17bff4a2f0SMatthew G. Knepley /*E
18bff4a2f0SMatthew G. Knepley   DMBoundaryType - Describes the choice for fill of ghost cells on physical domain boundaries.
19bff4a2f0SMatthew G. Knepley 
20bff4a2f0SMatthew G. Knepley   Level: beginner
21bff4a2f0SMatthew G. Knepley 
22619efd4aSMatthew G. Knepley   A boundary may be of type DM_BOUNDARY_NONE (no ghost nodes), DM_BOUNDARY_GHOSTED (ghost vertices/cells
23bff4a2f0SMatthew G. Knepley   exist but aren't filled, you can put values into them and then apply a stencil that uses those ghost locations),
24288e7d53SBarry 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;
25288e7d53SBarry Smith   not yet implemented for 3d), DM_BOUNDARY_PERIODIC (ghost vertices/cells filled by the opposite
26bff4a2f0SMatthew G. Knepley   edge of the domain), or DM_BOUNDARY_TWIST (like periodic, only glued backwards like a Mobius strip).
27bff4a2f0SMatthew G. Knepley 
28bff4a2f0SMatthew G. Knepley   Note: This is information for the boundary of the __PHYSICAL__ domain. It has nothing to do with boundaries between
29bff4a2f0SMatthew G. Knepley   processes, that width is always determined by the stencil width, see DMDASetStencilWidth().
30bff4a2f0SMatthew G. Knepley 
31288e7d53SBarry Smith   Note: 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
32288e7d53SBarry Smith 
33288e7d53SBarry Smith   Developer notes: 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 
36288e7d53SBarry Smith   References: http://scicomp.stackexchange.com/questions/5355/writing-the-poisson-equation-finite-difference-matrix-with-neumann-boundary-cond
37288e7d53SBarry Smith 
38bff4a2f0SMatthew G. Knepley .seealso: DMDASetBoundaryType(), DMDACreate1d(), DMDACreate2d(), DMDACreate3d(), DMDACreate()
39bff4a2f0SMatthew G. Knepley E*/
40bff4a2f0SMatthew G. Knepley typedef enum {DM_BOUNDARY_NONE, DM_BOUNDARY_GHOSTED, DM_BOUNDARY_MIRROR, DM_BOUNDARY_PERIODIC, DM_BOUNDARY_TWIST} DMBoundaryType;
41bff4a2f0SMatthew G. Knepley 
4262a38674SMatthew G. Knepley /*E
43*9dc85fa5SMatthew G. Knepley   DMBoundaryConditionType - indicates what type of boundary condition is to be imposed
44*9dc85fa5SMatthew G. Knepley 
45*9dc85fa5SMatthew G. Knepley   Note: This flag indicates the type of function which will define the condition:
46*9dc85fa5SMatthew G. Knepley $ DM_BC_ESSENTIAL       - A Dirichlet condition using a function of the coordinates
47*9dc85fa5SMatthew G. Knepley $ DM_BC_ESSENTIAL_FIELD - A Dirichlet condition using a function of the coordinates and auxiliary field data
48*9dc85fa5SMatthew G. Knepley $ DM_BC_NATURAL         - A Neumann condition using a function of the coordinates
49*9dc85fa5SMatthew G. Knepley $ DM_BC_NATURAL_FIELD   - A Dirichlet condition using a function of the coordinates and auxiliary field data
50*9dc85fa5SMatthew G. Knepley $ DM_BC_NATURAL_RIEMANN - A flux condition which determines the state in ghost cells
51*9dc85fa5SMatthew G. Knepley The user can check whether a boundary condition is essential using (type & DM_BC_ESSENTIAL), and similarly for
52*9dc85fa5SMatthew G. Knepley natural conditions (type & DM_BC_NATURAL)
53*9dc85fa5SMatthew G. Knepley 
54*9dc85fa5SMatthew G. Knepley   Level: beginner
55*9dc85fa5SMatthew G. Knepley 
56*9dc85fa5SMatthew G. Knepley .seealso: DMAddBoundary(), DMGetBoundary()
57*9dc85fa5SMatthew G. Knepley E*/
58*9dc85fa5SMatthew G. Knepley typedef enum {DM_BC_ESSENTIAL = 1, DM_BC_ESSENTIAL_FIELD = 5, DM_BC_NATURAL = 2, DM_BC_NATURAL_FIELD = 6, DM_BC_NATURAL_RIEMANN = 10} DMBoundaryConditionType;
59*9dc85fa5SMatthew G. Knepley 
60*9dc85fa5SMatthew G. Knepley /*E
6162a38674SMatthew G. Knepley   DMPointLocationType - Describes the method to handle point location failure
6262a38674SMatthew G. Knepley 
6362a38674SMatthew G. Knepley   Level: beginner
6462a38674SMatthew G. Knepley 
6562a38674SMatthew G. Knepley   If a search using DM_POINTLOCATION_NONE fails, the failure is signaled with a negative cell number. On the
6662a38674SMatthew G. Knepley   other hand, if DM_POINTLOCATION_NEAREST is used, on failure, the (approximate) nearest point in the mesh is
672d1fa6caSMatthew G. Knepley   used, replacing the given point in the input vector. DM_POINTLOCATION_REMOVE returns values only for points
682d1fa6caSMatthew G. Knepley   which were located.
6962a38674SMatthew G. Knepley 
7062a38674SMatthew G. Knepley .seealso: DMLocatePoints()
7162a38674SMatthew G. Knepley E*/
722d1fa6caSMatthew G. Knepley typedef enum {DM_POINTLOCATION_NONE, DM_POINTLOCATION_NEAREST, DM_POINTLOCATION_REMOVE} DMPointLocationType;
7362a38674SMatthew G. Knepley 
745675c177SMatthew G. Knepley /*E
755675c177SMatthew G. Knepley   DMAdaptationType - Describes the strategy used for adaptive solves
765675c177SMatthew G. Knepley 
775675c177SMatthew G. Knepley   Level: beginner
785675c177SMatthew G. Knepley 
795675c177SMatthew G. Knepley   If a search using DM_POINTLOCATION_NONE fails, the failure is signaled with a negative cell number. On the
805675c177SMatthew G. Knepley   other hand, if DM_POINTLOCATION_NEAREST is used, on failure, the (approximate) nearest point in the mesh is
815675c177SMatthew G. Knepley   used, replacing the given point in the input vector. DM_POINTLOCATION_REMOVE returns values only for points
825675c177SMatthew G. Knepley   which were located.
835675c177SMatthew G. Knepley 
845675c177SMatthew G. Knepley .seealso: DMAdaptorSolve()
855675c177SMatthew G. Knepley E*/
865675c177SMatthew G. Knepley typedef enum {DM_ADAPTATION_INITIAL, DM_ADAPTATION_SEQUENTIAL, DM_ADAPTATION_MULTILEVEL} DMAdaptationType;
875675c177SMatthew G. Knepley 
88*9dc85fa5SMatthew G. Knepley /*E
89*9dc85fa5SMatthew G. Knepley   DMAdaptFlag - Marker in the label prescribing adaptation
90*9dc85fa5SMatthew G. Knepley 
91*9dc85fa5SMatthew G. Knepley   Level: beginner
92*9dc85fa5SMatthew G. Knepley 
93*9dc85fa5SMatthew G. Knepley .seealso: DMAdaptLabel()
94*9dc85fa5SMatthew G. Knepley E*/
95*9dc85fa5SMatthew G. Knepley typedef enum {DM_ADAPT_DETERMINE = PETSC_DETERMINE, DM_ADAPT_KEEP = 0, DM_ADAPT_REFINE, DM_ADAPT_COARSEN, DM_ADAPT_RESERVED_COUNT} DMAdaptFlag;
96*9dc85fa5SMatthew G. Knepley 
9777623264SMatthew G. Knepley /*S
9877623264SMatthew G. Knepley   PetscPartitioner - PETSc object that manages a graph partitioner
9977623264SMatthew G. Knepley 
10077623264SMatthew G. Knepley   Level: intermediate
10177623264SMatthew G. Knepley 
10277623264SMatthew G. Knepley   Concepts: partition, mesh
10377623264SMatthew G. Knepley 
10477623264SMatthew G. Knepley .seealso: PetscPartitionerCreate(), PetscPartitionerSetType(), PetscPartitionerType
10577623264SMatthew G. Knepley S*/
10677623264SMatthew G. Knepley typedef struct _p_PetscPartitioner *PetscPartitioner;
10777623264SMatthew G. Knepley 
108*9dc85fa5SMatthew G. Knepley /*E
109*9dc85fa5SMatthew G. Knepley   PetscUnit - The seven fundamental SI units
110*9dc85fa5SMatthew G. Knepley 
111*9dc85fa5SMatthew G. Knepley   Level: beginner
112*9dc85fa5SMatthew G. Knepley 
113*9dc85fa5SMatthew G. Knepley .seealso: DMPlexGetScale(), DMPlexSetScale()
114*9dc85fa5SMatthew G. Knepley E*/
115*9dc85fa5SMatthew 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;
116*9dc85fa5SMatthew G. Knepley 
1171e25c274SJed Brown #endif
118