賴厚桂(長(zhǎng)江水利委員會(huì) 水文局,湖北 武漢 430010)
自編公式法在水文資料整編推流中的應(yīng)用
賴厚桂(長(zhǎng)江水利委員會(huì) 水文局,湖北 武漢 430010)
由于水工建筑物設(shè)施運(yùn)行時(shí)特征參數(shù)變化,在推求流量的過程中,不同流態(tài)需由不同公式推流。以往的軟件編制中,通常是一個(gè)公式編制一個(gè)計(jì)算過程,難以做到通用。為了提高整編軟件的通用性,通過對(duì)公式中各要素進(jìn)行細(xì)致分析,編制了由用戶自編公式推求流量的方法。闡述了采用自編公式法推求流量的設(shè)計(jì)思路及實(shí)現(xiàn)方法。實(shí)際應(yīng)用表明,該方法可顯著減輕整編人員的工作量,降低計(jì)算數(shù)據(jù)的錯(cuò)誤率,是水文資料整編系統(tǒng)推流的重要工具。
流量;流量整編;應(yīng)用軟件開發(fā)
在水文部門利用水工建筑物推求流量時(shí),除水文資料整編規(guī)范對(duì)不同閘壩類型提供了既定的規(guī)范公式外[1],還有大量的推求流量公式是由設(shè)計(jì)部門或水文部門率定的。推求流量公式中相關(guān)要素較多,不同流態(tài)需由不同的公式來推求流量。以往的整編系統(tǒng)推求流量由軟件編制人員定制,一般是一個(gè)公式編制一個(gè)過程,由用戶選取相應(yīng)公式及相關(guān)因素。然而,用戶不易理解編制過程,且數(shù)據(jù)加工繁瑣。用戶需根據(jù)各要素值預(yù)先計(jì)算某一時(shí)刻的流態(tài),還需將參加計(jì)算流量的各個(gè)要素(如:上下游水位、開高、開寬等)加工為時(shí)間相同、個(gè)數(shù)相等的數(shù)據(jù),才能錄入數(shù)據(jù)進(jìn)入程序計(jì)算。要推求某個(gè)測(cè)站的流量,需進(jìn)行大量的前期數(shù)據(jù)加工工作,這給整編人員帶來很大困難和負(fù)擔(dān)。采用自編公式法,解決了需要不同公式計(jì)算流量的問題,并能自動(dòng)判斷流態(tài),選取符合條件的公式進(jìn)行計(jì)算。這一功能的開發(fā),使用戶可以根據(jù)規(guī)范的堰閘流量公式和測(cè)站基于資料率定的流量公式,來編寫公式并計(jì)算流量,提高了整編軟件的通用性。
自編公式法的設(shè)計(jì)思路是:用戶按一定規(guī)則編寫公式,并根據(jù)公式要素輸入數(shù)據(jù),在某一時(shí)刻,程序根據(jù)編寫的公式和公式使用條件,自動(dòng)選取符合條件的公式計(jì)算流量,循環(huán)計(jì)算出全年的流量,然后進(jìn)行下一步水文要素的整編計(jì)算和統(tǒng)計(jì)。計(jì)算流程見圖1。
圖1 自編公式法計(jì)算流量流程
1.1 公式的編寫規(guī)則與要素解釋
自編公式法按照一定的規(guī)則編寫公式,一般規(guī)則是:以1個(gè)英文字母代表1個(gè)水文要素,根據(jù)流量計(jì)算公式的各個(gè)水文要素的相互關(guān)系,通過加、減、乘、除、乘方等運(yùn)算符號(hào)組成公式,與在Excel表格里編寫公式類似;“解釋公式要素”里,在字母后面解釋字母所代表要素的含義,便于用戶在輸入各個(gè)要素?cái)?shù)據(jù)時(shí)識(shí)別。
1.2 公式的使用條件
在水工建筑物中隨著閘門開高、上下游水位的變化,某一時(shí)刻水流流態(tài)也會(huì)發(fā)生改變,流量計(jì)算就會(huì)用到多個(gè)計(jì)算公式。因此,需要設(shè)定公式的使用條件,以某個(gè)要素或要素的算術(shù)表達(dá)式,通過算術(shù)運(yùn)算符、關(guān)系運(yùn)算符和邏輯運(yùn)算符組成判斷條件,自動(dòng)判斷流量計(jì)算公式的使用條件。
1.3 水文要素的設(shè)定
自編公式法中,根據(jù)資料的整編要求,需要對(duì)輸入的要素進(jìn)行指定,程序按照指定的要素,輸出正確的整編成果,如逐日平均水位、水庫(kù)站的壩上水位、閘壩站的上下游水位等。
自編公式法推求流量功能主要包括數(shù)據(jù)錄入模塊、公式檢查模塊、條件判斷模塊和公式計(jì)算模塊,此外,還有對(duì)不同時(shí)間的要素進(jìn)行組合的模塊等,功能模塊結(jié)構(gòu)見圖2。
圖2 功能模塊結(jié)構(gòu)
2.1 數(shù)據(jù)錄入模塊
數(shù)據(jù)錄入的主要功能是根據(jù)編寫公式里的要素錄入對(duì)應(yīng)的數(shù)據(jù)。對(duì)時(shí)間相同的要素,提供對(duì)應(yīng)的列供用戶輸入數(shù)據(jù);如果時(shí)間不同,則提供另一個(gè)錄入界面。數(shù)據(jù)錄入提供了與電子表格直接交換數(shù)據(jù)的功能,方便用戶從電子表格復(fù)制數(shù)據(jù)粘貼到錄入界面。
2.2 公式檢查模塊
用戶錄入的公式正確與否,將直接影響到下一步能否成功計(jì)算。因此,必須對(duì)公式編寫的正確性進(jìn)行檢查,其功能是檢查各個(gè)要素、運(yùn)算符及括號(hào)等組成公式的部分是否符合公式編寫規(guī)則的要求。
2.3 條件判斷模塊
1個(gè)測(cè)站的流量計(jì)算公式有多個(gè),每個(gè)公式都有相應(yīng)的使用條件,確定某一時(shí)刻使用哪個(gè)公式,首先要對(duì)公式使用條件進(jìn)行判斷。該功能通過算術(shù)運(yùn)算符計(jì)算表達(dá)式的值,用關(guān)系運(yùn)算符比較條件是否成立,如果有多個(gè)比較條件,用邏輯運(yùn)算符判斷多個(gè)比較條件是否成立,如果條件成立,就選取對(duì)應(yīng)的公式計(jì)算,如果全部條件都不成立,則流量(Q)為零。
2.4 公式計(jì)算模塊
公式計(jì)算模塊主要根據(jù)數(shù)據(jù)結(jié)構(gòu)的表達(dá)式求值的功能原理編寫[2],其功能是:經(jīng)過公式檢查和條件判斷選取了某一個(gè)公式以后,在計(jì)算某一時(shí)刻的流量時(shí),把各個(gè)要素所代表的數(shù)值,代入公式表達(dá)式通過運(yùn)算符進(jìn)行計(jì)算,從而得出某一時(shí)刻的流量值,這是自編公式法計(jì)算流量的核心。
3.1 自編公式法的一般規(guī)定
編輯公式一般以“Q=”打頭,編輯的公式內(nèi)容是通知程序參與計(jì)算的要素以及相互關(guān)系。1個(gè)要素只能使用1個(gè)英文字母,不區(qū)分大小寫。如某站水流呈沉溺式孔流,由于流態(tài)的不同,有2個(gè)流量計(jì)算公式
Q=2.6ME
(1)
(2)
從公式表達(dá)式可以看出,程序支持的運(yùn)算符包括加、減、乘、除、乘方,基本滿足一般計(jì)算要求。公式編寫正確與否,程序運(yùn)行期間會(huì)進(jìn)行檢查并給出提示信息,也可復(fù)制到Excel表格上,把字符換成單元格進(jìn)行驗(yàn)證;“解釋自編公式”里的各個(gè)要素,用逗號(hào)間隔,以便在數(shù)據(jù)錄入界面輸入相應(yīng)的數(shù)據(jù),如圖3所示。
圖3 自編公式法公式及使用條件錄入界面
公式使用條件是對(duì)每個(gè)公式的使用進(jìn)行限制,既可以用某個(gè)公式要素控制,也可以用算術(shù)表達(dá)式控制。根據(jù)數(shù)值修約規(guī)則[3],公式要素或算術(shù)表達(dá)式的小數(shù)取位,取決于“數(shù)值*”欄的小數(shù)位。如“U-X<4.50”這個(gè)條件,程序計(jì)算U-X的值取2位小數(shù)與 4.50進(jìn)行比較。
3.2 數(shù)據(jù)錄入
(1) 流量系數(shù)的錄入。流量系數(shù)是其與有關(guān)水力因素(上下游水頭、閘門啟閉等)建立的相關(guān)關(guān)系曲線,通常給定一組數(shù)據(jù)來表示,如圖4的數(shù)據(jù)表明,流量系數(shù)M是與上下游水位差U-X建立的關(guān)系,某一時(shí)間U-X的值為相關(guān)因素值,采用一元三點(diǎn)插值法插補(bǔ)出公式要素值,賦值M,代入公式運(yùn)算。根據(jù)數(shù)值修約規(guī)則,算術(shù)表達(dá)式U-X和流量系數(shù)M的小數(shù)取位,取決于相關(guān)因素值和公式要素值的最多小數(shù)位,實(shí)現(xiàn)了由用戶控制計(jì)算數(shù)值精度的要求。
圖4 自編公式法流量系數(shù)錄入界面
(2) 各相關(guān)要素的錄入。根據(jù)“解釋自編公式”里的各個(gè)要素,提供對(duì)應(yīng)的錄入界面供用戶輸入數(shù)據(jù),由于錄入數(shù)據(jù)量較大,程序可對(duì)除時(shí)間要素以外的要素進(jìn)行省略處理,各個(gè)數(shù)據(jù)錄入界面可從Excel表格直接復(fù)制、粘貼,便于用戶快速完成數(shù)據(jù)的錄入,見圖5。
圖5 自編公式法各要素錄入界面
3.3 瞬時(shí)流量計(jì)算
程序讀入數(shù)據(jù)后,對(duì)全年的數(shù)據(jù)進(jìn)行外循環(huán),對(duì)公式及公式使用條件進(jìn)行內(nèi)循環(huán)處理。當(dāng)計(jì)算第一條記錄的流量時(shí),程序首先對(duì)圖3中第一個(gè)公式使用條件進(jìn)行判斷,U-X的值為1.23,小于4.50,且大于0,通過邏輯運(yùn)算符邏輯與判斷,符合第一個(gè)條件,因此采用公式(1)計(jì)算。先計(jì)算出M,相關(guān)因素表達(dá)式U-X為1.23,按照一元三點(diǎn)插值的方法,在相關(guān)因素值找到適合插值的3個(gè)點(diǎn),插補(bǔ)出公式要素值1.64,賦值M;再把開高(E)0.03代入公式,即Q=2.60×1.64×0.03,代入公式計(jì)算模塊得1.28,退出內(nèi)循環(huán),并進(jìn)入外循環(huán),進(jìn)行下一條記錄的計(jì)算,直至全部計(jì)算出瞬時(shí)流量。
3.4 校對(duì)計(jì)算結(jié)果
程序?qū)τ?jì)算的結(jié)果輸出1個(gè)文本格式的文件,包括了各個(gè)要素值、計(jì)算的流量及所采用的公式,用戶可以方便地導(dǎo)入Excel進(jìn)行核實(shí)檢查,確保計(jì)算結(jié)果的正確。
與利用各類復(fù)雜的堰閘流量公式和測(cè)站率定流量公式推求流量相比,自編公式法的公式編輯簡(jiǎn)便,公式使用條件判斷靈活,可廣泛用于以往的各種推流過程。目前,該功能已擴(kuò)展到水位流量的單值分析計(jì)算模型、感潮河段潮流量計(jì)算模型以及引排水(潮)量計(jì)算模型的應(yīng)用計(jì)算中,并被納入水文資料整編系統(tǒng)。若干省(市)水文部門的應(yīng)用實(shí)踐表明,該方法顯著減輕了整編人員的勞動(dòng)強(qiáng)度,降低了各種計(jì)算數(shù)據(jù)的錯(cuò)誤率,已成為水文資料整編系統(tǒng)推求流量的重要工具。
[1] SL247-2012 水文資料整編規(guī)范 [S].
[2] 嚴(yán)蔚敏,吳偉民.《數(shù)據(jù)結(jié)構(gòu)》(C語言版)[M].北京:清華大學(xué)出版社, 2013.
[3] GB/T 8170-2008數(shù)值修約規(guī)則與極限數(shù)值的表示和判定 [S].
(編輯:陳紫薇)
2016-09-28
賴厚桂,男,長(zhǎng)江水利委員會(huì)水文局,高級(jí)工程師.
1006-0081(2017)02-0015-03
P337.3
A