2

I'm trying to use pygrib to read data from a grib2 file, interpolate it using python, and write it to another file. I've tried both pygrib and eccodes and both produce the same problem. The output file size increased by a factor of 3, but when I try to view the data in applications like Weather and Climate Toolkit it has all the variables listed, but "No Data" when plotted. If I use the same script and don't interpolate the data, but just write it to the new file it works fine in WCT. If I use wgrib2 it lists all the grib messages, but if I use wgrib2 -V it works on the unaltered data but produces the error "*** FATAL ERROR: unsupported: code table 5.6=0 ***" for the interpolated data. Am I doing something wrong in my python script? Here is an example of what I'm doing to write the file (same result using pygrib 2.05 and 2.1.3). I used a basic hrrr file for the example.

import pygrib
import numpy as np
import sys

def writeNoChange():
    # This produces a useable grib file.

    filename = 'hrrr.t00z.wrfprsf06.grib2'
    outfile = 'test.grib2'

    grbs = pygrib.open(filename)

    with open(outfile, 'wb') as outgrb:
        for grb in grbs:
            msg = grb.tostring()
            outgrb.write(msg)
    outgrb.close()
    grbs.close()

def writeChange():
    # This method produces a grib file that isn't recognized by WCT
    
    filename = 'hrrr.t00z.wrfprsf06.grib2'
    outfile = 'testChange.grib2'

    grbs = pygrib.open(filename)

    with open(outfile, 'wb') as outgrb:
        for grb in grbs:
            vals = grb.values * 1
            grb['values'] = vals
            msg = grb.tostring()
            outgrb.write(msg)
    outgrb.close()
    grbs.close()

#-------------------------------
if __name__ == "__main__":
    writeNoChange()
    writeChange()

1 Answers1

0

Table 5.6 for GRIB2 (https://www.nco.ncep.noaa.gov/pmb/docs/grib2/grib2_doc/) is related to "ORDER OF SPATIAL DIFFERENCING".

For some reason, when you modify grb['values'], it sets grb['orderOfSpatialDifferencing'] = 0, which "wgrib2 -V" doesn't like. So, after changing 'values', change 'orderOfSpatialDifferencing' to what it was initially:

orderOfSpatialDifferencing = grb['orderOfSpatialDifferencing']
grb['values']= [new values]
grb['orderOfSpatialDifferencing'] = orderOfSpatialDifferencing

This worked for me in terms of getting wgrib2 -V to work, but messed up the data. Possibly some other variables in Section 5 also need to be modified.

Craig S
  • 1
  • 1