include vstdio.h>
include
define D 0.209
define g 9.81
define pai 3.14
define n 10
main()
{ int H0=100;
int m,k,L=5000,a=1100, IPR=8 ;
float dx,dt,Ad,B,R,f,T,Cp,Cm, Tmax=200;
float Q0,v=0.5,i=0.002;
float H[n+2],Q[n+2],Hp[n+2],Qp[n+2];
FILE *fp;
fp=fopen("运行结果显示 .dat","w");
if((fp=fopen("运行结果显示.txt","w"))==NULL)
{printf("Error\n");
exit(0);}
dx=L/n; dt=dx/a; Ad=pai*D*D/4; Q0=v*Ad;
B=a/g/Ad; f=2*g*i*D/v/v; R=f*dx/2/g/D/Ad/Ad;
for(m=1;m
{
H[m]=H0-(m-1)*i*dx; Q[m]=Q0;
}
fprintf(fp,"\n 稳态变量 H \n");
for(m=1;m
fprintf(fp,"%f ",H[m]);
fprintf(fp,"\n 稳态变量 Q \n");
for(m=1;m
fprintf(fp,"%f ",Q[m]);
T=0.0;
k=0;
while(T<=Tmax)//时间控制语句
{ T=T+dt;
k=k+1;
if(T>Tmax)
fprintf(fp,"\n\n 输出到此结束");
else
{ for(m=2;mvn+1;m++)//求内部节点的 H,Q 值
{ Cp=H[m-1]+B*Q[m-1]-R*Q[m-1]*fabs(Q[m-1]);
Cm=H[m+1]-B*Q[m+1]+R*Q[m+1]*fabs(Q[m+1]);
Hp[m]=(Cp+Cm)/2.0;
Qp[m]=(Hp[m]-Cm)/B;
Cm=H[2]-B*Q[2]+R*Q[2]*fabs(Q[2]); Hp[1]=H[1]; Qp[1]=(Hp[1]-Cm)IB;
Cp=H[n]+B*Q[n]-R*Q[n]*fabs(Q[n]); Hp[n+1]=Cp; Qp[n+1]=0.0;
for(m=1;mvn+2;m++)
{
II求前端点的H,Q值
II求后端点的H,Q值
H[m]=Hp[m]; Q[m]=Qp[m];
}if(k/IPR*IPR==k){
II控制输出次数
fprintf(fp,"\n\n\n 时间 T : %f\n",T); fprintf(fp,"瞬态变量 Hp\n");
for(m=1;mvn+2;m++)
fprintf(fp,"%f ",H[m]); fprintf(fp,"\n 瞬态变量 Qp\n");
for(m=1;mvn+2;m++) fprintf(fp,"%f ",Q[m]);
}
}
}
fclose(fp);
}