COMMON 状态/控制约定

输入范围

LMDZ.COMMON-6.3\LMDZ.COMMON\libf\dyn3d_common\control_mod.F90
LMDZ.COMMON-6.3\LMDZ.COMMON\libf\dyn3d\logic_mod.F90
LMDZ.COMMON-6.3\LMDZ.COMMON\libf\dyn3d\temps_mod.F90
LMDZ.COMMON-6.3\LMDZ.COMMON\libf\dyn3d_common\comconst_mod.F90
LMDZ.COMMON-6.3\LMDZ.COMMON\libf\dyn3d_common\com_io_dyn_mod.F90
LMDZ.COMMON-6.3\LMDZ.COMMON\libf\dyn3d_common\conf_dat_m.F90

Mars 运行参与度:必经接口兼容control_mod, logic_mod, temps_mod, comconst_mod 是 Mars GCM、MARS dynphy_lonlat/phymars/nogcm.F90、newstart/start2archive/testphys1d 共享的状态层;com_io_dyn_mod 在动力 history/dynav 输出打开时条件经过;conf_dat_m 是 Mars utility 和插值链可复用的数据方向标准化 helper。

模块职责

模块 状态类别 主要职责
control_mod SAVE 全局控制状态 运行长度、时间步频率、物理调用频率、输出频率、Mars ecritstart/timestartplanet_type、tracer/守恒/输出开关。
logic_mod 全局逻辑门控 Matsuno/leapfrog 当前阶段、是否调用 physics/dissipation/guide、是否读 start、垂直坐标类型和物理类型。
temps_mod 全局时间状态 itaufin/itau_dyn/itau_phy、起止日、参考日期、当前动力步长 dt、calendar 和 Mars hour_ini;history/dynav 输出状态深挖见 dynamic-output-state-holders
comconst_mod 全局常量和维度 im/jm/lllmdtvr/dtphys/dtdiss/daysec、行星半径/重力/气体常数/热容/自转、耗散和 sponge 参数。
com_io_dyn_mod 动力输出句柄 dyn_hist*.nc 文件名常量和 IOIPSL history id,由 inithist/initdynav 设置,由 writehist/writedynav 使用;file id 生命周期见 dynamic-output-state-holders
conf_dat_m 无持久状态 helper conf_dat2d/conf_dat3d 把输入 lon/lat/pressure 数据调整为 COMMON 期望方向和单位。

写入和初始化顺序

  1. conf_gcm.F90 是 COMMON gcm.F90 和 MARS dynphy_lonlat/phymars/nogcm.F90 共同使用的主配置写入点。它 USE control_mod, logic_mod, temps_mod, comconst_mod,通过 getin 设置 planet_type, calend, nday, ndynstep, starttime, timestart, ecritstart, day_step, iperiod, periodav, ok_guide, read_start, iflag_phys, iphysiq 等状态。
  2. COMMON gcm.F90 和 MARS dynphy_lonlat/phymars/nogcm.F90 在入口处调用 conf_gcm(99,.TRUE.),随后检查 iphysiqiperiodday_stepiperiod/iphysiq 的整除关系。
  3. COMMON gcm / MARS dynphy_lonlat/phymars/nogcmdaysec/day_step 计算 zdtvr,必要时覆盖 dtvr;然后调用 iniconst
  4. iniconst.F90 使用 control_modcomconst_mod,把 dtphys=iphysiq*dtvr,并按 planet_type 选择垂直离散默认路径。
  5. COMMON leapfrog.F 和 MARS phymars/leapfrog_nogcm.Fnday/day_step/less1day/fractday/ndynstep 推出 itaufin,再在时间循环中维护 logic_modforward/leapf/apphys/apdisstemps_mod%dt
  6. dynetat0.F90start.nccontroleTime 恢复 daysec/dtvr/rad/g/omeg/itau_dyn 等状态;dynredem.F90 写回这些控制量,并在 Mars 路径写 Time

关键状态约定

