/* boost/numeric/odeint/stepper/detail/pid_step_adjuster_coefficients.hpp [begin_description] Coefficients for the PID stepsize controller. [end_description] Copyright 2017 Valentin Noah Hartmann 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_DETAIL_PID_STEP_ADJUSTER_COEFFICIENTS_HPP_INCLUDED #define BOOST_NUMERIC_ODEINT_STEPPER_DETAIL_PID_STEP_ADJUSTER_COEFFICIENTS_HPP_INCLUDED #include namespace boost { namespace numeric { namespace odeint { namespace detail { enum adjuster_type{ BASIC, H0211, H211b, H211PI, H0312, H312b, H312PID, H0321, H321 }; template class pid_step_adjuster_coefficients; template<> class pid_step_adjuster_coefficients : public boost::array { public: pid_step_adjuster_coefficients() : boost::array() { (*this)[0] = 1.0; (*this)[1] = 0.0; (*this)[2] = 0.0; (*this)[3] = 0.0; (*this)[4] = 0.0; } }; template<> class pid_step_adjuster_coefficients : public boost::array { public: pid_step_adjuster_coefficients() : boost::array() { (*this)[0] = 1.0 / 2.0; (*this)[1] = 1.0 / 2.0; (*this)[2] = 0.0; (*this)[3] = 1.0 / 2.0; (*this)[4] = 0.0; } }; template<> class pid_step_adjuster_coefficients : public boost::array { public: pid_step_adjuster_coefficients() : boost::array() { (*this)[0] = 1.0 / 5.0; (*this)[1] = 2.0 / 5.0; (*this)[2] = 0.0; (*this)[3] = 1.0 / 5.0; (*this)[4] = 0.0; } }; template<> class pid_step_adjuster_coefficients : public boost::array { public: pid_step_adjuster_coefficients() : boost::array() { (*this)[0] = 1.0 / 6.0; (*this)[1] = 2.0 / 6.0; (*this)[2] = 0.0; (*this)[3] = 0.0; (*this)[4] = 0.0; } }; template<> class pid_step_adjuster_coefficients : public boost::array { public: pid_step_adjuster_coefficients() : boost::array() { (*this)[0] = 1.0 / 4.0; (*this)[1] = 2.0 / 2.0; (*this)[2] = 1.0 / 4.0; (*this)[3] = 3.0 / 4.0; (*this)[4] = 1.0 / 4.0; } }; template<> class pid_step_adjuster_coefficients : public boost::array { public: pid_step_adjuster_coefficients() : boost::array() { (*this)[0] = 1.0 / 6.0; (*this)[1] = 2.0 / 6.0; (*this)[2] = 1.0 / 6.0; (*this)[3] = 3.0 / 6.0; (*this)[4] = 1.0 / 6.0; } }; template<> class pid_step_adjuster_coefficients : public boost::array { public: pid_step_adjuster_coefficients() : boost::array() { (*this)[0] = 1.0 / 18.0; (*this)[1] = 2.0 / 9.0; (*this)[2] = 1.0 / 18.0; (*this)[3] = 0.0; (*this)[4] = 0.0; } }; template<> class pid_step_adjuster_coefficients : public boost::array { public: pid_step_adjuster_coefficients() : boost::array() { (*this)[0] = 5.0 / 4.0; (*this)[1] = 1.0 / 2.0; (*this)[2] = -3.0 / 4.0; (*this)[3] = -1.0 / 4.0; (*this)[4] = -3.0 / 4.0; } }; template<> class pid_step_adjuster_coefficients : public boost::array { public: pid_step_adjuster_coefficients() : boost::array() { (*this)[0] = 1.0 / 3.0; (*this)[1] = 1.0 / 18.0; (*this)[2] = -5.0 / 18.0; (*this)[3] = -5.0 / 16.0; (*this)[4] = -1.0 / 6.0; } }; } // detail } // odeint } // numeric } // boost #endif