leapfrog 状态约定
输入范围
LMDZ.COMMON-6.3\LMDZ.COMMON\libf\dyn3d\leapfrog.F
LMDZ.MARS\libf\dynphy_lonlat\phymars\leapfrog_nogcm.F
Mars 运行参与度:必经 到 条件经过。COMMON 完整 GCM 入口调用 leapfrog.F;Mars 侧 phymars/nogcm.F90 调用 MARS 树中的 leapfrog_nogcm.F,只作为使用 COMMON 状态模块的边界说明,不是 COMMON 源文件。两者共享动力状态数组约定,但 MARS nogcm 变体关闭大部分动力 tendency。
入口接口
两个例程入口形状一致:
SUBROUTINE leapfrog(ucov,vcov,teta,ps,masse,phis,q,time_0)
SUBROUTINE leapfrog_nogcm(ucov,vcov,teta,ps,masse,phis,q,time_0)| 实参 | 维度 | 读写 | 含义 |
|---|---|---|---|
ucov |
ip1jmp1,llm |
inout | 纬向 covariant wind |
vcov |
ip1jm,llm |
inout | 经向 covariant wind |
teta |
ip1jmp1,llm |
inout | potential temperature |
ps |
ip1jmp1 |
inout | surface pressure, Pa |
masse |
ip1jmp1,llm |
inout | layer air mass |
phis |
ip1jmp1 |
inout | surface geopotential |
q |
ip1jmp1,llm,nqtot |
inout | advected tracers |
time_0 |
scalar | in | restart/start time offset;源码注释称不直接用于动力计算 |
nqtot 来自 infotrac,因此调用 leapfrog* 前必须已经完成 tracer 初始化和 q 分配。
主要 USE 依赖
| 模块 | 使用状态 |
|---|---|
infotrac |
nqtot,isotope 检查 ok_iso_verif;nogcm 还用 tname 定位 co2 |
control_mod |
planet_type/nday/day_step/iperiod/iphysiq/iconser/dissip_period/iecri/ecritstart 等调度控制 |
logic_mod |
forward/leapf/apphys/conser/apdiss/purmats 等时间步门控;nogcm 不使用 apdiss |
temps_mod |
jD_ref/jH_ref/itaufin/day_ini/day_ref/start_time/dt/hour_ini/day_end |
comvert_mod |
ap/bp/pressure_exner/presnivs;nogcm 额外读取 aps/bps/pseudoalt/preff/scaleheight |
comconst_mod |
daysec/dtvr/dtphys/dtdiss/cpp/iflag_top_bound 等常量 |
局部工作数组
| 数组 | 作用 |
|---|---|
p(ip1jmp1,llmp1) |
interface pressure,由 pression 从 ps/ap/bp 计算 |
pks/pk/pkf |
surface/mid-layer Exner,按 pressure_exner 选择 exner_hyb 或 exner_milieu |
phi |
geopotential,输出和 physics 之前会重算 |
pbaru/pbarv |
caldyn 给出的 mass flux,用于 tracer advection 和 offline flux storage |
ucovm1/vcovm1/tetam1/psm1/massem1 |
上一时间层状态,进入 integrd |
du/dv/dteta/dq/dp |
动力 tendency |
dufi/dvfi/dtetafi/dqfi/dpfi |
physics tendency |
dudis/dvdis/dtetadis |
dissipation tendency |
nogcm 变体额外保存 kpd/tau_ps/tau_co2/tau_teta/mq 等,用来做 pressure、CO2 和 temperature 的松弛混合。
初始 pressure/mass/exner
两个例程进入时间循环前都会:
- 根据
nday/less1day/ndynstep计算itaufin,再设itaufinp1=itaufin+1。 - 清零 dissipation、top-bound、physics tendency 数组。
- 设
itau=0,并由iflag_phys推出physics是否启用。 - 清零
dq,调用pression(ip1jmp1,ap,bp,ps,p)。 - 按
pressure_exner调用exner_hyb或exner_milieu。 - 检查
pk是否随层号严格递减;失败则abort_gcm。
完整 leapfrog.F 在每次物理写回和耗散前后会重新刷新 p/masse/pk;nogcm 在 physics 后的 pressure mixing 中也会刷新 p/masse/pk。
复现要点
masse不是独立输入常量;ps改变后要由pression + massdair同步。q的第三维必须是nqtot,不是物理 tracer 数。dt在 forward 步为dtvr,进入 leapfrog 后为2*dtvr。time_0对完整 GCM Mars restart 写出时间有影响;MARS nogcm 变体只在入口形参保留它。
待确认
time_0在 MARSphymars/leapfrog_nogcm.F的具体传入值和 archive/restart 时间一致性需由 Mars restart 页面确认。- nogcm 中
aps/bps/pseudoalt/preff/scaleheight的实际使用较少,保留为接口兼容状态。