Ubuntu 22.04下WRF与CMAQ5.2编译安装全攻略:从依赖库到集成测试
2026/8/7 10:46:22 网站建设 项目流程

1. 项目概述与环境准备

最近在帮一个做大气环境模拟的朋友搭建CMAQ5.2,连带WRF一起搞定。这活儿听起来就是个编译安装,但实际走一遍,你会发现它是个典型的“依赖地狱”项目,任何一个库的版本或者环境变量没设对,都可能让你卡上半天。网上能找到的教程不少,但要么年代久远,要么语焉不详,踩的坑多了,就想着把这次从头到尾的成功过程记录下来,给后来者铺条相对平坦的路。我们的目标是在一台干净的Ubuntu 22.04 LTS系统上,从零开始,成功编译并运行WRF(Weather Research and Forecasting Model)和CMAQ(Community Multiscale Air Quality modeling system)5.2版本。整个过程涉及大量科学计算库的编译和环境配置,需要耐心和细致的操作。

首先明确一下核心组件和工具链。WRF是气象驱动模型,为CMAQ提供气象场输入;CMAQ则是核心的大气化学传输模型。它们共同依赖一套底层的高性能计算库,比如NetCDF(用于科学数据存储)、HDF5(NetCDF的底层依赖)、MPICH或OpenMPI(并行计算支持)等。我们的安装策略是:先搭建一个稳定、兼容的底层库环境,然后依次编译WRF和CMAQ。操作系统选择Ubuntu 22.04 LTS,主要是因为其软件包较新且社区支持好,但这也意味着我们需要手动编译一些特定版本的库,以避免系统自带包可能存在的版本冲突。

在开始之前,你需要准备一台拥有足够计算资源和存储空间的机器。建议至少配备8核CPU、16GB内存和100GB的可用磁盘空间。我们将全部在用户目录下进行编译安装,避免需要root权限,这样更安全也更清晰。接下来,我们就从最基础的系统环境配置开始。

1.1 系统基础配置与依赖安装

首先,更新系统并安装一些基础的开发工具和依赖包。打开终端,执行以下命令:

sudo apt update sudo apt upgrade -y sudo apt install -y gcc gfortran g++ make m4 csh tcsh git curl wget vim build-essential \ libcurl4-openssl-dev autoconf automake libtool \ zlib1g-dev libssl-dev libreadline-dev \ ncurses-dev flex bison cmake \ perl perl-modules libperl-dev \ zip unzip

这里安装的包涵盖了编译器套件(gcc, gfortran, g++)、构建工具(make, m4, cmake, autoconf)、脚本环境(csh, tcsh,因为某些NCAR工具仍依赖它)、版本控制(git)以及一些常用库。build-essential是Ubuntu上编译软件的基础元包,务必安装。

接下来,我们需要为科学计算创建一个独立的环境目录。我习惯在$HOME下创建一个Build_WRF_CMAQ目录,所有源码、编译中间文件和安装路径都放在这里,便于管理。

mkdir -p $HOME/Build_WRF_CMAQ cd $HOME/Build_WRF_CMAQ export BASE_DIR=$PWD

设置环境变量BASE_DIR指向当前目录,后续所有操作都将基于这个路径。现在,我们开始搭建最关键的底层库:MPI、NetCDF-C和NetCDF-Fortran。

1.2 并行环境与基础科学库安装

WRF和CMAQ都支持并行计算以提升效率,因此我们需要先安装MPI库。这里选择MPICH,因为它与WRF/CMAQ的兼容性经过广泛测试。

1.2.1 安装MPICH

前往MPICH官网下载稳定版本,这里以3.4.3为例:

cd $BASE_DIR wget https://www.mpich.org/static/downloads/3.4.3/mpich-3.4.3.tar.gz tar -xzvf mpich-3.4.3.tar.gz cd mpich-3.4.3

配置编译选项。我们将其安装到$BASE_DIR/mpich目录下,并禁用Fortran 2008绑定(有时会引起不必要的麻烦):

./configure --prefix=$BASE_DIR/mpich --disable-fortran make -j$(nproc) make install

