physiq 水循环调用点
本页只追踪 physiq 主时间步循环中与水循环直接相关的调用点 watercloud(大气水冰云微物理)及其上下游:调用前的有效半径/辐射准备、调用后的 tendency 注入、与沉降(callsedim)和诊断输出的关系。不覆盖 physiq 的其他物理过程(CO2 循环见 physiq-co2-cycle-callpoints)。
所属文件
LMDZ.MARS\libf\phymars\physiq_mod.F
源码 4162 行。本页涉及的核心调用点 call watercloud 在行 1831。
所属模块
physiq_mod(SUBROUTINE physiq / physiq_mod 内)
相关 use 语句
| 行 | 语句 | 引入对象 |
|---|---|---|
| 16 | use watercloud_mod, only: watercloud, zdqcloud, zdqscloud |
水冰云微物理调度例程及其模块级 tendency 数组 |
| 18 | use updaterad, only: ... |
半径反演(见下,watercloud 内部也 use) |
| 23 | use callsedim_mod, only: callsedim |
沉降例程(第 9b 段,作用于水冰) |
| 147 | use callkeys_mod, only: water, activice, microphys, CLFvarying |
水循环主开关、辐射活化、微物理、次网格云分数 |
| 155 | use callkeys_mod, only: sedimentation, scavenging |
沉降开关、洗脱(尘埃随冰沉降)开关 |
watercloud 受 water 控制;activice、microphys、scavenging、CLFvarying 是其下游子开关,决定 tendency 注入的范围。
调用顺序总览
水循环相关代码出现在主时间步的多个物理段,顺序如下(行号为大致定位):
- 第 8 段辐射(行 1085–1140):
call callradite(行 1097,CLFvarying时行 1121 再调一次 clear-sky)。该调用以rdust,rice,nuice为 INOUT,反演出本步辐射用的水冰/尘埃有效半径,并据此算云的光学厚度taucloudtes。这是rice/rdust在进入watercloud前的赋值来源。 - 第 9a 段水与冰(行 1823–1910):
IF (water)→call watercloud(行 1831)。返回zdqcloud/zdtcloud,随后逐项注入pdq/pdt。 - 第 9a bis 段 CO2 云(行 1912–2102):
co2cloud,与水循环并列,详见 CO2 调用点页。 - 第 9b 段沉降(行 2133–2184):
IF (sedimentation)→call callsedim(行 2143),以rice,rsedcloud,rhocloud为输入,处理水冰(及尘埃)的重力沉降,把zdqsed/zdqssed注入pdq/dqsurf。 - 第 9c 段化学(行 2202+):
calchim,把zdqcloud,zdqscloud也作为输入传入(行 2226),即云微物理结果参与光化学表面积/非均相过程。 - 诊断段(行 2585+/2855+):先建工作副本
zq = pq + pdq*ptimestep(行 2587),再用更新后的zq与rice重算柱积分水汽/水冰、TES 光学厚度、有效半径等,并write_output。
因此水循环的数据流是:callradite 反演 rice → watercloud 用 rice 并更新示踪物 → callsedim 用 rice/rsedcloud 沉降 → 诊断用更新后的 zq 与 rice。
调用点:watercloud(行 1831)
控制条件
IF (water) THEN(行 1829)。整个块到行 1910 END IF ! of IF (water) 结束。
调用语句
call watercloud(ngrid,nlayer,ptimestep,
zplev,zplay,pdpsrf,zzlay, pt,pdt,
pq,pdq,zdqcloud,zdtcloud,
nq,tau,tauscaling,rdust,rice,nuice,
rsedcloud,rhocloud,totcloudfrac)
主要输入
| 变量 | 含义 |
|---|---|
zplev,zplay,pdpsrf,zzlay |
压力层/层间高度、表压变化率 |
pt,pdt |
温度及当前累计温度 tendency(watercloud 内构造 zt=pt+pdt*ptimestep 工作温度) |
pq,pdq |
示踪物及当前累计 tendency |
tau,tauscaling |
尘埃光学厚度及缩放 |
rdust,rice,nuice |
尘埃/水冰有效半径与方差(rdust/rice 为 INOUT,来自上游 callradite) |
主要输出
| 变量 | 方向 | 含义 |
|---|---|---|
zdqcloud(:,:,:) |
OUT(模块级,行 16 引入) | 各示踪物的云微物理 tendency(水汽/水冰/HDO/CCN/尘埃) |
zdtcloud(:,:) |
OUT | 潜热释放温度 tendency |
rice,nuice |
INOUT/OUT | 更新后的水冰有效半径与方差(供本步后续沉降与诊断) |
rsedcloud(:,:) |
OUT | 云沉降半径(callsedim 用) |
rhocloud(:,:) |
OUT | 云密度 |
totcloudfrac(:) |
INOUT | 云分数(A. Pottier 2013) |
watercloud 内部据 microphys 选择 improvedclouds(完整微物理,见 improvedclouds_mod)或 simpleclouds(见 simpleclouds_mod),并调用 updaterice_micro/updaterice_typ 更新 rice(详见 watercloud_mod)。
调用后的 tendency 注入(行 1836–1908)
注入顺序及各自的开关条件:
- 潜热温度(
if (activice),行 1837–1841):pdt += zdtcloud。只有水冰辐射活化时才把凝结潜热计入温度,否则云微物理对温度无反馈。 - 水汽/水冰无条件增量(行 1843–1849):
pdq(:,:,igcm_h2o_vap) += zdqcloud(...,h2o_vap)、pdq(:,:,igcm_h2o_ice) += zdqcloud(...,h2o_ice)。 - HDO(
if (hdo),行 1851–1859):增量hdo_vap、hdo_ice。 - CCN 质量/数量(
if (microphys),行 1864–1885):增量ccn_mass、ccn_number,随后两组where负值保护:ccn_mass或ccn_number任一将变负时,把两者一起重置为-pq/ptimestep + 1.e-30。注释(行 1862–1863)说明这是单精度舍入导致 N/M 可能为负的保护。 - 尘埃质量/数量(
if (scavenging),行 1887–1908):增量dust_mass、dust_number(尘埃被云洗脱),同样配两组成对where负值保护。
负值保护的统一模式:质量与数量耦合,任一变负就把这一对一起钳到 -pq/ptimestep + 1.e-30,保证更新后 pq + ptimestep*pdq ≥ 1.e-30。这与 CO2 云调用点的保护逻辑一致。
与沉降(第 9b 段 callsedim)的关系
IF (sedimentation)(行 2136)→ call callsedim(行 2143),传入 rice,rsedcloud,rhocloud(行 2146,均由 watercloud 更新)。callsedim 返回 zdqsed(各层 tendency)和 zdqssed(地表通量),随后:
- 行 2168–2174:
pdq(ig,l,iq) += zdqsed(ig,l,iq),对所有示踪物。 - 行 2175–2182:
dqsurf(ig,iq,islope) += zdqssed(ig,iq)*cos(pi*def_slope_mean(islope)/180.),按坡度投影累加到地表。
注释(行 2134)明确沉降“acts also on water ice”。因此水冰先经 watercloud 凝结/蒸发,再经 callsedim 重力下落到地表;二者顺序不可调换,callsedim 依赖 watercloud 输出的 rice/rsedcloud。
rdstorm 时(行 2152–2166)风暴尘不能沉到地表,把其地表通量回填到最低层 tendency 后清零——与水冰无关,但在同一沉降块内。
与辐射(第 8 段 callradite)的关系
callradite(行 1097)在 watercloud 之前执行,以 rice,nuice,rdust 为 INOUT:它反演出本步辐射使用的水冰/尘埃有效半径,并输出云的红外光学厚度 taucloudtes(行 1105)。activice 决定水冰是否作为辐射活性气溶胶参与该计算。
关键时序:本步辐射用的 rice 是上一步 watercloud 留下的值(rice 跨步保留,行 306 声明在例程级)。watercloud(行 1831)随后用同一 rice 数组、再据新的水冰量更新它,供本步后续的 callsedim 与诊断、以及下一步的 callradite 使用。
CLFvarying 为真时(行 1115–1140)对 clear-sky 部分再调一次 callradite,并按云分数 totcloudfrac 加权合成通量与加热率——次网格云分数处理。
水循环诊断/输出调用点
诊断均在工作副本 zq = pq + pdq*ptimestep(行 2587,含上述全部注入)之后,位于 if (water) 诊断块(行 2855–2946):
| 位置 | 内容 |
|---|---|
| 行 2863–2893 | 柱积分 mtot(水汽)、icetot(水冰)、mtotD/icetotD(HDO,if (hdo));用 rice 算 825 cm⁻¹ 吸收光学厚度 opTES/tauTES(模拟 TES 反演) |
| 行 2894–2895 | call watersat 算饱和混合比 zqsat,satu = zq(h2o_vap)/zqsat(过饱和度) |
| 行 2897–2920 | if (scavenging):柱积分 Nccntot/Mccntot,按冰表面积加权的有效半径 rave |
| 行 2921–2933 | else(无 scavenging):按冰质量加权的 rave |
| 行 2935–2944 | A. Pottier 加权 rave2(按水冰质量加权 rice) |
| 行 3032–3056 | wstats 累计水汽/水冰体积混合比、h2o_ice_s 地表冰 |
| 行 3283–3286 | if (igcm_h2o_ice.ne.0):算水冰体积混合比 |
| 行 3517–3555 | write_output 输出 q01(h2o_ice)/q02(h2o_vap)、h2o_ice/h2o_vap 混合比、地表 h2o_ice_s(_slope)、rice(行 3625) |
| 行 4024–4029 | write_output 输出 zdqcloud 凝结 tendency(h2o_ice/h2o_vap 及二者之和) |
comm_RICE = rice(行 3297)把更新后的水冰半径写入通信模块,供后续/外部使用。
控制流程小结
[第 8 段] callradite(行 1097, INOUT rice/rdust/nuice) -> taucloudtes
IF (CLFvarying): 再调 clear-sky callradite, 按 totcloudfrac 合成
[第 9a 段] IF (water):
call watercloud(..., INOUT rice, OUT zdqcloud/zdtcloud/rsedcloud/rhocloud)
内部: microphys ? improvedclouds : simpleclouds; updaterice_*
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 + 负值保护
IF (scavenging): pdq(dust_mass/number) += zdqcloud + 负值保护
[第 9b 段] IF (sedimentation): callsedim(..., rice/rsedcloud/rhocloud)
pdq += zdqsed; dqsurf += zdqssed (per islope)
[第 9c 段] calchim(..., zdqcloud, zdqscloud) (云结果参与化学)
[诊断] zq = pq + pdq*ptimestep
if (water): 柱积分 mtot/icetot, opTES/tauTES, satu, rave/rave2
wstats; write_output(h2o_*, rice, zdqcloud)
复现注意事项
watercloud的温度反馈只在activice=true时生效(行 1837);关掉activice时云仍改变水汽/冰示踪物,但不放潜热,温度场不受云直接影响。- 注入顺序固定:潜热 → 水汽/冰 → HDO → CCN(microphys)→ 尘埃(scavenging)。CCN 和尘埃增量各自带成对负值保护,复现时不能漏任一
where块,否则单精度舍入可能产生负质量/负数密度。 rice跨时间步保留:本步callradite用的是上一步watercloud留下的rice;watercloud再更新它供本步callsedim/诊断与下一步辐射。重排这三步会破坏半径的时间一致性。- 水冰沉降在第 9b 段
callsedim完成,依赖watercloud输出的rsedcloud/rhocloud;与 CO2 云不同(CO2 冰在co2cloud微时间步内部沉降)。 - 诊断(柱积分、TES 光学厚度、有效半径)都在
zq=pq+pdq*ptimestep之后,使用的是含全部 tendency 的更新态,而非watercloud局部输出。
已核验边界
scavenging依赖microphys和dustbin>=1:conf_phys.F:921-926在scavenging.and..not.microphys或dustbin<1时 abort;microphys=true但scavenging=false只打印 warning,不中止。watercloud内部improvedclouds/simpleclouds的选择与rice更新细节见 watercloud_mod、improvedclouds_mod、simpleclouds_mod;本页只描述physiq调用点。calchim(行 2223)接收zdqcloud/zdqscloud作为输入的具体非均相化学用途属于化学模块范围,见 aeronomars/化学相关页面。