jthermcalc_e107_mod.F

路径

LMDZ.MARS\libf\aeronomars\jthermcalc_e107_mod.F

所属目录/模块

libf/aeronomars

文件定位

E107 增强版热层光吸收系数计算器:在基础版 jthermcalc之上引入 E10.7 太阳活动参数化和日火距离修正,是当前代码中实际使用的版本。按 36 个光谱区间对 13 种大气物种的柱密度做查表插值,把结果写入共享数组 jfotsout(ninter, 物种槽位, nlayer)。已知调用方:hrtherm.F(第 121 行)和 chemthermos.F90

定义的符号

符号 类型 行号 作用
jthermcalc_e107_mod module 第 1 行 模块定义,仅含一个子例程
jthermcalc_e107 subroutine 第 9 行 主例程:E107 增强版热层光吸收系数插值计算

依赖的模块

use 模块 only 列表 用途 待确认
param_v4_h jfotsout, crscabsi2, c1_16, c17_24, c25_29, c30_31, c32, c33, c34, c35, c36, co2crsc195, co2crsc295, t0, jabsifotsintpar, ninter, nz2, nabs, e107, date_e107, e107_tab, coefit0, coefit1, coefit2, coefit3, coefit4 光吸收输出缓存、吸收截面参数、插值查找表、温度参考值、光谱区间维度、E10.7 参数与 TOA 多项式系数
comsaison_h dist_sol 日火距离(AU),用于最终距离修正
jthermcalc_util column, interfast 柱密度计算与快速线性插值
callkeys_mod solvarmod, fixed_euv_value 太阳活动开关与固定 E10.7 值

调用的关键例程

被调用例程 所在模块/文件 调用位置 作用
column jthermcalc_util.F 第 126 行 计算 13 种物种的柱密度(cm⁻²),含光学路径几何
interfast jthermcalc_util.F 第 230/321/436/527/641/749/847/932/994/1056/1111 行 在柱密度查找表中做快速线性插值,返回权重 wm/wp 和索引 auxind

输入

输入 来源 类型/维度 单位 含义
ig 调用方 integer - 格点索引
nlayer 调用方 integer - 垂直层数
chemthermod 调用方 integer - 热层化学模式;≥2 时启用扩展物种(N/NO/NO₂)
rm 调用方 real*8(nlayer, nesptherm) cm⁻³ 各物种数密度矩阵
nesptherm 调用方 integer - 考虑的物种数
tx 调用方 real(nlayer) K 温度剖面
iz 调用方 real(nlayer) 待确认 各层高度
zenit 调用方 real ° 太阳天顶角
zday 调用方 real sol 火星日(Ls=0 起算);用于 E10.7 日插值

输出

输出 去向 类型/维度 单位 含义
jfotsout param_v4_h 共享数组 real(ninter, 物种槽位, nlayer) s⁻¹(待确认) 各光谱区间×各物种×各层的光吸收系数(已做日火距离修正)

共享状态与副作用

核心逻辑

  1. 日/夜判断(第 105–112 行):zenit > 140° 为夜间,设 dn='n' 并立即 returnjfotsout 不被更新。
  2. 初始化 jfotsout 为零(第 115 行):日间情形下把整个三维数组清零。
  3. 温度截断(第 119–123 行):构造辅助温度 t2,截断到 [195 K, 295 K],用于 CO₂ 截面温度修正。
  4. 柱密度计算(第 126–128 行):调用 column 计算 13 个物种的柱密度数组 co2colxo2colxo3pcolxh2colxh2ocolxh2o2colxo3colxn2colxncolxnocolxcocolxhcolxno2colx
  5. CO₂ 温度修正辅助列(第 132–137 行):从顶层向下计算 coltemp,用 rm(i,i_co2)|t2(i) - t0(i)| 构造。注意第 134 行有一行被注释掉的累积项 coltemp(i+1)+
  6. CO₂ 截面温度系数(第 140–146 行):为区间 24–32 计算 sigma(195 K 截面)和 alfa(温度线性修正系数)。
  7. E10.7 太阳活动参数化(第 148–169 行):
    • solvarmod == 0:使用 fixed_euv_value 固定值。
    • 否则:用 realday = mod(zday, 669.) 在 669 天的 e107_tab 表中做线性插值得当日 E10.7。
  8. TOA 光吸收系数(第 172–178 行):对 nabs 个吸收物种 × ninter 个光谱区间,用 4 阶多项式 coefit0 + coefit1*e107 + coefit2*e107² + coefit3*e107³ + coefit4*e107⁴ 计算大气顶光吸收系数。
  9. 分区间插值(第 187–1132 行):按 36 个光谱区间分组,每组:
    • 构造加权柱密度输入 auxcolinp(不同区间吸收物种组合不同);
    • jabsifotsintpar 和对应查表柱密度数组中取出参考值;
    • 调用 interfast 做线性插值;
    • 把插值结果写入 jfotsout(indexint, 物种槽位, 层)
    • 区间 17–32 施加 CO₂ 温度修正因子 cortemp * (1 + alfa * (t2 - t0))
  10. 日火距离修正(第 1138 行):jfotsout(:,:,:) = jfotsout(:,:,:) * (1.52 / dist_sol)²,把 1.52 AU 参考距离换算到实际日火距离。

