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

Re: [Orekit Developers] EGM96 vs. WGS84-EGM96




Hank Grabowski <hank@applieddefense.com> a écrit :

Hello all,

Hi Hank,


I'm in the process of doing a V&V suite of the Orekit numerical integration
and force modeling system.  I'm comparing this against a data set we
generated for validating one of my company's products, SDT.  In that
process I've run into a subtly that comes up periodically but that is not
directly addressed by Orekit right now.  Orekit has coded up the EGM96
reader to assume the EGM96 constants for ae and mu as defined by this site:

http://cddis.nasa.gov/926/egm96/getit.html

However a second version of this, the so-called WGS84 EGM96 model, has a
slight different ae and mu.  The rest of the coefficients are the same.
You would get that model from this site:

http://earth-info.nga.mil/GandG/wgs84/gravitymod/egm96/egm96.html

Because the geopotential model is the same the big difference are these two
slight differences in ae and mu, but that's enough to throw things off if
you are using a different model.

It is really a pity mu and ae are not in the header of the file ... This EGM
peculiarity always bugged me.
Also from a physical point of view, I don't understand how the coefficients could be the same if the scaling factors change: they should all have been scaled according to mu / ae^n to get the same field ... Are you sure the coefficients from the NGA
site are really intended for space dynamics computation? The page states:

  The WGS 84 constants used to define the geometry and the normal field of the
  reference ellipsoid in the calculation of this geoid height

Maybe this could be interpreted only as an hint to use these coefficients only for
geoid computations (as in the new class Evan committed recently)?

In the EGM96FormatReader code we have a
note that reads, "both EGM96 and EGM2008 use the same values for ae and mu.
if a new EGM model changes them, we should have some selection logic. based
on file name (a better way would be to have the data in the file...)"  For
my tests I simply added an argument that let me override the ae and mu with
the WGS84 versions.  However that would mean that in order to use the WGS84
coefficients the user has to manually override that behavior.   Would it
maybe be better for us to include an "egm96" and a "wgs84egm96" file, both
identical, and add the logic to search for the override the coefficients
with the WGS84 coefficients when that occurs?

If we can be sure the second set of coefficients are really meaningful for
flight dynamics, then for sure some logic has to be added. As the constructor
is called automatically by GravityFieldFactory.addDefaultPotentialCoefficientsReaders, adding the mu and ae coefficients to the constructor would only move the problem from one class to another class. So your idea of relying on file name is fine to me. If the name contains "wgs84" or "WGS84", use the corresponding constants, in all other cases use the regular constants. Note that we should also adjust the regular expression
EGM_FILENAME in GravityFieldFactory.

However, I strongly advise *against* providing both files in the orekit-data or suggesting the user to do so. In fact, the loading mechanism is probably too smart here: for any data set, it will pick up the first chunk of data among the several formats that are supported by default, except if user explicitly taylored the default loaders. This is true for EOP, for ephemerides and also for gravity fields. This means that having both egm96 and wgs84egm96 would not be reliable as in some cases the library would find one file or the other as the first one and pick it up. The reason for this behavior is found in the javadoc specification of the listFiles method from java.io.File
that is used in DirectoryCrawler:

There is no guarantee that the name strings in the resulting array will appear
  in any specific order; they are not, in particular, guaranteed to appear in
  alphabetical order.

Even on the same operating system, with identical JVM, identical files layout the order was different. We were hit several time by this feature in the unit tests. At least on Linux the order seems related to inode numbers, which are almost random and depend on the file system state when you create the file, typically by unzipping an
archive or copying them.

So I'm +1 for a coefficient selection based on the found file name, but -1 to put
several gravity fields in orekit-data.

Thank you for spotting this subtle issue.

Luc


Hank