WannierTools专题

WannierTools 态密度与联合态密度

分别运行 DOS 和 JDOS,核对展宽、采样、自旋计数和单位,并提供可以直接运行的结果整理命令。

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

态密度 DOS 统计给定能量附近有多少电子态;联合态密度 JDOS 统计占据态到空态之间的能量差。本例使用已经写好的双轨道 HR 文件,给出从计算到画图的操作流程。

1. 下载与查看#

下载输入、原生结果与整理脚本,保存为 example.zip:

python3 -m zipfile -e example.zip .
cd wanniertools-DOS-JDOS-mass
bash show-reference.sh
head -n 7 reference-results/native/dos-n41/dos.dat
head -n 6 reference-results/native/jdos-n41/JDOS-per-eV-cell.csv

模型沿用 Berry 曲率教程 的 m=-1 双轨道模型,晶格 3×3×10 Å,不依赖第三方向。它是理论模型,不是某种材料的 DFT 拟合。两个能带之间有带隙,可用来清楚地观察 DOS 和跃迁能量。

环境为 WannierTools 2.7.0,oneAPI 2023.2 / ifort 2021.10、Intel MPI 2021.10、MKL LP64 顺序库和 ARPACK-NG 3.9.1;使用兼容的 AVX512 CPU。分析绘图调用现有 sisl 0.16.4 的 Python,由 env.sh 指定,不需要自行安装 NumPy。

实算DOS、归一化JDOS与积分权重

2. 先单独计算 DOS#

下面的计算命令请在已获得的计算资源内执行。分别建立目录,避免覆盖参考文件:

source ./env.sh
mkdir manual-dos
cp reference-results/native/dos-n41/wt.in manual-dos/
cp reference-results/native/dos-n41/model_hr.dat manual-dos/
(cd manual-dos && wt.x)
head -n 7 manual-dos/dos.dat

关键输入:

&CONTROL
Dos_calc=T
JDos_calc=F
/
&SYSTEM
NumOccupied=1
SOC=0
E_FERMI=0
/
&PARAMETERS
Nk1=41
Nk2=41
Nk3=3
Eta_Arc=0.1
OmegaNum=1201
OmegaMin=-6
OmegaMax=6
/

KCUBE_BULK
0 0 0
1 0 0
0 1 0
0 0 1

完整输入中的晶格、轨道与 HR 保持一致。这里采用 [0,1) 周期网格,不重复包含末端。由于模型没有 kz 色散,第三方向取 3;真实三维材料不能据此省略第三方向的收敛检查。

九列 DOS 和自旋倍数#

dos.dat 第一列是 eV,后九列分别对应 Eta_Arc 的 0.1、0.2、0.4、0.8、1、2、4、8、10 倍。本例为 0.01 到 1 eV,第 6 列对应 0.1 eV。

这个版本的原生 DOS 在 SOC=0 时自动乘以 2。两个轨道能带的 DOS 积分约为 4 个态/晶胞;若按单个自旋通道统计,应将 DOS 除以 2,得到约 2。不要再额外乘一次 2。它与不同性质输出的倍数约定也不一定相同,例如前面的无自旋 AHC 模型不能直接套用这个 DOS 倍数。

增加 OmegaNum 是细化输出能量网格,不会自动增密 k 网格。展宽越窄,通常越需要同时加密能量网格和 k 网格;较宽高斯的尾部也可能超出你选择的能量窗口。

3. 在另一目录计算 JDOS#

source ./env.sh
mkdir manual-jdos
cp reference-results/native/jdos-n41/wt.in manual-jdos/
cp reference-results/native/jdos-n41/model_hr.dat manual-jdos/
(cd manual-jdos && wt.x)
bash normalize-results.sh jdos manual-jdos
head -n 6 manual-jdos/JDOS-per-eV-cell.csv

此输入只启用 JDos_calc=T,关闭 DOS,Nk1/Nk2=41、Nk3=3、OmegaNum=801、OmegaMax=8。

本例请分别运行两个开关,不同时启用。 当前 2.7.0 的合并分支与分开运行的网格、能带遍历和归一化规则不同,不适合将二者的结果直接拼接比较。

JDOS 的能量范围和宽度#

单独的 JDOS 分支从 0 计算到 OmegaMax;本例即 0–8 eV,OmegaMin 不决定它的下限。当前分支的高斯宽度由:

eta = 3 × OmegaMax / OmegaNum

确定,本例约 0.02996255 eV,不是照搬 Eta_Arc。输出峰从约 2 eV 的最小带间能量差开始,而 DOS 的电子能量零点和这张图的跃迁能量零点含义不同。

先整理单位,再画图#

当前 2.7.0 原生 jdos.dat 的第二列保留了倒空间体积与 Hartree 的内部因子。配套脚本根据晶格和该版本单位常数,整理成 1/(eV·晶胞),写入 JDOS-per-eV-cell.csv,原文件保持原样。

normalize-results.sh 会核对已安装程序与相关源码的版本哈希。版本变化时它会停止,避免把当前转换套到其他版本。使用自己材料的 HR 时,必须同步写入正确的 LATTICE;不能沿用教学模型的晶格来换算。

本例归一化 JDOS 的积分约为 1 个占据带到空带的跃迁权重/晶胞,不是 4。JDOS 没有光学矩阵元,因此不能直接把它当作吸收光谱或吸收强度。

4. 绘图#

当前原生 dos.gnu 输出 EPS,部分展宽图例的列号存在偏移。为了明确选择 0.1、0.2、1 eV 三列并生成 PDF,直接使用下面的小脚本:

cat > manual-dos/dos-plot.gnu <<'EOF'
set terminal pdfcairo enhanced color font ",14"
set output 'dos.pdf'
set xlabel 'Energy (eV)'
set ylabel 'DOS (states/eV/cell)'
plot 'dos.dat' u 1:6 w l lw 2 title 'eta=0.1 eV', \
     '' u 1:7 w l lw 2 title 'eta=0.2 eV', \
     '' u 1:10 w l lw 2 title 'eta=1.0 eV'
EOF
(cd manual-dos && gnuplot dos-plot.gnu)
ls -lh manual-dos/dos.pdf
bash plot-results.sh
ls -lh plots/wanniertools-DOS-JDOS-normalization.png

dos.pdf 来自刚运行的原生数据。Python 图读取整套重算后的分析数据;如果没有完整 work,则读取随包参考数据。下载包保留 21×21×3 与 41×41×3 两组实算,可以看到较窄 JDOS 峰对 k 网格更敏感。

5. 整套重算#

sbatch job.slurm

下载脚本调用 bash run.sh,依次生成小模型、运行原生程序、执行版本对应的单位整理,再生成汇总 CSV。已有 work/ 时停止,不覆盖旧结果。

本例对全部能量点和全部九种 DOS 展宽进行了独立高斯求和;JDOS 的 801 个点与解析能带间隔逐项比较。展示的是该模型的可复现操作流程,实际材料仍需检查 HR 质量、占据范围、费米能和采样收敛。参数卡可参照 WannierTools 2.7 官方输入说明。

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

查看配图

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

100%查看原图 ↗