4. 三维网格划分:四面体、六面体与棱柱/金字塔网格
各位同学,今天我们来聊聊三维网格划分。说实话,这是CFD里最考验耐心和经验的环节。我见过太多人,模型建得漂亮,求解器设置也到位,结果网格一塌糊涂,算出来的东西根本没法看。所以,咱们得把这块硬骨头啃下来。
4.1 四面体网格生成
四面体网格,说白了就是用四面体(像三棱锥)把空间填满。它最大的好处是自动化程度高,几乎能处理任何复杂的几何形状。你想想看,那些弯弯绕绕的管道、奇形怪状的阀门,用四面体网格,一键生成,多省事。
4.1.1 Delaunay 方法
Delaunay 方法,我个人觉得是四面体网格里最优雅的一种。它的核心思想很简单:生成的四面体要尽可能“饱满”,避免出现那种又扁又长的“瘦”四面体。为什么?因为瘦四面体在计算时,数值误差会放大,甚至导致求解发散。
具体怎么做呢?先在一堆点云里,构建一个初始的“大包围盒”,然后逐个插入新点。每插入一个点,就检查并重新连接周围的四面体,确保满足 Delaunay 准则——也就是任意一个四面体的外接球内,不包含其他点。
我个人的经验: Delaunay 方法生成的网格质量通常不错,但边界附近的网格需要特别留意。我曾经在一个复杂的发动机进气道项目里,用 Delaunay 方法生成的网格,边界层处出现了不少“瘦”四面体,导致壁面函数计算不准。后来我手动加密了边界附近的点,才解决了问题。
4.1.2 八叉树方法
八叉树方法,名字听着唬人,其实思路很直观。想象一下,你有一个大立方体,里面装着你的模型。如果这个立方体里既有固体又有流体,那就把它切成八个小立方体。哪个小立方体里还是混合的,就继续切。一直切到每个小立方体里要么全是流体,要么全是固体,或者小到不能再切为止。
这个方法的好处是速度快,内存占用小。特别适合那种大尺度、多尺度的流动问题,比如风场模拟、城市热岛效应等。
避坑指南: 八叉树方法生成的网格,在切割边界处容易出现“阶梯状”的锯齿。我曾经做过一个机翼绕流,用八叉树方法生成的网格,机翼前缘的网格质量很差,导致升力系数计算偏差了15%。后来我不得不对机翼表面进行局部加密,并用了平滑处理,才把结果拉回来。
4.2 六面体网格生成
六面体网格,就是咱们常说的“方块网格”。在CFD里,六面体网格是公认的“黄金标准”。为什么?因为六面体网格的数值精度高,计算效率也高。同样的计算资源,六面体网格能算得更准、更快。
但六面体网格的生成,就没那么自动化了。它需要你对几何模型有深刻的理解,甚至需要手动分割。
4.2.1 扫掠法
扫掠法,是我最喜欢用的六面体网格生成方法。它的原理很简单:把一个二维网格,沿着一条路径“扫”过去,生成三维网格。比如一根直管,你可以在管口画一个二维四边形网格,然后沿着管子的轴线扫过去,就生成了六面体网格。
扫掠法要求几何模型是“可扫掠”的。说白了,就是模型要有一个“源面”和一个“目标面”,而且这两个面之间的形状变化不能太剧烈。
我建议: 如果你的模型是管道、弯头、换热器这类“拉伸体”,优先考虑扫掠法。我做过一个汽车排气管的项目,整个模型就是用扫掠法生成的,网格质量非常好,计算收敛得也快。
4.2.2 多块法
多块法,也叫“分块法”。它的思路是:把复杂的几何模型,分割成若干个简单的、规则的“块”。每个块单独生成六面体网格,最后再把它们拼接起来。
这个方法非常灵活,几乎能处理任何复杂的几何形状。但代价是,分块工作需要大量的手动操作。你需要对模型进行切割、映射、关联,非常考验空间想象力和耐心。
我记得有一次,做一个飞机发动机短舱的网格。那个模型结构复杂,有进气道、风扇、燃烧室、尾喷管。我花了整整两天时间,把模型分成了20多个块,每个块都单独生成六面体网格。虽然过程很痛苦,但最终生成的网格质量极高,计算结果和实验数据吻合得很好。
注意: 多块法生成的网格,在块与块的交界面上,必须保证网格节点一一对应。否则,计算时会出现“通量不守恒”的问题,导致结果错误。我曾经因为疏忽,两个块的交界面网格节点没对齐,算出来的流量差了30%。从那以后,我每次分块都会仔细检查交界面。
4.3 棱柱/金字塔网格
棱柱网格和金字塔网格,是两种“过渡型”网格。它们通常不单独使用,而是和四面体、六面体网格配合,起到“桥梁”作用。
4.3.1 棱柱网格
棱柱网格,说白了就是在壁面附近,生成一层层的“三棱柱”网格。它的主要作用是捕捉边界层。因为边界层内的流动梯度很大,需要高分辨率的网格。棱柱网格可以沿着壁面法向拉伸,在保证网格质量的同时,大大减少网格数量。
我个人的习惯是,在壁面附近生成5-10层棱柱网格,第一层高度根据y+值确定。这样既能准确捕捉边界层,又不会让网格数量爆炸。
4.3.2 金字塔网格
金字塔网格,是用来连接四面体网格和六面体网格的。比如,你的模型主体是六面体网格,但局部复杂区域用了四面体网格。这两种网格的节点分布不一样,直接连起来会出问题。这时候,金字塔网格就派上用场了。它可以把四面体的三角形面,过渡到六面体的四边形面。
我曾经: 在一个多尺度流动项目中,主体区域用六面体网格,局部小孔用四面体网格。中间就是用金字塔网格过渡的。效果很好,计算稳定,没有出现任何数值振荡。
知识体系总览
为了让大家更直观地理解本章的知识结构,我画了一张图。你可以把它当作一个“导航图”,随时回来查阅。
好了,关于三维网格划分,四面体、六面体、棱柱和金字塔网格,咱们就聊到这儿。记住,没有最好的网格,只有最合适的网格。多动手,多总结,你也能成为网格划分的高手。
公众号:蓝海资料掘金营,微信deep3321