基于惩罚法的接触公式化
理论与物理
接触问题基础
老师,FEM中的“接触问题”为什么这么难?
接触问题本质上是非线性的。有三个原因:
1. 状态变化 — 接触面处于“接触/非接触”的二值状态。状态随载荷变化
2. 不等式约束 — 不允许发生穿透(penetration):$g \geq 0$
3. 摩擦 — 库仑摩擦包含“粘着/滑动”的状态变化
不等式约束…这和通常FEM的等式约束(SPC等)有本质区别呢。
通常的FEM求解 $[K]\{u\} = \{F\}$ 这样的等式,但接触需要满足“$g \geq 0$ 且 $g \cdot p = 0$”这样的KKT条件(Karush-Kuhn-Tucker条件)。$g$ 是间隙,$p$ 是接触压力。
罚函数法原理
罚函数法是最简单的接触处理方法。“施加与穿透量成比例的反力”:
$k_p$ 是罚刚度(接触刚度)。$g_n$ 是法线方向的穿透量。
就像在接触面之间放入弹簧一样呢。
正是如此。罚函数法就是在接触面之间放置非常硬的弹簧。发生穿透时会产生反力,将穿透推回。
罚刚度设置
罚刚度 $k_p$ 的设置会左右结果:
- $k_p$ 过大 → 条件数恶化。收敛困难
- $k_p$ 过小 → 穿透量过大。不准确
参考标准:$k_p \approx 10 \sim 100 \times E \cdot A / L$(接触面刚度的量级)。许多求解器会自动计算。
交给自动计算安全吗?
大部分情况下是的。Abaqus或Ansys的自动罚刚度是很好的起点。只在出问题时才进行手动调整。
罚函数法的优缺点
| 优点 | 缺点 |
|---|---|
| 实现简单 | 穿透无法完全为零 |
| 无需额外自由度 | 罚刚度的设置影响结果 |
| 与显式解法兼容性好 | $k_p$ 过大会导致条件数恶化 |
| 多数求解器的默认方法 | — |
“穿透无法为零”是最大的弱点吗?
只要 $k_p$ 是有限值,微小的穿透就不可避免。穿透量在板厚的1%以下则实用上没有问题。超过此值则需考虑拉格朗日乘子法。
总结
要点:
- 接触是不等式约束的非线性问题 — 状态变化 + 摩擦
- 罚函数法 = 接触面间放置弹簧 — $F = k_p \cdot g_n$
- $k_p$ 的设置是关键 — 过大会导致收敛困难,过小会导致穿透过大
- 多数求解器可自动计算 — 仅在出问题时手动调整
- 穿透无法完全为零 — 以板厚的1%以下为目标
Courant 1943年的罚函数法
罚函数法的数学起源可追溯到Richard Courant于1943年发表的论文“Variational methods for the solution of problems of equilibrium and vibrations”。将约束变分问题通过添加乘以大系数(罚)的项转换为无约束问题的思想,最初用于椭圆型偏微分方程的边界条件处理,在1970年代由Oden & Kim(1977)等人系统地应用于接触FEM。
各项的物理意义
- 惯性项(质量项):$\rho \ddot{u}$,即“质量×加速度”。您是否有过急刹车时身体被向前甩出的经历?那种“被带走的感觉”正是惯性力。物体越重越难启动,一旦启动也越难停止。地震时建筑物摇晃,也是因为地面突然移动而建筑物的质量“被落下”。静力分析中此项设为零,这是基于“缓慢施加载荷因此加速度可忽略”的假设。对于冲击载荷或振动问题,此项绝对不能省略。
- 刚度项(弹性恢复力):$Ku$ 或 $\nabla \cdot \sigma$。拉伸弹簧时能感觉到“想要恢复的力”吧?那就是胡克定律 $F=kx$,也是刚度项的本质。那么提问——铁棒和橡皮筋,用相同的力拉伸,哪个伸得更长?当然是橡皮筋。这种“难以拉伸的程度”就是杨氏模量 $E$,它决定了刚度。常见的误解:“刚度高=强度高”是不对的。刚度是“抵抗变形的能力”,强度是“抵抗破坏的能力”,是不同的概念。
- 外力项(载荷项):体积力 $f_b$(重力等)和表面力 $f_s$(压力、接触力等)。可以这样想——桥上卡车的重量是“作用在整个内部上的力”(体积力),轮胎压路面的力是“只作用在表面上的力”(表面力)。风压、水压、螺栓预紧力…全都是外力。这里容易犯的错误:弄错载荷方向。本想施加“拉伸”却变成了“压缩”——听起来像笑话,但在3D空间中坐标系发生旋转时确实会发生。
- 阻尼项:瑞利阻尼 $C\dot{u} = (\alpha M + \beta K)\dot{u}$。试着弹一下吉他弦。声音会一直持续吗?不,会逐渐变小。这是因为振动能量通过空气阻力或弦的内部摩擦转化成了热能。汽车的减震器也是同样原理——故意吸收振动能量以改善乘坐舒适性。如果阻尼为零会怎样?建筑物在地震后会一直摇晃不停。实际上不会这样,因此设置适当的阻尼很重要。
假设条件与适用范围
量纲分析与单位制
| 变量 | SI单位 | 注意点·换算备忘 |
|---|---|---|
| 位移 $u$ | m(米) | 以mm输入时,载荷·弹性模量也需统一为MPa/N系 |
| 应力 $\sigma$ | Pa(帕斯卡)= N/m² | MPa = 10⁶ Pa。与屈服应力比较时注意单位制不一致 |
| 应变 $\varepsilon$ | 无量纲(m/m) | 注意工程应变与对数应变的区别(大变形时) |
| 弹性模量 $E$ | Pa | 钢:约210 GPa,铝:约70 GPa。注意温度依赖性 |
| 密度 $\rho$ | kg/m³ | mm系中为tonne/mm³(钢约为 10⁻⁹ tonne/mm³) |
| 力 $F$ | N(牛顿) | mm系用N,m系也用N统一 |
数值解法与实现
罚函数法的实现
罚函数法在各个求解器中如何设置?
Abaqus
```
*CONTACT PAIR, INTERACTION=contact_prop
slave_surface, master_surface
*SURFACE INTERACTION, NAME=contact_prop
*SURFACE BEHAVIOR, PENALTY
```
Abaqus默认使用罚函数法。通过*SURFACE BEHAVIOR, PENALTY显式指定。
Nastran
```
BCTABLE, ...
BCPARA, CTYPE, UGLYPEN $ 罚函数法
```
在Nastran的SOL 101/106/400中定义接触。
Ansys
```
MP, MU, cid, 0.3 ! 摩擦系数
KEYOPT, cid, 2, 1 ! 罚函数法
```
或在Workbench的Contact设置中设置Formulation=Penalty。
LS-DYNA
```
*CONTACT_AUTOMATIC_SURFACE_TO_SURFACE
$ 罚函数法为默认
```
LS-DYNA的接触全部基于罚函数法。是与显式解法最自然匹配的方法。
接触检测
罚函数法的步骤(每次迭代中):
1. 接触检测 — 在主面上搜索从属节点的最近点
2. 间隙计算 — $g_n$ = 从属节点与主面之间的距离
3. 穿透判定 — 若 $g_n < 0$ 则为接触。反力 $F_n = k_p |g_n|$
4. 摩擦力计算 — $F_t = \mu F_n$(滑动)或 粘着
5. 反映到整体方程 — 将罚函数力添加到右侧
接触检测占计算成本的大部分吗?
对于大规模模型(数十万接触单元对),接触检测可能占计算时间的30〜50%。会使用桶排序或KD-tree等快速搜索算法。
总结
罚刚度的选择准则
接触罚系数ε的选择是罚函数法实用中的最重要课题。ε太小则穿透量会超过允许值,太大则刚度矩阵条件数恶化导致收敛变慢。LS-DYNA的默认设置中,采用将接触面最小单元刚度k_e(=E×t×A)的0.1倍自动设为ε的“SOFT=0”算法,对于异种材料接触(例:钢-树脂)推荐手动调整。
线性单元(1次单元)
节点间线性插值。计算成本低,但应力精度低。注意剪切锁定(可通过减缩积分或B-bar法缓解)。
2次单元(带中间节点)
可表现曲线变形。应力精度大幅提高,但自由度约增加2〜3倍。推荐:应力评价重要时使用。
完全积分 vs 减缩积分
完全积分:有过约束(锁定)风险。减缩积分:有沙漏模式(零能量模式)风险。根据情况选择。
自适应网格
基于误差指标(ZZ估计量等)的自动细分。高效提高应力集中部位的精度。有h法(单元细分)和p法(增加阶次)。
牛顿-拉弗森法
非线性分析的标准方法。每次迭代更新切线刚度矩阵。在收敛半径内具有二次收敛性,但计算成本高。
修正牛顿-拉弗森法
切线刚度矩阵使用初始值或每隔数次迭代更新。每次迭代成本低,但收敛速度为线性。
收敛判定准则
力残差范数: $||R|| / ||F_{ext}|| < \epsilon$(通常 $\epsilon = 10^{-3}$〜$10^{-6}$)。位移增量范数: $||\Delta u|| / ||u|| < \epsilon$。能量范数: $\Delta u \cdot R < \epsilon$
载荷增量法
不一次性施加全部载荷,而是分小步增加。弧长法(Riks法)可以越过载荷-位移关系的极值点进行追踪。
直接法 vs 迭代法的比喻
直接法是“用笔算精确求解联立方程”的方法——可靠但大规模问题耗时过长。迭代法是“通过反复猜测逼近正确答案”的方法——最初是粗略答案,但每次迭代精度都会提高。就像查字典时,从第一页开始顺序查找(直接法)不如先估计大概位置翻开,再前后调整(迭代法)来得高效,原理相同。
相关主题
なった
詳しく
報告