从零到一:在Windows上通过Cygwin搭建WRF中尺度气象模拟环境
1. 为什么选择Cygwin搭建WRF环境
对于Windows用户来说,想要运行WRF这类原本设计用于Linux系统的气象模式,通常会面临两个选择:安装完整的Linux虚拟机,或者使用Cygwin这样的兼容层。我实测下来,Cygwin方案对新手要友好得多。虚拟机虽然功能完整,但需要分配大量系统资源,安装过程复杂,而且容易遇到驱动兼容性问题。记得我第一次尝试用VirtualBox安装Ubuntu跑WRF时,光是解决显卡驱动问题就花了整整两天。
Cygwin本质上是一个在Windows上运行的POSIX兼容环境,它通过动态链接库(cygwin1.dll)实现了Linux API的模拟。虽然性能上会比原生Linux稍差,但对于学习WRF的运行流程和基础操作完全够用。最重要的是,它可以直接访问Windows文件系统,省去了虚拟机里外传输文件的麻烦。我帮实验室三个学弟配置环境时,用Cygwin方案平均2小时就能完成基础环境搭建,而虚拟机方案至少要折腾一整天。
这里有个实际对比数据:在我的联想小新Pro13(i5-1135G7/16GB)上,Cygwin编译WRFV3大约需要45分钟,而虚拟机里需要近2小时。对于只是想要学习WRF操作流程的新手,这个性能差异完全可以接受。当然,如果是正式科研计算,还是建议用服务器或高性能工作站。
2. 环境准备与基础配置
2.1 Cygwin安装详解
首先到Cygwin官网下载setup-x86_64.exe安装程序。这里有个坑要注意:一定要选择完整镜像站点(比如中科大的mirrors.ustc.edu.cn),否则后期安装依赖库时容易失败。我建议直接把这些参数写在安装命令里:
setup-x86_64.exe -q -P wget -P gcc-g++ -P make -P diffutils -P libmpfr-devel -P libgmp-devel -P libmpc-devel -P perl -P python -P cmake -P curl -P libssl-devel -P libffi-devel -P zlib-devel关键包一定要选对版本:
- gcc-g++: 最新版(目前是11.3.0)
- make: 4.3以上
- perl: 5.3+
- python: 3.8+
安装路径我强烈建议放在C盘根目录(如C:\cygwin64),因为WRF编译过程中可能会遇到路径过长的问题。完成后别忘记将C:\cygwin64\bin添加到系统环境变量PATH中。
2.2 必要依赖库安装
WRF需要几个关键库支持,通过Cygwin的包管理器安装最方便:
apt-cyg install libnetcdf-devel libjasper-devel libpng-devel libopenmpi-devel这里有个常见报错解决方案:如果遇到"Unable to locate package"错误,先运行apt-cyg update更新源。我遇到过jasper库版本冲突的问题,解决办法是手动指定版本:
apt-cyg install libjasper-devel=2.0.14-1所有库安装完成后,建议执行以下检查命令:
which gcc mpicc --version ncdump --version正确配置应该能看到gcc 11.x、OpenMPI 4.x和NetCDF 4.8.x的版本信息。
3. WRF源码编译实战
3.1 源码获取与准备
建议从官网下载最新稳定版(当前是WRFV4.4),用tar命令解压时要注意参数:
tar -xzvf WRFV4.4.TAR.gz -C /opt cd /opt/WRFV4我习惯在/opt下创建专门的编译目录,结构如下:
/opt/ ├── WRFV4/ ├── WPS/ └── GEOG/3.2 编译配置技巧
运行configure时选择34选项(GNU/gfortran),然后会出现几个关键配置项:
- 并行计算选择:新手建议选1(基本序列)
- 嵌套网格:先选0(基础版)
- 编译类型:选1(em_real案例)
这里有个隐藏技巧:可以先备份configure.wrf文件,因为后续修改参数会经常用到:
cp configure.wrf configure.wrf.backup编译过程中最常见的错误是内存不足,解决方法是在~/.bashrc中添加:
export WRF_CHEM=0 export WRF_KPP=0 ulimit -s unlimited然后执行source ~/.bashrc生效。如果还是失败,可以尝试分步编译:
./compile em_real 2>&1 | tee compile.log3.3 验证安装成功
编译完成后检查这几个关键文件是否存在:
- main/wrf.exe
- main/real.exe
- main/ndown.exe
- main/tc.exe
可以用简单的测试命令验证:
cd test/em_real ./wrf.exe如果看到"SUCCESS COMPLETE WRF"字样,说明安装成功。我建议把常用路径加到环境变量:
export WRF_DIR=/opt/WRFV4 export WPS_DIR=/opt/WPS4. WPS配置与案例运行
4.1 地理数据准备
从WRF用户官网下载必要的地理数据集(约1.1GB),解压到GEOG目录:
mkdir /opt/GEOG tar -xzvf WPS_GEOG.tar.gz -C /opt/GEOG对于中国区域模拟,建议额外下载更高精度的地形数据:
wget http://www2.mmm.ucar.edu/wrf/src/wps_files/geog_high_res_mandatory.tar.gz4.2 namelist.wps配置详解
这是我调试过的一个华东地区配置模板:
&share wrf_core = 'ARW', max_dom = 1, start_date = '2023-07-01_00:00:00', end_date = '2023-07-02_00: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 = 80, geog_data_res = '10m', dx = 30000, dy = 30000, map_proj = 'lambert', ref_lat = 32.0, ref_lon = 118.8, truelat1 = 30.0, truelat2 = 60.0, stand_lon = 118.8, geog_data_path = '/opt/GEOG' /关键参数说明:
- dx/dy: 网格间距(单位米)
- e_we/e_sn: 东西/南北向网格点数
- ref_lat/ref_lon: 区域中心坐标
- truelat: 兰伯特投影标准纬度
4.3 完整运行流程
分步执行这些命令并检查日志:
# 1. 运行geogrid ./geogrid.exe >& geogrid.log grep -i "successful" geogrid.log # 2. 处理气象数据 ln -sf ungrib/Variable_Tables/Vtable.GFS Vtable ./link_grib.csh /path/to/GFS/data ./ungrib.exe >& ungrib.log # 3. 插值到网格 ./metgrid.exe >& metgrid.log常见问题排查:
- 如果geogrid失败,检查GEOG路径是否正确
- ungrib报错通常是Vtable不匹配,需要重新链接
- metgrid内存不足时可以尝试减小网格范围
5. WRF运行与结果分析
5.1 namelist.input配置
保持与WPS一致的网格设置,时间控制部分示例:
&time_control run_days = 1, run_hours = 0, run_minutes = 0, run_seconds = 0, start_year = 2023, start_month = 07, start_day = 01, start_hour = 00, end_year = 2023, end_month = 07, end_day = 02, end_hour = 00, interval_seconds = 21600, history_interval = 60, frames_per_outfile = 1, /5.2 实际运行命令
建议使用nohup后台运行:
nohup ./real.exe > real.log 2>&1 & nohup ./wrf.exe > wrf.log 2>&1 &监控运行状态可以用:
tail -f wrf.log grep "Timing" wrf.log5.3 结果可视化
最简单的查看方式是用ncview:
apt-cyg install ncview ncview wrfout_d01_2023-07-01_00:00:00对于Python用户,推荐使用wrf-python库:
import xarray as xr ds = xr.open_dataset("wrfout_d01_2023-07-01_00:00:00") ds.T2.plot() # 绘制2米温度场6. 性能优化与常见问题
6.1 编译优化技巧
修改configure.wrf中的这些参数:
FCOPTIM = -O2 -ftree-vectorize -funroll-loops FCDEBUG = -g FORMAT_FREE = -ffree-form -ffree-line-length-none对于多核CPU,可以启用并行编译:
export J="-j 4" ./compile em_real >& compile.log &6.2 常见错误解决方案
Segmentation fault: 检查内存限制:
ulimit -s unlimitedNetCDF文件写入失败: 增加文件描述符限制:
ulimit -n 65536日期时间错误: 确保WPS和WRF的namelist时间设置完全一致
6.3 资源监控
运行期间可以用这些命令监控资源:
top -u $(whoami) # CPU内存监控 df -h # 磁盘空间 dmesg | grep -i kill # 检查是否被OOM Killer终止7. 进阶应用方向
掌握了基础运行后,可以尝试这些扩展:
- 嵌套网格配置(max_dom = 2+)
- 化学模块WRF-Chem
- 数据同化WRFDA
- 台风路径预报(tc.exe)
对于区域气候模拟,需要修改物理参数化方案:
&physics mp_physics = 8, ! WSM5微物理方案 ra_lw_physics = 1, ! RRTM长波辐射 ra_sw_physics = 1, ! Dudhia短波辐射 sf_sfclay_physics = 1, ! Monin-Obukhov近地层 sf_surface_physics = 2, ! Noah陆面过程 bl_pbl_physics = 1, ! YSU边界层 cu_physics = 1, ! Kain-Fritsch积云参数化 /每次修改后建议先用小区域(如50x50网格)测试,确认无误再正式运行。我在笔记本上测试过的最小可行配置是30x30网格、6小时预报,大约需要15分钟完成。
