资源描述
Harbin Institute of Technology
流体力学大作业
院 系:
班 级:
姓 名:
学 号:
指导教师:
©哈尔滨工业大学
计算机在管路水力计算中的应用
1 等径无分支管路的计算
1.1简单管路沿程损失的计算
分析:此题为第一类问题,可用如下步骤求解。
1)
2)
3) 调用CL子程序计算。
4)
1.1.1 程序框图
见图1-1。
1.1.2 程序说明:
在程序中,hf表示,q表示,pi表示。
1.1.3 程序代码:
#include<math.h>
#include<stdio.h>
#define pi 3.1415926
#define g 9.81
float CL(float,float,float,int);
void main()
{int id;
id=0;
float dlt,d,l,q,nu,hf,v,re,lmd;
printf("please input:dlt,d,l,q,nu\n");
scanf("%f,%f,%f,%f,%f",&dlt,&d,&l,&q,&nu);
v=4*q/(pi*d*d);
re=v*d/nu;
lmd=CL(dlt,d,re,id);
hf=lmd*l*v*v/(d*2.0*g);
printf("v=%7.4fm/s,re=%7.4f,lmd=%7.4f,hf=%7.4fm",v,re,lmd,hf);}
N
N
开 始
调用CL求λ
打印输出
结束
读qV,d,l,ν,△
图1-1 简单管路程序框图(1)
1.2简单管路流量的计算
分析:此题为第二类问题,要用试算法,其步骤如下:
1)取=0.03
2)由达西公式可求得
3)
4)调用CL子程序计算。
5)检查和之差是否小于给定精度,如果不满足,将算出的作为重复2)3)4)步骤,直至满足后计算下一步。
6)
1.2.1 程序框图
见图1-2。N
开 始
打印输出
结束
读hf,d,l,ν,△
λ=0.03
调用CL求λ
|λ-λ1|<ε
图1-2 简单管路程序框图(2)
1.2.2 程序说明:
在程序中,参数表示同前述程序相同,取精度=0.000005。
1.2.3 程序代码:
#include<math.h>
#include<stdio.h>
#define pi 3.1415926
#define g 9.81
float CL(float,float,float,int);
void main()
{int id;
id=0;
float dlt,d,l,q,nu,hf,v,re,lmd,lmd1;
printf("please input:dlt,d,l,hf,nu\n");
scanf("%f,%f,%f,%f,%f",&dlt,&d,&l,&hf,&nu);
lmd1=0.03;
v=sqrt(2*g*d*hf/(l*lmd1));
re=v*d/nu;
lmd=CL(dlt,d,re,id);
while(fabs(lmd-lmd1)>=1e-6)
{lmd1=lmd;
v=sqrt(2*g*d*hf/(l*lmd1));
re=v*d/nu;
lmd=CL(dlt,d,re,id);}
q=pi*d*d*v/4;
printf("v=%7.4f m/s,re=%7.4f,lmd=%7.4f,q=%7.4f m3/s",v,re,lmd,q);}
1.3 简单管路管径的计算
分析:此题为第二类问题,要用试算法,其步骤如下:
1)取=0.03
2)由代入达西公式可求得
3)
4)调用CL子程序计算。
5)检查和之差是否小于给定精度,如果不满足,将算出的作为重复2)3)4)步骤,直至满足后计算下一步。
1.3.1 程序框图
见图1-3。
1.3.2 程序说明:
在程序中,参数表示同前述程序相同,取精度=0.000005。
3.3.3 程序代码:
#include<math.h>
#include<stdio.h>
#define pi 3.1415926
#define g 9.81
float CL(float,float,float,int);
void main()
{int id;
id=0;
float dlt,d,l,q,nu,hf,v,re,lmd,lmd1,lll;
printf("please input:dlt,q,l,hf,nu\n");
scanf("%f,%f,%f,%f,%f",&dlt,&q,&l,&hf,&nu);
lmd1=0.03;
d=pow(8*l*q*q*lmd1/(pi*pi*g*hf),0.2);
v=4*q/(pi*d*d);
re=v*d/nu;
lmd=CL(dlt,d,re,id);
while(fabs(lmd-lmd1)>=1e-6)
{lmd1=lmd;
lll=8*l*q*q*lmd1/(pi*pi*g*hf);
d=pow(lll,0.2);
v=4*q/(pi*d*d);
re=v*d/nu;
lmd=CL(dlt,d,re,id);}
printf("v=%7.4f m/s,re=%7.4f,lmd=%7.4f,d=%7.4f m ",v,re,lmd,d);}
Y
N
N
开 始
打印输出
结束
读hf,qV,l,ν,△
λ=0.03
调用CL求λ
|λ-λ1|<ε
图1-3 简单管路程序框图(3)
2 串联管路的计算方法
2.1串联管路总水头的计算
分析:此题为第一类问题,由公式容易求出h。
2.1.1 程序框图
见图2-2。
N
开 始
,
打印输出
结束
读qV, l1,l2,d1,d2,ν,△1,△2,ζ
调用CL求λ1,λ2
由公式(4-1)计算h
图2-2 串联管路程序框图(1)
2.1.2 程序说明:
在程序中,lmd1和lmd2分别表示和,lmd11和lmd22分别表示和,dlt1和dlt2分别表示1和2,zet表示,其它表示上述程序。
2.1.3 程序代码
#include <windows.h>
#include<math.h>
#include<stdio.h>
#define pi 3.1415926
#define g 9.81
float CL(float,float,float) ;
void main()
{
float dlt1,lmd1,lmd11,re1,d1,l1,v1;
float dlt2,lmd2,lmd22,re2,d2,l2,v2;
float q,nu,hf,zet;
float dk,lll;
lmd11=0.025;lmd22=0.015;
printf("please input:q,d1,d2,dlt1,dlt2,l1,l2,nu,zet\n");
scanf("%f,%f,%f,%f,%f,%f,%f,%f,%f",&q,&d1,&d2,&dlt1,&dlt2,&l1,&l2,&nu,&zet);
v1=4*q/(pi*d1*d1);
v2=4*q/(pi*d2*d2);
re1=v1*d1/nu;
re2=v2*d2/nu;
lmd1=CL(dlt1,d1,re1);
lmd2=CL(dlt2,d2,re2);
hf=(zet+lmd1*l1/d1)*(v1*v1)/(2*g)+(v1-v2)*(v1-v2)/(2*g)+(lmd2*l2/d2+1)*(v2*v2)/(2*g);
printf("v1=%7.4fm/s,re1=%7.4f,lmd1=%7.4f\n",v1,re1,lmd1);
printf("v2=%7.4fm/s,re2=%7.4f,lmd2=%7.4f,hf=%7.4fm3/s\n",v2,re2,lmd2,hf);}
2.2串联管路流量的计算
分析:此题为第二类问题,,要用试算法,其步骤如下:
1)取=0.025,=0.015
2)由(2-1)(2-2)二式可求得
(2-3)
(2-4)
3) , (2-5)
4)调用CL子程序计算,
5)检查和之差的绝对值及和之差的绝对值是否同时小于给定的精度,如果不满足,将算出的和作为新的和重复2)3)4)步骤,直至满足所取精度后再计算下一步。
6)
2.2.1 程序框图
见图2-3。Y
N
N
开 始
由公式(4-3)求出v1
由公式(4-4)求出v2
打印输出
结束
读h, l1,l2,d1,d2,ν,△1,△2,ζ
取λ1=0.025,λ2=0.025
调用CL求λ1,λ2
|λ1-λ1′|<ε
|λ2-λ2′|<ε
由公式(4-5)求Re1,Re2
图2-3 串联管路程序框图(2)
2.2.2 程序代码:
#include <windows.h>
#include<math.h>
#include<stdio.h>
#define pi 3.1415926
#define g 9.81
float CL(float,float,float) ;
void main()
{
float dlt1,lmd1,lmd11,re1,d1,l1,v1;
floatdlt2,lmd2,lmd22,re2,d2,l2,v2;
float q,nu,hf,zet;
float dk,lll;
lmd11=0.025;lmd22=0.015;
printf("please input:hf,d1,d2,dlt1,dlt2,l1,l2,nu,zet\n");
scanf("%f,%f,%f,%f,%f,%f,%f,%f,%f",&hf,&d1,&d2,&dlt1,&dlt2,&l1, &l2,&nu,&zet);
dk=d1*d1/(d2*d2);
lll=zet+lmd11*l1/d1+(1-dk)*(1-dk) +lmd22*l2*dk*dk/d2+dk*dk;
v1=sqrt(2*g*hf/lll);
v2=dk*v1;
re1=v1*d1/nu;
re2=v2*d2/nu;
lmd1=CL(dlt1,d1,re1);
lmd2=CL(dlt2,d2,re2); if(fabs(lmd11-lmd1)>=5e-6||fabs(lmd22-lmd1)>=5e-6)
{lmd11=lmd1;
lmd22=lmd2;
lll=zet+lmd11*l1/d1+(1-dk)*(1-dk)+lmd22*l2*dk*dk/d2+dk*dk;
v1=sqrt(2*g*hf/lll);
v2=dk*v1;
re1=v1*d1/nu;
re2=v2*d2/nu;
lmd1=CL(dlt1,d1,re1);
lmd2=CL(dlt2,d2,re2);
}
q=pi*d1*d1*v1/4.0;
printf("v1=%7.4fm/s,re1=%7.4f,lmd1=%7.4f\n",v1,re1,lmd1);
printf("v2=%7.4fmm/s,re2=%7.4f,lmd2=%7.4f,q=%7.4fm3/s\n",v2,re2, lmd2,q);
}
3 并联管路的计算方法
3.1并联管路流量的计算
分析:此题相当于简单管路的第二类问题。为了编成方便,采用三位数组表示三条管路的各个参数。
1)取=0.03
2)由达西公式可求得
3)
4)调用CL子程序计算(i)
5) 检查(i)和之差的绝对值是否同时小于给定的精度,如果不满足,将算出的(i)作为新的重复2)3)4)步骤,直至满足所取精度后再计算下一步。
5)
6)
3.1.1 程序框图
见图3-2。
Y
Y
N
N
开 始
打印输出
读已知参数
取λ1(i)=0.03
调用CL计算λ(i)
|λ(i)-λ1(i)|<ε
结束
图3-2并联管路程序框图(1)
3.1.2 程序说明:
在程序中,用三位数组表示三条管路的各个参数,即q(0)、q(1) 、q(2)分别表示、、,v(2)、v(1)、v(2)分别表示v1、v2、v3,lmd(0) 、lmd(1) 、lmd(2),分别表示、、,h(0) 、h(1) 、h(2)分别表示h1、h2、h3,qq表示总流量。
3.1.3 程序代码:
#include <windows.h>
#include<math.h>
#include<stdio.h>
#define pi 3.1415926
#define g 9.81
float CL(float,float,float) ;
void main()
{int i;
float dlt[3],lmd[3],re[3],d[3],l[3], v[3],h[3],q[3];
float lmd1[3];
float hf,nu,qq;
for(i=0;i<3;i++)
{printf("input:d,l,dlt");
scanf("%f,%f,%f",&d[i],&l[i],&dlt[i]);
}
printf("input:,nu,hf");
scanf("%f,%f",&nu,&hf);
for(i=0;i<3;i++)
{
lmd1[i]=0.03;
v[i]=sqrt(2*g*d[i]*hf/(l[i]*lmd1[i]));
re[i]=v[i]*d[i]/nu;
lmd[i]=CL(dlt[i],d[i],re[i]);
if(fabs(lmd1[i]-lmd[i])>=1e-6)
{lmd1[i]=lmd[i];
v[i]=sqrt(2*g*d[i]*hf/(l[i]*lmd1[i]));
re[i]=v[i]*d[i]/nu;
lmd[i]=CL(dlt[i],d[i],re[i]);}
q[i]=pi*d[i]*d[i]*v[i]/4.0;
}
qq=q[0]+q[1]+q[2];
printf("q1=%7.4fm3/s,v1=%7.2fm,re1=%7.1f,lmd1=%7.2f\n",q[0],v[0],re[0],lmd[0]);
printf("q2=%7.4fm3/s,v2=%7.2fm,re2=%7.1f,lmd2=%7.2f\n",q[1],v[1],re[1],lmd[1]);
printf("q3=%7.4fm3/s,v3=%7.2fm,re3=%7.1f,lmd3=%7.2f,qq=%7.3fm3/s\n",q[2],v[2],re[2],lmd[2],qq);
}
3.2并联管路沿程损失的计算
分析:此题为关联管路的第二类问题。由于只知道总流量,各分支流量及能量损失均不知道,因此计算较复杂,其具体步骤如下:
1)根据经验,先给定一个hf值 。
2) 由此hf值求出各分支管的流量,,,(其步骤参见简单管路第二类问题)。
3) 计算其和=++
4) 将总流量按如下比例分配
=./,=./,=./
5) 用计算出的、、去求以核对流量分配的正确性, 若求得各分支管路的损失h1、h2、h3中任意两者之间的差小于某一给定精度,则认为hf正确,否则进行下一步。
6) 令hf= (h1+h2+h3)/3,重复(b)(c)(d)(e)步骤,直至满足所给定的精度为止。
3.2.1 程序框图
见图3-3。Y
N
N
开 始
计算,,,
打印输出
读已知参数
给定一个h值
=./,=./,=./
| h1-h2)|<ε
| h3-h2)|<ε
| h1-h3)|<ε
=++
计算h1、h2、h3
hf= (h1+h2+h3)/3
结束
图3-3并联管路程序框图(2)
3.2.2程序代码:
#include <windows.h>
#include<math.h>
#include<stdio.h>
#define pi 3.1415926
#define g 9.81
float CL(float,float,float) ;
void main()
{
int i;
float dlt[3],lmd[3],re[3],d[3],l[3],v[3],h[3],q[3];
float q1[3],lmd1[3];
float qt,hf,hff,nu,qq;
for(i=0;i<3;i++)
{printf("input:d,l,dlt");
scanf("%f,%f,%f",&d[i],&l[i],&dlt[i]);
}
printf("input:qq,nu");
scanf("%f,%f",&qq,&nu);
qt=0;
hff=100;
loop:
for(i=0;i<3;i++)
{
hf=hff;
lmd1[i]=0.03;
v[i]=sqrt(2*g*d[i]*hf/(l[i]*lmd1[i]));
re[i]=v[i]*d[i]/nu;
lmd[i]=CL(dlt[i],d[i],re[i]);
if(fabs(lmd1[i]-lmd[i])>=1e-6)
{lmd1[i]=lmd[i];
v[i]=sqrt(2*g*d[i]*hf/(l[i]*lmd1[i]));
re[i]=v[i]*d[i]/nu;
lmd[i]=CL(dlt[i],d[i],re[i]);}
q1[i]=pi*d[i]*d[i]*v[i]/4.0;
qt=qt+q1[i];
}
for(i=0;i<3;i++)
{q[i]=qq*q1[i]/qt;
v[i]=4*q[i]/(pi*d[i]*d[i]);
re[i]=v[i]*d[i]/nu;
lmd[i]=CL(dlt[i],d[i],re[i]);
h[i]=lmd[i]*l[i]*v[i]*v[i]/(d[i]*2.0*g);
}
hff=(h[0]+h[1]+h[2])/3.0;
if(fabs(h[0]-h[1])<=0.01||fabs(h[1]-h[2])<=0.01||fabs(h[2]-h[1])<=0.01)
goto loop;
printf("q1=%7.4fm3/s,v1=%7.2fm,re1=%7.1f,lmd1=%7.2f,h1=%7.3fm\n,q[0],v[0],re[0],lmd[0],h[0]);
printf("q2=%7.4fm3/s,v2=%7.2fm,re2=%7.1f,lmd2=%7.2f,h2=%7.3fm\n,q[1],v[1],re[1],lmd[1],h[1]);
printf("q3=%7.4fm3/s,v3=%7.2fm,re3=%7.1f,lmd3=%7.2f,h3=%7.3fm\n,q[2],v[2],re[2],lmd[2],h[2]);
}
展开阅读全文