diff --git a/src/changes/changes.xml b/src/changes/changes.xml index 16627d08ef0cae3725caf92c85d9140e18a4b885..831ee4479d5bb66713c2223bad4f2ce8445689b1 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -24,6 +24,9 @@ Allow DSST event detection when propagating backwards. + + Fixed DSST orbit determination when propagating backwards. + Remove InertialProvider.EME2000_ALIGNED, Propagator.DEFAULT_LAW. Use InertialProvider.of(Frame). diff --git a/src/test/java/org/orekit/propagation/PropagatorsParallelizerTest.java b/src/test/java/org/orekit/propagation/PropagatorsParallelizerTest.java index dffbdb928c245f9db248f6c93961a67353ead969..a33fdf6cf7f184c6118925cdc4cb08dcf17b81cf 100644 --- a/src/test/java/org/orekit/propagation/PropagatorsParallelizerTest.java +++ b/src/test/java/org/orekit/propagation/PropagatorsParallelizerTest.java @@ -38,6 +38,7 @@ import org.orekit.errors.OrekitMessages; import org.orekit.forces.ForceModel; import org.orekit.forces.gravity.HolmesFeatherstoneAttractionModel; import org.orekit.forces.gravity.potential.GravityFieldFactory; +import org.orekit.forces.gravity.potential.ICGEMFormatReader; import org.orekit.forces.gravity.potential.NormalizedSphericalHarmonicsProvider; import org.orekit.forces.gravity.potential.UnnormalizedSphericalHarmonicsProvider; import org.orekit.frames.FramesFactory; @@ -49,6 +50,9 @@ import org.orekit.propagation.analytical.EcksteinHechlerPropagator; import org.orekit.propagation.events.DateDetector; import org.orekit.propagation.events.handlers.StopOnEvent; import org.orekit.propagation.numerical.NumericalPropagator; +import org.orekit.propagation.semianalytical.dsst.DSSTPropagator; +import org.orekit.propagation.semianalytical.dsst.forces.DSSTForceModel; +import org.orekit.propagation.semianalytical.dsst.forces.DSSTZonal; import org.orekit.time.AbsoluteDate; import org.orekit.time.DateComponents; import org.orekit.time.TimeComponents; @@ -59,6 +63,45 @@ import org.orekit.utils.IERSConventions; public class PropagatorsParallelizerTest { + @Test + public void testIssue717() { + + // Gravity + Utils.setDataRoot("regular-data:potential/icgem-format"); + GravityFieldFactory.addPotentialCoefficientsReader(new ICGEMFormatReader("^eigen-6s-truncated$", false)); + UnnormalizedSphericalHarmonicsProvider gravity = GravityFieldFactory.getUnnormalizedProvider(8, 8); + + // Orbit + Orbit orbit = new KeplerianOrbit(15000000.0, 0.125, 1.25, + 0.250, 1.375, 0.0625, PositionAngle.MEAN, + FramesFactory.getEME2000(), + new AbsoluteDate(2000, 2, 24, 11, 35, 47.0, TimeScalesFactory.getUTC()), + gravity.getMu()); + + + // Propagator + final double[][] tol = DSSTPropagator.tolerances(0.01, orbit); + final DSSTPropagator propagator = new DSSTPropagator(new DormandPrince853Integrator(0.01, 600.0, tol[0], tol[1]), PropagationType.OSCULATING); + + // Force models + final DSSTForceModel zonal = new DSSTZonal(gravity, 4, 3, 9); + propagator.addForceModel(zonal); + + propagator.setInitialState(new SpacecraftState(orbit)); + + // Configure epochs in order to have a backward propagation mode + final double deltaT = 30.0; + + final PropagatorsParallelizer parallelizer = + new PropagatorsParallelizer(Arrays.asList(propagator), interpolators -> {interpolators.get(0).getCurrentState().getDate();}); + + final SpacecraftState state = parallelizer.propagate(orbit.getDate().shiftedBy(deltaT).shiftedBy(+1.0), orbit.getDate().shiftedBy(-2.0 * deltaT).shiftedBy(-1.0)).get(0); + + // Verify that the backward propagation worked properly + Assert.assertNotNull(state); + + } + @Test public void testNumericalNotInitialized() {