当前位置:文档之家› 水文预报课设报告

水文预报课设报告

基本任务任务一:根据已给数据资料及参数(本报告采用89-90年的历史数据),将流域作为整体(1)进行日模型产流量计算;(2)比较计算年径流与实测年径流;(3)通过误差分析,优选蒸发折算系数Kc。

任务二:根据已给的设计暴雨资料(宝口流域23日至26日暴雨)和任务一率定的Kc,将流域作为整体进行(1)次洪产流量,划分水源.直接径流汇流,地下径流汇流计算;(2)绘出直接径流过程,地下径流过程,总的流量过程。

基本资料白盆珠水库位于广东省东江一级支流西枝江的上游,坝址以上集雨面积856 km2。

流域地处粤东沿海的西部,海洋性气候显著,气候温和,雨量丰沛。

暴雨成因主要是锋面雨和台风雨,常受热带风暴影响。

降雨年际间变化大,年内分配不均,多年平均降雨量为1800mm,实测年最大降雨量为3417mm,汛期4—9月降雨量占年降雨量的81%左右:径流系数0.5一0.7。

流域内地势平缓,土壤主要有黄壤和砂壤,具有明显的腐殖层,淀积层和母质土等层次结构,透水性好。

台地、丘陵多生长松、杉、樟等高大乔木;平原则以种植农作物和经济作物为主,植被良好。

流域上游有宝口水文站,流域面积553km2,占白盆珠水库坝址以上集雨面积的64.6%。

白盆珠水库有10年逐日入库流量资料、逐日蒸发资料和时段入库流量资料:流域内有7个雨量站,其中宝口以上有4个。

雨量站分布较均匀.有10年逐日降水资料和时段降水资料;宝口水文站具有10年以上水位、流量资料;流域属山区性小流域且受到地形、地貌等下垫面条件影响,洪水陡涨缓落,汇流时间一般2—3h,有时更短;一次洪水总历时2~5d。

计算公式(1)蒸散发计算根据流域特点,蒸散发计算采用的是三层蒸散发计算模式。

三层蒸发模式的具体计算如下:1)当WU+P>=E P,EU=E p,EL=0,ED=0;2)当WU+P<E P, WL>=C.WLM,EU=WU+P,EL=(E P-EU)*WL/WLM,ED=0;3)当WU+P<E P, C.(E P-EU)<=WL<C.WLM,EU=WU+P,EL=C*(E P-EU),ED=0;4)当WU+P<E P, WL<C*(E P-EU),EU=WU+P,EL=WL,ED=C*(E P-EU)-EL.(2)产流量计算:根据流域特点,产流量计算系根据蓄满产流理论得出的。

蓄满产流,即任一地点上,土壤含水量达田间持水量前,降雨量全部补充土壤含水量,不产流;当土壤蓄满后,其后续降雨量全部产生径流。

a=WMM(1-(1-W0/WM)^(1/(b+1))土壤三层含水量WU WL WD 计算1.PE>0,则产流,即R>0;此时土壤中上中下层含水量会发生变化,如果R ΔW产流,则PE-R后的值就给三层土壤来分,上层的土壤先补充水,如果上层WU>WUM,中层开始补充水,如果WL>WLM,下层开始补充水,如果三层都达到最大值,则土壤水分保持最大值不变。

2.否则不产流,R=0。

即P-E<=0 此时土壤中水分含量随着蒸发减少,上层土壤先开始蒸发,然后中层,最后下层。

产流时,当PE+a<WMM:R=PE+W-WM+WM*(1-(PE+a)/WMM)^(b+1)当PE+a<WMM:R=PE+W-WM(3)水源划分:流域坡地上的降雨产流量因产流过程的条件和运动路径不同,受流域的调蓄作用不同,各径流成分在流量过程线上的反应是不一样的。

各水源分量如下:1)当PE〈=FC时:RD=0.0RG=R2)当PE〉FC时:RG=FC*R/PERD=R-RG(4)汇流计算:根据流域净雨和流域径流单位线,采用卷积的差分形式算出流域出口的流量过程。

地上产生的径流用单位线推流,地下部分用线性水库。

计算公式:QS(I)=RS(I)*UQG(I)=CG*RG(I)*U+(1-CG)*QG(I-1)Q(I)=QS(I)+QG(I)上式中RS即为地表径流Rd.基本数据任务一:1.计算流域为白盆珠水库上游的宝口流域,流域面积553 km2。

