夏達忠,劉 艷,羅錫斌,蔡和荷
(1.河海大學水文水資源學院,江蘇 南京 210098;2.國網重慶市電力公司,重慶 400015)
氣候預報系統(CFS,Climate Forecast System)是美國國家環境預報中心(NCEP,National Centers for Environmental Prediction)開發的一個完全耦合模型,包括了大氣、海洋、陸地三個模式。2011年3月30日,第二代氣候預報系統(CFSv2,The NCEP Climate Forecast System Version 2)[1]在NCEP官網開始運行并且定期發布數據。CFSv2數據產品在預報模型和數據同化系統上都有改進,其大氣、海洋、陸地三個模式分別采用全球預報系統模式(GFS)、第四代模塊化海洋模式(MOM4)、四層陸面模式(NOAH)。
迄今為止,針對CFS預報數據展開的研究甚多。陳官軍等(2010)[2]檢驗評估了CFS對東亞夏季的延伸預報。李春暉等(2012)[3]基于CFS預報產品對廣東省季節降水統計降尺度進行預測。李永生等(2016)[4]評估了CFSv2模式在東北地區對于夏季月降水的預測能力效果相對較好。班晉等(2019)[5]基于CFSv2預測資料研究黑龍江夏季降水趨勢結果優于目前業務。李浪等(2020)[6]利用CFSv2未來45 d產品數據評估其對貴州一次區域暴雨過程的預報能力在15~10 d時段較好。
中長期預報可以延長水文預報預見期,能夠對流域洪水起到預警作用,以及方便制訂遠期水電調度規劃。王留杰等(2017)[7]對中國區域地面要素數據集的降水氣溫數據進行了質量評估,發現氣象網格數據與實測數據擬合度較高。余豪等(2020)[8]采用時間序列中長期預報方法耦合動態規劃優化調度方法制定泗南江水電站的中長期預報調度方案。降雨數據的預見期對中長期預報的影響最大;因此,對具有較長預見期的CFS數據的質量評估以及水文應用研究很有必要。
由于CFSv2數據原格式解譯需要一些復雜的處理過程,目前對于其可視化處理的研究還很少。因此,本次研究針對第二代CFS數據的下載到處理到繪圖,設計并構建了一個實用的地理信息系統插件,利用Python將其處理為具有較好可觀性的等值線圖。
CFSv2模式預見期長度為9個月,時間分辨率為6 h[9]。該產品以每24小時為一個周期定時發布當天對當年(或九個月內)全球未來氣候的預測情況,發布的文件格式為GRIB2格式編碼。每份GRIB文件內部包含對未來某一時刻開始的6 h數據信息[10]。
GRIB對象是數據的子類,可以通過解析方法將其中的數據轉換為柵格數據。其解碼及可視化軟件眾多,本文最終采用Wingrib對其進行解碼。GRIB2格式是GRIB第二版。較之前版本(GRIB1)有著支持多維數據、模塊化結構、多種壓縮方式、IEEE標準浮點表示法等優勢[11];因此得到了廣泛使用,并逐步替代了ADF文件。
由于本項目使用的數據眾多,如果以直接顯示的形式將不便于使用者對數據進行進一步的分析以及歸納研究;因此,本項目數據將以等值線圖的方式進行呈現。
等值線是指在平面上(見圖1),由某一數量指標值相等的各點連成的平滑曲線。在該曲線上的點均滿足表達式F(x,y)=P。當平面內存在多個等值線時,可以比較直觀的表達出該平面上P的變化規律[12]。為更高精度、高效率地繪制降水數據等值線,本次研究采用Delaunay三角網(見圖2)算法進行非柵格數據的差值[13]。此外,為增強等值線圖的可讀性,除原本的標記等值線,還使用不同顏色來加強數據的直觀程度。

圖1 等值線示意

圖2 三角網示意
本次研究需批量下載NECP官網所發布的最新GRIB文件并對其進行解析;之后,利用解析所得的數據生成中國降水等值線圖,再對等值線圖進行相關的圖像處理,使其附加上項目所需的文本信息(項目名稱、預報時間等);最后,對等值線圖進行美化處理,以滿足產品級要求。
由于本研究需一次生成大量等值線圖,并為保證信息的時效性;因此,對整套流程速度要求較高,需具備較高穩定性以及工作效率。同時,考慮到實際需求,本項目開發環境需在微軟Windows平臺下(具體以Windows7 x86或同級別服務器系統為準),且占用較少的磁盤及運行空間。
依照現代計算機軟件科學的設計理念[14](見圖3),本項目可大致分為:下載模塊、數據處理模塊、繪圖模塊、配置模塊以及主模塊等5個模塊。

