makelmdz_fcm Mars target 和输出命名约定

输入范围

LMDZ.COMMON-6.3\LMDZ.COMMON\makelmdz_fcm
LMDZ.COMMON-6.3\LMDZ.COMMON\bld.cfg
LMDZ.COMMON-6.3\LMDZ.COMMON\build_gcm
LMDZ.COMMON-6.3\LMDZ.COMMON\create_make_gcm
LMDZ.MARS\doc\compilation.tex
LMDZ.MARS\doc\testphys1d.tex
LMDZ.MARS\deftank\*\run0
LMDZ.MARS\deftank\launch_1Dchained.sh
LMDZ.MARS\deftank\launch_orb_1Dchained.sh

Mars 运行参与度:构建期必经/运行期命名匹配。Mars GCM 运行时不执行 makelmdz_fcm,但运行脚本里的 gcm=... 或 1D exePCM=... 必须匹配它生成的 bin/<target>_<dim>_phymars_<mode>.e

target 来源

makelmdz_fcm 的参数解析把最后一个非选项参数写入 code

makelmdz_fcm -arch local -d 62x48x32 -p mars gcm
                                                   ^ code

Mars GCM 常用 target:

target 主程序位置 Mars 运行角色 并行限制
gcm COMMON libf/dyn3d/gcm.F90libf/dyn3dpar/gcm.F 3D Mars GCM 主程序。 可串行或并行。
newstart MARS libf/dynphy_lonlat/phymars/newstart.F 生成/修改 Mars 初始状态。 脚本禁止 -parallel
start2archive MARS libf/dynphy_lonlat/phymars/start2archive.F 把 start/restart 转 archive。 脚本禁止 -parallel
testphys1d MARS libf/phymars/dyn1d/testphys1d.F90 1D Mars physics column driver。 单数字维度,脚本禁止 -parallel

bld.cfg 不单独列出这些名字;它读取 makelmdz_fcm 写入的:

%EXEC          <code>
%SUFF_NAME     <suffix>
bld::target    liblmdz.a %EXEC%SUFF_NAME
dir::bin       %ROOT_PATH/bin

因此实际可执行文件由 code + SUFF_NAME 形成,并输出到 COMMON 根目录下的 bin/

SUFF_NAME 规则

makelmdz_fcm 先保留原始维度字符串 dim_full,再生成 suffix:

SUFF_NAME = _<dim_full>
SUFF_NAME = _<dim_full>_phy<physique>

对 Mars,-p marsphysique=mars,所以物理包标签是 phymars

并行模式再追加:

条件 追加片段 动力目录含义
默认或 -parallel none _seq 3D 用 dyn3d;1D 用 phymars/dyn1d
-parallel mpi _para DYN=dyn3dpar,加 CPP_PARA CPP_MPI
-parallel omp _para DYN=dyn3dpar,加 CPP_PARA CPP_OMP
-parallel mpi_omp _para DYN=dyn3dpar,加 CPP_PARA CPP_MPI CPP_OMP
-parallel ... -mem _para_mem DYN=dyn3dmem

普通 Mars run 不走 ORCHIDEE、coupled、INCA 分支;若显式打开 -v-c-chimie INCA,脚本还会追加 _orch_couple_inca。这些不是当前 Mars GCM 主路径。

最后,若不是 -libphy,脚本追加 .e

<target>_<dim>_phymars_seq.e
<target>_<dim>_phymars_para.e
<target>_<dim>_phymars_para_mem.e

-libphy 是只编译 physics library 的特殊路径,会清空 code/SUFF_NAME,不生成 Mars run 可执行文件。

常见 Mars 命名映射

命令形态 预期输出名
makelmdz_fcm -arch local -d 62x48x32 -p mars gcm bin/gcm_62x48x32_phymars_seq.e
makelmdz_fcm -arch <arch> -d 64x48x54 -p mars -parallel mpi gcm bin/gcm_64x48x54_phymars_para.e
makelmdz_fcm -arch <arch> -d 64x48x54 -p mars -parallel mpi_omp gcm bin/gcm_64x48x54_phymars_para.e
makelmdz_fcm -arch <arch> -d 64x48x54 -p mars -parallel mpi -mem gcm bin/gcm_64x48x54_phymars_para_mem.e
makelmdz_fcm -arch <arch> -d 64x48x54 -p mars newstart bin/newstart_64x48x54_phymars_seq.e
makelmdz_fcm -arch <arch> -d 64x48x54 -p mars start2archive bin/start2archive_64x48x54_phymars_seq.e
makelmdz_fcm -arch local -d 29 -p mars testphys1d bin/testphys1d_29_phymars_seq.e

Mars 文档中的 1D 示例明确给出 testphys1d_29_phymars_seq.e;deftank 1D chained 脚本当前写死 testphys1d_32_phymars_seq.e,因此它对应的是 -d 32 -p mars testphys1d

运行脚本匹配点

3D deftank 机器脚本不是自动发现可执行文件;它们在 run0 顶部写死 gcm=

脚本 当前写死名称
deftank/run0 gcm.e
deftank/adastra/run0 gcm_64x48x54_phymars_para.e
deftank/ciclad/run0 gcm_64x48x32_phymars_para.e
deftank/irene/run0 gcm_64x48x73_phymars_para.e
deftank/mesu/run0 gcm_64x48x54_phymars_para.e
deftank/occigen/run0 gcm_64x48x73_phymars_para.e
deftank/spirit/run0 gcm_64x48x54_phymars_para.e

复现时要让三件事一致:

makelmdz_fcm -d <dim> -p mars [-parallel ...] gcm
bin/gcm_<dim>_phymars_<seq|para>.e
run0:gcm=gcm_<dim>_phymars_<seq|para>.e

否则编译成功也会在运行前失败,因为 run0 检查当前目录里的 $gcm 是否存在且可执行。

target 限制和失败模式

create_make_gcm 边界

create_make_gcm 是旧 makelmdz/makegcm 路径的 Makefile 生成器:它输出 PROG=codeDIRMAIN=dyn$(DIM)d$(FLAG_PARA)$(PROG).e 链接规则。当前 makelmdz_fcm 不调用它,而是调用:

./build_gcm ${fcm_path} -j $job $full

build_gcm 再执行 fcm build。因此本页的 Mars 命名结论以 makelmdz_fcm + bld.cfg 为准;create_make_gcm 只用于说明旧路径不要混入当前 FCM 命名判断。

复现检查点

  1. 从运行脚本或实验说明确定需要的 target:3D gcm、工具 newstart/start2archive、或 1D testphys1d
  2. 用目标网格维度替换 -d,Mars physics 必须用 -p mars
  3. 若目标是 newstart/start2archive/testphys1d,不要加 -parallel
  4. 编译后在 bin/ 下找 <target>_<dim>_phymars_<seq|para>.e
  5. 把可执行文件复制或链接到运行目录,并让 run0:gcm= 或 chained script 的 exePCM= 与文件名完全一致。
  6. _para.e,再确认 run0 启动器是 mpirun/srun/ccc_mprun 等并行启动方式,而不是直接 ./gcm

待确认

相关页面