lwtt.F
路径
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];调用方部分保留了注释掉的范围检查,是否需要恢复保护属于源码维护问题。
相关页面