High order geopotential


I’m comparing different gravitational potentials using different orders (2x0, 4x4, 12x12, 30x30, 50x50).
The code crashes when I use the 50 x 50 with a satellite in a LEO orbit, while it works when the satellite is in GSO regime.

It is in Spanish but the error says that the mean orbit can not be computed from the osculating orbit after 201 iterations:

Traceback (most recent call last):
  File "C:\Users\veron\PycharmProjects\pythonProject8\MainGravityField.py", line 12, in <module>
  File "C:\Users\veron\PycharmProjects\pythonProject8\GravityField.py", line 158, in GravityField
    propagator.propagate(mytle.getDate().shiftedBy(step), mytle.getDate().shiftedBy(propTime))
orekit.JavaError: <super: <class 'JavaError'>, <JavaError object>>
    Java stacktrace:
org.orekit.errors.OrekitException: no se puede calcular la órbita media a partir de la órbita osculatriz tras 201 iteraciones
	at org.orekit.propagation.semianalytical.dsst.DSSTPropagator.computeMeanOrbit(DSSTPropagator.java:878)
	at org.orekit.propagation.semianalytical.dsst.DSSTPropagator.computeMeanState(DSSTPropagator.java:676)
	at org.orekit.propagation.semianalytical.dsst.DSSTPropagator.computeMeanState(DSSTPropagator.java:647)
	at org.orekit.propagation.semianalytical.dsst.DSSTPropagator.getInitialIntegrationState(DSSTPropagator.java:914)
	at org.orekit.propagation.integration.AbstractIntegratedPropagator.integrateDynamics(AbstractIntegratedPropagator.java:470)
	at org.orekit.propagation.integration.AbstractIntegratedPropagator.propagate(AbstractIntegratedPropagator.java:408)

My initial state is:

{a: 4.216995464895779E7; e: 0.07553692010510152; i: 42.64943202302515; pa: -89.35003532572065; raan: 130.24389087722417; v: -87.95636131957873;}

I’m using the DSST propagator, with the DormandPrince853Integrator and a PythonOrekitFixedStepHandler.

I’m adding the Gravity potential as follows:

provider = GravityFieldFactory.getUnnormalizedProvider(50, 50)
propagator.addForceModel(DSSTTesseral(earth.getBodyFrame(),Constants.WGS84_EARTH_ANGULAR_VELOCITY, provider))

Thanks in advance

Hi there,

It’s failing to convert osculating into mean, which is an iterative process. I believe you can try increasing the number of iterations.


That’s complicated because it occurs at the beginning of the propagation and the DSST propagator cannot be configured for that. So, the conversion shall be done before the propagation.
What you could try is:

  1. Convert, before the propagation, your osculating orbit to a mean orbit using DSSTPropagator.computeMeanState(osculatingState, attitudeProvider, forceModels, epsilon, maxIteration)
  2. Set the mean state to the DSSTPropagator using: dsst.setInitialState(meanState, PropagationType.MEAN)
  3. Run the propagation

The only difference is that you perform the osc to mean conversion instead of the DSST propagator. So you can configure the conversion with epsilon and maxIteration values.
The default epsilon value is 10-11. You could try 10-7. You could also try to increase maxIteration as Romain recommended.