From 714b0ddd878192a8a913c5a9c51ce7e4567abcc6 Mon Sep 17 00:00:00 2001 From: Markus Friedrich Date: Thu, 28 Dec 2017 11:32:39 +0100 Subject: [PATCH 1/2] Added new typedef system_category to all steppers. This new typedef must be one of - explicit_system_tag - second_order_system_tag - symplectic_system_tag - simple_symplectic_system_tag - symplectic_or_simple_symplectic_system_tag - implicit_system_tag and defines the type of the system the stepper handles. This can be usefull to automatically provide a proper system to a stepper using template spezialization. --- .../odeint/stepper/adams_bashforth.hpp | 2 + .../stepper/adams_bashforth_moulton.hpp | 2 + .../numeric/odeint/stepper/bulirsch_stoer.hpp | 2 + .../stepper/bulirsch_stoer_dense_out.hpp | 2 + .../odeint/stepper/controlled_runge_kutta.hpp | 2 + .../stepper/dense_output_runge_kutta.hpp | 2 + .../boost/numeric/odeint/stepper/euler.hpp | 2 + .../numeric/odeint/stepper/implicit_euler.hpp | 2 + .../odeint/stepper/modified_midpoint.hpp | 2 + .../numeric/odeint/stepper/rosenbrock4.hpp | 2 + .../odeint/stepper/rosenbrock4_controller.hpp | 2 + .../stepper/rosenbrock4_dense_output.hpp | 2 + .../numeric/odeint/stepper/runge_kutta4.hpp | 2 + .../odeint/stepper/runge_kutta4_classic.hpp | 2 + .../stepper/runge_kutta_cash_karp54.hpp | 2 + .../runge_kutta_cash_karp54_classic.hpp | 2 + .../odeint/stepper/runge_kutta_dopri5.hpp | 2 + .../odeint/stepper/runge_kutta_fehlberg78.hpp | 2 + .../odeint/stepper/symplectic_euler.hpp | 2 + .../symplectic_rkn_sb3a_m4_mclachlan.hpp | 2 + .../stepper/symplectic_rkn_sb3a_mclachlan.hpp | 2 + .../odeint/stepper/system_categories.hpp | 44 +++++++++++++++++++ .../odeint/stepper/velocity_verlet.hpp | 2 + 23 files changed, 88 insertions(+) create mode 100644 include/boost/numeric/odeint/stepper/system_categories.hpp diff --git a/include/boost/numeric/odeint/stepper/adams_bashforth.hpp b/include/boost/numeric/odeint/stepper/adams_bashforth.hpp index 5ff1e835..146ea5ac 100644 --- a/include/boost/numeric/odeint/stepper/adams_bashforth.hpp +++ b/include/boost/numeric/odeint/stepper/adams_bashforth.hpp @@ -36,6 +36,7 @@ #include #include +#include #include #include @@ -99,6 +100,7 @@ public : typedef Time time_type; typedef Resizer resizer_type; typedef stepper_tag stepper_category; + typedef explicit_system_tag system_category; typedef InitializingStepper initializing_stepper_type; diff --git a/include/boost/numeric/odeint/stepper/adams_bashforth_moulton.hpp b/include/boost/numeric/odeint/stepper/adams_bashforth_moulton.hpp index f3edce19..13cfe019 100644 --- a/include/boost/numeric/odeint/stepper/adams_bashforth_moulton.hpp +++ b/include/boost/numeric/odeint/stepper/adams_bashforth_moulton.hpp @@ -23,6 +23,7 @@ #include #include +#include #include #include #include @@ -73,6 +74,7 @@ public : typedef Resizer resizer_type; typedef stepper_tag stepper_category; typedef InitializingStepper initializing_stepper_type; + typedef explicit_system_tag system_category; static const size_t steps = Steps; #ifndef DOXYGEN_SKIP diff --git a/include/boost/numeric/odeint/stepper/bulirsch_stoer.hpp b/include/boost/numeric/odeint/stepper/bulirsch_stoer.hpp index 02c37492..0e656c74 100644 --- a/include/boost/numeric/odeint/stepper/bulirsch_stoer.hpp +++ b/include/boost/numeric/odeint/stepper/bulirsch_stoer.hpp @@ -35,6 +35,7 @@ #include #include #include +#include #include #include #include @@ -70,6 +71,7 @@ class bulirsch_stoer { typedef Algebra algebra_type; typedef Operations operations_type; typedef Resizer resizer_type; + typedef explicit_system_tag system_category; #ifndef DOXYGEN_SKIP typedef state_wrapper< state_type > wrapped_state_type; typedef state_wrapper< deriv_type > wrapped_deriv_type; diff --git a/include/boost/numeric/odeint/stepper/bulirsch_stoer_dense_out.hpp b/include/boost/numeric/odeint/stepper/bulirsch_stoer_dense_out.hpp index 6a1eed15..261975e9 100644 --- a/include/boost/numeric/odeint/stepper/bulirsch_stoer_dense_out.hpp +++ b/include/boost/numeric/odeint/stepper/bulirsch_stoer_dense_out.hpp @@ -33,6 +33,7 @@ #include #include #include +#include #include #include #include @@ -74,6 +75,7 @@ class bulirsch_stoer_dense_out { typedef Operations operations_type; typedef Resizer resizer_type; typedef dense_output_stepper_tag stepper_category; + typedef explicit_system_tag system_category; #ifndef DOXYGEN_SKIP typedef state_wrapper< state_type > wrapped_state_type; typedef state_wrapper< deriv_type > wrapped_deriv_type; diff --git a/include/boost/numeric/odeint/stepper/controlled_runge_kutta.hpp b/include/boost/numeric/odeint/stepper/controlled_runge_kutta.hpp index aac2b02d..e876a007 100644 --- a/include/boost/numeric/odeint/stepper/controlled_runge_kutta.hpp +++ b/include/boost/numeric/odeint/stepper/controlled_runge_kutta.hpp @@ -41,6 +41,7 @@ #include #include +#include namespace boost { namespace numeric { @@ -229,6 +230,7 @@ class controlled_runge_kutta< ErrorStepper , ErrorChecker , StepAdjuster, Resize typedef ErrorChecker error_checker_type; typedef StepAdjuster step_adjuster_type; typedef explicit_controlled_stepper_tag stepper_category; + typedef explicit_system_tag system_category; #ifndef DOXYGEN_SKIP typedef typename stepper_type::wrapped_state_type wrapped_state_type; diff --git a/include/boost/numeric/odeint/stepper/dense_output_runge_kutta.hpp b/include/boost/numeric/odeint/stepper/dense_output_runge_kutta.hpp index 94abc5af..3531d2de 100644 --- a/include/boost/numeric/odeint/stepper/dense_output_runge_kutta.hpp +++ b/include/boost/numeric/odeint/stepper/dense_output_runge_kutta.hpp @@ -36,6 +36,7 @@ #include #include +#include #include @@ -81,6 +82,7 @@ class dense_output_runge_kutta< Stepper , stepper_tag > typedef typename stepper_type::resizer_type resizer_type; typedef dense_output_stepper_tag stepper_category; typedef dense_output_runge_kutta< Stepper > dense_output_stepper_type; + typedef explicit_system_tag system_category; /** diff --git a/include/boost/numeric/odeint/stepper/euler.hpp b/include/boost/numeric/odeint/stepper/euler.hpp index 1c7c126b..da7902a2 100644 --- a/include/boost/numeric/odeint/stepper/euler.hpp +++ b/include/boost/numeric/odeint/stepper/euler.hpp @@ -21,6 +21,7 @@ #include +#include #include #include #include @@ -64,6 +65,7 @@ public : typedef typename stepper_base_type::algebra_type algebra_type; typedef typename stepper_base_type::operations_type operations_type; typedef typename stepper_base_type::resizer_type resizer_type; + typedef explicit_system_tag system_category; #ifndef DOXYGEN_SKIP typedef typename stepper_base_type::stepper_type stepper_type; diff --git a/include/boost/numeric/odeint/stepper/implicit_euler.hpp b/include/boost/numeric/odeint/stepper/implicit_euler.hpp index f3019889..0ea3b6b1 100644 --- a/include/boost/numeric/odeint/stepper/implicit_euler.hpp +++ b/include/boost/numeric/odeint/stepper/implicit_euler.hpp @@ -25,6 +25,7 @@ #include #include #include +#include #include #include @@ -64,6 +65,7 @@ class implicit_euler typedef Resizer resizer_type; typedef stepper_tag stepper_category; typedef implicit_euler< ValueType , Resizer > stepper_type; + typedef implicit_system_tag system_category; implicit_euler( value_type epsilon = 1E-6 ) : m_epsilon( epsilon ) diff --git a/include/boost/numeric/odeint/stepper/modified_midpoint.hpp b/include/boost/numeric/odeint/stepper/modified_midpoint.hpp index 9e34c7da..76e2cb26 100644 --- a/include/boost/numeric/odeint/stepper/modified_midpoint.hpp +++ b/include/boost/numeric/odeint/stepper/modified_midpoint.hpp @@ -22,6 +22,7 @@ #include #include +#include #include #include #include @@ -69,6 +70,7 @@ public : typedef typename stepper_base_type::operations_type operations_type; typedef typename stepper_base_type::resizer_type resizer_type; typedef typename stepper_base_type::stepper_type stepper_type; + typedef explicit_system_tag system_category; modified_midpoint( unsigned short steps = 2 , const algebra_type &algebra = algebra_type() ) diff --git a/include/boost/numeric/odeint/stepper/rosenbrock4.hpp b/include/boost/numeric/odeint/stepper/rosenbrock4.hpp index 86136989..d813e815 100644 --- a/include/boost/numeric/odeint/stepper/rosenbrock4.hpp +++ b/include/boost/numeric/odeint/stepper/rosenbrock4.hpp @@ -28,6 +28,7 @@ #include #include +#include #include #include @@ -141,6 +142,7 @@ class rosenbrock4 typedef Resizer resizer_type; typedef Coefficients rosenbrock_coefficients; typedef stepper_tag stepper_category; + typedef implicit_system_tag system_category; typedef unsigned short order_type; typedef state_wrapper< state_type > wrapped_state_type; diff --git a/include/boost/numeric/odeint/stepper/rosenbrock4_controller.hpp b/include/boost/numeric/odeint/stepper/rosenbrock4_controller.hpp index 61d6e511..59365cf1 100644 --- a/include/boost/numeric/odeint/stepper/rosenbrock4_controller.hpp +++ b/include/boost/numeric/odeint/stepper/rosenbrock4_controller.hpp @@ -23,6 +23,7 @@ #include #include +#include #include #include @@ -52,6 +53,7 @@ class rosenbrock4_controller typedef typename stepper_type::wrapped_deriv_type wrapped_deriv_type; typedef typename stepper_type::resizer_type resizer_type; typedef controlled_stepper_tag stepper_category; + typedef implicit_system_tag system_category; typedef rosenbrock4_controller< Stepper > controller_type; diff --git a/include/boost/numeric/odeint/stepper/rosenbrock4_dense_output.hpp b/include/boost/numeric/odeint/stepper/rosenbrock4_dense_output.hpp index 6695ba6a..1371c3fe 100644 --- a/include/boost/numeric/odeint/stepper/rosenbrock4_dense_output.hpp +++ b/include/boost/numeric/odeint/stepper/rosenbrock4_dense_output.hpp @@ -25,6 +25,7 @@ #include #include +#include #include #include @@ -50,6 +51,7 @@ class rosenbrock4_dense_output typedef typename stepper_type::wrapped_deriv_type wrapped_deriv_type; typedef typename stepper_type::resizer_type resizer_type; typedef dense_output_stepper_tag stepper_category; + typedef implicit_system_tag system_category; typedef rosenbrock4_dense_output< ControlledStepper > dense_output_stepper_type; diff --git a/include/boost/numeric/odeint/stepper/runge_kutta4.hpp b/include/boost/numeric/odeint/stepper/runge_kutta4.hpp index 2410774e..3aae43d2 100644 --- a/include/boost/numeric/odeint/stepper/runge_kutta4.hpp +++ b/include/boost/numeric/odeint/stepper/runge_kutta4.hpp @@ -25,6 +25,7 @@ #include #include +#include #include #include #include @@ -129,6 +130,7 @@ class runge_kutta4 : public explicit_generic_rk typedef typename stepper_base_type::algebra_type algebra_type; typedef typename stepper_base_type::operations_type operations_type; typedef typename stepper_base_type::resizer_type resizer_type; + typedef explicit_system_tag system_category; #ifndef DOXYGEN_SKIP typedef typename stepper_base_type::wrapped_state_type wrapped_state_type; diff --git a/include/boost/numeric/odeint/stepper/runge_kutta4_classic.hpp b/include/boost/numeric/odeint/stepper/runge_kutta4_classic.hpp index 32bda0bd..4af4d41b 100644 --- a/include/boost/numeric/odeint/stepper/runge_kutta4_classic.hpp +++ b/include/boost/numeric/odeint/stepper/runge_kutta4_classic.hpp @@ -22,6 +22,7 @@ #include +#include #include #include #include @@ -71,6 +72,7 @@ public : typedef typename stepper_base_type::algebra_type algebra_type; typedef typename stepper_base_type::operations_type operations_type; typedef typename stepper_base_type::resizer_type resizer_type; + typedef explicit_system_tag system_category; #ifndef DOXYGEN_SKIP typedef typename stepper_base_type::stepper_type stepper_type; diff --git a/include/boost/numeric/odeint/stepper/runge_kutta_cash_karp54.hpp b/include/boost/numeric/odeint/stepper/runge_kutta_cash_karp54.hpp index beecb3f3..8e9e20bf 100644 --- a/include/boost/numeric/odeint/stepper/runge_kutta_cash_karp54.hpp +++ b/include/boost/numeric/odeint/stepper/runge_kutta_cash_karp54.hpp @@ -22,6 +22,7 @@ #include #include +#include #include #include #include @@ -172,6 +173,7 @@ class runge_kutta_cash_karp54 : public explicit_error_generic_rk typedef typename stepper_base_type::algebra_type algebra_type; typedef typename stepper_base_type::operations_type operations_type; typedef typename stepper_base_type::resizer_type resizer_typ; + typedef explicit_system_tag system_category; #ifndef DOXYGEN_SKIP typedef typename stepper_base_type::stepper_type stepper_type; diff --git a/include/boost/numeric/odeint/stepper/runge_kutta_cash_karp54_classic.hpp b/include/boost/numeric/odeint/stepper/runge_kutta_cash_karp54_classic.hpp index 80f1a3c0..90f3d56a 100644 --- a/include/boost/numeric/odeint/stepper/runge_kutta_cash_karp54_classic.hpp +++ b/include/boost/numeric/odeint/stepper/runge_kutta_cash_karp54_classic.hpp @@ -23,6 +23,7 @@ #include #include +#include #include #include #include @@ -76,6 +77,7 @@ public : typedef typename stepper_base_type::algebra_type algebra_type; typedef typename stepper_base_type::operations_type operations_type; typedef typename stepper_base_type::resizer_type resizer_type; + typedef explicit_system_tag system_category; #ifndef DOXYGEN_SKIP typedef typename stepper_base_type::wrapped_state_type wrapped_state_type; diff --git a/include/boost/numeric/odeint/stepper/runge_kutta_dopri5.hpp b/include/boost/numeric/odeint/stepper/runge_kutta_dopri5.hpp index 260cd74f..dfccc249 100644 --- a/include/boost/numeric/odeint/stepper/runge_kutta_dopri5.hpp +++ b/include/boost/numeric/odeint/stepper/runge_kutta_dopri5.hpp @@ -23,6 +23,7 @@ #include #include +#include #include #include #include @@ -76,6 +77,7 @@ public : typedef typename stepper_base_type::algebra_type algebra_type; typedef typename stepper_base_type::operations_type operations_type; typedef typename stepper_base_type::resizer_type resizer_type; + typedef explicit_system_tag system_category; #ifndef DOXYGEN_SKIP typedef typename stepper_base_type::stepper_type stepper_type; diff --git a/include/boost/numeric/odeint/stepper/runge_kutta_fehlberg78.hpp b/include/boost/numeric/odeint/stepper/runge_kutta_fehlberg78.hpp index f2f8251f..61a07631 100644 --- a/include/boost/numeric/odeint/stepper/runge_kutta_fehlberg78.hpp +++ b/include/boost/numeric/odeint/stepper/runge_kutta_fehlberg78.hpp @@ -23,6 +23,7 @@ #include #include +#include #include #include #include @@ -317,6 +318,7 @@ class runge_kutta_fehlberg78 : public explicit_error_generic_rk typedef typename stepper_base_type::algebra_type algebra_type; typedef typename stepper_base_type::operations_type operations_type; typedef typename stepper_base_type::resizer_type resizer_type; + typedef explicit_system_tag system_category; #ifndef DOXYGEN_SKIP typedef typename stepper_base_type::stepper_type stepper_type; diff --git a/include/boost/numeric/odeint/stepper/symplectic_euler.hpp b/include/boost/numeric/odeint/stepper/symplectic_euler.hpp index bd40860b..f8376ea9 100644 --- a/include/boost/numeric/odeint/stepper/symplectic_euler.hpp +++ b/include/boost/numeric/odeint/stepper/symplectic_euler.hpp @@ -20,6 +20,7 @@ #include +#include #include #include @@ -91,6 +92,7 @@ class symplectic_euler : public symplectic_nystroem_stepper_base #endif typedef typename stepper_base_type::algebra_type algebra_type; typedef typename stepper_base_type::value_type value_type; + typedef symplectic_or_simple_symplectic_system_tag system_category; symplectic_euler( const algebra_type &algebra = algebra_type() ) diff --git a/include/boost/numeric/odeint/stepper/symplectic_rkn_sb3a_m4_mclachlan.hpp b/include/boost/numeric/odeint/stepper/symplectic_rkn_sb3a_m4_mclachlan.hpp index b33773e2..0ea3081a 100644 --- a/include/boost/numeric/odeint/stepper/symplectic_rkn_sb3a_m4_mclachlan.hpp +++ b/include/boost/numeric/odeint/stepper/symplectic_rkn_sb3a_m4_mclachlan.hpp @@ -21,6 +21,7 @@ #include #include #include +#include #include @@ -111,6 +112,7 @@ class symplectic_rkn_sb3a_m4_mclachlan : public symplectic_nystroem_stepper_base #endif typedef typename stepper_base_type::algebra_type algebra_type; typedef typename stepper_base_type::value_type value_type; + typedef symplectic_or_simple_symplectic_system_tag system_category; symplectic_rkn_sb3a_m4_mclachlan( const algebra_type &algebra = algebra_type() ) diff --git a/include/boost/numeric/odeint/stepper/symplectic_rkn_sb3a_mclachlan.hpp b/include/boost/numeric/odeint/stepper/symplectic_rkn_sb3a_mclachlan.hpp index d75c5353..35a9d8a3 100644 --- a/include/boost/numeric/odeint/stepper/symplectic_rkn_sb3a_mclachlan.hpp +++ b/include/boost/numeric/odeint/stepper/symplectic_rkn_sb3a_mclachlan.hpp @@ -20,6 +20,7 @@ #include +#include #include #include @@ -114,6 +115,7 @@ class symplectic_rkn_sb3a_mclachlan : public symplectic_nystroem_stepper_base #endif typedef typename stepper_base_type::algebra_type algebra_type; typedef typename stepper_base_type::value_type value_type; + typedef symplectic_or_simple_symplectic_system_tag system_category; symplectic_rkn_sb3a_mclachlan( const algebra_type &algebra = algebra_type() ) diff --git a/include/boost/numeric/odeint/stepper/system_categories.hpp b/include/boost/numeric/odeint/stepper/system_categories.hpp new file mode 100644 index 00000000..8e6deac2 --- /dev/null +++ b/include/boost/numeric/odeint/stepper/system_categories.hpp @@ -0,0 +1,44 @@ +/* + [auto_generated] + boost/numeric/odeint/stepper/system_categories.hpp + + [begin_description] + Definition of all system categories. + [end_description] + + Copyright 2017 Markus Friedrich + + 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_NUMERIC_ODEINT_STEPPER_SYSTEM_CATEGORIES_HPP_INCLUDED +#define BOOST_NUMERIC_ODEINT_STEPPER_SYSTEM_CATEGORIES_HPP_INCLUDED + +namespace boost { +namespace numeric { +namespace odeint { + + +/* + * Tags to specify system types + * + * These tags can be used to detect which system category is used + */ + +struct explicit_system_tag {}; +struct second_order_system_tag {}; +struct symplectic_system_tag {}; +struct simple_symplectic_system_tag {}; +struct symplectic_or_simple_symplectic_system_tag {}; +struct implicit_system_tag {}; + + +} // odeint +} // numeric +} // boost + + +#endif // BOOST_NUMERIC_ODEINT_STEPPER_SYSTEM_CATEGORIES_HPP_INCLUDED diff --git a/include/boost/numeric/odeint/stepper/velocity_verlet.hpp b/include/boost/numeric/odeint/stepper/velocity_verlet.hpp index 3a20fc25..9c62c804 100644 --- a/include/boost/numeric/odeint/stepper/velocity_verlet.hpp +++ b/include/boost/numeric/odeint/stepper/velocity_verlet.hpp @@ -19,6 +19,7 @@ #define BOOST_NUMERIC_ODEINT_STEPPER_VELOCITY_VERLET_HPP_DEFINED #include +#include #include #include @@ -71,6 +72,7 @@ class velocity_verlet : public algebra_stepper_base< Algebra , Operations > typedef TimeSq time_square_type; typedef Resizer resizer_type; typedef stepper_tag stepper_category; + typedef second_order_system_tag system_category; typedef unsigned short order_type; From 78b46aa04027f0e7d175bb83cd6af9feb8963316 Mon Sep 17 00:00:00 2001 From: Markus Friedrich Date: Thu, 28 Dec 2017 16:46:44 +0100 Subject: [PATCH 2/2] Added some test for system_category --- test/bulirsch_stoer.cpp | 1 + test/rosenbrock4.cpp | 1 + test/symplectic_steppers.cpp | 4 ++++ test/velocity_verlet.cpp | 1 + 4 files changed, 7 insertions(+) diff --git a/test/bulirsch_stoer.cpp b/test/bulirsch_stoer.cpp index 2c6a0c95..04b885f5 100644 --- a/test/bulirsch_stoer.cpp +++ b/test/bulirsch_stoer.cpp @@ -84,6 +84,7 @@ BOOST_AUTO_TEST_CASE( test_bulirsch_stoer ) { typedef bulirsch_stoer< state_type > stepper_type; stepper_type stepper( 1E-9 , 1E-9 , 1.0 , 0.0 ); + BOOST_STATIC_ASSERT_MSG( ( boost::is_same< stepper_type::system_category , explicit_system_tag >::value ) , "System category" ); state_type x; x[0] = 10.0 ; x[1] = 10.0 ; x[2] = 5.0; diff --git a/test/rosenbrock4.cpp b/test/rosenbrock4.cpp index f0b79d51..89316e25 100644 --- a/test/rosenbrock4.cpp +++ b/test/rosenbrock4.cpp @@ -70,6 +70,7 @@ BOOST_AUTO_TEST_CASE( test_rosenbrock4_stepper ) { typedef rosenbrock4< value_type > stepper_type; stepper_type stepper; + BOOST_STATIC_ASSERT_MSG( ( boost::is_same< stepper_type::system_category , implicit_system_tag >::value ) , "System category" ); typedef stepper_type::state_type state_type; typedef stepper_type::value_type stepper_value_type; diff --git a/test/symplectic_steppers.cpp b/test/symplectic_steppers.cpp index 498983bd..1b1cabac 100644 --- a/test/symplectic_steppers.cpp +++ b/test/symplectic_steppers.cpp @@ -155,6 +155,10 @@ BOOST_AUTO_TEST_CASE_TEMPLATE( test_assoc_types , Stepper , vector_steppers< ini BOOST_STATIC_ASSERT_MSG( ( boost::is_same< typename Stepper::resizer_type , initially_resizer >::value ) , "Resizer type" ); BOOST_STATIC_ASSERT_MSG( ( boost::is_same< typename Stepper::stepper_category , stepper_tag >::value ) , "Stepper category" ); + + BOOST_STATIC_ASSERT_MSG( + ( boost::is_same< typename Stepper::system_category , symplectic_or_simple_symplectic_system_tag >::value ) , + "System category" ); } diff --git a/test/velocity_verlet.cpp b/test/velocity_verlet.cpp index 93a2e97c..9eecf42a 100644 --- a/test/velocity_verlet.cpp +++ b/test/velocity_verlet.cpp @@ -123,6 +123,7 @@ BOOST_AUTO_TEST_SUITE( velocity_verlet_test ) BOOST_FIXTURE_TEST_CASE( test_with_array_ref , velocity_verlet_fixture ) { array_stepper stepper; + BOOST_STATIC_ASSERT_MSG( ( boost::is_same< array_stepper::system_category , second_order_system_tag >::value ) , "System category" ); array_type q , p ; init_state( q , p ); stepper.do_step( ode() , std::make_pair( boost::ref( q ) , boost::ref( p ) ) , 0.0 , 0.01 );