1 /* 2 [auto_generated] 3 libs/numeric/odeint/test/dummy_steppers.hpp 4 5 [begin_description] 6 Dummy steppers for several tests. 7 [end_description] 8 9 Copyright 2012 Karsten Ahnert 10 Copyright 2012 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_LIBS_NUMERIC_ODEINT_TEST_DUMMY_STEPPER_HPP_INCLUDED 19 #define BOOST_LIBS_NUMERIC_ODEINT_TEST_DUMMY_STEPPER_HPP_INCLUDED 20 21 #include <boost/array.hpp> 22 #include <boost/numeric/odeint/stepper/stepper_categories.hpp> 23 #include <boost/numeric/odeint/stepper/controlled_step_result.hpp> 24 25 namespace boost { 26 namespace numeric { 27 namespace odeint { 28 29 struct dummy_stepper 30 { 31 typedef double value_type; 32 typedef value_type time_type; 33 typedef boost::array< value_type , 1 > state_type; 34 typedef state_type deriv_type; 35 typedef unsigned short order_type; 36 typedef stepper_tag stepper_category; 37 orderboost::numeric::odeint::dummy_stepper38 order_type order( void ) const { return 1; } 39 40 template< class System > do_stepboost::numeric::odeint::dummy_stepper41 void do_step( System sys , state_type &x , time_type t , time_type dt ) const 42 { 43 x[0] += 0.25; 44 } 45 }; 46 47 struct dummy_dense_output_stepper 48 { 49 typedef double value_type; 50 typedef value_type time_type; 51 typedef boost::array< value_type , 1 > state_type; 52 typedef state_type deriv_type; 53 typedef dense_output_stepper_tag stepper_category; 54 initializeboost::numeric::odeint::dummy_dense_output_stepper55 void initialize( const state_type &x0 , time_type t0 , time_type dt0 ) 56 { 57 m_x = x0; 58 m_t = t0; 59 m_dt = dt0; 60 } 61 62 template< class System > do_stepboost::numeric::odeint::dummy_dense_output_stepper63 std::pair< time_type , time_type > do_step( System sys ) 64 { 65 m_x[0] += 0.25; 66 m_t += m_dt; 67 return std::make_pair( m_t - m_dt , m_t ); 68 } 69 calc_stateboost::numeric::odeint::dummy_dense_output_stepper70 void calc_state( time_type t_inter , state_type &x ) const 71 { 72 value_type theta = ( m_t - t_inter ) / m_dt; 73 x[0] = m_x[0] - 0.25 * theta; 74 75 } 76 current_timeboost::numeric::odeint::dummy_dense_output_stepper77 const time_type& current_time( void ) const 78 { 79 return m_t; 80 } 81 current_stateboost::numeric::odeint::dummy_dense_output_stepper82 const state_type& current_state( void ) const 83 { 84 return m_x; 85 } 86 current_time_stepboost::numeric::odeint::dummy_dense_output_stepper87 const time_type& current_time_step( void ) const 88 { 89 return m_dt; 90 } 91 92 state_type m_x; 93 time_type m_t; 94 time_type m_dt; 95 }; 96 97 98 99 struct dummy_controlled_stepper 100 { 101 typedef double value_type; 102 typedef value_type time_type; 103 typedef boost::array< value_type , 1 > state_type; 104 typedef state_type deriv_type; 105 typedef controlled_stepper_tag stepper_category; 106 107 template< class Sys > try_stepboost::numeric::odeint::dummy_controlled_stepper108 controlled_step_result try_step( Sys sys , state_type &x , time_type &t , time_type &dt ) const 109 { 110 x[0] += 0.25; 111 t += dt; 112 return success; 113 } 114 }; 115 116 117 } // odeint 118 } // numeric 119 } // boost 120 121 122 #endif // BOOST_LIBS_NUMERIC_ODEINT_TEST_DUMMY_STEPPER_HPP_INCLUDED 123