1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.orekit.files.general;
18
19 import java.lang.reflect.InvocationTargetException;
20 import java.lang.reflect.Method;
21 import java.util.Arrays;
22 import java.util.List;
23
24 import org.hamcrest.CoreMatchers;
25 import org.hamcrest.MatcherAssert;
26 import org.hipparchus.geometry.euclidean.threed.Vector3D;
27 import org.junit.jupiter.api.Assertions;
28 import org.junit.jupiter.api.BeforeEach;
29 import org.junit.jupiter.api.Test;
30 import org.orekit.OrekitMatchers;
31 import org.orekit.Utils;
32 import org.orekit.errors.OrekitException;
33 import org.orekit.errors.OrekitMessages;
34 import org.orekit.files.general.EphemerisFile.EphemerisSegment;
35 import org.orekit.frames.Frame;
36 import org.orekit.frames.FramesFactory;
37 import org.orekit.propagation.BoundedPropagator;
38 import org.orekit.propagation.SpacecraftState;
39 import org.orekit.time.AbsoluteDate;
40 import org.orekit.utils.CartesianDerivativesFilter;
41 import org.orekit.utils.Constants;
42 import org.orekit.utils.PVCoordinates;
43 import org.orekit.utils.TimeStampedPVCoordinates;
44
45
46
47
48
49
50 public class EphemerisSegmentPropagatorTest {
51
52
53 @BeforeEach
54 public void setUp() {
55 Utils.setDataRoot("regular-data");
56 }
57
58
59
60
61
62
63
64 @Test
65 public void testPropagator() throws Exception {
66
67 AbsoluteDate start = AbsoluteDate.J2000_EPOCH, end = start.shiftedBy(60);
68 Frame frame = FramesFactory.getEME2000();
69 List<TimeStampedPVCoordinates> coordinates = Arrays.asList(
70 new TimeStampedPVCoordinates(start, new Vector3D(6778137, 0, 0), new Vector3D(0, 7.5e3, 0)),
71 new TimeStampedPVCoordinates(start.shiftedBy(30), new Vector3D(6778137 + 1, 0, 0), new Vector3D(0, 7.5e3, 0)),
72 new TimeStampedPVCoordinates(end, new Vector3D(6778137 + 3, 0, 0), new Vector3D(0, 7.5e3, 0)));
73 EphemerisSegment<TimeStampedPVCoordinates> ephemeris = new EphemerisSegment<TimeStampedPVCoordinates>() {
74 @Override
75 public double getMu() {
76 return Constants.EGM96_EARTH_MU;
77 }
78
79 @Override
80 public Frame getFrame() {
81 return frame;
82 }
83
84 @Override
85 public int getInterpolationSamples() {
86 return 2;
87 }
88
89 @Override
90 public CartesianDerivativesFilter getAvailableDerivatives() {
91 return CartesianDerivativesFilter.USE_P;
92 }
93
94 @Override
95 public List<TimeStampedPVCoordinates> getCoordinates() {
96 return coordinates;
97 }
98
99 @Override
100 public AbsoluteDate getStart() {
101 return start;
102 }
103
104 @Override
105 public AbsoluteDate getStop() {
106 return end;
107 }
108 };
109
110
111 BoundedPropagator propagator = ephemeris.getPropagator();
112
113
114 MatcherAssert.assertThat(propagator.getMinDate(), CoreMatchers.is(start));
115 MatcherAssert.assertThat(propagator.getMaxDate(), CoreMatchers.is(end));
116 MatcherAssert.assertThat(propagator.getFrame(), CoreMatchers.is(frame));
117 int ulps = 0;
118 PVCoordinates expected = new PVCoordinates(
119 new Vector3D(6778137, 0, 0),
120 new Vector3D(1.0 / 30, 0, 0));
121 MatcherAssert.assertThat(
122 propagator.propagate(start).getPVCoordinates(),
123 OrekitMatchers.pvCloseTo(expected, ulps));
124 MatcherAssert.assertThat(
125 propagator.getPVCoordinates(start, frame),
126 OrekitMatchers.pvCloseTo(expected, ulps));
127 expected = new PVCoordinates(
128 new Vector3D(6778137 + 2, 0, 0),
129 new Vector3D(2 / 30.0, 0, 0));
130 MatcherAssert.assertThat(
131 propagator.propagate(start.shiftedBy(45)).getPVCoordinates(),
132 OrekitMatchers.pvCloseTo(expected, ulps));
133 MatcherAssert.assertThat(
134 propagator.getPVCoordinates(start.shiftedBy(45), frame),
135 OrekitMatchers.pvCloseTo(expected, ulps));
136 expected = new PVCoordinates(
137 new Vector3D(6778137 + 3, 0, 0),
138 new Vector3D(2 / 30.0, 0, 0));
139 MatcherAssert.assertThat(
140 propagator.propagate(end).getPVCoordinates(),
141 OrekitMatchers.pvCloseTo(expected, ulps));
142 MatcherAssert.assertThat(
143 propagator.getPVCoordinates(end, frame),
144 OrekitMatchers.pvCloseTo(expected, ulps));
145
146 SpacecraftState ic = propagator.propagate(start);
147 try {
148 propagator.resetInitialState(ic);
149 Assertions.fail("Expected Exception");
150 } catch (OrekitException oe) {
151 Assertions.assertEquals(OrekitMessages.NON_RESETABLE_STATE, oe.getSpecifier());
152 }
153 try {
154 Method reset = EphemerisSegmentPropagator.class.getDeclaredMethod("resetIntermediateState",
155 SpacecraftState.class,
156 Boolean.TYPE);
157 reset.setAccessible(true);
158 reset.invoke(propagator, ic, true);
159 Assertions.fail("Expected Exception");
160 } catch (InvocationTargetException ite) {
161 OrekitException oe = (OrekitException) ite.getCause();
162 Assertions.assertEquals(OrekitMessages.NON_RESETABLE_STATE, oe.getSpecifier());
163 }
164
165 }
166
167 }