nlte_tcool_mod.F

路径

LMDZ.MARS\libf\phymars\nlte_tcool_mod.F

所属目录 / 模块

libf/phymars

文件定位

nlte_tcool_mod.F 实现 nltemodel=2 使用的 CO2 15 微米 NLTE 快速冷却率方案。physiq_mod.Fcallnltenltemodel.eq.2 时把 GCM 层压强、温度、高度和 CO2/N2/CO/O 混合比传入 nlte_tcool,本模块在内部把每个水平格点的 GCM 垂直剖面重采样到 NLTE 主网格和 CTS 延伸网格,调用 nlte_calcnlte_aux 提供的 Curtis matrix、escape probability、插值、LU 求解和平滑工具,最后把 K/day 的 q15umco2_gcm 回填给调用方;physiq_mod.F 随后除以 86400 转为 K/s。

该文件还提供错误终止子程序 ERRORSnlte_calc.F 中若干例程 use nlte_tcool_mod, only: errors,说明这里的错误处理不是只供本文件内部使用。

定义的符号

符号 类型 行号 作用
nlte_tcool_mod module 1 封装 nlte_tcool、NLTE 网格构造、CZA 求解、CTS 顶层冷却、单位换算和错误终止例程。
nlte_tcool subroutine 30 主入口;逐水平格点计算 CO2 15 微米 NLTE 冷却率,并输出到 GCM 垂直网格。
NLTEdlvr11_ZGRID subroutine 209 从 GCM 剖面构建 NLTE 主网格、细网格、CTS 网格和 CTS 细网格,并写入 nlte_commons_h 共享状态。
NLTEdlvr11_CZALU subroutine 499 组装并求解 vibrational temperature / source function 相关线性系统,生成 hr110/hr210/hr310/hr410/hr121
NLTEdlvr11_FB626CTS subroutine 1295 在 CTS 延伸网格上计算 626 组分的 hr110CTS,用于顶层冷却率拼接。
hrkday_convert function 1389 把体积冷却功率换算为 K/day 的因子,使用 daysec*n_avog/(cp*1.e4*mmean)
ERRORS subroutine 1415 根据 ierr 打印具体 NLTE 错误来源,并调用 abort_physic("nlte_tcool",...) 终止。

依赖的模块

use 模块 only 列表 用途 待确认
conc_mod cpnew, mmean nlte_tcool 从 GCM 格点读取平均分子量和热容,供 K/day 换算。
nlte_paramdef_h nl, nltot, nl_cts 提供 NLTE 主网格、CTS 网格、谱线和物理常数维度。
nlte_commons_h input_cza, jlowerboundary, jtopCTS, pl, pl_cts, hr*, c*, vc*, taustar*, t/nt/co2/n2/co/o3p 作为 NLTE 计算的主要共享状态区;本文件大量读写网格、碰撞率、矩阵、源项和冷却率数组。
time_phylmdz_mod daysec hrkday_convert 使用每 sol 秒数。
param_v4_h n_avog hrkday_convert 使用阿伏伽德罗常数。

调用的关键例程

被调用例程 所在模块 / 文件 调用位置 作用
NLTEdlvr11_ZGRID 本文件 93-97 把当前 GCM 列转换到 NLTE 主网格和 CTS 网格。
interdp_ESCTVCISO nlte_aux.F 101 将同位素 Tstar/VC 表插值到 NLTE 主网格。
MZESC110, MZTUD110, MZESC121, MZTVC121, MZMC121 nlte_calc.F 104, 112, 711, 717-718 计算 escape probability、Curtis matrix、Tstar/VC 等光学量。
leetvt nlte_aux.F 108 读取或恢复历史谱线相关 vibrational temperature 缓存。
zero*v/zero*m, unit, diago, mulmmf90, resmmf90, LUdec, sypvmv nlte_aux.F 多处 清零、矩阵代数和线性系统求解。
GETK_dlvr11 nlte_setup.F 748, 1335 按当前层温度更新 k19/k20/k21/k33 碰撞速率族。
interhunt*, interdp_limits nlte_aux.F 330-338, 375-377, 410-421, 472-476, 189-192 在 GCM、NLTE、CTS 和对数压强坐标之间插值。
suaviza nlte_aux.F 195 对回插到 GCM 网格的冷却率剖面平滑。
abort_physic 物理层公共终止例程 295-296, 1666-1667 对无法修复的边界或 NLTE 错误执行终止。

输入

输入 来源 类型 / 维度 单位 含义
ngridgcm physiq_mod.F integer - 水平格点数。
n_gcm physiq_mod.F integer - GCM 垂直层数。
p_gcm(ngridgcm,n_gcm) physiq_mod.F::zplay*9.869e-6 real array atm 层中心压强;physiq 从 Pa 换算为 atm 后传入。
t_gcm(ngridgcm,n_gcm) physiq_mod.F::pt real array K 层中心温度。
z_gcm(ngridgcm,n_gcm) physiq_mod.F::zzlay real array m 层中心高度;本模块入口处除以 1000 变为 km。
co2vmr_gcm, n2vmr_gcm, covmr_gcm, o3pvmr_gcm physiq_mod.F 由 tracer 和 mmean/mmol 生成 real arrays mol/mol CO2、N2、CO、O 体积分数。
mmean, cpnew conc_mod ngridgcm x n_gcm g/mol、J/kg/K 推断 hrkday_convert 的平均分子量和热容输入。
NLTEDAT 初始化表 nlte_setup 共享数组 多种 GETK_dlvr11、Tstar/VC 和历史谱线缓存必须已初始化。

