早崎トップ 研究(気候気象) 研究(大気汚染) データリスト Linux Tips Mac Tips

HDF_setup

HDF & HDF-EOS のセットアップ

私の個人的な趣味の問題なのだが... tar ball を使う.

  用意するもの

  • 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)