边界条件
边界条件决定精度与稳定性。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/