GPUMD专题

VASP数据转NEP:能量、力与virial

Si16实际VASP标签,用ASE导出能量、力和整胞virial,明确应力符号、单位和分组方法。

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

NEP训练前,先确认标签物理含义和单位。本篇使用鸢算科技集群既有25个Si16 VASP实算结果,展示能量、力、应力到NEP扩展XYZ的转换。下载导出数据、模型和全部脚本;包内已含可训练的XYZ,不需要重新计算VASP。

1. 原始体系与VASP输入#

25帧均为16原子Si:1帧静态结构,加3个标称温度组、4个位移方向及正负位移共24帧。温度组是生成位移的标签,不是声称已运行充分平衡的有限温度轨迹。原始VASP输入用PBE/PAW、550eV截断、4×4×4 Gamma网格、电子收敛1E-6,均为静态电子计算。

静态参考的POSCAR:

generated by phonopy
   1.0
     0.0000000000000000    5.4689259125969842    5.4689259125969842
     5.4689259125969842    0.0000000000000000    5.4689259125969842
     5.4689259125969842    5.4689259125969842    0.0000000000000000
Si
  16
Direct
  0.0000000000000000  0.0000000000000000  0.0000000000000000
  0.5000000000000000  0.0000000000000000  0.0000000000000000
  0.0000000000000000  0.5000000000000000  0.0000000000000000
  0.5000000000000000  0.5000000000000000  0.0000000000000000
  0.0000000000000000  0.0000000000000000  0.5000000000000000
  0.5000000000000000  0.0000000000000000  0.5000000000000000
  0.0000000000000000  0.5000000000000000  0.5000000000000000
  0.5000000000000000  0.5000000000000000  0.5000000000000000
  0.1250000000000000  0.1250000000000000  0.1250000000000000
  0.6250000000000000  0.1250000000000000  0.1250000000000000
  0.1250000000000000  0.6250000000000000  0.1250000000000000
  0.6250000000000000  0.6250000000000000  0.1250000000000000
  0.1250000000000000  0.1250000000000000  0.6250000000000000
  0.6250000000000000  0.1250000000000000  0.6250000000000000
  0.1250000000000000  0.6250000000000000  0.6250000000000000
  0.6250000000000000  0.6250000000000000  0.6250000000000000

INCAR:

SYSTEM = si-thermal-static
ENCUT = 550
PREC = Accurate
EDIFF = 1E-6
NSW = 0
IBRION = -1
ISMEAR = 0
SIGMA = 0.05
ISYM = 0
LREAL = .FALSE.
LASPH = .TRUE.
LWAVE = .FALSE.
LCHARG = .FALSE.
NELM = 150
ALGO = Normal
NBANDS = 48

KPOINTS:

Gamma mesh
0
Gamma
4 4 4
0 0 0

NSW=0和IBRION=-1表示固定原子坐标求能量/力/应力,不做原子优化。用于生成标签的结构应覆盖目标温度、形变和环境范围;不要把每个扰动都先优化回同一个极小值。POTCAR使用与PBE/PAW一致、具有合法授权的Si势,不随附件分发。本数据保留原VASP任务结果,不重新拼接不同精度来源。

2. ASE提取的核心操作#

在拥有VASP结果的目录中:

module load ase/3.29.0
python - <<'PYTHON'
from ase.io import read
atoms = read('vasprun.xml', index=-1)
energy = atoms.get_potential_energy(force_consistent=True)
forces = atoms.get_forces()
stress = atoms.get_stress(voigt=False)
virial = -stress * atoms.get_volume()
print('Energy F / eV:', energy)
print('Forces / eV Angstrom:', forces)
print('Whole-cell virial / eV:', virial)
PYTHON

这里取VASP力一致的自由能F,不要不加说明换成外推到零展宽的能量。ASE应力是张应力为正,单位eV/ų;W=-Vσ得到整胞virial,单位eV。VASP原始应力通常以kbar、压缩为正输出,不能把这些数字直接当virial。

字段 输入XYZ含义 常见错误
energy 整个构型的总能量,eV 写成每原子能量
force 每个原子的三个力分量,eV/Å 误写成坐标或梯度
virial 整胞张量,eV 直接填GPa/kbar,或提前除原子数
Lattice 晶胞矢量,Å 单位与坐标不一致

3. 查看实际导出的数据#

unzip gpumd-nep-virial-wave210.zip -d nep-Si
cd nep-Si
head -n 5 data/training.xyz
python3 - <<'PYTHON'
import json
d = json.load(open('data/LABELS.json'))
print(d['splits'])
r = d['records'][0]
print(r['case'], r['free_energy_eV'], r['volume_A3'])
print(r['virial_cell_eV'])
PYTHON

data/中三份XYZ保留完整精度标签,LABELS.json保留来源帧、符号/单位和分组信息。头部包含energy=... virial="9个张量分量" Lattice="9个晶胞分量" Properties=species:S:1:pos:R:3:force:R:3,后面每行是元素、xyz坐标、xyz力。

实际Si16晶胞与按位移方向划分的13/6/6数据

13帧训练包括静态帧及方向0/1;6帧验证为方向2,6帧独立测试为方向3。各方向的不同温度和正负位移放在同一组,避免高度相关结构跨组。

如果已有本例同名的25个完整VASP结果,可重新导出:

module load ase/3.29.0
python export_vasp_example.py --vasp-dir /path/to/vasp-results --output my-derived-data
ls my-derived-data

该脚本专用于本Si16示例,会检查原子数、原EDIFF、XML与OUTCAR的应力,以及ASE转换的符号和单位;换体系时需调整这些条件。附件不提供原始XML/OUTCAR或POTCAR,已有导出数据可直接继续联合训练。

4. 这个数据集能说明什么#

它可以演示E/F/V标签导出、按方向分组以及联合训练,但所有帧采用同一体积晶胞,不能据此证明势能描述体积变化、状态方程、NPT或大应变过程。实际项目应补充对应体积、形变、缺陷和高温环境,再评价外推范围。

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

查看配图

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

100%查看原图 ↗