MFEM  v4.5.0
Finite element discretization library
Classes | Public Types | Public Member Functions | Static Public Member Functions | Public Attributes | Static Public Attributes | Protected Member Functions | Static Protected Member Functions | Protected Attributes | Static Protected Attributes | Friends | List of all members
mfem::Mesh Class Reference

#include <mesh.hpp>

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

Classes

struct  FaceInfo
 This structure stores the low level information necessary to interpret the configuration of elements on a specific face. This information can be accessed using methods like GetFaceElements(), GetFaceInfos(), FaceIsInterior(), etc. More...
 
struct  FaceInformation
 This structure is used as a human readable output format that decipheres the information contained in Mesh::FaceInfo when using the Mesh::GetFaceInformation() method. More...
 
class  GeometryList
 List of mesh geometries stored as Array<Geometry::Type>. More...
 
struct  NCFaceInfo
 

Public Types

enum  Operation { NONE, REFINE, DEREFINE, REBALANCE }
 
enum  FaceTopology { FaceTopology::Boundary, FaceTopology::Conforming, FaceTopology::Nonconforming, FaceTopology::NA }
 
enum  ElementLocation { ElementLocation::Local, ElementLocation::FaceNbr, ElementLocation::NA }
 
enum  ElementConformity { ElementConformity::Coincident, ElementConformity::Superset, ElementConformity::Subset, ElementConformity::NA }
 
enum  FaceInfoTag {
  FaceInfoTag::Boundary, FaceInfoTag::LocalConforming, FaceInfoTag::LocalSlaveNonconforming, FaceInfoTag::SharedConforming,
  FaceInfoTag::SharedSlaveNonconforming, FaceInfoTag::MasterNonconforming, FaceInfoTag::GhostSlave, FaceInfoTag::GhostMaster
}
 
typedef Geometry::Constants< Geometry::SEGMENTseg_t
 
typedef Geometry::Constants< Geometry::TRIANGLEtri_t
 
typedef Geometry::Constants< Geometry::SQUAREquad_t
 
typedef Geometry::Constants< Geometry::TETRAHEDRONtet_t
 
typedef Geometry::Constants< Geometry::CUBEhex_t
 
typedef Geometry::Constants< Geometry::PRISMpri_t
 
typedef Geometry::Constants< Geometry::PYRAMIDpyr_t
 

Public Member Functions

 Mesh ()
 
 Mesh (const Mesh &mesh, bool copy_nodes=true)
 
 Mesh (Mesh &&mesh)
 Move constructor, useful for using a Mesh as a function return value. More...
 
Meshoperator= (Mesh &&mesh)
 Move assignment operstor. More...
 
Meshoperator= (const Mesh &mesh)=delete
 Explicitly delete the copy assignment operator. More...
 
std::vector< int > CreatePeriodicVertexMapping (const std::vector< Vector > &translations, double tol=1e-8) const
 Creates a mapping v2v from the vertex indices of the mesh such that coincident vertices under the given translations are identified. More...
 
 Mesh (double *vertices, int num_vertices, int *element_indices, Geometry::Type element_type, int *element_attributes, int num_elements, int *boundary_indices, Geometry::Type boundary_type, int *boundary_attributes, int num_boundary_elements, int dimension, int space_dimension=-1)
 Construct a Mesh from the given primary data. More...
 
 Mesh (int Dim_, int NVert, int NElem, int NBdrElem=0, int spaceDim_=-1)
 Init constructor: begin the construction of a Mesh object. More...
 
void FinalizeTopology (bool generate_bdr=true)
 Finalize the construction of the secondary topology (connectivity) data of a Mesh. More...
 
virtual void Finalize (bool refine=false, bool fix_orientation=false)
 Finalize the construction of a general Mesh. More...
 
virtual void SetAttributes ()
 
double GetGeckoElementOrdering (Array< int > &ordering, int iterations=4, int window=4, int period=2, int seed=0, bool verbose=false, double time_limit=0)
 
void GetHilbertElementOrdering (Array< int > &ordering)
 
void ReorderElements (const Array< int > &ordering, bool reorder_vertices=true)
 
MFEM_DEPRECATED Mesh (int nx, int ny, int nz, Element::Type type, bool generate_edges=false, double sx=1.0, double sy=1.0, double sz=1.0, bool sfc_ordering=true)
 Deprecated: see MakeCartesian3D. More...
 
MFEM_DEPRECATED Mesh (int nx, int ny, Element::Type type, bool generate_edges=false, double sx=1.0, double sy=1.0, bool sfc_ordering=true)
 Deprecated: see MakeCartesian2D. More...
 
MFEM_DEPRECATED Mesh (int n, double sx=1.0)
 Deprecated: see MakeCartesian1D. More...
 
 Mesh (const char *filename, int generate_edges=0, int refine=1, bool fix_orientation=true)
 
 Mesh (std::istream &input, int generate_edges=0, int refine=1, bool fix_orientation=true)
 
 Mesh (Mesh *mesh_array[], int num_pieces)
 Create a disjoint mesh from the given mesh array. More...
 
MFEM_DEPRECATED Mesh (Mesh *orig_mesh, int ref_factor, int ref_type)
 Deprecated: see MakeRefined. More...
 
virtual void Load (std::istream &input, int generate_edges=0, int refine=1, bool fix_orientation=true)
 
void Clear ()
 Clear the contents of the Mesh. More...
 
int MeshGenerator ()
 Get the mesh generator/type. More...
 
int GetNV () const
 Returns number of vertices. Vertices are only at the corners of elements, where you would expect them in the lowest-order mesh. More...
 
int GetNE () const
 Returns number of elements. More...
 
int GetNBE () const
 Returns number of boundary elements. More...
 
int GetNEdges () const
 Return the number of edges. More...
 
int GetNFaces () const
 Return the number of faces in a 3D mesh. More...
 
int GetNumFaces () const
 Return the number of faces (3D), edges (2D) or vertices (1D). More...
 
int GetNumFacesWithGhost () const
 Return the number of faces (3D), edges (2D) or vertices (1D) including ghost faces. More...
 
virtual int GetNFbyType (FaceType type) const
 Returns the number of faces according to the requested type, does not count master nonconforming faces. More...
 
virtual long long ReduceInt (int value) const
 Utility function: sum integers from all processors (Allreduce). More...
 
long long GetGlobalNE () const
 Return the total (global) number of elements. More...
 
void GetVertexToVertexTable (DSTable &) const
 
const GeometricFactorsGetGeometricFactors (const IntegrationRule &ir, const int flags, MemoryType d_mt=MemoryType::DEFAULT)
 Return the mesh geometric factors corresponding to the given integration rule. More...
 
const FaceGeometricFactorsGetFaceGeometricFactors (const IntegrationRule &ir, const int flags, FaceType type, MemoryType d_mt=MemoryType::DEFAULT)
 Return the mesh geometric factors for the faces corresponding to the given integration rule. More...
 
void DeleteGeometricFactors ()
 Destroy all GeometricFactors stored by the Mesh. More...
 
void NodesUpdated ()
 This function should be called after the mesh node coordinates have changed, e.g. after the mesh has moved. More...
 
int EulerNumber () const
 Equals 1 + num_holes - num_loops. More...
 
int EulerNumber2D () const
 Equals 1 - num_holes. More...
 
int Dimension () const
 
int SpaceDimension () const
 
const double * GetVertex (int i) const
 Return pointer to vertex i's coordinates. More...
 
double * GetVertex (int i)
 Return pointer to vertex i's coordinates. More...
 
void GetElementData (int geom, Array< int > &elem_vtx, Array< int > &attr) const
 
virtual bool HasBoundaryElements () const
 Checks if the mesh has boundary elements. More...
 
void GetBdrElementData (int geom, Array< int > &bdr_elem_vtx, Array< int > &bdr_attr) const
 
void ChangeVertexDataOwnership (double *vertices, int len_vertices, bool zerocopy=false)
 Set the internal Vertex array to point to the given vertices array without assuming ownership of the pointer. More...
 
const Element *const * GetElementsArray () const
 
const ElementGetElement (int i) const
 
ElementGetElement (int i)
 
const ElementGetBdrElement (int i) const
 
ElementGetBdrElement (int i)
 
const ElementGetFace (int i) const
 
Geometry::Type GetFaceGeometry (int i) const
 
Geometry::Type GetElementGeometry (int i) const
 
Geometry::Type GetBdrElementGeometry (int i) const
 
Geometry::Type GetFaceBaseGeometry (int i) const
 
Geometry::Type GetElementBaseGeometry (int i) const
 
Geometry::Type GetBdrElementBaseGeometry (int i) const
 
bool HasGeometry (Geometry::Type geom) const
 Return true iff the given geom is encountered in the mesh. Geometries of dimensions lower than Dimension() are counted as well. More...
 
int GetNumGeometries (int dim) const
 Return the number of geometries of the given dimension present in the mesh. More...
 
void GetGeometries (int dim, Array< Geometry::Type > &el_geoms) const
 Return all element geometries of the given dimension present in the mesh. More...
 
void GetElementVertices (int i, Array< int > &v) const
 Returns the indices of the vertices of element i. More...
 
void GetBdrElementVertices (int i, Array< int > &v) const
 Returns the indices of the vertices of boundary element i. More...
 
void GetElementEdges (int i, Array< int > &edges, Array< int > &cor) const
 Return the indices and the orientations of all edges of element i. More...
 
void GetBdrElementEdges (int i, Array< int > &edges, Array< int > &cor) const
 Return the indices and the orientations of all edges of bdr element i. More...
 
void GetFaceEdges (int i, Array< int > &edges, Array< int > &o) const
 
void GetFaceVertices (int i, Array< int > &vert) const
 Returns the indices of the vertices of face i. More...
 
void GetEdgeVertices (int i, Array< int > &vert) const
 Returns the indices of the vertices of edge i. More...
 
TableGetFaceEdgeTable () const
 Returns the face-to-edge Table (3D) More...
 
TableGetEdgeVertexTable () const
 Returns the edge-to-vertex Table (3D) More...
 
void GetElementFaces (int i, Array< int > &faces, Array< int > &ori) const
 Return the indices and the orientations of all faces of element i. More...
 
void GetBdrElementFace (int i, int *f, int *o) const
 Return the index and the orientation of the face of bdr element i. (3D) More...
 
int GetBdrElementEdgeIndex (int i) const
 
void GetBdrElementAdjacentElement (int bdr_el, int &el, int &info) const
 For the given boundary element, bdr_el, return its adjacent element and its info, i.e. 64*local_bdr_index+bdr_orientation. More...
 
void GetBdrElementAdjacentElement2 (int bdr_el, int &el, int &info) const
 For the given boundary element, bdr_el, return its adjacent element and its info, i.e. 64*local_bdr_index+inverse_bdr_orientation. More...
 
Element::Type GetElementType (int i) const
 Returns the type of element i. More...
 
Element::Type GetBdrElementType (int i) const
 Returns the type of boundary element i. More...
 
void GetPointMatrix (int i, DenseMatrix &pointmat) const
 
void GetBdrPointMatrix (int i, DenseMatrix &pointmat) const
 
void GetElementTransformation (int i, IsoparametricTransformation *ElTr)
 
ElementTransformationGetElementTransformation (int i)
 Returns the transformation defining the i-th element. More...
 
void GetElementTransformation (int i, const Vector &nodes, IsoparametricTransformation *ElTr)
 
ElementTransformationGetBdrElementTransformation (int i)
 Returns the transformation defining the i-th boundary element. More...
 
void GetBdrElementTransformation (int i, IsoparametricTransformation *ElTr)
 
void GetFaceTransformation (int i, IsoparametricTransformation *FTr)
 Returns the transformation defining the given face element in a user-defined variable. More...
 
void GetLocalFaceTransformation (int face_type, int elem_type, IsoparametricTransformation &Transf, int info)
 A helper method that constructs a transformation from the reference space of a face to the reference space of an element. More...
 
ElementTransformationGetFaceTransformation (int FaceNo)
 Returns the transformation defining the given face element. More...
 
void GetEdgeTransformation (int i, IsoparametricTransformation *EdTr)
 
ElementTransformationGetEdgeTransformation (int EdgeNo)
 Returns the transformation defining the given face element. More...
 
virtual FaceElementTransformationsGetFaceElementTransformations (int FaceNo, int mask=31)
 
FaceElementTransformationsGetInteriorFaceTransformations (int FaceNo)
 
FaceElementTransformationsGetBdrFaceTransformations (int BdrElemNo)
 
int GetBdrFace (int BdrElemNo) const
 Return the local face index for the given boundary face. More...
 
bool FaceIsInterior (int FaceNo) const
 Return true if the given face is interior. More...
 
FaceInformation GetFaceInformation (int f) const
 
void GetFaceElements (int Face, int *Elem1, int *Elem2) const
 
void GetFaceInfos (int Face, int *Inf1, int *Inf2) const
 
void GetFaceInfos (int Face, int *Inf1, int *Inf2, int *NCFace) const
 
Geometry::Type GetFaceGeometryType (int Face) const
 
Element::Type GetFaceElementType (int Face) const
 
Array< int > GetFaceToBdrElMap () const
 
int CheckElementOrientation (bool fix_it=true)
 Check (and optionally attempt to fix) the orientation of the elements. More...
 
int CheckBdrElementOrientation (bool fix_it=true)
 Check the orientation of the boundary elements. More...
 
int GetAttribute (int i) const
 Return the attribute of element i. More...
 
void SetAttribute (int i, int attr)
 Set the attribute of element i. More...
 
int GetBdrAttribute (int i) const
 Return the attribute of boundary element i. More...
 
void SetBdrAttribute (int i, int attr)
 Set the attribute of boundary element i. More...
 
const TableElementToElementTable ()
 
const TableElementToFaceTable () const
 
const TableElementToEdgeTable () const
 
TableGetVertexToElementTable ()
 The returned Table must be destroyed by the caller. More...
 
TableGetFaceToElementTable () const
 
virtual MFEM_DEPRECATED void ReorientTetMesh ()
 
int * CartesianPartitioning (int nxyz[])
 
int * GeneratePartitioning (int nparts, int part_method=1)
 
void CheckPartitioning (int *partitioning_)
 
void CheckDisplacements (const Vector &displacements, double &tmax)
 
void MoveVertices (const Vector &displacements)
 
void GetVertices (Vector &vert_coord) const
 
void SetVertices (const Vector &vert_coord)
 
void GetNode (int i, double *coord) const
 
void SetNode (int i, const double *coord)
 
void MoveNodes (const Vector &displacements)
 
void GetNodes (Vector &node_coord) const
 
void SetNodes (const Vector &node_coord)
 
GridFunctionGetNodes ()
 Return a pointer to the internal node GridFunction (may be NULL). More...
 
const GridFunctionGetNodes () const
 
bool OwnsNodes () const
 Return the mesh nodes ownership flag. More...
 
void SetNodesOwner (bool nodes_owner)
 Set the mesh nodes ownership flag. More...
 
void NewNodes (GridFunction &nodes, bool make_owner=false)
 Replace the internal node GridFunction with the given GridFunction. More...
 
void SwapNodes (GridFunction *&nodes, int &own_nodes_)
 
void GetNodes (GridFunction &nodes) const
 Return the mesh nodes/vertices projected on the given GridFunction. More...
 
virtual void SetNodalFESpace (FiniteElementSpace *nfes)
 
void SetNodalGridFunction (GridFunction *nodes, bool make_owner=false)
 
const FiniteElementSpaceGetNodalFESpace () const
 
void EnsureNodes ()
 
virtual void SetCurvature (int order, bool discont=false, int space_dim=-1, int ordering=1)
 
void UniformRefinement (int ref_algo=0)
 Refine all mesh elements. More...
 
void GeneralRefinement (const Array< Refinement > &refinements, int nonconforming=-1, int nc_limit=0)
 
void GeneralRefinement (const Array< int > &el_to_refine, int nonconforming=-1, int nc_limit=0)
 
void RandomRefinement (double prob, bool aniso=false, int nonconforming=-1, int nc_limit=0)
 Refine each element with given probability. Uses GeneralRefinement. More...
 
void RefineAtVertex (const Vertex &vert, double eps=0.0, int nonconforming=-1)
 Refine elements sharing the specified vertex. Uses GeneralRefinement. More...
 
bool RefineByError (const Array< double > &elem_error, double threshold, int nonconforming=-1, int nc_limit=0)
 
bool RefineByError (const Vector &elem_error, double threshold, int nonconforming=-1, int nc_limit=0)
 
bool DerefineByError (Array< double > &elem_error, double threshold, int nc_limit=0, int op=1)
 
bool DerefineByError (const Vector &elem_error, double threshold, int nc_limit=0, int op=1)
 Same as DerefineByError for an error vector. More...
 
void EnsureNCMesh (bool simplices_nonconforming=false)
 
bool Conforming () const
 
bool Nonconforming () const
 
const CoarseFineTransformationsGetRefinementTransforms ()
 
Operation GetLastOperation () const
 Return type of last modification of the mesh. More...
 
long GetSequence () const
 
virtual void PrintXG (std::ostream &os=mfem::out) const
 Print the mesh to the given stream using Netgen/Truegrid format. More...
 
