00001 #ifndef _MALECKAR2009ODESYSTEM_ 00002 #define _MALECKAR2009ODESYSTEM_ 00003 00015 00016 #include "ChasteSerialization.hpp" 00017 #include <boost/serialization/base_object.hpp> 00018 #include "AbstractCardiacCell.hpp" 00019 #include "AbstractStimulusFunction.hpp" 00020 #include "AbstractIvpOdeSolver.hpp" 00021 00031 class Maleckar2009OdeSystem : public AbstractCardiacCell 00032 { 00033 00034 private: 00036 double mScaleFactorGks; 00038 double mScaleFactorIto; 00040 double mScaleFactorGkr; 00042 double mScaleFactorGna; 00044 double mScaleFactorAch; 00046 double mScaleFactorGNaK; 00048 double mScaleFactorGNaCa; 00050 double mScaleFactorGCaL; 00052 double mScaleFactorGKur; 00054 double mScaleFactorGK1; 00056 double mScaleFactorAZD; 00057 00065 void VerifyStateVariables(); 00066 00068 friend class boost::serialization::access; 00069 00076 template<class Archive> 00077 void serialize(Archive & archive, const unsigned int version) 00078 { 00079 archive & boost::serialization::base_object<AbstractCardiacCell>(*this); 00080 } 00081 00082 public: 00083 00090 Maleckar2009OdeSystem(boost::shared_ptr<AbstractIvpOdeSolver> pSolver, 00091 boost::shared_ptr<AbstractStimulusFunction> pIntracellularStimulus); 00092 00096 ~Maleckar2009OdeSystem(void); 00097 00102 void SetScaleFactorGks(double sfgks); 00103 00108 void SetScaleFactorIto(double sfito); 00109 00114 void SetScaleFactorGkr(double sfgkr); 00115 00120 void SetScaleFactorGna(double sfgna); 00121 00126 void SetScaleFactorAch(double sfach); 00127 00132 void SetScaleFactorGNaK(double sfgnak); 00133 00138 void SetScaleFactorGNaCa(double sfgnaca); 00139 00144 void SetScaleFactorGCaL(double sfgcal); 00145 00150 void SetScaleFactorGKur(double sfgkur); 00151 00156 void SetScaleFactorGK1(double sfgk1); 00157 00162 void SetScaleFactorAZD(double sfazd); 00163 00169 double GetIIonic(); 00170 00180 void EvaluateYDerivatives( 00181 double var_environment__time, 00182 const std::vector<double> &rY, 00183 std::vector<double> &rDY); 00184 00185 }; 00186 00187 // Needs to be included last 00188 #include "SerializationExportWrapper.hpp" 00189 CHASTE_CLASS_EXPORT(Maleckar2009OdeSystem) 00190 00191 namespace boost 00192 { 00193 namespace serialization 00194 { 00195 template<class Archive> 00196 inline void save_construct_data( 00197 Archive & ar, const Maleckar2009OdeSystem * t, const unsigned int fileVersion) 00198 { 00199 const boost::shared_ptr<AbstractIvpOdeSolver> p_solver = t->GetSolver(); 00200 const boost::shared_ptr<AbstractStimulusFunction> p_stimulus = t->GetStimulusFunction(); 00201 ar << p_solver; 00202 ar << p_stimulus; 00203 } 00204 00205 template<class Archive> 00206 inline void load_construct_data( 00207 Archive & ar, Maleckar2009OdeSystem * t, const unsigned int fileVersion) 00208 { 00209 boost::shared_ptr<AbstractIvpOdeSolver> p_solver; 00210 boost::shared_ptr<AbstractStimulusFunction> p_stimulus; 00211 ar >> p_solver; 00212 ar >> p_stimulus; 00213 ::new(t)Maleckar2009OdeSystem(p_solver, p_stimulus); 00214 } 00215 00216 } 00217 00218 } 00219 00220 #endif