// ============================================================================ // == == // == AMDiS - Adaptive multidimensional simulations == // == == // ============================================================================ // == == // == crystal growth group == // == == // == Stiftung caesar == // == Ludwig-Erhard-Allee 2 == // == 53175 Bonn == // == germany == // == == // ============================================================================ // == == // == http://www.caesar.de/cg/AMDiS == // == == // ============================================================================ /** \file ElInfo3d.h */ #ifndef AMDIS_ELINFO3D_H #define AMDIS_ELINFO3D_H #include "ElInfo.h" #include "MemoryManager.h" #include "OpenMP.h" namespace AMDiS { // ============================================================================ // ===== class ElInfo3d ======================================================= // ============================================================================ /** \ingroup Traverse * \brief * ElInfo class for 3-dimensional elements (\ref Tetrahedron). */ class ElInfo3d : public ElInfo { public: MEMORY_MANAGED(ElInfo3d); /** \brief * Constructor. Calls ElInfo's protected Constructor. */ ElInfo3d(Mesh* aMesh) : ElInfo(aMesh) { tmpWorldVecs.resize(4); }; /** \brief * Assignment operator */ ElInfo3d& operator=(const ElInfo3d& rhs) { ElInfo::operator=(rhs); el_type = rhs.el_type; orientation = rhs.orientation; return *this; } /** \brief * 3-dimensional realisation of ElInfo's fillElInfo method. */ void fillElInfo(int ichild, const ElInfo *elinfo_old); /** \brief * 3-dimensional realisation of ElInfo's fillMacroInfo method. */ void fillMacroInfo(const MacroElement *); /** \brief * 3-dimensional realisation of ElInfo's worldToCoord method. */ const int worldToCoord(const WorldVector<double>& w, DimVec<double>* l) const; /** \brief * 3-dimensional realisation of ElInfo's calcGrdLambda method. */ double calcGrdLambda(DimVec<WorldVector<double> >& grd_lam); /** \brief * 3-dimensional realisation of ElInfo's getNormal method. */ double getNormal(int side, WorldVector<double> &normal); /** \brief * update ElInfo after refinement (of some neighbours). Only in 3d! */ void update(); /** \brief * get ElInfo's \ref el_type */ inline unsigned char getType() const { return el_type; }; /** \brief * get ElInfo's \ref orientation */ inline signed char getOrientation() const { return orientation; }; /** \brief * set ElInfo's \ref el_type to t */ inline void setType(unsigned char t) { el_type = t; }; /** \brief * set ElInfo's \ref orientation to o */ inline void setOrientation(signed char o) { orientation = o; }; void getRefSimplexCoords(VectorOfFixVecs<DimVec<double> > *coords) const { FUNCNAME("ElInfo3d::getRefSimplexCoords()"); ERROR_EXIT("NOT YET\n"); } void getSubElementCoords(VectorOfFixVecs<DimVec<double> > *coords, int iChild) const { FUNCNAME("ElInfo3d::getSubElementCoords()"); ERROR_EXIT("NOT YET\n"); } protected: /** \brief * \ref el 's type. Is Filled automatically by the traversal routines. */ unsigned char el_type; /** \brief * +/- 1: sign of the determinant of the transformation to the reference * element with vertices (0,0,0), (1,1,1), (1,1,0), (1,0,0). */ signed char orientation; /** \brief * Tmp vectors used for calculations in calcGrdLambda and getNormal(). */ std::vector< WorldVector<double> > tmpWorldVecs; }; } #endif // AMDIS_ELINFO3D_H