improvedclouds_mod.F90

路径

LMDZ.MARS\libf\phymars\improvedclouds_mod.F90

所属目录/模块

libf/phymars

文件定位

完整水冰云微物理核心模块。当 microphys=.true. 时由 watercloud_mod 调用,取代简化方案 simpleclouds_mod。实现:(1)尘埃 CCN 上的水冰异质成核(连续率→离散概率);(2)冰晶质量增长/升华(阻力增长方案 + 隐式格式);(3)冰完全升华时的尘核释放;(4)可选 HDO 同位素分馏;(5)自适应子时间步(adapt_imicro,本文件内)。CO2 云版 improvedco2clouds_mod 即基于本文件改编。

定义的符号

符号 类型 行号 作用
improvedclouds_mod module 1 水冰云完整微物理模块
improvedclouds subroutine 9 成核、冰增长/升华、尘核释放主例程
adapt_imicro subroutine 469 按可凝结量幂律计算子时间步细分数 zimicro

依赖的模块

use 模块 only 列表 用途 待确认
updaterad updaterice_micro, updaterccn 由冰/CCN 质量数浓度反演冰粒半径、尘核半径
watersat_mod watersat 水汽饱和混合比(Murphy & Koop 2005)
tracer_mod rho_ice, nuice_sed, igcm_h2o_vap, igcm_h2o_ice, igcm_dust_mass, igcm_dust_number, igcm_ccn_mass, igcm_ccn_number, igcm_hdo_vap, igcm_hdo_ice, qparentmin tracer 索引、冰密度、分布方差源、HDO 母体下限
conc_mod mmean 平均摩尔质量(算水汽分压)
comcstfi_h pi, cpp 圆周率、定压比热
microphys_h nbin_cld, rad_cld, mteta, kbz, nav, rgp 尺度 bin 数/半径网格、接触参数、玻尔兹曼/阿伏伽德罗常数、气体常数
microphys_h mco2, vo1, mh2o, mhdo, molco2, molhdo, To 分子质量、水分子体积、分子直径、参考温度 273.15 K
nuclea_mod nuclea 水冰异质成核率(按 bin)
sig_h2o_mod sig_h2o 水冰表面张力(温度函数,算平衡饱和 seq
growthrate_mod growthrate 冰晶增长阻力 res 和水汽扩散系数 Dv
write_output_mod write_output 诊断输出
callkeys_mod activice, scavenging, cloud_adapt_ts, hdo, hdofrac 运行时开关:辐射活性冰/尘埃清除/自适应子步/HDO/HDO 分馏

调用的关键例程

被调用例程 所在模块/文件 调用位置 作用
watersat watersat_mod 行 237, 253 算饱和混合比 zqsat;行 237 全网格一次(max(1.,zt) 保护),行 253 子步内单点
adapt_imicro 本文件 行 248, 443 自适应子时间步细分数(cloud_adapt_ts=.true. 时)
updaterccn updaterad 行 274 由尘埃质量/数浓度反演尘核半径 rdust
nuclea nuclea_mod 行 294 各 bin 异质成核率 rate(接触参数 mteta
updaterice_micro updaterad 行 318 由冰/CCN 反演冰粒平均半径 rice 和云密度 rhocloud
sig_h2o sig_h2o_mod 行 324 水冰表面张力 → 开尔文项 seq
growthrate growthrate_mod 行 327 冰晶增长阻力 res 和扩散系数 Dv
write_output write_output_mod 行 453-454 输出 zpotcondcount_micro 诊断

输入

输入 来源 类型/维度 单位 含义
ngrid, nlay watercloud INT - 格点数、层数
ptimestep watercloud REAL s 物理时间步(整步,非微步)
pplay watercloud REAL (ngrid,nlay) Pa 层中气压
pt watercloud REAL (ngrid,nlay) K 层中温度
pdt watercloud REAL (ngrid,nlay) K/s 温度倾向(之前过程)
pq watercloud REAL (ngrid,nlay,nq) kg/kg tracer 混合比
pdq watercloud REAL (ngrid,nlay,nq) kg/kg/s tracer 倾向(之前过程)
nq watercloud INT - tracer 数量
tauscaling watercloud REAL (ngrid) - 尘埃量绝对/相对转换因子(来自 aeropacity 光学厚度)
imicro watercloud INT - 子时间步默认细分数(cloud_adapt_ts=.false. 时直接用)

输出

输出 去向 类型/维度 单位 含义
zq watercloud REAL (ngrid,nlay,nq) kg/kg 微物理后 tracer 绝对值(含 h2o_vap/ice、dust、ccn、可选 hdo)
zt watercloud REAL (ngrid,nlay) K 微物理后温度(含潜热反馈)

注:输出为微物理后的绝对值(已加上之前倾向并经子步积分),由 watercloud_mod 转回倾向供后续沉降/输送使用。

共享状态与副作用

核心逻辑

  1. firstcall 初始化(行 130-192):

    • 体积比 vrat_cld = exp(log(rmax/rmin)/(nbin_cld-1)*3),构造对数等比半径网格 rad_cld 与边界 rb_cld(行 143-161)。
    • rb_cld(:) = log(rb_cld(:))——存对数值供后续 derf 直接用(行 174)。
    • vo1 = mh2o/rho_ice(水分子体积),sigma_ice = sqrt(log(1+nuice_sed))
  2. 初始化倾向合并(行 197-229):zq = (上游 tracer) + pdq*ptimestep(dust 仅 scavenging 时加;ccn、h2o 总是加;hdo 仅 hdo 时加);zt = pt + pdt*ptimestepsubpdtcloud=0;微小值钳到 1e-30

  3. 算饱和(行 234-238):dev2 = 1/(sqrt(2)*sigma_ice)watersat 全网格算 zqsatzpotcond = h2o_vap - zqsat(可凝结量,供自适应子步)。

  4. 主循环(行 245-450,对每个 lig):

    • 自适应子步(行 248):cloud_adapt_tsadapt_imicrozpotcondzimicro
    • 子步 while 循环(行 252-448,直到 ending_ts):
      • 单点重算 zqsat、水汽分压 ph2o = h2o_vap*(mmean/18)*pplay、饱和比 satumicrotimestep = ptimestep/zimicro(行 253-258)。
      • 保存 zq0;若 spenttime+microtimestep >= ptimestep 则截断为剩余时间并置末步(行 264-268)。
      • 成核satu >= 1,行 273-309):updaterccnrdust;尘埃 log-normal 经 derf 展开为 binned n_aer/m_aernuclearatedN/dM = Σ aer*(exp(-rate*dt)-1)(负值,即被激活转为冰核的量);从 dust 减、向 ccn 加。
      • 冰增长ccn_number*tauscaling >= 1,行 317-414):updaterice_microrice;平衡饱和 seq = exp(2*sig_h2o*mh2o/(rho_ice*rgp*T*rice))(开尔文效应);growthrate 算阻力 res;隐式格式 dMice = (h2o_vap - seq*zqsat)/(res*zqsat/(cste*No*rice)+1)cste=4*pi*rho_ice*dt;钳到 [-h2o_ice, h2o_vap];更新冰/汽;潜热 lw = (2834.3 - 0.28*(T-To) - 0.004*(T-To)²)*1e3subpdtcloud = dMice*lw/cpp/dt(限幅 ±5/dt)。
      • HDO 分馏hdo,行 359-393):凝结时按 alpha_c 分馏系数算 dMice_hdo,升华时按冰相比例;钳幅后更新 hdo 汽/冰。
      • 尘核释放(行 400-414):h2o_ice <= 1e-28 时汽吸收残冰、dust 吸收 ccn、ccn 归零(hdo 同理)。
      • 温度更新(行 425-428):.not.activicesubpdtcloud=0zt += subpdtcloud*microtimestep
      • 自适应反馈(行 433-444):累计 dMicetot,估 zdq 速率,重算 zimicro
      • 累加 spenttimecount_micro
  5. 诊断输出(行 452-465)。

