#include <AbstractOneStepIvpOdeSolver.hpp>
Inherits AbstractIvpOdeSolver.
Inherited by BackwardEulerIvpOdeSolver, EulerIvpOdeSolver, HeunIvpOdeSolver, RungeKutta2IvpOdeSolver, and RungeKutta4IvpOdeSolver.
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 |
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 42 of file AbstractOneStepIvpOdeSolver.hpp.
virtual AbstractOneStepIvpOdeSolver::~AbstractOneStepIvpOdeSolver | ( | ) | [inline, virtual] |
Virtual destructor since we have virtual methods.
Definition at line 169 of file AbstractOneStepIvpOdeSolver.hpp.
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.
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, HeunIvpOdeSolver, RungeKutta2IvpOdeSolver, and RungeKutta4IvpOdeSolver.
Referenced by InternalSolve().
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.
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 108 of file AbstractOneStepIvpOdeSolver.cpp.
References TimeStepper::AdvanceOneTimeStep(), CalculateNextYValue(), AbstractOdeSystem::CalculateStoppingEvent(), TimeStepper::GetNextTimeStep(), TimeStepper::GetTime(), TimeStepper::IsTimeAtEnd(), AbstractIvpOdeSolver::mStoppingEventOccurred, and AbstractIvpOdeSolver::mStoppingTime.
Referenced by Solve().
void AbstractOneStepIvpOdeSolver::serialize | ( | Archive & | archive, | |
const unsigned int | version | |||
) | [inline, private] |
Archive the abstract IVP Solver, never used directly - boost uses this.
archive | the archive | |
version | the current version of this class |
Reimplemented from AbstractIvpOdeSolver.
Reimplemented in BackwardEulerIvpOdeSolver, EulerIvpOdeSolver, HeunIvpOdeSolver, MockEulerIvpOdeSolver, RungeKutta2IvpOdeSolver, and RungeKutta4IvpOdeSolver.
Definition at line 56 of file AbstractOneStepIvpOdeSolver.hpp.
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
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 86 of file AbstractOneStepIvpOdeSolver.cpp.
References AbstractOdeSystem::CalculateStoppingEvent(), EXCEPTION, AbstractUntemplatedParameterisedSystem::GetNumberOfStateVariables(), InternalSolve(), AbstractIvpOdeSolver::mStoppingEventOccurred, and mWorkingMemory.
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);
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 |
Implements AbstractIvpOdeSolver.
Definition at line 34 of file AbstractOneStepIvpOdeSolver.cpp.
References TimeStepper::AdvanceOneTimeStep(), AbstractOdeSystem::CalculateStoppingEvent(), TimeStepper::EstimateTimeSteps(), EXCEPTION, Identifiable::GetIdentifier(), TimeStepper::GetNextTime(), AbstractUntemplatedParameterisedSystem::GetNumberOfStateVariables(), AbstractUntemplatedParameterisedSystem::GetSystemInformation(), TimeStepper::GetTime(), TimeStepper::GetTotalTimeStepsTaken(), InternalSolve(), TimeStepper::IsTimeAtEnd(), AbstractIvpOdeSolver::mStoppingEventOccurred, AbstractIvpOdeSolver::mStoppingTime, mWorkingMemory, OdeSolution::rGetSolutions(), OdeSolution::rGetTimes(), OdeSolution::SetNumberOfTimeSteps(), OdeSolution::SetOdeSystemInformation(), and OdeSolution::SetSolverName().
friend class boost::serialization::access [friend] |
Needed for serialization.
Reimplemented from AbstractIvpOdeSolver.
Reimplemented in BackwardEulerIvpOdeSolver, EulerIvpOdeSolver, HeunIvpOdeSolver, MockEulerIvpOdeSolver, RungeKutta2IvpOdeSolver, and RungeKutta4IvpOdeSolver.
Definition at line 48 of file AbstractOneStepIvpOdeSolver.hpp.
std::vector<double> AbstractOneStepIvpOdeSolver::mWorkingMemory [private] |
Working memory
Definition at line 65 of file AbstractOneStepIvpOdeSolver.hpp.
Referenced by Solve().