保姆级教程:用FNL数据从零搭建WRF环境并成功运行第一个案例(避坑指南)
从零搭建WRF环境:FNL数据驱动的高效建模实战指南
当气象建模的新手第一次打开WRF(Weather Research and Forecasting)模型文档时,往往会感到无从下手。官方文档虽然详尽,但缺乏针对初学者的实操指导,特别是当使用非官方推荐的FNL(Final Operational Global Analysis)数据时,更容易在预处理阶段遇到各种"坑"。本文将提供一个经过验证的完整流程,从环境配置到后处理,帮助您用FNL数据成功运行第一个WRF案例。
1. 环境准备与基础配置
在开始WRF建模之旅前,合理的环境配置是成功的第一步。不同于官方教程的理想化假设,实际部署中需要考虑系统兼容性、依赖项版本冲突等现实问题。
1.1 系统要求与依赖安装
WRF对Linux环境有较高要求,推荐使用Ubuntu 20.04 LTS或CentOS 7+系统。以下是必须安装的基础依赖项:
# Ubuntu/Debian系统 sudo apt-get update sudo apt-get install -y gfortran libtool automake autoconf make m4 csh \ libpng-dev libjasper-dev libnetcdf-dev netcdf-bin mpich对于CentOS/RHEL系统,需使用yum安装相应包。特别注意netCDF库版本应保持在4.1.3以上,但不超过4.7.4(这些版本与WRF兼容性最佳)。
提示:安装完成后,建议执行
which mpicc和which nc-config验证MPI和netCDF是否正确安装,避免后续编译错误。
1.2 目录结构规划
合理的目录结构能显著提升工作流效率。推荐采用以下布局:
~/WRF_Project/ ├── Build_WRF/ # 主工作目录 │ ├── WPS/ # 预处理系统 │ ├── WRF/ # 主模型代码 │ └── DATA/ # 气象数据存储 ├── Libraries/ # 依赖库 └── ARWpost/ # 后处理工具使用以下命令快速创建目录结构:
mkdir -p ~/WRF_Project/{Build_WRF/{WPS,WRF,DATA},Libraries,ARWpost}2. WRF与WPS的编译安装
WRF模型的运行依赖其预处理系统WPS(WRF Preprocessing System)的正确配置。这一环节往往是新手最容易出错的地方。
2.1 WRF编译配置
进入WRF源码目录执行配置:
cd ~/WRF_Project/Build_WRF/WRF ./configure选择配置时需注意:
- 并行计算选项:34. (dmpar) DISTRIBUTED MEMORY PARALLEL (MPI)
- 编译器组合:根据系统选择GNU(gcc/gfortran)或Intel编译器
- 嵌套选项:初学者选择1. Basic nesting
配置完成后,执行编译:
./compile em_real >& compile.log检查编译是否成功:
ls -lah main/*.exe # 应看到wrf.exe和real.exe2.2 WPS编译与特殊处理
WPS的编译需要额外关注与WRF版本的兼容性。进入WPS目录后:
cd ~/WRF_Project/Build_WRF/WPS ./clean # 清理可能存在的旧配置 ./configure选择与WRF相同的编译器选项。编译过程中常遇到的问题是ungrib工具对GRIB2数据的支持,需要确保libjasper-dev库已正确安装。
编译成功后,应生成三个关键可执行文件:
ungrib.exe # GRIB数据解码器 geogrid.exe # 地理数据处理器 metgrid.exe # 气象场插值工具3. FNL数据处理全流程
使用FNL数据替代官方示例数据时,需要特别注意数据格式和时间范围的匹配问题。
3.1 数据获取与准备
FNL数据可从NCAR研究数据存档获取,典型命名格式为:
fnl_YYYYMMDD_HH_mm.grib2建议使用wget批量下载:
cd ~/WRF_Project/Build_WRF/DATA for hour in 00 06 12 18; do wget https://rda.ucar.edu/data/ds083.2/grib2/2020/202007/fnl_20200727_${hour}_00.grib2 done3.2 WPS配置关键参数
namelist.wps文件是WPS运行的核心,以下是与FNL数据相关的关键配置节选:
&share wrf_core = 'ARW', max_dom = 1, start_date = '2020-07-27_00:00:00', end_date = '2020-07-27_18:00:00', interval_seconds = 21600 / &geogrid parent_id = 1, parent_grid_ratio = 1, i_parent_start = 1, j_parent_start = 1, e_we = 100, e_sn = 100, geog_data_res = 'default', dx = 30000, dy = 30000, map_proj = 'lambert', ref_lat = 35.0, ref_lon = -95.0, truelat1 = 30.0, truelat2 = 60.0, stand_lon = -95.0, geog_data_path = '~/WRF_Project/Build_WRF/WPS_GEOG' /注意:FNL数据需要使用GRIB2的Vtable,执行
ln -sf ungrib/Variable_Tables/Vtable.GFS Vtable链接正确的变量表。
3.3 分步执行WPS流程
地理数据处理:
./geogrid.exe检查输出:
geo_em.d01.nc文件应出现在目录中气象数据解码:
./link_grib.csh ~/WRF_Project/Build_WRF/DATA/fnl_* ./ungrib.exe成功后会生成
FILE:*系列文件数据融合:
./metgrid.exe输出
met_em.d01.*文件将用于WRF初始化
4. WRF运行与后处理
当WPS预处理完成后,真正的模型运行阶段开始。这一阶段对计算资源要求较高,需要合理配置。
4.1 namelist.input精要配置
namelist.input的时间设置必须与WPS完全一致,以下是典型配置:
&time_control run_days = 0, run_hours = 18, start_year = 2020, 2020, start_month = 07, 07, start_day = 27, 27, start_hour = 00, 00, end_year = 2020, 2020, end_month = 07, 07, end_day = 27, 27, end_hour = 18, 18, interval_seconds = 21600, input_from_file = .true., .true., history_interval = 60, 60, frames_per_outfile = 100, 100, restart = .false., io_form_history = 2 io_form_restart = 2 io_form_input = 2 io_form_boundary= 2 /4.2 并行运行优化
根据可用CPU核心数调整MPI进程数。例如4核系统:
mpirun -np 4 ./real.exe mpirun -np 4 ./wrf.exe监控运行状态的有效方法:
tail -f rsl.error.0000 # 实时查看错误日志 nvidia-smi # 查看GPU利用率(如果使用GPU加速)4.3 结果可视化技巧
使用ARWpost处理输出数据时,注意namelist.ARWpost中的变量选择:
&datetime start_date = '2020-07-27_00:00:00', end_date = '2020-07-27_18:00:00', interval_seconds = 3600, / &io input_root_name = '../WRF/test/em_real/wrfout_d01_2020-07-27' output_root_name = './output/postprd' plot = 'all' fields = 'height,pressure,tk,rh' /运行ARWpost后,可使用NCL或Python的wrf-python包进行高级可视化。例如用Python快速查看地面温度:
import xarray as xr ds = xr.open_dataset('wrfout_d01_2020-07-27_00:00:00') ds.T2[0].plot() # 初始时刻地面温度场在实际项目中,我发现最常被忽视的环节是时间一致性检查——确保WPS的起止时间、FNL数据时间覆盖和WRF运行时间完全匹配。曾有一次因为时区转换错误导致6小时的时间偏移,整个模拟结果完全失真。另一个实用技巧是在首次运行时将history_interval设为较小值(如10分钟),这样可以快速验证模型是否正常运行,而不必等待长时间模拟完成。
