xref: /petsc/src/dm/impls/da/daghost.c (revision 6b867d5ac32ed0c728f185df9d084acdf26f70bf)
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