pymatgen与Phonopy:声子能带和DOS互通
用本集群Si真实受力生成声子数据,读取频率、本征位移和DOS,并明确倒格矢的2π约定。
阅读本篇目录
本篇用已完成的Si真实DFT受力连接Phonopy与pymatgen,不重新计算VASP。原胞2个Si原子,有限位移超胞2×2×2共16原子,位移幅度0.02 Å;输入受力来自本集群已有算例,详见位移生成与力收集。这里展示有限谐模型的接口,不把它称为超胞与材料性质都已收敛。
unzip pymatgen-phonon-wave665-*.zip
cd pymatgen-phonon
bash results.sh
bash plot.sh
reference-data/保存实际计算的数值,figures/reference.png为重绘图;读取和绘图不会启动VASP。若要运行本篇全部后处理,普通账号提交sbatch job.slurm。脚本申请cpu-8173m独占整节点1任务×56核,小例内部单线程,计费仍按整节点;不要在管理节点启动计算。
1. 先检查输入#
head -20 inputs/phonopy_disp.yaml
head -15 inputs/FORCE_SETS
FORCE_SETS的原子数、位移顺序要与YAML一致。两个文件虽然能独立打开,也不能跨体系混用。本例先显式施加力常数声学和规则,再生成Γ-X-L-Γ三段声子路径,每段51点,含重复段端点共153点、6条分支。
2. 分两套环境调用工具#
当前pymatgen环境不含Phonopy,Phonopy环境也不含pymatgen,资料包用两个阶段传递普通数据文件,避免在公共环境里临时混装:
source /etc/profile
module purge
module load phonopy/4.8.3
python phonopy_prepare.py
module purge
module load pymatgen/2026.9.24
python analyze.py
在已申请的CPU资源内执行以上命令,或直接提交包内job.slurm。第一步生成band.yaml、total_dos.dat和mesh.npz;第二步读取与分析。Phonopy为4.8.3,pymatgen为2026.9.24,使用各自配套Python及数值依赖;接口通过文件连接。
from pymatgen.io.phonopy import get_ph_bs_symm_line, get_ph_dos
bands = get_ph_bs_symm_line('band.yaml')
dos = get_ph_dos('total_dos.dat')
print(bands.bands.shape) # (6, 153)
print(bands.eigendisplacements.shape) # (6, 153, 2, 3)
print(dos.frequencies.shape)
能带数组第一轴是声子分支,第二轴是q点;频率为THz。带本征矢的Phonopy YAML还会转换出复数本征位移,包含质量因子和晶胞相位,不能把它当作每原子归一化的笛卡尔位移轨迹。
3. 分数q不等于物理波矢距离#
本安装版本读取器保留band.yaml中的晶体学倒格矢,不含2π。如果要按物理波矢k=2πq·A⁻ᵀ作横轴,显式建立派生对象:
from monty.serialization import loadfn
from pymatgen.io.phonopy import get_ph_bs_symm_line_from_dict
raw = loadfn('band.yaml')
physical = dict(raw)
physical['reciprocal_lattice'] = (
bands.structure.lattice.reciprocal_lattice.matrix.tolist())
bands_k = get_ph_bs_symm_line_from_dict(physical)
原始YAML没有修改,分数q、频率和本征位移保持不变;变化的是倒格矢的约定及路径横轴。资料包CSV的distance_inv_A与下图采用这个含2π的物理距离。不要比较两个横轴时只看单位“Å⁻¹”而忽略2π。

4. DOS积分先数声子模#
本例在12×12×12完整网格1728点上生成Gaussian DOS,标准差0.05 THz、频率步长0.01 THz。0–20 THz积分为5.99913194模/原胞,接近两原子的6模;没有强制归一化为6。有限窗口、有限网格与展宽都会影响这项积分。
head analysis/Si-pymatgen-phonon-bands.csv
head analysis/Si-pymatgen-phonon-DOS.csv
更换体系时需要重新准备自己的结构与受力;换画图工具不会改善原始力常数。后续温度积分见声子热容、熵和自由能。
参考:pymatgen声子API、Phonopy接口API。在线文档可能比集群安装版新,本文以2026.9.24实际行为为准。