thermosphere_mod.F

路径

LMDZ.MARS\libf\aeronomars\thermosphere_mod.F

所属目录/模块

libf/aeronomars

文件定位

热层物理过程总调度模块;在 physiq_modcallthermos 分支下逐列调用,依次执行 EUV 加热、分子热传导、分子黏性扩散和分子扩散,把各子过程 tendency 累加回 pdt/pdu/pdv/pdq,并输出 H/H₂/D 逃逸通量。

定义的符号

符号 类型 行号 作用
thermosphere_mod module 1 包装 thermosphere 子例程,保存 moldiff_scheme
moldiff_scheme integer, save 5 分子扩散方案选择(1=legacy moldiff_red,2=MPF moldiff_MPF),默认 2
thermosphere subroutine 10 热层物理过程主调度;按开关依次调 EUV、传导、黏性、扩散并累加 tendency

依赖的模块

use 模块 only 列表 用途 待确认
ioipsl_getin_p_mod getin_p firstcall 读取 moldiff_scheme 配置
moldiff_red_mod moldiff_red legacy 分子扩散(moldiff_scheme==1
moldiff_MPF_mod moldiff_MPF MPF 分子扩散(moldiff_scheme==2,默认)
euvheat_mod euvheat EUV 加热
conduction_mod conduction 分子热传导
molvis_mod molvis 分子黏性速度扩散
conc_mod rnew, cpnew 各层气体常数和比热(传递给子过程)
comcstfi_h r, cpp 通用气体常数和比热常量
mod_phys_lmdz_para is_master firstcall 日志输出
callkeys_mod calleuv, callconduct, callmoldiff, callmolvis 四个子过程开关

调用的关键例程

被调用例程 所在模块/文件 调用位置 作用
getin_p ioipsl_getin_p_mod 行 68 firstcall 读 moldiff_scheme 配置
euvheat euvheat_mod 行 83 calleuv 下计算 EUV 加热倾向 zdteuv
conduction conduction_mod 行 90 callconduct 下计算分子热传导倾向 zdtconduc
molvis molvis_mod 行 97, 99 callmolvis 下分别对 pu/pv 计算分子黏性倾向 zdumolvis/zdvmolvis
moldiff_red moldiff_red_mod 行 109 callmoldiffmoldiff_scheme==1 时调用
moldiff_MPF moldiff_MPF_mod 行 114 callmoldiffmoldiff_scheme==2(默认)时调用

输入

输入 来源 类型/维度 单位 含义
ngrid physiq_mod integer 水平格点数
nlayer physiq_mod integer 垂直层数
nq physiq_mod integer advected tracer 数
pplev physiq_mod real (ngrid,nlayer+1) Pa 层界面气压
pplay physiq_mod real (ngrid,nlayer) Pa 中层气压
dist_sol physiq_mod real AU 日火距离
mu0 physiq_mod real (ngrid) 太阳天顶角余弦
ptimestep physiq_mod real s 物理时间步
zday physiq_mod real sol 自 Ls=0 起的日期
tsurf physiq_mod real (ngrid) K 地表温度
zzlev physiq_mod real (ngrid,nlayer+1) m 层界面高度
zzlay physiq_mod real (ngrid,nlayer) m 中层高度
pt physiq_mod real (ngrid,nlayer) K 当前温度
pq physiq_mod real (ngrid,nlayer,nq) kg/kg tracer 混合比
pu physiq_mod real (ngrid,nlayer) m/s 纬向风
pv physiq_mod real (ngrid,nlayer) m/s 经向风

输出

输出 去向 类型/维度 单位 含义
zdteuv physiq_mod real (ngrid,nlayer) K/s EUV 加热温度倾向
zdtconduc physiq_mod real (ngrid,nlayer) K/s 分子热传导温度倾向
zdumolvis physiq_mod real (ngrid,nlayer) m/s² 纬向风分子黏性倾向
zdvmolvis physiq_mod real (ngrid,nlayer) m/s² 经向风分子黏性倾向
zdqmoldiff physiq_mod real (ngrid,nlayer,nq) kg/kg/s 分子扩散 tracer 倾向
PhiEscH physiq_mod real*8 s⁻¹ H 总逃逸通量
PhiEscH2 physiq_mod real*8 s⁻¹ H₂ 总逃逸通量
PhiEscD physiq_mod real*8 s⁻¹ D 总逃逸通量

输入输出(inout)

变量 类型/维度 单位 含义
pdt real (ngrid,nlayer) K/s 温度倾向;子过程倾向依次累加
pdq real (ngrid,nlayer,nq) kg/kg/s tracer 倾向;callmoldiff 后累加
pdu real (ngrid,nlayer) m/s² 纬向风倾向;callmolvis 后累加
pdv real (ngrid,nlayer) m/s² 经向风倾向;callmolvis 后累加

共享状态与副作用

核心逻辑

  1. firstcall 初始化(行 65-73):moldiff_scheme 默认 2,通过 getin_p("moldiff_scheme",...) 可覆盖;master 进程打印。

  2. 清零所有 tendency 缓存(行 76-80):zdteuv/zdtconduc/zdumolvis/zdvmolvis/zdqmoldiff 全部置零,保证未开启的子过程不贡献 tendency。

  3. EUV 加热calleuv,行 82-87):调 euvheatzdteuv,累加到 pdt

  4. 分子热传导callconduct,行 89-94):调 conductionzdtconduc,累加到 pdt。此时 pdt 已含 EUV,故传导看到的预测温度包含 EUV 加热。

  5. 分子黏性callmolvis,行 96-104):分别对 pu/pvmolvis,得 zdumolvis/zdvmolvis,累加到 pdu/pdv

  6. 分子扩散callmoldiff,行 106-122):按 moldiff_scheme 选择 moldiff_red(1)或 moldiff_MPF(2),得 zdqmoldiff 和逃逸通量 PhiEscH/H2/D,累加到 pdq

伪代码

if firstcall:
    moldiff_scheme = 2
    moldiff_scheme = getin_p("moldiff_scheme")
    firstcall = false

zdteuv = zdtconduc = zdumolvis = zdvmolvis = zdqmoldiff = 0

if calleuv:
    euvheat(...) -> zdteuv
    pdt += zdteuv

if callconduct:
    conduction(...) -> zdtconduc
    pdt += zdtconduc

if callmolvis:
    molvis(..., pu) -> zdumolvis
    molvis(..., pv) -> zdvmolvis
    pdu += zdumolvis
    pdv += zdvmolvis

if callmoldiff:
    if moldiff_scheme == 1:
        moldiff_red(...) -> zdqmoldiff, PhiEscH, PhiEscH2, PhiEscD
    else:
        moldiff_MPF(...) -> zdqmoldiff, PhiEscH, PhiEscH2, PhiEscD
    pdq += zdqmoldiff

参与的主题流程

主题 参与方式
热层物理 总调度入口,依次执行 EUV 加热、热传导、黏性扩散和分子扩散
高层大气逃逸 分子扩散子过程输出 H/H₂/D Jeans 逃逸通量
光化学前驱 physiq_modthermospherecalchim 之后调用;热层化学已写回 zycol,本例程追加物理过程 tendency

写法特点

复现要点

待确认

相关页面