MFEM v4.8.0
Finite element discretization library
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Pages
mfem::ParNCSubMesh Class Reference

Class representing a Parallel Nonconformal SubMesh. This is only used by ParSubMesh. More...

#include <pncsubmesh.hpp>

Inheritance diagram for mfem::ParNCSubMesh:
[legend]
Collaboration diagram for mfem::ParNCSubMesh:
[legend]

Public Types

using From = SubMesh::From
 Convenience type alias.
 
- Public Types inherited from mfem::ParNCMesh
using GroupId = short
 
using CommGroup = std::vector<int>
 
- Public Types inherited from mfem::NCMesh
using RefCoord = std::int64_t
 

Public Member Functions

const ParNCMeshGetParent () const
 Get the parent ParNCMesh object.
 
- Public Member Functions inherited from mfem::ParNCMesh
 ParNCMesh (MPI_Comm comm, const NCMesh &ncmesh, const int *partitioning=nullptr)
 Construct by partitioning a serial NCMesh.
 
 ParNCMesh (MPI_Comm comm, std::istream &input, int version, int &curved, int &is_nc)
 
 ParNCMesh (const ParNCMesh &other)
 Deep copy of another instance.
 
virtual ~ParNCMesh ()
 
void Refine (const Array< Refinement > &refinements) override
 
void LimitNCLevel (int max_nc_level) override
 Parallel version of NCMesh::LimitNCLevel.
 
void CheckDerefinementNCLevel (const Table &deref_table, Array< int > &level_ok, int max_nc_level) override
 
void Derefine (const Array< int > &derefs) override
 
void GetFineToCoarsePartitioning (const Array< int > &derefs, Array< int > &new_ranks) const
 
void Rebalance (const Array< int > *custom_partition=NULL)
 
int GetNElements () const
 
int GetNGhostVertices () const
 
int GetNGhostEdges () const
 
int GetNGhostFaces () const
 
int GetNGhostElements () const override
 
const NCListGetSharedVertices ()
 
const NCListGetSharedEdges ()
 
const NCListGetSharedFaces ()
 
void GetGhostElements (Array< int > &gelem)
 
const NCListGetSharedList (int entity)
 Helper to get shared vertices/edges/faces ('entity' == 0/1/2 resp.).
 
int GetFaceOrientation (int index) const
 Return (shared) face orientation relative to its owner element.
 
GroupId GetEntityOwnerId (int entity, int index)
 Return vertex/edge/face ('entity' == 0/1/2, resp.) owner.
 
GroupId GetEntityGroupId (int entity, int index)
 
const CommGroupGetGroup (GroupId id) const
 Return a list of ranks contained in the group of the given ID.
 
bool GroupContains (GroupId id, int rank) const
 Return true if group 'id' contains the given rank.
 
bool IsGhost (int entity, int index) const
 Return true if the specified vertex/edge/face is a ghost.
 
int ElementRank (int index) const
 
int GetMyRank () const
 
void SendRebalanceDofs (int old_ndofs, const Table &old_element_dofs, long old_global_offset, FiniteElementSpace *space)
 Use the communication pattern from last Rebalance() to send element DOFs.
 
void RecvRebalanceDofs (Array< int > &elements, Array< long > &dofs)
 Receive element DOFs sent by SendRebalanceDofs().
 
const Array< int > & GetRebalanceOldIndex () const
 
const Array< int > & GetDerefineOldRanks () const
 
template<typename Type >
void SynchronizeDerefinementData (Array< Type > &elem_data, const Table &deref_table)
 
void GetBoundaryClosure (const Array< int > &bdr_attr_is_ess, Array< int > &bdr_vertices, Array< int > &bdr_edges, Array< int > &bdr_faces) override
 
void Trim () override
 Save memory by releasing all non-essential and cached data.
 
std::size_t MemoryUsage (bool with_base=true) const
 Return total number of bytes allocated.
 
int PrintMemoryDetail (bool with_base=true) const
 
void GetDebugMesh (Mesh &debug_mesh) const
 
void CommunicateGhostData (const Array< VarOrderElemInfo > &sendData, Array< VarOrderElemInfo > &recvData)
 
void FindEdgesOfGhostElement (int elem, Array< int > &edges)
 
void FindFacesOfGhostElement (int elem, Array< int > &faces)
 
void FindEdgesOfGhostFace (int face, Array< int > &edges)
 
