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