WRF/Chem模式从零搭建指南:环境配置、编译与排放源处理全流程
2026/8/29 13:46:40 网站建设 项目流程

区域气象-大气化学在线耦合模式(WRF/Chem)是大气环境模拟领域一个功能强大的工具,它将气象过程与大气化学过程在线、双向地耦合在一起,能够更真实地模拟气溶胶、污染物与气象要素(如云、降水、辐射)之间的复杂相互作用。对于从事空气质量预报、污染成因分析、气候变化评估以及环境政策制定的研究者和工程师而言,掌握WRF/Chem从零到一的完整搭建和应用流程,是一项极具价值但也充满挑战的核心技能。这个过程不仅涉及对大气物理化学理论的深刻理解,更是一场与Linux系统、编译器、依赖库和复杂配置文件的“硬核”较量。

许多初学者在尝试构建自己的WRF/Chem模拟环境时,常常止步于环境依赖冲突、编译失败或排放源数据格式错误。本文旨在为大气环境领域的实践者提供一份详尽、可复现的技术指南。我们将从模式的基本原理和工作流程讲起,逐步深入到Linux环境的准备、所有必要依赖库的编译安装、WRF和Chem模式的联合编译、人为与生物排放源清单的制备与处理,最终完成一个可运行的案例配置。文章将重点解释每一步操作背后的目的和原理,并提供具体的命令、配置示例和排错方法,力求让你在本地或服务器上成功构建并运行起自己的第一个WRF/Chem模拟。

1. 理解WRF/Chem:不只是气象与化学的简单叠加

在深入命令行之前,必须厘清WRF/Chem的核心设计思想。这决定了后续配置和编译时的关键选项选择。

1.1 什么是在线耦合?为什么它重要?

传统的气象与空气质量模拟常采用“离线”模式:先运行WRF等气象模式,输出气象场(如风、温、湿、压),再将这些结果作为静态输入,驱动另一个独立的化学传输模型(如CMAQ)。这种方式计算效率高,但存在根本缺陷——它假设化学物质的存在不影响气象过程。然而,现实世界中,气溶胶(如PM2.5)可以通过吸收和散射太阳辐射影响地表温度和大气稳定度(直接效应),还能作为云凝结核改变云的特性和降水(间接效应)。这些反馈机制在离线模式下被完全忽略。

WRF/Chem实现了“在线耦合”。这意味着气象模块和化学模块在同一个时间步长内交替执行,共享同一套网格和物理参数化方案。化学模块计算出的气溶胶浓度会实时反馈给辐射和云微物理方案,从而影响下一个时间步的气象场。这种双向互动使得模拟结果,特别是在重污染与复杂天气并存的情景下,理论上更加真实。

1.2 WRF/Chem的核心工作流程与组件

一个完整的WRF/Chem模拟可以分解为几个前后衔接的组件,理解这个数据流对后续排错至关重要。

  1. 前处理系统 (WPS):负责将全球再分析资料(如GFS、ECMWF)插值到用户定义的研究区域网格上。它为WRF主模式准备初始条件和边界条件。对于化学模拟,WPS通常只处理气象场。
  2. WRF主模式 + 化学模块:这是核心计算引擎。编译时,需要同时选择气象和化学方案的组合。化学模块内嵌了多种气相化学机制(如RADM2、RACM、MOZART)和气溶胶模块(如MADE/SORGAM、MOSAIC)。你需要根据研究目标和计算资源进行选择。
  3. 排放源处理系统:这是化学模拟独有的、也是最易出错的环节。它负责将静态的排放清单(如EDGAR、MEIC)在时空上分配到WRF网格上,并按照化学机制的要求,将排放物种映射到对应的模型物种。主要工具是PREP-CHEM-SRCANTHRO_EMISSMOZBC等。
  4. 化学初始/边界条件制备:类似于气象场,化学场也需要初始浓度和从模式边界输入的浓度。通常使用全球化学传输模型(如MOZART、CAM-chem)的输出结果,通过工具(如moZBCwrfbdy_from_gfs)进行插值和转换。
  5. 后处理与可视化:使用NCL、Python(如wrf-pythoncartopy)或RIP4等工具对输出的NetCDF文件进行分析和绘图。

