排查

LAMMPS 常见报错对照手册

LAMMPS 的报错通常带源码位置((src/thermo.cpp:812)),但不会告诉你哪一行输入错了。本页按原文整理 16 条。

本页只是三本之一。全部条目(VASP 24 条、Gaussian 19 条、LAMMPS 16 条)汇总在 报错速查页,可以拿日志里那行字直接找。

用法:把 log 里 ERROR: 之后那半句粘到本页搜索。资源类问题先看 内存估算器;要不要上 GPU,看 LAMMPS 的 GPU 加速边界。

输入与数据文件

ERROR: Incorrect atom format in data file

在说什么 data 文件里的原子行列数和你声明的 atom_style 对不上。

为什么 最常见:用 atom_style atomic(每行 5 列)读了 atom_style full(7 列以上)的 data 文件,或反过来。也有 data 文件里多了一列 image flag 的情况。

怎么改 先看 head -20 你的.data 数一遍列数,再确认输入里 atom_style 是哪一种;分子体系要 atom_style full 并保证 data 文件带 charge 与分子 ID。

ERROR: Could not find potential file(或 Cannot open potential file)

在说什么 势函数文件找不到。

为什么 路径是相对当前工作目录的——你在别的目录提交任务,相对路径就失效了。

怎么改 一律写绝对路径:pair_coeff * * /scratch/pot/Si.sw Si;或把势文件放任务目录。LAMMPS 不会去别处搜。

ERROR: Cannot open input script / file(或 Reading data file failed)

在说什么 输入脚本或辅助文件打不开。

为什么 文件名拼错、路径相对、文件权限不对;或路径里有空格没加引号。

怎么改 用 ls -l 确认文件存在;脚本里统一用绝对路径;带空格的路径加引号。

力场与系数

ERROR: All pair coeffs are not set

在说什么 有原子类型没拿到 pair 系数。

为什么 多元素或混合体系里只给了一部分;或元素顺序与 data 文件里的 type 不对应(type 1 是 Si 还是 O,很容易搞反)。

怎么改 用 pair_coeff * * 一次给全,或逐个 type 给;先用 dump 或 print 确认每种 type 对应的元素。混合体系要用 pair_style hybrid,且每个子样式单独给系数。

ERROR: Unknown pair style(或 Unknown fix/compute style)

在说什么 这个功能没编译进你的可执行文件。

为什么 manybody、reaxff、meam、mliap、kokkos、gpu 等都在可选包里,默认不编。

怎么改 回到源码目录 make yes-包名 再 make 目标;已装好的二进制可先 lmp -h | grep -i 包名 看是否支持。

ERROR: Pair coeff for atom type ... not found(或 Illegal pair_coeff command)

在说什么 给系数时引用了不存在的原子类型,或格式不对。

为什么 data 文件里 type 只有 1、2,但命令里写了 3;或 manybody 势要求系数个数与元素数一致。

怎么改 核对 data 文件里的类型数(grep -A2 Masses 你的.data),系数行按类型顺序逐个给。

邻居列表与盒子

ERROR: Lost atoms: original N current M (src/thermo.cpp)

在说什么 有原子飞出了模拟盒,程序拒绝继续。

为什么 四类原因:时间步长太大、初始结构有原子重叠、边界条件设错(本该 pbc 却用 fixed)、温度远超合理值。

怎么改 先 minimize 再跑;dt 从 0.5 fs 起;检查 boundary 设置;用 velocity create 后先跑 100 步 NVE 看温度是否正常,丢原子会立刻暴露。

ERROR: Out of range atoms - cannot compute PPPM

在说什么 长程静电的 PPPM 网格范围里找不到原子。

为什么 原子移动过快或超出 PPPM 允许的位移(超过盒子网格),通常是 dt 太大或约束没加。

怎么改 加 comm_modify vel yes;减小 dt;增大 neighbor skin(neighbor 2.0 bin);必要时改 kspace_modify 的网格。

ERROR: Domain too small(或 Cannot use force cutoff larger than half box)

