CelerisLab/tests/boundary_features.md
2026-05-12 19:08:49 +08:00

12 KiB
Raw Blame History

Boundary features still needed for cylinder validation

Undermind

当前代码已经具备做 2D 通道类圆柱验证的主体能力D2Q9 与 D3Q19SRT 与 TRT 与 MRTdouble_bufferesopull,可开关 LESuniformparabolic 入口,和若干开放出口模式。真正阻塞下一阶段 benchmark 的,不是碰撞模型数量不够,而是少数几个边界功能还没有补齐。它们分别是:南北 free-stream 边界time-dependent 入口幅值,开放来流 family 的更匹配外边界,以及 z 方向 periodic 边界。[Qu13, Kan99b, Jia21]

这份说明只回答一个问题:这些功能应如何实现,物理上在做什么,数值上应放在什么位置,以及如何兼容你当前的 SRT 与 TRT 与 MRT、double_bufferesopull、LES 开关。

当前最值得补的功能顺序

顺序 功能 直接解锁的 benchmark 为什么先做
1 南北 free-stream 边界 [Qu13] 2D 开放来流 数学最简单,直接解锁 2D 恒定来流主 benchmark
2 time-dependent inlet amplitude [Joh04] 全定义复现 实现代价低,可完善实现检查
3 开放来流 family 的远场与 outlet [Kan99b] 2D 旋转开放来流 旋转 benchmark 的关键
4 z periodic 边界 [Jia21] 3D 固定圆柱 一旦实现即可解锁 3D 主 benchmark

如果只能先做一个功能,应优先做南北 free-stream 边界。因为它不仅解锁 [Qu13],也会让开放来流中的静止圆柱和旋转圆柱不再被 fixed wall 人为污染。[Qu13, Kan99b]

南北 free-stream 边界

物理含义

Qu13

对 2D 开放来流圆柱,这意味着在上边界和下边界施加目标宏观状态

\mathbf{u}_b = (U_{\infty}, 0)
\rho_b = \rho_0

最实用的实现不是发明一套新的边界家族,而是把你已有的 aligned velocity boundary 泛化到 y 方向边界。

推荐数值形式

最稳妥的第一版做法是 non-equilibrium extrapolation [Guo02]。它的写法是

f_i(x_b,t+\Delta t)=f_i^{eq}(\rho_b,\mathbf{u}_b)+\left[f_i(x_f,t+\Delta t)-f_i^{eq}(\rho_f,\mathbf{u}_f)\right]

这里

  • `x_b` 是边界节点
  • `x_f` 是相邻内侧流体 donor 节点
  • 平衡态由目标自由流状态给出
  • 非平衡部分由 donor 节点外推

这个形式有几个好处。

  • 与你现有入口边界在代码结构上最接近
  • 对 SRT 与 TRT 与 MRT 都能共用同一宏观目标状态
  • 比单纯代数型 local closure 更稳,特别适合工程首版 [Guo02, Lat08]

在当前模式中的兼容方式

模块 兼容原则
SRT 直接用当前平衡态与 donor nonequilibrium
TRT 同样重构分布,必要时保留现有 trt_neq_damp 作为 donor damping
MRT 边界先在分布空间重构,再交给常规 MRT bulk 更新
LES 层流 benchmark 默认关。若开启边界仍使用相同宏观目标LES 只影响 bulk 局部黏性

double_bufferesopull 中的放置位置

不论 streaming 路径如何,逻辑上都应保持一致:先得到边界节点的 post-stream 已知分布,再重构未知分布。区别只在索引来源。

streaming 实现原则
double_buffer 在 pull streaming 之后,对边界节点用 donor 节点和目标状态重构未知分布
esopull 在得到本地 post-stream 视图后,用同一重构公式回填未知方向

因此最好把边界实现写成“给定当前节点、方向集合、目标宏观状态、donor 节点”的统一接口,而不要把公式写死在某一种 streaming 路径中。

工程建议

第一版不必追求 characteristic far-field。只需先实现 north 与 south 的统一 velocity boundary支持 uniform 目标状态,并把 boundary_typevelocity_profile 解耦。这样同一套 y 边界内核就能同时服务:

  • 开放来流的 free-stream 侧边界
  • 通道中的移动壁之外的其他速度边界

time-dependent inlet amplitude

物理含义

Joh04

若把入口 profile 写成模板

\mathbf{u}_{in}(y,t)=A(t)\,\mathbf{u}_{shape}(y)

那么当前已支持的两种 profile 都能自然兼容。

  • uniform 对应 `\mathbf{u}_{shape}=(1,0)`
  • parabolic 对应 `\mathbf{u}_{shape}(y)` 为固定抛物线形状
Joh04

推荐实现

