|
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
小弟利用fluent的计算验证一个接口程序,基本思想是将外部的功率密度利用udf加载为源项进行计算,而其中的要将网格坐标及其对应的功率密度值打印出来,看源项的加载是否成功,但是在打印的时候,程序中deviation的设置对程序有相当大的影响,xyz坐标及其功率密度值共有160000多个,若设置deviation为1e-7,则只能打印出大概10000个数据,也就是源项只加载了10000个功率密度值,若设置deviation为1e-5,则会有接近160000个数据打印,但若设置deviation为1e-3,又会打印出比160000还多很多,即会有重复的数据被加载。
请各位看看程序问题出在什么地方,应该怎样改进?谢谢了
//real Get_PowerDensity(real XYZ[])是一个查找函数,可以略过,重点看看demand的程序 。Data数组中存放的是功率密度的数值。拜托了!
#include"udf.h"
#include<stdio.h>
#include<math.h>
real XRounding=100;
real YRounding=100;
real ZRounding=100;
int XBucketNum=67;
int YBucketNum=66;
int ZBucketNum=16;
real minX=0;
real minY=-0.327434;
real minZ=0;
real deviation = 1e-7;
int i, aIndex, aSize;
real XYZ[ND_ND];
real x[ND_ND];
int XBucketNo, YBucketNo, ZBucketNo;
real Data[672156] = {
0.00960295,-0.19801800,0.08248210,3.68013000,
0.00971179,-0.19755600,0.08497210,3.67209000,
0.00951925,-0.19755600,0.09909510,3.69973000,
0.00951925,-0.19755600,0.10176300,3.69553000,
0.00951925,-0.19755600,0.11866600,3.71783000,
0.00951925,-0.19755600,0.12133400,3.71644000,
0.00951925,-0.19755600,0.13823700,3.69766000,
0.00951925,-0.19755600,0.14090500,3.70499000,
0.00960295,-0.19801800,0.15751800,3.72015000,
0.00971179,-0.19755600,0.15502800,3.71334000,
0.00987661,-0.19732500,0.08151860,3.70908000,
0.00908895,-0.19732500,0.08089360,3.66649000,
0.00869783,-0.19247900,0.08802500,3.67262000,
0.00872506,-0.19247900,0.08158860,3.72114000,
。。。。。。
}
DEFINE_SOURCE(T_SOURCE, c, t_cell, dS, eqn)
{
real ij;
C_CENTROID(XYZ, c, t_cell);
ij = Get_PowerDensity(XYZ);
return ij;
}
real Get_PowerDensity(real XYZ[])
{
XBucketNo =(int)(( XYZ[0] - minX) * XRounding);
YBucketNo =(int)(( XYZ[1] - minY) * YRounding);
ZBucketNo =(int)(( XYZ[2] - minZ) * ZRounding);
aIndex = DataIndex[XBucketNo][YBucketNo][ZBucketNo] * 4;
aSize = DataSize[XBucketNo][YBucketNo][ZBucketNo];
for (i=0; i<aSize; i++)
{
if(( fabs( Data[aIndex + i*4] -XYZ[0] ) < deviation)
&&(fabs(Data[aIndex + i*4 +1]-XYZ[1])<deviation)
&&(fabs(Data[aIndex + i*4 +2]-XYZ[2])<deviation))
return Data[aIndex + i*4 +3];
}
}
DEFINE_ON_DEMAND(on_demand_calc)
{
FILE *fp;
Domain *d;
cell_t c;
Thread *t;
d=Get_Domain(1);
fp=fopen("D:\\data1.txt","w");
thread_loop_c(t,d)
{
begin_c_loop(c,t)
{
C_CENTROID(XYZ, c, t);
for (i=0;i<168039;i++)
if((fabs(Data[4*i]-XYZ[0])<deviation)&&(fabs(Data[4*i+1]-XYZ[1])<deviation)&&(fabs(Data[4*i+2]-XYZ[2])<deviation))
fprintf(fp,"%g,%g,%g,%g\n",XYZ[0],XYZ[1],XYZ[2],Data[4*i+3]);
}
end_c_loop(c,t)
}
}
DEFINE_PROFILE(HeatFluxO,thread,index)
{
face_t f;
real cos;
begin_f_loop(f,thread)
{
F_CENTROID(x,f,thread);
if ((x[0]<0))
cos=1;
else if((0.186<x[0]))
cos=0;
else
cos=(0.186-x[0])/0.186;
F_PROFILE(f,thread,index) = 500000*cos;
}
end_f_loop(f,thread)
} |
|