SHM能够通过用户自定义参数(如细化参数castellatedMeshControls、切合参数snapControls等)对预先载入的几何体文件(通常为‘.stl’文件)自动实现三维网格生成、加密(castellatedMesh)、切合(snap)和添加边界层(addLayers)等操作。
SHM生成OpenFOAM网格过程如图1所示:
需提供以下三个文件:
1 | STL文件格式的几何文件(binary或者ascii格式,存储在constant/triSurface子字典中); |
2 | 背景六面体网格(用于定义计算域范围和背景网格,一般由blockMesh 生成,也可由外部网格生成器生成); |
3 | snappyHexMeshDict字典(提供生成网格的必要信息,位于system 子文件夹下)。 |
SHM生成网格过程如图2所示,以下将详细介绍:
1
导入几何体/生成几何体
生成网格需要几何体文件,OpenFOAM中几何体可以直接外部STL文件导入(如前所述),也可以在snappyHexMeshDict的geometry子字典部分进行定义,如图3所示:
背景网格的生成可以采用OpenFOAM自带的blockMesh功能(通过system文件夹下的blockMeshDict字典设定参数),在创建背景网格的时候,它需要满足以下标准(图4):
网格必须为纯六面体;
在随后要使用snap 的表面附近,网格长宽高的比应该大体为1。否则网格贴合的收敛过程会变慢,有时候还会导致失败;
网格单元必须至少有一个边和STL文件的面相交叉。例如,如果背景网格是单独的一个大网格单元是不行的。
图4 blockMesh生成背景网格示意图
网格的加密过程通过设置castellatedMeshControls部分各参数实现,可以对几何体表面及内部区域分别进行加密,如图5所示。
图5 castellatedMeshControls加密网格
在加密完成后,SHM将根据用户设定移除不需要的网格部分,保留用户所关心的网格区域(图6),该步骤通过设定locationInMesh参数实现(图7)。
图6 网格移除区域示意图
4
切合网格
由图6可以看到,网格移除后,边缘部分很不光滑,呈阶梯状,很显然这对于计算是不利的。需要对网格进行切合处理,使其边缘光滑(图8)。
切合主要步骤分为:
把锯齿网格的顶点移动到 STL 表面;
依据新的网格点重新排布内网格点(采用松弛算法迭代处理);
寻找那些使网格质量降低的顶点;
对于那些被移动的顶点,减少那些顶点的位移并重复进行第二个步骤,以确保网格质量被满足。
通过设置snapControls部分各参数,能够实现对网格的切合处理(图9)。
其中,nSolveIter代表网格移动最大迭代数,nRelaxIter代表网格最大切合数,增大这两个值都可以使得网格切合的更好,但会增加切合时间。snapControls部分其他的参数建议按照默认值设置。
5
添加边界层网格
在进行网格对齐之后,这种网格可能已经达到了计算的要求。但是它会在边界处产生一些不规则的网格单元。可以在边界面上增加一些依附六面体网格的附加边界层网格(图10),添加边界层网格主要步骤分为:
依据一个指定的距离(边界层厚度),网格在几何面法向的方向向后映射;
依据新的网格点重新排布内网格点(采用松弛算法迭代处理);
检查网格标准是否满足,没有的话减少映射量并返回到第二步。如果任何距离下都不能满足网格标准,则放弃插入边界层网格;
如果网格标准满足,插入网格边界层;
snappyHexMeshDict文件的addLayersControls部分定义了添加边界层网格的参数,各参数意义详见下表。
Layers
边界层字典
备注
relativeSizes
true/false
expensionRatio
边界层网格膨胀因子
1.0
finalLayerThickness
0.3
minThickness
边界层网格的最小厚度(相对值或者绝对值,如上)
0.25
1
featureAngle
边界层自动坍塌特征角
60
nRelaxIter
对齐过程的最大迭代数
5
nSmoothSurfaceNormals
面法向光顺迭代数
1
nSmoothNormals
内部网格移动的光顺迭代数
3
nSmoothThickness
面上边界层厚度光顺数
10
maxFaceThicknessRatio
停止边界层增长的包裹网格率
0.5
maxThicknessToMedialRatio
距离中轴比的最大距离
0.3
minMedianAxisAngle
中轴点角度
130
nBufferCellsNoExtrude
新的边界层外缓冲层数
0
nLayerIter
最大边界层添加迭代数
50
nRelaxedIter
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