使用Phonopy的DFPT方法计算声子谱及热力学性质
如何使用Phonopy的DFPT计算声子谱和热力学性质
Phonopy安装
请务必保证Python版本为3.7或以上,并配置了环境变量(即python3命令可以直接运行)
Phonopy是一个用于计算晶体材料声子谱和热力学性质的Python库。要使用Phonopy进行DFPT(密度泛函微扰理论)计算,首先需要安装Phonopy。可以通过以下命令安装:pip install phonopy
使用以下命令检查Phonopy是否安装成功:
如果看到类似上面的输出,说明Phonopy安装成功。
如果输出是 command not found: phonopy,则说明Phonopy没有安装成功或没有配置环境变量。可以尝试如下命令配置环境变量:export PATH="$PATH:/opt/Python312/bin/",记得将路径替换成你的python安装路径下的bin目录。如果有效,记得将这行命令添加到你的 .bashrc,以便每次登录时自动加载。
Phonopy的DFPT计算
参考官网:VASP-DFPT & phonopy calculation Phonopy支持使用DFPT计算声子谱和热力学性质。以下是使用Phonopy进行DFPT计算的步骤:
一、 准备VASP输入文件
1. 准备POSCAR文件
-
首先,将优化后的结构保存为POSCAR-unitcell文件。
-
创建一个新的目录(如
phonopy-dfpt),并将POSCAR-unitcell文件复制到该目录下。 -
使用Phonopy进行扩胞。扩胞原则:扩胞原则:扩大接近100个原子,超胞晶格大于10A。使用以下命令进行扩胞操作:
Terminal window phonopy -d --dim 2 2 2 -c POSCAR-unitcell其中,
--dim 2 2 2表示将原胞扩展为2x2x2的超胞。 这将生成多个POSCAR文件(如POSCAR-000, POSCAR-001等),每个文件对应一个原子位移。但是这些POSCAR-{number}文件在DFPT计算中并不需要。这些文件是在有限位移法(Finite Displacement Method)中使用的。 -
接下来,使用Phonopy生成
phonopy_disp.yaml文件:Terminal window phonopy --dim 2 2 2 -c POSCAR-unitcell这将生成一个名为
phonopy_disp.yaml的文件,其中包含了超胞的位移信息。
2. 设置INCAR文件
需要使用VASP计算完美超胞的力学常数,要设置IBRION = 8,以下为一个适用于的INCAR文件示例:
PREC = Accurate ENCUT = 500 IBRION = 8 EDIFF = 1.0e-08 IALGO = 38 ISMEAR = 1 SIGMA = 0.2 LREAL = .FALSE. ADDGRID = .TRUE. LWAVE = .FALSE. LCHARG = .FALSE.其他文件
KPOINTS:可以使用Vaspkit生成K点网格,建议使用较高的K点密度(如0.01),以确保计算精度。但是如果K点密度过高,可能会导致计算时间过长以及内存不足等问题。(我尝试过使用0.04,也能算出来结果)POTCAR:使用VASP的POTCAR文件,确保包含所有元素的赝势。
二、 运行VASP计算
按照计算集群的要求,提交VASP计算任务。
三、 计算声子谱
-
首先,需要计算力学常数。在Vasp计算完成之后,确定”vasprun.xml”中存在hessian矩阵(Hessian matrix),这表明力学常数计算成功。那么就可以使用Phonopy提取力学常数。运行如下命令,得到
FORCE_CONSTANTS文件:Terminal window phonopy --fc vasprun.xml -
获取高对称点信息。可以使用VaspKit的305功能生成高对称点信息。Vaspkit会生成一个名为
KPATH.phonopy的文件,其中包含了高对称点的信息。将这个文件的名字改为band.conf。这个文件的内容如下:将其中的DIM改为你想要的超胞维度(如DIM = 2 2 2,如果不想扩胞,设置为1 1 1),然后在最后添加一行:
BAND_FORMAT = HDF5,以便输出HDF5格式的声子谱数据,方便后续绘图使用。这样设置后,Phonopy会在计算完成后生成一个名为
band.hdf5的文件,其中包含了声子谱的数据,可以使用这个文件进行绘图。 -
计算声子谱。运行以下命令:
Terminal window phonopy --dim='2 2 2' -c POSCAR-unitcell band.conf同样的,
--dim参数需要与你的超胞维度一致。计算完成后,会得到band.yaml文件,其中包含了声子谱的计算结果。
绘制声子谱
Phonopy提供了绘制声子谱的功能。可以使用以下命令绘制声子谱:
phonopy-bandplot -o phonopy-bandplot.jpg这将生成一个名为phonopy-bandplot.jpg的文件,其中包含了声子谱的图像。但是这个图太过简陋,如下所示,建议将数据下载到本地进行绘图
以下为一个绘图的Python脚本示例:
计算热力学性质
Phonopy还可以计算热力学性质,如比热容、熵等。 可以使用以下命令计算热力学性质:
phonopy --dim 2 2 2 -t mesh.conf -c POSCAR-unitcell同样的,--dim参数需要与你的超胞维度一致。计算完成后,会生成一个名为thermal.yaml的文件,其中包含了热力学性质的计算结果。
然后,我们可以使用以下命令从thermal.yaml文件中提取热力学性质:
phonopy-propplot --gnuplot thermal_properties.yaml > thermal_properties.dat这将生成一个名为thermal_properties.dat的文件,使用vcsode可以看到这是一个表格,其中包含了热力学性质的数据。我们可以使用这些数据来绘制热力学性质的图像。其中包含了温度、比热容、熵等信息,可以使用这些数据来绘制热力学性质的图像。其中各列的含义如下所示:
| 列名 | 符号 | 单位 | 物理含义 | 公式关系 | 备注 |
|---|---|---|---|---|---|
| temperature | (T) | K | 温度 | — | 计算热力学量的温度点 |
| Free energy | (F) | kJ/mol | Helmholtz 自由能(声子贡献) | (F = U - TS) | 含零点能(ZPE),用于判断稳定性 |
| Entropy | (S) | J/(K·mol) | 熵(振动贡献) | — | 描述无序度,T→0 时趋近 0 |
| Heat capacity | (C_V) | J/(K·mol) | 定容热容 | (C_V = \left(\frac{\partial U}{\partial T}\right)_V) | 高温趋近 Dulong–Petit 极限 |
| Energy | (U) | kJ/mol | 内能(声子贡献) | (U = F + TS) | 包含零点能 + 热激发能 |
错误处理
存在虚频
如果在计算声子谱时发现存在虚频,可能是由于以下原因:
-
声子谱的计算需要对原胞结构进行高精度的充分优化,否则易出现虚频。可以用如下方式进行优化:
- 设置INCAR文件中的精度参数
EDIFF=1E-08EDIFFG=1E-3- 使用更高的K点网格进行计算,在Vaspkit中设置更低的数值(如0.01)来生成K点网格。K点数字为奇数时貌似不容易出现计算错误现象。
END
这篇内容有帮助的话,可以点个赞
当前仅在 www.kaimoe.com 开启。每个浏览器默认只记录一次点赞。
开萌笔记本