Chris@16
|
1 /*
|
Chris@16
|
2 [auto_generated]
|
Chris@16
|
3 boost/numeric/odeint/algebra/array_algebra.hpp
|
Chris@16
|
4
|
Chris@16
|
5 [begin_description]
|
Chris@16
|
6 Algebra for boost::array. Highly specialized for odeint. Const arguments are introduce to work with odeint.
|
Chris@16
|
7 [end_description]
|
Chris@16
|
8
|
Chris@16
|
9 Copyright 2009-2011 Karsten Ahnert
|
Chris@16
|
10 Copyright 2009-2011 Mario Mulansky
|
Chris@16
|
11
|
Chris@16
|
12 Distributed under the Boost Software License, Version 1.0.
|
Chris@16
|
13 (See accompanying file LICENSE_1_0.txt or
|
Chris@16
|
14 copy at http://www.boost.org/LICENSE_1_0.txt)
|
Chris@16
|
15 */
|
Chris@16
|
16
|
Chris@16
|
17
|
Chris@16
|
18 #ifndef BOOST_NUMERIC_ODEINT_ALGEBRA_ARRAY_ALGEBRA_HPP_INCLUDED
|
Chris@16
|
19 #define BOOST_NUMERIC_ODEINT_ALGEBRA_ARRAY_ALGEBRA_HPP_INCLUDED
|
Chris@16
|
20
|
Chris@16
|
21 #include <boost/array.hpp>
|
Chris@16
|
22
|
Chris@16
|
23 namespace boost {
|
Chris@16
|
24 namespace numeric {
|
Chris@16
|
25 namespace odeint {
|
Chris@16
|
26
|
Chris@16
|
27 struct array_algebra
|
Chris@16
|
28 {
|
Chris@16
|
29 template< typename T , size_t dim , class Op >
|
Chris@16
|
30 static void for_each1( boost::array< T , dim > &s1 , Op op )
|
Chris@16
|
31 {
|
Chris@16
|
32 for( size_t i=0 ; i<dim ; ++i )
|
Chris@16
|
33 op( s1[i] );
|
Chris@16
|
34 }
|
Chris@16
|
35
|
Chris@16
|
36
|
Chris@16
|
37 template< typename T1 , typename T2 , size_t dim , class Op >
|
Chris@16
|
38 static void for_each2( boost::array< T1 , dim > &s1 ,
|
Chris@16
|
39 const boost::array< T2 , dim > &s2 , Op op )
|
Chris@16
|
40 {
|
Chris@16
|
41 for( size_t i=0 ; i<dim ; ++i )
|
Chris@16
|
42 op( s1[i] , s2[i] );
|
Chris@16
|
43 }
|
Chris@16
|
44
|
Chris@16
|
45 template< typename T , size_t dim , class Op >
|
Chris@16
|
46 static void for_each3( boost::array< T , dim > &s1 ,
|
Chris@16
|
47 const boost::array< T , dim > &s2 ,
|
Chris@16
|
48 const boost::array< T , dim > &s3 , Op op )
|
Chris@16
|
49 {
|
Chris@16
|
50 for( size_t i=0 ; i<dim ; ++i )
|
Chris@16
|
51 op( s1[i] , s2[i] , s3[i] );
|
Chris@16
|
52 }
|
Chris@16
|
53
|
Chris@16
|
54 /* different const signature - required for the scale_sum_swap2 operation */
|
Chris@16
|
55 template< typename T , size_t dim , class Op >
|
Chris@16
|
56 static void for_each3( boost::array< T , dim > &s1 ,
|
Chris@16
|
57 boost::array< T , dim > &s2 ,
|
Chris@16
|
58 const boost::array< T , dim > &s3 , Op op )
|
Chris@16
|
59 {
|
Chris@16
|
60 for( size_t i=0 ; i<dim ; ++i )
|
Chris@16
|
61 op( s1[i] , s2[i] , s3[i] );
|
Chris@16
|
62 }
|
Chris@16
|
63
|
Chris@16
|
64 template< typename T , size_t dim , class Op >
|
Chris@16
|
65 static void for_each4( boost::array< T , dim > &s1 ,
|
Chris@16
|
66 const boost::array< T , dim > &s2 ,
|
Chris@16
|
67 const boost::array< T , dim > &s3 ,
|
Chris@16
|
68 const boost::array< T , dim > &s4 , Op op )
|
Chris@16
|
69 {
|
Chris@16
|
70 for( size_t i=0 ; i<dim ; ++i )
|
Chris@16
|
71 op( s1[i] , s2[i] , s3[i] , s4[i] );
|
Chris@16
|
72 }
|
Chris@16
|
73
|
Chris@16
|
74 template< typename T , size_t dim , class Op >
|
Chris@16
|
75 static void for_each5( boost::array< T , dim > &s1 ,
|
Chris@16
|
76 const boost::array< T , dim > &s2 ,
|
Chris@16
|
77 const boost::array< T , dim > &s3 ,
|
Chris@16
|
78 const boost::array< T , dim > &s4 ,
|
Chris@16
|
79 const boost::array< T , dim > &s5 , Op op )
|
Chris@16
|
80 {
|
Chris@16
|
81 for( size_t i=0 ; i<dim ; ++i )
|
Chris@16
|
82 op( s1[i] , s2[i] , s3[i] , s4[i] , s5[i] );
|
Chris@16
|
83 }
|
Chris@16
|
84
|
Chris@16
|
85 template< typename T , size_t dim , class Op >
|
Chris@16
|
86 static void for_each6( boost::array< T , dim > &s1 ,
|
Chris@16
|
87 const boost::array< T , dim > &s2 ,
|
Chris@16
|
88 const boost::array< T , dim > &s3 ,
|
Chris@16
|
89 const boost::array< T , dim > &s4 ,
|
Chris@16
|
90 const boost::array< T , dim > &s5 ,
|
Chris@16
|
91 const boost::array< T , dim > &s6 , Op op )
|
Chris@16
|
92 {
|
Chris@16
|
93 for( size_t i=0 ; i<dim ; ++i )
|
Chris@16
|
94 op( s1[i] , s2[i] , s3[i] , s4[i] , s5[i] , s6[i] );
|
Chris@16
|
95 }
|
Chris@16
|
96
|
Chris@16
|
97 template< typename T , size_t dim , class Op >
|
Chris@16
|
98 static void for_each7( boost::array< T , dim > &s1 ,
|
Chris@16
|
99 const boost::array< T , dim > &s2 ,
|
Chris@16
|
100 const boost::array< T , dim > &s3 ,
|
Chris@16
|
101 const boost::array< T , dim > &s4 ,
|
Chris@16
|
102 const boost::array< T , dim > &s5 ,
|
Chris@16
|
103 const boost::array< T , dim > &s6 ,
|
Chris@16
|
104 const boost::array< T , dim > &s7 , Op op )
|
Chris@16
|
105 {
|
Chris@16
|
106 for( size_t i=0 ; i<dim ; ++i )
|
Chris@16
|
107 op( s1[i] , s2[i] , s3[i] , s4[i] , s5[i] , s6[i] , s7[i] );
|
Chris@16
|
108 }
|
Chris@16
|
109
|
Chris@16
|
110 template< typename T , size_t dim , class Op >
|
Chris@16
|
111 static void for_each8( boost::array< T , dim > &s1 ,
|
Chris@16
|
112 const boost::array< T , dim > &s2 ,
|
Chris@16
|
113 const boost::array< T , dim > &s3 ,
|
Chris@16
|
114 const boost::array< T , dim > &s4 ,
|
Chris@16
|
115 const boost::array< T , dim > &s5 ,
|
Chris@16
|
116 const boost::array< T , dim > &s6 ,
|
Chris@16
|
117 const boost::array< T , dim > &s7 ,
|
Chris@16
|
118 const boost::array< T , dim > &s8 , Op op )
|
Chris@16
|
119 {
|
Chris@16
|
120 for( size_t i=0 ; i<dim ; ++i )
|
Chris@16
|
121 op( s1[i] , s2[i] , s3[i] , s4[i] , s5[i] , s6[i] , s7[i] , s8[i] );
|
Chris@16
|
122 }
|
Chris@16
|
123
|
Chris@16
|
124 template< typename T , size_t dim , class Op >
|
Chris@16
|
125 static void for_each9( boost::array< T , dim > &s1 ,
|
Chris@16
|
126 const boost::array< T , dim > &s2 ,
|
Chris@16
|
127 const boost::array< T , dim > &s3 ,
|
Chris@16
|
128 const boost::array< T , dim > &s4 ,
|
Chris@16
|
129 const boost::array< T , dim > &s5 ,
|
Chris@16
|
130 const boost::array< T , dim > &s6 ,
|
Chris@16
|
131 const boost::array< T , dim > &s7 ,
|
Chris@16
|
132 const boost::array< T , dim > &s8 ,
|
Chris@16
|
133 const boost::array< T , dim > &s9 , Op op )
|
Chris@16
|
134 {
|
Chris@16
|
135 for( size_t i=0 ; i<dim ; ++i )
|
Chris@16
|
136 op( s1[i] , s2[i] , s3[i] , s4[i] , s5[i] , s6[i] , s7[i] , s8[i] , s9[i] );
|
Chris@16
|
137 }
|
Chris@16
|
138
|
Chris@16
|
139 template< typename T , size_t dim , class Op >
|
Chris@16
|
140 static void for_each10( boost::array< T , dim > &s1 ,
|
Chris@16
|
141 const boost::array< T , dim > &s2 ,
|
Chris@16
|
142 const boost::array< T , dim > &s3 ,
|
Chris@16
|
143 const boost::array< T , dim > &s4 ,
|
Chris@16
|
144 const boost::array< T , dim > &s5 ,
|
Chris@16
|
145 const boost::array< T , dim > &s6 ,
|
Chris@16
|
146 const boost::array< T , dim > &s7 ,
|
Chris@16
|
147 const boost::array< T , dim > &s8 ,
|
Chris@16
|
148 const boost::array< T , dim > &s9 ,
|
Chris@16
|
149 const boost::array< T , dim > &s10 , Op op )
|
Chris@16
|
150 {
|
Chris@16
|
151 for( size_t i=0 ; i<dim ; ++i )
|
Chris@16
|
152 op( s1[i] , s2[i] , s3[i] , s4[i] , s5[i] , s6[i] , s7[i] , s8[i] , s9[i] , s10[i] );
|
Chris@16
|
153 }
|
Chris@16
|
154
|
Chris@16
|
155 template< typename T , size_t dim , class Op >
|
Chris@16
|
156 static void for_each11( boost::array< T , dim > &s1 ,
|
Chris@16
|
157 const boost::array< T , dim > &s2 ,
|
Chris@16
|
158 const boost::array< T , dim > &s3 ,
|
Chris@16
|
159 const boost::array< T , dim > &s4 ,
|
Chris@16
|
160 const boost::array< T , dim > &s5 ,
|
Chris@16
|
161 const boost::array< T , dim > &s6 ,
|
Chris@16
|
162 const boost::array< T , dim > &s7 ,
|
Chris@16
|
163 const boost::array< T , dim > &s8 ,
|
Chris@16
|
164 const boost::array< T , dim > &s9 ,
|
Chris@16
|
165 const boost::array< T , dim > &s10 ,
|
Chris@16
|
166 const boost::array< T , dim > &s11 , Op op )
|
Chris@16
|
167 {
|
Chris@16
|
168 for( size_t i=0 ; i<dim ; ++i )
|
Chris@16
|
169 op( s1[i] , s2[i] , s3[i] , s4[i] , s5[i] , s6[i] , s7[i] , s8[i] , s9[i] , s10[i] , s11[i] );
|
Chris@16
|
170 }
|
Chris@16
|
171
|
Chris@16
|
172 template< typename T , size_t dim , class Op >
|
Chris@16
|
173 static void for_each12( boost::array< T , dim > &s1 ,
|
Chris@16
|
174 const boost::array< T , dim > &s2 ,
|
Chris@16
|
175 const boost::array< T , dim > &s3 ,
|
Chris@16
|
176 const boost::array< T , dim > &s4 ,
|
Chris@16
|
177 const boost::array< T , dim > &s5 ,
|
Chris@16
|
178 const boost::array< T , dim > &s6 ,
|
Chris@16
|
179 const boost::array< T , dim > &s7 ,
|
Chris@16
|
180 const boost::array< T , dim > &s8 ,
|
Chris@16
|
181 const boost::array< T , dim > &s9 ,
|
Chris@16
|
182 const boost::array< T , dim > &s10 ,
|
Chris@16
|
183 const boost::array< T , dim > &s11 ,
|
Chris@16
|
184 const boost::array< T , dim > &s12 , Op op )
|
Chris@16
|
185 {
|
Chris@16
|
186 for( size_t i=0 ; i<dim ; ++i )
|
Chris@16
|
187 op( s1[i] , s2[i] , s3[i] , s4[i] , s5[i] , s6[i] , s7[i] , s8[i] , s9[i] , s10[i] , s11[i] , s12[i] );
|
Chris@16
|
188 }
|
Chris@16
|
189
|
Chris@16
|
190 template< typename T , size_t dim , class Op >
|
Chris@16
|
191 static void for_each13( boost::array< T , dim > &s1 ,
|
Chris@16
|
192 const boost::array< T , dim > &s2 ,
|
Chris@16
|
193 const boost::array< T , dim > &s3 ,
|
Chris@16
|
194 const boost::array< T , dim > &s4 ,
|
Chris@16
|
195 const boost::array< T , dim > &s5 ,
|
Chris@16
|
196 const boost::array< T , dim > &s6 ,
|
Chris@16
|
197 const boost::array< T , dim > &s7 ,
|
Chris@16
|
198 const boost::array< T , dim > &s8 ,
|
Chris@16
|
199 const boost::array< T , dim > &s9 ,
|
Chris@16
|
200 const boost::array< T , dim > &s10 ,
|
Chris@16
|
201 const boost::array< T , dim > &s11 ,
|
Chris@16
|
202 const boost::array< T , dim > &s12 ,
|
Chris@16
|
203 const boost::array< T , dim > &s13 , Op op )
|
Chris@16
|
204 {
|
Chris@16
|
205 for( size_t i=0 ; i<dim ; ++i )
|
Chris@16
|
206 op( s1[i] , s2[i] , s3[i] , s4[i] , s5[i] , s6[i] , s7[i] , s8[i] , s9[i] , s10[i] , s11[i] , s12[i] , s13[i] );
|
Chris@16
|
207 }
|
Chris@16
|
208
|
Chris@16
|
209 template< typename T , size_t dim , class Op >
|
Chris@16
|
210 static void for_each14( boost::array< T , dim > &s1 ,
|
Chris@16
|
211 const boost::array< T , dim > &s2 ,
|
Chris@16
|
212 const boost::array< T , dim > &s3 ,
|
Chris@16
|
213 const boost::array< T , dim > &s4 ,
|
Chris@16
|
214 const boost::array< T , dim > &s5 ,
|
Chris@16
|
215 const boost::array< T , dim > &s6 ,
|
Chris@16
|
216 const boost::array< T , dim > &s7 ,
|
Chris@16
|
217 const boost::array< T , dim > &s8 ,
|
Chris@16
|
218 const boost::array< T , dim > &s9 ,
|
Chris@16
|
219 const boost::array< T , dim > &s10 ,
|
Chris@16
|
220 const boost::array< T , dim > &s11 ,
|
Chris@16
|
221 const boost::array< T , dim > &s12 ,
|
Chris@16
|
222 const boost::array< T , dim > &s13 ,
|
Chris@16
|
223 const boost::array< T , dim > &s14 , Op op )
|
Chris@16
|
224 {
|
Chris@16
|
225 for( size_t i=0 ; i<dim ; ++i )
|
Chris@16
|
226 op( s1[i] , s2[i] , s3[i] , s4[i] , s5[i] , s6[i] , s7[i] , s8[i] , s9[i] , s10[i] , s11[i] , s12[i] , s13[i] , s14[i] );
|
Chris@16
|
227 }
|
Chris@16
|
228
|
Chris@16
|
229 template< typename T , size_t dim , class Op >
|
Chris@16
|
230 static void for_each15( boost::array< T , dim > &s1 ,
|
Chris@16
|
231 const boost::array< T , dim > &s2 ,
|
Chris@16
|
232 const boost::array< T , dim > &s3 ,
|
Chris@16
|
233 const boost::array< T , dim > &s4 ,
|
Chris@16
|
234 const boost::array< T , dim > &s5 ,
|
Chris@16
|
235 const boost::array< T , dim > &s6 ,
|
Chris@16
|
236 const boost::array< T , dim > &s7 ,
|
Chris@16
|
237 const boost::array< T , dim > &s8 ,
|
Chris@16
|
238 const boost::array< T , dim > &s9 ,
|
Chris@16
|
239 const boost::array< T , dim > &s10 ,
|
Chris@16
|
240 const boost::array< T , dim > &s11 ,
|
Chris@16
|
241 const boost::array< T , dim > &s12 ,
|
Chris@16
|
242 const boost::array< T , dim > &s13 ,
|
Chris@16
|
243 const boost::array< T , dim > &s14 ,
|
Chris@16
|
244 const boost::array< T , dim > &s15 , Op op )
|
Chris@16
|
245 {
|
Chris@16
|
246 for( size_t i=0 ; i<dim ; ++i )
|
Chris@16
|
247 op( s1[i] , s2[i] , s3[i] , s4[i] , s5[i] , s6[i] , s7[i] , s8[i] , s9[i] , s10[i] , s11[i] , s12[i] , s13[i] , s14[i] , s15[i] );
|
Chris@16
|
248 }
|
Chris@16
|
249
|
Chris@16
|
250
|
Chris@16
|
251 template< class Value , class T , size_t dim , class Red >
|
Chris@16
|
252 static Value reduce( const boost::array< T , dim > &s , Red red , Value init)
|
Chris@16
|
253 {
|
Chris@16
|
254 for( size_t i=0 ; i<dim ; ++i )
|
Chris@16
|
255 init = red( init , s[i] );
|
Chris@16
|
256 return init;
|
Chris@16
|
257 }
|
Chris@16
|
258
|
Chris@16
|
259 };
|
Chris@16
|
260
|
Chris@16
|
261 }
|
Chris@16
|
262 }
|
Chris@16
|
263 }
|
Chris@16
|
264
|
Chris@16
|
265 #endif // BOOST_NUMERIC_ODEINT_ALGEBRA_ARRAY_ALGEBRA_HPP_INCLUDED
|