leapfrog 动力计算和 tracer 输送段
输入范围
LMDZ.COMMON-6.3\LMDZ.COMMON\libf\dyn3d\leapfrog.F
LMDZ.MARS\libf\dynphy_lonlat\phymars\leapfrog_nogcm.F
Mars 运行参与度:条件经过。COMMON 完整 GCM 入口会执行本页的动力/输送段;MARS nogcm 变体保留接口但把动力 tendency 清零,不调用 caldyn/caladvtrac/integrd。
完整 GCM 调用顺序
每个 label 2 步中,完整 leapfrog.F 的动力段顺序是:
tpot2t把teta和pk转成温度temp。- 构造
tsurpk=cpp*temp/pk。 geopot(ip1jmp1,tsurpk,pk,pks,phis,phi)计算 geopotential。caldyn(...)计算du/dv/dteta/dp/w/pbaru/pbarv。- 若
planet_type=="generic"且ok_guide,把uforcnudging 加到du。 - 若
forward .OR. leapf,调用caladvtrac(q,pbaru,pbarv,p,masse,dq,teta,flxw,pk)。 - 若
offline且启用 IOIPSL,调用fluxstokenc写 mass flux。 - 调用
integrd(nqtot,...,dv,du,dteta,dq,dp,...,q,ps,masse,phis)写回状态。 - Titan tidal 分支可额外加
tidal_forces。
tendency 输入输出
| 例程 | 主要输入 | 输出/副作用 |
|---|---|---|
caldyn |
当前 ucov/vcov/teta/ps/masse/pk/pkf/phi |
du/dv/dteta/dp/w/pbaru/pbarv |
caladvtrac |
q/pbaru/pbarv/p/masse/teta/pk |
dq 和 flxw |
fluxstokenc |
pbaru/pbarv/masse/teta/phi/phis/dtvr/itau |
offline tracer flux history |
integrd |
上一步状态 ...m1 和 tendency |
更新 ucov/vcov/teta/q/ps/masse |
integrd 接收 nqtot,因此 tracer 维度由 infotrac contract 控制。
NODYN 和 nogcm
完整 leapfrog.F 有 #ifdef NODYN 分支:将 dv/du/dteta/dq/dp/flxw 置零,绕过 caldyn/caladvtrac/integrd 前的动力计算。
MARS phymars/leapfrog_nogcm.F 则直接把:
dv=0
du=0
dteta=0
dq=0并跳过完整动力段和 integrd。它后续通过 physics 后的 pressure/CO2/temperature mixing 来替代部分再分布效果。
与已有 helper 页的关系
- caldyn 串并行对照:解释
du/dv/dteta/dp/w/pbaru/pbarv的动力来源。 - advtrac 串并行对照:解释
iadv如何决定 tracer 输送路径。 - integrd 串并行对照:解释 tendency 写回和非法压力检查。
- fluxstokenc 串并行对照:解释 offline flux storage。
复现要点
caladvtrac使用步初状态和caldyn给出的 mass flux;不要把 physics 后的masse回填到这一段。- 完整 GCM 中
caladvtrac只在forward或leapf步调用,不在 backward Matsuno 步调用。 - nogcm 页面中的
q仍会被 physics 和 CO2 mixing 改变,但不是由caladvtrac改变。
待确认
NODYN预处理构建与 nogcm 运行的实际使用差异,需要 build/arch 页面确认。