1e1589f56SBarry Smith /* 2e1589f56SBarry Smith Objects to manage the interactions between the mesh data structures and the algebraic objects 3e1589f56SBarry Smith */ 4e1589f56SBarry Smith #if !defined(__PETSCDA_H) 5e1589f56SBarry Smith #define __PETSCDA_H 6e1589f56SBarry Smith #include "petscvec.h" 7e1589f56SBarry Smith #include "petscao.h" 8e1589f56SBarry Smith PETSC_EXTERN_CXX_BEGIN 9e1589f56SBarry Smith 10e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMInitializePackage(const char[]); 11e1589f56SBarry Smith 12e1589f56SBarry Smith /*S 13e1589f56SBarry Smith DM - Abstract PETSc object that manages an abstract grid object 14e1589f56SBarry Smith 15e1589f56SBarry Smith Level: intermediate 16e1589f56SBarry Smith 17e1589f56SBarry Smith Concepts: grids, grid refinement 18e1589f56SBarry Smith 19*325fc9f4SBarry Smith Notes: The DMDACreate() based object and the DMCompositeCreate() based object are examples of DMs 20e1589f56SBarry Smith 21*325fc9f4SBarry Smith Though the DM objects require the petscsnes.h include files the DM library is 22e1589f56SBarry Smith NOT dependent on the SNES or KSP library. In fact, the KSP and SNES libraries depend on 23e1589f56SBarry Smith DM. (This is not great design, but not trivial to fix). 24e1589f56SBarry Smith 25e1589f56SBarry Smith .seealso: DMCompositeCreate(), DMDACreate() 26e1589f56SBarry Smith S*/ 27e1589f56SBarry Smith typedef struct _p_DM* DM; 28e1589f56SBarry Smith 29e1589f56SBarry Smith /*E 30e1589f56SBarry Smith DMDAStencilType - Determines if the stencil extends only along the coordinate directions, or also 31e1589f56SBarry Smith to the northeast, northwest etc 32e1589f56SBarry Smith 33e1589f56SBarry Smith Level: beginner 34e1589f56SBarry Smith 35e1589f56SBarry Smith .seealso: DMDACreate1d(), DMDACreate2d(), DMDACreate3d(), DMDACreate() 36e1589f56SBarry Smith E*/ 37e1589f56SBarry Smith typedef enum { DMDA_STENCIL_STAR,DMDA_STENCIL_BOX } DMDAStencilType; 38e1589f56SBarry Smith 39e1589f56SBarry Smith /*MC 40e1589f56SBarry Smith DMDA_STENCIL_STAR - "Star"-type stencil. In logical grid coordinates, only (i,j,k), (i+s,j,k), (i,j+s,k), 41e1589f56SBarry Smith (i,j,k+s) are in the stencil NOT, for example, (i+s,j+s,k) 42e1589f56SBarry Smith 43e1589f56SBarry Smith Level: beginner 44e1589f56SBarry Smith 45e1589f56SBarry Smith .seealso: DMDA_STENCIL_BOX, DMDAStencilType 46e1589f56SBarry Smith M*/ 47e1589f56SBarry Smith 48e1589f56SBarry Smith /*MC 49e1589f56SBarry Smith DMDA_STENCIL_BOX - "Box"-type stencil. In logical grid coordinates, any of (i,j,k), (i+s,j+r,k+t) may 50e1589f56SBarry Smith be in the stencil. 51e1589f56SBarry Smith 52e1589f56SBarry Smith Level: beginner 53e1589f56SBarry Smith 54e1589f56SBarry Smith .seealso: DMDA_STENCIL_STAR, DMDAStencilType 55e1589f56SBarry Smith M*/ 56e1589f56SBarry Smith 57e1589f56SBarry Smith /*E 58e1589f56SBarry Smith DMDAPeriodicType - Is the domain periodic in one or more directions 59e1589f56SBarry Smith 60e1589f56SBarry Smith Level: beginner 61e1589f56SBarry Smith 62e1589f56SBarry Smith DMDA_XYZGHOSTED means that ghost points are put around all the physical boundaries 63e1589f56SBarry Smith in the local representation of the Vec (i.e. DMDACreate/GetLocalVector(). 64e1589f56SBarry Smith 65e1589f56SBarry Smith .seealso: DMDACreate1d(), DMDACreate2d(), DMDACreate3d(), DMDACreate() 66e1589f56SBarry Smith E*/ 67e1589f56SBarry Smith typedef enum { DMDA_NONPERIODIC,DMDA_XPERIODIC,DMDA_YPERIODIC,DMDA_XYPERIODIC, 68e1589f56SBarry Smith DMDA_XYZPERIODIC,DMDA_XZPERIODIC,DMDA_YZPERIODIC,DMDA_ZPERIODIC,DMDA_XYZGHOSTED} DMDAPeriodicType; 69e1589f56SBarry Smith extern const char *DMDAPeriodicTypes[]; 70e1589f56SBarry Smith 71e1589f56SBarry Smith /*E 72e1589f56SBarry Smith DMDAInterpolationType - Defines the type of interpolation that will be returned by 73e1589f56SBarry Smith DMGetInterpolation. 74e1589f56SBarry Smith 75e1589f56SBarry Smith Level: beginner 76e1589f56SBarry Smith 77e1589f56SBarry Smith .seealso: DMDACreate1d(), DMDACreate2d(), DMDACreate3d(), DMGetInterpolation(), DMDASetInterpolationType(), DMDACreate() 78e1589f56SBarry Smith E*/ 79e1589f56SBarry Smith typedef enum { DMDA_Q0, DMDA_Q1 } DMDAInterpolationType; 80e1589f56SBarry Smith 81e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDASetInterpolationType(DM,DMDAInterpolationType); 82e1589f56SBarry Smith 83e1589f56SBarry Smith /*E 84e1589f56SBarry Smith DMDAElementType - Defines the type of elements that will be returned by 85e1589f56SBarry Smith DMGetElements() 86e1589f56SBarry Smith 87e1589f56SBarry Smith Level: beginner 88e1589f56SBarry Smith 89e1589f56SBarry Smith .seealso: DMDACreate1d(), DMDACreate2d(), DMDACreate3d(), DMGetInterpolation(), DMDASetInterpolationType(), 90e1589f56SBarry Smith DMDASetElementType(), DMGetElements(), DMRestoreElements(), DMDACreate() 91e1589f56SBarry Smith E*/ 92e1589f56SBarry Smith typedef enum { DMDA_ELEMENT_P1, DMDA_ELEMENT_Q1 } DMDAElementType; 93e1589f56SBarry Smith 94e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDASetElementType(DM,DMDAElementType); 95e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDAGetElementType(DM,DMDAElementType*); 96e1589f56SBarry Smith 97e1589f56SBarry Smith #define DMDAXPeriodic(pt) ((pt)==DMDA_XPERIODIC||(pt)==DMDA_XYPERIODIC||(pt)==DMDA_XZPERIODIC||(pt)==DMDA_XYZPERIODIC) 98e1589f56SBarry Smith #define DMDAYPeriodic(pt) ((pt)==DMDA_YPERIODIC||(pt)==DMDA_XYPERIODIC||(pt)==DMDA_YZPERIODIC||(pt)==DMDA_XYZPERIODIC) 99e1589f56SBarry Smith #define DMDAZPeriodic(pt) ((pt)==DMDA_ZPERIODIC||(pt)==DMDA_XZPERIODIC||(pt)==DMDA_YZPERIODIC||(pt)==DMDA_XYZPERIODIC) 100e1589f56SBarry Smith 101e1589f56SBarry Smith typedef enum { DMDA_X,DMDA_Y,DMDA_Z } DMDADirection; 102e1589f56SBarry Smith 103e1589f56SBarry Smith extern PetscClassId PETSCDM_DLLEXPORT DM_CLASSID; 104e1589f56SBarry Smith 105e1589f56SBarry Smith #define MATSEQUSFFT "sequsfft" 106e1589f56SBarry Smith 107e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDACreate(MPI_Comm,DM*); 108e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDASetDim(DM,PetscInt); 109e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDASetSizes(DM,PetscInt,PetscInt,PetscInt); 110e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDACreate1d(MPI_Comm,DMDAPeriodicType,PetscInt,PetscInt,PetscInt,const PetscInt[],DM *); 111e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDACreate2d(MPI_Comm,DMDAPeriodicType,DMDAStencilType,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,const PetscInt[],const PetscInt[],DM*); 112e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDACreate3d(MPI_Comm,DMDAPeriodicType,DMDAStencilType,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,const PetscInt[],const PetscInt[],const PetscInt[],DM*); 113e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMSetOptionsPrefix(DM,const char []); 114e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMSetVecType(DM,const VecType); 115e1589f56SBarry Smith 116e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDAGlobalToNaturalBegin(DM,Vec,InsertMode,Vec); 117e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDAGlobalToNaturalEnd(DM,Vec,InsertMode,Vec); 118e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDANaturalToGlobalBegin(DM,Vec,InsertMode,Vec); 119e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDANaturalToGlobalEnd(DM,Vec,InsertMode,Vec); 120e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDALocalToLocalBegin(DM,Vec,InsertMode,Vec); 121e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDALocalToLocalEnd(DM,Vec,InsertMode,Vec); 122e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDACreateNaturalVector(DM,Vec *); 123e1589f56SBarry Smith 124e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDALoad(PetscViewer,PetscInt,PetscInt,PetscInt,DM *); 125e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDAGetCorners(DM,PetscInt*,PetscInt*,PetscInt*,PetscInt*,PetscInt*,PetscInt*); 126e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDAGetGhostCorners(DM,PetscInt*,PetscInt*,PetscInt*,PetscInt*,PetscInt*,PetscInt*); 127e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDAGetInfo(DM,PetscInt*,PetscInt*,PetscInt*,PetscInt*,PetscInt*,PetscInt*,PetscInt*,PetscInt*,PetscInt*,DMDAPeriodicType*,DMDAStencilType*); 128e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDAGetProcessorSubset(DM,DMDADirection,PetscInt,MPI_Comm*); 129e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDAGetProcessorSubsets(DM,DMDADirection,MPI_Comm*); 130e1589f56SBarry Smith 131e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDAGlobalToNaturalAllCreate(DM,VecScatter*); 132e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDANaturalAllToGlobalCreate(DM,VecScatter*); 133e1589f56SBarry Smith 134e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDAGetGlobalIndices(DM,PetscInt*,PetscInt**); 135e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDAGetISLocalToGlobalMapping(DM,ISLocalToGlobalMapping*); 136e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDAGetISLocalToGlobalMappingBlck(DM,ISLocalToGlobalMapping*); 137e1589f56SBarry Smith 138e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDAGetScatter(DM,VecScatter*,VecScatter*,VecScatter*); 139e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDAGetNeighbors(DM,const PetscMPIInt**); 140e1589f56SBarry Smith 141e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDAGetAO(DM,AO*); 142e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDASetCoordinates(DM,Vec); 143e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDAGetCoordinates(DM,Vec *); 144e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDAGetGhostedCoordinates(DM,Vec *); 145e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDAGetCoordinateDA(DM,DM *); 146e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDASetUniformCoordinates(DM,PetscReal,PetscReal,PetscReal,PetscReal,PetscReal,PetscReal); 147e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDAGetBoundingBox(DM,PetscReal[],PetscReal[]); 148e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDAGetLocalBoundingBox(DM,PetscReal[],PetscReal[]); 149e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDASetFieldName(DM,PetscInt,const char[]); 150e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDAGetFieldName(DM,PetscInt,const char**); 151e1589f56SBarry Smith 152e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDASetPeriodicity(DM, DMDAPeriodicType); 153e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDASetDof(DM, int); 154e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDASetStencilWidth(DM, PetscInt); 155e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDASetOwnershipRanges(DM,const PetscInt[],const PetscInt[],const PetscInt[]); 156e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDAGetOwnershipRanges(DM,const PetscInt**,const PetscInt**,const PetscInt**); 157e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDASetNumProcs(DM, PetscInt, PetscInt, PetscInt); 158e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDASetStencilType(DM, DMDAStencilType); 159e1589f56SBarry Smith 160e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDAVecGetArray(DM,Vec,void *); 161e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDAVecRestoreArray(DM,Vec,void *); 162e1589f56SBarry Smith 163e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDAVecGetArrayDOF(DM,Vec,void *); 164e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDAVecRestoreArrayDOF(DM,Vec,void *); 165e1589f56SBarry Smith 166e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDASplitComm2d(MPI_Comm,PetscInt,PetscInt,PetscInt,MPI_Comm*); 167e1589f56SBarry Smith 168e1589f56SBarry Smith /*E 169e1589f56SBarry Smith DMType - String with the name of a PETSc DM or the creation function 170e1589f56SBarry Smith with an optional dynamic library name, for example 171e1589f56SBarry Smith http://www.mcs.anl.gov/petsc/lib.a:myveccreate() 172e1589f56SBarry Smith 173e1589f56SBarry Smith Level: beginner 174e1589f56SBarry Smith 175e1589f56SBarry Smith .seealso: DMSetType(), DM 176e1589f56SBarry Smith E*/ 177e1589f56SBarry Smith 178e1589f56SBarry Smith #define DMType char* 179e1589f56SBarry Smith #define DMDA "da" 180e1589f56SBarry Smith #define DMADDA "adda" 181e1589f56SBarry Smith #define DMCOMPOSITE "composite" 182e1589f56SBarry Smith #define DMSLICED "sliced" 183e1589f56SBarry Smith 184e1589f56SBarry Smith extern PetscFList DMList; 185e1589f56SBarry Smith extern PetscBool DMRegisterAllCalled; 186e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMCreate(MPI_Comm,DM*); 187e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMSetType(DM, const DMType); 188e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMGetType(DM, const DMType *); 189e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMRegister(const char[],const char[],const char[],PetscErrorCode (*)(DM)); 190e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMRegisterAll(const char []); 191e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMRegisterDestroy(void); 192e1589f56SBarry Smith 193e1589f56SBarry Smith /*MC 194e1589f56SBarry Smith DMRegisterDynamic - Adds a new DM component implementation 195e1589f56SBarry Smith 196e1589f56SBarry Smith Synopsis: 197e1589f56SBarry Smith PetscErrorCode DMRegisterDynamic(const char *name,const char *path,const char *func_name, PetscErrorCode (*create_func)(DM)) 198e1589f56SBarry Smith 199e1589f56SBarry Smith Not Collective 200e1589f56SBarry Smith 201e1589f56SBarry Smith Input Parameters: 202e1589f56SBarry Smith + name - The name of a new user-defined creation routine 203e1589f56SBarry Smith . path - The path (either absolute or relative) of the library containing this routine 204e1589f56SBarry Smith . func_name - The name of routine to create method context 205e1589f56SBarry Smith - create_func - The creation routine itself 206e1589f56SBarry Smith 207e1589f56SBarry Smith Notes: 208e1589f56SBarry Smith DMRegisterDynamic() may be called multiple times to add several user-defined DMs 209e1589f56SBarry Smith 210e1589f56SBarry Smith If dynamic libraries are used, then the fourth input argument (routine_create) is ignored. 211e1589f56SBarry Smith 212e1589f56SBarry Smith Sample usage: 213e1589f56SBarry Smith .vb 214e1589f56SBarry Smith DMRegisterDynamic("my_da","/home/username/my_lib/lib/libO/solaris/libmy.a", "MyDMCreate", MyDMCreate); 215e1589f56SBarry Smith .ve 216e1589f56SBarry Smith 217e1589f56SBarry Smith Then, your DM type can be chosen with the procedural interface via 218e1589f56SBarry Smith .vb 219e1589f56SBarry Smith DMCreate(MPI_Comm, DM *); 220e1589f56SBarry Smith DMSetType(DM,"my_da_name"); 221e1589f56SBarry Smith .ve 222e1589f56SBarry Smith or at runtime via the option 223e1589f56SBarry Smith .vb 224e1589f56SBarry Smith -da_type my_da_name 225e1589f56SBarry Smith .ve 226e1589f56SBarry Smith 227e1589f56SBarry Smith Notes: $PETSC_ARCH occuring in pathname will be replaced with appropriate values. 228e1589f56SBarry Smith If your function is not being put into a shared library then use DMRegister() instead 229e1589f56SBarry Smith 230e1589f56SBarry Smith Level: advanced 231e1589f56SBarry Smith 232e1589f56SBarry Smith .keywords: DM, register 233e1589f56SBarry Smith .seealso: DMRegisterAll(), DMRegisterDestroy(), DMRegister() 234e1589f56SBarry Smith M*/ 235e1589f56SBarry Smith #if defined(PETSC_USE_DYNAMIC_LIBRARIES) 236e1589f56SBarry Smith #define DMRegisterDynamic(a,b,c,d) DMRegister(a,b,c,0) 237e1589f56SBarry Smith #else 238e1589f56SBarry Smith #define DMRegisterDynamic(a,b,c,d) DMRegister(a,b,c,d) 239e1589f56SBarry Smith #endif 240e1589f56SBarry Smith 241e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT MatRegisterDAAD(void); 242e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT MatCreateDAAD(DM,Mat*); 243e1589f56SBarry Smith EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatCreateSeqUSFFT(Vec, DM,Mat*); 244e1589f56SBarry Smith 245e1589f56SBarry Smith /*S 246e1589f56SBarry Smith DMDALocalInfo - C struct that contains information about a structured grid and a processors logical 247e1589f56SBarry Smith location in it. 248e1589f56SBarry Smith 249e1589f56SBarry Smith Level: beginner 250e1589f56SBarry Smith 251e1589f56SBarry Smith Concepts: distributed array 252e1589f56SBarry Smith 253e1589f56SBarry Smith Developer note: Then entries in this struct are int instead of PetscInt so that the elements may 254e1589f56SBarry Smith be extracted in Fortran as if from an integer array 255e1589f56SBarry Smith 256e1589f56SBarry Smith .seealso: DMDACreate1d(), DMDACreate2d(), DMDACreate3d(), DMDestroy(), DM, DMDAGetLocalInfo(), DMDAGetInfo() 257e1589f56SBarry Smith S*/ 258e1589f56SBarry Smith typedef struct { 259e1589f56SBarry Smith PetscInt dim,dof,sw; 260e1589f56SBarry Smith PetscInt mx,my,mz; /* global number of grid points in each direction */ 261e1589f56SBarry Smith PetscInt xs,ys,zs; /* starting pointd of this processor, excluding ghosts */ 262e1589f56SBarry Smith PetscInt xm,ym,zm; /* number of grid points on this processor, excluding ghosts */ 263e1589f56SBarry Smith PetscInt gxs,gys,gzs; /* starting point of this processor including ghosts */ 264e1589f56SBarry Smith PetscInt gxm,gym,gzm; /* number of grid points on this processor including ghosts */ 265e1589f56SBarry Smith DMDAPeriodicType pt; 266e1589f56SBarry Smith DMDAStencilType st; 267e1589f56SBarry Smith DM da; 268e1589f56SBarry Smith } DMDALocalInfo; 269e1589f56SBarry Smith 270e1589f56SBarry Smith /*MC 271e1589f56SBarry Smith DMDAForEachPointBegin2d - Starts a loop over the local part of a two dimensional DMDA 272e1589f56SBarry Smith 273e1589f56SBarry Smith Synopsis: 274e1589f56SBarry Smith void DMDAForEachPointBegin2d(DALocalInfo *info,PetscInt i,PetscInt j); 275e1589f56SBarry Smith 276e1589f56SBarry Smith Not Collective 277e1589f56SBarry Smith 278e1589f56SBarry Smith Level: intermediate 279e1589f56SBarry Smith 280e1589f56SBarry Smith .seealso: DMDAForEachPointEnd2d(), DMDAVecGetArray() 281e1589f56SBarry Smith M*/ 282e1589f56SBarry Smith #define DMDAForEachPointBegin2d(info,i,j) {\ 283e1589f56SBarry Smith PetscInt _xints = info->xs,_xinte = info->xs+info->xm,_yints = info->ys,_yinte = info->ys+info->ym;\ 284e1589f56SBarry Smith for (j=_yints; j<_yinte; j++) {\ 285e1589f56SBarry Smith for (i=_xints; i<_xinte; i++) {\ 286e1589f56SBarry Smith 287e1589f56SBarry Smith /*MC 288e1589f56SBarry Smith DMDAForEachPointEnd2d - Ends a loop over the local part of a two dimensional DMDA 289e1589f56SBarry Smith 290e1589f56SBarry Smith Synopsis: 291e1589f56SBarry Smith void DMDAForEachPointEnd2d; 292e1589f56SBarry Smith 293e1589f56SBarry Smith Not Collective 294e1589f56SBarry Smith 295e1589f56SBarry Smith Level: intermediate 296e1589f56SBarry Smith 297e1589f56SBarry Smith .seealso: DMDAForEachPointBegin2d(), DMDAVecGetArray() 298e1589f56SBarry Smith M*/ 299e1589f56SBarry Smith #define DMDAForEachPointEnd2d }}} 300e1589f56SBarry Smith 301e1589f56SBarry Smith /*MC 302e1589f56SBarry Smith DMDACoor2d - Structure for holding 2d (x and y) coordinates. 303e1589f56SBarry Smith 304e1589f56SBarry Smith Level: intermediate 305e1589f56SBarry Smith 306e1589f56SBarry Smith Sample Usage: 307e1589f56SBarry Smith DMDACoor2d **coors; 308e1589f56SBarry Smith Vec vcoors; 309e1589f56SBarry Smith DM cda; 310e1589f56SBarry Smith 311e1589f56SBarry Smith DMDAGetCoordinates(da,&vcoors); 312e1589f56SBarry Smith DMDAGetCoordinateDA(da,&cda); 313e1589f56SBarry Smith DMDAVecGetArray(cda,vcoors,&coors); 314e1589f56SBarry Smith DMDAGetCorners(cda,&mstart,&nstart,0,&m,&n,0) 315e1589f56SBarry Smith for (i=mstart; i<mstart+m; i++) { 316e1589f56SBarry Smith for (j=nstart; j<nstart+n; j++) { 317e1589f56SBarry Smith x = coors[j][i].x; 318e1589f56SBarry Smith y = coors[j][i].y; 319e1589f56SBarry Smith ...... 320e1589f56SBarry Smith } 321e1589f56SBarry Smith } 322e1589f56SBarry Smith DMDAVecRestoreArray(dac,vcoors,&coors); 323e1589f56SBarry Smith 324e1589f56SBarry Smith .seealso: DMDACoor3d, DMDAForEachPointBegin(), DMDAGetCoordinateDA(), DMDAGetCoordinates(), DMDAGetGhostCoordinates() 325e1589f56SBarry Smith M*/ 326e1589f56SBarry Smith typedef struct {PetscScalar x,y;} DMDACoor2d; 327e1589f56SBarry Smith 328e1589f56SBarry Smith /*MC 329e1589f56SBarry Smith DMDACoor3d - Structure for holding 3d (x, y and z) coordinates. 330e1589f56SBarry Smith 331e1589f56SBarry Smith Level: intermediate 332e1589f56SBarry Smith 333e1589f56SBarry Smith Sample Usage: 334e1589f56SBarry Smith DMDACoor3d ***coors; 335e1589f56SBarry Smith Vec vcoors; 336e1589f56SBarry Smith DM cda; 337e1589f56SBarry Smith 338e1589f56SBarry Smith DMDAGetCoordinates(da,&vcoors); 339e1589f56SBarry Smith DMDAGetCoordinateDA(da,&cda); 340e1589f56SBarry Smith DMDAVecGetArray(cda,vcoors,&coors); 341e1589f56SBarry Smith DMDAGetCorners(cda,&mstart,&nstart,&pstart,&m,&n,&p) 342e1589f56SBarry Smith for (i=mstart; i<mstart+m; i++) { 343e1589f56SBarry Smith for (j=nstart; j<nstart+n; j++) { 344e1589f56SBarry Smith for (k=pstart; k<pstart+p; k++) { 345e1589f56SBarry Smith x = coors[k][j][i].x; 346e1589f56SBarry Smith y = coors[k][j][i].y; 347e1589f56SBarry Smith z = coors[k][j][i].z; 348e1589f56SBarry Smith ...... 349e1589f56SBarry Smith } 350e1589f56SBarry Smith } 351e1589f56SBarry Smith DMDAVecRestoreArray(dac,vcoors,&coors); 352e1589f56SBarry Smith 353e1589f56SBarry Smith .seealso: DMDACoor2d, DMDAForEachPointBegin(), DMDAGetCoordinateDA(), DMDAGetCoordinates(), DMDAGetGhostCoordinates() 354e1589f56SBarry Smith M*/ 355e1589f56SBarry Smith typedef struct {PetscScalar x,y,z;} DMDACoor3d; 356e1589f56SBarry Smith 357e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDAGetLocalInfo(DM,DMDALocalInfo*); 358e1589f56SBarry Smith typedef PetscErrorCode (*DMDALocalFunction1)(DMDALocalInfo*,void*,void*,void*); 359e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDAFormFunctionLocal(DM, DMDALocalFunction1, Vec, Vec, void *); 360e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDAFormFunctionLocalGhost(DM, DMDALocalFunction1, Vec, Vec, void *); 361e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDAFormJacobianLocal(DM, DMDALocalFunction1, Vec, Mat, void *); 362e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDAFormFunction1(DM,Vec,Vec,void*); 363e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDAFormFunction(DM,PetscErrorCode (*)(void),Vec,Vec,void*); 364e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDAFormFunctioni1(DM,PetscInt,Vec,PetscScalar*,void*); 365e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDAFormFunctionib1(DM,PetscInt,Vec,PetscScalar*,void*); 366e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDAComputeJacobian1WithAdic(DM,Vec,Mat,void*); 367e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDAComputeJacobian1WithAdifor(DM,Vec,Mat,void*); 368e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDAMultiplyByJacobian1WithAdic(DM,Vec,Vec,Vec,void*); 369e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDAMultiplyByJacobian1WithAdifor(DM,Vec,Vec,Vec,void*); 370e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDAMultiplyByJacobian1WithAD(DM,Vec,Vec,Vec,void*); 371e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDAComputeJacobian1(DM,Vec,Mat,void*); 372e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDAGetLocalFunction(DM,DMDALocalFunction1*); 373e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDASetLocalFunction(DM,DMDALocalFunction1); 374e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDASetLocalFunctioni(DM,PetscErrorCode (*)(DMDALocalInfo*,MatStencil*,void*,PetscScalar*,void*)); 375e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDASetLocalFunctionib(DM,PetscErrorCode (*)(DMDALocalInfo*,MatStencil*,void*,PetscScalar*,void*)); 376e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDAGetLocalJacobian(DM,DMDALocalFunction1*); 377e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDASetLocalJacobian(DM,DMDALocalFunction1); 378e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDASetLocalAdicFunction_Private(DM,DMDALocalFunction1); 379e1589f56SBarry Smith 380e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT MatSetDA(Mat,DM); 381e1589f56SBarry Smith 382e1589f56SBarry Smith /*MC 383e1589f56SBarry Smith DMDASetLocalAdicFunction - Caches in a DM a local function computed by ADIC/ADIFOR 384e1589f56SBarry Smith 385e1589f56SBarry Smith Synopsis: 386e1589f56SBarry Smith PetscErrorCode DMDASetLocalAdicFunction(DM da,DMDALocalFunction1 ad_lf) 387e1589f56SBarry Smith 388e1589f56SBarry Smith Logically Collective on DM 389e1589f56SBarry Smith 390e1589f56SBarry Smith Input Parameter: 391e1589f56SBarry Smith + da - initial distributed array 392e1589f56SBarry Smith - ad_lf - the local function as computed by ADIC/ADIFOR 393e1589f56SBarry Smith 394e1589f56SBarry Smith Level: intermediate 395e1589f56SBarry Smith 396e1589f56SBarry Smith .keywords: distributed array, refine 397e1589f56SBarry Smith 398e1589f56SBarry Smith .seealso: DMDACreate1d(), DMDACreate2d(), DMDACreate3d(), DMDestroy(), DMDAGetLocalFunction(), DMDASetLocalFunction(), 399e1589f56SBarry Smith DMDASetLocalJacobian() 400e1589f56SBarry Smith M*/ 401e1589f56SBarry Smith #if defined(PETSC_HAVE_ADIC) 402e1589f56SBarry Smith # define DMDASetLocalAdicFunction(a,d) DMDASetLocalAdicFunction_Private(a,(DMDALocalFunction1)d) 403e1589f56SBarry Smith #else 404e1589f56SBarry Smith # define DMDASetLocalAdicFunction(a,d) DMDASetLocalAdicFunction_Private(a,0) 405e1589f56SBarry Smith #endif 406e1589f56SBarry Smith 407e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDASetLocalAdicMFFunction_Private(DM,DMDALocalFunction1); 408e1589f56SBarry Smith #if defined(PETSC_HAVE_ADIC) 409e1589f56SBarry Smith # define DMDASetLocalAdicMFFunction(a,d) DMDASetLocalAdicMFFunction_Private(a,(DMDALocalFunction1)d) 410e1589f56SBarry Smith #else 411e1589f56SBarry Smith # define DMDASetLocalAdicMFFunction(a,d) DMDASetLocalAdicMFFunction_Private(a,0) 412e1589f56SBarry Smith #endif 413e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDASetLocalAdicFunctioni_Private(DM,PetscErrorCode (*)(DMDALocalInfo*,MatStencil*,void*,void*,void*)); 414e1589f56SBarry Smith #if defined(PETSC_HAVE_ADIC) 415e1589f56SBarry Smith # define DMDASetLocalAdicFunctioni(a,d) DMDASetLocalAdicFunctioni_Private(a,(PetscErrorCode (*)(DMDALocalInfo*,MatStencil*,void*,void*,void*))d) 416e1589f56SBarry Smith #else 417e1589f56SBarry Smith # define DMDASetLocalAdicFunctioni(a,d) DMDASetLocalAdicFunctioni_Private(a,0) 418e1589f56SBarry Smith #endif 419e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDASetLocalAdicMFFunctioni_Private(DM,PetscErrorCode (*)(DMDALocalInfo*,MatStencil*,void*,void*,void*)); 420e1589f56SBarry Smith #if defined(PETSC_HAVE_ADIC) 421e1589f56SBarry Smith # define DMDASetLocalAdicMFFunctioni(a,d) DMDASetLocalAdicMFFunctioni_Private(a,(PetscErrorCode (*)(DMDALocalInfo*,MatStencil*,void*,void*,void*))d) 422e1589f56SBarry Smith #else 423e1589f56SBarry Smith # define DMDASetLocalAdicMFFunctioni(a,d) DMDASetLocalAdicMFFunctioni_Private(a,0) 424e1589f56SBarry Smith #endif 425e1589f56SBarry Smith 426e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDASetLocalAdicFunctionib_Private(DM,PetscErrorCode (*)(DMDALocalInfo*,MatStencil*,void*,void*,void*)); 427e1589f56SBarry Smith #if defined(PETSC_HAVE_ADIC) 428e1589f56SBarry Smith # define DMDASetLocalAdicFunctionib(a,d) DMDASetLocalAdicFunctionib_Private(a,(PetscErrorCode (*)(DMDALocalInfo*,MatStencil*,void*,void*,void*))d) 429e1589f56SBarry Smith #else 430e1589f56SBarry Smith # define DMDASetLocalAdicFunctionib(a,d) DMDASetLocalAdicFunctionib_Private(a,0) 431e1589f56SBarry Smith #endif 432e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDASetLocalAdicMFFunctionib_Private(DM,PetscErrorCode (*)(DMDALocalInfo*,MatStencil*,void*,void*,void*)); 433e1589f56SBarry Smith #if defined(PETSC_HAVE_ADIC) 434e1589f56SBarry Smith # define DMDASetLocalAdicMFFunctionib(a,d) DMDASetLocalAdicMFFunctionib_Private(a,(PetscErrorCode (*)(DMDALocalInfo*,MatStencil*,void*,void*,void*))d) 435e1589f56SBarry Smith #else 436e1589f56SBarry Smith # define DMDASetLocalAdicMFFunctionib(a,d) DMDASetLocalAdicMFFunctionib_Private(a,0) 437e1589f56SBarry Smith #endif 438e1589f56SBarry Smith 439e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDAFormFunctioniTest1(DM,void*); 440e1589f56SBarry Smith 441e1589f56SBarry Smith #include "petscmat.h" 442e1589f56SBarry Smith 443e1589f56SBarry Smith 444e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMView(DM,PetscViewer); 445e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDestroy(DM); 446e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMCreateGlobalVector(DM,Vec*); 447e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMCreateLocalVector(DM,Vec*); 448e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMGetLocalVector(DM,Vec *); 449e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMRestoreLocalVector(DM,Vec *); 450e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMGetGlobalVector(DM,Vec *); 451e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMRestoreGlobalVector(DM,Vec *); 452e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMGetColoring(DM,ISColoringType,const MatType,ISColoring*); 453e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMGetMatrix(DM, const MatType,Mat*); 454e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMGetInterpolation(DM,DM,Mat*,Vec*); 455e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMGetInjection(DM,DM,VecScatter*); 456e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMRefine(DM,MPI_Comm,DM*); 457e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMCoarsen(DM,MPI_Comm,DM*); 458e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMRefineHierarchy(DM,PetscInt,DM[]); 459e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMCoarsenHierarchy(DM,PetscInt,DM[]); 460e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMSetFromOptions(DM); 461e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMSetUp(DM); 462e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMGetInterpolationScale(DM,DM,Mat,Vec*); 463e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMGetAggregates(DM,DM,Mat*); 464e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMGlobalToLocalBegin(DM,Vec,InsertMode,Vec); 465e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMGlobalToLocalEnd(DM,Vec,InsertMode,Vec); 466e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMLocalToGlobalBegin(DM,Vec,InsertMode,Vec); 467e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMLocalToGlobalEnd(DM,Vec,InsertMode,Vec); 468e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMGetElements(DM,PetscInt *,const PetscInt*[]); 469e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMRestoreElements(DM,PetscInt *,const PetscInt*[]); 470e1589f56SBarry Smith 471e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMSetContext(DM,void*); 472e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMGetContext(DM,void**); 473e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMSetInitialGuess(DM,PetscErrorCode (*)(DM,Vec)); 474e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMSetFunction(DM,PetscErrorCode (*)(DM,Vec,Vec)); 475e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMSetJacobian(DM,PetscErrorCode (*)(DM,Vec,Mat,Mat,MatStructure *)); 476e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMHasInitialGuess(DM,PetscBool *); 477e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMHasFunction(DM,PetscBool *); 478e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMHasJacobian(DM,PetscBool *); 479e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMComputeInitialGuess(DM,Vec); 480e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMComputeFunction(DM,Vec,Vec); 481e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMComputeJacobian(DM,Vec,Mat,Mat,MatStructure *); 482e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMComputeJacobianDefault(DM,Vec,Mat,Mat,MatStructure *); 483e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMFinalizePackage(void); 484e1589f56SBarry Smith 485e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDASetGetMatrix(DM,PetscErrorCode (*)(DM, const MatType,Mat *)); 486e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDASetBlockFills(DM,PetscInt*,PetscInt*); 487e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDASetMatPreallocateOnly(DM,PetscBool ); 488e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDASetRefinementFactor(DM,PetscInt,PetscInt,PetscInt); 489e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDAGetRefinementFactor(DM,PetscInt*,PetscInt*,PetscInt*); 490e1589f56SBarry Smith 491e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDAGetAdicArray(DM,PetscBool ,void*,void*,PetscInt*); 492e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDARestoreAdicArray(DM,PetscBool ,void*,void*,PetscInt*); 493e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDAGetAdicMFArray(DM,PetscBool ,void*,void*,PetscInt*); 494e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDAGetAdicMFArray4(DM,PetscBool ,void*,void*,PetscInt*); 495e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDAGetAdicMFArray9(DM,PetscBool ,void*,void*,PetscInt*); 496e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDAGetAdicMFArrayb(DM,PetscBool ,void*,void*,PetscInt*); 497e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDARestoreAdicMFArray(DM,PetscBool ,void*,void*,PetscInt*); 498e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDAGetArray(DM,PetscBool ,void*); 499e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDARestoreArray(DM,PetscBool ,void*); 500e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT ad_DAGetArray(DM,PetscBool ,void*); 501e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT ad_DARestoreArray(DM,PetscBool ,void*); 502e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT admf_DAGetArray(DM,PetscBool ,void*); 503e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT admf_DARestoreArray(DM,PetscBool ,void*); 504e1589f56SBarry Smith 505e1589f56SBarry Smith #include "petscpf.h" 506e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMDACreatePF(DM,PF*); 507e1589f56SBarry Smith 508e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMCompositeCreate(MPI_Comm,DM*); 509e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMCompositeAddArray(DM,PetscMPIInt,PetscInt); 510e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMCompositeAddDM(DM,DM); 511e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMCompositeSetCoupling(DM,PetscErrorCode (*)(DM,Mat,PetscInt*,PetscInt*,PetscInt,PetscInt,PetscInt,PetscInt)); 512e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMCompositeSetContext(DM,void*); 513e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMCompositeGetContext(DM,void**); 514e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMCompositeAddVecScatter(DM,VecScatter); 515e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMCompositeScatter(DM,Vec,...); 516e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMCompositeGather(DM,Vec,...); 517e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMCompositeGetAccess(DM,Vec,...); 518e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMCompositeGetNumberDM(DM,PetscInt*); 519e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMCompositeRestoreAccess(DM,Vec,...); 520e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMCompositeGetLocalVectors(DM,...); 521e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMCompositeGetEntries(DM,...); 522e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMCompositeRestoreLocalVectors(DM,...); 523e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMCompositeGetLocalISs(DM,IS*[]); 524e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMCompositeGetGlobalISs(DM,IS*[]); 525e1589f56SBarry Smith 526e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMSlicedCreate(MPI_Comm,DM*); 527e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMSlicedGetGlobalIndices(DM,PetscInt*[]); 528e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMSlicedSetPreallocation(DM,PetscInt,const PetscInt[],PetscInt,const PetscInt[]); 529e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMSlicedSetBlockFills(DM,const PetscInt*,const PetscInt*); 530e1589f56SBarry Smith EXTERN PetscErrorCode PETSCDM_DLLEXPORT DMSlicedSetGhosts(DM,PetscInt,PetscInt,PetscInt,const PetscInt[]); 531e1589f56SBarry Smith 532e1589f56SBarry Smith 533e1589f56SBarry Smith typedef struct NLF_DAAD* NLF; 534e1589f56SBarry Smith 535e1589f56SBarry Smith #include <petscbag.h> 536e1589f56SBarry Smith 537e1589f56SBarry Smith EXTERN PetscErrorCode PETSCSYS_DLLEXPORT PetscViewerBinaryMatlabOpen(MPI_Comm, const char [], PetscViewer*); 538e1589f56SBarry Smith EXTERN PetscErrorCode PETSCSYS_DLLEXPORT PetscViewerBinaryMatlabDestroy(PetscViewer); 539e1589f56SBarry Smith EXTERN PetscErrorCode PETSCSYS_DLLEXPORT PetscViewerBinaryMatlabOutputBag(PetscViewer, const char [], PetscBag); 540e1589f56SBarry Smith EXTERN PetscErrorCode PETSCSYS_DLLEXPORT PetscViewerBinaryMatlabOutputVec(PetscViewer, const char [], Vec); 541e1589f56SBarry Smith EXTERN PetscErrorCode PETSCSYS_DLLEXPORT PetscViewerBinaryMatlabOutputVecDA(PetscViewer, const char [], Vec, DM); 542e1589f56SBarry Smith 543e1589f56SBarry Smith 544e1589f56SBarry Smith PetscErrorCode PETSCDM_DLLEXPORT DMADDACreate(MPI_Comm,PetscInt,PetscInt*,PetscInt*,PetscInt,PetscBool *,DM*); 545e1589f56SBarry Smith PetscErrorCode PETSCDM_DLLEXPORT DMADDASetParameters(DM,PetscInt,PetscInt*,PetscInt*,PetscInt,PetscBool*); 546e1589f56SBarry Smith PetscErrorCode PETSCDM_DLLEXPORT DMADDASetRefinement(DM, PetscInt *,PetscInt); 547e1589f56SBarry Smith PetscErrorCode PETSCDM_DLLEXPORT DMADDAGetCorners(DM, PetscInt **, PetscInt **); 548e1589f56SBarry Smith PetscErrorCode PETSCDM_DLLEXPORT DMADDAGetGhostCorners(DM, PetscInt **, PetscInt **); 549e1589f56SBarry Smith PetscErrorCode PETSCDM_DLLEXPORT DMADDAGetMatrixNS(DM, DM, const MatType , Mat *); 550e1589f56SBarry Smith 551e1589f56SBarry Smith /* functions to set values in vectors and matrices */ 552e1589f56SBarry Smith struct _ADDAIdx_s { 553e1589f56SBarry Smith PetscInt *x; /* the coordinates, user has to make sure it is the correct size! */ 554e1589f56SBarry Smith PetscInt d; /* indexes the dof */ 555e1589f56SBarry Smith }; 556e1589f56SBarry Smith typedef struct _ADDAIdx_s ADDAIdx; 557e1589f56SBarry Smith 558e1589f56SBarry Smith PetscErrorCode PETSCDM_DLLEXPORT DMADDAMatSetValues(Mat, DM, PetscInt, const ADDAIdx[], DM, PetscInt, const ADDAIdx[], const PetscScalar[], InsertMode); 559e1589f56SBarry Smith PetscBool ADDAHCiterStartup(const PetscInt, const PetscInt *const, const PetscInt *const, PetscInt *const); 560e1589f56SBarry Smith PetscBool ADDAHCiter(const PetscInt, const PetscInt *const, const PetscInt *const, PetscInt *const); 561e1589f56SBarry Smith 562e1589f56SBarry Smith PETSC_EXTERN_CXX_END 563e1589f56SBarry Smith #endif 564