求助,我自己编的udf程序,使用了define adjust和uds源项,在fluent中编译build和加载load都没有问题,但是计算一开始就显示uds-0发散了,不知道是什么原因,部分代码如下:
#include "udf.h"
#define PI 3.14159 /* 定义π*/
#define K 1.38e-23 /*定义玻尔兹曼常数 */
#define M 2.99e-26 /*定义水分子质量*/
#define R 461.5 /*定义水蒸气气体常数*/
#define f_v 0.4 /*相对湿度*/
real S1, G, J, pv1, ps1, T, P, sur_tension, density_c, density_v;/*不饱和度,吉布斯焓,成核率,水蒸气分压力,水蒸气饱和压力,温度,压力*/
/*计算成核率,液滴生长速度,临界半径*/
DEFINE_ADJUST(chenghelv, d)
{
Thread *t;
cell_t c;
thread_loop_c (t,d)
{
begin_c_loop_all(c,t)
{
T = C_T(c,t);
P = C_P(c,t);
ps1 = -2.88934 + 0.37966 * T - 0.00925 * pow(T, 2) + 1.54e-4 * pow(T, 3);/*饱和压力拟合*/
density_v = -0.00134 + 0.00136 * T - 3.27e-5 * pow(T, 2) + 7.76e-7 * pow(T, 3);/*蒸气密度拟合*/
density_c = 1000.07904 + 0.01231 * T - 0.00586 * pow(T,2) + 1.6e-5 * pow(T,3);/*水密度拟合*/
sur_tension = 0.07566 - 1.41e-4 * T - 2.68e-7 * pow(T,2);/*表面张力拟合*/
S1 = P / ps1;
pv1 = P * f_v;
G = 16 / 3 * PI * pow((M / (density_c * log(S1) * K * T)),2) * pow(sur_tension, 3); /*计算吉布斯自由焓*/
C_UDMI(c,t,0) = sqrt(2 / PI * sur_tension) * pow(M ,-3/2) * pow(density_v, 2) / density_c * exp( -G / K * T);/*成核率*/
end_c_loop_all(c,t)
}
}
}
/*第一个输送方程Q0源项*/
DEFINE_SOURCE(q0_source,c,t,dS,eqn)
{
return C_UDMI(c,t,0);
}
/*第二个输送方程Q1源项*/
DEFINE_SOURCE(q1_source,c,t,dS,eqn)
{
return C_UDMI(c,t,0) * pow(C_UDMI(c,t,2),2) + C_R(c,t) * C_UDSI(c,t,0) * C_UDMI(c,t,1);
}
/*第三个输送方程Q2源项*/
DEFINE_SOURCE(q2_source,c,t,dS,eqn)
{
return C_UDMI(c,t,0) * pow(C_UDMI(c,t,2),2) + 2 * C_R(c,t) * C_UDSI(c,t,1) * C_UDMI(c,t,1);
}
/*第四个输送方程g的源项*/
DEFINE_SOURCE(g_source,c,t,dS,eqn)
{
return 4 * PI * density_c * (1/3 * C_UDMI(c,t,0) * pow(C_UDMI(c,t,2),3) + C_R(c,t) * C_UDSI(c,t,2) * C_UDMI(c,t,1));
}
/*能量方程源项*/
DEFINE_SOURCE(energy_source,c,t,dS,eqn)
{
real dt, temp, L;
dt = RP_Get_Real("physical-time-step"
temp = C_T(c,t);
L = 2502 - 2.42169 * temp;
return L * C_UDSI(c,t,3) / dt;
} |