☰
飞秒激光烧蚀COMSOL双温模型搭建与验证全流程解析
2026/10/14 11:51:19 网站建设 项目流程

做飞秒激光烧蚀仿真,绕不开“双温方程”这四个字。我第一次用COMSOL搭双温热力耦合模型时,踩了无数坑,最后总算能把模拟出的烧蚀深度和实验曲线对上了。这篇东西就是复盘整个过程的记录,适合刚接触飞秒激光仿真的研究生,也适合在找烧蚀判据的工艺工程师。我会把从物理模型、软件实现到验证对比的完整思路都梳理一遍,尽量说人话,不堆公式,但该有的关键表达式和参数细节一个不少。

1. 先从物理源头说起:为什么飞秒激光不能套用常规热仿真

1.1 双温方程到底在描述什么

飞秒激光辐照到金属材料上,首先吸收能量的是材料里的自由电子。脉冲持续时间只有几十到几百飞秒,电子在这么短的时间里被激发到极高的能量状态,电子温度可以瞬间飙升到几千甚至上万开尔文。但晶格(原子骨架)来不及响应,还是“凉”的。之后电子与晶格之间通过电子-声子散射慢慢交换能量,电子温度下降,晶格温度上升,这个过程通常要持续几皮秒到几十皮秒。

所以在激光作用后的前几个皮秒内,材料内部根本不存在一个统一的“温度”。你如果硬要拿传统的单温度热传导模型去算,得到的结果一定会偏离真实物理。双温方程的做法很直接:把电子和晶格当成两个热力学子系统,各自有一个温度场,一个是电子温度(T_e),一个是晶格温度(T_l),两者之间通过一个耦合项交换能量。

从数学形式上看,常见的一维双温方程长这样:

  • 电子系统:(C_e(T_e)\frac{\partial T_e}{\partial t} = \nabla \cdot (\kappa_e(T_e)\nabla T_e) - G(T_e - T_l) + Q)
  • 晶格系统:(C_l(T_l)\frac{\partial T_l}{\partial t} = \nabla \cdot (\kappa_l \nabla T_l) + G(T_e - T_l))

其中(C_e)和(C_l)分别是电子和晶格的热容,(\kappa_e)和(\kappa_l)是电子和晶格的热导率,(G)是电子-声子耦合因子,(Q)是激光热源项。这两个方程描述的就是“电子先热、晶格后热、然后逐渐趋于同一温度”的物理过程。

1.2 为什么传统傅里叶热传导在飞秒尺度会失效

傅里叶导热定律成立有一个隐含前提:局部热平衡。意思是材料里每个微小体积内部,电子和声子的能量分布已经足够均匀,可以定义一个共同的温度。但在飞秒激光条件下,能量注入时间是(10^{-13})到(10^{-12})秒量级,比电子-声子弛豫时间还要短,体系处于强烈的非平衡态。

打个比方:你用微波炉猛叮一秒钟,碗里的水可能已经局部沸腾冒泡了,但瓷碗本身还没热透。如果你只盯着碗的“整体温度”去描述整个系统的热量状态,就会错得离谱。飞秒激光烧蚀正是这样一种极端场景。

此外,飞秒激光在材料表面沉积的功率密度极高,通常可以达到(10^{18} \mathrm{W/m^2})级别的量级。这样大的能量密度会产生极大的温度梯度,电子的热导率也不再是常温常数,而是和电子温度、晶格温度都有关。比如金属中电子热导率在很多模型里近似表示为(\kappa_e = \kappa_{e0}\frac{T_e}{T_l}),温度比值高时热导率迅速上升。这些因素都决定了我们必须在双温框架下做计算。

1.3 模型要解决什么问题

做这个模型不是为了炫数值技巧,核心目标通常是三个:

预测飞秒激光在材料表面造成的烧蚀深度和烧蚀半径。这是工程上最关心的指标,直接关系到激光微加工、激光清洗、表面微纳结构制备的工艺参数选择。

