1   package org.orekit.propagation.conversion.averaging;
2   
3   import org.junit.jupiter.api.Assertions;
4   import org.junit.jupiter.api.BeforeEach;
5   import org.junit.jupiter.api.Test;
6   import org.orekit.Utils;
7   import org.orekit.data.DataContext;
8   import org.orekit.forces.gravity.potential.UnnormalizedSphericalHarmonicsProvider;
9   import org.orekit.frames.FramesFactory;
10  import org.orekit.orbits.KeplerianOrbit;
11  import org.orekit.orbits.Orbit;
12  import org.orekit.orbits.PositionAngleType;
13  import org.orekit.propagation.conversion.averaging.elements.AveragedKeplerianWithMeanAngle;
14  import org.orekit.time.AbsoluteDate;
15  
16  class BrouwerLyddaneOrbitalStateTest {
17  
18      @BeforeEach
19      public void setUp() {
20          Utils.setDataRoot("regular-data:potential");
21      }
22      
23      @Test
24      void testToOsculating() {
25          // GIVEN
26          final UnnormalizedSphericalHarmonicsProvider provider = getProvider(5);
27          final BrouwerLyddaneOrbitalState averagedState = new BrouwerLyddaneOrbitalState(AbsoluteDate.ARBITRARY_EPOCH,
28                  new AveragedKeplerianWithMeanAngle(1e7, 0.1, 1., 2., 3.,
29                  -1.), FramesFactory.getGCRF(), provider);
30          // WHEN
31          final Orbit orbit = averagedState.toOsculatingOrbit();
32          final KeplerianOrbit keplerianOrbit = (KeplerianOrbit) averagedState.getOrbitType()
33                  .convertType(orbit);
34          // THEN
35          Assertions.assertEquals(averagedState.getDate(), keplerianOrbit.getDate());
36          compareOrbitalElements(averagedState.getAveragedElements(), keplerianOrbit,
37                  averagedState.getPositionAngleType());
38      }
39  
40      private void compareOrbitalElements(final AveragedKeplerianWithMeanAngle elements,
41                                          final KeplerianOrbit keplerianOrbit,
42                                          final PositionAngleType positionAngleType) {
43          Assertions.assertEquals(elements.getAveragedSemiMajorAxis(), keplerianOrbit.getA(), 1e4);
44          Assertions.assertEquals(elements.getAveragedEccentricity(), keplerianOrbit.getE(), 1e-3);
45          Assertions.assertEquals(elements.getAveragedInclination(), keplerianOrbit.getI(), 1e-3);
46          Assertions.assertEquals(elements.getAveragedPerigeeArgument(),
47                  keplerianOrbit.getPerigeeArgument(), 1e-2);
48          Assertions.assertEquals(elements.getAveragedRightAscensionOfTheAscendingNode(),
49                  keplerianOrbit.getRightAscensionOfAscendingNode(), 1e-3);
50          Assertions.assertEquals(elements.getAveragedMeanAnomaly(),
51                  keplerianOrbit.getAnomaly(positionAngleType), 1e-2);
52      }
53  
54      private UnnormalizedSphericalHarmonicsProvider getProvider(final int maxDegree) {
55          return DataContext.getDefault().getGravityFields().getUnnormalizedProvider(maxDegree, 0);
56      }
57  
58  }