improvedco2clouds_mod.F90

路径

LMDZ.MARS\libf\phymars\improvedco2clouds_mod.F90

所属目录/模块

libf/phymars

文件定位

CO2 云微物理核心模块。基于 improvedclouds_mod.F(水冰云)改编,包含 CO2 冰晶成核(尘埃、流星体、水冰三类 CCN)、质量增长/升华和 CCN 释放逻辑。被 co2cloud_mod 在每个微时间步调用。

定义的符号

符号 类型 行号 作用
improvedco2clouds_mod module 10 CO2 云微物理核心模块
improvedCO2clouds subroutine 62 CO2 云成核、增长、升华主例程

依赖的模块

use 模块 only 列表 用途 待确认
comcstfi_h pi, g, cpp 物理常数
updaterad updaterice_micro, updaterice_microco2, updaterccnCO2 更新冰粒半径和 CCN
tracer_mod igcm_dust_mass/number, rho_dust, igcm_h2o_ice, igcm_ccn_mass/number, igcm_co2, igcm_co2_ice, igcm_ccnco2_mass/number, igcm_ccnco2_h2o_*, nuice_sed, nuiceco2_sed/ref, igcm_ccnco2_meteor_* tracer 索引和物理常数
conc_mod mmean 平均分子量
tcondco2_mod tcondco2 CO2 凝结温度
time_phylmdz_mod daysec 一天秒数 待确认:代码中未直接使用
nucleaco2_mod nucleaco2 CO2 异质成核率
datafile_mod datadir 数据文件目录
massflowrateco2_mod massflowrateco2 CO2 冰粒质量增长/升华通量
density_co2_ice_mod density_co2_ice CO2 冰密度(温度依赖)
microphys_h nbinco2_cld, rad_cldco2, m0co2, mco2, mteta, mtetaco2 微物理参数
callkeys_mod co2useh2o, meteo_flux 运行时开关

调用的关键例程

被调用例程 所在模块/文件 调用位置 作用
co2sat (外部) 行 315 计算 CO2 饱和蒸汽压
tcondco2 tcondco2_mod 行 316 计算 CO2 凝结温度(输入含 co2 + co2_ice)
updaterccnCO2 updaterad 行 352 更新尘埃 CCN 半径
nucleaco2 nucleaco2_mod 行 382, 413, 460 计算异质成核率(尘/流星/水冰各一次)
updaterice_micro updaterad 行 432 更新水冰粒半径(co2useh2o 时)
density_co2_ice density_co2_ice_mod 行 344 计算温度依赖的 CO2 冰密度
massflowrateco2 massflowrateco2_mod 行 531 计算 CO2 冰粒质量增长/升华通量
updaterice_microco2 updaterad 行 521 更新 CO2 冰粒半径和云密度

输入

输入 来源 类型/维度 单位 含义
ngrid co2cloud INT - 格点数
nlay co2cloud INT - 层数
microtimestep co2cloud REAL s 微时间步长
pplay co2cloud REAL (ngrid,nlay) Pa 层中气压
pplev co2cloud REAL (ngrid,nlay+1) Pa 层界面气压
pteff co2cloud REAL (ngrid,nlay) K 有效温度
sum_subpdt co2cloud REAL (ngrid,nlay) K/s 温度倾向(之前过程)
pqeff co2cloud REAL (ngrid,nlay,nq) kg/kg tracer 混合比
sum_subpdq co2cloud REAL (ngrid,nlay,nq) kg/kg/s tracer 倾向(之前过程)
nq co2cloud INT - tracer 数量
tauscaling co2cloud REAL (ngrid) - 尘埃量转换因子
rb_cldco2 co2cloud DOUBLE (nbinco2_cld+1) m CO2 冰粒半径 bin 边界(对数空间)
sigma_iceco2 co2cloud REAL - CO2 冰/CCN 分布方差
dev2 co2cloud DOUBLE - 1/(sqrt(2)*sigma_iceco2)

输出

输出 去向 类型/维度 单位 含义
subpdqcloudco2 co2cloud REAL (ngrid,nlay,nq) kg/kg/s CO2 微物理产生的 tracer 倾向
subpdtcloudco2 co2cloud REAL (ngrid,nlay) K/s CO2 微物理温度倾向(潜热)

共享状态与副作用