获取电子温度和晶格温度的时空演化。这可以帮助解释材料内部为什么会在表面以下的某个深度出现微裂纹、层裂等损伤,而这些损伤光靠实验很难实时观察。

把热场和应力场耦合起来。飞秒激光烧蚀不只是一个热力学问题,快速热膨胀会在材料内部激发应力波,应力波可能导致脆性材料断裂,形成机械去除效果。所以“热力耦合”是本模型的关键词。

2. COMSOL里搭建双温模型的整体思路

2.1 选模块还是自定义方程:我的选择

COMSOL里没有现成的“飞秒激光烧蚀模块”,需要自己把双温方程输进去。我最初尝试过在“固体传热”模块基础上修改,后来发现很别扭,因为固体传热内置的物理接口默认只有一个温度场,所有材料属性都绑定到那个单一温度上。虽然可以通过额外定义变量、修改传热方程来“伪装”成双温模型,但对初学的人来说很容易绕晕。

我更推荐直接使用“系数型偏微分方程”接口。在COMSOL模型向导里新建一个二维轴对称模型,瞬态求解,选择“系数型PDE”,然后定义两个因变量(T_e)和(T_l)。在这个接口里,双温方程可以写成标准形式:

[ d_a\frac{\partial u}{\partial t} + \nabla \cdot (-c\nabla u) = f ]

其中(u = [T_e, T_l]^T)。矩阵系数设成:

  • (d_a = \mathrm{diag}(C_e, C_l))
  • (c = \mathrm{diag}(\kappa_e, \kappa_l))
  • (f = [-G(T_e - T_l) + Q, \ +G(T_e - T_l)])

这样设置有个好处:所有非线性项都可以直接在表达式里写出来,想改哪个物理参数都能立刻看到,调试起来非常直观。固体传热模块的优势是自带材料库、边界条件面板和散热接口,但双温场景下我最终还是选择了自定义PDE,因为物理控制权更重要。

2.2 几何与材料参数的设定逻辑

几何我建议先用二维轴对称矩形域,比如半径50微米、深度20微米的一个截面。飞秒激光烧蚀通常是一个微米量级的小坑,光斑直径也就是几十微米,作用深度更小。如果直接建三维模型,网格量会爆炸,计算完一个参数点可能就要等上半天。

二维轴对称模型相当于把三维圆柱体沿中心轴切开,只算一半截面,计算量至少少两个量级,而物理上完全等效。

材料参数是模型成败的关键。比较常见的取值参考如下:

参数表达式/取值范围说明
电子热容 (C_e)(\gamma \cdot T_e),(\gamma) 取值约 (100\sim1000 \ \mathrm{J/(m^3K^2)})金属自由电子的热容明显依赖于电子温度
晶格热容 (C_l)(2\sim4\ \mathrm{MJ/(m^3K)})常温变化不大,可以设常数
电子热导率 (\kappa_e)(\kappa_{e0}\frac{T_e}{T_l})(\kappa_{e0}) 几百到上千 W/(m·K)
晶格热导率 (\kappa_l)几十 W/(m·K)相比电子热导率通常小一个量级,有时可忽略
电子-声子耦合系数 (G)(10^{16}\sim10^{17} \ \mathrm{W/(m^3K)})不同材料差异明显,是标定重点
光学穿透深度 (\delta)与激光波长和材料消光系数相关金属一般几十纳米到百纳米级

坦白说,文献里的参数范围非常宽,同样的材料、不同课题组给出来的(\gamma)和(G)能差两倍。不要照搬,最适合的做法是把它们当可调参数,后续用实验数据反推。我当时把(G)做成全局参数,专门扫过一两组实验数据反推出来的范围,比直接套文献值稳得多。

2.3 热源、边界条件与关键表达式

飞秒激光热源需要同时考虑时间分布、径向分布和深度衰减。我在COMSOL里写的体积热源表达式是:

[ Q(r,z,t) = q_0 \cdot \exp\left(-\frac{t^2}{\tau^2}\right) \cdot \exp\left(-\frac{r^2}{\omega_0^2}\right) \cdot \exp\left(-\frac{z}{\delta}\right) ]

