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。目标文件定义公共动力核心常数和网格维度状态;这些状态主要服务 dyn3ddyn3dpardynphy_lonlat 和公共动力例程。当前 libf/phymars/dyn1d 目录内没有发现直接 use comconst_mod 的 Fortran 文件,1D 初始化路径实际读取的是 comcstfi_htime_phylmdz_modplanete_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./iimdaylen 为以标准日计的太阳日长度。
耗散参数 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.F90dyn3dpar/conf_gcm.F90 USE comconst_mod, ONLY: dissip_factz,dissip_deltaz,dissip_zref,... 配置耗散和顶层边界参数。

读取方和依赖关系

rgLMDZ.COMMON/libfLMDZ.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.F90use comconst_mod,而是写入 comcstfi_h::rad/daysec/omeg/g/r/cppplanete_h::year_day 等物理侧状态;因此不要把 dyn1d 物理初始化的赋值直接归因到本模块。

副作用和 I/O

项目 说明
文件 I/O dyn1d stub 和目标模块都没有 I/O。
分配/释放 目标模块没有 ALLOCATEDEALLOCATE
全局状态 声明一组未初始化的模块变量;实际有效值依赖调用方先执行公共初始化。
并行/线程 目标模块没有 THREADPRIVATE 声明。并行路径由 dyn3dpar 调用方使用同一模块符号。

复现要点

  1. 构建 dyn1d 时必须让 libf/phymars/dyn1d/comconst_mod.F90 解析到公共目标文件,或者用等价 include/symlink 机制提供 comconst_mod
  2. 单独编译这个一行路径文件本身不是 Fortran 语法;它依赖构建系统或 checkout 机制把路径 stub 当作目标源文件引用。
  3. 使用 comconst_mod 的动力例程必须先经过 iniconstconf_planeteconf_gcm 或相关初始化路径填值,否则模块变量只是一组未赋值的共享状态。
  4. 1D testphys1d 物理常量复现应优先查看 comcstfi_htime_phylmdz_modplanete_h 和后续 init_testphys1d_mod.F90 页面;本页只覆盖 dyn1d 中同名动力常数 stub。

待确认

相关页面