1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.orekit.propagation.events;
18
19 import org.hipparchus.ode.nonstiff.AdaptiveStepsizeIntegrator;
20 import org.hipparchus.ode.nonstiff.DormandPrince853Integrator;
21 import org.hipparchus.util.FastMath;
22 import org.junit.jupiter.api.Assertions;
23 import org.junit.jupiter.api.BeforeEach;
24 import org.junit.jupiter.api.Test;
25 import org.orekit.Utils;
26 import org.orekit.frames.Frame;
27 import org.orekit.frames.FramesFactory;
28 import org.orekit.orbits.KeplerianOrbit;
29 import org.orekit.orbits.PositionAngleType;
30 import org.orekit.propagation.BoundedPropagator;
31 import org.orekit.propagation.EphemerisGenerator;
32 import org.orekit.propagation.SpacecraftState;
33 import org.orekit.propagation.ToleranceProvider;
34 import org.orekit.propagation.events.handlers.ContinueOnEvent;
35 import org.orekit.propagation.numerical.NumericalPropagator;
36 import org.orekit.time.AbsoluteDate;
37 import org.orekit.time.TimeScalesFactory;
38 import org.orekit.utils.Constants;
39
40 public class NodeDetectorTest {
41
42 @Test
43 public void testIssue138() {
44 double a = 800000 + Constants.WGS84_EARTH_EQUATORIAL_RADIUS;
45 double e = 0.0001;
46 double i = FastMath.toRadians(98);
47 double w = -90;
48 double raan = 0;
49 double v = 0;
50 Frame inertialFrame = FramesFactory.getEME2000();
51 AbsoluteDate initialDate = new AbsoluteDate(2014, 01, 01, 0, 0, 0, TimeScalesFactory.getUTC());
52 AbsoluteDate finalDate = initialDate.shiftedBy(5000);
53 KeplerianOrbit initialOrbit = new KeplerianOrbit(a, e, i, w, raan, v, PositionAngleType.TRUE, inertialFrame, initialDate, Constants.WGS84_EARTH_MU);
54 SpacecraftState initialState = new SpacecraftState(initialOrbit, 1000);
55
56 double[][] tol = ToleranceProvider.getDefaultToleranceProvider(10.).getTolerances(initialOrbit, initialOrbit.getType());
57 AdaptiveStepsizeIntegrator integrator = new DormandPrince853Integrator(0.001, 1000, tol[0], tol[1]);
58 NumericalPropagator propagator = new NumericalPropagator(integrator);
59 propagator.setInitialState(initialState);
60
61
62 EventDetector rawDetector =
63 new NodeDetector(1e-6, initialState.getOrbit(), initialState.getFrame()).
64 withHandler(new ContinueOnEvent());
65
66 EventsLogger logger1 = new EventsLogger();
67 EventDetector node1 = logger1.monitorDetector(rawDetector);
68 EventsLogger logger2 = new EventsLogger();
69 EventDetector node2 = logger2.monitorDetector(rawDetector);
70
71 propagator.addEventDetector(node1);
72 propagator.addEventDetector(node2);
73
74
75 final EphemerisGenerator generator = propagator.getEphemerisGenerator();
76 propagator.propagate(finalDate);
77 Assertions.assertEquals(2, logger1.getLoggedEvents().size());
78 Assertions.assertEquals(2, logger2.getLoggedEvents().size());
79 logger1.clearLoggedEvents();
80 logger2.clearLoggedEvents();
81
82 BoundedPropagator postpro = generator.getGeneratedEphemeris();
83
84
85 postpro.addEventDetector(node1);
86 postpro.addEventDetector(node2);
87 postpro.propagate(finalDate);
88 Assertions.assertEquals(2, logger1.getLoggedEvents().size());
89 Assertions.assertEquals(2, logger2.getLoggedEvents().size());
90
91 }
92
93 @Test
94 public void testIssue158() {
95
96 double a = 3.0e7;
97 double e1 = 0.8;
98 double e2 = 1.0e-4;
99 double i = 1.0;
100 double pa = 1.5 * FastMath.PI;
101 double raan = 5.0;
102 double m = 0;
103 AbsoluteDate date = AbsoluteDate.J2000_EPOCH;
104 Frame frame = FramesFactory.getEME2000();
105 double mu = Constants.EIGEN5C_EARTH_MU;
106
107
108 final KeplerianOrbit orbit1 =
109 new KeplerianOrbit(a, e1, i, pa, raan, m, PositionAngleType.MEAN, frame, date, mu);
110 EventDetector detector1 = new NodeDetector(orbit1, orbit1.getFrame());
111 double t1 = orbit1.getKeplerianPeriod();
112 Assertions.assertEquals(t1 / 28.82, detector1.getMaxCheckInterval().currentInterval(null, true), t1 / 10000);
113
114
115 final KeplerianOrbit orbit2 =
116 new KeplerianOrbit(a, e2, i, pa, raan, m, PositionAngleType.MEAN, frame, date, mu);
117 EventDetector detector2 = new NodeDetector(orbit2, orbit2.getFrame());
118 double t2 = orbit2.getKeplerianPeriod();
119 Assertions.assertEquals(t1, t2, t1 / 10000);
120 Assertions.assertEquals(t2 / 3, detector2.getMaxCheckInterval().currentInterval(null, true), t2 / 10000);
121
122 }
123
124 @Test
125 public void testIssue728() {
126
127 NodeDetector detector1 = new NodeDetector(FramesFactory.getEME2000());
128 Assertions.assertEquals(1800.0, detector1.getMaxCheckInterval().currentInterval(null, true), 1.0e-3);
129 Assertions.assertEquals(1.0e-3, detector1.getThreshold(), 1.0e-12);
130
131 NodeDetector detector2 = detector1.withMaxCheck(3000.0).withThreshold(1.0e-6);
132 Assertions.assertEquals(3000.0, detector2.getMaxCheckInterval().currentInterval(null, true), 1.0e-3);
133 Assertions.assertEquals(1.0e-6, detector2.getThreshold(), 1.0e-12);
134
135 }
136
137 @BeforeEach
138 public void setUp() {
139 Utils.setDataRoot("regular-data");
140 }
141
142 }
143