☰
SLM热固耦合仿真:温度场、单元生死与残余应力建模
2026/11/5 4:13:40 网站建设 项目流程

简介:面向增材制造、固体力学与热固耦合方向的研究者和工程技术人员,这份资料聚焦 COMSOL 6.1 环境下激光选区熔化(SLM)的单道与多道仿真,围绕温度场与应力场展开分析,涉及固体力学、增材制造活化及圆柱形增材建模等设置,可用于研究熔池温度与应力的变化规律、比较不同工艺参数的影响,并为其它增材过程仿真提供参照。压缩包共 3 个文件,以 PDF 说明、Markdown 笔记和 HTML 页面呈现,合计约 480KB,体量轻便,内容涵盖模型注释、可修改性与收敛性等要点,便于快速查阅和对照使用。目前已有 276 人学习。读者可从中获得温度场与应力场演化脉络的梳理、模型搭建与调试思路,以及把单道结果迁移到多道及其它增材场景的方法,适合具备一定 COMSOL 基础、希望深入热固耦合仿真的人员按需取用。

1. 裂纹不在激光扫过的地方:SLM 仿真的判决点在应力场

拿一块 SLM 打印的薄壁件,激光扫过时看不出任何异常,等冷却、切离基板,边缘翘了起来,甚至出现贯穿裂纹。这是增材制造里最反直觉的一幕:真正决定零件成败的不是激光照到的那一瞬间,而是之后几秒到几分钟里热应变被逐步积累的过程。COMSOL 这类多物理场平台在 SLM 仿真里要解决的核心问题,是把「激光吸收—粉末熔化—熔池凝固—逐层堆积—应力累积」这条因果链离散成可求解的方程。理解这套模型的价值在于:熔池尺度是几十微米,零件尺度是几十毫米,物理时间从微秒跨到小时,六个数量级的跨度决定了任何一次「算得动」都是设计取舍的结果,而不是点一下求解就能出图。后面几章就沿着温度场、生死单元、热固耦合三条线,把这份 SLM 仿真模型背后的机制拆开看。

2. 激光热源与粉末床:温度场为什么必须"移动"着算

温度场是整个耦合链的入口。热源模型决定了能量怎么注入,相变处理决定了能量怎么被消耗,粉末床物性决定了能量怎么在松装颗粒间传递。这三件事任何一件出偏差,后面的应力场都不会有讨论价值——它只是把错误的温度历史忠实地翻译成错误的应变历史。这一章先把入口端讲透。

2.1 高斯面热源与双椭球体热源:选错模型熔池深度直接翻车

热源模型的选择本质上是在回答一个问题:激光能量到底被吸收在哪一层体积里。面高斯热源假设能量全部沉积在表面上,热流密度按 $q(r)=\frac{2AP}{\pi r_0^2}\exp(-2r^2/r_0^2)$ 分布,实现简单、参数少,在低功率、高扫描速度的传导焊模式下能给出可接受的熔池宽度。但 SLM 的熔池深宽比经常接近 1,深熔模式下熔深甚至超过熔宽,这时能量明显是沿深度方向分布的,面热源会把熔池算得又宽又浅,深度可能差一倍以上。

体热源里用得最多的是双椭球模型,前后两个半椭球分别描述熔池的前沿陡、后沿长:

$$q_f=\frac{6\sqrt{3}A P}{a_f b c,\pi\sqrt{\pi}}\exp\left(-\frac{3x^2}{a_f^2}-\frac{3y^2}{b^2}-\frac{3z^2}{c^2}\right)$$

前半轴 $a_f$、后半轴 $a_r$、宽度 $b$、深度 $c$ 这几个参数不能凭感觉填,合格的标定方式是拿单道熔池的金相截面反算:先量出熔宽和熔深,再调 $b$、$c$ 让等温线包住实测轮廓。常见的实现思路是把 $c$ 直接取成目标熔深,$b$ 取熔宽的一半,$a_f$ 取 $2r_0$ 量级,然后微调能量分配比例。

