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