|
发表于 2007-12-4 16:22:17
|
显示全部楼层
[求助]我写的边界压力的UDF,请指教~
不好一下就确定你的问题在什么地方。不过如下几个地方
我觉得存在问题。
我的想法是:先用Adjust求出口水深,然后利用PROFILE指定压力:
#include "stdafx.h"
//write your include header here......
#include "udf.h"
real h=0;
extern "C"{
DEFINE_ADJUST(depth, domain)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
//normal function body here
Domain *d,*sd;
d=Get_Domain(4); /*出口边界区域*/
******* 出口边界区域应该是face吧? 边界的 zone ID = 4? ********
Thread *t;
cell_t c;
real x[ND_ND],y,vof_water;
int phase_domain_index;
sub_domain_loop(sd,d,phase_domain_index)
{
if(DOMAIN_ID(sd)==3) /*如果为副相区域,水为副相*/
thread_loop_c(t,sd)
************* 边界 face面上用_c循环估计存在问题 *********
{
begin_c_loop_all(c,t)
{
C_CENTROID(x,c,t);
y=x[1];
vof_water=C_VOF(c,t);
******************* 很怀疑此时调用 C_VOF() 的返回值,呵呵 ****************
if((vof_water>0)&&(y>h)) /*求水深*/
h=y;
}
end_c_loop_all(c,t)
}
printf("flow depth:%g\n",h);
}
}
DEFINE_PROFILE(outlet_pressure,t,i)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
//normal function body here
face_t f;
real x[ND_ND],y;
begin_f_loop(f,t)
{
C_CENTROID(x,f,t);
********* 边界上应该是face而非cell 应该用F_CENTROID()吧? ************
y=x[1];
if(y<h)
F_PROFILE(f,t,i)=998.2*9.81*(h-y); /*指定水的压力*/
else
F_PROFILE(f,t,i)=0;/*空气的压力为零*/
}
end_f_loop(f,t)
}
}
|
|