首页/文章/ 详情

解锁新技能:OpenFOAM三维网格生成器

1年前浏览3901
snappyHexMesh(SHM)是OpenFOAM软件的三维结构化网格生成模块,功能比较强大,设置灵活,表面处理贴合功能非常强健并且可以并行运算。

SHM能够通过用户自定义参数(如细化参数castellatedMeshControls、切合参数snapControls等)对预先载入的几何体文件(通常为‘.stl’文件)自动实现三维网格生成、加密(castellatedMesh)、切合(snap)和添加边界层(addLayers)等操作。

SHM生成OpenFOAM网格过程如图1所示:

 

图1 基于snappyHexMesh的OpenFOAM网格生成流程图

 

需提供以下三个文件:

1

STL文件格式的几何文件(binary或者ascii格式,存储在constant/triSurface子字典中); 

2

背景六面体网格(用于定义计算域范围和背景网格,一般由blockMesh 生成,也可由外部网格生成器生成); 

3

snappyHexMeshDict字典(提供生成网格的必要信息,位于system 子文件夹下)。

 
实际上,snappyHexMeshDict 字典中预先定义了网格质量标准,根据该字典中各参数的设定,能够对网格进行处理。SHM依靠迭代将一个初始网格细化,并将细化后的网格变形以依附于表面,在这个过程之后用户可以选择是否插入网格边界层。本篇主要介绍如何导入几何体,生成背景网格以及设置SnappyHexMeshDict文件各参数,从而获得对应的OpenFOAM网格。  
 
图2 snappyHexMesh生成网格示意图  

SHM生成网格过程如图2所示,以下将详细介绍:

1

导入几何体/生成几何体

生成网格需要几何体文件,OpenFOAM中几何体可以直接外部STL文件导入(如前所述),也可以在snappyHexMeshDict的geometry子字典部分进行定义,如图3所示:

 

图3 几何体及加密区域参数设置  
2    
生成背景网格    

背景网格的生成可以采用OpenFOAM自带的blockMesh功能(通过system文件夹下的blockMeshDict字典设定参数),在创建背景网格的时候,它需要满足以下标准(图4):

  • 网格必须为纯六面体;

  • 在随后要使用snap 的表面附近,网格长宽高的比应该大体为1。否则网格贴合的收敛过程会变慢,有时候还会导致失败;

  • 网格单元必须至少有一个边和STL文件的面相交叉。例如,如果背景网格是单独的一个大网格单元是不行的。

 

图4 blockMesh生成背景网格示意图

3  
加密网格  

网格的加密过程通过设置castellatedMeshControls部分各参数实现,可以对几何体表面及内部区域分别进行加密,如图5所示。

 

图5 castellatedMeshControls加密网格

在加密完成后,SHM将根据用户设定移除不需要的网格部分,保留用户所关心的网格区域(图6),该步骤通过设定locationInMesh参数实现(图7)。

图6 网格移除区域示意图

图7 网格移除参数设置

4

切合网格

由图6可以看到,网格移除后,边缘部分很不光滑,呈阶梯状,很显然这对于计算是不利的。需要对网格进行切合处理,使其边缘光滑(图8)。

 


图8 网格切合处理示意图

切合主要步骤分为:

  • 把锯齿网格的顶点移动到 STL 表面;

  • 依据新的网格点重新排布内网格点(采用松弛算法迭代处理);

  • 寻找那些使网格质量降低的顶点;

  • 对于那些被移动的顶点,减少那些顶点的位移并重复进行第二个步骤,以确保网格质量被满足。

通过设置snapControls部分各参数,能够实现对网格的切合处理(图9)。

 
图9 切合处理参数设置  

其中,nSolveIter代表网格移动最大迭代数,nRelaxIter代表网格最大切合数,增大这两个值都可以使得网格切合的更好,但会增加切合时间。snapControls部分其他的参数建议按照默认值设置。


 

5

添加边界层网格

在进行网格对齐之后,这种网格可能已经达到了计算的要求。但是它会在边界处产生一些不规则的网格单元。可以在边界面上增加一些依附六面体网格的附加边界层网格(图10),添加边界层网格主要步骤分为:

  • 依据一个指定的距离(边界层厚度),网格在几何面法向的方向向后映射;

  • 依据新的网格点重新排布内网格点(采用松弛算法迭代处理);

  • 检查网格标准是否满足,没有的话减少映射量并返回到第二步。如果任何距离下都不能满足网格标准,则放弃插入边界层网格;

  • 如果网格标准满足,插入网格边界层;

  • 再次检查网格,如果不满足网格标准,去掉边界层并重新进行第二步。
图10 添加边界层网格

snappyHexMeshDict文件的addLayersControls部分定义了添加边界层网格的参数,各参数意义详见下表。

Layers

边界层字典

备注

relativeSizes

绝对边界层厚度还是相对边界层厚度 

 true/false

expensionRatio

边界层网格膨胀因子

 1.0

finalLayerThickness

壁面最近的边界层厚度,通过 relativeSizes 设定为相对值或者绝对值

 0.3

minThickness

边界层网格的最小厚度(相对值或者绝对值,如上)

 0.25

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

 1

featureAngle

边界层自动坍塌特征角 

 60

nRelaxIter

对齐过程的最大迭代数

 5

nSmoothSurfaceNormals

面法向光顺迭代数

 1

nSmoothNormals

内部网格移动的光顺迭代数

 3

nSmoothThickness

面上边界层厚度光顺数 

10

maxFaceThicknessRatio

停止边界层增长的包裹网格率

0.5

maxThicknessToMedialRatio

距离中轴比的最大距离

0.3

minMedianAxisAngle

中轴点角度

130

nBufferCellsNoExtrude

新的边界层外缓冲层数

0

nLayerIter

最大边界层添加迭代数

50

nRelaxedIter

最大网格回放迭代数,当此数越界,寻找meshQuality中的relaxed子字典的相关信息并迭代

20


6

网格质量检查参数

网格质量控制参数在snappyHexMeshDict 中的 meshQualityControls 部分进行设定,如下图11所示。meshQualityDict定义了诸多网格质量标准,位于system目录下,一般可以按照默认值进行网格质量标准参数设定。

 

图11 网格质量检测参数设定

以上,依次从导入几何体背景网格生成加密网格切合网格添加边界层网格几个方面详细介绍了如何使用OpenFOAM的多面体网格生成器snappyHexMesh,用户可以自定义snappyHexMeshDict文件的各个参数,进而灵活地生成目标网格,你get到了吗?


参考文献:

1. OpenFOAM v6 User Guide, The OpenFOAMFoundation, https://cfd.direct/openfoam/user-guide

2. www.wolfdynamics.com/wiki/meshing_OF_SHM.pdf

3. https://hpcforge.cineca.it/files/CoursesDev/public/2015/Workshop_HPC_Methods_for_Engineering/snappyHexMesh.pdf

来源:多相流在线
HPCOpenFOAM碰撞多相流燃烧湍流核能电力材料控制
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2023-06-23
最近编辑:1年前
积鼎科技
联系我们13162025768
获赞 108粉丝 104文章 297课程 0
点赞
收藏
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