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.h 和 paramet.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 输出格式把这些量标为 masse、rmsdpdt、energie、enstrophie、entropie、rmsv、mt.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 使用本模块的当前值和参考值:
- 计算
rmsdpdt,并按daysec*1.e-2*sqrt(.../imjmp1)缩放。 - 汇总
ptot/etot/ztot/stot/rmsv/ang。 - 若需要重置参考值,把当前
etot/ptot/ztot/stot/ang写入*0。 - 输出前把非零参考值对应的当前量归一化为
current/reference;参考值为 0 时将相对值置为 1。 rmsv输出为sqrt(rmsv/ptot)。
这说明 ener_mod 保存的是诊断汇总和参考量,不参与 1D 物理趋势计算。
dyn1d 关系
定向搜索只在 dyn1d/ener_mod.F90 stub 本身匹配 ener_mod,没有发现 init_testphys1d_mod.F90、testphys1d.F90 或其他 dyn1d 文件直接 use ener_mod。因此:
- dyn1d 主程序的能量、温度、风和地表压力推进不通过本模块。
- 若 dyn1d 构建包含公共动力诊断或 restart 例程,本 stub 负责提供模块符号。
- 本页不把 3D
sortvarc诊断行为推断为 1Dtestphys1d运行时行为。
副作用和 I/O
| 项目 | 说明 |
|---|---|
| 文件 I/O | 本模块无 I/O;restart 和诊断 I/O 发生在 dynetat0/dynredem/sortvarc 等调用方。 |
| 分配/释放 | 无;gtot 是固定维度数组。 |
| 全局状态 | 所有变量为模块全局 REAL,没有显式初始化。 |
| 单位 | 本模块未声明单位;需以调用方输出或控制表语义为准。 |
复现要点
- 复现 3D 动力诊断时,先用
sortvarc0或 restart 读入建立*0参考值。 - 后续
sortvarc会输出当前值相对参考值的比值;不要把etot/ptot/...一律当成原始绝对量。 - 复现 dyn1d
testphys1d主循环时,本模块不是直接依赖;应查看testphys1d.F90和物理输出诊断。
待确认
- 当前 Windows 工作树把链接文件呈现为一行路径文本;在原始类 Unix 工作树中它可能是符号链接。
gtot(llmm1)在当前 Mars dyn1d 构建中的实际使用未确认;搜索只显示公共dyn3d/advect.F读取。- 各诊断量精确单位需结合
sortvarc的公式和历史输出约定进一步确认。
相关页面
- dyn1d/index.md - dyn1d 子目录索引。
- control_mod - 公共动力控制状态 stub。
- testphys1d.F90 - 1D 主程序。