向玉紅
(南京信息工程大學 教務處,江蘇 南京 210044)
HDF5數(shù)據(jù)接口的二次開發(fā)
向玉紅
(南京信息工程大學 教務處,江蘇南京210044)
HDF5(Hierarchical Data Format,HDF)數(shù)據(jù)具有自我描述、跨平臺、支持平行讀寫的優(yōu)勢,被世界氣象組織列為氣象數(shù)據(jù)通用存儲格式。Fortran是氣象工作者的主要編程語言,文章將介紹如何用Fortran語言對HDF5數(shù)據(jù)接口的二次開發(fā),實現(xiàn)HDF5數(shù)據(jù)接口高效封裝,讓讀寫HDF5變得簡單易行。
HDF5;Fortran;二次開發(fā)
氣象觀測資料是開展氣象研究和氣象業(yè)務的基礎。全球已逐步建立了較為完善的天基、空基和地基相結合的觀測體系,提供了包括常規(guī)氣象資料、衛(wèi)星、雷達和探空等多種非常規(guī)觀測資料,而不同的資料還采取不同的格式進行存儲和傳播。我國氣象局的常規(guī)觀測資料采取的ASCII格式存儲,歐洲中心(ECMWF)的數(shù)值預報產(chǎn)品使用GRIB和Burf格式進行編碼,我國臺灣地區(qū)和美國合作的GPS掩星資料采用的是NETCDF格式。不同的數(shù)據(jù)格式給用戶帶來了諸多不便,建立一種高效、通用的標準化數(shù)據(jù)格式是大氣和遙感領域在數(shù)據(jù)存儲方面急需解決的問題。1998年美國國家航空與航天管理局( NASA)、美國國家計算機安全協(xié)會與美國三大實驗室( IINI,LANL,SNI)合作設計開發(fā)了一種新型的數(shù)據(jù)格式HDF5。HDF5具有自我描述、自我組織、可擴展、跨平臺和支持并行讀寫功能,被世界氣象組織列為氣象數(shù)據(jù)通用存儲格式。目前,越來越多的單位和機構采用HDF5格式來存儲數(shù)據(jù),如美國NOAA系列衛(wèi)星,歐洲的系列衛(wèi)星和我國風云系列衛(wèi)星。HDF5是一種層次式數(shù)據(jù)存儲格式,直接讀取HDF5文件是比較困難的,用戶需要用HDF5提供的接口程序?qū)ξ募M行操作。如何讓讀寫HDF5變得簡單和易行是本文關注的重點。
HDF5文件有兩種基本數(shù)據(jù)對象組(group)、數(shù)據(jù)集(datasets)和3種輔助對象:數(shù)據(jù)類型(datatype)、數(shù)據(jù)空間(dataspace)和屬性(attribute)。如圖1所示,HDF5文件結構類似于Unix操作系統(tǒng)下的文件目錄結構,組和數(shù)據(jù)集類比與文件夾和文件,最上級為根組(root group),下面包括組、數(shù)據(jù)集和全局屬性。組可以包含數(shù)據(jù)文件,也可以包含其他的組對象,從而形成一個層遞式的數(shù)據(jù)對象。數(shù)據(jù)集主要有數(shù)據(jù)空間(數(shù)組)和相關的描述信息(局地屬性),說明數(shù)據(jù)類型和數(shù)據(jù)的維數(shù)大小。全局屬性是用來描述整個HDF5文件的屬性信息。
HDF5的本質(zhì)是一個包括數(shù)據(jù)集和元數(shù)據(jù)的文件。HDF5庫提供了C和Fortran數(shù)據(jù)接口(API),這些API供用戶進行HDF5文件讀寫操作。所以,在利用這些API之前,先要安裝HDF5庫文件。如果要使用HDF5庫提供的Fortran API,在安裝庫的時候要使用選項confgure --enble-fortran(--enable-fortran2003)。在安裝目錄的lib目錄下有兩個靜態(tài)鏈接庫libhdf5.a和libhdf5_ fortran.a,這兩個文件分別是C和Fortran的API。下面以Fortran讀取HDF5數(shù)據(jù)集為例介紹基于API的二次開發(fā)。
圖1 HDF5文件結構示意
要利用API接口,在Module里邊就要用到USE HDF5。讀取數(shù)據(jù)集就必須要考慮數(shù)據(jù)類型和數(shù)據(jù)空間這兩個問題。因此,針對每一個數(shù)據(jù)類型和不同的空間維數(shù)分別寫一個函數(shù),如讀取一維的實型(4字節(jié))數(shù)據(jù)集,過程名H5Read_Real4_1d(cfname,cdataset,dataset). cfname是要讀取的HDF5的文件名,cdataset是數(shù)據(jù)集的名字(類似目錄結構),dataset就是用來讀取數(shù)據(jù)集的數(shù)值。具體過程如下:先利用API H5open_f初始化,然后用h5fopen_f打開文件,返回文件句柄,接著用h5dopen_f打開數(shù)據(jù)集,返回數(shù)據(jù)集的句柄,后面就是分配內(nèi)存空間,然后用h5dread_f讀取數(shù)據(jù)集并且返回值。實現(xiàn)代碼如下(有刪減):
Fortran的數(shù)據(jù)類型有整型、實型和字符型,每一種類型按照不同的維數(shù)完成相應的過程代碼,如H5Read_ Real4_1d,H5Read_Int1_1d,H5Read_ReadString_1d....。最后用Fortran提供的重構(overload)功能,把這些不同類型不同維數(shù)的Module重構在一個Interface里。這樣,無論是什么類型的數(shù)據(jù)集也不管它是幾維數(shù)組,都用一個函數(shù)hdf5read去完成。最后,把這些文件編譯并arch成靜態(tài)庫libhdf5_read.a供用戶使用。代碼如下:
本文重點討論了用HDF5的二次開發(fā)技術。通過封裝API函數(shù),使得讀取HDF5的數(shù)據(jù)集變得非常簡單。本軟件的完成對于推動HDF5在我國的普及和傳播起到積極了的推動作用。利用同樣的方法和思路,很容易就可以完成其他類似數(shù)據(jù)格式的API封裝,如HDF4,HDF-EOS和NETCDF。本文給具有描述性的數(shù)據(jù)格式的封裝提供了一個有益的參考。
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— ),女,湖北鶴峰,大專,助理工程師;研究方向:多媒體管理和維護。