1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.orekit.propagation.conversion;
19
20 import org.hipparchus.geometry.euclidean.threed.Vector3D;
21 import org.junit.jupiter.api.Assertions;
22 import org.junit.jupiter.api.Test;
23 import org.mockito.Mockito;
24 import org.orekit.forces.maneuvers.ImpulseManeuver;
25 import org.orekit.frames.FramesFactory;
26 import org.orekit.orbits.CartesianOrbit;
27 import org.orekit.orbits.Orbit;
28 import org.orekit.orbits.PositionAngleType;
29 import org.orekit.propagation.Propagator;
30 import org.orekit.time.AbsoluteDate;
31 import org.orekit.utils.Constants;
32 import org.orekit.utils.PVCoordinates;
33 import org.orekit.utils.TimeStampedPVCoordinates;
34
35 import static org.orekit.propagation.conversion.AbstractPropagatorBuilderTest.assertPropagatorBuilderIsACopy;
36
37 public class KeplerianPropagatorBuilderTest {
38
39 @Test
40 void testClone() {
41
42
43 final Orbit orbit = getOrbit();
44 final KeplerianPropagatorBuilder builder = new KeplerianPropagatorBuilder(orbit, PositionAngleType.MEAN, 1.0);
45
46
47 final KeplerianPropagatorBuilder copyBuilder = builder.clone();
48
49
50 assertPropagatorBuilderIsACopy(builder, copyBuilder);
51 Assertions.assertEquals(builder.getImpulseManeuvers().size(), copyBuilder.getImpulseManeuvers().size());
52
53 }
54
55 @Test
56 void testClearImpulseManeuvers() {
57
58 final Orbit orbit = getOrbit();
59 final KeplerianPropagatorBuilder builder = new KeplerianPropagatorBuilder(orbit, PositionAngleType.MEAN, 1.0);
60 final ImpulseManeuver mockedManeuver = Mockito.mock(ImpulseManeuver.class);
61 builder.addImpulseManeuver(mockedManeuver);
62
63
64 builder.clearImpulseManeuvers();
65
66
67 final Propagator propagator = builder.buildPropagator();
68 Assertions.assertTrue(propagator.getEventDetectors().isEmpty());
69 }
70
71 @Test
72 void testAddImpulseManeuver() {
73
74 final Orbit orbit = getOrbit();
75 final KeplerianPropagatorBuilder builder = new KeplerianPropagatorBuilder(orbit, PositionAngleType.MEAN, 1.0);
76 final ImpulseManeuver mockedManeuver = Mockito.mock(ImpulseManeuver.class);
77
78
79 builder.addImpulseManeuver(mockedManeuver);
80
81
82 final Propagator propagator = builder.buildPropagator();
83 Assertions.assertEquals(1, propagator.getEventDetectors().size());
84 Assertions.assertEquals(mockedManeuver, propagator.getEventDetectors().toArray()[0]);
85 }
86
87
88
89
90
91 @Test
92 void testIssue1741() {
93
94
95 final Orbit orbit = getOrbit();
96 final KeplerianPropagatorBuilder builder = new KeplerianPropagatorBuilder(orbit, PositionAngleType.MEAN, 1.0);
97
98
99 final KeplerianPropagatorBuilder copyBuilder = builder.clone();
100
101
102
103 final TimeStampedPVCoordinates modifiedPv = orbit.shiftedBy(3600.).getPVCoordinates();
104 copyBuilder.resetOrbit(new CartesianOrbit(modifiedPv, orbit.getFrame(), orbit.getDate(), orbit.getMu()));
105
106
107
108 final PVCoordinates originalPv = orbit.getPVCoordinates();
109 final PVCoordinates initialPv = builder.createInitialOrbit().getPVCoordinates();
110 final double dP = originalPv.getPosition().distance(initialPv.getPosition());
111 final double dV = originalPv.getVelocity().distance(initialPv.getVelocity());
112 final double dA = originalPv.getAcceleration().distance(initialPv.getAcceleration());
113 Assertions.assertEquals(0., dP, 0.);
114 Assertions.assertEquals(0., dV, 0.);
115 Assertions.assertEquals(0., dA, 0.);
116 }
117
118 private static Orbit getOrbit() {
119 return new CartesianOrbit(new PVCoordinates(
120 new Vector3D(Constants.EIGEN5C_EARTH_EQUATORIAL_RADIUS + 400000, 0, 0),
121 new Vector3D(0, 7668.6, 0)), FramesFactory.getGCRF(),
122 new AbsoluteDate(), Constants.EIGEN5C_EARTH_MU);
123 }
124 }