nlte_aux.F

路径

LMDZ.MARS\libf\phymars\nlte_aux.F

所属目录/模块

libf/phymars

文件定位

nlte_aux.F 是 CO2 15 微米 NLTE 冷却快速方案的外部辅助例程集合。文件开头保留了 MODULE nlte_aux_mod / CONTAINS / END MODULE nlte_aux_mod 的注释行,但当前源码并没有启用 module 包装;下游通过外部函数和子程序名直接调用这些例程。

本文件合并了旧 1-D NLTE 模型的若干文件片段,包括 Planck 函数、振动温度表初始化、温度/高度/多维查表插值、escape probability 归一化、LU 分解和矩阵/向量工具,以及历史谱线表 hisfile 的读取和广播。它服务于 nlte_setup.F 的表读取、nlte_calc.F 的 NLTE 辐射查表和等效线宽计算,以及 nlte_tcool_mod.F 的冷却时间尺度矩阵求解。

定义的符号

符号 类型 行号 作用
planckdp function 103 nlte_paramdef_h::gamma/ee 计算给定温度和波数的 Planck 项。
leetvt subroutine 118 ty/zy/zl 表转换并插值到各同位素振动温度数组。
initial subroutine 155 清零 eqw/aa/cc/dd/ccbox/ddbox 等 NLTE 累积工作数组。
intershphunt subroutine 180 按温度历史表插值 self Lorentz 与 Doppler 线宽数组。
interstrhunt subroutine 235 按温度历史表插值谱线强度。
intzhunt / intzhunt_cts subroutine 322 / 354 在高度网格上插值 CO2、压力、混合比、温度等状态量。
we_clean real*8 function 390 组合 Lorentz/Doppler 近似计算 Voigt 等效线宽。
mztf_correccion subroutine 466 根据低层 LTE/非 LTE 连接修正柱量 con
mzescape_normaliz / mzescape_normaliz_02 subroutine 526 / 573 对 escape probability 光学厚度数组归一化。
interdp_ESCTVCISO subroutine 624 读取/插值 ESC/TVC/ISO 相关双精度表。
hunt_cts / huntdp / hunt subroutine 664 / 733 / 793 有序网格定位工具,供插值例程查找包围区间。
interdp_limits subroutine 860 带边界限制的一维双精度插值。
interhunt* / interhuntlimits* subroutine group 956-1592 二维到五维查表插值及带限制版本。
lubksb_dp / ludcmp_dp / LUdec subroutine 1619 / 1660 / 1749 LU 分解、回代和矩阵方程批量求解。
unit ... zero2v subroutine group 1797-2173 单位矩阵、对角化、矩阵/向量乘加和清零工具。
suaviza subroutine 2184 对一维数组做可选平滑。
mulmmf90 / resmmf90 subroutine 2266 / 2282 矩阵乘法和残差矩阵计算。
gethist_03 subroutine 2299 从已缓存的历史表数组恢复当前 thist/no/sk1/xls1/xld1
rhist_03 subroutine 2332 hisfile 读取历史谱线表,并在非 MESOSCALE 路径广播。

依赖的模块

use 模块 only 列表 用途 待确认
nlte_paramdef_h nl, nzy, nhist, nbox_max, gamma, ee, nu 维度、谱线常数和辐射常数。
nlte_commons_h zy, ty, zl, thist, no, sk1, xls1, xld1, hisfile NLTE 查找表、工作数组、谱线历史表缓存和输入文件名。
mod_phys_lmdz_para is_master MESOSCALE 路径中限制历史表只由主进程读取。
mod_phys_lmdz_transfert_para bcast MESOSCALE 路径中广播历史表缓存到其他进程。

调用的关键例程

被调用例程 所在模块/文件 调用位置 作用
huntdp 本文件 intershphuntinterstrhunt、多组 interhunt* 在双精度有序网格中查找插值区间。
hunt / hunt_cts 本文件 高度和 CTS 插值例程 在单精度/CTS 网格中查找插值区间。
abort_physic 外部错误终止入口 多处 插值越界、Voigt 负值、奇异矩阵、平滑选项非法和 nbox 过大时终止。
ludcmp_dp / lubksb_dp 本文件 LUdec 分解矩阵并求解多右端线性系统。
bcast mod_phys_lmdz_transfert_para rhist_03 广播由主进程读入的历史谱线表。

