aeropacity_mod.F

路径

LMDZ.MARS\libf\phymars\aeropacity_mod.F

所属目录/模块

libf\phymars

文件定位

该文件定义气溶胶不透明度(光学厚度)计算模块 aeropacity_mod,是辐射传输与尘埃/水冰/CO2 云之间的关键桥梁。模块导出一个例程 aeropacity,由辐射调用入口 callradite(行 430)在每个辐射时间步调用。

aeropacity 完成三件事:

  1. 按配置开关 iaervar 得到参考气压 odpref(610 Pa)处的“规定”尘埃柱可见光柱光学厚度 tau_pref_scenario(常数、Viking、MGS、Escalier 解析场景,或调用 read_dust_scenario 读取观测同化/合成场景)。
  2. 对每一种气溶胶(background dust、submicron dust、stormdust、topdust、水冰、CO2 冰)逐层计算可见光光学厚度 aerosol(ngrid,nlayer,naerkind),并产出 density-scaled opacity 诊断 dsodust/dsords/dsotop
  3. 调用 compute_dustscaling 得到把 GCM 尘埃缩放到场景的系数 tauscaling/dust_rad_adjust,并在 freedust 模式下由尘埃 tracer 反算 GCM 实际柱光学厚度 tau_pref_gcm

模块层还持有两个描述强制尘埃垂直分布的 SAVE 标量 iddisttopdustref,由 conf_phys 读取配置后写入。

定义的符号

符号 类型 行号 作用
aeropacity_mod module 1 气溶胶光学厚度计算模块
iddist integer module variable (SAVE 语义) 5 强制尘埃垂直分布类型标志:0=Pollack90,1=由 topdustref 设定顶高,2=Viking 场景,3=MGS 场景
topdustref real module variable 8 尘埃层顶高度(km),仅当 iddist=1 时使用
aeropacity subroutine 11 逐格点、逐层、逐气溶胶种类计算可见光光学厚度并产出 dso 诊断与缩放系数

依赖的模块

