程序如下
#include "udf.h"
#include "mem.h"
#include "math.h"
DEFINE_ON_DEMAND(demandbeginning)
{
Thread *t;
cell_t c;
face_t f;
Domain *d;
d=Get_Domain(1);
thread_loop_c(t,d)
{
begin_c_loop(c,t)
{
C_UDSI(c,t,0)=0.000001;
C_UDSI(c,t,1)=C_U(c,t);
C_UDSI(c,t,2)=C_V(c,t);
C_UDSI(c,t,3)=C_W(c,t);
}
end_c_loop(c,t);
}
}
DEFINE_UDS_FLUX(flux0, f, t, i)
{
Thread *t0,*t1=NULL;
cell_t c0,c1=-1;
real NV_VEC(psi_vec),NV_VEC(A),flux;
NV_D(psi_vec,=,0,0,0);
c0=F_C0(f,t);
t0=F_C0_THREAD(f,t);
F_AREA(A,f,t);
if(NULL==F_C1_THREAD(f,t))
{
NV_DS(psi_vec,=,C_UDSI(c0,t0,1),C_UDSI(c0,t0,2),C_UDSI(c0,t0,3),*,998);
flux=NV_DOT(psi_vec,A);
}
else
{
c1=F_C1(f,t);
t1=F_C1_THREAD(f,t);
NV_DS(psi_vec,=,C_UDSI(c0,t0,1),C_UDSI(c0,t0,2),C_UDSI(c0,t0,3),*,988);
NV_DS(psi_vec,+=,C_UDSI(c1,t1,1),C_UDSI(c1,t1,2),C_UDSI(c1,t1,3),*,0.5);
flux=NV_DOT(psi_vec,A);
}
return flux;
}
DEFINE_UDS_FLUX(flux1, f, t, i)
{
Thread *t0,*t1=NULL;
cell_t c0,c1=-1;
real NV_VEC(psi_vec),NV_VEC(A),flux1;
NV_D(psi_vec,=,0,0,0);
c0=F_C0(f,t);
t0=F_C0_THREAD(f,t);
F_AREA(A,f,t);
if(NULL==F_C1_THREAD(f,t))
{
NV_DS(psi_vec,=,C_UDSI(c0,t0,1),C_UDSI(c0,t0,2),C_UDSI(c0,t0,3),*,998);
flux1=C_UDSI(c0,t0,0)*NV_DOT(psi_vec,A);
}
else
{
c1=F_C1(f,t);
t1=F_C1_THREAD(f,t);
NV_DS(psi_vec,=,C_UDSI(c0,t0,1),C_UDSI(c0,t0,2),C_UDSI(c0,t0,3),*,988);
NV_DS(psi_vec,+=,C_UDSI(c1,t1,1),C_UDSI(c1,t1,2),C_UDSI(c1,t1,3),*,0.5);
flux1=(C_UDSI(c0,t0,0)+C_UDSI(c1,t1,0))*0.5*NV_DOT(psi_vec,A);
}
return flux1;
}
DEFINE_SOURCE(myudssourceu,c,t,dS,eqn)
{
real x[ND_ND];
real CD,Re,force,k,source,a,b;
Domain *d;
d=Get_Domain(1);
C_CENTROID(x,c,t);
a=pow((C_U(c,t)*C_U(c,t)+C_V(c,t)*C_V(c,t)+C_W(c,t)*C_W(c,t)),0.5);
b=pow((C_UDSI(c,t,1)*C_UDSI(c,t,1)+C_UDSI(c,t,2)*C_UDSI(c,t,2)+C_UDSI(c,t,3)*C_UDSI(c,t,3)),0.5);
Re=998*pow((a*a-2*a*b+b*b),0.5)*0.00002/0.0000179;
if (Re<=1000.0)
{
CD=24*(1+0.15*pow(Re,0.687))/Re;
}
else
{
CD=0.44;
}
force=CD*Re/24;
k=18*0.0000179*force/998/0.00002/0.00002;
source=998*C_UDSI(c,t,0)*k*(C_U(c,t)-C_UDSI(c,t,1));
dS[eqn]=-998*C_UDSI(c,t,0)*k;
return source;
}
DEFINE_SOURCE(myudssourcev,c,t,dS,eqn)
{
real x[ND_ND];
real CD,Re,force,k,source,a,b;
Domain *d;
d=Get_Domain(1);
C_CENTROID(x,c,t);
a=pow((C_U(c,t)*C_U(c,t)+C_V(c,t)*C_V(c,t)+C_W(c,t)*C_W(c,t)),0.5);
b=pow((C_UDSI(c,t,1)*C_UDSI(c,t,1)+C_UDSI(c,t,2)*C_UDSI(c,t,2)+C_UDSI(c,t,3)*C_UDSI(c,t,3)),0.5);
Re=998*pow((a*a-2*a*b+b*b),0.5)*0.00002/0.0000179;
if (Re<=1000.0)
{
CD=24*(1+0.15*pow(Re,0.687))/Re;
}
else
{
CD=0.44;
}
force=CD*Re/24;
k=18*0.0000179*force/998/0.00002/0.00002;
source=998*C_UDSI(c,t,0)*k*(C_V(c,t)-C_UDSI(c,t,1));
dS[eqn]=-998*C_UDSI(c,t,0)*k;
return source;
}
DEFINE_SOURCE(myudssourcew,c,t,dS,eqn)
{
real x[ND_ND];
real CD,Re,force,k,source,a,b;
Domain *d;
d=Get_Domain(1);
C_CENTROID(x,c,t);
a=pow((C_U(c,t)*C_U(c,t)+C_V(c,t)*C_V(c,t)+C_W(c,t)*C_W(c,t)),0.5);
b=pow((C_UDSI(c,t,1)*C_UDSI(c,t,1)+C_UDSI(c,t,2)*C_UDSI(c,t,2)+C_UDSI(c,t,3)*C_UDSI(c,t,3)),0.5);
Re=998*pow((a*a-2*a*b+b*b),0.5)*0.00002/0.0000179;
if (Re<=1000.0)
{
CD=24*(1+0.15*pow(Re,0.687))/Re;
}
else
{
CD=0.44;
}
force=CD*Re/24;
k=18*0.0000179*force/998/0.00002/0.00002;
source=998*C_UDSI(c,t,0)*k*(C_W(c,t)-C_UDSI(c,t,3));
dS[eqn]=-998*C_UDSI(c,t,0)*k;
return source;
} |