lwu.F

路径

LMDZ.MARS\libf\phymars\lwu.F

所属目录 / 模块

libf\phymars

文件定位

lwu.F 定义 lwu_mod 模块,提供长波 LTE 辐射主流程中的吸收量预处理例程 lwu。它在 lwmain 调用 lwxblwxdlwxnlwdifflwflux 之前,把层压厚、层温、层界面压力和多类气溶胶光学性质整理成三组下游量:

这些输出随后被 lwxblwxdlwxn 分解成不同层对和边界交换路径,再交给 lwtt 计算 CO2 透过率;tautotal/omegtotal/gtotal 还会进入 lwdiff 的带外散射通量计算。

定义的符号

符号 类型 行号 作用
lwu_mod module 1 封装长波吸收量和气溶胶光学预处理例程。
lwu subroutine 7 计算 CO2 累积吸收量、压力缩放吸收量、气溶胶吸收透过率和 IR 带总单散射参数。

依赖的模块

use 模块 only 列表 用途 待确认
dimradmars_mod ndlo2, nir, nuco2, ndlon, nflev 提供长波辐射数组的水平、垂直和谱带维度上限。
dimradmars_mod naerkind 提供气溶胶光学性质类别数。
yomlw_h nlaylte, tref, at, bt, cst_voigt 提供 LTE 长波层数、参考温度和 CO2 温度/Voigt 修正系数。
comcstfi_h g 把压力厚度换算为质量路径时使用重力加速度。

调用的关键例程

被调用例程 所在模块 / 文件 调用位置 作用
- - lwu 只做本地数组循环和指数/除法计算,不调用其他用户例程。

输入

输入 来源 类型/维度 单位 含义
kdlon lwmain integer column 当前向量块内有效水平列数。
kflev lwmain integer layer 调用接口传入的垂直层数;实际循环使用 yomlw_h::nlaylte
dp lwmain real(ndlo2,kflev) Pa 层压厚,用于 CO2 吸收量质量路径换算。
plev lwmain real(ndlo2,kflev+1) Pa 层界面压力,用其平方差构造压力缩放吸收量。
tlay lwmain real(ndlo2,kflev) K 层温,用于相对 tref 的温度修正。
aerosol lwmain real(ndlo2,kflev,naerkind) optical depth 每类气溶胶在参考波长的层光学厚度。
QIRsQREF3d lwmain real(ndlo2,kflev,nir,naerkind) - IR 谱带消光系数相对参考波长的比例。
omegaIR3d lwmain real(ndlo2,kflev,nir,naerkind) - 每类气溶胶、每个 IR 谱带的单次散射反照率。
gIR3d lwmain real(ndlo2,kflev,nir,naerkind) - 每类气溶胶、每个 IR 谱带的非对称因子。

输出

输出 去向 类型/维度 单位 含义
aer_t lwxb/lwxd/lwxn real(ndlo2,nuco2,kflev+1) - CO2 谱带用的累积气溶胶吸收透过率,底部向上累积并以 1e-30 为下限。
co2_u lwxb/lwxd/lwxn real(ndlo2,nuco2,kflev+1) g cm-2 风格的吸收路径 经温度修正、pview 斜路径和 CO2 体积分数修正后的累积 CO2 吸收量。
co2_up lwxb/lwxd/lwxn real(ndlo2,nuco2,kflev+1) 压力缩放吸收路径 使用界面压力平方差和 pref 缩放后的累积 CO2 吸收量。
tautotal lwdiff/lwflux real(ndlo2,kflev,nir) optical depth 多类气溶胶按 QIRsQREF3d * aerosol 加权合并后的总 IR 光学厚度。
omegtotal lwdiff/lwflux real(ndlo2,kflev,nir) - 多类气溶胶消光加权平均后的单次散射反照率。
gtotal lwdiff/lwflux real(ndlo2,kflev,nir) - 多类气溶胶按散射光学厚度加权平均后的非对称因子。

共享状态与副作用

lwu.F 不定义保存型模块变量,不读写文件,也不打印诊断。它读取 dimradmars_modyomlw_hcomcstfi_h 中的共享常量/系数,副作用限于写入调用方提供的输出数组。

核心逻辑

  1. 设置硬编码常数:pview=1.66co2c=0.95pref=101325.,并把每个层界面压力预先平方到 plev2
  2. 对每类气溶胶 n、每个 IR 谱带 ja、每层 jk、每列 jl 累加 tautotalomegtotalgtotal
  3. gtotal 除以散射光学厚度加权和 omegtotal,再把 omegtotal 除以总光学厚度 tautotal,得到有效非对称因子和单次散射反照率。
  4. 从模型顶层向下累积气溶胶吸收量 aer_a,每层贡献为 tautotal * (1 - omegtotal)
  5. 初始化顶界 co2_u/co2_up=0aer_t=1
  6. 从模型顶层向下遍历 CO2 谱带。温度偏差 tx 被限制在 [-70,70] K,用 at/bt/cst_voigt 生成 phipsi 温度修正。
  7. 更新 co2_u += pview/(10*g) * phi * dp * co2c,以及 co2_up += pview/(10*g*2*pref) * psi * (plev2(jkl)-plev2(jkl+1)) * co2c
  8. 输出 CO2 带气溶胶透过率 aer_t=max(exp(-pview*aer_a),1e-30),避免很厚水冰云让透过率舍入到严格零并触发后续 NaN。

伪代码

pview = 1.66
co2c = 0.95
pref = 101325

for level boundary jk:
  plev2(:,jk) = plev(:,jk)^2

tautotal = 0
omegtotal = 0
gtotal = 0

for aerosol kind n:
  for IR band ja:
    for layer jk:
      for column jl:
        tau_n = QIRsQREF3d(jl,jk,ja,n) * aerosol(jl,jk,n)
        tautotal += tau_n
        omegtotal += tau_n * omegaIR3d(jl,jk,ja,n)
        gtotal += tau_n * omegaIR3d(jl,jk,ja,n) * gIR3d(jl,jk,ja,n)

gtotal = gtotal / omegtotal
omegtotal = omegtotal / tautotal

aer_a(top boundary) = 0
for layers from top to bottom:
  aer_a(layer bottom) = aer_a(layer top) + tautotal * (1 - omegtotal)

co2_u(top boundary) = 0
co2_up(top boundary) = 0
aer_t(top boundary) = 1

for layers from top to bottom:
  tx = clamp(tlay - tref, -70, 70)
  phi = exp((at(1)*tx + bt(1)*tx^2) / cst_voigt(2))
  psi = exp(2 * (at(2)*tx + bt(2)*tx^2))

  co2_u += pview/(10*g) * phi * dp * co2c
  co2_up += pview/(10*g*2*pref) * psi * pressure_square_difference * co2c
  aer_t = max(exp(-pview*aer_a), 1e-30)

参与的主题流程

主题 参与方式
辐射计算 在长波 LTE 主流程中准备 CO2 吸收路径和气溶胶光学输入,支撑后续 CO2 净交换率、带外散射通量和冷却率计算。
phymars 核心物理模块目录 属于 libf\phymars 长波辐射辅助文件组。

写法特点

复现要点

待确认

相关页面