leapfrog 时间步调度
输入范围
LMDZ.COMMON-6.3\LMDZ.COMMON\libf\dyn3d\leapfrog.F
LMDZ.MARS\libf\dynphy_lonlat\phymars\leapfrog_nogcm.F
Mars 运行参与度:必经。COMMON 完整 GCM 使用 leapfrog.F 的 Matsuno/leapfrog 调度;MARS nogcm 路径复用同类标志和 physics 调度,只是去掉完整动力和耗散门控。
终止步数
itaufin 的优先级:
nday>=0:itaufin=nday*day_step。nday<0:按-nday个动力步运行。less1day:覆盖为int(fractday*day_step)。ndynstep>0:最终覆盖为指定动力步数。
随后 itaufinp1=itaufin+1。循环终止不是自然 RETURN,而是在达到结束条件时用 abort_gcm(modname,'Simulation finished',0) 停止。
label 结构
主循环用两个 label 管理:
| label | 含义 |
|---|---|
1 |
Matsuno forward 步入口;保存上一时刻状态,设 forward=.TRUE.、leapf=.FALSE.、dt=dtvr |
2 |
backward 或 leapfrog 步入口;根据当前标志计算调度门控并执行动力/物理/输出 |
非 purmats 路径的状态转换:
- 从 label 1 开始 forward 步。
- 若
MOD(itau-1,iperiod)==0且forward,进入 backward 步:forward=.FALSE.,leapf=.FALSE.,GO TO 2。 - backward 完成后进入第一个 leapfrog 步:
leapf=.TRUE.,dt=2*dtvr。 - 常规 leapfrog 步保持
leapf=.TRUE.、dt=2*dtvr。 - 每当
MOD(itau,iperiod)==0,回到 label 1 重新执行 Matsuno forward。
purmats 路径只在 forward/backward 之间往返,不进入常规 leapfrog。
门控标志
每次进入 label 2 都重新设置:
| 标志 | COMMON 完整 leapfrog.F |
MARS phymars/leapfrog_nogcm.F |
|---|---|---|
apphys |
物理调用门,由 iphysiq 和 physics 控制 |
同左 |
conser |
守恒诊断门,由 iconser 控制 |
同左 |
apdiss |
耗散门,由 dissip_period 控制;浅水或 dissip_period==0 会关闭 |
nogcm 不使用 |
lafin |
最后一个 physics 调用标志 | 同左 |
完整 GCM 中:
purmats:conser在 forward 且MOD(itau,iconser)==0;apdiss在非 forward 且MOD(itau,dissip_period)==0;apphys在非 forward 且MOD(itau,iphysiq)==0。- 非
purmats:conser看MOD(itau,iconser);apdiss看MOD(itau+1,dissip_period)且非 forward;apphys看MOD(itau+1,iphysiq)。
Mars 日期推进
完整 leapfrog.F 对 Mars 日期有特殊处理:
- label 1 日期用
jH_ref + hour_ini + mod(itau+1,day_step)/day_step。 - physics 前若
planet_type为mars或generic,jD_cur=int(day_ini+itau/day_step)。 - Mars physics 小时用
hour_ini + mod(itau,day_step)/day_step。
MARS phymars/leapfrog_nogcm.F 只用 start_time 构造小时;当前 COMMON 源码已删除 dyn3d/leapfrog_nogcm.F,因此这里不再做 COMMON nogcm 对照。
复现要点
iphysiq和dissip_period的判断在完整 GCM 中分别看itau+1或itau,取决于purmats和forward。- history/restart 输出在时间步末尾执行,发生在状态转换前。
- Mars 日期进入
calfis的时刻不是简单的itau+1,物理调用处对 Mars 使用itau的小时。
待确认
iperiod同时参与 Matsuno 重启动和输出平均时段,二者在所有 Mars 配置下是否总是同一周期需由配置页确认。