水力学计算程序代码
- 格式:wps
- 大小:135.00 KB
- 文档页数:5
涵洞快速计算程序h(m)(输)b(m)(输)m左(边坡输)m右(边坡输)ω(m2)3.723400.50.51271.7192 3.2133100.50.51001.1916852.72800.50.5759.645 2.1712500.50.5545.1066205 1.5972300.50.5368.5852045 0.4761000.50.547.713288Q(m3/s)(输)b(m)(输)m左(边坡输)m右(边坡输)ω(m2)0.62 1.5 1.5 1.27135122.32300.50.565.820898 466.32300.50.5147.17416050.51 1.5 1.5 2.51.4422 5.9202466.623022206.984898X1(输)Y1(输)X2(输)Y2(输)X(输)59.149.357.148.558.70.001 3.1660.0028.9660.00110420.3630.356 2.564Q(m3/s)(输)b(m)(输)m左(边坡输)m右(边坡输)hk(m)(试输)40.72300.50.50.148120170.50.5 1.69 212170.50.5 2.45Q(m3/s)(输)b(m)(输)m左(边坡输)m右(边坡输)hk(m)(输) 120170.50.5 1.6901 166170.50.5 1.415 244170.50.5 1.415Q(m3/s)(输)E0(输)b(m)(输)q(m3/sm)流速系数(输)1.354 1.50.90.95122.3 1.771120 1.0191666670.8521213.551712.470588240.85hc''的计算(第202页)正插值计算(请X、梯形断⾯临界⽔深hk的计算,《⽔⼒学》(上册)(河海⼤学1986级梯形断⾯临界底坡的计算,《⽔⼒学》(上册)(河海⼤学1986级教科书,第271页)底流式矩形消⼒池(⾮扩散)的计算《hc的计算(第201页)hc(m)(引⽤)q(m3/sm)(引⽤)Frc hc''(m)0.10830.98.062418189 1.1818712820.217 1.019166667 3.2190009620.8853015880.93212.47058824 4.425155815 5.385149739池深S的计算Q(m3/s)(引⽤)b(m)(引⽤)ht(m)(输)hc''(m)(引⽤)σ(输)1.35 1.5 3.9 1.181871282 1.05122.3120 2.2760.885301588 1.0521217 3.237 5.385149739 1.05消⼒坎设计《⽔⼒计算⼿册》第210页。
D-2 水闸水力学计算程序作者 陈靖齐(水电部天津勘测设计院) 校核 潘东海(水电部天津勘测设计院)一、概述:(一)水闸过水能力计算的难题是流量系数μ,经验方式很多,各家不同,甚至一本参考书,列出几种公式,几种算例,深入研究流量系数不是本程序范围,本程序仅对现有公式择优选一。
(二)一般计算流量时,不计行进流速V 0=Q/BH ,本程序用迭代法,考虑了V 0,即Q →V 0→H 0,再算Q ,较符合实际过程,精度│△Q │< 0.001m 3/s 。
(三)求e 用迭代法。
二.功能:本程序能计算平底平板闸门、平底弧形闸门、实用堰平板闸门、实用堰弧形闸门四种情况下的流量,闸门开启度e 。
三.公式和算法: (一)流量公式(平底平板闸门可求淹没系数σ) 或(其他三种情况)式中:μ0—流量系数,因闸门形式,底坎形式,相对开度e/H 而异; e —闸门开度(m ); B —闸门宽(m ); H 0—闸前水深(m ); H S —下游水深(m );g —重力加速度(9.8m/s 2)。
(二)流量系数:本程序取武水的一套较完整的流量系数公式。
1,平底、平板闸门μ0=0.6-0.176e/H [清华、武水](华水多—尾项)2,平底、弧形闸门μ0=0.97-0.56e/H-(1-e/H )×0.258θ[武水]式中:θ--弧形闸门下缘入流角(弧度值)。
25°≤θ≤90°,0.1≤e/H ≤0.65 R —弧形闸门半径; C —转轴高;02gH eB Q σμ=)(s h h g eB Q -=002μRe c COS -=-1θ3,实用堰上平板闸门4,实用堰上弧形闸门(三)淹没出流问题1,平板平底闸门,淹没系数σ=σ[(hs-hc ″)/(H-hc )],其关系为一条曲线,本程序已使其离散和数据化存数据库中,可自动插值。
式中: hs —下游水深(m );hc ″—水跃后水深(m ); hc —收缩断面宽度:hc=ε eFrc=Uc 2/ghc 收缩断面Frude 数e —平板闸门侧收缩系数表,本程序已存数据库中。
夏季铁路收汽油程序及运行结果:#include<stdio.h>#include<math.h>float Q[4]={50,250,250,250};float d[4],L[4];void main(){float Hf,v,lamda,Remin,Remax,nd,Re,lt,epsilon;float hf[4];int i;printf("鹤管内径(m),长度(m):\n");scanf("%f,%f",&d[0],&L[0]);printf("集油管管内径(m),长度(m):\n");scanf("%f,%f",&d[1],&L[1]);printf("吸入管内径(m),长度(m):\n");scanf("%f,%f",&d[2],&L[2]);printf("排出管内径(m),长度(m):\n");scanf("%f,%f",&d[3],&L[3]);for(i=0;i<4;i++){epsilon=2*0.06/(1000*d[i]);Remin=59.7/pow(epsilon,1.142857);Remax=(665-765*log10(epsilon))/epsilon;nd=0.594*pow(10,-6)*exp(0.013*(15.6-35));Re=4*Q[i]/(3600*3.14159*d[i]*nd);printf("雷诺数:%f,Re1:%f,Re2:%f\n",Re,Remin,Remax);if(Re<Remin)printf("水力光滑区lamda=%f\n",lamda=0.3164/pow(Re,0.25));if(Remin<Re&&Re<Remax)printf("混合摩擦区lamda=%f\n",lamda=1/pow((-1.8*log10(6.8/Re+pow((epsilon/7.4),1.11))),2));if(Re>Remax)printf("粗糙区lamda=%f\n",lamda=1/pow((1.74-2*log10(epsilon)),2));v=4*Q[i]/(3600*3.14159*d[i]*d[i]);hf[i]=lamda*L[i]*v*v/(2*9.8*d[i]);printf("hf[%d]=%f\n",i,hf[i]);}}冬季铁路收汽油程序及运行结果:#include<stdio.h>#include<math.h>float Q[4]={50,250,250,250};float d[4],L[4];void main(){float Hf,v,lamda,Remin,Remax,nd,Re,lt,epsilon; float hf[4];int i;printf("鹤管内径(m),长度(m):\n");scanf("%f,%f",&d[0],&L[0]);printf("集油管管内径(m),长度(m):\n"); scanf("%f,%f",&d[1],&L[1]);printf("吸入管内径(m),长度(m):\n");scanf("%f,%f",&d[2],&L[2]);printf("排出管内径(m),长度(m):\n");scanf("%f,%f",&d[3],&L[3]);for(i=0;i<4;i++){epsilon=2*0.06/(1000*d[i]);Remin=59.7/pow(epsilon,1.142857);Remax=(665-765*log10(epsilon))/epsilon;nd=0.594*pow(10,-6)*exp(0.013*(15.6+3));Re=4*Q[i]/(3600*3.14159*d[i]*nd);printf("雷诺数:%f,Re1:%f,Re2:%f\n",Re,Remin,Remax);if(Re<Remin)printf("水力光滑区lamda=%f\n",lamda=0.3164/pow(Re,0.25));if(Remin<Re&&Re<Remax)printf("混合摩擦区lamda=%f\n",lamda=1/pow((-1.8*log10(6.8/Re+pow((epsilon/7.4),1.11))),2));if(Re>Remax)printf("粗糙区lamda=%f\n",lamda=1/pow((1.74-2*log10(epsilon)),2));v=4*Q[i]/(3600*3.14159*d[i]*d[i]);hf[i]=lamda*L[i]*v*v/(2*9.8*d[i]);printf("hf[%d]=%f\n",i,hf[i]);}}夏季铁路收柴油程序及运行结果:#include<stdio.h>#include<math.h>float Q[4]={50,250,250,250};float d[4],L[4];void main(){float Hf,v,lamda,Remin,Remax,nd,Re,lt,epsilon;float hf[4];int i;printf("鹤管内径(m),长度(m):\n");scanf("%f,%f",&d[0],&L[0]);printf("集油管管内径(m),长度(m):\n");scanf("%f,%f",&d[1],&L[1]);printf("吸入管内径(m),长度(m):\n");scanf("%f,%f",&d[2],&L[2]);printf("排出管内径(m),长度(m):\n");scanf("%f,%f",&d[3],&L[3]);for(i=0;i<4;i++){epsilon=2*0.06/(1000*d[i]);Remin=59.7/pow(epsilon,1.142857);Remax=(665-765*log10(epsilon))/epsilon;nd=4.420*pow(10,-6)*exp(0.036*(20-35));Re=4*Q[i]/(3600*3.14159*d[i]*nd);printf("雷诺数:%f,Re1:%f,Re2:%f\n",Re,Remin,Remax);if(Re<Remin)printf("水力光滑区lamda=%f\n",lamda=0.3164/pow(Re,0.25));if(Remin<Re&&Re<Remax)printf("混合摩擦区lamda=%f\n",lamda=1/pow((-1.8*log10(6.8/Re+pow((epsilon/7.4),1.11))),2));if(Re>Remax)printf("粗糙区lamda=%f\n",lamda=1/pow((1.74-2*log10(epsilon)),2));v=4*Q[i]/(3600*3.14159*d[i]*d[i]);hf[i]=lamda*L[i]*v*v/(2*9.8*d[i]);printf("hf[%d]=%f\n",i,hf[i]);}}冬季铁路收柴油程序及运行结果:#include<stdio.h>#include<math.h>float Q[3]={50,100,100};float d[3],L[3];void main(){float Hf,v,lamda,Remin,Remax,nd,Re,lt,epsilon; float hf[3];int i;printf("鹤管内径(m),长度(m):\n");scanf("%f,%f",&d[0],&L[0]);printf("吸入管内径(m),长度(m):\n");scanf("%f,%f",&d[1],&L[1]);printf("排出管内径(m),长度(m):\n");scanf("%f,%f",&d[2],&L[2]);for(i=0;i<3;i++){epsilon=2*0.06/(1000*d[i]);Remin=59.7/pow(epsilon,1.142857); Remax=(665-765*log10(epsilon))/epsilon;nd=4.420*pow(10,-6)*exp(0.036*(20+3));Re=4*Q[i]/(3600*3.14159*d[i]*nd);printf("雷诺数:%f,Re1:%f,Re2:%f\n",Re,Remin,Remax);if(Re<Remin)printf("水力光滑区lamda=%f\n",lamda=0.3164/pow(Re,0.25));if(Remin<Re&&Re<Remax)printf("混合摩擦区lamda=%f\n",lamda=1/pow((-1.8*log10(6.8/Re+pow((epsilon/7.4),1.11))),2));if(Re>Remax)printf("粗糙区lamda=%f\n",lamda=1/pow((1.74-2*log10(epsilon)),2));v=4*Q[i]/(3600*3.14159*d[i]*d[i]);hf[i]=lamda*L[i]*v*v/(2*9.8*d[i]);printf("hf[%d]=%f\n",i,hf[i]);}}夏季公路发汽油程序及运行结果:#include<stdio.h>#include<math.h>float Q[3]={50,100,100};float d[3],L[3];void main(){float Hf,v,lamda,Remin,Remax,nd,Re,lt,epsilon;float hf[3];int i;printf("鹤管内径(m),长度(m):\n");scanf("%f,%f",&d[0],&L[0]);printf("吸入管内径(m),长度(m):\n");scanf("%f,%f",&d[1],&L[1]);printf("排出管内径(m),长度(m):\n");scanf("%f,%f",&d[2],&L[2]);for(i=0;i<3;i++){epsilon=2*0.06/(1000*d[i]);Remin=59.7/pow(epsilon,1.142857);Remax=(665-765*log10(epsilon))/epsilon;nd=0.594*pow(10,-6)*exp(0.013*(15.6-35));Re=4*Q[i]/(3600*3.14159*d[i]*nd);printf("雷诺数:%f,Re1:%f,Re2:%f\n",Re,Remin,Remax);if(Re<Remin)printf("水力光滑区lamda=%f\n",lamda=0.3164/pow(Re,0.25));if(Remin<Re&&Re<Remax)printf("混合摩擦区lamda=%f\n",lamda=1/pow((-1.8*log10(6.8/Re+pow((epsilon/7.4),1.11))),2));if(Re>Remax)printf("粗糙区lamda=%f\n",lamda=1/pow((1.74-2*log10(epsilon)),2));v=4*Q[i]/(3600*3.14159*d[i]*d[i]);hf[i]=lamda*L[i]*v*v/(2*9.8*d[i]);printf("hf[%d]=%f\n",i,hf[i]);}}冬季公路发汽油程序及运行结果:#include<stdio.h>#include<math.h>float Q[3]={50,100,100};float d[3],L[3];void main(){float Hf,v,lamda,Remin,Remax,nd,Re,lt,epsilon; float hf[3];int i;printf("鹤管内径(m),长度(m):\n");scanf("%f,%f",&d[0],&L[0]);printf("吸入管内径(m),长度(m):\n");scanf("%f,%f",&d[1],&L[1]);printf("排出管内径(m),长度(m):\n");scanf("%f,%f",&d[2],&L[2]);for(i=0;i<3;i++){epsilon=2*0.06/(1000*d[i]);Remin=59.7/pow(epsilon,1.142857); Remax=(665-765*log10(epsilon))/epsilon; nd=0.594*pow(10,-6)*exp(0.013*(15.6+3));Re=4*Q[i]/(3600*3.14159*d[i]*nd);printf("雷诺数:%f,Re1:%f,Re2:%f\n",Re,Remin,Remax);if(Re<Remin)printf("水力光滑区lamda=%f\n",lamda=0.3164/pow(Re,0.25));if(Remin<Re&&Re<Remax)printf("混合摩擦区lamda=%f\n",lamda=1/pow((-1.8*log10(6.8/Re+pow((epsilon/7.4),1.11))),2));if(Re>Remax)printf("粗糙区lamda=%f\n",lamda=1/pow((1.74-2*log10(epsilon)),2));v=4*Q[i]/(3600*3.14159*d[i]*d[i]);hf[i]=lamda*L[i]*v*v/(2*9.8*d[i]);printf("hf[%d]=%f\n",i,hf[i]);}}夏季公路发柴油程序及运行结果:#include<stdio.h>#include<math.h>float Q[3]={50,100,100};float d[3],L[3];void main(){float Hf,v,lamda,Remin,Remax,nd,Re,lt,epsilon;float hf[3];int i;printf("鹤管内径(m),长度(m):\n");scanf("%f,%f",&d[0],&L[0]);printf("吸入管内径(m),长度(m):\n");scanf("%f,%f",&d[1],&L[1]);printf("排出管内径(m),长度(m):\n");scanf("%f,%f",&d[2],&L[2]);for(i=0;i<3;i++){epsilon=2*0.06/(1000*d[i]);Remin=59.7/pow(epsilon,1.142857);Remax=(665-765*log10(epsilon))/epsilon;nd=4.420*pow(10,-6)*exp(0.036*(20-35));Re=4*Q[i]/(3600*3.14159*d[i]*nd);printf("雷诺数:%f,Re1:%f,Re2:%f\n",Re,Remin,Remax);if(Re<Remin)printf("水力光滑区lamda=%f\n",lamda=0.3164/pow(Re,0.25));if(Remin<Re&&Re<Remax)printf("混合摩擦区lamda=%f\n",lamda=1/pow((-1.8*log10(6.8/Re+pow((epsilon/7.4),1.11))),2));if(Re>Remax)printf("粗糙区lamda=%f\n",lamda=1/pow((1.74-2*log10(epsilon)),2));v=4*Q[i]/(3600*3.14159*d[i]*d[i]);hf[i]=lamda*L[i]*v*v/(2*9.8*d[i]);printf("hf[%d]=%f\n",i,hf[i]);}}冬季公路发柴油程序及运行结果:#include<stdio.h>#include<math.h>float Q[3]={50,100,100};float d[3],L[3];void main(){float Hf,v,lamda,Remin,Remax,nd,Re,lt,epsilon; float hf[3];int i;printf("鹤管内径(m),长度(m):\n");scanf("%f,%f",&d[0],&L[0]);printf("吸入管内径(m),长度(m):\n");scanf("%f,%f",&d[1],&L[1]);printf("排出管内径(m),长度(m):\n");scanf("%f,%f",&d[2],&L[2]);for(i=0;i<3;i++){epsilon=2*0.06/(1000*d[i]);Remin=59.7/pow(epsilon,1.142857); Remax=(665-765*log10(epsilon))/epsilon; nd=4.420*pow(10,-6)*exp(0.036*(20+3));Re=4*Q[i]/(3600*3.14159*d[i]*nd);printf("雷诺数:%f,Re1:%f,Re2:%f\n",Re,Remin,Remax);if(Re<Remin)printf("水力光滑区lamda=%f\n",lamda=0.3164/pow(Re,0.25));if(Remin<Re&&Re<Remax)printf("混合摩擦区lamda=%f\n",lamda=1/pow((-1.8*log10(6.8/Re+pow((epsilon/7.4),1.11))),2));if(Re>Remax)printf("粗糙区lamda=%f\n",lamda=1/pow((1.74-2*log10(epsilon)),2));v=4*Q[i]/(3600*3.14159*d[i]*d[i]);hf[i]=lamda*L[i]*v*v/(2*9.8*d[i]);printf("hf[%d]=%f\n",i,hf[i]);}}。
Option ExplicitOption Base 1Public b As Single, c As Single, d As Single, e As Single, f As Single, g As Single, s1 As Single, s2 As Single _, x1 As Single, x2 As Single, x3 As Single, v1 As Single, v2 As Single, v3 As Single, r1 As Single, r2 As Single, _r3 As Single, k1 As Single, k2 As Single, k3 As Single, j As Single, h As StringPrivate Sub Command1_Click()Dim a As Single, q As Single, i As Single, p As Single, x As Singlea = Text1.Textb = Text2.Textc = Text3.Textd = Text4.Texte = Text5.Textf = Text6.Textg = Text7.Texth = Text8.Texti = 0If Option1.Value = True Thenq = b - ap = fx(q, b)If p < 0 ThenGoTo kkkkElseGoTo mmmmEnd Ifmmmm:Do While i < h q = b - a p = fx(q, b)If p < 0 Then Exit Subi = i + pList1.AddItem "水深: " & Int(CStr(q * 1000)) / 1000 & " △s: " _& In t(CStr(p * 100))/ 100 & ”s: " & ib = qLoopExit Subkkkk:Do While i < hq = b + a p = fx(q, b)If p < 0 Then Exit Subi = i + pList1.AddItem "水深: " & Int(CStr(q * 1000)) / 1000 & " △s: " _& In t(CStr(p * 100))/ 100 & ”s: " & ib = qLoopElse q = b - a p = fx(b, q) If p < 0 ThenGoTo ffffElseGoTo jjjjEnd Ifjjjj:Do While i < h q = b - a p = fx(b, q) If p < 0 Then Exit Sub i = i + p List1.AddItem "水深: " & Int(CStr(q * 1000)) / 1000 &"& In t(CStr(p * 100)) / 100 & ”s: " & ib = qLoop Exit Sub ffff:Do While i < h q = b + a p = fx(b, q) If p < 0 Then Exit Sub i= i + pList1.AddItem "水深: " & Int(CStr(q * 1000)) / 1000 &"& In t(CStr(p * 100)) / 100 & ”s: " & ib = qLoopEnd IfEnd SubPrivate Sub Command2_Click()List1.ClearEnd SubPrivate Function fx(a As Single, b As Single) As Singles1 = =e * a + f * a A 2s2 = =e * b + f * b A 2x1 =e + 2 * a * Sqr(1 +f A 2)x2 =e + 2 * b * Sqr(1 +f A 2)v1 = g / s1: v2 = g / s2v3 = (v1 + v2) / 2r1 = s1 / x1: r2 = s2 / x2r3 = (r1 + r2) / 2k1 = r1 A (1 / 6) / d: k2 = r2 A (1 / 6) / dk3 = (k1 + k2) / 2j = (v3 A 2) / (k3 A 2 * r3)fx = (b - a + (v2 A 2 - v1 A 2) / (2 * 9.81)) / (c - j) End Function △ s: △ s:。
程序共有2个文件,Hydraulics.bas和Form1.frm。
Hydraulics.bas文件里定义了水力学计算所需的相关函数,后面的计算全部基于这些函数。
相关函数有:(参数已省略)‘author:吴昱驹‘e-mail:328522073@‘platform: VB6.0fxA() 计算过水面积fxv() 计算断面平均流速fxEs() 计算断面单位能量fxv_average() 计算平均速度fxR_average() 计算平均水力半径fxC_average() 计算平均谢才系数fxX() 计算湿周fxR() 计算水利半径fxC() 计算谢才系数fxJ() 计算水力坡度fxdeltaS() 计算ΔSfxHc() 计算临界水深fxH0() 计算正常水深Hydraulics文件内容如下Public Const g As Single = 9.81'定义重力加速度常量gFunction fxA(b As Single, m As Single, h As Single) As Single '计算过水面积fxA = (b + m * h) * hEnd FunctionFunction fxv(q As Single, a As Single) As Single '计算断面平均流速fxv = q / aEnd FunctionFunction fxEs(h As Single, alpha As Single, v As Single) As Single '计算断面单位能量fxEs = h + alpha * v * v / (2 * g)End FunctionFunction fxv_average(v1 As Single, v2 As Single) As Single '计算平均速度fxv_average = 0.5 * (v1 + v2)End FunctionFunction fxR_average(r1 As Single, r2 As Single) As Single '计算平均水力半径fxR_average = 0.5 * (r1 + r2)End FunctionFunction fxC_average(c1 As Single, c2 As Single) As Single '计算平均谢才系数fxC_average = 0.5 * (c1 + c2)End FunctionFunction fxX(b As Single, h As Single, m As Single) As Single '计算湿周fxX = b + 2 * h * Sqr(1 + m * m)End FunctionFunction fxR(a As Single, x As Single) As Single '计算水力半径fxR = a / xEnd FunctionFunction fxC(n As Single, r As Single) As Single '计算谢才系数fxC = (r ^ (1 / 6)) / nEnd FunctionFunction fxJ(v As Single, c As Single, r As Single) As Single '计算水力坡度fxJ = v * v / (c * c * r)End FunctionFunction fxdeltaS(es1 As Single, es2 As Single, i As Single, J As Single) As Single '计算ΔS fxdeltaS = (es2 - es1) / (i - J)End FunctionFunction fxHc(alpha As Single, q As Single, htest As Single, b As Single, m As Single) As Single '试算法计算临界水深Dim temp As Single, ht As Single, temph As Singletemp = alpha * q * q / gFor ht = htest To 0 Step -0.0001temph = ((b + m * ht) * ht) ^ 3 / (b + 2 * m * ht)If Abs(temph - temp) < 1 ThenExit ForEnd IfNext htIf ht > 0 ThenfxHc = htElsefxHc = -1End IfEnd FunctionFunction fxH0(q As Single, b As Single, m As Single, n As Single, i As Single) As Single '计算正常水深Dim qt As Single, ht As Single, c As Single, a As Single, r As Single, x As SingleFor ht = 0 To 10 Step 0.0001x = fxX(b, ht, m)a = fxA(b, m, ht)r = fxR(a, x)c = fxC(n, r)qt = c * a * Sqr(r * i)If Abs(qt - q) < 0.1 ThenExit ForEnd IfNext htIf ht < 10 ThenfxH0 = htElsefxH0 = -1End IfEnd FunctionForm1.frm 文件是程序窗体文件,相关运算,结果等都在此界面输出。
以下为 program.cs的代码using System;using System.Collections.Generic;using System.Linq;//using System.Threading.Tasks;using System.Windows.Forms;namespace水力计算优化版{staticclass Program{///<summary>///应用程序的主入口点。
///</summary>[STAThread]staticvoid Main(){Application.EnableVisualStyles();Application.SetCompatibleTextRenderingDefault(false);Application.Run(new Form1());}}}以下为from1.cs的代码using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;//using System.Threading.Tasks;using System.Windows.Forms;namespace水力计算优化版{publicpartialclass Form1 : Form{publicdouble Q, ZCD, L, d, Md, v, DLnd, YDnd, Re, Pi = 3.14D, Kesi, Re1, Re2, lanbuda; publicdouble b, m, Hf;publicbool YDniandu, Liuliang;public Form1(){InitializeComponent();}privatevoid CanShuCongShe_Click(object sender, EventArgs e){guanjingtextBox.Clear();cucaotextBox.Clear();guanchangtextBox.Clear();midutextBox.Clear();LSutextBox.Clear();LLiangtextBox.Clear();DLitextBox.Clear();YDongtextBox.Clear();LNuotextBox.Clear();LTaitextBox.Clear();MZutextBox.Clear();YChengtextBox.Clear();guanjingtextBox.Focus();}privatevoid LSuradioButton_CheckedChanged(object sender, EventArgs e){if (LSuradioButton.Checked == true){LLiangtextBox.Visible = false;LSutextBox.Visible = true;Liuliang = false;}}privatevoid LLiangradioButton_CheckedChanged(object sender, EventArgs e) {if (LLiangradioButton.Checked == true){LLiangtextBox.Visible = true;LSutextBox.Visible = false;Liuliang = true;}}privatevoid DLiradioButton_CheckedChanged(object sender, EventArgs e){if (DLiradioButton.Checked == true){DLitextBox.Visible = true;YDongtextBox.Visible = false;YDniandu = false;}}privatevoid YDongradioButton_CheckedChanged(object sender, EventArgs e) {if (YDongradioButton.Checked == true){DLitextBox.Visible = false;YDongtextBox.Visible = true;YDniandu = true;}}privatevoid button1_Click(object sender, EventArgs e){if (cucaotextBox.Text == "")cucaotextBox.Focus();if (guanjingtextBox.Text == "")guanjingtextBox .Focus ();if (guanchangtextBox.Text == "")guanchangtextBox.Focus();if (midutextBox.Text == "")midutextBox.Focus();if (LLiangtextBox.Text == "")LLiangtextBox.Focus();if (LSutextBox.Text == "")LSutextBox.Focus();if (YDongtextBox.Text == "")YDongtextBox.Focus();if (DLitextBox.Text == "")DLitextBox.Focus();if (cucaotextBox .Text == "" || guanchangtextBox .Text == "" || guanjingtextBox .Text == "" || midutextBox .Text == ""){MessageBox.Show("请检查是否遗漏数据!");return;}if ((LLiangtextBox.Text == ""&&LSutextBox.Text == "") || (YDongtextBox.Text ==""&&DLitextBox.Text == "")){MessageBox.Show("请检查是否遗漏数据!11");return;}ZCD = float.Parse(cucaotextBox.Text);L = float.Parse(guanchangtextBox.Text);d = float.Parse(guanjingtextBox.Text);Md = float.Parse(midutextBox.Text);if (Liuliang == true){Q = float.Parse(LLiangtextBox.Text);}else{v = float.Parse(LSutextBox.Text);Q = Pi * d * d * v / 4;}if (YDniandu == true){YDnd = float.Parse(YDongtextBox.Text);}else{DLnd = float.Parse(DLitextBox.Text);YDnd = DLnd / Md;}Re = 4 * Q / (Pi * d * YDnd);LNuotextBox.Text = Re.ToString();Kesi =0.002*ZCD /d ;Re1 =59.7/Math .Pow (Kesi ,8/7);Re2 = (665 - 765 * Math.Log10(Kesi)) / Kesi;if (Re <= 2000){LTaitextBox.Text = "层流";lanbuda = 64 / Re;b = 4.15;m = 1;}else{if (3000 < Re && Re <= Re1){LTaitextBox.Text = "水力光滑";lanbuda = 0.3164 / Math.Pow(Re, 1 / 4);b = 0.0246; m = 0.25;}else{if (Re >= Re2){LTaitextBox.Text = "水力粗糙";lanbuda = 0;b = 0; m = 0;}else{LTaitextBox.Text = "混合摩擦";lanbuda = 0;b = 0; m = 0;}}}if (lanbuda == 0)MZutextBox.Text = "不做要求";elseMZutextBox.Text = lanbuda.ToString();if (b != 0 && m != 0){Hf = b * Math.Pow(YDnd, m) * Math.Pow(Q, (2 - m)) * L / Math.Pow(d, (5 - m)); YChengtextBox.Text = Hf.ToString();}elseYChengtextBox.Text = "不做要求"; }}}。
第37卷第2期2018年4月红水河HongShui RiverVol .37 No .2Apr .2018基于E xcel 及VBA 编程的水力自动化计算李倩\申忠辉2(1.广西电力职业技术学院,广西南宁530007; 2.广西水利电力勘测设计研究院,广西南宁530023)摘要:针对国内各水利水电勘测设计院普遍采用的商业软件、自行编程计算、Excel 普通自带函数链接计算等 方法的优缺点进行了分析,提出了在Excel 软件上基于V B A 编程的水力自动化计算的方法。
实现有针对性的个 性化、自动化水力计算。
工程实例证明,该方法具有效率高、简单易学等优点,还可利用E xcel 的图表功能使 结果表达得准确直观。
关键词:水力学;计算;编程;软件中图分类号:TP317.3文献标识码:B文章编号:1001-408X( 2018) 02-0015-031研究背景水力学计算是水利水电工程设计过程中非常重 要的工作内容。
部分水力学计算工作具有过程繁 复、试算及迭代步骤多等特点。
在水力学计算与水 工建筑物优化布置相结合时,更是需要进行反复计 算来寻找最优化的布置结果。
目前国内各水利水电勘测设计院大多采用以下 方法来进行水力学计算。
1)方法一:采用专业化的商业软件,如“水利计算程序集” “理正系列软件”“张东明软件” 等。
由于商业软件一般都投人了较多的人力、物力 进行开发,因此购买价格昂贵,且只能按照软件设 定的功能或条件进行计算。
但各工程实际情况千差 万别,有些条件不一定吻合,软件也无法根据实际情况进行修改,灵活性较差。
2) 方法二:利用编程软件自行编程制作水力 计算程序。
利用程序语言编程计算往往可以与各工 程的实际情况相适应,但利用这些工具往往需要设 计人员花费许多精力来进行编程学习,而且实际操 作中还要花费大量精力进行程序编写,这使得设计 人员往往力不从心。
3)方法三:采用Excel 软件的函数功能进行 表格链接计算。
计算方法说明明渠均匀流求正常水深程序是针对棱柱体明渠(过水断面为对称梯形或矩形)恒定均匀流,已知河床底坡i ,河床糙率n,过水断面形状(b,m ),流量Q ,求解正常水深h 0。
明渠断面示意图按照谢才公式:Ri CA =Q谢才系数:611R n=C过水断面面积:h mh b A )(+= 湿周:212m h b ++=χ 水力半径:χ/A R =由此解得正常水深:)/()12()(04.0203.0220mh b m h b iQ n +++=h算法:采用迭代法求解非线性代数方程。
1. 正常水深的迭代方程为:)/()12()(04.0203.02201n n n mh b m h b iQ n h +++=+;2.假设。
进行迭代求解h ; m h 0.100=....321000h h ⇒⇒3.迭代结束的判断依据为ε<Q Q Q /|-计算|,ε为一个小值。
求临界水深程序是针对棱柱体明渠(过水断面为对称梯形或矩形)恒定均匀流,已知过水断面形状(b,m ),流量Q ,动能校正系数α,求解临界水深hc 。
明渠断面示意图临界水深公式:0132=−=c c s B gA Q dh dE α其中,――断面单位能量。
s E 由此可得:cc B A g Q 32=α过水断面面积:h mh b A )(+= 水面宽度:mh b B 2+=由此解得临界水深: 3132])/()2()/[(c c c mh b mh b g Q h ++×=算法:采用迭代法求解非线性代数方程。
1. 临界水深的迭代方程为:3132])/()2()/[(1n n n c c c mh b mh b g Q h ++×=+; 2.假设。
进行迭代求解h ;m h c 0.10=....321c c c h h ⇒⇒3.迭代结束的判断依据为ε<+n n n c c c h h h /|1-|并且ε<++11/|n n n c c c h h h -|,ε为一个小值。
水力学电算作业一、运用迭代试算法求解明渠均匀流正常水深h0C语言程序如下:#include<stdio.h>#include<math.h>void main(){double b,m,q,i,n,h,h0=1.0;printf("请依次输入渠道底宽,边坡系数,流量,底坡,糙率:\n");scanf("%lf,%lf,%lf,%lf,%lf",&b,&m,&q,&i,&n);do{h=h0;h0=pow((q*n)/pow(i,0.5),0.6)*pow((b+2*h*pow((1+m*m),0.5)),0.4)/(b+m* h);}while(fabs(h0-h)>0.00001);printf("正常水深为%lf\n",h0);}试算实例截图:二、环状管网的流量及水头损失计算C语言程序如下:#include<stdio.h>#include<math.h>#define Im 5 /*管段数*/#define Jm 2 /*环路数*/void main(){double q[Im]={0.05,0.15,0.02,0.03,0.04}; /*输入管段流量*/ double rl[Im]={450,500,500,400,550}; /*输入管段长度*/ double d[Im]={0.25,0.15,0.20,0.20,0.25}; /*输入管段直径*/ double rn[Im]={0.0125,0.0125,0.0125,0.0125,0.0125};/*输入管段糙率*/double a[Jm][Im]={1,0,1,-1,0,0,1,-1,0,-1}; /*输入系数Aij*/double hf[Im],dq[Jm],shf[Jm],shfq[Jm],s0[Im];printf(" 水头闭合差修正流量\n");loop:for(int j=0;j<Jm;j++) /*环路循环计算*/ {shf[j]=0; /*求和变量初值置0*/shfq[j]=0; /*求和变量初值置0*/for(int i=0;i<Im;i++) /*管段循环计算*/{s0[i]=10.29*rn[i]*rn[i]/pow(d[i],5.3); /*计算比阻S0*/hf[i]=s0[i]*rl[i]*q[i]*fabs(q[i]); /*计算水头损失hfi*/shf[j]=shf[j]+a[j][i]*hf[i]; /*计算水头损失闭合差*/shfq[j]=shfq[j]+fabs(a[j][i])*hf[i]/q[i];}dq[j]=-shf[j]/2/shfq[j]; /*计算修正流量dQj*/printf("%d,%lf,%lf",j,shf[j],dq[j]); /*输出中间结果*/ }for(j=0;j<Jm;j++)for(i=0;i<Im;i++)q[i]=q[i]+a[j][i]*dq[j]; /*修正流量Qi*/ for(j=0;j<Jm;j++){ if(fabs(shf[j]>=0.0001)) goto loop;} /*判断精度*/ printf("计算结果如下:\n");printf("管道号d(m)L(m)s0 q(m^3/m) hf(m)\n");printf("----------------------------------------------------------------\n");for(i=0;i<Im;i++)printf("%d,%lf,%lf,%lf,%lf,%lf",i,d[i],rl[i],s0[i],q[i],hf[i]);/*输出结果*/}试算实例截图:三、棱柱形渠道水面曲线计算C语言程序如下:#include <stdio.h>#include <math.h>double q,i,n,m,b,a,r,v2,ja,jb,es1,es2;double csn,srm,alfa;int ds,ns,dr;int main(){double h[201],v[201],s[201];double hk,h0,hb;double downx,upx;double wucha;double hd;double Vn;static double eps=0.0005;int l;double erfenfa(double (*f)(double),double x1,double x2,double eps);double fe(double h);double fhk(double h);double fh0(double h);alfa=1.05; downx=0.0;upx=40.0; wucha=0.0005;printf("***************计算结果如下***************\n");printf("请输入流量Q 坡度i 糙率n 边坡m 底宽b:\n");scanf("%lg%lg%lg%lg%lg",&q,&i,&n,&m,&b);printf("\n");printf("输入结果为:\n");printf("流量q=%6.2lf(m^3/s) 坡度i=%7.5lf 糙率n=%6.4lf 边坡m=%4.2lf 底宽:%4.2lf(m)\n",q,i,n,m,b);csn=pow((1.0-i*i),0.5);srm=pow((1+m*m),0.5); //计算临界水深//hk=erfenfa(&fhk,0.0,40.0,eps);//二分法求临界水深,函数子程序fhk 附在主程序之后//printf("\n临界水深hk=%9.6f",hk,"(m)\n");//计算正常水深h0//if(i<=0.0){h0=100.0;printf("坡度小于或等于0.0,没有正常水深\n");}else{h0=erfenfa(&fh0,0.0,40.0,0.0005); //二分法求正常水深。
水力学中常用的基本计算方法水力学中经常会遇到一些高次方程,微分方程的求解问题。
多年来,求解复杂高次方程的基本方法便是试算法,或查图表法,对于简单的微分方程尚可以用积分求解,而边界条件较为复杂的微分方程的求解就存在着较大的困难,但随着计算数学的发展及计算机的广泛使用,一门新的水力学分支《计算水力学》应运而生,但用计算机解决水力学问题,还需要了解一些一般的计算方法。
在水力学课程中常用的有以下几种,现分述于后。
一、高次方程式的求解方法:(一)二分法1、二分法的基本内容:在区间[X1,X2]上有一单调连续函数F(x)=0,则可绘出F(x)~X关系曲线。
如果在两端点处函数值异号即F(x1)·F(x2)<0,(见图(一)),则方程F(x)=0,在区间[X1,X2]之间有实根存在,其根的范围大致如下:取1°若F(x2)·F(x3)>0,则解ξ∈[X1,X3]2°若F(x2)·F(x3)<0,则解ξ∈[X3,X2]3°若F(x2)·F(x3)=0,则解ξ=X3对情况1°,可以令x2=x3,重复计算。
对情况2°,可以令x1=x3,重复计算。
当规定误差ε之后,只要|x1-x2|≤ε,则x1(或x2)就是方程F(x)=0的根。
显然,二分法的理论依据就是高等数学中的连续函数介值定理。
它的优点是思路清晰,计算简单,其收敛速度与公比为的等比级数相同;它的局限性在于只能求实根,而不能求重根。
2、二分法的程序框图(以求解明渠均匀流正常水深为例)最后必须说明,二分法要求x2值必须足够大,要保证F1·F2<0,否则计算得不到正确结果。
为了避免x2值不够大,产生计算错误,在程序中加入了判别条件F1·F2>0。
也可以给定xJ及步长△x,让计算机选择x2(x2=x1+△x)。
(二)牛顿法,1、牛顿法的基本内容:设有连续函数F(x)=0,则可以绘出F(x)~x关系曲线,选取初值xo,过点(xo·F(xo))作一切线,其斜率为辅F'(xo),切线与x 轴的交点是x1,则有:再过(x1,F(x1)作切线,如此类推得到牛顿法的一个迭代序列:xn+l=xn-F(xn)/F'(xn),令xn=xn+1,重复计算,直至满足给定的精度要求,即|xn+1-xn|≤,从而得到方程F(x)=0的根。
《水利水电工程设计计算程序集》适用于新规范新疆水利厅张校正《程序集》3.0版的发行通知中说,‘视窗版不但进一步订正了老版的缺陷,对绝大多数程序按照新规范的要求,进行了修改。
’现在有一种说法,说《程序集》是老规范,已经过时,不能再用,这是一种不负责任的说法。
下面具体说明情况,以正视听,做到正确理解规范,正确理解《程序集》,正确处理设计计算工作。
关于水工结构计算一、新老规范简况新的《水工混凝土结构设计规范》仅是水利行业推荐性标准,并且从来没有宣布旧的《水工钢筋混凝土结构设计规范》作废或者必须被替代,而是仍可继续执行。
所以《程序集》中的一些程序,依照旧的《水工钢筋混凝土结构设计规范》编制仍然是合法的。
二、新的《水工隧洞设计规范 SL279-2002》没有按照结构可靠度编制,而且重新选用旧的《水工钢筋混凝土结构设计规范 SDJ 20-78》,这就使得在水工隧洞设计中,使用新的《水工混凝土结构设计规范》反而成为不合法。
下面摘录有关条文,说明这个情况。
《水工隧洞设计规范 SL279-2002》有关条文摘录:6.2.7 ……抗震强度和稳定性验算应按SL203-1997《水工建筑物抗震设计规范》规定执行6.3.2 混凝土和钢筋混凝土衬砌,应根据需要提出混凝土的强度、抗渗、抗冻、抗磨和抗侵蚀等要求,其强度标号不应低于R150,…..6.3.3混凝土和钢筋混凝土衬砌的强度计算仍按SDJ20-78《水工钢筋混凝土结构设计规范(试行)》的规定执行。
《水工隧洞设计规范 SL279-2002》条文说明摘录:6.3.3 本规范未按结构可靠度进行编制,即混凝土和钢筋混凝土结构设计仍执行SDJ20-78,结构强度设计中涉及的控制标准均按该规范取值。
三、新旧抗震规范中,结构计算的拟静力法,所选参数(地震设防烈度、地震加速度、影响系数等)没有改变。
所以说,水工结构计算程序中的抗震部分是符合新规范的。
四、《水利水电工程设计计算程序集》的G-17A是按照新的《水工混凝土结构设计规范SL/T 191-96》编制,它可以应用到《程序集》的所有结构计算中。
降低护坦式消力池水力计算
Private Sub Command2_Click()
Text1.Text = ""
Text2.Text = ""
Text3.Text = ""
Text4.Text = ""
Text5.Text = ""
Text6.Text = ""
Text7.Text = ""
Text8.Text = ""
Text9.Text = ""
Text10.Text = ""
End Sub
Public Function F(ByVal x0, d1)
Dim q, H0, p2, ht, z
q = Val(Text1.Text)
H0 = Val(Text5.Text)
p2 = V al(Text2.Text)
z = Val(Text3.Text)
F = q / (z * Sqr(19.6 * (H0 + p2 + (q / (19.6 * (H0 + p2))) ^ 2 + d1 - x0))) End Function
Public Sub diedai(ByVal x0, d1, y)
Dim e1
e1 = V al(Text6.Text)
Do
x0 = F(x0, d1)
Loop Until Abs(F(x0, d1) - x0) <= e1
y = x0
End Sub
Private Function d2(ByVal y)
q = Val(Text1.Text)
m = y * (Sqr(1 + 8 * q ^ 2 / (9.8 * y ^ 3)) - 1) / 2
ht = Val(Text4.Text)
Δz = q ^ 2 / 19.6 * (1 / ((0.95 * ht) ^ 2) - 1 / ((1.05 * m) ^ 2))
d2 = 1.05 * m - ht - Δz
End Function
Private Sub Command1_Click()
Dim e2, d1
e2 = V al(Text7.Text)
d1 = V al(Text10.Text)
Do
x0 = 0
Call diedai(x0, d1, y)
Loop Until Abs(d1 - d2(y)) <= e2
d = d1
q = Val(Text1.Text)
l = 8.1 * y * ((q / y / (Sqr(9.8 * y))) - 1) ^ 0.93 Text8.Text = d
Text9.Text = l
End Sub
梯形断面明渠临界水深计算程序
Dim b, m, Q, e, α, R, h0 As Single
Private Sub Command1_Click()
b = Val(Text1.Text)
m = Val(Text2.Text)
Q = Val(Text3.Text)
e = Val(Text4.Text)
α= Val(Text5.Text)
h0 = V al(Text7.Text)
Call waiwai
End Sub
Private Sub waiwai()
Do
h1 = h0 - f1(h0) / f2(h0)
If Abs(h1 - h0) < e Then Exit Do
h0 = h1
Loop
Text6.Text = h1
End Sub
Public Function f1(ByVal h)
R = b + 2 * m * h
f1 = 1 - α* Q * Q * R / (9.8 * A * A * A)
End Function
Public Function f2(ByVal h)
A = (b + m * h) * h
X = b + 2 * m * h
f2 = -α* Q ^ 2 * (2 * m * A - 3 * R ^ 2) / (9.8 * A ^ 4) End Function
Private Sub Command2_Click()
Text1.Text = ""
Text2.Text = ""
Text3.Text = ""
Text4.Text = ""
Text5.Text = ""
Text6.Text = ""
Text7.Text = ""
End Sub
梯形断面明渠正常水深计算
Public Sub erfen(ByVal x, ByVal y, ByVal e, z) z = (x + y) / 2
Do Until Abs(F(z)) <= e
If F(x) * F(z) < 0 Then
y = z
Else
x = z
End If
z = (x + y) / 2
Loop
End Sub
Public Function F(ByVal h)
Dim q, b, m, n, i
q = Val(Text5.Text)
b = Val(Text1.Text)
m = Val(Text2.Text)
n = Val(Text3.Text)
i = Val(Text4.Text)
F = q - (b + m * h) * h * 1 / n * ((b + m * h) * h / (b + 2 * h * Sqr(1 + m ^ 2))) ^ (1 / 6) * Sqr((b + m * h) * h * i / (b + 2 * h * Sqr(1 + m ^ 2)))
End Function
Private Sub Command1_Click()
Text1.Text = ""
Text2.Text = ""
Text3.Text = ""
Text4.Text = ""
Text5.Text = ""
Text6.Text = ""
Text8.Text = ""
Text9.Text = ""
Text10.Text = ""
End Sub
Private Sub 计算_Click()
Dim x, y, h
x = Val(Text9.Text)
y = Val(Text8.Text)
Call erfen(x, y, Val(Text6.Text), h)
Text10.Text = h
End Sub。