在实践层面,成功运行WRF/Chem意味着要让这五个部分无缝衔接,任何一个环节的数据格式或维度不匹配都会导致运行失败。

2. 构建基石:Linux系统环境与依赖库的精密配置

WRF/Chem及其依赖的绝大多数工具都是为类Unix系统设计的,一个纯净、可控的Linux环境是成功的先决条件。我们将在/opt/Build_WRF目录下构建所有依赖,以保持系统整洁。

2.1 操作系统选择与基础准备

推荐使用CentOS 7/8、Rocky Linux 8/9或Ubuntu 20.04/22.04 LTS等主流服务器发行版。避免使用桌面版过于花哨的图形环境。确保系统有至少50GB的可用磁盘空间和足够的内存(建议8GB以上)。

首先,更新系统并安装开发工具链和基础库:

# 对于基于RHEL的系统(如CentOS, Rocky Linux) sudo yum groupinstall -y "Development Tools" sudo yum install -y wget git tcsh flex curl gcc gcc-c++ gcc-gfortran m4 make perl ncurses-devel libjpeg-turbo-devel libpng-devel zlib-devel openssl-devel # 对于基于Debian的系统(如Ubuntu) sudo apt update sudo apt install -y build-essential sudo apt install -y wget git tcsh flex curl gcc gfortran m4 make perl libncurses-dev libjpeg-dev libpng-dev zlib1g-dev libssl-dev

创建一个统一的构建目录并设置环境变量,这是管理复杂依赖关系的关键:

export DIR=/opt/Build_WRF sudo mkdir -p $DIR sudo chown $(whoami):$(whoami) $DIR cd $DIR

将环境变量定义写入你的shell配置文件(如~/.bashrc),以便每次登录自动生效:

echo "export DIR=/opt/Build_WRF" >> ~/.bashrc echo "export PATH=\$DIR/bin:\$PATH" >> ~/.bashrc echo "export LD_LIBRARY_PATH=\$DIR/lib:\$LD_LIBRARY_PATH" >> ~/.bashrc source ~/.bashrc

2.2 编译器的选择与验证

WRF/Chem对Fortran和C编译器有严格要求。推荐使用GNU编译器集合(GCC)。必须验证gfortran的存在:

which gfortran gfortran --version

如果未安装,请通过系统包管理器安装gfortran。确保GCC版本在4.5以上,但避免使用过于前沿的版本(如GCC 12+),以免遇到未解决的兼容性问题。推荐使用GCC 7/8/9系列。

2.3 逐一下载并编译关键依赖库

以下库是WRF、WPS和化学预处理工具所必需的。我们将全部安装在$DIR下。编译时采用统一的$DIR作为安装前缀,并启用位置无关代码(-fPIC),这对后续链接至关重要。

  • NetCDF库:用于读写模式输入输出数据。

    cd $DIR wget https://downloads.unidata.ucar.edu/netcdf-c/4.9.2/netcdf-c-4.9.2.tar.gz wget https://downloads.unidata.ucar.edu/netcdf-fortran/4.6.1/netcdf-fortran-4.6.1.tar.gz tar -xzf netcdf-c-4.9.2.tar.gz tar -xzf netcdf-fortran-4.6.1.tar.gz # 编译NetCDF-C cd netcdf-c-4.9.2 ./configure --prefix=$DIR --disable-dap make -j$(nproc) make install export PATH=$DIR/bin:$PATH export LD_LIBRARY_PATH=$DIR/lib:$LD_LIBRARY_PATH # 编译NetCDF-Fortran cd ../netcdf-fortran-4.6.1 CPPFLAGS=-I$DIR/include LDFLAGS=-L$DIR/lib ./configure --prefix=$DIR make -j$(nproc) make install
  • MPICH:用于并行计算(如果你计划进行多核/多节点模拟)。

    cd $DIR 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=$DIR make -j$(nproc) make install export PATH=$DIR/bin:$PATH export LD_LIBRARY_PATH=$DIR/lib:$LD_LIBRARY_PATH

    编译后,运行which mpif90mpif90 -v确认MPI包装器已正确指向你的gfortran。

  • Jasper, LibPNG, Zlib:用于WPS处理GRIB2数据。

    cd $DIR wget https://www.ece.uvic.ca/~frodo/jasper/software/jasper-2.0.14.tar.gz wget http://www.zlib.net/zlib-1.2.13.tar.gz wget http://download.sourceforge.net/libpng/libpng-1.6.37.tar.gz # 编译顺序:Zlib -> LibPNG -> Jasper tar -xzf zlib-1.2.13.tar.gz && cd zlib-1.2.13 && ./configure --prefix=$DIR && make install && cd .. tar -xzf libpng-1.6.37.tar.gz && cd libpng-1.6.37 && CPPFLAGS=-I$DIR/include LDFLAGS=-L$DIR/lib ./configure --prefix=$DIR && make install && cd .. tar -xzf jasper-2.0.14.tar.gz && cd jasper-2.0.14 && mkdir build && cd build && cmake .. -DCMAKE_INSTALL_PREFIX=$DIR && make install && cd ../..
  • HDF5:某些化学数据格式可能需要。

    cd $DIR 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 ./configure --prefix=$DIR --enable-fortran --enable-hl make -j$(nproc) make install

