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