CMAQ是什么

簡(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):