make_controlled.hpp 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. /*
  2. [auto_generated]
  3. boost/numeric/odeint/stepper/generation/make_controlled.hpp
  4. [begin_description]
  5. Factory function to simplify the creation of controlled steppers from error steppers.
  6. [end_description]
  7. Copyright 2011-2012 Karsten Ahnert
  8. Copyright 2011-2012 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_STEPPER_GENERATION_MAKE_CONTROLLED_HPP_INCLUDED
  14. #define BOOST_NUMERIC_ODEINT_STEPPER_GENERATION_MAKE_CONTROLLED_HPP_INCLUDED
  15. namespace boost {
  16. namespace numeric {
  17. namespace odeint {
  18. // default template for the controller
  19. template< class Stepper > struct get_controller { };
  20. // default controller factory
  21. template< class Stepper , class Controller >
  22. struct controller_factory
  23. {
  24. Controller operator()(
  25. typename Stepper::value_type abs_error ,
  26. typename Stepper::value_type rel_error ,
  27. const Stepper &stepper )
  28. {
  29. return Controller( abs_error , rel_error , stepper );
  30. }
  31. Controller operator()(
  32. typename Stepper::value_type abs_error ,
  33. typename Stepper::value_type rel_error ,
  34. typename Stepper::time_type max_dt ,
  35. const Stepper &stepper )
  36. {
  37. return Controller( abs_error , rel_error , max_dt, stepper );
  38. }
  39. };
  40. namespace result_of
  41. {
  42. template< class Stepper >
  43. struct make_controlled
  44. {
  45. typedef typename get_controller< Stepper >::type type;
  46. };
  47. }
  48. template< class Stepper >
  49. typename result_of::make_controlled< Stepper >::type make_controlled(
  50. typename Stepper::value_type abs_error ,
  51. typename Stepper::value_type rel_error ,
  52. const Stepper & stepper = Stepper() )
  53. {
  54. typedef Stepper stepper_type;
  55. typedef typename result_of::make_controlled< stepper_type >::type controller_type;
  56. typedef controller_factory< stepper_type , controller_type > factory_type;
  57. factory_type factory;
  58. return factory( abs_error , rel_error , stepper );
  59. }
  60. template< class Stepper >
  61. typename result_of::make_controlled< Stepper >::type make_controlled(
  62. typename Stepper::value_type abs_error ,
  63. typename Stepper::value_type rel_error ,
  64. typename Stepper::time_type max_dt ,
  65. const Stepper & stepper = Stepper() )
  66. {
  67. typedef Stepper stepper_type;
  68. typedef typename result_of::make_controlled< stepper_type >::type controller_type;
  69. typedef controller_factory< stepper_type , controller_type > factory_type;
  70. factory_type factory;
  71. return factory( abs_error , rel_error , max_dt, stepper );
  72. }
  73. } // odeint
  74. } // numeric
  75. } // boost
  76. #endif // BOOST_NUMERIC_ODEINT_STEPPER_GENERATION_MAKE_CONTROLLED_HPP_INCLUDED