1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.orekit.propagation.semianalytical.dsst;
18
19 import org.hipparchus.analysis.differentiation.Gradient;
20 import org.orekit.attitudes.AttitudeProvider;
21 import org.orekit.attitudes.FieldAttitude;
22 import org.orekit.orbits.FieldEquinoctialOrbit;
23 import org.orekit.orbits.FieldOrbit;
24 import org.orekit.orbits.Orbit;
25 import org.orekit.orbits.PositionAngleType;
26 import org.orekit.propagation.FieldSpacecraftState;
27 import org.orekit.propagation.SpacecraftState;
28 import org.orekit.propagation.integration.AbstractGradientConverter;
29 import org.orekit.time.AbsoluteDate;
30 import org.orekit.time.FieldAbsoluteDate;
31
32
33
34
35
36
37 class DSSTGradientConverter extends AbstractGradientConverter {
38
39
40 private static final int FREE_STATE_PARAMETERS = 6;
41
42
43
44
45
46 DSSTGradientConverter(final SpacecraftState state, final AttitudeProvider provider) {
47
48 super(FREE_STATE_PARAMETERS);
49
50
51 final Orbit orbit = state.getOrbit();
52 final Gradient sma = Gradient.variable(FREE_STATE_PARAMETERS, 0, orbit.getA());
53 final Gradient ex = Gradient.variable(FREE_STATE_PARAMETERS, 1, orbit.getEquinoctialEx());
54 final Gradient ey = Gradient.variable(FREE_STATE_PARAMETERS, 2, orbit.getEquinoctialEy());
55 final Gradient hx = Gradient.variable(FREE_STATE_PARAMETERS, 3, orbit.getHx());
56 final Gradient hy = Gradient.variable(FREE_STATE_PARAMETERS, 4, orbit.getHy());
57 final Gradient l = Gradient.variable(FREE_STATE_PARAMETERS, 5, orbit.getLM());
58
59 final Gradient gMu = Gradient.constant(FREE_STATE_PARAMETERS, orbit.getMu());
60
61
62 final AbsoluteDate date = state.getDate();
63 final FieldAbsoluteDate<Gradient> dateField = new FieldAbsoluteDate<>(sma.getField(), date);
64
65
66 final Gradient gM = Gradient.constant(FREE_STATE_PARAMETERS, state.getMass());
67
68 final FieldOrbit<Gradient> gOrbit =
69 new FieldEquinoctialOrbit<>(sma, ex, ey, hx, hy, l,
70 PositionAngleType.MEAN,
71 state.getFrame(),
72 dateField,
73 gMu);
74
75 final FieldAttitude<Gradient> gAttitude;
76
77 gAttitude = provider.getAttitude(gOrbit, gOrbit.getDate(), gOrbit.getFrame());
78
79
80 initStates(new FieldSpacecraftState<>(gOrbit, gAttitude).withMass(gM));
81
82 }
83
84 }