基于snappyHexMesh生成网格的圆柱绕流算例

1.创建几何体STL文件

在了解了原理之后,要生成网格第一步就是要创建一个几何体的STL文件,可以使用3Dbulider,3DCAD等软件生成几何体然后以STL格式输出,然后将文件拷贝到虚拟机中。可以使用paraview打开几何体进行查看,确认没有问题。

2.创建背景网格

修改blockMeshDict字典文件来创建一个背景网格,在这个算例中背景网格是一个非常简单的block,背景网格的几何大小与第二章的圆柱绕流算例的尺寸一致。

需要注意的是,在blockMeshDict中所有面的type都为patch。 生成的背景网格如下:

将几何体放置到网格中,发现没有问题,继续之后的步骤。

3.为几何体创建多个表面

默认情况下,几何体STL文件由一个表面组成,如果要创建多个表面,可以使用surfaceAutoPatch。在几何体STL文件所在的目录下终端键入:

surfaceAutoPatch geo.stl cylinder.stl 130程序surfaceAutoPatch将读取原始STL文件geo.stl(一个面组成),并将使用130的角度标准将几何体划分为多个面。

这个角度划分标准类似于表面特征细化角,如果几何体相邻面角度大于resolveFeatureAngle,则标记相邻STL面进行划分(细化),反之不进行划分(细化)。

cylinder.stl最终要拷贝到constant/triSurface中。

这时候打开cylinder.stl,会发现里面定义了三个表面:patch0(通过部分代码上的点位置可以确定patch0是圆柱体的侧表面)

patch1(可以判断为后端面)

patch2(同理可以判断为前端面)

在paraview中可以直观的看到三个面分别是不同的颜色:

4.复制snappyHexMeshDict,meshQualityDict和surfaceFeatureExtractDict文件

在完成上面的操作后,就可以进行网格细化了,网格细化需要snappyHexMeshDict,meshQualityDict和surfaceFeatureExtractDict这三个文件,在这里我们直接从其他的snappyHexMesh算例中进行拷贝过来然后进行修改。在这个算例中,在这里我将SHM演示算例C1中的这三个文件给复制了过来。

当然,我们也可以寻找OpenFOAM自带的教程算例中的这些文件,步骤如下(以snappyHexMeshDict为例):进入OpenFOAM教程算例

cd $FOAM_TUTORIALS寻找snappyHexMeshDict文件

find . -iname snappyHexMeshDict

出现了所有教程算例中的snappyHexMeshDict文件,我们也可以选择自己需要的类型。进入算例文件夹,并将自己需要的文件复制粘贴到system文件夹中。

meshQualityDict和surfaceFeatureDict也是同样按照上面的方法进行复制。

5.修改snappyHexMeshDict等文件

snappyHexMeshDict是主要要修改的文件,meshQualityDict基本不需要修改,surfaceFeatureExtractDict只要将几何体STL文件的名称改为cylinder.stl即可。

snappyHexMeshDIct字典由五个部分组成,即geometry,castellatedMeshControls,snapControls,addLayersControls,meshQualityControls。每个部分控制网格化过程的一个步骤。

修改后的snappyHexMeshDict文件如下

castellatedMesh true;

snap true;

addLayers false;

geometry

{

cylinder.stl//要读取几何体STL文件 {

type triSurfaceMesh;

name banana_cylinder;//snappyHexMesh内表面的名称 ​

regions//定义多个表面 {

patch0 // STL文件中的表面名称 {

name cylinder; // 定义圆柱体侧表面为cylinder,这样其他的文件不用改。 }

patch1

{

name surface1;

}

patch2

{

name surface2;

}

}

}

refinementBox//细化区域,包含几何体的block {

type searchableBox;

min (-1 -1 0);//(minX minY minZ) max (1 1 1);//(maxX maxY maxZ) }

};

castellatedMeshControls//细化参数 {

maxGlobalCells 2000000;//区域中的最大网格数,达到数目后,网格划分器不会再添加网格 minRefinementCells 0;

maxLoadUnbalance 0.10;

nCellsBetweenLevels 2;//控制单元细化级别之间的过渡 ​

features

(

{

file "cylinder.eMesh";//使用命令surfaceFeatureExtract后生成的文件。 level 0

}

);

refinementSurfaces//细化表面 {

banana_cylinder//与上面的name对应 {

level (2 2);//表面网格细化的最小和最大等级,即网格被分割的最小和最大次数。 regions//局部细化 {

patch0

{

level (2 4);

patchInfo//patch信息 {

type wall;//类型只能为wall或者patch }

}

patch1//patch1和patch2在生成外部网格时会被去除,可以不用定义。 {

