Mars dyn1d COMMON 直接转发约定

输入范围

LMDZ.MARS\libf\phymars\dyn1d
LMDZ.COMMON-6.3\LMDZ.COMMON\libf\dyn3d
LMDZ.COMMON-6.3\LMDZ.COMMON\libf\dyn3d_common
LMDZ.COMMON-6.3\LMDZ.COMMON\libf\dyn3dpar
LMDZ.COMMON-6.3\LMDZ.COMMON\libf\dynphy_lonlat

Mars 运行参与度:接口兼容phymars/dyn1d 是 Mars 1D physics driver 的编译目录,不走 3D gcm -> leapfrog 主链;但它通过一批“一行路径文件”把 COMMON 动力状态、垂直坐标、tracer、并行占位和 dyn-phys 接口暴露给 testphys1d。这些文件本身不是独立实现,等价于在 Mars dyn1d 编译上下文中纳入对应 COMMON 源文件。

直接转发清单

每个转发文件内容只有一行相对路径,形式为 ../../../../LMDZ.COMMON/...。本页确认到 14 个目标文件均存在。

Mars dyn1d 文件 COMMON 目标 角色 1D 链使用状态
abort_gcm.F LMDZ.COMMON\libf\dyn3d\abort_gcm.F 动力侧 abort 例程 init_testphys1d_mod.F90 在 orphan tracer 检查失败时调用。
logic_mod.F90 LMDZ.COMMON\libf\dyn3d\logic_mod.F90 动力逻辑开关模块 init_testphys1d_mod.F90 使用 hybrid 选择垂直坐标。
comconst_mod.F90 LMDZ.COMMON\libf\dyn3d_common\comconst_mod.F90 COMMON 动力常量状态 1D 目录暴露该模块;当前 testphys1d 主链主要使用 Mars physics 常量模块。
comvert_mod.F90 LMDZ.COMMON\libf\dyn3d_common\comvert_mod.F90 ap/bp/aps/bps/pa/preff 垂直坐标状态 testphys1dinit_testphys1d_mod 直接使用。
control_mod.F90 LMDZ.COMMON\libf\dyn3d_common\control_mod.F90 3D GCM 控制状态 1D 目录暴露接口;当前 1D 初始化不走 control_mod 主配置链。
disvert_noterre.F LMDZ.COMMON\libf\dyn3d_common\disvert_noterre.F 非地球垂直离散构造 init_testphys1d_mod.F90 调用后再初始化 vertical_layers_mod
ener_mod.F90 LMDZ.COMMON\libf\dyn3d_common\ener_mod.F90 动力能量守恒状态 1D 目录暴露接口;当前 1D 主链不写这些守恒量。
infotrac.F90 LMDZ.COMMON\libf\dyn3d_common\infotrac.F90 tracer 名称、数量、父子关系状态 init_testphys1d_modnqtot/tname/nqperes/nqfilsread_profile_modtname
paramet.h LMDZ.COMMON\libf\dyn3d_common\paramet.h 动力维度 include 支撑 COMMON 例程编译时的维度符号。
comgeom.h LMDZ.COMMON\libf\dyn3d_common\comgeom.h 动力几何 common/include 支撑 COMMON 例程编译时的几何符号。
serre_mod.F90 LMDZ.COMMON\libf\dyn3d_common\serre_mod.F90 zoom/网格相关状态 1D 目录暴露接口;当前 1D 主链未直接使用。
mod_const_mpi.F90 LMDZ.COMMON\libf\dyn3dpar\mod_const_mpi.F90 MPI 通信器和常量 testphys1dCPP_XIOS 下调用 init_const_mpiinit_testphys1d_mod 使用 COMM_LMDZ
parallel_lmdz.F90 LMDZ.COMMON\libf\dyn3dpar\parallel_lmdz.F90 并行初始化抽象 testphys1dCPP_XIOS 下调用 init_parallel
mod_interface_dyn_phys.F90 LMDZ.COMMON\libf\dynphy_lonlat\mod_interface_dyn_phys.F90 动力-物理接口初始化状态 init_testphys1d_mod.F90 调用 init_interface_dyn_phys

本地 1D 文件边界

phymars/dyn1d 同时包含非转发的本地 Mars 1D 文件:

