AbstractOneStepIvpOdeSolver Class Reference

#include <AbstractOneStepIvpOdeSolver.hpp>

Inheritance diagram for AbstractOneStepIvpOdeSolver:

Inheritance graph
[legend]
Collaboration diagram for AbstractOneStepIvpOdeSolver:

Collaboration graph
[legend]

List of all members.

Public Member Functions

virtual OdeSolution Solve (AbstractOdeSystem *pAbstractOdeSystem, std::vector< double > &rYValues, double startTime, double endTime, double timeStep, double timeSampling)
virtual void Solve (AbstractOdeSystem *pAbstractOdeSystem, std::vector< double > &rYValues, double startTime, double endTime, double timeStep)
virtual ~AbstractOneStepIvpOdeSolver ()

Protected Member Functions

virtual void InternalSolve (AbstractOdeSystem *pAbstractOdeSystem, std::vector< double > &rCurrentYValues, std::vector< double > &rWorkingMemory, double startTime, double endTime, double timeStep)
virtual void CalculateNextYValue (AbstractOdeSystem *pAbstractOdeSystem, double timeStep, double time, std::vector< double > &rCurrentYValues, std::vector< double > &rNextYValues)=0

Private Member Functions

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

Private Attributes

std::vector< double > mWorkingMemory

Friends

class boost::serialization::access


Detailed Description

Abstract one-step initial value problem ODE solver class. Sets up variables and functions for all the ODE solvers that only have one timestep.

Definition at line 45 of file AbstractOneStepIvpOdeSolver.hpp.


Constructor & Destructor Documentation

virtual AbstractOneStepIvpOdeSolver::~AbstractOneStepIvpOdeSolver (  )  [inline, virtual]

Virtual destructor since we have virtual methods.

Definition at line 172 of file AbstractOneStepIvpOdeSolver.hpp.


Member Function Documentation

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

Archive the abstract IVP Solver, never used directly - boost uses this.

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

Reimplemented from AbstractIvpOdeSolver.

Reimplemented in BackwardEulerIvpOdeSolver, EulerIvpOdeSolver, MockEulerIvpOdeSolver, RungeKutta2IvpOdeSolver, and RungeKutta4IvpOdeSolver.

Definition at line 59 of file AbstractOneStepIvpOdeSolver.hpp.

void AbstractOneStepIvpOdeSolver::InternalSolve ( AbstractOdeSystem pAbstractOdeSystem,
std::vector< double > &  rCurrentYValues,
std::vector< double > &  rWorkingMemory,
double  startTime,
double  endTime,
double  timeStep 
) [protected, virtual]

Method that actually performs the solving on behalf of the public Solve methods.

Parameters:
pAbstractOdeSystem the ODE system to solve
rCurrentYValues the current (initial) state; results will also be returned in here
rWorkingMemory working memory; same size as rCurrentYValues
startTime initial time
endTime time to solve to
timeStep dt

Reimplemented in MockEulerIvpOdeSolver.

Definition at line 107 of file AbstractOneStepIvpOdeSolver.cpp.

References TimeStepper::AdvanceOneTimeStep(), CalculateNextYValue(), AbstractOdeSystem::CalculateStoppingEvent(), TimeStepper::GetNextTimeStep(), TimeStepper::GetTime(), TimeStepper::IsTimeAtEnd(), AbstractIvpOdeSolver::mStoppingEventOccurred, and AbstractIvpOdeSolver::mStoppingTime.

Referenced by MockEulerIvpOdeSolver::InternalSolve(), and Solve().

virtual void AbstractOneStepIvpOdeSolver::CalculateNextYValue ( AbstractOdeSystem pAbstractOdeSystem,
double  timeStep,
double  time,
std::vector< double > &  rCurrentYValues,
std::vector< double > &  rNextYValues 
) [protected, pure virtual]

Calculate the solution to the ODE system at the next timestep. Concrete subclasses should provide this method.

Parameters:
pAbstractOdeSystem the ODE system to solve
timeStep dt
time the current time
rCurrentYValues the current (initial) state
rNextYValues the state at the next timestep

Implemented in BackwardEulerIvpOdeSolver, EulerIvpOdeSolver, RungeKutta2IvpOdeSolver, and RungeKutta4IvpOdeSolver.