level (2 2);

patchInfo

{

type patch;

}

}

patch2

{

level (2 2);

patchInfo

{

type patch;

}

}

}

}

}

resolveFeatureAngle 30;

//resolveFeatureAngle 30; //默认 //resolveFeatureAngle 60; //避免细化过度 planarAngle 30;

refinementRegions

{

refinementBox

{

mode inside;

levels ((1E15 1));

}

}

locationInMesh (4.5 4.5 0.1);//这一点定义了要在何处进行网格划分。可以是内部网格,也可以是外部网格。 //如果点在STL内部,则为内部网格如果点在背景网格内部且在STL外部,则为外部网格。 //此外,该点不可以是表面或者是网格线上的一点,必须是网格内的一点。 allowFreeStandingZoneFaces true;

snapControls

{

nSmoothPatch 3;//面对应之前的面广顺迭代 tolerance 2.0;//网格单元的顶点和几何表面的点或特征面的距离 nSolvelter 100;//网格移动最大迭代数 nRelaxlter 10;//网格贴合最大迭代数 nFeatureSnaplter 10;

implicitFeatureSnap false;

explicitFeatureSnap ture;

muliRegionFeatureSnap false;

addLayersControls

{

relativeSize ture;//绝对边界层厚度(false 相对边界层厚度) expansionRatio 1.2;//边界层网格膨胀因子 finalLayerThickness 0.5;//壁面最近的边界层厚度 minThickness 0.1;//边界层网格的最小厚度 layers//边界层字典 {

banana_cylinder

{

nSurfaceLayers 3;

}

}

nGrow 0;//抽取点,没有抽取点则生成指定数量的边界以连接面,使得特征边附近的边界层添加过更容易收敛 ​

featureAngle 130;//边界层自动坍塌特征角 maxFaceThicknessRatio 0.5;//停止边界层增长的包裹网格率 nSmoothSurfaceNormals 1;//面法向光顺迭代器 nSmoothThickness 10;//面上边界层厚度光顺器 minMedialAxisAngle 90;//中轴点角度 maxThicknessToMedialRatio 0.3;//距离中轴比的最大距离 nSmoothNormals 3;//内部网格移动的广顺迭代器 slipFeatureAngle 30;

nRelaxIter 5;//对齐过程的最大迭代数 nBufferCellsNoExtrude 0;//新的边界层外缓冲层数 nLayerIter 50;//最大边界层添加迭代数 nRelaxedIter 20;//最大网格回放迭代数 ​

meshQualityControls

{

relaxed

{

maxNonOrtho 75;//最大非正交角 }

nSmoothScale 4;//每次回放的光顺数 ​

errorReduction 0.75;//网格内某些点的回放量 }

mergeTolerance 1e-6;

6.运行算例

在运行算例前,需要将第二章的圆柱绕流算例文件中的controlDict,0,fvSolution,fvShemes拷贝到算例文件夹中。

然后输入以下代码

surfaceFeatureExtract//从几何文件中提取特征边缘,同时,在triSurface文件中会生成cylinder.eMesh文件。 blockMesh//生成背景网格

在生成背景网格之后,为了之后的运算,我们还需要将polyMesh/boundary字典中的表面类型修改为对应的类型(与0/p,0/U中的边界面类型一致):

然后再输入:

snappyHexMesh

生成的网格如下:

此时,在算例文件夹中会生成两个时间步文件。

时间步文件中只有一个polyMesh文件夹,文件夹里面包含了使用程序snappyHexMesh之后的网格信息:

boundary文件里面包含了包括几何体在内的完整的边界信息:

我们使用时间步文件中的polyMesh文件替换掉constant/polyMesh,并删除时间步文件。

然后就可以进行运算了,输入:

icoFoam

7.与blockMesh生成网格算例对比

选择几i个点的U和p进行比较,点(-1 0 0.5)位于来流的壁面上,点(-1.5 0 0.5)在壁面附近,点(1 0 0.5)位于圆柱背面,点(0 1 0.5)位于侧面。

比较网格图不难发现使用snappyHexMesh划分的网格在壁面附近更精细。

从上面的表中可以看出两种网格算例的值在壁面附近也有一些区别,使用blockMesh的算例壁面附近的U值大体上比snappyHexMesh的U值小,而相反p值稍微大一些。

由于两种网格的生成方式不同,导致计算结束后,两种算例中流体的流动状态有区别,因此p和U的云图也有区别。

p(左:snappyHexMesh,右:blockMesh)

U

python做圆柱绕流_基于snappyHexMesh生成网格的圆柱绕流算例相关推荐

  1. 用python做双人五子棋_基于python的socket实现单机五子棋到双人对战

    基于python的socket实现单机五子棋到双人对战,供大家参考,具体内容如下 本次实验使用python语言.通过socket进行不同机器见的通信,具体可以分为以下四步:1.创建ServerSock ...

  2. 用python做生物信息数据分析_基于Python的自动获取生物信息数据的软件设计

    基于 Python 的自动获取生物信息数据的软件设计 * 周斯涵,刘月兰 ** [摘 要] [摘 要] 从国际生物信息学数据库中采集数据来进行相关领域的分析, 但随着数据库规模不断扩大 , 数据来源种 ...

  3. 用python做炒股软件-python程序源码_基于python的炒股软件

    股票模拟交易系统设计与实现 不但能够进行界面的设计,还可以实现各个窗口的关联,通过WPF实现和其余窗口的关联,而且WPF中的类不但能够和其中一个窗口进行关联,还可以跟许多功能操作接口,WPF在对窗口对 ...

  4. python相关毕设题目_基于java的一个有创意的web毕设题目

    基于java的一个有创意的web毕设题目 一个有创意的web毕设题目 本课题将结合基于Java Web技术的名师一对一课程预约系统,根据本课题的最终目标,在线用户注册.相关信息发布.在线咨询.预约试听 ...

  5. 基于python3写的源码剖析_基于python3生成标签云代码解析

    这篇文章主要介绍了基于python3生成标签云代码解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 标签云是现在大数据里面最喜欢使用的一种展现方式 ...

  6. 一步一步教你如何用python做词云_一步一步教你如何用Python做词云

    前言 在大数据时代,你竟然会在网上看到的词云,例如这样的. 看到之后你是什么感觉?想不想自己做一个? 如果你的答案是正确的,那就不要拖延了,现在我们就开始,做一个词云分析图,Python是一个当下很流 ...

  7. 如何用python做词云图_科学网—如何用Python做词云?(基础篇视频教程) - 王树义的博文...

    只需要花10几分钟,跟着教程完整做一遍,你就能自己用Python做出词云了. <如何用Python做词云?>图文版发布于2017年6月,是我数据科学系列教程中的第一篇. 目前仅简书一个平台 ...

  8. python做excel麻烦_高效办公必备:别人通宵做的 Excel,我用Python 半小时搞定!

    原标题:高效办公必备:别人通宵做的 Excel,我用Python 半小时搞定! 最近经常听到周围的人抱怨:"工作忙,在加班--" 不知不觉,当代职场人早就被"996&qu ...

  9. python做图片浏览器_保护隐私,用Python打造自己的照片浏览器

    现代操作系统比如Win10, Mac都自带了很好用的照片浏览器,采用人像识别技术自动识别家庭成员,还有简单的画面增强功能.然而这些功能都是需要连接云端服务器来实现的.虽然说很难说这些大公司会对你的那些 ...

最新文章

  1. am335x LCD参数更改
  2. php5.3中ZendGuardLoader与wincache冲突问题的解决方法
  3. python外卷(10)--取整
  4. 使用EL表达式,显示Action中的数据
  5. java 下载文件大小_如何在浏览器中显示使用角度5下载的文件的文件大小?
  6. C++socket编程(二):系统socket库介绍
  7. 注意了,这些数值计算的坑千万别踩!
  8. 圆形led屏幕_展示厅LED大屏幕安装价格/芮城
  9. 寻路之 A* 搜寻算法
  10. 十八年开发经验分享(一)学习篇
  11. Thrift原理与使用实例
  12. OUTLOOK新邮件到达提醒设置以及outlook最小化到托盘设置
  13. 文件查找工具locatfind
  14. 深度学习为图片人物换装【python代码教程】 1
  15. 开场白——第一篇博客
  16. htonl,htons,ntohl,ntohs的详解
  17. tomcat错误This is very likely to create a memory leak
  18. tplink-ssh登录
  19. openstack部署过程4
  20. 技术分享 | Goby食用指南之红蓝对抗

热门文章

  1. 进公司一年,怎么跟老板提涨工资?
  2. html中头部相关标签(<head>)基本概念
  3. 计算机网络精品,计算机网络-精品.ppt
  4. 转发《“谈管理者的惰怠行为”——徐直军在2011年5月10日PSST体系干部大会上的讲话》
  5. 实验室LIMS系统值多少钱?实验室到底该不该上LIMS软件?
  6. Mac重装系统(2)安装系统
  7. 使用flume问题总结2——flume event的简单理解
  8. 基于深度学习的网络加密流量分类与入侵检测框架
  9. Mono源码学习笔记:Console类(三)
  10. K-means对图像进行分类