DSST Propagator Issues at low altitudes

In trying to use DSST Propagator in Orekit 10.0, to propagate down to bottom of ionosphere, I observe the following issues:

  1. Normally, simulations abort with this type error:
    org.orekit.errors.OrekitException: altitude (85,116.548 m) is below the 100,000 m allowed threshold
    at org.orekit.models.earth.atmosphere.HarrisPriester.getDensity(HarrisPriester.java:283)
    at com.ray.orbits.MainTmp$1.getDensity(MainTmp.java:624)
    at org.orekit.forces.drag.DragForce.acceleration(DragForce.java:87)
    at org.orekit.propagation.semianalytical.dsst.forces.AbstractGaussianContribution$IntegrableFunction.value(AbstractGaussianContribution.java:939)
    at org.orekit.propagation.semianalytical.dsst.forces.AbstractGaussianContribution$GaussQuadrature.basicIntegrate(AbstractGaussianContribution.java:1675)
    at org.orekit.propagation.semianalytical.dsst.forces.AbstractGaussianContribution$GaussQuadrature.integrate(AbstractGaussianContribution.java:1587)
    at org.orekit.propagation.semianalytical.dsst.forces.AbstractGaussianContribution.getMeanElementRate(AbstractGaussianContribution.java:364)
    at org.orekit.propagation.semianalytical.dsst.forces.AbstractGaussianContribution.getMeanElementRate(AbstractGaussianContribution.java:278)
    at org.orekit.propagation.semianalytical.dsst.DSSTPropagator$Main.elementRates(DSSTPropagator.java:933)
    at org.orekit.propagation.semianalytical.dsst.DSSTPropagator$Main.computeDerivatives(DSSTPropagator.java:912)
    at org.orekit.propagation.integration.AbstractIntegratedPropagator$ConvertedMainStateEquations.computeDerivatives(AbstractIntegratedPropagator.java:675)

  2. Adding: dsstProp.addEventDetector(new AltitudeDetector(150e3, earth));
    then simulations will sometimes end at 150km and other times error #1 is still produced. Decreasing the max time step helps but is not 100% reliable.

  3. Other errors that sometimes occur, even with small max timesteps, include (rarely):
    a) Caused by: org.hipparchus.exception.MathIllegalStateException: NaN appears during integration near time 155,560,100
    at org.hipparchus.ode.nonstiff.EmbeddedRungeKuttaIntegrator.integrate(EmbeddedRungeKuttaIntegrator.java:274)
    at org.orekit.propagation.integration.AbstractIntegratedPropagator.propagate(AbstractIntegratedPropagator.java:466)

and (frequently):

b) Hyperbolic orbits cannot be handled as org.orekit.orbits.EquinoctialOrbit instances (DSSTPropagator: 798).

Questions arise:

a) The problem seems to be that the DSSTPropagator will perform intermediate calculations at altitudes below the limit set by AltitudeDetector. Is there some way to prevent this?

b) Is there a fix for the EquinoctialOrbit exception, which seems especially troublesome?

c) Suppose I wanted to propagate the orbital decay even further (say down to the ground). Should I use DSSTPropagator down to some altitude and then something else below that? What is “some altitude” and what is “something else”?



Hi @jschatzman,

Welcome to the Orekit forum.

Can you try with a NRLMSISE00 atmospheric model ? Because this model does not consider a lower limit for the computation of the density. It works for altitudes between 0 and 1000 km.

It is important to know that one of the advantages of using the DSST orbit propagator instead of a numerical orbit propagator is that you can use an important integration step. If you have to reduce the integration step maybe the DSST orbit propagator is not adapted for your simulation and you should use a numerical orbit propagator.

For this point, we need more information to help you, a test case for instance.

In your simulation, I think you are in the case of an hyperbolic atmospheric reentry. DSST propagator works using equinoctial orbits and you cannot initialize an equinoctial orbit if your eccentricity is >= 1.0. In that respect, this issue is due to the test case that it is not adapted with a DSST orbit propagator.

Down to some altitude, the dynamic effects are too important. However, DSST orbit propagator is a tool adapted to support and take into consideration mean effects. I think the best solution for your simulation is to use a NumericalPropagator instead of the DSSTPropagator.

I hope this will help you.

Kind regards,

Hello, as mentioned earlier, NRLMSISE00 should help you with problem no 1.

  1. The error appears because your time step is too large - integration might end at altitude lower than 100km , thus the error. What integrator do you use? What is your minimal stepsize that you allow ?

  2. Also seems to be connected with too large time step.
    Situation at lower altitudes is very dynamic, thus it is the best to use an integrator that can adjust its stepsize.

Basing on my experience, I was able to propagate even quite unusual orbits up to altitude 85 km, with
NRLMSISE00 atmosphere and DormandPrince853 Integrator. Integrato’s setting were: minimal step : 360, max step: 2 * 24 * 3600 , tolerance: 10. Please try with that.


@jschatzman, you can find a topic about DSST integration steps for low altitudes here