aerave.F

路径

LMDZ.MARS\libf\phymars\aerave.F

所属目录/模块

libf/phymars

文件定位

气溶胶辐射性质带平均化工具。将气溶胶的光学性质(消光系数、单次散射反照率、不对称因子)从高分辨率光谱数据通过普朗克函数加权平均到 GCM 的辐射带。用于辐射传输计算前的气溶胶光学性质预处理。

定义的符号

符号 类型 行号 作用
aerave_mod module 1 气溶胶带平均模块
aerave subroutine 7 主例程:计算带平均光学性质
blackl subroutine 203 普朗克黑体辐射函数

依赖的模块

use 模块 only 列表 用途 待确认
(无) 自包含模块,无外部依赖

调用的关键例程

被调用例程 所在模块/文件 调用位置 作用
blackl 本文件(aerave_mod) 行 134 计算普朗克黑体辐射强度(W/m²/sr/m)

输入

输入 来源 类型/维度 单位 含义
ndata 调用方 integer 光谱数据点数量
longdata(ndata) 调用方 real array 光谱数据波长
epdata(ndata) 调用方 real array 消光系数(归一化或绝对值)
omegdata(ndata) 调用方 real array 单次散射反照率
gdata(ndata) 调用方 real array 不对称因子
longref 调用方 real 参考波长(光学厚度已知处)
epref 调用方 real 参考波长处的光学厚度
temp 调用方 real K 温度(用于普朗克加权)
nir 调用方 integer 辐射带数量
longir(nir+1) 调用方 real array 辐射带边界波长

输出

输出 去向 类型/维度 单位 含义
epir(nir) 调用方 real array 各辐射带平均光学厚度
omegir(nir) 调用方 real array 各带平均单次散射反照率
gir(nir) 调用方 real array 各带平均不对称因子
qref 调用方 real 参考波长处的消光系数
omegaref 调用方 real 参考波长处的单次散射反照率

共享状态与副作用

核心逻辑

  1. 参考波长插值(行 87-113):在 longdata 中定位 longref,线性插值得到 qrefomegaref。计算校正因子 factep = qref/epref,将 epdata 转换为 qextcorrdata = epdata/factep(使参考波长处的值与输入 epref 一致)。

  2. 带循环(行 117-181):对每个辐射带 iir

    • 将带宽细分为 nbande=1000 个子带(行 121)
    • 对每个子带 ibande(行 129-171):
      • 计算子带中心波长 long
      • 调用 blackl 计算普朗克辐射强度 emit
      • longdata 中线性插值得到 qextcorromegg
      • 累加:totalemit += deltalong*emitepir += deltalong*emit*qextcorromegir += deltalong*emit*omeg*qextcorrgir += deltalong*emit*omeg*qextcorr*g
  3. 带平均计算(行 175-177):

    • gir(iir) = gir(iir) / omegir(iir)(不对称因子加权平均)
    • omegir(iir) = omegir(iir) / epir(iir)(单次散射反照率加权平均)
    • epir(iir) = epir(iir) / totalemit(iir)(光学厚度加权平均)
  4. blackl 子程序(行 203-223):普朗克函数实现:

    B(λ,T) = 2πc₁/λ⁵ / (exp(c₂/λT) - 1)

    其中 c₁ = hc²c₂ = hc/k,折射率 rind=1(真空)。

伪代码

! 参考波长插值
在 longdata 中定位 longref
线性插值计算 qref, omegaref
factep = qref / epref
qextcorrdata = epdata / factep

! 对每个辐射带
DO iir = 1, nir
  deltalong = (longir(iir+1) - longir(iir)) / nbande
  初始化 totalemit, epir, omegir, gir 为 0

  ! 对每个子带
  DO ibande = 1, nbande
    long = longir(iir) + (ibande - 0.5) * deltalong
    emit = blackl(long, temp)  ! 普朗克函数

    ! 插值气溶胶性质
    在 longdata 中定位 long
    线性插值计算 qextcorr, omeg, g

    ! 累加(普朗克加权)
    totalemit += deltalong * emit
    epir += deltalong * emit * qextcorr
    omegir += deltalong * emit * omeg * qextcorr
    gir += deltalong * emit * omeg * qextcorr * g
  END DO

  ! 计算带平均
  gir = gir / omegir
  omegir = omegir / epir
  epir = epir / totalemit
END DO

参与的主题流程

主题 参与方式
辐射计算 气溶胶光学性质预处理,为辐射传输提供带平均参数

已确认调用链

调用方 位置 作用
suaer.F90 行 25:use aerave_mod, only: aerave 读入并准备 aerosol 光学数据后调用带平均例程
suaer.F90 行 422:CALL aerave(...) 对太阳短波波段计算 epiromegirgir
suaer.F90 行 480:CALL aerave(...) 对红外长波波段计算 epiromegirgir

写法特点

复现要点

待确认

相关页面