编译完成后,将MPICH的二进制路径添加到环境变量中,并使其生效:

echo 'export PATH='$BASE_DIR'/mpich/bin:$PATH' >> ~/.bashrc echo 'export LD_LIBRARY_PATH='$BASE_DIR'/mpich/lib:$LD_LIBRARY_PATH' >> ~/.bashrc source ~/.bashrc

验证安装:which mpiccwhich mpif90应该指向你刚安装的路径下的文件。执行mpiexec --version检查版本。

1.2.2 安装NetCDF-C和NetCDF-Fortran

NetCDF是WRF和CMAQ输入输出数据的标准格式,必须安装。注意,NetCDF-Fortran依赖于NetCDF-C,且对版本有严格要求。CMAQ5.2官方推荐使用NetCDF-C 4.7.4和对应的NetCDF-Fortran 4.5.3。我们将采用这套经过验证的组合。

首先安装NetCDF-C的依赖库:HDF5和zlib(系统已安装,但为确保一致性,我们编译特定版本)。先安装zlib:

cd $BASE_DIR wget https://zlib.net/zlib-1.2.13.tar.gz tar -xzvf zlib-1.2.13.tar.gz cd zlib-1.2.13 ./configure --prefix=$BASE_DIR/libs make -j$(nproc) make install

接着安装HDF5。这里选择与NetCDF-C 4.7.4兼容的HDF5 1.12.0版本:

cd $BASE_DIR wget https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-1.12/hdf5-1.12.0/src/hdf5-1.12.0.tar.gz tar -xzvf hdf5-1.12.0.tar.gz cd hdf5-1.12.0

配置HDF5,关键是要启用hl(high-level)库,并指定我们刚才安装的zlib路径:

./configure --prefix=$BASE_DIR/libs \ --with-zlib=$BASE_DIR/libs \ --enable-hl \ --enable-fortran \ --enable-parallel \ CC=$BASE_DIR/mpich/bin/mpicc FC=$BASE_DIR/mpich/bin/mpif90 make -j$(nproc) make install

现在安装NetCDF-C 4.7.4。配置时需要指向我们编译的HDF5和zlib,并启用并行I/O(NetCDF-4特性)和DAP(远程数据访问)支持:

cd $BASE_DIR wget https://github.com/Unidata/netcdf-c/archive/refs/tags/v4.7.4.tar.gz -O netcdf-c-4.7.4.tar.gz tar -xzvf netcdf-c-4.7.4.tar.gz cd netcdf-c-4.7.4 ./configure --prefix=$BASE_DIR/libs \ CPPFLAGS="-I$BASE_DIR/libs/include" \ LDFLAGS="-L$BASE_DIR/libs/lib" \ --enable-netcdf-4 \ --enable-dap \ --enable-parallel-tests \ CC=$BASE_DIR/mpich/bin/mpicc make -j$(nproc) make install

最后安装NetCDF-Fortran 4.5.3。这是最易出错的一步,必须确保其找到正确版本的NetCDF-C库:

cd $BASE_DIR wget https://github.com/Unidata/netcdf-fortran/archive/refs/tags/v4.5.3.tar.gz -O netcdf-fortran-4.5.3.tar.gz tar -xzvf netcdf-fortran-4.5.3.tar.gz cd netcdf-fortran-4.5.3

配置时,CPPFLAGSLDFLAGS必须明确指向包含netcdf.hlibnetcdf.a的路径。同时,指定MPI的Fortran编译器:

export CPPFLAGS="-I$BASE_DIR/libs/include" export LDFLAGS="-L$BASE_DIR/libs/lib" export LD_LIBRARY_PATH=$BASE_DIR/libs/lib:$LD_LIBRARY_PATH ./configure --prefix=$BASE_DIR/libs \ CC=$BASE_DIR/mpich/bin/mpicc \ FC=$BASE_DIR/mpich/bin/mpif90 \ F77=$BASE_DIR/mpich/bin/mpif77 \ --enable-parallel-tests make -j$(nproc) make install

