想模拟一个管道旋转并且有水平方向的振动,即X方向做简谐运动同时绕管子轴心旋转。用滑移网格写了一个UDF,但是总是调试不对,旋转轴心的坐标不随时间变化,并且算到第11步就报错。
程序如下:
#include "udf.h"
#include "stdio.h"
#define PI 3.141592654
DEFINE_ZONE_MOTION(originx_volecity, omega, axis, origin, velocity, time, dtime)
{
real f, omegar, theta0, R, rpm;
real s;
real dx, ts;
s=RP_Get_Real("flow-time" ;
ts=s-0.09424100816249847; /* 这是由于前面没有加X方向的振动计算了一段时间0.09424100816249847s */
rpm = 972.683363; /* 转速 */
f = rpm/60;
omegar = 2*PI*f;
theta0 = PI/2;
R = 0.001; /* 幅值 */
velocity[0] = -1.* omegar * R * sin(omegar * ts + theta0);
velocity[1] = 0.0;
velocity[2] = 0.0;
dx=velocity[0]*dtime;
origin[0] = origin[0]+dx;
origin[1] = 0.0;
origin[2] = 0.0;
*omega = 2*PI*f;
Message("\n originx=%f,dx=%f",origin[0],dx);
}
DEFINE_PROFILE(inlet_z_velocity, thread, index) /* 这是定义入口速度,和上面没关系 */
{
real x[ND_ND];
real r,r0;
face_t f;
begin_f_loop(f, thread)
{
F_CENTROID(x,f,thread);
r0=x[0]*x[0]+x[1]*x[1];
r = sqrt(r0);
F_PROFILE(f, thread, index) =0.51969*pow((1.0-r/0.025),0.14286);
}
end_f_loop(f, thread)
}
UDF编译完就先迭代了3次,这是什么原因?(见图1 )
然后就是origin[0]的值没有变化,第一步(图1)和第11步(图2 )都是-0.000017
另外,用全局变量把a=origin[0]的值存储再令origin[0]=a+dx也试过,也不行,求解释啊大神 |