LAMMPS:轨迹格式、精度与压缩
用2048原子镍的实际轨迹演示文本输出、精度设置、gzip压缩和固定原子顺序。
阅读本篇目录
做完分子动力学后,结构分析能否可靠进行,很大程度取决于轨迹保存了什么。本篇从常用的 custom 开始,演示怎样保留原子编号、坐标、晶胞和精度。
1. 先读取实际结果#
下载完整输入、实际输出、读取脚本和绘图脚本,保存为 example.zip:
python3 -m zipfile -e example.zip .
cd lammps-dump-formats
bash read.sh
bash plot.sh
reference-results 是本例实际运行结果,analysis-read 是读取后生成的数据,figures 是可重新绘制的图片。单独下载的数据:LAMMPS-dump-roundtrip.csv、LAMMPS-gzip-sizes.csv。
本例使用 LAMMPS 30Sep2026。CPU 入口为 lammps/30Sep2026-8173m,Intel oneAPI 2024.2、Intel MPI、MKL,带 PLUMED 2.9.4。资料包的 CPU 模板申请一个 56 核节点,实际同时启动最多 2 个单线程 MPI 进程。
这里复用 2048 原子 Ni、300 K 起始条件的 NPT 轨迹,选择第 0、200、400 步,原时间步长 0.001 ps,因此相邻帧相隔 0.2 ps。格式转换使用 rerun,不重新推进动力学;输入里的 pair_style zero 仅建立邻居,不提供原轨迹的真实能量或受力。

2. 常规计算建议怎样保存#
在自己的正常 MD 输入中、run 之前加入:
dump d all custom 200 trajectory.dump id type x y z
dump_modify d sort id format float %.14g
每 200 步输出一帧;id 用于识别同一个原子,sort id 使各帧按编号排列。x y z 是笛卡尔坐标。需要连续位移时,可另外保存展开坐标 xu yu zu 或周期映像标记 ix iy iz,再按分析工具的要求处理跨边界运动。这里的往返读取只检查坐标保存,不计算扩散系数。
3. 实际转换输入#
下面是资料包中 custom-precise/in.lmp 的完整输入:
units metal
atom_style atomic
boundary p p p
read_data ../frame0.data
pair_style zero 3.0
pair_coeff * *
neighbor 0.3 bin
neigh_modify every 1 delay 0 check yes
thermo 200
thermo_style custom step atoms vol
dump d all custom 1 trajectory.dump id type x y z
dump_modify d sort id
dump_modify d format float %.14g
rerun ../trajectory3.dump dump x y z box yes
undump d
先 read_data 建立原子与质量,再由 rerun 读取原轨迹的坐标和晶胞。它不会恢复原势函数产生的能量/力;不要把这个零势重读例子的力列用作机器学习训练标签。
需要自己运行这一组转换:
bash submit.sh
# Slurm作业结束后
bash read.sh work-new analysis-read
bash plot.sh
本包按目录依次处理所选格式。参考 VTK 分支单独使用一个 MPI 进程,其余分支使用两个。
4. 压缩和精度是两个不同的设置#
压缩版的核心输入是:
dump d all custom/gz 200 trajectory.dump.gz id type x y z
dump_modify d sort id format float %.14g
gzip 压缩本身可逆;%.14g 决定写入压缩文件之前数字保留多少有效位。本例高精度 custom 文本为 187472 B,gzip 为 76192 B,解压后的字节与对应未压缩文件一致。默认低精度文本造成的舍入,不能靠 gzip 恢复。
head -12 reference-results/custom-precise/trajectory.dump
gzip -cd reference-results/custom-gz-precise/trajectory.dump.gz | head -12
head -8 data/LAMMPS-gzip-sizes.csv
5. 本组实际使用了哪些格式#
| 用途 | 实际格式 | 使用建议 |
|---|---|---|
| 缩放坐标文本 | atom、atom/gz | 连同每帧晶胞读取 |
| 自定义坐标列 | custom、custom/gz | 优先保留id,明确浮点精度 |
| 简单元素坐标 | xyz、xyz/gz | 按id排序,并另存晶胞/原点元数据 |
| 扩展XYZ | extxyz | 本例只保存几何,关闭零势重读的速度/力列 |
| 二进制 | dcd、xtc | 见二进制轨迹教程 |
| 结构查看 | cfg、cfg/gz | 见CFG与参考晶胞 |
| 邻居对 | local、local/gz | 按原子对读取,不能按原子行数解释 |
| 结构化数据 | vtk、yaml | 见邻居与结构输出 |
| 直接图片 | image | 保存可视化结果,不能代替坐标轨迹 |
这是 16 种实际输出路径,不代表 LAMMPS 所有可选格式。当前版本不要使用已移除的 atom/mpiio、custom/mpiio、cfg/mpiio、xyz/mpiio。
custom 在本例高精度输入下的最大坐标分量误差约 1×10⁻¹³ Å;普通 XYZ 的约 4.99×10⁻⁵ Å。这些是本例写出再读取的差值,不是 MD 的物理误差。官方 dump_modify 说明可查格式和排序选项。