这个相对比较简单,直接附上UDF源码,关键点都给了注释
#include “udf.h”
#include “mem.h”
#include “metric.h”
#include “unsteady.h”
real pst=0.0;//存储上一次迭代时间
real TO1=300.0;//自己设定进口温度初始值
DEFINE_ADJUST(boundary_time_step,d)//每次迭代前自动执行
{
Domain *d1=NULL;
Thread *t1=NULL,*t2=NULL;
face_t f;
real A[ND_ND];
real current_timestep=CURRENT_TIMESTEP;
real current_time=CURRENT_TIME;
//real previous_time=PREVIOUS_TIME;
real difference_time=current_time-pst;
real sum_A=0.0,sum=0.0,area;
d1=Get_Domain(1);
t1=Lookup_Thread(d1,11);//给定模块1出口的边界面ID
if(difference_time>(current_timestep/10000))//判断当前迭代是否为更新了时间,在当前时间步里的迭代计算是不更新时间的
{
begin_f_loop(f,t1)
{
F_AREA(A,f,t1);
area=NV_MAG(A);
sum_A+=area;
sum+=area*F_T(f,t1);
}
end_f_loop(f,t1)
sum_A=PRF_GRSUM1(sum_A);
sum=PRF_GRSUM1(sum);
TO1=sum/sum_A;//出口面平均温度
//printf("\nrenew!!!\n");
printf("\nTO1=%g\n",TO1);
}
pst=current_time;//更新为当前时间
//printf("\nCURRENT_TIMESTEP=%g,CURRENT_TIME=%g",current_timestep,current_time);
}
DEFINE_PROFILE(inlet1,t,i)//给定进口边界温度
{
face_t f;
begin_f_loop(f,t)
{
F_PROFILE(f,t,i)=TO1;
}
end_f_loop(f,t);
}