OpenFOAM-v2006重叠网格挖洞问题研究以及overset代码解析(六)markBoundary函数

致看到这里的读者:我写这些博客是为了督促自己做好笔记,记录学习的过程。我知道,人不是完美的,对一些知识的学习也不能做到百分百正确地掌握。我每一天都会发现自己的错误,并为之而进步。如果前面的博客有什么不对的地方,也请私信或者qq我,我们一起讨论,不胜感激!

前面几篇博文主要关注OpenFOAM中重叠网格的挖洞机制,今天学习挖洞之前的一个函数MarkBoundary:

 

它的作用是// Mark all voxels that overlap the bounding box of any patch,即标记与任何边界边框相重叠的所有体元。在这个函数体内,会先将所有体元的patchType标记为OTHER,再进行判定来标记PATCH或OVERSET。两者相类似,其中标记PATCH的代码如下:

其中的判定依据是(!fvPatch::constraintType(fvp.type()),这里constrainType前面也有讲过,可以简单理解为overset那一类。判定为否,也就是说除了overset的那一类边界,都会进入到判定体内,然后进行标记。overset的标记段如下:

这里判定依据是isA<oversetFvPatch>(fvp),isA<Type>是OpenFOAM里判断某数据的结构是否为Type的一个bool类型函数,这里显然是判断是否为overset的。为什么不用上面的那个constraintType呢?因为constraintType还有其他的非overset类型的边界条件。

在标记的过程中,有两个对象的类型进行了标记,分别是overall patch types和voxel mesh:

patchCellType是全局的体元类型列,其大小为mesh_.nCell(),也就是说整个网格量,包含了背景网格和重叠的网格。voxel mesh则是其中的某个part中的体元。bb是这一个zone对应的边框,faceBb则是每一个边界上体元的边框。如果faceBb进入到bb的范围之内,那么bb中与faceBb对应重叠的体元则会被标记。标记需要用到fill函数:

这个函数和overlaps是差不多的,都根据边框范围来进行操作。 

综合来说,markBoundary这一函数是先将各部分网格边界上的体元进行一次标记,在这一过程中,即使是内部网格(与边界不接壤),如果它和某一层网格的特定边界相重合,那么这个网格也会别标记。需要注意的是,这是对于patchType进行的,和markHole的cellPatchType是不一样的。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片