3. 接触算法与求解器选择

在 Abaqus/Standard 中建立接触,真正决定计算成败的往往不是几何建得多漂亮,而是两件事:接触离散方式(用通用接触还是接触对)和约束施加算法(拉格朗日乘子、罚函数还是增广拉格朗日)。前者决定“谁和谁可能接触、用什么面片去检测”,后者决定“一旦检测到穿透或间隙,求解器如何把它变成方程里的约束”。两者组合不当,就会出现收敛困难、接触面穿透、压力振荡或计算时间暴涨。

一、通用接触与接触对:离散层面的两条路线

通用接触(General Contact)在 Abaqus/Standard 中以 *Contact, op=NEW 配合 *Contact Inclusions 定义,其核心思想是:对整个模型的外表面自动建立接触域,默认所有外表面之间都可能接触,再用包含/排除规则去裁剪。它基于“面片化(facet)”的边-面、面-面检测,能自动处理自接触、复杂装配、大滑移和接触状态频繁切换。代价是接触搜索开销大,对内存和求解时间要求高,且对初始过盈、尖锐边角、薄壳边界的处理需要额外设置。

接触对(Contact Pair)以 *Contact Pair 显式指定主面(master)和从面(slave),只在这两个面之间建立接触关系。它计算量小、可控性强,适合接触区域明确、面数不多的场景,例如轴孔配合、齿轮啮合、压头压入试块。但主从面的选择直接影响精度:一般应让网格较粗、刚度较大、形状较平缓的面做主面,让网格较细的面做从面;若选反,容易出现从节点穿透主面或压力分布失真。

选择原则:接触对象多、存在自接触或大滑移时优先通用接触;接触区域明确、追求计算效率时优先接触对。二者可在同一模型中混用,但需注意不要对同一对面重复定义。

二、三种约束算法:穿透如何被“惩罚”或“消除”

接触的本质是单边约束:法向不允许穿透,切向可传摩擦。把这一约束写进有限元方程,有三种主流做法。

拉格朗日乘子法(Lagrange Multiplier)引入额外的乘子自由度 λ,把接触压力作为独立未知量求解,约束被精确满足,理论上穿透为零,压力分布准确。缺点是系统矩阵出现零对角项,规模增大,且接触状态每次迭代切换时方程结构变化,收敛对初值敏感,容易出现压力振荡。它适合需要高精度接触压力、摩擦滑移量小的场合,如密封面、精密配合。

罚函数法(Penalty)不增加自由度,而是在法向引入刚度 kn,用“穿透量 × 罚刚度”近似接触压力。实现简单、矩阵保持正定、收敛平稳,是 Abaqus 默认的接触算法。但约束是近似的:kn 太小则穿透明显,太大则条件数恶化、收敛变慢。因此需要合理设置罚刚度缩放因子,并观察穿透量是否可接受。

增广拉格朗日法(Augmented Lagrange)是前两者的折中:在罚函数基础上迭代更新拉格朗日乘子,逐步把穿透压到接近零,同时保留罚函数的良好收敛性。它对罚刚度不敏感,适合既要求精度又要求稳健性的接触,如大变形橡胶密封、金属成形。代价是每次迭代需额外更新乘子,单步计算量略高。

接触离散方式与约束算法关系图 通用接触 General Contact • 自动建立外表面接触域 • 面片化边-面 / 面-面检测 • 支持自接触、大滑移 • 搜索开销大,内存高 • 适合复杂装配、多体接触 • 关键字:*Contact, op=NEW 接触对 Contact Pair • 显式指定主面 / 从面 • 仅在两面间建立接触 • 计算量小、可控性强 • 主从面选择影响精度 • 适合轴孔、压头、齿轮 • 关键字:*Contact Pair 离散方式决定接触搜索范围 约束施加算法(法向接触压力如何进入方程) 拉格朗日乘子法 • 引入乘子自由度 λ • 约束精确满足,穿透≈0 • 压力分布准确 • 矩阵含零对角,规模增大 • 状态切换敏感,易振荡 • 适用:密封面、精密配合 罚函数法 • 引入法向罚刚度 kₙ • 压力 ≈ kₙ × 穿透量 • 矩阵正定,收敛平稳 • 约束近似,存在穿透 • kₙ 过大→条件数恶化 • 适用:默认通用、大变形 增广拉格朗日法 • 罚函数 + 乘子迭代更新 • 穿透逐步压至接近零 • 对罚刚度不敏感 • 收敛稳健,精度较高 • 单步计算量略高 • 适用:橡胶密封、成形 精度 ← 拉格朗日 / 增广拉格朗日 → 稳健性 ← 罚函数 / 增广拉格朗日 →

三、算法选择与关键参数设置

在 Abaqus/Standard 中,接触属性通过 *Surface Interaction 定义,法向行为用 *Surface Behavior 指定算法。默认是罚函数;改为拉格朗日乘子用 augmented Lagrange 或 hard 接触配合相应选项;增广拉格朗日则通过 augmented Lagrange 并设置迭代次数。切向摩擦用 *Friction 定义摩擦系数,默认罚摩擦。

*Surface Interaction, name=Int-1
*Surface Behavior, pressure-overclosure=HARD
*Friction
0.15,
*Contact Pair, interaction=Int-1, type=SURFACE TO SURFACE
Slave, Master

若改用增广拉格朗日,可将 pressure-overclosure 设为 HARD 并附加 augmented Lagrange 选项;若用罚函数,则通过 penalty 指定罚刚度缩放因子,例如 0.1 表示按默认刚度的 10% 施加。实际调试时,建议先以默认罚函数跑通,再根据穿透量和收敛情况切换到增广拉格朗日。

四、结果判读与常见问题

判断接触是否合理,重点看三处:接触压力(CPRESS)是否连续、无异常尖峰;穿透量(COPEN 为负值部分)是否在可接受范围(一般应小于单元尺寸的 1%~5%);接触状态(CSTATUS)是否在迭代中频繁跳变。若出现压力振荡,优先检查主从面是否选反、罚刚度是否过大;若穿透明显,则考虑改用增广拉格朗日或加密从面网格。

通用接触与接触对不要对同一对面重复定义,否则会出现约束冲突导致不收敛。切换算法后应重新检查接触初始状态,必要时用 *Contact Interference 调整过盈。

总结来说:离散方式决定“接触在哪里发生”,约束算法决定“穿透如何被处理”。通用接触适合复杂多体与自接触,接触对适合明确配合;罚函数稳健但近似,拉格朗日精确但敏感,增广拉格朗日兼顾两者。实际建模中,先用接触对或通用接触把接触域框定,再根据精度与收敛需求选择算法,并通过 CPRESS、COPEN、CSTATUS 三个输出量验证接触质量,才能得到既收敛又可信的接触非线性结果。