1. 环境准备与系统配置第一次在Ubuntu上折腾WRF-Hydro的依赖库时我对着报错信息折腾了整整三天。后来才发现问题出在最开始的系统环境配置上。为了避免大家踩同样的坑我把完整的环境准备流程梳理出来。Ubuntu 22.04作为长期支持版本确实比旧版本稳定不少。但默认安装的系统还是缺少很多科学计算需要的组件。建议先用以下命令更新系统sudo apt update sudo apt upgrade -y接着安装基础编译工具链这是后续所有操作的基础sudo apt install build-essential gcc gfortran g make cmake -y这里有个小技巧如果你不确定某个包是否安装成功可以用which命令检查比如which gfortran。我遇到过gfortran装上了但没加入PATH的情况这时候就需要手动配置环境变量。建议创建一个专门的项目目录结构我习惯用这样的布局mkdir -p ~/wrf_hydro_project/{sources,apps,logs}这个结构有三个好处sources存放所有源码压缩包方便统一管理apps作为安装目录与系统自带的软件隔离logs保存编译日志出问题时可以回溯记得把路径设为环境变量后续操作会方便很多echo export PROJECT~/wrf_hydro_project ~/.bashrc echo export SOURCES$PROJECT/sources ~/.bashrc echo export APPS$PROJECT/apps ~/.bashrc source ~/.bashrc2. 依赖库的编译与安装2.1 MPICH并行环境配置MPICH的版本选择很关键太新的版本可能不兼容太旧的又缺少功能。经过多次测试4.1.2版本在WRF-Hydro上表现最稳定。下载解压后配置时要注意几个参数cd $SOURCES wget https://www.mpich.org/static/downloads/4.1.2/mpich-4.1.2.tar.gz tar xzf mpich-4.1.2.tar.gz cd mpich-4.1.2 ./configure --prefix$APPS/mpich --enable-fastall,O3 --disable-shared 21 | tee $PROJECT/logs/mpich_configure.log这里--enable-fast开启所有优化O3表示最高级别优化--disable-shared强制使用静态链接。编译过程中如果报错可以先检查logs目录下的记录文件。编译安装完成后验证是否成功$APPS/mpich/bin/mpicc --version2.2 zlib压缩库安装zlib看似简单但配置不当会导致后续HDF5出问题。关键是要指定正确的安装路径cd $SOURCES wget https://www.zlib.net/zlib-1.2.13.tar.gz tar xzf zlib-1.2.13.tar.gz cd zlib-1.2.13 ./configure --prefix$APPS/netcdf 21 | tee $PROJECT/logs/zlib_configure.log make -j$(nproc) 21 | tee $PROJECT/logs/zlib_make.log make install 21 | tee $PROJECT/logs/zlib_install.log-j$(nproc)参数会让make使用所有CPU核心并行编译大幅缩短时间。安装后检查$APPS/netcdf/lib下是否有libz.so文件。2.3 HDF5科学数据格式支持HDF5的配置最复杂必须正确关联zlib并开启必要的功能选项cd $SOURCES wget https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-1.12/hdf5-1.12.2/src/hdf5-1.12.2.tar.gz tar xzf hdf5-1.12.2.tar.gz cd hdf5-1.12.2 export CC$APPS/mpich/bin/mpicc export FC$APPS/mpich/bin/mpif90 ./configure --prefix$APPS/netcdf \ --with-zlib$APPS/netcdf \ --enable-parallel \ --enable-fortran \ --enable-cxx \ --enable-hl \ --enable-sharedno 21 | tee $PROJECT/logs/hdf5_configure.log特别注意必须使用MPICH的编译器wrapper(mpicc/mpif90)--enable-parallel开启并行IO支持--enable-hl启用高级接口编译完成后用以下命令验证HDF5的并行支持$APPS/netcdf/bin/h5pcc -showconfig | grep Parallel2.4 NetCDF数据格式全家桶NetCDF需要分两步安装先装C接口再装Fortran接口。在编译前必须设置好环境变量export CPPFLAGS-I$APPS/netcdf/include export LDFLAGS-L$APPS/netcdf/lib export LIBS-lhdf5_hl -lhdf5 -lz2.4.1 NetCDF-C核心库cd $SOURCES wget https://downloads.unidata.ucar.edu/netcdf-c/4.9.2/netcdf-c-4.9.2.tar.gz tar xzf netcdf-c-4.9.2.tar.gz cd netcdf-c-4.9.2 ./configure --prefix$APPS/netcdf \ --disable-dap \ --enable-netcdf-4 \ --enable-parallel-tests \ --enable-largefile 21 | tee $PROJECT/logs/netcdf-c_configure.log关键配置说明--disable-dap关闭远程数据访问(避免额外依赖)--enable-netcdf-4启用HDF5格式支持--enable-parallel-tests编译并行测试用例2.4.2 NetCDF-Fortran接口cd $SOURCES wget https://downloads.unidata.ucar.edu/netcdf-fortran/4.6.1/netcdf-fortran-4.6.1.tar.gz tar xzf netcdf-fortran-4.6.1.tar.gz cd netcdf-fortran-4.6.1 ./configure --prefix$APPS/netcdf \ --enable-parallel-tests 21 | tee $PROJECT/logs/netcdf-fortran_configure.log安装后运行测试make check 21 | tee $PROJECT/logs/netcdf-fortran_test.log3. 环境变量集成技巧所有依赖库安装完成后需要正确配置环境变量。我推荐把这些配置写入~/.bashrc的独立区块echo # WRF-Hydro Environment ~/.bashrc echo export NETCDF$APPS/netcdf ~/.bashrc echo export PATH$APPS/netcdf/bin:$APPS/mpich/bin:$PATH ~/.bashrc echo export LD_LIBRARY_PATH$APPS/netcdf/lib:$APPS/mpich/lib:$LD_LIBRARY_PATH ~/.bashrc echo export MANPATH$APPS/netcdf/share/man:$MANPATH ~/.bashrc加载环境变量后用这些命令验证nc-config --all | grep -i features mpif90 --showme:version常见问题排查如果提示找不到库文件检查LD_LIBRARY_PATH是否包含netcdf和mpich的lib目录测试MPI并行环境mpiexec -n 4 hostname应该显示4次主机名NetCDF版本检查ncdump -k应该显示netCDF-4 classic model4. WRF-Hydro编译实战环境准备好后终于可以安装WRF-Hydro了。建议从GitHub获取最新稳定版cd $SOURCES wget https://github.com/NCAR/wrf_hydro_nwm_public/archive/refs/tags/v5.2.0.tar.gz tar xzf v5.2.0.tar.gz cd wrf_hydro_nwm_public-5.2.0/trunk/NDHMS复制并修改环境配置模板cp template/setEnvar.sh . sed -i s/^export NETCDF.*/export NETCDF$APPS\/netcdf/ setEnvar.sh echo export WRFIO_NCD_LARGE_FILE_SUPPORT1 setEnvar.sh开始编译前建议先清理可能存在的旧配置./clean选择编译选项时输入2选择dmpar并行模式。然后启动编译./compile_offline_NoahMP.sh setEnvar.sh $PROJECT/logs/wrf-hydro_compile.log编译成功的关键标志是在Run目录下生成可执行文件wrf_hydro.exe。如果编译失败可以检查日志文件的最后100行tail -n 100 $PROJECT/logs/wrf-hydro_compile.log常见编译错误解决方案缺少符号链接ln -sf $APPS/netcdf/include/* /usr/local/include/内存不足在虚拟机设置中增加swap空间版本冲突确保所有库都使用相同版本的MPI编译器最后测试运行mpirun -np 4 ./Run/wrf_hydro.exe