Actual source code: daghost.c


  2: /*
  3:   Code for manipulating distributed regular arrays in parallel.
  4: */

  6: #include <petsc/private/dmdaimpl.h>

  8: /*@C
  9:    DMDAGetGhostCorners - Returns the global (x,y,z) indices of the lower left
 10:    corner and size of the local region, including ghost points.

 12:    Not Collective

 14:    Input Parameter:
 15: .  da - the distributed array

 17:    Output Parameters:
 18: +  x - the corner index for the first dimension
 19: .  y - the corner index for the second dimension (only used in 2D and 3D problems)
 20: .  z - the corner index for the third dimension (only used in 3D problems)
 21: .  m - the width in the first dimension
 22: .  n - the width in the second dimension (only used in 2D and 3D problems)
 23: -  p - the width in the third dimension (only used in 3D problems)

 25:    Level: beginner

 27:    Note:
 28:    The corner information is independent of the number of degrees of
 29:    freedom per node set with the `DMDACreateXX()` routine. Thus the x, y, z, and
 30:    m, n, p can be thought of as coordinates on a logical grid, where each
 31:    grid point has (potentially) several degrees of freedom.
 32:    Any of y, z, n, and p can be passed in as NULL if not needed.

 34: .seealso: `DM`, `DMDA`, `DMDAGetCorners()`, `DMDACreate1d()`, `DMDACreate2d()`, `DMDACreate3d()`, `DMDAGetOwnershipRanges()`, `DMStagGetGhostCorners()`
 35: @*/
 36: PetscErrorCode DMDAGetGhostCorners(DM da, PetscInt *x, PetscInt *y, PetscInt *z, PetscInt *m, PetscInt *n, PetscInt *p)
 37: {
 38:   PetscInt w;
 39:   DM_DA   *dd = (DM_DA *)da->data;

 42:   /* since the xs, xe ... have all been multiplied by the number of degrees
 43:      of freedom per cell, w = dd->w, we divide that out before returning.*/
 44:   w = dd->w;
 45:   if (x) *x = dd->Xs / w + dd->xo;
 46:   if (y) *y = dd->Ys + dd->yo;
 47:   if (z) *z = dd->Zs + dd->zo;
 48:   if (m) *m = (dd->Xe - dd->Xs) / w;
 49:   if (n) *n = (dd->Ye - dd->Ys);
 50:   if (p) *p = (dd->Ze - dd->Zs);
 51:   return 0;
 52: }