1. 网格划分在WB仿真流程中的地位:为什么它是精度的分水岭
做CAE仿真的人常说一句话:网格分得好,计算差不了;网格分得糙,结果全白搞。这话虽然有点绝对,但用在ANSYS Workbench(以下简称WB)里基本成立。我见过太多刚入门的工程师,花了两周建好几何模型,又花了一周设置好边界条件和载荷,结果一求解就报错,或者算出来的应力云图怎么看都不对劲。最后翻来覆去找原因,问题竟然出在最不起眼的网格上——有的地方网格太疏,应力集中区域被"糊"过去了;有的地方网格畸形严重,导致刚度矩阵奇异,计算直接发散。
网格划分的本质,是把连续的几何模型离散成有限数量的单元和节点。这个离散化过程直接决定了三件事:第一,求解精度——单元越多、越规整,数值解越逼近真实解;第二,计算成本——单元数量翻倍,求解时间往往不止翻倍;第三,收敛性——网格质量太差会让非线性求解器寸步难行。WB之所以把网格划分模块做得如此细,就是因为它是整个仿真流程里"性价比"最高的环节:你花在优化网格上的几个小时,可能换来的是计算时间缩短几十倍、结果精度提升一个量级。
我建议所有刚接触WB的人,在动手划分网格之前,先建立两个基本认知。其一,网格划分没有"最优解",只有"最合适解"——它永远是在精度和计算资源之间做权衡。其二,WB的网格划分是一个"全局控制+局部干预"的过程,默认设置只是起点,真正考验功夫的是后续的局部细化和质量修复。这篇文章,我会按照从选型到实操、从质量评价到工程避坑的顺序,把我在项目里积累的网格划分经验完整串一遍。
2. 网格类型选型的底层逻辑:四面体、六面体、棱柱网格到底怎么选
2.1 三种主要网格形态的本质差异
很多教程一上来就讲怎么点按钮,但我觉得先搞懂"为什么这么选"更重要。WB里最常见的网格形态就三种:四面体(Tet)、六面体(Hex)、棱柱/金字塔过渡网格(Wedge/Pyramid)。它们的本质差异,我习惯用一个比喻来说明:四面体像散装的小石子,能塞进任何奇形怪状的缝隙;六面体像整齐的砖块,垒起来高效美观,但要求墙体本身比较规整;棱柱网格则是"过渡段",专门负责在两者之间搭桥。
四面体网格最大的优势是自动化和几何适应性。Tetrahedrons方法配合Patch Conforming算法,几乎不需要你做任何几何切分,再复杂的模型也能一键生成网格,这也是它成为WB默认选项的原因。缺点是单元数量偏多,而且同样的单元尺寸下,四面体的数值刚度通常比六面体偏硬,弯曲问题里体现得比较明显。
六面体网格的优势是计算效率和精度。同等数量的节点下,六面体单元能提供更规则的形函数,求解精度和收敛速度都更优。但代价是它要求几何体具有"可扫掠"的特征——说白了,你的模型必须能拆成一个个规则的"柱子"或"管道",否则自动生成六面体网格的难度会陡增。这也是为什么我对新手的第一条建议是:不要一上来就追求全六面体,那是进阶操作,先把四面体用明白。
棱柱网格(Prism)在流体分析里地位特殊,通常以边界层网格的形式出现,贴附在壁面上,用来捕捉近壁区剧烈的速度梯度和温度梯度。在结构分析里它一般不单独使用,更多是作为四面体和六面体之间的过渡层出现。
2.2 物理场决定了你的优先选择
选网格类型,不能只看几何形状,更要看物理场特性。我这里直接给一张我平时做项目时用的决策表,大家可以照着选:
| 分析类型 | 首选网格 | 核心原因 | 常见方法关键词 |
|---|---|---|---|
| 结构静力/动力分析 | 六面体优先,四面体兜底 | 弯曲、接触问题对单元形态敏感,六面体精度更高 | Multizone, Sweep |
| 跌落/冲击分析 | 六面体或高阶四面体 | 大变形下单元畸变严重,规则网格更耐扛 | Hex Dominant |
| 流场分析(Fluent/CFX) | 棱柱边界层+多面体/六面体核心 | 近壁湍流求解依赖边界层网格分辨率 | Inflation |
| 电磁场分析 | 四面体,局部细化 | Maxwell方程组对节点分布更敏感,自动自适应细化方便 | Tetrahedrons |
| 模态/屈曲分析 | 均匀六面体 | 模态结果对质量矩阵分布敏感,规则网格避免伪模态 | Sweep |
你可能会发现,结构分析里我给了"六面体优先"的建议,但这有个前提——模型必须是"干净的"。所谓干净,指的是没有碎面、没有狭长面、没有微小倒角。如果模型是从三维软件里直接导出的原始几何,满是细节特征,那老老实实用四面体反而更稳妥。记住一个原则:与其勉强化分成劣质六面体,不如用高品质四面体。劣质六面体(比如翘曲严重的)在计算中引起的误差,比规整四面体大得多。
2.3 单元阶次的选择:“二阶”为什么是默认值
WB里默认的单元阶次是二次(Quadratic),也就是在每条边的中点额外加一个节点。很多人不理解这个设置的意义,我这里解释一下:线性单元(一阶)的位移场是线性变化的,一个单元内部的应力是常数,这会导致应力结果呈"阶梯状"分布;而二阶单元能模拟弯曲变形,应力分布更光滑,精度提升非常显著。
但是,二阶单元不是没有代价。第一,计算量明显增大;第二,在接触分析和弹塑性分析里,二阶单元的节点力分布更容易引起局部收敛困难;第三,二阶四面体(10节点)虽然精度不错,但计算代价比一阶六面体(8节点)高不少。所以我的经验是:接触区域和塑性变形区域,考虑用一阶单元配合加密网格;远离应力集中的区域,用二阶单元保证精度。这个取舍需要根据具体问题反复试,没有绝对的对错。
3. 从默认网格到定制网格:全局与局部控制的完整操作链路
3.1 第一眼该看的全局设置面板
在WB的Mesh模块里,选中模型树中的Mesh节点,Properties面板里会列出一大堆全局设置。新手容易犯的错,是看到什么设置什么,或者干脆全部默认直接Generate。我的建议是:先只改几个全局选项,跑一版"粗网格"出来看趋势,再逐步加密。
全局设置里我认为优先级最高的有三个。第一个是Element Size(单元尺寸),它直接决定网格密度。WB里不填的话会自动根据几何体尺寸估算一个"合理"值,但这个值通常是偏保守(偏大)的,尤其是对小型特征和高应力梯度区域。第二个是Element Midside Nodes(中间节点),对应上面说的单元阶次选择,默认Keep(保留二阶),我平时会在接触分析里改成Dropped。第三个是Smoothing(平滑度),默认Medium,如果模型存在大量扭曲单元,可以调到High,WB会通过迭代调整节点位置来改善单元形状——它不是加密,而是"整形",成本低收益高,值得养成习惯。
全局尺寸的设定,我有一个经验公式供参考。如果是结构分析,最小特征尺寸(比如圆角半径、薄壁厚度)除以30,作为初始单元尺寸起步;如果是流体分析,取计算域最长边的1/100到1/200作为初始尺寸。然后再结合网格无关性验证(后面细说)逐步加密。不要一上来就把单元尺寸设得极小,否则网格数量和求解时间会失控。
3.2 局部控制在实战中的几种用法
全局控制解决"整体密度",局部控制负责"关键区域细化"。我项目里最常用的局部控制有五种,按使用频率排序:
- Sizing(尺寸控制):选中某个面、边或顶点,单独指定该处的单元尺寸。比如螺栓孔附近的应力集中区域,我会把孔周的单元尺寸设为全局尺寸的1/3到1/5。
- Contact Sizing(接触尺寸控制):专门针对接触界面,让接触两侧的网格尺寸匹配。这点极其重要,接触面和目标面的网格如果失配,接触压力分布会严重失真。
- Inflation(膨胀层控制):结构分析里用来处理「薄壳类结构的厚度方向分层」,流体分析里用来生成边界层网格。膨胀层的层数和第一层高度是CFD精度的决定性因素,后面会专门展开。
- Mapped Mesh(映射网格):强制在某个面或体上生成结构化网格,通常用于规则几何区域的效率优化。
- Pinch(收缩控制):把几何上的狭长缝隙或微小特征"忽略"掉,避免生成畸形小单元。这个功能在清理导入几何时非常实用,很多"无法网格化"的问题就是靠它解决的。
这里我提一个很多新手不知道的技巧:局部Sizing的优先级高于全局Sizing,而且你可以加多个不同尺寸的局部控制,让网格从细化区域向粗化区域自然过渡。但要注意,相邻区域的尺寸变化不要过于剧烈,否则会产生大量金字塔过渡单元,影响整体质量。一般相邻网格尺寸比控制在1.5以内比较稳妥,最大不要超过2。
3.3 使用膨胀层(Inflation)时最容易犯的错
膨胀层在CFD里的地位怎么强调都不为过。湍流边界层的物理厚度很薄,壁面附近的速度梯度非常大,如果网格不够密,求解器捕捉不到边界层的速度剖面,摩擦阻力和换热系数的计算结果会彻底失真。WB里Inflation需要指定的关键参数有三个:First Layer Thickness(第一层高度)、Maximum Layers(最大层数)、Growth Rate(增长率)。
第一层高度怎么定?这里要引入一个无量纲数——y+(无量纲壁面距离)。不同湍流模型对y+的要求不同:k-epsilon模型要求y+在30到300之间(对数律区),k-omega SST模型则希望y+接近1(粘性底层)。根据目标y+值估算第一层高度的公式是:
Δy = y+ × μ / (ρ × uτ)
其中uτ是摩擦速度,需要根据壁面剪应力估算;μ是动力粘度;ρ是密度。CFD软件里通常有专门的y+计算工具,我用Fluent的时候,都是先在Fluent Meshing或者WB里粗算一版,再看后处理里的实际y+分布,反推调整第一层厚度。这是一个迭代过程,"算一次就锁定参数"不现实。
结构分析里Inflation的使用频率没那么高,但在薄壁结构受弯、板壳连接处这些场景下,厚度方向分层太少会让弯曲刚度失真。我的经验是:厚度方向至少保证3层单元,最好5层以上,这样弯矩和应力分布才能算准。
4. 网格质量评价指标与修复手段:数值仿真工程师的质检单
4.1 五大核心质量指标怎么看
网格生成完之后,最关键的一步就是检查质量,然后决定"能不能直接拿去求解"。WB的Mesh模块里自带质量检查面板,但默认只显示一种指标,很多人不知道其实可以从下拉菜单里查看多种指标。我平时必查的五项是:
| 指标名称 | 理想范围 | 含义与影响 |
|---|---|---|
| Element Quality(单元质量) | > 0.1 或 0.2 | 基于单元形状的综合评分,越接近1越规整 |
| Aspect Ratio(长宽比) | < 20(结构),< 5(流体) | 单元最长边与最短边的比值,太大说明单元拉得过长 |
| Jacobian Ratio(雅可比比率) | > 0.2 | 单元形函数是否畸形,太差会导致刚度矩阵奇异 |
| Skewness(偏斜度) | < 0.85(结构),< 0.7(流体) | 单元偏离理想形状的程度,越大越差 |
| Orthogonal Quality(正交质量) | > 0.1(流体要求 > 0.5) | 主要用于CFD,衡量网格面与流场方向的关系 |
这里我必须强调一个原则:不要追求所有单元都达到完美质量。工程上不存在100%高质量的网格,只要你最关心的区域质量过硬、最差的那批单元不在危险区,计算就是可靠的。我见过有人花一个星期去修理几个畸形单元,结果修来修去把好网格也弄坏了——这种钻牛角尖的做法,纯粹是时间和精力的浪费。我的红线标准是:结构分析中Skewness大于0.95的单元数量占比小于0.5%,且不在应力集中区域;流体分析中Orthogonal Quality最小值不低于0.3,否则求解器很容易报负体积错误。
4.2 质量不达标时的处理策略
发现质量差的单元,先别急着重画,按这个顺序排查:
第一,看差单元集中在哪。如果集中在几何特征突变处(尖角、窄缝、圆角过渡区),通常是用局部Sizing在该区域加密就能解决。第二,看单元形态。如果是被拉得极长的畸形单元,多半是相邻区域尺寸控制差异太大,把过渡调缓一点。第三,看几何本身。如果几何里存在微小碎面或者重合面,网格必然在这里生成劣质单元,这时候问题不在网格而在几何清理——回到SpaceClaim或DesignModeler里把碎面合并、缝隙补上,再重新划分,效果立竿见影。第四,尝试改变算法。WB里四面体算法有Patch Conforming和Patch Independent两种。Patch Independent对几何细节不敏感,适合处理"脏几何",但容易丢失细小特征,需要配合尺寸控制把关键特征保护住。
还有一道杀手锏——Mesh Morpher(网格变形)。WB在较新版本里提供了网格平滑修复工具,可以自动识别并修复扭曲单元,但它的作用是局部的"整形",不适合大范围质量修复。如果大面积质量极差,相信我,回炉重画比修补更快。
4.3 网格质量与收敛性的隐藏关系
这条经验是我做了大量非线性分析之后总结出来的,值得单独列一节。很多人遇到求解不收敛,第一反应是调整载荷步、减小时间增量、改求解器设置,但往往忽略了网格这个"隐藏变量"。事实上,在弹塑性分析、接触分析、大变形分析中,网格质量对收敛性的影响不亚于求解器设置。具体表现是:单元畸变过大导致雅可比行列式为负,求解器在积分点处计算出非物理的刚度矩阵,Newton-Raphson迭代直接发散。
我的排查方法是:如果非线性分析在前几步就发散,先把网格恢复成默认密度和默认质量修复参数,用一阶单元跑一版,看是不是网格引起的。如果换成粗网格能收敛、加密反而发散,那几乎可以断定是局部单元质量出了问题——优先检查应力集中区域周围的单元,那里往往藏着Jacobian Ratio很差的畸形单元。修复这些单元之后,通常收敛性问题会奇迹般消失。
5. 工程实战中常见的网格问题与排查思路
5.1 装配体接触区域的网格匹配怎么做
做装配体分析的人一定遇到过这个场景:两个零件接触的区域,一个零件的网格很密,另一个零件却还是粗网格,结果接触应力云图上出现明显的"锯齿"状不连续。这不是求解器的问题,而是接触界面网格不匹配导致的数值误差。
处理办法有两个方向。一是用Contact Sizing指定接触区域的网格尺寸,让接触面和目标面的单元尺寸接近(一般1:1到1:1.5),但要注意这会增加接触搜索的节点数量,计算代价上升。二是用Contact Tolerant设置增大接触搜索容差,允许网格尺寸差距略大一些,代价是接触结果精度下降。我一般推荐前者,因为接触分析本来就对网格敏感,省这点计算资源不划算。
另外提一个经常被忽略的点:接触面的网格不仅要尺寸匹配,还要确保两边没有"初始渗透"或"初始分离"。WB能自动识别初始接触状态,但如果网格凹凸不平,初始渗透量可能远大于接触公差,导致求解器一上来就疯狂迭代。这时候把接触算法里的Pinball Radius设置调大一些,或者对接触面做局部网格光顺处理,都能有效缓解。
5.2 薄壁结构和实体单元的选择困境
遇到厚度方向只有几个毫米、其他方向几十上百厘米的薄壁结构,很多新手会纠结:用实体单元的话,厚度方向至少需要3层网格,全局尺寸就得设得非常小,网格数量爆炸;用壳单元的话,又担心精度不够。我的处理经验是分两种情况讨论。
如果结构的受力模式以弯曲为主、且厚度方向的应力梯度不明显,直接用Shell(壳)单元,把厚度方向通过截面赋予。WB里只要几何是面体(Surface Body),就能自动划分壳网格,厚度在Thickness里设置即可。如果结构涉及厚度方向的挤压或层间应力,那就必须用实体单元,这时候不要吝啬网格——厚度方向至少4到6层,宁可平面方向稍微拉疏一点,也不能让厚度方向分层不够。记住我之前提的规律:弯曲问题里,厚度方向的网格层数是精度瓶颈,远比你平面方向的加密重要。
5.3 处理“无法生成网格”的报错思路
WB的网格划分偶尔会直接报错,最常见的错误信息是"Failed to generate mesh"或者"Some geometry may need cleanup"之类的英文提示。第一次遇到这种报错,人容易慌,但其实思路是固定的:先几何,后算法,最后网格设置。
第一步,检查几何。用SpaceClaim打开模型,开启"检查工具"里的"薄片"、"小边"、"尖角"检测,把所有微小的碎面、缝隙、倒角统一清理或抑制掉。做完这一步,80%以上的网格生成问题都能解决。第二步,切换算法。如果是四面体网格,从默认的Patch Conforming切到Patch Independent,通常能绕开几何缺陷继续生成。第三步,放大局部尺寸。如果几何里有一条特别短的边或特别小的孔,你按全局尺寸生成网格时,WB会为了匹配这个小特征把周围网格压得很小,导致单元数量爆炸或质量崩溃——这时候给这个特征单独加一个较大的Sizing,或者用Pinch把特征屏蔽掉,问题迎刃而解。
说实话,我在项目里遇到"网格划分不出来",九成原因是几何没有清理干净,只有一成是WB本身的设置问题。这也是为什么我现在拿到任何几何模型,第一件事永远是做几何检查,而不是急着进Mesh模块。
6. 效率与精度兼得:网格无关性验证与提效技巧
6.1 网格无关性验证:你如何知道“加密够了”
这是网格划分里最关键的一步,也是很多教程忽略的一步。所谓网格无关性验证,是指通过渐进加密网格(比如全局尺寸从10mm一步一步缩小到2mm),观察关键结果(比如最大应力、最大变形、特征频率)是否收敛到稳定值。如果加密后结果变化很小(比如小于1%),说明当前网格密度已经足够支撑工程判断;如果结果还在明显变化,就必须继续加密,否则你算出来的"精确解"很可能只是"网格敏感解"。
我分享一个具体做法:先定义一个目标量——比如某处应力集中点的von Mises应力,然后依次用全局尺寸 L、L/2、L/4、L/8 进行四组计算,记录目标量随网格细化的变化曲线。当相邻两组结果差异小于1%时,取较粗的那组作为最终计算网格,这样可以省下一大笔计算时间。如果结果一直震荡不收敛,那说明你的关注点很可能处于几何奇点(比如理想的尖角处应力理论上无穷大),这时候单纯加密网格没有意义,需要改变后处理方式或用子模型法处理。
我还用过WB内置的**Adaptive Meshing(自适应网格)**功能,求解器会在迭代过程中根据误差指示器自动加密高误差区域的网格。对于结构分析,这个功能在某些非线性问题里挺好用的,但它的网格演化过程不太可控,在工程出报告时我还是倾向于手动验证网格无关性。
6.2 让WB网格划分提速的五个设置
- 并行网格划分:在Mesh模块的Advanced设置里启用Parallel Generation(并行网格生成),性能好的机器能明显缩短生成时间。
- 共享拓扑(Shared Topology):处理装配体时,在Geometry模块里设置为共享拓扑,让接触界面自动形成共享面,网格尺寸匹配度更好,也省去手动设置Contact Sizing的时间。
- 虚拟拓扑(Virtual Topology):通过把多个碎面合并成一个大面,减少几何特征的复杂度,让网格生成器把精力花在真正重要的区域。
- Named Selection提前定义:在网格划分前把关心的面、体、边定义为Named Selection,后面不管是设Sizing还是施加边界条件,都能直接引用,不用反复框选——这个习惯能省下大量重复操作。
- 草稿模式:先让网格划分在Fast Transition或浅层平滑下快速生成,检查几何和整体趋势,确认没问题后再切到高质量模式做最终网格。我们做优化迭代时,都是用"草稿网格"先跑趋势,最后才生成"精修网格"出报告数字。
6.3 什么时候该给整体结构做“六面体”硬啃
最后聊聊"硬啃六面体"。我的原话是:不要为了追求六面体而六面体,但有几种情况值得花时间去做:模型是轴对称结构或规则拉伸体、模型要跑大规模非线性瞬态分析(六面体的计算速度优势明显)、以及客户/规范明确要求使用六面体网格。
做法是,把模型按几何特征拆分成多个Block,然后在WB里用Multizone或Sweep方法逐个网格化。拆分Block的技巧核心是:让每个Block都是单方向扫掠的结构。比如一个带法兰的管道,可以拆成"直管段 + 法兰段 + 法兰盘",每个段分别扫掠。拆不开的地方(比如法兰和管道的过渡区域),用金字塔单元过渡。这个技巧需要练习,但一旦掌握,处理复杂模型时会非常得心应手。
我自己还有一个习惯,凡是硬啃六面体的模型,一定在Timeline里把"虚拟拓扑和几何修复"步骤记录清楚,方便后期修改参数后一键重建。这比每次从头开始拆Block爽太多了。
在实际操作中,我最深的体会是:网格划分不是一锤子买卖,它是"先生成、后检查、再修补、最终验证"的闭环。很多工程师习惯生成完网格直接丢给求解器,结果后面所有时间都花在调求解器参数上——这其实是本末倒置。网格这个环节多花两小时,求解和结果分析环节可能就能省出一整天。希望这篇基于WB实际项目经验的分享,能帮你把网格划分这一步踩稳,后续的仿真之路走得顺一点。