00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #ifndef _ABSTRACTTETRAHEDRALELEMENT_HPP_
00031 #define _ABSTRACTTETRAHEDRALELEMENT_HPP_
00032
00033 #include <vector>
00034
00035 #include "UblasMatrixInclude.hpp"
00036 #include "UblasVectorInclude.hpp"
00037
00038 #include "AbstractElement.hpp"
00039 #include "Node.hpp"
00040
00044 template <unsigned ELEMENT_DIM, unsigned SPACE_DIM>
00045 class AbstractTetrahedralElement : public AbstractElement<ELEMENT_DIM,SPACE_DIM>
00046 {
00047 protected:
00048
00054 void RefreshJacobian(c_matrix<double, SPACE_DIM, ELEMENT_DIM>& rJacobian);
00055
00056 public:
00057
00064 AbstractTetrahedralElement(unsigned index, const std::vector<Node<SPACE_DIM>*>& rNodes);
00065
00072 AbstractTetrahedralElement(unsigned index=INDEX_IS_NOT_USED);
00073
00077 virtual ~AbstractTetrahedralElement()
00078 {}
00079
00083 c_vector<double, SPACE_DIM> CalculateCentroid() const;
00084
00091 void CalculateJacobian(c_matrix<double, SPACE_DIM, ELEMENT_DIM>& rJacobian,
00092 double& rJacobianDeterminant);
00093
00100 void CalculateWeightedDirection(c_vector<double, SPACE_DIM>& rWeightedDirection, double& rJacobianDeterminant);
00101
00109 void CalculateInverseJacobian(c_matrix<double, SPACE_DIM, ELEMENT_DIM>& rJacobian,
00110 double& rJacobianDeterminant,
00111 c_matrix<double, ELEMENT_DIM, SPACE_DIM>& rInverseJacobian);
00112
00117 double GetVolume(double determinant) const;
00118
00127 void GetStiffnessMatrixGlobalIndices(unsigned problemDim, unsigned* pIndices) const;
00128 };
00129
00131
00133
00138 template<unsigned SPACE_DIM>
00139 class AbstractTetrahedralElement<0, SPACE_DIM> : public AbstractElement<0,SPACE_DIM>
00140 {
00141 public:
00142
00149 AbstractTetrahedralElement(unsigned index, const std::vector<Node<SPACE_DIM>*>& rNodes);
00150
00157 AbstractTetrahedralElement(unsigned index=INDEX_IS_NOT_USED);
00158
00162 virtual ~AbstractTetrahedralElement()
00163 {}
00164
00168 c_vector<double, SPACE_DIM> CalculateCentroid() const;
00169
00176 void CalculateWeightedDirection(c_vector<double, SPACE_DIM>& rWeightedDirection, double& rJacobianDeterminant);
00177
00186 void GetStiffnessMatrixGlobalIndices(unsigned problemDim, unsigned* pIndices) const;
00187 };
00188
00189 #endif //_ABSTRACTTETRAHEDRALELEMENT_HPP_