整理
This commit is contained in:
136
include/boost/numeric/odeint/stepper/symplectic_euler.hpp
Normal file
136
include/boost/numeric/odeint/stepper/symplectic_euler.hpp
Normal file
@@ -0,0 +1,136 @@
|
||||
/*
|
||||
[auto_generated]
|
||||
boost/numeric/odeint/stepper/symplectic_euler.hpp
|
||||
|
||||
[begin_description]
|
||||
Implementation of the symplectic Euler for separable Hamiltonian systems.
|
||||
[end_description]
|
||||
|
||||
Copyright 2011-2013 Karsten Ahnert
|
||||
Copyright 2011-2013 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_NUMERIC_ODEINT_STEPPER_SYMPLECTIC_EULER_HPP_INCLUDED
|
||||
#define BOOST_NUMERIC_ODEINT_STEPPER_SYMPLECTIC_EULER_HPP_INCLUDED
|
||||
|
||||
|
||||
#include <boost/numeric/odeint/stepper/base/symplectic_rkn_stepper_base.hpp>
|
||||
|
||||
#include <boost/numeric/odeint/algebra/range_algebra.hpp>
|
||||
#include <boost/numeric/odeint/algebra/default_operations.hpp>
|
||||
#include <boost/numeric/odeint/algebra/algebra_dispatcher.hpp>
|
||||
#include <boost/numeric/odeint/algebra/operations_dispatcher.hpp>
|
||||
|
||||
#include <array>
|
||||
|
||||
namespace boost {
|
||||
namespace numeric {
|
||||
namespace odeint {
|
||||
|
||||
|
||||
#ifndef DOXYGEN_SKIP
|
||||
namespace detail {
|
||||
namespace symplectic_euler_coef {
|
||||
|
||||
template< class Value >
|
||||
struct coef_a_type : public std::array< Value , 1 >
|
||||
{
|
||||
coef_a_type( void )
|
||||
{
|
||||
(*this)[0] = static_cast< Value >( 1 );
|
||||
}
|
||||
};
|
||||
|
||||
template< class Value >
|
||||
struct coef_b_type : public std::array< Value , 1 >
|
||||
{
|
||||
coef_b_type( void )
|
||||
{
|
||||
(*this)[0] = static_cast< Value >( 1 );
|
||||
}
|
||||
};
|
||||
|
||||
} // namespace symplectic_euler_coef
|
||||
} // namespace detail
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
template<
|
||||
class Coor ,
|
||||
class Momentum = Coor ,
|
||||
class Value = double ,
|
||||
class CoorDeriv = Coor ,
|
||||
class MomentumDeriv = Coor ,
|
||||
class Time = Value ,
|
||||
class Algebra = typename algebra_dispatcher< Coor >::algebra_type ,
|
||||
class Operations = typename operations_dispatcher< Coor >::operations_type ,
|
||||
class Resizer = initially_resizer
|
||||
>
|
||||
#ifndef DOXYGEN_SKIP
|
||||
class symplectic_euler :
|
||||
public symplectic_nystroem_stepper_base
|
||||
<
|
||||
1 , 1 ,
|
||||
Coor , Momentum , Value , CoorDeriv , MomentumDeriv , Time , Algebra , Operations , Resizer
|
||||
>
|
||||
#else
|
||||
class symplectic_euler : public symplectic_nystroem_stepper_base
|
||||
#endif
|
||||
{
|
||||
public:
|
||||
|
||||
#ifndef DOXYGEN_SKIP
|
||||
typedef symplectic_nystroem_stepper_base<
|
||||
1 , 1 , Coor , Momentum , Value , CoorDeriv , MomentumDeriv , Time , Algebra , Operations , Resizer > stepper_base_type;
|
||||
#endif
|
||||
typedef typename stepper_base_type::algebra_type algebra_type;
|
||||
typedef typename stepper_base_type::value_type value_type;
|
||||
|
||||
|
||||
symplectic_euler( const algebra_type &algebra = algebra_type() )
|
||||
: stepper_base_type( detail::symplectic_euler_coef::coef_a_type< value_type >() ,
|
||||
detail::symplectic_euler_coef::coef_b_type< value_type >() ,
|
||||
algebra )
|
||||
{ }
|
||||
};
|
||||
|
||||
|
||||
/*************** DOXYGEN ***************/
|
||||
|
||||
/**
|
||||
* \class symplectic_euler
|
||||
* \brief Implementation of the symplectic Euler method.
|
||||
*
|
||||
* The method is of first order and has one stage. It is described HERE.
|
||||
*
|
||||
* \tparam Order The order of the stepper.
|
||||
* \tparam Coor The type representing the coordinates q.
|
||||
* \tparam Momentum The type representing the coordinates p.
|
||||
* \tparam Value The basic value type. Should be something like float, double or a high-precision type.
|
||||
* \tparam CoorDeriv The type representing the time derivative of the coordinate dq/dt.
|
||||
* \tparam MomemtnumDeriv The type representing the time derivative of the momentum dp/dt.
|
||||
* \tparam Time The type representing the time t.
|
||||
* \tparam Algebra The algebra.
|
||||
* \tparam Operations The operations.
|
||||
* \tparam Resizer The resizer policy.
|
||||
*/
|
||||
|
||||
/**
|
||||
* \fn symplectic_euler::symplectic_euler( const algebra_type &algebra )
|
||||
* \brief Constructs the symplectic_euler. This constructor can be used as a default
|
||||
* constructor if the algebra has a default constructor.
|
||||
* \param algebra A copy of algebra is made and stored inside explicit_stepper_base.
|
||||
*/
|
||||
|
||||
} // namespace odeint
|
||||
} // namespace numeric
|
||||
} // namespace boost
|
||||
|
||||
|
||||
#endif // BOOST_NUMERIC_ODEINT_STEPPER_SYMPLECTIC_EULER_HPP_INCLUDED
|
||||
Reference in New Issue
Block a user