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 _PSEUDOECGALCALCULATOR_HPP_
00030 #define _PSEUDOECGALCALCULATOR_HPP_
00031
00032 #include "AbstractFunctionalCalculator.hpp"
00033 #include "AbstractTetrahedralMesh.hpp"
00034 #include "ChastePoint.hpp"
00035 #include "UblasCustomFunctions.hpp"
00036 #include "Hdf5DataReader.hpp"
00037
00053 template<unsigned ELEMENT_DIM, unsigned SPACE_DIM, unsigned PROBLEM_DIM>
00054 class PseudoEcgCalculator : public AbstractFunctionalCalculator<ELEMENT_DIM, SPACE_DIM, PROBLEM_DIM>
00055 {
00056 private:
00057
00058 friend class TestPseudoEcgCalculator;
00059
00060 Hdf5DataReader* mpDataReader;
00061 unsigned mNumberOfNodes;
00062 unsigned mNumTimeSteps;
00063 AbstractTetrahedralMesh<ELEMENT_DIM,SPACE_DIM>& mrMesh;
00064 ChastePoint<SPACE_DIM> mProbeElectrode;
00065 double mDiffusionCoefficient;
00066 std::string mVariableName;
00078 double GetIntegrand(ChastePoint<SPACE_DIM>& rX,
00079 c_vector<double,PROBLEM_DIM>& rU,
00080 c_matrix<double,PROBLEM_DIM,SPACE_DIM>& rGradU);
00081
00082
00090 double ComputePseudoEcgAtOneTimeStep (unsigned timeStep);
00091
00092 public:
00093
00105 PseudoEcgCalculator (AbstractTetrahedralMesh<ELEMENT_DIM,SPACE_DIM>& rMesh,
00106 const ChastePoint<SPACE_DIM>& rProbeElectrode,
00107 std::string directory,
00108 std::string hdf5File,
00109 std::string variableName = "V",
00110 bool makeAbsolute = true);
00111
00115 ~PseudoEcgCalculator();
00116
00117
00124 void SetDiffusionCoefficient(double diffusionCoefficient);
00125
00134 void WritePseudoEcg();
00135
00136 };
00137
00138 #endif //_PSEUDOECGALCALCULATOR_HPP_
00139
00140