ootk 3.0.0 → 4.0.0-0
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.
- package/.eslintrc.json +10 -10
- package/CHANGELOG.md +122 -0
- package/README.md +27 -40
- package/lib/coordinate/Hill.d.ts +50 -0
- package/lib/coordinate/Hill.js +214 -0
- package/lib/coordinate/Hill.js.map +1 -0
- package/lib/coordinate/index.d.ts +1 -0
- package/lib/coordinate/index.js +2 -0
- package/lib/coordinate/index.js.map +1 -0
- package/lib/covariance/CovarianceSample.d.ts +44 -0
- package/lib/covariance/CovarianceSample.js +146 -0
- package/lib/covariance/CovarianceSample.js.map +1 -0
- package/lib/covariance/StateCovariance.d.ts +41 -0
- package/lib/covariance/StateCovariance.js +62 -0
- package/lib/covariance/StateCovariance.js.map +1 -0
- package/lib/force/AtmosphericDrag.d.ts +32 -0
- package/lib/force/AtmosphericDrag.js +66 -0
- package/lib/force/AtmosphericDrag.js.map +1 -0
- package/lib/force/EarthGravity.d.ts +28 -0
- package/lib/force/EarthGravity.js +115 -0
- package/lib/force/EarthGravity.js.map +1 -0
- package/{dist/ootk.d.ts → lib/force/Force.d.ts} +10 -10
- package/lib/force/Force.js +30 -0
- package/lib/force/Force.js.map +1 -0
- package/lib/force/ForceModel.d.ts +38 -0
- package/lib/force/ForceModel.js +71 -0
- package/lib/force/ForceModel.js.map +1 -0
- package/lib/force/Gravity.d.ts +41 -0
- package/lib/force/Gravity.js +48 -0
- package/lib/force/Gravity.js.map +1 -0
- package/lib/force/SolarRadiationPressure.d.ts +27 -0
- package/lib/force/SolarRadiationPressure.js +42 -0
- package/lib/force/SolarRadiationPressure.js.map +1 -0
- package/lib/force/ThirdBodyGravity.d.ts +27 -0
- package/lib/force/ThirdBodyGravity.js +56 -0
- package/lib/force/ThirdBodyGravity.js.map +1 -0
- package/lib/force/Thrust.d.ts +35 -0
- package/lib/force/Thrust.js +53 -0
- package/lib/force/Thrust.js.map +1 -0
- package/lib/interpolator/ChebyshevCoefficients.d.ts +54 -0
- package/lib/interpolator/ChebyshevCoefficients.js +90 -0
- package/lib/interpolator/ChebyshevCoefficients.js.map +1 -0
- package/lib/interpolator/ChebyshevInterpolator.d.ts +39 -0
- package/lib/interpolator/ChebyshevInterpolator.js +71 -0
- package/lib/interpolator/ChebyshevInterpolator.js.map +1 -0
- package/lib/interpolator/CubicSpline.d.ts +36 -0
- package/lib/interpolator/CubicSpline.js +64 -0
- package/lib/interpolator/CubicSpline.js.map +1 -0
- package/lib/interpolator/CubicSplineInterpolator.d.ts +37 -0
- package/lib/interpolator/CubicSplineInterpolator.js +78 -0
- package/lib/interpolator/CubicSplineInterpolator.js.map +1 -0
- package/lib/interpolator/FieldInterpolator.d.ts +26 -0
- package/lib/interpolator/FieldInterpolator.js +31 -0
- package/lib/interpolator/FieldInterpolator.js.map +1 -0
- package/lib/interpolator/Interpolator.d.ts +23 -0
- package/lib/interpolator/Interpolator.js +48 -0
- package/lib/interpolator/Interpolator.js.map +1 -0
- package/lib/interpolator/LagrangeInterpolator.d.ts +42 -0
- package/lib/interpolator/LagrangeInterpolator.js +156 -0
- package/lib/interpolator/LagrangeInterpolator.js.map +1 -0
- package/lib/interpolator/StateInterpolator.d.ts +29 -0
- package/lib/interpolator/StateInterpolator.js +37 -0
- package/lib/interpolator/StateInterpolator.js.map +1 -0
- package/lib/interpolator/VerletBlendInterpolator.d.ts +44 -0
- package/lib/interpolator/VerletBlendInterpolator.js +115 -0
- package/lib/interpolator/VerletBlendInterpolator.js.map +1 -0
- package/lib/maneuver/TwoBurnOrbitTransfer.d.ts +43 -0
- package/lib/maneuver/TwoBurnOrbitTransfer.js +62 -0
- package/lib/maneuver/TwoBurnOrbitTransfer.js.map +1 -0
- package/lib/maneuver/Waypoint.d.ts +66 -0
- package/lib/maneuver/Waypoint.js +152 -0
- package/lib/maneuver/Waypoint.js.map +1 -0
- package/lib/objects/DetailedSatellite.d.ts +94 -0
- package/lib/objects/DetailedSatellite.js +140 -0
- package/lib/objects/DetailedSatellite.js.map +1 -0
- package/lib/objects/DetailedSensor.d.ts +43 -0
- package/lib/objects/DetailedSensor.js +45 -0
- package/lib/objects/DetailedSensor.js.map +1 -0
- package/{dist/objects/space-object.d.ts → lib/objects/LandObject.d.ts} +19 -21
- package/lib/objects/LandObject.js +28 -0
- package/lib/objects/LandObject.js.map +1 -0
- package/lib/objects/Marker.d.ts +21 -0
- package/lib/objects/Marker.js +25 -0
- package/lib/objects/Marker.js.map +1 -0
- package/lib/objects/index.d.ts +5 -4
- package/lib/objects/index.js +5 -4
- package/lib/objects/index.js.map +1 -1
- package/lib/observation/Observation.d.ts +51 -0
- package/lib/observation/Observation.js +71 -0
- package/lib/observation/Observation.js.map +1 -0
- package/lib/observation/ObservationOptical.d.ts +47 -0
- package/lib/observation/ObservationOptical.js +101 -0
- package/lib/observation/ObservationOptical.js.map +1 -0
- package/lib/observation/ObservationRadar.d.ts +43 -0
- package/lib/observation/ObservationRadar.js +90 -0
- package/lib/observation/ObservationRadar.js.map +1 -0
- package/lib/observation/ObservationUtils.d.ts +21 -0
- package/lib/observation/ObservationUtils.js +33 -0
- package/lib/observation/ObservationUtils.js.map +1 -0
- package/lib/observation/PropagatorPairs.d.ts +31 -0
- package/lib/observation/PropagatorPairs.js +40 -0
- package/lib/observation/PropagatorPairs.js.map +1 -0
- package/lib/ootk.d.ts +10 -8
- package/lib/ootk.js +10 -8
- package/lib/ootk.js.map +1 -1
- package/lib/operations/BoxMuller.d.ts +41 -0
- package/lib/operations/BoxMuller.js +66 -0
- package/lib/operations/BoxMuller.js.map +1 -0
- package/lib/operations/EulerAngles.d.ts +50 -0
- package/lib/operations/EulerAngles.js +111 -0
- package/lib/operations/EulerAngles.js.map +1 -0
- package/lib/operations/Quaternion.d.ts +57 -0
- package/lib/operations/Quaternion.js +164 -0
- package/lib/operations/Quaternion.js.map +1 -0
- package/lib/operations/RandomGaussianSource.d.ts +25 -0
- package/lib/operations/RandomGaussianSource.js +43 -0
- package/lib/operations/RandomGaussianSource.js.map +1 -0
- package/lib/operations/index.d.ts +4 -0
- package/lib/operations/index.js +5 -0
- package/lib/operations/index.js.map +1 -0
- package/lib/optimize/ChebyshevCompressor.d.ts +31 -0
- package/lib/optimize/ChebyshevCompressor.js +80 -0
- package/lib/optimize/ChebyshevCompressor.js.map +1 -0
- package/lib/optimize/DownhillSimplex.d.ts +50 -0
- package/lib/optimize/DownhillSimplex.js +168 -0
- package/lib/optimize/DownhillSimplex.js.map +1 -0
- package/lib/optimize/GoldenSection.d.ts +33 -0
- package/lib/optimize/GoldenSection.js +49 -0
- package/lib/optimize/GoldenSection.js.map +1 -0
- package/lib/optimize/PolynomialRegression.d.ts +37 -0
- package/lib/optimize/PolynomialRegression.js +66 -0
- package/lib/optimize/PolynomialRegression.js.map +1 -0
- package/lib/optimize/PolynomicalRegressionResult.d.ts +28 -0
- package/lib/optimize/PolynomicalRegressionResult.js +32 -0
- package/lib/optimize/PolynomicalRegressionResult.js.map +1 -0
- package/lib/optimize/SimpleLinearRegression.d.ts +41 -0
- package/lib/optimize/SimpleLinearRegression.js +107 -0
- package/lib/optimize/SimpleLinearRegression.js.map +1 -0
- package/lib/optimize/SimplexEntry.d.ts +33 -0
- package/lib/optimize/SimplexEntry.js +39 -0
- package/lib/optimize/SimplexEntry.js.map +1 -0
- package/lib/orbit_determination/BatchLeastSquaresOD.d.ts +54 -0
- package/lib/orbit_determination/BatchLeastSquaresOD.js +118 -0
- package/lib/orbit_determination/BatchLeastSquaresOD.js.map +1 -0
- package/lib/orbit_determination/BatchLeastSquaresResult.d.ts +29 -0
- package/lib/orbit_determination/BatchLeastSquaresResult.js +31 -0
- package/lib/orbit_determination/BatchLeastSquaresResult.js.map +1 -0
- package/lib/orbit_determination/GibbsIOD.d.ts +33 -0
- package/lib/orbit_determination/GibbsIOD.js +70 -0
- package/lib/orbit_determination/GibbsIOD.js.map +1 -0
- package/lib/orbit_determination/GoodingIOD.d.ts +52 -0
- package/lib/orbit_determination/GoodingIOD.js +244 -0
- package/lib/orbit_determination/GoodingIOD.js.map +1 -0
- package/lib/{objects/space-object.d.ts → orbit_determination/HerrickGibbsIOD.d.ts} +17 -22
- package/lib/orbit_determination/HerrickGibbsIOD.js +49 -0
- package/lib/orbit_determination/HerrickGibbsIOD.js.map +1 -0
- package/lib/orbit_determination/LambertIOD.d.ts +46 -0
- package/lib/orbit_determination/LambertIOD.js +199 -0
- package/lib/orbit_determination/LambertIOD.js.map +1 -0
- package/lib/orbit_determination/ModifiedGoodingIOD.d.ts +41 -0
- package/lib/orbit_determination/ModifiedGoodingIOD.js +82 -0
- package/lib/orbit_determination/ModifiedGoodingIOD.js.map +1 -0
- package/lib/propagator/DormandPrince54Propagator.d.ts +29 -0
- package/lib/propagator/DormandPrince54Propagator.js +68 -0
- package/lib/propagator/DormandPrince54Propagator.js.map +1 -0
- package/lib/propagator/KeplerPropagator.d.ts +36 -0
- package/lib/propagator/KeplerPropagator.js +81 -0
- package/lib/propagator/KeplerPropagator.js.map +1 -0
- package/lib/propagator/Propagator.d.ts +35 -0
- package/lib/propagator/Propagator.js +163 -0
- package/lib/propagator/Propagator.js.map +1 -0
- package/lib/propagator/RkCheckpoint.d.ts +23 -0
- package/lib/propagator/RkCheckpoint.js +26 -0
- package/lib/propagator/RkCheckpoint.js.map +1 -0
- package/lib/propagator/RkResult.d.ts +24 -0
- package/lib/propagator/RkResult.js +28 -0
- package/lib/propagator/RkResult.js.map +1 -0
- package/lib/propagator/RungeKutta4Propagator.d.ts +46 -0
- package/lib/propagator/RungeKutta4Propagator.js +132 -0
- package/lib/propagator/RungeKutta4Propagator.js.map +1 -0
- package/lib/propagator/RungeKutta89Propagator.d.ts +29 -0
- package/lib/propagator/RungeKutta89Propagator.js +130 -0
- package/lib/propagator/RungeKutta89Propagator.js.map +1 -0
- package/lib/propagator/RungeKuttaAdaptive.d.ts +52 -0
- package/lib/propagator/RungeKuttaAdaptive.js +152 -0
- package/lib/propagator/RungeKuttaAdaptive.js.map +1 -0
- package/lib/propagator/Sgp4Propagator.d.ts +35 -0
- package/lib/propagator/Sgp4Propagator.js +55 -0
- package/lib/propagator/Sgp4Propagator.js.map +1 -0
- package/lib/smoothing/ExponentialSmoothing.d.ts +24 -0
- package/lib/smoothing/ExponentialSmoothing.js +82 -0
- package/lib/smoothing/ExponentialSmoothing.js.map +1 -0
- package/lib/types/types.d.ts +65 -584
- package/lib/types/types.js +21 -33
- package/lib/types/types.js.map +1 -1
- package/package.json +16 -14
- package/.prettierrc +0 -17
- package/babel.config.js +0 -16
- package/codecov.yml +0 -21
- package/dist/objects/base-object.d.ts +0 -40
- package/dist/objects/detailed-sat.d.ts +0 -66
- package/dist/objects/index.d.ts +0 -4
- package/dist/objects/sat.d.ts +0 -92
- package/dist/objects/sensor.d.ts +0 -93
- package/dist/objects/star.d.ts +0 -46
- package/dist/ootk.js +0 -2
- package/dist/ootk.js.LICENSE.txt +0 -77
- package/dist/sgp4/sgp4.d.ts +0 -82
- package/dist/tle/tle-format-data.d.ts +0 -6
- package/dist/tle/tle.d.ts +0 -375
- package/dist/transforms/transforms.d.ts +0 -94
- package/dist/types/types.d.ts +0 -605
- package/dist/utils/constants.d.ts +0 -34
- package/dist/utils/moon-math.d.ts +0 -113
- package/dist/utils/sun-math.d.ts +0 -230
- package/dist/utils/utils.d.ts +0 -39
- package/lib/objects/base-object.d.ts +0 -40
- package/lib/objects/base-object.js +0 -79
- package/lib/objects/base-object.js.map +0 -1
- package/lib/objects/detailed-sat.d.ts +0 -66
- package/lib/objects/detailed-sat.js +0 -149
- package/lib/objects/detailed-sat.js.map +0 -1
- package/lib/objects/sat.d.ts +0 -92
- package/lib/objects/sat.js +0 -188
- package/lib/objects/sat.js.map +0 -1
- package/lib/objects/sensor.d.ts +0 -93
- package/lib/objects/sensor.js +0 -273
- package/lib/objects/sensor.js.map +0 -1
- package/lib/objects/space-object.js +0 -60
- package/lib/objects/space-object.js.map +0 -1
- package/lib/objects/star.d.ts +0 -46
- package/lib/objects/star.js +0 -91
- package/lib/objects/star.js.map +0 -1
- package/lib/sgp4/sgp4.d.ts +0 -82
- package/lib/sgp4/sgp4.js +0 -3262
- package/lib/sgp4/sgp4.js.map +0 -1
- package/lib/tle/tle-format-data.d.ts +0 -6
- package/lib/tle/tle-format-data.js +0 -10
- package/lib/tle/tle-format-data.js.map +0 -1
- package/lib/tle/tle.d.ts +0 -375
- package/lib/tle/tle.js +0 -611
- package/lib/tle/tle.js.map +0 -1
- package/lib/transforms/transforms.d.ts +0 -94
- package/lib/transforms/transforms.js +0 -308
- package/lib/transforms/transforms.js.map +0 -1
- package/lib/utils/constants.d.ts +0 -34
- package/lib/utils/constants.js +0 -35
- package/lib/utils/constants.js.map +0 -1
- package/lib/utils/moon-math.d.ts +0 -113
- package/lib/utils/moon-math.js +0 -387
- package/lib/utils/moon-math.js.map +0 -1
- package/lib/utils/sun-math.d.ts +0 -230
- package/lib/utils/sun-math.js +0 -422
- package/lib/utils/sun-math.js.map +0 -1
- package/lib/utils/utils.d.ts +0 -39
- package/lib/utils/utils.js +0 -102
- package/lib/utils/utils.js.map +0 -1
- package/sandbox.html +0 -8
- package/tsconfig.base.json +0 -31
- package/tsconfig.build.json +0 -14
- /package/{LICENSE.MD → LICENSE.md} +0 -0
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @author @thkruz Theodore Kruczek
|
|
3
|
+
*
|
|
4
|
+
* @license AGPL-3.0-or-later
|
|
5
|
+
* @Copyright (c) 2020-2024 Theodore Kruczek
|
|
6
|
+
*
|
|
7
|
+
* Orbital Object ToolKit is free software: you can redistribute it and/or modify it under the
|
|
8
|
+
* terms of the GNU Affero General Public License as published by the Free Software
|
|
9
|
+
* Foundation, either version 3 of the License, or (at your option) any later version.
|
|
10
|
+
*
|
|
11
|
+
* Orbital Object ToolKit is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
|
12
|
+
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
13
|
+
* See the GNU Affero General Public License for more details.
|
|
14
|
+
*
|
|
15
|
+
* You should have received a copy of the GNU Affero General Public License along with
|
|
16
|
+
* Orbital Object ToolKit. If not, see <http://www.gnu.org/licenses/>.
|
|
17
|
+
*/
|
|
18
|
+
import { EpochUTC, J2000 } 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
|
+
export declare class RungeKutta4Propagator extends Propagator {
|
|
24
|
+
private _initState;
|
|
25
|
+
private _forceModel;
|
|
26
|
+
private _stepSize;
|
|
27
|
+
private _cacheState;
|
|
28
|
+
private _checkpoints;
|
|
29
|
+
/**
|
|
30
|
+
* Create a new [RungeKutta4Propagator] object from an initial state vector and
|
|
31
|
+
* along with an optional [ForceModel] and [stepSize] in seconds.
|
|
32
|
+
*/
|
|
33
|
+
constructor(_initState: J2000, _forceModel?: ForceModel, _stepSize?: number, _cacheState?: J2000, _checkpoints?: J2000[]);
|
|
34
|
+
setStepSize(seconds: number): void;
|
|
35
|
+
setForceModel(forceModel: ForceModel): void;
|
|
36
|
+
ephemerisManeuver(start: EpochUTC, finish: EpochUTC, maneuvers: Thrust[], interval?: number): VerletBlendInterpolator;
|
|
37
|
+
maneuver(maneuver: Thrust, interval?: number): J2000[];
|
|
38
|
+
private _kFn;
|
|
39
|
+
private _integrate;
|
|
40
|
+
propagate(epoch: EpochUTC): J2000;
|
|
41
|
+
reset(): void;
|
|
42
|
+
get state(): J2000;
|
|
43
|
+
checkpoint(): number;
|
|
44
|
+
clearCheckpoints(): void;
|
|
45
|
+
restore(index: number): void;
|
|
46
|
+
}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @author @thkruz Theodore Kruczek
|
|
3
|
+
*
|
|
4
|
+
* @license AGPL-3.0-or-later
|
|
5
|
+
* @Copyright (c) 2020-2024 Theodore Kruczek
|
|
6
|
+
*
|
|
7
|
+
* Orbital Object ToolKit is free software: you can redistribute it and/or modify it under the
|
|
8
|
+
* terms of the GNU Affero General Public License as published by the Free Software
|
|
9
|
+
* Foundation, either version 3 of the License, or (at your option) any later version.
|
|
10
|
+
*
|
|
11
|
+
* Orbital Object ToolKit is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
|
12
|
+
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
13
|
+
* See the GNU Affero General Public License for more details.
|
|
14
|
+
*
|
|
15
|
+
* You should have received a copy of the GNU Affero General Public License along with
|
|
16
|
+
* Orbital Object ToolKit. If not, see <http://www.gnu.org/licenses/>.
|
|
17
|
+
*/
|
|
18
|
+
import { J2000, Vector } from 'ootk-core';
|
|
19
|
+
import { ForceModel } from '../force/ForceModel';
|
|
20
|
+
import { VerletBlendInterpolator } from '../interpolator/VerletBlendInterpolator';
|
|
21
|
+
import { Propagator } from './Propagator';
|
|
22
|
+
// / Runge-Kutta 4 fixed numerical propagator.
|
|
23
|
+
export class RungeKutta4Propagator extends Propagator {
|
|
24
|
+
/**
|
|
25
|
+
* Create a new [RungeKutta4Propagator] object from an initial state vector and
|
|
26
|
+
* along with an optional [ForceModel] and [stepSize] in seconds.
|
|
27
|
+
*/
|
|
28
|
+
constructor(_initState, _forceModel = new ForceModel().setGravity(), _stepSize = 15.0, _cacheState = _initState, _checkpoints = []) {
|
|
29
|
+
super();
|
|
30
|
+
this._initState = _initState;
|
|
31
|
+
this._forceModel = _forceModel;
|
|
32
|
+
this._stepSize = _stepSize;
|
|
33
|
+
this._cacheState = _cacheState;
|
|
34
|
+
this._checkpoints = _checkpoints;
|
|
35
|
+
this._stepSize = Math.abs(_stepSize);
|
|
36
|
+
}
|
|
37
|
+
// / Set the integrator step size to the provided number of [seconds].
|
|
38
|
+
setStepSize(seconds) {
|
|
39
|
+
this._stepSize = Math.abs(seconds);
|
|
40
|
+
}
|
|
41
|
+
// / Set numerical integration force model.
|
|
42
|
+
setForceModel(forceModel) {
|
|
43
|
+
this._forceModel = forceModel;
|
|
44
|
+
}
|
|
45
|
+
ephemerisManeuver(start, finish, maneuvers, interval = 60.0) {
|
|
46
|
+
const tMvr = maneuvers.slice(0).filter((mvr) => mvr.start >= start || mvr.stop <= finish);
|
|
47
|
+
const ephemeris = [];
|
|
48
|
+
if (tMvr[0].start > start) {
|
|
49
|
+
ephemeris.push(this.propagate(start));
|
|
50
|
+
}
|
|
51
|
+
for (const mvr of tMvr) {
|
|
52
|
+
while (this._cacheState.epoch < mvr.start) {
|
|
53
|
+
const step = Math.min(mvr.start.difference(this._cacheState.epoch), interval);
|
|
54
|
+
this.propagate(this._cacheState.epoch.roll(step));
|
|
55
|
+
if (this._cacheState.epoch.posix !== mvr.start.posix) {
|
|
56
|
+
ephemeris.push(this._cacheState);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
ephemeris.push(...this.maneuver(mvr, interval));
|
|
60
|
+
}
|
|
61
|
+
while (this._cacheState.epoch.posix < finish.posix) {
|
|
62
|
+
const step = Math.min(finish.difference(this._cacheState.epoch), interval);
|
|
63
|
+
this.propagate(this._cacheState.epoch.roll(step));
|
|
64
|
+
ephemeris.push(this._cacheState);
|
|
65
|
+
}
|
|
66
|
+
return new VerletBlendInterpolator(ephemeris);
|
|
67
|
+
}
|
|
68
|
+
maneuver(maneuver, interval = 60.0) {
|
|
69
|
+
if (maneuver.isImpulsive) {
|
|
70
|
+
this._cacheState = maneuver.apply(this.propagate(maneuver.center));
|
|
71
|
+
return [this._cacheState];
|
|
72
|
+
}
|
|
73
|
+
let tState = this.propagate(maneuver.start);
|
|
74
|
+
this._forceModel.loadManeuver(maneuver);
|
|
75
|
+
const ephemeris = [tState];
|
|
76
|
+
while (tState.epoch < maneuver.stop) {
|
|
77
|
+
const step = Math.min(maneuver.stop.difference(tState.epoch), interval);
|
|
78
|
+
tState = this.propagate(tState.epoch.roll(step));
|
|
79
|
+
ephemeris.push(tState);
|
|
80
|
+
}
|
|
81
|
+
this._forceModel.clearManeuver();
|
|
82
|
+
return ephemeris;
|
|
83
|
+
}
|
|
84
|
+
_kFn(state, hArg, kArg) {
|
|
85
|
+
const epoch = state.epoch.roll(hArg);
|
|
86
|
+
const posvel = state.position.join(state.velocity);
|
|
87
|
+
const result = posvel.add(kArg);
|
|
88
|
+
const sample = new J2000(epoch, result.toVector3D(0), result.toVector3D(3));
|
|
89
|
+
return this._forceModel.derivative(sample);
|
|
90
|
+
}
|
|
91
|
+
_integrate(state, step) {
|
|
92
|
+
const k1 = this._kFn(state, 0, Vector.zero(6)).scale(step);
|
|
93
|
+
const k2 = this._kFn(state, 0.5 * step, k1.scale(0.5)).scale(step);
|
|
94
|
+
const k3 = this._kFn(state, 0.5 * step, k2.scale(0.5)).scale(step);
|
|
95
|
+
const k4 = this._kFn(state, step, k3).scale(step);
|
|
96
|
+
const v1 = k1;
|
|
97
|
+
const v2 = v1.add(k2.scale(2));
|
|
98
|
+
const v3 = v2.add(k3.scale(2));
|
|
99
|
+
const v4 = v3.add(k4);
|
|
100
|
+
const tNext = state.epoch.roll(step);
|
|
101
|
+
const posvel = state.position.join(state.velocity);
|
|
102
|
+
const result = posvel.add(v4.scale(1 / 6));
|
|
103
|
+
return new J2000(tNext, result.toVector3D(0), result.toVector3D(3));
|
|
104
|
+
}
|
|
105
|
+
propagate(epoch) {
|
|
106
|
+
let delta = epoch.difference(this._cacheState.epoch);
|
|
107
|
+
while (delta !== 0) {
|
|
108
|
+
const direction = delta >= 0 ? 1 : -1;
|
|
109
|
+
const dt = Math.min(Math.abs(delta), this._stepSize) * direction;
|
|
110
|
+
this._cacheState = this._integrate(this._cacheState, dt);
|
|
111
|
+
delta = epoch.difference(this._cacheState.epoch);
|
|
112
|
+
}
|
|
113
|
+
return this._cacheState;
|
|
114
|
+
}
|
|
115
|
+
reset() {
|
|
116
|
+
this._cacheState = this._initState;
|
|
117
|
+
}
|
|
118
|
+
get state() {
|
|
119
|
+
return this._cacheState;
|
|
120
|
+
}
|
|
121
|
+
checkpoint() {
|
|
122
|
+
this._checkpoints.push(this._cacheState);
|
|
123
|
+
return this._checkpoints.length - 1;
|
|
124
|
+
}
|
|
125
|
+
clearCheckpoints() {
|
|
126
|
+
this._checkpoints = [];
|
|
127
|
+
}
|
|
128
|
+
restore(index) {
|
|
129
|
+
this._cacheState = this._checkpoints[index];
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=RungeKutta4Propagator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RungeKutta4Propagator.js","sourceRoot":"","sources":["../../src/propagator/RungeKutta4Propagator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @author @thkruz Theodore Kruczek
|
|
3
|
+
*
|
|
4
|
+
* @license AGPL-3.0-or-later
|
|
5
|
+
* @Copyright (c) 2020-2024 Theodore Kruczek
|
|
6
|
+
*
|
|
7
|
+
* Orbital Object ToolKit is free software: you can redistribute it and/or modify it under the
|
|
8
|
+
* terms of the GNU Affero General Public License as published by the Free Software
|
|
9
|
+
* Foundation, either version 3 of the License, or (at your option) any later version.
|
|
10
|
+
*
|
|
11
|
+
* Orbital Object ToolKit is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
|
12
|
+
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
13
|
+
* See the GNU Affero General Public License for more details.
|
|
14
|
+
*
|
|
15
|
+
* You should have received a copy of the GNU Affero General Public License along with
|
|
16
|
+
* Orbital Object ToolKit. If not, see <http://www.gnu.org/licenses/>.
|
|
17
|
+
*/
|
|
18
|
+
import { RungeKuttaAdaptive } from './RungeKuttaAdaptive';
|
|
19
|
+
export declare class RungeKutta89Propagator extends RungeKuttaAdaptive {
|
|
20
|
+
private a_;
|
|
21
|
+
private b_;
|
|
22
|
+
private ch_;
|
|
23
|
+
private c_;
|
|
24
|
+
get a(): Float64Array;
|
|
25
|
+
get b(): Float64Array[];
|
|
26
|
+
get ch(): Float64Array;
|
|
27
|
+
get c(): Float64Array;
|
|
28
|
+
get order(): number;
|
|
29
|
+
}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @author @thkruz Theodore Kruczek
|
|
3
|
+
*
|
|
4
|
+
* @license AGPL-3.0-or-later
|
|
5
|
+
* @Copyright (c) 2020-2024 Theodore Kruczek
|
|
6
|
+
*
|
|
7
|
+
* Orbital Object ToolKit is free software: you can redistribute it and/or modify it under the
|
|
8
|
+
* terms of the GNU Affero General Public License as published by the Free Software
|
|
9
|
+
* Foundation, either version 3 of the License, or (at your option) any later version.
|
|
10
|
+
*
|
|
11
|
+
* Orbital Object ToolKit is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
|
12
|
+
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
13
|
+
* See the GNU Affero General Public License for more details.
|
|
14
|
+
*
|
|
15
|
+
* You should have received a copy of the GNU Affero General Public License along with
|
|
16
|
+
* Orbital Object ToolKit. If not, see <http://www.gnu.org/licenses/>.
|
|
17
|
+
*/
|
|
18
|
+
/* eslint-disable @typescript-eslint/no-loss-of-precision */
|
|
19
|
+
/* eslint-disable class-methods-use-this */
|
|
20
|
+
import { RungeKuttaAdaptive } from './RungeKuttaAdaptive';
|
|
21
|
+
// / Runge-Kutta 8(9) adaptive numerical propagator.
|
|
22
|
+
export class RungeKutta89Propagator extends RungeKuttaAdaptive {
|
|
23
|
+
constructor() {
|
|
24
|
+
super(...arguments);
|
|
25
|
+
this.a_ = Float64Array.from([
|
|
26
|
+
0.0, 0.3462e-1, 0.9702435063878044594828361677100617517633e-1, 0.1455365259581706689224254251565092627645, 0.561,
|
|
27
|
+
0.2290079115904850126662751771814700052182, 0.5449920884095149873337248228185299947818, 0.645, 0.48375, 0.6757e-1,
|
|
28
|
+
0.25, 0.6590650618730998549405331618649220295334, 0.8206, 0.9012, 1.0, 1.0,
|
|
29
|
+
]);
|
|
30
|
+
this.b_ = [
|
|
31
|
+
new Float64Array(0),
|
|
32
|
+
Float64Array.from([0.3462e-1]),
|
|
33
|
+
Float64Array.from([-0.389335438857287327017042687229284478532e-1, 0.1359578945245091786499878854939346230295]),
|
|
34
|
+
Float64Array.from([0.3638413148954266723060635628912731569111e-1, 0.0, 0.1091523944686280016918190688673819470733]),
|
|
35
|
+
Float64Array.from([
|
|
36
|
+
2.025763914393969636805657604282571047511, 0.0, -7.638023836496292020387602153091964592952,
|
|
37
|
+
6.173259922102322383581944548809393545442,
|
|
38
|
+
]),
|
|
39
|
+
Float64Array.from([
|
|
40
|
+
0.5112275589406060872792270881648288397197e-1, 0.0, 0.0, 0.1770823794555021537929910813839068684087,
|
|
41
|
+
0.80277624092225014536138698108025283759e-3,
|
|
42
|
+
]),
|
|
43
|
+
Float64Array.from([
|
|
44
|
+
0.1316006357975216279279871693164256985334, 0.0, 0.0, -0.2957276252669636417685183174672273730699,
|
|
45
|
+
0.878137803564295237421124704053886667082e-1, 0.62130529752252747743214350056394300261,
|
|
46
|
+
]),
|
|
47
|
+
Float64Array.from([
|
|
48
|
+
0.7166666666666666666666666666666666666667e-1, 0.0, 0.0, 0.0, 0.0, 0.3305533578915319409260346730051472207728,
|
|
49
|
+
0.2427799754418013924072986603281861125606,
|
|
50
|
+
]),
|
|
51
|
+
Float64Array.from([
|
|
52
|
+
0.71806640625e-1, 0.0, 0.0, 0.0, 0.0, 0.3294380283228177160744825466257672816401,
|
|
53
|
+
0.1165190029271822839255174533742327183599, -0.34013671875e-1,
|
|
54
|
+
]),
|
|
55
|
+
Float64Array.from([
|
|
56
|
+
0.4836757646340646986611287718844085773549e-1, 0.0, 0.0, 0.0, 0.0, 0.3928989925676163974333190042057047002852e-1,
|
|
57
|
+
0.1054740945890344608263649267140088017604, -0.2143865284648312665982642293830533996214e-1,
|
|
58
|
+
-0.1041229174627194437759832813847147895623,
|
|
59
|
+
]),
|
|
60
|
+
Float64Array.from([
|
|
61
|
+
-0.2664561487201478635337289243849737340534e-1, 0.0, 0.0, 0.0, 0.0, 0.3333333333333333333333333333333333333333e-1,
|
|
62
|
+
-0.1631072244872467239162704487554706387141, 0.3396081684127761199487954930015522928244e-1,
|
|
63
|
+
0.1572319413814626097110769806810024118077, 0.215226747803187955230353477879477037696,
|
|
64
|
+
]),
|
|
65
|
+
Float64Array.from([
|
|
66
|
+
0.3689009248708622334786359863227633989718e-1, 0.0, 0.0, 0.0, 0.0, -0.1465181576725542928653609891758501156785,
|
|
67
|
+
0.2242577768172024345345469822625833796001, 0.2294405717066072637090897902753790803034e-1,
|
|
68
|
+
-0.35850052905728761357394424889330334334e-2, 0.8669223316444385506869203619044453906053e-1,
|
|
69
|
+
0.4383840651968337846196219974168630120572,
|
|
70
|
+
]),
|
|
71
|
+
Float64Array.from([
|
|
72
|
+
-0.4866012215113340846662212357570395295088, 0.0, 0.0, 0.0, 0.0, -6.304602650282852990657772792012007122988,
|
|
73
|
+
-0.281245618289472564778284183790118418111, -2.679019236219849057687906597489223155566,
|
|
74
|
+
0.518815663924157511565311164615012522024, 1.365353187603341710683633635235238678626,
|
|
75
|
+
5.885091088503946585721274891680604830712, 2.802808786272062889819965117517532194812,
|
|
76
|
+
]),
|
|
77
|
+
Float64Array.from([
|
|
78
|
+
0.4185367457753471441471025246471931649633, 0.0, 0.0, 0.0, 0.0, 6.724547581906459363100870806514855026676,
|
|
79
|
+
-0.425444280164611790606983409697113064616, 3.343279153001265577811816947557982637749,
|
|
80
|
+
0.617081663117537759528421117507709784737, -0.929966123939932833937749523988800852013,
|
|
81
|
+
-6.099948804751010722472962837945508844846, -3.002206187889399044804158084895173690015,
|
|
82
|
+
0.2553202529443445472336424602988558373637,
|
|
83
|
+
]),
|
|
84
|
+
Float64Array.from([
|
|
85
|
+
-0.779374086122884664644623040843840506343, 0.0, 0.0, 0.0, 0.0, -13.93734253810777678786523664804936051203,
|
|
86
|
+
1.252048853379357320949735183924200895136, -14.69150040801686878191527989293072091588,
|
|
87
|
+
-0.494705058533141685655191992136962873577, 2.242974909146236657906984549543692874755,
|
|
88
|
+
13.36789380382864375813864978592679139881, 14.39665048665068644512236935340272139005,
|
|
89
|
+
-0.7975813331776800379127866056663258667437, 0.4409353709534277758753793068298041158235,
|
|
90
|
+
]),
|
|
91
|
+
Float64Array.from([
|
|
92
|
+
2.058051337466886442151242368989994043993, 0.0, 0.0, 0.0, 0.0, 22.35793772796803295519317565842520212899,
|
|
93
|
+
0.90949810997556332745009198137971890783, 35.89110098240264104710550686568482456493,
|
|
94
|
+
-3.442515027624453437985000403608480262211, -4.865481358036368826566013387928704014496,
|
|
95
|
+
-18.90980381354342625688427480879773032857, -34.26354448030451782929251177395134170515,
|
|
96
|
+
1.264756521695642578827783499806516664686, 0.0, 0.0,
|
|
97
|
+
]),
|
|
98
|
+
];
|
|
99
|
+
this.ch_ = Float64Array.from([
|
|
100
|
+
0.1996996514886773085518508418098868756464e-1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
|
|
101
|
+
2.191499304949330054530747099310837524864, 0.8857071848208438030833722031786358862953e-1,
|
|
102
|
+
0.1140560234865965622484956605091432032674, 0.2533163805345107065564577734569651977347,
|
|
103
|
+
-2.056564386240941011158999594595981300493, 0.340809679901311993516009489422454381283, 0.0, 0.0,
|
|
104
|
+
0.4834231373823958314376726739772871714902e-1,
|
|
105
|
+
]);
|
|
106
|
+
this.c_ = Float64Array.from([
|
|
107
|
+
0.1461197685842315252051541915018784713459e-1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
|
|
108
|
+
-0.391521186233133908941022826728824203081, 0.2310932500289506415909675644868993669908,
|
|
109
|
+
0.1274766769992852382560589467488989175618, 0.2246434176204157731566981937082069688984,
|
|
110
|
+
0.5684352689748512932705226972873692126743, 0.5825871557215827200814768021863420902155e-1,
|
|
111
|
+
0.1364317403482215641609022744494239843327, 0.3057013983082797397721005067920369646664e-1, 0.0,
|
|
112
|
+
]);
|
|
113
|
+
}
|
|
114
|
+
get a() {
|
|
115
|
+
return this.a_;
|
|
116
|
+
}
|
|
117
|
+
get b() {
|
|
118
|
+
return this.b_;
|
|
119
|
+
}
|
|
120
|
+
get ch() {
|
|
121
|
+
return this.ch_;
|
|
122
|
+
}
|
|
123
|
+
get c() {
|
|
124
|
+
return this.c_;
|
|
125
|
+
}
|
|
126
|
+
get order() {
|
|
127
|
+
return 8;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=RungeKutta89Propagator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RungeKutta89Propagator.js","sourceRoot":"","sources":["../../src/propagator/RungeKutta89Propagator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @author @thkruz Theodore Kruczek
|
|
3
|
+
*
|
|
4
|
+
* @license AGPL-3.0-or-later
|
|
5
|
+
* @Copyright (c) 2020-2024 Theodore Kruczek
|
|
6
|
+
*
|
|
7
|
+
* Orbital Object ToolKit is free software: you can redistribute it and/or modify it under the
|
|
8
|
+
* terms of the GNU Affero General Public License as published by the Free Software
|
|
9
|
+
* Foundation, either version 3 of the License, or (at your option) any later version.
|
|
10
|
+
*
|
|
11
|
+
* Orbital Object ToolKit is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
|
12
|
+
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
13
|
+
* See the GNU Affero General Public License for more details.
|
|
14
|
+
*
|
|
15
|
+
* You should have received a copy of the GNU Affero General Public License along with
|
|
16
|
+
* Orbital Object ToolKit. If not, see <http://www.gnu.org/licenses/>.
|
|
17
|
+
*/
|
|
18
|
+
import { EpochUTC, J2000 } 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
|
+
export declare abstract class RungeKuttaAdaptive extends Propagator {
|
|
24
|
+
private _initState;
|
|
25
|
+
private _forceModel;
|
|
26
|
+
private _tolerance;
|
|
27
|
+
/**
|
|
28
|
+
* Create a new [RungeKuttaAdaptive] object from an initial state vector
|
|
29
|
+
* along with an optional [ForceModel] and [tolerance].
|
|
30
|
+
*/
|
|
31
|
+
constructor(_initState: J2000, _forceModel?: ForceModel, _tolerance?: number);
|
|
32
|
+
private _cacheState;
|
|
33
|
+
private readonly _checkpoints;
|
|
34
|
+
private _stepSize;
|
|
35
|
+
private static readonly _minTolerance;
|
|
36
|
+
protected abstract get a(): Float64Array;
|
|
37
|
+
protected abstract get b(): Float64Array[];
|
|
38
|
+
protected abstract get ch(): Float64Array;
|
|
39
|
+
protected abstract get c(): Float64Array;
|
|
40
|
+
protected abstract get order(): number;
|
|
41
|
+
get state(): J2000;
|
|
42
|
+
reset(): void;
|
|
43
|
+
setForceModel(forceModel: ForceModel): void;
|
|
44
|
+
private _kfn;
|
|
45
|
+
private _integrate;
|
|
46
|
+
propagate(epoch: EpochUTC): J2000;
|
|
47
|
+
maneuver(maneuver: Thrust, interval?: number): J2000[];
|
|
48
|
+
ephemerisManeuver(start: EpochUTC, finish: EpochUTC, maneuvers: Thrust[], interval?: number): VerletBlendInterpolator;
|
|
49
|
+
checkpoint(): number;
|
|
50
|
+
clearCheckpoints(): void;
|
|
51
|
+
restore(index: number): void;
|
|
52
|
+
}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @author @thkruz Theodore Kruczek
|
|
3
|
+
*
|
|
4
|
+
* @license AGPL-3.0-or-later
|
|
5
|
+
* @Copyright (c) 2020-2024 Theodore Kruczek
|
|
6
|
+
*
|
|
7
|
+
* Orbital Object ToolKit is free software: you can redistribute it and/or modify it under the
|
|
8
|
+
* terms of the GNU Affero General Public License as published by the Free Software
|
|
9
|
+
* Foundation, either version 3 of the License, or (at your option) any later version.
|
|
10
|
+
*
|
|
11
|
+
* Orbital Object ToolKit is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
|
12
|
+
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
13
|
+
* See the GNU Affero General Public License for more details.
|
|
14
|
+
*
|
|
15
|
+
* You should have received a copy of the GNU Affero General Public License along with
|
|
16
|
+
* Orbital Object ToolKit. If not, see <http://www.gnu.org/licenses/>.
|
|
17
|
+
*/
|
|
18
|
+
import { J2000, Vector } from 'ootk-core';
|
|
19
|
+
import { ForceModel } from '../force/ForceModel';
|
|
20
|
+
import { VerletBlendInterpolator } from './../interpolator/VerletBlendInterpolator';
|
|
21
|
+
import { Propagator } from './Propagator';
|
|
22
|
+
import { RkCheckpoint } from './RkCheckpoint';
|
|
23
|
+
import { RkResult } from './RkResult';
|
|
24
|
+
// / Adaptive Runge-Kutta propagator base class.
|
|
25
|
+
export class RungeKuttaAdaptive extends Propagator {
|
|
26
|
+
/**
|
|
27
|
+
* Create a new [RungeKuttaAdaptive] object from an initial state vector
|
|
28
|
+
* along with an optional [ForceModel] and [tolerance].
|
|
29
|
+
*/
|
|
30
|
+
constructor(_initState, _forceModel = new ForceModel().setGravity(), _tolerance = 1e-9) {
|
|
31
|
+
super();
|
|
32
|
+
this._initState = _initState;
|
|
33
|
+
this._forceModel = _forceModel;
|
|
34
|
+
this._tolerance = _tolerance;
|
|
35
|
+
this._checkpoints = [];
|
|
36
|
+
// / Integration step size _(seconds)_.
|
|
37
|
+
this._stepSize = 60.0;
|
|
38
|
+
this._cacheState = this._initState;
|
|
39
|
+
this._tolerance = Math.max(RungeKuttaAdaptive._minTolerance, Math.abs(_tolerance));
|
|
40
|
+
}
|
|
41
|
+
get state() {
|
|
42
|
+
return this._cacheState;
|
|
43
|
+
}
|
|
44
|
+
reset() {
|
|
45
|
+
this._cacheState = this._initState;
|
|
46
|
+
this._stepSize = 60.0;
|
|
47
|
+
}
|
|
48
|
+
// / Set numerical integration force model.
|
|
49
|
+
setForceModel(forceModel) {
|
|
50
|
+
this._forceModel = forceModel;
|
|
51
|
+
}
|
|
52
|
+
_kfn(epoch, rv, hArg, kArg, step) {
|
|
53
|
+
const t = epoch.roll(hArg * step);
|
|
54
|
+
const rvNew = rv.add(kArg);
|
|
55
|
+
const sample = new J2000(t, rvNew.toVector3D(0), rvNew.toVector3D(3));
|
|
56
|
+
return this._forceModel.derivative(sample).scale(step);
|
|
57
|
+
}
|
|
58
|
+
_integrate(state, step) {
|
|
59
|
+
const k = new Array(this.a.length).fill(Vector.origin3);
|
|
60
|
+
const y = state.position.join(state.velocity);
|
|
61
|
+
for (let i = 0; i < this.a.length; i++) {
|
|
62
|
+
let kArg = Vector.origin6;
|
|
63
|
+
if (i !== 0) {
|
|
64
|
+
for (let j = 0; j < i; j++) {
|
|
65
|
+
kArg = kArg.add(k[j].scale(this.b[i][j]));
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
k[i] = this._kfn(state.epoch, y, this.a[i], kArg, step);
|
|
69
|
+
}
|
|
70
|
+
let y1 = y;
|
|
71
|
+
let y2 = y;
|
|
72
|
+
for (let i = 0; i < k.length; i++) {
|
|
73
|
+
y1 = y1.add(k[i].scale(this.ch[i]));
|
|
74
|
+
y2 = y2.add(k[i].scale(this.c[i]));
|
|
75
|
+
}
|
|
76
|
+
const teVal = y1.distance(y2);
|
|
77
|
+
let hNew = 0.9 * step * (this._tolerance / teVal) ** (1.0 / this.order);
|
|
78
|
+
const hOld = Math.abs(step);
|
|
79
|
+
hNew = Math.max(0.2 * hOld, Math.min(5.0 * hOld, hNew));
|
|
80
|
+
hNew = Math.max(1e-5, Math.min(1000.0, hNew));
|
|
81
|
+
return new RkResult(new J2000(state.epoch.roll(step), y1.toVector3D(0), y1.toVector3D(3)), teVal, hNew);
|
|
82
|
+
}
|
|
83
|
+
propagate(epoch) {
|
|
84
|
+
let delta = epoch.difference(this._cacheState.epoch);
|
|
85
|
+
while (delta !== 0) {
|
|
86
|
+
const direction = delta >= 0 ? 1 : -1;
|
|
87
|
+
const dt = Math.min(Math.abs(delta), this._stepSize) * direction;
|
|
88
|
+
const result = this._integrate(this._cacheState, dt);
|
|
89
|
+
this._stepSize = result.newStep;
|
|
90
|
+
if (result.error > this._tolerance) {
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
this._cacheState = result.state;
|
|
94
|
+
delta = epoch.difference(this._cacheState.epoch);
|
|
95
|
+
}
|
|
96
|
+
return this._cacheState;
|
|
97
|
+
}
|
|
98
|
+
maneuver(maneuver, interval = 60.0) {
|
|
99
|
+
if (maneuver.isImpulsive) {
|
|
100
|
+
this._cacheState = maneuver.apply(this.propagate(maneuver.center));
|
|
101
|
+
return [this._cacheState];
|
|
102
|
+
}
|
|
103
|
+
let tState = this.propagate(maneuver.start);
|
|
104
|
+
this._forceModel.loadManeuver(maneuver);
|
|
105
|
+
const ephemeris = [tState];
|
|
106
|
+
while (tState.epoch < maneuver.stop) {
|
|
107
|
+
const step = Math.min(maneuver.stop.difference(tState.epoch), interval);
|
|
108
|
+
tState = this.propagate(tState.epoch.roll(step));
|
|
109
|
+
ephemeris.push(tState);
|
|
110
|
+
}
|
|
111
|
+
this._forceModel.clearManeuver();
|
|
112
|
+
return ephemeris;
|
|
113
|
+
}
|
|
114
|
+
ephemerisManeuver(start, finish, maneuvers, interval = 60.0) {
|
|
115
|
+
const tMvr = maneuvers.filter((mvr) => mvr.start >= start || mvr.stop <= finish);
|
|
116
|
+
const ephemeris = [];
|
|
117
|
+
if (tMvr[0].start > start) {
|
|
118
|
+
ephemeris.push(this.propagate(start));
|
|
119
|
+
}
|
|
120
|
+
for (const mvr of tMvr) {
|
|
121
|
+
while (this._cacheState.epoch < mvr.start) {
|
|
122
|
+
const step = Math.min(mvr.start.difference(this._cacheState.epoch), interval);
|
|
123
|
+
this.propagate(this._cacheState.epoch.roll(step));
|
|
124
|
+
if (this._cacheState.epoch.posix !== mvr.start.posix) {
|
|
125
|
+
ephemeris.push(this._cacheState);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
ephemeris.push(...this.maneuver(mvr, interval));
|
|
129
|
+
}
|
|
130
|
+
while (this._cacheState.epoch.posix < finish.posix) {
|
|
131
|
+
const step = Math.min(finish.difference(this._cacheState.epoch), interval);
|
|
132
|
+
this.propagate(this._cacheState.epoch.roll(step));
|
|
133
|
+
ephemeris.push(this._cacheState);
|
|
134
|
+
}
|
|
135
|
+
return new VerletBlendInterpolator(ephemeris);
|
|
136
|
+
}
|
|
137
|
+
checkpoint() {
|
|
138
|
+
this._checkpoints.push(new RkCheckpoint(this._cacheState, this._stepSize));
|
|
139
|
+
return this._checkpoints.length - 1;
|
|
140
|
+
}
|
|
141
|
+
clearCheckpoints() {
|
|
142
|
+
this._checkpoints.length = 0;
|
|
143
|
+
}
|
|
144
|
+
restore(index) {
|
|
145
|
+
const checkpoint = this._checkpoints[index];
|
|
146
|
+
this._cacheState = checkpoint.cacheState;
|
|
147
|
+
this._stepSize = checkpoint.stepSize;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
// / Minimum allowable local error tolerance.
|
|
151
|
+
RungeKuttaAdaptive._minTolerance = 1e-15;
|
|
152
|
+
//# sourceMappingURL=RungeKuttaAdaptive.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RungeKuttaAdaptive.js","sourceRoot":"","sources":["../../src/propagator/RungeKuttaAdaptive.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @author @thkruz Theodore Kruczek
|
|
3
|
+
*
|
|
4
|
+
* @license AGPL-3.0-or-later
|
|
5
|
+
* @Copyright (c) 2020-2024 Theodore Kruczek
|
|
6
|
+
*
|
|
7
|
+
* Orbital Object ToolKit is free software: you can redistribute it and/or modify it under the
|
|
8
|
+
* terms of the GNU Affero General Public License as published by the Free Software
|
|
9
|
+
* Foundation, either version 3 of the License, or (at your option) any later version.
|
|
10
|
+
*
|
|
11
|
+
* Orbital Object ToolKit is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
|
12
|
+
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
13
|
+
* See the GNU Affero General Public License for more details.
|
|
14
|
+
*
|
|
15
|
+
* You should have received a copy of the GNU Affero General Public License along with
|
|
16
|
+
* Orbital Object ToolKit. If not, see <http://www.gnu.org/licenses/>.
|
|
17
|
+
*/
|
|
18
|
+
import { EpochUTC, J2000, TLE } from 'ootk-core';
|
|
19
|
+
import { Thrust } from '../force/Thrust';
|
|
20
|
+
import { VerletBlendInterpolator } from '../interpolator/VerletBlendInterpolator';
|
|
21
|
+
import { Propagator } from './Propagator';
|
|
22
|
+
export declare class Sgp4Propagator extends Propagator {
|
|
23
|
+
private tle;
|
|
24
|
+
constructor(tle: TLE);
|
|
25
|
+
private _cacheState;
|
|
26
|
+
private _checkpoints;
|
|
27
|
+
get state(): J2000;
|
|
28
|
+
ephemerisManeuver(start: EpochUTC, finish: EpochUTC, maneuvers: Thrust[], interval?: number): VerletBlendInterpolator;
|
|
29
|
+
maneuver(maneuver: Thrust, interval?: number): J2000[];
|
|
30
|
+
propagate(epoch: EpochUTC): J2000;
|
|
31
|
+
reset(): void;
|
|
32
|
+
checkpoint(): number;
|
|
33
|
+
clearCheckpoints(): void;
|
|
34
|
+
restore(index: number): void;
|
|
35
|
+
}
|