ootk 3.0.0 → 4.0.0-1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (357) hide show
  1. package/CHANGELOG.md +235 -10
  2. package/README.md +27 -40
  3. package/dist/coordinate/Hill.d.ts +49 -0
  4. package/dist/coordinate/Hill.js +222 -0
  5. package/dist/coordinate/Hill.js.map +1 -0
  6. package/dist/coordinate/index.d.ts +1 -0
  7. package/dist/coordinate/index.js +2 -0
  8. package/dist/coordinate/index.js.map +1 -0
  9. package/dist/covariance/CovarianceSample.d.ts +43 -0
  10. package/dist/covariance/CovarianceSample.js +147 -0
  11. package/dist/covariance/CovarianceSample.js.map +1 -0
  12. package/dist/covariance/StateCovariance.d.ts +42 -0
  13. package/dist/covariance/StateCovariance.js +65 -0
  14. package/dist/covariance/StateCovariance.js.map +1 -0
  15. package/dist/force/AtmosphericDrag.d.ts +31 -0
  16. package/dist/force/AtmosphericDrag.js +73 -0
  17. package/dist/force/AtmosphericDrag.js.map +1 -0
  18. package/dist/force/EarthGravity.d.ts +27 -0
  19. package/dist/force/EarthGravity.js +117 -0
  20. package/dist/force/EarthGravity.js.map +1 -0
  21. package/{lib/ootk.d.ts → dist/force/Force.d.ts} +12 -11
  22. package/dist/force/Force.js +31 -0
  23. package/dist/force/Force.js.map +1 -0
  24. package/dist/force/ForceModel.d.ts +37 -0
  25. package/dist/force/ForceModel.js +75 -0
  26. package/dist/force/ForceModel.js.map +1 -0
  27. package/dist/force/Gravity.d.ts +38 -0
  28. package/dist/force/Gravity.js +47 -0
  29. package/dist/force/Gravity.js.map +1 -0
  30. package/dist/{ootk.d.ts → force/SolarRadiationPressure.d.ts} +12 -11
  31. package/dist/force/SolarRadiationPressure.js +44 -0
  32. package/dist/force/SolarRadiationPressure.js.map +1 -0
  33. package/dist/force/ThirdBodyGravity.d.ts +26 -0
  34. package/dist/force/ThirdBodyGravity.js +57 -0
  35. package/dist/force/ThirdBodyGravity.js.map +1 -0
  36. package/dist/force/Thrust.d.ts +34 -0
  37. package/dist/force/Thrust.js +58 -0
  38. package/dist/force/Thrust.js.map +1 -0
  39. package/dist/interfaces/RfSensorParams.d.ts +28 -0
  40. package/dist/interfaces/RfSensorParams.js +24 -0
  41. package/dist/interfaces/RfSensorParams.js.map +1 -0
  42. package/dist/interfaces/index.d.ts +1 -0
  43. package/dist/interfaces/index.js +2 -0
  44. package/dist/interfaces/index.js.map +1 -0
  45. package/dist/interpolator/ChebyshevCoefficients.d.ts +50 -0
  46. package/dist/interpolator/ChebyshevCoefficients.js +94 -0
  47. package/dist/interpolator/ChebyshevCoefficients.js.map +1 -0
  48. package/dist/interpolator/ChebyshevInterpolator.d.ts +38 -0
  49. package/dist/interpolator/ChebyshevInterpolator.js +71 -0
  50. package/dist/interpolator/ChebyshevInterpolator.js.map +1 -0
  51. package/dist/interpolator/CubicSpline.d.ts +35 -0
  52. package/dist/interpolator/CubicSpline.js +69 -0
  53. package/dist/interpolator/CubicSpline.js.map +1 -0
  54. package/dist/interpolator/CubicSplineInterpolator.d.ts +36 -0
  55. package/dist/interpolator/CubicSplineInterpolator.js +80 -0
  56. package/dist/interpolator/CubicSplineInterpolator.js.map +1 -0
  57. package/dist/interpolator/FieldInterpolator.d.ts +28 -0
  58. package/dist/interpolator/FieldInterpolator.js +34 -0
  59. package/dist/interpolator/FieldInterpolator.js.map +1 -0
  60. package/dist/interpolator/Interpolator.d.ts +22 -0
  61. package/dist/interpolator/Interpolator.js +47 -0
  62. package/dist/interpolator/Interpolator.js.map +1 -0
  63. package/dist/interpolator/LagrangeInterpolator.d.ts +40 -0
  64. package/dist/interpolator/LagrangeInterpolator.js +159 -0
  65. package/dist/interpolator/LagrangeInterpolator.js.map +1 -0
  66. package/dist/interpolator/StateInterpolator.d.ts +27 -0
  67. package/dist/interpolator/StateInterpolator.js +35 -0
  68. package/dist/interpolator/StateInterpolator.js.map +1 -0
  69. package/dist/interpolator/VerletBlendInterpolator.d.ts +43 -0
  70. package/dist/interpolator/VerletBlendInterpolator.js +118 -0
  71. package/dist/interpolator/VerletBlendInterpolator.js.map +1 -0
  72. package/{lib/ootk.js → dist/main.d.ts} +13 -10
  73. package/dist/{objects/space-object.d.ts → main.js} +17 -23
  74. package/dist/main.js.map +1 -0
  75. package/dist/maneuver/TwoBurnOrbitTransfer.d.ts +41 -0
  76. package/dist/maneuver/TwoBurnOrbitTransfer.js +65 -0
  77. package/dist/maneuver/TwoBurnOrbitTransfer.js.map +1 -0
  78. package/dist/maneuver/Waypoint.d.ts +91 -0
  79. package/dist/maneuver/Waypoint.js +179 -0
  80. package/dist/maneuver/Waypoint.js.map +1 -0
  81. package/{lib/objects/detailed-sat.d.ts → dist/objects/DetailedSatellite.d.ts} +40 -36
  82. package/dist/objects/DetailedSatellite.js +136 -0
  83. package/dist/objects/DetailedSatellite.js.map +1 -0
  84. package/dist/objects/DetailedSensor.d.ts +42 -0
  85. package/dist/objects/DetailedSensor.js +65 -0
  86. package/dist/objects/DetailedSensor.js.map +1 -0
  87. package/dist/objects/LandObject.d.ts +33 -0
  88. package/dist/objects/LandObject.js +34 -0
  89. package/dist/objects/LandObject.js.map +1 -0
  90. package/dist/objects/Marker.d.ts +20 -0
  91. package/dist/objects/Marker.js +24 -0
  92. package/dist/objects/Marker.js.map +1 -0
  93. package/dist/objects/RfSensor.d.ts +41 -0
  94. package/dist/objects/RfSensor.js +67 -0
  95. package/dist/objects/RfSensor.js.map +1 -0
  96. package/dist/objects/index.d.ts +5 -4
  97. package/dist/objects/index.js +6 -0
  98. package/dist/objects/index.js.map +1 -0
  99. package/dist/observation/Observation.d.ts +89 -0
  100. package/dist/observation/Observation.js +102 -0
  101. package/dist/observation/Observation.js.map +1 -0
  102. package/dist/observation/ObservationOptical.d.ts +48 -0
  103. package/dist/observation/ObservationOptical.js +105 -0
  104. package/dist/observation/ObservationOptical.js.map +1 -0
  105. package/dist/observation/ObservationRadar.d.ts +46 -0
  106. package/dist/observation/ObservationRadar.js +96 -0
  107. package/dist/observation/ObservationRadar.js.map +1 -0
  108. package/dist/observation/ObservationUtils.d.ts +20 -0
  109. package/dist/observation/ObservationUtils.js +32 -0
  110. package/dist/observation/ObservationUtils.js.map +1 -0
  111. package/dist/observation/PropagatorPairs.d.ts +32 -0
  112. package/dist/observation/PropagatorPairs.js +43 -0
  113. package/dist/observation/PropagatorPairs.js.map +1 -0
  114. package/dist/operations/BoxMuller.d.ts +46 -0
  115. package/dist/operations/BoxMuller.js +77 -0
  116. package/dist/operations/BoxMuller.js.map +1 -0
  117. package/dist/operations/EulerAngles.d.ts +105 -0
  118. package/dist/operations/EulerAngles.js +161 -0
  119. package/dist/operations/EulerAngles.js.map +1 -0
  120. package/dist/operations/Quaternion.d.ts +56 -0
  121. package/dist/operations/Quaternion.js +167 -0
  122. package/dist/operations/Quaternion.js.map +1 -0
  123. package/dist/operations/RandomGaussianSource.d.ts +24 -0
  124. package/dist/operations/RandomGaussianSource.js +43 -0
  125. package/dist/operations/RandomGaussianSource.js.map +1 -0
  126. package/dist/operations/index.d.ts +4 -0
  127. package/dist/operations/index.js +5 -0
  128. package/dist/operations/index.js.map +1 -0
  129. package/dist/optimize/ChebyshevCompressor.d.ts +32 -0
  130. package/dist/optimize/ChebyshevCompressor.js +83 -0
  131. package/dist/optimize/ChebyshevCompressor.js.map +1 -0
  132. package/dist/optimize/DownhillSimplex.d.ts +64 -0
  133. package/dist/optimize/DownhillSimplex.js +182 -0
  134. package/dist/optimize/DownhillSimplex.js.map +1 -0
  135. package/dist/optimize/GoldenSection.d.ts +39 -0
  136. package/dist/optimize/GoldenSection.js +55 -0
  137. package/dist/optimize/GoldenSection.js.map +1 -0
  138. package/dist/optimize/PolynomialRegression.d.ts +49 -0
  139. package/dist/optimize/PolynomialRegression.js +83 -0
  140. package/dist/optimize/PolynomialRegression.js.map +1 -0
  141. package/dist/optimize/PolynomicalRegressionResult.d.ts +31 -0
  142. package/dist/optimize/PolynomicalRegressionResult.js +38 -0
  143. package/dist/optimize/PolynomicalRegressionResult.js.map +1 -0
  144. package/dist/optimize/SimpleLinearRegression.d.ts +44 -0
  145. package/dist/optimize/SimpleLinearRegression.js +112 -0
  146. package/dist/optimize/SimpleLinearRegression.js.map +1 -0
  147. package/dist/optimize/SimplexEntry.d.ts +32 -0
  148. package/dist/optimize/SimplexEntry.js +42 -0
  149. package/dist/optimize/SimplexEntry.js.map +1 -0
  150. package/dist/orbit_determination/BatchLeastSquaresOD.d.ts +65 -0
  151. package/dist/orbit_determination/BatchLeastSquaresOD.js +143 -0
  152. package/dist/orbit_determination/BatchLeastSquaresOD.js.map +1 -0
  153. package/dist/orbit_determination/BatchLeastSquaresResult.d.ts +31 -0
  154. package/{lib/objects/space-object.d.ts → dist/orbit_determination/BatchLeastSquaresResult.js} +21 -23
  155. package/dist/orbit_determination/BatchLeastSquaresResult.js.map +1 -0
  156. package/dist/orbit_determination/GibbsIOD.d.ts +38 -0
  157. package/dist/orbit_determination/GibbsIOD.js +76 -0
  158. package/dist/orbit_determination/GibbsIOD.js.map +1 -0
  159. package/dist/orbit_determination/GoodingIOD.d.ts +51 -0
  160. package/dist/orbit_determination/GoodingIOD.js +247 -0
  161. package/dist/orbit_determination/GoodingIOD.js.map +1 -0
  162. package/dist/orbit_determination/HerrickGibbsIOD.d.ts +33 -0
  163. package/dist/orbit_determination/HerrickGibbsIOD.js +50 -0
  164. package/dist/orbit_determination/HerrickGibbsIOD.js.map +1 -0
  165. package/dist/orbit_determination/LambertIOD.d.ts +59 -0
  166. package/dist/orbit_determination/LambertIOD.js +213 -0
  167. package/dist/orbit_determination/LambertIOD.js.map +1 -0
  168. package/dist/orbit_determination/ModifiedGoodingIOD.d.ts +40 -0
  169. package/dist/orbit_determination/ModifiedGoodingIOD.js +83 -0
  170. package/dist/orbit_determination/ModifiedGoodingIOD.js.map +1 -0
  171. package/dist/propagator/DormandPrince54Propagator.d.ts +28 -0
  172. package/dist/propagator/DormandPrince54Propagator.js +64 -0
  173. package/dist/propagator/DormandPrince54Propagator.js.map +1 -0
  174. package/dist/propagator/KeplerPropagator.d.ts +35 -0
  175. package/dist/propagator/KeplerPropagator.js +84 -0
  176. package/dist/propagator/KeplerPropagator.js.map +1 -0
  177. package/dist/propagator/Propagator.d.ts +34 -0
  178. package/dist/propagator/Propagator.js +162 -0
  179. package/dist/propagator/Propagator.js.map +1 -0
  180. package/dist/propagator/RkCheckpoint.d.ts +22 -0
  181. package/dist/propagator/RkCheckpoint.js +27 -0
  182. package/dist/propagator/RkCheckpoint.js.map +1 -0
  183. package/dist/propagator/RkResult.d.ts +23 -0
  184. package/dist/propagator/RkResult.js +30 -0
  185. package/dist/propagator/RkResult.js.map +1 -0
  186. package/dist/propagator/RungeKutta4Propagator.d.ts +50 -0
  187. package/dist/propagator/RungeKutta4Propagator.js +141 -0
  188. package/dist/propagator/RungeKutta4Propagator.js.map +1 -0
  189. package/dist/propagator/RungeKutta89Propagator.d.ts +28 -0
  190. package/dist/propagator/RungeKutta89Propagator.js +126 -0
  191. package/dist/propagator/RungeKutta89Propagator.js.map +1 -0
  192. package/dist/propagator/RungeKuttaAdaptive.d.ts +54 -0
  193. package/dist/propagator/RungeKuttaAdaptive.js +159 -0
  194. package/dist/propagator/RungeKuttaAdaptive.js.map +1 -0
  195. package/dist/propagator/Sgp4Propagator.d.ts +34 -0
  196. package/dist/propagator/Sgp4Propagator.js +56 -0
  197. package/dist/propagator/Sgp4Propagator.js.map +1 -0
  198. package/dist/smoothing/ExponentialSmoothing.d.ts +23 -0
  199. package/dist/smoothing/ExponentialSmoothing.js +81 -0
  200. package/dist/smoothing/ExponentialSmoothing.js.map +1 -0
  201. package/dist/transforms/index.d.ts +1 -0
  202. package/dist/transforms/index.js +2 -0
  203. package/dist/transforms/index.js.map +1 -0
  204. package/dist/transforms/transforms.d.ts +56 -92
  205. package/dist/transforms/transforms.js +94 -0
  206. package/dist/transforms/transforms.js.map +1 -0
  207. package/dist/types/types.d.ts +105 -584
  208. package/dist/types/types.js +23 -0
  209. package/dist/types/types.js.map +1 -0
  210. package/dist/utils/index.d.ts +1 -0
  211. package/dist/utils/index.js +2 -0
  212. package/dist/utils/index.js.map +1 -0
  213. package/dist/utils/jacobian.d.ts +11 -0
  214. package/dist/utils/jacobian.js +29 -0
  215. package/dist/utils/jacobian.js.map +1 -0
  216. package/package.json +34 -42
  217. package/src/coordinate/Hill.ts +326 -0
  218. package/src/coordinate/index.ts +1 -0
  219. package/src/covariance/CovarianceSample.ts +194 -0
  220. package/src/covariance/StateCovariance.ts +69 -0
  221. package/src/force/AtmosphericDrag.ts +101 -0
  222. package/src/force/EarthGravity.ts +157 -0
  223. package/src/force/Force.ts +33 -0
  224. package/src/force/ForceModel.ts +91 -0
  225. package/src/force/Gravity.ts +53 -0
  226. package/src/force/SolarRadiationPressure.ts +42 -0
  227. package/src/force/ThirdBodyGravity.ts +62 -0
  228. package/src/force/Thrust.ts +83 -0
  229. package/src/interfaces/RfSensorParams.ts +30 -0
  230. package/src/interfaces/index.ts +1 -0
  231. package/src/interpolator/ChebyshevCoefficients.ts +109 -0
  232. package/src/interpolator/ChebyshevInterpolator.ts +87 -0
  233. package/src/interpolator/CubicSpline.ts +72 -0
  234. package/src/interpolator/CubicSplineInterpolator.ts +90 -0
  235. package/src/interpolator/FieldInterpolator.ts +37 -0
  236. package/src/interpolator/Interpolator.ts +56 -0
  237. package/src/interpolator/LagrangeInterpolator.ts +192 -0
  238. package/src/interpolator/StateInterpolator.ts +39 -0
  239. package/src/interpolator/VerletBlendInterpolator.ts +146 -0
  240. package/src/main.ts +32 -0
  241. package/src/maneuver/TwoBurnOrbitTransfer.ts +79 -0
  242. package/src/maneuver/Waypoint.ts +267 -0
  243. package/src/objects/DetailedSatellite.ts +159 -0
  244. package/src/objects/DetailedSensor.ts +68 -0
  245. package/src/objects/LandObject.ts +46 -0
  246. package/src/objects/Marker.ts +25 -0
  247. package/src/objects/RfSensor.ts +78 -0
  248. package/src/objects/index.ts +5 -0
  249. package/src/observation/Observation.ts +125 -0
  250. package/src/observation/ObservationOptical.ts +146 -0
  251. package/src/observation/ObservationRadar.ts +131 -0
  252. package/src/observation/ObservationUtils.ts +40 -0
  253. package/src/observation/PropagatorPairs.ts +45 -0
  254. package/src/operations/BoxMuller.ts +87 -0
  255. package/src/operations/EulerAngles.ts +183 -0
  256. package/src/operations/Quaternion.ts +222 -0
  257. package/src/operations/RandomGaussianSource.ts +51 -0
  258. package/src/operations/index.ts +4 -0
  259. package/src/optimize/ChebyshevCompressor.ts +96 -0
  260. package/src/optimize/DownhillSimplex.ts +212 -0
  261. package/src/optimize/GoldenSection.ts +71 -0
  262. package/src/optimize/PolynomialRegression.ts +109 -0
  263. package/src/optimize/PolynomicalRegressionResult.ts +32 -0
  264. package/src/optimize/SimpleLinearRegression.ts +127 -0
  265. package/src/optimize/SimplexEntry.ts +50 -0
  266. package/src/orbit_determination/BatchLeastSquaresOD.ts +174 -0
  267. package/src/orbit_determination/BatchLeastSquaresResult.ts +33 -0
  268. package/src/orbit_determination/GibbsIOD.ts +95 -0
  269. package/src/orbit_determination/GoodingIOD.ts +380 -0
  270. package/src/orbit_determination/HerrickGibbsIOD.ts +51 -0
  271. package/src/orbit_determination/LambertIOD.ts +260 -0
  272. package/src/orbit_determination/ModifiedGoodingIOD.ts +133 -0
  273. package/src/propagator/DormandPrince54Propagator.ts +73 -0
  274. package/src/propagator/KeplerPropagator.ts +102 -0
  275. package/src/propagator/Propagator.ts +253 -0
  276. package/src/propagator/RkCheckpoint.ts +25 -0
  277. package/src/propagator/RkResult.ts +26 -0
  278. package/src/propagator/RungeKutta4Propagator.ts +179 -0
  279. package/src/propagator/RungeKutta89Propagator.ts +132 -0
  280. package/src/propagator/RungeKuttaAdaptive.ts +232 -0
  281. package/src/propagator/Sgp4Propagator.ts +71 -0
  282. package/src/smoothing/ExponentialSmoothing.ts +90 -0
  283. package/src/transforms/index.ts +1 -0
  284. package/src/transforms/transforms.ts +117 -0
  285. package/src/types/types.ts +135 -0
  286. package/src/utils/index.ts +1 -0
  287. package/src/utils/jacobian.ts +38 -0
  288. package/.eslintrc.json +0 -244
  289. package/.prettierrc +0 -17
  290. package/babel.config.js +0 -16
  291. package/codecov.yml +0 -21
  292. package/dist/objects/base-object.d.ts +0 -40
  293. package/dist/objects/detailed-sat.d.ts +0 -66
  294. package/dist/objects/sat.d.ts +0 -92
  295. package/dist/objects/sensor.d.ts +0 -93
  296. package/dist/objects/star.d.ts +0 -46
  297. package/dist/ootk.js +0 -2
  298. package/dist/ootk.js.LICENSE.txt +0 -77
  299. package/dist/sgp4/sgp4.d.ts +0 -82
  300. package/dist/tle/tle-format-data.d.ts +0 -6
  301. package/dist/tle/tle.d.ts +0 -375
  302. package/dist/utils/constants.d.ts +0 -34
  303. package/dist/utils/moon-math.d.ts +0 -113
  304. package/dist/utils/sun-math.d.ts +0 -230
  305. package/dist/utils/utils.d.ts +0 -39
  306. package/jest.config.ts +0 -30
  307. package/lib/objects/base-object.d.ts +0 -40
  308. package/lib/objects/base-object.js +0 -79
  309. package/lib/objects/base-object.js.map +0 -1
  310. package/lib/objects/detailed-sat.js +0 -149
  311. package/lib/objects/detailed-sat.js.map +0 -1
  312. package/lib/objects/index.d.ts +0 -4
  313. package/lib/objects/index.js +0 -5
  314. package/lib/objects/index.js.map +0 -1
  315. package/lib/objects/sat.d.ts +0 -92
  316. package/lib/objects/sat.js +0 -188
  317. package/lib/objects/sat.js.map +0 -1
  318. package/lib/objects/sensor.d.ts +0 -93
  319. package/lib/objects/sensor.js +0 -273
  320. package/lib/objects/sensor.js.map +0 -1
  321. package/lib/objects/space-object.js +0 -60
  322. package/lib/objects/space-object.js.map +0 -1
  323. package/lib/objects/star.d.ts +0 -46
  324. package/lib/objects/star.js +0 -91
  325. package/lib/objects/star.js.map +0 -1
  326. package/lib/ootk.js.map +0 -1
  327. package/lib/sgp4/sgp4.d.ts +0 -82
  328. package/lib/sgp4/sgp4.js +0 -3262
  329. package/lib/sgp4/sgp4.js.map +0 -1
  330. package/lib/tle/tle-format-data.d.ts +0 -6
  331. package/lib/tle/tle-format-data.js +0 -10
  332. package/lib/tle/tle-format-data.js.map +0 -1
  333. package/lib/tle/tle.d.ts +0 -375
  334. package/lib/tle/tle.js +0 -611
  335. package/lib/tle/tle.js.map +0 -1
  336. package/lib/transforms/transforms.d.ts +0 -94
  337. package/lib/transforms/transforms.js +0 -308
  338. package/lib/transforms/transforms.js.map +0 -1
  339. package/lib/types/types.d.ts +0 -605
  340. package/lib/types/types.js +0 -36
  341. package/lib/types/types.js.map +0 -1
  342. package/lib/utils/constants.d.ts +0 -34
  343. package/lib/utils/constants.js +0 -35
  344. package/lib/utils/constants.js.map +0 -1
  345. package/lib/utils/moon-math.d.ts +0 -113
  346. package/lib/utils/moon-math.js +0 -387
  347. package/lib/utils/moon-math.js.map +0 -1
  348. package/lib/utils/sun-math.d.ts +0 -230
  349. package/lib/utils/sun-math.js +0 -422
  350. package/lib/utils/sun-math.js.map +0 -1
  351. package/lib/utils/utils.d.ts +0 -39
  352. package/lib/utils/utils.js +0 -102
  353. package/lib/utils/utils.js.map +0 -1
  354. package/sandbox.html +0 -8
  355. package/tsconfig.base.json +0 -31
  356. package/tsconfig.build.json +0 -14
  357. /package/{LICENSE.MD → LICENSE.md} +0 -0
