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.F90 或 libf/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 mars 令 physique=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 限制和失败模式
newstart和start2archive若带-parallel mpi/omp/mpi_omp,脚本直接退出,提示这两个工具必须串行。- 1D target 使用单数字
-d <nlayer>;脚本检测到一维时加CPP_1D,关闭完整dyn3d_common、filtrez和 dyn-phys 目录编译,并禁止-parallel。 - 3D GCM 必须用三段维度,例如
64x48x54;单数字维度会进入 1D 特殊路径。 gcm的并行后缀只区分_para,不会从输出名上区分mpi、omp和mpi_omp。真实并行方式要从编译命令、arch.fcmflags、CPP_KEY和运行脚本启动器确认。makelmdz_fcm中 cleanup 行写的是rm -f bin/${code}${SUFF_NAME}.e,而此时SUFF_NAME已包含.e;实际 FCM target 由bld.cfg的%EXEC%SUFF_NAME决定,不能用这行推导最终名字。
create_make_gcm 边界
create_make_gcm 是旧 makelmdz/makegcm 路径的 Makefile 生成器:它输出 PROG=code、DIRMAIN=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 命名判断。
复现检查点
- 从运行脚本或实验说明确定需要的 target:3D
gcm、工具newstart/start2archive、或 1Dtestphys1d。 - 用目标网格维度替换
-d,Mars physics 必须用-p mars。 - 若目标是
newstart/start2archive/testphys1d,不要加-parallel。 - 编译后在
bin/下找<target>_<dim>_phymars_<seq|para>.e。 - 把可执行文件复制或链接到运行目录,并让
run0:gcm=或 chained script 的exePCM=与文件名完全一致。 - 对
_para.e,再确认run0启动器是mpirun/srun/ccc_mprun等并行启动方式,而不是直接./gcm。
待确认
- 当前本地 workspace 没有实际运行一次 FCM build;本页按源码规则和 Mars 文档示例推导输出名。
_para后缀不区分 MPI/OMP,真实混合并行配置需要结合具体arch-*.fcm和作业脚本确认。