MFEM
v3.3.2
Finite element discretization library
|
#include <mesh.hpp>
Classes | |
struct | FaceInfo |
struct | NCFaceInfo |
Public Types | |
enum | Operation { NONE, REFINE, DEREFINE, REBALANCE } |
typedef Geometry::Constants < Geometry::SEGMENT > | seg_t |
typedef Geometry::Constants < Geometry::TRIANGLE > | tri_t |
typedef Geometry::Constants < Geometry::SQUARE > | quad_t |
typedef Geometry::Constants < Geometry::TETRAHEDRON > | tet_t |
typedef Geometry::Constants < Geometry::CUBE > | hex_t |
Public Member Functions | |
Mesh () | |
Mesh (const Mesh &mesh, bool copy_nodes=true) | |
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 () |
Finalize the construction of the secondary topology (connectivity) data of a Mesh. More... | |
void | Finalize (bool refine=false, bool fix_orientation=false) |
Finalize the construction of a general Mesh. More... | |
void | SetAttributes () |
void | GetGeckoElementReordering (Array< int > &ordering) |
void | ReorderElements (const Array< int > &ordering, bool reorder_vertices=true) |
Mesh (int nx, int ny, int nz, Element::Type type, int generate_edges=0, double sx=1.0, double sy=1.0, double sz=1.0) | |
Mesh (int nx, int ny, Element::Type type, int generate_edges=0, double sx=1.0, double sy=1.0) | |
Mesh (int n, double sx=1.0) | |
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... | |
Mesh (Mesh *orig_mesh, int ref_factor, int ref_type) | |
Create a uniformly refined (by any factor) version of orig_mesh. 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... | |
virtual long | ReduceInt (int value) const |
Utility function: sum integers from all processors (Allreduce). More... | |
long | GetGlobalNE () const |
Return the total (global) number of elements. 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 |
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 Element * | GetElement (int i) const |
Element * | GetElement (int i) |
const Element * | GetBdrElement (int i) const |
Element * | GetBdrElement (int i) |
const Element * | GetFace (int i) const |
int | GetFaceBaseGeometry (int i) const |
int | GetElementBaseGeometry (int i=0) const |
int | GetBdrElementBaseGeometry (int i=0) const |
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 > &, Array< int > &) 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... | |
Table * | GetFaceEdgeTable () const |
Returns the face-to-edge Table (3D) More... | |
Table * | GetEdgeVertexTable () const |
Returns the edge-to-vertex Table (3D) More... | |
void | GetElementFaces (int i, Array< int > &, Array< int > &) const |
Return the indices and the orientations of all faces of element i. More... | |
void | GetBdrElementFace (int i, int *, int *) 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... | |
int | GetElementType (int i) const |
Returns the type of element i. More... | |
int | 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) |
ElementTransformation * | GetElementTransformation (int i) |
Returns the transformation defining the i-th element. More... | |
void | GetElementTransformation (int i, const Vector &nodes, IsoparametricTransformation *ElTr) |
ElementTransformation * | GetBdrElementTransformation (int i) |
Returns the transformation defining the i-th boundary element. More... | |
void | GetBdrElementTransformation (int i, IsoparametricTransformation *ElTr) |
void | GetFaceTransformation (int i, IsoparametricTransformation *FTr) |
ElementTransformation * | GetFaceTransformation (int FaceNo) |
Returns the transformation defining the given face element. More... | |
void | GetEdgeTransformation (int i, IsoparametricTransformation *EdTr) |
ElementTransformation * | GetEdgeTransformation (int EdgeNo) |
Returns the transformation defining the given face element. More... | |
FaceElementTransformations * | GetFaceElementTransformations (int FaceNo, int mask=31) |
FaceElementTransformations * | GetInteriorFaceTransformations (int FaceNo) |
FaceElementTransformations * | GetBdrFaceTransformations (int BdrElemNo) |
bool | FaceIsInterior (int FaceNo) const |
Return true if the given face is interior. More... | |
void | GetFaceElements (int Face, int *Elem1, int *Elem2) |
void | GetFaceInfos (int Face, int *Inf1, int *Inf2) |
int | GetFaceGeometryType (int Face) const |
int | GetFaceElementType (int Face) const |
int | CheckElementOrientation (bool fix_it=true) |
Check 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... | |
const Table & | ElementToElementTable () |
const Table & | ElementToFaceTable () const |
const Table & | ElementToEdgeTable () const |
Table * | GetVertexToElementTable () |
The returned Table must be destroyed by the caller. More... | |
Table * | GetFaceToElementTable () const |
virtual 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) |
void | SetNode (int i, const double *coord) |
void | MoveNodes (const Vector &displacements) |
void | GetNodes (Vector &node_coord) const |
void | SetNodes (const Vector &node_coord) |
GridFunction * | GetNodes () |
Return a pointer to the internal node GridFunction (may be NULL). More... | |
const GridFunction * | GetNodes () 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... | |
void | SetNodalFESpace (FiniteElementSpace *nfes) |
void | SetNodalGridFunction (GridFunction *nodes, bool make_owner=false) |
const FiniteElementSpace * | GetNodalFESpace () const |
void | SetCurvature (int order, bool discont=false, int space_dim=-1, int ordering=1) |
void | UniformRefinement () |
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 triangles_nonconforming=false) |
bool | Conforming () const |
bool | Nonconforming () const |
const CoarseFineTransformations & | GetRefinementTransforms () |
Operation | GetLastOperation () const |
Return type of last modification of the mesh. More... | |
long | GetSequence () const |
virtual void | PrintXG (std::ostream &out=mfem::out) const |
Print the mesh to the given stream using Netgen/Truegrid format. More... | |
virtual void | Print (std::ostream &out=mfem::out) const |
void | PrintVTK (std::ostream &out) |
void | PrintVTK (std::ostream &out, int ref, int field_data=0) |
void | GetElementColoring (Array< int > &colors, int el0=0) |
void | PrintWithPartitioning (int *partitioning, std::ostream &out, int elem_attr=0) const |
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) |
double | GetElementSize (int i, const Vector &dir) |
double | GetElementVolume (int i) |
void | GetBoundingBox (Vector &min, Vector &max, int ref=2) |
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 &out=mfem::out) |
virtual void | PrintInfo (std::ostream &out=mfem::out) |
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... | |
virtual | ~Mesh () |
Destroys Mesh. More... | |
Methods for Mesh construction. | |
These methods are intended to be used with the init constructor. | |
Element * | NewElement (int geom) |
void | AddVertex (const double *) |
void | AddTri (const int *vi, int attr=1) |
void | AddTriangle (const int *vi, int attr=1) |
void | AddQuad (const int *vi, int attr=1) |
void | AddTet (const int *vi, int attr=1) |
void | AddHex (const int *vi, int attr=1) |
void | AddHexAsTets (const int *vi, int attr=1) |
void | AddElement (Element *elem) |
void | AddBdrElement (Element *elem) |
void | AddBdrSegment (const int *vi, int attr=1) |
void | AddBdrTriangle (const int *vi, int attr=1) |
void | AddBdrQuad (const int *vi, int attr=1) |
void | AddBdrQuadAsTriangles (const int *vi, 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 | FinalizeHexMesh (int generate_edges=0, int refine=0, bool fix_orientation=true) |
Finalize the construction of a hexahedral Mesh. More... | |
NURBS mesh refinement methods | |
void | KnotInsert (Array< KnotVector * > &kv) |
void | DegreeElevate (int t) |
Static Public Member Functions | |
static FiniteElement * | GetTransformationFEforElementType (int) |
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... | |
NURBSExtension * | NURBSext |
Optional NURBS mesh extension. More... | |
NCMesh * | ncmesh |
Optional non-conforming mesh extension. More... | |
Protected Member Functions | |
void | Init () |
void | InitTables () |
void | SetEmpty () |
void | DestroyTables () |
void | DeleteTables () |
void | DestroyPointers () |
void | Destroy () |
Element * | ReadElementWithoutAttr (std::istream &) |
Element * | ReadElement (std::istream &) |
void | ReadMFEMMesh (std::istream &input, bool mfem_v11, 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 | ReadVTKMesh (std::istream &input, int &curved, int &read_gf) |
void | ReadNURBSMesh (std::istream &input, int &curved, int &read_gf) |
void | ReadInlineMesh (std::istream &input, int generate_edges=0) |
void | ReadGmshMesh (std::istream &input) |
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) |
STable3D * | GetFacesTable () |
STable3D * | GetElementToFaceTable (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 *) |
void | Bisection (int i, const DSTable &, int *) |
void | UniformRefinement (int i, const DSTable &, int *, int *, int *) |
void | AverageVertices (int *indexes, int n, int result) |
void | InitRefinementTransforms () |
int | FindCoarseElement (int i) |
void | UpdateNodes () |
Update the nodes of a curved mesh after refinement. More... | |
virtual void | QuadUniformRefinement () |
Refine quadrilateral mesh. More... | |
virtual void | HexUniformRefinement () |
Refine hexahedral mesh. 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... | |
void | DerefineMesh (const Array< int > &derefinements) |
Derefine elements once a list of derefinements is known. 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 | GetLocalQuadToHexTransformation (IsoparametricTransformation &loc, int i) |
Used in GetFaceElementTransformations (...) More... | |
void | GetLocalFaceTransformation (int face_type, int elem_type, IsoparametricTransformation &Transf, int inf) |
Used in GetFaceElementTransformations (...) More... | |
void | ApplyLocalSlaveTransformation (IsoparametricTransformation &transf, const FaceInfo &fi) |
bool | IsSlaveFace (const FaceInfo &fi) const |
void | GetVertexToVertexTable (DSTable &) 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 | InitBaseGeom () |
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, int generate_edges, double sx, double sy, double sz) |
void | Make2D (int nx, int ny, Element::Type type, int generate_edges, double sx, double sy) |
void | Make1D (int n, double sx=1.0) |
Creates a 1D mesh for the interval [0,sx] divided into n equal intervals. 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 | Swap (Mesh &other, bool non_geometry=false) |
void | GetElementData (const Array< Element * > &elem_array, int geom, Array< int > &elem_vtx, Array< int > &attr) const |
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 void | GetElementArrayEdgeTable (const Array< Element * > &elem_array, const DSTable &v_to_v, Table &el_to_edge) |
static void | ShiftL2R (int &, int &, int &) |
static void | Rotate3 (int &, int &, int &) |
Protected Attributes | |
int | Dim |
int | spaceDim |
int | NumOfVertices |
int | NumOfElements |
int | NumOfBdrElements |
int | NumOfEdges |
int | NumOfFaces |
int | BaseGeom |
int | BaseBdrGeom |
int | meshgen |
long | sequence |
Array< Element * > | elements |
Array< Vertex > | vertices |
Array< Element * > | boundary |
Array< Element * > | faces |
Array< FaceInfo > | faces_info |
Array< NCFaceInfo > | nc_faces_info |
Table * | el_to_edge |
Table * | el_to_face |
Table * | el_to_el |
Array< int > | be_to_edge |
Table * | bel_to_edge |
Array< int > | be_to_face |
Table * | face_edge |
Table * | edge_vertex |
IsoparametricTransformation | Transformation |
IsoparametricTransformation | Transformation2 |
IsoparametricTransformation | FaceTransformation |
IsoparametricTransformation | EdgeTransformation |
FaceElementTransformations | FaceElemTr |
CoarseFineTransformations | CoarseFineTr |
GridFunction * | Nodes |
int | own_nodes |
MemAlloc< Tetrahedron, 1024 > | TetMemory |
Operation | last_operation |
Static Protected Attributes | |
static const int | vtk_quadratic_tet [10] |
static const int | vtk_quadratic_hex [27] |
Friends | |
class | ParMesh |
class | ParNCMesh |
class | NURBSExtension |
class | Tetrahedron |
|
protected |
|
explicit |
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.
|
inline |
|
inline |
|
inline |
|
inlineexplicit |
mfem::Mesh::Mesh | ( | const char * | filename, |
int | generate_edges = 0 , |
||
int | refine = 1 , |
||
bool | fix_orientation = true |
||
) |
mfem::Mesh::Mesh | ( | std::istream & | input, |
int | generate_edges = 0 , |
||
int | refine = 1 , |
||
bool | fix_orientation = true |
||
) |
mfem::Mesh::Mesh | ( | Mesh * | mesh_array[], |
int | num_pieces | ||
) |
mfem::Mesh::Mesh | ( | Mesh * | orig_mesh, |
int | ref_factor, | ||
int | ref_type | ||
) |
Create a uniformly refined (by any factor) version of orig_mesh.
[in] | orig_mesh | The starting coarse mesh. |
[in] | ref_factor | The refinement factor, an integer > 1. |
[in] | ref_type | Specify 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.
|
inlinevirtual |
void mfem::Mesh::AddBdrQuad | ( | const int * | vi, |
int | attr = 1 |
||
) |
void mfem::Mesh::AddBdrQuadAsTriangles | ( | const int * | vi, |
int | attr = 1 |
||
) |
void mfem::Mesh::AddBdrSegment | ( | const int * | vi, |
int | attr = 1 |
||
) |
void mfem::Mesh::AddBdrTriangle | ( | const int * | vi, |
int | attr = 1 |
||
) |
void mfem::Mesh::AddHexAsTets | ( | const int * | vi, |
int | attr = 1 |
||
) |
|
protected |
Used in GenerateFaces()
|
protected |
|
protected |
void mfem::Mesh::AddTriangle | ( | const int * | vi, |
int | attr = 1 |
||
) |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
void mfem::Mesh::ChangeVertexDataOwnership | ( | double * | vertices, |
int | len_vertices, | ||
bool | zerocopy = false |
||
) |
int mfem::Mesh::CheckBdrElementOrientation | ( | bool | fix_it = true | ) |
void mfem::Mesh::CheckDisplacements | ( | const Vector & | displacements, |
double & | tmax | ||
) |
int mfem::Mesh::CheckElementOrientation | ( | bool | fix_it = true | ) |
|
inline |
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.
bool mfem::Mesh::DerefineByError | ( | const Vector & | elem_error, |
double | threshold, | ||
int | nc_limit = 0 , |
||
int | op = 1 |
||
) |
|
protected |
void mfem::Mesh::EnsureNCMesh | ( | bool | triangles_nonconforming = false | ) |
|
inline |
|
inline |
|
inline |
Return true if the given face is interior.
|
inlineprotected |
void mfem::Mesh::Finalize | ( | bool | refine = false , |
bool | fix_orientation = false |
||
) |
Finalize the construction of a general Mesh.
This method will:
[in] | refine | If true, prepare the Mesh for conforming refinement of triangular or tetrahedral meshes. |
[in] | fix_orientation | If true, fix the orientation of inverted mesh elements by permuting their vertices. |
void mfem::Mesh::FinalizeHexMesh | ( | int | generate_edges = 0 , |
int | refine = 0 , |
||
bool | fix_orientation = true |
||
) |
void mfem::Mesh::FinalizeQuadMesh | ( | int | generate_edges = 0 , |
int | refine = 0 , |
||
bool | fix_orientation = true |
||
) |
void mfem::Mesh::FinalizeTetMesh | ( | int | generate_edges = 0 , |
int | refine = 0 , |
||
bool | fix_orientation = true |
||
) |
void mfem::Mesh::FinalizeTopology | ( | ) |
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().
void mfem::Mesh::FinalizeTriMesh | ( | int | generate_edges = 0 , |
int | refine = 0 , |
||
bool | fix_orientation = true |
||
) |
|
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.
Reimplemented in mfem::ParMesh.
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 non-conforming refinement (i.e., with hanging-nodes) of triangles, quadrilaterals and hexahedrons. 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).
void mfem::Mesh::GeneralRefinement | ( | const Array< int > & | el_to_refine, |
int | nonconforming = -1 , |
||
int | nc_limit = 0 |
||
) |
int * mfem::Mesh::GeneratePartitioning | ( | int | nparts, |
int | part_method = 1 |
||
) |
|
inline |
|
inline |
|
inline |
void mfem::Mesh::GetBdrElementAdjacentElement | ( | int | bdr_el, |
int & | el, | ||
int & | info | ||
) | const |
|
inline |
int mfem::Mesh::GetBdrElementEdgeIndex | ( | int | i | ) | const |
void mfem::Mesh::GetBdrElementFace | ( | int | i, |
int * | f, | ||
int * | o | ||
) | const |
ElementTransformation * mfem::Mesh::GetBdrElementTransformation | ( | int | i | ) |
void mfem::Mesh::GetBdrElementTransformation | ( | int | i, |
IsoparametricTransformation * | ElTr | ||
) |
int mfem::Mesh::GetBdrElementType | ( | int | i | ) | const |
|
inline |
FaceElementTransformations * mfem::Mesh::GetBdrFaceTransformations | ( | int | BdrElemNo | ) |
void mfem::Mesh::GetBdrPointMatrix | ( | int | i, |
DenseMatrix & | pointmat | ||
) | const |
void mfem::Mesh::GetEdgeTransformation | ( | int | i, |
IsoparametricTransformation * | EdTr | ||
) |
ElementTransformation * mfem::Mesh::GetEdgeTransformation | ( | int | EdgeNo | ) |
Table * mfem::Mesh::GetEdgeVertexTable | ( | ) | const |
void mfem::Mesh::GetEdgeVertices | ( | int | i, |
Array< int > & | vert | ||
) | const |
|
inline |
|
inline |
void mfem::Mesh::GetElementColoring | ( | Array< int > & | colors, |
int | el0 = 0 |
||
) |
|
protected |
|
inline |
double mfem::Mesh::GetElementSize | ( | int | i, |
int | type = 0 |
||
) |
double mfem::Mesh::GetElementSize | ( | int | i, |
const Vector & | dir | ||
) |
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.
|
protected |
void mfem::Mesh::GetElementTransformation | ( | int | i, |
IsoparametricTransformation * | ElTr | ||
) |
ElementTransformation * mfem::Mesh::GetElementTransformation | ( | int | i | ) |
void mfem::Mesh::GetElementTransformation | ( | int | i, |
const Vector & | nodes, | ||
IsoparametricTransformation * | ElTr | ||
) |
int mfem::Mesh::GetElementType | ( | int | i | ) | const |
|
inline |
Table * mfem::Mesh::GetFaceEdgeTable | ( | ) | const |
void mfem::Mesh::GetFaceElements | ( | int | Face, |
int * | Elem1, | ||
int * | Elem2 | ||
) |
FaceElementTransformations * mfem::Mesh::GetFaceElementTransformations | ( | int | FaceNo, |
int | mask = 31 |
||
) |
Returns (a pointer to a structure 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.
void mfem::Mesh::GetFaceInfos | ( | int | Face, |
int * | Inf1, | ||
int * | Inf2 | ||
) |
Table * mfem::Mesh::GetFaceToElementTable | ( | ) | const |
void mfem::Mesh::GetFaceTransformation | ( | int | i, |
IsoparametricTransformation * | FTr | ||
) |
ElementTransformation * mfem::Mesh::GetFaceTransformation | ( | int | FaceNo | ) |
|
inline |
void mfem::Mesh::GetGeckoElementReordering | ( | Array< int > & | ordering | ) |
|
inline |
|
inline |
|
inline |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
inline |
|
inline |
|
inline |
|
inline |
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.
|
inline |
Return a pointer to the internal node GridFunction (may be NULL).
|
inline |
void mfem::Mesh::GetNodes | ( | GridFunction & | nodes | ) | const |
Return the mesh nodes/vertices projected on the given GridFunction.
int mfem::Mesh::GetNumFaces | ( | ) | const |
|
inline |
void mfem::Mesh::GetPointMatrix | ( | int | i, |
DenseMatrix & | pointmat | ||
) | const |
|
staticprotected |
const CoarseFineTransformations & mfem::Mesh::GetRefinementTransforms | ( | ) |
|
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.
|
static |
|
staticprotected |
|
inline |
|
inline |
Table * mfem::Mesh::GetVertexToElementTable | ( | ) |
|
protected |
|
inlineprotected |
|
protectedvirtual |
|
protected |
|
protected |
|
protected |
void mfem::Mesh::KnotInsert | ( | Array< KnotVector * > & | kv | ) |
|
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.
|
protected |
|
protected |
|
protectedvirtual |
This function is not public anymore. Use GeneralRefinement instead.
Reimplemented in mfem::ParMesh.
|
protected |
|
protected |
|
protected |
|
protectedvirtual |
Reimplemented in mfem::ParMesh.
|
inline |
void mfem::Mesh::MesquiteSmooth | ( | const int | mesquite_option = 0 | ) |
Definition at line 1144 of file mesquite.cpp.
void mfem::Mesh::MoveNodes | ( | const Vector & | displacements | ) |
void mfem::Mesh::MoveVertices | ( | const Vector & | displacements | ) |
void mfem::Mesh::NewNodes | ( | GridFunction & | nodes, |
bool | make_owner = false |
||
) |
Replace the internal node GridFunction with the given GridFunction.
|
protectedvirtual |
NC version of GeneralDerefinement.
Reimplemented in mfem::ParMesh.
|
protectedvirtual |
This function is not public anymore. Use GeneralRefinement instead.
Reimplemented in mfem::ParMesh.
|
protectedvirtual |
|
inline |
|
inlinevirtual |
Print the mesh to the given stream using the default MFEM mesh format.
Reimplemented in mfem::ParMesh.
|
staticprotected |
void mfem::Mesh::PrintElementsWithPartitioning | ( | int * | partitioning, |
std::ostream & | out, | ||
int | interior_faces = 0 |
||
) |
|
staticprotected |
|
protected |
|
inlinevirtual |
Reimplemented in mfem::ParMesh.
void mfem::Mesh::PrintSurfaces | ( | const Table & | Aface_face, |
std::ostream & | out | ||
) | const |
|
protected |
void mfem::Mesh::PrintVTK | ( | std::ostream & | out | ) |
Print the mesh in VTK format (linear and quadratic meshes only).
void mfem::Mesh::PrintVTK | ( | std::ostream & | out, |
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.
void mfem::Mesh::PrintWithPartitioning | ( | int * | partitioning, |
std::ostream & | out, | ||
int | elem_attr = 0 |
||
) | const |
Prints the mesh with bdr elements given by the boundary of the subdomains, so that the boundary of subdomain i has bdr attribute i+1.
|
virtual |
Print the mesh to the given stream using Netgen/Truegrid format.
Reimplemented in mfem::ParMesh.
|
protectedvirtual |
Refine quadrilateral mesh.
Reimplemented in mfem::ParMesh.
void mfem::Mesh::RandomRefinement | ( | double | prob, |
bool | aniso = false , |
||
int | nonconforming = -1 , |
||
int | nc_limit = 0 |
||
) |
|
protected |
Definition at line 1267 of file mesh_readers.cpp.
|
protected |
|
protected |
|
protected |
Definition at line 858 of file mesh_readers.cpp.
|
protected |
Definition at line 706 of file mesh_readers.cpp.
|
protected |
Definition at line 110 of file mesh_readers.cpp.
|
protected |
Definition at line 28 of file mesh_readers.cpp.
|
protected |
Definition at line 144 of file mesh_readers.cpp.
|
protected |
Definition at line 206 of file mesh_readers.cpp.
|
protected |
Definition at line 665 of file mesh_readers.cpp.
|
protected |
Definition at line 260 of file mesh_readers.cpp.
|
protected |
Definition at line 364 of file mesh_readers.cpp.
|
inlineprotected |
|
inlinevirtual |
Utility function: sum integers from all processors (Allreduce).
Reimplemented in mfem::ParMesh.
void mfem::Mesh::RefineAtVertex | ( | const Vertex & | vert, |
double | eps = 0.0 , |
||
int | nonconforming = -1 |
||
) |
bool mfem::Mesh::RefineByError | ( | const Array< double > & | elem_error, |
double | threshold, | ||
int | nonconforming = -1 , |
||
int | nc_limit = 0 |
||
) |
bool mfem::Mesh::RefineByError | ( | const Vector & | elem_error, |
double | threshold, | ||
int | nonconforming = -1 , |
||
int | nc_limit = 0 |
||
) |
void mfem::Mesh::RemoveInternalBoundaries | ( | ) |
void mfem::Mesh::RemoveUnusedVertices | ( | ) |
void mfem::Mesh::ReorderElements | ( | const Array< int > & | ordering, |
bool | reorder_vertices = true |
||
) |
|
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).
Reimplemented in mfem::ParMesh.
|
inlinestaticprotected |
|
inline |
void mfem::Mesh::SetCurvature | ( | int | order, |
bool | discont = false , |
||
int | space_dim = -1 , |
||
int | ordering = 1 |
||
) |
|
protected |
Determine the mesh generator bitmask meshgen, see MeshGenerator().
void mfem::Mesh::SetNodalFESpace | ( | FiniteElementSpace * | nfes | ) |
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.
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.
|
inline |
|
inlinestaticprotected |
|
protected |
void mfem::Mesh::SwapNodes | ( | GridFunction *& | nodes, |
int & | own_nodes_ | ||
) |
Swap the internal node GridFunction pointer and ownership flag members with the given ones.
void mfem::Mesh::Transform | ( | VectorCoefficient & | deformation | ) |
|
protected |
Uniform Refinement. Element with index i is refined uniformly.
void mfem::Mesh::UniformRefinement | ( | ) |
|
protected |
|
friend |
|
friend |
Array<int> mfem::Mesh::attributes |
Array<int> mfem::Mesh::bdr_attributes |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
NCMesh* mfem::Mesh::ncmesh |
|
protected |
NURBSExtension* mfem::Mesh::NURBSext |
|
protected |
|
protected |
|
protected |
|
staticprotected |
|
staticprotected |