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