初期推定#

分子と基底が揃いました。SCF が走る前に、出発点 — 最初の Fock 行列を作るための近似密度 — が必要です。その 出発点が**初期推定(initial guess)**です。ふだんは意識しません:qc-rs が良い既定を自動で選びます。しかしこれを 理解しておくと、計算が収束しにくいときにまさに効きます — そこでこの短い章では、推定とは何か、なぜ(ふつうは) 答えを変えないのか、そして必要なときにどう変えるかを説明します。

理論:なぜ SCF に推定が要るのか#

Hartree–Fock自己無撞着場ループを思い出しましょう。Fock 行列 \(\mathbf F\) は密度 \(\mathbf D\) から作られますが(クーロン・交換演算子 \(\mathbf J[\mathbf D]\), \(\mathbf K[\mathbf D]\) を通じて)、その密度は \(\mathbf F\) を対角化して得られます。この循環 —

\[ \mathbf D \;\longrightarrow\; \mathbf F[\mathbf D] \;\xrightarrow{\;\mathbf{FC}=\mathbf{SC}\boldsymbol\varepsilon\;}\; \mathbf C \;\longrightarrow\; \mathbf D' \;\longrightarrow\; \cdots \]

こそが 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)に要したサイクル数とともに示します:

guess(...)

何をするか

サイクル*

"sad" (既定)

原子密度の重ね合わせ — 頑健・物理的

9

"minao"

固定した最小 AO 占有密度(PySCF minao);原子 SCF なしなので SAD より安い

9

"harris"

Harris 汎関数密度(非自己無撞着な重ね合わせ)

8

"sap"

原子ポテンシャルの重ね合わせ(\(\mathbf F = \mathbf H_{\text{core}} + \mathbf J[\mathbf D_{\text{SAD}}]\)、クーロンのみ)

10

"gwh"

一般化 Wolfsberg–Helmholz(内殻ハミルトニアンから);ECP 対応

12

"core"

素の内殻ハミルトニアン \(\mathbf T + \mathbf V\) — 電子間相互作用を一切無視;最も粗い

11

"read"

別のチェックポイントから軌道を取り込み/射影(リスタート)

*サイクル数は系依存です — 普遍的な順位づけと読まないでください。水では近接していますが、難しい系ではその 広がり(そしてどの推定が勝つか)は大きく違いえます。要点は、すべてが同じエネルギーに達することです。

使い方#

よくあるのは何もしないこと — 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}}\) を対角化)。gwhcore は そのまま ECP 対応です。

  • 対称性の破れ・励起状態 — UHF ジラジカルは空間対称性を破るのに guess(..., spin_break="mix") を要する ことが多く、ΔSCF 励起状態は非 Aufbau 占有mom=Trueguess(..., 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

  1. 実行せずに、同じ分子・基底で guess("core")guess("sad") から得られる収束 RHF エネルギーはどうなると 予想しますか。なぜですか。

  2. 同じ分子に対し cc-pvqz(高価な基底)で 50 回の SCF を回す必要があります。各回のサイクルを減らすため、 guess("read") を使う戦略を描きなさい。

  3. 重金属錯体に ECP 基底を与え、guess("harris") を要求しました。qc-rs は実際に何を使い、それはなぜですか。

分子・基底・出発点が定まったので、いよいよ SCF 本体 — 参照法・汎関数・収束ツール — を 次章 で扱えます。