HDF & HDF-EOS のセットアップ
私の個人的な趣味の問題なのだが... tar ball を使う.
- See also HDF5・HDF-EOS5 のセットアップ
- See also HDF4・HDF-EOS 使用方法 (hysk): 読み出しサンプルプログラムなど
用意するもの
- jpegsrc.v6b.tar.gz
- szip-2.1.tar.gz (SZIP 圧縮を使用するため; SZIP Compression HDF Products; ページ右側部分の "To obtain:" から source を取得できる)
- HDF4.2r4.tar.gz (HDFデータ取扱い用のライブラリ)
- HDF-EOS2.16v1.00.tar.Z (テストもしたけりゃ HDF-EOS2.16v1.00_TestDriver.tar.Z も取得).HDF-EOS 最新版FTPサイト
zlib (libz.a) は,大抵の場合 /usr/lib/ (64-bit機なら,/usr/lib64/)以下にインストール済みのはず. jpeg のライブラリは shared object なら入っている. ただし,HDF は static library しかサポートしないので,ここでは手動インストールする. (You can get a source code from zlib Home Site.)
前提条件
- HDFインストール以前に,下記の準備がなされていることを確認する:
- 開発環境がインストール済みである
- yum groupinstall "Development Tools" "Development Libraries" をやっとけ
- Cコンパイラはシステム標準の gcc で可能. ただし,Fedora 11 では Intel C compiler (icc) でないと失敗した. 原因不明だが,とりあえず使えるのでこれ以上追求しない.
- Fortran コンパイラは Intel Fortran とする
- 使用コンパイラを環境変数 FC に設定しておく
- gfortran でもコンパイラ成功(2015-09-11). Intel Fortran の場合とほとんど同じ. 微妙な違いは後述.
HDF/HDF-EOS インストール時に関係する条件・環境変数
FC=/usr/local/intel/Compiler/11.1/056/bin/intel64/ifort FFLAGS=" -assume byterecl -convert big_endian "
- Intel Fortran のインストール先はデフォルト (/opt/intel/Compiler/...)と異なる
- ifort ないし icc のバージョン依存性は未確認
- FFLAGS の設定は,自分の個人的ルールに基づく.別に big endian である必要はない(はず).
手順
jpeg ライブラリ(libjpeg.a)のインストール
tar xzf jpegsrc.v6b.tar.gz cd jpeg-6b/ ./configure --prefix=/usr/local make sudo make install ; sudo make install-lib
ヘッダファイルは必要あるのか否か,未確認.
szip のコンパイル (/usr/local/{lib,include}/ 以下にインストール)
tar xzf szip-2.1.tar.gz cd szip-2.1/ ./configure --prefix=/usr/local make sudo make install
- szip のインストール結果を確認 (szipの他に何もなければ,以下のものがあるはず)
$ \ls -l /usr/local/lib total 116 -rw-r--r-- 1 root root 50706 Aug 21 19:16 libsz.a -rwxr-xr-x 1 root root 815 Aug 21 19:16 libsz.la lrwxrwxrwx 1 root root 14 Aug 21 19:16 libsz.so -> libsz.so.2.0.0 lrwxrwxrwx 1 root root 14 Aug 21 19:16 libsz.so.2 -> libsz.so.2.0.0 -rwxr-xr-x 1 root root 51111 Aug 21 19:16 libsz.so.2.0.0 $ \ls -l /usr/local/include total 16 -rw-r--r-- 1 root root 3470 Aug 21 19:16 ricehdf.h -rw-r--r-- 1 root root 705 Aug 21 19:16 szip_adpt.h -rw-r--r-- 1 root root 5282 Aug 21 19:16 szlib.h
HDF4.2r4 のインストール
HDF4.2r4 をコンパイル,/usr/loca/HDF4.2r4/ 以下にインストール
export F77=$FC export CFLAGS="-DHAVE_NETCDF" tar xzf HDF4.2r4.tar.gz cd HDF4.2r4 ./configure --prefix=/usr/local/HDF4.2r4 --with-szlib=/usr/local make >& log_make.txt & (進行状況の確認は,別ウィンドウにて tail -f log_make.txt で監視) make check >& log_make_check.txt (進行状況の確認は,別ウィンドウにて tail -f log_make_check.txt で監視) sudo make install
HDF-EOS のコンパイル&インストール
tar xzf HDF-EOS2.16v1.00.tar.Z tar xzf HDF-EOS2.16v1.00_TestDriver.tar.Z cd hdfeos/ ./configure CC="/usr/local/HDF4.2r4/bin/h4cc -Df2cFortran" --enable-install-include \ --with-szlib=/usr/local --with-hdf4=/usr/local/HDF4.2r4 --prefix=/usr/local/HDF-EOS_2.16 make >& log_make.txt make check >& log_make-check.txt sudo make install
make check では失敗するが,無視する.たぶん問題無し.
シンボリックリンクを張る
sudo ln -s /usr/local/HDF4.2r4 /usr/local/hdf4 sudo ln -s /usr/local/HDF-EOS_2.16 /usr/local/hdfeos ※直接 /usr/local/hdf4 などをインストール先としないのは, バージョンアップ時の動作検証を容易にする目的があるから.
環境設定
必要な情報を環境変数に追記. 自分の場合, /etc/profile に書いた. 個人使用計算機なら,個人の$HOME にある設定ファイル(~/.bashrc など)でも可.
### HDF 4.2r4 HDF_HOME=/usr/local/hdf4 HDF_LIB=$HDF_HOME/lib HDF_INC=$HDF_HOME/include PATH="$HDF_HOME/bin:$PATH" LD_LIBRARY_PATH=${HDF_LIB}:$LD_LIBRARY_PATH MANPATH="$HDF_HOME/share/man:${MANPATH}" ### HDF-EOS HDFEOS_HOME=/usr/local/hdfeos HDFEOS_LIB=$HDFEOS_HOME/lib HDFEOS_INC=$HDFEOS_HOME/include LD_LIBRARY_PATH=${HDFEOS_LIB}:$LD_LIBRARY_PATH ### AIRS READER (Sample programs and C/Fortran include files for reading Aqua/AIRS data) AIRS_INC=/usr/local/airs-fc-readers export HDF_HOME HDFEOS_HOME export HDF_INC HDFEOS_INC AIRS_INC export HDF_LIB HDFEOS_LIB LD_LIBRARY_PATH=/usr/X11R6/lib:/usr/local/lib:$LD_LIBRARY_PATH export LD_LIBRARY_PATH
HDF 参照情報
- The HDF 4.2r3 documentation = ftp://ftp.hdfgroup.org/HDF/Documentation/
- HDF product page = http://hdfgroup.org/products/hdf4/
- SZIP Compression HDF Products:
SZIP に関する説明.ページ右側部分の "To obtain:" から source を取得できる.
- SZIP 圧縮は,圧縮効率はそれほど高くないが,圧縮・解凍の速度が早い(らしい).
- 衛星データのように莫大なデータサイズを扱うには圧縮が不可欠だろうが,圧縮・解凍の速度が遅いと解析する気も失せる. 記憶領域は,機材を増設すれば何とか出来るが,データ入出力での遅延は解決が難しい.
- 「速度重視」というコンセプトは非常に合理的だと言える.
動作検証環境
正常動作を検証済みの環境
CPU | OS or distribution | kernel | C | Fortran |
---|---|---|---|---|
Intel Xeon E5-2660 v3 2.6GHz | CentOS 6.7 | 2.6.32-504.16.2.el6 | gcc 4.4.7 (20120313) | gfortran (same as gcc) 4.4.7 (20120313) |
Intel Core i5-3540S 2.8GHz | CentOS 7.1 | 3.10.0-229.11.1.el7 | gcc 4.8.3 (20140911) | gfortran (same as gcc) 4.8.3 (20140911) |
Intel Centrino | CentOS 5.3 | 2.6.18.164.el5 | gcc 4.1.2 (20080704) | Intel Fortran 10.1.022 (32-bit) |
Intel Core2Quad Q9550 (2.83GHz) | CentOS 5.3 | 2.6.18-128.7.1.el5.centos.plus | gcc 4.1.2 (20080704) | Intel Fortran 11.0.081 (64-bit) |
Intel Xeon L5410 (2.33GHz) | CentOS 5.3 | 2.6.18-128.7.1.el5.centos.plus | gcc 4.1.2 (20080704) | Intel Fortran 11.1.056 (20090827; 64-bit) |
AMD Athlon64 X2 4400 | Fedora 11 | 2.6.30.8-64.fc11.x86_64 | Intel C 11.1.056 (20090827; 64-bit) | Intel Fortran 11.1.056 (20090827; 64-bit) |
- 備考
- Fedora 11 では,glibc-static パッケージを yum install する必要あり (/usr/lib64/libm.a が入ってなかったため, 標準インストールではHDF-EOS読み出しFortranプログラムのコンパイルに失敗した)
- HDF-EOS 読み出しプログラムのコンパイルから始める sh スクリプトを at コマンドで投入すると,コンパイルに失敗する. ifort のコンパイルオプションに static オプションをつける (FFLAGS = -Bstatic を設定, ifort $FFLAGS read_hdfeos2.f90) ことで解決
動作が失敗する環境
CPU | OS or distribution | kernel | C | Fortran |
---|---|---|---|---|
AMD Athlon64 X2 4400 | Fedora 11 | 2.6.30.8-64.fc11.x86_64 | gcc 4.4.1 (20090725) | Intel Fortran 11.0.081 (64-bit) |
Intel Xeon L5410 (2.33GHz) | CentOS 5.3 | 2.6.18-128.7.1.el5.centos.plus | gcc 4.1.2 (20080704) | Intel Fortran 10.1.022 (64-bit) |