使用示例

本节提供常见原子的计算示例和结果对比。

快速开始

氢原子最小 HF 计算

最简单的单电子 HF 计算:

from atomscf.grid import radial_grid_linear
from atomscf.scf_hf import run_hf_minimal

# 创建线性网格
r, w = radial_grid_linear(n=800, rmin=1e-6, rmax=50.0)

# 氢原子 HF (Z=1)
result = run_hf_minimal(Z=1, r=r, w=w)

print(f"总能量: {result.E_total:.6f} Ha")
print(f"1s 轨道能: {result.epsilon_1s:.6f} Ha")

预期输出:

总能量: -0.499995 Ha
1s 轨道能: -0.499995 Ha

氦原子 RHF 计算

闭壳层多电子体系:

from atomscf.grid import radial_grid_linear
from atomscf.scf_hf import run_hf_scf, HFSCFGeneralConfig

r, w = radial_grid_linear(n=800, rmin=1e-6, rmax=50.0)

cfg = HFSCFGeneralConfig(
    Z=2,                   # 氦原子
    r=r, w=w,
    occ_by_l={0: [2.0]},  # 1s²
    eigs_per_l={0: 1},    # 求解 1 个 s 轨道
    spin_mode='RHF',
    mix_alpha=0.5,
    tol=1e-6,
    maxiter=100
)

result = run_hf_scf(cfg)

print(f"总能量: {result.E_total:.6f} Ha")
print(f"ε_1s: {result.eigenvalues_by_l[0][0]:.6f} Ha")

锂原子 UHF 计算

开壳层自旋极化:

from atomscf.grid import radial_grid_linear
from atomscf.scf_hf import run_hf_scf, HFSCFGeneralConfig

r, w = radial_grid_linear(n=1000, rmin=1e-6, rmax=60.0)

cfg = HFSCFGeneralConfig(
    Z=3,                      # 锂原子
    r=r, w=w,
    occ_by_l={0: [2.0, 1.0]}, # 1s² 2s¹
    occ_by_l_spin={
        0: {
            'up': [1.0, 1.0],    # 1s↑ 2s↑
            'down': [1.0, 0.0],  # 1s↓ (2s 无占据)
        }
    },
    eigs_per_l={0: 2},        # 求解 2 个 s 轨道
    spin_mode='UHF',
    mix_alpha=0.3,
    tol=1e-6,
    maxiter=120
)

result = run_hf_scf(cfg)

print(f"总能量: {result.E_total:.6f} Ha")
print(f"ε_2s(↑): {result.eigenvalues_by_l_spin[(0, 'up')][1]:.6f} Ha")

碳原子 LSDA 计算

密度泛函方法:

from atomscf.grid import radial_grid_linear
from atomscf.scf import run_lsda_vwn, SCFConfig

r, w = radial_grid_linear(n=1200, rmin=1e-6, rmax=70.0)

cfg = SCFConfig(
    Z=6,              # 碳原子
    r=r, w=w,
    lmax=2,           # 最大角动量(包含 p 轨道)
    eigs_per_l=2,     # 每个 l 求解 2 个轨道
    eig_solver="fd5_aux",
    xc="VWN",
    mix_alpha=0.5,
    tol=5e-5,
    maxiter=140
)

result = run_lsda_vwn(cfg, verbose=True)

print(f"总能量: {result.energies['E_total']:.6f} Ha")
print(f"ε_2p(↑): {result.eps_by_l_sigma[(1, 'up')][0]:.6f} Ha")

更多示例

完整示例代码位于 examples/ 目录:

  • run_h_1s_fd.py: 氢原子(不同求解器对比)

  • run_c_lsda_vwn.py: 碳原子 LSDA

  • test_uhf.py: UHF vs RHF 对比

  • benchmark_*.py: 批量原子计算