surfacearea.F
快速理解
它做什么: 气溶胶表面积计算模块,为光化学异相反应提供单位体积可用的尘/冰颗粒总表面积。被 physiq 在 photochem 路径中调 calchim 之前调用(physiq_mod.F:2214)。
基本过程: 按微物理或简单云方案 → 根据数浓度/有效半径/空气密度 → 算尘/冰表面积密度。
关键结果: surfdust/surfice(m²/m³)表面积密度。
路径
LMDZ.MARS\libf\aeronomars\surfacearea.F
所属目录/模块
libf/aeronomars
文件定位
气溶胶(尘埃与水冰)表面积计算模块;为光化学异相反应提供单位体积可用的尘/冰颗粒总表面积 surfdust/surfice(m2/m3)。由 physiq_mod 在 photochem 路径中、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 | 水冰颗粒总表面积密度 |
共享状态与副作用
factor_dust,factor_ice(real, save):对数正态分布质量平均半径到总表面积的换算因子,firstcall 时由varian/nuice_sed计算后保持不变。firstcall(logical, save):初始化标志,firstcall 后置.false.。- 以上三个变量标记为
$OMP THREADPRIVATE。 - 诊断输出:
wstats累加surfdust/surfice(单位 micron2/cm3),write_output可选写出。
核心逻辑
firstcall 初始化(行 69-77):由
tracer_mod::varian和nuice_sed计算对数正态分布表面积放大因子factor_dust = exp(0.5*(log(varian))^2)和factor_ice = exp(0.5*(log(sqrt(log(nuice_sed+1))))^2),打印后关闭标志。微物理分支(
microphys = .true.,行 79-97):逐格逐层按理想气体求密度rho = pplay/(rnew*pt),用pq + pdq*ptimestep更新尘/冰数密度,乘factor * rho * tauscaling * 4πr²得表面积。简单云分支(
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判定冰/尘主导,分别给出surfdust和surfice(冰不存在时置零)。诊断输出(行 122-132):乘
1e6换算为 micron2/cm3,调wstats和write_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_mod 在 calchim 之前调用 |
| 尘埃循环 | 消费尘埃粒径、光学厚度和数密度 tracer 计算表面积 |
| 水循环 | 消费冰粒径和 CCN 数密度 tracer 计算冰表面积 |
写法特点
- 固定格式 Fortran(
.F),续行符$。 factor_dust/factor_ice/firstcall标记save+THREADPRIVATE。- 对数正态分布表面积放大因子来自
exp(0.5 * σ²),其中σ = log(geometric_std)。 - 简单云分支经验常数:
0.8 μm地表尘半径、18 km标高、1.3e8 #/kg地表 CCN、10 km标高。 surfdust/surfice内部单位 m2/m3,诊断乘1e6换算为 micron2/cm3。rice > rdust判定用于区分冰主导与尘主导层,冰不存在时surfice置零。
复现要点
- 需要
tracer_mod中igcm_dust_number、igcm_ccn_number、nuice_sed、varian、ccn_factor已正确初始化。 conc_mod::rnew需为各层有效气体常数。callkeys_mod::microphys决定微物理/简单云分支。- 输入
rdust/rice/tau/tauscaling由physiq_mod在调用前准备。 calchim内部把surfdust/surfice(m2/m3)乘1e-2转为 cm2/cm3 后供异相反应使用。- firstcall 因子只依赖
varian和nuice_sed,不依赖格点或层。
待确认
tauscaling的物理含义和来源(可能由aeropacity_mod或suaer提供)。- 简单云分支经验常数
0.8 μm / 18 km / 1.3e8 / 10 km的文献出处。 ccn_factor的具体取值范围和对简单云分支的影响。
相关页面
- calchim_mod:消费
surfdust/surfice的光化学调度模块 - photochemistry_mod:异相反应使用尘/冰表面积
- physiq_mod:调用方,
photochem路径中先调surfacearea再调calchim - tracer_mod:提供
igcm_dust_number/igcm_ccn_number/varian/ccn_factor/nuice_sed - conc_mod:提供
rnew气体常数 - aeronomars/index