Opened 5 years ago

Closed 4 years ago

#660 closed task (fixed)

ecCodes: include ecCodes dependency and add associated routines to ropp_io

Reported by: warrick Owned by: Kent Bækgaard Lauritsen
Priority: normal Milestone: 10.0
Component: ROPP(all) Version: 9.0
Keywords: Cc:

Description

The ECMWF ecCodes library is intended as a long-term replacement for ECMWF's GRIB_API and BUFRDC packages.

This ticket covers the inclusion of the ecCodes dependency package in ROPP and the changes to the ropp_io module needed to read and write BUFR files with ecCodes routines and to read GRIB files.

Reading GRIB with ecCodes is a small change that simply looks for the GRIB_API library within ecCodes instead of GRIB_API.

BUFR encoding/decoding with ecCodes takes a different approach to BUFRDC. ecCodes uses 'keys' such as 'meanFrequency' to read and write elements to/from BUFR. To handle this new approach new routines are now built if the ecCodes library is found: ropp2bufr_eccodes, bufr2ropp_eccodes and eum2bufr_eccodes.

For now, users can use continue to use or BUFRDC and/or GRIB_API, switching to ecCodes is optional. However ecCodes is expected to replace these dependencies entirely in the long run.

Attachments (1)

test_gts_headers (994 bytes ) - added by warrick 4 years ago.
Script used to compare ECBUFR way of setting GTS headers with new way using perl script

Download all attachments as: .zip

Change history (7)

comment:1 by warrick, 5 years ago

This work is being carried out on this branch

comment:2 by warrick, 4 years ago

This work was merged into ROPP100_prototype here

comment:3 by warrick, 4 years ago

The addition of ecCodes to ROPP_IO includes new tests in ropp_io/tests: t_eum2bufr_eccodes.sh and t_ropp2bufr_eccodes.sh (which also tests bufr2ropp_eccodes) The tests run are the same as their ECBUFR/MOBUFr counterparts, converting NetCDF to BUFR and back again, then checking whether the results are identical.

by warrick, 4 years ago

Attachment: test_gts_headers added

Script used to compare ECBUFR way of setting GTS headers with new way using perl script

comment:4 by warrick, 4 years ago

The test in the above comment was necessary as in its current state, ecCodes can't set GTS headers. But there is a perl script available from the NWP SAF that can do it. The script writes GTS headers the old way with ECBUFR and the new way with the perl script, then compares the result with an octal dump.

comment:5 by warrick, 4 years ago

Following the beta review, some improvments to the use of ecCodes were suggested, which you can read more about on the following tickets:

#667 - mention environment variable ECCODES_BUFR_SET_TO_MISSING_IF_OUT_OF_RANGE in more parts of ROPP documentation

#670 - provide a patch for editing ecCodes source, rather than just instructions.

#671 - rather than setting ECCODES_BUFR_SET_TO_MISSING_IF_OUT_OF_RANGE as environment variable, set from within Fortran using patch provided by EUMETSAT

#678 - make ecCodes GTS header encoding clearer by printing the key information for the user from eum2bufr_eccodes and ropp2bufr_eccodes

comment:6 by warrick, 4 years ago

Resolution: fixed
Status: newclosed
Note: See TracTickets for help on using tickets.