mtl4_algebra_dispatcher.hpp 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. /*
  2. [auto_generated]
  3. boost/numeric/odeint/external/mtl4/mtl4_algebra_dispatcher.hpp
  4. [begin_description]
  5. specialization of the algebra dispatcher for mtl4
  6. [end_description]
  7. Copyright 2013 Karsten Ahnert
  8. Copyright 2013 Mario Mulansky
  9. Distributed under the Boost Software License, Version 1.0.
  10. (See accompanying file LICENSE_1_0.txt or
  11. copy at http://www.boost.org/LICENSE_1_0.txt)
  12. */
  13. #ifndef BOOST_NUMERIC_ODEINT_MTL4_MTL4_ALGEBRA_DISPATCHER_HPP_INCLUDED
  14. #define BOOST_NUMERIC_ODEINT_MTL4_MTL4_ALGEBRA_DISPATCHER_HPP_INCLUDED
  15. #include <boost/numeric/mtl/mtl.hpp>
  16. #include <boost/numeric/odeint/algebra/vector_space_algebra.hpp>
  17. #include <boost/numeric/odeint/algebra/algebra_dispatcher.hpp>
  18. namespace boost {
  19. namespace numeric {
  20. namespace odeint {
  21. template<typename Value, typename Parameters>
  22. struct algebra_dispatcher< mtl::dense_vector< Value , Parameters > >
  23. {
  24. typedef vector_space_algebra algebra_type;
  25. };
  26. template<typename Value, typename Parameters>
  27. struct algebra_dispatcher< mtl::dense2D< Value , Parameters > >
  28. {
  29. typedef vector_space_algebra algebra_type;
  30. };
  31. template<typename Value , size_t BitMask , typename Parameters>
  32. struct algebra_dispatcher< mtl::morton_dense< Value , BitMask, Parameters > >
  33. {
  34. typedef vector_space_algebra algebra_type;
  35. };
  36. template<typename Value, typename Parameters>
  37. struct algebra_dispatcher< mtl::compressed2D< Value , Parameters > >
  38. {
  39. typedef vector_space_algebra algebra_type;
  40. };
  41. // specialization of infinity norm calculation
  42. template<typename Value, typename Parameters>
  43. struct vector_space_norm_inf< mtl::dense_vector< Value , Parameters > >
  44. {
  45. typedef Value result_type;
  46. Value operator()( const mtl::dense_vector< Value , Parameters > &x ) const
  47. {
  48. return mtl::infinity_norm(x);
  49. }
  50. };
  51. template<typename Value, typename Parameters>
  52. struct vector_space_norm_inf< mtl::dense2D< Value , Parameters > >
  53. {
  54. typedef Value result_type;
  55. Value operator()( const mtl::dense2D< Value , Parameters > &x ) const
  56. {
  57. return mtl::infinity_norm(x);
  58. }
  59. };
  60. template<typename Value , size_t BitMask , typename Parameters>
  61. struct vector_space_norm_inf< mtl::morton_dense< Value , BitMask , Parameters > >
  62. {
  63. typedef Value result_type;
  64. Value operator()( const mtl::morton_dense< Value , BitMask , Parameters > &x ) const
  65. {
  66. return mtl::infinity_norm(x);
  67. }
  68. };
  69. template<typename Value, typename Parameters>
  70. struct vector_space_norm_inf< mtl::compressed2D< Value , Parameters > >
  71. {
  72. typedef Value result_type;
  73. Value operator()( const mtl::compressed2D< Value , Parameters > &x ) const
  74. {
  75. return mtl::infinity_norm(x);
  76. }
  77. };
  78. }
  79. }
  80. }
  81. #endif // BOOST_NUMERIC_ODEINT_MTL4_MTL4_ALGEBRA_DISPATCHER_INCLUDED