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 DMMESH "mesh" 44 #define DMCARTESIAN "cartesian" 45 #define DMIGA "iga" 46 47 extern PetscFList DMList; 48 extern PetscBool DMRegisterAllCalled; 49 extern PetscErrorCode DMCreate(MPI_Comm,DM*); 50 extern PetscErrorCode DMSetType(DM, const DMType); 51 extern PetscErrorCode DMGetType(DM, const DMType *); 52 extern PetscErrorCode DMRegister(const char[],const char[],const char[],PetscErrorCode (*)(DM)); 53 extern PetscErrorCode DMRegisterAll(const char []); 54 extern PetscErrorCode DMRegisterDestroy(void); 55 56 57 /*MC 58 DMRegisterDynamic - Adds a new DM component implementation 59 60 Synopsis: 61 PetscErrorCode DMRegisterDynamic(const char *name,const char *path,const char *func_name, PetscErrorCode (*create_func)(DM)) 62 63 Not Collective 64 65 Input Parameters: 66 + name - The name of a new user-defined creation routine 67 . path - The path (either absolute or relative) of the library containing this routine 68 . func_name - The name of routine to create method context 69 - create_func - The creation routine itself 70 71 Notes: 72 DMRegisterDynamic() may be called multiple times to add several user-defined DMs 73 74 If dynamic libraries are used, then the fourth input argument (routine_create) is ignored. 75 76 Sample usage: 77 .vb 78 DMRegisterDynamic("my_da","/home/username/my_lib/lib/libO/solaris/libmy.a", "MyDMCreate", MyDMCreate); 79 .ve 80 81 Then, your DM type can be chosen with the procedural interface via 82 .vb 83 DMCreate(MPI_Comm, DM *); 84 DMSetType(DM,"my_da_name"); 85 .ve 86 or at runtime via the option 87 .vb 88 -da_type my_da_name 89 .ve 90 91 Notes: $PETSC_ARCH occuring in pathname will be replaced with appropriate values. 92 If your function is not being put into a shared library then use DMRegister() instead 93 94 Level: advanced 95 96 .keywords: DM, register 97 .seealso: DMRegisterAll(), DMRegisterDestroy(), DMRegister() 98 M*/ 99 #if defined(PETSC_USE_DYNAMIC_LIBRARIES) 100 #define DMRegisterDynamic(a,b,c,d) DMRegister(a,b,c,0) 101 #else 102 #define DMRegisterDynamic(a,b,c,d) DMRegister(a,b,c,d) 103 #endif 104 105 extern PetscErrorCode DMView(DM,PetscViewer); 106 extern PetscErrorCode DMLoad(DM,PetscViewer); 107 extern PetscErrorCode DMDestroy(DM*); 108 extern PetscErrorCode DMCreateGlobalVector(DM,Vec*); 109 extern PetscErrorCode DMCreateLocalVector(DM,Vec*); 110 extern PetscErrorCode DMGetLocalVector(DM,Vec *); 111 extern PetscErrorCode DMRestoreLocalVector(DM,Vec *); 112 extern PetscErrorCode DMGetGlobalVector(DM,Vec *); 113 extern PetscErrorCode DMRestoreGlobalVector(DM,Vec *); 114 extern PetscErrorCode DMClearGlobalVectors(DM); 115 extern PetscErrorCode DMGetLocalToGlobalMapping(DM,ISLocalToGlobalMapping*); 116 extern PetscErrorCode DMGetLocalToGlobalMappingBlock(DM,ISLocalToGlobalMapping*); 117 extern PetscErrorCode DMGetBlockSize(DM,PetscInt*); 118 extern PetscErrorCode DMGetColoring(DM,ISColoringType,const MatType,ISColoring*); 119 extern PetscErrorCode DMGetMatrix(DM, const MatType,Mat*); 120 extern PetscErrorCode DMSetMatrixPreallocateOnly(DM,PetscBool); 121 extern PetscErrorCode DMGetInterpolation(DM,DM,Mat*,Vec*); 122 extern PetscErrorCode DMGetInjection(DM,DM,VecScatter*); 123 extern PetscErrorCode DMRefine(DM,MPI_Comm,DM*); 124 extern PetscErrorCode DMCoarsen(DM,MPI_Comm,DM*); 125 extern PetscErrorCode DMRefineHierarchy(DM,PetscInt,DM[]); 126 extern PetscErrorCode DMCoarsenHierarchy(DM,PetscInt,DM[]); 127 extern PetscErrorCode DMSetFromOptions(DM); 128 extern PetscErrorCode DMSetUp(DM); 129 extern PetscErrorCode DMGetInterpolationScale(DM,DM,Mat,Vec*); 130 extern PetscErrorCode DMGetAggregates(DM,DM,Mat*); 131 extern PetscErrorCode DMGlobalToLocalBegin(DM,Vec,InsertMode,Vec); 132 extern PetscErrorCode DMGlobalToLocalEnd(DM,Vec,InsertMode,Vec); 133 extern PetscErrorCode DMLocalToGlobalBegin(DM,Vec,InsertMode,Vec); 134 extern PetscErrorCode DMLocalToGlobalEnd(DM,Vec,InsertMode,Vec); 135 extern PetscErrorCode DMConvert(DM,const DMType,DM*); 136 137 extern PetscErrorCode DMSetOptionsPrefix(DM,const char []); 138 extern PetscErrorCode DMSetVecType(DM,const VecType); 139 extern PetscErrorCode DMSetApplicationContext(DM,void*); 140 extern PetscErrorCode DMGetApplicationContext(DM,void*); 141 extern PetscErrorCode DMSetInitialGuess(DM,PetscErrorCode (*)(DM,Vec)); 142 extern PetscErrorCode DMSetFunction(DM,PetscErrorCode (*)(DM,Vec,Vec)); 143 extern PetscErrorCode DMSetJacobian(DM,PetscErrorCode (*)(DM,Vec,Mat,Mat,MatStructure *)); 144 extern PetscErrorCode DMHasInitialGuess(DM,PetscBool *); 145 extern PetscErrorCode DMHasFunction(DM,PetscBool *); 146 extern PetscErrorCode DMHasJacobian(DM,PetscBool *); 147 extern PetscErrorCode DMComputeInitialGuess(DM,Vec); 148 extern PetscErrorCode DMComputeFunction(DM,Vec,Vec); 149 extern PetscErrorCode DMComputeJacobian(DM,Vec,Mat,Mat,MatStructure *); 150 extern PetscErrorCode DMComputeJacobianDefault(DM,Vec,Mat,Mat,MatStructure *); 151 152 extern PetscErrorCode DMGetRefineLevel(DM,PetscInt*); 153 extern PetscErrorCode DMFinalizePackage(void); 154 155 typedef struct NLF_DAAD* NLF; 156 157 #include "petscbag.h" 158 159 extern PetscErrorCode PetscViewerBinaryMatlabOpen(MPI_Comm, const char [], PetscViewer*); 160 extern PetscErrorCode PetscViewerBinaryMatlabDestroy(PetscViewer*); 161 extern PetscErrorCode PetscViewerBinaryMatlabOutputBag(PetscViewer, const char [], PetscBag); 162 extern PetscErrorCode PetscViewerBinaryMatlabOutputVec(PetscViewer, const char [], Vec); 163 extern PetscErrorCode PetscViewerBinaryMatlabOutputVecDA(PetscViewer, const char [], Vec, DM); 164 165 #define DM_FILE_CLASSID 1211221 166 PETSC_EXTERN_CXX_END 167 #endif 168