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格式应用指南(试用版)》有目前使用的大部分自定义编码。