WannierTools专题

WannierTools 体相自旋纹理与谱函数

从自旋子HR、输入与终端运行到谱图,解释展宽、单位、Pauli分量和弱谱权重显示阈值。

更新于 2026-11-10约 5 分钟阅读按任务与环境选择适用配置
阅读本篇目录

在固定能量的 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 为准;在线开发分支后续可能变化。

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

查看配图

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

100%查看原图 ↗