边界条件

边界条件决定精度与稳定性。LBM 的边界条件施加在分布函数上,而不是施加在宏观量上,这是它和有限差分法的一个明显差别。

周期边界

最简单的处理:离开一侧的分布函数从对侧进入。

\[f_i(\mathbf{x}{left}, t+\Delta t) = f_i(\mathbf{x}{right} - \mathbf{c}_i\Delta t, t)\]

适用于均质湍流、体相流动等没有真实壁面的场合。

反弹格式(Bounce-Back)

处理无滑移壁面的标准做法:粒子碰到壁面后沿原方向反弹回去。

全反弹(Fullway)

壁面位于格点上。离开壁面的未知分布函数直接取入射方向的相反方向:

\[f_{\bar{i}}(\mathbf{x}_b, t+\Delta t) = f_i(\mathbf{x}_b, t)\]

其中 \(\bar{i}\) 表示 \(i\) 的反方向。实现最简单,精度为一阶。

半反弹(Halfway)

壁面位于格点与流体格点的中间。不需要在壁面上定义节点,只需要让反弹发生在相邻两个格点的连线上:

\[f_{\bar{i}}(\mathbf{x}_f, t+\Delta t) = f_i(\mathbf{x}_f, t)\]

精度为二阶,且对复杂几何更友好,是最常用的无滑移壁面格式。

移动壁面

壁面运动时,反弹回来的分布函数要带上壁面速度对应的动量修正:

\[f_{\bar{i}}(\mathbf{x}_f, t+\Delta t) = f_i(\mathbf{x}_f, t) + 2 w_i \rho \frac{\mathbf{c}_i \cdot \mathbf{u}_w}{c_s^2}\]

Zou-He 格式

用于在入口 / 出口施加给定的速度或压强。做法是用已知方向的分布函数,配合密度与动量的守恒条件,反解出未知方向的分布函数。

以左边界给定速度 \(\mathbf{u}_{in}\) 为例:已知方向的 \(f_i\) 提供部分动量,剩下的由守恒关系补齐。需要注意:

  • 沿边界切向的分布函数无法由守恒条件唯一确定,需要额外假设(常用"反弹修正"或对两侧取平均)来闭合
  • 速度入口 + 压强出口是最常用的组合

出流边界

出流通常用零梯度外推:

\[\left.\frac{\partial f_i}{\partial \mathbf{n}}\right|_{out} = 0\]

或者用有限差分外推,把最后一个流体格点的值直接复制到边界。

曲面边界

格点构成的阶梯状边界会带来几何误差。处理真实曲面需要额外的插值:

  • 插值反弹(interpolated bounce-back):根据壁面到格点的实际距离做二次插值,恢复二阶精度
  • 浸入边界法(immersed boundary LBM):把曲面受力作为源项施加到邻近格点,不修改格点结构

自由表面

图形学中模拟水体时需要区分液相与气相。做法是在格点上引入体积分数标记液相占比:

格点类型处理方式
液相正常执行迁移与碰撞
气相只记录压强,不参与输运
界面在液相与气相之间做质量交换,并重建界面位置

这样不必求解整个气相区域的流场,大幅降低计算量。这是 LBM 在图形学水体模拟中的主要用法,也是它在实时场景中仍然可用的原因。

常用组合

边界格式
入口(给定速度)Zou-He
出口(给定压强)Zou-He
固定壁面半反弹
运动物体带速度修正的反弹 / 插值反弹
水-气界面自由表面算法
无壁面的体相流动周期边界

本文出自CaterpillarStudyGroup,转载请注明出处。

https://caterpillarstudygroup.github.io/GAMES103_mdbook/