我如何检查流体模拟结果的正确性?


9

我写了一个基于粒子的流体模拟程序。很难判断我是否得到正确的结果。可视化的结果似乎是合理的,但其中的某些部分看起来很奇怪。我不知道这是流体的特征。有什么准确的方法可以验证我的程序是否正确?

修改一些细节:

我的程序是一个基于2D粒子的模拟程序。流体是可压缩的。该实现几乎基于经典论文:

Müller,Matthias,David Charypar和Markus Gross。“用于交互式应用程序的基于粒子的流体模拟。” 2003 ACM SIGGRAPH会议论文集

我用迭代法求解了Navier-Stokes方程。它仅考虑压力,重力,粘度和表面张力。


也许您可以用数值微分重新计算NS方程的项,并检查它们如何抵消。
Yves Daoust 2015年

Answers:


2

与他人的软件进行比较。运行一些标准化的测试,找出是否能得到与其他人大致相同的答案。如果您得到的答案相同,那么正确编写代码的可能性就很高。

一些测试:

  1. 流过气缸。在2d中取矩形区域,圆柱体在中间,左侧流入,战斗中流出,计算圆柱体上的力。这是比较一些代码的基准

  2. 浮力流。密闭盒,热板在底部,冷板在顶部,由于浮力,热流体开始上升。这是基准

  3. 泡沫上升,基准

但是不幸的是,在这些基准测试中将您的代码与科学代码进行比较可能非常困难。我想您将某些东西作为SPH或稳定流体来实现,这不是为了准确性而是为了稳定性。

以流过圆柱的流量为例。我将以很小的雷诺数开始测试,然后在提高模拟精度(减少时间步长,增加细分或增加粒子数量)时测量圆柱上的力。力会聚到一定数量吗?如果不是,则表示您有问题,如果是,则请查看基准文件并将您的结果与其他人进行比较。


此方法与我用于测试raytracer的方法非常相似。我只是用其他人的渲染器渲染测试场景,并将其与我的结果进行比较。它们会收敛到相同的结果吗?如果是,那我就错了;如果不是,那我错了。


代替了根据已知的现实世界的测量结果和流体动力学基准对yes进行测试的软件。否则,您的错误将被污染。我在stackexhange网络上的其他地方看到了同样的问题
joojaa 2015年

1
我认为,如果您具有物理上的权利,那么针对真实世界的测量进行测试对于进行测试非常有用。如果只想调试程序,则比对其他代码进行测试更好。另外,在计算机仿真中,您可以测量任何东西而不会影响实验。例如,在现实世界的实验中,在任何点测量流体速度都是不可能的,但是在计算机仿真中却是微不足道的。
汤姆

是的,但是您也继承了他们求解器的问题。我承认我确实做了几次开发多体模拟器并检查MSC Adams的结果的事,但是事后看来,这并不是真正有用的
joojaa 2015年

检查现实世界的实验效果更好吗?我对此表示怀疑,但我可能是错的。多体物理学的情况与流体物理学完全不同。甚至像台球这样简单的事物也具有混乱的行为。而且,带有接触的刚体动力学甚至都不是数学问题,您知道Painlevé悖论吗?因此,进行多体物理的数值模拟通常注定会失败。一些参考资料:plus.maths.org/content/chaos-billiard-table en.wikipedia.org/wiki/Painlev%C3%A9_paradox
tom

1
是的,我知道多体动力学是如何工作的,我对此进行了讲授(并对其进行了一两年的简短研究)。但是,对已知的分析解决方案进行检查并不容易。但是,真正的流体就像多体动力学一样混乱。因此,人们应该能够检查层流情况等。尽管如此,摩擦仍然是a子。
joojaa 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.