个人学习记录。
原创内容请查看以下链接。
参考
网格划分篇-SnappyHexMesh (之一)
网格划分篇-SnappyHexMesh(之三)
个人经验
- 网格贴合 snap 中的一些迭代参数并非越大越好,有时迭代次数太多反而容易产生差质量网格,特别是棱角较多且分明的结构,基础网格、摆放位置和方向对网格质量的影响也很明显。针对具体几何体,需不断调试优化参数。
- 可与 topoSet 和 refineMesh 工具配合使用,实现局部区域、部分方向的网格细化。
- “ 粗背景网格 + 多 level ” 的按方案要比 “ 细背景网格 + 少 level ” 的方案更容易收敛到质量较高的网格划分,后者甚至会在迭代中出错。
snappyhexmesh用于从三角化曲面或简单基本形状的输入自动创建高质量的三维十六进制主网格。
特点
完全并行执行
基本网格以串行方式创建,然后分发到n个处理器
真正的并行性能取决于网格的组成,但在复杂的几何结构上可以快速创建数以千万计的单元
通过ptScotch和动态负载平衡实现最佳分解,从而提高性能
表面、体积、边缘细化
基于输入几何曲率的曲面精化
基于基本体对象或其他导入的几何体的体积求精(内部/外部/距离)
基于eMesh描述的边缘细化
特征边缘和表面细节保护
在边、曲面和体积优化和特征捕捉阶段创建的自动曲面网格
用户提供STL、OBJ或NASTRAN曲面网格文件
曲面细节由曲面几何细节和局部单元大小控制
分区网格
允许为源条款创建cellZones。例如 多孔介质,MRF和其他fvOptions
通过AMI修补程序自动生成耦合,实现共轭传热和/或动态网格情况的多区域网格划分
墙层附加
为了更好地模拟近壁现象。例如 边界层形成
要指定的近壁第一单元高度,总层厚度,层数等
质量保证的最终网格将在OPENFOAM运行
生成流程
1. 使用blockMesh工具(或任何其他六面体网格生成器)创建背景网格
2. 使用surfaceFeatureExtract实用程序提取表面上的特征
3. 设置snappyHexMeshDict输入字典
4. 以串行或并行方式运行snappyHexMesh
背景网格(blockMesh)
全局参数(Global)
snappyHexMesh采用自上而下生成网格的方法,即先生成求解域内体网格,在将体网格拟合到几何表面。
全局性参数设置主要包含全局网格细化控制参数(castellatedMesh-Controls)与面贴合参数设置(snapControls)。
全局网格细化参数
全局网格细化参数在castellatedMeshControls中设置,其目的为细化背景网格,通过细化背景网格以使几何特征与几何表面上拥有一定网格量,以提高几何特征捕捉的准确性。同时通过参数设置,保证网格细化时尺寸变化尽量平缓。
完整命令输入示例如下:
castellatedMeshControls
{
maxLocalCells 10500000;
maxGlobalCells 80000000;
minRefinementCells 1;
maxLoadUnbalance 0.2;
nCellsBetweenLevels 3;
resolveFeatureAngle 30;
allowFreeStandingZoneFaces false;
locationInMesh (0 0 0);
features
( … );
refinementSurfaces
{ … }
refinementRegions
{ … }
}
其中features、refinementRegions、refinementSurfaces为局部网格细化功能,会在后面章节详细讲解。本章节主要针对网格细化时全局性优化算法控制参数。
maxGlobalCells 全局最大网格量 网格细化过程中的最大网格数量。避免划分网格量太大,导致计算机内存溢出。当网格量超过此值时,细化过程立即终止。此时,局部细化功能可能终止运行(例如,未执行某些体域或面域的细化)。
注:其最大网格量是在网格创建步骤中,未去除计算域外单元时的总单元数。最终生成的单元总数可能比此值小。
maxLocalCells 单核最大网格量 该参数主要应用于网格并行计算,指定了细化网格过程中每个处理器处理的最大数量网格数。设置合理的单核最大网格量可极大地提高网格并行计算效率,有助于平衡每个处理器的网格计算量。若太小将导致处理器间迭代次数增加,计算效率降低。如果单核处理实际单元数量大于该设定参数,则网格分配算法由平衡细化后单元数控制(默认算法)改为加权平衡细化前单元数控制。固设置该参数时请保证一定的富余量,经常重新平衡每个处理器计算量将减慢网格生成过程。
注:在大型集群网格并行计算时,从最优单核计算效率上考虑,单核单线程网格计算量可控制在3-5十万个网格之间。
maxLoadUnbalance 最大负载平衡参数 该参数主要应用于网格并行计算。用户可通过设置该值,以允许各个处理器间网格计算负载一定程度上不均衡。当该参数值为0时,即强制负载平衡,即各处理器间处理的网格量严格保持单元总数/计算核数。较低的值(例如0)可能会导致系统频繁的均衡网格负载量。而参数值设置为1时,则完全禁用网格均衡操作。
minRefinementCells 最小细化单元数 该参数指定了需细化特征的最小单元数。若特征上网格单元数量小于该参数,则停止对其细化。例如:进行表面细化算法时,软件可能会对小特征面上几个单元网格进行大量细化迭代,占用了较多计算资源,而细化后的网格质量并不理想。用户可以通过该参数,停止其细化迭代。
注意:除非要细化表面上没有网格单元,否则至少要执行一次迭代。
nCellsBetweenLevels 缓冲层数 snappyHexMesh网格拆分采用八叉树法,在网格等级相差较大区域,网格尺寸大小变化比较剧烈。该参数指定不同细化级别之间的缓冲区体网格层数,使网格大小变化更平缓,该参数值必须大于或等于1。若用户设置参数值为1,则表示不添加过渡区域。越大的值可使得网格大小过渡越平缓,但将导致网格量增加。
注:建议参数值设为3,既保证了不同单元等级间网格过渡性,也将网格数量控制在可接受范围内。
resolveFeatureAngle 自动检测角 若用户想自动加密相交面、边以及曲率较大的面、边时,可使用resolveFeatureAngle参数。当曲率变化角超过该参数值时,特征区域网格使用最大面细化等级,而低于此角度的特征均采用最小面细化级别。默认参数值为30,参数值设置为360时,表示关闭此功能。
该参数生效的前置条件:1、面细化参数中最小和最大细化等级需不同。2、面贴合过程中特征捕捉需采用隐式方法。
locationInMesh 网格域控制点 snappyHexMesh网格划分方法需要用户先提供一套背景网格,然后根据用户导入的封闭几何文件划分网格。在此过程中,用户可通过设置网格域控制点(locationInMesh)参数,指定需要保留背景网格表面与封闭几何表面之间的网格,还是封闭几何内部的网格。
保留区域网格中需包含指定的参数点,该点的位置不能和网格单元的面或边重合。
allowFreeStandingZoneFaces 允许有独立面 该参数定义是否允许几何中有独立的面存在。若值为false,则表示在面加密(refinementSurfaces)中用户指定的faceZones仅位于相应cellZones的边界上,作为不同域之间交界面。若值为true,则允许此faceZones作为独立面域(例如:挡板界面等)。如果用户没有指定faceZones,则该参数不生效。
features 特征边
定义特征边文件(.eMesh),并且指定特征边的细化等级。软件根据用户设置的参数对特征边进行细化,以提升几何特征边的捕捉成功率。特征边可通过surfaceFeatures工具来提取。
refinementSurfaces 面加密
面加密是针对与几何表面相交的体网格进行加密,以保证后续面贴合的准确性。面加密相关参数设置包括几何体名称、细化等级(Level),最小、最大细化等级(levelMin, levelMax)。并允许用户依据几何表面指定面域(faceZone ),以及依据封闭几何面指定体域(cellZone )。
面加密中,不仅可以对几何所有表面进行初步面加密,也可以针对特定面网格进一步细化。
初步整体面加密时,只需在几何名称下设置参数level,命令示例如下:
refinementSurfaces
{
lmt_logo
{
level(5 5);
regions { }
}
}
针对几何中某个特征面进行面加密设置,参数如下图所示:
refinementSurfaces
{
lmt_logo
{
level(5 5);
regions
{
Face_12//(这个面设如何定义的?)
{ level(6 6) }
}
}
}
面加密(refinementSurfaces)
面贴合(snapControls)
面贴合是将体网格节点移动到几何表面上,贴合体网格中锯齿状表面。软件优先保证网格达到最低质量标准,其次才考虑网格的贴体性。
参数功能包含:控制体网格贴合到几何面上的迭代次数nSolveIter、捕捉面特征距离tolerance等。命令输入示例如下:
snapControls
{
nSmoothPatch 5;
nSmoothInternal 5;
tolerance 2.0;
nSolveIter 30;
nRelaxIter 5;
nFeatureSnapIter 10;
implicitFeatureSnap false;
explicitFeatureSnap true;
multiRegionFeatureSnap false;
…
}
tolerance 捕捉点最大相对距离
该参数指定贴合算法中捕捉与特征面相关网格节点的最大相对距离,实际捕捉距离为tolerance参数值乘以相邻体网格尺寸。参数值必须大于或等于1,如果值太低,则可能无法使偏差较大的网格节点移动到几何表面上。较高的值有助于增加几何的捕捉范围,但如果参数值设置过高,则有可能捕捉到与表面无关的网格节点。建议值为2-5之间。
nSolveIter 网格贴合最大迭代次数
该参数指定了网格贴合算法的最大迭代次数。较高的值会提高网格的质量,网格一致性更好,但网格划分时间会更长。简单模型可以将该参数值设置为100,若贴合后网格质量不太理想,可尝试将该参数值增加到300。
nSmoothPatch 面平滑迭代次数
该参数指定了表面上网格贴合的平滑迭代次数。增加迭代次数可以使曲面上网格平滑、贴合性更好,且能降低曲面上网格的歪斜率,但可能导致曲率突变特征(如直角等)弱化。参数值设置为0,表示保留初始网格外形。建议值为5。
nSmoothInternal 体网格平滑迭代次数
在不同细化等级网格间,软件采用多面体网格过渡。初始的多面体网格将产生30度以上的非正交性。通过使用内部网格平滑处理的迭代,以减小细化过渡区域多面体网格的非正交性(如下图中红框标识部分)。
在执行网格平滑迭代时,边界面网格平滑迭代nSmoothPatch将与内部体网格平滑迭代nSmoothInternal联合使用。平滑迭代顺序为优先执行一次面平滑迭代(nSmoothPatch),再执行一次体网格平滑迭代(nSmoothInternal),以此循环。若用户设置nSmoothInternal参数值大于nSmoothPatch值时,平滑迭代次数统一采用nSmoothPatch参数值。默认值为零,表示禁用体网格平滑迭代。使用此功能时,建议参数值与面平滑迭代(nSmoothPatch)参数值一致。
nRelaxIter 贴合松弛迭代次数
该参数指定贴合过程中松弛迭代次数,用以消除质量较差的单元或网格节点。如果迭代完成后网格仍存在质量较差单元,则用户可以尝试增加此迭代次数,较高的值将确保更好的网格质量,但会花费更多计算时间。建议值为5-8之间。
features 特征捕捉方法
在表面贴合步骤中,需保证网格节点捕捉到几何特征。通常表面贴合过程中,点只需沿垂直于表面的方向捕捉特征。但在边缘的位置捕捉方式更复杂,需要更多的迭代次数。SnappyHexMesh提供了两种特征捕捉方法,显示(explicitFeatureSnap)与隐式(implicitFeatureSnap)特征捕捉。用户通过输入true或者false值,来开启或者关闭此功能。
其中显示特征捕捉方法需要用户自定义特征边文件(.eMesh),并且指定特征边的细化等级(通过castellatedMeshControls子字典中features参数指定)。软件根据用户设置的参数对特征边进行细化,以提升用户关注几何特征边的捕捉成功率。
隐式方法不需要用户提取几何特征边,其特征识别自动化程度优于显示特征捕捉方法。它使用全局细化参数中resolveFeatureAngle参数识别曲面几何特征(例如:面的相交线、曲率变化较大的曲面特征)。但在尖角特征或者挡板界面处,显示方法捕捉特征效果优于隐式方法。
现通过以下案例来展示两种捕捉方式的区别,将方盒模型顶面改为带较高曲率变化的曲面(如下图几何模型展示),其用户自定义几何特征线(.eMesh文件)如下图所示。
nFeatureSnapIter 特征边捕捉迭代次数
该参数指定了特征捕捉迭代次数,以将网格点捕捉到表面边缘。如果在nFeatureSnaplter迭代后局部特征区域网格没有达到足够的质量标准,则取消该区域特征边捕捉并恢复到之前状态。未指定该参数,特征捕捉功能将被禁用。建议参数值为10。
nFaceSplitInterval 面拆分迭代
当系统执行完特征边捕捉迭代步骤后,若网格边缘与特征边未完全对齐,则有可能在特征边处网格产生凹面。从而导致在添加边界层时,其投影体网格的非正交性增大。如果体网格不满足质量要求,则取消该处边界层生成。用户可以尝试使用nFaceSplitInterval参数优化对齐特征边处网格。需注意该迭代为间隔若想进一步提高边界层覆盖率,可在addLayerControls字典中配合使用layerTerminationAngle和detectExtrusionIsland参数。
nFaceSplitInterval参数默认值为-1(禁用),使用建议参数值设置为特征边捕捉迭代(nFeatureSnaplter)次数的一半。
multiRegionFeatureSnap 多域特征捕捉
该参数用于捕捉多域网格间的特征面,这对于具有多个区域(例如流体区域和固体区域)的网格进行共轭传热模拟或类似操作很重要。该参数生效的前置条件为采用显示特征捕捉方法explicitFeatureSnap。使用该参数时,它会加强特征面两边网格贴合,即内部区域和外部区域,这可能会导致特征面处网格歪斜率上升。用户通过输入参数值true或者false,来开启或者关闭此功能。