StreeterFibreGenerator.hpp
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
00031
00032
00033
00034
00035 #ifndef STREETERFIBREGENERATOR_HPP_
00036 #define STREETERFIBREGENERATOR_HPP_
00037
00038 #include <vector>
00039 #include <string>
00040 #include <set>
00041 #include "DistanceMapCalculator.hpp"
00042 #include "AbstractTetrahedralMesh.hpp"
00043 #include "HeartGeometryInformation.hpp"
00044 #include "AbstractPerElementWriter.hpp"
00045 #include "OutputFileHandler.hpp"
00046
00063 template<unsigned SPACE_DIM>
00064 class StreeterFibreGenerator : public AbstractPerElementWriter<SPACE_DIM, SPACE_DIM, SPACE_DIM*SPACE_DIM>
00065 {
00066 private:
00067 HeartGeometryInformation<SPACE_DIM>* mpGeometryInfo;
00069 c_vector <double, SPACE_DIM> mApexToBase;
00079 double GetAveragedThicknessLocalNode(const unsigned nodeIndex,
00080 const std::vector<double>& wallThickness) const;
00081
00087 double GetFibreMaxAngle(const c_vector<HeartRegionType, SPACE_DIM+1>& nodesRegionsForElement) const;
00088
00090 std::vector<double> mWallThickness;
00091
00093 std::vector<double> mAveragedWallThickness;
00094
00096 bool mLogInfo;
00097
00098 protected:
00099
00109 void Visit(Element<SPACE_DIM, SPACE_DIM>* pElement,
00110 unsigned localElementIndex,
00111 c_vector<double, SPACE_DIM*SPACE_DIM>& rData);
00112
00116 void WriteHeaderOnMaster();
00117
00128 void PreWriteCalculations(OutputFileHandler& rOutputDirectory);
00129
00130 public:
00136 StreeterFibreGenerator(AbstractTetrahedralMesh<SPACE_DIM,SPACE_DIM>& rMesh);
00137
00141 ~StreeterFibreGenerator();
00142
00156 void SetSurfaceFiles(const std::string &rEpicardiumFile,
00157 const std::string &rRightVentricleFile,
00158 const std::string &rLeftVentricleFile,
00159 bool indexFromZero);
00160
00161
00162
00167 void SetApexToBase(const c_vector<double, SPACE_DIM>& apexToBase);
00168
00173 void SetApexToBase(unsigned axis);
00174
00181 void SetLogInfo(bool logInfo = true);
00182 };
00183
00184 #endif