使用Phonopy的DFPT方法计算声子谱及热力学性质

1598 字
8 分钟
使用Phonopy的DFPT方法计算声子谱及热力学性质

如何使用Phonopy的DFPT计算声子谱和热力学性质#

Phonopy安装#

请务必保证Python版本为3.7或以上,并配置了环境变量(即python3命令可以直接运行)

Phonopy是一个用于计算晶体材料声子谱和热力学性质的Python库。要使用Phonopy进行DFPT(密度泛函微扰理论)计算,首先需要安装Phonopy。可以通过以下命令安装:pip install phonopy 使用以下命令检查Phonopy是否安装成功:

[zhu@mu01 ~]$ phonopy
_
_ __ | |__ ___ _ __ ___ _ __ _ _
| '_ \| '_ \ / _ \| '_ \ / _ \ | '_ \| | | |
| |_) | | | | (_) | | | | (_) || |_) | |_| |
| .__/|_| |_|\___/|_| |_|\___(_) .__/ \__, |
|_| |_| |___/
2.38.2
-------------------------[time 2025-06-26 10:52:53]-------------------------
Compiled with OpenMP support (max 16 threads).
Python version 3.12.3
Spglib version 2.5.0
Supercell matrix (DIM or --dim) was not explicitly specified.
Switched on phonopy-yaml mode.
"phonopy_disp.yaml" or "phonopy.yaml" could not be found.
___ _ __ _ __ ___ _ __
/ _ \ '__| '__/ _ \| '__|
| __/ | | | | (_) | |
\___|_| |_| \___/|_|

如果看到类似上面的输出,说明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文件#

  1. 首先,将优化后的结构保存为POSCAR-unitcell文件。

  2. 创建一个新的目录(如 phonopy-dfpt),并将POSCAR-unitcell文件复制到该目录下。

  3. 使用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)中使用的。

  4. 接下来,使用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计算任务。

三、 计算声子谱#

  1. 首先,需要计算力学常数。在Vasp计算完成之后,确定”vasprun.xml”中存在hessian矩阵(Hessian matrix),这表明力学常数计算成功。那么就可以使用Phonopy提取力学常数。运行如下命令,得到FORCE_CONSTANTS文件:

    Terminal window
    phonopy --fc vasprun.xml
  2. 获取高对称点信息。可以使用VaspKit的305功能生成高对称点信息。Vaspkit会生成一个名为KPATH.phonopy的文件,其中包含了高对称点的信息。将这个文件的名字改为band.conf。这个文件的内容如下:

    NPOINTS = 501
    DIM =
    BAND = 0.000000 0.000000 0.000000 0.000000 0.000000 0.500000 -0.500000 0.500000 0.500000 0.000000 0.000000 0.000000 0.335794 0.335794 -0.335794, -0.335794 0.664206 0.335794 -0.500000 0.500000 0.500000, 0.000000 0.000000 0.500000 0.250000 0.250000 0.250000 0.000000 0.500000 0.000000 0.000000 0.000000 0.000000
    BAND_LABELS = $\Gamma$ X M $\Gamma$ Z Z$_0$ M X P N $\Gamma$
    MP = 30 30 30
    TETRAHEDRON = .TRUE.
    PDOS = 1 2 3 4 5 6 7 8, 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72, 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104
    BAND_CONNECTION = .TRUE.
    FORCE_CONSTANTS = READ
    # FORCE_SETS = READ
    # IRREPS = 0 0 0
    # SHOW_IRREPS = .TRUE.
    # LITTLE_COGROUP = .TRUE.

    将其中的DIM改为你想要的超胞维度(如DIM = 2 2 2,如果不想扩胞,设置为1 1 1),然后就可以进行下一步的计算了

  3. 计算声子谱。运行以下命令:

    Terminal window
    phonopy-load --dim='2 2 2' -c POSCAR-unitcell band.conf

    同样的,--dim参数需要与你的超胞维度一致。计算完成后,会得到band.yaml文件,其中包含了声子谱的计算结果。

绘制声子谱#

Phonopy提供了绘制声子谱的功能。可以使用以下命令绘制声子谱:

Terminal window
phonopy-bandplot -o phonopy-bandplot.jpg

这将生成一个名为phonopy-bandplot.jpg的文件,其中包含了声子谱的图像。但是这个图太过简陋,建议将数据下载到本地进行绘图 以下为一个绘图的Python脚本示例: Phonopy画图示例

计算热力学性质#

Phonopy还可以计算热力学性质,如比热容、熵等。 可以使用以下命令计算热力学性质:

Terminal window
phonopy --dim 2 2 2 -t mesh.conf -c POSCAR-unitcell

同样的,--dim参数需要与你的超胞维度一致。计算完成后,会生成一个名为thermal.yaml的文件,其中包含了热力学性质的计算结果。

错误处理#

存在虚频#

如果在计算声子谱时发现存在虚频,可能是由于以下原因:

  1. 声子谱的计算需要对原胞结构进行高精度的充分优化,否则易出现虚频。可以用如下方式进行优化:

    • 设置INCAR文件中的精度参数
    EDIFF=1E-08
    EDIFFG=1E-3
    • 使用更高的K点网格进行计算,在Vaspkit中设置更低的数值(如0.01)来生成K点网格。K点数字为奇数时貌似不容易出现计算错误现象。

END#

使用Phonopy的DFPT方法计算声子谱及热力学性质
https://www.kaimoe.cn/posts/使用phonopy的dfpt方法计算声子谱及热力学性质/
作者
开萌
发布于
2026-04-05
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
开萌
记录材料计算、科研绘图与开发配置。
分类
标签

目录