这里(\tau)是脉冲宽度参数,(\omega_0)是光斑半径(实际用(1/e^2)半径),(\delta)是光学穿透深度,(q_0)是峰值体积加热率。(q_0)不能随便拍脑袋,要让热源在空间和时间上的积分等于材料实际吸收的能量。实际单脉冲能量设为(E_p),光斑面积(\pi \omega_0^2),材料吸收率为(A),则峰值体积加热率近似为:

[ q_0 \approx \frac{A \cdot E_p}{\tau \sqrt{\pi}\ \pi \omega_0^2 \ \delta} ]

分母里出现(\sqrt{\pi})是因为高斯时间分布的积分结果。这里没有考虑反射率随温度的变化,先把它归并到吸收率(A)里。

边界条件方面,对称轴处用零通量条件;材料侧面和底部可以设为室温固定温度或者绝热,但实际上在几十皮秒到几纳秒的时间尺度内,热扩散距离只有几微米,只要几何域足够大,边界条件影响很小。材料表面不需要加对流换热和辐射,因为飞秒时间尺度内表面热损失可以忽略不计,能量基本都留在材料内部。

2.4 网格和时间步长:飞秒问题的核心难点

网格和时间步长是飞秒激光仿真最大的拦路虎。光学穿透深度(\delta)通常只有几十纳米,这意味着激光能量主要集中在材料表面很薄的一层里。如果表面第一层网格厚度太大,比如一个网格就是1微米,能量被严重抹平,烧蚀深度一定会算小。

我的做法是在表面附近加边界层网格,第一层厚度取(\delta)的1/5到1/10,比如(\delta=50\ \mathrm{nm}),第一层就设5纳米左右。然后网格增长率1.2到1.3,向材料内部逐渐变疏。这样既保证了表面分辨率,又不至于让总网格数失控。二维轴对称模型下,总网格数一般能控制在几万到十几万之间,普通工作站跑起来没有压力。

时间步长需要分段设置。激光脉冲作用阶段,即从0到几个(\tau)的范围内,我通常把最大时间步长限制在0.01飞秒到0.1飞秒量级,确保脉冲波形被准确积分。之后电子-晶格能量交换阶段,也就是0.1皮秒到10皮秒,步长可以放宽到0.01皮秒到0.1皮秒。再往后到纳秒级,步长可以继续放宽到皮秒甚至飞秒?注意单位:纳秒尺度可以用1皮秒以上步长。COMSOL的BDF求解器支持自适应变阶变步长,但如果不手动限制,它可能会在源项剧烈变化时偷偷跨过太多步长,导致温度曲线失真。

经验是:先做一次粗步长试算,再逐步缩小最大时间步长,直到结果不再显著变化,再把最后一版作为正式结果。这个过程虽然费时,但飞秒尺度仿真绝对不能跳过。

3. 热力耦合:从“加热”到“烧蚀”的距离

3.1 热应力和应力波的来源

双温方程算出来的晶格温度场是热力耦合的基础。晶格温度不均匀升高后,材料表层产生热膨胀,而周围材料还保持低温,体积膨胀被约束住,于是产生了很大的压应力。由于飞秒加热速度极快,这个应力不是缓慢积累的,而是以应力波的形式向材料内部和表面传播。应力波在自由表面反射后还会形成拉应力区,拉应力足够大时能把材料表层撕开,产生层裂或飞溅颗粒。这正是飞秒激光“冷加工”传言背后的一个物理机制:热来不及扩散,但应力波已经先到了。

在COMSOL“固体力学”接口里,我并没有直接把力学方程和双温方程写进同一个PDE。更常规的做法是给固体力学定义热膨胀项,让模型读入晶格温度(T_l)作为温度载荷。热应变表达式为:

[ \varepsilon_{th} = \alpha_l \cdot (T_l - T_0) ]

(\alpha_l)是材料的热膨胀系数,(T_0)是初始温度。飞秒时间尺度内热膨胀主要受晶格温度控制,电子温度对晶格位移的直接贡献很小,所以用(T_l)做载荷是合理的。

