宏DEFINE_GRID_MOTION用来移动任意边界和流体区域内的网格节点。它提供了对节点和网格最大限度的操作,可以将刚体运动、变形和相对运动等结合起来。但是使用此UDF时,每一个时间步都必须执行。
DEFINE_GRID_MOTION限制:
1.
给定节点的运动是基于绝对坐标的,不可基于相对坐标的。
2.
给定节点的新位置是基于该节点上一个时间步的位置,而不是该节点的初始(t=0)位置
3.
宏DEFINE_GRID_MOTION中没有用户定义的节点位置内存记忆
4.
当使用宏DEFINE_GRID_MOTION时,节点移动的区域的连接关系不能改变。
摘自《ANSYS FLUENT技术基础与工程应用:流动传热与环境污染控制领域》,源代码有误,对原UDF进行了修正,添加注释
圆管在垂直流动方向上的振动方程如下:
式中,A表示振动圆柱的振幅,ω表示振动角频率,f表示振动频率。作为示例,在本例中,设A=4mm,f=25Hz
#include"udf.h"
#include"math.h"
#define
omeg 50*3.14159265358979323846
#define A
0.004 //振幅
DEFINE_GRID_MOTION(mc,domain,dt,time,dtime)
{
Thread*
tf=DT_THREAD(dt);
//DT_THREAD 就是获取网格运动所在的
thread 指针
face_t
f;
Node*
v; //指向网格节点的指针
int
n;
SET_DEFORMING_THREAD_FLAG(THREAD_T0(tf));
Message("\nprevious
time=%.5f\t current
time=%.5f\n",PREVIOUS_TIME,CURRENT_TIME);
Message("time=%.5f\t
dtime=%.5f\t n=%d",time,dtime,N_TIME);
begin_f_loop(f,tf)
{
f_node_loop(f,tf,n)
{
v=F_NODE(f,tf,n);
if(NODE_POS_NEED_UPDATE(v)) //在UDF手册当中没有查询到NODE_POS_NEED_UPDATED和NODE_POS_UPDATED宏
{
NODE_POS_UPDATED(v);
NV_D(NODE_COORD(v),=,NODE_X(v),NODE_Y(v)+A*sin(omeg*(N_TIME+1)*CURRENT_TIMESTEP)-A*sin(omeg*N_TIME*CURRENT_TIMESTEP),NODE_Z(v));
}
}
}
end_f_loop(f,tf);
}
二维算例(点击图片查看动态图):
三维算例(点击图片查看动态图)