NuTo
Numerics Tool
EigenOdeintCompatibility.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <boost/numeric/odeint/external/eigen/eigen_resize.hpp>
4 #include <boost/numeric/odeint/external/eigen/eigen_algebra_dispatcher.hpp>
5 
6 namespace Eigen
7 {
8 
9 Eigen::VectorXd operator+(const Eigen::VectorXd& v, double scalar)
10 {
11  return v + Eigen::VectorXd::Constant(v.rows(), scalar);
12 }
13 Eigen::VectorXd operator+(double scalar, const Eigen::VectorXd& v)
14 {
15  return v + Eigen::VectorXd::Constant(v.rows(), scalar);
16 }
17 
18 template <typename D1, typename D2>
19 inline const typename Eigen::CwiseBinaryOp<
20  typename Eigen::internal::scalar_quotient_op<typename Eigen::internal::traits<D1>::Scalar>, const D1, const D2>
21 operator/(const Eigen::MatrixBase<D1>& x1, const Eigen::MatrixBase<D2>& x2)
22 {
23  return x1.cwiseQuotient(x2);
24 }
25 
26 template <typename D>
27 inline const typename Eigen::CwiseUnaryOp<
28  typename Eigen::internal::scalar_abs_op<typename Eigen::internal::traits<D>::Scalar>, const D>
29 abs(const Eigen::MatrixBase<D>& m)
30 {
31  return m.cwiseAbs();
32 }
33 
34 } // end Eigen namespace
35 
36 namespace boost
37 {
38 namespace numeric
39 {
40 namespace odeint
41 {
42 
43 // needed for steppers with error control
44 template <class Derivative>
45 struct vector_space_norm_inf<Eigen::MatrixBase<Derivative>>
46 {
47  typedef double result_type;
48  double operator()(const Eigen::MatrixBase<Derivative>& m) const
49  {
50  return m.template lpNorm<Eigen::Infinity>();
51  }
52 };
53 
54 }
55 }
56 } // end boost::numeric::odeint namespace
Definition: EigenOdeintCompatibility.h:36
Definition: SerializeStreamOut.h:6
double operator()(const Eigen::MatrixBase< Derivative > &m) const
Definition: EigenOdeintCompatibility.h:48
Eigen::VectorXd operator+(const Eigen::VectorXd &v, double scalar)
Definition: EigenOdeintCompatibility.h:9
int v
Definition: Quad2DPatchTest.py:9
const Eigen::CwiseBinaryOp< typename Eigen::internal::scalar_quotient_op< typename Eigen::internal::traits< D1 >::Scalar >, const D1, const D2 > operator/(const Eigen::MatrixBase< D1 > &x1, const Eigen::MatrixBase< D2 > &x2)
Definition: EigenOdeintCompatibility.h:21
const Eigen::CwiseUnaryOp< typename Eigen::internal::scalar_abs_op< typename Eigen::internal::traits< D >::Scalar >, const D > abs(const Eigen::MatrixBase< D > &m)
Definition: EigenOdeintCompatibility.h:29