完成所有库的安装后,至关重要的一步是验证环境变量。创建一个测试脚本test_env.sh

#!/bin/bash echo "=== 环境变量检查 ===" echo "NETCDF: $(which nc-config)" echo "MPI: $(which mpif90)" echo "PATH: $PATH" echo "LD_LIBRARY_PATH: $LD_LIBRARY_PATH" echo -e "\n=== 库链接测试 ===" cd $DIR cat > test_netcdf.f90 << EOF program test use netcdf implicit none integer :: ncid, varid, dimid, ierr ierr = nf90_create('test.nc', nf90_clobber, ncid) ierr = nf90_def_dim(ncid, 'x', 10, dimid) ierr = nf90_def_var(ncid, 'data', nf90_float, [dimid], varid) ierr = nf90_enddef(ncid) ierr = nf90_close(ncid) print *, 'NetCDF Fortran库测试通过。' end program test EOF mpif90 -I$DIR/include -L$DIR/lib -lnetcdff -lnetcdf -lhdf5_hl -lhdf5 -lz -lm test_netcdf.f90 -o test_netcdf ./test_netcdf

运行bash test_env.sh。如果成功创建test.nc文件并输出提示信息,说明依赖库配置基本正确。

3. 核心编译:WRF与WPS的联合构建与化学选项激活

环境就绪后,进入最关键的编译阶段。WRF和WPS需要分开下载和编译,但必须确保它们使用相同的底层库和编译器设置。

3.1 下载源代码与配置环境

从官方仓库或稳定发布版本获取代码。注意版本兼容性,WRF和Chem的版本需要匹配。

cd $DIR # 下载WRF(包含Chem) wget https://github.com/wrf-model/WRF/archive/refs/tags/v4.5.tar.gz -O WRF-4.5.tar.gz tar -xzf WRF-4.5.tar.gz cd WRF-4.5 # 设置编译环境,关键一步 export NETCDF=$DIR export HDF5=$DIR export PHDF5=$DIR # 并行HDF5,如果编译了的话 export JASPERLIB=$DIR/lib export JASPERINC=$DIR/include export WRF_CHEM=1 # 激活化学模块! export WRF_KPP=1 # 激活KPP化学积分器 export YACC="/usr/bin/yacc -d" # 或 `bison -d`

3.2 配置与编译WRF主模式

运行配置脚本,根据你的系统进行选择。对于大多数Linux系统,选择GNU编译器(gcc/gfortran)和基本嵌套选项。

./configure

在交互界面中,通常会选择:

  1. 3435(代表 GNU gcc/gfortran 串行或并行编译)。
  2. 选择嵌套级别(如1表示基本嵌套)。
  3. 编译类型选择1(em_real, 真实案例模拟)。

配置完成后,会生成一个configure.wrf文件。在编译前,强烈建议检查此文件

  • 确保SFCSCC等变量指向正确的gfortrangcc
  • 确保NETCDFPATH指向$DIR
  • 搜索CHEM相关标志,确认WRF_CHEMWRF_KPP已被定义。

开始编译。这是一个耗时过程,使用-j选项利用多核加速。

