// ============================================================================ // == == // == AMDiS - Adaptive multidimensional simulations == // == == // == http://www.amdis-fem.org == // == == // ============================================================================ // // Software License for AMDiS // // Copyright (c) 2010 Dresden University of Technology // All rights reserved. // Authors: Simon Vey, Thomas Witkowski et al. // // This file is part of AMDiS // // See also license.opensource.txt in the distribution. /** \file ElInfo2d.h */ #ifndef AMDIS_ELINFO2D_H #define AMDIS_ELINFO2D_H #include <boost/numeric/mtl/mtl.hpp> #include "ElInfo.h" namespace AMDiS { /** \ingroup Traverse * \brief * ElInfo class for 2-dimensional elements (\ref Triangle). */ class ElInfo2d : public ElInfo { public: /// Constructor. Calls ElInfo's protected Constructor. ElInfo2d(Mesh* aMesh); /// ~ElInfo2d(); /// 2-dimensional realisation of ElInfo's fillElInfo method. void fillElInfo(int ichild, const ElInfo *elinfo_old); /// 2-dimensional realisation of ElInfo's fillMacroInfo method. void fillMacroInfo(const MacroElement*); /// 2-dimensional realisation of ElInfo's worldToCoord method. const int worldToCoord(const WorldVector<double>& w, DimVec<double>* l) const; /// 2-dimensional realisation of ElInfo's calcGrdLambda method. double calcGrdLambda(DimVec<WorldVector<double> >& grd_lam); /// 2-dimensional realisation of ElInfo's getNormal method. double getNormal(int side, WorldVector<double> &normal); /// 2-dimensional realisation of ElInfo's getElementNormal method. double getElementNormal(WorldVector<double> &normal) const; mtl::dense2D<double>& getSubElemCoordsMat(int degree) const; mtl::dense2D<double>& getSubElemGradCoordsMat(int degree) const; protected: /// Temp vectors for function \ref calcGrdLambda. WorldVector<double> e1, e2, normal; static double mat_d1_left_val[3][3]; static mtl::dense2D<double> mat_d1_left; static double mat_d1_right_val[3][3]; static mtl::dense2D<double> mat_d1_right; static double mat_d2_left_val[6][6]; static mtl::dense2D<double> mat_d2_left; static double mat_d2_right_val[6][6]; static mtl::dense2D<double> mat_d2_right; static double mat_d3_left_val[10][10]; static mtl::dense2D<double> mat_d3_left; static double mat_d3_right_val[10][10]; static mtl::dense2D<double> mat_d3_right; static double mat_d4_left_val[15][15]; static mtl::dense2D<double> mat_d4_left; static double mat_d4_right_val[15][15]; static mtl::dense2D<double> mat_d4_right; }; } #endif // AMDIS_ELINFO2D_H