Wannier90的SOC与自旋DOS
运行Fe自旋量子态实例,操作自旋矩阵格式并读取磁矩和投影态密度。
阅读本篇目录
unzip wannier90-practical-wave256-*.zip
cd wannier90-wave256
bash run.sh
这一步读取已完成计算的真实数值,生成 analysis/ 和七张 figures/*.png,不启动DFT计算。要自己运行Wannier90,再按下面的命令操作。
1 SOC输入不能简单把轨道数再乘两遍#
本例使用官方4.0.3的Fe SOC数值矩阵:28条输入带、18个Wannier轨道、2³均匀k网格。下面实际运行的是Wannier90及postw90;这份粗网格不用于给出收敛的铁磁矩。
cat inputs/Fe18-spinor/Fe.win
bash calculate.sh Fe18-spinor
num_bands = 28
num_wann = 18
spinors = true
dis_win_min = -8.0
dis_win_max = 70.0
dis_froz_min = -8.0
dis_froz_max = 30.0
begin projections
Fe: sp3d2;dxy;dxz;dyz
end projections
spinors=true表示自旋量子态。投影与自旋分量的组合必须和接口矩阵一致,不能拿非SOC矩阵只加这一行就变成SOC。该模型总展宽约 8.51589018 Ų。
2 计算自旋投影DOS和磁矩#
bash post.sh Fe18-spinor
cat work/Fe18-spinor-serial-post/Fe.wpout
关键后处理输入在 inputs/Fe18-spinor/Fe.post.win:
fermi_energy = 12.6279
spin_moment = true
kmesh = 4
dos = true
spin_decomp = true
dos_energy_min = 10.0
dos_energy_max = 13.0
dos_energy_step = 0.2
spn_formatted = true
这里还需要与波函数基底一致的 Fe.spn 自旋矩阵。只有amn、mmn和eig并不自动具备自旋算符矩阵。复制别的计算的spn可能维度相同却基底不匹配,不能这样拼接。
head work/Fe18-spinor-serial-post/Fe-dos.dat
rg -A 8 'Spin magnetic moment' work/Fe18-spinor-serial-post/Fe.wpout
原生自旋DOS包含能量、总DOS、上自旋投影、下自旋投影;上、下分量之和对应总量。绘图时把下自旋画成负值只是显示习惯,原始态密度不是负数。

这份数据输出约 Mx=-0.000003、My≈0、Mz=3.090787 μB/cell。横向分量接近零时,方位角对极小数值波动敏感;比较串行/MPI时优先比较磁矩分量,而不是只看方位角末几位。
3 spn文本/二进制转换#
先在单独副本操作,保留源文件:
module load wannier90/4.0.3-serial
mkdir spin-convert
cp inputs/Fe18-spinor/Fe.spn spin-convert/Fe.spn.fmt
cd spin-convert
w90spn2spn.x -import Fe
w90spn2spn.x -export Fe
-import从 .spn.fmt生成二进制 .spn,-export反向生成文本。后处理时,文本spn对应 spn_formatted=true,二进制对应false,文件格式和开关要一起匹配。本套在集群实际做过两种格式的数值回读与磁矩对照。
4 下一步做Berry或光学响应前#
本页完成的是自旋矩阵、自旋DOS和自旋磁矩的操作。Berry曲率、反常Hall、光学、轨道磁化等还需各自参数与矩阵、k网格和展宽收敛;不能因为 spinors=true 就认定这些响应已经算完。