如果你和我一样,每天要和 Fluent Meshing 打交道,那你一定遇到过这种场景:全局尺寸给到0.5mm,算下来网格量五百多万,看起来数值也没问题,但一到弯管处,边界层一拉,圆弧面网格完全看不出弧度;或者更气人的是,两个壁面之间明明只差了0.2mm,表面网格没生成好,体积网格直接告诉你“无法闭合该区域”。这时候很多人的第一反应是全局尺寸调小,结果网格量一下子冲到两千万,算一步要半天,最后还不一定收敛。其实问题基本出在一件事上:你还没用 Add Local Sizing。
这个功能在水密工作流里不是锦上添花,而是决定网格成败的关键一步。水密工作流(Watertight Workflow)之所以叫“水密”,是因为它假设你手里的几何是封闭、无漏洞、可密封的实体或壳。在这样一个框架里,局部尺寸能让你在全局尺寸之外,针对特定曲线、面或者体单独设置网格大小。本文就围绕水密工作流中的 Add Local Sizing 操作,把参数逻辑、选择方式、实战场景和常见坑位都讲清楚,适合刚接触 Fluent Meshing 的新手,也适合那些想进一步优化网格分布的仿真工程师。
1. 为什么 Add Local Sizing 是水密工作流的品质分水岭
1.1 全局尺寸解决不了“局部矛盾”
先说一个最朴素的问题:全局尺寸到底在干嘛?Flunet Meshing 的全局尺寸会基于几何的曲率和相邻边距,自动生成一套从最小尺寸到最大尺寸的分布。听起来很智能,但它只能照顾“整体趋势”,照顾不了“局部意图”。打个比方,全局尺寸相当于你在装修时给整间屋子定了统一的筒灯间距,客厅够用,但到了狭长的走廊、楼梯转角,这个间距就明显不合理。
在 CFD 网格划分里,这种“局部矛盾”非常典型。比如一台换热器,整体尺寸可能有1米,但里面换热板之间的流道只有2毫米。如果全局最大尺寸按1米量级设置,2毫米的缝隙里根本不会有网格;如果全局最小尺寸按0.2毫米设置,整个模型的网格量又大到无法接受。正确做法是:全局尺寸维持一个合理的中等量级,比如5毫米,然后用 Add Local Sizing,只对那几条2毫米的流道做局部加密,让局部尺寸和全局尺寸各管各的,互不拖累。
还有一类情况属于“几何特征残留”。CAD 导入的几何里经常会有一些倒角、圆角、焊接痕迹,这些特征本身尺度很小,但对流动的影响却很关键。全局尺寸不会自动去分辨哪条圆弧是“装饰”,哪条圆弧是“导流结构”。你用局部尺寸把关键特征选出来,告诉求解器“这里给我足够的网格分辨率”,比盲目缩小全局尺寸高效得多。
1.2 Add Local Sizing 在水密工作流中的位置
水密工作流本质上是一个“两步走”的引导式流程:先画表面网格,再填体积网格。整个流程树的典型顺序是:导入几何、添加局部尺寸、添加全局尺寸、生成表面网格、描述几何体、更新边界、添加边界层、生成体积网格。
注意,Add Local Sizing 的入口排在“添加全局尺寸”之前。这一点很容易被忽略,但它很重要。因为局部尺寸要先定义“哪些地方需要特殊照顾”,接下来添加全局尺寸时,系统计算默认尺寸才能自动避开这些区域。如果你先设置完全局尺寸,再回头加局部尺寸,虽然也能用,但局部尺寸和全局尺寸之间的过渡关系处理起来会更别扭,有时候还会出现局部加密区域被全局自适应强制覆盖的情况。
另外,局部尺寸直接作用于表面网格。表面网格是整个体网格的基础,边界层的附着、体积网格的生成都要在表面网格之上进行。所以你在 Add Local Sizing 里做的每一个加密决定,会顺着流程一路影响到底。等到体网格生成完再发现某个局部区域网格不足,就只能回到最前面修改局部尺寸,然后重新走完整个流程,费时间不说,还容易因为重复操作引入人为错误。
2. 参数逻辑与选择方式:先把基础概念弄清楚
2.1 三种几何目标:Curves、Faces 和 Bodies
在 Add Local Sizing 面板里,第一个要面对的选择就是尺寸作用对象。水密工作流把几何分成三类:曲线、面、体。这个分类看起来简单,但选错对象是新手最容易踩的坑。
曲线(Curves)对应几何模型中的边线、交线、轮廓线,比如管道和管道的连接线、叶轮叶片的前缘线、倒角边缘线。对曲线设置局部尺寸,主要影响这条曲线附近的表面网格分布。适合处理那些“几何上很窄、又恰好是流动关键路径”的位置,比如分支管和主管相交的相贯线。
面(Faces)对应模型中的表面,包括外表面、内壁面、隔板面等。对面设置局部尺寸是最常用的操作,适合处理狭缝流道两侧的壁面、高温热源附近的壁面、需要精确计算壁面换热的区域。
体(Bodies)对应的是封闭的实体或流体域内部体积。对体设置局部尺寸,不会直接影响表面网格,而是在体积网格生成阶段控制实体内部的网格大小。比如燃烧室内部、混合器内部、换热芯体的整个容积区域,你可以通过体局部尺寸让内部网格加密,或者反过来让内部网格变粗。
建议你在开始设置之前,先确认当前选择类型是否和意图匹配。有人想加密某个面的网格,结果面板里选成了 Curves,选了半天的面根本没被识别,这就是选择类型没切换导致的。
2.2 Size Factor 与 Max Size 怎么配合
水密工作流的局部尺寸面板里,最常见的两个参数是尺寸因子和最大尺寸。这两个参数的关系可以用一句话概括:目标尺寸是先由尺寸因子推算出来,再由最大尺寸做上限约束。
尺寸因子是一个相对值,它乘以全局最大尺寸就得到局部目标尺寸。假设全局最大尺寸是2mm,尺寸因子设为0.5,那么局部区域的目标尺寸就是1mm。如果尺寸因子设为0.1,那就是0.2mm。所以,想要局部加密,尺寸因子就应该小于1;想要局部粗化,尺寸因子就大于1。
最大尺寸是一个绝对值兜底,用于防止某些意外情况把局部尺寸放大到不可控的程度。比如你算出来目标尺寸是1mm,但几何里有一条特别长的曲线,系统可能因为曲率检测让这条曲线上的网格尺寸往全局最大尺寸靠拢。这时候设置最大尺寸为1mm,就能把这条曲线上的实际局部尺寸锁死。反过来,如果你想让局部区域保持比较均匀的网格,也可以把最大尺寸设得接近目标尺寸。
另外,还有一个容易混淆的选项是“尺寸函数类型”。常见的是刚性(Rigid)和渐进(Progressive)。刚性表示该尺寸在整个选定几何上是恒定值,适用于间隙、狭缝这类要求高度均匀的区域。渐进表示从选定几何边缘向外逐渐过渡到全局尺寸,适用于局部加密后希望自然过渡到周围网格的情况。我个人的习惯是:在弯道、倒角这类需要保持表面形状的地方用渐进,在两壁面之间间隙、密封面这类需要严格尺寸控制的地方用刚性。
2.3 选择方式:框选、命名选择与 Capture
水密工作流里,为局部尺寸选择几何目标的方式主要有三种:直接框选、通过命名选择、使用图形窗口的 Capture 工具。
直接框选最直观,在图形窗口中把鼠标拖成一个矩形框,框住你要的所有面或曲线。这里要注意,框选默认是选择当前视图中所有落在框内的几何实体,如果模型很大且局部特征被遮挡,很容易把不该选的面也选进来。建议框选前先调整视角,让目标区域尽量置于正面,再配合“只选择可见表面”之类的过滤器。
命名选择适合那些需要在多个流程步骤里反复引用的区域。比如你在 CAD 里已经把换热器的进口段定义成了名字,或者你在 Fluent Meshing 里通过“选择面并创建命名选择”建立了自定义集合,那么 Add Local Sizing 可以直接调用这个命名集合,后续如果想调整选择范围,只需要修改命名选择本身,不用回到局部尺寸里重新选几何。
Capture 工具则是利用几何特征本身来捕捉目标。比如某条边线是由两个曲面相交形成的,你可以在靠近这条边线的位置点一下,系统会捕捉到这条完整边线,自动选中它。这个工具特别适合那些尺寸很小、手动框选很难精确选中的倒角边线或小孔边缘。实际操作中,我常常把旋转视角和 Capture 配合起来用,先转到目标特征足够大的角度,再点击捕捉,选中的准确率会高很多。
3. 实操环节:三个高频场景的完整设置过程
3.1 管道分支连接处,用曲线局部加密
先看一个我经常遇到的场景:主管直径20mm,支管直径5mm,全局尺寸设为2mm。由于支管和主管相交处存在一个很小的相贯线,而且这里的流动方向发生剧烈变化,如果不加密,表面网格会在大曲率区域出现明显畸变。
操作时,我把 Add Local Sizing 的类型切换为 Curves,然后用 Capture 工具点击相贯线的任意一段,确认整条环形线被选中。尺寸因子先给到0.2,最大尺寸设为0.5mm,尺寸函数类型选择渐进。这一步的目的是让相贯线附近的网格细化到0.4mm量级,同时向外平滑过渡到全局2mm。
设置完成后,在生成表面网格之前,我习惯先打开局部尺寸的“显示”功能,确认这条相贯线周围出现了预期的尺寸分布云图。如果云图上目标尺寸颜色范围和预期不符,马上调整尺寸因子,而不是等网格生成完再看结果。
生成表面网格后,重点检查相贯线周围的网格尺寸是否接近0.4mm,远处是否逐步放大到2mm左右。如果发现过渡太快,可以减小尺寸因子,或者把渐进过渡的区域范围稍微扩大。实际经验是:这种连接处只要保证相贯线上有至少8到10个节点,下游的分离涡捕捉就会好很多。
3.2 换热器窄缝流道,用面局部尺寸处理
第二个场景是两片换热板之间的缝隙只有0.3mm,但板本身尺寸很大。全局尺寸如果按3mm设置,这个缝隙肯定无法生成表面网格。体积网格也会因为缝隙处表面网格缺失而报错。
对这类场景,我最常用的做法是先把类型切到 Faces,然后用框选工具,同时选中缝隙两侧的壁面。注意,一定要把相向的两个面同时选中,而不是只选一侧。因为缝隙内的表面网格需要两侧壁面共同配合,才能形成可以填充体网格的封闭空间。如果只选了一侧,另一侧仍然使用全局3mm的尺寸,缝隙里依然会出现网格断裂。
尺寸因子这里我一般给到0.1左右,最大尺寸直接设成0.15mm。0.3mm的缝隙,单侧网格尺寸0.15mm,意味着宽度方向能放下两层网格,这是保证流通特征不被抹掉的最低要求。如果想要更保守,可以把局部尺寸压到0.1mm,让缝隙宽度方向上有三层网格。
还需要提醒一点,如果缝隙周围还有其他小倒角或台阶,这些结构也会影响缝隙内的实际通流面积。建议在设置局部尺寸前,用测量工具确认一下缝隙最小处的真实间距,不要只看设计值。
3.3 燃烧室容积,用体局部尺寸控制内部网格
第三个场景是燃烧室内部的反应流动。表面网格已经能覆盖壁面,但燃烧室中心区域的化学反应需要较密的体积网格来捕捉火焰前锋和温度梯度。如果只靠表面网格加密,内部体积网格可能还是很粗,因为体网格尺寸由体积填充参数决定。
这时候我会在 Add Local Sizing 里选择 Bodies,然后用框选把燃烧室的流体域体积选出来,或者直接通过命名选择选定整个内部域。尺寸因子设置为0.5,最大尺寸设为1mm,尺寸函数类型选择刚性。这样可以保证燃烧室内部网格大小基本一致,不会在中心区域出现突然放大的粗网格。
体局部尺寸对表面网格不产生直接影响,所以设置完以后表面网格可能看不出明显变化,这是正常的。要验证效果,需要在生成体积网格后查看体网格的截面图,观察燃烧室中心位置网格尺寸是否达到预期。很多新手看不懂这一步,以为局部尺寸没生效,其实只是看错了对象。
4. 容易忽略的协同项:局部尺寸不只是“单独加密”
4.1 局部尺寸和全局自适应是叠加关系
很多人在 Add Local Sizing 里设完参数就觉得万事大吉,其实它和全局尺寸中的曲率检测、接近度检测是叠加生效的。系统最终采用的局部实际尺寸,是局部尺寸和全局自适应尺寸两者中更细的那个。
举个例子,全局尺寸中开启了曲率检测,那么一个大圆弧表面会自动产生比全局最大尺寸更细的网格。如果你在这个圆弧面上又设置了一个尺寸因子为0.6的局部尺寸,最终网格尺寸不会简单地等于0.6乘全局最大尺寸,而是会进一步参考曲率检测的细化结果,取二者中的更小值。这就是为什么有时候你设置了局部尺寸,但最后生成的网格比预期还要细,因为曲率检测也在同时起作用。
理解这一点后,我们就能有意识地去控制它。如果你想严格限制某个区域的网格尺寸,建议在局部尺寸面板中把最大尺寸设置得和期望值一致,并考虑关闭该区域的全局自适应影响,或者选择刚性尺寸函数,避免曲率检测“越帮越忙”。
4.2 和边界层尺寸配合的常见误区
网格划分到“添加边界层”这一步时,局部尺寸的影响仍然存在,但很多问题也在这里暴露。边界层的总厚度由第一层高度和层数决定,如果你在缝隙两侧都设置了局部尺寸,让壁面网格变得很细,但边界层的总厚度依然大于缝隙宽度的一半,那么边界层就会在缝隙中间重叠,最终导致负体积网格。
处理办法有三种:一是把边界层总厚度限制在缝隙宽度的三分之一以内;二是降低层数,比如从15层降到10层;三是利用 Fluent Meshing 边界层面板里针对狭窄通道的自动收缩功能,让边界层厚度在缝隙处自动变薄。
我在实际项目中更倾向于第三种,因为既保持了壁面附近的边界层分辨率,又不会破坏缝隙内的网格结构。边界层设置完以后,一定要在生成体积网格前检查“边界层重叠”相关的警告信息,如果出现提示,优先调整边界层总厚度,而不是反过来去改局部尺寸。
4.3 尺寸过渡对收敛的影响
局部加密并不是越剧烈越好。一个局部区域网格尺寸为0.3mm,相邻区域网格尺寸为5mm,两者之间如果没有过渡,就会形成一个巨大的尺寸突变。这种突变在表面网格上也许还能接受,但在体积网格中会制造出质量很差的单元,直接影响求解器的收敛性和精度。
水密工作流中的“渐进”尺寸函数就是为解决这个问题存在的。通常情况下,相邻网格尺寸的放大比例最好不要超过1.3到1.5倍。如果发现局部加密区周围出现了明显的尺寸断层,可以把尺寸函数改成渐进,让加密的影响范围稍微外扩一些,或者适当调高局部尺寸因子,让过渡更平缓。
这里有一个经验数值可以参考:如果你要在一个局部区域实现0.5mm的网格,而周围是5mm的网格,那就不要指望一步到位,最好在中间再增加一层局部尺寸,比如先设一个1.5mm的中间过渡区,再从1.5mm过渡到5mm。虽然步骤多了一些,但体积网格质量会稳很多。
5. 常见问题与排查实录
5.1 问题速查表
我把自己用 Fluent Meshing 做水密工作流时遇到的典型问题整理成了一张表,方便你按症状查找原因和解决办法。
| 症状 | 可能原因 | 解决办法 |
|---|---|---|
| 局部尺寸设置了,但网格大小没变 | 选择目标类型错误,或者根本没有选中几何对象 | 切换 Curves/Faces/Bodies 类型,重新框选并打开显示确认选中区域 |
| 窄缝附近出现空洞或表面网格缺失 | 局部尺寸仍然大于缝隙宽度,两边壁面没有同时加密 | 将缝隙两侧面同时选中,局部尺寸设为缝隙宽度的1/3到1/4 |
| 边界层生成后缝隙被堵死 | 边界层总厚度大于缝隙一半 | 限制边界层最大厚度,或降低层数,开启缝隙自动收缩 |
| 体积网格质量差,残差剧烈波动 | 局部加密区和周围尺寸过渡太陡 | 改用渐进尺寸函数,增加中间过渡局部尺寸 |
| 局部尺寸加密后网格量爆炸 | 加密范围过大,或者用了刚性尺寸函数 | 缩小选择范围,改用渐进,适当调大尺寸因子 |
| 小倒角、小圆角选不中 | 特征太小,框选框不住 | 用 Capture 工具点击特征附近,旋转视角放大后再选 |
| 设置完局部尺寸后没有提示错误,但效果和预期完全不同 | 全局接近度检测也在细化该区域,两者叠加导致尺寸过小 | 检查全局尺寸中的接近度设置,必要时关闭或用最大尺寸限制 |
5.2 一次实锤:从残差曲线倒推网格问题
有一回我做某个内部窜流问题,计算一直不收敛,残差曲线在某个迭代步后始终不掉下来。当时我第一反应是湍流模型设置有问题,改了边界条件、换了求解格式,折腾了很久都没有效果。后来回到网格阶段,我把关注区域的截面网格调出来一看,发现目标位置的实际网格尺寸比预期大了一倍多。
问题出在哪?我在 Add Local Sizing 里给壁面设置了局部尺寸,但当时选的是 Faces,而目标区域的核心是一个狭窄通道,通道两侧壁面确实被选中了,可是通道底部的那个小圆弧曲线没有单独处理。由于曲率检测只对圆弧部分做了有限的细化,导致通道底部和侧壁的网格尺寸相差太大,边界层在底部区域出现扭曲,这才导致数值不稳定。
后来我在 Add Local Sizing 里补了一条局部曲线尺寸,专门针对通道底部的圆弧线,再把尺寸因子压低,重新生成表面网格和体积网格,残差曲线很快就掉到了收敛标准以下。这次排查让我养成了一个习惯:只要局部区域包含明显的曲线特征,我一定会顺手给曲线也设置一个局部尺寸,而不是只依赖面局部尺寸。
5.3 排查思路:先看几何,再看网格,最后才怀疑参数
遇到局部尺寸相关的异常,不要急着调参数。我建议按下面的顺序排查:
先检查几何本身是否水密。在水密工作流里,几何必须封闭、无重叠面、无小缝隙。如果模型本身有破面,局部尺寸再正确,表面网格也无法生成,更不用说后续体网格了。导入几何后用“几何检查”或者“修复几何”功能走一遍,确认没有自由边和坏面。
再检查局部尺寸作用对象。打开图形窗口里的尺寸显示,查看你设置的那条曲线、那个面或那个体上是否出现了预期颜色的尺寸分布。如果没有,说明选择本身就是空的,或者对象类型不对。
最后再回头检查尺寸参数。通常我会先确认尺寸因子量级有没有设错,再看最大尺寸是不是设成了一个比目标尺寸还小的数值,最后确认尺寸函数类型有没有选对。刚性尺寸函数虽然看起来“严格”,但如果用在很大的区域上,会让网格量剧增,反而得不偿失。
6. 个人用下来的几点经验补充
关于 Add Local Sizing 的细节,我再补充几个不太会写在官方文档里的经验。
第一个经验是:尽量给每个局部尺寸起一个有意义的名字。水密工作流允许你创建多个局部尺寸对象,如果模型大,局部尺寸可能有好几十个,名字都叫“Local Sizing 1”“Local Sizing 2”,到后面根本分不清谁是谁。我一般习惯用区域加类型的命名方法,比如“inlet-throat-curve”“heat-wall-face”“chamber-core-body”,这样无论是自己检查还是项目交接,都能一眼看懂。
第二个经验是:不要过度依赖“自动计算尺寸”按钮。水密工作流里有一个自动计算尺寸的功能,可以根据几何自动给出全局尺寸建议。这个建议值通常偏保守,直接用来生成网格问题不大,但离高质量网格还有距离。真正合理的网格尺寸往往需要结合物理问题来判断:关注边界层就需要算第一层高度,关注涡街就需要在尾迹区域加密,这些都不是自动计算能替代的。
第三个经验是:保存网格划分项目,不要只保存最后的网格文件。网格画完以后,如果你发现体网格质量有问题,想调整局部尺寸重新生成,有水密工作流的项目文件就能快速回到之前的步骤,改一个参数再往下走。如果没有保存项目文件,就只能重新导入几何,从头再来一遍,非常浪费时间。
说到最后,Add Local Sizing 这个功能真正考验的不是你会不会点那几个参数,而是你能不能准确判断出哪些区域该加密、哪些区域该粗化、加密到什么程度、过渡怎么控制。我见过不少同学一开始把网格画得密密麻麻,总觉得越密越精确,结果计算时间翻了十几倍,精度提升却不到一个百分点。网格划分从来不是越细越好,而是该细的地方细,该粗的地方粗。把 Add Local Sizing 用好,就是实现这种“按需分配”最直接的手段。