WSL(Ubuntu18.04 LTS)を新規に使用し始めてから、CP2Kの最新版(ver. 7.1)を使用できるようになるまでにしたことをメモします。公式のインストール方法(How to compile the CP2K code)に従って行いました。CP2Kのソースに含まれるtoolchain scriptを利用してほぼ自動でビルドできました。ただ、少しだけエラーなどがあって、うまくビルドできない点があったので、やったことをまとめておくことにしました。
CP2Kをビルドするために必要なツール類
WSLを使用できるようになったうえで以下のツール類をインストールしました。
- build-essential (gcc 7.5, make 4.1)
- gfortran 7.5.0
- cmake-3.15.1
- python2.7以上
gccのバージョンについては、こちらにビルド成功が確認されたバージョン一覧があります。7.5はOKでした。make, gccについは、build-essentialをインストールすれば一緒にはいります。また、 gfortran, pythonはapt install
で入手できるもので問題ありませんでした。
cmakeについては、apt
で入手できるバージョン(3.10.2)では古かったので、ソースからmakeしてインストールしました。
CP2Kに必要なその他のパッケージ
その他のパッケージとして以下をインストールしました。すべてapt install
で入手できました。
- mpich(エラー出るのでopenmpiにした)
- libopenmpi-dev
- libopenblas-dev
- pkg-config
最初mpichをインストールしてCP2Kをビルドしようとしたところ、エラーが出て進めなかったので、openmpiに変更しました。openmpiだと問題なく進みました。
また、toolchainによる自動ビルド中pkg-configのインストールが要求されたので、インストールしました。
openblasはtoolchain中に自動で作成することもできます。ここでは先にパッケージとしてインストールしてしまっていました。
toolchainによるビルド・インストール
CP2Kのサイトを参考に、toolchainによってCP2Kをビルドしました。
GitHubのリポジトリからソースコードをクローンして入手します。(gitは上記の必要なツール類をインストールすると、すでに入っています。)
> git clone --recursive https://github.com/cp2k/cp2k.git cp2k
上記で作成したcp2kに移動して、toolchainを実行します。
> cd tools/toolchain/
スクリプトのオプションを設定しました。基本的に、デフォルトのままでよさそうです。必要そうなオプションはON、パッケージはインストールする設定になっており、スクリプトが自動でソースコードをダウンロードし、buildフォルダ内にライブラリを作成、installフォルダ内にインストールしてくれます。必要ないと思うオプションは--enable-FEATURE=no
や--with-PKG=no
でOFFにできます。また、すでにシステムにインストール済みのものを使用する場合は--with-PKG=system
を設定します。
> ./install_cp2k_toolchain.sh --with-libxsmm=install --with-openblas=system \
--with-reflapack=no --enable-omp
以下のパッケージが自動でインストールされました。
- fftw: FFTW3ライブラリ
- SpFFT: siriusパッケージで使用されるFFTライブラリ
- libint: ハイブリッド汎関数の計算に必要
- libxc: 交換相関汎関数のライブラリ
- libxsmm: x86_64アーキテクチャの場合使用可能。行列積の計算ライブラリ
- scalapack: 並列線形代数ライブラリ。並列計算用CP2Kをビルドするには必要。
- cosma: scalapackの一部を置き換えて高速化するライブラリ
- gsl: gnu scientific library
- spglib: 結晶の対称性を扱うライブラリ
- hdf5: siriusパッケージで使用
- libvdwxc: Van der Waals力をsiriusで扱うためのライブラリ
- sirius: 平面波基底で計算するためのライブラリ
最終的に、./archにlocal.ssmpなどのconfigurationファイルが生成します。これらをすべてcp2k/archにコピーします。
> cd arch
> cp * ~/cp2k/arch
そのうえで、cp2kに移動し、makeします。makeのARCHオプションに作成したlocalを指定し、作成したいバージョンにconfiguration fileの拡張子local.***の***を指定します。-jオプションで並列ビルドができます。
> make -j N ARCH=local VERSION="sopt popt ssmp psmp"
configurationファイルに、先程インストールした種々のライブラリに対するリンクに必要な情報もすべて記載されており、Makefileなどを修正する必要はありませんでした。これでcp2k/exe/local/にcp2k.soptなどの実行ファイルができました。
Regtest
これをテスト(Regtest)します。最初、作成したバージョンすべてを指定して以下のように実行しました。
> make -j N test ARCH=local VERSION="sopt popt ssmp psmp"
しかし、こうするとテスト中にSegmentation Faultなどのエラーが発生して多くのテストが失敗に終わってしまいました。
> make -j N test ARCH=local VERSION="sopt"
バージョン一つづつを指定すると、このようなエラーは発生せず、全てのテスト項目がOKとなって完了しました。これでWSL上からCP2Kが利用できるようになりました。