LAMMPS 专题

LAMMPS Morse与指数型两体势

实际扫描Morse、Buckingham和Born势,核对系数顺序、能量、力和GPU输出。

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

先检查两原子之间的能量和受力随距离变化,可以发现系数顺序、单位和力方向的常见错误。本篇实际扫描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

前3列为Morse、Buckingham和Born的实际能量与2号原子受力;第4列为配套Gaussian例子,线为普通路径、点为GPU

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。

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

查看配图

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

100%查看原图 ↗