xref: /petsc/src/dm/impls/da/daghost.c (revision a9a02de4071215c8808ed212ec20dc897ad1c2a4)
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:
1847c6ae99SBarry Smith +  x,y,z - the corner indices (where y and z are optional; these are used
1947c6ae99SBarry Smith            for 2D and 3D problems)
2047c6ae99SBarry Smith -  m,n,p - widths in the corresponding directions (where n and p are optional;
2147c6ae99SBarry Smith            these are used for 2D and 3D problems)
2247c6ae99SBarry Smith 
2347c6ae99SBarry Smith    Level: beginner
2447c6ae99SBarry Smith 
2547c6ae99SBarry Smith    Note:
2647c6ae99SBarry Smith    The corner information is independent of the number of degrees of
27aa219208SBarry Smith    freedom per node set with the DMDACreateXX() routine. Thus the x, y, z, and
2847c6ae99SBarry Smith    m, n, p can be thought of as coordinates on a logical grid, where each
2947c6ae99SBarry Smith    grid point has (potentially) several degrees of freedom.
300298fd71SBarry Smith    Any of y, z, n, and p can be passed in as NULL if not needed.
3147c6ae99SBarry Smith 
3247c6ae99SBarry Smith .keywords: distributed array, get, ghost, corners, nodes, local indices
3347c6ae99SBarry Smith 
34aa219208SBarry Smith .seealso: DMDAGetCorners(), DMDACreate1d(), DMDACreate2d(), DMDACreate3d(), DMDAGetOwnershipRanges()
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;
43*a9a02de4SBarry 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