comtherm_h.F90
路径
LMDZ.MARS\libf\phymars\comtherm_h.F90
所属目录/模块
libf\phymars
文件定位
comtherm_h.F90 定义 comtherm_h,集中保存 Martian thermal plume model 的编译期控制量和调参常数。它本身不执行热羽流求解,也不读取运行时配置;calltherm_interface_mod.F90 读取这里的子步长数、tracer/TKE 输送开关,thermcell_main_mars.F90 读取这里的卷入、脱离、下沉气流、速度方程和混合层底部形状参数。
复现上,这个文件是热羽流方案的“常数入口”:同一个 calltherm=.true. 运行,若是否定义 MESOSCALE 或这些参数值不同,热羽流子步长、质量通量结构、温度廓线形状、tracer 输送范围和诊断输出都会不同。
定义的符号
| 符号 |
类型 |
行号 |
作用 |
comtherm_h |
module |
17 |
Martian thermal plume model 控制参数模块 |
nsplit_thermals |
integer parameter |
31 / 37 |
热羽流模型子步长数;MESOSCALE 编译时为 4,普通 GCM 路径为 10 |
r_aspect_thermals |
real parameter |
48 |
控制混合层底部温度廓线形状;值越小越接近 convective-adjustment 型廓线 |
qtransport_thermals |
logical parameter |
54 |
是否在热羽流路径中输送 tracer;当前源码默认 .true. |
dtke_thermals |
logical parameter |
61 |
是否在热羽流路径中输送 TKE;源码注释标明仍属实验用途,当前默认 .false. |
thermverbose |
logical parameter |
66 |
是否输出热羽流内部修正和诊断日志;当前默认 .false. |
ad |
real parameter |
73 |
脱离率调参常数,源码注释对应论文中的 D_2 |
bd |
real parameter |
74 |
脱离率调参常数,源码注释对应论文中的 D_1 |
ae |
real parameter |
76 |
卷入率调参常数,源码注释对应论文中的 E_1 |
be |
real parameter |
77 |
卷入率调参常数,源码注释对应论文中的 E_2 |
fdfu |
real parameter |
79 |
downdraft/updraft mass flux ratio 的下限参数 |
omega |
real parameter |
81 |
下沉气流和速度方程相关的调参常数 |
a1 |
real parameter |
83 |
垂直速度方程系数,源码注释对应论文中的 a |
b1 |
real parameter |
84 |
垂直速度方程系数,源码注释对应论文中的 b |
a1inv |
real module variable |
86 |
逆温层中使用的 a1 系数;源码给默认值 1 |
b1inv |
real module variable |
87 |
逆温层中使用的 b1 系数;源码给默认值 0.0001 |
依赖的模块
| use 模块 |
only 列表 |
用途 |
待确认 |
| 无 |
- |
本模块不 use 其他模块 |
- |
调用的关键例程
| 被调用例程 |
所在模块/文件 |
调用位置 |
作用 |
| 无 |
- |
- |
本模块只声明参数和模块变量,不调用例程 |
输入
| 输入 |
来源 |
类型/维度 |
单位 |
含义 |
MESOSCALE |
编译预处理宏 |
compile-time macro |
- |
控制 nsplit_thermals 采用 mesoscale 默认值 4 还是 GCM 默认值 10 |
| 96 physical timesteps/day 约定 |
源码注释 |
运行配置约束 |
timestep/day |
GCM 默认 nsplit_thermals=10 的推荐背景;若少于 96 个物理步/日,源码注释给出未启用的 nsplit_thermals=35 建议 |
| Colaïtis et al. 2013 参数化 |
源码注释和常数值 |
文献参数 |
- |
ad/bd/ae/be/fdfu/omega/a1/b1 的物理含义和段落引用来源 |
输出
| 输出 |
去向 |
类型/维度 |
单位 |
含义 |
nsplit_thermals |
calltherm_interface_mod.F90 |
integer scalar |
- |
把物理时间步切成热羽流子步长;用于 zdt=ptimestep/nsplit_thermals 和时间平均因子 |
qtransport_thermals |
calltherm_interface_mod.F90 |
logical scalar |
- |
控制是否准备 pq_therm、调用非 CO2 tracer 输送、返回 tracer tendency |
dtke_thermals |
calltherm_interface_mod.F90 |
logical scalar |
- |
控制是否把界面 TKE 转成层中心 TKE 并调用 thermcell_dqup 输送 |
r_aspect_thermals |
thermcell_main_mars.F90 |
real scalar |
- |
参与 mixed-layer bottom 温度廓线形状计算 |
ad/bd |
thermcell_main_mars.F90 |
real scalars |
- |
控制 detrainment 随归一化高度/状态变化的经验公式 |
ae/be |
thermcell_main_mars.F90 |
real scalars |
- |
控制 entrainment 随浮力和垂直速度变化的经验公式 |
fdfu/omega/a1/b1/a1inv/b1inv |
thermcell_main_mars.F90 |
real scalars |
- |
控制下沉气流比例、速度方程和逆温层速度方程 |
thermverbose |
thermcell_main_mars.F90 |
logical scalar |
- |
控制热羽流内部修正计数、mass flux 修正等日志输出 |
共享状态与副作用
nsplit_thermals、r_aspect_thermals、qtransport_thermals、dtke_thermals、thermverbose、ad/bd/ae/be/fdfu/omega/a1/b1 都是编译期 PARAMETER,运行时不会被 getin_p 或 namelist 改写。
a1inv 和 b1inv 是带默认初值的普通模块变量,不是 PARAMETER;源码检索中只确认 thermcell_main_mars.F90 读取它们,未在 libf\phymars 中发现除定义外的写入。
- 本模块没有
SAVE/THREADPRIVATE 显式声明、没有文件 I/O、没有日志输出、没有内存分配。
- 实际副作用来自下游读取:改变本文件常数或编译宏会改变热羽流子步长、温度/质量通量公式和 tracer/TKE 输送路径。
核心逻辑
- 载入模块时进入
implicit none,不依赖其他模块。
- 通过
#ifdef MESOSCALE 选择 nsplit_thermals:
MESOSCALE 路径:物理时间步小于约 200 s,默认只需 4 个热羽流子步长。
- 非
MESOSCALE 路径:GCM 默认 10 个子步长,源码注释建议 96 physical timesteps/day 且每步调用辐射时使用。
- 固定
r_aspect_thermals=1.,供 thermcell_main_mars 调整混合层底部温度廓线。
- 固定 tracer 输送开启、TKE 输送关闭、verbose 关闭。
- 固定 Colaïtis et al. 2013 热羽流参数:脱离率
ad/bd、卷入率 ae/be、下沉气流 fdfu/omega、速度方程 a1/b1。
- 给逆温层速度方程变量
a1inv/b1inv 默认值;下游 thermcell_main_mars 在逆温层分支读取它们。
伪代码
module comtherm_h:
if compiled with MESOSCALE:
nsplit_thermals = 4
else:
nsplit_thermals = 10
r_aspect_thermals = 1
qtransport_thermals = true
dtke_thermals = false
thermverbose = false
set detrainment parameters:
ad = 0.0004
bd = -0.6697
set entrainment parameters:
ae = 0.03683
be = 0.631631
set downdraft parameters:
fdfu = -0.8
omega = -0.03
set vertical velocity coefficients:
a1 = 1
b1 = 0.0001
a1inv = 1
b1inv = 0.0001
参与的主题流程
| 主题 |
参与方式 |
| 热羽流 / 边界层对流 |
calltherm_interface 用 nsplit_thermals 分割物理时间步,再调用 thermcell_main_mars 和 thermcell_dqup |
| tracer 输送 |
qtransport_thermals=.true. 时,热羽流接口准备 tracer 输入并对非 CO2 tracer 执行质量通量输送 |
| TKE 输送实验路径 |
dtke_thermals=.false. 默认关闭;若源码改为真,接口会对 q2 做层中心转换并输送 |
| 热羽流主体公式 |
thermcell_main_mars 读取卷入/脱离、下沉气流、速度方程和 r_aspect_thermals 常数 |
| 调试诊断 |
thermverbose 控制 thermcell_main_mars 中若干修正统计和调试输出分支 |
写法特点
- 这是一个很小的自由格式
.F90 参数模块,但用 C 预处理宏 MESOSCALE 区分 mesoscale 和 GCM 默认值。
- 多数控制量是
PARAMETER,不是运行时配置项;调整这些值需要改源码并重新编译。
a1inv/b1inv 没有写成 PARAMETER,但当前检索未发现下游赋值;如果未来代码写入它们,热羽流逆温层速度方程会变成运行时共享状态。
- 文件头引用 Colaïtis et al. 2013,并在多个常数旁标注对应论文段落,这些注释是参数含义的主要证据。
复现要点
- 复现 thermal plume 方案时,先确认编译目标是否定义
MESOSCALE;这会直接把热羽流子步长从 GCM 默认 10 改为 4。
- GCM 默认
nsplit_thermals=10 的源码注释假设 96 physical timesteps/day 且每步调用辐射;低频物理步实验若沿用默认值,需要额外检查稳定性和结果敏感性。
qtransport_thermals 当前固定为 .true.,因此 calltherm_interface 会处理 tracer 输送;若改为 .false.,非 CO2 tracer 的热羽流 tendency 路径会被关闭。
dtke_thermals 当前固定为 .false.,源码注释标明 TKE thermal transport 仍是实验用途;打开它需要核对 q2 的层界面/层中心换算和输出单位。
thermverbose=.false. 时不会输出热羽流内部修正统计;需要调试质量通量修正时必须改源码参数。
a1inv/b1inv 虽有默认值但不是 PARAMETER,复现实验若发现它们被局部补丁改写,应记录补丁版本。
待确认
a1inv/b1inv 保持普通模块变量而非 PARAMETER 的历史原因未在本文件说明;当前只确认 libf\phymars 可见源码中没有除定义外的写入。
nsplit_thermals=35 的注释建议没有启用;低于 96 physical timesteps/day 时应以实际实验/版本说明确认推荐值。
相关页面