TysonNovak2001OdeSystem.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
00036 #ifndef TYSONNOVAK2001ODESYSTEM_HPP_
00037 #define TYSONNOVAK2001ODESYSTEM_HPP_
00038
00039 #include "ChasteSerialization.hpp"
00040 #include <boost/serialization/base_object.hpp>
00041
00042 #include <cmath>
00043 #include <iostream>
00044
00045 #include "AbstractOdeSystemWithAnalyticJacobian.hpp"
00046
00051 class TysonNovak2001OdeSystem : public AbstractOdeSystemWithAnalyticJacobian
00052 {
00053 private:
00054
00060 double mK1;
00062 double mK2d;
00064 double mK2dd;
00066 double mK2ddd;
00068 double mCycB_threshold;
00070 double mK3d;
00072 double mK3dd;
00074 double mK4d;
00076 double mK4;
00078 double mJ3;
00080 double mJ4;
00082 double mK5d;
00084 double mK5dd;
00086 double mK6;
00088 double mJ5;
00090 unsigned mN;
00092 double mK7;
00094 double mK8;
00096 double mJ7;
00098 double mJ8;
00100 double mMad;
00102 double mK9;
00104 double mK10;
00106 double mK11;
00108 double mK12d;
00110 double mK12dd;
00112 double mK12ddd;
00114 double mKeq;
00116 double mK13;
00118 double mK14;
00120 double mK15d;
00122 double mK15dd;
00124 double mK16d;
00126 double mK16dd;
00128 double mJ15;
00130 double mJ16;
00132 double mMu;
00134 double mMstar;
00135
00136 friend class boost::serialization::access;
00143 template<class Archive>
00144 void serialize(Archive & archive, const unsigned int version)
00145 {
00146 archive & boost::serialization::base_object<AbstractOdeSystem>(*this);
00147 }
00148
00149 public:
00150
00156 TysonNovak2001OdeSystem(std::vector<double> stateVariables=std::vector<double>());
00157
00161 ~TysonNovak2001OdeSystem();
00162
00166 void Init();
00167
00178 void EvaluateYDerivatives(double time, const std::vector<double>& rY, std::vector<double>& rDY);
00179
00189 bool CalculateStoppingEvent(double time, const std::vector<double>& rY);
00190
00200 double CalculateRootFunction(double time, const std::vector<double>& rY);
00201
00210 virtual void AnalyticJacobian(const std::vector<double>& rSolutionGuess, double** jacobian, double time, double timeStep);
00211 };
00212
00213
00214 #include "SerializationExportWrapper.hpp"
00215 CHASTE_CLASS_EXPORT(TysonNovak2001OdeSystem)
00216
00217 namespace boost
00218 {
00219 namespace serialization
00220 {
00224 template<class Archive>
00225 inline void save_construct_data(
00226 Archive & ar, const TysonNovak2001OdeSystem * t, const BOOST_PFTO unsigned int file_version)
00227 {
00228
00229 const std::vector<double> state_variables = t->rGetConstStateVariables();
00230 ar & state_variables;
00231 }
00232
00236 template<class Archive>
00237 inline void load_construct_data(
00238 Archive & ar, TysonNovak2001OdeSystem * t, const unsigned int file_version)
00239 {
00240
00241 std::vector<double> state_variables;
00242 ar & state_variables;
00243
00244
00245 ::new(t)TysonNovak2001OdeSystem(state_variables);
00246 }
00247 }
00248 }
00249
00250 #endif