向玉紅
(南京信息工程大學 教務處,江蘇 南京 210044)
HDF5數據接口的二次開發
向玉紅
(南京信息工程大學 教務處,江蘇南京210044)
HDF5(Hierarchical Data Format,HDF)數據具有自我描述、跨平臺、支持平行讀寫的優勢,被世界氣象組織列為氣象數據通用存儲格式。Fortran是氣象工作者的主要編程語言,文章將介紹如何用Fortran語言對HDF5數據接口的二次開發,實現HDF5數據接口高效封裝,讓讀寫HDF5變得簡單易行。
HDF5;Fortran;二次開發
氣象觀測資料是開展氣象研究和氣象業務的基礎。全球已逐步建立了較為完善的天基、空基和地基相結合的觀測體系,提供了包括常規氣象資料、衛星、雷達和探空等多種非常規觀測資料,而不同的資料還采取不同的格式進行存儲和傳播。我國氣象局的常規觀測資料采取的ASCII格式存儲,歐洲中心(ECMWF)的數值預報產品使用GRIB和Burf格式進行編碼,我國臺灣地區和美國合作的GPS掩星資料采用的是NETCDF格式。不同的數據格式給用戶帶來了諸多不便,建立一種高效、通用的標準化數據格式是大氣和遙感領域在數據存儲方面急需解決的問題。1998年美國國家航空與航天管理局( NASA)、美國國家計算機安全協會與美國三大實驗室( IINI,LANL,SNI)合作設計開發了一種新型的數據格式HDF5。HDF5具有自我描述、自我組織、可擴展、跨平臺和支持并行讀寫功能,被世界氣象組織列為氣象數據通用存儲格式。目前,越來越多的單位和機構采用HDF5格式來存儲數據,如美國NOAA系列衛星,歐洲的系列衛星和我國風云系列衛星。HDF5是一種層次式數據存儲格式,直接讀取HDF5文件是比較困難的,用戶需要用HDF5提供的接口程序對文件進行操作。如何讓讀寫HDF5變得簡單和易行是本文關注的重點。
HDF5文件有兩種基本數據對象組(group)、數據集(datasets)和3種輔助對象:數據類型(datatype)、數據空間(dataspace)和屬性(attribute)。如圖1所示,HDF5文件結構類似于Unix操作系統下的文件目錄結構,組和數據集類比與文件夾和文件,最上級為根組(root group),下面包括組、數據集和全局屬性。組可以包含數據文件,也可以包含其他的組對象,從而形成一個層遞式的數據對象。數據集主要有數據空間(數組)和相關的描述信息(局地屬性),說明數據類型和數據的維數大小。全局屬性是用來描述整個HDF5文件的屬性信息。
HDF5的本質是一個包括數據集和元數據的文件。HDF5庫提供了C和Fortran數據接口(API),這些API供用戶進行HDF5文件讀寫操作。所以,在利用這些API之前,先要安裝HDF5庫文件。如果要使用HDF5庫提供的Fortran API,在安裝庫的時候要使用選項confgure --enble-fortran(--enable-fortran2003)。在安裝目錄的lib目錄下有兩個靜態鏈接庫libhdf5.a和libhdf5_ fortran.a,這兩個文件分別是C和Fortran的API。下面以Fortran讀取HDF5數據集為例介紹基于API的二次開發。

圖1 HDF5文件結構示意
要利用API接口,在Module里邊就要用到USE HDF5。讀取數據集就必須要考慮數據類型和數據空間這兩個問題。因此,針對每一個數據類型和不同的空間維數分別寫一個函數,如讀取一維的實型(4字節)數據集,過程名H5Read_Real4_1d(cfname,cdataset,dataset). cfname是要讀取的HDF5的文件名,cdataset是數據集的名字(類似目錄結構),dataset就是用來讀取數據集的數值。具體過程如下:先利用API H5open_f初始化,然后用h5fopen_f打開文件,返回文件句柄,接著用h5dopen_f打開數據集,返回數據集的句柄,后面就是分配內存空間,然后用h5dread_f讀取數據集并且返回值。實現代碼如下(有刪減):

Fortran的數據類型有整型、實型和字符型,每一種類型按照不同的維數完成相應的過程代碼,如H5Read_ Real4_1d,H5Read_Int1_1d,H5Read_ReadString_1d....。最后用Fortran提供的重構(overload)功能,把這些不同類型不同維數的Module重構在一個Interface里。這樣,無論是什么類型的數據集也不管它是幾維數組,都用一個函數hdf5read去完成。最后,把這些文件編譯并arch成靜態庫libhdf5_read.a供用戶使用。代碼如下:

本文重點討論了用HDF5的二次開發技術。通過封裝API函數,使得讀取HDF5的數據集變得非常簡單。本軟件的完成對于推動HDF5在我國的普及和傳播起到積極了的推動作用。利用同樣的方法和思路,很容易就可以完成其他類似數據格式的API封裝,如HDF4,HDF-EOS和NETCDF。本文給具有描述性的數據格式的封裝提供了一個有益的參考。
Secondary development of HDF5 data interface
Xiang Yuhong
(Dean's Offce of Nanjing University of Information Engineering, Nanjing 210044, China)
HDF5 is a data model with the advantages of self description, cross platform, supporting parallel reading and writing, which is adopted as a common format of meteorological data storage by World Meteorological Organization(WMO). Fortran is the main programming language of meteorological workers. This paper will focus on how to use Fortran language to develop HDF5 data interface,aiming to fnd an easy way to read and write HDF5 data.
HDF5; Fortran; secondary development
向玉紅(1977— ),女,湖北鶴峰,大專,助理工程師;研究方向:多媒體管理和維護。