- Public Member Functions inherited from mfem::NCMesh
 NCMesh (const Mesh *mesh)
 
 NCMesh (std::istream &input, int version, int &curved, int &is_nc)
 
 NCMesh (const NCMesh &other)
 Deep copy of another instance.
 
NCMeshoperator= (NCMesh &)=delete
 Copy assignment not supported.
 
virtual ~NCMesh ()
 
int Dimension () const
 Return the dimension of the NCMesh.
 
int SpaceDimension () const
 Return the space dimension of the NCMesh.
 
int GetNVertices () const
 Return the number of vertices in the NCMesh.
 
int GetNEdges () const
 Return the number of edges in the NCMesh.
 
int GetNFaces () const
 Return the number of (2D) faces in the NCMesh.
 
const TableGetDerefinementTable ()
 
const NCListGetFaceList ()
 Return the current list of conforming and nonconforming faces.
 
const NCListGetEdgeList ()
 Return the current list of conforming and nonconforming edges.
 
const NCListGetVertexList ()
 
const NCListGetNCList (int entity)
 Return vertex/edge/face list (entity = 0/1/2, respectively).
 
void MarkCoarseLevel ()
 
const CoarseFineTransformationsGetRefinementTransforms () const
 
const CoarseFineTransformationsGetDerefinementTransforms () const
 
void ClearTransforms ()
 Free all internal data created by the above three functions.
 
void GetEdgeVertices (const MeshId &edge_id, int vert_index[2], bool oriented=true) const
 Return Mesh vertex indices of an edge identified by 'edge_id'.
 
int GetEdgeNCOrientation (const MeshId &edge_id) const
 
int GetFaceVerticesEdges (const MeshId &face_id, int vert_index[4], int edge_index[4], int edge_orientation[4]) const
 
int GetEdgeMaster (int v1, int v2) const
 
Geometry::Type GetElementGeometry (int index) const
 Return element geometry type. index is the Mesh element number.
 
Geometry::Type GetFaceGeometry (int index) const
 Return face geometry type. index is the Mesh face number.
 
int GetNumRootElements ()
 Return the number of root elements.
 
int GetElementDepth (int i) const
 Return the distance of leaf i from the root.
 
int GetElementSizeReduction (int i) const
 
void GetElementFacesAttributes (int i, Array< int > &faces, Array< int > &fattr) const
 Return the faces and face attributes of leaf element i.
 
void SetAttribute (int i, int attr)
 Set the attribute of leaf element i, which is a Mesh element index.
 
void Print (std::ostream &out, const std::string &comments="") const
 
bool IsLegacyLoaded () const
 I/O: Return true if the mesh was loaded from the legacy v1.1 format.
 
void LegacyToNewVertexOrdering (Array< int > &order) const
 I/O: Return a map from old (v1.1) vertex indices to new vertex indices.
 
long MemoryUsage () const
 Return total number of bytes allocated.
 
int PrintMemoryDetail () const
 
int GetNodeVertex (int node)
 Given a node index, return the vertex index associated.
 
int GetNumNodes () const
 The number of Nodes.
 
const NodeGetNode (int i) const
 Access a Node.
 
int GetNumFaces () const
 The number of faces.
 
const FaceGetFace (int i) const
 Access a Face.
 
int GetNumElements () const
 The number of elements.
 
const ElementGetElement (int i) const
 Access an Element.
 
int ParentFaceNodes (std::array< int, 4 > &nodes) const
 Given a set of nodes defining a face, traverse the nodes structure to find the nodes that make up the parent face and replace the input nodes with the parent nodes. Additionally return the child index that the child face would be, relative to the discovered parent face.
 
std::array< int, 4 > FindFaceNodes (int face) const
 Method for finding the nodes associated to a face.
 
std::array< int, 4 > FindFaceNodes (const Face &fa) const
 
MFEM_DEPRECATED void FindFaceNodes (int face, int node[4]) const
 Backwards compatible method for finding the node associated to a face.
 
void DebugLeafOrder (std::ostream &out) const
 
void DebugDump (std::ostream &out) const
 

Static Public Member Functions

static bool IsParNCSubMesh (const NCMesh *m)
 Check if NCMesh m is a ParNCSubMesh.
 
- Static Public Member Functions inherited from mfem::NCMesh
static void GridSfcOrdering2D (int width, int height, Array< int > &coords)
 
static void GridSfcOrdering3D (int width, int height, int depth, Array< int > &coords)
 

