leapfrog 动力-物理耦合
输入范围
LMDZ.COMMON-6.3\LMDZ.COMMON\libf\dyn3d\leapfrog.F
LMDZ.MARS\libf\dynphy_lonlat\phymars\leapfrog_nogcm.F
Mars 运行参与度:必经。COMMON 完整 GCM 通过 calfis 接收动力列状态,再由 addfi 把物理 tendency 写回动力数组;MARS phymars/leapfrog_nogcm.F 还在该段完成 pressure/CO2/teta 的松弛混合,作为 Mars 侧边界记录。
physics 调用前刷新
当 apphys=.TRUE. 时,两个例程都会先刷新物理所需状态:
pression由ps重算层界压力p。exner_hyb或exner_milieu重算pks/pk/pkf。geopot重算phi。- 计算传给 physics 的
jD_cur/jH_cur。 - 若
ip_ebil_dyn>=1且planet_type=="earth",调用diagedyn做 physics 前能量诊断。
完整 GCM 中 geopotential 使用 CP(T) 适配后的 tsurpk;MARS nogcm 变体在 physics 前用 teta 版本的 geopot。
calfis/addfi
调用链:
CALL calfis(lafin,jD_cur,jH_cur,ucov,vcov,teta,q,masse,ps,p,pk,phis,phi,
du,dv,dteta,dq,flxw,dufi,dvfi,dtetafi,dqfi,dpfi)
CALL addfi(dtphys,leapf,forward,ucov,vcov,teta,q,ps,
dufi,dvfi,dtetafi,dqfi,dpfi)calfis 只产生 physics tendency;addfi 才把 tendency 加到动力状态。addfi 之后 ps 可能改变,所以完整 GCM 立即执行:
pressionmassdairexner_hyb或exner_milieu
完整 GCM 额外 forcing
| 分支 | 条件 | 行为 |
|---|---|---|
| top boundary | iflag_top_bound>0 且 physics 段内 |
top_bound(...,dtphys,dutop),再把 dutop 转成 tendency |
| Newtonian academic | iflag_phys==2 |
对 teta 做 Newtonian relaxation,giant 分支可加 intrinsic heat flux |
| friction | iflag_phys==2 |
调用 friction(ucov,vcov,dtvr) |
| stratospheric top | iflag_phys==2 且 ok_strato |
调用 top_bound(...,dtvr,dutop) |
nogcm pressure/CO2/teta 混合
nogcm 在 addfi 后走一段替代动力再分布逻辑:
- 保存 CO2 tracer 质量
mq=masse*q(:,:,igcm_co2)。 - 用
globaverage2d(ps)得到psmean,构造参考压力p0*kpd。 - 用
tau_ps把ps松弛到参考压力,负压时设置小正值。 - 因
ps改变,用(ps/oldps)**kappa修正teta。 - 重算
p/masse/pk。 - 用
mq/masse恢复 CO2 混合比,保持 CO2 质量一致。 - 垂直混合 CO2:每列按 pressure thickness 求平均,再写回所有层。
- 水平松弛 CO2 到全球平均。
- 对
teta按层做面积加权平均松弛,时间尺度tau_teta。
复现要点
- physics tendency 写回后必须刷新
p/masse/pk,否则后续输出、耗散或 restart 的 pressure/mass 会与ps不一致。 - nogcm 的 CO2 逻辑只有在
tname(iq)=="co2"找到igcm_co2后才有意义;未找到时相关分支跳过。 lafin只告诉 physics 当前是否最后一次调用,不等同于例程自然返回。
待确认
- nogcm 中 CO2 pressure mixing 的 Mars 物理意图和默认时间尺度需要与 Mars 物理文档或实验配置进一步确认。