WRF/CMAQ模型的编译
一、WPS和WRF编译
Compiling WRFhttps://www2.mmm.ucar.edu/wrf/OnLineTutorial/compilation_tutorial.phpFull WRF and WPS Installation Example (GNU) | WRF & MPAS-A Support Forum
https://forum.mmm.ucar.edu/threads/full-wrf-and-wps-installation-example-gnu.12385/
二、CMAQ编译
Intel编译器安装WRF-CMAQ-CSDN博客https://blog.csdn.net/weixin_55713760/article/details/120943523WRF编译也可以按照这个链接
2.1. 修改化学机制
setenv Mechanism saprc07tic_ae7i_aq
set ModMech = MECHS/${Mechanism}
自己修改(增减)机制参考下面的链接
CMAQ/DOCS/Users_Guide/Tutorials/CMAQ_UG_tutorial_chemicalmechanism.md at 5.5+ · USEPA/CMAQ · GitHubhttps://github.com/USEPA/CMAQ/blob/5.5%2B/DOCS/Users_Guide/Tutorials/CMAQ_UG_tutorial_chemicalmechanism.md
三、环境库的安装
# 文件夹定义
export DIR=/data/home/gzq25_slurm/libraries
export TARDIR=${DIR}/tar_gz
3.1 # intel
直接copy之前的文件夹
source /data/home/gzq25_slurm/libraries/intel/oneapi/setvars.sh --force
which icc
which ifort
which mpiifort
mpiifort -show
3.2 # zlib
cd ${DIR}
rm -rf zlib-1.2.11
tar -xzf ${TARDIR}/zlib-1.2.11.tar.gz
mkdir -p ${DIR}/zlib/1.2.11
cd ${DIR}/zlib-1.2.11
CC=icc CXX=icc FC=ifort CPP='icpc -E' CPPFLAGS='-fPIC' ./configure --prefix=${DIR}/zlib/1.2.11 |& tee configure.log
make -j4 |& tee make.log
make check |& tee make_check.log
make install |& tee make_install.log
3.3 # curl
export ZLIB=${DIR}/zlib/1.2.11
export PATH=${ZLIB}/bin:${PATH}
export LD_LIBRARY_PATH=${ZLIB}/lib:${LD_LIBRARY_PATH}
cd ${DIR}
rm -rf curl-7.75.0
tar -xzf ${DIR}/tar_gz/curl-7.75.0.tar.gz
mkdir -p ${DIR}/curl/7.75.0
cd ${DIR}/curl-7.75.0
CC=icc CXX=icc FC=ifort CPP='icpc -E' CPPFLAGS='-fPIC' ./configure --prefix=${DIR}/curl/7.75.0 --with-zlib=${ZLIB} --without-ssl |& tee configure.log
make -j4 |& tee make.log
make install |& tee make_install.log
export CURL=${DIR}/curl/7.75.0
ls -lh \
${CURL}/bin/curl \
${CURL}/bin/curl-config \
${CURL}/lib/libcurl.a \
${CURL}/include/curl/curl.h
export PATH=${CURL}/bin:${PATH}
export LD_LIBRARY_PATH=${CURL}/lib:${ZLIB}/lib:${LD_LIBRARY_PATH}
3.4 # hdf5
cd ${DIR}
rm -rf hdf5-1.10.5
tar -xjf ${TARDIR}/hdf5-1.10.5.tar.bz2
mkdir -p ${DIR}/hdf5/1.10.5
cd ${DIR}/hdf5-1.10.5
CC=icc CXX=icpc FC=ifort F77=ifort F90=ifort CFLAGS="-O2 -fPIC" CXXFLAGS="-O2 -fPIC" FFLAGS="-O2 -fPIC" FCFLAGS="-O2 -fPIC" ./configure --prefix=${DIR}/hdf5/1.10.5 --with-zlib=${ZLIB} --enable-fortran --enable-hl --enable-static --enable-shared |& tee configure.log
make -j4 |& tee make.log
make check |& tee make_check.log
make install |& tee make_install.log
export HDF5=${DIR}/hdf5/1.10.5
export PATH=${HDF5}/bin:${PATH}
export LD_LIBRARY_PATH=${HDF5}/lib:${LD_LIBRARY_PATH}
ls -lh \
${HDF5}/lib/libhdf5.a \
${HDF5}/lib/libhdf5.so \
${HDF5}/lib/libhdf5_hl.a \
${HDF5}/lib/libhdf5_hl.so \
${HDF5}/lib/libhdf5_fortran.a \
${HDF5}/lib/libhdf5_fortran.so \
${HDF5}/include/hdf5.h
which h5cc
which h5fc
which h5dump
h5cc -showconfig | head -n 80
h5dump -V
3.5 # netcdf-c
cd ${DIR}
rm -rf netcdf-c-4.7.0
tar -xzf ${TARDIR}/netcdf-c-4.7.0.tar.gz
mkdir -p ${DIR}/netcdf/4.7.0
cd ${DIR}/netcdf-c-4.7.0
CC=icc CXX=icc FC=ifort CPP='icpc -E' CPPFLAGS="-fPIC -I${HDF5}/include -I${ZLIB}/include -I${CURL}/include" LDFLAGS="-L${HDF5}/lib -L${ZLIB}/lib -L${CURL}/lib" ./configure --prefix=${DIR}/netcdf/4.7.0 --enable-netcdf-4 --enable-static --enable-shared --disable-dap |& tee configure.log
make -j4 |& tee make.log
make check |& tee make_check.log
make install |& tee make_install.log
export NETCDF=${DIR}/netcdf/4.7.0
export PATH=${NETCDF}/bin:${PATH}
export LD_LIBRARY_PATH=${NETCDF}/lib:${LD_LIBRARY_PATH}
which nc-config
which ncdump
nc-config --version
nc-config --all
ncdump -version
ls -lh \
${NETCDF}/include/netcdf.h \
${NETCDF}/lib/libnetcdf.a \
${NETCDF}/lib/libnetcdf.so \
${NETCDF}/bin/nc-config \
${NETCDF}/bin/ncdump
3.6 # netcdf-fortran
cd ${DIR}
rm -rf ${DIR}/netcdf-fortran-4.4.5
tar -xzf ${TARDIR}/netcdf-fortran-4.4.5.tar.gz
cd ${DIR}/netcdf-fortran-4.4.5
export NETCDF=${DIR}/netcdf/4.7.0
export PATH=${NETCDF}/bin:${PATH}
export LD_LIBRARY_PATH=${NETCDF}/lib:${LD_LIBRARY_PATH}
which nc-config
nc-config --version
which ifort
which icc
注意这个版本的文件有问题,执行这个命令对第14行进行修正
sed -i '14c\ include "netcdf.inc"' nf_test/ftst_rengrps.F
CC=icc CXX=icc FC=ifort F77=ifort CPP='icpc -E' CPPFLAGS="-fPIC -I${NETCDF}/include" LDFLAGS="-L${NETCDF}/lib" LD_LIBRARY_PATH="${NETCDF}/lib:$LD_LIBRARY_PATH" ./configure --prefix=${NETCDF} --enable-static --enable-shared 2>&1 | tee configure.log
make -j4 2>&1 | tee make.log
make check 2>&1 | tee make_check.log
make install 2>&1 | tee make_install.log
which nf-config
nf-config --version
nf-config --all
ls -lh \
${NETCDF}/bin/nf-config \
${NETCDF}/lib/libnetcdff.a \
${NETCDF}/lib/libnetcdff.so \
${NETCDF}/include/netcdf.mod \
${NETCDF}/include/netcdf.inc
file ${NETCDF}/lib/libnetcdff.so.6.1.1
ldd ${NETCDF}/lib/libnetcdff.so
3.7 # ioapi
CMAQ安装教程(基于intel编译器) - 知乎https://zhuanlan.zhihu.com/p/710326443Intel编译器安装WRF-CMAQ-CSDN博客
https://blog.csdn.net/weixin_55713760/article/details/120943523下载网址:wget https://www.cmascenter.org/ioapi/download/ioapi-3.2.tar.gz
这里对文件进行了修改,适用多文件处理程序:ioapi-3.2-large
mkdir -p /data/home/gzq25_slurm/libraries/ioapi-3.2-large
tar -xzf /data/home/gzq25_slurm/libraries/tar_gz/ioapi-3.2-large.tar.gz -C /data/home/gzq25_slurm/libraries/ioapi-3.2-large
cd /data/home/gzq25_slurm/libraries/ioapi-3.2-large/ioapi-3.2
grep -nE 'MXFILE3|MXVARS3' \
ioapi/PARMS3.EXT \
ioapi/fixed_src/PARMS3.EXT \
ioapi/PARMS3-LARGE.EXT \
ioapi/parms3.h \
ioapi/parms3-large.h
INTEGER, PARAMETER :: MXFILE3 = 512 ! max number of open files
INTEGER, PARAMETER :: MXVARS3 =16384 ! max number of variables per file
export BIN=Linux2_x86_64ifort
mkdir Linux2_x86_64ifort
cd /data/home/gzq25_slurm/libraries/ioapi-3.2-large/ioapi-3.2
vi Makefile 修改如下
BIN = Linux2_x86_64ifort
VERSION = 3.2-${CPLMODE}
BASEDIR = /data/home/gzq25_slurm/libraries/ioapi-3.2-large/ioapi-3.2
NCFLIBS = -L/data/home/gzq25_slurm/libraries/netcdf/4.7.0/lib -lnetcdff -lnetcdf -L/data/home/gzq25_slurm/libraries/hdf5/1.10.5/lib -lhdf5_hl -lhdf5 -lhdf5hl_fortran -L/data/home/gzq25_slurm/libraries/zlib/1.2.11/lib -lz
IODIR = $(BASEDIR)/ioapi
FIXDIR = $(IODIR)/fixed_src
HTMLDIR = $(BASEDIR)/HTML
TOOLDIR = $(BASEDIR)/m3tools
OBJDIR = $(BASEDIR)/$(BIN)
INSTALL = /data/home/gzq25_slurm/libraries/ioapi
LIBINST = $(INSTALL)/$(BIN)
BININST = $(INSTALL)/$(BIN)
CPLMODE = nocpl
PVMINCL =
make configure
可以不再手动修改 ioapi/Makefile 和 m3tools/Makefile,可由make configure生成,
但需要手动修改ioapi/Makeinclude.Linux2_x86_64ifort
cd /data/home/gzq25_slurm/libraries/ioapi-3.2-large/ioapi-3.2/ioapi
vi Makefile
BASEDIR = /data/home/gzq25_slurm/libraries/ioapi-3.2-large/ioapi-3.2
INSTDIR = /data/home/gzq25_slurm/libraries/ioapi/${BIN}
IODIR = ${BASEDIR}/ioapi
# OBJDIR = ${IODIR}/../lib
# OBJDIR = ${IODIR}/../${BIN}
OBJDIR = ${BASEDIR}/${BIN}
FIXDIR = ${IODIR}/fixed_src
# Architecture dependent stuff
include /data/home/gzq25_slurm/libraries/ioapi-3.2-large/ioapi-3.2/ioapi/Makeinclude.$(BIN)
DEFINEFLAGS = $(ARCHFLAGS) $(PARFLAGS)
#DEFINEFLAGS = -DIOAPICPL=1 $(ARCHFLAGS) $(PARFLAGS)
#DEFINEFLAGS = -DIOAPI_PNCF=1 $(ARCHFLAGS) $(PARFLAGS)
#DEFINEFLAGS = -DIOAPI_NCF4=1 $(ARCHFLAGS) $(PARFLAGS)
#DEFINEFLAGS = -DIOAPI_PNCF=1 -DIOAPI_NCF4=1 $(ARCHFLAGS) $(PARFLAGS)
这个需要手动修改
vi Makeinclude.Linux2_x86_64ifort
# Version "$Id: Makeinclude.Linux2_x86_64ifort 1 2017-06-10 18:05:20Z coats $"
#
# Michael Bane (UManchester UK) reports that for ifort version 9,
# -stack_temps -safe_cray_ptr are not supported and that there are
# problems with "-unroll" without an unroll-count (bug reported
# to Intel)
AR = ar
CC = icc
CXX = icpc
FC = ifort -auto -warn notruncated_source -static-intel
M4 = m4
LINK = $(CC)
## Module-include-directory command
MODI = -I
E132 = -extend-source 132
# MFLAGS = -traceback # generic
# MFLAGS = -traceback -msse4.1 -xSSE4.1 # penryn
# MFLAGS = -traceback -mavx2 -xAVX -march=corei7-avx # SandyBridge
# MFLAGS = -traceback -mavx -xAVX2 -march=corei7-avx2 # Haswell
MFLAGS = -traceback -march=core-avx2
OMPFLAGS =
OMPLIBS =
#OMPFLAGS = -openmp # for Intel compilers, version 15 or earlier
#OMPLIBS = -openmp
# OMPFLAGS = -openmp -qopenmp
# OMPLIBS = -openmp -qopenmp -qopenmp-link=static -shared_intel
COPTFLAGS = -O3 ${MFLAGS}
FOPTFLAGS = -O3 -unroll -stack_temps -safe_cray_ptr \
-convert big_endian -assume byterecl ${MFLAGS}
FPPFLAGS = -DF90=1
FSFLAGS = -save
ARCHFLAGS = \
-DAUTO_ARRAYS=1 \
-DF90=1 -DFLDMN=1 \
-DFSTR_L=int \
-DIOAPI_NO_STDOUT=1 \
-DAVOID_FLUSH=1 -DBIT32=1
PARFLAGS =
ARCHLIB =
#ARCHLIB = -Bstatic
# M4DEFFILE = $(PVM_ROOT)/conf/$(PVM_ARCH).m4
# PVMLIBS = -L$(PVM_ROOT)/lib/$(PVM_ARCH) -lpvm3
PVMLIBS =
cd /data/home/gzq25_slurm/libraries/ioapi-3.2-large/ioapi-3.2/m3tools
vi Makefile
BASEDIR = /data/home/gzq25_slurm/libraries/ioapi-3.2-large/ioapi-3.2
SRCDIR = ${BASEDIR}/m3tools
IODIR = ${BASEDIR}/ioapi
OBJDIR = ${BASEDIR}/${BIN}
INSTDIR = /data/home/gzq25_slurm/libraries/ioapi/${BIN}
# Architecture dependent stuff
# Assumes FC is an f90
include /data/home/gzq25_slurm/libraries/ioapi-3.2-large/ioapi-3.2/ioapi/Makeinclude.${BIN}
FFLAGS = -I$(IODIR) ${MODI}$(OBJDIR) -DIOAPI_NCF4 $(ARCHFLAGS) $(PARFLAGS) $(FOPTFLAGS) $(ARCHFLAGS)
LDFLAGS = -I$(IODIR) $(DEFINEFLAGS) $(ARCHFLAGS)
# Incompatibility between netCDF versions before / after v4.1.1:
# For netCDF v4 and later, you may also need the extra libraries
# given by netCDF commands
#
# nc-config --libs
# nf-config --libs
#
# Cygwin libraries need "-lnetcdff.dll -lnetcdf.dll" below
#
LIBS = -L${OBJDIR} -lioapi -L/data/home/gzq25_slurm/libraries/netcdf/4.7.0/lib -lnetcdff -lnetcdf -L/data/home/gzq25_slurm/libraries/hdf5/1.10.5/lib -lhdf5_hl -lhdf5 -lhdf5hl_fortran -L/data/home/gzq25_slurm/libraries/zlib/1.2.11/lib -lz $(OMPLIBS) $(ARCHLIB) $(ARCHLIBS)
#LIBS = -L${OBJDIR} -lioapi -lnetcdf $(OMPLIBS) $(ARCHLIB) $(ARCHLIBS)
cd /data/home/gzq25_slurm/libraries/ioapi-3.2-large/ioapi-3.2
make configure
make all
make install
cp ioapi/fixed_src/* /data/home/gzq25_slurm/libraries/ioapi/fixed_src/
