无法求解流体方程的流体模拟器

我在没有求解单个流体方程的情况下生成了卡门涡街。以下是格子玻尔兹曼方法如何实现这一目标,它源自第一原理,用 C++ 实现,并在超级计算机上运行。 文章《无法求解流体方程的流体模拟器》首先出现在《走向数据科学》上。

来源:走向数据科学

卡门涡街(在快速流动的流动中任何钝物体后面形成的交替漩涡)。您已经在桥柱、飞机机翼和烟囱后面看到了这种图案。这是流体动力学中最知名的现象之一。

我在没有求解单个流体方程的情况下生成了它。

相反,这种格子玻尔兹曼方法 (LBM) 模拟将流体视为微观层面的实际情况:粒子相互碰撞的统计分布。宏观行为(涡流、压力梯度、粘性阻尼)会作为结果而不是输入而消失。

LBM 在计算物理学中占据着真正不寻常的地位,介于分子动力学模拟和纳维-斯托克斯求解器之间,在介观尺度上运行。在本文中,我将从基本原理推导它,用大约 200 行 C++ 代码实现它,并在 MareNostrum 5 超级计算机上运行它。完整源代码和简化的 Python/NumPy 版本位于 GitHub 上。

快速了解:LBM 用离散速度格上更简单的更新规则取代了棘手的纳维-斯托克斯偏微分方程。 NS 方程在正确的极限内恢复,而不是假设。这使得 LBM 理论上很优雅,实际上很快,而且可并行性令人尴尬。它在低马赫、亚音速状态下效果最好,并且在非常低的粘度下变得数值不稳定。

为什么显而易见的方法是痛苦的

流体模拟的标准途径是纳维-斯托克斯方程,这是宏观守恒定律,几乎控制着我们在流体动力学中关心的一切。除了少数玩具几何形状之外,它们在分析上很难处理,因此在实践中,您将它们离散化在网格上并进行数值求解:有限体积、有限差分或有限元方法。

LBM 几乎完全回避了这一点。一旦你明白了它从哪里开始,原因就很清楚了。

不同的起点:统计力学

\[

\]

一行奇迹:BGK

结果:两种方案