ABACUS DFT+U与局域占据实操
NiO的U=0/2/5eV、完整输入、带隙/磁矩和5×5局域占据矩阵。
阅读本篇目录
下载完整输入、原生日志、自旋密度及绘图脚本,解压进入附件根目录。先看已有结果:
bash analyze.sh
这一步仅用一个CPU核心处理参考数据,生成CSV及四张图,不启动DFT。需要完整重算时:
sbatch submit.slurm
脚本申请一张P100,按顺序完成12个条件;每个条件1个MPI进程、1个CPU线程,保留Slurm分配的GPU。参考实算为ABACUS3.10.1、双精度GPU,GNU13.3、HPC-X2.50/OpenMPI5.0.10rc2、CUDA12.8、OpenBLAS0.3.30;模块abacus/3.10.1-p100。未提供本批8173M或V100性能数据。不要在登录节点执行DFT。所有模型固定结构,scf_thr=1e-6,采用3×3×3网格;这些数值用于操作演示,不作为磁相图或收敛材料参数。
1. 相同NiO模型,看U改变了什么#
本例采用含两个Ni、两个O的反铁磁原胞,Ni1和Ni2用同一赝势/轨道,但作为不同原子类型设置相反初始磁矩。固定结构、基组、k点和展宽,分别计算U=0、2、5 eV,并保留原生日志、Mulliken磁矩和onsite.dm。

U改变计算模型,不能挑总能量最低的U作为“正确值”。本例只说明如何设置、运行和提取数据,没有标定实验U值,也没有声称三个带隙已对k点/基组收敛。
2. 完整U=5eV输入#
展开完整 INPUT、STRU、KPT
INPUT#
INPUT_PARAMETERS
suffix tutorial
ntype 3
nbands 40
pseudo_dir ../../PP_ORB
orbital_dir ../../PP_ORB
calculation scf
ecutwfc 100
scf_thr 1e-6
scf_nmax 200
smearing_method gaussian
smearing_sigma 0.015
mixing_type broyden
mixing_beta 0.4
ks_solver elpa
basis_type lcao
gamma_only 0
symmetry -1
nspin 2
dft_plus_u 1
orbital_corr 2 2 -1
hubbard_u 5.0 5.0 0.0
out_bandgap 1
out_chg 1
out_mul 1
device gpu
precision double
cal_force 0
cal_stress 0
STRU#
ATOMIC_SPECIES
Ni1 58.693 Ni_ONCV_PBE-1.0.upf
Ni2 58.693 Ni_ONCV_PBE-1.0.upf
O 15.999 O_ONCV_PBE-1.0.upf
NUMERICAL_ORBITAL
Ni_gga_9au_100Ry_4s2p2d1f.orb
Ni_gga_9au_100Ry_4s2p2d1f.orb
O_gga_7au_100Ry_2s2p1d.orb
LATTICE_CONSTANT
7.884
LATTICE_VECTORS
1.00 0.50 0.50
0.50 1.00 0.50
0.50 0.50 1.00
ATOMIC_POSITIONS
Direct
Ni1
2.0
1
0.00 0.00 0.00 1 1 1
Ni2
-2.0
1
0.50 0.50 0.50 1 1 1
O
0.0
2
0.25 0.25 0.25 1 1 1
0.75 0.75 0.75 1 1 1
KPT#
K_POINTS
0
Gamma
3 3 3 0 0 0
关键参数:
dft_plus_u 1:使用本例对应实现。orbital_corr 2 2 -1:按STRU中三种原子类型顺序,给Ni1/Ni2的d轨道修正(l=2),O不修正(−1)。hubbard_u 5.0 5.0 0.0:单位eV,两类Ni使用相同U。nspin 2及Ni1/Ni2相反初始磁矩:构造反铁磁初态,不等于永久锁定每个Ni。out_bandgap 1、out_mul 1:输出本例使用的带隙和Mulliken分析。
U=0和2 eV条件只改变hubbard_u的前两个值;U=0仍保留相同+U路径,便于一致对照。
3. 看最终带隙和原子磁矩#
grep 'E_bandgap' work/cases/nio-u5/OUT.tutorial/running_scf.log | tail -n 1
grep 'Total Magnetism on atom' work/cases/nio-u5/OUT.tutorial/mulliken.txt
head -n 12 work/cases/nio-u5/OUT.tutorial/onsite.dm
原生E_bandgap行同时列Ry/eV,本教程使用最后一列eV,不能把第一列数值当成eV。结果:
| U,eV | KS带隙,eV | Ni1/Ni2的Mulliken磁矩,μB |
|---|---|---|
| 0 | 1.127687 | 1.2198/-1.2198 |
| 2 | 2.008418 | 1.4166/-1.4166 |
| 5 | 2.919861 | 1.5778/-1.5778 |
这些是KS本征值带隙,不是光学吸收边或准粒子带隙。总磁矩接近0,而两个Ni仍有反向局域磁矩。
4. onsite.dm里是什么#
原生文件按原子、角动量L、径向zeta和自旋输出局域占据矩阵。这里每个Ni的d子空间是5×5矩阵,spin 0/1从0编号;两个Ni共有四块。矩阵迹是该投影定义下的d电子数,特征值可帮助检查占据范围。它不是总价电子数,也不必等于另一种分区方法得到的原子电子数。
python - <<'PY'
import csv
with open('reference/analysis/onsite-occupations.csv') as f:
for r in csv.DictReader(f):
if r['name']=='nio-u5':
print(r['atom_0based'],r['spin_0based'],r['d_electrons'],
r['minimum_occupation'],r['maximum_occupation'])
PY
附件脚本读取真实四块矩阵,检查对称性和占据特征值,并验证反铁磁两子晶格交换自旋后的对应关系。Mulliken磁矩涉及整套原子轨道,与只投影d子空间的自旋差不是同一定义。
本例含三个原子类型,但只有两种化学元素;若改变STRU类型顺序,orbital_corr和hubbard_u也必须对应调整。重新研究材料时还需要检查磁初态、U定义、赝势、轨道、k点与展宽,而不是只复制一个U值。
接口与实现参考:ABACUS3.10.1 +U输入、官方自旋设置。