搞过 ABAQUS 热辐射分析的朋友应该都有这种体验:模型建得挺漂亮,材料参数也填了,一提交计算,温度要么纹丝不动,要么直接炸到几万度,更离谱的还有算到一半“负开尔文温度”的报错。十有八九不是物理模型写错,而是单位设置在背后捣鬼。ABAQUS 没有内置单位制,任何分析都靠你喂给求解器一套自洽的单位,它才不会好心提醒你哪里不一致。
这篇文章我就用一个最典型的热辐射冷却实例,把单位设置的前因后果、辐射边界的处理方式、以及我踩过的坑一次性捋清楚。适合刚上手热分析的新手,也适合做焊接仿真、电子散热、热处理仿真时被“单位玄学”折磨过的老伙计。看完以后,你可以直接照着这个思路搭自己的辐射模型,至少不用再为“温度不降”和“温度爆炸”这两件事浪费时间。
1. ABAQUS单位设置:热分析翻车第一元凶
1.1 为什么说ABAQUS没有单位制
很多从ANSYS转过来的朋友一开始很不习惯:ANSYS里还有明确的单位选项卡,ABAQUS里连个单位下拉框都找不到。这是因为ABAQUS求解器只认数字,不认单位。你在长度输入框里填1,它不知道这是1米、1毫米还是1英寸,只有当你把所有物理量都输进去之后,整个方程组的量纲才决定这个1到底意味着什么。
所以ABAQUS的要求是你必须保证所有输入量自洽。说得直白点,你选择了毫米作为长度单位,那么力的单位就是牛顿,质量单位就得用吨,密度就得写成吨每立方毫米,而不是千克每立方米。很多人第一次做热分析就是栽在这里:几何按毫米建,密度却顺手填了7850,比热也填了450,结果热容算出来差了12个数量级,温度曲线直接变“心电图”,怎么看怎么不对劲。
1.2 热分析最常用的两套单位组合
做结构分析时,大家最熟悉的是mm、N、tonne、s这套组合,应力单位正好是MPa,后处理数字很漂亮。到了热分析,这套单位依然成立,只是热相关的导出量都要跟着换算。下面这张表是我做每次热分析前必查的对照表,建议直接存起来。
| 物理量 | SI单位制(m-kg-s) | mm-tonne-s单位制 | 换算要点 |
|---|---|---|---|
| 长度 | m | mm | 几何尺寸差1000倍 |
| 质量 | kg | tonne | 密度要跟着改 |
| 密度(钢) | 7850 kg/m³ | 7.85e-9 tonne/mm³ | 密度数值差12个数量级 |
| 热导率 | W/(m·K) | mW/(mm·K) | 数值恰好一样 |
| 比热容 | J/(kg·K) | mJ/(tonne·K) | 1 J/(kg·K)=1e6 mJ/(tonne·K) |
| 热流密度 | W/m² | mW/mm² | 1 W/m² = 1e-3 mW/mm² |
| 对流换热系数 | W/(m²·K) | mW/(mm²·K) | h=10对应0.01 |
| Stefan-Boltzmann常数 | 5.67e-8 | 5.67e-11 | 必须按单位制改 |
| 绝对零度 | -273.15℃ | -273.15℃ | 温度用℃时必须配合使用 |
这里最容易被忽略的是Stefan-Boltzmann常数。在SI单位制下,它等于5.67e-8 W/(m²·K⁴),这是大学物理课本上的值。但如果你在mm-tonne-s单位制下直接填这个值,辐射热流会算错整整3个数量级。正确做法是填5.67e-11 mW/(mm²·K⁴)。另外,ABAQUS里还要在物理常数里指定绝对零度是多少,默认的-273.15对应摄氏度温标。如果你模型里温度用的是摄氏度,这个值就不用动;如果你直接输入开尔文温度,绝对零度就要改成0。
1.3 一个单位错的经典画面
我见过最典型的翻车现场是这样的:某同学用毫米建了一个100 mm的钢板,材料密度填了7850,比热填了450,热导率填了45,其他参数也都按直觉来。结果一算,整个板的温度几乎不动,冷却1000秒才降了几度。原因很简单:密度填成7850意味着7850 tonne/mm³,比热450乘以这个密度,热容比真实值大了12个数量级,板子当然“慢得像座山”。这种问题最难查,因为它不报错,后处理云图还特别漂亮,只有对照物理常识才发现不对。
所以我现在每开一个新模型,第一件事不是画几何,而是先把单位制写在模型Note里,再把材料参数一个个对着上表换算。看着繁琐,但比之后排查一整天划算得多。
2. 热辐射分析的三种常用做法
2.1 辐射到环境(Surface radiation to ambient)
这是最简单也最常用的做法,适用于物体表面向周围环境辐射散热,不关心环境里其他物体的相互辐射。比如一块高温钢板放在空气中、焊接件冷却、电子元件表面散热,都可以先用这种边界条件把辐射散热算进去。
物理公式就是Stefan-Boltzmann定律:
q = εσ(T⁴ - T∞⁴)
其中ε是表面发射率,σ是Stefan-Boltzmann常数,T是表面温度,T∞是环境温度。注意这里温度必须是绝对温度,这也是为什么刚才强调物理常数里绝对零度一定要设置对。在ABAQUS/CAE里操作路径是:Interaction模块下创建InteractionProperty,类型选Radiation,输入发射率ε;然后创建Interaction,类型选Surface radiation,选择你要辐射的表面,输入环境温度。提交计算时,ABAQUS会自动在表面节点上施加这个非线性热流。
2.2 空腔辐射(Cavity radiation)
如果你的问题里存在多个表面之间互相辐射,而且表面围成了一个相对封闭的空腔,就不能再用简单的辐射到环境了。常见场景包括真空炉内的热处理、密闭腔体内的电子器件散热、火箭发动机燃烧室壁面等。
空腔辐射在ABAQUS/Standard里是专门的功能,你需要把所有参与辐射的表面定义成一个cavity,软件会计算表面之间的角系数,然后求解每个表面的净辐射热流。这个功能比辐射到环境复杂不少,但也更接近真实物理过程。做这种分析时,表面必须封闭或基本封闭,所有表面法向要指向腔体内部,角系数计算才不会出问题。每次定义完cavity后,我都会先跑一个只有辐射的稳态小模型,确认没有负温度或能量不守恒,再加其他热源。
2.3 面与面辐射(S2S)和其他选择
如果你用的是Abaqus/CFD模块,或者模型是那种特别开阔、表面之间遮挡关系复杂的场景,可以选择surface-to-surface辐射模型,也就是常说的S2S。S2S的优势是角系数计算更灵活,能处理大开度、多遮挡的几何,但计算量明显更大。Abaqus/Explicit在某些显式热分析场景下也用面辐射算法,但实际工程里大家都还是优先用Standard的cavity或surface radiation。
对大多数做焊接散热、热处理的兄弟来说,Surface radiation to ambient基本够用了。什么时候升级到cavity或S2S?我的判断标准是:如果环境里存在另一块温度很高或很低的固体表面,而且距离很近,它对目标体的辐射换热不可忽略,那就不能偷懒,得用互辐射。
3. 实操:一块钢板在真空里靠辐射冷到室温
3.1 问题设定与几何
下面这个例子是我带新人时最喜欢用的入门题,简单但把辐射的主要特性全暴露出来了。一块100 mm×100 mm×10 mm的钢板,初始温度500℃,放在真空环境里,环境温度稳定在20℃。真空中没有空气对流,唯一的散热途径就是表面辐射。钢板表面发射率取0.8。
为什么选真空?因为一旦把对流加进来,曲线形状就会变复杂,不容易看出辐射T⁴项的作用。这个模型在任何版本的ABAQUS都能跑,几何也简单,非常适合用来验证自己的单位设置是否正确。
几何建模我用的是3D可变形实体,草图100×100,拉伸10 mm。材料按钢来定义。这里必须用mm-tonne-s单位制下的参数:
- 热导率:45 mW/(mm·K)
- 密度:7.85e-9 tonne/mm³
- 比热容:4.5e8 mJ/(tonne·K)
这三个数你对着前面的表看一眼就明白,热导率的数值在两种单位制下恰好一样,但密度和比热容完全不是直觉里的7850和450。
3.2 材料、分析步、边界条件的完整配置
材料定义完成后,创建Heat Transfer分析步,类型选Transient瞬态。总时间先给3600秒,最大增量步数放宽到10000。初始增量可以给0.01秒,最小增量给1e-6秒,最大增量给10秒。增量步太小会算得慢,太大可能不收敛,后续可以根据实际迭代调整。
初始温度场用Predefined Field定义,类型选Temperature,给整块板加500℃。表面辐射这个边界条件是重头戏:先建一个Radiation类型的InteractionProperty,发射率填0.8;再创建Surface radiation相互作用,选择除了底部之外的所有外表面,环境温度填20℃。实际上如果你把底部也选上也没关系,只要边界条件方向没错,影响不大。
还有一点千万别忘,在Model模块里找到Physical Constants,把Stefan-Boltzmann常数设成5.67e-11,绝对零度保持-273.15。这一步漏掉的话,ABAQUS会用默认的SI常数,你的模型在mm单位制下辐射功率会被放大1000倍,温度会疯狂下跌甚至跌破绝对零度。
3.3 网格与求解控制
网格用热分析单元DC3D8,八节点线性传热六面体单元。全局种子设5 mm,这个尺寸对100 mm的板子足够了,网格总数大概800个单元。大家可能会问为什么不用二次单元DC3D20,精度不是更高吗?但对于纯热辐射冷却,线性单元加细网格已经完全满足工程需求,而且非线性迭代更稳定,算得也快。
求解控制里有一个对辐射特别关键的参数:Max allowable temperature change per increment,中文界面叫“每个增量步允许的最大温度变化”。辐射换热是T⁴关系,温度越高非线性越强。如果允许温度变化太大,求解器容易震荡不收敛。我一般设20℃,如果遇到收敛困难就压到10℃甚至5℃,代价是增量步变小、计算时间变长。
输出设置上,场输出每10秒存一帧,历史输出记录几何中心点和某个角点的温度—时间曲线。这样既能看整体云图,又能看局部降温历程。
3.4 后处理:看趋势,别只盯云图
算完以后打开ODB,先看几个时刻的温度云图。你会很直观地看到角点降温最快,因为角点有多个外表面同时在辐射散热;中心区域降温最慢,热量只能通过热传导往外走,再由表面辐射带走。
如果提取中心点和角点的温度曲线,还能看到另一个很有意思的现象:冷却速度前期很快,后期越来越慢。这是因为辐射热流正比于T⁴,温差大的时候散热猛,等表面温度接近20℃时,T⁴和环境温度的T⁴差距越来越小,散热也就越来越吃力。这个趋势和直观感受完全一致,也是辐射区别于对流的典型特征。要是你的曲线上看不到“先快后慢”的形状,先别调参数,回头检查单位。
另外可以顺手做一个验证:把辐射边界条件删掉,只保留绝热边界,重新算一遍。你会发现温度永远停在500℃不变,这从反面证明了在这个模型里辐射是唯一的散热通道,边界条件施加正确。
4. 热辐射应用扩展与仿真边界
4.1 焊接仿真里的辐射
焊接仿真里的热量输入通常由移动热源实现,但很多人做完热源之后忽略了高温表面的辐射散热。焊接熔池附近温度能到1500℃以上,此时辐射散热量不可小觑。如果你只加对流,冷却曲线会明显偏慢,残余应力和变形计算结果都会失真。
实际操作时,我一般会在所有外表面同时加Surface film condition(对流)和Surface radiation(辐射),对流系数按自然对流取5~15 W/(m²·K),换算到mm-tonne-s单位就是0.005~0.015 mW/(mm²·K),辐射发射率按材料氧化状态取0.6~0.9。高温段辐射占主导,低温段对流开始显作用,两者合起来才是真实的散热边界。
4.2 电子散热、热处理和晶粒尺度模型
电子器件散热也是辐射经常被忽略的场景。自然对流环境下,小型散热片的辐射散热比例可能占到15%~30%,不能直接省略。真空环境下的电子设备更是只能靠辐射和传导散热。热处理和真空炉分析则必须走cavity radiation路线,因为炉墙、工件和加热元件之间互相辐射,角系数的影响很大。
如果你后面涉及晶粒尺度的Voronoi多晶模型,配合Cohesive界面模拟晶界失效,单位制同样要格外小心。几何尺度一旦从毫米缩小到微米,密度、比热、热导率、界面刚度都要整体换算,否则热力耦合分析里温度场先爆,后面的应力场全是废的。
4.3 热力耦合分析里的辐射
做热力耦合时,辐射边界条件的设置方式和纯传热分析基本一样,只是分析步类型换成Coupled temperature-displacement。需要注意的细节是,辐射对应的表面在变形后可能改变朝向和面积,ABAQUS在几何非线性开关打开时会自动更新表面方向和面积,但计算代价更高。如果变形量不大,可以只做顺序耦合:先算温度场,再把温度场作为预定义场导入应力分析,通常精度足够。
5. 常见问题与排查技巧实录
5.1 温度完全不降或结果离谱,先查单位
每次有朋友发我一张“诡异云图”,我第一句话都是:把材料参数和Stefan-Boltzmann常数截图发我。90%的问题都出在单位上。排查顺序建议这样:先看几何尺寸量级,再看密度和比热是否匹配mm-tonne-s,最后看σ是不是5.67e-11而不是5.67e-8。绝对零度也顺手看一眼,很多辐射算到一半报“温度低于绝对零度”,就是因为σ或者环境温标没设置对。
5.2 辐射计算不收敛怎么办
辐射的T⁴项是非线性的绝对主力,尤其前期温差大时,如果增量步不够小,迭代很容易原地振荡。我的经验是先把初始增量步压到0.001秒量级,再把最大允许温度变化设成10℃,同时打开自动增量步,让求解器自己控制。模型越大,越不要把步长给得太乐观。另外检查一下有没有表面发射率填了0,发射率为0意味着完全绝热,某些接触部位可能出现温度突变。
5.3 作业中断不了或卡死的应急处理
有时候提交了错误参数,想终止任务却发现Job Manager里的Cancel点了没反应,尤其是Standard在非线性迭代里卡住时,看起来就像死机。先在Job Manager点Terminate等一会儿,一般会给kernel几秒时间收尾。如果一直没反应,去ABAQUS的临时目录里把jobname.lck文件删掉,再在系统进程里结束standard.exe或者ABAQUS对应的求解进程。重启后如果ODB还能正常打开,用Restart功能接着算就行。不要一边杀进程一边继续写同一个模型,ODB很容易写坏,那就真要重头再来了。
5.4 libpng error和图片导出问题
Abaqus后处理里保存PNG图片时偶尔会遇到libpng error,这个报错跟你的计算结果没关系,多半是显示缓存或者视口尺寸的问题。我的土办法是先把输出格式换成TIFF,基本都能绕过去。着急用PNG的话,把视口尺寸调小一点再导出,成功率很高。如果一打开CAE就报libpng相关错误,建议重启软件并清空临时目录,多半能恢复正常。
5.5 怎么找到没连接到单元上的节点
这个问题在做装配体、布尔运算、网格编辑之后特别常见。节点没连上单元,算热传导时它没有传热方程,结果就会产生“孤立点”或者局部异常。最靠谱的检查方法是用Python对账,遍历所有单元,把单元用到的节点集合提取出来,再和全模型节点集合求差集,剩下的就是悬空节点。
from abaqus import mdb a = mdb.models['Model-1'].rootAssembly inst = a.instances['PART-1-1'] all_labels = [n.label for n in inst.nodes] used_labels = set() for elem in inst.elements: used_labels.update(elem.connectivity) orphans = [label for label in all_labels if label not in used_labels] print('孤立节点标签:', orphans)在CAE的Mesh模块里也可以用Query功能逐个检查可疑区域,但模型大了还是脚本效率高。找到孤立节点后,要么用Merge命令把它合并到附近的单元上,要么直接删掉。
5.6 GPU加速在热分析里的实话
很多人看到“GPU加速”就觉得能拯救大模型。Abaqus的GPU加速主要用于Explicit显式分析,对Standard里的传热、辐射这类高度非线性求解帮助十分有限。你就算在job命令里加了gpus=1,大部分辐射迭代还是CPU在干活。想加快热辐射分析,更实在的方向是多核并行、优化网格数量,以及把增量步控制参数调合理,而不是指望GPU一开全速起飞。
最后说个我的小习惯
每次新建模型,我都会在Model模块的Edit Attributes里加一条Note,把当前模型用的单位制、Stefan-Boltzmann常数、绝对零度、关键材料参数全部写进去。模型文件传给别人、或者自己一个月后再打开,一看Note就能恢复记忆,省去大量重新推算的时间。热辐射分析本身不复杂,单位制、发射率、环境温度、物理常数,满打满算就这几件事。但正是这些不起眼的细节,决定了你的温度曲线到底是一条合理的冷却曲线,还是一张“领导看了会沉默、自己看了会流泪”的废图。