vlspltqs.F
路径
LMDZ.COMMON-6.3\LMDZ.COMMON\libf\dyn3d\vlspltqs.F
文件定位
vlspltqs.F 是串行版饱和水汽 Van Leer split 输送。主例程 vlspltqs 对指定 tracer 计算饱和约束并执行 x-y-z-y-x split;内部 vlxqs 和 vlyqs 在水平两个方向上处理饱和限制,并在需要时调用普通 vlx/vly 更新子 tracer 比值。
Mars 运行参与度
条件经过:Mars 串行动力或接口兼容路径在 tracer 配置选择饱和水汽 split advection 时经过。并行构建使用 `vlspltqs_p.F`。
定义的符号
| 符号 |
类型 |
行号 |
作用 |
vlspltqs |
subroutine |
4 |
串行饱和 tracer split advection 调度。 |
vlxqs |
internal subroutine |
179 |
x 方向饱和约束输送。 |
vlyqs |
internal subroutine |
543 |
y 方向饱和约束输送。 |
依赖和调用
| 类别 |
符号 |
用途 |
infotrac |
nqtot, nqdesc, nqfils, iqfils |
tracer 数量和父子关系。 |
cpdet_mod |
tpot2t |
位温到温度转换。 |
| BLAS 风格复制 |
SCOPY |
把 q/masse 复制到工作数组。 |
| 公共内核 |
vlz, vlx, vly |
z 方向和子 tracer ratio 输送。 |
comconst_mod |
pi |
y 方向几何三角缓存。 |
输入输出
| 参数 |
方向 |
说明 |
q |
inout |
tracer 场,目标 tracer 及子 tracer 被更新。 |
pente_max |
in |
limiter 强度。 |
masse |
in |
网格质量。 |
w, pbaru, pbarv |
in |
垂直、x、y 方向质量通量。 |
pdt, teta, pk |
in |
温度和饱和比湿计算所需状态。 |
核心流程
- 调用
tpot2t(ip1jmp1*llm,teta,tempe,pk) 得到温度。
- 计算目标 tracer 的饱和阈值
qsat。
- 用
SCOPY 将目标 tracer 和质量复制到 zq/zm;对子 tracer 也复制对应 q。
- 按
vlxqs -> vlyqs -> vlz -> vlyqs -> vlxqs 顺序完成 split。
- 内部
vlxqs/vlyqs 对父 tracer 应用饱和限制;对子 tracer 构造 ratio 后调用普通 vlx/vly。
- 将工作数组回写到
q。
伪代码
tempe = tpot2t(teta, pk)
qsat = saturation(tempe, pressure)
copy q and masse to zq, zm
vlxqs(parent tracer with qsat)
vlyqs(parent tracer with qsat)
vlz(all involved tracers)
vlyqs(second pass)
vlxqs(second pass)
copy zq back to q
保存状态和副作用
vlspltqs、vlxqs、vlyqs 保存若干 CPU 计时变量。vlyqs 还保存 sinlon/coslon/sinlondlon/coslondlon 以及极区面积缓存,用于避免重复构造经向几何权重。这些保存状态不改变物理 prognostic state,但会影响首次调用成本。
复现要点
- split 顺序是对称的 x-y-z-y-x,不能简化成单次 x-y-z。
- 子 tracer 不是直接用饱和限制,而是通过父 tracer ratio 与普通 Van Leer 水平输送耦合。
vlyqs 包含极区和经向面积处理,复现 y 方向时必须保留几何加权。
待确认
- 饱和公式中的常数和 Mars 水汽物理配置需要与物理包水汽任务交叉确认。
- 本文件在当前 Mars 标准串行构建中的触发频率取决于 tracer
iadv 配置。
相关页面