17d0a6c19SBarry Smith 2b45d2f2cSJed Brown #include <petsc-private/daimpl.h> /*I "petscdmda.h" I*/ 347c6ae99SBarry Smith 447c6ae99SBarry Smith #undef __FUNCT__ 59a42bb27SBarry Smith #define __FUNCT__ "DMSetFromOptions_DA" 67087cfbeSBarry Smith PetscErrorCode DMSetFromOptions_DA(DM da) 747c6ae99SBarry Smith { 847c6ae99SBarry Smith PetscErrorCode ierr; 947c6ae99SBarry Smith DM_DA *dd = (DM_DA*)da->data; 10397b6216SJed Brown PetscInt refine = 0,maxnlevels = 100,*refx,*refy,*refz,n,i; 11235683edSBarry Smith PetscBool negativeMNP = PETSC_FALSE,bM = PETSC_FALSE,bN = PETSC_FALSE, bP = PETSC_FALSE; 1247c6ae99SBarry Smith 1347c6ae99SBarry Smith PetscFunctionBegin; 1447c6ae99SBarry Smith PetscValidHeaderSpecific(da,DM_CLASSID,1); 1547c6ae99SBarry Smith 1647c6ae99SBarry Smith if (dd->M < 0) { 17235683edSBarry Smith dd->M = -dd->M; 18235683edSBarry Smith bM = PETSC_TRUE; 19e0f5d30fSBarry Smith negativeMNP = PETSC_TRUE; 2047c6ae99SBarry Smith } 2147c6ae99SBarry Smith if (dd->dim > 1 && dd->N < 0) { 22235683edSBarry Smith dd->N = -dd->N; 23235683edSBarry Smith bN = PETSC_TRUE; 24e0f5d30fSBarry Smith negativeMNP = PETSC_TRUE; 2547c6ae99SBarry Smith } 2647c6ae99SBarry Smith if (dd->dim > 2 && dd->P < 0) { 27235683edSBarry Smith dd->P = -dd->P; 28235683edSBarry Smith bP = PETSC_TRUE; 29e0f5d30fSBarry Smith negativeMNP = PETSC_TRUE; 3047c6ae99SBarry Smith } 31235683edSBarry Smith 32f9ba7244SBarry Smith ierr = PetscOptionsHead("DMDA Options");CHKERRQ(ierr); 33235683edSBarry Smith if (bM) {ierr = PetscOptionsInt("-da_grid_x","Number of grid points in x direction","DMDASetSizes",dd->M,&dd->M,PETSC_NULL);CHKERRQ(ierr);} 34235683edSBarry Smith if (bN) {ierr = PetscOptionsInt("-da_grid_y","Number of grid points in y direction","DMDASetSizes",dd->N,&dd->N,PETSC_NULL);CHKERRQ(ierr);} 35235683edSBarry Smith if (bP) {ierr = PetscOptionsInt("-da_grid_z","Number of grid points in z direction","DMDASetSizes",dd->P,&dd->P,PETSC_NULL);CHKERRQ(ierr);} 3688661749SPeter Brune ierr = PetscOptionsInt("-da_overlap","Overlap between local grids","DMDASetOverlap",dd->overlap,&dd->overlap,PETSC_NULL);CHKERRQ(ierr); 37aa219208SBarry Smith /* Handle DMDA parallel distibution */ 38aa219208SBarry Smith ierr = PetscOptionsInt("-da_processors_x","Number of processors in x direction","DMDASetNumProcs",dd->m,&dd->m,PETSC_NULL);CHKERRQ(ierr); 39aa219208SBarry Smith if (dd->dim > 1) {ierr = PetscOptionsInt("-da_processors_y","Number of processors in y direction","DMDASetNumProcs",dd->n,&dd->n,PETSC_NULL);CHKERRQ(ierr);} 40aa219208SBarry Smith if (dd->dim > 2) {ierr = PetscOptionsInt("-da_processors_z","Number of processors in z direction","DMDASetNumProcs",dd->p,&dd->p,PETSC_NULL);CHKERRQ(ierr);} 41aa219208SBarry Smith /* Handle DMDA refinement */ 42aa219208SBarry Smith ierr = PetscOptionsInt("-da_refine_x","Refinement ratio in x direction","DMDASetRefinementFactor",dd->refine_x,&dd->refine_x,PETSC_NULL);CHKERRQ(ierr); 43aa219208SBarry Smith if (dd->dim > 1) {ierr = PetscOptionsInt("-da_refine_y","Refinement ratio in y direction","DMDASetRefinementFactor",dd->refine_y,&dd->refine_y,PETSC_NULL);CHKERRQ(ierr);} 44aa219208SBarry Smith if (dd->dim > 2) {ierr = PetscOptionsInt("-da_refine_z","Refinement ratio in z direction","DMDASetRefinementFactor",dd->refine_z,&dd->refine_z,PETSC_NULL);CHKERRQ(ierr);} 4538fb6c91SJed Brown dd->coarsen_x = dd->refine_x; dd->coarsen_y = dd->refine_y; dd->coarsen_z = dd->refine_z; 4647c6ae99SBarry Smith 47397b6216SJed Brown /* Get refinement factors, defaults taken from the coarse DMDA */ 48397b6216SJed Brown ierr = PetscMalloc3(maxnlevels,PetscInt,&refx,maxnlevels,PetscInt,&refy,maxnlevels,PetscInt,&refz);CHKERRQ(ierr); 49397b6216SJed Brown ierr = DMDAGetRefinementFactor(da,&refx[0],&refy[0],&refz[0]);CHKERRQ(ierr); 50397b6216SJed Brown for (i=1; i<maxnlevels; i++) { 51397b6216SJed Brown refx[i] = refx[0]; 52397b6216SJed Brown refy[i] = refy[0]; 53397b6216SJed Brown refz[i] = refz[0]; 54397b6216SJed Brown } 55397b6216SJed Brown n = maxnlevels; 56397b6216SJed Brown ierr = PetscOptionsGetIntArray(((PetscObject)da)->prefix,"-da_refine_hierarchy_x",refx,&n,PETSC_NULL);CHKERRQ(ierr); 57397b6216SJed Brown if (da->levelup - da->leveldown >= 0) dd->refine_x = refx[da->levelup - da->leveldown]; 58397b6216SJed Brown if (da->levelup - da->leveldown >= 1) dd->coarsen_x = refx[da->levelup - da->leveldown - 1]; 59397b6216SJed Brown if (dd->dim > 1) { 60397b6216SJed Brown n = maxnlevels; 61397b6216SJed Brown ierr = PetscOptionsGetIntArray(((PetscObject)da)->prefix,"-da_refine_hierarchy_y",refy,&n,PETSC_NULL);CHKERRQ(ierr); 62397b6216SJed Brown if (da->levelup - da->leveldown >= 0) dd->refine_y = refy[da->levelup - da->leveldown]; 63397b6216SJed Brown if (da->levelup - da->leveldown >= 1) dd->coarsen_y = refy[da->levelup - da->leveldown - 1]; 64397b6216SJed Brown } 65397b6216SJed Brown if (dd->dim > 2) { 66397b6216SJed Brown n = maxnlevels; 67397b6216SJed Brown ierr = PetscOptionsGetIntArray(((PetscObject)da)->prefix,"-da_refine_hierarchy_z",refz,&n,PETSC_NULL);CHKERRQ(ierr); 68397b6216SJed Brown if (da->levelup - da->leveldown >= 0) dd->refine_z = refz[da->levelup - da->leveldown]; 69397b6216SJed Brown if (da->levelup - da->leveldown >= 1) dd->coarsen_z = refz[da->levelup - da->leveldown - 1]; 70397b6216SJed Brown } 71397b6216SJed Brown 72235683edSBarry Smith if (negativeMNP) {ierr = PetscOptionsInt("-da_refine","Uniformly refine DA one or more times","None",refine,&refine,PETSC_NULL);CHKERRQ(ierr);} 73f9ba7244SBarry Smith ierr = PetscOptionsTail();CHKERRQ(ierr); 74235683edSBarry Smith 75e0f5d30fSBarry Smith while (refine--) { 76e0f5d30fSBarry Smith if (dd->bx == DMDA_BOUNDARY_PERIODIC || dd->interptype == DMDA_Q0){ 77e0f5d30fSBarry Smith dd->M = dd->refine_x*dd->M; 78e0f5d30fSBarry Smith } else { 79e0f5d30fSBarry Smith dd->M = 1 + dd->refine_x*(dd->M - 1); 80e0f5d30fSBarry Smith } 81e0f5d30fSBarry Smith if (dd->by == DMDA_BOUNDARY_PERIODIC || dd->interptype == DMDA_Q0){ 82e0f5d30fSBarry Smith dd->N = dd->refine_y*dd->N; 83e0f5d30fSBarry Smith } else { 84e0f5d30fSBarry Smith dd->N = 1 + dd->refine_y*(dd->N - 1); 85e0f5d30fSBarry Smith } 86e0f5d30fSBarry Smith if (dd->bz == DMDA_BOUNDARY_PERIODIC || dd->interptype == DMDA_Q0){ 87e0f5d30fSBarry Smith dd->P = dd->refine_z*dd->P; 88e0f5d30fSBarry Smith } else { 89e0f5d30fSBarry Smith dd->P = 1 + dd->refine_z*(dd->P - 1); 90e0f5d30fSBarry Smith } 91e0f5d30fSBarry Smith da->levelup++; 9285fc4b34SJed Brown if (da->levelup - da->leveldown >= 0) { 9385fc4b34SJed Brown dd->refine_x = refx[da->levelup - da->leveldown]; 9485fc4b34SJed Brown dd->refine_y = refy[da->levelup - da->leveldown]; 9585fc4b34SJed Brown dd->refine_z = refz[da->levelup - da->leveldown]; 9685fc4b34SJed Brown } 9785fc4b34SJed Brown if (da->levelup - da->leveldown >= 1) { 9885fc4b34SJed Brown dd->coarsen_x = refx[da->levelup - da->leveldown - 1]; 9985fc4b34SJed Brown dd->coarsen_y = refy[da->levelup - da->leveldown - 1]; 10085fc4b34SJed Brown dd->coarsen_z = refz[da->levelup - da->leveldown - 1]; 10185fc4b34SJed Brown } 102e0f5d30fSBarry Smith } 103397b6216SJed Brown ierr = PetscFree3(refx,refy,refz);CHKERRQ(ierr); 10447c6ae99SBarry Smith PetscFunctionReturn(0); 10547c6ae99SBarry Smith } 10647c6ae99SBarry Smith 1077087cfbeSBarry Smith extern PetscErrorCode DMCreateGlobalVector_DA(DM,Vec*); 1087087cfbeSBarry Smith extern PetscErrorCode DMCreateLocalVector_DA(DM,Vec*); 1097087cfbeSBarry Smith extern PetscErrorCode DMGlobalToLocalBegin_DA(DM,Vec,InsertMode,Vec); 1107087cfbeSBarry Smith extern PetscErrorCode DMGlobalToLocalEnd_DA(DM,Vec,InsertMode,Vec); 1117087cfbeSBarry Smith extern PetscErrorCode DMLocalToGlobalBegin_DA(DM,Vec,InsertMode,Vec); 1127087cfbeSBarry Smith extern PetscErrorCode DMLocalToGlobalEnd_DA(DM,Vec,InsertMode,Vec); 113e727c939SJed Brown extern PetscErrorCode DMCreateInterpolation_DA(DM,DM,Mat*,Vec*); 11419fd82e9SBarry Smith extern PetscErrorCode DMCreateColoring_DA(DM,ISColoringType,MatType,ISColoring*); 11519fd82e9SBarry Smith extern PetscErrorCode DMCreateMatrix_DA(DM,MatType,Mat*); 1166636e97aSMatthew G Knepley extern PetscErrorCode DMCreateCoordinateDM_DA(DM,DM*); 1177087cfbeSBarry Smith extern PetscErrorCode DMRefine_DA(DM,MPI_Comm,DM*); 1187087cfbeSBarry Smith extern PetscErrorCode DMCoarsen_DA(DM,MPI_Comm,DM*); 1197087cfbeSBarry Smith extern PetscErrorCode DMRefineHierarchy_DA(DM,PetscInt,DM[]); 1207087cfbeSBarry Smith extern PetscErrorCode DMCoarsenHierarchy_DA(DM,PetscInt,DM[]); 121e727c939SJed Brown extern PetscErrorCode DMCreateInjection_DA(DM,DM,VecScatter*); 122e727c939SJed Brown extern PetscErrorCode DMCreateAggregates_DA(DM,DM,Mat*); 1237087cfbeSBarry Smith extern PetscErrorCode DMView_DA(DM,PetscViewer); 1247087cfbeSBarry Smith extern PetscErrorCode DMSetUp_DA(DM); 1257087cfbeSBarry Smith extern PetscErrorCode DMDestroy_DA(DM); 126*e30e807fSPeter Brune extern PetscErrorCode DMCreateDomainDecomposition_DA(DM,PetscInt*,char ***,IS**,IS**,DM**); 127*e30e807fSPeter Brune extern PetscErrorCode DMCreateDomainDecompositionScatters_DA(DM,PetscInt,DM*,VecScatter **,VecScatter**,VecScatter**); 1289a42bb27SBarry Smith 129b859378eSBarry Smith #undef __FUNCT__ 130b859378eSBarry Smith #define __FUNCT__ "DMLoad_DA" 131b859378eSBarry Smith PetscErrorCode DMLoad_DA(DM da,PetscViewer viewer) 132b859378eSBarry Smith { 133b859378eSBarry Smith PetscErrorCode ierr; 134bc2bf880SBarry Smith PetscInt dim,m,n,p,dof,swidth; 135b859378eSBarry Smith DMDAStencilType stencil; 136b859378eSBarry Smith DMDABoundaryType bx,by,bz; 137bc2bf880SBarry Smith PetscBool coors; 138bc2bf880SBarry Smith DM dac; 139bc2bf880SBarry Smith Vec c; 140b859378eSBarry Smith 141b859378eSBarry Smith PetscFunctionBegin; 142b859378eSBarry Smith ierr = PetscViewerBinaryRead(viewer,&dim,1,PETSC_INT);CHKERRQ(ierr); 143b859378eSBarry Smith ierr = PetscViewerBinaryRead(viewer,&m,1,PETSC_INT);CHKERRQ(ierr); 144b859378eSBarry Smith ierr = PetscViewerBinaryRead(viewer,&n,1,PETSC_INT);CHKERRQ(ierr); 145b859378eSBarry Smith ierr = PetscViewerBinaryRead(viewer,&p,1,PETSC_INT);CHKERRQ(ierr); 146b859378eSBarry Smith ierr = PetscViewerBinaryRead(viewer,&dof,1,PETSC_INT);CHKERRQ(ierr); 147b859378eSBarry Smith ierr = PetscViewerBinaryRead(viewer,&swidth,1,PETSC_INT);CHKERRQ(ierr); 148b859378eSBarry Smith ierr = PetscViewerBinaryRead(viewer,&bx,1,PETSC_ENUM);CHKERRQ(ierr); 149b859378eSBarry Smith ierr = PetscViewerBinaryRead(viewer,&by,1,PETSC_ENUM);CHKERRQ(ierr); 150b859378eSBarry Smith ierr = PetscViewerBinaryRead(viewer,&bz,1,PETSC_ENUM);CHKERRQ(ierr); 151b859378eSBarry Smith ierr = PetscViewerBinaryRead(viewer,&stencil,1,PETSC_ENUM);CHKERRQ(ierr); 152b859378eSBarry Smith 153bc2bf880SBarry Smith ierr = DMDASetDim(da, dim);CHKERRQ(ierr); 154bc2bf880SBarry Smith ierr = DMDASetSizes(da, m,n,p);CHKERRQ(ierr); 155b859378eSBarry Smith ierr = DMDASetBoundaryType(da, bx, by, bz);CHKERRQ(ierr); 156b859378eSBarry Smith ierr = DMDASetDof(da, dof);CHKERRQ(ierr); 157b859378eSBarry Smith ierr = DMDASetStencilType(da, stencil);CHKERRQ(ierr); 158b859378eSBarry Smith ierr = DMDASetStencilWidth(da, swidth);CHKERRQ(ierr); 159b859378eSBarry Smith ierr = DMSetUp(da);CHKERRQ(ierr); 160bc2bf880SBarry Smith ierr = PetscViewerBinaryRead(viewer,&coors,1,PETSC_ENUM);CHKERRQ(ierr); 161bc2bf880SBarry Smith if (coors) { 1626636e97aSMatthew G Knepley ierr = DMGetCoordinateDM(da,&dac);CHKERRQ(ierr); 163bc2bf880SBarry Smith ierr = DMCreateGlobalVector(dac,&c);CHKERRQ(ierr); 164bc2bf880SBarry Smith ierr = VecLoad(c,viewer);CHKERRQ(ierr); 1656636e97aSMatthew G Knepley ierr = DMSetCoordinates(da,c);CHKERRQ(ierr); 166bc2bf880SBarry Smith ierr = VecDestroy(&c);CHKERRQ(ierr); 167bc2bf880SBarry Smith } 168b859378eSBarry Smith PetscFunctionReturn(0); 169b859378eSBarry Smith } 170b859378eSBarry Smith 1711c3fb106SBarry Smith #undef __FUNCT__ 17216621825SDmitry Karpeev #define __FUNCT__ "DMCreateFieldDecomposition_DA" 17316621825SDmitry Karpeev PetscErrorCode DMCreateFieldDecomposition_DA(DM dm, PetscInt *len,char ***namelist, IS **islist, DM** dmlist) 1741c3fb106SBarry Smith { 1751c3fb106SBarry Smith PetscInt i; 1761c3fb106SBarry Smith PetscErrorCode ierr; 1771c3fb106SBarry Smith DM_DA *dd = (DM_DA*)dm->data; 1781c3fb106SBarry Smith PetscInt dof = dd->w; 1791c3fb106SBarry Smith 1801c3fb106SBarry Smith PetscFunctionBegin; 181731c8d9eSDmitry Karpeev if (len) *len = dof; 1821c3fb106SBarry Smith if (islist) { 1831c3fb106SBarry Smith Vec v; 1841c3fb106SBarry Smith PetscInt rstart,n; 1851c3fb106SBarry Smith 1861c3fb106SBarry Smith ierr = DMGetGlobalVector(dm,&v);CHKERRQ(ierr); 1871c3fb106SBarry Smith ierr = VecGetOwnershipRange(v,&rstart,PETSC_NULL);CHKERRQ(ierr); 1881c3fb106SBarry Smith ierr = VecGetLocalSize(v,&n);CHKERRQ(ierr); 1891c3fb106SBarry Smith ierr = DMRestoreGlobalVector(dm,&v);CHKERRQ(ierr); 1901c3fb106SBarry Smith ierr = PetscMalloc(dof*sizeof(IS),islist);CHKERRQ(ierr); 1911c3fb106SBarry Smith for (i=0; i<dof; i++) { 1921c3fb106SBarry Smith ierr = ISCreateStride(((PetscObject)dm)->comm,n/dof,rstart+i,dof,&(*islist)[i]);CHKERRQ(ierr); 1931c3fb106SBarry Smith } 1941c3fb106SBarry Smith } 1951c3fb106SBarry Smith if (namelist) { 1961c3fb106SBarry Smith ierr = PetscMalloc(dof*sizeof(const char *), namelist);CHKERRQ(ierr); 1971c3fb106SBarry Smith if (dd->fieldname) { 1981c3fb106SBarry Smith for (i=0; i<dof; i++) { 1991c3fb106SBarry Smith ierr = PetscStrallocpy(dd->fieldname[i],&(*namelist)[i]);CHKERRQ(ierr); 2001c3fb106SBarry Smith } 2011c3fb106SBarry Smith } else SETERRQ(PETSC_COMM_SELF,PETSC_ERR_SUP,"Currently DMDA must have fieldnames"); 2021c3fb106SBarry Smith } 2031c3fb106SBarry Smith if (dmlist) { 2041c3fb106SBarry Smith DM da; 2051c3fb106SBarry Smith 2061c3fb106SBarry Smith ierr = DMDACreate(((PetscObject)dm)->comm, &da);CHKERRQ(ierr); 2071c3fb106SBarry Smith ierr = DMDASetDim(da, dd->dim);CHKERRQ(ierr); 2081c3fb106SBarry Smith ierr = DMDASetSizes(da, dd->M, dd->N, dd->P);CHKERRQ(ierr); 2091c3fb106SBarry Smith ierr = DMDASetNumProcs(da, dd->m, dd->n, dd->p);CHKERRQ(ierr); 2101c3fb106SBarry Smith ierr = DMDASetBoundaryType(da, dd->bx, dd->by, dd->bz);CHKERRQ(ierr); 2111c3fb106SBarry Smith ierr = DMDASetDof(da, 1);CHKERRQ(ierr); 2121c3fb106SBarry Smith ierr = DMDASetStencilType(da, dd->stencil_type);CHKERRQ(ierr); 2131c3fb106SBarry Smith ierr = DMDASetStencilWidth(da, dd->s);CHKERRQ(ierr); 2141c3fb106SBarry Smith ierr = DMSetUp(da);CHKERRQ(ierr); 2151c3fb106SBarry Smith ierr = PetscMalloc(dof*sizeof(DM),dmlist);CHKERRQ(ierr); 216c893992eSBarry Smith for (i=0; i<dof-1; i++) {ierr = PetscObjectReference((PetscObject)da);CHKERRQ(ierr);} 2171c3fb106SBarry Smith for (i=0; i<dof; i++) (*dmlist)[i] = da; 2181c3fb106SBarry Smith } 2191c3fb106SBarry Smith 2201c3fb106SBarry Smith PetscFunctionReturn(0); 2211c3fb106SBarry Smith } 2221c3fb106SBarry Smith 2233efe6655SBarry Smith /*MC 2243efe6655SBarry Smith DMDA = "da" - A DM object that is used to manage data for a structured grid in 1, 2, or 3 dimensions. 2253efe6655SBarry Smith In the global representation of the vector each process stores a non-overlapping rectangular (or slab in 3d) portion of the grid points. 2263efe6655SBarry Smith In the local representation these rectangular regions (slabs) are extended in all directions by a stencil width. 2273efe6655SBarry Smith 2283efe6655SBarry Smith The vectors can be thought of as either cell centered or vertex centered on the mesh. But some variables cannot be cell centered and others 2293efe6655SBarry Smith vertex centered. 2303efe6655SBarry Smith 2313efe6655SBarry Smith 2323efe6655SBarry Smith Level: intermediate 2333efe6655SBarry Smith 2343efe6655SBarry Smith .seealso: DMType, DMCOMPOSITE, DMDACreate(), DMCreate(), DMSetType() 2353efe6655SBarry Smith M*/ 2363efe6655SBarry Smith 2371c3fb106SBarry Smith 238a4121054SBarry Smith EXTERN_C_BEGIN 23947c6ae99SBarry Smith #undef __FUNCT__ 240a4121054SBarry Smith #define __FUNCT__ "DMCreate_DA" 2417087cfbeSBarry Smith PetscErrorCode DMCreate_DA(DM da) 24247c6ae99SBarry Smith { 24347c6ae99SBarry Smith PetscErrorCode ierr; 24447c6ae99SBarry Smith DM_DA *dd; 24547c6ae99SBarry Smith 24647c6ae99SBarry Smith PetscFunctionBegin; 247a4121054SBarry Smith PetscValidPointer(da,1); 248a4121054SBarry Smith ierr = PetscNewLog(da,DM_DA,&dd);CHKERRQ(ierr); 249a4121054SBarry Smith da->data = dd; 25047c6ae99SBarry Smith 25147c6ae99SBarry Smith dd->dim = -1; 252aa219208SBarry Smith dd->interptype = DMDA_Q1; 25347c6ae99SBarry Smith dd->refine_x = 2; 25447c6ae99SBarry Smith dd->refine_y = 2; 25547c6ae99SBarry Smith dd->refine_z = 2; 25681c108dcSJed Brown dd->coarsen_x = 2; 25781c108dcSJed Brown dd->coarsen_y = 2; 25881c108dcSJed Brown dd->coarsen_z = 2; 25947c6ae99SBarry Smith dd->fieldname = PETSC_NULL; 26047c6ae99SBarry Smith dd->nlocal = -1; 26147c6ae99SBarry Smith dd->Nlocal = -1; 26247c6ae99SBarry Smith dd->M = -1; 26347c6ae99SBarry Smith dd->N = -1; 26447c6ae99SBarry Smith dd->P = -1; 26547c6ae99SBarry Smith dd->m = -1; 26647c6ae99SBarry Smith dd->n = -1; 26747c6ae99SBarry Smith dd->p = -1; 26847c6ae99SBarry Smith dd->w = -1; 26947c6ae99SBarry Smith dd->s = -1; 27047c6ae99SBarry Smith dd->xs = -1; dd->xe = -1; dd->ys = -1; dd->ye = -1; dd->zs = -1; dd->ze = -1; 27147c6ae99SBarry Smith dd->Xs = -1; dd->Xe = -1; dd->Ys = -1; dd->Ye = -1; dd->Zs = -1; dd->Ze = -1; 27247c6ae99SBarry Smith 27388661749SPeter Brune dd->overlap = 0; 274d886c4f4SPeter Brune dd->xo = 0; 275d886c4f4SPeter Brune dd->yo = 0; 276d886c4f4SPeter Brune dd->zo = 0; 277*e30e807fSPeter Brune dd->Mo = -1; 278*e30e807fSPeter Brune dd->No = -1; 279*e30e807fSPeter Brune dd->Po = -1; 28088661749SPeter Brune 28147c6ae99SBarry Smith dd->gtol = PETSC_NULL; 28247c6ae99SBarry Smith dd->ltog = PETSC_NULL; 28347c6ae99SBarry Smith dd->ltol = PETSC_NULL; 28447c6ae99SBarry Smith dd->ao = PETSC_NULL; 28547c6ae99SBarry Smith dd->base = -1; 2861321219cSEthan Coon dd->bx = DMDA_BOUNDARY_NONE; 2871321219cSEthan Coon dd->by = DMDA_BOUNDARY_NONE; 2881321219cSEthan Coon dd->bz = DMDA_BOUNDARY_NONE; 289aa219208SBarry Smith dd->stencil_type = DMDA_STENCIL_BOX; 290aa219208SBarry Smith dd->interptype = DMDA_Q1; 29147c6ae99SBarry Smith dd->idx = PETSC_NULL; 29247c6ae99SBarry Smith dd->Nl = -1; 29347c6ae99SBarry Smith dd->lx = PETSC_NULL; 29447c6ae99SBarry Smith dd->ly = PETSC_NULL; 29547c6ae99SBarry Smith dd->lz = PETSC_NULL; 29647c6ae99SBarry Smith 297454e267fSLisandro Dalcin dd->elementtype = DMDA_ELEMENT_Q1; 298454e267fSLisandro Dalcin 29919fd82e9SBarry Smith ierr = PetscStrallocpy(VECSTANDARD,(char**)&da->vectype);CHKERRQ(ierr); 300a4121054SBarry Smith da->ops->globaltolocalbegin = DMGlobalToLocalBegin_DA; 301a4121054SBarry Smith da->ops->globaltolocalend = DMGlobalToLocalEnd_DA; 302a4121054SBarry Smith da->ops->localtoglobalbegin = DMLocalToGlobalBegin_DA; 303a4121054SBarry Smith da->ops->localtoglobalend = DMLocalToGlobalEnd_DA; 304a4121054SBarry Smith da->ops->createglobalvector = DMCreateGlobalVector_DA; 305a4121054SBarry Smith da->ops->createlocalvector = DMCreateLocalVector_DA; 30625296bd5SBarry Smith da->ops->createinterpolation = DMCreateInterpolation_DA; 307e727c939SJed Brown da->ops->getcoloring = DMCreateColoring_DA; 30825296bd5SBarry Smith da->ops->creatematrix = DMCreateMatrix_DA; 309a4121054SBarry Smith da->ops->refine = DMRefine_DA; 310a4121054SBarry Smith da->ops->coarsen = DMCoarsen_DA; 311a4121054SBarry Smith da->ops->refinehierarchy = DMRefineHierarchy_DA; 312a4121054SBarry Smith da->ops->coarsenhierarchy = DMCoarsenHierarchy_DA; 313e727c939SJed Brown da->ops->getinjection = DMCreateInjection_DA; 314e727c939SJed Brown da->ops->getaggregates = DMCreateAggregates_DA; 315a4121054SBarry Smith da->ops->destroy = DMDestroy_DA; 316a4121054SBarry Smith da->ops->view = 0; 317a4121054SBarry Smith da->ops->setfromoptions = DMSetFromOptions_DA; 318a4121054SBarry Smith da->ops->setup = DMSetUp_DA; 319b859378eSBarry Smith da->ops->load = DMLoad_DA; 3206636e97aSMatthew G Knepley da->ops->createcoordinatedm = DMCreateCoordinateDM_DA; 32116621825SDmitry Karpeev da->ops->createfielddecomposition = DMCreateFieldDecomposition_DA; 322*e30e807fSPeter Brune da->ops->createdomaindecomposition = DMCreateDomainDecomposition_DA; 323*e30e807fSPeter Brune da->ops->createddscatters = DMCreateDomainDecompositionScatters_DA; 324a4121054SBarry Smith PetscFunctionReturn(0); 325a4121054SBarry Smith } 326a4121054SBarry Smith EXTERN_C_END 32747c6ae99SBarry Smith 328a4121054SBarry Smith #undef __FUNCT__ 329a4121054SBarry Smith #define __FUNCT__ "DMDACreate" 330a4121054SBarry Smith /*@ 331a4121054SBarry Smith DMDACreate - Creates a DMDA object. 332a4121054SBarry Smith 333a4121054SBarry Smith Collective on MPI_Comm 334a4121054SBarry Smith 335a4121054SBarry Smith Input Parameter: 336a4121054SBarry Smith . comm - The communicator for the DMDA object 337a4121054SBarry Smith 338a4121054SBarry Smith Output Parameter: 339a4121054SBarry Smith . da - The DMDA object 340a4121054SBarry Smith 341e0f5d30fSBarry Smith Level: advanced 342e0f5d30fSBarry Smith 343e0f5d30fSBarry Smith Developers Note: Since there exists DMDACreate1/2/3d() should this routine even exist? 344a4121054SBarry Smith 345a4121054SBarry Smith .keywords: DMDA, create 346e0f5d30fSBarry Smith .seealso: DMDASetSizes(), DMDADuplicate(), DMDACreate1d(), DMDACreate2d(), DMDACreate3d() 347a4121054SBarry Smith @*/ 3487087cfbeSBarry Smith PetscErrorCode DMDACreate(MPI_Comm comm, DM *da) 349a4121054SBarry Smith { 350a4121054SBarry Smith PetscErrorCode ierr; 351a4121054SBarry Smith 352a4121054SBarry Smith PetscFunctionBegin; 353a4121054SBarry Smith PetscValidPointer(da,2); 354a4121054SBarry Smith ierr = DMCreate(comm,da);CHKERRQ(ierr); 355a4121054SBarry Smith ierr = DMSetType(*da,DMDA);CHKERRQ(ierr); 35647c6ae99SBarry Smith PetscFunctionReturn(0); 35747c6ae99SBarry Smith } 358b859378eSBarry Smith 359b859378eSBarry Smith 360