文档库 最新最全的文档下载
当前位置:文档库 › 一段Fluent中动态网格的代码-2

一段Fluent中动态网格的代码-2

一段Fluent6.0中实现动态网格的代码,能实现一个气泡根据内外界压力差动态变化的功能,
利用Fluent的udf实现。

#include "udf.h"
#include "sg.h"
#include "dynamesh_tools.h"



DEFINE_GRID_MOTION(GetTemperature, domain, dt, time, dtime)
{
Thread *tf = DT_THREAD ((Dynamic_Thread *)dt);
face_t f;
real T,x[ND_ND];
int n;
Node *v;

SET_DEFORMING_THREAD_FLAG(THREAD_T0(tf) );

begin_f_loop (f, tf)
{
Message("\nf=%d\n",f);

T=C_T(F_C0(f,tf),THREAD_T0(tf));//取side0的cell的温度
Message(" C0 T: %g\n",T);//输出温度值 
C_CENTROID(x,F_C0(f,tf),THREAD_T0(tf));
//side 0 的cell由F_C0(f,tf)求出,cell的Thread由THREAD_T0(tf)求出
Message("C0: x=%g,y=%g\n",x[0],x[1]);

T=C_T(F_C1(f,tf),THREAD_T1(tf));//取side1的cell的温度
Message("C1 T: %g\n",T);

f_node_loop (f, tf, n)
{
v = F_NODE (f, tf, n);
//Message(" f=%d,n=%d,NODE_X(v)=%g,NODE_Y(v)=%g\n",f,n,NODE_X(v),NODE_Y(v));

if(NODE_POS_NEED_UPDATE(v) )
{
NODE_Y(v)=NODE_Y(v)+0.1;
NODE_POS_UPDATED(v);
}
}
}
end_f_loop (f, tf);

}


DEFINE_GRID_MOTION(b1, domain, dt, time, dtime)
//向上移动壁面
{
Thread *tf = DT_THREAD ((Dynamic_Thread *)dt);//取当前线的指针
face_t f;//面
Node *v;//节点指针
real T;//温度
int n;//节点编号

Message("Begin move mesh\n");
SET_DEFORMING_THREAD_FLAG(THREAD_T0(tf) );
Message("Set flag OK\n");

begin_f_loop (f, tf)
{
Message("\nf=%d\n",f);
T=C_T(F_C0(f,tf),THREAD_T0(tf));//取side0的cell的温度
Message(" C0 T: %g\n",T);//输出温度值 
//side 0 的cell由F_C0(f,tf)求出,cell的Thread由THREAD_T0(tf)求出
//T=C_T(F_C1(f,tf),THREAD_T1(tf));//取side1的cell的温度
//Message("C1 T: %g\n",T);
//T=F_P(F_C1(f,tf),THREAD_T1(tf));//取side1的cell的温度
//Message("P=%g\n",T);

f_node_loop (f, tf, n)
{
v = F_NODE (f, tf, n);
Message("Ori:f=%d,n=%d,NODE_X(v)=%g,NODE_Y(v)=%g\n",f,n,NODE_X(v),NODE_Y(v));

if(NODE_POS_NEED_UPDATE(v) )
{
NODE_Y(v)=NODE_Y(v)+0.01;
NODE_POS_UPDATED(v);
}
Message("Mov:f=%d,n=%d,NODE_X(v)=%g,NODE_Y(v)=%g\n",f,n,NODE_X(v),NODE_Y(v));
}
}
end_f_loop (f, tf);
}

DEFINE_GRID_MOTION(sto_wall_move, domain, dt, time, dtime)
{
Thread *tf = DT_THREAD ((Dynamic_Thread *)dt);//取当前线的指针
face_t f;//面
Node *v;//节点指针
float cu,cv;//速度
int n;//节点编号

Message("Begin move sto mesh\n");
SET_DEFORMING_THREAD_FLAG(THREAD_T0(tf) );

begin_f_loop (f, tf)
{
cu=C_U(F_C0(f,tf),THREAD_T0(tf));//取side0的cell的温度
cv=C_V(F_C0(f,tf),THREAD_T0(tf));//取side0的cell的温度
Message("f=%d u=%g v=%g dt=%g\n",f,cu,cv,dtime);
f_node_loop (f, tf, n)
{
v = F_NODE (f, tf, n);
Message("Ori:f=%d,n=%d,NODE_X(v)=%g,NODE_Y(v)=%g\n",f,n,NODE_X(v),NODE_Y(v));
if(NODE_POS_NEED_UPDATE(v) )
{
NODE_X(v

)=NODE_X(v)+cu*dtime;
NODE_Y(v)=NODE_Y(v)+cv*dtime;
NODE_POS_UPDATED(v);
}
Message("Mov:f=%d,n=%d,NODE_X(v)=%g,NODE_Y(v)=%g\n\n",f,n,NODE_X(v),NODE_Y(v));
}
}
end_f_loop (f, tf);
}


DEFINE_GRID_MOTION(qi_wall_move, domain, dt, time, dtime)
{
Thread *tf,*t_sto;//取当前线的指针
face_t f,f_sto;//面
Node *v;//节点指针
float cu,cv;//速度
float dis,min_dis;
real a_ga[ND_ND],a_sto[ND_ND];
int n,ID_sto_wall;//节点编号

tf = DT_THREAD ((Dynamic_Thread *)dt);

ID_sto_wall=7;
domain=Get_Domain(1);
t_sto = Lookup_Thread( domain , ID_sto_wall );

Message("Begin move sto mesh\n");
SET_DEFORMING_THREAD_FLAG(THREAD_T0(tf) );


begin_f_loop (f, tf)
{
F_CENTROID(a_ga,f,tf);
dis=0;
min_dis=1E8;
begin_f_loop (f_sto, t_sto)
{
F_CENTROID(a_sto,f_sto, t_sto);
dis=sqrt((a_ga[0]-a_sto[0])*(a_ga[0]-a_sto[0])
+(a_ga[1]-a_sto[1])*(a_ga[1]-a_sto[1])
+(a_ga[2]-a_sto[2])*(a_ga[2]-a_sto[2])
);
if(dis{
min_dis=dis;
cu=C_U(F_C0(f_sto, t_sto),THREAD_T0(t_sto));//取side0的cell的温度
cv=C_V(F_C0(f_sto, t_sto),THREAD_T0(t_sto));//取side0的cell的温度
}
}
end_f_loop (f_sto, t_sto)

Message("f=%d u=%g v=%g min_dis=%g\n",f,cu,cv,min_dis);
f_node_loop (f, tf, n)
{
v = F_NODE (f, tf, n);
Message("Ori:f=%d,n=%d,NODE_X(v)=%g,NODE_Y(v)=%g\n",f,n,NODE_X(v),NODE_Y(v));
if(NODE_POS_NEED_UPDATE(v) )
{
NODE_X(v)=NODE_X(v)+cu*dtime;
NODE_Y(v)=NODE_Y(v)+cv*dtime;
NODE_POS_UPDATED(v);
}
Message("Mov:f=%d,n=%d,NODE_X(v)=%g,NODE_Y(v)=%g\n\n",f,n,NODE_X(v),NODE_Y(v));
}
}
end_f_loop (f, tf);
}


相关文档
相关文档 最新文档