Actual source code: dmmbimpl.h

petsc-master 2019-06-26
Report Typos and Errors
  1: #if !defined(_DMMBIMPL_H)
  2: #define _DMMBIMPL_H

  4:  #include <petscdmmoab.h>
  5: #include "petsc/private/dmimpl.h"

  7: /* This is an integer map, in addition it is also a container class
  8:    Design points:
  9:      - Low storage is the most important design point
 10:      - We want flexible insertion and deletion
 11:      - We can live with O(log) query, but we need O(1) iteration over strata
 12: */
 13: typedef struct {
 14:   moab::Interface    *mbiface;
 15: #ifdef MOAB_HAVE_MPI
 16:   moab::ParallelComm *pcomm;
 17: #endif
 18:   moab::Range        *tag_range; /* entities to which this tag applies */
 19:   moab::Tag           tag;
 20:   PetscInt            tag_size;
 21:   PetscBool           new_tag;
 22:   PetscBool           is_global_vec;
 23:   PetscBool           is_native_vec;
 24:   Vec                 local;
 25: } Vec_MOAB;

 27: namespace moab {
 28: class NestedRefine;
 29: }

 31: typedef struct {
 32:   /* common data */
 33:   PetscInt                dim;                            /* Current topological dimension handled by DMMoab */
 34:   PetscInt                bs;                             /* Block size that controls the strided vs interlaced configuration in discrete systems -
 35:                                                              This affects the layout and hence the degree-of-freedom of the different fields (components) */

 37:   PetscInt               *dfill, *ofill;                  /* The diagonal and off-diagonal block-fill to indicate coupling between components */
 38:   PetscInt               *materials;                      /* The array that caches the material data for each element */

 40:   PetscInt                numFields;
 41:   const char              **fieldNames;

 43:   /* level specific data */
 44:   PetscInt                n, nloc, nghost;                /* Number of global, local only and shared vertices for current partition */
 45:   PetscInt                nele, neleloc, neleghost;       /* Number of global, local only and shared elements for current partition */
 46:   PetscInt                *gsindices;                     /* Global ID for all local+ghosted vertices */
 47:   PetscInt                *gidmap, *lidmap;               /* Global ID indices, Local ID indices, field-based local map, field-based global map */
 48:   PetscInt                seqstart, seqend;               /* Local start and end entity IDs for vertices */
 49:   PetscInt                vstart, vend;                   /* Global start and end index for distributed Vec */
 50:   PetscInt                nghostrings;                    /* Number of ghost ring layers */
 51:   PetscInt                gminmax[2], lminmax[2];         /* Local and global min/max in the ID sequence */
 52:   PetscInt                refct;

 54:   /* store the mapping information */
 55:   ISLocalToGlobalMapping  ltog_map;
 56:   VecScatter              ltog_sendrecv;

 58:   /* MOAB objects cached internally in DMMoab */

 60:   /* common data */
 61:   moab::Interface         *mbiface;                       /* MOAB Interface/Core reference */
 62: #ifdef MOAB_HAVE_MPI
 63:   moab::ParallelComm      *pcomm;                         /* MOAB ParallelComm reference */
 64: #endif
 65:   moab::Tag               ltog_tag;                       /* MOAB supports "global id" tags */
 66:   moab::Tag               material_tag;                   /* MOAB supports "material_set" tags */
 67:   PetscBool               icreatedinstance;               /* true if DM created moab instance internally, will destroy instance in DMDestroy */

 69:   /* store options to customize DMMoab I/O */
 70:   PetscInt                rw_dbglevel;
 71:   PetscBool               partition_by_rank;
 72:   char                    extra_read_options[PETSC_MAX_PATH_LEN];
 73:   char                    extra_write_options[PETSC_MAX_PATH_LEN];
 74:   MoabReadMode            read_mode;
 75:   MoabWriteMode           write_mode;

 77:   /* level specific data */
 78:   moab::Range             *vowned, *vghost, *vlocal;      /* Vertex entities: strictly owned, strictly ghosted, owned+ghosted */
 79:   moab::Range             *elocal, *eghost;               /* Topological dimensional entities: strictly owned, strictly ghosted */
 80:   moab::Range             *bndyvtx, *bndyfaces, *bndyelems; /* Boundary entities: skin vertices, skin faces and elements on the outer skin */
 81:   moab::EntityHandle      fileset;                        /* The Global set to which all local entities belong */

 83:   /* level hierarchy in MOAB */
 84:   moab::NestedRefine     *hierarchy;
 85:   PetscInt                nhlevels, hlevel;
 86:   moab::EntityHandle     *hsets;

 88:   /* Sub-mesh level data-strucuture */
 89:   DM                     *parent;

 91: } DM_Moab;

 93: typedef struct {
 94:   DM_Moab             *pdmmoab;
 95:   moab::NestedRefine  *hierarchy;
 96:   PetscInt             nhlevels, hlevel;
 97:   moab::EntityHandle  *hsets;
 98: } SubDM_MOAB;

100: #endif /* _DMMBIMPL_H */