轉載:知乎大神 中國空氣動力研究與發展中心 力學博士 劉雲楚 的文章
5.2背景網格(blockMesh)
背景網格(blockMesh)功能簡介
blockMesh是結構化的六面體網格生成器。一般用於生成簡單幾何模型的結構網格,隨着幾何圖形復雜性的增加,需要設置參數的工作量也會大幅增加。通常處理復雜模型時,其作為snappyhexmesh軟件的背景網格生成工具使用。
參數文件路徑為system/blockMeshDict。建議使用一個通用模板,使用時只需修改指定參數。當然也可以使用m4或則Python腳本自動化生成。執行blockMesh命令時依賴文件openfoam中controlDict文件,blockMesh目前不支持並行運行。
每個block包含8個point和12個edges,它們的編碼順序如下圖所示:
圖1. Block構造示意圖
blockMeshDict文件包含convertToMeters、vertices、blocks、edges、patches和mergePatchPairs六部分,相關說明如下表所示。
表1. BlockMesh主要參數列表
參數名 | 描述 | 示例 |
convertToMeters | 點坐標縮放比 | 0.001 |
vertices | 點坐標(單位:m) | (0 0 0) |
edges | 常用於描述圓與樣條曲線 | 圓:arc 1 4 (0.939 0.342 -0.5) |
block | “block”信息列表,包含點標簽有序列表與網格划分信息等 | 點標簽列表:hex (0 1 2 3 4 5 6 7) 網格划分信息:(10 10 1) 各方向網格膨脹比:simpleGrading (1 1 1) |
patches | 面列表 | symmetryPlane base( (0 1 2 3) ) |
mergePatchPairs | 要合並的面列表 |
背景網格(blockMesh)參數簡介
convertToMeters參數定義
用於定義幾何的尺寸縮放系數,其縮放系數應用於所有坐標軸,幾何單位為米。
convertToMeters 1.0;
vertices參數定義
點參數中列出block中包含的所有點坐標,點序號從0開始。
vertices ( (0 0 0) //點序號為0 (1 0 0) //點序號為1 ... );
edges參數定義
該部分用於定義幾何邊參數,如果所有的邊都是直邊則不需要指定參數(如下示例1)。用戶可以下表所列參數定義特定曲線。
表2. Edges主要類型列表
可選曲線類型 | 描述 | 格式 |
arc | 圓弧 | arc V1 V2 (p1i p1j p1k ) |
spline | 樣條曲線 | spline V1 V2 ((p1i p1j p1k) (p21i p2j p2k) …) |
polyLine | 折線 | polySpline V1 V2 ((p1i p1j p1k) (p21i p2j p2k) …) |
BSpline | B樣條曲線 | BSpline V1 V2 ((p1i p1j p1k) (p21i p2j p2k) …) |
line | 直線 | — |
上表中v1和v2指定邊的起始、終止端點編號。直線是邊生成的默認設置,不需要用戶進行參數設置。Arc圓弧中需要用戶指定第三點坐標,軟件依據起點v1和終點v2采用三點繪制圓弧。polyLine折線中需要用戶指定多組坐標(注意點的順序),軟件用直線連接端點及其它指定坐標。spline樣條曲線定義一條通過端點和指定坐標點序列的樣條曲線。
示例1:采用默認直線,命令輸入:
edges
(
);
圖2. Line直線邊網格展示
示例2:圓弧acr曲線參數設置。其端點坐標分別為 v1 (-1 -1 -1) 、 v2 (5 -1 -1) 、 v4 (-1 -1 5) 、 v5 (5 -1 5) ,參數命令輸入如下:
edges ( arc 0 1 (2 -2 -1) arc 4 5 (2 -2 5) );
效果圖:
圖3. Acr圓弧邊網格展示
示例3:圓弧Spline曲線參數設置。其端點坐標分別為 v1 (-1 -1 -1) 、 v2 (5 -1 -1) 、 v4 (-1 -1 5) 、 v5 (5 -1 5) ,參數命令輸入如下:
edges ( Spline 0 1 ( (1 -0.5 -1) (3 -0.5 -1) ) );
效果圖
圖4. Spline曲線邊網格展示
示例4:圓弧Polyline曲線參數設置。其端點坐標分別為 v1 (-1 -1 -1) 、 v2 (5 -1 -1) 、 v4 (-1 -1 5) 、 v5 (5 -1 5) ,參數命令輸入如下:
edges ( polyLine 0 1 ( (1 -0.5 -1) (3 -2 -1) ) polyLine 4 5 ( (1 -0.5 5) (3 -2 5) ) );
效果圖:
圖5. Polyline曲線邊網格展示
示例5:圓弧BSpline曲線參數設置。其端點坐標分別為 v1 (-1 -1 -1) 、 v2 (5 -1 -1) 、 v4 (-1 -1 5) 、 v5 (5 -1 5) ,參數命令輸入如下:
edges ( BSpline 0 1 ( (1 0 -1) (3 -2 -1) ) BSpline 4 5 ( (1 0 5) (3 -2 5) ) );
效果圖:
圖6. BSpline曲線邊網格展示
Blocks參數定義
Blcoks參數設置包含hex和simpleGrading (如下命令輸入示例)。hex后的第一個()內指定該block所需的8個點的序號,並按照block編碼序列圖中所示排列。第二個()用於定義xyz方向的網格划分數目(如下示例1)。simpleGrading后()用於定義xyz方向上,端點0處網格尺寸與端點1處網格尺寸間膨脹比(如下示例2),定義如下圖SimpleGrading參數說明圖中所示。
圖7. SimpleGrading參數說明
命令輸入示例:
blocks ( hex (0 1 4 3 9 10 13 12) (5 5 5) simpleGrading (1 1 1) );
示例1:不同網格划分等份對比
x方向網格划分數目分別為5、10,網格生成如下。
網格划分參數(5 5 5)
網格划分參數(10 10 10)
圖8. 不同網格划分等份對比圖
示例2:x方向不同網格膨脹比對比
膨脹比為x方向設置0.5,參數設置為 simpleGrading(0.5 1 1) ,生成網格圖如下所示:
圖9. X方向網格膨脹比為0.5
膨脹比為x方向設置為2,參數設置為 simpleGrading(2 1 1) ,生成網格圖如下所示:
圖10. X方向網格膨脹比為2
boundary參數定義
該部分用於定義網格邊界的名稱與邊界類型,以及每個面的頂點編號列表(編號順序滿足右手准則)。當然用戶也可以在仿真階段使用createPatchDict文件對網格邊界名稱與類型進行更改。
命令輸入示例如下:
boundary ( top { type wall; faces ( (3 7 6 2) ); } ... )
用戶可自定義的邊界的名稱(如示例中“top”)。可通過參數type指定邊界類型,邊界類型包括:壁面(wall)、對稱平面(symmetryPlane)、周期性邊界(cyclic )、不一致的周期性邊界(cyclicAMI)、二維軸對稱邊界(wedge)、2D邊界(empty)。
使用一些特定邊界類型時,需留意其使用場景及關聯文件。例如:cyclic和cyclicAMI邊界類型需在仿真求解時使用“neighbourPatch”指定網格匹配的交界面;目前Openfoam只支持三維網格計算,若用戶想計算二維問題,可將三維計算域中的兩側壁面都設置為empty邊界,以此作為二維計算邊界。
faces參數指定了構成邊界面的點的順序。如下圖中“(3 7 6 2)”表示由點3、7、6、2定義面信息(如下圖中的上表面),其符合右手定則。
圖11. Face構造示意圖
mergePatchPairs參數定義
blockMesh允許用戶使用多個block來創建網格。在包含多個block的情況下,需要處理各個block間連接問題。其有兩種合並方式:
1、面匹配:
要求需合並的block A與block B中,交接面patch A1、patch B1的頂點是完全相同的。當通過面匹配來連接blocks時,用戶不需要定義mergePatchPairs內參數。blockMesh會自動將這兩個patch匹配成內部面,如下例所示:
mergePatchPairs
(
);
2、面融合:
兩個block中的兩個patch存在映射關系,不要求頂點完全相同。融合規則如下:
1)主面masterPatch保持不動,其上所有點坐標不做更改。
2)若主面masterPatch與副面slavePatch之間是存在間隙,則將副面slavePatch投影到主面masterPatch上,以滿足面融合要求。
3)通過最小公差值調整副面上的節點的位置,提高主面與副面之間節點匹配度,以清除小於最小公差的細微邊;
4)當主、副面間部分重疊時(如下圖),重疊部分會成為內部面,不重疊的部分依然為外部面,需要定義邊界條件;
5)如果副面slavePatch完全融合進主面中,則副面將會被移除。
圖12. 面重疊示意圖
當通過面融合來連接blocks時,需要在mergePatchPairs參數中定義要融合的兩個patch,如下例所示:
mergePatchPairs ( (<masterPatch> <slavePatch>) );