本地文件 角色 COMMON 转发关系
testphys1d.F90 1D Mars physics driver,编译示例为 makegcm -p mars -d 25 testphys1d 使用转发的 comvert_mod, mod_const_mpi, parallel_lmdz
init_testphys1d_mod.F90 1D 初始化主模块,读取 traceur.defrun.def/callphys.def 参数,初始化垂直层、网格、surface 和 physics state。 使用转发的 infotrac, comvert_mod, logic_mod, mod_const_mpi, mod_interface_dyn_phys, disvert_noterre, abort_gcm
read_profile_mod.F90 读取 profile_<tracer> 输入剖面,缺失时按 tracer 名称给默认值。 使用转发的 infotrac%tname
profile_temp_mod.F90 构造或读取 1D 温度剖面。 不使用直接转发模块;使用 Mars physics 常量和 getin
writerestart1D_mod.F90 restart1D.txt,包含 ps/pa/preff、tracer、风和温度剖面。 接收由 comvert_mod 和 1D 初始化得到的 pa/preff,自身不 USE COMMON 转发模块。

1D 初始化如何使用转发模块

testphys1d.F90 第 31-37 行说明该程序只运行 Martian GCM 的物理部分,需要 testphys1d.defcallphys.defrun.def 和垂直层文件。它不是普通 Mars 3D GCM,也不调用 COMMON 的 gcm/leapfrog

关键顺序:

  1. testphys1d.F90 第 98-100 行在 CPP_XIOS 下调用 init_const_mpiinit_parallel,这两个符号来自转发的 mod_const_mpi.F90parallel_lmdz.F90
  2. testphys1d.F90 第 122-130 行通过 getin('startfiles_1D',...) 决定是否读 1D restart/startfi。
  3. init_testphys1d_mod.F90 第 177-220 行读取 traceur.def,设置 nqtot=nq 并分配 tname;第 222-253 行构造父子 tracer 关系,orphan tracer 时调用转发的 abort_gcm
  4. init_testphys1d_mod.F90 第 255-259 行初始化 physics distribution,XIOS 编译时把转发的 COMM_LMDZ 传入。
  5. 第 296-310 行读取 day_step/ndt 并计算 dttestphys=daysec/steps_per_sol。这里使用的是 Mars physics time_phylmdz_mod,不是 COMMON control_mod
  6. 第 314-339 行设置 psurf/pa/preff/hybrid,调用转发的 disvert_noterre 填充 ap/bp/aps/bps,再调用 vertical_layers_mod:init_vertical_layers
  7. 第 423-433 行调用 init_interface_dyn_physinit_regular_lonlatinit_geometryphys_state_var_initconf_physinitracer,让 1D 列满足 physics 接口期望。
  8. 第 435-440 行如果 conf_phys 设置的 iphysiq 不是 1,则强制设为 1,因为 1D driver 每一步都调用 physics。

伪流程:

testphys1d
  -> optional init_const_mpi/init_parallel
  -> getin startfiles_1D
  -> init_testphys1d
       -> read traceur.def into infotrac state
       -> init_physics_distribution(COMM_LMDZ or 1)
       -> getin day0/time/day_step/ndt/psurf/hybrid
       -> disvert_noterre -> comvert_mod ap/bp/aps/bps
       -> init_vertical_layers
       -> init_interface_dyn_phys + geometry + phys_state_var_init
       -> conf_phys + initracer
  -> timestep loop calls physiq every step
  -> optional writerestart1D

与 3D Mars GCM 的差异

主题 3D Mars GCM dyn1d/testphys1d
入口 gcmnogcm,进入 COMMON/Mars leapfrog 链。 testphys1d,只驱动一个物理列。
控制状态 conf_gcm/defrun_newcontrol_mod/logic_mod/temps_mod/comconst_mod 多数控制量由 getin 和 Mars physics state 写入;control_mod 只是转发暴露。
行星常量 从 Mars 配置、start/control 表和 iniconst 链进入动力/物理。 init_testphys1d_mod 第 131-170 行手写 Mars 常量。
垂直坐标 3D 初始化和 restart/control 表共同决定。 getin("hybrid") 后调用转发的 disvert_noterre,再用 init_vertical_layers 同步 physics 层。
tracer 状态 COMMON infotrac_init 读取并扩展 tracer。 1D 自己读取 traceur.def,手动写 nqtot/tname/nqperes/nqfils
并行 3D 并行入口由 dyn3dpar decomposition/halo 驱动。 只在 XIOS/physics distribution 接口上需要 COMM_LMDZ 和初始化占位。
restart dynetat0/dynredem 和 Mars phyetat0/phyredem 文本 start1D.txt/restart1D.txt 加可选 startfi.nc

复现注意事项

相关页面