blendrad.F

路径

LMDZ.MARS\libf\phymars\blendrad.F

所属目录/模块

libf/phymars — Mars 物理参数化模块

文件定位

blendrad.F 将辐射传输的四路倾向(短波 LTE zdtsw、长波 LTE zdtlw、近红外 CO₂ zdtnirco2、非局域热平衡 NLTE zdtnlte)合并为单一净大气加热率 dtrad。核心工作是用一条以压力为自变量的平滑 sigmoid 函数(alpha)在 LTE 与 NLTE 贡献之间做连续过渡,避免在切换高度产生数值不连续。该文件仅在 callnlte=.true. 时被调用;当 NLTE 未启用时,调用方 physiq_mod 直接将四路相加。

定义的符号

符号 类型 行号 作用
blendrad_mod module 1 包装模块,仅含 blendrad 子程序
blendrad subroutine 7 合并 LTE/NLTE 辐射倾向的唯一入口

依赖的模块

use 模块 only 列表 用途 待确认
yomlw_h nlaylte LTE 计算层数上限(由 nlthermeq 计算并存储)
nlteparams_h ptrans, zwi 过渡中心压力 0.1 Pa;zwi = 2/zw = 4.0(zw=0.5 标高半宽)

调用的关键例程

无。blendrad 是纯数值计算,不调用其他子程序。

输入

输入 来源 类型/维度 单位 含义
ngrid physiq_mod 调用参数 integer 水平网格点数
nlayer physiq_mod 调用参数 integer 垂直层数
pplay physiq_mod 局部变量 zplay real(ngrid, nlayer) Pa 各层气压
zdtsw callradite 输出 real(ngrid, nlayer) K/s 短波 LTE 加热率(仅前 nlaylte 层有效)
zdtlw callradite 输出 real(ngrid, nlayer) K/s 长波 LTE 加热率(仅前 nlaylte 层有效)
zdtnirco2 callradite 输出 real(ngrid, nlayer) K/s 近红外 CO₂ 吸收加热率(全层有效)
zdtnlte callradite 输出 real(ngrid, nlayer) K/s NLTE 加热率(全层有效,低层可能为零)

输出

输出 去向 类型/维度 单位 含义
dtrad physiq_mod 后续用于温度倾向积分 real(ngrid, nlayer) K/s 合并后的净大气辐射加热率

共享状态与副作用

无直接副作用。blendrad 是纯函数式子程序:输入 → 输出,不修改任何 module 变量、不写文件、不产生诊断输出。

间接依赖的共享状态:

核心逻辑

  1. 第一层循环(行 45–53):遍历 l = 1nlaylte(LTE 有效层)。对每个网格点:

    • 计算过渡权重 alpha = 1 / (1 + (pplay/ptrans)^zwi)。这是以 z = -ln(p) 为自变量的 sigmoid 0.5*(1+tanh((z-ztrans)/zw)) 的等价简化形式。
    • 合并倾向:dtrad = (1-alpha)*(zdtsw+zdtlw) + zdtnirco2 + alpha*zdtnlte
    • 低压(高海拔)处 alpha→1,LTE 贡献被抑制,NLTE 主导;高压(低海拔)处 alpha→0,LTE 主导。
  2. 第二层循环(行 56–60):遍历 l = nlaylte+1nlayer(LTE 计算范围之外)。直接 dtrad = zdtnirco2 + zdtnlte,无 LTE 贡献。

伪代码

for each layer l = 1 to nlaylte:          # LTE 有效范围
    for each grid point ig:
        alpha = 1 / (1 + (pplay[ig,l] / 0.1)^4.0)   # sigmoid 过渡
        dtrad[ig,l] = (1 - alpha) * (zdtsw[ig,l] + zdtlw[ig,l])   # LTE 部分被 alpha 调制
                     + zdtnirco2[ig,l]                              # CO2 近红外(始终保留)
                     + alpha * zdtnlte[ig,l]                        # NLTE 部分由 alpha 加权

for each layer l = nlaylte+1 to nlayer:   # LTE 范围之外
    for each grid point ig:
        dtrad[ig,l] = zdtnirco2[ig,l] + zdtnlte[ig,l]   # 纯 NLTE

参与的主题流程

主题 参与方式
radiation 辐射倾向合并的最后一环;在 callradite 计算完四路倾向后由 physiq_mod 调用

写法特点

复现要点

待确认

相关页面