1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.orekit.propagation.conversion.averaging.converters;
18
19 import org.orekit.forces.gravity.potential.UnnormalizedSphericalHarmonicsProvider;
20 import org.orekit.orbits.Orbit;
21 import org.orekit.propagation.SpacecraftState;
22 import org.orekit.propagation.semianalytical.dsst.DSSTPropagator;
23 import org.orekit.propagation.semianalytical.dsst.forces.DSSTForceModel;
24 import org.orekit.propagation.conversion.averaging.DSST6X0OrbitalState;
25 import org.orekit.propagation.conversion.averaging.elements.AveragedEquinoctialWithMeanAngle;
26
27 import java.util.Collection;
28
29
30
31
32
33
34
35
36
37
38 public class OsculatingToDSST6X0Converter
39 extends FixedPointOsculatingToAveragedConverter<DSST6X0OrbitalState> {
40
41
42 private final UnnormalizedSphericalHarmonicsProvider harmonicsProvider;
43
44
45
46
47
48 public OsculatingToDSST6X0Converter(final UnnormalizedSphericalHarmonicsProvider harmonicsProvider) {
49 this(DEFAULT_EPSILON, DEFAULT_MAX_ITERATIONS, harmonicsProvider);
50 }
51
52
53
54
55
56
57
58 public OsculatingToDSST6X0Converter(final double epsilon, final int maxIterations,
59 final UnnormalizedSphericalHarmonicsProvider harmonicsProvider) {
60 super(epsilon, maxIterations);
61 this.harmonicsProvider = harmonicsProvider;
62 }
63
64
65 @Override
66 public DSST6X0OrbitalState convertToAveraged(final Orbit osculatingOrbit) {
67 final Orbit averagedOrbit = createAveragedOrbit(osculatingOrbit);
68 final AveragedEquinoctialWithMeanAngle elements = buildElements(averagedOrbit);
69 return new DSST6X0OrbitalState(averagedOrbit.getDate(), elements,
70 averagedOrbit.getFrame(), harmonicsProvider);
71 }
72
73
74
75
76
77
78 private Orbit createAveragedOrbit(final Orbit osculatingOrbit) {
79 final Collection<DSSTForceModel> forceModels = DSST6X0OrbitalState
80 .createForces(harmonicsProvider);
81 final SpacecraftState osculatingState = new SpacecraftState(osculatingOrbit);
82 final SpacecraftState averagedState = DSSTPropagator.computeMeanState(osculatingState,
83 null, forceModels, getEpsilon(), getMaxIterations());
84 return averagedState.getOrbit();
85 }
86
87
88
89
90
91
92 private AveragedEquinoctialWithMeanAngle buildElements(final Orbit averagedOrbit) {
93 return new AveragedEquinoctialWithMeanAngle(averagedOrbit.getA(),
94 averagedOrbit.getEquinoctialEx(), averagedOrbit.getEquinoctialEy(),
95 averagedOrbit.getHx(), averagedOrbit.getHy(), averagedOrbit.getLM());
96 }
97
98 }