diff options
Diffstat (limited to 'src/boost/libs/numeric/odeint/examples/generation_functions.cpp')
-rw-r--r-- | src/boost/libs/numeric/odeint/examples/generation_functions.cpp | 113 |
1 files changed, 113 insertions, 0 deletions
diff --git a/src/boost/libs/numeric/odeint/examples/generation_functions.cpp b/src/boost/libs/numeric/odeint/examples/generation_functions.cpp new file mode 100644 index 00000000..6baa5f22 --- /dev/null +++ b/src/boost/libs/numeric/odeint/examples/generation_functions.cpp @@ -0,0 +1,113 @@ +/* + libs/numeric/odeint/examples/stochastic_euler.hpp + + Copyright 2012 Karsten Ahnert + Copyright 2012-2013 Mario Mulansky + Copyright 2013 Pascal Germroth + + Stochastic euler stepper example and Ornstein-Uhlenbeck process + + 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) + */ + +#include <boost/array.hpp> + +#include <boost/numeric/odeint.hpp> + +typedef boost::array< double , 1 > state_type; + +using namespace boost::numeric::odeint; + + +//[ generation_functions_own_steppers +class custom_stepper +{ +public: + + typedef double value_type; + // ... +}; + +class custom_controller +{ + // ... +}; + +class custom_dense_output +{ + // ... +}; +//] + + +//[ generation_functions_get_controller +namespace boost { namespace numeric { namespace odeint { + +template<> +struct get_controller< custom_stepper > +{ + typedef custom_controller type; +}; + +} } } +//] + +//[ generation_functions_controller_factory +namespace boost { namespace numeric { namespace odeint { + +template<> +struct controller_factory< custom_stepper , custom_controller > +{ + custom_controller operator()( double abs_tol , double rel_tol , const custom_stepper & ) const + { + return custom_controller(); + } + + custom_controller operator()( double abs_tol , double rel_tol , double max_dt , + const custom_stepper & ) const + { + // version with maximal allowed step size max_dt + return custom_controller(); + } +}; + +} } } +//] + +int main( int argc , char **argv ) +{ + { + typedef runge_kutta_dopri5< state_type > stepper_type; + + /* + //[ generation_functions_syntax_auto + auto stepper1 = make_controlled( 1.0e-6 , 1.0e-6 , stepper_type() ); + // or with max step size limit: + // auto stepper1 = make_controlled( 1.0e-6 , 1.0e-6 , 0.01, stepper_type() ); + + auto stepper2 = make_dense_output( 1.0e-6 , 1.0e-6 , stepper_type() ); + //] + */ + + //[ generation_functions_syntax_result_of + boost::numeric::odeint::result_of::make_controlled< stepper_type >::type stepper3 = make_controlled( 1.0e-6 , 1.0e-6 , stepper_type() ); + (void)stepper3; + boost::numeric::odeint::result_of::make_dense_output< stepper_type >::type stepper4 = make_dense_output( 1.0e-6 , 1.0e-6 , stepper_type() ); + (void)stepper4; + //] + } + + { + /* + //[ generation_functions_example_custom_controller + auto stepper5 = make_controlled( 1.0e-6 , 1.0e-6 , custom_stepper() ); + //] + */ + + boost::numeric::odeint::result_of::make_controlled< custom_stepper >::type stepper5 = make_controlled( 1.0e-6 , 1.0e-6 , custom_stepper() ); + (void)stepper5; + } + return 0; +} |