吾生有涯 学海无涯
析模有界 知识无界

OpenFOAM教程|03 分块网格

本案例演示在OpenFOAM中利用BlockMesh生成计算网格并进行后续计算的基本过程。

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)
);
blockMesh采用分块方式生成计算网格,因此需要人工控制块的生成。

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之道

赞(0) 打赏
版权声明:未经允许,请勿随意用于商业用途。
文章名称:《OpenFOAM教程|03 分块网格》
文章链接:https://www.topcfd.cn/12504/
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。
分享到

说两句 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者吧

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

微信扫一扫

登录

找回密码

注册