膜态沸腾UDF【转载】
膜态沸腾的UDF,添加注释。其中获取VOF梯度的方法详见前面的日志,其中很多宏无法通过UDF手册查阅,
蒸汽相中的质量源项的一般形式为:
式中:
通过一阶近似,热流之差可表达为:
式中:
通过此近似,源项变为:
因为没有内部质量源项,所以也想的质量源项变为:
能源方程的潜热变为:
截面的物性包括,表面张力为0.1N/m,潜热为105J/kg,饱和温度为500K。该问题的长度为Taylor-Raleigh不稳定性的波长。
该问题的速度为:
因此时间尺度为:
计算域水平宽度为,垂直高度为。网格尺度为64(水平方向)×192(垂直方向),蒸汽液体截面的初始形状受到气泡增长的影响。因此,需要另外一个初始化UDF
式中,x(y)为水平(垂直)轴,单位为m。
努塞尔数为表征沸腾换热的无量纲数,其定义为:
因为该问题的时间为0.01s,时间步长为2×10-4,50个时间步。该问题需要进行6000步时间步迭代来捕捉气泡释放的过程
源代码如下:
#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;
Domain
*pDomain =
DOMAIN_SUB_DOMAIN(domain,P_PHASE);
real voidx, voidy, voidz=0;
{
Alloc_Storage_Vars(pDomain,SV_VOF_RG,SV_VOF_G,SV_NULL);
Scalar_Reconstruction(pDomain, SV_VOF,-1,SV_VOF_RG,NULL);
Scalar_Derivatives(pDomain,SV_VOF,-1,SV_VOF_G,SV_VOF_RG,
}
{
Alloc_Storage_Vars(domain, SV_T_RG, SV_T_G, SV_NULL);
T_derivatives(domain);
Free_Storage_Vars(domain, SV_T_RG, SV_NULL);
}
mp_thread_loop_c (t,domain,pt)
#if RP_3D
#endif
#if RP_2D
#endif
end_c_loop (c,t)
}
Free_Storage_Vars(pDomain,SV_VOF_RG,SV_VOF_G,SV_NULL);
Free_Storage_Vars(domain, SV_T_G, SV_NULL);
}
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);
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;
source = (Kl+Kg)*C_UDMI(cell,tm,0) / L;
C_UDMI(cell, tm, 1) = source;
C_UDMI(cell, tm, 2) = -source*L;
dS[eqn] =0;
return source;
}
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;
Domain *pDomain =
DOMAIN_SUB_DOMAIN(domain,P_PHASE);
Domain *sDomain =
DOMAIN_SUB_DOMAIN(domain,S_PHASE);
real xc[ND_ND], y, x;
mp_thread_loop_c (t,domain,pt)
end_c_loop (c,t)
}
mp_thread_loop_c (t,domain,st)
end_c_loop (c,t)
}