最終更新:2025-06-03
概要
本記事では、自作モジュール(MultiOptPy)で、分子内求核置換反応(SNi反応)の遷移状態構造を算出してみる。電子状態計算ソフトウェアにPySCFを使用する。 MultiOptPyは電子状態計算ソフトウェアを用いた分子構造最適化手法の勉強を目的として作成したpythonモジュールである。
MultiOptPyのレポジトリ:https://github.com/ss0832/MultiOptPy
求核置換反応:
- https://www.chem-station.com/dos/2011/01/-nucleophilic-substitution.html
- https://ja.wikipedia.org/wiki/%E6%B1%82%E6%A0%B8%E7%BD%AE%E6%8F%9B%E5%8F%8D%E5%BF%9C
- https://en.wikipedia.org/wiki/SNi
使用した自作モジュールMultiOptPyのバージョン
1.9.9b
環境
WSL2 (Ubuntu-22.04)
Source codeのダウンロード
wget https://github.com/ss0832/MultiOptPy/archive/refs/tags/v1.9.9b.zip
unzip v1.9.9b.zip
cd MultiOptPy-1.9.9b
手順
1. 初期構造の準備
モデル反応系として、以下の構造を用意した。今回は名前をsni.xyz
とした。
8
C -0.238288037000 -1.130438310795 -0.268060261498
H 0.174608309256 -2.079640497297 0.023307938416
H 0.081491224063 -0.857235383546 -1.259869249380
H -1.317151018947 -1.152064207442 -0.204398150975
O 0.319110662208 -0.183627321277 0.707651047767
S -0.224535437451 1.381033139551 0.710269397007
O 0.654412001897 2.081982919584 1.761228418728
Cl 0.550352295973 1.939989661222 -1.470129140063
2. 遷移状態構造最適化のための初期構造の算出
※あらかじめpythonで利用できる電子状態計算ソフトウェアのPySCF(導入方法はpipを使えば可能である。)が使える環境を用意しておく。
a. 初期構造をカレントディレクトリにsni.xyz
として保存し、以下を実行する。
python optmain.py sni.xyz -opt rsirfo_fsb -func hf -bs 3-21g -pyscf -spin 0 -ma 200 1 8 -400 1 5 -ns 40
-opt rsirfo_fsb
は準ニュートン法であるRS-I-RFO法を構造最適化に使用することを示す。初期のへシアンに関しては、特にオプションで指定しない限り、単位行列が使われる。-pyscf
は使用する電子状態計算ソフトウェアをPySCFにすることを示す。-spin
はスピン多重度の指定である。PySCFを使用するときは目的とするスピン多重度に1を引いた値を指定する。-ma 200 1 8 -400 1 5
は200kJ/molの活性化障壁を超えうるペア同士を近づける力を原子のラベル番号1と8のペアに、400kJ/molの活性化障壁を超えうるペア同士を遠ざける力を原子のラベル番号1と5のペアに、構造最適化時にそれぞれ加えることを示す。-ns 40
反復計算回数を40回に制限している。これは生成系中の2つの分子が人工力によって離れていき構造最適化が終わらないのでつけている。
これを実行すると、計算レベルHF/3-21G
で指定した人工力ポテンシャルをかけた上で初期構造を構造最適化することができる。
結果はyyyy_mm_dd
(今日の年月日)ディレクトリの中に存在するディレクトリを開いて確認できる。
正常終了していれば、このディレクトリ中に、sni_traj.xyz
が存在するので、これをコピーして、MultiOptPy-1.9.9b
ディレクトリに置く。
sni_traj.xyz
は構造最適化の過程をAvogadro(公式ページ:https://avogadro.cc/ )等で可視化して確認できるようにしている。このsni_traj.xyz
は次のNEB計算に使用する。
※sni_traj.xyz
をアニメーションとして表示したい場合は、[https://github.com/ss0832/molecule_movie] を使うと良い。
(この人工力ポテンシャルを加えて行った構造最適化の結果はsni_optimized.xyz
で確認できる。構造を可視化して、生成系になっているか確認する。反応系のままであれば、-ma
の設定を見直してb.をやり直す。今回の場合以下の構造が得られた。中間体の安定構造に近いものが得られていると判断できるため、次のNEB計算を行うことが可能である。)
b. sni_traj.xyz
を初期パスとして、NEB法で経路の緩和を行う。
NEB法を用いることで、先ほど得られたsni_traj.xyz
全体のエネルギーを下げることができる。これにより、パスのエネルギー極大値を持つ構造を遷移状態構造に近づける。(この時点ではまだ正確な遷移状態構造は求められていない。)
LUP法と呼ばれるNEB法とよく似た方法があるが、本モジュールではNEB法を用いている。
python nebmain.py sni_traj.xyz -nd 0.4 -func hf -bs 3-21g -pyscf -spin 0 -spng -ns 20
-nd 0.4
はノード間の距離を0.4Åとして初期パスを作成することを示す。-ns 20
は20回分NEB法による経路の緩和を行うことを示す。今回は200kJ/mol以上の強めの人工力を使用して初期パスを求めたため、10回では緩和が足りないと判断した。-pyscf
は使用する電子状態計算ソフトウェアをPySCFにすることを示す。-spng
は緩和中のパスのエネルギープロファイルや各ノードの勾配のRMS値をmatplotlibで可視化するオプションである。
(参考)
c. 初期構造の決定及び遷移状態構造の計算
MultiOptPy-1.9.9b
と同じディレクトリ内に、NEBという名前を含むディレクトリが生成されている。 そのディレクトリ内のenergy_plot.csv
を確認し、緩和後のパスのエネルギー極大値を示す構造を確認する。
パスの緩和後の各ノードのエネルギー一覧(単位
私が実行した環境では、11番のノード(グラフでは12番)がエネルギー極大値を示していた。 path_ITR_20_sni
ディレクトリ内のsni_traj_11.xyz
を可視化する。
※こちら[https://ss0832.github.io/molecule_viewer/] を使うことでも可視化は可能である。
sni_traj_11.xyz
8
0 0
C -0.067423055121 -1.289336532977 -0.897093357450
H -0.298744132598 -1.897623133986 -0.036128672547
H 0.956042041575 -1.005617800824 -1.013275152469
H -0.850650002294 -0.744166928793 -1.360051491609
O 0.020418351335 0.029220616370 1.697169363068
S -0.099142911765 1.535720821363 1.403767749258
O 1.263630276727 2.224240271391 1.400331252170
Cl -0.924130567858 1.147562687455 -1.194719690421
構造が壊れていないので、これを遷移状態を求めるための初期構造とする。
sni_traj_11.xyz
をMultiOptPy-1.9.9b
と同じディレクトリ内にコピーする。
そして、以下を実行する。
python optmain.py sni_traj_11.xyz -opt rsirfo_bofill -func hf -bs 3-21g -pyscf -spin 0 -fc 5 -order 1 -tcc -freq
-opt rsirfo_bofill
は遷移状態構造の最適化向けのoptimizerを指定することを意味する。準ニュートン法であるRS-I-RFO法を使用する。今回は-fc
で正確なへシアンを計算するようにしているので、初期へシアンは正確なへシアンを使用するようになっている。-order 1
は一次の鞍点を求めることを指定する。(デフォルトだと極小値を求めるようになっている。)-fc 5
は5回の反復回数当たり1回正確なへシアンを計算することを指定する。-freq
は収束条件を満たした後に基準振動解析を行うことを示す。(自前で実装しているため、あくまで目安として使用することを推奨する。各振動モードをvibration_animation
内のxyzファイルで可視化できる。)-tcc
は収束条件を厳しくすることを示す。(Gaussianのtightと同等)
実行して得られた正確な遷移状態構造を以下に示す。
(実行して得られた正確な遷移状態構造はsni_traj_11_optimized.xyz
として保存されている。)
8
OptimizedStructure
C -0.097210835249 -1.115175616977 -0.686250494553
H -0.320101743542 -1.757387960431 0.132320984320
H 0.917169448251 -0.832609948796 -0.852686767133
H -0.772074932489 -1.078749669191 -1.509711666343
O 0.027243921035 -0.086881809201 1.225614196670
S -0.076240607349 1.463840507703 1.402014822207
O 1.308679049962 2.099986510162 1.408413910538
Cl -0.987464300618 1.306977986731 -1.119714985705
20回程度の反復計算で遷移状態構造が得られた。-freq
オプションにより生成されたnormal_modes.txt
やvibration_animation
ディレクトリ内の振動モードのアニメーションを確認した。
以下に-freq
オプションで生成されたnormal_modes.txt
の一部を示す。
Mode 0 1 2
Freq [cm^-1] -657.3659 83.9694 129.8648
Reduced mass [au] 2.5282 4.8892 1.2782
Force const [Dyne/A] -0.6437 0.0203 0.0127
Char temp [K] 0.0000 120.8133 186.8465
Normal mode x y z x y z x y z
C 0.05796 -0.04782 0.15397 0.14055 0.05558 0.00183 -0.01180 -0.03686 0.04035
H 0.24639 -0.32534 -0.01041 0.04816 0.01249 -0.05676 -0.50992 -0.00836 -0.07083
H 0.02509 -0.03663 -0.02534 0.15300 0.10590 0.16190 0.12919 -0.29758 0.46337
H -0.14313 0.22623 0.33308 0.26081 0.05564 -0.09648 0.32410 0.17245 -0.22439
O -0.01003 -0.04531 -0.09188 -0.11668 0.00089 0.04571 0.04665 -0.02070 -0.02380
S -0.00934 -0.00445 -0.02781 -0.00516 0.01427 -0.00177 -0.00802 -0.02077 -0.01718
O -0.00542 -0.01175 -0.00090 0.04419 -0.08993 -0.08814 -0.03263 0.03376 -0.03678
Cl -0.00798 0.05049 0.00646 -0.02367 0.00359 0.02015 0.00660 0.02951 0.02472
(...snip...)
その結果、虚振動が1つであることが確認できた。
次に、vibration_animation
内のmode_1_657i_wave_number.xyz
をAvogadroで確認すると、想定される反応系と生成系をつなぐ方向に振動していることを確認できた。
終わりに
自作モジュールで、電子状態計算モジュールであるPySCFを用いて、計算レベルHF/3-21G
で分子内求核置換反応(SNi反応)の遷移状態構造を算出する手順を説明した。
参考
- https://github.com/pyscf/pyscf (PySCFのgithubのレポジトリ)
- https://github.com/ss0832/MultiOptPy (自作モジュールMultiOptPyのレポジトリ)
- https://avogadro.cc/ (Avogadro、分子構造可視化ツール)
- The Journal of Chemical Physics 2010, 132, 241102.
- The Journal of Chemical Physics 1991, 94, 751–760.
- In Classical and Quantum Dynamics in Condensed Phase Simulations; WORLD SCIENTIFIC: LERICI, Villa Marigola, 1998; pp 385–404.
- The Journal of Chemical Physics, 2020, 153, 024109.
- The Journal of Chemical Physics, 2022, 144, 214108.