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