找回密码
 注册
查看: 2123|回复: 0

UDS方程中的对流项

[复制链接]
发表于 2013-6-5 22:27:33 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
C:\Users\user\Desktop\QQ图片20130605222632
现在有一个UDS方程中的对流项如图(位于底部)所示,其中Wf为常数,取0.3,我编辑的UDF代码如下,但是导入FLUENT后计算不收敛,不知道是不是对流项出错了,求各位大神指导!!
DEFINE_UDS_FLUX(snow_uds_flux,f,t,i)
{
   real U[ND_ND],A[ND_ND],flux;
   cell_t c0,c1;
   Thread *t0,*t1;
   c0=F_C0(f,t);
   t0=F_C0_THREAD(f,t);
   F_AREA(A,f,t);
   flux=0.0;
   c1=-1;
   t1=NULL;
  
   if(BOUNDARY_FACE_THREAD_P(t))
     {          
              U[0]=F_U(f,t);
                  U[1]=F_V(f,t);
                  U[2]=(F_W(f,t)+0.3);
                  flux=U[0]*A[0]+U[1]*A[1]+U[2]*A[2];
     }
   else
   {
              c1=F_C1(f,t);
              t1=F_C1_THREAD(f,t);
              U[0]=(C_U(c0,t0)+C_U(c1,t1))/2.0;
                  U[1]=(C_V(c0,t0)+C_V(c1,t1))/2.0;
                  U[2]=(C_W(c0,t0)+0.3+C_W(c1,t1)+0.3)/2.0;
                  flux=U[0]*A[0]+U[1]*A[1]+U[2]*A[2];
   }   
   return flux;
}

采用NV_宏定义的向量形式编辑如下:
DEFINE_UDS_FLUX(snow_uds_flux,f,t,i)
{
   real NV_VEC(psi_vec),NV_VEC(A),flux;
   real U0,V0,W0,U1,V1,W1;
   cell_t c0,c1;
   Thread *t0,*t1;
   c0=F_C0(f,t);
   t0=F_C0_THREAD(f,t);
   F_AREA(A,f,t);
   flux=0.0;
   c1=-1;
   t1=NULL;
  
   if(BOUNDARY_FACE_THREAD_P(t))
     {
          real dens;
                  if (NNULLP(THREAD_STORAGE(t,SV_DENSITY)))
                          dens=F_R(f,t);
                  else
                          dens=C_R(c0,t0);
          U0=F_U(f,t);
                  V0=F_V(f,t);
                  W0=(F_W(f,t)+0.3);
              NV_DS(psi_vec,=,U0,V0,W0,*,dens);
              flux=NV_DOT(psi_vec,A);
     }
   else
     {
              c1=F_C1(f,t);
              t1=F_C1_THREAD(f,t);
                  U0=C_U(c0,t0);
                  V0=C_V(c0,t0);
                  W0=(C_W(c0,t0)+0.3);
                  U1=C_U(c1,t1);
                  V1=C_V(c1,t1);
                  W1=(C_W(c1,t1)+0.3);
              NV_DS(psi_vec,=,U0,V0,W0,*,C_R(c0,t0));
                  NV_DS(psi_vec,+=,U1,V1,W1,*,C_R(c1,t1));   
          flux=NV_DOT(psi_vec,A)/2.0;
     }
   return flux;
}
这两种方法是不是一样的呢?
QQ图片20130605222632.jpg
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表