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,由 pressionps/ap/bp 计算
pks/pk/pkf surface/mid-layer Exner,按 pressure_exner 选择 exner_hybexner_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

两个例程进入时间循环前都会:

  1. 根据 nday/less1day/ndynstep 计算 itaufin,再设 itaufinp1=itaufin+1
  2. 清零 dissipation、top-bound、physics tendency 数组。
  3. itau=0,并由 iflag_phys 推出 physics 是否启用。
  4. 清零 dq,调用 pression(ip1jmp1,ap,bp,ps,p)
  5. pressure_exner 调用 exner_hybexner_milieu
  6. 检查 pk 是否随层号严格递减;失败则 abort_gcm

完整 leapfrog.F 在每次物理写回和耗散前后会重新刷新 p/masse/pk;nogcm 在 physics 后的 pressure mixing 中也会刷新 p/masse/pk

复现要点

待确认

相关页面