3.2 烧蚀判据怎么定

烧蚀判据绝对是模型里最“玄学”的部分,但又无法回避。常见的两种判据是温度阈值和应力阈值。

温度阈值的思路很直接:晶格温度达到沸点或某个临界温度,就认为该位置的材料被烧蚀。实现起来最简单,处理边界和深度提取也容易。缺点也很明显:忽略了相变潜热、等离子体屏蔽、喷溅带走能量等,算出来的烧蚀深度通常会偏高,需要引入一个“等效烧蚀温度”来吸收这些误差。

应力阈值的思路更偏向物理机制:当材料内部最大主应力超过动态抗拉强度或断裂强度时,认为发生断裂去除。这个判据对脆性材料特别重要,因为很多情况下材料还没达到气化温度,就已经被应力波崩碎了。

我自己实际项目中用的是“双判据”:表面附近的烧蚀用温度阈值判断,内部微裂纹用应力阈值判断。表面烧蚀深度主要和实验凹坑深度对比,内部损伤和实验截面裂纹分布做定性对比。这样做的好处是至少能同时解释“烧坑”和“热影响区微裂纹”两种现象。

3.3 关键输出与后处理

建模前先想明白要导出什么量,不然会白算一场。我通常输出以下几组:

  • 沿中心轴线的晶格温度峰值包络线,也就是“深度-最高晶格温度”曲线。用它来找烧蚀深度:温度峰值超过阈值的最深位置就是烧蚀边界。
  • 表面径向温度分布,用来定烧蚀半径。
  • 不同脉冲能量下的烧蚀深度曲线(L(F)),这是实验验证的主曲线。
  • 应力波传播快照,比如在1皮秒、10皮秒、100皮秒时刻的最大主应力分布云图。

后处理有个实用技巧:不要直接看瞬态云图就收工,而是用“全局计算”功能提取特定点的时间历程。我和实验对比时最看重的是“同一能量密度下模拟烧蚀深度是否落进实验误差带”,这条信息往往比云图颜色分布更有说服力。

4. 验证环节:模型靠不靠谱,实验数据说了算

4.1 标定流程:从烧蚀阈值出发

仿真模型如果只给自己看,怎么算都有理。但一旦要和实验数据对比,标定就不可避免。我的标定流程分三步走。

第一步,做实验测量不同单脉冲能量下的烧蚀凹坑深度和直径,至少覆盖从近阈值到强烧蚀的五个能量点。实验数据里最基础的两个特征量是烧蚀阈值通量(F_{th})和烧蚀深度曲线的斜率。

第二步,在仿真中固定物理参数(\gamma)、(G)、(\delta)等,把吸收率(A)当成第一个可调参数。反复试算,使模拟中开始出现烧蚀(表面晶格温度达到判据)所需的最低能量密度与实验测得的(F_{th})对齐。

第三步,保持(A)不变,微调“等效烧蚀温度”(T_{ab})或应力阈值,让模拟的烧蚀深度绝对数值和实验深度尽可能接近。如果曲线形状对不上,就要回头检查(G)和(\gamma),因为它们影响能量的时间分配,本质上决定了热量往深处传得快慢。

这一步我通常用COMSOL的“参数化扫描”配合实验数据表来做,每次扫描完直接对比拟合残差。理想情况下模拟结果和实验曲线的偏差可以控制在10%以内。

4.2 对比形貌和深度曲线

实验上用扫描电子显微镜或共聚焦显微镜测量凹坑形貌,和模拟的径向温度等值线放在一起对比。经典的理论模型给出烧蚀深度(L)与能量密度(F)的关系近似为:

[ L \approx \delta \ln\left(\frac{F}{F_{th}}\right) ]

也就是说,在一定的能量范围内,烧蚀深度和能量密度的对数成线性。我在很多实验曲线里都看到这个规律,模拟结果也会自然呈现这个趋势。如果某个参数区间模拟结果偏离对数线性,我就要怀疑是不是网格太粗、能量泄漏或者热源表达式里的时间卷积写错了。

