WannierTools:Berry相位的0与π实操
用两轨道SSH模型计算Berry相位,展示闭合路径、正反方向与201/401点的实际结果。
阅读本篇目录
本例用 BerryPhase_calc 计算闭合倒空间路径上的Berry相位。模型为两轨道SSH链:胞内与胞间跃迁分别取0.6/1.4eV,以及对换后的1.4/0.6eV。使用明确固定的模型轨道中心与晶胞约定,观察0和π,而不是直接计算某种材料的绝对极化。
本模块使用oneAPI 2023.2构建:ifort 2021.10.0、Intel MPI 2021.10、MKL 2023.2.0,配合ARPACK-NG 3.9.1;本例使用CPU MPI程序。
1. 下载并看实际结果#
下载完整输入、四组原生输出与脚本,保存为 example.zip:
python3 -m zipfile -e example.zip .
cd wanniertools-SSH-Berry
bash read.sh
bash plot.sh
cat analysis-read/WT-SSH-Berry-phase.csv
使用WannierTools 2.7.0 CPU模块 wanniertools/2.7.0-8173m,Intel MPI/oneAPI运行环境;读取与绘图需要NumPy、Matplotlib。本例没有DFT前置任务,也不需要POTCAR。

2. 完整输入#
&TB_FILE
Hrfile='model_hr.dat'
/
&CONTROL
BerryPhase_calc=T
/
&SYSTEM
NumOccupied=1,SOC=0,E_FERMI=0
/
&PARAMETERS
Nk1=201
/
LATTICE
Angstrom
3 0 0
0 3 0
0 0 3
ATOM_POSITIONS
1
Direct
X 0 0 0
PROJECTORS
2
X s px
KPATH_BERRY
2
Direct
0 0 0
1 0 0
NumOccupied=1 表示累积最低一条占据带的相位。KPATH_BERRY 中2代表给出两个路径端点,0 0 0 到 1 0 0 相差一个倒格矢,构成周期意义下的闭合回路。不是任意两个不同k点都能当作闭合路径。
模型HR文件完整内容如下,只有两个轨道和三个实空间R点:
Own two-orbital SSH chain, both model orbital centres at origin
2
3
1 1 1
-1 0 0 1 1 0.000000000000 0.0
-1 0 0 2 1 1.400000000000 0.0
-1 0 0 1 2 0.000000000000 0.0
-1 0 0 2 2 0.000000000000 0.0
0 0 0 1 1 0.000000000000 0.0
0 0 0 2 1 0.600000000000 0.0
0 0 0 1 2 0.600000000000 0.0
0 0 0 2 2 0.000000000000 0.0
1 0 0 1 1 0.000000000000 0.0
1 0 0 2 1 0.000000000000 0.0
1 0 0 1 2 1.400000000000 0.0
1 0 0 2 2 0.000000000000 0.0
两个模型轨道中心都按原点处理,s px 是本抽象模型的标签。使用自己的Wannier模型时必须保持HR、轨道中心、晶胞和规范约定对应,不能只替换一个文件就沿用本例的拓扑解释。
3. 四个实际计算#
| 目录 | 胞内/胞间跃迁,eV | 方向 | Nk1 | 原生输出,单位π |
|---|---|---|---|---|
| topological | 0.6/1.4 | 0→1 | 201 | +1.000000 |
| trivial | 1.4/0.6 | 0→1 | 201 | 0.000000 |
| reversed | 0.6/1.4 | 1→0 | 201 | +1.000000 |
| finer | 0.6/1.4 | 0→1 | 401 | −1.000000 |
相位以2π为周期,+π与−π是同一相位。不能直接把表中+1和−1相减后说差了2π或没有收敛。方向反转也要在同一个模2π约定下比较。
for name in topological trivial reversed finer; do
echo "$name"
head -1 reference-results/"$name"/kpath_berry.txt
done
读取器从实际HR独立构造哈密顿量,沿闭合路径求归一化相邻态重叠的乘积,与原生相位按模2π比较,差低于 2E-6。两组模型沿路径的最小带隙均为1.6eV,避免把经过带接触点的路径当成隔离占据带。

图中的能带是读取脚本从实际模型HR求出的解释性结果,原生计算入口是Berry相位;没有额外提交一次原生能带任务。两组能谱相同,但固定约定下的相位不同,说明只看能量曲线还不够。
4. 自己运行#
python3 prepare.py
cd work-new
sbatch ../submit.sh
squeue -u "$USER"
# 作业结束后
cd ..
bash read.sh work-new
bash plot.sh
模板依次计算四个小例,实际1个MPI进程、OMP线程1,按本站规则申请56核整节点并整节点计费。
kpath_berry.txt 的前三列是该原生入口写出的笛卡尔坐标,单位Bohr⁻¹,后三列是分数坐标;不要套用其他能带文件的Å⁻¹假设。相位在文件表头,单位为π。
换自己的体系时,先确认占据子空间、绝缘间隙和闭合路径,再增加采样点检查相位是否稳定;金属、简并子空间及轨道中心处理需结合对应方法,不能直接套用这里的两轨道单占据带结论。
下载:实际相位汇总、实际输入的复数轨迹与能带数据。