py4vasp专题

py4vasp 电声耦合带隙修正

从Si真实Fan与Debye–Waller响应提取温度依赖的间接、直接带隙,比较网格和展宽。

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

从Si真实Fan与Debye–Waller响应提取温度依赖的间接、直接带隙,比较网格和展宽。

1. 下载实例,先看图再提取#

下载本篇终端实操资料包,在新目录解压:

unzip py4vasp-electronphonon-practical-wave291-*.zip
cd py4vasp-electronphonon-practical-wave291
bash preview.sh

preview/figures/生成三张参考图。完整提取、原生报告和重新画图只需:

bash run.sh
ls results/data
ls tools-output
ls plots/figures

run.sh依次执行prepare.sh、extract.sh、tools.sh、plot.sh。results/data/是提取的CSV与张量,tools-output/是原生报告,plots/figures/是PNG。输出目录受保护;再次操作请换一个新解压目录。随包figures/可以直接查看。

后处理使用py4vasp/0.11.3的Python3.11环境,静态图使用pymatgen/2026.9.24中的NumPy2.3.5、Matplotlib3.11.2。已分配资源内1个CPU即可,不会重新运行VASP。carriers/保存本例导出的自有全分辨率数值与字段配方;脚本在work/重建明确标记的最小HDF读取载体,它不是原始完整VASP输出。下载包不含PAW、波函数、响应导数、Wannier系数或程序。

2. 先准备电子态和声子势导数#

本例为2原子Si原胞,ENCUT=550 eV、电子自洽Gamma4³、NBANDS=24、EDIFF=1E−6。晶格、PAW、能带数与声子势导数必须相互匹配。顺序是:优化结构 → 生成声子势导数 → 计算收敛电子态 → 插值与自能 → 提取各温度带隙 → 收敛参数。已有自己的phelel_params.hdf5时可以复用,不必每换一个温度都重新生成导数。

本次复用同一结构的真实声子势导数,第一份6³任务保存WAVECAR/CHGCAR;8³任务读取它们做固定电荷电子态更新。真实原生计算用VASP6.6.1 GPU/HDF5、NVHPC25.3、CUDA12.8,P100和V10016G,单任务1GPU、1MPI进程。参数与声子势导数准备可结合VASP官方带隙重整化说明。

mkdir Si-gap6
cp inputs/Si-gap6/{INCAR,POSCAR,KPOINTS,KPOINTS_ELPH} Si-gap6/
# 将自己匹配的POTCAR、phelel_params.hdf5放入Si-gap6
cd Si-gap6
sbatch submit.sh

submit.sh见文末。KPOINTS控制电子态,KPOINTS_ELPH控制本例插值网格,它们不是同一个文件。本例后者6³/8³对照,ELPH_NBANDS=16,展宽0.05/0.10 eV,温度0、300、600 K。

ELPH_RUN = .TRUE.
ELPH_MODE = RENORM
ELPH_SELFEN_GAPS = .TRUE.
ELPH_SELFEN_TEMPS = 0 300 600
ELPH_SELFEN_DELTA = 0.05 0.10

计算完成后先检查输出,再提取:

tail OUTCAR
grep -n 'Fundamental gap' OUTCAR
ls -lh vaspout.h5

3. 选择累加器,读取修正后的带隙#

在第1节资料包根目录操作:

module load py4vasp/0.11.3
python - <<'PYCODE'
import py4vasp
c = py4vasp.Calculation.from_path('work/Si-gap6')
print(c.electron_phonon.bandgap.read())
for i in range(len(c.electron_phonon.bandgap)):
    result = c.electron_phonon.bandgap[i].to_dict()
    print('累加器', i+1)
    print(result)
PYCODE

容器的read()只告诉你有多少个累加器;必须用[0]或[1]选实例,再to_dict()取实际数组。Python索引0对应OUTCAR累加器1。本例两个累加器对应两种展宽;不要把累加器编号当成温度编号。参数说明见VASP ELPH_SELFEN_GAPS。

fundamental是实际采样网格上价带最高与导带最低之差,可在不同k点;direct是同一k点的最小带间间隔。只挑Γ点两条能带相减不能冒充全局间接带隙。字段中的renorm是修正后的带隙,变化量要再减去bare。

4. Si实际数据和图#

下表固定展宽0.05 eV;完整两种展宽都在CSV中。

插值网格 未修正间接带隙/eV 0 K修正后/eV 300 K修正后/eV 600 K修正后/eV
6³ 0.735078 0.645114 0.575177 0.457700
8³ 0.634809 0.562512 0.504549 0.404946

Si实际间接与直接带隙

未修正直接带隙两种网格都是约2.538833 eV;间接带隙却明显不同,说明导带最低点的采样很重要。0 K也有零点振动修正,不能机械令其为零。

Si实际电声耦合带隙变化量

