diff options
Diffstat (limited to 'boost/numeric/odeint/stepper/detail/adams_moulton_call_algebra.hpp')
-rw-r--r-- | boost/numeric/odeint/stepper/detail/adams_moulton_call_algebra.hpp | 148 |
1 files changed, 148 insertions, 0 deletions
diff --git a/boost/numeric/odeint/stepper/detail/adams_moulton_call_algebra.hpp b/boost/numeric/odeint/stepper/detail/adams_moulton_call_algebra.hpp new file mode 100644 index 0000000000..f8a1505510 --- /dev/null +++ b/boost/numeric/odeint/stepper/detail/adams_moulton_call_algebra.hpp @@ -0,0 +1,148 @@ +/* + [auto_generated] + boost/numeric/odeint/stepper/detail/adams_moulton_call_algebra.hpp + + [begin_description] + Algebra caller for the Adams Moulton method. + [end_description] + + Copyright 2011-2012 Karsten Ahnert + Copyright 2011 Mario Mulansky + + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or + copy at http://www.boost.org/LICENSE_1_0.txt) + */ + + +#ifndef BOOST_NUMERIC_ODEINT_STEPPER_DETAIL_ADAMS_MOULTON_CALL_ALGEBRA_HPP_INCLUDED +#define BOOST_NUMERIC_ODEINT_STEPPER_DETAIL_ADAMS_MOULTON_CALL_ALGEBRA_HPP_INCLUDED + +#include <boost/assert.hpp> + +namespace boost { +namespace numeric { +namespace odeint { +namespace detail { + +template< size_t Step , class Algebra , class Operations > +struct adams_moulton_call_algebra; + +template< class Algebra , class Operations > +struct adams_moulton_call_algebra< 1 , Algebra , Operations > +{ + template< class StateIn , class StateOut , class DerivIn , class StepStorage , class Coefficients , class Time > + void operator()( Algebra &algebra , const StateIn &in , StateOut &out , const DerivIn &dxdt , const StepStorage &steps , const Coefficients &coef , Time dt ) const + { + typedef typename Coefficients::value_type value_type; + algebra.for_each3( out , in , dxdt , typename Operations::template scale_sum2< value_type , Time >( 1.0 , dt * coef[0] ) ); + } +}; + + +template< class Algebra , class Operations > +struct adams_moulton_call_algebra< 2 , Algebra , Operations > +{ + template< class StateIn , class StateOut , class DerivIn , class StepStorage , class Coefficients , class Time > + void operator()( Algebra &algebra , const StateIn &in , StateOut &out , const DerivIn &dxdt , const StepStorage &steps , const Coefficients &coef , Time dt ) const + { + typedef typename Coefficients::value_type value_type; + algebra.for_each4( out , in , dxdt , steps[0].m_v , + typename Operations::template scale_sum3< value_type , Time , Time >( 1.0 , dt * coef[0] , dt * coef[1] ) ); + } +}; + + +template< class Algebra , class Operations > +struct adams_moulton_call_algebra< 3 , Algebra , Operations > +{ + template< class StateIn , class StateOut , class DerivIn , class StepStorage , class Coefficients , class Time > + void operator()( Algebra &algebra , const StateIn &in , StateOut &out , const DerivIn &dxdt , const StepStorage &steps , const Coefficients &coef , Time dt ) const + { + typedef typename Coefficients::value_type value_type; + algebra.for_each5( out , in , dxdt , steps[0].m_v , steps[1].m_v , + typename Operations::template scale_sum4< value_type , Time , Time >( 1.0 , dt * coef[0] , dt * coef[1] , dt * coef[2] ) ); + } +}; + + +template< class Algebra , class Operations > +struct adams_moulton_call_algebra< 4 , Algebra , Operations > +{ + template< class StateIn , class StateOut , class DerivIn , class StepStorage , class Coefficients , class Time > + void operator()( Algebra &algebra , const StateIn &in , StateOut &out , const DerivIn &dxdt , const StepStorage &steps , const Coefficients &coef , Time dt ) const + { + typedef typename Coefficients::value_type value_type; + algebra.for_each6( out , in , dxdt , steps[0].m_v , steps[1].m_v , steps[2].m_v , + typename Operations::template scale_sum5< value_type , Time , Time , Time >( + 1.0 , dt * coef[0] , dt * coef[1] , dt * coef[2] , dt * coef[3] ) ); + } +}; + + +template< class Algebra , class Operations > +struct adams_moulton_call_algebra< 5 , Algebra , Operations > +{ + template< class StateIn , class StateOut , class DerivIn , class StepStorage , class Coefficients , class Time > + void operator()( Algebra &algebra , const StateIn &in , StateOut &out , const DerivIn &dxdt , const StepStorage &steps , const Coefficients &coef , Time dt ) const + { + typedef typename Coefficients::value_type value_type; + algebra.for_each7( out , in , dxdt , steps[0].m_v , steps[1].m_v , steps[2].m_v , steps[3].m_v , + typename Operations::template scale_sum6< value_type , Time , Time , Time , Time >( + 1.0 , dt * coef[0] , dt * coef[1] , dt * coef[2] , dt * coef[3] , dt * coef[4] ) ); + } +}; + + +template< class Algebra , class Operations > +struct adams_moulton_call_algebra< 6 , Algebra , Operations > +{ + template< class StateIn , class StateOut , class DerivIn , class StepStorage , class Coefficients , class Time > + void operator()( Algebra &algebra , const StateIn &in , StateOut &out , const DerivIn &dxdt , const StepStorage &steps , const Coefficients &coef , Time dt ) const + { + typedef typename Coefficients::value_type value_type; + algebra.for_each8( out , in , dxdt , steps[0].m_v , steps[1].m_v , steps[2].m_v , steps[3].m_v , steps[4].m_v , + typename Operations::template scale_sum7< value_type , Time , Time , Time , Time , Time >( + 1.0 , dt * coef[0] , dt * coef[1] , dt * coef[2] , dt * coef[3] , dt * coef[4] , dt * coef[5] ) ); + } +}; + + +template< class Algebra , class Operations > +struct adams_moulton_call_algebra< 7 , Algebra , Operations > +{ + template< class StateIn , class StateOut , class DerivIn , class StepStorage , class Coefficients , class Time > + void operator()( Algebra &algebra , const StateIn &in , StateOut &out , const DerivIn &dxdt , const StepStorage &steps , const Coefficients &coef , Time dt ) const + { + typedef typename Coefficients::value_type value_type; + algebra.for_each9( out , in , dxdt , steps[0].m_v , steps[1].m_v , steps[2].m_v , steps[3].m_v , steps[4].m_v , steps[5].m_v , + typename Operations::template scale_sum8< value_type , Time , Time , Time , Time , Time , Time >( + 1.0 , dt * coef[0] , dt * coef[1] , dt * coef[2] , dt * coef[3] , dt * coef[4] , dt * coef[5] , dt * coef[6] ) ); + } +}; + + +template< class Algebra , class Operations > +struct adams_moulton_call_algebra< 8 , Algebra , Operations > +{ + template< class StateIn , class StateOut , class DerivIn , class StepStorage , class Coefficients , class Time > + void operator()( Algebra &algebra , const StateIn &in , StateOut &out , const DerivIn &dxdt , const StepStorage &steps , const Coefficients &coef , Time dt ) const + { + typedef typename Coefficients::value_type value_type; + algebra.for_each10( out , in , dxdt , steps[0].m_v , steps[1].m_v , steps[2].m_v , steps[3].m_v , steps[4].m_v , steps[5].m_v , steps[6].m_v , + typename Operations::template scale_sum9< value_type , Time , Time , Time , Time , Time , Time , Time >( + 1.0 , dt * coef[0] , dt * coef[1] , dt * coef[2] , dt * coef[3] , dt * coef[4] , dt * coef[5] , dt * coef[6] , dt * coef[7] ) ); + } +}; + + + + +} // detail +} // odeint +} // numeric +} // boost + + + +#endif // BOOST_NUMERIC_ODEINT_STEPPER_DETAIL_ADAMS_MOULTON_CALL_ALGEBRA_HPP_INCLUDED |