adams_moulton_call_algebra.hpp 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. /*
  2. [auto_generated]
  3. boost/numeric/odeint/stepper/detail/adams_moulton_call_algebra.hpp
  4. [begin_description]
  5. Algebra caller for the Adams Moulton method.
  6. [end_description]
  7. Copyright 2011-2012 Karsten Ahnert
  8. Copyright 2011 Mario Mulansky
  9. Distributed under the Boost Software License, Version 1.0.
  10. (See accompanying file LICENSE_1_0.txt or
  11. copy at http://www.boost.org/LICENSE_1_0.txt)
  12. */
  13. #ifndef BOOST_NUMERIC_ODEINT_STEPPER_DETAIL_ADAMS_MOULTON_CALL_ALGEBRA_HPP_INCLUDED
  14. #define BOOST_NUMERIC_ODEINT_STEPPER_DETAIL_ADAMS_MOULTON_CALL_ALGEBRA_HPP_INCLUDED
  15. #include <boost/assert.hpp>
  16. namespace boost {
  17. namespace numeric {
  18. namespace odeint {
  19. namespace detail {
  20. template< size_t Step , class Algebra , class Operations >
  21. struct adams_moulton_call_algebra;
  22. template< class Algebra , class Operations >
  23. struct adams_moulton_call_algebra< 1 , Algebra , Operations >
  24. {
  25. template< class StateIn , class StateOut , class DerivIn , class StepStorage , class Coefficients , class Time >
  26. void operator()( Algebra &algebra , const StateIn &in , StateOut &out , const DerivIn &dxdt , const StepStorage& /* steps */ , const Coefficients &coef , Time dt ) const
  27. {
  28. typedef typename Coefficients::value_type value_type;
  29. algebra.for_each3( out , in , dxdt , typename Operations::template scale_sum2< value_type , Time >( 1.0 , dt * coef[0] ) );
  30. }
  31. };
  32. template< class Algebra , class Operations >
  33. struct adams_moulton_call_algebra< 2 , Algebra , Operations >
  34. {
  35. template< class StateIn , class StateOut , class DerivIn , class StepStorage , class Coefficients , class Time >
  36. void operator()( Algebra &algebra , const StateIn &in , StateOut &out , const DerivIn &dxdt , const StepStorage &steps , const Coefficients &coef , Time dt ) const
  37. {
  38. typedef typename Coefficients::value_type value_type;
  39. algebra.for_each4( out , in , dxdt , steps[0].m_v ,
  40. typename Operations::template scale_sum3< value_type , Time , Time >( 1.0 , dt * coef[0] , dt * coef[1] ) );
  41. }
  42. };
  43. template< class Algebra , class Operations >
  44. struct adams_moulton_call_algebra< 3 , Algebra , Operations >
  45. {
  46. template< class StateIn , class StateOut , class DerivIn , class StepStorage , class Coefficients , class Time >
  47. void operator()( Algebra &algebra , const StateIn &in , StateOut &out , const DerivIn &dxdt , const StepStorage &steps , const Coefficients &coef , Time dt ) const
  48. {
  49. typedef typename Coefficients::value_type value_type;
  50. algebra.for_each5( out , in , dxdt , steps[0].m_v , steps[1].m_v ,
  51. typename Operations::template scale_sum4< value_type , Time , Time >( 1.0 , dt * coef[0] , dt * coef[1] , dt * coef[2] ) );
  52. }
  53. };
  54. template< class Algebra , class Operations >
  55. struct adams_moulton_call_algebra< 4 , Algebra , Operations >
  56. {
  57. template< class StateIn , class StateOut , class DerivIn , class StepStorage , class Coefficients , class Time >
  58. void operator()( Algebra &algebra , const StateIn &in , StateOut &out , const DerivIn &dxdt , const StepStorage &steps , const Coefficients &coef , Time dt ) const
  59. {
  60. typedef typename Coefficients::value_type value_type;
  61. algebra.for_each6( out , in , dxdt , steps[0].m_v , steps[1].m_v , steps[2].m_v ,
  62. typename Operations::template scale_sum5< value_type , Time , Time , Time >(
  63. 1.0 , dt * coef[0] , dt * coef[1] , dt * coef[2] , dt * coef[3] ) );
  64. }
  65. };
  66. template< class Algebra , class Operations >
  67. struct adams_moulton_call_algebra< 5 , Algebra , Operations >
  68. {
  69. template< class StateIn , class StateOut , class DerivIn , class StepStorage , class Coefficients , class Time >
  70. void operator()( Algebra &algebra , const StateIn &in , StateOut &out , const DerivIn &dxdt , const StepStorage &steps , const Coefficients &coef , Time dt ) const
  71. {
  72. typedef typename Coefficients::value_type value_type;
  73. algebra.for_each7( out , in , dxdt , steps[0].m_v , steps[1].m_v , steps[2].m_v , steps[3].m_v ,
  74. typename Operations::template scale_sum6< value_type , Time , Time , Time , Time >(
  75. 1.0 , dt * coef[0] , dt * coef[1] , dt * coef[2] , dt * coef[3] , dt * coef[4] ) );
  76. }
  77. };
  78. template< class Algebra , class Operations >
  79. struct adams_moulton_call_algebra< 6 , Algebra , Operations >
  80. {
  81. template< class StateIn , class StateOut , class DerivIn , class StepStorage , class Coefficients , class Time >
  82. void operator()( Algebra &algebra , const StateIn &in , StateOut &out , const DerivIn &dxdt , const StepStorage &steps , const Coefficients &coef , Time dt ) const
  83. {
  84. typedef typename Coefficients::value_type value_type;
  85. 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 ,
  86. typename Operations::template scale_sum7< value_type , Time , Time , Time , Time , Time >(
  87. 1.0 , dt * coef[0] , dt * coef[1] , dt * coef[2] , dt * coef[3] , dt * coef[4] , dt * coef[5] ) );
  88. }
  89. };
  90. template< class Algebra , class Operations >
  91. struct adams_moulton_call_algebra< 7 , Algebra , Operations >
  92. {
  93. template< class StateIn , class StateOut , class DerivIn , class StepStorage , class Coefficients , class Time >
  94. void operator()( Algebra &algebra , const StateIn &in , StateOut &out , const DerivIn &dxdt , const StepStorage &steps , const Coefficients &coef , Time dt ) const
  95. {
  96. typedef typename Coefficients::value_type value_type;
  97. 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 ,
  98. typename Operations::template scale_sum8< value_type , Time , Time , Time , Time , Time , Time >(
  99. 1.0 , dt * coef[0] , dt * coef[1] , dt * coef[2] , dt * coef[3] , dt * coef[4] , dt * coef[5] , dt * coef[6] ) );
  100. }
  101. };
  102. template< class Algebra , class Operations >
  103. struct adams_moulton_call_algebra< 8 , Algebra , Operations >
  104. {
  105. template< class StateIn , class StateOut , class DerivIn , class StepStorage , class Coefficients , class Time >
  106. void operator()( Algebra &algebra , const StateIn &in , StateOut &out , const DerivIn &dxdt , const StepStorage &steps , const Coefficients &coef , Time dt ) const
  107. {
  108. typedef typename Coefficients::value_type value_type;
  109. 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 ,
  110. typename Operations::template scale_sum9< value_type , Time , Time , Time , Time , Time , Time , Time >(
  111. 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] ) );
  112. }
  113. };
  114. } // detail
  115. } // odeint
  116. } // numeric
  117. } // boost
  118. #endif // BOOST_NUMERIC_ODEINT_STEPPER_DETAIL_ADAMS_MOULTON_CALL_ALGEBRA_HPP_INCLUDED