pentes_ini.F
路径
LMDZ.COMMON-6.3\LMDZ.COMMON\libf\dyn3d_common\pentes_ini.F
文件定位
pentes_ini.F 定义 pentes_ini,用于为 slope-limited advection 准备 tracer 的方向斜率并做一次对称预输送。它调用 limx/limy/limz 限制斜率,再按 x-y-z-y-x 顺序调用串行 advx/advy/advz。这些外部 advx/advy/advz moments 算子与 advn.F 内部的 advnx/advny/advnz 不是同一组例程;对照见 COMMON tracer advection operator family。
Mars 运行参与度
条件经过:Mars 串行 tracer advection 选择相关 slope/Prather 预处理分支时经过;并行或 PPM/Van Leer 特定路径可能绕过。
定义的符号
| 符号 |
类型 |
行号 |
作用 |
pentes_ini |
subroutine |
4 |
初始化并限制三方向 slope,执行对称预输送。 |
输入输出
| 参数 |
方向 |
说明 |
q |
inout |
tracer 场或其工作表示。 |
w, pbaru, pbarv |
in |
垂直、x、y 方向质量通量。 |
masse |
in |
网格质量。 |
mode |
in |
控制处理模式的整数分支。 |
pente_max |
internal/derived |
slope limiter 上限。 |
依赖和调用
| 符号 |
作用 |
comconst_mod: dtvr, pi |
时间步和几何常数。 |
limx, limy, limz |
分别限制 x/y/z 方向 slope。 |
advx, advy, advz |
串行三方向 slope advection。 |
核心流程
- 根据输入
q/masse 构造 s0/sx/sy/sz/sm 工作数组。
- 对 x 方向调用
limx,再以 0.5*dtvr 调 advx。
- 对 y 方向调用
limy,再以 0.5*dtvr 调 advy。
- 对 z 方向调用
limz,再以 dtvr 调 advz。
- 再做 y 半步和 x 半步,保持 split 对称。
- 根据
mode 和 limiter 结果写回更新后的 tracer/slope。
伪代码
prepare cell mean and slopes from q
limx; advx half dtvr
limy; advy half dtvr
limz; advz full dtvr
limy; advy half dtvr
limx; advx half dtvr
write updated slopes/state back
复现要点
- 每个方向 advection 前都先调用同方向 limiter,不能只在开始统一限制一次。
- x/y 是半步,z 是整步;顺序与 Van Leer/Prather 的 split 结构一致。
mode 控制内部处理细节,复现时需按调用方传入值保留分支。
待确认
mode 各取值的物理含义需结合 advtrac.F90 调用条件进一步整理。
pente_max 默认和运行配置来源需由 advection 主题页或 infotrac 页补全。
相关页面