simpleclouds_mod.F

路径

LMDZ.MARS\libf\phymars\simpleclouds_mod.F

所属目录/模块

libf\phymars

文件定位

该文件定义 simpleclouds_mod 模块,含唯一 subroutine simpleclouds。职责是:在 GCM 某格点空气水汽过饱和时,用一个简化的水冰云方案形成/升华水冰。该方案几乎不含微物理——没有过饱和(瞬时调整到饱和)、不算成核率、不显式追踪 CCN,凝结/升华只按“水汽与饱和混合比之差”一步到位。源码注释明确指出更精确的方案在 improvedclouds

它额外处理 HDO(半重水)同位素的分馏(hdo 开关),并在末尾调用 updaterice_typ 用 Montmessin et al. (2004) 的典型 CCN 廓线反演水冰晶半径 rice

调用方(核验):唯一被 watercloud_mod.F 的简化路径调用(:20 use,:349 call),即 microphys=.false. 时走 simpleclouds、microphys=.true. 时走 improvedclouds。

定义的符号

符号 类型 行号 作用
simpleclouds_mod module 1 容器模块
simpleclouds subroutine 7 简化水冰云凝结/升华 + HDO 分馏 + 半径反演

依赖的模块

use 模块 only 列表 用途 待确认
updaterad updaterice_typ 由水冰量 + 尘埃光深反演水冰晶质量平均半径 rice(Montmessin 2004 典型 CCN 廓线)
watersat_mod watersat 算各层水饱和混合比 zqsat(见相关页面)
tracer_mod igcm_h2o_vap, igcm_h2o_ice, igcm_hdo_vap, igcm_hdo_ice, qparentmin 水/HDO 气冰 tracer 索引;qparentmin 为母体最小混合比阈值(防 HDO/H2O 比值除零)
comcstfi_h cpp 大气定压比热,潜热加热率换算
dimradmars_mod naerkind 气溶胶种类数,tau 维度
callkeys_mod hdo, hdofrac hdo:是否启用 HDO 同位素;hdofrac:是否启用凝结分馏

调用的关键例程

被调用例程 所在模块/文件 调用位置 作用
watersat watersat_mod :128 一次性算 ngrid*nlay 个点的饱和混合比
updaterice_typ updaterad :219 逐点反演水冰晶半径 rice

本文件不调用其他源文件中的例程。

调用方(核验 watercloud_mod.F):

调用方 位置 上下文
watercloud_mod.F :349 微物理时间步循环内,先把各前序参数化的 tendency 累加进 sum_subpdt/sum_subpdq 作为“阶梯输入”,调用后把 subpdqcloud 累加回 sum_subpdq

输入

