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 java.util.ArrayList;
20 import java.util.List;
21
22 import org.hipparchus.analysis.differentiation.DSFactory;
23 import org.hipparchus.analysis.differentiation.DerivativeStructure;
24 import org.orekit.attitudes.AttitudeProvider;
25 import org.orekit.attitudes.FieldAttitude;
26 import org.orekit.orbits.FieldEquinoctialOrbit;
27 import org.orekit.orbits.FieldOrbit;
28 import org.orekit.orbits.PositionAngle;
29 import org.orekit.propagation.FieldSpacecraftState;
30 import org.orekit.propagation.SpacecraftState;
31 import org.orekit.propagation.integration.AbstractDSConverter;
32 import org.orekit.propagation.semianalytical.dsst.forces.DSSTForceModel;
33 import org.orekit.time.AbsoluteDate;
34 import org.orekit.time.FieldAbsoluteDate;
35 import org.orekit.utils.FieldAngularCoordinates;
36 import org.orekit.utils.ParameterDriver;
37 import org.orekit.utils.TimeStampedFieldAngularCoordinates;
38
39
40
41
42
43
44
45 @Deprecated
46 class DSSTDSConverter extends AbstractDSConverter {
47
48
49 private static final int FREE_STATE_PARAMETERS = 6;
50
51
52 private final List<FieldSpacecraftState<DerivativeStructure>> dsStates;
53
54
55
56
57
58 DSSTDSConverter(final SpacecraftState state, final AttitudeProvider provider) {
59
60 super(FREE_STATE_PARAMETERS);
61
62
63 final DSFactory factory = new DSFactory(FREE_STATE_PARAMETERS, 1);
64
65
66 final DerivativeStructure sma = factory.variable(0, state.getA());
67 final DerivativeStructure ex = factory.variable(1, state.getEquinoctialEx());
68 final DerivativeStructure ey = factory.variable(2, state.getEquinoctialEy());
69 final DerivativeStructure hx = factory.variable(3, state.getHx());
70 final DerivativeStructure hy = factory.variable(4, state.getHy());
71 final DerivativeStructure l = factory.variable(5, state.getLM());
72
73 final DerivativeStructure dsMu = factory.constant(state.getMu());
74
75
76 final AbsoluteDate date = state.getDate();
77 final FieldAbsoluteDate<DerivativeStructure> dateField = new FieldAbsoluteDate<>(sma.getField(), date);
78
79
80 final DerivativeStructure dsM = factory.constant(state.getMass());
81
82 final FieldOrbit<DerivativeStructure> dsOrbit =
83 new FieldEquinoctialOrbit<>(sma, ex, ey, hx, hy, l,
84 PositionAngle.MEAN,
85 state.getFrame(),
86 dateField,
87 dsMu);
88
89 final FieldAttitude<DerivativeStructure> dsAttitude;
90
91 dsAttitude = provider.getAttitude(dsOrbit, dsOrbit.getDate(), dsOrbit.getFrame());
92
93
94 dsStates = new ArrayList<>();
95 dsStates.add(new FieldSpacecraftState<>(dsOrbit, dsAttitude, dsM));
96
97 }
98
99
100
101
102
103 public FieldSpacecraftState<DerivativeStructure> getState(final DSSTForceModel forceModel) {
104
105
106 int nbParams = 0;
107 for (final ParameterDriver driver : forceModel.getParametersDrivers()) {
108 if (driver.isSelected()) {
109 ++nbParams;
110 }
111 }
112
113
114 while (dsStates.size() < nbParams + 1) {
115 dsStates.add(null);
116 }
117
118 if (dsStates.get(nbParams) == null) {
119
120
121 final DSFactory factory = new DSFactory(FREE_STATE_PARAMETERS + nbParams, 1);
122 final FieldSpacecraftState<DerivativeStructure> s0 = dsStates.get(0);
123
124 final FieldAbsoluteDate<DerivativeStructure> date = new FieldAbsoluteDate<>(extend(s0.getA(), factory).getField(),
125 s0.getDate().toAbsoluteDate());
126
127 final FieldOrbit<DerivativeStructure> dsOrbit =
128 new FieldEquinoctialOrbit<>(extend(s0.getA(), factory),
129 extend(s0.getEquinoctialEx(), factory),
130 extend(s0.getEquinoctialEy(), factory),
131 extend(s0.getHx(), factory),
132 extend(s0.getHy(), factory),
133 extend(s0.getLM(), factory),
134 PositionAngle.MEAN,
135 s0.getFrame(), date,
136 extend(s0.getMu(), factory));
137
138
139 final FieldAngularCoordinates<DerivativeStructure> ac0 = s0.getAttitude().getOrientation();
140 final FieldAttitude<DerivativeStructure> dsAttitude =
141 new FieldAttitude<>(s0.getAttitude().getReferenceFrame(),
142 new TimeStampedFieldAngularCoordinates<>(dsOrbit.getDate(),
143 extend(ac0.getRotation(), factory),
144 extend(ac0.getRotationRate(), factory),
145 extend(ac0.getRotationAcceleration(), factory)));
146
147
148 final DerivativeStructure dsM = extend(s0.getMass(), factory);
149
150 dsStates.set(nbParams, new FieldSpacecraftState<>(dsOrbit, dsAttitude, dsM));
151
152 }
153
154 return dsStates.get(nbParams);
155
156 }
157
158
159
160
161
162
163
164 public DerivativeStructure[] getParameters(final FieldSpacecraftState<DerivativeStructure> state,
165 final DSSTForceModel forceModel) {
166 final DSFactory factory = state.getA().getFactory();
167 final ParameterDriver[] drivers = forceModel.getParametersDrivers();
168 final DerivativeStructure[] parameters = new DerivativeStructure[drivers.length];
169 int index = FREE_STATE_PARAMETERS;
170 for (int i = 0; i < drivers.length; ++i) {
171 parameters[i] = drivers[i].isSelected() ?
172 factory.variable(index++, drivers[i].getValue()) :
173 factory.constant(drivers[i].getValue());
174 }
175 return parameters;
176 }
177
178 }