cmip6-to-wrfinterm工具概述
- cmip6-to-wrfinterm工具安装
- cmip6-to-wrfinterm工具使用
-
- [快速启动(Quick start)](#快速启动(Quick start))
- 更改使用(Usage)
-
- [修改 config.ini ( MPI-ESM1-2-HR)](#修改 config.ini ( MPI-ESM1-2-HR))
- [[可选] 修改 Vtable](#[可选] 修改 Vtable)
- [[高级] cmip_handler.py](#[高级] cmip_handler.py)
- 参考
cmip6-to-wrfinterm工具介绍及下载可参见GitHub-cmip6-to-wrfinterm
CMIP6-to-WRFInterim 使用纯 Python 实现将 CMIP6 亚日尺度输出转换为 WRF 中间文件,这些中间文件用于驱动 WRF 模型进行区域动力降尺度应用。目前支持的模型如下:
如果您希望使用其他模型,需要进行相应的修改。
cmip6-to-wrfinterm工具安装
请使用Anaconda3发行版安装Python3。已经对Anaconda3中包含的Python3.8和3.9进行了深入测试,较低版本的Python3也可能可以使用(未经测试)。如果NumPy、Pandas、SciPy、XArray和NetCDF4已正确安装,可以跳过安装步骤。
建议在Anaconda中创建一个新的环境并安装requirements.txt文件。
安装代码如下:
bash
conda create -n test_c2w python=3.9
conda activate test_c2w
pip install -r requirements.txt
cmip6-to-wrfinterm工具使用
快速启动(Quick start)
情景1:MPI-ESM-1-2-HR(默认):
bash
python3 run_c2w.py
请使用类 Unix (Linux) 系统运行上述命令,看到一些 FutureWarnings 是正常的。如果成功,您应该会在文件夹中看到CMIP6:2100-01-02_00和。(如果您是 Windows 子系统用户,请参阅故障排除。)CMIP6:2100-01-02_06./output
将两个中间文件复制或链接到您的 WPS 文件夹,准备好geo_em文件并正确设置namelist.wps,现在您就可以运行metgrid.exe以下 WRF 程序了。
文件夹中有一个涵盖东亚地区的简单示例namelist.wps和供测试。如果您在计算节点上操作,您还可以修改以自动执行从到的程序。namelist.input./sample/MPI-ESM-1-2-HRwps_wrf_pipeline.shmetgrid.exewrf.exe
如果您成功运行示例案例,您将会看到初始条件下以及 6 小时 WRFv4.3 运行后的皮肤温度快照,如上所示。
情景2:BCMM
bash
python3 run_c2w.py -m BCMM
情景3:EC-Earth3
bash
python3 run_c2w.py -m EC-Earth3
文件夹中有一个简单的示例namelist.wps,namelist.input涵盖了中美洲,./sample/EC-Earth3供测试之用。
如果您成功运行示例案例,则应看到初始条件下和 6 小时 WRFv4.3 运行后的皮肤温度快照,如下所示:
更改使用(Usage)
修改 config.ini ( MPI-ESM1-2-HR)
当您正确下载MPI-ESM1-2-HR数据时,首先./conf/config.MPI-ESM1-2-HR.ini正确编辑文件。
bash
[INPUT]
input_root=./sample/MPI-ESM1-2-HR/
model_name=MPI-ESM1-2-HR
scenario = ssp585
esm_flag=r1i1p1f1
grid_flag=gn
#YYYYMMDDHHMM
cmip_strt_ts = 210001020000
cmip_end_ts = 210001020600
[OUTPUT]
#YYYYMMDDHHMM, please seperate your ETL processes if request very long-term simulation
etl_strt_ts = 210001020000
etl_end_ts = 210001020600
output_root = ./output/
- [INPUT]['input_root']是CMIP6数据的根目录,这里指向的是./sample/文件夹。
- [INPUT]['model_name']是模型的名称。目前仅MPI-ESM-1-2-HR支持该模型。如果您计划使用其他模型,则需要设置自己的变量映射表(见下文)。
- [INPUT]['scenario'] ['esm_flag'] ['grid_flag']用于形成 netCDF 文件名。
- [INPUT]['cmip_strt_ts']和[INPUT]['cmip_end_ts']是 CMIP6 数据的开始和结束时间。
- [OUTPUT]['etl_strt_ts']和[OUTPUT]['etl_end_ts']是您所需 ETL 周期的开始和结束时间。
编辑完文件后config.ini,您可以再次运行脚本并运行所需的时间。中间文件将生成在[OUTPUT]['output_root']文件夹中。
请注意,对于MPI-ESM1-2-HR,模型未提供 10-200cm 之间的土壤属性,我们用 0-10cm 土壤属性覆盖了它,2d-soilr变量映射表中提供了特殊类型标记。如果您的研究需要准确的土壤属性,您可能需要长期(约 1 个月)的启动运行。
对于历史运行,MPI-ESM1-2-HR不提供大气数据集中的皮肤温度输出,我们tas在这里使用它来表示皮肤温度,这在陆地上是可以接受的,因为陆地特性是从陆地表面模型预测的,但它可能对规定的有偏差SST。我们建议用户tos从海洋数据集下载数据并将其转换为大气数据集格式,并修改Vtable以摄取真实的 SST。
[可选] 修改 Vtable
./db/${MODEL_NAME}.csv记录模型指定的变量映射表。如果您计划使用其他模型或在某些情况下涉及 SST(例如 MPI-ESM1-2-HR 的历史运行),则需要设置自己的变量映射表。
bash
src_v,aim_v,units,type,lvlmark,desc
ta,TT,K,3d,PlevPt,3-d air temperature
hus,SPECHUMD,kg kg-1,3d,PlevPt,3-d specific humidity
ua,UU,m s-1,3d,PlevPt, 3-d wind u-component
va,VV,m s-1,3d,PlevPt, 3-d wind v-component
zg,GHT,m,3d,PlevPt, 3-d geopotential height
ps,PSFC,Pa,2d,Lev, Surface pressure
tas,TT,K,2d,PlevPt, 2-m temperature
uas,UU,m s-1,2d,PlevPt, 10m wind u-component
vas,VV,m s-1,2d,PlevPt, 10m wind v-component
ts,SKINTEMP,K,2d,PlevPt, Skin temperature
psl,PMSL,Pa,2d,PlevPt, Mean sea-level pressure
huss,SPECHUMD, kg kg-1,2d,PlevPt, 2-m relative humidity
mrsos,SM000010, kg/m-3,2d-soil,PlevPt, 0-10 cm soil moisture
tsl,ST000010,K,2d-soil,PlevPt, 0-10 cm soil temp
mrsos,SM010200, kg/m-3,2d-soilr,PlevPt, 10-200 cm soil moisture
tsl,ST010200,K,2d-soilr,PlevPt, 10-200 cm soil temp
- src_v是CMIP6数据中变量的名称,也用于形成netCDF文件名。
- aim_v是存档在WRF中间文件中的变量的名称,由 使用metgrid.exe。
- units是变量的单位。
- type表示变量的类型。3d表示三维变量,2d表示二维变量,2d-soil表示土壤层中的二维变量。注意,对于MPI-ESM-1-2-HR,模型没有提供 10-200cm 之间的土壤属性,我们用 0-10cm 土壤覆盖了它,2d-soilr这里提供了一个特殊的类型标记。
- lvlmark是变量的级别标记。PlevPt表示该变量是具有压力级别的三维变量。
- desc是变量的描述。
[高级] cmip_handler.py
转换器的核心是cmip_handler.py。它是一个处理 CMIP6 数据并将其转换为 WRF 中间文件的 Python 模块。该模块首先根据config.ini文件加载 CMIP6 数据,然后将其插入到常规 latXlon 网格中。最后将数据转换为 WRF 中间文件。该模块包括以下函数和类:
bash
Functions:
gen_wrf_mid_template():
Generate a WRF-Mid template dict for the WRF-Intermediate data.
write_record(out_file, slab_dic):
Write a record to a WRF intermediate file
--------------------
Classes:
CMIPHandler():
Construct CMIP Handler
Methods
-------
__init__: initialize CMIP Handler with config and loading data
interp_data: interpolate data to common mesh
write_wrfinterm: write wrfinterm file