]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
1 | /* |
2 | [auto_generated] | |
3 | boost/numeric/odeint/stepper/detail/adams_moulton_call_algebra.hpp | |
4 | ||
5 | [begin_description] | |
6 | Algebra caller for the Adams Moulton method. | |
7 | [end_description] | |
8 | ||
9 | Copyright 2011-2012 Karsten Ahnert | |
10 | Copyright 2011 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_DETAIL_ADAMS_MOULTON_CALL_ALGEBRA_HPP_INCLUDED | |
19 | #define BOOST_NUMERIC_ODEINT_STEPPER_DETAIL_ADAMS_MOULTON_CALL_ALGEBRA_HPP_INCLUDED | |
20 | ||
21 | #include <boost/assert.hpp> | |
22 | ||
23 | namespace boost { | |
24 | namespace numeric { | |
25 | namespace odeint { | |
26 | namespace detail { | |
27 | ||
28 | template< size_t Step , class Algebra , class Operations > | |
29 | struct adams_moulton_call_algebra; | |
30 | ||
31 | template< class Algebra , class Operations > | |
32 | struct adams_moulton_call_algebra< 1 , Algebra , Operations > | |
33 | { | |
34 | template< class StateIn , class StateOut , class DerivIn , class StepStorage , class Coefficients , class Time > | |
35 | void operator()( Algebra &algebra , const StateIn &in , StateOut &out , const DerivIn &dxdt , const StepStorage& /* steps */ , const Coefficients &coef , Time dt ) const | |
36 | { | |
37 | typedef typename Coefficients::value_type value_type; | |
38 | algebra.for_each3( out , in , dxdt , typename Operations::template scale_sum2< value_type , Time >( 1.0 , dt * coef[0] ) ); | |
39 | } | |
40 | }; | |
41 | ||
42 | ||
43 | template< class Algebra , class Operations > | |
44 | struct adams_moulton_call_algebra< 2 , Algebra , Operations > | |
45 | { | |
46 | template< class StateIn , class StateOut , class DerivIn , class StepStorage , class Coefficients , class Time > | |
47 | void operator()( Algebra &algebra , const StateIn &in , StateOut &out , const DerivIn &dxdt , const StepStorage &steps , const Coefficients &coef , Time dt ) const | |
48 | { | |
49 | typedef typename Coefficients::value_type value_type; | |
50 | algebra.for_each4( out , in , dxdt , steps[0].m_v , | |
51 | typename Operations::template scale_sum3< value_type , Time , Time >( 1.0 , dt * coef[0] , dt * coef[1] ) ); | |
52 | } | |
53 | }; | |
54 | ||
55 | ||
56 | template< class Algebra , class Operations > | |
57 | struct adams_moulton_call_algebra< 3 , Algebra , Operations > | |
58 | { | |
59 | template< class StateIn , class StateOut , class DerivIn , class StepStorage , class Coefficients , class Time > | |
60 | void operator()( Algebra &algebra , const StateIn &in , StateOut &out , const DerivIn &dxdt , const StepStorage &steps , const Coefficients &coef , Time dt ) const | |
61 | { | |
62 | typedef typename Coefficients::value_type value_type; | |
63 | algebra.for_each5( out , in , dxdt , steps[0].m_v , steps[1].m_v , | |
64 | typename Operations::template scale_sum4< value_type , Time , Time >( 1.0 , dt * coef[0] , dt * coef[1] , dt * coef[2] ) ); | |
65 | } | |
66 | }; | |
67 | ||
68 | ||
69 | template< class Algebra , class Operations > | |
70 | struct adams_moulton_call_algebra< 4 , Algebra , Operations > | |
71 | { | |
72 | template< class StateIn , class StateOut , class DerivIn , class StepStorage , class Coefficients , class Time > | |
73 | void operator()( Algebra &algebra , const StateIn &in , StateOut &out , const DerivIn &dxdt , const StepStorage &steps , const Coefficients &coef , Time dt ) const | |
74 | { | |
75 | typedef typename Coefficients::value_type value_type; | |
76 | algebra.for_each6( out , in , dxdt , steps[0].m_v , steps[1].m_v , steps[2].m_v , | |
77 | typename Operations::template scale_sum5< value_type , Time , Time , Time >( | |
78 | 1.0 , dt * coef[0] , dt * coef[1] , dt * coef[2] , dt * coef[3] ) ); | |
79 | } | |
80 | }; | |
81 | ||
82 | ||
83 | template< class Algebra , class Operations > | |
84 | struct adams_moulton_call_algebra< 5 , Algebra , Operations > | |
85 | { | |
86 | template< class StateIn , class StateOut , class DerivIn , class StepStorage , class Coefficients , class Time > | |
87 | void operator()( Algebra &algebra , const StateIn &in , StateOut &out , const DerivIn &dxdt , const StepStorage &steps , const Coefficients &coef , Time dt ) const | |
88 | { | |
89 | typedef typename Coefficients::value_type value_type; | |
90 | algebra.for_each7( out , in , dxdt , steps[0].m_v , steps[1].m_v , steps[2].m_v , steps[3].m_v , | |
91 | typename Operations::template scale_sum6< value_type , Time , Time , Time , Time >( | |
92 | 1.0 , dt * coef[0] , dt * coef[1] , dt * coef[2] , dt * coef[3] , dt * coef[4] ) ); | |
93 | } | |
94 | }; | |
95 | ||
96 | ||
97 | template< class Algebra , class Operations > | |
98 | struct adams_moulton_call_algebra< 6 , Algebra , Operations > | |
99 | { | |
100 | template< class StateIn , class StateOut , class DerivIn , class StepStorage , class Coefficients , class Time > | |
101 | void operator()( Algebra &algebra , const StateIn &in , StateOut &out , const DerivIn &dxdt , const StepStorage &steps , const Coefficients &coef , Time dt ) const | |
102 | { | |
103 | typedef typename Coefficients::value_type value_type; | |
104 | algebra.for_each8( out , in , dxdt , steps[0].m_v , steps[1].m_v , steps[2].m_v , steps[3].m_v , steps[4].m_v , | |
105 | typename Operations::template scale_sum7< value_type , Time , Time , Time , Time , Time >( | |
106 | 1.0 , dt * coef[0] , dt * coef[1] , dt * coef[2] , dt * coef[3] , dt * coef[4] , dt * coef[5] ) ); | |
107 | } | |
108 | }; | |
109 | ||
110 | ||
111 | template< class Algebra , class Operations > | |
112 | struct adams_moulton_call_algebra< 7 , Algebra , Operations > | |
113 | { | |
114 | template< class StateIn , class StateOut , class DerivIn , class StepStorage , class Coefficients , class Time > | |
115 | void operator()( Algebra &algebra , const StateIn &in , StateOut &out , const DerivIn &dxdt , const StepStorage &steps , const Coefficients &coef , Time dt ) const | |
116 | { | |
117 | typedef typename Coefficients::value_type value_type; | |
118 | algebra.for_each9( out , in , dxdt , steps[0].m_v , steps[1].m_v , steps[2].m_v , steps[3].m_v , steps[4].m_v , steps[5].m_v , | |
119 | typename Operations::template scale_sum8< value_type , Time , Time , Time , Time , Time , Time >( | |
120 | 1.0 , dt * coef[0] , dt * coef[1] , dt * coef[2] , dt * coef[3] , dt * coef[4] , dt * coef[5] , dt * coef[6] ) ); | |
121 | } | |
122 | }; | |
123 | ||
124 | ||
125 | template< class Algebra , class Operations > | |
126 | struct adams_moulton_call_algebra< 8 , Algebra , Operations > | |
127 | { | |
128 | template< class StateIn , class StateOut , class DerivIn , class StepStorage , class Coefficients , class Time > | |
129 | void operator()( Algebra &algebra , const StateIn &in , StateOut &out , const DerivIn &dxdt , const StepStorage &steps , const Coefficients &coef , Time dt ) const | |
130 | { | |
131 | typedef typename Coefficients::value_type value_type; | |
132 | algebra.for_each10( out , in , dxdt , steps[0].m_v , steps[1].m_v , steps[2].m_v , steps[3].m_v , steps[4].m_v , steps[5].m_v , steps[6].m_v , | |
133 | typename Operations::template scale_sum9< value_type , Time , Time , Time , Time , Time , Time , Time >( | |
134 | 1.0 , dt * coef[0] , dt * coef[1] , dt * coef[2] , dt * coef[3] , dt * coef[4] , dt * coef[5] , dt * coef[6] , dt * coef[7] ) ); | |
135 | } | |
136 | }; | |
137 | ||
138 | ||
139 | ||
140 | ||
141 | } // detail | |
142 | } // odeint | |
143 | } // numeric | |
144 | } // boost | |
145 | ||
146 | ||
147 | ||
148 | #endif // BOOST_NUMERIC_ODEINT_STEPPER_DETAIL_ADAMS_MOULTON_CALL_ALGEBRA_HPP_INCLUDED |