伪代码

improvedclouds(ngrid, nlay, ptimestep, ..., zt, zq):

  if firstcall:
    构造对数等比半径网格 rad_cld, rb_cld(存 log 值)
    vo1 = mh2o/rho_ice
    sigma_ice = sqrt(log(1+nuice_sed))

  zq = 上游tracer + pdq*ptimestep   (dust 仅 scavenging; hdo 仅 hdo)
  zt = pt + pdt*ptimestep
  钳 zq >= 1e-30

  dev2 = 1/(sqrt(2)*sigma_ice)
  zqsat = watersat(max(1,zt), pplay)
  zpotcond = h2o_vap - zqsat

  for l, ig:
    if cloud_adapt_ts: zimicro = adapt_imicro(ptimestep, zpotcond)
    spenttime = 0; ending_ts = false
    while not ending_ts:
      zqsat = watersat(zt, pplay)            // 单点
      ph2o = h2o_vap*(mmean/18)*pplay
      satu = h2o_vap/zqsat
      microtimestep = ptimestep/zimicro
      zq0 = zq
      if spenttime+microtimestep >= ptimestep:
        microtimestep = ptimestep-spenttime; ending_ts = true

      // --- 成核 (satu >= 1) ---
      rdust = updaterccn(dust_mass, dust_number)
      n_aer/m_aer = 尘埃 log-normal 经 derf 展开
      rate = nuclea(ph2o, T, satu, n_aer)       // 接触参数 mteta
      dN/dM = Σ aer*(exp(-rate*dt)-1)
      dust += dM/tau; ccn -= dM/tau (数同理)

      // --- 冰增长 (ccn_number*tau >= 1) ---
      rice = updaterice_micro(h2o_ice, ccn_mass, ccn_number)
      seq = exp(2*sig_h2o(T)*mh2o/(rho_ice*rgp*T*rice))
      res = growthrate(T, pplay, ph2o/satu, rice)
      cste = 4*pi*rho_ice*microtimestep
      dMice = (h2o_vap - seq*zqsat)/(res*zqsat/(cste*No*rice)+1)
      dMice = clip(dMice, [-h2o_ice, h2o_vap])
      h2o_ice += dMice; h2o_vap -= dMice
      lw = (2834.3 - 0.28*(T-To) - 0.004*(T-To)^2)*1e3
      subpdtcloud = clip(dMice*lw/cpp/dt, ±5/dt)

      if hdo: dMice_hdo 按分馏系数/冰相比例, 更新 hdo

      // --- 尘核释放 ---
      if h2o_ice <= 1e-28:
        h2o_vap += h2o_ice; h2o_ice = 0
        dust += ccn; ccn = 0  (hdo 同理)

      if not activice: subpdtcloud = 0
      zt += subpdtcloud*microtimestep
      钳 zq >= 1e-30
      if cloud_adapt_ts: zimicro = adapt_imicro(ptimestep, |dMicetot/spenttime|)
      spenttime += microtimestep

参与的主题流程

主题 参与方式
水循环 (water-cycle) 完整云微物理:成核、冰增长/升华、尘核清除、HDO 分馏
水循环主题页 主题入口

写法特点

复现要点

待确认

复现风险

相关页面