LAMMPS:三维网格与空间密度
将实际Ni轨迹分成2×3×4网格,逐格读取原子数、数密度和质量密度,保留原NPT晶胞。
阅读本篇目录
想知道体系里哪里更密,可以先把轨迹按空间网格分箱。本例复用 2048 原子 Ni 的实际 NPT 帧,得到 2×3×4=24 个格子的原子数、数密度和质量密度,不重新运行 MD。
1. 读取现有结果#
下载完整输入、实际输出、读取脚本和绘图脚本,保存为 example.zip:
python3 -m zipfile -e example.zip .
cd lammps-grid-density
bash read.sh
bash plot.sh
reference-results 是本例实际运行结果,analysis-read 是读取后生成的数据,figures 是可重新绘制的图片。单独下载的数据:LAMMPS-grid-density.csv。
本例使用 LAMMPS 30Sep2026。CPU 入口为 lammps/30Sep2026-8173m,Intel oneAPI 2024.2、Intel MPI、MKL,带 PLUMED 2.9.4。资料包的 CPU 模板申请一个 56 核节点,实际同时启动最多 2 个单线程 MPI 进程。

2. 完整输入#
units metal
atom_style atomic
boundary p p p
processors 2 1 1
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
fix spatial all ave/grid 200 1 200 2 3 4 density/number density/mass
# Skip initial unaccumulated output, retain original MD steps200and400.
dump g all grid 200 density.grid f_spatial:grid:count f_spatial:grid:data[1] f_spatial:grid:data[2]
dump_modify g delay 200 sort id
dump v all grid/vtk 200 density.*.vtk f_spatial:grid:data[1]
dump_modify v delay 200
rerun ../trajectory3.dump dump x y z box yes
undump g
undump v
先读取数据文件,再定义 fix ave/grid,最后通过 rerun 读取原轨迹。processors 2 1 1 是本例两个 MPI 进程的划分,供完整模板直接复用;修改进程数时也要相应检查处理器网格。
3. 三个时间参数怎么读#
本例 200 1 200 分别表示每 200 步取样、每次只取 1 个样本、每 200 步输出一次。因此结果是第 200、400 步的单帧空间分布,不是长时间平均。delay 200 跳过尚未累计的初始输出。
每帧使用原 NPT 晶胞,格子体积也随之变化。Ni 原子质量设为 58.6934,metal 单位制下数密度是 Å⁻³,质量密度是 g/cm³。本例读数按实际格子体积计算,24 个格子的原子数之和都为 2048。
4. 自己提交、读取、画图#
bash submit.sh
# Slurm作业结束后
bash read.sh work-new/sorted-x-decomposition analysis-read
bash plot.sh
head -35 reference-results/sorted-x-decomposition/density.grid
head -8 analysis-read/LAMMPS-grid-density.csv
CSV 保留 ix iy iz、原子数、原生数密度、独立计算密度、质量密度和 VTK 读数。图只显示 z 索引为 0 的一层;CSV 包含全部 24 格、两个时间帧。
5. 用于自己的体系#
替换输入结构和轨迹,先核对原子质量、单位及晶胞。需要稳定的空间平均时,再根据实际采样间隔设置多个样本和足够采样时间;不要直接把这两帧图当成收敛的密度涨落。更细网格的粒子数可能很少,单帧密度噪声也会增加。
本例逐格原子数与独立分箱完全一致。质量密度文本的最大差约 4.67×10⁻⁵ g/cm³,主要来自当前输出的数字舍入。官方 fix ave/grid 参数说明可查取样与网格选项。