求助~Fluent PBM UDF-Luo聚并模型
-
大家好~接触UDF不多久,请各位老师多给建议和帮助~先谢过~
我根据论文里对Luo聚并模型进行了一丢丢的修改,下面是代码:/************************************************************************ UDF that computes the modified Luo coalescence kernel for surface tension change in PBE *************************************************************************/ #include "udf.h" #include "sg_pb.h" #include "sg_mphase.h" #include "math.h" #define sigma 0.053 DEFINE_PB_COALESCENCE_RATE(aggregation_kernel, cell, thread, d_1, thread_2, d_2) { real agg_kernel; real collision_rate; real coalescence_efficiency; real epsi; real alpha_large; real Ce; real xi; real We; real rho_l,rho_g; real u_mean, u1_mean,u2_mean; real f; Thread *tm; Thread **pt; Thread *tp; /*find super thread*/ tm = THREAD_SUPER_THREAD(thread); /*obtain mixture thread */ pt = THREAD_SUB_THREADS(tm); /* pointer to sub_threads */ tp = pt[0]; /* primary phase thread */ epsi = C_D(cell, tm); /*应该是这句有问题*/ alpha_large = 0.82 * pow(sigma / 0.072, 0.2); Ce = 0.92 * (1.0 - pow(alpha_large, 1.2)); xi = d_1 / d_2; rho_l = C_R(cell, tp); rho_g = C_R(cell, thread); u1_mean = 1.43 * pow(epsi * d_1, 1. / 3.); u2_mean = 1.43 * pow(epsi * d_2, 1. / 3.); u_mean = pow((pow(u1_mean, 2.) + pow(u2_mean, 2.)), 1. / 2.); We = rho_l * d_1 * pow(u_mean, 2.) / sigma; /*collision_rate*/ collision_rate = M_PI / 4. * pow(d_1 + d_2, 2.) * u_mean; /*coalescence_efficiency*/ f = pow(0.75 * (1. + pow(xi, 2.)) * (1. + pow(xi, 3.)), 1. / 2.) / (pow((rho_g / rho_l + 0.5), 1. / 2.) * pow(1. + xi, 3.)); coalescence_efficiency = exp(-Ce * f * pow(We, 1. / 2.)); /*agg_kernel*/ agg_kernel = collision_rate * coalescence_efficiency; return agg_kernel; }
代码是根据UDF手册里改的。我做的是用dispersed SST kw的bubble column,CM求的PBE。
UDF compiled和load都没有问题,但是一运行就提示下面的错误
俺自己的想法是这样的:不知道问题是不是出在提取epsilon那里,因为把epsilon换成constant就没毛病~然后也试了其他几种方法,但都没能解决问题。 在原本可行的曳力模型UDF里面也试了下加入C_D的语句,会提示同样的错误。
请大家帮忙看一下是啥的问题~再次蟹蟹大家~
-
@袁宝强 蟹蟹老师指点~
您说的这里我也有点疑惑,我用的是dispersed sst kw,但这里提取mixture和各相的指针用的是这个方法/*find super thread*/ tm = THREAD_SUPER_THREAD(thread); /*obtain mixture thread */ pt = THREAD_SUB_THREADS(tm); /* pointer to sub_threads */ tp = pt[0]; /* primary phase thread */
不晓得是不是要用别的方法。但是除了epsilon提取mixture和liquid phase的都不行,后面的提取各相密度倒是没啥问题