Hi,
I do not know if I found a bug in the Dsst propagator or I my usage is wrong, but when I try to propagate with the Dsst propagator in Osculating propagation type and with an event detector I have the following error
org.orekit.errors.OrekitException: sample for interpolation is empty
at org.orekit.errors.OrekitException.unwrap(OrekitException.java:154)
at org.orekit.propagation.integration.AbstractIntegratedPropagator.propagate(AbstractIntegratedPropagator.java:492)
at org.orekit.propagation.integration.AbstractIntegratedPropagator.propagate(AbstractIntegratedPropagator.java:414)
at org.orekit.propagation.integration.AbstractIntegratedPropagator.propagate(AbstractIntegratedPropagator.java:397)
Caused by: org.hipparchus.exception.MathIllegalArgumentException: sample for interpolation is empty
at org.hipparchus.analysis.interpolation.HermiteInterpolator.checkInterpolation(HermiteInterpolator.java:277)
at org.hipparchus.analysis.interpolation.HermiteInterpolator.value(HermiteInterpolator.java:176)
at org.orekit.propagation.semianalytical.dsst.utilities.ShortPeriodicsInterpolatedCoefficient.value(ShortPeriodicsInterpolatedCoefficient.java:76)
at org.orekit.propagation.semianalytical.dsst.forces.DSSTZonal$ZonalShortPeriodicCoefficients.value(DSSTZonal.java:1484)
at org.orekit.propagation.semianalytical.dsst.DSSTPropagator$MeanPlusShortPeriodicMapper.mapArrayToState(DSSTPropagator.java:780)
at org.orekit.propagation.integration.StateMapper.mapArrayToState(StateMapper.java:167)
at org.orekit.propagation.integration.AbstractIntegratedPropagator.getCompleteState(AbstractIntegratedPropagator.java:593)
at org.orekit.propagation.integration.AbstractIntegratedPropagator.access$600(AbstractIntegratedPropagator.java:63)
at org.orekit.propagation.integration.AbstractIntegratedPropagator$AdaptedEventDetector.init(AbstractIntegratedPropagator.java:772)
at org.hipparchus.ode.AbstractIntegrator.initIntegration(AbstractIntegrator.java:225)
at org.hipparchus.ode.nonstiff.EmbeddedRungeKuttaIntegrator.integrate(EmbeddedRungeKuttaIntegrator.java:196)
at org.orekit.propagation.integration.AbstractIntegratedPropagator.propagate(AbstractIntegratedPropagator.java:466)
... 42 more
As far as I analyzed, I think the detector is the main problem because it uses the complete state to be initialized and I guess some short period coefficients used by the Dsst Force Model have not be initialized. Indeed when I remove the event detector, I have no problem to propagate with Dsst.
Another thing interesting, when I propagate with in Mean propagation type, the problem does not occur.
You will find my test below (after orekit data initialization).
import org.hipparchus.util.FastMath;
import org.junit.jupiter.api.Test;
import org.orekit.forces.gravity.potential.GravityFieldFactory;
import org.orekit.forces.gravity.potential.UnnormalizedSphericalHarmonicsProvider;
import org.orekit.frames.FactoryManagedFrame;
import org.orekit.frames.FramesFactory;
import org.orekit.orbits.KeplerianOrbit;
import org.orekit.orbits.PositionAngle;
import org.orekit.propagation.PropagationType;
import org.orekit.propagation.conversion.DSSTPropagatorBuilder;
import org.orekit.propagation.conversion.DormandPrince853IntegratorBuilder;
import org.orekit.propagation.events.NodeDetector;
import org.orekit.propagation.events.handlers.StopOnEvent;
import org.orekit.propagation.semianalytical.dsst.DSSTPropagator;
import org.orekit.propagation.semianalytical.dsst.forces.DSSTZonal;
import org.orekit.time.AbsoluteDate;
import org.orekit.time.TimeScalesFactory;
import org.orekit.utils.Constants;
public class DsstTest {
@Test
public void testDsst() {
AbsoluteDate date = new AbsoluteDate(2000, 1, 1, 0, 0, 0, TimeScalesFactory.getUTC());
FactoryManagedFrame frame = FramesFactory.getTOD(false);
KeplerianOrbit orbit = new KeplerianOrbit(7000e3, 1e-3, FastMath.toRadians(98.0), 0.0, 0.0, 0.0, PositionAngle.TRUE, frame, date, Constants.WGS84_EARTH_MU);
DormandPrince853IntegratorBuilder integrator = new DormandPrince853IntegratorBuilder(1.0, 86400, 10.0);
DSSTPropagatorBuilder builder = new DSSTPropagatorBuilder(orbit, integrator, 10e3, PropagationType.OSCULATING, PropagationType.OSCULATING);
DSSTPropagator dsstPropagator = builder.buildPropagator(builder.getSelectedNormalizedParameters());
dsstPropagator.addEventDetector(new NodeDetector(orbit, frame).withHandler(new StopOnEvent<>()));
dsstPropagator.addForceModel(newDsstZonal());
dsstPropagator.propagate(date.shiftedBy(10.0));
}
private DSSTZonal newDsstZonal() {
UnnormalizedSphericalHarmonicsProvider provider = GravityFieldFactory.getUnnormalizedProvider(6, 4);
int maxDegreeShortPeriodics = 6;
int maxEccPowShortPeriodics = 4;
int maxFrequencyShortPeriodics = 12;
return new DSSTZonal(provider, maxDegreeShortPeriodics, maxEccPowShortPeriodics, maxFrequencyShortPeriodics);
}
}
Thank you for your answer.
Best regards,
Dorian