资讯动态

激光熔池流动模拟:基于水平集方法的多物理场耦合建模与调试

发布时间:2026/10/13 20:32:05 来源:尧图企业网站定制
做激光熔池流动数值模拟的人应该都体会过那种从“把激光加进去”到“把熔池形态算出来”之间的漫长折腾。这个模型里不只有热源还同时纠缠着自由表面变形、马兰戈尼对流、蒸发反冲压强、浮力、固液相变等一堆彼此非线形耦合的物理效应。面对这种强耦合问题我最终在COMSOL里选定了基于水平集方法的两相流框架一步步把热-流-界面问题串起来才算是真正跑出了稳定、可复现的结果。这篇文章把整个链路从选型理由到数学原理、再到实际参数设置和调试经验完整整理出来适合刚接触这类仿真的人也适合那些手里已经有一个半成品模型、但一直卡在收敛性或者结果不合理上的朋友。1. 激光熔池仿真的核心切入点你会被哪一步卡住1.1 熔池里到底在发生什么激光辐照到金属表面之后能量首先被表层材料吸收表层温度迅速上升一旦越过熔点材料开始熔化并形成一个不断长大的液池也就是熔池。这个过程听起来简单但熔池内部和表面的行为非常复杂熔池的自由表面并不是静止的它会被高温蒸发产生的反冲压力压得往下凹陷严重时甚至形成我们常说的“匙孔”而熔池内部的液态金属也并非静止不动它会在表面张力梯度、浮力、以及外部气液界面剪切力的共同作用下产生强烈的对流运动。这种对流对熔池的形状、传热效率、凝固组织甚至缺陷形成都有直接影响所以只算一个温度场是远远不够的。我刚开始做这类仿真时最大的感受是你很难把“哪一步最重要”单独拎出来。热源告诉系统能量从哪里来水平集方法告诉系统界面在哪里、怎么动各种力项告诉系统熔池为什么会长成那个样子。这三块必须同时在线而且必须互相喂数据。比如界面位置变了热源吸收面积的形状就变了温度分布变了表面张力分布就变了表面张力分布变了界面附近的流场就又变了。这种循环耦合关系是激光熔池仿真与一般热结构分析最大的区别。1.2 为什么选水平集而不是VOF、动网格或相场在追踪自由界面这个问题上可行的路线其实不少。早期很多工作用动网格方法直接让网格节点跟随界面运动好处是界面可以非常清晰但一旦熔池表面出现剧烈的拓扑变化比如液滴飞溅、表面局部闭合网格就会严重畸变甚至失效。VOF方法在通用CFD领域用得很多它保证质量守恒比较有优势但界面法向和曲率的计算对网格质量敏感在强曲率区容易出现不光滑的界面重构。相场方法精度很高但它引出了额外的扩散界面动力学参数求解规模和参数标定难度都要比水平集高一个量级。水平集方法在这个问题里的核心优势是把界面隐式地表示为一个等值面界面运动靠求解一个标量输运方程来完成不需要显式地重构界面也不需要网格追踪所以对拓扑变化的容忍度非常高。在COMSOL里水平集与流体流动、传热方程天然共享同一套有限元网格耦合项可以通过体积力等节点直接注入实现起来非常顺手。个人经验是除非你做的是那种需要极高界面精度的微尺度单液滴问题否则激光熔池这种尺度下水平集方法和COMSOL的组合是性价比最高的一条路。2. 水平集方法的数学逻辑与COMSOL落地2.1 水平集方程及ε、γ参数实质水平集方法的核心是定义一个标量函数φ在整个计算域内取值通常约定φ1代表熔融金属相φ0代表气相或保护气φ0.5所在的等值面就是自由界面位置。这个函数受到流场输运和数值重整化两种作用的共同影响COMSOL里对应的守恒型水平集方程长这样∂φ/∂t u·∇φ γ∇·[ε∇φ - φ(1-φ)∇φ/|∇φ|]等号右边第一项是数值耗散项让界面不会因为数值振荡而破碎第二项是一个界面压缩项把φ的梯度重新拉回一个陡峭的台阶分布避免界面被抹成一个大范围的渐变区。这里的ε控制的是界面处过渡带的厚度量纲是长度γ控制的是界面压缩强度量纲是速度。很多人把这个方程当成普通输运方程一填了事然后就开始被各种不收敛折磨。其实这两个参数必须跟网格和时间步一起看。ε的取值通常要跟界面处网格尺寸挂在一起经验上取界面网格尺寸的二分之一到一倍比较合适。取太小界面梯度无法被网格分辨方程里的压缩项会产生数值振荡取太大界面被抹成一条宽带表面张力和热源都作用在一个“模糊地带”结果整体失真。γ也不是越大越好γ太大会把界面压缩得过于锐利反而造成界面上压强波动太小则界面越来越模糊液相质量会无形中流失。我自己常用的做法是先定ε让界面厚度约跨3到5个网格再根据特征流速估计一个量级把γ设为特征流速的1到5倍然后看质量守恒指标微调。2.2 界面处物性插值、法向与表面张力有了φ之后两相材料属性就不能简单分区域给值了需要在界面附近做连续过渡否则数值上会产生强烈的间断震荡。COMSOL的做法是对密度和动力粘度做Heaviside平滑插值也就是在φ0到1之间用平滑阶梯函数把气相参数过渡到液相参数。从物理上看相当于把真实的尖锐界面“软化”成一层薄薄的过渡区这个过渡区虽然是一个数值构造但只要厚度控制得当对宏观熔池形貌和流场统计量的影响是可以接受的。同样在界面这一薄层里表面张力被处理为一个体积力。常见形式是F_st σ κ δ(φ) n其中σ是表面张力系数κ是界面曲率n是界面法向δ(φ)是狄拉克函数作用是把力“约束”在界面上。COMSOL的水平集接口内置了表面张力项界面的法向和曲率都可以从φ直接导出不需要用户自己造轮子。不过只填一个固定表面张力系数是不够的因为真实熔池里的表面张力并非常数它随温度变化而这正是马兰戈尼对流产生的根源这个效应需要在模型里手动补充我后面专门展开。3. 多种物理效应的建模从热源到驱动力3.1 激光能量输入的合理近似与移动热源表达式激光热源的处理方式直接影响温度场量级和熔池尺寸是整个模型的“能量源头”。在最常见的不考虑匙孔的传导模式下我一般用高斯面热源近似激光能量分布把激光束的径向能量密度按高斯函数展开。在二维平面模型里假设激光沿某个方向移动表达式可以写成q_laser 2*alpha*P_laser/(pi*R_spot^2)*exp(-2*((x-v_scan*t)^2y^2)/R_spot^2)这里的alpha是材料对激光的吸收率P_laser是激光功率R_spot是光斑有效半径v_scan是扫描速度。为什么取2/πR²这个系数因为要让整个光斑范围内的能量积分正好等于吸收后的总功率P_effαP_laser。高斯分布的中心峰值是平均功率密度的两倍这个峰值温度对熔池的最高温度影响很大不能凭感觉随意改。吸收率这个东西很多人直接填0.5甚至1.0实际这是很大的坑。金属表面对激光的吸收率受波长、温度、表面氧化状态影响很大常规条件下钢对光纤激光的吸收率大约在0.3左右如果表面有氧化层会更高。吸收率填高了模型里的熔池会偏大温度会虚高反冲压力更会被指数级放大。我建议在功率敏感性分析时至少算三组吸收率看熔池尺寸和流场结构是否在合理区间再来定最终参数。3.2 表面张力与马兰戈尼切向力浅宽熔池的塑造者大多数金属的表面张力系数都随温度升高而降低也就是说dσ/dT一般是负数。一旦熔池表面存在切向温度梯度表面张力就会产生不平衡高温区表面张力低、低温区表面张力高于是液体会从高温中心被“拽”向低温边缘形成一个表面沿切向的剪切驱动。这个效应就是马兰戈尼对流在激光熔池里它是决定熔池宽深比的最关键因素。在数值实现上这个切向应力不能靠默认的表面张力各向同性项表达需要单独加一个切向力常见表达式是tau_ma (dσ/dT)(I - n·n^T)·∇T这个式子的意思很直白取出温度梯度在界面切平面上的分量再用表面张力温度系数换算成切向应力最后乘以界面附近的狄拉克函数把它转化为体积力。很多人漏了那个(I - n·n^T)投影项直接把dσ/dT乘以∇T加到界面处结果会产生一个不真实的法向分量界面被“人工推”出变形流场怎么调都不对。从我跑过的模型来看忽略马兰戈尼效应时熔池往往很窄很深像一个小坑把这个力加上之后表面流动把高温熔体卷向熔池边缘熔池明显变宽变浅流场里会出现一个非常典型的“从中心沿表面向外、再从边缘沿底部流回中心”的回流涡。这个涡不是视觉上的小细节它对熔池内的成分均匀性和凝固前沿的枝晶生长方向都有直接影响。3.3 浮力、重力与蒸发反冲压力浮力在这里的戏份其实不大。熔池尺度通常只有毫米量级温度差驱动的密度变化所产生的浮力远小于表面张力梯度带来的马兰戈尼力很多文献里甚至直接忽略浮力。但如果你的模型里没有加马兰戈尼项浮力就会成为唯一的热驱动算出来的流场和真实情况差得很远。我的建议是浮力可以考虑用Boussinesq近似加上但别指望它对结果起决定性作用。真正能改变自由表面形态的是蒸发反冲压力。当熔池表面温度接近甚至超过材料的沸点时金属剧烈蒸发蒸汽离开表面时会给液面一个向下的反作用压强。压强与温度呈强烈的指数关系常写成P_recoil ≈ 0.54*P_atm*exp(ΔH_lv/(R_gas*T_v)*(1 - T_v/T))这个力的方向是沿界面法向指向液相内部相当于在自由表面上额外压了一段。在水平集框架下把它作为界面的法向体积力加入动量方程就能看到熔池表面在光斑中心处逐渐下凹。功率密度一旦足够高反冲压力就会超过表面张力与重力所能维持的形状控制范围表面凹陷进一步加深这就是匙孔形成的前兆。所以如果你的研究重点是小孔模式或深熔焊反冲压力这一项是绝对不能少的如果只做热传导模式的表面熔覆工艺研究又不想被界面剧烈变形折磨可以先把它关掉。3.4 固液相变与糊状区一个容易被忽略的“速度陷阱”熔池问题里还有一个很容易忽略的“速度陷阱”——固液相变。很多人把液相线以上的区域当作纯流体固相线以下当作纯固体中间什么也不管结果凝固前沿附近出现诡异的流动“渗透”。原因是材料在熔化与凝固过程中会经过一个糊状区这个区域内液相分数从0渐变到1流动阻力也跟着渐变。如果不给这个区域施加额外的动量阻尼液体可以“渗”进看似固体的区域导致凝固轮廓失真。两个做法要同时用。第一用有效比热容法考虑潜热在固相线和液相线之间的温度区间给比热叠加一个等效峰保证熔化潜热被真实吸收否则温度场会有明显的迟滞偏差。第二在动量方程里加Darcy型糊状区阻尼项F_darcy -C_d*(1-f_l)^2/(f_l^3eps_d)*uf_l是液相分数C_d是一个人为设定的阻尼系数典型量级在10^6到10^8之间。它的物理意义不难理解液相分数越低阻尼越强速度被强制压制到接近零液相分数越接近1阻尼越小不影响正常流动。这个项不加凝固区的寄生流动会反过来污染温度场温度场又影响液相分数最终造成一种很难排查的非物理振荡。4. 实操搭建2D移动激光熔池模型的完整流程4.1 几何、网格与材料准备模型几何不用追求复杂一个二维矩形域足够说清楚问题。下面要用的是金属基体区域开10毫米长、5毫米深上方再补一层3毫米的气相域模拟自由表面上方的保护气体或空气。为什么要留气相域因为水平集方法的两相流框架必须同时求解两相气相域为熔池上方的界面运动和压强释放提供了空间如果把上表面直接设成压强出口或者壁面自由表面的变形自由度会受到人为约束。网格是这一步的重点。我的习惯是先把整体网格用自由三角形铺一遍基体区域最大单元限制在0.2毫米左右然后单独在预计熔池经过的路径上做一条加密带带宽约1毫米加密带内最大单元尺寸取到0.05毫米或更小。水平集的ε就按这条加密带的网格尺寸来定通常取0.025到0.05毫米。注意加密带不是静态的激光移动过程中熔池会跟着移动如果加密带固定在某个位置熔池离开加密区后精度会瞬间下降所以要么加密带覆盖整个扫描路径要么使用自定义移动网格加密功能把加密区绑定到激光位置。材料参数建议直接用温度相关曲线尤其是热导率和比热容。一上来就用常数热导率算激光焊接很轻易就能把峰值温度算得离谱因为固态金属的导热系数随温度升高显著下降。没有实测数据时可以从软件自带材料库找相近牌号的温度相关曲线或者从公开材料数据库导入。我一般把密度、液相线温度、固相线温度、沸点温度、表面张力温度系数、熔化潜热、蒸发潜热这几项单独列成参数表方便后面做敏感性分析。4.2 物理场接口与多物理场耦合节点配置清单COMSOL里推荐使用“层流两相流水平集”接口作为流场主接口再叠加“固体与流体传热”接口。两个接口通过“多物理场”节点建立非等温流动耦合这个耦合会处理流体物性随温度变化以及流动对热量的输运。但仅有这个耦合还不够激光热源、马兰戈尼力、反冲压力、浮力、糊状区阻尼都需要以体积力或热源的形式手动加进去。我在自己模型里的建议配置清单如下层流两相流水平集接口启用两相属性、表面张力水平集变量命名为phils流体传热接口在传热方程中把热源设置为q_laser表达式扫描速度v_scan以参数形式填入多物理场非等温流动耦合设置流体物性随温度插值层流接口的体积力分别填入马兰戈尼切向力、反冲压力、浮力、Darcy阻尼的x和y分量表达式。以二维模型为例几个关键表达式的骨架可以这样写q_laser 2*alpha*P_laser/(pi*R_spot^2)*exp(-2*((x-X_laser)^2(y-Y_top)^2)/R_spot^2) recoil_n 0.54*P_atm*exp(dH_lv/(R_gas*T_boil)*(1-T_boil/(Teps_T))) F_recoil_x -recoil_n*nx*delta_interface F_recoil_y -recoil_n*ny*delta_interface tau_ma dsigma_dT*((I - n*n)*grad_T) F_ma_x tau_ma_x*delta_interface F_ma_y tau_ma_y*delta_interface F_darcy_x -C_d*(1-fl_metal(T))^2/(fl_metal(T)^31e-3)*u F_darcy_y -C_d*(1-fl_metal(T))^2/(fl_metal(T)^31e-3)*v注意这里反冲压力表达式里的T_boil是材料沸点dH_lv是蒸发潜热n_x和n_y是界面法向分量。delta_interface是界面处的狄拉克函数替代建议用基于phils的平滑分布表示宽度与ε量级一致。实际上水平集接口内部可能已经提供了这类工具具体变量名以你实际模型为准但这种明确的表达式写法能让你清楚每一项在干什么。4.3 边界条件、初始条件与求解器边界条件相对简单底部和两侧默认用壁面并叠加传热绝缘也可以把底部设为等温边界模拟基体的散热。气相域顶部设一个开口边界或压力为零的条件允许气相自由进出避免激光加热导致气压异常升高。关键是把激光热源施加在基体上表面的一段局部区域内而不是整个边界否则相当于面热源过大熔池会被瞬间烧穿。初始条件也要花心思。水平集初始状态是把金属相填满基体区域、气相填满上方区域界面正好落在基体表面。温度初始值设为室温然后激光功率从0开始用一个小斜坡升到设定值比如在0.5毫秒内线性爬升。直接全功率瞬态加载会在第一步就产生极高的温度梯度水平集方程很容易发散。如果是移动激光还需要额外设置一个扫描速度变量让热源表达式里的X_laser随时间变化模拟激光沿表面扫过的过程。求解器方面我通常用全耦合求解加上PARDISO直接求解器时间步采用自适应。别一上来就追求超大时间步激光熔池的毛细波尺度很小时间步如果超出CFL条件水平集界面就会在一个步长内移动超过两三个网格界面稳定性立刻崩掉。从1e-5秒量级的初始步长起步配合最大步长限制等熔池稳定后再逐步放开是我实测下来最省事的路径。5. 实测踩坑收敛性、流场畸形、体积损失的排查实录5.1 平流扭曲与界面破碎水平集方法最常见的故障是界面在流动输运过程中被“扯碎”。表现就是φ0.5的等值面不再是一条光滑曲线而是出现锯齿、毛刺甚至分离出若干独立的小液滴伪影。这个问题的根本原因是界面附近的网格分辨率跟不上界面变形速率。我排查时会依次检查三件事界面网格尺寸是不是已经小于ε的三分之一时间步是否满足局部CFL条件也就是单步内界面位移不超过一两格网格γ是否偏小导致界面没有及时被重新压缩φ的梯度逐渐被耗散。绝大多数情况下把时间步降下来、把界面加密带加宽问题就消失了。如果界面还是碎就得怀疑是不是反冲压力表达式里用了过大的数值常数形成局部速度尖峰。5.2 马兰戈尼力引入后的振荡加入马兰戈尼力之后模型出现轻微的高频表面波动是常见现象但如果波动剧烈到界面像在“沸腾”就要检查是否把切向应力错误地加成了法向分量。我遇到过很多次问题出在界面法向投影矩阵的写法上。切向温度梯度必须是I-n·n^T作用后的结果如果忘了投影等于额外叠加了一个很大的法向力界面自然会被反复推挤。另一个容易被忽略的问题是delta函数的宽度。狄拉克函数作用层太薄时界面上的力会集中到一两个网格里造成局部压力尖峰太宽则力扩散到两侧体相削弱了界面约束性。一般把作用宽度调到约4到6个界面网格宽度波形就稳定很多。5.3 常见问题与排查速查表现象可能原因处理方案求解开始就发散热源突变或初始速度场不合理给热源加斜坡、先做无热源稳态初始化熔池表面锯齿波纹水平集ε过小或界面网格过粗加密界面区域网格、适当增大ε液相体积持续下降水平集参数γ偏小或ε过大增大γ、检查φ浓度场总积分加马兰戈尼力后剧烈振荡切向力未投影到界面切平面使用I - n·n^T投影、缩小delta作用层凝固区仍有明显流动糊状区Darcy系数不够大增大C_d到10^7量级、检查f_l过渡区间温度峰值异常偏高吸收率或热源参数设置过大校核吸收率、确认高斯系数积分等于总功率熔池没有明显下凹反冲压力未施加或温度未接近沸点确认反冲表达式触发温度阈值、功率密度是否充足这个表格基本覆盖了我这两年调试熔池模型时碰到的典型问题。你会注意到很多症状的根源彼此耦合比如界面锯齿和液相体积流失往往同时出现因为它们的共同上游就是ε与网格的匹配关系。所以在排查时不要孤立地改一个参数而是先把网格加密带和水平集参数这一组“界面配置”校准好再去调各种力项的强度。我实际跑下来的体会是这套模型的调试顺序非常重要。先不加马兰戈尼、不加反冲压力只用激光热源加表面张力把熔池流场的底子跑通确认温度峰值和熔池量级可靠再逐步加上马兰戈尼项和反冲压力。每加一个力就停下来看界面形貌和流场结构的增量变化别幻想一步到位。水平集方法本身很灵活但灵活性也意味着它对网格、时间步和参数配比极度敏感把ε、γ和界面网格尺寸这三者理顺整个模型就等于成功了一大半。最后再分享一个我一直在用的小技巧同时在监视器里看最高温度和平均液相分数如果液相体积单调下降而最高温度并没有超过沸点那多半是界面数值耗散造成的伪损失而不是真的蒸发了这时候去调水平集参数别急着加蒸发质量损失模型。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