1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.orekit.propagation.conversion;
18
19 import org.hipparchus.geometry.euclidean.threed.Vector3D;
20 import org.junit.jupiter.api.Assertions;
21 import org.junit.jupiter.api.Test;
22 import org.orekit.estimation.Context;
23 import org.orekit.estimation.EstimationTestUtils;
24 import org.orekit.estimation.leastsquares.AbstractBatchLSModel;
25 import org.orekit.estimation.leastsquares.ModelObserver;
26 import org.orekit.estimation.measurements.ObservedMeasurement;
27 import org.orekit.frames.FramesFactory;
28 import org.orekit.orbits.CartesianOrbit;
29 import org.orekit.orbits.Orbit;
30 import org.orekit.orbits.PositionAngleType;
31 import org.orekit.propagation.analytical.KeplerianPropagator;
32 import org.orekit.time.AbsoluteDate;
33 import org.orekit.utils.ParameterDriversList;
34 import org.orekit.utils.ParameterDriversList.DelegatingDriver;
35 import org.orekit.utils.TimeStampedPVCoordinates;
36
37 import java.util.List;
38
39 import static org.orekit.Utils.assertParametersDriversValues;
40
41 public class AbstractPropagatorBuilderTest {
42
43
44 @Test
45 @SuppressWarnings("unchecked")
46 void testResetOrbit() {
47
48 Context context = EstimationTestUtils.eccentricContext("regular-data:potential:tides");
49
50
51 final Orbit initialOrbit = new CartesianOrbit(context.initialOrbit);
52
53 final AbstractPropagatorBuilder<KeplerianPropagator> propagatorBuilder = new AbstractPropagatorBuilder(initialOrbit, PositionAngleType.TRUE, 10., true) {
54
55 @Override
56 public KeplerianPropagator buildPropagator(double[] normalizedParameters) {
57
58 setParameters(normalizedParameters);
59 return new KeplerianPropagator(createInitialOrbit());
60 }
61
62 @Override
63 public AbstractBatchLSModel buildLeastSquaresModel(PropagatorBuilder[] builders,
64 List<ObservedMeasurement<?>> measurements,
65 ParameterDriversList estimatedMeasurementsParameters,
66 ModelObserver observer) {
67
68 return null;
69 }
70 };
71
72
73
74 final Orbit newOrbit = initialOrbit.shiftedBy(60.).inFrame(FramesFactory.getTOD(true));
75 propagatorBuilder.resetOrbit(newOrbit);
76
77
78 Assertions.assertEquals(0., propagatorBuilder.getInitialOrbitDate().durationFrom(newOrbit.getDate()), 0.);
79 final double[] stateVector = new double[6];
80 propagatorBuilder.getOrbitType().mapOrbitToArray(newOrbit.inFrame(context.initialOrbit.getFrame()),
81 PositionAngleType.TRUE, stateVector, null);
82 int i = 0;
83 for (DelegatingDriver driver : propagatorBuilder.getOrbitalParametersDrivers().getDrivers()) {
84 final double expectedValue = stateVector[i++];
85 Assertions.assertEquals(expectedValue, driver.getValue(), 0.);
86 Assertions.assertEquals(expectedValue, driver.getReferenceValue(), 0.);
87 }
88 }
89
90
91
92
93
94
95
96
97 public static <B extends AbstractPropagatorBuilder> void assertPropagatorBuilderIsACopy(final B expected, final B actual){
98
99
100 Assertions.assertNotEquals(expected, actual);
101
102 Assertions.assertArrayEquals(expected.getSelectedNormalizedParameters(),
103 actual.getSelectedNormalizedParameters());
104
105 assertParametersDriversValues(expected.getOrbitalParametersDrivers(),
106 actual.getOrbitalParametersDrivers());
107
108 Assertions.assertEquals(expected.getFrame(), actual.getFrame());
109 Assertions.assertEquals(expected.getMu(), actual.getMu());
110 Assertions.assertEquals(expected.getAttitudeProvider(), actual.getAttitudeProvider());
111 Assertions.assertEquals(expected.getOrbitType(), actual.getOrbitType());
112 Assertions.assertEquals(expected.getPositionAngleType(), actual.getPositionAngleType());
113 Assertions.assertEquals(expected.getPositionScale(), actual.getPositionScale());
114 Assertions.assertEquals(expected.getInitialOrbitDate(), actual.getInitialOrbitDate());
115 Assertions.assertEquals(expected.getAdditionalDerivativesProviders(), actual.getAdditionalDerivativesProviders());
116
117
118 AbsoluteDate targetEpoch = expected.getInitialOrbitDate().shiftedBy(7200.0);
119 TimeStampedPVCoordinates expectedCoordinates = expected.buildPropagator().propagate(targetEpoch).getPVCoordinates();
120 TimeStampedPVCoordinates actualCoordinates = actual.buildPropagator().propagate(targetEpoch).getPVCoordinates();
121 Assertions.assertEquals(0.0, Vector3D.distance(expectedCoordinates.getPosition(), actualCoordinates.getPosition()));
122 Assertions.assertEquals(0.0, Vector3D.distance(expectedCoordinates.getVelocity(), actualCoordinates.getVelocity()));
123
124 }
125 }
126