use 模块 only 列表 用途 待确认
ioipsl_getin_p_mod getin_p callphys.def 读取 tauvis(firstcall),以及 DUSTSTORM 块的局地风暴参数
tracer_mod noms, igcm_h2o_ice, igcm_dust_mass, igcm_dust_submicron, rho_dust, rho_ice, nqdust, igcm_stormdust_mass, igcm_topdust_mass, igcm_co2_ice tracer 名称、关键 tracer 索引、尘埃/冰密度常数、尘埃 tracer 计数
geometry_mod latitude(DUSTSTORM 下额外 longitude 格点纬度(rad),用于 MGS/Viking 顶高公式与场景纬度分布
comgeomfi_h sinlat 格点纬度正弦,用于 Viking 顶高 topdust0 公式
comcstfi_h g, pi 重力加速度(柱质量→光学厚度)与圆周率(度↔︎弧度换算)
dimradmars_mod naerkind, name_iaer, iaerdust, tauvis, iaer_dust_conrath, iaer_dust_doubleq, iaer_dust_submicron, iaer_h2o_ice, iaer_stormdust_doubleq, iaer_topdust_doubleq 气溶胶种类数、名称、尘埃散射体索引表、默认可见光厚度、各气溶胶种类索引常数
dust_param_mod odpref, freedust, reff_driven_IRtoVIS_scenario 参考气压 610 Pa、自由尘埃模式开关、reff 驱动 IR→VIS 系数开关
dust_scaling_mod compute_dustscaling 计算并应用尘埃缩放系数 tauscaling/dust_rad_adjust
density_co2_ice_mod density_co2_ice 按温度计算 CO2 冰密度(CO2 冰云光学厚度分母)
surfdat_h alpha_hmons, contains_mons 山顶尘流亚格点面积分数与“是否含山体”掩膜(topdust 路径)
read_dust_scenario_mod read_dust_scenario 读取观测同化/合成尘埃场景的 tau_pref_scenarioIRtoVIScoef
callkeys_mod co2clouds, activeco2ice, water, activice, CLFvarying, CLFvaryingCO2, iaervar, rdstorm, topflows 物理开关:CO2 云、活性 CO2 冰、水循环、活性水冰、亚格点云分数、尘暴场景选择、stormdust、topflows
tracer_mod(DUSTSTORM) r3n_q, ref_r0, igcm_dust_number 仅在编译宏 DUSTSTORM 下用于局地尘暴扰动

调用的关键例程

被调用例程 所在模块/文件 调用位置 作用
getin_p ioipsl_getin_p_mod 行 255(tauvis);DUSTSTORM 块行 745–780 读取配置键
read_dust_scenario read_dust_scenario_mod 行 314/318/323(section 1)和行 709/713/718(section 3 重算) 由场景文件得到 tau_pref_scenarioIRtoVIScoef
density_co2_ice density_co2_ice_mod 行 568(CO2 冰云分支,逐格点逐层) 温度依赖 CO2 冰密度
compute_dustscaling dust_scaling_mod 行 865 计算缩放系数并调整 aerosol
abort_physic (phymars 公共中止例程) 行 327(非法 iaervar)、行 925(freedust 下 tau_pref_gcm>50 致命错误中止

输入

输入 来源 类型/维度 单位 含义
ngrid, nlayer, nq callradite integer scalar - 水平格点数、垂直层数、tracer 数
zday callradite real scalar sol 自 Ls=0 起的火星日期(传给 read_dust_scenario
pplay(ngrid,nlayer) callradite real Pa 层中点气压
pplev(ngrid,nlayer+1) callradite real Pa 层界面气压(柱质量 (pplev_l - pplev_l+1)/g
ls callradite real scalar rad 太阳经度(场景纬度/季节分布)
pq(ngrid,nlayer,nq) callradite real kg/kg tracer 质量混合比(读取各尘埃/冰 tracer 分量)
pt(ngrid,nlayer) callradite real K 温度(CO2 冰密度)
QREFvis3d/QREFir3d(ngrid,nlayer,naerkind) callradite real - 可见光/红外参考波长消光系数 Qext
omegaREFir3d(ngrid,nlayer,naerkind) callradite real - 红外参考波长单次散射反照率
reffrad(ngrid,nlayer,naerkind) callradite real (INOUT) m 气溶胶有效半径(光学厚度分母;DUSTSTORM 下可被改写)
totstormfract(ngrid) callradite real - 火箭尘暴亚格点面积分数(section 5 stormdust 归一化)
totcloudfrac(ngrid) callradite real - 总水冰云分数(CLFvarying 路径)
clearatm, nohmons, clearsky callradite logical - 分别控制是否排除 stormdust、topdust、水/CO2 冰云,用于多次调用拆分网格内/外贡献

输出

输出 去向 类型/维度 单位 含义
tau_pref_scenario(ngrid) callradite→缩放与诊断 real (OUT) - 场景规定的 odpref 处尘埃柱可见光厚度
tau_pref_gcm(ngrid) callradite→诊断 real (OUT) - GCM 实际尘埃柱可见光厚度(freedust 下由 tracer 反算,否则等于场景值)
tau(ngrid,naerkind) callradite real (OUT) - 每种气溶胶的柱总可见光光学厚度
taucloudtes(ngrid) callradite real (OUT) - 水冰云在红外参考波长用 Qabs 计算的不透明度(对标 TES)
aerosol(ngrid,nlayer,naerkind) callradite(辐射传输输入) real (OUT) - 每层每种气溶胶可见光光学厚度
dsodust/dsords/dsotop(ngrid,nlayer) 诊断输出 real (OUT) m²/kg 级 background dust / stormdust / topdust 的 density-scaled opacity(红外,对标观测)
tauscaling(ngrid) callradite→后续物理 real (OUT) - qdust/Ndust 缩放系数
dust_rad_adjust(ngrid) callradite real (INOUT) - 尘埃辐射调整系数
IRtoVIScoef(ngrid) callradite/read_dust_scenario real (INOUT) - 场景 IR(9.3µm) CDOD 到可见光的换算系数

共享状态与副作用

核心逻辑

  1. 初始化tau(1:ngrid,1:naerkind)=0
  2. firstcall(行 197–268):扫描 name_iaer,把名字以 dust/storm/top 开头的归为尘埃散射体(填 naerdustiaerdust);扫描 noms 把名字以 dust 开头的 tracer 填入 nqdust;若 water.and.activicei_ice=igcm_h2o_ice;若 co2clouds.and.activeco2icei_co2ice=igcm_co2_ice;打印诊断廓线;getin_p("tauvis");按 freedust.or.rdstormcstdustlevel 设为 1,否则设为 cstdustlevel0=7。非 DUSTSTORM 编译下此处即关闭 firstcall
  3. Section 1 — 场景柱厚度(行 270–328):按 iaervar 分支得到 tau_pref_scenario
    • =1 常数 max(tauvis,1e-9)
    • =2 Viking 余弦季节循环;
    • =3 MGS 纬度+季节 tanh 分布;
    • =5 Escalier 阶梯(Ls 30°–150° 间降到 0.2);
    • 6–824–374/124–126read_dust_scenario
    • 否则 abort_physic
  4. Section 2 — 逐种气溶胶逐层光学厚度(行 330–701)SELECT CASE(name_iaer(iaer))
    • dust_conrath:按 iddist 选顶高(const/Viking/MGS),用指数垂直缩放函数(iddist>=1)或 Pollack90 分布(iddist=0)填 aerosol
    • dust_doubleq:两矩方案。l<=cstdustlevel 时用 cstdustlevel 层值“冻结”避免近地虚高;公式 0.75*Qvis/(rho_dust*reffrad)*pq(dust_mass)*Δp/g;同时算红外 dsodust;若 reff_driven_IRtoVIS_scenarioclearatm.and.nohmons,累加 IR 吸收/VIS 消光柱量算 IRtoVIScoef=tauVISext/tauIRabs
    • dust_submicron:用 igcm_dust_submicron,同样的冻结层处理,仅 VIS。
    • h2o_iceclearsky 时填 1e-9;否则用 rho_icei_ice 计算,累加 taucloudvis/taucloudtesCLFvarying 时按 max(totcloudfrac,0.01) 还原亚格点云。
    • co2_ice:逐点调 density_co2_ice(pt) 得密度,用 i_co2ice 计算并累加 taucloudco2vis/tesCLFvaryingCO2 时按 totcloudco2frac 还原。
    • stormdust_doubleqclearatm 时填 1e-25(网格内无风暴部分),否则用 igcm_stormdust_mass 计算并产出 dsords
    • topdust_doubleqnohmons 时填 1e-25,否则用 igcm_topdust_mass 计算并产出 dsotop
  5. Section 3 重算(行 703–721):若 reff_driven_IRtoVIS_scenario,在 IRtoVIScoef 更新后对 iaervar 6–8/24–36/4,124–126 再次调用 read_dust_scenario
  6. DUSTSTORM 块(行 723–860,仅宏开启):firstcall 下汇总参考 tau_pref_gcm,交互读取局地尘暴参数,按 Spiga et al. 2013 公式逐层加尘埃扰动到 pq 并可改 reffrad,最后把 tau_pref_gcm 清零。
  7. 3.1 缩放(行 865)compute_dustscaling(...) 计算 tauscaling/dust_rad_adjust 并就地缩放 aerosol
  8. 3.2 GCM 柱厚度(行 872–932)freedust 时清零后只对 dust_doubleq/stormdust_doubleq/topdust_doubleq 累加各自 tracer 贡献,乘 odpref/pplev(:,1);若 max(tau_pref_gcm)>50abort_physic;非 freedusttau_pref_gcm=tau_pref_scenario
  9. Section 4(行 937–943):对每种气溶胶逐层累加得柱总 tau
  10. Section 5(行 957–983)rdstorm 时把 aerosol(stormdust) 除以 totstormfract(折算到风暴面积内浓度);topflows 时对 contains_mons 的格点把 aerosol(topdust) 除以 alpha_hmons

伪代码

tau = 0
if firstcall:
    识别尘埃散射体 iaerdust / 尘埃 tracer nqdust
    设 i_ice, i_co2ice(依 water/activice, co2clouds/activeco2ice)
    打印典型 Qext 廓线; getin tauvis
    cstdustlevel = 1 if (freedust or rdstorm) else 7
    (非 DUSTSTORM 编译) firstcall = false

# 1. 场景柱光学厚度
select iaervar:
    1 -> 常数; 2 -> Viking; 3 -> MGS; 5 -> Escalier
    6-8/24-37/4,124-126 -> read_dust_scenario
    else -> abort_physic

# 2. 每种气溶胶逐层光学厚度
for iaer in 1..naerkind:
    select name_iaer(iaer):
        dust_conrath   -> 按 iddist 顶高 + 指数/Pollack 垂直分布
        dust_doubleq   -> 0.75*Qvis/(rho_dust*reff)*pq(dust_mass)*Δp/g
                          冻结 l<=cstdustlevel; 算 dsodust; (可选) IRtoVIScoef
        dust_submicron -> 同上, 用 dust_submicron
        h2o_ice        -> clearsky?1e-9 : 用 rho_ice,i_ice; 累加 taucloudtes; CLFvarying 还原
        co2_ice        -> clearsky?1e-9 : density_co2_ice(pt); 累加 taucloudco2tes; CLFvaryingCO2 还原
        stormdust      -> clearatm?1e-25 : 用 stormdust_mass; 算 dsords
        topdust        -> nohmons?1e-25 : 用 topdust_mass; 算 dsotop

# 3. reff 驱动场景重算(可选) + DUSTSTORM 扰动(宏)
# 3.1 compute_dustscaling 缩放 aerosol
# 3.2 freedust? 由 tracer 反算 tau_pref_gcm(>50 则 abort) : = tau_pref_scenario
# 4. tau = 逐层累加 aerosol
# 5. rdstorm? aerosol(storm)/totstormfract; topflows? aerosol(top)/alpha_hmons

参与的主题流程

主题 参与方式
辐射 为长短波辐射传输提供逐层每种气溶胶的可见光光学厚度 aerosol 与柱厚度 tautaucloudtes
尘埃循环 实现尘埃场景柱厚度、两矩尘埃/stormdust/topdust 光学厚度、density-scaled opacity 诊断,并经 compute_dustscaling 反馈缩放系数
水循环 计算活性水冰云的光学厚度与 taucloudtesCLFvarying 亚格点云还原)
CO2 循环 计算活性 CO2 冰云光学厚度(温度依赖密度 + CLFvaryingCO2 还原)

写法特点

复现要点

待确认

相关页面