Public Member Functions | |
bool | face_orientation (const unsigned int cell, const unsigned int face) const |
void | reserve_space (const unsigned int new_objs) |
void | clear () |
void | monitor_memory (const unsigned int true_dimension) const |
unsigned int | memory_consumption () const |
Public Attributes | |
std::vector< bool > | face_orientations |
std::vector< bool > | face_flips |
std::vector< bool > | face_rotations |
For hexahedrons the data of TriaObjects needs to be extended, as we can obtain faces (quads) in non-standard-orientation, therefore we declare a class TriaObjectsHex, which additionaly contains a bool-vector of the face-orientations.
bool internal::Triangulation::TriaObjectsHex::face_orientation | ( | const unsigned int | cell, | |
const unsigned int | face | |||
) | const [inline] |
The orientation of the face number face
of the cell with number cell
. The return value is true
, if the normal vector points the usual way (GeometryInfo::unit_normal_orientation) and false
if they point in opposite direction.
Reimplemented from internal::Triangulation::TriaObjects< TriaObject< 3 > >.
References Assert, and face_orientations.
Assert that enough space is allocated to accomodate new_objs
new objects. This function does not only call vector::reserve()
, but does really append the needed elements.
void internal::Triangulation::TriaObjectsHex::clear | ( | ) |
Clear all the data contained in this object.
Reimplemented from internal::Triangulation::TriaObjects< TriaObject< 3 > >.
void internal::Triangulation::TriaObjectsHex::monitor_memory | ( | const unsigned int | true_dimension | ) | const |
Check the memory consistency of the different containers. Should only be called with the prepro flag DEBUG
set. The function should be called from the functions of the higher TriaLevel classes.
Reimplemented from internal::Triangulation::TriaObjects< TriaObject< 3 > >.
Determine an estimate for the memory consumption (in bytes) of this object.
Reimplemented from internal::Triangulation::TriaObjects< TriaObject< 3 > >.
For edges, we enforce a standard convention that opposite edges should be parallel. Now, that's enforcable in most cases, and we have code that makes sure that if a mesh allows this to happen, that we have this convention. We also know that it is always possible to have opposite faces have parallel normal vectors. (For both things, see the Agelek, Anderson, Bangerth, Barth paper mentioned in the publications list.)
The problem is that we originally had another condition, namely that faces 0, 2 and 6 have normals that point into the cell, while the other faces have normals that point outward. It turns out that this is not always possible. In effect, we have to store whether the normal vector of each face of each cell follows this convention or not. If this is so, then this variable stores a true
value, otherwise a false
value.
In effect, this field has 6*n_cells
elements, being the number of cells times the six faces each has.
Referenced by face_orientation().
std::vector<bool> internal::Triangulation::TriaObjectsHex::face_flips |
flip = rotation by 180 degrees
rotation by 90 degrees