lwtt.F
快速理解
它做什么: CO₂ 15 微米带透过率最底层计算例程。被 lwxd/lwxn/lwxb 调用。
基本过程: 把吸收量 u 与压力缩放吸收量 up 合成 Voigt/Doppler 等效吸收量 → 用 yomlw_h Padé 系数 Horner 求值得透过率 tr。
关键结果: 每条路径的 CO₂ 透过率 tr,与气溶胶透过率相乘后进入交换率 xi。
路径
LMDZ.MARS\libf\phymars\lwtt.F
所属目录 / 模块
libf\phymars
文件定位
lwtt.F 定义 lwtt_mod 模块,提供长波 LTE 辐射中 CO2 15 微米带透过率的底层计算例程 lwtt。它不直接访问层温、压力或气溶胶光学厚度;这些上游准备工作由 lwu.F 生成累计 CO2 吸收量 co2_u/co2_up 和气溶胶透过率 aer_t,再由 lwxd.F、lwxn.F、lwxb.F 按远距离层、相邻层和边界交换几何构造 u/up 增量后调用 lwtt。
本例程的职责很窄:对每个 CO2 谱带和水平列,把吸收量 u 与压力缩放吸收量 up 合成为 Voigt/Doppler 近似下的等效吸收量 ueq,再用 yomlw_h 中的 Padé 系数 ga/gb 通过 Horner 算法求有理函数 tr=xn/xd。输出 tr 随后与调用方已经准备好的气溶胶透过率相乘,进入净交换率 xi 的差分组合。
定义的符号
| 符号 | 类型 | 行号 | 作用 |
|---|---|---|---|
lwtt_mod |
module | 1 | 封装长波 CO2 带透过率计算例程。 |
lwtt |
subroutine | 7 | 用 CO2 吸收量和压力缩放吸收量计算每个谱带的长波透过率 tr。 |
依赖的模块
| use 模块 | only 列表 | 用途 | 待确认 |
|---|---|---|---|
dimradmars_mod |
ndlon, ndlo2 |
提供调用参数和局部工作数组的水平维度上限。 | 否 |
yomlw_h |
ga, gb, cst_voigt |
提供 Padé 分子/分母系数和 Voigt 等效吸收量修正系数。 | 否 |
调用的关键例程
| 被调用例程 | 所在模块 / 文件 | 调用位置 | 作用 |
|---|---|---|---|
| 无 | - | - | lwtt 只做本地数组计算,不调用其他用户例程。 |
输入
| 输入 | 来源 | 类型/维度 | 单位 | 含义 |
|---|---|---|---|---|
kdlon |
lwxd/lwxn/lwxb |
integer |
column | 当前向量化处理的水平列数,循环范围为 1:kdlon。 |
u |
调用方由 co2_u 差分或子层累加构造 |
real(ndlo2,nu) |
吸收量 | CO2 路径吸收量。lwtt 本身不换算单位,只按数值进入幂函数。 |
up |
调用方由 co2_up 差分或子层累加构造 |
real(ndlo2,nu) |
压力缩放吸收量 | 压力效应修正后的 CO2 吸收量;源码用 sqrt(up)。 |
nu |
调用方传入,当前调用均为 nuco2 |
integer |
band count | 需要计算的 CO2 谱带数。 |
输出
| 输出 | 去向 | 类型/维度 | 单位 | 含义 |
|---|---|---|---|---|
tr |
lwxd/lwxn/lwxb 的 zt_co2 |
real(ndlo2,nu) |
- | CO2 15 微米带透过率,调用方会再乘以气溶胶透过率并组合为 xi。 |
共享状态与副作用
lwtt.F 不定义保存型模块变量,不读写文件,不打印诊断,也不修改 yomlw_h 的共享表。它只读取 ga、gb、cst_voigt 和维度常量,副作用限于写入调用方传入的 tr 数组。
核心逻辑
- 按谱带
ja=1:nu和水平列jl=1:kdlon双循环处理所有输入路径。 - 计算等效吸收量:
ueq = sqrt(up) + cst_voigt(1,ja) * u ** cst_voigt(2,ja)。 - 用 Horner 形式计算 Padé 分子:
xn = ga(1) + ueq * (ga(2) + ueq * ga(3))。 - 用 Horner 形式计算 Padé 分母:
xd = gb(1) + ueq * (gb(2) + ueq * (gb(3) + ueq))。 - 输出透过率
tr = xn / xd。
伪代码
for each CO2 band ja:
for each active column jl:
ueq = sqrt(up(jl,ja)) + cst_voigt(1,ja) * u(jl,ja) ** cst_voigt(2,ja)
numerator = ga(1,ja) + ueq * (ga(2,ja) + ueq * ga(3,ja))
denominator = gb(1,ja) + ueq * (gb(2,ja) + ueq * (gb(3,ja) + ueq))
tr(jl,ja) = numerator / denominator
参与的主题流程
| 主题 | 参与方式 |
|---|---|
| 辐射计算 | 为长波 LTE CO2 带内净交换率提供基础透过率;被 lwxd、lwxn、lwxb 反复调用。 |
| phymars 核心物理模块目录 | 属于 libf\phymars 的长波辐射辅助文件。 |
写法特点
- 固定格式 Fortran 文件,模块内只有一个子例程。
lwtt名义上按nu泛化到多个吸收带,但共享系数来自ga/gb/cst_voigt(:,ja);当前源码调用点均传入nuco2。- Padé 分母的最高次项系数在源码中写成
+ ueq,等价于四次系数为 1;ga的第四项虽在yomlw_h初始化,但本例程分子只使用ga(1:3,ja)。 u和up由调用方按几何路径差分或子层累加构造;本例程不检查物理范围。
复现要点
yomlw_h::ini_yomlw_h必须先初始化ga、gb、cst_voigt;否则透过率系数未定义。up(jl,ja)必须非负;源码直接调用sqrt(up),负值会产生无效数。u(jl,ja)若为负,且cst_voigt(2,ja)不是整数,会使幂运算不可复现或产生无效数。xd不能为零;源码没有分母保护。nu不能超过ga/gb/cst_voigt的第二维可用范围;当前长波 CO2 调用链以nuco2为准。
待确认
ga/gb/cst_voigt系数的物理拟合来源写在旧sulw.F注释中,本页只核验当前yomlw_h.F90的初始化数值和lwtt.F的使用方式。lwtt输出没有显式钳制到[0,1];调用方部分保留了注释掉的范围检查,是否需要恢复保护属于源码维护问题。
相关页面
- radiation
- phymars/index
- lwi
- lwflux
- lwdiff
- lwmain_mod - 长波 LTE 主调度入口;通过
lwxd/lwxn/lwxb间接进入本例程。 - lwu
- lwxb
- lwxd
- lwxn
- yomlw_h.md:长波辐射共享参数。