计算水力学基础李占松编著郑州大学水利与环境学院内容简介本讲义是编者根据多年的教学实践,并参考《微机计算水力学》(杨景芳编著,大连理工大学出版社出版,1991年5月第1版)等类似教材,取其精华,编写而成的。
目的是使读者掌握通过计算机解水力学问题的方法,为解决更复杂的实际工程问题打下牢固的计算基础。
书中内容包括:数值计算基础,偏微分方程式的差分解法,有限单元法;用这些方法解有压管流、明渠流、闸孔出流、堰流、消能、地下水的渗流及平面势流等计算问题。
讲义中的用FORTRAN77算法语言编写的计算程序,几乎包括了全部水力学的主要计算问题。
另外,结合讲授对象的实际情况,也提供了用VB算法语言编写的计算程序。
VB程序编程人员的话为了更好地促进水利水电工程建筑专业的同学学好《微机计算水力学》这门学科,编程员借暑假休息的时间,利用我们专业目前所学的VB中的算法语言部分对水力学常见的计算题型编制成常用程序。
希望大家能借此资料更好地学习《微机计算水力学》这门课程。
本程序着重程序的可读性,不苛求程序的过分技巧。
对水力学中常用的计算题型,用我们现在所学的VB语言编制而成。
由于编程员能力有限,程序中缺点和错误在所难免,望老师和同学及时给予批评指正。
VB程序编程人员:黄渝桂曹命凯前言----计算水力学的形成与发展计算水力学作为一门新学科,形成于20世纪60年代中期。
水力学问题中有比较复杂的紊流、分离、气穴、水击等流动现象,并存在各种界面形式,如自由水面、分层流、交界面等。
由各种流动现象而建立的数学模型(由微分方程表示的定解问题),例如连续方程、动量方程等组成的控制微分方程组,多具有非线性和非恒定性,只有少数特定条件下的问题,可根据求解问题的特性对方程和边界条件作相应简化,而得到其解析解。
因此长期以来,水力学的发展只得主要藉助于物理模型试验。
随着电子计算机和现代计算技术的发展,数值计算已逐渐成为一个重要的研究手段,发展至今,已广泛应用与水利、航运、海洋、流体机械与流体工程等各种技术科学领域。
计算水力学的特点是适应性强、应用面广。
首先流动问题的控制方程一般是非线性的,自变量多,计算域的几何形状任意,边界条件复杂,对这些无法求得解析解的问题,用数值解则能很好的满足工程需要;其次可利用计算机进行各种数值试验,例如,可选择不同的流动参数进行试验,可进行物理方程中各项的有效性和敏感性试验,以便进行各种近似处理等。
它不受物理模型试验模型律的限制,比较省时省钱,有较多的灵活性。
但数值计算一是依赖于基本方程的可靠性,且最终结果不能提供任何形式的解析表达式,只是有限个离散点上的数值解,并有一定的计算误差;二是它不像物理模型试验一开始就能给出流动现象并定性地描述,却往往需要由原体观测或物理实验提供某些流动参数,并对建立的数学模型验证;三是程序的编制及资料的收集、整理与正确利用,在很大程度上依赖于经验与技巧。
所以计算水力学有自己的原理方法和特点,数值计算与理论分析观测和试验相互联系、促进又不能相互代替,已成为目前解决复杂水流问题的主要手段之一,尤其是在研究流动过程物理机制时,更需要三者有机结合而互相取长补短。
近三、四十年来,计算水力学有很大的发展,替代了经典水力学中的一些近似计算法和图解法。
例如水面曲线计算;管网和渠系的过水或输沙(排污)能力的计算;有水轮机负荷改变时水力震荡系统的稳定性计算研究;流体机械过流部件的流道计算以及优化设计,还有洪水波、河口潮流计算,以及各种流动条件下,不同排放形式的污染物混合计算等。
上世纪70年代中期已从针对个别工程问题建立的单一数学模型,开始建立对整个流域洪泛区已建或规划中的水利水电工程进行系统模拟的系统模型。
理论课题的研究中,对扩散问题、传热问题、边界层问题、漩涡运动、紊流等问题的研究也有了很大的发展,并已开始计算非恒定的三维紊流问题。
由于离散的基本原理不同,计算水力学可分为两个分支:一是有限差分法,在此基础上发展的有有限分析法;二是有限单元法,在此基础上提出了边界元法和混合元法,另外还有迎风有限元法等。
目录第一章数值计算基础第一节非线性方程式的解法1.迭代法2.牛顿-拉普森切线法3.二等分法第二节线性方程组的解法1.高斯-塞得尔迭代法2.高斯列主元消去法第三节插值第四节拟合第二章偏微分方程式的差分数值解法第一节分类、数值解法和差分格式1.分类2.数值解法3.差分格式第二节椭圆型偏微分方程的数值解法第三节抛物型偏微分方程的数值解法第三章有压管流第一节管网的水力计算----哈迪—克劳斯法第二节管网的水力计算----有限单元法第三节简单管道的水击计算—特征线法第四节短管的水力计算第四章明渠流第一节明渠非恒定流的水力计算—特征线法第二节棱柱形明渠恒定非均匀渐变流水面曲线计算第三节非棱柱形明渠恒定非均匀渐变流水面曲线计算第四节天然河道水面曲线计算第五章堰流和消能第一节宽顶堰流水力计算第二节消力池水力计算第一章 数值计算基础第1节 非线性方程式的解法1. 简单迭代法 一、基本原理图1.1 简单迭代法原理图如图1.2所示,由)(F 0)(x x x f =⇒=,选取初值0x ,带入该式得1x ,一直进行下去,则有)(F )(F )(F 112010n n x x x x x x x =⇒⇒=⇒=⇒+收敛判别式:ε<-+n n x x 1(ε为高阶小量,收敛判别常数);收敛条件:1)(F <'x 。
二、计算步骤(1)将()0=x f 变为()x F x =; (2)选取初值0x ;(3)迭代计算:()01x F x =; (4)比较1x ,0x : 若ε<-01x x ,迭代结束,1x x =;若ε>-01x x ,10x x =,返回(3)继续迭代计算。
例1-1 已知梯形断面底宽8b m =,边坡系数 1.5m =,025.0=n ,0009.0=i ,15=Q m 3/s ,试编写用迭代法求此渠道中正常水深的程序(计算允许误差0.005ε=)。
解:[]5533200322233()1(21)b mh h i A iQ AC Ri AR i nn n b h m χ+====++20.40.6000(21)()b h m nQ h b mh i++=+ 若已知正常水深求底宽,则底宽的计算表达式为20.40.6000(21)()b h m nQ b mh h i++=-,其迭代过程,与正常水深的迭代过程类似。
程序1.1:简单迭代法求解正常水深表1.1 变量说明变量名 意义Q ,b 渠道流量,底宽 m ,n 渠道边坡系数,粗糙系数 i 渠道底坡 h 水深Private Sub Command1_Click() Dim Q!, b!, h!, h0!, m!, i!, n!, eps!Q = V al(InputBox("请输入渠道流量Q=")) b = V al(InputBox("请输入渠道底宽b=")) n = V al(InputBox("请输入渠道粗糙系数n=")) m = V al(InputBox("请输入渠道边坡系数m=")) i = V al(InputBox("请输入渠道底坡i=")) eps = V al(InputBox("请输入精度e=")) Doh = (n * Q / i ^ 0.5) ^ 0.6 * (b + 2 * h0 * (1 + m ^ 2) ^ 0.5) ^ 0.4 / (b + m * h0) If Abs(h - h0) < eps Then Exit Do h0 = h LoopPrint "该渠道的正常水深为:"; Format(h, "0.000"); "米" End Sub依次输入下列数据:Q =15,b = 8,n = 0.025,m =1.5,i = 0.0009,eps =0.005,输出结果为:“该渠道的正常水深为:1.265米”。
2.牛顿-拉普森(Newton-Raphson )切线法计算溢流坝下游收缩断面水深 一、基本原理图1.2 切线法原理图已知方程()0f x =,求解该方程的根。
1000)()(x x x f x f -=',)()(0001x f x f x x '-=)()(1112x f x f x x '-=,……,收敛判别式:1n n x x ε+-<二、计算步骤(1)由函数()x f 求其导数()x f '; (2)选取初值0x ; (3)迭代计算:()()0001x f x f x x '-=; (4)比较01,x x :若ε<-01x x ,迭代结束,1x x =;若ε>-01x x ,10x x =,返回(3)继续迭代计算。
例1-2.已知某溢流坝上游断面对下游河底的比能020E m =,矩形断面河道上210/q m s =,ϕ为流速系数,试用牛顿-拉普森方法编写计算c h 的程序(0.005)ε=。
c h 为收缩断面的水深。
解:由22202c c h g q h E ϕ+= ⇒ 23220222q h g h E g c c +=ϕϕ整理得:022220232=+-q h E g h g c c ϕϕ (*) 令22ϕg A =,022E g B ϕ-=,2q C = (**)()22023222q h E g h g h f c c c +-=ϕϕ (***)将(**)代入(*)式,以及对(***)式求导可得()023=++=C Bh Ah h f c c c ,()c c c Bh Ah h f 232+='由牛顿-拉普森切线法,可得收缩断面水深的迭代公式为()()cncn cn cn cn cn cn cn cn Bh Ah CBh Ah h h f h f h h 232231+++-='-=+ 收敛判别式:ε<-+cn cn h h 1。
对于本题,也可以利用简单迭代法求解收缩断面的水深,其迭代公式为)( )( 1 n n nn x f x f x x ' - = +()cn cn h E g qh -=+012ϕ程序1.2:牛顿-拉普森切线法求解收缩断面水深表1.2 变量说明变量名 意义Eo 坝上游断面的总比能 q ,x 单宽流量,坝面流速系数A 22ϕg A =,常数B 022E g B ϕ-=,常数C2q C =,常数linjieH 引入的函数 Hc下游收缩断面水深Public Function linjieH(x!, q!, hc!) '建立函数 Dim h1!, A!, B!, C!, fhc!, fh1c! g = 9.8Eo = Val(InputBox("请输入断面比能Eo")) X = Val(InputBox("请输入流速系数x")) q = Val(InputBox("请输入断面流量q")) e = Val(InputBox("请输入计算精度e")) A = 2 * g * x ^ 2B = 2 * g * x ^ 2 * EoC = q * q hc = 1!Do ‘迭代过程fhc = A * hc ^ 3 - B * hc ^ 2 + C fh1c = 3 * A * hc ^ 2 - 2 * B * hc hc2 = hc1 - fhc / fh1cIf Abs(hc2 - hc1) < e Then Exit Do hc = hc2 LoopEnd FunctionPrivate Sub Command1_Click()Call linjieH(x!, q!, hc!) '调用函数 Print Format(hc, "0.000") End Sub 3.二等分法求方程()0f x =的根。