1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.orekit.propagation.semianalytical.dsst.forces;
18
19 import java.util.Collections;
20 import java.util.List;
21
22 import org.hipparchus.CalculusFieldElement;
23 import org.hipparchus.Field;
24 import org.hipparchus.util.FastMath;
25 import org.hipparchus.util.MathArrays;
26 import org.orekit.attitudes.AttitudeProvider;
27 import org.orekit.orbits.EquinoctialOrbit;
28 import org.orekit.orbits.FieldEquinoctialOrbit;
29 import org.orekit.orbits.OrbitParamsType;
30 import org.orekit.orbits.PositionAngleType;
31 import org.orekit.propagation.FieldSpacecraftState;
32 import org.orekit.propagation.PropagationType;
33 import org.orekit.propagation.SpacecraftState;
34 import org.orekit.propagation.semianalytical.dsst.DSSTPropagator;
35 import org.orekit.propagation.semianalytical.dsst.utilities.AuxiliaryElements;
36 import org.orekit.propagation.semianalytical.dsst.utilities.FieldAuxiliaryElements;
37 import org.orekit.time.TimeInterval;
38 import org.orekit.utils.drivers.ParameterDriver;
39
40
41
42
43
44
45 public class DSSTNewtonianAttraction implements DSSTForceModel {
46
47
48 public static final String CENTRAL_ATTRACTION_COEFFICIENT = "central attraction coefficient";
49
50
51
52
53
54
55
56 private static final double MU_SCALE = FastMath.scalb(1.0, 32);
57
58
59 private final ParameterDriver gmParameterDriver;
60
61
62
63
64 public DSSTNewtonianAttraction(final double mu) {
65 gmParameterDriver = new ParameterDriver(DSSTNewtonianAttraction.CENTRAL_ATTRACTION_COEFFICIENT,
66 mu, MU_SCALE,
67 0.0, Double.POSITIVE_INFINITY, TimeInterval.UNLIMITED);
68 }
69
70
71
72
73 public double getMu() {
74 return gmParameterDriver.getValue();
75 }
76
77
78 @Override
79 public List<ShortPeriodTerms> initializeShortPeriodTerms(final AuxiliaryElements auxiliaryElements,
80 final PropagationType type,
81 final double[] parameters) {
82 return Collections.emptyList();
83 }
84
85
86 @Override
87 public <T extends CalculusFieldElement<T>> List<FieldShortPeriodTerms<T>>
88 initializeShortPeriodTerms(final FieldAuxiliaryElements<T> auxiliaryElements,
89 final PropagationType type,
90 final T[] parameters) {
91 return Collections.emptyList();
92 }
93
94
95
96
97
98
99
100
101
102 private DSSTNewtonianAttractionContext initializeStep(final AuxiliaryElements auxiliaryElements,
103 final double[] parameters) {
104 return new DSSTNewtonianAttractionContext(auxiliaryElements, parameters);
105 }
106
107
108
109
110
111
112
113
114
115
116 private <T extends CalculusFieldElement<T>> FieldDSSTNewtonianAttractionContext<T>
117 initializeStep(final FieldAuxiliaryElements<T> auxiliaryElements,
118 final T[] parameters) {
119 return new FieldDSSTNewtonianAttractionContext<>(auxiliaryElements, parameters);
120 }
121
122
123 @Override
124 public double[] getMeanElementRate(final SpacecraftState state,
125 final AuxiliaryElements auxiliaryElements,
126 final double[] parameters) {
127
128
129 final DSSTNewtonianAttractionContext context = initializeStep(auxiliaryElements, parameters);
130
131 final double[] yDot = new double[7];
132 final EquinoctialOrbit orbit = (EquinoctialOrbit) OrbitParamsType.EQUINOCTIAL.convertType(state.getOrbit());
133 orbit.addKeplerContribution(PositionAngleType.MEAN, context.getGM(), yDot);
134
135 return yDot;
136
137 }
138
139
140 @Override
141 public <T extends CalculusFieldElement<T>> T[] getMeanElementRate(final FieldSpacecraftState<T> state,
142 final FieldAuxiliaryElements<T> auxiliaryElements,
143 final T[] parameters) {
144
145
146 final Field<T> field = state.getMass().getField();
147
148 final FieldDSSTNewtonianAttractionContext<T> context = initializeStep(auxiliaryElements, parameters);
149
150 final T[] yDot = MathArrays.buildArray(field, 7);
151 final FieldEquinoctialOrbit<T> orbit = (FieldEquinoctialOrbit<T>) OrbitParamsType.EQUINOCTIAL.convertType(state.getOrbit());
152 orbit.addKeplerContribution(PositionAngleType.MEAN, context.getGM(), yDot);
153
154 return yDot;
155 }
156
157
158 @Override
159 public void registerAttitudeProvider(final AttitudeProvider provider) {
160
161 }
162
163
164 @Override
165 public void updateShortPeriodTerms(final double[] parameters,
166 final SpacecraftState... meanStates) {
167 }
168
169
170 @Override
171 @SuppressWarnings("unchecked")
172 public <T extends CalculusFieldElement<T>> void updateShortPeriodTerms(final T[] parameters,
173 final FieldSpacecraftState<T>... meanStates) {
174 }
175
176
177 @Override
178 public List<ParameterDriver> getParametersDrivers() {
179 return Collections.singletonList(gmParameterDriver);
180 }
181
182 }