leapfrog.F
源码路径:LMDZ.COMMON-6.3\LMDZ.COMMON\libf\dyn3d\leapfrog.F。 Mars 运行参与度:必经;Mars 串行动力 GCM 主循环经过本文件。
文件定位
leapfrog 是串行 GCM 的时间推进主循环。它调度 Matsuno/leapfrog 时间层、动力 tendency、tracer 输送、动力-物理耦合、耗散、输出和 restart。当前 COMMON 源码已删除 leapfrog_nogcm.F,本页不再做 COMMON nogcm 对照。
入口状态
主要 inout 数组包括 ucov/vcov/teta/ps/masse/phis/q。它们由 dyn3d/gcm.F90 完成初始态、tracer、geometry、restart/history 初始化后传入。leapfrog 自身负责时间步内状态推进和周期性写出。
时间调度
label 1: Matsuno forward 起点
-> 保存上一层状态
-> forward=.true.; leapf=.false.; dt=dtvr
label 2: 主循环
-> 设置 apphys/apdiss/conser
-> caldyn / advtrac / integrd
-> calfis / addfi
-> dissip / sponge / top_bound
-> history/dynav/restart
-> 根据 iperiod 在 forward/backward/leapfrog 间跳转
Mars 日期以 jD_ref/jH_ref/day_ini/day_ref/hour_ini/day_step 组合计算,并形成当前物理时间 JH_cur。restart 写出时还要按 planet_type 分支选择传给 dynredem1 的 time。
restart 时间
当前行为重点:
| 分支 | 行号 | 行为 |
|---|---|---|
Mars 中途 restart, ecritstart>0 |
910-916 | REAL(itau)/REAL(day_step)+time_0-floor(time_0);最终步且只在最终写时再减 day_end-day_ini。 |
| 非 Mars 中途 restart fallback | 921 | CALL dynredem1("restart.nc",JH_cur,...) |
Mars purmats 最终 restart |
1065-1070 | REAL(itau)/REAL(day_step);最终步且只在最终写时再减 day_end-day_ini。 |
| 非 Mars 最终 restart fallback | 1074 | CALL dynredem1("restart.nc",JH_cur,...) |
旧版 start_time 不是当前 主线。dynredem1 会把该 time 写入 time coordinate,并设置 tab_cntrl(32)=time。
主流程
- 计算 pressure/Exner/geopotential。
- 调
caldyn得到du/dv/dteta/dp/w/pbaru/pbarv。 - 在需要 tracer advection 的步调用
advtrac。 integrd把 tendency 写回动力状态。apphys为真时调 calfis,再由addfi把 physics tendency 加回。apdiss为真时调dissip、可选sponge/top_bound。- 按
iecri/ecritstart/itaufin写 history、dynav 和 restart。
Mars 路径边界
- Mars 主线经过
calfis/addfi,但具体物理过程在 MARSphymars侧。 - Earth/generic/Titan/giant 分支只作为条件边界记录,不在本 COMMON 页面展开。
- COMMON 删除
nogcm,Mars 专用 nogcm 若存在属于 MARS 树,不属于当前 COMMON 页面。
复现检查
- 先确定
forward/leapf/purmats当前时间层。 - 对 restart,先区分 Mars/非 Mars 和
purmats分支,再查dynredem1的tab_cntrl(32)。 - 对 physics 差异,检查
iphysiq/iflag_phys/apphys。 - 对耗散差异,检查
dissip_period/callsponge/iflag_top_bound。