think2015 发表于 2016-3-8 13:33

绕流振动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

声振 发表于 2016-10-4 22:30

{:{39}:}

think2015 发表于 2016-10-8 08:50

这个帅啊
页: [1]
查看完整版本: 绕流振动UDF【转载】