01哪个分析步需要哪几个属性
这三个属性不是一起用的。搞清楚当前分析步实际读哪几个, 能省掉一半「我明明填了为什么没用」的困惑。
| 分析类型 | 导热系数 | 比热 | 密度 | 说明 |
|---|---|---|---|---|
| 稳态传热(Heat transfer, Steady-state) | 必须 | 不读 | 不读 | 方程里只有传导项,没有时间 |
| 瞬态传热(Heat transfer, Transient) | 必须 | 必须 | 必须 | 储热项是 ρ·c·∂T/∂t,两个都缺一不可 |
| 热力耦合(Coupled temp-displacement) | 必须 | 必须 | 必须 | 再加弹性、膨胀系数 |
| 纯力学(Static / Explicit) | 不读 | 不读 | 看工况 | 密度什么时候必须填另有一篇 |
瞬态那一行值得单独说一句。储热项是 ρ·c 的乘积, 所以密度错了和比热错了是同一种错 —— 都表现为温度上升的速度不对,而且两者可以互相掩盖: 密度大一千倍、比热小一千倍,稳态和瞬态的结果会同时看着正常。 这也是为什么单位制的错误在热分析里特别难查。
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。
03示例库里的现成数字
插件自带的 materials_sample.json 里有三条带热属性的材料, 全是 mm 制。下面这张表照抄,最后一列是按上一节的办法反算回 SI 的结果 —— 自己算一遍,比看结论管用。
| 材料 | 导热系数 | 比热(mm 制) | 比热 ÷ 1e6 |
|---|---|---|---|
Steel_Q345 | 45 | 4.6e8 | 460 J/(kg·K) |
Al_6061_T6 | 167 | 8.96e8 | 896 J/(kg·K) |
Steel_S355_TempDep | 53 / 45 / 38(随温度) | 4.4e8 / 6.5e8 | 440 → 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.conductivity 或 thermal.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 |
完整的 JSON 字段清单在帮助文档的 JSON 格式一节。
05不报错但结果不对的三个症状
上一节那些是能被拦下来的。真正麻烦的是下面这三种 —— 导入干净、求解收敛、云图也画得出来。
- 瞬态温度几乎不变,像是热量传不进去。典型原因是比热多乘了一次 1e6(填成 4.6e14)。 储热项大了一百万倍,同样的热流下温升就是原来的百万分之一。 稳态结果这时候还是对的,因为稳态不读比热 —— 这一点最迷惑人。
- 瞬态温度瞬间就到稳态了。反过来,比热忘了乘(填成 460)。热容小了一百万倍, 时间步再小也看不出过渡过程。
- 整体温度水平差一大截,梯度形状却是对的。导热系数被「顺手」乘了一千。因为传导方程是线性的, 系数缩放不改变温度场的形状,只改变数值, 所以云图看着完全正常,只有读数不对。
unit-system mismatch,这类问题不用靠肉眼扫。单位制本身的十项对照在Abaqus 单位制怎么选那篇里,热导率和比热的行也在那张表上。
06提交前扫一眼
- 分析步是稳态还是瞬态?瞬态才需要比热和密度。
- 单元类型是不是 DC 系列或 T 结尾的?普通实体单元没有温度自由度。
- 比热除以 1e6 反算回 SI,落没落在 400~2000 这个区间?
- 导热系数有没有被多乘一个一千?金属的量级是几十到几百。
- 模型里所有材料是不是同一套单位?混用比单个填错更难查。
- 温度相关的表,最后一列是不是温度?列数不齐会被直接拦下。
前四条靠人扫还行,后两条在材料一多的时候就靠不住了。 插件导入时会把列数、正负、单位一致性都过一遍, 拦不住的那些(比如各向异性导热的数值)也会在报告里点名。