Phonopy 晶格采样与晶胞对应
生成保持对称性的晶格网格,说明原胞、常规胞、超胞和能量归一化。
阅读本篇目录
下载位移准备、真实力数据与QHA资料包。在已分配CPU资源内,用普通账号解压到新目录运行:
unzip phonopy-preparation-qha-wave242-*.zip -d phonopy-qha-practice
cd phonopy-qha-practice
bash run.sh
ls preparation thermal figures
脚本使用1个物理CPU,无需GPU。先实际生成位移和晶格采样,再从已提供的真实数值力与能量计算热膨胀,最后生成四张高清图;不会提交新的VASP计算。输出目录已存在时请另解压一份。
Phonopy为4.8.3,Python3.11.16、C/OpenMP由GCC13.3编译、默认phonors0.6.0后端,symfc为1.7.3。源数据来自本集群已经完成的VASP6.6.1 GPU计算:NVHPC25.3、CUDA12.8、HPC-X2.22.1、MKL2023.2。电子计算与本包的CPU后处理是两个阶段。
1. 三种晶胞各自做什么#
| 名称 | 本例原子数 | 作用 |
|---|---|---|
| Si原胞 | 2 | 声子分支和自由能归一化 |
| 立方常规胞 | 8 | 明确a、b、c晶轴,生成晶格长度采样 |
| 原子力超胞 | 16 | 计算位移后的原子受力 |
常规胞不是声子超胞的同义词。一个2原子原胞有6支声子;换成8原子常规胞描述同一个晶体,不会让原胞物理自由度变成四倍。

2. 查看独立晶格参数#
在初始解压目录,进入一个新的工作目录:
module load phonopy/4.8.3
mkdir manual-strain
cp inputs/v100/conventional-params.yaml manual-strain/reference.yaml
cd manual-strain
phonopy-strain-cells reference.yaml
本例输出立方晶系、空间群227,自由参数只有a,且b=c=a,当前a=5.468926 Å。这里输入的是常规胞数据;同一程序读取斜轴FCC原胞时,会提示需要标准常规胞,不能把原胞矢量长度当作立方晶格常数。
自己准备结构时可以先用:
phonopy-init --symmetry -c POSCAR
ls BPOSCAR PPOSCAR
核对工具实际生成的常规胞和原胞,再以选定晶胞重新准备位移数据。已计算的受力不能仅改一个晶胞矩阵就原样接到新原子顺序上。
3. 生成三个晶格长度#
phonopy-strain-cells reference.yaml \
--a 5.414236653471 5.523615171723 --grid 3
ls unitcell-* strain_cells.yaml
得到三个保持立方对称性的结构unitcell-001至unitcell-003,以及记录范围和文件名的strain_cells.yaml。这里是a的±1%,体积按a³变化;a的±1%不等于体积的±1%。
python - <<'PYCODE'
from phonopy.interface.vasp import read_vasp
for i in range(1,4):
p = read_vasp(f'unitcell-{i:03d}')
print(i, len(p), p.cell[0,0], p.volume)
PYCODE
三个结构各8个Si原子,晶胞体积随a递增。上述--grid 3只生成几何;需要为每个点真正计算静态能量和声子,才可研究热膨胀。
4. 三点演示网格与五个真实体积不要混用#
资料包QHA使用的是既有五个体积:96%、98%、100%、102%、104%的参考原胞体积。它们对应的晶格常数为a0×(V/V0)^(1/3),不是a0×0.96至a0×1.04。本节新生成的三个±1%晶格点只是操作演示,没有把它们冒充成那五份计算。
自己重新计算时,先统一结构、超胞矩阵、位移幅度、原子顺序、电子精度与势文件,再给每个点单独生成位移并计算力。不同网格点的输出要成对整理,不能拿一个体积的力配另一个体积的静态能量。
5. 已有16原子数据如何对应常规胞#
原来的16原子超胞是2×2×2 Si原胞。相对于8原子立方常规胞,同一个物理超胞的矩阵可写为:
0 1 1
1 0 1
1 1 0
它的行列式为2,所以仍是16原子。资料包中的conventional-params.yaml经过晶胞和周期位置逐一对应,原子的力、位移原子编号随相同排列重排;没有插值或新造原子力。自己处理一般材料时,优先从目标常规胞重新准备计算;不要只照抄这个仅适合本例的矩阵。
6. 能量到底是每胞还是每原子#
本例静态VASP输入是2Si原胞,总能量按该原胞给出;声子自由能也按2Si原胞。常规胞体积是原胞的4倍,热膨胀输出中的a,b,c是常规晶格长度,volume-temperature.dat则给出原胞体积,因此本例满足V=a³/4。
不同晶胞之间的总能量和自由能必须统一归一化后相加。更多实际操作见原生QHA热膨胀流程,其他格式和长度单位见Phonopy特殊结构转换。