defrun.F
路径
LMDZ.COMMON-6.3\LMDZ.COMMON\libf\dyn3d_common\defrun.F
所属目录/模块
LMDZ.COMMON\libf\dyn3d_common
文件定位
defrun.F 定义旧式 SUBROUTINE defrun(tapedef, etatinit, clesphy0),从固定格式 gcm.def 顺序读取运行参数和物理开关,写入 control_mod、logic_mod、serre_mod 以及 clesphy0。文件头部源码注释明确写着“似乎不再使用,因此未为行星使用更新”。当前串行入口实际调用 conf_gcm。
Mars 运行参与度
接口兼容:源码注释称本例程似乎不再使用;COMMON/MARS 主链搜索未发现对 defrun 的直接调用。保留为旧式 gcm.def 顺序读取逻辑说明。
定义的符号
| 符号 |
类型 |
行号 |
作用 |
defrun |
subroutine |
6 |
从 gcm.def 读取旧式运行控制参数和物理键。 |
依赖的模块
| use 模块 |
only 列表 |
用途 |
待确认 |
control_mod |
- |
写 dayref/anneeref/nday/day_step/iperiod/... 等控制变量。 |
- |
logic_mod |
purmats, iflag_phys, fxyhypb, ysinus |
写或比较主逻辑开关和网格函数分支。 |
- |
serre_mod |
clon, clat, grossismx, grossismy, dzoomx, dzoomy, alphax, alphay, taux, tauy |
写或比较 zoom 参数。 |
- |
调用的关键例程
| 被调用例程 |
所在模块/文件 |
调用位置 |
作用 |
ABORT_gcm |
dyn3d/abort_gcm.F |
373, 379, 385, 391 |
zoom 参数与 start 文件不一致时退出。 |
OPEN, READ, WRITE, CLOSE |
Fortran I/O |
多处 |
打开 gcm.def 并按固定顺序读取/打印。 |
STOP |
Fortran 运行时 |
多处 |
遇到不一致或非法 zoom 参数时停止。 |
输入
| 输入 |
来源 |
类型/维度 |
单位 |
含义 |
tapedef |
调用参数 |
integer |
- |
作为打开 gcm.def 的 Fortran unit。 |
etatinit |
调用参数 |
logical |
- |
控制是初始化 zoom 参数还是与已有 start 参数比较。 |
gcm.def |
当前运行目录 |
固定顺序文本 |
多种 |
旧式运行配置文件。 |
输出
| 输出 |
去向 |
类型/维度 |
单位 |
含义 |
clesphy0(20) |
调用方数组 |
real(20) |
- |
旧物理开关编码数组。 |
control_mod 变量 |
module 全局 |
多种 |
多种 |
日期、步数、输出、耗散和旧物理开关。 |
logic_mod 变量 |
module 全局 |
logical/integer |
- |
purmats/iflag_phys/fxyhypb/ysinus。 |
serre_mod 变量 |
module 全局 |
real/logical |
度或无量纲 |
zoom 参数和 alphax/alphay。 |
共享状态与副作用
例程打开 gcm.def,向 unit 6 打印读取结果,写多个 module 全局变量;不一致时可能 STOP 或 ABORT_gcm。由于输入是严格顺序读取,gcm.def 行顺序错误会造成后续字段整体错位。
核心逻辑
- 打开
gcm.def。
- 按固定顺序读取
dayref/anneeref/nday/day_step/iperiod/...、耗散、物理开关等。
- 将
cycle_diurne/soil_model/new_oliq/ok_orodr/ok_orolf/ok_limitvrai 等旧物理开关编码进 clesphy0。
- 若
etatinit=.false.,继续读取 zoom 参数,并与已经从 start 文件读出的 clon/clat/grossismx/grossismy/fxyhypb/dzoomx/dzoomy/taux/tauy/ysinus 比较。
- 若
etatinit=.true.,直接从文件读取并设置 zoom 参数。
- 检查
grossismx/grossismy>=1,计算 alphax=1-1/grossismx、alphay=1-1/grossismy。
- 关闭文件返回。
伪代码
open gcm.def on unit tapedef
read fixed-order run parameters into control_mod and logic_mod
build clesphy0 from old physical switches
if not etatinit:
read zoom values and compare with current start-file state
abort on mismatch
else:
read zoom values into serre_mod
validate grossismx/grossismy and compute alphax/alphay
close gcm.def
参与的主题流程
| 主题 |
参与方式 |
| dynamics configuration |
旧式配置读取;现代入口由 conf_gcm 取代。 |
| grid initialization |
读取或校验 fxyhypb/ysinus 和 zoom 参数,为 inigeom 提供状态。 |
写法特点
固定格式 Fortran,使用 #include 头文件和顺序 READ。文件顶部的醒目注释是重要证据:此例程“似乎不再使用”,且未为行星使用更新。
复现要点
- 复现旧
defrun 必须使用完全匹配的 gcm.def 行顺序。
clesphy0 只覆盖 20 个旧物理键槽,其中前两项存 iflag_con/nbapp_rad,后续布尔开关以 0/1 编码。
etatinit=.false. 时不接受 run 配置与 start 文件 zoom 参数不一致。
待确认
- 是否仍有未纳入
rg 搜索范围的旧工具或外部脚本调用 defrun。
clesph0.h 中旧物理键对现代 Mars 物理的意义当前不可直接外推。
相关页面