真正容易翻车的是网格和时间步的匹配。移动热源的温度场梯度极陡,如果热源半径内只有一两个单元,数值扩散会把峰值温度抹平,熔池看起来「化开了」但温度只有 1200 K,你会以为是材料属性写错了,实际上是网格分辨率不够。

import numpy as np # 激光与材料参数(示意值,实际以设备标定和材料手册为准) P = 200.0 # 激光功率 W A = 0.35 # 粉末床有效吸收率 r0 = 35e-6 # 光斑特征半径 m v = 0.8 # 扫描速度 m/s def q_surface(r): """面高斯热源:r 为到光斑中心的距离""" return 2.0 * A * P / (np.pi * r0**2) * np.exp(-2.0 * (r / r0) ** 2) print(f"峰值热流密度 {q_surface(0.0) / 1e9:.2f} GW/m^2") # 两条经验约束:热源半径内至少 6 个单元;单步内热源移动不超过 0.2 个单元 h_mesh = r0 / 6.0 dt = 0.2 * h_mesh / v print(f"建议单元尺寸 {h_mesh * 1e6:.1f} um,建议时间步 {dt * 1e6:.2f} us")

这段脚本输出的峰值热流密度在几十 GW/m² 量级,这个数可以用来做一次量纲检查:如果你在模型里填出来的热流密度是 10⁶ 量级,多半是把功率单位当成了 kW 而速度用了 mm/s。网格与时间步的约束不是精确的稳定性判据,而是一条保底线——移动热源问题里,时间步大到热源一步跨越好几个单元,温度历史就变成了锯齿,相变潜热吸收会来回震荡,求解器开始反复缩步。

提示:热源参数标定完成后,先用单道扫描、单层粉末的简化模型验证熔池尺寸,再上多层多道。跳过这一步,后面每一层都在放大同一个错误。

2.2 相变潜热与表观热容:时间步被一段几十 K 的区间卡住

粉末熔化要吸热,凝固要放热,这部分能量就是熔化潜热。忽略潜热,峰值温度会偏高,熔池偏大,冷却速率偏快,最终残余应力偏大——误差方向是系统性的,不是随机的。

数值实现上主要有两条路。焓法把内能写成 $H=\int c_p,dT+f_l L_f$,把潜热塞进焓里,对时间步相对宽容。表观热容法则把潜热摊到固液相线区间,构造一个等效比热 $c_{eff}=c_p+L_f\cdot \frac{df_l}{dT}$,实现简单,和常规传热方程完全兼容,COMSOL 里既可以用内置的相变材料节点,也可以自己写阶跃函数。

问题出在区间宽度上。很多合金的固液相线只差几十 K,$L_f/(T_l-T_s)$ 这一项会把表观比热顶到固相比热的十倍以上。这个尖峰意味着:温度从固相线爬到液相线的这段路径上,热容极大、扩散极慢,时间步必须小到能分辨这个尖峰,否则求解器一步跨过去,能量凭空消失或多出来,温度曲线出现台阶状跳变。

import numpy as np def apparent_cp(T, cp_s, cp_l, Lf, Ts, Tl): """表观比热:把熔化潜热 Lf 均摊到 [Ts, Tl] 区间""" T = np.asarray(T, dtype=float) # 基础比热在固液相区间内线性过渡 frac = np.clip((T - Ts) / (Tl - Ts), 0.0, 1.0) cp = cp_s + (cp_l - cp_s) * frac # 潜热贡献只在固液共存区内非零 in_mushy = (T >= Ts) & (T <= Tl) return cp + np.where(in_mushy, Lf / (Tl - Ts), 0.0) Ts, Tl, Lf = 1878.0, 1923.0, 2.9e5 # 固相线 K、液相线 K、潜热 J/kg(示意) cp_s, cp_l = 620.0, 830.0 # 固/液相比热 J/(kg*K) T = np.linspace(1800, 2000, 2001) cp = apparent_cp(T, cp_s, cp_l, Lf, Ts, Tl) print(f"表观比热峰值 {cp.max():.0f} J/(kg*K),约为固相的 {cp.max()/cp_s:.1f} 倍")

