流体力学中用c++编程计算串联管路的流量q,完整的程序如下,但是计算结果出现-1.#IND,不知道什么情况,请大神们帮看看吧,应该怎么写才对?
#include
#include
#define pi 3.1415926
#define g 9.8
float CL(float dlt,float d,float re,int *id)
{
float lmd1,temp,lmd,Rec1,Rec2,Rec3;
Rec1=2320;
Rec2=80*d/dlt;
Rec3=4160*pow(d/2.0/dlt,0.85);
if(re
else if(re
{
if(re<1e5){lmd=0.3164/pow(re,0.25);*id=2;}
else if(re<3e6){lmd=0.0032+0.221*pow(re,-0.237);*id=3;}
}
else if(re
{
lmd=0.01;*id=4;
while(fabs(lmd-lmd1)>=1e-6)
{
lmd1=lmd;
temp=log(dlt/(3.7*d)+2.51/re/sqrt(lmd1))/log(10.0);
lmd=pow(1.0/(-2.0)/temp,2);
}
}
else if(re>=Rec3)
{
lmd=pow((1.74+2.0*log(d/(2.0*dlt))/log(10.0)),-2);
*id=2;
}
return(lmd);
}
float CL(float,float,float,int *);
void main()
{
int ID1=0;
int ID2=0;
float DLT1,LMD1,LMD11,Re1,D1,L1,V1;
float DLT2,LMD2,LMD22,Re2,D2,L2,V2;
float Q,NU,H,KCE;
float DK,lll;
printf("please input:h,l1,d1,l2,d2,nu,dlt1,dlt2,kce:\n");
scanf("%f%f%f%f%f%f%f%f%f",&H,&L1,&D1,&L2,&D2,&NU,&DLT1,&DLT2,&KCE);
LMD11=0.025;LMD22=0.015;
loop:
DK=D1*D1/(D2*D2);
lll=KCE+LMD11*L1/D1+(1-DK)*(1-DK);
lll=lll+LMD22*L2/D2*DK*DK+DK*DK;
V1=sqrt(2*g*H/lll);
V2=DK*V1;
Re1=V1*D1/NU;
Re2=V2*D2/NU;
LMD1=CL(DLT1,D1,Re1,&ID1);
LMD2=CL(DLT2,D2,Re2,&ID2);
if((fabs(LMD1-LMD11)>=5e-6)||(fabs(LMD2-LMD22)>=5e-6))
{
LMD11=LMD1;
LMD22=LMD2;
goto loop;
}
Q=pi*D1*D1*V1/4;
printf("ID=%d\nv1=%7.4fm/s\nre1=%7.2f\nlmd1=%7.4f\nID2=%d\nv2=%7.4fm/s\nre2=%7.2f\nlmd2=%7.4f\nq=%7.4fm3/s\n",ID1,V1,Re1,LMD1,ID2,V2,Re2,LMD2,Q);
}
运行程序:
input:H,D1,D2,DLT1,DLT2,L1,L2,NU
6.,0.6,0.9,0.0015,0.0003,300.,240.,1.E-6
正确的输出如下:
ID1=5
V1=2.8713m/s
RE1=1722771.00
LMD1=0.0249
ID2=4
V2=1.2761m/s
RE2=1148514.00
LMD2=0.0159
Q=0.8118m3/s
[Last edited by yuan020545 on 2011-5-15 at 22:35]