状态 所属模块 设置/刷新 主要使用位置
planet_type control_mod conf_gcm, Mars defrun_new COMMON gcm, MARS dynphy_lonlat/phymars/nogcm.F90, leapfrog*, dynetat0/dynredem, infotrac, callphysiq_mod, Mars utilities。
day_step control_mod conf_gcm, Mars defrun_new, testphys1d init COMMON gcm, MARS dynphy_lonlat/phymars/nogcm.F90, leapfrog*, guide, Mars newstart, defrun_new
iperiod control_mod conf_gcm, Mars defrun_new Matsuno/leapfrog 周期、输出平均间隔、inidissip
iphysiq control_mod conf_gcm, Mars defrun_new COMMON gcm / MARS dynphy_lonlat/phymars/nogcm.F90 的 physics 初始化、leapfrog*apphys 门控。
ecritstart/timestart control_mod conf_gcm, Mars defrun_new Mars restart 写出/读取:leapfrog, dynetat0, dynredem
read_start logic_mod conf_gcm COMMON gcm, MARS dynphy_lonlat/phymars/nogcm.F90, dynetat0, sortvarc, iniacademic
iflag_phys logic_mod conf_gcm, Mars defrun_new physics 是否调用、iniphysiq, leapfrog*, calfis
forward/leapf/apphys/apdiss logic_mod leapfrog* 时间循环 caldyn/integrd/addfi/dissip 等动力核按阶段解释 tendency。
itaufin/itau_dyn temps_mod leapfrog*, dynetat0, dynredem restart 时间、history/dynav 输出、平均输出。
dtvr/dtphys/dtdiss comconst_mod conf_gcm, COMMON gcm, MARS dynphy_lonlat/phymars/nogcm.F90, iniconst, inidissip 时间推进、physics、dissipation、guide、Mars utilities。
rad/g/r/cpp/kappa/omeg comconst_mod conf_planete, iniconst, restart 读取;详见 iniconst / conf_planete 行星常数初始化链 几何、Exner、动力倾向、Mars newstart/start2archive/lect_start_archive
histid/histvid/histuid com_io_dyn_mod inithist.F writehist.F
histaveid/histvaveid/histuaveid com_io_dyn_mod initdynav.F90 writedynav.F90

Mars 主流程中的读写关系

COMMON 3D GCM 和 MARS nogcm

COMMON gcm.F90 与 MARS dynphy_lonlat/phymars/nogcm.F90 共享以下状态层;后者不是 COMMON 源文件:

conf_gcm
  -> control_mod / logic_mod / temps_mod / comconst_mod
  -> day_step/iperiod/iphysiq consistency checks
  -> dtvr = daysec / day_step
  -> iniconst
  -> iniphysiq when iflag_phys enables physics
  -> COMMON leapfrog or MARS dynphy_lonlat/phymars/leapfrog_nogcm

Mars 运行中 planet_type=="mars" 会影响 leapfrog 的日期计算、ecritstart restart 写出、dynetat0/dynredemcontrole 偏移和 Time 变量处理。MARS dynphy_lonlat/phymars/nogcm.F90 变体保留同样的状态层,但大部分动力 tendency 被关掉,主要用作 Mars lon-lat 物理驱动。

Mars utility

MARS phymars utility 直接使用这些 COMMON 状态:

Mars 文件 COMMON 状态
newstart.F control_mod: day_step/iphysiq/anneeref/planet_type, comconst_mod: lllm/daysec/dtphys/dtvr, temps_mod: day_ini/hour_ini
start2archive.F control_mod: planet_type, comconst_mod: daysec/dtphys/rad/g/r/cpp, temps_mod: day_ini/hour_ini
lect_start_archive.F comconst_mod: kappa/g/pi
readhead_NC.F comconst_mod: im/jm/lllm/daysec/dtvr, temps_mod: day_ini
ini_archive.F comconst_mod: daysec/dtvr/rad/omeg/g/cpp/kappa/pi, logic_mod: fxyhypb/ysinus
callphysiq_mod.F90 control_mod: planet_type,用于检查物理包和行星类型是否一致。
testphys1d/init_testphys1d_mod.F90 logic_mod: hybrid,并通过 getin 设置 1D 运行的 day/time/vertical 相关配置。

这些使用位置说明 control_mod/comconst_mod/temps_mod/logic_mod 不是单纯 3D 动力内部状态;它们也是 Mars 初始化、archive 转换和 1D 测试链的接口兼容层。

conf_dat_m 的数据方向约定

conf_dat2dconf_dat3d 不保存状态。它们接受输入坐标和场数组,并原地修改输出坐标/数据:

这个 helper 适合作为 Mars utility/interpolation 组页的支撑证据;它本身不是状态模块。

副作用和风险

复现顺序

要复现 Mars COMMON 状态层,最低顺序是:

  1. 通过 conf_gcm 或 Mars defrun_new 读取 run.def/gcm.def 风格配置,写入 control_mod, logic_mod, temps_mod
  2. 确认 planet_type=="mars" 或目标 utility 所需的兼容行星类型。
  3. 由 COMMON gcm 或 MARS dynphy_lonlat/phymars/nogcm.F90 校验 day_step, iperiod, iphysiq,并设 dtvr=daysec/day_step
  4. iniconst 写入 dtphys、维度派生量和垂直离散相关状态。
  5. 如从 start/restart 继续运行,调用 dynetat0 读取 controleTime,刷新 itau_dyn/daysec/dtvr 等状态。
  6. 进入 leapfrog* 后只把 logic_mod 的阶段门控解释为当前时间步状态。

待确认

相关页面