LAMMPS SNAP描述符与原子力分析
提取双谱描述符、重建模型能量,再用同模型接口对照与能量差分理解实际原子力。
阅读本篇目录
本篇沿用硅SNAP与ML-IAP势实操的完整包,进入解压目录后操作。目标是把“势文件能够读入”进一步落实到能量和力:同一个模型换接口是否一致,描述符能否重建能量,能量的导数能否给出原子力。
1 生成表格与配图#
bash analyze.sh
head -n 12 tables/energies-forces.csv
表中的 energy_eV 是整盒总能量,energy_peratom_eV 已除以64,maxforce_eVA 是所有力分量中的最大绝对值,不是每原子力矢量的最大模长。FD_maxerror_eVA 是本例三个坐标有限差分误差中的最大值。
2 模型文件与双谱描述符#
head -n 10 reference/potentials/linear.mliap.model
head -n 12 reference/potentials/linear.mliap.descriptor
线性文件包含1个元素、56个参数:1个常数和55个双谱系数。二次文件有1596个参数,其中还包含55×56/2=1540个二次项。描述符的截断、角动量上限、元素半径和权重应与该模型匹配。
实际输入中的提取命令为:
compute b all sna/atom 4.9 0.99363 8 0.5 1 rmin0 0 bzeroflag 0 quadraticflag 0
dump d all custom 1 base.dump id type x y z fx fy fz c_e c_b[*]
这里输出55个原始双谱分量。二次模型使用自己的4.8截断参数,但仍提取55个一次分量;分析脚本再构造二次组合,不会把1540个额外组合误当作新的独立角动量通道。
每个原子的线性能量为β₀+β·B;二次能量再加½BᵀαB。文件按上三角保存α:对角项乘½,非对角项在合并对称项后只乘一次。脚本逐原子重建能量,再与 compute pe/atom 对比,最后与整盒势能求和对比。
3 同模型接口和后端怎样比较#

横轴固定为同模型的P100普通SNAP力,纵轴分别取SNAP/ML-IAP、普通/Kokkos、P100/V100的实际力。每个点对应同一个原子ID和笛卡尔分量;图中的对角虚线表示相等,不是拟合结果。
本组参考条件的同模型总能量最大差约6.83×10⁻¹³ eV,力分量最大差约6.00×10⁻¹⁵ eV/Å。这个结果针对本例、配套模型和构建;更换元素、模型或计算精度后应重新对照。接口一致不代表模型对真实材料准确。
4 用能量差分核对原子力#
对预先选定的原子1的x、17的y、43的z坐标,分别施加±δ位移,δ=10⁻⁵ Å。其它原子及晶胞固定,以 −[E(x+δ)−E(x−δ)]/(2δ) 得到力分量。不要使用结构优化后的不同几何来做这项对照。

图展示扰动结构各接口的误差,零值保持为零。全64个参考条件中,描述符重建总能量的最大误差约1.09×10⁻¹² eV;三个选定坐标的最大力差约1.71×10⁻⁸ eV/Å。这里用绝对容差10⁻⁷ eV和10⁻⁵ eV/Å判断数值一致性,不据此声称所有坐标或所有构型已验证。
重新绘制参考图可执行:
bash plot.sh
原子坐标、逐原子能量、55个描述符和力保存在 reference/条件名/base.dump;每次微移能量在 properties.dat。自己的新结果对应 new-work/。先保留原始文件,再修改结构或模型,避免不同来源的数据混在一起。描述符选项见官方compute sna/atom说明。