co2condens

所属文件

LMDZ.MARS\libf\phymars\co2condens_mod.F

所属模块

co2condens_mod

例程定位

SUBROUTINE co2condens (行 11–890)

例程职责

CO2 地表和大气凝结/升华的主调度例程。根据 Forget et al. (Icarus, 1998) 方案,处理:

  1. 大气中 CO2 凝结/升华(co2clouds=false 时自行计算,co2clouds=true 时接收微物理方案的沉降通量)
  2. 地表 CO2 冰凝结/升华(含降雪撞击加热、可用 CO2 tracer 限制、冰层完全升华保护)
  3. 地表 CO2 冰 albedo/emissivity 更新
  4. sigma 层校正(Van Leer 垂直输送 T/U/V/Q)
  5. 调用 co2snow 更新地表发射率
  6. 可选的 CO2 清除尘埃/水冰(scavenging_by_co2

被调用例程

被调用例程 所在模块/文件 调用位置 作用
co2snow co2snow_mod 行 841 更新地表发射率(CO2 雪/冰覆盖效应)
albedocaps albedocaps_mod 行 617 更新极冠 albedo 和 emisref
scavenging_by_co2 本文件 行 359 CO2 凝结清除尘埃/水冰(scavco2cond=true 时)
vl1d 本文件 行 703-712 Van Leer 1D 垂直输送算子
abort_physic (GCM 内部) 行 559, 724, 980 异常终止
write_output write_output_mod 行 368, 389, 394 诊断输出

输入

输入 来源 类型/维度 单位 含义
ngrid physiq INT - 大气格点数
nlayer physiq INT - 大气层数
nq physiq INT - tracer 数量
nslope physiq INT - 子坡面数
ptimestep physiq REAL s 物理时间步长
pcapcal physiq REAL (ngrid,nslope) J/K 地表热容量
pplay physiq REAL (ngrid,nlayer) Pa 层中气压
pplev physiq REAL (ngrid,nlayer+1) Pa 层界面气压
ptsrf physiq REAL (ngrid,nslope) K 地表温度
pt physiq REAL (ngrid,nlayer) K 大气温度
pphi physiq REAL (ngrid,nlayer) m²/s² 位势高度
pdt physiq REAL (ngrid,nlayer) K/s 温度倾向(其他过程)
pdu/pdv physiq REAL (ngrid,nlayer) m/s² 风速倾向
pdtsrf physiq REAL (ngrid,nslope) K/s 地表温度倾向
pu/pv physiq REAL (ngrid,nlayer) m/s 风速
pq physiq REAL (ngrid,nlay,nq) kg/kg tracer 混合比
pdq physiq REAL (ngrid,nlay,nq) kg/kg/s tracer 倾向
zdqssed_co2 co2cloud REAL (ngrid) kg/m²/s CO2 冰地表沉积通量(co2clouds=true 时)
pcondicea_co2microp co2cloud REAL (ngrid,nlayer) kg/kg/s CO2 凝结速率(co2clouds=true 时)
fluxsurf_sw physiq REAL (ngrid,2) - 地表短波通量
zls physiq REAL rad 太阳经度
rdust physiq REAL (ngrid,nlayer) m 尘埃有效半径

输出

输出 去向 类型/维度 单位 含义
pdtc physiq REAL (ngrid,nlayer) K/s CO2 凝结/升华温度倾向
pdtsrfc physiq REAL (ngrid,nslope) K/s 地表温度倾向
pdpsrf physiq REAL (ngrid) Pa/s 地面气压倾向
pduc/pdvc physiq REAL (ngrid,nlayer) m/s² 风速倾向
pdqc physiq REAL (ngrid,nlayer,nq) kg/kg/s tracer 倾向
pdqsc physiq REAL (ngrid,nq,nslope) kg/m²/s 地表 tracer 倾向

INOUT 参数

参数 类型/维度 单位 含义
piceco2 REAL (ngrid,nslope) kg/m² 地表 CO2 冰量
perennial_co2ice REAL (ngrid,nslope) kg/m² 多年 CO2 冰量(paleoclimate 用)
psolaralb REAL (ngrid,2,nslope) - 地表 albedo
pemisurf REAL (ngrid,nslope) - 地表发射率

共享状态与副作用

核心逻辑

firstcall 初始化(行 203-230)

大气凝结(行 283-392)

CO2 体积混合比(行 288-303):

分支:co2clouds=false(自计算凝结)(行 305-367):

  1. 凝结温度:ztcond = 1/(bcond - acond*log(0.01*vmr_co2*pplay))
  2. 从顶层向下循环:若 zt < ztcond 或有降雪落入,凝结发生。
  3. 凝结率:zcondicea = (pplev(l)-pplev(l+1)) * ccond * (ztcond-zt)/ptimestep - zfallheat
  4. 降雪落入加热:zfallheat = zfallice(l+1) * (ΔΦ + cpice*(ztcond(l+1)-ztcond(l))) / latcond
  5. 冰完全升华保护:若 zfallice(l+1) < -zcondicea,限制凝结率。
  6. 可选 scavenging_by_co2 清除尘埃/水冰。

分支:co2clouds=true(接收微物理方案)(行 371-392):

地表凝结/升华(行 402-563)

  1. 地表凝结温度:ztcondsol = 1/(bcond - acond*log(0.01*vmr_co2(1)*pplev(1)))
  2. 对每个格点和子坡面:
    • 条件:ztsrf < ztcondsol(凝结)或有降雪或有冰可升华。
    • 凝结率:zcondices = pcapcal*(ztcondsol-ztsrf) / ((latcond+cpp*(zt(1)-ztcond))*ptimestep) - zfallheat
    • 升华率:zcondices = pcapcal*(ztcondsol-ztsrf) / (latcond*ptimestep) - zfallheat
    • 可用 CO2 限制(ico2≠0):若第一层 CO2 不够凝结,限制 zcondices
    • 冰完全升华保护。
    • 更新 piceco2pdpsrf = -g * zdiceco2_mesh_avg
  3. pdpsrf 超过总气压时 abort_physic

Albedo/emissivity 更新(行 566-627)

Sigma 层校正(行 630-825)

对有凝结/升华的格点:

  1. 计算质量通量 zmfluxzmflux(1) = -zcondices_mesh_avg - zdqssed_co2,逐层减去 condens_layer
  2. Van Leer 输送(vl1d)计算 T/U/V/Q 的界面值。
  3. 计算 zdtsig(温度倾向)、pduc/pdvc(风速倾向)、pdqc(tracer 倾向)。
  4. CO2 tracer 特殊处理:凝结时 pdqc(co2)(zqm(co2)-1) 项(CO2 从气相移除)。

南极极冠锁定(行 871-888)

caps=trueobliquit<27° 且非 paleoclimate 时,将南极点地表温度锁定为 ztcondsol

伪代码

co2condens(ngrid, nlayer, nq, nslope, ptimestep, ...):

  if firstcall:
    bcond = 1/136.27, ccond = cpp/(g*latcond), acond = r/latcond
    搜索 ico2, 计算 A, B, m_co2, m_noco2

  zt = pt + pdt*ptimestep
  zq = pq + pdq*ptimestep

  // --- CO2 体积混合比 ---
  if improved_ztcond and ico2≠0:
    vmr_co2 = qco2 * mmean / m_co2
  else:
    vmr_co2 = 0.95

  // --- 大气凝结 ---
  if NOT co2clouds:
    ztcond = 1/(bcond - acond*log(0.01*vmr_co2*pplay))
    从顶层向下: zt < ztcond → 凝结, 计算 zcondicea, zfallice
    可选 scavenging_by_co2
  else:
    condens_layer = pcondicea_co2microp * Δp/g
    zfallice(1) = zdqssed_co2
    piceco2 += zdqssed_co2 * ptimestep

  // --- 地表凝结/升华 ---
  ztcondsol = 1/(bcond - acond*log(0.01*vmr_co2(1)*pplev(1)))
  对每个 ig, islope:
    ztsrf < ztcondsol → 凝结, 否则升华
    可用 CO2 限制, 冰完全升华保护
    更新 piceco2, pdpsrf

  // --- Albedo/emissivity ---
  albedocaps → 更新 albedo, emisref
  无冰时 pemisurf = emissiv

  // --- Sigma 层校正 ---
  计算 zmflux, vl1d 输送 T/U/V/Q
  pdtc += zdtsig, pduc/pdvc/pdqc 更新

  // --- CO2 snow ---
  co2snow → 更新 pemisurf

  // --- 南极锁定 ---
  if caps and obliquit<27: pdtsrfc(south_pole) = (ztcondsol-ztsrf)/ptimestep

参与的主题流程

主题 参与方式
CO2 循环 (CO2-cycle) 核心:地表和大气 CO2 凝结/升华、地表冰量和气压变化、极冠 albedo/emissivity
尘埃循环 (dust-cycle) 清除路径:scavenging_by_co2 时尘埃被 CO2 冰捕获

写法特点

复现要点

待确认

复现风险

相关页面