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 this.tle = propagator.getTLE();
62 this.teme = propagator.getFrame();
63 this.utc = tle.getUtc();
64 this.provider = propagator.getAttitudeProvider();
65 this.propagator = propagator;
66 }
67
68
69 @Override
70 public FieldTLEPropagator<Gradient> getPropagator() {
71
72 final FieldSpacecraftState<Gradient> state = getState(this);
73 final Gradient[] parameters = getParameters(state, tle);
74
75
76 final Gradient zero = state.getMass().getField().getZero();
77
78
79 final int satelliteNumber = tle.getSatelliteNumber();
80 final char classification = tle.getClassification();
81 final int launchYear = tle.getLaunchYear();
82 final int launchNumber = tle.getLaunchNumber();
83 final String launchPiece = tle.getLaunchPiece();
84 final int ephemerisType = tle.getEphemerisType();
85 final int elementNumber = tle.getElementNumber();
86 final int revolutionNumberAtEpoch = tle.getRevolutionNumberAtEpoch();
87 final double bStar = tle.getBStar(state.getDate().toAbsoluteDate());
88
89
90 final FieldTLE<Gradient> templateTLE = new FieldTLE<>(satelliteNumber, classification,
91 launchYear, launchNumber, launchPiece,
92 ephemerisType, elementNumber, state.getDate(),
93 zero, zero, zero, zero, zero, zero, zero, zero,
94 revolutionNumberAtEpoch, bStar, utc);
95
96
97 final TleGenerationAlgorithm algorithm = propagator.getTleGenerationAlgorithm();
98 final FieldTLE<Gradient> gTLE = algorithm.generate(state, templateTLE);
99
100
101 final FieldTLEPropagator<Gradient> fieldPropagator =
102 FieldTLEPropagator.selectExtrapolator(gTLE, provider, state.getMass(), teme, parameters);
103 fieldPropagator.setTleGenerationAlgorithm(algorithm);
104 return fieldPropagator;
105 }
106
107
108 @Override
109 public List<ParameterDriver> getParametersDrivers() {
110 return tle.getParametersDrivers();
111 }
112
113 }