aerave.F

快速理解

它做什么: 把气溶胶高分辨率光谱光学性质按普朗克函数加权平均到 GCM 辐射带。被 suaer 调用。

基本过程: 光谱切成 nir 个带 → 黑体辐射函数加权积分原始数据 → 输出各带平均光学性质。

关键结果: 各带平均的 epir/omegir/gir,供辐射传输预处理使用(longir 是输入而非输出)。

路径

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,线性插值得到 qref 和 omegaref。计算校正因子 factep = qref/epref,将 epdata 转换为 qextcorrdata = epdata/factep(使参考波长处的值与输入 epref 一致)。

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

    • 将带宽细分为 nbande=1000 个子带(行 121)
    • 对每个子带 ibande(行 129-171):
      • 计算子带中心波长 long
      • 调用 blackl 计算普朗克辐射强度 emit
      • 在 longdata 中线性插值得到 qextcorr、omeg、g
      • 累加:totalemit += deltalong*emit,epir += deltalong*emit*qextcorr,omegir += deltalong*emit*omeg*qextcorr,gir += 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(...) 对太阳短波波段计算 epir、omegir、gir
suaer.F90 行 480:CALL aerave(...) 对红外长波波段计算 epir、omegir、gir

写法特点

复现要点

待确认

相关页面