Referenced by InternalSolve().

OdeSolution AbstractOneStepIvpOdeSolver::Solve ( AbstractOdeSystem pAbstractOdeSystem,
std::vector< double > &  rYValues,
double  startTime,
double  endTime,
double  timeStep,
double  timeSampling 
) [virtual]

Solves a system of ODEs using a specified one-step ODE solver and returns the solution as an OdeSolution object.

An example, which returns the solution every 0.1 seconds using dt=0.01:

MyOdeSystem ode; std::vector<double> init_cond = ode_system.GetInitialConditions(); OdeSolution solution = solver.Solve(&ode, init_cond, 0, 1, 0.01, 0.1);

Parameters:
pAbstractOdeSystem pointer to the concrete ODE system to be solved
rYValues a standard vector specifying the intial condition of each solution variable in the system (this can be the initial conditions vector stored in the ODE system)
startTime the time at which the initial conditions are specified
endTime the time to which the system should be solved and the solution returned
timeStep the time interval to be used by the solver
timeSampling the interval at which to sample the solution to the ODE system
Returns:
OdeSolution is an object containing an integer of the number of equations, a stdAbstractOdeSystem::vector of times and a std::vector of std::vectors where each of those vectors contains the solution for one variable of the ODE system at those times.

Implements AbstractIvpOdeSolver.

Definition at line 35 of file AbstractOneStepIvpOdeSolver.cpp.

References TimeStepper::AdvanceOneTimeStep(), AbstractOdeSystem::CalculateStoppingEvent(), TimeStepper::EstimateTimeSteps(), TimeStepper::GetNextTime(), AbstractOdeSystem::GetNumberOfStateVariables(), TimeStepper::GetTime(), TimeStepper::GetTimeStepsElapsed(), InternalSolve(), TimeStepper::IsTimeAtEnd(), AbstractIvpOdeSolver::mStoppingEventOccurred, AbstractIvpOdeSolver::mStoppingTime, mWorkingMemory, OdeSolution::rGetSolutions(), OdeSolution::rGetTimes(), and OdeSolution::SetNumberOfTimeSteps().

void AbstractOneStepIvpOdeSolver::Solve ( AbstractOdeSystem pAbstractOdeSystem,
std::vector< double > &  rYValues,
double  startTime,
double  endTime,
double  timeStep 
) [virtual]

Second version of Solve. Solves a system of ODEs using a specified one-step ODE solver. This method does not return the solution and therefore does not take in a sampling time. Instead, the mStateVariables component in the ODE system object is updated.

An example:

std::vector<double> init_cond = ode_system.GetInitialConditions(); solver.Solve(&ode, init_cond, 0, 1, 0.01); state_variables = ode_system.rGetStateVariables(); // solution at t=1 found here

Parameters:
pAbstractOdeSystem pointer to the concrete ODE system to be solved
rYValues a standard vector specifying the intial condition of each solution variable in the system (this can be the initial conditions vector stored in the ODE system)
startTime the time at which the initial conditions are specified
endTime the time to which the system should be solved and the solution returned
timeStep the time interval to be used by the solver

Implements AbstractIvpOdeSolver.

Definition at line 85 of file AbstractOneStepIvpOdeSolver.cpp.

References AbstractOdeSystem::CalculateStoppingEvent(), AbstractOdeSystem::GetNumberOfStateVariables(), InternalSolve(), AbstractIvpOdeSolver::mStoppingEventOccurred, and mWorkingMemory.


Friends And Related Function Documentation

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

Needed for serialization.

Reimplemented from AbstractIvpOdeSolver.

Reimplemented in BackwardEulerIvpOdeSolver, EulerIvpOdeSolver, MockEulerIvpOdeSolver, RungeKutta2IvpOdeSolver, and RungeKutta4IvpOdeSolver.

Definition at line 51 of file AbstractOneStepIvpOdeSolver.hpp.


Member Data Documentation

std::vector<double> AbstractOneStepIvpOdeSolver::mWorkingMemory [private]

Working memory

Definition at line 68 of file AbstractOneStepIvpOdeSolver.hpp.

Referenced by Solve().


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

Generated on Tue Aug 4 16:10:44 2009 for Chaste by  doxygen 1.5.5