これまで、GAMESSの入力ファイルにおける「基本的なキーワード」について説明してきました。GAMESSにはまだまだ沢山のオプションが用意されています。
int00
今回は、さらに一歩進んで入力ファイルに新たなキーワードを追加したり既存のオプションを変更してみましょう。ここでは、計算速度や精確性の向上など初心者にも比較的扱いやすくて直ぐに使えるキーワードを厳選して8つ紹介したいと思います。是非、今後の計算に役立ててください。

① $CONTRL NZVAR=0 $END, $ZMAT DLC=.TRUE. AUTO=.TRUE. $END

$CONTRL NZVAR=0 $END
$ZMAT DLC=.TRUE. AUTO=.TRUE. $END


これらキーワードは、$DATA以下に記述する分子座標をCartesian座標(別名:直交座標系, XYZ座標系, デカルト座標)から内部座標系(別名:Z-matrix)へ変換するキーワード郡です。
一般的に、Cartesian座標(デフォルト)の代わりに内部座標で最適化すると、計算速度(収束性)が向上します。これは、内部座標の方が結合長・結合角などが分子に働く力の方向をよく表しているためだと言われています。

$CONTRLグループでNZVAR=(自由度)を指定します(NZVAR=0(デフォルト)ではデカルト座標での最適化になります)。
NZVARで指定する自由度は、直線分子の場合は3N-5, 非直線分子は3N-6で記述します(Nは原子数)。
$ZMATグループのDLC=.TRUE.とAUTO=.TRUE.は、$DATA以下のCartesian座標から自動的に非局在内部座標に変換を指示するフラグです。
int04
例えば安息香酸の原子数は、18の非直線分子なので自由度は48(3×18-6=48)になります。つまり、NZVAR=48と指定する必要があります。安息香酸をHF/6-31G(d)で構造最適化した際の最適化ステップを示します(グラフの表示はGaussSumを使用しています)。
右図がCartesian座標で、左図が内部座標に変換するキーワードを指定した場合です。内部座標を用いた場合は、とても綺麗に収束しているのがわかります。19stepも短縮し、計算時間も私の環境では50%程度削減できました(計算環境はこの記事と同じです)。

この方法のデメリットとしては、直接結合を作っていない原子間距離などを内部座標に指定すると逆に収束が悪くなり発散することがあることです。その点、Cartesian座標は収束性は良くないものの比較的安定しているのでデフォルトの分子座標として設定されているようです。 

② $SCF DAMP=.TRUE. $END

$SCF DAMP=.TRUE. $END

Fock行列のDavidsonダンピングの使用を制御するフラグです。ダンピング(振動の減衰)係数は自動的に決定されますが、他のキーワードを使用して指定することも可能です。
デフォルト(何も記述しない場合)では、密度汎関数(DFT)法のみTRUE(有効)になっており、Hartree-Fock(HF)法や半経験的波動関数ではFALS(無効)になっています。このキーワードは、簡単に言うとSCF収束を加速させるフラグなので、なかなかSCFが収束しない場合(振動して)に追加すると上手くいくことがあります。

ちなみに、MoCalc2012でInputファイルを作成する場合は、HF法でも$SCF DAMP=.TRUE. $ENDのキーワードが自動で追加されます。特に理由がなければ、HF法などでも常用するキーワードとして追加しておくと良いでしょう。

③ $SCF DIRSCF=.TRUE. $END

$SCF DIRSCF=.TRUE. $END

