[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Orekit Developers] huge improvement in ITRF frame performances
- To: orekit-developers@orekit.org
- Subject: [Orekit Developers] huge improvement in ITRF frame performances
- From: MAISONOBE Luc <luc.maisonobe@c-s.fr>
- Date: Tue, 02 Jun 2015 11:29:01 +0200
- User-agent: Internet Messaging Program (IMP) H5 (6.2.3)
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