目录
一、软件简介
CMAQ(Community Multi-scale Air Quality Modeling System)模型基于“一个大气”的理念,系统的考虑大气中所有物理过程和化学过程以及它们之间的相互影响,能够同时模拟多种污染物和污染问题,包括臭氧、细颗粒物、光化学反应、酸沉降和能见度等。此外,CMAQ模型能够采用多层嵌套网格(外层采用分辨率较大粗网格,内层采用分辨率较小的细网格),在保证计算机性能的基础上提高模拟的准确性。
CMAQ模型是第三代空气质量模拟系统(Models-3/CMAQ)的核心,主要分为四大模块:1)气象-化学接口(MCIP,Meteorology-Chemistry Interface Processor),将WRF的输出气象场转化成CCTM所需要的数据格式;2)初始条件(ICON,Initial Conditions Processor),为模拟提供初始浓度场;3)边界条件 (BCON,Boundary Conditions Processor),为模拟提供边界浓度场;4)化学传输(CCTM,CMAQ Chemistry-Transport Model),是CMAQ的核心,其实质是一个大气化学和运输数学模型。在整个流程中,WRF提供气象条件,SMOKE提供污染物清单,CMAQ综合考虑排放、化学反应、云和降水的吸收以及干沉积等过程,负责模拟污染物浓度。
CMAQ模型基于三维欧拉方法,其化学传输模块(CCTM)采用基于梯度输送理论建立的污染物浓度控制方程,具体的表达式如下:
式中每一项分别对应着化学机制中不同的物理化学过程:(a)大气污染物浓度变化;(b)水平对流传输;(c)垂直对流传输;(d)水平扩散传输;(e)垂直扩散传输;(f)气象化学;(g)污染源一次排放;(h)云雾和液相化学;(i)烟雨抬升;(j)气溶胶化学。
二、软件安装
本文档以最新的CMAQv5.3.0版本为例,介绍模型依赖库和各个组成部分的安装方法。
2.1 安装前要求
2.1.1C/Fortran编译器
要求安装C/Fortran编译器,建议使用Intel编译器,为达到最优性能,建议使用跟处理器型号匹配的较新版本编译器,并且编译过程中始终使用同一类型编译器。本文档以Intel编译器为例。编译器最低版本要求:Intel 17.0 | GNU 6.1.0 | PGI 17.4
2.1.2 MPI并行环境
要求安装MPI并行环境,推荐使用Intel MPI。本文档以Intel MPI为例。MPI最低版本要求:IntelMPI 2017.0 | MPICH 3.3.1 | MVAPICH2 2.3.1 | OpenMPI 2.1.0
2.2 安装步骤
2.2.1安装netcdf库
在安装netcdf时,需要安装经典动态的netcdf c和fortran库(classic shared netCDF C and Fortran libraries),不需要支持netCDF4、 HDF5、 HDF4、 DAP client、 PnetCDF和 zlib。由于集群环境在安装netcdf时,默认会支持netCDF4和HDF5,因此建议重新安装netcdf。
netcdf的最小版本要求:NetCDF-C 4.2 | NetCDF-Fortran 4.4.2,本次安装均采用netcdf-c-4.7.0和netcdf-fortran-4.5.0。
2.2.1.1netcdf-c 安装
安装时需要添加--disable-netcdf-4和--disable-dap
tar -zxvf v4.7.0.tar.gz
cd netcdf-c-4.7.0
CC=icc CXX=icpc FC=ifort F77=ifort ./configure --prefix= /public /software/mathlib/netcdf/4.7.0/intel --disable-netcdf-4 --disable-dap
make
make check install
2.2.1.2 netcdf-fortran 安装
安装时需要指定netcdf-c的路径。
export LD_LIBRARY_PATH=/public/software/mathlib/netcdf/4.7.0 /intel/lib:$LD_LIBRARY_PATH
export LDFLAGS=-L/public/software/mathlib/netcdf/4.7.0/intel/lib
export CPPFLAGS=-I/public/software/mathlib/netcdf/4.7.0/intel/ include
CC=icc CXX=icpc FC=ifort F77=ifort ./configure --prefix=/public/software/mathlib/netcdf/4.7.0/intel
make
make check install
2.2.2 安装ioapi库
I/O API 提供netcdf库和CMAQ之间的接口,使CMAQ模型能够输入和输出结果。ioapi的最小版本要求:IOAPI 3.1。由于IOAPI 3.1存在一些bug,以及3.2版本安装更方便,本次安装ioapi-3.2版本。ioapi还有一个large版本(ioapi-3.2-large.tar.gz),large版本支持大量的输出文件和输出变量,将MXFILE3变量从64 扩展到 512,将MXVARS3变量从2048 扩展到16384。本文档只介绍ioapi-3.2版本的安装方法。
下载地址:https://www.cmascenter.org/ioapi/download/ioapi-3.2.tar.gz
large下载地址:https://www.cmascenter.org/ioapi/download/ioapi-3.2-large.tar.gz
解压文件进行主目录:
unzip ioapi-3.2-master.zip
cd ioapi-3.2-master
修改Makefile文件:(修改的地方已经标红)
BIN = Linux2_x86_64ifort
BASEDIR = ${PWD}
INSTALL = ${BASEDIR}
LIBINST = $(INSTALL)/$(BIN)
BININST = $(INSTALL)/$(BIN)
CPLMODE = nocpl
IOAPIDEFS =
PVMINCL =
NCFLIBS = -L/public/software/mathlib/netcdf/4.7.0/intel/lib -lnetcdff -lnetcdf
进入ioapi目录,修改Makeinclude.Linux2_x86_64ifort文件:CMAQ不支持openmp,需要注释OMP选项。
#OMPFLAGS = -openmp
#OMPLIBS = -openmp
退出ioapi目录,进入主目录ioapi-3.2-master。
export BIN=Linux2_x86_64ifort
make configure
make
编译完成后,在Linux2_x86_64ifort目录下会生成libioapi.a库文件。
进入ioapi目录,修改STATE3.EXT文件,去掉174行之后多余的&符号,否则编译CMAQ会报错。(只保留每行前面的&,去掉最后的&)
COMMON / BSTATE3 /
& P_ALP3, P_BET3, P_GAM3,
& XCENT3, YCENT3, XORIG3, YORIG3, XCELL3, YCELL3,
& VGTYP3, VGTOP3, VGLVS3,
& FINIT3, COUNT3, CURDATE, CURTIME, LOGDEV,
& CDFID3, FTYPE3, SDATE3, STIME3, TSTEP3, MXREC3,
& NVARS3, NLAYS3, NROWS3, NCOLS3, NTHIK3,
& TINDX3, NINDX3, SINDX3, LINDX3, WCNDX3, WRNDX3,
& XINDX3, YINDX3, ZINDX3, DXNDX3, DYNDX3, VINDX3,
& GDTYP3, VOLAT3, RONLY3,
& BSIZE3, LDATE3, LTIME3, NDATE3, NTIME3, ILAST3,
& VTYPE3,
& ILCNT3, NLIST3, IFRST3, ILIST3, BEGRC3, ENDRC3,
& STDOUT, PN_MODE
!! character portion of current I/O API state
COMMON / CSTATE3 /
& EXECN3, SCNDSC, FLIST3, GDNAM3, VLIST3, UNITS3, VERSN3
2.3 安装CMAQ
CMAQ源码下载地址:https://github.com/USEPA/CMAQ
CMAQ安装和海洋模式类似,需要新建一个算例,然后编译。
unzip 5.3.zip
cd CMAQ-5.3
编译bldit_project.csh,指定新建算例位置。修改完成后,执行bldit_project.csh即可。
set CMAQ_HOME = /public1/home/cmaq/CMAQv5.3
进入新建算例目录CMAQv5.3,修改config_cmaq.csh文件,指定IOAPI、NETCDF、MPI环境,MPI_LIB_DIR需要指定MPI的路径,不是MPI的lib路径。本次编译采用intel+intelmpi。具体修改如下:
setenv IOAPI_INCL_DIR /public1/home/cmaq/ioapi-3.2-master/ioapi
setenv IOAPI_LIB_DIR /public1/home/cmaq/ioapi-3.2-master/Linux2_x86_64ifort
setenv NETCDF_LIB_DIR /public1/home/cmaq/netcdf/4.7.0/lib
setenv NETCDF_INCL_DIR /public1/home/cmaq/netcdf/4.7.0/include
setenv NETCDFF_LIB_DIR /public1/home/cmaq/netcdf/4.7.0/lib
setenv NETCDFF_INCL_DIR /public1/home/cmaq/netcdf/4.7.0/include
setenv MPI_LIB_DIR /public/software/mpi/intelmpi/2017.4.239/intel64
修改完成后,执行./config_cmaq.csh intel,在当前目录会新建lib目录,将上述环境整合到当前目录。
./config_cmaq.csh intel
CMAQ模式主要包含4个模块,分别是前处理mcip、icon、bcon和核心模块cctm。依次编译上述模块。
编译mcip,进入PREP/mcip/src,修改Makefile文件,指定NETCDF和IOAPI路径,修改LIBS路径。修改完成后,执行make,会生成mcip.exe。
FC = ifort
NETCDF = /public1/home/cmaq/netcdf/4.7.0
IOAPI_ROOT = /public1/home/cmaq /ioapi-3.2-master
###FFLAGS = -g -O0 -check all -C -traceback -FR -I$(NETCDF)/include \
### -I$(IOAPI_ROOT)/Linux2_x86_64ifort
FFLAGS = -FR -O3 -traceback -I$(NETCDF)/include -I$(IOAPI_ROOT)/Linux2_x86_64ifort
LIBS = -L$(IOAPI_ROOT)/Linux2_x86_64ifort -lioapi \
-L$(NETCDF)/lib -lnetcdff -lnetcdf
编译icon,进入PREP/icon,执行./bldit_icon.csh intel,会生成ICON_v53.exe。
./bldit_icon.csh intel
编译icon,进入PREP/bcon,执行./bldit_bcon.csh intel,会生成BCON_v53.exe
./bldit_bcon.csh intel
编译cctm,进入CCTM/scripts,执行./bldit_cctm.csh intel,会生成CCTM_v53.exe。
./bldit_cctm.csh intel
三、软件测试
安装完成后,采用CMAQ自带的benchmark数据进行测试。
benchmark数据下载地址:ftp://newftp.epa.gov/exposure/CMAQ/V5_3/Benchmark/
算例描述:
版本:CMAQv5.3.0 + WRF3.8
区域:Southeast U.S.
网格数:80*100
分辨率:12km
垂直层数:35
排放清单:2016ff
化学机制:CB6R3_AE7
干沉降:M3DRY
运行步骤:
下载CMAQv5.3_Benchmark_2Day_Input_20190808.tar.gz数据,解压文件到指定目录。
tar –zxvf CMAQv5.3_Benchmark_2Day_Input_20190808.tar.gz
进入CCTM/scripts目录,修改run_cctm_Bench_2016_12SE1.csh脚本,指定输入数据存放路径、核心数。本次采用6*4=24核心。
… …
setenv INPDIR /public1/home/cmaq/CMAQv5.3/data/2016_12SE1
… …
@ NPCOL = 6; @ NPROW = 4
… …
修改完之后,直接执行脚本即可。
./run_cctm_Bench_2016_12SE1.csh