Wannier90 任意k点插值与能量导数
Si的七个采样点、笛卡尔导数单位与分数坐标有限差分检查。
阅读本篇目录
下载完整输入、参考数据和绘图程序,保存为example.zip:
python3 -m zipfile -e example.zip .
cd wannier-response-examples
bash results.sh
bash plot.sh
环境使用wannier90/4.0.3-serial,Intel ifx2024.2、AVX2、MKL顺序库;MPI构建使用Intel MPI2021.13。本文小例子用单线程即可。job.slurm申请CPU分区资源,再由run.py在新的work/算例名下运行。查看参考结果不需要重新计算;重复计算时换用新的解压目录。
1. 在现有检查点上插值#
本例使用官方固定Si八带Wannier检查点,DFT原始均匀网格4³。在集群运行的是检查点导入与postw90,没有重新跑DFT或局域化。
cat inputs/Si-interpolation-step5e-5/silicon_geninterp.kpt
cat inputs/Si-interpolation-step5e-5/silicon.win
sbatch job.slurm Si-interpolation-step5e-5
主开关为:
geninterp = true
geninterp_alsofirstder = true
点文件前三行依次是注释、坐标制、点数。crystal表示分数倒格坐标,点编号只是标签。第一个点是(0.13,0.21,0.17),另外六个点分别沿三个分数轴加减5×10⁻⁵,用于中心差分。
Slurm内部执行:
w90chk2chk.x -import silicon
postw90.x silicon
chk.fmt和相应win必须匹配,不能改成另一套晶胞或另一组Wannier函数后继续复用。
2. 看懂输出的八列#
head -n 14 reference-results/Si-interpolation-step5e-5/silicon_geninterp.dat
bash plot.sh
输出依次为点编号、三个笛卡尔k分量(Å⁻¹)、能量(eV)、三个笛卡尔能量导数(eV·Å)。每个采样点连续给8条保留能带,共56行。
点文件是分数坐标,导数却是笛卡尔坐标;不能直接把输出导数与分数坐标差分相减。若晶胞按行排列为A,倒格矢按行排列为B=2πA⁻ᵀ,沿第i个分数轴的导数为grad_cart·B_i。
本例中心差分与解析导数达到10⁻⁴eV/分数坐标的比较精度。原始结果只打印有限位数,差分步长过小时会放大舍入误差;选择步长要同时考虑截断与打印精度,不是越小越好。

输出导数不是直接以m/s给出的群速度。若需要群速度,还要按v=(1/ℏ)∇kE换算单位,并确认能带简并处的带序与物理定义。
需要根据你的体系选择资源?联系讨论计算需求。实际可用软件与权限,以当前账户和运行环境为准。