CO2 循环主题
主题目标
本页串联 LMDZ.MARS 中 CO2 气相、CO2 冰云、地表 CO2 冰、CO2 雪发射率、尘埃/水冰清除和诊断输出的主流程,目标是让读者可以沿源码复现一个物理时间步内的 CO2 循环:
physiq中co2cloud与co2condens的调用点、顺序和 tendency 注入位置。co2cloud_mod如何调度improvedco2clouds、内部沉降和co2condens所需的连接量。co2sat/tcondco2如何提供 CO2 饱和蒸汽压与凝结温度。co2condens如何在co2clouds=false时自算大气凝结,在co2clouds=true时接收微物理凝结/沉降,并继续处理地表 CO2 凝结、表压和 sigma 层校正。nucleaco2、massflowrateco2、density_co2_ice在 CO2 云微物理中的位置。co2snow如何把 CO2 雪沉降反馈到地表红外发射率。scavco2cond/scavenging_by_co2、co2useh2o、meteo_flux如何把 CO2 循环与尘埃、水冰和流星尘 tracer 耦合。- 配置开关、tracer、XIOS/
write_output输出和复现风险。
源码依据:本页用 rg 只读核验了 physiq_mod.F、co2condens_mod.F、co2cloud_mod.F90、improvedco2clouds_mod.F90、co2sat.F、tcondco2.F90、nucleaco2.F90、massflowrateco2.F90、density_co2_ice.F90、co2snow.F、initracer.F90、conf_phys.F、deftank/callphys.def*、deftank/traceur.def*、deftank/xios/field_def_physics.xml、deftank/xios/file_def_physics.xml。更细的文件级证据见相关子页。
入口
| 入口例程 | 文件 | 说明 |
|---|---|---|
physiq |
libf/phymars/physiq_mod.F |
主物理时间步入口;第 9a bis 段在 co2clouds 为真时调用 co2cloud,第 11 段在 callcond 为真时调用 co2condens。 |
co2cloud |
libf/phymars/co2cloud_mod.F90 |
CO2 云主调度;只调用完整 CO2 云微物理 improvedco2clouds,再在自身内部做 CO2 冰/CCN 沉降、非负保护、云内 tendency 到格点平均的映射。 |
co2condens |
libf/phymars/co2condens_mod.F |
CO2 地表/大气凝结主例程;处理地表 CO2 冰、表压变化、sigma 层校正、co2snow 发射率反馈和可选 scavenging。 |
initracer CO2 段 |
libf/phymars/initracer.F90 |
把 traceur.def 中的 CO2/CO2 ice/CCNCO2 名字映射到 igcm_* 索引,并在 co2clouds 为真时做 tracer 存在性检查和初始物性设置。 |
参与文件
| 文件 | 参与阶段 | 作用 |
|---|---|---|
physiq_mod.F |
主调度 | 决定 co2cloud 与 co2condens 的顺序,注入 pdt/pdq/dqsurf/pdpsrf,并在 co2condens 后更新表压和垂直坐标。 |
co2cloud_mod.F90 |
CO2 云调度 | 读 imicroco2,计算 CLFvaryingCO2 云分数,调用 improvedco2clouds,调用 newsedim 做 CO2 云内部沉降,输出 pcondicea、pdqs_sedco2、pdqcloudco2、pdtcloudco2。 |
improvedco2clouds_mod.F90 |
CO2 云微物理 | 计算饱和、成核、冰增长/升华、CCN 释放,支持尘埃、流星尘和水冰三类成核基底。 |
co2sat.F / tcondco2.F90 |
热力学基础 | CO2 饱和蒸汽压与凝结温度反解。 |
nucleaco2.F90 |
成核 | 根据 CO2 分压、温度、过饱和比、CCN bin 和接触参数计算异质成核率。 |
massflowrateco2.F90 |
冰增长/升华 | 计算单个 CO2 冰粒质量传输率 Ic,由 improvedco2clouds 转成 tracer 质量变化。 |
density_co2_ice.F90 |
冰密度 | 给定温度返回 CO2 冰密度;improvedco2clouds 用于 vo2co2,updaterad/aeropacity 也会使用。 |
co2condens_mod.F |
凝结/表压 | 处理大气与地表 CO2 凝结、地表冰量、albedo/emissivity、sigma 层校正、Van Leer 输运和 scavenging。 |
co2snow.F |
地表发射率 | 根据地表 CO2 雪沉降通量降低红外发射率,并按雪变质时间尺度向参考发射率弛豫。 |
conf_phys.F / callphys.def* |
配置 | 读取 callcond、co2clouds、activeco2ice、co2useh2o、scavco2cond、CLFvaryingCO2、satindexco2、meteo_flux 等开关并做依赖检查。 |
traceur.def* / initracer.F90 |
tracer | 给出 CO2 云路径所需 tracer 名字,缺失时由 initracer 中止。 |
deftank/xios/*.xml |
输出 | 定义和选择 CO2 地表冰、第一层 CO2、柱积分、守恒和凝结 tendency 等 XIOS 字段。 |
主调用链
physiq
-> IF (co2clouds):
zero zdqssed_co2 / zdqssed_ccn
call co2cloud(..., zdqcloudco2, zdtcloudco2,
zdqssed_co2, zdqssed_ccn,
zcondicea_co2microp)
-> optional CLFvaryingCO2:
tcondco2(pplay, co2_vapor) -> tcond
cloud fraction in [mincloud, 1]
-> for microstep = 1..imicroco2:
improvedco2clouds(...)
-> co2sat / tcondco2
-> density_co2_ice
-> nucleaco2 for dust / meteor / H2O ice CCN
-> massflowrateco2 for ice growth or sublimation
non-negative guards for co2/co2_ice/ccnco2/dust/meteor/H2O groups
if sedimentation:
updaterice_microco2 -> riceco2, rhocloudco2
newsedim for co2_ice and CCNCO2 families
-> pdqcloudco2(co2)=0; CO2 gas tendency is left to co2condens
inject CO2 cloud pdt/pdq and surface CCN sedimentation into physiq accumulators
-> IF (sedimentation):
callsedim handles dust and water ice; CO2 cloud sedimentation is already done inside co2cloud
-> IF (callcond): ! last atmospheric physical process
call co2condens(...,
zdqssed_co2,
zcondicea_co2microp,
...)
-> if co2clouds=false:
compute atmospheric CO2 condensation from local ztcond
optional scavenging_by_co2
else:
consume co2cloud sedimentation/condensation diagnostics
-> surface CO2 condensation/sublimation
-> albedocaps and co2snow
-> sigma-layer correction with vl1d
inject zdtc/zdqc/zdqsc/zdtsurfc/pdpsrf
update ps, zplay, zplev, zzlay, zzlev from pdpsrf
-> diagnostics:
CO2 column totals, wstats, write_output / XIOS fields
源码依据:physiq_mod.F:1933-1939 调用 co2cloud;physiq_mod.F:2308-2322 调用 co2condens 并传入 zdqssed_co2 与 zcondicea_co2microp;physiq_mod.F:2357-2403 在 co2condens 后更新表压和垂直坐标;co2cloud_mod.F90:632 调用 improvedco2clouds,co2cloud_mod.F90:819-884 调用多组 newsedim,co2cloud_mod.F90:982 把 pdqcloudco2(co2) 置零并注明由 co2condens 计算。
计算阶段
1. 配置和 tracer 准备
最小 CO2 凝结路径只要求 co2 tracer 与 callcond=.true.。标准 GCM6 样例中 callcond=.true. 且 scavco2cond=.true.,但不启用 CO2 云微物理。CO2 云微物理路径要求 co2clouds=.true.,并要求 traceur.def 至少包含:
co2
co2_ice
ccnco2_number
ccnco2_mass
若 co2useh2o=.true.,还需要 ccnco2_h2o_number、ccnco2_h2o_mass_ice、ccnco2_h2o_mass_ccn;若 meteo_flux=.true.,还需要 ccnco2_meteor_number、ccnco2_meteor_mass。仓库自带 traceur.def.co2clouds.GCM5 含基础 CO2 云 tracer 和水/尘 tracer,但源码核验未发现自带 traceur.def* 含 ccnco2_meteor_* 或 ccnco2_h2o_* 名字;启用这两个子路径时需要用户自备 tracer 配置。
源码依据:initracer.F90:221-225 识别 co2,:467-471 识别 co2_ice,:492-531 在 co2clouds 下识别 CCNCO2/meteor/H2O 子 tracer,:846-900 做缺失检查,:1042-1058 设定基础 CO2 云 tracer 物性。
复现风险:initracer.F90:891-900 的 meteo_flux 检查块存在报错文案拷贝错误和 igcm_ccnco2_meteor_mass 重复检查,需按源码字面行为复现,但不能把报错文案当作精确设计说明。
2. physiq 中先算 CO2 云,后算 CO2 凝结
co2cloud 位于 physiq 第 9a bis 段,早于第 11 段 co2condens。这不是可交换顺序:co2cloud 输出 zdqssed_co2 和 zcondicea_co2microp,随后 co2condens 消费这两个量来处理地表沉降、表压变化和层质量校正。
co2cloud 调用后,physiq 立即把 zdtcloudco2 加入 pdt,把 zdqcloudco2 加入 dust、CO2 ice、CCNCO2、meteor 和 H2O 相关 tracer。CO2 气相 tracer 的微物理 tendency 在 co2cloud_mod 中被置零,外层实际 CO2 气相变化由 co2condens 的 sigma 校正和凝结逻辑给出。
复现风险:不要把 CO2 冰沉降放到 physiq 第 9b 段的 callsedim 中。源码注释和调用链表明 CO2 cloud tracers 的沉降在 co2cloud 内部 microstep 完成;callsedim 继续处理尘埃和水冰。
3. CO2 饱和和凝结温度公式
co2sat 使用 James et al. 1992 形式的饱和蒸汽压:
psat = 1.382e12 * exp(-3182.48 / T)
tcondco2 使用相同公式反解凝结温度。调用方先把 CO2 质量混合比转成 CO2 分压:
pco2 = q(ig,l) * (mmean(ig,l) / 44.01) * p(ig,l)
A = log(1.382d12)
B = -3182.48
tcond = B / (log(pco2) - A)
其中 mmean 来自 conc_mod,q 是 CO2 tracer 质量混合比。co2cloud_mod 的 CLFvaryingCO2 路径传入 CO2 vapor;improvedco2clouds_mod 传入 co2 + co2_ice 作为凝结温度反解的质量输入。
复现风险:tcondco2 对 pco2 <= 0 没有保护,复现时必须保证调用点输入为正,或记录任何额外保护会改变原始源码行为。
4. co2cloud_mod 的分派和内部沉降
CO2 云没有水循环中 simpleclouds/improvedclouds 那样的双方案分派。co2clouds=.true. 即启用 co2cloud,而 co2cloud 内部始终调用 improvedco2clouds;旧配置项 microphysco2 仍出现在 callphys.def.co2clouds.GCM5,但 conf_phys.F 不再读取它,不能把它当作有效开关。
co2cloud 首次调用时读 imicroco2,默认全局版为 30、MESOSCALE 版为 2,并读取 optprop_co2ice_1mic.dat 构造 1 mic 光学厚度查表。每个 microstep 内:
- 把此前
pdt/pdq累加成 microstep 初始状态。 - 调
improvedco2clouds得到成核、增长/升华和 CCN 释放 tendency。 - 对 CO2/CO2 ice、CCNCO2/dust、meteor、H2O 相关 tracer 做非负保护。
- 若
sedimentation=true,对co2_ice、CCNCO2、meteor 和 H2O 相关 CO2 cloud tracer 分别调newsedim。 - 输出
pcondicea、pdqs_sedco2、pdqs_sedccn、pdtcloudco2和pdqcloudco2。
CLFvaryingCO2 为真时,co2cloud 先用 tcondco2 和 SatIndex 估计云分数,把云内 tracer 放大为 pqeff = pq / co2cloudfrac,最终再把微物理 tendency 乘回 co2cloudfrac。源码疑点见下文:zdelt 未见赋值,NN = sqrt(g/zt(iq,l)*...) 使用了 iq 而非 ig。
5. improvedco2clouds 的微物理核心
improvedco2clouds 先用 co2sat(zt) 和 tcondco2(pplay, co2+co2_ice) 建立热力学状态,然后逐格逐层处理:
- CO2 分压与过饱和比:
pco2 = co2 * (mmean / mco2 * 1e3) * pplay
satu = pco2 / zqsat
- 若
satu >= 1,调用density_co2_ice得到温度依赖 CO2 冰密度,并把单分子冰体积写成vo2co2 = m0co2 / rho_ice_co2T。 - 对尘埃 CCN 调
nucleaco2(..., mtetaco2);若meteo_flux=true,对流星尘 CCN 也调nucleaco2(..., mtetaco2);若co2useh2o=true,对水冰 CCN 调nucleaco2(..., mteta)。 - 若 CCNCO2 数浓度足够,调用
massflowrateco2得到单粒质量传输率Ic_rice,并转成网格质量变化:
dMice = ccnco2_number * Ic_rice * microtimestep * tauscaling
- 用
facteurmax = abs(tcond - zt) * cpp/lw和可用co2/co2_ice对dMice双向裁剪,再更新co2_ice += dMice、co2 -= dMice、subpdtcloudco2 = dMice*lw/cpp/microtimestep。 - 若冰消失或 CCN 不足,把 CCNCO2 释放回 dust、meteor 或 H2O ice/CCN 相关 tracer,并把剩余 CO2 ice 转回 CO2 气相。
待确认:massflowrateco2 的 Kelvin 因子使用 tracer_mod::rho_ice_co2 常数,而不是 density_co2_ice 的温度依赖密度;这是源码字面行为,不能把两者混写。
6. co2condens 的两条大气凝结路径
co2condens 首先计算 CO2 体积混合比。improved_ztcond=.true. 且找到 co2 tracer 时:
vmr_co2 = qco2 * mmean / m_co2
否则使用历史路径 vmr_co2 = 0.95。随后分两条路径:
co2clouds=false:自行计算大气凝结温度ztcond = 1/(bcond - acond*log(.01*vmr_co2*pplay)),从顶层向下计算凝结/升华、下落冰通量和可选scavenging_by_co2。co2clouds=true:使用co2cloud输出的pcondicea_co2microp和zdqssed_co2,把微物理路径已经算好的 CO2 凝结/沉降接入后续地表和层质量校正。
接着 co2condens 计算地表凝结温度 ztcondsol,对每个格点和坡面处理地表 CO2 凝结/升华、可用 CO2 限制、冰完全升华保护,并给出 pdpsrf = -g * zdiceco2_mesh_avg。physiq 随后用 pdpsrf 更新 ps、zplay、zplev、zzlay、zzlev。这就是 CO2 循环与模型垂直坐标的直接耦合点。
复现风险:co2condens 被注释标为最后一个大气物理过程。改变其相对顺序会改变表压、层质量和之后所有依赖坐标的诊断。
7. co2snow、albedo/emissivity 和地表能量
co2condens 在更新地表 CO2 冰后调用 albedocaps 和 co2snow。其中 co2snow 不改质量、温度或 tracer,只改 pemisurf。其核心逻辑为:
- 若当前列没有 CO2 凝结/升华,
pemisurf = emisref。 - 若存在 CO2 雪过程,按纬度选择南/北半球参数
iceradius(icap)与dtemisice(icap)。 - 发射率变化率由两项相加:向参考发射率弛豫的雪变质项,以及由地表 CO2 冰下落通量
pfallice(ig,1)驱动的新雪项。
复现风险:pemisurf 形参声明为 intent(out),但公式读入调用前值;调用方在进入 co2snow 前确实把当前坡面发射率复制到临时数组。重新实现时应把它当作 in/out 行为处理。
8. CO2 凝结 scavenging
scavco2cond=true 时,且 co2clouds=false 时,co2condens 可调用 scavenging_by_co2。conf_phys.F 明确禁止 co2clouds 与 scavco2cond 同开,并要求 scavco2cond 需要 dustbin > 0。
scavenging_by_co2 对每个格点从顶层向下计算:
if pcondicea > 0:
captured = 1 - exp(-20 * pcondicea * dt / layer_mass)
dust/h2o_ice/ccn tendency = -pq/dt * captured
else if pcondicea < 0:
release scavenged particles in proportion to -pcondicea / pfallice
清除下来的 dust、CCN 和 H2O ice 通量最终进入地表 pdqsc。这条路径把 CO2 凝结和尘埃/水循环耦合起来,但它是参数化路径,不是 CO2 cloud 微物理内部沉降路径。
待确认:升华释放分支直接除以 pfallice(l+1),源码未见显式除零保护;pdqsc(dust_mass) 对 freedust 和 ccn 两部分分别累加,是否存在重复计数需要开发者确认。
状态变量
| 变量 | 来源 | 单位 | 含义 | 生命周期 |
|---|---|---|---|---|
pq(:,:,igcm_co2) |
physiq tracer |
kg/kg | CO2 气相质量混合比 | 主时间步状态 |
pq(:,:,igcm_co2_ice) |
physiq tracer |
kg/kg | 大气 CO2 冰 | CO2 cloud 微物理和沉降更新 |
pq(:,:,igcm_ccnco2_mass/number) |
traceur.def / initracer |
kg/kg, #/kg | CO2 云凝结核质量/数 | CO2 cloud 微物理更新 |
zdtcloudco2, zdqcloudco2 |
co2cloud |
K/s, kg/kg/s | CO2 云微物理局地 tendency | 返回 physiq 注入 |
zcondicea_co2microp |
co2cloud |
kg/kg/s | CO2 云微物理凝结率 | 传给 co2condens |
zdqssed_co2, zdqssed_ccn |
co2cloud |
kg/m2/s | CO2 冰和 CCN 地表沉降通量 | 传给 co2condens 或 dqsurf |
qsurf(:,igcm_co2,:) |
地表状态 | kg/m2 | 坡面 CO2 地表冰储量 | 跨时间步 |
pdpsrf |
co2condens |
Pa/s | CO2 凝结/升华导致的表压变化率 | 本时间步用于更新 ps |
pemisurf |
co2condens/co2snow |
- | 地表红外发射率 | 地表能量收支输入 |
riceco2, rhocloudco2, rsedcloudco2 |
co2cloud |
m, kg/m3, m | CO2 冰粒半径、云密度、沉降半径 | 微物理、沉降和诊断 |
配置开关
| 配置项 | 文件 | 影响 |
|---|---|---|
callcond |
callphys.def* / conf_phys.F |
是否调用 co2condens;源码默认 .true.。 |
co2clouds |
同上 | 是否启用 CO2 云微物理并调用 co2cloud;源码默认 .false.。 |
activeco2ice |
同上 | CO2 冰是否作为辐射活性气溶胶;源码要求 activeco2ice 依赖 co2clouds。 |
co2useh2o |
同上 | 水冰/水云 CCN 是否可作为 CO2 云凝结核;需要额外 ccnco2_h2o_* tracer。 |
meteo_flux |
同上 | 是否使用流星尘核;需要 Meteo_flux_Plane.dat 和额外 ccnco2_meteor_* tracer。 |
CLFvaryingCO2 / satindexco2 / spantCO2 |
同上 | CO2 次网格云分数与 SatIndex 路径。 |
imicroco2 |
co2cloud_mod 通过 getin |
CO2 云 microstep 数;默认全局版 30、MESOSCALE 版 2。 |
scavco2cond |
co2condens_mod / conf_phys.F |
瞬时 CO2 凝结清除 dust/H2O ice;与 co2clouds 互斥,且需要 dustbin>0。 |
nuiceco2_sed, nuiceco2_ref |
conf_phys.F / tracer_mod |
CO2 冰粒分布有效方差;影响沉降半径和参考半径。 |
albedo_perennialco2_north/south |
conf_phys.F |
多年 CO2 冰盖反照率。 |
microphysco2 |
旧 callphys.def.co2clouds.GCM5 |
已废弃;源码不再读取。 |
数据依赖
| 数据 | 来源 | 用途 |
|---|---|---|
callphys.def* |
deftank |
物理开关和数值参数。 |
traceur.def* |
deftank |
CO2、CO2 ice、CCNCO2、dust、H2O、meteor/H2O 子核 tracer 名字。 |
optprop_co2ice_1mic.dat |
datadir |
co2cloud 读取的 CO2 冰 1 mic 消光系数表;缺失会中止。 |
Meteo_flux_Plane.dat |
datadir |
meteo_flux=true 时 improvedco2clouds 读取的流星尘通量。 |
field_def_physics.xml / file_def_physics.xml |
deftank/xios |
XIOS CO2 字段定义与实际输出选择。 |
iceradius, dtemisice |
surfdat_h / start 状态 |
co2snow 的散射系数和雪变质时间尺度。 |
与其他主题的耦合
| 其他主题 | 耦合方式 |
|---|---|
| 辐射 | activeco2ice 使 CO2 冰参与辐射;co2cloud 计算 tau1mic、riceco2 等光学/粒径诊断;co2snow 改 pemisurf,进而影响地表辐射冷却。 |
| 尘埃循环 | 尘埃是 CO2 云成核基底;co2cloud 可把 dust 转成 CCNCO2 并经 newsedim 沉降;scavenging_by_co2 可由 CO2 凝结清除 dust。 |
| 水循环 | co2useh2o 允许水冰/水云 CCN 作为 CO2 云核,并更新 h2o_ice、ccn_mass、ccn_number 及 ccnco2_h2o_*;scavenging_by_co2 也可清除 H2O ice。 |
| 沉降 | CO2 cloud tracer 沉降在 co2cloud 内部直接调 newsedim,不走 physiq 第 9b 段的 callsedim。 |
| 诊断 tendency | co2cloud 输出 pdtcloudco2、pdqcloudco2、pcondicea、pdqs_sedco2;co2condens 输出 co2condens_zfallice、co2condens_pdtc 等诊断。 |
| 垂直坐标/动力耦合 | co2condens 输出 pdpsrf,physiq 随后更新表压和 zplay/zplev/zzlay/zzlev;MESOSCALE 条件编译路径跳过该段,由动力核处理。 |
输出结果
| 输出 | 去向 | 含义 |
|---|---|---|
pdt, pdq |
physiq 主状态 |
CO2 cloud 和 CO2 condensation 注入后的温度/tracer tendency。 |
dqsurf(:,igcm_co2,:) |
地表状态 | 地表 CO2 冰凝结/升华与沉降 tendency。 |
pdpsrf / ps |
表压和垂直坐标 | CO2 凝结/升华导致的大气柱质量变化。 |
riceco2, rhocloudco2, rsedcloudco2 |
诊断/后续物理 | CO2 冰粒半径、云密度和沉降半径。 |
mtotco2, icetotco2, vaptotco2 |
physiq / wstats / write_output |
CO2 柱质量、冰柱质量和气相柱质量。 |
co2ice, co2ice_slopeXX, perennial_co2ice* |
XIOS | 地表 CO2 冰和多年 CO2 冰。 |
co2_layer1, co2, vmr_co2, num_co2 |
XIOS 字段定义 | 第一层/三维 CO2 诊断;是否实际输出取决于 file_def_physics.xml 引用。 |
co2condens_zfallice, co2condens_pdtc |
XIOS 字段定义 | CO2 凝结降冰通量和温度 tendency 诊断。 |
注意:field_def_physics.xml 定义了 co2、vmr_co2、num_co2、co2condens_pdtc 等字段,但 GCM6 的 file_def_physics.xml 只引用了部分地表 CO2 冰和 co2_layer1 字段;复现输出文件时必须核对 file_def_physics.xml 是否实际启用目标字段。
伪代码总览
for each physics timestep:
read/use callphys switches and tracer indices initialized by initracer
if co2clouds:
co2cloud:
if firstcall:
imicroco2 = getin("imicroco2")
read optprop_co2ice_1mic.dat
if CLFvaryingCO2:
tcondco2(pplay, co2_vapor) -> cloudfrac
for microstep:
improvedco2clouds:
co2sat(zt) -> psat
tcondco2(pplay, co2 + co2_ice) -> tcond
density_co2_ice(T) -> rho_ice_co2T
if satu >= 1:
nucleaco2 for dust
if meteo_flux: nucleaco2 for meteor CCN
if co2useh2o: nucleaco2 for H2O ice CCN
if enough CCN:
massflowrateco2 -> Ic
dMice = Nccnco2 * Ic * dt * tauscaling
clip by thermal energy and available co2/co2_ice
update co2_ice, co2, pdt tendency
if ice exhausted:
release CCN back to dust/meteor/H2O families
protect negative tracer pairs
if sedimentation:
newsedim for co2_ice and CCNCO2 families
return pcondicea, zdqssed_co2, zdqcloudco2, zdtcloudco2
physiq injects cloud tendencies, except CO2 gas tendency is left for co2condens
if callcond:
co2condens:
compute vmr_co2 and tcond/ztcondsol
if not co2clouds:
compute atmospheric CO2 condensation
if scavco2cond: scavenging_by_co2
else:
consume pcondicea_co2microp and zdqssed_co2 from co2cloud
compute surface CO2 condensation/sublimation on each slope
update piceco2, pdpsrf, albedo/emissivity
co2snow updates pemisurf from CO2 snow flux
sigma correction with vl1d updates T/U/V/Q tendencies
physiq injects co2condens tendencies
if not MESOSCALE:
ps = zplev(:,1) + pdpsrf * dt
recompute pressure levels/layers and geometric heights
update surface state and diagnostics
源码疑点与待确认项
physiq_mod.F:2957中icetotco2(ig) = icetot(ig) + ...疑似把水冰柱积分icetot用作 CO2 冰累加基值;这会影响icetotco2/mtotco2诊断。待确认是否为已知 bug。co2cloud_mod.F90:250,524-536中zdelt参与CLFvaryingCO2云分数计算,但本页源码核验未看到赋值。复现CLFvaryingCO2时需确认编译器/调用路径下该值来源。co2cloud_mod.F90:479的 SatIndex 计算使用zt(iq,l),其中iq是 tracer 循环变量名而非网格点ig;疑似索引错误,需开发者确认。co2cloud_mod.F90use density_co2_ice但本体未直接调用;实际温度依赖密度调用在improvedco2clouds_mod.F90:344。不能据use行推断co2cloud本体直接消费该例程。co2condens_mod.F:5-7声明了CO2cond_ps,physiq在 1D 缩放中使用;子页曾记录其在co2condens内部未使用。复现 1D 时应核对physiq缩放段,而非只看co2condens本体。co2condens_mod.F:1100-1115的 scavenging 升华释放分支除以pfallice(l+1),未见显式除零保护。co2condens_mod.F:1131/ 子页记录的scav_ccn_number累积细节和pdqsc(dust_mass)双段累加需要确认是否符合设计意图。initracer.F90:891-900的 meteor tracer 检查存在报错文案拷贝错误和重复检查,影响用户定位缺失 tracer。co2snow的pemisurf形参声明为intent(out)但读入旧值,实际依赖调用方预先复制有效发射率。microphysco2出现在旧配置样例中但源码不读取;不能作为当前 CO2 云微物理开关。