AMBER20とAmberTools20,21のインストール方法

※最新のAMBER22のインストール法は[こちら](https://qiita.com/Ag_smith/items/9526142858f8ea5248c1)

## 環境

* macOS 11.3 (Big Sur), 2.3GHz Intel Core i7, メモリ16GB
* Xcode 12.5
* ターミナルからHomebrewをインストールしてある
* ターミナルから`xcode-select --install`でCommand Line Toolsをインストールしてある

## Note

2020年4月30日に**AMBER20**とAmberTools20がリリースされました（ <http://ambermd.org/GetAmber.php>）。さらに、2021年4月30日に**AmberTools21**がリリースされました。近年はAMBER本体が偶数年に2年ごと、AmberToolsは1年ごとにメジャーアップデートしています。今年はAmberToolsのみのアップデートの年です。解凍したときのディレクトリがともに`amber20_src`となっていますがこれは仕様です。

**Amber20, AmberTools21からはcmakeを使ったインストール方法に切り替わりました**。以前の`./configure`を使うインストール方法もまだ使用可能ですが、いずれ廃止すると宣言されています。

公式のCMakeを使ったインストール方法は http://ambermd.org/pmwiki/pmwiki.php/Main/CMake-Quick-Start に書かれています。CMakeのオプション一覧は http://ambermd.org/pmwiki/pmwiki.php/Main/CMake-Common-Options を確認してください。

## macOS Intel CPUの場合
**こちらはAppleが開発した最新のM1チップ入りではない多くのMacの場合です。M1 Macの場合は別方法になるので後述です。** はじめにHomebrewをインストールしておきますが、boostが入っているとコンパイルエラーが生じてしまうようです。これを回避するためには、インストールを始める前に

```bash
brew unlink boost
```

として一時的にHomebrewのboostとの連携を外しておきます。AMBER/AmberToolsのインストールが終わったら再び`brew link boost`で戻しておきましょう。

新しいcmakeを使ったインストール方法を利用することで、今までserial, parallel, openMP, cuda版をそれぞれ毎回`configure`処理する必要があったのが不要になったようです。

以下インストール手順です。

``` bash
# macOSのHomebrewで必要なソフトウェアをインストールしておく。
brew install cmake gcc wget open-mpi
```

gfortranのバージョンを確認します。

```bash
$ gfortran-11 --version
GNU Fortran (Homebrew GCC 11.1.0) 11.1.0
Copyright (C) 2020 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
```

確認したら、以下のコマンドを実行します。

``` bash
# Homebrewのgfortran-11をgfortranとしてシンボリックリンクを貼っておく必要がある。
ln -sf /usr/local/bin/gfortran-11 /usr/local/bin/gfortran # M1 Macでない場合
# ダウンロードしてきたソースコードをtar jxvfで解凍する
tar jxvf AmberTools21.tar.bz2 ; tar jxvf Amber20.tar.bz2
cd amber20_src
# updateを実行する
./update_amber --update
# cmake用のbuildディレクトリに入る
cd build
###############################
# ここが最重要の設定。-DCMAKE_INSTALL_PREFIXにインストール先ディレクトリを指定する
# 下の例はホームディレクトリ以下のapps/amber20にインストールする設定。
# MPIはONにする。COMPILERはCLANGを指定する。
###############################
AMBER_PREFIX=$(dirname $(dirname `pwd`))
cmake $AMBER_PREFIX/amber20_src \
    -DCMAKE_INSTALL_PREFIX=${HOME}/apps/amber20 \
    -DCOMPILER=CLANG -DBLA_VENDOR=Apple \
    -DMPI=TRUE -DBUILD_GUI=FALSE -DCUDA=FALSE -DINSTALL_TESTS=TRUE \
    -DDOWNLOAD_MINICONDA=TRUE -DMINICONDA_USE_PY3=TRUE 2>&1 | tee cmake.log
# Configureが正常終了していることを確認したらmakeとインストールを実行する
make -j8 && make install
```

cmakeの終わり頃には結果一覧が表示されますので、適切な値になっているか確認してみましょう。

```
--                                Features:
-- MPI:                     ON
-- OpenMP:                  OFF
-- CUDA:                    OFF
-- Build Shared Libraries:  ON
-- Build GUI Interfaces:    OFF
-- Build Python Programs:   ON
--  -Python Interpreter:    Internal Miniconda (version 3.8)
-- Build Perl Programs:     ON
-- Build configuration:     RELEASE
-- Target Processor:        x86_64
-- Build Documentation:     OFF
-- Sander Variants:         normal LES API LES-API MPI LES-MPI
-- Install location:        /Users/YoshitakaM/apps/amber20/
-- Installation of Tests:   ON
```

上の例は正しくMPI設定がON, GUI設定がOFFになっていることがわかります。これはcmake時に`-DMPI=TRUE -DBUILD_GUI=FALSE`にした設定と対応しています。

コンパイラ設定も確認してみます。

```
--                               Compilers:
--         C: AppleClang 12.0.0.12000032 (/usr/bin/clang)
--       CXX: AppleClang 12.0.0.12000032 (/usr/bin/clang++)
--   Fortran: GNU 10.2.0 (/usr/local/bin/gfortran)
```

AmberTools21ではAppleClangとHomebrewでインストールしたOpenMPIによる並列化処理が問題なく行われるようになっています。ただし、FortranだけはAppleClangにないので、これは`brew install gcc`で外部からインストールする必要がありました。

インストールが終わったら、AMBERのプログラムコマンドをいつでも使えるようにするために、`~/.bash_profile`（`echo $SHELL`と打ってみて最後が`bash`の場合）または`~/.zshrc`（`echo $SHELL`と打ってみて最後が`zsh`の場合。macOS Catalinaを使っているヒトはzshがデフォルトになっているはず）のどちらかのファイルに（なければ作成する）、以下のように書き込みます。

``` bash
# for AMBER 20 / AmberTools21
test -f ${HOME}/apps/amber20/amber.sh && source ${HOME}/apps/amber20/amber.sh
```

これでターミナルの起動時にAMBER20とAmberTools21のコマンドがいつでも使えるようになっているはずです。ターミナルを再起動してみたときに`echo $AMBERHOME`と打ってみてAMBERをインストールしたパス（`/Users/username/apps/amber20`みたいな感じ）が表示されれば成功です。

`brew unlink boost`しておいた場合は`brew link boost`で設定をもとに戻しておきましょう。

## macOS M1 Macの場合

かなり難しいですが、一応入れることができるみたいです。以下の方法です。

```bash
brew install boost gcc
```

gccは10.2のものを使いました。5月10日頃から配信されたgccはVer.11になっていますが、こちらではまだ試していません。boostはこちらではHomebrewのものを入れておいても動作します。

cmake時のオプションは以下のようにすると動きました。

```bash
ln -sf /opt/homebrew/bin/gcc-11 /opt/homebrew/bin/gcc
ln -sf /opt/homebrew/bin/g++-11 /opt/homebrew/bin/g++
ln -sf /opt/homebrew/bin/gfortran-11 /opt/homebrew/bin/gfortran

AMBER_PREFIX=$(dirname $(dirname `pwd`))
cmake $AMBER_PREFIX/amber20_src \
  -DCMAKE_INSTALL_PREFIX=${HOME}/apps/amber20 \
  -DCOMPILER=GNU -DBLA_VENDOR=Apple \
  -DCMAKE_CXX_FLAGS=-fcommon -DCMAKE_C_FLAGS=-fcommon -DCMAKE_Fortran_FLAGS='-fallow-argument-mismatch -fallow-invalid-boz -frecursive' -DMPI=FALSE -DBUILD_GUI=FALSE -DCUDA=FALSE -DINSTALL_TESTS=TRUE -DDISABLE_TOOLS="moft" \
  -DDOWNLOAD_MINICONDA=TRUE -DMINICONDA_USE_PY3=TRUE 2>&1 | tee cmake.log
```

MPI連携とMOFTの利用をOFFにしていますが、これでmakeを行えば一応インストールができました。

## CentOS 7の場合

インストール前に初期に必要なパッケージはCMake 3.8以上のみとかなり少なくなったようで

```bash
yum -y install epel-release
yum -y install tcsh make cmake3 \
               gcc gcc-gfortran gcc-c++ \
               which flex bison patch bc \
               libXt-devel libXext-devel \
               perl perl-ExtUtils-MakeMaker util-linux wget \
               bzip2 bzip2-devel zlib-devel tar
```

でインストールできます（要検証）。あとは、cmake時のコマンドを`cmake` -> `cmake3`に置き換えればインストール可能です。

デフォルトではGNU Compilerのバージョンが4.8.5とかなり古いものになっていますので、変更したい場合は手動で10.3.0などを入れましょう。また、OpenMPIも利用したい場合はGCC 10.3.0をインストール後にOpenMPIを手動でインストールしましょう。以下は`/usr/local/package/gcc/10.3.0`にインストールする一例です

```bash
gccver="10.3.0"
openmpiver="4.1.1"
installdir="/usr/local/package"
### GCC 10.3.0
wget https://ftp.gnu.org/gnu/gcc/gcc-${gccver}/gcc-${gccver}.tar.xz
tar Jxvf gcc-${gccver}.tar.xz
cd gcc-${gccver}
./contrib/download_prerequisites
./configure --with-system-zlib --disable-multilib --disable-bootstrap --enable-languages=c,c++,fortran --prefix=${installdir}/gcc/${gccver}
make -j16 && make install
### GCC 10.3.0を一時的に優先使用する設定
export PATH="${installdir}/gcc/${gccver}/bin:${PATH}"
export LD_LIBRARY_PATH="${installdir}/gcc/${gccver}/lib:${installdir}/gcc/${gccver}/lib64:${LD_LIBRARY_PATH}"
export LIBRARY_PATH="${installdir}/gcc/${gccver}/lib:${LIBRARY_PATH}"
export CPATH="${installdir}/gcc/${gccver}/include:${CPATH}"
export FPATH="${installdir}/gcc/${gccver}/include:${FPATH}"
### OpenMPI 4.1.1 for GCC 10.3.0
wget https://download.open-mpi.org/release/open-mpi/v4.1/openmpi-${openmpiver}.tar.bz2
tar jxvf openmpi-${openmpiver}.tar.bz2
cd openmpi-${openmpiver}
./configure --prefix=${installdir}/openmpi/${openmpiver}_gcc${gccver} CC=gcc CXX=g++ FC=gfortran --with-cuda=/usr/local/cuda-11.1
make -j16 all
make install
### OpenMPI 4.1.1を一時的に優先使用する設定
MPIROOT=${installdir}/openmpi/${openmpiver}_gcc${gccver}
export PATH=$MPIROOT/bin:$PATH
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MPIROOT/lib
export MANPATH=$MANPATH:$MPIROOT/share/man
```

こののち、amber20のインストールをはじめます

```
AMBER_PREFIX=$(dirname $(dirname `pwd`))
cmake3 $AMBER_PREFIX/amber20_src \
    -DCMAKE_INSTALL_PREFIX=/usr/local/package/amber20 \
    -DCOMPILER=GNU -DMPI=TRUE -DOPENMP=TRUE -DBUILD_GUI=FALSE -DCUDA=TRUE \
	-DBUILD_QUICK=TRUE -DINSTALL_TESTS=TRUE \
    -DDOWNLOAD_MINICONDA=TRUE -DMINICONDA_USE_PY3=TRUE 2>&1 | tee cmake.log
```

インストール先は`/usr/local/package/amber20`にしています。LinuxでNVIDIA製GPUを積んでおりCUDAをインストール済みの場合は`-DCUDA=TRUE`とします。またOpenMPIの恩恵を受けるために`-DMPI=TRUE`, OpenMPによるスレッド並列化をONにするために`-DOPENMP=TRUE`にしています。
AmberTools21で実装されたQM/MMシミュレーションソフトウェアの**QUICK**をインストールしたい場合は`-DBUILD_QUICK=TRUE`とします（デフォルトではインストールされません）。これをONにするとインストールにとても時間がかかることになる（30分くらいかかる）ので気をつけてください。

あとは同様に `make -j16 && make install`をします。

96%あたりでなんか長く止まります。

```
[ 96%] Linking Fortran executable sander.LES.MPI
[ 96%] Built target sander.LES.MPI
```

## Ubuntu 20.04の場合

`apt`で依存パッケージを入れます。

```bash
sudo apt -y update
sudo apt -y install tcsh make cmake gcc gfortran flex bison patch bc xorg-dev libbz2-dev wget
```
その後はCentOS 7の場合とほぼ同じです。