GRRM の振動計算の結果を Gauss View で解析する方法

Share This:

GRRM による量子化学計算の log ファイルは、そのままでは Gauss View で開くことができません。構造最適化なら log ファイル末尾の座標情報を切り出してきて、input ファイルを作ることで Gauss View で開くことができます。一方、振動計算の log ファイルは 複雑なため処理が難しく、視覚化しないことには分子がどの方向に振動しているかが分かりません。

本記事では、GRRM による振動計算の Gauss View での解析方法について紹介します。

GRRM と Gaussian の組み合わせ

GRRM は外部の量子化学計算ソフトを利用して計算を進めていきます。構造最適化は GRRM 独自のアルゴリズムで進められますが、各ポイントのエネルギー計算、振動計算は外部ソフトが行っています。外部の量子化学計算ソフトとして Gaussian が使われる例が多いため、本記事では gaussian と組み合わせた場合について説明します。

Gaussian の振動計算の結果の読み方

GRRM の振動計算の log ファイルを Gauss View で読み取れる形式に変換するためには、まず Gaussian での振動計算の log ファイルの形式を理解しておく必要があります。

振動計算の log ファイル内での各振動の値は以下のように記述されています。”and normal coordinates:” と検索すると該当箇所が見つかります。

振動数順に 1 番から順に並んでいます。 横ならびで 3 つずつ記述されています。
Frequencies – と書かれている行にあるのが振動数です。その下に各原子ごとの振動方向のベクトルが記述されています。例えば 1 番の振動では 、-39.6625 という虚振動があり、48 番目の原子が最も大きく動いていることが分かります。

続いて、Forces (Hartrees/Bohr)です。これは、”***** Axes restored to original set *****” と検索すれば該当箇所が見つかります。この Forces (Hartrees/Bohr) を記述しておかないと Gauss View に認識してもらえません。

最後に振動計算の分子座標です。log ファイルの末尾に一行で書かれています。

\原子1, x 座標, y 座標, z 座標\ 原子2, x 座標, y 座標, z 座標\……

のように書き表されています。下の例で言うと

\Ni,1.53367,-0.36081,3.53557\P,0.70675,-2.3638,4.09998\

という部分に相当します。

GRRM の振動計算の log ファイルの読み方

GRRM の振動計算の log ファイルは、以下のようになっております。

まずは input ファイルの座標が書かれています。”INPUT ORIENTATION” で検索すると該当箇所が見つかります。座標は、Gaussian での振動計算の log ファイルと違い読みやすい形式で書かれています。

座標の下には GRADIENT VECTOR が書いてあります。これは、Gaussian での log ファイルの Forces (Hartrees/Bohr) に対応するものです。

GRRM では、非常に分かりづらい表記法が取られており、
原子1 の x 方向
原子1 の y 方向
原子1 の z 方向
原子2 の x 方向
原子2 の y 方向
原子2 の z 方向
……
のように縦一列で表記されています。

さらに下に行くと、HESSIAN MATRIXが書かれていますが、この部分は Gauss View で解析する際には不要な部分です。

HESSIAN MATRIX の下には、計算後の座標が書かれています。”Normal Mode Analysis at Stationary Point” で検索すると該当箇所が見つかります。
振動計算は一点計算であるため座標は変わらないのですが、コンピュータが計算しやすい値になるように分子を回転させています。

この座標情報の下に振動に関する計算結果が記されています。”Freq. :” で検索すると該当箇所が見つかります。これも非常に分かりにくく縦一列ずつ表記されています。

Gauss View で視覚化するには?

Gauss View で視覚化するためには、GRRM の log ファイルから必要な部分のみを抜き出し、適切な形式に並び変える必要があります。
大き分けて 3 つの操作が必要です。

  1. 振動に関する情報を抜き出し、x, y, z 座標を縦一列から横並びの形式へと変更する。
  2. Forces (Hartrees/Bohr) の情報を抜き出し、x, y, z 座標を縦一列から横並びの形式へと変更する。
  3. 座標情報を抜き出し、横一列表示へと変更する。

後は、一番最初に #p の行を入れるとか、最後に Normal termination を付け加えるなどの細かい作業があるだけです。

プログラムで変換しよう!

このような操作は、手作業でやると膨大な時間がかかってしまうため、実際には簡単なプログラムを作って実行します。以下に C++ で記述したプログラムの断片を示します。(実際のプログラムの欲しい方は、メールで連絡してください。)

まずは、ファイルの読み込みと各情報の開始行を探します。(最初の宣言などは本サイトでは省略します。)

続いて、outputfile を作成し、振動情報を書き込んでいきます。

次に、Gradient Vector の情報を書き込みます。

最後に座標情報を書き込みます。

一番最後に組成式を書き込む必要があるのですが、ここは適当で大丈夫です。
ここには載せませんが、このプログラムを実行するには原子番号を元素記号へと変換する関数が必要です。

GRRM での振動計算はやめた方が良い

GRRM は、裏で gaussian を走らせて計算しています。すなわち、GRRM で計算した結果を Gaussian の log 形式へと変換する作業は二度手間です。そもそも、GRRM と Gaussian のどちらで振動計算をしても結果は変わりません。Gaussian で計算した方が早いため、 GRRM での振動計算はお勧めしません。

【2017.03.28 追記】

GRRM と Gaussian の振動計算の結果は異なります。GRRM は独自に振動計算をしているそうです。しかし、なぜ結果が食い違うのかは謎です。。。どちらかが間違っているということもないと思います。でも、計算速度の観点から Gaussian を使ったほうが良いのではと思います。

管理人はプログラムの専門家ではないので、より良い方法がありましたらコメントまたはメールにて教えてください。よろしくお願い致します。

関連する記事

コメントを残す(投稿者名のみ必須)