import numpy as np
import pandas as pd
import xarray as xr
from reki.format.grib.eccodes import load_field_from_file/home/wangdp/project/cedarkit/notebook-project/notebook-devel/repo/data-notebook-project/data-notebook/.venv/lib/python3.14/site-packages/gribapi/__init__.py:23: UserWarning: ecCodes 2.42.0 or higher is recommended. You are running version 2.34.1
warnings.warn(
from data_notebook.data import get_data_file
gfs_grib2_orig_file_path = get_data_file("cma-gfs")
gfs_grib2_orig_file_pathThe history saving thread hit an unexpected error (OperationalError('attempt to write a readonly database')).History will not be written to the database.
PosixPath('/home/wangdp/project/cedarkit/notebook-project/notebook-devel/repo/data-notebook-project/data-notebook/data/cma-gfs/grib2/orig/Z_NAFP_C_BABJ_20260811000000_P_NWPC-GRAPES-GFS-GLB-02400.grib2')粗糙度¶
| 要素名 | cemc | wgrib2 | eccodes | GRIB Key | 层次类型 | 层次 | 编号 |
|---|---|---|---|---|---|---|---|
| 粗糙度 | znt | - | - | (0, 3, 228) | surface | - | 22 |
field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="znt",
lazy=True
)
assert field.attrs["GRIB_count"] == 22field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter={
"discipline": 0,
"parameterCategory": 3,
"parameterNumber": 228,
},
lazy=True
)
assert field.attrs["GRIB_count"] == 22地形高度¶
| 要素名 | cemc | wgrib2 | eccodes | GRIB Key | 层次类型 | 层次 | 编号 |
|---|---|---|---|---|---|---|---|
| 地形高度 | zs | HGT | orog | (0, 3, 5) | surface | - | 23 |
field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="HGT",
level_type="surface",
lazy=True
)
assert field.attrs["GRIB_count"] == 23field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="orog",
lazy=True
)
assert field.attrs["GRIB_count"] == 23field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="zs",
lazy=True
)
assert field.attrs["GRIB_count"] == 23field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter={
"discipline": 0,
"parameterCategory": 3,
"parameterNumber": 5,
},
level_type="sfc",
lazy=True
)
assert field.attrs["GRIB_count"] == 232sh/2t¶
2米比湿¶
| 要素名 | cemc | wgrib2 | eccodes | GRIB Key | 层次类型 | 层次 | 编号 |
|---|---|---|---|---|---|---|---|
| 2米比湿 | q2m | SPFH | 2sh | (0, 1, 0) | heightAboveGround | 2 | 24 |
field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="SPFH",
level_type="heightAboveGround",
level=2,
lazy=True
)
assert field.attrs["GRIB_count"] == 24field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="2sh",
lazy=True
)
assert field.attrs["GRIB_count"] == 24field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="q2m",
lazy=True
)
assert field.attrs["GRIB_count"] == 24field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter={
"discipline": 0,
"parameterCategory": 1,
"parameterNumber": 0,
},
level_type="heightAboveGround",
level=2,
lazy=True
)
assert field.attrs["GRIB_count"] == 242米温度¶
| 要素名 | cemc | wgrib2 | eccodes | GRIB Key | 层次类型 | 层次 | 编号 |
|---|---|---|---|---|---|---|---|
| 2米温度 | t2m | TMP | 2t | (0, 0, 0) | heightAboveGround | 2 | 25 |
field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="TMP",
level_type="heightAboveGround",
level=2,
lazy=True
)
assert field.attrs["GRIB_count"] == 25field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="2t",
lazy=True
)
assert field.attrs["GRIB_count"] == 25field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="t2m",
lazy=True
)
assert field.attrs["GRIB_count"] == 25field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter={
"discipline": 0,
"parameterCategory": 0,
"parameterNumber": 0,
},
level_type="heightAboveGround",
level=2,
lazy=True
)
assert field.attrs["GRIB_count"] == 2510u/10v¶
10米U¶
| 要素名 | cemc | wgrib2 | eccodes | GRIB Key | 层次类型 | 层次 | 编号 |
|---|---|---|---|---|---|---|---|
| 10米U | u10m | UGRD | 10u | (0, 2, 2) | heightAboveGround | 10 | 26 |
field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="UGRD",
level_type="heightAboveGround",
level=10,
lazy=True
)
assert field.attrs["GRIB_count"] == 26field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="10u",
lazy=True
)
assert field.attrs["GRIB_count"] == 26field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="u10m",
lazy=True
)
assert field.attrs["GRIB_count"] == 26field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter={
"discipline": 0,
"parameterCategory": 2,
"parameterNumber": 2,
},
level_type="heightAboveGround",
level=10,
lazy=True
)
assert field.attrs["GRIB_count"] == 2610米V¶
| 要素名 | cemc | wgrib2 | eccodes | GRIB Key | 层次类型 | 层次 | 编号 |
|---|---|---|---|---|---|---|---|
| 10米V | v10m | VGRD | 10v | (0, 2, 3) | heightAboveGround | 10 | 27 |
field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="VGRD",
level_type="heightAboveGround",
level=10,
lazy=True
)
assert field.attrs["GRIB_count"] == 27field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="10v",
lazy=True
)
assert field.attrs["GRIB_count"] == 27field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="v10m",
lazy=True
)
assert field.attrs["GRIB_count"] == 27field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter={
"discipline": 0,
"parameterCategory": 2,
"parameterNumber": 3,
},
level_type="heightAboveGround",
level=10,
lazy=True
)
assert field.attrs["GRIB_count"] == 27TCDC/LCDC/MCDC/HCDC¶
总云量¶
| 要素名 | cemc | wgrib2 | eccodes | GRIB Key | 层次类型 | 层次 | 编号 |
|---|---|---|---|---|---|---|---|
| 总云量 | tcc | TCDC | tcc | (0, 6, 1) | entireAtmosphere | - | 28 |
field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="TCDC",
lazy=True
)
assert field.attrs["GRIB_count"] == 28field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="tcc",
lazy=True
)
assert field.attrs["GRIB_count"] == 28field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter={
"discipline": 0,
"parameterCategory": 6,
"parameterNumber": 1,
},
level_type="entireAtmosphere",
lazy=True
)
assert field.attrs["GRIB_count"] == 28低云量¶
| 要素名 | cemc | wgrib2 | eccodes | GRIB Key | 层次类型 | 层次 | 编号 |
|---|---|---|---|---|---|---|---|
| 低云量 | lcc | LCDC | lcc | (0, 6, 3) | entireAtmosphere | - | 29 |
field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="LCDC",
lazy=True
)
assert field.attrs["GRIB_count"] == 29field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="lcc",
lazy=True
)
assert field.attrs["GRIB_count"] == 29field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter={
"discipline": 0,
"parameterCategory": 6,
"parameterNumber": 3,
},
level_type="entireAtmosphere",
lazy=True
)
assert field.attrs["GRIB_count"] == 29中云量¶
| 要素名 | cemc | wgrib2 | eccodes | GRIB Key | 层次类型 | 层次 | 编号 |
|---|---|---|---|---|---|---|---|
| 中云量 | mcc | MCDC | mcc | (0, 6, 4) | entireAtmosphere | - | 30 |
field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="MCDC",
lazy=True
)
assert field.attrs["GRIB_count"] == 30field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="mcc",
lazy=True
)
assert field.attrs["GRIB_count"] == 30field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter={
"discipline": 0,
"parameterCategory": 6,
"parameterNumber": 4,
},
level_type="entireAtmosphere",
lazy=True
)
assert field.attrs["GRIB_count"] == 30高云量¶
| 要素名 | cemc | wgrib2 | eccodes | GRIB Key | 层次类型 | 层次 | 编号 |
|---|---|---|---|---|---|---|---|
| 高云量 | hcc | HCDC | hcc | (0, 6, 5) | entireAtmosphere | - | 31 |
field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="HCDC",
lazy=True
)
assert field.attrs["GRIB_count"] == 31field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="hcc",
lazy=True
)
assert field.attrs["GRIB_count"] == 31field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter={
"discipline": 0,
"parameterCategory": 6,
"parameterNumber": 5,
},
level_type="entireAtmosphere",
lazy=True
)
assert field.attrs["GRIB_count"] == 31TCIWV/TCOLW/TCOLI¶
大气总柱水汽含量¶
| 要素名 | cemc | wgrib2 | eccodes | GRIB Key | 层次类型 | 层次 | 编号 |
|---|---|---|---|---|---|---|---|
| 大气总柱水汽含量 | tvw | TCIWV | - | (0, 1, 64) | atmosphere | - | 32 |
field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="TCIWV",
lazy=True
)
assert field.attrs["GRIB_count"] == 32field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="tvw",
lazy=True
)
assert field.attrs["GRIB_count"] == 32field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter={
"discipline": 0,
"parameterCategory": 1,
"parameterNumber": 64,
},
level_type="atmosphere",
lazy=True
)
assert field.attrs["GRIB_count"] == 32大气总柱云水qc含量¶
| 要素名 | cemc | wgrib2 | eccodes | GRIB Key | 层次类型 | 层次 | 编号 |
|---|---|---|---|---|---|---|---|
| 大气总柱云水qc含量 | tcw | TCOLW | - | (0, 1, 69) | atmosphere | - | 33 |
field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="TCOLW",
lazy=True
)
assert field.attrs["GRIB_count"] == 33field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="tcw",
lazy=True
)
assert field.attrs["GRIB_count"] == 33field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter={
"discipline": 0,
"parameterCategory": 1,
"parameterNumber": 69,
},
level_type="atmosphere",
lazy=True
)
assert field.attrs["GRIB_count"] == 33大气总柱云冰含量¶
| 要素名 | cemc | wgrib2 | eccodes | GRIB Key | 层次类型 | 层次 | 编号 |
|---|---|---|---|---|---|---|---|
| 大气总柱云冰含量 | tiw | TCOLI | - | (0, 1, 70) | atmosphere | - | 34 |
field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="TCOLI",
lazy=True
)
assert field.attrs["GRIB_count"] == 34field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="tiw",
lazy=True
)
assert field.attrs["GRIB_count"] == 34field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter={
"discipline": 0,
"parameterCategory": 1,
"parameterNumber": 70,
},
level_type="atmosphere",
lazy=True
)
assert field.attrs["GRIB_count"] == 34边界层高度¶
| 要素名 | cemc | wgrib2 | eccodes | GRIB Key | 层次类型 | 层次 | 编号 |
|---|---|---|---|---|---|---|---|
| 边界层高度 | pblh | HPBL | blh | (0, 3, 18) | surface | - | 35 |
field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="HPBL",
lazy=True
)
assert field.attrs["GRIB_count"] == 35field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="blh",
lazy=True
)
assert field.attrs["GRIB_count"] == 35field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="pblh",
lazy=True
)
assert field.attrs["GRIB_count"] == 35field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter={
"discipline": 0,
"parameterCategory": 3,
"parameterNumber": 18,
},
level_type="surface",
lazy=True
)
assert field.attrs["GRIB_count"] == 35东西向应力¶
| 要素名 | cemc | wgrib2 | eccodes | GRIB Key | 层次类型 | 层次 | 编号 |
|---|---|---|---|---|---|---|---|
| 东西向应力 | wess | - | - | (0, 2, 227) | surface | - | 36 |
field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="wess",
lazy=True
)
assert field.attrs["GRIB_count"] == 36field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter={
"discipline": 0,
"parameterCategory": 2,
"parameterNumber": 227,
},
level_type="surface",
lazy=True
)
assert field.attrs["GRIB_count"] == 36南北向应力¶
| 要素名 | cemc | wgrib2 | eccodes | GRIB Key | 层次类型 | 层次 | 编号 |
|---|---|---|---|---|---|---|---|
| 南北向应力 | nsss | - | - | (0, 2, 228) | surface | - | 37 |
field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="nsss",
lazy=True
)
assert field.attrs["GRIB_count"] == 37field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter={
"discipline": 0,
"parameterCategory": 2,
"parameterNumber": 228,
},
level_type="surface",
lazy=True
)
assert field.attrs["GRIB_count"] == 37雪深¶
| 要素名 | cemc | wgrib2 | eccodes | GRIB Key | 层次类型 | 层次 | 编号 |
|---|---|---|---|---|---|---|---|
| 雪深 | sd | SNOD | sde | (0, 1, 11) | surface | - | 38 |
field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="SNOD",
lazy=True
)
assert field.attrs["GRIB_count"] == 38field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="sde",
lazy=True
)
assert field.attrs["GRIB_count"] == 38field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="sd",
lazy=True
)
assert field.attrs["GRIB_count"] == 38field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter={
"discipline": 0,
"parameterCategory": 1,
"parameterNumber": 11,
},
lazy=True
)
assert field.attrs["GRIB_count"] == 38反照率¶
| 要素名 | cemc | wgrib2 | eccodes | GRIB Key | 层次类型 | 层次 | 编号 |
|---|---|---|---|---|---|---|---|
| 反照率 | albedo | ALBDO | al | (0, 19, 1) | surface | - | 39 |
field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="ALBDO",
lazy=True
)
assert field.attrs["GRIB_count"] == 39field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="al",
lazy=True
)
assert field.attrs["GRIB_count"] == 39field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="albedo",
lazy=True
)
assert field.attrs["GRIB_count"] == 39field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter={
"discipline": 0,
"parameterCategory": 19,
"parameterNumber": 1,
},
lazy=True
)
assert field.attrs["GRIB_count"] == 39TMAX/TMIN/RHMAX/RHMIN¶
2m最高温度¶
| 要素名 | cemc | wgrib2 | eccodes | GRIB Key | 层次类型 | 层次 | 编号 |
|---|---|---|---|---|---|---|---|
| 2m最高温度 | mx2t, tmax2m | TMAX | tmax | (0, 0, 4) | heightAboveGround | 2 | 40 |
field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="TMAX",
level_type="heightAboveGround",
level=2,
lazy=True
)
assert field.attrs["GRIB_count"] == 40field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="tmax",
level_type="heightAboveGround",
level=2,
lazy=True
)
assert field.attrs["GRIB_count"] == 40field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="tmax2m",
lazy=True
)
assert field.attrs["GRIB_count"] == 40field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter={
"discipline": 0,
"parameterCategory": 0,
"parameterNumber": 4,
},
level_type="heightAboveGround",
level=2,
lazy=True
)
assert field.attrs["GRIB_count"] == 402m最低温度¶
| 要素名 | cemc | wgrib2 | eccodes | GRIB Key | 层次类型 | 层次 | 编号 |
|---|---|---|---|---|---|---|---|
| 2m最低温度 | mn2t, tmin2m | TMIN | tmin | (0, 0, 5) | heightAboveGround | 2 | 41 |
field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="TMIN",
level_type="heightAboveGround",
level=2,
lazy=True
)
assert field.attrs["GRIB_count"] == 41field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="tmin",
level_type="heightAboveGround",
level=2,
lazy=True
)
assert field.attrs["GRIB_count"] == 41field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="tmin2m",
lazy=True
)
assert field.attrs["GRIB_count"] == 41field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter={
"discipline": 0,
"parameterCategory": 0,
"parameterNumber": 5,
},
level_type="heightAboveGround",
level=2,
lazy=True
)
assert field.attrs["GRIB_count"] == 412m最高相对湿度¶
| 要素名 | cemc | wgrib2 | eccodes | GRIB Key | 层次类型 | 层次 | 编号 |
|---|---|---|---|---|---|---|---|
| 2m最高相对湿度 | rhmax2m | - | - | (0, 1, 231) | heightAboveGround | 2 | 42 |
field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="rhmax2m",
lazy=True
)
assert field.attrs["GRIB_count"] == 42field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter={
"discipline": 0,
"parameterCategory": 1,
"parameterNumber": 231,
},
level_type="heightAboveGround",
level=2,
lazy=True
)
assert field.attrs["GRIB_count"] == 422m最低相对湿度¶
| 要素名 | cemc | wgrib2 | eccodes | GRIB Key | 层次类型 | 层次 | 编号 |
|---|---|---|---|---|---|---|---|
| 2m最低相对湿度 | rhmin2m | - | - | (0, 1, 232) | heightAboveGround | 2 | 43 |
field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="rhmin2m",
lazy=True
)
assert field.attrs["GRIB_count"] == 43field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter={
"discipline": 0,
"parameterCategory": 1,
"parameterNumber": 232,
},
level_type="heightAboveGround",
level=2,
lazy=True
)
assert field.attrs["GRIB_count"] == 43PRES/PRMSL¶
地面气压¶
| 要素名 | cemc | wgrib2 | eccodes | GRIB Key | 层次类型 | 层次 | 编号 |
|---|---|---|---|---|---|---|---|
| 地面气压 | ps | PRES | sp | (0, 3, 0) | surface | - | 44 |
field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="PRES",
lazy=True
)
assert field.attrs["GRIB_count"] == 44field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="sp",
lazy=True
)
assert field.attrs["GRIB_count"] == 44field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="ps",
lazy=True
)
assert field.attrs["GRIB_count"] == 44field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter={
"discipline": 0,
"parameterCategory": 3,
"parameterNumber": 0,
},
level_type="surface",
lazy=True
)
assert field.attrs["GRIB_count"] == 44海平面气压¶
| 要素名 | cemc | wgrib2 | eccodes | GRIB Key | 层次类型 | 层次 | 编号 |
|---|---|---|---|---|---|---|---|
| 海平面气压 | psl | PRMSL | prmsl | (0, 3, 1) | meanSea | - | 45 |
field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="PRMSL",
lazy=True
)
assert field.attrs["GRIB_count"] == 45field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="prmsl",
lazy=True
)
assert field.attrs["GRIB_count"] == 45field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="psl",
lazy=True
)
assert field.attrs["GRIB_count"] == 45field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter={
"discipline": 0,
"parameterCategory": 3,
"parameterNumber": 1,
},
level_type="meanSea",
lazy=True
)
assert field.attrs["GRIB_count"] == 45