OpenFoam学习记录2-网格的生成

1 网格的约束

1.1 点

1)点的列表中不能有重复的点,不能包含不位于这个面上的点;

2)点的命名顺序遵循右手定则,大拇指方向为法向量的方向,四只手指的顺序为点的编号顺序;

 1.2 面

1)面的中心必须位于面的内部;

2)面可以是曲面。

1.3 单元

1)单元必须是封闭的,所有面面积矢量指向单元外时,它们的总和等于零矢量;

2)每条边必须由该单元的两个面使用,不能多也不能少,其实就是要求单元不能有重叠的面和线,用ICEM划分过网格的应该很容易理解;

3)法向量的传递通常是由编号小的网格传到编号大的,eg:从二号网格传到三号网格;

2 PolyMesh

以tutorial中的顶盖方腔流为例,执行blckMesh后,

(base) jzz@DESKTOP-I13L3PF:~/exercises/cavity$ cd constant/polyMesh/^C
(base) jzz@DESKTOP-I13L3PF:~/exercises/cavity$ tree

可以看到polymesh中生成了以下文件

.
├── boundary
├── faces
├── neighbour
├── owner
└── points

查看points文件的部分

*--------------------------------*- C++ -*----------------------------------*\
  =========                 |
  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
   \\    /   O peration     | Website:  https://openfoam.org
    \\  /    A nd           | Version:  8
     \\/     M anipulation  |
\*---------------------------------------------------------------------------*/
FoamFile
{
    version     2.0;
    format      ascii;
    class       vectorField;
    location    "constant/polyMesh";
    object      points;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //


882
(
(0 0 0)
(0.005 0 0)
(0.01 0 0)

文件头在https://blog.csdn.net/WHTU_JZZ/article/details/126601537?spm=1001.2014.3001.5502中提到过,这里不做赘述。

882代表点的数量,规定从上到下对点依次编号,如0号点为(0 0 0),1号点为(0.005 0 0)....

同理,faces:

  =========                 |
  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
   \\    /   O peration     | Website:  https://openfoam.org
    \\  /    A nd           | Version:  8
     \\/     M anipulation  |
\*---------------------------------------------------------------------------*/
FoamFile
{
    version     2.0;
    format      ascii;
    class       faceList;
    location    "constant/polyMesh";
    object      faces;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //


1640
(
4(1 22 463 442)
4(21 462 463 22)
4(2 23 464 443)

1640为面的数量,前面的4是组成这个面的点的数量,后面的点为点的索引如

4(1 22 463 442)

中这个面是由第1,22,463,442的点构成的,面同样也按由上至下的方式编号。

neighbour:指定网格间的相邻关系

760
(
1
20
2
21
3
22
4
23
5
24
6

owner,说明每个面所属的网格编号:


1640
(
0
0
1
1
2
2
3
3
4
4
5
5

boundary:说明每个边界上的网格数量和使用了哪些网格:

(
    movingWall
    {
        type            wall;
        inGroups        List<word> 1(wall);
        nFaces          20;/网格的数量
        startFace       760;/网格的编号
    }
    fixedWalls
    {
        type            wall;
        inGroups        List<word> 1(wall);
        nFaces          60;
        startFace       780;
    }
    frontAndBack
    {
        type            empty;
        inGroups        List<word> 1(empty);
        nFaces          800;
        startFace       840;
    }
)

2 boundary

以cavity中的blockMeshDict为例,通过type指定边界类型。

boundary
(
    movingWall
    {
        type wall;
        faces
        (
            (3 7 6 2)
        );
    }
    fixedWalls
    {
        type wall;
        faces
        (
            (0 4 7 3)
            (2 6 5 1)
            (1 5 4 0)
        );
    }
    frontAndBack
    {
        type empty;
        faces
        (
            (0 3 2 1)
            (4 5 6 7)
        );
    }
);

常用边界类型:

patch
symmetryPlane对称面
empty空,在二维的情况下通常将frontAndBack设置为empty
wedge前后为轴对称几何的楔形
cyclic

平面循环曲线

wall紊流中的壁面
processor并行计算时,不同网格之间的边界

3 blockMesh

blockMesh用于生成带梯度和曲线的结构化网格,其原理为将几何分成一个或多个六面体块。还是以cavity的blockMeshDict为例:

convertToMeters 0.1;

vertices
(
    (0 0 0) //0
    (1 0 0) //1
    (1 1 0) //2
    (0 1 0) //3
    (0 0 0.1) //4
    (1 0 0.1) //5
    (1 1 0.1) //6
    (0 1 0.1) //7
);

blocks
(
    hex (0 1 2 3 4 5 6 7)  //由0 1 2 3 4 5 6 7组成的六面体
    (20 20 1)  // 在1和2方向上20个,在3方向上1个
    simpleGrading (1 1 1) //类型为simpleGrading,三个方向上网格大小一致
);
edges
(
);
boundary
(
    movingWall
    {
        type wall;
        faces
        (
            (3 7 6 2)
        );
    }
    fixedWalls
    {
        type wall;
        faces
        (
            (0 4 7 3)
            (2 6 5 1)
            (1 5 4 0)
        );
    }
    frontAndBack
    {
        type empty;
        faces
        (
            (0 3 2 1)
            (4 5 6 7)
        );
    }
)

convertToMeters为缩放比,openfoam的默认单位为m,这里乘以0.1,单位就是1dm

vertices为点的列表,和上一章中的points类似。

blocks为分区,具体包括一个由点的标签组成的列表,指定各方向上网格数量的向量和各方向上单元增长率的类型和列表。单元增长率有两种类型simpleGrading和edgeGrading。

simpleGrading指定三个方向上的增长率 eg.(1 2 3)
edgeGrading从第一个单元指向最后一个单元 eg.七个单元:(1 1 2 2 3 3 4)

edges为曲线,上面的代码中没有指定,因为cavity就是个长方形,edges有以下几种:

arc曲线
simpleSpline样条曲线
polyLine曲线光顺
polySplineSet of splines(看不懂,直接粘贴的user guide)
line直线

其中arc是最常用的

edges
    (
        arc 1 5 (1.1 0.0 0.5)
    );

这里的曲线是以1号点和5号点为起点和终点,经过点(1.1 0.0 0.5)的一条曲线。

boundary为网格的边界,通过type指定类型,通过点的编号指定面。

 boundary               // keyword
    (
        inlet              // patch name
        {
            type patch;    // patch type for patch 0
            faces
            (
                (0 4 7 3)  // block face in this patch
            );
        }                  // end of 0th patch definition

        outlet             // patch name
        {
            type patch;    // patch type for patch 1
            faces
            (
                (1 2 6 5)
            );
        }

        walls
        {
            type wall;
            faces
            (
                (0 1 5 4)
                (0 3 2 1)
                (3 7 6 2)
                (4 5 6 7)
            );
        }
    );

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值