【WRF-CMAQ第二期】WRF-CMAQ 测试案例安装与运行
WRF-CMAQ Benchmarking Tutorial
- WRF-CMAQ Benchmarking Tutorial
- 系统检查(System Checks)
- 安装 WRF-CMAQ(Installing WRF-CMAQ)
- 克隆 CMAQ 仓库(Clone CMAQ Repository)
- 创建自己的分支(Check Out a New Branch)
- 在仓库外部构建和运行(Building Outside the Repo)
- 合并 netCDF-C 与 netCDF-Fortran 库(Combining the netCDF-C and netCDF-Fortran libraries)
- 配置 WRF-CMAQ 编译环境(Configuring the WRF-CMAQ Environment)
- 编译 WRF-CMAQ(Compiling WRF-CMAQ)
- 编辑 bldit_cctm.csh 脚本
- 参考
本博客结合 WRF-CMAQ Benchmarking Tutorial,详细解释WRF-CMAQ 测试案例的安装与运行。
WRF-CMAQ Benchmarking Tutorial
教程目的(Purpose)
本指南的目标是帮助用户完成 WRF-CMAQ 测试案例 的安装与运行,具有以下两个主要目的:
-
熟悉 WRF-CMAQ 套件的工作流程
让用户了解 WRF(Weather Research and Forecasting Model)与 CMAQ(Community Multiscale Air Quality Model)如何协同工作。 -
验证软件安装是否成功(Benchmarking)
通过运行标准化测试案例,确认在当前系统中 WRF-CMAQ 是否正确编译并能正常运行。
📝 建议:强烈建议用户先完成以下内容以了解各个程序模块:
- CMAQ Benchmark Tutorial(CMAQ 基准测试教学)
- WRF Installation Guide(WRF 安装指南)
系统检查(System Checks)
CMAQ 运行需要特定的硬件与软件配置,包括编译器、库文件、系统设置等。
👉 应查阅官方教程:Preparing Your Compute Environment for CMAQ Simulations 来确保你的计算环境已满足 CMAQ 的要求。
安装 WRF-CMAQ(Installing WRF-CMAQ)
⚠️ 如果你已经按照 CMAQ_UG_tutorial_build_library_gcc_support_nc4.md
教程成功安装了 netCDF-C
和 netCDF-Fortran
库,并放在同一个目录下,那么可以跳过库安装部分,直接跳到 配置环境部分(Configuring the WRF-CMAQ environment)。
克隆 CMAQ 仓库(Clone CMAQ Repository)
在希望安装 WRF-CMAQ 的目录下,运行以下命令从 EPA 的 GitHub 上获取 CMAQv5.5 的代码:
git clone -b main https://github.com/USEPA/CMAQ.git CMAQ_REPO
这会创建一个名为 CMAQ_REPO
的文件夹,里面包含 CMAQ 的全部源代码与资源。
创建自己的分支(Check Out a New Branch)
即使你不打算修改代码,也建议你在仓库中创建一个新的分支:
cd CMAQ_REPO
git checkout -b my_branch
📌 这样做的好处是:
- 保持
main
分支干净无修改,方便将来拉取更新。 - 在
my_branch
中修改不会影响原始代码,也不影响版本控制。
在仓库外部构建和运行(Building Outside the Repo)
仓库顶层有一个脚本:bldit_project.csh
,它的作用是:
- 自动复制 CMAQ 的文件夹结构;
- 将构建脚本和运行脚本从仓库复制到你指定的目录中;
- 这样,你可以在不影响 Git 仓库的情况下自由修改脚本。
设置安装路径:
打开 bldit_project.csh
,查找并设置如下变量:
set CMAQ_HOME = [your_install_path]/CMAQv5.5
将 [your_install_path]
替换为你希望放置 CMAQ 的绝对路径,如:
set CMAQ_HOME = /home/user/models/CMAQv5.5
执行脚本:
./bldit_project.csh
这个脚本会在你指定的 $CMAQ_HOME
目录下创建一个完整的 WRF-CMAQ 项目文件夹结构,从那里你将进行模型编译与运行。
合并 netCDF-C 与 netCDF-Fortran 库(Combining the netCDF-C and netCDF-Fortran libraries)
构建 WRF-CMAQ 需要多个库文件和头文件(include files)。由于这些文件通常不在系统默认路径,你必须通过环境变量(environment variables)显式指定它们的位置。
这些环境变量在项目根目录中的脚本 config_cmaq.csh
中设置。
创建合并目录步骤
WRF 源代码要求你已经将 netCDF-C
和 netCDF-Fortran
合并至一个目录中。如果尚未完成,请按照以下指令操作:
cd /[your_install_path]/LIBRARIES_gcc
mkdir netcdf_combined
cp -rp ./netcdf-fortran-4.4.5-gcc9.1.0/* ./netcdf_combined/
cp -rp ./netcdf-c-4.7.0-gcc9.1.0/* ./netcdf_combined/
📌 说明:
cp -rp
表示复制文件夹及其内容并保留权限。- 你可以根据自己实际安装的版本修改文件夹名称。
配置 WRF-CMAQ 编译环境(Configuring the WRF-CMAQ Environment)
你需要编辑 config_cmaq.csh
脚本(位于 WRF-CMAQ 项目根目录)来设置环境变量。
设置 NETCDF、IOAPI 和 WRF_ARCH:
找到大约在 第 148 行 的区域:
#> I/O API and netCDF for WRF-CMAQ
setenv NETCDF [your_install_path]/LIBRARIES_gcc/netcdf_combined
setenv IOAPI [your_install_path]/LIBRARIES_gcc/ioapi-3.2
setenv WRF_ARCH 34
NETCDF
: 指向你刚刚合并的 netCDF 文件夹。IOAPI
: 指向你安装的 I/O API 目录。WRF_ARCH
: 设置为34
表示你使用的是 GNU 编译器(gfortran/gcc)+ dmpar 并行模式。
📌 WRF_ARCH
的编号代表不同的平台与编译器组合,编号 34
是:
GNU (gfortran/gcc) + dmpar(分布式内存并行)
1. (serial) 2. (smpar) 3. (dmpar) 4. (dm+sm) PGI (pgf90/gcc)5. (serial) 6. (smpar) 7. (dmpar) 8. (dm+sm) PGI (pgf90/pgcc): SGI MPT9. (serial) 10. (smpar) 11. (dmpar) 12. (dm+sm) PGI (pgf90/gcc): PGI accelerator13. (serial) 14. (smpar) 15. (dmpar) 16. (dm+sm) INTEL (ifort/icc)17. (dm+sm) INTEL (ifort/icc): Xeon Phi (MIC architecture)18. (serial) 19. (smpar) 20. (dmpar) 21. (dm+sm) INTEL (ifort/icc): Xeon (SNB with AVX mods)22. (serial) 23. (smpar) 24. (dmpar) 25. (dm+sm) INTEL (ifort/icc): SGI MPT26. (serial) 27. (smpar) 28. (dmpar) 29. (dm+sm) INTEL (ifort/icc): IBM POE30. (serial) 31. (dmpar) PATHSCALE (pathf90/pathcc)32. (serial) 33. (smpar) 34. (dmpar) 35. (dm+sm) GNU (gfortran/gcc)36. (serial) 37. (smpar) 38. (dmpar) 39. (dm+sm) IBM (xlf90_r/cc_r)40. (serial) 41. (smpar) 42. (dmpar) 43. (dm+sm) PGI (ftn/gcc): Cray XC CLE44. (serial) 45. (smpar) 46. (dmpar) 47. (dm+sm) CRAY CCE (ftn $(NOOMP)/cc): Cray XE and XC48. (serial) 49. (smpar) 50. (dmpar) 51. (dm+sm) INTEL (ftn/icc): Cray XC52. (serial) 53. (smpar) 54. (dmpar) 55. (dm+sm) PGI (pgf90/pgcc)56. (serial) 57. (smpar) 58. (dmpar) 59. (dm+sm) PGI (pgf90/gcc): -f90=pgf9060. (serial) 61. (smpar) 62. (dmpar) 63. (dm+sm) PGI (pgf90/pgcc): -f90=pgf9064. (serial) 65. (smpar) 66. (dmpar) 67. (dm+sm) INTEL (ifort/icc): HSW/BDW68. (serial) 69. (smpar) 70. (dmpar) 71. (dm+sm) INTEL (ifort/icc): KNL MIC72. (serial) 73. (smpar) 74. (dmpar) 75. (dm+sm) FUJITSU (frtpx/fccpx): FX10/FX100 SPARC64 IXfx/XlfxEnter selection [1-75] : ------------------------------------------------------------------------
编译 WRF-CMAQ(Compiling WRF-CMAQ)
⚠️ 注意:ICON 和 BCON 是处理初始和边界条件的预处理器,但在本测试案例中,这些数据已经提供,因此可以跳过编译 ICON 和 BCON。
编辑 bldit_cctm.csh 脚本
步骤 1:复制原始构建脚本并重命名
cd CCTM/scripts
cp bldit_cctm.csh bldit_wrf4.5.1_cctmv55.csh
步骤 2:启用 WRF-CMAQ 双向耦合构建选项
编辑 bldit_wrf4.5.1_cctmv55.csh
:
找到并取消注释下面这行:
#> Two-way WRF-CMAQ
set build_twoway #> uncomment to build WRF-CMAQ twoway;
步骤 3:确保启用了 WRF_CMAQ 环境变量
执行:
grep WRF_CMAQ bldit_wrf4.5.1_cctmv55.csh
应输出:
setenv WRF_CMAQ 1
步骤 4:设置使用的 WRF 版本
确认以下代码块存在并设置为 release-v4.5.1
:
if ( $?build_twoway ) thenset WRF_VRSN = release-v4.5.1
endif
步骤 5:设置构建目录名称(避免覆盖)
确保 build 目录名包含 wrfcmaq
:
if ( $?Debug_CCTM ) thenset Bld = $CMAQ_HOME/CCTM/scripts/BLD_CCTM_${VRSN}_${compilerString}_${Mechanism}_${DepMod}_wrfcmaq_debug
elseset Bld = $CMAQ_HOME/CCTM/scripts/BLD_CCTM_${VRSN}_${compilerString}_${Mechanism}_${DepMod}_wrfcmaq
endif
配置科学模块参数(Configure CMAQ Benchmark Science Modules)
基准测试案例使用以下模块设置:
模块类型 | 选项 |
---|---|
并行方式 | Multiprocessor Simulation |
三维平流方案 | wrf_cons |
水平扩散 | Multiscale |
垂直扩散 | ACM2_M3Dry |
干沉降 | M3Dry |
化学求解器 | EBI |
气溶胶模块 | AERO7 |
云模块 | ACM_AE7 |
化学机制 | cb6r3_ae7_aq |
联机生物源排放 | 启用 |
烟流上升 | 启用 |
在编译脚本中设置这些:
打开你复制的脚本 bldit_wrf4.5.1_cctmv55.csh
,根据注释指引设置以下变量:
ChemMech = cb6r3_ae7_aq
AeroMech = aero7
CloudMech = acm_ae7
DepMod = m3dry
InlineBio = Y
PlumeRise = Y
这些配置将确保构建出来的模型与官方基准测试一致。
INCLUDE_MODULES = $(MODULE_SRCH_FLAG) \$(ESMF_MOD_INC) $(ESMF_LIB_FLAGS) \-I$(WRF_SRC_ROOT_DIR)/main \-I$(WRF_SRC_ROOT_DIR)/external/io_netcdf \-I$(WRF_SRC_ROOT_DIR)/external/io_int \-I$(WRF_SRC_ROOT_DIR)/frame \-I$(WRF_SRC_ROOT_DIR)/share \-I$(WRF_SRC_ROOT_DIR)/phys \-I$(WRF_SRC_ROOT_DIR)/wrftladj \-I$(WRF_SRC_ROOT_DIR)/chem -I$(WRF_SRC_ROOT_DIR)/inc \-I$(NETCDFPATH)/include \-I$(MPIPATH)/include \REGISTRY = Registry
CC_TOOLS_CFLAGS = -DNMM_CORE=$(WRF_NMM_CORE)LIB = $(LIB_BUNDLED) $(LIB_EXTERNAL) $(LIB_LOCAL) $(LIB_WRF_HYDRO) $(NETCDF4_DEP_LIB)
LDFLAGS = $(OMP) $(FCFLAGS) $(LDFLAGS_LOCAL)
ENVCOMPDEFS = -DWRF_CMAQ
WRF_CHEM = 0
CPPFLAGS = $(ARCHFLAGS) $(ENVCOMPDEFS) -I$(LIBINCLUDE) $(TRADFLAG)
NETCDFPATH = /proj/ie/proj/CMAS/CMAQ/WRF-CMAQv5.5/build/LIBRARIES_gcc11.2
MPIPATH = /nas/sycamore/apps/openmpi/5.0.5/
HDF5PATH =
WRFPLUSPATH =
RTTOVPATH =
PNETCDFPATH =
ADIOS2PATH =