1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.orekit.propagation.integration;
18
19 import org.hipparchus.analysis.differentiation.Gradient;
20 import org.hipparchus.geometry.euclidean.threed.Vector3D;
21 import org.junit.jupiter.api.Assertions;
22 import org.junit.jupiter.api.Test;
23 import org.mockito.Mockito;
24 import org.orekit.attitudes.AttitudeProvider;
25 import org.orekit.attitudes.FrameAlignedProvider;
26 import org.orekit.frames.Frame;
27 import org.orekit.frames.FramesFactory;
28 import org.orekit.orbits.Orbit;
29 import org.orekit.propagation.FieldSpacecraftState;
30 import org.orekit.propagation.SpacecraftState;
31 import org.orekit.time.AbsoluteDate;
32 import org.orekit.utils.Constants;
33 import org.orekit.utils.PVCoordinates;
34 import org.orekit.utils.ParameterDriver;
35 import org.orekit.utils.ParameterDriversProvider;
36 import org.orekit.utils.TimeStampedPVCoordinates;
37
38 import java.util.ArrayList;
39 import java.util.List;
40
41 class AbstractGradientConverterTest {
42
43 @Test
44 void getStateOrbitTest() {
45 templateGetStateTest(true);
46 }
47
48 @Test
49 void getStateAPVTest() {
50 templateGetStateTest(false);
51 }
52
53 private void templateGetStateTest(final boolean isOrbitDefined) {
54
55 final int freeParameters = 6;
56 final FieldSpacecraftState<Gradient> initGradientState = createGradientState(isOrbitDefined, freeParameters);
57 final TestGradientConverter testGradientConverter = new TestGradientConverter(freeParameters);
58 testGradientConverter.initStates(initGradientState);
59 final ParameterDriversProvider mockedDriversProvider = mockParameterDriversProvider();
60
61 final FieldSpacecraftState<Gradient> actualGradientState = testGradientConverter.getState(mockedDriversProvider);
62
63 Assertions.assertEquals(isOrbitDefined, actualGradientState.isOrbitDefined());
64 Assertions.assertEquals(initGradientState.getFrame(), actualGradientState.getFrame());
65 Assertions.assertEquals(initGradientState.getMass().getReal(), actualGradientState.getMass().getReal());
66 Assertions.assertEquals(initGradientState.getDate().toAbsoluteDate(),
67 actualGradientState.getDate().toAbsoluteDate());
68 Assertions.assertEquals(initGradientState.getPosition().toVector3D(),
69 actualGradientState.getPosition().toVector3D());
70 Assertions.assertTrue(freeParameters < actualGradientState.getMass().getGradient().length);
71 }
72
73 @Test
74 void testBuildBasicGradientSpacecraftStateOrbit() {
75 templateTestBuildBasicGradientSpacecraftState(true);
76 }
77
78 @Test
79 void testBuildBasicGradientSpacecraftStateAPV() {
80 templateTestBuildBasicGradientSpacecraftState(false);
81 }
82
83 private void templateTestBuildBasicGradientSpacecraftState(final boolean isOrbitDefined) {
84
85 final int freeParameters = 6;
86 final Frame frame = FramesFactory.getGCRF();
87 final SpacecraftState mockedState = mockState(isOrbitDefined, frame);
88 final AttitudeProvider provider = new FrameAlignedProvider(frame);
89
90 final FieldSpacecraftState<Gradient> fieldState = AbstractGradientConverter
91 .buildBasicGradientSpacecraftState(mockedState, freeParameters, provider);
92
93 Assertions.assertEquals(mockedState.getFrame(), fieldState.getFrame());
94 Assertions.assertEquals(mockedState.getDate(), fieldState.getDate().toAbsoluteDate());
95 Assertions.assertEquals(mockedState.getPosition(), fieldState.getPosition().toVector3D());
96 Assertions.assertEquals(mockedState.isOrbitDefined(), fieldState.isOrbitDefined());
97 if (isOrbitDefined) {
98 Assertions.assertEquals(mockedState.getOrbit().getMu(), fieldState.getOrbit().getMu().getReal());
99 }
100 final Gradient expectedFieldZero = Gradient.constant(freeParameters, 0.);
101 Assertions.assertEquals(expectedFieldZero, fieldState.getDate().getField().getZero());
102 final Gradient expectedFieldMass = Gradient.constant(freeParameters, mockedState.getMass());
103 Assertions.assertEquals(expectedFieldMass, fieldState.getMass());
104 }
105
106 private SpacecraftState mockState(final boolean isOrbitDefined, final Frame frame) {
107 final SpacecraftState state = Mockito.mock(SpacecraftState.class);
108 Mockito.when(state.getDate()).thenReturn(AbsoluteDate.ARBITRARY_EPOCH);
109 final TimeStampedPVCoordinates pvCoordinates = new TimeStampedPVCoordinates(state.getDate(),
110 new PVCoordinates(Vector3D.PLUS_I));
111 Mockito.when(state.getPVCoordinates()).thenReturn(pvCoordinates);
112 Mockito.when(state.getPosition()).thenReturn(pvCoordinates.getPosition());
113 Mockito.when(state.isOrbitDefined()).thenReturn(isOrbitDefined);
114 Mockito.when(state.getMass()).thenReturn(1000.);
115 Mockito.when(state.getFrame()).thenReturn(frame);
116 if (isOrbitDefined) {
117 final Orbit mockedOrbit = Mockito.mock();
118 Mockito.when(mockedOrbit.getMu()).thenReturn(Constants.EGM96_EARTH_MU);
119 Mockito.when(state.getOrbit()).thenReturn(mockedOrbit);
120 }
121 return state;
122 }
123
124 private FieldSpacecraftState<Gradient> createGradientState(final boolean isOrbitDefined,
125 final int freeParameters) {
126 final Frame frame = FramesFactory.getGCRF();
127 final AttitudeProvider provider = new FrameAlignedProvider(frame);
128 final SpacecraftState mockedState = mockState(isOrbitDefined, frame);
129 return AbstractGradientConverter.buildBasicGradientSpacecraftState(mockedState, freeParameters, provider);
130 }
131
132 private ParameterDriversProvider mockParameterDriversProvider() {
133 final int nonZeroNumberOfValues = 1;
134 final ParameterDriver mockedParameterDriver = Mockito.mock(ParameterDriver.class);
135 Mockito.when(mockedParameterDriver.isSelected()).thenReturn(true);
136 Mockito.when(mockedParameterDriver.getNbOfValues()).thenReturn(nonZeroNumberOfValues);
137 final ParameterDriversProvider mockedDriversProvider = Mockito.mock(ParameterDriversProvider.class);
138 final List<ParameterDriver> parameterDriverList = new ArrayList<>();
139 parameterDriverList.add(mockedParameterDriver);
140 Mockito.when(mockedDriversProvider.getParametersDrivers()).thenReturn(parameterDriverList);
141 return mockedDriversProvider;
142 }
143
144 private static class TestGradientConverter extends AbstractGradientConverter{
145
146 protected TestGradientConverter(int freeStateParameters) {
147 super(freeStateParameters);
148 }
149
150 }
151
152 }