WannierTools 体相自旋纹理与谱函数
从自旋子HR、输入与终端运行到谱图,解释展宽、单位、Pauli分量和弱谱权重显示阈值。
阅读本篇目录
在固定能量的 k 平面上,可以同时观察谱函数和自旋方向。本例演示如何设置体相自旋纹理、读取输出列、调整展宽,并解释为什么部分区域没有自旋箭头。
1. 下载并先看完整结果#
下载输入、实际数据和绘图脚本,保存为 example.zip:
python3 -m zipfile -e example.zip .
cd wanniertools-bulk-spin-spectrum
bash show-reference.sh
bash plot-results.sh
ls -lh plots/wanniertools-bulk-spin-spectral-masks.png

本例构造一个两能级自旋子模型,基底是同一 s 轨道的自旋向上、向下,按这个顺序写入 HR;SOC=1,Pauli 矩阵代表这套基底中的自旋。哈密顿量为 d·σ,d=(sin qx,sin qy,-1+cos qx+cos qy),晶格 3×3×10 Å。它是带有自旋分裂的教学模型,不是某种材料的 DFT 结果。
不要把任意两个无自旋轨道模型直接当作真实自旋基底。真实材料需要确认 HR 的自旋排序、投影及软件接口约定。
使用集群 WannierTools 2.7.0,oneAPI 2023.2 / ifort 2021.10、Intel MPI 2021.10、MKL LP64 顺序库和 ARPACK-NG 3.9.1;模块为 wanniertools/2.7.0-8173m。分析和绘图调用现有 sisl 0.16.4 Python 环境。以下计算在获得的兼容 CPU 资源内执行。
2. 设置体相自旋纹理#
关键输入:
&CONTROL
BulkSpintexture_calc=T
/
&SYSTEM
NumOccupied=1
SOC=1
E_FERMI=0
/
&PARAMETERS
Nk1=41
Nk2=41
Nk3=3
E_arc=1.5
Eta_Arc=0.05
/
PROJECTORS
1
X s
KPLANE_BULK
0 0 0
1 0 0
0 1 0
完整输入中的 LATTICE、ATOM_POSITIONS、SURFACE 和 HR 已配好。这里的平面中心为 (0,0,0),两个方向覆盖一周期,实际网格从 -0.5 到 0.5,含端点。当前这个计算分支由 Nk1 同时控制平面两方向的点数,本例两项均写 41 以便读取,总计 1681 点;不要据 Nk2 的名字就假定可以独立改变第二方向。
E_arc=1.5 eV 是取样能量,Eta_Arc=0.05 eV 是 Green 函数的展宽。它与 费米占据路径曲率 中同名参数出现的位置不同,本篇求的是固定能量附近的谱函数,而不是按费米分布把所有占据带求和。
3. 实际运行一组#
复制参考输入到新目录:
source ./env.sh
mkdir manual
cp reference-results/native/spin-n41-eta0.05/wt.in manual/
cp reference-results/native/spin-n41-eta0.05/model_hr.dat manual/
(cd manual && wt.x)
grep -E 'With SOC|Nk1 :|E_arc :|Eta_arc :' manual/WT.out
head -n 7 manual/bulkspintext.dat
当前原生日志在这一分支的提示文字中可能写着 surface,但本例输入开关是 BulkSpintexture_calc,输出是体相 bulkspintext.dat,不要因此把它当成半无限表面谱。真正的表面方法另见 表面谱函数。
4. 读懂 11 列输出#
本例默认选择全部两个自旋轨道,只有一个投影组:
| 列 | 含义 |
|---|---|
| 1–3 | 三维笛卡尔 k 坐标,Å⁻¹ |
| 4–6 | 旋转到所定义平面坐标系后的 k 坐标,Å⁻¹ |
| 7 | 总谱函数 A(k,E) |
| 8 | 所选轨道组的谱函数,本例等于总谱函数 |
| 9–11 | 平面坐标系中的自旋 Pauli 期望分量 |
自旋列是 〈σ〉,需要真实角动量时再乘以 ℏ/2,不要把这三列直接解释成以 ℏ 为单位的 S。
谱函数单位#
当前输出保留内部 Green 函数的 1/Hartree 单位。要按 1/eV 作图,将第 7 或第 8 列除以 27.211385。配套 Python 图已经做了该转换,原始数据保持原样。
你也可以直接用终端画刚运行的一组:
gnuplot <<'PLOT'
set terminal pngcairo size 1600,1200 font ',20'
set output 'manual/bulk-spectrum.png'
set view map
set size ratio -1
set pm3d
set xlabel 'kx (1/Angstrom)'
set ylabel 'ky (1/Angstrom)'
set cblabel 'A(k,E) (1/eV)'
splot 'manual/bulkspintext.dat' using 1:2:($7/27.211385) with pm3d notitle
PLOT
ls -lh manual/bulk-spectrum.png
5. 为什么有些区域没有箭头#
当前版本先求每个投影组谱权重的最大值。在 A(k,E) 小于该最大值的 1/20 的网格点,会把自旋分子的三个分量设为一个很小的数,再除以谱函数,得到接近零的绘图箭头。
这是原生程序的弱谱权重显示规则,不表示这些 k 点的物理自旋为零。因此配套图把这些区域留白,不把微小的输出值解释为自旋消失。
在 41×41 实例中,Eta_Arc=0.05 eV 时有 344/1681 点保留明显自旋;0.10 eV 时是 812/1681 点。后者展宽更大,谱函数峰变宽,超过阈值的区域随之变化。不要用两张箭头覆盖面积直接比较材料的自旋极化强弱。
6. 没有自旋图,只画等能面谱#
保持同一自旋子 HR、SOC 和投影设置,单独将控制部分设为:
&CONTROL
BulkFS_Plane_calc=T
/
它输出 fs_kplane.dat,本例为 8 列:前 6 列坐标、第 7 列总谱函数、第 8 列所选组谱函数。没有后面的自旋列。本批 21×21 和 41×41 两组数据与相同参数自旋计算的前 8 列一致。
7. 重算整套与得到文件#
sbatch job.slurm
脚本申请完整 CPU 节点后,依次运行四个自旋条件(21/41 网格、0.05/0.10 eV)和两个不输出自旋的谱函数对照,再整理和绘图。也可在已经获得的资源内运行:
bash run.sh
bash plot-results.sh
cat bulk-spin-spectrum-summary.csv
全部原生结果在 work/,图在 plots/;已有 work/ 时停止,重算请重新解压到另一目录。六组所有网格点的谱函数与三个自旋分量均与独立模型公式比较,本次最大自旋分量差约 5.0×10⁻⁹。
展宽、采样和自旋基底需要随实际问题重新检查。这里的短模型用于掌握输入、单位和显示规则,不能作为真实材料表面态、自旋寿命或实验可测信号的预测。
可进一步对照 WannierTools 官方源码中的对应实现。本篇数值与字段说明以集群当前 2.7.0 为准;在线开发分支后续可能变化。