CvodeAdaptor Class Reference

#include <CvodeAdaptor.hpp>

Inherits AbstractIvpOdeSolver.

Collaboration diagram for CvodeAdaptor:
Collaboration graph
[legend]

List of all members.

Public Member Functions

 CvodeAdaptor (double relTol=1e-4, double absTol=1e-6)
 ~CvodeAdaptor ()
void SetTolerances (double relTol=1e-4, double absTol=1e-6)
double GetRelativeTolerance ()
double GetAbsoluteTolerance ()
double GetLastStepSize ()
void SetForceReset (bool autoReset)
void SetMinimalReset (bool minimalReset)
void ResetSolver ()
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)
void RecordStoppingPoint (double stopTime, N_Vector yEnd)

Private Attributes

void * mpCvodeMem
CvodeData mData
double mRelTol
double mAbsTol
double mLastInternalStepSize
long int mMaxSteps
bool mCheckForRoots
N_Vector mLastSolutionState
double mLastSolutionTime
bool mForceReset
bool mForceMinimalReset

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.

Repeated calls to Solve will no longer set up and delete CVODE memory, unless the following method is called:

SetForceReset(true) - reset each time Solve() is called

default behaviour - reset if state variables change, or we ask to solve from a different time than the last solve call finished.

SetMinimalReset(true) - ignore changes in state vars and just reset if the time is inconsistent.

Definition at line 92 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 445 of file CvodeAdaptor.cpp.

CvodeAdaptor::~CvodeAdaptor (  ) 

Destructor. Frees memory.

Definition at line 464 of file CvodeAdaptor.cpp.

References DeleteVector(), FreeCvodeMemory(), and mLastSolutionState.


Member Function Documentation

void CvodeAdaptor::CheckForStoppingEvents (  ) 

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

By default we do not check.

Definition at line 505 of file CvodeAdaptor.cpp.

References mCheckForRoots.

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 317 of file CvodeAdaptor.cpp.

References EXCEPTION.

Referenced by Solve().

void CvodeAdaptor::FreeCvodeMemory (  )  [protected]

Free CVODE memory after solving a system of ODEs.

Definition at line 282 of file CvodeAdaptor.cpp.

References mpCvodeMem.

Referenced by Solve(), and ~CvodeAdaptor().

double CvodeAdaptor::GetAbsoluteTolerance (  ) 
Returns:
the absolute tolerance.

Definition at line 495 of file CvodeAdaptor.cpp.

References mAbsTol.

double CvodeAdaptor::GetLastStepSize (  ) 
Returns:
the last step size used internally by CVODE in the last Solve call

Definition at line 500 of file CvodeAdaptor.cpp.

References mLastInternalStepSize.

long int CvodeAdaptor::GetMaxSteps (  ) 
Returns:
the maximum number of steps to be taken by the solver in its attempt to reach the next output time.

Definition at line 515 of file CvodeAdaptor.cpp.

References mMaxSteps.

double CvodeAdaptor::GetRelativeTolerance (  ) 
Returns:
the relative tolerance.

Definition at line 490 of file CvodeAdaptor.cpp.

References mRelTol.

void CvodeAdaptor::RecordStoppingPoint ( double  stopTime,
N_Vector  yEnd 
) [private]

Record where the last solve got to so we know whether to re-initialise.

Parameters:
stopTime the finishing time
yEnd the state variables at this time

Definition at line 470 of file CvodeAdaptor.cpp.

References CreateVectorIfEmpty(), GetVectorComponent(), GetVectorSize(), mForceReset, mLastSolutionState, mLastSolutionTime, and SetVectorComponent().

Referenced by Solve().

void CvodeAdaptor::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 311 of file CvodeAdaptor.cpp.

References DeleteVector(), and mLastSolutionState.

Referenced by SetForceReset().

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 104 of file CvodeAdaptor.hpp.

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

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

Parameters:
autoReset whether to reset on every Solve

Definition at line 292 of file CvodeAdaptor.cpp.

References mForceReset, ResetSolver(), and SetMinimalReset().

