計算流體力學中自由液面的模擬方法有哪些?
我只知道圖形視覺特效方面的應用。有幾個大流派。
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也挺蛋碎。下面是我用這個方法實現的效果,還是挺滿意的。論精度,個人看過的最高精的模擬是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 setfront trackingphase field (diffuse interface)immersed boundaryfinite 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)方法在壓氣機轉子流場模擬應用的局限性?