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