nltecool.F

路径

LMDZ.MARS\libf\phymars\nltecool.F

所属目录 / 模块

libf/phymars

文件定位

nltecool.F 提供旧版 nltemodel=0/1 的 CO2 15 微米 NLTE cool-to-space 冷却参数化。它把文件内置的 68 点压强表、两组 escape function 表和三组成分 VMR 表插值到 GCM 层中,然后在每个水平格点和垂直层上求解两个激发能级、两条辐射通道的简化非 LTE 平衡,输出 dtnlte(ngrid,nlayer),单位在源码注释中标为 K/s。

这个文件与 nlte_tcool_mod 是互斥的 physiq_mod.F 分支:physiq_mod.Fnltemodel.eq.0.or.nltemodel.eq.1 时调用 nltecool,在 nltemodel.eq.2 时调用 nlte_tcool 并把其 K/day 输出除以 86400。

定义的符号

符号 类型 行号 作用
nltecool_mod module 1 封装旧版 NLTE 冷却入口、内置逃逸函数/成分表和两个本地插值 helper。
np integer parameter 9 内置压强、escape function 和 VMR 表的点数,固定为 68。
pnb saved real array 10 初始保存为压强指数;首次调用时转换为 Pa,并声明为 OpenMP THREADPRIVATE
ef1, ef2 real parameter arrays 36, 61 两条 CO2 15 微米通道的预计算 escape function 表。
co2vmr, o3pvmr, n2covmr real parameter arrays 86, 111, 136 nltemodel=0 使用的 CO2、O 和 N2+CO 体积分数表。
nltecool subroutine 164 主入口;从 GCM 压强、温度和 tracer 混合比计算 NLTE 温度倾向。
interp1 subroutine 422 把单个压强表剖面线性插值到 GCM 层压强。
interp3 subroutine 451 同时把三组成分 VMR 表线性插值到 GCM 层压强。

依赖的模块

use 模块 only 列表 用途 待确认
tracer_mod igcm_co2, igcm_co, igcm_o, igcm_n2, mmol nltemodel=1 时从 pq 中按 tracer 索引取 CO2、CO、O、N2 质量混合比,并用摩尔质量换算为体积分数。
conc_mod mmean nltemodel=1 时把 tracer 质量混合比转换为体积分数。
callkeys_mod nltemodel 在表成分方案 0 与动态成分方案 1 之间切换。

调用的关键例程

被调用例程 所在模块 / 文件 调用位置 作用
interp1 本文件 314-315 ef2ef1 从内置 pnb 压强表插值到当前水平格点的 pyy 层压强。
interp3 本文件 316-318 nltemodel=0 时将内置 CO2、O、N2+CO VMR 表插值到当前层压强。

输入

输入 来源 类型 / 维度 单位 含义
ngrid physiq_mod.F integer - 水平格点数。
nlayer physiq_mod.F integer - GCM 垂直层数。
nq physiq_mod.F integer - tracer 数量,用于第三维 pq
pplay(ngrid,nlayer) physiq_mod.F::zplay real array Pa 层中心压强;nltecool 不再做 Pa/atm 转换。
pt(ngrid,nlayer) physiq_mod.F::pt real array K 层中心温度。
pq(ngrid,nlayer,nq) physiq_mod.F::pq real array kg/kg_air tracer 质量混合比;仅 nltemodel=1 分支读取 CO2、O、CO、N2。
mmean(ngrid,nlayer) conc_mod real array mmol 一致 动态成分体积分数换算使用的平均分子量。
mmol(*) tracer_mod real array mmean 一致 tracer 摩尔质量。

输出

输出 去向 类型 / 维度 单位 含义
dtnlte(ngrid,nlayer) physiq_mod.F::zdtnlte real array K/s CO2 15 微米 NLTE 温度倾向;压强范围外置零。

共享状态与副作用

核心逻辑

  1. 首次进入 nltecool 时,把 pnb 从压强指数转换为 Pa,之后保持转换后的表压强。
  2. 对每个水平格点 j,把 pplay(j,:) 复制到一维 pyy,再把 ef2ef1 插值为 escf2(:)escf1(:)
  3. nltemodel=0,调用 interp3 从内置 co2vmr/o3pvmr/n2covmr 表得到各层 VMR;若 nltemodel=1,后续逐层从 tracer pqmmeanmmol 动态换算成 VMR。
  4. 逐层检查压强:pyy(i)>1.0 Papyy(i)<4.0e-6 Pa 时把 hr(i)dtnlte(j,i) 置零。
  5. 对有效压强层,用 nt = p/(1.381e-17*T) 计算数密度,再把 CO2、O、N2+CO VMR 转成 cm-3 数密度。
  6. 用固定同位素丰度 imr1=0.987imr2=0.00408+0.0112 得到两个基态族群 n1/n2,并根据温度计算 k19、k20、k21 碰撞速率族。
  7. 把碰撞损失/产生项与 Einstein 自发辐射项 ae1/ae2 合并,求解两个能级耦合的代数系统,得到 el1/el2pl1/pl2
  8. 计算两条通道冷却 hr1/hr2,求和后通过 0.1*hr*T/(4.4*p) 转成 dtnlte

伪代码

if firstcall for this thread:
  for each table point:
    pnb = 1e-4 * exp(pnb)
  firstcall = false

for each horizontal grid point j:
  pyy = pplay(j,:)
  escf2 = interp1(ef2, pnb -> pyy)
  escf1 = interp1(ef1, pnb -> pyy)

  if nltemodel == 0:
    co2, o3p, n2co = interp3(tabulated VMRs, pnb -> pyy)

  for each layer i:
    if pyy(i) > 1 Pa or pyy(i) < 4e-6 Pa:
      dtnlte(j,i) = 0
    else:
      nt = pyy(i) / (k_B_cgs * pt(j,i))
      if nltemodel == 1:
        derive CO2, O, CO+N2 VMRs from pq, mmean and mmol
      convert VMRs to number densities
      build two-level collisional production/loss terms
      add radiative escape terms
      solve the two coupled excitation equations
      hr = hr1 + hr2
      dtnlte(j,i) = 0.1 * hr * T / (4.4 * p)

参与的主题流程

主题 参与方式
CO2 15 微米 NLTE 冷却 作为 nltemodel=0/1 的旧版 cool-to-space 参数化,直接输出 K/s 温度倾向。
辐射倾向合成 physiq_mod.Fzdtnlte 传给 blendrad,后者在 LTE/NLTE 过渡层附近把长波 LTE、NIR CO2 与 NLTE 倾向合成。
高层大气成分敏感性 nltemodel=0 使用内置标准成分表,nltemodel=1 使用当前 tracer 组成,因此 O、CO、N2 和 CO2 剖面对冷却率有直接影响。

写法特点

复现要点

待确认

相关页面