1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.orekit.propagation.analytical;
18
19 import java.util.Arrays;
20 import java.util.Collections;
21
22 import org.hamcrest.CoreMatchers;
23 import org.hamcrest.MatcherAssert;
24 import org.junit.Assert;
25 import org.junit.Before;
26 import org.junit.Test;
27 import org.orekit.OrekitMatchers;
28 import org.orekit.Utils;
29 import org.orekit.errors.OrekitException;
30 import org.orekit.frames.Frame;
31 import org.orekit.frames.FramesFactory;
32 import org.orekit.orbits.KeplerianOrbit;
33 import org.orekit.orbits.PositionAngle;
34 import org.orekit.propagation.BoundedPropagator;
35 import org.orekit.propagation.EphemerisGenerator;
36 import org.orekit.propagation.SpacecraftState;
37 import org.orekit.time.AbsoluteDate;
38 import org.orekit.utils.Constants;
39
40
41
42
43
44
45 public class AggregateBoundedPropagatorTest {
46
47 public static final Frame frame = FramesFactory.getGCRF();
48
49
50 @Before
51 public void setUp() {
52 Utils.setDataRoot("regular-data");
53 }
54
55
56
57
58
59
60
61 @Test
62 public void testAdjacent() throws Exception {
63
64 AbsoluteDate date = AbsoluteDate.CCSDS_EPOCH;
65 BoundedPropagator p1 = createPropagator(date, date.shiftedBy(10), 0);
66 BoundedPropagator p2 = createPropagator(date.shiftedBy(10), date.shiftedBy(20), 1);
67
68
69 BoundedPropagator actual = new AggregateBoundedPropagator(Arrays.asList(p1, p2));
70
71
72 int ulps = 0;
73 MatcherAssert.assertThat(actual.getFrame(), CoreMatchers.is(p1.getFrame()));
74 MatcherAssert.assertThat(actual.getMinDate(), CoreMatchers.is(date));
75 MatcherAssert.assertThat(actual.getMaxDate(), CoreMatchers.is(date.shiftedBy(20)));
76 MatcherAssert.assertThat(
77 actual.propagate(date).getPVCoordinates(),
78 OrekitMatchers.pvCloseTo(p1.propagate(date).getPVCoordinates(), ulps));
79 MatcherAssert.assertThat(
80 actual.propagate(date.shiftedBy(5)).getPVCoordinates(),
81 OrekitMatchers.pvCloseTo(p1.propagate(date.shiftedBy(5)).getPVCoordinates(), ulps));
82 MatcherAssert.assertThat(
83 actual.propagate(date.shiftedBy(10)).getPVCoordinates(),
84 OrekitMatchers.pvCloseTo(p2.propagate(date.shiftedBy(10)).getPVCoordinates(), ulps));
85 MatcherAssert.assertThat(
86 actual.propagate(date.shiftedBy(15)).getPVCoordinates(),
87 OrekitMatchers.pvCloseTo(p2.propagate(date.shiftedBy(15)).getPVCoordinates(), ulps));
88 MatcherAssert.assertThat(
89 actual.propagate(date.shiftedBy(20)).getPVCoordinates(),
90 OrekitMatchers.pvCloseTo(p2.propagate(date.shiftedBy(20)).getPVCoordinates(), ulps));
91 }
92
93
94
95
96
97
98
99 @Test
100 public void testOverlap() throws Exception {
101
102 AbsoluteDate date = AbsoluteDate.CCSDS_EPOCH;
103 BoundedPropagator p1 = createPropagator(date, date.shiftedBy(25), 0);
104 BoundedPropagator p2 = createPropagator(date.shiftedBy(10), date.shiftedBy(20), 1);
105
106
107 BoundedPropagator actual = new AggregateBoundedPropagator(Arrays.asList(p1, p2));
108
109
110 int ulps = 0;
111 MatcherAssert.assertThat(actual.getFrame(), CoreMatchers.is(p1.getFrame()));
112 MatcherAssert.assertThat(actual.getMinDate(), CoreMatchers.is(date));
113 MatcherAssert.assertThat(actual.getMaxDate(), CoreMatchers.is(date.shiftedBy(20)));
114 MatcherAssert.assertThat(
115 actual.propagate(date).getPVCoordinates(),
116 OrekitMatchers.pvCloseTo(p1.propagate(date).getPVCoordinates(), ulps));
117 MatcherAssert.assertThat(
118 actual.propagate(date.shiftedBy(5)).getPVCoordinates(),
119 OrekitMatchers.pvCloseTo(p1.propagate(date.shiftedBy(5)).getPVCoordinates(), ulps));
120 MatcherAssert.assertThat(
121 actual.propagate(date.shiftedBy(10)).getPVCoordinates(),
122 OrekitMatchers.pvCloseTo(p2.propagate(date.shiftedBy(10)).getPVCoordinates(), ulps));
123 MatcherAssert.assertThat(
124 actual.propagate(date.shiftedBy(15)).getPVCoordinates(),
125 OrekitMatchers.pvCloseTo(p2.propagate(date.shiftedBy(15)).getPVCoordinates(), ulps));
126 MatcherAssert.assertThat(
127 actual.propagate(date.shiftedBy(20)).getPVCoordinates(),
128 OrekitMatchers.pvCloseTo(p2.propagate(date.shiftedBy(20)).getPVCoordinates(), ulps));
129 }
130
131
132
133
134
135
136
137 @Test
138 public void testGap() throws Exception {
139
140 AbsoluteDate date = AbsoluteDate.CCSDS_EPOCH;
141 BoundedPropagator p1 = createPropagator(date, date.shiftedBy(1), 0);
142 BoundedPropagator p2 = createPropagator(date.shiftedBy(10), date.shiftedBy(20), 1);
143
144
145 BoundedPropagator actual = new AggregateBoundedPropagator(Arrays.asList(p1, p2));
146
147
148 int ulps = 0;
149 MatcherAssert.assertThat(actual.getFrame(), CoreMatchers.is(p1.getFrame()));
150 MatcherAssert.assertThat(actual.getMinDate(), CoreMatchers.is(date));
151 MatcherAssert.assertThat(actual.getMaxDate(), CoreMatchers.is(date.shiftedBy(20)));
152 MatcherAssert.assertThat(
153 actual.propagate(date).getPVCoordinates(),
154 OrekitMatchers.pvCloseTo(p1.propagate(date).getPVCoordinates(), ulps));
155 MatcherAssert.assertThat(
156 actual.propagate(date.shiftedBy(10)).getPVCoordinates(),
157 OrekitMatchers.pvCloseTo(p2.propagate(date.shiftedBy(10)).getPVCoordinates(), ulps));
158 MatcherAssert.assertThat(
159 actual.propagate(date.shiftedBy(15)).getPVCoordinates(),
160 OrekitMatchers.pvCloseTo(p2.propagate(date.shiftedBy(15)).getPVCoordinates(), ulps));
161 MatcherAssert.assertThat(
162 actual.propagate(date.shiftedBy(20)).getPVCoordinates(),
163 OrekitMatchers.pvCloseTo(p2.propagate(date.shiftedBy(20)).getPVCoordinates(), ulps));
164 try {
165
166 MatcherAssert.assertThat(
167 actual.propagate(date.shiftedBy(5)).getPVCoordinates(),
168 OrekitMatchers.pvCloseTo(p1.propagate(date.shiftedBy(5)).getPVCoordinates(), ulps));
169 } catch (OrekitException e) {
170
171 }
172 }
173
174 @Test
175 public void testOutsideBounds() throws Exception {
176
177 AbsoluteDate date = AbsoluteDate.CCSDS_EPOCH;
178 BoundedPropagator p1 = createPropagator(date, date.shiftedBy(10), 0);
179 BoundedPropagator p2 = createPropagator(date.shiftedBy(10), date.shiftedBy(20), 1);
180
181
182 BoundedPropagator actual = new AggregateBoundedPropagator(Arrays.asList(p1, p2));
183
184
185 int ulps = 0;
186
187 try {
188
189 MatcherAssert.assertThat(
190 actual.propagate(date.shiftedBy(-60)).getPVCoordinates(),
191 OrekitMatchers.pvCloseTo(p1.propagate(date.shiftedBy(-60)).getPVCoordinates(), ulps));
192 } catch (OrekitException e) {
193
194 }
195 try {
196
197 MatcherAssert.assertThat(
198 actual.getPVCoordinates(date.shiftedBy(-60), frame),
199 OrekitMatchers.pvCloseTo(p1.propagate(date.shiftedBy(-60)).getPVCoordinates(), ulps));
200 } catch (OrekitException e) {
201
202 }
203
204 try {
205
206 MatcherAssert.assertThat(
207 actual.propagate(date.shiftedBy(60)).getPVCoordinates(),
208 OrekitMatchers.pvCloseTo(p2.propagate(date.shiftedBy(60)).getPVCoordinates(), ulps));
209 } catch (OrekitException e) {
210
211 }
212 try {
213
214 MatcherAssert.assertThat(
215 actual.getPVCoordinates(date.shiftedBy(60), frame),
216 OrekitMatchers.pvCloseTo(p2.propagate(date.shiftedBy(60)).getPVCoordinates(), ulps));
217 } catch (OrekitException e) {
218
219 }
220
221 }
222
223
224
225
226 @Test
227 public void testResetState() {
228
229 AbsoluteDate date = AbsoluteDate.CCSDS_EPOCH;
230 BoundedPropagator p1 = createPropagator(date, date.shiftedBy(10), 0);
231 BoundedPropagator p2 = createPropagator(date.shiftedBy(10), date.shiftedBy(20), 1);
232 SpacecraftState ic = p2.getInitialState();
233
234
235 BoundedPropagator actual = new AggregateBoundedPropagator(Arrays.asList(p1, p2));
236
237
238 try {
239 actual.resetInitialState(ic);
240 Assert.fail("Expected Exception");
241 } catch (OrekitException e) {
242
243 }
244 }
245
246
247
248
249
250 @Test
251 public void testEmptyList() {
252
253 try {
254 new AggregateBoundedPropagator(Collections.emptyList());
255 Assert.fail("Expected Exception");
256 } catch (OrekitException e) {
257
258 }
259 }
260
261
262
263
264
265
266
267
268
269 private BoundedPropagator createPropagator(AbsoluteDate start,
270 AbsoluteDate end,
271 double v) {
272 double gm = Constants.EGM96_EARTH_MU;
273 KeplerianPropagator propagator = new KeplerianPropagator(new KeplerianOrbit(
274 6778137, 0, 0, 0, 0, v, PositionAngle.TRUE, frame, start, gm));
275 final EphemerisGenerator generator = propagator.getEphemerisGenerator();
276 propagator.propagate(start, end);
277 return generator.getGeneratedEphemeris();
278 }
279
280 }