Reference documentation for deal.II version 9.1.1
\(\newcommand{\dealcoloneq}{\mathrel{\vcenter{:}}=}\)
Public Member Functions | Public Attributes | List of all members
internal::TriangulationImplementation::TriaObjectsHex Class Reference

#include <deal.II/grid/tria_objects.h>

Inheritance diagram for internal::TriangulationImplementation::TriaObjectsHex:
[legend]

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
 
std::size_t memory_consumption () const
 
template<class Archive >
void serialize (Archive &ar, const unsigned int version)
 
- Public Member Functions inherited from internal::TriangulationImplementation::TriaObjects< TriaObject< 3 > >
 TriaObjects ()
 
void reserve_space (const unsigned int new_objs_in_pairs, const unsigned int new_objs_single=0)
 
::TriaRawIterator<::TriaAccessor< TriaObject< 3 > ::dimension, dim, spacedim > > next_free_single_object (const ::Triangulation< dim, spacedim > &tria)
 
::TriaRawIterator<::TriaAccessor< TriaObject< 3 > ::dimension, dim, spacedim > > next_free_pair_object (const ::Triangulation< dim, spacedim > &tria)
 
typename ::Triangulation< dim, spacedim >::raw_hex_iterator next_free_hex (const ::Triangulation< dim, spacedim > &tria, const unsigned int level)
 
void clear ()
 
bool face_orientation (const unsigned int cell, const unsigned int face) const
 
void *& user_pointer (const unsigned int i)
 
const void * user_pointer (const unsigned int i) const
 
unsigned int & user_index (const unsigned int i)
 
unsigned int user_index (const unsigned int i) const
 
void clear_user_data (const unsigned int i)
 
void clear_user_data ()
 
void clear_user_flags ()
 
void monitor_memory (const unsigned int true_dimension) const
 
std::size_t memory_consumption () const
 
void serialize (Archive &ar, const unsigned int version)
 

Public Attributes

std::vector< bool > face_orientations
 
std::vector< bool > face_flips
 
std::vector< bool > face_rotations
 
- Public Attributes inherited from internal::TriangulationImplementation::TriaObjects< TriaObject< 3 > >
std::vector< TriaObject< 3 > > cells
 
std::vector< int > children
 
std::vector< RefinementCase< TriaObject< 3 > ::dimension > > refinement_cases
 
std::vector< bool > used
 
std::vector< bool > user_flags
 
std::vector< BoundaryOrMaterialId > boundary_or_material_id
 
std::vector< types::manifold_idmanifold_id
 

Additional Inherited Members

- Static Public Member Functions inherited from internal::TriangulationImplementation::TriaObjects< TriaObject< 3 > >
static ::ExceptionBaseExcMemoryInexact (int arg1, int arg2)
 
static ::ExceptionBaseExcPointerIndexClash ()
 
- Protected Types inherited from internal::TriangulationImplementation::TriaObjects< TriaObject< 3 > >
enum  UserDataType
 
- Protected Attributes inherited from internal::TriangulationImplementation::TriaObjects< TriaObject< 3 > >
unsigned int next_free_single
 
unsigned int next_free_pair
 
bool reverse_order_next_free_single
 
std::vector< UserData > user_data
 
UserDataType user_data_type
 

Detailed Description

For hexahedra 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 additionally contains a bool-vector of the face-orientations.

Definition at line 421 of file tria_objects.h.

Member Function Documentation

◆ face_orientation()

bool internal::TriangulationImplementation::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.

Definition at line 765 of file tria_objects.h.

◆ reserve_space()

void internal::TriangulationImplementation::TriaObjectsHex::reserve_space ( const unsigned int  new_objs)

Assert that enough space is allocated to accommodate new_objs new objects. This function does not only call vector::reserve(), but does really append the needed elements.

Definition at line 170 of file tria_objects.cc.

◆ clear()

void internal::TriangulationImplementation::TriaObjectsHex::clear ( )

Clear all the data contained in this object.

Definition at line 409 of file tria_objects.cc.

◆ monitor_memory()

void internal::TriangulationImplementation::TriaObjectsHex::monitor_memory ( const unsigned int  true_dimension) const

Check the memory consistency of the different containers. Should only be called with the preprocessor flag DEBUG set. The function should be called from the functions of the higher TriaLevel classes.

Definition at line 349 of file tria_objects.cc.

◆ memory_consumption()

std::size_t internal::TriangulationImplementation::TriaObjectsHex::memory_consumption ( ) const

Determine an estimate for the memory consumption (in bytes) of this object.

Definition at line 442 of file tria_objects.cc.

◆ serialize()

template<class Archive >
void internal::TriangulationImplementation::TriaObjectsHex::serialize ( Archive &  ar,
const unsigned int  version 
)

Read or write the data of this object to or from a stream for the purpose of serialization

Definition at line 744 of file tria_objects.h.

Member Data Documentation

◆ face_orientations

std::vector<bool> internal::TriangulationImplementation::TriaObjectsHex::face_orientations

For edges, we enforce a standard convention that opposite edges should be parallel. Now, that's enforceable 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 paper by Agelek, Anderson, Bangerth, Barth in the ACM Transactions on Mathematical Software mentioned in the documentation of the GridReordering class.)

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.

Definition at line 457 of file tria_objects.h.

◆ face_flips

std::vector<bool> internal::TriangulationImplementation::TriaObjectsHex::face_flips

flip = rotation by 180 degrees

Definition at line 462 of file tria_objects.h.

◆ face_rotations

std::vector<bool> internal::TriangulationImplementation::TriaObjectsHex::face_rotations

rotation by 90 degrees

Definition at line 467 of file tria_objects.h.


The documentation for this class was generated from the following files: