夏達忠,劉 艷,羅錫斌,蔡和荷
(1.河海大學水文水資源學院,江蘇 南京 210098;2.國網(wǎng)重慶市電力公司,重慶 400015)
氣候預報系統(tǒng)(CFS,Climate Forecast System)是美國國家環(huán)境預報中心(NCEP,National Centers for Environmental Prediction)開發(fā)的一個完全耦合模型,包括了大氣、海洋、陸地三個模式。2011年3月30日,第二代氣候預報系統(tǒng)(CFSv2,The NCEP Climate Forecast System Version 2)[1]在NCEP官網(wǎng)開始運行并且定期發(fā)布數(shù)據(jù)。CFSv2數(shù)據(jù)產(chǎn)品在預報模型和數(shù)據(jù)同化系統(tǒng)上都有改進,其大氣、海洋、陸地三個模式分別采用全球預報系統(tǒng)模式(GFS)、第四代模塊化海洋模式(MOM4)、四層陸面模式(NOAH)。
迄今為止,針對CFS預報數(shù)據(jù)展開的研究甚多。陳官軍等(2010)[2]檢驗評估了CFS對東亞夏季的延伸預報。李春暉等(2012)[3]基于CFS預報產(chǎn)品對廣東省季節(jié)降水統(tǒng)計降尺度進行預測。李永生等(2016)[4]評估了CFSv2模式在東北地區(qū)對于夏季月降水的預測能力效果相對較好。班晉等(2019)[5]基于CFSv2預測資料研究黑龍江夏季降水趨勢結果優(yōu)于目前業(yè)務。李浪等(2020)[6]利用CFSv2未來45 d產(chǎn)品數(shù)據(jù)評估其對貴州一次區(qū)域暴雨過程的預報能力在15~10 d時段較好。
中長期預報可以延長水文預報預見期,能夠對流域洪水起到預警作用,以及方便制訂遠期水電調度規(guī)劃。王留杰等(2017)[7]對中國區(qū)域地面要素數(shù)據(jù)集的降水氣溫數(shù)據(jù)進行了質量評估,發(fā)現(xiàn)氣象網(wǎng)格數(shù)據(jù)與實測數(shù)據(jù)擬合度較高。余豪等(2020)[8]采用時間序列中長期預報方法耦合動態(tài)規(guī)劃優(yōu)化調度方法制定泗南江水電站的中長期預報調度方案。降雨數(shù)據(jù)的預見期對中長期預報的影響最大;因此,對具有較長預見期的CFS數(shù)據(jù)的質量評估以及水文應用研究很有必要。
由于CFSv2數(shù)據(jù)原格式解譯需要一些復雜的處理過程,目前對于其可視化處理的研究還很少。因此,本次研究針對第二代CFS數(shù)據(jù)的下載到處理到繪圖,設計并構建了一個實用的地理信息系統(tǒng)插件,利用Python將其處理為具有較好可觀性的等值線圖。
CFSv2模式預見期長度為9個月,時間分辨率為6 h[9]。該產(chǎn)品以每24小時為一個周期定時發(fā)布當天對當年(或九個月內)全球未來氣候的預測情況,發(fā)布的文件格式為GRIB2格式編碼。每份GRIB文件內部包含對未來某一時刻開始的6 h數(shù)據(jù)信息[10]。
GRIB對象是數(shù)據(jù)的子類,可以通過解析方法將其中的數(shù)據(jù)轉換為柵格數(shù)據(jù)。其解碼及可視化軟件眾多,本文最終采用Wingrib對其進行解碼。GRIB2格式是GRIB第二版。較之前版本(GRIB1)有著支持多維數(shù)據(jù)、模塊化結構、多種壓縮方式、IEEE標準浮點表示法等優(yōu)勢[11];因此得到了廣泛使用,并逐步替代了ADF文件。
由于本項目使用的數(shù)據(jù)眾多,如果以直接顯示的形式將不便于使用者對數(shù)據(jù)進行進一步的分析以及歸納研究;因此,本項目數(shù)據(jù)將以等值線圖的方式進行呈現(xiàn)。
等值線是指在平面上(見圖1),由某一數(shù)量指標值相等的各點連成的平滑曲線。在該曲線上的點均滿足表達式F(x,y)=P。當平面內存在多個等值線時,可以比較直觀的表達出該平面上P的變化規(guī)律[12]。為更高精度、高效率地繪制降水數(shù)據(jù)等值線,本次研究采用Delaunay三角網(wǎng)(見圖2)算法進行非柵格數(shù)據(jù)的差值[13]。此外,為增強等值線圖的可讀性,除原本的標記等值線,還使用不同顏色來加強數(shù)據(jù)的直觀程度。
圖1 等值線示意
圖2 三角網(wǎng)示意
本次研究需批量下載NECP官網(wǎng)所發(fā)布的最新GRIB文件并對其進行解析;之后,利用解析所得的數(shù)據(jù)生成中國降水等值線圖,再對等值線圖進行相關的圖像處理,使其附加上項目所需的文本信息(項目名稱、預報時間等);最后,對等值線圖進行美化處理,以滿足產(chǎn)品級要求。
由于本研究需一次生成大量等值線圖,并為保證信息的時效性;因此,對整套流程速度要求較高,需具備較高穩(wěn)定性以及工作效率。同時,考慮到實際需求,本項目開發(fā)環(huán)境需在微軟Windows平臺下(具體以Windows7 x86或同級別服務器系統(tǒng)為準),且占用較少的磁盤及運行空間。
依照現(xiàn)代計算機軟件科學的設計理念[14](見圖3),本項目可大致分為:下載模塊、數(shù)據(jù)處理模塊、繪圖模塊、配置模塊以及主模塊等5個模塊。
圖3 模塊與流程
下載模塊主要負責對源文件的下載與解析,以每張等值線圖一個文件的形式生成可以直接讀的數(shù)據(jù)文件;配置模塊主要負責讀取相關配置,載入配置好的資源以及流程,減少系統(tǒng)與外部交互的冗余部分;數(shù)據(jù)處理模塊主要負責數(shù)據(jù)的處理,包括對數(shù)據(jù)的增添、刪除以及網(wǎng)格化插值等操作;繪圖模塊負責將地理信息圖層或圖片按一定的要求進行疊加,并添加相應的文字說明,以達到美觀的效果;主模塊負責控制其余三個模塊以及總體流程,并保障所有模塊流程都能夠有序高效的執(zhí)行。
在繪圖模塊中,當進行地理信息圖層的疊加操作時,由于圖層中心點的位置以及比例尺可能并不相同,因此應先基于地理信息對圖層進行縮放平移再進行疊加(見圖4)。
圖4 地理坐標與像素點的換算
流程上,主模塊會首先啟動配置模塊并讀取事先保存好的配置信息,之后根據(jù)配置信息啟動下載模塊,并通過下載模塊下載需要的源文件并進行解析。當下載模塊完成解析之后會將消息返回給主模塊,此時主模塊會啟動數(shù)據(jù)處理以及繪圖模塊進行數(shù)據(jù)的處理、等值面的繪制以及部分疊加工作。在數(shù)據(jù)處理模塊完成等值面的繪之后,會將等值面?zhèn)鬟f給繪圖模塊,繪圖模塊會將等值面以及其他圖層信息進行疊加操作并保存到存儲設備上。這樣就完成了一張等值面圖的生成。而主模塊會多次重復這些動作直到任務完成。當全部作業(yè)完成后,主模塊會更新配置模塊中的配置信息,并保存到存儲設備上,以方便下次啟動。
數(shù)據(jù)結構是計算機存儲、組織數(shù)據(jù)的方式,是指相互存在一種或多種特定關系的數(shù)據(jù)元素集合[15]。
針對軟件不同模塊,所使用的數(shù)據(jù)元素也是不一樣的。本次插件開發(fā)共使用了6種數(shù)據(jù)元素:散點對象、柵格對象、文本對象、圖像對象、地理圖層對象、GRIB對象。其中,前兩個對象主要位于數(shù)據(jù)處理模塊,GRIB對象主要位于下載模塊,其余四個對象位于繪圖模塊。各對象之間的相關關系和轉換關系見圖5。
圖5 數(shù)據(jù)結構
經(jīng)調試檢驗發(fā)現(xiàn),該插件能夠較為穩(wěn)定高效地輸出直觀大方的降水等值線圖,使得GRIB2文件格式的降水數(shù)據(jù)產(chǎn)品直觀且方便用戶操作,適用于投入到實際的生產(chǎn)實踐過程中去。圖6展示了2018年12月上旬CFSv2數(shù)據(jù)的處理成果。
圖6 全國中長期預報降水等值線圖成果示意(單位:mm)
為縮短開發(fā)時間,提升開發(fā)效率,本項目部分模塊調用了第三方庫(軟件)。各軟件名稱與功能說明如下:
(1)Wgrib2。Wgrib2是GRIB的一款解析器,它可以快速地獲取GRIB文件的文件頭,并根據(jù)文件頭所提供的信息將GRIB文件解析成文本或二進制文件。本項目將通過使用它來完成對GRIB2文件的快速解析。
(2)Numpy。Numpy是一個數(shù)值計算擴展庫,比一般常見的計算結構要更加高效。其中提供了大量與矩陣處理、矢量計算等高等數(shù)值計算的相關工具。這對科學計算有著極大的幫助。本項目將利用Numpy進行高效的科學計算。
(3)PIL。PIL(Python Image Library)是Python的一個圖像處理插件,主要處理以像素所構成的數(shù)字圖像??梢岳闷渌鶐У谋姸喙ぞ吆唵斡行У膶D像進行相關編輯操作。本項目將使用其進行圖層圖像以及文字的疊加。
(4)Matplotlib。Matplotlib是一個矢量繪圖插件,主要用于生成出版質量級別的圖形。如直方圖、散點圖以及流程圖等。本項目使用Matplotlib及其自帶的一些算法進行數(shù)據(jù)的網(wǎng)格化并生成等值面。
本文對于CFSv2數(shù)據(jù)構建了完整的地理信息系統(tǒng)插件,覆蓋了數(shù)據(jù)處理、繪圖等流程,并利用Python得出等值線圖,以方便后續(xù)水文模擬中進行中長期預報作業(yè)。在本次插件的設計過程中,主要遇到了3個問題:
一是,下載時間問題。實際測試時,發(fā)現(xiàn)由于網(wǎng)速問題,導致下載時間過長,影響系統(tǒng)效率。解決方法是使用多線程技術;同時下載多個文件,并采用工作流的方式進行處理,減少系統(tǒng)等待時間,提高效率。
二是,連接失敗問題。由于CFS文件服務器距離較遠,且有連接數(shù)量限制。導致存在網(wǎng)絡連接失敗而無法下載的情況。解決方法是捕捉異常,并根據(jù)異常采取相對應手段,嘗試多次下載。盡可能保證文件成功下載。
三是,Wgrib2的輸出問題。當對wgrib2進行無界面化封裝后,程序出現(xiàn)報錯。經(jīng)查,原因為解析所生成文件的格式發(fā)送改變,于非特定位置混入了原輸出信息。后嘗試對wgrib2程序輸出進行重定向后,故障排除。此外,在對數(shù)據(jù)進行驗證時,發(fā)現(xiàn)數(shù)據(jù)錯誤。推測為wgrib2解析數(shù)據(jù)時的方向性問題。經(jīng)檢測,發(fā)現(xiàn)wgrib2的數(shù)據(jù)輸出為由左到右,由下到上。對相應代碼進行調整后,數(shù)據(jù)正確,故障排除。