核心逻辑

  1. firstcall 初始化(行 246-289):sigma_ice = sqrt(log(1+nuice_sed));读取流星体通量文件。

  2. 初始化(行 293-311):zt = pteff + sum_subpdt*microtimestepzq = pqeff + sum_subpdq*microtimestep(低于 threshold 归零),保存初始值 zq0

  3. 计算饱和(行 315-316):co2satzqsat(饱和蒸汽压);tcondco2tcond(凝结温度,输入含 co2 + co2_ice)。

  4. 流星体 CCN 插值(行 320-332):将流星体通量从文件气压层插值到模式层,meteor_ccn = meteor(idx_min,:)/masse

  5. 主循环(行 336-588)——对每个格点和层:

    4.1 成核satu >= 1 时,行 351-495):

    • 尘埃 CCN:展开尘埃 log-normal 分布为 binned n_aer/m_aer,调用 nucleaco2(接触因子 mtetaco2=0.95),概率 Proba = 1-exp(-microtimestep*rate),更新 ccnco2/dust tracer。
    • 流星体 CCNmeteo_flux=true):对 meteor_ccn 调用 nucleaco2,更新 ccnco2_meteor 和 ccnco2 总量。
    • 水冰 CCNco2useh2o=true):展开水冰 CCN 分布(用 sigma_icedev3),调用 nucleaco2(接触因子 mteta),按 ratioh2o_ccn 分配质量到 ccnco2_h2o_mass_ice/ccn,从水冰/CCN 中扣除。

    4.2 冰增长ccnco2_number*tauscaling >= 1 时,行 503-555):

    • 更新 riceco2/rhocloudco2
    • 计算温度依赖潜热:lw = l0 + l1*T + l2*T² + l3*T³ + l4*T⁴(Azreg-Aïnou 2005)。
    • 能量限制:facteurmax = |tcond-zt| * cpp/lw
    • 调用 massflowrateco2Ic_rice(单粒子质量增长率 kg/s)。
    • dMice = ccnco2_number * Ic_rice * microtimestep * tauscaling
    • 裁剪:dMice ∈ [-facteurmax, -co2_ice] ∩ [-co2, facteurmax]
    • 更新:co2_ice += dMiceco2 -= dMicesubpdtcloudco2 = dMice*lw/cpp/microtimestep

    4.3 CCN 释放co2_ice < threshold_2ccnco2_number*tauscaling < 1 时,行 558-586):

    • 尘埃 CCN 归还:dust += ccnco2ccnco2 = 0
    • 流星体 CCN:从 dust 中扣除流星体部分(避免重复计数),ccnco2_meteor = 0
    • 水冰 CCN:ccnco2_h2o 归还到 ccn_mass/h2o_ice/ccn_number。
    • CO2 气相回收:co2 += co2_iceco2_ice = 0
  6. 倾向计算(行 592-627):subpdqcloudco2 = (zq - zq0) / microtimestep,对所有相关 tracer。

伪代码

improvedCO2clouds(ngrid, nlay, microtimestep, ...):

  if firstcall:
    sigma_ice = sqrt(log(1+nuice_sed))
    if meteo_flux: 读取 Meteo_flux_Plane.dat

  zt = pteff + sum_subpdt * microtimestep
  zq = pqeff + sum_subpdq * microtimestep (threshold 保护)
  zq0 = zq

  zqsat = co2sat(zt)
  tcond = tcondco2(pplay, co2 + co2_ice)

  if meteo_flux: 插值流星体通量到模式层

  for l, ig:
    pco2 = co2 * (mmean/mco2*1e3) * pplay
    satu = pco2 / zqsat
    rho_ice_co2T = density_co2_ice(zt)

    // --- 成核 (satu >= 1) ---
    尘埃 CCN: n_aer/m_aer = log-normal 展开, nucleaco2(mtetaco2), Proba=1-exp(-rate*dt)
    流星体 CCN (meteo_flux): nucleaco2, 更新 ccnco2_meteor
    水冰 CCN (co2useh2o): nucleaco2(mteta), 按 ratioh2o_ccn 分配

    // --- 冰增长 (ccnco2_number >= 1) ---
    lw = l0 + l1*T + l2*T² + l3*T³ + l4*T⁴
    facteurmax = |tcond-zt| * cpp/lw
    Ic_rice = massflowrateco2(pplay, zt, satu, riceco2, mmean)
    dMice = ccnco2_number * Ic_rice * dt * tauscaling
    dMice = clip(dMice, [-facteurmax, facteurmax])
    co2_ice += dMice, co2 -= dMice
    subpdtcloudco2 = dMice * lw / cpp / dt

    // --- CCN 释放 (co2_ice ≈ 0) ---
    dust += ccnco2, ccnco2 = 0
    流星体/水冰 CCN 归还
    co2 += co2_ice, co2_ice = 0

  subpdqcloudco2 = (zq - zq0) / microtimestep

参与的主题流程

主题 参与方式
CO2 循环 (CO2-cycle) 核心微物理:成核、冰增长/升华、CCN 转换
CO2 循环主题页 主题入口

写法特点

复现要点

待确认

复现风险

相关页面