ABACUS 非共线磁性与SOC实操
真实Fe2方向旋转、全相对论赝势、SOC开关及四分量密度操作。
阅读本篇目录
下载完整输入、原生日志、自旋密度及绘图脚本,解压进入附件根目录。先看已有结果:
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. 把自旋方向从z转到x#
无SOC时,整体旋转所有自旋应保留能量;加入SOC后要使用包含自旋轨道信息的全相对论赝势。本例先用同一标量相对论Fe赝势检查无SOC旋转,再在同一个全相对论Fe赝势内比较SOC开关和方向。

四幅箭头来自原生Mulliken矢量输出。本例是立方Fe,x和z为对称等价方向;它们的SOC能量接近相等应当被保留,不能把微小数值差当作有效磁各向异性。
2. 无SOC非共线完整输入#
展开完整 INPUT、STRU、KPT
INPUT#
INPUT_PARAMETERS
pseudo_dir ../../PP_ORB
orbital_dir ../../PP_ORB
suffix tutorial
calculation scf
ecutwfc 100
scf_thr 1e-6
scf_nmax 200
out_chg 1
smearing_method gaussian
smearing_sigma 0.015
mixing_type pulay
mixing_ndim 10
mixing_beta 0.1
ks_solver elpa
basis_type lcao
symmetry -1
nspin 4
out_mul true
device gpu
precision double
cal_force 0
cal_stress 0
noncolin 1
lspinorb 0
nbands 48
STRU#
ATOMIC_SPECIES
Fe 55.845 Fe_ONCV_PBE-1.0.upf
NUMERICAL_ORBITAL
Fe_gga_9au_100Ry_4s2p2d1f.orb
LATTICE_CONSTANT
1.889725989
LATTICE_VECTORS
2.8328152400000000 0.0000000000000000 0.0000000000000000
0.0000000000000000 2.8328152400000000 0.0000000000000000
0.0000000000000000 0.0000000000000000 2.8328152400000000
ATOMIC_POSITIONS
Direct
Fe
1.0
2
0.0 0.0 0.0 mag 2 0 0
0.5 0.5 0.5 mag 2 0 0
KPT#
K_POINTS
0
Gamma
3 3 3 0 0 0
nspin 4使用旋量表示,noncolin 1打开非共线磁化,lspinorb 0关闭SOC。每个Fe的mag 2 0 0给初始笛卡尔磁矩矢量;z方向用mag 0 0 2。注意非共线中占据不再沿用nspin 1的自旋二重简并带计数,所以本例明确给48条旋量带。
3. 开启SOC时换成匹配的全相对论赝势#
完整SOC输入:
展开完整 INPUT、STRU、KPT
INPUT#
INPUT_PARAMETERS
pseudo_dir ../../PP_ORB
orbital_dir ../../PP_ORB
suffix tutorial
calculation scf
ecutwfc 100
scf_thr 1e-6
scf_nmax 200
out_chg 1
smearing_method gaussian
smearing_sigma 0.015
mixing_type pulay
mixing_ndim 10
mixing_beta 0.1
ks_solver elpa
basis_type lcao
symmetry -1
noncolin 1
nspin 4
lspinorb 1
out_mul true
device gpu
precision double
cal_force 0
cal_stress 0
nbands 48
STRU#
ATOMIC_SPECIES
Fe 55.845 Fe.upf
NUMERICAL_ORBITAL
Fe_gga_10au_100Ry_4s2p2d1f.orb
LATTICE_CONSTANT
1.889725989
LATTICE_VECTORS
2.8328152400000000 0.0000000000000000 0.0000000000000000
0.0000000000000000 2.8328152400000000 0.0000000000000000
0.0000000000000000 0.0000000000000000 2.8328152400000000
ATOMIC_POSITIONS
Direct
Fe
1.0
2
0.0 0.0 0.0 mag 0 0 2
0.5 0.5 0.5 mag 0 0 2
KPT#
K_POINTS
0
Gamma
3 3 3 0 0 0
这里使用Fe.upf及对应Fe数值轨道,lspinorb 1、noncolin 1。该赝势原生头部为relativistic="full"、含SOC信息;普通Fe_ONCV_PBE-1.0.upf是标量相对论,不能只改lspinorb就当作正确SOC输入。
对照fe-full-nosoc-z保持同一个全相对论赝势与轨道,只关SOC。不要把约−6440 eV的标量赝势结果与约−6820 eV的另一套赝势直接相减,称为SOC能量。
4. 实际结果与终端提取#
grep 'Total Magnetism on atom' work/cases/fe-nc-x/OUT.tutorial/mulliken.txt
grep 'Total Magnetism on atom' work/cases/fe-nc-z/OUT.tutorial/mulliken.txt
| 对照 | 实际能量差,eV/双原子晶胞 | 含义 |
|---|---|---|
| 无SOC,x−z | -1.692e-10 | 整体自旋旋转数值一致 |
| 同一全相对论赝势,SOC x−z | -9.732e-10 | 立方等价方向,不是非零各向异性 |
| 同一全相对论赝势,SOC开−关 | -0.141147 | 固定粗网格下SOC开关对照 |
python - <<'PY'
import csv
with open('reference/analysis/conditions.csv') as f:
for r in csv.DictReader(f):
if r['name'].startswith('fe-nc') or r['name'].startswith('fe-soc'):
print(r['name'],r['Mx'],r['My'],r['Mz'],r['E_eV'])
PY
非共线SPIN1_CHG.cube是总电荷,SPIN2/3/4_CHG.cube对应磁化x/y/z分量;不能按共线两自旋格式相加。附件独立积分各分量,与日志矢量磁矩核对。
所有坐标、原子位置保持固定,这里没有用SOC优化结构、输出原子力或得到收敛磁各向异性。不同赝势、基组、k点、展宽或未固定最终方向的能量差不能直接解释成磁各向异性能。设置原理见官方自旋/SOC指南。