SnappyHexMesh(之二)背景網格


 轉載:知乎大神 中國空氣動力研究與發展中心 力學博士 劉雲楚 的文章

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>)
);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM