地球流体的数值模拟与AI预测(2):WRF 真实模拟

真实实验框架

构建real.exe文件

由于此前已经进行过理想模拟, 所以登陆后, 首先要清除编译文件, 再改用em_real重新编译.\(\newcommand{\K}{\mathbb{K}}\newcommand{\R}{\mathbb{R}}\newcommand{\C}{\mathbb{C}}\newcommand{\b}{\mathbf}\newcommand{\bi}{\boldsymbol}\newcommand{\rank}[1]{\text{rank}\left(#1 \right)}\newcommand{\dim}[1]{\text{dim}\left(#1 \right)}\newcommand{\diag}[1]{\text{diag}\left(#1 \right)}\newcommand{\det}[1]{\text{det}\left(#1 \right)}\newcommand{\Det}[1]{\left|\begin{matrix} #1 \end{matrix}\right|}\newcommand{\set}[1]{\left\{ #1 \right\}}\newcommand{\abs}[1]{\left| #1 \right|}\newcommand{\norm}[1]{\left|\!\left|#1\right|\!\right|}\)

1
2
3
4
5
[user@loginnode ~]$ cd ~/WRF
[user@loginnode WRF]$ cp -r run run_backup # 备份步骤, 可以改备份后文件夹名, 也可以不备份
[user@loginnode WRF]$ ./clean -a # 清除已构建的文件. 需要重新编译时使用这个功能
[user@loginnode WRF]$ ./configure # 生成.wrf配置文件, 先选15, 再选1
[user@loginnode WRF]$ vi configure.wrf # 用编辑器打开配置文件

打开文件后, 需要修改第168~169行的内容为如下:

1
2
DM_FC           =       mpiifort
DM_CC = mpiicc

修改完成后, 可以开始编译, 使用sbatch提交任务, 例如提交脚本叫compile.sh:

1
2
3
4
5
6
7
8
9
[user@loginnode WRF]$ vi compile.sh  # 以下为创建或修改后的内容
#!/bin/bash
#SBATCH -J WRF_configure
#SBATCH -p xahcnormal
#SBATCH -N 1
#SBATCH --ntasks-per-node=8

./compile -j 8 em_real >& log.compile # 写完后保存文件, 退出vim
[user@loginnode WRF]$ sbatch compile.sh # 讲义说约5min, 实测约30min

检查正确编译的方法: 在WRF/main目录下, 观察是否有 ndown.exe, tc.exe, real.exe, wrf.exe文件.

编译WPS

现在WRF的编译任务全部完成, 为了得到运行所需的条件, 就需要编译WPS.

1
2
[user@loginnode WRF]$ cd ../WPS && ./configure  # 选21
[user@loginnode WPS]$ vi configure.wps

打开文件后, 需要修改第62,63,67和68行的内容为如下:

1
2
3
4
COMPRESSION_LIBS    = -L/public/software/mathlib/jasper/1.900.1/intel/lib -ljasper -lpng -lz
COMPRESSION_INC = -I/public/software/mathlib/jasper/1.900.1/intel/include
DM_FC = mpiifort
DM_CC = mpiicc

修改完成后, 可以开始编译WPS:

1
[user@loginnode WPS]$ ./compile  # 如果不想看到编译过程的输出, 可以使用./compile &> log.compile

检查正确编译的方法: 在WPS目录下, 观察是否有geogrid.exe, ungrib.exe, metgrid.exe等可执行文件的软链接.

Geogrid

Geogrid的作用是, 设定模拟区域, 并将各类地面数据集插值到模型网格中.

获取陆地输入数据

UCAR的可以在网上下载, 但是过程极其缓慢. 建议直接使用曙光超算上的公共路径.

1
2
3
4
5
[user@loginnode WPS]$ vi namelist.wps  
&geogrid
...
geog_data_path = '/public/software/meteorology/WPS_GEOG' # 打开后, 在&geogrid增加行内容如下
/

另一种方案是, 使用哥白尼数据空间生态系统气候数据库的数据(推荐).

进一步编辑namelist.wps并运行geogrid.exe

在geogrid环节, 只需要编辑&share&geogrid部分.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
&share
...
max_dom = 1 ! 2,
start_date = '2025-09-18_18:00:00','2019-09-04_12:00:00', # 桦加沙起始时间约18日晚8
end_date = '2025-09-20_18:00:00','2019-09-04_12:00:00',
...
&geogrid
...
# 桦加沙起点经纬度
ref_lat = 15.80,
ref_lon = 133.20,
...
# 保存退出
[user@loginnode WPS]$ ./geogrid.exe

如果运行成功, WPS目录下应该出现文件geo_em.d01.nc.

Ungrib

Ungrib的作用是解包GRIB气象数据, 并将其打包为中间文件格式. GRIB是世界气象组织的标准文件格式.

输入数据可以从UCAR官网下载. 建议直接用链接下载到PC, 再从PC上传到HPC(假设上传到~/NNRP/), 然后如下操作

1
2
3
[user@loginnode WPS]$ ln -sf ungrib/Variable_Tables/Vtable.NNRP Vtable  # 创建Vtable软链接
[user@loginnode WPS]$ ./link_grib.csh ~/NNRP/ # 创建GRIB文件的软链接
[user@loginnode WPS]$ ./ungrib.exe # 进行ungrib过程

如果最后显示Successful completion of ungrib, 并且只剩下FILE:${timestamp}格式命名的文件, 临时文件PFILE被全部删除, 说明ungrib步骤成功.

Metgrid

Metgrid的作用是将气象数据(ungrib输出的FILE:${timestamp})水平插值到模型区域(geo_em.d01.nc)中. 如果检查确定namelist.wps中, &metgrid.fg_name&ungrib.prefix的值相同, 就可以直接运行metgrid.exe了.

1
[user@loginnode WPS]$ ./metgrid.exe

处理成功的标志一方面见输出, 另一方面, FILE:${timestamp}的步长原来是6h, 如果在处理后变成了自定义步长(此处是10800s=3h, 更多时刻的FILE被插值得到), 并且出现了met_em.d01.${timestamp}.nc文件, 说明处理成功.

最后, 要创建这些met_em.d01.${timestamp}.nc文件的软链接, 以便WRF访问:

1
[user@loginnode WPS]$ cd ../WRF/run && ln -sf ../../WPS/met_em.d01.* .

运行WRF实现模拟

首先修改namelist.input文件, 确保与WPS/namelist.wps一致:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
[user@loginnode run]$ vi namelist.input
&time_control
... # run_hours从36改为48
run_hours = 48,
... # 起止时间的第一列需要改, 第二列是给domain 2设置的, max_dom = 1时没有作用
start_year = 2025, 2019,
start_month = 09, 09,
start_day = 18, 04,
start_hour = 18, 12,
end_year = 2025, 2019,
end_month = 09, 09,
end_day = 20, 06,
end_hour = 18, 00,
...
/

&domains
... # max_dom从2改为1
max_dom = 1,
... # 从34, 4改为38, 0
num_metgrid_levels = 38,
num_metgrid_soil_levels = 0,
...
/

&physics
... # 第一列从-1改为1
sf_surface_physics = 1, -1,
... # 从1改为0
fractional_seaice = 0,
/

然后运行real.exe, 确定成功后, 再提交wrf.exe的任务

1
2
3
4
5
6
7
8
9
10
11
[user@loginnode run]$ ./real.exe  # 如果出现wrfinput_d01, wrfbdy_d01, 说明运行成功
[user@loginnode run]$ vi runwrf.sh # 创建或修改任务脚本, 可以叫其它名字
#!/bin/bash
#SBATCH -J WRF_Ragasa
#SBATCH -p xahcnormal # 西安超算普通, 超算具体分区名请咨询管理员
#SBATCH -N 1
#SBATCH --ntasks-per-node=64

srun --mpi=pmi2 wrf.exe
# 保存退出
[user@loginnode run]$ sbatch runwrf.sh # 与上面创建或修改的文件名一致

地球流体的数值模拟与AI预测(2):WRF 真实模拟
https://notes.rainchan.me/posts/地球流体的数值模拟与AI预测(2):WRF 真实模拟/
作者
Rain Chan
发布于
2025年10月26日
许可协议