绕流振动UDF【转载】
宏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_UPDATED(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);
}
二维算例(点击图片查看动态图):
三维算例(点击图片查看动态图)
转自:http://blog.sina.com.cn/s/blog_14d64daa10102wal8.html
{:{39}:} 这个帅啊
页:
[1]