vdifc 水汽地表交换段
本页只追踪 vdifc(垂直湍流扩散例程)中 h2o_vap 与地表/地下冰交换的代码段:自适应子时间步、隐式三对角求解的地表边界条件、watersat 饱和约束、soilwater 吸附耦合、地下冰(SSI)通量,以及输出 pdqsdif(igcm_h2o_ice)/dwatercap_dif。不覆盖 vdifc 的动量/位温扩散、CO2 质量变化方案、尘埃抬升或 HDO 段。
所属文件
LMDZ.MARS\libf\phymars\vdifc_mod.F
源码 1530 行。本页核心段 h2o_vap 处理在行 959–1315;其前置的「非水汽示踪物」段(含 h2o_ice 地表通量注入)在行 900–957。
所属模块
vdifc_mod(SUBROUTINE vdifc / vdifc_mod 内)
相关 use 与声明
| 行 | 对象 | 用途 |
|---|---|---|
| 19–22 | igcm_h2o_vap, igcm_h2o_ice, igcm_co2 |
tracer 索引 |
| 23–24 | watercaptag, frost_albedo_threshold, dryness, old_wsublimation_scheme |
永久冰盖标记、霜反照率阈值、地表干度、旧升华方案开关 |
| 26 | watersat |
计算饱和混合比 qsat(T,p) |
| 35 | To(来自 microphys_h) |
三相点温度(潜热公式、融化封顶) |
| 36–37 | coef_ssdif, h2oice_depth, lag_layer, zdqsdif_ssi_tot(paleoclimate_mod) |
地下冰扩散系数、冰埋深、滞后层开关、SSI 总通量诊断 |
| 38 | adsorption_soil(comsoil_h) |
是否启用完整吸附/解吸地下水模型 |
| 44–47 | water, latentheat_surfwater(callkeys_mod) |
水循环主开关、地表水潜热反馈开关 |
段内关键局部变量(声明见行 145–251):
| 变量 | 含义 |
|---|---|
za(ngrid,nlay) |
ρ·dz = (pplev(l)-pplev(l+1))/g,层质量(行 326) |
zb0(ngrid,nlay) |
扩散系数基量;zb0(:,1)=ptimestep·pplev(:,1)/(r·ptsrf_tmp)(行 343),地表项 |
zb,zc,zd,z1 |
隐式三对角求解的工作数组(向下扫描系数) |
zq_tmp_vap(ngrid,nlay,nq) |
子时间步内的水汽工作副本 |
zq1temp(ig) |
求解出的第 1 层(近地层)水汽混合比 |
qsat(ig) |
地表温度下的饱和混合比 |
zdqsdif_surf / zdqsdif_tot |
子时间步地表水汽通量(湍流 / 含地下贡献的总和) |
zqsurf(ig) |
该坡度的地表水冰储量(去坡度投影后,kg/m²) |
nsubtimestep(ig) |
自适应子步数(make_tsub 给出) |
dtmax=0.5 |
子步温度判据(K,行 188) |
Tice, qsat_ssi, resist |
地下冰温度、其饱和混合比、通量衰减阻力系数 |
控制条件与总体结构
整段在示踪物循环 do iq=1,nq 内,由 if ((water).and.(iq.eq.igcm_h2o_vap))(行 965)守卫,到行 1313 END IF 结束。内层是坡度循环 DO islope=1,nslope(行 967)与列循环 DO ig=1,ngrid(行 984),再套自适应子时间步循环 DO tsub=1,nsubtimestep(ig)(行 990)。
do iq: if water .and. iq==h2o_vap:
DO islope:
zqsurf = pqsurf(h2o_ice,islope)/cos(slope) ! 去坡度投影
make_tsub -> nsubtimestep ! 自适应子步数
saved_h2o_vap = zq(:,1,h2o_vap)
DO ig:
subtimestep = ptimestep/nsubtimestep(ig)
zq_tmp_vap = zq
DO tsub=1,nsubtimestep(ig):
构造 zb(地表项用 zcdv 或 zcdh,乘 dryness)
向下扫描 zc/zd(隐式三对角)
watersat -> qsat(ztsrf)
zq1temp = zc(1) + zd(1)*qsat ! 地表边界 = qsat
zdqsdif_surf = rho·dryness·zcd·(zq1temp-qsat)
zdqsdif_tot = zdqsdif_surf
[无霜判据] exchange = ...
if adsorption_soil: call soilwater(...) 改写 zq1temp/zdqsdif_tot
elif 无霜可升华超量: 钳制 + 可选地下冰<->大气通量
[有霜+地下冰]: frost<->ssi 通量
zq_tmp_vap(1,h2o_vap)=zq1temp
if latentheat_surfwater: zdtsrf = zdqsdif_tot·lh/pcapcal
向上回代 zq_tmp_vap(2..nlay)
zqsurf += zdqsdif_tot·subtimestep;钳到 >=0(非 watercap)
累计 SSI/潜热诊断;冰存在时温度封顶 To
ENDDO tsub
pdtsrf = (ztsrf-ptsrf)/ptimestep
pdqsdif(h2o_ice,islope) = (zqsurf - pqsurf/cos)/ptimestep
if watercaptag .and. 超量升华: 走 dwatercap_dif,pdqsdif 钳到 -qsurf/dt
zq_slope_vap(...,islope)=zq_tmp_vap
ENDDO ig
ENDDO islope
zq(h2o_vap) = Σ_islope zq_slope_vap·subslope_dist ! 坡度平均回大气
pdqsdif(h2o_ice,:) *= cos(slope);dwatercap_dif *= cos(slope) ! 回投影
核心计算步骤
1. 去坡度投影与自适应子步(行 970–979)
zqsurf = pqsurf(igcm_h2o_ice,islope)/cos(pi·def_slope_mean(islope)/180),把坡度投影后的地表冰储量还原为单位真实面积上的量。make_tsub(定义在行 1445)按地表温度变化率估升华,子步数 ntsub = ceiling(|ptimestep·dtsurf/dtmax|);只有在永久冰盖 watercaptag 或霜厚 ≥frost_albedo_threshold 时才细分,否则 ntsub=1。目的是把地表水冰升华潜热释放分摊到足够小的步长,控制每步温度变化 ≤ dtmax=0.5 K。
2. 隐式三对角向下扫描(行 992–1016)
地表交换系数 zb(:,1):old_wsublimation_scheme 用动量整体系数 zcdv,否则用热整体系数 zcdh(行 994–1000),再乘地表干度 dryness(行 1001)。各层 zb=zkh·zb0。从顶层向下递推消元系数 zc/zd(标准 Thomas 算法前扫),到第 1 层得 zc(1)。
3. 饱和地表边界条件(行 1018–1028)
call watersat(1,ztsrf,pplev(1),qsat) 求地表温度下饱和混合比。地表边界取 zq1temp = zc(1) + zd(1)·qsat,即近地层水汽被拉向 qsat(地表是饱和源/汇)。湍流地表通量
zdqsdif_surf = rho · dryness · zcd · (zq1temp - qsat)
正值表示水汽向上(升华),负值表示向地表沉积(凝霜)。zdqsdif_tot 初始化为 zdqsdif_surf。
4. 地下/吸附耦合(行 1035–1204,三选一分支)
- 吸附模型(
adsorption_soil,行 1051–1073):调用soilwater(见 soilwater),传入饱和约束、三对角系数、地表冰储量与孔隙冰,返回改写后的zq1temp_regolith/zdqsdif_regolith。无watercaptag时:exchange=true走纯地下吸附(zq1temp取 regolith 解,zdqsdif_tot=-zqsurf/subtimestep),否则zdqsdif_tot = zdqsdif_surf + zdqsdif_regolith。 - 无吸附、无霜超量升华(行 1083–1159):当
-zdqsdif_tot·subtimestep ≥ zqsurf(要升华的超过现有霜),先把通量钳到-zqsurf/subtimestep。若埋深h2oice_depth>0且lag_layer,引入滞后层阻力resist = h2oice_depth·zcd/coef_ssdif,把地表系数缩放1/(1+resist),调用compute_Tice求冰温、watersat求qsat_ssi(再按ztsrf/Tice缩放),重解第 1 层并算地下冰→大气通量zdqsdif_ssi_atm。 - 有霜 + 地下冰(行 1166–1204):仍有霜(
watercaptag或zqsurf>tol_frost)时计算霜↔︎地下冰通量zdqsdif_ssi_frost = coef_ssdif/h2oice_depth·rho·dryness·(qsat-qsat_ssi),并从zdqsdif_tot中扣除;当扣除会使升华超量时再钳制。
5. 子步水/温预算(行 1208–1248)
zq_tmp_vap(1,h2o_vap)=zq1temp 后,若 latentheat_surfwater:潜热 lh=(2834.3-0.28(T-To)-0.004(T-To)²)·1e3(升华焓,J/kg),地表温度倾向 zdtsrf = zdqsdif_tot·lh/pcapcal。向上回代得各层水汽。子步末更新 ztsrf += (pdtsrf+zdtsrf)·subtimestep、zqsurf += zdqsdif_tot·subtimestep,并把 zqsurf 钳到 ≥0(非 watercap)。冰仍存在时把温升封顶到 To(防止有冰却升温越过三相点,行 1243–1248)。
6. 子步积分回主步(行 1256–1311)
pdtsrf = (ztsrf-ptsrf)/ptimestep;地表水冰倾向
pdqsdif(ig,igcm_h2o_ice,islope) = (zqsurf - pqsurf(h2o_ice)/cos) / ptimestep
watercaptag 且升华超过现有霜时,多出的部分计入 dwatercap_dif(永久冰盖储库消耗,<0),并把 pdqsdif(h2o_ice) 钳到只消耗现有霜。坡度循环结束后,zq(h2o_vap) 用 subslope_dist 做坡度加权平均回到网格大气值(行 1290–1299),pdqsdif(h2o_ice) 和 dwatercap_dif 再乘 cos(slope) 回到坡度投影量(行 1301–1311)。
与「非水汽示踪物」段的关系(行 900–957)
h2o_vap 之前,所有其他示踪物(含 h2o_ice)在行 900–957 处理。其中地表系数 zb(:,1)=0(行 906,无湍流地表通量),但 h2o_ice/hdo_ice 走特例:地表边界只做层间混合(行 924–932),普通示踪物则把抬升通量 -pdqsdif_tmp(iq) 作为地表源注入(行 937–939)。pdqsdif(iq,islope)=pdqsdif_tmp(iq)·cos(slope)(行 951)。注意:h2o_ice 的地表倾向真正的物理值是在后面的 h2o_vap 段算出并写入 pdqsdif(igcm_h2o_ice,...) 的——这里的循环条件 (.not.water).or.(.not.iq==h2o_vap).or.(.not.iq==hdo_vap)(行 901–902)逻辑上恒为真(见待确认),但 h2o_vap 自身在 else 体外、由行 965 的专段处理。
边界条件与保护逻辑
- 升华量不能超过现有地表霜:多处把
zdqsdif_tot钳到-zqsurf/subtimestep(行 1094、1150、1196)。 zqsurf<0时(非 watercap)置 0(行 1227–1229)。- 有冰时地表温度不得越过
To(行 1243–1248)。 watercaptag永久冰盖:升华超量走dwatercap_dif,地表霜倾向钳制(行 1273–1285)。- 坡度投影:进入用
/cos,输出用·cos,保证pqsurf/pdqsdif始终是坡度投影量。
输入数据来源
pqsurf(:,igcm_h2o_ice,:):地表水冰储库(按坡度),来自上游地表状态。ptsrf, pdtsrf:地表温度及其倾向(被本段更新)。zcdv/zcdh:整体气动力导度,前面vdif_cd算出(行 425–431)。ptsoil, qsoil:土壤温度/土壤示踪物(吸附与地下冰用)。h2oice_depth, coef_ssdif:来自古气候/地下冰模块paleoclimate_mod。- 配置开关:
water、latentheat_surfwater、adsorption_soil、old_wsublimation_scheme、lag_layer。
输出与副作用
| 输出 | 含义 |
|---|---|
pdqsdif(ig,igcm_h2o_ice,islope) |
地表水冰升华/沉积倾向(kg/m²/s,坡度投影) |
dwatercap_dif(ig,islope) |
永久冰盖储库消耗倾向(<0,坡度投影) |
pdtsrf(ig,islope) |
地表温度倾向(含水冰潜热反馈) |
zq(ig,:,igcm_h2o_vap) |
近地及各层水汽混合比(坡度平均后写回,供后续 pdqdif 在行 1436 算大气倾向) |
zdqsdif_ssi_tot(:, :) |
地下冰总交换通量诊断(write_output 'flux_ssice',行 1400) |
surf_h2o_lh |
地表水潜热通量诊断 |
zq 更新后在行 1436 经 pdqdif=(zq-(pq+pdqfi·dt))/dt 转成大气水汽扩散倾向输出。
复现注意事项
- 自适应子步只在有霜/永久冰盖处启用;无霜格点
nsubtimestep=1。复现潜热反馈时必须保留这一自适应细分,否则强升华格点温度会振荡。 - 地表边界是「拉向
qsat」的隐式条件,不是固定通量;dryness干度系数线性缩放地表水汽导度。 old_wsublimation_scheme切换地表用动量导度zcdv还是热导度zcdh,影响升华率,复现历史结果时需对齐该开关。- 三个地下/吸附分支互斥:
adsorption_soil优先;否则按有无霜、有无地下冰走 SSI 通量分支。lag_layer关时退化为只有地表霜的经典方案。 - 坡度投影必须成对(进
/cos、出·cos),漏掉会导致按坡度面积的质量不守恒。 - 潜热公式
lh=(2834.3-0.28(T-To)-0.004(T-To)²)·1e3(升华焓拟合,来源见行 164 注释 Montmessin et al. 2004)。
待确认
- 行 901–902 逻辑疑点:
if ((.not. water).or.(.not. iq.eq.igcm_h2o_vap).or.(.not. iq.eq.igcm_hdo_vap))用.or.连接三个否定条件,对任意iq恒为真(iq不可能同时等于h2o_vap和hdo_vap,故(.not. iq==h2o_vap)与(.not. iq==hdo_vap)至少一真)。复现风险:该守卫看似想「排除 h2o_vap/hdo_vap」,但实际不排除任何示踪物;不过h2o_vap的真正处理在行 965 专段,普通段对h2o_vap的计算结果随后被专段覆盖,推断无净效果。需对照上游版本确认是否为已知冗余/笔误(应为.and.串联)。 soilwater的吸附/解吸内部解法、pore_icefraction的更新细节超出本段范围,见 soilwater。compute_Tice(行 1484)线性插值地下冰温的有效性,依赖mlayer土壤网格定义,细节见对应页面。- HDO 段(行 1317+)依赖本段输出的
saved_h2o_vap/qsat_tmp,调用hdo_surfex;属同位素分馏,超出本页范围。