QE EPW电子谱函数与cumulant实操
使用已有自能计算Dyson谱与cumulant,解释频率范围、跳过点和各列单位。
阅读本篇目录
下载QE/EPW完整输入、真实结果与绘图脚本,保存为example.zip:
python3 -m zipfile -e example.zip .
cd qe-epw-diamond-examples
bash results.sh
bash plot.sh
以上只读取参考结果和绘图。需要自己计算时,先按完整流程提交两阶段任务;输入在inputs/,参考原生输出在reference-results/,十份数据表在data/。本组使用QE7.6/P100入口,NVHPC25.3、HPC-X2.22.1、CUDA12.8和MKL2023.2,每次一个MPI进程、两个CPU线程、一张GPU。图中的数据来自鸢算科技集群实际计算。
1. 先生成频率相关电子自能#
实际电子谱输入:
--
&inputepw
prefix = 'diam'
amass(1) = 12.01078
outdir = './'
iverbosity = 3
elph = .true.
etf_mem = 0
vme = 'dipole'
epwwrite = .false.
epwread = .true.
nbndsub = 4
wannierize = .false.
num_iter = 300
iprint = 2
dis_win_max = 12
dis_froz_max= 7
proj(1) = 'f=0,0,0:l=-3'
elecselfen = .false.
nest_fn = .false.
phonselfen = .false.
a2f = .false.
specfun_el = .true.
wmin_specfun = -4
wmax_specfun = 1
nw_specfun = 20
fsthick = 15 ! eV
temps = 300 ! K (same as PRB 76, 165108)
degaussw = 1.0 ! eV
dvscf_dir = './save/'
nkf1 = 6
nkf2 = 6
nkf3 = 6
nqf1 = 6
nqf2 = 6
nqf3 = 6
nk1 = 3
nk2 = 3
nk3 = 3
nq1 = 3
nq2 = 3
nq3 = 3
/
specfun_el生成Dyson电子谱;频率−4到1的单位是eV,本例只有20点。specfun.elself.300.000K按k点给出4条带相加的谱,specfun_sup.elself.300.000K保留逐带的能量、自能实部和虚部。
head -12 reference-results/post/epw3/specfun.elself.300.000K
head -9 reference-results/post/epw3/specfun_sup.elself.300.000K
频率轴为eV、谱强度为1/meV;若画成1/eV,强度乘1000。自能实部和虚部为meV,带能和频率仍是eV。读取器统一单位,并从打印的自能独立重建谱函数。
2. 再从这份自能运行cumulant#
本版使用lcumulant,bnd_cum=4选择第4条带:
--
&inputepw
prefix = 'diam'
amass(1) = 12.01078
outdir = './'
iverbosity = 0
ep_coupling = .false.
elph = .false.
etf_mem = 1
vme = 'dipole'
epwwrite = .false.
epwread = .true.
nbndsub = 4
wannierize = .false.
num_iter = 300
iprint = 2
dis_win_max = 12
dis_froz_max= 7
proj(1) = 'f=0,0,0:l=-3'
elecselfen = .false.
phonselfen = .false.
a2f = .false.
specfun_el = .false.
wmin_specfun = -4
wmax_specfun = 1
nw_specfun = 20
lcumulant = .true.
bnd_cum = 4
fsthick = 15 ! eV
temps = 300 ! K (same as PRB 76, 165108)
degaussw = 1.0 ! eV
dvscf_dir = './save/'
nkf1 = 6
nkf2 = 6
nkf3 = 6
nqf1 = 6
nqf2 = 6
nqf3 = 6
nk1 = 3
nk2 = 3
nk3 = 3
nq1 = 3
nq2 = 3
nq3 = 3
/
它读取上一步的specfun_sup.elself.300.000K,无需重新计算PW/PH。资料包后处理任务按顺序复制依赖文件。手动执行时,在已分配资源内:
cp ../epw3/specfun_sup.elself.300.000K .
mpirun -np 1 epw.x -input input.in > native.out

3. 认识各列#
specfun_cum4.elself.300.000K给出k编号、E−EF、总谱、准粒子部分、第一卫星部分,每个k的首行另有Z。总谱包含更高阶项:A=QP+S1+S2/2+S3/6,不能拿QP与S1相加就要求等于总谱。单个展开项可带符号,不能单独把S1解释成概率。
head -8 data/electron-cumulant.csv
bash plot.sh
4. 为什么有些k点全是零#
cumulant需要该带KS能量位于频率范围内部,附近也要有两侧频点供数值求导。这个20点小例子只有87个k点实际计算,其他129点因窗口或端点条件跳过;全零不代表对应电子态没有谱权重。跳过点的打印Z不能使用。
有效点打印Z约0.9844–1.0439,提示不能把它当作归一化定量准粒子权重。实际研究需要扩大频率范围、加密频点和k/q网格,并检查谱积分;本图不宣称卫星峰位置与权重已收敛。
修改参数时编辑inputs/post/epw3/input.in及inputs/post/epw9/input.in,保持两者频率网格一致,在新工作目录运行。对图做平滑不能代替增加实际计算频点。