参数说明:Ts、Tl来自相图或 DSC 测试,Lf来自材料手册,frac用截断而不是条件分支是为了让函数在整个温度轴上都可导,减少求解器的牛顿迭代失败。输出的倍数关系很关键——如果峰值只有固相的 2~3 倍,说明液相线区间设得太宽,相当于人为把相变抹平了;如果超过 20 倍,时间步会被卡得非常死,这时候要考虑改用焓法或者对区间做适度平滑。

2.3 粉末床的有效热导率与吸收率:40% 孔隙率带来的参数陷阱

铺粉层的孔隙率通常在 40%~50%,热量在粉末床里的传递路径是颗粒接触点导热、间隙气体导热、高温下的颗粒间辐射三部分并联。等效热导率比实体低一个数量级,典型值在 0.1~1 W/(m·K) 量级,而实体金属是 10~20 W/(m·K)。这个差别直接决定了熔池周围的预热区宽度和层间冷却速度。

如果直接把实体热导率赋给粉末单元,热量会横向散得太快,熔池变窄、冷却速率偏高、温度梯度偏大,算出来的残余应力会系统性偏高。反过来,如果只用孔隙率做一个简单的串联模型,又容易低估高温段的辐射贡献。

吸收率是另一个容易被当成常数的地方。粉末床因为颗粒间的多次反射,有效吸收率明显高于抛光实体表面,常见取值在 0.3~0.7 之间,随粉末粒径、球化程度、表面氧化状态变化。这个参数没有普适值,标定方式只能是拿实测熔池宽度反推——这也是为什么单道验证必须做。

参数物理含义常见取值区间设错的典型后果
有效吸收率 A粉末床吸收的激光能量占比0.3~0.7熔池尺寸整体偏大或偏小
粉末床热导率松装颗粒的等效导热0.1~1 W/(m·K)预热区宽度、冷却速率失真
层厚单层铺粉厚度20~50 μm与粒径同量级,连续介质假设失效
固液相线区间熔化温度范围几十 K表观热容峰值失真,时间步被卡
熔化潜热固液转变吸收的能量2~4×10⁵ J/kg峰温偏高,熔池偏大

层厚这一项值得单独说。20~50 μm 的铺层厚度和 20~50 μm 的粉末粒径是同一量级,意味着单层里只有几颗颗粒,「连续介质」这个前提在单层尺度上其实站不住。工程上的处理方式是接受这个近似,但把粉末层的物性当作等效参数来标定,而不是去追求颗粒级的真实。心里要清楚:这是一次有意的简化,不是一个精确的描述。

3. 单元生死与逐层激活:增材制造的"时间"是怎么被离散的

温度场有了,接下来的问题是:怎么让「逐层堆积」这件事在有限元里发生。SLM 零件动辄几百到几千层,如果一开始就把所有单元都激活,等于在模拟一块已经成形的实体被激光扫一遍,层间约束、热历史、应力累积全部丢失。单元生死机制就是为此存在的。

3.1 单元生死:杀死单元为什么必须保留它的温度自由度

标准做法是:建模时把所有层都建出来,初始状态全部「杀死」——力学上给一个极小的刚度因子(常见取 10⁻⁶ 到 10⁻⁹),让它们不参与承载;然后在激光扫描到该层时按时间激活。

这里有个非常容易踩的坑:杀死单元时,只应该杀刚度,不应该杀导热。如果连热导率一起杀掉,未熔化的粉末层就变成了绝热层,新激活层和已凝固层之间出现温度断层,激活瞬间温度梯度爆炸,应力场直接失真。正确的处理是让未激活单元保持粉末床的等效热导率和比热,只把力学属性压到接近零。

