電子状態計算(SCF計算)や構造最適化が収束しなかったり、時間制限に達して計算が終了してしまったりすることってよくありますよね。他にも、PCの予期せぬシャットダウンに遭遇した場合は、計算を一からやり直すしか方法はないのでしょうか?実は大抵の量子化学計算ソフトにはリスタートの機能が備わっています。
rs00
今回は、GAMESS(US, Firefly)を使った計算の再開方法や、一度計算した結果を再利用する方法を紹介します。この方法は、単に計算を再開させるだけでなく、計算の収束性を改善する際にも役立つテクニックなので覚えておくと便利です。

GAMESSの計算をリスタートするには?

GAMESS(US, Firefly)の一時停止、または終了した計算を再開・再利用するには、Outputファイルとは別にPUNCHファイル(拡張子.dat)が必要です。これを利用すれば、いくつかのタイプの計算を再開・再利用することができます。PUNCHファイルは、デフォルトでOutputファイルと同じディレクトリに出力されます。
re01
FiCoMoCalc2012などのGUIソフトを使用している方は、オプション画面でPUNCHファイルなどの一時ファイルが計算後に削除されないように設定しておきましょう。
方法は簡単です。PUNCHファイルから再利用したい情報を抽出し、Inputファイルにコピーペーストした後に、特定のキーワードでそれを読み込むように指示するだけです。
再利用したい計算によってPUNCHファイルから抽出する情報が異なるので、次に詳しく見ていきましょう。

SCF計算をリスタートさせるには?

どんな目的で、どこから計算を再開させたいかが重要です。ここでは、SCF計算と構造最適化計算の計算途中のファイルを再利用してリスタートするテクニックを紹介します。まずは、停止した計算ファイルの波動関数を、SCF計算の第1近似(電子密度の初期値として)として再利用する方法からです。

この方法は、単なるリスタートの役割の他にも、SCF計算が上手く収束しない場合、他のレベル(理論/基底関数)で計算した波動関数を初期値として利用し、収束性を向上させるためのテクニックにも応用できます。それでは、SCF計算の波動関数を再利用するためのInputファイルを作成してみましょう。

例として、「安息香酸のHF/6-31G(d)レベルの構造最適化計算を実行した際に、電子状態計算(SCF計算)は終了していたが構造最適化の計算が始まった際にPCが止まってしまった」というケースを想定してみましょう。つまり、SCF解は得られているので、それを再利用したリスタート方法ということですね。

1) Inputファイルには、$GUESSグループを作成し、 GUESS=MOREADのキーワードを追加します。また、PUNCHファイル(拡張子.dat)の$VEC groupで読み込むべき軌道の数をNORB=で指定しましょう。
rs06
2) NORBの値は、Outputファイルを開き” TOTAL NUMBER OF SHELLS ”で検索すれば見つかります。
ここでは、48ですね。
rs04
3) 次に、PUNCHファイルを開き、最新の$VECグループを見つけます。” $VEC "で検索して下から一番目のものがそうです。$VECから$ENDまでコピーしましょう。
$VECで印字される関数は、基底関数の総数(147)と等しいため、結構長いので注意してください。
rs05
4)  先程コピーした$VEC~$ENDをInputファイルの分子座標 $DATA~$END以下に貼り付けましょう。これで入力ファイルは無事完了です。あとは、通常通り計算を実行すればOKです。PUNCHファイルは、新しい計算で上書きされるので必要な場合は別名で保存しておきましょう。
rs07
5) 左側が通常の計算を実行した際のSCFの収束状況で、右側が一度計算したSCF計算の結果を再利用した際のSCFの収束状況です。SCF計算の第1近似として再利用したほうがSCFの収束性が良い結果になっていることがわかると思います。
なお、グラフは以前紹介したGaussSumを使用して作成しています。
rs02

構造最適化計算をリスタートさせるには?

例えば、構造最適化の途中で時間制限、閾値(NSTEP, OPTTOL)、PCのクラッシュなどで計算が停止した場合は、上記の方法と構造最適化途中の構造を抜き出してリスタートさせるとよいでしょう。

ちなみに、構造最適化では、エネルギーの1次微分と2次微分が必要です。2次微分の計算は非常に時間がかかるので、前の計算で2次微分が求められている場合はそれを再利用するのも一つの手です。計算レベルを落とした近似2次微分を初期値として再利用するのも有効です。この値は、近似値にすぎないのである程度正確であればOKです。

例えば、初期構造の2次微分の計算結果を用いて、高いレベルの構造最適化計算を行うと収束性が向上することがあります。それでは早速、近似2次微分を初期値として再利用する方法を見てみましょう。

1) RUNTYPE=HESSIANやHSSEND=.TRUE.で振動数計算を行うとPUNCHファイル(拡張子.dat)に2次微分が出力されます。” $HESS ”で検索して下から一番目のものがそうです。$HESSから$ENDまでコピーしましょう。

2)  Inputファイルにコピーした$HESS~$ENDを分子座標の$END以下に貼り付けます。
$STATPTグループHESS=READキーワードオプションを追加し2次微分を読み込むように指定すれば無事完了です。
rs08
3) 安息香酸のHF/6-31G(d)レベルの構造最適化計算を、2次微分の読込み” なし ”と ” あり ”で計算した結果が以下になります。初期構造の近似2次微分を初期値として用いた計算の方が、収束性が改善されていることがわかると思います。
rs03
注意したいのは、2次微分計算は1次微分計算の数倍時間がかかるのということです。つまり、この方法は計算の再開や収束性の改善などを目的に利用する場合はおすすめできますが、一からこの方法で計算負荷を減らそうという目的にはあまり適さないということです。

おわりに

今回は、GAMESS(US, Firefly)で実行した計算の再開方法や、一度計算した結果を再利用する方法を紹介しました。冒頭にも述べましたが、どんな目的で、どこから計算を再開させたいかが重要です。SCF計算と構造最適化計算でも、収束に向かっていないファイルを再開させても時間がもったいありません。再利用したいファイルに利用価値があるのか、一度出力ファイルを確認しておくことも重要です。
今後は、さらにSCF計算や構造最適化計算の収束性の改善について、もう少し詳しく紹介したいと思います。

【関連記事】
SCF計算と構造最適化計算の違いって何?
構造最適化について知ろう
GAMESSの基本的なエラーの対処法