ControlledStepperWrapper< FP, ControlledStepper > Class Template Reference

CPP API: mio::ControlledStepperWrapper< FP, ControlledStepper > Class Template Reference
mio::ControlledStepperWrapper< FP, ControlledStepper > Class Template Reference

This is an adaptive IntegratorCore. More...

#include <stepper_wrapper.h>

Inheritance diagram for mio::ControlledStepperWrapper< FP, ControlledStepper >:
Collaboration diagram for mio::ControlledStepperWrapper< FP, ControlledStepper >:

Public Member Functions

std::unique_ptr< OdeIntegratorCore< FP > > clone () const override
 
 ControlledStepperWrapper (const ControlledStepperWrapper &other)=delete
 
 ControlledStepperWrapper (ControlledStepperWrapper &&other)=delete
 
 ControlledStepperWrapper (FP abs_tol=1e-10, FP rel_tol=1e-5, FP dt_min=std::numeric_limits< FP >::min(), FP dt_max=std::numeric_limits< FP >::max())
 Set up the integrator. More...
 
ControlledStepperWrapperoperator= (const ControlledStepperWrapper &other)=delete
 
ControlledStepperWrapperoperator= (ControlledStepperWrapper &&other)=delete
 
void set_abs_tolerance (FP abs_tol)
 
void set_dt_max (FP dt_max)
 
void set_dt_min (FP dt_min)
 
void set_rel_tolerance (FP rel_tol)
 
bool step (const mio::DerivFunction< FP > &f, Eigen::Ref< const Eigen::VectorX< FP >> yt, FP &t, FP &dt, Eigen::Ref< Eigen::VectorX< FP >> ytp1) const override
 Make a single integration step on a system of ODEs and adapt the step size dt. More...
 
- Public Member Functions inherited from mio::IntegratorCore< FP, Integrands >
 IntegratorCore (const FP &dt_min, const FP &dt_max)
 Initialize an IntegratorCore. More...
 
virtual bool step (const Integrands &... fs, Eigen::Ref< const Eigen::VectorX< FP >> yt, FP &t, FP &dt, Eigen::Ref< Eigen::VectorX< FP >> ytp1) const =0
 Make a single integration step. More...
 
virtual ~IntegratorCore ()
 
FP & get_dt_min ()
 Access lower bound to the step size dt. More...
 
const FP & get_dt_min () const
 Access lower bound to the step size dt. More...
 
FP & get_dt_max ()
 Access upper bound to the step size dt. More...
 
const FP & get_dt_max () const
 Access upper bound to the step size dt. More...
 

Private Types

using Algebra = boost::numeric::odeint::vector_space_algebra
 
using ErrorChecker = boost::numeric::odeint::default_error_checker< FP, Algebra, Operations >
 
using Operations = typename boost::numeric::odeint::operations_dispatcher< Eigen::VectorX< FP > >::operations_type
 
using Resizer = boost::numeric::odeint::initially_resizer
 
using StepAdjuster = details::step_adjuster< FP, FP >
 
using Stepper = boost::numeric::odeint::controlled_runge_kutta< ControlledStepper< Eigen::VectorX< FP >, FP, Eigen::VectorX< FP >, FP, Algebra, Operations, Resizer >, ErrorChecker, boost::reference_wrapper< StepAdjuster > >
 

Private Member Functions

Stepper create_stepper ()
 (Re)initialize the internal stepper. More...
 

Private Attributes

FP m_abs_tol
 
FP m_rel_tol
 Absolute and relative tolerances for integration. More...
 
StepAdjuster m_step_adjuster
 Defines step sizing. Holds a copy of dt_max that has to be updated. More...
 
Stepper m_stepper
 A stepper instance used for integration. More...
 

Static Private Attributes

static constexpr bool is_fsal_stepper
 

Detailed Description

template<typename FP, template< class State, class Value, class Deriv, class Time, class Algebra, class Operations, class Resizer > class ControlledStepper>
class mio::ControlledStepperWrapper< FP, ControlledStepper >

This is an adaptive IntegratorCore.

It creates and manages an instance of a boost::numeric::odeint::controlled_runge_kutta integrator, wrapped as mio::IntegratorCore.

Member Typedef Documentation

◆ Algebra

template<typename FP , template< class State, class Value, class Deriv, class Time, class Algebra, class Operations, class Resizer > class ControlledStepper>
using mio::ControlledStepperWrapper< FP, ControlledStepper >::Algebra = boost::numeric::odeint::vector_space_algebra
private

