xref: /petsc/include/petscdmda.h (revision 014dd563d73e9fc78d056590fa6cf997782bf92d)
13c48a1e8SJed Brown #if !defined(__PETSCDMDA_H)
23c48a1e8SJed Brown #define __PETSCDMDA_H
33c48a1e8SJed Brown 
43c48a1e8SJed Brown #include "petscdm.h"
53c48a1e8SJed Brown #include "petscpf.h"
6eac7c332SJed Brown #include "petscao.h"
73c48a1e8SJed Brown 
83c48a1e8SJed Brown /*E
93c48a1e8SJed Brown     DMDAStencilType - Determines if the stencil extends only along the coordinate directions, or also
103c48a1e8SJed Brown       to the northeast, northwest etc
113c48a1e8SJed Brown 
123c48a1e8SJed Brown    Level: beginner
133c48a1e8SJed Brown 
143c48a1e8SJed Brown .seealso: DMDACreate1d(), DMDACreate2d(), DMDACreate3d(), DMDACreate()
153c48a1e8SJed Brown E*/
163c48a1e8SJed Brown typedef enum { DMDA_STENCIL_STAR,DMDA_STENCIL_BOX } DMDAStencilType;
173c48a1e8SJed Brown 
183c48a1e8SJed Brown /*MC
193c48a1e8SJed Brown      DMDA_STENCIL_STAR - "Star"-type stencil. In logical grid coordinates, only (i,j,k), (i+s,j,k), (i,j+s,k),
203c48a1e8SJed Brown                        (i,j,k+s) are in the stencil  NOT, for example, (i+s,j+s,k)
213c48a1e8SJed Brown 
223c48a1e8SJed Brown      Level: beginner
233c48a1e8SJed Brown 
243c48a1e8SJed Brown .seealso: DMDA_STENCIL_BOX, DMDAStencilType
253c48a1e8SJed Brown M*/
263c48a1e8SJed Brown 
273c48a1e8SJed Brown /*MC
283c48a1e8SJed Brown      DMDA_STENCIL_BOX - "Box"-type stencil. In logical grid coordinates, any of (i,j,k), (i+s,j+r,k+t) may
293c48a1e8SJed Brown                       be in the stencil.
303c48a1e8SJed Brown 
313c48a1e8SJed Brown      Level: beginner
323c48a1e8SJed Brown 
333c48a1e8SJed Brown .seealso: DMDA_STENCIL_STAR, DMDAStencilType
343c48a1e8SJed Brown M*/
353c48a1e8SJed Brown 
363c48a1e8SJed Brown /*E
375d26d725SBarry Smith     DMDABoundaryType - Describes the choice for fill of ghost cells on physical domain boundaries.
383c48a1e8SJed Brown 
393c48a1e8SJed Brown    Level: beginner
403c48a1e8SJed Brown 
413c48a1e8SJed Brown    A boundary may be of type DMDA_BOUNDARY_NONE (no ghost nodes), DMDA_BOUNDARY_GHOST (ghost nodes
425d26d725SBarry Smith    exist but aren't filled, you can put values into them and then apply a stencil that uses those ghost locations),
435d26d725SBarry Smith    DMDA_BOUNDARY_MIRROR (not yet implemented), or DMDA_BOUNDARY_PERIODIC
443c48a1e8SJed Brown    (ghost nodes filled by the opposite edge of the domain).
453c48a1e8SJed Brown 
465d26d725SBarry Smith    Note: This is information for the boundary of the __PHYSICAL__ domain. It has nothing to do with boundaries between
475d26d725SBarry Smith      processes, that width is always determined by the stencil width, see DMDASetStencilWidth().
485d26d725SBarry Smith 
493c48a1e8SJed Brown .seealso: DMDASetBoundaryType(), DMDACreate1d(), DMDACreate2d(), DMDACreate3d(), DMDACreate()
503c48a1e8SJed Brown E*/
513c48a1e8SJed Brown typedef enum { DMDA_BOUNDARY_NONE, DMDA_BOUNDARY_GHOSTED, DMDA_BOUNDARY_MIRROR, DMDA_BOUNDARY_PERIODIC } DMDABoundaryType;
523c48a1e8SJed Brown 
53*014dd563SJed Brown PETSC_EXTERN const char *DMDABoundaryTypes[];
543c48a1e8SJed Brown 
553c48a1e8SJed Brown /*E
563c48a1e8SJed Brown     DMDAInterpolationType - Defines the type of interpolation that will be returned by
57e727c939SJed Brown        DMCreateInterpolation.
583c48a1e8SJed Brown 
593c48a1e8SJed Brown    Level: beginner
603c48a1e8SJed Brown 
61e727c939SJed Brown .seealso: DMDACreate1d(), DMDACreate2d(), DMDACreate3d(), DMCreateInterpolation(), DMDASetInterpolationType(), DMDACreate()
623c48a1e8SJed Brown E*/
633c48a1e8SJed Brown typedef enum { DMDA_Q0, DMDA_Q1 } DMDAInterpolationType;
643c48a1e8SJed Brown 
65*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDASetInterpolationType(DM,DMDAInterpolationType);
66*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDAGetInterpolationType(DM,DMDAInterpolationType*);
673c48a1e8SJed Brown 
683c48a1e8SJed Brown /*E
693c48a1e8SJed Brown     DMDAElementType - Defines the type of elements that will be returned by
702dde6fd4SLisandro Dalcin        DMDAGetElements()
713c48a1e8SJed Brown 
723c48a1e8SJed Brown    Level: beginner
733c48a1e8SJed Brown 
74e727c939SJed Brown .seealso: DMDACreate1d(), DMDACreate2d(), DMDACreate3d(), DMCreateInterpolation(), DMDASetInterpolationType(),
752dde6fd4SLisandro Dalcin           DMDASetElementType(), DMDAGetElements(), DMDARestoreElements(), DMDACreate()
763c48a1e8SJed Brown E*/
773c48a1e8SJed Brown typedef enum { DMDA_ELEMENT_P1, DMDA_ELEMENT_Q1 } DMDAElementType;
783c48a1e8SJed Brown 
79*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDASetElementType(DM,DMDAElementType);
80*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDAGetElementType(DM,DMDAElementType*);
81*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDAGetElements(DM,PetscInt *,PetscInt *,const PetscInt*[]);
82*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDARestoreElements(DM,PetscInt *,PetscInt *,const PetscInt*[]);
833c48a1e8SJed Brown 
843c48a1e8SJed Brown typedef enum { DMDA_X,DMDA_Y,DMDA_Z } DMDADirection;
853c48a1e8SJed Brown 
863c48a1e8SJed Brown #define MATSEQUSFFT        "sequsfft"
873c48a1e8SJed Brown 
88*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDACreate(MPI_Comm,DM*);
89*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDASetDim(DM,PetscInt);
90*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDASetSizes(DM,PetscInt,PetscInt,PetscInt);
91*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDACreate1d(MPI_Comm,DMDABoundaryType,PetscInt,PetscInt,PetscInt,const PetscInt[],DM *);
92*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDACreate2d(MPI_Comm,DMDABoundaryType,DMDABoundaryType,DMDAStencilType,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,const PetscInt[],const PetscInt[],DM*);
93*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDACreate3d(MPI_Comm,DMDABoundaryType,DMDABoundaryType,DMDABoundaryType,DMDAStencilType,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,const PetscInt[],const PetscInt[],const PetscInt[],DM*);
943c48a1e8SJed Brown 
95*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDAGlobalToNaturalBegin(DM,Vec,InsertMode,Vec);
96*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDAGlobalToNaturalEnd(DM,Vec,InsertMode,Vec);
97*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDANaturalToGlobalBegin(DM,Vec,InsertMode,Vec);
98*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDANaturalToGlobalEnd(DM,Vec,InsertMode,Vec);
99*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDALocalToLocalBegin(DM,Vec,InsertMode,Vec);
100*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDALocalToLocalEnd(DM,Vec,InsertMode,Vec);
101*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDACreateNaturalVector(DM,Vec *);
1023c48a1e8SJed Brown 
103*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDAGetCorners(DM,PetscInt*,PetscInt*,PetscInt*,PetscInt*,PetscInt*,PetscInt*);
104*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDAGetGhostCorners(DM,PetscInt*,PetscInt*,PetscInt*,PetscInt*,PetscInt*,PetscInt*);
105*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDAGetInfo(DM,PetscInt*,PetscInt*,PetscInt*,PetscInt*,PetscInt*,PetscInt*,PetscInt*,PetscInt*,PetscInt*,DMDABoundaryType*,DMDABoundaryType*,DMDABoundaryType*,DMDAStencilType*);
106*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDAGetProcessorSubset(DM,DMDADirection,PetscInt,MPI_Comm*);
107*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDAGetProcessorSubsets(DM,DMDADirection,MPI_Comm*);
1083c48a1e8SJed Brown 
109*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDAGlobalToNaturalAllCreate(DM,VecScatter*);
110*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDANaturalAllToGlobalCreate(DM,VecScatter*);
1113c48a1e8SJed Brown 
112*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDAGetGlobalIndices(DM,PetscInt*,PetscInt**);
1133c48a1e8SJed Brown 
114*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDAGetScatter(DM,VecScatter*,VecScatter*,VecScatter*);
115*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDAGetNeighbors(DM,const PetscMPIInt**);
1163c48a1e8SJed Brown 
117*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDAGetAO(DM,AO*);
118*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDASetCoordinates(DM,Vec);
119*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDASetGhostedCoordinates(DM,Vec);
120*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDAGetCoordinates(DM,Vec *);
121*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDAGetGhostedCoordinates(DM,Vec *);
122*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDAGetCoordinateDA(DM,DM *);
123*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDASetUniformCoordinates(DM,PetscReal,PetscReal,PetscReal,PetscReal,PetscReal,PetscReal);
124*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDAGetBoundingBox(DM,PetscReal[],PetscReal[]);
125*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDAGetLocalBoundingBox(DM,PetscReal[],PetscReal[]);
126f0aa4865SJed Brown /* function to wrap coordinates around boundary */
127*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDAMapCoordsToPeriodicDomain(DM,PetscScalar*,PetscScalar*);
128f0aa4865SJed Brown 
129*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDAGetReducedDA(DM,PetscInt,DM*);
1303c48a1e8SJed Brown 
131*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDASetFieldName(DM,PetscInt,const char[]);
132*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDAGetFieldName(DM,PetscInt,const char**);
1333c48a1e8SJed Brown 
134*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDASetBoundaryType(DM,DMDABoundaryType,DMDABoundaryType,DMDABoundaryType);
135*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDASetDof(DM, PetscInt);
136*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDASetStencilWidth(DM, PetscInt);
137*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDASetOwnershipRanges(DM,const PetscInt[],const PetscInt[],const PetscInt[]);
138*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDAGetOwnershipRanges(DM,const PetscInt**,const PetscInt**,const PetscInt**);
139*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDASetNumProcs(DM, PetscInt, PetscInt, PetscInt);
140*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDASetStencilType(DM, DMDAStencilType);
1413c48a1e8SJed Brown 
142*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDAVecGetArray(DM,Vec,void *);
143*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDAVecRestoreArray(DM,Vec,void *);
1443c48a1e8SJed Brown 
145*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDAVecGetArrayDOF(DM,Vec,void *);
146*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDAVecRestoreArrayDOF(DM,Vec,void *);
1473c48a1e8SJed Brown 
148*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDASplitComm2d(MPI_Comm,PetscInt,PetscInt,PetscInt,MPI_Comm*);
1493c48a1e8SJed Brown 
1503c48a1e8SJed Brown /*S
1513c48a1e8SJed Brown      DMDALocalInfo - C struct that contains information about a structured grid and a processors logical
1523c48a1e8SJed Brown               location in it.
1533c48a1e8SJed Brown 
1543c48a1e8SJed Brown    Level: beginner
1553c48a1e8SJed Brown 
1563c48a1e8SJed Brown   Concepts: distributed array
1573c48a1e8SJed Brown 
1583c48a1e8SJed Brown   Developer note: Then entries in this struct are int instead of PetscInt so that the elements may
1593c48a1e8SJed Brown                   be extracted in Fortran as if from an integer array
1603c48a1e8SJed Brown 
1613c48a1e8SJed Brown .seealso:  DMDACreate1d(), DMDACreate2d(), DMDACreate3d(), DMDestroy(), DM, DMDAGetLocalInfo(), DMDAGetInfo()
1623c48a1e8SJed Brown S*/
1633c48a1e8SJed Brown typedef struct {
1643c48a1e8SJed Brown   PetscInt       dim,dof,sw;
1653c48a1e8SJed Brown   PetscInt       mx,my,mz;    /* global number of grid points in each direction */
1666ee1aa1aSDmitry Karpeev   PetscInt       xs,ys,zs;    /* starting point of this processor, excluding ghosts */
1673c48a1e8SJed Brown   PetscInt       xm,ym,zm;    /* number of grid points on this processor, excluding ghosts */
1683c48a1e8SJed Brown   PetscInt       gxs,gys,gzs;    /* starting point of this processor including ghosts */
1693c48a1e8SJed Brown   PetscInt       gxm,gym,gzm;    /* number of grid points on this processor including ghosts */
1703c48a1e8SJed Brown   DMDABoundaryType bx,by,bz; /* type of ghost nodes at boundary */
1713c48a1e8SJed Brown   DMDAStencilType  st;
1723c48a1e8SJed Brown   DM             da;
1733c48a1e8SJed Brown } DMDALocalInfo;
1743c48a1e8SJed Brown 
1753c48a1e8SJed Brown /*MC
1763c48a1e8SJed Brown       DMDAForEachPointBegin2d - Starts a loop over the local part of a two dimensional DMDA
1773c48a1e8SJed Brown 
1783c48a1e8SJed Brown    Synopsis:
1793c48a1e8SJed Brown    void  DMDAForEachPointBegin2d(DALocalInfo *info,PetscInt i,PetscInt j);
1803c48a1e8SJed Brown 
1813c48a1e8SJed Brown    Not Collective
1823c48a1e8SJed Brown 
1833c48a1e8SJed Brown    Level: intermediate
1843c48a1e8SJed Brown 
1853c48a1e8SJed Brown .seealso: DMDAForEachPointEnd2d(), DMDAVecGetArray()
1863c48a1e8SJed Brown M*/
1873c48a1e8SJed Brown #define DMDAForEachPointBegin2d(info,i,j) {\
1883c48a1e8SJed Brown   PetscInt _xints = info->xs,_xinte = info->xs+info->xm,_yints = info->ys,_yinte = info->ys+info->ym;\
1893c48a1e8SJed Brown   for (j=_yints; j<_yinte; j++) {\
1903c48a1e8SJed Brown     for (i=_xints; i<_xinte; i++) {\
1913c48a1e8SJed Brown 
1923c48a1e8SJed Brown /*MC
1933c48a1e8SJed Brown       DMDAForEachPointEnd2d - Ends a loop over the local part of a two dimensional DMDA
1943c48a1e8SJed Brown 
1953c48a1e8SJed Brown    Synopsis:
1963c48a1e8SJed Brown    void  DMDAForEachPointEnd2d;
1973c48a1e8SJed Brown 
1983c48a1e8SJed Brown    Not Collective
1993c48a1e8SJed Brown 
2003c48a1e8SJed Brown    Level: intermediate
2013c48a1e8SJed Brown 
2023c48a1e8SJed Brown .seealso: DMDAForEachPointBegin2d(), DMDAVecGetArray()
2033c48a1e8SJed Brown M*/
2043c48a1e8SJed Brown #define DMDAForEachPointEnd2d }}}
2053c48a1e8SJed Brown 
2063c48a1e8SJed Brown /*MC
2073c48a1e8SJed Brown       DMDACoor2d - Structure for holding 2d (x and y) coordinates.
2083c48a1e8SJed Brown 
2093c48a1e8SJed Brown     Level: intermediate
2103c48a1e8SJed Brown 
2113c48a1e8SJed Brown     Sample Usage:
2123c48a1e8SJed Brown       DMDACoor2d **coors;
2133c48a1e8SJed Brown       Vec      vcoors;
2143c48a1e8SJed Brown       DM       cda;
2153c48a1e8SJed Brown 
2163c48a1e8SJed Brown       DMDAGetCoordinates(da,&vcoors);
2173c48a1e8SJed Brown       DMDAGetCoordinateDA(da,&cda);
2183c48a1e8SJed Brown       DMDAVecGetArray(cda,vcoors,&coors);
2193c48a1e8SJed Brown       DMDAGetCorners(cda,&mstart,&nstart,0,&m,&n,0)
2203c48a1e8SJed Brown       for (i=mstart; i<mstart+m; i++) {
2213c48a1e8SJed Brown         for (j=nstart; j<nstart+n; j++) {
2223c48a1e8SJed Brown           x = coors[j][i].x;
2233c48a1e8SJed Brown           y = coors[j][i].y;
2243c48a1e8SJed Brown           ......
2253c48a1e8SJed Brown         }
2263c48a1e8SJed Brown       }
2273c48a1e8SJed Brown       DMDAVecRestoreArray(dac,vcoors,&coors);
2283c48a1e8SJed Brown 
2293c48a1e8SJed Brown .seealso: DMDACoor3d, DMDAForEachPointBegin(), DMDAGetCoordinateDA(), DMDAGetCoordinates(), DMDAGetGhostCoordinates()
2303c48a1e8SJed Brown M*/
2313c48a1e8SJed Brown typedef struct {PetscScalar x,y;} DMDACoor2d;
2323c48a1e8SJed Brown 
2333c48a1e8SJed Brown /*MC
2343c48a1e8SJed Brown       DMDACoor3d - Structure for holding 3d (x, y and z) coordinates.
2353c48a1e8SJed Brown 
2363c48a1e8SJed Brown     Level: intermediate
2373c48a1e8SJed Brown 
2383c48a1e8SJed Brown     Sample Usage:
2393c48a1e8SJed Brown       DMDACoor3d ***coors;
2403c48a1e8SJed Brown       Vec      vcoors;
2413c48a1e8SJed Brown       DM       cda;
2423c48a1e8SJed Brown 
2433c48a1e8SJed Brown       DMDAGetCoordinates(da,&vcoors);
2443c48a1e8SJed Brown       DMDAGetCoordinateDA(da,&cda);
2453c48a1e8SJed Brown       DMDAVecGetArray(cda,vcoors,&coors);
2463c48a1e8SJed Brown       DMDAGetCorners(cda,&mstart,&nstart,&pstart,&m,&n,&p)
2473c48a1e8SJed Brown       for (i=mstart; i<mstart+m; i++) {
2483c48a1e8SJed Brown         for (j=nstart; j<nstart+n; j++) {
2493c48a1e8SJed Brown           for (k=pstart; k<pstart+p; k++) {
2503c48a1e8SJed Brown             x = coors[k][j][i].x;
2513c48a1e8SJed Brown             y = coors[k][j][i].y;
2523c48a1e8SJed Brown             z = coors[k][j][i].z;
2533c48a1e8SJed Brown           ......
2543c48a1e8SJed Brown         }
2553c48a1e8SJed Brown       }
2563c48a1e8SJed Brown       DMDAVecRestoreArray(dac,vcoors,&coors);
2573c48a1e8SJed Brown 
2583c48a1e8SJed Brown .seealso: DMDACoor2d, DMDAForEachPointBegin(), DMDAGetCoordinateDA(), DMDAGetCoordinates(), DMDAGetGhostCoordinates()
2593c48a1e8SJed Brown M*/
2603c48a1e8SJed Brown typedef struct {PetscScalar x,y,z;} DMDACoor3d;
2613c48a1e8SJed Brown 
262*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDAGetLocalInfo(DM,DMDALocalInfo*);
2633c48a1e8SJed Brown typedef PetscErrorCode (*DMDALocalFunction1)(DMDALocalInfo*,void*,void*,void*);
264*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDAComputeFunctionLocal(DM, DMDALocalFunction1, Vec, Vec, void *);
265*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDAComputeFunctionLocalGhost(DM, DMDALocalFunction1, Vec, Vec, void *);
266*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDAFormJacobianLocal(DM, DMDALocalFunction1, Vec, Mat, void *);
267*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDAComputeFunction1(DM,Vec,Vec,void*);
268*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDAComputeFunction(DM,PetscErrorCode (*)(void),Vec,Vec,void*);
269*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDAComputeFunctioni1(DM,PetscInt,Vec,PetscScalar*,void*);
270*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDAComputeFunctionib1(DM,PetscInt,Vec,PetscScalar*,void*);
271*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDAComputeJacobian1WithAdic(DM,Vec,Mat,void*);
272*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDAComputeJacobian1WithAdifor(DM,Vec,Mat,void*);
273*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDAMultiplyByJacobian1WithAdic(DM,Vec,Vec,Vec,void*);
274*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDAMultiplyByJacobian1WithAdifor(DM,Vec,Vec,Vec,void*);
275*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDAMultiplyByJacobian1WithAD(DM,Vec,Vec,Vec,void*);
276*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDAComputeJacobian1(DM,Vec,Mat,void*);
277*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDAGetLocalFunction(DM,DMDALocalFunction1*);
278*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDASetLocalFunction(DM,DMDALocalFunction1);
279*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDASetLocalFunctioni(DM,PetscErrorCode (*)(DMDALocalInfo*,MatStencil*,void*,PetscScalar*,void*));
280*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDASetLocalFunctionib(DM,PetscErrorCode (*)(DMDALocalInfo*,MatStencil*,void*,PetscScalar*,void*));
281*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDAGetLocalJacobian(DM,DMDALocalFunction1*);
282*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDASetLocalJacobian(DM,DMDALocalFunction1);
283*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDASetLocalAdicFunction_Private(DM,DMDALocalFunction1);
2843c48a1e8SJed Brown 
285*014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatSetDM(Mat,DM);
286*014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatRegisterDAAD(void);
287*014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatCreateDAAD(DM,Mat*);
288*014dd563SJed Brown PETSC_EXTERN PetscErrorCode MatCreateSeqUSFFT(Vec,DM,Mat*);
2893c48a1e8SJed Brown 
2903c48a1e8SJed Brown /*MC
2913c48a1e8SJed Brown        DMDASetLocalAdicFunction - Caches in a DM a local function computed by ADIC/ADIFOR
2923c48a1e8SJed Brown 
2933c48a1e8SJed Brown    Synopsis:
2943c48a1e8SJed Brown    PetscErrorCode DMDASetLocalAdicFunction(DM da,DMDALocalFunction1 ad_lf)
2953c48a1e8SJed Brown 
2963c48a1e8SJed Brown    Logically Collective on DM
2973c48a1e8SJed Brown 
2983c48a1e8SJed Brown    Input Parameter:
2993c48a1e8SJed Brown +  da - initial distributed array
3003c48a1e8SJed Brown -  ad_lf - the local function as computed by ADIC/ADIFOR
3013c48a1e8SJed Brown 
3023c48a1e8SJed Brown    Level: intermediate
3033c48a1e8SJed Brown 
3043c48a1e8SJed Brown .keywords:  distributed array, refine
3053c48a1e8SJed Brown 
3063c48a1e8SJed Brown .seealso: DMDACreate1d(), DMDACreate2d(), DMDACreate3d(), DMDestroy(), DMDAGetLocalFunction(), DMDASetLocalFunction(),
3073c48a1e8SJed Brown           DMDASetLocalJacobian()
3083c48a1e8SJed Brown M*/
3093c48a1e8SJed Brown #if defined(PETSC_HAVE_ADIC)
3103c48a1e8SJed Brown #  define DMDASetLocalAdicFunction(a,d) DMDASetLocalAdicFunction_Private(a,(DMDALocalFunction1)d)
3113c48a1e8SJed Brown #else
3123c48a1e8SJed Brown #  define DMDASetLocalAdicFunction(a,d) DMDASetLocalAdicFunction_Private(a,0)
3133c48a1e8SJed Brown #endif
3143c48a1e8SJed Brown 
315*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDASetLocalAdicMFFunction_Private(DM,DMDALocalFunction1);
3163c48a1e8SJed Brown #if defined(PETSC_HAVE_ADIC)
3173c48a1e8SJed Brown #  define DMDASetLocalAdicMFFunction(a,d) DMDASetLocalAdicMFFunction_Private(a,(DMDALocalFunction1)d)
3183c48a1e8SJed Brown #else
3193c48a1e8SJed Brown #  define DMDASetLocalAdicMFFunction(a,d) DMDASetLocalAdicMFFunction_Private(a,0)
3203c48a1e8SJed Brown #endif
321*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDASetLocalAdicFunctioni_Private(DM,PetscErrorCode (*)(DMDALocalInfo*,MatStencil*,void*,void*,void*));
3223c48a1e8SJed Brown #if defined(PETSC_HAVE_ADIC)
3233c48a1e8SJed Brown #  define DMDASetLocalAdicFunctioni(a,d) DMDASetLocalAdicFunctioni_Private(a,(PetscErrorCode (*)(DMDALocalInfo*,MatStencil*,void*,void*,void*))d)
3243c48a1e8SJed Brown #else
3253c48a1e8SJed Brown #  define DMDASetLocalAdicFunctioni(a,d) DMDASetLocalAdicFunctioni_Private(a,0)
3263c48a1e8SJed Brown #endif
327*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDASetLocalAdicMFFunctioni_Private(DM,PetscErrorCode (*)(DMDALocalInfo*,MatStencil*,void*,void*,void*));
3283c48a1e8SJed Brown #if defined(PETSC_HAVE_ADIC)
3293c48a1e8SJed Brown #  define DMDASetLocalAdicMFFunctioni(a,d) DMDASetLocalAdicMFFunctioni_Private(a,(PetscErrorCode (*)(DMDALocalInfo*,MatStencil*,void*,void*,void*))d)
3303c48a1e8SJed Brown #else
3313c48a1e8SJed Brown #  define DMDASetLocalAdicMFFunctioni(a,d) DMDASetLocalAdicMFFunctioni_Private(a,0)
3323c48a1e8SJed Brown #endif
3333c48a1e8SJed Brown 
334*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDASetLocalAdicFunctionib_Private(DM,PetscErrorCode (*)(DMDALocalInfo*,MatStencil*,void*,void*,void*));
3353c48a1e8SJed Brown #if defined(PETSC_HAVE_ADIC)
3363c48a1e8SJed Brown #  define DMDASetLocalAdicFunctionib(a,d) DMDASetLocalAdicFunctionib_Private(a,(PetscErrorCode (*)(DMDALocalInfo*,MatStencil*,void*,void*,void*))d)
3373c48a1e8SJed Brown #else
3383c48a1e8SJed Brown #  define DMDASetLocalAdicFunctionib(a,d) DMDASetLocalAdicFunctionib_Private(a,0)
3393c48a1e8SJed Brown #endif
340*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDASetLocalAdicMFFunctionib_Private(DM,PetscErrorCode (*)(DMDALocalInfo*,MatStencil*,void*,void*,void*));
3413c48a1e8SJed Brown #if defined(PETSC_HAVE_ADIC)
3423c48a1e8SJed Brown #  define DMDASetLocalAdicMFFunctionib(a,d) DMDASetLocalAdicMFFunctionib_Private(a,(PetscErrorCode (*)(DMDALocalInfo*,MatStencil*,void*,void*,void*))d)
3433c48a1e8SJed Brown #else
3443c48a1e8SJed Brown #  define DMDASetLocalAdicMFFunctionib(a,d) DMDASetLocalAdicMFFunctionib_Private(a,0)
3453c48a1e8SJed Brown #endif
3463c48a1e8SJed Brown 
347*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDAComputeFunctioniTest1(DM,void*);
348*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDASetGetMatrix(DM,PetscErrorCode (*)(DM, const MatType,Mat *));
349*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDASetBlockFills(DM,PetscInt*,PetscInt*);
350*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDASetRefinementFactor(DM,PetscInt,PetscInt,PetscInt);
351*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDAGetRefinementFactor(DM,PetscInt*,PetscInt*,PetscInt*);
3523c48a1e8SJed Brown 
353*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDAGetAdicArray(DM,PetscBool ,void*,void*,PetscInt*);
354*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDARestoreAdicArray(DM,PetscBool ,void*,void*,PetscInt*);
355*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDAGetAdicMFArray(DM,PetscBool ,void*,void*,PetscInt*);
356*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDAGetAdicMFArray4(DM,PetscBool ,void*,void*,PetscInt*);
357*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDAGetAdicMFArray9(DM,PetscBool ,void*,void*,PetscInt*);
358*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDAGetAdicMFArrayb(DM,PetscBool ,void*,void*,PetscInt*);
359*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDARestoreAdicMFArray(DM,PetscBool ,void*,void*,PetscInt*);
360*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDAGetArray(DM,PetscBool ,void*);
361*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDARestoreArray(DM,PetscBool ,void*);
362*014dd563SJed Brown PETSC_EXTERN PetscErrorCode ad_DAGetArray(DM,PetscBool ,void*);
363*014dd563SJed Brown PETSC_EXTERN PetscErrorCode ad_DARestoreArray(DM,PetscBool ,void*);
364*014dd563SJed Brown PETSC_EXTERN PetscErrorCode admf_DAGetArray(DM,PetscBool ,void*);
365*014dd563SJed Brown PETSC_EXTERN PetscErrorCode admf_DARestoreArray(DM,PetscBool ,void*);
3663c48a1e8SJed Brown 
367*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDACreatePF(DM,PF*);
3683c48a1e8SJed Brown 
369*014dd563SJed Brown PETSC_EXTERN PetscErrorCode DMDACreateSection(DM, PetscInt[], PetscInt[], PetscInt[], PetscInt[]);
37080800b1aSMatthew G Knepley 
371b859378eSBarry Smith #define DMDA_FILE_CLASSID 1211220
3723c48a1e8SJed Brown #endif
373