注意:编译NetCDF-Fortran时,如果遇到“nf-config”找不到或版本不对的错误,通常是因为系统路径中混入了其他版本的NetCDF。务必确保$BASE_DIR/libs/bin在PATH环境变量中靠前的位置,并在编译前执行source ~/.bashrc。一个验证方法是运行$BASE_DIR/libs/bin/nf-config --version,应该输出4.5.3。

将所有这些库的路径永久添加到环境变量中:

echo 'export NETCDF=$BASE_DIR/libs' >> ~/.bashrc echo 'export PATH=$NETCDF/bin:$PATH' >> ~/.bashrc echo 'export LD_LIBRARY_PATH=$NETCDF/lib:$LD_LIBRARY_PATH' >> ~/.bashrc echo 'export CPPFLAGS="-I$NETCDF/include $CPPFLAGS"' >> ~/.bashrc echo 'export LDFLAGS="-L$NETCDF/lib $LDFLAGS"' >> ~/.bashrc echo 'export FCFLAGS="$CPPFLAGS"' >> ~/.bashrc # Fortran编译器也需要 source ~/.bashrc

至此,一个为WRF和CMAQ定制的、版本兼容的并行科学计算基础环境就搭建好了。接下来,我们将进入WRF模型的编译阶段。

2. WRF模型编译与配置

WRF模型是整个模拟系统的前端,负责生成高时空分辨率的气象场。它的编译过程相对标准化,但选项繁多,需要根据你的计算资源和研究目的进行选择。

2.1 获取WRF源码与依赖库

首先,从官方GitHub仓库获取WRF源码。我们选择稳定的V4.4版本(与CMAQ5.2兼容性好):

cd $BASE_DIR git clone https://github.com/wrf-model/WRF.git cd WRF git checkout release-v4.4

WRF编译还需要一些额外的依赖库,主要是JASPER、LIBPNG和ZLIB(用于处理GRIB2格式的气象数据)。虽然我们之前装了zlib,但WRF的脚本期望在固定位置找到它们。最稳妥的方式是使用WRF自带的脚本来安装这些库。

进入WRF目录,运行脚本来下载和编译这些依赖:

./configure

在出现的交互菜单中,选择34. (dmpar) GNU (gfortran/gcc) (分布式内存并行,即MPI)。这是最常用的配置,适用于多核CPU或集群。选择后,配置脚本会开始下载LIBPNG、JASPER和ZLIB的源码并自动编译。这个过程是自动的,通常很顺利。完成后,你会看到提示信息,并生成一个configure.wrf文件。

实操心得:运行./configure时,务必确保网络通畅。如果下载失败,可以手动从WRF官网的“Required Libraries”页面下载对应版本的tar包,放在WRF目录下,再重新运行配置脚本。有时脚本下载的版本可能过时,手动指定已知可用的版本更可靠。

2.2 编译WRF核心

生成configure.wrf后,就可以开始编译了。WRF的编译分为两个主要部分:real程序(用于处理真实数据初始化)和wrf模型核心。我们使用-j选项进行并行编译以加快速度:

./compile -j $(nproc) em_real 2>&1 | tee compile.log

这个命令会编译中型研究尺度(em_real)的WRF,适用于真实气象案例模拟。2>&1 | tee compile.log将屏幕输出同时保存到compile.log文件,方便后续排查错误。

编译过程视机器性能,可能需要30分钟到数小时。你可以通过查看compile.log末尾或者检查主要可执行文件是否生成来判断是否成功:

