VASP自旋螺旋与E(q)扫描
用bcc铁原胞扫描四个自旋螺旋波矢,学习非共线设置、能量和局域磁矩提取。
阅读本篇目录
如果相邻晶胞的磁化方向逐步旋转,可以用自旋螺旋描述。本例用一个Fe原子的bcc原胞,在固定结构上扫描四个q点,得到E(q),不必为每个周期建立大超胞。
1. 确定原胞和波矢含义#
原胞对应bcc立方晶格常数2.87 Å,原胞体积11.81995 ų。q以当前原胞倒格矢为基底,扫描(q₁,0,0),q₁=0、0.125、0.25、0.5。沿第一原胞平移一次,磁化方向旋转360q₁度;q₁=0.125就是45度。
这里的q分量不是Å⁻¹,也不是普通能带采样的k点。换用其他原胞后,要重新确定倒格基底,不能只比较输入的三个数字。
2. 使用非共线程序和自旋螺旋参数#
LNONCOLLINEAR = .TRUE.
LSPIRAL = .TRUE.
QSPIRAL = 0.125 0 0
LZEROZ = .TRUE.
ISYM = -1
MAGMOM = 2.5 0 0
ENINI = 550
ENCUT = 700
本例PBE PAW64、EDIFF=1E-6、7³Gamma网格、ISMEAR=0、SIGMA=0.05 eV,固定原子和晶胞。所有q点保持相同参数。ISYM=-1关闭对称性;LZEROZ将磁化限制在xy平面,MAGMOM的三个分量只是初始方向。
自旋螺旋会改变两个自旋分量的平面波动量,ENINI与ENCUT应留出空间。本例ENINI=550、ENCUT=700 eV,并核对OUTCAR给出的波矢相关下限。不要在不同q点随意改变有效基组。VASP自旋螺旋操作说明
各目录准备合法Fe POTCAR后:
sbatch run.sh
脚本加载vasp/6.6.1-p100,调用vasp_ncl。该构建使用NVHPC25.3、CUDA12.8和配套MPI。此算例没有SOC;普通vasp_std不能替代非共线可执行程序。
3. 同时检查能量和局域磁矩#
module load ase/3.29.0
python extract_spiral.py
为读取适用于该方法的球内磁矩,本例还设置I_CONSTRAINED_M=1、LAMBDA=0、RWIGS=1.2 Å,并从OSZICAR读取M_int。LAMBDA=0使罚势为零,这里没有将磁矩大小固定到某个数值;球半径须在各q点一致。
| q₁ | 每次第一原胞平移的转角 / 度 | 相对q=0能量 / meV·Fe⁻¹ | 球内磁矩大小 / μB |
|---|---|---|---|
| 0.000 | 0.0 | 0.000 | 2.368 |
| 0.125 | 45.0 | 19.507 | 2.350 |
| 0.250 | 90.0 | 99.844 | 2.301 |
| 0.500 | 180.0 | 242.190 | 2.142 |

四个已算点中q=0能量最低。球内磁矩随q改变,说明本次扫描允许磁矩幅度随电子自洽调整。图上的箭头是输入螺旋平移规律的示意,能量和磁矩点来自实际VASP结果。
4. E(q)不能直接替代哪些结果#
这四个点只能说明当前路径、固定结构和数值参数下的趋势,不证明整个三维q空间都没有更低态。若搜索磁基态,应扩大路径或网格,并检查初始磁序与k点收敛。
从E(q)进一步拟合交换参数或磁振子,需要说明自旋哈密顿量、截断邻居和磁矩幅度约束。本例磁矩并非严格固定,因此不直接把四点拟合成材料的唯一J值,也不从这条曲线给出居里温度或DMI。