WannierTools专题

WannierTools 六晶面 Chern 数与相位展开

用四组三维实算演示六平面Wilson相位、方向约定、加密网格和独立Berry积分。

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

Chern_3D_calc 可以一次计算六个固定晶面上的 Wilson loop。本篇用真正包含第三方向跃迁的三维小模型,演示输入、完整输出、相位展开与符号核对;同时比较两种网格、平庸模型和相反手性的模型。

1. 下载并先查看已有结果#

下载模型、输入、实际输出、CSV 和绘图工具,保存为 example.zip:

python3 -m zipfile -e example.zip .
cd wanniertools-chern-six-planes
source ./env.sh
bash show-reference.sh
bash plot-results.sh
ls -lh plots/wanniertools-chern-six-planes.png

六晶面原生Wilson相位、独立重叠计算、网格与手性对照

采用集群已有 WannierTools 2.7.0 CPU 构建,Intel oneAPI 2023.2 / ifort 2021.10、Intel MPI 2021.10、MKL LP64 顺序库、ARPACK-NG 3.9.1。每次单 MPI 进程、单线程,在已经分配的兼容 CPU 资源中运行。

2. 模型与占据带#

模型每原胞两个同位置轨道,SOC=0,晶格常数 3 Å。哈密顿量为 H=dₓσₓ+dᵧσᵧ+d_zσ_z:

d_x = hand × sin(2πq_x)
d_y = sin(2πq_y)
d_z = m + cos(2πq_x) + cos(2πq_y) + 0.2 cos(2πq_z)

能量参数单位为 eV,q 为倒格矢分数坐标;第三方向的 0.2cos 项使模型具有真实的 z 方向色散。它是用于理解拓扑流程的紧束缚模型,不是某种实际材料的 DFT 结果。

本例计算下方一条带的拓扑,设置 NumOccupied=1。它指参与占据子空间的带数,不能直接填写体系总电子数。四组输入均保持体能隙不闭合:

条件 m hand Nk1×Nk2
非平庸模型 −1 +1 24×25
同一模型加密 −1 +1 48×49
平庸对照 −3 +1 24×25
相反手性 −1 −1 24×25

3. 完整输入与六列的含义#

第一组的 wt.in:

&TB_FILE
Hrfile='model_hr.dat'
/
&CONTROL
Chern_3D_calc=T
/
&SYSTEM
NumOccupied=1
SOC=0
E_FERMI=0
/
&PARAMETERS
Nk1=24
Nk2=25
Nk3=3
/

LATTICE
Angstrom
3 0 0
0 3 0
0 0 3

ATOM_POSITIONS
1
Direct
X 0 0 0

PROJECTORS
2
X s s

SURFACE
1 0 0
0 1 0

本功能内部已经固定六个晶面,不需要另外用 KPLANE_BULK 指定它们。Nk1 是每条闭合积分线上的点数,Nk2 是扫描线的数量;本例写入的 Nk3 不控制这六个平面的采样。Chern 数要扫描完整周期,不能照搬时间反演 Z₂ 教程中的半个扫描区间。

输出 wanniercenter3D_Chern.dat 第一列为从 0 到 1 的扫描比例,后六列依次为:

数据列 固定晶面 闭合积分方向 扫描方向
2 q₁=0 q₃ q₂
3 q₁=0.5 q₃ q₂
4 q₂=0 q₃ q₁
5 q₂=0.5 q₃ q₁
6 q₃=0 q₁ q₂
7 q₃=0.5 q₁ q₂

相位以 2π 为单位并折回 0 到 1;0 和 1 是同一相位。对多条占据带,这个文件保存的是占据子空间相位和,不是每一条单带的能带能量。

4. 手动运行、展开相位并画图#

source ./env.sh
mkdir manual
cp reference-results/native/chern-m-1-hand1-24x25/{wt.in,model_hr.dat} manual/
(cd manual && wt.x)
head -n 6 manual/wanniercenter3D_Chern.dat
"$PYTHON_FOR_ANALYSIS" - <<'PY'
import numpy as np
a = np.loadtxt('manual/wanniercenter3D_Chern.dat')
phase = np.unwrap(2*np.pi*a[:, 1:], axis=0)/(2*np.pi)
winding = phase[-1] - phase[0]
print('六个平面的连续相位绕行:', winding)
print('靠近整数时取最近整数:', np.rint(winding).astype(int))
np.savetxt('manual/wilson-unwrapped.csv', np.c_[a[:, 0], phase], delimiter=',')
PY
(cd manual && gnuplot wanniercenter3D_Chern.gnu)
ls -lh manual/wanniercenter3D_Chern.eps manual/wilson-unwrapped.csv

第一组从原生相位展开得到 0 0 0 0 −1 −1。图中跨越 0/1 边界的跳变需要按相位周期连接,不能把每次图上跳变简单计为一次绕行。这里使用的 unwrap 适用于本例单占据带且相邻采样相位差足够小的情况;多占据带应处理整个占据子空间,不要随意给交叉的单条轨迹编号。

当前安装分支在这些模型的 WT.out 中将六个整数摘要都打印成了 0,和非平庸模型的完整相位绕行不一致。不要直接采用这项摘要判断平庸与否。 当前源码的最终整数显示使用截断,本文保留实际整数摘要,同时根据原生完整相位展开取最近整数,并与独立 Berry 积分核对。不能通过只修改输出摘要来解决采样或模型问题。

5. 符号为什么需要说明方向#

对于 q₃ 固定的平面,当前输出是“沿 q₁ 闭合积分、沿 q₂ 增大扫描”的 Wilson 相位绕行;它与按正向 q₁、q₂ 定义的 Berry 曲率面积积分相差一个负号。

条件 六平面 Wilson 绕行 正向 xy Berry 积分:q₃=0 / 0.5
m=−1,hand=+1,两种网格 0 0 0 0 −1 −1 +1 / +1
m=−3,hand=+1 0 0 0 0 0 0 0 / 0
m=−1,hand=−1 0 0 0 0 +1 +1 −1 / −1

本例逐点用独立本征态重叠计算核对全部 Wilson 相位,最大模 1 误差小于 5×10⁻⁹;独立解析 Berry 曲率在 81 和 161 网格积分得到上表结果。反转一个方向的手性会反转带符号的拓扑结果,所以比较不同程序或论文时,应同时记录坐标、积分面朝向和相位约定。

6. 重算四组并输出对照图#

sbatch job.slurm

或在已获得的兼容 CPU 资源内:

bash run.sh
bash plot-results.sh
cat chern-six-plane-summary.csv
ls -lh plots/wanniertools-chern-six-planes.png

整套依次生成四套输入、运行 wt.x、整理每组的六平面绕行及独立积分,再生成对照图。已有 work 目录时停止;另行解压即可从头计算。

替换为自己的材料时,先验证体能带、占据子空间以及整个积分面的能隙,再加密积分线和扫描线。只有充分采样后接近稳定整数,才能采用最近整数;不要把任意未收敛的非整数强行取整。本例涉及破坏时间反演的 Chern 模型,不能把这里的整数当成 Z₂ 指标。

相关操作:Haldane 模型与 Chern 数、Wilson loop 与 Z₂、Berry 曲率平面图。参考:WannierTools 官方功能说明、当前功能的上游源码。

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

查看配图

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

100%查看原图 ↗