virtual void Print (std::ostream &os=mfem::out) const
 
virtual void Save (const char *fname, int precision=16) const
 
virtual void Print (adios2stream &os) const
 Print the mesh to the given stream using the adios2 bp format. More...
 
void PrintVTK (std::ostream &os)
 
void PrintVTK (std::ostream &os, int ref, int field_data=0)
 
void PrintVTU (std::ostream &os, int ref=1, VTKFormat format=VTKFormat::ASCII, bool high_order_output=false, int compression_level=0, bool bdr_elements=false)
 
virtual void PrintVTU (std::string fname, VTKFormat format=VTKFormat::ASCII, bool high_order_output=false, int compression_level=0, bool bdr=false)
 
void PrintBdrVTU (std::string fname, VTKFormat format=VTKFormat::ASCII, bool high_order_output=false, int compression_level=0)
 
void GetElementColoring (Array< int > &colors, int el0=0)
 
void PrintWithPartitioning (int *partitioning, std::ostream &os, int elem_attr=0) const
 Prints the mesh with boundary elements given by the boundary of the subdomains, so that the boundary of subdomain i has boundary attribute i+1. More...
 
void PrintElementsWithPartitioning (int *partitioning, std::ostream &out, int interior_faces=0)
 
void PrintSurfaces (const Table &Aface_face, std::ostream &out) const
 Print set of disjoint surfaces: More...
 
void ScaleSubdomains (double sf)
 
void ScaleElements (double sf)
 
void Transform (void(*f)(const Vector &, Vector &))
 
void Transform (VectorCoefficient &deformation)
 
void RemoveUnusedVertices ()
 Remove unused vertices and rebuild mesh connectivity. More...
 
void RemoveInternalBoundaries ()
 
double GetElementSize (int i, int type=0)
 Get the size of the i-th element relative to the perfect reference element. More...
 
double GetElementSize (int i, const Vector &dir)
 
double GetElementVolume (int i)
 
void GetElementCenter (int i, Vector &center)
 
void GetBoundingBox (Vector &min, Vector &max, int ref=2)
 Returns the minimum and maximum corners of the mesh bounding box. More...
 
void GetCharacteristics (double &h_min, double &h_max, double &kappa_min, double &kappa_max, Vector *Vh=NULL, Vector *Vk=NULL)
 
void PrintCharacteristics (Vector *Vh=NULL, Vector *Vk=NULL, std::ostream &os=mfem::out)
 Compute and print mesh characteristics such as number of vertices, number of elements, number of boundary elements, minimal and maximal element sizes, minimal and maximal element aspect ratios, etc. More...
 
virtual void PrintInfo (std::ostream &os=mfem::out)
 In serial, this method calls PrintCharacteristics(). In parallel, additional information about the parallel decomposition is also printed. More...
 
void MesquiteSmooth (const int mesquite_option=0)
 
virtual int FindPoints (DenseMatrix &point_mat, Array< int > &elem_ids, Array< IntegrationPoint > &ips, bool warn=true, InverseElementTransformation *inv_trans=NULL)
 Find the ids of the elements that contain the given points, and their corresponding reference coordinates. More...
 
void Swap (Mesh &other, bool non_geometry)
 
virtual ~Mesh ()
 Destroys Mesh. More...
 
void DebugDump (std::ostream &out) const
 Output an NCMesh-compatible debug dump. More...
 
Methods for Mesh construction.

These methods are intended to be used with the init constructor.

ElementNewElement (int geom)
 
int AddVertex (double x, double y=0.0, double z=0.0)
 
int AddVertex (const double *coords)
 
void AddVertexParents (int i, int p1, int p2)
 Mark vertex i as nonconforming, with parent vertices p1 and p2. More...
 
int AddSegment (int v1, int v2, int attr=1)
 
int AddSegment (const int *vi, int attr=1)
 
int AddTriangle (int v1, int v2, int v3, int attr=1)
 
int AddTriangle (const int *vi, int attr=1)
 
int AddTri (const int *vi, int attr=1)
 
int AddQuad (int v1, int v2, int v3, int v4, int attr=1)
 
int AddQuad (const int *vi, int attr=1)
 
int AddTet (int v1, int v2, int v3, int v4, int attr=1)
 
int AddTet (const int *vi, int attr=1)
 
int AddWedge (int v1, int v2, int v3, int v4, int v5, int v6, int attr=1)
 
int AddWedge (const int *vi, int attr=1)
 
int AddPyramid (int v1, int v2, int v3, int v4, int v5, int attr=1)
 
int AddPyramid (const int *vi, int attr=1)
 
int AddHex (int v1, int v2, int v3, int v4, int v5, int v6, int v7, int v8, int attr=1)
 
int AddHex (const int *vi, int attr=1)
 
void AddHexAsTets (const int *vi, int attr=1)
 
void AddHexAsWedges (const int *vi, int attr=1)
 
void AddHexAsPyramids (const int *vi, int attr=1)
 
int AddElement (Element *elem)
 The parameter elem should be allocated using the NewElement() method. More...
 
int AddBdrElement (Element *elem)
 
int AddBdrSegment (int v1, int v2, int attr=1)
 
int AddBdrSegment (const int *vi, int attr=1)
 
int AddBdrTriangle (int v1, int v2, int v3, int attr=1)
 
int AddBdrTriangle (const int *vi, int attr=1)
 
int AddBdrQuad (int v1, int v2, int v3, int v4, int attr=1)
 
int AddBdrQuad (const int *vi, int attr=1)
 
void AddBdrQuadAsTriangles (const int *vi, int attr=1)
 
int AddBdrPoint (int v, int attr=1)
 
void GenerateBoundaryElements ()
 
void FinalizeTriMesh (int generate_edges=0, int refine=0, bool fix_orientation=true)
 Finalize the construction of a triangular Mesh. More...
 
void FinalizeQuadMesh (int generate_edges=0, int refine=0, bool fix_orientation=true)
 Finalize the construction of a quadrilateral Mesh. More...
 
void FinalizeTetMesh (int generate_edges=0, int refine=0, bool fix_orientation=true)
 Finalize the construction of a tetrahedral Mesh. More...
 
void FinalizeWedgeMesh (int generate_edges=0, int refine=0, bool fix_orientation=true)
 Finalize the construction of a wedge Mesh. More...
 
void FinalizeHexMesh (int generate_edges=0, int refine=0, bool fix_orientation=true)
 Finalize the construction of a hexahedral Mesh. More...
 
void FinalizeMesh (int refine=0, bool fix_orientation=true)
 Finalize the construction of any type of Mesh. More...
 
NURBS mesh refinement methods
void KnotInsert (Array< KnotVector *> &kv)
 
void KnotInsert (Array< Vector *> &kv)
 
void DegreeElevate (int rel_degree, int degree=16)
 

Static Public Member Functions

static FiniteElementGetTransformationFEforElementType (Element::Type)
 
static void PrintElementsByGeometry (int dim, const Array< int > &num_elems_by_geom, std::ostream &out)
 Auxiliary method used by PrintCharacteristics(). More...
 
Named mesh constructors.

Each of these constructors uses the move constructor, and can be used as the right-hand side of an assignment when creating new meshes.

static Mesh LoadFromFile (const char *filename, int generate_edges=0, int refine=1, bool fix_orientation=true)
 
static Mesh MakeCartesian1D (int n, double sx=1.0)
 
static Mesh MakeCartesian2D (int nx, int ny, Element::Type type, bool generate_edges=false, double sx=1.0, double sy=1.0, bool sfc_ordering=true)
 
static Mesh MakeCartesian3D (int nx, int ny, int nz, Element::Type type, double sx=1.0, double sy=1.0, double sz=1.0, bool sfc_ordering=true)
 
static Mesh MakeRefined (Mesh &orig_mesh, int ref_factor, int ref_type)
 Create a refined (by any factor) version of orig_mesh. More...
 
static Mesh MakeRefined (Mesh &orig_mesh, const Array< int > &ref_factors, int ref_type)
 refined ref_factors[i] times in each dimension. More...
 
static Mesh MakeSimplicial (const Mesh &orig_mesh)
 
static Mesh MakePeriodic (const Mesh &orig_mesh, const std::vector< int > &v2v)
 Create a periodic mesh by identifying vertices of orig_mesh. More...
 

Public Attributes

Array< int > attributes
 A list of all unique element attributes used by the Mesh. More...
 
Array< int > bdr_attributes
 A list of all unique boundary attributes used by the Mesh. More...
 
NURBSExtensionNURBSext
 Optional NURBS mesh extension. More...
 
NCMeshncmesh
 Optional nonconforming mesh extension. More...
 
Array< GeometricFactors * > geom_factors
 Optional geometric factors. More...
 
Array< FaceGeometricFactors * > face_geom_factors
 Optional face geometric factors. More...
 

Static Public Attributes

static bool remove_unused_vertices = true
 

Protected Member Functions

void Init ()
 
void InitTables ()
 
void SetEmpty ()
 
void DestroyTables ()
 
void DeleteTables ()
 
void DestroyPointers ()
 
void Destroy ()
 
void ResetLazyData ()
 
ElementReadElementWithoutAttr (std::istream &)
 
ElementReadElement (std::istream &)
 
void ReadMFEMMesh (std::istream &input, int version, int &curved)
 
void ReadLineMesh (std::istream &input)
 
void ReadNetgen2DMesh (std::istream &input, int &curved)
 
void ReadNetgen3DMesh (std::istream &input)
 
void ReadTrueGridMesh (std::istream &input)
 
void CreateVTKMesh (const Vector &points, const Array< int > &cell_data, const Array< int > &cell_offsets, const Array< int > &cell_types, const Array< int > &cell_attributes, int &curved, int &read_gf, bool &finalize_topo)
 
void ReadVTKMesh (std::istream &input, int &curved, int &read_gf, bool &finalize_topo)
 
void ReadXML_VTKMesh (std::istream &input, int &curved, int &read_gf, bool &finalize_topo, const std::string &xml_prefix="")
 
void ReadNURBSMesh (std::istream &input, int &curved, int &read_gf)
 
void ReadInlineMesh (std::istream &input, bool generate_edges=false)
 
void ReadGmshMesh (std::istream &input, int &curved, int &read_gf)
 
void ReadCubit (const char *filename, int &curved, int &read_gf)
 
void SetMeshGen ()
 Determine the mesh generator bitmask meshgen, see MeshGenerator(). More...
 
double GetLength (int i, int j) const
 Return the length of the segment from node i to node j. More...
 
void GetElementJacobian (int i, DenseMatrix &J)
 
void MarkForRefinement ()
 
void MarkTriMeshForRefinement ()
 
void GetEdgeOrdering (DSTable &v_to_v, Array< int > &order)
 
virtual void MarkTetMeshForRefinement (DSTable &v_to_v)
 
void PrepareNodeReorder (DSTable **old_v_to_v, Table **old_elem_vert)
 
void DoNodeReorder (DSTable *old_v_to_v, Table *old_elem_vert)
 
STable3DGetFacesTable ()
 
STable3DGetElementToFaceTable (int ret_ftbl=0)
 
void RedRefinement (int i, const DSTable &v_to_v, int *edge1, int *edge2, int *middle)
 
void GreenRefinement (int i, const DSTable &v_to_v, int *edge1, int *edge2, int *middle)
 
void Bisection (int i, const DSTable &, int *, int *, int *)
 Bisect a triangle: element with index i is bisected. More...
 
void Bisection (int i, HashTable< Hashed2 > &)
 Bisect a tetrahedron: element with index i is bisected. More...
 
void BdrBisection (int i, const HashTable< Hashed2 > &)
 Bisect a boundary triangle: boundary element with index i is bisected. More...
 
void UniformRefinement (int i, const DSTable &, int *, int *, int *)
 
void AverageVertices (const int *indexes, int n, int result)
 Averages the vertices with given indexes and saves the result in vertices[result]. More...
 
void InitRefinementTransforms ()
 
int FindCoarseElement (int i)
 
void UpdateNodes ()
 Update the nodes of a curved mesh after refinement. More...
 
void SetVerticesFromNodes (const GridFunction *nodes)
 Helper to set vertex coordinates given a high-order curvature function. More...
 
void UniformRefinement2D_base (bool update_nodes=true)
 
virtual void UniformRefinement2D ()
 Refine a mixed 2D mesh uniformly. More...
 
void UniformRefinement3D_base (Array< int > *f2qf=NULL, DSTable *v_to_v_p=NULL, bool update_nodes=true)
 
virtual void UniformRefinement3D ()
 Refine a mixed 3D mesh uniformly. More...
 
virtual void NURBSUniformRefinement ()
 Refine NURBS mesh. More...
 
virtual void LocalRefinement (const Array< int > &marked_el, int type=3)
 This function is not public anymore. Use GeneralRefinement instead. More...
 
virtual void NonconformingRefinement (const Array< Refinement > &refinements, int nc_limit=0)
 This function is not public anymore. Use GeneralRefinement instead. More...
 
virtual bool NonconformingDerefinement (Array< double > &elem_error, double threshold, int nc_limit=0, int op=1)
 NC version of GeneralDerefinement. More...
 
double AggregateError (const Array< double > &elem_error, const int *fine, int nfine, int op)
 Derefinement helper. More...
 
void LoadPatchTopo (std::istream &input, Array< int > &edge_to_knot)
 Read NURBS patch/macro-element mesh. More...
 
void UpdateNURBS ()
 
void PrintTopo (std::ostream &out, const Array< int > &e_to_k) const
 
void GetLocalPtToSegTransformation (IsoparametricTransformation &, int)
 Used in GetFaceElementTransformations (...) More...
 
void GetLocalSegToTriTransformation (IsoparametricTransformation &loc, int i)
 
void GetLocalSegToQuadTransformation (IsoparametricTransformation &loc, int i)
 
void GetLocalTriToTetTransformation (IsoparametricTransformation &loc, int i)
 Used in GetFaceElementTransformations (...) More...
 
void GetLocalTriToWdgTransformation (IsoparametricTransformation &loc, int i)
 Used in GetFaceElementTransformations (...) More...
 
void GetLocalTriToPyrTransformation (IsoparametricTransformation &loc, int i)
 Used in GetFaceElementTransformations (...) More...
 
void GetLocalQuadToHexTransformation (IsoparametricTransformation &loc, int i)
 Used in GetFaceElementTransformations (...) More...
 
void GetLocalQuadToWdgTransformation (IsoparametricTransformation &loc, int i)
 Used in GetFaceElementTransformations (...) More...
 
void GetLocalQuadToPyrTransformation (IsoparametricTransformation &loc, int i)
 Used in GetFaceElementTransformations (...) More...
 
void ApplyLocalSlaveTransformation (FaceElementTransformations &FT, const FaceInfo &fi, bool is_ghost)
 
bool IsSlaveFace (const FaceInfo &fi) const
 
int GetElementToEdgeTable (Table &, Array< int > &)
 
void AddPointFaceElement (int lf, int gf, int el)
 Used in GenerateFaces() More...
 
void AddSegmentFaceElement (int lf, int gf, int el, int v0, int v1)
 
void AddTriangleFaceElement (int lf, int gf, int el, int v0, int v1, int v2)
 
void AddQuadFaceElement (int lf, int gf, int el, int v0, int v1, int v2, int v3)
 
bool FaceIsTrueInterior (int FaceNo) const
 
void FreeElement (Element *E)
 
void GenerateFaces ()
 
void GenerateNCFaceInfo ()
 
void InitMesh (int Dim_, int spaceDim_, int NVert, int NElem, int NBdrElem)
 Begin construction of a mesh. More...
 
void FinalizeCheck ()
 
void Loader (std::istream &input, int generate_edges=0, std::string parse_tag="")
 
void Printer (std::ostream &out=mfem::out, std::string section_delimiter="") const
 
void Make3D (int nx, int ny, int nz, Element::Type type, double sx, double sy, double sz, bool sfc_ordering)
 
void Make2D (int nx, int ny, Element::Type type, double sx, double sy, bool generate_edges, bool sfc_ordering)
 
void Make1D (int n, double sx=1.0)
 Creates a 1D mesh for the interval [0,sx] divided into n equal intervals. More...
 
void MakeRefined_ (Mesh &orig_mesh, const Array< int > ref_factors, int ref_type)
 Internal function used in Mesh::MakeRefined. More...
 
void InitFromNCMesh (const NCMesh &ncmesh)
 Initialize vertices/elements/boundary/tables from a nonconforming mesh. More...
 
 Mesh (const NCMesh &ncmesh)
 Create from a nonconforming mesh. More...
 
void GetElementData (const Array< Element *> &elem_array, int geom, Array< int > &elem_vtx, Array< int > &attr) const
 
double GetElementSize (ElementTransformation *T, int type=0)
 
void MakeSimplicial_ (const Mesh &orig_mesh, int *vglobal)
 

Static Protected Member Functions

static void PrintElementWithoutAttr (const Element *, std::ostream &)
 
static void PrintElement (const Element *, std::ostream &)
 
static int GetTriOrientation (const int *base, const int *test)
 Returns the orientation of "test" relative to "base". More...
 
static int GetQuadOrientation (const int *base, const int *test)
 Returns the orientation of "test" relative to "base". More...
 
