intel fortran + MKL → gfortran + Lapack95

Screenshot from 2015-09-07 01-50-18

intel fortran + MKL から,gfortran + Lapack95 に移行したのでメモ.(OSは,fedora 22)

まず,gfortran と LAPACK をインストール.(BLASも依存関係にあるので,同時に入るはず)

#dnf install gcc-gfortran lapack lapack-devel

問題なくインストールできていれば,DGESVのサンプルコード(software.intel.com)を “test.f” に保存して

$gfortran test.f -lblas -llapack

でコンパイルできるはず.

 

次に,LAPACK95のソースをNetlib(http://www.netlib.org/lapack95/)からダウンロードし,”lapack95.tgz”を適当なところに解凍する.

“LAPACK95″というディレクトリができているはずなので,その中で以下を実行.

$ mv SRC/makefile SRC/Makefile
$ mkdir lapack95_modules

“make.inc” を以下の通り編集.

FC = gfortran
FC1 = gfortran

OPTS0 = -O3
MODLIB = -I./../lapack95_modules
OPTS1 = -c $(OPTS0)
OPTS3 = $(OPTS1) $(MODLIB)
OPTL = -o
OPTLIB =

LAPACK_PATH = -L/usr/lib64

LAPACK95 = -llpack95
LAPACK77 = -llapack
TMG77 = -ltmglib
BLAS = -lblas

最後に,以下を実行してLAPCK95をコンパイル.

$ cd SRC
$ make single_double_complex_dcomplex

これで”lapack95.a” と “lapack95_modules” 内に,モジュール中間ファイルが作成されているはず.

後は,適当なディレクトリ(例えば”/usr/lib64/lapack95″, “/usr/include/lapack95″)を作ってその中にlapack95.aとlapack95_modulesをコピー.

# mkdir /usr/lib64/lapack95
# mkdir /usr/include/lapack95

# cp lapack95.a /usr/lib64/lapack95/liblapack95.a
# cp lapack95_modules/*.mod /usr/include/lapack95

そんでもって “liblapack95.a”に対し,pathの通っている”/usr/lib64″へシンボリックリンクを貼る.

# ln -s /usr/lib64/lapack95/liblapack95.a /usr/lib64/liblapack95.a

これでLAPACK95を使う準備完了のはず.ココ(http://nagappi.hatenablog.com)のサンプルコードを,”inv.f90″に保存して以下が実行できていればOKな「はず」.

$ gfortran inv.f90 -llapack95 -llapack -lblas -I/usr/include/lapack95/

参考

http://www.rcs.arch.t.u-tokyo.ac.jp/kusuhara/tips/linux/fortran.html

http://nagappi.hatenablog.com/entry/20121227/1356582470