./compile em_real 2>&1 | tee compile.log

编译成功后,你会在main目录下找到wrf.exe(真实案例可执行文件)和real.exe(初始化程序)。使用以下命令验证关键模块是否生成:

ls -l main/*.exe ls -l chem/*.exe 2>/dev/null # 检查化学相关模块

务必检查compile.log文件末尾是否有“Executables successfully built”或类似信息,并且没有致命的Error提示。

3.3 配置与编译WPS

WPS为WRF准备初始和边界条件。它需要之前编译的Jasper等库。

cd $DIR wget https://github.com/wrf-model/WPS/archive/refs/tags/v4.5.tar.gz -O WPS-4.5.tar.gz tar -xzf WPS-4.5.tar.gz cd WPS-4.5 # 设置WPS所需的环境变量 export JASPERLIB=$DIR/lib export JASPERINC=$DIR/include export NETCDF=$DIR export WRF_DIR=$DIR/WRF-4.5 # 指向刚编译好的WRF目录 ./configure

在界面中选择与WRF编译时相同的编译器选项(如3对应 GNU serial)。配置后会生成configure.wps

编译WPS:

./compile 2>&1 | tee wps_compile.log

成功编译后,会生成三个核心可执行文件:

  • geogrid.exe: 定义模拟区域并处理静态地理数据。
  • ungrib.exe: 从GRIB格式的全球分析资料中提取气象变量。
  • metgrid.exe: 将气象变量水平插值到geogrid定义的网格上。

使用ls -l *.exe确认它们存在。

4. 化学模拟的“燃料”:排放源清单的制作与处理

对于WRF/Chem,仅有气象初始场是不够的,还必须提供化学物种的排放源。这是化学模拟特有的、最容易出错的步骤。

4.1 排放源类型与数据获取

排放源主要分为两类:

  1. 人为排放源:来自工业、交通、居民生活等。常用清单包括中国的MEIC、清华的MIX,或全球的EDGAR、CEDS。
  2. 生物源与自然源:如植被挥发的VOCs(MEGAN模型)、海盐、沙尘等。

你需要获取这些清单数据,它们通常是NetCDF或文本格式,包含不同物种(如SO2, NOx, CO, VOCs, PM2.5)的网格化或国家/省级排放强度。

4.2 使用PREP-CHEM-SRC工具处理排放源

PREP-CHEM-SRC是一个广泛使用的工具,能将多种排放清单转换为WRF-Chem可读的输入格式。你需要从WRF-Chem官网或相关研究组获取此工具。

cd $DIR # 假设已下载prep_chem_sources.tar.gz tar -xzf prep_chem_sources.tar.gz cd prep_chem_sources

编辑其配置文件prep_chem_sources.inp。这是一个关键文件,需要指定:

  • 模拟区域的中心点、网格数、分辨率(必须与WPS中namelist.wps的设置完全一致)。
  • 输入排放清单的路径和格式。
  • 输出文件的路径和前缀。
  • 要处理的化学物种映射关系。

一个简化的配置片段示例如下:

&control ! 区域设置 (必须与WPS一致) start_year = 2023 start_month = 07 start_day = 01 start_hour = 00 end_year = 2023 end_month = 07 end_day = 02 end_hour = 00 ! domain_name = ‘d01’ ! ! 网格设置 nx = 100 ny = 80 nz = 28 dx = 27000 dy = 27000 ! ! 排放清单选择 emission_type = ‘EDGAR’ ! 或 ‘MIX’等 ! ! 输入输出路径 dir_emissions = ‘/path/to/your/emission/data/’ dir_output = ‘./’ ! ! 输出文件前缀 prefix = ‘emiss’ /

配置完成后,使用Fortran编译器进行编译(通常提供Makefile),然后运行:

./prep_chem_sources

成功运行后,会在输出目录生成类似emissopt3_d01_2023-07-01_00:00:00.nc的文件,这就是WRF-Chem可识别的排放输入文件。

4.3 排放文件与WRF-Chem的链接

在运行real.exe(WRF初始化程序)之前,需要将生成的排放文件链接到WRF运行目录,并确保namelist.input中的化学选项指向正确的排放文件。

cd $DIR/WRF-4.5/test/em_real # 链接排放文件 ln -sf /path/to/your/emissopt3_d01_2023-07-01_00:00:00.nc emissopt3_d01.nc # 通常需要链接多个时间片的文件,或者链接一个代表持续排放的文件

5. 整合与首次运行:从配置到产出

现在,我们将所有部分串联起来,完成一次完整的流程。

5.1 配置WPS(namelist.wps)

$DIR/WPS-4.5目录下,编辑namelist.wps。核心是&geogrid&share部分。

&share wrf_core = 'ARW', max_dom = 1, start_date = '2023-07-01_00:00:00', end_date = '2023-07-02_00:00:00', interval_seconds = 21600, / &geogrid parent_id = 1, parent_grid_ratio = 1, i_parent_start = 1, j_parent_start = 1, e_we = 100, ! 东西向网格数 e_sn = 80, ! 南北向网格数 geog_data_res = 'modis_30s+30s', ! 地理数据分辨率 dx = 27000, ! 网格间距 (米) dy = 27000, map_proj = 'lambert', ref_lat = 35.0, ! 区域中心纬度 ref_lon = 110.0, ! 区域中心经度 truelat1 = 30.0, truelat2 = 60.0, stand_lon = 110.0, /

运行WPS三步曲:

./geogrid.exe ln -sf ungrib/Variable_Tables/Vtable.GFS Vtable ./link_grib.csh /path/to/your/gfs/files/GFS* ./ungrib.exe ./metgrid.exe

成功后会生成met_em.d01.*文件。

5.2 配置WRF(namelist.input)并链接文件

met_em.d01.*文件链接到WRF运行目录,并编辑namelist.input

cd $DIR/WRF-4.5/test/em_real ln -sf ../../../WPS-4.5/met_em.d01.* .

编辑namelist.input化学相关的设置是重点

&time_control run_days = 1, run_hours = 0, ... / &domains max_dom = 1, e_we = 100, ! 必须与WPS设置一致 e_sn = 80, e_vert = 28, dx = 27000, dy = 27000, ... / &physics mp_physics = 8, ! 微物理方案 ra_lw_physics = 4, ! 长波辐射 ra_sw_physics = 4, ! 短波辐射 radt = 30, ! 辐射调用频率(步长) chem_opt = 201, ! 化学机制选择!201代表GOCART简单气溶胶+MOZART气相化学 bios_emiss_opt = 1, ! 生物排放选项 phot_opt = 1, ! 光解选项 dust_opt = 1, ! 沙尘选项 seas_opt = 1, ! 海盐选项 / &chemistry kemit = 1, ! 排放层数 chemdt = 10, ! 化学步长(分钟) io_style_emissions = 2, ! 排放输入格式 emiss_inpt_opt = 1, ! 使用外部排放文件 emiss_opt = 9, ! 排放选项,与chem_opt匹配 / &namelist_quilt /

注意chem_optemiss_opt的选择必须兼容,并确保你准备的排放文件格式与之匹配。这需要查阅WRF-Chem用户手册。

5.3 运行real.exe和wrf.exe

首先运行real.exe生成初始和边界条件文件(wrfinput_d01wrfbdy_d01)。它会读取气象初始场和排放文件。

mpirun -np 4 ./real.exe 2>&1 | tee real.log

检查real.log末尾是否有“SUCCESS”信息,并确认wrfinput_d01文件已生成且包含化学变量(如so2,no2等)。

最后,运行主模式:

mpirun -np 8 ./wrf.exe 2>&1 | tee wrf.log

监控wrf.log,观察积分步数是否正常推进,并留意是否有化学相关的报错。运行成功后,会生成一系列wrfout_d01_*文件。

5.4 结果验证与常见问题排查

使用ncdump或Python的netCDF4库快速检查输出文件:

ncdump -h wrfout_d01_2023-07-01_00:00:00 | head -50

查看其中是否包含预期的化学物种变量。

常见问题排查表:

问题现象可能原因检查点与解决方案
./configure失败,提示找不到编译器或库环境变量未设置或路径错误;依赖库未安装。1. 执行which gfortran,which gcc
2. 检查NETCDF,JASPERLIB等环境变量是否指向正确的$DIR
3. 确认所有依赖库已成功编译安装。
compile失败,报错undefined reference to ...库链接顺序错误或库缺失;未使用-fPIC编译依赖库。1. 检查configure.wrf中的库路径和链接标志。
2. 返回依赖库步骤,确保编译时添加了CFLAGS="-fPIC"CXXFLAGS="-fPIC"
3. 清理WRF目录(./clean -a)后重新配置编译。
real.exe运行失败,提示Could not find emission file排放文件未链接或路径错误;namelist.input中排放设置不正确。1. 确认运行目录下存在正确命名的排放文件(如emissopt3_d01.nc)。
2. 检查namelist.inputio_style_emissions,emiss_inpt_opt,emiss_opt的设置是否与排放文件类型匹配。
wrf.exe运行中途崩溃,化学相关报错(如photolysis error化学机制(chem_opt)与辐射方案、光解方案不兼容;排放物种映射错误。1. 查阅WRF-Chem用户指南,确认你选择的chem_optra_sw_physics,ra_lw_physics,phot_opt是推荐组合。
2. 检查排放预处理工具生成的物种名称是否与化学机制期望的名称完全一致。
输出文件wrfout中没有化学变量real.exe未成功读入排放或化学初始条件;namelist.inputchem_opt为0。1. 检查real.log,看是否有关于读取化学数据的成功信息。
2. 确保namelist.inputchem_opt设置为非零值。
模拟结果中污染物浓度异常高或为零排放清单单位错误;排放因子或活动水平数据有误;化学机制不适用于该区域。1. 仔细核对排放预处理工具中单位转换系数。
2. 使用已知案例(如WRF-Chem官网教程)的排放数据测试你的流程,定位问题是排放数据还是模式设置。

6. 从学习到生产:关键实践与扩展方向

成功运行测试案例只是第一步。要将WRF/Chem应用于实际研究或业务,还需要考虑更多工程化因素。

6.1 生产环境考量

  1. 高性能计算(HPC)与作业调度:在生产服务器上,通常使用Slurm、PBS等作业调度系统。你需要编写作业提交脚本,合理申请CPU核心数、内存和运行时间。编译WRF时需选择对应的MPI选项(如dmpar)。
  2. 自动化流程管理:将WPS预处理、排放处理、WRF运行、后处理等步骤编写成Shell或Python脚本,实现一键化或定时自动化运行,减少人工干预错误。
  3. 数据管理与存储:气象输入数据、排放清单、地理数据以及庞大的输出文件(一次模拟可能数百GB)需要有组织的存储、备份和清理策略。考虑使用NetCDF4的压缩特性节省空间。
  4. 参数化方案选型与敏感性试验:化学机制(chem_opt)、气溶胶方案、气相化学机制、气象物理方案(积云对流、边界层、陆面过程)的选择对结果影响巨大。生产应用中需要进行敏感性试验来确定最适合研究区域的方案组合。
  5. 验证与评估:使用地面观测站(如国控点)、卫星反演产品等对模拟的污染物浓度、气象要素进行验证,计算如均方根误差(RMSE)、相关系数等统计指标,评估模式性能并指导参数调优。

6.2 扩展学习与资源

  • 深入化学机制:研究不同chem_opt(如202 for RACM-MADE/SORGAM, 300 for MOZART-MOSAIC)背后的科学机理和适用场景。
  • 复杂排放源:学习处理在线生物排放(MEGAN)、沙尘起沙、海盐排放以及交通、扬尘等更高分辨率的排放清单。
  • 数据同化:探索将观测数据同化到WRF/Chem中,以改进初始场和预报效果。
  • 耦合其他模型:了解WRF与其他模型(如水文模型、城市冠层模型)的耦合。
  • 官方资源:WRF官网、用户论坛、GitHub仓库以及发布在Geoscientific Model Development等期刊上的模式技术文档,是解决问题和深入学习的宝库。

构建和运行WRF/Chem是一个系统工程,耐心和细致的排错能力至关重要。从最简化的案例(小区域、短时长、简单化学机制)开始,确保每一步都成功,再逐步增加复杂性。每一次编译错误和运行崩溃,都是理解这个复杂系统内部工作机制的宝贵机会。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询