最简单的工程形式是给 inlet boundary 增加一个可选回调或 schedule。

字段 含义
profile uniformparabolic
amplitude_mode constantscheduled
amplitude_value 常数幅值
amplitude_schedule 按时间步返回幅值的函数或表

这样不需要新边界核,只需要在每一步把目标边界速度更新后交给现有入口重构。

与模式的关系

它与 SRT 与 TRT 与 MRT、double_bufferesopull、LES 都无直接耦合。因为变的是目标宏观状态,不是边界算法本身。

开放来流 family 的远场与 outlet

物理含义

Qu13
\frac{\partial u_i}{\partial t}+C\frac{\partial u_i}{\partial x}=0

并取 $C=1$。[Qu13]

Kan99b

对当前工程的建议

当前已有 neq_extrapzero_gradientblended 三种 outlet。对于通道类验证这已经足够先用。但若要更严格地逼近 [Qu13] 或 [Kan99b],下一步应考虑增加更接近 convective outlet 的 family。

最简单的第一版不是 characteristic outlet而是直接实现一个宏观量层面的 convective update。之后若高 Re 稳定性成为问题,再考虑 characteristic 或 regularized characteristic family [Izq08, Wis17]。

推荐路线

阶段 功能
第一版 north 与 south free-stream velocity boundary
第二版 x 出口增加 convective family
第三版 若高 Re 仍敏感,再加 characteristic outlet

与模式的关系

出口 family 应尽量与 collision model 解耦。也就是说:

  • SRT 与 TRT 与 MRT 共享同一个宏观 outlet 目标
  • 仅 donor nonequilibrium 的处理上保留与现有 config 一致的 damping 参数
  • LES 不应改变 outlet 类型,只改变内域的有效黏性与非平衡强度

z 方向 periodic 边界

物理含义

Jia21

其物理条件是

\phi(x,y,0,t)=\phi(x,y,L_z,t)

对分布函数而言,就是所有跨越 z 边界的 streaming 都直接 wrap 到另一侧。

实现原则

periodic 边界不属于 bounce-back也不属于 velocity outlet。它本质上是索引映射。

对任何具有 `c_{i,z}=+1` 的离散方向,若 pull source 超出上边界,就从另一端取值;反之亦然。

在两种 streaming 路径中的处理

streaming 实现原则
double_buffer pull source 的 z 索引越界时做 modulo wrap
esopull 针对所有 `c_{i,z}\neq 0` 的方向,读取或写回时做相同 wrap

这说明 periodic 的最稳实现位置不在边界核,而在 streaming 索引层。只要 streaming 层完成 wrapcollision、curved boundary、sensor、LES 都不需要知道 periodic 的存在。

与模式的关系

模块 关系
SRT 与 TRT 与 MRT 完全无关collision 不变
LES 完全无关,局部 SGS 仍按正常 stencil 取邻域
曲壁边界 完全无关,圆柱表面仍按现有 kernel 处理

因此 z periodic 是一个高价值、低物理风险的功能。它的难点主要是索引实现,而不是物理公式。

对当前代码架构的建议

先按 boundary family 分层,不要按 case 临时加分支

建议把缺失功能拆成三层接口。

作用
macro target 给出边界目标状态,如 `\rho_b``\mathbf{u}_b`
reconstruction 用 Zou-He 或 NEQ extrapolation 等方法重构未知分布
streaming topology 处理 periodic wrap 或 pull source 定位

这样做的好处是:

  • north 与 south free-stream 只改 macro targetreconstruction
  • time-dependent inlet 只改 macro target
  • z periodic 只改 streaming topology

模式扩展顺序

建议所有新增功能都按同一顺序落地。

  1. 先在 double_buffer 上实现
  2. 先支持 SRT 基线
  3. 再验证 TRT 和 MRT
  4. 最后再移植到 esopull
  5. 层流 benchmark 上默认 LES off

这是最省调试成本的路线,因为 double_buffer + SRT + LES off 最容易隔离边界错误。

最后建议

如果你的目标是尽快把圆柱验证从当前阶段推进到真正可对标的开放来流和 3D family那么最值得优先补的不是新的碰撞模型也不是新的曲壁公式而是

  • north 与 south free-stream boundary
  • inlet amplitude schedule
  • convective 或更匹配的远场 outlet family
  • z periodic

其中第一项和第四项收益最高。第一项直接解锁 [Qu13],第四项直接解锁 [Jia21]。[Qu13, Jia21] 对旋转圆柱而言,只有在第一项和第三项具备之后,[Kan99b] 才能从 internal regression 升级成真正的 benchmark。[Kan99b]


References

Qu13
Kan99b
Jia21
Joh04
Guo02
Lat08
Izq08
Wis17