WRF模式新手村攻略:从下载数据到画出第一张图,我的Cygwin踩坑全记录
WRF模式新手村生存指南:Cygwin环境下的从零绘图实战
第一次打开WRF官方文档时,那些密密麻麻的术语和参数让我这个气象专业的学生瞬间头晕目眩。在实验室师兄的电脑上看到那些酷炫的天气模拟结果时,谁能想到背后需要经历这么多复杂的步骤?本文将用最直白的语言,记录我在Windows系统下通过Cygwin搭建WRF环境,并成功绘制出第一张天气图的完整历程——包括那些教科书永远不会告诉你的报错信息和解决方案。
1. 环境搭建:Cygwin不是虚拟机
当我告诉导师想在个人笔记本上学习WRF时,他直接否决了安装虚拟机的建议:"你的笔记本会变成暖手宝"。这就是我选择Cygwin的原因——这个神奇的软件能在Windows系统里构建出Linux终端环境,既不需要分配大量硬件资源,又能满足WRF的基本运行需求。
关键安装步骤:
- 从Cygwin官网下载64位安装程序(约1.5MB)
- 安装时勾选以下必备包:
gcc-g++(编译器)make(构建工具)libmpfr-devel(数学库)diffutils(文件比较工具)
- 设置安装目录为
C:\cygwin64(避免中文路径)
注意:安装过程中可能会遇到依赖冲突,建议先安装基础环境再逐步添加功能包
安装完成后,在开始菜单运行Cygwin64 Terminal,输入gcc --version验证环境是否正常。我在这里就遇到了第一个坑——系统提示命令不存在,原因是安装时漏选了gcc组件,不得不重新运行安装程序补装。
2. WRF编译:那些教科书没说的坑
在/opt目录下创建WRF和WPS文件夹后,我从官网下载了WRFV4.3源码包。解压后进入目录执行./configure,这时出现了第一个关键选择:
Select from among the following Linux x86_64 options: 1. (serial) 2. (smpar) 3. (dmpar) 4. (dm+sm)作为新手,我选择了最简单的串行模式(选项1),然后针对Cygwin环境选择gcc/gfortran组合。接下来./compile em_real >& log.compile命令执行后,等待了约45分钟(具体时间取决于电脑配置),却在最后看到令人心碎的报错:
Error: Could not build WRF查看日志发现是module_io_quilt.o文件编译失败。经过多方搜索,发现需要在configure.wrf文件中手动添加:
LIB_EXTERNAL = -L/usr/lib -lnetcdff -lnetcdf重新编译后终于看到期待已久的提示:
WRF COMPILATION COMPLETE3. WPS配置:参数迷宫里的生存法则
WPS的三大组件(geogrid/ungrib/metgrid)需要正确配置namelist.wps文件。作为新手,我直接复制了官方示例却遭遇连环报错。以下是经过血泪教训总结的关键参数设置:
| 参数组 | 关键参数 | 新手建议值 | 常见错误 |
|---|---|---|---|
| &share | wrf_core | 'ARW' | 写成'ARW '(多空格) |
| max_dom | 1 | 嵌套层数过多 | |
| &geogrid | dx/dy | 30000 | 单位错用km |
| map_proj | 'lambert' | 拼写错误 | |
| &ungrib | prefix | 'FILE' | 使用小写 |
最折磨人的是地理数据路径设置。我最初将静态数据放在/home/username/GEOG,却总是收到"Could not open GEOGRID.TBL"错误。后来发现必须使用绝对路径:
geog_data_path = '/opt/WPS_GEOG'4. 数据准备:GRIB文件的陷阱
下载的FNL数据(grib2格式)需要用ungrib处理,但直接运行会报"Invalid GRIB2 file"错误。解决方法分三步:
- 链接正确的Vtable:
ln -sf ungrib/Variable_Tables/Vtable.GFS Vtable- 使用grib2解码器(需单独编译):
./link_grib.csh /path/to/fnl_*- 检查数据时间连续性:
ncdump -h fnl_* | grep time我曾在凌晨3点发现数据时间不连续的问题——原来是因为下载时漏了06时的数据文件,导致整个流程中断。
5. 绘图实战:从nc文件到天气图
当终于看到wrfout_d01文件生成时,那种成就感难以言表。但用NCL绘图时又遇到了新问题:
常见绘图错误及解决:
- 变量不存在:
; 正确变量名查询方式 ncl_filedump wrfout_d01_*- 投影错误:
res@mpProjection = "LambertConformal" res@mpLambertMeridianF = stand_lon res@mpLambertParallel1F = truelat1 res@mpLambertParallel2F = truelat2- 颜色标尺异常:
; 先查询变量范围 min_val = min(f->T2) max_val = max(f->T2) res@cnLevelSelectionMode = "ManualLevels" res@cnMinLevelValF = min_val res@cnMaxLevelValF = max_val最终我的第一个成功图像是2米温度场,虽然配色丑陋,但那个凌晨看着自己模拟出的冷锋过程,所有熬夜的疲惫都化作了兴奋。从完全陌生到能独立运行完整流程,这中间的每一步都充满挑战,而解决这些问题积累的经验,远比教科书上的理论知识来得珍贵。
