#include <AbstractOneStepIvpOdeSolver.hpp>


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 |
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.
| 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::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 112 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.
| 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().
| 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 38 of file AbstractOneStepIvpOdeSolver.cpp.
References TimeStepper::AdvanceOneTimeStep(), AbstractOdeSystem::CalculateStoppingEvent(), TimeStepper::EstimateTimeSteps(), EXCEPTION, Identifiable::GetIdentifier(), TimeStepper::GetNextTime(), AbstractParameterisedSystem< VECTOR >::GetNumberOfStateVariables(), AbstractParameterisedSystem< VECTOR >::GetSystemInformation(), TimeStepper::GetTime(), TimeStepper::GetTotalTimeStepsTaken(), InternalSolve(), TimeStepper::IsTimeAtEnd(), AbstractIvpOdeSolver::mStoppingEventOccurred, AbstractIvpOdeSolver::mStoppingTime, mWorkingMemory, OdeSolution::rGetSolutions(), OdeSolution::rGetTimes(), OdeSolution::SetNumberOfTimeSteps(), OdeSolution::SetOdeSystemInformation(), and OdeSolution::SetSolverName().
| 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 90 of file AbstractOneStepIvpOdeSolver.cpp.
References AbstractOdeSystem::CalculateStoppingEvent(), EXCEPTION, AbstractParameterisedSystem< VECTOR >::GetNumberOfStateVariables(), InternalSolve(), AbstractIvpOdeSolver::mStoppingEventOccurred, and mWorkingMemory.
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().
1.5.5