光谱区间分组

区间 波长范围 (nm) 主要吸收物种 查表柱密度来源
1 0.1–5.0 CO₂, O₂, O, H₂, N c1_16
2–15 5–80.5 CO₂, O₂, O, H₂, N₂, N, NO, CO, H, NO₂ c1_16
16 80.6–90.8 CO₂, O₂, O, N₂, N, NO, CO, H, NO₂ c1_16
17–24 90.9–119.5 CO₂, O₂, N₂, NO, CO, NO₂ c17_24
25–29 119.6–167.0 CO₂, O₂, H₂O, H₂O₂, NO, CO, NO₂ c25_29
30–31 167.1–202.5 CO₂, O₂, H₂O, H₂O₂, NO, NO₂ c30_31
32 202.6–210.0 CO₂, O₂, H₂O₂, NO, NO₂ c32
33 210.1–231.0 O₂, H₂O₂, NO₂ c33
34 231.1–240.0 O₂, H₂O₂, O₃, NO₂ c34
35 240.1–337.7 H₂O₂, O₃, NO₂ c35
36 337.8–800.0 O₃, NO₂ c36

与基础版 jthermcalc 的差异

特征 jthermcalc(基础版) jthermcalc_e107(本版)
额外参数 zday(火星日)
额外 use 依赖 comsaison_hdist_sol)、callkeys_modsolvarmod/fixed_euv_value
E10.7 参数化 TOA 光吸收系数 = 4 阶 E10.7 多项式
太阳活动开关 solvarmod == 0 用固定值,否则查 e107_tab 表插值
日火距离修正 末尾 (1.52/dist_sol)²
插值越界保护 abort_physic 无(直接调 interfast,不含边界检查)
调用状态 未发现直接调用点 hrtherm.Fchemthermos.F90 调用

伪代码

jthermcalc_e107(ig, nlayer, chemthermod, rm, nesptherm, tx, iz, zenit, zday):
  if zenit > 140°:
    return                          # 夜间,不更新 jfotsout

  jfotsout = 0                      # 全清零

  t2 = clamp(tx, 195, 295)          # 温度截断用于 CO₂ 修正

  call column(...) → 13 个柱密度数组

  coltemp = 从顶向下计算 rm(CO₂) × |t2 - t0| × Δz   # CO₂ 温度修正辅助列

  sigma, alfa = CO₂ 截面温度系数(区间 24–32)

  if solvarmod == 0:
    e107 = fixed_euv_value
  else:
    realday = mod(zday, 669.)
    e107 = 在 e107_tab 中按 realday 线性插值

  for j in 1..nabs, indexint in 1..ninter:
    jfotsout(indexint, j, nlayer) = coefit0 + coefit1*e107 + ... + coefit4*e107⁴   # TOA 值

  for 每个光谱区间 indexint in 1..36:
    auxcolinp = 按区间吸收物种加权组合柱密度
    auxj* = jabsifotsintpar 查表光吸收系数
    auxcoltab = 对应区间查表柱密度
    call interfast(auxcolinp, auxcoltab) → wm, wp, auxind
    for 每个物种:
      jfotsout(indexint, 物种, 层) = TOA值 × (wm × auxj(ind+1) + wp × auxj(ind))
    if indexint in 17..32:
      cortemp = exp(-sigma × alfa × coltemp)     # CO₂ 温度修正
      jfotsout(CO₂) *= cortemp × (1 + alfa × (t2 - t0))

    if chemthermod >= 2:
      写入 N / NO / NO₂ 扩展物种的 jfotsout

  jfotsout *= (1.52 / dist_sol)²    # 日火距离修正

参与的主题流程

主题 参与方式
热层化学与加热 E107 增强版光吸收系数计算器;被 hrtherm(EUV 加热率)和 chemthermos(热层化学)调用,是实际运行中的活跃版本

写法特点

复现要点

待确认

相关页面