static int GetTetOrientation (const int *base, const int *test)
 Returns the orientation of "test" relative to "base". More...
 
static void GetElementArrayEdgeTable (const Array< Element *> &elem_array, const DSTable &v_to_v, Table &el_to_edge)
 

Protected Attributes

int Dim
 
int spaceDim
 
int NumOfVertices
 
int NumOfElements
 
int NumOfBdrElements
 
int NumOfEdges
 
int NumOfFaces
 
int nbInteriorFaces
 
int nbBoundaryFaces
 
int meshgen
 
int mesh_geoms
 
long sequence
 
Array< Element * > elements
 
Array< Vertexvertices
 
Array< Element * > boundary
 
Array< Element * > faces
 
Array< FaceInfofaces_info
 
Array< NCFaceInfonc_faces_info
 
Tableel_to_edge
 
Tableel_to_face
 
Tableel_to_el
 
Array< int > be_to_edge
 
Tablebel_to_edge
 
Array< int > be_to_face
 
Tableface_edge
 
Tableedge_vertex
 
IsoparametricTransformation Transformation
 
IsoparametricTransformation Transformation2
 
IsoparametricTransformation BdrTransformation
 
IsoparametricTransformation FaceTransformation
 
IsoparametricTransformation EdgeTransformation
 
FaceElementTransformations FaceElemTr
 
CoarseFineTransformations CoarseFineTr
 
GridFunctionNodes
 
int own_nodes
 
MemAlloc< Tetrahedron, 1024 > TetMemory
 
Array< Triple< int, int, int > > tmp_vertex_parents
 
Operation last_operation
 

Static Protected Attributes

static const int vtk_quadratic_tet [10]
 
static const int vtk_quadratic_pyramid [13]
 
static const int vtk_quadratic_wedge [18]
 
static const int vtk_quadratic_hex [27]
 

Friends

class ParMesh
 
class ParNCMesh
 
class NCMesh
 
class NURBSExtension
 
class adios2stream
 
class Tetrahedron
 

Detailed Description

Definition at line 52 of file mesh.hpp.

Member Typedef Documentation

◆ hex_t

Definition at line 261 of file mesh.hpp.

◆ pri_t

Definition at line 262 of file mesh.hpp.

◆ pyr_t

Definition at line 263 of file mesh.hpp.

◆ quad_t

Definition at line 259 of file mesh.hpp.

◆ seg_t

Definition at line 257 of file mesh.hpp.

◆ tet_t

Definition at line 260 of file mesh.hpp.

◆ tri_t

Definition at line 258 of file mesh.hpp.

Member Enumeration Documentation

◆ ElementConformity

This enumerated type describes the topological relation of an element to a face:

  • Coincident meaning that the element's face is topologically equal to the mesh face.
  • Superset meaning that the element's face is topologically coarser than the mesh face, i.e., the element's face contains the mesh face.
  • Subset meaning that the element's face is topologically finer than the mesh face, i.e., the element's face is contained in the mesh face. Superset and Subset are only relevant for nonconforming faces. Master nonconforming faces have a conforming element on one side, and a fine element on the other side. Slave nonconforming faces have a conforming element on one side, and a coarse element on the other side.
Enumerator
Coincident 
Superset 
Subset 
NA 

Definition at line 1317 of file mesh.hpp.

◆ ElementLocation

This enumerated type describes the location of the two elements sharing a face, Local meaning that the element is local to the MPI rank, FaceNbr meaning that the element is distributed on a different MPI rank, this typically means that methods with FaceNbr should be used to access the relevant information, e.g., ParFiniteElementSpace::GetFaceNbrElementVDofs.

Enumerator
Local 
FaceNbr 
NA 

Definition at line 1302 of file mesh.hpp.

◆ FaceInfoTag

This enumerated type describes the corresponding FaceInfo internal representation (encoded cases), c.f. FaceInfo's documentation: Classification of a local (non-ghost) face based on its FaceInfo:

  • Elem2No >= 0 –> local interior face; can be either:
    • NCFace == -1 –> LocalConforming,
    • NCFace >= 0 –> LocalSlaveNonconforming,
  • Elem2No < 0 –> local "boundary" face; can be one of:
    • NCFace == -1 –> conforming face; can be either:
      • Elem2Inf < 0 –> Boundary,
      • Elem2Inf >= 0 –> SharedConforming,
    • NCFace >= 0 –> nonconforming face; can be one of:
      • Elem2Inf < 0 –> MasterNonconforming (shared or not shared),
      • Elem2Inf >= 0 –> SharedSlaveNonconforming. Classification of a ghost (non-local) face based on its FaceInfo:
  • Elem1No == -1 –> GhostMaster (includes other unused ghost faces),
  • Elem1No >= 0 –> GhostSlave.
Enumerator
Boundary 
LocalConforming 
LocalSlaveNonconforming 
SharedConforming 
SharedSlaveNonconforming 
MasterNonconforming 
GhostSlave 
GhostMaster 

Definition at line 1336 of file mesh.hpp.

◆ FaceTopology

This enumerated type describes the three main face topologies:

  • Boundary, for faces on the boundary of the computational domain,
  • Conforming, for conforming faces interior to the computational domain,
  • Nonconforming, for nonconforming faces interior to the computational domain.
Enumerator
Boundary 
Conforming 
Nonconforming 
NA 

Definition at line 1290 of file mesh.hpp.

◆ Operation

Enumerator
NONE 
REFINE 
DEREFINE 
REBALANCE 

Definition at line 265 of file mesh.hpp.

Constructor & Destructor Documentation

◆ Mesh() [1/13]

mfem::Mesh::Mesh ( const NCMesh ncmesh)
explicitprotected

Create from a nonconforming mesh.

Definition at line 9263 of file mesh.cpp.

◆ Mesh() [2/13]

mfem::Mesh::Mesh ( )
inline

Definition at line 558 of file mesh.hpp.

◆ Mesh() [3/13]

mfem::Mesh::Mesh ( const Mesh mesh,
bool  copy_nodes = true 
)
explicit

Copy constructor. Performs a deep copy of (almost) all data, so that the source mesh can be modified (e.g. deleted, refined) without affecting the new mesh. If 'copy_nodes' is false, use a shallow (pointer) copy for the nodes, if present.

Definition at line 3561 of file mesh.cpp.

◆ Mesh() [4/13]

mfem::Mesh::Mesh ( Mesh &&  mesh)

Move constructor, useful for using a Mesh as a function return value.

Definition at line 3684 of file mesh.cpp.

◆ Mesh() [5/13]

mfem::Mesh::Mesh ( double *  vertices,
int  num_vertices,
int *  element_indices,
Geometry::Type  element_type,
int *  element_attributes,
int  num_elements,
int *  boundary_indices,
Geometry::Type  boundary_type,
int *  boundary_attributes,
int  num_boundary_elements,
int  dimension,
int  space_dimension = -1 
)

Construct a Mesh from the given primary data.

The array vertices is used as external data, i.e. the Mesh does not copy the data and will not delete the pointer.

The data from the other arrays is copied into the internal Mesh data structures.

This method calls the method FinalizeTopology(). The method Finalize() may be called after this constructor and after optionally setting the Mesh nodes.

Definition at line 3799 of file mesh.cpp.

◆ Mesh() [6/13]

mfem::Mesh::Mesh ( int  Dim_,
int  NVert,
int  NElem,
int  NBdrElem = 0,
int  spaceDim_ = -1 
)
inline

Init constructor: begin the construction of a Mesh object.

Definition at line 692 of file mesh.hpp.

◆ Mesh() [7/13]

MFEM_DEPRECATED mfem::Mesh::Mesh ( int  nx,
int  ny,
int  nz,
Element::Type  type,
bool  generate_edges = false,
double  sx = 1.0,
double  sy = 1.0,
double  sz = 1.0,
bool  sfc_ordering = true 
)
inline

Deprecated: see MakeCartesian3D.

Definition at line 841 of file mesh.hpp.

◆ Mesh() [8/13]

MFEM_DEPRECATED mfem::Mesh::Mesh ( int  nx,
int  ny,
Element::Type  type,
bool  generate_edges = false,
double  sx = 1.0,
double  sy = 1.0,
bool  sfc_ordering = true 
)
inline

Deprecated: see MakeCartesian2D.

Definition at line 851 of file mesh.hpp.

◆ Mesh() [9/13]

MFEM_DEPRECATED mfem::Mesh::Mesh ( int  n,
double  sx = 1.0 
)
inlineexplicit

Deprecated: see MakeCartesian1D.

Definition at line 860 of file mesh.hpp.

◆ Mesh() [10/13]

mfem::Mesh::Mesh ( const char *  filename,
int  generate_edges = 0,
int  refine = 1,
bool  fix_orientation = true 
)
explicit

Creates mesh by reading a file in MFEM, Netgen, or VTK format. If generate_edges = 0 (default) edges are not generated, if 1 edges are generated. See also Mesh::LoadFromFile.

Definition at line 3750 of file mesh.cpp.

◆ Mesh() [11/13]

mfem::Mesh::Mesh ( std::istream &  input,
int  generate_edges = 0,
int  refine = 1,
bool  fix_orientation = true 
)
explicit

Creates mesh by reading data stream in MFEM, Netgen, or VTK format. If generate_edges = 0 (default) edges are not generated, if 1 edges are generated.

Definition at line 3768 of file mesh.cpp.

◆ Mesh() [12/13]

mfem::Mesh::Mesh ( Mesh mesh_array[],
int  num_pieces 
)

Create a disjoint mesh from the given mesh array.

Definition at line 4184 of file mesh.cpp.

◆ Mesh() [13/13]

mfem::Mesh::Mesh ( Mesh orig_mesh,
int  ref_factor,
int  ref_type 
)

Deprecated: see MakeRefined.

Definition at line 4326 of file mesh.cpp.

◆ ~Mesh()

virtual mfem::Mesh::~Mesh ( )
inlinevirtual

Destroys Mesh.

Definition at line 1822 of file mesh.hpp.

Member Function Documentation

◆ AddBdrElement()

int mfem::Mesh::AddBdrElement ( Element elem)

Definition at line 1816 of file mesh.cpp.

◆ AddBdrPoint()

int mfem::Mesh::AddBdrPoint ( int  v,
int  attr = 1 
)

Definition at line 1880 of file mesh.cpp.

◆ AddBdrQuad() [1/2]

int mfem::Mesh::AddBdrQuad ( int  v1,
int  v2,
int  v3,
int  v4,
int  attr = 1 
)

Definition at line 1851 of file mesh.cpp.

◆ AddBdrQuad() [2/2]

int mfem::Mesh::AddBdrQuad ( const int *  vi,
int  attr = 1 
)

Definition at line 1858 of file mesh.cpp.

◆ AddBdrQuadAsTriangles()

void mfem::Mesh::AddBdrQuadAsTriangles ( const int *  vi,
int  attr = 1 
)

Definition at line 1865 of file mesh.cpp.

◆ AddBdrSegment() [1/2]

int mfem::Mesh::AddBdrSegment ( int  v1,
int  v2,
int  attr = 1 
)

Definition at line 1823 of file mesh.cpp.

◆ AddBdrSegment() [2/2]

int mfem::Mesh::AddBdrSegment ( const int *  vi,
int  attr = 1 
)

Definition at line 1830 of file mesh.cpp.

◆ AddBdrTriangle() [1/2]

int mfem::Mesh::AddBdrTriangle ( int  v1,
int  v2,
int  v3,
int  attr = 1 
)

Definition at line 1837 of file mesh.cpp.

◆ AddBdrTriangle() [2/2]

int mfem::Mesh::AddBdrTriangle ( const int *  vi,
int  attr = 1 
)

Definition at line 1844 of file mesh.cpp.

◆ AddElement()

int mfem::Mesh::AddElement ( Element elem)

The parameter elem should be allocated using the NewElement() method.

Definition at line 1809 of file mesh.cpp.

◆ AddHex() [1/2]

int mfem::Mesh::AddHex ( int  v1,
int  v2,
int  v3,
int  v4,
int  v5,
int  v6,
int  v7,
int  v8,
int  attr = 1 
)

Definition at line 1737 of file mesh.cpp.

◆ AddHex() [2/2]

int mfem::Mesh::AddHex ( const int *  vi,
int  attr = 1 
)

Definition at line 1746 of file mesh.cpp.

◆ AddHexAsPyramids()

void mfem::Mesh::AddHexAsPyramids ( const int *  vi,
int  attr = 1 
)

Definition at line 1790 of file mesh.cpp.

◆ AddHexAsTets()

void mfem::Mesh::AddHexAsTets ( const int *  vi,
int  attr = 1 
)

Definition at line 1753 of file mesh.cpp.

◆ AddHexAsWedges()

void mfem::Mesh::AddHexAsWedges ( const int *  vi,
int  attr = 1 
)

Definition at line 1772 of file mesh.cpp.

◆ AddPointFaceElement()

void mfem::Mesh::AddPointFaceElement ( int  lf,
int  gf,
int  el 
)
protected

Used in GenerateFaces()

Definition at line 6449 of file mesh.cpp.

◆ AddPyramid() [1/2]

int mfem::Mesh::AddPyramid ( int  v1,
int  v2,
int  v3,
int  v4,
int  v5,
int  attr = 1 
)

Definition at line 1723 of file mesh.cpp.

◆ AddPyramid() [2/2]

int mfem::Mesh::AddPyramid ( const int *  vi,
int  attr = 1 
)

Definition at line 1730 of file mesh.cpp.

◆ AddQuad() [1/2]

int mfem::Mesh::AddQuad ( int  v1,
int  v2,
int  v3,
int  v4,
int  attr = 1 
)

Definition at line 1674 of file mesh.cpp.

◆ AddQuad() [2/2]

int mfem::Mesh::AddQuad ( const int *  vi,
int  attr = 1 
)

Definition at line 1681 of file mesh.cpp.

◆ AddQuadFaceElement()

void mfem::Mesh::AddQuadFaceElement ( int  lf,
int  gf,
int  el,
int  v0,
int  v1,
int  v2,
int  v3 
)
protected

Definition at line 6546 of file mesh.cpp.

◆ AddSegment() [1/2]

int mfem::Mesh::AddSegment ( int  v1,
int  v2,
int  attr = 1 
)

Definition at line 1646 of file mesh.cpp.

◆ AddSegment() [2/2]

int mfem::Mesh::AddSegment ( const int *  vi,
int  attr = 1 
)

Definition at line 1653 of file mesh.cpp.

◆ AddSegmentFaceElement()

void mfem::Mesh::AddSegmentFaceElement ( int  lf,
int  gf,
int  el,
int  v0,
int  v1 
)
protected

Definition at line 6481 of file mesh.cpp.

◆ AddTet() [1/2]

int mfem::Mesh::AddTet ( int  v1,
int  v2,
int  v3,
int  v4,
int  attr = 1 
)

Definition at line 1688 of file mesh.cpp.

◆ AddTet() [2/2]

int mfem::Mesh::AddTet ( const int *  vi,
int  attr = 1 
)

Definition at line 1694 of file mesh.cpp.

◆ AddTri()

int mfem::Mesh::AddTri ( const int *  vi,
int  attr = 1 
)
inline

Definition at line 716 of file mesh.hpp.

◆ AddTriangle() [1/2]

int mfem::Mesh::AddTriangle ( int  v1,
int  v2,
int  v3,
int  attr = 1 
)

Definition at line 1660 of file mesh.cpp.

◆ AddTriangle() [2/2]

int mfem::Mesh::AddTriangle ( const int *  vi,
int  attr = 1 
)

Definition at line 1667 of file mesh.cpp.

◆ AddTriangleFaceElement()

void mfem::Mesh::AddTriangleFaceElement ( int  lf,
int  gf,
int  el,
int  v0,
int  v1,
int  v2 
)
protected

Definition at line 6518 of file mesh.cpp.

◆ AddVertex() [1/2]

int mfem::Mesh::AddVertex ( double  x,
double  y = 0.0,
double  z = 0.0 
)

Definition at line 1613 of file mesh.cpp.

◆ AddVertex() [2/2]

int mfem::Mesh::AddVertex ( const double *  coords)

Definition at line 1623 of file mesh.cpp.

◆ AddVertexParents()

void mfem::Mesh::AddVertexParents ( int  i,
int  p1,
int  p2 
)

Mark vertex i as nonconforming, with parent vertices p1 and p2.

Definition at line 1630 of file mesh.cpp.

◆ AddWedge() [1/2]

int mfem::Mesh::AddWedge ( int  v1,
int  v2,
int  v3,
int  v4,
int  v5,
int  v6,
int  attr = 1 
)

Definition at line 1709 of file mesh.cpp.

◆ AddWedge() [2/2]

int mfem::Mesh::AddWedge ( const int *  vi,
int  attr = 1 
)

Definition at line 1716 of file mesh.cpp.

◆ AggregateError()

double mfem::Mesh::AggregateError ( const Array< double > &  elem_error,
const int *  fine,
int  nfine,
int  op 
)
protected

Derefinement helper.

Definition at line 9131 of file mesh.cpp.

◆ ApplyLocalSlaveTransformation()

void mfem::Mesh::ApplyLocalSlaveTransformation ( FaceElementTransformations FT,
const FaceInfo fi,
bool  is_ghost 
)
protected

