绕流振动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=4mmf=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_UPDATEDNODE_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);

}

 二维算例(点击图片查看动态图):

绕流振动UDF【转载】

三维算例(点击图片查看动态图)
绕流振动UDF【转载】

绕流振动UDF【转载】

posted @ 2016-01-28 18:47  硫酸亚铜  阅读(2294)  评论(0编辑  收藏  举报