第四章:WRF安装与编译——从源码到可执行文件
说实话,WRF的安装编译,是很多新手的第一道坎。我记得自己第一次装WRF时,对着满屏的报错信息,差点把电脑砸了。但熬过去之后你会发现,这其实是个熟能生巧的过程。
今天我就带你一步步走通这条路。从下载源码,到配置选项,再到编译运行,每个坑我都替你踩过了。
4.1 准备工作:环境与依赖
动手之前,先确认你的Linux环境准备好了。我个人习惯用CentOS 7或Ubuntu 20.04,这两个发行版踩坑最少。
你需要安装以下基础库:
# CentOS/RHEL
sudo yum install -y gcc gcc-gfortran gcc-c++ csh perl
sudo yum install -y mpich mpich-devel
sudo yum install -y netcdf netcdf-devel netcdf-fortran netcdf-fortran-devel
sudo yum install -y libpng libpng-devel jasper jasper-devel
# Ubuntu/Debian
sudo apt-get install -y gcc gfortran g++ csh perl
sudo apt-get install -y mpich libmpich-dev
sudo apt-get install -y libnetcdf-dev libnetcdff-dev
sudo apt-get install -y libpng-dev libjasper-dev
我曾经因为NetCDF版本不匹配,折腾了整整两天。建议NetCDF-C用4.7.4,NetCDF-Fortran用4.5.3,这两个版本在WRF 4.x下表现最稳定。
4.2 下载WRF与WPS源码
源码去哪下?官方GitHub仓库最靠谱。别去第三方网站下,我吃过亏,下到过被修改过的版本。
# 创建工作目录
mkdir -p ~/WRF
cd ~/WRF
# 下载WRF源码(以4.4版本为例)
wget https://github.com/wrf-model/WRF/archive/v4.4.tar.gz
tar -zxvf v4.4.tar.gz
mv WRF-4.4 WRF
# 下载WPS源码
wget https://github.com/wrf-model/WPS/archive/v4.4.tar.gz
tar -zxvf v4.4.tar.gz
mv WPS-4.4 WPS
如果你在GitHub下载慢,可以用镜像站。我个人习惯用中科大的镜像:https://mirrors.ustc.edu.cn/,速度能快10倍。
4.3 配置编译选项(./configure)
这是最关键的一步。说白了,就是告诉WRF你的电脑是什么配置,用什么编译器。
进入WRF目录,运行:
cd ~/WRF/WRF
./configure
你会看到一堆选项,像这样:
Please select from among the following Linux x86_64 options:
1. (serial) 2. (smpar) 3. (dmpar) 4. (dm+sm) GNU (gfortran/gcc)
5. (serial) 6. (smpar) 7. (dmpar) 8. (dm+sm) PGI (pgf90/pgcc)
9. (serial) 10. (smpar) 11. (dmpar) 12. (dm+sm) Intel (ifort/icc)
选哪个?我建议:
- 单机跑小案例:选1(serial串行)或3(dmpar并行)
- 多核服务器:选3(dmpar),这是最常用的并行方式
- 有超线程的机器:选4(dm+sm),混合并行效率更高
嗯,这里要注意:选完编译器后,系统会问你要不要嵌套。默认选1(basic)就行,除非你明确知道需要嵌套功能。
我的经验:如果你用的是GNU编译器,选34(dmpar)。为什么是34?因为选项编号会随版本变化,但GNU+dmpar的组合永远在中间偏后的位置。选完后,系统会生成一个configure.wrf文件,这里面记录了所有编译参数。
4.4 编译过程详解(./compile)
配置完,就该编译了。这一步最考验耐心。
./compile em_real >& compile.log &
为什么要加>& compile.log &?因为编译时间很长,少则30分钟,多则2小时。放后台跑,你可以去喝杯咖啡。
编译过程中,你会看到屏幕疯狂滚动。别慌,这是正常的。真正需要关注的是:
- 有没有出现Error:如果有,立刻停下来排查
- 有没有出现Warning:大部分Warning可以忽略,但如果是关于NetCDF或MPI的,要小心
编译完成后,检查一下生成的可执行文件:
ls -l main/*.exe
你应该看到:
wrf.exe—— 主程序,必须要有real.exe—— 真实数据预处理,必须要有ndown.exe—— 嵌套降尺度,可选tc.exe—— 热带气旋追踪,可选
如果wrf.exe和real.exe都生成了,恭喜你,WRF编译成功!
4.5 编译WPS
WPS是WRF的预处理系统,负责把原始气象数据转换成WRF能读的格式。
cd ~/WRF/WPS
./configure
这里的选择和WRF类似。选完后,编辑configure.wps,确保:
WRF_DIR = ../WRF # 指向你的WRF目录
然后编译:
./compile >& compile_wps.log &
编译完检查:
ls -l *.exe
你应该看到geogrid.exe、ungrib.exe、metgrid.exe这三个文件。
4.6 常见编译错误及解决方法
这部分是我最想跟你分享的。编译错误千奇百怪,但80%的问题都集中在下面几个:
| 错误类型 | 典型报错 | 原因 | 解决方法 |
|---|---|---|---|
| NetCDF找不到 | Fatal Error: Can't open module file 'netcdf.mod' |
环境变量没设对 | 检查NETCDF和NETCDFF路径 |
| MPI版本冲突 | mpif90: command not found |
MPI没装或路径不对 | 重新安装MPICH,确保which mpif90能找到 |
| Fortran编译器问题 | undefined reference to '_gfortran_...' |
gfortran版本太老 | 升级到gcc 8.0以上 |
| 内存不足 | Killed 或 Segmentation fault |
编译时内存不够 | 加-j 1单线程编译,或增加swap |
| Jasper库缺失 | Cannot find -ljasper |
GRIB2支持库没装 | 安装libjasper-dev或设置JASPERLIB和JASPERINC |
我曾经犯过一个低级错误:在./configure之后,直接./compile,结果报错说找不到NetCDF。后来发现,我忘了设置环境变量。记住,每次打开新终端,都要重新设置:
export NETCDF=/usr/local/netcdf
export NETCDFF=/usr/local/netcdf-fortran
export PATH=$NETCDF/bin:$PATH
4.7 验证安装是否成功
编译完别急着高兴,跑个测试验证一下:
cd ~/WRF/WRF/test/em_real
./real.exe
如果看到SUCCESS COMPLETE REAL_EM INIT,说明real.exe没问题。
再试试:
./wrf.exe
虽然会因为没有输入数据而报错,但只要看到wrf.exe开始运行并输出日志,就说明编译成功了。
我的习惯:每次编译完,我都会跑一个24小时的理想化案例。用test/em_b_wave目录下的案例,5分钟就能跑完。如果这个案例能顺利出结果,那你的WRF安装就稳了。
4.8 知识体系总览
下面这张图,帮你理清整个安装编译的脉络:
这张图把整个流程串起来了。你按这个顺序走,基本不会迷路。
4.9 写在最后
安装编译WRF,说白了就是三件事:配环境、选选项、等编译。我第一次装的时候,光NetCDF就重装了5次。但当你看到wrf.exe生成的那一刻,那种成就感,值得。
如果你在编译过程中遇到问题,别急着放弃。先看compile.log的最后几行,错误信息通常就在那里。再不行,去WRF官方论坛搜一下,99%的问题都有人遇到过。
好了,动手试试吧。记住,每个WRF用户都是从编译报错开始的。