adams_bashforth_call_algebra.hpp 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. /*
  2. [auto_generated]
  3. boost/numeric/odeint/stepper/detail/adams_bashforth_call_algebra.hpp
  4. [begin_description]
  5. Algebra caller for the Adams Bashforth stepper.
  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_BASHFORTH_CALL_ALGEBRA_HPP_INCLUDED
  14. #define BOOST_NUMERIC_ODEINT_STEPPER_DETAIL_ADAMS_BASHFORTH_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_bashforth_call_algebra;
  22. template< class Algebra , class Operations >
  23. struct adams_bashforth_call_algebra< 1 , Algebra , Operations >
  24. {
  25. template< class StateIn , class StateOut , class StepStorage , class Coefficients , class Time >
  26. void operator()( Algebra &algebra , const StateIn &in , StateOut &out , const StepStorage &steps , const Coefficients &coef , Time dt ) const
  27. {
  28. typedef typename Coefficients::value_type value_type;
  29. algebra.for_each3( out , in , steps[0].m_v , typename Operations::template scale_sum2< value_type , Time >( 1.0 , dt * coef[0] ) );
  30. }
  31. };
  32. template< class Algebra , class Operations >
  33. struct adams_bashforth_call_algebra< 2 , Algebra , Operations >
  34. {
  35. template< class StateIn , class StateOut , class StepStorage , class Coefficients , class Time >
  36. void operator()( Algebra &algebra , const StateIn &in , StateOut &out , const StepStorage &steps , const Coefficients &coef , Time dt ) const
  37. {
  38. typedef typename Coefficients::value_type value_type;
  39. algebra.for_each4( out , in , steps[0].m_v , steps[1].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_bashforth_call_algebra< 3 , Algebra , Operations >
  45. {
  46. template< class StateIn , class StateOut , class StepStorage , class Coefficients , class Time >
  47. void operator()( Algebra &algebra , const StateIn &in , StateOut &out , const StepStorage &steps , const Coefficients &coef , Time dt ) const
  48. {
  49. typedef typename Coefficients::value_type value_type;
  50. algebra.for_each5( out , in , steps[0].m_v , steps[1].m_v , steps[2].m_v ,
  51. typename Operations::template scale_sum4< value_type , Time , Time , Time >( 1.0 , dt * coef[0] , dt * coef[1] , dt * coef[2] ) );
  52. }
  53. };
  54. template< class Algebra , class Operations >
  55. struct adams_bashforth_call_algebra< 4 , Algebra , Operations >
  56. {
  57. template< class StateIn , class StateOut , class StepStorage , class Coefficients , class Time >
  58. void operator()( Algebra &algebra , const StateIn &in , StateOut &out , const StepStorage &steps , const Coefficients &coef , Time dt ) const
  59. {
  60. typedef typename Coefficients::value_type value_type;
  61. algebra.for_each6( out , in , steps[0].m_v , steps[1].m_v , steps[2].m_v , steps[3].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_bashforth_call_algebra< 5 , Algebra , Operations >
  68. {
  69. template< class StateIn , class StateOut , class StepStorage , class Coefficients , class Time >
  70. void operator()( Algebra &algebra , const StateIn &in , StateOut &out , const StepStorage &steps , const Coefficients &coef , Time dt ) const
  71. {
  72. typedef typename Coefficients::value_type value_type;
  73. algebra.for_each7( out , in , steps[0].m_v , steps[1].m_v , steps[2].m_v , steps[3].m_v , steps[4].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_bashforth_call_algebra< 6 , Algebra , Operations >
  80. {
  81. template< class StateIn , class StateOut , class StepStorage , class Coefficients , class Time >
  82. void operator()( Algebra &algebra , const StateIn &in , StateOut &out , const StepStorage &steps , const Coefficients &coef , Time dt ) const
  83. {
  84. typedef typename Coefficients::value_type value_type;
  85. algebra.for_each8( out , in , steps[0].m_v , steps[1].m_v , steps[2].m_v , steps[3].m_v , steps[4].m_v , steps[5].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_bashforth_call_algebra< 7 , Algebra , Operations >
  92. {
  93. template< class StateIn , class StateOut , class StepStorage , class Coefficients , class Time >
  94. void operator()( Algebra &algebra , const StateIn &in , StateOut &out , const StepStorage &steps , const Coefficients &coef , Time dt ) const
  95. {
  96. //BOOST_ASSERT( false ); // not implemented
  97. typedef typename Coefficients::value_type value_type;
  98. algebra.for_each9( out , in , 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 ,
  99. typename Operations::template scale_sum8< value_type , Time , Time , Time , Time , Time , Time >(
  100. 1.0 , dt * coef[0] , dt * coef[1] , dt * coef[2] , dt * coef[3] , dt * coef[4] , dt * coef[5] , dt * coef[6] ) );
  101. }
  102. };
  103. template< class Algebra , class Operations >
  104. struct adams_bashforth_call_algebra< 8 , Algebra , Operations >
  105. {
  106. template< class StateIn , class StateOut , class StepStorage , class Coefficients , class Time >
  107. void operator()( Algebra &algebra , const StateIn &in , StateOut &out , const StepStorage &steps , const Coefficients &coef , Time dt ) const
  108. {
  109. //BOOST_ASSERT( false ); // not implemented
  110. typedef typename Coefficients::value_type value_type;
  111. algebra.for_each10( out , in , 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 , steps[7].m_v ,
  112. typename Operations::template scale_sum9< value_type , Time , Time , Time , Time , Time , Time , Time >(
  113. 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] ) );
  114. }
  115. };
  116. } // detail
  117. } // odeint
  118. } // numeric
  119. } // boost
  120. #endif // BOOST_NUMERIC_ODEINT_STEPPER_DETAIL_ADAMS_BASHFORTH_CALL_ALGEBRA_HPP_INCLUDED