![]() |
MFEM v4.7.0
Finite element discretization library
|
Class for parallel meshes. More...
#include <pmesh.hpp>
Classes | |
struct | Vert3 |
struct | Vert4 |
Public Member Functions | |
ParMesh () | |
Default constructor. Create an empty ParMesh. | |
ParMesh (MPI_Comm comm, Mesh &mesh, int *partitioning_=NULL, int part_method=1) | |
Create a parallel mesh by partitioning a serial Mesh. | |
ParMesh (const ParMesh &pmesh, bool copy_nodes=true) | |
ParMesh (MPI_Comm comm, std::istream &input, bool refine=true, int generate_edges=1, bool fix_orientation=true) | |
Read a parallel mesh, each MPI rank from its own file/stream. | |
MFEM_DEPRECATED | ParMesh (ParMesh *orig_mesh, int ref_factor, int ref_type) |
Deprecated: see ParMesh::MakeRefined. | |
ParMesh (ParMesh &&mesh) | |
Move constructor. Used for named constructors. | |
ParMesh & | operator= (ParMesh &&mesh) |
Move assignment operator. | |
ParMesh & | operator= (const ParMesh &mesh)=delete |
Explicitly delete the copy assignment operator. | |
void | Finalize (bool refine=false, bool fix_orientation=false) override |
Finalize the construction of a general Mesh. | |
void | SetAttributes () override |
Determine the sets of unique attribute values in domain and boundary elements. | |
bool | HasBoundaryElements () const override |
Checks if any rank in the mesh has boundary elements. | |
MPI_Comm | GetComm () const |
int | GetNRanks () const |
int | GetMyRank () const |
int | GetLocalElementNum (long long global_element_num) const |
long long | GetGlobalElementNum (int local_element_num) const |
Map a local element number to a global element number. | |
void | GetGlobalVertexIndices (Array< HYPRE_BigInt > &gi) const |
AMR meshes are not supported. | |
void | GetGlobalEdgeIndices (Array< HYPRE_BigInt > &gi) const |
AMR meshes are not supported. | |
void | GetGlobalFaceIndices (Array< HYPRE_BigInt > &gi) const |
AMR meshes are not supported. | |
void | GetGlobalElementIndices (Array< HYPRE_BigInt > &gi) const |
AMR meshes are supported. | |
int | GetNGroups () const |
void | GetSharedEdgeCommunicator (GroupCommunicator &sedge_comm) const |
Get the shared edges GroupCommunicator. | |
void | GetSharedVertexCommunicator (GroupCommunicator &svert_comm) const |
Get the shared vertices GroupCommunicator. | |
void | GetSharedQuadCommunicator (GroupCommunicator &squad_comm) const |
Get the shared face quadrilaterals GroupCommunicator. | |
void | GetSharedTriCommunicator (GroupCommunicator &stria_comm) const |
Get the shared face triangles GroupCommunicator. | |
void | GenerateOffsets (int N, HYPRE_BigInt loc_sizes[], Array< HYPRE_BigInt > *offsets[]) const |
bool | FaceIsTrueInterior (int FaceNo) const |
void | ExchangeFaceNbrData () |
void | ExchangeFaceNbrNodes () |
void | SetCurvature (int order, bool discont=false, int space_dim=-1, int ordering=1) override |
Set the curvature of the mesh nodes using the given polynomial degree. | |
void | SetNodalFESpace (FiniteElementSpace *nfes) override |
void | SetNodalFESpace (ParFiniteElementSpace *npfes) |
int | GetNFaceNeighbors () const |
int | GetNFaceNeighborElements () const |
int | GetFaceNbrGroup (int fn) const |
int | GetFaceNbrRank (int fn) const |
void | GetFaceNbrElementFaces (int i, Array< int > &faces, Array< int > &orientation) const |
Table * | GetFaceToAllElementTable () const |
FaceElementTransformations * | GetFaceElementTransformations (int FaceNo, int mask=31) override |
void | GetFaceElementTransformations (int FaceNo, FaceElementTransformations &FElTr, IsoparametricTransformation &ElTr1, IsoparametricTransformation &ElTr2, int mask=31) const override |
Variant of GetFaceElementTransformations using a user allocated FaceElementTransformations object. | |
FaceElementTransformations * | GetSharedFaceTransformations (int sf, bool fill2=true) |
Get the FaceElementTransformations for the given shared face (edge 2D) using the shared face index sf. fill2 specify if the information for elem2 of the face should be computed or not. In the returned object, 1 and 2 refer to the local and the neighbor elements, respectively. | |
void | GetSharedFaceTransformations (int sf, FaceElementTransformations &FElTr, IsoparametricTransformation &ElTr1, IsoparametricTransformation &ElTr2, bool fill2=true) const |
Variant of GetSharedFaceTransformations using a user allocated FaceElementTransformations object. | |
FaceElementTransformations * | GetSharedFaceTransformationsByLocalIndex (int FaceNo, bool fill2=true) |
Get the FaceElementTransformations for the given shared face (edge 2D) using the face index FaceNo. fill2 specify if the information for elem2 of the face should be computed or not. In the returned object, 1 and 2 refer to the local and the neighbor elements, respectively. | |
void | GetSharedFaceTransformationsByLocalIndex (int FaceNo, FaceElementTransformations &FElTr, IsoparametricTransformation &ElTr1, IsoparametricTransformation &ElTr2, bool fill2=true) const |
Variant of GetSharedFaceTransformationsByLocalIndex using a user allocated FaceElementTransformations object. | |
ElementTransformation * | GetFaceNbrElementTransformation (int FaceNo) |
Returns a pointer to the transformation defining the i-th face neighbor. | |
void | GetFaceNbrElementTransformation (int FaceNo, IsoparametricTransformation &ElTr) const |
Variant of GetFaceNbrElementTransformation using a user allocated IsoparametricTransformation object. | |
real_t | GetFaceNbrElementSize (int i, int type=0) |
int | GetNSharedFaces () const |
Return the number of shared faces (3D), edges (2D), vertices (1D) | |
int | GetSharedFace (int sface) const |
Return the local face index for the given shared face. | |
int | GetNFbyType (FaceType type) const override |
Returns the number of local faces according to the requested type, does not count master non-conforming faces. | |
void | GenerateBoundaryElements () override |
MFEM_DEPRECATED void | ReorientTetMesh () override |
See the remarks for the serial version in mesh.hpp. | |
long long | ReduceInt (int value) const override |
Utility function: sum integers from all processors (Allreduce). | |
void | Rebalance () |
void | Rebalance (const Array< int > &partition) |
void | ParPrint (std::ostream &out, const std::string &comments="") const |
void | SetPrintShared (bool print) |
void | Print (std::ostream &out=mfem::out, const std::string &comments="") const override |
void | Save (const std::string &fname, int precision=16) const override |
void | Print (adios2stream &out) const override |
void | PrintXG (std::ostream &out=mfem::out) const override |
void | PrintAsOne (std::ostream &out=mfem::out, const std::string &comments="") const |
void | PrintAsSerial (std::ostream &out=mfem::out, const std::string &comments="") const |
Mesh | GetSerialMesh (int save_rank) const |
void | SaveAsOne (const std::string &fname, int precision=16) const |
void | PrintAsOneXG (std::ostream &out=mfem::out) |
Old mesh format (Netgen/Truegrid) version of 'PrintAsOne'. | |
void | PrintVTU (std::string pathname, VTKFormat format=VTKFormat::ASCII, bool high_order_output=false, int compression_level=0, bool bdr=false) override |
void | Load (std::istream &input, int generate_edges=0, int refine=1, bool fix_orientation=true) override |
Parallel version of Mesh::Load(). | |
void | GetBoundingBox (Vector &p_min, Vector &p_max, int ref=2) |
void | GetCharacteristics (real_t &h_min, real_t &h_max, real_t &kappa_min, real_t &kappa_max) |
void | Swap (ParMesh &other) |
void | PrintInfo (std::ostream &out=mfem::out) override |
Print various parallel mesh stats. | |
int | FindPoints (DenseMatrix &point_mat, Array< int > &elem_ids, Array< IntegrationPoint > &ips, bool warn=true, InverseElementTransformation *inv_trans=NULL) override |
Find the ids of the elements that contain the given points, and their corresponding reference coordinates. | |
void | PrintSharedEntities (const std::string &fname_prefix) const |
Debugging method. | |
virtual | ~ParMesh () |
These methods require group > 0 | |
int | GroupNVertices (int group) const |
int | GroupNEdges (int group) const |
int | GroupNTriangles (int group) const |
int | GroupNQuadrilaterals (int group) const |
int | GroupVertex (int group, int i) const |
void | GroupEdge (int group, int i, int &edge, int &o) const |
void | GroupTriangle (int group, int i, int &face, int &o) const |
void | GroupQuadrilateral (int group, int i, int &face, int &o) const |
![]() | |
Mesh () | |
Mesh (const Mesh &mesh, bool copy_nodes=true) | |
Mesh (Mesh &&mesh) | |
Move constructor, useful for using a Mesh as a function return value. | |
Mesh & | operator= (Mesh &&mesh) |
Move assignment operator. | |
Mesh & | operator= (const Mesh &mesh)=delete |
Explicitly delete the copy assignment operator. | |
Mesh (real_t *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. | |
Mesh (int Dim_, int NVert, int NElem, int NBdrElem=0, int spaceDim_=-1) | |
Init constructor: begin the construction of a Mesh object. | |
Mesh (const std::string &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) | |
void | Swap (Mesh &other, bool non_geometry) |
void | Clear () |
Clear the contents of the Mesh. | |
virtual | ~Mesh () |
Destroys Mesh. | |
Element * | NewElement (int geom) |
int | AddVertex (real_t x, real_t y=0.0, real_t z=0.0) |
int | AddVertex (const real_t *coords) |
int | AddVertex (const Vector &coords) |
void | AddVertexParents (int i, int p1, int p2) |
Mark vertex i as nonconforming, with parent vertices p1 and p2. | |
int | AddVertexAtMeanCenter (const int *vi, const int nverts, int dim=3) |
int | AddSegment (int v1, int v2, int attr=1) |
Adds a segment to the mesh given by 2 vertices v1 and v2. | |
int | AddSegment (const int *vi, int attr=1) |
Adds a segment to the mesh given by 2 vertices vi. | |
int | AddTriangle (int v1, int v2, int v3, int attr=1) |
Adds a triangle to the mesh given by 3 vertices v1 through v3. | |
int | AddTriangle (const int *vi, int attr=1) |
Adds a triangle to the mesh given by 3 vertices vi. | |
int | AddTri (const int *vi, int attr=1) |
Adds a triangle to the mesh given by 3 vertices vi. | |
int | AddQuad (int v1, int v2, int v3, int v4, int attr=1) |
Adds a quadrilateral to the mesh given by 4 vertices v1 through v4. | |
int | AddQuad (const int *vi, int attr=1) |
Adds a quadrilateral to the mesh given by 4 vertices vi. | |
int | AddTet (int v1, int v2, int v3, int v4, int attr=1) |
Adds a tetrahedron to the mesh given by 4 vertices v1 through v4. | |
int | AddTet (const int *vi, int attr=1) |
Adds a tetrahedron to the mesh given by 4 vertices vi. | |
int | AddWedge (int v1, int v2, int v3, int v4, int v5, int v6, int attr=1) |
Adds a wedge to the mesh given by 6 vertices v1 through v6. | |
int | AddWedge (const int *vi, int attr=1) |
Adds a wedge to the mesh given by 6 vertices vi. | |
int | AddPyramid (int v1, int v2, int v3, int v4, int v5, int attr=1) |
Adds a pyramid to the mesh given by 5 vertices v1 through v5. | |
int | AddPyramid (const int *vi, int attr=1) |
Adds a pyramid to the mesh given by 5 vertices vi. | |
int | AddHex (int v1, int v2, int v3, int v4, int v5, int v6, int v7, int v8, int attr=1) |
Adds a hexahedron to the mesh given by 8 vertices v1 through v8. | |
int | AddHex (const int *vi, int attr=1) |
Adds a hexahedron to the mesh given by 8 vertices vi. | |
void | AddHexAsTets (const int *vi, int attr=1) |
Adds 6 tetrahedrons to the mesh by splitting a hexahedron given by 8 vertices vi. | |
void | AddHexAsWedges (const int *vi, int attr=1) |
Adds 2 wedges to the mesh by splitting a hexahedron given by 8 vertices vi. | |
void | AddHexAsPyramids (const int *vi, int attr=1) |
Adds 6 pyramids to the mesh by splitting a hexahedron given by 8 vertices vi. | |
void | AddHexAs24TetsWithPoints (int *vi, std::map< std::array< int, 4 >, int > &hex_face_verts, int attr=1) |
Adds 24 tetrahedrons to the mesh by splitting a hexahedron. | |
void | AddQuadAs4TrisWithPoints (int *vi, int attr=1) |
Adds 4 triangles to the mesh by splitting a quadrilateral given by 4 vertices vi. | |
void | AddQuadAs5QuadsWithPoints (int *vi, int attr=1) |
Adds 5 quadrilaterals to the mesh by splitting a quadrilateral given by 4 vertices vi. | |
int | AddElement (Element *elem) |
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 | FinalizeTriMesh (int generate_edges=0, int refine=0, bool fix_orientation=true) |
Finalize the construction of a triangular Mesh. | |
void | FinalizeQuadMesh (int generate_edges=0, int refine=0, bool fix_orientation=true) |
Finalize the construction of a quadrilateral Mesh. | |
void | FinalizeTetMesh (int generate_edges=0, int refine=0, bool fix_orientation=true) |
Finalize the construction of a tetrahedral Mesh. | |
void | FinalizeWedgeMesh (int generate_edges=0, int refine=0, bool fix_orientation=true) |
Finalize the construction of a wedge Mesh. | |
void | FinalizeHexMesh (int generate_edges=0, int refine=0, bool fix_orientation=true) |
Finalize the construction of a hexahedral Mesh. | |
void | FinalizeMesh (int refine=0, bool fix_orientation=true) |
Finalize the construction of any type of Mesh. | |
void | FinalizeTopology (bool generate_bdr=true) |
Finalize the construction of the secondary topology (connectivity) data of a Mesh. | |
int | CheckElementOrientation (bool fix_it=true) |
Check (and optionally attempt to fix) the orientation of the elements. | |
int | CheckBdrElementOrientation (bool fix_it=true) |
Check the orientation of the boundary elements. | |
void | RemoveUnusedVertices () |
Remove unused vertices and rebuild mesh connectivity. | |
void | RemoveInternalBoundaries () |
real_t | GetGeckoElementOrdering (Array< int > &ordering, int iterations=4, int window=4, int period=2, int seed=0, bool verbose=false, real_t 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, real_t sx=1.0, real_t sy=1.0, real_t sz=1.0, bool sfc_ordering=true) |
Deprecated: see MakeCartesian3D. | |
MFEM_DEPRECATED | Mesh (int nx, int ny, Element::Type type, bool generate_edges=false, real_t sx=1.0, real_t sy=1.0, bool sfc_ordering=true) |
Deprecated: see MakeCartesian2D. | |
MFEM_DEPRECATED | Mesh (int n, real_t sx=1.0) |
Deprecated: see MakeCartesian1D. | |
MFEM_DEPRECATED | Mesh (Mesh *orig_mesh, int ref_factor, int ref_type) |
Deprecated: see MakeRefined. | |
int | Dimension () const |
Dimension of the reference space used within the elements. | |
int | SpaceDimension () const |
Dimension of the physical space containing the mesh. | |
int | EulerNumber () const |
Equals 1 + num_holes - num_loops. | |
int | EulerNumber2D () const |
Equals 1 - num_holes. | |
int | MeshGenerator () const |
Get the mesh generator/type. | |
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. | |
int | GetNumGeometries (int dim) const |
Return the number of geometries of the given dimension present in the mesh. | |
void | GetGeometries (int dim, Array< Geometry::Type > &el_geoms) const |
Return all element geometries of the given dimension present in the mesh. | |
void | GetBoundingBox (Vector &min, Vector &max, int ref=2) |
Returns the minimum and maximum corners of the mesh bounding box. | |
void | GetCharacteristics (real_t &h_min, real_t &h_max, real_t &kappa_min, real_t &kappa_max, Vector *Vh=NULL, Vector *Vk=NULL) |
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. | |
int | GetNE () const |
Returns number of elements. | |
int | GetNBE () const |
Returns number of boundary elements. | |
int | GetNEdges () const |
Return the number of edges. | |
int | GetNFaces () const |
Return the number of faces in a 3D mesh. | |
int | GetNumFaces () const |
Return the number of faces (3D), edges (2D) or vertices (1D). | |
int | GetNumFacesWithGhost () const |
Return the number of faces (3D), edges (2D) or vertices (1D) including ghost faces. | |
long long | GetGlobalNE () const |
Return the total (global) number of elements. | |
const real_t * | GetVertex (int i) const |
Return pointer to vertex i's coordinates. | |
real_t * | GetVertex (int i) |
Return pointer to vertex i's coordinates. | |
const Element * | GetElement (int i) const |
Return pointer to the i'th element object. | |
Element * | GetElement (int i) |
Return pointer to the i'th element object. | |
const Element * | GetBdrElement (int i) const |
Return pointer to the i'th boundary element object. | |
Element * | GetBdrElement (int i) |
Return pointer to the i'th boundary element object. | |
const Element * | GetFace (int i) const |
Return pointer to the i'th face element object. | |
const Element *const * | GetElementsArray () const |
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 |
int | GetAttribute (int i) const |
Return the attribute of element i. | |
void | SetAttribute (int i, int attr) |
Set the attribute of element i. | |
int | GetBdrAttribute (int i) const |
Return the attribute of boundary element i. | |
void | SetBdrAttribute (int i, int attr) |
Set the attribute of boundary element i. | |
int | GetPatchAttribute (int i) const |
Return the attribute of patch i, for a NURBS mesh. | |
void | SetPatchAttribute (int i, int attr) |
Set the attribute of patch i, for a NURBS mesh. | |
int | GetPatchBdrAttribute (int i) const |
Return the attribute of patch boundary element i, for a NURBS mesh. | |
void | SetPatchBdrAttribute (int i, int attr) |
Set the attribute of patch boundary element i, for a NURBS mesh. | |
Element::Type | GetElementType (int i) const |
Returns the type of element i. | |
Element::Type | GetBdrElementType (int i) const |
Returns the type of boundary element i. | |
MFEM_DEPRECATED Geometry::Type | GetFaceGeometryType (int Face) const |
Deprecated in favor of Mesh::GetFaceGeometry. | |
Element::Type | GetFaceElementType (int Face) const |
Geometry::Type | GetFaceGeometry (int i) const |
Return the Geometry::Type associated with face i. | |
Geometry::Type | GetElementGeometry (int i) const |
Geometry::Type | GetBdrElementGeometry (int i) const |
MFEM_DEPRECATED Geometry::Type | GetFaceBaseGeometry (int i) const |
Deprecated in favor of Mesh::GetFaceGeometry. | |
Geometry::Type | GetElementBaseGeometry (int i) const |
Geometry::Type | GetBdrElementBaseGeometry (int i) const |
bool | FaceIsInterior (int FaceNo) const |
Return true if the given face is interior. | |
real_t | GetElementSize (int i, int type=0) |
Get the size of the i-th element relative to the perfect reference element. | |
real_t | GetElementSize (int i, const Vector &dir) |
real_t | GetElementSize (ElementTransformation *T, int type=0) const |
real_t | GetElementVolume (int i) |
void | GetElementCenter (int i, Vector ¢er) |
void | GetElementJacobian (int i, DenseMatrix &J, const IntegrationPoint *ip=NULL) |
void | GetElementVertices (int i, Array< int > &v) const |
Returns the indices of the vertices of element i. | |
void | GetBdrElementVertices (int i, Array< int > &v) const |
Returns the indices of the vertices of boundary element i. | |
void | GetElementEdges (int i, Array< int > &edges, Array< int > &cor) const |
Return the indices and the orientations of all edges of element i. | |
void | GetBdrElementEdges (int i, Array< int > &edges, Array< int > &cor) const |
Return the indices and the orientations of all edges of bdr element i. | |
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. | |
void | GetEdgeVertices (int i, Array< int > &vert) const |
Returns the indices of the vertices of edge i. | |
void | GetElementFaces (int i, Array< int > &faces, Array< int > &ori) const |
Return the indices and the orientations of all faces of element i. | |
Array< int > | FindFaceNeighbors (const int elem) const |
Returns the sorted, unique indices of elements sharing a face with element elem, including elem. | |
void | GetBdrElementFace (int i, int *f, int *o) 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. | |
MFEM_DEPRECATED void | GetBdrElementAdjacentElement2 (int bdr_el, int &el, int &info) const |
Deprecated. | |
int | GetBdrElementFaceIndex (int be_idx) const |
Return the local face (codimension-1) index for the given boundary element index. | |
MFEM_DEPRECATED int | GetBdrFace (int i) const |
Deprecated in favor of GetBdrElementFaceIndex(). | |
MFEM_DEPRECATED int | GetBdrElementEdgeIndex (int i) const |
Table * | GetVertexToElementTable () |
Table * | GetFaceToElementTable () const |
Table * | GetFaceEdgeTable () const |
Table * | GetEdgeVertexTable () const |
void | GetVertexToVertexTable (DSTable &) const |
const Table & | ElementToElementTable () |
const Table & | ElementToFaceTable () const |
const Table & | ElementToEdgeTable () const |
Array< int > | GetFaceToBdrElMap () const |
void | GetElementTransformation (int i, IsoparametricTransformation *ElTr) const |
Builds the transformation defining the i-th element in ElTr. ElTr must be allocated in advance and will be owned by the caller. | |
ElementTransformation * | GetElementTransformation (int i) |
Returns a pointer to the transformation defining the i-th element. | |
void | GetElementTransformation (int i, const Vector &nodes, IsoparametricTransformation *ElTr) const |
Builds the transformation defining the i-th element in ElTr assuming position of the vertices/nodes are given by nodes. ElTr must be allocated in advance and will be owned by the caller. | |
ElementTransformation * | GetBdrElementTransformation (int i) |
Returns a pointer to the transformation defining the i-th boundary element. | |
void | GetBdrElementTransformation (int i, IsoparametricTransformation *ElTr) const |
Builds the transformation defining the i-th boundary element in ElTr. ElTr must be allocated in advance and will be owned by the caller. | |
ElementTransformation * | GetFaceTransformation (int FaceNo) |
Returns a pointer to the transformation defining the given face element. | |
void | GetFaceTransformation (int i, IsoparametricTransformation *FTr) const |
Builds the transformation defining the i-th face element in FTr. FTr must be allocated in advance and will be owned by the caller. | |
void | GetLocalFaceTransformation (int face_type, int elem_type, IsoparametricTransformation &Transf, int info) const |
A helper method that constructs a transformation from the reference space of a face to the reference space of an element. | |
void | GetEdgeTransformation (int i, IsoparametricTransformation *EdTr) const |
Builds the transformation defining the i-th edge element in EdTr. EdTr must be allocated in advance and will be owned by the caller. | |
ElementTransformation * | GetEdgeTransformation (int EdgeNo) |
Returns a pointer to the transformation defining the given edge element. | |
FaceElementTransformations * | GetInteriorFaceTransformations (int FaceNo) |
See GetFaceElementTransformations(). | |
void | GetInteriorFaceTransformations (int FaceNo, FaceElementTransformations &FElTr, IsoparametricTransformation &ElTr1, IsoparametricTransformation &ElTr2) const |
Variant of GetInteriorFaceTransformations using a user allocated FaceElementTransformations object. | |
FaceElementTransformations * | GetBdrFaceTransformations (int BdrElemNo) |
Builds the transformation defining the given boundary face. | |
void | GetBdrFaceTransformations (int BdrElemNo, FaceElementTransformations &FElTr, IsoparametricTransformation &ElTr1, IsoparametricTransformation &ElTr2) const |
Variant of GetBdrFaceTransformations using a user allocated FaceElementTransformations object. | |
const GeometricFactors * | GetGeometricFactors (const IntegrationRule &ir, const int flags, MemoryType d_mt=MemoryType::DEFAULT) |
Return the mesh geometric factors corresponding to the given integration rule. | |
const FaceGeometricFactors * | 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. | |
void | DeleteGeometricFactors () |
Destroy all GeometricFactors stored by the Mesh. | |
void | GetPointMatrix (int i, DenseMatrix &pointmat) const |
void | GetBdrPointMatrix (int i, DenseMatrix &pointmat) const |
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 |
int * | CartesianPartitioning (int nxyz[]) |
int * | GeneratePartitioning (int nparts, int part_method=1) |
void | CheckPartitioning (int *partitioning_) |
void | MoveVertices (const Vector &displacements) |
void | GetVertices (Vector &vert_coord) const |
void | SetVertices (const Vector &vert_coord) |
void | ChangeVertexDataOwnership (real_t *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. | |
void | GetNode (int i, real_t *coord) const |
void | SetNode (int i, const real_t *coord) |
void | MoveNodes (const Vector &displacements) |
void | GetNodes (Vector &node_coord) const |
void | SetNodes (const Vector &node_coord) |
Updates the vertex/node locations. Invokes NodesUpdated(). | |
void | ScaleSubdomains (real_t sf) |
void | ScaleElements (real_t sf) |
void | Transform (void(*f)(const Vector &, Vector &)) |
void | Transform (VectorCoefficient &deformation) |
void | NodesUpdated () |
This function should be called after the mesh node coordinates have been updated externally, e.g. by modifying the internal nodal GridFunction returned by GetNodes(). | |
GridFunction * | GetNodes () |
Return a pointer to the internal node GridFunction (may be NULL). | |
const GridFunction * | GetNodes () const |
bool | OwnsNodes () const |
Return the mesh nodes ownership flag. | |
void | SetNodesOwner (bool nodes_owner) |
Set the mesh nodes ownership flag. | |
void | NewNodes (GridFunction &nodes, bool make_owner=false) |
Replace the internal node GridFunction with the given GridFunction. | |
void | SwapNodes (GridFunction *&nodes, int &own_nodes_) |
Swap the internal node GridFunction pointer and ownership flag members with the given ones. | |
void | GetNodes (GridFunction &nodes) const |
Return the mesh nodes/vertices projected on the given GridFunction. | |
void | SetNodalGridFunction (GridFunction *nodes, bool make_owner=false) |
const FiniteElementSpace * | GetNodalFESpace () const |
void | 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). | |
void | UniformRefinement (int ref_algo=0) |
Refine all mesh elements. | |
void | NURBSCoarsening (int cf=2, real_t tol=1.0e-12) |
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 (real_t prob, bool aniso=false, int nonconforming=-1, int nc_limit=0) |
Refine each element with given probability. Uses GeneralRefinement. | |
void | RefineAtVertex (const Vertex &vert, real_t eps=0.0, int nonconforming=-1) |
Refine elements sharing the specified vertex. Uses GeneralRefinement. | |
bool | RefineByError (const Array< real_t > &elem_error, real_t threshold, int nonconforming=-1, int nc_limit=0) |
bool | RefineByError (const Vector &elem_error, real_t threshold, int nonconforming=-1, int nc_limit=0) |
bool | DerefineByError (Array< real_t > &elem_error, real_t threshold, int nc_limit=0, int op=1) |
bool | DerefineByError (const Vector &elem_error, real_t threshold, int nc_limit=0, int op=1) |
Same as DerefineByError for an error vector. | |
void | EnsureNCMesh (bool simplices_nonconforming=false) |
bool | Conforming () const |
bool | Nonconforming () const |
const CoarseFineTransformations & | GetRefinementTransforms () const |
Operation | GetLastOperation () const |
Return type of last modification of the mesh. | |
long | GetSequence () const |
long | GetNodesSequence () const |
Return the nodes update counter. | |
void | RefineNURBSFromFile (std::string ref_file) |
void | KnotInsert (Array< KnotVector * > &kv) |
For NURBS meshes, insert the new knots in kv, for each direction. | |
void | KnotInsert (Array< Vector * > &kv) |
For NURBS meshes, insert the knots in kv, for each direction. | |
void | KnotRemove (Array< Vector * > &kv) |
For NURBS meshes, remove the knots in kv, for each direction. | |
void | DegreeElevate (int rel_degree, int degree=16) |
std::vector< int > | CreatePeriodicVertexMapping (const std::vector< Vector > &translations, real_t 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. | |
void | GetGeometricParametersFromJacobian (const DenseMatrix &J, real_t &volume, Vector &aspr, Vector &skew, Vector &ori) const |
Computes geometric parameters associated with a Jacobian matrix in 2D/3D. These parameters are (1) Area/Volume, (2) Aspect-ratio (1 in 2D, and 2 non-dimensional and 2 dimensional parameters in 3D. Dimensional parameters are used for target construction in TMOP), (3) skewness (1 in 2D and 3 in 3D), and finally (4) orientation (1 in 2D and 3 in 3D). | |
void | GetElementColoring (Array< int > &colors, int el0=0) |
void | MesquiteSmooth (const int mesquite_option=0) |
void | CheckDisplacements (const Vector &displacements, real_t &tmax) |
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) |
void | PrintBdrVTU (std::string fname, VTKFormat format=VTKFormat::ASCII, bool high_order_output=false, int compression_level=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. | |
void | PrintElementsWithPartitioning (int *partitioning, std::ostream &os, int interior_faces=0) |
void | PrintSurfaces (const Table &Aface_face, std::ostream &os) const |
Print set of disjoint surfaces: | |
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. | |
void | DebugDump (std::ostream &os) const |
Output an NCMesh-compatible debug dump. | |
Static Public Member Functions | |
static ParMesh | MakeRefined (ParMesh &orig_mesh, int ref_factor, int ref_type) |
Create a uniformly refined (by any factor) version of orig_mesh. | |
static ParMesh | MakeSimplicial (ParMesh &orig_mesh) |
![]() | |
static FiniteElement * | GetTransformationFEforElementType (Element::Type) |
Return FiniteElement for reference element of the specified type. | |
static IntegrationPoint | TransformBdrElementToFace (Geometry::Type geom, int o, const IntegrationPoint &ip) |
For the vertex (1D), edge (2D), or face (3D) of a boundary element with the orientation o, return the transformation of the boundary element integration point @ ip to the face element. In 2D, the the orientation is 0 or 1 as returned by GetBdrElementFace, not +/-1. Supports both internal and external boundaries. | |
static int | DecodeFaceInfoOrientation (int info) |
Given a "face info int", return the face orientation. | |
static int | DecodeFaceInfoLocalIndex (int info) |
Given a "face info int", return the local face index. | |
static int | EncodeFaceInfo (int local_face_index, int orientation) |
Given local_face_index and orientation, return the corresponding encoded "face info int". | |
static Mesh | LoadFromFile (const std::string &filename, int generate_edges=0, int refine=1, bool fix_orientation=true) |
static Mesh | MakeCartesian1D (int n, real_t sx=1.0) |
Creates 1D mesh, divided into n equal intervals. | |
static Mesh | MakeCartesian2D (int nx, int ny, Element::Type type, bool generate_edges=false, real_t sx=1.0, real_t sy=1.0, bool sfc_ordering=true) |
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. | |
static Mesh | MakeCartesian3D (int nx, int ny, int nz, Element::Type type, real_t sx=1.0, real_t sy=1.0, real_t sz=1.0, bool sfc_ordering=true) |
Creates a 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. | |
static Mesh | MakeCartesian3DWith24TetsPerHex (int nx, int ny, int nz, real_t sx=1.0, real_t sy=1.0, real_t sz=1.0) |
Creates a mesh for the parallelepiped [0,sx]x[0,sy]x[0,sz], divided into nx*ny*nz*24 tetrahedrons. | |
static Mesh | MakeCartesian2DWith4TrisPerQuad (int nx, int ny, real_t sx=1.0, real_t sy=1.0) |
Creates mesh for the rectangle [0,sx]x[0,sy], divided into nx*ny*4 triangles. | |
static Mesh | MakeCartesian2DWith5QuadsPerQuad (int nx, int ny, real_t sx=1.0, real_t sy=1.0) |
Creates mesh for the rectangle [0,sx]x[0,sy], divided into nx*ny*5 quadrilaterals. | |
static Mesh | MakeRefined (Mesh &orig_mesh, int ref_factor, int ref_type) |
Create a refined (by any factor) version of orig_mesh. | |
static Mesh | MakeRefined (Mesh &orig_mesh, const Array< int > &ref_factors, int ref_type) |
refined ref_factors[i] times in each dimension. | |
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. | |
static void | PrintElementsByGeometry (int dim, const Array< int > &num_elems_by_geom, std::ostream &os) |
Auxiliary method used by PrintCharacteristics(). | |
Public Attributes | |
GroupTopology | gtopo |
bool | have_face_nbr_data |
Array< int > | face_nbr_group |
Array< int > | face_nbr_elements_offset |
Array< int > | face_nbr_vertices_offset |
Array< Element * > | face_nbr_elements |
Array< Vertex > | face_nbr_vertices |
Table | send_face_nbr_elements |
Table | send_face_nbr_vertices |
ParNCMesh * | pncmesh |
int * | partitioning_cache = nullptr |
![]() | |
Array< int > | attributes |
A list of all unique element attributes used by the Mesh. | |
Array< int > | bdr_attributes |
A list of all unique boundary attributes used by the Mesh. | |
AttributeSets | attribute_sets |
Named sets of element attributes. | |
AttributeSets | bdr_attribute_sets |
Named sets of boundary element attributes. | |
NURBSExtension * | NURBSext |
Optional NURBS mesh extension. | |
NCMesh * | ncmesh |
Optional nonconforming mesh extension. | |
Array< GeometricFactors * > | geom_factors |
Optional geometric factors. | |
Array< FaceGeometricFactors * > | face_geom_factors |
Protected Member Functions | |
void | ComputeGlobalElementOffset () const |
ParMesh (const ParNCMesh &pncmesh) | |
Create from a nonconforming mesh. | |
void | ReduceMeshGen () |
void | FinalizeParTopo () |
void | MarkTetMeshForRefinement (const DSTable &v_to_v) override |
int | GetEdgeSplittings (Element *edge, const DSTable &v_to_v, int *middle) |
Return a number(0-1) identifying how the given edge has been split. | |
void | GetFaceSplittings (const int *fv, const HashTable< Hashed2 > &v_to_v, Array< unsigned > &codes) |
Append codes identifying how the given face has been split to codes. | |
bool | DecodeFaceSplittings (HashTable< Hashed2 > &v_to_v, const int *v, const Array< unsigned > &codes, int &pos) |
void | BuildFaceNbrElementToFaceTable () |
template<int N> | |
void | AddTriFaces (const Array< int > &v, const std::unique_ptr< STable3D > &faces, const std::unique_ptr< STable3D > &shared_faces, int elem, int start, int end, const int fverts[][N]) |
Helper function for adding triangle face neighbor element to face table entries. Have to use a template here rather than lambda capture because the FaceVert entries in Geometry have inner size of 3 for tets and 4 for everything else. | |
void | GetGhostFaceTransformation (FaceElementTransformations &FElTr, Element::Type face_type, Geometry::Type face_geom) const |
void | GetGhostFaceTransformation (FaceElementTransformations *FElTr, Element::Type face_type, Geometry::Type face_geom) const |
void | RefineGroups (const DSTable &v_to_v, int *middle) |
Update the groups after triangle refinement. | |
void | RefineGroups (int old_nv, const HashTable< Hashed2 > &v_to_v) |
Update the groups after tetrahedron refinement. | |
void | UniformRefineGroups2D (int old_nv) |
void | UniformRefineGroups3D (int old_nv, int old_nedges, const DSTable &old_v_to_v, const STable3D &old_faces, Array< int > *f2qf) |
void | ExchangeFaceNbrData (Table *gr_sface, int *s2l_face) |
void | UniformRefinement2D () override |
Refine a mixed 2D mesh uniformly. | |
void | UniformRefinement3D () override |
Refine a mixed 3D mesh uniformly. | |
void | NURBSUniformRefinement (int rf=2, real_t tol=1.0e-12) override |
Refine NURBS mesh, with an optional refinement factor. | |
void | NURBSUniformRefinement (const Array< int > &rf, real_t tol=1.e-12) override |
void | LocalRefinement (const Array< int > &marked_el, int type=3) override |
This function is not public anymore. Use GeneralRefinement instead. | |
void | NonconformingRefinement (const Array< Refinement > &refinements, int nc_limit=0) override |
This function is not public anymore. Use GeneralRefinement instead. | |
bool | NonconformingDerefinement (Array< real_t > &elem_error, real_t threshold, int nc_limit=0, int op=1) override |
NC version of GeneralDerefinement. | |
void | RebalanceImpl (const Array< int > *partition) |
void | DeleteFaceNbrData () |
bool | WantSkipSharedMaster (const NCMesh::Master &master) const |
int | BuildLocalVertices (const Mesh &global_mesh, const int *partitioning, Array< int > &vert_global_local) |
Fills out partitioned Mesh::vertices. | |
int | BuildLocalElements (const Mesh &global_mesh, const int *partitioning, const Array< int > &vert_global_local) |
Fills out partitioned Mesh::elements. | |
int | BuildLocalBoundary (const Mesh &global_mesh, const int *partitioning, const Array< int > &vert_global_local, Array< bool > &activeBdrElem, Table *&edge_element) |
Fills out partitioned Mesh::boundary. | |
void | FindSharedFaces (const Mesh &mesh, const int *partition, Array< int > &face_group, ListOfIntegerSets &groups) |
int | FindSharedEdges (const Mesh &mesh, const int *partition, Table *&edge_element, ListOfIntegerSets &groups) |
int | FindSharedVertices (const int *partition, Table *vertex_element, ListOfIntegerSets &groups) |
void | BuildFaceGroup (int ngroups, const Mesh &mesh, const Array< int > &face_group, int &nstria, int &nsquad) |
void | BuildEdgeGroup (int ngroups, const Table &edge_element) |
void | BuildVertexGroup (int ngroups, const Table &vert_element) |
void | BuildSharedFaceElems (int ntri_faces, int nquad_faces, const Mesh &mesh, int *partitioning, const STable3D *faces_tbl, const Array< int > &face_group, const Array< int > &vert_global_local) |
void | BuildSharedEdgeElems (int nedges, Mesh &mesh, const Array< int > &vert_global_local, const Table *edge_element) |
void | BuildSharedVertMapping (int nvert, const Table *vert_element, const Array< int > &vert_global_local) |
void | GetSharedEdgeCommunicator (int ordering, GroupCommunicator &sedge_comm) const |
Get the shared edges GroupCommunicator. | |
void | GetSharedVertexCommunicator (int ordering, GroupCommunicator &svert_comm) const |
Get the shared vertices GroupCommunicator. | |
void | GetSharedQuadCommunicator (int ordering, GroupCommunicator &squad_comm) const |
Get the shared face quadrilaterals GroupCommunicator. | |
void | GetSharedTriCommunicator (int ordering, GroupCommunicator &stria_comm) const |
Get the shared face triangles GroupCommunicator. | |
STable3D * | GetSharedFacesTable () |
void | DistributeAttributes (Array< int > &attr) |
Ensure that bdr_attributes and attributes agree across processors. | |
void | LoadSharedEntities (std::istream &input) |
void | EnsureParNodes () |
If the mesh is curved, make sure 'Nodes' is ParGridFunction. | |
void | MakeRefined_ (ParMesh &orig_mesh, int ref_factor, int ref_type) |
Internal function used in ParMesh::MakeRefined (and related constructor) | |
void | Destroy () |
void | Swap (Mesh &other, bool non_geometry) |
![]() | |
void | Init () |
void | InitTables () |
void | SetEmpty () |
void | DestroyTables () |
void | DeleteTables () |
void | DestroyPointers () |
void | Destroy () |
void | ResetLazyData () |
Element * | ReadElementWithoutAttr (std::istream &input) |
Element * | ReadElement (std::istream &input) |
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, bool spacing=false) |
void | ReadInlineMesh (std::istream &input, bool generate_edges=false) |
void | ReadGmshMesh (std::istream &input, int &curved, int &read_gf) |
void | ReadCubit (const std::string &filename, int &curved, int &read_gf) |
Load a mesh from a Genesis file. | |
void | SetMeshGen () |
Determine the mesh generator bitmask meshgen, see MeshGenerator(). | |
real_t | GetLength (int i, int j) const |
Return the length of the segment from node i to node j. | |
void | MarkForRefinement () |
void | MarkTriMeshForRefinement () |
void | GetEdgeOrdering (const DSTable &v_to_v, Array< int > &order) |
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 *) |
Bisect a triangle: element with index i is bisected. | |
void | Bisection (int i, HashTable< Hashed2 > &) |
Bisect a tetrahedron: element with index i is bisected. | |
void | BdrBisection (int i, const HashTable< Hashed2 > &) |
Bisect a boundary triangle: boundary element with index i is bisected. | |
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]. | |
void | InitRefinementTransforms () |
int | FindCoarseElement (int i) |
void | UpdateNodes () |
Update the nodes of a curved mesh after the topological part of a Mesh::Operation, such as refinement, has been performed. | |
void | SetVerticesFromNodes (const GridFunction *nodes) |
Helper to set vertex coordinates given a high-order curvature function. | |
void | UniformRefinement2D_base (bool update_nodes=true) |
void | UniformRefinement3D_base (Array< int > *f2qf=NULL, DSTable *v_to_v_p=NULL, bool update_nodes=true) |
real_t | AggregateError (const Array< real_t > &elem_error, const int *fine, int nfine, int op) |
Derefinement helper. | |
void | LoadPatchTopo (std::istream &input, Array< int > &edge_to_knot) |
Read NURBS patch/macro-element mesh. | |
void | UpdateNURBS () |
void | PrintTopo (std::ostream &os, const Array< int > &e_to_k, const int version, const std::string &comment="") const |
Write the beginning of a NURBS mesh to os, specifying the NURBS patch topology. Optional file comments can be provided in comments. | |
void | GetLocalPtToSegTransformation (IsoparametricTransformation &, int i) const |
Used in GetFaceElementTransformations (...) | |
void | GetLocalSegToTriTransformation (IsoparametricTransformation &loc, int i) const |
void | GetLocalSegToQuadTransformation (IsoparametricTransformation &loc, int i) const |
void | GetLocalTriToTetTransformation (IsoparametricTransformation &loc, int i) const |
void | GetLocalTriToWdgTransformation (IsoparametricTransformation &loc, int i) const |
void | GetLocalTriToPyrTransformation (IsoparametricTransformation &loc, int i) const |
void | GetLocalQuadToHexTransformation (IsoparametricTransformation &loc, int i) const |
void | GetLocalQuadToWdgTransformation (IsoparametricTransformation &loc, int i) const |
void | GetLocalQuadToPyrTransformation (IsoparametricTransformation &loc, int i) const |
void | ApplyLocalSlaveTransformation (FaceElementTransformations &FT, const FaceInfo &fi, bool is_ghost) const |
bool | IsSlaveFace (const FaceInfo &fi) const |
int | GetElementToEdgeTable (Table &) |
void | AddPointFaceElement (int lf, int gf, int el) |
Used in GenerateFaces() | |
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. | |
void | FinalizeCheck () |
void | Loader (std::istream &input, int generate_edges=0, std::string parse_tag="") |
void | Printer (std::ostream &os=mfem::out, std::string section_delimiter="", const std::string &comments="") const |
void | Make3D (int nx, int ny, int nz, Element::Type type, real_t sx, real_t sy, real_t sz, bool sfc_ordering) |
Creates a 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. | |
void | Make3D24TetsFromHex (int nx, int ny, int nz, real_t sx, real_t sy, real_t sz) |
Creates a mesh for the parallelepiped [0,sx]x[0,sy]x[0,sz], divided into nx*ny*nz*24 tetrahedrons. | |
void | Make2D4TrisFromQuad (int nx, int ny, real_t sx, real_t sy) |
Creates mesh for the rectangle [0,sx]x[0,sy], divided into nx*ny*4 triangles. | |
void | Make2D5QuadsFromQuad (int nx, int ny, real_t sx, real_t sy) |
Creates mesh for the rectangle [0,sx]x[0,sy], divided into nx*ny*5 quadrilaterals. | |
void | Make2D (int nx, int ny, Element::Type type, real_t sx, real_t sy, bool generate_edges, bool sfc_ordering) |
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. | |
void | Make1D (int n, real_t sx=1.0) |
void | MakeRefined_ (Mesh &orig_mesh, const Array< int > &ref_factors, int ref_type) |
Internal function used in Mesh::MakeRefined. | |
void | InitFromNCMesh (const NCMesh &ncmesh) |
Initialize vertices/elements/boundary/tables from a nonconforming mesh. | |
Mesh (const NCMesh &ncmesh) | |
Create from a nonconforming mesh. | |
void | GetElementData (const Array< Element * > &elem_array, int geom, Array< int > &elem_vtx, Array< int > &attr) const |
void | MakeSimplicial_ (const Mesh &orig_mesh, int *vglobal) |
Friends | |
class | ParNCMesh |
class | ParSubMesh |
class | ParPumiMesh |
class | adios2stream |
Additional Inherited Members | |
![]() | |
enum | Operation { NONE , REFINE , DEREFINE , REBALANCE } |
enum class | FaceTopology { Boundary , Conforming , Nonconforming , NA } |
enum class | ElementLocation { Local , FaceNbr , NA } |
enum class | ElementConformity { Coincident , Superset , Subset , NA } |
enum class | FaceInfoTag { Boundary , LocalConforming , LocalSlaveNonconforming , SharedConforming , SharedSlaveNonconforming , MasterNonconforming , GhostSlave , GhostMaster } |
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 |
typedef Geometry::Constants< Geometry::PRISM > | pri_t |
typedef Geometry::Constants< Geometry::PYRAMID > | pyr_t |
![]() | |
static bool | remove_unused_vertices = true |
![]() | |
static void | PrintElementWithoutAttr (const Element *el, std::ostream &os) |
static void | PrintElement (const Element *el, std::ostream &os) |
static int | GetTriOrientation (const int *base, const int *test) |
Returns the orientation of "test" relative to "base". | |
static int | InvertTriOrientation (int ori) |
static int | ComposeTriOrientations (int ori_a_b, int ori_b_c) |
static int | GetQuadOrientation (const int *base, const int *test) |
Returns the orientation of "test" relative to "base". | |
static int | InvertQuadOrientation (int ori) |
static int | ComposeQuadOrientations (int ori_a_b, int ori_b_c) |
static int | GetTetOrientation (const int *base, const int *test) |
Returns the orientation of "test" relative to "base". | |
static void | GetElementArrayEdgeTable (const Array< Element * > &elem_array, const DSTable &v_to_v, Table &el_to_edge) |
![]() | |
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] |
|
protected |
|
inline |
mfem::ParMesh::ParMesh | ( | MPI_Comm | comm, |
Mesh & | mesh, | ||
int * | partitioning_ = NULL, | ||
int | part_method = 1 ) |
Create a parallel mesh by partitioning a serial Mesh.
The mesh is partitioned automatically or using external partitioning data (the optional parameter 'partitioning_[i]' contains the desired MPI rank for element 'i'). Automatic partitioning uses METIS for conforming meshes and quick space-filling curve equipartitioning for nonconforming meshes (elements of nonconforming meshes should ideally be ordered as a sequence of face-neighbors).
|
explicit |
mfem::ParMesh::ParMesh | ( | MPI_Comm | comm, |
std::istream & | input, | ||
bool | refine = true, | ||
int | generate_edges = 1, | ||
bool | fix_orientation = true ) |
Read a parallel mesh, each MPI rank from its own file/stream.
The generate_edges parameter is passed to Mesh::Loader. The refine and fix_orientation parameters are passed to the method Mesh::Finalize().
mfem::ParMesh::ParMesh | ( | ParMesh * | orig_mesh, |
int | ref_factor, | ||
int | ref_type ) |
Deprecated: see ParMesh::MakeRefined.
mfem::ParMesh::ParMesh | ( | ParMesh && | mesh | ) |
|
protected |
Helper function for adding triangle face neighbor element to face table entries. Have to use a template here rather than lambda capture because the FaceVert entries in Geometry have inner size of 3 for tets and 4 for everything else.
N | Inner dimension on the fvert variable, 3 for tet, 4 otherwise |
[in] | v | Set of vertices for this element |
[in] | faces | Table of faces interior to this rank |
[in] | shared_faces | Table of faces shared by this rank and another |
[in] | elem | The face neighbor element |
[in] | start | Starting index into fverts |
[in] | end | End index into fverts |
[in] | fverts | Array of face vertices for this particular geometry. |
|
protected |
|
protected |
|
protected |
Fills out partitioned Mesh::boundary.
|
protected |
Fills out partitioned Mesh::elements.
|
protected |
Fills out partitioned Mesh::vertices.
|
protected |
|
protected |
|
protected |
|
protected |
If the mesh is curved, make sure 'Nodes' is ParGridFunction.
Note that this method is not related to the public 'Mesh::EnsureNodes`.
|
protected |
|
inline |
|
overridevirtual |
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. |
Reimplemented from mfem::Mesh.
|
overridevirtual |
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 from mfem::Mesh.
|
protected |
|
protected |
|
protected |
|
inlineoverridevirtual |
Reimplemented from mfem::Mesh.
void mfem::ParMesh::GenerateOffsets | ( | int | N, |
HYPRE_BigInt | loc_sizes[], | ||
Array< HYPRE_BigInt > * | offsets[] ) const |
|
overridevirtual |
Variant of GetFaceElementTransformations using a user allocated FaceElementTransformations object.
Reimplemented from mfem::Mesh.
|
overridevirtual |
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 from mfem::Mesh.
void mfem::ParMesh::GetFaceNbrElementFaces | ( | int | i, |
Array< int > & | faces, | ||
Array< int > & | orientation ) const |
Similar to Mesh::GetElementFaces
real_t mfem::ParMesh::GetFaceNbrElementSize | ( | int | i, |
int | type = 0 ) |
ElementTransformation * mfem::ParMesh::GetFaceNbrElementTransformation | ( | int | FaceNo | ) |
Returns a pointer to the transformation defining the i-th face neighbor.
void mfem::ParMesh::GetFaceNbrElementTransformation | ( | int | FaceNo, |
IsoparametricTransformation & | ElTr ) const |
Variant of GetFaceNbrElementTransformation using a user allocated IsoparametricTransformation object.
Table * mfem::ParMesh::GetFaceToAllElementTable | ( | ) | const |
Similar to Mesh::GetFaceToElementTable with added face-neighbor elements with indices offset by the local number of elements.
|
protected |
|
inlineprotected |
void mfem::ParMesh::GetGlobalEdgeIndices | ( | Array< HYPRE_BigInt > & | gi | ) | const |
void mfem::ParMesh::GetGlobalElementIndices | ( | Array< HYPRE_BigInt > & | gi | ) | const |
long long mfem::ParMesh::GetGlobalElementNum | ( | int | local_element_num | ) | const |
void mfem::ParMesh::GetGlobalFaceIndices | ( | Array< HYPRE_BigInt > & | gi | ) | const |
void mfem::ParMesh::GetGlobalVertexIndices | ( | Array< HYPRE_BigInt > & | gi | ) | const |
int mfem::ParMesh::GetLocalElementNum | ( | long long | global_element_num | ) | const |
|
inline |
|
overridevirtual |
Returns the number of local faces according to the requested type, does not count master non-conforming 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 (including shared faces) are counted excluding all master non-conforming faces.
Reimplemented from mfem::Mesh.
int mfem::ParMesh::GetNSharedFaces | ( | ) | const |
Mesh mfem::ParMesh::GetSerialMesh | ( | int | save_rank | ) | const |
|
inline |
Get the shared edges GroupCommunicator.
[out] | sedge_comm |
|
protected |
Get the shared edges GroupCommunicator.
The output of the shared edges is chosen by the ordering parameter with the following options 0: Internal ordering. Not exposed to public interfaces. 1: Contiguous ordering.
[in] | ordering | Ordering for the shared edges. |
[out] | sedge_comm |
int mfem::ParMesh::GetSharedFace | ( | int | sface | ) | const |
|
protected |
FaceElementTransformations * mfem::ParMesh::GetSharedFaceTransformations | ( | int | sf, |
bool | fill2 = true ) |
Get the FaceElementTransformations for the given shared face (edge 2D) using the shared face index sf. fill2 specify if the information for elem2 of the face should be computed or not. In the returned object, 1 and 2 refer to the local and the neighbor elements, respectively.
void mfem::ParMesh::GetSharedFaceTransformations | ( | int | sf, |
FaceElementTransformations & | FElTr, | ||
IsoparametricTransformation & | ElTr1, | ||
IsoparametricTransformation & | ElTr2, | ||
bool | fill2 = true ) const |
Variant of GetSharedFaceTransformations using a user allocated FaceElementTransformations object.
FaceElementTransformations * mfem::ParMesh::GetSharedFaceTransformationsByLocalIndex | ( | int | FaceNo, |
bool | fill2 = true ) |
Get the FaceElementTransformations for the given shared face (edge 2D) using the face index FaceNo. fill2 specify if the information for elem2 of the face should be computed or not. In the returned object, 1 and 2 refer to the local and the neighbor elements, respectively.
void mfem::ParMesh::GetSharedFaceTransformationsByLocalIndex | ( | int | FaceNo, |
FaceElementTransformations & | FElTr, | ||
IsoparametricTransformation & | ElTr1, | ||
IsoparametricTransformation & | ElTr2, | ||
bool | fill2 = true ) const |
Variant of GetSharedFaceTransformationsByLocalIndex using a user allocated FaceElementTransformations object.
|
inline |
Get the shared face quadrilaterals GroupCommunicator.
[out] | squad_comm |
|
protected |
Get the shared face quadrilaterals GroupCommunicator.
The output of the shared face quadrilaterals is chosen by the ordering parameter with the following options 0: Internal ordering. Not exposed to public interfaces. 1: Contiguous ordering.
[in] | ordering | |
[out] | squad_comm |
|
inline |
Get the shared face triangles GroupCommunicator.
[out] | stria_comm |
|
protected |
Get the shared face triangles GroupCommunicator.
The output of the shared face triangles is chosen by the ordering parameter with the following options 0: Internal ordering. Not exposed to public interfaces. 1: Contiguous ordering.
[in] | ordering | |
[out] | stria_comm |
|
inline |
Get the shared vertices GroupCommunicator.
[out] | svert_comm |
|
protected |
Get the shared vertices GroupCommunicator.
The output of the shared vertices is chosen by the ordering parameter with the following options 0: Internal ordering. Not exposed to public interfaces. 1: Contiguous ordering.
[in] | ordering | |
[out] | svert_comm |
void mfem::ParMesh::GroupEdge | ( | int | group, |
int | i, | ||
int & | edge, | ||
int & | o ) const |
|
inline |
|
inline |
|
inline |
void mfem::ParMesh::GroupQuadrilateral | ( | int | group, |
int | i, | ||
int & | face, | ||
int & | o ) const |
void mfem::ParMesh::GroupTriangle | ( | int | group, |
int | i, | ||
int & | face, | ||
int & | o ) const |
|
inline |
|
overridevirtual |
Checks if any rank in the mesh has boundary elements.
Reimplemented from mfem::Mesh.
|
overridevirtual |
Parallel version of Mesh::Load().
Reimplemented from mfem::Mesh.
|
protected |
|
overrideprotectedvirtual |
This function is not public anymore. Use GeneralRefinement instead.
Reimplemented from mfem::Mesh.
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.
|
protected |
Internal function used in ParMesh::MakeRefined (and related constructor)
Create a mesh by splitting each element of orig_mesh into simplices. See Mesh::MakeSimplicial for more details.
|
overrideprotectedvirtual |
Reimplemented from mfem::Mesh.
|
overrideprotectedvirtual |
NC version of GeneralDerefinement.
Reimplemented from mfem::Mesh.
|
overrideprotectedvirtual |
This function is not public anymore. Use GeneralRefinement instead.
Reimplemented from mfem::Mesh.
|
overrideprotectedvirtual |
Reimplemented from mfem::Mesh.
|
overrideprotectedvirtual |
Refine NURBS mesh, with an optional refinement factor.
[in] | rf | Optional refinement factor. If scalar, the factor is used for all dimensions. If an array, factors can be specified for each dimension. |
[in] | tol | NURBS geometry deviation tolerance. |
Reimplemented from mfem::Mesh.
Explicitly delete the copy assignment operator.
void mfem::ParMesh::ParPrint | ( | std::ostream & | out, |
const std::string & | comments = "" ) const |
|
overridevirtual |
Print the part of the mesh in the calling processor using adios2 bp format.
Reimplemented from mfem::Mesh.
|
overridevirtual |
Print the part of the mesh in the calling processor using the mfem v1.0 format. Depending on SetPrintShared(), the parallel interface can be added as boundary for visualization (true by default). If comments is non-empty, it will be printed after the first line of the file, and each line should begin with '#'.
Reimplemented from mfem::Mesh.
void mfem::ParMesh::PrintAsOne | ( | std::ostream & | out = mfem::out, |
const std::string & | comments = "" ) const |
Write the mesh to the stream 'out' on Process 0 in a form suitable for visualization: the mesh is written as a disjoint mesh and the shared boundary is added to the actual boundary; both the element and boundary attributes are set to the processor number. If comments is non-empty, it will be printed after the first line of the file, and each line should begin with '#'.
void mfem::ParMesh::PrintAsOneXG | ( | std::ostream & | out = mfem::out | ) |
void mfem::ParMesh::PrintAsSerial | ( | std::ostream & | out = mfem::out, |
const std::string & | comments = "" ) const |
Write the mesh to the stream 'out' on Process 0 as a serial mesh. The output mesh does not have any duplication of vertices/nodes at processor boundaries. If comments is non-empty, it will be printed after the first line of the file, and each line should begin with '#'.
|
overridevirtual |
Print various parallel mesh stats.
Reimplemented from mfem::Mesh.
void mfem::ParMesh::PrintSharedEntities | ( | const std::string & | fname_prefix | ) | const |
|
overridevirtual |
Print the mesh in parallel PVTU format. The PVTU and VTU files will be stored in the directory specified by pathname. If the directory does not exist, it will be created.
Reimplemented from mfem::Mesh.
|
overridevirtual |
Print the part of the mesh in the calling processor adding the interface as boundary (for visualization purposes) using Netgen/Truegrid format .
Reimplemented from mfem::Mesh.
void mfem::ParMesh::Rebalance | ( | ) |
void mfem::ParMesh::Rebalance | ( | const Array< int > & | partition | ) |
|
protected |
|
overridevirtual |
Utility function: sum integers from all processors (Allreduce).
Reimplemented from mfem::Mesh.
|
protected |
|
overridevirtual |
See the remarks for the serial version in mesh.hpp.
Reimplemented from mfem::Mesh.
|
overridevirtual |
Save the ParMesh to files (one for each MPI rank). The files will be given suffixes according to the MPI rank. The mesh will be written to the files using ParMesh::Print. The given precision will be used for ASCII output.
Reimplemented from mfem::Mesh.
void mfem::ParMesh::SaveAsOne | ( | const std::string & | fname, |
int | precision = 16 ) const |
Save the mesh as a single file (using ParMesh::PrintAsOne). The given precision is used for ASCII output.
|
overridevirtual |
Determine the sets of unique attribute values in domain and boundary elements.
Separately scan the domain and boundary elements to generate unique, sorted sets of the element attribute values present in the mesh and store these in the Mesh::attributes and Mesh::bdr_attributes arrays.
Reimplemented from mfem::Mesh.
|
overridevirtual |
Set the curvature of the mesh nodes using the given polynomial degree.
Creates a nodal GridFunction if one doesn't already exist.
[in] | order | Polynomial degree of the nodal FE space. If this value is <= 0 then the method will remove the nodal GridFunction and the Mesh will use the vertices array instead; the other arguments are ignored in this case. |
[in] | discont | Whether to use a discontinuous or continuous finite element space (continuous is default). |
[in] | space_dim | The space dimension (optional). |
[in] | ordering | The Ordering of the finite element space (Ordering::byVDIM is the default). |
Reimplemented from mfem::Mesh.
|
overridevirtual |
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 from mfem::Mesh.
void mfem::ParMesh::SetNodalFESpace | ( | ParFiniteElementSpace * | npfes | ) |
|
protected |
void mfem::ParMesh::Swap | ( | ParMesh & | other | ) |
Swaps internal data with another ParMesh, including non-geometry members. See Mesh::Swap
|
protected |
|
overrideprotectedvirtual |
Refine a mixed 2D mesh uniformly.
Reimplemented from mfem::Mesh.
|
overrideprotectedvirtual |
Refine a mixed 3D mesh uniformly.
Reimplemented from mfem::Mesh.
|
protected |
|
friend |
|
friend |
|
friend |
|
protected |
|
protected |
|
protected |
GroupTopology mfem::ParMesh::gtopo |
|
protected |