水循环主题

主题目标

本页串联 LMDZ.MARS 中水汽、云冰、地表霜、地下冰和诊断输出的主流程,目标是让读者能沿源码复现一个物理时间步中的水循环计算:

  1. physiq 中何处调用 watercloud,调用前后哪些 tendency 被注入。
  2. watercloud_mod 如何按 microphys 分派到 simplecloudsimprovedclouds
  3. watersattcondwater 如何提供水冰饱和混合比和凝结温度。
  4. vdifc 如何处理水汽地表交换,并在 adsorption_soil 分支耦合 soilwater 的吸附水/地下冰储库。
  5. waterice_tifeedback 如何把地表/孔隙水冰反馈到土壤热惯量,再影响地温。
  6. 配置开关、tracer、XIOS 输出如何决定水循环是否可运行、可诊断。

源码依据:本页核验了 physiq_mod.Fwatercloud_mod.Fwatersat_mod.F90tcondwater.F90vdifc_mod.Fsoilwater.F90waterice_tifeedback_mod.F90conf_phys.Fdeftank/callphys.def.GCM6traceur.def.watercycle.GCM5deftank/xios/field_def_physics.xmldeftank/xios/file_def_physics.xml。更细的文件级证据见相关子页。

入口

入口例程 文件 说明
physiq libf/phymars/physiq_mod.F 主物理时间步入口;在 IF (water) 块内调用 watercloud,随后注入水汽/水冰/CCN/尘埃 tendency,并把水云结果交给沉降、化学和诊断。
watercloud libf/phymars/watercloud_mod.F 大气水冰云主调度;按 microphys 选择简化云或完整微物理云,统一处理非负保护、半径更新、CLFvarying 缩放和 rsedcloud
vdifc 水汽地表交换段 libf/phymars/vdifc_mod.F 边界层/地表侧入口;对 h2o_vap 构造拉向饱和的隐式下边界,计算地表霜升华/沉积、永久冰盖消耗、地下冰/吸附水通量。
waterice_tifeedback libf/phymars/waterice_tifeedback_mod.F90 热惯量反馈入口;由 physiq 在土壤求解前后调用,把地表水冰或孔隙冰转换成新的土壤热惯量廓线。

参与文件

