Home
1448 words
7 minutes
【計算化学】自作pythonモジュールで遷移状態構造を求めてみる(プロトンリレーなしのホルムアルデヒドの水和反応)

最終更新:2025-04-28

概要#

本記事では、自作モジュール(MultiOptPy)で、ホルムアルデヒドの水和反応(プロトンリレーなし)の遷移状態構造を算出してみる。 MultiOptPyは電子状態計算ソフトウェアを用いた分子構造最適化手法の勉強を目的として作成したpythonモジュールである。

MultiOptPyのレポジトリ:https://github.com/ss0832/MultiOptPy

使用した自作モジュールMultiOptPyのバージョン#

1.8.1c

環境#

WSL2 (Ubuntu-22.04)

手順#

1. 初期構造の準備#

モデル反応系として、以下の構造をxyzファイル形式で用意した。今回は名前をhydration.xyzとした。この構造はホルムアルデヒドと水の2分子で構成されている。

(事前に構造最適化したものを使用すると失敗しにくい。)

7

C      0.088884974243      0.209983685203      1.154662271212
O      0.680956334488      1.256523146485      1.033792350292
O     -0.304054392800     -0.539514698944     -1.319137672551
H      0.594221041921     -0.628477050456     -1.666558064761
H     -0.663856716734      0.295744351103     -1.648663297038
H      0.592936305513     -0.742578087725      1.240529571625
H     -0.989087546631      0.148318654333      1.205374841222


2. 遷移状態構造最適化のための初期構造の算出#

