第四章: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.exereal.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.exeungrib.exemetgrid.exe这三个文件。

4.6 常见编译错误及解决方法

这部分是我最想跟你分享的。编译错误千奇百怪,但80%的问题都集中在下面几个:

错误类型 典型报错 原因 解决方法
NetCDF找不到 Fatal Error: Can't open module file 'netcdf.mod' 环境变量没设对 检查NETCDFNETCDFF路径
MPI版本冲突 mpif90: command not found MPI没装或路径不对 重新安装MPICH,确保which mpif90能找到
Fortran编译器问题 undefined reference to '_gfortran_...' gfortran版本太老 升级到gcc 8.0以上
内存不足 KilledSegmentation fault 编译时内存不够 -j 1单线程编译,或增加swap
Jasper库缺失 Cannot find -ljasper GRIB2支持库没装 安装libjasper-dev或设置JASPERLIBJASPERINC
⚠️ 避坑指南

我曾经犯过一个低级错误:在./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 知识体系总览

下面这张图,帮你理清整个安装编译的脉络:

WRF安装编译流程 1. 环境准备 gcc/gfortran/MPI/NetCDF 2. 下载源码 WRF + WPS 从GitHub获取 3. ./configure 选择编译器与并行方式 4. ./compile em_real 生成wrf.exe / real.exe 5. 编译WPS geogrid/ungrib/metgrid 6. 验证安装 运行test/em_b_wave案例 ❌ 失败? 检查compile.log → 定位错误 → 修复后重新编译 ✅ 成功!开始使用WRF

这张图把整个流程串起来了。你按这个顺序走,基本不会迷路。

4.9 写在最后

安装编译WRF,说白了就是三件事:配环境、选选项、等编译。我第一次装的时候,光NetCDF就重装了5次。但当你看到wrf.exe生成的那一刻,那种成就感,值得。

如果你在编译过程中遇到问题,别急着放弃。先看compile.log的最后几行,错误信息通常就在那里。再不行,去WRF官方论坛搜一下,99%的问题都有人遇到过。

好了,动手试试吧。记住,每个WRF用户都是从编译报错开始的。


专注资料整理