nlte_calc.F

路径

LMDZ.MARS\libf\phymars\nlte_calc.F

所属目录/模块

libf/phymars

文件定位

nlte_calc.F 是 CO2 15 微米 NLTE 冷却快速方案中的光学厚度、escape probability 和 Curtis-matrix 系数计算文件。文件顶部保留了注释掉的 MODULE nlte_calc_mod / USE nlte_aux_mod / CONTAINS 包装,当前源码实际提供一组外部子程序,由 nlte_tcool_mod.F 直接调用。

本文件负责把 nlte_commons_h 中的温度、CO2 数密度、混合比、谱线参数和历史谱线表转换成 c110/vc110c121/vc121taustar11_ctstaustar12 等冷却矩阵输入。它不读文件;历史谱线表读取、插值定位、等效线宽和归一化工具来自 nlte_aux

定义的符号

符号 类型 行号 作用
MZESC110 subroutine 35 在 CTS 网格上计算 110 跃迁的 escape probability 光学厚度 taustar11_cts
MZTUD110 subroutine 233 计算主 110 带的 Curtis matrix c110 和边界向量 vc110
MZCUD110 subroutine 626 把 110 带的 tau/tauinf 转换为 c110/vc110
MZMC121 subroutine 715 合并 121 热带三个子带的 Curtis matrix 和边界向量,写入 c121/vc121
MZTUD121 subroutine 789 计算单个 121 子带的 Curtis matrix 和边界向量。
MZCUD121 subroutine 1155 把单个 121 子带的 tau/tauinf 转换为输出矩阵 c/vc
MZESC121 subroutine 1251 汇总 121 三个子带的 escape probability,写入 taustar12
MZESC121sub subroutine 1301 计算单个 121 子带的 taustar/tauinf
MZTVC121 subroutine 1505 汇总 121 三个子带的边界向量 vc121
MZTVC121sub subroutine 1557 计算单个 121 子带的边界向量。

依赖的模块

use 模块 only 列表 用途 待确认
nlte_tcool_mod errors ierr/varerr 转交给 NLTE cooling-time 错误处理。
nlte_paramdef_h nl, nzy, nl_cts, nzy_cts, nbox_max, nhist, imr, ee, nu, nu12_0200, nu12_1000 维度、同位素混合比、谱线常数和热带频率。
nlte_commons_h c110, vc110, c121, vc121, taustar11_cts, taustar12, co2y, co2y_cts, nty, nty_cts, v626t1, zl, zy, deltanu, deltaz, elow, eqw, aa, cc, dd NLTE 状态剖面、谱线工作数组、矩阵输出和 escape probability 输出。

调用的关键例程

被调用例程 所在模块/文件 调用位置 作用
gethist_03 nlte_aux.F MZESC110MZTUD110MZTUD121MZESC121subMZTVC121sub 选择当前谱带/子带的历史谱线表。
initial nlte_aux.F 多个积分循环入口 清零 eqw/aa/cc/dd 和 box 累积数组。
intzhunt / intzhunt_cts nlte_aux.F 高度层循环 在 GCM 或 CTS 高度网格上插值 CO2、压力、混合比和温度。
interstrhunt / intershphunt nlte_aux.F 光学厚度积分 按温度历史表插值线强和线宽。
we_clean nlte_aux.F 光学厚度积分 由路径吸收量、CO2 分压和线宽计算 Voigt 等效线宽。
mztf_correccion nlte_aux.F 110/121 主网格计算 修正顶层柱量 con,连接外推柱量和内部表。
mzescape_normaliz / mzescape_normaliz_02 nlte_aux.F MZESC121 / MZESC110 归一化 escape probability 光学厚度数组。
MZCUD110 / MZCUD121 本文件 MZTUD110 / MZTUD121 把 transmissivity 差分转换为 Curtis matrix 和边界向量。
MZESC121sub / MZTVC121sub 本文件 MZESC121 / MZTVC121 分别计算 121 子带 escape probability 和边界向量。
abort_physic 外部错误终止入口 MZMC121 热带索引超出 2/3/4 时终止。

输入

