Restart / history / I/O 主题

源码基线:LMDZ.COMMON-6.3\LMDZ.COMMON。 Mars 运行参与度:条件经过。

主题结论

当前源码中,COMMON restart 主约定是:

leapfrog / leapfrog_p 写 restart 时传分支化 time
  -> dynredem1 / dynredem1_p 接收 time
  -> tab_cntrl(32) = time
  -> NetCDF time coordinate 写 time
  -> dynredem0 / dynredem0_p 写 controle_descriptor

当前 wiki 正文不再保留旧版“restart 写 start_time”主线。

参与文件

文件 页面 作用
dyn3d/leapfrog.F leapfrog 串行时间推进和 restart 调用。
dyn3dpar/leapfrog_p.F leapfrog_p 并行时间推进和 root 写 restart 调用。
dyn3d_common/dynredem.F90 dynredem-restart 串行 restart NetCDF 创建/追加。
dyn3dpar/dynredem_p.F90 dynredem-restart 并行 restart NetCDF 创建/追加。
dyn3d_common/dynredem_mod.F90 dynredem-restart put_char1/int2fmtstr 等 NetCDF helper。
phy_common/ioipsl_getin_p_mod.F90 ioipsl_getin_p_mod 当前源码使用 is_master
phy_common/geometry_mod.F90 geometry-output-cell-area lon-lat 输出面积独立缓存。

Restart 写入流程

gcm/gcm_p 初始化
  -> dynredem0 / dynredem0_p 创建 restart skeleton
leapfrog 时间推进
  -> 达到 ecritstart 或最终步
  -> 计算当前日期/小时 JH_cur
  -> Mars 分支按 itau/day_step/time_0/day_end 组合 restart time
  -> 非 Mars fallback 使用 JH_cur
  -> dynredem1 / dynredem1_p 写 time 到 tab_cntrl(32) 和 time coordinate

串行 leapfrog.F 的 Mars restart 分支在 910-916 和 1065-1070 行使用 REAL(itau)/REAL(day_step) 相关表达式,非 Mars fallback 在 921 和 1074 行使用 JH_cur。并行 leapfrog_p.F 同样分支化:Mars 分支在 1822-1830 和 2047-2053 行使用 itau/day_step/time_0/day_end 组合,非 Mars fallback 在 1833 和 2056 行使用 JH_cur

I/O 边界

复现检查表

  1. 新 restart 文件必须能看到 controle_descriptor
  2. controle(32) 应与写文件时传入 dynredem1*time 一致;Mars 分支不一定等于 JH_cur
  3. 并行 restart 的 root 写入前字段必须完整。
  4. getin 配置差异查 is_master 和 broadcast。
  5. 输出面积差异区分 physics 面积和 lon-lat output 面积。

相关页面