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⁻¹(待确认) |
各光谱区间×各物种×各层的光吸收系数(已做日火距离修正) |
共享状态与副作用
- 读:
param_v4_h 中的 crscabsi2(吸收截面)、jabsifotsintpar(查表光吸收系数)、c1_16/c17_24/c25_29/c30_31/c32–c36(各区间查表柱密度)、co2crsc195/co2crsc295(CO₂ 截面温度端点)、t0(参考温度)、ninter/nz2/nabs(维度参数)、e107/date_e107/e107_tab(E10.7 太阳活动表)、coefit0–coefit4(TOA 多项式系数)。
- 读:
comsaison_h::dist_sol(日火距离,AU)。
- 读:
callkeys_mod::solvarmod(太阳活动模式开关)、fixed_euv_value(固定 E10.7 值)。
- 写:
param_v4_h::jfotsout(光吸收系数输出缓存),全量覆盖写入;同时写 param_v4_h::e107(E10.7 当日值)。
- 无 SAVE / THREADPRIVATE:本文件自身不声明 SAVE 或 THREADPRIVATE 变量。
核心逻辑
- 日/夜判断(第 105–112 行):
zenit > 140° 为夜间,设 dn='n' 并立即 return,jfotsout 不被更新。
- 初始化
jfotsout 为零(第 115 行):日间情形下把整个三维数组清零。
- 温度截断(第 119–123 行):构造辅助温度
t2,截断到 [195 K, 295 K],用于 CO₂ 截面温度修正。
- 柱密度计算(第 126–128 行):调用
column 计算 13 个物种的柱密度数组 co2colx、o2colx、o3pcolx、h2colx、h2ocolx、h2o2colx、o3colx、n2colx、ncolx、nocolx、cocolx、hcolx、no2colx。
- CO₂ 温度修正辅助列(第 132–137 行):从顶层向下计算
coltemp,用 rm(i,i_co2) 与 |t2(i) - t0(i)| 构造。注意第 134 行有一行被注释掉的累积项 coltemp(i+1)+。
- CO₂ 截面温度系数(第 140–146 行):为区间 24–32 计算
sigma(195 K 截面)和 alfa(温度线性修正系数)。
- E10.7 太阳活动参数化(第 148–169 行):
solvarmod == 0:使用 fixed_euv_value 固定值。
- 否则:用
realday = mod(zday, 669.) 在 669 天的 e107_tab 表中做线性插值得当日 E10.7。
- TOA 光吸收系数(第 172–178 行):对
nabs 个吸收物种 × ninter 个光谱区间,用 4 阶多项式 coefit0 + coefit1*e107 + coefit2*e107² + coefit3*e107³ + coefit4*e107⁴ 计算大气顶光吸收系数。
- 分区间插值(第 187–1132 行):按 36 个光谱区间分组,每组:
- 构造加权柱密度输入
auxcolinp(不同区间吸收物种组合不同);
- 从
jabsifotsintpar 和对应查表柱密度数组中取出参考值;
- 调用
interfast 做线性插值;
- 把插值结果写入
jfotsout(indexint, 物种槽位, 层);
- 区间 17–32 施加 CO₂ 温度修正因子
cortemp * (1 + alfa * (t2 - t0))。
- 日火距离修正(第 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_h(dist_sol)、callkeys_mod(solvarmod/fixed_euv_value) |
| E10.7 参数化 |
无 |
TOA 光吸收系数 = 4 阶 E10.7 多项式 |
| 太阳活动开关 |
无 |
solvarmod == 0 用固定值,否则查 e107_tab 表插值 |
| 日火距离修正 |
无 |
末尾 (1.52/dist_sol)² |
| 插值越界保护 |
有 abort_physic |
无(直接调 interfast,不含边界检查) |
| 调用状态 |
未发现直接调用点 |
被 hrtherm.F 和 chemthermos.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(热层化学)调用,是实际运行中的活跃版本 |
写法特点
- 固定格式 Fortran 77 风格(
.F 扩展名但使用 module/end module 结构)。
- 硬编码
i_co2=1(第 100 行),注释明确要求必须与 chemthermos.F90 保持一致。
chemthermod >= 2 条件门控扩展物种(N/NO/NO₂)——低模式下只计算基础 10 种。
- 层序反转:
auxcolinp(nlayer-i+1) 从底向上排列供 interfast 使用,写回 jfotsout 时再次反转。
- CO₂ 温度修正的
cortemp 限幅:sigma × alfa × coltemp < 60 时取指数衰减,否则置零。
- E10.7 表 669 天覆盖约一个火星年(~687 地球日),用
mod(zday, 669.) 循环。
- TOA 光吸收系数使用 4 阶 E10.7 多项式(5 个拟合系数
coefit0–coefit4)。
复现要点
jfotsout 维度由 param_v4_h::ninter(光谱区间数,应 ≥ 36)和物种槽位最大索引(应 ≥ 13)决定。
- 夜间
zenit > 140° 时不更新 jfotsout,调用方须自行处理旧值或零值。
coltemp 构造中第 134 行注释掉的 coltemp(i+1)+ 累积项——当前实现不包含层间累积,每层独立计算。
e107_tab 和 date_e107 由 param_read_e107.F 从 EUVDAT/ 数据文件读入。
solvarmod 和 fixed_euv_value 由 callkeys_mod 提供,受 callphys.def 配置控制。
- 日火距离
dist_sol 由 comsaison_h 提供,随火星轨道变化。
待确认
iz 的物理含义与单位(米?千米?几何高度还是位势高度?)。
jfotsout 的物理单位(s⁻¹ 光吸收率还是其他)。
- 第 134 行注释掉的
coltemp(i+1)+ 是否为历史 bug 修复,还是有意移除层间累积。
e107_tab 表的 669 天周期是否精确对应一个火星年,以及端点处理(realday < date_e107(1) 和 >= date_e107(669))在跨年时的行为。
- 基础版
jthermcalc 有插值越界保护(abort_physic),本版不含——是否有意省略或依赖 interfast 内部处理。
相关页面