久しぶりの記事になります。研究所の仕事が多くて、全然更新できませんでした。
筆者はこれまで、低分子の QM 計算を主に行ってきました。扱う分子の総原子数はせいぜい 70 原子程度でした。
しかし、最近より大きな分子の計算(原子数 400 個くらい)に取り組むことになりました。
Gauss View 上で構造を書くのも大変ですが、それ以上に SCF の収束が悪くてとにかく困っています。
低分子の計算をしていた時は “scf=tight” と指定していました。
scf が収束しないと最適化計算に進めません。よくある原因は初期構造が汚いということです。この場合、計算レベルをどれだけ落としても、scf の cycle 数をどれだけ上げても、SCF は収束しません。
このような場合に私がよく行うのは、scf の閾値を下げることです。
【注意】
この方法は、g09 まではうまく機能していましたが、g16 ではエラーが起きて止まってしまうことがあります。
“scf=conver=X” というキーワードで指定できます。これは、10 の -x 乗を scf 収束の閾値にするという意味です。私はいつも x=5 くらいにしています。どうしてもダメな時は、4にしますが、、、いくつまでなら許容かは分かりません。
log ファイルを見てもらうとわかるのですが、各 cycle の最後にある RMSDP という値が scf 収束の判定に使われています。
RMSDP=8.58D-03 MaxDP=1.82D+00 DE= 9.09D+00 OVMax= 9.98D-01 Cycle 3 Pass 0 IDiag 1: RMSU= 7.13D-03 CP: 9.86D-01 3.64D-02 E= -5781.52419164242 Delta-E= 19.132282000057 Rises=F Damp=F DIIS: error= 1.15D-01 at cycle 3 NSaved= 3. NSaved= 3 IEnMin= 1 EnMin= -5809.74221119994 IErMin= 2 ErrMin= 3.86D-02 ErrMax= 1.15D-01 0.00D+00 EMaxC= 1.00D-01 BMatC= 1.04D+01 BMatP= 2.30D+00 IDIUse=2 WtCom= 0.00D+00 WtEn= 1.00D+00 Rare condition: small coef for last iteration: 0.000D+00 Coeff-En: 0.790D+00 0.141D+00 0.692D-01 Coeff: 0.790D+00 0.141D+00 0.692D-01 Gap= 0.547 Goal= None Shift= 0.000 RMSDP=1.25D-02 MaxDP=2.15D+00 DE= 1.91D+01 OVMax= 9.98D-01 Cycle 4 Pass 0 IDiag 1: RMSU= 8.82D-03 CP: 9.86D-01 1.23D+00 6.54D-02 E= -5735.93458756071 Delta-E= 45.589604081710 Rises=F Damp=F DIIS: error= 1.29D-01 at cycle 4 NSaved= 4. NSaved= 4 IEnMin= 1 EnMin= -5809.74221119994 IErMin= 2 ErrMin= 3.86D-02 ErrMax= 1.29D-01 0.00D+00 EMaxC= 1.00D-01 BMatC= 2.04D+01 BMatP= 2.30D+00 IDIUse=2 WtCom= 0.00D+00 WtEn= 1.00D+00 EnCoef did 100 forward-backward iterations Coeff-En: 0.883D+00 0.768D-02 0.136D-01 0.963D-01 Coeff: 0.883D+00 0.768D-02 0.136D-01 0.963D-01 Gap= -0.396 Goal= None Shift= 0.000 RMSDP=9.65D-03 MaxDP=2.04D+00 DE= 4.56D+01 OVMax= 9.98D-01
scf=tightの場合は、RMSDP が 10 の -8 乗以下になると scf 収束となります。(つまり、RMSDP の値が 10 の -9 乗のオーダーになった時。)
ちなみに、RMSDP は密度行列変化の二乗平均の平方根を表しています。RMSD は、root mean square deviation の略です。
scfの閾値をさげると面白いように計算が速く回ります。
正確性は下がってしまうと言われていますが、実質そんなに差はありません。
私は、いつもある程度構造最適化が回るようになったところで、一旦計算を止め、その構造から scf=tight と指定し直して計算を再開するようにしています。
目次
関連する記事
- Rh(II) 触媒を用いたインドール合成の計算化学【反応機構解析】
- Rh/Ru を用いた σ-bond activation に適した汎関数!
- 構造最適化の閾値は、何を意味しているのか?
- 量子化学計算で a.u. を使う理由 〜Why Atomic Unit?〜
- Rh の C-H 挿入反応の新知見〜遷移状態後の枝分かれ〜
- DFT は、正確な関数を目指す道から外れつつある
【追記】
元記事への大量アクセスが検出されましたので削除し、記事を作り直しました。
元記事投稿日 2016年6月28日 @ 10:13
記事を大変興味深く読ませていただきました。
記事の通り、SCF=(Conver=6)で計算を以下のように投げました。
#p opt B3LYP/6-31+g(d) SCF=(Conver=6,MaxCycle=500) Int=(Grid=UltraFine)
1回目のSCFが15Cycleで収束し、L701で以下のようなエラーが出ました。このようなエラーが出たときの対処方法などご存知でしたら教えていただけないでしょうか?
Leave Link 601 at Thu Jan 21 12:41:19 2021, MaxMem= 12884901888 cpu: 85.4 elap: 2.5
(Enter /app/gaussian/g16/l701.exe)
SCFChk: SCF convergence 2.52D-07 required 1.00D-08
SCF Error SCF Error SCF Error SCF Error SCF Error SCF Error SCF Error SCF Error
ERROR!!!!
SCF has not converged. Gradients and post-SCF results would be GARBAGE!!
SCF Error SCF Error SCF Error SCF Error SCF Error SCF Error SCF Error SCF Error
コメントありがとうございます。
記事内にも赤字で書いてありますが、scf=conver=X のキーワードは、gaussian09 まででしか使えません。
「SCF has not converged. Gradients and post-SCF results would be GARBAGE!!」のエラーコメントにもある通り、gaussian16 では scf の閾値を下げることが出来なくなってしまいました。
どうしても、scf が収束しなくて困っているのであれば、少し基底関数のレベルを下げて計算し、その後、現在の計算レベルで計算し直すことをお勧め致します。
その際に、scf の MacCycle を上げることも有効な場合があります。
やはりG16では使えないのですね。わざわざ返信ありがとうございます。
G09では確かに動くことを確認しました。これはバグなんでしょうかね・・・少なくとも使えなくなったなら、G16のマニュアルから表記を消してほしいですね。
最近 興味深く拝見させていただいています。
通常は ガウシアンの場合、最適構造のみに意味があるので OPTなら iop(5/13=1)と scf=(vshift=700) をいれておけば そのうち安定な立体構造と電子構造におちついて収束すると思います。ただscf収束しなくて進行するので最後に目視でうまくいっているかどうかの確認は必要です。
コメントありがとうございます。その二つのオプションは知りませんでした。
当方、計算化学に関しては全くの素人のため、今後とも色々と教えていただければと思います。