comcstfi_h.F90

路径

LMDZ.MARS\libf\phymars\comcstfi_h.F90

所属目录/模块

libf\phymars

文件定位

comcstfi_h.F90 定义 comcstfi_h,是 phymars 中集中保存行星半径、重力、气体常数、比热、平均摩尔质量和自转角速度的共享物理常数模块。它本身不读取配置文件,也不做物理计算;主要职责是在初始化阶段接收上游给定的常数,并让辐射、沉降、边界层、云微物理、坡面和诊断等下游方案通过 use comcstfi_h 读取同一套常数。

这个模块的复现意义在于:很多物理公式只在下游文件中出现,但公式中的 grcpprcpradpi 等都来自这里。若初始化路径不同,常数来源也可能不同,例如 GCM 主路径由 phys_state_var_init_mod 调用 init_comcstfi_h 初始化一部分常数,而 tabfi.F 和 1D 初始化路径会直接写入 rad/g/mugaz/omeg/rcp 等模块变量。

定义的符号

符号 类型 行号 作用
comcstfi_h module 1 保存 phymars 共享物理常数
pi real parameter 4 圆周率,按 acos(-1.d0) 计算
rad real save 5 行星半径,单位 m
g real save 6 重力加速度,单位 m/s2
r real save 8 大气比气体常数
cpp real save 9 大气定压比热
rcp real save 10 r/cpp
mugaz real save 12 大气平均摩尔质量,注释单位 g/mol
omeg real save 13 行星自转角速度,单位 rad/s
init_comcstfi_h subroutine 20 从调用方参数初始化 radcppgr,并计算 rcp

依赖的模块

use 模块 only 列表 用途 待确认
- 本模块没有 use 依赖 -

调用的关键例程

被调用例程 所在模块/文件 调用位置 作用
- - 本模块只赋值共享常数,不调用其他例程

输入

输入 来源 类型/维度 单位 含义
prad phys_state_var_init 等调用方 real scalar m 初始化 rad
pcpp phys_state_var_init 等调用方 real scalar J/kg/K,推断 初始化 cpp
pg phys_state_var_init 等调用方 real scalar m/s2 初始化 g
pr phys_state_var_init 等调用方 real scalar J/kg/K,推断 初始化 r

输出

输出 去向 类型/维度 单位 含义
rad 全局模块状态 real save m 行星半径,供几何、坡面、I/O 等读取
g 全局模块状态 real save m/s2 重力加速度,供层质量、沉降、拖曳、PBL 等读取
r 全局模块状态 real save J/kg/K,推断 比气体常数,供密度、热力学和输送计算读取
cpp 全局模块状态 real save J/kg/K,推断 定压比热,供辐射、云、热通量和加热率换算读取
rcp 全局模块状态 real save - r/cpp,供 Exner/位温相关计算读取
mugaz 全局模块状态 real save g/mol 平均摩尔质量;不由 init_comcstfi_h 赋值
omeg 全局模块状态 real save rad/s 自转角速度;不由 init_comcstfi_h 赋值

共享状态与副作用

核心逻辑

  1. 编译/加载模块时,pi 作为 parameteracos(-1.d0) 固定。
  2. 模块暴露一组 SAVE 常数变量,供下游 use comcstfi_h, only: ... 读取。
  3. GCM 初始化路径中,phys_state_var_init_mod.F90 行 46 导入 init_comcstfi_h,行 118 调用 init_comcstfi_h(prad,pcpp,pg,pr)
  4. init_comcstfi_hpradpcpppgpr 分别赋给 radcppgr
  5. init_comcstfi_h 最后计算 rcp=r/cpp,保证 rcp 与本次传入的 rcpp 一致。
  6. mugazomeg 必须由其他初始化路径赋值;源码证据包括 tabfi.F 行 114-119、182-186,以及 1D 初始化行 133-140。

伪代码

module comcstfi_h:
    define pi = acos(-1)
    keep SAVE constants:
        rad, g, r, cpp, rcp, mugaz, omeg
    mark these constants THREADPRIVATE

init_comcstfi_h(prad, pcpp, pg, pr):
    rad = prad
    cpp = pcpp
    g = pg
    r = pr
    rcp = r / cpp

参与的主题流程

主题 参与方式
物理初始化 phys_state_var_init 调用 init_comcstfi_h,先设置共享常数,再初始化时间、坡面、几何、土壤、辐射等模块
初始状态 / restart 控制量 tabfi 可从 tab_cntrl 读取并写回 rad/omeg/g/mugaz/rcp/daysec/dtphysphyetat0_modtabfi 处理 startfi.nc 或学术初始化
1D testphys dyn1d/init_testphys1d_mod.F90 直接设置 Mars 默认常数,并由 r=8.314511*1000./mugazcpp=r/rcp 补全热力学常数
辐射和云微物理 callradite_modco2cloud_modimprovedclouds_modimprovedco2clouds_mod 等读取 gcpppi
沉降 / 尘埃 / tracer 质量 callsedim_modnewsedim_moddust_coagulation_modtracer_mass_fixer_dyn_mod 等读取 grpi
边界层 / 对流 / 重力波 vdifc_modpbl_parameters_modcalltherm_interface_modcalldrag_noro_modnonoro_gwd_* 等读取 g/r/cpp/rcp/pi

写法特点

复现要点

待确认

相关页面