unset
简介
CMAQ
(Community Multiscale Air Quality)系统是由美国国家环境保护局(EPA, Environmental Protection Agency)于1998年发布,是用于估算
臭氧、颗粒物、有毒化合物和酸沉降
等大气污染物的模型。
CMAQ模型可与多种工具结合起来,比如区域气象模型WRF、大气污染源排放清单处理工具SMOKE等。
CMAQ的架构
unset
unset
安装流程
unset
unset
本文采用Intel编译器进行
unset
unset
安装环境准备
unset
unset
在安装基础包时,需要做好以下准备
(1)
确定使用编译器的类型
:GCC编译器还是intel编译器;
(2)我这里选择的intel编译器,因此需要
注释掉之前
的gcc编译的各类包的
环境变量
;
# 我建议你先备份一下bashrc再修改: cp ~/.bashrc bashrc_copy.txt) vim ~/.bashrc#
然后注释掉不同编译器的环境变量 ........
(3)CMAQ官方推荐python3.6以上的版本,因此
先创建一个conda虚拟环境
中,下面所有的操作都在该环境中进行;
conda create --name CMAQ_env python=3.10 conda activate CMAQ_env
(4)
统一用intel编译器进行各类包的安装
;
我使用的超算进行安装,可以用module,在bashrc中使用module加载intel编译器:
# 查看可以使用的编译器 module avail# 使用制定编译器 module load intel/2020u4
unset
unset
安装依赖包
unset
unset
ZLIB安装
下载zlib的安装包(https://github.com/madler/zlib/releases),然后解压开始安装。
配置编译选项
CC=icc CXX=icc FC=ifort CPP='icpc -E' CPPFLAGS='-fPIC' ./configure --prefix=/data/home/guolf/guolf/CR/wrfinstalll/Build_WRF/LIBRARIES/zlib_cmaq_icc_compile
编译
make make install
zilib安装成功
添加环境变量
# 打开bashrc vi ~/.bashrc# 适用于conda环境 CMAQ 的zlib export LD_LIBRARY_PATH=/data/home/guolf/guolf/CR/wrfinstalll/Build_WRF/LIBRARIES/zlib_cmaq_icc_compile/lib:$LD_LIBRARY_PATH export PATH=/data/home/guolf/guolf/CR/wrfinstalll/Build_WRF/LIBRARIES/zlib_cmaq_icc_compile/bin:$PATH
MPICH安装
下载mpich的安装包(https://github.com/pmodels/mpich/releases),然后解压开始安装。
解压:
tar -xzvf mpich-4.2.2.tar.gz -C mpich_cmaq_icc/
配置编译选项:
# 3.4.2版本安装 CC=icc CXX=icc FC=ifort CPP='icpc -E' CPPFLAGS='-fPIC' ./configure --prefix=/data/home/guolf/guolf/CR/wrfinstalll/Build_WRF/LIBRARIES/mpich_cmaq_icc_3.4.2_compile --with-device=ch3 #或者安装4.4.2版本(我测试了两个版本,根据你自己环境选择mpich版本) CC=icc CXX=icpc FC=ifort CPP='icpc -E' CPPFLAGS='-fPIC' CFLAGS='-std=c99 -fPIC' CXXFLAGS='-std=c++11 -fPIC' FFLAGS='-fPIC' ./configure --prefix=/data/home/guolf/guolf/CR/wrfinstalll/Build_WRF/LIBRARIES/mpich_cmaq_icc_compile --with-device=ch3
设置 C 编译器为 Intel 的
icc
编译器。
设置 C++ 编译器为 Intel 的
icc
编译器(通常是
icpc
,但这里也是
icc
)。
设置 Fortran 编译器为 Intel 的
ifort
编译器。
设置 C 预处理器为 Intel 的
icpc -E
。
-E
选项表示只运行预处理器,不进行编译。
设置预处理器标志,
-fPIC
表示生成与位置无关的代码(Position Independent Code),这对于创建共享库是必需的。
**
CFLAGS='-std=c99 -fPIC'
**:
这个选项告诉 C 编译器使用 C99 标准进行编译。C99 标准允许在
for
循环中声明变量。
**
CXXFLAGS='-std=c++11'
**:
这个选项告诉 C++ 编译器使用 C++11 标准进行编译。C++11 提供了许多现代化的语言特性和标准库功能。
**
--prefix=/data/home/guolf/guolf/CR/wrfinstalll/Build_WRF/LIBRARIES/mpich_cmaq_icc_compile
**:
指定安装路径为
/home/rain/Build_CMAQ/LIBRARIES/mpich_cmaq_icc_compile
。编译安装完成后,MPICH 的所有文件将安装在这个目录下。
指定使用的通信设备为
ch3
,这是 MPICH 的一个通信设备模块(Channel Interface)。
ch3
是 MPICH 的默认设备模块之一,支持多种网络接口。
configure的完成界面
mpich安装:
# 并行make make# 安装 make install
mpich的intel编译成功
配置环境变量:
#把bin和lib写入到bashrc中 vi ~/.bashrc#适用于conda环境 CMAQ 的mpich export PATH=/data/home/guolf/guolf/CR/wrfinstalll/Build_WRF/LIBRARIES/mpich_cmaq_icc_compile/bin:$PATH export LD_LIBRARY_PATH=/data/home/guolf/guolf/CR/wrfinstalll/Build_WRF/LIBRARIES/mpich_cmaq_icc_compile/lib:$LD_LIBRARY_PATH #刷新 source ~/.bashrc
设置mpigi软链接
在后续的CMAQ的安装中,如果不设置软链接,可能会报错。
cd /data/home/guolf/guolf/CR/wrfinstalll/Build_WRF/LIBRARIES/mpich_cmaq_icc_3.4.2_compile cd lib #设置名为libmpi的软链接 ln -s libmpi.la mpigi.la ln -s libmpi.so mpigi.so
CURL安装
下载CURL的安装包(https://github.com/curl/curl/releases),然后解压开始安装。
make
CC=icc CXX=icc FC=ifort CPP='icpc -E' CPPFLAGS='-fPIC' ./configure --prefix=/data/home/guolf/guolf/CR/wrfinstalll/Build_WRF/LIBRARIES/curl_icc --without-ssl make make install
配置环境变量
# 适用于conda环境 CMAQ 的curl export PATH=/data/home/guolf/guolf/CR/wrfinstalll/Build_WRF/LIBRARIES/curl_icc/bin:$PATH export LD_LIBRARY_PATH=/data/home/guolf/guolf/CR/wrfinstalll/Build_WRF/LIBRARIES/curl_icc/lib:$LD_LIBRARY_PATH
检查
which curl curl --version
netcdf的安装
前往github下载netcdf-c(https://github.com/Unidata/netcdf-c/releases)和netcdf-fortran(https://github.com/Unidata/netcdf-fortran/releases)的安装包
安装netcdf的C语言版本
编译准备
# 放入之前安装的curl软件的lib和include路径 CC=icc CXX=icc FC=ifort CPP='icpc -E' CPPFLAGS="-fPIC -I/data/home/guolf/guolf/CR/wrfinstalll/Build_WRF/LIBRARIES/curl_icc/include" LDFLAGS="-L/data/home/guolf/guolf/CR/wrfinstalll/Build_WRF/LIBRARIES/curl_icc/lib" ./configure --prefix=/data/home/guolf/guolf/CR/wrfinstalll/Build_WRF/LIBRARIES/netcdf_icc_compile --disable-netcdf-4
make安装
make -j4 make install
安装netcdf的Fortran语言版本
编译准备
netcdf-fortran
库是基于
netcdf-c
的Fortran接口库,netcdf-c的依赖库为curl,而netcdf-fortran的依赖库为netcdf-c。参数需要加上NECDF-C的路径。
export NETCDF=/data/home/guolf/guolf/CR/wrfinstalll/Build_WRF/LIBRARIES/netcdf_icc_compile
./configure --prefix=$NETCDF --enable-shared
CC=icc CXX=icc FC=ifort CPP='icpc -E' CPPFLAGS="-fPIC -I/data/home/guolf/guolf/CR/wrfinstalll/Build_WRF/LIBRARIES/netcdf_icc_compile/include" LDFLAGS="-L/data/home/guolf/guolf/CR/wrfinstalll/Build_WRF/LIBRARIES/netcdf_icc_compile/lib" LD_LIBRARY_PATH="/data/home/guolf/guolf/CR/wrfinstalll/Build_WRF/LIBRARIES/netcdf_icc_compile/lib:$LD_LIBRARY_PATH " ./configure --prefix=/data/home/guolf/guolf/CR/wrfinstalll/Build_WRF/LIBRARIES/netcdf_icc_compile
make安装
make -j4 make install
环境变量添加
vi ~/.bashrc#适用于conda环境 CMAQ 的netcdf export PATH=/data/home/guolf/guolf/CR/wrfinstalll/Build_WRF/LIBRARIES/netcdf_icc_compile/bin:$PATH export NETCDF=/data/home/guolf/guolf/CR/wrfinstalll/Build_WRF/LIBRARIES/netcdf_icc_compile/netcdfexport LD_LIBRARY_PATH=/data/home/guolf/guolf/CR/wrfinstalll/Build_WRF/LIBRARIES/netcdf_icc_compile/lib:$LD_LIBRARY_PATH
IOAPI的安装
IOAPI (Input/Output Application Programming Interface)是一个用于CMAQ模型的输入输出的软件包,主要用于数据格式转换,将不同格式的数据(如NetCDF、二进制等)转换为CMAQ模型所需的统一数据格式。
环境准备
该包安装较为复杂,请确保之前的包(netcdf、zlib等是用intel编译的,再进行下一步):
# 解压 tar -xzvf ioapi-3.2-2020111.tar.gz -C ioapi32# 先创建一个安装目录
mkdir /home/rain/Build_CMAQ/LIBRARIES/ioapi32_compile
然后在解压目录开始下面操作:
# 写入环境变量 vim ~/.bashrc# 写入路径(根据自己的编译器决定) export BIN=Linux2_x86_64ifort mkdir Linux2_x86_64ifort# 创建netcdf库、mpich库和zlib库的软链接 # netcdf ln -sf /data/home/guolf/guolf/CR/wrfinstalll/Build_WRF/LIBRARIES/netcdf_icc_compile/lib/* Linux2_x86_64ifort/# mpich ln -sf /data/home/guolf/guolf/CR/wrfinstalll/Build_WRF/LIBRARIES/mpich_cmaq_icc_3.4.2_compile/lib/* Linux2_x86_64ifort/ Linux2_x86_64ifort/# zlib ln -sf /data/home/guolf/guolf/CR/wrfinstalll/Build_WRF/LIBRARIES/zlib_cmaq_icc_compile/lib/* Linux2_x86_64ifort/
cp ioapi/Makefile.nocpl ioapi/Makefile cp m3tools/Makefile.nocpl m3tools/Makefile cp Makefile.template Makefile vi Makefile #在Makefile中添加下面的内容 BIN =Linux2_x86_64ifort VERSION = 3.2-${CPLMODE} BASEDIR = ${PWD} INSTALL =/data/home/guolf/guolf/CR/wrfinstalll/Build_WRF/LIBRARIES/ioapi32_compile LIBINST =/data/home/guolf/guolf/CR/wrfinstalll/Build_WRF/LIBRARIES/ioapi32_compile/lib BININST =/data/home/guolf/guolf/CR/wrfinstalll/Build_WRF/LIBRARIES/ioapi32_compile/bin CPLMODE = nocpl IOAPIDEFS = PVMINCL = NCFLIBS = -lnetcdff -lnetcdf IODIR = $(BASEDIR)/ioapi FIXDIR = $(IODIR)/fixed_src HTMLDIR = $(BASEDIR)/HTML TOOLDIR = $(BASEDIR)/m3tools OBJDIR = $(BASEDIR)/$(BIN) NCFLIBS =-L/data/home/guolf/guolf/CR/wrfinstalll/Build_WRF/LIBRARIES/netcdf_icc_compile/lib -lnetcdf -lnetcdff
vi /data/home/guolf/guolf/CR/wrfinstalll/Build_WRF/LIBRARIES/ioapi32/ioapi/Makeinclude.Linux2_x86_64ifort AR = ar CC = mpiicc CXX = mpiicpc FC = mpiifort -auto -warn notruncated_source -static-intel OMPFLAGS = -qopenmp OMPLIBS = -qopenmp# ARCHLIB = -Bstatic make configure
configure会有一些警告,不用管
:
vi ioapi/Makefile# 修改路径 BASEDIR = /data/home/guolf/guolf/CR/wrfinstalll/Build_WRF/LIBRARIES/ioapi32 INSTDIR = /data/home/guolf/guolf/CR/wrfinstalll/Build_WRF/LIBRARIES/ioapi32_compile/Linux2_x86_64ifort vi m3tools/Makefile# 修改路径 BASEDIR = /data/home/guolf/guolf/CR/wrfinstalll/Build_WRF/LIBRARIES/ioapi32 INSTDIR = /data/home/guolf/guolf/CR/wrfinstalll/Build_WRF/LIBRARIES/ioapi32_compile/Linux2_x86_64ifort
安装ioapi
make all -j 4 make install
出现这个安装提示,IOAPI安装完成。
移动其他内容
# 将fixed_src编译内容复制到安装目录 mkdir /data/home/guolf/guolf/CR/wrfinstalll/Build_WRF/LIBRARIES/ioapi32_compile/fixed_src/ cp ioapi/fixed_src/* /data/home/guolf/guolf/CR/wrfinstalll/Build_WRF/LIBRARIES/ioapi32_compile/fixed_src/ cp /data/home/guolf/guolf/CR/wrfinstalll/Build_WRF/LIBRARIES/ioapi32_compile/fixed_src/* /data/home/guolf/guolf/CR/wrfinstalll/Build_WRF/LIBRARIES/ioapi32_compile/lib/ #Linux2_x86_64ifort的软链接复制到安装目录 mkdir /data/home/guolf/guolf/CR/wrfinstalll/Build_WRF/LIBRARIES/ioapi32_compile/Linux2_x86_64ifort/ cp -rf Linux2_x86_64ifort/* /data/home/guolf/guolf/CR/wrfinstalll/Build_WRF/LIBRARIES/ioapi32_compile/Linux2_x86_64ifort/# 移动编译文件到lib或者bin cp -rf /data/home/guolf/guolf/CR/wrfinstalll/Build_WRF/LIBRARIES/ioapi32_compile/Linux2_x86_64ifort/* /data/home/guolf/guolf/CR/wrfinstalll/Build_WRF/LIBRARIES/ioapi32_compile/bin/
自此,ioapi安装完毕,lib文件夹的内容如图所示:
unset
unset
CMAQ安装
unset
unset
环境准备
在安装完毕后,我的
bashrc
环境变量设置如下:
# .bashrc # Source global definitions if [ -f /etc/bashrc ]; then . /etc/bashrc fi cd /data/home/guolf/guolf/CR/wrfinstalll # User specific aliases and functions alias squeue='squeue -u guolf' #conda初始化,调出CMAQ的conda环境
# >>> conda initialize >>> # !! Contents within this block are managed by 'conda init' !! __conda_setup="$('/data/home/guolf/anaconda3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)" if [ $? -eq 0 ]; then eval "$__conda_setup" else if [ -f "/data/home/guolf/anaconda3/etc/profile.d/conda.sh" ]; then . "/data/home/guolf/anaconda3/etc/profile.d/conda.sh" else export PATH="/data/home/guolf/anaconda3/bin:$PATH" fi fi unset __conda_setup #CAMQ的环境激活 conda activate CMAQ_env #每次启动终端调用intel编译器 module load intel/2020u4 # 设置库路径和编译器 export DIR=/data/home/guolf/guolf/CR/wrfinstalll/Build_WRF/LIBRARIES #用intel编译器 # 选择使用 ICC 编译器 export CC=icc export CXX=icc export FC=ifort export FCFLAGS=-m64 export F77=ifort export FFLAGS=-m64 # 确保 F90 和 F90FLAGS 没有设置 unset F90 unset F90FLAGS #HDF5 export PATH=/data/home/guolf/anaconda3/bin:$PATH #ioapi export BIN=Linux2_x86_64ifort #适用于conda环境 CMAQ 的curl export PATH=/data/home/guolf/guolf/CR/wrfinstalll/Build_WRF/LIBRARIES/curl_icc/bin:$PATH export LD_LIBRARY_PATH=/data/home/guolf/guolf/CR/wrfinstalll/Build_WRF/LIBRARIES/curl_icc/lib:$LD_LIBRARY_PATH #适用于conda环境 CMAQ 的zlib export LD_LIBRARY_PATH=/data/home/guolf/guolf/CR/wrfinstalll/Build_WRF/LIBRARIES/zlib_cmaq_icc_compile/lib:$LD_LIBRARY_PATH export PATH=/data/home/guolf/guolf/CR/wrfinstalll/Build_WRF/LIBRARIES/zlib_cmaq_icc_compile/bin:$PATH #适用于conda环境 CMAQ 的mpich export PATH=/data/home/guolf/guolf/CR/wrfinstalll/Build_WRF/LIBRARIES/mpich_cmaq_icc_3.4.2_compile/bin:$PATH export LD_LIBRARY_PATH=/data/home/guolf/guolf/CR/wrfinstalll/Build_WRF/LIBRARIES/mpich_cmaq_icc_3.4.2_compile/lib:$LD_LIBRARY_PATH export MPICH=/data/home/guolf/guolf/CR/wrfinstalll/Build_WRF/LIBRARIES/mpich_cmaq_icc_3.4.2_compile #适用于conda环境 CMAQ 的netcdf export PATH=/data/home/guolf/guolf/CR/wrfinstalll/Build_WRF/LIBRARIES/netcdf_icc_compile/bin:$PATH export NETCDF=/data/home/guolf/guolf/CR/wrfinstalll/Build_WRF/LIBRARIES/netcdf_icc_compile export LD_LIBRARY_PATH=/data/home/guolf/guolf/CR/wrfinstalll/Build_WRF/LIBRARIES/netcdf_icc_compile/lib:$LD_LIBRARY_PATH #设置编译软件需要用到netcdf库 export CPPFLAGS=-I$NETCDF/include export LDFLAGS=-L$NETCDF/lib
配置文件
前往网站下载CMAQ安装包(https://github.com/USEPA/CMAQ),解压:
mkdir CMAQ tar -xzvf CMAQ-CMAQv5.3.2_12Oct2020.tar.gz -C CMAQ mv /data/home/guolf/guolf/CR/wrfinstalll/othermodel/CMAQ/CMAQ-CMAQv5.3.2_12Oct2020/* /data/home/guolf/guolf/CR/wrfinstalll/othermodel/CMAQ/
为了防止后续弄错安装文件包和编译后文件,建议就在解压文件中安装,即待会设置中:CMAQ_HOME和CMAQ_REPO都为/data/home/guolf/guolf/CR/wrfinstalll/othermodel/CMAQ。
cp bldit_project.csh bldit_project.csh.old vi bldit_project.csh# 设置安装路径 set CMAQ_HOME = /data/home/guolf/guolf/CR/wrfinstalll/othermodel/CMAQ# 运行bldit_project.csh ./bldit_project.csh
cp config_cmaq.csh config_cmaq.csh.old vi config_cmaq.csh# 设置配置文件config_cmaq.csh # 找到这两个参数 setenv CMAQ_HOME /data/home/guolf/guolf/CR/wrfinstalll/othermodel/CMAQ setenv CMAQ_REPO /data/home/guolf/guolf/CR/wrfinstalll/othermodel/CMAQ # 找到对应编译器的情况(intel或者gcc编译器),我这里是用的intel编译器 case intel: setenv IOAPI_INCL_DIR /data/home/guolf/guolf/CR/wrfinstalll/Build_WRF/LIBRARIES/ioapi32_compile/bin setenv IOAPI_LIB_DIR /data/home/guolf/guolf/CR/wrfinstalll/Build_WRF/LIBRARIES/ioapi32_compile/lib setenv NETCDF_LIB_DIR /data/home/guolf/guolf/CR/wrfinstalll/Build_WRF/LIBRARIES/netcdf_icc_compile/lib setenv NETCDF_INCL_DIR /data/home/guolf/guolf/CR/wrfinstalll/Build_WRF/LIBRARIES/netcdf_icc_compile/include setenv NETCDFF_LIB_DIR /data/home/guolf/guolf/CR/wrfinstalll/Build_WRF/LIBRARIES/netcdf_icc_compile/lib setenv NETCDFF_INCL_DIR /data/home/guolf/guolf/CR/wrfinstalll/Build_WRF/LIBRARIES/netcdf_icc_compile/include setenv MPI_INCL_DIR /data/home/guolf/guolf/CR/wrfinstalll/Build_WRF/LIBRARIES/mpich_cmaq_icc_compile/include setenv MPI_LIB_DIR /data/home/guolf/guolf/CR/wrfinstalll/Build_WRF/LIBRARIES/mpich_cmaq_icc_compile/lib setenv myLINK_FLAG "-qopenmp" setenv extra "" setenv mpi_lib "lmpich"
# 配置环境 ./config_cmaq.csh intel
运行config_cmaq.csh,不能有报错,
只显示:Compiler is set to intel
。
如果有报错,先解决报错。
运行成功后,才能进行下一步。
安装ICON
ICON(初始条件)是 为每种化学物质提供初始和边界条件的数据。
cd PREP/icon/scripts ./config_cmaq.csh intel cd BLD_ICON_v532_intel &&ls *.exe
运行成功后,会有一个ICON_V532.exe程序。
安装BCON
BCON,边界条件,为每种化学物质提供边界条件的数据。
cd /data/home/guolf/guolf/CR/wrfinstalll/othermodel/CMAQ# 每次安装单个程序前,都在主文件夹设置编译器为intel ./config_cmaq.csh intel cd /data/home/guolf/guolf/CR/wrfinstalll/othermodel/CMAQ/PREP/bcon/scripts# 安装BCON ./bldit_bcon.csh intel
安装MCIP
气象-化学接口处理器(MCIP)是将区域气象模型的输出数据准备为CMAQ的输入数据。
cd /data/home/guolf/guolf/CR/wrfinstalll/othermodel/CMAQ# 每次安装单个程序前,都在主文件夹设置编译器为intel ./config_cmaq.csh intel# 打开mcip的文件夹 cd /data/home/guolf/guolf/CR/wrfinstalll/othermodel/CMAQ/PREP/mcip/src# 编辑makefile vi Makefile# 修改以下内容,填入netcdf的路径和IOAPI的路径 # ...Intel Fortran FC = ifort NETCDF = /data/home/guolf/guolf/CR/wrfinstalll/Build_WRF/LIBRARIES/netcdf_icc_compile IOAPI_ROOT = /data/home/guolf/guolf/CR/wrfinstalll/Build_WRF/LIBRARIES/ioapi32_compile# ##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)/lib LIBS = -L$(IOAPI_ROOT)/bin -lioapi \ -L$(NETCDF)/lib -lnetcdff -lnetcdf\ -qopenmp DEFS =
设置好之后,make生成.exe文件
make
安装CCTM
CCTM,化学传输模型,包含预测污染物浓度的主要方程,考虑多种重要过程如排放、化学反应、云和降水的吸收以及干沉降。
cd /data/home/guolf/guolf/CR/wrfinstalll/othermodel/CMAQ# 每次安装单个程序前,都在主文件夹设置编译器为intel ./config_cmaq.csh intel cd /home/rain/Build_CMAQ/CMAQ_Project/CCTM/scripts #尝试安装,这次安装会报错,会生成一个BLD_CCTM开头的文件夹 ./bldit_cctm.csh intel #复制文件 cp -rf /data/home/guolf/guolf/CR/wrfinstalll/Build_WRF/LIBRARIES/mpich_cmaq_icc_3.4.2_compile/include/* BLD_CCTM_v532_intel/# 再次安装 ./bldit_cctm.csh intel# 检查是否成功 会生成一个BLD_CCD ls -al BLD_CCTM_v532_intel/CCTM_*.exe
安装combin