第二个坑是激活时刻的温度初值。新单元被激活时,它的节点温度应该是当前层间环境温度或者铺粉后的粉末温度,而不是全局初始温度 293 K。如果模型里用的是全局初值,每次激活都相当于往热体上贴一块冷铁,产生一次虚假的热冲击,累积几百层之后应力场完全是噪声。

import numpy as np layer_h = 30e-6 # 单层厚度 m n_layer = 800 # 总层数 hatch = 60e-6 # 扫描间距 m v = 0.8 # 扫描速度 m/s part_area = 10e-3 * 10e-3 # 零件截面积 m^2(示意) # 单层扫描时间 = 扫描线总长 / 速度 t_layer = part_area / (hatch * v) print(f"单层扫描约 {t_layer*1e3:.1f} ms,{n_layer} 层合计 {t_layer*n_layer:.0f} s") def is_active(z, t, t_between=0.0): """按高度判断单元是否已激活:激光扫到哪一层,哪一层才有刚度""" layer_idx = int(np.floor(z / layer_h)) t_start = layer_idx * (t_layer + t_between) # t_between 为层间停顿 return t >= t_start

这段逻辑说明的是激活判据的最小形式。参数t_between代表层间铺粉停顿,它对层间冷却和层间结合强度影响很大,不能默认设 0。实际模型里还会叠加扫描路径:同一层内不同区域被扫到的时刻不同,严格的激活判据应该基于「激光当前位置是否已经过该单元」,而不是只按层号一刀切。按层激活会让整层同时获得刚度,层内应力重分布被抹平;按路径激活更真实,但需要把扫描策略(往复、棋盘、条纹)编码成时间-空间映射表。

3.2 扫描路径与时间步:一个零件为什么是 10⁷ 步的账

算一下时间尺度就明白为什么 SLM 仿真「算不动」。扫描速度 800 mm/s,光斑 70 μm,光斑扫过自身直径的时间约 90 μs;为了分辨熔池的快速凝固,时间步通常要取到 1 μs 量级。而一个零件的打印时间从几十秒到几小时,即使只算几十秒的物理时间,也是 10⁷ 量级的步数。

尺度典型量级对建模的影响
光斑直径50~100 μm决定熔池区网格上限
单层厚度20~50 μm决定层间网格与激活频率
光斑驻留时间10~100 μs决定时间步上限
单层扫描时间0.5~5 s决定单层内的路径编码
零件总打印时间10³~10⁴ s决定是否必须降阶

出路有三条,机制上各不相同。第一条是空间局部细化:远离熔池的区域网格放大,只保留热传导的低频分量,时间步仍然受熔池区限制,但自由度降下来了。第二条是时间上的多尺度:把「单道熔池瞬态」和「零件整体热历史」分成两个模型,前者提参数,后者用等效热源。第三条是彻底换模型——固有应变法,完全不解瞬态温度场,直接把每一层的等效收缩应变作为初始应变加载,算一次静力学就出残余应力。第三条在工业界用得最多,代价是丢失了熔池级别的信息。

3.3 顺序耦合与全耦合:为什么绝大多数 SLM 模型不做全耦合

热固耦合有两种组织方式。全耦合是把温度场和位移场放在同一个方程组里同时求解,矩阵里带上交叉项;顺序耦合是先解瞬态温度场,把每个时间步的温度存下来,再作为体载荷插值到力学模型上求解。

SLM 场景下,顺序耦合是压倒性的主流选择,原因很实在:热对力的影响是单向主导的,力对热的影响(变形导致的接触变化、间隙变化)在单层尺度上微弱到可以忽略;而全耦合要求两边时间步一致,力学模型为了收敛往往需要更小的步长,等于把传热的计算量再放大一遍。更麻烦的是,全耦合下温度场的强非线性会直接污染力学方程的牛顿迭代,收敛窗口非常窄。

