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/timestart、planet_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/lllm、dtvr/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 期望方向和单位。 |
写入和初始化顺序
conf_gcm.F90是 COMMONgcm.F90和 MARSdynphy_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等状态。- COMMON
gcm.F90和 MARSdynphy_lonlat/phymars/nogcm.F90在入口处调用conf_gcm(99,.TRUE.),随后检查iphysiq与iperiod、day_step与iperiod/iphysiq的整除关系。 - COMMON
gcm/ MARSdynphy_lonlat/phymars/nogcm用daysec/day_step计算zdtvr,必要时覆盖dtvr;然后调用iniconst。 iniconst.F90使用control_mod和comconst_mod,把dtphys=iphysiq*dtvr,并按planet_type选择垂直离散默认路径。- COMMON
leapfrog.F和 MARSphymars/leapfrog_nogcm.F用nday/day_step/less1day/fractday/ndynstep推出itaufin,再在时间循环中维护logic_mod的forward/leapf/apphys/apdiss和temps_mod%dt。 dynetat0.F90从start.nc的controle和Time恢复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/dynredem 的 controle 偏移和 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_dat2d 和 conf_dat3d 不保存状态。它们接受输入坐标和场数组,并原地修改输出坐标/数据:
- 经度接受弧度
[-pi,pi]或[0,2*pi],也接受角度[-180,180]或[0,360];角度会转换成弧度。 [0,2*pi]或[0,360]经度会旋转到[-pi,pi]。- 纬度若从南到北排列,会翻转成北到南。
conf_dat3d若垂直坐标最大值小于1200,把压力从 hPa 量级乘以 100 转为 Pa;若压力从低到高排列,会翻转为地面到模型顶。interbar=.TRUE.时,经纬坐标改成相邻点中点,用于 barycentric interpolation。
这个 helper 适合作为 Mars utility/interpolation 组页的支撑证据;它本身不是状态模块。
副作用和风险
- 这些模块大多没有显式初始化默认值,除
conf_gcm或 Marsdefrun_new写入外,直接读取会得到未定义或旧运行状态。 control_mod变量带SAVE,在长进程或工具程序复用时必须确认入口是否重新写入全部关键字段。logic_mod的forward/leapf/apphys/apdiss是时间循环临时状态,不应在leapfrog*外当作配置值解释。temps_mod%dt在 Matsuno 和 leapfrog 步之间变化:forward 阶段为dtvr,leapfrog 阶段通常为2*dtvr。com_io_dyn_mod的 history id 只有在对应inithist/initdynav调用后才有效。conf_dat_m遇到异常坐标只WRITE(6,*)报告,没有 abort;调用方需要自己判断输入是否合法。
复现顺序
要复现 Mars COMMON 状态层,最低顺序是:
- 通过
conf_gcm或 Marsdefrun_new读取 run.def/gcm.def 风格配置,写入control_mod,logic_mod,temps_mod。 - 确认
planet_type=="mars"或目标 utility 所需的兼容行星类型。 - 由 COMMON
gcm或 MARSdynphy_lonlat/phymars/nogcm.F90校验day_step,iperiod,iphysiq,并设dtvr=daysec/day_step。 - 调
iniconst写入dtphys、维度派生量和垂直离散相关状态。 - 如从 start/restart 继续运行,调用
dynetat0读取controle与Time,刷新itau_dyn/daysec/dtvr等状态。 - 进入
leapfrog*后只把logic_mod的阶段门控解释为当前时间步状态。
待确认
conf_dat_m在当前 Mars 工具链中的直接调用点需要结合 Mars 工具链继续反查;本页只根据 COMMON 源码说明其接口约定。control_mod%periodav/starttime在 Mars 运行脚本中的推荐值需要结合实际 run.def 样例确认。
相关页面
- gcm 入口
- 当前 COMMON 源码已删除
dyn3d/nogcm.F90;Mars 专用入口不在 COMMON 正文展开。 - conf_gcm 配置
- 动力控制和逻辑门控链
- 动力输出状态持有者
- leapfrog 状态约定
- 垂直离散构造
- iniconst / conf_planete 行星常数初始化链
- dynredem restart
- infotrac Mars 使用关系
- guide 配置与初始化约定