dyn1d/comconst_mod.F90
路径
LMDZ.MARS\libf\phymars\dyn1d\comconst_mod.F90
文件定位
dyn1d/comconst_mod.F90 在当前源码树中不是独立实现,而是一行相对路径:
../../../../LMDZ.COMMON/libf/dyn3d_common/comconst_mod.F90
它把 1D testphys1d 编译路径中的 comconst_mod 模块解析到 LMDZ.COMMON/libf/dyn3d_common/comconst_mod.F90。目标文件定义公共动力核心常数和网格维度状态;这些状态主要服务 dyn3d、dyn3dpar、dynphy_lonlat 和公共动力例程。当前 libf/phymars/dyn1d 目录内没有发现直接 use comconst_mod 的 Fortran 文件,1D 初始化路径实际读取的是 comcstfi_h、time_phylmdz_mod 和 planete_h 等物理侧常量模块。
定义的符号
| 符号 | 类型 | 行号 | 作用 |
|---|---|---|---|
comconst_mod.F90 |
path stub | dyn1d line 1 | 指向 LMDZ.COMMON/libf/dyn3d_common/comconst_mod.F90。 |
comconst_mod |
module | common target line 1 | 保存动力核心共享维度、时间步、行星常数、耗散和顶层 sponge 参数。 |
目标模块只包含 IMPLICIT NONE 后的模块变量声明,没有子例程、函数、分配、初始化或文件 I/O。
模块状态清单
| 变量组 | 符号 | 源码含义 |
|---|---|---|
| 网格和层数 | im, jm, lllm, imp1, jmp1, lllmm1, lllmp1, lcl |
动力水平/垂直维度及派生维度。 |
| 时间步长 | dtvr, dtphys, dtdiss, daysec |
动力、物理、耗散时间步和标准日秒数。 |
| 行星/热力常数 | pi, rad, g, omeg, r, cpp, kappa, molmass |
圆周率、半径、重力、角速度、气体常数、定压比热、r/cpp 和大气摩尔质量。 |
| 派生或控制标量 | cotot, unsim, daylen, year_day |
公共控制/派生标量;unsim 注释为 1./iim,daylen 为以标准日计的太阳日长度。 |
| 耗散参数 | dissip_factz, dissip_zref, dissip_fac_mid, dissip_fac_up, dissip_deltaz, dissip_hdelta, dissip_pupstart |
Earth/other planets 动力耗散参数。 |
| 顶层 sponge | iflag_top_bound, ngroup, mode_top_bound, tau_top_bound |
顶边界 sponge 类型、极区经向分组、模式和特征时间倒数。 |
| Venus/巨行星扩展 | nu_venus, t0_venus, ihf |
Venus Cp(T) 系数和巨行星内禀热通量。 |
初始化和赋值路径
本文件本身不赋值。目标模块变量的公共赋值路径来自 LMDZ.COMMON:
| 文件 | 证据 | 写入内容 |
|---|---|---|
LMDZ.COMMON/libf/dyn3d_common/iniconst.F90 |
USE comconst_mod, ONLY: im,jm,lllm,imp1,jmp1,lllmm1,lllmp1,... |
初始化网格维度、时间步和常数类状态。 |
LMDZ.COMMON/libf/dyn3d_common/conf_planete.F90 |
USE comconst_mod, ONLY: pi, g, molmass, kappa, cpp, omeg, rad, ... |
读取/设置行星常数。 |
LMDZ.COMMON/libf/dyn3d_common/inidissip.F90 |
USE comconst_mod, ONLY: dtvr,dtdiss,rad,pi,dissip_zref,dissip_deltaz,... |
写入或派生耗散配置。 |
LMDZ.COMMON/libf/dyn3d/conf_gcm.F90 和 dyn3dpar/conf_gcm.F90 |
USE comconst_mod, ONLY: dissip_factz,dissip_deltaz,dissip_zref,... |
配置耗散和顶层边界参数。 |
读取方和依赖关系
rg 在 LMDZ.COMMON/libf 与 LMDZ.MARS/libf/phymars 中找到大量 use comconst_mod,代表这个模块是公共动力常数容器。典型读取方:
| 路径 | 读取符号 | 用途 |
|---|---|---|
dyn3d_common/dynetat0.F90, dynredem.F90 |
daysec, dtvr, rad, omeg, g, cpp, kappa, pi |
动力 start/restart 状态读写。 |
dyn3d_common/exner_hyb_m.F90, exner_milieu_m.F90 |
jmp1, kappa, cpp, r, pi |
Exner 函数和热力量计算。 |
dyn3d_common/disvert_noterre.F |
kappa |
非地球垂直离散构造。 |
dyn3d_common/inigeom.F |
rad, g, omeg, pi |
动力几何初始化。 |
dyn3d/top_bound.F, dyn3dpar/top_bound_p.F |
iflag_top_bound, tau_top_bound, mode_top_bound |
顶层 sponge 参数读取。 |
dynphy_lonlat/calfis.F, calfis_p.F |
daysec, dtvr, dtphys, kappa, cpp, g, rad, pi |
动力-物理接口中的时间和常数转换。 |
libf/phymars/dyn1d/init_testphys1d_mod.F90 不 use comconst_mod,而是写入 comcstfi_h::rad/daysec/omeg/g/r/cpp 和 planete_h::year_day 等物理侧状态;因此不要把 dyn1d 物理初始化的赋值直接归因到本模块。
副作用和 I/O
| 项目 | 说明 |
|---|---|
| 文件 I/O | dyn1d stub 和目标模块都没有 I/O。 |
| 分配/释放 | 目标模块没有 ALLOCATE 或 DEALLOCATE。 |
| 全局状态 | 声明一组未初始化的模块变量;实际有效值依赖调用方先执行公共初始化。 |
| 并行/线程 | 目标模块没有 THREADPRIVATE 声明。并行路径由 dyn3dpar 调用方使用同一模块符号。 |
复现要点
- 构建 dyn1d 时必须让
libf/phymars/dyn1d/comconst_mod.F90解析到公共目标文件,或者用等价 include/symlink 机制提供comconst_mod。 - 单独编译这个一行路径文件本身不是 Fortran 语法;它依赖构建系统或 checkout 机制把路径 stub 当作目标源文件引用。
- 使用
comconst_mod的动力例程必须先经过iniconst、conf_planete、conf_gcm或相关初始化路径填值,否则模块变量只是一组未赋值的共享状态。 - 1D
testphys1d物理常量复现应优先查看comcstfi_h、time_phylmdz_mod、planete_h和后续init_testphys1d_mod.F90页面;本页只覆盖 dyn1d 中同名动力常数 stub。
待确认
- 当前 Windows 工作树把链接文件呈现为一行路径文本;在原始类 Unix 工作树中它可能是符号链接。
- dyn1d 构建目标是否实际编译到
comconst_mod,需要结合 makefile/构建脚本继续确认。 cotot、lcl、daylen在当前 Mars 1D 编译路径中的实际用途未在 dyn1d 定向搜索中确认。
相关页面
- dyn1d/index.md - dyn1d 子目录索引。
- comcstfi_h - phymars 物理侧常数模块。
- comvert_mod.F90 - 垂直坐标公共状态 stub。
- control_mod.F90 - 动力控制公共状态 stub。
- init_testphys1d_mod.F90 - 1D 初始化主流程。