physiq CO2 循环调用点

本页只追踪 physiq 主时间步循环中与 CO2 循环直接相关的两个调用点 co2cloud(大气 CO2 云微物理)和 co2condens(地表/大气 CO2 凝结升华),以及它们的输入/输出、tendency 注入顺序、与沉降/诊断的关系。不覆盖 physiq 的其他物理过程。

所属文件

LMDZ.MARS\libf\phymars\physiq_mod.F

所属模块

physiq_mod(SUBROUTINE physiq / physiq_mod 内)

相关 use 语句

语句 引入对象
19 use co2condens_mod, only: co2condens, CO2cond_ps CO2 凝结主例程;1D 表压变化系数
20 use co2cloud_mod, only: co2cloud CO2 云微物理调度例程
148 use callkeys_mod, only: hdo, co2clouds, co2useh2o, meteo_flux CO2 云开关、H2O-on-CO2 成核开关、流星 CCN 开关
149 use callkeys_mod, only: callsoil, callslope, callcond callcond 控制是否调用 co2condens

co2cloudco2clouds 控制,co2condenscallcond 控制;两者是各自独立的开关。

调用顺序总览

在主时间步内,CO2 相关两个调用点出现在不同物理段,顺序如下(行号为大致定位):

  1. 第 9a bis 段(行 1912–2102)CO2 云微物理IF (co2clouds)call co2cloud(行 1934)。CO2 云示踪物的沉降在 co2cloud 的微时间步内部完成(注释行 2140),不进入第 9b 段 callsedim
  2. 第 9b 段(行 2104+)气溶胶/沉降callsedim(行 2143)处理尘埃/水冰沉降;CO2 冰示踪物已在上一步内部沉降。
  3. 第 10 段(行 2280)热层callthermos 时调用 thermosphere
  4. 第 11 段(行 2295–2404)CO2 凝结:注释明确“should be the last atmospherical physical process to be computed”(行 2297)。IF (callcond)call co2condens(行 2315)。其后才更新地表表压 ps 与压力层 zplay/zplev/zzlay/zzlev

因此 co2condens 是大气物理过程链的最后一步;表压/坐标更新依赖它输出的 pdpsrf


调用点 1:co2cloud(行 1934)

控制条件

IF (co2clouds) THEN(行 1933)。进入前先清零地表沉降累加器:zdqssed_co2(:)=0.zdqssed_ccn(:,:)=0.(行 1930–1931)。

调用语句

call co2cloud(ngrid,nlayer,ptimestep,
     zplev,zplay,pdpsrf,zzlay,pt,pdt,
     pq,pdq,zdqcloudco2,zdtcloudco2,
     nq,tau,tauscaling,rdust,rice,riceco2,nuice,
     rhocloud, rsedcloudco2,rhocloudco2,zzlev,zdqssed_co2,
     zdqssed_ccn,pdu,pu,zcondicea_co2microp)

主要输入

变量 含义
zplev,zplay,zzlay,zzlev 压力层/层间高度
pt,pdt 温度及当前累计温度 tendency
pq,pdq 示踪物及当前累计 tendency
rice,riceco2,nuice 水冰/CO2 冰有效半径与方差
tau,tauscaling 尘埃光学厚度及缩放

主要输出(co2cloud 返回的局部 tendency)

变量 含义
zdqcloudco2(:,:,:) 各示踪物的云微物理 tendency
zdtcloudco2(:,:) 潜热释放温度 tendency
zdqssed_co2(:) CO2 冰地表沉降通量
zdqssed_ccn(:,:) CCN 地表沉降通量(各示踪物)
zcondicea_co2microp(:,:) 微物理凝结率(传递给 co2condens,见调用点 2)

调用后的 tendency 注入(行 1941–2101)

  1. 地表 CCN 沉降(行 1941–1948):dqsurf(ig,iq,islope) += zdqssed_ccn(ig,iq)*cos(pi*def_slope_mean(islope)/180.),按坡度投影分配到各 islope
  2. 潜热温度(行 1950–1952):pdt += zdtcloudco2
  3. 无条件示踪物增量(行 1958–1974):dust_massdust_numberco2co2_iceccnco2_massccnco2_number 各自 pdq += zdqcloudco2
  4. if (meteo_flux)(行 1976–1984):增量 ccnco2_meteor_massccnco2_meteor_number
  5. if (co2useh2o)(行 1986–2054):增量 h2o_iceccn_massccn_numberccnco2_h2o_mass_iceccnco2_h2o_mass_ccnccnco2_h2o_number;随后多组 where 负值保护(把对应 tendency 重置为 -pq/ptimestep + 1.e-30,确保更新后非负)。
  6. ccnco2 主族负值保护(行 2055–2069):ccnco2_mass/ccnco2_number 任一将变负则两者一起重置。
  7. dust 负值保护(行 2071–2085):dust_mass/dust_number 成对重置。
  8. if (meteo_flux) meteor 负值保护(行 2086–2101):ccnco2_meteor_mass/ccnco2_meteor_number 成对重置。

负值保护的统一模式:质量与数量是耦合的,任一变负就把这一对都钳到 -pq/ptimestep + 1.e-30,保证 pq + ptimestep*pdq ≥ 1.e-30


调用点 2:co2condens(行 2315)

控制条件

IF (callcond) THEN(行 2308)。进入前清零所有输出累加器:zdtc, zdtsurfc, zduc, zdvc, zdqc, zdqsc(行 2309–2314)。

可选前置(行 2299–2305):IF (tituscap) 时调用 geticecover 用 Titus 观测覆盖 qsurf_tmp(:,igcm_co2)(单位换算 ×10000)。

