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⁻¹(待确认) |
各光谱区间×各物种×各层的光吸收系数 |
共享状态与副作用
- 读:
param_v4_h 中的 crscabsi2(吸收截面)、jabsifotsintpar(查表光吸收系数)、c1_16/c17_24/c25_29/c30_31/c32–c36(各区间查表柱密度)、co2crsc195/co2crsc295(CO₂ 截面温度端点)、t0(参考温度)、ninter/nz2(维度参数)。
- 写:
param_v4_h::jfotsout(光吸收系数输出缓存),全量覆盖写入。
- 无 SAVE / THREADPRIVATE:本文件自身不声明 SAVE 或 THREADPRIVATE 变量。
- 标准输出:插值越界时打印诊断信息(第 199–209 行)。
- MESOSCALE 编译宏:
abort_physic 仅在 #ifndef MESOSCALE 条件下调用。
核心逻辑
- 日/夜判断(第 97–104 行):
zenit > 140° 为夜间,设 dn='n' 并立即 return,jfotsout 不被更新。
- 初始化
jfotsout 为零(第 107 行):日间情形下把整个三维数组清零。
- 温度截断(第 111–115 行):构造辅助温度
t2,截断到 [195 K, 295 K],用于 CO₂ 截面温度修正。
- 柱密度计算(第 118–120 行):调用
column 计算 13 个物种的柱密度数组 co2colx、o2colx、o3pcolx、h2colx、h2ocolx、h2o2colx、o3colx、n2colx、ncolx、nocolx、cocolx、hcolx、no2colx。
- CO₂ 温度修正辅助列(第 124–129 行):从顶层向下累积,用
rm(i,i_co2) 与 |t2(i) - t0(i)| 构造 coltemp。注意第 126 行有一行被注释掉的累积项。
- CO₂ 截面温度系数(第 132–138 行):为区间 24–32 计算
sigma(195 K 截面)和 alfa(温度线性修正系数)。
- 分区间插值(第 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 取代,未发现直接调用点 |
写法特点
- 固定格式 Fortran 77 风格(
.F 扩展名但使用 module/end module 结构)。
- 硬编码
i_co2=1(第 92 行),注释明确要求必须与 chemthermos.F90 保持一致。
chemthermod >= 2 条件门控扩展物种(N/NO/NO₂)——低模式下只计算基础 10 种。
- 层序反转:
auxcolinp(nlayer-i+1) 从底向上排列供 interfast 使用,写回 jfotsout 时再次反转。
- 插值越界保护:
ind+1 > nz2 或 ind <= 0 时打印诊断并在非 MESOSCALE 模式下 abort_physic。
- CO₂ 温度修正的
cortemp 限幅:sigma × alfa × coltemp < 60 时取指数衰减,否则置零。
复现要点
jfotsout 维度由 param_v4_h::ninter(光谱区间数,应 ≥ 36)和物种槽位最大索引(应 ≥ 13)决定。
- 夜间
zenit > 140° 时不更新 jfotsout,调用方须自行处理旧值或零值。
coltemp 构造中第 126 行注释掉的 coltemp(i+1)+ 累积项——当前实现不包含层间累积,每层独立计算。
- 本文件与 jthermcalc_e107_mod.F的光谱区间分组和物种槽位编号完全一致,但后者额外引入了 E107 太阳活动参数化、日火距离修正和
callkeys_mod 开关。
待确认
iz 的物理含义与单位(米?千米?几何高度还是位势高度?)。
jfotsout 的物理单位(s⁻¹ 光吸收率还是其他)。
- 第 126 行注释掉的
coltemp(i+1)+ 是否为历史 bug 修复,还是有意移除层间累积。
- 本文件是否仍被编译进当前版本(源码中未发现任何
call jthermcalc 或 use jthermcalc_mod)。
相关页面