尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Ubuntu 22.04下WRF与CMAQ5.2编译安装全攻略:从依赖库到集成测试

Ubuntu 22.04下WRF与CMAQ5.2编译安装全攻略:从依赖库到集成测试 1. 项目概述与环境准备最近在帮一个做大气环境模拟的朋友搭建CMAQ5.2连带WRF一起搞定。这活儿听起来就是个编译安装但实际走一遍你会发现它是个典型的“依赖地狱”项目任何一个库的版本或者环境变量没设对都可能让你卡上半天。网上能找到的教程不少但要么年代久远要么语焉不详踩的坑多了就想着把这次从头到尾的成功过程记录下来给后来者铺条相对平坦的路。我们的目标是在一台干净的Ubuntu 22.04 LTS系统上从零开始成功编译并运行WRFWeather Research and Forecasting Model和CMAQCommunity Multiscale Air Quality modeling system5.2版本。整个过程涉及大量科学计算库的编译和环境配置需要耐心和细致的操作。首先明确一下核心组件和工具链。WRF是气象驱动模型为CMAQ提供气象场输入CMAQ则是核心的大气化学传输模型。它们共同依赖一套底层的高性能计算库比如NetCDF用于科学数据存储、HDF5NetCDF的底层依赖、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 mpicc和which mpif90应该指向你刚安装的路径下的文件。执行mpiexec --version检查版本。1.2.2 安装NetCDF-C和NetCDF-FortranNetCDF是WRF和CMAQ输入输出数据的标准格式必须安装。注意NetCDF-Fortran依赖于NetCDF-C且对版本有严格要求。CMAQ5.2官方推荐使用NetCDF-C 4.7.4和对应的NetCDF-Fortran 4.5.3。我们将采用这套经过验证的组合。首先安装NetCDF-C的依赖库HDF5和zlib系统已安装但为确保一致性我们编译特定版本。先安装zlibcd $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关键是要启用hlhigh-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/ONetCDF-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配置时CPPFLAGS和LDFLAGS必须明确指向包含netcdf.h和libnetcdf.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.4WRF编译还需要一些额外的依赖库主要是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 21 | tee compile.log这个命令会编译中型研究尺度em_real的WRF适用于真实气象案例模拟。21 | 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编译基本成功。常见问题与排查Fortran编译错误最常见的是“未定义的引用__gxx_personality_v0”。这通常是C和Fortran链接时的问题。解决方法是在configure.wrf文件中找到SFC和SCC串行编译器以及DM_FC和DM_CC并行编译器相关的行在链接标志LDFLAGS中添加-lstdc。例如LDFLAGS -lstdc。NetCDF库错误如“nf_open_par”未找到。这几乎总是因为NetCDF-Fortran库不是并行版本或者环境变量NETCDF指向了错误的库。请回头仔细检查2.1.2节中NetCDF-Fortran的配置是否添加了--enable-parallel-tests并用nf-config --has-parallel命令验证。内存不足编译wrf.exe时可能因内存不足而杀死进程Killed。可以尝试减少并行编译核数./compile -j 2 em_real或者增加机器的交换空间swap。2.3 编译WPSWRF预处理系统WRF模型需要经过预处理的气象输入数据这是由WPSWRF 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 21 | 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库IOAPIInput/Output Applications Programming Interface是CMAQ用于读写NetCDF格式文件的底层I/O库必须首先成功编译。cd $CMAQ_HOME/build cp -r $BASE_DIR/CMAQ_REPO/UTIL/ioapi-3.2/* .编辑Makefile或Makeinclude文件具体文件名取决于版本可能是Makefile.nocpl。我们需要根据我们的环境修改关键参数。主要修改点包括编译器将CC、F77、F90指向我们的MPI包装器。NetCDF路径将NETCDF或NC_INC、NC_LIB指向$BASE_DIR/libs。架构选项通常选择Linux2_x86_64gfort对于64位Linuxgfortran。一个典型的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_NCF41 -DWORD8 FFLAGS -O2 -I$(NETCDF)/include -fPIC -fallow-argument-mismatch LDFLAGS -L$(NETCDF)/lib -lnetcdf -lnetcdff -lm保存修改后开始编译make -f Makefile.nocpl Linux2_x86_64gfort 21 | tee ioapi_compile.log编译成功后在$CMAQ_HOME/build目录下会生成libioapi.a等静态库文件。将它们复制到$CMAQ_HOME/lib并将模块文件.mod复制到$CMAQ_HOME/includecp *.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 21 | tee bldit_cctm.log脚本会依次编译CCTM依赖的各个库如BLD、M3UTILIO等和主程序。这个过程较长可能会遇到各种错误。CMAQ编译常见问题与解决“Cannot open module file ‘NETCDF.mod’”这表示Fortran编译器找不到NetCDF的模块文件。确保NETCDFF环境变量正确指向包含netcdf.mod和typesizes.mod的目录即$BASE_DIR/libs/include并且在编译标志myFCflags中通过-I选项包含了该路径。**“undefined reference topnetcdf_***’”**CMAQ默认尝试链接并行NetCDFpNetCDF。如果你没有安装pNetCDF需要在config_cmaq.csh中关闭相关选项setenv pnetcdf N并确保setenv ioapi_netcdf_par N。段错误Segmentation fault或编译中途卡死可能是内存不足。尝试在编译时不要使用-j并行编译或者增加系统的交换空间。特定子程序参数不匹配错误这是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”案例为例数据较大需要下载。获取测试数据从WRF用户页面下载测试数据包例如conus_12km.tar.gz。运行WPS在WPS目录下链接地理静态数据需要提前从WRF官网下载geog数据并解压到某个路径如/path/to/geog。ln -sf /path/to/geog ./geogrid/GEOG编辑namelist.wps配置模拟域、时间等参数。依次运行./geogrid.exe- 链接GRIB气象数据 -./ungrib.exe-./metgrid.exe。运行WRF将met_em.*文件从WPS目录复制到WRF/test/em_real目录。编辑WRF/test/em_real/namelist.input使其与WPS设置匹配。运行real.exe生成初始和边界条件文件wrfinput_d01和wrfbdy_d01。最后运行mpirun -np 4 ./wrf.exe-np后接处理器核心数启动WRF积分。如果WRF能正常运行并输出历史文件wrfout_d01_*则说明WRF部分安装成功。4.2 CMAQ测试案例运行CMAQ的测试更为复杂需要WRF输出作为输入。USEPA提供了一个名为CMAQ_Benchmark的测试案例但数据量巨大。对于初步验证可以尝试运行一个极简的“单元测试”或者使用教程案例。准备CMAQ输入数据这包括气象数据将WRF输出的wrfout文件通过MCIPMeteorology-Chemistry Interface Processor工具转换为CMAQ可读的格式如METCRO3D、METDOT3D。MCIP是CMAQ工具集的一部分需要单独编译流程类似CCTM。排放数据需要人为排放和生物源排放清单通常由SMOKE模型处理生成这是一个独立且复杂的系统。对于测试可以使用CMAQ基准案例中提供的预处理好的排放文件。初始和边界条件可以由ICON和BCON工具生成或者使用默认的清洁大气背景场。光解速率文件由JPROC工具根据模拟时间、经纬度生成。配置CCTM运行创建一个运行目录如$CMAQ_HOME/run/test将编译好的cctm可执行文件复制过来。从CMAQ基准案例或教程中复制runscript运行脚本和CTM_CONC、CTM_EMIS等输入文件到该目录。编辑运行脚本正确设置所有输入文件的路径、模拟时间步长、化学机制如cb6r3_ae7_aq、输出选项等。最关键的是编辑CTM_CONC文件指定化学机制、气溶胶方案、过程分析选项等。提交运行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 CCmpicc export FCmpif90 export CXXmpicxx # 解决gfortran高版本兼容性问题 export FFLAGS-fallow-argument-mismatch保存后执行source ~/.bashrc。可以通过which mpicc、nc-config --version、echo $CMAQ_HOME等命令验证所有路径是否设置正确。整个安装过程从系统准备到测试运行涉及步骤繁多任何一个环节的疏漏都可能导致失败。最关键的体会是环境隔离和版本控制。通过在我们自定义的$BASE_DIR下编译所有依赖完全避开了系统包管理器的干扰这是成功的基础。其次耐心阅读错误信息编译错误通常都会给出明确的文件和行号根据错误信息去搜索解决方案远比盲目尝试有效。最后善用日志文件无论是configure、make还是运行脚本都使用tee命令将输出重定向到日志文件这是事后排查问题的唯一可靠依据。
返回列表