dyn1d/ener_mod.F90

路径

LMDZ.MARS\libf\phymars\dyn1d\ener_mod.F90

文件定位

dyn1d/ener_mod.F90 在当前源码树中不是独立实现,而是一行相对路径:

../../../../LMDZ.COMMON/libf/dyn3d_common/ener_mod.F90

它把 1D 编译路径中的 ener_mod 模块解析到 LMDZ.COMMON/libf/dyn3d_common/ener_mod.F90。目标模块是公共动力核心的能量/质量/角动量诊断状态容器。当前 libf/phymars/dyn1d 目录内没有直接 use ener_mod;这些状态主要供 3D 动力诊断、restart 和控制变量输出路径使用。

定义的符号

符号 类型 行号 作用
ener_mod.F90 path stub dyn1d line 1 指向 LMDZ.COMMON/libf/dyn3d_common/ener_mod.F90
ener_mod module common target line 1 声明公共动力能量和质量诊断状态。

目标模块使用 dimensions.hparamet.h,仅包含 REAL 声明,没有子例程、函数、分配或 I/O。

模块状态清单

状态 类型 语义
etot0, ptot0, ztot0, stot0, ang0 scalar 初始/参考总能量、质量、涡度相关量、熵相关量和角动量诊断。
etot, ptot, ztot, stot, ang scalar 当前步或相对参考值的同类诊断。
rmsdpdt, rmsv scalar 表面压力倾向和风速相关 RMS 诊断。
gtot(llmm1) array 垂直层相关累计诊断数组;advect.F 读取该数组。

具体物理单位没有在 ener_mod.F90 中声明;sortvarc.F 输出格式把这些量标为 massermsdpdtenergieenstrophieentropiermsvmt.ang

赋值和读取路径

文件 读写符号 作用
dyn3d_common/dynetat0.F90 etot0/ptot0/ztot0/stot0/ang0 tab_cntrl(idecal+8:12) 读取 restart 中的参考诊断。
dyn3d_common/dynredem.F90 etot0/ptot0/ztot0/stot0/ang0 把参考诊断写回 restart 控制表。
dyn3d_common/iniacademic.F90 etot0/ptot0/ztot0/stot0/ang0 academic 初始化路径把参考值置零。
dyn3d_common/sortvarc0.F etot0/ptot0/ztot0/stot0/ang0/rmsv/rmsdpdt 计算初始参考诊断和 RMS。
dyn3d_common/sortvarc.F etot/ptot/ztot/stot/ang, *0, rmsdpdt/rmsv 计算当前诊断,必要时更新参考值,并输出相对变化。
dyn3d/advect.F gtot 平流路径读取垂直累计诊断数组。
dyn3dpar/dynredem_p.F90 etot0/ptot0/ztot0/stot0/ang0 并行 restart 写出同类控制表字段。

Venus/Titan 旧 dynphy_lonlat start/restart 路径也读写 etot0/ptot0/ztot0/stot0/ang0,说明该模块被公共非地球动力路径复用。

sortvarc 诊断逻辑摘要

sortvarc.F 使用本模块的当前值和参考值:

  1. 计算 rmsdpdt,并按 daysec*1.e-2*sqrt(.../imjmp1) 缩放。
  2. 汇总 ptot/etot/ztot/stot/rmsv/ang
  3. 若需要重置参考值,把当前 etot/ptot/ztot/stot/ang 写入 *0
  4. 输出前把非零参考值对应的当前量归一化为 current/reference;参考值为 0 时将相对值置为 1。
  5. rmsv 输出为 sqrt(rmsv/ptot)

这说明 ener_mod 保存的是诊断汇总和参考量,不参与 1D 物理趋势计算。

dyn1d 关系

定向搜索只在 dyn1d/ener_mod.F90 stub 本身匹配 ener_mod,没有发现 init_testphys1d_mod.F90testphys1d.F90 或其他 dyn1d 文件直接 use ener_mod。因此:

副作用和 I/O

项目 说明
文件 I/O 本模块无 I/O;restart 和诊断 I/O 发生在 dynetat0/dynredem/sortvarc 等调用方。
分配/释放 无;gtot 是固定维度数组。
全局状态 所有变量为模块全局 REAL,没有显式初始化。
单位 本模块未声明单位;需以调用方输出或控制表语义为准。

复现要点

  1. 复现 3D 动力诊断时,先用 sortvarc0 或 restart 读入建立 *0 参考值。
  2. 后续 sortvarc 会输出当前值相对参考值的比值;不要把 etot/ptot/... 一律当成原始绝对量。
  3. 复现 dyn1d testphys1d 主循环时,本模块不是直接依赖;应查看 testphys1d.F90 和物理输出诊断。

待确认

相关页面