本内容相关视频讲解已更新,可点击WRF-Chem简单编译与运行查看

最近读文献觉得有必要学习一下WRF-chem,但因为没有回所,实在是没有勇气在自己的电脑上安装,决定搞搞理论了。之前写过一篇Cygwin下WRF运行安装,流程差异不大,正好比较一下WRF-chem和WRF的差异,等回所学习时也方便些。
关于运行WRF的内容已在之前也写过的WRF运行入门博客WRF模式入门 中提到,下文省略。
在查阅WRF-chem时发现资料较少,对于其运行流程国内也很少有完整且明白的表述,决定自己总结一下,也把搜到的资料汇总一番,希望后面自己跑WRF-chem能轻松一些。

WRF-chem是什么?与WRF的关系?

WRF-chem是模式是由美国NOAA预报系统实验室开发的,将气象模式WRF和化学模式chem耦合形成的区域空气质量模式,它作为WRF模式的一部分发布,由于其依赖于WRF模式对于使用WRF安装、配置、使用具有一定经验。
相比于之前的大气化学模式,WRF-chem能够较好的反应大气气溶胶与气象之间的反馈作用,能够模拟更加真实的大气环境。
目前,WRF-chem可以实现以下功能:

  • 结合土壤/植被方案模拟干沉降
  • 四种生物排放方案
  • 三种人为排放方案选择
  • 几种气相化学机理选择
  • 三种光解方案选择
  • 五种气溶胶情景选择
  • 气溶胶的直接效应
  • 气溶胶的间接效应
  • 两种火山灰排放方案
  • 温室气体被动示踪传输
  • 用户自己提供数据,模拟示踪传输
  • 野火排放烟羽模型
    WRF-chem模式系统如下图所示:
    在这里插入图片描述
    不难看出,WRF-chem的主要模块与WRF一致,主要以下几个模块组成:
  • WRF预处理WPS
  • WRF-var资料同化
  • WRF-solver(含化学)
  • WRF后处理(可视化)
    与常规WRF不同的是,该模型的化学部分需要提供额外的与排放相关的网格输入数据。这些额外的输入数据可以由WPS(尘埃排放场)提供,也可以在real.exe初始化期间读取(例如,生物质燃烧、生物源排放、GOCART背景场等),或者在执行WRF求解期间读取(例如,人为排放、边界条件、火山排放等)。不过,模拟大气化学状态的排放输入数据的生成非常复杂。有些时候,用户需要修改代码或者模型配置,以使其在项目中正常工作。

WRF-chem的安装与配置

WRF的模型的安装并不困难,包基本自带,并不需要以外部代码为基础的库,唯一例外的是netCDF库,此外,如果编译KPP,将需要快速词法分析器(FLEX)库。
前往WRF官网,安装WRF、在下载WRF-chem压缩包(记得保持版本一致),WRF安装、配置、运行请自行搜索,也可参考我之前的博客WRF运行入门博客WRFcygwin版入门
在Linux系统下安装WRF的流程与环境配置,已有许多博客珠玉在前,总结了很多bug,这里给出几篇参考:
WRF-chem单机安装指南
WRF-chemV4.0安装

WRF-chem运行流程

