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 最终只允许 10、14 和 0 通过。
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:
- 若
hadv==vadv,则iadv=hadv。 - 若
hadv==10且vadv==16,则iadv=11。 - 其他水平/垂直组合 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。扩展逻辑如下:
- 主 tracer 保留原始
iadv=20或iadv=30。 - scheme 20 追加 3 个条目,
iadv=-20,名称由主 tracer 名加txts(jq)后缀。 - scheme 30 追加 9 个条目,
iadv=-30,名称由主 tracer 名加txtp(jq)后缀。 niadv只把iadv>=0的真实 tracer 写入映射,因此负号条目不会进入物理真实 tracer 对应表。
当前版本随后会阻止 iadv=20/30 通过最终可用性检查。因此这些扩展代码说明了历史/潜在 contract,但 Mars 活跃配置若触发它们会在初始化阶段停止。
最终可用性检查
在填完 tname/ttext/iadv/niadv 后,源码逐个检查:
| 条件 | 结果 |
|---|---|
iadv 不是 10、14、0 |
abort,提示当前版本只测试 10 和 14 |
iadv==14 且 iq/=1 |
abort,提示 14 只允许水汽 |
子 tracer 的 iadv/=10 |
abort,子 tracer 必须用 scheme 10 |
父 tracer 的 iadv 不是 10 或 14 |
abort,父 tracer 只能用 scheme 10 或 14 |
下游调度
- advtrac 串并行对照 使用
iadv(:)选择串行/并行输送路径。 - ppm3d 入口约定 详细说明
iadv=11/16/17/18到IORD/JORD/KORD的映射和串并行可达性。 - vlspltgen_p 在并行 Van Leer 路径中接收
iadv,并使用nqfils/nqdesc/iqfils保持 family tracer 比例。 - prather 和 pentes_ini 是历史/扩展 scheme 的关键子页,但当前初始化检查会限制实际使用。
复现要点
- 先读
traceur.def的hadv/vadv。 - 先用 20/30 规则计算
nqtot,再分配q(...,nqtot)。 - 再用
hadv/vadv合成iadv,并建立niadv。 - 最后应用当前版本白名单;不要因为
advtrac中有 PPM/Prather 分支就假定当前配置一定可达。
待确认
advtrac中仍存在 11/12/13/16/17/18/20/30 分支,和infotrac_init白名单之间的版本意图需要 主页面或历史任务进一步确认。