Actual source code: daghost.c

      1: #define PETSCDM_DLL

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

     7:  #include src/dm/da/daimpl.h

     11: /*@
     12:    DAGetGhostCorners - Returns the global (x,y,z) indices of the lower left
     13:    corner of the local region, including ghost points.

     15:    Not Collective

     17:    Input Parameter:
     18: .  da - the distributed array

     20:    Output Parameters:
     21: +  x,y,z - the corner indices (where y and z are optional; these are used
     22:            for 2D and 3D problems)
     23: -  m,n,p - widths in the corresponding directions (where n and p are optional;
     24:            these are used for 2D and 3D problems)

     26:    Level: beginner

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

     35: .keywords: distributed array, get, ghost, corners, nodes, local indices

     37: .seealso: DAGetCorners(), DACreate1d(), DACreate2d(), DACreate3d()

     39: @*/
     40: PetscErrorCode PETSCDM_DLLEXPORT DAGetGhostCorners(DA da,PetscInt *x,PetscInt *y,PetscInt *z,PetscInt *m,PetscInt *n,PetscInt *p)
     41: {
     42:   PetscInt w;

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