ポスト SCF 法:RI-MP2#
Hartree–Fock は平均場法です:各電子は他電子の平均場しか感じないので、 電子が瞬間的に互いを避けるさまを外します。その欠けた効果のエネルギーが相関エネルギーで、それを回収するのが ポスト SCF(ポスト Hartree–Fock)法の仕事です。本章は qc-rs が現在実装する系列 — RI-MP2 とそのスピン スケール変種 — を扱います。
理論:相関と 2 次摂動論#
Part II の定義を思い出しましょう:
全エネルギーに対しては小さな割合ですが、化学的には決定的 — 結合エネルギー・反応障壁・分散はすべてそこにあります。 それを見積もる最も安価で系統的な方法が **2 次 Møller–Plesset 摂動論(MP2)**です:真の電子間反発と HF 平均場の 差を摂動として扱い、2 次のエネルギー補正を取ります。閉殻では
占有(\(i,j\))と仮想(\(a,b\))軌道にわたる二電子積分 \((ia|jb)\) を軌道エネルギー分母で割った和です。括弧内の 2 項が
異スピンと同スピンの寄与で、qc-rs はこれらを別々に報告します(e_os, e_ss)。これが下のスピンスケール
変種を可能にします。
RI(「密度フィッティング」)近似#
ボトルネックは 4 指標積分 \((ia|jb)\) です。恒等分解(RI)、すなわち密度フィッティング近似は、これを補助基底
(より小さな専用フィッティング集合)を介して分解し、4 指標を 3 指標の積に変えます。これが qc-rs の 唯一の MP2
経路です(速く正確で、フィッティング誤差は化学的精度をはるかに下回ります)。だから qc.chk.new(...) に ric=
で相関フィッティング補助基底を渡します。
使い方#
MP2 は LCT 法です(SCF 参照の上に載る相関法群を lct が扱います)。先に SCF を走らせ、lct ステップを足します:
import qc
water = "O 0 0 0.117; H 0 0.757 -0.469; H 0 -0.757 -0.469"
hf = qc.chk.new(atom=water, ao="cc-pvdz", unit="angstrom",
ric="cc-pvdz-ri/mp2fit").scf(ref="r").run() # ric= 補助基底に注意
m = hf.lct(method="mp2").run()
m.lct.energy # -76.230747 全 MP2 エネルギー(E_HF + E_corr)
m.lct.e_corr # -0.203953 相関エネルギー
m.lct.e_os # 異スピン部分
m.lct.e_ss # 同スピン部分
ric= 補助基底(ここでは cc-pvdz に合わせた相関フィッティング集合 cc-pvdz-ri/mp2fit)は必須です — RI-MP2 に
非 RI のフォールバックはありません。補助は軌道基底に合わせて選びます(cc-pvtz → cc-pvtz-ri/mp2fit、def2 系 →
その def2-*/mp2fit)。
Tip
RI-MP2 の精度は? RI フィッティング誤差はごくわずかです。この 水/cc-pVDZ では、qc の RI-MP2 相関エネルギー(−0.203953)は従来型 (非 RI)MP2 と 1.5 × 10⁻⁵ Ha で一致 — 化学的精度(〜1.6 mHa)をはるかに下回ります。
スピン成分スケール変種#
MP2 は相関をわずかに過大評価するため、異/同スピン部分の 2 つの経験的な再スケーリングが、追加コストなしで精度を
改善することがよくあります — method を変えるだけです:
scs = hf.lct(method="scs-mp2").run().lct.energy # -76.226839 SCS-MP2 (Grimme)
sos = hf.lct(method="sos-mp2").run().lct.energy # -76.224885 SOS-MP2 (同スピンを落とす、O(N⁴))
scs-mp2は異・同スピンを異なる係数(⅚ と ⅓)でスケールします。sos-mp2は異スピン項だけを残し(1.3 倍)、O(N⁴) の Laplace アルゴリズムを可能にします。
開殻と frozen core#
RI-MP2 は RHF・UHF・ROHF 参照で動きます(開殻ラジカルはその UHF/ROHF 軌道を使います)。frozen-core
近似(化学的に不活性な内殻軌道を相関和から除く、この分野の通常の既定)やその他の調整は lct.* 下の iop キー
です — 例 iop={"lct.frozen_core": True} — IOP リファレンス に記載。
注釈
現在実装されているもの
RI-MP2 系列(mp2 / scs-mp2 / sos-mp2)は実際のエネルギーを計算します。他の lct 法(cc2)、
多参照法(casscf, caspt2, nevpt2, fci, dmrg)、励起状態 td は認識されますがモックです(実相関
エネルギーなしにワークフローだけ組みます)。本章は実数値を出す手法を扱います。
総合例:相関エネルギー#
import qc
water = "O 0 0 0.117; H 0 0.757 -0.469; H 0 -0.757 -0.469"
hf = qc.chk.new(atom=water, ao="cc-pvdz", unit="angstrom",
ric="cc-pvdz-ri/mp2fit").scf(ref="r").run()
print(f"E(RHF) = {hf.scf.energy:.6f}") # -76.026794
for method in ("mp2", "scs-mp2", "sos-mp2"):
e = hf.lct(method=method).run().lct.energy
print(f"E({method:8}) = {e:.6f}")
# E(mp2 ) = -76.230747 (E_corr = -0.203953)
# E(scs-mp2 ) = -76.226839
# E(sos-mp2 ) = -76.224885
相関を加えると RHF エネルギーは約 0.20 Ha 下がります — 全体に対しては小さいですが、これが結合エネルギーや反応 熱化学を正しくする部分です。
練習 5
hfをric=なしで作ってhf.lct(method="mp2").run()を呼びました。何が問題で、SCF が要らなかったのに MP2 がそれを必要とするのはなぜですか。m.lct.e_osとm.lct.e_ssから、素の MP2 相関エネルギーをどう再構成しますか。そして SOS-MP2 はe_ssに 何をしますか。
解答 練習 5
RI-MP2 には非 RI 経路がないので、相関フィッティング補助基底が必要です;
ric=がないと 4 指標積分を分解 する補助がありません。SCF が要らなかったのは、その J/K 構築が 4 中心 ERI(または JK-fit 補助)を使っていた ため — MP2 相関補助とは別のフィッティング集合です。素の MP2:
e_corr = e_os + e_ss。SOS-MP2 はe_ssを完全に落とし(0 倍)、e_osを 1.3 倍します。これが O(N⁴) で走れる理由です。
RI-MP2 は 1 つの構造での相関エネルギーを与えました。平衡構造と力を求めるため、次章 は 解析的勾配と構造最適化に進みます。