ABACUS 专题

ABACUS DFT+U与局域占据实操

NiO的U=0/2/5eV、完整输入、带隙/磁矩和5×5局域占据矩阵。

更新于 2026-10-29约 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。

NiO实际反铁磁结构、原生带隙及局域d占据

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输入、官方自旋设置。

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

查看配图

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

100%查看原图 ↗