|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
我的问题是这样的:一个房间里充满了SO2和空气的混合物,有一个过滤器。我不关心过滤器里面过滤的过程如何,我只是知道过滤器不是100%过滤,而是99.9989%,还有0.0011%的SO2随着风管进入了各个房间。我要做的是:通过取过滤器入口面的SO2质量流量(=F_FLUX*F_AREA*F_YI),设定一个负的source,相当于一个sink移除了99.9989%的SO2,剩下的通过出口面("interior")顺着分管进入了各个内部房间。下面是我的udf,请指教啊请指教!
顺便,我还在把它改写为单机4核的并行udf,我知道除了要在那些需要加总的量之后,写上诸如 a = PRF_GRSUM1(a);之外,我还知道需要写上if !RP_HOST(NODE)或者if RP_HOST(NODE),但是目前还不知道我这里应该如何改。好人你能不能帮我改改呢?
拜谢!!
我的qq: 285607198,能不能加你好友?有问题我还是会在这个帖子里面提问,能不qq问就不问,大家都很忙,我完全明白的。
#include "udf.h"
DEFINE_SOURCE(cell_SO2mass_source,cell,thread,dS,eqn)
{
real x[ND_ND];
real source, t, massflowrate, volume, vol_tot;
real ti = RP_Get_Real("flow-time");
real NV_VEC(flux), NV_VEC(A); /* declaring vectors flux and A */
face_t face, f /*我不需要定义cell_t cell, Thread *thread的吧?因为DEFINE_SOURCE已经call了cell和thread了?*/
C_CENTROID(x,cell,thread); /*这个C_CENTROID其实下面我没用到,所以可以删掉*/
x=x[0]; /*****给出每个单元的x坐标*******/
y=x[1]; /*****给出每个单元的y坐标*******/
z=x[2]; /*****给出每个单元的z坐标*******/
d = Get_Domain(1); /*我需要用到这个Get_Domain来得到d的线程的,对吧?*/
t= Lookup_Thread(d, 12); /* defining the inlet surface thread by specifying the Zone_ID*/
/*我的问题是,如何在fluent里找到那个入口面的Zone_ID呢?*/
begin_f_loop(f,t)
{
NV_D(flux, =, F_U(f,t), F_V(f,t), F_W(f,t)); /* defining flux in terms of velocity field */
NV_S(flux, *=, F_R(f,t)) /* multiplying density to get flux vector */
F_AREA(A,f,t) /* face normal vector returned from F_AREA */
massflowrate+= F_YI(f,t,i)*NV_DOT(flux,A); /* dot product of the inlet surface flux and area vector*/
/* multiplied by the mass fraction of species i */
}
end_f_loop(f,t)
massflowrate = PRF_GRSUM1(massflowrate);
begin_c_loop(cell,thread)
{
volume = C_VOLUME(cell,thread); /* get cell volume */
vol_tot += volume;
}
end_c_loop(cell,thread)
vol_tot = PRF_GRSUM1(vol_tot);
source=-0.999989* massflowrate/ vol_tot;
dS[eqn]=0.0;
return source;
}
我是要写成并行的程序,请问单机多核的并行程序和电脑联网的并行udf是一样的吧?我知道要加上一些必要的比如#IF !RP_HOST(NODE) 或者#IF RP_HOST(NODE),但是我不知道家在哪里,何时加,还有那些 begin_c_loop(cell,thread)也需要改写下,请问这样就行了么?
有没有牛人能帮忙改写下啊?谢谢,谢谢哈! |
|