Jacobian parameters computation model

Hi,

I am looking for the computation logic of the jacobian parameters during a numerical propagation scenario with an implemented SRP force model. My goal is to understand how the SRP drag coefficient (e.g Orekit REFLECTION_COEFFICIENT) selected as a parameter driver affects the computation of the jacobian parameters throughout the numerical propagation.

The overhaul process leads a bit into a rabbit hole down to the Hipparchus integrator processes.
Is there by any chance a reference paper the jacobian parameters computational model is based on?

Thanks in advance for your assistance.

Best regards,
Gueorguy

The two basic engines involved in this computation are:

  • variational equations (see for example “Solving Ordinary Differential Equations - I : Nonstiff problems” by Hairer, Nørsett and Wanner)
  • algorithmic differentiation (see for example “Evaluating Derivatives - Principal and Techniques of Algorithmic Differentiation” by Griewank and Walther)

Hi,

I can try to elaborate a bit. Hopefully I won’t say anything that is not true.

Basically when you select parameter drivers or the simple STM option, the propagator adds to the so-called primary variables (mass and PV-like coordinates) secondary ones to the integration. Those do not play any role with the adaptive stepsize if applicable. Those variables satisfy differential equations known as variational equations. They are computed using automatic differentiation for Cartesian coordinates (with some tricks to optimise performance), and converted in other type if necessary. That’s the acceleration method in ForceModel (the one with Field). There is then a whole system in place to rearrange these variables in a matrix when the user asks for it. And because Hipparchus integrators all have dense output, there is also a layer so that everything can be interpolated if required. So yeah overall the integration system split between the two librairies is not trivial, but it has many features. I’ll actually be talking a bit about that in the Orekit talk next week.

Note that if you want, you can actually perform automatic differentiation on the propagation itself, using FieldNumericalPropagator. This is usually less computationally effective because literally all calculations are done on non primitive types.

Cheers,
Romain.

1 Like

Thanks for the thorough explanation, Romain! Mine was really terse :woozy_face: