5 #ifndef LODESTAR_BOGACKISHAMPINE_HPP
6 #define LODESTAR_BOGACKISHAMPINE_HPP
8 #include "ButcherTableau.hpp"
11 namespace primitives {
20 btSimple.setNode<0>(1.0 / 2.0);
21 btSimple.setCoefficient<0, 0>(1.0 / 2.0);
23 btSimple.setNode<1>(3.0 / 4.0);
24 btSimple.setCoefficient<1, 0>(0.0);
25 btSimple.setCoefficient<1, 1>(3.0 / 4.0);
27 btSimple.setNode<2>(1.0);
28 btSimple.setCoefficient<2, 0>(2.0 / 9.0);
29 btSimple.setCoefficient<2, 1>(1.0 / 3.0);
30 btSimple.setCoefficient<2, 2>(4.0 / 9.0);
32 btSimple.setWeight<0>(2.0 / 9.0);
33 btSimple.setWeight<1>(1.0 / 3.0);
34 btSimple.setWeight<2>(4.0 / 9.0);
35 btSimple.setWeight<3>(0.0);
37 btExtended.setNode<0>(1.0 / 2.0);
38 btExtended.setCoefficient<0, 0>(1.0 / 2.0);
40 btExtended.setNode<1>(3.0 / 4.0);
41 btExtended.setCoefficient<1, 0>(0.0);
42 btExtended.setCoefficient<1, 1>(3.0 / 4.0);
44 btExtended.setNode<2>(1.0);
45 btExtended.setCoefficient<2, 0>(2.0 / 9.0);
46 btExtended.setCoefficient<2, 1>(1.0 / 3.0);
47 btExtended.setCoefficient<2, 2>(4.0 / 9.0);
49 btExtended.setWeight<0,
true>(2.0 / 9.0);
50 btExtended.setWeight<1,
true>(1.0 / 3.0);
51 btExtended.setWeight<2,
true>(4.0 / 9.0);
52 btExtended.setWeight<3,
true>(0.0);
54 btExtended.setWeight<0,
false>(7.0 / 24.0);
55 btExtended.setWeight<1,
false>(1.0 / 4.0);
56 btExtended.setWeight<2,
false>(1.0 / 3.0);
57 btExtended.setWeight<3,
false>(1.0 / 8.0);
70 return boshImpl->btExtended;
77 return boshImpl->btSimple;
94 template<
typename TType,
typename TScalarType =
double>
97 typedef std::function<TType(TScalarType, TType)> TDFunction;
99 static const short int kLowerErrorOrder = 2;
100 static const short int kLigherErrorOrder = 3;
101 static const short int kStages = 4;
112 static void integrateSimple(
const TDFunction &f, TScalarType &t, TType &y, TScalarType h,
size_t N = 1);
125 static TType
integrateEmbedded(
const TDFunction &f, TScalarType &t, TType &y, TScalarType h,
size_t N = 1);
130 template<
typename TType,
typename TScalarType>
135 for (
int i = 0; i < N; i++) {
136 y = detail::BogackiShampine::getButcherTableauSimple().template execute(f, y, t, h);
141 template<
typename TType,
typename TScalarType>
143 const TScalarType h,
size_t N)
145 std::pair<TType, TType> ye;
146 for (
int i = 0; i < N; i++) {
147 ye = detail::BogackiShampine::getButcherTableau().template execute<TType, 0, true>(f, y, t, h);
157 #endif //LODESTAR_BOGACKISHAMPINE_HPP