在已有WRF环境的服务器上,5分钟搞定Flexpart-WRF的编译与配置
当WRF模型已经成为你研究大气扩散或污染物传输的日常工具时,Flexpart-WRF作为其配套的后处理模块,能快速实现粒子轨迹追踪和源反演计算。但很多研究者卡在了环境配置环节——其实如果你已经成功运行过WRF,90%的依赖环境都已就绪。下面这个方案能让你用现有资源快速完成部署。
1. 环境检查与源码准备
首先确认你的WRF环境是否包含这三个关键要素:
- NetCDF库:检查
~/.bashrc中NETCDF环境变量指向的路径 - 编译器套件:记录之前编译WRF使用的编译器类型(gnu/pgi/intel)
- MPI环境:如果WRF以并行模式运行,确保
which mpif90能返回有效路径
提示:用
nc-config --has-nc4命令可快速确认NetCDF是否支持HDF5格式
获取Flexpart-WRF源码推荐使用官方仓库的最新版本:
wget https://git.nilu.no/flexpart/flexpart-wrf/-/archive/master/flexpart-wrf-master.zip unzip flexpart-wrf-master.zip && cd flexpart-wrf-master2. Makefile精准配置技巧
核心配置文件makefile.mom需要修改以下关键参数:
| 参数项 | 配置要点 |
|---|---|
| NETCDF | 直接复用WRF的库路径,通常类似/path/to/netcdf(不带/lib后缀) |
| NETCDFVERSION | 根据nc-config --has-nc4结果选择:支持HDF5填4,否则填3 |
| COMPILER | 必须与WRF编译环境一致(查看原WRF编译日志确认) |
| EXECNAME | 建议保留默认flexwrf33,避免后续脚本适配问题 |
典型配置示例:
# 关键参数配置段 EXECNAME = flexwrf33 NETCDF = /opt/WRF_LIBRARIES/netcdf # 与WRF环境一致 NETCDFVERSION = 4 # 现代系统通常选4 COMPILER = gnu # 与WRF编译器匹配3. 编译模式选择与优化
根据硬件资源选择合适的并行模式:
- MPI+OpenMP混合模式(适合集群节点):
make -f makefile.mom mpi - 纯OpenMP模式(适合多核单机):
export OMP_NUM_THREADS=8 # 设置线程数 make -f makefile.mom omp - 串行模式(调试推荐):
make -f makefile.mom serial
编译完成后会生成对应版本的可执行文件,命名规则为:
flexwrf33_[编译器类型]_[并行模式]4. 常见问题诊断手册
针对不同编译器环境的典型报错解决方案:
GNU编译器套件(gfortran)
# 修改makefile.mom的GNU_FFLAGS行 - GNU_FFLAGS = -O2 -fconvert=big-endian -fno-range-check + GNU_FFLAGS = -O2 -fconvert=big-endian -fno-range-check -fallow-argument-mismatch -fallow-invalid-bozIntel编译器(ifort)
# 修改makefile.mom的INTEL_FFLAGS行 - INTEL_FFLAGS = -O2 -convert big_endian + INTEL_FFLAGS = -O2 -convert big_endian -standard-semantics库链接问题
若出现netcdf.mod找不到的错误,在对应编译器段的LDFLAGS末尾添加:
-lnetcdf -lnetcdff # 确保fortran接口库被链接5. 验证与集成工作流
编译成功后,建议进行快速验证:
# 创建测试目录 mkdir test_run && cd test_run cp ../flexwrf33_* . ./flexwrf33_gnu_serial # 根据实际文件名调整正常情况会输出初始化日志并等待输入文件配置。
将Flexpart-WRF集成到现有工作流时,注意:
- 在作业脚本中设置
export FLEXPART_DIR=/path/to/flexpart-wrf-master - 预处理脚本需输出WRF格式的
wrfout文件 - 粒子释放参数文件
RELEASES需要与WRF坐标系统一致
最后记得将可执行文件路径加入环境变量:
echo 'export PATH=$PATH:/path/to/flexpart-wrf-master' >> ~/.bashrc