输入 来源 类型/维度 单位 含义
ngrid 调用方 integer, in 大气列数
nlay 调用方 integer, in 大气层数
nq 调用方 integer, in tracer 数
ptimestep 调用方 real, in s 物理(微物理)时间步(传 microtimestep
pplay(ngrid,nlay) 调用方 real, in Pa 层中压力
pzlay(ngrid,nlay) 调用方 real, in m 层中高度
pt(ngrid,nlay) 调用方 real, in K 输入温度
pdt(ngrid,nlay) 调用方 real, in K/s 前序参数化的温度 tendency(传 sum_subpdt
pq(ngrid,nlay,nq) 调用方 real, in kg/kg 输入 tracer 混合比(传 pqeff
pdq(ngrid,nlay,nq) 调用方 real, in kg/kg/s 前序 tracer tendency(传 sum_subpdq
tau(ngrid,naerkind) 调用方 real, in 各列尘埃柱光深

输出

输出 去向 类型/维度 单位 含义
rice(ngrid,nlay) 调用方 real, out m 水冰晶质量平均半径(Montmessin 2004 的 r_c)
pdqcloud(ngrid,nlay,nq) 调用方 real, out kg/kg/s 因 H2O(及 HDO)凝结/升华的 tracer tendency
pdtcloud(ngrid,nlay) 调用方 real, out K/s 潜热引起的温度 tendency

注意:pdqcloud 只对 h2o_vap/h2o_ice(及 hdo 对应)赋值,其余 tracer 分量被初始化为 0。

共享状态与副作用

核心逻辑

  1. 初始化:90-121):把 h2o_vaph2o_ice(及 hdo 对应,若 hdo)按 pq + pdq*ptimestep 更新到局部 zq,水汽下限 1e-30、水冰下限 0,并存初值 zq0;温度 zt = pt + pdt*ptimesteppdqcloud/pdtcloud/alpha_c 清零。
  2. 饱和混合比:128):call watersatzqsat
  3. 凝结/升华量:133-150):逐点
    • zq(h2o_vap) >= zqsat(过饱和):dzq = zq(h2o_vap) - zqsat(全部多余水汽凝结)。
    • 否则(不饱和):dzq = -min(zqsat - zq(h2o_vap), zq(h2o_ice))(升华,但不超过现有冰量)。
    • 更新 zq(h2o_ice) += dzqzq(h2o_vap) -= dzq
  4. tendency 与潜热:155-163):pdqcloud = (zq - zq0)/ptimestep;潜热 lw = (2834.3 - 0.28*(zt-To) - 0.004*(zt-To)²)*1e3(升华潜热温度依赖式,To=273.15),pdtcloud = -pdqcloud(h2o_vap)*lw/cpp
  5. HDO 分馏:165-211,仅 hdo):
    • 凝结(pdqcloud(h2o_ice)>0):分馏系数 alpha_c = exp(13525/zt² - 5.59e-2)(Lamb,仅 hdofrac,否则 =1);pdqcloud(hdo_ice) = pdqcloud(h2o_ice)*alpha_c*(hdo_vap/h2o_vap)(母体 h2o_vap>qparentmin 才算,否则 0),并以可用 hdo_vap 为上限封顶;pdqcloud(hdo_vap) = -pdqcloud(hdo_ice)
    • 升华(else):pdqcloud(hdo_ice) = pdqcloud(h2o_ice)*(hdo_ice/h2o_ice)(母体 h2o_ice>qparentmin 才算),以 -hdo_ice 为下限,pdqcloud(hdo_vap) = -pdqcloud(hdo_ice)
  6. 半径反演:217-222):逐点 call updaterice_typ(zq(h2o_ice), tau(ig,1), pzlay, rice)

伪代码

subroutine simpleclouds(...):
    # 1. 更新局部场
    zq(h2o_vap) = max(pq + pdq*dt, 1e-30);  zq0 = zq
    zq(h2o_ice) = max(pq + pdq*dt, 0.)
    zt = pt + pdt*dt
    if hdo: 同样更新 hdo_vap, hdo_ice
    pdqcloud = 0;  pdtcloud = 0

    # 2. 饱和混合比
    call watersat(zt, pplay -> zqsat)

    # 3. 凝结/升华(瞬时调整到饱和)
    for ig,l:
        if zq(h2o_vap) >= zqsat: dzq = zq(h2o_vap) - zqsat       # 凝结
        else:                    dzq = -min(zqsat-zq(h2o_vap), zq(h2o_ice))  # 升华
        zq(h2o_ice) += dzq;  zq(h2o_vap) -= dzq

    # 4. tendency + 潜热
    for ig,l:
        pdqcloud(h2o_vap) = (zq(h2o_vap)-zq0)/dt
        pdqcloud(h2o_ice) = (zq(h2o_ice)-zq0)/dt
        lw = (2834.3 - 0.28*(zt-To) - 0.004*(zt-To)^2)*1e3
        pdtcloud = -pdqcloud(h2o_vap)*lw/cpp

    # 5. HDO 分馏(若 hdo)
        if 凝结: alpha = hdofrac ? exp(13525/zt^2 - 5.59e-2) : 1
                 pdqcloud(hdo_ice) = pdqcloud(h2o_ice)*alpha*(hdo_vap/h2o_vap)  # 受 qparentmin / 可用量限制
        else:    pdqcloud(hdo_ice) = pdqcloud(h2o_ice)*(hdo_ice/h2o_ice)
        pdqcloud(hdo_vap) = -pdqcloud(hdo_ice)

    # 6. 冰晶半径
    for ig,l: call updaterice_typ(zq(h2o_ice), tau(ig,1), pzlay -> rice)

参与的主题流程

主题 参与方式
水循环 水冰云的简化路径(microphys=.false.):把过饱和水汽瞬时转为水冰、释放潜热,并给出冰晶半径供辐射(activice)/沉降使用。是 improvedclouds 完整微物理方案的轻量替代

写法特点

复现要点

待确认

相关页面