输入

输入 来源 类型/维度 单位 含义
tp, xnu planckdp 调用方 scalar K / cm-1 温度和波数。
xtemp, thist, xls1, xld1, sk1 nlte_calc.F / nlte_commons_h arrays K / 谱线表量 温度历史表和谱线强度/线宽查表数据。
h, zl, zy intzhunt* 调用方 / nlte_commons_h scalar + arrays 高度坐标 目标高度和 NLTE/GCM 高度网格。
y, pl, xalsa, xalda we_clean 调用方 scalar 路径量 / 压力 / 线宽 等效线宽计算所需的吸收量、CO2 分压和 Lorentz/Doppler 线宽。
hisfile nlte_commons_h string - rhist_03 要读取的历史谱线表文件。
xx, aa, bb, m, n LUdec 调用方 matrices / integers - 线性系统系数矩阵、右端矩阵和维度。

输出

输出 去向 类型/维度 单位 含义
planckdp nlte_tcool_mod.F real*8 erg cm-2 sr-1 cm Planck 辐射项。
alsa/aldast/ts 等插值结果 nlte_calc.F arrays 谱线表量 NLTE cooling 查表后的线强、线宽和状态量。
we_clean nlte_calc.F real*8 等效线宽 Voigt 近似后的等效宽度。
taustar* nlte_calc.F arrays 光学厚度相关 escape probability 归一化后的光学厚度数组。
thist/no/sk1/xls1/xld1 nlte_commons_h arrays 谱线表量 当前历史表工作副本。
mm_stored/nbox_stored/*_stored nlte_commons_h arrays 谱线表量 rhist_03 从文件读入并缓存的历史表。
bb LUdec 调用方 matrix - 线性系统解矩阵。

共享状态与副作用

核心逻辑

  1. nlte_setup.F 初始化 NLTE 表文件名后,多次调用 rhist_03(ihist) 读取不同历史谱线表。非 MESOSCALE 并行路径由主进程读文件并广播缓存。
  2. nlte_calc.F 进入具体 NLTE 冷却计算前调用 gethist_03(ihist),把某个历史表缓存恢复为当前 thist/no/sk1/xls1/xld1 工作数组。
  3. intzhunt*interstrhuntintershphunt 和多组 interhunt* 按高度、温度和其他表坐标查找包围区间,做线性或多维线性插值。
  4. we_clean 用 Lorentz、Doppler 和 Voigt 近似把吸收路径量与线宽合成为等效宽度;若组合项不可开方则终止。
  5. mztf_correccionmzescape_normaliz* 修正柱量和 escape probability 光学厚度,供 nlte_calc.F 的多谱带/多同位素计算继续使用。
  6. nlte_tcool_mod.F 使用 planckdp 计算边界/层内 Planck 项,并用 LUdec 解冷却时间尺度相关的线性系统;suaviza 对某些剖面做平滑。

伪代码

setup phase:
  for each NLTE history table:
    rhist_03(ihist)
      if not MESOSCALE:
        master opens hisfile on unit 3
      read mm_stored, nbox_stored, thist_stored, no/sk1/xls1/xld1
      if nbox_stored > nbox_max:
        abort
      if not MESOSCALE:
        broadcast cached arrays

calculation phase:
  gethist_03(ihist)
    copy cached history table into current working arrays

  for each target layer/box:
    locate height and temperature intervals with hunt/huntdp
    interpolate state, line strength, Lorentz width and Doppler width
    compute equivalent width with we_clean
    normalize escape probability arrays

  for cooling-time linear systems:
    build coefficient matrices
    LUdec calls ludcmp_dp + lubksb_dp
    return solved vectors/matrices to nlte_tcool_mod

参与的主题流程

主题 参与方式
NLTE 15 微米 CO2 冷却 nlte_calc.F 提供历史谱线表读取、温度/高度插值、等效线宽和 escape probability 工具。
辐射计算 nlte_tcool_mod.F 使用 planckdpLUdec 构造/求解冷却时间尺度中的辐射矩阵。
并行运行 rhist_03 在非 MESOSCALE 路径中使用主进程读表和广播,避免每个进程重复读文件。

写法特点

复现要点

待确认

相关页面