簡(jiǎn)介
CMAQ(Community Multiscale Air Quality通用多尺度空氣質(zhì)量)模型,是美國(guó)環(huán)保局開(kāi)發(fā)的第三代空氣質(zhì)量預(yù)報(bào)和評(píng)估系統(tǒng)(Models-3)的核心組成之一。是一套三維歐拉網(wǎng)格化的大氣化學(xué)和傳輸模擬系統(tǒng),能夠模擬整個(gè)對(duì)流層的臭氧,酸沉降,能見(jiàn)度和細(xì)顆粒物。整個(gè)模式遵循“一個(gè)大氣”理念,可以同時(shí)處理從局地到半球的不同空間尺度的多個(gè)復(fù)雜的空氣質(zhì)量問(wèn)題,作為一個(gè)有效的第三代空氣質(zhì)量模型與評(píng)價(jià)工具,其能夠支持從策略分析到大氣科學(xué)研究的各類空氣質(zhì)量模擬應(yīng)用。
配置流程
1.獲取源代碼和測(cè)試數(shù)據(jù)
本文檔所測(cè)試版本為:CMAQ-5.2
軟件獲取路徑為:
主程序源碼:https://github.com/USEPA/CMAQ/tree/5.2
依賴庫(kù)源碼:https://github.com/cjcoats/ioapi-3.2
測(cè)試 數(shù)據(jù)集 :https://www.epa.gov/cmaq/cmaq-inputs-and-test-case-data
CMAQ官網(wǎng):https://www.epa.gov/cmaq
本文以CMAQ-5.2為例,編譯安裝CMAQ。
依次使用如下命令,下載主程序源碼和依賴庫(kù)源碼,測(cè)試數(shù)據(jù)集需注冊(cè)后下載
git clone-b 5.2 https://github.com/USEPA/CMAQ.git CMAQ-5.2 git clone https://github.com/cjcoats/ioapi-3.2
2.基礎(chǔ)環(huán)境安裝
1)執(zhí)行如下命令,安裝必要的系統(tǒng)組件
yum install-y curl-devel libcurl-devel zlib-devel tcsh
2)執(zhí)行如下命令下載基礎(chǔ)環(huán)境軟件包
wget https://ftp.gnu.org/gnu/gcc/gcc-9.1.0/gcc-9.1.0.tar.gz wget https://download.open-mpi.org/release/open-mpi/v3.1/openmpi-3.1.4.tar.gz wget https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-1.10/hdf5-1.10.5/src/hdf5-1.10.5.tar.gz wget ftp://ftp.unidata.ucar.edu/pub/netcdf/netcdf-c-4.7.0.tar.gz wget ftp://ftp.unidata.ucar.edu/pub/netcdf/netcdf-fortran-4.4.5.tar.gz
3)依次執(zhí)行如下命令升級(jí)安裝最新版gcc編譯器(當(dāng)前為gcc v9.1.0)
tar-zxvf gcc-9.1.0.tar.gz cd gcc-9.1.0 ./contrib/download_prerequisites ./configure--prefix=/usr/local/gcc/9.1.0 make-j 4 make install cd-
4)依次執(zhí)行如下命令安裝并行庫(kù)OpenMPI(v3.1.4)
export GCC_HOME=/usr/local/gcc/9.1.0/ export PATH=$GCC_HOME/bin:$PATH export LD_LIBRARY_PATH=$GCC_HOME/lib:$GCC_HOME/lib64:$LD_LIBRARY_PATH export INCLUDE=$GCC_HOME/include:$INCLUDE tar-zxvf openmpi-3.1.4.tar.gz cd openmpi-3.1.4 ./configure--prefix=/usr/local/openmpi3--enable-orterun-prefix-by-default make-j 4 make install cd-
5)依次執(zhí)行如下命令安裝數(shù)據(jù)格式庫(kù)HDF5(v1.10.5)
export MPI_HOME=/usr/local/openmpi3 export PATH=$MPI_HOME/bin:$PATH export LD_LIBRARY_PATH=$MPI_HOME/lib:$LD_LIBRARY_PATH export INCLUDE=$MPI_HOME/include:$INCLUDE cd hdf5 ./configure--prefix=/usr/local//hdf5--enable-fortran--enable-parallel CC=mpicc FC=mpif90 CXX=mpicxx make-j 4 make install cd-
6)依次執(zhí)行如下命令安裝數(shù)據(jù)格式庫(kù)NetCDF(v4.x.x)
export HDF5=/usr/local/hdf5 export PATH=$HDF5/bin:$PATH export LD_LIBRARY_PATH=$HDF5/lib:$LD_LIBRARY_PATH export INCLUDE=$HDF5/include:$INCLUDE tar-zxvf netcdf-c-4.7.0.tar.gz cd netcdf-c-4.7.0 ./configure--prefix=/usr/local/netcdf LDFLAGS="-L$HDF5/lib"CPPFLAGS="-I$HDF5/include"CC=mpicc--disable-dap make-j 4 make install cd- export NETCDF=/usr/local/netcdf export PATH=$NETCDF/bin:$PATH export LD_LIBRARY_PATH=$NETCDF/lib:$LD_LIBRARY_PATH export INCLUDE=$NETCDF/include:$INCLUDE tar-zxvf netcdf-fortran-4.4.5.tar.gz cd netcdf-fortran-4.4.5 ./configure--prefix=/usr/local/netcdf CPPFLAGS="-I$HDF5/include-I$NETCDF/include"LDFLAGS="-L$HDF5/lib-L$NETCDF/lib"CC=mpicc FC=mpif90 F77=mpif90 make-j 4 make install cd-
3.安裝環(huán)境準(zhǔn)備
1)依次使用如下命令,創(chuàng)建安裝目錄,拷貝下載的源碼至安裝目錄
mkdir-p/usr/local/cmaq cp-r CMAQ-5.2/usr/local/cmaq cp-r ioapi-3.2/usr/local/cmaq
1)依次使用如下命令,創(chuàng)建依賴組件環(huán)境變量加載腳本
vim/usr/local/cmaq/env-cmaq.sh
依次輸入如下行:
export GCC_HOME=/usr/local/gcc/9.1.0/ export PATH=$GCC_HOME/bin:$PATH export LD_LIBRARY_PATH=$GCC_HOME/lib:$GCC_HOME/lib64:$LD_LIBRARY_PATH export INCLUDE=$GCC_HOME/include:$INCLUDE export MPI_HOME=/usr/local/openmpi3 export PATH=$MPI_HOME/bin:$PATH export LD_LIBRARY_PATH=$MPI_HOME/lib:$LD_LIBRARY_PATH export INCLUDE=$MPI_HOME/include:$INCLUDE export HDF5=/usr/local/hdf5 export PATH=$HDF5/bin:$PATH export LD_LIBRARY_PATH=$HDF5/lib:$LD_LIBRARY_PATH export INCLUDE=$HDF5/include:$INCLUDE export NETCDF=/usr/local/netcdf export PATH=$NETCDF/bin:$PATH export LD_LIBRARY_PATH=$NETCDF/lib:$LD_LIBRARY_PATH export INCLUDE=$NETCDF/include:$INCLUDE
保存并退出vim。
2)使用如下命令,加載環(huán)境變量
source/usr/local/cmaq/env-cmaq.sh
4.依賴庫(kù)安裝
1)依次使用如下命令,進(jìn)入依賴庫(kù)安裝目錄,并復(fù)制相關(guān)配置文件
cd/usr/local/cmaq/ioapi-3.2 cp ioapi/Makeinclude.Linux2_ia64gfort ioapi/Makeinclude.Linux4_aarch64
2)使用如下命令,編輯上述復(fù)制的配置文件
vim ioapi/Makeinclude.Linux4_aarch64
注釋FSFLAGS關(guān)鍵字對(duì)應(yīng)的行,如:
#FSFLAGS=-save#gfortran不識(shí)別-save參數(shù),此參數(shù)用于保存子程序每次運(yùn)行時(shí)的變量值。
保存并退出vim。
3)依次使用如下命令,復(fù)制并編輯配置文件
cp m3tools/Makefile.nocpl m3tools/Makefile vim m3tools/Makefile
為L(zhǎng)IBS變量完善NetCDF路徑,如:
LIBS=-L${OBJDIR}-lioapi-L/usr/local/netcdf/lib-lnetcdff-lnetcdf$(OMPLIBS)$(ARCHLIB)$(ARCHLIBS)保存并退出vim。
4)依次使用如下命令,復(fù)制并編輯配置文件
rm-f Makefile cp Makefile.template Makefile vim Makefile
修改BIN變量值,與上文一致,如:
BIN=Linux4_aarch64
修改NCFLIBS環(huán)境變量,完善HDF5和NetCDF路徑,如:
NCFLIBS=-L/usr/local/netcdf/lib-lnetcdff-lnetcdf-L/usr/local/hdf5/lib-lhdf5_hl-lhdf5-lz
去除IOAPIDEFS的注釋,并確認(rèn)其值,如:
IOAPIDEFS="-DIOAPI_NCF4"
保存并退出vim。
5)使用如下命令,執(zhí)行依賴庫(kù)編譯
make BIN=Linux4_aarch64
5.主程序安裝
1)依次使用如下命令,進(jìn)入主程序源碼目錄,并編輯配置文件
cd/usr/local/cmaq/CMAQ-5.2 vim bldit_project.csh
變更CMAQ_HOME的值,明確工作目錄,如:
set CMAQ_HOME=/usr/local/cmaq/CMAQ_Project
保存并退出vim。
2)使用如下命令,創(chuàng)建初始化所需文件
./bldit_project.csh
3)依次使用如下命令,進(jìn)入工作目錄并編輯配置文件
cd../CMAQ_Project/ vim config_cmaq.csh
在“case gcc”段落區(qū)域修改依賴庫(kù)等的路徑信息,如:
setenv IOAPI_MOD_DIR/usr/local/cmaq/ioapi-3.2/Linux4_aarch64/ setenv IOAPI_INCL_DIR/usr/local/cmaq/ioapi-3.2/ioapi/ setenv IOAPI_LIB_DIR/usr/local/cmaq/ioapi-3.2/Linux4_aarch64/ setenv NETCDF_LIB_DIR/usr/local/netcdf/lib/ setenv NETCDF_INCL_DIR/usr/local/netcdf/include/ setenv MPI_LIB_DIR/usr/local/openmpi3/
為“netcdf_lib”變量添加openmp屬性,如:
setenv netcdf_lib"-lnetcdf-lnetcdff-lgomp"#>-lnetcdff-lnetcdf for netCDF v4.2.0 and later
保存并退出vim。
4)使用如下命令,鏈接各種依賴庫(kù)
./config_cmaq.csh gcc 9.1.0
5)依次使用如下命令,進(jìn)入編譯目錄,并編譯主程序
cd CCTM/scripts/ ./bldit_cctm.csh gcc 9.1.0
編譯完成后,會(huì)在BLD_CCTM_v52_gcc9.1.0目錄下生成CMAQ的可執(zhí)行程序

