jthermcalc_util.F

路径

LMDZ.MARS\libf\aeronomars\jthermcalc_util.F

所属目录/模块

libf/aeronomars

文件定位

热层光吸收计算的共享工具模块:提供柱密度积分(column,含球面大气光学路径几何)、快速查表线性插值(interfast)、几何光程计算(espesor_optico_A)、网格索引查找(grid_R8)以及一个遗留的太阳通量太阳周期修正例程(flujo,无调用方)。被 jthermcalc.Fjthermcalc_e107_mod.F 共同依赖。

定义的符号

符号 类型 行号 作用
jthermcalc_util module 第 1 行 模块定义,含 5 个过程
column subroutine 第 10 行 计算 13 种物种的柱密度(cm⁻²),含球面大气光学路径
interfast subroutine 第 338 行 在柱密度查找表中做快速线性插值,返回权重和索引
espesor_optico_A subroutine 第 397 行 几何光学路径厚度计算(球面大气)
grid_R8 function 第 635 行 在单调递增网格中查找值所在区间索引
flujo subroutine 第 707 行 遗留太阳通量 11 年太阳周期修正(无调用方)

依赖的模块

column

use 模块 only 列表 用途 待确认
tracer_mod igcm_o, igcm_co2, igcm_o2, igcm_h2, igcm_h2o_vap, igcm_h2o2, igcm_co, igcm_h, igcm_o3, igcm_n2, igcm_n, igcm_no, igcm_no2, mmol 热层化学物种的 GCM tracer 索引和分子量
param_v4_h radio, gg, masa, kboltzman, n_avog 火星半径、表面重力、质量、玻尔兹曼常数、阿伏伽德罗常数

espesor_optico_A

use 模块 only 列表 用途 待确认
param_v4_h radio 火星半径(km)

flujo

use 模块 only 列表 用途 待确认
comsaison_h dist_sol 日火距离(AU)
param_v4_h ninter, fluxtop, ct1, ct2, p1, p2 光谱区间数和通量修正参数
callkeys_mod solvarmod 太阳活动开关

调用的关键例程

被调用例程 所在模块/文件 调用位置 作用
espesor_optico_A 本模块内部 第 198 行(由 column 调用) 计算球面大气中各层沿光线的几何路径长度
grid_R8 本模块内部 第 465/498/545/548/551/558/597/611 行(由 espesor_optico_A 调用) 在高度网格中查找索引

column 子例程

输入

输入 来源 类型/维度 单位 含义
ig 调用方 integer - 格点索引
nlayer 调用方 integer - 垂直层数
chemthermod 调用方 integer - 热层化学模式;≥1 启用 O₃,≥2 启用 N 物种
rm 调用方 real*8(nlayer, nesptherm) cm⁻³ 各物种数密度矩阵
nesptherm 调用方 integer - 考虑的物种数
tx 调用方 real(nlayer) K 温度剖面
iz 调用方 real(nlayer+1) 待确认(km) 各层界面高度
zenit 调用方 real ° 太阳天顶角

输出

输出 去向 类型/维度 单位 含义
co2colx 调用方 real(nlayer) cm⁻² CO₂ 柱密度
o2colx 调用方 real(nlayer) cm⁻² O₂ 柱密度
o3pcolx 调用方 real(nlayer) cm⁻² O(³P) 柱密度
h2colx 调用方 real(nlayer) cm⁻² H₂ 柱密度
h2ocolx 调用方 real(nlayer) cm⁻² H₂O 柱密度
h2o2colx 调用方 real(nlayer) cm⁻² H₂O₂ 柱密度
o3colx 调用方 real(nlayer) cm⁻² O₃ 柱密度
n2colx 调用方 real(nlayer) cm⁻² N₂ 柱密度
ncolx 调用方 real(nlayer) cm⁻² N 柱密度
nocolx 调用方 real(nlayer) cm⁻² NO 柱密度
cocolx 调用方 real(nlayer) cm⁻² CO 柱密度
hcolx 调用方 real(nlayer) cm⁻² H 柱密度
no2colx 调用方 real(nlayer) cm⁻² NO₂ 柱密度

核心逻辑

  1. 重力计算(第 134–137 行):grav(i) = gg * masa / (radio + iz(i))²,随高度递减。
  2. 标高计算(第 140–158 行):在顶层用 kT/(mg) 计算各物种标高 H*。O₃ 需 chemthermod ≥ 1;N₂/N/NO/NO₂ 需 chemthermod ≥ 2
  3. 数密度提取(第 160–194 行):从 rm 矩阵按热层化学槽位索引(i_co2=1, i_co=2, i_o=3, ...)提取各物种密度,同样受 chemthermod 门控。
  4. 柱密度积分(第 196–329 行):从顶向下逐层调用 espesor_optico_A 获取光学路径长度:
    • 若返回 ilayesp(nlayesp) == -1(无日照),所有柱密度置 1e25(光学厚极限)。
    • 顶层(jj == nlayer)使用标高 × 数密度 × 路径长度积分;SZA ≤ 60° 用 1/cos(SZA) 平面近似,SZA > 60° 用球面弦长。
    • 其余层用梯形积分:esp(j) × (density(jj) + density(jj+1)) / 2

interfast 子例程

输入

输入 类型/维度 含义
p real*8(nlayer) 待插值的大气柱密度(单调递增)
nlayer integer 层数
pin real*8(nl) 查找表柱密度网格
nl integer 查找表维度
limdown real*8 下界阈值(1e-20)
limup real*8 上界阈值(1e26)

输出

输出 类型/维度 含义
wm real*8(nlayer) 下节点权重
wp real*8(nlayer) 上节点权重(1 - wm
nm integer(nlayer) 最近下节点索引

核心逻辑

  1. 可选健全性检查(extra_sanity_checks=.false.,编译时常量关闭)。
  2. 遍历每层:若 p(n1) 超出 [limdown, limup] 则权重置零。
  3. 否则在 pin 表中从上次位置 nini 起顺序搜索包含 p(n1) 的区间,计算线性权重 wm = |pin(n) - p| / (pin(n+1) - pin(n))

espesor_optico_A 子例程

核心逻辑

计算从高度 z 出发、太阳天顶角 szadeg 方向的光线穿过的各层几何路径长度(球面大气)。三个区间:

grid_R8 函数

在单调递增网格 zgrid(nz) 中查找 z 所在区间索引。越界时钳位并打印警告(不中止),网格非递增或维度 < 2 时 stop。搜索从中间点开始线性扫描。

flujo 子例程

遗留太阳通量 11 年周期修正:用 date(年份,钳位到 1985–2001)和正弦函数 sin(2π/11 × (date - 1985 - π)) 对前 24 个光谱区间的 fluxtop 做修正,末尾加 (1.52/dist_sol)² 日火距离修正。当前源码中未发现任何调用方。

共享状态与副作用

参与的主题流程

主题 参与方式
热层化学与加热 提供 column(柱密度积分)和 interfast(查表插值)两个核心工具,被 jthermcalcjthermcalc_e107 共同依赖

写法特点

复现要点

待确认

相关页面