WannierTools 外尔点搜索与手性
从Nodes.dat读取节点,再设置球面与Wilson环,实测两组搜索网格、两种半径和两组手性采样。
阅读本篇目录
这篇按“搜索节点、读取位置、设置包围球面、检查 Wilson 相位与手性”的顺序操作。模型中两个外尔点的位置可解析核对,因此可以同时理解搜索结果和后面的拓扑读数。
1. 下载与看结果#
下载输入、实际结果和绘图脚本,保存为 example.zip:
python3 -m zipfile -e example.zip .
cd wanniertools-weyl-search-chirality
bash show-reference.sh
bash plot-results.sh
ls -lh plots/wanniertools-Weyl-search-Wilson-chirality.png

使用自建双轨道模型 H=d·σ,其中 d=(sin qx,sin qy,cos qz+2−cos qx−cos qy),能量单位 eV,晶格 3×3×3 Å。σ 在这里作用于两个轨道基底。模型包含两个分数坐标节点 (0,0,-0.25)、(0,0,+0.25),不代表某种材料的 DFT 拟合。
环境为 WannierTools 2.7.0,oneAPI 2023.2 / ifort 2021.10、Intel MPI 2021.10、MKL LP64 顺序库和 ARPACK-NG 3.9.1。env.sh 加载模块与分析环境;以下计算在获得的兼容 CPU 资源内执行。
2. 用初始网格搜索节点#
source ./env.sh
mkdir manual-search
cp reference-results/native/search-6x6/wt.in manual-search/
cp reference-results/native/search-6x6/model_hr.dat manual-search/
(cd manual-search && wt.x)
cat manual-search/Nodes.dat
关键输入:
&CONTROL
FindNodes_calc=T
/
&SYSTEM
NumOccupied=1
SOC=0
E_FERMI=0
/
&PARAMETERS
Nk1=6
Nk2=6
Nk3=6
Gap_threshold=0.005
/
KCUBE_BULK
-0.5 -0.5 -0.5
1 0 0
0 1 0
0 0 1
完整的晶格、投影和 HR 已随包提供。NumOccupied=1 选择第 1、2 带之间的带隙。Nk1/Nk2/Nk3 在这里给出 6³ 个搜索起点,程序从这些起点分别最小化带隙;它们不是沿高对称路径的采样点数。
Gap_threshold=0.005 eV 筛选带隙小于 5 meV 的候选点。阈值用于筛选输出,搜索精度和局部优化过程还由该版本的算法决定。搜索可能走到指定初始立方体之外并折回布里渊区,读取结果时应检查实际坐标。
3. 读取 Nodes.dat#
| 列 | 含义 |
|---|---|
| 1–3 | 笛卡尔 k 坐标,Å⁻¹ |
| 4 | 所选两条带之间的带隙,eV |
| 5 | 当前所选占据带的能量,eV |
| 6–8 | 倒格矢分数坐标 k1、k2、k3 |
本例 4³ 和 6³ 两组起点都找到两个节点,文件中位置打印为 (0,0,±0.25),最大剩余带隙约 3×10⁻⁸ eV。坐标打印精度有限,不应把打印出的整数零解读为每个内部浮点数都严格为零。
第五列在有限残余带隙时仍是所选占据带能量,接近本模型的零能节点。一般材料中需要同时检查位置、带隙、能量及邻近能带。
真实材料可能存在很多局部极小值。应比较不同搜索起点、加密网格、检查对称性相关点和候选点附近的能带;一个网格找到的数量不能单独证明全部外尔点都已找到。
4. 将候选位置用于手性计算#
在另一目录采用 WeylChirality_calc,本例已根据解析位置和搜索结果填入两个中心:
source ./env.sh
mkdir manual-chirality
cp reference-results/native/chirality-48x41-r0.02/wt.in manual-chirality/
cp reference-results/native/chirality-48x41-r0.02/model_hr.dat manual-chirality/
(cd manual-chirality && wt.x)
head -n 8 manual-chirality/wanniercenter3D_Weyl.dat
关键输入:
&CONTROL
WeylChirality_calc=T
/
&PARAMETERS
Nk1=48
Nk2=41
Nk3=3
Gap_threshold=0.005
/
WEYL_CHIRALITY
2
Direct
0.02
0 0 -0.25
0 0 0.25
2 是中心点数量;Direct 表示后面两个中心采用分数坐标。使用自己的搜索结果时,可把 Nodes.dat 的第 6–8 列复制到这里,并相应调整中心数量。
半径与网格#
当前 2.7.0 中,该卡半径仍按内部 Bohr⁻¹ 读取。 因此 0.02 对应约 0.0377945 Å⁻¹,0.04 对应约 0.0755890 Å⁻¹;Direct 字样只决定中心坐标的表示方式,不会把半径改成分数坐标长度。
Nk1 控制球面上每个闭合环的方位角点数,Nk2 控制从南极附近到北极附近的环数。程序避开两个极点,以减少退化路径带来的问题。
球面应包住目标节点,并避开其他节点;占据与未占据子空间在球面上需要保持分离。可以改变半径和网格,检查手性整数是否稳定。本例实际比较了 24×21、48×41 两组网格,以及 0.02、0.04 两个半径。
5. 看相位和手性#
wanniercenter3D_Weyl.dat 首行给出两个中心的手性,本例为:
# Chirality -1 1
对应 k3=-0.25、+0.25 的两个节点。后面第 1 列是从南到北的归一化扫描参数,第 2、3 列是两个节点各自的 WCC 相位和,取模到 [0,1);本例各只有一条占据带,后面还重复列出该带的相位。
直接用原生工具画第一个节点:
(cd manual-chirality && gnuplot wanniercenter3D_Weyl_1.gnu)
ls -lh manual-chirality/*.eps
两条相位曲线分别向下、向上绕行,四组条件的整数均为 -1、+1,总和为零。图中的相位还与独立本征矢重叠计算逐点比较,最大差约 5×10⁻⁹。
手性符号要连同方向约定一起使用:本例原生表按从南到北的 Wilson 相位绕行标记;若采用占据低能带、球面外法向 Berry 通量作为定义,符号相反。与其他软件或文献比较时,先统一坐标手性、占据带及环方向。
球面坐标文件#
原生 weylball_kpoints.txt 会在处理下一个中心时覆盖,因此本例最后只保留第二个中心的球面。其前三列为内部倒长度坐标,后三列为分数坐标。读两组节点的拓扑结果应以 WCC 文件中对应的两组列为准。
6. 重算整套#
sbatch job.slurm
或在已经分配的兼容 CPU 资源内:
bash run.sh
bash plot-results.sh
cat weyl-search-chirality-summary.csv
整套依次运行两次节点搜索和四组手性计算。原生结果在 work/,图在 plots/,汇总表记录半径、网格、坐标和手性。已有 work/ 时停止;重新解压到另一目录可以从头重算。
球面与 Wilson 环接口可对照 WannierTools 官方实现。本篇单位和符号说明以集群当前 2.7.0 为准,后续版本应重新核对。