#include <AbstractCvodeSystem.hpp>
Inherits AbstractParameterisedSystem< N_Vector >.
Inherited by AbstractCvodeCell.
Public Member Functions | |
AbstractCvodeSystem (unsigned numberOfStateVariables) | |
virtual | ~AbstractCvodeSystem () |
virtual void | EvaluateYDerivatives (realtype time, N_Vector y, N_Vector ydot)=0 |
void | SetAutoReset (bool autoReset) |
void | ResetSolver () |
OdeSolution | Solve (realtype tStart, realtype tEnd, realtype maxDt, realtype tSamp) |
void | Solve (realtype tStart, realtype tEnd, realtype maxDt) |
void | SetMaxSteps (long int numSteps) |
long int | GetMaxSteps () |
void | SetTolerances (double relTol=1e-5, double absTol=1e-7) |
double | GetRelativeTolerance () |
double | GetAbsoluteTolerance () |
double | GetLastStepSize () |
Protected Member Functions | |
void | Init () |
Protected Attributes | |
bool | mUseAnalyticJacobian |
double | mRelTol |
double | mAbsTol |
void * | mpCvodeMem |
long int | mMaxSteps |
double | mLastInternalStepSize |
Private Member Functions | |
void | SetupCvode (N_Vector initialConditions, realtype tStart, realtype maxDt) |
void | RecordStoppingPoint (double stopTime) |
void | FreeCvodeMemory () |
void | CvodeError (int flag, const char *msg) |
Private Attributes | |
N_Vector | mLastSolutionState |
double | mLastSolutionTime |
bool | mAutoReset |
Abstract OdeSystem class for Cvode systems (N_Vector instead of std::vector)
Sets up variables and functions for a general CVODE 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.
CVODE 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.
Also, subclasses may define a condition at which ODE solvers should stop prematurely. For this class CVODE solvers are being used, so CalculateRootFunction() should be used to detect the stopping time.
Definition at line 82 of file AbstractCvodeSystem.hpp.
AbstractCvodeSystem::AbstractCvodeSystem | ( | unsigned | numberOfStateVariables | ) |
Constructor.
numberOfStateVariables | the number of state variables in the ODE system |
Definition at line 72 of file AbstractCvodeSystem.cpp.
References SetTolerances().
AbstractCvodeSystem::~AbstractCvodeSystem | ( | ) | [virtual] |
Virtual destructor since we have virtual methods.
Definition at line 96 of file AbstractCvodeSystem.cpp.
References DeleteVector(), FreeCvodeMemory(), mLastSolutionState, AbstractParameterisedSystem< N_Vector >::mParameters, and AbstractParameterisedSystem< N_Vector >::mStateVariables.
void AbstractCvodeSystem::CvodeError | ( | int | flag, | |
const char * | msg | |||
) | [private] |
Report an error from CVODE.
flag | CVODE error code | |
msg | Our description of the error |
Definition at line 339 of file AbstractCvodeSystem.cpp.
References EXCEPTION.
Referenced by Solve().
virtual void AbstractCvodeSystem::EvaluateYDerivatives | ( | realtype | time, | |
N_Vector | y, | |||
N_Vector | ydot | |||
) | [pure virtual] |
Method to evaluate the derivatives of the system.
time | the current time | |
y | the current values of the state variables | |
ydot | storage for the derivatives of the system; will be filled in on return |
void AbstractCvodeSystem::FreeCvodeMemory | ( | ) | [private] |
Free CVODE memory when finished with.
Definition at line 329 of file AbstractCvodeSystem.cpp.
References mpCvodeMem.
Referenced by Solve(), and ~AbstractCvodeSystem().
double AbstractCvodeSystem::GetAbsoluteTolerance | ( | ) |
Get the absolute tolerance.
Definition at line 219 of file AbstractCvodeSystem.cpp.
References mAbsTol.
double AbstractCvodeSystem::GetLastStepSize | ( | ) |
Get the last step size used internally by CVODE in the last Solve call.
Definition at line 224 of file AbstractCvodeSystem.cpp.
References mLastInternalStepSize.
long int AbstractCvodeSystem::GetMaxSteps | ( | ) |
Get the maximum number of steps to be taken by the solver in its attempt to reach the next output time.
Definition at line 202 of file AbstractCvodeSystem.cpp.
References mMaxSteps.
double AbstractCvodeSystem::GetRelativeTolerance | ( | ) |
Get the relative tolerance.
Definition at line 214 of file AbstractCvodeSystem.cpp.
References mRelTol.
void AbstractCvodeSystem::Init | ( | ) | [protected] |
Must be called by concrete subclass constructors to initialise the state variables, after setting mpSystemInfo.
Definition at line 84 of file AbstractCvodeSystem.cpp.
References DeleteVector(), AbstractParameterisedSystem< N_Vector >::GetInitialConditions(), AbstractParameterisedSystem< N_Vector >::mParameters, AbstractParameterisedSystem< N_Vector >::mStateVariables, and AbstractUntemplatedParameterisedSystem::rGetParameterNames().
void AbstractCvodeSystem::RecordStoppingPoint | ( | double | stopTime | ) | [private] |
Record where the last solve got to so we know whether to re-initialise.
stopTime | the finishing time |
Definition at line 314 of file AbstractCvodeSystem.cpp.
References CreateVectorIfEmpty(), AbstractUntemplatedParameterisedSystem::GetNumberOfStateVariables(), GetVectorComponent(), mAutoReset, mLastSolutionState, mLastSolutionTime, AbstractParameterisedSystem< N_Vector >::mStateVariables, and SetVectorComponent().
Referenced by Solve().
void AbstractCvodeSystem::ResetSolver | ( | ) |
Successive calls to Solve will attempt to intelligently determine whether to re-initialise the internal CVODE solver, or whether we are simply extending the previous solution forward in time. This mechanism compares the state vector to its previous value, and the start time to the end of the last solve, which captures most cases where re-initialisation is required. However, changes to the RHS function can also require this, and cannot be automatically detected. In such cases users must call this function to force re-initialisation.
Definition at line 243 of file AbstractCvodeSystem.cpp.
References DeleteVector(), and mLastSolutionState.
Referenced by SetAutoReset(), SetTolerances(), and AbstractCvodeCell::SetVoltageDerivativeToZero().
void AbstractCvodeSystem::SetAutoReset | ( | bool | autoReset | ) |
Set whether to automatically re-initialise CVODE on every call to Solve, or whether to attempt to guess when re-initialisation is needed. See also ResetSolver.
autoReset | whether to reset on every Solve |
Definition at line 236 of file AbstractCvodeSystem.cpp.
References mAutoReset, and ResetSolver().
void AbstractCvodeSystem::SetMaxSteps | ( | long int | numSteps | ) |
Change the maximum number of steps to be taken by the solver in its attempt to reach the next output time. Default is 500 (set by CVODE).
numSteps | new maximum |
Definition at line 197 of file AbstractCvodeSystem.cpp.
References mMaxSteps.
Set relative and absolute tolerances; both scalars. If no parameters are given, tolerances will be reset to default values.
relTol | the relative tolerance for the solver (defaults to 1e-5) | |
absTol | the absolute tolerance for the solver (defaults to 1e-7) |
Definition at line 207 of file AbstractCvodeSystem.cpp.
References mAbsTol, mRelTol, and ResetSolver().
Referenced by AbstractCvodeSystem().
void AbstractCvodeSystem::SetupCvode | ( | N_Vector | initialConditions, | |
realtype | tStart, | |||
realtype | maxDt | |||
) | [private] |
Set up the CVODE data structures needed to solve the given system from a given point.
initialConditions | initial conditions | |
tStart | start time of simulation | |
maxDt | maximum time step to take |
Definition at line 249 of file AbstractCvodeSystem.cpp.
References EXCEPTION, AbstractUntemplatedParameterisedSystem::GetNumberOfStateVariables(), GetVectorComponent(), mAbsTol, mAutoReset, mLastSolutionState, mLastSolutionTime, mMaxSteps, mpCvodeMem, mRelTol, and AbstractParameterisedSystem< N_Vector >::mStateVariables.
Referenced by Solve().
void AbstractCvodeSystem::Solve | ( | realtype | tStart, | |
realtype | tEnd, | |||
realtype | maxDt | |||
) |
Simulate the cell, updating its internal state variables.
Uses the current values of the state variables at initial conditions. If the state variables have not been set (either by a prior solve, or a call to SetStateVariables) the initial conditions (given by GetInitialConditions) will be used.
tStart | start time of simulation | |
tEnd | end time of simulation | |
maxDt | maximum time step to be taken by the adaptive solver (set this appropriately to avoid missing a stimulus) |
Definition at line 170 of file AbstractCvodeSystem.cpp.
References CvodeError(), FreeCvodeMemory(), mLastInternalStepSize, mpCvodeMem, AbstractParameterisedSystem< N_Vector >::mStateVariables, RecordStoppingPoint(), SetupCvode(), and AbstractParameterisedSystem< N_Vector >::VerifyStateVariables().
OdeSolution AbstractCvodeSystem::Solve | ( | realtype | tStart, | |
realtype | tEnd, | |||
realtype | maxDt, | |||
realtype | tSamp | |||
) |
Simulate the cell, returning a sampling of the state variables.
Uses the current values of the state variables at initial conditions. If the state variables have not been set (either by a prior solve, or a call to SetStateVariables) the initial conditions (given by GetInitialConditions) will be used.
The final values of the state variables will also be stored in this object.
tStart | start time of simulation | |
tEnd | end time of simulation | |
maxDt | maximum time step to be taken by the adaptive solver (set this appropriately to avoid missing a stimulus) | |
tSamp | sampling interval at which to store results |
Definition at line 118 of file AbstractCvodeSystem.cpp.
References TimeStepper::AdvanceOneTimeStep(), CvodeError(), TimeStepper::EstimateTimeSteps(), FreeCvodeMemory(), TimeStepper::GetNextTime(), TimeStepper::GetTotalTimeStepsTaken(), TimeStepper::IsTimeAtEnd(), MakeStdVec(), mLastInternalStepSize, mpCvodeMem, AbstractUntemplatedParameterisedSystem::mpSystemInfo, AbstractParameterisedSystem< N_Vector >::mStateVariables, RecordStoppingPoint(), OdeSolution::rGetSolutions(), OdeSolution::rGetTimes(), OdeSolution::SetNumberOfTimeSteps(), OdeSolution::SetOdeSystemInformation(), SetupCvode(), and AbstractParameterisedSystem< N_Vector >::VerifyStateVariables().
Referenced by AbstractCvodeCell::Compute(), and AbstractCvodeCell::SolveAndUpdateState().
double AbstractCvodeSystem::mAbsTol [protected] |
Absolute tolerance for solver.
Definition at line 131 of file AbstractCvodeSystem.hpp.
Referenced by GetAbsoluteTolerance(), SetTolerances(), and SetupCvode().
bool AbstractCvodeSystem::mAutoReset [private] |
Whether to automatically reset CVODE on each Solve call.
Definition at line 120 of file AbstractCvodeSystem.hpp.
Referenced by RecordStoppingPoint(), SetAutoReset(), and SetupCvode().
double AbstractCvodeSystem::mLastInternalStepSize [protected] |
The size of the previous timestep.
Definition at line 143 of file AbstractCvodeSystem.hpp.
Referenced by GetLastStepSize(), and Solve().
Remember where the last solve got to so we know whether to re-initialise.
Definition at line 114 of file AbstractCvodeSystem.hpp.
Referenced by RecordStoppingPoint(), ResetSolver(), SetupCvode(), and ~AbstractCvodeSystem().
double AbstractCvodeSystem::mLastSolutionTime [private] |
Remember where the last solve got to so we know whether to re-initialise.
Definition at line 117 of file AbstractCvodeSystem.hpp.
Referenced by RecordStoppingPoint(), and SetupCvode().
long int AbstractCvodeSystem::mMaxSteps [protected] |
The maximum number of steps to be taken by the solver in its attempt to reach the next output time.
Definition at line 140 of file AbstractCvodeSystem.hpp.
Referenced by GetMaxSteps(), SetMaxSteps(), and SetupCvode().
void* AbstractCvodeSystem::mpCvodeMem [protected] |
CVODE's internal data.
Definition at line 134 of file AbstractCvodeSystem.hpp.
Referenced by FreeCvodeMemory(), SetupCvode(), and Solve().
double AbstractCvodeSystem::mRelTol [protected] |
Relative tolerance for solver.
Definition at line 128 of file AbstractCvodeSystem.hpp.
Referenced by GetRelativeTolerance(), SetTolerances(), and SetupCvode().
bool AbstractCvodeSystem::mUseAnalyticJacobian [protected] |
Whether to use an analytic Jacobian.
Definition at line 125 of file AbstractCvodeSystem.hpp.