Phonopy 势函数结构优化与重新建模
实际优化一个扰动Si原胞,明确固定晶胞与原子优化,以及如何把优化结构传给新的声子计算。
阅读本篇目录
下载原生QHA、随机位移与结构优化实例包,在普通账号已分配的CPU资源中运行:
unzip phonopy-qha-random-relax-wave247.zip -d phonopy-practical
cd phonopy-practical
bash setup.sh
bash run.sh
setup.sh创建本目录个人.env,需要联网下载固定版本的conda-forge Linux x86_64包;公共模块不变。环境为Phonopy4.8.3、Python3.11.18、NumPy2.4.6、pypolymlp0.22.1和symfc1.7.3,实际预编译C/C++运行库libgcc/libstdcxx16.2.0。绘图另用集群phonopy/4.8.3模块。所有计算使用1个CPU线程,不需要GPU,不启动DFT。
一键流程输出source/、analysis/和figures/;已有结果目录不覆盖,重新练习请换新的解压目录。以下手动命令都放在独立新目录,便于自己修改参数。
1 固定晶胞,只优化原子位置#
本例使用小型多项式势,将2Si原胞中一个Si沿笛卡尔x方向移动0.04 Å。该势来自NEP标签拟合,本节也是势函数计算,不是DFT结构优化。
cat source/POSCAR-perturbed
cat source/POSCAR-relaxed
扰动后的实际输入:
generated by phonopy
1.0
0.0 2.715 2.715
2.715 0.0 2.715
2.715 2.715 0.0
Si
2
Direct
0.0 0.0 0.0
0.2426335174953959 0.2573664825046040 0.2573664825046040
原胞基矢不正交,所以沿笛卡尔x移动,不是只给某个分数坐标加0.04。
本节固定全部晶胞参数,只优化内部原子位置;它不是晶胞优化。结果文件中的晶胞与初始完全相同,不能据此声称找到了该势的零压平衡晶格常数。
2 原生relax参数的行为#
cat source/native-relax/native.out
run.py运行--pypolymlp --relax-atomic-positions -d。当前版本会显示优化后原子坐标,同时明确提示:
Note: This unit cell is not used in phonon calculations.
因此,一条命令里出现优化参数和声子参数,并不意味着后者已经使用优化后的结构。看到了优化输出后,还需要明确传递新结构。
3 把返回的结构保存,再建立新Phonopy对象#
本例脚本实际采用:
from phonopy import Phonopy
from phonopy.interface.pypolymlp import relax_atomic_positions
from phonopy.interface.vasp import write_vasp
relaxed = relax_atomic_positions(unitcell, model, gtol=1e-4)
write_vasp("POSCAR-relaxed", relaxed)
new_phonon = Phonopy(relaxed, [2, 2, 2], primitive_matrix=primitive_matrix)
new_phonon.save("relaxed.yaml")
relaxed为返回的新原胞;随后在新工作目录中,复制模型并用relaxed.yaml调用原生--pypolymlp -d重新求力、拟合力常数。run.py已把这几步连接起来,不需要自己从日志抄坐标。
ls source/relaxed.yaml source/relaxed-phonons/qpoints.yaml
cat analysis/relaxation.csv
4 实际能量和力的变化#
| 阶段 | 能量/eV·(2Si)⁻¹ | 最大力分量/eV·Å⁻¹ |
|---|---|---|
| 初始扰动 | −9.242522354 | 0.48645869 |
| 优化后 | −9.252253269 | 5.96×10⁻⁹ |
能量降低约9.73092 meV/2Si。这里的力阈值gtol=1e-4是该势优化器使用的设置,结果中的最大分量明显更小;表格不是DFT误差或不同节点的性能实测。

对于自己的材料,要先确认势的训练范围覆盖该晶胞和位移。优化后若原子跨过周期边界,比较周期距离和相对结构,不要仅看某个分数坐标从0附近变成1附近。
需要同时研究晶胞体积随温度变化时,看QHA状态方程与压力;需要有限温度势采样时看MLP与SSCHA。接口来源见Phonopy官方MLP说明。