Used in GetFaceElementTransformations to account for the fact that a slave face occupies only a portion of its master face.

Definition at line 1056 of file mesh.cpp.

◆ AverageVertices()

void mfem::Mesh::AverageVertices ( const int *  indexes,
int  n,
int  result 
)
protected

Averages the vertices with given indexes and saves the result in vertices[result].

Definition at line 7956 of file mesh.cpp.

◆ BdrBisection()

void mfem::Mesh::BdrBisection ( int  i,
const HashTable< Hashed2 > &  v_to_v 
)
protected

Bisect a boundary triangle: boundary element with index i is bisected.

Definition at line 9765 of file mesh.cpp.

◆ Bisection() [1/2]

void mfem::Mesh::Bisection ( int  i,
const DSTable v_to_v,
int *  edge1,
int *  edge2,
int *  middle 
)
protected

Bisect a triangle: element with index i is bisected.

Definition at line 9557 of file mesh.cpp.

◆ Bisection() [2/2]

void mfem::Mesh::Bisection ( int  i,
HashTable< Hashed2 > &  v_to_v 
)
protected

Bisect a tetrahedron: element with index i is bisected.

Definition at line 9646 of file mesh.cpp.

◆ CartesianPartitioning()

int * mfem::Mesh::CartesianPartitioning ( int  nxyz[])

Definition at line 6989 of file mesh.cpp.

◆ ChangeVertexDataOwnership()

void mfem::Mesh::ChangeVertexDataOwnership ( double *  vertices,
int  len_vertices,
bool  zerocopy = false 
)

Set the internal Vertex array to point to the given vertices array without assuming ownership of the pointer.

If zerocopy is true, the vertices must be given as an array of 3 doubles per vertex. If zerocopy is false then the current Vertex data is first copied to the vertices array.

Definition at line 3775 of file mesh.cpp.

◆ CheckBdrElementOrientation()

int mfem::Mesh::CheckBdrElementOrientation ( bool  fix_it = true)

Check the orientation of the boundary elements.

Returns
The number of boundary elements with wrong orientation.

Definition at line 5797 of file mesh.cpp.

◆ CheckDisplacements()

void mfem::Mesh::CheckDisplacements ( const Vector displacements,
double &  tmax 
)

Definition at line 7737 of file mesh.cpp.

◆ CheckElementOrientation()

int mfem::Mesh::CheckElementOrientation ( bool  fix_it = true)

Check (and optionally attempt to fix) the orientation of the elements.

Parameters
[in]fix_itIf true, attempt to fix the orientations of some elements: triangles, quads, and tets.
Returns
The number of elements with wrong orientation.
Note
For meshes with nodes (e.g. high-order or periodic meshes), fixing the element orientations may require additional permutation of the nodal GridFunction of the mesh which is not performed by this method. Instead, the method Finalize() should be used with the parameter fix_orientation set to true.
This method performs a simple check if an element is inverted, e.g. for most elements types, it checks if the Jacobian of the mapping from the reference element is non-negative at the center of the element.

Definition at line 5420 of file mesh.cpp.

◆ CheckPartitioning()

void mfem::Mesh::CheckPartitioning ( int *  partitioning_)

Definition at line 7419 of file mesh.cpp.

◆ Clear()

void mfem::Mesh::Clear ( )
inline

Clear the contents of the Mesh.

Definition at line 899 of file mesh.hpp.

◆ Conforming()

bool mfem::Mesh::Conforming ( ) const
inline

Definition at line 1650 of file mesh.hpp.

◆ CreatePeriodicVertexMapping()

std::vector< int > mfem::Mesh::CreatePeriodicVertexMapping ( const std::vector< Vector > &  translations,
double  tol = 1e-8 
) const

Creates a mapping v2v from the vertex indices of the mesh such that coincident vertices under the given translations are identified.

Each Vector in translations should be of size sdim (the spatial dimension of the mesh). Two vertices are considered coincident if the translated coordinates of one vertex are within the given tolerance (tol, relative to the mesh diameter) of the coordinates of the other vertex.

Warning
This algorithm does not scale well with the number of boundary vertices in the mesh, and may run slowly on very large meshes.

Definition at line 4925 of file mesh.cpp.

◆ CreateVTKMesh()

void mfem::Mesh::CreateVTKMesh ( const Vector points,
const Array< int > &  cell_data,
const Array< int > &  cell_offsets,
const Array< int > &  cell_types,
const Array< int > &  cell_attributes,
int &  curved,
int &  read_gf,
bool &  finalize_topo 
)
protected

Definition at line 372 of file mesh_readers.cpp.

◆ DebugDump()

void mfem::Mesh::DebugDump ( std::ostream &  out) const

Output an NCMesh-compatible debug dump.

Definition at line 12552 of file mesh.cpp.

◆ DegreeElevate()

void mfem::Mesh::DegreeElevate ( int  rel_degree,
int  degree = 16 
)

Definition at line 5107 of file mesh.cpp.

◆ DeleteGeometricFactors()

void mfem::Mesh::DeleteGeometricFactors ( )

Destroy all GeometricFactors stored by the Mesh.

This method can be used to force recomputation of the GeometricFactors, for example, after the mesh nodes are modified externally.

Definition at line 882 of file mesh.cpp.

◆ DeleteTables()

void mfem::Mesh::DeleteTables ( )
inlineprotected

Definition at line 290 of file mesh.hpp.

◆ DerefineByError() [1/2]

bool mfem::Mesh::DerefineByError ( Array< double > &  elem_error,
double  threshold,
int  nc_limit = 0,
int  op = 1 
)

Derefine the mesh based on an error measure associated with each element. A derefinement is performed if the sum of errors of its fine elements is smaller than 'threshold'. If 'nc_limit' > 0, derefinements that would increase the maximum level of hanging nodes of the mesh are skipped. Returns true if the mesh changed, false otherwise.

Definition at line 9198 of file mesh.cpp.

◆ DerefineByError() [2/2]

bool mfem::Mesh::DerefineByError ( const Vector elem_error,
double  threshold,
int  nc_limit = 0,
int  op = 1 
)

Same as DerefineByError for an error vector.

Definition at line 9215 of file mesh.cpp.

◆ Destroy()

void mfem::Mesh::Destroy ( )
protected

Definition at line 1520 of file mesh.cpp.

◆ DestroyPointers()

void mfem::Mesh::DestroyPointers ( )
protected

Definition at line 1494 of file mesh.cpp.

◆ DestroyTables()

void mfem::Mesh::DestroyTables ( )
protected

Definition at line 1478 of file mesh.cpp.

◆ Dimension()

int mfem::Mesh::Dimension ( ) const
inline

Definition at line 1006 of file mesh.hpp.

◆ DoNodeReorder()

void mfem::Mesh::DoNodeReorder ( DSTable old_v_to_v,
Table old_elem_vert 
)
protected

Definition at line 2547 of file mesh.cpp.

◆ ElementToEdgeTable()

const Table & mfem::Mesh::ElementToEdgeTable ( ) const

Definition at line 6440 of file mesh.cpp.

◆ ElementToElementTable()

const Table & mfem::Mesh::ElementToElementTable ( )

Definition at line 6395 of file mesh.cpp.

◆ ElementToFaceTable()

const Table & mfem::Mesh::ElementToFaceTable ( ) const

Definition at line 6431 of file mesh.cpp.

◆ EnsureNCMesh()

void mfem::Mesh::EnsureNCMesh ( bool  simplices_nonconforming = false)

Make sure that a quad/hex mesh is considered to be nonconforming (i.e., has an associated NCMesh object). Simplex meshes can be both conforming (default) or nonconforming.

Definition at line 9459 of file mesh.cpp.

◆ EnsureNodes()

void mfem::Mesh::EnsureNodes ( )

Make sure that the mesh has valid nodes, i.e. its geometry is described by a vector finite element grid function (even if it is a low-order mesh with straight edges).

Definition at line 5291 of file mesh.cpp.

◆ EulerNumber()

int mfem::Mesh::EulerNumber ( ) const
inline

Equals 1 + num_holes - num_loops.

Definition at line 1000 of file mesh.hpp.

◆ EulerNumber2D()

int mfem::Mesh::EulerNumber2D ( ) const
inline

Equals 1 - num_holes.

Definition at line 1003 of file mesh.hpp.

◆ FaceIsInterior()

bool mfem::Mesh::FaceIsInterior ( int  FaceNo) const
inline

Return true if the given face is interior.

See also
FaceIsTrueInterior().

Definition at line 1280 of file mesh.hpp.

◆ FaceIsTrueInterior()

bool mfem::Mesh::FaceIsTrueInterior ( int  FaceNo) const
inlineprotected

For a serial Mesh, return true if the face is interior. For a parallel ParMesh return true if the face is interior or shared. In parallel, this method only works if the face neighbor data is exchanged.

Definition at line 492 of file mesh.hpp.

◆ Finalize()

void mfem::Mesh::Finalize ( bool  refine = false,
bool  fix_orientation = false 
)
virtual

Finalize the construction of a general Mesh.

This method will:

  • check and optionally fix the orientation of regular elements
  • check and fix the orientation of boundary elements
  • assume that vertices are defined, if Nodes == NULL
  • assume that Nodes are defined, if Nodes != NULL.
    Parameters
    [in]refineIf true, prepare the Mesh for conforming refinement of triangular or tetrahedral meshes.
    [in]fix_orientationIf true, fix the orientation of inverted mesh elements by permuting their vertices.
    Before calling this method, call FinalizeTopology() and ensure that the Mesh vertices or nodes are set.

Reimplemented in mfem::ParMesh.

Definition at line 2983 of file mesh.cpp.

◆ FinalizeCheck()

void mfem::Mesh::FinalizeCheck ( )
protected

Definition at line 1925 of file mesh.cpp.

◆ FinalizeHexMesh()

void mfem::Mesh::FinalizeHexMesh ( int  generate_edges = 0,
int  refine = 0,
bool  fix_orientation = true 
)

Finalize the construction of a hexahedral Mesh.

Definition at line 2853 of file mesh.cpp.

◆ FinalizeMesh()

void mfem::Mesh::FinalizeMesh ( int  refine = 0,
bool  fix_orientation = true 
)

Finalize the construction of any type of Mesh.

This method calls FinalizeTopology() and Finalize().

Definition at line 2883 of file mesh.cpp.

◆ FinalizeQuadMesh()

void mfem::Mesh::FinalizeQuadMesh ( int  generate_edges = 0,
int  refine = 0,
bool  fix_orientation = true 
)

Finalize the construction of a quadrilateral Mesh.

Definition at line 1968 of file mesh.cpp.

◆ FinalizeTetMesh()

void mfem::Mesh::FinalizeTetMesh ( int  generate_edges = 0,
int  refine = 0,
bool  fix_orientation = true 
)

Finalize the construction of a tetrahedral Mesh.

Definition at line 2777 of file mesh.cpp.

◆ FinalizeTopology()

void mfem::Mesh::FinalizeTopology ( bool  generate_bdr = true)

Finalize the construction of the secondary topology (connectivity) data of a Mesh.

This method does not require any actual coordinate data (either vertex coordinates for linear meshes or node coordinates for meshes with nodes) to be available. However, the data generated by this method is generally required by the FiniteElementSpace class.

After calling this method, setting the Mesh vertices or nodes, it may be appropriate to call the method Finalize().

Definition at line 2890 of file mesh.cpp.

◆ FinalizeTriMesh()

void mfem::Mesh::FinalizeTriMesh ( int  generate_edges = 0,
int  refine = 0,
bool  fix_orientation = true 
)

Finalize the construction of a triangular Mesh.

Definition at line 1939 of file mesh.cpp.

◆ FinalizeWedgeMesh()

void mfem::Mesh::FinalizeWedgeMesh ( int  generate_edges = 0,
int  refine = 0,
bool  fix_orientation = true 
)

Finalize the construction of a wedge Mesh.

Definition at line 2818 of file mesh.cpp.

◆ FindCoarseElement()

int mfem::Mesh::FindCoarseElement ( int  i)
protected

Definition at line 9904 of file mesh.cpp.

◆ FindPoints()

int mfem::Mesh::FindPoints ( DenseMatrix point_mat,
Array< int > &  elem_ids,
Array< IntegrationPoint > &  ips,
bool  warn = true,
InverseElementTransformation inv_trans = NULL 
)
virtual

Find the ids of the elements that contain the given points, and their corresponding reference coordinates.

The DenseMatrix point_mat describes the given points - one point for each column; it should have SpaceDimension() rows.

The InverseElementTransformation object, inv_trans, is used to attempt the element transformation inversion. If NULL pointer is given, the method will use a default constructed InverseElementTransformation. Note that the algorithms in the base class InverseElementTransformation can be completely overwritten by deriving custom classes that override the Transform() method.

If no element is found for the i-th point, elem_ids[i] is set to -1.

In the ParMesh implementation, the point_mat is expected to be the same on all ranks. If the i-th point is found by multiple ranks, only one of them will mark that point as found, i.e. set its elem_ids[i] to a non-negative number; the other ranks will set their elem_ids[i] to -2 to indicate that the point was found but assigned to another rank.

Returns
The total number of points that were found.
Note
This method is not 100 percent reliable, i.e. it is not guaranteed to find a point, even if it lies inside a mesh element.

Reimplemented in mfem::ParMesh.

Definition at line 11885 of file mesh.cpp.

◆ FreeElement()

void mfem::Mesh::FreeElement ( Element E)
protected

Definition at line 11860 of file mesh.cpp.

◆ GeneralRefinement() [1/2]

void mfem::Mesh::GeneralRefinement ( const Array< Refinement > &  refinements,
int  nonconforming = -1,
int  nc_limit = 0 
)

Refine selected mesh elements. Refinement type can be specified for each element. The function can do conforming refinement of triangles and tetrahedra and nonconforming refinement (i.e., with hanging-nodes) of triangles, quadrilaterals and hexahedra. If 'nonconforming' = -1, suitable refinement method is selected automatically (namely, conforming refinement for triangles). Use nonconforming = 0/1 to force the method. For nonconforming refinements, nc_limit optionally specifies the maximum level of hanging nodes (unlimited by default).

Definition at line 9391 of file mesh.cpp.

◆ GeneralRefinement() [2/2]

void mfem::Mesh::GeneralRefinement ( const Array< int > &  el_to_refine,
int  nonconforming = -1,
int  nc_limit = 0 
)

Simplified version of GeneralRefinement taking a simple list of elements to refine, without refinement types.

Definition at line 9448 of file mesh.cpp.

◆ GenerateBoundaryElements()

void mfem::Mesh::GenerateBoundaryElements ( )

Definition at line 1887 of file mesh.cpp.

◆ GenerateFaces()

void mfem::Mesh::GenerateFaces ( )
protected

Definition at line 6573 of file mesh.cpp.

◆ GenerateNCFaceInfo()

void mfem::Mesh::GenerateNCFaceInfo ( )
protected

Definition at line 6674 of file mesh.cpp.

◆ GeneratePartitioning()

int * mfem::Mesh::GeneratePartitioning ( int  nparts,
int  part_method = 1 
)

Definition at line 7028 of file mesh.cpp.

◆ GetAttribute()

int mfem::Mesh::GetAttribute ( int  i) const
inline

Return the attribute of element i.

Definition at line 1480 of file mesh.hpp.

◆ GetBdrAttribute()

int mfem::Mesh::GetBdrAttribute ( int  i) const
inline

Return the attribute of boundary element i.

Definition at line 1486 of file mesh.hpp.

◆ GetBdrElement() [1/2]

const Element* mfem::Mesh::GetBdrElement ( int  i) const
inline

Definition at line 1044 of file mesh.hpp.

◆ GetBdrElement() [2/2]

Element* mfem::Mesh::GetBdrElement ( int  i)
inline

Definition at line 1046 of file mesh.hpp.

◆ GetBdrElementAdjacentElement()

void mfem::Mesh::GetBdrElementAdjacentElement ( int  bdr_el,
int &  el,
int &  info 
) const

For the given boundary element, bdr_el, return its adjacent element and its info, i.e. 64*local_bdr_index+bdr_orientation.

The returned bdr_orientation is that of the boundary element relative to the respective face element.

See also
GetBdrElementAdjacentElement2()

Definition at line 6206 of file mesh.cpp.

◆ GetBdrElementAdjacentElement2()

void mfem::Mesh::GetBdrElementAdjacentElement2 ( int  bdr_el,
int &  el,
int &  info 
) const

For the given boundary element, bdr_el, return its adjacent element and its info, i.e. 64*local_bdr_index+inverse_bdr_orientation.

The returned inverse_bdr_orientation is the inverse of the orientation of the boundary element relative to the respective face element. In other words this is the orientation of the face element relative to the boundary element.

See also
GetBdrElementAdjacentElement()

Definition at line 6228 of file mesh.cpp.

◆ GetBdrElementBaseGeometry()

Geometry::Type mfem::Mesh::GetBdrElementBaseGeometry ( int  i) const
inline

Definition at line 1072 of file mesh.hpp.

◆ GetBdrElementData()

void mfem::Mesh::GetBdrElementData ( int  geom,
Array< int > &  bdr_elem_vtx,
Array< int > &  bdr_attr 
) const
inline

