如题,在网上找到大侠提供的UDF程序,在FLUENT编译通过了,有liq_src、vap_src、enrg_src三部分,我选择MIXTURE或VOF模型,在phases interactions选择两个质量转移,一个是液相到气相,自定义选择liq_src,另一个是气相到液相,自定义选择vap_src,然后在source terms 的能量项选择了enrg_src,结果初始化出现如下问题:
Error:
FLUENT received fatal signal (ACCESS_VIOLATION)
1. Note exact events leading to error.
2. Save case/data under new name.
3. Exit program and restart to continue.
4. Report error to your distributor.
如果phases interactions不选择自定义,而两个都选择evaporation-condensation,然后在source terms 的能量项选择了enrg_src,初始化没有出现问题,但是最后的结果是水全部变成水蒸汽,水蒸气没有变成水。
各位大侠或高手,恳请指点迷津!
UDF程序如下:
#include "udf.h" /*包括常规宏*/
#include "sg_mphase.h" /*包括体积分数宏*/
#define T_SAT 373.15 /*定义饱和温度*/
#define LAT_HT 2.25e6 /*定义水蒸汽潜热*/
DEFINE_SOURCE(liq_src, cell, pri_th, dS, eqn) /*定义液相源项*/
{
Thread *mix_th, *sec_th; /*混合相、第二相 定义计算区域指针*/
real m_dot_l; /*蒸发冷凝速率 定义液相质量转移*/
mix_th = THREAD_SUPER_THREAD(pri_th); /*指向混合区的主相即液相的指针*/
sec_th = THREAD_SUB_THREAD(mix_th, 1); /* 指向单相控制区的气相的指针*/
if(C_T(cell, mix_th)>=T_SAT){
m_dot_l = -0.1*C_VOF(cell, pri_th)*C_R(cell, pri_th)*
fabs(C_T(cell, pri_th) - T_SAT)/T_SAT; /*如果液相单元的温度高于蒸发温度,液相向气相的质量转移*/
dS[eqn] = -0.1*C_R(cell, pri_th)*
fabs(C_T(cell, pri_th) - T_SAT)/T_SAT; /*定义源项对质量转移偏导*/
}
else {
m_dot_l = 0.1*C_VOF(cell, sec_th)*C_R(cell, sec_th)*
fabs(T_SAT-C_T(cell,mix_th))/T_SAT;
dS[eqn] = 0; /*于是气相向液相转移,所以液相的质量源项对质量转移的偏导为零*/
}
return m_dot_l;
}
DEFINE_SOURCE(vap_src, cell, sec_th, dS, eqn) /*定义气相源项*/
{
Thread * mix_th, *pri_th; /*混合相、第一相*/
real m_dot_v;
mix_th = THREAD_SUPER_THREAD(sec_th); /*指向混合区的第二相即气相的指针*/
pri_th = THREAD_SUB_THREAD(mix_th, 0); /*指向单相控制区的液相的指针,液相为主相*/
if(C_T(cell, mix_th)>=T_SAT){
m_dot_v = 0.1*C_VOF(cell, pri_th)*C_R(cell, pri_th)*
fabs(C_T(cell, mix_th) - T_SAT)/T_SAT; /*如果混合区单元的温度高于蒸发温度,液相向气相的质量质量转移*/
dS[eqn] = 0; /*由于是液相向气相转移,所以气相的质量源项对来自液相的质量转移的偏导为零*/
}
else {
m_dot_v = -0.1*C_VOF(cell, sec_th)*C_R(cell, sec_th)*
fabs(T_SAT-C_T(cell,mix_th))/T_SAT;
dS[eqn] = -0.1*C_R(cell, sec_th)*
fabs(C_T(cell, sec_th) - T_SAT)/T_SAT; /*由于是气相向液相转移,所以气相的质量源项对自身的质量转移的偏导不为零*/
}
return m_dot_v;
}
DEFINE_SOURCE(enrg_src, cell, mix_th, dS, eqn) /*混合模型能量源项*/
{
Thread *pri_th, *sec_th;
real m_dot;
pri_th = THREAD_SUB_THREAD(mix_th, 0); /*指向混合区的液相的指针*/
sec_th = THREAD_SUB_THREAD(mix_th, 1); /*指向混合区的气相的指针*/
if(C_T(cell, mix_th)>=T_SAT){
m_dot = -0.1*C_VOF(cell, pri_th)*C_R(cell, pri_th)*
fabs(C_T(cell, pri_th) - T_SAT)/T_SAT; /*如果混合区的单元温度高于蒸发温度。质量转移由液相向气相转移,吸热,质量转移量前有负号*/
dS[eqn] = -0.1*C_VOF(cell, pri_th)*C_R(cell, pri_th)/T_SAT;
}
else {
m_dot = 0.1*C_VOF(cell, sec_th)*C_R(cell, sec_th)*
fabs(T_SAT-C_T(cell,mix_th))/T_SAT;
dS[eqn] = -0.1*C_VOF(cell, sec_th)*C_R(cell, sec_th)/T_SAT;} /*相反,气相向液相转移则放热*/
return LAT_HT*m_dot; /*能量大小气化潜热与质量转移率相乘得能量源项*/
} |