◆ ErrorChecker

template<typename FP , template< class State, class Value, class Deriv, class Time, class Algebra, class Operations, class Resizer > class ControlledStepper>
using mio::ControlledStepperWrapper< FP, ControlledStepper >::ErrorChecker = boost::numeric::odeint::default_error_checker<FP, Algebra, Operations>
private

◆ Operations

template<typename FP , template< class State, class Value, class Deriv, class Time, class Algebra, class Operations, class Resizer > class ControlledStepper>
using mio::ControlledStepperWrapper< FP, ControlledStepper >::Operations = typename boost::numeric::odeint::operations_dispatcher<Eigen::VectorX<FP> >::operations_type
private

◆ Resizer

template<typename FP , template< class State, class Value, class Deriv, class Time, class Algebra, class Operations, class Resizer > class ControlledStepper>
using mio::ControlledStepperWrapper< FP, ControlledStepper >::Resizer = boost::numeric::odeint::initially_resizer
private

◆ StepAdjuster

template<typename FP , template< class State, class Value, class Deriv, class Time, class Algebra, class Operations, class Resizer > class ControlledStepper>
using mio::ControlledStepperWrapper< FP, ControlledStepper >::StepAdjuster = details::step_adjuster<FP, FP>
private

◆ Stepper

template<typename FP , template< class State, class Value, class Deriv, class Time, class Algebra, class Operations, class Resizer > class ControlledStepper>
using mio::ControlledStepperWrapper< FP, ControlledStepper >::Stepper = boost::numeric::odeint::controlled_runge_kutta< ControlledStepper<Eigen::VectorX<FP>, FP, Eigen::VectorX<FP>, FP, Algebra, Operations, Resizer>, ErrorChecker, boost::reference_wrapper<StepAdjuster> >
private

Constructor & Destructor Documentation

◆ ControlledStepperWrapper() [1/3]

template<typename FP , template< class State, class Value, class Deriv, class Time, class Algebra, class Operations, class Resizer > class ControlledStepper>
mio::ControlledStepperWrapper< FP, ControlledStepper >::ControlledStepperWrapper ( FP  abs_tol = 1e-10,
FP  rel_tol = 1e-5,
FP  dt_min = std::numeric_limits<FP>::min(),
FP  dt_max = std::numeric_limits<FP>::max() 
)
inline

Set up the integrator.

Parameters
[in]abs_tolAbsolute tolerance for convergence.
[in]rel_tolRelative tolerance for convergence.
[in]dt_minLower bound for time step dt.
[in]dt_maxUpper bound for time step dt.

◆ ControlledStepperWrapper() [2/3]

template<typename FP , template< class State, class Value, class Deriv, class Time, class Algebra, class Operations, class Resizer > class ControlledStepper>
mio::ControlledStepperWrapper< FP, ControlledStepper >::ControlledStepperWrapper ( ControlledStepperWrapper< FP, ControlledStepper > &&  other)
delete

◆ ControlledStepperWrapper() [3/3]

template<typename FP , template< class State, class Value, class Deriv, class Time, class Algebra, class Operations, class Resizer > class ControlledStepper>
mio::ControlledStepperWrapper< FP, ControlledStepper >::ControlledStepperWrapper ( const ControlledStepperWrapper< FP, ControlledStepper > &  other)
delete

Member Function Documentation

◆ clone()

template<typename FP , template< class State, class Value, class Deriv, class Time, class Algebra, class Operations, class Resizer > class ControlledStepper>
std::unique_ptr<OdeIntegratorCore<FP> > mio::ControlledStepperWrapper< FP, ControlledStepper >::clone ( ) const
inlineoverridevirtual

◆ create_stepper()

template<typename FP , template< class State, class Value, class Deriv, class Time, class Algebra, class Operations, class Resizer > class ControlledStepper>
Stepper mio::ControlledStepperWrapper< FP, ControlledStepper >::create_stepper ( )
inlineprivate

(Re)initialize the internal stepper.

◆ operator=() [1/2]

template<typename FP , template< class State, class Value, class Deriv, class Time, class Algebra, class Operations, class Resizer > class ControlledStepper>
ControlledStepperWrapper& mio::ControlledStepperWrapper< FP, ControlledStepper >::operator= ( const ControlledStepperWrapper< FP, ControlledStepper > &  other)
delete

