AbstractOdeSystem Class Reference

#include <AbstractOdeSystem.hpp>

Inheritance diagram for AbstractOdeSystem:

Inheritance graph
[legend]
Collaboration diagram for AbstractOdeSystem:

Collaboration graph
[legend]

List of all members.

Public Member Functions

 AbstractOdeSystem (unsigned numberOfStateVariables)
virtual ~AbstractOdeSystem ()
virtual void EvaluateYDerivatives (double time, const std::vector< double > &rY, std::vector< double > &rDY)=0
virtual bool CalculateStoppingEvent (double time, const std::vector< double > &rY)
virtual double CalculateRootFunction (double time, const std::vector< double > &rY)
bool GetUseAnalyticJacobian ()
const std::vector< double > & rGetConstStateVariables () const

Protected Member Functions

std::string DumpState (const std::string &rMessage, std::vector< double > Y=std::vector< double >())

Protected Attributes

bool mUseAnalyticJacobian

Private Member Functions

template<class Archive>
void save (Archive &archive, const unsigned int version) const
template<class Archive>
void load (Archive &archive, const unsigned int version)

Friends

class TestAbstractOdeSystem
class boost::serialization::access


Detailed Description

Abstract OdeSystem class.

Sets up variables and functions for a general ODE system.

ODE systems are specified primarily by the EvaluateYDerivatives() method, which calculates the right-hand side of the system.

Instances can store their state internally in the mStateVariables vector in our base class AbstractParameterisedSystem (see also GetNumberOfStateVariables(), SetStateVariables() and rGetStateVariables()), although this is not essential - the vector may be empty, in which case AbstractIvpOdeSolver::SolveAndUpdateStateVariable may not be used to solve the system.

ODE systems may also have a vector of parameters, which can be accessed through the GetParameter() and SetParameter() methods of our base class.

Information about what the parameters and state variables represent is provided by a subclass of AbstractOdeSystemInformation. Various wrapper methods (e.g. rGetStateVariableNames()) are provided in our base class to access this information.

There are two more advanced facilities available for subclass authors. An analytic form for the Jacobian matrix of the system may be provided, in which case you must subclass AbstractOdeSystemWithAnalyticJacobian. The GetUseAnalyticJacobian() method will test whether this is the case.

Also, subclasses may define a condition at which ODE solvers should stop prematurely. For the Chaste solvers this is done by overriding CalculateStoppingEvent(); if the more advanced CVODE solvers are being used then implement CalculateRootFunction() instead to detect the stopping time more accurately.

Definition at line 80 of file AbstractOdeSystem.hpp.


Constructor & Destructor Documentation

AbstractOdeSystem::AbstractOdeSystem ( unsigned  numberOfStateVariables  ) 

Constructor.

Parameters:
numberOfStateVariables the number of state variables in the ODE system

Definition at line 35 of file AbstractOdeSystem.cpp.

AbstractOdeSystem::~AbstractOdeSystem (  )  [virtual]

Virtual destructor since we have virtual methods.

Definition at line 41 of file AbstractOdeSystem.cpp.


Member Function Documentation

template<class Archive>
void AbstractOdeSystem::save ( Archive &  archive,
const unsigned int  version 
) const [inline, private]

template<class Archive>
void AbstractOdeSystem::load ( Archive &  archive,
const unsigned int  version 
) [inline, private]

std::string AbstractOdeSystem::DumpState ( const std::string &  rMessage,
std::vector< double >  Y = std::vector<double>() 
) [protected]

Used to include extra debugging information in exception messages. For example, EXCEPTION(DumpState("Gating variable out of range"));

Parameters:
rMessage the exception message
Y the values of the state variables (optional input argument)

Definition at line 50 of file AbstractOdeSystem.cpp.

References AbstractParameterisedSystem< std::vector< double > >::rGetStateVariableNames(), and AbstractParameterisedSystem< std::vector< double > >::rGetStateVariables().

virtual void AbstractOdeSystem::EvaluateYDerivatives ( double  time,
const std::vector< double > &  rY,
std::vector< double > &  rDY 
) [pure virtual]

bool AbstractOdeSystem::CalculateStoppingEvent ( double  time,
const std::vector< double > &  rY 
) [virtual]

CalculateStoppingEvent() - can be overloaded if the ODE is to be solved only until a particular event (for example, only until the y value becomes negative.

After each timestep the solver will call this method on the ODE to see if it should stop there. By default, false is returned here.

Parameters:
time the current time
rY the current values of the state variables

Reimplemented in Alarcon2004OxygenBasedCellCycleOdeSystem, TysonNovak2001OdeSystem, VanLeeuwen2009WntSwatCellCycleOdeSystem, and WntCellCycleOdeSystem.

Definition at line 45 of file AbstractOdeSystem.cpp.

Referenced by CalculateRootFunction(), RungeKuttaFehlbergIvpOdeSolver::InternalSolve(), AbstractOneStepIvpOdeSolver::InternalSolve(), RungeKuttaFehlbergIvpOdeSolver::Solve(), CvodeAdaptor::Solve(), and AbstractOneStepIvpOdeSolver::Solve().

double AbstractOdeSystem::CalculateRootFunction ( double  time,
const std::vector< double > &  rY 
) [virtual]

An alternative approach to stopping events; currently only useful with CVODE. CVODE can search for roots (zeros) of this function while solving the ODE system, and home in on them to find sign transitions to high precision.

The default implementation here fakes a root function using CalculateStoppingEvent.

Parameters:
time the current time
rY the current values of the state variables

Reimplemented in TysonNovak2001OdeSystem, VanLeeuwen2009WntSwatCellCycleOdeSystem, and WntCellCycleOdeSystem.

Definition at line 68 of file AbstractOdeSystem.cpp.

References CalculateStoppingEvent().

bool AbstractOdeSystem::GetUseAnalyticJacobian (  ) 

Get whether an analytic Jacobian is used.

Returns:
mUseAnalyticJacobian

Definition at line 74 of file AbstractOdeSystem.cpp.

References mUseAnalyticJacobian.

Referenced by BackwardEulerIvpOdeSolver::ComputeJacobian().

const std::vector< double > & AbstractOdeSystem::rGetConstStateVariables (  )  const

Todo:
move to AbstractParameterisedSystem? (1540)
Returns:
const reference to the state variables in the ODE system (used in archiving).

Definition at line 79 of file AbstractOdeSystem.cpp.

References AbstractParameterisedSystem< std::vector< double > >::mStateVariables.


Member Data Documentation

Whether to use an analytic Jacobian.

Definition at line 173 of file AbstractOdeSystem.hpp.

Referenced by AbstractOdeSystemWithAnalyticJacobian::AbstractOdeSystemWithAnalyticJacobian(), GetUseAnalyticJacobian(), load(), and save().


The documentation for this class was generated from the following files:

Generated on Tue May 31 14:32:23 2011 for Chaste by  doxygen 1.5.5