保姆级教程:在Ubuntu 22.04上从零编译WRF4.3和WPS(附依赖库避坑指南)
在Ubuntu 22.04上从零构建WRF4.3气象模型的完整指南
当第一次接触WRF(Weather Research and Forecasting)模型时,许多科研新手都会面临一个共同的困境:复杂的依赖关系和繁琐的编译过程。作为目前最流行的中尺度气象数值模型之一,WRF在天气预报、气候研究和大气科学领域有着广泛应用。本文将带你一步步在Ubuntu 22.04系统上完成WRF4.3及其前处理系统WPS的完整安装,特别针对新版Linux系统的特性提供解决方案。
1. 系统准备与环境配置
在开始编译WRF之前,确保你的Ubuntu 22.04系统已经更新到最新状态。打开终端,执行以下命令:
sudo apt update && sudo apt upgrade -y1.1 基础编译工具链安装
WRF模型需要完整的Fortran和C编译环境。Ubuntu 22.04默认的GCC版本(11.2.0)完全兼容WRF4.3:
sudo apt install -y gfortran gcc cpp make m4 git验证编译器版本:
gfortran --version gcc --version1.2 必要依赖库安装
与旧版教程不同,Ubuntu 22.04的软件仓库已经包含了大多数WRF依赖库的最新稳定版本:
sudo apt install -y libpng-dev zlib1g-dev libjasper-dev \ libnetcdf-dev libnetcdff-dev libhdf5-dev libopenmpi-dev特别注意:新版netCDF库(4.8.1+)将C和Fortran接口分离,需要同时安装libnetcdf-dev和libnetcdff-dev。
2. 自定义依赖库编译(可选)
虽然系统仓库提供了预编译的库,但某些情况下可能需要特定版本的依赖库。以下是手动编译关键依赖的步骤:
2.1 netCDF-C和netCDF-Fortran独立编译
# 下载源码 wget https://downloads.unidata.ucar.edu/netcdf-c/4.9.0/netcdf-c-4.9.0.tar.gz wget https://downloads.unidata.ucar.edu/netcdf-fortran/4.6.0/netcdf-fortran-4.6.0.tar.gz # 编译netCDF-C tar xzf netcdf-c-4.9.0.tar.gz cd netcdf-c-4.9.0 ./configure --prefix=/usr/local --disable-dap make -j$(nproc) sudo make install # 编译netCDF-Fortran cd .. tar xzf netcdf-fortran-4.6.0.tar.gz cd netcdf-fortran-4.6.0 export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH ./configure --prefix=/usr/local make -j$(nproc) sudo make install2.2 Jasper和libpng编译
对于需要特定版本的情况:
wget http://www.ijg.org/files/jpegsrc.v9e.tar.gz tar xzf jpegsrc.v9e.tar.gz cd jpeg-9e ./configure --prefix=/usr/local make sudo make install3. WRF模型编译实战
3.1 获取WRF源代码
推荐直接从官方Git仓库克隆最新代码:
git clone --depth 1 https://github.com/wrf-model/WRF.git cd WRF3.2 配置编译选项
运行配置脚本:
./configure选择以下选项:
- (dmpar) 分布式内存并行(MPI)
- gfortran/gcc(GNU编译器)
3.3 解决Ubuntu 22.04特有编译问题
新版系统可能会遇到以下错误:
时间函数兼容性问题: 编辑
configure.wrf文件,找到:-DSPECIAL_FORTRAN修改为:
-DSPECIAL_FORTRAN -DUSE_NETCDF4_FEATURESHDF5库路径问题: 确保环境变量正确设置:
export HDF5=/usr/lib/x86_64-linux-gnu/hdf5/serial
3.4 开始编译
./compile em_real 2>&1 | tee compile.log编译完成后验证:
ls -ls main/*.exe应看到四个可执行文件:
wrf.exe(主程序)real.exe(初始条件处理)ndown.exe(嵌套网格处理)tc.exe(热带气旋模块)
4. WPS系统编译详解
4.1 获取WPS源代码
cd .. git clone --depth 1 https://github.com/wrf-model/WPS.git cd WPS4.2 环境变量配置
确保设置正确的库路径:
export JASPERLIB=/usr/lib/x86_64-linux-gnu export JASPERINC=/usr/include/jasper export WRF_DIR=../WRF4.3 配置与编译
运行配置脚本:
./configure选择选项3(Linux x86_64, gfortran),然后编译:
./compile 2>&1 | tee wps_compile.log成功编译后应生成三个关键程序:
geogrid.exe(地理数据预处理)ungrib.exe(气象数据解压)metgrid.exe(气象数据插值)
5. 常见问题与解决方案
5.1 依赖库版本冲突
症状:编译过程中出现"undefined reference"错误
解决方案:
sudo apt remove libnetcdf-dev libnetcdff-dev # 然后按照第2节手动编译特定版本5.2 MPI相关问题
症状:mpif90命令找不到或运行出错
解决方案:
sudo apt install openmpi-bin libopenmpi-dev export PATH=/usr/lib/x86_64-linux-gnu/openmpi/bin:$PATH5.3 内存不足问题
对于小型云服务器或虚拟机,可能需要在编译时限制线程数:
./compile em_real 2>&1 | tee compile.log改为:
./compile -j 2 em_real 2>&1 | tee compile.log6. 性能优化建议
编译器优化: 编辑
configure.wrf中的ARCH_LOCAL部分,添加:-O3 -march=native -ftree-vectorize -funroll-loops并行配置:
选项 说明 推荐值 numtiles 计算域分块数 CPU核心数 nproc_x X方向进程数 2-4 nproc_y Y方向进程数 根据核心数调整 I/O优化: 考虑使用WRF的NetCDF4压缩输出:
ncd_compression = 1 compression_level = 2
7. 验证安装成功
运行测试案例:
cd WRF/test/em_real ./real.exe mpirun -np 4 ./wrf.exe检查输出文件:
wrfout_d01_*(主输出文件)wrfvar_output(如运行同化)
8. 后续工作流程
完整的WRF模拟流程:
WPS阶段:
./geogrid.exe ./ungrib.exe ./metgrid.exeWRF预处理:
ln -sf met_em* . ./real.exe主模拟运行:
mpirun -np 8 ./wrf.exe后处理: 推荐使用NCL、Python(xarray)或R语言处理输出数据
在实际项目中,我发现将编译过程封装成Shell脚本可以大大提高团队协作效率。特别是环境变量设置部分,建议写入~/.bashrc或单独的环境配置文件中。对于经常需要重新编译的情况,可以考虑使用Docker容器来保持环境一致性。