Protected Member Functions

 ParNCSubMesh (ParSubMesh &submesh, const ParNCMesh &parent, From from, const Array< int > &attributes)
 protected constructor
 
const HashTable< Node > & ParentNodes () const
 Accessor for parent nodes.
 
const HashTable< Face > & ParentFaces () const
 Accessor for parent faces.
 
- Protected Member Functions inherited from mfem::ParNCMesh
 ParNCMesh ()=default
 
void GetConformingSharedStructures (class ParMesh &pmesh)
 
void GetFaceNeighbors (class ParMesh &pmesh)
 
void Update () override
 
int Partition (long index, long total_elements) const
 Return the processor number for a global element number.
 
int InitialPartition (int index) const
 Helper to get the partitioning when the serial mesh gets split initially.
 
long PartitionFirstIndex (int rank, long total_elements) const
 Return the global index of the first element owned by processor 'rank'.
 
void BuildFaceList () override
 
void BuildEdgeList () override
 
void BuildVertexList () override
 
void ElementSharesFace (int elem, int local, int face) override
 
void ElementSharesEdge (int elem, int local, int enode) override
 
void ElementSharesVertex (int elem, int local, int vnode) override
 
GroupId GetGroupId (const CommGroup &group)
 
GroupId GetSingletonGroup (int rank)
 
void InitOwners (int num, Array< GroupId > &entity_owner)
 
void MakeSharedList (const NCList &list, NCList &shared)
 
void AddConnections (int entity, int index, const Array< int > &ranks)
 
void CalculatePMatrixGroups ()
 
void CreateGroups (int nentities, Array< Connection > &index_rank, Array< GroupId > &entity_group)
 
void CalcFaceOrientations ()
 
void UpdateLayers ()
 
void MakeSharedTable (int ngroups, int ent, Array< int > &shared_local, Table &group_shared, Array< char > *entity_geom=NULL, char geom=0)
 
void AdjustMeshIds (Array< MeshId > ids[], int rank)
 
void ChangeVertexMeshIdElement (NCMesh::MeshId &id, int elem)
 
void ChangeEdgeMeshIdElement (NCMesh::MeshId &id, int elem)
 
void ChangeRemainingMeshIds (Array< MeshId > &ids, int pos, const Array< Pair< int, int > > &find)
 
void EncodeMeshIds (std::ostream &os, Array< MeshId > ids[])
 
void DecodeMeshIds (std::istream &is, Array< MeshId > ids[])
 
void EncodeGroups (std::ostream &os, const Array< GroupId > &ids)
 
void DecodeGroups (std::istream &is, Array< GroupId > &ids)
 
bool CheckElementType (int elem, int type)
 
void ElementNeighborProcessors (int elem, Array< int > &ranks)
 
void NeighborProcessors (Array< int > &neighbors)
 
void Prune ()
 
bool PruneTree (int elem)
 Internal. Recursive part of Prune().
 
void RedistributeElements (Array< int > &new_ranks, int target_elements, bool record_comm)
 
void ClearAuxPM ()
 
std::size_t GroupsMemoryUsage () const
 
- Protected Member Functions inherited from mfem::NCMesh
 NCMesh ()=default
 
void GetMeshComponents (Mesh &mesh) const
 Fill Mesh::{vertices,elements,boundary} for the current finest level.
 
void OnMeshUpdated (Mesh *mesh)
 
void MakeTopologyOnly ()
 
void UpdateLeafElements ()
 Update the leaf elements indices in leaf_elements.
 
void UpdateVertices ()
 This method assigns indices to vertices (Node::vert_index) that will be seen by the Mesh class and the rest of MFEM.
 
void CollectLeafElements (int elem, int state, Array< int > &ghosts, int &counter)
 
void InitRootState (int root_count)
 
void InitGeomFlags ()
 
bool HavePrisms () const
 Return true if the mesh contains prism elements.
 
bool HavePyramids () const
 Return true if the mesh contains pyramid elements.
 
bool HaveTets () const
 Return true if the mesh contains tetrahedral elements.
 
bool IsGhost (const Element &el) const
 Return true if the Element el is a ghost element.
 
void RefineElement (int elem, char ref_type)
 Refine the element elem with the refinement type ref_type.
 
void RefineElement (const Refinement &ref)
 Refine one element with type and scale specified by ref.
 
void DerefineElement (int elem)
 Derefine the element elem, does nothing on leaf elements.
 
