1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.orekit.forces.radiation;
18
19 import org.hipparchus.CalculusFieldElement;
20 import org.hipparchus.Field;
21 import org.hipparchus.complex.Complex;
22 import org.hipparchus.complex.ComplexField;
23 import org.hipparchus.geometry.euclidean.threed.FieldVector3D;
24 import org.hipparchus.geometry.euclidean.threed.Vector3D;
25 import org.junit.jupiter.api.Assertions;
26 import org.junit.jupiter.api.Test;
27 import org.mockito.Mockito;
28 import org.orekit.frames.Frame;
29 import org.orekit.propagation.events.*;
30 import org.orekit.time.FieldAbsoluteDate;
31 import org.orekit.utils.ExtendedPositionProvider;
32
33 import java.util.Collections;
34 import java.util.List;
35
36 class AbstractSolarLightFluxModelTest {
37
38 @Test
39 void testGetters() {
40
41 final double expectedRadius = 0.5;
42 final ExtendedPositionProvider sun = Mockito.mock(ExtendedPositionProvider.class);
43
44 final TestSolarFlux model = new TestSolarFlux(Double.NaN, sun, expectedRadius);
45
46 Assertions.assertEquals(expectedRadius, model.getOccultingBodyRadius());
47 Assertions.assertEquals(sun, model.getOccultedBody());
48 }
49
50 @Test
51 void testGetUnoccultedFluxVector() {
52
53 final ComplexField field = ComplexField.getInstance();
54 final double occultingBodyRadius = 0.5;
55 final FieldVector3D<Complex> sunPosition = FieldVector3D.getPlusI(field).scalarMultiply(10.);
56 final ExtendedPositionProvider sun = mockFieldProvider(sunPosition);
57 final TestSolarFlux model = new TestSolarFlux(Double.NaN, sun, occultingBodyRadius);
58 final Vector3D position = new Vector3D(1., 1.);
59 final FieldVector3D<Complex> fieldPosition = new FieldVector3D<>(field, position);
60
61 final FieldVector3D<Complex> fieldFlux = model.getUnoccultedFluxVector(fieldPosition);
62
63 final Vector3D expectedFlux = model.getUnoccultedFluxVector(position);
64 Assertions.assertEquals(expectedFlux, fieldFlux.toVector3D());
65 }
66
67 @SuppressWarnings("unchecked")
68 private ExtendedPositionProvider mockFieldProvider(final FieldVector3D<Complex> sunPosition) {
69 final ExtendedPositionProvider mockedProvider = Mockito.mock(ExtendedPositionProvider.class);
70 Mockito.when(mockedProvider.getPosition(Mockito.any(FieldAbsoluteDate.class), Mockito.any(Frame.class)))
71 .thenReturn(sunPosition);
72 return mockedProvider;
73 }
74
75 private static class TestSolarFlux extends AbstractSolarLightFluxModel {
76
77 protected TestSolarFlux(double kRef, ExtendedPositionProvider occultedBody, double occultingBodyRadius) {
78 super(kRef, occultedBody, occultingBodyRadius, EventDetectionSettings.getDefaultEventDetectionSettings());
79 }
80
81 @Override
82 protected double getLightingRatio(Vector3D position, Vector3D occultedBodyPosition) {
83 return 0;
84 }
85
86 @Override
87 protected <T extends CalculusFieldElement<T>> T getLightingRatio(FieldVector3D<T> position, FieldVector3D<T> occultedBodyPosition) {
88 return null;
89 }
90
91 @Override
92 public List<EventDetector> getEclipseConditionsDetector() {
93 return Collections.emptyList();
94 }
95
96 @Override
97 public <T extends CalculusFieldElement<T>> List<FieldEventDetector<T>> getFieldEclipseConditionsDetector(Field<T> field) {
98 return Collections.emptyList();
99 }
100 }
101
102 }