工程师平台
Abaqus 实战2026-09-06

泊松比填 0.5,是材料这一栏唯一会被当场拦下的错

弹性这一栏只有两个数,却是插件里唯一一处会当场拦下你的物理检查。 模量必须为正,泊松比必须落在 −1 到 0.5 之间且不含端点。 这篇把两端为什么各自失效推一遍(用体积模量和剪切模量,两行代数), 再说清楚等向、正交异性、工程常数这几种类型的分界在哪、插件在哪一步停手不管。
0.5 不是「太大了」,是发散
体积模量 K = E / [3(1 − 2ν)]。ν 取 0.5 时分母正好是 0,K 趋于无穷。 这不是精度问题,是等向线弹性这个模型在那一点上不成立。
负泊松比是合法的
区间下限是 −1,不是 0。ν 为负的材料真实存在,插件照收。 被拦的只有 ν ≤ −1 —— 那一端剪切模量发散。
非等向类型,插件不校验数值
只有 ISOTROPIC 走那两条检查。换成别的类型必须自己给table,列的含义和顺序按类型走,插件原样透传给 Abaqus。 1.4.1 起会核每行的常数个数,但数值和顺序仍然不查。

01为什么区间是 −1 到 0.5,而且两端都不含

这个区间不用背,两行代数就能推出来。等向线弹性里,体积模量和剪切模量都能用 E 和 ν 表示:

K = E / [ 3 (1 − 2ν) ]      体积模量:抵抗体积变化
G = E / [ 2 (1 + ν)  ]      剪切模量:抵抗形状变化

材料要是稳定的,这两个模量都得是正的有限值 —— 压它一下体积得变小、 剪它一下得有反力。E 已经要求为正,那么:

  • K > 0 要求 1 − 2ν > 0,即 ν < 0.5。 ν 正好等于 0.5 时分母是 0,K 发散。
  • G > 0 要求 1 + ν > 0,即 ν > −1。 ν 正好等于 −1 时分母是 0,G 发散。

两端都是开区间,因为端点上不是「值很大」而是「没有值」。 插件的检查写的就是这个:

报错原文
elastic: poissonsRatio must be between -1 and 0.5 (exclusive), got 0.5
括号里的 exclusive 是重点 —— 它在提醒你端点也不行, 不是「0.5 超出范围了」而是「0.5 本身就是那个不成立的点」。

020.5 那一端:不可压缩,以及橡胶该怎么办

ν = 0.5 的物理含义是体积完全不可压缩:怎么拉怎么压, 体积一点不变。橡胶、部分软组织、以及大变形下的金属塑性区都接近这个状态, 所以很多人第一反应是「那我就填 0.5」。

填不进去。而且退一步填 0.4999 也不是好主意:K 并没有消失, 只是变成了一个比 G 大四五个数量级的数。刚度矩阵里两个相差几万倍的量放在一起, 单元会出现体积自锁 —— 结构明明该变形,算出来却硬得离谱, 而这一次不会有任何报错

接近不可压缩,正确的做法是换本构
橡胶一类材料应该走超弹(Hyperelastic,Mooney-Rivlin / Ogden / Neo-Hookean 之类), 并配上杂交单元(单元名带 H 的那些,例如 C3D8H)。 超弹本构自己就带体积项的处理,不需要你去凑一个泊松比。
插件当前版本不支持超弹块。JSON 里写一个它不认识的属性名,它不会静默跳过,会把这些名字列出来告诉你 —— 这一条是内核里专门写了注释的:一块只有密度、超弹被丢掉的橡胶导进去, 是一个「有质量、没刚度」的材料,看起来导入成功,问题要到结果阶段才炸。

金属塑性不用担心这件事。塑性流动本身是等体积的,但那是*PLASTIC 那一栏管的事,弹性段的 ν 照常填零点三上下就行 —— 塑性表怎么填见塑性表三类报错

03−1 那一端:负泊松比不是笔误

区间下限是 −1 而不是 0,这是故意的。泊松比为负的材料(拉伸时横向也变粗) 在结构上是可实现的,多见于特定的点阵和折叠结构。插件对负值照收不误, 只有 ν ≤ −1 才拦。

所以如果你确实在算一个负泊松比的胞元,不必绕过检查。 反过来,如果你没打算填负数却看到 ν 是负的, 那大概率是这两种情况之一:

看到的值多半是什么怎么确认
-0.3从表格复制时带进了减号,或者列错位了把这一行的 E 一起看一眼,E 是不是也串了位
-1占位符没替换,或者某处用 −1 表示「无数据」这个值会被拦下:got -1,因为端点不含
E 那一栏没有上下限,只有正负
弹性模量的检查只有一条:必须为正。elastic: youngsModulus must be positive, got -206000。 数量级对不对它管不了 —— 把 SI 的 2.06e11 Pa 直接填进 mm 制模型(那里应该是 206000 MPa),插件不会有任何反应,因为 2.06e11 也是个正数。 量纲这一层只能靠自己,见单位制那一篇

