#include "math.h"
#include "udf.h"
/*使用DEFINE_ON_DEMAND 宏
可以定义一个按命令执行的UDF,这比让FLUENT 在计算过程中机械地调用UDF 优越的多。UDF 一旦被激活,可以立即被执行,不过,当求解器正在迭代的时候,函数是不可以调用的。
*/
DEFINE_ON_DEMAND(on_demand_energyuse)
{
//送风口
Domain *DmnAir; //流场的domain
DmnAir=Get_Domain(1);
face_t FaceInlet;
int IntIdInlet=16; //每个送风口的温度相同,只读一个即可,16由case中查知
Thread *ThrdInlet=Lookup_Thread(DmnAir,IntIdInlet); //ThrdInlet的赋值
real RealTempSnd; //送风温度
//回风口
face_t FaceOtlt;
int IntIdOtlt=15; //对应case确定
Thread *ThrdOtlt=Lookup_Thread(DmnAir,IntIdOtlt);
real RealTempEx; //排风温度
/*工作区
主要测量的值有
1.平均温度RealTempAvg
平均温度积分(单元温度*单元质量)/总质量
2.ADPI
ET有效温差满足要求的体积/总体积
3.温度不均匀系数,速度不均匀系数
*/
real RealEff; //RealEff,能量利用系数
int IntIdAir=2; //对应case,确定air的id
Thread *ThrdAir=Lookup_Thread(DmnAir,IntIdAir); //air的thread
cell_t Cell; //定义单元格标识符Cell
real RealTempAvg; //工作区平均温度
real RealTempCell; //单元温度
real RealMassCell; //单元质量
real RealDnstyCell; //单元密度
real RealVlmCell; //单元体积
real RealVlctyCell; //单元的绝对速度
real p[ND_ND]; //存储单元重心点坐标的向量
real RealZmax=1.8; //定义工作区的高度
real RealMassTtl=0; //总质量,初始为0
real RealTempSum=0; //积分(温度*质量)
real RealVlctySum=0; //积分(速度*质量)
real RealET; //有效温差
real RealTempSet=299.15; //温度设定值
//real RealVlmTtl=0; //总体积,初始为0
real RealADPI; //待求参数
real RealMassSumADPI=0; //满足ADPI要求的质量之和
real RealVlctyAvg; //工作区平均速度
real RealTempDlta=0; //均方根偏差
real RealVlctyDlta=0;
real RealKt; //不均匀系数
real RealKv;
//送风温度
begin_f_loop(FaceInlet,ThrdInlet)
{
RealTempSnd=F_T(FaceInlet,ThrdInlet);
}
end_f_loop(FaceInlet,ThrdInlet)
//排风温度
begin_f_loop(FaceOtlt,ThrdOtlt)
{
RealTempEx=F_T(FaceOtlt,ThrdOtlt);
}
end_f_loop(FaceOtlt,ThrdOtlt)
//工作区
//第一次循环,计算ADPI,平均温度,平均速度,能量利用系数
begin_c_loop(Cell,ThrdAir)
{
RealVlmCell=C_VOLUME(Cell,ThrdAir);
RealDnstyCell=C_R(Cell,ThrdAir);
RealTempCell=C_T(Cell,ThrdAir);
RealVlctyCell=sqrt(pow(C_U(Cell,ThrdAir),2)+pow(C_V(Cell,ThrdAir),2)+pow(C_W(Cell,ThrdAir),2));
C_CENTROID(p,Cell,ThrdAir);
if(p[2]<RealZmax)
{
RealMassTtl=RealMassTtl+RealVlmCell*RealDnstyCell;
RealTempSum=RealTempSum+RealTempCell*RealVlmCell*RealDnstyCell;
RealVlctySum=RealVlctySum+RealVlctyCell*RealVlmCell*RealDnstyCell;
//有效温差
RealET=(RealTempCell-RealTempSet)-8.0*(RealVlctyCell-0.15);
if((RealET<=1.0)&&(RealET>=-1.5)&&(RealVlctyCell<0.35))
{
RealMassSumADPI=RealMassSumADPI+RealVlmCell*RealDnstyCell;
}
}
}
end_c_loop(Cell,ThrdAir)
RealADPI=RealMassSumADPI/RealMassTtl;
RealTempAvg=RealTempSum/RealMassTtl;
RealVlctyAvg=RealVlctySum/RealMassTtl;
RealEff=(RealTempEx-RealTempSnd)/(RealTempAvg-RealTempSnd);
//第二次循环,求速度、温度不均匀系数
begin_c_loop(Cell,ThrdAir)
{
RealVlmCell=C_VOLUME(Cell,ThrdAir);
RealDnstyCell=C_R(Cell,ThrdAir);
RealTempCell=C_T(Cell,ThrdAir);
RealVlctyCell=sqrt(pow(C_U(Cell,ThrdAir),2)+pow(C_V(Cell,ThrdAir),2)+pow(C_W(Cell,ThrdAir),2));
C_CENTROID(p,Cell,ThrdAir)
if(p[2]<RealZmax)
{
RealTempDlta=RealTempDlta+pow((RealTempCell-RealTempAvg),2)*RealVlmCell*RealDnstyCell/RealMassTtl;
RealVlctyDlta=RealVlctyDlta+pow((RealVlctyCell-RealVlctyAvg),2)*RealVlmCell*RealDnstyCell/RealMassTtl;
}
}
end_c_loop(Cell,ThrdAir)
RealKt=sqrt(RealTempDlta)/RealTempAvg;
RealKv=sqrt(RealVlctyDlta)/RealVlctyAvg;
//输出结果
printf("average temperature of workzone:%g\n",RealTempAvg);
printf("average velocity of workzone:%g\n",RealVlctyAvg);
printf("ADPI:%g\n",RealADPI);
printf("kt:%g\n",RealKt);
printf("kv:%g\n",RealKv);
printf("energy efficiency:%g\n",RealEff);
}
[ 本帖最后由 appolm 于 2008-5-8 09:14 编辑 ] |