QE专题

QE EPW电子谱函数与cumulant实操

使用已有自能计算Dyson谱与cumulant,解释频率范围、跳过点和各列单位。

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

下载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

实际电子谱与cumulant输出

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,保持两者频率网格一致,在新工作目录运行。对图做平滑不能代替增加实际计算频点。

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

查看配图

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

100%查看原图 ↗