Skip to content

Fixed issue #970 & #1067 : Add an interpolate covariance method in Ephemeris and replace TimeInterpolable with TimeInterpolator

Vincent CUCCHIETTI requested to merge vcucchie/orekit:issue-970 into develop

Hi everyone,

Opening this merge request to close issue #970 (closed) & close issue #1067 (closed).

To briefly re-introduce the issue, the goal of this issue is to implement the possibility to interpolate state covariances using the blending method introduced in "EFFICIENT COVARIANCE INTERPOLATION USING BLENDING OF APPROXIMATE STATE ERROR TRANSITIONS" by Sergei Tanygin. Ultimately, this will be used inside the Ephemeris class through a "getCovariance(interpolating date)" method.

To do so cleanly, I created a completely new architecture for interpolation through the addition of a TimeInterpolator interface as well as its field equivalent. It is then implemented by classes specialized in interpolating specific objects. This new architecture is very modular and also redefine the architecture of Ephemeris.

I think that with this addition, we could completely delete the existing TimeInterpolable interface. I already talked about this with @pascal and @MaximeJ but I would like to hear your thoughts on this @luc, @bryan and @Serrof please 🙏. Everything is ready to replace the current TimeInterpolable interface but I will not delete it until I have your go.

Finally, this merge request needs Hipparchus issue 244 in order to be implemented.

You'll also find attached a short technical paper explaining the implementation and results obtained using this blending method compared to standard interpolation : Implementation_of_covariance_interpolation_in_Orekit-1.pdf

Cheers, Vincent

UPDATE: This merge request is almost done. In addition to the review of @Jasquier (many thanks to him for this tremendous task !), i'll put below a task list of what i've personally checked :

  • Added TimeInterpolator interface and its implementations for all classes implementing the TimeInterpolable interface (except for Transform and FieldTransform).
  • Added warning about Runge's phenomenon to all Hermite interpolators
  • Copy specific javadoc of old interpolate methods to the interpolate method of new equivalent interpolator classes.
  • Moved tests of old interpolate methods to their new equivalent interpolator tests classes.
  • Removed TimeInterpolable Interface and associated interpolate method in implementing classes (except for Transform and FieldTransform).
  • Ensure a test coverage of > 95% for added code
  • Fix state covariance (velocity part) interpolation expressed in local orbital frame that are not considered pseudo-inertial. EDIT : It turns out that it was not an issue but the normal behaviour after investigation.
Edited by Vincent CUCCHIETTI

Merge request reports