nuclea.F

路径

LMDZ.MARS\libf\phymars\nuclea.F

所属目录 / 模块

libf\phymars

文件定位

nuclea.F 定义 nuclea_mod,提供水冰云完整微物理中的异质成核率计算。它不负责水汽、尘埃或 CCN tracer 的更新;唯一主调用方 improvedclouds_mod.F90 先把尘埃矩展开成水云半径 bin 上的 n_aer/m_aer,再调用 nuclea(ph2o, zt, satu, n_aer, rate) 得到每个 bin 的成核率,随后用 exp(-rate*microtimestep) 把被激活的尘埃数/质量转入 CCN tracer。

源码注释说明其物理基础为 Pruppacher & Klett (1978) 的固体基底上水冰成核,并由 Keese (1989) 修订;当前 Mars GCM 版本还加入了 temp_dependent_m 温度依赖接触参数分支。

定义的符号

符号 类型 行号 作用
nuclea_mod module 1 封装水冰异质成核率例程和几何形状因子函数
nuclea subroutine 7 按水汽分压、温度、饱和比和各半径 bin 的 CCN 数量计算成核率
firstcall logical save/threadprivate 52 控制接触参数模式说明只在首次进入时打印
fshape double precision function 173 计算临界胚胎在有限尘粒曲率上的接触几何形状因子

依赖的模块

use 模块 only 列表 用途 待确认
comcstfi_h pi 球体几何和临界胚胎自由能公式中的圆周率 -
microphys_h nbin_cld, rad_cld, nav, mteta, m0 水云 bin 数、bin 半径、Avogadro 常数、接触参数和水分子质量 -
microphys_h desorp, kbz, nus, rgp, surfdif, vo1 成核指数项所需的脱附能、Boltzmann 常数、跳跃频率、气体常数、表面扩散能和水分子体积 -
callkeys_mod temp_dependent_m, cloud_adapt_ts 控制接触参数是否由温度公式覆盖,以及使用线性还是 tanh 公式 -
sig_h2o_mod sig_h2o 按温度给出水冰/水汽表面张力,用于 rstarfistar -

调用的关键例程

被调用例程 所在模块 / 文件 调用位置 作用
sig_h2o sig_h2o_mod.F90 119, 141 计算温度相关的水冰表面张力
fshape 本文件 138 当尘粒半径不足以近似平面基底时计算曲率修正形状因子
nuclea 本文件 improvedclouds_mod.F90:294 水冰云成核段按 bin 返回成核率 rate

输入

输入 来源 类型/维度 单位 含义
ph2o improvedclouds 局部水汽分压 double precision scalar Pa 当前格点/层水汽分压
temp improvedcloudszt(ig,l) real scalar K 当前温度
sat improvedcloudssatu double precision scalar - 水汽相对冰饱和比;必须大于 1 才激活成核
n_ccn improvedclouds 展开的 n_aer double precision (nbin_cld) number mixing / bin 每个半径 bin 中可作为成核基底的尘埃或 CCN 数量
rad_cld microphys_h,由 improvedclouds firstcall 写入 double precision (nbin_cld) m 水云微物理半径 bin
mteta microphys_h,由 conf_phys.F 初始化 real saved scalar - 接触参数 m=cos(theta);可被温度依赖分支局部覆盖

输出

输出 去向 类型/维度 单位 含义
nucrate improvedcloudsrate real (nbin_cld) s-1 每个 bin 的异质成核率;调用方用于 exp(-rate*microtimestep)

共享状态与副作用

核心逻辑

  1. microphys_h::mteta 复制本地双精度接触参数 mtetalocal
  2. 如果 temp_dependent_m=.true.,则按 cloud_adapt_ts 选择温度依赖公式:
    • cloud_adapt_ts=.false.mtetalocal = min(0.0044*temp + 0.1831, 0.97)
    • cloud_adapt_ts=.true.mtetalocal = 0.469 + ((0.972-0.469)*tanh((temp/158.282)**4.244))
  3. 首次调用时打印接触参数模式提示。
  4. sat <= 1,所有 bin 的 nucrate 直接置零。
  5. sat > 1,先计算水分子数密度 nh2o = ph2o/(kbz*temp)、临界胚胎半径 rstar、临界胚胎分子数 gstar
  6. 计算平面基底近似形状因子 fshapesimple = (2+m)(1-m)^2/4
  7. 对每个水云半径 bin:
    • n_ccn(i) < 1e-10,跳过昂贵计算并令成核率为 0。
    • rad_cld(i) > 3000*rstar,使用平面近似形状因子。
    • 否则调用 fshape(mtetalocal, rad_cld(i)/rstar) 计算有限曲率形状因子。
    • fistardeltaf 和指数项计算 nucrate(i)deltaf 被限制在 [-100,100] 以避免指数溢出。

伪代码

nuclea(ph2o, temp, sat, n_ccn):
    mtetalocal = mteta
    if temp_dependent_m:
        if cloud_adapt_ts:
            mtetalocal = tanh fit from Maattaanen et al. 2014
        else:
            mtetalocal = min(linear fit, 0.97)

    print contact-parameter mode on first call

    if sat <= 1:
        nucrate(:) = 0
        return

    nh2o = ph2o / (kbz * temp)
    rstar = 2 * sig_h2o(temp) * vo1 / (rgp * temp * log(sat))
    gstar = 4 * nav * pi * rstar^3 / (3 * vo1)
    fshapesimple = (2 + m) * (1 - m)^2 / 4

    for each cloud bin i:
        if n_ccn(i) is negligible:
            nucrate(i) = 0
            continue
        if rad_cld(i) is much larger than rstar:
            zefshape = fshapesimple
        else:
            zefshape = fshape(m, rad_cld(i)/rstar)
        fistar = 4/3*pi*sig_h2o(temp)*rstar^2*zefshape
        deltaf = clamp((2*desorp - surfdif - fistar)/(kbz*temp), -100, 100)
        nucrate(i) = prefactor * exp(deltaf)

参与的主题流程

主题 参与方式
水循环 microphys=.true. 的完整水冰云微物理中计算尘核上水冰异质成核率
尘埃清除 / CCN 转换 improvedcloudsrate 把 dust mass/number 减少并把对应质量/数目加入 ccn_mass/ccn_number
微物理配置 temp_dependent_mcloud_adapt_tsmteta 改变接触参数,从而改变成核能垒
水冰云微物理 growthrate 共同构成完整水云方案中的成核和冰晶增长两段

写法特点

复现要点

待确认

相关页面