xref: /petsc/include/petscdmda.h (revision 80800b1a75cc5195fdbf61595e4ed55ad33c8763)
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"
79c6ac3b3SBarry Smith PETSC_EXTERN_CXX_BEGIN
83c48a1e8SJed Brown 
93c48a1e8SJed Brown /*E
103c48a1e8SJed Brown     DMDAStencilType - Determines if the stencil extends only along the coordinate directions, or also
113c48a1e8SJed Brown       to the northeast, northwest etc
123c48a1e8SJed Brown 
133c48a1e8SJed Brown    Level: beginner
143c48a1e8SJed Brown 
153c48a1e8SJed Brown .seealso: DMDACreate1d(), DMDACreate2d(), DMDACreate3d(), DMDACreate()
163c48a1e8SJed Brown E*/
173c48a1e8SJed Brown typedef enum { DMDA_STENCIL_STAR,DMDA_STENCIL_BOX } DMDAStencilType;
183c48a1e8SJed Brown 
193c48a1e8SJed Brown /*MC
203c48a1e8SJed Brown      DMDA_STENCIL_STAR - "Star"-type stencil. In logical grid coordinates, only (i,j,k), (i+s,j,k), (i,j+s,k),
213c48a1e8SJed Brown                        (i,j,k+s) are in the stencil  NOT, for example, (i+s,j+s,k)
223c48a1e8SJed Brown 
233c48a1e8SJed Brown      Level: beginner
243c48a1e8SJed Brown 
253c48a1e8SJed Brown .seealso: DMDA_STENCIL_BOX, DMDAStencilType
263c48a1e8SJed Brown M*/
273c48a1e8SJed Brown 
283c48a1e8SJed Brown /*MC
293c48a1e8SJed Brown      DMDA_STENCIL_BOX - "Box"-type stencil. In logical grid coordinates, any of (i,j,k), (i+s,j+r,k+t) may
303c48a1e8SJed Brown                       be in the stencil.
313c48a1e8SJed Brown 
323c48a1e8SJed Brown      Level: beginner
333c48a1e8SJed Brown 
343c48a1e8SJed Brown .seealso: DMDA_STENCIL_STAR, DMDAStencilType
353c48a1e8SJed Brown M*/
363c48a1e8SJed Brown 
373c48a1e8SJed Brown /*E
385d26d725SBarry Smith     DMDABoundaryType - Describes the choice for fill of ghost cells on physical domain boundaries.
393c48a1e8SJed Brown 
403c48a1e8SJed Brown    Level: beginner
413c48a1e8SJed Brown 
423c48a1e8SJed Brown    A boundary may be of type DMDA_BOUNDARY_NONE (no ghost nodes), DMDA_BOUNDARY_GHOST (ghost nodes
435d26d725SBarry Smith    exist but aren't filled, you can put values into them and then apply a stencil that uses those ghost locations),
445d26d725SBarry Smith    DMDA_BOUNDARY_MIRROR (not yet implemented), or DMDA_BOUNDARY_PERIODIC
453c48a1e8SJed Brown    (ghost nodes filled by the opposite edge of the domain).
463c48a1e8SJed Brown 
475d26d725SBarry Smith    Note: This is information for the boundary of the __PHYSICAL__ domain. It has nothing to do with boundaries between
485d26d725SBarry Smith      processes, that width is always determined by the stencil width, see DMDASetStencilWidth().
495d26d725SBarry Smith 
503c48a1e8SJed Brown .seealso: DMDASetBoundaryType(), DMDACreate1d(), DMDACreate2d(), DMDACreate3d(), DMDACreate()
513c48a1e8SJed Brown E*/
523c48a1e8SJed Brown typedef enum { DMDA_BOUNDARY_NONE, DMDA_BOUNDARY_GHOSTED, DMDA_BOUNDARY_MIRROR, DMDA_BOUNDARY_PERIODIC } DMDABoundaryType;
533c48a1e8SJed Brown 
543c48a1e8SJed Brown extern const char *DMDABoundaryTypes[];
553c48a1e8SJed Brown 
563c48a1e8SJed Brown /*E
573c48a1e8SJed Brown     DMDAInterpolationType - Defines the type of interpolation that will be returned by
58e727c939SJed Brown        DMCreateInterpolation.
593c48a1e8SJed Brown 
603c48a1e8SJed Brown    Level: beginner
613c48a1e8SJed Brown 
62e727c939SJed Brown .seealso: DMDACreate1d(), DMDACreate2d(), DMDACreate3d(), DMCreateInterpolation(), DMDASetInterpolationType(), DMDACreate()
633c48a1e8SJed Brown E*/
643c48a1e8SJed Brown typedef enum { DMDA_Q0, DMDA_Q1 } DMDAInterpolationType;
653c48a1e8SJed Brown 
663c48a1e8SJed Brown extern PetscErrorCode   DMDASetInterpolationType(DM,DMDAInterpolationType);
672dde6fd4SLisandro Dalcin extern PetscErrorCode   DMDAGetInterpolationType(DM,DMDAInterpolationType*);
683c48a1e8SJed Brown 
693c48a1e8SJed Brown /*E
703c48a1e8SJed Brown     DMDAElementType - Defines the type of elements that will be returned by
712dde6fd4SLisandro Dalcin        DMDAGetElements()
723c48a1e8SJed Brown 
733c48a1e8SJed Brown    Level: beginner
743c48a1e8SJed Brown 
75e727c939SJed Brown .seealso: DMDACreate1d(), DMDACreate2d(), DMDACreate3d(), DMCreateInterpolation(), DMDASetInterpolationType(),
762dde6fd4SLisandro Dalcin           DMDASetElementType(), DMDAGetElements(), DMDARestoreElements(), DMDACreate()
773c48a1e8SJed Brown E*/
783c48a1e8SJed Brown typedef enum { DMDA_ELEMENT_P1, DMDA_ELEMENT_Q1 } DMDAElementType;
793c48a1e8SJed Brown 
803c48a1e8SJed Brown extern PetscErrorCode   DMDASetElementType(DM,DMDAElementType);
813c48a1e8SJed Brown extern PetscErrorCode   DMDAGetElementType(DM,DMDAElementType*);
822dde6fd4SLisandro Dalcin extern PetscErrorCode   DMDAGetElements(DM,PetscInt *,PetscInt *,const PetscInt*[]);
832dde6fd4SLisandro Dalcin extern PetscErrorCode   DMDARestoreElements(DM,PetscInt *,PetscInt *,const PetscInt*[]);
843c48a1e8SJed Brown 
853c48a1e8SJed Brown typedef enum { DMDA_X,DMDA_Y,DMDA_Z } DMDADirection;
863c48a1e8SJed Brown 
873c48a1e8SJed Brown #define MATSEQUSFFT        "sequsfft"
883c48a1e8SJed Brown 
893c48a1e8SJed Brown extern PetscErrorCode  DMDACreate(MPI_Comm,DM*);
903c48a1e8SJed Brown extern PetscErrorCode  DMDASetDim(DM,PetscInt);
913c48a1e8SJed Brown extern PetscErrorCode  DMDASetSizes(DM,PetscInt,PetscInt,PetscInt);
923c48a1e8SJed Brown extern PetscErrorCode     DMDACreate1d(MPI_Comm,DMDABoundaryType,PetscInt,PetscInt,PetscInt,const PetscInt[],DM *);
933c48a1e8SJed Brown extern PetscErrorCode     DMDACreate2d(MPI_Comm,DMDABoundaryType,DMDABoundaryType,DMDAStencilType,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,const PetscInt[],const PetscInt[],DM*);
943c48a1e8SJed Brown extern PetscErrorCode     DMDACreate3d(MPI_Comm,DMDABoundaryType,DMDABoundaryType,DMDABoundaryType,DMDAStencilType,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,const PetscInt[],const PetscInt[],const PetscInt[],DM*);
953c48a1e8SJed Brown 
963c48a1e8SJed Brown extern PetscErrorCode     DMDAGlobalToNaturalBegin(DM,Vec,InsertMode,Vec);
973c48a1e8SJed Brown extern PetscErrorCode     DMDAGlobalToNaturalEnd(DM,Vec,InsertMode,Vec);
983c48a1e8SJed Brown extern PetscErrorCode     DMDANaturalToGlobalBegin(DM,Vec,InsertMode,Vec);
993c48a1e8SJed Brown extern PetscErrorCode     DMDANaturalToGlobalEnd(DM,Vec,InsertMode,Vec);
1003c48a1e8SJed Brown extern PetscErrorCode     DMDALocalToLocalBegin(DM,Vec,InsertMode,Vec);
1013c48a1e8SJed Brown extern PetscErrorCode     DMDALocalToLocalEnd(DM,Vec,InsertMode,Vec);
1023c48a1e8SJed Brown extern PetscErrorCode     DMDACreateNaturalVector(DM,Vec *);
1033c48a1e8SJed Brown 
1043c48a1e8SJed Brown extern PetscErrorCode     DMDAGetCorners(DM,PetscInt*,PetscInt*,PetscInt*,PetscInt*,PetscInt*,PetscInt*);
1053c48a1e8SJed Brown extern PetscErrorCode     DMDAGetGhostCorners(DM,PetscInt*,PetscInt*,PetscInt*,PetscInt*,PetscInt*,PetscInt*);
1063c48a1e8SJed Brown extern PetscErrorCode     DMDAGetInfo(DM,PetscInt*,PetscInt*,PetscInt*,PetscInt*,PetscInt*,PetscInt*,PetscInt*,PetscInt*,PetscInt*,DMDABoundaryType*,DMDABoundaryType*,DMDABoundaryType*,DMDAStencilType*);
1073c48a1e8SJed Brown extern PetscErrorCode     DMDAGetProcessorSubset(DM,DMDADirection,PetscInt,MPI_Comm*);
1083c48a1e8SJed Brown extern PetscErrorCode     DMDAGetProcessorSubsets(DM,DMDADirection,MPI_Comm*);
1093c48a1e8SJed Brown 
1103c48a1e8SJed Brown extern PetscErrorCode     DMDAGlobalToNaturalAllCreate(DM,VecScatter*);
1113c48a1e8SJed Brown extern PetscErrorCode     DMDANaturalAllToGlobalCreate(DM,VecScatter*);
1123c48a1e8SJed Brown 
1133c48a1e8SJed Brown extern PetscErrorCode     DMDAGetGlobalIndices(DM,PetscInt*,PetscInt**);
1143c48a1e8SJed Brown 
1153c48a1e8SJed Brown extern PetscErrorCode     DMDAGetScatter(DM,VecScatter*,VecScatter*,VecScatter*);
1163c48a1e8SJed Brown extern PetscErrorCode     DMDAGetNeighbors(DM,const PetscMPIInt**);
1173c48a1e8SJed Brown 
1183c48a1e8SJed Brown extern PetscErrorCode     DMDAGetAO(DM,AO*);
1193c48a1e8SJed Brown extern PetscErrorCode     DMDASetCoordinates(DM,Vec);
1203c48a1e8SJed Brown extern PetscErrorCode     DMDASetGhostedCoordinates(DM,Vec);
1213c48a1e8SJed Brown extern PetscErrorCode     DMDAGetCoordinates(DM,Vec *);
1223c48a1e8SJed Brown extern PetscErrorCode     DMDAGetGhostedCoordinates(DM,Vec *);
1233c48a1e8SJed Brown extern PetscErrorCode     DMDAGetCoordinateDA(DM,DM *);
1243c48a1e8SJed Brown extern PetscErrorCode     DMDASetUniformCoordinates(DM,PetscReal,PetscReal,PetscReal,PetscReal,PetscReal,PetscReal);
1253c48a1e8SJed Brown extern PetscErrorCode     DMDAGetBoundingBox(DM,PetscReal[],PetscReal[]);
1263c48a1e8SJed Brown extern PetscErrorCode     DMDAGetLocalBoundingBox(DM,PetscReal[],PetscReal[]);
127f0aa4865SJed Brown /* function to wrap coordinates around boundary */
128f0aa4865SJed Brown extern PetscErrorCode     DMDAMapCoordsToPeriodicDomain(DM,PetscScalar*,PetscScalar*);
129f0aa4865SJed Brown 
130bc2bf880SBarry Smith extern PetscErrorCode     DMDAGetReducedDA(DM,PetscInt,DM*);
1313c48a1e8SJed Brown 
1323c48a1e8SJed Brown extern PetscErrorCode     DMDASetFieldName(DM,PetscInt,const char[]);
1333c48a1e8SJed Brown extern PetscErrorCode     DMDAGetFieldName(DM,PetscInt,const char**);
1343c48a1e8SJed Brown 
1353c48a1e8SJed Brown extern PetscErrorCode  DMDASetBoundaryType(DM,DMDABoundaryType,DMDABoundaryType,DMDABoundaryType);
13654cfb0beSLisandro Dalcin extern PetscErrorCode  DMDASetDof(DM, PetscInt);
1373c48a1e8SJed Brown extern PetscErrorCode  DMDASetStencilWidth(DM, PetscInt);
1383c48a1e8SJed Brown extern PetscErrorCode  DMDASetOwnershipRanges(DM,const PetscInt[],const PetscInt[],const PetscInt[]);
1393c48a1e8SJed Brown extern PetscErrorCode  DMDAGetOwnershipRanges(DM,const PetscInt**,const PetscInt**,const PetscInt**);
1403c48a1e8SJed Brown extern PetscErrorCode  DMDASetNumProcs(DM, PetscInt, PetscInt, PetscInt);
1413c48a1e8SJed Brown extern PetscErrorCode  DMDASetStencilType(DM, DMDAStencilType);
1423c48a1e8SJed Brown 
1433c48a1e8SJed Brown extern PetscErrorCode     DMDAVecGetArray(DM,Vec,void *);
1443c48a1e8SJed Brown extern PetscErrorCode     DMDAVecRestoreArray(DM,Vec,void *);
1453c48a1e8SJed Brown 
1463c48a1e8SJed Brown extern PetscErrorCode     DMDAVecGetArrayDOF(DM,Vec,void *);
1473c48a1e8SJed Brown extern PetscErrorCode     DMDAVecRestoreArrayDOF(DM,Vec,void *);
1483c48a1e8SJed Brown 
1493c48a1e8SJed Brown extern PetscErrorCode     DMDASplitComm2d(MPI_Comm,PetscInt,PetscInt,PetscInt,MPI_Comm*);
1503c48a1e8SJed Brown 
1513c48a1e8SJed Brown /*S
1523c48a1e8SJed Brown      DMDALocalInfo - C struct that contains information about a structured grid and a processors logical
1533c48a1e8SJed Brown               location in it.
1543c48a1e8SJed Brown 
1553c48a1e8SJed Brown    Level: beginner
1563c48a1e8SJed Brown 
1573c48a1e8SJed Brown   Concepts: distributed array
1583c48a1e8SJed Brown 
1593c48a1e8SJed Brown   Developer note: Then entries in this struct are int instead of PetscInt so that the elements may
1603c48a1e8SJed Brown                   be extracted in Fortran as if from an integer array
1613c48a1e8SJed Brown 
1623c48a1e8SJed Brown .seealso:  DMDACreate1d(), DMDACreate2d(), DMDACreate3d(), DMDestroy(), DM, DMDAGetLocalInfo(), DMDAGetInfo()
1633c48a1e8SJed Brown S*/
1643c48a1e8SJed Brown typedef struct {
1653c48a1e8SJed Brown   PetscInt       dim,dof,sw;
1663c48a1e8SJed Brown   PetscInt       mx,my,mz;    /* global number of grid points in each direction */
1676ee1aa1aSDmitry Karpeev   PetscInt       xs,ys,zs;    /* starting point of this processor, excluding ghosts */
1683c48a1e8SJed Brown   PetscInt       xm,ym,zm;    /* number of grid points on this processor, excluding ghosts */
1693c48a1e8SJed Brown   PetscInt       gxs,gys,gzs;    /* starting point of this processor including ghosts */
1703c48a1e8SJed Brown   PetscInt       gxm,gym,gzm;    /* number of grid points on this processor including ghosts */
1713c48a1e8SJed Brown   DMDABoundaryType bx,by,bz; /* type of ghost nodes at boundary */
1723c48a1e8SJed Brown   DMDAStencilType  st;
1733c48a1e8SJed Brown   DM             da;
1743c48a1e8SJed Brown } DMDALocalInfo;
1753c48a1e8SJed Brown 
1763c48a1e8SJed Brown /*MC
1773c48a1e8SJed Brown       DMDAForEachPointBegin2d - Starts a loop over the local part of a two dimensional DMDA
1783c48a1e8SJed Brown 
1793c48a1e8SJed Brown    Synopsis:
1803c48a1e8SJed Brown    void  DMDAForEachPointBegin2d(DALocalInfo *info,PetscInt i,PetscInt j);
1813c48a1e8SJed Brown 
1823c48a1e8SJed Brown    Not Collective
1833c48a1e8SJed Brown 
1843c48a1e8SJed Brown    Level: intermediate
1853c48a1e8SJed Brown 
1863c48a1e8SJed Brown .seealso: DMDAForEachPointEnd2d(), DMDAVecGetArray()
1873c48a1e8SJed Brown M*/
1883c48a1e8SJed Brown #define DMDAForEachPointBegin2d(info,i,j) {\
1893c48a1e8SJed Brown   PetscInt _xints = info->xs,_xinte = info->xs+info->xm,_yints = info->ys,_yinte = info->ys+info->ym;\
1903c48a1e8SJed Brown   for (j=_yints; j<_yinte; j++) {\
1913c48a1e8SJed Brown     for (i=_xints; i<_xinte; i++) {\
1923c48a1e8SJed Brown 
1933c48a1e8SJed Brown /*MC
1943c48a1e8SJed Brown       DMDAForEachPointEnd2d - Ends a loop over the local part of a two dimensional DMDA
1953c48a1e8SJed Brown 
1963c48a1e8SJed Brown    Synopsis:
1973c48a1e8SJed Brown    void  DMDAForEachPointEnd2d;
1983c48a1e8SJed Brown 
1993c48a1e8SJed Brown    Not Collective
2003c48a1e8SJed Brown 
2013c48a1e8SJed Brown    Level: intermediate
2023c48a1e8SJed Brown 
2033c48a1e8SJed Brown .seealso: DMDAForEachPointBegin2d(), DMDAVecGetArray()
2043c48a1e8SJed Brown M*/
2053c48a1e8SJed Brown #define DMDAForEachPointEnd2d }}}
2063c48a1e8SJed Brown 
2073c48a1e8SJed Brown /*MC
2083c48a1e8SJed Brown       DMDACoor2d - Structure for holding 2d (x and y) coordinates.
2093c48a1e8SJed Brown 
2103c48a1e8SJed Brown     Level: intermediate
2113c48a1e8SJed Brown 
2123c48a1e8SJed Brown     Sample Usage:
2133c48a1e8SJed Brown       DMDACoor2d **coors;
2143c48a1e8SJed Brown       Vec      vcoors;
2153c48a1e8SJed Brown       DM       cda;
2163c48a1e8SJed Brown 
2173c48a1e8SJed Brown       DMDAGetCoordinates(da,&vcoors);
2183c48a1e8SJed Brown       DMDAGetCoordinateDA(da,&cda);
2193c48a1e8SJed Brown       DMDAVecGetArray(cda,vcoors,&coors);
2203c48a1e8SJed Brown       DMDAGetCorners(cda,&mstart,&nstart,0,&m,&n,0)
2213c48a1e8SJed Brown       for (i=mstart; i<mstart+m; i++) {
2223c48a1e8SJed Brown         for (j=nstart; j<nstart+n; j++) {
2233c48a1e8SJed Brown           x = coors[j][i].x;
2243c48a1e8SJed Brown           y = coors[j][i].y;
2253c48a1e8SJed Brown           ......
2263c48a1e8SJed Brown         }
2273c48a1e8SJed Brown       }
2283c48a1e8SJed Brown       DMDAVecRestoreArray(dac,vcoors,&coors);
2293c48a1e8SJed Brown 
2303c48a1e8SJed Brown .seealso: DMDACoor3d, DMDAForEachPointBegin(), DMDAGetCoordinateDA(), DMDAGetCoordinates(), DMDAGetGhostCoordinates()
2313c48a1e8SJed Brown M*/
2323c48a1e8SJed Brown typedef struct {PetscScalar x,y;} DMDACoor2d;
2333c48a1e8SJed Brown 
2343c48a1e8SJed Brown /*MC
2353c48a1e8SJed Brown       DMDACoor3d - Structure for holding 3d (x, y and z) coordinates.
2363c48a1e8SJed Brown 
2373c48a1e8SJed Brown     Level: intermediate
2383c48a1e8SJed Brown 
2393c48a1e8SJed Brown     Sample Usage:
2403c48a1e8SJed Brown       DMDACoor3d ***coors;
2413c48a1e8SJed Brown       Vec      vcoors;
2423c48a1e8SJed Brown       DM       cda;
2433c48a1e8SJed Brown 
2443c48a1e8SJed Brown       DMDAGetCoordinates(da,&vcoors);
2453c48a1e8SJed Brown       DMDAGetCoordinateDA(da,&cda);
2463c48a1e8SJed Brown       DMDAVecGetArray(cda,vcoors,&coors);
2473c48a1e8SJed Brown       DMDAGetCorners(cda,&mstart,&nstart,&pstart,&m,&n,&p)
2483c48a1e8SJed Brown       for (i=mstart; i<mstart+m; i++) {
2493c48a1e8SJed Brown         for (j=nstart; j<nstart+n; j++) {
2503c48a1e8SJed Brown           for (k=pstart; k<pstart+p; k++) {
2513c48a1e8SJed Brown             x = coors[k][j][i].x;
2523c48a1e8SJed Brown             y = coors[k][j][i].y;
2533c48a1e8SJed Brown             z = coors[k][j][i].z;
2543c48a1e8SJed Brown           ......
2553c48a1e8SJed Brown         }
2563c48a1e8SJed Brown       }
2573c48a1e8SJed Brown       DMDAVecRestoreArray(dac,vcoors,&coors);
2583c48a1e8SJed Brown 
2593c48a1e8SJed Brown .seealso: DMDACoor2d, DMDAForEachPointBegin(), DMDAGetCoordinateDA(), DMDAGetCoordinates(), DMDAGetGhostCoordinates()
2603c48a1e8SJed Brown M*/
2613c48a1e8SJed Brown typedef struct {PetscScalar x,y,z;} DMDACoor3d;
2623c48a1e8SJed Brown 
2633c48a1e8SJed Brown extern PetscErrorCode   DMDAGetLocalInfo(DM,DMDALocalInfo*);
2643c48a1e8SJed Brown typedef PetscErrorCode (*DMDALocalFunction1)(DMDALocalInfo*,void*,void*,void*);
265837ad101SBarry Smith extern PetscErrorCode   DMDAComputeFunctionLocal(DM, DMDALocalFunction1, Vec, Vec, void *);
266837ad101SBarry Smith extern PetscErrorCode   DMDAComputeFunctionLocalGhost(DM, DMDALocalFunction1, Vec, Vec, void *);
2673c48a1e8SJed Brown extern PetscErrorCode   DMDAFormJacobianLocal(DM, DMDALocalFunction1, Vec, Mat, void *);
268837ad101SBarry Smith extern PetscErrorCode   DMDAComputeFunction1(DM,Vec,Vec,void*);
269837ad101SBarry Smith extern PetscErrorCode   DMDAComputeFunction(DM,PetscErrorCode (*)(void),Vec,Vec,void*);
270837ad101SBarry Smith extern PetscErrorCode   DMDAComputeFunctioni1(DM,PetscInt,Vec,PetscScalar*,void*);
271837ad101SBarry Smith extern PetscErrorCode   DMDAComputeFunctionib1(DM,PetscInt,Vec,PetscScalar*,void*);
2723c48a1e8SJed Brown extern PetscErrorCode   DMDAComputeJacobian1WithAdic(DM,Vec,Mat,void*);
2733c48a1e8SJed Brown extern PetscErrorCode   DMDAComputeJacobian1WithAdifor(DM,Vec,Mat,void*);
2743c48a1e8SJed Brown extern PetscErrorCode   DMDAMultiplyByJacobian1WithAdic(DM,Vec,Vec,Vec,void*);
2753c48a1e8SJed Brown extern PetscErrorCode   DMDAMultiplyByJacobian1WithAdifor(DM,Vec,Vec,Vec,void*);
2763c48a1e8SJed Brown extern PetscErrorCode   DMDAMultiplyByJacobian1WithAD(DM,Vec,Vec,Vec,void*);
2773c48a1e8SJed Brown extern PetscErrorCode   DMDAComputeJacobian1(DM,Vec,Mat,void*);
2783c48a1e8SJed Brown extern PetscErrorCode   DMDAGetLocalFunction(DM,DMDALocalFunction1*);
2793c48a1e8SJed Brown extern PetscErrorCode   DMDASetLocalFunction(DM,DMDALocalFunction1);
2803c48a1e8SJed Brown extern PetscErrorCode   DMDASetLocalFunctioni(DM,PetscErrorCode (*)(DMDALocalInfo*,MatStencil*,void*,PetscScalar*,void*));
2813c48a1e8SJed Brown extern PetscErrorCode   DMDASetLocalFunctionib(DM,PetscErrorCode (*)(DMDALocalInfo*,MatStencil*,void*,PetscScalar*,void*));
2823c48a1e8SJed Brown extern PetscErrorCode   DMDAGetLocalJacobian(DM,DMDALocalFunction1*);
2833c48a1e8SJed Brown extern PetscErrorCode   DMDASetLocalJacobian(DM,DMDALocalFunction1);
2843c48a1e8SJed Brown extern PetscErrorCode   DMDASetLocalAdicFunction_Private(DM,DMDALocalFunction1);
2853c48a1e8SJed Brown 
28695ee5b0eSBarry Smith extern PetscErrorCode MatSetDM(Mat,DM);
2873c48a1e8SJed Brown extern PetscErrorCode MatRegisterDAAD(void);
2883c48a1e8SJed Brown extern PetscErrorCode MatCreateDAAD(DM,Mat*);
2893c48a1e8SJed Brown extern PetscErrorCode MatCreateSeqUSFFT(Vec,DM,Mat*);
2903c48a1e8SJed Brown 
2913c48a1e8SJed Brown /*MC
2923c48a1e8SJed Brown        DMDASetLocalAdicFunction - Caches in a DM a local function computed by ADIC/ADIFOR
2933c48a1e8SJed Brown 
2943c48a1e8SJed Brown    Synopsis:
2953c48a1e8SJed Brown    PetscErrorCode DMDASetLocalAdicFunction(DM da,DMDALocalFunction1 ad_lf)
2963c48a1e8SJed Brown 
2973c48a1e8SJed Brown    Logically Collective on DM
2983c48a1e8SJed Brown 
2993c48a1e8SJed Brown    Input Parameter:
3003c48a1e8SJed Brown +  da - initial distributed array
3013c48a1e8SJed Brown -  ad_lf - the local function as computed by ADIC/ADIFOR
3023c48a1e8SJed Brown 
3033c48a1e8SJed Brown    Level: intermediate
3043c48a1e8SJed Brown 
3053c48a1e8SJed Brown .keywords:  distributed array, refine
3063c48a1e8SJed Brown 
3073c48a1e8SJed Brown .seealso: DMDACreate1d(), DMDACreate2d(), DMDACreate3d(), DMDestroy(), DMDAGetLocalFunction(), DMDASetLocalFunction(),
3083c48a1e8SJed Brown           DMDASetLocalJacobian()
3093c48a1e8SJed Brown M*/
3103c48a1e8SJed Brown #if defined(PETSC_HAVE_ADIC)
3113c48a1e8SJed Brown #  define DMDASetLocalAdicFunction(a,d) DMDASetLocalAdicFunction_Private(a,(DMDALocalFunction1)d)
3123c48a1e8SJed Brown #else
3133c48a1e8SJed Brown #  define DMDASetLocalAdicFunction(a,d) DMDASetLocalAdicFunction_Private(a,0)
3143c48a1e8SJed Brown #endif
3153c48a1e8SJed Brown 
3163c48a1e8SJed Brown extern PetscErrorCode   DMDASetLocalAdicMFFunction_Private(DM,DMDALocalFunction1);
3173c48a1e8SJed Brown #if defined(PETSC_HAVE_ADIC)
3183c48a1e8SJed Brown #  define DMDASetLocalAdicMFFunction(a,d) DMDASetLocalAdicMFFunction_Private(a,(DMDALocalFunction1)d)
3193c48a1e8SJed Brown #else
3203c48a1e8SJed Brown #  define DMDASetLocalAdicMFFunction(a,d) DMDASetLocalAdicMFFunction_Private(a,0)
3213c48a1e8SJed Brown #endif
3223c48a1e8SJed Brown extern PetscErrorCode   DMDASetLocalAdicFunctioni_Private(DM,PetscErrorCode (*)(DMDALocalInfo*,MatStencil*,void*,void*,void*));
3233c48a1e8SJed Brown #if defined(PETSC_HAVE_ADIC)
3243c48a1e8SJed Brown #  define DMDASetLocalAdicFunctioni(a,d) DMDASetLocalAdicFunctioni_Private(a,(PetscErrorCode (*)(DMDALocalInfo*,MatStencil*,void*,void*,void*))d)
3253c48a1e8SJed Brown #else
3263c48a1e8SJed Brown #  define DMDASetLocalAdicFunctioni(a,d) DMDASetLocalAdicFunctioni_Private(a,0)
3273c48a1e8SJed Brown #endif
3283c48a1e8SJed Brown extern PetscErrorCode   DMDASetLocalAdicMFFunctioni_Private(DM,PetscErrorCode (*)(DMDALocalInfo*,MatStencil*,void*,void*,void*));
3293c48a1e8SJed Brown #if defined(PETSC_HAVE_ADIC)
3303c48a1e8SJed Brown #  define DMDASetLocalAdicMFFunctioni(a,d) DMDASetLocalAdicMFFunctioni_Private(a,(PetscErrorCode (*)(DMDALocalInfo*,MatStencil*,void*,void*,void*))d)
3313c48a1e8SJed Brown #else
3323c48a1e8SJed Brown #  define DMDASetLocalAdicMFFunctioni(a,d) DMDASetLocalAdicMFFunctioni_Private(a,0)
3333c48a1e8SJed Brown #endif
3343c48a1e8SJed Brown 
3353c48a1e8SJed Brown extern PetscErrorCode   DMDASetLocalAdicFunctionib_Private(DM,PetscErrorCode (*)(DMDALocalInfo*,MatStencil*,void*,void*,void*));
3363c48a1e8SJed Brown #if defined(PETSC_HAVE_ADIC)
3373c48a1e8SJed Brown #  define DMDASetLocalAdicFunctionib(a,d) DMDASetLocalAdicFunctionib_Private(a,(PetscErrorCode (*)(DMDALocalInfo*,MatStencil*,void*,void*,void*))d)
3383c48a1e8SJed Brown #else
3393c48a1e8SJed Brown #  define DMDASetLocalAdicFunctionib(a,d) DMDASetLocalAdicFunctionib_Private(a,0)
3403c48a1e8SJed Brown #endif
3413c48a1e8SJed Brown extern PetscErrorCode   DMDASetLocalAdicMFFunctionib_Private(DM,PetscErrorCode (*)(DMDALocalInfo*,MatStencil*,void*,void*,void*));
3423c48a1e8SJed Brown #if defined(PETSC_HAVE_ADIC)
3433c48a1e8SJed Brown #  define DMDASetLocalAdicMFFunctionib(a,d) DMDASetLocalAdicMFFunctionib_Private(a,(PetscErrorCode (*)(DMDALocalInfo*,MatStencil*,void*,void*,void*))d)
3443c48a1e8SJed Brown #else
3453c48a1e8SJed Brown #  define DMDASetLocalAdicMFFunctionib(a,d) DMDASetLocalAdicMFFunctionib_Private(a,0)
3463c48a1e8SJed Brown #endif
3473c48a1e8SJed Brown 
348837ad101SBarry Smith extern PetscErrorCode   DMDAComputeFunctioniTest1(DM,void*);
3493c48a1e8SJed Brown extern PetscErrorCode   DMDASetGetMatrix(DM,PetscErrorCode (*)(DM, const MatType,Mat *));
3503c48a1e8SJed Brown extern PetscErrorCode   DMDASetBlockFills(DM,PetscInt*,PetscInt*);
3513c48a1e8SJed Brown extern PetscErrorCode   DMDASetRefinementFactor(DM,PetscInt,PetscInt,PetscInt);
3523c48a1e8SJed Brown extern PetscErrorCode   DMDAGetRefinementFactor(DM,PetscInt*,PetscInt*,PetscInt*);
3533c48a1e8SJed Brown 
3543c48a1e8SJed Brown extern PetscErrorCode   DMDAGetAdicArray(DM,PetscBool ,void*,void*,PetscInt*);
3553c48a1e8SJed Brown extern PetscErrorCode   DMDARestoreAdicArray(DM,PetscBool ,void*,void*,PetscInt*);
3563c48a1e8SJed Brown extern PetscErrorCode   DMDAGetAdicMFArray(DM,PetscBool ,void*,void*,PetscInt*);
3573c48a1e8SJed Brown extern PetscErrorCode   DMDAGetAdicMFArray4(DM,PetscBool ,void*,void*,PetscInt*);
3583c48a1e8SJed Brown extern PetscErrorCode   DMDAGetAdicMFArray9(DM,PetscBool ,void*,void*,PetscInt*);
3593c48a1e8SJed Brown extern PetscErrorCode   DMDAGetAdicMFArrayb(DM,PetscBool ,void*,void*,PetscInt*);
3603c48a1e8SJed Brown extern PetscErrorCode   DMDARestoreAdicMFArray(DM,PetscBool ,void*,void*,PetscInt*);
3613c48a1e8SJed Brown extern PetscErrorCode   DMDAGetArray(DM,PetscBool ,void*);
3623c48a1e8SJed Brown extern PetscErrorCode   DMDARestoreArray(DM,PetscBool ,void*);
3633c48a1e8SJed Brown extern PetscErrorCode   ad_DAGetArray(DM,PetscBool ,void*);
3643c48a1e8SJed Brown extern PetscErrorCode   ad_DARestoreArray(DM,PetscBool ,void*);
3653c48a1e8SJed Brown extern PetscErrorCode   admf_DAGetArray(DM,PetscBool ,void*);
3663c48a1e8SJed Brown extern PetscErrorCode   admf_DARestoreArray(DM,PetscBool ,void*);
3673c48a1e8SJed Brown 
3683c48a1e8SJed Brown extern PetscErrorCode   DMDACreatePF(DM,PF*);
3693c48a1e8SJed Brown 
370*80800b1aSMatthew G Knepley extern PetscErrorCode DMDACreateSection(DM, PetscInt[], PetscInt[], PetscInt[], PetscInt[]);
371*80800b1aSMatthew G Knepley 
372b859378eSBarry Smith #define DMDA_FILE_CLASSID 1211220
3739c6ac3b3SBarry Smith PETSC_EXTERN_CXX_END
3743c48a1e8SJed Brown #endif
375