|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
本帖最后由 学习小能手_二流 于 2014-11-13 20:23 编辑
我对模型是简单的二维模型,实现的功能是:找到点(0.07,0.07)的当前温度和上一时刻的温度,然后进行简单的处理,经过一步简单的PID控制,将该控制器的出来的值赋给入口边界当入口的速度值。我需要,在0-50步时,首先定义入口速度值为1m/s,然后在经过PID运算,使得点(0.07,0.07)的温度快速稳定下来;在50-100,将入口速度定义为2m/s,然后在经过PID运算,使得点(0.07,0.07)的温度快速稳定下来;在100-150步,定义入口速度为4m/s,然后在经过PID运算,使得点(0.07,0.07)的温度快速稳定下来,大于150,定义入口速度为6m/s,然后在经过PID运算,使得点(0.07,0.07)的温度快速稳定下来。
不知道为什么,C_UDMI(c,t,0)=r-C_T(c,t);
m+=kp*(temp-temp_last)+ki*temp;
C_UDMI(c,t,1)=C_UDMI(c,t,0);
这三句语句放在 if (kount){}里面就不能执行
我的程序如下:
/*迭代时间不同,入口速度也不同*/
#include "udf.h"
#include "mem.h"
#include "metric.h"
int kount=0;
real m;
DEFINE_ADJUST(demo_calc,domain)
{
kount++;
Message("\nkount=%d\n",kount);
}
DEFINE_ADJUST(best_point_temp,domain)
{
cell_t c;
Thread *t;
real xc[ND_ND];
real r=350.;
real kp=0.01,ki=0.01;
real temp_last;
real temp;
// real temp;
/* loop over all cell threads in the domain*/
thread_loop_c(t,domain)
{
/* loop over all cells*/
begin_c_loop(c,t)
{
temp=C_UDMI(c,t,0);
temp_last=C_UDMI(c,t,1);
C_UDMI(c,t,0)=r-C_T(c,t);
m+=kp*(temp-temp_last)+ki*temp;
C_UDMI(c,t,1)=C_UDMI(c,t,0);
Message("\ntemplast=%1f\n",temp_last);
Message("\ntemp=%1f\n",temp);
Message("\nm=%1f\n",m);
if (kount>=50.)
{
m=1;
if((sqrt(ND_SUM(pow(xc[0]-.07,2.),pow(xc[1]-.07,2.),0.)))<.0001)
{
}
else
{
return;
}
}
else if(kount<=100.&&kount>50.)
{m=2;
if((sqrt(ND_SUM(pow(xc[0]-.07,2.),pow(xc[1]-.07,2.),0.)))<.0001)
{
}
else
{
return;
}}
else if(kount<=150.&&kount>100)
{ m=4;
if((sqrt(ND_SUM(pow(xc[0]-.07,2.),pow(xc[1]-.07,2.),0.)))<.0001)
{
}
else
{
return;
} }
else
{ m=6;
if((sqrt(ND_SUM(pow(xc[0]-.07,2.),pow(xc[1]-.07,2.),0.)))<.0001)
{
}
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)
{
F_PROFILE(f,thread,nv)=m;
}
end_f_loop(f,thread)
}
|
|