Abaqus做了三年仿真,踩过的10个致命坑分享给你们

读研到现在工作三年,Abaqus大大小小模型做了上百个,中间踩的坑说出来都是泪。有些坑卡了我好几天甚至一周,最后发现原因简单得要命;有些坑更狠,算完了结果全是错的,软件还不报错,要不是跟实验对了一下根本发现不了。

今天把最要命的10个坑整理出来,都是我自己或者身边同事真实踩过的,不是从帮助文档里抄的。希望能帮大家少走点弯路。

1. 密度单位写错,这个真的能差10的12次方

刚入门的时候做模态分析,频率算出来是MHz级别的,当时还以为自己模型建得有问题,调了一天网格。后来师兄看了一眼说:你密度写的7850?mm制下应该是7.85e-9啊。

mm-MPa-s这套单位制里,质量单位是吨(T),密度是T/mm³。7850 kg/m³ = 7.85e-9 T/mm³,差了整整10¹²倍。

怎么验证:钢结构的模态频率一般在几十到几百Hz。如果你算出来是MHz或者mHz级别,别怀疑模型,先查密度。

后来我养成了一个习惯:每次新建模型第一件事就是确认单位制,然后把材料参数列个表贴在旁边对照。

2. 热分析用了Static Step,算了一天温度全是初始值

这个坑我踩了两次才长记性。

第一次做热应力分析,Step选的Static General,提交之后没报错,开开心心等了一晚上。第二天打开结果一看,温度场全是25°C,一点变化都没有。当时以为热源没加上,检查了半天载荷定义,啥都没错。

后来翻帮助文档才发现:Static General Step根本不求解热传导方程。它只算力平衡,热相关的东西全部忽略,而且不给你任何警告。

正确做法:

  • 纯热传导 → Heat Transfer Step
  • 热力耦合 → Coupled Temperature-Displacement Step
  • 蠕变 → Visco Step

血的教训:涉及温度的分析,永远不要用Static General。Step类型选错了比网格画差了后果严重得多。

3. 橡胶没用杂交单元,刚度大了好几倍

做密封圈压缩仿真,用的C3D8R,结果力-位移曲线比实验高了三四倍。一开始以为是材料参数拟合的问题,重新做了好几组试验数据拟合,还是不对。

折腾了两天才发现是单元类型的问题。橡胶泊松比接近0.5,几乎不可压缩,标准单元会产生体积锁定。必须用杂交单元,就是名字带H的那个:C3D8RH、C3D10MH。

另外泊松比不要写0.5,写0.495。0.5会导致刚度矩阵奇异。

4. 接触不收敛别急着调增量步,先查模型

这个是我见新手犯最多的错误。

接触分析跑不动了,第一反应就是把最小增量步从1e-5改成1e-8,然后等几个小时,还是不行,再改1e-10……

说实话,增量步调到1e-8以下还能收敛的情况很少见。90%的不收敛根因在模型本身:

  • 接触面选错了(这个最常见)
  • 过盈量太大,一步压不进去
  • 材料塑性曲线第一条应变不是0
  • 有刚体位移没约束住

我的排查顺序:接触 → 材料 → BC → 网格 → 最后才动求解器参数。

还有一个小技巧:如果过盈配合或者复杂接触,先单独建一个Step,过盈量设小一点(比如0.001),让两个面先轻轻贴上,下一个Step再施加真正的载荷。"少吃多餐"在Abaqus里是真的管用。

5. CTE忘了定义,热应力为零但软件不告诉你 

这是我踩过最阴的坑,没有之一。

做焊接残余应力分析,温度场算出来是对的,焊缝附近1000多度,梯度也合理。但是应力结果几乎全是零。没有warning,没有error,.sta文件显示NORMAL COMPLETION。

我查了整整三天,把模型从头到尾翻了一遍,最后发现:材料属性里忘了定义热膨胀系数(CTE)。

