反冲压力容池变化。 简单的熔池模拟。 内包括高斯移动热源,x.y.z个方向的动量源项 以及激光冲击导致的反冲压力,包含完整的仿真模型以及自定义编程代码和视频
熔池动力学模拟这玩意儿挺有意思的,特别是加了反冲压力之后整个流场会变得特别妖。咱们今天用Python撸个简易模型,把高斯热源、动量源项和反冲压力这几个要素揉在一起玩玩。
先整上热源模型。高斯移动热源大家都熟,重点是这个移动速度要和空间坐标联动。看这段核心代码:
def gaussian_heat_source(x, y, z, t): v = 0.05 # mm/s sigma = 0.3 x0 = v * t # 热源移动轨迹 return 1e6 * np.exp(-((x-x0)**2 + y**2 + z**2)/(2*sigma**2))这里用时间t控制热源中心位置,实现了热源的匀速移动。指数项里的分母2σ²是个小技巧,这样整个热源的能量分布更接近真实激光的聚焦特性。注意返回值的量级1e6对应典型激光功率密度(W/mm³量级)。
动量方程处理起来有点讲究,特别是反冲压力项。我们直接在Navier-Stokes方程里加源项:
def momentum_source(T, P_recoil): beta = 3e-4 # 热膨胀系数 g = 9.8 * np.array([0, 0, -1]) # 重力方向 source = beta * (T - 300) * g + P_recoil return source这里把热浮力和反冲压力耦合起来了。beta选3e-4是铝合金的典型值,注意温度差(T-300)说明参考温度是室温。反冲压力P_recoil的计算是关键,得考虑汽化动力学:
def calc_recoil_pressure(T_surface): R = 461.5 # 水蒸气气体常数 L_vapor = 2.6e6 # 汽化潜热 J/kg P_sat = 1e5 * np.exp(-L_vapor/(R*T_surface)) return 0.54 * P_sat # 经验修正系数这个指数关系来自克劳修斯-克拉佩龙方程,0.54的系数是实验数据拟合值。注意当表面温度达到沸点时,反冲压力会骤增,这个非线性特征对熔池振荡影响很大。
时间推进用显式格式,虽然稳定性差但好调试。下面这个循环体是计算核心:
for step in range(10000): # 更新温度场 T_new = explicit_heat_solver(T, vel_field, heat_source) # 计算表面汽化 P_recoil = calc_recoil_pressure(T[surface_layer]) # 求解动量方程 vel_field = fluid_solver(vel_field, T_new, P_recoil) # 自适应时间步长 dt = 0.5 * (dx**2)/thermal_diffusivity.max()这里thermal_diffusivity是材料的热扩散率数组,动态时间步长能防止显式格式爆炸。流体求解器部分用了投影法,这里没展开但要注意泊松方程的求解效率。
跑出来的结果挺有意思:当反冲压力突然增大时,熔池表面会出现明显的凹陷-回弹震荡。这种瞬态效应会导致熔池尾部出现周期性的波纹,和实际焊接中的鱼鳞纹特征吻合。通过调整反冲压力系数,发现当经验系数超过0.6时会出现飞溅现象——这说明模型能捕捉到阈值效应。
最后说个坑:表面张力项的处理千万别用静态温度系数,得用随温度变化的动态模型。我们之前用固定值导致熔池铺展速度比实际慢了两个量级,后来改成下面这种形式就对了:
surface_tension_coeff = 1.5 - 0.002*(T_surface - 500)这个线性关系虽然粗糙,但比固定值强多了。真正的工程模拟还得用更复杂的函数,不过对于定性分析来说够用了。完整代码和仿真视频已打包,需要的小伙伴可以戳仓库地址(假装这里有链接)。