head -8 results/data/Si-electronphonon-gaps.csv
ls tools-output/*.html

tools.sh实际调用每个累加器的to_plotly('fundamental_renorm, direct_renorm'),HTML可用浏览器放大查看。静态图保留原生采样点,连接线只是便于阅读。

这里16条中间能带、6³/8³及两种展宽是操作对照,还没有达到网格、空带和展宽收敛,不能把表中数值直接当Si的最终材料结论。更换体系时,应先确保半导体带边和声子稳定性,再分别加密插值网格、增加能带、改变展宽,并保持同一套结构和PAW。

5. 需要逐态分析时#

self_energy[0].to_dict()返回Fan与Debye–Waller数组。本版本Fan有独立展宽轴,DW没有;资料脚本显式选择Fan的实部,再按态与温度轴加DW,使用bks_idx和band_start还原稀疏能带编号。不要把默认广播得到的高维数组直接当正确能量修正。进一步操作见电声自能教程。

将自己的电子结构输入提交到Slurm#

解压、读取和画图不需要提交VASP。若要运行新计算,在上文计算目录保存submit.sh:

#!/bin/bash
#SBATCH --partition=gpu-8p100-hs
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=1
#SBATCH --gres=gpu:p100-16g:1
#SBATCH --time=00:30:00
source /etc/profile
module purge
module load vasp/6.6.1-p100-hdf5
export OMP_NUM_THREADS=1
mpirun --bind-to none -np 1 vasp_std > vasp.log

请先用module avail vasp确认模块名称与账户可用分区。所需PAW和前置文件应来自自己的同一计算链;不要混用不同晶格、PAW或能带数的WAVECAR/导数。

本例完整输入#

以下文件已包含在资料包inputs/中。POTCAR和匹配的前置响应文件需自行提供。

Si-gap6:完整输入

INCAR

ENCUT=550
PREC=Accurate
EDIFF=1E-6
NSW=0
IBRION=-1
ISMEAR=0
SIGMA=0.05
EFERMI=MIDGAP
ISYM=2
LREAL=.FALSE.
LASPH=.TRUE.
LWAVE=.TRUE.
LCHARG=.TRUE.
NELM=160
NBANDS=24
ELPH_RUN=.TRUE.
ELPH_MODE=RENORM
ELPH_DRIVER=EL
ELPH_NBANDS=16
ELPH_SELFEN_GAPS=.TRUE.
ELPH_SELFEN_TEMPS=0 300 600
ELPH_SELFEN_DELTA=0.05 0.10
SYSTEM=Si-actual-EP-gap6
LH5=.FALSE.
ISTART=0
ICHARG=2

POSCAR

si-thermal-static                       
    1.000000000000000     
     0.0000000000000000    2.7344629562984921    2.7344629562984921
     2.7344629562984921    0.0000000000000000    2.7344629562984921
     2.7344629562984921    2.7344629562984921    0.0000000000000000
  Si            
     2
Direct
     0.0000000000000000    0.0000000000000000    0.0000000000000000
     0.2500000000000000    0.2500000000000000    0.2500000000000000

KPOINTS

Gamma mesh
0
Gamma
4 4 4
0 0 0

KPOINTS_ELPH

Actual electronphonon interpolation mesh
0
Gamma
6 6 6
0 0 0
Si-gap8-fixedcharge:完整输入

INCAR

ENCUT=550
PREC=Accurate
EDIFF=1E-6
NSW=0
IBRION=-1
ISMEAR=0
SIGMA=0.05
EFERMI=MIDGAP
ISYM=2
LREAL=.FALSE.
LASPH=.TRUE.
LWAVE=.FALSE.
LCHARG=.FALSE.
NELM=160
NBANDS=24
ELPH_RUN=.TRUE.
ELPH_MODE=RENORM
ELPH_DRIVER=EL
ELPH_NBANDS=16
ELPH_SELFEN_GAPS=.TRUE.
ELPH_SELFEN_TEMPS=0 300 600
ELPH_SELFEN_DELTA=0.05 0.10
SYSTEM=Si-gap8
LH5=.FALSE.
ISTART=1
ICHARG=11
ALGO=Normal

POSCAR

si-thermal-static                       
    1.000000000000000     
     0.0000000000000000    2.7344629562984921    2.7344629562984921
     2.7344629562984921    0.0000000000000000    2.7344629562984921
     2.7344629562984921    2.7344629562984921    0.0000000000000000
  Si            
     2
Direct
     0.0000000000000000    0.0000000000000000    0.0000000000000000
     0.2500000000000000    0.2500000000000000    0.2500000000000000

KPOINTS

Gamma mesh
0
Gamma
4 4 4
0 0 0

KPOINTS_ELPH

Actual electronphonon interpolation mesh
0
Gamma
8 8 8
0 0 0

继续查找其他数据入口:py4vasp功能索引。

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

查看配图

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

100%查看原图 ↗