GPUMDkit MTP CFG 标签转换
从真实DFT标签生成的CFG出发,核对零起点类型、六分量PlusStress和九分量virial。
阅读本篇目录
下载本组输入、真实参考输出与绘图脚本,解压后进入资料包根目录。所有示例在自己的新目录执行,inputs和reference保留。默认bash run.sh all只做工具处理;需要重新训练时才提交compute.sbatch。
先明确这一步做什么#
CFG是结构和标签的文件格式。本例将已在集群计算的九组Si自洽标签、Si非正交晶胞单点和H₂O单点转写为CFG,再用GPUMDkit转回extxyz,检查E/F/virial。没有运行MTP拟合,也不需要安装MLIP。
加载gpumdkit/1.5.8:集群配套Python3.11.16、ASE和NumPy;本篇使用2026-10-28兼容读取路径。菜单为1→102,也可以直接调用原生脚本。
第一步:看输入#
在资料包根目录执行:
module load gpumdkit/1.5.8
head -n 18 inputs/mtp/si-permuted.cfg
Si示例为2个原子,原子力与晶胞均来自实际ABACUS自洽结果。标准CFG的核心字段如下;完整输入以附件为准:
BEGIN_CFG
Size
2
Supercell
0 2.71467909193239 2.71467909193239
2.71467909193239 0 2.71467909193239
2.71467909193239 2.71467909193239 0
AtomData: id type cartes_x cartes_y cartes_z fx fy fz
1 0 0 0 0 -0.09277457 0.3077037807 0.3077037807
2 0 1.35733954597 1.38448633689 1.38448633689 0.09277457 -0.3077037807 -0.3077037807
Energy
-211.91230551
PlusStress: xx yy zz yz xz xy
2.452925213033688 2.463440874408839 2.463440874408839 0.0118098664884063 -0.4072400027674142 -0.4072400027674142
END_CFG
id从1计数;type从0计数。转换参数中的第一个元素对应type0,第二个对应type1。本组水数据原始原子顺序为H/H/O,但类型表选O H:O为0,H为1,不能按原子出现顺序随意交换参数。
第二步:转换#
mkdir -p work/mtp-si
cd work/mtp-si
python "$GPUMDkit_path/Scripts/format_conversion/mtp2xyz.py" \
../../inputs/mtp/si-standard.cfg Si
head -n 4 XYZ/mtp2xyz.xyz
输出为9帧,每帧2个Si。重新执行时使用新目录;已有XYZ/mtp2xyz.xyz受到保护。
水例在资料包根目录另开一个目录:
mkdir -p work/mtp-water
cd work/mtp-water
python "$GPUMDkit_path/Scripts/format_conversion/mtp2xyz.py" \
../../inputs/mtp/water.cfg O H
输出仍按原始H/H/O原子顺序写出,元素参数描述的是类型表,不是对原子重新排序。
第三步:核对单位和张量#
本例PlusStress使用每构型eV的广延张量,不是GPa,也不是eV/ų。标准六分量顺序是xx yy zz yz xz xy;读取时按列名定位,因此si-permuted.cfg特意调整了列顺序,也能保持同一物理张量。此约定可对照MLIP原始CFG读取和写出实现。
转出的virial为对称3×3张量,九分量按行展开。Si非正交晶胞保持原始方向,不能只转晶胞、不转力和张量。

python - <<'ASE'
from ase.io import read
a = read("XYZ/mtp2xyz.xyz")
print(a.get_chemical_symbols())
print(a.get_volume())
print(a.info["virial"])
print(a.arrays.get("force", a.arrays.get("forces")))
ASE
缺字段时怎么处理#
本组还包含force-first.cfg:力列放在首列,读取仍按列名。missing-virial.cfg没有virial,但E/F完整,输出省略该字段;不补零。missing-force.cfg不能作为完整能量—力训练数据,转换会拒绝。
本篇不自动解释其他软件使用的Stress:或Virial:变体。先明确其单位、符号和是否已经乘体积,再转为明确的PlusStress。缺少原子分项能量site_en是正常的,不能用原子编号或总能量平均值冒充分项DFT能量。