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

修改一些细节:流体是可压缩的。该实现几乎基于经典论文:Müller,Matthias,David Charypar和Markus Gross。 “用于交互式应用程序的基于粒子的流体模拟。” 2003 ACM SIGGRAPH的论文集


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



评论

也许您可以用数值微分重新计算N-S方程的项,并检查它们如何抵消。

#1 楼

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

一些测试:在2d中取矩形区域,圆柱体在中间,左侧流入,战斗中流出,计算圆柱体上的力。这是比较一些代码的基准。
浮力流。密闭盒,热板在底部,冷板在顶部,由于浮力,热流体开始上升。这是基准。
泡沫上升,基准。

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

例如通过圆柱体的流动。我将以很小的雷诺数开始测试,然后在提高模拟精度(减少时间步长,增加细分或增加粒子数量)时测量圆柱上的力。力会收敛到一定数量吗?如果不是,则表示您有问题,如果是,则请查看基准测试纸并将其结果与其他人进行比较。测试我的raytracer。我只是使用其他人的渲染器渲染测试场景,并将其与我的结果进行比较。它们会收敛到相同的结果吗?如果是,那么我就对了。如果不是,那么我就错了。

评论


$ \ begingroup $
代替软件对已知的现实世界的测量结果和流体动力学特征进行测试。否则,您的错误将被污染。我在stackexhange网络上的其他地方看到了相同的问题
$ \ endgroup $
– joojaa
15年9月22日在13:11

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

$ \ begingroup $
是的,但是您也继承了他们求解器的问题。我承认我确实做了几次开发多体模拟器并对照MSC Adams检查结果的事,但是事后看来这并不是真正有用的
$ \ endgroup $
– joojaa
2015年9月22日14:30在

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

$ \ begingroup $
是的,我知道多体动力学的工作原理,我对此进行了讲授(并对其进行了一两年的简短研究)。但是,对已知的分析解决方案进行检查并不容易。但是,真实的流体就像多体动力学一样混乱。因此,人们应该能够检查层流情况等。尽管如此,摩擦仍然是a子。
$ \ endgroup $
– joojaa
2015年9月22日15:18