MFEM
v4.4.0
Finite element discretization library
|
This structure stores the low level information necessary to interpret the configuration of elements on a specific face. This information can be accessed using methods like GetFaceElements(), GetFaceInfos(), FaceIsInterior(), etc. More...
#include <mesh.hpp>
Public Attributes | |
int | Elem1No |
int | Elem2No |
int | Elem1Inf |
int | Elem2Inf |
int | NCFace |
This structure stores the low level information necessary to interpret the configuration of elements on a specific face. This information can be accessed using methods like GetFaceElements(), GetFaceInfos(), FaceIsInterior(), etc.
For accessing higher level deciphered information look at Mesh::FaceInformation, and its accessor Mesh::GetFaceInformation().
Each face contains information on the indices, local reference faces, orientations, and potential nonconformity for the two neighboring elements on a face. Each face can either be an interior, boundary, or shared interior face. Each interior face is shared by two elements referred as Elem1 and Elem2. For boundary faces only the information on Elem1 is relevant. Shared interior faces correspond to faces where Elem1 and Elem2 are distributed on different MPI ranks. Regarding conformity, three cases are distinguished, conforming faces, nonconforming slave faces, and nonconforming master faces. Master and slave referring to the coarse and fine elements respectively on a nonconforming face. Nonconforming slave faces always have the slave element as Elem1 and the master element as Elem2. On the other side, nonconforming master faces always have the master element as Elem1, and one of the slave element as Elem2. Except for ghost nonconforming slave faces, where Elem1 is the master side and Elem2 is the slave side.
The indices of Elem1 and Elem2 can be indirectly extracted from FaceInfo::Elem1No and FaceInfo::Elem2No, read the note below for special cases on the index of Elem2.
The local face identifiers are deciphered from FaceInfo::Elem1Inf and FaceInfo::Elem2Inf through the formula: LocalFaceIndex = ElemInf/64, the semantic of the computed local face identifier can be found in fem/geom.cpp. The local face identifier corresponds to an index in the Constants<Geometry>::Edges arrays for 2D element geometries, and to an index in the Constants<Geometry>::FaceVert arrays for 3D element geometries.
The orientation of each element relative to a face is obtained through the formula: Orientation = ElemInf%64, the semantic of the orientation can also be found in fem/geom.cpp. The orientation corresponds to an index in the Constants<Geometry>::Orient arrays, providing the sequence of vertices identifying the orientation of an edge/face. By convention the orientation of Elem1 is always set to 0, serving as the reference orientation. The orientation of Elem2 relatively to Elem1 is therefore determined just by using the orientation of Elem2. An important special case is the one of nonconforming faces, the orientation should be composed with the PointMatrix, which also contains orientation information. A special treatment should be done for 2D, the orientation in the PointMatrix is not included, therefore when applying the PointMatrix transformation, the PointMatrix should be flipped, except for shared nonconforming slave faces where the transformation can be applied as is.
Another special case is the case of shared nonconforming faces. Ghost faces use a different design based on so called "ghost" faces. Ghost faces, as their name suggest are very well hidden, and they usually have a separate interface from "standard" faces.