第一步:运行WRF
资料前处理WPS与WRF运行的namelist.wps的参数设置与WRF一致,
在运行完成后,我们能得到首先运行WRF,其流程与WRF一致(注意这时候WRF的运行不开启化学场,即chem_opt = 0,在real.exe完成后,会生成wrfinput_d0x 的初始场,和wrfbdy_d01 的边界场。注意,这两个是气象场,用来给模拟化学提供条件的。
与之不同的在于,WRF-chem的namelist多了一个 CHEM_OPT的选择。也就是说,namelist后增加了&chem的内容,在第一次运行时。chem_opt=0。因为我们只需要得到气象场。

第二步:准备排放数据
获得这气象场后,我们才开始正式跑chem。
在跑chem我们除了作为气象条件的气象场外,还需要排放数据集,这些数据需要放在WRFV3/test/em_real目录中,排放数据集可以分为三类分别是:

  • 人为排放(anthropogenic emission):
  • 生物质排放(bio emission):
  • 生物质燃烧排放(biomass burning)

三类排放分别需要不同的处理方法,下面依次介绍:
人为排放
在WRF-chem官网上提供两个人为排放源数据集:
RETRO (0.5 °,月) 和EDGAR (1°,年)和美国国家排放清单。
使用RETRP和EDGAR两个全球排放数据集是最常见的选项,但是,这初始排放数据集需要进行前处理,才能将数据转化为WRF-chem可以读取运行的格式。
这个过程,我们称之化学前处理,前处理的目的是将初始人为排放数据映射到到WRF-chem的模拟域中
为此,WRF-chem提供了一个工具:prep_chem_sources
prep-chem-src一个网格测绘程序,由巴西CPTEC开发,可供WRF-Chem用户。将排放映射到WRF域后,将RADM2形成的数据输出到二进制数据文件中。然后,我们才可以使用转换实用程序将中间二进制数据文件转换为WRF输入数据文件。
对于其安装,可参考安装WRF-CHEM以及编译前处理软件prep-chem-src,接下来,简单介绍一下prep-chem-src的编译与使用。
prep-chem-src编译
安装prep-chem-src后会有三个文件夹:bin、src、aux_src。
想要编译prep-chem-src,需要将目录改为-bin/build,使用命令:

make OPT=pgi.wrf CHEM=RADM_WRF_FIM

便可以开始编译代码。
我们编译prep-chem-src时,主要就是修改bin文件夹下的prep_chem_sources.inp ,它的作用类似于namelist,关于其参数意义与修改,可以参考:prep-chem-src的用法
修改后,我们运行prep_chem_sources_RADM_WRF_FIM_.exe ,随后便得到文件:
WRF-T-2016-11-15-000000-g3-ab.bin (人为排放)
WRF-T-2016-11-15-000000-g3-bb.bin (生物质燃烧数据)
WRF-T-2016-11-15-000000-g3-gocartBG.bin (气溶胶背景场)
注意:该程序一次这能处理一个网格,如果存在嵌套的话,嵌套几层跑几次。
prep-chem-src只提供了一个非常简单的清单处理,偏向于全球模型,对于区域,比如MICS清单不太适用。
这种时候,就需要使用make_anthroo命令编译anthro_emiss程序。该命令将生成anthro_emiss可执行文件。在运行human -emiss程序之前,需要构造WRF域的输入文件并知道其位置。此外,还需要为anthro_emiss程序构造一个输入文件(例如,anthro_emiss.inp),其中包含诸如可执行目录和wrfinput文件位置等信息。构建了anthro_emiss输入文件后,可以使用重定向命令运行代码。
不过这属于进阶内容了,这里挖个坑吧,总之,如果你使用的是prep-chem-src的话,不要忘记把前处理的文件转换成为WRF-chem可以读取的数据文件哦。
化学数据转化
将跑Pprep-chem-src得到的三个bin文件,链接到test/em_real文件夹下,然后分别将它们改名为:
emissopt3_d01
emissfire_d01
wrf_gocart_bg
随后,将最开始跑WRF得到的气象场wrfout文件和namelist文件复制过来,在namelist的&time_control部分加上:

 io_form_auxinput5 = 2
 io_form_auxinput6 = 2
 io_form_auxinput7 = 2
 io_form_auxinput8 = 2
 io_form_auxinput12 = 2,
 io_form_auxinput13 = 0,
 auxinput6_inname = 'wrfbiochemi_d01',
 auxinput7_inname = 'wrffirechemi_d<domain>',
 auxinput8_inname = 'wrfchemi_gocart_bg_d<domain>',
 auxinput12_inname = 'wrf_chem_input',
 auxinput13_inname = 'wrfchemv_d<domain>'
 auxinput5_interval_m = 1440,1440
 auxinput7_interval_m = 1440,1440
 auxinput8_interval_m = 1440,1440
 auxinput13_interval_m = 1440,1440
 frames_per_auxinput6 = 1,1
 frames_per_auxinput7 = 1,1
 frames_per_auxinput8 = 1,1
 frames_per_auxinput13 = 1,1

同时,我们还需要在&chem里添加内容,关于这部分的参数设置,请各位自行参加搜索文档,根据自身需要设置。
然后就可以onvert_emiss.exe,生成WRF需要的人为排放的nc数据啦,记得文件名需要与namelist里一致。
生物质排放
生物质排放通常使用MEGAN处理。
下载MEGAN源码和数据,编译后用于处理生物源。
进入… /MEGAN/megan_code/目录下,修改
“vim megan_bio_emiss_.inp”,修改对应的domains,wrf_dir,起始月份和终止月份,
以下是一段代码示例:

&control
domains = 3,
start_lai_mnth = 1,
end_lai_mnth = 12,
wrf_dir = '/n/holylfs/LABS/kuang_lab/adayalu/WRF/UTILINP',
megan_dir = '/n/holylfs/LABS/kuang_lab/adayalu/WRF/MEGAN'
/

如果运行得当,就可以得到wrfbiochemi_d0*文件,记得看看是不是对的。
生物质燃烧排放

关于生物质燃烧排放,可以用prep-chem-src处理,也可以使用FINN进行处理。
这个流程和MEGAN类似,进到./FINN/src/目录下,“vim finn2wrf*.inp”,修改对应的domains,fire_filename,然后执行命令*

“./fire_emis <finn2wrf*.inp”

得到wrffirechemi_d01文件

第三步:化学选项chem-opt运行
处理好了排放数据后,我们就可以开始chem-opt的运行了、
关于这个的选择参考官方教程,或者,在这篇博文里进行了部分的翻译WRF-Chem namelist.input设置
我们需要注意chem_opt的化学选项应当对应,将所得到的所有排放数据链接到WRFV3/test/em_real/ 目录,然后第二次运行real.exe,这样,我们就能得到将化学变量和原始气象场结合的文件。

第四步: 设定边界条件
在这一步我们需要重新修改WRF的初始与边界条件文件,由于我们重新运行了real.exe,我们需要根据其模拟结果,重新设置化学初始和边界条件。
当然,也可以不进行修改,也可以使用MOZBC来提供初始和边界条件。
前往 MOZART DOWNLOAD提交你需要的数据请求,包括域大小、边界、时间,提交后一段时间便能得到初始场边界文件。
注意:东西南北边界要覆盖住整个domain1;时间要覆盖住整个模拟时间。
使用MOZBC程序修改wrfinput/wrfbdy文件,使其包含化学边界条件。
从$CLIMATE_MODELS文件夹进入mozbc文件夹。随后:

cp CBMZ-MOSAIC_8bins.inp mozbc.inp

修改inp文件,对应的domain、与WRF,注意对应的化学机制。
下面给出一段示例:

do_bc = .true.
do_ic = .true.
domain = 3
#FYI, I've found mozbc can be unhappy when the set directory path is too long.

dir_wrf = '/n/holylfs/LABS/kuang_lab/adayalu/WRF/UTILINP/' #obviously this should be your specific path.
dir_moz = '/n/holylfs/LABS/kuang_lab/adayalu/WRF/MOZBC/' #obviously this should be your specific path.

修改完成后,我们就可以运行MOZBC:

./mozbc < mozbc.inp > mozbc.out

第五步:运行模式
好了,现在,我们终于做好所有准备工作,准备运行WRF-chem。
回到WRFV3/test/em_real目录,运行wrf.exe。
如果你是在超算中计算,打开并检查你的runwrf.sh文件,提交你的WRF任务。
超算下运行WRF参考如何使用WRF
以上,WRF-chem运行完毕。

总结

总体而言,WRF-chem是WRF的一个高阶应用,在设置与运行WRF-chem时,我们需要比较熟练的安装与运行WRF。
WRF-chem与WRF的不同之处在于,WRF-chem多了一个化学场的模拟,也增加了排放数据的输入,初学者在运行WRF-chem时很容易陷入混乱,不明白如何将化学场应用于WRF中,也不理解chem-opt何时设置运行,接下来,我对WRF-chem的运行流程进行总结。
Step1:只运行WRF
该流程与一般WRF运行一致,首先=进行WPS前处理,在运行WRF。
这一步我们不设置化学选项(chem_opt=0),只获取气象场。
step2:准备排放数据
运行WRF-chem需要输入排放数据,共有三类,每一类数据都有不同的下载与处理步骤。
step3:chem_opt的设置与运行
经过前两步,我们有了气象场,也有了排放数据,现在,我们需要将两者结合。开始根据你的域、时间以及化学机制设置chem_opt,第二次运行real.exe,得到将化学场和气象场结合的文件。
step4:重新设置化学初始边界场
将气象场与化学场结合后,我们需要根据化学模拟结果,重新制作初始与边界条件。
step5:运行WRF-chem
第二次运行WRF,得到最终结果。
为了更直观理解,我绘制了一张简单流程图
在这里插入图片描述
欢迎各位批评指正。

参考

WRF-chem运行流程
WRF-chem编译与运行指南
WRF-chem安装及使用说明手册
Detailed example:WRF-Chem: A PM2.5 example
A Quick Review Of How To Set-Up & Run WRF-Chem 3.9.1.1

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