【问题标题】:mapping GRIB2 variable names from pynio to cfgrib将 GRIB2 变量名称从 pynio 映射到 cfgrib
【发布时间】:2021-10-30 10:53:39
【问题描述】:

我在 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_L2CEIL_P0_L215CEIL_P5_L215)似乎对应于变量(例如,ceil)在不同子数据集中的重复出现cfgrib;
  • 出现的其他变量名称(例如,atmosphereatmosphereSingleLayer)似乎在实际数字字段之外发挥作用。
  • 许多网格字段显示为变量名称unknown(上面的部分列表中未显示),我不知道如何弄清楚这些是什么,甚至打印数据集的所有字段。

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

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

【问题讨论】:

    标签: python cfgrib


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2016-07-07
      • 2013-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-09
      相关资源
      最近更新 更多