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*); 114e727c939SJed Brown extern PetscErrorCode DMCreateColoring_DA(DM,ISColoringType,const MatType,ISColoring*); 115950540a4SJed Brown extern PetscErrorCode DMCreateMatrix_DA(DM,const MatType,Mat*); 116*6636e97aSMatthew 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; 135b859378eSBarry Smith PetscInt classid = DM_FILE_CLASSID,subclassid = DMDA_FILE_CLASSID; 136bc2bf880SBarry Smith PetscBool coors; 137bc2bf880SBarry Smith DM dac; 138bc2bf880SBarry Smith Vec c; 139b859378eSBarry Smith 140b859378eSBarry Smith PetscFunctionBegin; 141b859378eSBarry Smith ierr = PetscViewerBinaryRead(viewer,&classid,1,PETSC_INT);CHKERRQ(ierr); 142b859378eSBarry Smith if (classid != DM_FILE_CLASSID) SETERRQ(((PetscObject)da)->comm,PETSC_ERR_ARG_WRONG,"Not DM next in file"); 143b859378eSBarry Smith ierr = PetscViewerBinaryRead(viewer,&subclassid,1,PETSC_INT);CHKERRQ(ierr); 144b859378eSBarry Smith if (subclassid != DMDA_FILE_CLASSID) SETERRQ(((PetscObject)da)->comm,PETSC_ERR_ARG_WRONG,"Not DM DA next in file"); 145b859378eSBarry Smith ierr = PetscViewerBinaryRead(viewer,&dim,1,PETSC_INT);CHKERRQ(ierr); 146b859378eSBarry Smith ierr = PetscViewerBinaryRead(viewer,&m,1,PETSC_INT);CHKERRQ(ierr); 147b859378eSBarry Smith ierr = PetscViewerBinaryRead(viewer,&n,1,PETSC_INT);CHKERRQ(ierr); 148b859378eSBarry Smith ierr = PetscViewerBinaryRead(viewer,&p,1,PETSC_INT);CHKERRQ(ierr); 149b859378eSBarry Smith ierr = PetscViewerBinaryRead(viewer,&dof,1,PETSC_INT);CHKERRQ(ierr); 150b859378eSBarry Smith ierr = PetscViewerBinaryRead(viewer,&swidth,1,PETSC_INT);CHKERRQ(ierr); 151b859378eSBarry Smith ierr = PetscViewerBinaryRead(viewer,&bx,1,PETSC_ENUM);CHKERRQ(ierr); 152b859378eSBarry Smith ierr = PetscViewerBinaryRead(viewer,&by,1,PETSC_ENUM);CHKERRQ(ierr); 153b859378eSBarry Smith ierr = PetscViewerBinaryRead(viewer,&bz,1,PETSC_ENUM);CHKERRQ(ierr); 154b859378eSBarry Smith ierr = PetscViewerBinaryRead(viewer,&stencil,1,PETSC_ENUM);CHKERRQ(ierr); 155b859378eSBarry Smith 156bc2bf880SBarry Smith ierr = DMDASetDim(da, dim);CHKERRQ(ierr); 157bc2bf880SBarry Smith ierr = DMDASetSizes(da, m,n,p);CHKERRQ(ierr); 158b859378eSBarry Smith ierr = DMDASetBoundaryType(da, bx, by, bz);CHKERRQ(ierr); 159b859378eSBarry Smith ierr = DMDASetDof(da, dof);CHKERRQ(ierr); 160b859378eSBarry Smith ierr = DMDASetStencilType(da, stencil);CHKERRQ(ierr); 161b859378eSBarry Smith ierr = DMDASetStencilWidth(da, swidth);CHKERRQ(ierr); 162b859378eSBarry Smith ierr = DMSetUp(da);CHKERRQ(ierr); 163bc2bf880SBarry Smith ierr = PetscViewerBinaryRead(viewer,&coors,1,PETSC_ENUM);CHKERRQ(ierr); 164bc2bf880SBarry Smith if (coors) { 165*6636e97aSMatthew G Knepley ierr = DMGetCoordinateDM(da,&dac);CHKERRQ(ierr); 166bc2bf880SBarry Smith ierr = DMCreateGlobalVector(dac,&c);CHKERRQ(ierr); 167bc2bf880SBarry Smith ierr = VecLoad(c,viewer);CHKERRQ(ierr); 168*6636e97aSMatthew G Knepley ierr = DMSetCoordinates(da,c);CHKERRQ(ierr); 169bc2bf880SBarry Smith ierr = VecDestroy(&c);CHKERRQ(ierr); 170bc2bf880SBarry Smith } 171b859378eSBarry Smith PetscFunctionReturn(0); 172b859378eSBarry Smith } 173b859378eSBarry Smith 1741c3fb106SBarry Smith #undef __FUNCT__ 17516621825SDmitry Karpeev #define __FUNCT__ "DMCreateFieldDecomposition_DA" 17616621825SDmitry Karpeev PetscErrorCode DMCreateFieldDecomposition_DA(DM dm, PetscInt *len,char ***namelist, IS **islist, DM** dmlist) 1771c3fb106SBarry Smith { 1781c3fb106SBarry Smith PetscInt i; 1791c3fb106SBarry Smith PetscErrorCode ierr; 1801c3fb106SBarry Smith DM_DA *dd = (DM_DA*)dm->data; 1811c3fb106SBarry Smith PetscInt dof = dd->w; 1821c3fb106SBarry Smith 1831c3fb106SBarry Smith PetscFunctionBegin; 184731c8d9eSDmitry Karpeev if (len) *len = dof; 1851c3fb106SBarry Smith if (islist) { 1861c3fb106SBarry Smith Vec v; 1871c3fb106SBarry Smith PetscInt rstart,n; 1881c3fb106SBarry Smith 1891c3fb106SBarry Smith ierr = DMGetGlobalVector(dm,&v);CHKERRQ(ierr); 1901c3fb106SBarry Smith ierr = VecGetOwnershipRange(v,&rstart,PETSC_NULL);CHKERRQ(ierr); 1911c3fb106SBarry Smith ierr = VecGetLocalSize(v,&n);CHKERRQ(ierr); 1921c3fb106SBarry Smith ierr = DMRestoreGlobalVector(dm,&v);CHKERRQ(ierr); 1931c3fb106SBarry Smith ierr = PetscMalloc(dof*sizeof(IS),islist);CHKERRQ(ierr); 1941c3fb106SBarry Smith for (i=0; i<dof; i++) { 1951c3fb106SBarry Smith ierr = ISCreateStride(((PetscObject)dm)->comm,n/dof,rstart+i,dof,&(*islist)[i]);CHKERRQ(ierr); 1961c3fb106SBarry Smith } 1971c3fb106SBarry Smith } 1981c3fb106SBarry Smith if (namelist) { 1991c3fb106SBarry Smith ierr = PetscMalloc(dof*sizeof(const char *), namelist);CHKERRQ(ierr); 2001c3fb106SBarry Smith if (dd->fieldname) { 2011c3fb106SBarry Smith for (i=0; i<dof; i++) { 2021c3fb106SBarry Smith ierr = PetscStrallocpy(dd->fieldname[i],&(*namelist)[i]);CHKERRQ(ierr); 2031c3fb106SBarry Smith } 2041c3fb106SBarry Smith } else SETERRQ(PETSC_COMM_SELF,PETSC_ERR_SUP,"Currently DMDA must have fieldnames"); 2051c3fb106SBarry Smith } 2061c3fb106SBarry Smith if (dmlist) { 2071c3fb106SBarry Smith DM da; 2081c3fb106SBarry Smith 2091c3fb106SBarry Smith ierr = DMDACreate(((PetscObject)dm)->comm, &da);CHKERRQ(ierr); 2101c3fb106SBarry Smith ierr = DMDASetDim(da, dd->dim);CHKERRQ(ierr); 2111c3fb106SBarry Smith ierr = DMDASetSizes(da, dd->M, dd->N, dd->P);CHKERRQ(ierr); 2121c3fb106SBarry Smith ierr = DMDASetNumProcs(da, dd->m, dd->n, dd->p);CHKERRQ(ierr); 2131c3fb106SBarry Smith ierr = DMDASetBoundaryType(da, dd->bx, dd->by, dd->bz);CHKERRQ(ierr); 2141c3fb106SBarry Smith ierr = DMDASetDof(da, 1);CHKERRQ(ierr); 2151c3fb106SBarry Smith ierr = DMDASetStencilType(da, dd->stencil_type);CHKERRQ(ierr); 2161c3fb106SBarry Smith ierr = DMDASetStencilWidth(da, dd->s);CHKERRQ(ierr); 2171c3fb106SBarry Smith ierr = DMSetUp(da);CHKERRQ(ierr); 2181c3fb106SBarry Smith ierr = PetscMalloc(dof*sizeof(DM),dmlist);CHKERRQ(ierr); 219c893992eSBarry Smith for (i=0; i<dof-1; i++) {ierr = PetscObjectReference((PetscObject)da);CHKERRQ(ierr);} 2201c3fb106SBarry Smith for (i=0; i<dof; i++) (*dmlist)[i] = da; 2211c3fb106SBarry Smith } 2221c3fb106SBarry Smith 2231c3fb106SBarry Smith PetscFunctionReturn(0); 2241c3fb106SBarry Smith } 2251c3fb106SBarry Smith 2263efe6655SBarry Smith /*MC 2273efe6655SBarry Smith DMDA = "da" - A DM object that is used to manage data for a structured grid in 1, 2, or 3 dimensions. 2283efe6655SBarry Smith In the global representation of the vector each process stores a non-overlapping rectangular (or slab in 3d) portion of the grid points. 2293efe6655SBarry Smith In the local representation these rectangular regions (slabs) are extended in all directions by a stencil width. 2303efe6655SBarry Smith 2313efe6655SBarry 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 2323efe6655SBarry Smith vertex centered. 2333efe6655SBarry Smith 2343efe6655SBarry Smith 2353efe6655SBarry Smith Level: intermediate 2363efe6655SBarry Smith 2373efe6655SBarry Smith .seealso: DMType, DMCOMPOSITE, DMDACreate(), DMCreate(), DMSetType() 2383efe6655SBarry Smith M*/ 2393efe6655SBarry Smith 2401c3fb106SBarry Smith 241a4121054SBarry Smith EXTERN_C_BEGIN 24247c6ae99SBarry Smith #undef __FUNCT__ 243a4121054SBarry Smith #define __FUNCT__ "DMCreate_DA" 2447087cfbeSBarry Smith PetscErrorCode DMCreate_DA(DM da) 24547c6ae99SBarry Smith { 24647c6ae99SBarry Smith PetscErrorCode ierr; 24747c6ae99SBarry Smith DM_DA *dd; 24847c6ae99SBarry Smith 24947c6ae99SBarry Smith PetscFunctionBegin; 250a4121054SBarry Smith PetscValidPointer(da,1); 251a4121054SBarry Smith ierr = PetscNewLog(da,DM_DA,&dd);CHKERRQ(ierr); 252a4121054SBarry Smith da->data = dd; 25347c6ae99SBarry Smith 25447c6ae99SBarry Smith dd->dim = -1; 255aa219208SBarry Smith dd->interptype = DMDA_Q1; 25647c6ae99SBarry Smith dd->refine_x = 2; 25747c6ae99SBarry Smith dd->refine_y = 2; 25847c6ae99SBarry Smith dd->refine_z = 2; 25981c108dcSJed Brown dd->coarsen_x = 2; 26081c108dcSJed Brown dd->coarsen_y = 2; 26181c108dcSJed Brown dd->coarsen_z = 2; 26247c6ae99SBarry Smith dd->fieldname = PETSC_NULL; 26347c6ae99SBarry Smith dd->nlocal = -1; 26447c6ae99SBarry Smith dd->Nlocal = -1; 26547c6ae99SBarry Smith dd->M = -1; 26647c6ae99SBarry Smith dd->N = -1; 26747c6ae99SBarry Smith dd->P = -1; 26847c6ae99SBarry Smith dd->m = -1; 26947c6ae99SBarry Smith dd->n = -1; 27047c6ae99SBarry Smith dd->p = -1; 27147c6ae99SBarry Smith dd->w = -1; 27247c6ae99SBarry Smith dd->s = -1; 27347c6ae99SBarry Smith dd->xs = -1; dd->xe = -1; dd->ys = -1; dd->ye = -1; dd->zs = -1; dd->ze = -1; 27447c6ae99SBarry Smith dd->Xs = -1; dd->Xe = -1; dd->Ys = -1; dd->Ye = -1; dd->Zs = -1; dd->Ze = -1; 27547c6ae99SBarry Smith 27688661749SPeter Brune dd->overlap = 0; 27788661749SPeter Brune 27847c6ae99SBarry Smith dd->gtol = PETSC_NULL; 27947c6ae99SBarry Smith dd->ltog = PETSC_NULL; 28047c6ae99SBarry Smith dd->ltol = PETSC_NULL; 28147c6ae99SBarry Smith dd->ao = PETSC_NULL; 28247c6ae99SBarry Smith dd->base = -1; 2831321219cSEthan Coon dd->bx = DMDA_BOUNDARY_NONE; 2841321219cSEthan Coon dd->by = DMDA_BOUNDARY_NONE; 2851321219cSEthan Coon dd->bz = DMDA_BOUNDARY_NONE; 286aa219208SBarry Smith dd->stencil_type = DMDA_STENCIL_BOX; 287aa219208SBarry Smith dd->interptype = DMDA_Q1; 28847c6ae99SBarry Smith dd->idx = PETSC_NULL; 28947c6ae99SBarry Smith dd->Nl = -1; 29047c6ae99SBarry Smith dd->lx = PETSC_NULL; 29147c6ae99SBarry Smith dd->ly = PETSC_NULL; 29247c6ae99SBarry Smith dd->lz = PETSC_NULL; 29347c6ae99SBarry Smith 294454e267fSLisandro Dalcin dd->elementtype = DMDA_ELEMENT_Q1; 295454e267fSLisandro Dalcin 296a4121054SBarry Smith ierr = PetscStrallocpy(VECSTANDARD,&da->vectype);CHKERRQ(ierr); 297a4121054SBarry Smith da->ops->globaltolocalbegin = DMGlobalToLocalBegin_DA; 298a4121054SBarry Smith da->ops->globaltolocalend = DMGlobalToLocalEnd_DA; 299a4121054SBarry Smith da->ops->localtoglobalbegin = DMLocalToGlobalBegin_DA; 300a4121054SBarry Smith da->ops->localtoglobalend = DMLocalToGlobalEnd_DA; 301a4121054SBarry Smith da->ops->createglobalvector = DMCreateGlobalVector_DA; 302a4121054SBarry Smith da->ops->createlocalvector = DMCreateLocalVector_DA; 30325296bd5SBarry Smith da->ops->createinterpolation = DMCreateInterpolation_DA; 304e727c939SJed Brown da->ops->getcoloring = DMCreateColoring_DA; 30525296bd5SBarry Smith da->ops->creatematrix = DMCreateMatrix_DA; 306a4121054SBarry Smith da->ops->refine = DMRefine_DA; 307a4121054SBarry Smith da->ops->coarsen = DMCoarsen_DA; 308a4121054SBarry Smith da->ops->refinehierarchy = DMRefineHierarchy_DA; 309a4121054SBarry Smith da->ops->coarsenhierarchy = DMCoarsenHierarchy_DA; 310e727c939SJed Brown da->ops->getinjection = DMCreateInjection_DA; 311e727c939SJed Brown da->ops->getaggregates = DMCreateAggregates_DA; 312a4121054SBarry Smith da->ops->destroy = DMDestroy_DA; 313a4121054SBarry Smith da->ops->view = 0; 314a4121054SBarry Smith da->ops->setfromoptions = DMSetFromOptions_DA; 315a4121054SBarry Smith da->ops->setup = DMSetUp_DA; 316b859378eSBarry Smith da->ops->load = DMLoad_DA; 317*6636e97aSMatthew G Knepley da->ops->createcoordinatedm = DMCreateCoordinateDM_DA; 31816621825SDmitry Karpeev da->ops->createfielddecomposition = DMCreateFieldDecomposition_DA; 319a4121054SBarry Smith PetscFunctionReturn(0); 320a4121054SBarry Smith } 321a4121054SBarry Smith EXTERN_C_END 32247c6ae99SBarry Smith 323a4121054SBarry Smith #undef __FUNCT__ 324a4121054SBarry Smith #define __FUNCT__ "DMDACreate" 325a4121054SBarry Smith /*@ 326a4121054SBarry Smith DMDACreate - Creates a DMDA object. 327a4121054SBarry Smith 328a4121054SBarry Smith Collective on MPI_Comm 329a4121054SBarry Smith 330a4121054SBarry Smith Input Parameter: 331a4121054SBarry Smith . comm - The communicator for the DMDA object 332a4121054SBarry Smith 333a4121054SBarry Smith Output Parameter: 334a4121054SBarry Smith . da - The DMDA object 335a4121054SBarry Smith 336e0f5d30fSBarry Smith Level: advanced 337e0f5d30fSBarry Smith 338e0f5d30fSBarry Smith Developers Note: Since there exists DMDACreate1/2/3d() should this routine even exist? 339a4121054SBarry Smith 340a4121054SBarry Smith .keywords: DMDA, create 341e0f5d30fSBarry Smith .seealso: DMDASetSizes(), DMDADuplicate(), DMDACreate1d(), DMDACreate2d(), DMDACreate3d() 342a4121054SBarry Smith @*/ 3437087cfbeSBarry Smith PetscErrorCode DMDACreate(MPI_Comm comm, DM *da) 344a4121054SBarry Smith { 345a4121054SBarry Smith PetscErrorCode ierr; 346a4121054SBarry Smith 347a4121054SBarry Smith PetscFunctionBegin; 348a4121054SBarry Smith PetscValidPointer(da,2); 349a4121054SBarry Smith ierr = DMCreate(comm,da);CHKERRQ(ierr); 350a4121054SBarry Smith ierr = DMSetType(*da,DMDA);CHKERRQ(ierr); 35147c6ae99SBarry Smith PetscFunctionReturn(0); 35247c6ae99SBarry Smith } 353b859378eSBarry Smith 354b859378eSBarry Smith 355