Definition at line 1025 of file mesh.hpp.

◆ GetBdrElementEdgeIndex()

int mfem::Mesh::GetBdrElementEdgeIndex ( int  i) const

Return the vertex index of boundary element i. (1D) Return the edge index of boundary element i. (2D) Return the face index of boundary element i. (3D)

Definition at line 6194 of file mesh.cpp.

◆ GetBdrElementEdges()

void mfem::Mesh::GetBdrElementEdges ( int  i,
Array< int > &  edges,
Array< int > &  cor 
) const

Return the indices and the orientations of all edges of bdr element i.

Definition at line 5954 of file mesh.cpp.

◆ GetBdrElementFace()

void mfem::Mesh::GetBdrElementFace ( int  i,
int *  f,
int *  o 
) const

Return the index and the orientation of the face of bdr element i. (3D)

Definition at line 6171 of file mesh.cpp.

◆ GetBdrElementGeometry()

Geometry::Type mfem::Mesh::GetBdrElementGeometry ( int  i) const
inline

Definition at line 1060 of file mesh.hpp.

◆ GetBdrElementTransformation() [1/2]

ElementTransformation * mfem::Mesh::GetBdrElementTransformation ( int  i)

Returns the transformation defining the i-th boundary element.

Definition at line 431 of file mesh.cpp.

◆ GetBdrElementTransformation() [2/2]

void mfem::Mesh::GetBdrElementTransformation ( int  i,
IsoparametricTransformation ElTr 
)

Definition at line 437 of file mesh.cpp.

◆ GetBdrElementType()

Element::Type mfem::Mesh::GetBdrElementType ( int  i) const

Returns the type of boundary element i.

Definition at line 6255 of file mesh.cpp.

◆ GetBdrElementVertices()

void mfem::Mesh::GetBdrElementVertices ( int  i,
Array< int > &  v 
) const
inline

Returns the indices of the vertices of boundary element i.

Definition at line 1113 of file mesh.hpp.

◆ GetBdrFace()

int mfem::Mesh::GetBdrFace ( int  BdrElemNo) const

Return the local face index for the given boundary face.

Definition at line 1113 of file mesh.cpp.

◆ GetBdrFaceTransformations()

FaceElementTransformations * mfem::Mesh::GetBdrFaceTransformations ( int  BdrElemNo)

Definition at line 1095 of file mesh.cpp.

◆ GetBdrPointMatrix()

void mfem::Mesh::GetBdrPointMatrix ( int  i,
DenseMatrix pointmat 
) const

Definition at line 6278 of file mesh.cpp.

◆ GetBoundingBox()

void mfem::Mesh::GetBoundingBox ( Vector min,
Vector max,
int  ref = 2 
)

Returns the minimum and maximum corners of the mesh bounding box.

For high-order meshes, the geometry is first refined ref times.

Definition at line 129 of file mesh.cpp.

◆ GetCharacteristics()

void mfem::Mesh::GetCharacteristics ( double &  h_min,
double &  h_max,
double &  kappa_min,
double &  kappa_max,
Vector Vh = NULL,
Vector Vk = NULL 
)

Definition at line 193 of file mesh.cpp.

◆ GetEdgeOrdering()

void mfem::Mesh::GetEdgeOrdering ( DSTable v_to_v,
Array< int > &  order 
)
protected

Definition at line 2433 of file mesh.cpp.

◆ GetEdgeTransformation() [1/2]

void mfem::Mesh::GetEdgeTransformation ( int  i,
IsoparametricTransformation EdTr 
)

Returns the transformation defining the given edge element. The transformation is stored in a user-defined variable.

Definition at line 574 of file mesh.cpp.

◆ GetEdgeTransformation() [2/2]

ElementTransformation * mfem::Mesh::GetEdgeTransformation ( int  EdgeNo)

Returns the transformation defining the given face element.

Definition at line 634 of file mesh.cpp.

◆ GetEdgeVertexTable()

Table * mfem::Mesh::GetEdgeVertexTable ( ) const

Returns the edge-to-vertex Table (3D)

Definition at line 6053 of file mesh.cpp.

◆ GetEdgeVertices()

void mfem::Mesh::GetEdgeVertices ( int  i,
Array< int > &  vert 
) const

Returns the indices of the vertices of edge i.

Definition at line 6016 of file mesh.cpp.

◆ GetElement() [1/2]

const Element* mfem::Mesh::GetElement ( int  i) const
inline

Definition at line 1040 of file mesh.hpp.

◆ GetElement() [2/2]

Element* mfem::Mesh::GetElement ( int  i)
inline

Definition at line 1042 of file mesh.hpp.

◆ GetElementArrayEdgeTable()

void mfem::Mesh::GetElementArrayEdgeTable ( const Array< Element *> &  elem_array,
const DSTable v_to_v,
Table el_to_edge 
)
staticprotected

Definition at line 6309 of file mesh.cpp.

◆ GetElementBaseGeometry()

Geometry::Type mfem::Mesh::GetElementBaseGeometry ( int  i) const
inline

Definition at line 1069 of file mesh.hpp.

◆ GetElementCenter()

void mfem::Mesh::GetElementCenter ( int  i,
Vector center 
)

Definition at line 68 of file mesh.cpp.

◆ GetElementColoring()

void mfem::Mesh::GetElementColoring ( Array< int > &  colors,
int  el0 = 0 
)

Definition at line 10842 of file mesh.cpp.

◆ GetElementData() [1/2]

void mfem::Mesh::GetElementData ( const Array< Element *> &  elem_array,
int  geom,
Array< int > &  elem_vtx,
Array< int > &  attr 
) const
protected

Definition at line 9327 of file mesh.cpp.

◆ GetElementData() [2/2]

void mfem::Mesh::GetElementData ( int  geom,
Array< int > &  elem_vtx,
Array< int > &  attr 
) const
inline

Definition at line 1019 of file mesh.hpp.

◆ GetElementEdges()

void mfem::Mesh::GetElementEdges ( int  i,
Array< int > &  edges,
Array< int > &  cor 
) const

Return the indices and the orientations of all edges of element i.

Definition at line 5932 of file mesh.cpp.

◆ GetElementFaces()

void mfem::Mesh::GetElementFaces ( int  i,
Array< int > &  faces,
Array< int > &  ori 
) const

Return the indices and the orientations of all faces of element i.

Definition at line 6148 of file mesh.cpp.

◆ GetElementGeometry()

Geometry::Type mfem::Mesh::GetElementGeometry ( int  i) const
inline

Definition at line 1055 of file mesh.hpp.

◆ GetElementJacobian()

void mfem::Mesh::GetElementJacobian ( int  i,
DenseMatrix J 
)
protected

Compute the Jacobian of the transformation from the perfect reference element at the center of the element.

Definition at line 60 of file mesh.cpp.

◆ GetElementsArray()

const Element* const* mfem::Mesh::GetElementsArray ( ) const
inline

Definition at line 1037 of file mesh.hpp.

◆ GetElementSize() [1/3]

double mfem::Mesh::GetElementSize ( ElementTransformation T,
int  type = 0 
)
protected

Definition at line 76 of file mesh.cpp.

◆ GetElementSize() [2/3]

double mfem::Mesh::GetElementSize ( int  i,
int  type = 0 
)

Get the size of the i-th element relative to the perfect reference element.

Definition at line 98 of file mesh.cpp.

◆ GetElementSize() [3/3]

double mfem::Mesh::GetElementSize ( int  i,
const Vector dir 
)

Definition at line 103 of file mesh.cpp.

◆ GetElementToEdgeTable()

int mfem::Mesh::GetElementToEdgeTable ( Table e_to_f,
Array< int > &  be_to_f 
)
protected

Return element to edge table and the indices for the boundary edges. The entries in the table are ordered according to the order of the nodes in the elements. For example, if T is the element to edge table T(i, 0) gives the index of edge in element i that connects vertex 0 to vertex 1, etc. Returns the number of the edges.

Definition at line 6356 of file mesh.cpp.

◆ GetElementToFaceTable()

STable3D * mfem::Mesh::GetElementToFaceTable ( int  ret_ftbl = 0)
protected

Definition at line 6798 of file mesh.cpp.

◆ GetElementTransformation() [1/3]

void mfem::Mesh::GetElementTransformation ( int  i,
IsoparametricTransformation ElTr 
)

Builds the transformation defining the i-th element in the user-defined variable.

Definition at line 348 of file mesh.cpp.

◆ GetElementTransformation() [2/3]

ElementTransformation * mfem::Mesh::GetElementTransformation ( int  i)

Returns the transformation defining the i-th element.

Definition at line 424 of file mesh.cpp.

◆ GetElementTransformation() [3/3]

void mfem::Mesh::GetElementTransformation ( int  i,
const Vector nodes,
IsoparametricTransformation ElTr 
)

Return the transformation defining the i-th element assuming the position of the vertices/nodes are given by 'nodes'.

Definition at line 380 of file mesh.cpp.

◆ GetElementType()

Element::Type mfem::Mesh::GetElementType ( int  i) const

Returns the type of element i.

Definition at line 6250 of file mesh.cpp.

◆ GetElementVertices()

void mfem::Mesh::GetElementVertices ( int  i,
Array< int > &  v 
) const
inline

Returns the indices of the vertices of element i.

Definition at line 1109 of file mesh.hpp.

◆ GetElementVolume()

double mfem::Mesh::GetElementVolume ( int  i)

Definition at line 112 of file mesh.cpp.

◆ GetFace()

const Element* mfem::Mesh::GetFace ( int  i) const
inline

Definition at line 1048 of file mesh.hpp.

◆ GetFaceBaseGeometry()

Geometry::Type mfem::Mesh::GetFaceBaseGeometry ( int  i) const
inline

Definition at line 1066 of file mesh.hpp.

◆ GetFaceEdges()

void mfem::Mesh::GetFaceEdges ( int  i,
Array< int > &  edges,
Array< int > &  o 
) const

Return the indices and the orientations of all edges of face i. Works for both 2D (face=edge) and 3D faces.

Definition at line 5986 of file mesh.cpp.

◆ GetFaceEdgeTable()

Table * mfem::Mesh::GetFaceEdgeTable ( ) const

Returns the face-to-edge Table (3D)

Definition at line 6025 of file mesh.cpp.

◆ GetFaceElements()

void mfem::Mesh::GetFaceElements ( int  Face,
int *  Elem1,
int *  Elem2 
) const

Definition at line 1394 of file mesh.cpp.

◆ GetFaceElementTransformations()

FaceElementTransformations * mfem::Mesh::GetFaceElementTransformations ( int  FaceNo,
int  mask = 31 
)
virtual

Returns (a pointer to an object containing) the following data:

1) Elem1No - the index of the first element that contains this face this is the element that has the same outward unit normal vector as the face;

2) Elem2No - the index of the second element that contains this face this element has outward unit normal vector as the face multiplied with -1;

3) Elem1, Elem2 - pointers to the ElementTransformation's of the first and the second element respectively;

4) Face - pointer to the ElementTransformation of the face;

5) Loc1, Loc2 - IntegrationPointTransformation's mapping the face coordinate system to the element coordinate system (both in their reference elements). Used to transform IntegrationPoints from face to element. More formally, let: TL1, TL2 be the transformations represented by Loc1, Loc2, TE1, TE2 - the transformations represented by Elem1, Elem2, TF - the transformation represented by Face, then TF(x) = TE1(TL1(x)) = TE2(TL2(x)) for all x in the reference face.

6) FaceGeom - the base geometry for the face.

The mask specifies which fields in the structure to return: mask & 1 - Elem1, mask & 2 - Elem2 mask & 4 - Loc1, mask & 8 - Loc2, mask & 16 - Face. These mask values are defined in the ConfigMasks enum type as part of the FaceElementTransformations class in fem/eltrans.hpp.

Reimplemented in mfem::ParMesh.

Definition at line 961 of file mesh.cpp.

◆ GetFaceElementType()

Element::Type mfem::Mesh::GetFaceElementType ( int  Face) const

Definition at line 1432 of file mesh.cpp.

◆ GetFaceGeometricFactors()

const FaceGeometricFactors * mfem::Mesh::GetFaceGeometricFactors ( const IntegrationRule ir,
const int  flags,
FaceType  type,
MemoryType  d_mt = MemoryType::DEFAULT 
)

Return the mesh geometric factors for the faces corresponding to the given integration rule.

The IntegrationRule used with GetFaceGeometricFactors needs to remain valid until the internally stored FaceGeometricFactors objects are destroyed (by either calling Mesh::DeleteGeometricFactors or the Mesh destructor).

Definition at line 860 of file mesh.cpp.

◆ GetFaceGeometry()

Geometry::Type mfem::Mesh::GetFaceGeometry ( int  i) const
inline

Definition at line 1050 of file mesh.hpp.

◆ GetFaceGeometryType()

Geometry::Type mfem::Mesh::GetFaceGeometryType ( int  Face) const

Definition at line 1413 of file mesh.cpp.

◆ GetFaceInformation()

Mesh::FaceInformation mfem::Mesh::GetFaceInformation ( int  f) const

This method aims to provide face information in a deciphered format, i.e. Mesh::FaceInformation, compared to the raw encoded information returned by Mesh::GetFaceElements() and Mesh::GetFaceInfos().

Definition at line 1131 of file mesh.cpp.

◆ GetFaceInfos() [1/2]

void mfem::Mesh::GetFaceInfos ( int  Face,
int *  Inf1,
int *  Inf2 
) const

Definition at line 1400 of file mesh.cpp.

◆ GetFaceInfos() [2/2]

void mfem::Mesh::GetFaceInfos ( int  Face,
int *  Inf1,
int *  Inf2,
int *  NCFace 
) const

Definition at line 1406 of file mesh.cpp.

◆ GetFacesTable()

STable3D * mfem::Mesh::GetFacesTable ( )
protected

Definition at line 6735 of file mesh.cpp.

◆ GetFaceToBdrElMap()

Array< int > mfem::Mesh::GetFaceToBdrElMap ( ) const

Definition at line 1437 of file mesh.cpp.

◆ GetFaceToElementTable()

Table * mfem::Mesh::GetFaceToElementTable ( ) const

Return the "face"-element Table. Here "face" refers to face (3D), edge (2D), or vertex (1D). The returned Table must be destroyed by the caller.

Definition at line 6114 of file mesh.cpp.

◆ GetFaceTransformation() [1/2]

void mfem::Mesh::GetFaceTransformation ( int  i,
IsoparametricTransformation FTr 
)

Returns the transformation defining the given face element in a user-defined variable.

Definition at line 497 of file mesh.cpp.

◆ GetFaceTransformation() [2/2]

ElementTransformation * mfem::Mesh::GetFaceTransformation ( int  FaceNo)

Returns the transformation defining the given face element.

Definition at line 568 of file mesh.cpp.

◆ GetFaceVertices()

void mfem::Mesh::GetFaceVertices ( int  i,
Array< int > &  vert 
) const
inline

Returns the indices of the vertices of face i.

Definition at line 1127 of file mesh.hpp.

◆ GetGeckoElementOrdering()

double mfem::Mesh::GetGeckoElementOrdering ( Array< int > &  ordering,
int  iterations = 4,
int  window = 4,
int  period = 2,
int  seed = 0,
bool  verbose = false,
double  time_limit = 0 
)

This is our integration with the Gecko library. The method finds an element ordering that will increase memory coherency by putting elements that are in physical proximity closer in memory. It can also be used to obtain a space-filling curve ordering for ParNCMesh partitioning.

Parameters
[out]orderingOutput element ordering.
iterationsTotal number of V cycles. The ordering may improve with more iterations. The best iteration is returned at the end.
windowInitial window size. This determines the number of permutations tested at each multigrid level and strongly influences the quality of the result, but the cost of increasing 'window' is exponential.
periodThe window size is incremented every 'period' iterations.
seedSeed for initial random ordering (0 = skip random reorder).
verbosePrint the progress of the optimization to mfem::out.
time_limitOptional time limit for the optimization, in seconds. When reached, ordering from the best iteration so far is returned (0 = no limit).
Returns
The final edge product cost of the ordering. The function may be called in an external loop with different seeds, and the best ordering can then be retained.

Definition at line 2030 of file mesh.cpp.

◆ GetGeometricFactors()

const GeometricFactors * mfem::Mesh::GetGeometricFactors ( const IntegrationRule ir,
const int  flags,
MemoryType  d_mt = MemoryType::DEFAULT 
)

Return the mesh geometric factors corresponding to the given integration rule.

The IntegrationRule used with GetGeometricFactors needs to remain valid until the internally stored GeometricFactors objects are destroyed (by either calling Mesh::DeleteGeometricFactors or the Mesh destructor). If the device MemoryType parameter d_mt is specified, then the returned object will use that type unless it was previously allocated with a different type.

Definition at line 840 of file mesh.cpp.

◆ GetGeometries()

void mfem::Mesh::GetGeometries ( int  dim,
Array< Geometry::Type > &  el_geoms 
) const

Return all element geometries of the given dimension present in the mesh.

For a parallel mesh only the local geometries are returned.

The returned geometries are sorted.

Definition at line 5919 of file mesh.cpp.