これは逆に注意したいキーワードです。例えば、MacMolPltでInputファイルを作成した際にはデフォルトで追加されます(初期設定画面でDirect SCFにチェックマークが入っています)。DIRSCF=.TRUE.は、Direct SCF法を有効にします。つまり、HD(ハードディスク)から2電子積分の結果を読み取るのではなく、各SCFステップで積分を再計算するように指定するフラグです。
int01
Hartree-Fock(HF)法密度汎関数(DFT)法に基づいた電子状態計算は、2電子積分の計算に多くの計算機資源を費やしています。通常のSCF計算では、2電子積分をファイルに書き込み、 SCF 過程における繰り返し計算でそのファイルを読み込んで利用します。一方、この2電子積分をファイルに書き込まず毎回再計算を行う方法が Direct SCF法です。
一昔前は、Direct SCF 法は必然的にHDへのアクセスが無くなるため、CPU 時間では不利なもののI/O(入出力)の待機時間を含めた経過時間では、通常のSCF 法よりも有利となる事が多かったのでよく利用されていました。
しかし最近では、ハード, ソフトの両面でI/O性能の向上がみられるので、基底関数の数がそこまで大きくなければ、この方法を指定してもあまり変わらなかったり、逆に指定しない方が速かったりするので注意が必要です。

例えば、CaffeineをHF/6-31G(d)で構造最適化した場合、私の環境では通常のSCF法(キーワード追加なし)1061秒に対しDirect SCF 法(DIRSCF=.TRUE.)1313秒と計算時間の増加が認められました。
大規模系を計算する際(計算途中のファイルがそもそもHDに保存できない場合など)や、比較的古い家庭用PCを使用している場合などは$SCF DIRSCF=.TRUE. $ENDを追加するか検討の余地はあるかもしれません。

④ $STATPT HSSEND=.TRUE. $END

$STATPT HSSEND=.TRUE. $END

このブログでは、すでに紹介したキーワードですね。分子構造の最適化計算が終了した際に、振動数計算を自動で実行するフラグです。大抵の場合、求めた構造が安定構造遷移構造かを確認したり、熱力学的諸量を求めたりする必要があるので、振動数計算を連続で実行できるこのキーワードはかなり便利です。Inputビルダー(GUIソフト)の設定で、キーワード登録しておくことをおすすめします。もし、振動数計算を連続して実行しない場合は、HSSEND=.FALS.(または.F.)に訂正するかキーワードを削除するだけで済むので登録しておいて損はないと思います。
int06
デメリットと言えば、最適化計算が明らかにおかしな構造で終了しても、そのまま振動数計算が開始されることです。振動数計算は最適化計算と異なり計算負荷が大きいので、このような場合はいたずらに時間を浪費してしまいます。特に幾つかのジョブが控えていて、それらが相互に関係する場合などは、連続かマニュアルどちらが効率的か見極める必要があります。 

⑤ $FORCE NVIB=2 $END

$FORCE NVIB=2 $END

このキーワードは、振動解析の正確性が改善されます。エネルギーの2次微分は、各原子をxyz方向に変位させて一次導関数を計算することによって数値的に計算されます。NVIB=2は正と負のxyz方向の両方の変位を考慮することで、より正確な振動数が計算できます(NVIB=1では正だけ)。ただし、NVIB=1よりも2の方が当然計算時間は長くなります。

ちなみに、GAMESS(US)ではNVIB=2がデフォルト値で採用されており、Firefly(PC GAMESS)ではNVIB=1がデフォルト値で採用されています(GAMESS(US) Ver.August 18, 2016, Firefly Ver.8.2.0現在)。
つまりGAMESS(US)では、なにも記述しない場合、$FORCE NVIB=2 $ENDで計算を実行します。 

⑥ MAXIT, NCONV, NSTEP, OPTTOL

$CONTRL MAXIT=50 $END
$SCF NCONV=5 $END
$STATPT NSTEP=50 OPTTOL=0.00045 $END


これらの値は、以前Inputファイルの基本的なキーワード解説で説明しました。しかし、GAMESSのデフォルト値では少々頼りありません。特に中程度の有機分子であれば、ファーストチョイスとしてこの設定値をおすすめします。

