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 边界
- 动力 history/dynav 仍由
inithist/writehist/initdynav/writedynav系列承担。 - 当前
ioipsl_getin_p_mod用is_master代替旧is_mpi_root .AND. is_omp_root。 - lon-lat 输出面积应使用
cell_area_for_lonlat_outputs,不要混用 physics cell area。
复现检查表
- 新 restart 文件必须能看到
controle_descriptor。 controle(32)应与写文件时传入dynredem1*的time一致;Mars 分支不一定等于JH_cur。- 并行 restart 的 root 写入前字段必须完整。
- getin 配置差异查
is_master和 broadcast。 - 输出面积差异区分 physics 面积和 lon-lat output 面积。