调用语句

CALL co2condens(ngrid,nlayer,nq,nslope,ptimestep,
     capcal,zplay,zplev,tsurf,pt,
     pphi,pdt,pdu,pdv,zdtsurf,pu,pv,pq,pdq,
     qsurf(:,igcm_co2,:),perennial_co2ice,
     albedo,emis,rdust,
     zdtc,zdtsurfc,pdpsrf,zduc,zdvc,zdqc,
     fluxsurf_dn_sw,zls,
     zdqssed_co2,zcondicea_co2microp,
     zdqsc)

关键耦合输入

变量 来源 含义
zdqssed_co2 调用点 1(co2cloud CO2 冰地表沉降通量
zcondicea_co2microp 调用点 1(co2cloud 微物理凝结率,co2clouds=trueco2condens 用它代替自算大气凝结
qsurf(:,igcm_co2,:) 地表 CO2 冰储库 按坡度分量
capcal,emis,albedo 地表能量/光学属性 凝结后更新

co2cloud 的两个输出 zdqssed_co2zcondicea_co2microp 是连接两个调用点的关键纽带:大气 CO2 凝结的“计算”在 co2cloud 完成,co2condens 据此处理地表沉积与层质量/动量校正。

主要输出

变量 含义
zdtc(:,:) 大气温度 tendency
zdtsurfc(:,:) 地表温度 tendency(按 islope)
zduc,zdvc(:,:) 风场 tendency(sigma 层校正)
zdqc(:,:,:) 示踪物 tendency
zdqsc(:,:,:) 地表示踪物(CO2 冰)tendency
pdpsrf(:) 表压变化率

调用后的处理(行 2325–2403)

  1. 1D 模型缩放(行 2325–2331):if (ngrid == 1)pdpsrf, zduc, zdvc, zdqc 各乘 CO2cond_ps(控制 1D 表压变化幅度)。
  2. 地表示踪物累加(行 2333–2337):dqsurf(ig,iq,:) += zdqsc(ig,iq,:)
  3. 大气 tendency 注入(行 2338–2344):pdt += zdtcpdv += zdvcpdu += zduc
  4. 地表温度(行 2345–2347):zdtsurf += zdtsurfc
  5. 示踪物 tendency(行 2349–2355):pdq += zdqc
  6. #ifndef MESOSCALE 表压与坐标更新(行 2357–2403):
    • ps(ig) = zplev(ig,1) + pdpsrf(ig)*ptimestep(行 2360)。
    • 用更新后的 ps 重算 zplay = aps + bps*pszplev = ap + bp*ps(行 2363–2369),顶层 zplev(:,nlayer+1)=0.
    • 重算各层高度 zzlay(用对数平均温度 tlaymean 与高度依赖重力 gz,行 2372–2402)和层间高度 zzlev

只有 co2condens 后才更新表压/垂直坐标,因为它是改变总气柱质量(CO2 凝结到地表)的过程。中尺度版(MESOSCALE)跳过这段,由动力核处理。

与后续地表/土壤更新的关系


CO2 循环诊断/输出调用点

位置 条件 内容
行 2948–2963 if (co2clouds) 计算柱积分 vaptotco2icetotco2mtotco2(CO2 气/冰/总柱质量)
行 3090–3100 if (co2clouds)#ifndef MESOSCALE WSTATS 段内) wstats 累计 mtotco2/icetotco2/vaptotco2
行 3457–3499 if (igcm_co2.ne.0)if (co2clouds) write_output 输出 co2ccnqco2ccnNco2co2_icemtotco2icetotco2vaptotco2co2useh2o 子块输出 ccnqco2_h2o_m_ice/m_ccn/ccnNco2_h2ometeo_flux 子块输出 ccnqco2_meteor/ccnNco2_meteor

控制流程小结

[第 9a bis 段] IF (co2clouds):
    zero zdqssed_co2, zdqssed_ccn
    call co2cloud -> zdqcloudco2, zdtcloudco2, zdqssed_co2, zdqssed_ccn, zcondicea_co2microp
    dqsurf += zdqssed_ccn (per islope)
    pdt += zdtcloudco2
    pdq += zdqcloudco2 (dust, co2, co2_ice, ccnco2 主族)
    IF (meteo_flux): pdq += meteor 族
    IF (co2useh2o): pdq += h2o_ice/ccn/ccnco2_h2o 族 + 负值保护
    负值保护 (ccnco2 主族 / dust / meteor)

[第 9b 段] callsedim (CO2 示踪物已在 co2cloud 内沉降,跳过)

[第 11 段] IF (callcond):
    IF (tituscap): geticecover -> qsurf_tmp(co2)
    zero zdtc/zdtsurfc/zduc/zdvc/zdqc/zdqsc
    call co2condens(..., zdqssed_co2, zcondicea_co2microp, ...)
        -> zdtc, zdtsurfc, zduc, zdvc, zdqc, zdqsc, pdpsrf
    IF (ngrid==1): 各输出 *= CO2cond_ps
    dqsurf += zdqsc; pdt += zdtc; pdv += zdvc; pdu += zduc
    zdtsurf += zdtsurfc; pdq += zdqc
    #ifndef MESOSCALE: 用 pdpsrf 更新 ps, zplay, zplev, zzlay, zzlev

[第 11 段后] qsurf += ptimestep*dqsurf; tsurf += ptimestep*zdtsurf
[诊断] co2clouds 柱积分; wstats; write_output (含 co2useh2o / meteo_flux 子块)

复现注意事项

源码疑点与边界