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

热分析的材料属性,错在单位上比错在数值上多得多

热分析要填的材料属性只有三样:导热系数、比热、密度。数值在任何一本手册上都查得到, 真正出事的是换算 —— 在 mm 制里导热系数的数值一个字都不用改, 比热却要乘一百万。这两条一个反直觉、一个容易漏, 而且填错之后 Abaqus 一声不吭,稳态结果还可能是对的, 瞬态的温度场就整个错了。
导热系数:数值不变
W/(m·K) 换成 mJ/(s·mm·K),分子上的一千和分母上的一千正好抵消。 钢的 45 在两套单位里都写 45
比热:乘 1e6
J/(kg·K) 换成 mJ/(tonne·K) 要乘 106。 460 变成 4.6e8 —— 这个数看着离谱,但它是对的。
稳态不需要比热
稳态传热方程里没有储热项,比热和密度填不填都不影响结果。 一到瞬态,这两个数直接决定温度上升得多快。

01哪个分析步需要哪几个属性

这三个属性不是一起用的。搞清楚当前分析步实际读哪几个, 能省掉一半「我明明填了为什么没用」的困惑。

分析类型导热系数比热密度说明
稳态传热(Heat transfer, Steady-state)必须不读不读方程里只有传导项,没有时间
瞬态传热(Heat transfer, Transient)必须必须必须储热项是 ρ·c·∂T/∂t,两个都缺一不可
热力耦合(Coupled temp-displacement)必须必须必须再加弹性、膨胀系数
纯力学(Static / Explicit)不读不读看工况密度什么时候必须填另有一篇
稳态那一行是最常被误解的:填了比热不会报错,也不会改变结果。

瞬态那一行值得单独说一句。储热项是 ρ·c 的乘积, 所以密度错了和比热错了是同一种错 —— 都表现为温度上升的速度不对,而且两者可以互相掩盖: 密度大一千倍、比热小一千倍,稳态和瞬态的结果会同时看着正常。 这也是为什么单位制的错误在热分析里特别难查。

分析步类型和单元类型要配套
传热分析步要配 DC 系列单元(DC3D8 这类),热力耦合要配 T 结尾的 (C3D8T 这类)。用普通的 C3D8 做传热分析,材料属性填得再对也没有温度自由度。 这一步和材料没关系,但排查「温度场是空的」时先看这里,比翻材料快。

02两条换算,当场推一遍

不用背,推一遍就记住了。约定 mm 制是 tonne-mm-s-N-MPa,能量单位是 mJ(毫焦),这是 mm × N 的直接结果。

导热系数:为什么数值不变

导热系数的量纲是「功率 / (长度 × 温度)」。两套单位分别是:

SI    :  W/(m·K)     =  J/(s·m·K)
mm 制 :  mJ/(s·mm·K)

把 1 个 SI 单位换过去:1 J = 1000 mJ,1 m = 1000 mm,

1 J/(s·m·K)  =  1000 mJ / (s · 1000 mm · K)
             =  1 mJ/(s·mm·K)

分子分母各有一个一千,抵消了。所以钢的 45 W/(m·K) 在 mm 制里还是写 45。 这条在所有单位换算里是唯一一个「什么都不用做」的, 也正因为如此,很多人反而不放心,硬去乘个一千 —— 那就错了一千倍。

比热:为什么乘 1e6

比热的量纲是「能量 / (质量 × 温度)」:

SI    :  J/(kg·K)
mm 制 :  mJ/(tonne·K)

1 J = 1000 mJ,1 kg = 10−3 tonne,

1 J/(kg·K)  =  1000 mJ / (1e-3 tonne · K)
            =  1000 / 1e-3  mJ/(tonne·K)
            =  1e6 mJ/(tonne·K)

这一次两个换算因子同向叠加,得到 106。 钢的 460 J/(kg·K) 在 mm 制里是 4.6e8

