1. 环境准备与Intel编译器安装在开始构建WRF-CMAQ集成环境前我们需要先搭建好基础编译环境。这里我选择Intel编译器套件包括ifort和icc它不仅针对Intel处理器做了深度优化还能显著提升WRF和CMAQ的计算性能。下面是我的实操步骤1.1 获取Intel编译器安装包首先登录Intel官网下载最新版的Base Kit和HPC Kit。以2022.2版本为例执行以下命令cd /home/username/Build_CMAQ/src wget https://registrationcenter-download.intel.com/akdlm/irc_nas/18673/l_BaseKit_p_2022.2.0.262_offline.sh wget https://registrationcenter-download.intel.com/akdlm/irc_nas/18679/l_HPCKit_p_2022.2.0.191_offline.sh注意如果下载速度慢可以先用浏览器下载后上传到服务器。我曾经因为网络问题卡在这里半天后来发现用迅雷下载再scp传上去更快。1.2 安装与配置执行静默安装并添加环境变量bash l_BaseKit_p_2022.2.0.262_offline.sh -a -c bash l_HPCKit_p_2022.2.0.191_offline.sh echo source /opt/intel/oneapi/setvars.sh --force ~/.bashrc source ~/.bashrc验证安装是否成功ifort -v # 应显示类似ifort version 2022.2.0的版本信息遇到过的坑有一次在CentOS 8上安装时因为系统缺少依赖库导致安装失败。解决方法是用yum install libstdc补全依赖后再重试。2. 基础依赖库编译2.1 MPI环境部署推荐使用MPICH而非OpenMPI因为实测发现它与Intel编译器兼容性更好wget https://www.mpich.org/static/downloads/3.4.2/mpich-3.4.2.tar.gz tar xzvf mpich-3.4.2.tar.gz cd mpich-3.4.2 CCicc CXXicpc FCifort ./configure --prefix/path/to/mpich --with-devicech3 make -j$(nproc) make install关键配置点--with-devicech3使用更稳定的CH3通信设备-j$(nproc)调用所有CPU核心加速编译2.2 科学计算库全家桶按顺序安装这些库时要注意版本匹配这是我的黄金组合库名称版本关键配置参数zlib1.2.11--prefix/path/to/zlibcurl7.77.0--with-zlib/path/to/zlibnetCDF-C4.8.0--disable-netcdf-4 --disable-dapnetCDF-F4.5.3需链接netCDF-C路径以netCDF为例编译Fortran接口时要特别指定C库路径CPPFLAGS-I/path/to/netcdf/include \ LDFLAGS-L/path/to/netcdf/lib \ ./configure --prefix/path/to/netcdf常见报错解决如果遇到Cant find or link to the z library检查curl是否正确链接了zlib或者尝试在netCDF配置中强制禁用netCDF-4功能。3. CMAQ-5.3.2编译实战3.1 IOAPI的花式安装IOAPI是CMAQ的I/O核心但它的Makefile系统比较复古。这是我的魔改流程解压后先创建专用目录mkdir Linux2_x86_64ifort ln -sf /path/to/netcdf/lib/*.so Linux2_x86_64ifort/修改Makeinclude.Linux2_x86_64ifortFC mpiifort -auto -warn notruncated_source OMPFLAGS -qopenmp # 必须用Intel的qopenmp而非标准openmp遇到编译错误时可能需要手动修改STATE3.EXT文件删除行末多余的符号3.2 CMAQ主程序调优编译CCTM核心模块时建议修改config_cmaq.csh中的优化参数case intel: setenv myF_FLAGS -O3 -xHost -qopenmp # 启用处理器特定优化 setenv myLINK_FLAG -qopenmp -static-intel # 静态链接提高移植性编译成功后用这个命令验证ls BLD_CCTM_v532_intel/CCTM_*.exe # 应看到CCTM_v532.exe4. WRF-4.1.1编译技巧4.1 图像处理库的坑WRF需要jasper和libpng处理气象数据但新老版本差异很大如果系统有cmake用jasper-2.0.10cmake -DCMAKE_INSTALL_PREFIX/path/to/jasper ..否则用jasper-1.900.1./configure --prefix/path/to/jasper4.2 WRF编译选项运行configure时选择16. (dmsm) INTEL (ifort/icc) # 分布式共享内存混合并行然后编译真实案例./compile -j 2 em_real compile.log # 建议重定向日志 tail -f compile.log # 动态查看进度成功标志是出现这两个文件ls -lh main/wrf.exe main/real.exe # 文件大小通常在50MB以上5. 系统联调与测试5.1 环境变量终极配置在.bashrc中添加这些关键变量export NETCDF/path/to/netcdf export IOAPI/path/to/ioapi export WRF_DIR/path/to/WRF export PATH$NETCDF/bin:$IOAPI/Linux2_x86_64ifort:$WRF_DIR/main:$PATH5.2 数据接口验证测试WRF到CMAQ的数据流转# 在WPS中运行geogrid和ungrib ./geogrid.exe ./ungrib.exe # 在CMAQ中运行mcip ./mcip.exe # 检查是否生成GRIDDESC文件常见问题排查如果出现netCDF格式错误检查WRF输出是否启用netCDF4压缩时间戳不匹配时确认WRF和CMAQ的namelist中日期设置一致整个编译过程在32核服务器上大约需要3小时。记得多开几个终端并行操作比如一个窗口装netCDF时另一个窗口可以开始装IOAPI。最后建议把编译好的库打包备份下次换机器直接解压就能用。
基于Intel编译器构建WRF-CMAQ集成环境:从依赖库到完整编译
1. 环境准备与Intel编译器安装在开始构建WRF-CMAQ集成环境前我们需要先搭建好基础编译环境。这里我选择Intel编译器套件包括ifort和icc它不仅针对Intel处理器做了深度优化还能显著提升WRF和CMAQ的计算性能。下面是我的实操步骤1.1 获取Intel编译器安装包首先登录Intel官网下载最新版的Base Kit和HPC Kit。以2022.2版本为例执行以下命令cd /home/username/Build_CMAQ/src wget https://registrationcenter-download.intel.com/akdlm/irc_nas/18673/l_BaseKit_p_2022.2.0.262_offline.sh wget https://registrationcenter-download.intel.com/akdlm/irc_nas/18679/l_HPCKit_p_2022.2.0.191_offline.sh注意如果下载速度慢可以先用浏览器下载后上传到服务器。我曾经因为网络问题卡在这里半天后来发现用迅雷下载再scp传上去更快。1.2 安装与配置执行静默安装并添加环境变量bash l_BaseKit_p_2022.2.0.262_offline.sh -a -c bash l_HPCKit_p_2022.2.0.191_offline.sh echo source /opt/intel/oneapi/setvars.sh --force ~/.bashrc source ~/.bashrc验证安装是否成功ifort -v # 应显示类似ifort version 2022.2.0的版本信息遇到过的坑有一次在CentOS 8上安装时因为系统缺少依赖库导致安装失败。解决方法是用yum install libstdc补全依赖后再重试。2. 基础依赖库编译2.1 MPI环境部署推荐使用MPICH而非OpenMPI因为实测发现它与Intel编译器兼容性更好wget https://www.mpich.org/static/downloads/3.4.2/mpich-3.4.2.tar.gz tar xzvf mpich-3.4.2.tar.gz cd mpich-3.4.2 CCicc CXXicpc FCifort ./configure --prefix/path/to/mpich --with-devicech3 make -j$(nproc) make install关键配置点--with-devicech3使用更稳定的CH3通信设备-j$(nproc)调用所有CPU核心加速编译2.2 科学计算库全家桶按顺序安装这些库时要注意版本匹配这是我的黄金组合库名称版本关键配置参数zlib1.2.11--prefix/path/to/zlibcurl7.77.0--with-zlib/path/to/zlibnetCDF-C4.8.0--disable-netcdf-4 --disable-dapnetCDF-F4.5.3需链接netCDF-C路径以netCDF为例编译Fortran接口时要特别指定C库路径CPPFLAGS-I/path/to/netcdf/include \ LDFLAGS-L/path/to/netcdf/lib \ ./configure --prefix/path/to/netcdf常见报错解决如果遇到Cant find or link to the z library检查curl是否正确链接了zlib或者尝试在netCDF配置中强制禁用netCDF-4功能。3. CMAQ-5.3.2编译实战3.1 IOAPI的花式安装IOAPI是CMAQ的I/O核心但它的Makefile系统比较复古。这是我的魔改流程解压后先创建专用目录mkdir Linux2_x86_64ifort ln -sf /path/to/netcdf/lib/*.so Linux2_x86_64ifort/修改Makeinclude.Linux2_x86_64ifortFC mpiifort -auto -warn notruncated_source OMPFLAGS -qopenmp # 必须用Intel的qopenmp而非标准openmp遇到编译错误时可能需要手动修改STATE3.EXT文件删除行末多余的符号3.2 CMAQ主程序调优编译CCTM核心模块时建议修改config_cmaq.csh中的优化参数case intel: setenv myF_FLAGS -O3 -xHost -qopenmp # 启用处理器特定优化 setenv myLINK_FLAG -qopenmp -static-intel # 静态链接提高移植性编译成功后用这个命令验证ls BLD_CCTM_v532_intel/CCTM_*.exe # 应看到CCTM_v532.exe4. WRF-4.1.1编译技巧4.1 图像处理库的坑WRF需要jasper和libpng处理气象数据但新老版本差异很大如果系统有cmake用jasper-2.0.10cmake -DCMAKE_INSTALL_PREFIX/path/to/jasper ..否则用jasper-1.900.1./configure --prefix/path/to/jasper4.2 WRF编译选项运行configure时选择16. (dmsm) INTEL (ifort/icc) # 分布式共享内存混合并行然后编译真实案例./compile -j 2 em_real compile.log # 建议重定向日志 tail -f compile.log # 动态查看进度成功标志是出现这两个文件ls -lh main/wrf.exe main/real.exe # 文件大小通常在50MB以上5. 系统联调与测试5.1 环境变量终极配置在.bashrc中添加这些关键变量export NETCDF/path/to/netcdf export IOAPI/path/to/ioapi export WRF_DIR/path/to/WRF export PATH$NETCDF/bin:$IOAPI/Linux2_x86_64ifort:$WRF_DIR/main:$PATH5.2 数据接口验证测试WRF到CMAQ的数据流转# 在WPS中运行geogrid和ungrib ./geogrid.exe ./ungrib.exe # 在CMAQ中运行mcip ./mcip.exe # 检查是否生成GRIDDESC文件常见问题排查如果出现netCDF格式错误检查WRF输出是否启用netCDF4压缩时间戳不匹配时确认WRF和CMAQ的namelist中日期设置一致整个编译过程在32核服务器上大约需要3小时。记得多开几个终端并行操作比如一个窗口装netCDF时另一个窗口可以开始装IOAPI。最后建议把编译好的库打包备份下次换机器直接解压就能用。