将GRIB2变量名从pynio映射到cfgrib



我在x86 linux机器上有一个工作程序,它使用pynio从NOAA的NBM产品读取grib2文件。代码的简化版本如下所示:

import Nio
f = Nio.open_file('foo.grib2', mode='r', options=None)
vars = list(f.variables)

当我打印变量列表时,我得到像

这样的东西
APCP_P8_L1_acc1h
APCP_P9_L1_acc1h
APTMP_P0_L103
ASNOW_P8_L1_acc1h
CAPE_P0_L1
CAPE_P2_L1
CEIL_P0_L2
CEIL_P0_L215
CEIL_P5_L215
CEIL_probability2
DIST_P0_2L1_103
etc.

现在我必须将我的程序移植到不支持Nio模块的体系结构(aarch64)上,所以我显然必须使用cfgrib模块,并开始使用它。

varlist = []
datasets = cfgrib.open_datasets('foo.grib2') # Opens a single file as a list of datasets

for ds in datasets:
for v in ds.variables:
varlist.append(v)

varlist = list(set(varlist)) # eliminate duplicate entries

这个新列表包含的条目如下:

aptmp
asnow
atmosphere
atmosphereSingleLayer
cape
ceil
cloudBase
cloudCeiling
cloudTop
d2m
dswrf
gust
h
heightAboveGround
heightAboveSea
etc.

这里需要注意的重点是

  • 使用两种不同方法获得的变量名之间没有直接对应关系;
  • 我以前使用的多个变量(例如,CEIL_P0_L2,CEIL_P0_L215,CEIL_P5_L215)似乎对应于变量(例如,ceil)在不同子数据集中的递归,当我读取cfgrib文件时;
  • 显示其他变量名(例如,atmosphere,atmosphereSingleLayer),这些变量名似乎发挥了作用,而不是作为实际的数值字段。
  • 许多网格字段显示为变量名称unknown(未在上面的部分清单中显示),我不知道如何弄清楚这些是什么,甚至打印数据集的所有字段。

我的问题:为什么变量名不同,更重要的是,我如何使用cfgrib来可靠地识别和提取与Nio看到(或构造?)的原始变量名对应的字段?

警告:原始的Nio程序最后一次在近一年前的NBM文件上运行,而我在2021年8月从同一来源获得的文件上运行cfgrib。我想这些文件的内部结构可能在此期间发生了变化,尽管这似乎不太可能。

所以首先,这不是一个属于stackoverflow的问题,请在将来使用例如https://earthscience.stackexchange.com/

名称不同的原因是软件包使用了不同的默认grib_tables。在这些grib_tables中定义和映射变量和标识符。因此,如果希望得到相同的结果,就必须同步grib_tables。由于cfgrib使用ECCODES作为后端,您可以查看ECCODES_DEFINTIONS_PATH

相关内容

  • 没有找到相关文章

最新更新