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