surfacearea.F

路径

LMDZ.MARS\libf\aeronomars\surfacearea.F

所属目录/模块

libf/aeronomars

文件定位

气溶胶(尘埃与水冰)表面积计算模块;为光化学异相反应提供单位体积可用的尘/冰颗粒总表面积 surfdust/surfice(m2/m3)。由 physiq_modphotochem 路径中、calchim 之前调用。

定义的符号

符号 类型 行号 作用
surfacearea_mod module 1 包装 surfacearea 子例程
surfacearea subroutine 7 按微物理/简单云两种方案计算尘/冰表面积,并输出诊断

依赖的模块

use 模块 only 列表 用途 待确认
tracer_mod nuice_sed, igcm_dust_number, igcm_ccn_number, varian, ccn_factor 冰核 sedimentation 参数、尘/CCN tracer 索引、尘粒径方差和 CCN 缩放因子
conc_mod rnew 各网格层气体常数,用于理想气体密度
comcstfi_h pi 圆周率常量
wstats_mod wstats 统计日诊断累加
write_output_mod write_output 可选 XIOS / diagfi 输出
callkeys_mod microphys 微物理方案开关,决定分支

调用的关键例程

被调用例程 所在模块/文件 调用位置 作用
wstats wstats_mod 行 124, 126 累加 surfdust/surfice 统计日诊断(micron2/cm3)
write_output write_output_mod 行 129, 131 可选 XIOS / diagfi 字段输出

输入

输入 来源 类型/维度 单位 含义
ngrid 调用方 integer 水平网格点数
nlay 调用方 integer 垂直层数
naerkind 调用方 integer 气溶胶种类数
ptimestep 调用方 real s 物理时间步
pplay 调用方 real (ngrid,nlay) Pa 中层气压
pzlay 调用方 real (ngrid,nlay) m 中层高度
pt 调用方 real (ngrid,nlay) K 中层温度
pq 调用方 real (ngrid,nlay,nq) kg/kg 示踪物混合比
pdq 调用方 real (ngrid,nlay,nq) kg/kg·s 物理倾向
rdust 调用方 real (ngrid,nlay) m 尘埃几何平均半径
rice 调用方 real (ngrid,nlay) m 冰质量平均半径
tau 调用方 real (ngrid,naerkind) 柱尘埃光学厚度
tauscaling 调用方 real (ngrid) 尘量换算因子

输出

输出 去向 类型/维度 单位 含义
surfdust calchim(经 physiq_mod real (ngrid,nlay) m2/m3 尘埃颗粒总表面积密度
surfice calchim(经 physiq_mod real (ngrid,nlay) m2/m3 水冰颗粒总表面积密度

共享状态与副作用

核心逻辑

  1. firstcall 初始化(行 69-77):由 tracer_mod::variannuice_sed 计算对数正态分布表面积放大因子 factor_dust = exp(0.5*(log(varian))^2)factor_ice = exp(0.5*(log(sqrt(log(nuice_sed+1))))^2),打印后关闭标志。

  2. 微物理分支microphys = .true.,行 79-97):逐格逐层按理想气体求密度 rho = pplay/(rnew*pt),用 pq + pdq*ptimestep 更新尘/冰数密度,乘 factor * rho * tauscaling * 4πr² 得表面积。

  3. 简单云分支microphys = .false.,行 98-120):用经验廓线 rdusttyp = max(0.8μm * exp(-z/18km), 1nm)ccntyp = 1.3e8 * max(tau1, 0.001)/0.1 * exp(-z/10km) / ccn_factor 估算典型半径和数密度;按 rice > rdust 判定冰/尘主导,分别给出 surfdustsurfice(冰不存在时置零)。

  4. 诊断输出(行 122-132):乘 1e6 换算为 micron2/cm3,调 wstatswrite_output

伪代码

if firstcall:
    sigma_dust = varian
    sigma_ice  = sqrt(log(nuice_sed + 1))
    factor_dust = exp(0.5 * log(sigma_dust)^2)
    factor_ice  = exp(0.5 * log(sigma_ice)^2)
    firstcall = false

if microphys:
    for each (ig, l):
        rho = pplay / (rnew * pt)
        dustnd = pq(dust_number) + pdq(dust_number) * dt
        icend  = pq(ccn_number)  + pdq(ccn_number)  * dt
        surfdust = factor_dust * dustnd * rho * tauscaling * 4π * rdust²
        surfice  = factor_ice  * icend  * rho * tauscaling * 4π * rice²
else:
    for each (ig, l):
        rho = pplay / (rnew * pt)
        rdusttyp = max(0.8e-6 * exp(-z/18000), 1e-9)
        ccntyp   = 1.3e8 * max(tau(:,1), 0.001) / 0.1 * exp(-z/10000) / ccn_factor
        if rice > rdust:
            surfdust = factor_dust * ccntyp * (ccn_factor - 1) * rho * 4π * rdusttyp²
            surfice  = factor_ice  * ccntyp * rho * 4π * rice²
        else:
            surfdust = factor_dust * ccntyp * ccn_factor * rho * 4π * rdusttyp²
            surfice  = 0

wstats("surfdust", surfdust * 1e6)
wstats("surfice",  surfice  * 1e6)
write_output("surfdust", surfdust * 1e6)
write_output("surfice",  surfice  * 1e6)

参与的主题流程

主题 参与方式
光化学 photochemistry_mod 异相反应提供尘/冰表面积;physiq_modcalchim 之前调用
尘埃循环 消费尘埃粒径、光学厚度和数密度 tracer 计算表面积
水循环 消费冰粒径和 CCN 数密度 tracer 计算冰表面积

写法特点

复现要点

待确认

相关页面