atomppgen.ae_atom

全电子(All-Electron, AE)原子求解器封装

调用 AtomSCF 进行 LDA 自洽场计算,获取各角动量通道的径向波函数和本征能量。 用于赝势生成流程中的参考 AE 解。

重要:优先使用变量变换方法(transformed)+ 指数网格,精度提升约 7 倍。

主要接口

solve_ae_atom : 求解全电子原子的 LDA-DFT AEAtomResult : 存储 AE 解的结果数据类

参考

  • AtomSCF 文档: ../AtomSCF/docs/

  • 变量变换方法: AtomSCF/docs/source/algorithm/numerical_methods.rst

Functions

solve_ae_atom(Z[, xc, lmax, grid_type, ...])

求解全电子原子的 LDA 自洽场解

Classes

AEAtomResult(Z, xc, r, w, eps_by_l, u_by_l, ...)

全电子原子求解结果

class atomppgen.ae_atom.AEAtomResult(Z, xc, r, w, eps_by_l, u_by_l, n_total, energies, converged, scf_iterations, grid_params=None)[源代码]

全电子原子求解结果

参数:
Z

原子序数

Type:

int

xc

交换关联泛函("PZ81" 或 "VWN")

Type:

str

r

径向网格,单位 Bohr

Type:

np.ndarray

w

径向积分权重

Type:

np.ndarray

eps_by_l

各角动量通道的本征能量,l → [ε₁, ε₂, ...](Hartree)

Type:

Dict[int, np.ndarray]

u_by_l

各角动量通道的径向波函数,l → [u₁(r), u₂(r), ...] 已归一化:∫ u²(r) dr = 1

Type:

Dict[int, np.ndarray]

n_total

总电子密度(自旋求和),单位 e/Bohr³

Type:

np.ndarray

energies

能量分解,包含 "E_total", "E_ext", "E_H", "E_x", "E_c"(Hartree)

Type:

Dict[str, float]

converged

SCF 是否收敛

Type:

bool

scf_iterations

SCF 迭代次数

Type:

int

grid_params

网格参数(如 delta, Rp),用于变量变换方法

Type:

Optional[Dict]

Z: int
xc: str
r: ndarray
w: ndarray
eps_by_l: Dict[int, ndarray]
u_by_l: Dict[int, ndarray]
n_total: ndarray
energies: Dict[str, float]
converged: bool
scf_iterations: int
grid_params: Optional[Dict] = None
__init__(Z, xc, r, w, eps_by_l, u_by_l, n_total, energies, converged, scf_iterations, grid_params=None)
参数:
返回类型:

None

atomppgen.ae_atom.solve_ae_atom(Z, xc='PZ81', lmax=2, grid_type='exp_transformed', grid_params=None, scf_params=None, spin_mode='LDA')[源代码]

求解全电子原子的 LDA 自洽场解

推荐配置:使用 grid_type="exp_transformed" + eig_solver="transformed" 以获得最高精度(相比 FD5 方法精度提升约 7 倍)。

赝势生成注意:必须使用 `spin_mode="LDA"`(自旋无关势),这是标准 赝势格式(如 UPF)的要求。

参数:
  • Z (int) -- 原子序数(例如 Al 为 13)

  • xc (str, optional) -- 交换关联泛函,"PZ81" 或 "VWN",默认 "PZ81"

  • lmax (int, optional) -- 最大角动量量子数,默认 2(包含 s, p, d)

  • grid_type (str, optional) -- 网格类型: - "exp_transformed": 指数变换网格 + 变量变换求解器(推荐,最高精度) - "linear": 线性等距网格 + FD5 求解器 - "log": 对数网格 + Numerov/FD5 求解器

  • grid_params (dict, optional) -- 网格参数,例如: - exp_transformed: {"n": 2000, "rmin": 0.0, "rmax": 150.0, "total_span": 7.0} - linear: {"n": 1200, "rmin": 1e-6, "rmax": 50.0} - log: {"n": 1000, "rmin": 1e-6, "rmax": 50.0}

  • scf_params (dict, optional) -- SCF 参数,例如: - {"tol": 1e-6, "maxiter": 150, "mix_alpha": 0.3}

  • spin_mode (str, optional) -- 自旋模式: - "LDA": 强制自旋对称(n_up = n_dn),赝势生成必须用此模式 - "LSDA": 自旋极化(n_up ≠ n_dn),适合开壳层原子的全电子计算 默认 "LDA"

返回:

包含各角动量通道的波函数、能量、网格等

返回类型:

AEAtomResult

抛出:

ValueError -- 如果 xc 不是 "PZ81" 或 "VWN" 如果 grid_type 不支持 如果 spin_mode 不是 "LDA" 或 "LSDA"

示例

>>> # 推荐用法:LDA 模式(赝势生成)
>>> result = solve_ae_atom(Z=13, spin_mode="LDA", grid_type="exp_transformed")
>>> print(f"3s energy: {result.eps_by_l[0][2]:.6f} Ha")
>>> print(f"3p energy: {result.eps_by_l[1][2]:.6f} Ha")

备注

LDA vs LSDA: - LDA 强制 n_up = n_dn,产生自旋无关势(UPF 格式要求) - LSDA 允许 n_up ≠ n_dn,更适合描述开壳层原子 - 对于闭壳层原子(如 C),两者结果相同

与 NIST 参考数据的差异: AtomSCF 当前精度约 1.5-2.5%(相对于 NIST LSD 数据)。 对于赝势生成,价层轨道相对精度(~0.03 Ha)通常已足够。

引用