WannierTools:堆叠谱扫描与求和尺度
实操BulkFS_plane_stack_calc,区分原生逐层求和、每样本平均和布里渊区积分。
阅读本篇目录
BulkFS_plane_stack_calc 沿垂直于给定k平面的方向采样,把各层的谱函数累加投影到平面上。本例比较16与32层采样,说明输出含义和归一化方式。
下载完整输入、三个实际输出与读取绘图脚本,保存为 example.zip:
python3 -m zipfile -e example.zip .
cd wanniertools-stacked-spectral-mask
bash read.sh
bash plot.sh
使用 wanniertools/2.7.0-8173m CPU MPI模块,oneAPI 2023.2、ifort 2021.10.0、Intel MPI 2021.10、MKL 2023.2.0及ARPACK-NG 3.9.1构建。脚本依赖NumPy、Matplotlib。模型为3Å简单立方单轨道最近邻模型、跃迁−1eV,没有新的DFT或真实材料参数拟合。

1. 完整输入#
&TB_FILE
Hrfile='model_hr.dat'
/
&CONTROL
BulkFS_plane_stack_calc=T
Translate_to_WS_calc=F
/
&SYSTEM
NumOccupied=1,SOC=0,E_FERMI=0
/
&PARAMETERS
Nk1=9,Nk2=9,Nk3=16
E_arc=-2,Eta_Arc=0.2
/
LATTICE
Angstrom
3 0 0
0 3 0
0 0 3
ATOM_POSITIONS
1
Direct
X 0 0 0
PROJECTORS
1
X s
KPLANE_BULK
0 0 0
2 0 0
0 2 0
E_arc=-2 指定能量,Eta_Arc=0.2 为展宽,单位eV。起始平面中心为0,两条跨度向量长度2,因此本例平面分数坐标覆盖−1到1;9×9共81个点。
cat inputs/sum32/wt.in
cat inputs/sum16/model_hr.dat
head reference-results/sum16/fs_stack.dat
32层例只把 Nk3 从16改成32。
2. 垂直方向怎样采样#
当前版本这一入口的源码使用固定长度 2 Bohr⁻¹ 的垂直方向跨度,采样分数为 j/Nk3,其中j从0到Nk3−1,不包含最后端点。它不是自动取整个第一布里渊区的高度。
本例3Å立方格子对应的垂直跨度约 1.80455552 个倒格分数单位。不能把16或32简单理解为16个、32个完整布里渊区,也不能默认它是在单位倒格周期内均匀积分。
3. 输出是求和,不是平均#
原生 fs_stack.dat 累加各层谱函数,没有除以 Nk3。相同模型从16改到32时,原始输出尺度会随采样数改变;这不能直接解释为材料态密度翻倍。
bash read.sh
head analysis-read/WT-stacked-spectrum-and-WS-mask.csv
cat analysis-read/DATA-VALIDATION.json
CSV同时给出原始求和与除以Nk3的每样本平均。原生谱值按Hartree⁻¹计,CSV已除以27.211385转成每eV;原生文件这里写的是谱值本身,不是表面QPI文件里的自然对数。
前3列为笛卡尔k,后续平面坐标列同样为Å⁻¹,不是分数坐标。对于本立方模型,脚本用完整已知晶格换算回分数坐标。
独立参照为本模型能量 E(k)=-2[cos(2πk1)+cos(2πk2)+cos(2πk3)] 对应的Lorentz谱,逐点按实际垂直样本求和,与原生结果在本例精度内一致。这不是已经收敛的完整布里渊区态密度积分。
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核整节点并整节点计费。配套独立公式用于本模型,换材料时应按自己的HR和采样区域调整。
需要自定义明确的三维k区域时,可先参考三维网格能量,再按区域和权重处理。无论采用哪个入口,都先确认采样坐标、展宽、求和或积分尺度,再比较不同体系。
实际谱求和与平均数据也包括下面一篇的第一布里渊区筛选对照。