LAMMPS 常见报错对照手册
LAMMPS 的报错通常带源码位置((src/thermo.cpp:812)),但不会告诉你哪一行输入错了。本页按原文整理 16 条。
本页只是三本之一。全部条目(VASP 24 条、Gaussian 19 条、LAMMPS 16 条)汇总在 报错速查页,可以拿日志里那行字直接找。
用法:把 log 里 ERROR: 之后那半句粘到本页搜索。资源类问题先看 内存估算器;要不要上 GPU,看 LAMMPS 的 GPU 加速边界。
输入与数据文件
在说什么 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。
在说什么 势函数文件找不到。
为什么 路径是相对当前工作目录的——你在别的目录提交任务,相对路径就失效了。
怎么改 一律写绝对路径:pair_coeff * * /scratch/pot/Si.sw Si;或把势文件放任务目录。LAMMPS 不会去别处搜。
在说什么 输入脚本或辅助文件打不开。
为什么 文件名拼错、路径相对、文件权限不对;或路径里有空格没加引号。
怎么改 用 ls -l 确认文件存在;脚本里统一用绝对路径;带空格的路径加引号。
力场与系数
在说什么 有原子类型没拿到 pair 系数。
为什么 多元素或混合体系里只给了一部分;或元素顺序与 data 文件里的 type 不对应(type 1 是 Si 还是 O,很容易搞反)。
怎么改 用 pair_coeff * * 一次给全,或逐个 type 给;先用 dump 或 print 确认每种 type 对应的元素。混合体系要用 pair_style hybrid,且每个子样式单独给系数。
在说什么 这个功能没编译进你的可执行文件。
为什么 manybody、reaxff、meam、mliap、kokkos、gpu 等都在可选包里,默认不编。
怎么改 回到源码目录 make yes-包名 再 make 目标;已装好的二进制可先 lmp -h | grep -i 包名 看是否支持。
在说什么 给系数时引用了不存在的原子类型,或格式不对。
为什么 data 文件里 type 只有 1、2,但命令里写了 3;或 manybody 势要求系数个数与元素数一致。
怎么改 核对 data 文件里的类型数(grep -A2 Masses 你的.data),系数行按类型顺序逐个给。
邻居列表与盒子
在说什么 有原子飞出了模拟盒,程序拒绝继续。
为什么 四类原因:时间步长太大、初始结构有原子重叠、边界条件设错(本该 pbc 却用 fixed)、温度远超合理值。
怎么改 先 minimize 再跑;dt 从 0.5 fs 起;检查 boundary 设置;用 velocity create 后先跑 100 步 NVE 看温度是否正常,丢原子会立刻暴露。
在说什么 长程静电的 PPPM 网格范围里找不到原子。
为什么 原子移动过快或超出 PPPM 允许的位移(超过盒子网格),通常是 dt 太大或约束没加。
怎么改 加 comm_modify vel yes;减小 dt;增大 neighbor skin(neighbor 2.0 bin);必要时改 kspace_modify 的网格。
在说什么 力场截断半径大于盒子边长的一半。
为什么 建盒时没考虑截断:cutoff 10 埃要求盒边长至少 20 埃(有分子还要加尺寸)。
怎么改 放大盒子(create_box 前规划好尺寸),或减小 pair 的 cutoff;不要靠 fix 硬撑。
在说什么 邻居列表或分箱溢出。
为什么 密度极高、neighbor skin 太小、或并行分区与 bin 尺寸冲突。
怎么改 加大 neighbor 2.0 bin;用 neigh_modify delay 0 every 1 check yes 频繁重建;极端密度下换 atom_modify sort 调优。
并行与加速包
在说什么 某个进程报错后主动终止了整个任务。
为什么 真正的错误信息在 MPI_ABORT 之前——通常就在 rank 0 的日志前面几行。
怎么改 搜 log 里第一个 ERROR:,不要从 MPI_ABORT 往下看;打开 -echo screen 与 -log 看哪条命令最先失败。
在说什么 加了 -sf gpu/-k on g,但可执行文件没编进 GPU/KOKKOS 包。
为什么 用的是发行版或别人编的二进制,只含基础包。
怎么改 lmp -h | grep -i -E 'gpu|kokkos' 先确认;没有就自己编(make yes-gpu / yes-kokkos)或用官方 GPU 镜像。云上买 GPU 实例却跑 CPU 版,是最常见的白花钱方式。
在说什么 进程数超过可用核数。
为什么 -np 按物理机核数写,但容器或 cgroup 限了 CPU;或跨节点没给 hostfile。
怎么改 nproc 看实际可用;容器里注意 CPU 限额;跨节点用 --hostfile。
稳定性与资源
在说什么 某根化学键的原子跑到了别的进程分区,找不到配对。
为什么 原子跑得太远(键被拉伸到断裂),本质和 Lost atoms 同源:dt 太大或势参数不合适。
怎么改 同 Lost atoms 的处理;分子体系还要检查 bond 系数是否给了(bond_coeff),缺系数会算出离谱的力。
在说什么 内存不够。
为什么 体系原子数 × 邻居数 × 每原子开销估小了;neighbor skin 加大也会显著涨内存。
怎么改 按每原子 300~800 字节估(含邻居表与通信缓冲);dmesg | grep -i killed 确认是否 OOM;减邻居 skin 或换更大内存实例。
在说什么 输入脚本语法或参数类型不对。
为什么 变量没展开($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。