LAMMPS:用OVITO与VTK读取网格
演示真正的OVITO网格导入、单元顺序、晶胞原点和单标量VTK导出,避免把网格误读为粒子。
阅读本篇目录
网格不是原子列表。保存后还要明确格子顺序、数据分量和晶胞原点,本篇接着空间密度例子读取同一批结果。
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 进程。
bash read.sh 先独立计算分箱,再实际调用 OVITO 3.16.1 读取 density.grid。输出包含 OVITO-VALIDATION.json,不是仅根据文件后缀判断可用。

2. 怎样读OVITO网格#
核心 Python 操作为:
from ovito.io import import_file
pipeline = import_file('density.grid')
data = pipeline.compute(0)
grid = data.grids['grid']
print(grid.shape)
print(grid['f_spatial_count'])
print(grid['f_spatial'])
print(data.cell)
实际得到形状 (2,3,4)、24 个原子数、两列密度。OVITO 导入后的 f_spatial_count 是计数,f_spatial 的两列依次是数密度和质量密度。原来的非零晶胞原点也被保留。
cat analysis-read/OVITO-VALIDATION.json
head -8 analysis-read/LAMMPS-grid-density.csv
3. 保持确定的格子顺序#
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
本例显式排序,单元索引中 x 变化最快,再 y、z。即使 MPI 按 x 方向划分,读取脚本也能按同一顺序重建 24 个格子。不能假定任意未排序并行输出天然就是数组需要的顺序。
4. VTK导出一个清楚的标量#
dump v all grid/vtk 200 density.*.vtk f_spatial:grid:data[1]
dump_modify v delay 200
这里仅输出数密度,避免把“计数、数密度、质量密度”三列误组合成一个物理向量。实际文件使用 RECTILINEAR_GRID,格点维数为 3×4×5,对应单元数 2×3×4=24;数据放在 CELL_DATA 中。
head -25 reference-results/sorted-x-decomposition/density.200.vtk
bash submit.sh
# 作业结束后
bash read.sh work-new/sorted-x-decomposition analysis-read
bash plot.sh
可在 ParaView 中打开 density.200.vtk 与 density.400.vtk 查看密度场。图中的数值来自实际原生 VTK 读取,与独立分箱的数密度最大差小于 7×10⁻⁹ Å⁻³。