CvodeAdaptor Class Reference

#include <CvodeAdaptor.hpp>

Inheritance diagram for CvodeAdaptor:

Inheritance graph
[legend]
Collaboration diagram for CvodeAdaptor:

Collaboration graph
[legend]

List of all members.

Public Member Functions

 CvodeAdaptor (double relTol=1e-4, double absTol=1e-6)
void SetTolerances (double relTol=1e-4, double absTol=1e-6)
double GetRelativeTolerance ()
double GetAbsoluteTolerance ()
double GetLastStepSize ()
OdeSolution Solve (AbstractOdeSystem *pOdeSystem, std::vector< double > &rYValues, double startTime, double endTime, double maxStep, double timeSampling)
void Solve (AbstractOdeSystem *pOdeSystem, std::vector< double > &rYValues, double startTime, double endTime, double maxStep)
void CheckForStoppingEvents ()
void SetMaxSteps (long int numSteps)
long int GetMaxSteps ()

Protected Member Functions

void SetupCvode (AbstractOdeSystem *pOdeSystem, std::vector< double > &rInitialY, double startTime, double maxStep)
void FreeCvodeMemory ()
void CvodeError (int flag, const char *msg)

Private Member Functions

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

Private Attributes

void * mpCvodeMem
N_Vector mInitialValues
CvodeData mData
double mRelTol
double mAbsTol
double mLastInternalStepSize
long int mMaxSteps
bool mCheckForRoots

Friends

class boost::serialization::access


Detailed Description

The CVODE adaptor ODE solver class.

Assumes that it will be solving stiff systems, so uses BDF/Newton.

The timeStep parameters of the abstract class are here used to specify *maximum* steps, since the solver is adaptive.

Note that a call to Solve will initialise the CVODE solver, and free its working memory when done. There is thus a non-trivial overhead involved.

Todo:
Add an option to just initialise once, and assume subsequent Solve calls are continuing from where we left off.

Definition at line 82 of file CvodeAdaptor.hpp.


Constructor & Destructor Documentation

CvodeAdaptor::CvodeAdaptor ( double  relTol = 1e-4,
double  absTol = 1e-6 
)

Default constructor. Can optionally set relative and absolute tolerances.

Parameters:
relTol the relative tolerance for the solver
absTol the absolute tolerance for the solver

Definition at line 381 of file CvodeAdaptor.cpp.


Member Function Documentation

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

Archive, never used directly - boost uses this.

Parameters:
archive the archive
version the current version of this class

Reimplemented from AbstractIvpOdeSolver.

Definition at line 94 of file CvodeAdaptor.hpp.

References mAbsTol, mCheckForRoots, mLastInternalStepSize, mMaxSteps, and mRelTol.

void CvodeAdaptor::SetupCvode ( AbstractOdeSystem pOdeSystem,
std::vector< double > &  rInitialY,
double  startTime,
double  maxStep 
) [protected]

Set up the CVODE data structures needed to solve the given system.

Parameters:
pOdeSystem the ODE system being solved
rInitialY initial conditions vector
startTime when to simulate from
maxStep maximum time step

Definition at line 196 of file CvodeAdaptor.cpp.

References EXCEPTION, AbstractParameterisedSystem< VECTOR >::GetNumberOfStateVariables(), mAbsTol, mCheckForRoots, mData, mInitialValues, mMaxSteps, mpCvodeMem, mRelTol, CvodeData_::pSystem, and CvodeData_::pY.

Referenced by Solve().

void CvodeAdaptor::FreeCvodeMemory (  )  [protected]

Free CVODE memory after solving a system of ODEs.

Definition at line 236 of file CvodeAdaptor.cpp.

References mInitialValues, and mpCvodeMem.

Referenced by Solve().

void CvodeAdaptor::CvodeError ( int  flag,
const char *  msg 
) [protected]

Report an error from CVODE.

This will (probably) never be called, since we supply an error handler function which throws an exception.

Parameters:
flag error flag
msg error message

Definition at line 249 of file CvodeAdaptor.cpp.

References EXCEPTION.

Referenced by Solve().

void CvodeAdaptor::SetTolerances ( double  relTol = 1e-4,
double  absTol = 1e-6 
)

Set relative and absolute tolerances; both scalars. If no parameters are given, tolerances will be reset to default values.

Parameters:
relTol the relative tolerance for the solver
absTol the absolute tolerance for the solver

Definition at line 391 of file CvodeAdaptor.cpp.

References mAbsTol, and mRelTol.

double CvodeAdaptor::GetRelativeTolerance (  ) 

Get the relative tolerance.

Definition at line 397 of file CvodeAdaptor.cpp.

References mRelTol.

double CvodeAdaptor::GetAbsoluteTolerance (  ) 

Get the absolute tolerance.

Definition at line 402 of file CvodeAdaptor.cpp.

References mAbsTol.

double CvodeAdaptor::GetLastStepSize (  ) 

Get the last step size used internally by CVODE in the last Solve call

Definition at line 407 of file CvodeAdaptor.cpp.

References mLastInternalStepSize.

