[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