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 847c6ae99SBarry Smith #undef __FUNCT__ 9aa219208SBarry Smith #define __FUNCT__ "DMDAGetGhostCorners" 1047c6ae99SBarry Smith /*@ 11aa219208SBarry Smith DMDAGetGhostCorners - Returns the global (x,y,z) indices of the lower left 1259f3ab6dSMatthew G. Knepley corner and size of the local region, including ghost points. 1347c6ae99SBarry Smith 1447c6ae99SBarry Smith Not Collective 1547c6ae99SBarry Smith 1647c6ae99SBarry Smith Input Parameter: 1747c6ae99SBarry Smith . da - the distributed array 1847c6ae99SBarry Smith 1947c6ae99SBarry Smith Output Parameters: 2047c6ae99SBarry Smith + x,y,z - the corner indices (where y and z are optional; these are used 2147c6ae99SBarry Smith for 2D and 3D problems) 2247c6ae99SBarry Smith - m,n,p - widths in the corresponding directions (where n and p are optional; 2347c6ae99SBarry Smith these are used for 2D and 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 3447c6ae99SBarry Smith .keywords: distributed array, get, ghost, corners, nodes, local indices 3547c6ae99SBarry Smith 36aa219208SBarry Smith .seealso: DMDAGetCorners(), DMDACreate1d(), DMDACreate2d(), DMDACreate3d(), DMDAGetOwnershipRanges() 3747c6ae99SBarry Smith 3847c6ae99SBarry Smith @*/ 397087cfbeSBarry Smith PetscErrorCode DMDAGetGhostCorners(DM da,PetscInt *x,PetscInt *y,PetscInt *z,PetscInt *m,PetscInt *n,PetscInt *p) 4047c6ae99SBarry Smith { 4147c6ae99SBarry Smith PetscInt w; 4247c6ae99SBarry Smith DM_DA *dd = (DM_DA*)da->data; 4347c6ae99SBarry Smith 4447c6ae99SBarry Smith PetscFunctionBegin; 4547c6ae99SBarry Smith PetscValidHeaderSpecific(da,DM_CLASSID,1); 4647c6ae99SBarry Smith /* since the xs, xe ... have all been multiplied by the number of degrees 4747c6ae99SBarry Smith of freedom per cell, w = dd->w, we divide that out before returning.*/ 4847c6ae99SBarry Smith w = dd->w; 49*59bc5b24SSatish Balay if (x) *x = dd->Xs/w + dd->xo; 50*59bc5b24SSatish Balay if (y) *y = dd->Ys + dd->yo; 51*59bc5b24SSatish Balay if (z) *z = dd->Zs + dd->zo; 52*59bc5b24SSatish Balay if (m) *m = (dd->Xe - dd->Xs)/w; 53*59bc5b24SSatish Balay if (n) *n = (dd->Ye - dd->Ys); 54*59bc5b24SSatish Balay if (p) *p = (dd->Ze - dd->Zs); 5547c6ae99SBarry Smith PetscFunctionReturn(0); 5647c6ae99SBarry Smith } 5747c6ae99SBarry Smith 58