
适用场景:气象/海洋/气候数值模式(WRF、CESM、MPAS、ROMS 等)的 Linux 服务器/超算集群部署基础平台:CentOS 7/8、Rocky Linux 8/9、Ubuntu 20.04/22.04 LTS更新时间:2026 年 8 月
在数值模拟领域,Linux 是绝对主导的操作系统平台。无论是单台工作站还是千节点超算集群,科研模式的编译与运行都深度依赖 Linux 环境的正确配置。一个完整的科研计算环境包含三个层次:
┌─────────────────────────────────────────────┐│ Layer 3: 模式层 (WRF/CESM/MPAS/ROMS...) │├─────────────────────────────────────────────┤│ Layer 2: 科学计算库 (NetCDF/HDF5/MPI/PIO) │├─────────────────────────────────────────────┤│ Layer 1: 系统基础 (编译器/Shell/作业调度) │└─────────────────────────────────────────────┘
核心原则:上层模式编译的 90% 错误都源于下层环境配置不当。因此,系统化的环境搭建是模式成功运行的前提。
科研服务器通常通过 SSH 远程登录。首先确认当前 Shell 类型:
echo $SHELL# 查看当前 Shell,通常为 /bin/bashecho $HOME# 查看家目录路径echo $PATH# 查看可执行文件搜索路径
建议配置:在 ~/.bashrc 或 ~/.bash_profile 中建立统一的科研环境入口:
# ~/.bashrc 科研环境配置模板# ============================================# 1. 基础路径设置export PATH=/usr/local/bin:$PATHexport LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH# 2. 避免中文乱码export LANG=en_US.UTF-8export LC_ALL=en_US.UTF-8# 3. 常用别名alias ls='ls --color=auto'alias ll='ls -lh'alias lt='ls -lht'# 按时间排序alias ..='cd ..'# 4. 历史记录优化export HISTSIZE=10000export HISTTIMEFORMAT=”%Y-%m-%d %H:%M:%S ”# 5. 使配置生效source ~/.bashrc
不同发行版的包管理命令不同,科研环境通常需要以下基础工具链:
CentOS/Rocky/RHEL 系列:
# 安装基础开发工具sudo yum groupinstall ”Development Tools” -ysudo yum install -y vim wget curl tree htop tmux \gcc gcc-c++ gcc-gfortran \openssl-devel libffi-devel zlib-devel \libpng-devel libjpeg-turbo-devel \cmake git svn m4 flex bison# 若使用 yum 找不到包,先启用 EPELsudo yum install -y epel-release
Ubuntu/Debian 系列:
sudo apt updatesudo apt install -y build-essential gfortran \libssl-dev libffi-dev zlib1g-dev \libpng-dev libjpeg-dev \cmake git subversion m4 flex bison \vim wget curl tree htop tmux
关键依赖说明:
build-essential/ Development Tools:包含 gcc、make、ar 等基础编译工具gfortran:GNU Fortran 编译器,模式编译必需 flex/ bison:词法/语法分析器,KPP 等化学预处理工具依赖
建议在个人目录下建立统一的科研软件树:
mkdir -p ~/software/{src,build,lib,bin}mkdir -p ~/work/{cases,tools,data,scripts}# 目录结构说明~/software/├── src/# 源码包存放├── build/# 编译中间文件├── lib/# 自编译库安装路径(NetCDF/MPI 等)└── bin/# 自编译可执行文件~/work/├── cases/# 模式算例├── tools/# 后处理工具(NCL、Python 脚本)├── data/# 输入/输出数据└── scripts/# 作业提交脚本
GNU 编译器版本建议:gcc/gfortran9.x ~ 12.x是科研模式的"甜区",过高版本(13+)可能导致部分旧版模式源码编译失败。
Intel oneAPI 配置(若使用 Intel 编译器):
# 方式1:使用 module 加载(集群环境常见)module load compiler/2024.1module load mpi/2021.12# 方式2:手动 source 安装脚本source /opt/intel/oneapi/setvars.sh intel64# 验证which ifort && ifort --versionwhich mpiifort && mpiifort --version
MPI(Message Passing Interface)是分布式内存并行计算的标准。常用实现包括 MPICH、OpenMPI 和 Intel MPI。
MPICH 源码编译安装(推荐,稳定性最佳):
cd ~/software/srcwget https://www.mpich.org/static/downloads/4.2.2/mpich-4.2.2.tar.gztar -xzf mpich-4.2.2.tar.gzcd mpich-4.2.2# 配置:指定安装路径,启用 Fortran 绑定./configure --prefix=$HOME/software/lib/mpich \--enable-fortran=all --enable-shared \CC=gcc CXX=g++ FC=gfortran F77=gfortranmake -j$(nproc)# 使用所有 CPU 核心并行编译make install# 添加环境变量export PATH=$HOME/software/lib/mpich/bin:$PATHexport LD_LIBRARY_PATH=$HOME/software/lib/mpich/lib:$LD_LIBRARY_PATH
OpenMPI 安装(若需要 CUDA-aware MPI):
./configure --prefix=$HOME/software/lib/openmpi \--enable-mpi-fortran=all \--with-cuda=/usr/local/cuda \CC=gcc CXX=g++ FC=gfortranmake -j$(nproc) && make install
MPI 环境验证:
# 检查 MPI 编译器包装器which mpif90 && mpif90 --version# 编译并运行测试程序cat > hello_mpi.f90 << 'EOF'program hello_mpiuse mpiimplicit noneinteger :: rank, size, ierrcall MPI_Init(ierr)call MPI_Comm_rank(MPI_COMM_WORLD, rank, ierr)call MPI_Comm_size(MPI_COMM_WORLD, size, ierr)print *, 'Hello from rank ', rank, ' of ', sizecall MPI_Finalize(ierr)end program hello_mpiEOFmpif90 hello_mpi.f90 -o hello_mpimpirun -np 4 ./hello_mpi
科研模式(WRF、CESM、ROMS 等)普遍依赖NetCDF → HDF5 → zlib的库链。必须按依赖顺序编译,且使用同一套编译器。
模式可执行文件↓ 链接NetCDF-Fortran 4.6.x↓ 依赖NetCDF-C 4.9.x↓ 依赖(NetCDF-4 格式)HDF5 1.14.x↓ 依赖zlib 1.3.x
设定统一安装根目录:
export INSTALL_DIR=$HOME/software/libmkdir -p $INSTALL_DIR
cd ~/software/srcwget https://zlib.net/zlib-1.3.1.tar.gztar -xzf zlib-1.3.1.tar.gz && cd zlib-1.3.1./configure --prefix=$INSTALL_DIR/zlibmake -j$(nproc) && make install
cd ~/software/srcwget https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-1.14/hdf5-1.14.4.3/src/hdf5-1.14.4-3.tar.gztar -xzf hdf5-1.14.4-3.tar.gz && cd hdf5-1.14.4-3# 关键:启用 Fortran 接口和并行 I/OCC=mpicc FC=mpif90 CXX=mpicxx \./configure --prefix=$INSTALL_DIR/hdf5 \--enable-fortran --enable-shared \--enable-parallel --with-zlib=$INSTALL_DIR/zlib \--enable-build-mode=productionmake -j$(nproc) && make install
cd ~/software/srcwget https://github.com/Unidata/netcdf-c/archive/v4.9.2.tar.gztar -xzf v4.9.2.tar.gz && cd netcdf-c-4.9.2export CPPFLAGS=”-I$INSTALL_DIR/hdf5/include -I$INSTALL_DIR/zlib/include”export LDFLAGS=”-L$INSTALL_DIR/hdf5/lib -L$INSTALL_DIR/zlib/lib”export LIBS=”-lhdf5_hl -lhdf5 -lz -ldl”CC=mpicc ./configure --prefix=$INSTALL_DIR/netcdf \--enable-shared --enable-netcdf4 \--enable-parallel-tests --disable-dap \--disable-byterange --disable-libxml2make -j$(nproc) && make install
cd ~/software/srcwget https://github.com/Unidata/netcdf-fortran/archive/v4.6.1.tar.gztar -xzf v4.6.1.tar.gz && cd netcdf-fortran-4.6.1# NetCDF-Fortran 编译时必须能找到 NetCDF-Cexport LD_LIBRARY_PATH=$INSTALL_DIR/netcdf/lib:$LD_LIBRARY_PATHexport LIBS=”-lnetcdf -lhdf5_hl -lhdf5 -lz”CC=mpicc FC=mpif90 F77=mpif90 \CPPFLAGS=”-I$INSTALL_DIR/netcdf/include” \LDFLAGS=”-L$INSTALL_DIR/netcdf/lib -L$INSTALL_DIR/hdf5/lib” \./configure --prefix=$INSTALL_DIR/netcdf \--enable-shared --enable-parallel-testsmake -j$(nproc) && make install
将以下内容写入 ~/.bashrc 或独立的 ~/env_science.sh 脚本:
# ===== 科研计算环境变量配置 =====export INSTALL_DIR=$HOME/software/lib# MPIexport PATH=$INSTALL_DIR/mpich/bin:$PATHexport LD_LIBRARY_PATH=$INSTALL_DIR/mpich/lib:$LD_LIBRARY_PATH# NetCDF / HDF5export NETCDF=$INSTALL_DIR/netcdfexport NETCDF_DIR=$NETCDFexport PATH=$NETCDF/bin:$PATHexport LD_LIBRARY_PATH=$NETCDF/lib:$INSTALL_DIR/hdf5/lib:$INSTALL_DIR/zlib/lib:$LD_LIBRARY_PATHexport CPPFLAGS=”-I$NETCDF/include”export LDFLAGS=”-L$NETCDF/lib”# 验证脚本alias check_netcdf='ncdump -k test.nc 2>/dev/null || echo ”ncdump OK”'alias check_nf='nf-config --all 2>/dev/null | head -5 || echo ”nf-config missing”'
绝大多数 Fortran/C 编写的地球系统模式遵循以下编译范式:
# 通用模式编译流程1. 获取源码(git clone / wget)2. 清理旧编译文件(make clean / ./clean -a)3. 运行配置脚本(./configure / cmake)4. 修改生成的编译配置文件(config.h / configure.wrf)5. 执行编译(make / ./compile)6. 验证可执行文件生成
WRF(Weather Research and Forecasting)是最具代表性的中尺度气象模式,其编译流程可作为其他模式的参考模板。
cd ~/software/srcgit clone --recurse-submodules https://github.com/wrf-model/WRF.gitcd WRF# 检查关键环境变量是否设置echo ”NETCDF=$NETCDF”echo ”CC=$CC, FC=$FC”which mpif90 && mpif90 --versionncdump | head -1# 验证 NetCDF 可用
./clean -a# 彻底清理(首次可跳过)./configure
执行后会列出可选的编译配置。以 GNU + MPI 并行为例:
Please select from among the following Linux x86_64 options:1. (serial) GNU (gfortran/gcc)2. (smpar) GNU (gfortran/gcc) - OpenMP3. (dmpar) GNU (gfortran/gcc) - MPI ← 推荐选择4. (dm+sm) GNU (gfortran/gcc) - MPI+OpenMP...Enter selection [1-83] : 3Compile for nesting? (1=basic, 2=preset moves, 3=vortex following)Note: 1 = standard, 2/3 = special cases for moving nestsEnter option (1, 2, or 3) : 1
# 编译真实数据案例(em_real)./compile em_real 2>&1 | tee compile.log# 后台编译(防止 SSH 断连)nohup ./compile em_real > compile.log 2>&1 &# 监控编译进度tail -f compile.log
成功标志:main/ 目录下应生成 4 个可执行文件:
ls -lh main/*.exe# 预期输出:# main/ndown.exe# main/real.exe# main/tc.exe# main/wrf.exe
cd ~/software/srcgit clone https://github.com/wrf-model/WPS.gitcd WPSexport WRF_DIR=~/software/src/WRFexport JASPERLIB=$INSTALL_DIR/jasper/libexport JASPERINC=$INSTALL_DIR/jasper/include./configure# 通常选择 serial(WPS 计算量小,串行即可)./compile 2>&1 | tee compile_wps.log# 验证ls -lh geogrid.exe ungrib.exe metgrid.exe
当编译失败时,按以下顺序排查:
# 1. 定位错误位置(查看日志最后 100 行)tail -n 100 compile.log | grep -i ”error\|fatal\|undefined”# 2. 检查库路径是否正确ldd main/wrf.exe 2>/dev/null | grep ”not found”# 3. 确认编译器一致性(NetCDF 与 WRF 必须使用同一套编译器)nc-config --ccnf-config --fc# 4. 检查 configure 生成的编译配置文件cat configure.wrf | grep -E ”^(CC|FC|NETCDF|HDF5)”# 5. 清理后重新配置./clean -a./configure
对于测试或小规模模拟,可直接使用 mpirun 启动:
cd ~/work/cases/test_case# 链接模式可执行文件(避免重复拷贝)ln -sf ~/software/src/WRF/main/wrf.exe .ln -sf ~/software/src/WRF/main/real.exe .# 运行前处理./real.exe# 并行运行模式(本机 16 核)mpirun -np 16 ./wrf.exe
生产环境通常使用作业调度系统管理计算资源。主流系统包括:
sbatchsqueue, scancel | ||
qsubqstat, qdel | ||
bsubbjobs, bkill |
#!/bin/bash#SBATCH -J WRF_test# 作业名#SBATCH -p normal# 队列名#SBATCH -N 2# 节点数#SBATCH --ntasks-per-node=64# 每节点 MPI 进程数#SBATCH -t 24:00:00# 运行时限#SBATCH -o wrf_%j.out# 标准输出#SBATCH -e wrf_%j.err# 错误输出# 加载环境模块(根据集群实际调整)module purgemodule load gcc/12.2.0module load mpich/4.1.1module load netcdf/4.9.2# 进入算例目录cd $SLURM_SUBMIT_DIR# 运行 WRF(Slurm 自动管理 MPI 进程映射)srun ./wrf.exe# 或使用 mpirun(若集群配置支持)# mpirun -np $SLURM_NTASKS ./wrf.exe
提交与监控:
sbatch run_wrf.slurm# 提交作业squeue -u $USER# 查看作业状态scancel# 取消作业scontrol show job# 查看作业详情
#!/bin/bash#PBS -N WRF_run#PBS -q normal#PBS -l nodes=4:ppn=32#PBS -l walltime=48:00:00#PBS -o wrf_out.log#PBS -e wrf_err.logcd $PBS_O_WORKDIRmpirun -np 128 ./wrf.exe
提交命令:qsub run_wrf.pbs
模式运行期间,建议实时监控资源使用情况:
# 查看节点负载(在计算节点上执行)htopwatch -n 5 'cat /proc/loadavg'# 查看 MPI 进程映射ps -ef | grep wrf.exe | wc -l# 确认进程数是否正确# I/O 监控(若输出缓慢)iostat -x 5
在共享集群上,通常使用Modules系统管理多版本软件,避免环境冲突。
module avail# 查看可用模块module load intel/2024.1# 加载指定模块module unload intel/2024.1# 卸载模块module purge# 清空所有已加载模块module show netcdf/4.9.2# 查看模块详情(路径、环境变量)
若具有管理员权限,可为团队创建自定义模块:
# 创建模块文件目录mkdir -p ~/privatemodules/netcdf# 编写模块文件 ~/privatemodules/netcdf/4.9.2#%Module1.0#### NetCDF 4.9.2 Module##proc ModulesHelp { } {puts stderr ”NetCDF 4.9.2 with HDF5 1.14 and MPICH 4.2”}module-whatis ”NetCDF 4.9.2 scientific I/O library”setenv NETCDF /home/username/software/lib/netcdfprepend-path PATH /home/username/software/lib/netcdf/binprepend-path LD_LIBRARY_PATH /home/username/software/lib/netcdf/libprepend-path LD_LIBRARY_PATH /home/username/software/lib/hdf5/lib
使用自定义模块:
module use ~/privatemodulesmodule load netcdf/4.9.2
~/work/├── 00_raw_data/# 原始再分析资料(ERA5、FNL、GFS 等)├── 01_static_data/# 静态地理数据(地形、土地利用)├── 02_cases/# 算例目录│ ├── case_20240115/│ │ ├── namelist.input│ │ ├── wrfout/# 模式输出│ │ └── logs/# 运行日志│ └── case_20240201/├── 03_post/# 后处理脚本与结果└── 04_tools/# 辅助工具
数值模式输出文件常达数百 GB,建议采取以下策略:
# 1. 使用并行 NetCDF(PnetCDF)或 NetCDF-4 并行 I/O# 在 namelist 中设置:# io_form_history = 11# 并行 NetCDF# io_form_restart = 11# 2. 输出目录使用高性能文件系统(Lustre/GPFS)# 避免在 NFS 家目录直接写大文件# 3. 分时段输出,避免单文件过大# history_interval = 60, 60, 60# 每小时一个文件# 4. 使用 nccopy 压缩归档nccopy -d9 -s wrfout_orig.nc wrfout_compressed.nc
command not found | which mpif90 | |
cannot find -lnetcdf | echo $NETCDF | |
undefined reference to MPI_ | mpif90 --showme | |
NetCDF: Unknown file format | ncdump -k file.nc | |
forrtl: severe (174) | ulimit -s | ulimit -s unlimited |
squeue -u $USER | sinfo,调整分区或核数请求 | |
iostat -x 1 |
科研 Linux 环境配置的核心可归纳为以下 checklist:
□ 1. 确认编译器版本(gcc 9~12 / Intel oneAPI 2024+)□ 2. 按顺序编译依赖链:zlib → HDF5 → NetCDF-C → NetCDF-Fortran□ 3. 所有库使用同一套编译器(gcc+mpich 或 intel+impi)□ 4. 将环境变量写入独立脚本,避免 ~/.bashrc 过度膨胀□ 5. 模式编译前执行 ./clean -a,避免旧目标文件干扰□ 6. 生产运行使用作业调度系统,禁止直接在登录节点跑大任务□ 7. 输出文件定期归档,避免撑爆配额□ 8. 保留编译日志(tee compile.log),便于回溯排错
Linux 科研环境的搭建是一个"熟能生巧"的过程。首次配置可能需要数小时甚至数天,但一旦建立标准化的脚本和工作流,后续在新机器上的部署可在 30 分钟内完成。建议将本文中的环境变量配置和编译步骤整理为个人专属的 setup_env.sh 和 install_libs.sh 脚本,实现环境的一键重建。
参考资源:

2026基于前沿AI-Agent2.0驱动的科研全链路实战营:一站式掌握LLM与Notebooklm应用、数据分析、自动化编程、文献管理到论文写作的核心技能、手把手搭建本地LLM与Agent,体验多模型“圆桌会议”的头脑风暴、基于N8N与OpenClaw、Claude Code构建从文献挖掘到成果产出的自主智能体、解锁Seedance2,轻松将论文转化为高质量的科研科普视频
培训时间:9月11日-14日
CNS与顶级期刊高水平论文写作的“破局”之道AI人机协同的CNS级论文全流程写作与发表系统高级培训班
培训时间:8月21日-22日、28日-29日
第四期基于Claude Code 、Codex双AI协同高水平论文撰写与质量校准:研究定位→数据分析→论文初稿→交叉审稿→投稿与返修全流程实践培训班
培训时间:8月29日-30日
2027年国自然与省级基金项目申报全链条实战升级暨AI人机协同撰写、立项依据精修、关键科学问题凝练、技术路线图设计、评审逻辑深度拆解、申报复盘经验融入与高质量本子打磨高级培训班
培训时间:9月5日-6日【报名即开通全部学习内容】
培训时间:8月14日-17日
培训时间:8月29日-30日、9月5日-6日
高水平学术论文写作的“破局”之道暨 AI赋能下前沿选题、智能写作、科研可视化、精准选刊与投稿审稿博弈策略及 CNS 顶刊跃迁进阶全链路实践培训班
培训时间:8月22日、28日-29日
GeoAI遥感深度学习高级研修班场景分类·语义分割·目标检测·变化检测四大任务,从CNN、Transformer到空间基础模型与AI Agent全流程实战技术应用
培训时间:8月29日-30日、9月5日-6日
基于Claude Code与Codex双AIAgent协作的WebGIS项日全链路开发与生产级部署实战高级培训班
培训时间:9月3日、5日-6日
AI-XGBoost机器学习与生态—地学大数据深度挖掘:从算法原理、多源数据建模到高水平论文产出全流程实战培训班
培训时间:10月17日-18日、24日-25日
从机理到实践告别“黑箱”模拟:OpenGeoSys(OGS6)多物理场THMC 全耦合建模与Python自动化分析高级实战营
培训时间:8月15日-16日 22日-23日
【五天教学】农业普查大数据与AI融合的数字农业与粮食安全智慧决策高级培训班
培训时间:8月15日-16日、22日-23日
IBIS陆地生态系统模型从环境搭建、多源数据预处理到水-热-碳-氮耦合模拟、模型验证与论文成果衔接全链路实战应用高级研修班
培训时间:8月22日-23日、29日-30日
最新SWAT+模型在水文水资源及面源污染模拟中的实践技术应用及典型案例分析
培训时间:8月20日-23日
双碳目标下区域大气环境与新能源气候资源未来演变高精度模拟技术:CMIP6+WRF-Chem、误差订正与多情景污染—气候协同评估及典型案例应用培训班
培训时间:8月29日-30日、9月5日-6日



Ai尚研修丨专注科研领域
技术推广,人才招聘推荐,科研活动服务
科研技术云导师,Easy Scientific Researchv