dyn1d/control_mod.F90
路径
LMDZ.MARS\libf\phymars\dyn1d\control_mod.F90
文件定位
dyn1d/control_mod.F90 在当前源码树中不是独立实现,而是一行相对路径:
../../../../LMDZ.COMMON/libf/dyn3d_common/control_mod.F90
它把 1D 编译路径中的 control_mod 模块解析到 LMDZ.COMMON/libf/dyn3d_common/control_mod.F90。目标模块是公共动力核心的运行控制状态容器,保存日期、步长、物理调用频率、动力输出、offline 和旧 Mars/Generic 兼容控制量。定向搜索显示当前 libf/phymars/dyn1d 目录内没有直接 use control_mod;1D testphys1d 的运行长度、输出频率、垂直坐标和 restart 控制主要在 init_testphys1d_mod.F90 里通过本地变量和 getin 读取。
定义的符号
| 符号 | 类型 | 行号 | 作用 |
|---|---|---|---|
control_mod.F90 |
path stub | dyn1d line 1 | 指向 LMDZ.COMMON/libf/dyn3d_common/control_mod.F90。 |
control_mod |
module | common target line 5 | 保存 3D 动力核心运行控制变量。 |
目标模块只声明 SAVE 标量和字符串变量,没有子例程、函数、分配或文件 I/O。
控制状态清单
| 变量组 | 符号 | 含义 |
|---|---|---|
| 日期和运行长度 | nday, dayref, anneeref, raz_date, starttime, less1day, fractday, ndynstep, nday_r |
3D 动力运行起止日期、参考日期、短于一天运行和按步数运行控制。 |
| 动力步进频率 | day_step, iperiod, iapp_tracvl, iphysiq, nsplit_phys, dissip_period, idissip |
每日动力步数、Matsuno/leapfrog 周期、tracer 平流、物理调用和耗散频率。 |
| 输出和诊断 | periodav, iecri, iecrimoy, ip_ebil_dyn, output_grads_dyn, ok_dynzon, ok_dyn_ins, ok_dyn_ave, ecritstart, timestart |
动力历史、平均、zonal transport、start/restart 和能量收支输出控制。 |
| 模式和兼容开关 | offline, cpofT, force_conserv_tracer, config_inca, planet_type, resetvarc |
offline、温度相关热容、tracer 质量守恒、INCA 配置、行星类型和变量重置。 |
公共赋值路径
LMDZ.COMMON/libf/dyn3d/conf_gcm.F90 和 dyn3dpar/conf_gcm.F90 是主要配置读取方。代表性默认值和 getin 路径:
| 配置键 | 默认值/行为 | 证据 |
|---|---|---|
dayref |
1 后 getin('dayref', dayref) |
dyn3d/conf_gcm.F90:132-133 |
anneeref |
1998 后 getin('anneeref', anneeref) |
dyn3d/conf_gcm.F90:140-141 |
raz_date |
0 后 getin('raz_date', raz_date) |
dyn3d/conf_gcm.F90:150-151 |
nday |
10 后 getin('nday', nday) |
dyn3d/conf_gcm.F90:165-166 |
day_step |
240 后 getin('day_step', day_step) |
dyn3d/conf_gcm.F90:212-213 |
iperiod |
5 后 getin('iperiod', iperiod) |
dyn3d/conf_gcm.F90:226-227 |
periodav |
1. 后 getin('periodav', periodav) |
dyn3d/conf_gcm.F90:260-261 |
offline |
.FALSE. 后 getin('offline', offline) |
dyn3d/conf_gcm.F90:513-514 |
ok_dynzon |
.FALSE. 后 getin('ok_dynzon', ok_dynzon) |
dyn3d/conf_gcm.F90:541-542 |
这些是公共 3D 动力配置事实;当前 dyn1d 主程序没有直接调用 conf_gcm 的证据。
读取方和运行影响
| 读取方 | 读取符号 | 作用 |
|---|---|---|
dyn3d/gcm.F90 |
planet_type, nday, day_step, iperiod, iphysiq, raz_date, anneeref, dayref, ok_dyn_*, periodav 等 |
检查步频约束、设置动力时间步和历史输出。 |
dyn3d/leapfrog.F / dyn3dpar/leapfrog_p.F |
nday, day_step, iperiod, iphysiq, dissip_period, offline, ok_dynzon, periodav 等 |
控制 Matsuno/leapfrog 步进、物理调用、耗散和输出。 |
dyn3d/advtrac.F90 |
iapp_tracvl, day_step |
控制 tracer 平流累计调用频率。 |
evolution/pem.F90 |
iphysiq, day_step, nsplit_phys |
派生物理时间步 iphysiq*daysec/day_step/nsplit_phys。 |
dyn1d 关系
当前 libf/phymars/dyn1d 的定向搜索没有发现 use control_mod。1D 运行控制由其他文件直接管理:
| 文件 | 控制项 |
|---|---|
init_testphys1d_mod.F90 |
通过 getin 读取 day0、time、steps_per_sol、outputs_per_sol、ndt、psurf、hybrid 等;派生 dttestphys = daysec/steps_per_sol。 |
testphys1d.F90 |
按 do idt=1,ndt 主循环推进 time/day,每步调用 physiq 并更新风、温度、地表压力和 tracer。 |
writerestart1D_mod.F90 |
写出 restart1D.txt,但不读取 control_mod。 |
因此,本页的 control_mod 是 dyn1d 编译路径可见的公共模块,不是当前 1D 运行控制的直接来源。
副作用和 I/O
| 项目 | 说明 |
|---|---|
| 文件 I/O | control_mod 本身无 I/O。 |
| 分配/释放 | 无。 |
| 全局状态 | 所有变量为 SAVE,由 conf_gcm 或动力初始化路径赋值后供公共动力例程读取。 |
| 线程 | 目标模块没有 THREADPRIVATE 声明。 |
复现要点
- 复现 3D GCM 控制流时,应先运行
conf_gcm填写control_mod,再进入gcm/leapfrog。 - 复现 1D
testphys1d时,不应假设control_mod::day_step/nday/iphysiq控制主循环;应查看init_testphys1d_mod.F90的本地ndt/steps_per_sol/dttestphys。 - 若某个 dyn1d 构建目标链接到公共动力例程,仍需保证该 path stub 或符号链接能提供
control_mod模块文件。
待确认
- 当前 Windows 工作树把链接文件呈现为一行路径文本;在原始类 Unix 工作树中它可能是符号链接。
- dyn1d 构建是否因为公共依赖而需要编译
control_mod,需结合 makefile/构建脚本确认。 - 若后续页面发现 dyn1d 间接调用公共
gcm/leapfrog路径,需要回补本页的调用关系。
相关页面
- dyn1d/index.md - dyn1d 子目录索引。
- init_testphys1d_mod.F90 - 1D 初始化主流程。
- testphys1d.F90 - 1D 主程序。
- logic_mod.F90 - dyn1d 使用的公共逻辑状态 stub。