void SetNodeScale (int p0, int p1, real_t scale)
 Helper function to set scale for a node with parents p0, p1.
 
int AddElement (const Element &el)
 Add an Element el to the NCMesh, optimized to reuse freed elements.
 
int AddElement (Geometry::Type geom, int attr)
 
void FreeElement (int id)
 
int NewHexahedron (int n0, int n1, int n2, int n3, int n4, int n5, int n6, int n7, int attr, int fattr0, int fattr1, int fattr2, int fattr3, int fattr4, int fattr5)
 
int NewWedge (int n0, int n1, int n2, int n3, int n4, int n5, int attr, int fattr0, int fattr1, int fattr2, int fattr3, int fattr4)
 
int NewTetrahedron (int n0, int n1, int n2, int n3, int attr, int fattr0, int fattr1, int fattr2, int fattr3)
 
int NewPyramid (int n0, int n1, int n2, int n3, int n4, int attr, int fattr0, int fattr1, int fattr2, int fattr3, int fattr4)
 
int NewQuadrilateral (int n0, int n1, int n2, int n3, int attr, int eattr0, int eattr1, int eattr2, int eattr3)
 
int NewTriangle (int n0, int n1, int n2, int attr, int eattr0, int eattr1, int eattr2)
 
int NewSegment (int n0, int n1, int attr, int vattr1, int vattr2)
 
mfem::ElementNewMeshElement (int geom) const
 
int QuadFaceSplitType (int n1, int n2, int n3, int n4, real_t &s, int mid[5]=NULL) const
 Given a quad face defined by four vertices, establish which edges of this face have been split, and if so optionally return the mid points of those edges.
 
bool TriFaceSplit (int n1, int n2, int n3, int mid[3]=NULL) const
 Given a tri face defined by three vertices, establish whether the edges that make up this face have been split, and if so optionally return the midpoints.
 
bool TriFaceIsMaster (int n1, int n2, int n3) const
 Determine if a Triangle face is a master face.
 
bool QuadFaceIsMaster (int n1, int n2, int n3, int n4) const
 Determine if a Quad face is a master face.
 
void ForceRefinement (int vn1, int vn2, int vn3, int vn4)
 
void FindEdgeElements (int vn1, int vn2, int vn3, int vn4, Array< MeshId > &prisms) const
 
void CheckAnisoPrism (int vn1, int vn2, int vn3, int vn4, const Refinement *refs, int nref)
 
void CheckAnisoFace (int vn1, int vn2, int vn3, int vn4, int mid12, int mid34, int level=0)
 
void CheckIsoFace (int vn1, int vn2, int vn3, int vn4, int en1, int en2, int en3, int en4, int midf)
 
void ReparentNode (int node, int new_p1, int new_p2, real_t scale)
 
int FindMidEdgeNode (int node1, int node2) const
 
int GetMidEdgeNode (int node1, int node2)
 
int GetMidFaceNode (int en1, int en2, int en3, int en4)
 
void ReferenceElement (int elem)
 Add references to all nodes, edges and faces of the element.
 
void UnreferenceElement (int elem, Array< int > &elemFaces)
 
FaceGetFace (Element &elem, int face_no)
 
void RegisterFaces (int elem, int *fattr=NULL)
 
void DeleteUnusedFaces (const Array< int > &elemFaces)
 
void CollectDerefinements (int elem, Array< Connection > &list)
 
int RetrieveNode (const Element &el, int index)
 Return el.node[index] correctly, even if the element is refined.
 
int FindNodeExt (const Element &el, int node, bool abort=true)
 Extended version of find_node: works if 'el' is refined.
 
int ReorderFacePointMat (int v0, int v1, int v2, int v3, int elem, const PointMatrix &pm, PointMatrix &reordered) const
 
void TraverseQuadFace (int vn0, int vn1, int vn2, int vn3, const PointMatrix &pm, int level, Face *eface[4], MatrixMap &matrix_map)
 
TriFaceTraverseResults TraverseTriFace (int vn0, int vn1, int vn2, const PointMatrix &pm, int level, MatrixMap &matrix_map)
 
void TraverseTetEdge (int vn0, int vn1, const Point &p0, const Point &p1, MatrixMap &matrix_map)
 
void TraverseEdge (int vn0, int vn1, real_t t0, real_t t1, int flags, int level, MatrixMap &matrix_map)
 