MAXITは、SCF計算の繰り返し回数を指定します。デフォルトは30回とやや少ないので50~100回に指定します。
NCONVは収束の閾値1.0D-5hartree/bohr(デフォルト)のままで十分だと思います。厳しくするのは良いですが4以下にはあまりすべきではありません。
NSTEPは、構造最適化の際の探索回数の上限を指定します。デフォルトは20回ですが、これは少なすぎるので50~100回程度を指定します。
OPTTOLはデフォルト値(1.0D-4hartree/bohr)は少々厳しいので、4.5D-4hartree/bohrに指定しています(Gaussianのデフォルト値と同じ)。増やしても、目的の構造が得られれば事実上はあまり問題ありません。ただし、あまり閾値を緩め過ぎると当然目的の安定構造を得られなくなります。また、OPTTOL値は特に弱い相互作用を計算する場合には慎重に決める必要があります。
int02
以前も説明しましたが、MAXITの指定値で閾値(NCONV)以下にならなければ、電子状態が求まらないので、その時点でGMAESSは異常終了(SCF HAS NOT CONVERGED)します。
一方で、NSTEPは指定値で閾値(OPTTOL)以下にならなくても、GAMESSは異常終了のエラーメッセージを出力しないので注意が必要です。
MAXITとNSTEPは各閾値を目指して計算する際の繰返し回数です。例えば極端に大きく500に指定しても、500回繰返し計算するわけではなく閾値に達したら終了するので、この意味を間違わないようにしましょう。ただし、あまり大きく設定しすぎると既に構造が発散しているにも関わらず計算を続けてしまうなど、時間の浪費につながるので計算する系や計算方法(閾値や理論/基底関数など)とのバランスを考慮する必要があります。 

⑦ $CONTRL INTTYP=HONDO $END

$CONTRL INTTYP=HONDO $END

すべての積分にHONDO/Rys多項式パッケージを使用するフラグです。2電子積分の正確性を改善します(計算時間は長くなります(デフォルトはPOPLE))。
このキーワードは、常に追加することはおすすめしません。計算時間がかかってしょうがないので、計算が上手くいかない時や、⑥や⑧のキーワードを組み合わせて計算精度を上げたい場合に追加すると良いと思います。
GAMESS(US)Firefly(PCGAMESS)では、このキーワードの意味合いが少々異なるので厳密に知りたい方はプログラム付属のマニュアルと下記URLを参照してください。
http://classic.chem.msu.su/gran/gamess/inttyp.html

⑧ $SCF FDIFF=.FALSE. $END$

$SCF FDIFF=.FALSE. $END

インクリメンタルなフォック行列の形成を要求するためのフラグです。すべての2電子の寄与は前の反復以降のフォック行列の変化のみを計算します。これにより、若干の精確性を犠牲にCPU時間を節約しています。
FDIFF=.FALSE.(要求しない)を指定することで、SCF収束性の改善が期待できます(当然計算時間は長くなります)。Diffuse関数を使用した場合など、なかなかSCFが収束しない場合(振動して)に追加すると上手くいくことがあります。このキーワードも、⑦同様に計算が上手くいかない時や、⑥や⑦のキーワードを組み合わせて計算精度を上げたい場合に追加することをおすすめします。 

おわりに

今回は、初心者にも比較的扱いやすくて直ぐに実践で使えるキーワードをチョイスしてみました。まずは実際に使用してみて、キーワードの有効性を体感してみてください。
そうすれば、もっと”こんなことができるキーワードないのかな?”という疑問が湧き上がってくるかもしれません。そのときこそ学習のチャンスです。少々難解ですがGAMESSの付属のマニュアルに目を通してみてください。キーワードの数はかなり多いので一から全てを理解するのではなく困ったときや、疑問が湧いた時(in situ)に学習する方が断然効率的だと思います。

【関連記事】
Inputファイルを見てみよう その①~入門編〜
Inputファイルを見てみよう その②~中級編~
SCF計算と構造最適化計算の違いって何?
GAMESSの入力ファイルに関する7つの豆知識