py4vasp Γ点能量修正
用实际Fan和DW重建选定两态能量差,区分Γ点差与缺失的基本带隙输出。
阅读本篇目录
本篇处理鸢算科技集群已经完成的两份Si电声耦合结果:原生VASP6.6.1-P100-HDF5,NVHPC25.3/CUDA12.8构建;后处理使用py4vasp0.11.3,绘图使用ASE3.29环境中的NumPy/Matplotlib。以下命令只读已有数据,1个CPU即可,不启动VASP,不需要GPU。
下载两份HDF5、输入记录、实际数值与绘图脚本,在新目录:
unzip py4vasp-elph-selfenergy-practical*.zip -d elph-example
cd elph-example
module load py4vasp/0.11.3
bash run.sh
输出analysis/selfenergy.csv(60行)、analysis/chemical-potential.csv(6行)、analysis/RESULTS.json及4图。已有analysis时不覆盖;重新操作请另解压一份。其他电脑已安装py4vasp0.11.3、h5py、NumPy和Matplotlib,可用PY4PY=python3 PLOTPY=python3 bash run.sh。
公开HDF5重新打包并移除了整个POTCAR组,其余科学数据与原文件相同;不含POTCAR、WAVECAR、VASP程序或phelel势导数档案。本包是后处理资料。需要从头计算电声耦合时,按VASP原生电声耦合流程准备本人的授权程序和前置数据。
1. 本例可以重建什么能量差#
在同一Γ点,取第5带与第4带的Kohn–Sham能量,加各自自能实部修正后相减:
ΔΓ(T) = [ε5 + ReΣ5(T)] - [ε4 + ReΣ4(T)]
ReΣ = Re(Fan) + DW
这是固定晶胞、选定两态的在壳能量差参考。它不是遍历全布里渊区得到的基本带隙,也没有包含热膨胀或完整准粒子方程求解。
python - <<'PYDATA'
import json
r=json.load(open('analysis/RESULTS.json'))
a=r['si-selfen6']['accumulators'][0]
print('bare Gamma:',a['bare_Gamma_b5_minus_b4_eV'])
for t,e in zip(a['temperatures_K'],a['corrected_selected_Gamma_b5_minus_b4_eV']):
print(t,e)
PYDATA
2. 实际网格和δ对照#
主计算为4×4×4网格,电子–声子稠密网格分别为6×6×6和8×8×8;每份文件各有δ=0.05/0.10eV两组。以下是从同一批真实数组提取的选定Γ点能量差:
| 稠密网格 | δ / eV | 0K / eV | 300K / eV | 600K / eV |
|---|---|---|---|---|
| 6×6×6 | 0.05 | 2.48496165 | 2.45684502 | 2.39592926 |
| 6×6×6 | 0.10 | 2.48163848 | 2.45390805 | 2.39360868 |
| 8×8×8 | 0.05 | 2.50475314 | 2.47697477 | 2.42377468 |
| 8×8×8 | 0.10 | 2.49596115 | 2.46800758 | 2.41439087 |

裸的Γ点差约2.538833eV。表格多位小数便于核对文件,不代表材料预测精度。网格与δ改变后结果仍有差异,不能把本页三点温度曲线当作Si的收敛实验带隙温度关系。
3. 查看产生这些数据的输入记录#
cat inputs/si-selfen6/INCAR
cat inputs/si-selfen6/KPOINTS_ELPH
关键设置为:
NBANDS = 24
ELPH_RUN = .TRUE.
ELPH_SELFEN_IKPT = 1
ELPH_SELFEN_BAND_START = 4
ELPH_SELFEN_BAND_STOP = 5
ELPH_MODE = RENORM
ELPH_DRIVER = EL
ELPH_NBANDS = 16
ELPH_SELFEN_GAPS = .FALSE.
ELPH_SELFEN_TEMPS = 0 300 600
ELPH_SELFEN_DELTA = 0.05 0.10
NBANDS控制主计算的带数,ELPH_NBANDS控制稠密电子–声子步骤,含义不同。实际输出包含1–5带,后处理按原生映射选第4/5带。KPOINTS_ELPH内容例如:
Dense mesh
0
Gamma
6 6 6
0 0 0
这是数据来源说明,不是把这些行单独交给VASP就能重算;需要前置的phelel势导数等资料,完整链条见VASP自能与线宽。
4. 为什么bandgap接口有2个累加器,却没有带隙数组#
python - <<'PYDATA'
import py4vasp
c=py4vasp.Calculation.from_path('inputs/si-selfen6')
g=c.electron_phonon.bandgap
print(g.read())
print(g[0].to_dict())
print(len(c.electron_phonon.transport))
PYDATA
本例bandgap累加器计数为2,但direct、direct_renorm、fundamental、fundamental_renorm均为None;输运实例数为0。这与本例手动选态、ELPH_SELFEN_GAPS=.FALSE.的使用场景相符。不能只据计数非零就发布“基本带隙”,也不能将本页自己构造的Γ点差填回这些缺失字段。
需要基本带隙重整化时,应先按VASP带隙重整化说明选择正确状态和计算模式,再检查原生结果确实存在;新的结果仍需各项收敛。