CREST インストール

# 概要
配座探索ソフトウェア CREST（Conformer–Rotamer Ensemble Sampling Tool）をインストールした作業ログ。（紛らわしい名称だが、JST の CREST とは一切関係ない。）

https://x.com/ComputerChem/status/1897488155399618799

# 検証環境
<ul>
<li>CPU: Ryzen 9 7950x</li>
<li>m/o: AsRock Steel Legend</li>
<li>Python 3.12.9 or 3.12.10</li>
<li>meson 1.72 （1.8 だとビルドに失敗する。）</li>
<li>gcc (GCC) 14.2.1 20240912 (Red Hat 14.2.1-3)</li>
<li>Fedora 40 server edition</li>
</ul>

# 環境設定

ますは、su で root ユーザーになる。
基本的には、[こちらのページ](URL "https://crest-lab.github.io/crest-docs/page/installation/install_basic.html") の Option 3: Compiling from source に従う。

```shell
cd /opt
mkdir CREST
cd CREST
git clone https://github.com/crest-lab/crest.git
cd crest
git submodule init
git submodule update 

# ここから GNU compliler 関連
sudo dnf -y install openblas-devel
sudo dnf -y install openblas-static
sudo dnf -y install @development-tools
sudo dnf -y groupinstall "Development Tools" "Development Libraries"
sudo dnf -y install libgfortran-static libquadmath-static glibc-static
# Intelのリポジトリを追加
wget https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB
sudo rpm --import GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB
sudo dnf config-manager --add-repo https://yum.repos.intel.com/oneapi
sudo dnf -y install intel-oneapi-mkl intel-oneapi-mkl-devel
sudo dnf -y install lapack-devel

# ここから CMake 関連
python -m venv .venv
source .venv/bin/activate
pip install cmake
cmake -B _build
make -C _build
make test -C _build

# ここから Meson 関連
pip install meson==1.7.2
python3 -m pip install ninja
meson --version # meson のバージョンが 1.8 だとビルdに失敗する。
LDFLAGS="-Wl,-Bdynamic" FFLAGS="-Wno-unused-function -Wno-maybe-uninitialized -Wno-conversion -w" meson setup _build -Dla_backend=openblas -Ddefault_library=shared -Dwerror=false
meson compile -C _build
```
make -C _build には 5 分ほど時間がかかる。
meson compile -C _build は 726/737 で 1 分ほど待ち時間がかかる。


root ユーザーを exit する。
crest 自体は、/opt/CREST/crest/_build にあり、libcrest.so は /opt/CREST/crest/_build 内にある。

```shell
# crest のシンボリックリンクを作成
sudo ln -s /opt/CREST/crest/_build/crest /usr/local/bin/crest
# crest のライブラリの path を通す
export LD_LIBRARY_PATH=/home/odyssey/biotools/CREST/crest/_build:$LD_LIBRARY_PATH
source .bashrc
```
which crest でパスが通っているかを確認する。
path を通した後で、crest のバージョン情報を確認する。

```shell
# crest --version を実行すると以下の文字が表示される。

       ╔════════════════════════════════════════════╗
       ║            ___ ___ ___ ___ _____           ║
       ║           / __| _ \ __/ __|_   _|          ║
       ║          | (__|   / _|\__ \ | |            ║
       ║           \___|_|_\___|___/ |_|            ║
       ║                                            ║
       ║  Conformer-Rotamer Ensemble Sampling Tool  ║
       ║          based on the xTB methods          ║
       ║                                            ║
       ╚════════════════════════════════════════════╝
       Version 3.0.2, Fri Mar 14 03:39:20 PM JST 2025
       commit (53290da) compiled by 'root@localhost.localdomain'

 crest 3.0.2
```

# インプットファイルの作り方

crest を使う際は、 --input オプションでインプットファイルを指定するか、シンプルに .toml ファイルだけを引数にする。

```shell
# crest 実行方法
crest struc.xyz --input input.toml
または
crest input.toml
```

xyz ファイルは、gaussian のファイルを編集して以下の形式で作成する。

```shell
原子数
ファイル名
座標
```

input.toml ファイルの中身を以下に示す。

```shell
# CREST 3 input file
input = "struc.xyz"   
runtype="ancopt"
threads = 9

[calculation]
elog="energies.log"

[[calculation.level]]
method = "gfn2"
uhf = 0
chrg = 0
```

ancopt は「構造最適化のみ」を意味する。
配座探索する場合は、「mdopt」を指定する。

ディレクトリを作成し、以下の 2 つのファイルのみがある状態にする。
```shell
input.toml  struc.xyz
```

動作確認用に、構造最適化計算を実行する。
```shell
crest input.toml
```
わずか数秒で計算は終わり、以下のような結果が表示される。
```shell

==========================================
 TOTAL ENERGY         -59.5486338244 Eh
 GRADIENT NORM          0.0003705855 Eh/a0
==========================================

 -----------------
 Wall Time Summary
 -----------------
 CREST runtime (total)               0 d,  0 h,  0 min,  0.747 sec
 ------------------------------------------------------------------
 Geometry optimization      ...        0 min,  0.724 sec ( 96.935%)
 I/O and setup              ...        0 min,  0.023 sec (  3.065%)
 ------------------------------------------------------------------
 * wall-time:     0 d,  0 h,  0 min,  0.747 sec
 *  cpu-time:     0 d,  0 h,  0 min,  6.185 sec
 * ratio c/w:     8.277 speedup
 ------------------------------------------------------------------
 * Total number of energy+grad calls: 39

 CREST terminated normally.
 ```

 ディレクトリ内には、以下のファイルが生成する。
 ```shell
coord         crest_input_copy.xyz  crestopt.xyz   energies.log  struc.xyz
crest.engrad  crestopt.log          crest.restart  input.toml
 ```

coord: XTBやTURBOMOLE形式の内部座標ファイル。計算に使用される分子構造を格納している。

crest_input_copy.xyz: 元の入力構造のバックアップコピー。

crestopt.xyz: CRESTの構造最適化によって生成された構造ファイル。最適化の過程で更新される。

crestopt.log: 構造最適化プロセスのログファイル。収束情報や構造変化の詳細が含まれている。

crest.engrad: エネルギー勾配情報を含むファイル。最適化やシミュレーション中の力の情報が保存されている。

crest.restart: 計算が中断された場合の再開に必要な情報を含むファイル。長時間の計算でのチェックポイントとして機能する。

energies.log: 計算過程で得られた各構造のエネルギー値のログ。エネルギー変化を追跡するために使用する。

# 配座探索
以下のコマンドで配座探索を実行する。
このコマンドでは、エネルギー範囲 6 kcal/mol 以内を探索します。

```shell
crest struc.xyz -xnam xtb -gfn2 -niceprint -ewin 6 -T 8
```
時間がかかるため、ジョブスケジューラー経由で実行するか、nohup で実行した方が良い。

CREST は、xTB を利用しているため、GPU で加速することは現時点では出来ません。