一个自检的办法
看到一个 mm 制的比热,除以 1e6 反算回 SI, 落在 400~1000 的多半是金属,1000~2000 的多半是塑料,水是 4180。 反算之后落在个位数或者上万,那就是填错了。 这个自检只要五秒,比事后从温度场倒推快得多。

03示例库里的现成数字

插件自带的 materials_sample.json 里有三条带热属性的材料, 全是 mm 制。下面这张表照抄,最后一列是按上一节的办法反算回 SI 的结果 —— 自己算一遍,比看结论管用。

材料导热系数比热(mm 制)比热 ÷ 1e6
Steel_Q345454.6e8460 J/(kg·K)
Al_6061_T61678.96e8896 J/(kg·K)
Steel_S355_TempDep53 / 45 / 38(随温度)4.4e8 / 6.5e8440 → 650 J/(kg·K)
这些是示例库里的演示值,用来说明格式和量级,不是设计依据。

铝的导热系数 167 差不多是钢的四倍,比热也高一截 —— 这两个数一起决定了铝件在瞬态里升温比钢件快得多但也散得快。 如果你的模型算出来相反,先回头看这两个数的单位。

最后一行是温度相关的写法,第三个数随温度从 53 掉到 38,比热则从 4.4e8 涨到 6.5e8。 钢在 600 ℃ 附近导热变差、储热变强,这是真实趋势。 温度表怎么写、Abaqus 怎么插值, 在温度相关材料表那篇里单独讲。

04JSON 怎么写,插件会拦什么

热属性都在 thermal 底下。单个常数可以直接写数字, 不用包一层对象:

{
  "name": "Steel_Q345",
  "density": 7.85e-9,
  "thermal": {
    "conductivity": 45,
    "specificHeat": 4.6e8
  }
}

要写成温度相关就换成带 table 的对象,每行最后一列是温度:

"thermal": {
  "conductivity": { "table": [[53, 20], [45, 400], [38, 600]] },
  "specificHeat":  { "table": [[4.4e8, 20], [6.5e8, 600]] }
}

导入时会被逐字拦下来的情况有这几种,报错串前缀固定是thermal.conductivitythermal.specificHeat, 按这个前缀能一眼定位到是哪个属性:

报错原因
thermal.conductivity: value must be positive, got -45导热系数填了负数或零
thermal.specificHeat: value must be positive, got 0比热填了零。瞬态里这会让储热项消失
thermal.conductivity: "table" is empty写了 table 但里面是空数组
thermal.conductivity: all rows must have the same length有的行两列有的行一列,通常是漏了某一行的温度
thermal.specificHeat: missing key(s) value写成了对象但里面既没有 value 也没有 table
报错串取自插件内核 1.5.0,%g 位置会替换成你填的实际数值。
有一个不对称:各向异性导热不查正负
导热系数只有在类型是各向同性时才检查每个数是不是正的。 换成正交异性或完全各向异性,插件不查。 这不是漏掉了 —— 各向异性导热张量的分量之间有约束关系, 单独看某一个分量的正负判断不出对错。所以那种情况下的数值合理性, 只能靠你自己。比热则是无条件检查的。

完整的 JSON 字段清单在帮助文档的 JSON 格式一节

05不报错但结果不对的三个症状

上一节那些是能被拦下来的。真正麻烦的是下面这三种 —— 导入干净、求解收敛、云图也画得出来。

  1. 瞬态温度几乎不变,像是热量传不进去。典型原因是比热多乘了一次 1e6(填成 4.6e14)。 储热项大了一百万倍,同样的热流下温升就是原来的百万分之一。 稳态结果这时候还是对的,因为稳态不读比热 —— 这一点最迷惑人。
  2. 瞬态温度瞬间就到稳态了。反过来,比热忘了乘(填成 460)。热容小了一百万倍, 时间步再小也看不出过渡过程。
  3. 整体温度水平差一大截,梯度形状却是对的。导热系数被「顺手」乘了一千。因为传导方程是线性的, 系数缩放不改变温度场的形状,只改变数值, 所以云图看着完全正常,只有读数不对。
