nlte_commons_h.F90

路径

LMDZ.MARS\libf\phymars\nlte_commons_h.F90

所属目录 / 模块

libf/phymars

文件定位

nlte_commons_h.F90 定义真实 Fortran module nlte_commons_h,把旧 1-D NLTE 15 微米 CO2 参数化中的多个 common block 合并成一组 save module 变量。它本身不包含 contains、subroutine 或 function;作用是为 nlte_setup.Fnlte_auxnlte_calcnlte_tcool_mod.F 共享谱线常数、查表数据、主网格/CTS 网格大气剖面、Curtis matrices、escape probability、振动温度、碰撞率和历史谱线缓存。

源文件几乎所有变量都声明为 save 并配套 !$OMP THREADPRIVATE(...)。因此它不是普通只读参数头文件,而是 NLTE 计算链的每线程共享状态仓库:上游初始化例程写入表和剖面,辅助/矩阵例程读写工作数组,下游 cooling-time 例程再读取结果矩阵和加热率。

定义的符号

符号 类型 行号 作用
nlte_commons_h module 1 NLTE 15 微米 CO2 参数化共享状态模块。
elow, deltanu module variable 17 按同位素和谱带保存低能级能量与波数宽度。
nu11, nu12, nu121, nu21, nu31, nu41 module variable 22-25 110/121/210/310/410 等跃迁或谱带频率。
a1_010_000, a1_020_010, a2_010_000, a3_010_000, a4_010_000 module variable 33-36 Einstein A 系数。
lnpnbtab, vc210tab, vc310tab, vc410tab, tstar11tab, tstar21tab, tstar31tab, tstar41tab module variable 46-49 NLTE 预计算表,供 escape probability / CTS 路径插值。
input_cza module variable 57 标记 CZA/NLTE 输入是否可用,供 cooling-time 路径分支判断。
v626t1, v628t1, v636t1, v627t1 module variable 65-68 四组同位素振动温度剖面。
vt11, vt12, vt21, vt31, vt41 module variable 73 15 微米各带振动温度输出。
hr110, hr121, hr210, hr310, hr410 module variable 77-78 各带冷却/加热率剖面。
el11, el12, el21, el31, el41 module variable 82-85 15 微米带相关能级或源项数组。
sl110, sl121, sl210, sl310, sl410 module variable 89-92 15 微米谱线强度或源项数组。
c110, c121, c210, c310, c410 module variable 102-105 Curtis matrix 系数,供 nlte_tcool_mod.F 求解能级与冷却率。
vc110, vc121, vc210, vc310, vc410 module variable 106-107 Curtis matrix 边界向量。
taustar11, taustar21, taustar31, taustar41, taustar12, taustar11_cts module variable 115-117 cool-to-space formulation 的 escape probability 光学厚度数组。
zl, t, pl, nt, co2, n2, co, o3p, co2vmr, n2vmr, covmr, o3pvmr, hrkday_factor module variable 128-131 主 NLTE/GCM 垂直网格大气状态。
zy, ty, py, nty, co2y module variable 138 高分辨率透过率/插值网格大气状态。
deltaz, deltazy, deltaz_cts, deltazy_cts, jlowerboundary, jtopboundary, jtopCTS module variable 144-145 主网格、插值网格和 CTS 网格的步长与边界索引。
zl_cts, t_cts, pl_cts, nt_cts, co2_cts, n2_cts, co_cts, o3p_cts, co2vmr_cts, n2vmr_cts, covmr_cts, o3pvmr_cts, hrkday_factor_cts, mmean_cts, cpnew_cts module variable 154-160 CTS 网格大气状态、平均分子量和热容。
zy_cts, ty_cts, py_cts, nty_cts, co2y_cts module variable 167-168 CTS 高分辨率透过率/插值网格状态。
k19*, k20*, k21*, k33*, k23k21*, k24k21*, k34k21* module variable 177-193 振动-平动、振动-振动和末级组合碰撞率系数。
ibcode1, ka, alsa, alda, kr, hisfile, pp, ta, w, sk1, xls1, xld1, thist, no, nbox, eqw, aa, cc, dd, ddbox, ccbox, mr, mr_cts module variable 200-228 NLTE 历史谱线表、等效线宽和矩阵积分工作状态。
sk1_stored, xls1_stored, xld1_stored, thist_stored, no_stored, nbox_stored, mm_stored module variable 234-239 按谱带缓存的历史谱线表,供 rhist_03 读入和 gethist_03 恢复。

依赖的模块

