nlte_setup.F

路径

LMDZ.MARS\libf\phymars\nlte_setup.F

所属目录 / 模块

libf/phymars

文件定位

nlte_setup.F 是 CO2 15 微米 NLTE 快速参数化的运行时初始化文件。它把运行时数据目录 datafile_mod::datadir 下的 NLTEDAT 表文件读入 nlte_commons_h 的共享数组,并在非 MESOSCALE 编译路径下只让 is_master 进程执行文件 I/O,再用 bcast 把表数据广播到其他进程。

本文件当前没有启用顶部注释中的 MODULE nlte_setup_mod 包装;源码实际提供三个外部子程序:nlte_setupLeeHISTOGRMSGETK_dlvr11physiq_mod.Fcallnlte.and.nltemodel.eq.2 时调用 nlte_setup,而 nlte_tcool_mod.F 在主网格和 CTS 网格计算中调用 GETK_dlvr11 生成温度相关的碰撞速率族。

定义的符号

符号 类型 行号 作用
nlte_setup subroutine 10 读取 NLTE 谱线、Tstar、VC 和历史谱线表,初始化若干固定跃迁系数。
LeeHISTOGRMS subroutine 138 依次设置 4 个 hid26-*.dat 历史谱线表路径,并调用 rhist_03 读入缓存。
GETK_dlvr11 subroutine 185 按输入温度计算 k19/k20/k21/k33 及其反向碰撞速率,写入 nlte_commons_h

依赖的模块

use 模块 only 列表 用途 待确认
datafile_mod datadir 构造 datadir/NLTEDAT/... 表文件路径。
mod_phys_lmdz_para is_master MESOSCALE 路径下限制文件读取只在主进程执行。
mod_phys_lmdz_transfert_para bcast MESOSCALE 路径下广播主进程读入的表数组和标量。
nlte_paramdef_h nztabul, nb, nisot, indexisot, rf19, rf20, rf21a, rf21b, rf21c, rf33bc, ee, nu 提供表维度、同位素编码、碰撞率缩放因子和波数常数。
nlte_commons_h elow, deltanu, lnpnbtab, tstar*tab, vc*tab, hisfile, k* 保存本文件读入或计算出的共享 NLTE 表和碰撞速率。

调用的关键例程

被调用例程 所在模块 / 文件 调用位置 作用
bcast mod_phys_lmdz_transfert_para 81-82, 116-124 广播 elow/deltanu、Tstar 表、VC 表和临时标量 xx
LeeHISTOGRMS 本文件 131 读取 4 个历史谱线 histogram 表。
rhist_03 nlte_aux.F 156, 164, 169, 174 hisfile 指向的 hid26-*.dat 文件读取历史谱线缓存,并在非 MESOSCALE 路径下广播。

输入

输入 来源 类型 / 维度 单位 含义
datadir datafile_mod string - 运行时数据包根目录;本文件追加 /NLTEDAT/...
NLTEDAT/enelow26.dat, enelow28.dat, enelow36.dat, enelow27.dat 文件系统 每个同位素 nb 个数 谱线能级相关量 indexisot=[26,28,36,27] 顺序读取到 elow(k,:)
NLTEDAT/deltanu26.dat, deltanu28.dat, deltanu36.dat, deltanu27.dat 文件系统 每个同位素 nb 个数 cm-1 推断 按同位素读取到 deltanu(k,:)
NLTEDAT/parametp_Tstar_IAA1204.dat 文件系统 nztabul 混合 读入 lnpnbtabtstar11/21/31/41tab
NLTEDAT/parametp_VC_IAA1204.dat 文件系统 nztabul 混合 读入 vc210/310/410tab;第一列读入局部变量 xx 后丢弃。
NLTEDAT/hid26-1.dat ... hid26-4.dat 文件系统 历史谱线 histogram 表 谱线表量 LeeHISTOGRMS 逐个传给 rhist_03
tt GETK_dlvr11 调用方 scalar real K 计算碰撞速率的温度。

输出

