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); 1269a42bb27SBarry Smith 127b859378eSBarry Smith #undef __FUNCT__ 128b859378eSBarry Smith #define __FUNCT__ "DMLoad_DA" 129b859378eSBarry Smith PetscErrorCode DMLoad_DA(DM da,PetscViewer viewer) 130b859378eSBarry Smith { 131b859378eSBarry Smith PetscErrorCode ierr; 132bc2bf880SBarry Smith PetscInt dim,m,n,p,dof,swidth; 133b859378eSBarry Smith DMDAStencilType stencil; 134b859378eSBarry Smith DMDABoundaryType bx,by,bz; 135bc2bf880SBarry Smith PetscBool coors; 136bc2bf880SBarry Smith DM dac; 137bc2bf880SBarry Smith Vec c; 138b859378eSBarry Smith 139b859378eSBarry Smith PetscFunctionBegin; 140b859378eSBarry Smith ierr = PetscViewerBinaryRead(viewer,&dim,1,PETSC_INT);CHKERRQ(ierr); 141b859378eSBarry Smith ierr = PetscViewerBinaryRead(viewer,&m,1,PETSC_INT);CHKERRQ(ierr); 142b859378eSBarry Smith ierr = PetscViewerBinaryRead(viewer,&n,1,PETSC_INT);CHKERRQ(ierr); 143b859378eSBarry Smith ierr = PetscViewerBinaryRead(viewer,&p,1,PETSC_INT);CHKERRQ(ierr); 144b859378eSBarry Smith ierr = PetscViewerBinaryRead(viewer,&dof,1,PETSC_INT);CHKERRQ(ierr); 145b859378eSBarry Smith ierr = PetscViewerBinaryRead(viewer,&swidth,1,PETSC_INT);CHKERRQ(ierr); 146b859378eSBarry Smith ierr = PetscViewerBinaryRead(viewer,&bx,1,PETSC_ENUM);CHKERRQ(ierr); 147b859378eSBarry Smith ierr = PetscViewerBinaryRead(viewer,&by,1,PETSC_ENUM);CHKERRQ(ierr); 148b859378eSBarry Smith ierr = PetscViewerBinaryRead(viewer,&bz,1,PETSC_ENUM);CHKERRQ(ierr); 149b859378eSBarry Smith ierr = PetscViewerBinaryRead(viewer,&stencil,1,PETSC_ENUM);CHKERRQ(ierr); 150b859378eSBarry Smith 151bc2bf880SBarry Smith ierr = DMDASetDim(da, dim);CHKERRQ(ierr); 152bc2bf880SBarry Smith ierr = DMDASetSizes(da, m,n,p);CHKERRQ(ierr); 153b859378eSBarry Smith ierr = DMDASetBoundaryType(da, bx, by, bz);CHKERRQ(ierr); 154b859378eSBarry Smith ierr = DMDASetDof(da, dof);CHKERRQ(ierr); 155b859378eSBarry Smith ierr = DMDASetStencilType(da, stencil);CHKERRQ(ierr); 156b859378eSBarry Smith ierr = DMDASetStencilWidth(da, swidth);CHKERRQ(ierr); 157b859378eSBarry Smith ierr = DMSetUp(da);CHKERRQ(ierr); 158bc2bf880SBarry Smith ierr = PetscViewerBinaryRead(viewer,&coors,1,PETSC_ENUM);CHKERRQ(ierr); 159bc2bf880SBarry Smith if (coors) { 1606636e97aSMatthew G Knepley ierr = DMGetCoordinateDM(da,&dac);CHKERRQ(ierr); 161bc2bf880SBarry Smith ierr = DMCreateGlobalVector(dac,&c);CHKERRQ(ierr); 162bc2bf880SBarry Smith ierr = VecLoad(c,viewer);CHKERRQ(ierr); 1636636e97aSMatthew G Knepley ierr = DMSetCoordinates(da,c);CHKERRQ(ierr); 164bc2bf880SBarry Smith ierr = VecDestroy(&c);CHKERRQ(ierr); 165bc2bf880SBarry Smith } 166b859378eSBarry Smith PetscFunctionReturn(0); 167b859378eSBarry Smith } 168b859378eSBarry Smith 1691c3fb106SBarry Smith #undef __FUNCT__ 17016621825SDmitry Karpeev #define __FUNCT__ "DMCreateFieldDecomposition_DA" 17116621825SDmitry Karpeev PetscErrorCode DMCreateFieldDecomposition_DA(DM dm, PetscInt *len,char ***namelist, IS **islist, DM** dmlist) 1721c3fb106SBarry Smith { 1731c3fb106SBarry Smith PetscInt i; 1741c3fb106SBarry Smith PetscErrorCode ierr; 1751c3fb106SBarry Smith DM_DA *dd = (DM_DA*)dm->data; 1761c3fb106SBarry Smith PetscInt dof = dd->w; 1771c3fb106SBarry Smith 1781c3fb106SBarry Smith PetscFunctionBegin; 179731c8d9eSDmitry Karpeev if (len) *len = dof; 1801c3fb106SBarry Smith if (islist) { 1811c3fb106SBarry Smith Vec v; 1821c3fb106SBarry Smith PetscInt rstart,n; 1831c3fb106SBarry Smith 1841c3fb106SBarry Smith ierr = DMGetGlobalVector(dm,&v);CHKERRQ(ierr); 1851c3fb106SBarry Smith ierr = VecGetOwnershipRange(v,&rstart,PETSC_NULL);CHKERRQ(ierr); 1861c3fb106SBarry Smith ierr = VecGetLocalSize(v,&n);CHKERRQ(ierr); 1871c3fb106SBarry Smith ierr = DMRestoreGlobalVector(dm,&v);CHKERRQ(ierr); 1881c3fb106SBarry Smith ierr = PetscMalloc(dof*sizeof(IS),islist);CHKERRQ(ierr); 1891c3fb106SBarry Smith for (i=0; i<dof; i++) { 1901c3fb106SBarry Smith ierr = ISCreateStride(((PetscObject)dm)->comm,n/dof,rstart+i,dof,&(*islist)[i]);CHKERRQ(ierr); 1911c3fb106SBarry Smith } 1921c3fb106SBarry Smith } 1931c3fb106SBarry Smith if (namelist) { 1941c3fb106SBarry Smith ierr = PetscMalloc(dof*sizeof(const char *), namelist);CHKERRQ(ierr); 1951c3fb106SBarry Smith if (dd->fieldname) { 1961c3fb106SBarry Smith for (i=0; i<dof; i++) { 1971c3fb106SBarry Smith ierr = PetscStrallocpy(dd->fieldname[i],&(*namelist)[i]);CHKERRQ(ierr); 1981c3fb106SBarry Smith } 1991c3fb106SBarry Smith } else SETERRQ(PETSC_COMM_SELF,PETSC_ERR_SUP,"Currently DMDA must have fieldnames"); 2001c3fb106SBarry Smith } 2011c3fb106SBarry Smith if (dmlist) { 2021c3fb106SBarry Smith DM da; 2031c3fb106SBarry Smith 2041c3fb106SBarry Smith ierr = DMDACreate(((PetscObject)dm)->comm, &da);CHKERRQ(ierr); 2051c3fb106SBarry Smith ierr = DMDASetDim(da, dd->dim);CHKERRQ(ierr); 2061c3fb106SBarry Smith ierr = DMDASetSizes(da, dd->M, dd->N, dd->P);CHKERRQ(ierr); 2071c3fb106SBarry Smith ierr = DMDASetNumProcs(da, dd->m, dd->n, dd->p);CHKERRQ(ierr); 2081c3fb106SBarry Smith ierr = DMDASetBoundaryType(da, dd->bx, dd->by, dd->bz);CHKERRQ(ierr); 2091c3fb106SBarry Smith ierr = DMDASetDof(da, 1);CHKERRQ(ierr); 2101c3fb106SBarry Smith ierr = DMDASetStencilType(da, dd->stencil_type);CHKERRQ(ierr); 2111c3fb106SBarry Smith ierr = DMDASetStencilWidth(da, dd->s);CHKERRQ(ierr); 2121c3fb106SBarry Smith ierr = DMSetUp(da);CHKERRQ(ierr); 2131c3fb106SBarry Smith ierr = PetscMalloc(dof*sizeof(DM),dmlist);CHKERRQ(ierr); 214c893992eSBarry Smith for (i=0; i<dof-1; i++) {ierr = PetscObjectReference((PetscObject)da);CHKERRQ(ierr);} 2151c3fb106SBarry Smith for (i=0; i<dof; i++) (*dmlist)[i] = da; 2161c3fb106SBarry Smith } 2171c3fb106SBarry Smith 2181c3fb106SBarry Smith PetscFunctionReturn(0); 2191c3fb106SBarry Smith } 2201c3fb106SBarry Smith 2213efe6655SBarry Smith /*MC 2223efe6655SBarry Smith DMDA = "da" - A DM object that is used to manage data for a structured grid in 1, 2, or 3 dimensions. 2233efe6655SBarry Smith In the global representation of the vector each process stores a non-overlapping rectangular (or slab in 3d) portion of the grid points. 2243efe6655SBarry Smith In the local representation these rectangular regions (slabs) are extended in all directions by a stencil width. 2253efe6655SBarry Smith 2263efe6655SBarry 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 2273efe6655SBarry Smith vertex centered. 2283efe6655SBarry Smith 2293efe6655SBarry Smith 2303efe6655SBarry Smith Level: intermediate 2313efe6655SBarry Smith 2323efe6655SBarry Smith .seealso: DMType, DMCOMPOSITE, DMDACreate(), DMCreate(), DMSetType() 2333efe6655SBarry Smith M*/ 2343efe6655SBarry Smith 2351c3fb106SBarry Smith 236a4121054SBarry Smith EXTERN_C_BEGIN 23747c6ae99SBarry Smith #undef __FUNCT__ 238a4121054SBarry Smith #define __FUNCT__ "DMCreate_DA" 2397087cfbeSBarry Smith PetscErrorCode DMCreate_DA(DM da) 24047c6ae99SBarry Smith { 24147c6ae99SBarry Smith PetscErrorCode ierr; 24247c6ae99SBarry Smith DM_DA *dd; 24347c6ae99SBarry Smith 24447c6ae99SBarry Smith PetscFunctionBegin; 245a4121054SBarry Smith PetscValidPointer(da,1); 246a4121054SBarry Smith ierr = PetscNewLog(da,DM_DA,&dd);CHKERRQ(ierr); 247a4121054SBarry Smith da->data = dd; 24847c6ae99SBarry Smith 24947c6ae99SBarry Smith dd->dim = -1; 250aa219208SBarry Smith dd->interptype = DMDA_Q1; 25147c6ae99SBarry Smith dd->refine_x = 2; 25247c6ae99SBarry Smith dd->refine_y = 2; 25347c6ae99SBarry Smith dd->refine_z = 2; 25481c108dcSJed Brown dd->coarsen_x = 2; 25581c108dcSJed Brown dd->coarsen_y = 2; 25681c108dcSJed Brown dd->coarsen_z = 2; 25747c6ae99SBarry Smith dd->fieldname = PETSC_NULL; 25847c6ae99SBarry Smith dd->nlocal = -1; 25947c6ae99SBarry Smith dd->Nlocal = -1; 26047c6ae99SBarry Smith dd->M = -1; 26147c6ae99SBarry Smith dd->N = -1; 26247c6ae99SBarry Smith dd->P = -1; 26347c6ae99SBarry Smith dd->m = -1; 26447c6ae99SBarry Smith dd->n = -1; 26547c6ae99SBarry Smith dd->p = -1; 26647c6ae99SBarry Smith dd->w = -1; 26747c6ae99SBarry Smith dd->s = -1; 26847c6ae99SBarry Smith dd->xs = -1; dd->xe = -1; dd->ys = -1; dd->ye = -1; dd->zs = -1; dd->ze = -1; 26947c6ae99SBarry Smith dd->Xs = -1; dd->Xe = -1; dd->Ys = -1; dd->Ye = -1; dd->Zs = -1; dd->Ze = -1; 27047c6ae99SBarry Smith 27188661749SPeter Brune dd->overlap = 0; 272*d886c4f4SPeter Brune dd->xo = 0; 273*d886c4f4SPeter Brune dd->yo = 0; 274*d886c4f4SPeter Brune dd->zo = 0; 27588661749SPeter Brune 27647c6ae99SBarry Smith dd->gtol = PETSC_NULL; 27747c6ae99SBarry Smith dd->ltog = PETSC_NULL; 27847c6ae99SBarry Smith dd->ltol = PETSC_NULL; 27947c6ae99SBarry Smith dd->ao = PETSC_NULL; 28047c6ae99SBarry Smith dd->base = -1; 2811321219cSEthan Coon dd->bx = DMDA_BOUNDARY_NONE; 2821321219cSEthan Coon dd->by = DMDA_BOUNDARY_NONE; 2831321219cSEthan Coon dd->bz = DMDA_BOUNDARY_NONE; 284aa219208SBarry Smith dd->stencil_type = DMDA_STENCIL_BOX; 285aa219208SBarry Smith dd->interptype = DMDA_Q1; 28647c6ae99SBarry Smith dd->idx = PETSC_NULL; 28747c6ae99SBarry Smith dd->Nl = -1; 28847c6ae99SBarry Smith dd->lx = PETSC_NULL; 28947c6ae99SBarry Smith dd->ly = PETSC_NULL; 29047c6ae99SBarry Smith dd->lz = PETSC_NULL; 29147c6ae99SBarry Smith 292454e267fSLisandro Dalcin dd->elementtype = DMDA_ELEMENT_Q1; 293454e267fSLisandro Dalcin 29419fd82e9SBarry Smith ierr = PetscStrallocpy(VECSTANDARD,(char**)&da->vectype);CHKERRQ(ierr); 295a4121054SBarry Smith da->ops->globaltolocalbegin = DMGlobalToLocalBegin_DA; 296a4121054SBarry Smith da->ops->globaltolocalend = DMGlobalToLocalEnd_DA; 297a4121054SBarry Smith da->ops->localtoglobalbegin = DMLocalToGlobalBegin_DA; 298a4121054SBarry Smith da->ops->localtoglobalend = DMLocalToGlobalEnd_DA; 299a4121054SBarry Smith da->ops->createglobalvector = DMCreateGlobalVector_DA; 300a4121054SBarry Smith da->ops->createlocalvector = DMCreateLocalVector_DA; 30125296bd5SBarry Smith da->ops->createinterpolation = DMCreateInterpolation_DA; 302e727c939SJed Brown da->ops->getcoloring = DMCreateColoring_DA; 30325296bd5SBarry Smith da->ops->creatematrix = DMCreateMatrix_DA; 304a4121054SBarry Smith da->ops->refine = DMRefine_DA; 305a4121054SBarry Smith da->ops->coarsen = DMCoarsen_DA; 306a4121054SBarry Smith da->ops->refinehierarchy = DMRefineHierarchy_DA; 307a4121054SBarry Smith da->ops->coarsenhierarchy = DMCoarsenHierarchy_DA; 308e727c939SJed Brown da->ops->getinjection = DMCreateInjection_DA; 309e727c939SJed Brown da->ops->getaggregates = DMCreateAggregates_DA; 310a4121054SBarry Smith da->ops->destroy = DMDestroy_DA; 311a4121054SBarry Smith da->ops->view = 0; 312a4121054SBarry Smith da->ops->setfromoptions = DMSetFromOptions_DA; 313a4121054SBarry Smith da->ops->setup = DMSetUp_DA; 314b859378eSBarry Smith da->ops->load = DMLoad_DA; 3156636e97aSMatthew G Knepley da->ops->createcoordinatedm = DMCreateCoordinateDM_DA; 31616621825SDmitry Karpeev da->ops->createfielddecomposition = DMCreateFieldDecomposition_DA; 317a4121054SBarry Smith PetscFunctionReturn(0); 318a4121054SBarry Smith } 319a4121054SBarry Smith EXTERN_C_END 32047c6ae99SBarry Smith 321a4121054SBarry Smith #undef __FUNCT__ 322a4121054SBarry Smith #define __FUNCT__ "DMDACreate" 323a4121054SBarry Smith /*@ 324a4121054SBarry Smith DMDACreate - Creates a DMDA object. 325a4121054SBarry Smith 326a4121054SBarry Smith Collective on MPI_Comm 327a4121054SBarry Smith 328a4121054SBarry Smith Input Parameter: 329a4121054SBarry Smith . comm - The communicator for the DMDA object 330a4121054SBarry Smith 331a4121054SBarry Smith Output Parameter: 332a4121054SBarry Smith . da - The DMDA object 333a4121054SBarry Smith 334e0f5d30fSBarry Smith Level: advanced 335e0f5d30fSBarry Smith 336e0f5d30fSBarry Smith Developers Note: Since there exists DMDACreate1/2/3d() should this routine even exist? 337a4121054SBarry Smith 338a4121054SBarry Smith .keywords: DMDA, create 339e0f5d30fSBarry Smith .seealso: DMDASetSizes(), DMDADuplicate(), DMDACreate1d(), DMDACreate2d(), DMDACreate3d() 340a4121054SBarry Smith @*/ 3417087cfbeSBarry Smith PetscErrorCode DMDACreate(MPI_Comm comm, DM *da) 342a4121054SBarry Smith { 343a4121054SBarry Smith PetscErrorCode ierr; 344a4121054SBarry Smith 345a4121054SBarry Smith PetscFunctionBegin; 346a4121054SBarry Smith PetscValidPointer(da,2); 347a4121054SBarry Smith ierr = DMCreate(comm,da);CHKERRQ(ierr); 348a4121054SBarry Smith ierr = DMSetType(*da,DMDA);CHKERRQ(ierr); 34947c6ae99SBarry Smith PetscFunctionReturn(0); 35047c6ae99SBarry Smith } 351b859378eSBarry Smith 352b859378eSBarry Smith 353