python做圆柱绕流_基于snappyHexMesh生成网格的圆柱绕流算例
基于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生成网格的圆柱绕流算例相关推荐
- 用python做双人五子棋_基于python的socket实现单机五子棋到双人对战
基于python的socket实现单机五子棋到双人对战,供大家参考,具体内容如下 本次实验使用python语言.通过socket进行不同机器见的通信,具体可以分为以下四步:1.创建ServerSock ...
- 用python做生物信息数据分析_基于Python的自动获取生物信息数据的软件设计
基于 Python 的自动获取生物信息数据的软件设计 * 周斯涵,刘月兰 ** [摘 要] [摘 要] 从国际生物信息学数据库中采集数据来进行相关领域的分析, 但随着数据库规模不断扩大 , 数据来源种 ...
- 用python做炒股软件-python程序源码_基于python的炒股软件
股票模拟交易系统设计与实现 不但能够进行界面的设计,还可以实现各个窗口的关联,通过WPF实现和其余窗口的关联,而且WPF中的类不但能够和其中一个窗口进行关联,还可以跟许多功能操作接口,WPF在对窗口对 ...
- python相关毕设题目_基于java的一个有创意的web毕设题目
基于java的一个有创意的web毕设题目 一个有创意的web毕设题目 本课题将结合基于Java Web技术的名师一对一课程预约系统,根据本课题的最终目标,在线用户注册.相关信息发布.在线咨询.预约试听 ...
- 基于python3写的源码剖析_基于python3生成标签云代码解析
这篇文章主要介绍了基于python3生成标签云代码解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 标签云是现在大数据里面最喜欢使用的一种展现方式 ...
- 一步一步教你如何用python做词云_一步一步教你如何用Python做词云
前言 在大数据时代,你竟然会在网上看到的词云,例如这样的. 看到之后你是什么感觉?想不想自己做一个? 如果你的答案是正确的,那就不要拖延了,现在我们就开始,做一个词云分析图,Python是一个当下很流 ...
- 如何用python做词云图_科学网—如何用Python做词云?(基础篇视频教程) - 王树义的博文...
只需要花10几分钟,跟着教程完整做一遍,你就能自己用Python做出词云了. <如何用Python做词云?>图文版发布于2017年6月,是我数据科学系列教程中的第一篇. 目前仅简书一个平台 ...
- python做excel麻烦_高效办公必备:别人通宵做的 Excel,我用Python 半小时搞定!
原标题:高效办公必备:别人通宵做的 Excel,我用Python 半小时搞定! 最近经常听到周围的人抱怨:"工作忙,在加班--" 不知不觉,当代职场人早就被"996&qu ...
- python做图片浏览器_保护隐私,用Python打造自己的照片浏览器
现代操作系统比如Win10, Mac都自带了很好用的照片浏览器,采用人像识别技术自动识别家庭成员,还有简单的画面增强功能.然而这些功能都是需要连接云端服务器来实现的.虽然说很难说这些大公司会对你的那些 ...
最新文章
- am335x LCD参数更改
- php5.3中ZendGuardLoader与wincache冲突问题的解决方法
- python外卷(10)--取整
- 使用EL表达式,显示Action中的数据
- java 下载文件大小_如何在浏览器中显示使用角度5下载的文件的文件大小?
- C++socket编程(二):系统socket库介绍
- 注意了,这些数值计算的坑千万别踩!
- 圆形led屏幕_展示厅LED大屏幕安装价格/芮城
- 寻路之 A* 搜寻算法
- 十八年开发经验分享(一)学习篇
- Thrift原理与使用实例
- OUTLOOK新邮件到达提醒设置以及outlook最小化到托盘设置
- 文件查找工具locatfind
- 深度学习为图片人物换装【python代码教程】 1
- 开场白——第一篇博客
- htonl,htons,ntohl,ntohs的详解
- tomcat错误This is very likely to create a memory leak
- tplink-ssh登录
- openstack部署过程4
- 技术分享 | Goby食用指南之红蓝对抗
热门文章
- 进公司一年,怎么跟老板提涨工资?
- html中头部相关标签(<head>)基本概念
- 计算机网络精品,计算机网络-精品.ppt
- 转发《“谈管理者的惰怠行为”——徐直军在2011年5月10日PSST体系干部大会上的讲话》
- 实验室LIMS系统值多少钱?实验室到底该不该上LIMS软件?
- Mac重装系统(2)安装系统
- 使用flume问题总结2——flume event的简单理解
- 基于深度学习的网络加密流量分类与入侵检测框架
- Mono源码学习笔记:Console类(三)
- K-means对图像进行分类