最終更新:2025-06-06
概要
本記事では、自作モジュール(MultiOptPy)で、オゾン酸化の反応機構のうちの1つである1,3-双極子付加環化反応の遷移状態構造を算出してみる。電子状態計算ソフトウェアにPySCFを使用する。 MultiOptPyは電子状態計算ソフトウェアを用いた分子構造最適化手法の勉強を目的として作成したpythonモジュールである。
MultiOptPyのレポジトリ:https://github.com/ss0832/MultiOptPy
オゾン酸化:
- https://www.chem-station.com/odos/2009/07/harries-harries-ozonolysis.html
- https://en.wikipedia.org/wiki/Ozonolysis
使用した自作モジュールMultiOptPyのバージョン
1.9.12
環境
WSL2 (Ubuntu-22.04)
Source codeのダウンロード
wget https://github.com/ss0832/MultiOptPy/archive/refs/tags/v1.9.12.zip
unzip v1.9.12.zip
cd MultiOptPy-1.9.12
手順
1. 初期構造の準備
モデル反応系として、以下の構造を用意した。今回は名前を1_3_dipolar_cycloaddition.xyz
とした。
9
OptimizedStructure
C 0.302939688575 -0.368194672750 -1.394130364296
H 0.723603777934 -0.884056178484 -2.236406490863
H -0.664458796572 -0.693573453969 -1.064082452226
C 0.932584157261 0.617486869375 -0.793015971358
H 0.498323763396 1.126233268205 0.045700715194
H 1.899182992847 0.958147532069 -1.112201806732
O -0.876160325976 -0.296591324323 3.260702994045
O -1.132462841301 -0.676660103170 2.048856277354
O -1.683552416164 0.217208063046 1.244577098882
2. 遷移状態構造最適化のための初期構造の算出
※あらかじめpythonで利用できる電子状態計算ソフトウェアのPySCF(導入方法はpipを使えば可能である。)が使える環境を用意しておく。
a. 初期構造をカレントディレクトリに1_3_dipolar_cycloaddition.xyz
として保存し、以下を実行する。
python optmain.py 1_3_dipolar_cycloaddition.xyz -pyscf -spin 0 -elec 0 -func hf -bs 3-21g -opt rsirfo_fsb -ma 100 1 7 100 4 9
-opt rsirfo_fsb
は準ニュートン法であるRS-I-RFO法を構造最適化に使用することを示す。初期のへシアンに関しては、特にオプションで指定しない限り、単位行列が使われる。-pyscf
は使用する電子状態計算ソフトウェアをPySCFにすることを示す。-spin
はスピン多重度の指定である。PySCFを使用するときは目的とするスピン多重度に1を引いた値を指定する。-ma 100 1 7 100 4 9
は100kJ/molの活性化障壁を超えうるペア同士を近づける力を原子のラベル番号1と7のペアとラベル番号4と9のペアに、構造最適化時にそれぞれ加えることを示す。-func hf
はHartree-Fock法を用いることを示す。-bs 3-21G
は基底関数にPople系である3-21G
を用いることを示す。
これを実行すると、計算レベルHF/3-21G
で指定した人工力ポテンシャルをかけた上で初期構造を構造最適化することができる。
結果はyyyy_mm_dd
(今日の年月日)ディレクトリの中に存在するディレクトリを開いて確認できる。
正常終了していれば、このディレクトリ中に、1_3_dipolar_cycloaddition_traj.xyz
が存在するので、これをコピーして、MultiOptPy-1.9.12
ディレクトリに置く。
1_3_dipolar_cycloaddition_traj.xyz
は構造最適化の過程をAvogadro(公式ページ:https://avogadro.cc/ )等で可視化して確認できるようにしている。この1_3_dipolar_cycloaddition_traj.xyz
は次のNEB計算に使用する。
※1_3_dipolar_cycloaddition_traj.xyz
をアニメーションとして表示したい場合は、[https://github.com/ss0832/molecule_movie] を使うと良い。
(この人工力ポテンシャルを加えて行った構造最適化の結果は1_3_dipolar_cycloaddition_optimized.xyz
で確認できる。構造を可視化して、生成系になっているか確認する。反応系のままであれば、-ma
の設定を見直してb.をやり直す。今回の場合以下の構造が得られた。安定構造に近いものが得られていると判断できるため、次のNEB計算を行うことが可能である。)
b. 1_3_dipolar_cycloaddition_traj.xyz
を初期パスとして、NEB法で経路の緩和を行う。
NEB法を用いることで、先ほど得られた1_3_dipolar_cycloaddition_traj.xyz
全体のエネルギーを下げることができる。これにより、パスのエネルギー極大値を持つ構造を遷移状態構造に近づける。(この時点ではまだ正確な遷移状態構造は求められていない。)
python nebmain.py 1_3_dipolar_cycloaddition_traj.xyz -ns 10 -modelhess -pyscf -spin 0 -elec 0 -func hf -bs 3-21g -spng -nd 0.3
-nd 0.3
はノード間の距離を0.3Åとして初期パスを作成することを示す。-ns 10
は10回分NEB法による経路の緩和を行うことを示す。-modelhess
は少ない計算コストで算出された近似へシアンを用いることを示す。これを指定すると経路緩和のアルゴリズムが-fc
を1以上に指定した場合と同様のものになる。-pyscf
は使用する電子状態計算ソフトウェアをPySCFにすることを示す。-spng
は緩和中のパスのエネルギープロファイルや各ノードの勾配のRMS値をmatplotlibで可視化するオプションである。-spin
はスピン多重度の指定である。PySCFを使用するときは目的とするスピン多重度に1を引いた値を指定する。
c. 初期構造の決定及び遷移状態構造の計算
MultiOptPy-1.9.12
と同じディレクトリ内に、NEBという名前を含むディレクトリが生成されている。 そのディレクトリ内のenergy_plot.csv
を確認し、緩和後のパスのエネルギー極大値を示す構造を確認する。
パスの緩和後の各ノードのエネルギー一覧(単位
私が実行した環境では、19番のノード(グラフでは20番)がエネルギー極大値を示していた。 path_ITR_10_1_3_dipolar_cycloaddition
ディレクトリ内の1_3_dipolar_cycloaddition_traj_19.xyz
を可視化する。
※こちら[https://ss0832.github.io/molecule_viewer/] を使うことでも可視化は可能である。
1_3_dipolar_cycloaddition_traj_19.xyz
9
0 0
C 0.158897805332 -0.474335672748 -0.702845899154
H 0.855387540893 -1.268360108938 -0.873976630394
H -0.889601901033 -0.669096885300 -0.805545963618
C 0.603475847683 0.793902461823 -0.578980237505
H -0.026530796413 1.649862565025 -0.507330399154
H 1.659020122088 1.013846418194 -0.651214407888
O -0.127839932704 -1.252934022456 1.240062354587
O -1.243623196445 -0.567220970120 1.498061445455
O -0.989185489401 0.774336214520 1.381769737671
構造が壊れていないので、これを遷移状態を求めるための初期構造とする。
1_3_dipolar_cycloaddition_traj_5.xyz
をMultiOptPy-1.9.12
と同じディレクトリ内にコピーする。
そして、以下を実行する。
python optmain.py 1_3_dipolar_cycloaddition_traj_19.xyz -pyscf -spin 0 -elec 0 -func hf -bs 3-21g -opt rsirfo_bofill -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と同等)
実行して得られた正確な遷移状態構造を以下に示す。
(実行して得られた正確な遷移状態構造は1_3_dipolar_cycloaddition_traj_19_optimized.xyz
として保存されている。)
9
OptimizedStructure
C 0.231993292978 -0.502460641563 -0.933441409661
H 0.997473437549 -1.240498886704 -0.802909797824
H -0.683001822308 -0.838535829180 -1.380346507113
C 0.433804808628 0.773889109516 -0.624893048033
H -0.309336390371 1.524697857789 -0.809050330259
H 1.370162313542 1.116570285548 -0.233098482086
O -0.615982055737 -1.365506185611 1.293016525711
O -1.144820766038 -0.226172931574 1.684358193718
O -0.280292818242 0.758017221780 1.806364855547
30回程度の反復計算で遷移状態構造が得られた。-freq
オプションにより生成されたnormal_modes.txt
やvibration_animation
ディレクトリ内の振動モードのアニメーションを確認した。
以下に-freq
オプションで生成されたnormal_modes.txt
の一部を示す。
Mode 0 1 2
Freq [cm^-1] -181.0837 96.3916 183.5322
Reduced mass [au] 8.2131 2.7698 10.2158
Force const [Dyne/A] -0.1587 0.0152 0.2027
Char temp [K] 0.0000 138.6860 264.0619
Normal mode x y z x y z x y z
C 0.05354 0.03367 -0.13789 -0.11062 0.01052 -0.04702 -0.01001 0.07581 0.00518
H 0.03149 0.01841 -0.08447 -0.22365 -0.12228 -0.13645 -0.03597 0.04676 -0.00952
H 0.04603 0.02499 -0.11946 -0.18344 0.19205 -0.03590 -0.02829 0.11275 0.01494
C 0.05097 0.01742 -0.14181 0.10526 -0.04437 0.03884 0.03204 0.06352 0.02850
H 0.04504 0.01873 -0.12096 0.22850 0.09291 0.10479 0.06094 0.09380 0.03499
H 0.03063 0.01292 -0.08578 0.16801 -0.22962 0.05138 0.04728 0.02482 0.02682
O -0.03922 -0.02528 0.09681 0.09792 0.01480 0.01330 -0.03730 -0.08799 0.12887
O -0.01199 -0.00741 0.03849 -0.00509 -0.03222 -0.00779 -0.00099 -0.00624 -0.00151
O -0.03686 -0.01036 0.10042 -0.08814 0.04703 0.00165 0.01899 -0.02782 -0.15686
(...snip...)
その結果、虚振動が1つであることが確認できた。
次に、vibration_animation
内のmode_1_181i_wave_number.xyz
をAvogadroで確認すると、想定される反応系と生成系をつなぐ方向に振動していることを確認できた。
終わりに
自作モジュールで、電子状態計算モジュールであるPySCFを用いて、計算レベルHF/3-21G
でオゾン酸化の反応機構のうちの1つである1,3-双極子付加環化反応の遷移状態構造を算出する手順を説明した。
参考
- 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.