1. WRF模式介绍
WRF (Weather Research and Forecasting) 模式是一个开源、灵活、模块化的数值天气预报和大气模拟工具。
WRF模式的结构如图所示,其最为核心的部分是可执行程序wrf.exe(后缀仅仅是出于习惯,因为Linux并不以后缀标识文件类别)。

WRF模型可以运行两种不同的模拟:ideal和real。理想实验通常利用已有的sounding数据为WRF模型生成初始条件,而真实模拟则要求利用WPS(WRF Preprocessing System)进行前处理,将真实的测量数据转化为WRF模型的初始条件。WRF模型的可执行文件(wrf.exe)本身并不随着实验类型的不同而改变,但是这两种不同的实验对应两种不同的前处理程序,分别是ideal.exe和real.exe,它们都需要在WRF模式运行之前执行。
WRF的运行通常分为以下几个阶段:
- 准备环境
- 安装依赖库(NetCDF、MPI等)
- 编译WRF
- 数据处理(用于真实模拟)
- 使用WPS处理初始条件和边界条件
- 运行模式
- 修改参数和初始廓线
- 运行初始化程序和主程序
- 结果分析
- 使用NCL等数据分析工具对模式运行的结果进行分析和展示
本文的后几个部分会分别介绍第1,3,4个步骤。步骤2是专为真实模拟而进行的预处理,感兴趣的读者可以自行查阅WRF官方文档。
2. 环境准备
对于如何准备系统环境和编译WRF,官方有一个详细的指南:How to Compile WRF: The Complete Process,这里仅做一个简单的介绍。
2.1 安装依赖库
WRF模式运行所必不可少的库有且仅有NetCDF,同时如果想要进行并行运算,还需要安装OpenMPI。安装之后可以通过ncdump --version
和mpirun --version
来检查自己是否安装成功,以及查看软件的版本。
2.2 下载WRF
可以直接git clone:
1 | git clone https://github.com/wrf-model/WRF |
如果遇到网络问题,也可以到github上手动下载。
下载解压之后,WRF的目录中应该有如下内容:

2.3 编译WRF
首先运行
1 | ./configure |

在出现的列表中根据系统和编译器选择合适的选项,并根据需要选择串行或并行(并行需要有OpenMPI库的支持)。选择之后还需要对嵌套网络进行选择,对于简单情况直接保持默认即可。
配置之后,在目录中应该会出现一个名为configure.wrf
的文件。此时对于4.5.x/4.6.x的版本,还需要进行一步额外的操作才能成功编译,需要在configure.wrf
文件的LIB_EXTERNAL
的最后添加-lnetcdf
,而对于更老的版本4.2.x/4.3.x/4.4.x,则不需要进行这步操作。
之后就可以直接进行编译了。首先我们可以打开 test 目录查看可用的理想实验,包括


确定自己要运行的理想实验之后,回到 WRF 目录,输入
1 | ./compile -j 4 em_grav2d_x |
其中,-j 4
代表使用4个线程进行并行编译,这个选项不是必须的,可以根据需要删去或更改;em_grav2d_x
是本文中理想实验的名称,可以替换成test
目录中的其他理想实验。
如果编译没有问题,应该会显示”Executables successfully built”,这是我们进入理想实验的目录test/em_grav2d_x
,可以看到出现了可执行程序ideal.exe
和wrf.exe
。
3. 理想实验:以em_grav2d_x
为例
本文采用的理想实验是em_grav2d_x
,用于模拟二维重力流。该实验基于Straka等人1993年发表的文章[1],在X-Z平面进行,水平方向满足周期性边界条件。
在运行程序之前,首先需要配置实验参数,这些参数在namelist.input
文件中定义,其具体含义可以参见README.namelist
,与本实验有关的参数及其含义如下:
1 | run_minutes = 15, ! 模拟时长:15 分钟(控制模拟的时间范围) |
接着可以通过input_sounding
文件设置初始大气的垂直廓线,文件夹中给出了静止大气的廓线和'input_sounding.um=20'
,也就是有20m/s的水平风速的廓线,当然也可以根据需要自己定义大气的初始廓线。
完成参数和初始廓线的配置之后,就可以运行初始化程序./ideal.exe
,注意,每次修改完namelist.input
及input_sounding
文件之后,都需要重新运行ideal
,否则修改将不会生效。
之后我们就可以运行主程序了
1 | ./wrf.exe & |
命令最后的&
表示将程序提交到后台运行,这样即使前台的进程退出,程序依然可以正常工作。
如果想要中止之前的任务,可以先利用top
命令查看自己作业的进程ID(PID),之后在命令行输入kill <PID>
就可以结束掉该进程。
程序运行的结果将会保存在wrfout_d01_0001-01-01_00_00_00
中,可以利用NCL等工具进行分析和后处理。
4. 结果分析
WRF模式支持多种分析结果的方式,包括NCL, RIP, ARWpost, UPP和VAPOR。程序默认输出的文件是netCDF格式的,可以利用NCL方便地进行处理。
作为简易快捷的查看方式,ncview
可以让我们立刻观察到结果。但是为了更清晰地分析结果,可以使用NCL语言或者python的netCDF4
库。
对于默认的初始参数,程序运行的结果如下:

可以看到,这团冷空气下落到地面的过程中就在水平方向上不断延展,之后会断裂成左右对称的两部分,并继续沿着地面移动。
我们可以改变实验中的参数,观察对于结果有什么影响。
- 改变水平风速:修改
input_sounding
文件中的水平风速场,将水平风速分别设置为0,20,40,得到的结果如下(从上到下风速依次为0,20,40):

可以看到,水平的风速对于系统仅有一个水平方向随时间平移的作用,对于气团的结构则几乎没有影响。
- 改变分辨率:直接利用文件夹中提供的
namelist.input.dx=200
和namelist.input.dx=400
文件,得到的结果如下(从上到下分辨率依次为100,200,400):

分辨率降低的时候,程序运算的时间显著减少,但是代价是失去了气团的精细结构。
- 改变扩散系数:修改
namelist.input
中的khdif
和kvdif
,得到的结果如下(从上到下扩散系数分别为50,75,100,其中75是默认值):

综上,我们成功地编译并运行了WRF模式,并对em_grav2d_x这个简单的二位重力流问题进行了理想实验。
- 1.[Straka et al., Numerical Solutions of a Nonlinear Density Current: A Benchmark Solutioon and Comparisons, Int J Numer Meth Fl, 17 (1): 1-22, 1993] ↩