1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.orekit.propagation.events;
19
20 import org.hipparchus.complex.Complex;
21 import org.hipparchus.geometry.euclidean.threed.Vector3D;
22 import org.hipparchus.util.Binary64;
23 import org.hipparchus.util.Binary64Field;
24 import org.junit.jupiter.api.Assertions;
25 import org.junit.jupiter.api.Test;
26 import org.mockito.Mockito;
27 import org.orekit.frames.FramesFactory;
28 import org.orekit.orbits.CartesianOrbit;
29 import org.orekit.orbits.FieldCartesianOrbit;
30 import org.orekit.propagation.FieldSpacecraftState;
31 import org.orekit.propagation.analytical.FieldKeplerianPropagator;
32 import org.orekit.propagation.analytical.KeplerianPropagator;
33 import org.orekit.propagation.events.handlers.FieldStopOnDecreasing;
34 import org.orekit.time.AbsoluteDate;
35 import org.orekit.utils.Constants;
36 import org.orekit.utils.FieldPVCoordinatesProvider;
37 import org.orekit.utils.TimeStampedPVCoordinates;
38
39 class FieldRelativeDistanceDetectorTest {
40
41 @Test
42 void testGetDistanceThreshold() {
43
44 final Complex expectedDistanceThreshold = Complex.ONE;
45 final FieldRelativeDistanceDetector<Complex> distanceDetector = new FieldRelativeDistanceDetector<>(
46 mockProvider(), expectedDistanceThreshold);
47
48 final Complex actualDistanceThreshold = distanceDetector.getDistanceThreshold();
49
50 Assertions.assertEquals(expectedDistanceThreshold, actualDistanceThreshold);
51 }
52
53 @Test
54 void testCreate() {
55
56 final Complex distanceThreshold = Complex.ONE;
57 final FieldRelativeDistanceDetector<Complex> distanceDetector = new FieldRelativeDistanceDetector<>(
58 mockProvider(), distanceThreshold);
59 final FieldStopOnDecreasing<Complex> expectedHandler = new FieldStopOnDecreasing<>();
60
61 final FieldRelativeDistanceDetector<Complex> detector = distanceDetector.create(distanceDetector.getDetectionSettings(),
62 expectedHandler);
63
64 Assertions.assertEquals(expectedHandler, detector.getHandler());
65 }
66
67 @SuppressWarnings("unchecked")
68 private FieldPVCoordinatesProvider<Complex> mockProvider() {
69 return Mockito.mock(FieldPVCoordinatesProvider.class);
70 }
71
72 @Test
73 void testG() {
74
75 final CartesianOrbit initialOrbit = createOrbit(new Vector3D(1e7, 0, 0));
76 final double distanceThreshold = 0.;
77 final Binary64Field field = Binary64Field.getInstance();
78 final FieldKeplerianPropagator<Binary64> fieldKeplerianPropagator = new FieldKeplerianPropagator<>(
79 new FieldCartesianOrbit<>(field, initialOrbit));
80 final FieldRelativeDistanceDetector<Binary64> fieldRelativeDistanceDetector = new FieldRelativeDistanceDetector<>(
81 fieldKeplerianPropagator, field.getZero().newInstance(distanceThreshold));
82 final CartesianOrbit orbit = createOrbit(new Vector3D(1e7, 1e3, 2e3));
83 final FieldCartesianOrbit<Binary64> fieldOrbit = new FieldCartesianOrbit<>(field, orbit);
84 final FieldSpacecraftState<Binary64> fieldSpacecraftState = new FieldSpacecraftState<>(fieldOrbit);
85
86 final Binary64 g = fieldRelativeDistanceDetector.g(fieldSpacecraftState);
87 final double actualDistance = g.getReal();
88
89 final RelativeDistanceDetector relativeDistanceDetector = new RelativeDistanceDetector(
90 new KeplerianPropagator(initialOrbit), distanceThreshold);
91 final double expectedDistance = relativeDistanceDetector.g(fieldSpacecraftState.toSpacecraftState());
92 Assertions.assertEquals(expectedDistance, actualDistance);
93 }
94
95 private CartesianOrbit createOrbit(final Vector3D position) {
96 final Vector3D velocity = new Vector3D(0., 6e3, -1e2);
97 final TimeStampedPVCoordinates pvCoordinates = new TimeStampedPVCoordinates(AbsoluteDate.ARBITRARY_EPOCH,
98 position, velocity);
99 return new CartesianOrbit(pvCoordinates, FramesFactory.getGCRF(), Constants.EGM96_EARTH_MU);
100 }
101
102 }