发布日期:2024-07-22 09:49 点击次数:178
本案例演示在Fluent中利用UDF模拟膜状沸腾现象。
膜状沸腾:在一些换热问题中,当加热壁面的温度远远高于与壁面接触的液体的饱和温度时,此时整个壁面浸泡在蒸气中,同时在汽液界面发生沸腾传质,周期性地产生气泡并向上排放的现象。膜状沸腾会导致传热效率下降,对换热不利。
”本案例中的数据来自Fluent官方案例,对原始UDF进行了修改。
1 问题描述本案例中要解决的问题如下图所示。
图片
本案例利用UDF定义质量源项与能量源项来模拟膜沸腾现象。计算区域宽0.0389 m,高0.1168 m。介质的饱和温度
计算结果如下图所示。
图片
2 Fluent设置以2D、Double Precision方式启动Fluent利用菜单File → Read → Mesh… 读取网格文件filmBoil.msh.gz2.1 General设置选择Transient进行瞬态计算指定重力加速度为Y轴方向-9.81 m/s2图片
2.2 Models设置多相流模型选择采用VOF多相流模型采用Explicit格式激活选项Implicit Body Force图片
激活能量方程图片
采用Laminar层流模型图片
2.3 Materials设置创建两个新材料liquid及vapor,材料属性如下图所示。
液相材料参数图片
气相材料参数图片
image-202201061332578732.4 设置相指定气相为主相图片
指定液相为次相图片
激活选项Surface Tension Force Modeling,设置表面张力系数为0.1 N/m图片
2.5 编译UDF右键选择模型树节点User Defined Functions,点击弹出菜单项Compiled… 打开编译对话框图片
编译源文件boiling.c并加载图片
UDF中使用了3个UDM,这里需要先设置UDM数量。
点击Memory… 按钮打开UDM设置对话框图片
指定UDM数量为3图片
点击按钮Function Hooks… 打开设置对话框图片
如下图所示,添加初始化及Adjust的UDF图片
2.6 设置计算区域按下图所示顺序添加混合相的能量源图片
添加气相的质量源图片
添加液相的质量源图片
2.7 设置边界条件设置边界heat的温度为510 K图片
设置出口边界outlet的静压为0 Pa图片
设置回流温度500 K图片
设置出口液相回流体积分数为1图片
2.8 Methods如下图所示设置Methods图片
2.9 初始化全局初始化,指定温度为500 K图片
右键选择模型树节点Custom Field Functions,点击弹出菜单项New…图片
如下图所示创建函数temp-profile,定义为510-y*10/0.1168图片
Patch整个区域的温度为temp-profile图片
2.10 监测变量监测壁面heat的Nusslet数图片
监测整个计算区域的气相体积分数图片
指定参考值,用于Nusselt数的计算图片
2.11 进行计算指定时间步数为4000,时间步长为0.001 s,进行计算图片
监测得到的体积分数随时间变化图片
监测得到的壁面Nusselt数随时间变化曲线图片
3 计算结果计算结果如下图所示图片
案例实际上是投机取巧了的,事实上膜状沸腾模拟最困难的地方是附壁气膜的形成过程,这里直接将气膜以初始化的形式直接给定了。
4 相关理论及UDF代码气相质量源的一般表达形式为:
式中,
这样可以得到气相质量源为:
由于计算域内没有内部质量源,因此液相质量源为:
能量方程的潜热源变为:
界面属性包括表面张力系数0.1 N/m,潜热1e5 J/kg,饱和温度
案例模型的长度尺度是泰勒-罗利不稳定性最危险的波长:
速度尺度为:
因此时间尺度为:
计算域水平宽度为
汽液界面的初始形状必须受到扰动才能启动气泡的生长。因此,采用一个初始化UDF宏,利用气体填充所有满足以下条件的网格:
式中,
Nusselt数是表征沸腾换热的一个重要的无量纲值,其定义为:
由于该问题的时间尺度为0.1s,因此时间步长为0.001,即100个时间步长分辨率。总而言之,这个问题应该运行大约1200个时间步才能捕捉到第一个气泡排放。
一些代码注释如下所示。
#include "udf.h"#include "sg.h"#include "sg_mphase.h"#include "flow.h"#include "mem.h"DEFINE_ADJUST(area_density, domain){ Thread *t; Thread **pt; cell_t c; //混合相中循环 mp_thread_loop_c(t, domain, pt) if (FLUID_THREAD_P(t)) { //利用P_PHASE得到主相的Thread指针,P_PHASE宏的值=0 Thread *tp = pt[P_PHASE]; begin_c_loop(c, t) { //计算得到$\namda T \cdot \nabla α$,并将其存储在UDM中方便后面调用 C_UDMI(c, t, 0) = (C_VOF_G(c, tp)[0] * C_T_G(c, t)[0] + C_VOF_G(c, tp)[1] * C_T_G(c, t)[1]); } end_c_loop(c, t) }}//气相质量源DEFINE_SOURCE(gas, cell, thread, dS, eqn){ real x[ND_ND]; real source; Thread *tm = THREAD_SUPER_THREAD(thread); Thread **pt = THREAD_SUB_THREADS(tm); //得到k_lα_l+k_gα_g real Kl = C_K_L(cell, pt[1]) * C_VOF(cell, pt[1]), Kg = C_K_L(cell, pt[0]) * C_VOF(cell, pt[0]); real L = 1e5; // 根据公式计算得到质量源,这里引用了前面的UDM变量 source = (Kl + Kg) * C_UDMI(cell, tm, 0) / L; //将质量源存储在UDM中方便后面调用 C_UDMI(cell, tm, 1) = source; // 顺便计算能量源(等于质量源于潜热的乘积),存储在UDM中后面调用 C_UDMI(cell, tm, 2) = -source * L; // 无法保证负斜率,干脆直接赋零 dS[eqn] = 0; return source;}//液相质量源,利用UDM值进行指定DEFINE_SOURCE(liquid, cell, thread, dS, eqn){ real x[ND_ND]; real source; Thread *tm = THREAD_SUPER_THREAD(thread); Thread **pt = THREAD_SUB_THREADS(tm); source = -C_UDMI(cell, tm, 1); dS[eqn] = 0; return source;}// 计算能量源DEFINE_SOURCE(energy, cell, thread, dS, eqn){ real x[ND_ND]; real source; Thread *tm = thread; source = C_UDMI(cell, tm, 2); dS[eqn] = 0; return source;}//给底部初始化了一层气体区域DEFINE_INIT(my_init_function, domain){ Thread *t; Thread **pt; Thread **st; cell_t c; real xc[ND_ND], y, x; mp_thread_loop_c(t, domain, pt) if (FLUID_THREAD_P(t)) { Thread *tp = pt[P_PHASE]; begin_c_loop(c, t) { C_CENTROID(xc, c, t); x = xc[0]; y = xc[1]; if (y < 0.00292 + 0.0006 * cos(6.283 * x / 0.0778)) C_VOF(c, tp) = 1; else C_VOF(c, tp) = 0; } end_c_loop(c, t) }}
(本文结束)
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报。