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 public void testResetOrbit() {
46
47 Context context = EstimationTestUtils.eccentricContext("regular-data:potential:tides");
48
49
50 final Orbit initialOrbit = new CartesianOrbit(context.initialOrbit);
51
52 final AbstractPropagatorBuilder<KeplerianPropagator> propagatorBuilder = new AbstractPropagatorBuilder(initialOrbit, PositionAngleType.TRUE, 10., true) {
53
54 @Override
55 public KeplerianPropagator buildPropagator(double[] normalizedParameters) {
56
57 setParameters(normalizedParameters);
58 return new KeplerianPropagator(createInitialOrbit());
59 }
60
61 @Override
62 public AbstractBatchLSModel buildLeastSquaresModel(PropagatorBuilder[] builders,
63 List<ObservedMeasurement<?>> measurements,
64 ParameterDriversList estimatedMeasurementsParameters,
65 ModelObserver observer) {
66
67 return null;
68 }
69 };
70
71
72
73 final Orbit newOrbit = initialOrbit.shiftedBy(60.).inFrame(FramesFactory.getTOD(true));
74 propagatorBuilder.resetOrbit(newOrbit);
75
76
77 Assertions.assertEquals(0., propagatorBuilder.getInitialOrbitDate().durationFrom(newOrbit.getDate()), 0.);
78 final double[] stateVector = new double[6];
79 propagatorBuilder.getOrbitType().mapOrbitToArray(newOrbit.inFrame(context.initialOrbit.getFrame()),
80 PositionAngleType.TRUE, stateVector, null);
81 int i = 0;
82 for (DelegatingDriver driver : propagatorBuilder.getOrbitalParametersDrivers().getDrivers()) {
83 final double expectedValue = stateVector[i++];
84 Assertions.assertEquals(expectedValue, driver.getValue(), 0.);
85 Assertions.assertEquals(expectedValue, driver.getReferenceValue(), 0.);
86 }
87 }
88
89
90
91
92
93
94
95
96 public static <B extends AbstractPropagatorBuilder> void assertPropagatorBuilderIsACopy(final B expected, final B actual){
97
98
99 Assertions.assertNotEquals(expected, actual);
100
101 Assertions.assertArrayEquals(expected.getSelectedNormalizedParameters(),
102 actual.getSelectedNormalizedParameters());
103
104 assertParametersDriversValues(expected.getOrbitalParametersDrivers(),
105 actual.getOrbitalParametersDrivers());
106
107 Assertions.assertEquals(expected.getFrame(), actual.getFrame());
108 Assertions.assertEquals(expected.getMu(), actual.getMu());
109 Assertions.assertEquals(expected.getAttitudeProvider(), actual.getAttitudeProvider());
110 Assertions.assertEquals(expected.getOrbitType(), actual.getOrbitType());
111 Assertions.assertEquals(expected.getPositionAngleType(), actual.getPositionAngleType());
112 Assertions.assertEquals(expected.getPositionScale(), actual.getPositionScale());
113 Assertions.assertEquals(expected.getInitialOrbitDate(), actual.getInitialOrbitDate());
114 Assertions.assertEquals(expected.getAdditionalDerivativesProviders(), actual.getAdditionalDerivativesProviders());
115
116
117 AbsoluteDate targetEpoch = expected.getInitialOrbitDate().shiftedBy(7200.0);
118 TimeStampedPVCoordinates expectedCoordinates = expected.buildPropagator().propagate(targetEpoch).getPVCoordinates();
119 TimeStampedPVCoordinates actualCoordinates = actual.buildPropagator().propagate(targetEpoch).getPVCoordinates();
120 Assertions.assertEquals(0.0, Vector3D.distance(expectedCoordinates.getPosition(), actualCoordinates.getPosition()));
121 Assertions.assertEquals(0.0, Vector3D.distance(expectedCoordinates.getVelocity(), actualCoordinates.getVelocity()));
122
123 }
124 }
125