YAMBOのコンパイル

[YAMBO](http://yambo-code.org)は[ABINIT](https://www.abinit.org/)、[Quantum-ESPRESSO](https://www.quantum-espresso.org/) (QE) により得られた波動関数を元に多体摂動論計算を行うためのプログラムです。
本稿では以下の環境でQEをベースとしたYAMBOのコンパイル方法を説明します。

- システム：Intel(R) Xeon(R) CPU E5-1620 v3 @ 3.50GHz
- コンパイラ：ifort version 19.1.2.254

##準備
`~/.bashrc`に以下を追加し必要なモジュールをログイン時に読み込むように設定します。

```Bash
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`に追加します。

```Bash:make.inc
-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のインクルードファイルのパスを手動で追加しておきます。

```Bash:make.inc
-I$(MKLROOT)/include/fftw
```
`configure`がうまくいけばあとは

```
make pw
```

```
make yambo
```
を実行するだけで最新版（安定版）のyambo, p2y, yppが自動的にダウンロード、コンパイルされます。