水力学上机实验程序
- 格式:doc
- 大小:43.50 KB
- 文档页数:6
工程1Public Sub erfen(ByVal x, ByVal y, ByVal e, z)z = (x + y) / 2Do Until Abs(F(z)) <= eIf F(x) * F(z) < 0 Theny = zElsex = zEnd Ifz = (x + y) / 2LoopEnd SubPublic Function F(ByVal h)Dim q, b, m, n, iq = Val(qtext.Text)b = Val(btext.Text)m = Val(mtext.Text)n = Val(ntext.Text)i = Val(itext.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 / (b + 2 * h * Sqr(1 + m ^ 2)) * i)End FunctionPrivate Sub Command1_Click()Dim x, y, hx = Val(xtext.Text)y = Val(ytext.Text)Call erfen(x, y, Val(etext.Text), h)MsgBox "该渠道的正常水深为:" & h & "米", vbOKOnly, "计算结果"End Sub工程2Dim q As Single, m As Single, b As Single, e As SinglePrivate Sub Command1_Click()Dim x0 As SingleDoq = Val(InputBox("请输入流量Q(≠0) "))Loop Until q <> 0Dom = Val(InputBox("请输入边坡系数m(≠0) "))Loop Until m <> 0Dob = Val(InputBox("请输入底宽b(≠0) "))Loop Until b <> 0Doe = Val(InputBox("请输入允许误差e(≠0) "))Loop Until e <> 0Label1 = Label1 & "q=" & q & Chr(10) & "m=" & m & Chr(10) & "b=" & b & Chr(10) & "e=" & eDox0 = V al(InputBox("请输入迭代初值(hk1)(>0) "))Loop Until x0 > 0y0 = hanshu(x0)Doxielv = daoshu(x0)deltx = y0 / xielvx0 = x0 - deltxy0 = hanshu(x0)Loop Until Abs(y0) < e And Abs(deltx) < eLabel1 = Label1 & vbCrLf & "临界水深hk=" & x0End Sub棱柱体明渠水面曲面计算Private Function hanshu(x As Single) As Singlehanshu = 1 - q ^ 2 * (b + 2 * m * x) / (9.8 * (b + m * x) ^ 3 * x ^ 3)End FunctionPrivate Function daoshu(x As Single) As Singledaoshu = -q ^ 2 / (9.8 * (b + m * x) ^ 3 * x ^ 3) - 2 * m + 3 * (b + 2 * m * x) ^ 2 / ((b + m * x) * x) End Function消力池Dim q As Single, H0 As Single, P2 As Single, ht As Single, hc As Single, ht As Single, F As Single, E0 As Single, h2 As Single, h1 As Single, hc1 As Single, hc As Single, d As Single, d1 As Single, d2 As Single, F As SinglePrivate Sub Command1_Click()Doq = Val(InputBox("请输入q(≠0) "))Loop Until q <> 0DoH0 = Val(InputBox("请输入H0(≠0) "))Loop Until H0 <> 0DoP2 = Val(InputBox("请输入P2(≠0) "))Loop Until P2 <> 0Doht = Val(InputBox("请输入ht(≠0) "))Loop Until ht <> 0DoF = Val(InputBox("请输入f(≠0) "))Loop Until F <> 0Label1 = Label1 & "q=" & q & Chr(10) & "H0=" & H0 & Chr(10) & "P2=" & P2 & Chr(10) & "ht=" & ht & Chr(10) & "f=" & FDoE0 = Val(InputBox("请输入E0(>0) "))Loop Until E0 > 0Doh2 = q / (F * Sqr(2 * 9.8 * (E0 + d - h1)))If Abs(h1 - h2) < 0.001 Then Exit Dohc1 = h2LoopLabel1 = Label1 & "得到hc=" & h1hc1 = jisuanhc1(hc)d2 = jisuand(hc1)d1 = 0Dod = (d1 + d2) / 2If Abs(d1 - d2) < 0.001 Then Exit Dod1 = d2LoopF = jisuanFrc()l = jisuanl(F)Label1 = Label1 & Chr(10) & "L=" & lEnd SubPrivate Function jisuanhc1(x As Single) As Singlejisuanhc1 = x * (Sqr(1 + 8 * q ^ 2 / (9.8 * x ^ 3)) - 1) / 2End FunctionPrivate Function jisuand(x As Single) As Singlejisuand = 1.05 * x - ht - q ^ 2 * (1 / (0.95 * ht) ^ 2 - 1 / (1.05 * x) ^ 2) / 19.6End FunctionPrivate Function jisuanl(x As Single) As Singlejisuanl = 8.1 * hc1 * (x - 1) ^ 0.93End FunctionPrivate Function jisuanFrc(x As Single) As SinglejisuanFrc =End FunctionPrivate Sub Form_Load()End Sub闸孔出流Dim q As Single, u As Single, b As Single, e As Single, q1 As Single, q2 As Single, n As Single, s As Single, t As Single, y As Single, h As Single, hc As Single, H0 As Single, a As Single, ht As SinglePrivate Sub Command1_Click()Doe = Val(InputBox("请输入闸孔开度e(≠0) "))Loop Until e <> 0Dou = Val(InputBox("请输入流量系数μ(≠0) "))Loop Until u <> 0Dob = Val(InputBox("请输入每孔净宽b'(≠0) "))Loop Until b <> 0Dot = Val(InputBox("请输入垂直收缩系数ε2(≠0) "))Loop Until t <> 0Don = Val(InputBox("请输入粗糙系数n(≠0) "))Loop Until n <> 0Doh = Val(InputBox("请输入闸前水头H(≠0) "))Loop Until h <> 0Doa = Val(InputBox("请输入闸前河道断面面积A0(≠0) "))Loop Until a <> 0Doeps = Val(InputBox("请输入允许误差eps(≠0) "))Loop Until eps <> 0Label1 = Label1 & "流量系数μ=" & u & Chr(10) & "垂直收缩系数ε2=" & t & Chr(10) & "每孔净宽b'=" & b & Chr(10) & "闸孔开度e=" & e & Chr(10) & "粗糙系数n=" & n & Chr(10) & "闸前水头H=" & h & Chr(10) & "闸前河道断面面积A0=" & a & Chr(10) & "允许误差eps=" & epsDoq1 = V al(InputBox("请输入Q1值(>0) "))Loop Until q1 > 0Do Until Abs(q1 - q2) < espH0 = jisuanH0(q1)q = jisuanq(H0)hc = jisuanhc(q)Doht = Val(InputBox("请输入流量Q1对应Z值(>0) "))Loop Until ht > 0y = jisuany(ht - 35)Label1 = Label1 & Chr(10) & "输入Q1值=" & q1 & Chr(10) & "查得对应Z=" & ht & Chr(10) & "潜流比y=" & yDos = Val(InputBox("请输入潜流比y对应δs值(>0) "))Loop Until s > 0q2 = jisuanq2(s)Label1 = Label1 & Chr(10) & "求得q2值=" & q2If Abs(q1 - q2) < esp Thenq0 = q2Elseq1 = q2End Ifq0 = q2LoopLabel1 = Label1 & "查得对应δs值=" & s & Chr(10) & "该闸孔过流量Q=" & q2End SubPrivate Function jisuanH0(x As Single) As SinglejisuanH0 = h + (x / a) ^ 2 / (2 * 9.8)End FunctionPrivate Function jisuanq(x As Single) As Singlejisuanq = u * e * Sqr(2 * 9.8 * x)End FunctionPrivate Function jisuanhc(x As Single) As Singlejisuanhc = e * t * (Sqr(1 + 8 * x ^ 2 / (9.8 * e ^ 3 * t ^ 3)) - 1) / 2 End FunctionPrivate Function jisuany(x As Single) As Singlejisuany = (x - hc) / (h - hc)End FunctionPrivate Function jisuanq2(x As Single) As Singlejisuanq2 = u * x * n * b * e * Sqr(2 * 9.8 * h)End Function。