Skip to content

🔄 格式转换

格式转换模块用于在常见原子模拟文件格式之间转换,同时提供 group 标签、权重、帧提取等元数据处理功能。

功能简介

本模块在计算材料科学中常用的结构和轨迹文件格式之间进行转换。支持 VASP、LAMMPS、CP2K、ABACUS、CIF、ASE 轨迹和 extxyz 格式。还提供添加 group 标签、权重、提取帧和扩胞等工具。

准备工作

脚本位置: Scripts/format_conversion/

确保已安装 GPUMDkit。安装说明请参见快速入门

支持的格式

  • VASPPOSCARCONTCAROUTCARXDATCAR
  • LAMMPS:data 文件和 dump 轨迹
  • CP2K:输出 log、坐标、力和晶胞文件
  • ABACUS:SCF/MD 输出
  • CIF:晶体结构文件
  • ASE trajectory.traj
  • extxyz:GPUMD 和 NEP 常用的结构格式

交互模式

打开 GPUMDkit:

gpumdkit.sh

选择:

1) Format Conversion

菜单如下:

+-------------------------------------------------------------+
|                   FORMAT CONVERSION TOOLS                   |
+-------------------------------------------------------------+
| 101) VASP to extxyz            106) Add group labels        |
| 102) MTP to extxyz             107) Add weight to extxyz    |
| 103) CP2K to extxyz            108) Extract frame extxyz    |
| 104) ABACUS to extxyz          109) Clean XYZ info          |
| 105) extxyz to POSCAR          110) Replicate structure     |
+-------------------------------------------------------------+
| out2exyz) OUTCAR to extxyz     xdat2exyz) XDATCAR to extxyz |
| pos2exyz) POSCAR to extxyz     pos2lmp)   POSCAR to LAMMPS  |
| cif2pos)  CIF to POSCAR        lmp2exyz)  LAMMPS to extxyz  |
| cif2exyz) CIF to extxyz        traj2exyz) ASE traj to extxyz|
+-------------------------------------------------------------+
| 000) Return to main menu                                    |
+-------------------------------------------------------------+
Input the function number or converter keyword:

每个入口的作用

入口 调用脚本 功能 适用场景
101 out2xyz.sh VASP OUTCAR 转 extxyz,shell 版本 批量转换 VASP 计算目录
102 mtp2xyz.py MTP cfg 转 extxyz 转换 MTP 数据
103 cp2k_log2xyz.py / cp2k2xyz.py CP2K 转 extxyz 可选择 log/inp 路线或 pos/frc/cell 路线
104 abacus2xyz_scf.sh / abacus2xyz_md.sh ABACUS 转 extxyz 转换 ABACUS SCF 或 MD 输出
105 exyz2pos.py extxyz 转 POSCAR 将 extxyz 每一帧写成 POSCAR
106 add_groups.py 添加 group 标签 为 GPUMD 相关流程添加原子分组标签
107 add_weight.py 添加权重 修改训练集结构权重
108 get_frame.py 提取单帧 从 extxyz 轨迹导出某一帧
109 clean_xyz.py 清理 XYZ 信息 删除多余 extxyz 属性
110 replicate.py 扩胞 按倍数或目标原子数扩胞
out2exyz out2exyz.py OUTCAR 转 extxyz,Python 版本 VASP OUTCAR 转换的另一个入口
pos2exyz pos2exyz.py POSCAR 转 extxyz 转换单个结构
cif2pos cif2pos.py CIF 转 POSCAR 从 CIF 准备 VASP 输入
cif2exyz cif2exyz.py CIF 转 extxyz 从 CIF 准备 GPUMDkit 输入
xdat2exyz xdatcar2exyz.py XDATCAR 转 extxyz 转换 VASP MD 轨迹
pos2lmp pos2lmp.py POSCAR 转 LAMMPS data 准备 LAMMPS 输入
lmp2exyz lmp2exyz.py LAMMPS dump 转 extxyz 转换 LAMMPS 轨迹
traj2exyz traj2exyz.py ASE traj 转 extxyz 转换 ASE 轨迹

快速命令表

来源 目标 命令
OUTCAR 目录 extxyz gpumdkit.sh -out2xyz <dir>
OUTCAR 目录 extxyz gpumdkit.sh -out2exyz <dir>
POSCAR extxyz gpumdkit.sh -pos2exyz POSCAR model.xyz
extxyz POSCAR 文件 gpumdkit.sh -exyz2pos train.xyz
XDATCAR extxyz gpumdkit.sh -xdat2exyz XDATCAR dump.xyz
POSCAR LAMMPS data gpumdkit.sh -pos2lmp POSCAR lammps.data
LAMMPS dump extxyz gpumdkit.sh -lmp2exyz dump.lammpstrj Li Y Cl
CIF POSCAR gpumdkit.sh -cif2pos input.cif POSCAR.vasp
CIF extxyz gpumdkit.sh -cif2exyz input.cif model.xyz
ASE traj extxyz gpumdkit.sh -traj2exyz input.traj output.xyz
extxyz clean extxyz gpumdkit.sh -clean_xyz input.xyz clean.xyz

