suaer.F90

路径

LMDZ.MARS\libf\phymars\suaer.F90

所属目录 / 模块

libf\phymars

文件定位

suaer.F90 定义 suaer_mod 模块(第 1 行)和唯一导出的初始化例程 suaer(第 7 行)。它是辐射链路的气溶胶光学查找表加载器:在 callradite 的首次调用阶段被 CALL SUAER 触发(callradite_mod.F 第 408 行),按 dimradmars_mod::name_iaer 中的气溶胶类型选择外部 ASCII 光学属性文件,读取波长轴、粒径轴、消光效率、单次散射反照率和不对称因子,然后调用 aerave 把高分辨率光谱平均到 GCM 的可见光 nsun=2 波段和红外 nir=4 波段。

本文件不直接计算三维网格内的光学厚度。它填充 dimradmars_mod 中的离散查找表:file_idlongrefvis/longrefirradiustabnsizeQVISsQREFomegavisgvisQIRsQREFomegaIRgIRQREFvis/QREFiromegaREFvis/omegaREFir。这些表随后由 aeroptproperties 按实际粒径分布插值/卷积,再由 aeropacity_mod 用于计算各气溶胶光学厚度。

定义的符号

符号 类型 行号 作用
suaer_mod module 1 封装气溶胶光学查找表初始化例程
suaer subroutine 7 选择并读取每类气溶胶的 VIS/IR ASCII 光学属性表,平均到 GCM 辐射波段,并写入 dimradmars_mod 共享表
wvl saved allocatable local array 61 当前光学属性文件的波长轴
radiusdyn saved allocatable local array 63 当前光学属性文件的粒径轴
ep saved allocatable local array 66 当前文件中每个波长和粒径的消光系数/效率 Qext
omeg saved allocatable local array 67 当前文件中每个波长和粒径的单次散射反照率
gfactor saved allocatable local array 68 当前文件中每个波长和粒径的不对称因子
wvl/radiusdyn/ep/omeg/gfactor threadprivate OpenMP directive 70 让临时读表数组在 OpenMP 线程中各自私有

依赖的模块

use 模块 only 列表 用途 待确认
dimradmars_mod longrefvis, longrefir, nsizemax, long1vis, long2vis, long3vis, long1ir, long2ir, long1co2, long2co2, nsun, nir, naerkind, name_iaer, iaer_*, file_id, radiustab, gvis, omegavis, QVISsQREF, gIR, omegaIR, QIRsQREF, QREFvis, QREFir, omegaREFvis, omegaREFir, nsize 读取辐射维度、气溶胶名称和输出表;本例程主要写入这些共享表
datafile_mod datadir 拼接 trim(datadir)//"/"//trim(file_id(...)) 外部光学属性文件路径
mod_phys_lmdz_transfert_para bcast MESOSCALE 编译路径下把 master 读好的查找表广播给其他并行进程
callkeys_mod dustrefir 作为尘埃、stormdust、topdust 红外参考波长 longrefir
aerave_mod aerave 把高分辨率光学属性按普朗克权重平均到可见/红外 GCM 通道

调用的关键例程

被调用例程 所在模块 / 文件 调用位置 作用
aerave aerave_mod / aerave.F 第 422 行、第 480 行 分别对可见光和红外谱段做带平均,返回 epav/omegav/gav 以及参考波长处的 QREF/omegaREF
bcast mod_phys_lmdz_transfert_para 第 564-577 行 广播 longref*radiustabQ*omega*g*nsize 等查找表
abort_physic 物理包公共错误终止例程 第 258、275、290、302、309、376、409 行 光学文件缺失、读表失败、表格式异常或 nsizemax 不足时终止运行

输入

输入 来源 类型/维度 单位 含义
name_iaer(1:naerkind) dimradmars_mod,由上游配置/初始化填充 character array - 当前运行启用的气溶胶类型名称,驱动 SELECT CASE 选择文件和参考波长
naerkind dimradmars_mod integer scalar - 气溶胶种类数,决定主循环长度
datadir datafile_mod character - 外部光学属性表所在目录
dustrefir callkeys_mod real scalar m 尘埃类气溶胶的红外参考波长
nsun/nir dimradmars_mod integer parameters - 可见光和红外辐射通道数;当前分别为 2 和 4
long1vis/long2vis/long3vis dimradmars_mod real parameters m 两个太阳短波通道的边界
long1ir/long1co2/long2co2/long2ir dimradmars_mod real parameters m 三个红外积分区间边界,之后映射到四个 nir 通道
optprop_*.dat datadir 运行时目录 ASCII tables 混合 每个文件依次提供 nwvlnsizewvlradiusdynepomeggfactor

输出