use 模块 only 列表 用途 待确认
nlte_paramdef_h nb, nisot, nztabul, nl, nl_cts, nzy, nzy_cts 定义谱带、同位素、表长和垂直网格维度。
nlte_paramdef_h nbox_max, nhist 定义历史谱线表缓存和 box 工作数组上限。

调用的关键例程

被调用例程 所在模块 / 文件 调用位置 作用
- - 本文件只声明共享 module 变量,不含可执行例程。

输入

输入 来源 类型/维度 单位 含义
nl, nl_cts, nzy, nzy_cts nlte_paramdef_h integer parameter - 决定主网格、CTS 网格和高分辨率透过率网格数组大小。
nb, nisot, nztabul, nhist, nbox_max nlte_paramdef_h integer parameter - 决定谱带、同位素、查表和历史谱线缓存维度。
谱线、表、碰撞率和大气剖面数值 nlte_setup.Fnlte_tcool_mod.Fnlte_aux.Fnlte_calc.F module variables 混合 本模块只分配共享存储;实际数值由上下游例程写入。

输出

输出 去向 类型/维度 单位 含义
elow/deltanu、频率和 Einstein 系数 nlte_calc.Fnlte_tcool_mod.F arrays / scalars 谱线量 谱线积分、能级方程和冷却矩阵的基本常数。
zl/t/pl/nt/...zy/ty/py/...、CTS 剖面 nlte_aux.Fnlte_calc.Fnlte_tcool_mod.F arrays 高度、压力、温度、数密度等 主网格与 CTS 网格上的大气状态。
c*vc*taustar* nlte_tcool_mod.F matrices / vectors 矩阵系数或无量纲光学厚度 nlte_calc.F 写入后,cooling-time 求解读取。
hr*vt*el*sl* nlte_tcool_mod.F 和调用链下游 arrays 冷却率、温度或源项 NLTE 各带计算结果缓存。
*_stored 和当前 thist/no/sk1/xls1/xld1 nlte_aux.Fnlte_calc.F arrays 谱线表量 历史谱线表读入、缓存和按谱带恢复的工作状态。

共享状态与副作用

核心逻辑

  1. 编译期从 nlte_paramdef_h 取得所有数组维度,nlte_commons_h 据此声明旧 common block 对应的 module 变量。
  2. nlte_setup.F 在初始化阶段读取或计算谱线常数、查表数据、历史表文件名和碰撞率,并写入本模块。
  3. nlte_tcool_mod.F 把 GCM 输入剖面转换为 NLTE 主网格、CTS 网格和高分辨率插值网格状态,写入本模块的 zl/t/pl/...zy/ty/...zl_cts/t_cts/...
  4. nlte_aux.F 读取历史谱线表到 *_stored,再按当前谱带恢复为 thist/no/sk1/xls1/xld1 工作数组,并提供插值/等效线宽工具。
  5. nlte_calc.F 用共享剖面、谱线表和工作数组构造 Curtis matrices、边界向量和 escape probability,并写回 c*vc*taustar*
  6. nlte_tcool_mod.F 读取这些矩阵和速率系数,计算 NLTE 振动温度、各带冷却率和最终冷却贡献。

伪代码

compile-time:
  import NLTE dimensions from nlte_paramdef_h
  allocate saved, threadprivate module variables

setup phase:
  nlte_setup writes spectral constants, tabulation arrays and rates
  nlte_setup sets hisfile for each history table
  nlte_aux.rhist_03 reads history tables into *_stored caches

profile preparation:
  nlte_tcool_mod writes main and CTS atmospheric profiles
  nlte_tcool_mod sets grid spacing and boundary indices

matrix construction:
  nlte_aux.gethist_03 copies one stored table into current work arrays
  nlte_calc reads profiles and line tables
  nlte_calc writes Curtis matrices, boundary vectors and taustar arrays

cooling solve:
  nlte_tcool_mod reads rates, matrices, taustar and profiles
  nlte_tcool_mod updates vt*, hr*, el* and sl* result arrays

参与的主题流程

主题 参与方式
NLTE 15 微米 CO2 冷却 保存从初始化、查表、矩阵构造到 cooling-time 求解之间传递的全部共享状态。
辐射计算 c*vc*taustar*hr* 等数组进入 CO2 15 微米非 LTE 冷却贡献计算。
并行/OpenMP 运行 THREADPRIVATE 使 NLTE 状态按线程隔离,初始化和计算必须在每线程语义下保持一致。

写法特点

复现要点

待确认

相关页面