Chaste Release::3.1
TysonNovak2001OdeSystem.hpp
00001 /*
00002 
00003 Copyright (c) 2005-2012, University of Oxford.
00004 All rights reserved.
00005 
00006 University of Oxford means the Chancellor, Masters and Scholars of the
00007 University of Oxford, having an administrative office at Wellington
00008 Square, Oxford OX1 2JD, UK.
00009 
00010 This file is part of Chaste.
00011 
00012 Redistribution and use in source and binary forms, with or without
00013 modification, are permitted provided that the following conditions are met:
00014  * Redistributions of source code must retain the above copyright notice,
00015    this list of conditions and the following disclaimer.
00016  * Redistributions in binary form must reproduce the above copyright notice,
00017    this list of conditions and the following disclaimer in the documentation
00018    and/or other materials provided with the distribution.
00019  * Neither the name of the University of Oxford nor the names of its
00020    contributors may be used to endorse or promote products derived from this
00021    software without specific prior written permission.
00022 
00023 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
00024 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00025 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
00026 ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
00027 LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
00028 CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
00029 GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
00030 HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
00031 LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
00032 OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
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 // Declare identifier for the serializer
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     // Save data required to construct instance
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     // Retrieve data from archive required to construct new instance
00241     std::vector<double> state_variables;
00242     ar & state_variables;
00243 
00244     // Invoke inplace constructor to initialise instance
00245     ::new(t)TysonNovak2001OdeSystem(state_variables);
00246 }
00247 }
00248 } // namespace ...
00249 
00250 #endif /*TYSONNOVAK2001ODESYSTEM_HPP_*/