速查
“官方解释”一列是报错末尾 For more information see 之后的地址,可直接打开。本页实测:表中前 18 条都用 conda-forge 的 LAMMPS 22Jul2025 update6(macOS arm64,CPU 版)构造小输入实际触发过,报错原文和 err 编号与表中一致;最后 4 条(MS-MPI、msmpi.dll、make 与 GPU)依赖本机没有的环境,没有复现。
| 报错原文 | 最常见的真实原因 | 最先检查什么 | 官方解释 |
|---|---|---|---|
| ERROR: Lost atoms: original N current M | 原子单步位移过大:初始重叠、时间步过大、单位或参数错误、边界设置 | 把 thermo 降到 10,看报错前 PotEng、Press、Temp 从哪一步开始异常 | docs.lammps.org/err0008 |
| Out of range atoms - cannot compute PPPM | 带电原子单步移出所在进程的子区域与 skin 范围 | log 末尾 Dangerous builds 是否非零;第 0 步就报则查重叠 | docs.lammps.org/err0004 |
| Bond atoms X Y missing on proc P at step S | 成键原子间距超过通信截断,多数情况是体系已经炸开 | 报错前的温度和压力;pair 截断是否很短(例如纯排斥 LJ) | docs.lammps.org/err0005 |
| Non-numeric pressure - simulation unstable(及 atom coords / box dimensions 变体) | 力溢出为 NaN 或 Inf | NaN 是否在第 0 步就出现;delete_atoms overlap 删掉了几个原子 | docs.lammps.org/err0006 |
| thermo 输出中 Temp、Press 为 nan 或 -nan,但程序没停 | 与上一行相同,LAMMPS 并不总是立即终止 | 同上;改用双精度 GPU 设置复跑 | Errors_details 中 Pressure, forces, positions becoming NaN or Inf 一节 |
| Too many neighbor bins | 盒子膨胀过大,或最大截断过小 | thermo 中加入 lx ly lz,看盒子尺寸是否在快速增长 | docs.lammps.org/err0009 |
| Domain too large for neighbor bins | 个别原子被甩出很远(s 边界),或 fix deform、控压把盒子撑得过大 | 边界是否为 s;fix deform 的速率与单位 | docs.lammps.org/err0017 |
| Cannot use neighbor bins - box size << cutoff | 某一维盒长远小于截断,常见于薄层体系 | 最薄方向的盒长与 pair 截断 | docs.lammps.org/err0015 |
| Neighbor list overflow, boost neigh_modify one | 单原子邻居数超过 one(默认 2000);也可能是盒子写错导致密度虚高 | 盒子尺寸是否正确;data 文件是否误用分数坐标 | docs.lammps.org/err0036 |
| Did not assign all atoms correctly | 非周期边界下 data 文件中有原子落在盒子外 | xlo xhi / ylo yhi / zlo zhi 是否包住全部坐标 | docs.lammps.org/err0016 |
| Invalid atom ID in Bonds section of data file | Bonds 引用的原子 ID ≤ 0、大于最大 ID,或两端是同一原子 | 头部 atoms 数与 Atoms 段行数;转换工具输出的 ID 是否从 1 开始 | Errors_messages |
| Incorrect format in Atoms section of data file | atom_style 与 data 文件列数不一致,或头部计数大于实际行数 | atom_style 与 Atoms 段标题注释(如 # full)是否一致 | docs.lammps.org/err0002 |
| Unknown identifier in data file | 头部关键字或段名拼错;或第一行写了头部关键字(第一行固定被当作注释跳过) | data 文件第一行;段名大小写 | docs.lammps.org/err0001 |
| Unrecognized pair style 'xxx' is part of the YYY package which is not enabled in this LAMMPS binary | 可执行文件编译时没装 YYY 包 | lmp -h 中的 Installed packages | docs.lammps.org/err0010 |
| Incorrect args for pair coefficients | pair_coeff 格式与 pair_style 不符,例如 eam 与 eam/alloy 混用、hybrid 缺子样式名 | 对照该 pair_style 文档的 pair_coeff 示例 | docs.lammps.org/err0021 |
| Numeric index X is out of bounds | pair_coeff、bond_coeff 中的类型号超出 data 文件声明的类型数 | data 文件头部 atom types、bond types | docs.lammps.org/err0019 |
| XXX command before / after simulation box is defined | 命令顺序错误:units、atom_style 必须在 read_data 之前,pair_coeff 必须在之后 | 命令相对 read_data / create_box 的位置 | docs.lammps.org/err0033、err0034 |
| Substitution for illegal variable | 多字母变量没写花括号,$cutoff 被解析为 $c | 改成 ${cutoff} | docs.lammps.org/err0013 |
| job aborted: [ranks] message ... abort code 1(MS-MPI) | MPI 层的汇总信息,LAMMPS 已因输入错误退出 | 去掉 -screen none,查看 log.lammps 最后一条 ERROR | MatSci 论坛帖(见参考资料) |
| 系统提示找不到 msmpi.dll | 运行的是 MSMPI 版 LAMMPS,但没有安装 MS-MPI 运行时或安装后未重启 | 是否安装 msmpisetup.exe 并重启 | docs.lammps.org/Run_windows.html |
| make mpi 时 mpicxx: command not found 或 mpi.h: No such file or directory | 系统没有 MPI 编译器包装器或开发头文件 | which mpicxx;没有 MPI 时改用 make serial | docs.lammps.org/Build_basics.html |
| GPU library not compiled for this accelerator | GPU 库编译的架构或 CUDA 版本与当前显卡、驱动不匹配 | GPU_ARCH 设置与 nvidia-smi 显示的显卡和驱动版本 | docs.lammps.org/Build_extras.html |
读报错
源码位置:ERROR 行末尾的括号是源文件和行号,例如 (src/thermo.cpp:526)。行号随版本变化,对照源码时必须用同一版本。
ERROR 与 ERROR on proc N:前者是所有进程一致检测到的错误,后者是由单个进程检测并终止的错误,单核运行时也会显示为 ERROR on proc 0(本页实测:Substitution for illegal variable、Neighbor list overflow、Too many neighbor bins 在单核下都是这种格式)。Lost atoms、Out of range、Bond atoms missing 都与区域分解有关,换进程数后报错可能出现或消失。这种情况说明输入本身不稳定,不能当作“换核数就解决了”。
Last input line:多数输入语法错误会打印正在执行的命令。运行期报错(例如 Lost atoms)设置了 NOLASTLINE,不会打印这一行,需要看报错前的 thermo 输出。
并行运行时如果没有任何报错就退出,报错可能还停留在输出缓冲区(4096 或 8192 字节)。加命令行参数 -nb 关闭缓冲后复跑;这个参数会明显拖慢速度,只在排错时使用。
Lost atoms
LAMMPS 默认只在写 thermo 输出的那一步检查原子总数。thermo 设为 1000 时,报出的步数最多比原子真正丢失的时刻晚 999 步,所以第一步是缩小 thermo 间隔。
本页实测(LAMMPS 22Jul2025 update6,CPU 单核):在 864 个原子的 LJ 液体中,距离某个原子约 0.15σ 处再放一个原子,第 0 步势能为 5.2×10⁷,NVE 运行到第一个 thermo 步即报 Lost atoms: original 865 current 863。同一结构先套用上面的 in.debug,最小化后 nve/limit 运行 5000 步、NVE 运行 2000 步都没有报错,Dangerous builds 为 0。把两个原子放在完全相同的位置时,第 0 步的势能为 inf、压力为 nan,fix nve 不会停止运行,温度此后一直是 nan。
thermo_modify lost 有 error(默认)、warn、ignore 三个值。官方文档说明 ignore 只适用于原子本应离开体系的模拟。改成 ignore 后原子数会变化,dcd 等要求原子数恒定的输出格式会报错,统计量也会偏。
同一输入换 LAMMPS 版本后开始 Lost atoms,开发者的解释是原输入本来就处于边缘稳定状态,旧版本恰好没有触发,需要按新问题排查。
# 诊断用设置:放在 read_data / create_atoms 和力场定义之后、run 之前
thermo 10 # Lost atoms 只在 thermo 步检查,先缩小间隔
thermo_style custom step temp pe ke etotal press vol lx ly lz
thermo_modify lost error norm no # 保持默认 error,不要改成 ignore
neigh_modify delay 0 every 1 check yes
# 1) 先最小化,消除近距接触
min_style cg
minimize 1.0e-4 1.0e-6 1000 10000
reset_timestep 0 # 必须在定义 dump 之前执行,否则报 Cannot reset timestep with active dump
# 2) 每 10 步记录坐标、速度和力
dump d1 all custom 10 dump.debug id type x y z vx vy vz fx fy fz
dump_modify d1 delay 0 # 已知在第 N 步附近出错时,把 0 改成 N-200
# 3) 初始阶段限制单步位移(距离单位;不能与 fix shake 同时使用)
fix f_lim all nve/limit 0.1
run 5000
unfix f_lim
# 检查是否有重叠原子:在 pair_style / pair_coeff 定义之后执行
# 要求:pair 截断 + neighbor skin >= 0.5(此处距离单位),否则报 Delete_atoms cutoff > max neighbor cutoff
# special_bonds 设为 0 的成键原子对不在邻居列表里,不会被检查
# 只在诊断副本里用,它会真的删掉原子
delete_atoms overlap 0.5 all all
# 日志中出现 "Deleted N atoms, new total = ...",N > 0 说明结构里有重叠
| 原因 | 典型信号 | 诊断方法 | 修改方法 |
|---|---|---|---|
| 初始重叠或近距接触 | 第 0 步势能和压力已经异常大,前几步温度急升 | delete_atoms overlap 0.5 all all 看删掉几个原子;在 OVITO 中按距离查找近邻 | 先 minimize;或用 fix nve/limit 0.1 跑几千步,再换回 fix nve/nvt |
| 时间步过大 | 温度在前几百步持续上升;NVE 下总能量单向漂移 | 步长减半复跑,报错推迟或消失即可确认 | 按体系取步长:柔性水 0.25 fs,SHAKE 约束含 H 键 1 fs,含 C/O/N 的有机体系约 1 fs |
| units 写错或参数单位不符 | 能跑几步,但温度、压力数值离谱;日志中有 Changing timestep 警告 | 核对 units 与势函数文件、文献参数所用单位 | 见下文“单位混用”一节 |
| pair_coeff 元素映射错误 | 某两类原子间距异常缩短或互相穿透 | 核对 pair_coeff * * 文件名 之后的元素顺序是否与 data 中类型 1、2…… 对应 | 按类型编号顺序写元素名,不用的类型写 NULL(hybrid 时) |
| 边界条件 | f 边界下原子从表面飞出;大盒子配 s 边界时第一步盒子塌缩 | 确认丢失的原子是否本该离开体系 | 溅射、蒸发类模拟改用 thermo_modify lost warn;s 改为 m 边界 |
| 壁势太靠近盒子边缘 | 靠近 fix wall 的原子速度异常 | dump 中查看丢失原子所在位置 | 论坛案例中改用 fix wall/reflect 后解决 |
| fix deform 速率过大或单位换算错误 | thermo 中 lx 每步变化很大,伴随温度上升 | 把 erate 换算成 1/s 核对:metal 下 erate 0.001 即 1e9 s⁻¹ | 降低应变率;确认 units box 或 lattice |
| 控温控压阻尼过小 | 温度或体积大幅振荡 | Tdamp、Pdamp 换算成步数 | Tdamp 约 100 步、Pdamp 约 1000 步,可写成 $(100.0*dt)、$(1000.0*dt) |
PPPM 与成键
PPPM 把每个电荷分摊到周围若干网格点上。并行时每个进程只持有自己子区域加 skin 范围内的网格。原子在一次邻居列表重建之前移出这个范围,就会报 Out of range atoms - cannot compute PPPM。这里的“范围”是子区域,单核运行时才等于整个盒子,所以加大盒子不能解决这个报错。
中文社区流传较广的经验做法(CSDN、知乎同一作者的 PPPM 排错文章)分两种情况:原子速度不高时,用 neigh_modify delay 0 every 1 check yes 提高重建频率即可;原子受力很大、速度很高时,要同时减小时间步(文中用到 0.1 fs)并回头检查建模和力场参数;建模优化初期可以先不用 PPPM。这套做法与官方解释一致,前提是先确认没有重叠原子,否则减小步长只会推迟报错。
本页实测(同一版本,4 个 MPI 进程):在 30 Å 立方盒子中随机放 800 个 ±1 电荷原子(存在严重重叠),pair_style lj/cut/coul/long 10.0 加 pppm 1.0e-4。设 neigh_modify delay 10 every 10 check no 时报 Out of range atoms - cannot compute PPPM;用默认重建设置时同一结构改报 Lost atoms;换成下面的保守设置(skin 3.0 Å、0.5 fs)仍然报 Lost atoms;先 minimize 再运行则正常。这说明保守设置只解决重建过晚的问题,结构里有重叠时必须先最小化。
同一输入在 Windows 能跑、在 Linux 报错,通常是 FFT 网格或区域分解不同,原因仍是体系中存在高能构型。
Bond atoms missing 表示成键的另一个原子不在通信截断范围内。默认通信截断等于 pair 截断加 skin。纯排斥 LJ 等截断很短的力场,或 pair_style none,需要用 comm_modify cutoff 加大通信截断;体系已经炸开时加大截断无效。
本页实测:成键两原子相距 10 Å、pair 截断 2.0 Å、skin 0.5 Å、2 个进程时,在运行开始前就报 Bond atom missing in image check(err0014);加 comm_modify cutoff 12.0 后正常运行。两个成键原子在运行中被拉开时,报的是 Bond atoms 1 2 missing on proc 0 at step 4(err0005)。
# 每次 run 结束时 log.lammps 末尾的邻居列表统计
Neighbor list builds = 1229
Dangerous builds = 0 # 非零:原子在重建前已移动超过半个 skin,提高重建频率或加大 skin
# Out of range atoms / Bond atoms missing 的保守设置(real 或 metal 单位)
neighbor 3.0 bin # skin 从默认 2.0 Å 加到 3.0 Å
neigh_modify delay 0 every 1 check yes
timestep 0.5 # real 单位 0.5 fs;SHAKE 约束含 H 键后再回到 1-2 fs
# 平衡初期先用截断库仑,体系稳定后再切回 long + pppm
# pair_style lj/cut/coul/cut 10.0
# (不写 kspace_style)
| 设置(real 单位,1 fs 基准) | Neighbor list builds | Dangerous builds | 相对耗时 |
|---|---|---|---|
| delay 10,skin 2.0 Å,1.0 fs | 1000 | 1000 | 1.00× |
| delay 0,skin 2.0 Å,1.0 fs | 1229 | 0 | 1.04× |
| delay 10,skin 3.0 Å,1.0 fs | 617 | 0 | 1.00× |
| delay 10,skin 2.0 Å,0.5 fs | 1252 | 0 | 1.84× |
邻居列表
Too many neighbor bins
bin 边长默认是最大 pair 截断的一半。盒子膨胀到 bin 数超出整型上限时报错。最常见的是体系炸开后盒子随之变大,先在 thermo 中输出 lx ly lz 确认。截断确实很小时,可用 neigh_modify binsize 加大 bin。当前开发版文档中的 neigh_modify bin/hash 在 22Jul2025 stable 中不存在,本页实测会报 Unknown neigh_modify keyword: bin/hash。
Domain too large for neighbor bins
个别原子被甩出很远,s 边界会把盒子跟着撑大;fix deform 或控压也可能把盒子拉得过大。先查报错前的原子速度和盒子尺寸,再查 fix deform 的速率。
Cannot use neighbor bins - box size << cutoff
某一维盒长远小于截断,常见于单层或薄膜体系。加大该方向盒长(真空层),或改用 neighbor 2.0 nsq;nsq 更慢。
Neighbor list overflow, boost neigh_modify one
默认 one 为 2000、page 为 100000,page 至少是 one 的 10 倍,推荐 50 到 100 倍。加大之前先确认密度合理:盒子尺寸写错或 data 文件误用分数坐标都会让密度虚高。
NaN
- 01
确认 NaN 第一次出现的步数
thermo 设为 1 复跑。第 0 步就是 NaN,最常见原因是原子重叠:重叠原子在可视化中看起来就是一个原子。周期边界下,盒子按原子坐标极值设定、没有留空隙时,两侧原子会通过周期边界重叠。本页实测:两个原子坐标完全相同时,只用 fix nve 不报错、thermo 一直输出 nan;改用 fix npt 时第 0 步报 Non-numeric pressure - simulation unstable;4 个进程的 fix nve 运行报 Non-numeric atom coords - simulation unstable。
- 02
检查重叠并先最小化
用 delete_atoms overlap 在诊断副本中检查。删除数大于 0 就回到建模步骤留出间距,或先 minimize。
- 03
先恒温再控压
官方文档指出 NaN 更容易在直接使用 Nose-Hoover 控压时出现。先只控温跑到势能稳定,再加 fix npt;也可以在平衡了一段 MD 后再做一次最小化。
- 04
GPU 运行先用双精度
GPU 包默认按 mixed 精度编译(GPU_PREC=mixed),单精度和混合精度更容易溢出。初期弛豫用双精度或 CPU 跑完,再切回混合精度做生产运行。
- 05
改用软势起步
pair_style soft 或 soft-core 势对近距接触不敏感,可用于把严重重叠的初始结构推开,然后再换回正式力场。
编译与包
Unknown pair style 是 2019 年以前版本的报错原文。2020 年起改为 Unrecognized pair style 'xxx' is part of the YYY package which is not enabled in this LAMMPS binary,直接给出缺少的包名。若提示包已安装但样式仍缺失,说明它依赖的另一个包没有装,需要看该样式文档的 Restrictions 一节。
装包之后必须重新编译。传统 make 不能在同一条命令里装包并编译,make yes-colloid mpi 不会生效,要分成两条。只改了包却没有重新编译或没有替换旧的可执行文件,是官方文档点名的常见疏漏。
22Jul2025 版用 CMake 构建要求 CMake 3.16 以上,编译器至少支持 C++11,支持 C++17 时自动使用 C++17;启用 KOKKOS 时必须 C++17。make mpi 默认调用 mpicxx,系统没有 MPI 时改用 make serial,或先安装 OpenMPI、MPICH 的开发包。
# 查看当前可执行文件包含哪些包、样式,以及是否带 MPI
lmp -h | less # 搜索 "Installed packages" 与 "pair styles"
# CMake 构建:缺哪个包就加对应的 -D PKG_xxx=on,然后必须重新编译
cmake -S cmake -B build -D PKG_MANYBODY=on -D PKG_KSPACE=on -D PKG_MOLECULE=on -D BUILD_MPI=on
cmake --build build -j 8
# 传统 make:装包和编译必须分两条命令
cd src
make yes-manybody yes-kspace
make mpi -j 8 # 生成 lmp_mpi;写成 "make yes-manybody mpi" 不会生效
并行与 Windows
REM Windows 下 MSMPI 版 LAMMPS 的并行运行方式
REM 先用 dir 确认输入文件的完整文件名(资源管理器默认隐藏扩展名)
dir
mpiexec -localonly 4 lmp -in in.CHO.lmp
REM 不加 -screen none,否则真正的 ERROR 行不会显示在终端
job aborted: [ranks] message ... abort code 1
这是 MS-MPI 的汇总信息,说明 LAMMPS 自己报错退出了。真正原因在终端或 log.lammps 中的 ERROR 行。用了 -screen none 时终端不会显示 ERROR。论坛中有用户为此排查 MS-MPI 四天,实际原因是输入文件叫 in.CHO.lmp,命令里写成了 -in in.CHO。
找不到 msmpi.dll
官方 Windows 安装包中只有 LAMMPS-MSMPI 版本支持 MPI 并行,它需要另外安装微软的 msmpisetup.exe 并重启。msmpisdk.msi 只在用 Visual Studio 从源码编译时需要。只想多线程加速时,用非 MSMPI 版加 -pk omp 4 -sf omp 即可。
MSMPI 版输出迟迟不出现
MPI 并行模式下屏幕输出是块缓冲的,攒够一定字节才显示,这是官方说明的已知行为,不代表卡死。
Linux 上单核正常、多核报错
单核时没有区域分解,所有原子都能访问,问题被掩盖。多核报 Lost atoms 或 Out of range 说明动力学本身有问题。两种分解得到的能量相差很大时,两个结果都不可信。
MPI_ABORT 出现在 OpenMPI 层
lmp -h 会显示可执行文件链接的 MPI 版本。确认是 MPI 库本身的问题、而本机只需串行时,可用 -D BUILD_MPI=off 重新配置。
不报错
单位默认值:units real 时 timestep 默认 1.0 fs、skin 2.0 Å;units metal 时 timestep 默认 0.001 ps、skin 2.0 Å。把 real 输入改成 metal 而保留 timestep 1.0,时间步会变成 1 ps,放大 1000 倍。ReaxFF 势使用 real,多数 EAM 与 Tersoff 势文件使用 metal。
| 现象 | 常见原因 | 检查与修改 |
|---|---|---|
| 进程占满 CPU,但长时间没有新输出 | thermo 未设置(只在首末步输出);MPI 下输出被缓冲;体系大且用了 pppm、ewald 这类不随原子数线性扩展的方法 | 设置 thermo 100;用 -nb 复跑;先用小体系测出每步耗时再外推 |
| 确实停在某一步不动 | 某个值变成 NaN 后循环无法退出,或程序缺陷 | 用 gdb -p 进程号 附加到进程,输入 where 获取调用栈,附在求助帖中 |
| NVE 下总能量单向漂移 | 时间步过大,或邻居列表重建过晚 | 步长减半对比漂移量;查看 Dangerous builds |
| 温度越跑越高 | Tdamp 过小或单位换算错;控温组与积分组不一致;同一原子被两个积分 fix 重复积分 | 检查 One or more atoms are time integrated more than once 警告;Tdamp 取约 100 步 |
| 能量、压力数值大几个数量级 | units metal 与 real 混用:eV 与 kcal/mol 相差约 23 倍,bar 与 atm 也不同 | 核对 pair_coeff 参数来源的单位;势文件带 UNITS: 标签时单位不符会直接报错,没有标签的不会 |
| 时间步被悄悄改掉 | timestep 写在 units 之前,units 会把它重置为默认值 | 搜索日志中的 WARNING: Changing timestep from 2 to 1 due to changing units to real 一类警告(本页实测原文);把 timestep 放在 units 之后 |
| 相同输入、不同核数结果不同 | 数值舍入导致轨迹在几百到几千步后分叉;用 create_atoms 建模时原子编号随核数变化,velocity 给同一原子分配的速度也随之不同 | 比较统计平均值,不逐步比较数值;需要初始速度与核数无关时,velocity 命令加 loop geom |
流程
# 最小复现:从出错的 restart 或 data 开始,只保留触发报错必需的命令
units real
atom_style full
read_data small.data # 用 replicate 前的最小单胞或删掉大部分溶剂
pair_style lj/cut/coul/long 10.0
kspace_style pppm 1.0e-4
include ff.params # 力场参数单独放一个文件,方便对照
thermo 1
thermo_style custom step temp pe press vol
dump d1 all custom 1 dump.min id type x y z fx fy fz
fix f1 all nve
run 200 # 能在几百步内复现即可
- 01
读完整条报错
记下报错原文、ERROR 还是 ERROR on proc N、源码位置和 err 编号,打开对应官方解释。往前看所有 WARNING,运行中途的 WARNING 只打印到屏幕,不进 log 文件。
- 02
确认是输入阶段还是运行阶段
box 定义前后、run 之前出错,多为语法、命令顺序或 data 文件问题。run 中途出错,多为动力学问题。
- 03
缩小间隔,找异常起点
thermo 设为 1 到 10,输出 pe、press、temp、lx。dump 每 1 到 10 步写一次,用 dump_modify delay 只记录出错前的一段。
- 04
做最小复现
用小体系、单核、最少的命令复现同一报错。小体系几百步内出错,修改一次只需几分钟。
- 05
单变量修改
每次只改一处:先 minimize,再查单位和参数,再改时间步,最后才调邻居列表。同时改多处会让你不知道真正的原因。
- 06
确认修好
报错消失不等于结果可信。至少跑一段 NVE 看能量是否守恒,并检查 Dangerous builds 为 0。
中文社区高频
这一节的条目来自知乎和计算化学公社上流传较广的 LAMMPS 报错汇总帖与求助帖,已用 LAMMPS 22Jul2025 update6(conda-forge CPU 版)实测,或按当前源码和文档核对。
# ReaxFF 稀疏体系或多核运行时报 hbondchk failed / bondchk failed 的三种处理
# 1) 加大预分配(默认 safezone 1.2、mincap 50、minhbonds 25),内存占用随之增加
pair_style reaxff NULL safezone 1.6 mincap 100 minhbonds 50
pair_coeff * * ffield.reax C H O N
# 2) 改用 KOKKOS 版 ReaxFF(纯 CPU 编译的 KOKKOS 也可以),不用 safezone 等关键字
# mpirun -np 4 lmp -k on -sf kk -in in.reaxff
# 3) 与非 ReaxFF 势混用时,只对 ReaxFF 原子做电荷平衡
# pair_style hybrid reaxff NULL lj/cut 10.0
# pair_coeff * * reaxff ffield.reax C H O NULL
# group reax type 1 2 3
# fix qeq reax qeq/reaxff 1 0.0 10.0 1.0e-6 reaxff maxiter 500
step N: hbondchk failed 或 bondchk failed(err0018)
ReaxFF 按当前体系加一个安全系数预分配键和氢键列表。反应剧烈、体系稀疏或每个进程分到的原子很少时,列表会溢出。本页实测:8 个 RDX 分子(168 个原子)放进边长 120 Å 的周期盒子,3000 K NVT、步长 0.25 fs,默认设置下 1 个进程在第 13617 步、2 个进程在第 13014 步、8 个进程在第 5219 步报 hbondchk failed。改成 safezone 1.6 mincap 100 minhbonds 50 后,1 个和 8 个进程都跑完 2 万步。官方给出的另外两种办法是把长 run 拆成多段,或改用 KOKKOS 版 ReaxFF。本页把同一体系拆成 20 段、每段 1000 步,用 8 个进程运行,仍在第 3000 到 4000 步之间出现段错误,所以拆段不一定够用。
ReaxFF 每个进程分到的原子太少
知乎上的 LAMMPS 报错汇总帖给出的经验值是 ReaxFF 每个核至少 100 个原子,300 到 500 个更合适;计算化学公社的一个热解求助帖中,反复出现的 lost atoms 在作者换了核数后消失。核数多不一定更快:上面的 168 原子稀疏体系加大 safezone 后,在同一台机器上 1 个进程跑 2 万步用 8.0 s,8 个进程用 111.5 s。小体系先用 1 到 2 个进程测出每步耗时,再决定是否加核。
Fix qeq/reaxff CG convergence failed after N iterations
这是警告,表示电荷平衡在 maxiter 次迭代内没有收敛,默认 maxiter 为 200,可在 fix 末尾写 maxiter 500 加大。中文汇总帖建议写 warn no 关闭警告,这个写法在当前版本直接报 ERROR: Illegal fix qeq/reaxff command(本页实测);关闭警告的关键字是 nowarn。官方文档说明 nowarn 用于需要固定迭代次数的串并行对比;警告在运行中持续出现时,先按前文排查体系是否已经不稳定。
ReaxFF 与其他势混用(pair_style hybrid)
pair_coeff 中不用 ReaxFF 的类型写 NULL 占位。fix qeq/reaxff 只作用于 ReaxFF 原子组成的 group:对 all 做电荷平衡时,没有 QEq 参数的类型会触发 No QEq parameters for atom type N provided by pair reaxff,组内总电荷不为零时给出 Fix qeq/reaxff group is not charge neutral 警告。不需要电荷平衡时,用 pair_style reaxff NULL checkqeq no 关闭检查,此时使用 data 文件中的静态电荷。
Triclinic box skew is too large 与 box tilt large
中文汇总帖对这条报错的处理方法是在脚本中加 box tilt large。22Dec2022 版起 box 命令已移除,倾斜量超过盒长一半时只给出 WARNING: Triclinic box skew is large. LAMMPS will run inefficiently.,计算照常进行。本页实测 22Jul2025:xy 倾斜为盒长的 2.5 倍时同样只有这条警告;脚本里保留 box tilt large 只会打印 The 'box' command has been removed and will be ignored。仍然报 skew too large 的,用的是 2022 年以前的版本。
交给 Agent
指令示例:“这是我的 in.npt、system.data 和报错日志,运行到第 3200 步报 Out of range atoms - cannot compute PPPM。请复现报错,按最小化、单位和参数、时间步、邻居列表的顺序逐项排查,每次只改一处,找到原因后给出修改后的输入文件和一段 NVE 能量守恒检查。”
智能体会执行的步骤:在预装 LAMMPS 2025.07.22 GPU 版的环境中复现报错;缩小 thermo 和 dump 间隔定位异常起点;做最小复现;逐项修改并重跑;对修改后的输入跑能量守恒检查,并对结果做对抗审阅。
产出文件:修改后的 in 文件、每轮排查的 log 与 dump、Dangerous builds 统计和能量漂移数据,以及一份说明原因与修改依据的记录。
你仍需自己核对:力场和势函数是否适用于你的体系,单位与参数来源是否一致,以及修改后的时间步、控温控压参数是否满足论文中要分析的物理量。
求助
LAMMPS 官方求助渠道是 MatSci 社区论坛的 LAMMPS 分区。开发者对缺信息的帖子通常只会回复“请附上完整输入”。
- LAMMPS 版本(log 第一行,例如 LAMMPS (22 Jul 2025))和平台,以及 lmp -h 中的已安装包与 MPI 信息
- 完整报错原文,包括源码位置和 err 编号,不要截图
- 能直接运行的完整输入:in 文件、data 文件、势函数文件,打包成 zip;尽量不用二进制 restart 文件
- 尽量小的复现体系:最少原子数、最少进程数、最短运行步数
- 运行命令(mpirun -np 4 lmp -in ...、是否用了 -sf gpu 或 -k on)
- 报错前若干步的 thermo 输出
- 已经试过的修改和各自结果,例如“时间步从 1 fs 降到 0.5 fs 后报错从第 3200 步推迟到第 9000 步”
- 单核与多核运行结果是否一致
- 先搜索论坛历史帖:Out of range atoms 是论坛中被问得最多的问题之一
参考资料
- LAMMPS 文档:Errors and warnings details — err0001–err0039 各条报错的官方解释与通用排查建议
- LAMMPS 文档:Common issues that are often regarded as bugs — Invalid style、-nb 关闭缓冲、跨平台结果差异
- LAMMPS 文档:Debugging crashes / appears to be stuck — gdb 获取调用栈、卡住的几类原因
- LAMMPS 文档:Error messages — Invalid atom ID 等短报错的说明
- LAMMPS 文档:thermo_modify — lost、lost/bond 关键字的取值与默认值
- LAMMPS 文档:neigh_modify — one、page、binsize 默认值
- LAMMPS 文档:units — 各单位制的默认时间步和 skin
- LAMMPS 文档:fix nvt/npt — Tdamp 约 100 步、Pdamp 约 1000 步的建议
- LAMMPS 文档:Running LAMMPS on Windows — MS-MPI 安装与 mpiexec 用法
- LAMMPS 文档:Include packages in build — 装包后必须重新编译、make 不能同时装包和编译
- LAMMPS 源码 stable_22Jul2025 — 报错原文、errorurl 编号、units 重置时间步的行为
- MatSci:Tracing atom that causes Out of range atoms — 经验帖:Dangerous builds 对比测试与时间步经验值(开发者回复)
- MatSci:Out of range atoms - cannot compute PPPM (pppm.cpp:1887) — 经验帖:Out of range 针对并行子区域(开发者回复)
- MatSci:ERROR: Lost atoms — 经验帖:壁势过近导致丢失原子,不同区域分解结果不可信
- MatSci:MSMPI 版 LAMMPS 报 job aborted — 经验帖:输入文件扩展名被隐藏导致的 job aborted
- CSDN:Out of range atoms - cannot compute PPPM 原因分析及解决办法 — 经验帖:按原子速度分两种情况处理 PPPM 报错
- MatSci:Lost Atoms When I Changed the LAMMPS Version — 经验帖:换版本后出现 Lost atoms 的解释
- 知乎:lammps 报错情况汇总 — 经验帖:box tilt large、hbonds 与每核原子数、qeq 警告、ReaxFF 混合势等条目
- 计算化学公社:LAMMPS 反应力场模拟出现 lost atoms 报错如何解决 — 经验帖:ReaxFF 热解换核数后不再丢原子
- LAMMPS 文档:pair_style reaxff — safezone、mincap、minhbonds 默认值,KOKKOS 版与拆段的建议,checkqeq
- LAMMPS 文档:fix qeq/reaxff — maxiter 默认 200、nowarn 关键字、组内电荷须为零
- LAMMPS 文档:Removed commands and packages — box 命令于 22Dec2022 移除