2.流域内有四个雨量站:禾多布、马山、高潭、宝口,权中重分别为0.55、0.14、0.33、0.20。

3. 资料文件名:87-92data csv,数据格式为:T(i) Q(i) E(i) P1(i) P2(i) P3(i)P4(i)4.计算参数:任务二:1.计算参数:WM=140,UM=20,LM=60,DM=60IM=0.002,FC=11.0W=110,WU=10,WL=40,WD=60b=0.3,C=0.16 Cg=0.978 Qg=55.3 2.计算基本数据如下表:计算结果任务一:kc优选计算表1991年KC 优选1992年KC 优选1991,1992两年KC 优选由于个人认为KC优选应该以单独一年为单位,因此本程序只是对单独一年的KC 优选做了程序,如果以两年为单位使用范围会很小。

因此,两年共同的KC优选,在本程序中的解决方法是,将单独一年KC从0.9到1.3间隔0.01的值全部带入计算并得出所有R与实测R计算相对误差的值输出并可以导入EXCEL,因此可以把两年所有KC和相对误差导入EXCEL。

通过绘制图表来反映共同KC时,相对误差之间的关系。

以选出尽可能好的KC值。

两年KC优选的图表:可以看出在上图中两年在共同小于1%时有个交点,即KC=1.07 此时对于两年径流的计算,为共同最优KC。

任务二:次洪计算结果此次选出的KC=1.07 为下部汇流计算的基础。

