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')层次¶
30 层列表,单位百帕 (mb):
1000
975
950
925
900
850
800
750
700
650
600
550
500
450
400
350
300
275
250
225
200
175
150
125
100
70
50
30
20
10
相对湿度¶
| 要素名 | cemc | wgrib2 | eccodes | GRIB Key | 层次类型 | 层次 | 编号 |
|---|---|---|---|---|---|---|---|
| 相对湿度 | rh | RH | r | (0, 1, 1) | pl | 30层 | 472-501 |
field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="RH",
level_type="pl",
level=1000,
lazy=True
)
assert field.attrs["GRIB_count"] == 472field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="r",
level_type="pl",
level=850,
lazy=True
)
assert field.attrs["GRIB_count"] == 477field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="rh",
level_type="pl",
level=70,
lazy=True
)
assert field.attrs["GRIB_count"] == 497field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter={
"discipline": 0,
"parameterCategory": 1,
"parameterNumber": 1,
},
level_type="pl",
level=10,
lazy=True
)
assert field.attrs["GRIB_count"] == 501RH/DPT¶
2米相对湿度¶
| 要素名 | cemc | wgrib2 | eccodes | GRIB Key | 层次类型 | 层次 | 编号 |
|---|---|---|---|---|---|---|---|
| 2米相对湿度 | rh2m | RH | 2r | (0, 1, 1) | heightAboveGround | 2 | 502 |
field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="RH",
level_type="heightAboveGround",
level=2,
lazy=True
)
assert field.attrs["GRIB_count"] == 502field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="2r",
lazy=True
)
assert field.attrs["GRIB_count"] == 502field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="rh2m",
lazy=True
)
assert field.attrs["GRIB_count"] == 502field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter={
"discipline": 0,
"parameterCategory": 1,
"parameterNumber": 1,
},
level_type="heightAboveGround",
level=2,
lazy=True
)
assert field.attrs["GRIB_count"] == 5022米露点温度¶
| 要素名 | cemc | wgrib2 | eccodes | GRIB Key | 层次类型 | 层次 | 编号 |
|---|---|---|---|---|---|---|---|
| 2米露点温度 | td2m | DPT | 2d | (0, 0, 6) | heightAboveGround | 2 | 503 |
field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="DPT",
level_type="heightAboveGround",
level=2,
lazy=True
)
assert field.attrs["GRIB_count"] == 503field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="2d",
lazy=True
)
assert field.attrs["GRIB_count"] == 503field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="td2m",
lazy=True
)
assert field.attrs["GRIB_count"] == 503field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter={
"discipline": 0,
"parameterCategory": 0,
"parameterNumber": 6,
},
level_type="heightAboveGround",
level=2,
lazy=True
)
assert field.attrs["GRIB_count"] == 503RELD/RELV/tadv/voradv/qflx/qdiv/DPT/DEPR/EPOT¶
散度¶
| 要素名 | cemc | wgrib2 | eccodes | GRIB Key | 层次类型 | 层次 | 编号 |
|---|---|---|---|---|---|---|---|
| 散度 | div | RELD | d | (0, 2, 13) | pl | 30层 | 504-533 |
field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="RELD",
level_type="pl",
level=1000,
lazy=True
)
assert field.attrs["GRIB_count"] == 504field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="d",
level_type="pl",
level=850,
lazy=True
)
assert field.attrs["GRIB_count"] == 509field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="div",
level_type="pl",
level=70,
lazy=True
)
assert field.attrs["GRIB_count"] == 529field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter={
"discipline": 0,
"parameterCategory": 2,
"parameterNumber": 13,
},
level_type="pl",
level=10,
lazy=True
)
assert field.attrs["GRIB_count"] == 533涡度¶
| 要素名 | cemc | wgrib2 | eccodes | GRIB Key | 层次类型 | 层次 | 编号 |
|---|---|---|---|---|---|---|---|
| 涡度 | vor | RELV | vo | (0, 2, 12) | pl | 30层 | 534-563 |
field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="RELV",
level_type="pl",
level=1000,
lazy=True
)
assert field.attrs["GRIB_count"] == 534field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="vo",
level_type="pl",
level=850,
lazy=True
)
assert field.attrs["GRIB_count"] == 539field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="vor",
level_type="pl",
level=70,
lazy=True
)
assert field.attrs["GRIB_count"] == 559field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter={
"discipline": 0,
"parameterCategory": 2,
"parameterNumber": 12,
},
level_type="pl",
level=10,
lazy=True
)
assert field.attrs["GRIB_count"] == 563温度平流¶
| 要素名 | cemc | wgrib2 | eccodes | GRIB Key | 层次类型 | 层次 | 编号 |
|---|---|---|---|---|---|---|---|
| 温度平流 | tadv | - | - | (0, 0, 224) | pl | 30层 | 564-593 |
field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="tadv",
level_type="pl",
level=1000,
lazy=True
)
assert field.attrs["GRIB_count"] == 564field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="tadv",
level_type="pl",
level=850,
lazy=True
)
assert field.attrs["GRIB_count"] == 569field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="tadv",
level_type="pl",
level=70,
lazy=True
)
assert field.attrs["GRIB_count"] == 589field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter={
"discipline": 0,
"parameterCategory": 0,
"parameterNumber": 224,
},
level_type="pl",
level=10,
lazy=True
)
assert field.attrs["GRIB_count"] == 593涡度平流¶
| 要素名 | cemc | wgrib2 | eccodes | GRIB Key | 层次类型 | 层次 | 编号 |
|---|---|---|---|---|---|---|---|
| 涡度平流 | voradv | - | - | (0, 2, 224) | pl | 30层 | 594-623 |
field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="voradv",
level_type="pl",
level=1000,
lazy=True
)
assert field.attrs["GRIB_count"] == 594field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="voradv",
level_type="pl",
level=850,
lazy=True
)
assert field.attrs["GRIB_count"] == 599field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="voradv",
level_type="pl",
level=70,
lazy=True
)
assert field.attrs["GRIB_count"] == 619field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter={
"discipline": 0,
"parameterCategory": 2,
"parameterNumber": 224,
},
level_type="pl",
level=10,
lazy=True
)
assert field.attrs["GRIB_count"] == 623水汽通量¶
| 要素名 | cemc | wgrib2 | eccodes | GRIB Key | 层次类型 | 层次 | 编号 |
|---|---|---|---|---|---|---|---|
| 水汽通量 | qflx | - | - | (0, 1, 224) | pl | 30层 | 624-653 |
field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="qflx",
level_type="pl",
level=1000,
lazy=True
)
assert field.attrs["GRIB_count"] == 624field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="qflx",
level_type="pl",
level=850,
lazy=True
)
assert field.attrs["GRIB_count"] == 629field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="qflx",
level_type="pl",
level=70,
lazy=True
)
assert field.attrs["GRIB_count"] == 649field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter={
"discipline": 0,
"parameterCategory": 1,
"parameterNumber": 224,
},
level_type="pl",
level=10,
lazy=True
)
assert field.attrs["GRIB_count"] == 653水汽通量散度¶
| 要素名 | cemc | wgrib2 | eccodes | GRIB Key | 层次类型 | 层次 | 编号 |
|---|---|---|---|---|---|---|---|
| 水汽通量散度 | qdiv | - | - | (0, 1, 225) | pl | 30层 | 654-683 |
field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="qdiv",
level_type="pl",
level=1000,
lazy=True
)
assert field.attrs["GRIB_count"] == 654field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="qdiv",
level_type="pl",
level=850,
lazy=True
)
assert field.attrs["GRIB_count"] == 659field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="qdiv",
level_type="pl",
level=70,
lazy=True
)
assert field.attrs["GRIB_count"] == 679field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter={
"discipline": 0,
"parameterCategory": 1,
"parameterNumber": 225,
},
level_type="pl",
level=10,
lazy=True
)
assert field.attrs["GRIB_count"] == 683露点温度¶
| 要素名 | cemc | wgrib2 | eccodes | GRIB Key | 层次类型 | 层次 | 编号 |
|---|---|---|---|---|---|---|---|
| 露点温度 | td | DPT | dpt | (0, 0, 6) | pl | 30层 | 684-713 |
field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="DPT",
level_type="pl",
level=1000,
lazy=True
)
assert field.attrs["GRIB_count"] == 684field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="dpt",
level_type="pl",
level=850,
lazy=True
)
assert field.attrs["GRIB_count"] == 689field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="td",
level_type="pl",
level=70,
lazy=True
)
assert field.attrs["GRIB_count"] == 709field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter={
"discipline": 0,
"parameterCategory": 0,
"parameterNumber": 6,
},
level_type="pl",
level=10,
lazy=True
)
assert field.attrs["GRIB_count"] == 713温度露点差¶
| 要素名 | cemc | wgrib2 | eccodes | GRIB Key | 层次类型 | 层次 | 编号 |
|---|---|---|---|---|---|---|---|
| 温度露点差 | ttd | DEPR | - | (0, 0, 7) | pl | 30层 | 714-743 |
field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="DEPR",
level_type="pl",
level=1000,
lazy=True
)
assert field.attrs["GRIB_count"] == 714field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="DEPR",
level_type="pl",
level=850,
lazy=True
)
assert field.attrs["GRIB_count"] == 719field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="ttd",
level_type="pl",
level=70,
lazy=True
)
assert field.attrs["GRIB_count"] == 739field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter={
"discipline": 0,
"parameterCategory": 0,
"parameterNumber": 7,
},
level_type="pl",
level=10,
lazy=True
)
assert field.attrs["GRIB_count"] == 743假相当位温¶
| 要素名 | cemc | wgrib2 | eccodes | GRIB Key | 层次类型 | 层次 | 编号 |
|---|---|---|---|---|---|---|---|
| 假相当位温 | thetaSe | EPOT | papt | (0, 0, 3) | pl | 30层 | 744-773 |
field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="EPOT",
level_type="pl",
level=1000,
lazy=True
)
assert field.attrs["GRIB_count"] == 744field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="papt",
level_type="pl",
level=850,
lazy=True
)
assert field.attrs["GRIB_count"] == 749field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter="thetaSe",
level_type="pl",
level=70,
lazy=True
)
assert field.attrs["GRIB_count"] == 769field = load_field_from_file(
gfs_grib2_orig_file_path,
parameter={
"discipline": 0,
"parameterCategory": 0,
"parameterNumber": 3,
},
level_type="pl",
level=10,
lazy=True
)
assert field.attrs["GRIB_count"] == 773