※あらかじめpythonで利用できる電子状態計算ソフトウェアのpsi4(導入方法は、psi4公式ページ [https://psicode.org/installs/v191/] を参照)が使える環境を用意しておく。

a. 以下のURLにアクセスし、Source codeをダウンロードする。#

wget https://github.com/ss0832/MultiOptPy/archive/refs/tags/v1.8.1c.zip
unzip v1.8.1c.zip
cd MultiOptPy-1.8.1c

b. 初期構造をカレントディレクトリにhydration.xyzとして保存し、以下を実行する。#

python optmain.py hydration.xyz -ma 200 1 3 200 2 4 -bs 3-21g -func hf
  • -ma 200 1 3 200 2 4は原子のラベル番号1と3のペアと原子のラベル番号2と4のペアに、200kJ/molの活性化障壁を超えうる人工力ポテンシャルをそれぞれ付加することを示す。(詳しくはAFIR法 [https://doi.org/10.1063/1.3457903] を参照)
  • -bsは基底関数の指定(特に指定しなければ6-31G(d)が使われる。)今回は3-21Gを使用した。
  • -funcは計算手法の指定(Hartree-Fock(HF), post-HF(MP2等), DFTの汎関数)が可能。(特に指定しなければB3LYPが使われる。)今回はHartree-Fock法を使用した

これを実行すると、計算レベルHF/3-21Gで先ほどの人工力ポテンシャルをかけた上で初期構造を構造最適化する。

結果はyyyy_mm_dd(今日の年月日)ディレクトリの中に存在するディレクトリを開いて確認できる。

正常終了していれば、このディレクトリ中に、hydration_traj.xyzが存在するので、これをコピーして、MultiOptPy-1.8.1cディレクトリに置く。

hydration_traj.xyzは構造最適化の過程をAvogadro(公式ページ:https://avogadro.cc/ )等で可視化して確認できるようにしている。このhydration_traj.xyzは次のNEB計算に使用する。

hydration_traj.xyzをアニメーションとして表示したい場合は、[https://github.com/ss0832/molecule_movie] を使うと良い。

(この人工力ポテンシャルを加えて行った構造最適化の結果はhydration_optimized.xyzで確認できる。構造を可視化して、生成系になっているか確認する。反応系のままであれば、-maの設定を見直してb.をやり直す。)

c. hydration_traj.xyzを初期パスとして、NEB法で経路の緩和を行う。#

NEB法を用いることで、先ほど得られたhydration_traj.xyz全体のエネルギーを下げることができる。これにより、パスのエネルギー極大値を持つ構造を遷移状態構造に近づける。(この時点ではまだ正確な遷移状態構造は求められていない。)

LUP法と呼ばれるNEB法とよく似た方法があるが、本モジュールではNEB法を用いている。

python nebmain.py hydration_traj.xyz -ns 10 -spng -nd 0.15 -bs 3-21g -func hf
  • -spngは経路の緩和途中の各ノードのエネルギーや勾配のRMSを可視化する。
  • -nd 0.15はノード間の距離を0.15Åとして初期パスを作成することを示す。
  • -ns 10は10回分NEB法による経路の緩和を行うことを示す。
  • -bsは基底関数の指定(特に指定しなければ6-31G(d)が使われる。)今回は3-21Gを使用。
  • -funcは計算手法の指定(Hartree-Fock(HF), post-HF(MP2等), DFTの汎関数)が可能。(特に指定しなければB3LYPが使われる。)今回はHartree-Fock法を使用

(参考)

d. 初期構造の決定及び遷移状態構造の計算#

MultiOptPy-1.8.1cと同じディレクトリ内に、NEBという名前を含むディレクトリが生成されている。このディレクトリ内のplot_energy_9.pngを開き、エネルギーが極大値を示すノード番号を確認する。

私が実行した環境では、13番である。 これらの2つの構造を確認する。 path_ITR_10_hydrationディレクトリ内のhydration_traj_13.xyzを可視化する。

hydration_traj_13.xyz

7
0 1
C       0.019442959244      0.016771762422      0.714464514171
O       0.872759022349      0.938390839637      0.262235207187
O      -0.264522659066     -0.491950924279     -0.926108599592
H       0.697374189520      0.110683187751     -0.768181031237
H      -0.774423920570      0.181158176385     -1.429248210077
H       0.432945903965     -0.904881720423      1.072553762325
H      -0.983575495443      0.149828678507      1.074284357224

※こちら [https://ss0832.github.io/molecule_viewer/] を使うことでも可視化は可能である。

hydration_traj_13.xyzMultiOptPy-1.8.1cと同じディレクトリ内にコピーする。

そして、以下を実行する。

python optmain.py hydration_traj_13.xyz -opt rfo3_bofill -order 1 -fc 5 -bs 3-21g -func hf
  • -opt rfo3_bofillは遷移状態構造の最適化向けのoptimizerを指定する。
  • -order 1は一次の鞍点を求めることを指定する。(デフォルトだと極小値を求めるようになっている。)
  • -fc 5は5回の反復回数当たり1回正確なへシアンを計算することを指定する。

実行して得られた正確な遷移状態構造を以下に示す。

(実行して得られた正確な遷移状態構造はhydration_traj_13_optimized.xyzとして保存されている。)

7
OptimizedStructure
C      0.049594422422     -0.035801159007      0.696742938317
O      1.017685462694      0.831020047653      0.415117840292
O     -0.149336958802     -0.363294977048     -0.948240862212
H      0.685423783201      0.424525471959     -0.838917820866
H     -0.972548776514     -0.169449634693     -1.422763703416
H      0.290040541862     -1.008313968121      1.089020819599
H     -0.920858474863      0.321314219257      1.009040788286

参考#

  • https://github.com/psi4/psi4 (Psi4のgithubのレポジトリ)
  • https://github.com/ss0832/MultiOptPy (自作モジュールMultiOptPyのレポジトリ)
  • https://avogadro.cc/ (Avogadro、分子構造可視化ツール)
  • The Journal of Chemical Physics 2010, 132 (24), 241102.
  • The Journal of Chemical Physics 1991, 94 (1), 751–760.
  • In Classical and Quantum Dynamics in Condensed Phase Simulations; WORLD SCIENTIFIC: LERICI, Villa Marigola, 1998; pp 385–404.
【計算化学】自作pythonモジュールで遷移状態構造を求めてみる(プロトンリレーなしのホルムアルデヒドの水和反応)
https://ss0832.github.io/posts/20250428_mop_usage_2/
Author
ss0832
Published at
2025-04-28