annotate DEPENDENCIES/generic/include/boost/numeric/odeint/algebra/default_operations.hpp @ 125:34e428693f5d vext

Vext -> Repoint
author Chris Cannam
date Thu, 14 Jun 2018 11:15:39 +0100
parents c530137014c0
children
rev   line source
Chris@16 1 /*
Chris@16 2 [auto_generated]
Chris@16 3 boost/numeric/odeint/algebra/default_operations.hpp
Chris@16 4
Chris@16 5 [begin_description]
Chris@16 6 Default operations. They work with the default numerical types, like float, double, complex< double> ...
Chris@16 7 [end_description]
Chris@16 8
Chris@101 9 Copyright 2010-2012 Karsten Ahnert
Chris@101 10 Copyright 2010-2013 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_DEFAULT_OPERATIONS_HPP_INCLUDED
Chris@16 19 #define BOOST_NUMERIC_ODEINT_ALGEBRA_DEFAULT_OPERATIONS_HPP_INCLUDED
Chris@16 20
Chris@16 21 #include <algorithm>
Chris@16 22
Chris@16 23 #include <boost/config.hpp>
Chris@16 24 #include <boost/array.hpp>
Chris@16 25
Chris@16 26 #include <boost/numeric/odeint/util/unit_helper.hpp>
Chris@16 27
Chris@16 28
Chris@16 29 namespace boost {
Chris@16 30 namespace numeric {
Chris@16 31 namespace odeint {
Chris@16 32
Chris@16 33
Chris@16 34
Chris@16 35 /*
Chris@16 36 * Notes:
Chris@16 37 *
Chris@16 38 * * the results structs are needed in order to work with fusion_algebra
Chris@16 39 */
Chris@16 40 struct default_operations
Chris@16 41 {
Chris@16 42
Chris@16 43 template< class Fac1 = double >
Chris@16 44 struct scale
Chris@16 45 {
Chris@16 46 const Fac1 m_alpha1;
Chris@16 47
Chris@16 48 scale( Fac1 alpha1 ) : m_alpha1( alpha1 ) { }
Chris@16 49
Chris@16 50 template< class T1 >
Chris@16 51 void operator()( T1 &t1 ) const
Chris@16 52 {
Chris@16 53 t1 *= m_alpha1;
Chris@16 54 }
Chris@16 55
Chris@16 56 typedef void result_type;
Chris@16 57 };
Chris@16 58
Chris@16 59 template< class Fac1 = double >
Chris@16 60 struct scale_sum1
Chris@16 61 {
Chris@16 62 const Fac1 m_alpha1;
Chris@16 63
Chris@16 64 scale_sum1( Fac1 alpha1 ) : m_alpha1( alpha1 ) { }
Chris@16 65
Chris@16 66 template< class T1 , class T2 >
Chris@16 67 void operator()( T1 &t1 , const T2 &t2 ) const
Chris@16 68 {
Chris@16 69 t1 = m_alpha1 * t2;
Chris@16 70 }
Chris@16 71
Chris@16 72 typedef void result_type;
Chris@16 73 };
Chris@16 74
Chris@16 75
Chris@16 76 template< class Fac1 = double , class Fac2 = Fac1 >
Chris@16 77 struct scale_sum2
Chris@16 78 {
Chris@16 79 const Fac1 m_alpha1;
Chris@16 80 const Fac2 m_alpha2;
Chris@16 81
Chris@16 82 scale_sum2( Fac1 alpha1 , Fac2 alpha2 ) : m_alpha1( alpha1 ) , m_alpha2( alpha2 ) { }
Chris@16 83
Chris@16 84 template< class T1 , class T2 , class T3 >
Chris@16 85 void operator()( T1 &t1 , const T2 &t2 , const T3 &t3) const
Chris@16 86 {
Chris@16 87 t1 = m_alpha1 * t2 + m_alpha2 * t3;
Chris@16 88 }
Chris@16 89
Chris@16 90 typedef void result_type;
Chris@16 91 };
Chris@16 92
Chris@16 93
Chris@16 94 template< class Fac1 = double , class Fac2 = Fac1 , class Fac3 = Fac2 >
Chris@16 95 struct scale_sum3
Chris@16 96 {
Chris@16 97 const Fac1 m_alpha1;
Chris@16 98 const Fac2 m_alpha2;
Chris@16 99 const Fac3 m_alpha3;
Chris@16 100
Chris@16 101 scale_sum3( Fac1 alpha1 , Fac2 alpha2 , Fac3 alpha3 )
Chris@16 102 : m_alpha1( alpha1 ) , m_alpha2( alpha2 ) , m_alpha3( alpha3 ) { }
Chris@16 103
Chris@16 104 template< class T1 , class T2 , class T3 , class T4 >
Chris@16 105 void operator()( T1 &t1 , const T2 &t2 , const T3 &t3 , const T4 &t4 ) const
Chris@16 106 {
Chris@16 107 t1 = m_alpha1 * t2 + m_alpha2 * t3 + m_alpha3 * t4;
Chris@16 108 }
Chris@16 109
Chris@16 110 typedef void result_type;
Chris@16 111 };
Chris@16 112
Chris@16 113
Chris@16 114 template< class Fac1 = double , class Fac2 = Fac1 , class Fac3 = Fac2 , class Fac4 = Fac3 >
Chris@16 115 struct scale_sum4
Chris@16 116 {
Chris@16 117 const Fac1 m_alpha1;
Chris@16 118 const Fac2 m_alpha2;
Chris@16 119 const Fac3 m_alpha3;
Chris@16 120 const Fac4 m_alpha4;
Chris@16 121
Chris@16 122 scale_sum4( Fac1 alpha1 , Fac2 alpha2 , Fac3 alpha3 , Fac4 alpha4 )
Chris@16 123 : m_alpha1( alpha1 ) , m_alpha2( alpha2 ) , m_alpha3( alpha3 ) , m_alpha4( alpha4 ) { }
Chris@16 124
Chris@16 125 template< class T1 , class T2 , class T3 , class T4 , class T5 >
Chris@16 126 void operator()( T1 &t1 , const T2 &t2 , const T3 &t3 , const T4 &t4 , const T5 &t5) const
Chris@16 127 {
Chris@16 128 t1 = m_alpha1 * t2 + m_alpha2 * t3 + m_alpha3 * t4 + m_alpha4 * t5;
Chris@16 129 }
Chris@16 130
Chris@16 131 typedef void result_type;
Chris@16 132 };
Chris@16 133
Chris@16 134
Chris@16 135 template< class Fac1 = double , class Fac2 = Fac1 , class Fac3 = Fac2 , class Fac4 = Fac3 , class Fac5 = Fac4 >
Chris@16 136 struct scale_sum5
Chris@16 137 {
Chris@16 138 const Fac1 m_alpha1;
Chris@16 139 const Fac2 m_alpha2;
Chris@16 140 const Fac3 m_alpha3;
Chris@16 141 const Fac4 m_alpha4;
Chris@16 142 const Fac5 m_alpha5;
Chris@16 143
Chris@16 144 scale_sum5( Fac1 alpha1 , Fac2 alpha2 , Fac3 alpha3 , Fac4 alpha4 , Fac5 alpha5 )
Chris@16 145 : m_alpha1( alpha1 ) , m_alpha2( alpha2 ) , m_alpha3( alpha3 ) , m_alpha4( alpha4 ) , m_alpha5( alpha5 ) { }
Chris@16 146
Chris@16 147 template< class T1 , class T2 , class T3 , class T4 , class T5 , class T6 >
Chris@16 148 void operator()( T1 &t1 , const T2 &t2 , const T3 &t3 , const T4 &t4 , const T5 &t5 , const T6 &t6) const
Chris@16 149 {
Chris@16 150 t1 = m_alpha1 * t2 + m_alpha2 * t3 + m_alpha3 * t4 + m_alpha4 * t5 + m_alpha5 * t6;
Chris@16 151 }
Chris@16 152
Chris@16 153 typedef void result_type;
Chris@16 154 };
Chris@16 155
Chris@16 156
Chris@16 157 template< class Fac1 = double , class Fac2 = Fac1 , class Fac3 = Fac2 , class Fac4 = Fac3 , class Fac5 = Fac4 , class Fac6 = Fac5 >
Chris@16 158 struct scale_sum6
Chris@16 159 {
Chris@16 160 const Fac1 m_alpha1;
Chris@16 161 const Fac2 m_alpha2;
Chris@16 162 const Fac3 m_alpha3;
Chris@16 163 const Fac4 m_alpha4;
Chris@16 164 const Fac5 m_alpha5;
Chris@16 165 const Fac6 m_alpha6;
Chris@16 166
Chris@16 167 scale_sum6( Fac1 alpha1 , Fac2 alpha2 , Fac3 alpha3 , Fac4 alpha4 , Fac5 alpha5 , Fac6 alpha6 )
Chris@16 168 : m_alpha1( alpha1 ) , m_alpha2( alpha2 ) , m_alpha3( alpha3 ) , m_alpha4( alpha4 ) , m_alpha5( alpha5 ) , m_alpha6( alpha6 ){ }
Chris@16 169
Chris@16 170 template< class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 >
Chris@16 171 void operator()( T1 &t1 , const T2 &t2 , const T3 &t3 , const T4 &t4 , const T5 &t5 , const T6 &t6 ,const T7 &t7) const
Chris@16 172 {
Chris@16 173 t1 = m_alpha1 * t2 + m_alpha2 * t3 + m_alpha3 * t4 + m_alpha4 * t5 + m_alpha5 * t6 + m_alpha6 * t7;
Chris@16 174 }
Chris@16 175
Chris@16 176 typedef void result_type;
Chris@16 177 };
Chris@16 178
Chris@16 179
Chris@16 180 template< class Fac1 = double , class Fac2 = Fac1 , class Fac3 = Fac2 , class Fac4 = Fac3 , class Fac5 = Fac4 , class Fac6 = Fac5 , class Fac7 = Fac6 >
Chris@16 181 struct scale_sum7
Chris@16 182 {
Chris@16 183 const Fac1 m_alpha1;
Chris@16 184 const Fac2 m_alpha2;
Chris@16 185 const Fac3 m_alpha3;
Chris@16 186 const Fac4 m_alpha4;
Chris@16 187 const Fac5 m_alpha5;
Chris@16 188 const Fac6 m_alpha6;
Chris@16 189 const Fac7 m_alpha7;
Chris@16 190
Chris@16 191 scale_sum7( Fac1 alpha1 , Fac2 alpha2 , Fac3 alpha3 , Fac4 alpha4 ,
Chris@16 192 Fac5 alpha5 , Fac6 alpha6 , Fac7 alpha7 )
Chris@16 193 : m_alpha1( alpha1 ) , m_alpha2( alpha2 ) , m_alpha3( alpha3 ) , m_alpha4( alpha4 ) , m_alpha5( alpha5 ) , m_alpha6( alpha6 ) , m_alpha7( alpha7 ) { }
Chris@16 194
Chris@16 195 template< class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 >
Chris@16 196 void operator()( T1 &t1 , const T2 &t2 , const T3 &t3 , const T4 &t4 , const T5 &t5 , const T6 &t6 , const T7 &t7 , const T8 &t8 ) const
Chris@16 197 {
Chris@16 198 t1 = m_alpha1 * t2 + m_alpha2 * t3 + m_alpha3 * t4 + m_alpha4 * t5 + m_alpha5 * t6 + m_alpha6 * t7 + m_alpha7 * t8;
Chris@16 199 }
Chris@16 200
Chris@16 201 typedef void result_type;
Chris@16 202 };
Chris@16 203
Chris@16 204
Chris@16 205 template< class Fac1 = double , class Fac2 = Fac1 , class Fac3 = Fac2 , class Fac4 = Fac3 , class Fac5 = Fac4 , class Fac6 = Fac5 , class Fac7 = Fac6 , class Fac8 = Fac7 >
Chris@16 206 struct scale_sum8
Chris@16 207 {
Chris@16 208 const Fac1 m_alpha1;
Chris@16 209 const Fac2 m_alpha2;
Chris@16 210 const Fac3 m_alpha3;
Chris@16 211 const Fac4 m_alpha4;
Chris@16 212 const Fac5 m_alpha5;
Chris@16 213 const Fac6 m_alpha6;
Chris@16 214 const Fac7 m_alpha7;
Chris@16 215 const Fac8 m_alpha8;
Chris@16 216
Chris@16 217 scale_sum8( Fac1 alpha1 , Fac2 alpha2 , Fac3 alpha3 , Fac4 alpha4 ,
Chris@16 218 Fac5 alpha5 , Fac6 alpha6 , Fac7 alpha7 , Fac8 alpha8 )
Chris@16 219 : m_alpha1( alpha1 ) , m_alpha2( alpha2 ) , m_alpha3( alpha3 ) , m_alpha4( alpha4 ) , m_alpha5( alpha5 ) , m_alpha6( alpha6 ) , m_alpha7( alpha7 ) , m_alpha8( alpha8 ) { }
Chris@16 220
Chris@16 221 template< class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 >
Chris@16 222 void operator()( T1 &t1 , const T2 &t2 , const T3 &t3 , const T4 &t4 , const T5 &t5 , const T6 &t6 , const T7 &t7 , const T8 &t8 , const T9 &t9 ) const
Chris@16 223 {
Chris@16 224 t1 = m_alpha1 * t2 + m_alpha2 * t3 + m_alpha3 * t4 + m_alpha4 * t5 + m_alpha5 * t6 + m_alpha6 * t7 + m_alpha7 * t8 + m_alpha8 * t9;
Chris@16 225 }
Chris@16 226
Chris@16 227 typedef void result_type;
Chris@16 228 };
Chris@16 229
Chris@16 230 template< class Fac1 = double , class Fac2 = Fac1 , class Fac3 = Fac2 , class Fac4 = Fac3 , class Fac5 = Fac4 , class Fac6 = Fac5 , class Fac7 = Fac6 , class Fac8 = Fac7 , class Fac9 = Fac8 >
Chris@16 231 struct scale_sum9
Chris@16 232 {
Chris@16 233 const Fac1 m_alpha1;
Chris@16 234 const Fac2 m_alpha2;
Chris@16 235 const Fac3 m_alpha3;
Chris@16 236 const Fac4 m_alpha4;
Chris@16 237 const Fac5 m_alpha5;
Chris@16 238 const Fac6 m_alpha6;
Chris@16 239 const Fac7 m_alpha7;
Chris@16 240 const Fac8 m_alpha8;
Chris@16 241 const Fac9 m_alpha9;
Chris@16 242
Chris@16 243 scale_sum9( Fac1 alpha1 , Fac2 alpha2 , Fac3 alpha3 , Fac4 alpha4 ,
Chris@16 244 Fac5 alpha5 , Fac6 alpha6 , Fac7 alpha7 , Fac8 alpha8 , Fac9 alpha9 )
Chris@16 245 : m_alpha1( alpha1 ) , m_alpha2( alpha2 ) , m_alpha3( alpha3 ) , m_alpha4( alpha4 ) , m_alpha5( alpha5 ) , m_alpha6( alpha6 ) , m_alpha7( alpha7 ) , m_alpha8( alpha8 ) , m_alpha9( alpha9 ) { }
Chris@16 246
Chris@16 247 template< class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 >
Chris@16 248 void operator()( T1 &t1 , const T2 &t2 , const T3 &t3 , const T4 &t4 , const T5 &t5 , const T6 &t6 , const T7 &t7 , const T8 &t8 , const T9 &t9 , const T10 &t10 ) const
Chris@16 249 {
Chris@16 250 t1 = m_alpha1 * t2 + m_alpha2 * t3 + m_alpha3 * t4 + m_alpha4 * t5 + m_alpha5 * t6 + m_alpha6 * t7 + m_alpha7 * t8 + m_alpha8 * t9 + m_alpha9 * t10;
Chris@16 251 }
Chris@16 252
Chris@16 253 typedef void result_type;
Chris@16 254 };
Chris@16 255
Chris@16 256 template< class Fac1 = double , class Fac2 = Fac1 , class Fac3 = Fac2 , class Fac4 = Fac3 , class Fac5 = Fac4 , class Fac6 = Fac5 , class Fac7 = Fac6 , class Fac8 = Fac7 , class Fac9 = Fac8 , class Fac10 = Fac9 >
Chris@16 257 struct scale_sum10
Chris@16 258 {
Chris@16 259 const Fac1 m_alpha1;
Chris@16 260 const Fac2 m_alpha2;
Chris@16 261 const Fac3 m_alpha3;
Chris@16 262 const Fac4 m_alpha4;
Chris@16 263 const Fac5 m_alpha5;
Chris@16 264 const Fac6 m_alpha6;
Chris@16 265 const Fac7 m_alpha7;
Chris@16 266 const Fac8 m_alpha8;
Chris@16 267 const Fac9 m_alpha9;
Chris@16 268 const Fac10 m_alpha10;
Chris@16 269
Chris@16 270 scale_sum10( Fac1 alpha1 , Fac2 alpha2 , Fac3 alpha3 , Fac4 alpha4 ,
Chris@16 271 Fac5 alpha5 , Fac6 alpha6 , Fac7 alpha7 , Fac8 alpha8 , Fac9 alpha9 , Fac10 alpha10 )
Chris@16 272 : m_alpha1( alpha1 ) , m_alpha2( alpha2 ) , m_alpha3( alpha3 ) , m_alpha4( alpha4 ) , m_alpha5( alpha5 ) , m_alpha6( alpha6 ) , m_alpha7( alpha7 ) , m_alpha8( alpha8 ) , m_alpha9( alpha9 ) , m_alpha10( alpha10 ) { }
Chris@16 273
Chris@16 274 template< class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 >
Chris@16 275 void operator()( T1 &t1 , const T2 &t2 , const T3 &t3 , const T4 &t4 , const T5 &t5 , const T6 &t6 , const T7 &t7 , const T8 &t8 , const T9 &t9 , const T10 &t10 , const T11 &t11 ) const
Chris@16 276 {
Chris@16 277 t1 = m_alpha1 * t2 + m_alpha2 * t3 + m_alpha3 * t4 + m_alpha4 * t5 + m_alpha5 * t6 + m_alpha6 * t7 + m_alpha7 * t8 + m_alpha8 * t9 + m_alpha9 * t10 + m_alpha10 * t11;
Chris@16 278 }
Chris@16 279
Chris@16 280 typedef void result_type;
Chris@16 281 };
Chris@16 282
Chris@16 283
Chris@16 284 template< class Fac1 = double , class Fac2 = Fac1 , class Fac3 = Fac2 , class Fac4 = Fac3 , class Fac5 = Fac4 , class Fac6 = Fac5 , class Fac7 = Fac6 , class Fac8 = Fac7 , class Fac9 = Fac8 , class Fac10 = Fac9 , class Fac11 = Fac10 >
Chris@16 285 struct scale_sum11
Chris@16 286 {
Chris@16 287 const Fac1 m_alpha1;
Chris@16 288 const Fac2 m_alpha2;
Chris@16 289 const Fac3 m_alpha3;
Chris@16 290 const Fac4 m_alpha4;
Chris@16 291 const Fac5 m_alpha5;
Chris@16 292 const Fac6 m_alpha6;
Chris@16 293 const Fac7 m_alpha7;
Chris@16 294 const Fac8 m_alpha8;
Chris@16 295 const Fac9 m_alpha9;
Chris@16 296 const Fac10 m_alpha10;
Chris@16 297 const Fac11 m_alpha11;
Chris@16 298
Chris@16 299 scale_sum11( Fac1 alpha1 , Fac2 alpha2 , Fac3 alpha3 , Fac4 alpha4 ,
Chris@16 300 Fac5 alpha5 , Fac6 alpha6 , Fac7 alpha7 , Fac8 alpha8 , Fac9 alpha9 ,
Chris@16 301 Fac10 alpha10 , Fac11 alpha11 )
Chris@16 302 : m_alpha1( alpha1 ) , m_alpha2( alpha2 ) , m_alpha3( alpha3 ) , m_alpha4( alpha4 ) , m_alpha5( alpha5 ) , m_alpha6( alpha6 ) , m_alpha7( alpha7 ) , m_alpha8( alpha8 ) , m_alpha9( alpha9 ) , m_alpha10( alpha10 ) , m_alpha11( alpha11 ) { }
Chris@16 303
Chris@16 304 template< class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 >
Chris@16 305 void operator()( T1 &t1 , const T2 &t2 , const T3 &t3 , const T4 &t4 , const T5 &t5 , const T6 &t6 , const T7 &t7 , const T8 &t8 , const T9 &t9 , const T10 &t10 , const T11 &t11 , const T12 &t12 ) const
Chris@16 306 {
Chris@16 307 t1 = m_alpha1 * t2 + m_alpha2 * t3 + m_alpha3 * t4 + m_alpha4 * t5 + m_alpha5 * t6 + m_alpha6 * t7 + m_alpha7 * t8 + m_alpha8 * t9 + m_alpha9 * t10 + m_alpha10 * t11 + m_alpha11 * t12;
Chris@16 308 }
Chris@16 309
Chris@16 310 typedef void result_type;
Chris@16 311 };
Chris@16 312
Chris@16 313 template< class Fac1 = double , class Fac2 = Fac1 , class Fac3 = Fac2 , class Fac4 = Fac3 , class Fac5 = Fac4 , class Fac6 = Fac5 , class Fac7 = Fac6 , class Fac8 = Fac7 , class Fac9 = Fac8 , class Fac10 = Fac9 , class Fac11 = Fac10 , class Fac12 = Fac11 >
Chris@16 314 struct scale_sum12
Chris@16 315 {
Chris@16 316 const Fac1 m_alpha1;
Chris@16 317 const Fac2 m_alpha2;
Chris@16 318 const Fac3 m_alpha3;
Chris@16 319 const Fac4 m_alpha4;
Chris@16 320 const Fac5 m_alpha5;
Chris@16 321 const Fac6 m_alpha6;
Chris@16 322 const Fac7 m_alpha7;
Chris@16 323 const Fac8 m_alpha8;
Chris@16 324 const Fac9 m_alpha9;
Chris@16 325 const Fac10 m_alpha10;
Chris@16 326 const Fac11 m_alpha11;
Chris@16 327 const Fac12 m_alpha12;
Chris@16 328
Chris@16 329 scale_sum12( Fac1 alpha1 , Fac2 alpha2 , Fac3 alpha3 , Fac4 alpha4 ,
Chris@16 330 Fac5 alpha5 , Fac6 alpha6 , Fac7 alpha7 , Fac8 alpha8 , Fac9 alpha9 ,
Chris@16 331 Fac10 alpha10 , Fac11 alpha11 , Fac12 alpha12 )
Chris@16 332 : m_alpha1( alpha1 ) , m_alpha2( alpha2 ) , m_alpha3( alpha3 ) , m_alpha4( alpha4 ) , m_alpha5( alpha5 ) , m_alpha6( alpha6 ) , m_alpha7( alpha7 ) , m_alpha8( alpha8 ) , m_alpha9( alpha9 ) , m_alpha10( alpha10 ) , m_alpha11( alpha11 ) , m_alpha12( alpha12 ) { }
Chris@16 333
Chris@16 334 template< class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 >
Chris@16 335 void operator()( T1 &t1 , const T2 &t2 , const T3 &t3 , const T4 &t4 , const T5 &t5 , const T6 &t6 , const T7 &t7 , const T8 &t8 , const T9 &t9 , const T10 &t10 , const T11 &t11 , const T12 &t12 , const T13 &t13 ) const
Chris@16 336 {
Chris@16 337 t1 = m_alpha1 * t2 + m_alpha2 * t3 + m_alpha3 * t4 + m_alpha4 * t5 + m_alpha5 * t6 + m_alpha6 * t7 + m_alpha7 * t8 + m_alpha8 * t9 + m_alpha9 * t10 + m_alpha10 * t11 + m_alpha11 * t12 + m_alpha12 * t13;
Chris@16 338 }
Chris@16 339
Chris@16 340 typedef void result_type;
Chris@16 341 };
Chris@16 342
Chris@16 343 template< class Fac1 = double , class Fac2 = Fac1 , class Fac3 = Fac2 , class Fac4 = Fac3 , class Fac5 = Fac4 , class Fac6 = Fac5 , class Fac7 = Fac6 , class Fac8 = Fac7 , class Fac9 = Fac8 , class Fac10 = Fac9 , class Fac11 = Fac10 , class Fac12 = Fac11 , class Fac13 = Fac12 >
Chris@16 344 struct scale_sum13
Chris@16 345 {
Chris@16 346 const Fac1 m_alpha1;
Chris@16 347 const Fac2 m_alpha2;
Chris@16 348 const Fac3 m_alpha3;
Chris@16 349 const Fac4 m_alpha4;
Chris@16 350 const Fac5 m_alpha5;
Chris@16 351 const Fac6 m_alpha6;
Chris@16 352 const Fac7 m_alpha7;
Chris@16 353 const Fac8 m_alpha8;
Chris@16 354 const Fac9 m_alpha9;
Chris@16 355 const Fac10 m_alpha10;
Chris@16 356 const Fac11 m_alpha11;
Chris@16 357 const Fac12 m_alpha12;
Chris@16 358 const Fac13 m_alpha13;
Chris@16 359
Chris@16 360 scale_sum13( Fac1 alpha1 , Fac2 alpha2 , Fac3 alpha3 , Fac4 alpha4 ,
Chris@16 361 Fac5 alpha5 , Fac6 alpha6 , Fac7 alpha7 , Fac8 alpha8 , Fac9 alpha9 ,
Chris@16 362 Fac10 alpha10 , Fac11 alpha11 , Fac12 alpha12 , Fac13 alpha13 )
Chris@16 363 : m_alpha1( alpha1 ) , m_alpha2( alpha2 ) , m_alpha3( alpha3 ) , m_alpha4( alpha4 ) , m_alpha5( alpha5 ) , m_alpha6( alpha6 ) , m_alpha7( alpha7 ) , m_alpha8( alpha8 ) , m_alpha9( alpha9 ) , m_alpha10( alpha10 ) , m_alpha11( alpha11 ) , m_alpha12( alpha12 ) , m_alpha13( alpha13 ) { }
Chris@16 364
Chris@16 365 template< class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 >
Chris@16 366 void operator()( T1 &t1 , const T2 &t2 , const T3 &t3 , const T4 &t4 , const T5 &t5 , const T6 &t6 , const T7 &t7 , const T8 &t8 , const T9 &t9 , const T10 &t10 , const T11 &t11 , const T12 &t12 , const T13 &t13 , const T14 &t14 ) const
Chris@16 367 {
Chris@16 368 t1 = m_alpha1 * t2 + m_alpha2 * t3 + m_alpha3 * t4 + m_alpha4 * t5 + m_alpha5 * t6 + m_alpha6 * t7 + m_alpha7 * t8 + m_alpha8 * t9 + m_alpha9 * t10 + m_alpha10 * t11 + m_alpha11 * t12 + m_alpha12 * t13 + m_alpha13 * t14;
Chris@16 369 }
Chris@16 370
Chris@16 371 typedef void result_type;
Chris@16 372 };
Chris@16 373
Chris@16 374 template< class Fac1 = double , class Fac2 = Fac1 , class Fac3 = Fac2 , class Fac4 = Fac3 , class Fac5 = Fac4 , class Fac6 = Fac5 , class Fac7 = Fac6 , class Fac8 = Fac7 , class Fac9 = Fac8 , class Fac10 = Fac9 , class Fac11 = Fac10 , class Fac12 = Fac11 , class Fac13 = Fac12 , class Fac14 = Fac13 >
Chris@16 375 struct scale_sum14
Chris@16 376 {
Chris@16 377 const Fac1 m_alpha1;
Chris@16 378 const Fac2 m_alpha2;
Chris@16 379 const Fac3 m_alpha3;
Chris@16 380 const Fac4 m_alpha4;
Chris@16 381 const Fac5 m_alpha5;
Chris@16 382 const Fac6 m_alpha6;
Chris@16 383 const Fac7 m_alpha7;
Chris@16 384 const Fac8 m_alpha8;
Chris@16 385 const Fac9 m_alpha9;
Chris@16 386 const Fac10 m_alpha10;
Chris@16 387 const Fac11 m_alpha11;
Chris@16 388 const Fac12 m_alpha12;
Chris@16 389 const Fac13 m_alpha13;
Chris@16 390 const Fac14 m_alpha14;
Chris@16 391
Chris@16 392 scale_sum14( Fac1 alpha1 , Fac2 alpha2 , Fac3 alpha3 , Fac4 alpha4 ,
Chris@16 393 Fac5 alpha5 , Fac6 alpha6 , Fac7 alpha7 , Fac8 alpha8 , Fac9 alpha9 ,
Chris@16 394 Fac10 alpha10 , Fac11 alpha11 , Fac12 alpha12 , Fac13 alpha13 , Fac14 alpha14 )
Chris@16 395 : m_alpha1( alpha1 ) , m_alpha2( alpha2 ) , m_alpha3( alpha3 ) , m_alpha4( alpha4 ) , m_alpha5( alpha5 ) , m_alpha6( alpha6 ) , m_alpha7( alpha7 ) , m_alpha8( alpha8 ) , m_alpha9( alpha9 ) , m_alpha10( alpha10 ) , m_alpha11( alpha11 ) , m_alpha12( alpha12 ) , m_alpha13( alpha13 ) , m_alpha14( alpha14 ) { }
Chris@16 396
Chris@16 397 template< class T1 , class T2 , class T3 , class T4 , class T5 , class T6 , class T7 , class T8 , class T9 , class T10 , class T11 , class T12 , class T13 , class T14 , class T15 >
Chris@16 398 void operator()( T1 &t1 , const T2 &t2 , const T3 &t3 , const T4 &t4 , const T5 &t5 , const T6 &t6 , const T7 &t7 , const T8 &t8 , const T9 &t9 , const T10 &t10 , const T11 &t11 , const T12 &t12 , const T13 &t13 , const T14 &t14 , const T15 &t15 ) const
Chris@16 399 {
Chris@16 400 t1 = m_alpha1 * t2 + m_alpha2 * t3 + m_alpha3 * t4 + m_alpha4 * t5 + m_alpha5 * t6 + m_alpha6 * t7 + m_alpha7 * t8 + m_alpha8 * t9 + m_alpha9 * t10 + m_alpha10 * t11 + m_alpha11 * t12 + m_alpha12 * t13 + m_alpha13 * t14 + m_alpha14 * t15;
Chris@16 401 }
Chris@16 402
Chris@16 403 typedef void result_type;
Chris@16 404 };
Chris@16 405
Chris@16 406 template< class Fac1 = double , class Fac2 = Fac1 >
Chris@16 407 struct scale_sum_swap2
Chris@16 408 {
Chris@16 409 const Fac1 m_alpha1;
Chris@16 410 const Fac2 m_alpha2;
Chris@16 411
Chris@16 412 scale_sum_swap2( Fac1 alpha1 , Fac2 alpha2 ) : m_alpha1( alpha1 ) , m_alpha2( alpha2 ) { }
Chris@16 413
Chris@16 414 template< class T1 , class T2 , class T3 >
Chris@16 415 void operator()( T1 &t1 , T2 &t2 , const T3 &t3) const
Chris@16 416 {
Chris@16 417 const T1 tmp( t1 );
Chris@16 418 t1 = m_alpha1 * t2 + m_alpha2 * t3;
Chris@16 419 t2 = tmp;
Chris@16 420 }
Chris@16 421
Chris@16 422 typedef void result_type;
Chris@16 423 };
Chris@16 424
Chris@16 425 /*
Chris@16 426 * for usage in for_each2
Chris@16 427 *
Chris@16 428 * Works with boost::units by eliminating the unit
Chris@16 429 */
Chris@16 430 template< class Fac1 = double >
Chris@16 431 struct rel_error
Chris@16 432 {
Chris@16 433 const Fac1 m_eps_abs , m_eps_rel , m_a_x , m_a_dxdt;
Chris@16 434
Chris@16 435 rel_error( Fac1 eps_abs , Fac1 eps_rel , Fac1 a_x , Fac1 a_dxdt )
Chris@16 436 : m_eps_abs( eps_abs ) , m_eps_rel( eps_rel ) , m_a_x( a_x ) , m_a_dxdt( a_dxdt ) { }
Chris@16 437
Chris@16 438
Chris@16 439 template< class T1 , class T2 , class T3 >
Chris@16 440 void operator()( T3 &t3 , const T1 &t1 , const T2 &t2 ) const
Chris@16 441 {
Chris@16 442 using std::abs;
Chris@16 443 set_unit_value( t3 , abs( get_unit_value( t3 ) ) / ( m_eps_abs + m_eps_rel * ( m_a_x * abs( get_unit_value( t1 ) ) + m_a_dxdt * abs( get_unit_value( t2 ) ) ) ) );
Chris@16 444 }
Chris@16 445
Chris@16 446 typedef void result_type;
Chris@16 447 };
Chris@16 448
Chris@16 449
Chris@16 450 /*
Chris@16 451 * for usage in for_each3
Chris@16 452 *
Chris@16 453 * used in the controller for the rosenbrock4 method
Chris@16 454 *
Chris@16 455 * Works with boost::units by eliminating the unit
Chris@16 456 */
Chris@16 457 template< class Fac1 = double >
Chris@16 458 struct default_rel_error
Chris@16 459 {
Chris@16 460 const Fac1 m_eps_abs , m_eps_rel ;
Chris@16 461
Chris@16 462 default_rel_error( Fac1 eps_abs , Fac1 eps_rel )
Chris@16 463 : m_eps_abs( eps_abs ) , m_eps_rel( eps_rel ) { }
Chris@16 464
Chris@16 465
Chris@16 466 /*
Chris@16 467 * xerr = xerr / ( eps_abs + eps_rel * max( x , x_old ) )
Chris@16 468 */
Chris@16 469 template< class T1 , class T2 , class T3 >
Chris@16 470 void operator()( T3 &t3 , const T1 &t1 , const T2 &t2 ) const
Chris@16 471 {
Chris@16 472 BOOST_USING_STD_MAX();
Chris@16 473 using std::abs;
Chris@16 474 Fac1 x1 = abs( get_unit_value( t1 ) ) , x2 = abs( get_unit_value( t2 ) );
Chris@16 475 set_unit_value( t3 , abs( get_unit_value( t3 ) ) / ( m_eps_abs + m_eps_rel * max BOOST_PREVENT_MACRO_SUBSTITUTION ( x1 , x2 ) ) );
Chris@16 476 }
Chris@16 477
Chris@16 478 typedef void result_type;
Chris@16 479 };
Chris@16 480
Chris@16 481
Chris@16 482
Chris@16 483 /*
Chris@16 484 * for usage in reduce
Chris@16 485 */
Chris@16 486
Chris@16 487 template< class Value >
Chris@16 488 struct maximum
Chris@16 489 {
Chris@16 490 template< class Fac1 , class Fac2 >
Chris@16 491 Value operator()( Fac1 t1 , const Fac2 t2 ) const
Chris@16 492 {
Chris@16 493 using std::abs;
Chris@16 494 Value a1 = abs( get_unit_value( t1 ) ) , a2 = abs( get_unit_value( t2 ) );
Chris@16 495 return ( a1 < a2 ) ? a2 : a1 ;
Chris@16 496 }
Chris@16 497
Chris@16 498 typedef Value result_type;
Chris@16 499 };
Chris@16 500
Chris@16 501
Chris@16 502 template< class Fac1 = double >
Chris@16 503 struct rel_error_max
Chris@16 504 {
Chris@16 505 const Fac1 m_eps_abs , m_eps_rel;
Chris@16 506
Chris@16 507 rel_error_max( Fac1 eps_abs , Fac1 eps_rel )
Chris@16 508 : m_eps_abs( eps_abs ) , m_eps_rel( eps_rel )
Chris@16 509 { }
Chris@16 510
Chris@16 511 template< class Res , class T1 , class T2 , class T3 >
Chris@16 512 Res operator()( Res r , const T1 &x_old , const T2 &x , const T3 &x_err )
Chris@16 513 {
Chris@16 514 BOOST_USING_STD_MAX();
Chris@16 515 using std::abs;
Chris@16 516 Res tmp = abs( get_unit_value( x_err ) ) / ( m_eps_abs + m_eps_rel * max BOOST_PREVENT_MACRO_SUBSTITUTION ( abs( x_old ) , abs( x ) ) );
Chris@16 517 return max BOOST_PREVENT_MACRO_SUBSTITUTION ( r , tmp );
Chris@16 518 }
Chris@16 519 };
Chris@16 520
Chris@16 521
Chris@16 522 template< class Fac1 = double >
Chris@16 523 struct rel_error_max2
Chris@16 524 {
Chris@16 525 const Fac1 m_eps_abs , m_eps_rel , m_a_x , m_a_dxdt;
Chris@16 526
Chris@16 527 rel_error_max2( Fac1 eps_abs , Fac1 eps_rel , Fac1 a_x , Fac1 a_dxdt )
Chris@16 528 : m_eps_abs( eps_abs ) , m_eps_rel( eps_rel ) , m_a_x( a_x ) , m_a_dxdt( a_dxdt )
Chris@16 529 { }
Chris@16 530
Chris@16 531 template< class Res , class T1 , class T2 , class T3 , class T4 >
Chris@16 532 Res operator()( Res r , const T1 &x_old , const T2 &x , const T3 &dxdt_old , const T4 &x_err )
Chris@16 533 {
Chris@16 534 BOOST_USING_STD_MAX();
Chris@16 535 using std::abs;
Chris@16 536 Res tmp = abs( get_unit_value( x_err ) ) /
Chris@16 537 ( m_eps_abs + m_eps_rel * ( m_a_x * abs( get_unit_value( x_old ) ) + m_a_dxdt * abs( get_unit_value( dxdt_old ) ) ) );
Chris@16 538 return max BOOST_PREVENT_MACRO_SUBSTITUTION ( r , tmp );
Chris@16 539 }
Chris@16 540 };
Chris@16 541
Chris@16 542
Chris@16 543
Chris@16 544
Chris@16 545 template< class Fac1 = double >
Chris@16 546 struct rel_error_l2
Chris@16 547 {
Chris@16 548 const Fac1 m_eps_abs , m_eps_rel;
Chris@16 549
Chris@16 550 rel_error_l2( Fac1 eps_abs , Fac1 eps_rel )
Chris@16 551 : m_eps_abs( eps_abs ) , m_eps_rel( eps_rel )
Chris@16 552 { }
Chris@16 553
Chris@16 554 template< class Res , class T1 , class T2 , class T3 >
Chris@16 555 Res operator()( Res r , const T1 &x_old , const T2 &x , const T3 &x_err )
Chris@16 556 {
Chris@16 557 BOOST_USING_STD_MAX();
Chris@16 558 using std::abs;
Chris@16 559 Res tmp = abs( get_unit_value( x_err ) ) / ( m_eps_abs + m_eps_rel * max BOOST_PREVENT_MACRO_SUBSTITUTION ( abs( x_old ) , abs( x ) ) );
Chris@16 560 return r + tmp * tmp;
Chris@16 561 }
Chris@16 562 };
Chris@16 563
Chris@16 564
Chris@16 565
Chris@16 566
Chris@16 567 template< class Fac1 = double >
Chris@16 568 struct rel_error_l2_2
Chris@16 569 {
Chris@16 570 const Fac1 m_eps_abs , m_eps_rel , m_a_x , m_a_dxdt;
Chris@16 571
Chris@16 572 rel_error_l2_2( Fac1 eps_abs , Fac1 eps_rel , Fac1 a_x , Fac1 a_dxdt )
Chris@16 573 : m_eps_abs( eps_abs ) , m_eps_rel( eps_rel ) , m_a_x( a_x ) , m_a_dxdt( a_dxdt )
Chris@16 574 { }
Chris@16 575
Chris@16 576 template< class Res , class T1 , class T2 , class T3 , class T4 >
Chris@16 577 Res operator()( Res r , const T1 &x_old , const T2 &x , const T3 &dxdt_old , const T4 &x_err )
Chris@16 578 {
Chris@16 579 using std::abs;
Chris@16 580 Res tmp = abs( get_unit_value( x_err ) ) /
Chris@16 581 ( m_eps_abs + m_eps_rel * ( m_a_x * abs( get_unit_value( x_old ) ) + m_a_dxdt * abs( get_unit_value( dxdt_old ) ) ) );
Chris@16 582 return r + tmp * tmp;
Chris@16 583 }
Chris@16 584 };
Chris@16 585
Chris@16 586
Chris@16 587
Chris@16 588
Chris@16 589
Chris@16 590
Chris@16 591 };
Chris@16 592
Chris@16 593
Chris@16 594 } // odeint
Chris@16 595 } // numeric
Chris@16 596 } // boost
Chris@16 597
Chris@16 598
Chris@16 599 #endif // BOOST_NUMERIC_ODEINT_ALGEBRA_DEFAULT_OPERATIONS_HPP_INCLUDED