Stam的流体solver学习笔记

流体计算的主要问题就是解NS方程,至于怎么解就是各家之长了。Alias的大牛Stam在上世纪末提出了的稳定解算流体的做法,10年之后来瞅瞅……

 

把流体解算过程看作一个积分过程,但积分一不小心就会整成不稳定的,原因很多,如步长大于某种方法的稳定步长啦,没把质量守恒、能量守恒考虑进去啦,等等。

 

Stam用了个隐式积分的方法解决稳定积分的问题,以前是直接显式积分(加dt),现在是倒退回dt的时间,拿t-dt时刻的量,但这额外需要计算一个线性方程组。由于这个线性系统非常稀疏,可以使用Gauss-Seidel迭代法解这个系统(试下来性能令人满意)。

 

好,稳定的积分方法解决了,现在看质量守恒。通常根据NS方程几个项(平流、扩散、外力作用)积分下来,通常不会是质量守恒的。如果把符合质量守恒的状态可视化成所有一个平面的点集,那么每次积分的结果都可能把一个点(状态)带离这个平面,也就是破坏了质量守恒的条件。那么我们要在积分末尾进行一个projection的动作,把状态投影到这个平面上,也算满足了质量守恒的先决条件。可能这个投影的动作不那么科学,但至少满足了“稳定”的需求。投影的依据是Helmholtz-Hodge分解法,这个方法指出:任何向量场(我们所积的速度场)都可以唯一分解为一个收敛的向量场(即不发散)和一个标量的梯度场。
w = u + del(q) ==> u = w - del(q)
(del是del operator,向量微分算子,是一个记号,和向量一起使用才有微分的意义)
那么我们只要取这个收敛的向量场作为速度场即可,这个操作就是投影。至于求这个q,又需要解一个线性系统,
del(w) = del^2(q)
这是个泊松方程,也存在一些数值方法可以解它。总之得出q后也得到了最后的投影操作,也完成了整个解算的过程。

 

下面是在PS3上试验的结果,二维、用CPU更新的纹理,还没捣腾出截屏功能,凑合看……

 

 

posted @ 2008-07-27 17:21 eygneph 阅读(61) 评论(1)  编辑 收藏 网摘

  回复  引用    
#1楼 2008-08-15 18:00 | cjren [未注册用户]
文章适合熟悉相关内容的人看哦,
要是能将reference列出来,而且将当中的技术发展路线都更详细就更有利于读者学习啦:-)

anyway, Ding!!!!

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
Google站内搜索

China-pub 计算机图书网上专卖店!6.5万品种 2-8折!
近千种 9-95 新二手计算图书火热销售中!
开发者征途系统新作:《设计模式——基于C#的工程化实现及扩展》



相关文章:

相关链接: