147c6ae99SBarry Smith 247c6ae99SBarry Smith /* 347c6ae99SBarry Smith Code for manipulating distributed regular arrays in parallel. 447c6ae99SBarry Smith */ 547c6ae99SBarry Smith 6af0996ceSBarry Smith #include <petsc/private/dmdaimpl.h> /*I "petscdmda.h" I*/ 747c6ae99SBarry Smith 8a5d1443cSVincent Le Chenadec /*@C 9aa219208SBarry Smith DMDAGetGhostCorners - Returns the global (x,y,z) indices of the lower left 1059f3ab6dSMatthew G. Knepley corner and size of the local region, including ghost points. 1147c6ae99SBarry Smith 1247c6ae99SBarry Smith Not Collective 1347c6ae99SBarry Smith 1447c6ae99SBarry Smith Input Parameter: 1547c6ae99SBarry Smith . da - the distributed array 1647c6ae99SBarry Smith 1747c6ae99SBarry Smith Output Parameters: 18*6b867d5aSJose E. Roman + x - the corner index for the first dimension 19*6b867d5aSJose E. Roman . y - the corner index for the second dimension (only used in 2D and 3D problems) 20*6b867d5aSJose E. Roman . z - the corner index for the third dimension (only used in 3D problems) 21*6b867d5aSJose E. Roman . m - the width in the first dimension 22*6b867d5aSJose E. Roman . n - the width in the second dimension (only used in 2D and 3D problems) 23*6b867d5aSJose E. Roman - p - the width in the third dimension (only used in 3D problems) 2447c6ae99SBarry Smith 2547c6ae99SBarry Smith Level: beginner 2647c6ae99SBarry Smith 2747c6ae99SBarry Smith Note: 2847c6ae99SBarry Smith The corner information is independent of the number of degrees of 29aa219208SBarry Smith freedom per node set with the DMDACreateXX() routine. Thus the x, y, z, and 3047c6ae99SBarry Smith m, n, p can be thought of as coordinates on a logical grid, where each 3147c6ae99SBarry Smith grid point has (potentially) several degrees of freedom. 320298fd71SBarry Smith Any of y, z, n, and p can be passed in as NULL if not needed. 3347c6ae99SBarry Smith 343bd220d7SPatrick Sanan .seealso: DMDAGetCorners(), DMDACreate1d(), DMDACreate2d(), DMDACreate3d(), DMDAGetOwnershipRanges(), DMStagGetGhostCorners() 3547c6ae99SBarry Smith 3647c6ae99SBarry Smith @*/ 377087cfbeSBarry Smith PetscErrorCode DMDAGetGhostCorners(DM da,PetscInt *x,PetscInt *y,PetscInt *z,PetscInt *m,PetscInt *n,PetscInt *p) 3847c6ae99SBarry Smith { 3947c6ae99SBarry Smith PetscInt w; 4047c6ae99SBarry Smith DM_DA *dd = (DM_DA*)da->data; 4147c6ae99SBarry Smith 4247c6ae99SBarry Smith PetscFunctionBegin; 43a9a02de4SBarry Smith PetscValidHeaderSpecificType(da,DM_CLASSID,1,DMDA); 4447c6ae99SBarry Smith /* since the xs, xe ... have all been multiplied by the number of degrees 4547c6ae99SBarry Smith of freedom per cell, w = dd->w, we divide that out before returning.*/ 4647c6ae99SBarry Smith w = dd->w; 4759bc5b24SSatish Balay if (x) *x = dd->Xs/w + dd->xo; 4859bc5b24SSatish Balay if (y) *y = dd->Ys + dd->yo; 4959bc5b24SSatish Balay if (z) *z = dd->Zs + dd->zo; 5059bc5b24SSatish Balay if (m) *m = (dd->Xe - dd->Xs)/w; 5159bc5b24SSatish Balay if (n) *n = (dd->Ye - dd->Ys); 5259bc5b24SSatish Balay if (p) *p = (dd->Ze - dd->Zs); 5347c6ae99SBarry Smith PetscFunctionReturn(0); 5447c6ae99SBarry Smith } 5547c6ae99SBarry Smith 56