makelmdz_fcm Mars 源码路径约定
输入范围
LMDZ.COMMON-6.3\LMDZ.COMMON\makelmdz_fcm
LMDZ.COMMON-6.3\LMDZ.COMMON\bld.cfg
LMDZ.MARS\doc\run.tex
LMDZ.MARS\doc\compilation.tex
Mars 运行参与度:构建期必经。Mars 可执行文件运行时不执行 makelmdz_fcm 或 bld.cfg,但 makelmdz_fcm -p mars gcm 决定哪些 COMMON 动力目录、Mars physics 目录、dyn-phys 接口目录和并行目录被 FCM 编译进 gcm_..._phymars_...e。
从命令到物理包名
LMDZ.MARS 文档给出的 3D Mars 构建示例是:
makelmdz_fcm -arch linux-ifort -d 64x48x49 -p mars gcm
makelmdz_fcm 默认 physique=lmd,遇到 -p mars 后把 physique 设为 mars,最后一个非选项参数 gcm 写入 code。随后:
| 脚本变量 | -p mars gcm 下的值 |
来源 |
|---|---|---|
physique |
mars |
-p 选项。 |
phys_root |
mars |
${physique:0:4} == "mars" 分支。 |
code |
gcm |
参数解析 fallback 分支。 |
CPP_KEY |
至少包含 CPP_PHYS |
physique!="nophys"。 |
SUFF_NAME |
_64x48x49_phymars_seq.e 或 _64x48x49_phymars_para.e |
维度、物理包和并行模式拼接。 |
phys_root 的作用是选择 dyn-phys 子接口名:phy${phys_root}。因此 -p mars 对应 phymars,而不是 phymar。
路径变量展开
脚本启动时:
LMDGCM = 当前工作目录
LIBFGCM = $LMDGCM/libf
LIBOGCM = $LMDGCM/libo
DYN_COMMON_PATH = $LIBFGCM/dyn3d_common
FILTRE_PATH/DYN_PHYS_PATH/DYN_PHYS_SUB_PATH/PHY_COMMON_PATH = $LMDGCM/.void_dir
只要 physique!="nophys",Mars 构建会把 physics 和接口路径打开:
PHY_COMMON_PATH = $LIBFGCM/phy_common
DYN_PHYS_PATH = $LIBFGCM/dynphy_lonlat
DYN_PHYS_SUB_PATH = $LIBFGCM/dynphy_lonlat/phymars
FILTRE_PATH = $LIBFGCM/filtrez
维度和并行模式决定 %DYN:
| 构建模式 | DYN |
说明 |
|---|---|---|
-parallel none, -d 64x48x49 |
dyn3d |
串行 3D 动力入口。 |
-parallel mpi/omp/mpi_omp, -d 64x48x49 |
dyn3dpar |
并行动力入口,另加 CPP_PARA 和 MPI/OMP key。 |
-d <single-number> 1D |
phymars/dyn1d |
1D 主程序在 physics 树;脚本同时关闭 filtre、dyn3d_common 和 dyn-phys 全目录编译。 |
对普通 3D Mars 串行 gcm,写入 config.fcm 的核心路径等价于:
%LIBF <LMDGCM>/libf
%DYN dyn3d
%DYN_COMMON <LMDGCM>/libf/dyn3d_common
%PHY_COMMON <LMDGCM>/libf/phy_common
%FILTRE <LMDGCM>/libf/filtrez
%PHYS phymars
%DYN_PHYS <LMDGCM>/libf/dynphy_lonlat
%DYN_PHYS_SUB <LMDGCM>/libf/dynphy_lonlat/phymars
%EXEC gcm
%SUFF_NAME _64x48x49_phymars_seq.e
bld.cfg 如何使用这些路径
bld.cfg 先 include arch.fcm 和 config.fcm,再设:
%SRC_PATH %LIBF
核心 source groups 是:
| source group | 展开方式 | Mars 3D 串行含义 |
|---|---|---|
src::dyn |
%SRC_PATH/%DYN |
<LMDGCM>/libf/dyn3d。 |
src::phys |
%SRC_PATH/%PHYS |
<LMDGCM>/libf/phymars。 |
src::dyn_phys |
%DYN_PHYS |
<LMDGCM>/libf/dynphy_lonlat。 |
src::dyn_phys_sub |
%DYN_PHYS_SUB |
<LMDGCM>/libf/dynphy_lonlat/phymars。 |
src::grid |
%SRC_PATH/grid |
COMMON grid/dimensions。 |
src::filtrez |
%FILTRE |
COMMON longitudinal filter。 |
src::misc |
%SRC_PATH/misc |
COMMON NetCDF/getin/interpolation helpers。 |
src::dyn3d_common |
%DYN_COMMON |
COMMON serial/parallel shared dynamics。 |
src::phy_common |
%PHY_COMMON |
COMMON physics-side parallel/grid/output utilities。 |
目标输出:
bld::target liblmdz.a %EXEC%SUFF_NAME
dir::bin %ROOT_PATH/bin
所以 gcm 会生成 bin/gcm_64x48x49_phymars_seq.e 或 bin/gcm_64x48x49_phymars_para.e,与 LMDZ.MARS 文档中的命名一致。
COMMON/MARS 分离树的边界
源码文档说明模型分成两棵树:COMMON 保存共用动力,MARS 保存 Mars physics;同时文档描述的集成布局中,COMMON libf 下的 phymars/aeronomars 和 dynphy_lonlat/phymars 可以作为指向 LMDZ.MARS/libf 的链接。
当前源码依据:
| 路径 | 当前存在性 | 含义 |
|---|---|---|
LMDZ.COMMON\libf\dynphy_lonlat\phymars |
不存在 | 仅 COMMON 源码树不能独立满足 %DYN_PHYS_SUB。 |
LMDZ.MARS\libf\dynphy_lonlat\phymars |
存在 | Mars dyn-phys 接口实体在 MARS 树。 |
LMDZ.COMMON\libf\phymars |
不存在 | 仅 COMMON 源码树不能独立满足 %SRC_PATH/%PHYS。 |
LMDZ.MARS\libf\phymars |
存在 | Mars physics 实体在 MARS 树。 |
复现 Mars 构建时必须让 FCM 看到 %SRC_PATH/%PHYS 和 %DYN_PHYS_SUB。做法可能是使用发布包/检出流程创建的链接,或在构建前建立等价集成布局。若只在当前拆分 checkout 的 LMDZ.COMMON 目录直接运行 makelmdz_fcm -p mars gcm,这些 Mars physics 路径在源码层面无法由 COMMON 自身提供。
并行和工具目标边界
-parallel mpi加CPP_PARA CPP_MPI,DYN=dyn3dpar,后缀为_para。-parallel omp加CPP_PARA CPP_OMP,DYN=dyn3dpar。-parallel mpi_omp加CPP_PARA CPP_MPI CPP_OMP,DYN=dyn3dpar。newstart和start2archive被脚本显式禁止并行编译。- 1D 目标被脚本显式禁止并行,且
DYN=phymars/dyn1d,同时关闭完整dyn3d_common和 dyn-phys 目录编译。 -libphy会把DYN、DYN_COMMON、FILTRE、DYN_PHYS、DYN_PHYS_SUB都指向.void_dir,并清空code/SUFF_NAME;这不是 Mars 3D run 可执行文件构建路径。
复现检查点
- 在构建目录运行
makelmdz_fcm前,确认LMDZ.COMMON/libf/phymars和LMDZ.COMMON/libf/dynphy_lonlat/phymars是否可由链接或集成布局访问。 - 确认
-p mars后phys_root=mars,而非mar。脚本中先有${physique:0:3}=="mar",随后${physique:0:4}=="mars"会覆盖为mars。 - 对 3D Mars GCM,确认
-d是三维格式,如64x48x49;单数字维度会进入 1D 特殊路径。 - 对并行 Mars GCM,确认使用
dyn3dpar页面和 MPI/OMP arch flags,而不是串行dyn3d页面。 - 编译失败若表现为缺
phymars或iniphysiq_mod,优先检查目录链接/集成布局,而不是 COMMON 动力源码。
待确认
- 当前构建流程是否有外部脚本负责创建 COMMON 下的 Mars physics 链接;本页只根据当前当前源码和构建脚本说明边界。
-ext_src被写入config.fcm,但当前bld.cfg未显示对应 source group;实际是否由外部 FCM 配置使用需确认。