00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef Q0_HEXAHEDRON_FINITE_ELEMENT_HPP
00021 #define Q0_HEXAHEDRON_FINITE_ELEMENT_HPP
00022
00023 #include <TinyVector.hpp>
00024 #include <TinyMatrix.hpp>
00025
00026 #include <QuadratureFormula.hpp>
00027 #include <ConformTransformation.hpp>
00028
00029 #include <LagrangianFiniteElement.hpp>
00030 #include <ThreadStaticBase.hpp>
00031
00032 class Q0HexahedronFiniteElement
00033 : public ThreadStaticBase<Q0HexahedronFiniteElement>,
00034 public LagrangianFiniteElement<1, Q0HexahedronFiniteElement,
00035 QuadratureFormulaQ0Hexahedron>
00036 {
00037 private:
00038 static TinyVector<3, real_t> __massCenter;
00040 public:
00041 enum {
00042 numberOfDegreesOfFreedom = 1,
00043 numberOfVertexDegreesOfFreedom = 0,
00044 numberOfEdgeDegreesOfFreedom = 0,
00045 numberOfFaceDegreesOfFreedom = 0,
00046 numberOfVolumeDegreesOfFreedom = 1,
00047 numberOfFaceLivingDegreesOfFreedom = 0
00048 };
00049
00055 static const size_t facesDOF[Hexahedron::NumberOfFaces][1];
00056
00062 static const TinyVector<3, real_t>& massCenter()
00063 {
00064 return __massCenter;
00065 }
00066
00075 real_t W (const size_t& i, const TinyVector<3>& x) const;
00076
00085 real_t dxW(const size_t& i, const TinyVector<3>& x) const;
00086
00095 real_t dyW(const size_t& i, const TinyVector<3>& x) const;
00096
00105 real_t dzW(const size_t& i, const TinyVector<3>& x) const;
00106
00107 inline const
00108 TinyVector<QuadratureType::numberOfQuadraturePoints,
00109 TinyVector<3> >&
00110 integrationVertices() const
00111 {
00112 return QuadratureType::instance().vertices();
00113 }
00114
00115 Q0HexahedronFiniteElement()
00116 {
00117 ;
00118 }
00119
00120 ~Q0HexahedronFiniteElement()
00121 {
00122 ;
00123 }
00124 };
00125
00126 #endif // Q0_HEXAHEDRON_FINITE_ELEMENT_HPP