ls -l main/*.exe

你应该能看到至少四个关键的可执行文件:

  • real.exe: 用于将气象再分析数据(如GFS、ERA5)插值到WRF网格上。
  • wrf.exe: WRF模型主程序。
  • ndown.exe: 用于嵌套网格的下尺度处理。
  • tc.exe: 用于理想热带气旋案例(我们这里用不到)。

如果这些文件都存在且大小正常(通常几十MB到上百MB),说明WRF编译基本成功。

常见问题与排查:

  1. Fortran编译错误:最常见的是“未定义的引用__gxx_personality_v0”。这通常是C++和Fortran链接时的问题。解决方法是在configure.wrf文件中,找到SFCSCC(串行编译器)以及DM_FCDM_CC(并行编译器)相关的行,在链接标志LDFLAGS中添加-lstdc++。例如:LDFLAGS = -lstdc++
  2. NetCDF库错误:如“nf_open_par”未找到。这几乎总是因为NetCDF-Fortran库不是并行版本,或者环境变量NETCDF指向了错误的库。请回头仔细检查2.1.2节中NetCDF-Fortran的配置是否添加了--enable-parallel-tests,并用nf-config --has-parallel命令验证。
  3. 内存不足:编译wrf.exe时可能因内存不足而杀死进程(Killed)。可以尝试减少并行编译核数:./compile -j 2 em_real,或者增加机器的交换空间(swap)。

2.3 编译WPS(WRF预处理系统)

WRF模型需要经过预处理的气象输入数据,这是由WPS(WRF Preprocessing System)完成的。我们需要单独编译它。

cd $BASE_DIR git clone https://github.com/wrf-model/WPS.git cd WPS git checkout release-v4.4

清理环境并配置。WPS同样依赖之前编译的NetCDF和JASPER等库。

./clean -a ./configure

在菜单中选择与WRF一致的选项,即3. (Linux x86_64, gfortran) (dmpar)。这会生成configure.wps文件。

接下来编辑configure.wps,确保其中指向的NetCDF、zlib、libpng、jasper的路径是正确的。通常脚本会自动检测,但最好确认一下以下几行:

# 查找 COMPRESSION_LIBS 和 COMPRESSION_INC 部分 COMPRESSION_LIBS = -L$(NETCDF)/lib -lnetcdf -lnetcdff -L/path/to/zlib/lib -L/path/to/libpng/lib -L/path/to/jasper/lib -ljasper -lpng -lz COMPRESSION_INC = -I$(NETCDF)/include -I/path/to/zlib/include -I/path/to/libpng/include -I/path/to/jasper/include

/path/to替换为实际的库路径。在我们的设置中,zlib、libpng、jasper都位于WRF目录下的external子目录里,路径类似$BASE_DIR/WRF/external/...。NetCDF路径就是我们的$NETCDF

确认无误后,开始编译:

./compile 2>&1 | tee wps_compile.log

编译成功后,在WPS目录下会生成三个主要程序:

  • geogrid.exe: 定义模拟区域和静态地理数据(如地形、土地利用)。
  • ungrib.exe: 从GRIB格式的气象再分析数据中提取变量。
  • metgrid.exe: 将ungrib提取的气象变量水平插值到geogrid定义的网格上。

使用ls -l *.exe检查。至此,WRF及WPS的编译安装全部完成。接下来,我们将进入更复杂的CMAQ系统的安装。

3. CMAQ5.2系统编译详解

CMAQ的编译比WRF更具挑战性,因为它包含数十个相互依赖的模块,对环境变量的敏感性极高。官方提供了bldit_project.csh等构建脚本,但我们需要根据我们的环境进行大量定制。

3.1 获取源码与构建环境设置

首先,从CMAQ官方仓库获取5.2版本源码。由于CMAQ仓库较大,建议使用--depth参数只克隆最新提交以节省时间和空间:

cd $BASE_DIR git clone https://github.com/USEPA/CMAQ.git CMAQ_REPO cd CMAQ_REPO git checkout 5.2.2 # 或最新的5.2.x标签

CMAQ的编译需要一个集中的“安装目录”来存放编译好的库和可执行文件,以及一个“构建目录”用于存放编译时的中间文件。我们按如下结构创建:

export CMAQ_HOME=$BASE_DIR/CMAQ_v5.2.2 mkdir -p $CMAQ_HOME cd $CMAQ_HOME mkdir -p build lib include src data

接下来,设置CMAQ所需的关键环境变量。编辑你的~/.bashrc文件,添加以下内容:

# CMAQ 环境变量 export CMAQ_HOME=$BASE_DIR/CMAQ_v5.2.2 export CMAQ_DATA=$CMAQ_HOME/data export M3HOME=$CMAQ_HOME export M3LIB=$CMAQ_HOME/lib export M3MODEL=$CMAQ_HOME/src # 编译器设置 export CC=$BASE_DIR/mpich/bin/mpicc export FC=$BASE_DIR/mpich/bin/mpif90 export CXX=$BASE_DIR/mpich/bin/mpicxx # 确保使用我们编译的NetCDF export NETCDF=$BASE_DIR/libs export NETCDFF=$NETCDF export PATH=$NETCDF/bin:$PATH export LD_LIBRARY_PATH=$NETCDF/lib:$LD_LIBRARY_PATH # 编译标志 export MY_CFLAGS="-O2 -fPIC" export MY_FFLAGS="-O2 -fPIC -fallow-argument-mismatch" # gfortran 10+ 需要后一个选项 export MY_LDFLAGS="-lm -lnetcdf -lnetcdff"

执行source ~/.bashrc使环境变量生效。特别注意-fallow-argument-mismatch这个选项,对于gfortran 10及以上版本是必须的,因为它加强了参数类型检查,而CMAQ部分旧代码存在参数不严格匹配的情况,这个选项允许编译通过。

3.2 编译IOAPI库

IOAPI(Input/Output Applications Programming Interface)是CMAQ用于读写NetCDF格式文件的底层I/O库,必须首先成功编译。

cd $CMAQ_HOME/build cp -r $BASE_DIR/CMAQ_REPO/UTIL/ioapi-3.2/* .

编辑MakefileMakeinclude文件(具体文件名取决于版本,可能是Makefile.nocpl)。我们需要根据我们的环境修改关键参数。主要修改点包括:

  1. 编译器:将CCF77F90指向我们的MPI包装器。
  2. NetCDF路径:将NETCDFNC_INCNC_LIB指向$BASE_DIR/libs
  3. 架构选项:通常选择Linux2_x86_64gfort(对于64位Linux+gfortran)。

一个典型的Makeinclude.Linux2_x86_64gfort修改示例如下:

# 编译器定义 CC = $(BASE_DIR)/mpich/bin/mpicc F77 = $(BASE_DIR)/mpich/bin/mpif90 F90 = $(BASE_DIR)/mpich/bin/mpif90 # NetCDF 库 NETCDF = $(BASE_DIR)/libs # 编译和链接标志 CFLAGS = -O2 -I$(NETCDF)/include -DIOAPI_NCF4=1 -DWORD=8 FFLAGS = -O2 -I$(NETCDF)/include -fPIC -fallow-argument-mismatch LDFLAGS = -L$(NETCDF)/lib -lnetcdf -lnetcdff -lm

保存修改后,开始编译:

make -f Makefile.nocpl Linux2_x86_64gfort 2>&1 | tee ioapi_compile.log

编译成功后,在$CMAQ_HOME/build目录下会生成libioapi.a等静态库文件。将它们复制到$CMAQ_HOME/lib,并将模块文件(.mod)复制到$CMAQ_HOME/include

cp *.a $CMAQ_HOME/lib/ cp *.mod $CMAQ_HOME/include/

3.3 编译CMAQ主程序与各模块

IOAPI准备好后,就可以编译CMAQ的核心化学传输模型(CCTM)及其他工具了。CMAQ使用一套名为bldit的脚本进行模块化构建。

首先,设置模块构建的通用环境。进入$BASE_DIR/CMAQ_REPO/CCTM/scripts目录,你会找到bldit_cctm.csh或类似的脚本。但更推荐直接使用config_cmaq.csh范例文件来生成构建配置。

cd $BASE_DIR/CMAQ_REPO cp config_cmaq.csh.example config_cmaq.csh

用文本编辑器(如vim)打开config_cmaq.csh,进行关键配置:

# 设置编译器 setenv compiler gcc # 或 intel, 我们用的是gcc setenv compilerVrsn 11 # 你的gcc版本号,可用`gcc --version`查看 # 设置并行选项 setenv PARALLEL Y setenv PAROPT mpich # 与我们安装的MPI一致 # 设置路径 setenv CMK_HOME $CMAQ_HOME setenv NETCDF $BASE_DIR/libs setenv NETCDFF $NETCDF setenv IOAPI $CMAQ_HOME # 设置编译标志,特别是针对gfortran高版本 setenv myFCflags "-O2 -fPIC -fallow-argument-mismatch"

保存后,运行该配置脚本以生成构建文件:

csh config_cmaq.csh

接下来,开始编译CCTM。进入CCTM的构建目录:

cd $BASE_DIR/CMAQ_REPO/CCTM/scripts ./bldit_cctm.csh gcc 11 2>&1 | tee bldit_cctm.log

脚本会依次编译CCTM依赖的各个库(如BLD、M3UTILIO等)和主程序。这个过程较长,可能会遇到各种错误。

CMAQ编译常见问题与解决:

  1. “Cannot open module file ‘NETCDF.mod’”:这表示Fortran编译器找不到NetCDF的模块文件。确保NETCDFF环境变量正确指向包含netcdf.modtypesizes.mod的目录(即$BASE_DIR/libs/include),并且在编译标志myFCflags中通过-I选项包含了该路径。
  2. **“undefined reference topnetcdf_***’”**:CMAQ默认尝试链接并行NetCDF(pNetCDF)。如果你没有安装pNetCDF,需要在config_cmaq.csh中关闭相关选项:setenv pnetcdf N,并确保setenv ioapi_netcdf_par N`。
  3. 段错误(Segmentation fault)或编译中途卡死:可能是内存不足。尝试在编译时不要使用-j(并行编译),或者增加系统的交换空间。
  4. 特定子程序参数不匹配错误:这是gfortran高版本严格检查导致的。确保在myFCflags中已经添加了-fallow-argument-mismatch。如果还有个别文件报错,可能需要单独修改该源文件,但这比较棘手,通常添加全局标志即可解决。

编译成功后,会在$BASE_DIR/CMAQ_REPO/CCTM/scripts目录下生成一个以编译器版本命名的子目录(如BLD_CCTM_v5.2.2_gcc11),里面包含最终的cctm可执行文件。将其复制到你的运行目录(例如$CMAQ_HOME/run)备用。

用同样的方法,可以编译其他工具,如ICON(初始条件生成)、BCON(边界条件生成)、JPROC(光解速率计算)等。它们的构建脚本通常位于各自目录的scripts文件夹下,流程类似:先配置,再运行对应的bldit_*.csh脚本。

4. 集成测试与运行准备

编译成功只是第一步,确保WRF和CMAQ能协同工作才是关键。这需要准备一套测试数据并运行一个完整的案例。

4.1 WRF测试案例运行

我们可以使用WRF自带的测试数据来验证其运行是否正常。WRF官网提供了一些小型测试案例数据。这里以经典的“CONUS 12km”案例为例(数据较大,需要下载)。

  1. 获取测试数据:从WRF用户页面下载测试数据包(例如conus_12km.tar.gz)。
  2. 运行WPS
    • WPS目录下,链接地理静态数据(需要提前从WRF官网下载geog数据,并解压到某个路径,如/path/to/geog)。
      ln -sf /path/to/geog ./geogrid/GEOG
    • 编辑namelist.wps,配置模拟域、时间等参数。
    • 依次运行:./geogrid.exe-> 链接GRIB气象数据 ->./ungrib.exe->./metgrid.exe
  3. 运行WRF
    • met_em.*文件从WPS目录复制到WRF/test/em_real目录。
    • 编辑WRF/test/em_real/namelist.input,使其与WPS设置匹配。
    • 运行real.exe生成初始和边界条件文件wrfinput_d01wrfbdy_d01
    • 最后运行mpirun -np 4 ./wrf.exe-np后接处理器核心数)启动WRF积分。

如果WRF能正常运行并输出历史文件(wrfout_d01_*),则说明WRF部分安装成功。

4.2 CMAQ测试案例运行

CMAQ的测试更为复杂,需要WRF输出作为输入。USEPA提供了一个名为CMAQ_Benchmark的测试案例,但数据量巨大。对于初步验证,可以尝试运行一个极简的“单元测试”或者使用教程案例。

  1. 准备CMAQ输入数据:这包括:
    • 气象数据:将WRF输出的wrfout文件通过MCIP(Meteorology-Chemistry Interface Processor)工具转换为CMAQ可读的格式(如METCRO3DMETDOT3D)。MCIP是CMAQ工具集的一部分,需要单独编译(流程类似CCTM)。
    • 排放数据:需要人为排放和生物源排放清单,通常由SMOKE模型处理生成,这是一个独立且复杂的系统。对于测试,可以使用CMAQ基准案例中提供的预处理好的排放文件。
    • 初始和边界条件:可以由ICONBCON工具生成,或者使用默认的清洁大气背景场。
    • 光解速率文件:由JPROC工具根据模拟时间、经纬度生成。
  2. 配置CCTM运行
    • 创建一个运行目录(如$CMAQ_HOME/run/test),将编译好的cctm可执行文件复制过来。
    • 从CMAQ基准案例或教程中复制runscript(运行脚本)和CTM_CONCCTM_EMIS等输入文件到该目录。
    • 编辑运行脚本,正确设置所有输入文件的路径、模拟时间步长、化学机制(如cb6r3_ae7_aq)、输出选项等。
    • 最关键的是编辑CTM_CONC文件,指定化学机制、气溶胶方案、过程分析选项等。
  3. 提交运行
    cd $CMAQ_HOME/run/test # 如果是并行运行 mpirun -np 8 ./cctm
    运行成功后,会生成一系列输出文件,如CONC(浓度)、DRYDEP(干沉降)、WETDEP(湿沉降)等。

注意事项:第一次运行CMAQ几乎一定会遇到输入文件路径错误、格式不匹配或时间设置错误。务必仔细核对运行脚本中每一个文件的路径,并使用ncdump -h命令查看NetCDF文件的变量名、维度和属性,确保它们与CTM_CONC文件中的设定一致。从一个能跑通的简单案例(如官方教程案例)开始,逐步修改,是最稳妥的策略。

4.3 环境变量与路径最终检查

在长期使用中,为了确保每次打开终端都能正确运行WRF和CMAQ,需要将所有的环境变量设置固化在~/.bashrc或一个单独的配置脚本中。下面是一个整合后的环境变量设置示例,你可以将其添加到~/.bashrc末尾:

# ==== WRF & CMAQ 集成环境 ==== export BASE_DIR=$HOME/Build_WRF_CMAQ # MPI export PATH=$BASE_DIR/mpich/bin:$PATH export LD_LIBRARY_PATH=$BASE_DIR/mpich/lib:$LD_LIBRARY_PATH # NetCDF export NETCDF=$BASE_DIR/libs export PATH=$NETCDF/bin:$PATH export LD_LIBRARY_PATH=$NETCDF/lib:$LD_LIBRARY_PATH export CPPFLAGS="-I$NETCDF/include" export LDFLAGS="-L$NETCDF/lib" export FCFLAGS="$CPPFLAGS" # WRF export WRF_DIR=$BASE_DIR/WRF # CMAQ export CMAQ_HOME=$BASE_DIR/CMAQ_v5.2.2 export M3HOME=$CMAQ_HOME export M3LIB=$CMAQ_HOME/lib export M3MODEL=$CMAQ_HOME/src export CMAQ_DATA=$CMAQ_HOME/data # 编译器包装 export CC=mpicc export FC=mpif90 export CXX=mpicxx # 解决gfortran高版本兼容性问题 export FFLAGS="-fallow-argument-mismatch"

保存后,执行source ~/.bashrc。可以通过which mpiccnc-config --versionecho $CMAQ_HOME等命令验证所有路径是否设置正确。

整个安装过程从系统准备到测试运行,涉及步骤繁多,任何一个环节的疏漏都可能导致失败。最关键的体会是:环境隔离和版本控制。通过在我们自定义的$BASE_DIR下编译所有依赖,完全避开了系统包管理器的干扰,这是成功的基础。其次,耐心阅读错误信息,编译错误通常都会给出明确的文件和行号,根据错误信息去搜索解决方案,远比盲目尝试有效。最后,善用日志文件,无论是configuremake还是运行脚本,都使用tee命令将输出重定向到日志文件,这是事后排查问题的唯一可靠依据。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询