Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Expand
titleMore details

The MARS application has been migrated to use GRIB API as its data decoder instead of GRIBEX. This migration has two components:

  • Migration of the server. For this work, every field in the archive with different encoding had to be tested, to ensure that MARS/grib_api (MARS using GRIB API as its data decoder) indexes the data in the same way as MARS/gribex (MARS using GRIBEX as its data decoder). Most MARS servers have already been migrated and implemented at the end of 2010.
  • Migration of the client. This work involved migration of the following codes:
    • migration of the MARS client source code
    • migration of the interpolation software (libemos)

Because the interpolation software (libemos) uses extensively GRIBEX, many parts of the code had to be modified. Please see Field interpolation software for more information.

For the migration of the MARS client we have tried, as much as possible, to avoid changes to the GRIB headers or the results. Extensive tests have been run and comparisons between interpolations of MARS/gribex and MARS/grib_api have been performed using

grib_compare -P -T 2 ...

where the options have been chosen to skip differences smaller than twice the packing error. However, in some cases we have been unable to produce the same results. At the same time, we have found features of libemos/gribex (libemos using GRIBEX as data decoder) that have been corrected in libemos/grib_api (libemos using GRIB API as data decoder). Please see below for more details on known differences between MARS/gribex and MARS/grib_api.

MARS client for installation in Member States

For a grib_api MARS client version 20110322 or higher should be used, which needs to be compiled with libemos 381 (or higher) and grib_api 1.9.9 (or higher), which can be freely downloaded.

Known differences between MARS/gribex and MARS/grib_api

Interpolation of wave mediterranean fields

The interpolation of wave fields has been re-written. The new routine correctly recognizes sea points on the southernmost, last latitude for limited area wave fields. This has been verified by the wave experts. Libemos/gribex has not been fixed.

Bitmaps and frames

MARS/gribex doesn't initialise bitmaps (which are also used for frames), while MARS/grib_api initialises bitmaps to 0. Since bitmap arrays are filled differently, for bitmaps that do not fit a multiple of 8, the remaining bits can have different values.

One can detect this difference by running grib_compare, which produces the following output:

-- GRIB #5 -- shortName=10u paramId=165 stepRange=120 levelType=sfc level=0 packingType=grid_simple gridType=rotated_ll --
[bitmap] byte value 5888 of 5889 are different: [e5] and [e0]

Different behaviour in MARS (not necessarily interpolation)

streamGRIBEXstream=da/wv/ef/...
GRIB APIstream=oper/wave/enfo/...
stream=mnthGRIBEXstream=mnth,date=20110100
GRIB APIstream=mnth,date=20110101
computeGRIBEXcompute repacks using simple packing
GRIB APIcompute repacks whatever was the original packing

Attachments