项目介绍
AtomSCF 是一个为电子结构理论教学设计的原子自洽场计算工具,专注于径向一维问题的最小化实现。
设计理念
本项目遵循以下设计原则:
教学优先: 代码清晰易读,注重物理直觉而非性能优化
渐进式实现: 从最简单的氢原子 HF 到多电子 LSDA,逐步增加复杂度
数值稳定性: 提供多种网格和求解器选择,适应不同数值场景
文档完整: 区分算法原理推导与 API 使用文档
适用场景
推荐用于:
电子结构理论课程教学
理解 HF 和 DFT 方法的核心原理
测试新的数值方法或泛函
小规模原子基准计算
不推荐用于:
生产环境的高精度计算(建议使用 PySCF, Psi4 等)
分子或固体计算(本代码仅支持球对称原子)
性能关键场景(未进行深度优化)
核心功能
Hartree-Fock 方法
RHF (Restricted HF):
适用于闭壳层体系(He, Be, Ne, ...)
自旋轨道共享同一空间波函数
精度:氦原子 -2.86 Ha(实验值 -2.90 Ha)
UHF (Unrestricted HF):
适用于开壳层体系(Li, C, N, O, ...)
自旋上/下轨道独立优化
Li 原子能量比 RHF 降低 ~54 mHa
交换积分:
Slater 积分径向计算($R^k$ 两段累积法)
角动量耦合系数(Wigner 3j 符号)
多角动量通道耦合(s-s, s-p, p-p, ...)
密度泛函理论
LSDA (Local Spin Density Approximation):
自旋极化密度
支持多种交换-关联泛函组合
交换泛函:
Dirac 交换: $E_x = -C_x \int n^{4/3}(r) dr$
关联泛函:
PZ81: Perdew-Zunger 1981 参数化
VWN: Vosko-Wilk-Nusair (RPA 拟合)
数值方法
径向网格类型:
线性网格: 适合近核区域精细计算
对数网格: 适合长程衰减行为
指数变换网格: 结合两者优势(精度提升 ~7x)
混合网格: 分段不同间距
求解器:
2 阶有限差分 (FD2)
5 阶有限差分 (FD5, 等距网格)
Numerov 方法(对数网格)
变换 Hamiltonian(指数网格)
代码架构
模块层次:
atomscf/
├── grid.py # 径向网格生成
├── operator.py # 方程求解器
├── scf.py # DFT SCF 框架
├── scf_hf.py # HF SCF 框架
├── hartree.py # Hartree 势计算
├── occupations.py # 电子占据方案
├── utils.py # 积分工具
├── xc/ # 交换-关联泛函
│ ├── lda.py
│ └── vwn.py
└── hf/ # HF 交换积分
├── slater.py
├── angular.py
└── exchange.py
依赖项
核心依赖:
Python ≥ 3.9
NumPy ≥ 1.20
SciPy (用于 eigh, 3j 符号等)
SymPy (用于符号计算 Wigner 系数)
可选依赖:
pytest ≥ 7 (开发测试)
Sphinx ≥ 7 (文档生成)
开发状态
已实现 (v0.1.0):
✅ RHF 多 l 通道(s, p, d)
✅ UHF 自旋极化
✅ LSDA (PZ81, VWN)
✅ 多种求解器与网格类型
✅ Slater 积分径向计算
规划中:
⏳ ROHF (Restricted Open-shell HF)
⏳ DIIS 收敛加速
⏳ GGA 泛函支持
⏳ 完整单元测试覆盖
许可协议
本项目为教学用途,采用 MIT 协议开源。
参考文献
Clementi, E. & Roetti, C. Atomic Data and Nuclear Data Tables 14, 177 (1974)
Perdew, J. P. & Zunger, A. Phys. Rev. B 23, 5048 (1981)
Vosko, S. H., Wilk, L. & Nusair, M. Can. J. Phys. 58, 1200 (1980)
Martin, R. M. Electronic Structure: Basic Theory and Practical Methods (2004)