LAMMPS SNAP:CPU与INTEL双精度操作
Si线性/二次SNAP的四个真实条件,比较能量、力、压力与能量差分,给出CPU提交方法。
阅读本篇目录
INTEL加速包是CPU执行路径。本例用相同的Si SNAP线性/二次模型,在64原子扰动结构上比较普通CPU与INTEL双精度计算,随后以能量差分核对力。
1. 下载与看结构#
下载完整输入、实际输出、数据与绘图脚本,保存为example.zip:
python3 -m zipfile -e example.zip .
cd lammps-snap-intel-control
module load ase/3.29.0
bash read.sh
bash plot.sh
这两条脚本默认读取资料包已有结果,在analysis-read/生成CSV,在figures/出图。新计算单独写入work-new/,与参考数据分开。

结构采用金刚石Si 2×2×2常规胞,晶格常数5.43 Å,施加0.03 Å高斯扰动。模型是LAMMPS公开Si_Zuo_JPCA2020线性和二次SNAP,随包保留模型与许可证;没有重新训练。
2. 势文件必须成对匹配#
ls inputs/potentials
head -15 inputs/models/Si64-perturbed.data
units metal
atom_style atomic
boundary p p p
read_data ../models/Si64-perturbed.data
pair_style snap
pair_coeff * * ../potentials/Si_Zuo_JPCA2020.snapcoeff ../potentials/Si_Zuo_JPCA2020.snapparam Si
neighbor 1.0 bin
neigh_modify every 1 delay 0 check yes
thermo 1
thermo_style custom step atoms pe pxx pyy pzz pxy pxz pyz
thermo_modify norm no format float %.16g
run 0
二次模型对应.quadratic.snapcoeff和.quadratic.snapparam,两者同时替换,不能只换其中一个文件。元素映射顺序也要与原子类型一致。
3. CPU与INTEL如何启动#
本例实际运行环境为lammps/30Sep2026-8173m,oneAPI C++ 2024.2.1、Intel MPI 2021.13、OpenMP 5.1。四个条件均为单线程,用于数值对照,不代表多核性能。
lmp -in in.lmp
lmp -sf intel -pk intel 0 mode double omp 1 -in in.lmp
上面展示两种后端关键区别;正式新计算用资料包Slurm脚本:
bash submit.sh
squeue -u "$USER"
# 结束后
bash read.sh work-new analysis-new
bash plot.sh analysis-new figures-new work-new
CPU模板按集群整节点规则申请资源,实际本例数值程序仅用1线程;不应据此评估整节点吞吐量,也不要把-sf intel当作CUDA开关。
4. 原子力和能量导数#

对原子1的x、17的y、43的z分量,分别做±10⁻⁵ Å位移,固定其他坐标计算能量中心差分。
cat analysis-read/SNAP-Si64-CPU-INTEL-FD.csv
cat analysis-read/SNAP-Si64-CPU-INTEL-energy-force.csv
普通路径与INTEL的总能量差为0,最大原子力差8.99×10⁻¹⁵ eV/Å,压力张量分量差约1.02×10⁻¹⁰ bar。原子力与能量差分最大差1.34×10⁻⁸ eV/Å。这些是本例的实际数值,不是对任意体系的固定精度承诺。
需要GPU输入时参考SNAP与ML-IAP模型推理;需要选择其他机器学习势时看环境选择表。