输出 去向 类型 / 维度 单位 含义
elow, deltanu nlte_commons_h nisot x nb 谱线表量 同位素谱线能级和线宽/频宽表。
a1_010_000, a2_010_000, a3_010_000, a4_010_000, a1_020_010 nlte_commons_h scalars - 源码硬编码的跃迁系数。
lnpnbtab, tstar11tab, tstar21tab, tstar31tab, tstar41tab nlte_commons_h nztabul arrays 混合 Tstar / 压力 tabulation。
vc210tab, vc310tab, vc410tab nlte_commons_h nztabul arrays 混合 VC tabulation。
历史谱线缓存数组 nlte_aux.F::rhist_03 / nlte_commons_h nhist 相关数组 谱线表量 4 个 hid26-* 文件读入后的历史谱线缓存。
k19*, k20*, k21*, k23k21*, k24k21*, k34k21*, k33* nlte_commons_h scalars / nisot arrays 碰撞速率 温度相关的正向和反向碰撞速率族。

共享状态与副作用

核心逻辑

  1. nlte_setup 设置本地 unit lun1=1lun2=2
  2. 在非 MESOSCALE 路径下进入 if(is_master),按 indexisot(k) 生成两位同位素代码,逐个打开 enelow*.datdeltanu*.dat,跳过表头后读入 elow(k,1:nb)deltanu(k,1:nb)
  3. MESOSCALE 路径下广播 elowdeltanu
  4. 写入 5 个硬编码跃迁系数:a1_010_000=1.3546d0a2_010_000=1.3452d0a3_010_000=1.1878d0a4_010_000=1.2455d0a1_020_010=4.35d0
  5. 读取 parametp_Tstar_IAA1204.datnztabul 行到 lnpnbtab 和 4 个 tstar*tab;读取 parametp_VC_IAA1204.datnztabul 行到 vc*tab,首列读入 xx
  6. MESOSCALE 路径下广播 Tstar/VC 相关数组。
  7. 调用 LeeHISTOGRMS,后者依次把 hisfile 设为 hid26-1.dathid26-4.dat,并用 rhist_03(1..4) 读入历史谱线缓存。
  8. GETK_dlvr11(tt) 把温度转为双精度 tdt,计算 k20、k19、k21 和 k33 族的正向速率,再用 exp(-ee*anu/tdt)nu 波数差生成反向速率,逐项写入 nlte_commons_h

伪代码

nlte_setup:
  for k in 1..nisot:
    isotcode = two_digit(indexisot(k))
    read datadir/NLTEDAT/enelow{isotcode}.dat into elow(k,1:nb)
    read datadir/NLTEDAT/deltanu{isotcode}.dat into deltanu(k,1:nb)
  if not MESOSCALE:
    broadcast elow and deltanu

  set fixed transition coefficients a1/a2/a3/a4/a1_020_010

  read parametp_Tstar_IAA1204.dat into lnpnbtab and tstar tables
  read parametp_VC_IAA1204.dat into vc tables
  if not MESOSCALE:
    broadcast Tstar and VC tables

  LeeHISTOGRMS:
    for ihist in 1..4:
      hisfile = datadir/NLTEDAT/hid26-{ihist}.dat
      rhist_03(ihist)

GETK_dlvr11(tt):
  tdt = dble(tt)
  derive k20 and k19 families, including low-temperature clamps for k19xca/k19xcb
  for each isotope:
    write forward k19/k20 arrays
    compute reverse k19/k20 rates from exp(-ee * wavenumber / tdt)
  derive k21 family and pair ratios
  derive k33c and k33cp for isotopes 2..nisot

参与的主题流程

主题 参与方式
NLTE 15 微米 CO2 冷却 初始化 nlte_calcnlte_aux 和后续 nlte_tcool_mod.F 所需的谱线表、Tstar/VC 表、历史谱线缓存和碰撞速率。
辐射计算 physiq_mod.F 的 NLTE 分支调用 nlte_setup 后,高层冷却参数化才能使用这些表状态。
并行运行 MESOSCALE 路径使用主进程读表再广播的模式,避免每个进程重复文件 I/O。

写法特点

复现要点

待确认

相关页面