aeroptproperties.F

路径

LMDZ.MARS\libf\phymars\aeroptproperties.F

所属目录/模块

libf\phymars

文件定位

该文件定义气溶胶光学属性计算模块 aeroptproperties_mod,导出唯一例程 aeroptproperties,由辐射调用入口 callradite(行 424)在 aeropacity 之前调用。它的职责是:在每个网格箱内,根据气溶胶颗粒的有效半径 reffrad 和有效方差 nueffrad,对预先按离散半径表(radiustab)给出的单粒子散射参数做对数正态尺寸分布的积分(Gauss-Legendre 求积),从而得到该网格箱实际尺寸分布下的有效散射参数——消光效率比 Q/Qref、单次散射反照率 omega、不对称因子 g,分可见光(nsun=2 带)与红外(nir=4 带)以及参考波长输出。

为避免每个网格箱都重做昂贵的卷积积分,模块在 firstcall 建立一张 (reff, nueff) 对数插值网格(refftabsize=100 × nuefftabsize=100),把每个网格节点的卷积结果缓存在 *grid 数组里(checkgrid 标记是否算过),随后对每个真实网格箱只做线性(常方差)或双线性(变方差)插值。

定义的符号

符号 类型 行号 作用
aeroptproperties_mod module 1 气溶胶光学属性计算模块
aeroptproperties subroutine 7 reffrad/nueffrad 对单粒子光学参数做尺寸分布积分与插值,输出 3D 散射参数

依赖的模块

use 模块 only 列表 用途 待确认
dimradmars_mod nir, nsun, naerkind, radiustab, nsize, QVISsQREF, omegavis, gvis, QIRsQREF, omegaIR, gIR, QREFvis, QREFir, omegaREFvis, omegaREFir 维度常数(nir=4nsun=2naerkind)、离散半径表、各气溶胶在离散半径处的单粒子可见光/红外/参考波长光学参数表
write_output_mod write_output 仅在 out_qwg=.true. 测试分支输出诊断场(非 MESOSCALE)

调用的关键例程

