Actual source code: dmdaimpl.h

petsc-master 2019-06-22
Report Typos and Errors
  1: /*
  2:    Distributed arrays - communication tools for parallel, rectangular grids.
  3: */

  5: #if !defined(_DAIMPL_H)
  6: #define _DAIMPL_H

  8:  #include <petscdmda.h>
  9:  #include <petsc/private/dmimpl.h>

 11: typedef struct {
 12:   PetscInt              M,N,P;                 /* array dimensions */
 13:   PetscInt              m,n,p;                 /* processor layout */
 14:   PetscInt              w;                     /* degrees of freedom per node */
 15:   PetscInt              s;                     /* stencil width */
 16:   PetscInt              xs,xe,ys,ye,zs,ze;     /* range of local values */
 17:   PetscInt              Xs,Xe,Ys,Ye,Zs,Ze;     /* range including ghost values
 18:                                                    values above already scaled by w */
 19:   PetscInt              base;                  /* global number of 1st local node, includes the * w term */
 20:   DMBoundaryType        bx,by,bz;              /* indicates type of ghost nodes at boundary */
 21:   VecScatter            gtol,ltol;        /* scatters, see below for details */
 22:   DMDAStencilType       stencil_type;          /* stencil, either box or star */
 23:   DMDAInterpolationType interptype;

 25:   PetscInt              nlocal,Nlocal;         /* local size of local vector and global vector, includes the * w term */

 27:   PetscInt              xol,yol,zol;           /* overlap of local subdomains */
 28:   PetscInt              xo,yo,zo;              /* offsets for the indices in x y and z */
 29:   PetscInt              Mo,No,Po;              /* the size of the problem the offset is in to */
 30:   PetscInt              Nsub;                  /* number of local subdomains to decompose into */
 31:   PetscInt              nonxs,nonys,nonzs;     /* the nonoverlapping starts in the case of a subdomain da */
 32:   PetscInt              nonxm,nonym,nonzm;     /* the nonoverlapping sizes in the case of a subdomain da */

 34:   AO                    ao;                    /* application ordering context */
 35:   AOType                aotype;                /* type of application ordering */

 37:   char                  **fieldname;           /* names of individual components in vectors */
 38:   char                  **coordinatename;      /* names of coordinate directions, for example, x, y, z */

 40:   PetscInt              *lx,*ly,*lz;        /* number of nodes in each partition block along 3 axis */
 41:   Vec                   natural;            /* global vector for storing items in natural order */
 42:   VecScatter            gton;               /* vector scatter from global to natural */
 43:   PetscMPIInt           *neighbors;         /* ranks of all neighbors and self */

 45:   ISColoring            localcoloring;       /* set by DMCreateColoring() */
 46:   ISColoring            ghostedcoloring;

 48:   DMDAElementType       elementtype;
 49:   PetscInt              ne;                  /* number of elements */
 50:   PetscInt              nen;                 /* number of nodes per element */
 51:   PetscInt              *e;                  /* the elements */
 52:   IS                    ecorners;            /* corners of the subdomain */

 54:   PetscInt              refine_x,refine_y,refine_z;    /* ratio used in refining */
 55:   PetscInt              coarsen_x,coarsen_y,coarsen_z; /* ratio used for coarsening */
 56:                         /* if the refinement is done differently on different levels */
 57:   PetscInt              refine_x_hier_n,*refine_x_hier,refine_y_hier_n,*refine_y_hier,refine_z_hier_n,*refine_z_hier;

 59: #define DMDA_MAX_WORK_ARRAYS 2 /* work arrays for holding work via DMDAGetArray() */
 60:   void                  *arrayin[DMDA_MAX_WORK_ARRAYS],*arrayout[DMDA_MAX_WORK_ARRAYS];
 61:   void                  *arrayghostedin[DMDA_MAX_WORK_ARRAYS],*arrayghostedout[DMDA_MAX_WORK_ARRAYS];
 62:   void                  *startin[DMDA_MAX_WORK_ARRAYS],*startout[DMDA_MAX_WORK_ARRAYS];
 63:   void                  *startghostedin[DMDA_MAX_WORK_ARRAYS],*startghostedout[DMDA_MAX_WORK_ARRAYS];

 65:   PetscErrorCode (*lf)(DM, Vec, Vec, void *);
 66:   PetscErrorCode (*lj)(DM, Vec, Vec, void *);

 68:   /* used by DMDASetBlockFills() */
 69:   PetscInt              *ofill,*dfill;
 70:   PetscInt              *ofillcols;

 72:   /* used by DMDASetMatPreallocateOnly() */
 73:   PetscBool             prealloc_only;
 74:   PetscInt              preallocCenterDim; /* Dimension of the points which connect adjacent points for preallocation */
 75: } DM_DA;

 77: /*
 78:   Vectors:
 79:      Global has on each processor the interior degrees of freedom and
 80:          no ghost points. This vector is what the solvers usually see.
 81:      Local has on each processor the ghost points as well. This is
 82:           what code to calculate Jacobians, etc. usually sees.
 83:   Vector scatters:
 84:      gtol - Global representation to local
 85:      ltol - Local representation to local representation, updates the
 86:             ghostpoint values in the second vector from (correct) interior
 87:             values in the first vector.  This is good for explicit
 88:             nearest neighbor timestepping.
 89: */

 91: PETSC_INTERN PetscErrorCode VecView_MPI_DA(Vec,PetscViewer);
 92: PETSC_INTERN PetscErrorCode VecLoad_Default_DA(Vec, PetscViewer);
 93: PETSC_INTERN PetscErrorCode DMView_DA_Matlab(DM,PetscViewer);
 94: PETSC_INTERN PetscErrorCode DMView_DA_Binary(DM,PetscViewer);
 95: PETSC_INTERN PetscErrorCode DMView_DA_VTK(DM,PetscViewer);
 96: PETSC_INTERN PetscErrorCode DMView_DA_GLVis(DM,PetscViewer);
 97: PETSC_EXTERN PetscErrorCode DMDAVTKWriteAll(PetscObject,PetscViewer);
 98: PETSC_EXTERN PetscErrorCode DMDASelectFields(DM,PetscInt*,PetscInt**);

100: #endif