(1.上海碧波水務設計研發(fā)中心,上海 200233;2.上海市水務規(guī)劃設計研究院,上海 200233 )
基于NetCDF格式的河網水流二維呈現(xiàn)技術研究
錢真1,2
(1.上海碧波水務設計研發(fā)中心,上海 200233;2.上海市水務規(guī)劃設計研究院,上海 200233 )
為在在線預報預警系統(tǒng)上展示模擬的河網水流運動情況,根據(jù)NetCDF格式標準和一、二維流速關系,采用C#語言編程開發(fā),提出并研究了實現(xiàn)一維河網水流運動的二維呈現(xiàn)技術,并在.net平臺上設計編寫了相應的轉化模塊。此項技術已成功應用于黃浦江上游水源地突發(fā)污染預警系統(tǒng)平臺中。
污染預警;污染預報;數(shù)值模擬
平原感潮河網水流數(shù)值模型是研究平原感潮地區(qū)水流運動規(guī)律、編制防洪除澇和河網水環(huán)境整理規(guī)劃的重要工具[1-2]。數(shù)字河網水量水質模型系統(tǒng)(Digital River Network Water Quantity & Quality Model System,簡稱:DRWMS)是針對上海感潮河網地區(qū)水文條件及水流運動特點,集成水文水力學數(shù)值模擬、GIS、數(shù)據(jù)庫等技術,由上海市水務規(guī)劃設計研究院和南京航空航天大學計算機科學與技術學院聯(lián)合研發(fā)形成的一套集模型建模、模擬計算、結果演示于一體的軟件系統(tǒng),被廣泛應用于上海區(qū)域內澇、水環(huán)境治理等相關科研和規(guī)劃設計中[3-4]。
近年來,隨著社會對水安全需求的不斷提高和互聯(lián)網技術的發(fā)展,水量水質數(shù)值模擬技術不僅被廣泛應用于研究、規(guī)劃設計中,也被應用于常規(guī)的業(yè)務監(jiān)測預報預警。在“大數(shù)據(jù)”、“互聯(lián)網+”的大背景下,結合數(shù)值模擬技術,國內外已研發(fā)了一系列先進的在線預報預警系統(tǒng)。著名的有ASA公司開發(fā)的OilMap和ChemMap系統(tǒng)[5-7],但這些系統(tǒng)要求水流模型結果以二維流場的方式接入并展示,而傳統(tǒng)的河網水流模擬結果通常是一維的,無法被在線系統(tǒng)直接調用。
本文根據(jù)NetCDF數(shù)據(jù)結構和DRWMS的特點,從水流表征變量的物理意義出發(fā),在.net平臺上,采用C#語言編程開發(fā),實現(xiàn)了NetCDF格式的河網流場文件自動生成,并將此技術成功應用于黃浦江上游水源地突發(fā)污染預警系統(tǒng)平臺的建設中。
NetCDF(Network Common Data Form)網絡通用數(shù)據(jù)格式是由美國大學大氣研究協(xié)會(University Corporation for Atmospheric Research,UCAR)的Unidata項目科學家針對科學數(shù)據(jù)特點開發(fā)的,是一種面向數(shù)組型并適于網絡共享的數(shù)據(jù)的描述和編碼標準。目前,NetCDF被廣泛應用于大氣科學、水文、海洋學、環(huán)境模擬、地球物理等諸多領域[8]。
NetCDF數(shù)據(jù)集(.nc)并非固定格式,根據(jù)用戶需要自行定義。一個完整的NetCDF數(shù)據(jù)集包含維(Dimensions)、變量(Variables)及屬性(Attributes)3種描述類型,每種類型都會被分配一個名字和一個訪問ID,NetCDF庫可以同時訪問多個數(shù)據(jù)集,ID被用來識別不同數(shù)據(jù)集。變量存儲實際數(shù)據(jù),維給出了變量維度信息,屬性則給出了變量或數(shù)據(jù)集本身的輔助信息屬性,又可以分為適用于整個文件的全局屬性和適用于特定變量的局部屬性,全局屬性則描述了數(shù)據(jù)集的基本屬性以及數(shù)據(jù)集的來源。一個NetCDF文件的結構包括以下對象:
NetCDF name{
Dimensions:… ∥定義維數(shù)
Variables:… ∥定義變量
Attributes:… ∥屬性
Data:… ∥數(shù)據(jù)
}
NetCDF是開放的數(shù)據(jù)結構模型,用戶可以在具體學習其文件結構后直接編程讀寫.nc文件,但這種方式效率低下,使用成本高昂,且易造成文件格式的變異,難以長期維護和升級NetCDF數(shù)據(jù)格式。因此,在NetCDF版本更新的同時官方也一并提供了NetCDF接口函數(shù)庫以方便用戶以編程方式訪問NetCDF數(shù)據(jù),用戶只需熟悉接口函數(shù)庫的函數(shù)調用方式,而無需考慮數(shù)據(jù)底層的二進制具體編碼和文件版本等細節(jié)問題。目前,NetCDF已經升級到4.4.0,其接口函數(shù)庫支持的語言為C、C+ +、Fortran和Java。
在一維河網中,描述水流狀態(tài)通常采用特征斷面的水位、流量和平均流速。其中斷面平均流速通常由下式得到:
(1)
式中,A表示斷面流量為Q時對應的過水斷面面積,斷面的平均流速方向垂直于斷面并指向下游。
而在二維流場中,一般采用考察點位的水位和水深平均流速(或單寬流量)描述水流狀態(tài)。其中,在笛卡爾坐標下水深平均流速由x、y軸上分量u、v組成的矢量形式表示:
(2)
因此,要將一維河網中的水流以二維方式呈現(xiàn),需進行如下處理:
(1) 確定一維河網的二維考察點。此次研究中利用一維河網模型中已有橫斷面線,取其兩岸及中心點作為考察點。
(2) 將斷面平均流速做x、y投影:
(3)
式中,θ為平均流速方向與正東方向的夾角。
流場數(shù)據(jù)文件用于存儲日常定時運算的水動力模型得到的流場結果,結果參數(shù)包括流速和流向。由于NetCDF格式數(shù)據(jù)具備運算與顯示速度快的特點,為支撐業(yè)務化運行與應急管理的需要,該研究增加了流場結果實時轉換為NetCDF數(shù)據(jù)文件的模塊,從而為溢油模型和化學品泄漏模型的運算提供實時流場條件。
此次研究中采用的一維河網水動力模型軟件正是基于.net平臺,采用C#語言開發(fā)完成桌面應用軟件,無縫集成數(shù)值模型、數(shù)據(jù)庫與GIS等多個應用模塊。盡管C#被越來越多地應用于科學研究和工程應用中(如math.net項目),但目前NetCDF接口函數(shù)庫尚無直接支持C#的版本。
在C#中操作NetCDF文件這種安全可行的方法是使用DllImport調運非托管的NetCDF接口函數(shù)庫,鏈接相應的操作函數(shù),以作為C#中類的方法(見圖1)。
圖1 .net平臺調用非托管.dll
WRWMS2NetCDF程序的主要功能是讀取一維河網水流模型軟件生成的斷面位置文件和時序數(shù)據(jù)文件,處理生成符合平臺要求的NetCDF文件。WRWMS2NetCDF模塊主要包括:主函數(shù)類(WC2nc)、河網數(shù)據(jù)集類(WC_Data)、NetCDF數(shù)據(jù)類(NetCDF)和NetCDF數(shù)據(jù)寫入類(NetCdfWriter)(見圖2)。
圖2 WRWMS2NetCDF模塊架構
WC2nc為靜態(tài)類,外部程序在引用WRWMS2NetCDF.dll時可以直接調用其中的函數(shù)Transform(string[] WCFiles, string ncFile):WCFiles為WRWMS輸出文件的地址列表,程序根據(jù)后綴名自動判斷文件類型;ncFile為生成NetCDF文件的地址。
WC_Data是從文件中讀取WRWMS河網數(shù)據(jù)后在內存中生成河網數(shù)據(jù)對象,讀取WRWMS河網數(shù)據(jù)是該對象的方法,WC_Data定義的是一個動態(tài)類,讀取一次河網數(shù)據(jù)隨即生成一個河網數(shù)據(jù)集對象。該類中另外引用2個類:Point和Section,以簡化斷面數(shù)據(jù)的讀取。
(1) Point:封裝控制點的坐標信息,初始化函數(shù):public Point(double xValue, double yValue)。
(2) Section:封裝斷面所屬河段號(strRiver)、斷面編碼(strSec)、斷面控制點集(secPoints)、斷面法向(Alpha)以及斷面時序變量值(Data)。
WC_Data以河網為描述對象,通過方法ReadSectionPosition(string fileName)、ReadLonLat(string fileName)、ReadHisBinary(string fileName)等獲取斷面對象的空間信息和時序數(shù)據(jù)后,進行變量數(shù)據(jù)的處理(如,計算斷面平均流速的u,v分量),并將變量從斷面對象解析出來,這些變量如表1所示。
表1 WC_Data屬性
注:PointCount為控制點個數(shù),TimeCount為計算時間步長數(shù)。
NetCDF通過引用InteropServices,以DllImport方式,調用非托管的netcdf.dll(C版本),其中對netcdf.dll的函數(shù)和控制參數(shù)進行重定義(見圖3)。
圖3 C#中netcdf.dll的部分函數(shù)重定義
NetCdfWriter中Write(string path, WC_Data wc)的主要功能是根據(jù)WC_Data對象生成.nc文件,主要流程:
(1) 創(chuàng)建.nc文件;
(2) 創(chuàng)建維度,并定義最大范圍;
(3) 創(chuàng)建所有變量;
(4) 寫入屬性;
(5) 寫入所有變量值,先寫低維度變量,后寫高維度變量;
(6) 關閉.nc文件。
圖4 研究區(qū)域河網水系示意
在DRWMS上建立了上海全市及黃浦江沿太浦河上游(面積約8 613.5 km2)范圍內的河網水量水質模型(見圖4),其中,降雨網格(3 km×3 km)655個,河段1 633個,斷面821個,泵閘139座。以2014年3月12~20日和2014年7月10~26日期間實測的降雨、水文及工情對該模型率定驗證,使其精度滿足預報預警業(yè)務需求。在實際應用中,DRWMS根據(jù)實時的降雨、水文及工情條件進行水流計算,通過WRWMS2NetCDF模塊自動將結果轉換NetCDF格式,供黃浦江上游水源地突發(fā)污染預警系統(tǒng)(見圖5)實時調用,結合OilMap和ChemMap可對突發(fā)水污染事件進行預報。
圖5 預警系統(tǒng)中局部流場示意
本文研究了基于NetCDF格式的一維河網二維呈現(xiàn)原理和技術,在.net平臺上,設計和編寫了WRWMS2NetCDF模塊(申請并獲得軟件著作權),并成功應用于黃浦江上游水源地突發(fā)污染預警系統(tǒng)平臺中。本文的研究成果可以為類似的實時預報預警系統(tǒng)平臺建設提供技術參考。
[1] 李光熾,錢真.感潮河道區(qū)間入流反分析[J].水科學進展,2013,24(2):266-271.
[2] 錢真,賈衛(wèi)紅.基于GIS的感潮地區(qū)城市區(qū)域除澇能力評估[J].水電能源科學,2014,32(3):85-87.
[3] 錢真,譚瓊,賈衛(wèi)紅.基于城市雨洪綜合模擬的區(qū)域除澇分析[J].水利水電科技進展,2015,35(6):57-61.
[4] 譚瓊,時珍寶,張建頻,等.排水實時模型在上海防汛中的應用示范[J].中國給水排水,2012,28(15):49-52.
[5] 李保剛,周克梅,林濤,等.水源地保護及突發(fā)性水污染事件預警應急的研究與實施進展[J].水資源保護,2008,24(1):87-91.
[6] 陳榮昌,陳俊峰.ChemMap在長江危險化學品泄漏風險及對策研究中的應用[J].港航節(jié)能,2011(1):2-5.
[7] 陳榮昌,趙前,鄧健,等.Delft3D和OilMap在內河溢油模擬中的聯(lián)合應用研究[J].中國水運,2011,11(4):65-67.
[8] 曹柱,蘇天赟,王國宇.大規(guī)模海洋水文環(huán)境多維可視化技術研究[J].中國海洋大學學報(自然科學版),2017,47(4):132-138.
2017-08-10
國家重點研發(fā)計劃“長江水源地供水保證率提升對策與措施”資助項目(2017YFC0405406)
錢 真,男,上海碧波水務設計研發(fā)中心,工程師.
1006-0081(2017)12-0039-04
X832
A
(編輯:朱曉紅)