做飞秒激光加工的朋友都知道,模拟它的热效应绕不开“双温方程”这个名字。飞秒脉冲持续时间只有几百飞秒,激光先把能量交给材料里的电子系统,电子温度瞬间冲到上万开尔文,晶格却还停留在室温附近,两个体系处在强烈的非平衡状态。这时候再拿传统单温度热传导方程来算,连温升的数量级都会出错。更麻烦的是,温升之后紧跟着热应力和材料损伤,这就又牵出了热力耦合模型。
我自己在模拟项目X里把双温方程和热力耦合模型在COMSOL里完整跑通过,中间踩了不少坑。这篇文章把整套建模思路、方程写法、参数设置、热源处理、耦合方式、烧蚀判断以及调参排错经验都拆开讲清楚。如果你正在做超快激光微加工、金属表面改性或者激光损伤分析,这篇文章可以直接当操作参考;就算刚接触光学仿真,也能通过这里的方程拆解和物理过程分析,把两个模型的交互关系有个系统的认知。
1. 飞秒激光烧蚀模型的核心物理图像
1.1 双温方程的适用边界与推导思路
双温模型的核心思想,是把材料看成两个热力学子系统:自由电子系统和晶格系统。激光脉冲极短,电子吸收光子的能量后迅速升温,但电子和晶格之间的能量交换需要时间。在脉冲结束之前,电子温度Te和晶格温度Tl之间存在明显的温差,热平衡远未建立。
对应的控制方程是两组瞬态热传导方程:
Ce(Te)·∂Te/∂t = ∇·(ke(Te)·∇Te) - G·(Te - Tl) + Q(r,t)
Cl·∂Tl/∂t = ∇·(kl·∇Tl) + G·(Te - Tl)
其中Ce是电子比热容,ke是电子热导率,Cl和kl分别是晶格比热容和晶格热导率,G是电子-声子耦合系数,Q(r,t)是激光热源项。
为什么飞秒激光必须用双温方程?可以这么理解:传统纳秒激光的脉冲宽度远大于电子-声子弛豫时间,电子吸收的能量一边进一边就交给晶格,电子和晶格几乎同步升温。飞秒激光则不同,脉冲宽度比弛豫时间还短,能量先全部囤在电子系统里,等到脉冲结束了电子才开始慢慢把热量传递给晶格。这个“能量先囤后放”的过程,正是超快激光烧蚀和普通长脉冲激光烧蚀在机理上最本质的区别。
适用边界也就在这里。当脉宽超过10皮秒甚至更长时间,Te和Tl的温差变小,双温方程退化为单温方程,可以不用这么复杂的模型。所以你在COMSOL里建飞秒模型,确认了脉宽在飞秒量级,就一定要把两个温度分开算。
1.2 热力耦合:从晶格温升到应力波
双温方程解决的是温度场怎么演化,但烧蚀还涉及材料的力学响应。晶格温度升高导致材料热膨胀,而热膨胀受到周围材料的约束就会产生热应力。COMSOL固体力学模块处理这个问题很直接:在热膨胀子节点里输入温度变量,把晶格温度Tl作为热载荷施加进去,计算热应变和热应力。
这里有一个非常关键的物理细节:热应力对应的温度一定是晶格温度Tl,不是电子温度Te。热膨胀是晶格原子振动加剧的结果,电子温度升高本身不会直接造成晶格膨胀。飞秒脉冲作用下,Te的峰值可以是Tl峰值的数倍甚至一个数量级,这时候如果把Te填进热力耦合方程,应力结果会被显著放大。
热力耦合不只是静力学问题。飞秒激光加热速率极快,晶格温度在极短时间内飙到数千开尔文,表面附近的材料受到强烈的压缩,会产生一个快速传播的压缩应力波。这个应力波在纳秒时间尺度内从表面传向材料深处,可能在辐照区下方形成拉应力区域,造成亚表面损伤。所以热力耦合模型的时间范围要覆盖到纳秒尺度,才能看到应力波的完整传播过程。
1.3 两个模型之间的相互作用该怎么理解
标题里说“相互作用关系”,很多初学者会把双温方程和热力耦合理解成串行流程:先算温度场,再把温度结果导到力学模块里加载应力。实际这种单向解耦在大部分金属飞秒烧蚀模拟中确实够用,但它只是问题的一半。
相互作用至少包含三层含义。第一层,双温模型是热力耦合的能量输入源:激光参数、电子热扩散、电声耦合过程决定了晶格温度场的时空分布,进而决定了热应力的大小和传播方向。第二层,晶格升温后的温度分布又反过来影响电子系统的冷却速率,因为G(Te-Tl)这一项的温度差是双向作用的。第三层,在某些极端条件下,应力应变场会对材料的热物性和温度场产生反馈,但在COMSOL常规模拟中这种双向耦合贡献很小,基本可以忽略。
所以跑模型之前,先想明白自己关心的是热主导的烧蚀还是应力主导的损伤,这决定你要不要做全耦合。对大多数金属靶材,飞秒烧蚀以热烧蚀为主,单向耦合并把Te和Tl分开处理已经能给出相当准确的趋势。对陶瓷、玻璃等脆性材料,应力波的作用会更凸显,这时要特别关注力学结果的提取时间窗口。
2. 建模前的参数准备与网格规划
2.1 激光热源函数与单位换算
双温方程里的热源项Q(r,t)是核心输入。飞秒激光在时间和空间上都近似高斯分布,常用的热源表达式可以写作:
Q(r,z,t) = sqrt(4·ln2/π) · F/(tp·δb) · (1-R) · exp(-r²/ω0²) · exp(-4·ln2·(t-t0)²/tp²) · exp(-z/δb)
这里F是激光能量密度,单位J/m²;tp是脉冲半高全宽;δb是光学吸收深度(也叫趋肤深度);R是表面反射率;ω0是光斑半径。分母里的F/(tp·δb)整体决定了能量沉积的体积密度,时间高斯项把脉冲的能量分布到时间轴上,空间高斯项把能量分布到径向和深度上。
单位换算是踩坑高发区。COMSOL里默认国际单位制,F如果用实验常用的J/cm²,必须先乘10000转成J/m²;光斑半径如果用微米,也要转成米。建议所有参数都放到全局参数列表里,用带单位的形式定义,比如F0 = 0.5[J/cm^2]这样的写法,COMSOL会自动换算。
还有一个常被忽略的点:反射率R。很多人图省事直接用1-R=1,等于把入射能量高估了一大截。金属在近红外波段的反射率通常有90%以上,实际吸收的能量可能只有入射的百分之几。这个误差一上来就是数量级的偏差,后面调参全白调。
2.2 材料参数:那些不能被忽视的量
双温方程涉及的参数比普通热分析多得多。除了常规的密度、比热容、热导率,还需要电子比热容Ce、电子热导率ke、电声耦合系数G、吸收深度δb。
以常见金属为例:
| 参数 | 铜参考值 | 金参考值 | 铝参考值 | 单位 |
|---|---|---|---|---|
| 电子比热常数γ | 约96 | 约68 | 约135 | J/(m³·K²) |
| 电声耦合系数G | 约1×10^17 | 约2×10^16 | 约3×10^17 | W/(m³·K) |
| 晶格热导率kl | 约400 | 约317 | 约237 | W/(m·K) |
| 吸收深度δb | 约15 | 约12 | 约8 | nm |
这里的Ce通常写成γ·Te的形式,γ就是电子比热常数。电子热导率ke也要考虑温度依赖,室温附近可以按Drude模型近似,但在电子温度极高时需要用经验公式处理。
电声耦合系数G是双温模型里的灵魂参数。G越大,电子能量传给晶格的速率越快,晶格升温越快,电子和晶格越早趋于平衡。不同材料G值差异很大,如果从文献里拿到的是一个范围,建议取中值先跑通,再用实验烧蚀深度来标定。
2.3 几何建模与网格取舍
飞秒激光与金属作用的尺度有一个显著特点:深度方向的关键尺度在纳米量级(吸收深度十几纳米),而径向光斑尺寸通常在几十微米量级。横纵比差了好几个数量级,几何建模要聪明一点。
我习惯用二维轴对称模型。激光光斑是圆对称的,材料区域取一个矩形剖面,中心轴设为对称轴,径向宽度取3-5倍光斑半径,深度取10-50微米。这样既能覆盖应力波在纳秒时间内的传播范围,又不至于让网格数量爆炸。
网格的重点在表层。吸收深度只有十几纳米,如果表层网格画到几百纳米,激光能量沉积过程根本无法分辨。建议在表面以下0-200nm的范围内画3-5nm的均匀网格层,往下再用渐变网格过渡。径向网格在光斑范围内用2-5μm即可,因为温度梯度的主导方向是深度方向。
这种大横纵比网格在COMSOL里直接扫掠分区来做,表面上看着简单,实际需要拆成多个域分别定义网格序列。我遇到过网格过渡区域几何畸变导致求解发散的情况,后来把过渡层拆成两段渐变,问题就消失了。
3. COMSOL中双温方程的具体落地
3.1 物理场接口选择方案
实现双温方程有两条主流路线。一条是开两个“固体传热”接口,一个管电子温度,一个管晶格温度;另一条是用通用偏微分方程接口,把Te和Tl当作两个因变量手写方程。两条我都试过,各有适用场景。
传热接口方案更推荐给大多数使用者。具体做法是:添加两个Heat Transfer in Solids接口,分别命名为“电子系统”和“晶格系统”。在电子系统接口里,把密度设为1,比热容设为Ce(Te),导热系数设为ke(Te)。传热方程里的ρCp项,ρ取1之后数值上就等于Ce,单位通过变量定义处理一下即可。热源项里写入-G·(Te-Tl)+Q。晶格系统接口同理,密度设1,比热容设Cl,导热系数设kl,热源项写+G·(Te-Tl)。
这个讨巧做法的好处是:材料属性接口自带温度依赖变量的支持,后处理时直接有Te和Tl两个温度场可用,云图、探针、剖线全部现成。PDE接口在引入高阶非线性项时更灵活,但调试成本高,变量映射容易出错,新手不建议一上来就用。
两个传热接口之间通过变量交互实现耦合。COMSOL里同一组件下的变量名全局可见,在热源项里引用另一个接口的温度变量(如T_electron)即可。物理场接口本身不需要做特殊的“耦合”操作。
3.2 最关键的热源加载与脉冲设置
热源表达式不要直接写在物理场设置里,而是提前在“全局定义”里建好解析函数。这样表达式一目了然,后续做脉宽扫描、能量密度扫描时只需要修改参数即可,不用反复进物理场界面摆弄表达式。
时间项里有一个细节:t0要选脉冲峰值时刻,而不是0。比如tp=300fs,可以把t0设为600fs或1ps,这样脉冲从0附近缓慢上升,避免了t=0时刻激光强度已有较大值带来的载荷突变。这个处理对数值稳定性的帮助非常明显,尤其是后面还要耦合力学模块时。
在二维轴对称模型中,热源表达式里的r是径向坐标,z是深度方向坐标。表层深度方向的指数衰减项exp(-z/δb)是热源沿深度分布的关键。如果模型里z轴方向定义和表达式不一致,能量会被加载到错误的位置,表面温度反而偏低。
3.3 求解器设置与时间步长策略
飞秒激光模拟的时间尺度跨度非常大。前1皮秒内电子温度剧烈变化,需要分辨亚飞秒尺度的演化;而后面应力波传播需要几百皮秒到几纳秒。COMSOL的BDF求解器可以自适应步长,但初始步长必须给到足够小。
我通常把初始步长设在0.1fs级别,总时长先跑1-2ps,观察电子温度和晶格温度的弛豫过程。确认趋势正确后,再加大总时长到1-10ns,让应力波完整传播出去。如果一次性直接跑1ns,BDF求解器在初始阶段可能为了满足精度而卡住,计算时间成倍增长。
非线性较强时,建议每步最大阶数限制在2以内,可以避免高频振荡误判。同时开启“严格”模式,让求解器对代数环误差更敏感。温度依赖的Ce和ke经常带来收敛波动,别一上来就追求全耦合,先把温度场跑稳再加力学。
4. 热力耦合模型接入与烧蚀结果提取
4.1 固体力学模块接入晶格温度
温度场稳定之后,开始接固体力学模块。添加Solid Mechanics接口,在热膨胀子节点里做两个关键设置:参考温度设为环境温度(比如293K),温度输入选择用户定义,变量填Tl对应的变量名。
这里务必确认填的是晶格温度的变量名。我一开始填成电子温度Te,表面应力结果偏大了将近一倍,因为Te峰值上万开尔文,而晶格温度峰值只有几千开尔文。这个错误在云图里看起来非常合理,很容易被当成真实的超高应力波,但它完全是错的。
力学边界条件也要根据实际场景调整。如果模拟的是靶材表面单脉冲烧蚀,底部可以设置固定约束,侧面用低反射边界模拟半无限大介质。如果关注的是薄膜结构,那么基底约束要按实际工艺来设置。应力波在边界处会发生反射,如果几何域取小了,反射波会污染目标区域的应力分布,所以深度方向要留够。
4.2 烧蚀阈值与烧蚀深度的判断方法
模拟本身不会自动告诉你哪里烧掉了,需要自己定义判据。最常见的是温度判据:当晶格温度超过材料熔点或气化温度时,认为该位置发生烧蚀。
实际提取烧蚀深度时,沿中心轴观察晶格温度的峰值包络线,找到Tl等于熔点的那条等值线位置,该位置离表面的距离就是预测烧蚀深度。在COMSOL后处理里可以用截线探针加“最大温度”表达式来提取,也可以直接画等值线图观察。
另一个有效的校验手段是经验公式。对于超过阈值通量的单脉冲烧蚀,烧蚀深度L与能量密度F之间满足对数关系:
L = δb · ln(F / F_th)
F_th是材料的烧蚀阈值通量。这个公式在金属飞秒烧蚀中相当准确。如果模拟得到的烧蚀深度与公式预测差太多,优先检查吸收深度δb和实际吸收能量1-R的取值,这两项是误差主要来源。
找烧蚀阈值本身也可以靠模拟完成:扫描一系列能量密度值,记录中心表面晶格温度峰值恰好达到熔点的能量密度。这个扫描过程在COMSOL参数化扫描里可以一条龙跑完,一次计算拿到整条阈值曲线。
4.3 从模拟结果反推相互作用关系
模型跑通后,不要只盯最终烧蚀深度。把中间过程拉出来看,能更直观地理解双温和热力耦合的相互作用。
首先是Te和Tl的时间演化曲线。前几百飞秒Te急剧拉升,Tl几乎不动,这是能量囤积阶段;随后Te开始快速下降,Tl继续缓慢上升,这是能量释放阶段。两条曲线之间最大温差的位置,就是非平衡效应最明显的时刻。
然后是应力场与温度场的对比。晶格温度梯度大的区域,热应力也大。飞秒激光的热应力波峰值通常出现在脉冲结束后的几皮秒内,传播速度接近材料声速。把应力波峰的位置随时间画出来,可以算出应力波在材料内部的传播速度,校验用的就是声速的常识值。
这两个分析合起来,就是标题里说的“相互作用关系”:双温模型决定了能量什么时候沉积、沉积在哪里,热力耦合模型决定了晶格升温后材料怎么变形、应力波怎么传播,而应力波又可能反过来造成温度场之外的力学损伤。理解了这条链,你才算真正把这个模型吃透。
5. 高频问题排查与参数调优实录
5.1 电子热容在低温段的数值奇异
双温模型一个经典问题是:Ce = γ·Te,当Te趋近于0时Ce也趋近于0,热扩散方程在低温段会出现数值奇异。常见表现是Te出现负值或振荡,甚至一步就发散。
解决方案是给电子热容加一个下限保护。比如定义Ce = γ·max(Te, 300[K]),把最低值限制在室温附近,既能维持数值稳定,又不会显著影响物理结果。这个保护值本身就有物理含义:即使在低温下电子也存在基础热容,只是双温模型里用γTe近似时不体现。
类似的保护还适用于ke。电子热导率在Te极低时也不宜用高温表达式,同样做下限截断。注意这类处理要写在使用变量的表达式中,而不是把Ce定义成常数,否则高温段的非线性响应就丢掉了。
5.2 不收敛和振荡的调整顺序
模型不收敛时,别急着动参数。按顺序排查:先看网格在吸收深度范围内是否足够细,至少要有5层网格;再看初始时间步长是否小于0.1fs;然后看热源表达式里的t0是否合理;最后再看Ce下限保护有没有加。
振荡问题大部分出在网格和时间步长的匹配上。电子温度急剧上升时,能量沉积区域极小,如果网格太粗,温度梯度被拉平,求解器为了追上剧烈变化只能反复缩小步长,计算量爆炸。此时优先加密表层网格,效果通常比缩小通用时间步长更好。
另一个容易被忽略的因素是代数求解器设置。全耦合时,Te、Tl和位移场一起迭代,如果初始条件不当,容易在电子-晶格温差剧烈变化时出现代数环收敛困难。建议先分离求解温度场,温度场稳定后再引入力学模块做联合求解。
5.3 模拟结果与实验偏差的排查思路
模拟数据和实验对不上的时候,排查顺序非常固定。第一个怀疑对象是反射率R。实验上常用总入射能量来标定,而模拟用的是吸收能量,两者差了好几倍。第二个是吸收深度δb,这个参数不同文献差异很大,而且随材料表面状态和粗糙度变化,优先用实验烧蚀深度反推标定。第三个是电声耦合系数G,这个参数在高温下并不是常数,有的文献里G会随电子温度变化,取值不同对晶格温度的峰值影响明显。
| 故障现象 | 可能原因 | 优先处理办法 |
|---|---|---|
| 电子温度负值或振荡 | Ce低温奇异 | 给Ce加下限截断 |
| 晶格温度过高 | 忽略了反射损耗 | 改用1-R表示实际吸收 |
| 烧蚀深度偏差大 | δb取值不合适 | 用实验深度反拟合δb |
| 应力场振荡剧烈 | 时间步长或边界反射 | 缩小步长,扩大几何域 |
| 双温曲线重合 | G取值过大 | 检查G值并对比文献量级 |
最后再分享一点个人经验。整个模型里,最容易出错的地方往往不是方程本身,而是物理量单位的传导。COMSOL的表达式系统允许带单位变量,但自定义解析函数时大家习惯拍脑袋输数值。我建议所有关键参数一律带单位定义,让软件帮你做单位检查,能省掉大量排查时间。
实际操作中我的体会是:双温方程和热力耦合在COMSOL里跑通不难,难的是每次调整参数后都要能解释结果物不物理。如果你也在做类似的飞秒激光模拟,先把能量传递链条在纸上画清楚,再去动网格和求解器设置,比一上来就调G、调ke高效得多。这个模型后面还能扩展的材料蒸发潜热、相变界面追踪、以及多脉冲累积效应,都是可以继续深入的方向。