顺序耦合的代价是丢失熔池对流的影响。真实熔池里存在 Marangoni 对流,它会把热量从中心往边缘带,实际熔池比纯导热模型更宽更浅。常见的补偿手段是把熔池区的热导率人为放大几倍(等效对流导热),或者直接用双椭球热源把熔宽调宽来凑。这是一种「用一个错误抵消另一个错误」的做法,但只要标定过单道熔池,工程上完全够用。

注意:顺序耦合里温度场和力学场的时间步可以不同,但插值时必须保证温度历史覆盖力学求解的每一步,否则会出现温度「外推」到未来时刻,结果毫无意义。

4. 从温度场到应力场:热应变如何被弹塑性本构"记住"

温度历史有了,接下来的问题变成:这些温度变化怎么变成应力。答案藏在热应变和塑性流动的竞争里——弹性范围内热膨胀产生应力,超过屈服点后应力被塑性变形释放,而释放多少取决于当时的屈服强度。SLM 的特殊之处在于,材料在几分钟内反复经历从室温到接近沸点的温度循环,屈服强度本身就是一个剧烈变化的量。

4.1 参考温度与热膨胀系数:一个设错的参数能让结果整体平移

热应变的定义是 $\varepsilon_{th}=\alpha(T),(T-T_{ref})$,更严谨的写法是积分形式 $\varepsilon_{th}=\int_{T_{ref}}^{T}\alpha(T'),dT'$,因为热膨胀系数本身随温度变化。COMSOL 的材料节点里两者都支持,用积分形式更准确,尤其是温度跨度上千年的时候。

$T_{ref}$ 的物理含义是「无应力温度」,不是简单的室温。对 SLM 来说,它通常是粉末床预热温度或基板初始温度;如果基板预热到 200 ℃,参考温度就应该设成 473 K 而不是 293 K。设错的后果是整体叠加一个常数热应变,零件尺寸整体胀缩,虽然对残余应力的相对分布影响不大,但对绝对变形量和脱板后的翘曲量影响是线性的——你会看到零件「整体变大了一点」,然后怀疑是网格问题。

热膨胀系数在高温段的行为也要留意。部分合金在接近熔点时 α 会出现非线性甚至符号变化,分段线性插值时如果只给到 800 ℃ 就外推到 1600 ℃,斜率完全失真。这一点在 4.3 的代码里会展开。

4.2 退火与塑性松弛:后一层激光为什么能"抹掉"前一层的应力

这是 SLM 残余应力分析里最容易被低估的机制。已凝固层并不是被动地承受应力,它会被后续层的激光重新加热。当温度爬过材料的再结晶温度或退火温度,屈服强度快速下降,原本处于弹性状态的应力通过塑性流动被释放掉一部分。换句话说,最终残余应力不是各层应力的简单累加,而是「累积—释放—再累积」反复迭代的结果。

这意味着本构模型必须带温度相关的屈服面。如果只用理想弹塑性或者干脆用线弹性,前几层积累的应力会全部保留到最后,算出来的残余应力可能高估两到三倍。硬化模型的选择也有讲究:单调加载用等向硬化没问题,但 SLM 是反复加热-冷却的循环路径,包辛格效应明显,随动硬化或者混合硬化更接近真实。温度更高、停留时间更长的区域,还要考虑蠕变或粘塑性——高温下应力随时间松弛,这一步在纯弹塑性模型里是缺失的。

4.3 残余应力的两个来源:温度梯度机制与冷却收缩机制

经典解释有两条。温度梯度机制说的是:激光扫过时表层温度远高于内部,表层想膨胀但被冷的底层约束,产生压应力;冷却时表层想收缩又被约束,转成拉应力。冷却收缩机制说的是:新凝固的一层从高温冷到低温,收缩量被下面已经冷却的旧层约束,新层受拉、旧层受压。

两种机制叠加的结果是典型分布:零件靠近基板的底部受压,顶部受拉,中间存在一个中性层。脱板之后约束解除,应力重新分布,零件朝远离基板的方向翘曲——薄壁件尤其明显,这也是为什么同样参数下薄壁比块体更容易废。

边界条件的设置直接决定应力的大小。基板底部全固定,相当于给了一个刚性约束,算出来的应力会偏高,因为真实过程里基板也会随温度轻微变形;基板底部只约束法向位移、允许面内自由收缩,更接近实际装夹。约束条件选错,残余应力的绝对值就没有参考意义,只能看分布趋势。

import numpy as np # 温度相关材料属性表(示意值,实际用材料手册或实验标定) T_tab = np.array([293, 573, 873, 1173, 1473, 1673, 1878]) # K E_tab = np.array([110, 95, 80, 60, 35, 15, 2]) # GPa sy_tab = np.array([880, 700, 520, 330, 150, 40, 1]) # MPa def props(T): """分段线性插值;超出表格范围时钳制在端点值,而不是外推""" E = np.interp(T, T_tab, E_tab) sy = np.interp(T, T_tab, sy_tab) return E, sy for T in [293, 900, 1500, 1900]: E, sy = props(T) print(f"T={T:5d} K E={E:6.1f} GPa sy={sy:6.1f} MPa")

np.interp的关键行为是超出范围时返回端点值,这正是我们想要的——1900 K 时返回的是 1878 K 对应的 1 MPa,而不是沿最后一段斜率外推成负数。这个细节看起来小,实际上很多模型在熔池附近报「弹性模量为负」或者「屈服强度为负」,根源就是外推。参数表本身也需要覆盖到液相线以上,否则熔池区的单元属性是纯外推出来的,物理上不成立,数值上还会让牛顿迭代发散。

5. 常见问题与排查:模型跑不动、结果不对劲时的检查顺序

仿真做到一半卡住,最耗时间的不是改模型,而是不知道往哪改。下面这五条是 SLM 热固耦合里出现频率最高的故障,按「先查什么、为什么、怎么修」的顺序排。

5.1 熔池峰值温度上万度,甚至几万度

现象很直观:后处理一切片,等温线一片红,最高温度 20000 K 以上。原因通常出在能量注入的入口——最常见的是单位不一致,功率填了 200 但单位是 kW,或者扫描速度填了 800 但单位是 mm/s 而模型用的是 m/s,导致热源在一个位置上停留了几百倍的时间。第二个常见原因是吸收率被设成了 1,配合面热源在极小光斑上积分,热流密度直接顶到 10¹¹ 量级。第三个原因是相变潜热漏掉了,能量没有出口,温度一路爬升。排查顺序建议是:先打印热源表达式在某点的数值,和 2.1 的估算对一遍量级;再检查相变节点是否真的挂上了;最后才怀疑网格。

5.2 温度场看起来合理,应力场大得离谱

温度峰值正常、熔池尺寸正常,但残余应力算出 2000 MPa,超过材料抗拉强度好几倍。原因往往在力学侧:参考温度设成了 293 K 而基板实际预热到 473 K,整体叠加了一个本不该存在的热应变;或者基板底部全固定,把基板当成了刚性体,约束反力全部转成应力;又或者材料属性表只给到 1000 K,高温区靠外推,屈服强度算成了负值,塑性修正直接失效。这三条按顺序查,能覆盖八成的「应力离谱」案例。还有一种隐蔽情况:单元激活时刻的温度初值用了全局初值,每次激活都产生一次虚假热冲击,应力随层数单调累积。

5.3 求解到某一层突然不收敛,缩步缩到极小也没用

现象是时间步长被压到 10⁻¹² 量级,进度条不动。原因通常是相变尖峰正好卡在当前温度区间,表观热容的峰值让方程组的条件数急剧恶化;或者某个单元的应力状态正好落在屈服面附近来回跳跃,牛顿迭代在两个解之间振荡。解决手段有几种:把相变区间的表观热容做平滑处理,用双曲正切代替分段线性,牺牲一点精度换收敛;把屈服面附近的硬化斜率调大一点,避免理想塑性;检查是否有单元在激活瞬间被压到负体积,几何非线性打开后单元畸变会直接杀死求解器。

5.4 层激活附近的温度场出现断层

后处理看层间界面,温度等值线在界面处出现明显折角,甚至跳变几十 K。原因是杀死单元时把热导率一起杀了,未激活层变成绝热层。正确的做法是分离力学属性和热学属性:力学上刚度乘一个极小因子,热学上保持粉末床的等效热导率和比热。另一种可能是激活判据按层一刀切,整层同时获得刚度,层内本应存在的温度梯度被抹平。改成按扫描路径逐区域激活,断层的形状会明显改善。

5.5 网格加密一倍,结果变化超过 20%

说明解还没有收敛到网格无关。最常见的原因是热源分辨率不足——光斑半径内单元数少于 5 个,能量被数值扩散抹平,这时候加密网格会让熔池突然「变大」,看起来像物理量变了,其实是数值误差在收敛。其次是激活层的网格与层厚不匹配,层厚方向上只有一个单元,层间温度梯度无法表达。判断方法很简单:固定其他参数,只把热源区网格加密一倍,看峰值温度和熔宽的变化量;如果变化小于 5%,可以认为网格够了。这条检查花的时间不多,但能省掉后面所有基于错误结果的讨论。

6. 设计取舍:精度和成本之间那条永远在移动的线

把整条链路走完会发现,SLM 热固耦合仿真里没有「正确的模型」,只有「当前问题需要的模型」。同一份几何,如果关心的是熔池形貌和孔隙缺陷,就必须保留微米级网格和微秒级时间步,瞬态热力耦合跑几百万自由度是常态;如果关心的是零件整体翘曲和残余应力分布,固有应变法是更务实的选择,它放弃熔池细节,把每层的等效收缩应变作为初始应变,一次静力学求解就能给出趋势。中间还有一档:热力顺序耦合加局部细化,熔池区细、远场粗,时间步只在小区域收紧。

模型路线保留的物理典型代价适用问题
瞬态热力全耦合熔池瞬态、相变、塑性历史自由度与步数都极高熔池形貌、单道/少层机理
顺序热力耦合完整热历史 + 弹塑性中等,需存温度历史多层残余应力、翘曲
固有应变法仅等效收缩应变低,一次静力学大型零件变形趋势
热力耦合 + 局部细化近场瞬态、远场等效中等偏高局部特征 + 整体变形

选择哪一档,判断依据不是「哪个更准」,而是「你关心的量对哪个物理过程敏感」。翘曲对层间收缩历史敏感,对熔池是否深熔不敏感;孔隙对熔池深宽比和 Marangoni 对流敏感,对整体约束条件不敏感。搞反了,就是把算力花在了不影响结论的地方。

验证方法也得跟着选。熔池类结果用单道截面的熔宽熔深对比,误差控制在 15% 以内算合理;应力类结果用 X 射线衍射或钻孔法测几个点的残余应力,重点看拉压符号和量级,绝对值很难对上;变形类结果直接量脱板后的翘曲量,这个最容易测也最诚实。还有一条几乎不花钱的检查:能量守恒。激光输入的总能量应该等于粉末升温吸热、相变潜热、向基板和环境散失三部分之和,对不上就说明有能量凭空产生或消失,通常出在相变处理或边界条件上。

我自己的习惯是,每建一个新模型,先跑单道单层,把熔宽、熔深、峰值温度三个数记下来,和文献或实测对一遍;再跑十层,看应力是不是随层数单调累积、有没有出现异常的应力释放;最后才上完整零件。跳过前两步直接上大模型,往往跑了两天才发现吸收率填错了,那种后悔药是买不到的。这套流程不聪明,但每次都能把翻车的成本压到最低。希望帮到你。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询