[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Orekit Developers] huge improvement in ITRF frame performances



Hi all,

In many space flight dynamics applications, one of the main performance bottleneck is related to frames transforms between inertial frames (typically EME2000) and Earth frames (typically ITRF). This is due to precession-nutation models which are huge (MHB-2000 nutation has several thousands terms). We already made a lot of optimization in this area since several years, using cache, sampling an interpolation to avoid recomputing all the terms each time a frame transform is needed. Despite these efforts, these transforms remained the most important performance hog. They are used in all Earth observation computations, and they are also used during propagation (numerical and semi-analytical) as gravity field and atmosphere are expressed with respect to Earth frame.

While working on the Rugged add-on library with the Yourkit profiling tool, it appeared to me that the bottleneck was the Hermite interpolator itself! We had optimized everything else so much that the computation time is now spent there. This was quite a surprise to me.

As second order derivatives are available in the transforms since 7.0, it seemed possible to use a quadratic Taylor expansion on one point instead of building a complete Hermite interpolation on several points (typically 6 points for precession-nutation transforms for example). Our raw transform providers do not compute the time derivatives themselves, so we still need an Hermite interpolator in the processing chain to get these derivatives. However, we can restrict the use of this interpolator on the sampling points only, not for all transforms the user will ask for. The architecture I tested is therefore based on a two levels cache for several frames in FramesFactory (CIRF, TOD, GTOD and TEME): one interpolator on top of the raw provider and one Taylor-based shifter on top of the interpolator.

The results exceeded my wildest dreams. Computing transforms between EME2000 and ITRF, with IERS 2010 conventions and simple EOP are more than 3 times faster than before! Accuracy appears to be still the same (I had to slightly change only 4 tests threshold which were quite tight). Unfortunately, the improvement is neglectible when simple EOP is set to false (i.e. short period tidal effects are taken into account in EOP interpolation, which is needed when centimeter level accuracy is required, as the effect is about 0.6 milli-arcseconds). In many applications, simple EOP are sufficient.

As these frame transforms are critical ones for all applications, I would like the community to check if the change does not create unnoticed problems. Could some of you check out the current development version of Orekit (master branch), and give it a try with your own applications? I would like to know if you see a performance improvement and if you see some problems (mainly with respect to accuracy).

Thanks in advance.
Luc