void FindSetNeighbors (const Array< char > &elem_set, Array< int > *neighbors, Array< char > *neighbor_set=NULL)
 
void FindNeighbors (int elem, Array< int > &neighbors, const Array< int > *search_set=NULL)
 
void NeighborExpand (const Array< int > &elems, Array< int > &expanded, const Array< int > *search_set=NULL)
 
void CollectEdgeVertices (int v0, int v1, Array< int > &indices)
 
void CollectTriFaceVertices (int v0, int v1, int v2, Array< int > &indices)
 
void CollectQuadFaceVertices (int v0, int v1, int v2, int v3, Array< int > &indices)
 
void BuildElementToVertexTable ()
 
void UpdateElementToVertexTable ()
 
int GetVertexRootCoord (int elem, RefCoord coord[3]) const
 
void CollectIncidentElements (int elem, const RefCoord coord[3], Array< int > &list) const
 
void FindVertexCousins (int elem, int local, Array< int > &cousins) const
 
void GetPointMatrix (Geometry::Type geom, const char *ref_path, DenseMatrix &matrix) const
 
void TraverseRefinements (int elem, int coarse_index, std::string &ref_path, RefPathMap &map) const
 
void InitDerefTransforms ()
 
void SetDerefMatrixCodes (int parent, Array< int > &fine_coarse)
 
const real_tCalcVertexPos (int node) const
 
int GetEdgeMaster (int node) const
 
real_t GetScale (real_t s, bool reverse) const
 Return directed scale in (0,1).
 
int EdgeSplitLevel (int vn1, int vn2) const
 Return the number of splits of this edge that have occurred in the NCMesh. If zero, this means the segment is not the master of any other segments.
 
int TriFaceSplitLevel (int vn1, int vn2, int vn3) const
 Return the number of splits of this triangle that have occurred in the NCMesh. If zero, this means the triangle is neither split, nor the master of a split face.
 
void QuadFaceSplitLevel (int vn1, int vn2, int vn3, int vn4, int &h_level, int &v_level) const
 Computes the number of horizontal and vertical splits of this quad that have occurred in the NCMesh. If zero, this means the quad is not the master of any other quad.
 
int QuadFaceSplitLevel (int vn1, int vn2, int vn3, int vn4) const
 Returns the total number of splits of this quad that have occurred in the NCMesh. If zero, this means the quad is not the master of any other quad.
 
void CountSplits (int elem, int splits[3]) const
 
void GetLimitRefinements (Array< Refinement > &refinements, int max_level)
 
int PrintVertexParents (std::ostream *out) const
 Print the "vertex_parents" section of the mesh file.
 
void LoadVertexParents (std::istream &input)
 Load the vertex parent hierarchy from a mesh file.
 
int PrintBoundary (std::ostream *out) const
 
void LoadBoundary (std::istream &input)
 Load the "boundary" section of the mesh file.
 
void PrintCoordinates (std::ostream &out) const
 Print the "coordinates" section of the mesh file.
 
void LoadCoordinates (std::istream &input)
 Load the "coordinates" section of the mesh file.
 
void InitRootElements ()
 Count root elements and initialize root_state.
 
int CountTopLevelNodes () const
 Return the index of the last top-level node plus one.
 
bool ZeroRootStates () const
 Return true if all root_states are zero.
 
void LoadCoarseElements (std::istream &input)
 Load the element refinement hierarchy from a legacy mesh file.
 
void CopyElements (int elem, const BlockArray< Element > &tmp_elements)
 
void LoadLegacyFormat (std::istream &input, int &curved, int &is_nc)
 Load the deprecated MFEM mesh v1.1 format for backward compatibility.
 

Protected Attributes

const ParNCMeshparent_
 The parent ParNCMesh. Not owned.
 
Array< int > parent_element_ids_
 
Array< int > parent_node_ids_
 
std::unordered_map< int, int > parent_to_submesh_node_ids_
 Mapping from parent NCMesh node ids to submesh NCMesh node ids.
 
std::unordered_map< int, int > parent_to_submesh_element_ids_
 Mapping from parent NCMesh element ids to submesh NCMesh element ids.
 
- Protected Attributes inherited from mfem::ParNCMesh
MPI_Comm MyComm
 
int NRanks
 
GroupList groups
 
GroupMap group_id
 
Array< GroupIdentity_owner [3]
 
Array< GroupIdentity_pmat_group [3]
 
