GPUMDkit 从 ABACUS 制作能量力训练集
用实际位移Si、水分子及MD输出说明原始坐标基准、晶格单位和逐帧标签。
阅读本篇目录
下载原始输入输出、转换脚本与绘图资料包。解压进入目录,inputs 是原始参考输入,reference 是实际结果。bash run.sh all 只做转换与检查,不重新启动 DFT;每次在 work 新建目录,LAST-RUN.txt 记录位置。下面独立示例均从资料包根目录开始。
哪些文件必须放在一起#
保留同一份计算的 INPUT、STRU、OUT.suffix。SCF 与 MD 菜单读取原始结果,输出 NEP 的能量、力和可用 virial;不把缺少的标签补成零。
本篇有五个实际来源:2 原子 Si 基准 SCF、2 原子位移 Si SCF、3 原子 H₂O SCF、31 帧 Si NVE 和21 帧短 NPT 输出。位移 Si 与水的标签是本批在集群新计算的,其余使用既有实算结果。

1. 位移 Si 输入长什么样#
本例 STRU:
ATOMIC_SPECIES
Si 28.0855 Si_ONCV_PBE-1.0.upf
NUMERICAL_ORBITAL
Si_gga_8au_100Ry_2s2p1d.orb
LATTICE_CONSTANT
10.26
LATTICE_VECTORS
0 0.5 0.5
0.5 0 0.5
0.5 0.5 0
ATOMIC_POSITIONS
Direct
Si
0.0
2
0 0 0 1 1 1
0.26 0.25 0.25 1 1 1
INPUT:
INPUT_PARAMETERS
suffix tutorial
calculation scf
basis_type pw
ecutwfc 40
scf_thr 1e-8
scf_nmax 150
ks_solver cg
device gpu
precision double
cal_force 1
cal_stress 1
pseudo_dir ./PP_ORB
orbital_dir ./PP_ORB
out_chg 0
out_pot 0
out_wfc_pw 0
pseudo_dir 与 orbital_dir 要指向自己的文件目录。包内 PP_ORB 提供与原例一致、已公开的选定官方文件;源信息与许可保留在其中。
使用 abacus/3.10.1-p100:GNU 13.3、HPC-X 2.50、OpenBLAS 0.3.30、CUDA 12.8。要自己计算,在已分配资源的工作副本中运行:
module purge
module load abacus/3.10.1-p100
export OMP_NUM_THREADS=2
mpirun -np 1 abacus > stdout.log
下载包的 compute.sbatch 可在新目录重算本批四个小 DFT 条件,不覆盖 inputs 中的参考输出。
2. 从 SCF 结果开始转换#
资料包根目录:
module purge
module load gpumdkit/1.5.8
mkdir my-abacus-scf
cp -r inputs/abacus-displaced my-abacus-scf/source
cd my-abacus-scf
gpumdkit.sh
输入 1 格式转换 → 104 ABACUS → 1 SCF → source。完成后 0 返回、0 退出。
head -n 4 NEPdataset/train.xyz
得到 1 个两原子构型,本例总能量约 −211.91230551 eV,最大原子力分量约 0.307704 eV/Å。它是未优化的位移结构,非零力正是这里要保存的标签。
输出保持原始 STRU 的晶胞与方向。不要先把结构用 CIF 工具重新定向,再直接拼接原日志里的力与应力;这些张量也有方向基准。
3. 多元素数据也要核对顺序#
独立使用 inputs/abacus-water,按同样的 SCF 菜单操作。这个真空盒 H₂O 输入依次为 H、H、O,输出应保留对应三行力。
实际结果总能量约 −466.12259888 eV,最大力分量约 0.858696 eV/Å。这是一个给定几何的 SCF 标签点,没有将它解释为已经优化的水分子结构。
4. MD 选择另一条菜单#
从资料包根目录准备:
mkdir my-abacus-md
cp -r inputs/abacus-md my-abacus-md/source
cd my-abacus-md
gpumdkit.sh
选择 1 → 104 → 2 MD → source。原目录需要包含 OUT.tutorial/running_md.log、MD_dump,以及配套 INPUT、STRU。
head -n 4 NEPdataset/train.xyz
cat NEPdataset/frame-map.json
本例得到 31 帧,包括完整初始帧。frame-map.json 记录输出帧序号与来源。NPT 输入 inputs/abacus-npt 用相同菜单,得到 21 帧;每一帧使用该帧写出的晶胞。
这两段短输出写出的体积均约 40.0115 ų,本例 NPT 段未出现可见的写出体积变化,不据此判断压力已经平衡。这里演示的是忠实读取每一帧数据。
5. 晶格单位与 virial#
MD_dump 中的 LATTICE_VECTORS 可以是以晶格常数为单位的数值。例如 0 0.5 0.5 还要乘这一帧 LATTICE_CONSTANT,才能得到 Å。
本例晶格常数约 5.429356 Å,因此向量分量为 0 2.714678 2.714678 Å。应力/virial 从 kbar 与实际晶胞体积换算,不能拿无量纲约化向量的行列式当 ų。
当前模块使用已配套的 dpdata 1.1.0,保持原始方向并按逐帧晶胞输出 E/F/virial。缺少 virial 时省略该可选字段;缺少能量或力、不收敛、已有 NEPdataset 时会停止并提示。重复转换请换新目录。
本入口不自动附加电荷、BEC 或自旋标签。标签规范与后续格式转换见数据检查与 DeepMD 衔接。