WRF/ChemWeather Research and Forecasting model coupled with Chemistry是一个将气象预报与大气化学过程在线耦合的先进数值模式。它并非一个简单的工具而是一个庞大、复杂的科学计算系统广泛应用于大气污染模拟、空气质量预报、气溶胶-云相互作用研究以及气候变化评估等领域。对于大气环境、气象学及相关专业的研究人员和工程师而言能否成功在本地计算环境中部署并运行WRF/Chem是开展后续科研与应用工作的关键第一步。这篇文章将彻底拆解WRF/Chem从零到一的完整实践流程。我们不空谈理论而是聚焦于最实际的五个环节从理解其核心耦合机制到准备一个可用的Linux计算环境再到完成模式源代码的编译接着准备关键的排放源输入数据最后成功运行一个案例并获取模拟结果。整个过程会像一份详细的实验手册涵盖你可能遇到的环境依赖、编译报错、数据预处理等具体问题。无论你是刚接触模式的新手还是需要在新的计算集群上部署的资深用户这篇文章提供的可复现步骤和排查思路都能帮你绕过许多“坑”把宝贵的精力集中在科学问题本身。1. 核心能力速览在深入部署细节之前我们先通过下表快速了解WRF/Chem项目的关键属性和部署要求这有助于你判断自身条件是否满足以及需要投入多少准备时间。能力项说明项目类型区域尺度气象-化学在线耦合数值模式核心功能同步模拟气象场风、温、湿、压等与大气化学成分污染物、气溶胶等的演变过程实现两者的双向反馈。主要应用场景城市/区域空气质量预报、污染成因与传输分析、气候变化研究、极端污染事件模拟、环境政策评估等。计算平台必须在Linux/Unix系统上运行如CentOS, Ubuntu, Red Hat等。Windows用户需通过WSL2、虚拟机或连接远程Linux服务器进行操作。硬件门槛对CPU计算能力、内存容量和磁盘I/O速度要求高。强烈建议在服务器或高性能工作站上运行。大规模模拟需要多核CPU、大内存≥32GB和高速并行文件系统。GPU加速支持有限主要依赖CPU并行计算。环境依赖需要一整套科学计算编译环境包括特定版本的Fortran/C编译器如Intel, GNU、MPI并行库如OpenMPI, MPICH、NetCDF/HDF5等数据格式支持库。依赖关系复杂是部署的主要难点。启动与运行方式通过命令行执行一系列预处理和主程序。没有图形化一键启动界面需编写或修改namelist命名列表配置文件来控制模拟参数。数据准备复杂度高。需要准备气象初始场与边界条件通常来自全球模式如FNL、GFS、高时空分辨率的排放源清单如MEIC、EDGAR、化学机制文件、土地利用数据等。排放源制作是独立且繁琐的环节。是否支持“批量任务”是且是主要运行方式。通常通过Shell脚本或作业调度系统如Slurm, PBS提交多个任务进行多案例、多参数或长时间序列的模拟。输出与后处理输出为NetCDF格式需使用NCL、Pythonxarray, wrf-python、GrADS等工具进行可视化与分析。2. 适用场景与使用边界WRF/Chem是一个强大的科研与业务工具但其使用有明确的边界。它非常适合大气环境科研人员研究污染物生成、传输、沉降的物理化学机制评估减排策略效果。气象与环境业务单位搭建区域空气质量预报系统为决策提供技术支持。高校教学与培训作为大气数值模拟课程的高级实践内容理解模式框架与耦合原理。跨学科研究探讨气溶胶对云和降水的影响气溶胶-云相互作用或评估气候变化对空气质量的反饋。它不擅长或需要谨慎对待实时或超短期预报由于其复杂的预处理和较长的计算时间通常用于未来24-72小时的预报或历史个例模拟而非分钟级预警。缺乏基础数据的区域模拟精度严重依赖输入数据质量特别是高分辨率的排放源清单。对于排放数据匮乏的地区模拟结果不确定性很大。作为“黑箱”工具用户必须对大气物理、化学过程有基本理解能够合理设置参数、诊断模式结果、识别模拟误差。盲目运行得到的输出可能没有科学价值。个人电脑上的大规模模拟虽然可以小范围、短时次测试但资源密集型模拟必须在高性能计算HPC集群上进行。合规与伦理边界所有模拟输入数据如再分析资料、排放清单应确保来源合法遵守数据使用协议。基于模拟结果发表的研究或报告需客观陈述模式的不确定性和局限性避免对政策或公众产生误导。3. 环境准备与前置条件部署WRF/Chem是一场“系统与环境”的攻坚战。在下载任何代码之前请确保你的计算环境满足以下最低要求。3.1 操作系统核心要求64位 Linux 操作系统。推荐使用稳定的服务器发行版如CentOS/Rocky Linux/AlmaLinux 7/8或Ubuntu 20.04 LTS/22.04 LTS。Windows用户必须通过WSL2 (Windows Subsystem for Linux 2)安装一个Linux发行版如Ubuntu或使用VirtualBox/VMware创建Linux虚拟机。请注意虚拟机性能损耗较大仅适合学习和小测试。macOS理论上可通过Homebrew等工具安装依赖但兼容性问题较多不推荐用于正式工作建议使用Linux服务器。3.2 基础系统工具确保系统已安装必要的开发工具和库。# 对于基于RPM的系统如CentOS/Rocky Linux sudo yum groupinstall Development Tools -y sudo yum install wget git curl tcsh flex bison m4 make cmake perl -y # 对于基于APT的系统如Ubuntu/Debian sudo apt update sudo apt install build-essential -y sudo apt install wget git curl tcsh flex bison m4 make cmake perl gfortran -y3.3 核心依赖库WRF/Chem编译和运行依赖于一系列科学计算库。以下是必须安装的库及其大致作用NetCDF模式输入输出数据的标准格式。HDF5NetCDF4的后端存储格式。MPI用于并行计算实现多核/多节点加速。JASPER处理GRIB格式气象数据所需的库。LIBPNG ZLIB图形和压缩库通常作为其他库的依赖。一个关键原则建议从源码编译这些库并确保它们使用相同的编译器套件如全部使用Intel编译器或全部使用GNU编译器。混合使用不同编译器编译的库是导致后续编译失败的最常见原因。3.4 编译器选择GNU编译器套件免费、通用。包括gcc(C),g(C),gfortran(Fortran)。版本建议 ≥ 7.5。Intel编译器套件商业软件针对Intel CPU优化通常效率更高。包括icc,icpc,ifort。建议初学者可从GNU编译器开始规避许可问题。生产环境可考虑Intel编译器提升性能。3.5 磁盘空间预留至少50-100 GB的可用磁盘空间用于存放源代码、编译生成的库、庞大的输入数据气象数据、排放数据以及模拟输出文件。4. 安装部署与启动方式WRF/Chem的“安装”实质是“编译”。整个过程分为三大步编译依赖库、编译WRF核心、编译WPS预处理系统和化学模块相关工具。4.1 创建统一环境变量在开始前设置环境变量可以极大简化后续步骤。将以下内容添加到你的~/.bashrc或~/.bash_profile文件中然后执行source ~/.bashrc。# 假设你将所有库安装在 /opt/model_libs 目录下 export DIR/opt/model_libs export CCgcc export CXXg export FCgfortran export F77gfortran export FFLAGS-m64 export CFLAGS-m64 export CXXFLAGS-m64 # 设置库的安装路径和路径变量 export NETCDF$DIR/netcdf export HDF5$DIR/hdf5 export PHDF5$DIR/hdf5 # 并行HDF5如果编译了的话 export JASPERLIB$DIR/jasper/lib export JASPERINC$DIR/jasper/include export PATH$NETCDF/bin:$HDF5/bin:$PATH export LD_LIBRARY_PATH$NETCDF/lib:$HDF5/lib:$JASPERLIB:$LD_LIBRARY_PATH export WRF_CHEM1 # 关键启用化学模块编译选项4.2 分步编译依赖库以下以GNU编译器为例展示在/opt/model_libs下编译安装的典型命令流程。请按顺序执行并密切关注每一步的终端输出是否有Error或Failed。安装MPI(以OpenMPI为例)cd $DIR wget https://download.open-mpi.org/release/open-mpi/v4.1/openmpi-4.1.5.tar.gz tar -xzvf openmpi-4.1.5.tar.gz cd openmpi-4.1.5 ./configure --prefix$DIR/openmpi make -j 8 # 使用8个核心并行编译数字根据你的CPU核心数调整 make install export PATH$DIR/openmpi/bin:$PATH export LD_LIBRARY_PATH$DIR/openmpi/lib:$LD_LIBRARY_PATH安装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 -xzvf hdf5-1.12.2.tar.gz cd hdf5-1.12.2 ./configure --prefix$HDF5 --enable-fortran --enable-hl --enable-parallel CCmpicc CXXmpicxx FCmpifort make -j 8 make install安装NetCDF-C 和 NetCDF-Fortran# NetCDF-C cd $DIR wget https://github.com/Unidata/netcdf-c/archive/refs/tags/v4.9.2.tar.gz -O netcdf-c-4.9.2.tar.gz tar -xzvf netcdf-c-4.9.2.tar.gz cd netcdf-c-4.9.2 CPPFLAGS-I$HDF5/include LDFLAGS-L$HDF5/lib ./configure --prefix$NETCDF --disable-dap make -j 8 make install # NetCDF-Fortran cd $DIR wget https://github.com/Unidata/netcdf-fortran/archive/refs/tags/v4.6.1.tar.gz -O netcdf-fortran-4.6.1.tar.gz tar -xzvf netcdf-fortran-4.6.1.tar.gz cd netcdf-fortran-4.6.1 CPPFLAGS-I$NETCDF/include LDFLAGS-L$NETCDF/lib ./configure --prefix$NETCDF make -j 8 make install安装JASPERcd $DIR wget https://www.ece.uvic.ca/~frodo/jasper/software/jasper-2.0.14.tar.gz tar -xzvf jasper-2.0.14.tar.gz cd jasper-2.0.14 mkdir build cd build cmake .. -DCMAKE_INSTALL_PREFIX$DIR/jasper make -j 8 make install4.3 编译WRF主程序获取源代码cd ~ wget https://github.com/wrf-model/WRF/archive/refs/tags/v4.5.tar.gz -O WRF-4.5.tar.gz tar -xzvf WRF-4.5.tar.gz cd WRF-4.5配置与编译运行配置脚本选择与你的编译器匹配的选项。./configure终端会出现交互式菜单。例如如果你使用GNU编译器并启用了并行可能会选择34. (dmpar) GNU (gfortran/gcc)选项。选择后会提示是否嵌套一般选1基本嵌套。 配置完成后执行编译。这是最耗时且最容易出错的一步。./compile em_real 21 | tee compile.logem_real表示编译中尺度真实案例的模块。21 | tee compile.log将屏幕输出同时保存到compile.log文件便于出错时查看。编译成功的关键标志是在main目录下生成wrf.exe和real.exe可执行文件。4.4 编译WPS预处理系统WPS用于将全球气象数据插值到WRF的模拟网格上。cd ~ wget https://github.com/wrf-model/WPS/archive/refs/tags/v4.5.tar.gz -O WPS-4.5.tar.gz tar -xzvf WPS-4.5.tar.gz cd WPS-4.5 # 设置环境变量指向WRF目录 export WRF_DIR~/WRF-4.5 ./configure # 选择与WRF相同的编译器选项 ./compile 21 | tee wps_compile.log成功编译后会在当前目录生成geogrid.exe,ungrib.exe,metgrid.exe三个关键程序。4.5 编译化学模块相关工具WRF/Chem需要额外的预处理程序来处理排放源。cd ~/WRF-4.5 # 进入化学模块工具目录 cd chem/prep_chem_sources # 编辑 configure.prep_chem_sources 文件设置编译器路径和库路径 # 然后执行编译 ./build_prep_chem_sources_RADM_WRF_FIM_.sh此步骤可能因版本而异请务必参考官方文档或README文件。5. 功能测试与效果验证运行一个理想案例在尝试真实案例前强烈建议先运行一个理想案例Ideal Case。它不需要外部输入数据可以快速验证WRF核心和WRF/Chem的编译是否正确以及基本的动力学和化学过程是否正常。5.1 运行WRF理想案例cd ~/WRF-4.5/test/em_chem # 清理之前可能存在的输出 ./clean -a # 链接必要的化学机制数据文件 ln -sf ../../../chem/chem/chemics_init.dat . # 配置namelist.input.ideal文件通常已提供模板 # 开始编译理想案例的可执行文件 ./compile em_chem 21 | tee ideal_compile.log # 运行理想案例 mpirun -np 4 ./wrf.exe 21 | tee ideal_run.log-np 4表示使用4个MPI进程并行请根据你的CPU核心数调整。运行成功后终端会打印出模拟进度如Timing for main: time 2015-01-24_00:00:00 on domain 1: ...并最终出现SUCCESS COMPLETE WRF字样。会生成一系列wrfout_d01_*输出文件。5.2 验证理想案例输出使用ncdump工具快速查看输出文件头信息确认化学变量是否存在。# 安装ncdump (如果netcdf库已安装它通常在$NETCDF/bin下) ncdump -h wrfout_d01_2015-01-24_00:00:00 | head -50在输出信息中你应该能看到除了常规气象变量如U,V,T,QVAPOR外还有化学变量例如o3,no,no2,so2,PM2_5_DRY等。这证明WRF/Chem的化学模块已成功激活并运行。6. 排放源制作从清单到模式输入对于真实案例模拟排放源数据的准备是重中之重也是最复杂的环节之一。WRF/Chem支持多种排放清单如EDGAR, MEIC, NEI和化学机制如RADM2, RACM, MOZART。这里概述通用流程。6.1 数据准备你需要获取排放清单时空分辨率的污染物排放数据如CO, NOx, SO2, VOCs, PM2.5等。空间代理文件将清单数据分配网格化到模拟区域所需的文件如人口密度、道路网络、土地利用数据。时间剖面文件定义排放量的日变化、周变化、月变化系数。6.2 使用prep_chem_sources工具处理我们之前编译的prep_chem_sources程序用于此目的。cd ~/WRF-4.5/chem/prep_chem_sources # 1. 编辑 input.inp 配置文件 # 设置模拟区域、时间范围、输入输出路径、化学机制等 vi input.inp # 2. 运行前处理程序 ./prep_chem_sources_RADM_WRF_FIM_.exe prep_chem.log程序会根据input.inp的配置读取原始清单和代理文件生成WRF/Chem可读的排放输入文件通常命名为wrfchemi_*。6.3 将排放文件引入WPS/WRF流程生成的wrfchemi文件需要在运行real.exe之前放置到正确目录并在namelist.input中启用化学选项和指定排放文件路径。# 在运行real.exe和wrf.exe的目录下 ln -sf /path/to/your/wrfchemi_d01 wrfchemi_d01在namelist.input中确保以下化学相关参数已设置chem chem_opt 201, ! 选择化学机制201代表RADM2 MADE/SORGAM气溶胶 emiss_opt 3, ! 使用外部提供的排放文件 io_style_emissions 1, ! 排放输入输出风格 emiss_inpt_opt 1, ! 排放输入选项 chem_in_opt 0, ! 从文件初始化化学场 /关键点chem_opt的选择必须与你生成排放文件时使用的化学机制、以及你编译WRF/Chem时选择的化学方案完全一致否则会导致运行失败或结果错误。7. 资源占用与性能观察WRF/Chem是资源消耗大户理解其资源占用模式对任务管理和性能调优至关重要。7.1 计算资源监控在运行mpirun -np N ./wrf.exe时可以使用系统工具监控资源。CPU/内存监控使用top或htop命令。WRF进程会占用接近100%的CPU核心内存占用随网格数、化学物种数增加而急剧上升。磁盘I/O监控使用iotop命令。在模拟开始读输入和结束写输出时I/O压力最大。使用高性能存储如SSD、并行文件系统能显著提升效率。网络监控在集群上跨节点运行时使用iftop监控MPI通信流量。7.2 性能影响因素网格分辨率与区域大小计算量近似与网格点数成正比。将水平分辨率从9公里提高到3公里计算量可能增加数十倍。化学机制复杂度chem_opt选择简单的气相化学机制如102与选择包含复杂气溶胶模块的机制如201,202计算开销差异巨大。并行规模增加MPI进程数-np N可以缩短计算时间但并非线性加速。当进程数过多时进程间通信开销会抵消计算收益存在一个最佳并行数。输出频率在namelist.input的time_control部分history_interval设置输出频率。输出过于频繁会严重增加I/O负担和输出文件体积。7.3 优化建议从小开始先用低分辨率、小区域、短时次、简单化学机制的案例测试确保流程通畅。调整并行配置在namelist.input的domains部分可以通过设置nproc_x和nproc_y来调整进程在水平方向的分布有时比单纯增加进程总数更有效。使用静默模式在namelist.input的time_control部分设置debug_level 0可以减少屏幕输出略微提升性能。管理输出只输出你真正需要的变量在time_control中设置iofields_filename文件并考虑将输出文件转换为更紧凑的格式进行长期存储。8. 常见问题与排查方法部署和运行WRF/Chem过程中你会遇到各种错误。下表整理了典型问题及解决思路。问题现象可能原因排查方式解决方案./configure时找不到编译器编译器未安装或未在PATH中which gfortran,which mpicc安装对应编译器并正确设置PATH环境变量。编译NetCDF/HDF5等库时失败依赖缺失或编译器不兼容查看config.log文件末尾的错误信息安装缺失的依赖包如libcurl-devel。确保所有库使用同一套编译器编译。编译WRF时出现undefined reference错误库链接错误路径不对检查configure.wrf文件中的库路径LIB_EXTERNAL确保NETCDF,HDF5,JASPERLIB等环境变量设置正确并指向包含.a或.so文件的lib目录。运行real.exe或wrf.exe立刻段错误MPI环境问题或内存不足用ulimit -s unlimited解除栈限制用单进程运行测试运行前执行ulimit -s unlimited和ulimit -l unlimited。检查是否在计算节点上内存不足。提示Could not open file wrfchemi_d01排放文件路径错误或未生成检查文件是否存在namelist.input中emiss_opt设置确保排放文件已正确链接到运行目录且文件名与namelist.input中auxinput5_inname设置一致。模拟结果中化学物浓度全为0或异常值化学机制与排放输入不匹配排放单位错误检查chem_opt与排放处理时选择的机制检查排放清单单位确保从排放清单处理到WRF运行整个链条使用的化学机制代码一致。核对排放预处理程序的单位转换。metgrid.exe失败提示GRIB文件问题ungrib.exe未成功运行或Vtable不匹配检查ungrib.log确认使用的Vtable文件与GRIB数据源匹配确保已运行link_grib.csh链接GRIB文件并运行ungrib.exe。从WPS目录选择合适的Vtable如Vtable.GFS。并行运行效率低下速度不增反降进程拓扑不合理或网络延迟大用mpirun -np N --map-by core ./wrf.exe绑定核心在namelist.input中调整nproc_x和nproc_y使网格划分更均衡。在集群上使用高速网络如Infiniband。通用排查流程看日志任何命令后加21 | tee mylog.log将输出重定向到日志文件。简化测试遇到复杂错误先退回单进程、理想案例、最小配置测试。检查环境变量用echo $NETCDF、echo $LD_LIBRARY_PATH确认路径设置正确且生效。搜索错误关键词将终端报错信息中的关键句子去掉具体路径直接复制到搜索引擎很大概率能找到解决方案。9. 最佳实践与使用建议基于长期维护WRF/Chem系统的经验以下建议能帮你更稳定、高效地使用该模式。环境隔离与复用将成功编译的依赖库/opt/model_libs和WRF/WPS源代码目录完整备份。在新系统部署时可以直接复用这些库只需重新编译WRF/WPS节省大量时间。版本控制记录下所有关键组件的版本号操作系统、编译器gcc/gfortran版本、MPI、NetCDF、HDF5、JASPER、WRF/WPS版本、化学机制选项。这能在结果复现或问题排查时提供关键信息。模块化脚本管理将整个流程脚本化。例如编写不同的Shell脚本01_compile_libs.sh,02_compile_wrf.sh,03_run_ideal.sh,04_prep_emission.sh,05_run_real_case.sh。这使流程清晰且可重复。数据管理策略原始数据GRIB, 排放清单、中间文件wrfchemi,geo_em、最终输出wrfout分目录存放。对大型输出文件定期使用ncrcat或ncks进行合并或裁剪并考虑压缩归档。参数化方案选择namelist.input中的物理参数化方案微物理、积云、边界层、辐射等对结果影响巨大。不要盲目套用他人配置。应从文献或官方测试案例出发针对你的模拟区域和目的进行敏感性试验。结果验证意识模式结果必须与观测数据气象站、空气质量监测站进行对比验证计算统计指标如RMSE, MB, R。这是评估模拟可靠性、校准模式参数不可或缺的步骤。合规与伦理使用公开数据时遵守许可协议。在论文或报告中明确说明所使用的WRF/Chem版本、参数化方案、输入数据来源及可能的不确定性。成功运行第一个WRF/Chem案例只是一个开始。这个系统的深度在于其无数的可配置选项和与多种观测数据、同化系统、后处理工具的对接能力。后续你可以探索更复杂的化学机制、耦合城市冠层模型、进行数据同化、或者利用Python生态如wrf-python, xarray, Cartopy进行高效的可视化与分析。把这次成功的部署作为基准所有进一步的探索都基于这个稳定可靠的环境展开。建议将本文提及的编译脚本、环境变量设置、namelist模板和排查清单保存下来它们会在你未来的工作中反复发挥作用。