GPAWのohtakaへの導入記録 (#3)

[GPAW](https://wiki.fysik.dtu.dk/gpaw/)を東京大学物性研究所システムB (ohtaka) へ導入する/した際の導入手順です。GPAWはprojector augmented wave (PAW) 法をpythonなどを用いて実装された第一原理プログラムで密度汎関数理論に加えて多体摂動論に基づく計算が可能なプログラムです。波動関数は平面波基底、実空間グリッド、あるいはLCAOを用いて記述することが可能です。GPAWは[Atomic simulation environment (ASE)](https://wiki.fysik.dtu.dk/ase/)に基づいて実装されています。

この記事では最新版のGPAW (24.1.0) をインストールした手順を記述します。

## 準備

### ASEのインストール

[過去の記事](https://qiita.com/ikutaro_hamada/items/6e1374438debfeaa84e9)を参照して下さい。

以下の作業は仮想環境が``$(HOME)/ASE/ase_oneapi_2023.0.0``に作成されているとし、以下を実行してから始めます。
```
source ~/ASE/ase_oneapi_2023.0.0/bin/activate
```

### libxcのインストール
libxcをビルド、インストールしておきます。``tddft.org``は現在（2024.04.13）時点で使用されていないようです。最新版 (6.2.2) は以下のようにgitlabから入手することが可能です。
作業ディレクトリで以下を実行します。
```
wget https://gitlab.com/libxc/libxc/-/archive/6.2.2/libxc-6.2.2.tar.gz
```
次に``libxc-6.2.2.tar.gz``を展開、``libxc-6.2.2``ディレクトリに移動して``configure``、``make``の実行を行います（``libxc``はホーム（${HOME}）のlocal以下にインストールすると仮定）。
```
./configure CC=icc CFLAGS="-O2 -fPIC" --enable-shared --prefix=${HOME}/local
```

makeを実行します。
```
make
```
問題無くビルドできれば、チェックした後にインストールを実行します
```
make check
```
``make check``の結果
```
============================================================================
Testsuite summary for libxc 6.2.2
============================================================================
# TOTAL: 1
# PASS:  1
# SKIP:  0
# XFAIL: 0
# FAIL:  0
# XPASS: 0
# ERROR: 0
============================================================================
```
最後に``make install``を実行し、今の場合は``${HOME}/local/lib``に``libxc``をインストールします。
```
make install
```
## GPAWのインストール
GPAWのソースを入手します。

```
wget https://pypi.org/packages/source/g/gpaw/gpaw-24.1.0.tar.gz
```
GPAWを展開、ディレクトリに移動します。
```
tar xf gpaw-24.1.0.tar.gz
```
```
cd gpaw-24.1.0
```
次に``siteconfig.py``を編集します。以下のようになりました。
```
# MPI:
mpi = True
if mpi:
    compiler = 'mpicc'

# openmp
extra_compile_args += ['-fopenmp','-fPIC','-O2','-march=core-avx2']
extra_link_args += ['-fopenmp']
extra_link_args += ['-fPIC', '-O2','-march=core-avx2']

# FFTW3:
fftw = True
if fftw:
    include_dirs += ['/opt/intel/oneapi/mkl/2023.1.0/include/fftw/']

# ScaLAPACK (version 2.0.1+ required):
scalapack = True
if scalapack:
    libraries += ['mkl_scalapack_lp64', 'mkl_blacs_intelmpi_lp64', 'mkl_intel_lp64', 'mkl_intel_thread', 'mkl_core', 'iomp5', 'pthread', 'm']

# - dynamic linking (requires rpath or setting LD_LIBRARY_PATH at runtime):
if 0:
    xc = '/home/k0472/k047203/local/'
    include_dirs += [xc + 'include/']
    library_dirs += [xc + 'lib/']
    # You can use rpath to avoid changing LD_LIBRARY_PATH:
    runtime_library_dirs += [xc + 'lib']
    if 'xc' not in libraries:
        libraries.append('xc')

if 1:
    xc = '/home/k0472/k047203/local/'
    include_dirs += [xc + 'include']
    library_dirs += [xc + 'lib']
    extra_link_args += ['-Wl,-rpath={xc}lib'.format(xc=xc)]

```
そしてビルドを行います。
```
python setup.py build
```
問題無ければ、最後にインストールを行います。
```
python setup.py install
```
### gpawのテスト
``gpaw info``を実行してチェックを行いますが、フロントエンドで直接は実行できないので、以下のようにジョブスクリプトを作成してバッチジョブとして実行します。

``` run_gpw_info.sh
#!/bin/sh
#SBATCH -J gpaw_info
#SBATCH -p i8cpu
#SBATCH -N 1
#SBATCH -n 1

module purge

module load oneapi_compiler/2023.0.0 oneapi_mkl/2023.0.0 oneapi_mpi/2023.0.0

source ${HOME}/ASE/ase_oneapi_2023.0.0/bin/activate

srun gpaw info > gpaw_info.log
```
バッチジョブの投入：
```
sbatch run_gpaw_info.sh
```
実行結果：
```
 ----------------------------------------------------------------------------------------------------------------------------------
| python-3.8.17     /home/k0472/k047203/ASE/ase_oneapi_2023.0.0/bin/python                                                         |
| gpaw-24.1.0       /home/k0472/k047203/ASE/ase_oneapi_2023.0.0/lib64/python3.8/site-packages/gpaw/                                |
| ase-3.22.1        /home/k0472/k047203/ASE/ase_oneapi_2023.0.0/lib64/python3.8/site-packages/ase/                                 |
| numpy-1.24.4      /home/k0472/k047203/ASE/ase_oneapi_2023.0.0/lib64/python3.8/site-packages/numpy/                               |
| scipy-1.10.1      /home/k0472/k047203/ASE/ase_oneapi_2023.0.0/lib64/python3.8/site-packages/scipy/                               |
| libxc-5.2.3       yes                                                                                                            |
| _gpaw             /home/k0472/k047203/ASE/ase_oneapi_2023.0.0/lib64/python3.8/site-packages/_gpaw.cpython-38-x86_64-linux-gnu.so |
| MPI enabled       yes                                                                                                            |
| OpenMP enabled    yes                                                                                                            |
| GPU enabled       no                                                                                                             |
| GPU-aware MPI     no                                                                                                             |
| CUPY              /home/k0472/k047203/ASE/ase_oneapi_2023.0.0/lib64/python3.8/site-packages/gpaw/gpu/cpupy/__init__.py           |
| scalapack         yes                                                                                                            |
| Elpa              no                                                                                                             |
| FFTW              yes                                                                                                            |
| libvdwxc          no                                                                                                             |
| PAW-datasets (1)  /home/k0472/k047203/ASE/gpaw-setups-0.9.20000                                                                  |
 ----------------------------------------------------------------------------------------------------------------------------------
 ```
 次に``pytest``を実行します。こちらも同様に以下のジョブスクリプトの作成、バッチジョブとして投入する必要があります。時間がかかるのでデバッグ用パーティションの制限時間内では終わらないのでF1cpuのパーティションを使用します。
 ```run_pytest.sh 
 #!/bin/sh
#SBATCH -J pytest
#SBATCH -p F1cpu
#SBATCH -N 1
#SBATCH -n 1
#SBATCH -c 128
#SBATCH -t 12:00:00

module purge

module load oneapi_compiler/2023.0.0 oneapi_mkl/2023.0.0 oneapi_mpi/2023.0.0

source ${HOME}/ASE/ase_oneapi_2023.0.0/bin/activate

srun pytest -v > pytest.log
```
バッチジョブの投入：
```
sbatch run_pytest.sh
```
``pytest.log``を見ると多くのテストはパスしていますが、以下のように幾つかのテストはうまくいっていないようでした。
```
FAILED gpaw/test/test_ibz2bz.py::test_ibz2bz[fe_pw] - assert False
FAILED gpaw/test/test_ibz2bz.py::test_ibz2bz[srvo3_pw] - RuntimeError: GPW fi...
FAILED gpaw/test/response/test_chiks.py::test_chiks[system8-0.25-True] - Asse...
FAILED gpaw/test/response/test_chiks.py::test_chiks[system9-0.25-False] - Ass...
FAILED gpaw/test/response/test_chiks.py::test_chiks[system10-0.5-True] - Asse...
FAILED gpaw/test/response/test_chiks.py::test_chiks[system11-0.5-False] - Ass...
FAILED gpaw/test/response/test_chiks.py::test_chiks[system12-0.0-True] - Asse...
FAILED gpaw/test/response/test_chiks.py::test_chiks[system13-0.0-False] - Ass...
FAILED gpaw/test/response/test_chiks.py::test_chiks[system14-0.25-True] - Ass...
FAILED gpaw/test/response/test_chiks.py::test_chiks[system15-0.25-False] - As...
FAILED gpaw/test/response/test_chiks.py::test_chiks[system16-0.5-True] - Asse...
FAILED gpaw/test/response/test_chiks.py::test_chiks[system17-0.5-False] - Ass...
FAILED gpaw/test/response/test_chiks.py::test_chiks_vs_chi0[system4-0.25] - A...
FAILED gpaw/test/response/test_chiks.py::test_chiks_vs_chi0[system5-0.5] - As...
FAILED gpaw/test/response/test_chiks.py::test_chiks_vs_chi0[system10-0.25] - ...
FAILED gpaw/test/response/test_response_band_cutoff.py::test_response_band_cutoff[srvo3_pw]
ERROR gpaw/test/test_generate_gpwfiles.py::test_generate_gpwfiles[srvo3_pw]

```
今後より実用的なテストを行って報告しようと思います。