手把手在Ubuntu 22.04上编译FLEXPART-WRF从系统配置到污染物扩散模拟实战当我们需要模拟大气中污染物的扩散路径时FLEXPART-WRF作为一款强大的拉格朗日粒子扩散模型能够精确追踪气团运动轨迹。本文将带你在Ubuntu 22.04系统上完成从零开始的完整编译安装过程避开那些让初学者头疼的坑。1. 环境准备与依赖库安装在开始编译FLEXPART-WRF前我们需要确保系统具备所有必要的编译环境和依赖库。Ubuntu 22.04作为长期支持版本提供了稳定的基础环境但仍需手动配置一些关键组件。首先更新系统并安装基础开发工具sudo apt update sudo apt upgrade -y sudo apt install -y build-essential gfortran m4 cmake gitFLEXPART-WRF的核心依赖包括netCDF和GRIB API库它们负责处理气象数据输入输出。安装时需特别注意版本兼容性依赖库推荐版本安装方式netCDF-C4.8.1源码编译netCDF-Fortran4.5.4源码编译GRIB API1.28.0源码编译Jasper2.0.33系统包安装编译netCDF库时常见的路径问题可通过以下步骤避免wget https://downloads.unidata.ucar.edu/netcdf-c/4.8.1/netcdf-c-4.8.1.tar.gz tar -xzf netcdf-c-4.8.1.tar.gz cd netcdf-c-4.8.1 ./configure --prefix/usr/local --disable-dap make -j4 sudo make install提示安装完成后务必设置环境变量将/usr/local/lib加入LD_LIBRARY_PATHexport LD_LIBRARY_PATH/usr/local/lib:$LD_LIBRARY_PATH echo export LD_LIBRARY_PATH/usr/local/lib:$LD_LIBRARY_PATH ~/.bashrc2. FLEXPART基础版本编译完成依赖库安装后我们先编译基础版FLEXPART这有助于验证环境配置是否正确。从官方GitHub仓库获取最新源码git clone https://github.com/Flexpart/flexpart.git cd flexpartFLEXPART的编译过程需要配置makefile.inc文件这是最容易出错的环节。以下是关键参数设置示例# 编译器设置 F90 gfortran F77 gfortran # netCDF库路径 NETCDF /usr/local # 编译选项 FFLAGS -O3 -fconvertbig-endian -fPIC -I$(NETCDF)/include LDFLAGS -L$(NETCDF)/lib -lnetcdff -lnetcdf常见编译错误及解决方案netCDF库未找到检查NETCDF路径是否正确确认libnetcdff.so文件存在endianness错误添加-fconvertbig-endian编译选项内存不足使用-O2替代-O3优化级别编译成功后使用测试案例验证cd examples/forward ./flexpart应生成trajectories.txt输出文件包含模拟的粒子轨迹数据。3. FLEXPART-WRF耦合版本编译FLEXPART-WRF版本增加了与WRF气象模型的耦合能力编译过程更为复杂。首先获取专用代码库git clone https://github.com/Flexpart/flexpart-wrf.git cd flexpart-wrf关键的配置差异在于需要指定WRF库路径。如果你已经安装WRF模型需要确认以下文件存在libwrfio_nf.amodule_driver_constants.modmodule_model_constants.mod修改makefile.inc添加WRF相关配置# WRF库路径 WRF_DIR /path/to/your/WRF/library # 额外编译选项 FFLAGS -I$(WRF_DIR)/external/io_netcdf -I$(WRF_DIR)/main LIBS -L$(WRF_DIR)/main -lwrfio_nf编译过程中可能遇到的特殊问题WRF版本不匹配建议使用WRF V4.2及以上版本符号冲突在FFLAGS中添加-fno-range-check选项MPI兼容性如需并行计算确保MPI环境一致注意FLEXPART-WRF需要与编译WRF时使用的netCDF库版本完全一致否则会出现运行时错误。4. 实战案例模拟大气污染物扩散完成编译后我们来运行一个真实案例验证系统。以模拟某工厂排放的SO2扩散为例需要准备以下输入文件WRF气象数据通常为wrfout_d01_*格式文件排放源文件定义污染物释放位置、速率等参数路径配置文件pathnames指定输入输出路径典型的pathnames文件内容示例/path/to/wrfout_d01_* ./output/ ./options/RELEASES ./options/COMMAND关键参数设置options/COMMAND文件COMMAND ldirect 1, ! 前向模拟 ibdate 20230501, ! 开始日期 ibtime 000000, ! 开始时间 iedate 20230502, ! 结束日期 ietime 000000, ! 结束时间 loutstep 3600, ! 输出间隔(秒) loutsample 900, ! 采样间隔(秒) /运行模拟并可视化结果./flexpart-wrf ncview output/grid_time_20230501.nc5. 性能优化与高级技巧对于大规模模拟以下技巧可以显著提升运行效率并行计算配置mpif90 -O3 -fconvertbig-endian -fPIC -c *.f90 mpif90 -o flexpart-wrf *.o -lnetcdff -lnetcdf -lwrfio_nf内存管理参数参数说明推荐值 (百万粒子)numpart总粒子数10-100maxpart单处理器粒子数上限1-10mp_physics微物理方案3 (WRF默认)常见问题快速诊断运行时崩溃检查ulimit -s unlimited是否设置结果异常确认WRF数据时间范围覆盖模拟期性能瓶颈使用top查看内存使用可能需要减少numpart对于长期运行的模拟任务建议使用tmux或screen保持会话tmux new -s flexpart ./flexpart-wrf # CtrlB D 分离会话 tmux attach -t flexpart6. 结果分析与后处理FLEXPART-WRF生成的netCDF格式结果可通过多种工具分析。Python生态提供了强大支持import xarray as xr import matplotlib.pyplot as plt ds xr.open_dataset(grid_time_20230501.nc) ds[spec001_mr].isel(time0).plot.contourf( xlon, ylat, levels20, cmapviridis) plt.title(SO2浓度分布) plt.savefig(so2_distribution.png)对于轨迹分析可使用官方提供的traj2nc工具转换文本轨迹./traj2nc trajectories.txt output_traj.nc高级后处理技巧包括使用cdo工具进行时间平均计算结合basemap绘制地理投影图用PySPLIT进行轨迹聚类分析提示定期清理旧的输出文件大型模拟可能产生数百GB数据。建议建立自动化归档脚本。
手把手在Ubuntu 22.04上编译FLEXPART-WRF,搞定大气污染物扩散模拟第一步
发布时间:2026/5/30 19:14:42
手把手在Ubuntu 22.04上编译FLEXPART-WRF从系统配置到污染物扩散模拟实战当我们需要模拟大气中污染物的扩散路径时FLEXPART-WRF作为一款强大的拉格朗日粒子扩散模型能够精确追踪气团运动轨迹。本文将带你在Ubuntu 22.04系统上完成从零开始的完整编译安装过程避开那些让初学者头疼的坑。1. 环境准备与依赖库安装在开始编译FLEXPART-WRF前我们需要确保系统具备所有必要的编译环境和依赖库。Ubuntu 22.04作为长期支持版本提供了稳定的基础环境但仍需手动配置一些关键组件。首先更新系统并安装基础开发工具sudo apt update sudo apt upgrade -y sudo apt install -y build-essential gfortran m4 cmake gitFLEXPART-WRF的核心依赖包括netCDF和GRIB API库它们负责处理气象数据输入输出。安装时需特别注意版本兼容性依赖库推荐版本安装方式netCDF-C4.8.1源码编译netCDF-Fortran4.5.4源码编译GRIB API1.28.0源码编译Jasper2.0.33系统包安装编译netCDF库时常见的路径问题可通过以下步骤避免wget https://downloads.unidata.ucar.edu/netcdf-c/4.8.1/netcdf-c-4.8.1.tar.gz tar -xzf netcdf-c-4.8.1.tar.gz cd netcdf-c-4.8.1 ./configure --prefix/usr/local --disable-dap make -j4 sudo make install提示安装完成后务必设置环境变量将/usr/local/lib加入LD_LIBRARY_PATHexport LD_LIBRARY_PATH/usr/local/lib:$LD_LIBRARY_PATH echo export LD_LIBRARY_PATH/usr/local/lib:$LD_LIBRARY_PATH ~/.bashrc2. FLEXPART基础版本编译完成依赖库安装后我们先编译基础版FLEXPART这有助于验证环境配置是否正确。从官方GitHub仓库获取最新源码git clone https://github.com/Flexpart/flexpart.git cd flexpartFLEXPART的编译过程需要配置makefile.inc文件这是最容易出错的环节。以下是关键参数设置示例# 编译器设置 F90 gfortran F77 gfortran # netCDF库路径 NETCDF /usr/local # 编译选项 FFLAGS -O3 -fconvertbig-endian -fPIC -I$(NETCDF)/include LDFLAGS -L$(NETCDF)/lib -lnetcdff -lnetcdf常见编译错误及解决方案netCDF库未找到检查NETCDF路径是否正确确认libnetcdff.so文件存在endianness错误添加-fconvertbig-endian编译选项内存不足使用-O2替代-O3优化级别编译成功后使用测试案例验证cd examples/forward ./flexpart应生成trajectories.txt输出文件包含模拟的粒子轨迹数据。3. FLEXPART-WRF耦合版本编译FLEXPART-WRF版本增加了与WRF气象模型的耦合能力编译过程更为复杂。首先获取专用代码库git clone https://github.com/Flexpart/flexpart-wrf.git cd flexpart-wrf关键的配置差异在于需要指定WRF库路径。如果你已经安装WRF模型需要确认以下文件存在libwrfio_nf.amodule_driver_constants.modmodule_model_constants.mod修改makefile.inc添加WRF相关配置# WRF库路径 WRF_DIR /path/to/your/WRF/library # 额外编译选项 FFLAGS -I$(WRF_DIR)/external/io_netcdf -I$(WRF_DIR)/main LIBS -L$(WRF_DIR)/main -lwrfio_nf编译过程中可能遇到的特殊问题WRF版本不匹配建议使用WRF V4.2及以上版本符号冲突在FFLAGS中添加-fno-range-check选项MPI兼容性如需并行计算确保MPI环境一致注意FLEXPART-WRF需要与编译WRF时使用的netCDF库版本完全一致否则会出现运行时错误。4. 实战案例模拟大气污染物扩散完成编译后我们来运行一个真实案例验证系统。以模拟某工厂排放的SO2扩散为例需要准备以下输入文件WRF气象数据通常为wrfout_d01_*格式文件排放源文件定义污染物释放位置、速率等参数路径配置文件pathnames指定输入输出路径典型的pathnames文件内容示例/path/to/wrfout_d01_* ./output/ ./options/RELEASES ./options/COMMAND关键参数设置options/COMMAND文件COMMAND ldirect 1, ! 前向模拟 ibdate 20230501, ! 开始日期 ibtime 000000, ! 开始时间 iedate 20230502, ! 结束日期 ietime 000000, ! 结束时间 loutstep 3600, ! 输出间隔(秒) loutsample 900, ! 采样间隔(秒) /运行模拟并可视化结果./flexpart-wrf ncview output/grid_time_20230501.nc5. 性能优化与高级技巧对于大规模模拟以下技巧可以显著提升运行效率并行计算配置mpif90 -O3 -fconvertbig-endian -fPIC -c *.f90 mpif90 -o flexpart-wrf *.o -lnetcdff -lnetcdf -lwrfio_nf内存管理参数参数说明推荐值 (百万粒子)numpart总粒子数10-100maxpart单处理器粒子数上限1-10mp_physics微物理方案3 (WRF默认)常见问题快速诊断运行时崩溃检查ulimit -s unlimited是否设置结果异常确认WRF数据时间范围覆盖模拟期性能瓶颈使用top查看内存使用可能需要减少numpart对于长期运行的模拟任务建议使用tmux或screen保持会话tmux new -s flexpart ./flexpart-wrf # CtrlB D 分离会话 tmux attach -t flexpart6. 结果分析与后处理FLEXPART-WRF生成的netCDF格式结果可通过多种工具分析。Python生态提供了强大支持import xarray as xr import matplotlib.pyplot as plt ds xr.open_dataset(grid_time_20230501.nc) ds[spec001_mr].isel(time0).plot.contourf( xlon, ylat, levels20, cmapviridis) plt.title(SO2浓度分布) plt.savefig(so2_distribution.png)对于轨迹分析可使用官方提供的traj2nc工具转换文本轨迹./traj2nc trajectories.txt output_traj.nc高级后处理技巧包括使用cdo工具进行时间平均计算结合basemap绘制地理投影图用PySPLIT进行轨迹聚类分析提示定期清理旧的输出文件大型模拟可能产生数百GB数据。建议建立自动化归档脚本。