@@ -0,0 +1,253 @@
1
+ /**
2
+ * @author @thkruz Theodore Kruczek
3
+ * @license AGPL-3.0-or-later
4
+ * @copyright (c) 2020-2024 Theodore Kruczek
5
+ *
6
+ * Orbital Object ToolKit is free software: you can redistribute it and/or modify it under the
7
+ * terms of the GNU Affero General Public License as published by the Free Software
8
+ * Foundation, either version 3 of the License, or (at your option) any later version.
9
+ *
10
+ * Orbital Object ToolKit is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
11
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12
+ * See the GNU Affero General Public License for more details.
13
+ *
14
+ * You should have received a copy of the GNU Affero General Public License along with
15
+ * Orbital Object ToolKit. If not, see <http://www.gnu.org/licenses/>.
16
+ */
17
+
18
+ import { EpochUTC, J2000, Seconds } from 'ootk-core';
19
+ import { Thrust } from '../force/Thrust';
20
+ import { VerletBlendInterpolator } from '../interpolator/VerletBlendInterpolator';
21
+ import { GoldenSection } from './../optimize/GoldenSection';
22
+
23
+ // Propagator base class.
24
+ export abstract class Propagator {
25
+ // Propagate state to the provided [epoch].
26
+ abstract propagate(epoch: EpochUTC): J2000;
27
+
28
+ /*
29
+ * Generate a [VerletBlendInterpolator] containing ephemeris over the
30
+ * [start] and [stop] propagation period, with an optional
31
+ * ephemeris [interval].
32
+ */
33
+ ephemeris(start: EpochUTC, stop: EpochUTC, interval = 60.0 as Seconds): VerletBlendInterpolator {
34
+ const output: J2000[] = [this.propagate(start)];
35
+ let tempEpoch = start;
36
+
37
+ while (tempEpoch <= stop) {
38
+ tempEpoch = tempEpoch.roll(interval);
39
+ output.push(this.propagate(tempEpoch));
40
+ }
41
+
42
+ return new VerletBlendInterpolator(output);
43
+ }
44
+
45
+ /*
46
+ * Reset cached propagator state to its initial value.
47
+ *
48
+ * This will clear any post-maneuver states in the propagator.
49
+ */
50
+ abstract reset(): void;
51
+
52
+ /*
53
+ * Store a checkpoint of this propagator's current state, and return the
54
+ * checkpoint index that can be used to [restore] the propagator state
55
+ * later.
56
+ */
57
+ abstract checkpoint(): number;
58
+
59
+ // Restore a state [checkpoint] at the provided index.
60
+ abstract restore(index: number): void;
61
+
62
+ // Remove any stored [checkpoint] values from this propagator.
63
+ abstract clearCheckpoints(): void;
64
+
65
+ // Return the last propagated state.
66
+ abstract get state(): J2000;
67
+
68
+ /*
69
+ * Generate a list of [J2000] states integrating over a maneuver.
70
+ *
71
+ * If the maneuver is impulsive, the list will only contain a single state.
72
+ */
73
+ maneuver(maneuver: Thrust, interval = 60.0 as Seconds): J2000[] {
74
+ const output: J2000[] = [];
75
+ const tempEpoch = maneuver.start;
76
+ const stop = maneuver.stop;
77
+
78
+ output.push(this.propagate(tempEpoch));
79
+ let current = tempEpoch;
80
+
81
+ while (current <= stop) {
82
+ current = current.roll(interval);
83
+ output.push(this.propagate(current));
84
+ }
85
+
86
+ return output;
87
+ }
88
+
89
+ /*
90
+ * Generate a [VerletBlendInterpolator] containing maneuver ephemeris over
91
+ * the [start] and [finish] interval, with an optional ephemeris [interval].
92
+ */
93
+ ephemerisManeuver(
94
+ start: EpochUTC,
95
+ finish: EpochUTC,
96
+ maneuvers: Thrust[],
97
+ interval = 60.0 as Seconds,
98
+ ): VerletBlendInterpolator {
99
+ const output: J2000[] = [];
100
+ const tempEpoch = start;
101
+
102
+ output.push(this.propagate(tempEpoch));
103
+ const stop = finish;
104
+ let current = tempEpoch;
105
+
106
+ while (current <= stop) {
107
+ current = current.roll(interval);
108
+ output.push(this.propagate(current));
109
+ }
110
+
111
+ return new VerletBlendInterpolator(output);
112
+ }
113
+
114
+ // Return the epoch of the ascending node after the [start] epoch.
115
+ ascendingNodeEpoch(start: EpochUTC): EpochUTC {
116
+ const period = this.state.period / 60 as Seconds;
117
+ const step = period / 8 as Seconds;
118
+ let current = start;
119
+ const stop = current.roll(period);
120
+
121
+ this.propagate(current);
122
+ let previous = this.state.position.z;
123
+
124
+ while (current <= stop) {
125
+ current = current.roll(step);
126
+ this.propagate(current);
127
+ if (Math.sign(this.state.position.z) === Math.sign(-previous) && this.state.velocity.z > 0) {
128
+ break;
129
+ }
130
+ previous = this.state.position.z;
131
+ }
132
+ const t = GoldenSection.search(
133
+ (x) => {
134
+ this.propagate(new EpochUTC(x as Seconds));
135
+
136
+ return Math.abs(this.state.position.z) as Seconds;
137
+ },
138
+ current.posix - step,
139
+ current.posix,
140
+ { tolerance: 1e-3 },
141
+ ) as Seconds;
142
+
143
+ return new EpochUTC(t);
144
+ }
145
+
146
+ // Return the epoch of the descending node after the [start] epoch.
147
+ descendingNodeEpoch(start: EpochUTC): EpochUTC {
148
+ const period = this.state.period / 60 as Seconds;
149
+ const step = period / 8 as Seconds;
150
+ let current = start;
151
+ const stop = current.roll(period);
152
+
153
+ this.propagate(current);
154
+ let previous = this.state.position.z;
155
+
156
+ while (current <= stop) {
157
+ current = current.roll(step);
158
+ this.propagate(current);
159
+ if (Math.sign(this.state.position.z) === Math.sign(-previous) && this.state.velocity.z < 0) {
160
+ break;
161
+ }
162
+ previous = this.state.position.z;
163
+ }
164
+ const t = GoldenSection.search(
165
+ (x: number) => {
166
+ this.propagate(new EpochUTC(x as Seconds));
167
+
168
+ return Math.abs(this.state.position.z);
169
+ },
170
+ current.posix - step,
171
+ current.posix,
172
+ { tolerance: 1e-3 },
173
+ ) as Seconds;
174
+
175
+ return new EpochUTC(t);
176
+ }
177
+
178
+ // Return the epoch of apogee after the [start] epoch.
179
+ apogeeEpoch(start: EpochUTC): EpochUTC {
180
+ const slice = 8;
181
+ const period = this.state.period / 60 as Seconds;
182
+ const step = period / slice as Seconds;
183
+ let current = start;
184
+
185
+ this.propagate(current);
186
+ let tCache = current;
187
+ let rCache = this.state.position.magnitude();
188
+
189
+ for (let i = 0; i < slice; i++) {
190
+ current = current.roll(step);
191
+ const t = new EpochUTC(
192
+ GoldenSection.search(
193
+ (x: number) => {
194
+ this.propagate(new EpochUTC(x as Seconds));
195
+
196
+ return this.state.position.magnitude();
197
+ },
198
+ current.posix - step,
199
+ current.posix,
200
+ { tolerance: 1e-3, solveMax: true },
201
+ ) as Seconds,
202
+ );
203
+
204
+ this.propagate(t);
205
+ const r = this.state.position.magnitude();
206
+
207
+ if (r > rCache) {
208
+ tCache = t;
209
+ rCache = r;
210
+ }
211
+ }
212
+
213
+ return tCache;
214
+ }
215
+
216
+ // Return the epoch of perigee after the [start] epoch.
217
+ perigeeEpoch(start: EpochUTC): EpochUTC {
218
+ const slice = 8;
219
+ const period = this.state.period / 60 as Seconds;
220
+ const step = period / slice as Seconds;
221
+ let current = start;
222
+
223
+ this.propagate(current);
224
+ let tCache = current;
225
+ let rCache = this.state.position.magnitude();
226
+
227
+ for (let i = 0; i < slice; i++) {
228
+ current = current.roll(step);
229
+ const t = new EpochUTC(
230
+ GoldenSection.search(
231
+ (x: number) => {
232
+ this.propagate(new EpochUTC(x as Seconds));
233
+
234
+ return this.state.position.magnitude();
235
+ },
236
+ current.posix - step,
237
+ current.posix,
238
+ { tolerance: 1e-3, solveMax: false },
239
+ ) as Seconds,
240
+ );
241
+
242
+ this.propagate(t);
243
+ const r = this.state.position.magnitude();
244
+
245
+ if (r < rCache) {
246
+ tCache = t;
247
+ rCache = r;
248
+ }
249
+ }
250
+
251
+ return tCache;
252
+ }
253
+ }
@@ -0,0 +1,25 @@
1
+ /**
2
+ * @author @thkruz Theodore Kruczek
3
+ * @license AGPL-3.0-or-later
4
+ * @copyright (c) 2020-2024 Theodore Kruczek
5
+ *
6
+ * Orbital Object ToolKit is free software: you can redistribute it and/or modify it under the
7
+ * terms of the GNU Affero General Public License as published by the Free Software
8
+ * Foundation, either version 3 of the License, or (at your option) any later version.
9
+ *
10
+ * Orbital Object ToolKit is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
11
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12
+ * See the GNU Affero General Public License for more details.
13
+ *
14
+ * You should have received a copy of the GNU Affero General Public License along with
15
+ * Orbital Object ToolKit. If not, see <http://www.gnu.org/licenses/>.
16
+ */
17
+
18
+ import { J2000 } from 'ootk-core';
19
+
20
+ // / Runge-Kutta adaptive state checkpoint.
21
+ export class RkCheckpoint {
22
+ constructor(public cacheState: J2000, public stepSize: number) {
23
+ // Nothing to do here.
24
+ }
25
+ }
@@ -0,0 +1,26 @@
1
+ /**
2
+ * @author @thkruz Theodore Kruczek
3
+ * @license AGPL-3.0-or-later
4
+ * @copyright (c) 2020-2024 Theodore Kruczek
5
+ *
6
+ * Orbital Object ToolKit is free software: you can redistribute it and/or modify it under the
7
+ * terms of the GNU Affero General Public License as published by the Free Software
8
+ * Foundation, either version 3 of the License, or (at your option) any later version.
9
+ *
10
+ * Orbital Object ToolKit is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
11
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12
+ * See the GNU Affero General Public License for more details.
13
+ *
14
+ * You should have received a copy of the GNU Affero General Public License along with
15
+ * Orbital Object ToolKit. If not, see <http://www.gnu.org/licenses/>.
16
+ */
17
+
18
+ import { J2000 } from 'ootk-core';
19
+
20
+ // / Result of adaptive numerical integration.
21
+ export class RkResult {
22
+ // / Create a new [RkResult] object.
23
+ constructor(public state: J2000, public error: number, public newStep: number) {
24
+ // Nothing to do here.
25
+ }
26
+ }
@@ -0,0 +1,179 @@
1
+ /**
2
+ * @author @thkruz Theodore Kruczek
3
+ * @license AGPL-3.0-or-later
4
+ * @copyright (c) 2020-2024 Theodore Kruczek
5
+ *
6
+ * Orbital Object ToolKit is free software: you can redistribute it and/or modify it under the
7
+ * terms of the GNU Affero General Public License as published by the Free Software
8
+ * Foundation, either version 3 of the License, or (at your option) any later version.
9
+ *
10
+ * Orbital Object ToolKit is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
11
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12
+ * See the GNU Affero General Public License for more details.
13
+ *
14
+ * You should have received a copy of the GNU Affero General Public License along with
15
+ * Orbital Object ToolKit. If not, see <http://www.gnu.org/licenses/>.
16
+ */
17
+
18
+ import { EpochUTC, J2000, Kilometers, KilometersPerSecond, Seconds, Vector, Vector3D } from 'ootk-core';
19
+ import { ForceModel } from '../force/ForceModel';
20
+ import { Thrust } from '../force/Thrust';
21
+ import { VerletBlendInterpolator } from '../interpolator/VerletBlendInterpolator';
22
+ import { Propagator } from './Propagator';
23
+
24
+ // / Runge-Kutta 4 fixed numerical propagator.
25
+ export class RungeKutta4Propagator extends Propagator {
26
+ /**
27
+ * Create a new [RungeKutta4Propagator] object from an initial state vector and
28
+ * along with an optional [ForceModel] and [stepSize] in seconds.
29
+ * @param initState_ Initial state vector.
30
+ * @param forceModel_ Numerical integration force model.
31
+ * @param stepSize_ Integration step size _(seconds)_.
32
+ * @param cacheState_ Cached state vector.
33
+ * @param checkpoints_ Cached state vector checkpoints.
34
+ */
35
+ constructor(
36
+ private initState_: J2000,
37
+ private forceModel_: ForceModel = new ForceModel().setGravity(),
38
+ private stepSize_: number = 15.0,
39
+ private cacheState_: J2000 = initState_,
40
+ private checkpoints_: J2000[] = [],
41
+ ) {
42
+ super();
43
+ this.stepSize_ = Math.abs(stepSize_);
44
+ }
45
+
46
+ // / Set the integrator step size to the provided number of [seconds].
47
+ setStepSize(seconds: number): void {
48
+ this.stepSize_ = Math.abs(seconds);
49
+ }
50
+
51
+ // / Set numerical integration force model.
52
+ setForceModel(forceModel: ForceModel): void {
53
+ this.forceModel_ = forceModel;
54
+ }
55
+
56
+ ephemerisManeuver(
57
+ start: EpochUTC,
58
+ finish: EpochUTC,
59
+ maneuvers: Thrust[],
60
+ interval = 60.0 as Seconds,
61
+ ): VerletBlendInterpolator {
62
+ const tMvr = maneuvers.slice(0).filter((mvr) => mvr.start >= start || mvr.stop <= finish);
63
+ const ephemeris: J2000[] = [];
64
+
65
+ if (tMvr[0].start > start) {
66
+ ephemeris.push(this.propagate(start));
67
+ }
68
+ for (const mvr of tMvr) {
69
+ while (this.cacheState_.epoch < mvr.start) {
70
+ const step = Math.min(mvr.start.difference(this.cacheState_.epoch), interval) as Seconds;
71
+
72
+ this.propagate(this.cacheState_.epoch.roll(step));
73
+ if (this.cacheState_.epoch.posix !== mvr.start.posix) {
74
+ ephemeris.push(this.cacheState_);
75
+ }
76
+ }
77
+ ephemeris.push(...this.maneuver(mvr, interval));
78
+ }
79
+ while (this.cacheState_.epoch.posix < finish.posix) {
80
+ const step = Math.min(finish.difference(this.cacheState_.epoch), interval) as Seconds;
81
+
82
+ this.propagate(this.cacheState_.epoch.roll(step));
83
+ ephemeris.push(this.cacheState_);
84
+ }
85
+
86
+ return new VerletBlendInterpolator(ephemeris);
87
+ }
88
+
89
+ maneuver(maneuver: Thrust, interval = 60.0): J2000[] {
90
+ if (maneuver.isImpulsive) {
91
+ this.cacheState_ = maneuver.apply(this.propagate(maneuver.center));
92
+
93
+ return [this.cacheState_];
94
+ }
95
+ let tState = this.propagate(maneuver.start);
96
+
97
+ this.forceModel_.loadManeuver(maneuver);
98
+ const ephemeris: J2000[] = [tState];
99
+
100
+ while (tState.epoch < maneuver.stop) {
101
+ const step = Math.min(maneuver.stop.difference(tState.epoch), interval) as Seconds;
102
+
103
+ tState = this.propagate(tState.epoch.roll(step));
104
+ ephemeris.push(tState);
105
+ }
106
+ this.forceModel_.clearManeuver();
107
+
108
+ return ephemeris;
109
+ }
110
+
111
+ private _kFn(state: J2000, hArg: Seconds, kArg: Vector): Vector {
112
+ const epoch = state.epoch.roll(hArg);
113
+ const posvel = state.position.join(state.velocity);
114
+ const result = posvel.add(kArg);
115
+ const sample = new J2000(
116
+ epoch,
117
+ result.toVector3D(0) as Vector3D<Kilometers>,
118
+ result.toVector3D(3) as Vector3D<KilometersPerSecond>,
119
+ );
120
+
121
+ return this.forceModel_.derivative(sample);
122
+ }
123
+
124
+ private _integrate(state: J2000, step: Seconds): J2000 {
125
+ const k1 = this._kFn(state, 0 as Seconds, Vector.zero(6)).scale(step);
126
+ const k2 = this._kFn(state, 0.5 * step as Seconds, k1.scale(0.5)).scale(step);
127
+ const k3 = this._kFn(state, 0.5 * step as Seconds, k2.scale(0.5)).scale(step);
128
+ const k4 = this._kFn(state, step, k3).scale(step);
129
+ const v1 = k1;
130
+ const v2 = v1.add(k2.scale(2));
131
+ const v3 = v2.add(k3.scale(2));
132
+ const v4 = v3.add(k4);
133
+ const tNext = state.epoch.roll(step);
134
+ const posvel = state.position.join(state.velocity);
135
+ const result = posvel.add(v4.scale(1 / 6));
136
+
137
+ return new J2000(
138
+ tNext,
139
+ result.toVector3D(0) as Vector3D<Kilometers>,
140
+ result.toVector3D(3) as Vector3D<KilometersPerSecond>,
141
+ );
142
+ }
143
+
144
+ propagate(epoch: EpochUTC): J2000 {
145
+ let delta = epoch.difference(this.cacheState_.epoch);
146
+
147
+ while (delta !== 0) {
148
+ const direction = delta >= 0 ? 1 : -1;
149
+ const dt = Math.min(Math.abs(delta), this.stepSize_) * direction as Seconds;
150
+
151
+ this.cacheState_ = this._integrate(this.cacheState_, dt);
152
+ delta = epoch.difference(this.cacheState_.epoch);
153
+ }
154
+
155
+ return this.cacheState_;
156
+ }
157
+
158
+ reset(): void {
159
+ this.cacheState_ = this.initState_;
160
+ }
161
+
162
+ get state(): J2000 {
163
+ return this.cacheState_;
164
+ }
165
+
166
+ checkpoint(): number {
167
+ this.checkpoints_.push(this.cacheState_);
168
+
169
+ return this.checkpoints_.length - 1;
170
+ }
171
+
172
+ clearCheckpoints(): void {
173
+ this.checkpoints_ = [];
174
+ }
175
+
176
+ restore(index: number): void {
177
+ this.cacheState_ = this.checkpoints_[index];
178
+ }
179
+ }
@@ -0,0 +1,132 @@
1
+ /**
2
+ * @author @thkruz Theodore Kruczek
3
+ * @license AGPL-3.0-or-later
4
+ * @copyright (c) 2020-2024 Theodore Kruczek
5
+ *
6
+ * Orbital Object ToolKit is free software: you can redistribute it and/or modify it under the
7
+ * terms of the GNU Affero General Public License as published by the Free Software
8
+ * Foundation, either version 3 of the License, or (at your option) any later version.
9
+ *
10
+ * Orbital Object ToolKit is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
11
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12
+ * See the GNU Affero General Public License for more details.
13
+ *
14
+ * You should have received a copy of the GNU Affero General Public License along with
15
+ * Orbital Object ToolKit. If not, see <http://www.gnu.org/licenses/>.
16
+ */
17
+
18
+ /* eslint-disable @typescript-eslint/no-loss-of-precision */
19
+ /* eslint-disable class-methods-use-this */
20
+ import { RungeKuttaAdaptive } from './RungeKuttaAdaptive';
21
+
22
+ // / Runge-Kutta 8(9) adaptive numerical propagator.
23
+ export class RungeKutta89Propagator extends RungeKuttaAdaptive {
24
+ private a_ = Float64Array.from([
25
+ 0.0, 0.3462e-1, 0.9702435063878044594828361677100617517633e-1, 0.1455365259581706689224254251565092627645, 0.561,
26
+ 0.2290079115904850126662751771814700052182, 0.5449920884095149873337248228185299947818, 0.645, 0.48375, 0.6757e-1,
27
+ 0.25, 0.6590650618730998549405331618649220295334, 0.8206, 0.9012, 1.0, 1.0,
28
+ ]);
29
+ private b_ = [
30
+ new Float64Array(0),
31
+ Float64Array.from([0.3462e-1]),
32
+ Float64Array.from([-0.389335438857287327017042687229284478532e-1, 0.1359578945245091786499878854939346230295]),
33
+ Float64Array.from([0.3638413148954266723060635628912731569111e-1, 0.0, 0.1091523944686280016918190688673819470733]),
34
+ Float64Array.from([
35
+ 2.025763914393969636805657604282571047511, 0.0, -7.638023836496292020387602153091964592952,
36
+ 6.173259922102322383581944548809393545442,
37
+ ]),
38
+ Float64Array.from([
39
+ 0.5112275589406060872792270881648288397197e-1, 0.0, 0.0, 0.1770823794555021537929910813839068684087,
40
+ 0.80277624092225014536138698108025283759e-3,
41
+ ]),
42
+ Float64Array.from([
43
+ 0.1316006357975216279279871693164256985334, 0.0, 0.0, -0.2957276252669636417685183174672273730699,
44
+ 0.878137803564295237421124704053886667082e-1, 0.62130529752252747743214350056394300261,
45
+ ]),
46
+ Float64Array.from([
47
+ 0.7166666666666666666666666666666666666667e-1, 0.0, 0.0, 0.0, 0.0, 0.3305533578915319409260346730051472207728,
48
+ 0.2427799754418013924072986603281861125606,
49
+ ]),
50
+ Float64Array.from([
51
+ 0.71806640625e-1, 0.0, 0.0, 0.0, 0.0, 0.3294380283228177160744825466257672816401,
52
+ 0.1165190029271822839255174533742327183599, -0.34013671875e-1,
53
+ ]),
54
+ Float64Array.from([
55
+ 0.4836757646340646986611287718844085773549e-1, 0.0, 0.0, 0.0, 0.0, 0.3928989925676163974333190042057047002852e-1,
56
+ 0.1054740945890344608263649267140088017604, -0.2143865284648312665982642293830533996214e-1,
57
+ -0.1041229174627194437759832813847147895623,
58
+ ]),
59
+ Float64Array.from([
60
+ -0.2664561487201478635337289243849737340534e-1, 0.0, 0.0, 0.0, 0.0, 0.3333333333333333333333333333333333333333e-1,
61
+ -0.1631072244872467239162704487554706387141, 0.3396081684127761199487954930015522928244e-1,
62
+ 0.1572319413814626097110769806810024118077, 0.215226747803187955230353477879477037696,
63
+ ]),
64
+ Float64Array.from([
65
+ 0.3689009248708622334786359863227633989718e-1, 0.0, 0.0, 0.0, 0.0, -0.1465181576725542928653609891758501156785,
66
+ 0.2242577768172024345345469822625833796001, 0.2294405717066072637090897902753790803034e-1,
67
+ -0.35850052905728761357394424889330334334e-2, 0.8669223316444385506869203619044453906053e-1,
68
+ 0.4383840651968337846196219974168630120572,
69
+ ]),
70
+ Float64Array.from([
71
+ -0.4866012215113340846662212357570395295088, 0.0, 0.0, 0.0, 0.0, -6.304602650282852990657772792012007122988,
72
+ -0.281245618289472564778284183790118418111, -2.679019236219849057687906597489223155566,
73
+ 0.518815663924157511565311164615012522024, 1.365353187603341710683633635235238678626,
74
+ 5.885091088503946585721274891680604830712, 2.802808786272062889819965117517532194812,
75
+ ]),
76
+ Float64Array.from([
77
+ 0.4185367457753471441471025246471931649633, 0.0, 0.0, 0.0, 0.0, 6.724547581906459363100870806514855026676,
78
+ -0.425444280164611790606983409697113064616, 3.343279153001265577811816947557982637749,
79
+ 0.617081663117537759528421117507709784737, -0.929966123939932833937749523988800852013,
80
+ -6.099948804751010722472962837945508844846, -3.002206187889399044804158084895173690015,
81
+ 0.2553202529443445472336424602988558373637,
82
+ ]),
83
+ Float64Array.from([
84
+ -0.779374086122884664644623040843840506343, 0.0, 0.0, 0.0, 0.0, -13.93734253810777678786523664804936051203,
85
+ 1.252048853379357320949735183924200895136, -14.69150040801686878191527989293072091588,
86
+ -0.494705058533141685655191992136962873577, 2.242974909146236657906984549543692874755,
87
+ 13.36789380382864375813864978592679139881, 14.39665048665068644512236935340272139005,
88
+ -0.7975813331776800379127866056663258667437, 0.4409353709534277758753793068298041158235,
89
+ ]),
90
+ Float64Array.from([
91
+ 2.058051337466886442151242368989994043993, 0.0, 0.0, 0.0, 0.0, 22.35793772796803295519317565842520212899,
92
+ 0.90949810997556332745009198137971890783, 35.89110098240264104710550686568482456493,
93
+ -3.442515027624453437985000403608480262211, -4.865481358036368826566013387928704014496,
94
+ -18.90980381354342625688427480879773032857, -34.26354448030451782929251177395134170515,
95
+ 1.264756521695642578827783499806516664686, 0.0, 0.0,
96
+ ]),
97
+ ];
98
+ private ch_ = Float64Array.from([
99
+ 0.1996996514886773085518508418098868756464e-1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
100
+ 2.191499304949330054530747099310837524864, 0.8857071848208438030833722031786358862953e-1,
101
+ 0.1140560234865965622484956605091432032674, 0.2533163805345107065564577734569651977347,
102
+ -2.056564386240941011158999594595981300493, 0.340809679901311993516009489422454381283, 0.0, 0.0,
103
+ 0.4834231373823958314376726739772871714902e-1,
104
+ ]);
105
+ private c_ = Float64Array.from([
106
+ 0.1461197685842315252051541915018784713459e-1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
107
+ -0.391521186233133908941022826728824203081, 0.2310932500289506415909675644868993669908,
108
+ 0.1274766769992852382560589467488989175618, 0.2246434176204157731566981937082069688984,
109
+ 0.5684352689748512932705226972873692126743, 0.5825871557215827200814768021863420902155e-1,
110
+ 0.1364317403482215641609022744494239843327, 0.3057013983082797397721005067920369646664e-1, 0.0,
111
+ ]);
112
+
113
+ get a(): Float64Array {
114
+ return this.a_;
115
+ }
116
+
117
+ get b(): Float64Array[] {
118
+ return this.b_;
119
+ }
120
+
121
+ get ch(): Float64Array {
122
+ return this.ch_;
123
+ }
124
+
125
+ get c(): Float64Array {
126
+ return this.c_;
127
+ }
128
+
129
+ get order(): number {
130
+ return 8;
131
+ }
132
+ }