一个模型里混用两套单位是最坏的情况
上面三种至少还是系统性的偏差。真正查不动的是一部分材料用 SI、 一部分用 mm 制 —— 界面上的热流会算出一个既不属于任何一套单位、 也没有物理意义的结果。插件 1.4 起自带的材料健康检查会做跨材料的单位交叉比对, 发现两组材料的量级不属于同一套单位时会提示unit-system mismatch,这类问题不用靠肉眼扫。

单位制本身的十项对照在Abaqus 单位制怎么选那篇里,热导率和比热的行也在那张表上。

06提交前扫一眼

  • 分析步是稳态还是瞬态?瞬态才需要比热和密度。
  • 单元类型是不是 DC 系列或 T 结尾的?普通实体单元没有温度自由度。
  • 比热除以 1e6 反算回 SI,落没落在 400~2000 这个区间?
  • 导热系数有没有被多乘一个一千?金属的量级是几十到几百。
  • 模型里所有材料是不是同一套单位?混用比单个填错更难查。
  • 温度相关的表,最后一列是不是温度?列数不齐会被直接拦下。

前四条靠人扫还行,后两条在材料一多的时候就靠不住了。 插件导入时会把列数、正负、单位一致性都过一遍, 拦不住的那些(比如各向异性导热的数值)也会在报告里点名。

常见问题

Abaqus 的比热在 mm 单位制下为什么是 4.6e8 这么大的数?

因为 mm 制的能量单位是 mJ、质量单位是 tonne。1 J/(kg·K) 换算成 mJ/(tonne·K) 要乘 1e6:能量从 J 到 mJ 乘 1000,质量从 kg 到 tonne 除以 1000,两个因子同向叠加。所以钢的 460 J/(kg·K) 写成 4.6e8。看到 mm 制的比热要反算除以 1e6 来自检,落在 400 到 2000 之间才是常见材料的量级。

Abaqus 导热系数在 mm 单位制下要换算吗?

不用换,数值一个字都不改。导热系数的 SI 单位是 W/(m·K) 也就是 J/(s·m·K),mm 制是 mJ/(s·mm·K)。能量从 J 到 mJ 要乘 1000,长度从 m 到 mm 也要除以 1000,两个因子正好抵消。钢的 45 W/(m·K) 在 mm 制里还是写 45。这是所有单位换算里唯一一个不用动的,反而经常被人多乘一个 1000。

稳态传热分析要不要填比热和密度?

不用。稳态传热方程里没有储热项 ρ·c·∂T/∂t,比热和密度都不参与计算,填了不报错也不影响结果。一旦改成瞬态分析步,这两个就都是必须的,而且它们是以乘积形式出现的,所以密度错和比热错的表现完全一样,都是温升速度不对。

Abaqus 里比热填错了会报错吗?

数值本身填错不会报错。Abaqus 只在比热是负数或者结构不合法时才拒绝。用材料参数导入插件从 JSON 导入时会多一道检查,比热小于等于零会被拦下来并给出 thermal.specificHeat: value must be positive 的提示,温度表列数不齐会给 all rows must have the same length。但量级错了一百万倍这种,任何一道检查都拦不住,只能靠反算自检。

为什么模型算出来温度几乎不上升?

最常见的是比热多乘了一次 1e6,储热项被放大一百万倍,同样的热流下温升就是原来的百万分之一。判断办法是把比热除以 1e6 看是不是落在合理区间。要注意的是这种错误在稳态分析里完全看不出来,因为稳态不读比热,只有做瞬态才会暴露。另一个可能是单元类型选错了,普通实体单元没有温度自由度。

这一步可以不自己做

比热除以 1e6 反算回 SI 只要五秒,但材料一多就没人真的去算。 插件导入时会把正负、列数、以及跨材料的单位一致性一起过一遍。

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