網格是CFD永遠的痛,痛到連老闆都略知一二。東西畫得出來解不出來87%是網格的鍋,畫的差解不了,畫的多解不動,動不動就憑經驗靠感覺,氣氣氣氣氣。(由於個人還是用Icepak居多,雖然概念上大同小異,但說明上就難以兼顧了。)
不管是在Flotherm 或是 Icepak,在特化作電子冷卻的CFD軟體中,通常都會包含三種物件:固體,流體,模組。而網格規劃會環繞他們展開。
固體內部解僅解傅立葉方程式,網格要求不高,通常鍋不在它。鍋通常在會解到Navier-Stoke的人。
Flotherm 與 Icepak的差異
在Flotherm和Icepak網格上最大的差異大概是在Mesh function上了。
Flotherm特色是動態網格,隨畫即看,前提就是僅支援正交六面體網格,切出來方方正正的,簡單易懂,但是相較之下就是彈性較小,同樣模型會花費更多的網格去處理它,以及對於曲面或是非正交邊界不那麼服貼,看起來呈現鋸齒狀。
Icepak則採用混和網格,可以使用四面體或是六面體網格,在網格過渡上更有彈性,代價就是生成網格需要計算以及眼花撩亂的參數,但是可以用更少的網格來佈建相同系統。易用性上Flotherm佔上風,但計算上Icepak是首選。
另一個區別在於Flotherm可以針對區域(Region)進行網格規劃,但是Icepak限制在以物件為中心作網格規劃。這一點對於網格規劃提供了很多彈性,而Icepak則經常會assembly intersaction。雖然都還是找的到方法去佈建,但就是要多花很多心思。
網格佈建
彈性的網格,是Icepak的特色之一,但是這個特色常常讓人眼花撩亂,讓初學者望而生畏,實在可惜。但是如果能搞懂他整個切分的理念,會讓情況好理解些。
如果把他所有的網格設定歸納起來,大概可以分成三種:
1. Global Setting: 全域的設定,非另外兩種的就會抓這邊的設定,算是種預設
2. Assembly Setting: 如果有規劃局部加密區域,該區域的設定就會抓這裡的值
3. Local Object Setting: Icepak把網格分成流體(fluid)和物件(object)兩種,除了以上兩種對流體的設定外,還可以針對物件設定切分方式。
其中,Assembly又可以再包其他的Assembly形成一種巢狀結構(nest structure)使得網格的切分方式相當多元與有變化。
決定了流體和物件要怎麼切,切多細之後,再透過一些內建的方程式把網格過渡(mesh transition),並連接起來,最後可以劃分出整個系統的網格。
網格品質
網格佈建完首先要觀察的就是網格品質,而通常發散原因不脫縱橫比(aspect ration),面貼合度(Face alignment)與歪曲度(Skewness)。其中後兩項Flotherm裡沒有,因為非混和網格。簡單來說,網格的目標是越接近正方形,或正三角形越好。而所有網格品質參數都是用來描述距離他們有多遠,而遠到一個程度或一個數量,迭代就會難以收斂。
縱橫比的要求其實根據流場而定,像是鰭片內部因為低速又層流,又細又長也沒什麼問題,但是在流場變化度大的地方要求就嚴格的多。而另一個部分是縱橫比的變化,有突然大縱橫比變化區也容易使求解發散,向下圖這種就不是很好。
面貼合度和歪曲度都是混和網格特有的問題,正交網格都是1。
實作上,0.1算是一個分界,小於0.1就有高機率使求解不順,不一定是發散,也有可能是震盪,或是殘值平衡在高水平。當然,數量多到一個程度就發散了。
至於如何避免網格品質的問題,通常還是得從調整assembly slack size下手,加密網格的效果有限。
如下面案例,在對CPU作assembly local mesh以前,固體邊界延伸出去的O-grid讓網格過渡的很劇烈。
在對組立作local mesh後就有明顯改善
或是下面這個案例
確保了網格品質之後,就可以準備進入求解的階段了。
個人的建議是,不要貪快,真的一步一步像寫程式debug完了再進下一階段,各階段都OK都不代表組起來OK了,如果帶著前一階段的bug,繼續往下作,到時候找起問題來真的生不如死。