Py学习  »  Python

科研工具 | CMIP6-WRF中间文件转换器:纯Python实现

气象学家 • 1 年前 • 1482 次点击  

WGCM Grainau 2014


随着第六次国际耦合模式比较计划CMIP6 (Coupled Model Intercomparison Project, Phase 6)的顺利开展,海量全球气候模拟和预估数据已开放下载。为研究和评估区域尺度的气候变化,如CORDEX-CMIP6计划等基于CMIP6输出的区域动力降尺度实验也已逐步展开。


WRF模式作为大气研究和业务预报中的最常用的中尺度数值天气预报系统,并不直接支持解码CMIP6数据驱动模式运行。用户需要自己编译Fortran程序,或编写NCL脚本创建WPS的中间文件(intermediate file)并驱动metgrid.exe。


在天气气候领域的编程环境逐步向python过渡的背景下,以及开展动力降尺度实验通常需要一定数据前处理,因此不少用户不得不反复在不同编程语言和编译环境下切换,输出额外文件,更增加了时间精力的开销。为解决上述问题,CMIP6-to-WRFInterim转换器实现了在纯python环境下,利用scipy和struct库编码字节流,直接写入WPS中间文件格式,无需额外文件输出、无需编译环境依赖、无需切换NCL,让您的动力降尺度实验开展更加丝滑、连贯。CMIP6-to-WRFInterim转换器代码库位于https://github.com/Novarizark/cmip6-to-wrfinterm,目前对python3.8-3.9环境以及MPI-ESM-1-2-HR模式输出进行了完整的测试和应用。(欢迎大家follow和使用该库,也可以参与交流和完善。)


您可以先按照ReadMe文件尝试基于 MPI-ESM-1-2-HR进行的6小时样例模拟,并在下载完整数据后设置您需要的模拟时段进行数据转换。如果您希望使用其他模式输出,请按照ReadMe文件设置对应的变量映射表。如果成功转换其他模式输出,欢迎分享(pull-request)您的变量映射表来丰富CMIP6-to-WRFInterim的适用库。同样,仅通过简单改写,该工具即可利用其他数据源生成WPS中间文件,如制作SST强迫场和理想环流场等。由于该工具依然很新,作者欢迎pull-request协同开发,或使用 Github issue报告任何bug。如果这个工具对您的科研有一点帮助,作者感谢您能在 GitHub 上给一个star/fork/follow。


附ReadMe.md(部分):

介绍

CMIP6-to-WRFInterim使用纯python实现,用于将CMIP6输出转化为WRF中间文件,驱动WRF进行区域动力降尺度实验。目前,只有 MPI-ESM-1-2-HR 模型在历史运行和 SSP 中进行了测试。


安装

请使用 Anaconda3 发行版安装 python3。带有 python3.8 和 3.9 的 Anaconda3 已经过深度测试,较低版本的 python3 应该也可以工作(无测试)。如果 numpy、pandas、scipy、xarray、netcdf4 均已正确安装,您可以跳过安装步骤。

同时,我们建议在 Anaconda 中创建一个新环境并安装 requirements.txt:

conda create -n test_c2w python=3.9

conda activate test_c2w

pip install -r requirements.txt


快速开始

python3 run_c2w.py


如果您成功运行上述命令(FutureWarnings无关紧要),您应该会在 ./output 文件夹中看到 CMIP6:2100-01-02_00 和 CMIP6:2100-01-02_00两个生成文件。将这两个中间文件复制或链接到您的 WPS 文件夹,准备您的 geo_em 文件并正确设置您的 namelist.wps,则可以运行 metgrid.exe 和接下来的 WRF 程序。

./sample 文件夹中有一个覆盖东亚地区的 namelist.wps 和 namelist.input 的简单示例,用于测试。

如果您成功运行示例案例,您应该会看到初始状态下和运行WRF6小时后的地表温度快照,如下图所示。


用法

修改config.ini

正确下载 MPI-ESM1-2-HR 数据后,首先正确编辑 ./conf/config.ini 文件。

[INPUT]

input_root=./sample/

model_name=MPI-ESM1-2-HR

exp_id = ssp585

esm_flag=r1i1p1f1

grid_flag=gn

#YYYYMMDDHHMM

cmip_strt_ts = 210001020000

cmip_end_ts = 210001020600

# In hours

cmip_frq=6


[OUTPUT]

#YYYYMMDDHHMM, please seperate your ETL processes if request very long-term simulation

etl_strt_ts = 210001020000

etl_end_ts = 210001020600

output_root = ./output/

output_prefix=CMIP6


[INPUT]['input_root']是CMIP6数据的根目录,这里指向./sample/文件夹。

[INPUT]['model_name'] 是模型的名称。现在只支持 MPI-ESM-1-2-HR 模型。此项将引导脚本读取./db/中对应的变量映射表。如果您打算使用其他模型,则需要设置自己的变量映射表。

[INPUT]['exp_id'] ['esm_flag'] ['grid_flag'] 用于生成 netCDF 文件名。

[INPUT]['cmip_strt_ts'] 和 [INPUT]['cmip_end_ts'] 是 CMIP6 数据的开始和结束时间。

[OUTPUT]['etl_strt_ts'] 和 [OUTPUT]['etl_end_ts'] 是所需提取的开始和结束时间。

编辑完 config.ini 文件后,您可以运行该脚本抽取您需要时段的数据。中间文件将在 [OUTPUT]['output_root'] 文件夹中生成。请注意,对于 MPI-ESM-1-2-HR,该模式不提供 10-200cm 的土壤变量,我们将其覆盖为 0-10cm 土壤变量,变量映射表中以 2d-soilr 的特殊类型标记。如果您的研究需要准确的土壤属性,您可能需要长期( 1 个月以上)的spin-up运行。



声明:欢迎转载、转发本号原创内容,可留言区留言或者后台联系小编(微信:gavin7675)进行授权。气象学家公众号转载信息旨在传播交流,其内容由作者负责,不代表本号观点。文中部分图片来源于网络,如涉及作品内容、版权和其他问题,请后台联系小编处理。





往期推荐

 ERA5-Land陆面高分辨率再分析数据(~16TB)

★ ERA5常用变量再分析数据(~11TB)

 TRMM 3B42降水数据(Daily/3h)

 科研数据免费共享: GPM卫星降水数据

 气象圈子有人就有江湖,不要德不配位!

 请某气象公众号不要 “以小人之心,度君子之腹”!

 EC数据商店推出Python在线处理工具箱

★ EC打造实用气象Python工具Metview

★ 机器学习简介及在短临天气预警中的应用

★ AMS推荐|气象学家-海洋学家的Python教程

★ Nature-地球系统科学领域的深度学习及理解

★ 采用神经网络与深度学习来预报降水、温度


   欢迎加入气象学家交流群   

请备注:姓名/昵称-单位/学校-研究方向

未备注的不通过申请



❤️ 「气象学家」 点赞

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/137103
 
1482 次点击