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