ABACUS 专题

ABACUS 数值原子轨道生成

Si UPF径向波函数转最小SZV轨道,完整转换、归一化与真实SCF操作。

更新于 2026-10-29约 5 分钟阅读按任务与环境选择适用配置
阅读本篇目录

下载15个原生步骤、完整输入、矩阵和绘图脚本,解压进入附件根目录。先读取已有结果:

bash analyze.sh

结果表在reference/analysis,高清图在reference/figures。如需重新计算,在新解压的目录提交:

sbatch submit.slurm

脚本先生成教学基组,再按依赖运行10个SCF和5个NSCF步骤,最后提取、比较和画图;新的输出在work。已有work时请新解压,脚本不会覆盖已计算目录。

采用ABACUS3.10.1模块abacus/3.10.1-p100,GNU13.3、HPC-X2.50/OpenMPI5.0.10rc2,1个MPI进程、1线程、CPU双精度;ASE3.29.0、NumPy和SciPy用于后处理。模板分配P100主机资源,但这些接口实际走CPU路径,不代表GPU加速,也不是Intel Xeon 8173M性能测试。不要在登录节点直接运行DFT计算。

1 本篇生成什么基组#

本例从Si的UPF赝原子波函数生成最小SZV数值轨道:每个Si有一条s径向函数和一条p径向函数,共4个角向轨道,Si2一共8个NAO。分别取6、8、10Bohr截断半径,实际跑完LDA自洽。

它用于理解格式、单位和基组误差,不是优化过的生产基组生成器。常规计算优先选与元素、赝势/泛函相匹配的成熟轨道库,再做基组控制。附件的生成器仅支持本例非自旋轨道耦合、四价电子的Si NC UPF,不能直接用于任意元素、PAW、USPP或SOC。

2 先检查UPF,再生成#

标准UPF中的PP_CHI保存χ=rR_l,采样在PP_R给出的径向网格上;不能直接把χ写成ABACUS的R_l,也不能假定UPF网格均匀。has_wfc表示全电子波函数字段,不能用它判断有没有PP_PSWFC。本例Si.pz-n-nc.UPF确实包含3S、3P两条赝原子径向波函数;另一份Si PBE赝势没有这些PP_CHI。

module purge
module load ase/3.29.0
python -B make_orbitals.py

生成器读取实际非均匀PP_R,先除以r得到R_l,再用PCHIP插值到0.01Bohr均匀网格;在末端1Bohr用C²平滑五次窗归零,最后归一化∫R_l²r²dr=1。s在原点取有限值,p在原点归零。源UPF保持原字节。

已有轨道若只有跨CPU的极小浮点舍入差异,脚本保留原文件并报告差值;若内容实质不同则停止,不覆盖旧基组。输出包含三个.orb和GENERATED-ORBITALS.json。

head -n 22 PP_ORB/Si_pswfc_SZV_8au.orb

其中Mesh 801、dr 0.01对应0到8Bohr;Type L N后0 0 0和0 1 0分别是s、p的第1条径向函数。.orb表中是R_l,不是rR_l;截断半径与平面波辅助网格的ecutwfc不是同一参数。

真实结构和生成径向函数

3 使用生成的轨道运行SCF#

以下为8Bohr案例完整输入:

INPUT_PARAMETERS
suffix tutorial
pseudo_dir ../../PP_ORB
orbital_dir ../../PP_ORB
ntype 1
basis_type lcao
calculation scf
ecutwfc 80
nbands 8
ks_solver genelpa
symmetry -1
device cpu
precision double
scf_thr 1e-7
scf_nmax 100
smearing_method fixed
cal_force 0
cal_stress 0
out_chg 0
out_mat_hs 1 12
out_wfc_lcao 1
qo_switch 0
qo_basis szv
qo_strategy sp
qo_thr 1e-8
qo_screening_coeff 0.1
dft_functional pz
ATOMIC_SPECIES
Si 28.0855 Si.pz-n-nc.UPF

NUMERICAL_ORBITAL
Si_pswfc_SZV_8au.orb

LATTICE_CONSTANT
10.26

LATTICE_VECTORS
0 0.5 0.5
0.5 0 0.5
0.5 0.5 0

ATOMIC_POSITIONS
Direct
Si
0.0
2
0 0 0 1 1 1
0.25 0.25 0.25 1 1 1
K_POINTS
0
Gamma
2 2 2 0 0 0

在已经分配的计算资源中,从新的附件目录执行:

module purge
module load ase/3.29.0
python -B make_orbitals.py
module purge
module load abacus/3.10.1-p100
python3 -B setup.py
python3 -B run_case.py si-generated-8au

生成器先在包根目录生成.orb,setup.py再复制到work/PP_ORB,各案例的pseudo_dir和orbital_dir均指向这份工作副本;不要先setup再以为修改根目录轨道会自动改变工作输入。

4 读取径向归一化结果#

python - <<'PY'
import csv
with open('reference/analysis/generated-radials.csv') as f:
    for r in csv.DictReader(f):
        print(r['file'],'l=',r['l'],'积分=',r['Simpson_norm'])
PY

归一化只说明单条径向函数的尺度正确,不代表不同中心轨道彼此正交,也不保证总能量已收敛。当前生成器不是qo_basis pswfc原生接口的替代证明;本篇使用正常NAO读入生成的.orb后自洽,QO另走已展示的SZV路径。

格式依据:Quantum ESPRESSO UPF规范、ABACUS3.10.1轨道文件读取。

需要根据你的体系选择资源?联系讨论计算需求。实际可用软件与权限,以当前账户和运行环境为准。

查看配图

放大后可滚动查看细节,按 Esc 关闭。

100%查看原图 ↗