BackwardEulerNobleVargheseKohlNoble1998.hpp
Go to the documentation of this file.00001 #ifndef _CML_noble_varghese_kohl_noble_1998_basic_backward_
00002 #define _CML_noble_varghese_kohl_noble_1998_basic_backward_
00003
00015 #include "ChasteSerialization.hpp"
00016 #include <boost/serialization/base_object.hpp>
00017 #include "AbstractBackwardEulerCardiacCell.hpp"
00018 #include "AbstractStimulusFunction.hpp"
00019
00020 class BackwardEulerNobleVargheseKohlNoble1998 : public AbstractBackwardEulerCardiacCell<12>
00021 {
00022 friend class TestFastSlowBackwardEulerNoble98;
00023
00024 private:
00026 friend class boost::serialization::access;
00033 template<class Archive>
00034 void serialize(Archive & archive, const unsigned int version)
00035 {
00036
00037 archive & boost::serialization::base_object<AbstractBackwardEulerCardiacCell<12> >(*this);
00038 }
00039
00040 public:
00041 BackwardEulerNobleVargheseKohlNoble1998(boost::shared_ptr<AbstractIvpOdeSolver> ,
00042 boost::shared_ptr<AbstractStimulusFunction> pIntracellularStimulus);
00043
00044 BackwardEulerNobleVargheseKohlNoble1998(boost::shared_ptr<AbstractStimulusFunction> pIntracellularStimulus);
00045
00046 private:
00047 void MakeVars();
00048
00049 public:
00050 ~BackwardEulerNobleVargheseKohlNoble1998(void)
00051 {
00052 }
00053
00054 void VerifyGatingVariables();
00055
00056 void VerifyStateVariables();
00057
00058 double GetIIonic();
00059
00060 void ComputeResidual(double var_environment__time, const double rCurrentGuess[12], double rResidual[12]);
00061
00062 void ComputeJacobian(double var_environment__time, const double rCurrentGuess[12], double rJacobian[12][12]);
00063
00064 protected:
00065 void UpdateTransmembranePotential(double var_environment__time);
00066
00067 void ComputeOneStepExceptVoltage(double var_environment__time);
00068
00069 };
00070
00071
00072 #include "SerializationExportWrapper.hpp"
00073 CHASTE_CLASS_EXPORT(BackwardEulerNobleVargheseKohlNoble1998)
00074
00075 namespace boost
00076 {
00077 namespace serialization
00078 {
00083 template<class Archive>
00084 inline void save_construct_data(
00085 Archive & ar, const BackwardEulerNobleVargheseKohlNoble1998 * t, const unsigned int file_version)
00086 {
00087 const boost::shared_ptr<AbstractIvpOdeSolver> p_solver = t->GetSolver();
00088 const boost::shared_ptr<AbstractStimulusFunction> p_stimulus = t->GetStimulusFunction();
00089 ar << p_solver;
00090 ar << p_stimulus;
00091 }
00092
00097 template<class Archive>
00098 inline void load_construct_data(
00099 Archive & ar, BackwardEulerNobleVargheseKohlNoble1998 * t, const unsigned int file_version)
00100 {
00101 boost::shared_ptr<AbstractIvpOdeSolver> p_solver;
00102 boost::shared_ptr<AbstractStimulusFunction> p_stimulus;
00103 ar >> p_solver;
00104 ar >> p_stimulus;
00105 ::new(t)BackwardEulerNobleVargheseKohlNoble1998(p_solver, p_stimulus);
00106 }
00107 }
00108 }
00109
00110
00111 #endif