#はじめに
目下の悩みである固有値計算のライブラリについて、
implicitly Restarted Arnordi法を用いているARPACK-ngと、
そのC++ラッパーであるARPACKPPを試してみたので、
intelコンパイラを使用してのインストール手順をまとめておく。
#謝辞
情報提供
@septcolor さん
#理論
下記が一番わかりやすい。
http://www.cms-initiative.jp/ja/events/0627yamamoto.pdf
固有値計算に関する日本語の教科書だと、下記は知る限り記述が明瞭でとっつきやすいが、
さすがにimplicitly restartedのくだりに関する記述はなかった。
https://www.iwanami.co.jp/book/b258658.html
#ARPACK-ng
ubuntu環境であればlibarpack2がaptでインストールできるが、
local環境に入れたいので、ソースコードからコンパイルした。
下記よりダウンロード。
git clone https://github.com/opencollab/arpack-ng.git
cmakeもしくはccmakeにてコンパイル。intelコンパイラを用いたが特に問題なし。
intelコンパイラをデフォルト設定でインストールしているなら、
intel MKLのLAPACKとBLASを自動で検知するので、その他のライブラリのインストールは不要。
#ARPACKPP
下記よりダウンロード。
git clone https://github.com/m-reuter/arpackpp.git
ARPACKCPPはテンプレートライブラリでありコンパイルは不要。
includeディレクトリを適当な場所に置き、下記にてexampleが実行可能であることを確認した。
icpc example.cpp -I/arpackppDir/include -L/arpackDir/lib/ -mkl -larpack -lifcore
g++,gfortranの場合は-lifcoreの代わりに-lgfortranを使用すれば問題ないかと。
4スレッド並列計算にて、10000自由度の密行列にかかる時間が10秒程度なので、今の最低限の実用には耐えうるか。
そもそもこんな扱いにくい行列の使用が不可避な現状を改善するほうが早いかもしれない…。