AbstractBackwardEulerCardiacCell< SIZE > Class Template Reference

#include <AbstractBackwardEulerCardiacCell.hpp>

Inherits AbstractCardiacCell.

Collaboration diagram for AbstractBackwardEulerCardiacCell< SIZE >:
Collaboration graph
[legend]

List of all members.

Public Member Functions

 AbstractBackwardEulerCardiacCell (unsigned numberOfStateVariables, unsigned voltageIndex, boost::shared_ptr< AbstractStimulusFunction > pIntracellularStimulus)
virtual ~AbstractBackwardEulerCardiacCell ()
virtual void ComputeResidual (double time, const double rCurrentGuess[SIZE], double rResidual[SIZE])=0
virtual void ComputeJacobian (double time, const double rCurrentGuess[SIZE], double rJacobian[SIZE][SIZE])=0
OdeSolution Compute (double tStart, double tEnd, double tSamp=0.0)
void ComputeExceptVoltage (double tStart, double tEnd)
void SolveAndUpdateState (double tStart, double tEnd)

Protected Member Functions

virtual void ComputeOneStepExceptVoltage (double tStart)=0
virtual void UpdateTransmembranePotential (double time)=0

Private Member Functions

template<class Archive >
void serialize (Archive &archive, const unsigned int version)
void EvaluateYDerivatives (double time, const std::vector< double > &rY, std::vector< double > &rDY)

Friends

class boost::serialization::access

Detailed Description

template<unsigned SIZE>
class AbstractBackwardEulerCardiacCell< SIZE >

