xref: /petsc/include/petscdm.h (revision a8a8f36618f536eff5e4c1df78b3fdf9dd5d254e)
1 /*
2       Objects to manage the interactions between the mesh data structures and the algebraic objects
3 */
4 #if !defined(__PETSCDM_H)
5 #define __PETSCDM_H
6 #include <petscmat.h>
7 
8 PETSC_EXTERN PetscErrorCode DMInitializePackage(const char[]);
9 /*S
10      DM - Abstract PETSc object that manages an abstract grid object
11 
12    Level: intermediate
13 
14   Concepts: grids, grid refinement
15 
16    Notes: The DMDACreate() based object and the DMCompositeCreate() based object are examples of DMs
17 
18           Though the DM objects require the petscsnes.h include files the DM library is
19     NOT dependent on the SNES or KSP library. In fact, the KSP and SNES libraries depend on
20     DM. (This is not great design, but not trivial to fix).
21 
22 .seealso:  DMCompositeCreate(), DMDACreate()
23 S*/
24 typedef struct _p_DM* DM;
25 
26 PETSC_EXTERN PetscClassId DM_CLASSID;
27 
28 /*J
29     DMType - String with the name of a PETSc DM or the creation function
30        with an optional dynamic library name, for example
31        http://www.mcs.anl.gov/petsc/lib.a:myveccreate()
32 
33    Level: beginner
34 
35 .seealso: DMSetType(), DM
36 J*/
37 #define DMType char*
38 #define DMDA        "da"
39 #define DMADDA      "adda"
40 #define DMCOMPOSITE "composite"
41 #define DMSLICED    "sliced"
42 #define DMSHELL     "shell"
43 #define DMMESH      "mesh"
44 #define DMCOMPLEX   "complex"
45 #define DMCARTESIAN "cartesian"
46 #define DMIGA       "iga"
47 #define DMREDUNDANT "redundant"
48 #define DMAKKT      "akkt"
49 
50 PETSC_EXTERN PetscFList DMList;
51 PETSC_EXTERN PetscBool DMRegisterAllCalled;
52 PETSC_EXTERN PetscErrorCode DMCreate(MPI_Comm,DM*);
53 PETSC_EXTERN PetscErrorCode DMSetType(DM, const DMType);
54 PETSC_EXTERN PetscErrorCode DMGetType(DM, const DMType *);
55 PETSC_EXTERN PetscErrorCode DMRegister(const char[],const char[],const char[],PetscErrorCode (*)(DM));
56 PETSC_EXTERN PetscErrorCode DMRegisterAll(const char []);
57 PETSC_EXTERN PetscErrorCode DMRegisterDestroy(void);
58 
59 
60 /*MC
61   DMRegisterDynamic - Adds a new DM component implementation
62 
63   Synopsis:
64   PetscErrorCode DMRegisterDynamic(const char *name,const char *path,const char *func_name, PetscErrorCode (*create_func)(DM))
65 
66   Not Collective
67 
68   Input Parameters:
69 + name        - The name of a new user-defined creation routine
70 . path        - The path (either absolute or relative) of the library containing this routine
71 . func_name   - The name of routine to create method context
72 - create_func - The creation routine itself
73 
74   Notes:
75   DMRegisterDynamic() may be called multiple times to add several user-defined DMs
76 
77   If dynamic libraries are used, then the fourth input argument (routine_create) is ignored.
78 
79   Sample usage:
80 .vb
81     DMRegisterDynamic("my_da","/home/username/my_lib/lib/libO/solaris/libmy.a", "MyDMCreate", MyDMCreate);
82 .ve
83 
84   Then, your DM type can be chosen with the procedural interface via
85 .vb
86     DMCreate(MPI_Comm, DM *);
87     DMSetType(DM,"my_da_name");
88 .ve
89    or at runtime via the option
90 .vb
91     -da_type my_da_name
92 .ve
93 
94   Notes: $PETSC_ARCH occuring in pathname will be replaced with appropriate values.
95          If your function is not being put into a shared library then use DMRegister() instead
96 
97   Level: advanced
98 
99 .keywords: DM, register
100 .seealso: DMRegisterAll(), DMRegisterDestroy(), DMRegister()
101 M*/
102 #if defined(PETSC_USE_DYNAMIC_LIBRARIES)
103 #define DMRegisterDynamic(a,b,c,d) DMRegister(a,b,c,0)
104 #else
105 #define DMRegisterDynamic(a,b,c,d) DMRegister(a,b,c,d)
106 #endif
107 
108 PETSC_EXTERN PetscErrorCode DMView(DM,PetscViewer);
109 PETSC_EXTERN PetscErrorCode DMLoad(DM,PetscViewer);
110 PETSC_EXTERN PetscErrorCode DMDestroy(DM*);
111 PETSC_EXTERN PetscErrorCode DMCreateGlobalVector(DM,Vec*);
112 PETSC_EXTERN PetscErrorCode DMCreateLocalVector(DM,Vec*);
113 PETSC_EXTERN PetscErrorCode DMGetLocalVector(DM,Vec *);
114 PETSC_EXTERN PetscErrorCode DMRestoreLocalVector(DM,Vec *);
115 PETSC_EXTERN PetscErrorCode DMGetGlobalVector(DM,Vec *);
116 PETSC_EXTERN PetscErrorCode DMRestoreGlobalVector(DM,Vec *);
117 PETSC_EXTERN PetscErrorCode DMClearGlobalVectors(DM);
118 PETSC_EXTERN PetscErrorCode DMGetNamedGlobalVector(DM,const char*,Vec*);
119 PETSC_EXTERN PetscErrorCode DMRestoreNamedGlobalVector(DM,const char*,Vec*);
120 PETSC_EXTERN PetscErrorCode DMGetLocalToGlobalMapping(DM,ISLocalToGlobalMapping*);
121 PETSC_EXTERN PetscErrorCode DMGetLocalToGlobalMappingBlock(DM,ISLocalToGlobalMapping*);
122 PETSC_EXTERN PetscErrorCode DMCreateFieldIS(DM,PetscInt*,char***,IS**);
123 PETSC_EXTERN PetscErrorCode DMGetBlockSize(DM,PetscInt*);
124 PETSC_EXTERN PetscErrorCode DMCreateColoring(DM,ISColoringType,const MatType,ISColoring*);
125 PETSC_EXTERN PetscErrorCode DMCreateMatrix(DM,const MatType,Mat*);
126 PETSC_EXTERN PetscErrorCode DMSetMatrixPreallocateOnly(DM,PetscBool);
127 PETSC_EXTERN PetscErrorCode DMCreateInterpolation(DM,DM,Mat*,Vec*);
128 PETSC_EXTERN PetscErrorCode DMCreateInjection(DM,DM,VecScatter*);
129 PETSC_EXTERN PetscErrorCode DMGetWorkArray(DM,PetscInt,PetscDataType,void*);
130 PETSC_EXTERN PetscErrorCode DMRestoreWorkArray(DM,PetscInt,PetscDataType,void*);
131 PETSC_EXTERN PetscErrorCode DMRefine(DM,MPI_Comm,DM*);
132 PETSC_EXTERN PetscErrorCode DMCoarsen(DM,MPI_Comm,DM*);
133 PETSC_EXTERN PetscErrorCode DMRefineHierarchy(DM,PetscInt,DM[]);
134 PETSC_EXTERN PetscErrorCode DMCoarsenHierarchy(DM,PetscInt,DM[]);
135 PETSC_EXTERN PetscErrorCode DMCoarsenHookAdd(DM,PetscErrorCode (*)(DM,DM,void*),PetscErrorCode (*)(DM,Mat,Vec,Mat,DM,void*),void*);
136 PETSC_EXTERN PetscErrorCode DMRefineHookAdd(DM,PetscErrorCode (*)(DM,DM,void*),PetscErrorCode (*)(DM,Mat,DM,void*),void*);
137 PETSC_EXTERN PetscErrorCode DMRestrict(DM,Mat,Vec,Mat,DM);
138 PETSC_EXTERN PetscErrorCode DMInterpolate(DM,Mat,DM);
139 PETSC_EXTERN PetscErrorCode DMSetFromOptions(DM);
140 PETSC_EXTERN PetscErrorCode DMSetUp(DM);
141 PETSC_EXTERN PetscErrorCode DMCreateInterpolationScale(DM,DM,Mat,Vec*);
142 PETSC_EXTERN PetscErrorCode DMCreateAggregates(DM,DM,Mat*);
143 PETSC_EXTERN PetscErrorCode DMGlobalToLocalBegin(DM,Vec,InsertMode,Vec);
144 PETSC_EXTERN PetscErrorCode DMGlobalToLocalEnd(DM,Vec,InsertMode,Vec);
145 PETSC_EXTERN PetscErrorCode DMLocalToGlobalBegin(DM,Vec,InsertMode,Vec);
146 PETSC_EXTERN PetscErrorCode DMLocalToGlobalEnd(DM,Vec,InsertMode,Vec);
147 PETSC_EXTERN PetscErrorCode DMConvert(DM,const DMType,DM*);
148 
149 PETSC_EXTERN PetscErrorCode DMSetOptionsPrefix(DM,const char []);
150 PETSC_EXTERN PetscErrorCode DMSetVecType(DM,const VecType);
151 PETSC_EXTERN PetscErrorCode DMSetMatType(DM,const MatType);
152 PETSC_EXTERN PetscErrorCode DMSetApplicationContext(DM,void*);
153 PETSC_EXTERN PetscErrorCode DMSetApplicationContextDestroy(DM,PetscErrorCode (*)(void**));
154 PETSC_EXTERN PetscErrorCode DMGetApplicationContext(DM,void*);
155 PETSC_EXTERN PetscErrorCode DMSetInitialGuess(DM,PetscErrorCode (*)(DM,Vec));
156 PETSC_EXTERN PetscErrorCode DMSetFunction(DM,PetscErrorCode (*)(DM,Vec,Vec));
157 PETSC_EXTERN PetscErrorCode DMSetJacobian(DM,PetscErrorCode (*)(DM,Vec,Mat,Mat,MatStructure *));
158 PETSC_EXTERN PetscErrorCode DMSetVariableBounds(DM,PetscErrorCode (*)(DM,Vec,Vec));
159 PETSC_EXTERN PetscErrorCode DMHasInitialGuess(DM,PetscBool *);
160 PETSC_EXTERN PetscErrorCode DMHasFunction(DM,PetscBool *);
161 PETSC_EXTERN PetscErrorCode DMHasJacobian(DM,PetscBool *);
162 PETSC_EXTERN PetscErrorCode DMHasVariableBounds(DM,PetscBool *);
163 PETSC_EXTERN PetscErrorCode DMHasColoring(DM,PetscBool *);
164 PETSC_EXTERN PetscErrorCode DMComputeInitialGuess(DM,Vec);
165 PETSC_EXTERN PetscErrorCode DMComputeFunction(DM,Vec,Vec);
166 PETSC_EXTERN PetscErrorCode DMComputeJacobian(DM,Vec,Mat,Mat,MatStructure *);
167 PETSC_EXTERN PetscErrorCode DMComputeJacobianDefault(DM,Vec,Mat,Mat,MatStructure *);
168 PETSC_EXTERN PetscErrorCode DMComputeVariableBounds(DM,Vec,Vec);
169 
170 PETSC_EXTERN PetscErrorCode DMCreateSubDM(DM, PetscInt, PetscInt[], IS *, DM *);
171 PETSC_EXTERN PetscErrorCode DMCreateFieldDecompositionDM(DM,const char*,DM*);
172 PETSC_EXTERN PetscErrorCode DMCreateFieldDecomposition(DM,PetscInt*,char***,IS**,DM**);
173 PETSC_EXTERN PetscErrorCode DMCreateDomainDecompositionDM(DM,const char*,DM*);
174 PETSC_EXTERN PetscErrorCode DMCreateDomainDecomposition(DM,PetscInt*,char***,IS**,IS**,DM**);
175 
176 PETSC_EXTERN PetscErrorCode DMGetRefineLevel(DM,PetscInt*);
177 PETSC_EXTERN PetscErrorCode DMGetCoarsenLevel(DM,PetscInt*);
178 PETSC_EXTERN PetscErrorCode DMFinalizePackage(void);
179 
180 typedef struct NLF_DAAD* NLF;
181 
182 #include <petscbag.h>
183 
184 PETSC_EXTERN PetscErrorCode PetscViewerBinaryMatlabOpen(MPI_Comm, const char [], PetscViewer*);
185 PETSC_EXTERN PetscErrorCode PetscViewerBinaryMatlabDestroy(PetscViewer*);
186 PETSC_EXTERN PetscErrorCode PetscViewerBinaryMatlabOutputBag(PetscViewer, const char [], PetscBag);
187 PETSC_EXTERN PetscErrorCode PetscViewerBinaryMatlabOutputVec(PetscViewer, const char [], Vec);
188 PETSC_EXTERN PetscErrorCode PetscViewerBinaryMatlabOutputVecDA(PetscViewer, const char [], Vec, DM);
189 
190 #define DM_FILE_CLASSID 1211221
191 
192 /* FEM support */
193 PETSC_EXTERN PetscErrorCode DMGetLocalFunction(DM, PetscErrorCode (**)(DM, Vec, Vec, void *));
194 PETSC_EXTERN PetscErrorCode DMSetLocalFunction(DM, PetscErrorCode (*)(DM, Vec, Vec, void *));
195 PETSC_EXTERN PetscErrorCode DMGetLocalJacobian(DM, PetscErrorCode (**)(DM, Vec, Mat, Mat, void *));
196 PETSC_EXTERN PetscErrorCode DMSetLocalJacobian(DM, PetscErrorCode (*)(DM, Vec, Mat, Mat, void *));
197 PETSC_EXTERN_TYPEDEF typedef PetscErrorCode (*DMLocalFunction1)(DM, Vec, Vec, void*);
198 PETSC_EXTERN_TYPEDEF typedef PetscErrorCode (*DMLocalJacobian1)(DM, Vec, Mat, Mat, void*);
199 PETSC_EXTERN PetscErrorCode DMPrintCellVector(PetscInt, const char [], PetscInt, const PetscScalar []);
200 PETSC_EXTERN PetscErrorCode DMPrintCellMatrix(PetscInt, const char [], PetscInt, PetscInt, const PetscScalar []);
201 
202 PETSC_EXTERN PetscErrorCode DMGetDefaultSection(DM, PetscSection *);
203 PETSC_EXTERN PetscErrorCode DMSetDefaultSection(DM, PetscSection);
204 PETSC_EXTERN PetscErrorCode DMGetDefaultGlobalSection(DM, PetscSection *);
205 PETSC_EXTERN PetscErrorCode DMGetDefaultSF(DM, PetscSF *);
206 PETSC_EXTERN PetscErrorCode DMSetDefaultSF(DM, PetscSF);
207 PETSC_EXTERN PetscErrorCode DMCreateDefaultSF(DM, PetscSection, PetscSection);
208 
209 typedef struct {
210   PetscInt         numQuadPoints; /* The number of quadrature points on an element */
211   const PetscReal *quadPoints;    /* The quadrature point coordinates */
212   const PetscReal *quadWeights;   /* The quadrature weights */
213   PetscInt         numBasisFuncs; /* The number of finite element basis functions on an element */
214   PetscInt         numComponents; /* The number of components for each basis function */
215   const PetscReal *basis;         /* The basis functions tabulated at the quadrature points */
216   const PetscReal *basisDer;      /* The basis function derivatives tabulated at the quadrature points */
217 } PetscQuadrature;
218 #endif
219