Abaqus默认CTE=0。ε_th = α×ΔT,α=0则热应变=0,热应力自然=0。软件觉得你没定义就是不需要,不会提醒你。

从那以后我做热应力分析,提交之前一定会专门检查一遍材料属性里有没有Expansion这一项。

6. Bolt Load只能在第一个Step加

想做"先预紧再加载"的两步分析,结果发现Bolt Load在Step2里灰掉了选不了。

Abaqus的规定是:Bolt Load只能在创建它的那个Step里定义大小。后面的Step只能选"Fix at current length"把它锁住,或者修改大小,但不能首次施加。

正确的做法:

  • Step1:Apply Force,施加预紧力
  • Step2:Fix at Current Length + 施加外部工作载荷

还有个衍生坑:预紧截面上的节点不能同时被Tie或者Coupling约束,否则报ErrNodeMPCPretenSec。这个报错信息不太直观,第一次遇到很难想到是这个原因。

7. 中文路径和中文Set名,万恶之源

这个不想多说,说多了都是泪。

脚本跑着跑着崩了、ODB打不开了、重启动找不到文件了、inp提交报一堆看不懂的错……八成是路径或者名称里有中文。

Abaqus内核对非ASCII字符的支持非常差。我现在所有项目:

  • 路径:纯英文+数字
  • Set/Surface名:英文+下划线
  • 文件名:不含空格

CAE里建的中文名导出inp的时候可能会自动转码,但不保证每次都靠谱。建议从一开始就养成纯英文的习惯。

8. 弹塑性数据直接用名义应力应变,结果偏软

实验拉伸曲线拿到的是名义应力-名义应变,很多人直接就输进Abaqus了。

Abaqus要求的是真实应力-真实塑性应变。大应变的时候两者差距很大,直接用名义值会导致塑性段明显偏软。

转换公式:

  • 真应力 = 名义应力 × (1 + 名义应变)
  • 真塑性应变 = ln(1 + 名义应变) - 真应力/E

嫌麻烦的话,Abaqus CAE里的Evaluate Material功能可以直接输入实验数据自动转换,挺方便的。

9. VUMAT状态变量某些序号赋值无效

写GTN损伤模型的VUMAT,stateNew(k,7)=1,后处理里SDV7永远是0。换成stateNew(k,25)=1就正常了。程序逻辑完全一样,就是换个序号。

后来搞明白了:Abaqus内部保留了一些SDV序号(比如单元删除变量),你定义的如果跟它撞了,赋值会被静默覆盖,不报错。

解决办法:自定义状态变量从比较大的序号开始编,比如从10或者20开始,前面留给Abaqus内部用。DEPVAR里定义的总数也要覆盖到你用到的最大序号。

10. J积分各围线结果差太多,裂尖网格不够

做断裂力学分析,设了8个contour,前几个K值一直在变,到后面也没稳定下来。

这说明裂尖网格不够细,J积分的数值解还没收敛。不同围线的结果应该趋于一致才对,如果持续变化就是网格问题。

一般裂尖周围至少要5圈单元,用奇异单元(1/4节点)或者XFEM。取后面几个contour的稳定值作为最终结果。

写在最后

上面这10个坑只是冰山一角。做仿真这些年积累下来的经验远不止这些,LS-DYNA的、Fluent的、HyperMesh的、子程序的、Python脚本的……加起来有200多条了。

最近把这些经验整理成了一份**《仿真避坑速查手册》**,按软件和类别分好了,每条都有症状、原因、修复方法和预防措施。需要的可以私信我,或者在技术邻搜"仿真避坑速查手册"。

做仿真嘛,踩坑是必经之路。但如果前人踩过的坑你能绕过去,那省下来的时间拿去多做几个项目、多陪陪家人,不比对着报错信息发呆强吗?

共勉。

免责声明:本文仅供学习参考,不构成工程设计与安全判定依据。实际工程请结合规范与试验验证。
查看全文
我的头像
默认 最新
ansys结构交流群