prather.F
路径
LMDZ.COMMON-6.3\LMDZ.COMMON\libf\dyn3d_common\prather.F
文件定位
prather.F 定义三维 Prather moments 输送入口 prather。它维护 tracer 的 0 到 9 阶 moments 表示,按 x-y-z-y-x 顺序调用 advxp/advyp/advzp,用于比普通 Van Leer 更高阶的 tracer 输送分支。
Mars 运行参与度
条件经过:Mars tracer advection 配置选择 Prather scheme 时经过;否则由 Van Leer、PPM 或其他输送路径替代。
定义的符号
| 符号 |
类型 |
行号 |
作用 |
prather |
subroutine |
4 |
使用 moments 表示进行三维 split advection。 |
输入输出
| 参数 |
方向 |
说明 |
q(...,0:9) |
inout |
tracer moments;0 阶是平均量,其余阶描述单元内分布。 |
w, pbaru, pbarv |
in |
垂直、x、y 方向质量通量。 |
masse |
in |
网格空气质量。 |
nt, dt |
in |
子步数和时间步。 |
依赖和调用
| 符号 |
作用 |
comconst_mod: pi |
构造经向几何相关缓存。 |
advxp |
x 方向 Prather moments advection。 |
advyp |
y 方向 Prather moments advection。 |
advzp |
z 方向 Prather moments advection。 |
核心流程
- 首次调用时构造经纬几何缓存和极区/面积相关权重。
- 从
q(...,0:9) 拆出 moments 工作数组 s0/sx/sy/sz/...。
- 调用
advxp(limit,0.5*dt,...) 做半步 x 输送。
- 调用
advyp(limit,0.5*dt*nt,...) 做半步 y 输送。
- 调用
advzp(limit,dt*nt,...) 做整步 z 输送。
- 再执行 y 半步和 x 半步,形成对称 split。
- 将更新后的 moments 写回
q。
伪代码
initialize geometry cache on first call
load 10 Prather moments from q
advxp half step
advyp half step
advzp full step
advyp half step
advxp half step
store moments back to q
复现要点
q 最后一维 0:9 是本文件的核心接口;只保留 0 阶会退化并破坏 Prather scheme。
- x/y 使用半步、z 使用整步,是和其他 split transport 相同的对称结构。
nt 同时放大 y/z 的有效时间步,复现时要保留调用方传入的子步含义。
待确认
limit 的具体取值和 limiter 意义需结合 advxp/advyp/advzp 文件页确认。
- Mars 默认 tracer 是否启用 Prather 需由
infotrac 和运行配置确认。
相关页面