leapfrog_p.F

源码路径:LMDZ.COMMON-6.3\LMDZ.COMMON\libf\dyn3dpar\leapfrog_p.F。 Mars 运行参与度:条件经过;Mars 并行动力 GCM 主循环经过,串行动力不经过。

文件定位

leapfrog_p 是并行版时间推进主循环。它复用串行时间调度思想,但额外负责 parallel_lmdz band 切换、halo/swap request、physics band 重分布、gather 后 root 写输出和 restart。

restart 时间

位置 行号 行为
Mars 中途 restart 分支 1822-1830 CALL dynredem1_p("restart.nc", REAL(itau)/REAL(day_step)+time_0-floor(time_0), ...) 或减去 day_end-day_ini
非 Mars 中途 restart fallback 1833 CALL dynredem1_p("restart.nc",JH_cur,...)
Mars 最终 restart 分支 2047-2053 CALL dynredem1_p("restart.nc", REAL(itau)/REAL(day_step), ...) 或减去 day_end-day_ini
非 Mars 最终 restart fallback 2056 CALL dynredem1_p("restart.nc",JH_cur,...)

传入 dynredem-restarttime 最终写入 NetCDF time coordinate 和 tab_cntrl(32)。当前 页面不再把 start_time 写 restart 作为主线;Mars 分支还会使用 time_0 的小数部分修正中途 restart 时间。

并行调度

SetDistrib(jj_Nb_Caldyn)
  -> caldyn_p / advtrac_p / integrd_p
  -> swap/hallo 到 jj_Nb_Physic
  -> calfis_p
  -> tendency halo merge
  -> addfi_p
  -> swap 回 jj_Nb_Caldyn
  -> 可选 jj_Nb_dissip
  -> Gather_Field + root 输出/restart

并行版关键依赖:

与 并行修复的接口确认

Mars 路径边界

复现检查

  1. 记录当前 jj_Nb_* band 和 SetDistrib 序列。
  2. 对 restart,检查 root 写入前字段是否已完整 gather/swap。
  3. 对 hybrid MPI/OMP 卡死或 request 错误,先查 parallel_lmdzomp_chunk
  4. 对 physics 配置差异,查 is_master getin 和 bcast

相关页面