netCDF形式は大気科学関係のデータでよく使用されますが,このデータをC言語やFortranで使用するためにはライブラリが必要です.以前はソースコードを落としてきて全て自分でコンパイルするのが標準的でしたが,いまはパッケージマネージャでインストール出来るようになりましたし,システム上の様々なアプリケーションがnetCDFを使用するようになったので,下手に自分で構築したライブラリにPATHを通しているとアプリケーション間でコンフリクトすることがあります.そこで,できる限りパッケージマネージャでインストール出来る,つまり依存関係とコンフリクトを監視してもらえる状態でインストールしておき,コンパイラやマシンに依存するような部分だけを自前でコンパイルするのが安全なインストール方法ではないかと思います.全てGNUコンパイラで閉じるような場合には自前でコンパイルすることはない,ということになります.
具体的には,HDF5,netcdf for C までパッケージマネージャを使ってGNUでコンパイルされたライブラリをインストールします.そしてモジュールがコンパイラ依存になってしまうFortran向けライブラリだけ自分でコンパイルします.以下,その手順を記しておきます.
1. GNUコンパイル済みライブラリのインストール
HDF5とnetcdf, netcdf-fortranをインストールします.GNUコンパイラでFortranプログラムをコンパイルする場合のために,GNU版のnetcdf-fortranもインストールしておきます.
RedHat系の場合
># yum install hdf5-devel hdf5-static
># yum install netcdf-devel netcdf-static
># yum install netcdf-fortran-devel
SUSE系の場合
># zypper install hdf5 hdf5-devel hdf5-devel-static
># zypper install netcdf netcdf-devel netcdf-devel-static
># zypper install netcdf-fortran netcdf-fortran-devel netcdf-fortran-static
2. GNU以外のコンパイラでnetcdf-fortranをインストール
GNU版のHDF5とnetcdfを利用してnetcdf-fortranをintel compilerでコンパイルします.ここではintel compilerの例を記載します.基本的には他のコンパイラでも同じですので,コンパイラのオプションを読み替えてください.
まず,unidata netcdf download pageからnetcdf-fortranのソースをダウンロードし,適当な場所に展開しておきます.その後,下記のような環境変数とともにconfigureを実行します.この例では,インストール先が"/ap/intel/netcdf-fortran/4.4.4"ですがどこでも構いませんので適宜読み替えてください.
config-intel.sh
export CDFROOT="/usr"
export LD_LIBRARY_PATH="${CDFROOT}/lib64:${LD_LIBRARY_PATH}"
export LDFLAGS="-L${CDFROOT}/lib64 -I${CDFROOT}/include"
export OPTIM="-O3 -mcmodel=large -fPIC ${LDFLAGS}"
#
export CC=icc
export CXX=icpc
export FC=ifort
export F77=ifort
export F90=ifort
export CPP='icc -E -mcmodel=large'
export CXXCPP='icpc -E -mcmodel=large'
export CPPFLAGS="-DNDEBUG -DpgiFortran ${LDFLAGS}"
#
export CFLAGS=" ${OPTIM}"
export CXXFLAGS=" ${OPTIM}"
export FCFLAGS=" ${OPTIM}"
export F77FLAGS=" ${OPTIM}"
export F90FLAGS=" ${OPTIM}"
#
./configure --prefix=/ap/intel/netcdf-fortran/4.4.4 \
--enable-large-file-tests --with-pic
あとは,make, make installと進めればOKです.
インストールがちゃんと出来たようであれば最後にPATHを通しておきましょう.
export NETCDFF="/ap/intel/netcdf-fortran/4.4.4"
export PATH="${NETCDFF}/bin:${PATH}"
export LD_LIBRARY_PATH="${NETCDFF}/lib64:${LD_LIBRARY_PATH}"
export MANPATH="${NETCDFF}/man:${MANPATH}"
3. 問題対策
これでインストールすると,ライブラリは"~~/4.4.4/lib64"として,lib64ディレクトリの中に入ります.しかし,nf-configを実行するとnetcdf-fortranのLD_PATHが"~~/lib"と表記されます.インストール先とnf-configが合いませんので,nf-confgを用いてconfigureを行うアプリケーションをコンパイルするとnetcdf-fortranライブラリが正しくサーチされず,Linkingの時点でコンパイルに失敗してしまいます.そこで,Tentativeな対策ですが,lib64の中身をlibとしても静的リンクするかコピーしておきましょう.
># cp /ap/intel/netcdf-fortran/4.4.4/lib64 /ap/intel/netcdf-fortran/4.4.4/lib
以上で終了です.
WRFの後処理ソフト "ARWpost" を使ったいた時の問題です.最近あまりWRFを使っていなかったので私が取り残されている…ということも考えられますが…
ここには,CentOS7を使って解析等を行うために必要な準備をメモしておきます.いくつか以前のバージョンと異なる操作が含まれていますのでご注意ください.
Vine Linuxのバージョンが上がって、インストールされているnetcdfとhdf5のバージョンも上がってきたので、前にメモした時よりも新しいncviewがRPMでインストール出来るようになりました!
ある computerにnetcdfをインストールするときのconfigureをメモしておきます。結構たくさんのプログラムがnetcdfを必要としますが、あるコンピュータにはライブラリとして用意されていませんので自力で入れないといけないですね〜。ただし、ここにあげた方法が完全に正しいという保証はいたしません…ご容赦ください。
本日は x86 Open64 Compiler Suite を用いて netcdf と mpich2 をコンパイルする時の設定について情報をあげておきます。今回の情報は少し試行錯誤した結果ですので、ほかに最適な方法があるかもしれません。もし何かご存じでしたらご教授願います。
今回はWRFのnetcdf関連のエラー報告です。WRFのコンパイル時に、この記事の最後に添付したようなメッセージを吐いてコンパイルに失敗するというエラーに遭遇しました。本文はかなり複雑で長いため、はじめに概要を述べておきます。