Referenced by SetMinimalReset().

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 510 of file CvodeAdaptor.cpp.

References mMaxSteps.

void CvodeAdaptor::SetMinimalReset ( bool  minimalReset  ) 

Set whether to reduce the checking done when guessing when re-initialisation is needed, so it ignores changes in the state variables. If call with true argument, will call SetForceReset(false).

Parameters:
minimalReset whether to avoid checking for changes in state variables

Definition at line 302 of file CvodeAdaptor.cpp.

References mForceMinimalReset, and SetForceReset().

Referenced by SetForceReset().

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 484 of file CvodeAdaptor.cpp.

References mAbsTol, 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

Initial conditions for the ODE solver.

Definition at line 181 of file CvodeAdaptor.cpp.

References DeleteVector(), EXCEPTION, AbstractUntemplatedParameterisedSystem::GetNumberOfStateVariables(), GetVectorComponent(), GetVectorSize(), mAbsTol, mCheckForRoots, mData, mForceMinimalReset, mForceReset, mLastSolutionState, mLastSolutionTime, mMaxSteps, mpCvodeMem, mRelTol, CvodeData_::pSystem, CvodeData_::pY, and CompareDoubles::WithinAnyTolerance().

Referenced by Solve().

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 396 of file CvodeAdaptor.cpp.

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

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 328 of file CvodeAdaptor.cpp.

References TimeStepper::AdvanceOneTimeStep(), AbstractOdeSystem::CalculateStoppingEvent(), CvodeError(), DeleteVector(), TimeStepper::EstimateTimeSteps(), EXCEPTION, FreeCvodeMemory(), TimeStepper::GetNextTime(), AbstractUntemplatedParameterisedSystem::GetSystemInformation(), TimeStepper::GetTotalTimeStepsTaken(), TimeStepper::IsTimeAtEnd(), mCheckForRoots, mLastInternalStepSize, mLastSolutionTime, mpCvodeMem, AbstractIvpOdeSolver::mStoppingEventOccurred, AbstractIvpOdeSolver::mStoppingTime, RecordStoppingPoint(), OdeSolution::rGetSolutions(), OdeSolution::rGetTimes(), OdeSolution::SetNumberOfTimeSteps(), OdeSolution::SetOdeSystemInformation(), SetupCvode(), and UNUSED_OPT.


Friends And Related Function Documentation

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

Needed for serialization.

Reimplemented from AbstractIvpOdeSolver.

Definition at line 96 of file CvodeAdaptor.hpp.


Member Data Documentation

Absolute tolerance for the ODE solver.

Definition at line 125 of file CvodeAdaptor.hpp.

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

Whether to check for stopping events.

Definition at line 137 of file CvodeAdaptor.hpp.

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

The CVODE data structure.

Definition at line 119 of file CvodeAdaptor.hpp.

Referenced by SetupCvode().

Whether to ignore changes in the state variables when deciding whether to reset.

Definition at line 149 of file CvodeAdaptor.hpp.

Referenced by SetMinimalReset(), and SetupCvode().

Whether to automatically reset CVODE on each Solve call.

Definition at line 146 of file CvodeAdaptor.hpp.

Referenced by RecordStoppingPoint(), SetForceReset(), and SetupCvode().

The size of the previous timestep.

Definition at line 128 of file CvodeAdaptor.hpp.

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

Remember where the last solve got to so we know whether to re-initialise.

Definition at line 140 of file CvodeAdaptor.hpp.

Referenced by RecordStoppingPoint(), ResetSolver(), SetupCvode(), and ~CvodeAdaptor().

Remember where the last solve got to so we know whether to re-initialise.

Definition at line 143 of file CvodeAdaptor.hpp.

Referenced by RecordStoppingPoint(), SetupCvode(), 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 134 of file CvodeAdaptor.hpp.

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

void* CvodeAdaptor::mpCvodeMem [private]

Pointer to the CVODE memory block.

Definition at line 116 of file CvodeAdaptor.hpp.

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

Relative tolerance for the ODE solver.

Definition at line 122 of file CvodeAdaptor.hpp.

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


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

Generated by  doxygen 1.6.2