dpdata读取VASP、ABACUS、CP2K和LAMMPS
用真实计算结果核对能量、力、元素类型、单位和坐标旋转。
阅读本篇目录
下载本篇输入、完整脚本、数据与高清图。解压后在新目录运行,reference保存鸢算科技实际运行的参考结果。
1 环境、输入和运行#
本例使用已有GPUMDkit环境中的dpdata 1.1.0及ASE进行数据整理,CPU即可运行。它将不同程序的结构、能量、力等整理为统一字段,不重新计算电子结构。
下载包包含9组真实Si双原子VASP输出、ABACUS Si输出、CP2K水分子输出以及从真实水轨迹导出的LAMMPS坐标。运行全部示例:
bash run.sh
只运行dpdata:
mkdir dpdata
cp -a inputs/dpdata dpdata/input
cp dpdata_examples.py dpdata/
cd dpdata
/public/toolkit/miniconda3/envs/gpumdkit-1.5.8/bin/python dpdata_examples.py
下载包没有POTCAR、波函数和许可程序;读取这些文本结果不需要重跑VASP。
2 读VASP:统一单位并核对坐标系#
import dpdata
s = dpdata.LabeledSystem('input/vasp/si-mode-+0.000/OUTCAR',
fmt='vasp/outcar')
print(s['energies'], s['forces'], s['cells'])
s.to('deepmd/npy', 'si-data')
LabeledSystem包含结构以及真实能量、力标签。dpdata常用坐标/晶胞单位Å、能量eV、力eV/Å、virial eV。本次未位移Si双原子总能 −10.84830721 eV,晶胞体积 40.89273222 ų;9个正负位移条件的总能范围为−10.84830721至−10.23029405 eV。

读取VASP时可能将晶胞旋转为下三角形式,力和坐标也随之旋转;不能只按原始x/y/z分量逐项相减就判定数据错误。配套脚本从原OUTCAR晶胞求旋转矩阵,验证其正交性后再比较力,并单独核对总能。
图中最大力分量是转换后坐标系中的分量,不是坐标无关的力模长。能量曲线仅用于演示真实标签提取,这9个相近位移不是覆盖全部Si相态的训练集。
3 读ABACUS#
s = dpdata.LabeledSystem('input/abacus', fmt='abacus/scf')
print(s['atom_names'], s['energies'], s['forces'])
s.to('deepmd/npy', 'abacus-data')
输入目录保留INPUT、STRU、KPT及OUT.tutorial/running_scf.log。本次2个Si的总能为 −211.92096574 eV,与原日志!FINAL_ETOT_IS一致。
ABACUS和VASP使用的赝势及能量基准可以不同,不能把两者的绝对能量直接比较,也不要未经统一计算设置就混成同一训练标签。
4 读LAMMPS坐标#
s = dpdata.System('input/lammps/water.dump',
fmt='lammps/dump', type_map=['O','H'])
print(s['atom_names'], s['atom_numbs'])
类型1对应O、类型2对应H,得到884个O和1768个H。该dump没有能量或力,所以使用System,不会自动产生DFT标签。类型表必须与你的LAMMPS输入一致,不能按元素字母顺序猜。
5 CP2K新版文本输出的转换桥接#
本次CP2K 2026.2使用FORCES|布局,与dpdata内置旧cp2k/output读取器预期不同。下载包cp2k()明确解析单帧ENERGY_FORCE的坐标、晶胞、能量与力,再通过ASE传给dpdata:
from ase.calculators.singlepoint import SinglePointCalculator
atom.calc = SinglePointCalculator(atom, energy=energy_eV, forces=forces_eV_A)
s = dpdata.LabeledSystem(atom, fmt='ase/structure')
s.to('extxyz', 'water.xyz')
atom和两个标签由下载包中完整解析代码生成;能量Hartree乘27.211386245988,力Hartree/Bohr乘27.211386245988/0.529177210903。3原子水的 −17.2195707301 Hartree转换为 −468.5683901277 eV,最大力分量为 0.727597 eV/Å。
这个桥接仅支持所示单帧、非周期的2026.2布局,并保留非周期属性;缺少应力时不会补造virial。更换CP2K版本或处理MD、结构优化多帧时,应改用匹配的读取器或扩展解析后逐帧核对。
参考:dpdata的数据模型与格式。在线文档可能包含本地1.1.0之后新增的插件,实际以加载环境为准。