xref: /petsc/include/petscdm.h (revision e1589f56b6f5b77c5829e929569a3b24fe74d9c5)
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