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 的优先级:

  1. nday>=0itaufin=nday*day_step
  2. nday<0:按 -nday 个动力步运行。
  3. less1day:覆盖为 int(fractday*day_step)
  4. 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 路径的状态转换:

  1. 从 label 1 开始 forward 步。
  2. MOD(itau-1,iperiod)==0forward,进入 backward 步:forward=.FALSE., leapf=.FALSE., GO TO 2
  3. backward 完成后进入第一个 leapfrog 步:leapf=.TRUE., dt=2*dtvr
  4. 常规 leapfrog 步保持 leapf=.TRUE.dt=2*dtvr
  5. 每当 MOD(itau,iperiod)==0,回到 label 1 重新执行 Matsuno forward。

purmats 路径只在 forward/backward 之间往返,不进入常规 leapfrog。

门控标志

每次进入 label 2 都重新设置:

标志 COMMON 完整 leapfrog.F MARS phymars/leapfrog_nogcm.F
apphys 物理调用门,由 iphysiqphysics 控制 同左
conser 守恒诊断门,由 iconser 控制 同左
apdiss 耗散门,由 dissip_period 控制;浅水或 dissip_period==0 会关闭 nogcm 不使用
lafin 最后一个 physics 调用标志 同左

完整 GCM 中:

Mars 日期推进

完整 leapfrog.F 对 Mars 日期有特殊处理:

MARS phymars/leapfrog_nogcm.F 只用 start_time 构造小时;当前 COMMON 源码已删除 dyn3d/leapfrog_nogcm.F,因此这里不再做 COMMON nogcm 对照。

复现要点

待确认

相关页面