GPUMDkit结构互转:POSCAR、LAMMPS与extxyz
用真实NaCl结构完成格式往返,核对元素类型、晶胞、周期距离和环境选择。
阅读本篇目录
下载完整输入、转换脚本与结构图。本篇以2原子NaCl原胞演示POSCAR→LAMMPS data→LAMMPS dump→extxyz。源结构来自集群实际VASP计算;转换本身不生成DFT能量、力或分子力场。
1 为什么先选择Python环境#
GPUMDkit 1.5.8的pos2lmp.py依赖OVITO;GPUMDkit基础环境与OVITO 3.16.1独立部署。因此这一脚本使用OVITO模块的Python运行,后续ASE分析和lmp2exyz再切回GPUMDkit环境,不要把两个环境的site-packages混在一起。
module purge
module load ovito/3.16.1
export QT_QPA_PLATFORM=ovitoheadless
python /public/software/gpumdkit/1.5.8/Scripts/format_conversion/pos2lmp.py POSCAR nacl.data
脚本仍是集群GPUMDkit提供的工具,不需要重新安装OVITO,也不需要修改公共环境。
2 核对原子类型和晶胞#
本例POSCAR元素顺序为Cl、Na,转换输出中类型1为Cl,类型2为Na:
Masses
1 35.453 # Cl
2 22.98977 # Na
输出为atom_style atomic的数据。当前OVITO会保留一般三斜晶胞,文件以avec/bvec/cvec列出晶格向量;本次实际用LAMMPS 30Sep2026读入成功。旧版LAMMPS未必支持相同格式,不能只看扩展名相同就判断可读。
3 让LAMMPS实际读入并输出dump#
附件in.read完整内容:
units metal
atom_style atomic
boundary p p p
read_data nacl.data
pair_style zero 2.0
pair_coeff * *
run 0
write_dump all custom nacl.dump id type x y z modify sort id
在已分配的CPU资源中执行:
module purge
module load lammps/30Sep2026-8173m
export OMP_NUM_THREADS=1
lmp -in in.read > lammps.log
这个LAMMPS模块采用Intel oneAPI 2024.2 CPU编译环境。pair_style zero和run 0只检查结构读取、邻居表和输出链路,没有进行NaCl动力学模拟,也没有提供可用于研究的相互作用模型。正式计算应换成适用的势函数、原子类型、电荷和其他物理设置。
4 把dump转回extxyz#
module purge
module load gpumdkit/1.5.8
gpumdkit.sh -lmp2exyz nacl.dump Cl Na
这里Cl Na必须按dump中的类型1、类型2顺序填写。调换顺序会把化学元素对调,即使转换命令仍能正常结束。输出固定为dump.xyz,因此请在自己的工作副本中运行。
extxyz保留晶胞、PBC和元素坐标。这个dump只有id type x y z,所以不会包含真实能量、力或virial标签;要构建NEP训练集,仍需单独读取对应第一性原理结果。
5 怎样判断往返正确#
python validate.py
python check_roundtrip.py
cat ROUNDTRIP.json
脚本核对原子数与元素顺序、晶胞体积、晶格度量和最小镜像距离。原始体积为 46.29825 ų,Cl–Na最小镜像距离为 2.85 Å。LAMMPS可将晶胞旋转到内部约定,因此原始笛卡尔坐标不一定逐分量相同;应检查旋转不变的距离和晶格度量。

图中的视角相同,但晶胞可能经过整体旋转;这不等于结构变形。下载包的JSON记录数值差,全部低于本例的1×10⁻⁴检查尺度。
整条流程可以运行:
bash run.sh
它依次切换三个现有模块,转换、读入、导出并生成结构对照图。请在新副本运行,同名输出会被覆盖。