Array< GroupIdentity_conf_group [3]
 
Array< int > entity_elem_local [3]
 
NCList shared_vertices
 
NCList shared_edges
 
NCList shared_faces
 
Array< char > face_orient
 
Array< char > element_type
 
Array< int > ghost_layer
 list of elements whose 'element_type' == 2.
 
Array< int > boundary_layer
 list of type 3 elements
 
Array< int > tmp_owner
 
Array< char > tmp_shared_flag
 
Array< Connectionentity_index_rank [3]
 
Array< int > tmp_neighbors
 
RebalanceDofMessage::Map send_rebalance_dofs
 
RebalanceDofMessage::Map recv_rebalance_dofs
 
Array< int > old_index_or_rank
 
Array< DenseMatrix * > aux_pm_store
 Stores modified point matrices created by GetFaceNeighbors.
 
- Protected Attributes inherited from mfem::NCMesh
int Dim
 
int spaceDim
 dimensions of the elements and the vertex coordinates
 
int MyRank
 used in parallel, or when loading a parallel file in serial
 
bool Iso
 true if the mesh only contains isotropic refinements
 
int Geoms
 bit mask of element geometries present, see InitGeomFlags()
 
bool Legacy
 true if the mesh was loaded from the legacy v1.1 format
 
HashTable< Nodenodes
 
HashTable< Facefaces
 
bool using_scaling = false
 
BlockArray< Elementelements
 
Array< int > free_element_ids
 
Array< int > root_state
 
Array< real_tcoordinates
 
int NElements
 
int NVertices
 
int NEdges
 
int NFaces
 
int NGhostElements
 
int NGhostVertices
 
int NGhostEdges
 
int NGhostFaces
 
Array< int > leaf_elements
 finest elements, in Mesh ordering (+ ghosts)
 
Array< int > leaf_sfc_index
 natural tree ordering of leaf elements
 
Array< int > vertex_nodeId
 vertex-index to node-id map, see UpdateVertices
 
NCList face_list
 lazy-initialized list of faces, see GetFaceList
 
NCList edge_list
 lazy-initialized list of edges, see GetEdgeList
 
NCList vertex_list
 lazy-initialized list of vertices, see GetVertexList
 
Array< int > boundary_faces
 subset of all faces, set by BuildFaceList
 
Array< char > face_geom
 face geometry by face index, set by OnMeshUpdated
 
Table element_vertex
 leaf-element to vertex table, see FindSetNeighbors
 
Array< Refinementref_stack
 stack of scheduled refinements (temporary)
 
HashTable< Nodeshadow
 temporary storage for reparented nodes
 
Array< Triple< int, int, int > > reparents
 scheduled node reparents (tmp)
 
Array< real_treparent_scale
 scale associated with reparents (tmp)
 
Table derefinements
 possible derefinements, see GetDerefinementTable
 
CoarseFineTransformations transforms
 storage for data returned by Get[De]RefinementTransforms()
 
Array< int > coarse_elements
 state of leaf_elements before Refine(), set by MarkCoarseLevel()
 
TmpVertextmp_vertex
 

Friends

class ParSubMesh
 Only ParSubMesh can use methods in this class.
 
void SubMeshUtils::ConstructFaceTree (ParNCSubMesh &submesh, const Array< int > &attributes)
 
void SubMeshUtils::ConstructVolumeTree (ParNCSubMesh &submesh, const Array< int > &attributes)
 

Additional Inherited Members

- Static Public Attributes inherited from mfem::NCMesh
static constexpr int MaxElemNodes
 Number of nodes an element can have.
 
static constexpr int MaxElemEdges
 Number of edges an element can have.
 
static constexpr int MaxElemFaces
 Number of faces an element can have.
 
static constexpr int MaxElemChildren
 Number of children an element can have.
 
static constexpr int MaxFaceNodes
 Number of faces an element can have.
 
- Protected Types inherited from mfem::ParNCMesh
using GroupList = std::vector<CommGroup>
 
using GroupMap = std::map<CommGroup, GroupId>
 
- Protected Types inherited from mfem::NCMesh
using RefPathMap = std::map<std::string, int>
 
- Static Protected Member Functions inherited from mfem::ParNCMesh
static int get_face_orientation (const Face &face, const Element &e1, const Element &e2, int local[2]=NULL)
 
- Static Protected Member Functions inherited from mfem::NCMesh
static int find_node (const Element &el, int node)
 
