Phonopy专题

Phonopy 文件格式与原生命令

实操QPOINTS、HDF5能带、紧凑力常数、原子质量和磁矩元数据,说明读写数据时的常见边界。

更新于 2026-11-06约 5 分钟阅读按任务与环境选择适用配置
阅读本篇目录

下载本节数值输入、脚本与绘图程序,在自己的CPU工作目录运行:

unzip phonopy-dsf-dos-nac-files-wave249.zip -d phonopy-practice
cd phonopy-practice
bash setup.sh
bash run.sh

setup.sh联网创建本目录个人.env,安装固定的Linux x86_64预编译环境,并下载、校验ASE3.29.0的纯Python包到extras/。不改公共模块或用户全局Python。环境包含Phonopy4.8.3、Python3.11.18、NumPy2.4.6、symfc1.7.3、pypolymlp0.22.1;C/C++运行库为libgcc/libstdcxx16.2.0,绘图使用集群phonopy/4.8.3模块。流程单线程运行,不需要GPU,也不启动新的DFT。

source/保存原生命令结果,analysis/、dsf/、xray/、debye-windows/保存提取数据,figures/保存四张高清图。为保护已有结果,重复练习请换新目录解压。下面手动操作都另建工作目录。

1 从已有力常数开始#

本例Si输入来自集群实际VASP6.5.1 CPU版的16原子DFPT计算:450 eV、2×2×2电子k网格、EDIFF=1E-6。保留原始力常数,不额外施加声学和规则或把Γ附近微小负频率改成零。小网格适合演示操作,不代表材料参数已收敛。

ls inputs/Si-geometry.yaml inputs/Si-FORCE_CONSTANTS
cat source/Si.yaml | head -n 24

程序把结构与原始数值组合成source/Si.yaml。phonopy和phonopy-load都可读取这类包含力常数的YAML;普通的结构文件本身不能替代力常数。

2 用文件指定q点#

mkdir manual-qpoints
cd manual-qpoints
cat > QPOINTS <<'EOF'
2
0.25 0 0
0.5 0 0
EOF
../.env/bin/phonopy ../source/Si.yaml --read-qpoints \
  --eigvecs --writedm --qpoints-format hdf5 --no-fc-symmetry
ls qpoints.hdf5
cd ..

第一行是q点数,随后是声子原胞倒易基矢下的约化坐标。--eigvecs输出本征矢,--writedm同时保存动力学矩阵。别把VASP电子KPOINTS的网格当成这里的声子q点。

原生别名的等价用法也在本例实际运行:

mkdir manual-load
cd manual-load
../.env/bin/phonopy-load ../source/Si.yaml --qpoints '0.25 0 0' \
  --eigvecs --writedm --qpoints-format hdf5 --no-fc-symmetry
cd ..

3 连接能带、恒定采样间隔和HDF5填充#

mkdir manual-band
cd manual-band
../.env/bin/phonopy ../source/Si.yaml --no-fc-symmetry \
  --band '0 0 0 0.5 0 0.5 0.5 0.5 0.5' --band-labels 'G X L' \
  --band-points 11 --band-connection --band-const-interval --band-format hdf5
cd ..

这里的标签只用于标识输入的三个坐标;路径需根据自己的原胞和晶体对称性生成。--band-connection依据本征矢重叠连接分支,交叉或简并附近不要仅靠每个q点重新按频率排序来追踪某一支。

本例两段有效点数分别是11和10,但HDF5的矩形数组为2×11。第二段最后一行是存储填充,不能当作物理零频率或额外Γ点。

import h5py
with h5py.File("source/band-HDF5/band.hdf5") as h:
    for i, n in enumerate(h["segment_nqpoint"][:]):
        q = h["path"][i, :int(n)]
        frequency = h["frequency"][i, :int(n)]
        print(i, len(q), frequency.shape)

按每段实际点数读取能带,灰色格是填充位置

4 紧凑与完整力常数#

mkdir manual-fc
cd manual-fc
../.env/bin/phonopy ../source/Si.yaml --no-fc-symmetry --hdf5 \
  --hdf5-compression none --writefc --writefc-format hdf5 \
  --include-all --sp --qpoints '0.25 0 0'
cd ..

本例紧凑力常数为(2,16,3,3),完整形式为(16,16,3,3)。前者第一轴是原胞原子,不要再拿超胞索引去索引它;HDF5中的p2s_map用于映射。两者都能表达同一个谐模型,尺寸小不等于丢了某些振动分支。

需要截断或空间群对称化时,包中的source/FC-cutoff/演示--fc-spg-symmetry --cutoff-radius 4.2 --full-fc --writefc,距离单位Å。截断会改变模型,不能代替超胞收敛测试,也不自动保证截断后的声学和规则。

5 改质量时,让全部结构元数据一致#

mass_consistent.py将Si从输入的28.0855统一改成ASE查表的28.085,并把单位胞、超胞和原胞的磁矩一致设为0,再保留同一原始力常数。统一质量改变后,频率按√(28.0855/28.085)缩放。

cat mass_consistent.py
ls mass-ASE-consistent

仅给命令增加--mass-ase-iupac2016,同时继续读含旧质量的超胞元数据,可能造成结构不一致。磁矩None与显式的0在元数据核对中也有区别。应重建一致输入,而不是随意关闭检查。

当前版本--rust已是弃用兼容参数,不用它宣称切换了计算后端。后端精度操作看后端与数值精度,全部入口见命令导航。文件定义参考官方输出文件说明。

需要根据你的体系选择资源?联系讨论计算需求。实际可用软件与权限,以当前账户和运行环境为准。

查看配图

放大后可滚动查看细节,按 Esc 关闭。

100%查看原图 ↗