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