1 计算模型
本案例计算模型如图所示。
几何尺寸如图所示。
本案例采用2D计算,建模过程中需要创建沿法向方向的厚度。
2 文件准备
-
利用以下命令拷贝文件到当前路径
cd $FOAM_RUN
cp -r $FOAM_TUTORIALS/compressible/rhoPimpleFoam/laminar/forwardStep .
文件执行如图所示。
注:图中输入命令时采用了Tab键辅助输入,导致$FOAM_TUTORIALS被自动展开。
-
采用命令进入forwardStep目录,查看目录下的文件组织
cd forwardStep
tree
执行后显示如下图所示。
注:
tree命令需要单独安装,Ubuntu系统下可以使用命令sudo apt-get install tree进行安装。该命令可以将文件夹组织结构以树形显示出来。
本案例采用rhoPimpleFoam进行求解,该求解器可以用于求解流体可压缩流动,可适用于亚音速流动,也可用于求解跨/超音速流动。在OpenFOAM V1906版本中,该求解器对应为sonicFoam。
3 网格准备
本案例采用OpenFOAM内置的blockMesh程序生成计算网格,该程序采用分块方式生成六面体计算网格。所有关于网格划分的数据均包含在文件blockMeshDict
中。
案例几何模型可如下图所示进行拆解。
注:
blockMesh采用的是分块生成六面体网格,因此在构造几何模型过程中需要预先构造六面体块。
这里的几何厚度0.1m并不是确定的,实际上可以指定任意尺寸的厚度,在网格划分过程中,指定厚度方向网格为1层
-
采用以下命令打开文件blockMeshDict
gedit system/blockMeshDict
注:这里的gedit是文本编辑器,若提示无法找到该应用程序,可利用命令sudo apt-get install gedit进行安装。
该文件内容包括:
FoamFile
{
version 2.0;
format ascii;
class dictionary;
object blockMeshDict;
}
convertToMeters 1;
vertices
(
(0 0 -0.05)
(0.6 0 -0.05)
(0 0.2 -0.05)
(0.6 0.2 -0.05)
(3 0.2 -0.05)
(0 1 -0.05)
(0.6 1 -0.05)
(3 1 -0.05)
(0 0 0.05)
(0.6 0 0.05)
(0 0.2 0.05)
(0.6 0.2 0.05)
(3 0.2 0.05)
(0 1 0.05)
(0.6 1 0.05)
(3 1 0.05)
);
blocks
(
hex (0 1 3 2 8 9 11 10) (25 10 1) simpleGrading (1 1 1)
hex (2 3 6 5 10 11 14 13) (25 40 1) simpleGrading (1 1 1)
hex (3 4 7 6 11 12 15 14) (100 40 1) simpleGrading (1 1 1)
);
edges
(
);
boundary
(
inlet
{
type patch;
faces
(
(0 8 10 2)
(2 10 13 5)
);
}
outlet
{
type patch;
faces
(
(4 7 15 12)
);
}
bottom
{
type symmetryPlane;
faces
(
(0 1 9 8)
);
}
top
{
type symmetryPlane;
faces
(
(5 13 14 6)
(6 14 15 7)
);
}
obstacle
{
type patch;
faces
(
(1 3 11 9)
(3 4 12 11)
);
}
);
mergePatchPairs
(
);
该文件中包含了几何定义、网格尺寸划分以及边界组织。
3.1 几何定义
几何定义代码段如下。
convertToMeters 1;
vertices
(
(0 0 -0.05)
(0.6 0 -0.05)
(0 0.2 -0.05)
(0.6 0.2 -0.05)
(3 0.2 -0.05)
(0 1 -0.05)
(0.6 1 -0.05)
(3 1 -0.05)
(0 0 0.05)
(0.6 0 0.05)
(0 0.2 0.05)
(0.6 0.2 0.05)
(3 0.2 0.05)
(0 1 0.05)
(0.6 1 0.05)
(3 1 0.05)
);
该代码段内容解释:
convertToMeters 1
:表示后续的尺寸采用米作为单位
vertices
:定义了16个点的坐标,注意坐标点的顺序。这里的点编号为从0~15
3.2 网格定义
网格定义代码如下:
blocks
(
hex (0 1 3 2 8 9 11 10) (25 10 1) simpleGrading (1 1 1)
hex (2 3 6 5 10 11 14 13) (25 40 1) simpleGrading (1 1 1)
hex (3 4 7 6 11 12 15 14) (100 40 1) simpleGrading (1 1 1)
);
hex (0 1 3 2 8 9 11 10) (25 10 1) simpleGrading (1 1 1)
六面体块由编号为0 1 3 2 8 9 11 10的顶点所构成。需要注意顶点顺序必须是连续的
(25 10 1)表示沿x方向生成25个网格,y方向10个网格,z方向1个网格
simpleGrading(1 1 1)表示网格在x,y,z三方向为均匀分布
本案例共生成了3个块。
3.3 边界定义
手工指定边界面由哪些顶点构成。这部分代码如下:
boundary
(
inlet
{
type patch;
faces
(
(0 8 10 2)
(2 10 13 5)
);
}
outlet
{
type patch;
faces
(
(4 7 15 12)
);
}
bottom
{
type symmetryPlane;
faces
(
(0 1 9 8)
);
}
top
{
type symmetryPlane;
faces
(
(5 13 14 6)
(6 14 15 7)
);
}
obstacle
{
type patch;
faces
(
(1 3 11 9)
(3 4 12 11)
);
}
);
关于此段代码:
一共包含5个边界,其边界名称分别为inlet、outlet、bottom、top以及obstacle,边界类型分别为:patch、patch、symmetryPlane、symmetryPlane、patch
一个边界可以包含多个faces
所有的面由顶点构成。如bottom边界由1个面构成,该面由4个顶点(0 1 9 8)所组成
3.4 生成网格
-
输入命令
cd $FOAM_RUN/forwardStep
blockMesh
运行界面如图所示。
-
网格生成完毕后输入命令
paraFoam
打开prarview查看网格
可以看到沿厚度方向只有1层计算网格。
此时constant文件夹中多出了一个名为polyMesh的文件夹,如下图所示,该文件夹中包含了网格的所有信息。
检查一下boundary文件的内容,确保边界名称及类型无误,该文件内容如图所示。
如图所示多出了一个名为defaultFaces的边界,且指定其类型为empty。
本案例其他内容(如介质参数、边界条件、物理模型、计算控制参数设置略过,在后续的教程中再进行详述。
4 总结
本案例采用blockMesh进行几何创建及网格划分,事实上也可以在其他网格生成软件中创建计算网格,然后采用命令方式导入计算网格到OpenFOAM中。
blockMesh的操作稍微复杂一些,不过如果理解分块网格的思想的话,应该也很容易理解。
建议自己动手尝试修改网格参数并查看计算网格的变化。
本篇文章来源于微信公众号: CFD之道
评论前必须登录!
注册