SnappyHexMesh(之九)边界层
转载:知乎大神 中国空气动力研究与发展中心 力学博士 刘云楚 的文章
5.6边界层(addLayersControls)
snappyHexMesh的网格生成策略是自上而下生成网格,即先生成体网格,再拟合表面上面网格。边界层网格生成时,软件采用中轴位移法收缩现有体网格。即先沿表面法向向网格划分区域投影指定厚度,再根据投影厚度值计算网格松弛系数收缩现有体网格,收缩后形成的空腔作为边界层网格的划分区域。具体边界层划分原理步骤如下所示:
在划分边界层时,用户需注意在全局参数设置中激活边界层划分功能,即将addLayers值设置为true。边界层配置参数在addLayersControls子字典中设置,其参数类型可分为基本参数与高级控制参数。
边界层命令设置示例如下:
addLayerControls { //基本参数输入 relativeSizes true; expansionRatio 1.2; finalLayerThickness 0.3; minThickness 0.1; nGrow 0; layers { leftHalf //允许用户对各个面指定不同边界层设置 { nSurfaceLayers 3; } "(road|motorBike_.*)" //输入面名称时支持正则表达式 { nSurfaceLayers 3; expansionRatio 1.2; finalLayerThickness 0.3; minThickness 0.1; } } //高级控制参数输入 featureAngle 180; slipFeatureAngle 75; nRelaxIter 5; ... }
5.6.1基本参数设置
snappyHexMesh边界层生成基本参数包含:相对值(relativeSizes)、边界层数(nSurfaceLayers)、膨胀比(expansionRatio)、最后一层厚度(finalLayerThickness)、第一层厚度(firstLayerThickness)边界层总厚度(thickness)、边界层最小总厚度(minThickness)以及nGrow。
用户可通过expansionRatio、finalLayerThickness、firstLayerThickness、thickness四项参数,选择其中两项指定边界层厚度。如果同时指定多个参数,则软件只会使用最后两个参数。因为snappyHexMesh划分边界层时是先挤出一定边界层厚度区域,再插入边界层。为提高边界层网格生成质量,边界层厚度控制参数选择finalLayerThickness优于firstLayerThickness,相对临近单元尺寸比值优于绝对值,即relativeSizes值true优于false。
基本参数详细解析如下。
relativeSizes
边界层基础参数中finalLayerThickness、firstLayerThickness、thickness与minThickness的参数值有两种定义方法。1、采用相对临近单元尺寸比值,2、直接由绝对值(单位m)定义。用户选用哪种定义方法通过设置relativeSizes确定。
命令示例如下所示:
addLayersControls { relativeSizes true; }
参数值为true:边界层厚度参数值为相对于邻近曲面上的体网格单元大小的比值。
参数值为false:边界层厚度参数值直接由绝对单位的值(单位.米)定义。
如下例所示:finalLayerThickness参数值分别采用绝对值参数和相对值参数。当设置绝对值时,边界层最后一层网格尺寸与邻近体网格尺寸无关;当设置为相对值参数时,边界层最后一层网格尺寸值与邻近体网格单元大小成比例关系。
边界层膨胀比(expansionRatio)
两个相邻层的厚度比,该值越大,各层间的高度差越大。调整膨胀比参数,不同膨胀比下边界层网格划分结果如下图所示:
边界层最后一层厚度(finalLayerThickness)
确保边界层最后一层网格不大于该值。调整最后一层网格的最大厚度,在不同厚度下边界层网格的划分结果如下如所示:
finalLayerThickness=0.7 finalLayerThickness=1
图3. 不同边界层最后一层高度对比图
边界层第一层的厚度(firstLayerThickness)
指定距离曲面最近的边界层的高度,确保边界层第一层网格不大于该值。调整第一层网格的最大厚度,在不同厚度下边界层网格的划分结果如下如所示:
注:此处厚度值为体网格相对值
边界层总厚度(thickness)
这指定了所有边界层的最大厚度。设置较大的边界层总厚度值会导致体网格收缩位移相应增大,体网格变形量增加将导致网格质量降低。当网格质量小于用户设置网格质量控制参数时,系统将取消此处边界层网格划分。
调整边界层总厚度,在不同厚度下边界层网格的划分结果如下如所示:
注:边界层总厚度值不宜大于五倍相邻体网格尺寸值。
最小总层厚度(minThickness)
这指定了所有边界层的总体最小厚度。若边界层挤出区域厚度小于该值,则该区域将不会生成边界层。
注:此图参数采用相对值,边界层总厚度控制到1,故当minThickness设置为2时边界层不会生成
最大取消边界层单元数(nGrow)
该参数指定未设置边界层的相邻面相交处边界层的过渡层数。这有助于将边界层过渡到特征边附近。
在边界层生成时,体网格需先沿表面法向向网格划分区域收缩指定厚度,有些特征边上存在未移动的节点,则包含该节点的表面单元也不会移动。通过设置nGrow值,指定此单元附近多少个单元不会移动,以保证该特征边附近网格贴体性及质量。
指定面设置边界层基本参数
snappyHexMesh中允许用户对各个表面设置不同的边界层基本参数。如果未指定,则应用全局基本参数。边界层的几何面名称指定于面加密不同,其名称包含几何体与面信息,例如:用户需对几何体box中的Face1面划分边界层,则边界层指定的面名称应该为box_Face1,而不是Face1。并且用户在指定面名称时支持正则表达式。
指定面边界层设置命令如下:
layers { box_Face1 { nSurfaceLayers 3; } "(box_Face1|box_side.*)" { nSurfaceLayers 3; expansionRatio 1.2; finalLayerThickness 0.3; minThickness 0.1; } }
边界层层数(nSurfaceLayers)
nSurfaceLayers该参数确定边界层层数,需在指定面设置边界层基本参数中输入,为强制性参数。
网格划分结果如下图所示:
5.6.2高级控制参数设置
表面网格最大纵横比(maxFaceThicknessRatio)
该参数指定了表面网格纵横比的最大允许值。当要在高度扭曲的单元上(特别是在角落)生成边界层时,纵横比高于此值的单元上边界层停止生成,以保证边界层网格质量。
建议值为0.5。
边界层最大面夹角(featureAngle)[°]
两个相邻面边界层网格划分时,软件可根据featureAngle值确定两个面相交边处体网格是否收缩,以确定边界层划分区域。当两个曲面之间的法向夹角(如下图所示θ角)小于参数featureAngle值时,允许两个曲面的相交边处体网格向域内收缩,形成边界层划分区域。用户可根据几何特征设置合适的featureAngle值,以确保边界层的生成范围。
下图显示了特征角为60度和180度时边界层生成的差异。在面夹角为90度区域,若featureAngle值小于面夹角时,则取消夹角处边界层划分。
图10. 不同最大面夹角参数设置对比图
注:为确保角落边缘处边界层生长,featureAngle可设置为180或更高值。但在大角度或较扭曲区域边界层质量会急剧下降,受网格质量控制影响,此处边界层也会无法生成。
边界层滑移角度(slipFeatureAngle)[°]
在早期版本snappyHexMesh添加边界层时,指定的面边缘的顶点已经固定。当边界层生成到面边缘处时,会在此处收缩。现若用户想保留在面边缘处的边界层效果,可以指定slipFeatureAngle参数,使边界层面边缘处顶点延边界面滑动,以保证边界层在边缘处的划分空间。例如:当需要划分边界层的面与其相邻面之间的角度大于slipFeatureAngle值时,则保留边界处边界层网格。否则,边界处边界层网格将收缩(如下图所示)。
注:建议使用70-80之间的最佳值来限制层的滑动,默认值为featureAngle的一半。
边界层终止面的缓冲单元数(nBufferCellsNoExtrude)
为边界层终止端创建缓冲收缩区,即逐渐降低边界层数。设置值小于0,则表示在终止端立即停止边界层。
边界层厚度平滑迭代次数(nSmoothThickness)
边界层网格生成前,软件需要根据投影厚度值收缩现有体网格,用户可通过nSmoothThickness值设置投影厚度值的迭代次数。软件通过迭代投影厚度松弛系数值(1-0)使体网格质量达到质量控制要求。
边界层曲面法线平滑迭代次数(nSmoothSurfaceNormals)
边界层网格生成前,软件需要根据曲面法线方向收缩现有体网格,用户可通过nSmoothSurfaceNormals指定曲面法线平滑迭代次数。该值越高,边界层网格间平滑性越好,但网格划分时间越长。建议值为1。
拾取中间轴点的角度(minMedianAxisAngle)
这指定用于拾取中间轴点的角度。建议值为90度。最新版本90度对应17x版本前的130度。
层厚度与中间轴长度的最大比率(maxThicknessToMedialRatio)
这指定了边界层厚度与中间轴长度的最大比率。当比率大于指定值时,层生长减少。建议值为0.3
体网格收缩迭代次数(nRelaxIter)
单步投影厚度值的迭代中,系统需根据投影厚度值计算体网格收缩松弛系数。用户可设置nRelaxIter参数指定该松弛系数迭代次数,该值越大越有利于提高体网格网格质量。建议值为5
体网格平滑迭代次数(nSmoothNormals)
体网格收缩时,用户可通过nSmoothNormals指定体网格间移动方向的迭代次数。该值越高,体网格间平滑性越好,但网格划分时间越长。建议值为3。
边界层添加的最大总迭代次数(nLayerIter)
这指定了整体边界层添加算法迭代次数。如果达到此迭代次数,边界层网格划分将立即停止,并保留最后一次迭代生成的边界层。建议值为50-60。
宽松质量控制标准的起始迭代次数(nRelaxedIter)
这指定了开始使用宽松网格质量控制的起始迭代次数。软件在划分边界层网格时会优先使用meshQualityControls中基础质量控制参数,检测网格是否满足要求。若边界层添加算法迭代次数达到用户设置nRelaxedIter参数值后,网格依然不能达到质量控制要求,则在此后的迭代中软件将采用用户设置的宽松质量控制标准值。参数建议值为20。