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.BeforeAll;
23 import org.junit.jupiter.api.Test;
24 import org.mockito.Mockito;
25 import org.orekit.Utils;
26 import org.orekit.forces.ForceModel;
27 import org.orekit.forces.gravity.HolmesFeatherstoneAttractionModel;
28 import org.orekit.forces.gravity.potential.GravityFieldFactory;
29 import org.orekit.forces.maneuvers.ImpulseManeuver;
30 import org.orekit.frames.FramesFactory;
31 import org.orekit.orbits.CartesianOrbit;
32 import org.orekit.orbits.Orbit;
33 import org.orekit.orbits.PositionAngleType;
34 import org.orekit.propagation.Propagator;
35 import org.orekit.propagation.events.EventDetector;
36 import org.orekit.time.AbsoluteDate;
37 import org.orekit.utils.Constants;
38 import org.orekit.utils.IERSConventions;
39 import org.orekit.utils.PVCoordinates;
40
41 import java.util.Collection;
42 import java.util.List;
43
44 import static org.orekit.propagation.conversion.AbstractPropagatorBuilderTest.assertPropagatorBuilderIsACopy;
45
46 public class NumericalPropagatorBuilderTest {
47
48 @BeforeAll
49 public static void setUpBeforeClass() {
50 Utils.setDataRoot("regular-data:potential");
51 }
52
53 @Test
54 void testClearImpulseManeuvers() {
55
56 final ODEIntegratorBuilder integratorBuilder = new ClassicalRungeKuttaIntegratorBuilder(60);
57 final Orbit orbit = getOrbit();
58 final NumericalPropagatorBuilder builder =
59 new NumericalPropagatorBuilder(orbit, integratorBuilder, PositionAngleType.MEAN, 1.0, Utils.defaultLaw());
60 final ImpulseManeuver mockedManeuver = Mockito.mock(ImpulseManeuver.class);
61 builder.addImpulseManeuver(mockedManeuver);
62
63 builder.clearImpulseManeuvers();
64
65 final Propagator propagator = builder.buildPropagator();
66 final Collection<EventDetector> detectors = propagator.getEventDetectors();
67 Assertions.assertTrue(detectors.isEmpty());
68 }
69
70 @Test
71 void testAddImpulseManeuver() {
72
73 final ODEIntegratorBuilder integratorBuilder = new ClassicalRungeKuttaIntegratorBuilder(60);
74 final Orbit orbit = getOrbit();
75 final NumericalPropagatorBuilder builder =
76 new NumericalPropagatorBuilder(orbit, integratorBuilder, PositionAngleType.MEAN, 1.0, Utils.defaultLaw());
77 final ImpulseManeuver mockedManeuver = Mockito.mock(ImpulseManeuver.class);
78
79 builder.addImpulseManeuver(mockedManeuver);
80
81 final Propagator propagator = builder.buildPropagator();
82 final Collection<EventDetector> detectors = propagator.getEventDetectors();
83 Assertions.assertEquals(1, detectors.size());
84 Assertions.assertEquals(mockedManeuver, detectors.toArray()[0]);
85 }
86
87 @Test
88 void testClone() {
89
90
91 final ODEIntegratorBuilder integratorBuilder = new ClassicalRungeKuttaIntegratorBuilder(60);
92 final Orbit orbit = getOrbit();
93
94 final NumericalPropagatorBuilder builder =
95 new NumericalPropagatorBuilder(orbit, integratorBuilder, PositionAngleType.MEAN, 1.0, Utils.defaultLaw());
96
97 builder.addForceModel(new HolmesFeatherstoneAttractionModel(FramesFactory.getITRF(IERSConventions.IERS_2010, true),
98 GravityFieldFactory.getNormalizedProvider(2, 0)));
99
100
101 final NumericalPropagatorBuilder copyBuilder = (NumericalPropagatorBuilder) builder.clone();
102
103
104 assertNumericalPropagatorBuilderIsACopy(builder, copyBuilder);
105
106 }
107
108 private static Orbit getOrbit() {
109 return new CartesianOrbit(new PVCoordinates(
110 new Vector3D(Constants.EIGEN5C_EARTH_EQUATORIAL_RADIUS + 400000, 0, 0),
111 new Vector3D(0, 7668.6, 0)), FramesFactory.getGCRF(),
112 new AbsoluteDate(), Constants.EIGEN5C_EARTH_MU);
113 }
114
115 private void assertNumericalPropagatorBuilderIsACopy(final NumericalPropagatorBuilder expected,
116 final NumericalPropagatorBuilder actual) {
117 assertPropagatorBuilderIsACopy(expected, actual);
118
119
120 final List<ForceModel> expectedForceModelList = expected.getAllForceModels();
121 final List<ForceModel> actualForceModelList = actual.getAllForceModels();
122 Assertions.assertEquals(expectedForceModelList.size(), actualForceModelList.size());
123 for (int i = 0; i < expectedForceModelList.size(); i++) {
124 Assertions.assertEquals(expectedForceModelList.get(i).getClass(), actualForceModelList.get(i).getClass());
125 }
126
127
128 Assertions.assertEquals(expected.getIntegratorBuilder().getClass(), actual.getIntegratorBuilder().getClass());
129
130
131 Assertions.assertEquals(expected.getMass(), actual.getMass());
132 }
133
134 }