1. 为什么你需要手动控制多尺度网格划分?
如果你用过ABAQUS的自动网格划分,肯定遇到过这种情况:明明只想把螺栓孔周围或者应力集中区画得密一点,结果软件“自作主张”地把整个模型都画成了密密麻麻的小网格,计算时间直接翻了好几倍,电脑风扇呼呼转,结果却迟迟出不来。反过来,有时候又觉得关键区域的网格还是不够细,精度上不去。这种时候,你就需要手动介入,来一场“网格划分的宏观调控”。
多尺度网格划分,说白了,就是在同一个模型里,根据你的需要,让不同区域拥有不同“密度”的网格。关键部位,比如裂纹尖端、接触面、圆角处,我们用精细的小网格,像显微镜一样捕捉每一个应力应变细节;而在那些应力变化平缓、不太重要的区域,我们就用稀疏的大网格,像望远镜一样快速扫过,从而在保证计算精度的前提下,大幅削减计算量。这就像给城市做规划,市中心(关键区)高楼林立、道路密集,郊区(非关键区)则地广人稀,整体运行效率最高。
ABAQUS自带的自动多尺度划分功能(就像原始文章里的图1),虽然方便,但它的“智能”有时候并不完全符合我们的工程直觉。它可能过度细分了某些非关键区域,或者在过渡区域生成一些形状怪异、质量很差的网格(比如过于狭长的三角形或四边形),这些“坏网格”在计算中很容易导致不收敛,让分析功亏一篑。而手动控制(如图2)则把主动权交还给你,你可以基于对模型力学行为的深刻理解,精确地指定哪里该密、哪里该疏,以及密和疏之间如何平滑、高质量地过渡。我做过不少对比,手动控制得到的网格,其单元质量(如纵横比、内角)普遍优于自动划分,计算收敛性和结果可靠性也更高。所以,花点时间掌握手动技巧,绝对是“磨刀不误砍柴工”。
2. 从零开始:几何准备与分区策略
手动控制网格的第一步,不是直接去点“Mesh”按钮,而是回到源头——几何模型。ABAQUS的网格种子(Seed)和网格划分规则是基于几何边和面的,如果你的模型是一个“整体”,软件就很难对不同区域区别对待。因此,模型切分(Partition)是手动多尺度网格的基石。
2.1 几何切分的核心思想
切分的目的,是为后续对不同区域独立施加网格控制创造几何边界。你可以把它想象成在一块木板上画线,把木板分成几个独立的区块,然后你可以决定在A区块雕刻精细的花纹(细网格),在B区块只做简单的打磨(粗网格)。
在原始文章的例子里,一个40x15的矩形板被切分成了三个主要区域:中间一个窄条,和左右两个宽条。这个切分草图(图3)就是整个操作的灵魂。中间窄条就是我们关心的“关键区域”,比如一条可能的疲劳裂纹路径或高应力带;左右两侧则是次要区域。通过切分,这三部分在几何上变成了独立的“面”(Face),我们就可以对它们分别操作了。
这里有个我踩过的坑要提醒你:切分线(Partition Edge)的位置很有讲究。它最好位于你预判的应力梯度发生显著变化的位置附近,但不要正好放在应力集中点上。因为网格从密到疏需要一个过渡区,切分线可以定义这个过渡区的起点或终点。如果模型有圆角,切分线应该在圆角开始之前的直边部分,这样便于对圆角单独加密。
2.2 具体操作与参数设置
在Part模块里,找到Partition Face: Sketch工具。我建议先在纸上画个草图,想清楚哪里是关键区,过渡区要留多宽。然后进入草图环境,用画线(Create Lines)工具,根据你的设计画出切分线。
注意:切分线必须完全贯穿你要分割的面的整个宽度或长度,形成一个封闭的环,或者将面完全分割开。如果线段没有画到头,分割会失败。
画完之后,退出草图,ABAQUS会自动根据你的线条将面分割。你可以点击左侧模型树(Model Tree)中Part下的Faces集合,看看是不是分成了你想要的几个独立面。这一步的准确性直接决定了后续网格控制的自由度,务必检查清楚。
3. 网格布种:精细化控制的核心环节
模型切分好后,我们就进入了Mesh模块,来到了网格布种(Seeding)这个最能体现“手动控制”精髓的步骤。布种就是在模型的边上预先“播下”网格种子的数量或密度,这些种子点就是未来网格节点的位置。
3.1 全局种子与局部种子
ABAQUS提供了两种种子:全局种子(Global Seeds)和边种子(Edge Seeds)。对于多尺度网格,我们通常先设一个粗糙的全局种子作为背景密度。比如,对于那个40x15的板,我可以先设置一个大概尺寸为5的全局种子。这个种子会应用于所有未被单独指定的边。
然后,我们对关键区域的边进行局部加密。这就是手动控制的开始。选中关键区域(比如中间窄条)的所有四条边,点击Seed Edges,在弹出的对话框中,你有几种控制方式:
- 按单元数量(By Number):直接指定这条边要分成多少段。这是最直接的控制,适合你知道确切网格数量的情况。比如,指定窄条的短边(宽度方向)分成20份。
- 按单元尺寸(By Size):指定一个期望的单元尺寸。软件会根据边长计算大概的数量。我更常用这个,因为更直观。比如,指定关键区域的单元尺寸为0.5。
- 偏差因子(Bias):这是实现平滑过渡的神器!单纯地在一个区域用细网格,相邻区域用粗网格,交界处可能会产生非常突兀的单元尺寸跳跃,导致网格质量差。使用Bias,你可以让种子在一条边上非均匀分布。比如,在关键区与非关键区交界的边上,你可以设置种子从交界处开始,向关键区内部越来越密(Bias > 1),向非关键区内部越来越疏(Bias < 1)。这样,网格尺寸的变化就是渐进的,过渡非常自然。原始文章图4中的布种参数,很可能就对交界处的边应用了Bias控制。
3.2 布种顺序与冲突解决
布种是有顺序的。后施加的种子设置会覆盖先前的设置。我的习惯是:先全局,再局部;先关键区,再过渡区,最后非关键区。布种时,要经常使用Mesh模块下的Verify Mesh工具,检查种子分布是否符合预期。
有时候,不同边的种子设置会发生冲突,导致ABAQUS警告“种子不一致”。这时你需要判断以哪个为准。通常,更精细的(数量更多的)种子设置优先级更高。你也可以手动调整相邻边的种子数量,使它们匹配。比如,关键区一条边分了30份,与之相邻的非关键区边如果只分10份,那么过渡就会很陡峭。你可以将非关键区边也适当增加份数,比如15份,并加上Bias,让靠近交界处密一点,远离处疏一点。
4. 2D网格划分与单元类型选择
布种完成,相当于画好了网格的“蓝图”,接下来就可以正式生成网格了。点击Mesh Part,ABAQUS会根据你布下的种子,在切分好的各个面上生成2D网格。
4.1 网格划分技术与单元形状
在Mesh模块的顶部工具栏,你可以选择网格划分技术(Technique)和单元形状(Element Shape)。
- 划分技术:对于四边形主导的面,
Structured(结构化)和Sweep(扫掠)能产生非常规整的四边形网格,质量最高。如果形状复杂,Free(自由划分)更通用,但可能会产生三角形网格。在我们的矩形板例子中,由于做了规整切分,每个分区都很规则,完全可以尝试使用Structured划分,你会得到棋盘格一样整齐的网格。 - 单元形状:对于2D面,主要是
Quad(四边形)和Tri(三角形)。尽可能使用四边形(Quad)单元,这是无数仿真工程师的血泪经验。在相同节点数下,四边形单元的计算精度、收敛性通常优于三角形单元。特别是对于弹塑性分析、接触分析,四边形单元的表现稳定得多。只有当区域形状极其不规则,无法划分全四边形网格时,才退而求其次使用三角形,或者选择Quad-dominated(四边形为主)让软件尽量多画四边形。
生成2D网格后(如图5),一定要用Mesh->Verify里的Analysis checks和Element Shape来检查网格质量。重点关注:
- 纵横比(Aspect Ratio):最好控制在5以下,超过10的单元就要警惕了。
- 内角(Interior Angle):对于四边形,理想是90度,尽量保证在45度到135度之间。
- 翘曲(Warp):对于壳体单元很重要。
如果质量不佳,回去调整种子参数,特别是Bias设置,或者考虑是否需要对几何进行更细致的切分。
5. 从2D到3D:扫掠拉伸的实战技巧
很多实际零件是三维实体,但我们常常可以先划分好一个关键面的2D网格,然后通过拉伸(Extrude)或扫掠(Sweep)的方式生成高质量的3D六面体网格。这是手动控制多尺度网格在3D模型上的高效应用。
5.1 拉伸操作详解
原始文章步骤5演示的就是这个操作。点击Create Bottom-Up Mesh,这是一个从低维网格创建高维网格的强大工具。
- 选择方法:在Method中选择
Extrude(拉伸)。 - 选择源面网格:点击Source后面的
Select...,然后框选你刚才划分好的所有2D网格。这里注意,要确保这些2D网格是“孤立网格”(Orphan Mesh),也就是已经和原始几何脱离关联的纯网格。所以在Domain里通常选择Orphan elements。 - 定义拉伸向量:点击Vector后面的
Select...,这里不是选边,而是输入两个点的坐标来定义拉伸的方向和距离。比如输入起始点 (0,0,0) 和终点 (0,0,1),就表示沿着Z轴正方向拉伸长度为1。这个向量定义必须非常准确,它决定了3D实体的方向。 - 设置拉伸参数:
- 拉伸长度上的单元层数(Number of Layers):这是控制3D网格密度的关键。如果你在厚度方向也希望有梯度,可以在这里设置多层。例如,靠近源面的一侧(可能是接触面)需要更密的网格,你可以通过Bias参数让层厚不均匀分布。
- 单元类型:自然是从2D四边形(Quad)拉伸成3D六面体(Hex)。
- 点击
Mesh,生成3D网格。
5.2 扫掠划分的注意事项
对于更复杂的、路径不是直线的情况,可以使用Sweep(扫掠)划分。这要求你的实体有一个“源面”和一个“目标面”,以及一个可扫掠的路径。扫掠划分对几何的要求比拉伸高,必须确保从源面到目标面,每个截面形状都差不多(拓扑一致),否则会失败。
无论是拉伸还是扫掠,其核心优势在于:你只需要精心控制一个2D截面(源面)的网格,就能自动获得整个3D实体的高质量六面体网格。这比直接对复杂3D实体进行全手动布种要简单高效得多。生成3D网格后,同样要进行严格的质量检查,特别是对于扫掠网格,要检查靠近扫掠路径中心的单元是否扭曲过大。
6. 进阶策略:网格过渡与兼容性处理
手动控制多尺度网格,最难也最见功力的地方,往往在于不同尺度网格之间的过渡区域。如果处理不好,这里就是应力奇异和计算发散的重灾区。
6.1 过渡区网格设计
我常用的过渡策略有两种:
- 梯度种子(Bias)过渡:如前所述,在关键区与非关键区交界的边上,施加Bias种子。让网格尺寸像斜坡一样平缓变化。这是最常用、最有效的方法。
- 创建过渡带:有时仅靠Bias不够。我会在几何切分时,特意在关键区和非关键区之间,切出一个“过渡带”。这个过渡带本身的宽度可能只有关键区宽度的1/2到1倍。然后我对这个过渡带使用中等密度的网格,并对其两侧的边分别设置指向带内和带外的Bias。这样,通过一个中间缓冲带,实现了从密到疏的两级平滑过渡,网格质量更有保障。
6.2 网格兼容性
当两个相邻区域网格密度不同时,它们的交界面上,节点必须一一对应,否则无法传递力和位移。ABAQUS的网格划分算法会自动处理节点匹配,但前提是你的种子设置是“兼容”的。例如,区域A的一条边分了30份,与之共享边的区域B的同一条边也必须分30份,或者分成30的约数份(如15份,此时A边每2个节点对应B边1个节点)。
为了确保兼容性,在布种时,对于共享边,我通常会先对其中一个区域布种,然后利用Seed Edges中的Constraints选项,将另一条边的种子数量与之约束一致。或者,更简单的方法是,布种时直接框选两条共享边一起设置参数,保证它们完全一致。
手动多尺度网格划分,本质上是一种平衡艺术——在计算精度、计算成本和网格质量三者之间寻找最优解。它没有一成不变的公式,需要你根据具体的模型、载荷和分析目标来反复调试和权衡。一开始可能会觉得繁琐,但当你成功解决一个棘手的收敛问题,或者将计算时间从10小时压缩到2小时而精度不变时,那种成就感会让你觉得所有投入都是值得的。多动手试,从简单模型开始,逐步积累自己的“网格感觉”,这才是成为仿真高手的必经之路。