输出

输出 去向 类型 / 维度 单位 含义
q15umco2_gcm(ngridgcm,n_gcm) physiq_mod.F::zdtnlte real array K/day CO2 15 微米 NLTE 冷却率;physiq_mod.F 行 1055-1056 转为 K/s。
ierr 调用方 integer - 每个水平格点进入计算时置 0;若错误处理没有终止,可由调用方检查。
varerr 调用方 real*8 依错误而定 ierr 对应的错误数值。
jlowerboundary, jtopboundary, jtopCTS nlte_commons_h integers - 本次 GCM 列在 NLTE 主网格和 CTS 网格中的有效 GCM 层索引。
pl/t/co2/..., pl_cts/t_cts/co2_cts/..., hr*, vt*, el* nlte_commons_h arrays 多种 中间网格、数密度、振动态、源项和冷却率共享状态。

共享状态与副作用

核心逻辑

  1. nlte_tcool 逐水平格点复制当前列的压强、温度、成分、高度、mmeancpnew;高度从 m 转为 km。
  2. 调用 NLTEdlvr11_ZGRID:根据 Pbottom_atm/Ptop_atm 找到 NLTE 主模型的 GCM 层范围,构造 nl 层主网格、nzy 细网格、从 zl(nl-1) 开始的 nl_cts CTS 网格以及 nzy_cts CTS 细网格。
  3. 在主网格和 CTS 网格上插值压强、温度、混合比、平均分子量、热容,并由 nt=7.339e+21*p/t 转为数密度;同时计算 hrkday_factorhrkday_factor_cts
  4. 调用 Tstar/VC、MZESC、MZTUD、历史谱线和矩阵工具,先以 input_cza=0 求解基本振动温度,再以 input_cza=1 求解包含 CZA 通道的冷却率。
  5. NLTEdlvr11_CZALU 在每个 NLTE 层调用 GETK_dlvr11(t(i)),用 CO2/N2/CO/O 数密度、k19/k20/k21/k33 碰撞速率和 Einstein 系数组装多组耦合线性系统;通过矩阵消元与 LUdec 求得 el11/el21/el31/el41,可选求 el12,然后生成 hr110/hr210/hr310/hr410/hr121 并换算到 K/day。
  6. NLTEdlvr11_FB626CTS 在 CTS 网格调用 GETK_dlvr11(t_cts(i)),计算 626 组分高层 hr110CTS
  7. 主网格总冷却率为 hr110+hr210+hr310+hr410+hr121;第 nl-1 点与 hr110CTS(1) 取平均,CTS 后续点接到 q15umco2_nltot,超出实际 CTS 的点置零。
  8. -log(p) 坐标把 q15umco2_nltot 从 NLTE/CTS 组合网格插回原 GCM 网格的 jlowerboundary:jtopCTS 范围,对结果平滑后写入 q15umco2_gcm

伪代码

for ig in 1..ngridgcm:
  copy GCM column fields into 1-D work arrays
  convert z from m to km

  NLTEdlvr11_ZGRID:
    find jlowerboundary where p <= Pbottom_atm
    find jtopboundary where p <= Ptop_atm, or clamp to n_gcm
    build NLTE main grid zl/pl/t/species/number densities
    build fine grid zy/py/ty/co2y
    build CTS grid from zl(nl-1), limited by GCM top
    build CTS fine grid and jtopCTS

  interpolate Tstar and VC tables to NLTE grids
  compute escape probability / Curtis matrix terms
  input_cza = 0; NLTEdlvr11_CZALU()
  input_cza = 1; NLTEdlvr11_CZALU()
  NLTEdlvr11_FB626CTS()

  q_total(1:nl) = hr110 + hr210 + hr310 + hr410 + hr121
  merge q_total(nl-1) with first CTS value
  append remaining CTS values, zero unused CTS extension
  interpolate q_total back to the original GCM pressure grid
  smooth the interpolated profile
  write q15umco2_gcm(ig,:)

参与的主题流程

主题 参与方式
NLTE 15 微米 CO2 冷却 作为 nltemodel=2 的核心冷却率计算器,依赖 nlte_setup.F 初始化的表和碰撞速率公式、nlte_calc.F 的光学矩阵构造、nlte_aux.F 的插值与线性代数工具。
辐射倾向合成 physiq_mod.F 把本模块输出的 zdtnlte 转为 K/s 后参与后续辐射倾向和 blendrad 合成。
高层大气参数化 通过 CTS 延伸网格把主 NLTE 网格顶端以上的高层 626 组分冷却率拼接回 GCM 网格。

写法特点

复现要点

待确认

相关页面