NetCDF4の関数を使ってHDF5形式のGPM DPR v3 プロダクトを読み込む
全球降水観測(Global Precipitation Measurement; GPM)計画のコア衛星に搭載された「雨雲スキャンレーダ」こと 二周波降雨レーダ(Dual-frequency Precipitation Radar; DPR)は, 熱帯降雨観測衛星(Tropical Rainfall Measuring Mission; TRMM)に 搭載された降雨レーダ(Precipitagion Radar; PR)の次世代センサである. DPRはKuPR, KaPRの二つのレーダを搭載し, KuPRはTRMM PRと同じ周波数(13 GHz), KaPRは新規周波数(35 GHz)のレーダである. DPRの詳細は大本山(全球降水観測計画) に譲るとして, ここではデータの読み込みについて触れる.
DPRを含むGPMプロダクトはHDF5形式によって提供されている. TRMM PR (v7) や CloudSat CPRのデータ形式はHDF4であるが, HDF4とHDF5に互換性はない. そのため, HDF4の遺産を使ってHDF5のデータを読み込むことは出来ず, HDF5の読み込み方法を新たに習得する必要がある. データ読み込みの基本的な流れはHDF4と変わらないので, HDF5の関数を使っていけば,データの読み込みは出来る.
しかし, HDF5の関数はFortran使いには少し使い勝手が悪い. なぜなら, 現状のFortran版のHDF5の読み込み関数は2 byte 整数に対応していないようである. 緊急避難的な用法として, 2 byte characterの読み込みからbit数を参照して2 byte整数に 変換することが可能であるが, 面倒なことこの上ない(筆者の無知によることが原因で, 実は出来るのかもしれません).
そこで, ここではNetCDF4の関数を使ってDPRのデータを読み込むことにする. 実は, NetCDF4はHDF5のライブラリを使用しているため, NetCDF4とHDF5のデータ形式はほぼ等しい. 先ほど挙げた問題は, (何故かは知らないが) NetCDF4の関数を使用するにおいては問題にならない. また, NetCDF4はHDF4の読み込みにもオプションで対応しているので, NetCDF4をマスターすれば, HDF4やHDF5だけでなくNetCDF3にも対応がほぼ出来る (ただし, 筆者はHDF4のvdata読み込みが出来ない).
簡単に言えば,宝探しゲームみたいなものか?暗号を解いて,宝箱の中身をとりだすイメージ?
では上記のことをどうやってするか,である.初心者にはこれが大問題. 筆者は次のようにして読み込んでいる(Fortran使い).
とりあえずどんな感じになるかはこれ
サンプル(NetCDF4)とりあえずどんな感じになるかはこれ
サンプル(compile)コンパイルは出来たかな?
NetCDF4はNetCDF enhancedをサポートさせる必要がある. ちょっと面倒. Anacondaでもろもろインストールできる. ただし, ライブラリをインストールするときのコンパイラと計算するプログラムのコンパイラは一致しないと問題が起きる.
h5fc を使えたらそれを使うとよい. Anacondaでもろもろインストールできる. ただし, ライブラリをインストールするときのコンパイラと計算するプログラムのコンパイラは一致しないと問題が起きる. 16bit整数は32bit整数で用意すれば読めるらしいが, よく分からない.