尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

WRF-Chem大气污染模拟全流程实战:从环境配置到排放源处理

WRF-Chem大气污染模拟全流程实战:从环境配置到排放源处理 1. 先搞清楚 WRF-Chem 到底能帮你解决什么实际问题如果你正在做大气污染模拟、空气质量预报或者想研究污染物在大气中的传输和转化过程那 WRF-Chem 这个工具就是你绕不开的。它不是一个简单的模型而是一个将气象预报模式WRF和大气化学模块Chem在线耦合起来的复杂系统。简单说它能同时算出风、温、湿、压这些气象场以及臭氧、PM2.5、二氧化硫这些污染物的浓度并且两者是实时相互影响的——风速会影响污染物扩散气溶胶反过来也能影响太阳辐射和云的形成。很多人一上来就急着去编译、跑案例结果卡在环境配置或者某个莫名其妙的错误上好几天。我更建议你先想清楚你的核心需求是做一个城市尺度的重污染过程模拟还是一个区域乃至全球的长期气候-化学相互作用研究这直接决定了你后续的模拟区域设置、物理化学方案选择、排放清单的精细程度甚至硬件资源的投入。WRF-Chem 的学习和应用是一个典型的“全流程”工程从理论理解、Linux环境准备、模式编译、排放源数据处理到最终的模式运行和后处理分析环环相扣。任何一个环节的疏漏都可能导致最终结果不可用。这篇文章不会只给你一堆命令而是会按照一个实际项目落地的顺序拆解每个环节的关键决策点和避坑指南。2. 动手前的准备理解核心流程与搭建 Linux 环境在打开终端之前你需要对 WRF-Chem 的完整工作流有个全景图。它大致分为五个阶段这也是你学习路径上的五个关卡前期数据处理准备模拟所需的地形、土地利用、海温等静态数据以及气象初始场和边界条件通常来自全球模式如 FNL、GFS 或 ERA5。排放源处理将各类人为源工业、交通、居民生活等和自然源生物源、扬尘等的排放清单处理成 WRF-Chem 能够识别的、具有时空分布和化学物种映射的输入文件。这是最复杂、最容易出错的一环。WRF-Chem 模式编译与运行在 Linux 系统上编译出可执行程序并编写 namelist 配置文件驱动模式进行积分计算。后处理与可视化将模式输出的 NetCDF 格式文件处理成便于分析的图表和数据。结果分析与验证将模拟结果与观测数据如地面站点、卫星遥感进行对比评估模拟性能。这个流程决定了你的计算环境必须是 Linux。Windows 用户可以通过 WSL适用于 Linux 的 Windows 子系统或者虚拟机如 VirtualBox 安装 CentOS、Ubuntu 或 Rocky Linux来获得一个 Linux 环境。对于生产级计算通常是在高性能计算集群HPC上操作。环境搭建的核心是编译器、库依赖和权限。不要一上来就尝试编译 WRF-Chem 本体。我建议按以下顺序像盖房子一样打好地基2.1 选择 Linux 发行版与获取权限对于新手Ubuntu或CentOS/Rocky Linux是较好的选择社区资源丰富。如果你在学校的超算中心系统可能是 Red Hat Enterprise Linux (RHEL) 的变种操作类似。首先通过ssh连接到你的 Linux 服务器或虚拟机。确保你拥有足够的磁盘空间建议至少 50GB 空闲空间用于安装和测试和权限。通常你需要能使用sudo命令来安装系统库或者请系统管理员提前安装好必要的依赖。检查系统基本信息# 查看系统版本 cat /etc/os-release # 查看磁盘空间 df -h # 查看内存 free -h2.2 安装必要的编译器和基础库WRF-Chem 通常需要 Fortran 和 C 编译器以及一系列科学计算库。以下是在 Ubuntu/Debian 和 CentOS/Rocky Linux 下的安装命令示例。请务必一次性安装成功避免后续链接库时出现版本冲突。对于 Ubuntu/Debian 系统sudo apt-get update sudo apt-get install -y gfortran gcc g cpp make m4 git \ libcurl4-openssl-dev curl wget \ libssl-dev libxml2-dev libudunits2-dev \ libjpeg-dev libpng-dev libgif-dev \ libnetcdf-dev netcdf-bin libhdf5-dev \ libopenmpi-dev openmpi-bin对于 CentOS/Rocky Linux/RHEL 系统sudo yum groupinstall -y Development Tools sudo yum install -y gcc-gfortran gcc-c \ curl wget git m4 \ openssl-devel libxml2-devel udunits2-devel \ libjpeg-turbo-devel libpng-devel giflib-devel \ netcdf-fortran-devel netcdf-devel hdf5-devel \ openmpi-devel关键点解释gfortran/gccFortran 和 C 编译器WRF 核心代码是 Fortran 写的。make/m4构建和编译工具。libnetcdf-dev / netcdf-develNetCDF 库WRF 输入输出都是这种格式必须安装。libhdf5-dev / hdf5-develHDF5 库某些 I/O 选项和预处理工具需要。libopenmpi-dev / openmpi-develMPI 并行库如果你想用多核/多节点并行计算这是必须的。即使是单机测试也建议安装编译时选择dmpar分布式内存并行选项通常兼容性更好。其他如libcurl,libjpeg等是 WRF 预处理系统WPS绘图或下载数据可能需要的。安装后验证编译器gfortran --version gcc --version mpif90 --version # 检查 MPI 包装的编译器2.3 设置环境变量这是至关重要的一步告诉系统去哪里找这些库的头文件和链接库。通常需要设置NETCDF,HDF5,PHDF5,JASPER,ZLIB等环境变量。创建一个设置环境变量的脚本例如setenv_wrfchem.sh#!/bin/bash # 假设你的依赖库都安装在标准路径 /usr 下 # 如果不确定可以用 find /usr -name netcdf.inc 或 nc-config --prefix 查找 NetCDF 路径 export NETCDF/usr export NETCDF_classic1 # 某些版本需要 export HDF5/usr export PHDF5/usr export JASPERLIB/usr/lib/x86_64-linux-gnu # 根据实际路径调整 export JASPERINC/usr/include/jasper # 根据实际路径调整 export WRF_CHEM1 # 告诉 WRF 编译系统我们要编译化学版本 export WRF_KPP1 # 启用 Kinetic PreProcessor (KPP) 化学机制 # 将 MPI 库路径加入动态链接库搜索路径 export LD_LIBRARY_PATH${LD_LIBRARY_PATH}:/usr/lib/openmpi/lib # 可选设置一个中央工作目录 export WRF_PROJECT_DIR$HOME/wrfchem_project mkdir -p $WRF_PROJECT_DIR每次开始工作前执行source setenv_wrfchem.sh来加载这些变量。你可以把这条命令加到你的~/.bashrc文件末尾实现登录自动加载。3. 模式编译从源代码到可执行文件环境准备好后就可以获取 WRF-Chem 源代码并编译了。官方源代码托管在 GitHub 上。我建议在一个干净、路径中无空格的目录下进行。3.1 获取源代码cd $WRF_PROJECT_DIR git clone https://github.com/wrf-model/WRF.git git clone https://github.com/wrf-model/WPS.git # WRF-Chem 的代码包含在 WRF 主分支中但需要额外下载化学机制等数据 cd WRF # 切换到某个稳定版本分支例如 version 4.5请查阅官网获取最新稳定版 git checkout release-v4.53.2 配置与编译 WRF进入 WRF 目录运行配置脚本cd WRF ./configure这时会出现一个交互式菜单让你选择编译选项。对于新手我的建议是选择你对应的编译器组合例如gfortran/gcc。并行类型选择34. (dmpar)即分布式内存并行使用 MPI。即使你只有一台电脑这个选项也允许你使用多个CPU核心来加速。其他选项通常按回车选择默认。配置完成后会生成一个configure.wrf文件。接下来是编译。WRF 的编译分为两步compile和real。第一步编译核心模式./compile em_real 21 | tee compile.log这个命令会开始漫长的编译过程可能从半小时到数小时并将所有输出信息同时显示在屏幕和保存到compile.log文件中。tee命令非常有用方便你事后排查错误。如何判断编译成功编译结束后去WRF/run目录下查看是否生成了关键的可执行文件ls -lh run/*.exe你应该能看到real.exe,wrf.exe,ndown.exe,tc.exe等。特别是real.exe用于处理真实数据初始化和wrf.exe主模式积分程序必须存在且文件大小不为零。如果编译失败怎么办99% 的编译失败都与环境变量设置错误或库依赖缺失/版本不匹配有关。首先看日志打开compile.log搜索Error,error,undefined reference,cannot find等关键词。错误信息通常会明确指出是哪个文件、哪个函数出了问题。检查环境变量用echo $NETCDF等命令确认路径正确。确保 NetCDF 库是 Fortran 接口的即安装了netcdf-fortran。检查库版本有时系统自带的库版本太新或太旧。可以尝试从源码编译安装相同版本的 NetCDF、HDF5 等库并精确指定其路径。清理重试在重试前运行./clean -a彻底清理之前的编译中间文件。3.3 编译 WPS (WRF Preprocessing System)WPS 用于将全球气象数据插值到你的模拟区域网格上并生成地形、土地利用等静态文件。cd ../WPS ./configure同样选择与 WRF 一致的编译器选项例如 Linux x86_64, gfortran, dmpar。然后编译./compile 21 | tee wps_compile.log成功后在WPS目录下应看到geogrid.exe,ungrib.exe,metgrid.exe三个关键可执行文件。4. 排放源制作化学模拟的“燃料”准备这是 WRF-Chem 区别于纯气象 WRF 的核心也是最繁琐的一步。排放源文件的质量直接决定了化学模拟的可靠性。你需要将原始的排放清单例如 MEIC、EDGAR、MIX 等处理成 WRF-Chem 能读取的格式。4.1 理解排放预处理系统WRF-Chem 社区提供了多个排放预处理工具如PREP-CHEM-SRC,ANTHRO_EMISS,MOZBC等用于处理不同来源和类型的排放数据。你需要根据你选择的化学机制在 WRF namelist 中指定如RADM2,RACM,MOZART等来选择对应的处理工具和排放清单。一个典型的处理流程是准备原始清单获取按行业、燃料、物种分类的网格化或省/市级别的排放数据。时间分解将年排放量分解到月、周、日、小时尺度例如交通源早晚高峰排放高。垂直分配将地面排放分配到不同的垂直高度层特别是烟囱排放。化学物种映射将清单中的污染物如 NOx, SO2, NMVOC映射到你所选化学机制中的具体反应物种。格式转换最终生成 NetCDF 文件其网格必须与你的 WRF 模拟域完全一致。4.2 使用 PREP-CHEM-SRC 工具示例这里以相对常用的 PREP-CHEM-SRC 为例概述步骤。请注意具体操作强烈依赖于你手头的数据格式。下载工具通常包含在 WRF-Chem 的贡献代码中或需单独下载。编译工具它也有自己的Makefile需要根据你的系统修改编译器、库路径等。编辑配置文件工具通常有一个namelist或control文件你需要指定start_date,end_date模拟时间段。domain模拟区域的中心点、网格数、分辨率必须与后续 WPS 的namelist.wps完全一致。emiss_input原始排放数据文件的路径和格式。chem_opt对应的 WRF-Chem 化学机制编号。output_file输出的 NetCDF 文件路径。运行工具执行编译好的可执行程序生成wrfchemi_*人为源和wrffirechemi_*生物质燃烧源等文件。关键避坑点网格一致性排放文件的地理投影、网格点数量、网格距必须与 WRF 模拟域100% 匹配。一个像素的偏差都会导致运行时读入失败。务必用ncdump -h检查输出文件的维度信息并与 WRF 的namelist.input对比。时间戳排放文件的时间戳必须覆盖整个模拟时段且频率通常是每小时与你在 namelist 中设置的auxinput5_interval等参数匹配。单位换算原始清单单位如吨/年需要转换成 WRF-Chem 期望的单位如 mol/km²/hour 或 μg/m²/s。仔细查阅你所选化学机制和预处理工具的文档。5. 全流程串联运行与结果诊断当所有组件WPS可执行文件、WRF-Chem可执行文件、气象输入数据、排放源数据都准备好后就可以串联运行了。5.1 运行流程与 Namelist 配置标准运行顺序是WPS - real.exe - wrf.exe。运行 WPS配置namelist.wps定义模拟域经纬度范围、网格数、分辨率、地图投影、模拟起止时间。./geogrid.exe生成静态地理数据文件geo_em.d0*.nc。./ungrib.exe解压全球气象数据如 GFS grib2 文件生成中间文件。./metgrid.exe将气象数据插值到geogrid定义的网格上生成met_em.*.nc文件。运行 WRF-Chemreal.exe将met_em.*.nc文件链接或复制到WRF/run目录。将制作好的排放源文件wrfchemi_*也复制到WRF/run目录。关键步骤配置namelist.input。这是 WRF-Chem 的大脑你需要设置time_control模拟起止时间、输入输出频率。时间必须与 WPS 和排放文件严格一致。domains网格设置必须与namelist.wps和排放文件完全一致。physics选择微物理、积云、边界层、陆面等物理过程方案。chemistry化学核心设置。包括chem_opt化学机制选择、emiss_opt排放选项需与你制作的排放源类型匹配、io_style_emissions排放输入方式等。这里一个参数填错化学模块就可能不工作。运行./real.exe。该程序读取met_em和排放文件生成 WRF 所需的初始条件和边界条件文件wrfinput_d01和wrfbdy_d01。检查rsl.error.0000日志文件确保没有ERROR。运行 WRF-Chemwrf.exe直接运行mpirun -np 核心数 ./wrf.exe。例如用 4 个核心mpirun -np 4 ./wrf.exe。运行过程中实时查看日志tail -f rsl.error.0000。正常情况会不断输出积分时间步信息。运行结束后会生成一系列wrfout_d01_*文件这就是你的模拟结果。5.2 结果诊断与常见问题排查运行失败或结果异常时按以下顺序排查检查日志文件 (rsl.error.0000,rsl.out.0000)寻找ERROR或FATAL这是最直接的错误信息。常见的错误包括找不到输入文件、时间不匹配、数组维度不一致、NetCDF 变量读取失败。关注real.exe阶段的警告有些警告如“No chemical species found in emission files”可能意味着排放源文件没有被正确读取化学模拟实际上没有进行。检查输入文件用ncdump -h命令对比wrfinput_d01、排放文件、namelist.input中的网格定义west_east,south_north,dx,dy、地图投影参数是否完全一致。检查文件时间戳是否覆盖模拟时段。检查资源是否耗尽模式运行中卡住或被杀掉可能是内存不足。使用top或htop命令监控内存使用。对于大区域、高分辨率模拟需要预估内存需求。磁盘空间不足也会导致运行失败检查输出目录。化学模块特定检查如果气象场正常但污染物浓度全为零或异常首先确认namelist.input中chem_opt和emiss_opt设置正确且匹配。排放源文件被正确链接到run目录并且在namelist.input中通过auxinput5_inname等参数指定了正确路径。运行real.exe时日志中显示了成功读取排放文件并处理化学物种的信息。5.3 后处理与可视化得到wrfout文件后你需要用工具提取和分析数据。常用的有NCL (NCAR Command Language)功能强大WRF 官方推荐但学习曲线陡峭且已停止维护。Python (xarray, cartopy, wrf-python)当前最主流和推荐的方式。wrf-python库提供了大量函数来轻松提取 WRF 变量、插值到指定高度、计算诊断量等。ARWpost Grads/NCLWRF 自带的ARWpost程序可以将wrfout转换为 Grads 或 Vis5d 格式再用相应软件绘图。一个简单的 Python 示例使用wrf-python和cartopy绘制地表 PM2.5 浓度import xarray as xr import wrf import matplotlib.pyplot as plt import cartopy.crs as ccrs import cartopy.feature as cfeature # 打开文件 ncfile xr.open_dataset(“wrfout_d01_2023-01-01_00:00:00“) # 提取 PM2.5 变量 (假设化学机制中包含变量名可能为 ‘PM2_5_DRY’) pm25 wrf.getvar(ncfile, “PM2_5_DRY“, timeidxwrf.ALL_TIMES) # 绘制第一个时次 fig plt.figure(figsize(12,8)) ax plt.axes(projectionccrs.PlateCarree()) pm25_plot ax.pcolormesh(pm25.XLONG, pm25.XLAT, pm25[0,:,:], transformccrs.PlateCarree(), cmap‘viridis‘) ax.coastlines(‘50m‘, linewidth0.8) ax.add_feature(cfeature.BORDERS, linewidth0.8) plt.colorbar(pm25_plot, axax, label‘PM2.5 (μg/m³)‘) plt.title(‘Surface PM2.5 Concentration‘) plt.show()6. 从学习到生产经验总结与进阶建议走通一次全流程只是开始。要把 WRF-Chem 真正用于科研或业务还需要注意以下几点关于硬件资源WRF-Chem 是资源消耗大户。分辨率越高、化学机制越复杂、模拟时间越长对 CPU、内存和存储的需求就呈指数级增长。在个人电脑上通常只能进行小区域、短时间、低分辨率的测试。正式生产任务务必在高性能计算集群上运行并合理申请计算资源核数、内存、作业时长。关于参数化方案选择物理参数化方案微物理、积云、边界层等和化学机制chem_opt没有“最好”的只有“最适合”你研究区域和科学问题的。需要阅读大量文献进行敏感性测试来确定。新手可以从模式自带的测试案例配置开始。关于排放清单的不确定性排放源是模拟结果最大的不确定性来源之一。公开的全球清单如 EDGAR分辨率较粗可能不适用于城市尺度研究。有条件的话应使用更本地化、更高分辨率的清单如中国的 MEIC。同时要考虑排放的时间变化和化学物种映射的准确性。关于模式调试与验证不要只看模式能不能跑起来更要看结果是否合理。一定要将模拟结果与当地气象站、空气质量监测站的数据进行对比验证评估温度、湿度、风向风速以及主要污染物浓度的模拟效果。常用的统计指标包括均方根误差RMSE、平均偏差MB、相关系数R等。关于工作流自动化一次完整的模拟涉及数十个步骤。建议编写 Shell 脚本或 Python 脚本来自动化整个流程包括数据下载、预处理、模式运行、后处理和绘图。这不仅能提高效率也保证了实验的可重复性。最后WRF-Chem 社区非常活跃邮件列表WRF-Chem Users‘ Page和 GitHub 仓库是解决问题的最佳途径。遇到错误时仔细阅读错误信息将其关键部分复制到搜索引擎或邮件列表中查找你很可能发现别人已经遇到过并解决了同样的问题。保持耐心从最小案例做起逐步扩展复杂性是掌握这个强大工具的唯一路径。
返回列表