|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
本帖最后由 学习小能手_二流 于 2014-11-10 14:00 编辑
程序如下,模型是简单的两维模型,要实现的功能是找到某一点的当前温度和上一时刻的温度,
然后通过控制器的计算: temp=r-C_T(c,t); temp_last=r-C_T_M1(c,t); m+=kp*(temp-temp_last)+ki*temp,
将计算得到的值赋给边界入口作为初始值。
#include "udf.h"
#include "mem.h"
#include "metric.h"
int kount=0;
real m;
real r=350.;
real kp=0.01,ki=0.01;
real temp_last;
/* real temp;*/
DEFINE_ADJUST(demo_calc,domain)
{
kount++;
printf("kount=%d\n",kount);
}
DEFINE_ADJUST(best_point_temp,domain)
{
cell_t c;
Thread *t;
real xc[ND_ND];
real temp;
/* loop over all cell threads in the domain*/
thread_loop_c(t,domain)
{
/* loop over all cells*/
if(kount<=50.)
{
begin_c_loop(c,t)
{
C_CENTROID(xc,c,t);
if(sqrt(ND_SUM(pow(xc[0]-.07,2.),pow(xc[1]-.07,2.)))<.001) (这句提示错误,本来就是两维的啊,不明白错误)
{
m=1;
temp=r-C_T(c,t);
temp_last=r-C_T_M1(c,t);
m+=kp*(temp-temp_last)+ki*temp;
printf("temp_last=%d\n",temp_last);
}
else
{
return;
}
}
end_c_loop(c,t)
}
else
{
C_CENTROID(xc,c,t);
if(sqrt(ND_SUM(pow(xc[0]-.07,2.),pow(xc[1]-.07,2.)))<.001)
{
m=2;
temp=r-C_T(c,t);
temp_last=r-C_T_M1(c,t);
m+=kp*(temp-temp_last)+ki*temp;
printf("temp_last=%d\n",temp_last);
}
else
{
return;
}
}
end_c_loop(c,t)
}
}
}
DEFINE_PROFILE(x_velocity,thread,nv)
{
float x[2];
float y;
face_t f;
begin_f_loop(f,thread)
{
y=x[1]; /* x[0]=x; x[1]=y; x[2]=z */
F_PROFILE(f,thread,nv)=m;
}
end_f_loop(f,thread)
}
经过解释型UDF,提示33 行:macro `ND_SUM' used with only 2 args,不明白哪里错在哪里。我找了很多ND_SUM都是这么用的。
|
-
|