输出 去向 类型/维度 单位 含义
file_id(naerkind,2) dimradmars_mod character array - 每类气溶胶的 VIS/IR 光学属性文件名
longrefvis(naerkind) dimradmars_mod real array m 可见光参考波长;尘埃、水冰和 CO2 冰当前均写入 0.67e-6
longrefir(naerkind) dimradmars_mod real array m 红外参考波长;尘埃类取 dustrefir,水冰取 12.1e-6,CO2 冰取 4.26e-6
nsize(naerkind,2) dimradmars_mod integer array - 每类气溶胶、每个谱段的离散粒径数
radiustab(naerkind,2,nsizemax) dimradmars_mod real array m 离散粒径表,供后续粒径插值/卷积使用
QVISsQREF(nsun,naerkind,nsizemax) dimradmars_mod real array - 可见光各波段 <Qext>/Qext(longrefvis)
omegavis/gvis dimradmars_mod real arrays - 可见光各波段单次散射反照率和不对称因子
QIRsQREF(nir,naerkind,nsizemax) dimradmars_mod real array - 红外各通道 Qext/Qext(longrefvis);第 1、2 通道共用 CO2 15 um 带结果
omegaIR/gIR dimradmars_mod real arrays - 红外各通道单次散射反照率和不对称因子
QREFvis/QREFir dimradmars_mod real arrays - 可见/红外参考波长处的消光效率
omegaREFvis/omegaREFir dimradmars_mod real arrays - 可见/红外参考波长处的单次散射反照率

共享状态与副作用

核心逻辑

  1. 按气溶胶类型选择文件和参考波长:对 iaer=1..naerkind 循环,按 name_iaer(iaer) 匹配 dust_conrathdust_doubleqdust_submicronh2o_iceco2_icestormdust_doubleqtopdust_doubleq,写入对应 file_id(iaer,1:2)longrefvis/longrefir
  2. 清零共享查找表:在读表前把 VIS/IR 的 QomegagQREFradiustab 表归零,避免残留值污染未覆盖条目。
  3. 逐气溶胶、逐谱段打开 ASCII 文件:检查 datadir/file_id 是否存在,不存在即终止;存在则打开格式化文本文件。
  4. 扫描头部并分配临时数组:跳过以 # 或空格开头的行,先读 nwvlnsize(iaer,idomain),再分配 wvl(nwvl)radiusdyn(nsize)ep(nwvl,nsize)omeg(nwvl,nsize)gfactor(nwvl,nsize)
  5. 读取表主体:继续跳过注释/空白行,依次读入波长轴、粒径轴、每个粒径的 epomeggfactor
  6. 可见光带平均:对每个粒径,设置太阳温度 tsun=6000,用 long1vis/long2vis/long3vis 构造两个短波通道,调用 aerave,再把 epav/omegav/gav 写入 QVISsQREF/omegavis/gvis
  7. 红外带平均并换参考波长:对每个粒径,设置 tsol=215 和三个红外积分区间,调用 aerave 得到相对 longrefirepav;随后乘 QREFir/QREFvis,把红外消光效率统一转为相对 longrefvisQIRsQREF
  8. 映射红外通道QIRsQREF(1)(2) 使用 CO2 中心带结果 epav(2)(3) 使用 9 um 区间 epav(1)(4) 使用远红外区间 epav(3)omegaIR/gIR 同样映射。
  9. 释放临时表并广播:当前 iaer,idomain 处理完成后释放临时数组;所有循环结束后在非 MESOSCALE 路径广播共享表。

伪代码

for iaer in 1..naerkind:
    select name_iaer(iaer):
        set file_id(iaer,VIS), file_id(iaer,IR)
        set longrefvis(iaer), longrefir(iaer)

zero radiustab, QVISsQREF, omegavis, gvis, QIRsQREF, omegaIR, gIR, QREF*, omegaREF*

for iaer in 1..naerkind:
    for idomain in [VIS, IR]:
        path = datadir + "/" + file_id(iaer,idomain)
        require path exists
        read nwvl and nsize, skipping comments/blank-leading lines
        allocate wvl, radiusdyn, ep, omeg, gfactor
        read wvl, radiusdyn, ep(:,isize), omeg(:,isize), gfactor(:,isize)

        if VIS:
            longsun = [long1vis, long2vis, long3vis]
            for isize:
                require isize <= nsizemax
                radiustab(iaer,VIS,isize) = radiusdyn(isize)
                aerave(..., longrefvis(iaer), tsun=6000, nsun, longsun, ...)
                QVISsQREF(:,iaer,isize) = epav(:)
                omegavis(:,iaer,isize) = omegav(:)
                gvis(:,iaer,isize) = gav(:)
        else:
            longir = [long1ir, long1co2, long2co2, long2ir]
            for isize:
                radiustab(iaer,IR,isize) = radiusdyn(isize)
                aerave(..., longrefir(iaer), tsol=215, nir-1, longir, ...)
                epav = epav * QREFir(iaer,isize) / QREFvis(iaer,isize)
                map epav(2), epav(2), epav(1), epav(3) into QIRsQREF(1:4)

        deallocate temporary file arrays

if not MESOSCALE:
    bcast all shared optical property tables

参与的主题流程

主题 参与方式
辐射 callradite 首次调用时加载气溶胶光学查找表,是 aeroptpropertiesaeropacitylwmainswmain 的上游数据准备步骤
尘埃循环 dust_conrathdust_doubleqdust_submicronstormdust_doubleqtopdust_doubleq 提供尘埃光学属性表及参考波长
水冰/CO2 云辐射 h2o_iceco2_ice 气溶胶提供 VIS/IR 光学属性表,供云粒径光学参数化使用

写法特点

复现要点

待确认

相关页面