◆ GetGlobalNE()

long long mfem::Mesh::GetGlobalNE ( ) const
inline

Return the total (global) number of elements.

Definition at line 955 of file mesh.hpp.

◆ GetHilbertElementOrdering()

void mfem::Mesh::GetHilbertElementOrdering ( Array< int > &  ordering)

Return an ordering of the elements that approximately follows the Hilbert curve. The method performs a spatial (Hilbert) sort on the centers of all elements and returns the resulting sequence, which can then be passed to ReorderElements. This is a cheap alternative to GetGeckoElementOrdering.

Definition at line 2197 of file mesh.cpp.

◆ GetInteriorFaceTransformations()

FaceElementTransformations* mfem::Mesh::GetInteriorFaceTransformations ( int  FaceNo)
inline

Definition at line 1268 of file mesh.hpp.

◆ GetLastOperation()

Operation mfem::Mesh::GetLastOperation ( ) const
inline

Return type of last modification of the mesh.

Definition at line 1658 of file mesh.hpp.

◆ GetLength()

double mfem::Mesh::GetLength ( int  i,
int  j 
) const
protected

Return the length of the segment from node i to node j.

Definition at line 6294 of file mesh.cpp.

◆ GetLocalFaceTransformation()

void mfem::Mesh::GetLocalFaceTransformation ( int  face_type,
int  elem_type,
IsoparametricTransformation Transf,
int  info 
)

A helper method that constructs a transformation from the reference space of a face to the reference space of an element.

The local index of the face as a face in the element and its orientation are given by the input parameter info, as info = 64*loc_face_idx + loc_face_orientation.

Definition at line 896 of file mesh.cpp.

◆ GetLocalPtToSegTransformation()

void mfem::Mesh::GetLocalPtToSegTransformation ( IsoparametricTransformation Transf,
int  i 
)
protected

Used in GetFaceElementTransformations (...)

Definition at line 641 of file mesh.cpp.

◆ GetLocalQuadToHexTransformation()

void mfem::Mesh::GetLocalQuadToHexTransformation ( IsoparametricTransformation loc,
int  i 
)
protected

Used in GetFaceElementTransformations (...)

Definition at line 771 of file mesh.cpp.

◆ GetLocalQuadToPyrTransformation()

void mfem::Mesh::GetLocalQuadToPyrTransformation ( IsoparametricTransformation loc,
int  i 
)
protected

Used in GetFaceElementTransformations (...)

Definition at line 817 of file mesh.cpp.

◆ GetLocalQuadToWdgTransformation()

void mfem::Mesh::GetLocalQuadToWdgTransformation ( IsoparametricTransformation loc,
int  i 
)
protected

Used in GetFaceElementTransformations (...)

Definition at line 793 of file mesh.cpp.

◆ GetLocalSegToQuadTransformation()

void mfem::Mesh::GetLocalSegToQuadTransformation ( IsoparametricTransformation loc,
int  i 
)
protected

Definition at line 676 of file mesh.cpp.

◆ GetLocalSegToTriTransformation()

void mfem::Mesh::GetLocalSegToTriTransformation ( IsoparametricTransformation loc,
int  i 
)
protected

Definition at line 656 of file mesh.cpp.

◆ GetLocalTriToPyrTransformation()

void mfem::Mesh::GetLocalTriToPyrTransformation ( IsoparametricTransformation loc,
int  i 
)
protected

Used in GetFaceElementTransformations (...)

Definition at line 746 of file mesh.cpp.

◆ GetLocalTriToTetTransformation()

void mfem::Mesh::GetLocalTriToTetTransformation ( IsoparametricTransformation loc,
int  i 
)
protected

Used in GetFaceElementTransformations (...)

Definition at line 696 of file mesh.cpp.

◆ GetLocalTriToWdgTransformation()

void mfem::Mesh::GetLocalTriToWdgTransformation ( IsoparametricTransformation loc,
int  i 
)
protected

Used in GetFaceElementTransformations (...)

Definition at line 720 of file mesh.cpp.

◆ GetNBE()

int mfem::Mesh::GetNBE ( ) const
inline

Returns number of boundary elements.

Definition at line 926 of file mesh.hpp.

◆ GetNE()

int mfem::Mesh::GetNE ( ) const
inline

Returns number of elements.

Definition at line 923 of file mesh.hpp.

◆ GetNEdges()

int mfem::Mesh::GetNEdges ( ) const
inline

Return the number of edges.

Definition at line 929 of file mesh.hpp.

◆ GetNFaces()

int mfem::Mesh::GetNFaces ( void  ) const
inline

Return the number of faces in a 3D mesh.

Definition at line 932 of file mesh.hpp.

◆ GetNFbyType()

int mfem::Mesh::GetNFbyType ( FaceType  type) const
virtual

Returns the number of faces according to the requested type, does not count master nonconforming faces.

If type==Boundary returns only the number of true boundary faces contrary to GetNBE() that returns all "boundary" elements which may include actual interior faces. Similarly, if type==Interior, only the true interior faces are counted excluding all master nonconforming faces.

Reimplemented in mfem::ParMesh.

Definition at line 5392 of file mesh.cpp.

◆ GetNodalFESpace()

const FiniteElementSpace * mfem::Mesh::GetNodalFESpace ( ) const

Return the FiniteElementSpace on which the current mesh nodes are defined or NULL if the mesh does not have nodes.

Definition at line 5338 of file mesh.cpp.

◆ GetNode()

void mfem::Mesh::GetNode ( int  i,
double *  coord 
) const

Definition at line 7843 of file mesh.cpp.

◆ GetNodes() [1/4]

void mfem::Mesh::GetNodes ( Vector node_coord) const

Definition at line 7894 of file mesh.cpp.

◆ GetNodes() [2/4]

GridFunction* mfem::Mesh::GetNodes ( )
inline

Return a pointer to the internal node GridFunction (may be NULL).

Definition at line 1541 of file mesh.hpp.

◆ GetNodes() [3/4]

const GridFunction* mfem::Mesh::GetNodes ( ) const
inline

Definition at line 1542 of file mesh.hpp.

◆ GetNodes() [4/4]

void mfem::Mesh::GetNodes ( GridFunction nodes) const

Return the mesh nodes/vertices projected on the given GridFunction.

Definition at line 5271 of file mesh.cpp.

◆ GetNumFaces()

int mfem::Mesh::GetNumFaces ( ) const

Return the number of faces (3D), edges (2D) or vertices (1D).

Definition at line 5376 of file mesh.cpp.

◆ GetNumFacesWithGhost()

int mfem::Mesh::GetNumFacesWithGhost ( ) const

Return the number of faces (3D), edges (2D) or vertices (1D) including ghost faces.

Definition at line 5387 of file mesh.cpp.

◆ GetNumGeometries()

int mfem::Mesh::GetNumGeometries ( int  dim) const

Return the number of geometries of the given dimension present in the mesh.

For a parallel mesh only the local geometries are counted.

Definition at line 5908 of file mesh.cpp.

◆ GetNV()

int mfem::Mesh::GetNV ( ) const
inline

Returns number of vertices. Vertices are only at the corners of elements, where you would expect them in the lowest-order mesh.

Definition at line 920 of file mesh.hpp.

◆ GetPointMatrix()

void mfem::Mesh::GetPointMatrix ( int  i,
DenseMatrix pointmat 
) const

Definition at line 6260 of file mesh.cpp.

◆ GetQuadOrientation()

int mfem::Mesh::GetQuadOrientation ( const int *  base,
const int *  test 
)
staticprotected

Returns the orientation of "test" relative to "base".

Definition at line 5616 of file mesh.cpp.

◆ GetRefinementTransforms()

const CoarseFineTransformations & mfem::Mesh::GetRefinementTransforms ( )

Return fine element transformations following a mesh refinement. Space uses this to construct a global interpolation matrix.

Definition at line 9914 of file mesh.cpp.

◆ GetSequence()

long mfem::Mesh::GetSequence ( ) const
inline

Return update counter. The counter starts at zero and is incremented each time refinement, derefinement, or rebalancing method is called. It is used for checking proper sequence of Space:: and GridFunction:: Update() calls.

Definition at line 1664 of file mesh.hpp.

◆ GetTetOrientation()

int mfem::Mesh::GetTetOrientation ( const int *  base,
const int *  test 
)
staticprotected

Returns the orientation of "test" relative to "base".

Definition at line 5664 of file mesh.cpp.

◆ GetTransformationFEforElementType()

FiniteElement * mfem::Mesh::GetTransformationFEforElementType ( Element::Type  ElemType)
static

Definition at line 327 of file mesh.cpp.

◆ GetTriOrientation()

int mfem::Mesh::GetTriOrientation ( const int *  base,
const int *  test 
)
staticprotected

Returns the orientation of "test" relative to "base".

Definition at line 5568 of file mesh.cpp.

◆ GetVertex() [1/2]

const double* mfem::Mesh::GetVertex ( int  i) const
inline

Return pointer to vertex i's coordinates.

Warning
For high-order meshes (when Nodes != NULL) vertices may not be updated and should not be used!

Definition at line 1012 of file mesh.hpp.

◆ GetVertex() [2/2]

double* mfem::Mesh::GetVertex ( int  i)
inline

Return pointer to vertex i's coordinates.

Warning
For high-order meshes (when Nodes != NULL) vertices may not being updated and should not be used!

Definition at line 1017 of file mesh.hpp.

◆ GetVertexToElementTable()

Table * mfem::Mesh::GetVertexToElementTable ( )

The returned Table must be destroyed by the caller.

Definition at line 6079 of file mesh.cpp.

◆ GetVertexToVertexTable()

void mfem::Mesh::GetVertexToVertexTable ( DSTable v_to_v) const

Return vertex to vertex table. The connections stored in the table are from smaller to bigger vertex index, i.e. if i<j and (i, j) is in the table, then (j, i) is not stored.

Definition at line 6331 of file mesh.cpp.

◆ GetVertices()

void mfem::Mesh::GetVertices ( Vector vert_coord) const

Definition at line 7823 of file mesh.cpp.

◆ GreenRefinement()

void mfem::Mesh::GreenRefinement ( int  i,
const DSTable v_to_v,
int *  edge1,
int *  edge2,
int *  middle 
)
inlineprotected

Green refinement. Element with index i is refined. The default refinement for now is Bisection.

Definition at line 360 of file mesh.hpp.

◆ HasBoundaryElements()

virtual bool mfem::Mesh::HasBoundaryElements ( ) const
inlinevirtual

Checks if the mesh has boundary elements.

Reimplemented in mfem::ParMesh.

Definition at line 1023 of file mesh.hpp.

◆ HasGeometry()

bool mfem::Mesh::HasGeometry ( Geometry::Type  geom) const
inline

Return true iff the given geom is encountered in the mesh. Geometries of dimensions lower than Dimension() are counted as well.

Definition at line 1077 of file mesh.hpp.

◆ Init()

void mfem::Mesh::Init ( )
protected

Definition at line 1448 of file mesh.cpp.

◆ InitFromNCMesh()

void mfem::Mesh::InitFromNCMesh ( const NCMesh ncmesh)
protected

Initialize vertices/elements/boundary/tables from a nonconforming mesh.

Definition at line 9227 of file mesh.cpp.

◆ InitMesh()

void mfem::Mesh::InitMesh ( int  Dim_,
int  spaceDim_,
int  NVert,
int  NElem,
int  NBdrElem 
)
protected

Begin construction of a mesh.

Definition at line 1590 of file mesh.cpp.

◆ InitRefinementTransforms()

void mfem::Mesh::InitRefinementTransforms ( )
protected

Definition at line 9892 of file mesh.cpp.

◆ InitTables()

void mfem::Mesh::InitTables ( )
protected

Definition at line 1466 of file mesh.cpp.

◆ IsSlaveFace()

bool mfem::Mesh::IsSlaveFace ( const FaceInfo fi) const
protected

Definition at line 1051 of file mesh.cpp.

◆ KnotInsert() [1/2]

void mfem::Mesh::KnotInsert ( Array< KnotVector *> &  kv)

Definition at line 5050 of file mesh.cpp.

◆ KnotInsert() [2/2]

void mfem::Mesh::KnotInsert ( Array< Vector *> &  kv)

Definition at line 5072 of file mesh.cpp.

◆ Load()

virtual void mfem::Mesh::Load ( std::istream &  input,
int  generate_edges = 0,
int  refine = 1,
bool  fix_orientation = true 
)
inlinevirtual

This is similar to the mesh constructor with the same arguments, but here the current mesh is destroyed and another one created based on the data stream again given in MFEM, Netgen, or VTK format. If generate_edges = 0 (default) edges are not generated, if 1 edges are generated.

See also
mfem::ifgzstream() for on-the-fly decompression of compressed ascii inputs.

Reimplemented in mfem::ParMesh.

Definition at line 891 of file mesh.hpp.

◆ Loader()

void mfem::Mesh::Loader ( std::istream &  input,
int  generate_edges = 0,
std::string  parse_tag = "" 
)
protected

Definition at line 3966 of file mesh.cpp.

◆ LoadFromFile()

Mesh mfem::Mesh::LoadFromFile ( const char *  filename,
int  generate_edges = 0,
int  refine = 1,
bool  fix_orientation = true 
)
static

Creates mesh by reading a file in MFEM, Netgen, or VTK format. If generate_edges = 0 (default) edges are not generated, if 1 edges are generated.

Definition at line 3695 of file mesh.cpp.

◆ LoadPatchTopo()

void mfem::Mesh::LoadPatchTopo ( std::istream &  input,
Array< int > &  edge_to_knot 
)
protected

Read NURBS patch/macro-element mesh.

Definition at line 5189 of file mesh.cpp.

◆ LocalRefinement()

void mfem::Mesh::LocalRefinement ( const Array< int > &  marked_el,
int  type = 3 
)
protectedvirtual

This function is not public anymore. Use GeneralRefinement instead.

Reimplemented in mfem::ParMesh.

Definition at line 8839 of file mesh.cpp.

◆ Make1D()

void mfem::Mesh::Make1D ( int  n,
double  sx = 1.0 
)
protected

Creates a 1D mesh for the interval [0,sx] divided into n equal intervals.

Definition at line 3517 of file mesh.cpp.

◆ Make2D()

void mfem::Mesh::Make2D ( int  nx,
int  ny,
Element::Type  type,
double  sx,
double  sy,
bool  generate_edges,
bool  sfc_ordering 
)
protected

Creates mesh for the rectangle [0,sx]x[0,sy], divided into nx*ny quadrilaterals if type = QUADRILATERAL or into 2*nx*ny triangles if type = TRIANGLE. If generate_edges = 0 (default) edges are not generated, if 1 edges are generated. The parameter sfc_ordering controls how the elements (when type=QUADRILATERAL) are ordered: true - use space-filling curve ordering, or false - use lexicographic ordering.

Definition at line 3339 of file mesh.cpp.

◆ Make3D()

void mfem::Mesh::Make3D ( int  nx,
int  ny,
int  nz,
Element::Type  type,
double  sx,
double  sy,
double  sz,
bool  sfc_ordering 
)
protected

Creates mesh for the parallelepiped [0,sx]x[0,sy]x[0,sz], divided into nx*ny*nz hexahedra if type=HEXAHEDRON or into 6*nx*ny*nz tetrahedrons if type=TETRAHEDRON. The parameter sfc_ordering controls how the elements (when type=HEXAHEDRON) are ordered: true - use space-filling curve ordering, or false - use lexicographic ordering.

Definition at line 3058 of file mesh.cpp.

◆ MakeCartesian1D()

Mesh mfem::Mesh::MakeCartesian1D ( int  n,
double  sx = 1.0 
)
static

Creates 1D mesh , divided into n equal intervals.

Definition at line 3705 of file mesh.cpp.

◆ MakeCartesian2D()

Mesh mfem::Mesh::MakeCartesian2D ( int  nx,
int  ny,
Element::Type  type,
bool  generate_edges = false,
double  sx = 1.0,
double  sy = 1.0,
bool  sfc_ordering = true 
)
static

Creates mesh for the rectangle [0,sx]x[0,sy], divided into nx*ny quadrilaterals if type = QUADRILATERAL or into 2*nx*ny triangles if type = TRIANGLE. If generate_edges = 0 (default) edges are not generated, if 1 edges are generated. If scf_ordering = true (default), elements are ordered along a space-filling curve, instead of row by row.

Definition at line 3713 of file mesh.cpp.

◆ MakeCartesian3D()

Mesh mfem::Mesh::MakeCartesian3D ( int  nx,
int  ny,
int  nz,
Element::Type  type,
double  sx = 1.0,
double  sy = 1.0,
double  sz = 1.0,
bool  sfc_ordering = true 
)
static

Creates mesh for the parallelepiped [0,sx]x[0,sy]x[0,sz], divided into nx*ny*nz hexahedra if type=HEXAHEDRON or into 6*nx*ny*nz tetrahedrons if type=TETRAHEDRON. If sfc_ordering = true (default), elements are ordered along a space-filling curve, instead of row by row and layer by layer.

Definition at line 3723 of file mesh.cpp.

◆ MakePeriodic()

Mesh mfem::Mesh::MakePeriodic ( const Mesh orig_mesh,
const std::vector< int > &  v2v 
)
static

