首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >流体模拟不可压缩流体

流体模拟不可压缩流体
EN

Stack Overflow用户
提问于 2016-01-14 19:05:01
回答 1查看 1.1K关注 0票数 0

在基于斯塔姆的论文的流体模拟中,流体被建模为密度网格。密度“通常取0到1之间的值”,但可能更大。边界的实现基本上如文件所述:

实现内部边界的一种简单方法是分配一个布尔网格,该网格指示对象占用了哪些单元格。然后,我们只需向set_bnd()例程添加一些代码,就可以从其直接邻居的值中填充被占领单元格的值。

代码语言:javascript
复制
int surround = !bound[IX(i+1,j)] + !bound[IX(i-1,j)] + !bound[IX(i,j+1)] + !bound[IX(i,j-1)];
if (!surround) x[IX(i,j)] = 0;
else
    x[IX(i,j)] = ((bound[IX(i+1,j)] ? 0 : x[IX(i+1,j)]) +
                  (bound[IX(i-1,j)] ? 0 : x[IX(i-1,j)]) +
                  (bound[IX(i,j+1)] ? 0 : x[IX(i,j+1)]) +
                  (bound[IX(i,j-1)] ? 0 : x[IX(i,j-1)])) / surround;

密度法适用于空气、火或烟雾等可压缩流体。是否有一种方法可以改变边界例程,使密度(仅限于一种流体)被限制为一个值,例如1?这将代表一个完全充满水粒子的细胞。密度将大于一个将不得不被推开到邻近的细胞。Stam列出了扩展的想法,但不包括如何:

另一个扩展是使用这个解算器作为一个基础来驱动水流。在这种情况下,有两种不同密度的流体:水和空气。由于以下原因,通常不模拟空气,求解器更难实现:水流体的域随时间而变化,必须以某种方式跟踪,并且必须在界面处应用正确的边界条件。水区域可以使用粒子来跟踪,这些粒子可以像福斯特和Metaxas Foster96那样在流体中移动,也可以通过粒子和水平集( Foster01,Enright02 )的组合来跟踪。

EN

回答 1

Stack Overflow用户

发布于 2016-01-14 19:10:31

我认为你应该说“自由表面不可压缩的流动”。

这是一个很难的问题,因为你必须跟踪自由表面的位置,这是空间和时间的函数。

你命名的所有液体的密度并不等于一;纸张必须以某种你不清楚的方式将它们规范化。

你如何追踪自由表面?细胞内能同时有两种液体吗?还是全是水还是全是空气?如果是后者,那就意味着你必须在海面附近有一个非常精细的网格,才能解出在海洋中传播的波浪。

对于这个问题,你可以把水和空气看作是不可压缩的,即使你知道气体不是。当马赫数小于0.1时,空气速度足够低,因此压缩性影响很小。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34797667

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档