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.F90dyn3dpar/conf_gcm.F90 是主要配置读取方。代表性默认值和 getin 路径:

配置键 默认值/行为 证据
dayref 1getin('dayref', dayref) dyn3d/conf_gcm.F90:132-133
anneeref 1998getin('anneeref', anneeref) dyn3d/conf_gcm.F90:140-141
raz_date 0getin('raz_date', raz_date) dyn3d/conf_gcm.F90:150-151
nday 10getin('nday', nday) dyn3d/conf_gcm.F90:165-166
day_step 240getin('day_step', day_step) dyn3d/conf_gcm.F90:212-213
iperiod 5getin('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 读取 day0timesteps_per_soloutputs_per_solndtpsurfhybrid 等;派生 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 声明。

复现要点

  1. 复现 3D GCM 控制流时,应先运行 conf_gcm 填写 control_mod,再进入 gcm/leapfrog
  2. 复现 1D testphys1d 时,不应假设 control_mod::day_step/nday/iphysiq 控制主循环;应查看 init_testphys1d_mod.F90 的本地 ndt/steps_per_sol/dttestphys
  3. 若某个 dyn1d 构建目标链接到公共动力例程,仍需保证该 path stub 或符号链接能提供 control_mod 模块文件。

待确认

相关页面