infotrac advection scheme 与 nqtot 扩展

输入范围

LMDZ.COMMON-6.3\LMDZ.COMMON\libf\dyn3d_common\infotrac.F90

Mars 运行参与度:必经。Mars 运行的 tracer 数组维度、advtrac 调度路径和饱和水汽处理都由 infotrac_init 写入的 iadv(:) 决定。

scheme 编号

源码注释保留的 scheme 表如下。注意:表中很多 scheme 有历史实现或下游分支,但当前 infotrac_init 最终只允许 10140 通过。

iadv 源码注释含义
0 不输送或跳过 advection
1 LMD specific humidity transport
2 upstream/amont
10 Van Leer
11 水平 Van Leer,垂直 PPM monotone
12 Frederic Hourdin I
13 Frederic Hourdin II
14 Van Leer + specific humidity / saturated water vapor path
16 PPM Monotone
17 PPM Semi Monotone
18 PPM Positive Definite
20 Slopes,需附加 moments tracer
30 Prather,需附加 moments tracer

从 hadv/vadv 到 iadv

每个真实 tracer 先读取 hadv(iq)vadv(iq)infotrac_init 用两条规则得到最终 iadv

  1. hadv==vadv,则 iadv=hadv
  2. hadv==10vadv==16,则 iadv=11
  3. 其他水平/垂直组合 abort,提示 Bad choice of advection schema - 2

在更早的 nqtot 计算阶段,只有三种扩展组合合法:

hadv/vadv nqtot 的影响
二者都小于 20 不扩展,new_iq += 1
二者都为 20 每个真实 tracer 占 4 个动力条目,追加 3 个
二者都为 30 每个真实 tracer 占 10 个动力条目,追加 9 个

任何一边使用 20/30 而另一边不一致都会 abort,提示 Bad choice of advection schema - 1

moments 附加 tracer

当 scheme 20 或 30 触发扩展时,nqtot 大于 nqtrue。扩展逻辑如下:

当前版本随后会阻止 iadv=20/30 通过最终可用性检查。因此这些扩展代码说明了历史/潜在 contract,但 Mars 活跃配置若触发它们会在初始化阶段停止。

最终可用性检查

在填完 tname/ttext/iadv/niadv 后,源码逐个检查:

条件 结果
iadv 不是 10140 abort,提示当前版本只测试 1014
iadv==14iq/=1 abort,提示 14 只允许水汽
子 tracer 的 iadv/=10 abort,子 tracer 必须用 scheme 10
父 tracer 的 iadv 不是 1014 abort,父 tracer 只能用 scheme 10 或 14

下游调度

复现要点

  1. 先读 traceur.defhadv/vadv
  2. 先用 20/30 规则计算 nqtot,再分配 q(...,nqtot)
  3. 再用 hadv/vadv 合成 iadv,并建立 niadv
  4. 最后应用当前版本白名单;不要因为 advtrac 中有 PPM/Prather 分支就假定当前配置一定可达。

待确认