Create a periodic mesh by identifying vertices of orig_mesh.

Each vertex i will be mapped to vertex v2v[i], such that all vertices that are coincident under the periodic mapping get mapped to the same index. The mapping v2v can be generated from translation vectors using Mesh::CreatePeriodicVertexMapping.

Note
MFEM requires that each edge of the resulting mesh be uniquely identifiable by a pair of distinct vertices. As a consequence, periodic boundaries must be connected by at least three edges.

Definition at line 4891 of file mesh.cpp.

◆ MakeRefined() [1/2]

Mesh mfem::Mesh::MakeRefined ( Mesh orig_mesh,
int  ref_factor,
int  ref_type 
)
static

Create a refined (by any factor) version of orig_mesh.

Parameters
[in]orig_meshThe starting coarse mesh.
[in]ref_factorThe refinement factor, an integer > 1.
[in]ref_typeSpecify the positions of the new vertices. The options are BasisType::ClosedUniform or BasisType::GaussLobatto.

The refinement data which can be accessed with GetRefinementTransforms() is set to reflect the performed refinements.

Note
The constructed Mesh is straight-sided.

Definition at line 3733 of file mesh.cpp.

◆ MakeRefined() [2/2]

Mesh mfem::Mesh::MakeRefined ( Mesh orig_mesh,
const Array< int > &  ref_factors,
int  ref_type 
)
static

refined ref_factors[i] times in each dimension.

Create a refined mesh, where each element of the original mesh may be refined by a different factor.

Parameters
[in]orig_meshThe starting coarse mesh.
[in]ref_factorsAn array of integers whose size is the number of elements of orig_mesh. The ith element of orig_mesh is refined by refinement factor ref_factors[i].
[in]ref_typeSpecify the positions of the new vertices. The options are BasisType::ClosedUniform or BasisType::GaussLobatto.

The refinement data which can be accessed with GetRefinementTransforms() is set to reflect the performed refinements.

Note
The constructed Mesh is straight-sided.

Definition at line 3742 of file mesh.cpp.

◆ MakeRefined_()

void mfem::Mesh::MakeRefined_ ( Mesh orig_mesh,
const Array< int >  ref_factors,
int  ref_type 
)
protected

Internal function used in Mesh::MakeRefined.

Definition at line 4333 of file mesh.cpp.

◆ MakeSimplicial()

Mesh mfem::Mesh::MakeSimplicial ( const Mesh orig_mesh)
static

Create a mesh by splitting each element of orig_mesh into simplices. Quadrilaterals are split into two triangles, prisms are split into 3 tetrahedra, and hexahedra are split into either 5 or 6 tetrahedra depending on the configuration.

Warning
The curvature of the original mesh is not carried over to the new mesh. Periodic meshes are not supported.

Definition at line 4562 of file mesh.cpp.

◆ MakeSimplicial_()

void mfem::Mesh::MakeSimplicial_ ( const Mesh orig_mesh,
int *  vglobal 
)
protected

Definition at line 4569 of file mesh.cpp.

◆ MarkForRefinement()

void mfem::Mesh::MarkForRefinement ( )
protected

Definition at line 2401 of file mesh.cpp.

◆ MarkTetMeshForRefinement()

void mfem::Mesh::MarkTetMeshForRefinement ( DSTable v_to_v)
protectedvirtual

Reimplemented in mfem::ParMesh.

Definition at line 2458 of file mesh.cpp.

◆ MarkTriMeshForRefinement()

void mfem::Mesh::MarkTriMeshForRefinement ( )
protected

Definition at line 2418 of file mesh.cpp.

◆ MeshGenerator()

int mfem::Mesh::MeshGenerator ( )
inline

Get the mesh generator/type.

The purpose of this is to be able to quickly tell what type of elements one has in the mesh. Examination of this bitmask along with knowledge of the mesh dimension can be used to identify which element types are present.

Returns
A bitmask:
  • bit 0 - simplices are present in the mesh (triangles, tets),
  • bit 1 - tensor product elements are present in the mesh (quads, hexes),
  • bit 2 - the mesh has wedge elements.
  • bit 3 - the mesh has pyramid elements.

In parallel, the result takes into account elements on all processors.

Definition at line 916 of file mesh.hpp.

◆ MesquiteSmooth()

void mfem::Mesh::MesquiteSmooth ( const int  mesquite_option = 0)

Definition at line 1144 of file mesquite.cpp.

◆ MoveNodes()

void mfem::Mesh::MoveNodes ( const Vector displacements)

Definition at line 7882 of file mesh.cpp.

◆ MoveVertices()

void mfem::Mesh::MoveVertices ( const Vector displacements)

Definition at line 7814 of file mesh.cpp.

◆ NewElement()

Element * mfem::Mesh::NewElement ( int  geom)

Definition at line 3841 of file mesh.cpp.

◆ NewNodes()

void mfem::Mesh::NewNodes ( GridFunction nodes,
bool  make_owner = false 
)

Replace the internal node GridFunction with the given GridFunction.

Definition at line 7921 of file mesh.cpp.

◆ NodesUpdated()

void mfem::Mesh::NodesUpdated ( )
inline

This function should be called after the mesh node coordinates have changed, e.g. after the mesh has moved.

It updates internal quantities derived from the node coordinates, such as the GeometricFactors.

Definition at line 997 of file mesh.hpp.

◆ Nonconforming()

bool mfem::Mesh::Nonconforming ( ) const
inline

Definition at line 1651 of file mesh.hpp.

◆ NonconformingDerefinement()

bool mfem::Mesh::NonconformingDerefinement ( Array< double > &  elem_error,
double  threshold,
int  nc_limit = 0,
int  op = 1 
)
protectedvirtual

NC version of GeneralDerefinement.

Reimplemented in mfem::ParMesh.

Definition at line 9150 of file mesh.cpp.

◆ NonconformingRefinement()

void mfem::Mesh::NonconformingRefinement ( const Array< Refinement > &  refinements,
int  nc_limit = 0 
)
protectedvirtual

This function is not public anymore. Use GeneralRefinement instead.

Reimplemented in mfem::ParMesh.

Definition at line 9081 of file mesh.cpp.

◆ NURBSUniformRefinement()

void mfem::Mesh::NURBSUniformRefinement ( )
protectedvirtual

Refine NURBS mesh.

Reimplemented in mfem::ParMesh.

Definition at line 5094 of file mesh.cpp.

◆ operator=() [1/2]

Mesh & mfem::Mesh::operator= ( Mesh &&  mesh)

Move assignment operstor.

Definition at line 3689 of file mesh.cpp.

◆ operator=() [2/2]

Mesh& mfem::Mesh::operator= ( const Mesh mesh)
delete

Explicitly delete the copy assignment operator.

◆ OwnsNodes()

bool mfem::Mesh::OwnsNodes ( ) const
inline

Return the mesh nodes ownership flag.

Definition at line 1544 of file mesh.hpp.

◆ PrepareNodeReorder()

void mfem::Mesh::PrepareNodeReorder ( DSTable **  old_v_to_v,
Table **  old_elem_vert 
)
protected

Definition at line 2481 of file mesh.cpp.

◆ Print() [1/2]

virtual void mfem::Mesh::Print ( std::ostream &  os = mfem::out) const
inlinevirtual

Print the mesh to the given stream using the default MFEM mesh format.

See also
mfem::ofgzstream() for on-the-fly compression of ascii outputs

Reimplemented in mfem::ParMesh.

Definition at line 1671 of file mesh.hpp.

◆ Print() [2/2]

void mfem::Mesh::Print ( adios2stream os) const
virtual

Print the mesh to the given stream using the adios2 bp format.

Reimplemented in mfem::ParMesh.

Definition at line 10283 of file mesh.cpp.

◆ PrintBdrVTU()

void mfem::Mesh::PrintBdrVTU ( std::string  fname,
VTKFormat  format = VTKFormat::ASCII,
bool  high_order_output = false,
int  compression_level = 0 
)

Print the boundary elements of the mesh in VTU format, and output the boundary attributes as a data array (useful for boundary conditions).

Definition at line 10481 of file mesh.cpp.

◆ PrintCharacteristics()

void mfem::Mesh::PrintCharacteristics ( Vector Vh = NULL,
Vector Vk = NULL,
std::ostream &  os = mfem::out 
)

Compute and print mesh characteristics such as number of vertices, number of elements, number of boundary elements, minimal and maximal element sizes, minimal and maximal element aspect ratios, etc.

If Vh or Vk are not NULL, return the element sizes and aspect ratios for all elements in the given Vectors.

Definition at line 242 of file mesh.cpp.

◆ PrintElement()

void mfem::Mesh::PrintElement ( const Element el,
std::ostream &  os 
)
staticprotected

Definition at line 3907 of file mesh.cpp.

◆ PrintElementsByGeometry()

void mfem::Mesh::PrintElementsByGeometry ( int  dim,
const Array< int > &  num_elems_by_geom,
std::ostream &  out 
)
static

Auxiliary method used by PrintCharacteristics().

It is also used in the mesh-explorer miniapp.

Definition at line 228 of file mesh.cpp.

◆ PrintElementsWithPartitioning()

void mfem::Mesh::PrintElementsWithPartitioning ( int *  partitioning,
std::ostream &  out,
int  interior_faces = 0 
)

Definition at line 11036 of file mesh.cpp.

◆ PrintElementWithoutAttr()

void mfem::Mesh::PrintElementWithoutAttr ( const Element el,
std::ostream &  os 
)
staticprotected

Definition at line 3883 of file mesh.cpp.

◆ Printer()

void mfem::Mesh::Printer ( std::ostream &  out = mfem::out,
std::string  section_delimiter = "" 
) const
protected

Definition at line 10141 of file mesh.cpp.

◆ PrintInfo()

virtual void mfem::Mesh::PrintInfo ( std::ostream &  os = mfem::out)
inlinevirtual

In serial, this method calls PrintCharacteristics(). In parallel, additional information about the parallel decomposition is also printed.

Reimplemented in mfem::ParMesh.

Definition at line 1781 of file mesh.hpp.

◆ PrintSurfaces()

void mfem::Mesh::PrintSurfaces ( const Table Aface_face,
std::ostream &  out 
) const

Print set of disjoint surfaces:

If Aface_face(i,j) != 0, print face j as a boundary element with attribute i+1.

Definition at line 11409 of file mesh.cpp.

◆ PrintTopo()

void mfem::Mesh::PrintTopo ( std::ostream &  out,
const Array< int > &  e_to_k 
) const
protected

Definition at line 10233 of file mesh.cpp.

◆ PrintVTK() [1/2]

void mfem::Mesh::PrintVTK ( std::ostream &  os)

Print the mesh in VTK format (linear and quadratic meshes only).

See also
mfem::ofgzstream() for on-the-fly compression of ascii outputs

Definition at line 10289 of file mesh.cpp.

◆ PrintVTK() [2/2]

void mfem::Mesh::PrintVTK ( std::ostream &  os,
int  ref,
int  field_data = 0 
)

Print the mesh in VTK format. The parameter ref > 0 specifies an element subdivision number (useful for high order fields and curved meshes). If the optional field_data is set, we also add a FIELD section in the beginning of the file with additional dataset information.

See also
mfem::ofgzstream() for on-the-fly compression of ascii outputs

Definition at line 10699 of file mesh.cpp.

◆ PrintVTU() [1/2]

void mfem::Mesh::PrintVTU ( std::ostream &  os,
int  ref = 1,
VTKFormat  format = VTKFormat::ASCII,
bool  high_order_output = false,
int  compression_level = 0,
bool  bdr_elements = false 
)

Print the mesh in VTU format. The parameter ref > 0 specifies an element subdivision number (useful for high order fields and curved meshes). If bdr_elements is true, then output (only) the boundary elements, otherwise output only the non-boundary elements.

Definition at line 10489 of file mesh.cpp.

◆ PrintVTU() [2/2]

void mfem::Mesh::PrintVTU ( std::string  fname,
VTKFormat  format = VTKFormat::ASCII,
bool  high_order_output = false,
int  compression_level = 0,
bool  bdr = false 
)
virtual

Print the mesh in VTU format with file name fname.

Reimplemented in mfem::ParMesh.

Definition at line 10455 of file mesh.cpp.

◆ PrintWithPartitioning()

void mfem::Mesh::PrintWithPartitioning ( int *  partitioning,
std::ostream &  os,
int  elem_attr = 0 
) const

Prints the mesh with boundary elements given by the boundary of the subdomains, so that the boundary of subdomain i has boundary attribute i+1.

See also
mfem::ofgzstream() for on-the-fly compression of ascii outputs

Definition at line 10917 of file mesh.cpp.

◆ PrintXG()

void mfem::Mesh::PrintXG ( std::ostream &  os = mfem::out) const
virtual

Print the mesh to the given stream using Netgen/Truegrid format.

Reimplemented in mfem::ParMesh.

Definition at line 9977 of file mesh.cpp.

◆ RandomRefinement()

void mfem::Mesh::RandomRefinement ( double  prob,
bool  aniso = false,
int  nonconforming = -1,
int  nc_limit = 0 
)

Refine each element with given probability. Uses GeneralRefinement.

Definition at line 9483 of file mesh.cpp.

◆ ReadCubit()

void mfem::Mesh::ReadCubit ( const char *  filename,
int &  curved,
int &  read_gf 
)
protected

Definition at line 2761 of file mesh_readers.cpp.

◆ ReadElement()

Element * mfem::Mesh::ReadElement ( std::istream &  input)
protected

Definition at line 3895 of file mesh.cpp.

◆ ReadElementWithoutAttr()

Element * mfem::Mesh::ReadElementWithoutAttr ( std::istream &  input)
protected

Definition at line 3865 of file mesh.cpp.

◆ ReadGmshMesh()

void mfem::Mesh::ReadGmshMesh ( std::istream &  input,
int &  curved,
int &  read_gf 
)
protected

The following mappings convert the Gmsh node orderings for high order elements to MFEM's L2 degree of freedom ordering. To support more options examine Gmsh's ordering and read off the indices in MFEM's order. For example 2nd order Gmsh quadrilaterals use the following ordering:

3–6–2 | | | 7 8 5 | | | 0–4–1

(from https://gmsh.info/doc/texinfo/gmsh.html#Node-ordering)

Whereas MFEM uses a tensor product ordering with the horizontal axis cycling fastest so we would read off:

0 4 1 7 8 5 3 6 2

This corresponds to the quad9 mapping below.

Definition at line 1484 of file mesh_readers.cpp.

◆ ReadInlineMesh()

void mfem::Mesh::ReadInlineMesh ( std::istream &  input,
bool  generate_edges = false 
)
protected

Definition at line 1324 of file mesh_readers.cpp.

◆ ReadLineMesh()

void mfem::Mesh::ReadLineMesh ( std::istream &  input)
protected

Definition at line 108 of file mesh_readers.cpp.

◆ ReadMFEMMesh()

void mfem::Mesh::ReadMFEMMesh ( std::istream &  input,
int  version,
int &  curved 
)
protected

Definition at line 39 of file mesh_readers.cpp.

◆ ReadNetgen2DMesh()

void mfem::Mesh::ReadNetgen2DMesh ( std::istream &  input,
int &  curved 
)
protected

Definition at line 142 of file mesh_readers.cpp.

◆ ReadNetgen3DMesh()

void mfem::Mesh::ReadNetgen3DMesh ( std::istream &  input)
protected

Definition at line 204 of file mesh_readers.cpp.

◆ ReadNURBSMesh()

void mfem::Mesh::ReadNURBSMesh ( std::istream &  input,
int &  curved,
int &  read_gf 
)
protected

Definition at line 1283 of file mesh_readers.cpp.

◆ ReadTrueGridMesh()

void mfem::Mesh::ReadTrueGridMesh ( std::istream &  input)
protected

Definition at line 258 of file mesh_readers.cpp.

◆ ReadVTKMesh()

void mfem::Mesh::ReadVTKMesh ( std::istream &  input,
int &  curved,
int &  read_gf,
bool &  finalize_topo 
)
protected

Definition at line 1152 of file mesh_readers.cpp.

◆ ReadXML_VTKMesh()

void mfem::Mesh::ReadXML_VTKMesh ( std::istream &  input,
int &  curved,
int &  read_gf,
bool &  finalize_topo,
const std::string &  xml_prefix = "" 
)
protected

Definition at line 1034 of file mesh_readers.cpp.

◆ RedRefinement()

void mfem::Mesh::RedRefinement ( int  i,
const DSTable v_to_v,
int *  edge1,
int *  edge2,
int *  middle 
)
inlineprotected

Red refinement. Element with index i is refined. The default red refinement for now is Uniform.

Definition at line 354 of file mesh.hpp.

◆ ReduceInt()

virtual long long mfem::Mesh::ReduceInt ( int  value) const
inlinevirtual

Utility function: sum integers from all processors (Allreduce).

Reimplemented in mfem::ParMesh.

Definition at line 952 of file mesh.hpp.

◆ RefineAtVertex()

void mfem::Mesh::RefineAtVertex ( const Vertex vert,
double  eps = 0.0,
int  nonconforming = -1 
)

Refine elements sharing the specified vertex. Uses GeneralRefinement.

Definition at line 9502 of file mesh.cpp.

◆ RefineByError() [1/2]

bool mfem::Mesh::RefineByError ( const Array< double > &  elem_error,
double  threshold,
int  nonconforming = -1,
int  nc_limit = 0 
)

Refine element i if elem_error[i] > threshold, for all i. Returns true if at least one element was refined, false otherwise.

Definition at line 9528 of file mesh.cpp.

◆ RefineByError() [2/2]

bool mfem::Mesh::RefineByError ( const Vector elem_error,
double  threshold,
int  nonconforming = -1,
int  nc_limit = 0 
)

Refine element i if elem_error(i) > threshold, for all i. Returns true if at least one element was refined, false otherwise.

Definition at line 9548 of file mesh.cpp.

◆ RemoveInternalBoundaries()

void mfem::Mesh::RemoveInternalBoundaries ( )

Remove boundary elements that lie in the interior of the mesh, i.e. that have two adjacent faces in 3D, or edges in 2D.

Definition at line 11772 of file mesh.cpp.

◆ RemoveUnusedVertices()

void mfem::Mesh::RemoveUnusedVertices ( )

Remove unused vertices and rebuild mesh connectivity.

Definition at line 11665 of file mesh.cpp.

◆ ReorderElements()

void mfem::Mesh::ReorderElements ( const Array< int > &  ordering,
bool  reorder_vertices = true 
)

Rebuilds the mesh with a different order of elements. For each element i, the array ordering[i] contains its desired new index. Note that the method reorders vertices, edges and faces along with the elements.

Definition at line 2249 of file mesh.cpp.

◆ ReorientTetMesh()

void mfem::Mesh::ReorientTetMesh ( )
virtual

This method modifies a tetrahedral mesh so that Nedelec spaces of order greater than 1 can be defined on the mesh. Specifically, we 1) rotate all tets in the mesh so that the vertices {v0, v1, v2, v3} satisfy: v0 < v1 < min(v2, v3). 2) rotate all boundary triangles so that the vertices {v0, v1, v2} satisfy: v0 < min(v1, v2).

