LAMMPS 专题

LAMMPS距离平移与GPU精度

实际比较lj/expand与lj/cut的势阱和截断位置,汇总八种势的普通与GPU误差。

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

lj/expand对相互作用距离作平移,改变的效果与单纯修改LJ的σ不同。本篇实际比较两种LJ形式,并汇总八种势在普通和GPU路径中的真实能量、力差。

下载八种势函数的普通/GPU输入、336个实际距离采样、原子力与绘图脚本,解压进入run.sh目录。

1 提交完整扫描#

sbatch submit.slurm

模板申请核时P100分区1GPU1CPU,每种势先普通路径、再GPU路径,各扫描1–5Å的21个距离点。八种势组成八个配对工作流,共16次原生程序运行。程序只改变原子位置后run 0,没有动力学或结构松弛。

套餐用户用yskit生成所属分区脚本,在已分配资源中执行bash run.sh。多卡时仅使用已分配的CUDA可见设备与CPU亲和范围,每卡一个配对工作流,每个程序1MPI1OMP,空闲卡继续下一种势;不要在登录节点模拟。已有work请重新解压。

版本LAMMPS30Sep2026、GNU C++13.3.0/C++17、Open MPI5.0.10、CUDA GPU包混合精度;分析ASE3.29.0。普通路径是P100节点上同一构建的CPU计算,不是CPU专用节点的性能数据。inputs为新输入,reference为本文实算,work为新结果。

2 lj/expand的GPU完整输入#

package gpu 1 neigh no
suffix gpu
units real
atom_style atomic
atom_modify map array
newton off
boundary f f f
region box block -10 10 -10 10 -10 10 units box
create_box 2 box
mass 1 1.0
mass 2 1.0
create_atoms 1 single 0 0 0 units box
create_atoms 2 single 1 0 0 units box
pair_style lj/expand 4.5
pair_coeff * * 0.5 1.0 0.25
neighbor 0.3 bin
thermo_style custom step atoms pe
thermo_modify norm no format float %.16g
variable distance index 1.0 1.2 1.4 1.6 1.8 2.0 2.2 2.4 2.6 2.8 3.0 3.2 3.4 3.6 3.8 4.0 4.2 4.4 4.6 4.8 5.0
label scan
set atom 2 x ${distance}
run 0
print "SCAN ${distance} $(pe:%.16g) $(fx[1]:%.16g) $(fx[2]:%.16g)" append scan.dat screen no
write_dump all custom atoms-${distance}.dump id type x y z fx fy fz modify sort id format float %.16g
next distance
jump SELF scan

LJ系数ε=0.5kcal/mol、σ=1Å;lj/expand额外使用Δ=0.25Å,以r−Δ代替标准LJ表达式里的r。它的实际作用截断为rc+Δ,本例为4.75Å,而不是输入pair_style后的4.5Å。

普通lj/cut对照输入只需使用:

pair_style lj/cut 4.5
pair_coeff * * 0.5 1.0

同一ε和σ下,标准LJ连续势阱位置为2^(1/6)σ≈1.12246Å,平移后约1.37246Å;这批离散采样最低点分别落在附近的1.2和1.4Å。采样最小值与连续函数最低点需要区分。

3 原生数据与实际截断#

tail -n 5 work/cases/lj-cut-cpu/scan.dat
tail -n 5 work/cases/lj-expand-cpu/scan.dat

普通LJ在4.6Å已为0;lj/expand在4.6Å仍有相互作用,4.8Å才超出4.75Å的实际截断。图中没有默认进行额外的势能平移或力平滑,修改shift或势样式后应重新核对。

实际八种势中的Yukawa、soft、lj/expand与lj/cut能量及力,普通与GPU逐点对照

4 八种势的实际后端差值#

势 21点最大能量差/kcal·mol⁻¹ 21点最大力差/kcal·mol⁻¹·Å⁻¹
born 1.401E-07 9.537E-07
buck 2.631E-08 1.182E-07
gauss 6.986E-08 6.410E-08
lj/cut 3.214E-08 1.090E-07
lj/expand 5.778E-07 1.083E-05
morse 7.859E-07 3.292E-06
soft 4.074E-07 3.590E-07
yukawa 5.156E-08 8.383E-08

21个实际距离点上的最大普通/GPU能量差与力差;这是当前模型的误差对照,不是加速比

普通路径使用双精度CPU求力;此GPU构建为混合精度,两者存在表中小差异。本例最大力差约1.08E-5kcal/mol/Å,但不能把这一数值当作任意材料、规模或势函数的通用误差上限。

检查后端时,先固定同一结构、参数、单位、截断、邻居与Newton设置,再比较能量和逐原子力;不要只看总能打印位数或曲线肉眼重合。敏感任务还应按目标误差继续验证精度与后续轨迹性质。

提取与重画#

module load ase/3.29.0
python analyze.py work
python plot_results.py work
python check_results.py work
cat work/analysis/backend-comparison.csv
head -n 12 work/analysis/potential-scans.csv

potential-scans.csv逐点记录势、后端、距离、能量和两个原子的Fx;backend-comparison.csv汇总每种势在21点上的最大能量和力差。查看本文数据时将work改为reference。

这些系数是解释势函数形式与命令的合成教学参数,没有拟合为具体材料,也不用于比较不同势的真实材料准确度。

距离平移定义见lj/expand。配套指数型势与高斯、屏蔽及软势提供其余完整操作。

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

查看配图

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

100%查看原图 ↗