对凹坑直径的验证也很有价值。模拟中表面径向温度达到判据的位置就是烧蚀边界,可以直接读出直径。实验中凹坑边缘往往带一圈熔融翻边,所以对比时要注意界定是“可见凹陷”还是“再铸层边界”,这个标准如果不统一,误差会非常大。

我在实际项目中就遇到过一个情况:模拟凹坑直径比实验小15%,一开始以为是吸收率设低了,后来发现是实验用显微镜测量时把熔融凸边也算进了凹坑直径。这个问题相当于两边标准不一致,和模型物理本身没有关系。

4.3 误差来源与修正方法

仿真和实验不可能完全一致,关键是要知道误差从哪里来。我在实际复现中感触比较深的误差源有这些:

  • 吸收率不是常数。飞秒激光作用期间表面温度快速上升,反射率、表面氧化层都会变化,这个因素对能量沉积影响很大。我的处理方式是把“有效吸收率”整体调低或调高,用来等效涵盖等离子体屏蔽和表面相变造成的能量损失。
  • 相变潜热被忽略。晶格温度超过熔点后,熔化会吸收大量热量,如果不加潜热修正,晶格温度峰值会偏高,烧蚀深度会被高估。轻量化修正方法是把熔化和气化潜热折合成热容增量加入(C_l)。
  • 电子热导率模型过度简化。(\kappa_e = \kappa_{e0} T_e/T_l)在电子温度极高或接近晶格温度时都可能有偏差,更严格的模型需要考虑电子-声子散射和电子-电子散射的联合作用。
  • 实验测量的误差。凹坑深度在几个微米量级,共聚焦显微镜横向分辨率有限,近阈值点尤其不可靠。对比时我会把实验误差棒画出来,仿真点落在误差带内就算通过。

修正常用的手段是参数反演。我在前面提到的三步标定本质上就是在“反演”吸收率和烧蚀阈值。反演出来的参数虽然不一定有明确物理意义,但对工艺预测来说非常实用。

5. 我踩过的坑:常见问题与排查技巧

5.1 双温方程的数值振荡

我最开始做双温仿真时遇到的最大毛病是温度振荡和负温度。电子热容(C_e)在大约几到几十开尔文以下变得很小,方程刚度极大,时间步长稍大一点,电子温度就会跳成负值,看起来完全违反物理。COMSOL不会自动帮你修正。

解决办法有两个层面。第一是给电子温度设置下限,比如(T_e)最小值设为5开尔文或10开尔文,避免热容接近零导致方程退化。第二个层面是优化时间步长,特别是激光脉冲峰值附近的步长一定要足够小。我实测中把峰值段最大步长从0.5飞秒改成0.05飞秒后,振荡直接消失,总计算时间其实只多了百分之二十。

齿轮状振荡的另一类来源是热源表达式里(q_0)乘出来的峰值功率太高,隐式求解器在局部单元上无法快速收敛。解决方式是开启“阻尼牛顿”迭代,并适当减小网格最大尺寸,尤其是表面中心附近。

5.2 网格依赖与计算资源失控

如果你把网格加密一倍,烧蚀深度却变了20%,说明模型还没收敛。这个坑非常容易踩到,尤其是表面边界层网格不够细的时候。我的建议是至少做两次网格细化试验:第一次用较粗网格跑完,第二次把表面第一层厚度减半,第三次再减半,观察烧蚀深度变化是否小于5%。如果变化仍然很大,说明你的网格还在非收敛区,直接加大网格密度。

计算资源失控通常发生在三维模型上。二维轴对称网格几万单元时,三维可能已经几千万单元,而且飞秒问题的时间分辨率又很高,普通机器根本跑不动。如果必须做三维,可以考虑先算二维轴对称得到基本参数,再截取局部区域做三维微区模拟,但不要让三维直接承接全尺寸仿真任务。

我常用的模型优化方法是把几何深度控制在热影响区内,比如50微米左右;表面网格做成边界层,深度方向用等比数列逐渐放大。经过这些优化,单参数扫描下的模型运行时间可以从几个小时压缩到二三十分钟。