输入 来源 类型/维度 单位 含义
ig nlte_tcool_mod.F 调用方 integer - CTS 网格计算中的水平列索引,仅传入 MZESC110
nl_cts_real, nzy_cts_real nlte_tcool_mod.F 调用方 integer - CTS 工作网格的实际层数和高度点数。
co2y, co2y_cts, nty, nty_cts nlte_commons_h arrays 数密度/总数密度 CO2 与总数密度剖面,用于柱量和混合比。
zl, zy, zl_cts nlte_commons_h arrays 高度坐标 目标层和历史表高度坐标。
v626t1 nlte_commons_h array K 626 同位素振动温度表,用于插值修正柱量。
deltanu, deltaz, deltaz_cts nlte_commons_h scalar/array 波数宽度 / 高度步长 把等效线宽转换为透过率和矩阵差分系数。
ib 本文件内部循环 integer - 121 热带子带索引,取 2、3、4。

输出

输出 去向 类型/维度 单位 含义
taustar11_cts nlte_commons_hnlte_tcool_mod.F 读取 nl_cts array 无量纲/光学厚度相关 110 跃迁 CTS 网格 escape probability。
c110 nlte_commons_hnlte_tcool_mod.F 读取 nl x nl matrix 差分矩阵系数 110 主带 Curtis matrix。
vc110 nlte_commons_hnlte_tcool_mod.F 读取 nl vector 边界向量系数 110 主带边界/外部贡献。
c121 nlte_commons_hnlte_tcool_mod.F 读取 nl x nl matrix 差分矩阵系数 121 热带三子带合成 Curtis matrix。
vc121 nlte_commons_hnlte_tcool_mod.F 读取 nl vector 边界向量系数 121 热带三子带合成边界贡献。
taustar12 nlte_commons_hnlte_tcool_mod.F 读取 nl array 无量纲/光学厚度相关 121 热带合成 escape probability。
ierr, varerr 调用方或 errors integer + real*8 - 数值错误代码和触发值。

共享状态与副作用

核心逻辑

  1. MZESC110 在 CTS 高度网格上用 co2y_cts/nty_cts/ty_cts/py_cts 建立柱量和混合比,读取 110 历史表,逐层积分得到 tauinf,最后调用 mzescape_normaliz_02 得到 taustar11_cts
  2. MZTUD110 把 GCM 主网格的 CO2 柱量按振动温度修正,读取 110 历史表,逐层/逐路径计算 tau(in,ir)tauinf(in);若最大透过率超过 1,返回错误 42。
  3. MZCUD110tau/tauinf 做差分,乘以 pi*deltanu 和垂直差分算子,写出 c110vc110
  4. MZMC121 对 121 热带的三个子带 ib=2,3,4 逐一调用 MZTUD121,再按频率比例和温度指数因子合成 c121/vc121
  5. MZESC121 逐一调用 MZESC121sub 计算三个 121 子带的 escape probability,再按频率比例合成并调用 mzescape_normaliz
  6. MZTVC121 逐一调用 MZTVC121sub 计算三个子带边界向量,再按频率比例合成 vc121

伪代码

nlte_tcool_mod calls nlte_calc routines:

for 110 band:
  MZESC110:
    build CTS CO2 column and mixing-ratio arrays
    get history table 1
    integrate layer-to-space optical depths
    normalize taustar11_cts

  MZTUD110:
    interpolate vibration temperature to GCM grid
    correct CO2 column and get history table 1
    for each source layer in:
      integrate optical paths to lower layers and to space
      use interstrhunt/intershphunt + we_clean for equivalent widths
    MZCUD110 converts tau differences into c110 and vc110

for 121 hot band:
  MZMC121:
    for ib in 2, 3, 4:
      MZTUD121 computes one sub-band matrix and vector
      scale by frequency/temperature factors
      accumulate into c121 and vc121

  MZESC121:
    for ib in 2, 3, 4:
      MZESC121sub computes one sub-band taustar
    scale and normalize into taustar12

  MZTVC121:
    for ib in 2, 3, 4:
      MZTVC121sub computes one sub-band boundary vector
    scale and accumulate into vc121

参与的主题流程

主题 参与方式
NLTE 15 微米 CO2 冷却 生成 nlte_tcool_mod.F 所需的 110/121 带 escape probability、Curtis matrix 和边界向量。
辐射矩阵求解 c110/c121/vc110/vc121 进入后续 vibrational population 和 cooling-rate 矩阵计算。
数值错误传播 通过 ierr/varerr 把非正 CO2 柱量、非正压力、透过率大于 1、负 vc 等问题传给 errors

写法特点

复现要点

待确认

相关页面