◆ operator=() [2/2]

template<typename FP , template< class State, class Value, class Deriv, class Time, class Algebra, class Operations, class Resizer > class ControlledStepper>
ControlledStepperWrapper& mio::ControlledStepperWrapper< FP, ControlledStepper >::operator= ( ControlledStepperWrapper< FP, ControlledStepper > &&  other)
delete

◆ set_abs_tolerance()

template<typename FP , template< class State, class Value, class Deriv, class Time, class Algebra, class Operations, class Resizer > class ControlledStepper>
void mio::ControlledStepperWrapper< FP, ControlledStepper >::set_abs_tolerance ( FP  abs_tol)
inline
Parameters
tolthe required absolute tolerance for comparison of the iterative approximation

◆ set_dt_max()

template<typename FP , template< class State, class Value, class Deriv, class Time, class Algebra, class Operations, class Resizer > class ControlledStepper>
void mio::ControlledStepperWrapper< FP, ControlledStepper >::set_dt_max ( FP  dt_max)
inline
Parameters
dt_maxsets the maximum step size

◆ set_dt_min()

template<typename FP , template< class State, class Value, class Deriv, class Time, class Algebra, class Operations, class Resizer > class ControlledStepper>
void mio::ControlledStepperWrapper< FP, ControlledStepper >::set_dt_min ( FP  dt_min)
inline
Parameters
dt_minsets the minimum step size

◆ set_rel_tolerance()

template<typename FP , template< class State, class Value, class Deriv, class Time, class Algebra, class Operations, class Resizer > class ControlledStepper>
void mio::ControlledStepperWrapper< FP, ControlledStepper >::set_rel_tolerance ( FP  rel_tol)
inline
Parameters
tolthe required relative tolerance for comparison of the iterative approximation

◆ step()

template<typename FP , template< class State, class Value, class Deriv, class Time, class Algebra, class Operations, class Resizer > class ControlledStepper>
bool mio::ControlledStepperWrapper< FP, ControlledStepper >::step ( const mio::DerivFunction< FP > &  f,
Eigen::Ref< const Eigen::VectorX< FP >>  yt,
FP &  t,
FP &  dt,
Eigen::Ref< Eigen::VectorX< FP >>  ytp1 
) const
inlineoverride

Make a single integration step on a system of ODEs and adapt the step size dt.

Parameters
[in]ytValue of y at t, y(t).
[in,out]tCurrent time. Will be set to t' in [t+dt_min, t+dt].
[in,out]dtCurrent time step size h=dt. Overwritten by an estimated optimal step size for the next step.
[out]ytp1The approximated value of y(t').

Member Data Documentation

◆ is_fsal_stepper

template<typename FP , template< class State, class Value, class Deriv, class Time, class Algebra, class Operations, class Resizer > class ControlledStepper>
constexpr bool mio::ControlledStepperWrapper< FP, ControlledStepper >::is_fsal_stepper
staticconstexprprivate
Initial value:
= std::is_same_v<typename Stepper::stepper_type::stepper_category,
boost::numeric::odeint::explicit_error_stepper_fsal_tag>

◆ m_abs_tol

template<typename FP , template< class State, class Value, class Deriv, class Time, class Algebra, class Operations, class Resizer > class ControlledStepper>
FP mio::ControlledStepperWrapper< FP, ControlledStepper >::m_abs_tol
private

◆ m_rel_tol

template<typename FP , template< class State, class Value, class Deriv, class Time, class Algebra, class Operations, class Resizer > class ControlledStepper>
FP mio::ControlledStepperWrapper< FP, ControlledStepper >::m_rel_tol
private

Absolute and relative tolerances for integration.

◆ m_step_adjuster

template<typename FP , template< class State, class Value, class Deriv, class Time, class Algebra, class Operations, class Resizer > class ControlledStepper>
StepAdjuster mio::ControlledStepperWrapper< FP, ControlledStepper >::m_step_adjuster
mutableprivate

Defines step sizing. Holds a copy of dt_max that has to be updated.

◆ m_stepper

template<typename FP , template< class State, class Value, class Deriv, class Time, class Algebra, class Operations, class Resizer > class ControlledStepper>
Stepper mio::ControlledStepperWrapper< FP, ControlledStepper >::m_stepper
mutableprivate

A stepper instance used for integration.