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 #define DMPATCH "patch" 50 51 PETSC_EXTERN PetscFList DMList; 52 PETSC_EXTERN PetscBool DMRegisterAllCalled; 53 PETSC_EXTERN PetscErrorCode DMCreate(MPI_Comm,DM*); 54 PETSC_EXTERN PetscErrorCode DMSetType(DM, const DMType); 55 PETSC_EXTERN PetscErrorCode DMGetType(DM, const DMType *); 56 PETSC_EXTERN PetscErrorCode DMRegister(const char[],const char[],const char[],PetscErrorCode (*)(DM)); 57 PETSC_EXTERN PetscErrorCode DMRegisterAll(const char []); 58 PETSC_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 PETSC_EXTERN PetscErrorCode DMView(DM,PetscViewer); 110 PETSC_EXTERN PetscErrorCode DMLoad(DM,PetscViewer); 111 PETSC_EXTERN PetscErrorCode DMDestroy(DM*); 112 PETSC_EXTERN PetscErrorCode DMCreateGlobalVector(DM,Vec*); 113 PETSC_EXTERN PetscErrorCode DMCreateLocalVector(DM,Vec*); 114 PETSC_EXTERN PetscErrorCode DMGetLocalVector(DM,Vec *); 115 PETSC_EXTERN PetscErrorCode DMRestoreLocalVector(DM,Vec *); 116 PETSC_EXTERN PetscErrorCode DMGetGlobalVector(DM,Vec *); 117 PETSC_EXTERN PetscErrorCode DMRestoreGlobalVector(DM,Vec *); 118 PETSC_EXTERN PetscErrorCode DMClearGlobalVectors(DM); 119 PETSC_EXTERN PetscErrorCode DMGetNamedGlobalVector(DM,const char*,Vec*); 120 PETSC_EXTERN PetscErrorCode DMRestoreNamedGlobalVector(DM,const char*,Vec*); 121 PETSC_EXTERN PetscErrorCode DMGetLocalToGlobalMapping(DM,ISLocalToGlobalMapping*); 122 PETSC_EXTERN PetscErrorCode DMGetLocalToGlobalMappingBlock(DM,ISLocalToGlobalMapping*); 123 PETSC_EXTERN PetscErrorCode DMCreateFieldIS(DM,PetscInt*,char***,IS**); 124 PETSC_EXTERN PetscErrorCode DMGetBlockSize(DM,PetscInt*); 125 PETSC_EXTERN PetscErrorCode DMCreateColoring(DM,ISColoringType,const MatType,ISColoring*); 126 PETSC_EXTERN PetscErrorCode DMCreateMatrix(DM,const MatType,Mat*); 127 PETSC_EXTERN PetscErrorCode DMSetMatrixPreallocateOnly(DM,PetscBool); 128 PETSC_EXTERN PetscErrorCode DMCreateInterpolation(DM,DM,Mat*,Vec*); 129 PETSC_EXTERN PetscErrorCode DMCreateInjection(DM,DM,VecScatter*); 130 PETSC_EXTERN PetscErrorCode DMGetWorkArray(DM,PetscInt,PetscDataType,void*); 131 PETSC_EXTERN PetscErrorCode DMRestoreWorkArray(DM,PetscInt,PetscDataType,void*); 132 PETSC_EXTERN PetscErrorCode DMRefine(DM,MPI_Comm,DM*); 133 PETSC_EXTERN PetscErrorCode DMCoarsen(DM,MPI_Comm,DM*); 134 PETSC_EXTERN PetscErrorCode DMRefineHierarchy(DM,PetscInt,DM[]); 135 PETSC_EXTERN PetscErrorCode DMCoarsenHierarchy(DM,PetscInt,DM[]); 136 PETSC_EXTERN PetscErrorCode DMCoarsenHookAdd(DM,PetscErrorCode (*)(DM,DM,void*),PetscErrorCode (*)(DM,Mat,Vec,Mat,DM,void*),void*); 137 PETSC_EXTERN PetscErrorCode DMRefineHookAdd(DM,PetscErrorCode (*)(DM,DM,void*),PetscErrorCode (*)(DM,Mat,DM,void*),void*); 138 PETSC_EXTERN PetscErrorCode DMRestrict(DM,Mat,Vec,Mat,DM); 139 PETSC_EXTERN PetscErrorCode DMInterpolate(DM,Mat,DM); 140 PETSC_EXTERN PetscErrorCode DMSetFromOptions(DM); 141 PETSC_EXTERN PetscErrorCode DMSetUp(DM); 142 PETSC_EXTERN PetscErrorCode DMCreateInterpolationScale(DM,DM,Mat,Vec*); 143 PETSC_EXTERN PetscErrorCode DMCreateAggregates(DM,DM,Mat*); 144 PETSC_EXTERN PetscErrorCode DMGlobalToLocalBegin(DM,Vec,InsertMode,Vec); 145 PETSC_EXTERN PetscErrorCode DMGlobalToLocalEnd(DM,Vec,InsertMode,Vec); 146 PETSC_EXTERN PetscErrorCode DMLocalToGlobalBegin(DM,Vec,InsertMode,Vec); 147 PETSC_EXTERN PetscErrorCode DMLocalToGlobalEnd(DM,Vec,InsertMode,Vec); 148 PETSC_EXTERN PetscErrorCode DMConvert(DM,const DMType,DM*); 149 150 PETSC_EXTERN PetscErrorCode DMSetOptionsPrefix(DM,const char []); 151 PETSC_EXTERN PetscErrorCode DMSetVecType(DM,const VecType); 152 PETSC_EXTERN PetscErrorCode DMSetMatType(DM,const MatType); 153 PETSC_EXTERN PetscErrorCode DMSetApplicationContext(DM,void*); 154 PETSC_EXTERN PetscErrorCode DMSetApplicationContextDestroy(DM,PetscErrorCode (*)(void**)); 155 PETSC_EXTERN PetscErrorCode DMGetApplicationContext(DM,void*); 156 PETSC_EXTERN PetscErrorCode DMSetInitialGuess(DM,PetscErrorCode (*)(DM,Vec)); 157 PETSC_EXTERN PetscErrorCode DMSetFunction(DM,PetscErrorCode (*)(DM,Vec,Vec)); 158 PETSC_EXTERN PetscErrorCode DMSetJacobian(DM,PetscErrorCode (*)(DM,Vec,Mat,Mat,MatStructure *)); 159 PETSC_EXTERN PetscErrorCode DMSetVariableBounds(DM,PetscErrorCode (*)(DM,Vec,Vec)); 160 PETSC_EXTERN PetscErrorCode DMHasInitialGuess(DM,PetscBool *); 161 PETSC_EXTERN PetscErrorCode DMHasFunction(DM,PetscBool *); 162 PETSC_EXTERN PetscErrorCode DMHasJacobian(DM,PetscBool *); 163 PETSC_EXTERN PetscErrorCode DMHasVariableBounds(DM,PetscBool *); 164 PETSC_EXTERN PetscErrorCode DMHasColoring(DM,PetscBool *); 165 PETSC_EXTERN PetscErrorCode DMComputeInitialGuess(DM,Vec); 166 PETSC_EXTERN PetscErrorCode DMComputeFunction(DM,Vec,Vec); 167 PETSC_EXTERN PetscErrorCode DMComputeJacobian(DM,Vec,Mat,Mat,MatStructure *); 168 PETSC_EXTERN PetscErrorCode DMComputeJacobianDefault(DM,Vec,Mat,Mat,MatStructure *); 169 PETSC_EXTERN PetscErrorCode DMComputeVariableBounds(DM,Vec,Vec); 170 171 PETSC_EXTERN PetscErrorCode DMCreateSubDM(DM, PetscInt, PetscInt[], IS *, DM *); 172 PETSC_EXTERN PetscErrorCode DMCreateFieldDecompositionDM(DM,const char*,DM*); 173 PETSC_EXTERN PetscErrorCode DMCreateFieldDecomposition(DM,PetscInt*,char***,IS**,DM**); 174 PETSC_EXTERN PetscErrorCode DMCreateDomainDecompositionDM(DM,const char*,DM*); 175 PETSC_EXTERN PetscErrorCode DMCreateDomainDecomposition(DM,PetscInt*,char***,IS**,IS**,DM**); 176 177 PETSC_EXTERN PetscErrorCode DMGetRefineLevel(DM,PetscInt*); 178 PETSC_EXTERN PetscErrorCode DMGetCoarsenLevel(DM,PetscInt*); 179 PETSC_EXTERN PetscErrorCode DMFinalizePackage(void); 180 181 typedef struct NLF_DAAD* NLF; 182 183 #include <petscbag.h> 184 185 PETSC_EXTERN PetscErrorCode PetscViewerBinaryMatlabOpen(MPI_Comm, const char [], PetscViewer*); 186 PETSC_EXTERN PetscErrorCode PetscViewerBinaryMatlabDestroy(PetscViewer*); 187 PETSC_EXTERN PetscErrorCode PetscViewerBinaryMatlabOutputBag(PetscViewer, const char [], PetscBag); 188 PETSC_EXTERN PetscErrorCode PetscViewerBinaryMatlabOutputVec(PetscViewer, const char [], Vec); 189 PETSC_EXTERN PetscErrorCode PetscViewerBinaryMatlabOutputVecDA(PetscViewer, const char [], Vec, DM); 190 191 #define DM_FILE_CLASSID 1211221 192 193 /* FEM support */ 194 PETSC_EXTERN PetscErrorCode DMGetLocalFunction(DM, PetscErrorCode (**)(DM, Vec, Vec, void *)); 195 PETSC_EXTERN PetscErrorCode DMSetLocalFunction(DM, PetscErrorCode (*)(DM, Vec, Vec, void *)); 196 PETSC_EXTERN PetscErrorCode DMGetLocalJacobian(DM, PetscErrorCode (**)(DM, Vec, Mat, Mat, void *)); 197 PETSC_EXTERN PetscErrorCode DMSetLocalJacobian(DM, PetscErrorCode (*)(DM, Vec, Mat, Mat, void *)); 198 PETSC_EXTERN_TYPEDEF typedef PetscErrorCode (*DMLocalFunction1)(DM, Vec, Vec, void*); 199 PETSC_EXTERN_TYPEDEF typedef PetscErrorCode (*DMLocalJacobian1)(DM, Vec, Mat, Mat, void*); 200 PETSC_EXTERN PetscErrorCode DMPrintCellVector(PetscInt, const char [], PetscInt, const PetscScalar []); 201 PETSC_EXTERN PetscErrorCode DMPrintCellMatrix(PetscInt, const char [], PetscInt, PetscInt, const PetscScalar []); 202 203 PETSC_EXTERN PetscErrorCode DMGetDefaultSection(DM, PetscSection *); 204 PETSC_EXTERN PetscErrorCode DMSetDefaultSection(DM, PetscSection); 205 PETSC_EXTERN PetscErrorCode DMGetDefaultGlobalSection(DM, PetscSection *); 206 PETSC_EXTERN PetscErrorCode DMGetDefaultSF(DM, PetscSF *); 207 PETSC_EXTERN PetscErrorCode DMSetDefaultSF(DM, PetscSF); 208 PETSC_EXTERN PetscErrorCode DMCreateDefaultSF(DM, PetscSection, PetscSection); 209 210 typedef struct { 211 PetscInt numQuadPoints; /* The number of quadrature points on an element */ 212 const PetscReal *quadPoints; /* The quadrature point coordinates */ 213 const PetscReal *quadWeights; /* The quadrature weights */ 214 PetscInt numBasisFuncs; /* The number of finite element basis functions on an element */ 215 PetscInt numComponents; /* The number of components for each basis function */ 216 const PetscReal *basis; /* The basis functions tabulated at the quadrature points */ 217 const PetscReal *basisDer; /* The basis function derivatives tabulated at the quadrature points */ 218 } PetscQuadrature; 219 #endif 220