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 #ifndef NONCACHEDTETRAHEDRALMESH_HPP_
00030 #define NONCACHEDTETRAHEDRALMESH_HPP_
00031
00032 #include <boost/serialization/access.hpp>
00033 #include <boost/serialization/base_object.hpp>
00034
00035 #include "TetrahedralMesh.hpp"
00036
00037 #include <boost/serialization/export.hpp>
00038
00047 template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
00048 class NonCachedTetrahedralMesh : public TetrahedralMesh< ELEMENT_DIM, SPACE_DIM>
00049 {
00050 private:
00052 friend class boost::serialization::access;
00059 template<class Archive>
00060 void serialize(Archive & archive, const unsigned int version)
00061 {
00062 archive & boost::serialization::base_object<TetrahedralMesh<ELEMENT_DIM, SPACE_DIM> >(*this);
00063 }
00064 public:
00065
00067 void RefreshJacobianCachedData();
00068
00076 void GetJacobianForElement(unsigned elementIndex, c_matrix<double, SPACE_DIM, SPACE_DIM>& rJacobian, double& rJacobianDeterminant) const;
00077
00086 void GetInverseJacobianForElement(unsigned elementIndex, c_matrix<double, SPACE_DIM, ELEMENT_DIM>& rJacobian, double& rJacobianDeterminant, c_matrix<double, ELEMENT_DIM, SPACE_DIM>& rInverseJacobian) const;
00087
00095 void GetWeightedDirectionForElement(unsigned elementIndex, c_vector<double, SPACE_DIM>& rWeightedDirection, double& rJacobianDeterminant) const;
00096
00104 void GetWeightedDirectionForBoundaryElement(unsigned elementIndex, c_vector<double, SPACE_DIM>& rWeightedDirection, double& rJacobianDeterminant) const;
00105
00106 };
00107
00108 EXPORT_TEMPLATE_CLASS2(NonCachedTetrahedralMesh, 1, 1);
00109 EXPORT_TEMPLATE_CLASS2(NonCachedTetrahedralMesh, 2, 2);
00110 EXPORT_TEMPLATE_CLASS2(NonCachedTetrahedralMesh, 3, 3);
00111
00112 #endif