利用VOF+凝固熔化+UDF实现激光熔覆质量流过程的模拟,UDF实现了激光熔覆增材制造过程的双道熔覆模拟,激光熔覆物理过程包括:粉末输送—通过质量源添加金属粉末;激光加热—高功率激光熔化粉末和部分基材;熔池形成—熔融金属形成熔池;快速凝固—激光移开后迅速凝固形成熔覆层。
主要特点如下:工艺参数—激光功率500 kW(非常高,可能是用于大型零件),移动速度0.04 m/s,粉末质量流率0.5 kg/s,激光光斑尺寸30mm × 30mm(假设为立方体光斑);双道熔覆策略—第一道(0-10秒)从x0 = -0.2m开始向右移动,第二道(10-20秒)从x0 = -0.2m开始向右移动,第一道:Y∈[-0.01, 0.01] m(宽度0.02m),第二道:Y∈[0.01, 0.03] m(宽度0.02m,紧邻第一道);耦合机制—热源与粉末耦合热源强度乘以粉末相体积分数(C_VOF),这意味着只有在有粉末的区域才会产生热量,质量源单独添加粉末,不考虑相变;源项计算—热源P/(length1³)×VOF在粉末区域内均匀分布,质量源mass/(length1³)在光斑区域内均匀分布,除以length1³假设光斑为立方体,需要单位体积的源项。
1.导入网格模型
导入模型网格文件,如下图所示:
2.通用设置
采用压力基求解器,瞬态求解,重力方向为z的负方向。
3.模型选择
开启能量方程,粘性模型选择层流,开启凝固和熔化模型并保持默认设置。
4.UDF加载
添加udf.c源文件,点击编译并加载。
// 定义激光熔覆工艺参数常量// 定义热源函数(激光能量输入)DEFINE_SOURCE(heat_source, c, t, dS, eqn){real x[ND_ND]; // 单元中心坐标数组real con, source; // 临时变量和热源值real time = CURRENT_TIME; // 获取当前计算时间// 获取第二相(粉末相)的线程指针Thread *t1 = THREAD_SUB_THREAD(t, 1);// 获取单元中心坐标C_CENTROID(x, c, t);// 只在特定的Z高度范围内(0.02m到0.06m)添加热源if (x[2] >= 0.02 && x[2] <= 0.06){// 第一道熔覆时间 (0-10秒)if (time >= 0 && time < 10){// Y方向限制在 ±0.01m 范围内(第一道的位置)if (x[1] >= -0.01 && x[1] <= 0.01){// 判断是否在激光光斑范围内(X方向移动热源)if (x[0] >= x0 + v*time && x[0] < x0 + length1 + v*time)// 热源公式:P/(length1³) * 粉末相体积分数source = P / length1 / length1 / length1 * C_VOF(c, t1);elsesource = 0;}elsesource = 0;}// 第二道熔覆时间 (10-20秒) - 注意:与第一道在同一Z高度else if (time >= 10 && time < 20){// Y方向限制在 0.01m 到 0.03m 范围内(第二道的位置,Y方向偏移)if (x[1] >= 0.01 && x[1] <= 0.03){// 判断是否在激光光斑范围内(X方向移动热源)// 注意:从第10秒开始,重新从x0位置开始移动if (x[0] >= x0 + v * (time - 10) && x[0] < x0 + length1 + v * (time - 10))source = P / length1 / length1 / length1 * C_VOF(c, t1);elsesource = 0;}elsesource = 0;}elsesource = 0;}elsesource = 0;// 将热源值存储到用户定义内存 UDM0 中(用于后处理或监控)C_UDMI(c, t, 0) = source;return source;}// 定义质量源函数(粉末添加)DEFINE_SOURCE(mass_source, c, t, dS, eqn){real x[ND_ND]; // 单元中心坐标数组real con, source; // 临时变量和质量源值real time = CURRENT_TIME; // 获取当前计算时间// 获取单元中心坐标C_CENTROID(x, c, t);// 只在特定的Z高度范围内(0.02m到0.06m)添加粉末if (x[2] >= 0.02 && x[2] <= 0.06){// 第一道熔覆时间 (0-10秒)if (time >= 0 && time < 10){// Y方向限制在 ±0.01m 范围内(第一道的位置)if (x[1] >= -0.01 && x[1] <= 0.01){// 判断是否在粉末添加区域(X方向移动)if (x[0] >= x0 + v*time && x[0] < x0 + length1 + v*time)// 质量源公式:mass/(length1³)source = mass / length1 / length1 / length1;elsesource = 0;}elsesource = 0;}// 第二道熔覆时间 (10-20秒)else if (time >= 10 && time < 20){// Y方向限制在 0.01m 到 0.03m 范围内(第二道的位置,Y方向偏移)if (x[1] >= 0.01 && x[1] <= 0.03){// 判断是否在粉末添加区域(X方向移动)// 从第10秒开始,重新从x0位置开始移动if (x[0] >= x0 + v * (time - 10) && x[0] < x0 + length1 + v * (time - 10))source = mass / length1 / length1 / length1;elsesource = 0;}elsesource = 0;}elsesource = 0;}elsesource = 0;// 将质量源值存储到用户定义内存 UDM1 中C_UDMI(c, t, 1) = source;return source;}
5.材料参数设置
添加并定义金属材料,在流体材料中修改空气材料的参数并另存为金属材料,在对相关参数进行修改。
添加金属材料后,定义VOF模型。
6.单元区域条件设置
在单元区域设置中勾选源项,并分别添加源项的数量,包括一个能量源项和一个质量源项。
7.初始化
初始化选择标准初始化,温度为300K,金属相的体积为1。局部初始化将空气区域金属相的体积分数设置为0。
8.运行计算
时间步数和时间步长定义如下:
温度分布云图
