Abaqus 传热与热应力分析(1) – 分析能力
我最早接触Abaqus的传热与热应力分析,不是从理论学习开始的,而是被一个实际项目逼的——客户要求评估一台设备在长时间运行后,机壳内部发热元件周围的温度分布,以及因为温度不均匀产生的热应力会不会导致焊缝开裂。当时我的第一反应是“温度场计算不难,难的是温度算完以后怎么把它变成应力分析的载荷”。后来把Abaqus的热分析能力从头到尾梳理了一遍,才发现它在这方面的配套远比我想象中完整。
这篇文章是这个系列的起点,先把Abaqus在传热与热应力方向到底能干什么、有哪些分析类型、每个类型适用什么场景讲清楚。适合刚入门热应力仿真的结构工程师,也适合那些已经在做纯力学分析、打算往热-力耦合方向扩展的人。后面几篇会陆续展开热源加载、接触传热、焊接残余应力、电子散热等具体案例,但能力框架是必须先搭好的。
1. 传热分析能力:从稳态到瞬态的完整覆盖
传热分析是整个热应力分析的前置基础,温度场算得准不准,直接决定了后面热应力计算的可靠性。Abaqus在这一块的能力覆盖比很多人想象的宽,稳态、瞬态、线性、非线性全都支持,而且可以和结构分析无缝衔接。
1.1 稳态与瞬态:两类核心分析场景
稳态传热解决的是“长时间运行后温度不再变化”的问题。典型场景比如散热器在恒定功耗下的平衡温度、稳定工况下的发动机机体温度场。这类分析用Heat Transfer分析步,时间是虚的,最终只关心平衡状态。求解上相对简单,因为方程里没有时间项,收敛问题也少。
瞬态传热则关心“温度随时间怎么变化”,比如淬火过程中的冷速曲线、电子设备开机后的升温过程、焊接过程中的热循环。这类分析必须定义时间步、初始温度和材料的热物性随温度的变化关系,计算量比稳态高一个量级。
我平时做项目时,一般先用稳态分析快速判断温度量级是否合理,再用瞬态分析做精细化研究。这里有个经验要分享:在Abaqus里,稳态热分析和瞬态热分析用的是同一个分析步类型Heat Transfer,区别只在于你有没有开启时间积分效应。具体来说,瞬态分析在分析步设置里需要给定时间周期和增量步,稳态则不用管时间。
注意:Abaqus的Heat Transfer分析步默认是瞬态的。如果你想做稳态分析,把分析步的响应类型改成Steady State即可。新手容易在这里踩坑,算出来的结果怎么都觉得不对,其实是分析步类型选错了。
1.2 三种热量传递方式在Abaqus中的实现
传热的三种基本方式——热传导、热对流、热辐射——在Abaqus里都有对应的处理手段,但难易程度差距很大。
热传导是默认行为,只要你定义了导热系数,单元之间就会自动传热,不需要额外设置。温度梯度越大、导热系数越高,传导的热量越大,这是所有传热分析的基础。
热对流在Abaqus里用Film Condition(膜条件)实现,对应的关键词是*SFILM。你需要给定两个参数:膜系数(Heat Transfer Coefficient)和环境温度(Sink Temperature)。膜系数反映对流换热的强度,它可以是常数,也可以随温度变化,甚至可以随坐标变化。自然对流和强制对流的区别,本质就是膜系数的量级不同——自然对流一般在5~25 W/(m²·K),强制风冷可以到50~500 W/(m²·K),水冷更高。
热辐射是最麻烦的。Abaqus提供了两种辐射处理方式:一种是简化模型,用SRAD或者等效辐射换热系数近似,适合辐射不是主导热路径的场景;另一种是Cavity Radiation(腔体辐射),通过RADIATE定义辐射面,需要指定辐射系数(Emissivity)和环境温度。腔体辐射强非线性,经常导致收敛困难,后文问题排查里我会专门讲这块的坑。
有一种常见误解,以为做热分析就必须把三种传热方式全部定义上。实际工程里要根据场景判断主导机制,比如自然散热的产品,辐射占比往往不容忽视;而强制风冷的系统,很多时候辐射可以近似忽略。全定义上不仅增加计算负担,还经常带来收敛问题。
1.3 传热单元与网格适配
传热单元的命名规则和应力单元很像,但前缀不同。平面问题用DC2D3、DC2D4,轴对称用DCAX3、DCAX4,实体用DC3D8、DC3D10、DC3D20。这些单元的自由度就是温度,没有位移自由度,所以不能直接在上面加力学边界条件。
热分析对网格的要求和结构分析不完全一样。温度场的分布通常比应力场更平滑,所以对网格质量的要求略低,但在温度梯度很大的区域——比如焊接熔池附近、淬火表面——仍然需要局部细化。高阶单元(二次单元)在热分析中的优势不如在结构分析中明显,因为温度场是标量场,线性单元配合足够细的网格就能得到不错的结果。
还有一个很关键的点,如果你计划做顺序耦合热应力分析,热分析网格最好和应力分析网格保持一致,这样可以省去温度场插值的环节,精度也不打折。如果网格不一致,Abaqus在映射温度场时会做插值处理,虽然方便但会引入一定误差,尤其是在温度梯度大的区域。
2. 热应力分析的两条技术路线:顺序耦合与完全耦合
传热分析单独做没有太大工程意义,大家更关心的是温度变化引起的热应力。Abaqus提供了两种热-力耦合思路,理解清楚这两条路线的区别和适用场景,是整个热应力分析中最关键的概念。
2.1 顺序耦合:先算温度场,再做应力场(最常用)
顺序耦合(Sequential Coupling)的思路很直白:先用Heat Transfer分析步算出温度场随时间的演化,然后把这个温度场作为预定义场(Predefined Field)加载到结构分析中,从而计算热应力和热变形。
在Abaqus/Standard中,顺序耦合的核心操作是:结构分析步里通过*Temperature或者Predefined Field来读入之前保存的温度场结果文件(.odb或.fil)。温度场会以节点温度的形式作为载荷施加,然后结合材料的热膨胀系数计算热应变。
顺序耦合成立的前提是:温度场不受应力场影响。换句话说,结构的变形和应力状态不会显著改变温度分布。这在绝大多数工程问题中是成立的——比如我们分析一个机箱外壳的热应力,外壳的变形不会反过来影响内部发热元件的温度。焊接残余应力分析通常也采用顺序耦合,因为焊接热过程主要由热输入和散热条件决定,焊件变形对温度场的影响在焊接过程中往往可以忽略。
顺序耦合的优势是计算效率高、稳定性好、各步骤可以独立调试。先单独把温度场算准,再去做应力分析,出了问题容易定位。这也是我最推荐初学者先用起来的方法。
2.2 完全耦合:温度与应力同时求解(多物理场互相影响)
完全耦合分析(Fully Coupled Temperature-Displacement Analysis)则是在同一个分析步中同时求解温度场和位移场。它使用Coupled Temperature-Displacement单元(比如C3D8T),自由度既包含温度也包含位移。
什么时候必须用完全耦合?当应力场显著影响温度场的时候。典型的例子包括:高速摩擦生热过程中接触压力影响接触界面的热流分布;金属成型过程中塑性变形产生的热量反过来改变材料软化状态;热轧、锻造过程中的变形热。这些场景里,力学状态和热状态强耦合,分开算就失真了。
完全耦合的计算代价比顺序耦合大得多,非线性也更强,收敛难度成倍增加。关键是,你需要判断问题到底需不需要这么复杂的耦合。我见过很多工程师一上来就用完全耦合,问原因也说不出所以然,只是觉得“耦合听起来更高级”。这样自找麻烦完全没有必要。能用顺序耦合解决的,就用顺序耦合。
做个类比:顺序耦合相当于先拍一张照片再量照片里物体的尺寸,完全耦合相当于直播中实时测量演员的身高。前者把过程分成了两个独立环节,后者必须同步进行。如果演员在拍照时没有动,量尺寸照样准确;但如果演员一边拍照一边移动,那就必须用直播方式了。
2.3 绝热分析:高速变形中的局部升温
除了一般的传导型热分析和耦合分析,Abaqus还支持一种特殊的绝热分析(Adiabatic Analysis),用于处理高应变率下材料因塑性变形而瞬时升温的问题。
绝热分析的核心假设是:变形速度太快,热量来不及传导,塑性功全部转化为局部温升。典型应用包括高速冲击、切削、冲压中的绝热剪切带模拟。这种分析不显式计算热传导,而是在每个积分点上直接计算温升增量。
绝热分析在Abaqus/Explicit中支持得特别好,设置也比较简单——在材料属性里定义非弹性热分数(Inelastic Heat Fraction,通常取0.9)和热容,然后在分析步中开启绝热分析即可。配合热词里提到的“abaqus焊接仿真”,注意绝热分析和焊接热分析是两回事,焊接的变形速率低,热量有充分时间传导,必须用常规热分析,不能套用绝热假设。
3. 材料参数与前处理的工程细节
热分析的前处理比纯结构分析多了一倍的材料参数,而且这些参数大多是温度相关的非线性数据。这一块做不细,后面的计算结果就是空中楼阁。我在实际项目中,材料数据的整理花费的时间经常占到整个项目周期的三分之一以上。
3.1 材料属性的完整清单与获取渠道
我发现很多做结构分析的工程师,第一次接触热分析时往往会忽略一些关键的材料参数。整理了一份清单,你可以对照检查。
| 参数 | 符号 | 单位 | 说明 |
|---|---|---|---|
| 导热系数 | k | W/(m·K) | 温度相关,金属随温度升高通常下降 |
| 比热容 | c | J/(kg·K) | 温度相关,某些材料相变时突变 |
| 密度 | ρ | kg/m³ | 通常视为常数 |
| 热膨胀系数 | α | 1/K | 有瞬时值和平均值两种定义方式,极易混淆 |
| 对流换热系数 | h | W/(m²·K) | 由环境条件决定,不是纯材料属性 |
| 辐射系数 | ε | 无量纲 | 0~1之间,取决于表面状态 |
| 潜热 | L | J/kg | 相变分析时需要,如熔化/凝固 |
| 非弹性热分数 | η | 无量纲 | 塑性变形转化为热量的比例,通常取0.9 |
这些参数从哪来?金属材料的中文手册和数据表、MatWeb、ASM International的数据是常用来源。但一定要注意数据适用的温度范围,很多手册给出的常温数据和高温数据差别很大,外推使用会带来巨大误差。
经验:处理高温问题时,一定要关注材料的导热系数和比热容随温度的变化。我曾经处理过不锈钢热应力问题,如果使用常数的导热系数计算,热应力结果比使用温度相关数据时低30%以上。高温下材料性能退化严重,这个影响是实打实的。
热膨胀系数的定义是个大坑。Abaqus中输入的通常是瞬时热膨胀系数(Instantaneous Thermal Expansion Coefficient),它定义的是某个温度点的瞬时膨胀速率。而很多材料手册给出的却是平均膨胀系数(Average Coefficient),它定义的是从参考温度到当前温度的平均膨胀应变率。两者混用会导致热应力结果完全错误。一个简单的检查方法:用你定义的系数计算一下,在某个温度下的热应变是否和实际测量值一致。
3.2 初始条件、边界条件与热载荷的施加
热分析的边界条件类型比结构分析多,而且各有各的关键词和注意事项。
初始温度通过*Initial Conditions, Type=TEMPERATURE定义,指定节点或区域的初始温度场。如果是完全耦合分析,还要考虑初始应力状态。瞬态分析中初始温度的准确性很重要,它直接影响起步阶段的温度场演化。
温度边界条件用*Boundary,施加在节点上,固定该节点的温度值。这和结构分析中固定位移的逻辑是一样的。注意温度边界条件可以随时间变化,通过幅值曲线(Amplitude)定义升温或降温过程。
热流密度有两种:*CFLUX施加集中热流(单位为W),DFLUX施加体积热流或表面热流(单位为W/m³或W/m²)。焊接仿真中的移动热源通常用DFLUX结合用户子程序DFLUX实现,这也是热词“abaqus焊接仿真”中最核心的技术点之一。在散热器设计中,*CFLUX可以模拟芯片的发热功耗。
对流边界用SFILM,辐射边界用SRAD或者*RADIATE。辐射和对流可以同时施加在同一个面上,互不冲突,因为它们在物理上是并行传热路径。
这里有一个细节需要注意:施加对流或辐射边界条件时,需要指定一个参考温度(环境温度),这个温度可以随位置变化,也可以随温度变化。如果环境温度是空间的函数,比如不同高度的水温不同,需要定义空间分布的膜条件。
3.3 接触传热:热接触与间隙导热
机械装配体中,零件之间的接触面也是热传递的主要通道。Abaqus提供了两种接触传热方式:间隙导热(Gap Conductance)和间隙热生成(Gap Heat Generation)。
间隙导热定义的是接触面之间单位面积的热传导能力,单位是W/(m²·K)。它的值通常和接触压力、间隙大小、温度有关。压力越大、间隙越小,间隙导热系数越大。软件支持将间隙导热系数定义为接触压力的函数,这样可以更真实地模拟装配连接面的导热行为。
间隙热生成则是摩擦生热的来源。接触面上的摩擦功会转化为热量,一部分进入两个接触体。这个功能在刹车、轴承、机械加工等工况的分析中非常重要。在CONTACT PAIR或CONTACT中定义摩擦和热生成参数后,软件会自动计算摩擦热流并分配到两个接触体的表面。
装配体热分析很容易忽略接触热阻的存在。如果零件之间是螺栓连接或者单纯的面面接触,接触面两侧的温度会有明显跳跃。不做热接触设置的话,两个零件会像一个整体一样传热,温度场就会算得偏温和,进而导致热应力被低估。这个误差在某些场景下能大到翻倍。
4. 求解设置与效率优化
热分析的求解设置和结构分析有不少差异,尤其是瞬态分析和强非线性问题。做热分析的年轻工程师经常在这块翻车,其实很多问题只要理解了背后的数值原理,是能提前规避的。
4.1 瞬态热分析的时间步控制
瞬态热分析中,时间步长的选择直接决定计算能否收敛和结果的精度。Abaqus/Standard的Heat Transfer分析步默认使用向后欧拉(Backward Euler)时间积分,这种格式无条件稳定,也就是说理论上不管时间步多大,计算都不会发散。
但是!无条件稳定不等于结果正确。时间步过大时,温度场的响应会被数值抹平,瞬态的快速变化细节会丢失。一个简单的准则是:在一个时间步内,温度变化不应超过某个限度(比如总温升的10%),否则时间分辨率不够。以焊接热循环为例,热源中心经过时温度在极短时间内迅速升降,如果时间步设得太大,峰值温度会被严重低估,后续热应力结果也必然不准。
实际工程中我常用的策略是:设置初始时间增量较小(总分析时间的1/100甚至更小),最大时间增量为总时间的1/20~1/10,让软件根据迭代情况自动调整。Abaqus的自动时间步算法在热分析中表现不错,关键是给它一个合理的初始值和上下边界。
对于温度梯度极陡的场景——比如激光加热、感应加热、表面淬火——时间步和空间网格必须同时满足分辨率要求。这里有个经验法则:热量在单个时间步内传到的距离不应超过最小单元尺寸的1~2倍。也就是说,时间步、热扩散系数和网格尺寸三者是绑定的,不能单独调整。
4.2 非线性求解与收敛策略
热分析的非线性来源主要有三个:材料热物性随温度变化、辐射传热的四次方定律、接触热导随压力变化。
辐射传热的非线性是最棘手的。两个表面之间的辐射换热量与温度的4次方成正比,导致方程组的非线性程度极高。当辐射是主传热路径时,收敛往往很困难。我的经验是:先在辐射系数较小的条件下算出一个初步解,再逐步增加辐射系数到目标值,这个过程叫逐步加载法,在热辐射分析中非常有效。另外,把辐射容差适当放宽(默认1e-4,我们可以放宽到1e-3)也能改善收敛。
材料热物性随温度变化带来的非线性虽然不如辐射剧烈,但在大温差的场景下也必须启用非线性迭代。这里有个小技巧:确保输入的温度-物性表不是台阶状跳跃的,尤其是比热容在相变温度附近会急剧变化,最好在相变区间内多插几个点,让曲线平滑过渡。台阶状的输入数据相当于给求解器制造了一个硬非线性,很容易导致迭代震荡。
4.3 并行计算与GPU加速的实际效果
热词里提到了“abaqus使用gpu加速”,这里聊聊实际情况。Abaqus确实支持GPU加速,但效果因求解器类型而异。
Abaqus/Explicit(显式)中,GPU加速效果相对明显,因为显式求解的计算瓶颈在多物理场更新和单元积分上,这些操作可以高度并行。但热应力分析如果用到Explicit,通常是冲击、碰撞等动态问题,不是典型的热分析场景。
Abaqus/Standard(隐式)中的GPU加速效果就不那么显著了。Standard的求解瓶颈在稀疏线性方程组的分解和求解,这部分操作对GPU的利用率有限。实测下来,直接增加CPU核心数往往比加GPU更立竿见影。如果你在做大规模热分析并且内存充足,优先考虑多核并行而不是GPU。
另外,热分析中有一个容易被忽略的效率问题:瞬态分析需要输出很多时间帧的结果用于后续热应力分析。如果每个增量步都输出全部节点的温度,.odb文件会变得巨大。建议通过*OUTPUT CONTROLS来控制输出频率,把输出间隔设置成和分析步的时间增量一致而不是每个增量都输出,能大幅减少I/O开销。
5. 常见问题与排查技巧实录
做热分析这些年,踩过的坑不少,有些问题几乎每个项目都会遇到。整理成速查表,算是给后来者的一份避坑指南。
5.1 热应力结果不连续:网格映射与单元阶次不匹配
顺序耦合分析中最常见的问题就是热应力结果看起来“一团糟”——应力云图有明显的跳变,不符合物理规律。排查思路如下:
首先确认热分析和结构分析是否用了同一套网格。如果网格不一致,温度场在映射时会产生偏差,特别是在温度梯度大的区域,应力结果容易失真。最稳妥的办法是统一网格。
其次检查单元阶次是否匹配。热分析用一阶单元,应力分析用二阶单元,虽然Abaqus能处理,但在温度插值精度上会有不匹配。一般建议热分析和应力分析使用同阶次单元。
还有一种情况是温度场本身就不平滑——如果热分析网格太粗,温度场本身就带锯齿,应力分析结果自然不会光滑。这种情况下,问题出在热分析阶段的网格密度,而不是应力分析。
5.2 辐射模型不收敛:Cavity参数的设置陷阱
腔体辐射模型经常出现不收敛的报错,这是热分析中让新手最头疼的问题之一。
排查思路:先检查辐射面的法线方向是否正确,辐射面的法线方向会影响视角因子的计算,法线反向会让热量往错误的区域传递。再检查辐射系数是否设置过大,从0.1开始逐步加大,找到收敛极限。还要检查辐射空腔是否封闭——Abaqus的Cavity Radiation要求辐射面能形成一个封闭的腔体(或接近封闭),有明显开口时视角因子计算容易异常。
如果实在收敛不了,可以考虑用等效辐射换热系数来近似——用一个非线性膜系数替代辐射计算。虽然精度稍低,但工程判断往往够用。这个方案在处理整体趋势性分析时非常实用。
5.3 瞬态温度场振荡:时间步长过大或网格过密
瞬态热分析中出现温度振荡(一个节点的温度在相邻增量步之间来回跳动)通常有两种原因。
第一种是时间步过大,热的传播距离远超一个单元的尺寸,数值解在空间上振荡。应对方法:减小时间步长,让每个时间步内的温度变化更平缓,这点在降温阶段尤其重要。
第二种反而是网格过密。当单元尺寸很小时,热扩散的稳定极限时间步会变得很小,如果配合显式时间积分,会严重限制时间步长。虽然Abaqus/Standard的隐式算法没有这个限制,但过密的网格在高梯度区仍然可能带来空间振荡。这时应该使用梯度自适应网格,只在温度梯度大的区域加密。
5.4 Job卡住或中断不了的应急处理
Abaqus偶尔会出现Job卡住或者提交后无法正常终止的情况。这个问题排查起来不复杂,但处理时间往往比较急迫。
挂起中的作业,最快的处理方式是用命令行输入abaqus terminate job=作业名或者abaqus suspend job=作业名。如果图形界面操作失效,命令行几乎总能解决。
如果Job已经崩溃但持锁文件(.lck)没有释放,重新提交任务时会报“不能获得锁”。这时手动删除相应目录下的.lck文件即可,但删除前要确认任务确实已经终止,否则可能损坏数据文件。
还有一步关键操作:做热-力顺序耦合分析时,如果热分析还没有完成就想在中途停止,一定要先保存好Heat Transfer的.odb结果。之前遇到过同事心急,强行终止了一个算到一半的热分析,结果.odb不完整,后面结构分析根本读不进去温度场,只好从头再算,白白损失十几个小时。
5.5 孤立节点排查技巧
热词里有个“abaqus如何找到没连接到任何单元上的节点”,这个问题在做大型模型检查时非常常见。孤立节点是指虽然在节点集合中存在,但没有被任何单元引用的节点。孤立节点会导致自由度凝聚不到总体刚度矩阵中,热分析时这些节点的温度永远是初始值,折射到结果中就会形成“局部冷点”或者“热阻”,影响整个温度场的判断。
检查方法很简单:在Abaqus/CAE后处理里,使用Mesh模块的“Verify”功能是不带节点连接检查的,要写一个Python脚本遍历所有单元,收集被引用的节点集合,然后和全部节点集合做差集,就能得到孤立节点列表,再通过Display Group高亮这些节点,手动删除或合并。
热分析中孤立节点的影响比结构分析更隐蔽。结构分析中孤立节点只会导致局部的自由度异常,热分析中它会在辐射传热计算中产生错误的热阻,甚至导致不收敛。建议每次提交热分析Job之前,都跑一遍这个脚本检查。
5.6 瑞利阻尼在热应力动态响应中的使用
热词里出现了“abaqus中瑞利阻尼的计算”,尽管阻尼通常被视为动力学参数,但在热冲击和热振动问题中却至关重要。热冲击——比如冷热交替冲击试验——会激起结构的高频振动响应,而热应力分析如果只做静力分析,是捕捉不到这些动态效应的。
瑞利阻尼由质量比例阻尼α和刚度比例阻尼β组成。α主要影响低频,β主要影响高频。常见做法是在两个感兴趣的频率点f1、f2处指定阻尼比ζ,然后反推α和β,公式为:
α = 4π f1 f2 ζ / (2π(f1+f2)) β = ζ / (π(f1+f2))
注意这里的ζ是小数(比如0.05代表5%的阻尼比),不是百分比。实际工程中,α和β经常会设置得很小甚至为0,因为热应力分析通常是准静态问题,动力效应不显著。但如果做热冲击响应或者热振动分析,阻尼参数的合理标定将直接影响响应幅值。
关于瑞利阻尼,我有一次在热冲击分析中用默认的α=0、β=0,结果热应力峰值比有阻尼的情况高了近40%。后来加上了恰当的阻尼参数,结果才和实测吻合。所以做动态热应力分析时,阻尼不能随便忽略。
6. 我的一些体会
做热应力分析这些年,最大的体会是:百分之八十的功夫都花在温度场上,温度场准了,热应力结果自然就合理;温度场如果不对,应力分析做得再精细也白搭。而温度场的可信度又取决于材料数据和边界条件的准确程度,这是一条从数据到结果的传导链,任何一个环节都别想走捷径。
这篇把Abaqus热-力分析的整体能力框架讲了一遍,后续我打算沿着几个常用方向继续展开:焊接热源加载与移动热源子程序怎么写、电子散热的热-结构耦合怎么处理、淬火过程相变潜热怎么考虑,都会有更具体的案例拆解。如果你正好在折腾某一块内容,欢迎拿实际问题来交流,比我在这里干讲要高效得多。