01第一类:第一行塑性应变不是 0
plastic: the first plastic strain must be 0, got 0.002有温度列时会带上温度:
the first plastic strain at temperature 400 must be 0表的第一行是屈服点,塑性变形还没开始,塑性应变按定义就是零。 这一条被触发通常只有两个来源:
| 第一行填成 | 来源 | 怎么改 |
|---|---|---|
0.002 | 条件屈服强度 Rp0.2 里那个 0.2% | 那 0.2% 是判据不是数据,改成 0 |
0.00167 | 换算时忘了减弹性应变(正好等于 σ/E) | 回去补一次 εpl = εtrue − σtrue/E |
-1e-8 | 减出来的极小负数,浮点误差 | 直接写 0,不要留一个「几乎是 0」 |
第二种情况值得多说一句:如果减了弹性应变第一行还不是 0, 说明换算用的 E 和填给 *ELASTIC 的 E 不是同一个数。 这两处必须一致,上一篇有完整推导。
02第二类:塑性应变不递增
plastic: plasticStrain must increase down the table, got 0.018 after 0.018硬化曲线是「塑性应变 → 屈服应力」的一个函数关系, 求解器要在两点之间做插值。横坐标出现相等或倒退的两点, 这个关系就不是函数了 —— 同一个应变对应两个应力,插值无从谈起。
三个常见来源
- 取整压平。 最常见。0.0177 和 0.0182 保留三位小数都成了 0.018。 解决办法是塑性应变留四到六位有效数字,不要图好看压位数。
- 行顺序被打乱。 从 Excel 复制时按应力排了序、 或者温度相关表里把不同温度的行交叉着写(见下一节)。
- 把工程应变直接抄进来了。 颈缩之后工程应变还在涨但应力在跌, 有人手工「修正」时会去动应变列,一动就乱。正确做法是整段剔除。
plastic: yieldStress must be positive, got 0。 真正必须单调的是塑性应变那一列。03第三类:各行列数不一致
plastic: all rows must have the same length塑性表的列数决定了它是不是温度相关的:
| 列数 | 含义 | 例 |
|---|---|---|
| 2 列 | [屈服应力, 塑性应变],不随温度变 | [345, 0] |
| 3 列 | [屈服应力, 塑性应变, 温度],温度相关 | [345, 0, 20] |
所以下面这张表是非法的 —— 前两行说「我是温度相关的」,后两行说「我不是」:
"table": [
[345, 0, 20],
[450, 0.05, 20],
[300, 0], ← 少一列
[380, 0.05] ← 少一列
]缺的那两行不会被当成「默认室温」,也不会被跳过,整块直接判非法。 这是故意的:静默地替你猜一个温度,比报错危险得多。
04温度相关表:前两条规则是按组算的
温度相关的塑性表,本质上是好几条硬化曲线摞在一起, 每个温度一条。所以「首行为 0」和「严格递增」这两条规则, 是在每一组内部各自成立,而不是整张表从头到尾成立。
正确的排法是按温度分块,块内从 0 起算:
"table": [
[355, 0.00, 20], ┐
[420, 0.02, 20], │ 20 °C 这条曲线
[450, 0.05, 20], ┘
[300, 0.00, 400], ┐
[340, 0.02, 400], │ 400 °C 这条曲线,塑性应变重新从 0 起
[380, 0.05, 400] ┘
]注意第四行的塑性应变又回到了 0。 如果按「整表必须递增」去理解,这里看着像是倒退了 —— 但它是新一组的第一行,正是必须为 0 的那一行。
交叉着写会同时踩中两条
[355, 0.00, 20],
[300, 0.00, 400], ← 温度跳了
[420, 0.02, 20], ← 又跳回来
[340, 0.02, 400]插件按出现顺序分组:第一次见到 20 建一组, 第一次见到 400 再建一组,之后同温度的行追加到各自组里。 上面这种写法虽然分完组之后每组内部是对的, 但它极其容易在人工编辑时错行,而且 Abaqus 关键字文件本身也要求按温度块书写。同一个温度的行连着写,是唯一不会出事的排法。
05顺带会撞上的几条邻近报错
塑性表改对了,紧接着常见的是这几条。它们不属于塑性,但出现在同一次导入里:
| 报错 | 含义 | 改法 |
|---|---|---|
plastic: needs a "table" of [yieldStress, plasticStrain] rows | 塑性块写成了标量或缺了 table 键 | 塑性至少两列,不能像密度那样写成 "plastic": 345 |
plastic: "table" is empty | 有 table 键但里面是空数组 | 要么补数据,要么整块删掉——不需要塑性的材料可以只写弹性 |
plastic: row [345, "0"] is not a list of numbers | 某个值是字符串 | 去掉引号。从 Excel 导出的 JSON 最容易带引号 |
elastic: poissonsRatio must be between -1 and 0.5 (exclusive), got 0.5 | 泊松比取了 0.5 | 0.5 是不可压缩极限,等向弹性用不了。橡胶一类要走超弹 |
JSON 材料库的字段全集(哪些块可选、每块要几列、温度列怎么加)在帮助文档第 05 节,报错对照表在第 08 节。
06为什么值得在写进模型之前就拦
这三条规则 Abaqus 自己也会查,区别在于什么时候查、说得多清楚。 手工在 CAE 的材料编辑器里敲表,错误往往要到点确定甚至提交作业时才暴露, 而且提示只告诉你「有问题」,不会告诉你是第几行、在哪个温度上、哪个数比哪个数小。
更麻烦的是部分成功:十种材料导到第七种出错, 前六种已经建进模型了,你得先搞清楚哪些建了哪些没建。 插件的做法是每种材料独立处理 —— 一条数据有问题就报出来并跳过它, 不影响其余材料,最后给一份「哪几种成功、哪几种因为什么跳过」的清单。
- 三条规则在写进模型前逐行核,报错带行号、温度、具体数值;
- 坏的那一条跳过,其余照建,不会半途而废留下一个半成品模型;
- 单位换算同时完成 —— 表格格式对了但单位错了照样白搭, 这一层见第一篇。