圖3 模塊與流程
下載模塊主要負責對源文件的下載與解析,以每張等值線圖一個文件的形式生成可以直接讀的數據文件;配置模塊主要負責讀取相關配置,載入配置好的資源以及流程,減少系統與外部交互的冗余部分;數據處理模塊主要負責數據的處理,包括對數據的增添、刪除以及網格化插值等操作;繪圖模塊負責將地理信息圖層或圖片按一定的要求進行疊加,并添加相應的文字說明,以達到美觀的效果;主模塊負責控制其余三個模塊以及總體流程,并保障所有模塊流程都能夠有序高效的執行。
在繪圖模塊中,當進行地理信息圖層的疊加操作時,由于圖層中心點的位置以及比例尺可能并不相同,因此應先基于地理信息對圖層進行縮放平移再進行疊加(見圖4)。

圖4 地理坐標與像素點的換算
流程上,主模塊會首先啟動配置模塊并讀取事先保存好的配置信息,之后根據配置信息啟動下載模塊,并通過下載模塊下載需要的源文件并進行解析。當下載模塊完成解析之后會將消息返回給主模塊,此時主模塊會啟動數據處理以及繪圖模塊進行數據的處理、等值面的繪制以及部分疊加工作。在數據處理模塊完成等值面的繪之后,會將等值面傳遞給繪圖模塊,繪圖模塊會將等值面以及其他圖層信息進行疊加操作并保存到存儲設備上。這樣就完成了一張等值面圖的生成。而主模塊會多次重復這些動作直到任務完成。當全部作業完成后,主模塊會更新配置模塊中的配置信息,并保存到存儲設備上,以方便下次啟動。
數據結構是計算機存儲、組織數據的方式,是指相互存在一種或多種特定關系的數據元素集合[15]。
針對軟件不同模塊,所使用的數據元素也是不一樣的。本次插件開發共使用了6種數據元素:散點對象、柵格對象、文本對象、圖像對象、地理圖層對象、GRIB對象。其中,前兩個對象主要位于數據處理模塊,GRIB對象主要位于下載模塊,其余四個對象位于繪圖模塊。各對象之間的相關關系和轉換關系見圖5。

圖5 數據結構
經調試檢驗發現,該插件能夠較為穩定高效地輸出直觀大方的降水等值線圖,使得GRIB2文件格式的降水數據產品直觀且方便用戶操作,適用于投入到實際的生產實踐過程中去。圖6展示了2018年12月上旬CFSv2數據的處理成果。

圖6 全國中長期預報降水等值線圖成果示意(單位:mm)
為縮短開發時間,提升開發效率,本項目部分模塊調用了第三方庫(軟件)。各軟件名稱與功能說明如下:
(1)Wgrib2。Wgrib2是GRIB的一款解析器,它可以快速地獲取GRIB文件的文件頭,并根據文件頭所提供的信息將GRIB文件解析成文本或二進制文件。本項目將通過使用它來完成對GRIB2文件的快速解析。
(2)Numpy。Numpy是一個數值計算擴展庫,比一般常見的計算結構要更加高效。其中提供了大量與矩陣處理、矢量計算等高等數值計算的相關工具。這對科學計算有著極大的幫助。本項目將利用Numpy進行高效的科學計算。
(3)PIL。PIL(Python Image Library)是Python的一個圖像處理插件,主要處理以像素所構成的數字圖像??梢岳闷渌鶐У谋姸喙ぞ吆唵斡行У膶D像進行相關編輯操作。本項目將使用其進行圖層圖像以及文字的疊加。
(4)Matplotlib。Matplotlib是一個矢量繪圖插件,主要用于生成出版質量級別的圖形。如直方圖、散點圖以及流程圖等。本項目使用Matplotlib及其自帶的一些算法進行數據的網格化并生成等值面。
本文對于CFSv2數據構建了完整的地理信息系統插件,覆蓋了數據處理、繪圖等流程,并利用Python得出等值線圖,以方便后續水文模擬中進行中長期預報作業。在本次插件的設計過程中,主要遇到了3個問題:
一是,下載時間問題。實際測試時,發現由于網速問題,導致下載時間過長,影響系統效率。解決方法是使用多線程技術;同時下載多個文件,并采用工作流的方式進行處理,減少系統等待時間,提高效率。
二是,連接失敗問題。由于CFS文件服務器距離較遠,且有連接數量限制。導致存在網絡連接失敗而無法下載的情況。解決方法是捕捉異常,并根據異常采取相對應手段,嘗試多次下載。盡可能保證文件成功下載。
三是,Wgrib2的輸出問題。當對wgrib2進行無界面化封裝后,程序出現報錯。經查,原因為解析所生成文件的格式發送改變,于非特定位置混入了原輸出信息。后嘗試對wgrib2程序輸出進行重定向后,故障排除。此外,在對數據進行驗證時,發現數據錯誤。推測為wgrib2解析數據時的方向性問題。經檢測,發現wgrib2的數據輸出為由左到右,由下到上。對相應代碼進行調整后,數據正確,故障排除。