04JSON 里这一栏怎么写

最简形式就是两个键,插件把它们拼成一行表:

"elastic": {
  "youngsModulus": 206000.0,
  "poissonsRatio": 0.3
}

上面这组数取自插件自带示例库 materials_sample.json 里的Steel_Q345,是演示用的整数值, 用来说明格式,不要当成可以直接引用的材料数据。 同一个文件里另外三条的写法是这样:

示例库条目youngsModuluspoissonsRatio
Steel_Q345206000.00.3
Al_6061_T668900.00.33
Concrete_C3030000.00.2
插件示例库 materials_sample.json 中的演示值,单位是该文件声明的 mm-tonne-s 制(模量为 MPa)。这些数字的作用是演示 JSON 格式,不构成材料性能数据。

密度可以写成裸数字,弹性不行

单列的属性(密度、热导率、比热)允许直接写一个数, 因为那是手写材料库的人第一反应会写的形式。弹性有两列,没法这么省:

"density": 7.85e-9        ✔ 单列,可以裸写
"elastic": 206000         ✘ 两列,缺了泊松比
缺键的报错
elastic: missing key(s) poissonsRatio
缺哪个报哪个,两个都缺就一起列出来。写成裸数字时也会走到这条 —— 插件只对单列属性做「裸数字 → 对象」的转换。

05温度相关的弹性表:第三列是温度

模量随温度变时,改用 table 写法,每行末尾加一列温度。 插件判断「是不是温度相关」的规则很直白:行比这个属性本身需要的列数多出来一列,那一列就是温度。 弹性本身要两列,所以三列就意味着温度相关。

"elastic": {
  "table": [
    [210000.0, 0.3,  20.0],
    [180000.0, 0.3, 400.0],
    [120000.0, 0.3, 600.0]
  ]
}

这段同样出自示例库(Steel_S355_TempDep 那条),是演示值。 注意三行的泊松比都是 0.3 —— 温度列在, 但你完全可以让某一列保持不变,Abaqus 只是按温度内插而已。

三条容易踩的

  1. 列数必须整齐。 前两行三列、第三行两列, 整块判非法:elastic: all rows must have the same length。 缺列的行不会被当成室温。
  2. 温度标度要和模型一致。 这一列是摄氏还是开氏, 插件不管也管不了,它只是一列浮点数。同一个模型里各处必须统一, 细节见热膨胀那篇的第 05 节
  3. 范围外按端点取值。 表里给到 600,模型算到 700 时, Abaqus 不会外推,会一直用 600 那一行。想让高温段可信就得把表给够。

06等向以外的类型:插件在哪一步停手

elastic 块可以带一个 type 键,不写就是ISOTROPIC。一旦写成别的,插件的行为会变成两件事:不再做那两条物理检查,并且要求你显式给 table

"elastic": {
  "type": "ENGINEERING_CONSTANTS",
  "table": [[ ... 按该类型的列布局填 ... ]]
}
忘了给 table 的报错
elastic: type ENGINEERING_CONSTANTS requires an explicit "table"
报错里那个类型名是照抄你写的那一串,不是大写化之后的, 所以拼错了能一眼看出来。类型名本身认不出来时是另一条:unknown Abaqus constant "ENGINERING_CONSTANTS"—— 这条打印的是大写化之后的名字。

为什么插件到这里就不管了:非等向类型的列数和列的含义随类型不同, −1 到 0.5 这种一维判据在那里没有对应物(正交异性的稳定性条件是一组 涉及全部九个常数的不等式,不是逐列能查的)。与其做一个半吊子的检查, 不如原样透传,让 Abaqus 自己的材料校验去处理。

1.4.1 起多了一道个数校验(只查个数,不查数值)
上面说的「不校验」指的是数值:正定性、列的顺序,插件都不看。 但从 1.4.1 起它会核每行几个数 ——LAMINA 6 个、ENGINEERING_CONSTANTSORTHOTROPIC 9 个、ANISOTROPIC 21 个, 温度相关时各多一列。对不上直接报elastic: type LAMINA needs 6 values per row, or 7 with a trailing temperature column, got 5
这道校验是补一个真实的坑:1.4 会把非等向弹性的温度相关标志恒置为真, 于是最后一个弹性常数被当成温度读掉 —— 六个常数的 LAMINA 进去,G23 变成一个三千多度的温度点, 没有任何一条消息会提到这件事。用 1.4 导过复合材料的,请重导一遍。
填之前先在 CAE 里看一眼列的顺序
各类型要几个常数、按什么顺序排,以 Abaqus 材料编辑器里 Mechanical → Elasticity → Elastic 那一栏实际显示的表头为准。 把 CAE 里手工建好的一个材料存成 CAE 文件再对照, 比照着记忆填要稳。列错位在这里不会报错 —— 九个正数换个顺序仍然是九个正数。

