atomscf.scf_hf
Hartree-Fock SCF 实现
本模块实现原子 Hartree-Fock 自洽场计算。
实现方法
采用算子-作用式构造 Fock 矩阵:
交换算子 K 作用于基向量得到矩阵元
组合局域哈密顿与交换矩阵
对角化求解占据态
物理背景
Hartree-Fock 方程(径向中心场形式):
其中: - v_H(r) 是 Hartree 势(局域) - K_ℓ 是交换算子(非局域)
引用
Szabo & Ostlund (1996) "Modern Quantum Chemistry" Dover, Chapter 3
Functions
|
对 H 原子运行最小 HF 自洽:交换与 Hartree 相消,仅剩外势。 |
|
运行通用 HF SCF 计算(支持 s, p 等多 l 通道)。 |
|
运行 s 轨道 HF SCF 计算。 |
Classes
|
HF 最小实现配置(教学版,仅支持 H)。 |
|
HF 最小实现结果容器(H 验证)。 |
|
完整 HF SCF 配置(支持 s 轨道)。 |
|
通用 HF SCF 配置(支持 RHF/UHF 和多 l 通道)。 |
|
通用 HF SCF 结果容器(支持 RHF/UHF)。 |
|
HF SCF 结果容器。 |
- class atomscf.scf_hf.HFConfig(Z, r, w, tol=1e-07, maxiter=50)[源代码]
HF 最小实现配置(教学版,仅支持 H)。
- r
径向网格。
- Type:
- w
梯形权重。
- Type:
- atomscf.scf_hf.run_hf_minimal(cfg)[源代码]
对 H 原子运行最小 HF 自洽:交换与 Hartree 相消,仅剩外势。
该实现用于快速验证 HF 思想与数值骨架。对多电子(如 C)不适用。
- class atomscf.scf_hf.HFSCFConfig(Z, r, w, n_occ=1, occ_nums=None, mix_alpha=0.3, tol=1e-06, maxiter=100, initial_guess='hydrogen', delta=None, Rp=None)[源代码]
完整 HF SCF 配置(支持 s 轨道)。
- 参数:
- r
径向网格
- Type:
np.ndarray
- w
积分权重
- Type:
np.ndarray
- __init__(Z, r, w, n_occ=1, occ_nums=None, mix_alpha=0.3, tol=1e-06, maxiter=100, initial_guess='hydrogen', delta=None, Rp=None)
- class atomscf.scf_hf.HFSCFResult(converged, iterations, eigenvalues, orbitals, E_total, E_kinetic, E_ext, E_hartree, E_exchange)[源代码]
HF SCF 结果容器。
- 参数:
- eigenvalues
本征能量(占据态)
- Type:
np.ndarray
- atomscf.scf_hf.run_hf_scf_s(cfg)[源代码]
运行 s 轨道 HF SCF 计算。
实现完整的 Hartree-Fock 自洽场循环: 1. 初始化波函数猜测 2. 计算 Hartree 势 3. 构造 Fock 矩阵(包含交换算子) 4. 对角化求解本征态 5. 检查收敛并混合 6. 重复直到收敛
- 参数:
cfg (HFSCFConfig) -- HF SCF 配置
- 返回:
收敛的 HF 结果
- 返回类型:
备注
收敛判据: 波函数的 RMS 变化 < tol
密度混合: u_new = α * u_scf + (1-α) * u_old
示例
氢原子 HF:
>>> from atomscf.grid import radial_grid_linear, trapezoid_weights >>> r, _ = radial_grid_linear(n=1000, rmin=1e-6, rmax=50.0) >>> w = trapezoid_weights(r) >>> cfg = HFSCFConfig(Z=1, r=r, w=w, n_occ=1, occ_nums=[1.0]) >>> res = run_hf_scf_s(cfg) >>> print(f"E_1s = {res.eigenvalues[0]:.6f} Ha") # 应约 -0.5 Ha >>> print(f"E_total = {res.E_total:.6f} Ha") # 应约 -0.5 Ha
参见
exchange_operator_s
s 轨道交换算子
v_hartree
Hartree 势计算
- class atomscf.scf_hf.HFSCFGeneralConfig(Z, r, w, occ_by_l, eigs_per_l, spin_mode='RHF', occ_by_l_spin=None, mix_alpha=0.3, tol=1e-06, maxiter=100, delta=None, Rp=None)[源代码]
通用 HF SCF 配置(支持 RHF/UHF 和多 l 通道)。
- 参数:
- r
径向网格
- Type:
np.ndarray
- w
积分权重
- Type:
np.ndarray
- occ_by_l
按 l 分组的占据数配置(RHF 模式) 格式:{l: [n_1, n_2, ...]} 表示该 l 通道的各占据态占据数 例:C (1s² 2s² 2p²) → {0: [2.0, 2.0], 1: [2.0]}
- spin_mode
自旋处理模式,默认 'RHF' - 'RHF': 限制性 Hartree-Fock(闭壳层精确,开壳层近似) - 'UHF': 非限制性 Hartree-Fock(自旋极化,适用于开壳层)
- Type:
str, optional
- occ_by_l_spin
自旋分辨占据数配置(UHF 模式) 格式:{l: {'up': [n_1, ...], 'down': [n_1, ...]}} 例:C ³P 态 → {0: {'up': [1.0, 1.0], 'down': [1.0, 1.0]},
1: {'up': [2.0], 'down': [0.0]}}
若为 None 且 spin_mode='UHF',自动从 occ_by_l 均分生成
- __init__(Z, r, w, occ_by_l, eigs_per_l, spin_mode='RHF', occ_by_l_spin=None, mix_alpha=0.3, tol=1e-06, maxiter=100, delta=None, Rp=None)
- class atomscf.scf_hf.HFSCFGeneralResult(converged, iterations, eigenvalues_by_l, orbitals_by_l, E_total, E_kinetic, E_ext, E_hartree, E_exchange, spin_mode='RHF', eigenvalues_by_l_spin=None, orbitals_by_l_spin=None)[源代码]
通用 HF SCF 结果容器(支持 RHF/UHF)。
- 参数:
- orbitals_by_l_spin
按 (l, spin) 分组的占据态波函数(UHF 模式)
- __init__(converged, iterations, eigenvalues_by_l, orbitals_by_l, E_total, E_kinetic, E_ext, E_hartree, E_exchange, spin_mode='RHF', eigenvalues_by_l_spin=None, orbitals_by_l_spin=None)
- atomscf.scf_hf.run_hf_scf(cfg)[源代码]
运行通用 HF SCF 计算(支持 s, p 等多 l 通道)。
实现按 l 分组的自洽场循环,每个 l 通道独立求解 Fock 方程, 但通过 Hartree 势和交换算子耦合。
- 参数:
cfg (HFSCFGeneralConfig) -- 通用 HF SCF 配置
- 返回:
收敛的 HF 结果
- 返回类型:
示例
碳原子 HF (1s² 2s² 2p²):
>>> cfg = HFSCFGeneralConfig( ... Z=6, ... r=r, w=w, ... occ_by_l={0: [2.0, 2.0], 1: [2.0]}, # 1s², 2s², 2p² ... eigs_per_l={0: 2, 1: 1}, # 求解 2 个 s + 1 个 p ... ) >>> res = run_hf_scf(cfg)