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