被调用例程 所在模块/文件 调用位置 作用
abort_physic (phymars 公共中止例程) 行 591、984 normd 归一化因子仍为 1e-30 时(除零风险)致命中止
write_output write_output_mod 行 1312–1348(#ifndef MESOSCALE 测试分支输出 qext/omeg/g 诊断场
minloc(intrinsic) Fortran 行 388、449 radiustab 中定位最接近 Gauss 节点半径的离散索引

输入

输入 来源 类型/维度 单位 含义
ngrid, nlayer callradite integer scalar - 水平格点数、垂直层数
reffrad(ngrid,nlayer,naerkind) callradite real (IN) m 各气溶胶有效半径
nueffrad(ngrid,nlayer,naerkind) callradite real (IN) 无量纲 各气溶胶有效方差
radiustab, nsize, QVISsQREF, ... dimradmars_mod real/integer (SAVE) 混合 离散半径表与对应单粒子光学参数表(由 suaer 等填充)

输出

输出 去向 类型/维度 单位 含义
QVISsQREF3d(ngrid,nlayer,nsun,naerkind) callradite→短波辐射 real (OUT) - 可见光各带 Qext/Qext(ref)
omegaVIS3d(ngrid,nlayer,nsun,naerkind) callradite real (OUT) - 可见光各带单次散射反照率
gVIS3d(ngrid,nlayer,nsun,naerkind) callradite real (OUT) - 可见光各带不对称因子
QIRsQREF3d(ngrid,nlayer,nir,naerkind) callradite→长波辐射 real (OUT) - 红外各带 Qext/Qext(ref)
omegaIR3d(ngrid,nlayer,nir,naerkind) callradite real (OUT) - 红外各带单次散射反照率
gIR3d(ngrid,nlayer,nir,naerkind) callradite real (OUT) - 红外各带不对称因子
QREFvis3d/QREFir3d(ngrid,nlayer,naerkind) callraditeaeropacity real (OUT) - 参考波长可见光/红外消光效率(供光学厚度公式)
omegaREFvis3d/omegaREFir3d(ngrid,nlayer,naerkind) callraditeaeropacity real (OUT) - 参考波长可见光/红外单次散射反照率

共享状态与副作用

核心逻辑

  1. firstcall(行 233–345)allocate 全部 SAVE 数组;checkgrid=.false.varyingnueff=.false.pi=2*asin(1);对每个气溶胶 iaer、每个通道域 idomain(1=可见,2=红外)建立对数半径插值轴 refftab(从 refftabmin=radiusm-radiusr*radgaus(ngau)refftabmax=最大离散半径,按体积比 logvratgrid 等比展开)和指数方差轴 nuefftabexpnuefftabmin=-4.6nuefftabmax=0)。
  2. 逐气溶胶主循环(行 347–1293)
    • 单粒径捷径(行 349–370):若 nsize(iaer,1)=nsize(iaer,2)=1,光学属性均匀,直接把离散表第 1 个半径的值铺到所有 ig,lg
    • 否则进入双通道域循环(行 372)
      • 1.1–1.2 Gauss 节点插值(行 375–504):取半径中点 radiusm、半幅 radiusr;对 10 个 Gauss 节点分别在 radiusm±drad 处用 minloc 定位离散半径区间、线性内插(kint)得到 a 组(radiusm-drad)和 b 组(radiusm+drad)的单粒子参数 qsqref/omeg/g/qref(可见或红外)。
      • 常方差分支(.NOT.varyingnueff,行 507–871):对每层每格点算 reff 网格索引 grid_i 与权重 kx;对 j=grid_i,grid_i+1 两节点若 checkgrid 未算则做对数正态分布卷积(dista/distb 为分布权重,normd 为归一化截面),分别累加 qext/qscat/g/qref/qscatref 网格量并归一化,得 qsqref/omeg;最后用 k1=1-kx,k2=kx 线性插值写出 3D 输出。
      • 变方差分支(varyingnueff,行 873–1287):额外算方差网格索引 grid_j 与权重 ky;对 (j,k) 四节点做同样卷积缓存;用双线性权重 k1..k4 写出 3D 输出。
  3. 测试输出(行 1295–1350)out_qwg 时写诊断场。

伪代码

if firstcall:
    allocate 所有 SAVE 网格/缓存数组; checkgrid=false; varyingnueff=false
    pi = 2*asin(1)
    for iaer, idomain in (1=VIS, 2=IR):
        建立对数半径轴 refftab[1..100] 和指数方差轴 nuefftab[1..100]
    firstcall = false

for iaer in 1..naerkind:
    if nsize(iaer,1)==1 and nsize(iaer,2)==1:
        把离散表第 1 半径值直接铺到所有 (ig,lg)   # 单粒径均匀
    else:
        for idomain in (VIS, IR):
            # 在 10 个 Gauss 节点 radiusm±drad 处线性内插单粒子参数 -> a/b 组
            if not varyingnueff(iaer):     # 常方差: 一维网格 + 线性插值
                for (lg,ig):
                    定位 grid_i, kx
                    for j in grid_i..grid_i+1:
                        if not checkgrid(j,1,iaer,idomain):
                            对数正态卷积 -> qext/qscat/g/qref 网格量, 归一化
                            checkgrid=true
                    线性插值 (k1,k2) 写 QVISsQREF3d/.../QREFir3d 等
            else:                          # 变方差: 二维网格 + 双线性插值
                for (lg,ig):
                    定位 grid_i,kx 和 grid_j,ky
                    for (j,k) in 四节点:
                        if not checkgrid: 卷积缓存
                    双线性插值 (k1..k4) 写 3D 输出

if out_qwg:  # 默认 false
    write_output 诊断 qext/omeg/g (#ifndef MESOSCALE)

参与的主题流程

主题 参与方式
辐射 为短波(nsun 带)和长波(nir 带)辐射传输提供按实际尺寸分布积分的散射参数 Q/Qrefomegag,以及参考波长 QREFvis3d/QREFir3d(再喂给 aeropacity 算光学厚度)
尘埃循环 尘埃粒径随循环变化时,本例程把变化的 reffrad/nueffrad 转换为对应的散射效率

写法特点

复现要点

待确认

相关页面