初期推定#
分子と基底が揃いました。SCF が走る前に、出発点 — 最初の Fock 行列を作るための近似密度 — が必要です。その 出発点が**初期推定(initial guess)**です。ふだんは意識しません:qc-rs が良い既定を自動で選びます。しかしこれを 理解しておくと、計算が収束しにくいときにまさに効きます — そこでこの短い章では、推定とは何か、なぜ(ふつうは) 答えを変えないのか、そして必要なときにどう変えるかを説明します。
理論:なぜ SCF に推定が要るのか#
Hartree–Fock の自己無撞着場ループを思い出しましょう。Fock 行列 \(\mathbf F\) は密度 \(\mathbf D\) から作られますが(クーロン・交換演算子 \(\mathbf J[\mathbf D]\), \(\mathbf K[\mathbf D]\) を通じて)、その密度は \(\mathbf F\) を対角化して得られます。この循環 —
こそが SCF が反復的である理由です。しかしこれは同時に、ループが最初の一歩を踏み出すにも既に密度が手元に 必要だ、ということを意味します。初期推定がその出発点 \(\mathbf D_0\)(または出発軌道の組)を与えます。
要点はこうです。SCF は不動点 — 自己無撞着な密度 — へ収束し、行儀のよい系ではその不動点はどこから出発したか に依りません。だから:
重要
推定は経路を変え、目的地を変えない 初期推定が違っても収束エネルギーは同じです;変わるのはサイクル数だけ(そして難しい系では収束するか どうか)。最終密度に近い推定は速く収束し、粗い推定は多くのサイクルを要します。安い推定と引き換えに精度を失う ことはありません — 速さと頑健さだけの話です。
これは下の総合例で直接見えます:水に対する 6 通りの推定はすべて \(-76.026794\,E_h\) に着地し、8〜12 サイクルを 要します。
既定:SAD#
qc-rs の既定は**原子密度の重ね合わせ(SAD)**です。考え方は物理的で安価:分子の密度は一次近似では、原子の密度を 重ねただけ、というものです。SAD は各元素の球平均密度を(小さな原子 SCF から)あらかじめ計算し、核位置で足し合わせて \(\mathbf D_0\) を作ります。既に持っている以上の分子積分を必要とせず、周期表全体で頑健で、たいてい数サイクルで収束 するほど十分近いのです。
自分で要求する必要はありません。中核概念 で述べたとおり、SCF が出発状態を必要とし、
それが存在しないとき run() は sad 推定を自動挿入します。(原子密度を作れない場合 — 未表化の元素や ECP のみの
重原子 — SAD は gwh、次に素の内殻ハミルトニアンへフォールバックします。)
推定のメニュー#
既定は guess("...") で上書きできます。利用できる推定を、最も物理的なものから最も粗いものへ、下の例で
水/cc-pvdz(RHF)に要したサイクル数とともに示します:
|
何をするか |
サイクル* |
|---|---|---|
|
原子密度の重ね合わせ — 頑健・物理的 |
9 |
|
固定した最小 AO 占有密度(PySCF |
9 |
|
Harris 汎関数密度(非自己無撞着な重ね合わせ) |
8 |
|
原子ポテンシャルの重ね合わせ(\(\mathbf F = \mathbf H_{\text{core}} + \mathbf J[\mathbf D_{\text{SAD}}]\)、クーロンのみ) |
10 |
|
一般化 Wolfsberg–Helmholz(内殻ハミルトニアンから);ECP 対応 |
12 |
|
素の内殻ハミルトニアン \(\mathbf T + \mathbf V\) — 電子間相互作用を一切無視;最も粗い |
11 |
|
別のチェックポイントから軌道を取り込み/射影(リスタート) |
— |
*サイクル数は系依存です — 普遍的な順位づけと読まないでください。水では近接していますが、難しい系ではその 広がり(そしてどの推定が勝つか)は大きく違いえます。要点は、すべてが同じエネルギーに達することです。
使い方#
よくあるのは何もしないこと — run() に SAD を挿入させます。上書きするには、SCF の前に guess ステップを
足します(他のステップと同じく、関数形式でもメソッドチェーン形式でも):
import qc
water = "O 0 0 0.117; H 0 0.757 -0.469; H 0 -0.757 -0.469"
# 明示的な推定(メソッドチェーン)
mychk = qc.chk.new(atom=water, ao="cc-pvdz", unit="angstrom").guess("gwh").scf(ref="r").run()
# 同等の関数形式
base = qc.chk.new(atom=water, ao="cc-pvdz", unit="angstrom")
mychk = qc.scf(qc.guess(base, "gwh"), ref="r").run()
前の結果からリスタート:guess("read")#
guess("read", source=...) は別のチェックポイントから軌道を取り込み、現在の基底へ射影します。日常の 2 つの用途:
保存した
.qch5からのリスタート — 続きを計算する、または既存の SCF に対して物性を再計算する。基底のステップアップ — 小さな基底で安く収束させ、その結果を推定として大きな基底の SCF に渡す。すると 高価なサイクルがずっと少なくて済みます:
small = qc.chk.new(atom=water, ao="cc-pvdz", unit="angstrom").scf(ref="r").run()
small.save("water_dz.qch5")
big = qc.chk.new(atom=water, ao="cc-pvtz", unit="angstrom") \
.guess("read", source="water_dz.qch5").scf(ref="r").run()
read の詳細(MO 射影、対称性/既約表現の扱い)はチェックポイントのリファレンス
qc-chk.md にあります。
推定が本当に効くとき#
日常の閉殻分子では既定でうまくいきます。推定が注意に値するのは 3 つの場合です:
収束しにくい系 — 遷移金属、準縮退、ジラジカル。より良い推定(または関連計算からの
read)が、滑らかな 収束と、振動する SCF との分かれ目になりえます。SCF の章 の収束ツールと併用してください。ECP 基底 — 原子重ね合わせ推定(
sad/sap/harris)は全電子で、ECP 原子に誤った価電子数を置いて しまうので、qc-rs は自動的にgwhへ降格します(価電子のみの内殻ハミルトニアン \(\mathbf T + \mathbf V_{\text{nuc}}[Z_{\text{eff}}] + \mathbf V^{\text{ECP}}\) を対角化)。gwhとcoreは そのまま ECP 対応です。対称性の破れ・励起状態 — UHF ジラジカルは空間対称性を破るのに
guess(..., spin_break="mix")を要する ことが多く、ΔSCF 励起状態は非 Aufbau 占有(mom=Trueとguess(..., occupation=...))を要します。 これらは SCF の章 で扱います。
総合例:同じエネルギー、異なるサイクル数#
本章の考え全体が 1 つのスクリプトに:どの推定も同一のエネルギーに収束しますが、SCF サイクル数は変わります:
import qc
water = "O 0 0 0.117; H 0 0.757 -0.469; H 0 -0.757 -0.469"
for g in ("sad", "minao", "harris", "sap", "core", "gwh"):
chk = qc.chk.new(atom=water, ao="cc-pvdz", unit="angstrom").guess(g).scf(ref="r").run()
print(f"{g:8} E = {chk.scf.energy:.6f} cycles = {chk.scf.ncycle}")
# sad E = -76.026794 cycles = 9
# minao E = -76.026794 cycles = 9
# harris E = -76.026794 cycles = 8
# sap E = -76.026794 cycles = 10
# core E = -76.026794 cycles = 11
# gwh E = -76.026794 cycles = 12
エネルギーはビット単位で同一で、動くのは cycles の列だけです。これが推定の唯一の仕事です:出発点を決めるので
あって、答えを決めるのではありません。
練習 3
実行せずに、同じ分子・基底で
guess("core")とguess("sad")から得られる収束 RHF エネルギーはどうなると 予想しますか。なぜですか。同じ分子に対し
cc-pvqz(高価な基底)で 50 回の SCF を回す必要があります。各回のサイクルを減らすため、guess("read")を使う戦略を描きなさい。重金属錯体に ECP 基底を与え、
guess("harris")を要求しました。qc-rs は実際に何を使い、それはなぜですか。
解答 練習 3
同じエネルギー。 SCF は推定に依らず同じ不動点へ収束します;
coreはそこへ着くのに単に多くのサイクルを 要するだけです(電子間相互作用を完全に無視するので、真値から遠くから出発します)。より安い基底(例
cc-pvdz)または近い構造で一度収束させ、save()し、それをcc-pvqz計算のguess("read", source=...)として渡します — すると各高価な SCF は、ほぼ収束した密度から出発し、その高コストな サイクルがずっと少なくて済みます。harrisをgwhへ降格します。harris(sad/sapと同様)は全電子の原子重ね合わせ推定で、ECP 原子に 誤った価電子数を割り当ててしまいます;gwhは価電子のみの ECP 内殻ハミルトニアンから作られ、正しいのです。
分子・基底・出発点が定まったので、いよいよ SCF 本体 — 参照法・汎関数・収束ツール — を 次章 で扱えます。