GRIB学习笔记:添加自定义表格

目录

使用 ecCodes 查看 GRAPES GFS 模式的 GRIB 2 文件,有很多变量无法自动识别。

例如下面grib_ls命令输出中,无法识别shortName的变量用unknown表示。

805          2            babj         20200328     fc           regular_ll   isobaricInhPa  950          3            unknown      grid_jpeg
806          2            babj         20200328     fc           regular_ll   isobaricInhPa  925          3            unknown      grid_jpeg

下面grib_dump命令输出中可以看到,表格grib2/tables/4/4.2.0.2.table中没有225的条目,该值属于自定义字段。

======================   SECTION_4 ( length=34, padding=0 )    ======================
1-4       section4Length = 34
5         numberOfSection = 4
6-7       NV = 0
8-9       productDefinitionTemplateNumber = 0 [Analysis or forecast at a horizontal level or in a horizontal layer at a point in time (grib2/tables/4/4.0.table) ]
10        parameterCategory = 2 [Momentum (grib2/tables/4/4.1.0.table) ]
11        parameterNumber = 225 [Unknown code table entry (grib2/tables/4/4.2.0.2.table) ]

本文介绍如何添加自定义表格,让 ecCodes 可以自动识别自定义的变量。

定义文件

ecCodes会在环境变量ECCODES_DEFINITION_PATH中寻找定义文件,使用codes_info命令可以查看当前的定义文件路径。

例如 CMA-PI 上软件包 apps/eccodes/2.17.0/intel 的定义文件路径如下所示。

$ codes_info

ecCodes Version 2.17.0

Default definition files path is used: /g1/app/mathlib/eccodes/2.17.0/intel/share/eccodes/definitions
Definition files path can be changed by setting ECCODES_DEFINITION_PATH environment variable

Default SAMPLES path is used: /g1/app/mathlib/eccodes/2.17.0/intel/share/eccodes/samples
SAMPLES path can be changed by setting ECCODES_SAMPLES_PATH environment variable

与 GRIB 2 相关的定义文件在 grib2 目录下。

添加变量表格

首先看一下官方的grib2/tables/4/4.2.0.2.table文件。 每行由四部分组成:序号,缩写,变量名和单位。

# Product Discipline 0: Meteorological products, Parameter Category 2: Momentum
0 0 Wind direction (from which blowing) (deg true)
1 1 Wind speed (m s-1)
2 2 u-component of wind (m s-1)
3 3 v-component of wind (m s-1)
...skip...
# 31-191 Reserved
# 192-254 Reserved for local use
255 255 Missing

可以看到 225 属于 local use。在该文件中增加下面一行,就可以在grib_dump中识别该要素。

225 mpv1 Moist potential vorticity

添加shortName

shortName 不属于 WMO 的标准,是 ecCodes 附加的属性,定义在grib2/shortName.def文件中。 变量定义示例如下所示:

#Total precipitation of at least 1 mm
'tpg1' = {
	 discipline = 0 ;
	 parameterCategory = 1 ;
	 parameterNumber = 52 ;
	 productDefinitionTemplateNumber = 9 ;
	 typeOfFirstFixedSurface = 1 ;
	 typeOfStatisticalProcessing = 1 ;
	 scaledValueOfLowerLimit = 1 ;
	 probabilityType = 3 ;
	 scaleFactorOfLowerLimit = 0 ;
	}

在文件中增加一项,就能在grib_ls中识别该要素。

'mpv1' = {
	 discipline = 0 ;
	 parameterCategory = 2 ;
	 parameterNumber = 225 ;
	}

自定义表格

上面的方式需要修改 ecCodes 附带的 definitions 文件,每次重新安装都需要手动修改,不具有通用性。

ecCodes支持本地表格,只需增加相应的文件,无需修改已有文件。

自定义的变量表格放在grib2/tables/local目录下。 该目录下ecmf包含ECMWF的自定义表格,GRAPES 模式的自定义表格需要放在babj目录下。

GRAPES GFS 使用的本地表格版本localTablesVsersion为1,所以创建grib2/tables/local/babj/1目录. 在该目录下创建4.2.0.2.table文件,包含如下内容:

225 mpv1 Moist potential vorticity

同样,shortName 也可以使用本地自定义文件,目录为grib2/localConcepts。 仿照下面的ecmf创建babj目录,并在babj目录下创建shortName.def文件,包含如下内容:

'mpv1' = {
	 discipline = 0 ;
	 parameterCategory = 2 ;
	 parameterNumber = 225 ;
	}

上述方法在每次重新安装ecCodes后,都需要重新创建或拷贝文件到指定的目录,不利于迁移。

ECCODES_DEFINITION_PATH变量支持设置多个目录,我们可以将自定的文件按照上面的目录层次放到单独的目录中,将该目录附加到ECCODES_DEFINITION_PATH中,这样只需要修改环境变量就可以让任意 ecCodes 环境识别自定义变量。

例如在下面的目录中创建上面两个文件:

[wangdp@login_a03 /g3/wangdp/usr/local/share/nwpc/eccodes/definitions]$ find .
.
./grib2
./grib2/tables
./grib2/tables/local
./grib2/tables/local/babj
./grib2/tables/local/babj/1
./grib2/tables/local/babj/1/4.2.0.2.table
./grib2/localConcepts
./grib2/localConcepts/babj
./grib2/localConcepts/babj/shortName.def

添加到ECCODES_DEFINITION_PATH后运行codes_info

$ codes_info

ecCodes Version 2.17.0

Definition files path from environment variable ECCODES_DEFINITION_PATH=/g3/wangdp/usr/local/share/nwpc/eccodes/definitions:/g1/app/mathlib/eccodes/2.17.0/intel/share/eccodes/definitions

Default SAMPLES path is used: /g1/app/mathlib/eccodes/2.17.0/intel/share/eccodes/samples
SAMPLES path can be changed by setting ECCODES_SAMPLES_PATH environment variable

效果

增加自定义表格后 grib_dump 的输出

10        parameterCategory = 2 [Momentum (grib2/tables/4/4.1.0.table) ]
11        parameterNumber = 225 [Moist potential vorticity (grib2/tables/4/4.2.0.2.table , grib2/tables/local/babj/1/4.2.0.2.table) ]

增加自定义文件后 grib_ls 的输出

803          2            babj         20200328     fc           regular_ll   isobaricInhPa  1000         3            mpv1         grid_jpeg
804          2            babj         20200328     fc           regular_ll   isobaricInhPa  975          3            mpv1         grid_jpeg
805          2            babj         20200328     fc           regular_ll   isobaricInhPa  950          3            mpv1         grid_jpeg
806          2            babj         20200328     fc           regular_ll   isobaricInhPa  925          3            mpv1         grid_jpeg

参考

请访问气象局内网检索《预报司关于印发BUFR等6种气象数据标准格式应用指南的通知》(气预函〔2017〕39号,2018年7月1日),附件《GRIB格式应用指南(试用版)》有目前使用的大部分自定义编码。