LAMMPS Morse与指数型两体势
实际扫描Morse、Buckingham和Born势,核对系数顺序、能量、力和GPU输出。
阅读本篇目录
先检查两原子之间的能量和受力随距离变化,可以发现系数顺序、单位和力方向的常见错误。本篇实际扫描Morse、Buckingham与Born势,并逐点对照解析表达式和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 Morse完整输入#
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 morse 4.5
pair_coeff * * 0.5 2.0 1.6
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
units real使用Å和kcal/mol。1号原子固定在原点,2号原子放在正x轴;每个距离由set修改位置,run 0重新计算能量与力,再写入scan.dat和对应原子dump。
Morse系数顺序为D0、α、r0。本例D0=0.5kcal/mol、α=2Å⁻¹、r0=1.6Å。能量E=D0[exp(−2α(r−r0))−2exp(−α(r−r0))];r0处能量−D0、径向力为0。
本几何中2号原子的Fx等于径向力−dE/dr,正号表示向右排斥、负号表示向左吸引;1号原子的Fx相反。不要将吸引的负力误认为计算错误。
3 Buckingham与Born对应设置#
| 势 | pair_style | pair_coeff * *后面的系数 |
|---|---|---|
| Morse | morse 4.5 | 0.5 2.0 1.6 |
| Buckingham | buck 4.5 | 5.0 0.4 0.02 |
| Born | born 4.5 | 0.5 0.3 1.5 0.05 0.01 |
Buckingham使用A、ρ、C,对应E=Aexp(−r/ρ)−C/r⁶;Born使用A、ρ、σ、C、D,对应E=Aexp[(σ−r)/ρ]−C/r⁶+D/r⁸。各系数的长度幂次和单位不同,不能把Morse或LJ的一组数字直接填过来。
这里仅为非库仑势项;真实离子材料是否还需要电荷、长程静电或其他相互作用,应按原势参数的定义决定。
4 GPU输入差别与实际数据#
同一输入在最前面增加以下两行,选择本构建已提供的GPU样式;本包还显式使用newton off:
package gpu 1 neigh no
suffix gpu
cat work/cases/morse-cpu/scan.dat
cat work/cases/morse-gpu/scan.dat
head -n 8 work/cases/buck-cpu/scan.dat
head -n 8 work/cases/born-cpu/scan.dat

Morse在1.6Å采样点实际得到−0.5kcal/mol和零力;三个势的普通路径均按相应解析能量及导数逐点检查。图中系数不同,不用各条曲线的绝对值给势函数或材料排名。
提取与重画#
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。
这些系数是解释势函数形式与命令的合成教学参数,没有拟合为具体材料,也不用于比较不同势的真实材料准确度。
官方系数定义:Morse、Buckingham、Born。