Note
Refinement does not work after a call to this method!

Reimplemented in mfem::ParMesh.

Definition at line 6927 of file mesh.cpp.

◆ ResetLazyData()

void mfem::Mesh::ResetLazyData ( )
protected

Definition at line 1549 of file mesh.cpp.

◆ Save()

void mfem::Mesh::Save ( const char *  fname,
int  precision = 16 
) const
virtual

Save the mesh to a file using Mesh::Print. The given precision will be used for ASCII output.

Reimplemented in mfem::ParMesh.

Definition at line 10275 of file mesh.cpp.

◆ ScaleElements()

void mfem::Mesh::ScaleElements ( double  sf)

Definition at line 11546 of file mesh.cpp.

◆ ScaleSubdomains()

void mfem::Mesh::ScaleSubdomains ( double  sf)

Definition at line 11476 of file mesh.cpp.

◆ SetAttribute()

void mfem::Mesh::SetAttribute ( int  i,
int  attr 
)
inline

Set the attribute of element i.

Definition at line 1483 of file mesh.hpp.

◆ SetAttributes()

void mfem::Mesh::SetAttributes ( )
virtual

Reimplemented in mfem::ParMesh.

Definition at line 1559 of file mesh.cpp.

◆ SetBdrAttribute()

void mfem::Mesh::SetBdrAttribute ( int  i,
int  attr 
)
inline

Set the attribute of boundary element i.

Definition at line 1489 of file mesh.hpp.

◆ SetCurvature()

void mfem::Mesh::SetCurvature ( int  order,
bool  discont = false,
int  space_dim = -1,
int  ordering = 1 
)
virtual

Set the curvature of the mesh nodes using the given polynomial degree, 'order', and optionally: discontinuous or continuous FE space, 'discont', new space dimension, 'space_dim' (if != -1), and 'ordering' (byVDim by default).

Reimplemented in mfem::ParMesh.

Definition at line 5343 of file mesh.cpp.

◆ SetEmpty()

void mfem::Mesh::SetEmpty ( )
protected

Definition at line 1472 of file mesh.cpp.

◆ SetMeshGen()

void mfem::Mesh::SetMeshGen ( )
protected

Determine the mesh generator bitmask meshgen, see MeshGenerator().

Also, initializes mesh_geoms.

Definition at line 3913 of file mesh.cpp.

◆ SetNodalFESpace()

void mfem::Mesh::SetNodalFESpace ( FiniteElementSpace nfes)
virtual

Replace the internal node GridFunction with a new GridFunction defined on the given FiniteElementSpace. The new node coordinates are projected (derived) from the current nodes/vertices.

Reimplemented in mfem::ParMesh.

Definition at line 5285 of file mesh.cpp.

◆ SetNodalGridFunction()

void mfem::Mesh::SetNodalGridFunction ( GridFunction nodes,
bool  make_owner = false 
)

Replace the internal node GridFunction with the given GridFunction. The given GridFunction is updated with node coordinates projected (derived) from the current nodes/vertices.

Definition at line 5332 of file mesh.cpp.

◆ SetNode()

void mfem::Mesh::SetNode ( int  i,
const double *  coord 
)

Definition at line 7862 of file mesh.cpp.

◆ SetNodes()

void mfem::Mesh::SetNodes ( const Vector node_coord)

Definition at line 7906 of file mesh.cpp.

◆ SetNodesOwner()

void mfem::Mesh::SetNodesOwner ( bool  nodes_owner)
inline

Set the mesh nodes ownership flag.

Definition at line 1546 of file mesh.hpp.

◆ SetVertices()

void mfem::Mesh::SetVertices ( const Vector vert_coord)

Definition at line 7834 of file mesh.cpp.

◆ SetVerticesFromNodes()

void mfem::Mesh::SetVerticesFromNodes ( const GridFunction nodes)
protected

Helper to set vertex coordinates given a high-order curvature function.

Definition at line 5362 of file mesh.cpp.

◆ SpaceDimension()

int mfem::Mesh::SpaceDimension ( ) const
inline

Definition at line 1007 of file mesh.hpp.

◆ Swap()

void mfem::Mesh::Swap ( Mesh other,
bool  non_geometry 
)

Swaps internal data with another mesh. By default, non-geometry members like 'ncmesh' and 'NURBSExt' are only swapped when 'non_geometry' is set.

Definition at line 9271 of file mesh.cpp.

◆ SwapNodes()

void mfem::Mesh::SwapNodes ( GridFunction *&  nodes,
int &  own_nodes_ 
)

Swap the internal node GridFunction pointer and ownership flag members with the given ones.

Definition at line 7943 of file mesh.cpp.

◆ Transform() [1/2]

void mfem::Mesh::Transform ( void(*)(const Vector &, Vector &)  f)

Definition at line 11616 of file mesh.cpp.

◆ Transform() [2/2]

void mfem::Mesh::Transform ( VectorCoefficient deformation)

Definition at line 11641 of file mesh.cpp.

◆ UniformRefinement() [1/2]

void mfem::Mesh::UniformRefinement ( int  i,
const DSTable v_to_v,
int *  edge1,
int *  edge2,
int *  middle 
)
protected

Uniform Refinement. Element with index i is refined uniformly.

Definition at line 9802 of file mesh.cpp.

◆ UniformRefinement() [2/2]

void mfem::Mesh::UniformRefinement ( int  ref_algo = 0)

Refine all mesh elements.

Parameters
[in]ref_algoRefinement algorithm. Currently used only for pure tetrahedral meshes. If set to zero (default), a tet mesh will be refined using algorithm A, that produces elements with better quality compared to algorithm B used when the parameter is non-zero.

For tetrahedral meshes, after using algorithm A, the mesh cannot be refined locally using methods like GeneralRefinement() unless it is re-finalized using Finalize() with the parameter refine set to true. Note that calling Finalize() in this way will generally invalidate any FiniteElementSpaces and GridFunctions defined on the mesh.

Definition at line 9362 of file mesh.cpp.

◆ UniformRefinement2D()

virtual void mfem::Mesh::UniformRefinement2D ( )
inlineprotectedvirtual

Refine a mixed 2D mesh uniformly.

Reimplemented in mfem::ParMesh.

Definition at line 392 of file mesh.hpp.

◆ UniformRefinement2D_base()

void mfem::Mesh::UniformRefinement2D_base ( bool  update_nodes = true)
protected

Definition at line 7992 of file mesh.cpp.

◆ UniformRefinement3D()

virtual void mfem::Mesh::UniformRefinement3D ( )
inlineprotectedvirtual

Refine a mixed 3D mesh uniformly.

Reimplemented in mfem::ParMesh.

Definition at line 402 of file mesh.hpp.

◆ UniformRefinement3D_base()

void mfem::Mesh::UniformRefinement3D_base ( Array< int > *  f2qf = NULL,
DSTable v_to_v_p = NULL,
bool  update_nodes = true 
)
protected

Definition at line 8151 of file mesh.cpp.

◆ UpdateNodes()

void mfem::Mesh::UpdateNodes ( )
protected

Update the nodes of a curved mesh after refinement.

Definition at line 7977 of file mesh.cpp.

◆ UpdateNURBS()

void mfem::Mesh::UpdateNURBS ( )
protected

Definition at line 5124 of file mesh.cpp.

Friends And Related Function Documentation

◆ adios2stream

friend class adios2stream
friend

Definition at line 62 of file mesh.hpp.

◆ NCMesh

friend class NCMesh
friend

Definition at line 58 of file mesh.hpp.

◆ NURBSExtension

friend class NURBSExtension
friend

Definition at line 59 of file mesh.hpp.

◆ ParMesh

friend class ParMesh
friend

Definition at line 55 of file mesh.hpp.

◆ ParNCMesh

friend class ParNCMesh
friend

Definition at line 56 of file mesh.hpp.

◆ Tetrahedron

friend class Tetrahedron
friend

Definition at line 249 of file mesh.hpp.

Member Data Documentation

◆ attributes

Array<int> mfem::Mesh::attributes

A list of all unique element attributes used by the Mesh.

Definition at line 268 of file mesh.hpp.

◆ bdr_attributes

Array<int> mfem::Mesh::bdr_attributes

A list of all unique boundary attributes used by the Mesh.

Definition at line 270 of file mesh.hpp.

◆ BdrTransformation

IsoparametricTransformation mfem::Mesh::BdrTransformation
protected

Definition at line 230 of file mesh.hpp.

◆ be_to_edge

Array<int> mfem::Mesh::be_to_edge
protected

Definition at line 223 of file mesh.hpp.

◆ be_to_face

Array<int> mfem::Mesh::be_to_face
protected

Definition at line 225 of file mesh.hpp.

◆ bel_to_edge

Table* mfem::Mesh::bel_to_edge
protected

Definition at line 224 of file mesh.hpp.

◆ boundary

Array<Element *> mfem::Mesh::boundary
protected

Definition at line 91 of file mesh.hpp.

◆ CoarseFineTr

CoarseFineTransformations mfem::Mesh::CoarseFineTr
protected

Definition at line 235 of file mesh.hpp.

◆ Dim

int mfem::Mesh::Dim
protected

Definition at line 66 of file mesh.hpp.

◆ edge_vertex

Table* mfem::Mesh::edge_vertex
mutableprotected

Definition at line 227 of file mesh.hpp.

◆ EdgeTransformation

IsoparametricTransformation mfem::Mesh::EdgeTransformation
protected

Definition at line 231 of file mesh.hpp.

◆ el_to_edge

Table* mfem::Mesh::el_to_edge
protected

Definition at line 220 of file mesh.hpp.

◆ el_to_el

Table* mfem::Mesh::el_to_el
protected

Definition at line 222 of file mesh.hpp.

◆ el_to_face

Table* mfem::Mesh::el_to_face
protected

Definition at line 221 of file mesh.hpp.

◆ elements

Array<Element *> mfem::Mesh::elements
protected

Definition at line 85 of file mesh.hpp.

◆ face_edge

Table* mfem::Mesh::face_edge
mutableprotected

Definition at line 226 of file mesh.hpp.

◆ face_geom_factors

Array<FaceGeometricFactors*> mfem::Mesh::face_geom_factors

Optional face geometric factors.

Definition at line 276 of file mesh.hpp.

◆ FaceElemTr

FaceElementTransformations mfem::Mesh::FaceElemTr
protected

Definition at line 232 of file mesh.hpp.

◆ faces

Array<Element *> mfem::Mesh::faces
protected

Definition at line 92 of file mesh.hpp.

◆ faces_info

Array<FaceInfo> mfem::Mesh::faces_info
protected

Definition at line 217 of file mesh.hpp.

◆ FaceTransformation

IsoparametricTransformation mfem::Mesh::FaceTransformation
protected

Definition at line 231 of file mesh.hpp.

◆ geom_factors

Array<GeometricFactors*> mfem::Mesh::geom_factors

Optional geometric factors.

Definition at line 274 of file mesh.hpp.

◆ last_operation

Operation mfem::Mesh::last_operation
protected

Definition at line 284 of file mesh.hpp.

◆ mesh_geoms

int mfem::Mesh::mesh_geoms
protected

Definition at line 78 of file mesh.hpp.

◆ meshgen

int mfem::Mesh::meshgen
protected

Definition at line 77 of file mesh.hpp.

◆ nbBoundaryFaces

int mfem::Mesh::nbBoundaryFaces
mutableprotected

Definition at line 75 of file mesh.hpp.

◆ nbInteriorFaces

int mfem::Mesh::nbInteriorFaces
mutableprotected

These variables store the number of Interior and Boundary faces. Calling fes->GetMesh()->GetNBE() doesn't return the expected value in 3D because periodic meshes in 3D have some of their faces marked as boundary for visualization purpose in GLVis.

Definition at line 75 of file mesh.hpp.

◆ nc_faces_info

Array<NCFaceInfo> mfem::Mesh::nc_faces_info
protected

Definition at line 218 of file mesh.hpp.

◆ ncmesh

NCMesh* mfem::Mesh::ncmesh

Optional nonconforming mesh extension.

Definition at line 273 of file mesh.hpp.

◆ Nodes

GridFunction* mfem::Mesh::Nodes
protected

Definition at line 240 of file mesh.hpp.

◆ NumOfBdrElements

int mfem::Mesh::NumOfBdrElements
protected

Definition at line 69 of file mesh.hpp.

◆ NumOfEdges

int mfem::Mesh::NumOfEdges
protected

Definition at line 70 of file mesh.hpp.

◆ NumOfElements

int mfem::Mesh::NumOfElements
protected

Definition at line 69 of file mesh.hpp.

◆ NumOfFaces

int mfem::Mesh::NumOfFaces
protected

Definition at line 70 of file mesh.hpp.

◆ NumOfVertices

int mfem::Mesh::NumOfVertices
protected

Definition at line 69 of file mesh.hpp.

◆ NURBSext

NURBSExtension* mfem::Mesh::NURBSext

Optional NURBS mesh extension.

Definition at line 272 of file mesh.hpp.

◆ own_nodes

int mfem::Mesh::own_nodes
protected

Definition at line 241 of file mesh.hpp.

◆ remove_unused_vertices

bool mfem::Mesh::remove_unused_vertices = true
static

Definition at line 281 of file mesh.hpp.

◆ sequence

long mfem::Mesh::sequence
protected

Definition at line 83 of file mesh.hpp.

◆ spaceDim

int mfem::Mesh::spaceDim
protected

Definition at line 67 of file mesh.hpp.

◆ TetMemory

MemAlloc<Tetrahedron, 1024> mfem::Mesh::TetMemory
protected

Definition at line 250 of file mesh.hpp.

◆ tmp_vertex_parents

Array<Triple<int, int, int> > mfem::Mesh::tmp_vertex_parents
protected

Definition at line 254 of file mesh.hpp.

◆ Transformation

IsoparametricTransformation mfem::Mesh::Transformation
protected

Definition at line 229 of file mesh.hpp.

◆ Transformation2

IsoparametricTransformation mfem::Mesh::Transformation2
protected

Definition at line 229 of file mesh.hpp.

◆ vertices

Array<Vertex> mfem::Mesh::vertices
protected

Definition at line 90 of file mesh.hpp.

◆ vtk_quadratic_hex

const int mfem::Mesh::vtk_quadratic_hex
staticprotected
Initial value:
=
{
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
24, 22, 21, 23, 20, 25, 26
}

Definition at line 246 of file mesh.hpp.

◆ vtk_quadratic_pyramid

const int mfem::Mesh::vtk_quadratic_pyramid
staticprotected
Initial value:
=
{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}

Definition at line 244 of file mesh.hpp.

◆ vtk_quadratic_tet

const int mfem::Mesh::vtk_quadratic_tet
staticprotected
Initial value:
=
{ 0, 1, 2, 3, 4, 7, 5, 6, 8, 9 }

Definition at line 243 of file mesh.hpp.

◆ vtk_quadratic_wedge

const int mfem::Mesh::vtk_quadratic_wedge
staticprotected
Initial value:
=
{ 0, 2, 1, 3, 5, 4, 8, 7, 6, 11, 10, 9, 12, 14, 13, 17, 16, 15}

Definition at line 245 of file mesh.hpp.


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