Chris@102
|
1 /*
|
Chris@102
|
2 [auto_generated]
|
Chris@102
|
3 boost/numeric/odeint/external/eigen/eigen_algebra.hpp
|
Chris@102
|
4
|
Chris@102
|
5 [begin_description]
|
Chris@102
|
6 tba.
|
Chris@102
|
7 [end_description]
|
Chris@102
|
8
|
Chris@102
|
9 Copyright 2013 Christian Shelton
|
Chris@102
|
10 Copyright 2013 Karsten Ahnert
|
Chris@102
|
11
|
Chris@102
|
12 Distributed under the Boost Software License, Version 1.0.
|
Chris@102
|
13 (See accompanying file LICENSE_1_0.txt or
|
Chris@102
|
14 copy at http://www.boost.org/LICENSE_1_0.txt)
|
Chris@102
|
15 */
|
Chris@102
|
16
|
Chris@102
|
17
|
Chris@102
|
18 #ifndef BOOST_NUMERIC_ODEINT_EXTERNAL_EIGEN_EIGEN_ALGEBRA_HPP_INCLUDED
|
Chris@102
|
19 #define BOOST_NUMERIC_ODEINT_EXTERNAL_EIGEN_EIGEN_ALGEBRA_HPP_INCLUDED
|
Chris@102
|
20
|
Chris@102
|
21 #include <Eigen/Dense>
|
Chris@102
|
22 #include <boost/numeric/odeint/algebra/vector_space_algebra.hpp>
|
Chris@102
|
23
|
Chris@102
|
24 // Necessary routines for Eigen matrices to work with vector_space_algebra
|
Chris@102
|
25 // from odeint
|
Chris@102
|
26 // (that is, it lets odeint treat the eigen matrices correctly, knowing
|
Chris@102
|
27 // how to add, multiply, compute the norm, etc)
|
Chris@102
|
28
|
Chris@102
|
29 namespace Eigen {
|
Chris@102
|
30
|
Chris@102
|
31
|
Chris@102
|
32 template<typename D>
|
Chris@102
|
33 inline const
|
Chris@102
|
34 typename Eigen::CwiseUnaryOp<
|
Chris@102
|
35 typename Eigen::internal::scalar_add_op<
|
Chris@102
|
36 typename Eigen::internal::traits<D>::Scalar>,
|
Chris@102
|
37 const D >
|
Chris@102
|
38 operator+(const typename Eigen::MatrixBase<D> &m,
|
Chris@102
|
39 const typename Eigen::internal::traits<D>::Scalar &s) {
|
Chris@102
|
40 return Eigen::CwiseUnaryOp<
|
Chris@102
|
41 typename Eigen::internal::scalar_add_op<
|
Chris@102
|
42 typename Eigen::internal::traits<D>::Scalar>,
|
Chris@102
|
43 const D >(m.derived(),Eigen::internal::scalar_add_op<
|
Chris@102
|
44 typename Eigen::internal::traits<D>::Scalar>(s));
|
Chris@102
|
45 }
|
Chris@102
|
46
|
Chris@102
|
47 template<typename D>
|
Chris@102
|
48 inline const
|
Chris@102
|
49 typename Eigen::CwiseUnaryOp<
|
Chris@102
|
50 typename Eigen::internal::scalar_add_op<
|
Chris@102
|
51 typename Eigen::internal::traits<D>::Scalar>,
|
Chris@102
|
52 const D >
|
Chris@102
|
53 operator+(const typename Eigen::internal::traits<D>::Scalar &s,
|
Chris@102
|
54 const typename Eigen::MatrixBase<D> &m) {
|
Chris@102
|
55 return Eigen::CwiseUnaryOp<
|
Chris@102
|
56 typename Eigen::internal::scalar_add_op<
|
Chris@102
|
57 typename Eigen::internal::traits<D>::Scalar>,
|
Chris@102
|
58 const D >(m.derived(),Eigen::internal::scalar_add_op<
|
Chris@102
|
59 typename Eigen::internal::traits<D>::Scalar>(s));
|
Chris@102
|
60 }
|
Chris@102
|
61
|
Chris@102
|
62
|
Chris@102
|
63
|
Chris@102
|
64 template<typename D1,typename D2>
|
Chris@102
|
65 inline const
|
Chris@102
|
66 typename Eigen::CwiseBinaryOp<
|
Chris@102
|
67 typename Eigen::internal::scalar_quotient_op<
|
Chris@102
|
68 typename Eigen::internal::traits<D1>::Scalar>,
|
Chris@102
|
69 const D1, const D2>
|
Chris@102
|
70 operator/(const Eigen::MatrixBase<D1> &x1, const Eigen::MatrixBase<D2> &x2) {
|
Chris@102
|
71 return x1.cwiseQuotient(x2);
|
Chris@102
|
72 }
|
Chris@102
|
73
|
Chris@102
|
74
|
Chris@102
|
75 template< typename D >
|
Chris@102
|
76 inline const
|
Chris@102
|
77 typename Eigen::CwiseUnaryOp<
|
Chris@102
|
78 typename Eigen::internal::scalar_abs_op<
|
Chris@102
|
79 typename Eigen::internal::traits< D >::Scalar > ,
|
Chris@102
|
80 const D >
|
Chris@102
|
81 abs( const Eigen::MatrixBase< D > &m ) {
|
Chris@102
|
82 return m.cwiseAbs();
|
Chris@102
|
83 }
|
Chris@102
|
84
|
Chris@102
|
85
|
Chris@102
|
86
|
Chris@102
|
87 } // end Eigen namespace
|
Chris@102
|
88
|
Chris@102
|
89
|
Chris@102
|
90
|
Chris@102
|
91
|
Chris@102
|
92
|
Chris@102
|
93 namespace boost {
|
Chris@102
|
94 namespace numeric {
|
Chris@102
|
95 namespace odeint {
|
Chris@102
|
96
|
Chris@102
|
97 template<typename B,int S1,int S2,int O, int M1, int M2>
|
Chris@102
|
98 struct vector_space_norm_inf< Eigen::Matrix<B,S1,S2,O,M1,M2> >
|
Chris@102
|
99 {
|
Chris@102
|
100 typedef B result_type;
|
Chris@102
|
101 result_type operator()( const Eigen::Matrix<B,S1,S2,O,M1,M2> &m ) const
|
Chris@102
|
102 {
|
Chris@102
|
103 return m.template lpNorm<Eigen::Infinity>();
|
Chris@102
|
104 }
|
Chris@102
|
105 };
|
Chris@102
|
106
|
Chris@102
|
107 } } } // end boost::numeric::odeint namespace
|
Chris@102
|
108
|
Chris@102
|
109 #endif // BOOST_NUMERIC_ODEINT_EXTERNAL_EIGEN_EIGEN_ALGEBRA_HPP_INCLUDED
|