計算流體力學中自由液面的模擬方法有哪些?


我只知道圖形視覺特效方面的應用。有幾個大流派。

Stanford流喜歡用Level Set/Particle Level Set。Level Set精度明顯不夠,而且模擬的時候會有Volume Shrinking的問題,就是水越模擬越少,最後沒有了。好處是實現還算簡單,而且模擬水的時候要做extrapolation無論如何也是要弄一個的。Particle Level Set的精度很好,壞處大概就是實現起來真的太tricky了,而且參數非常雜亂,直接影響最終的效果。我研究生的老闆曾強烈不建議我嘗試實現因為他沒有見過Stanford以外的人成功repro的。。不過我後來發現了居然UCLA有個庫:Particle Level Set Library 沒有用過不好評價,有興趣的可以看看。

Chris Wojtan發明了直接顯示的用mesh來模擬free surface,因為free surface的特性固然要處理各種複雜的融合,分裂等拓撲變化,我覺得實現起來真的會很痛苦。

UBC之流則一般用基於粒子網格混合的FLIP/PIC,然後用http://www.cs.nyu.edu/~jihun/paper/sca2010.pdf (目前的state of the art)這個方法去通過粒子重建表面。我個人最喜歡這個套路的,雖然重建時計算那個anisotropic matrix也挺蛋碎。下面是我用這個方法實現的效果,還是挺滿意的。

最後這個表面重建這個方法也被用在實時渲染中,和Point Splatting方法結合,渲染被anisotropic matrix拉伸過的橢圓到depth buffer上,然後blur一下,再正常的做deferred shading,不過這只是rendering了,有點跑題。。


論精度,個人看過的最高精的模擬是VOF 完成的. 簡直可以說是fluids porn. youtube 鏈接如下.

https://www.youtube.com/watch?v=4HEbIRAcwuA

圖形學講, 數值粘性最小並且時間步長能取到盡量大的演算法只有FLIP(也就是naiad 的演算法). 別和我說SPH以及position based fluid. 前者時間步長後者數值粘性問題巨大,於電影級模擬根本不可用(用電影從業人的話說,這哪是水,這就是蜂蜜).

至於interface tracking, 目前最好的解決方案是OpenVDB,你可以想像一下你的level set解析度到了4096^3是一種什麼狀態,而OpenVDB無論是稀疏體素還是自適應解析度都能把高精的interface handle得很好.

說流場,從真正地體積守恆以及大時間步長這個角度考慮,粒子+移流時高階的曲線+壓力無散投影是最可取的,無散投影保正時間步長,移流時採取高階曲線十分重要,既保證粒子的良好分布,又保證更好的體積守恆,在超大時間步長下比如50cfl,特別的演算法,比如引入連續碰撞檢測,顯示mesh,以及一些處理可以保持更好的體積守恆.

對於畫面:seed foam 很重要,小到中場景沒有幾billion個foam particle,大場景沒有十幾、幾十billion個foam particle就別談畫質了. foam + 高解析度的mesher,什麼各向異性kernel全是沒有真正解決問題的,你粒子數量多了,用以mesher的voxel小了 什麼geo都不是問題。 反正橫豎都是要這麼多billion個的粒子了,真的再花不起時間去計算各向異性的橢圓了.

如果問問題的是個研究生,我再贈送些新思路: 以前不火甚至沒人做過,不過未來可能是很有趣很有潛力的方向的是 vortex sheet. 或者說narrow band free surface circulation sheet/layer method. 名字是我自己起的,你可以去看一些vortex sheet free surface flow的東西,然後想想能從這個名字里悟出點什麼.


CG的人好像用level set和particle level set的多,真的做流體的level set和vof都有。算髮動機噴油可能vof還多一些,雖然表面重構精度低,但是質量守恆不至於油越噴越少了。


補充個Position based fluid。http://mmacklin.com/pbf_sig_preprint.pdf


Level Set,圖形學用得最多的,各類基於Level set的方法層出不窮。

Volume of Fluid,計算力學好像更偏愛。

基於密度的方法,每個格子標記各類流體的密度,適合用於互溶液體。

基於粒子的方法,Marker Particle,SPH等。

...

這些都屬於隱式方法,還都涉及到如何提取表面的問題,這也是一個重要研究內容。

還有一類方法是基於顯式網格的,如使用表面mesh,或者四面體等volumetric mesh等網格對錶面或者內部進行表示,然後直接追蹤網格,處理網格的拓撲變化。


Volume of Fluid

Level set

front tracking

phase field (diffuse interface)

immersed boundary

finite element moving mesh.

CG畢竟不是CFD啊!你們這些搞CG的人啊!我以後找CG特效工作的時候求帶!


前天組會聽學長講到他的模擬方法是VOF,這個方法於1975年由Hirt和Nichols提出。

劃分網格,在每個網格中用百分比表示含水量,1就是完全是水,0則是空氣,之間的就是界面了。用含水量的梯度就可以表示出界面法向了。

控制方程什麼的不記得了,當時只覺得驚為天人……

我只是即將入坑的渣渣,坐等大神答案!


@Balian Fish 的答案相對比較全,從多相物理角度出發,個人認為phase-field比較優雅,Level Set/VOF/PIC/FLIP這些都屬於純幾何建模需要額外couple類似表面張力這樣的東西。說到Level Set發明人之一Stanley Osher,是個很有趣的人,我有幸在一次數值計算會議見過他一面,他一聽我說在用Level Set就非常高興,還給我簽名,但是他非常痛恨phase-field。。。


早期的MAC方法,後來的SOLA方法以及VOF方法


VOF和Immersed boundary method結合可以算氣液固三相耦合


用過VOF模型來模擬油水界面,這個可行


front tracking method


Vof,levelset。


模擬方法似乎蠻多的,我還記得的有把節目當成控制體的,沿著界面畫網格的,以上。


推薦閱讀:

湍流的描述方程LES-NS(大渦模擬)和RANS(雷諾平均)有什麼區別?
Gambit、Fluent、Tecplot三個軟體的使用關係是怎樣的?
做CFD有沒有必要投入更多的精力在網格學習中?
室溫超流體會存在嗎?
DES(detached-eddy simulation)方法在壓氣機轉子流場模擬應用的局限性?

TAG:流體力學 | 計算機圖形學 | 力學 |