最后绘制时间与降雨,地表流量,地下流量,总流量的次洪流量过程线:计算程序及说明程序代码:(1)全自动单年KC优选结果自动导入EXCEL:Dim i As Integer, P1(366) As Single, Eo(366) As Single, P2(366) As Single, P3(366) As Single, P4(366) As SingleDim Ep(366) As Single, ro As Single, Q(366) As SinglePrivate Sub Command1_Click()Dim ExcelApp As Excel.ApplicationPrint MsgBox("资料导入过称有点慢,请耐心等待30秒左右,此过程根据个人RP不同快慢不同o(∩_∩)o ...", 64, "温馨提示")Set ExcelApp = CreateObject("excel.application")If Combo1.Text = "1991" ThenExcelApp.Workbooks.Open (App.Path & "\1991.csv")Else: ExcelApp.Workbooks.Open (App.Path & "\1992.csv")End IfWith MSFlexGrid1.Rows = 367.Cols = 20.TextMatrix(0, 0) = "T".TextMatrix(0, 1) = "Q".TextMatrix(0, 2) = "Eo".TextMatrix(0, 3) = "P1".TextMatrix(0, 4) = "P2".TextMatrix(0, 5) = "P3".TextMatrix(0, 6) = "P4".TextMatrix(0, 7) = "P".TextMatrix(0, 8) = "WU".TextMatrix(0, 9) = "WL".TextMatrix(0, 10) = "WD".TextMatrix(0, 11) = "W".TextMatrix(0, 12) = "EU".TextMatrix(0, 13) = "EL".TextMatrix(0, 14) = "ED".TextMatrix(0, 15) = "E".TextMatrix(0, 16) = "PE".TextMatrix(0, 17) = "R"i = 0v = 0For R = 1 To .Rows - 1For c = 1 To .Cols.TextMatrix(R, c - 1) = ExcelApp.Sheets(1).Cells(R, c)Nexti = i + 1Q(i) = Val(.TextMatrix(R, 1))Eo(i) = Val(.TextMatrix(R, 2))P1(i) = Val(.TextMatrix(R, 3))P2(i) = Val(.TextMatrix(R, 4))P3(i) = Val(.TextMatrix(R, 5))P4(i) = Val(.TextMatrix(R, 6))v = v + Q(i)Nextro = (v * 3.6 * 24) / 553End WithExcelApp.QuitEnd SubPrivate Sub Command2_Click() ‘开始各参数计算Dim P(366) As Single, Wum As Integer, Wlm As Integer, Wdm As Integer, b As Single, c As Single, kc As Single, fc As SingleDim Eu(366) As Single, El(366) As Single, Ed(366) As Single, E(366) As Single, PE(366) As Single, Wu(367) As Single, Wl(367) As SingleDim Wd(367) As Single, W(367) As Single, Wm As Single, Wmm As Single, a(366) As Double,Dim sum(41) As Single, j As Integer, z As IntegerPrint MsgBox("此次计算是对你选择的年份进行的产流以及所有KC进行径流误差试算,结果将在下面的图表中显示", 64, "温馨提示")Wum = Val(Text1.Text)Wlm = Val(Text2.Text)Wdm = Val(Text3.Text)b = Val(Text4.Text)c = Val(Text5.Text)fc = Val(Text7.Text)Wu(1) = 10Wl(1) = 40Wd(1) = 60Wm = 140Wmm = Wm * (1 + b)sum(1) = 0z = 1j = 1For kc = 0.9 To 1.3 Step 0.01For i = 1 To MSFlexGrid1.Rows - 1Ep(i) = kc * Eo(i)P(i) = 0.33 * P1(i) + 0.14 * P2(i) + 0.33 * P3(i) + 0.2 * P4(i)If Wu(i) + P(i) >= Ep(i) Then ‘三层蒸散发判别计算Eu(i) = Ep(i)ElseEu(i) = Wu(i) + P(i)End IfIf Wu(i) + P(i) >= Ep(i) ThenEl(i) = 0 And Ed(i) = 0ElseIf Wu(i) + P(i) < Ep(i) And Wl(i) >= Wlm * c ThenEl(i) = (Ep(i) - Eu(i)) * Wl(i) / WlmEd(i) = 0ElseIf Wu(i) + P(i) < Ep(i) And Wl(i) >= (Ep(i) - Eu(i)) * c And Wl(i) < Wlm * c Then El(i) = (Ep(i) - Eu(i)) * cEd(i) = 0ElseIf Wu(i) + P(i) < Ep(i) And Wl(i) < (Ep(i) - Eu(i)) * c ThenEl(i) = Wl(i)Ed(i) = (Ep(i) - Eu(i)) * c - El(i)End IfE(i) = Eu(i) + El(i) + Ed(i)PE(i) = P(i) - E(i)W(i) = Wu(i) + Wd(i) + Wl(i)a(i) = Wmm * (1 - (1 - W(i) / Wm) ^ (1 / (b + 1)))If PE(i) <= 0 ThenR(i) = 0ElseIf PE(i) > 0 And a(i) + PE(i) <= Wmm ThenR(i) = PE(i) + W(i) - Wm + Wm * (1 - (PE(i) + a(i)) / Wmm) ^ (b + 1)R(i) = PE(i) + W(i) - WmEnd IfIf Wu(i) + PE(i) - R(i) <= 0 And Wl(i) < 0 Then ‘三层土壤含水量判别Wu(i + 1) = 0Wl(i + 1) = 0Wd(i + 1) = Wd(i) - Ed(i)ElseIf Wu(i) + PE(i) - R(i) <= 0 And Wl(i) > 0 And Wl(i) <= Wlm ThenWu(i + 1) = 0Wl(i + 1) = Wl(i) - El(i)Wd(i + 1) = Wd(i)ElseIf Wu(i) + PE(i) - R(i) > 0 And Wu(i) + PE(i) - R(i) <= Wum ThenWu(i + 1) = Wu(i) + PE(i) - R(i)Wl(i + 1) = Wl(i)Wd(i + 1) = Wd(i)ElseIf Wu(i) + PE(i) - R(i) >= Wum And Wl(i) + Wu(i) - Wum + PE(i) - R(i) < Wlm Then Wu(i + 1) = WumWl(i + 1) = PE(i) + Wu(i) - Wum - R(i) + Wl(i)Wd(i + 1) = Wd(i)ElseIf Wu(i) + PE(i) - R(i) >= Wum And Wu(i) - Wum + PE(i) - R(i) + Wl(i) >= Wlm And Wu(i) - Wum + Wl(i) - Wlm + PE(i) - R(i) < Wdm ThenWu(i + 1) = WumWl(i + 1) = WlmWd(i + 1) = Wd(i) + Wu(i) - Wum + Wl(i) - Wlm + PE(i) - R(i)ElseIf Wu(i) = Wum And Wl(i) + PE(i) - Wlm - R(i) >= Wlm And Wd(i) < Wdm ThenWu(i + 1) = WumWl(i + 1) = WlmWd(i + 1) = PE(i) + Wl(i) - Wlm - R(i) + Wd(i)ElseWu(i + 1) = WumWl(i + 1) = WlmWd(i + 1) = WdmEnd IfEu(i) = Format(Eu(i), "0.0")El(i) = Format(El(i), "0.0")Ed(i) = Format(Ed(i), "0.0")E(i) = Format(E(i), "0.0")PE(i) = Format(PE(i), "0.0")Wu(i) = Format(Wu(i), "0.0")Wl(i) = Format(Wl(i), "0.0")Wd(i) = Format(Wd(i), "0.0")W(i) = Format(W(i), "0.0")R(i) = Format(R(i), "0.0")MSFlexGrid1.TextMatrix(i, 7) = P(i)MSFlexGrid1.TextMatrix(i, 8) = Wu(i)MSFlexGrid1.TextMatrix(i, 10) = Wd(i)MSFlexGrid1.TextMatrix(i, 11) = W(i)MSFlexGrid1.TextMatrix(i, 12) = Eu(i)MSFlexGrid1.TextMatrix(i, 13) = El(i)MSFlexGrid1.TextMatrix(i, 14) = Ed(i)MSFlexGrid1.TextMatrix(i, 15) = E(i)MSFlexGrid1.TextMatrix(i, 16) = PE(i)MSFlexGrid1.TextMatrix(i, 17) = R(i)sum(j) = sum(j) + R(i)Next iMSFlexGrid2.TextMatrix(0, 0) = "kc"MSFlexGrid2.TextMatrix(0, 1) = "实测Ro"MSFlexGrid2.TextMatrix(0, 2) = "计算R"MSFlexGrid2.TextMatrix(0, 3) = "绝对误差"MSFlexGrid2.TextMatrix(0, 4) = "相对误差%"MSFlexGrid2.TextMatrix(z, 0) = Val(kc)MSFlexGrid2.TextMatrix(z, 1) = Val(ro)MSFlexGrid2.TextMatrix(z, 2) = Val(sum(j))MSFlexGrid2.TextMatrix(z, 3) = Val(sum(j) - ro)MSFlexGrid2.TextMatrix(z, 4) = Abs(Val(((sum(j) - ro) / ro) * 100))j = j + 1z = z + 1Next kcEnd SubPrivate Sub Command3_Click()Dim z As Integer, c As Double, T As Double, s As DoubleDim a As Stringa = MsgBox("此按钮进行的是单独一年的最优KC,如果要进行多年KC优选,请点击“导入EXCEL”将多年的误差在EXCEL进行绘图分析,优选!", 0 + 64, "温馨提示")If a = 1 ThenT = 5For z = 1 To 40If MSFlexGrid2.TextMatrix(z, 4) < T ThenT = MSFlexGrid2.TextMatrix(z, 4)s = zc = 0.89 + 0.01 * sEnd IfNext zText9.Text = Str(T)Text10.Text = Str(c)Private Sub Command4_Click()Dim a As StringDim xlApp As Excel.ApplicationDim xlBook As Excel.WorkbookDim xlsheet As Excel.Worksheeta = MsgBox("如果你要继续,请认真阅读下面内容,如果你点击“确定”会把你选择年份的所有KC和误差结果导入EXCEL", 1 + 48, "提示信息")If a = 1 ThenSet xlApp = CreateObject("Excel.Application")xlApp.Visible = TrueSet xlBook = xlApp.Workbooks.AddSet xlsheet = xlBook.Worksheets(1)For i = 1 To 42For j = 1 To 5xlsheet.Cells(i, j) = MSFlexGrid2.TextMatrix(i - 1, j - 1)NextNextElseExit SubEnd IfEnd SubPrivate Sub Command5_Click()Dim a As Stringa = MsgBox("感谢你的使用,此程序所有解释权归水文二班殷钊所有,谢谢!", 1 + 64, "温馨提示")If a = 1 ThenUnload MeElseExit SubEnd IfEnd SubPrivate Sub Command6_Click()任务一.Hide任务二.ShowEnd SubPrivate Sub Form_Activate()Dim a As Stringa = MsgBox("如果你使用的电脑EXCEL版本不是2010可能会导致无法运行下列代码,请运行exe 程序!本程序自动试算所有可能KC并自动优选出最优值。

相关主题