jthermcalc.F

路径

LMDZ.MARS\libf\aeronomars\jthermcalc.F

所属目录/模块

libf/aeronomars

文件定位

基础版热层光吸收系数计算器:按 36 个光谱区间对 13 种大气物种的柱密度做查表插值,把结果写入共享数组 jfotsout(ninter, 物种槽位, nlayer)。本文件是早期版本(2002 年 FGG 初版,2003 年 MAC 修改),当前代码中未发现任何直接调用点,已被 E107 增强版 jthermcalc_e107_mod.F取代。

定义的符号

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

依赖的模块

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 光吸收输出缓存、吸收截面参数、插值查找表、温度参考值、光谱区间维度
jthermcalc_util column, interfast 柱密度计算与快速线性插值

调用的关键例程

被调用例程 所在模块/文件 调用位置 作用
column jthermcalc_util.F 第 118 行 计算 13 种物种的柱密度(cm⁻²),含光学路径几何
interfast jthermcalc_util.F 第 192/298/402/487/588/681/766/840/900/960/1013 行 在柱密度查找表中做快速线性插值,返回权重 wm/wp 和索引 auxind
abort_physic 外部 第 211 行 插值越界时中止(仅在非 MESOSCALE 编译条件下)

输入

输入 来源 类型/维度 单位 含义
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 ° 太阳天顶角

输出

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

共享状态与副作用

核心逻辑

  1. 日/夜判断(第 97–104 行):zenit > 140° 为夜间,设 dn='n' 并立即 returnjfotsout 不被更新。
  2. 初始化 jfotsout 为零(第 107 行):日间情形下把整个三维数组清零。
  3. 温度截断(第 111–115 行):构造辅助温度 t2,截断到 [195 K, 295 K],用于 CO₂ 截面温度修正。
  4. 柱密度计算(第 118–120 行):调用 column 计算 13 个物种的柱密度数组 co2colxo2colxo3pcolxh2colxh2ocolxh2o2colxo3colxn2colxncolxnocolxcocolxhcolxno2colx
  5. CO₂ 温度修正辅助列(第 124–129 行):从顶层向下累积,用 rm(i,i_co2)|t2(i) - t0(i)| 构造 coltemp。注意第 126 行有一行被注释掉的累积项。
  6. CO₂ 截面温度系数(第 132–138 行):为区间 24–32 计算 sigma(195 K 截面)和 alfa(温度线性修正系数)。
  7. 分区间插值(第 148–1031 行):按 36 个光谱区间分组,每组:
    • 构造加权柱密度输入 auxcolinp(不同区间吸收物种组合不同);
    • jabsifotsintpar 和对应查表柱密度数组中取出参考值;
    • 调用 interfast 做线性插值;
    • 把插值结果写入 jfotsout(indexint, 物种槽位, 层)
    • 区间 24–32 施加 CO₂ 温度修正因子 cortemp * (1 + alfa * (t2 - t0))

光谱区间分组

区间 波长范围 (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(ig, nlayer, chemthermod, rm, nesptherm, tx, iz, zenit):
  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)

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

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

参与的主题流程

主题 参与方式
热层化学与加热 基础版光吸收系数计算器;当前已被 jthermcalc_e107 取代,未发现直接调用点

写法特点

复现要点

待确认

相关页面