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が自動的にダウンロード、コンパイルされます。