xref: /petsc/include/petscdmda.h (revision eac7c33221af6a6edc234977f8a28fa37aa2d3d2)
13c48a1e8SJed Brown #if !defined(__PETSCDMDA_H)
23c48a1e8SJed Brown #define __PETSCDMDA_H
33c48a1e8SJed Brown 
43c48a1e8SJed Brown #include "petscdm.h"
53c48a1e8SJed Brown #include "petscpf.h"
6*eac7c332SJed 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
373c48a1e8SJed Brown     DMDABoundaryType - Describes the choice for fill of ghost cells on 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
423c48a1e8SJed Brown    exist but aren't filled), DMDA_BOUNDARY_MIRROR (not yet implemented), or DMDA_BOUNDARY_PERIODIC
433c48a1e8SJed Brown    (ghost nodes filled by the opposite edge of the domain).
443c48a1e8SJed Brown 
453c48a1e8SJed Brown .seealso: DMDASetBoundaryType(), DMDACreate1d(), DMDACreate2d(), DMDACreate3d(), DMDACreate()
463c48a1e8SJed Brown E*/
473c48a1e8SJed Brown typedef enum { DMDA_BOUNDARY_NONE, DMDA_BOUNDARY_GHOSTED, DMDA_BOUNDARY_MIRROR, DMDA_BOUNDARY_PERIODIC } DMDABoundaryType;
483c48a1e8SJed Brown 
493c48a1e8SJed Brown extern const char *DMDABoundaryTypes[];
503c48a1e8SJed Brown 
513c48a1e8SJed Brown /*E
523c48a1e8SJed Brown     DMDAInterpolationType - Defines the type of interpolation that will be returned by
533c48a1e8SJed Brown        DMGetInterpolation.
543c48a1e8SJed Brown 
553c48a1e8SJed Brown    Level: beginner
563c48a1e8SJed Brown 
573c48a1e8SJed Brown .seealso: DMDACreate1d(), DMDACreate2d(), DMDACreate3d(), DMGetInterpolation(), DMDASetInterpolationType(), DMDACreate()
583c48a1e8SJed Brown E*/
593c48a1e8SJed Brown typedef enum { DMDA_Q0, DMDA_Q1 } DMDAInterpolationType;
603c48a1e8SJed Brown 
613c48a1e8SJed Brown extern PetscErrorCode   DMDASetInterpolationType(DM,DMDAInterpolationType);
623c48a1e8SJed Brown 
633c48a1e8SJed Brown /*E
643c48a1e8SJed Brown     DMDAElementType - Defines the type of elements that will be returned by
653c48a1e8SJed Brown        DMGetElements()
663c48a1e8SJed Brown 
673c48a1e8SJed Brown    Level: beginner
683c48a1e8SJed Brown 
693c48a1e8SJed Brown .seealso: DMDACreate1d(), DMDACreate2d(), DMDACreate3d(), DMGetInterpolation(), DMDASetInterpolationType(),
703c48a1e8SJed Brown           DMDASetElementType(), DMGetElements(), DMRestoreElements(), DMDACreate()
713c48a1e8SJed Brown E*/
723c48a1e8SJed Brown typedef enum { DMDA_ELEMENT_P1, DMDA_ELEMENT_Q1 } DMDAElementType;
733c48a1e8SJed Brown 
743c48a1e8SJed Brown extern PetscErrorCode   DMDASetElementType(DM,DMDAElementType);
753c48a1e8SJed Brown extern PetscErrorCode   DMDAGetElementType(DM,DMDAElementType*);
763c48a1e8SJed Brown 
773c48a1e8SJed Brown typedef enum { DMDA_X,DMDA_Y,DMDA_Z } DMDADirection;
783c48a1e8SJed Brown 
793c48a1e8SJed Brown #define MATSEQUSFFT        "sequsfft"
803c48a1e8SJed Brown 
813c48a1e8SJed Brown extern PetscErrorCode  DMDACreate(MPI_Comm,DM*);
823c48a1e8SJed Brown extern PetscErrorCode  DMDASetDim(DM,PetscInt);
833c48a1e8SJed Brown extern PetscErrorCode  DMDASetSizes(DM,PetscInt,PetscInt,PetscInt);
843c48a1e8SJed Brown extern PetscErrorCode     DMDACreate1d(MPI_Comm,DMDABoundaryType,PetscInt,PetscInt,PetscInt,const PetscInt[],DM *);
853c48a1e8SJed Brown extern PetscErrorCode     DMDACreate2d(MPI_Comm,DMDABoundaryType,DMDABoundaryType,DMDAStencilType,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,const PetscInt[],const PetscInt[],DM*);
863c48a1e8SJed 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*);
873c48a1e8SJed Brown 
883c48a1e8SJed Brown extern PetscErrorCode     DMDAGlobalToNaturalBegin(DM,Vec,InsertMode,Vec);
893c48a1e8SJed Brown extern PetscErrorCode     DMDAGlobalToNaturalEnd(DM,Vec,InsertMode,Vec);
903c48a1e8SJed Brown extern PetscErrorCode     DMDANaturalToGlobalBegin(DM,Vec,InsertMode,Vec);
913c48a1e8SJed Brown extern PetscErrorCode     DMDANaturalToGlobalEnd(DM,Vec,InsertMode,Vec);
923c48a1e8SJed Brown extern PetscErrorCode     DMDALocalToLocalBegin(DM,Vec,InsertMode,Vec);
933c48a1e8SJed Brown extern PetscErrorCode     DMDALocalToLocalEnd(DM,Vec,InsertMode,Vec);
943c48a1e8SJed Brown extern PetscErrorCode     DMDACreateNaturalVector(DM,Vec *);
953c48a1e8SJed Brown 
963c48a1e8SJed Brown extern PetscErrorCode     DMDALoad(PetscViewer,PetscInt,PetscInt,PetscInt,DM *);
973c48a1e8SJed Brown extern PetscErrorCode     DMDAGetCorners(DM,PetscInt*,PetscInt*,PetscInt*,PetscInt*,PetscInt*,PetscInt*);
983c48a1e8SJed Brown extern PetscErrorCode     DMDAGetGhostCorners(DM,PetscInt*,PetscInt*,PetscInt*,PetscInt*,PetscInt*,PetscInt*);
993c48a1e8SJed Brown extern PetscErrorCode     DMDAGetInfo(DM,PetscInt*,PetscInt*,PetscInt*,PetscInt*,PetscInt*,PetscInt*,PetscInt*,PetscInt*,PetscInt*,DMDABoundaryType*,DMDABoundaryType*,DMDABoundaryType*,DMDAStencilType*);
1003c48a1e8SJed Brown extern PetscErrorCode     DMDAGetProcessorSubset(DM,DMDADirection,PetscInt,MPI_Comm*);
1013c48a1e8SJed Brown extern PetscErrorCode     DMDAGetProcessorSubsets(DM,DMDADirection,MPI_Comm*);
1023c48a1e8SJed Brown 
1033c48a1e8SJed Brown extern PetscErrorCode     DMDAGlobalToNaturalAllCreate(DM,VecScatter*);
1043c48a1e8SJed Brown extern PetscErrorCode     DMDANaturalAllToGlobalCreate(DM,VecScatter*);
1053c48a1e8SJed Brown 
1063c48a1e8SJed Brown extern PetscErrorCode     DMDAGetGlobalIndices(DM,PetscInt*,PetscInt**);
1073c48a1e8SJed Brown 
1083c48a1e8SJed Brown extern PetscErrorCode     DMDAGetScatter(DM,VecScatter*,VecScatter*,VecScatter*);
1093c48a1e8SJed Brown extern PetscErrorCode     DMDAGetNeighbors(DM,const PetscMPIInt**);
1103c48a1e8SJed Brown 
1113c48a1e8SJed Brown extern PetscErrorCode     DMDAGetAO(DM,AO*);
1123c48a1e8SJed Brown extern PetscErrorCode     DMDASetCoordinates(DM,Vec);
1133c48a1e8SJed Brown extern PetscErrorCode     DMDASetGhostedCoordinates(DM,Vec);
1143c48a1e8SJed Brown extern PetscErrorCode     DMDAGetCoordinates(DM,Vec *);
1153c48a1e8SJed Brown extern PetscErrorCode     DMDAGetGhostedCoordinates(DM,Vec *);
1163c48a1e8SJed Brown extern PetscErrorCode     DMDAGetCoordinateDA(DM,DM *);
1173c48a1e8SJed Brown extern PetscErrorCode     DMDASetUniformCoordinates(DM,PetscReal,PetscReal,PetscReal,PetscReal,PetscReal,PetscReal);
1183c48a1e8SJed Brown extern PetscErrorCode     DMDAGetBoundingBox(DM,PetscReal[],PetscReal[]);
1193c48a1e8SJed Brown extern PetscErrorCode     DMDAGetLocalBoundingBox(DM,PetscReal[],PetscReal[]);
1203c48a1e8SJed Brown extern PetscErrorCode     DMDASetFieldName(DM,PetscInt,const char[]);
1213c48a1e8SJed Brown extern PetscErrorCode     DMDAGetFieldName(DM,PetscInt,const char**);
1223c48a1e8SJed Brown 
1233c48a1e8SJed Brown extern PetscErrorCode  DMDASetBoundaryType(DM,DMDABoundaryType,DMDABoundaryType,DMDABoundaryType);
1243c48a1e8SJed Brown extern PetscErrorCode  DMDASetDof(DM, int);
1253c48a1e8SJed Brown extern PetscErrorCode  DMDASetStencilWidth(DM, PetscInt);
1263c48a1e8SJed Brown extern PetscErrorCode  DMDASetOwnershipRanges(DM,const PetscInt[],const PetscInt[],const PetscInt[]);
1273c48a1e8SJed Brown extern PetscErrorCode  DMDAGetOwnershipRanges(DM,const PetscInt**,const PetscInt**,const PetscInt**);
1283c48a1e8SJed Brown extern PetscErrorCode  DMDASetNumProcs(DM, PetscInt, PetscInt, PetscInt);
1293c48a1e8SJed Brown extern PetscErrorCode  DMDASetStencilType(DM, DMDAStencilType);
1303c48a1e8SJed Brown 
1313c48a1e8SJed Brown extern PetscErrorCode     DMDAVecGetArray(DM,Vec,void *);
1323c48a1e8SJed Brown extern PetscErrorCode     DMDAVecRestoreArray(DM,Vec,void *);
1333c48a1e8SJed Brown 
1343c48a1e8SJed Brown extern PetscErrorCode     DMDAVecGetArrayDOF(DM,Vec,void *);
1353c48a1e8SJed Brown extern PetscErrorCode     DMDAVecRestoreArrayDOF(DM,Vec,void *);
1363c48a1e8SJed Brown 
1373c48a1e8SJed Brown extern PetscErrorCode     DMDASplitComm2d(MPI_Comm,PetscInt,PetscInt,PetscInt,MPI_Comm*);
1383c48a1e8SJed Brown 
1393c48a1e8SJed Brown /*S
1403c48a1e8SJed Brown      DMDALocalInfo - C struct that contains information about a structured grid and a processors logical
1413c48a1e8SJed Brown               location in it.
1423c48a1e8SJed Brown 
1433c48a1e8SJed Brown    Level: beginner
1443c48a1e8SJed Brown 
1453c48a1e8SJed Brown   Concepts: distributed array
1463c48a1e8SJed Brown 
1473c48a1e8SJed Brown   Developer note: Then entries in this struct are int instead of PetscInt so that the elements may
1483c48a1e8SJed Brown                   be extracted in Fortran as if from an integer array
1493c48a1e8SJed Brown 
1503c48a1e8SJed Brown .seealso:  DMDACreate1d(), DMDACreate2d(), DMDACreate3d(), DMDestroy(), DM, DMDAGetLocalInfo(), DMDAGetInfo()
1513c48a1e8SJed Brown S*/
1523c48a1e8SJed Brown typedef struct {
1533c48a1e8SJed Brown   PetscInt       dim,dof,sw;
1543c48a1e8SJed Brown   PetscInt       mx,my,mz;    /* global number of grid points in each direction */
1553c48a1e8SJed Brown   PetscInt       xs,ys,zs;    /* starting pointd of this processor, excluding ghosts */
1563c48a1e8SJed Brown   PetscInt       xm,ym,zm;    /* number of grid points on this processor, excluding ghosts */
1573c48a1e8SJed Brown   PetscInt       gxs,gys,gzs;    /* starting point of this processor including ghosts */
1583c48a1e8SJed Brown   PetscInt       gxm,gym,gzm;    /* number of grid points on this processor including ghosts */
1593c48a1e8SJed Brown   DMDABoundaryType bx,by,bz; /* type of ghost nodes at boundary */
1603c48a1e8SJed Brown   DMDAStencilType  st;
1613c48a1e8SJed Brown   DM             da;
1623c48a1e8SJed Brown } DMDALocalInfo;
1633c48a1e8SJed Brown 
1643c48a1e8SJed Brown /*MC
1653c48a1e8SJed Brown       DMDAForEachPointBegin2d - Starts a loop over the local part of a two dimensional DMDA
1663c48a1e8SJed Brown 
1673c48a1e8SJed Brown    Synopsis:
1683c48a1e8SJed Brown    void  DMDAForEachPointBegin2d(DALocalInfo *info,PetscInt i,PetscInt j);
1693c48a1e8SJed Brown 
1703c48a1e8SJed Brown    Not Collective
1713c48a1e8SJed Brown 
1723c48a1e8SJed Brown    Level: intermediate
1733c48a1e8SJed Brown 
1743c48a1e8SJed Brown .seealso: DMDAForEachPointEnd2d(), DMDAVecGetArray()
1753c48a1e8SJed Brown M*/
1763c48a1e8SJed Brown #define DMDAForEachPointBegin2d(info,i,j) {\
1773c48a1e8SJed Brown   PetscInt _xints = info->xs,_xinte = info->xs+info->xm,_yints = info->ys,_yinte = info->ys+info->ym;\
1783c48a1e8SJed Brown   for (j=_yints; j<_yinte; j++) {\
1793c48a1e8SJed Brown     for (i=_xints; i<_xinte; i++) {\
1803c48a1e8SJed Brown 
1813c48a1e8SJed Brown /*MC
1823c48a1e8SJed Brown       DMDAForEachPointEnd2d - Ends a loop over the local part of a two dimensional DMDA
1833c48a1e8SJed Brown 
1843c48a1e8SJed Brown    Synopsis:
1853c48a1e8SJed Brown    void  DMDAForEachPointEnd2d;
1863c48a1e8SJed Brown 
1873c48a1e8SJed Brown    Not Collective
1883c48a1e8SJed Brown 
1893c48a1e8SJed Brown    Level: intermediate
1903c48a1e8SJed Brown 
1913c48a1e8SJed Brown .seealso: DMDAForEachPointBegin2d(), DMDAVecGetArray()
1923c48a1e8SJed Brown M*/
1933c48a1e8SJed Brown #define DMDAForEachPointEnd2d }}}
1943c48a1e8SJed Brown 
1953c48a1e8SJed Brown /*MC
1963c48a1e8SJed Brown       DMDACoor2d - Structure for holding 2d (x and y) coordinates.
1973c48a1e8SJed Brown 
1983c48a1e8SJed Brown     Level: intermediate
1993c48a1e8SJed Brown 
2003c48a1e8SJed Brown     Sample Usage:
2013c48a1e8SJed Brown       DMDACoor2d **coors;
2023c48a1e8SJed Brown       Vec      vcoors;
2033c48a1e8SJed Brown       DM       cda;
2043c48a1e8SJed Brown 
2053c48a1e8SJed Brown       DMDAGetCoordinates(da,&vcoors);
2063c48a1e8SJed Brown       DMDAGetCoordinateDA(da,&cda);
2073c48a1e8SJed Brown       DMDAVecGetArray(cda,vcoors,&coors);
2083c48a1e8SJed Brown       DMDAGetCorners(cda,&mstart,&nstart,0,&m,&n,0)
2093c48a1e8SJed Brown       for (i=mstart; i<mstart+m; i++) {
2103c48a1e8SJed Brown         for (j=nstart; j<nstart+n; j++) {
2113c48a1e8SJed Brown           x = coors[j][i].x;
2123c48a1e8SJed Brown           y = coors[j][i].y;
2133c48a1e8SJed Brown           ......
2143c48a1e8SJed Brown         }
2153c48a1e8SJed Brown       }
2163c48a1e8SJed Brown       DMDAVecRestoreArray(dac,vcoors,&coors);
2173c48a1e8SJed Brown 
2183c48a1e8SJed Brown .seealso: DMDACoor3d, DMDAForEachPointBegin(), DMDAGetCoordinateDA(), DMDAGetCoordinates(), DMDAGetGhostCoordinates()
2193c48a1e8SJed Brown M*/
2203c48a1e8SJed Brown typedef struct {PetscScalar x,y;} DMDACoor2d;
2213c48a1e8SJed Brown 
2223c48a1e8SJed Brown /*MC
2233c48a1e8SJed Brown       DMDACoor3d - Structure for holding 3d (x, y and z) coordinates.
2243c48a1e8SJed Brown 
2253c48a1e8SJed Brown     Level: intermediate
2263c48a1e8SJed Brown 
2273c48a1e8SJed Brown     Sample Usage:
2283c48a1e8SJed Brown       DMDACoor3d ***coors;
2293c48a1e8SJed Brown       Vec      vcoors;
2303c48a1e8SJed Brown       DM       cda;
2313c48a1e8SJed Brown 
2323c48a1e8SJed Brown       DMDAGetCoordinates(da,&vcoors);
2333c48a1e8SJed Brown       DMDAGetCoordinateDA(da,&cda);
2343c48a1e8SJed Brown       DMDAVecGetArray(cda,vcoors,&coors);
2353c48a1e8SJed Brown       DMDAGetCorners(cda,&mstart,&nstart,&pstart,&m,&n,&p)
2363c48a1e8SJed Brown       for (i=mstart; i<mstart+m; i++) {
2373c48a1e8SJed Brown         for (j=nstart; j<nstart+n; j++) {
2383c48a1e8SJed Brown           for (k=pstart; k<pstart+p; k++) {
2393c48a1e8SJed Brown             x = coors[k][j][i].x;
2403c48a1e8SJed Brown             y = coors[k][j][i].y;
2413c48a1e8SJed Brown             z = coors[k][j][i].z;
2423c48a1e8SJed Brown           ......
2433c48a1e8SJed Brown         }
2443c48a1e8SJed Brown       }
2453c48a1e8SJed Brown       DMDAVecRestoreArray(dac,vcoors,&coors);
2463c48a1e8SJed Brown 
2473c48a1e8SJed Brown .seealso: DMDACoor2d, DMDAForEachPointBegin(), DMDAGetCoordinateDA(), DMDAGetCoordinates(), DMDAGetGhostCoordinates()
2483c48a1e8SJed Brown M*/
2493c48a1e8SJed Brown typedef struct {PetscScalar x,y,z;} DMDACoor3d;
2503c48a1e8SJed Brown 
2513c48a1e8SJed Brown extern PetscErrorCode   DMDAGetLocalInfo(DM,DMDALocalInfo*);
2523c48a1e8SJed Brown typedef PetscErrorCode (*DMDALocalFunction1)(DMDALocalInfo*,void*,void*,void*);
2533c48a1e8SJed Brown extern PetscErrorCode   DMDAFormFunctionLocal(DM, DMDALocalFunction1, Vec, Vec, void *);
2543c48a1e8SJed Brown extern PetscErrorCode   DMDAFormFunctionLocalGhost(DM, DMDALocalFunction1, Vec, Vec, void *);
2553c48a1e8SJed Brown extern PetscErrorCode   DMDAFormJacobianLocal(DM, DMDALocalFunction1, Vec, Mat, void *);
2563c48a1e8SJed Brown extern PetscErrorCode   DMDAFormFunction1(DM,Vec,Vec,void*);
2573c48a1e8SJed Brown extern PetscErrorCode   DMDAFormFunction(DM,PetscErrorCode (*)(void),Vec,Vec,void*);
2583c48a1e8SJed Brown extern PetscErrorCode   DMDAFormFunctioni1(DM,PetscInt,Vec,PetscScalar*,void*);
2593c48a1e8SJed Brown extern PetscErrorCode   DMDAFormFunctionib1(DM,PetscInt,Vec,PetscScalar*,void*);
2603c48a1e8SJed Brown extern PetscErrorCode   DMDAComputeJacobian1WithAdic(DM,Vec,Mat,void*);
2613c48a1e8SJed Brown extern PetscErrorCode   DMDAComputeJacobian1WithAdifor(DM,Vec,Mat,void*);
2623c48a1e8SJed Brown extern PetscErrorCode   DMDAMultiplyByJacobian1WithAdic(DM,Vec,Vec,Vec,void*);
2633c48a1e8SJed Brown extern PetscErrorCode   DMDAMultiplyByJacobian1WithAdifor(DM,Vec,Vec,Vec,void*);
2643c48a1e8SJed Brown extern PetscErrorCode   DMDAMultiplyByJacobian1WithAD(DM,Vec,Vec,Vec,void*);
2653c48a1e8SJed Brown extern PetscErrorCode   DMDAComputeJacobian1(DM,Vec,Mat,void*);
2663c48a1e8SJed Brown extern PetscErrorCode   DMDAGetLocalFunction(DM,DMDALocalFunction1*);
2673c48a1e8SJed Brown extern PetscErrorCode   DMDASetLocalFunction(DM,DMDALocalFunction1);
2683c48a1e8SJed Brown extern PetscErrorCode   DMDASetLocalFunctioni(DM,PetscErrorCode (*)(DMDALocalInfo*,MatStencil*,void*,PetscScalar*,void*));
2693c48a1e8SJed Brown extern PetscErrorCode   DMDASetLocalFunctionib(DM,PetscErrorCode (*)(DMDALocalInfo*,MatStencil*,void*,PetscScalar*,void*));
2703c48a1e8SJed Brown extern PetscErrorCode   DMDAGetLocalJacobian(DM,DMDALocalFunction1*);
2713c48a1e8SJed Brown extern PetscErrorCode   DMDASetLocalJacobian(DM,DMDALocalFunction1);
2723c48a1e8SJed Brown extern PetscErrorCode   DMDASetLocalAdicFunction_Private(DM,DMDALocalFunction1);
2733c48a1e8SJed Brown 
27495ee5b0eSBarry Smith extern PetscErrorCode MatSetDM(Mat,DM);
2753c48a1e8SJed Brown extern PetscErrorCode MatRegisterDAAD(void);
2763c48a1e8SJed Brown extern PetscErrorCode MatCreateDAAD(DM,Mat*);
2773c48a1e8SJed Brown extern PetscErrorCode MatCreateSeqUSFFT(Vec,DM,Mat*);
2783c48a1e8SJed Brown 
2793c48a1e8SJed Brown /*MC
2803c48a1e8SJed Brown        DMDASetLocalAdicFunction - Caches in a DM a local function computed by ADIC/ADIFOR
2813c48a1e8SJed Brown 
2823c48a1e8SJed Brown    Synopsis:
2833c48a1e8SJed Brown    PetscErrorCode DMDASetLocalAdicFunction(DM da,DMDALocalFunction1 ad_lf)
2843c48a1e8SJed Brown 
2853c48a1e8SJed Brown    Logically Collective on DM
2863c48a1e8SJed Brown 
2873c48a1e8SJed Brown    Input Parameter:
2883c48a1e8SJed Brown +  da - initial distributed array
2893c48a1e8SJed Brown -  ad_lf - the local function as computed by ADIC/ADIFOR
2903c48a1e8SJed Brown 
2913c48a1e8SJed Brown    Level: intermediate
2923c48a1e8SJed Brown 
2933c48a1e8SJed Brown .keywords:  distributed array, refine
2943c48a1e8SJed Brown 
2953c48a1e8SJed Brown .seealso: DMDACreate1d(), DMDACreate2d(), DMDACreate3d(), DMDestroy(), DMDAGetLocalFunction(), DMDASetLocalFunction(),
2963c48a1e8SJed Brown           DMDASetLocalJacobian()
2973c48a1e8SJed Brown M*/
2983c48a1e8SJed Brown #if defined(PETSC_HAVE_ADIC)
2993c48a1e8SJed Brown #  define DMDASetLocalAdicFunction(a,d) DMDASetLocalAdicFunction_Private(a,(DMDALocalFunction1)d)
3003c48a1e8SJed Brown #else
3013c48a1e8SJed Brown #  define DMDASetLocalAdicFunction(a,d) DMDASetLocalAdicFunction_Private(a,0)
3023c48a1e8SJed Brown #endif
3033c48a1e8SJed Brown 
3043c48a1e8SJed Brown extern PetscErrorCode   DMDASetLocalAdicMFFunction_Private(DM,DMDALocalFunction1);
3053c48a1e8SJed Brown #if defined(PETSC_HAVE_ADIC)
3063c48a1e8SJed Brown #  define DMDASetLocalAdicMFFunction(a,d) DMDASetLocalAdicMFFunction_Private(a,(DMDALocalFunction1)d)
3073c48a1e8SJed Brown #else
3083c48a1e8SJed Brown #  define DMDASetLocalAdicMFFunction(a,d) DMDASetLocalAdicMFFunction_Private(a,0)
3093c48a1e8SJed Brown #endif
3103c48a1e8SJed Brown extern PetscErrorCode   DMDASetLocalAdicFunctioni_Private(DM,PetscErrorCode (*)(DMDALocalInfo*,MatStencil*,void*,void*,void*));
3113c48a1e8SJed Brown #if defined(PETSC_HAVE_ADIC)
3123c48a1e8SJed Brown #  define DMDASetLocalAdicFunctioni(a,d) DMDASetLocalAdicFunctioni_Private(a,(PetscErrorCode (*)(DMDALocalInfo*,MatStencil*,void*,void*,void*))d)
3133c48a1e8SJed Brown #else
3143c48a1e8SJed Brown #  define DMDASetLocalAdicFunctioni(a,d) DMDASetLocalAdicFunctioni_Private(a,0)
3153c48a1e8SJed Brown #endif
3163c48a1e8SJed Brown extern PetscErrorCode   DMDASetLocalAdicMFFunctioni_Private(DM,PetscErrorCode (*)(DMDALocalInfo*,MatStencil*,void*,void*,void*));
3173c48a1e8SJed Brown #if defined(PETSC_HAVE_ADIC)
3183c48a1e8SJed Brown #  define DMDASetLocalAdicMFFunctioni(a,d) DMDASetLocalAdicMFFunctioni_Private(a,(PetscErrorCode (*)(DMDALocalInfo*,MatStencil*,void*,void*,void*))d)
3193c48a1e8SJed Brown #else
3203c48a1e8SJed Brown #  define DMDASetLocalAdicMFFunctioni(a,d) DMDASetLocalAdicMFFunctioni_Private(a,0)
3213c48a1e8SJed Brown #endif
3223c48a1e8SJed Brown 
3233c48a1e8SJed Brown extern PetscErrorCode   DMDASetLocalAdicFunctionib_Private(DM,PetscErrorCode (*)(DMDALocalInfo*,MatStencil*,void*,void*,void*));
3243c48a1e8SJed Brown #if defined(PETSC_HAVE_ADIC)
3253c48a1e8SJed Brown #  define DMDASetLocalAdicFunctionib(a,d) DMDASetLocalAdicFunctionib_Private(a,(PetscErrorCode (*)(DMDALocalInfo*,MatStencil*,void*,void*,void*))d)
3263c48a1e8SJed Brown #else
3273c48a1e8SJed Brown #  define DMDASetLocalAdicFunctionib(a,d) DMDASetLocalAdicFunctionib_Private(a,0)
3283c48a1e8SJed Brown #endif
3293c48a1e8SJed Brown extern PetscErrorCode   DMDASetLocalAdicMFFunctionib_Private(DM,PetscErrorCode (*)(DMDALocalInfo*,MatStencil*,void*,void*,void*));
3303c48a1e8SJed Brown #if defined(PETSC_HAVE_ADIC)
3313c48a1e8SJed Brown #  define DMDASetLocalAdicMFFunctionib(a,d) DMDASetLocalAdicMFFunctionib_Private(a,(PetscErrorCode (*)(DMDALocalInfo*,MatStencil*,void*,void*,void*))d)
3323c48a1e8SJed Brown #else
3333c48a1e8SJed Brown #  define DMDASetLocalAdicMFFunctionib(a,d) DMDASetLocalAdicMFFunctionib_Private(a,0)
3343c48a1e8SJed Brown #endif
3353c48a1e8SJed Brown 
3363c48a1e8SJed Brown extern PetscErrorCode   DMDAFormFunctioniTest1(DM,void*);
3373c48a1e8SJed Brown extern PetscErrorCode   DMDASetGetMatrix(DM,PetscErrorCode (*)(DM, const MatType,Mat *));
3383c48a1e8SJed Brown extern PetscErrorCode   DMDASetBlockFills(DM,PetscInt*,PetscInt*);
3393c48a1e8SJed Brown extern PetscErrorCode   DMDASetMatPreallocateOnly(DM,PetscBool );
3403c48a1e8SJed Brown extern PetscErrorCode   DMDASetRefinementFactor(DM,PetscInt,PetscInt,PetscInt);
3413c48a1e8SJed Brown extern PetscErrorCode   DMDAGetRefinementFactor(DM,PetscInt*,PetscInt*,PetscInt*);
3423c48a1e8SJed Brown 
3433c48a1e8SJed Brown extern PetscErrorCode   DMDAGetAdicArray(DM,PetscBool ,void*,void*,PetscInt*);
3443c48a1e8SJed Brown extern PetscErrorCode   DMDARestoreAdicArray(DM,PetscBool ,void*,void*,PetscInt*);
3453c48a1e8SJed Brown extern PetscErrorCode   DMDAGetAdicMFArray(DM,PetscBool ,void*,void*,PetscInt*);
3463c48a1e8SJed Brown extern PetscErrorCode   DMDAGetAdicMFArray4(DM,PetscBool ,void*,void*,PetscInt*);
3473c48a1e8SJed Brown extern PetscErrorCode   DMDAGetAdicMFArray9(DM,PetscBool ,void*,void*,PetscInt*);
3483c48a1e8SJed Brown extern PetscErrorCode   DMDAGetAdicMFArrayb(DM,PetscBool ,void*,void*,PetscInt*);
3493c48a1e8SJed Brown extern PetscErrorCode   DMDARestoreAdicMFArray(DM,PetscBool ,void*,void*,PetscInt*);
3503c48a1e8SJed Brown extern PetscErrorCode   DMDAGetArray(DM,PetscBool ,void*);
3513c48a1e8SJed Brown extern PetscErrorCode   DMDARestoreArray(DM,PetscBool ,void*);
3523c48a1e8SJed Brown extern PetscErrorCode   ad_DAGetArray(DM,PetscBool ,void*);
3533c48a1e8SJed Brown extern PetscErrorCode   ad_DARestoreArray(DM,PetscBool ,void*);
3543c48a1e8SJed Brown extern PetscErrorCode   admf_DAGetArray(DM,PetscBool ,void*);
3553c48a1e8SJed Brown extern PetscErrorCode   admf_DARestoreArray(DM,PetscBool ,void*);
3563c48a1e8SJed Brown 
3573c48a1e8SJed Brown extern PetscErrorCode   DMDACreatePF(DM,PF*);
3583c48a1e8SJed Brown 
3593c48a1e8SJed Brown #endif
360