OdeSolution CvodeAdaptor::Solve ( AbstractOdeSystem pOdeSystem,
std::vector< double > &  rYValues,
double  startTime,
double  endTime,
double  maxStep,
double  timeSampling 
) [virtual]

Solve the given ODE system, returning the solution at sampling intervals.

Parameters:
pOdeSystem the ODE system to solve
rYValues the initial state variable values (note: this vector will also be used as working memory)
startTime the time to start solving at
endTime the time to solve to
maxStep the maximum time step to be taken by the adaptive solver
timeSampling the interval at which to sample the solution
Returns:
the solution

Implements AbstractIvpOdeSolver.

Definition at line 259 of file CvodeAdaptor.cpp.

References TimeStepper::AdvanceOneTimeStep(), AbstractOdeSystem::CalculateStoppingEvent(), CvodeError(), TimeStepper::EstimateTimeSteps(), EXCEPTION, FreeCvodeMemory(), TimeStepper::GetNextTime(), AbstractParameterisedSystem< VECTOR >::GetSystemInformation(), TimeStepper::GetTotalTimeStepsTaken(), TimeStepper::IsTimeAtEnd(), mCheckForRoots, mInitialValues, mLastInternalStepSize, mpCvodeMem, AbstractIvpOdeSolver::mStoppingEventOccurred, AbstractIvpOdeSolver::mStoppingTime, OdeSolution::rGetSolutions(), OdeSolution::rGetTimes(), OdeSolution::SetNumberOfTimeSteps(), OdeSolution::SetOdeSystemInformation(), and SetupCvode().

void CvodeAdaptor::Solve ( AbstractOdeSystem pOdeSystem,
std::vector< double > &  rYValues,
double  startTime,
double  endTime,
double  maxStep 
) [virtual]

Solve the given ODE system, storing the final result in rYValues.

Parameters:
pOdeSystem the ODE system to solve
rYValues the initial state variable values; will be filled in with the final values on return
startTime the time to start solving at
endTime the time to solve to
maxStep the maximum time step to be taken by the adaptive solver

Implements AbstractIvpOdeSolver.

Definition at line 328 of file CvodeAdaptor.cpp.

References AbstractOdeSystem::CalculateStoppingEvent(), CvodeError(), EXCEPTION, FreeCvodeMemory(), mCheckForRoots, mInitialValues, mLastInternalStepSize, mpCvodeMem, AbstractIvpOdeSolver::mStoppingEventOccurred, AbstractIvpOdeSolver::mStoppingTime, and SetupCvode().

void CvodeAdaptor::CheckForStoppingEvents (  ) 

Make the solver check for stopping events using CVODE's rootfinding functionality.

By default we do not check.

Definition at line 412 of file CvodeAdaptor.cpp.

References mCheckForRoots.

void CvodeAdaptor::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.

Parameters:
numSteps new maximum number of steps

Definition at line 417 of file CvodeAdaptor.cpp.

References mMaxSteps.

long int CvodeAdaptor::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 422 of file CvodeAdaptor.cpp.

References mMaxSteps.


Friends And Related Function Documentation

friend class boost::serialization::access [friend]

Needed for serialization.

Reimplemented from AbstractIvpOdeSolver.

Definition at line 86 of file CvodeAdaptor.hpp.


Member Data Documentation

void* CvodeAdaptor::mpCvodeMem [private]

Pointer to the CVODE memory block.

Definition at line 106 of file CvodeAdaptor.hpp.

Referenced by FreeCvodeMemory(), SetupCvode(), and Solve().

N_Vector CvodeAdaptor::mInitialValues [private]

Initial conditions for the ODE solver.

Definition at line 109 of file CvodeAdaptor.hpp.

Referenced by FreeCvodeMemory(), SetupCvode(), and Solve().

The CVODE data structure.

Definition at line 112 of file CvodeAdaptor.hpp.

Referenced by SetupCvode().

double CvodeAdaptor::mRelTol [private]

Relative tolerance for the ODE solver.

Definition at line 115 of file CvodeAdaptor.hpp.

Referenced by GetRelativeTolerance(), serialize(), SetTolerances(), and SetupCvode().

double CvodeAdaptor::mAbsTol [private]

Absolute tolerance for the ODE solver.

Definition at line 118 of file CvodeAdaptor.hpp.

Referenced by GetAbsoluteTolerance(), serialize(), SetTolerances(), and SetupCvode().

The size of the previous timestep.

Definition at line 121 of file CvodeAdaptor.hpp.

Referenced by GetLastStepSize(), serialize(), and Solve().

long int CvodeAdaptor::mMaxSteps [private]

The maximum number of steps to be taken by the solver in its attempt to reach the next output time.

Definition at line 127 of file CvodeAdaptor.hpp.

Referenced by GetMaxSteps(), serialize(), SetMaxSteps(), and SetupCvode().

Whether to check for stopping events.

Definition at line 130 of file CvodeAdaptor.hpp.

Referenced by CheckForStoppingEvents(), serialize(), SetupCvode(), and Solve().


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

Generated on Mon Nov 1 12:36:34 2010 for Chaste by  doxygen 1.5.5