1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.orekit.control.indirect.shooting.propagation;
18
19 import org.hipparchus.complex.Complex;
20 import org.hipparchus.complex.ComplexField;
21 import org.hipparchus.geometry.euclidean.threed.FieldVector3D;
22 import org.hipparchus.geometry.euclidean.threed.Vector3D;
23 import org.hipparchus.ode.FieldODEIntegrator;
24 import org.hipparchus.ode.ODEIntegrator;
25 import org.hipparchus.ode.nonstiff.ClassicalRungeKuttaFieldIntegrator;
26 import org.hipparchus.ode.nonstiff.ClassicalRungeKuttaIntegrator;
27 import org.hipparchus.ode.nonstiff.DormandPrince54FieldIntegrator;
28 import org.hipparchus.ode.nonstiff.DormandPrince853FieldIntegrator;
29 import org.hipparchus.ode.nonstiff.LutherIntegrator;
30 import org.hipparchus.ode.nonstiff.MidpointIntegrator;
31 import org.junit.jupiter.api.Assertions;
32 import org.junit.jupiter.api.Test;
33 import org.mockito.Mockito;
34 import org.orekit.frames.FramesFactory;
35 import org.orekit.orbits.FieldOrbit;
36 import org.orekit.orbits.Orbit;
37 import org.orekit.orbits.OrbitType;
38 import org.orekit.propagation.ToleranceProvider;
39 import org.orekit.propagation.conversion.ClassicalRungeKuttaFieldIntegratorBuilder;
40 import org.orekit.propagation.conversion.ClassicalRungeKuttaIntegratorBuilder;
41 import org.orekit.propagation.conversion.FieldODEIntegratorBuilder;
42 import org.orekit.propagation.conversion.LutherIntegratorBuilder;
43 import org.orekit.propagation.conversion.MidpointIntegratorBuilder;
44 import org.orekit.propagation.conversion.ODEIntegratorBuilder;
45 import org.orekit.time.FieldAbsoluteDate;
46 import org.orekit.utils.FieldAbsolutePVCoordinates;
47
48 class ShootingIntegrationSettingsFactoryTest {
49
50 @Test
51 void testGetMidpointIntegratorSettings() {
52
53 final double expectedStep = 1.;
54
55 final ShootingIntegrationSettings integrationSettings = ShootingIntegrationSettingsFactory
56 .getMidpointIntegratorSettings(expectedStep);
57 final ODEIntegratorBuilder builder = integrationSettings.getIntegratorBuilder();
58
59 Assertions.assertInstanceOf(MidpointIntegratorBuilder.class, builder);
60 final ODEIntegrator integrator = builder.buildIntegrator(Mockito.mock(Orbit.class),
61 Mockito.mock(OrbitType.class));
62 Assertions.assertEquals(expectedStep, ((MidpointIntegrator) integrator).getDefaultStep());
63 }
64
65 @Test
66 void testGetClassicalRungeKuttaIntegratorSettings() {
67
68 final double expectedStep = 1.;
69
70 final ShootingIntegrationSettings integrationSettings = ShootingIntegrationSettingsFactory
71 .getClassicalRungeKuttaIntegratorSettings(expectedStep);
72 final ODEIntegratorBuilder builder = integrationSettings.getIntegratorBuilder();
73
74 Assertions.assertInstanceOf(ClassicalRungeKuttaIntegratorBuilder.class, builder);
75 final ODEIntegrator integrator = builder.buildIntegrator(Mockito.mock(Orbit.class),
76 Mockito.mock(OrbitType.class));
77 Assertions.assertEquals(expectedStep, ((ClassicalRungeKuttaIntegrator) integrator).getDefaultStep());
78 }
79
80 @Test
81 void testGetClassicalRungeKuttaIntegratorSettingsField() {
82
83 final double expectedStep = 1.;
84
85 final ShootingIntegrationSettings integrationSettings = ShootingIntegrationSettingsFactory
86 .getClassicalRungeKuttaIntegratorSettings(expectedStep);
87 final FieldODEIntegratorBuilder<Complex> builder = integrationSettings.getFieldIntegratorBuilder(ComplexField.getInstance());
88
89 Assertions.assertInstanceOf(ClassicalRungeKuttaFieldIntegratorBuilder.class, builder);
90 final FieldOrbit<Complex> mockedFieldOrbit = mockFieldOrbit();
91 final FieldODEIntegrator<Complex> integrator = builder.buildIntegrator(mockedFieldOrbit, Mockito.mock(OrbitType.class));
92 Assertions.assertEquals(expectedStep, ((ClassicalRungeKuttaFieldIntegrator<Complex>) integrator).getDefaultStep().getReal());
93 }
94
95 @Test
96 void testGetLutherIntegratorSettings() {
97
98 final double expectedStep = 1.;
99
100 final ShootingIntegrationSettings integrationSettings = ShootingIntegrationSettingsFactory
101 .getLutherIntegratorSettings(expectedStep);
102 final ODEIntegratorBuilder builder = integrationSettings.getIntegratorBuilder();
103
104 Assertions.assertInstanceOf(LutherIntegratorBuilder.class, builder);
105 final ODEIntegrator integrator = builder.buildIntegrator(Mockito.mock(Orbit.class),
106 Mockito.mock(OrbitType.class));
107 Assertions.assertEquals(expectedStep, ((LutherIntegrator) integrator).getDefaultStep());
108 }
109
110 @SuppressWarnings("unchecked")
111 private static FieldOrbit<Complex> mockFieldOrbit() {
112 final FieldOrbit<Complex> mockedFieldOrbit = Mockito.mock(FieldOrbit.class);
113 Mockito.when(mockedFieldOrbit.getA()).thenReturn(Complex.ONE);
114 return mockedFieldOrbit;
115 }
116
117 @Test
118 void testGetDormandPrince54IntegratorSettings() {
119
120 final ComplexField field = ComplexField.getInstance();
121
122 final ShootingIntegrationSettings integrationSettings = ShootingIntegrationSettingsFactory
123 .getDormandPrince54IntegratorSettings(1., 10.,
124 ToleranceProvider.of(1, 2));
125 final FieldODEIntegratorBuilder<Complex> builder = integrationSettings.getFieldIntegratorBuilder(field);
126
127 final FieldODEIntegrator<Complex> fieldIntegrator = builder.buildIntegrator(new FieldAbsolutePVCoordinates<>(FramesFactory.getGCRF(),
128 FieldAbsoluteDate.getArbitraryEpoch(field), new FieldVector3D<>(field, Vector3D.PLUS_I),
129 new FieldVector3D<>(field, Vector3D.MINUS_J)));
130 Assertions.assertInstanceOf(DormandPrince54FieldIntegrator.class, fieldIntegrator);
131 }
132
133 @Test
134 void testGetDormandPrince853IntegratorSettings() {
135
136 final ComplexField field = ComplexField.getInstance();
137
138 final ShootingIntegrationSettings integrationSettings = ShootingIntegrationSettingsFactory
139 .getDormandPrince853IntegratorSettings(1., 10.,
140 ToleranceProvider.of(1, 2));
141 final FieldODEIntegratorBuilder<Complex> builder = integrationSettings.getFieldIntegratorBuilder(field);
142
143 final FieldODEIntegrator<Complex> fieldIntegrator = builder.buildIntegrator(new FieldAbsolutePVCoordinates<>(FramesFactory.getGCRF(),
144 FieldAbsoluteDate.getArbitraryEpoch(field), new FieldVector3D<>(field, Vector3D.PLUS_I),
145 new FieldVector3D<>(field, Vector3D.MINUS_J)));
146 Assertions.assertInstanceOf(DormandPrince853FieldIntegrator.class, fieldIntegrator);
147 }
148 }