賴厚桂(長江水利委員會 水文局,湖北 武漢 430010)
自編公式法在水文資料整編推流中的應用
賴厚桂(長江水利委員會 水文局,湖北 武漢 430010)
由于水工建筑物設施運行時特征參數變化,在推求流量的過程中,不同流態需由不同公式推流。以往的軟件編制中,通常是一個公式編制一個計算過程,難以做到通用。為了提高整編軟件的通用性,通過對公式中各要素進行細致分析,編制了由用戶自編公式推求流量的方法。闡述了采用自編公式法推求流量的設計思路及實現方法。實際應用表明,該方法可顯著減輕整編人員的工作量,降低計算數據的錯誤率,是水文資料整編系統推流的重要工具。
流量;流量整編;應用軟件開發
在水文部門利用水工建筑物推求流量時,除水文資料整編規范對不同閘壩類型提供了既定的規范公式外[1],還有大量的推求流量公式是由設計部門或水文部門率定的。推求流量公式中相關要素較多,不同流態需由不同的公式來推求流量。以往的整編系統推求流量由軟件編制人員定制,一般是一個公式編制一個過程,由用戶選取相應公式及相關因素。然而,用戶不易理解編制過程,且數據加工繁瑣。用戶需根據各要素值預先計算某一時刻的流態,還需將參加計算流量的各個要素(如:上下游水位、開高、開寬等)加工為時間相同、個數相等的數據,才能錄入數據進入程序計算。要推求某個測站的流量,需進行大量的前期數據加工工作,這給整編人員帶來很大困難和負擔。采用自編公式法,解決了需要不同公式計算流量的問題,并能自動判斷流態,選取符合條件的公式進行計算。這一功能的開發,使用戶可以根據規范的堰閘流量公式和測站基于資料率定的流量公式,來編寫公式并計算流量,提高了整編軟件的通用性。
自編公式法的設計思路是:用戶按一定規則編寫公式,并根據公式要素輸入數據,在某一時刻,程序根據編寫的公式和公式使用條件,自動選取符合條件的公式計算流量,循環計算出全年的流量,然后進行下一步水文要素的整編計算和統計。計算流程見圖1。

圖1 自編公式法計算流量流程
1.1 公式的編寫規則與要素解釋
自編公式法按照一定的規則編寫公式,一般規則是:以1個英文字母代表1個水文要素,根據流量計算公式的各個水文要素的相互關系,通過加、減、乘、除、乘方等運算符號組成公式,與在Excel表格里編寫公式類似;“解釋公式要素”里,在字母后面解釋字母所代表要素的含義,便于用戶在輸入各個要素數據時識別。
1.2 公式的使用條件
在水工建筑物中隨著閘門開高、上下游水位的變化,某一時刻水流流態也會發生改變,流量計算就會用到多個計算公式。因此,需要設定公式的使用條件,以某個要素或要素的算術表達式,通過算術運算符、關系運算符和邏輯運算符組成判斷條件,自動判斷流量計算公式的使用條件。
1.3 水文要素的設定
自編公式法中,根據資料的整編要求,需要對輸入的要素進行指定,程序按照指定的要素,輸出正確的整編成果,如逐日平均水位、水庫站的壩上水位、閘壩站的上下游水位等。
自編公式法推求流量功能主要包括數據錄入模塊、公式檢查模塊、條件判斷模塊和公式計算模塊,此外,還有對不同時間的要素進行組合的模塊等,功能模塊結構見圖2。

