1. 为什么选择Cygwin搭建WRF环境对于Windows用户来说想要运行WRF这类原本设计用于Linux系统的气象模式通常会面临两个选择安装完整的Linux虚拟机或者使用Cygwin这样的兼容层。我实测下来Cygwin方案对新手要友好得多。虚拟机虽然功能完整但需要分配大量系统资源安装过程复杂而且容易遇到驱动兼容性问题。记得我第一次尝试用VirtualBox安装Ubuntu跑WRF时光是解决显卡驱动问题就花了整整两天。Cygwin本质上是一个在Windows上运行的POSIX兼容环境它通过动态链接库cygwin1.dll实现了Linux API的模拟。虽然性能上会比原生Linux稍差但对于学习WRF的运行流程和基础操作完全够用。最重要的是它可以直接访问Windows文件系统省去了虚拟机里外传输文件的麻烦。我帮实验室三个学弟配置环境时用Cygwin方案平均2小时就能完成基础环境搭建而虚拟机方案至少要折腾一整天。这里有个实际对比数据在我的联想小新Pro13i5-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.0make: 4.3以上perl: 5.3python: 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-devel2.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基础版编译类型选1em_real案例这里有个隐藏技巧可以先备份configure.wrf文件因为后续修改参数会经常用到cp configure.wrf configure.wrf.backup编译过程中最常见的错误是内存不足解决方法是在~/.bashrc中添加export WRF_CHEM0 export WRF_KPP0 ulimit -s unlimited然后执行source ~/.bashrc生效。如果还是失败可以尝试分步编译./compile em_real 21 | tee compile.log3.3 验证安装成功编译完成后检查这几个关键文件是否存在main/wrf.exemain/real.exemain/ndown.exemain/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 21 nohup ./wrf.exe wrf.log 21 监控运行状态可以用tail -f wrf.log grep Timing wrf.log5.3 结果可视化最简单的查看方式是用ncviewapt-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分钟完成。