文件 参与阶段 作用
physiq_mod.F 主时间步调度 调用辐射、watercloudcallsedim、诊断输出;决定水云 tendency 注入顺序。
watercloud_mod.F 大气云调度 分派 simpleclouds/improvedclouds,更新 ricenuicersedcloudrhocloudtotcloudfrac
simpleclouds_mod.F 简化云方案 microphys=.false. 时瞬时调到饱和;无显式成核动力学。
improvedclouds_mod.F90 完整云微物理 microphys=.true. 时处理 CCN 成核、冰增长/升华、尘核释放、HDO 分馏和自适应子步。
watersat_mod.F90 饱和公式 给定温度和压力,计算水冰饱和质量混合比 qsat
tcondwater.F90 凝结温度反解 给定压力和总水混合比,反解水凝结温度;CLFvarying 云分数使用。
vdifc_mod.F 地表交换 计算地表水汽通量、地表水冰 tendency、潜热反馈、地下冰/吸附分支。
soilwater.F90 地下储库 adsorption_soil=.true. 时被 vdifc 调用,求解 regolith 水汽、吸附水、地下冰的吸附-扩散-相变。
waterice_tifeedback_mod.F90 热惯量反馈 根据地表水冰厚度或孔隙冰填充率重算土壤热惯量。
conf_phys.F / callphys.def.* 配置 读取并校验 watermicrophysactivicesupersatcloud_adapt_tssurfaceice_tifeedback 等开关。
traceur.def.* / initracer.F90 tracer 给出 h2o_vaph2o_iceccn_*dust_*、HDO 等 tracer 名称和索引。
deftank/xios/*.xml / writediagsoil.F90 输出 XIOS XML 定义并选择水汽、水冰、地表冰、地下通量、云 tendency 等字段;writediagsoil 负责传统 diagsoil.nc 地下剖面输出。

主调用链

physiq
  -> callradite(... rice, nuice, rdust ...)          ! 本步辐射先使用上一状态/上一步留下的半径
  -> IF (water):
       call watercloud(... pq,pdq,pdt, tau, tauscaling,
                       rdust, rice, nuice, rsedcloud, rhocloud, totcloudfrac)
         -> IF (microphys):
              improvedclouds(...)                   ! 成核、增长/升华、CCN/尘埃耦合
            ELSE:
              simpleclouds(...)                     ! 瞬时饱和调整
         -> watersat / tcondwater / updaterice_* / updaterdust
       inject zdtcloud/zdqcloud into pdt/pdq
  -> IF (sedimentation):
       callsedim(... rice, rsedcloud, rhocloud ...)  ! 水冰沉降
  -> diagnostics / XIOS write_output

vdifc
  -> IF (water .and. iq == h2o_vap):
       watersat(ztsrf, pplev(:,1)) -> qsat
       implicit lower boundary pulls near-surface vapor toward qsat
       optional soilwater(...) when adsorption_soil
       update pdqsdif(h2o_ice), dwatercap_dif, pdtsrf, flux_ssice

physiq
  -> IF (surfaceice_tifeedback .or. poreice_tifeedback):
       waterice_tifeedback(qsurf(h2o_ice), pore_icefraction) -> inertiesoil_tifeedback
       soil(..., inertiesoil_tifeedback, ...)

计算阶段

1. 配置与 tracer 准备

水循环必须从配置开始复现。conf_phys.Fwater 的源码默认值为 .false.,样例 callphys.def.GCM6 显式设为 .true.;完整水云微物理通常还需要 microphys=.true.temp_dependent_m=.true.cloud_adapt_ts=.true.scavenging=.true.。源码校验会中止若 microphys 没有同时满足 waterdoubleq,也会中止若 scavenging 没有 microphys

最小水循环 tracer 是 h2o_iceh2o_vap。微物理路径还依赖 ccn_numberccn_massdust_numberdust_mass;HDO 路径依赖 hdo_vaphdo_icetraceur.def.watercycle.GCM5 的样例包含 co2、两类尘埃、两类 CCN、h2o_iceh2o_vap

源码依据:conf_phys.F:715 读取 water:852 读取 microphys:858 读取 supersat:879 读取 cloud_adapt_ts:906-911 校验 microphys:921-926 校验 scavengingtraceur.def.watercycle.GCM5:7-8 给出 h2o_ice/h2o_vap

2. 辐射先使用当前 rice

physiqwatercloud 前调用 callradite。该辐射调用以 rdustricenuiceINOUT,用于当前步辐射和 taucloudtes 等量。随后 watercloud 使用同一组半径数组并更新它们,更新后的 rice 再供本步 callsedim、诊断和下一步辐射使用。

复现风险:不能把 watercloud 提前到辐射前,否则 rice 的时间层会改变。physiq-water-cycle-callpoints.md 明确把时序写成“本步辐射用上一步留下的 rice,水云随后更新供后续沉降/诊断和下一步辐射”。

3. watercloud 分派云方案

physiq_mod.F:1831IF (water) 内调用 watercloudwatercloud_mod.F:315-349 的关键分支是:

watercloud 返回 pdqcloudpdtcloudricenuicersedcloudrhocloudtotcloudfrac。随后它统一执行非负保护、watersat 过饱和限制(microphyssupersat=false)、updaterice_micro/updaterice_typ 半径更新、rsedcloud=max(rice*(1+nuice_sed)^3, rdust),并在 CLFvarying 时把云内 tendency 乘回 cloudfrac

源码依据:watercloud_mod.F:316 调用 improvedclouds:349 调用 simpleclouds:564 调用 watersatsupersat=false 检查;:618 调用 updaterice_micro:638 调用 updaterice_typ:665 计算 rsedcloud:677 进入 CLFvarying 缩放。

4. 简化云与完整微物理的差别

simpleclouds 是瞬时饱和调整:先用 pq + pdq*dtpt + pdt*dt 得到局地状态,调用 watersat,若水汽超过 zqsat 就把超量全部转成水冰;若不饱和,就让现有水冰升华但不超过冰量。潜热用温度二次式:

lw = (2834.3 - 0.28*(T-To) - 0.004*(T-To)^2) * 1000

improvedclouds 是完整微物理:先计算 zqsat 和可凝结量,再在每个格点/层内做子步循环。若 satu >= 1,用 updaterccn、尘埃 log-normal bin、nuclea 把可用尘埃激活为 CCN;若 CCN 数量足够,用 updaterice_microsig_h2ogrowthrate 和隐式 dMice 公式处理冰增长/升华;冰耗尽时释放 CCN 回尘埃。cloud_adapt_ts 为真时,adapt_imicro 会按可凝结量和经验幂律更新子步数。

待确认:improvedcloudsseq 的单位匹配、nuice_sed 同时用于成核分布方差和沉降的物理含义仍以子页的待确认项为准;这里仍按待确认项处理。

5. 饱和与凝结温度公式

watersat 给定温度 T 和压力 P,使用硬编码分子量比:

epsi = 18 / 44
psat = 100 * 10^(2.07023 - 0.00320991*T - 2484.896/T + 3.56654*log10(T))
if psat > P:
  qsat = 1
else:
  qsat = epsi*psat/(P - (1-epsi)*psat)
  qsat = max(qsat, 1e-30)

tcondwater 给定压力和总水混合比 q,先算:

x = log10(max(q, 1e-16) * p / (100 * 0.41))
tcond = 252.846556
      + 23.9229653*x
      + 2.21333897*x^2
      + 0.179978042*x^3
      + 0.0100068018*x^4
      + 0.000255145044*x^5

复现风险:epsi=18/440.41 都把干大气近似为 CO2;若要复现非纯 CO2 平均分子量情形,不能只改外部 mmean,因为这两个助手没有读取 mmeantcondwater 的拟合适用范围也未在源码注释中明确。

6. physiq 注入 tendency

watercloud 返回后,physiq 按固定顺序注入:

  1. activice=true 时,pdt += zdtcloud。若 activice=false,水云仍改水汽/水冰 tracer,但不把潜热反馈进温度。
  2. 无条件注入 h2o_vaph2o_icezdqcloud
  3. hdo=true 时注入 hdo_vaphdo_ice
  4. microphys=true 时注入 ccn_massccn_number,并对成对质量/数浓度做负值保护。
  5. scavenging=true 时注入 dust_massdust_number,并做同样的成对负值保护。

源码依据:physiq_mod.F:1837-1908。复现时不能打乱这个顺序,尤其是 CCN 和尘埃的成对保护,否则单精度舍入导致的负值修正会不同。

7. 与沉降、辐射和诊断的关系

水冰沉降不在 watercloud 内完成,而在 physiq 第 9b 段调用 callsedimcallsedim 使用 watercloud 更新出的 ricersedcloudrhocloud,返回 zdqsedzdqssed,再注入大气 pdq 和地表 dqsurf。因此顺序是“水云先凝结/升华并更新半径,沉降再用这些半径沉降”。

诊断通常在 zq = pq + pdq*ptimestep 后进行,使用包含水云、沉降等全部 tendency 的更新态。physiq 里可见 watersat 用于诊断过饱和度,write_output 输出 h2o_iceh2o_vaph2o_ice_sricezdqcloud_icezdqcloud_vap 和二者之和。XIOS XML 还定义 mtoticetotrefficeNccntotMccntotflux_ssicewatercap、各坡面地表水冰等字段;是否进入文件取决于 file_def_physics.xml 是否引用。

8. vdifc 地表水汽交换

vdifc 的水汽段由 if ((water).and.(iq.eq.igcm_h2o_vap)) 控制。它对每个坡面把地表水冰 pqsurf(h2o_ice,islope) 除以 cos(slope) 转成真实坡面面积上的储量,然后用 make_tsub 在有霜/永久冰盖时按地表温度变化细分子步。

每个子步中,vdifc 构造隐式三对角扩散系数。地表边界调用 watersat(1,ztsrf,pplev(:,1),qsat),把近地层水汽拉向地表温度下的饱和混合比:

zq1temp = zc(1) + zd(1)*qsat
zdqsdif_surf = rho * dryness * zcd * (zq1temp - qsat)

这里正值表示向上升华,负值表示向地表沉积。old_wsublimation_scheme 决定地表交换系数用动量导度 zcdv 还是热导度 zcdhdryness 线性缩放地表水汽导度。若 latentheat_surfwater 为真,地表潜热通量会反馈到 pdtsrf

输出侧,vdifc 更新 pdqsdif(h2o_ice)dwatercap_difpdtsrfzq(h2o_vap),并对坡面量成对做 /cos*cos 投影。watercaptag 永久冰盖上超出当前霜量的升华会走 dwatercap_dif

9. soilwater 吸附和地下冰耦合

adsorption_soil=truevdifc_mod.F:1052 逐点逐坡面调用 soilwatersoilwater 维护 regolith 中三类地下 tracer:h2o_vap_soilh2o_ice_soilh2o_ads_vap

它在首次调用时分配 SAVE 数组并读取 pqsoil 初值;每步根据孔隙冰饱和度更新扩散系数,用 choice_ads 选择吸附/解吸方案,用嵌套迭代处理单层吸附饱和、地下凝结/升华和冰层关闭。返回给 vdifc 的关键量是 zdqsdifrego(地下到大气水汽通量)和 zq1temp2(耦合后的近地水汽边界值)。当孔隙冰饱和度超过 choke_fraction=0.8 时,soilwater 会按通量方向关闭相邻层间扩散。

待确认:choice_adscomsoil_h 中声明为实数但代码用 ==0/1/2 比较;注释里“3 means no adsorption”与实际 choice_ads==0 不一致。latitude_degH2O/H2O_depth 等地图变量有遗留痕迹。复现地下水储库时应优先参考 soilwater.md 的待确认和风险列表。

10. 水冰热惯量反馈

waterice_tifeedback 不直接改 tracer,也不直接改地温;它只计算 newtherm_i(ngrid,nsoil,nslope),随后由 soil 地温求解使用。physiq_mod.F:737:2487surfaceice_tifeedback.or.poreice_tifeedback 时调用该例程。

两条路径互斥:

复现风险:surfaceice_tifeedback 还依赖 watercallsoilporeice_tifeedback 依赖 adsorption_soilinert_h2o_ice 可由配置覆盖,样例 GCM6 用 800,而源码默认是 2400;孔隙冰路径的 inertie_purewaterice=2100 是例程内部硬编码值,不能混用。

状态变量

变量 来源 单位 含义 生命周期
pq(:,:,igcm_h2o_vap) physiq tracer kg/kg 大气水汽混合比 主时间步状态
pq(:,:,igcm_h2o_ice) physiq tracer kg/kg 大气水冰混合比 主时间步状态
pdq, pdt physiq kg/kg/s, K/s 当前物理步累积 tendency 主时间步内累积
zdqcloud, zdtcloud watercloud_mod / physiq kg/kg/s, K/s 水云微物理 tendency 每步输出,模块数组也传给化学/诊断
rice, nuice physiq / watercloud m, - 水冰有效半径和有效方差 跨阶段复用
rsedcloud, rhocloud watercloud m, kg/m3 沉降半径和云密度 callsedim
pqsurf(:,h2o_ice,:) 地表状态 kg/m2 地表水冰/霜储量 跨时间步
pdqsdif(:,h2o_ice,:) vdifc kg/m2/s 地表水冰升华/沉积 tendency 当前步输出
dwatercap_dif vdifc kg/m2/s 永久冰盖消耗 tendency 当前步输出
qsoil / pqsoil soilwater 见子页 地下水汽、地下冰、吸附水 SAVE/地下状态
pore_icefraction soilwater / physiq - 孔隙冰填充率 传给热惯量反馈
inertiesoil_tifeedback waterice_tifeedback J m-2 K-1 s-1/2 水冰反馈后的土壤热惯量 传给 soil

配置开关

配置项 文件 影响
water callphys.def.* / conf_phys.F 水循环总开关;关掉后跳过 watercloudvdifc 水汽专段。
microphys 同上 选择 improvedclouds,否则走 simpleclouds
activice 同上 水冰是否辐射活跃;也控制 zdtcloud 是否注入温度。
supersat 同上 falsewatercloud 额外用 watersat 限制过饱和。
cloud_adapt_ts 同上 开启 improvedclouds 内自适应子步;源码要求 temp_dependent_m=true
scavenging 同上 水云微物理是否把尘埃作为 CCN 捕获并注入尘埃 tendency;依赖 microphys
sedimentation 同上 是否调用 callsedim 处理水冰沉降。
CLFvarying / CLFfixval 同上 次网格云分数处理;影响 watercloud 前后有效态和 tendency 缩放。
latentheat_surfwater 同上 地表水冰升华/沉积潜热是否反馈到地表温度。
old_wsublimation_scheme 同上 vdifc 地表交换用 zcdv 还是 zcdh
capswatercaptagalbedo_h2o_*inert_h2o_ice 同上 / surfdat_h 永久水冰盖、霜反照率和水冰热惯量。
adsorption_soilchoice_adsads_* comsoil_h / callphys.def.* 是否调用 soilwater 及其吸附方案。
surfaceice_tifeedbackporeice_tifeedback callphys.def.* 是否启用地表冰或孔隙冰热惯量反馈。
hdohdofrac callphys.def.* 是否计算 HDO tracer 和分馏。

数据依赖

数据 来源 用途
callphys.def.* deftank 水循环开关、默认值覆盖、地表水冰参数。
traceur.def.* deftank 水、CCN、尘埃、HDO tracer 集合。
XIOS XML deftank/xios 水循环诊断字段定义和文件输出选择。
土壤层深/热惯量 comsoil_h / start 状态 soilwater 扩散网格和 waterice_tifeedback 热惯量反馈。
地表/坡面状态 qsurf, pqsurf, def_slope_mean, subslope_dist 地表水冰储量、坡面投影和坡面平均。
尘埃/CCN tracer tracer_mod / pq 微物理成核、清除和半径反演。

与其他主题的耦合

其他主题 耦合方式
辐射 activice 时水冰参与辐射;callradite 使用 rice/nuice,并把水冰光学厚度用于诊断。
尘埃循环 尘埃是水冰成核 CCN 来源;scavenging 使尘埃被水云清除;callsedim 同时处理尘埃和水冰沉降。
CO2 循环 CO2 云可使用水冰作为 CCN;CO2 凝结/坐标更新与水循环在 physiq 中相邻但独立。完整串联见后续 CO2 主题页。
边界层/土壤 vdifc 控制水汽地表交换,soilwater 控制地下储库,soil 消费热惯量反馈。
化学 calchim 接收 zdqcloud/zdqscloud,但具体非均相化学用途超出本页核验范围。

输出结果

输出 去向 含义
pdq(:,:,h2o_vap/h2o_ice) physiq 主状态 大气水汽/水冰 tendency,包含水云、扩散、沉降等过程累积。
pdt physiq 主状态 水云潜热和地表水潜热等温度 tendency。
dqsurf / pdqsdif 地表状态 水冰沉降和地表升华/沉积通量。
dwatercap_dif 永久冰盖储库 永久水冰盖消耗。
rice, rsedcloud, rhocloud 沉降、诊断、下步辐射 水冰粒子半径、沉降半径、云密度。
flux_ssice, flux_rego XIOS / write_output 地下冰或 regolith 与大气/霜之间的水通量。
h2o_vap, h2o_ice, h2o_ice_s, watercap, reffice, mtot, icetot XIOS 大气、地表和柱积分水循环诊断。
zdqcloud_ice, zdqcloud_vap, zdqcloud write_output 水云微物理 tendency 诊断。

伪代码总览

for each physics timestep:
  call radiation with current rice/nuice/rdust

  if water:
    call watercloud:
      if CLFvarying: tcondwater(total water) -> cloudfrac
      if microphys:
        improvedclouds:
          watersat -> saturation
          if saturated: nuclea/updaterccn -> CCN activation
          if CCN present: growthrate/sig_h2o/updaterice_micro -> ice growth or sublimation
          if ice exhausted: release CCN back to dust
      else:
        for imicro substeps:
          simpleclouds:
            watersat -> qsat
            condense excess vapor or sublime existing ice
      enforce non-negative H2O/HDO/CCN/dust
      if not supersat: watersat -> remove excess vapor
      update rice, rsedcloud, rhocloud
      if CLFvarying: multiply cloud tendency by cloudfrac

    if activice: pdt += zdtcloud
    pdq(h2o_vap/h2o_ice) += zdqcloud
    if hdo: pdq(hdo_vap/hdo_ice) += zdqcloud
    if microphys: pdq(ccn_mass/number) += zdqcloud with pairwise guards
    if scavenging: pdq(dust_mass/number) += zdqcloud with pairwise guards

  if sedimentation:
    callsedim using rice/rsedcloud/rhocloud
    pdq += zdqsed
    dqsurf += zdqssed

  in vdifc for h2o_vap:
    for each slope:
      convert surface ice by /cos(slope)
      make_tsub if frost or watercap
      for each substep:
        watersat(surface T, surface pressure) -> qsat
        solve implicit vapor diffusion with lower boundary qsat
        if adsorption_soil: soilwater -> regolith flux and boundary vapor
        else if subsurface ice active: SSI flux branch
        update surface ice, watercap tendency, surface temperature
      project output back by *cos(slope)

  if surfaceice_tifeedback or poreice_tifeedback:
    waterice_tifeedback -> new soil thermal inertia
    soil uses new thermal inertia

  diagnostics:
    zq = pq + pdq*ptimestep
    write water vapor/ice, surface ice, radius, cloud tendencies, subsurface fluxes

源码疑点与待确认项

相关页面