| /* |
| [auto_generated] |
| libs/numeric/odeint/test/dummy_steppers.hpp |
| |
| [begin_description] |
| Dummy steppers for several tests. |
| [end_description] |
| |
| Copyright 2012 Karsten Ahnert |
| Copyright 2012 Mario Mulansky |
| |
| Distributed under the Boost Software License, Version 1.0. |
| (See accompanying file LICENSE_1_0.txt or |
| copy at http://www.boost.org/LICENSE_1_0.txt) |
| */ |
| |
| |
| #ifndef BOOST_LIBS_NUMERIC_ODEINT_TEST_DUMMY_STEPPER_HPP_INCLUDED |
| #define BOOST_LIBS_NUMERIC_ODEINT_TEST_DUMMY_STEPPER_HPP_INCLUDED |
| |
| #include <boost/array.hpp> |
| #include <boost/numeric/odeint/stepper/stepper_categories.hpp> |
| #include <boost/numeric/odeint/stepper/controlled_step_result.hpp> |
| |
| namespace boost { |
| namespace numeric { |
| namespace odeint { |
| |
| struct dummy_stepper |
| { |
| typedef double value_type; |
| typedef value_type time_type; |
| typedef boost::array< value_type , 1 > state_type; |
| typedef state_type deriv_type; |
| typedef unsigned short order_type; |
| typedef stepper_tag stepper_category; |
| |
| order_type order( void ) const { return 1; } |
| |
| template< class System > |
| void do_step( System sys , state_type &x , time_type t , time_type dt ) const |
| { |
| x[0] += 0.25; |
| } |
| }; |
| |
| struct dummy_dense_output_stepper |
| { |
| typedef double value_type; |
| typedef value_type time_type; |
| typedef boost::array< value_type , 1 > state_type; |
| typedef state_type deriv_type; |
| typedef dense_output_stepper_tag stepper_category; |
| |
| void initialize( const state_type &x0 , time_type t0 , time_type dt0 ) |
| { |
| m_x = x0; |
| m_t = t0; |
| m_dt = dt0; |
| } |
| |
| template< class System > |
| std::pair< time_type , time_type > do_step( System sys ) |
| { |
| m_x[0] += 0.25; |
| m_t += m_dt; |
| return std::make_pair( m_t - m_dt , m_t ); |
| } |
| |
| void calc_state( time_type t_inter , state_type &x ) const |
| { |
| value_type theta = ( m_t - t_inter ) / m_dt; |
| x[0] = m_x[0] - 0.25 * theta; |
| |
| } |
| |
| const time_type& current_time( void ) const |
| { |
| return m_t; |
| } |
| |
| const state_type& current_state( void ) const |
| { |
| return m_x; |
| } |
| |
| const time_type& current_time_step( void ) const |
| { |
| return m_dt; |
| } |
| |
| state_type m_x; |
| time_type m_t; |
| time_type m_dt; |
| }; |
| |
| |
| |
| struct dummy_controlled_stepper |
| { |
| typedef double value_type; |
| typedef value_type time_type; |
| typedef boost::array< value_type , 1 > state_type; |
| typedef state_type deriv_type; |
| typedef controlled_stepper_tag stepper_category; |
| |
| template< class Sys > |
| controlled_step_result try_step( Sys sys , state_type &x , time_type &t , time_type &dt ) const |
| { |
| x[0] += 0.25; |
| t += dt; |
| return success; |
| } |
| }; |
| |
| |
| } // odeint |
| } // numeric |
| } // boost |
| |
| |
| #endif // BOOST_LIBS_NUMERIC_ODEINT_TEST_DUMMY_STEPPER_HPP_INCLUDED |