FrontISTRをIntel oneAPIを使って構築する

※自分用のメモとして書きました。

FrontISTRをWSL2上のUbuntu 20.04へインストールする。恐らく、Ubuntu 18.04や16.04でもインストール出来ると思います(確認はしていない)。

## Intel oneAPI

```
cd /tmp
wget https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB
sudo apt-key add GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB
rm GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB

sudo add-apt-repository "deb https://apt.repos.intel.com/oneapi all main"
sudo apt update
sudo apt install intel-hpckit intel-basekit
```


## cmake

※ その後、cmake-3.20.0 がされた。下のスクリプトでバイナリをダウンロードするようにしたので、これは必要なくなった。

cmake-3.19.2以上が必須。それ以下のバージョンだとMPIライブラリが認識出来なかった。

```
wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2>/dev/null | gpg --dearmor - | sudo tee /etc/apt/trusted.gpg.d/kitware.gpg >/dev/null
sudo apt-add-repository 'deb https://apt.kitware.com/ubuntu/ focal main'
sudo apt-get update
sudo apt install cmake
sudo apt install pkg-config
```

最後の `pkg-config` は無くても問題無いが、Warning抑止のため入れておく。

これをやっておけば、定期的に

```
sudo apt update
sudo apt dist-upgrade
```

しておけば最新版がインストールされる。

## FrontISTR

自分用に書いたビルドスクリプトをダウンロードし、実行すると MPI, OpenMP, MUMPS, Metis, Trilinos ML, LAPACK, MKL, REVOCAP_Refinerを有効にした FrontISTR が `$HOME/local/bin` に `fistr1  hec2rcap  hecmw_part1  hecmw_vis1  rconv  rmerge` としてインストールされる。

```
git clone git@github.com:michioga/fistr_build_script
cd fistr_build_script
./fistr_build.sh
```

`fistr_build.sh` は単なるシェルスクリプトなので、必要に応じて編集する。

インストールされた `fistr1` へリンクされているライブラリを確認する。

```
ldd fistr1
        linux-vdso.so.1 (0x00007ffdf4399000)
        libmkl_intel_lp64.so.1 => /opt/intel/oneapi/mkl/latest/lib/intel64/libmkl_intel_lp64.so.1 (0x00007f792b662000)
        libmkl_intel_thread.so.1 => /opt/intel/oneapi/mkl/latest/lib/intel64/libmkl_intel_thread.so.1 (0x00007f7927d69000)
        libmkl_core.so.1 => /opt/intel/oneapi/mkl/latest/lib/intel64/libmkl_core.so.1 (0x00007f791fda3000)
        libiomp5.so => /opt/intel/oneapi/compiler/2021.1.2/linux/compiler/lib/intel64_lin/libiomp5.so (0x00007f791f99a000)
        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f791f96e000)
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f791f81f000)
        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f791f819000)
        libmpifort.so.12 => /opt/intel/oneapi/mpi/2021.1.1//lib/libmpifort.so.12 (0x00007f791f45b000)
        libmpi.so.12 => /opt/intel/oneapi/mpi/2021.1.1//lib/release/libmpi.so.12 (0x00007f791e0e2000)
        librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f791e0d5000)
        libmpicxx.so.12 => /opt/intel/oneapi/mpi/2021.1.1//lib/libmpicxx.so.12 (0x00007f791deb5000)
        libifport.so.5 => /opt/intel/oneapi/compiler/2021.1.2/linux/compiler/lib/intel64_lin/libifport.so.5 (0x00007f791dc87000)
        libifcoremt.so.5 => /opt/intel/oneapi/compiler/2021.1.2/linux/compiler/lib/intel64_lin/libifcoremt.so.5 (0x00007f791dae7000)
        libimf.so => /opt/intel/oneapi/compiler/2021.1.2/linux/compiler/lib/intel64_lin/libimf.so (0x00007f791d45f000)
        libsvml.so => /opt/intel/oneapi/compiler/2021.1.2/linux/compiler/lib/intel64_lin/libsvml.so (0x00007f791b8e6000)
        libirc.so => /opt/intel/oneapi/compiler/2021.1.2/linux/compiler/lib/intel64_lin/libirc.so (0x00007f791b66e000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f791b47c000)
        libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f791b461000)
        libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f791b280000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f792c39f000)
        libfabric.so.1 => /opt/intel/oneapi/mpi/2021.1.1//libfabric/lib/libfabric.so.1 (0x00007f791b03a000)
        libintlc.so.5 => /opt/intel/oneapi/compiler/2021.1.2/linux/compiler/lib/intel64_lin/libintlc.so.5 (0x00007f791adc2000)
```

これで `gfortran`, `OpenMPI` 無しでも、お金を掛けずに FrontISTR がコンパイル出来る様になった。

```
./fistr1  -h
##################################################################
#                         FrontISTR                              #
##################################################################
---
version:    5.1.1
git_hash:   b2fc72cd8580639457fb323862bf7c49680003ca
build:
  date:     2021-02-25T14:10:59+0900
  MPI:      enabled
  OpenMP:   enabled
  option:   "-p --with-tools --with-metis --with-mumps --with-lapack --with-ml --with-parmetis --with-mkl "
  HECMW_METIS_VER: 5
usage: [ mpirun -np <mpiprocs> ] fistr1 [options]
 -h: Show this help message.
 -v: Show version.
 -t <n>: Set number of OpenMP threads
 -c <Path of control file>: Use this control file. Default ./hecmw_ctrl.dat
--debug: Show debug messages.
```