07这一栏的报错全表

报错触发条件改法
elastic: youngsModulus must be positive, got 0E 填了 0 或负数检查是不是列错位、或者占位符没替换
elastic: poissonsRatio must be between -1 and 0.5 (exclusive), got 0.5ν 取到端点或跑到区间外接近不可压缩的材料改用超弹,不要凑 0.4999
elastic: missing key(s) poissonsRatio只给了一个键,或者把 elastic 写成了裸数字两个键都要给;裸数字只有单列属性能用
elastic: values must be numbers某个值是字符串,例如带了引号或单位后缀去掉引号,也不要写 "206000 MPa"
elastic: all rows must have the same lengthtable 里各行列数不齐要么全部两列,要么全部三列(第三列温度)
elastic: "table" is emptytable 键在但数组是空的补数据,或者整块删掉
elastic: type ORTHOTROPIC requires an explicit "table"非等向类型没给 table按该类型的列布局补上 table
unknown Abaqus constant "ORTHOTROPICS"type 拼错了名字要和 Abaqus 常量一致,插件会先转成大写再找
全部逐字取自插件 1.2.1 的 materialImporterKernel.py。完整的 22 条报错对照见帮助文档第 08 节。

JSON 各字段的完整定义在帮助文档第 05 节,报错对照表在第 08 节

常见问题

Abaqus 泊松比为什么不能填 0.5?

因为等向线弹性的体积模量 K = E / [3(1 − 2ν)],ν 取 0.5 时分母正好为零,K 发散,这个本构在那一点上不成立,不是精度问题。允许范围是 −1 到 0.5 之间且两端都不含,插件的报错原文是 elastic: poissonsRatio must be between -1 and 0.5 (exclusive)。退一步填 0.4999 也不推荐,那样 K 会比剪切模量大四五个数量级,单元容易出现体积自锁,结果偏硬而且不会报错。

橡胶这类不可压缩材料在 Abaqus 里怎么定义?

不要靠把泊松比顶到接近 0.5 来近似,应该改用超弹本构(Mooney-Rivlin、Ogden、Neo-Hookean 等),并配合杂交单元,也就是单元名带 H 的那些。超弹本构自带体积项的处理,不需要你去凑一个泊松比。材料导入插件的 1.2.1 版本还不支持超弹块,遇到它不认识的属性名会把名字列出来告诉你,不会静默跳过——一块只有密度没有刚度的材料导进去看着像成功了,问题要到结果阶段才暴露。

泊松比可以是负数吗?

可以。允许区间的下限是 −1 而不是 0,负泊松比材料(拉伸时横向也变粗)在结构上是可实现的,多见于特定的点阵和折叠结构,插件对负值照收。被拦下的只有 ν 小于等于 −1,因为剪切模量 G = E / [2(1 + ν)] 在 ν = −1 处发散。如果你并没打算填负数却看到负值,多半是复制表格时带进了减号或者列错位了。

Abaqus 弹性模量填错数量级会报错吗?

不会。插件对弹性模量只检查一条:必须为正。把 SI 的 2.06e11 Pa 直接填进 mm-tonne-s 制的模型(那里应该写 206000 MPa),2.06e11 仍然是个正数,不会被拦下。量纲一致性完全由建模的人负责,Abaqus 本身也没有单位系统。这类错误只能靠结果反推,或者在导入前统一按一套单位制换算。

Abaqus 温度相关的弹性模量怎么填?

改用 table 写法,每行末尾加一列温度,也就是 [弹性模量, 泊松比, 温度] 三列。判断规则是:行比该属性本身需要的列数多出来一列,那一列就是温度,弹性本身两列,所以三列即温度相关。所有行的列数必须一致,缺列的行不会被当成室温,整块会判非法,报错是 all rows must have the same length。温度超出表格范围时 Abaqus 不外推,会一直沿用最近的端点那一行。

正交异性材料在插件里怎么定义,为什么它不做检查?

在 elastic 块里写 type,例如 ENGINEERING_CONSTANTS 或 ORTHOTROPIC,同时必须显式给出 table,否则报错 type ... requires an explicit "table"。一旦类型不是 ISOTROPIC,插件就不再做模量为正和泊松比区间那两条检查,原样透传给 Abaqus。原因是非等向类型的列数与含义随类型而变,稳定性条件是一组涉及全部常数的不等式,逐列判断没有意义。列的顺序以 Abaqus 材料编辑器里实际显示的表头为准,列错位不会报错,因为换个顺序仍然是一组正数。

这一步可以不自己做

−1 < ν < 0.5 这一条,插件在写进模型之前就查, 报错直接告诉你是哪个材料、填的哪个数。等向以外的类型它不装懂,原样透传给 Abaqus。

在线材料库需要 Abaqus 2023 或更高版本;2022 及更早只能用本地 JSON 材料库。