YAMBOはABINIT、Quantum-ESPRESSO (QE) により得られた波動関数を元に多体摂動論計算を行うためのプログラムです。
本稿では以下の環境でQEをベースとしたYAMBOのコンパイル方法を説明します。
- システム:Intel(R) Xeon(R) CPU E5-1620 v3 @ 3.50GHz
- コンパイラ:ifort version 19.1.2.254
準備
~/.bashrcに以下を追加し必要なモジュールをログイン時に読み込むように設定します。
module load intel/2020.2.254
module load intelmpi/2020.2.254
module load python/3.8
QEのコンパイル
私は基本的にホームディレクトリでQE/srcというディレクトリを作成し、src/以下にソースコードを展開、コンパイルしています。
ダウンロード
${HOME}/QE/srcで以下を実行しQEの最新版をクローンします(ここではバージョン6.6)。
git clone -b 'qe-6.6' --depth 1 https://gitlab.com/QEF/q-e.git qe-6.6
あるいはwgetを使ってtarボールをダウンロード、展開します。
wget https://gitlab.com/QEF/q-e/-/archive/qe-6.6/q-e-qe-6.6.tar.bz2
コンパイル
qe-6.6あるいはq-e-qe-6.6で以下のようにconfigureを実行します。
MPIF90=mpiifort DFLAGS='-D__OPENMP -D__FFTW3 -D__MPI -D__SCALAPACK' SCALAPACK_LIBS='-L${MKLROOT}/lib/intel64 -lmkl_scalapack_lp64 -lmkl_blacs_intelmpi_lp64' IFLAGS='-I$(TOPDIR)/include -I../include -I ${MKLROOT}/include/fftw/' ./configure --enable-openmp
これは我々のPCクラスター特有の修正ですが、複数の世代のノードがあるため、以下のコンパイラオプションをFFLAGSに追加します。
-xSSE4.2 -axCOMMON-AVX512,CORE-AVX512,CORE-AVX2,CORE-AVX-I,AVX
これでmake.incの用意ができましたのでmakeを実行します。ここでは最小限のpw.xとppのみをコンパイルします。
make pw pp
引数無しでmakeを実行するとコンパイル可能なプログラムの一覧が表示されます。
Yamboのコンパイル
pw.xのコンパイルに成功した後にyamboのコンパイルへと進みます。
ダウンロード
wget https://github.com/yambo-code/yambo/archive/4.5.2.tar.gz
tarボールを展開してyamboディレクトリに移動します。
tar zxvf 4.5.2.tar.gz
cd yambo-4.5.2
コンパイル
yambo-4.5.2でconfigureを実行します。
Scalapackを使用しない場合:
PFC="mpiifort" FC="ifort" F77="ifort" ./configure --enable-mpi --enable-open-mp --enable-dp --with-lapack-libs="-mkl=parallel" --with-blas-libs="-mkl=parallel" --with-fft-libs="-mkl=parallel" --with-iotk-path="${HOME}/QE/src/qe-6.6/iotk"
Scalapackを使用する場合:
PFC="mpiifort" FC="ifort" F77="ifort" ./configure --enable-mpi --enable-open-mp --enable-dp --with-iotk-path="${HOME}/QE/src/qe-6.6/iotk" --with-blas-libs="-lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core -liomp5 -lpthread -lm" --with-lapack-libs="-lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core -liomp5 -lpthread -lm" --with-fft-includedir="${MKLROOT}/include/fftw" --with-fft-libs="-lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core -liomp5 -lpthread -lm" --with-blacs-libs="-lmkl_scalapack_lp64 -lmkl_blacs_intelmpi_lp64 -lmkl_core -liomp5 -lpthread -lm" --with-scalapack-libs="-lmkl_scalapack_lp64 -lmkl_blacs_intelmpi_lp64 -lmkl_core -liomp5 -lpthread -lm"
既にコンパイル済みのlibxcを使用するように指定しましたが、configureのチェック時にエラーが発生するためyamboのコンパイル時にビルドするようになります。
libxcのバージョンを適切に選ぶ必要があるのかもしれません。
configureの出力結果を確認して自分が使用したいオプションが正しく指定されていたならばビルドを開始します。ここでは最低限のコマンドのビルドを行います。
make yambo ypp p2y
QE+Yamboのコンパイル
YamboはQEのプラグインとしてコンパイルすることが可能ですが、QEをconfigureする際のオプションを適切に指定する必要があります。
QEのconfigureを以下のように実行します。
MPIF90=mpiifort DFLAGS='-D__OPENMP -D__FFTW3 -D__MPI -D__SCALAPACK' FFT_LIBS='-lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core -liomp5 -lpthread -lm' LAPACK_LIBS='-lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core -liomp5 -lpthread -lm' BLAS_LIBS='-lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core -liomp5 -lpthread -lm' SCALAPACK_LIBS='-lmkl_scalapack_lp64 -lmkl_blacs_intelmpi_lp64 -lmkl_core -liomp5 -lpthread -lm' BLACS_LIBS='-lmkl_scalapack_lp64 -lmkl_blacs_intelmpi_lp64 -lmkl_core -liomp5 -lpthread -lm' ./configure --enable-openmp
上と同様、make.incを修正してFFTWのインクルードファイルのパスを手動で追加しておきます。
-I$(MKLROOT)/include/fftw
configureがうまくいけばあとは
make pw
make yambo
を実行するだけで最新版(安定版)のyambo, p2y, yppが自動的にダウンロード、コンパイルされます。