MFEM
v4.3.0
Finite element discretization library
|
A class for non-conforming AMR. The class is not used directly by the user, rather it is an extension of the Mesh class. More...
#include <ncmesh.hpp>
Classes | |
struct | Element |
struct | Face |
struct | GeomInfo |
This holds in one place the constants about the geometries we support. More... | |
struct | Master |
struct | MeshId |
Identifies a vertex/edge/face in both Mesh and NCMesh. More... | |
struct | NCList |
Lists all edges/faces in the nonconforming mesh. More... | |
struct | Node |
struct | Point |
struct | PointMatrix |
struct | Slave |
Nonconforming edge/face within a bigger edge/face. More... | |
struct | TmpVertex |
Public Types | |
typedef std::int64_t | RefCoord |
Public Member Functions | |
NCMesh (const Mesh *mesh) | |
NCMesh (std::istream &input, int version, int &curved, int &is_nc) | |
NCMesh (const NCMesh &other) | |
Deep copy of another instance. More... | |
virtual | ~NCMesh () |
int | Dimension () const |
int | SpaceDimension () const |
int | GetNVertices () const |
int | GetNEdges () const |
int | GetNFaces () const |
virtual void | Refine (const Array< Refinement > &refinements) |
virtual void | LimitNCLevel (int max_nc_level) |
const Table & | GetDerefinementTable () |
virtual void | CheckDerefinementNCLevel (const Table &deref_table, Array< int > &level_ok, int max_nc_level) |
virtual void | Derefine (const Array< int > &derefs) |
const NCList & | GetFaceList () |
Return the current list of conforming and nonconforming faces. More... | |
const NCList & | GetEdgeList () |
Return the current list of conforming and nonconforming edges. More... | |
const NCList & | GetVertexList () |
const NCList & | GetNCList (int entity) |
Return vertex/edge/face list (entity = 0/1/2, respectively). More... | |
void | MarkCoarseLevel () |
const CoarseFineTransformations & | GetRefinementTransforms () |
const CoarseFineTransformations & | GetDerefinementTransforms () |
void | ClearTransforms () |
Free all internal data created by the above three functions. More... | |
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'. More... | |
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 |
virtual void | GetBoundaryClosure (const Array< int > &bdr_attr_is_ess, Array< int > &bdr_vertices, Array< int > &bdr_edges) |
Geometry::Type | GetElementGeometry (int index) const |
Return element geometry type. index is the Mesh element number. More... | |
Geometry::Type | GetFaceGeometry (int index) const |
Return face geometry type. index is the Mesh face number. More... | |
int | GetNumRootElements () |
Return the number of root elements. More... | |
int | GetElementDepth (int i) const |
Return the distance of leaf 'i' from the root. More... | |
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'. More... | |
void | Print (std::ostream &out) const |
I/O: Print the mesh in "MFEM NC mesh v1.0" format. More... | |
bool | IsLegacyLoaded () const |
I/O: Return true if the mesh was loaded from the legacy v1.1 format. More... | |
void | LegacyToNewVertexOrdering (Array< int > &order) const |
I/O: Return a map from old (v1.1) vertex indices to new vertex indices. More... | |
virtual void | Trim () |
Save memory by releasing all non-essential and cached data. More... | |
long | MemoryUsage () const |
Return total number of bytes allocated. More... | |
int | PrintMemoryDetail () const |
void | DebugLeafOrder (std::ostream &out) const |
void | DebugDump (std::ostream &out) const |
Static Public Member Functions | |
static void | GridSfcOrdering2D (int width, int height, Array< int > &coords) |
static void | GridSfcOrdering3D (int width, int height, int depth, Array< int > &coords) |
Protected Types | |
typedef std::map< std::string, int > | RefPathMap |
Protected Member Functions | |
void | GetMeshComponents (Mesh &mesh) const |
Fill Mesh::{vertices,elements,boundary} for the current finest level. More... | |
void | OnMeshUpdated (Mesh *mesh) |
void | MakeTopologyOnly () |
virtual void | Update () |
void | UpdateLeafElements () |
void | UpdateVertices () |
update Vertex::index and vertex_nodeId More... | |
void | CollectLeafElements (int elem, int state, Array< int > &ghosts, int &counter) |
void | InitRootState (int root_count) |
void | InitGeomFlags () |
bool | HavePrisms () const |
bool | HaveTets () const |
bool | IsGhost (const Element &el) const |
void | RefineElement (int elem, char ref_type) |
void | DerefineElement (int elem) |
int | AddElement (const Element &el) |
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 | 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::Element * | NewMeshElement (int geom) const |
int | QuadFaceSplitType (int v1, int v2, int v3, int v4, int mid[5]=NULL) const |
bool | TriFaceSplit (int v1, int v2, int v3, int mid[3]=NULL) const |
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) |
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) |
void | UnreferenceElement (int elem, Array< int > &elemFaces) |
Face * | GetFace (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. More... | |
int | FindNodeExt (const Element &el, int node, bool abort=true) |
Extended version of find_node: works if 'el' is refined. More... | |
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) |
bool | 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, double t0, double t1, int flags, int level, MatrixMap &matrix_map) |
virtual void | BuildFaceList () |
virtual void | BuildEdgeList () |
virtual void | BuildVertexList () |
virtual void | ElementSharesFace (int elem, int local, int face) |
virtual void | ElementSharesEdge (int elem, int local, int enode) |
virtual void | ElementSharesVertex (int elem, int local, int vnode) |
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) |
void | TraverseRefinements (int elem, int coarse_index, std::string &ref_path, RefPathMap &map) |
void | InitDerefTransforms () |
void | SetDerefMatrixCodes (int parent, Array< int > &fine_coarse) |
const double * | CalcVertexPos (int node) const |
int | GetEdgeMaster (int node) const |
void | FindFaceNodes (int face, int node[4]) |
int | EdgeSplitLevel (int vn1, int vn2) const |
int | TriFaceSplitLevel (int vn1, int vn2, int vn3) const |
void | QuadFaceSplitLevel (int vn1, int vn2, int vn3, int vn4, int &h_level, int &v_level) const |
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. More... | |
void | LoadVertexParents (std::istream &input) |
Load the vertex parent hierarchy from a mesh file. More... | |
int | PrintBoundary (std::ostream *out) const |
void | LoadBoundary (std::istream &input) |
Load the "boundary" section of the mesh file. More... | |
void | PrintCoordinates (std::ostream &out) const |
Print the "coordinates" section of the mesh file. More... | |
void | LoadCoordinates (std::istream &input) |
Load the "coordinates" section of the mesh file. More... | |
void | InitRootElements () |
Count root elements and initialize root_state. More... | |
int | CountTopLevelNodes () const |
Return the index of the last top-level node plus one. More... | |
bool | ZeroRootStates () const |
Return true if all root_states are zero. More... | |
void | LoadCoarseElements (std::istream &input) |
Load the element refinement hierarchy from a legacy mesh file. More... | |
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. More... | |
Static Protected Member Functions | |
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 PointMatrix & | GetGeomIdentity (Geometry::Type geom) |
Protected Attributes | |
int | Dim |
int | spaceDim |
dimensions of the elements and the vertex coordinates More... | |
int | MyRank |
used in parallel, or when loading a parallel file in serial More... | |
bool | Iso |
true if the mesh only contains isotropic refinements More... | |
int | Geoms |
bit mask of element geometries present, see InitGeomFlags() More... | |
bool | Legacy |
true if the mesh was loaded from the legacy v1.1 format More... | |
HashTable< Node > | nodes |
HashTable< Face > | faces |
BlockArray< Element > | elements |
Array< int > | free_element_ids |
Array< int > | root_state |
Array< double > | coordinates |
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) More... | |
Array< int > | leaf_sfc_index |
natural tree ordering of leaf elements More... | |
Array< int > | vertex_nodeId |
vertex-index to node-id map, see UpdateVertices More... | |
NCList | face_list |
lazy-initialized list of faces, see GetFaceList More... | |
NCList | edge_list |
lazy-initialized list of edges, see GetEdgeList More... | |
NCList | vertex_list |
lazy-initialized list of vertices, see GetVertexList More... | |
Array< int > | boundary_faces |
subset of all faces, set by BuildFaceList More... | |
Array< char > | face_geom |
face geometry by face index, set by OnMeshUpdated More... | |
Table | element_vertex |
leaf-element to vertex table, see FindSetNeighbors More... | |
Array< Refinement > | ref_stack |
stack of scheduled refinements (temporary) More... | |
HashTable< Node > | shadow |
temporary storage for reparented nodes More... | |
Array< Triple< int, int, int > > | reparents |
scheduled node reparents (tmp) More... | |
Table | derefinements |
possible derefinements, see GetDerefinementTable More... | |
CoarseFineTransformations | transforms |
storage for data returned by Get[De]RefinementTransforms() More... | |
Array< int > | coarse_elements |
state of leaf_elements before Refine(), set by MarkCoarseLevel() More... | |
TmpVertex * | tmp_vertex |
Static Protected Attributes | |
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_hex_identity |
static GeomInfo | GI [Geometry::NumGeom] |
Friends | |
class | Mesh |
class | ParNCMesh |
struct | MatrixMap |
struct | PointMatrixHash |
A class for non-conforming AMR. The class is not used directly by the user, rather it is an extension of the Mesh class.
In general, the class is used by MFEM as follows:
Definition at line 109 of file ncmesh.hpp.
typedef std::int64_t mfem::NCMesh::RefCoord |
Definition at line 377 of file ncmesh.hpp.
|
protected |
Definition at line 820 of file ncmesh.hpp.
|
explicit |
Definition at line 104 of file ncmesh.cpp.
mfem::NCMesh::NCMesh | ( | std::istream & | input, |
int | version, | ||
int & | curved, | ||
int & | is_nc | ||
) |
Load from a stream. The id header is assumed to have been read already from
[in] | input | . |
[in] | version | is 10 for the v1.0 NC format, or 1 for the legacy v1.1 format. |
[out] | curved | is set to 1 if the curvature GridFunction follows after mesh data. |
[out] | is_nc | (again treated as a boolean) is set to 0 if the legacy v1.1 format in fact defines a conforming mesh. See Mesh::Loader for details. |
Definition at line 5605 of file ncmesh.cpp.
mfem::NCMesh::NCMesh | ( | const NCMesh & | other | ) |
Deep copy of another instance.
Definition at line 204 of file ncmesh.cpp.
|
virtual |
Definition at line 243 of file ncmesh.cpp.
|
inlineprotected |
Definition at line 555 of file ncmesh.hpp.
|
protectedvirtual |
Reimplemented in mfem::ParNCMesh.
Definition at line 3055 of file ncmesh.cpp.
|
protected |
Definition at line 3373 of file ncmesh.cpp.
|
protectedvirtual |
Reimplemented in mfem::ParNCMesh.
Definition at line 2935 of file ncmesh.cpp.
|
protectedvirtual |
Reimplemented in mfem::ParNCMesh.
Definition at line 3158 of file ncmesh.cpp.
|
protected |
Definition at line 2244 of file ncmesh.cpp.
|
protected |
Definition at line 775 of file ncmesh.cpp.
|
protected |
Definition at line 750 of file ncmesh.cpp.
|
virtual |
Check derefinements returned by GetDerefinementTable and mark those that can be done safely so that the maximum NC level condition is not violated. On return, level_ok.Size() == deref_table.Size() and contains 0/1s.
Reimplemented in mfem::ParNCMesh.
Definition at line 1793 of file ncmesh.cpp.
|
protected |
Definition at line 870 of file ncmesh.cpp.
void mfem::NCMesh::ClearTransforms | ( | ) |
Free all internal data created by the above three functions.
Definition at line 4557 of file ncmesh.cpp.
|
protected |
Definition at line 1745 of file ncmesh.cpp.
|
protected |
Definition at line 3303 of file ncmesh.cpp.
|
protected |
Definition at line 3746 of file ncmesh.cpp.
|
protected |
Definition at line 1892 of file ncmesh.cpp.
|
protected |
Definition at line 3339 of file ncmesh.cpp.
|
protected |
Definition at line 3315 of file ncmesh.cpp.
|
protected |
Definition at line 5779 of file ncmesh.cpp.
|
protected |
Definition at line 5166 of file ncmesh.cpp.
|
protected |
Return the index of the last top-level node plus one.
Definition at line 5595 of file ncmesh.cpp.
void mfem::NCMesh::DebugDump | ( | std::ostream & | out | ) | const |
Definition at line 6169 of file ncmesh.cpp.
void mfem::NCMesh::DebugLeafOrder | ( | std::ostream & | out | ) | const |
Definition at line 6144 of file ncmesh.cpp.
|
protected |
Definition at line 403 of file ncmesh.cpp.
|
virtual |
Perform a subset of the possible derefinements (see GetDerefinementTable). Note that if anisotropic refinements are present in the mesh, some of the derefinements may have to be skipped to preserve mesh consistency.
Reimplemented in mfem::ParNCMesh.
Definition at line 1822 of file ncmesh.cpp.
|
protected |
Definition at line 1610 of file ncmesh.cpp.
|
inline |
Definition at line 128 of file ncmesh.hpp.
|
protected |
Definition at line 5115 of file ncmesh.cpp.
|
inlineprotectedvirtual |
Reimplemented in mfem::ParNCMesh.
Definition at line 668 of file ncmesh.hpp.
|
inlineprotectedvirtual |
Reimplemented in mfem::ParNCMesh.
Definition at line 667 of file ncmesh.hpp.
|
inlineprotectedvirtual |
Reimplemented in mfem::ParNCMesh.
Definition at line 669 of file ncmesh.hpp.
|
staticprotected |
Definition at line 2593 of file ncmesh.cpp.
|
staticprotected |
Definition at line 2611 of file ncmesh.cpp.
|
staticprotected |
Definition at line 2573 of file ncmesh.cpp.
|
protected |
Definition at line 703 of file ncmesh.cpp.
|
protected |
Definition at line 5018 of file ncmesh.cpp.
|
protected |
Definition at line 284 of file ncmesh.cpp.
|
protected |
Return all vertex-, edge- and face-neighbors of a single element. You can limit the number of elements being checked using 'search_set'. The complexity of the function is linear in the size of the search set.
Definition at line 3556 of file ncmesh.cpp.
|
protected |
Extended version of find_node: works if 'el' is refined.
Definition at line 2583 of file ncmesh.cpp.
|
protected |
Return all vertex-, edge- and face-neighbors of a set of elements. The neighbors are returned as a list (neighbors != NULL), as a set (neighbor_set != NULL), or both. The sizes of the set arrays must match that of leaf_elements. The function is intended to be used for large sets of elements and its complexity is linear in the number of leaf elements in the mesh.
Definition at line 3453 of file ncmesh.cpp.
|
protected |
Return elements neighboring to a local vertex of element 'elem'. Only elements from within the same refinement tree ('cousins') are returned. Complexity is proportional to the depth of elem's refinement tree.
Definition at line 3769 of file ncmesh.cpp.
|
protected |
Definition at line 645 of file ncmesh.cpp.
|
inlineprotected |
Definition at line 566 of file ncmesh.hpp.
|
virtual |
Get a list of vertices (2D/3D) and edges (3D) that coincide with boundary elements with the specified attributes (marked in 'bdr_attr_is_ess'). In 3D this function also reveals "hidden" boundary edges. In parallel it helps identifying boundary vertices/edges affected by non-local boundary elements.
Reimplemented in mfem::ParNCMesh.
Definition at line 5042 of file ncmesh.cpp.
const Table & mfem::NCMesh::GetDerefinementTable | ( | ) |
Return a list of derefinement opportunities. Each row of the table contains Mesh indices of existing elements that can be derefined to form a single new coarse element. Row numbers are then passed to Derefine. This function works both in serial and parallel.
Definition at line 1778 of file ncmesh.cpp.
const CoarseFineTransformations & mfem::NCMesh::GetDerefinementTransforms | ( | ) |
After derefinement, calculate the relations of previous fine elements (some of which may no longer exist) to the current leaf elements. Unlike for refinement, Derefine() may only be called once before this function so there is no MarkFineLevel().
Definition at line 4366 of file ncmesh.cpp.
|
inline |
Return the current list of conforming and nonconforming edges.
Definition at line 240 of file ncmesh.hpp.
int mfem::NCMesh::GetEdgeMaster | ( | int | v1, |
int | v2 | ||
) | const |
Given an edge (by its vertex indices v1 and v2) return the first (geometric) parent edge that exists in the Mesh or -1 if there is no such parent.
Definition at line 4962 of file ncmesh.cpp.
|
protected |
Definition at line 4930 of file ncmesh.cpp.
int mfem::NCMesh::GetEdgeNCOrientation | ( | const MeshId & | edge_id | ) | const |
Return "NC" orientation of an edge. As opposed to standard Mesh edge orientation based on vertex IDs, "NC" edge orientation follows the local edge orientation within the element 'edge_id.element' and is thus processor independent. TODO: this seems only partially true?
Definition at line 4880 of file ncmesh.cpp.
void mfem::NCMesh::GetEdgeVertices | ( | const MeshId & | edge_id, |
int | vert_index[2], | ||
bool | oriented = true |
||
) | const |
Return Mesh vertex indices of an edge identified by 'edge_id'.
Definition at line 4861 of file ncmesh.cpp.
int mfem::NCMesh::GetElementDepth | ( | int | i | ) | const |
Return the distance of leaf 'i' from the root.
Definition at line 4971 of file ncmesh.cpp.
void mfem::NCMesh::GetElementFacesAttributes | ( | int | i, |
Array< int > & | faces, | ||
Array< int > & | fattr | ||
) | const |
Return the faces and face attributes of leaf element 'i'.
Definition at line 4997 of file ncmesh.cpp.
|
inline |
Return element geometry type. index is the Mesh element number.
Definition at line 338 of file ncmesh.hpp.
int mfem::NCMesh::GetElementSizeReduction | ( | int | i | ) | const |
Return the size reduction compared to the root element (ignoring local stretching and curvature).
Definition at line 4983 of file ncmesh.cpp.
|
protected |
Definition at line 428 of file ncmesh.cpp.
|
inline |
Return face geometry type. index is the Mesh face number.
Definition at line 342 of file ncmesh.hpp.
|
inline |
Return the current list of conforming and nonconforming faces.
Definition at line 233 of file ncmesh.hpp.
int mfem::NCMesh::GetFaceVerticesEdges | ( | const MeshId & | face_id, |
int | vert_index[4], | ||
int | edge_index[4], | ||
int | edge_orientation[4] | ||
) | const |
Return Mesh vertex and edge indices of a face identified by 'face_id'. The return value is the number of face vertices.
Definition at line 4892 of file ncmesh.cpp.
|
staticprotected |
Definition at line 3833 of file ncmesh.cpp.
|
protected |
Definition at line 5249 of file ncmesh.cpp.
|
protected |
Fill Mesh::{vertices,elements,boundary} for the current finest level.
Definition at line 2269 of file ncmesh.cpp.
|
protected |
Definition at line 300 of file ncmesh.cpp.
|
protected |
Definition at line 307 of file ncmesh.cpp.
|
inline |
Return vertex/edge/face list (entity = 0/1/2, respectively).
Definition at line 255 of file ncmesh.hpp.
|
inline |
Definition at line 132 of file ncmesh.hpp.
|
inline |
Definition at line 133 of file ncmesh.hpp.
|
inline |
Return the number of root elements.
Definition at line 346 of file ncmesh.hpp.
|
inline |
Definition at line 131 of file ncmesh.hpp.
|
protected |
Definition at line 3849 of file ncmesh.cpp.
const CoarseFineTransformations & mfem::NCMesh::GetRefinementTransforms | ( | ) |
After refinement, calculate the relation of each fine element to its parent coarse element. Note that Refine() or LimitNCLevel() can be called multiple times between MarkCoarseLevel() and this function.
Definition at line 4315 of file ncmesh.cpp.
|
inline |
Return a list of vertices (in 'conforming'); this function is provided for uniformity/completeness. Needed in ParNCMesh/ParFESpace.
Definition at line 248 of file ncmesh.hpp.
|
protected |
Definition at line 3698 of file ncmesh.cpp.
|
static |
Return a space filling curve for a rectangular grid of elements. Implemented is a generalized Hilbert curve for arbitrary grid dimensions. If the width is odd, height should be odd too, otherwise one diagonal (vertex-neighbor) step cannot be avoided in the curve. Even dimensions are recommended.
Definition at line 4814 of file ncmesh.cpp.
|
static |
Return a space filling curve for a 3D rectangular grid of elements. The Hilbert-curve-like algorithm works well for even dimensions. For odd width/height/depth it tends to produce some diagonal (edge-neighbor) steps. Even dimensions are recommended.
Definition at line 4829 of file ncmesh.cpp.
|
inlineprotected |
Definition at line 538 of file ncmesh.hpp.
|
inlineprotected |
Definition at line 539 of file ncmesh.hpp.
|
protected |
Definition at line 1858 of file ncmesh.cpp.
|
protected |
Definition at line 222 of file ncmesh.cpp.
|
protected |
Count root elements and initialize root_state.
Definition at line 5555 of file ncmesh.cpp.
|
protected |
Try to find a space-filling curve friendly orientation of the root elements: set 'root_state' based on the ordering of coarse elements. Note that the coarse mesh itself must be ordered as an SFC by e.g. Mesh::GetGeckoElementOrdering.
Definition at line 2167 of file ncmesh.cpp.
|
inlineprotected |
Definition at line 541 of file ncmesh.hpp.
|
inline |
I/O: Return true if the mesh was loaded from the legacy v1.1 format.
Definition at line 364 of file ncmesh.hpp.
void mfem::NCMesh::LegacyToNewVertexOrdering | ( | Array< int > & | order | ) | const |
I/O: Return a map from old (v1.1) vertex indices to new vertex indices.
Definition at line 6026 of file ncmesh.cpp.
|
virtual |
Check the mesh and potentially refine some elements so that the maximum difference of refinement levels between adjacent elements is not greater than 'max_nc_level'.
Reimplemented in mfem::ParNCMesh.
Definition at line 5279 of file ncmesh.cpp.
|
protected |
Load the "boundary" section of the mesh file.
Definition at line 5388 of file ncmesh.cpp.
|
protected |
Load the element refinement hierarchy from a legacy mesh file.
Definition at line 5797 of file ncmesh.cpp.
|
protected |
Load the "coordinates" section of the mesh file.
Definition at line 5446 of file ncmesh.cpp.
|
protected |
Load the deprecated MFEM mesh v1.1 format for backward compatibility.
Definition at line 5868 of file ncmesh.cpp.
|
protected |
Load the vertex parent hierarchy from a mesh file.
Definition at line 5326 of file ncmesh.cpp.
|
inlineprotected |
Delete top-level vertex coordinates if the Mesh became curved, e.g., by calling Mesh::SetCurvature or otherwise setting the Nodes.
Definition at line 393 of file ncmesh.hpp.
void mfem::NCMesh::MarkCoarseLevel | ( | ) |
Remember the current layer of leaf elements before the mesh is refined. Needed by GetRefinementTransforms(), must be called before Refine().
Definition at line 4269 of file ncmesh.cpp.
long mfem::NCMesh::MemoryUsage | ( | ) | const |
Return total number of bytes allocated.
Definition at line 6093 of file ncmesh.cpp.
|
protected |
Expand a set of elements by all vertex-, edge- and face-neighbors. The output array 'expanded' will contain all items from 'elems' (provided they are in 'search_set') plus their neighbors. The neighbor search can be limited to the optional search set. The complexity is linear in the sum of the sizes of 'elems' and 'search_set'.
Definition at line 3639 of file ncmesh.cpp.
|
protected |
Definition at line 465 of file ncmesh.cpp.
|
protected |
Definition at line 2230 of file ncmesh.cpp.
|
protected |
Definition at line 553 of file ncmesh.cpp.
|
protected |
Definition at line 605 of file ncmesh.cpp.
|
protected |
Definition at line 527 of file ncmesh.cpp.
|
protected |
Definition at line 579 of file ncmesh.cpp.
|
protected |
Definition at line 495 of file ncmesh.cpp.
|
protected |
Get edge and face numbering from 'mesh' (i.e., set all Edge::index and Face::index) after a new mesh was created from us.
Definition at line 2365 of file ncmesh.cpp.
void mfem::NCMesh::Print | ( | std::ostream & | out | ) | const |
I/O: Print the mesh in "MFEM NC mesh v1.0" format.
Definition at line 5476 of file ncmesh.cpp.
|
protected |
Print the "boundary" section of the mesh file. If out == NULL, only return the number of boundary elements.
Definition at line 5349 of file ncmesh.cpp.
|
protected |
Print the "coordinates" section of the mesh file.
Definition at line 5428 of file ncmesh.cpp.
int mfem::NCMesh::PrintMemoryDetail | ( | ) | const |
Definition at line 6116 of file ncmesh.cpp.
|
protected |
Print the "vertex_parents" section of the mesh file.
Definition at line 5297 of file ncmesh.cpp.
|
protected |
Definition at line 5139 of file ncmesh.cpp.
|
protected |
Definition at line 2509 of file ncmesh.cpp.
|
protected |
Definition at line 315 of file ncmesh.cpp.
|
virtual |
Perform the given batch of refinements. Please note that in the presence of anisotropic splits additional refinements may be necessary to keep the mesh consistent. However, the function always performs at least the requested refinements.
Reimplemented in mfem::ParNCMesh.
Definition at line 1528 of file ncmesh.cpp.
|
protected |
Definition at line 887 of file ncmesh.cpp.
|
protected |
Definition at line 389 of file ncmesh.cpp.
|
protected |
Definition at line 2689 of file ncmesh.cpp.
|
protected |
Definition at line 268 of file ncmesh.cpp.
|
protected |
Return el.node[index] correctly, even if the element is refined.
Definition at line 1574 of file ncmesh.cpp.
|
protected |
Definition at line 1873 of file ncmesh.cpp.
|
inline |
Definition at line 129 of file ncmesh.hpp.
|
protected |
Definition at line 3027 of file ncmesh.cpp.
|
protected |
Definition at line 2720 of file ncmesh.cpp.
|
protected |
Definition at line 4283 of file ncmesh.cpp.
|
protected |
Definition at line 2839 of file ncmesh.cpp.
|
protected |
Definition at line 2876 of file ncmesh.cpp.
|
protected |
Definition at line 2556 of file ncmesh.cpp.
|
protected |
Definition at line 5122 of file ncmesh.cpp.
|
virtual |
Save memory by releasing all non-essential and cached data.
Reimplemented in mfem::ParNCMesh.
Definition at line 6050 of file ncmesh.cpp.
|
protected |
Definition at line 346 of file ncmesh.cpp.
|
protectedvirtual |
Apart from the primary data structure, which is the element/node/face hierarchy, there is secondary data that is derived from the primary data and needs to be updated when the primary data changes. Update() takes care of that and needs to be called after each refinement and derefinement.
Reimplemented in mfem::ParNCMesh.
Definition at line 231 of file ncmesh.cpp.
|
inlineprotected |
Definition at line 707 of file ncmesh.hpp.
|
protected |
Definition at line 1960 of file ncmesh.cpp.
|
protected |
update Vertex::index and vertex_nodeId
Definition at line 1987 of file ncmesh.cpp.
|
protected |
Return true if all root_states are zero.
Definition at line 5467 of file ncmesh.cpp.
|
friend |
Definition at line 920 of file ncmesh.hpp.
|
friend |
Definition at line 382 of file ncmesh.hpp.
|
friend |
Definition at line 919 of file ncmesh.hpp.
|
friend |
Definition at line 921 of file ncmesh.hpp.
|
protected |
subset of all faces, set by BuildFaceList
Definition at line 519 of file ncmesh.hpp.
|
protected |
state of leaf_elements before Refine(), set by MarkCoarseLevel()
Definition at line 829 of file ncmesh.hpp.
|
protected |
Coordinates of top-level vertices (organized as triples). If empty, the Mesh is curved (Nodes != NULL) and NCMesh is topology-only.
Definition at line 492 of file ncmesh.hpp.
|
protected |
possible derefinements, see GetDerefinementTable
Definition at line 550 of file ncmesh.hpp.
|
protected |
Definition at line 398 of file ncmesh.hpp.
|
protected |
lazy-initialized list of edges, see GetEdgeList
Definition at line 516 of file ncmesh.hpp.
|
protected |
leaf-element to vertex table, see FindSetNeighbors
Definition at line 522 of file ncmesh.hpp.
|
protected |
Definition at line 482 of file ncmesh.hpp.
|
protected |
face geometry by face index, set by OnMeshUpdated
Definition at line 520 of file ncmesh.hpp.
|
protected |
lazy-initialized list of faces, see GetFaceList
Definition at line 515 of file ncmesh.hpp.
Definition at line 480 of file ncmesh.hpp.
|
protected |
Definition at line 483 of file ncmesh.hpp.
|
protected |
bit mask of element geometries present, see InitGeomFlags()
Definition at line 401 of file ncmesh.hpp.
|
staticprotected |
Definition at line 911 of file ncmesh.hpp.
|
protected |
true if the mesh only contains isotropic refinements
Definition at line 400 of file ncmesh.hpp.
|
protected |
finest elements, in Mesh ordering (+ ghosts)
Definition at line 511 of file ncmesh.hpp.
|
protected |
natural tree ordering of leaf elements
Definition at line 512 of file ncmesh.hpp.
|
protected |
true if the mesh was loaded from the legacy v1.1 format
Definition at line 402 of file ncmesh.hpp.
|
protected |
used in parallel, or when loading a parallel file in serial
Definition at line 399 of file ncmesh.hpp.
|
protected |
Definition at line 505 of file ncmesh.hpp.
|
protected |
Definition at line 505 of file ncmesh.hpp.
|
protected |
Definition at line 505 of file ncmesh.hpp.
|
protected |
Definition at line 509 of file ncmesh.hpp.
|
protected |
Definition at line 509 of file ncmesh.hpp.
|
protected |
Definition at line 509 of file ncmesh.hpp.
|
protected |
Definition at line 509 of file ncmesh.hpp.
Definition at line 479 of file ncmesh.hpp.
|
protected |
Definition at line 505 of file ncmesh.hpp.
|
staticprotected |
Definition at line 813 of file ncmesh.hpp.
|
staticprotected |
Definition at line 812 of file ncmesh.hpp.
|
staticprotected |
Definition at line 810 of file ncmesh.hpp.
|
staticprotected |
Definition at line 808 of file ncmesh.hpp.
|
staticprotected |
Definition at line 811 of file ncmesh.hpp.
|
staticprotected |
Definition at line 809 of file ncmesh.hpp.
|
protected |
stack of scheduled refinements (temporary)
Definition at line 546 of file ncmesh.hpp.
scheduled node reparents (tmp)
Definition at line 548 of file ncmesh.hpp.
|
protected |
Initial traversal state (~ element orientation) for each root element NOTE: M = root_state.Size() is the number of root elements. NOTE: the first M items of 'elements' is the coarse mesh.
Definition at line 488 of file ncmesh.hpp.
temporary storage for reparented nodes
Definition at line 547 of file ncmesh.hpp.
|
protected |
dimensions of the elements and the vertex coordinates
Definition at line 398 of file ncmesh.hpp.
|
mutableprotected |
Definition at line 844 of file ncmesh.hpp.
|
protected |
storage for data returned by Get[De]RefinementTransforms()
Definition at line 826 of file ncmesh.hpp.
|
protected |
lazy-initialized list of vertices, see GetVertexList
Definition at line 517 of file ncmesh.hpp.
|
protected |
vertex-index to node-id map, see UpdateVertices
Definition at line 513 of file ncmesh.hpp.