]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/numeric/odeint/include/boost/numeric/odeint/stepper/symplectic_euler.hpp
bump version to 12.2.2-pve1
[ceph.git] / ceph / src / boost / libs / numeric / odeint / include / boost / numeric / odeint / stepper / symplectic_euler.hpp
CommitLineData
7c673cae
FG
1/*
2 [auto_generated]
3 boost/numeric/odeint/stepper/symplectic_euler.hpp
4
5 [begin_description]
6 Implementation of the symplectic Euler for separable Hamiltonian systems.
7 [end_description]
8
9 Copyright 2011-2013 Karsten Ahnert
10 Copyright 2011-2013 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_NUMERIC_ODEINT_STEPPER_SYMPLECTIC_EULER_HPP_INCLUDED
19#define BOOST_NUMERIC_ODEINT_STEPPER_SYMPLECTIC_EULER_HPP_INCLUDED
20
21
22#include <boost/numeric/odeint/stepper/base/symplectic_rkn_stepper_base.hpp>
23
24#include <boost/numeric/odeint/algebra/range_algebra.hpp>
25#include <boost/numeric/odeint/algebra/default_operations.hpp>
26#include <boost/numeric/odeint/algebra/algebra_dispatcher.hpp>
27#include <boost/numeric/odeint/algebra/operations_dispatcher.hpp>
28
29#include <boost/array.hpp>
30
31namespace boost {
32namespace numeric {
33namespace odeint {
34
35
36#ifndef DOXYGEN_SKIP
37namespace detail {
38namespace symplectic_euler_coef {
39
40template< class Value >
41struct coef_a_type : public boost::array< Value , 1 >
42{
43 coef_a_type( void )
44 {
45 (*this)[0] = static_cast< Value >( 1 );
46 }
47};
48
49template< class Value >
50struct coef_b_type : public boost::array< Value , 1 >
51{
52 coef_b_type( void )
53 {
54 (*this)[0] = static_cast< Value >( 1 );
55 }
56};
57
58} // namespace symplectic_euler_coef
59} // namespace detail
60#endif
61
62
63
64template<
65class Coor ,
66class Momentum = Coor ,
67class Value = double ,
68class CoorDeriv = Coor ,
69class MomentumDeriv = Coor ,
70class Time = Value ,
71class Algebra = typename algebra_dispatcher< Coor >::algebra_type ,
72class Operations = typename operations_dispatcher< Coor >::operations_type ,
73class Resizer = initially_resizer
74>
75#ifndef DOXYGEN_SKIP
76class symplectic_euler :
77public symplectic_nystroem_stepper_base
78<
791 , 1 ,
80Coor , Momentum , Value , CoorDeriv , MomentumDeriv , Time , Algebra , Operations , Resizer
81>
82#else
83class symplectic_euler : public symplectic_nystroem_stepper_base
84#endif
85{
86public:
87
88#ifndef DOXYGEN_SKIP
89 typedef symplectic_nystroem_stepper_base<
90 1 , 1 , Coor , Momentum , Value , CoorDeriv , MomentumDeriv , Time , Algebra , Operations , Resizer > stepper_base_type;
91#endif
92 typedef typename stepper_base_type::algebra_type algebra_type;
93 typedef typename stepper_base_type::value_type value_type;
94
95
96 symplectic_euler( const algebra_type &algebra = algebra_type() )
97 : stepper_base_type( detail::symplectic_euler_coef::coef_a_type< value_type >() ,
98 detail::symplectic_euler_coef::coef_b_type< value_type >() ,
99 algebra )
100 { }
101};
102
103
104/*************** DOXYGEN ***************/
105
106/**
107 * \class symplectic_euler
108 * \brief Implementation of the symplectic Euler method.
109 *
110 * The method is of first order and has one stage. It is described HERE.
111 *
112 * \tparam Order The order of the stepper.
113 * \tparam Coor The type representing the coordinates q.
114 * \tparam Momentum The type representing the coordinates p.
115 * \tparam Value The basic value type. Should be something like float, double or a high-precision type.
116 * \tparam CoorDeriv The type representing the time derivative of the coordinate dq/dt.
117 * \tparam MomemtnumDeriv The type representing the time derivative of the momentum dp/dt.
118 * \tparam Time The type representing the time t.
119 * \tparam Algebra The algebra.
120 * \tparam Operations The operations.
121 * \tparam Resizer The resizer policy.
122 */
123
124 /**
125 * \fn symplectic_euler::symplectic_euler( const algebra_type &algebra )
126 * \brief Constructs the symplectic_euler. This constructor can be used as a default
127 * constructor if the algebra has a default constructor.
128 * \param algebra A copy of algebra is made and stored inside explicit_stepper_base.
129 */
130
131} // namespace odeint
132} // namespace numeric
133} // namespace boost
134
135
136#endif // BOOST_NUMERIC_ODEINT_STEPPER_SYMPLECTIC_EULER_HPP_INCLUDED