static int find_element_edge (const Element &el, int vn0, int vn1, bool abort=true)
 
static int find_local_face (int geom, int a, int b, int c)
 
static const PointMatrixGetGeomIdentity (Geometry::Type geom)
 
static void CheckSupportedGeom (Geometry::Type geom)
 
- Static Protected Attributes inherited from mfem::NCMesh
static PointMatrix pm_seg_identity
 
static PointMatrix pm_tri_identity
 
static PointMatrix pm_quad_identity
 
static PointMatrix pm_tet_identity
 
static PointMatrix pm_prism_identity
 
static PointMatrix pm_pyramid_identity
 
static PointMatrix pm_hex_identity
 
static GeomInfo GI [Geometry::NumGeom]
 

Detailed Description

Class representing a Parallel Nonconformal SubMesh. This is only used by ParSubMesh.

Definition at line 31 of file pncsubmesh.hpp.

Member Typedef Documentation

◆ From

Convenience type alias.

Definition at line 35 of file pncsubmesh.hpp.

Constructor & Destructor Documentation

◆ ParNCSubMesh()

mfem::ParNCSubMesh::ParNCSubMesh ( ParSubMesh & submesh,
const ParNCMesh & parent,
From from,
const Array< int > & attributes )
protected

protected constructor

Definition at line 28 of file pncsubmesh.cpp.

Member Function Documentation

◆ GetParent()

const ParNCMesh * mfem::ParNCSubMesh::GetParent ( ) const
inline

Get the parent ParNCMesh object.

Definition at line 46 of file pncsubmesh.hpp.

◆ IsParNCSubMesh()

static bool mfem::ParNCSubMesh::IsParNCSubMesh ( const NCMesh * m)
inlinestatic

Check if NCMesh m is a ParNCSubMesh.

Parameters
mThe input Mesh

Definition at line 41 of file pncsubmesh.hpp.

◆ ParentFaces()

const HashTable< Face > & mfem::ParNCSubMesh::ParentFaces ( ) const
inlineprotected

Accessor for parent faces.

Required to bypass access protection in parent class.

Returns
const HashTable<Face>&

Definition at line 95 of file pncsubmesh.hpp.

◆ ParentNodes()

const HashTable< Node > & mfem::ParNCSubMesh::ParentNodes ( ) const
inlineprotected

Accessor for parent nodes.

Required to bypass access protection in parent class.

Returns
const HashTable<Node>&

Definition at line 87 of file pncsubmesh.hpp.

Friends And Related Symbol Documentation

◆ ParSubMesh

friend class ParSubMesh
friend

Only ParSubMesh can use methods in this class.

Definition at line 33 of file pncsubmesh.hpp.

◆ SubMeshUtils::ConstructFaceTree

void SubMeshUtils::ConstructFaceTree ( ParNCSubMesh & submesh,
const Array< int > & attributes )
friend

◆ SubMeshUtils::ConstructVolumeTree

void SubMeshUtils::ConstructVolumeTree ( ParNCSubMesh & submesh,
const Array< int > & attributes )
friend

Member Data Documentation

◆ parent_

const ParNCMesh* mfem::ParNCSubMesh::parent_
protected

The parent ParNCMesh. Not owned.

Definition at line 57 of file pncsubmesh.hpp.

◆ parent_element_ids_

Array<int> mfem::ParNCSubMesh::parent_element_ids_
protected

Mapping from submesh element nc ids (index of the array), to the parent element ids. If from a boundary, these map to faces in the parent.

Definition at line 61 of file pncsubmesh.hpp.

◆ parent_node_ids_

Array<int> mfem::ParNCSubMesh::parent_node_ids_
protected

Mapping from ParNCSubMesh node ids (index of the array), to the parent NCMesh node ids.

Definition at line 65 of file pncsubmesh.hpp.

◆ parent_to_submesh_element_ids_

std::unordered_map<int, int> mfem::ParNCSubMesh::parent_to_submesh_element_ids_
protected

Mapping from parent NCMesh element ids to submesh NCMesh element ids.

Definition at line 73 of file pncsubmesh.hpp.

◆ parent_to_submesh_node_ids_

std::unordered_map<int, int> mfem::ParNCSubMesh::parent_to_submesh_node_ids_
protected

Mapping from parent NCMesh node ids to submesh NCMesh node ids.

Definition at line 69 of file pncsubmesh.hpp.


The documentation for this class was generated from the following files: