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>)
);
原文地址:https://www.cnblogs.com/Xiwang-Sun/p/15370412.html