5.3 耦合求解不收敛怎么办

同时求解双温方程和固体力学方程时,最容易遇到的问题是牛顿迭代不收敛。原因在于两个物理场的时间尺度差别巨大:电子-晶格能量交换在皮秒量级,而应力波传播在纳秒量级,两者耦合明显但刚度矩阵形态差异大。直接全耦合求解会把收敛性搞得很差。

我的经验是先采用“分离式求解器”:每个时间步内先求解双温方程更新温度场,再把晶格温度传给固体力学模块。如果只是预测烧蚀深度和凹坑形貌,甚至可以不做瞬态力学,只在后处理中用“准静态热应力”视图观察应力分布。只有当研究应力波、层裂、内部微裂纹时,才需要临时开启全耦合瞬态求解,并且建议把力学惯性项保留,同时采用低速阻尼帮助收敛。

还有一个小坑:如果固体力学模块里的热膨胀系数单位写错(比如写成1/K而不是1/K量级,或者漏掉参考温度),应力值会差好几个数量级,而且不容易在云图上发现。每次改参数后先检查最大应力量级是否符合材料常识,再决定要不要继续微调。

5.4 参数敏感性排序与调参顺序

模型参数一多,最怕的就是同时乱调。做敏感性分析能帮我们理清主次。我看下来,影响结果权重从大到小大致是:吸收率(A)、电子-声子耦合系数(G)、电子热容系数(\gamma)、电子热导率(\kappa_e)、光学穿透深度(\delta)。吸收率直接决定能量到底进来多少;G决定了能量从电子转移到晶格的速度,对晶格温度峰值和烧蚀深度影响非常大。(\gamma)和(\kappa_e)影响的是能量扩散和电子温度分布,在很多金属里敏感性略低。

调参顺序我建议固定(\delta)(它由光学常数决定,最好查手册)、固定(\kappa_e),先扫吸收率和G。把这两个数调完以后,再微调(\gamma),最后通过(T_{ab})或应力阈值去拟合绝对烧蚀深度。这样每个参数都有明确的物理分工,不会出现几个参数互相抵消导致拟合结果“看起来挺像但物理上全是错的”。

5.5 关于输出频率的一个实用细节

飞秒激光仿真时间跨越大,从飞秒到纳秒甚至微秒,如果按均匀时间间隔保存所有求解步,输出文件会大到离谱。我的做法是在求解器设置里定义“显式输出时刻”,比如0.05皮秒、0.1皮秒、0.5皮秒、1皮秒、5皮秒、10皮秒、50皮秒、100皮秒、500皮秒和1纳秒。保存这些关键帧足够后处理好几次实验对比,而且文件大小能控制在几十兆以内。

另一个细节是在做参数扫描时,不要把每个参数组合的全时间序列结果都保留下来。我会先关掉所有存储,只提取烧蚀深度和凹坑半径这两个全局量,扫描结束后再针对最优参数组重跑一次,存详细云图。这套操作能让整个参数标定流程提速两三倍。

最后分享一个习惯

做完整轮模拟和实验对比后,我最大的体会是:仿真模型的价值不在公式花哨,而在能不能稳定复现实验规律。一个可能粗糙但参数标定清楚的双温热力耦合模型,比一个看起来高深却和实验曲线差老远的全耦合模型有用得多。我强烈建议你在建模前就把“验证目标”写清楚,比如“模拟烧蚀深度曲线能覆盖实验误差带”,然后所有简化、参数调整都围绕这个目标展开。

另外一个实用习惯:每次修改模型前,用存档快照记下当前参数和对应结果,并且保持一个“参数-结果对照表”。飞秒激光仿真的参数空间非常拥挤,今天调了G,明天调了A,后天再回去翻,如果没记录,你会发现根本不知道上一步为什么能收敛。有了参数和结果表,想复现一个偶然出现的漂亮结果就不再靠运气。建模和实验本来就是双螺旋迭代的过程,扎实的版本管理胜过临时记忆。

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

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

立即咨询