arch 环境和 Mars deftank 运行约定

输入范围

LMDZ.COMMON-6.3\LMDZ.COMMON\makelmdz_fcm
LMDZ.COMMON-6.3\LMDZ.COMMON\arch\arch-*.env
LMDZ.COMMON-6.3\LMDZ.COMMON\arch\arch-*.fcm
LMDZ.COMMON-6.3\LMDZ.COMMON\arch\arch-*.path
LMDZ.MARS\deftank\run0
LMDZ.MARS\deftank\*\run0
LMDZ.MARS\deftank\*\run_month1
LMDZ.MARS\deftank\*\run_year1
LMDZ.MARS\deftank\launch_1Dchained.sh
LMDZ.MARS\deftank\launch_orb_1Dchained.sh

Mars 运行参与度:构建期必经/运行期条件经过arch-*.env/.fcm/.path 在编译 Mars GCM 时必经;deftank 脚本在使用示例作业运行 Mars GCM 或 1D PCM 时条件经过。它们不改变物理公式,但决定编译器、库、MPI/OMP 环境、可执行文件名和 restart 链式运行是否匹配。

三类 arch 文件职责

makelmdz_fcm -arch <name> 在 COMMON 根目录创建并使用三个生成名:

arch.env  -> arch/arch-<name>.env 或 .void_file
arch.path -> arch/arch-<name>.path
arch.fcm  -> arch/arch-<name>.fcm

脚本先 source arch.envsource arch.path,再把 arch.fcmconfig.fcm 交给 bld.cfg。三类文件分工如下:

文件 使用时机 主要内容 Mars 复现作用
arch-*.env shell 执行期,source arch.env module purge/load、编译器/MPI/NetCDF/HDF5/XIOS 依赖模块;有些 arch 没有 .env,脚本用空文件代替。 mpif90, nc-config, nf-config, NetCDF/HDF5 环境变量等可见。
arch-*.fcm FCM 配置期,inc arch.fcm %COMPILER, %LINK, %FPP_FLAGS, %BASE_FFLAGS, %PROD_FFLAGS, %DEBUG_FFLAGS, %MPI_FFLAGS, %OMP_FFLAGS, %BASE_LD, %OMP_LD 等。 决定 Fortran/C 编译器、real*8、NetCDF double、MPI/OMP 编译和链接 flags。
arch-*.path shell 执行期,source arch.path,随后写入 config.fcm NETCDF_INCDIR/LIBDIR/LIB, IOIPSL_INCDIR/LIBDIR/LIB, XIOS_INCDIR/LIBDIR/LIB 等。 makelmdz_fcm -io ioipsl/mix/xios 注入 include/lib 路径。

当前工作树中 LMDZ.COMMON\arch.envarch.patharch.fcm 不存在;它们是构建命令运行后生成的链接。Mars deftank 脚本里 source ../trunk/LMDZ.COMMON/arch.env 依赖这个生成物或等价手工准备。

代表性 arch 展开

arch .env .fcm .path
X64_JEANZAY module purge,加载 intel-all/19.0.4, gcc/9.1.0, MPI HDF5, NetCDF, NetCDF-Fortran。 %COMPILER mpiifort, %FPP_DEF NC_DOUBLE LAPACK FFT_MKL, real8/int32 flags,OpenMP -qopenmp -qopenmp-threadprivate=compat NETCDF_* 来自 nc-config,IOIPSL 指向 $ROOT/ioipsl/modipsl/lib,XIOS 指向 $ROOT/../XIOS
X64_OCCIGEN 加载 Intel 17、IntelMPI、HDF5、NetCDF;保留旧 module 组合注释。 %COMPILER mpif90, %CPP_DEF LAPACK, %FPP_DEF NC_DOUBLE LAPACK FFT_MKL,OpenMP -qopenmp NetCDF 使用 ${NETCDFF_LIBDIR}${NETCDF_INCDIR},IOIPSL/XIOS 路径同 $ROOT 约定。
gfortran .envmakelmdz_fcm 会链接空 .void_file %COMPILER gfortran, %LINK gfortran, %CPP_DEF LAPACK, %FPP_DEF NC_DOUBLE,gfortran real*8 flags。 依赖环境变量 $NETCDF,IOIPSL/XIOS 仍按 $ROOT/ioipsl$ROOT/../XIOS

复现含义:同一个 makelmdz_fcm -p mars gcm 命令换不同 -arch,会改变 module 环境、编译器、NetCDF/IOIPSL/XIOS 解析方式和 OpenMP/MPI flags;运行脚本必须和编译出来的 seq/para 可执行文件匹配。

