LifeV
|
Special routines to read meshes and special structures for sides and faces handling. More...
Go to the source code of this file.
Namespaces | |
LifeV | |
Default Physical Solver. | |
Functions | |
std::pair< BareFace, bool > | makeBareFace (ID const i, ID const j, ID const k) |
It creates Bare Face objects from three Point ID's. More... | |
std::pair< BareFace, bool > | makeBareFace (ID const i, ID const j, ID const k, ID const l) |
It creates Bare Face objects from four Point ID's. To be used with Quad faces. More... | |
Special routines to read meshes and special structures for sides and faces handling.
Classes BareFace and BareEdge have been created to give an UNIQUE Representation for mesh faces and edges and thus allow the construction of global tables or fields.
Classes BareFace and BareEdge have been created to give an UNIQUE internal representation for mesh faces and edges, allowing thus the construction of DOF objects (which are naturally linked to mesh entities).
One of the paradigms chosen for the development of this library is the fact that degrees of freedom (DOF) are linked to geometrical entities. Now if we have degrees of freedom associated, for instance, to an Edge (like in a P2 Tetra) in order to build the global numbering of the DOF and the association between local (element-wise) and global numbering, we need to identify edges and give them a unique ID. Yet, we may not want to build a full Edge (MeshElementMarked2D) object: we only need the ID of the edge and a way of computing the ID's of the degrees of freedom on the edge, all the remaining data of a full Edge object is not necessarily needed.
Another related problem is how to uniquely identify a face or an edge in the mesh.
The dilemma has been resolved by creating the concept of a BareEdge and BareFace (bare geometry items). A bare geometry item is formed by the minimal information required to uniquely identify it, namely 2 Point
's ID 's for an edge and 3 Point
's ID 's for the Faces (it is enough also for Quad faces!). We build the bare items by looping through the elements and obviously we make sure that the BareItem ID is consistent with that of the corresponding ``full item'' if the latter has been instantiated.
Another very important issue is that of orientation. There are different ways of considering orientation of a Face or an Edge. The first is the local orientation of a Face or Edge of the reference finite element. This is conventionally chosen when designing the finite elements. For the faces, we have adopted the convention that the local positive orientation is such that the face normal calculated with the right hand rule is outwardly oriented. As for the edges, the local orientation for a 3D element is more arbitrary.
However, for a 2D element, the positive orientation of an Edge is the one which is in accordance with the right hand rule applied to that element.
When a Face or an edge is active, i.e. is effectively stored in the mesh, then there is another obvious orientation, of global rather than local nature: that induced by the way the edge or face is stored. For boundary elements (faced in 3D or edges in 2D) it is compulsory that the orientation of the stored item be consistent with the convention chosen for the orientation of the domain boundary. More precisely, boundary elements are stored so that the normal (always calculated following the right hand rule) is outward with respect to the domain.
However, there is the need of defining a global orientation also for non active entities. This because we do not always store all faces and all edges. We need then to choose a unique way to identify the orientation of an Edge or of a Face independently from the fact that they are active or not. We will call this orientation the natural orientation. We have chosen the following convention for natural orientation of faces and edges
The positive natural orientation of an Edge is given by , being the Edge Vertex with smallest ID
Note that the latter definition applies both to triangular and to quad faces.
Definition in file MeshElementBare.cpp.