圖2 功能模塊結構
2.1 數據錄入模塊
數據錄入的主要功能是根據編寫公式里的要素錄入對應的數據。對時間相同的要素,提供對應的列供用戶輸入數據;如果時間不同,則提供另一個錄入界面。數據錄入提供了與電子表格直接交換數據的功能,方便用戶從電子表格復制數據粘貼到錄入界面。
2.2 公式檢查模塊
用戶錄入的公式正確與否,將直接影響到下一步能否成功計算。因此,必須對公式編寫的正確性進行檢查,其功能是檢查各個要素、運算符及括號等組成公式的部分是否符合公式編寫規則的要求。
2.3 條件判斷模塊
1個測站的流量計算公式有多個,每個公式都有相應的使用條件,確定某一時刻使用哪個公式,首先要對公式使用條件進行判斷。該功能通過算術運算符計算表達式的值,用關系運算符比較條件是否成立,如果有多個比較條件,用邏輯運算符判斷多個比較條件是否成立,如果條件成立,就選取對應的公式計算,如果全部條件都不成立,則流量(Q)為零。
2.4 公式計算模塊
公式計算模塊主要根據數據結構的表達式求值的功能原理編寫[2],其功能是:經過公式檢查和條件判斷選取了某一個公式以后,在計算某一時刻的流量時,把各個要素所代表的數值,代入公式表達式通過運算符進行計算,從而得出某一時刻的流量值,這是自編公式法計算流量的核心。
3.1 自編公式法的一般規定
編輯公式一般以“Q=”打頭,編輯的公式內容是通知程序參與計算的要素以及相互關系。1個要素只能使用1個英文字母,不區分大小寫。如某站水流呈沉溺式孔流,由于流態的不同,有2個流量計算公式
Q=2.6ME
(1)
(2)
從公式表達式可以看出,程序支持的運算符包括加、減、乘、除、乘方,基本滿足一般計算要求。公式編寫正確與否,程序運行期間會進行檢查并給出提示信息,也可復制到Excel表格上,把字符換成單元格進行驗證;“解釋自編公式”里的各個要素,用逗號間隔,以便在數據錄入界面輸入相應的數據,如圖3所示。

圖3 自編公式法公式及使用條件錄入界面
公式使用條件是對每個公式的使用進行限制,既可以用某個公式要素控制,也可以用算術表達式控制。根據數值修約規則[3],公式要素或算術表達式的小數取位,取決于“數值*”欄的小數位。如“U-X<4.50”這個條件,程序計算U-X的值取2位小數與 4.50進行比較。
3.2 數據錄入
(1) 流量系數的錄入。流量系數是其與有關水力因素(上下游水頭、閘門啟閉等)建立的相關關系曲線,通常給定一組數據來表示,如圖4的數據表明,流量系數M是與上下游水位差U-X建立的關系,某一時間U-X的值為相關因素值,采用一元三點插值法插補出公式要素值,賦值M,代入公式運算。根據數值修約規則,算術表達式U-X和流量系數M的小數取位,取決于相關因素值和公式要素值的最多小數位,實現了由用戶控制計算數值精度的要求。

圖4 自編公式法流量系數錄入界面
(2) 各相關要素的錄入。根據“解釋自編公式”里的各個要素,提供對應的錄入界面供用戶輸入數據,由于錄入數據量較大,程序可對除時間要素以外的要素進行省略處理,各個數據錄入界面可從Excel表格直接復制、粘貼,便于用戶快速完成數據的錄入,見圖5。

圖5 自編公式法各要素錄入界面
3.3 瞬時流量計算
程序讀入數據后,對全年的數據進行外循環,對公式及公式使用條件進行內循環處理。當計算第一條記錄的流量時,程序首先對圖3中第一個公式使用條件進行判斷,U-X的值為1.23,小于4.50,且大于0,通過邏輯運算符邏輯與判斷,符合第一個條件,因此采用公式(1)計算。先計算出M,相關因素表達式U-X為1.23,按照一元三點插值的方法,在相關因素值找到適合插值的3個點,插補出公式要素值1.64,賦值M;再把開高(E)0.03代入公式,即Q=2.60×1.64×0.03,代入公式計算模塊得1.28,退出內循環,并進入外循環,進行下一條記錄的計算,直至全部計算出瞬時流量。
3.4 校對計算結果
程序對計算的結果輸出1個文本格式的文件,包括了各個要素值、計算的流量及所采用的公式,用戶可以方便地導入Excel進行核實檢查,確保計算結果的正確。
與利用各類復雜的堰閘流量公式和測站率定流量公式推求流量相比,自編公式法的公式編輯簡便,公式使用條件判斷靈活,可廣泛用于以往的各種推流過程。目前,該功能已擴展到水位流量的單值分析計算模型、感潮河段潮流量計算模型以及引排水(潮)量計算模型的應用計算中,并被納入水文資料整編系統。若干省(市)水文部門的應用實踐表明,該方法顯著減輕了整編人員的勞動強度,降低了各種計算數據的錯誤率,已成為水文資料整編系統推求流量的重要工具。
[1] SL247-2012 水文資料整編規范 [S].
[2] 嚴蔚敏,吳偉民.《數據結構》(C語言版)[M].北京:清華大學出版社, 2013.
[3] GB/T 8170-2008數值修約規則與極限數值的表示和判定 [S].
(編輯:陳紫薇)
2016-09-28
賴厚桂,男,長江水利委員會水文局,高級工程師.
1006-0081(2017)02-0015-03
P337.3
A