WSF
WsfPrinceDormand78OrbitalIntegrator.hpp
Go to the documentation of this file.
1// ****************************************************************************
2// CUI
3//
4// The Advanced Framework for Simulation, Integration, and Modeling (AFSIM)
5//
6// Copyright 2020 Infoscitex, a DCS Company. All rights reserved.
7//
8// The use, dissemination or disclosure of data in this file is subject to
9// limitation or restriction. See accompanying README and LICENSE for details.
10// ****************************************************************************
11
12#ifndef WSFPRINCEDORMAND78ORBITALINTEGRATOR_HPP
13#define WSFPRINCEDORMAND78ORBITALINTEGRATOR_HPP
14
16
17/*
18
19This integrator implements the RK8(7)13M scheme described in
20
21High order embedded Runge-Kutta formulae, P.J. Prince and J.R. Dormand, Journal of Computational
22and Applied Mathematics, Vol. 7, no 1, 1981.
23
24*/
25
27 public WsfRungeKuttaOrbitalIntegrator<8, 13, WsfPrinceDormand78OrbitalIntegrator>
28{
29public:
33
35 {
37 }
38
39 const char* GetScriptClassName() const override { return "WsfPrinceDormand78Integrator"; }
40
41 std::string GetIntegratorType() const override { return cTYPE; }
42
43 static constexpr const char* cTYPE = "prince_dormand_78";
44
45 static constexpr double cCVALUES[cSTEPCOUNT] = {0.0,
46 1.0 / 18.0,
47 1.0 / 12.0,
48 1.0 / 8.0,
49 5.0 / 16.0,
50 3.0 / 8.0,
51 59.0 / 400.0,
52 93.0 / 200.0,
53 5490023248.0 / 9719169821.0,
54 13.0 / 20.0,
55 1201146811.0 / 1299019798.0,
56 1.0,
57 1.0};
58
59 static constexpr double cBVALUES[cSTEPCOUNT] = {14005451.0 / 335480064.0,
60 0.0,
61 0.0,
62 0.0,
63 0.0,
64 -59238493.0 / 1068277825.0,
65 181606767.0 / 758867731.0,
66 561292985.0 / 797845732.0,
67 -1041891430.0 / 1371343529.0,
68 760417239.0 / 1151165299.0,
69 118820643.0 / 751138087.0,
70 -528747749.0 / 2220607170.0,
71 1.0 / 4.0};
72
73 static constexpr double cERRORVALUES[cSTEPCOUNT] = {cBVALUES[0] - 13451932.0 / 455176623.0,
74 cBVALUES[1] - 0.0,
75 cBVALUES[2] - 0.0,
76 cBVALUES[3] - 0.0,
77 cBVALUES[4] - 0.0,
78 cBVALUES[5] + 808719846.0 / 976000145.0,
79 cBVALUES[6] - 1757004468.0 / 5645159321.0,
80 cBVALUES[7] - 656045339.0 / 265891186.0,
81 cBVALUES[8] + 3867574721.0 / 1518517206.0,
82 cBVALUES[9] - 465885868.0 / 322736535.0,
83 cBVALUES[10] - 53011238.0 / 667516719.0,
84 cBVALUES[11] - 2.0 / 45.0,
85 cBVALUES[12] - 0.0};
86
87 static constexpr double cAVALUES[cSTEPCOUNT][cSTEPCOUNT - 1] = {{
88 0.0,
89 0.0,
90 0.0,
91 0.0,
92 0.0,
93 0.0,
94 0.0,
95 0.0,
96 0.0,
97 0.0,
98 0.0,
99 0.0,
100 },
101 {
102 1.0 / 18.0,
103 0.0,
104 0.0,
105 0.0,
106 0.0,
107 0.0,
108 0.0,
109 0.0,
110 0.0,
111 0.0,
112 0.0,
113 0.0,
114 },
115 {
116 1.0 / 48.0,
117 1.0 / 16.0,
118 0.0,
119 0.0,
120 0.0,
121 0.0,
122 0.0,
123 0.0,
124 0.0,
125 0.0,
126 0.0,
127 0.0,
128 },
129 {
130 1.0 / 32.0,
131 0.0,
132 3.0 / 32.0,
133 0.0,
134 0.0,
135 0.0,
136 0.0,
137 0.0,
138 0.0,
139 0.0,
140 0.0,
141 0.0,
142 },
143 {
144 5.0 / 16.0,
145 0.0,
146 -75.0 / 64.0,
147 75.0 / 64.0,
148 0.0,
149 0.0,
150 0.0,
151 0.0,
152 0.0,
153 0.0,
154 0.0,
155 0.0,
156 },
157 {
158 3.0 / 80.0,
159 0.0,
160 0.0,
161 3.0 / 16.0,
162 3.0 / 20.0,
163 0.0,
164 0.0,
165 0.0,
166 0.0,
167 0.0,
168 0.0,
169 0.0,
170 },
171 {
172 29443841.0 / 614563906.0,
173 0.0,
174 0.0,
175 77736538.0 / 692538347.0,
176 -28693883.0 / 1125000000.0,
177 23124283.0 / 1800000000.0,
178 0.0,
179 0.0,
180 0.0,
181 0.0,
182 0.0,
183 0.0,
184 },
185 {
186 16016141.0 / 946692911.0,
187 0.0,
188 0.0,
189 61564180.0 / 158732637.0,
190 22789713.0 / 633445777.0,
191 545815736.0 / 2771057229.0,
192 -180193667.0 / 1043307555.0,
193 0.0,
194 0.0,
195 0.0,
196 0.0,
197 0.0,
198 },
199 {
200 39632708.0 / 573591083.0,
201 0.0,
202 0.0,
203 -433636366.0 / 683701615.0,
204 -421739975.0 / 2616292301.0,
205 100302831.0 / 723423059.0,
206 790204164.0 / 839813087.0,
207 800635310.0 / 3783071287.0,
208 0.0,
209 0.0,
210 0.0,
211 0.0,
212 },
213 {
214 246121993.0 / 1340847787.0,
215 0.0,
216 0.0,
217 -37695042795.0 / 15268766246.0,
218 -309121744.0 / 1061227803.0,
219 -12992083.0 / 490766935.0,
220 6005943493.0 / 2108947869.0,
221 393006217.0 / 1396673457.0,
222 123872331.0 / 1001029789.0,
223 0.0,
224 0.0,
225 0.0,
226 },
227 {
228 -1028468189.0 / 846180014.0,
229 0.0,
230 0.0,
231 8478235783.0 / 508512852.0,
232 1311729495.0 / 1432422823.0,
233 -10304129995.0 / 1701304382.0,
234 -48777925059.0 / 3047939560.0,
235 15336726248.0 / 1032824649.0,
236 -45442868181.0 / 3398467696.0,
237 3065993473.0 / 597172653.0,
238 0.0,
239 0.0,
240 },
241 {
242 185892177.0 / 718116043.0,
243 0.0,
244 0.0,
245 -3185094517.0 / 667107341.0,
246 -477755414.0 / 1098053517.0,
247 -703635378.0 / 230739211.0,
248 5731566787.0 / 1027545527.0,
249 5232866602.0 / 850066563.0,
250 -4093664535.0 / 808688257.0,
251 3962137247.0 / 1805957418.0,
252 65686358.0 / 487910083.0,
253 0.0,
254 },
255 {
256 403863854.0 / 491063109.0,
257 0.0,
258 0.0,
259 -5068492393.0 / 434740067.0,
260 -411421997.0 / 543043805.0,
261 652783627.0 / 914296604.0,
262 11173962825.0 / 925320556.0,
263 -13158990841.0 / 6184727034.0,
264 3936647629.0 / 1978049680.0,
265 -160528059.0 / 685178525.0,
266 248638103.0 / 1413531060.0,
267 0.0,
268 }};
269};
270
271#endif // WSFPRINCEDORMAND78ORBITALINTEGRATOR_HPP
WsfPrinceDormand78OrbitalIntegrator * Clone() const override
Definition WsfPrinceDormand78OrbitalIntegrator.hpp:34
const char * GetScriptClassName() const override
Definition WsfPrinceDormand78OrbitalIntegrator.hpp:39
std::string GetIntegratorType() const override
Definition WsfPrinceDormand78OrbitalIntegrator.hpp:41
~WsfPrinceDormand78OrbitalIntegrator() override=default
static constexpr const char * cTYPE
Definition WsfPrinceDormand78OrbitalIntegrator.hpp:43
WsfPrinceDormand78OrbitalIntegrator(const WsfPrinceDormand78OrbitalIntegrator &aOther)=default
static constexpr double cBVALUES[cSTEPCOUNT]
Definition WsfPrinceDormand78OrbitalIntegrator.hpp:59
static constexpr double cERRORVALUES[cSTEPCOUNT]
Definition WsfPrinceDormand78OrbitalIntegrator.hpp:73
static constexpr double cCVALUES[cSTEPCOUNT]
Definition WsfPrinceDormand78OrbitalIntegrator.hpp:45
static constexpr double cAVALUES[cSTEPCOUNT][cSTEPCOUNT - 1]
Definition WsfPrinceDormand78OrbitalIntegrator.hpp:87
static constexpr unsigned int cSTEPCOUNT
Definition WsfRungeKuttaOrbitalIntegrator.hpp:38
Copyrights Multiple, All Rights Reserved