hiPhive 导出与下游计算接口
实际读写Phonopy、phono3py、ShengBTE和GPUMD格式,保留晶胞及原子对应。
阅读本篇目录
hiPhive模型拟合后,还要把张量、晶胞、原子顺序和单位交给下游软件。本篇使用同一个Si16模型,实际导出并读取四类格式,帮助确认每个文件的作用。
1. 一次完成XYZ拟合与四种导出#
在新解压目录:
sbatch labels.slurm
这条独立工作流会创建 labels-fit/,从真实XYZ标签拟合三阶模型,导出文件,再在一张P100上做一次FCP静态检查,并调用Phonopy和phono3py实际读取。已有GPU任务资源时可用 bash labels-fit.sh。labels-fit/ 已存在则停止,重新运行用新的解压目录。
2. 导出文件分别给谁#
| 文件 | 下游用途 | 本例实际做过什么 |
|---|---|---|
| FORCE_CONSTANTS | Phonopy二阶文本 | 原生解析器读取、比较全部张量、计算Γ点 |
| fc2.hdf5 | Phonopy二阶HDF5 | 原生读取并与模型比较 |
| fc3.hdf5 | phono3py三阶HDF5 | 原生读取并比较全部张量 |
| FORCE_CONSTANTS_3RD | ShengBTE三阶文本 | hiPhive重新读回并比较三阶耦合 |
| gpumd/r0.in等 | GPUMD FCP | 原生GPU静态能量与力 |
ShengBTE这一项完成的是格式导出和读回,没有在本篇运行ShengBTE热导求解;phono3py也没有计算三阶散射率或热导。
3. 查看实际导出调用#
from hiphive import ForceConstants
fcs = ForceConstants.read('labels-fit/force-constants.fcs')
fcs.write_to_phonopy('FORCE_CONSTANTS', format='text')
fcs.write_to_phonopy('fc2.hdf5', format='hdf5')
fcs.write_to_phono3py('fc3.hdf5')
GPUMD所需的二、三阶表分别导出:
for order in (2, 3):
fcs.write_to_GPUMD(f'fcs_order{order}.in',
f'clusters_order{order}.in', order=order)
r0.in 另外用参考结构的位置写出。ShengBTE导出需要与力常数对应的原胞:
from hiphive import ClusterSpace
cs = ClusterSpace.read('labels-fit/cluster-space.cs')
fcs.write_to_shengBTE('FORCE_CONSTANTS_3RD', cs.primitive_structure)
完整脚本会自动放到正确目录。API与文件约定见hiPhive ForceConstants说明。
4. 用安装好的下游工具读取#
module purge
module load phonopy/4.8.3
python read_exports.py labels-fit fc2
cat labels-fit/READ-fc2.json
module purge
module load phono3py/4.8.2
python read_exports.py labels-fit fc3
cat labels-fit/READ-fc3.json
读取脚本按坐标匹配Phonopy生成的超胞顺序,再对力常数的原子索引进行同样排列。不能只看原子数相等就忽略顺序。下载包的 labels-fit.sh 已调用本集群对应版本的独立环境,不需要在同一个Python环境里强行混装所有工具。
本例Phonopy实际得到2原子的原胞、6个Γ点频率:三个声学模约为−1.43×10⁻⁷、0、2.78×10⁻⁷THz,三个光学模约16.26056THz。接近零的声学数值包含浮点舍入;它们不能证明整个布里渊区无虚频。
Phonopy二阶文本最大读回差约4.44×10⁻¹⁶,HDF5二阶、三阶读回差为0;ShengBTE三阶文本最大读回差约3.64×10⁻¹¹。GPUMD静态力相对独立多项式最大差约5.32×10⁻⁶eV/Å。格式一致与物理模型准确是两个问题,后者仍看独立留出误差。

5. 只核对随包的现成导出结果#
module load hiphive/1.5
python verify_labels.py
默认读取 reference-labels/,检查真实力标签、拟合分组、张量读写和既有GPUMD输出,再调用两个下游读取器;不重新拟合、不启动GPU计算。检查自己完整生成的XYZ结果则用 python verify_labels.py labels-fit。若更换材料或数据,需要相应调整这个Si示例专用检查器,不能用它的固定数字判断任意材料。
下载与完整运行#
下载输入、真实力数据、参考输出和全部绘图脚本,解压到自己的工作目录。先重画随包结果,不重新计算:
bash analyze.sh
输出在 reference/analysis/ 和 reference/figures/。在新解压目录提交完整的两种hiPhive拟合、7组层状结构和44组FCP条件:
sbatch run.slurm
默认一张P100、一个CPU核、30分钟,分区为 gpu-8p100-hs;GPU套餐用户按自己的权限改为例如 gpu-8p100-tc。需要按条件并行提交时:
bash submit.sh
这会生成带依赖的拟合、51个条件和分析作业。只生成脚本用 bash submit.sh --dry-run。全部结束后查看 work/analysis/ 和 work/figures/,或重新分析:
bash analyze.sh work work-fcp fit
bash fit.sh 是CPU拟合入口,bash run.sh 条件名 是已经分配计算资源后的单例入口;不要在登录节点直接启动GPUMD。拟合脚本不覆盖已有 fit/,计算也不覆盖已有结果;重新计算整套请重新解压。单例完成后可以直接查看输出,统一分析需要整套条件齐全。
本例使用GPUMD5.9.1 P100构建(GCC13.3、CUDA12.9)、hiPhive1.5及ASE环境,读取导出文件使用Phonopy4.8.3、phono3py4.8.2。入口脚本会加载对应模块或已安装的工具环境。当前示例是短小的操作参考,不代替势函数、超胞、截断、位移幅度与采样的收敛检查。
截断、温度与晶格热输运实例#
hiPhive截断与阶数、正则化与独立验证、有限温度力常数提供Si64 NEP标签的完整短轨迹和拟合;ShengBTE专题则用已有真实ABACUS力常数演示RTA/迭代、数值参数、同位素、纳米线、寿命/MFP及Wigner输出。两类数据来源分开说明,终端输入、真实图和下载包配套,有限模型与短采样不作收敛材料性质或性能排名。