各位老师,求助一个关于fluent udf的问题,现在我想根据截图里的这个公式,通过udf添加一个描述气液相界面传热传质的模型,下面是我编写的UDF:
/***********************************/
#include "udf.h"
#include "sg.h"
#include "sg_mphase.h"
#include "math.h"
#include "stdio.h"
#include "mem.h"/*包含梯度的头文件*/
#include "metric.h"
#include "flow.h"
#include "prop.h"
#define T_SAT 20.3
#define LAT_HT 447
cell_t c;
DEFINE_ADJUST(store_VOF_gradient, domain)/*将体积分数梯度储存在UDMI中*/
{
Thread *t;
Thread *ppt;
Thread **pt;
int phase_domain_index=1;
Domain *pDomain = DOMAIN_SUB_DOMAIN(domain,phase_domain_index);
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, Vof_Deriv_Accumulate);
mp_thread_loop_c (t,domain,pt)
{
if (FLUID_THREAD_P(t))
{
ppt = pt[phase_domain_index];
begin_c_loop (c,t)
{
C_UDMI(c,t,0) = NV_MAG(C_VOF_G(c,ppt));
C_UDMI(c,t,1) = C_VOF_G(c,ppt)[0];
C_UDMI(c,t,2) = C_VOF_G(c,ppt)[1];
//C_UDMI(c,t,3) = C_VOF_G(c,ppt)[2];
}
end_c_loop (c,t)
}
}
Free_Storage_Vars(pDomain,SV_VOF_RG,SV_VOF_G,SV_NULL);
}
/*定义质量与能量的源项*/
DEFINE_SOURCE(liq_src,cell,pri_th,dS,eqn)/*液相质量源项*/
{
Thread *mix_th, *sec_th;
real m_dot_l;
real T_X, T_Y;
real keff;
mix_th = THREAD_SUPER_THREAD(pri_th);
sec_th = THREAD_SUB_THREAD(mix_th, 1);
keff = C_VOF(cell,pri_th)*C_K_L(cell,pri_th)+C_VOF(cell,sec_th)*C_K_L(cell,sec_th);
if (NULL != THREAD_STORAGE(pri_th,SV_T_G))
{
T_X = C_T_G(cell,mix_th)[0];
}
if (NULL != THREAD_STORAGE(pri_th,SV_T_G))
{
T_Y = C_T_G(cell,mix_th)[1];
}
if(C_VOF(cell,sec_th) >0.05&&C_VOF(cell,sec_th) <1&&C_T(cell,mix_th) >= T_SAT)
{
m_dot_l = -keff*(T_X*C_UDMI(c,pri_th,1)+T_Y*C_UDMI(c,pri_th,2))/LAT_HT;
dS[eqn] = -C_K_L(cell,pri_th)*(T_X*C_UDMI(c,pri_th,1)+T_Y*C_UDMI(c,pri_th,2))/LAT_HT;
}
else
{
m_dot_l = keff*(T_X*C_UDMI(c,pri_th,1)+T_Y*C_UDMI(c,pri_th,2))/LAT_HT;
dS[eqn] = C_K_L(cell,sec_th)*(T_X*C_UDMI(c,pri_th,1)+T_Y*C_UDMI(c,pri_th,2))/LAT_HT;
}
return m_dot_l;
}
DEFINE_SOURCE(vap_src,cell,sec_th,dS,eqn)
{
Thread *mix_th, *pri_th;
real m_dot_v;
real T_X, T_Y;
real keff;
mix_th = THREAD_SUPER_THREAD(sec_th);
pri_th = THREAD_SUB_THREAD(mix_th,0);
keff = C_VOF(cell,pri_th)*C_K_L(cell,pri_th)+C_VOF(cell,sec_th)*C_K_L(cell,sec_th);
if (NULL != THREAD_STORAGE(pri_th,SV_T_G))
{
T_X = C_T_G(cell,mix_th)[0];
}
if (NULL != THREAD_STORAGE(pri_th,SV_T_G))
{
T_Y = C_T_G(cell,mix_th)[1];
}
if(C_VOF(cell,sec_th) >0.05&&C_VOF(cell,sec_th) <1 &&C_T(cell,mix_th) >= T_SAT)
{
m_dot_v = keff*(T_X*C_UDMI(c,pri_th,1)+T_Y*C_UDMI(c,pri_th,2))/LAT_HT;
dS[eqn] = C_K_L(cell,sec_th)*(T_X*C_UDMI(c,pri_th,1)+T_Y*C_UDMI(c,pri_th,2))/LAT_HT;
}
else
{
m_dot_v = -keff*(T_X*C_UDMI(c,pri_th,1)+T_Y*C_UDMI(c,pri_th,2))/LAT_HT;
dS[eqn] = -C_K_L(cell,pri_th)*(T_X*C_UDMI(c,pri_th,1)+T_Y*C_UDMI(c,pri_th,2))/LAT_HT;
}
return m_dot_v;
}
DEFINE_SOURCE(enrg_src,cell,mix_th,dS,eqn)
{
Thread *pri_th, *sec_th;
real m_dot;
real T_X, T_Y;
real keff;
pri_th = THREAD_SUB_THREAD(mix_th, 0);
sec_th = THREAD_SUB_THREAD(mix_th, 1);
keff = C_VOF(cell,pri_th)*C_K_L(cell,pri_th)+C_VOF(cell,sec_th)*C_K_L(cell,sec_th);
if (NULL != THREAD_STORAGE(pri_th,SV_T_G))
{
T_X = C_T_G(cell,mix_th)[0];
}
if (NULL != THREAD_STORAGE(pri_th,SV_T_G))
{
T_Y = C_T_G(cell,mix_th)[1];
}
if(C_VOF(cell,sec_th) >0.05&&C_VOF(cell,sec_th) <1 &&C_T(cell,mix_th) >= T_SAT)
{
m_dot = -keff*(T_X*C_UDMI(c,pri_th,1)+T_Y*C_UDMI(c,pri_th,2))/LAT_HT;
dS[eqn]= 0;
}
else
{
m_dot =keff*(T_X*C_UDMI(c,pri_th,1)+T_Y*C_UDMI(c,pri_th,2))/LAT_HT;
dS[eqn]=0;
}
return LAT_HT*m_dot*1000;
/***********************************/
在fluent里模拟后,UDF可以编译,但是计算过程发现没有相变发生,有没有老师可以帮忙看一下UDF?谢谢!
截图1.jpg |