• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1  /*
2   [auto_generated]
3   boost/numeric/odeint/algebra/vector_space_algebra.hpp
4  
5   [begin_description]
6   An algebra for types which have vector space semantics, hence types on which the operators +,-,* are well defined.
7   [end_description]
8  
9   Copyright 2010-2012 Karsten Ahnert
10   Copyright 2010-2013 Mario Mulansky
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_ALGEBRA_VECTOR_SPACE_ALGEBRA_HPP_INCLUDED
19  #define BOOST_NUMERIC_ODEINT_ALGEBRA_VECTOR_SPACE_ALGEBRA_HPP_INCLUDED
20  
21  #include <complex>
22  
23  #include <boost/type_traits/remove_reference.hpp>
24  
25  
26  namespace boost {
27  namespace numeric {
28  namespace odeint {
29  
30  /*
31   * This class template has to be overload in order to call vector_space_algebra::norm_inf
32   */
33  template< class State, class Enabler = void > struct vector_space_norm_inf;
34  
35  /*
36   * Example: instantiation for sole doubles and complex
37   */
38  template<>
39  struct vector_space_norm_inf< double >
40  {
41      typedef double result_type;
operator ()boost::numeric::odeint::vector_space_norm_inf42      double operator()( double x ) const
43      {
44          using std::abs;
45          return abs(x);
46      }
47  };
48  
49  template<>
50  struct vector_space_norm_inf< float >
51  {
52      typedef float result_type;
operator ()boost::numeric::odeint::vector_space_norm_inf53      result_type operator()( float x ) const
54      {
55          using std::abs;
56          return abs(x);
57      }
58  };
59  
60  template< typename T >
61  struct vector_space_norm_inf< std::complex<T> >
62  {
63      typedef T result_type;
operator ()boost::numeric::odeint::vector_space_norm_inf64      result_type operator()( std::complex<T> x ) const
65      {
66          using std::abs;
67          return abs( x );
68      }
69  };
70  
71  struct vector_space_algebra
72  {
73      template< class S1 , class Op >
for_each1boost::numeric::odeint::vector_space_algebra74      static void for_each1( S1 &s1 , Op op )
75      {
76          // ToDo : build checks, that the +-*/ operators are well defined
77          op( s1 );
78      }
79  
80      template< class S1 , class S2 , class Op >
for_each2boost::numeric::odeint::vector_space_algebra81      static void for_each2( S1 &s1 , S2 &s2 , Op op )
82      {
83          op( s1 , s2 );
84      }
85  
86      template< class S1 , class S2 , class S3 , class Op >
for_each3boost::numeric::odeint::vector_space_algebra87      static void for_each3( S1 &s1 , S2 &s2 , S3 &s3 , Op op )
88      {
89          op( s1 , s2 , s3 );
90      }
91  
92      template< class S1 , class S2 , class S3 , class S4 , class Op >
for_each4boost::numeric::odeint::vector_space_algebra93      static void for_each4( S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , Op op )
94      {
95          op( s1 , s2 , s3 , s4 );
96      }
97  
98      template< class S1 , class S2 , class S3 , class S4 , class S5 , class Op >
for_each5boost::numeric::odeint::vector_space_algebra99      static void for_each5( S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , Op op )
100      {
101          op( s1 , s2 , s3 , s4 , s5 );
102      }
103  
104      template< class S1 , class S2 , class S3 , class S4 , class S5 , class S6 , class Op >
for_each6boost::numeric::odeint::vector_space_algebra105      static void for_each6( S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , S6 &s6 , Op op )
106      {
107          op( s1 , s2 , s3 , s4 , s5 , s6 );
108      }
109  
110      template< class S1 , class S2 , class S3 , class S4 , class S5 , class S6 ,class S7 , class Op >
for_each7boost::numeric::odeint::vector_space_algebra111      static void for_each7( S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , S6 &s6 , S7 &s7 , Op op )
112      {
113          op( s1 , s2 , s3 , s4 , s5 , s6 , s7 );
114      }
115  
116      template< class S1 , class S2 , class S3 , class S4 , class S5 , class S6 ,class S7 , class S8 , class Op >
for_each8boost::numeric::odeint::vector_space_algebra117      static void for_each8( S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , S6 &s6 , S7 &s7 , S8 &s8 , Op op )
118      {
119          op( s1 , s2 , s3 , s4 , s5 , s6 , s7 , s8 );
120      }
121  
122      template< class S1 , class S2 , class S3 , class S4 , class S5 , class S6 ,class S7 , class S8 , class S9 , class Op >
for_each9boost::numeric::odeint::vector_space_algebra123      static void for_each9( S1 &s1 , S2 &s2 , S3 &s3 , S4 &s4 , S5 &s5 , S6 &s6 , S7 &s7 , S8 &s8 , S9 &s9 , Op op )
124      {
125          op( s1 , s2 , s3 , s4 , s5 , s6 , s7 , s8 , s9 );
126      }
127  
128      template< class S1 , class S2 , class S3 , class S4 , class S5 , class S6 ,class S7 , class S8 , class S9 , class S10 , class Op >
for_each10boost::numeric::odeint::vector_space_algebra129      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 )
130      {
131          op( s1 , s2 , s3 , s4 , s5 , s6 , s7 , s8 , s9 , s10 );
132      }
133  
134      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 >
for_each11boost::numeric::odeint::vector_space_algebra135      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 )
136      {
137          op( s1 , s2 , s3 , s4 , s5 , s6 , s7 , s8 , s9 , s10 , s11 );
138      }
139  
140      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 >
for_each12boost::numeric::odeint::vector_space_algebra141      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 )
142      {
143          op( s1 , s2 , s3 , s4 , s5 , s6 , s7 , s8 , s9 , s10 , s11 , s12 );
144      }
145  
146      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 >
for_each13boost::numeric::odeint::vector_space_algebra147      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 )
148      {
149          op( s1 , s2 , s3 , s4 , s5 , s6 , s7 , s8 , s9 , s10 , s11 , s12 , s13 );
150      }
151  
152      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 >
for_each14boost::numeric::odeint::vector_space_algebra153      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 )
154      {
155          op( s1 , s2 , s3 , s4 , s5 , s6 , s7 , s8 , s9 , s10 , s11 , s12 , s13 , s14 );
156      }
157  
158      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 >
for_each15boost::numeric::odeint::vector_space_algebra159      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 )
160      {
161          op( s1 , s2 , s3 , s4 , s5 , s6 , s7 , s8 , s9 , s10 , s11 , s12 , s13 , s14 , s15 );
162      }
163  
164      template< class S >
norm_infboost::numeric::odeint::vector_space_algebra165      static typename boost::numeric::odeint::vector_space_norm_inf< S >::result_type norm_inf( const S &s )
166      {
167          boost::numeric::odeint::vector_space_norm_inf< S > n;
168          return n( s );
169      }
170  };
171  
172  
173  } // odeint
174  } // numeric
175  } // boost
176  
177  
178  #endif // BOOST_NUMERIC_ODEINT_ALGEBRA_VECTOR_SPACE_ALGEBRA_HPP_INCLUDED
179