1 package org.orekit.propagation.events;
2
3 import org.hipparchus.Field;
4 import org.hipparchus.analysis.differentiation.FieldUnivariateDerivative1;
5 import org.hipparchus.analysis.differentiation.FieldUnivariateDerivative1Field;
6 import org.hipparchus.analysis.differentiation.UnivariateDerivative2;
7 import org.hipparchus.analysis.differentiation.UnivariateDerivative2Field;
8 import org.hipparchus.geometry.euclidean.threed.FieldVector3D;
9 import org.hipparchus.util.Binary64;
10 import org.hipparchus.util.Binary64Field;
11 import org.junit.jupiter.api.BeforeAll;
12 import org.junit.jupiter.api.Test;
13 import org.orekit.TestUtils;
14 import org.orekit.Utils;
15 import org.orekit.bodies.AnalyticalSolarPositionProvider;
16 import org.orekit.bodies.GeodeticPoint;
17 import org.orekit.frames.FramesFactory;
18 import org.orekit.frames.TopocentricFrame;
19 import org.orekit.models.earth.ReferenceEllipsoid;
20 import org.orekit.propagation.FieldSpacecraftState;
21 import org.orekit.propagation.SpacecraftState;
22 import org.orekit.propagation.events.handlers.FieldStopOnEvent;
23 import org.orekit.propagation.events.handlers.StopOnEvent;
24 import org.orekit.time.AbsoluteDate;
25 import org.orekit.time.FieldAbsoluteDate;
26 import org.orekit.utils.ExtendedPositionProvider;
27 import org.orekit.utils.FieldPVCoordinates;
28
29 import static org.junit.jupiter.api.Assertions.assertEquals;
30 import static org.junit.jupiter.api.Assertions.fail;
31 import static org.mockito.Mockito.mock;
32
33 class FieldExtremumAngularSeparationDetectorTest {
34
35 @BeforeAll
36 static void setUpBeforeClass() {
37 Utils.setDataRoot("regular-data");
38 }
39
40 @Test
41 void testGetter() {
42
43 final ExtendedPositionProvider mockedBeacon = mock();
44 final ExtendedPositionProvider mockedObserver = mock();
45 final FieldEventDetectionSettings<Binary64> detectionSettings = new FieldEventDetectionSettings<>(Binary64Field.getInstance(),
46 EventDetectionSettings.getDefaultEventDetectionSettings());
47
48
49 final FieldExtremumAngularSeparationDetector<Binary64> detector = new FieldExtremumAngularSeparationDetector<>(detectionSettings,
50 new FieldStopOnEvent<>(), mockedBeacon, mockedObserver);
51
52 assertEquals(mockedBeacon, detector.getBeacon());
53 assertEquals(mockedObserver, detector.getObserver());
54 }
55
56 @Test
57 void testG() {
58
59 final Binary64Field field = Binary64Field.getInstance();
60 final SpacecraftState state = new SpacecraftState(TestUtils.getDefaultOrbit(AbsoluteDate.ARBITRARY_EPOCH));
61 final ExtendedPositionProvider beacon = new AnalyticalSolarPositionProvider();
62 final ExtendedPositionProvider observer = new TopocentricFrame(ReferenceEllipsoid.getWgs84(FramesFactory.getGTOD(true)),
63 new GeodeticPoint(0., 1., 2.), "");
64 final FieldEventDetectionSettings<Binary64> detectionSettings = new FieldEventDetectionSettings<>(field,
65 EventDetectionSettings.getDefaultEventDetectionSettings());
66 final FieldExtremumAngularSeparationDetector<Binary64> detector = new FieldExtremumAngularSeparationDetector<>(detectionSettings,
67 new FieldStopOnEvent<>(), beacon, observer);
68 final FieldSpacecraftState<Binary64> fieldState = new FieldSpacecraftState<>(field, state);
69
70 final Binary64 actualG = detector.g(fieldState);
71
72 final FieldPVCoordinates<FieldUnivariateDerivative1<Binary64>> pv = fieldState.getPVCoordinates().toUnivariateDerivative1PV();
73 final FieldUnivariateDerivative1<Binary64> dt = new FieldUnivariateDerivative1<>(field.getZero(), field.getOne());
74 final FieldAbsoluteDate<FieldUnivariateDerivative1<Binary64>> fieldDate = new FieldAbsoluteDate<>(FieldUnivariateDerivative1Field.getUnivariateDerivative1Field(field),
75 state.getDate()).shiftedBy(dt);
76 final FieldVector3D<FieldUnivariateDerivative1<Binary64>> bP = beacon.getPosition(fieldDate, fieldState.getFrame());
77 final FieldVector3D<FieldUnivariateDerivative1<Binary64>> oP = observer.getPosition(fieldDate, fieldState.getFrame());
78 final FieldUnivariateDerivative1<Binary64> separation = FieldVector3D.angle(pv.getPosition().subtract(oP), bP.subtract(oP));
79 final Binary64 expectedG = separation.getFirstDerivative();
80 assertEquals(expectedG, actualG);
81 }
82 }