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;内部 vlxqsvlyqs 在水平两个方向上处理饱和限制,并在需要时调用普通 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 温度和饱和比湿计算所需状态。

核心流程

  1. 调用 tpot2t(ip1jmp1*llm,teta,tempe,pk) 得到温度。
  2. 计算目标 tracer 的饱和阈值 qsat
  3. SCOPY 将目标 tracer 和质量复制到 zq/zm;对子 tracer 也复制对应 q
  4. vlxqs -> vlyqs -> vlz -> vlyqs -> vlxqs 顺序完成 split。
  5. 内部 vlxqs/vlyqs 对父 tracer 应用饱和限制;对子 tracer 构造 ratio 后调用普通 vlx/vly
  6. 将工作数组回写到 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

保存状态和副作用

vlspltqsvlxqsvlyqs 保存若干 CPU 计时变量。vlyqs 还保存 sinlon/coslon/sinlondlon/coslondlon 以及极区面积缓存,用于避免重复构造经向几何权重。这些保存状态不改变物理 prognostic state,但会影响首次调用成本。

复现要点

待确认

相关页面