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 MONODOMAINPDE_HPP_
00031 #define MONODOMAINPDE_HPP_
00032
00033 #include <boost/serialization/access.hpp>
00034 #include <boost/serialization/base_object.hpp>
00035
00036 #include <vector>
00037 #include "AbstractCardiacPde.hpp"
00038 #include "AbstractCardiacCellFactory.hpp"
00039 #include "AbstractLinearParabolicPde.hpp"
00040 #include "Node.hpp"
00041 #include "Element.hpp"
00042
00043
00044 #include <boost/serialization/export.hpp>
00045
00046
00061 template <unsigned ELEM_DIM, unsigned SPACE_DIM = ELEM_DIM>
00062 class MonodomainPde : public virtual AbstractCardiacPde<ELEM_DIM,SPACE_DIM>, public AbstractLinearParabolicPde<ELEM_DIM, SPACE_DIM>
00063 {
00064 private:
00065 friend class TestMonodomainPde;
00066
00068 friend class boost::serialization::access;
00075 template<class Archive>
00076 void serialize(Archive & archive, const unsigned int version)
00077 {
00078 archive & boost::serialization::base_object<AbstractCardiacPde<SPACE_DIM> >(*this);
00079 }
00080
00081
00082 public:
00084 MonodomainPde(AbstractCardiacCellFactory<ELEM_DIM,SPACE_DIM>* pCellFactory);
00085
00086
00090 MonodomainPde(std::vector<AbstractCardiacCell*> & rCellsDistributed);
00091
00092
00093
00094 #define COVERAGE_IGNORE
00095
00099 double ComputeLinearSourceTerm(const ChastePoint<SPACE_DIM>& );
00100
00105 double ComputeNonlinearSourceTerm(const ChastePoint<SPACE_DIM>& , double );
00106 #undef COVERAGE_IGNORE
00107
00115 virtual c_matrix<double, SPACE_DIM, SPACE_DIM> ComputeDiffusionTerm(
00116 const ChastePoint<SPACE_DIM>& rX,
00117 Element<ELEM_DIM,SPACE_DIM>* pElement);
00118
00119
00120 double ComputeNonlinearSourceTermAtNode(const Node<SPACE_DIM>& node, double );
00121
00122
00123 double ComputeDuDtCoefficientFunction(const ChastePoint<SPACE_DIM>& );
00124 };
00125
00126
00127 EXPORT_TEMPLATE_CLASS2(MonodomainPde, 1, 1)
00128 EXPORT_TEMPLATE_CLASS2(MonodomainPde, 2, 2)
00129 EXPORT_TEMPLATE_CLASS2(MonodomainPde, 3, 3)
00130
00131 namespace boost
00132 {
00133 namespace serialization
00134 {
00135
00136 template<class Archive, unsigned ELEM_DIM, unsigned SPACE_DIM>
00137 inline void save_construct_data(
00138 Archive & ar, const MonodomainPde<ELEM_DIM, SPACE_DIM> * t, const unsigned int file_version)
00139 {
00140
00141 const std::vector<AbstractCardiacCell*> & r_cells_distributed = t->GetCellsDistributed();
00142
00143 ar << r_cells_distributed;
00144 }
00145
00150 template<class Archive, unsigned ELEM_DIM, unsigned SPACE_DIM>
00151 inline void load_construct_data(
00152 Archive & ar, MonodomainPde<ELEM_DIM, SPACE_DIM> * t, const unsigned int file_version)
00153 {
00154 std::vector<AbstractCardiacCell*> cells_distributed;
00155
00156 ar >> cells_distributed;
00157
00158 ::new(t)MonodomainPde<ELEM_DIM, SPACE_DIM>(cells_distributed);
00159 }
00160 }
00161 }
00162
00163
00164 #endif