1. 为什么需要搭建自己的天气实验室
当我在2018年第一次接触WRF模型时,就被这个强大的数值天气预报系统震撼到了。作为一个气象爱好者,能够自己运行数值模拟,就像拥有了一个小型气象台。WRF(Weather Research and Forecasting)模型是由美国国家大气研究中心(NCAR)等机构联合开发的下一代中尺度数值天气预报系统,它允许用户从全球模式中获取初始场和边界条件,然后在感兴趣的区域进行更高分辨率的模拟。
搭建个人天气实验室的最大价值在于:
- 可以自由设置模拟区域和分辨率
- 能进行各种敏感性实验(比如不同物理参数化方案的对比)
- 对理解天气过程有极大帮助
- 为科研论文提供可靠的数据支撑
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 硬件准备与Linux环境配置
2.1 最低硬件要求
根据我的实测经验,要流畅运行WRF模拟,建议配置:
- CPU:至少4核(推荐8核以上)
- 内存:16GB起步(32GB更佳)
- 存储:100GB可用空间(高分辨率模拟需要更多)
- 操作系统:64位Linux(推荐Ubuntu 20.04 LTS或CentOS 7)
注意:WRF编译和运行对内存要求较高,我曾尝试在8GB内存的笔记本上编译,经常因内存不足而失败。
2.2 Linux系统安装与基础配置
如果你不熟悉Linux,建议从Ubuntu Desktop版开始。安装完成后,首先更新系统:
bash复制sudo apt update && sudo apt upgrade -y
然后安装必要的开发工具链:
bash复制sudo apt install -y build-essential gfortran m4 csh libcurl4-openssl-dev
3. WRF依赖库的编译安装
3.1 创建专用目录结构
保持目录整洁很重要,我习惯这样组织:
bash复制mkdir -p ~/wrf_lab/{libs,wrf,wps,data}
cd ~/wrf_lab/libs
3.2 关键依赖库编译
3.2.1 NetCDF安装
bash复制wget https://downloads.unidata.ucar.edu/netcdf-c/4.8.1/netcdf-c-4.8.1.tar.gz
tar xzf netcdf-c-4.8.1.tar.gz
cd netcdf-c-4.8.1
./configure --prefix=/usr/local/netcdf --disable-dap
make -j4
sudo make install
3.2.2 Jasper库安装
bash复制wget http://www.ece.uvic.ca/~frodo/jasper/software/jasper-2.0.14.tar.gz
tar xzf jasper-2.0.14.tar.gz
cd jasper-2.0.14
mkdir build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local
make -j4
sudo make install
4. WRF模型编译实战
4.1 获取WRF源代码
bash复制cd ~/wrf_lab/wrf
wget https://github.com/wrf-model/WRF/archive/v4.3.3.tar.gz
tar xzf v4.3.3.tar.gz
cd WRF-4.3.3
4.2 配置编译环境
设置环境变量(加入~/.bashrc):
bash复制export NETCDF=/usr/local/netcdf
export WRFIO_NCD_LARGE_FILE_SUPPORT=1
然后运行配置脚本:
bash复制./configure
选择选项34(GNU/gfortran)和1(基本嵌套),这是我测试最稳定的组合。
4.3 编译WRF
bash复制./compile em_real -j4 >& compile.log
编译完成后检查:
bash复制ls -l main/*.exe
应该看到wrf.exe和real.exe等可执行文件。
5. WPS系统编译与配置
5.1 获取并解压WPS
bash复制cd ~/wrf_lab/wps
wget https://github.com/wrf-model/WPS/archive/v4.3.1.tar.gz
tar xzf v4.3.1.tar.gz
cd WPS-4.3.1
5.2 配置与编译
bash复制./configure
选择选项3(GNU/gfortran),然后:
bash复制./compile >& compile.log
检查关键程序:
bash复制ls -l *.exe
应该看到geogrid.exe、ungrib.exe和metgrid.exe。
6. 准备初始和边界条件数据
6.1 下载GFS数据
我常用以下Python脚本自动下载:
python复制import urllib.request
from datetime import datetime, timedelta
run_date = datetime.utcnow().strftime('%Y%m%d')
url = f"https://nomads.ncep.noaa.gov/pub/data/nccf/com/gfs/prod/gfs.{run_date}/00/atmos/gfs.t00z.pgrb2.0p25.f000"
urllib.request.urlretrieve(url, f"gfs_{run_date}.grb2")
6.2 运行WPS流程
bash复制./geogrid.exe
ln -sf ~/wrf_lab/data/gfs_20230601.grb2 GRIBFILE.AAA
./ungrib.exe
./metgrid.exe
7. 运行WRF模拟
7.1 准备namelist.input
关键参数示例:
fortran复制&time_control
run_days = 1,
run_hours = 0,
start_year = 2023, 2023,
start_month = 06, 06,
start_day = 01, 01,
start_hour = 00, 00,
end_year = 2023, 2023,
end_month = 06, 06,
end_day = 02, 02,
end_hour = 00, 00,
interval_seconds = 21600
/
7.2 运行real和wrf
bash复制./real.exe
mpirun -np 4 ./wrf.exe
8. 结果可视化与分析
8.1 使用NCL绘制图表
安装NCL后:
ncl复制load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"
load "$NCARG_ROOT/lib/ncarg/nclscripts/wrf/WRFUserARW.ncl"
a = addfile("wrfout_d01_2023-06-01_00:00:00","r")
tc = wrf_user_getvar(a,"T2",-1)
wks = gsn_open_wks("png","t2m")
res = True
res@ContourParameters = (/ 10., 30., 2. /)
contour = wrf_contour(a,wks,tc(0,:,:),res)
plot = wrf_map_overlays(a,wks,(/contour/),True,True)
8.2 Python后处理方案
使用xarray和cartopy:
python复制import xarray as xr
import cartopy.crs as ccrs
import matplotlib.pyplot as plt
ds = xr.open_dataset('wrfout_d01_2023-06-01_00:00:00')
temp = ds['T2'][0,:,:] - 273.15
plt.figure(figsize=(12,8))
ax = plt.axes(projection=ccrs.PlateCarree())
temp.plot(ax=ax, transform=ccrs.PlateCarree())
ax.coastlines()
plt.savefig('temperature.png')
9. 敏感性实验设计
9.1 物理参数化方案对比
常见的对比组合:
- 微物理方案:WSM6 vs Thompson
- 积云参数化:Kain-Fritsch vs BMJ
- 边界层方案:YSU vs MYJ
9.2 实验步骤
- 复制原始WRF运行目录
- 修改namelist.input中的物理方案参数
- 保持其他所有条件相同
- 并行运行不同配置
- 对比分析结果差异
10. 常见问题与解决方案
10.1 编译错误处理
问题: gfortran报错"unsupported GNU version"
解决: 指定兼容模式:
bash复制export FFLAGS="-fallow-argument-mismatch -O2"
10.2 运行时报错
问题: "Could not find matching time period"
解决: 检查GFS数据时间与namelist设置是否一致,确保interval_seconds正确。
10.3 性能优化技巧
- 使用MPI并行:
mpirun -np 8 ./wrf.exe - 调整namelist中的
num_metgrid_levels(通常设为32足够) - 使用SSD存储临时文件
11. 进阶应用方向
11.1 城市冠层模型
在namelist中启用:
fortran复制&physics
sf_urban_physics = 1, 1,
/
11.2 数据同化
使用WRFDA模块:
bash复制./da_wrfvar.exe
11.3 集合预报
通过修改初始场扰动运行多个成员。
12. 资源推荐
12.1 学习资料
- WRF用户手册:https://www2.mmm.ucar.edu/wrf/users/
- 在线课程:UCAR的WRF教程
- 书籍:《WRF模式使用指南与案例分析》
12.2 数据源
- GFS:https://nomads.ncep.noaa.gov/
- ERA5:https://cds.climate.copernicus.eu/
- 地形数据:https://www2.mmm.ucar.edu/wrf/users/download/get_sources_wps_geog.html
经过多次实战,我发现WRF虽然学习曲线陡峭,但一旦掌握就能打开气象研究的新世界。建议新手从一个小的区域(如100×100网格)开始,逐步扩展到更复杂的模拟。记得每次修改配置后保留完整的日志,这对排查问题至关重要。