常见例子

转换 VASP 结果

功能: 在目录中搜索 VASP OUTCAR 文件,并将它们转换为单个 extxyz 文件,用于 NEP 训练或分析。

命令行模式:

gpumdkit.sh -out2xyz ./vasp_results/

也可以使用 Python 版本:

gpumdkit.sh -out2exyz ./vasp_results/

交互模式: 在格式转换菜单中选择 101,会看到:

>-------------------------------------------------<
| Calling the script in Scripts/format_conversion |
| Script: out2xyz.sh                              |
| Developer: Yanzhou WANG (yanzhowang@gmail.com)  |
>-------------------------------------------------<
Input the directory containing OUTCARs
Example: ./
------------>>

输出: 包含转换后结构的 extxyz 文件,可用于 NEP 训练或进一步分析。

添加 group 标签

功能: 为结构文件添加原子 group 标签。一些 GPUMD 相关流程需要 group 标签,例如特定元素的 MSD 或扩散性质计算。

命令行模式:

gpumdkit.sh -addgroup POSCAR Li Y Cl

该命令读取输入结构,并写出带 group 信息的 extxyz 文件。

交互模式: 在格式转换菜单中选择 106,会看到:

>-------------------------------------------------<
| Calling the script in Scripts/format_conversion |
| Script: add_groups.py                           |
| Developer: Zihan YAN (yanzihan@westlake.edu.cn) |
>-------------------------------------------------<
Input <POSCAR> <element1> <element2> ...
Example: POSCAR Li Y Cl
------------>>

输出: 添加了 group 标签的 extxyz 文件。

常用脚本说明

POSCAR 转 extxyz

gpumdkit.sh -pos2exyz POSCAR model.xyz

适合把单个 VASP 结构转成 extxyz 文件。

交互模式关键词:pos2exyz

Input <POSCAR> <output.xyz>
Example: POSCAR model.xyz
------------>>

extxyz 转 POSCAR

gpumdkit.sh -exyz2pos structures.xyz

会将 extxyz 中所有帧转换成 POSCAR_*.vasp 文件。

交互模式入口:105

Input the name of extxyz
Example: ./train.xyz
------------>>

LAMMPS dump 转 extxyz

gpumdkit.sh -lmp2exyz dump.lammpstrj Li Y Cl

元素顺序必须对应 LAMMPS 中的 atom type ID。例如 type 1 是 Li、type 2 是 Y、type 3 是 Cl,则输入 Li Y Cl

交互模式关键词:lmp2exyz

Input <dump_file> <element1> <element2> ...
Example: dump.lammpstrj Li O
------------>>

CIF 转换

gpumdkit.sh -cif2pos input.cif POSCAR.vasp
gpumdkit.sh -cif2exyz input.cif model.xyz

如果后续需要 VASP 计算,使用 -cif2pos;如果后续要进入 GPUMDkit 分析,使用 -cif2exyz

添加权重

gpumdkit.sh -addweight train.xyz train_weighted.xyz 5

用于给训练集结构添加或修改权重。

扩胞

gpumdkit.sh -replicate POSCAR supercell.vasp 2 2 2
gpumdkit.sh -replicate POSCAR supercell.vasp 256

第一种按晶胞倍数扩胞,第二种按目标原子数自动选择扩胞方式。

提取单帧

gpumdkit.sh -get_frame dump.xyz 1000

从 extxyz 轨迹中提取第 1000 帧(索引从 0 开始)。

拆分多帧 extxyz

split_single_xyz.py 将多帧 extxyz 文件拆分为单帧文件。

python Scripts/format_conversion/split_single_xyz.py dump.xyz

生成 model_0.xyzmodel_1.xyz、... 等单帧文件。

MTP 转换

将 MTP .cfg 格式转换为 extxyz:

gpumdkit.sh    # 选择:1) 格式转换 → 102

交互提示:

Input <filename.cfg> <Symbol1 Symbol2 Symbol3 ...>
Example: train.cfg Pd Ag
------------>>

ABACUS 转换

将 ABACUS 输出转换为 extxyz:

gpumdkit.sh    # 选择:1) 格式转换 → 104

菜单提供两个选项:

  1. SCF 输出(running_scf.log
  2. MD 输出(running_md.log

常见问题

问题 建议
LAMMPS 转换后元素不对 检查 dump 文件后的元素顺序
extxyz 元数据太多 使用 -clean_xyz input.xyz clean.xyz
转换后的结构看起来偏移 检查源文件中的周期性边界条件/晶胞信息
提取帧不对 注意帧索引通常从 0 开始

说明

如果某个转换脚本缺少所需 Python 包,运行该功能时 Python 会给出相应提示。