1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.orekit.propagation.analytical.tle;
18
19 import org.hipparchus.analysis.differentiation.Gradient;
20 import org.orekit.attitudes.AttitudeProvider;
21 import org.orekit.frames.Frame;
22 import org.orekit.propagation.FieldSpacecraftState;
23 import org.orekit.propagation.analytical.AbstractAnalyticalGradientConverter;
24 import org.orekit.time.TimeScale;
25 import org.orekit.utils.ParameterDriver;
26
27 import java.util.List;
28
29
30
31
32
33
34
35 class TLEGradientConverter extends AbstractAnalyticalGradientConverter {
36
37
38 public static final int FREE_STATE_PARAMETERS = 6;
39
40
41 private final TLE tle;
42
43
44 private final TimeScale utc;
45
46
47 private final Frame teme;
48
49
50 private final AttitudeProvider provider;
51
52
53
54
55 TLEGradientConverter(final TLEPropagator propagator) {
56 super(propagator, FREE_STATE_PARAMETERS);
57
58 this.tle = propagator.getTLE();
59 this.teme = propagator.getFrame();
60 this.utc = tle.getUtc();
61 this.provider = propagator.getAttitudeProvider();
62 }
63
64
65 @Override
66 public FieldTLEPropagator<Gradient> getPropagator() {
67
68 final FieldSpacecraftState<Gradient> state = getState(this);
69 final Gradient[] parameters = getParameters(state, tle);
70
71
72 final Gradient zero = state.getMass().getField().getZero();
73
74
75 final int satelliteNumber = tle.getSatelliteNumber();
76 final char classification = tle.getClassification();
77 final int launchYear = tle.getLaunchYear();
78 final int launchNumber = tle.getLaunchNumber();
79 final String launchPiece = tle.getLaunchPiece();
80 final int ephemerisType = tle.getEphemerisType();
81 final int elementNumber = tle.getElementNumber();
82 final int revolutionNumberAtEpoch = tle.getRevolutionNumberAtEpoch();
83 final double bStar = tle.getBStar(state.getDate().toAbsoluteDate());
84
85
86 final FieldTLE<Gradient> templateTLE = new FieldTLE<>(satelliteNumber, classification,
87 launchYear, launchNumber, launchPiece,
88 ephemerisType, elementNumber, state.getDate(),
89 zero, zero, zero, zero, zero, zero, zero, zero,
90 revolutionNumberAtEpoch, bStar, utc);
91
92
93 final FieldTLE<Gradient> gTLE = TLEPropagator.getDefaultTleGenerationAlgorithm(utc, teme).generate(state, templateTLE);
94
95
96 return FieldTLEPropagator.selectExtrapolator(gTLE, provider, state.getMass(), teme, parameters);
97
98 }
99
100
101 @Override
102 public List<ParameterDriver> getParametersDrivers() {
103 return tle.getParametersDrivers();
104 }
105
106 }