在说什么 力场截断半径大于盒子边长的一半。

为什么 建盒时没考虑截断:cutoff 10 埃要求盒边长至少 20 埃(有分子还要加尺寸)。

怎么改 放大盒子(create_box 前规划好尺寸),或减小 pair 的 cutoff;不要靠 fix 硬撑。

ERROR: Too many neighbor bins(或 Neighbor list overflow)

在说什么 邻居列表或分箱溢出。

为什么 密度极高、neighbor skin 太小、或并行分区与 bin 尺寸冲突。

怎么改 加大 neighbor 2.0 bin;用 neigh_modify delay 0 every 1 check yes 频繁重建;极端密度下换 atom_modify sort 调优。

并行与加速包

MPI_ABORT was invoked on rank 0 ...(后面一堆堆栈)

在说什么 某个进程报错后主动终止了整个任务。

为什么 真正的错误信息在 MPI_ABORT 之前——通常就在 rank 0 的日志前面几行。

怎么改 搜 log 里第一个 ERROR:,不要从 MPI_ABORT 往下看;打开 -echo screen 与 -log 看哪条命令最先失败。

ERROR: KOKKOS package requires a KOKKOS-enabled build(或 GPU 相关报错)

在说什么 加了 -sf gpu/-k on g,但可执行文件没编进 GPU/KOKKOS 包。

为什么 用的是发行版或别人编的二进制,只含基础包。

怎么改 lmp -h | grep -i -E 'gpu|kokkos' 先确认;没有就自己编(make yes-gpu / yes-kokkos)或用官方 GPU 镜像。云上买 GPU 实例却跑 CPU 版,是最常见的白花钱方式。

ERROR: There are not enough slots available(或 mpirun 起不来)

在说什么 进程数超过可用核数。

为什么 -np 按物理机核数写,但容器或 cgroup 限了 CPU;或跨节点没给 hostfile。

怎么改 nproc 看实际可用;容器里注意 CPU 限额;跨节点用 --hostfile。

稳定性与资源

ERROR: Bond atoms 123 456 missing on proc 0 at step ...

在说什么 某根化学键的原子跑到了别的进程分区,找不到配对。

为什么 原子跑得太远(键被拉伸到断裂),本质和 Lost atoms 同源:dt 太大或势参数不合适。

怎么改 同 Lost atoms 的处理;分子体系还要检查 bond 系数是否给了(bond_coeff),缺系数会算出离谱的力。

ERROR: Insufficient memory(或进程被内核杀掉)

在说什么 内存不够。

为什么 体系原子数 × 邻居数 × 每原子开销估小了;neighbor skin 加大也会显著涨内存。

怎么改 按每原子 300~800 字节估(含邻居表与通信缓冲);dmesg | grep -i killed 确认是否 OOM;减邻居 skin 或换更大内存实例。

ERROR: Non-numeric argument / Illegal ... command

在说什么 输入脚本语法或参数类型不对。

为什么 变量没展开($x 为空)、单位写错、行内有隐藏字符(从网页复制的空格)。

怎么改 用 -echo both 看实际解析到的行;cat -A 输入文件 查不可见字符;变量用 variable 显式定义。

本页依据 LAMMPS 稳定版(stable)的报错文本与常见原因整理;不同版本措辞与源码行号会变化,请以你 log 里的原文为准。

通用的三条排查习惯

① 先 minimize 再跑动力学:绝大多数 Lost atoms / Bond atoms missing 都是初始结构有重叠、一跑就炸。先能量最小化,看势能是不是负的合理值。
② 先串行跑 100 步:lmp -in in.file 不加 -np,跑短步数。串行能过、并行不能过,问题在通信与邻居列表,不在物理。
③ 把 dt 砍到 0.5 fs 试一次:如果 0.5 fs 能跑、2 fs 崩,就是时间步长与力场不匹配(尤其是含氢体系、反应力场)。

配套阅读:五万原子以下 GPU 值不值、GPU 实例价格与五个坑、其他手册:VASP、Gaussian。