WannierTools专题

WannierTools:磁场谱函数与Lanczos输出

实际运行两种Lanczos分支,识别展宽、负谱值和磁场标记,并由已核对能级生成确定性谱。

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

下载WannierTools磁场与谱函数完整示例,保存为example.zip:

python3 -m zipfile -e example.zip .
cd wanniertools-magnetic-examples
bash results.sh
bash plot.sh

以上读取参考数据和图片。自己运行时用sbatch run.slurm,在新的work/中依次运行十个短条件;已有目录保留。bash read.sh work用独立Harper矩阵读取新能量。本例使用已安装WannierTools2.7.0 CPU程序,Intel oneAPI2023.2、Intel MPI、MKL LP64顺序库、ARPACK-NG3.9.1,单MPI进程/单CPU线程,不使用GPU。

1. 什么时候需要谱函数分支#

小矩阵可以直接对角化,得到每条能级。磁超胞和轨道数很大时,可以考虑Lanczos近似谱;随机向量、递推长度和展宽会影响结果。本例只有9维,先拿它学习输出,不宣称Lanczos有加速收益。

本例分别实际执行LandauLevel_B_dos_calc与LandauLevel_k_dos_calc。完整输入在:

cat inputs/B-Lanczos-q9/wt.in
cat inputs/k-Lanczos-q9/wt.in

固定k谱的关键参数:

&CONTROL
 LandauLevel_k_dos_calc=T
/
&PARAMETERS
 Magq=9
 Magp=1
 Nk1=9
 OmegaNum=501
 OmegaMin=-4.5
 OmegaMax=4.5
 Eta_Arc=0.05
 NumLCZVecs=9
 NumRandomConfs=32
/

完整输入还须保留晶格、原子/投影、HR、SURFACE和路径。原生程序与上一页使用同一已安装CPU入口,整个十条件例由sbatch run.slurm串起来。

2. 读实际输出列#

head -n 8 reference-results/B-Lanczos-q9/LandauLevel_B_dos.dat
head -n 6 reference-results/k-Lanczos-q9/LandauLevel_k_dos.dat

B谱有磁通、原生磁场、能量及九种展宽的谱值,九种展宽写在文件头,不能把全部九列都当作Eta_Arc=0.05。本例B谱包含p/q=1端点,与前篇直接对角化B扫描的点数不同,比较时按磁通匹配。

固定k谱是路径长度、能量、原始LDOS值。原生谱列不能只因能量列标eV,就直接当作已归一化的“每eV态数”。本例保留原单位和全部原值。

另外,Lanczos分支的Tesla标记还包含与对角化分支不同的磁通常数约定;两者都不能代替按磁通和面积的SI换算。本例的图统一按p/q或能量展示。

3. 负谱值要停下来检查#

本例固定k原生谱出现约−0.847233的负原值。没有取绝对值,也没有截成0;这个输出不用于给出可信LDOS、态数或物理峰强。

独立确定性谱与保留的原生Lanczos结果

增加随机向量、递推长度或调整算法不保证自动修复所有问题。实际研究应核对谱的符号、积分、能级位置和参数变化;本小模型优先使用已经逐条核对的直接对角化结果。

4. 从真实能级画一个可解释的展宽谱#

用上一页q=9、p=1、路径Γ点的九条真实能量,给每条能量加半宽0.05 eV的Lorentz峰,并除以9得到平均每态归一化谱。这是单个固定k点的展宽参考,不是对整个布里渊区积分的体DOS。

/public/toolkit/miniconda3/envs/ase-3.29.0/bin/python - <<'PY'
import numpy as np
x = np.loadtxt('reference-results/k-q9/landaulevel_k.dat')
levels = x.reshape(9,17,2)[:,0,1]
energy = np.linspace(-4.5,4.5,501)
eta = 0.05
rho = (eta/np.pi/((energy[:,None]-levels[None,:])**2+eta**2)).mean(1)
np.savetxt('spectrum.csv', np.c_[energy,rho], delimiter=',',
           header='energy_eV,normalized_DOS_per_eV', comments='')
PY
bash plot.sh

每条Lorentz峰在无限能量范围积分为1;有限的−4.5…4.5 eV窗口会丢失尾部,因此不能硬把该窗口积分要求成恰好1。配套data/fixed-k-spectrum-comparison.csv同时保存这个确定性曲线和未经改写的原生Lanczos原值,便于比较。

这里演示三种不同对象:真实离散能级、基于它们的确定性展宽,以及实际执行但存在上述问题的Lanczos输出。读取时始终保留这个区别。

参考:WannierTools官方文档、官方源码。

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

查看配图

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

100%查看原图 ↗