growthrate.F

路径

LMDZ.MARS\libf\phymars\growthrate.F

所属目录 / 模块

libf\phymars

文件定位

growthrate.F 定义 growthrate_mod,提供水冰晶增长/升华阻力的局部解析辅助例程。它不直接推进水冰质量,而是根据温度、层中压强、饱和水汽分压和当前冰晶半径,计算水汽扩散系数 Dv 以及总阻力 res = Rk + Rd*(1+lambda*knudsen)

当前源码搜索中,唯一外部调用点在 improvedclouds_mod.F90 的水冰增长段:improvedclouds 先用 sig_h2o 算 Kelvin 平衡饱和修正 seq,再调用 growthrate 得到 res,最后把 res 放入隐式 dMice 公式,决定本微物理子步内水汽和水冰之间交换多少质量。因此本文件是完整水云微物理中“单颗冰晶增长阻力/扩散系数”的计算部件,而不是云方案主调度器。

定义的符号

符号 类型 行号 作用
growthrate_mod module 1 封装水冰晶增长阻力辅助例程。
growthrate subroutine 7 计算热阻 Rk、扩散阻 Rd、Knudsen 修正和水汽扩散系数,输出总阻力 resDv

依赖的模块

use 模块 only 列表 用途 待确认
tracer_mod rho_ice 水冰密度,用于热阻、扩散阻和冰晶质量-半径关系。
comcstfi_h pi 圆周率,进入平均自由程常数和扩散系数公式。
microphys_h kbz, mh2o, mco2, molco2, molh2o Boltzmann 常数、H2O/CO2 摩尔质量和有效分子半径。
microphys_h nav, rgp, To Avogadro 常数、理想气体常数和参考温度。

调用的关键例程

被调用例程 所在模块 / 文件 调用位置 作用
无显式 CALL - - 本例程只使用 Fortran 内建 sqrt 和算术表达式。

上游调用点

调用方 所在文件 调用位置 用途
improvedclouds improvedclouds_mod.F90 第 327 行 ccn_number*tauscaling >= 1 的冰增长分支中,计算 resDv,随后用于隐式 dMice 冰增长/升华公式。

输入

输入 来源 类型/维度 单位 含义
temp 调用方;improvedclouds 中为 zt(ig,l) REAL K 当前格点/层的温度。
pmid 调用方;improvedclouds 中为 pplay(ig,l) REAL Pa 层中压强。源码注释误写为 temperature (K),实际公式把它作为压力使用。
psat 调用方;improvedclouds 中为 real(ph2o/satu) REAL Pa 水汽饱和分压。
rcrystal 调用方;improvedclouds 中为 rice(ig,l) REAL m 冰晶增长前半径。

输出

输出 去向 类型/维度 单位 含义
res 调用方局部变量;improvedclouds 还写入 res_out(ig,l) REAL resistance factor 总增长阻力;improvedclouds 把它放入 res*zqsat/(cste*No*rice)+1 的隐式分母。
Dv 调用方局部变量 REAL 推断:m2/s(按 SI 公式量纲) H2O 在 CO2 背景气体中的水汽扩散系数;当前 improvedclouds 调用后没有直接再用 Dv

共享状态与副作用

growthrate_mod 不定义保存型 module 变量,不读写文件,不打印日志,也不读取运行时配置。它只读取三个共享常数来源:tracer_mod::rho_icecomcstfi_h::pimicrophys_h 的分子物理常数。副作用限于写入实参 resDv

需要注意的是,rho_icetracer_mod 中的 save 变量,并声明为 OpenMP THREADPRIVATE;本文件不初始化它。复现 growthrate 时必须保证上游 tracer 初始化已经给 rho_ice 赋值,否则阻力量级会错误。

核心逻辑

  1. 由温度计算 CO2 热导率 k = (0.17913*temp - 13.9789) * 4.184e-4
  2. 由温度和参考温度 To 计算水冰升华潜热 Lv = (2834.3 - 0.28*(temp-To) - 0.004*(temp-To)^2) * 1.e3
  3. 构造平均自由程常数 afactor = 0.707*rgp/(4*pi*molco2^2*nav)
  4. 用 H2O 热速度、H2O/CO2 碰撞截面和压强计算水汽扩散系数 Dv
  5. temp/pmid*afactor/rcrystal 得到 Knudsen 数 knudsen
  6. (1.333+0.71/knudsen)/(1+1/knudsen) 得到非连续修正系数 lambda
  7. 计算潜热释放热阻 Rk = Lv^2*rho_ice*mh2o/(k*rgp*temp^2)
  8. 计算水汽扩散阻力 Rd = rgp*temp*rho_ice/(Dv*psat*mh2o)
  9. 输出 res = Rk + Rd*(1+lambda*knudsen);源码注释明确没有直接修正 Dv,而是把修正放入阻力项。

伪代码

growthrate(temp, pmid, psat, rcrystal):
  k  = thermal_conductivity_CO2(temp)
  Lv = latent_heat_H2O(temp)

  afactor = 0.707 * R / (4*pi*molco2^2*Avogadro)

  Dv = one_third * thermal_speed_H2O(temp)
       * k_B * temp
       / (pi * pmid * (molco2+molh2o)^2 * sqrt(1+mh2o/mco2))

  knudsen = temp / pmid * afactor / rcrystal
  lambda  = (1.333 + 0.71/knudsen) / (1 + 1/knudsen)

  Rk = Lv^2 * rho_ice * mh2o / (k * R * temp^2)
  Rd = R * temp * rho_ice / (Dv * psat * mh2o)

  res = Rk + Rd * (1 + lambda * knudsen)
  return res, Dv

in improvedclouds:
  seq = Kelvin_equilibrium_saturation(...)
  growthrate(T, pplay, ph2o/satu, rice, -> res, -> Dv)
  dMice = (h2o_vap - seq*zqsat) / (res*zqsat/(4*pi*rho_ice*dt*No*rice) + 1)

参与的主题流程

主题 参与方式
水循环 microphys=.true. 的完整水冰云微物理中提供冰晶增长/升华阻力,影响 dMice 和潜热反馈。
improvedclouds_mod 唯一调用方;在冰增长分支中把 growthrate 输出接入隐式质量交换公式。

写法特点

复现要点

待确认

相关页面