6.測(cè)試
1)執(zhí)行如下命令,進(jìn)入測(cè)試目錄并配置運(yùn)行腳本
cd/usr/local/cmaq/CMAQ_Project/CCTM/scripts vim run_cctm.csh
修改“compiler變量值”為“gcc”,如:
setenv compiler gcc
新增“compilerVrsn”變量并賦值“9.1.0”,如:
set compilerVrsn=9.1.0

修改“NPCOL”和“NPROW”變量值,其值的乘積與并行核心數(shù)相等,如:
NPCOL=2; NPROW=2
修改OpenMPI運(yùn)行參數(shù),如:
time mpirun-np$NPROCS--allow-run-as-root$BLD/$EXEC

保存并退出vim。
2)執(zhí)行如下命令,解壓縮注冊(cè)下載得到的算例輸入文件至工作目錄
tar-zxvf CMAQv5.2_Benchmark_inputdata.tar.gz.xz-C/usr/local/cmaq/CMAQ_project/data
3)使用如下命令,運(yùn)行測(cè)試腳本
./run_cctm.csh
正確執(zhí)行完成后,計(jì)算結(jié)果保存在如下目錄:
/data/cuibotao/cmaq/CMAQ_Project/data/output_CCTM_v52_gcc9.1.0_inputdata
已知問(wèn)題匯總
問(wèn)題現(xiàn)象1
運(yùn)行測(cè)試腳本時(shí),報(bào)如下錯(cuò)誤:

問(wèn)題原因
測(cè)試腳本使用cshell,無(wú)權(quán)限移除限制。
問(wèn)題解決
注釋測(cè)試腳本中“unlimit”關(guān)鍵字對(duì)應(yīng)行,在shell終端執(zhí)行如下命令后,然后運(yùn)行測(cè)試腳本,如:
ulimit-s unlimited ./run_cctm.csh
問(wèn)題現(xiàn)象2
編譯主程序出現(xiàn)如下錯(cuò)誤:

問(wèn)題原因
數(shù)據(jù)格式錯(cuò)誤
問(wèn)題解決
刪除“/usr/local/cmaq/ioapi-3.2/ioapi/STATE3.EXT”文件中末尾若干行的行尾“&”符號(hào),如下圖,刪除紅色框中的“&”符號(hào):