This is the base class for cardiac cells solved using a (decoupled) backward Euler approach (see http://dx.doi.org/10.1109/TBME.2006.879425).

The basic approach to solving such models is:

Definition at line 60 of file AbstractBackwardEulerCardiacCell.hpp.


Constructor & Destructor Documentation

template<unsigned SIZE>
AbstractBackwardEulerCardiacCell< SIZE >::AbstractBackwardEulerCardiacCell ( unsigned  numberOfStateVariables,
unsigned  voltageIndex,
boost::shared_ptr< AbstractStimulusFunction pIntracellularStimulus 
) [inline]

Standard constructor for a cell.

Parameters:
numberOfStateVariables the size of the ODE system
voltageIndex the index of the variable representing the transmembrane potential within the state variable vector
pIntracellularStimulus the intracellular stimulus function

Some notes for future reference:

  • We may want to remove the timestep from this class, and instead pass it to the Compute* methods, especially if variable timestepping is to be used.
  • It's a pity that inheriting from AbstractCardiacCell forces us to store a null pointer (for the unused ODE solver) in every instance. We may want to revisit this design decision at a later date.

Definition at line 198 of file AbstractBackwardEulerCardiacCell.hpp.

template<unsigned SIZE>
AbstractBackwardEulerCardiacCell< SIZE >::~AbstractBackwardEulerCardiacCell (  )  [inline, virtual]

Virtual destructor

Definition at line 209 of file AbstractBackwardEulerCardiacCell.hpp.


Member Function Documentation

template<unsigned SIZE>
OdeSolution AbstractBackwardEulerCardiacCell< SIZE >::Compute ( double  tStart,
double  tEnd,
double  tSamp = 0.0 
) [inline, virtual]

Simulates this cell's behaviour between the time interval [tStart, tEnd], with timestep mDt. Uses a forward Euler step to update the transmembrane potential at each timestep.

The length of the time interval must be a multiple of the timestep.

Parameters:
tStart beginning of the time interval to simulate
tEnd end of the time interval to simulate
tSamp sampling interval for returned results (defaults to mDt)
Returns:
the values of each state variable, at intervals of tSamp.

Reimplemented from AbstractCardiacCell.

Definition at line 213 of file AbstractBackwardEulerCardiacCell.hpp.

References AbstractBackwardEulerCardiacCell< SIZE >::ComputeOneStepExceptVoltage(), AbstractCardiacCell::mDt, AbstractUntemplatedParameterisedSystem::mpSystemInfo, OdeSolution::rGetSolutions(), AbstractParameterisedSystem< std::vector< double > >::rGetStateVariables(), OdeSolution::rGetTimes(), OdeSolution::SetNumberOfTimeSteps(), OdeSolution::SetOdeSystemInformation(), AbstractBackwardEulerCardiacCell< SIZE >::UpdateTransmembranePotential(), and AbstractParameterisedSystem< std::vector< double > >::VerifyStateVariables().

template<unsigned SIZE>
void AbstractBackwardEulerCardiacCell< SIZE >::ComputeExceptVoltage ( double  tStart,
double  tEnd 
) [inline, virtual]

Simulates this cell's behaviour between the time interval [tStart, tEnd], with timestep mDt. The transmembrane potential is kept fixed throughout.

The length of the time interval must be a multiple of the timestep.

Parameters:
tStart beginning of the time interval to simulate
tEnd end of the time interval to simulate

Reimplemented from AbstractCardiacCell.

Definition at line 265 of file AbstractBackwardEulerCardiacCell.hpp.

References AbstractBackwardEulerCardiacCell< SIZE >::ComputeOneStepExceptVoltage(), AbstractCardiacCell::mDt, and AbstractParameterisedSystem< std::vector< double > >::VerifyStateVariables().

template<unsigned SIZE>
virtual void AbstractBackwardEulerCardiacCell< SIZE >::ComputeJacobian ( double  time,
const double  rCurrentGuess[SIZE],
double  rJacobian[SIZE][SIZE] 
) [pure virtual]

Compute the Jacobian matrix for the nonlinear system portion of the cell model.

Parameters:
time the current time
rCurrentGuess the current guess for $U_n$
rJacobian to be filled in with the Jacobian matrix
template<unsigned SIZE>
virtual void AbstractBackwardEulerCardiacCell< SIZE >::ComputeOneStepExceptVoltage ( double  tStart  )  [protected, pure virtual]

Compute the values of all state variables, except the voltage, using backward Euler, for one timestep from tStart.

Note:
This method must be provided by subclasses.
Parameters:
tStart start of this timestep

Referenced by AbstractBackwardEulerCardiacCell< SIZE >::Compute(), AbstractBackwardEulerCardiacCell< SIZE >::ComputeExceptVoltage(), and AbstractBackwardEulerCardiacCell< SIZE >::SolveAndUpdateState().

template<unsigned SIZE>
virtual void AbstractBackwardEulerCardiacCell< SIZE >::ComputeResidual ( double  time,
const double  rCurrentGuess[SIZE],
double  rResidual[SIZE] 
) [pure virtual]

Compute the residual of the nonlinear system portion of the cell model.

Parameters:
time the current time
rCurrentGuess the current guess for $U_n$
rResidual to be filled in with the residual vector
template<unsigned SIZE>
void AbstractBackwardEulerCardiacCell< SIZE >::EvaluateYDerivatives ( double  time,
const std::vector< double > &  rY,
std::vector< double > &  rDY 
) [inline, private, virtual]

This function should never be called - the cell class incorporates its own solver.

Parameters:
time 
rY 
rDY 

Implements AbstractOdeSystem.

Definition at line 143 of file AbstractBackwardEulerCardiacCell.hpp.

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

Archive the member variables.

Parameters:
archive 
version 

Reimplemented from AbstractCardiacCell.

Definition at line 52 of file AbstractBackwardEulerCardiacCell.hpp.

template<unsigned SIZE>
void AbstractBackwardEulerCardiacCell< SIZE >::SolveAndUpdateState ( double  tStart,
double  tEnd 
) [inline, virtual]

Simulate this cell's behaviour between the time interval [tStart, tEnd], with timestemp mDt, updating the internal state variable values.

Parameters:
tStart beginning of the time interval to simulate
tEnd end of the time interval to simulate

Reimplemented from AbstractCardiacCell.

Definition at line 291 of file AbstractBackwardEulerCardiacCell.hpp.

References TimeStepper::AdvanceOneTimeStep(), AbstractBackwardEulerCardiacCell< SIZE >::ComputeOneStepExceptVoltage(), TimeStepper::GetTime(), TimeStepper::IsTimeAtEnd(), AbstractCardiacCell::mDt, AbstractBackwardEulerCardiacCell< SIZE >::UpdateTransmembranePotential(), and AbstractParameterisedSystem< std::vector< double > >::VerifyStateVariables().

template<unsigned SIZE>
virtual void AbstractBackwardEulerCardiacCell< SIZE >::UpdateTransmembranePotential ( double  time  )  [protected, pure virtual]

Perform a forward Euler step to update the transmembrane potential.

Note:
This method must be provided by subclasses.
Parameters:
time start of this timestep

Referenced by AbstractBackwardEulerCardiacCell< SIZE >::Compute(), and AbstractBackwardEulerCardiacCell< SIZE >::SolveAndUpdateState().


Friends And Related Function Documentation

template<unsigned SIZE>
friend class boost::serialization::access [friend]

Needed for serialization.

Reimplemented from AbstractCardiacCell.

Definition at line 44 of file AbstractBackwardEulerCardiacCell.hpp.


The documentation for this class was generated from the following file:
Generated on Thu Dec 22 13:00:25 2011 for Chaste by  doxygen 1.6.3