generic_rk_operations.hpp 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252
  1. /*
  2. [auto_generated]
  3. boost/numeric/odeint/stepper/detail/generic_rk_operations.hpp
  4. [begin_description]
  5. Operations caller for the generic Runge Kutta method.
  6. [end_description]
  7. Copyright 2011 Mario Mulansky
  8. Copyright 2011-2012 Karsten Ahnert
  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_GENERIC_RK_OPERATIONS_HPP_INCLUDED
  14. #define BOOST_NUMERIC_ODEINT_STEPPER_DETAIL_GENERIC_RK_OPERATIONS_HPP_INCLUDED
  15. namespace boost {
  16. namespace numeric {
  17. namespace odeint {
  18. namespace detail {
  19. template< size_t StageNumber , class Operations , class Fac , class Time >
  20. struct generic_rk_scale_sum;
  21. template< class Operations , class Fac , class Time >
  22. struct generic_rk_scale_sum< 1 , Operations , Fac , Time > : public Operations::template scale_sum2< Fac , Time >
  23. {
  24. generic_rk_scale_sum( const boost::array<Fac,1> &a , Time dt ) : Operations::template scale_sum2< Fac , Time >( 1.0 , a[0]*dt )
  25. { }
  26. typedef void result_type;
  27. };
  28. template< class Operations , class Fac , class Time >
  29. struct generic_rk_scale_sum< 2 , Operations , Fac , Time > : public Operations::template scale_sum3< Fac , Time >
  30. {
  31. generic_rk_scale_sum( const boost::array<Fac,2> &a , Time dt )
  32. : Operations::template scale_sum3< Fac , Time >( 1.0 , a[0]*dt , a[1]*dt )
  33. { }
  34. typedef void result_type;
  35. };
  36. template< class Operations , class Fac , class Time >
  37. struct generic_rk_scale_sum< 3 , Operations , Fac , Time > : public Operations::template scale_sum4< Fac , Time >
  38. {
  39. generic_rk_scale_sum( const boost::array<Fac,3> &a , Time dt )
  40. : Operations::template scale_sum4< Fac , Time >( 1.0 , a[0]*dt , a[1]*dt , a[2]*dt )
  41. { }
  42. typedef void result_type;
  43. };
  44. template< class Operations , class Fac , class Time >
  45. struct generic_rk_scale_sum< 4 , Operations , Fac , Time > : public Operations::template scale_sum5< Fac , Time >
  46. {
  47. generic_rk_scale_sum( const boost::array<Fac,4> &a , Time dt )
  48. : Operations::template scale_sum5< Fac , Time >( 1.0 , a[0]*dt , a[1]*dt , a[2]*dt , a[3]*dt )
  49. { }
  50. typedef void result_type;
  51. };
  52. template< class Operations , class Fac , class Time >
  53. struct generic_rk_scale_sum< 5 , Operations , Fac , Time > : public Operations::template scale_sum6< Fac , Time >
  54. {
  55. generic_rk_scale_sum( const boost::array<Fac,5> &a , Time dt )
  56. : Operations::template scale_sum6< Fac , Time >( 1.0 , a[0]*dt , a[1]*dt , a[2]*dt , a[3]*dt , a[4]*dt )
  57. { }
  58. typedef void result_type;
  59. };
  60. template< class Operations , class Fac , class Time >
  61. struct generic_rk_scale_sum< 6 , Operations , Fac , Time > : public Operations::template scale_sum7< Fac , Time >
  62. {
  63. generic_rk_scale_sum( const boost::array<Fac,6> &a , Time dt )
  64. : Operations::template scale_sum7< Fac , Time >( 1.0 , a[0]*dt , a[1]*dt , a[2]*dt , a[3]*dt , a[4]*dt , a[5]*dt )
  65. { }
  66. typedef void result_type;
  67. };
  68. template< class Operations , class Fac , class Time >
  69. struct generic_rk_scale_sum< 7 , Operations , Fac , Time > : public Operations::template scale_sum8< Fac , Time >
  70. {
  71. generic_rk_scale_sum( const boost::array<Fac,7> &a , Time dt )
  72. : Operations::template scale_sum8< Fac , Time >( 1.0 , a[0]*dt , a[1]*dt , a[2]*dt , a[3]*dt , a[4]*dt , a[5]*dt , a[6]*dt )
  73. { }
  74. typedef void result_type;
  75. };
  76. template< class Operations , class Fac , class Time >
  77. struct generic_rk_scale_sum< 8 , Operations , Fac , Time > : public Operations::template scale_sum9< Fac , Time >
  78. {
  79. generic_rk_scale_sum( const boost::array<Fac,8> &a , Time dt )
  80. : Operations::template scale_sum9< Fac , Time >( 1.0 , a[0]*dt , a[1]*dt , a[2]*dt , a[3]*dt , a[4]*dt ,
  81. a[5]*dt , a[6]*dt , a[7]*dt )
  82. { }
  83. typedef void result_type;
  84. };
  85. template< class Operations , class Fac , class Time >
  86. struct generic_rk_scale_sum< 9 , Operations , Fac , Time > : public Operations::template scale_sum10< Fac , Time >
  87. {
  88. generic_rk_scale_sum( const boost::array<Fac,9> &a , Time dt )
  89. : Operations::template scale_sum10< Fac , Time >( 1.0 , a[0]*dt , a[1]*dt , a[2]*dt , a[3]*dt , a[4]*dt ,
  90. a[5]*dt , a[6]*dt , a[7]*dt , a[8]*dt )
  91. { }
  92. typedef void result_type;
  93. };
  94. template< class Operations , class Fac , class Time >
  95. struct generic_rk_scale_sum< 10 , Operations , Fac , Time > : public Operations::template scale_sum11< Fac , Time >
  96. {
  97. generic_rk_scale_sum( const boost::array<Fac,10> &a , Time dt )
  98. : Operations::template scale_sum11< Fac , Time >( 1.0 , a[0]*dt , a[1]*dt , a[2]*dt , a[3]*dt , a[4]*dt ,
  99. a[5]*dt , a[6]*dt , a[7]*dt , a[8]*dt , a[9]*dt )
  100. { }
  101. typedef void result_type;
  102. };
  103. template< class Operations , class Fac , class Time >
  104. struct generic_rk_scale_sum< 11 , Operations , Fac , Time > : public Operations::template scale_sum12< Fac , Time >
  105. {
  106. generic_rk_scale_sum( const boost::array<Fac,11> &a , Time dt )
  107. : Operations::template scale_sum12< Fac , Time >( 1.0 , a[0]*dt , a[1]*dt , a[2]*dt , a[3]*dt , a[4]*dt ,
  108. a[5]*dt , a[6]*dt , a[7]*dt , a[8]*dt , a[9]*dt , a[10]*dt )
  109. { }
  110. typedef void result_type;
  111. };
  112. template< class Operations , class Fac , class Time >
  113. struct generic_rk_scale_sum< 12 , Operations , Fac , Time > : public Operations::template scale_sum13< Fac , Time >
  114. {
  115. generic_rk_scale_sum( const boost::array<Fac,12> &a , Time dt )
  116. : Operations::template scale_sum13< Fac , Time >( 1.0 , a[0]*dt , a[1]*dt , a[2]*dt , a[3]*dt , a[4]*dt ,
  117. a[5]*dt , a[6]*dt , a[7]*dt , a[8]*dt , a[9]*dt , a[10]*dt , a[11]*dt )
  118. { }
  119. typedef void result_type;
  120. };
  121. template< class Operations , class Fac , class Time >
  122. struct generic_rk_scale_sum< 13 , Operations , Fac , Time > : public Operations::template scale_sum14< Fac , Time >
  123. {
  124. generic_rk_scale_sum( const boost::array<Fac,13> &a , Time dt )
  125. : Operations::template scale_sum14< Fac , Time >( 1.0 , a[0]*dt , a[1]*dt , a[2]*dt , a[3]*dt , a[4]*dt ,
  126. a[5]*dt , a[6]*dt , a[7]*dt , a[8]*dt , a[9]*dt , a[10]*dt , a[11]*dt , a[12]*dt )
  127. { }
  128. typedef void result_type;
  129. };
  130. // for error estimates
  131. template< size_t StageNumber , class Operations , class Fac , class Time >
  132. struct generic_rk_scale_sum_err;
  133. template< class Operations , class Fac , class Time >
  134. struct generic_rk_scale_sum_err< 1 , Operations , Fac , Time > : public Operations::template scale_sum1< Time >
  135. {
  136. generic_rk_scale_sum_err( const boost::array<Fac,1> &a , Time dt ) : Operations::template scale_sum1< Time >( a[0]*dt )
  137. { }
  138. typedef void result_type;
  139. };
  140. template< class Operations , class Fac , class Time >
  141. struct generic_rk_scale_sum_err< 2 , Operations , Fac , Time > : public Operations::template scale_sum2< Time >
  142. {
  143. generic_rk_scale_sum_err( const boost::array<Fac,2> &a , Time dt )
  144. : Operations::template scale_sum2< Time >( a[0]*dt , a[1]*dt )
  145. { }
  146. typedef void result_type;
  147. };
  148. template< class Operations , class Fac , class Time >
  149. struct generic_rk_scale_sum_err< 3 , Operations , Fac , Time > : public Operations::template scale_sum3< Time >
  150. {
  151. generic_rk_scale_sum_err( const boost::array<Fac,3> &a , Time dt )
  152. : Operations::template scale_sum3< Time >( a[0]*dt , a[1]*dt , a[2]*dt )
  153. { }
  154. typedef void result_type;
  155. };
  156. template< class Operations , class Fac , class Time >
  157. struct generic_rk_scale_sum_err< 4 , Operations , Fac , Time > : public Operations::template scale_sum4< Time >
  158. {
  159. generic_rk_scale_sum_err( const boost::array<Fac,4> &a , Time dt )
  160. : Operations::template scale_sum4< Time >( a[0]*dt , a[1]*dt , a[2]*dt , a[3]*dt )
  161. { }
  162. typedef void result_type;
  163. };
  164. template< class Operations , class Fac , class Time >
  165. struct generic_rk_scale_sum_err< 5 , Operations , Fac , Time > : public Operations::template scale_sum5< Fac >
  166. {
  167. generic_rk_scale_sum_err( const boost::array<Fac,5> &a , Time dt )
  168. : Operations::template scale_sum5< Time >( a[0]*dt , a[1]*dt , a[2]*dt , a[3]*dt , a[4]*dt )
  169. { }
  170. typedef void result_type;
  171. };
  172. template< class Operations , class Fac , class Time >
  173. struct generic_rk_scale_sum_err< 6 , Operations , Fac , Time > : public Operations::template scale_sum6< Time >
  174. {
  175. generic_rk_scale_sum_err( const boost::array<Fac,6> &a , Time dt )
  176. : Operations::template scale_sum6< Time >( a[0]*dt , a[1]*dt , a[2]*dt , a[3]*dt , a[4]*dt , a[5]*dt )
  177. { }
  178. typedef void result_type;
  179. };
  180. // for rk87
  181. template< class Operations , class Fac , class Time >
  182. struct generic_rk_scale_sum_err< 13 , Operations , Fac , Time > : public Operations::template scale_sum13< Time >
  183. {
  184. generic_rk_scale_sum_err( const boost::array<Fac,13> &a , Time dt )
  185. : Operations::template scale_sum13< Time >( a[0]*dt , a[1]*dt , a[2]*dt , a[3]*dt , a[4]*dt , a[5]*dt ,
  186. a[6]*dt , a[7]*dt , a[8]*dt , a[9]*dt , a[10]*dt , a[11]*dt , a[12]*dt )
  187. { }
  188. typedef void result_type;
  189. };
  190. }
  191. }
  192. }
  193. }
  194. #endif // BOOST_NUMERIC_ODEINT_STEPPER_DETAIL_GENERIC_RK_OPERATIONS_HPP_INCLUDED