造波(推板造波,函数造波)【转载】
转载自:http://www.jishulink.com/content/post/274472
1、推板造波
入口处采用动网格模拟推板造波过程,采用DEFINE_CG_MOTION实现造波过程,消波段采用动量源项或者多孔介质的形式实现消波模拟。具体udf如下;
#include
#include"udf.h"
#define T 5.8
#define S 1.04
#define PI 3.1415926
DEFINE_CG_MOTION(ban_moving, dt, cg_vel, cg_omega, time, dtime)
{
real u = 0;
real ww = 0;
ww = 2*PI/T;
if(time <= 2*T)
u = ww*S*time*cos(ww*time)/(4*T);
else
u = ww*S*cos(ww*time)/2;
cg_vel[0] = u;
}
原始文献下载:https://yunpan.cn/cRzMyW2n8vDcb 访问密码 e094
2、函数造波法,在入口处根据波函数得到波不同方向的流速,同时考虑波高函数,在波高函数以下位置为液相,波高函数以上位置为气相。通过修改波函数的水平速度可以实现,浪浪-水流、波浪-风载,波浪-水流-风载的耦合运动情况:
具体udf如下:
波运动函数:
include "udf.h"
#include
#define L 23
#define D 5
#define H 1
#define T 4
#define PI 3.141592653
#define con 8
DEFINE_PROFILE(x_velocity, thread, index)
{
real k,w;
real x[ND_ND];
face_t f;
real f1,f2,ff1,ff2;
real t,u;
k = 2*PI/L;
w = 2*PI/T;
f1 = PI*H/T/sinh(k*D);
f2 = 0.75*PI*H/T*PI*H/L/sinh(k*D)/sinh(k*D)/sinh(k*D)/sinh(k*D);
ff1 = H/2;
ff2 = PI*H*H*cosh(k*D)*(cosh(2*k*D)+2)/8/L/sinh(k*D)/sinh(k*D)/sinh(k*D);
t = CURRENT_TIME;
u = 0;
begin_f_loop(f,thread)
{
F_CENTROID(x,f,thread);
if(x[1]<(ff1*cos(-1*w*t)+ff2*cos(-2*w*t)))
u =f1*cosh(k*(x[1]+D))*cos(-1*w*t)+f2*cosh(2*k*(x[1]+D))*cos(-2*w*t);
else
u = 0;
F_PROFILE(f,thread,index) = u;
}
end_f_loop(f,thread)
}
DEFINE_PROFILE(y_velocity, thread, index)
{
real k,w;
real x[ND_ND];
face_t f;
real f1,f2,ff1,ff2;
real t,v;
k = 2*PI/L;
w = 2*PI/T;
f1 = PI*H/T/sinh(k*D);
f2 = 0.75*PI*H/T*PI*H/L/sinh(k*D)/sinh(k*D)/sinh(k*D)/sinh(k*D);
ff1 = H/2;
ff2 = PI*H*H*cosh(k*D)*(cosh(2*k*D)+2)/8/L/sinh(k*D)/sinh(k*D)/sinh(k*D);
t = CURRENT_TIME;
v = 0;
begin_f_loop(f,thread)
{
F_CENTROID(x,f,thread);
if(x[1]<(ff1*cos(-1*w*t)+ff2*sin(-2*w*t)))
v =f1*sinh(k*(x[1]+D))*sin(-1*w*t)+f2*sinh(2*k*(x[1]+D))*cos(-2*w*t);
else
v = 0;
F_PROFILE(f,thread,index) = v;
}
end_f_loop(f,thread)
}
DEFINE_PROFILE(voffactor, thread, index)
{
real k,w;
real x[ND_ND];
face_t f;
real f1,f2,ff1,ff2;
real t;
k = 2*PI/L;
w = 2*PI/T;
f1 = PI*H/T/sinh(k*D);
f2 = 0.75*PI*H/T*PI*H/L/sinh(k*D)/sinh(k*D)/sinh(k*D)/sinh(k*D);
ff1 = H/2;
ff2 = PI*H*H*cosh(k*D)*(cosh(2*k*D)+2)/8/L/sinh(k*D)/sinh(k*D)/sinh(k*D);
t = CURRENT_TIME;
begin_f_loop(f,thread)
{
F_CENTROID(x,f,thread);
if(x[1]<(ff1*cos(-1*w*t)+ff2*cos(-2*w*t)))
F_PROFILE(f,thread,index)=1;
else
F_PROFILE(f,thread,index)=0;
}
end_f_loop(f,thread)
}
原始文献下载:https://yunpan.cn/cRzMcu6wM9gGQ 访问密码 57de