LAMMPS 专题

LAMMPS:用OVITO与VTK读取网格

演示真正的OVITO网格导入、单元顺序、晶胞原点和单标量VTK导出,避免把网格误读为粒子。

更新于 2026-11-13约 3 分钟阅读按任务与环境选择适用配置
阅读本篇目录

网格不是原子列表。保存后还要明确格子顺序、数据分量和晶胞原点,本篇接着空间密度例子读取同一批结果。

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,不是仅根据文件后缀判断可用。

全部24格的实际原子数及独立分箱与VTK数密度比较

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⁻⁹ Å⁻³。

需要根据你的体系选择资源?联系讨论计算需求。实际可用软件与权限,以当前账户和运行环境为准。

查看配图

放大后可滚动查看细节,按 Esc 关闭。

100%查看原图 ↗