Mars deftank 脚本分层

deftank 里的运行脚本不是编译器。它们假定可执行文件已经存在,并负责链式运行、作业调度、restart 滚动和日志命名。

脚本 职责 环境处理
deftank/run0 单机/通用链式运行模板:检查 gcm=gcm.e,复制 start<num>.nc/startfi<num>.ncstart.nc/startfi.nc,运行 ./$gcm,成功后把 restart*.nc 改名为下一段 start。 不 source arch.env;只直接运行当前目录可执行文件。
deftank/<machine>/run0 机器版本运行模板:设置机器默认 gcm=gcm_..._phymars_para.e,使用 mpirun, srun, ccc_mprun 或 binding wrapper 启动。 通常不 source arch.env;由外层 run_month1/run_year1 负责。
deftank/<machine>/run_month1 月链式作业入口:source arch 环境,设置 OMP_NUM_THREADS/OMP_STACKSIZE,生成当月 run.def,调用 ./run0,提交下个月作业。 多数机器 source ../trunk/LMDZ.COMMON/arch.env
deftank/<machine>/run_year1 年链式作业入口,与月脚本类似。 Adastra 版本 source arch.env 并设置 OMP。
launch_1Dchained.sh, launch_orb_1Dchained.sh 1D PCM 链式运行;指定 testphys1d_..._phymars_seq.e,检查 startfi.nc/start1D.txt,逐年运行。 顶部 source ../trunk/LMDZ.COMMON/arch.env

机器脚本差异

机器目录 run0 启动方式 run_month1 运行环境
adastra srun ... ./adastra_cpu_binding.sh ./$gcm,默认 gcm_64x48x54_phymars_para.e source ../trunk/LMDZ.COMMON/arch.envOMP_NUM_THREADS=$SLURM_CPUS_PER_TASKOMP_STACKSIZE=400M
occigen srun --resv-ports --kill-on-bad-exit=1 --mpi=pmi2 --label -n $SLURM_NTASKS $gcm source arch.env,设置 I_MPI_DOMAIN, I_MPI_PIN_RESPECT_CPUSET, KMP_HW_SUBSET, OMP_NUM_THREADS, OMP_STACKSIZE, KMP_AFFINITY
ciclad mpirun $gcm > lrun${numnew} source arch.env,用 PBS qsub 链接下个月脚本。
irene ccc_mprun -l $gcm > lrun${numnew} 2>&1 source arch.env,固定 OMP_NUM_THREADS=5OMP_STACKSIZE=400M
mesu mpirun -map-by slot:PE=$SLURM_CPUS_PER_TASK --bind-to core $gcm source arch.envOMP_NUM_THREADS=$SLURM_CPUS_PER_TASK
spirit mpirun $gcm > lrun${numnew} 2>&1 source arch.envOMP_NUM_THREADS=$SLURM_CPUS_PER_TASK

README 提醒用户需要改 run0 中的 gcm=... 行来匹配自己的可执行文件;Adastra 还要求根据核心数调整 run_month1/run_year1,Occigen README 明确 OMP_NUM_THREADS 要随节点/MPI/OMP 组合选择。

运行时 restart 链

run0 的通用状态机:

read num_run, default 0
numnew = numold + 1
require start<numold>.nc and startfi<numold>.nc
copy them to start.nc and startfi.nc
run executable, write lrun<numnew>
if restart.nc and restartfi.nc exist:
    move restart.nc   -> start<numnew>.nc
    move restartfi.nc -> startfi<numnew>.nc
    move diag/stat/profile outputs with numnew suffix
    write num_run=numnew
else:
    write num_run=99999 and keep crash marker

因此 deftank 运行约定要求:

和构建页的边界

复现检查点

  1. 编译前:确认 -arch <name> 对应 .fcm/.path 存在;如果没有 .env,确认空 .void_file 环境足够。
  2. 编译后或运行前:确认 COMMON 根目录存在可 source 的 arch.env,或把 deftank 脚本里的 source ../trunk/LMDZ.COMMON/arch.env 改到真实位置。
  3. 若运行并行可执行文件,确认 run0 使用的启动器和 gcm=..._para.e 与编译的 parallel/MPI/OMP 模式一致。
  4. 若使用 OpenMP,确认 OMP_NUM_THREADSOMP_STACKSIZE 和 scheduler 的 cpus-per-task 一致。
  5. 确认运行目录有 run.def.ref, run0, run_month1,以及 start<num>.nc/startfi<num>.nc
  6. 脚本链式提交前,确认 num_now/num_end、月长度 sed 值和 job scheduler 指令适合当前实验。

待确认

相关页面