做仿真的朋友大概率都听过UMAT,但真正动手写过的人不多。今天聊聊UMAT最核心的逻辑——应力更新算法,用最经典的J2弹塑性本构来说明。
一句话:**Abaqus每个增量步、每个积分点调用你的UMAT,你告诉它"这个点的应力是多少、刚度矩阵是什么"。**
具体来说,Abaqus传给你当前应变增量DSTRAN,你需要:
1. 更新STRESS数组(从步初应力算到步末应力)
2. 更新STATEV(状态变量,比如等效塑性应变)
3. 填充DDSDDE(一致切线刚度矩阵)
官方文档(SIMACAESUBRefMap/simasub-c-umat.htm)有句警告我印象很深:
> "Initial testing on a single-element model with prescribed traction loading is strongly recommended."
翻译成人话:**别上来就跑大模型,先用一个单元把你的代码验对了。**
核心思路就两步:
**第一步:弹性预测(Trial)**
先假设这一步是纯弹性的:
**第二步:判断是否屈服**
算等效应力 σ_eq = √(3/2 · s:s),跟当前屈服应力比:
- 如果 σ_eq ≤ σ_y → 弹性步,直接接受
- 如果 σ_eq > σ_y → 进入塑性修正
**第三步:Return Mapping**
塑性乘子的解析解(等向硬化情况下):
然后修正应力:
其中 n = 3s/(2σ_eq) 是流动方向。
1. **应力存储顺序**:直接分量(11,22,33)在前,剪切分量(12,13,23)在后,剪切是工程剪应变
2. **NTENS随单元变**:3D实体=6,平面应变=4,平面应力=3,代码要兼容
3. **DDSDDE决定收敛速度**:写错了不会算错(如果能收敛),但迭代次数会爆炸
4. **有限应变下应力已旋转**:Abaqus调UMAT前做了刚体旋转,你只管corotational积分
C3D8R单单元 + 位移载荷 → 提取应力应变 → 跟理论曲线对比:
- 弹性段:σ = E·ε
- 塑性段:σ = σ_y + H·(ε - σ_y/E)
再建一个相同参数的*PLASTIC内置模型,两条曲线应该完全重合。重合了,你的UMAT就对了。
遇到类似问题可以腾讯会议交流,扣1八7我185联,系8827。
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删