1 /*
2  [auto_generated]
3  boost/numeric/odeint/stepper/detail/generic_rk_call_algebra.hpp
4 
5  [begin_description]
6  Algebra caller for the generic Runge-Kutta methods.
7  [end_description]
8 
9  Copyright 2011-2012 Mario Mulansky
10  Copyright 2011-2012 Karsten Ahnert
11 
12  Distributed under the Boost Software License, Version 1.0.
13  (See accompanying file LICENSE_1_0.txt or
14  copy at http://www.boost.org/LICENSE_1_0.txt)
15  */
16 
17 
18 #ifndef BOOST_NUMERIC_ODEINT_STEPPER_DETAIL_GENERIC_RK_CALL_ALGEBRA_HPP_INCLUDED
19 #define BOOST_NUMERIC_ODEINT_STEPPER_DETAIL_GENERIC_RK_CALL_ALGEBRA_HPP_INCLUDED
20 
21 
22 namespace boost {
23 namespace numeric {
24 namespace odeint {
25 namespace detail {
26 
27 template< size_t StageNumber , class Algebra >
28 struct generic_rk_call_algebra;
29 
30 template< class Algebra >
31 struct generic_rk_call_algebra< 1 , Algebra >
32 {
33     typedef Algebra algebra_type;
34 
35     template< class S1 , class S2 , class S3 , class S4 , class Op>
operator ()boost::numeric::odeint::detail::generic_rk_call_algebra36     void operator()( algebra_type &algebra , S1 &s1 , S2 &s2 ,  S3 &s3 , S4 * /* s4_array */ , Op op ) const
37     {
38         algebra.for_each3( s1 , s2 , s3 , op );
39     }
40 
41     template< class S1 , class S2 , class S4 , class Op>
operator ()boost::numeric::odeint::detail::generic_rk_call_algebra42     void operator()( algebra_type &algebra , S1 &s1 , S2 &s2 , S4 * /* s4_array */ , Op op ) const
43     {
44         algebra.for_each2( s1 , s2 , op );
45     }
46 };
47 
48 template< class Algebra >
49 struct generic_rk_call_algebra< 2 , Algebra >
50 {
51     template< class S1 , class S2 , class S3 , class S4 , class Op>
operator ()boost::numeric::odeint::detail::generic_rk_call_algebra52     void operator()( Algebra &algebra , S1 &s1 , S2 &s2 ,  S3 &s3 , S4 s4_array[1] , Op op ) const
53     {
54         algebra.for_each4( s1 , s2 , s3 , s4_array[0].m_v , op );
55     }
56 
57     template< class S1 , class S2 , class S4 , class Op>
operator ()boost::numeric::odeint::detail::generic_rk_call_algebra58     void operator()( Algebra &algebra , S1 &s1 , S2 &s2 , S4 s4_array[1] , Op op ) const
59     {
60         algebra.for_each3( s1 , s2 , s4_array[0].m_v , op );
61     }
62 };
63 
64 
65 template< class Algebra >
66 struct generic_rk_call_algebra< 3 , Algebra >
67 {
68     template< class S1 , class S2 , class S3 , class S4 , class Op>
operator ()boost::numeric::odeint::detail::generic_rk_call_algebra69     void operator()( Algebra &algebra , S1 &s1 , S2 &s2 , S3 &s3 , S4 s4_array[2] , Op op ) const
70     {
71         algebra.for_each5( s1 , s2 , s3 , s4_array[0].m_v , s4_array[1].m_v , op );
72     }
73 
74     template< class S1 , class S2 , class S4 , class Op>
operator ()boost::numeric::odeint::detail::generic_rk_call_algebra75     void operator()( Algebra &algebra , S1 &s1 , S2 &s2 , S4 s4_array[2] , Op op ) const
76     {
77         algebra.for_each4( s1 , s2 , s4_array[0].m_v , s4_array[1].m_v , op );
78     }
79 };
80 
81 
82 template< class Algebra >
83 struct generic_rk_call_algebra< 4 , Algebra >
84 {
85     template< class S1 , class S2 , class S3 , class S4 , class Op>
operator ()boost::numeric::odeint::detail::generic_rk_call_algebra86     void operator()( Algebra &algebra , S1 &s1 , S2 &s2 , S3 &s3 , S4 s4_array[3] , Op op ) const
87     {
88         algebra.for_each6( s1 , s2 , s3 , s4_array[0].m_v , s4_array[1].m_v , s4_array[2].m_v , op );
89     }
90 
91     template< class S1 , class S2 , class S4 , class Op>
operator ()boost::numeric::odeint::detail::generic_rk_call_algebra92     void operator()( Algebra &algebra , S1 &s1 , S2 &s2 , S4 s4_array[3] , Op op ) const
93     {
94         algebra.for_each5( s1 , s2 , s4_array[0].m_v , s4_array[1].m_v , s4_array[2].m_v , op );
95     }
96 };
97 
98 
99 template< class Algebra >
100 struct generic_rk_call_algebra< 5 , Algebra >
101 {
102     template< class S1 , class S2 , class S3 , class S4 , class Op>
operator ()boost::numeric::odeint::detail::generic_rk_call_algebra103     void operator()( Algebra &algebra , S1 &s1 , S2 &s2 , S3 &s3 , S4 s4_array[4] , Op op ) const
104     {
105         algebra.for_each7( s1 , s2 , s3 , s4_array[0].m_v , s4_array[1].m_v , s4_array[2].m_v , s4_array[3].m_v , op );
106     }
107 
108     template< class S1 , class S2 , class S4 , class Op>
operator ()boost::numeric::odeint::detail::generic_rk_call_algebra109     void operator()( Algebra &algebra , S1 &s1 , S2 &s2 , S4 s4_array[4] , Op op ) const
110     {
111         algebra.for_each6( s1 , s2 , s4_array[0].m_v , s4_array[1].m_v , s4_array[2].m_v , s4_array[3].m_v , op );
112     }
113 };
114 
115 template< class Algebra >
116 struct generic_rk_call_algebra< 6 , Algebra >
117 {
118     template< class S1 , class S2 , class S3 , class S4 , class Op>
operator ()boost::numeric::odeint::detail::generic_rk_call_algebra119     void operator()( Algebra &algebra , S1 &s1 , S2 &s2 , S3 &s3 , S4 s4_array[5] , Op op ) const
120     {
121         algebra.for_each8( s1 , s2 , s3 , s4_array[0].m_v , s4_array[1].m_v , s4_array[2].m_v , s4_array[3].m_v , s4_array[4].m_v , op );
122     }
123 
124     template< class S1 , class S2 , class S4 , class Op>
operator ()boost::numeric::odeint::detail::generic_rk_call_algebra125     void operator()( Algebra &algebra , S1 &s1 , S2 &s2 , S4 s4_array[5] , Op op ) const
126     {
127         algebra.for_each7( s1 , s2 , s4_array[0].m_v , s4_array[1].m_v , s4_array[2].m_v , s4_array[3].m_v , s4_array[4].m_v , op );
128     }
129 };
130 
131 template< class Algebra >
132 struct generic_rk_call_algebra< 7 , Algebra >
133 {
134     template< class S1 , class S2 , class S3 , class S4 , class Op>
operator ()boost::numeric::odeint::detail::generic_rk_call_algebra135     void operator()( Algebra &algebra , S1 &s1 , S2 &s2 , S3 &s3 , S4 s4_array[6] , Op op ) const
136     {
137         algebra.for_each9( s1 , s2 , s3 , s4_array[0].m_v , s4_array[1].m_v , s4_array[2].m_v , s4_array[3].m_v , s4_array[4].m_v ,
138                 s4_array[5].m_v , op );
139     }
140 
141     template< class S1 , class S2 , class S4 , class Op>
operator ()boost::numeric::odeint::detail::generic_rk_call_algebra142     void operator()( Algebra &algebra , S1 &s1 , S2 &s2 , S4 s4_array[6] , Op op ) const
143     {
144         algebra.for_each8( s1 , s2 , s4_array[0].m_v , s4_array[1].m_v , s4_array[2].m_v , s4_array[3].m_v , s4_array[4].m_v ,
145                 s4_array[5].m_v , op );
146     }
147 };
148 
149 template< class Algebra >
150 struct generic_rk_call_algebra< 8 , Algebra >
151 {
152     template< class S1 , class S2 , class S3 , class S4 , class Op>
operator ()boost::numeric::odeint::detail::generic_rk_call_algebra153     void operator()( Algebra &algebra , S1 &s1 , S2 &s2 , S3 &s3 , S4 s4_array[7] , Op op ) const
154     {
155         algebra.for_each10( s1 , s2 , s3 , s4_array[0].m_v , s4_array[1].m_v , s4_array[2].m_v , s4_array[3].m_v , s4_array[4].m_v ,
156                 s4_array[5].m_v , s4_array[6].m_v , op );
157     }
158 
159     template< class S1 , class S2 , class S4 , class Op>
operator ()boost::numeric::odeint::detail::generic_rk_call_algebra160     void operator()( Algebra &algebra , S1 &s1 , S2 &s2 , S4 s4_array[7] , Op op ) const
161     {
162         algebra.for_each9( s1 , s2 , s4_array[0].m_v , s4_array[1].m_v , s4_array[2].m_v , s4_array[3].m_v , s4_array[4].m_v ,
163                 s4_array[5].m_v , s4_array[6].m_v , op );
164     }
165 };
166 
167 template< class Algebra >
168 struct generic_rk_call_algebra< 9 , Algebra >
169 {
170     template< class S1 , class S2 , class S3 , class S4 , class Op>
operator ()boost::numeric::odeint::detail::generic_rk_call_algebra171     void operator()( Algebra &algebra , S1 &s1 , S2 &s2 , S3 &s3 , S4 s4_array[8] , Op op ) const
172     {
173         algebra.for_each11( s1 , s2 , s3 , s4_array[0].m_v , s4_array[1].m_v , s4_array[2].m_v , s4_array[3].m_v , s4_array[4].m_v ,
174                 s4_array[5].m_v , s4_array[6].m_v , s4_array[7].m_v , op );
175     }
176 
177     template< class S1 , class S2 , class S4 , class Op>
operator ()boost::numeric::odeint::detail::generic_rk_call_algebra178     void operator()( Algebra &algebra , S1 &s1 , S2 &s2 , S4 s4_array[8] , Op op ) const
179     {
180         algebra.for_each10( s1 , s2 , s4_array[0].m_v , s4_array[1].m_v , s4_array[2].m_v , s4_array[3].m_v , s4_array[4].m_v ,
181                 s4_array[5].m_v , s4_array[6].m_v , s4_array[7].m_v , op );
182     }
183 };
184 
185 template< class Algebra >
186 struct generic_rk_call_algebra< 10 , Algebra >
187 {
188     template< class S1 , class S2 , class S3 , class S4 , class Op>
operator ()boost::numeric::odeint::detail::generic_rk_call_algebra189     void operator()( Algebra &algebra , S1 &s1 , S2 &s2 , S3 &s3 , S4 s4_array[9] , Op op ) const
190     {
191         algebra.for_each12( s1 , s2 , s3 , s4_array[0].m_v , s4_array[1].m_v , s4_array[2].m_v , s4_array[3].m_v , s4_array[4].m_v ,
192                 s4_array[5].m_v , s4_array[6].m_v , s4_array[7].m_v , s4_array[8].m_v , op );
193     }
194 
195     template< class S1 , class S2 , class S4 , class Op>
operator ()boost::numeric::odeint::detail::generic_rk_call_algebra196     void operator()( Algebra &algebra , S1 &s1 , S2 &s2 , S4 s4_array[9] , Op op ) const
197     {
198         algebra.for_each11( s1 , s2 , s4_array[0].m_v , s4_array[1].m_v , s4_array[2].m_v , s4_array[3].m_v , s4_array[4].m_v ,
199                 s4_array[5].m_v , s4_array[6].m_v , s4_array[7].m_v , s4_array[8].m_v , op );
200     }
201 };
202 
203 
204 template< class Algebra >
205 struct generic_rk_call_algebra< 11 , Algebra >
206 {
207     template< class S1 , class S2 , class S3 , class S4 , class Op>
operator ()boost::numeric::odeint::detail::generic_rk_call_algebra208     void operator()( Algebra &algebra , S1 &s1 , S2 &s2 , S3 &s3 , S4 s4_array[10] , Op op ) const
209     {
210         algebra.for_each13( s1 , s2 , s3 , s4_array[0].m_v , s4_array[1].m_v , s4_array[2].m_v , s4_array[3].m_v , s4_array[4].m_v ,
211                 s4_array[5].m_v , s4_array[6].m_v , s4_array[7].m_v , s4_array[8].m_v , s4_array[9].m_v , op );
212     }
213 
214     template< class S1 , class S2 , class S4 , class Op>
operator ()boost::numeric::odeint::detail::generic_rk_call_algebra215     void operator()( Algebra &algebra , S1 &s1 , S2 &s2 , S4 s4_array[10] , Op op ) const
216     {
217         algebra.for_each12( s1 , s2 , s4_array[0].m_v , s4_array[1].m_v , s4_array[2].m_v , s4_array[3].m_v , s4_array[4].m_v ,
218                 s4_array[5].m_v , s4_array[6].m_v , s4_array[7].m_v , s4_array[8].m_v , s4_array[9].m_v , op );
219     }
220 };
221 
222 template< class Algebra >
223 struct generic_rk_call_algebra< 12 , Algebra >
224 {
225     template< class S1 , class S2 , class S3 , class S4 , class Op>
operator ()boost::numeric::odeint::detail::generic_rk_call_algebra226     void operator()( Algebra &algebra , S1 &s1 , S2 &s2 , S3 &s3 , S4 s4_array[11] , Op op ) const
227     {
228         algebra.for_each14( s1 , s2 , s3 , s4_array[0].m_v , s4_array[1].m_v , s4_array[2].m_v , s4_array[3].m_v , s4_array[4].m_v ,
229                 s4_array[5].m_v , s4_array[6].m_v , s4_array[7].m_v , s4_array[8].m_v , s4_array[9].m_v , s4_array[10].m_v , op );
230     }
231 
232     template< class S1 , class S2 , class S4 , class Op>
operator ()boost::numeric::odeint::detail::generic_rk_call_algebra233     void operator()( Algebra &algebra , S1 &s1 , S2 &s2 , S4 s4_array[11] , Op op ) const
234     {
235         algebra.for_each13( s1 , s2 , s4_array[0].m_v , s4_array[1].m_v , s4_array[2].m_v , s4_array[3].m_v , s4_array[4].m_v ,
236                 s4_array[5].m_v , s4_array[6].m_v , s4_array[7].m_v , s4_array[8].m_v , s4_array[9].m_v , s4_array[10].m_v , op );
237     }
238 };
239 
240 template< class Algebra >
241 struct generic_rk_call_algebra< 13 , Algebra >
242 {
243     template< class S1 , class S2 , class S3 , class S4 , class Op>
operator ()boost::numeric::odeint::detail::generic_rk_call_algebra244     void operator()( Algebra &algebra , S1 &s1 , S2 &s2 , S3 &s3 , S4 s4_array[12] , Op op ) const
245     {
246         algebra.for_each15( s1 , s2 , s3 , s4_array[0].m_v , s4_array[1].m_v , s4_array[2].m_v , s4_array[3].m_v , s4_array[4].m_v ,
247                 s4_array[5].m_v , s4_array[6].m_v , s4_array[7].m_v , s4_array[8].m_v , s4_array[9].m_v , s4_array[10].m_v , s4_array[11].m_v , op );
248     }
249 
250     template< class S1 , class S2 , class S4 , class Op>
operator ()boost::numeric::odeint::detail::generic_rk_call_algebra251     void operator()( Algebra &algebra , S1 &s1 , S2 &s2 , S4 s4_array[12] , Op op ) const
252     {
253         algebra.for_each14( s1 , s2 , s4_array[0].m_v , s4_array[1].m_v , s4_array[2].m_v , s4_array[3].m_v , s4_array[4].m_v ,
254                 s4_array[5].m_v , s4_array[6].m_v , s4_array[7].m_v , s4_array[8].m_v , s4_array[9].m_v , s4_array[10].m_v , s4_array[11].m_v , op );
255     }
256 };
257 
258 }
259 }
260 }
261 }
262 
263 #endif // BOOST_NUMERIC_ODEINT_STEPPER_DETAIL_GENERIC_RK_CALL_ALGEBRA_HPP_INCLUDED
264