尘埃循环主题
主题目标
尘埃循环是 LMDZ.MARS 物理包中影响最广的过程之一。火星大气尘埃决定了大气的辐射加热/冷却,进而驱动温度、环流和其他循环。本主题串联尘埃从"注入大气—被风/对流输运—改变粒径分布—产生光学厚度—被辐射模块使用—沉降回地表"的完整流程,目标是说明:
- 尘埃示踪剂(质量、数量、暴尘、地形尘)如何在大气中被抬升、注入与沉降。
- 尘埃粒径分布如何由二阶矩(质量+数量)方案计算。
- 尘埃光学厚度如何计算,并如何被缩放以匹配观测尘暴场景(dust scenario)。
- 尘埃如何与辐射主题耦合。
源码依据:dust_param_mod.F90 第 1 行注释 "This module contains flags and saved variables for the dust cycle"。
入口
尘埃循环没有单一入口,而是分散在 physiq() 主物理例程(physiq_mod.F)的多个阶段中按顺序调用。
| 入口例程 | 文件 | 调用阶段 | 说明 |
|---|---|---|---|
aeropacity() |
aeropacity_mod.F |
辐射前(经 callradite) |
计算尘埃光学厚度并缩放 |
compute_dustscaling() |
dust_scaling_mod.F90 |
在 aeropacity 内 |
计算/应用 tauscaling 或 dust_rad_adjust |
updatereffrad() |
updatereffrad_mod.F |
辐射前(经 callradite) |
更新尘埃粒径 rdust |
compute_dtau() |
compute_dtau_mod.F90 |
物理 3.4 节 | 计算地表尘埃注入率 dustliftday |
dust_windstress_lift() |
dust_windstress_lift.F90 |
在 vdifc 内 |
风应力抬升尘埃 |
dustdevil() |
dustdevil.F90 |
物理尘卷风段 | 尘卷风抬升尘埃 |
rocketduststorm() |
rocketduststorm_mod.F90 |
物理 3.x 节 | 火箭式尘暴垂直输运 |
topmons() |
topmons_mod.F90 |
物理 3.x 节 | 地形(山顶)尘流输运 |
callsedim() |
callsedim_mod.F |
沉降段 | 尘埃与水冰重力沉降 |
源码依据:physiq_mod.F 第 21-99、1379-1530、2107-2135 行的 use/CALL 语句。
参与文件
| 文件 | 参与阶段 | 作用 |
|---|---|---|
dust_param_mod.F90 |
全局状态 | 尘埃循环的开关与保存变量(active、doubleq、lifting、freedust、tauscaling、dustscaling_mode、dust_rad_adjust、odpref 等) |
dust_windstress_lift.F90 |
抬升 | 风应力抬升(White 1979/Marticorena 公式) |
dustdevil.F90 |
抬升 | 尘卷风抬升(Renno et al. 1998) |
compute_dtau_mod.F90 |
抬升/注入 | 由 GCM 与场景的光学厚度差计算注入率 dustliftday |
read_dust_scenario_mod.F90 |
数据读取 | 读取并时空插值观测尘暴场景文件 dust_*.nc |
updaterad.F90 |
粒径 | updaterdust 等:由质量/数量混合比算几何平均半径 |
updatereffrad_mod.F |
粒径 | 把 rdust 转换为辐射用有效半径 reffrad |
aeropacity_mod.F |
光学厚度 | 计算各层各类尘埃的可见光/红外光学厚度,输出 dsodust、tau_pref_gcm |
dust_scaling_mod.F90 |
缩放 | 把 GCM 尘埃光学厚度缩放到匹配场景 |
dust_rad_adjust_mod.F90 |
缩放 | GCM v6 风格:仅对辐射传输做缩放(dust_rad_adjust) |
rocketduststorm_mod.F90 |
输运 | 火箭式尘暴:辐射加热驱动暴尘垂直抬升 |
topmons_mod.F90 |
输运 | 地形尘流:山顶之上的次网格尘埃抬升 |
dust_coagulation_mod.F90 |
微物理 | 尘埃凝并(可选) |
callsedim_mod.F |
沉降 | 重力沉降 |
rocketduststorm、topmons、dust_coagulation 的内部数值方案已由对应文件页覆盖;本主题只保留跨模块调用链、配置门控和复现检查点。
尘埃示踪剂
尘埃以一组示踪剂(tracer)形式存在,具体哪些被激活取决于配置开关。
| 示踪剂 | 索引变量 | 启用条件 | 含义 |
|---|---|---|---|
| 尘埃质量 | igcm_dust_mass |
dustbin>=1 |
背景尘埃质量混合比 (kg/kg) |
| 尘埃数量 | igcm_dust_number |
doubleq |
背景尘埃数量混合比 (kg⁻¹) |
| 亚微米尘 | igcm_dust_submicron |
submicron |
次级(亚微米)尘埃分布 |
| 暴尘质量/数量 | igcm_stormdust_mass / igcm_stormdust_number |
rdstorm |
火箭式尘暴尘埃 |
| 地形尘质量/数量 | igcm_topdust_mass / igcm_topdust_number |
topflows |
山顶尘流尘埃 |
源码依据:tracer_mod 中定义的 igcm_* 索引;updatereffrad_mod.F 第 13-23 行、aeropacity_mod.F 第 20-23 行的 use tracer_mod。
配置开关
| 开关 | 文件/默认值 | 作用 |
|---|---|---|
dustbin |
conf_phys.F L472 默认 0 |
传输的尘埃 bin 数量;>0 才传输尘埃 |
active |
L477 默认 .false. |
尘埃是否辐射活跃(仅 dustbin>0 时有意义) |
doubleq |
L492 默认 .false. |
是否使用 2 阶矩(质量+数量)方案,需 dustbin>=2 |
submicron |
L496 默认 .false. |
是否加入亚微米尘埃分布 |
lifting |
L518 默认 .false. |
是否从地表抬升尘埃 |
callddevil |
L689 默认 .false. |
是否启用尘卷风抬升参数化 |
freedust |
L550 默认 .false. |
真:不再用 tauscaling 重缩放尘埃质量/数量;需配 doubleq |
dustscaling_mode |
L563-567 | freedust 时默认 0,否则默认 1;可被 callphys.def 覆盖 |
iaervar |
L201 默认 8 |
尘埃光学厚度场景模式(见下表) |
dustinjection |
L532 默认 0 |
>0 启用地表注入方案(compute_dtau) |
coeff_injection |
L536 默认 0.25 |
尘埃注入方案系数 |
rdstorm |
L378 默认 .false. |
火箭式尘暴参数化 |
topflows |
L388 默认 .false. |
山顶尘流参数化 |
windstress_lift_scheme |
dust_windstress_lift.F90 L88 默认 0 |
风应力抬升方案号(当前仅 0 合法) |
dust_devil_scheme |
dustdevil.F90 L89 默认 0 |
尘卷风方案号(当前仅 0 合法) |
dustscaling_mode 三种取值(dust_scaling_mod.F90 与 conf_phys.F 注释):
0:freedust,tauscaling=1,不重缩放。1:GCM v5.3 风格,计算tauscaling使 GCM 光学厚度匹配tau_pref_scenario。2:GCM v6 风格,tauscaling=1,仅对辐射传输用dust_rad_adjust缩放。
源码依据:conf_phys.F 第 559-578 行;dust_scaling_mod.F90 第 42-107 行。
复现风险:dustscaling_mode 的默认值依赖 freedust,复现时必须先确定 freedust、doubleq 的组合,否则会触发 abort_physic(conf_phys.F L553-578 有多处互斥校验)。
尘埃场景(iaervar)
read_dust_scenario 根据 iaervar 决定读取哪个 NetCDF 场景文件:
| iaervar | 文件 | 说明 |
|---|---|---|
| 4 | dust_tes.nc |
旧 TES 同化 MY24(参考压力 700 Pa) |
| 6 | dust_cold.nc |
冷场景 |
| 7 | dust_warm.nc |
暖场景 |
| 8 | dust_clim.nc |
气候态(默认) |
| 24-37 | dust_MY24.nc … dust_MY37.nc |
观测火星年 MY24-MY37 |
| 124/125/126 | dust_tes_MY24/25/26.nc |
旧 TES 同化(700 Pa) |
源码依据:read_dust_scenario_mod.F90 第 72-95 行。
场景变量类型:dustop(可见光消光)或 cdod/cdodext(红外吸收/消光)。若为红外(IRscenario=.true.),最终乘 IRtoVIScoef(ig) 转换为可见光消光。旧 TES 文件额外乘 1.3*(odpref/700.) 校正;swrtype==1(Fouquart)时再乘 0.825/1.3。
源码依据:read_dust_scenario_mod.F90 第 139-174、387-411 行。
状态变量
| 变量 | 来源 | 单位 | 含义 | 生命周期 |
|---|---|---|---|---|
tauscaling(ngrid) |
dust_param_mod |
- | 尘埃质量/数量的缩放转换系数 | SAVE,逐步更新 |
dust_rad_adjust(ngrid) |
dust_param_mod |
- | 仅辐射用的尘埃缩放系数 | SAVE,逐步更新 |
dust_rad_adjust_prev/next |
dust_rad_adjust_mod |
- | 用于跨 sol 线性插值的端点值 | SAVE |
dtau(ngrid) |
compute_dtau_mod |
- | GCM 与场景在 610 Pa 处的光学厚度差 | SAVE |
rdust(ngrid,nlayer) |
updaterad/updatereffrad |
m | 尘埃几何平均半径 | 每步重算 |
reffrad(ngrid,nlayer,naerkind) |
updatereffrad |
m | 辐射用有效半径 | 每步重算 |
aerosol(ngrid,nlayer,naerkind) |
aeropacity |
- | 各层各类气溶胶光学厚度 | 每步重算 |
dsodust(ngrid,nlayer) |
aeropacity |
- | 背景尘埃密度缩放光学厚度(红外,供与观测比较) | 每步重算 |
tau_pref_gcm(ngrid) |
aeropacity |
- | GCM 在 610 Pa 处的可见光尘埃柱光学厚度 | 每步重算 |
tau_pref_scenario(ngrid) |
read_dust_scenario |
- | 场景在 610 Pa 处的可见光尘埃柱光学厚度 | 每步重算 |
参考压力常数 odpref = 610. Pa(dust_param_mod.F90 第 19 行)。
主调用链
physiq() (physiq_mod.F)
│
├── [辐射前] callradite()
│ ├── updatereffrad() 更新尘埃粒径 reffrad
│ │ └── updaterdust() doubleq: rdust = (r3n_q*qdust/ndust)^(1/3)
│ ├── aeropacity() 计算尘埃光学厚度
│ │ ├── read_dust_scenario() 读取并插值场景 tau_pref_scenario
│ │ │ └── (IR场景) × IRtoVIScoef
│ │ ├── [累加] aerosol(:,:,iaerdust) 及 dsodust, tau_pref_gcm
│ │ └── compute_dustscaling()
│ │ ├── mode 1: tauscaling = tau_pref_scenario*ps/odpref/taudust
│ │ │ aerosol *= tauscaling
│ │ └── mode 2: compute_dust_rad_adjust() (跨 sol 插值)
│ │ aerosol *= dust_rad_adjust
│ └── (lwmain/swmain 使用 aerosol) → 辐射主题
│
├── [3.x 输运] rocketduststorm() / topmons() 暴尘/地形尘垂直输运
├── [3.4 注入] compute_dtau() → dustliftday (注入率)
│
├── [扩散 vdifc] dust_windstress_lift() 风应力抬升 (lifting=T)
│ 使用 dustliftday 注入 (dustinjection>0)
├── [尘卷风] dustdevil() callddevil=T
└── [沉降] callsedim() 尘埃/水冰重力沉降
源码依据:调用顺序见 physiq_mod.F;updatereffrad → updaterdust 见 updatereffrad_mod.F 第 99-106 行;aeropacity → compute_dustscaling 见 aeropacity_mod.F 第 39 行 use dust_scaling_mod。
推断:rocketduststorm、topmons、compute_dtau 在 physiq 中的精确先后次序按 physiq_mod.F 第 1379-1530 行的出现顺序判断;其与扩散/沉降段的相对位置以源码行号为准,但完整控制流(含各 IF 分支条件)未逐一展开。
计算阶段
阶段 1:粒径更新(updatereffrad → updaterdust)
doubleq.AND.active 时,对每层每点由质量与数量混合比计算几何平均半径:
rdust = ( r3n_q * qdust / ndust )^(1/3)
并对极小/极大值用阈值 r3dustmin/r3dustmax(对应 rdustmin=1e-8 m、rdustmax=500e-6 m)截断;否则(非 doubleq)固定 rdust=0.8e-6 m、nueffdust=0.3。随后转为辐射有效半径:dust_doubleq 用 reffrad = rdust*ref_r0,dust_conrath 用 reffrad = rdust*(1+nueffdust)^2.5。
源码依据:updaterad.F90 第 203-238 行;updatereffrad_mod.F 第 99-113、228-234 行。
阶段 2:光学厚度计算(aeropacity)
每层各类尘埃光学厚度按下式累加(doubleq):
aerosol(ig,l,iaer) = 0.75 * QREFvis3d / (rho_dust * reffrad) * qmass * dp / g
同时计算红外密度缩放光学厚度 dsodust(用 QREFir3d,供与 TES/MCS 观测比较)和 GCM 柱光学厚度 tau_pref_gcm(换算到 610 Pa 参考压力)。
源码依据:aeropacity_mod.F 第 423-455、888-910、726-736 行。
阶段 3:尘埃缩放(compute_dustscaling)
- mode 1:先对所有尘埃类累加柱光学厚度
taudust,再令tauscaling = tau_pref_scenario * pplev(:,1) / odpref / taudust, 然后aerosol *= tauscaling(下限1e-20)。这样 GCM 光学厚度被强制匹配观测场景。 - mode 2:
tauscaling=1,调用compute_dust_rad_adjust算dust_rad_adjust,仅对辐射传输用的aerosol缩放。 - mode 0(freedust):
tauscaling=1,不缩放。
源码依据:dust_scaling_mod.F90 第 40-108 行。
compute_dust_rad_adjust(mode 2)逻辑:在每个格点本地时间跨越 t_scenario_sol=14/24 sol(即 14:00)时更新目标,目标 = tau_pref_scenario_next*ps/odpref/taudust(上限 5),再在前后两天的 14:00 端点间按本地时间线性插值。
源码依据:dust_rad_adjust_mod.F90 第 66-119 行;dust_param_mod.F90 第 28 行 t_scenario_sol。
阶段 4:地表抬升与注入
风应力抬升(
dust_windstress_lift):在 GCM 非doubleq分支中由vdifc调用。当摩擦速度us = pcdh/sqrt(pcdh_true)超过阈值ust = sqrt(stress_seuil/rho)(stress_seuil=0.0225 N/m²)时,水平通量fhoriz = 2.61*(rho/g)*(us-ust)*(us+ust)^2(White 1979),垂直注入通量dqslift(ig,iq) = -alpha_lift(iq)*fhoriz。有 CO₂ 冰覆盖(co2ice>0)的点不抬升。源码依据:
dust_windstress_lift.F90第 102-162 行;vdifc_mod.F第 813-883 行。GCM
doubleq分支边界:vdifc_mod.F中lifting先进入doubleq判断。doubleq=.true.且dustinjection=0时使用 old injection scheme,直接给dust_mass/dust_number设置-alpha_lift源项;dustinjection=1时用compute_dtau产生的dustliftday注入。只有落到非doubleq的else分支时才调用dust_windstress_lift()。因此在当前 GCM two-moment dust 配置下,lifting=.true.不能等同于风应力阈值起尘。源码依据:
vdifc_mod.F第 813-883 行;conf_phys.F第 553-604 行。尘卷风(
dustdevil,callddevil=T):基于 Renno et al. 1998,尘卷风活动devila = max(0,(1-b)*Fs - seuil),其中Fs为地表感热通量(用固定风速 15 m/s),抬升通量pdqs_dev = -alpha_devil*devila,并把尘埃注入到边界层顶。源码依据:
dustdevil.F90第 137-221 行。场景注入(
compute_dtau,dustinjection>0):在本地 14:00 时计算 GCM 与场景目标光学厚度差dtau,当dtau>0时给出注入率dustliftday = coeff_injection*(dtau*ps/odpref)/(daysec*(tf-ti)),该率随后在vdifc中用于注入。源码依据:
compute_dtau_mod.F90第 87-102 行;vdifc_mod.F第 813-857 行。
阶段 5:沉降(callsedim)
尘埃(与水冰)按重力沉降回地表。
沉降调度见 callsedim_mod,单粒径下落速度公式和 Stokes-Cunningham 修正见 newsedim_mod,守恒输运格式见 vlz_fi。
数据依赖
| 数据 | 来源 | 用途 |
|---|---|---|
dust_*.nc 尘暴场景 |
datadir/(callphys.def 的 datadir) |
提供 tau_pref_scenario 用于缩放/注入 |
光学属性(QREFvis3d/QREFir3d) |
经 callradite/suaer 查找表 |
光学厚度计算的消光效率 |
rho_dust、ref_r0、r3n_q、alpha_lift、alpha_devil |
tracer_mod |
密度、参考半径、半径换算与抬升系数 |
stress.def(仅 MESOSCALE 编译) |
工作目录 | 自定义抬升阈值 |
源码依据:read_dust_scenario_mod.F90 第 100-110 行;dust_windstress_lift.F90 第 60-84 行(#ifdef MESOSCALE)。
与其他主题的耦合
| 其他主题 | 耦合方式 |
|---|---|
| 辐射 | aerosol(缩放后的尘埃光学厚度)直接进入 lwmain/swmain;尘埃粒径 reffrad 决定光学属性。详见 themes/radiation.md |
| 水循环 | 尘埃作为水冰凝结核(CCN),updaterccn/微物理使用尘埃;尘埃粒径影响水冰云 |
| CO₂ 循环 | 尘埃作为 CO₂ 冰凝结核(updaterccnCO2);CO₂ 冰覆盖地表时抑制尘埃抬升(co2ice>0 则不抬升) |
| 边界层/扩散 | vdifc 同时处理尘埃湍流扩散与风应力抬升;尘卷风依赖边界层结构 |
| 动力核心 | 辐射加热(受尘埃控制)驱动环流,风场反过来决定抬升与输运 |
源码依据:vdifc_mod.F 第 31、43 行 use dust_param_mod/use dust_windstress_lift_mod;updaterad.F90 第 255-292 行 updaterccn/updaterccnCO2。
输出结果
| 输出 | 去向 | 含义 |
|---|---|---|
aerosol |
辐射模块 | 各层尘埃光学厚度 |
dsodust/dsords/dsotop |
诊断输出 | 背景/暴/地形尘的密度缩放红外光学厚度(与观测比较) |
tau_pref_gcm |
诊断/缩放 | GCM 尘埃柱光学厚度(610 Pa) |
tau_pref_scenario |
缩放/诊断 | 场景目标光学厚度 |
tau_pref_target、dtau、dustliftday |
write_output 诊断 |
注入方案诊断量 |
rdust |
诊断/微物理 | 尘埃粒径 |
尘埃示踪剂趋势 pdq* |
大气示踪剂演化 | 抬升/注入/沉降/输运对尘埃质量与数量的趋势 |
源码依据:compute_dtau_mod.F90 第 83-108 行的 write_output;aeropacity_mod.F 输出参数列表第 95-117 行。
伪代码总览
! ---- 每个物理步,按 physiq 顺序 ----
! A. 辐射前:粒径与光学厚度
CALL updatereffrad(...) ! rdust = (r3n_q*qdust/ndust)^(1/3) ; reffrad
CALL aeropacity(...)
IF (iaervar/=1) CALL read_dust_scenario(... tau_pref_scenario)
DO 各层各尘类:
aerosol = 0.75*QREFvis3d/(rho_dust*reffrad)*qmass*dp/g
累加 dsodust, tau_pref_gcm
CALL compute_dustscaling(...)
SELECT CASE (dustscaling_mode)
CASE(1): tauscaling = tau_pref_scenario*ps/odpref/taudust
aerosol = max(1e-20, aerosol*tauscaling)
CASE(2): CALL compute_dust_rad_adjust(...) ! 跨 sol 14:00 插值
aerosol = max(1e-20, aerosol*dust_rad_adjust)
CASE(0): tauscaling = 1 ! freedust
! (随后 lwmain/swmain 使用 aerosol —— 见辐射主题)
! B. 输运与注入
IF (rdstorm) CALL rocketduststorm(...)
IF (topflows) CALL topmons(...)
IF (dustinjection>0) CALL compute_dtau(... dustliftday)
! C. 抬升(在 vdifc 内)
IF (lifting) THEN
IF (doubleq) THEN
IF (dustinjection==0) 使用 old constant lifting 源项
IF (dustinjection==1) 使用 dustliftday 注入
ELSE
CALL dust_windstress_lift(... dqslift) ! 风应力阈值路径
ENDIF
ENDIF
IF (callddevil) CALL dustdevil(... pdqdev,pdqs_dev)
! D. 沉降
CALL callsedim(...) ! 尘埃 + 水冰复现检查点
必须保留的逻辑
- 二阶矩半径公式:
rdust = (r3n_q*qdust/ndust)^(1/3),并保留r3dustmin/max阈值截断。 - 光学厚度公式:
0.75*QREF/(rho_dust*reffrad)*qmass*dp/g,可见光用QREFvis3d,红外(dsodust)用QREFir3d。 - 参考压力 610 Pa:所有柱光学厚度换算都用
odpref=610(旧 TES 文件需 700→610 校正)。 - 缩放模式选择:
dustscaling_mode与freedust/doubleq/iaervar的互斥约束必须保留,否则运行会中止。 - 抬升阈值与公式:White 1979 水平通量公式与
stress_seuil=0.0225;CO₂ 冰覆盖点不抬升。注意该路径在当前 GCMdoubleq=.true.分支中不会被dustinjection=0调到。 dust_rad_adjust跨 sol 插值:以本地 14:00(t_scenario_sol=14/24)为锚点,上限 5。
关键公式
- 几何平均半径:
rdust = (r3n_q*qdust/ndust)^(1/3) - 层光学厚度:
aerosol = 0.75*QREFvis3d/(rho_dust*reffrad)*qmass*(p_l - p_{l+1})/g - mode1 缩放:
tauscaling = tau_pref_scenario*ps/odpref/taudust - 风应力水平通量:
fhoriz = 2.61*(rho/g)*(us-ust)*(us+ust)^2,ust = sqrt(stress_seuil/rho) - 注入率:
dustliftday = coeff_injection*(dtau*ps/odpref)/(daysec*(tf-ti))
验证检查点
- 光学厚度合理性:背景尘埃可见光柱光学厚度典型 0.1-1(晴期),尘暴期可达数倍。
dustscaling_mode=0的 10 天短试验已见 dust-free-evolution-tests:dust devil 候选 E 的tau_pref_gcm10 天均值约 0.526,末值约 0.482;仍需长积分验证。 - 缩放一致性:mode1 下
tau_pref_gcm经缩放后应≈tau_pref_scenario。 - 质量守恒:抬升/注入为负趋势(离开地表),沉降为正向地表通量,长期收支应闭合。待确认:未核验收支闭合实现。
- 自由尘埃配置边界:当前 def-only 候选为
freedust=.true.,dustscaling_mode=0,lifting=.false.,dustinjection=0,callddevil=.true.;若要 two-moment 风应力阈值起尘,需要源码改造或新增分支。
相关模块
- 高分辨率稳定性:高分辨率下的沙尘数值稳定性
- 辐射:
callradite_mod.F、lwmain_mod.F、swmain_mod.F、aeroptproperties.F、suaer.F90(见 radiation.md) - 粒径:
updaterad.F90、updatereffrad_mod.F - 抬升/注入:
dust_windstress_lift.F90、dustdevil.F90、compute_dtau_mod.F90 - 缩放:
dust_scaling_mod.F90、dust_rad_adjust_mod.F90、read_dust_scenario_mod.F90 - 暴尘/地形尘:
rocketduststorm_mod.F90、topmons_mod.F90 - 微物理:
dust_coagulation_mod.F90、watercloud_mod.F、improvedclouds_mod.F90 - 沉降:
callsedim_mod.F
待确认
submicron(亚微米尘)分布在抬升/输运中的完整处理(vdifc第 815 行起doubleq.AND.submicron分支)只读到片段。- 各尘埃光学厚度的典型量级已有 10 天 free-dust 试验补充,但长积分稳定性、季节尺度偏差与收支闭合仍未完成数值验证。
physiq中rocketduststorm/topmons/compute_dtau与沉降段的完整控制流分支条件未全部展开(仅按行号顺序判断)。- GCM
doubleq=.true.分支下接入风应力阈值 lifting 的设计尚未实现;现有dustinjection=0是 old constant lifting。