Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-07-05 08:40:05

0001 /*
0002  [auto_generated]
0003  boost/numeric/odeint/algebra/vector_space_algebra.hpp
0004 
0005  [begin_description]
0006  An algebra for types which have vector space semantics, hence types on which the operators +,-,* are well defined.
0007  [end_description]
0008 
0009  Copyright 2010-2012 Karsten Ahnert
0010  Copyright 2010-2013 Mario Mulansky
0011 
0012  Distributed under the Boost Software License, Version 1.0.
0013  (See accompanying file LICENSE_1_0.txt or
0014  copy at http://www.boost.org/LICENSE_1_0.txt)
0015  */
0016 
0017 
0018 #ifndef BOOST_NUMERIC_ODEINT_ALGEBRA_VECTOR_SPACE_ALGEBRA_HPP_INCLUDED
0019 #define BOOST_NUMERIC_ODEINT_ALGEBRA_VECTOR_SPACE_ALGEBRA_HPP_INCLUDED
0020 
0021 #include <complex>
0022 
0023 namespace boost {
0024 namespace numeric {
0025 namespace odeint {
0026 
0027 /*
0028  * This class template has to be overload in order to call vector_space_algebra::norm_inf
0029  */
0030 template< class State, class Enabler = void > struct vector_space_norm_inf;
0031 
0032 /*
0033  * Example: instantiation for sole doubles and complex
0034  */
0035 template<>
0036 struct vector_space_norm_inf< double >
0037 {
0038     typedef double result_type;
0039     double operator()( double x ) const
0040     {
0041         using std::abs;
0042         return abs(x);
0043     }
0044 };
0045 
0046 template<>
0047 struct vector_space_norm_inf< float >
0048 {
0049     typedef float result_type;
0050     result_type operator()( float x ) const
0051     {
0052         using std::abs;
0053         return abs(x);
0054     }
0055 };
0056 
0057 template< typename T >
0058 struct vector_space_norm_inf< std::complex<T> >
0059 {
0060     typedef T result_type;
0061     result_type operator()( std::complex<T> x ) const
0062     {
0063         using std::abs;
0064         return abs( x );
0065     }
0066 };
0067 
0068 struct vector_space_algebra
0069 {
0070     template< class S1 , class Op >
0071     static void for_each1( S1 &s1 , Op op )
0072     {
0073         // ToDo : build checks, that the +-*/ operators are well defined
0074         op( s1 );
0075     }
0076 
0077     template< class S1 , class S2 , class Op >
0078     static void for_each2( S1 &s1 , S2 &s2 , Op op )
0079     {
0080         op( s1 , s2 );
0081     }
0082 
0083     template< class S1 , class S2 , class S3 , class Op >
0084     static void for_each3( S1 &s1 , S2 &s2 , S3 &s3 , Op op )
0085     {
0086         op( s1 , s2 , s3 );
0087     }
0088 
0089     template< class S1 , class S2 , class S3 , class S4 , class Op >
0090     static void for_each4( S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , Op op )
0091     {
0092         op( s1 , s2 , s3 , s4 );
0093     }
0094 
0095     template< class S1 , class S2 , class S3 , class S4 , class S5 , class Op >
0096     static void for_each5( S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , Op op )
0097     {
0098         op( s1 , s2 , s3 , s4 , s5 );
0099     }
0100 
0101     template< class S1 , class S2 , class S3 , class S4 , class S5 , class S6 , class Op >
0102     static void for_each6( S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , S6 &s6 , Op op )
0103     {
0104         op( s1 , s2 , s3 , s4 , s5 , s6 );
0105     }
0106 
0107     template< class S1 , class S2 , class S3 , class S4 , class S5 , class S6 ,class S7 , class Op >
0108     static void for_each7( S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , S6 &s6 , S7 &s7 , Op op )
0109     {
0110         op( s1 , s2 , s3 , s4 , s5 , s6 , s7 );
0111     }
0112 
0113     template< class S1 , class S2 , class S3 , class S4 , class S5 , class S6 ,class S7 , class S8 , class Op >
0114     static void for_each8( S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , S6 &s6 , S7 &s7 , S8 &s8 , Op op )
0115     {
0116         op( s1 , s2 , s3 , s4 , s5 , s6 , s7 , s8 );
0117     }
0118 
0119     template< class S1 , class S2 , class S3 , class S4 , class S5 , class S6 ,class S7 , class S8 , class S9 , class Op >
0120     static void for_each9( S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , S6 &s6 , S7 &s7 , S8 &s8 , S9 &s9 , Op op )
0121     {
0122         op( s1 , s2 , s3 , s4 , s5 , s6 , s7 , s8 , s9 );
0123     }
0124 
0125     template< class S1 , class S2 , class S3 , class S4 , class S5 , class S6 ,class S7 , class S8 , class S9 , class S10 , class Op >
0126     static void for_each10( S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , S6 &s6 , S7 &s7 , S8 &s8 , S9 &s9 , S10 &s10 , Op op )
0127     {
0128         op( s1 , s2 , s3 , s4 , s5 , s6 , s7 , s8 , s9 , s10 );
0129     }
0130 
0131     template< class S1 , class S2 , class S3 , class S4 , class S5 , class S6 ,class S7 , class S8 , class S9 , class S10 , class S11 , class Op >
0132     static void for_each11( S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , S6 &s6 , S7 &s7 , S8 &s8 , S9 &s9 , S10 &s10 , S11 &s11 , Op op )
0133     {
0134         op( s1 , s2 , s3 , s4 , s5 , s6 , s7 , s8 , s9 , s10 , s11 );
0135     }
0136 
0137     template< class S1 , class S2 , class S3 , class S4 , class S5 , class S6 ,class S7 , class S8 , class S9 , class S10 , class S11 , class S12 , class Op >
0138     static void for_each12( S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , S6 &s6 , S7 &s7 , S8 &s8 , S9 &s9 , S10 &s10 , S11 &s11 , S12 &s12 , Op op )
0139     {
0140         op( s1 , s2 , s3 , s4 , s5 , s6 , s7 , s8 , s9 , s10 , s11 , s12 );
0141     }
0142 
0143     template< class S1 , class S2 , class S3 , class S4 , class S5 , class S6 ,class S7 , class S8 , class S9 , class S10 , class S11 , class S12 , class S13 , class Op >
0144     static void for_each13( S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , S6 &s6 , S7 &s7 , S8 &s8 , S9 &s9 , S10 &s10 , S11 &s11 , S12 &s12 , S13 &s13 , Op op )
0145     {
0146         op( s1 , s2 , s3 , s4 , s5 , s6 , s7 , s8 , s9 , s10 , s11 , s12 , s13 );
0147     }
0148 
0149     template< class S1 , class S2 , class S3 , class S4 , class S5 , class S6 ,class S7 , class S8 , class S9 , class S10 , class S11 , class S12 , class S13 , class S14 , class Op >
0150     static void for_each14( S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , S6 &s6 , S7 &s7 , S8 &s8 , S9 &s9 , S10 &s10 , S11 &s11 , S12 &s12 , S13 &s13 , S14 &s14 , Op op )
0151     {
0152         op( s1 , s2 , s3 , s4 , s5 , s6 , s7 , s8 , s9 , s10 , s11 , s12 , s13 , s14 );
0153     }
0154 
0155     template< class S1 , class S2 , class S3 , class S4 , class S5 , class S6 ,class S7 , class S8 , class S9 , class S10 , class S11 , class S12 , class S13 , class S14 , class S15 , class Op >
0156     static void for_each15( S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , S6 &s6 , S7 &s7 , S8 &s8 , S9 &s9 , S10 &s10 , S11 &s11 , S12 &s12 , S13 &s13 , S14 &s14 , S15 &s15 , Op op )
0157     {
0158         op( s1 , s2 , s3 , s4 , s5 , s6 , s7 , s8 , s9 , s10 , s11 , s12 , s13 , s14 , s15 );
0159     }
0160 
0161     template< class S >
0162     static typename boost::numeric::odeint::vector_space_norm_inf< S >::result_type norm_inf( const S &s )
0163     {
0164         boost::numeric::odeint::vector_space_norm_inf< S > n;
0165         return n( s );
0166     }
0167 };
0168 
0169 
0170 } // odeint
0171 } // numeric
0172 } // boost
0173 
0174 
0175 #endif // BOOST_NUMERIC_ODEINT_ALGEBRA_VECTOR_SPACE_ALGEBRA_HPP_INCLUDED