基於非結構格線,求解具有複雜外形的流動。可以大大減小CFD在格線生成部分花費的工作量。是當前計算流體力學領域蓬勃發展的方向之一。
由於商業軟體基本是不開源的,在進行研究時常常需要自己編寫程式,但是CFD發展至今,體系已經十分複雜,對於初學者來說上手十分困難。因此,有必要在此列出CFD程式編寫的參考方法。
基本介紹
- 中文名:非結構CFD程式
- 外文名:unstructured CFD program
非結構CFD程式的求解流程,非結構格線的數據結構,格線檔案包含的內容,UGRID格線檔案格式說明,格線單元幾何量計算,面元面積和中心點,單元體積和中心點,
非結構CFD程式的求解流程
1、讀入格線和計算參數
2、初始化流場
3、求單元通量
4、時間積分,求解下一時刻流場變數。
5、結果輸出
非結構格線的數據結構
格線檔案包含的內容
一個非結構格線檔案通常要包含以下內容:
1、每個節點的編號和坐標
2、每個單元的節點連線關係
3、每個邊界面元的節點連線關係
此外,有時還會包含以下內容:
4、每個單元所在的流體域編號
5、每個邊界面元的邊界名稱
6、每個邊界面元的邊界類型
但通常在計算時,除了以上內容之外,還要知道:
1、每個內部面元的編號和組成內部面元的節點連線關係
2、每個單元幾何量(體積、中心點坐標)
3、每個面元的幾何量(面積、中心點坐標)
因此,在讀入格線檔案之後,還要對其進行處理,得到額外所需的信息
UGRID格線檔案格式說明
ICEM中導出的UGRID格線檔案的格式說明如下:
.dat檔案 | 1 | 注釋信息 |
2 | 邊界編號和邊界名 | |
..ugrid檔案 | 1 | 節點數目 三角形邊界面數目 四邊形邊界面數目 四面體單元數目 四稜錐單元數目 三稜柱單元數目 六面體單元數目 |
2 | 節點的坐標 | |
3 | 三角形邊界面的邊表 四邊形邊界面的邊表 | |
4 | 三角形邊界面的邊界號 四邊形邊界面的邊界號 | |
5 | 四面體的邊表(0,1,2,3) 四稜錐的邊表(0,1,2,3,4) 三稜柱的邊表(0,1,2,3,4,5) 六面體的邊表(0,1,2,3,4,5,6,7) |
單元的邊表
數據結構
數據結構的差異是結構和非結構格線的根本差別所在。可以說,一旦掌握了非結構格線的數據結構,非結構計算方法也就掌握了一半。一種可行的數據結構為節點,面元,單元組成的層次結構:
節點 | 節點編號 節點坐標 |
單元 | 單元類型 指向節點的指針 單元體積 單元中心坐標 |
面元 | 面元類型 指向節點的指針 左右單元號 面元面積 面元中心點坐標 邊界條件 所屬部件 |
對於上述數據結構,如果用C++語言實現,可定義節點、單元,面元三種類,節點,單元和面元均採用STL(標準模板庫)中的vector類型的數據。(vector類型是一種線性順序存儲表,可以像數組一樣引用,但其具有動態結構,可以方便地隨時增加或者刪除元素。如果程式後續要實現自適應格線等功能,使用vector類型就會十分方便。)
數據結構的生成:
節點和單元的數據結構在讀入時已經生成,只需再生成面元的數據結構即可。可利用STL中的set類型。對所有單元進行循環,依次提取單元的所有面,插入set中,再將set中的數據全部放在vector中,便生成了面元的數據結構。(set類型在插入元素時會根據特定的排序準則自動將元素排序,set中的元素不允許重複,因此十分適合用來生成面元的數據結構。)
格線單元幾何量計算
面元面積和中心點
三角形 | 面積 | |
中心點 | 三個點坐標平均 | |
四邊形 | 面積 | |
中心點 | 分別求兩個三角形中心,然後面積加權平均 |
單元體積和中心點
四面體 | 體積 | ||
中心點 | 四個點坐標平均 | ||
四稜錐 | 體積 | 分成兩個四面體 | |
中心點 | 體積加權平均 | ||
三稜柱 | 體積 | 分成一個四面體和一個四稜錐 | |
中心點 | 體積加權平均 | ||
六面體 | 體積 | 分成兩個三稜柱 | |
中心點 | 體積加權平均 |