void do_step_impl( System system , const StateIn &in , const DerivIn &dxdt , const time_type &t , StateOut &out , const time_type &dt , Err &xerr ) { // normal step do_step_impl( system , in , dxdt , t , out , dt ); // additionally, perform the error calculation detail::template generic_rk_call_algebra< StageCount , algebra_type >()( stepper_base_type::m_algebra , xerr , dxdt , m_F , detail::generic_rk_scale_sum_err< StageCount , operations_type , value_type , time_type >( m_b2 , dt) ); }
void do_step_impl_io( System system, StateInOut &inout, const DerivIn &dxdt, time_type t, time_type dt ) { // special care for inout m_xout_resizer.adjust_size( inout, detail::bind( &stepper_type::template resize_m_xout< StateInOut >, detail::ref( *this ), detail::_1 ) ); do_step_impl( system, inout, dxdt, t, m_xout.m_v, dt ); boost::numeric::odeint::copy( m_xout.m_v, inout ); }
void do_step_impl( System system, const StateIn &in, const DerivIn &dxdt, time_type t, StateOut &out, time_type dt, Err &xerr ) { // std::cout << "dt: " << dt << std::endl; // normal step do_step_impl( system, in, dxdt, t, out, dt ); static const value_type val1( 1.0 ); // additionally, perform the error calculation stepper_base_type::m_algebra.for_each3( xerr, out, m_table[0].m_v, typename operations_type::template scale_sum2< value_type, value_type >( val1, -val1 ) ); }
void do_step_impl( System system , const StateIn &in , const DerivIn &dxdt_in , time_type t , StateOut &out , DerivOut &dxdt_out , time_type dt , Err &xerr ) { const value_type c1 = static_cast<value_type> ( 35 ) / static_cast<value_type>( 384 ); const value_type c3 = static_cast<value_type> ( 500 ) / static_cast<value_type>( 1113 ); const value_type c4 = static_cast<value_type> ( 125 ) / static_cast<value_type>( 192 ); const value_type c5 = static_cast<value_type> ( -2187 ) / static_cast<value_type>( 6784 ); const value_type c6 = static_cast<value_type> ( 11 ) / static_cast<value_type>( 84 ); const value_type dc1 = c1 - static_cast<value_type> ( 5179 ) / static_cast<value_type>( 57600 ); const value_type dc3 = c3 - static_cast<value_type> ( 7571 ) / static_cast<value_type>( 16695 ); const value_type dc4 = c4 - static_cast<value_type> ( 393 ) / static_cast<value_type>( 640 ); const value_type dc5 = c5 - static_cast<value_type> ( -92097 ) / static_cast<value_type>( 339200 ); const value_type dc6 = c6 - static_cast<value_type> ( 187 ) / static_cast<value_type>( 2100 ); const value_type dc7 = static_cast<value_type>( -1 ) / static_cast<value_type> ( 40 ); /* ToDo: copy only if &dxdt_in == &dxdt_out ? */ if( same_instance( dxdt_in , dxdt_out ) ) { m_dxdt_tmp_resizer.adjust_size( in , detail::bind( &stepper_type::template resize_dxdt_tmp_impl<StateIn> , detail::ref( *this ) , detail::_1 ) ); boost::numeric::odeint::copy( dxdt_in , m_dxdt_tmp.m_v ); do_step_impl( system , in , dxdt_in , t , out , dxdt_out , dt ); //error estimate stepper_base_type::m_algebra.for_each7( xerr , m_dxdt_tmp.m_v , m_k3.m_v , m_k4.m_v , m_k5.m_v , m_k6.m_v , dxdt_out , typename operations_type::template scale_sum6< time_type , time_type , time_type , time_type , time_type , time_type >( dt*dc1 , dt*dc3 , dt*dc4 , dt*dc5 , dt*dc6 , dt*dc7 ) ); } else { do_step_impl( system , in , dxdt_in , t , out , dxdt_out , dt ); //error estimate stepper_base_type::m_algebra.for_each7( xerr , dxdt_in , m_k3.m_v , m_k4.m_v , m_k5.m_v , m_k6.m_v , dxdt_out , typename operations_type::template scale_sum6< time_type , time_type , time_type , time_type , time_type , time_type >( dt*dc1 , dt*dc3 , dt*dc4 , dt*dc5 , dt*dc6 , dt*dc7 ) ); } }
void do_step_impl( System system , const StateIn &in , const DerivIn &dxdt , const time_type &t , StateOut &out , const time_type &dt , Err &xerr ) { const value_type c1 = static_cast<value_type> ( 37.0 ) / static_cast<value_type>( 378.0 ); const value_type c3 = static_cast<value_type> ( 250.0 ) / static_cast<value_type>( 621.0 ); const value_type c4 = static_cast<value_type> ( 125.0 ) / static_cast<value_type>( 594.0 ); const value_type c6 = static_cast<value_type> ( 512.0 ) / static_cast<value_type>( 1771.0 ); const value_type dc1 = c1 - static_cast<value_type> ( 2825.0 ) / static_cast<value_type>( 27648 ); const value_type dc3 = c3 - static_cast<value_type> ( 18575.0 ) / static_cast<value_type>( 48384.0 ); const value_type dc4 = c4 - static_cast<value_type> ( 13525.0 ) / static_cast<value_type>( 55296.0 ); const value_type dc5 = static_cast<value_type> ( -277.0 ) / static_cast<value_type>( 14336.0 ); const value_type dc6 = c6 - static_cast<value_type> ( 0.25 ); do_step_impl( system , in , dxdt , t , out , dt ); //error estimate stepper_base_type::m_algebra.for_each6( xerr , dxdt , m_k3.m_v , m_k4.m_v , m_k5.m_v , m_k6.m_v , typename operations_type::template scale_sum5< time_type , time_type , time_type , time_type , time_type >( dt*dc1 , dt*dc3 , dt*dc4 , dt*dc5 , dt*dc6 )); }
void do_step_impl( System system , const StateIn &in , const DerivIn &dxdt_in , const time_type &t , StateOut &out , DerivOut &dxdt_out , const time_type &dt , Err &xerr ) { const value_type c1 = static_cast<value_type> ( 35.0 ) / static_cast<value_type>( 384.0 ); const value_type c3 = static_cast<value_type> ( 500.0 ) / static_cast<value_type>( 1113.0 ); const value_type c4 = static_cast<value_type> ( 125.0 ) / static_cast<value_type>( 192.0 ); const value_type c5 = static_cast<value_type> ( -2187.0 ) / static_cast<value_type>( 6784.0 ); const value_type c6 = static_cast<value_type> ( 11.0 ) / static_cast<value_type>( 84.0 ); const value_type dc1 = c1 - static_cast<value_type> ( 5179.0 ) / static_cast<value_type>( 57600.0 ); const value_type dc3 = c3 - static_cast<value_type> ( 7571.0 ) / static_cast<value_type>( 16695.0 ); const value_type dc4 = c4 - static_cast<value_type> ( 393.0 ) / static_cast<value_type>( 640.0 ); const value_type dc5 = c5 - static_cast<value_type> ( -92097.0 ) / static_cast<value_type>( 339200.0 ); const value_type dc6 = c6 - static_cast<value_type> ( 187.0 ) / static_cast<value_type>( 2100.0 ); const value_type dc7 = static_cast<value_type>( -0.025 ); do_step_impl( system , in , dxdt_in , t , out , dxdt_out , dt ); //error estimate stepper_base_type::m_algebra.for_each7( xerr , dxdt_in , m_k3.m_v , m_k4.m_v , m_k5.m_v , m_k6.m_v , dxdt_out , typename operations_type::template scale_sum6< time_type , time_type , time_type , time_type , time_type , time_type >( dt*dc1 , dt*dc3 , dt*dc4 , dt*dc5 , dt*dc6 , dt*dc7 ) ); }
void do_step( System system , const StateIn &in , const PredIn &pred , time_type t , const StateOut &out , time_type dt , const ABBuf &buf ) { do_step_impl( system , in , pred , t , out , dt , buf ); }
void do_step( System system , const StateIn &in , time_type t , const StateOut &out , time_type dt ) { do_step_impl( system , in , t , out , dt ); }
void do_step_dxdt_impl( System system, const StateIn &in, const DerivIn &dxdt, time_type t, StateOut &out, time_type dt ) { do_step_impl( system , in , dxdt , t , out , dt ); }
void do_step( System system , const StateIn &in , const time_type &t , StateOut &out , const time_type &dt ) { typedef typename detail::unwrap_reference< System >::type system_type; do_step_impl( system , in , t , out , dt , typename is_pair< system_type >::type() ); }
void do_step( System system , StateInOut &state , const time_type &t , const time_type &dt ) { typedef typename detail::unwrap_reference< System >::type system_type; do_step_impl( system , state , t , state , dt , typename is_pair< system_type >::type() ); }
void do_step( System system , StateInOut &state , time_type t , time_type dt ) { typedef typename odeint::unwrap_reference< System >::type system_type; do_step_impl( system , state , t , state , dt , typename is_pair< system_type >::type() ); }