用格子Boltzmann方法(LBM)流体仿真更有趣

2021-03-29 01:39:29

当时我设法翻译了一些(可能fortran)LBM源代码现在已经过错了“LB方法”网站(这里是LB方法如何围绕那个时间)。该算法工作并确实给了我一些不错的结果,但由于我的显示例程缩放到颜色调色板,因此由于我的显示例程而缺乏细节和脉动颜色存在问题。

昨天我正在寻找一些新的LBM源代码,在这里找到了Daniel Schroeder的LBM页面。 Daniel慷慨地分享了他的applet的源代码,因此我能够将他的主要LBM算法转换为我可以在混乱的愿景中使用的东西。非常感谢丹!

丹的代码基于Alexander Wagner的代码,您可以在此处看到包括描述LBM进程的PDF。

使用DAN的代码/算法比我的旧代码要快得多。它还允许我渲染更多更精细的细化流体,而不会导致系统爆炸。我可以进一步推动模拟参数。丹的着色方法解决了我旧的代码的脉冲颜色,并且包括可视化流体的“卷曲”的真正良好的方式。示踪剂颗粒也用于遵循下面的流体的速度,以给出一种可视化流体流动的方式。一旦粒子离开屏幕的右侧,它们会缓冲直到它们填满并且可以重新进入流动的左侧。示踪剂颗粒有助于看到涡流的单独比遮蔽更容易。

由于内存要求较少(来自DAN的代码的另一个加号)我能够渲染一些漂亮的4K分辨率LBM流。如果可能的话,必须在4K上观看此电影,因为较低分辨率的压缩无法处理显示示踪剂颗粒。

在上面的电影之后,我正在重新审视代码来尝试通过添加多线程支持来加速速度。在执行此操作时,我发现造成不正确结果的流体碰撞代码的错误。

看看上面的电影,并注意到初始部分流过三个圆圈。卷曲模式最初应在圆周周围对称。背景流程是从屏幕左侧到右侧的均匀速度。围绕圆圈应使圆圈上方和下方的相同形状的卷曲。有一点调整,我得到了正确的反弹代码。下一个电影显示更正的代码结果。

对于该电影,仅使用示踪剂颗粒可视化流体。 想象一束一堆小五彩纸屑或闪光颗粒已经散落在流体表面上并浮动。 随着流体流动,它将浮动示踪剂颗粒与其一起拖动。 这是一种不同的方式,看起来卷曲和漩涡流体形式,因为它流过各种障碍物。 下一个电影通过在每个像素位置显示流体的卷曲来显示流体流动。 仍有一些具有此最新代码的视觉伪影,如果将流体速度推迟或粘度降得太远,则数学可能会自发地爆炸崩溃模拟。 这里的缺点是你无法获得非常详细的流动。 我毫不怀疑将来在未来再次重新审视LBM,以试验新的代码并尝试更详细(更快)仿真运行。