排查

Gaussian 常见报错对照手册

Gaussian 报错只给你一个 link 编号,不给原因。本页按你看到的原文整理 19 条,每条给:这句话在说什么、为什么、怎么改。

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

用法:grep -i -E "Error|Convergence|termination" 你的.log,然后按 Ctrl+F 把报错前半句粘到本页。资源类的报错(内存、磁盘)先看 内存估算器 和 Gaussian 服务器配置。

输入与文件

End of file in reading ...(或 Error termination in NtrErr)

在说什么 程序在读输入文件时提前遇到了文件结尾。

为什么 输入文件末尾缺少空行。Gaussian 要求分子坐标之后必须有恰好一个空行才开始命令行;空行多了或少了一行都读不对。

怎么改 在输入文件最后补一个空行(tail -c 20 你的.gjf | od -c 能看到结尾是不是两个换行)。用 Windows 编辑过的文件还可能有 CRLF 问题,用 dos2unix 处理一下。

Error termination via Lnk1e in /opt/g16/l1.exe

在说什么 l1 在读输入时就失败了。

为什么 最常见是 %chk、%mem、%nprocshared 的行格式不对(% 开头的行必须在最前面、不能有空行隔开),或 %chk 指向的目录没有写权限。

怎么改 把 %chk/%mem/%nprocshared 放在第一段,格式写成 %chk=/scratch/xxx.chk;确认目录存在且可写(touch /scratch/test)。

No such file or directory ... .chk(或 chk 文件读不出)

在说什么 指定的 checkpoint 文件不存在或路径不对。

为什么 %chk 用了相对路径,而任务是从别的目录提交的;或上一轮任务失败没生成 chk。

怎么改 一律写绝对路径;续算前用 ls -l 确认 chk 存在且大小不为 0。

几何优化

Convergence failure -- run terminated.(结尾还有 Error termination request processed by link 9999)

在说什么 优化在给定步数内没有收敛。9999 只是收尾,真正的原因在此之前。

为什么 步数不够(默认约 100 步)、初始结构太差、或每一步的力/位移判据太严(opt=tight)。

怎么改 先 opt=(maxcycle=200);仍不收敛就 opt=(calcfc,maxstep=10) 给小步长并让它自己算 Hessian;初始结构先用分子力学或低精度方法预优化。

Berny optimization failed / Number of steps exceeded, NStep=...

在说什么 Berny 算法认为这个优化已经走不下去了。

为什么 初始结构有严重原子重叠、坐标太差、或者势能面本身不平滑(近简并、强相关体系)。

怎么改 换初始结构(从晶体或实验结构取,或先做 MMFF/UFF 预优化);加 opt=(cartesian);必要时改用 opt=(ef) 或分步走。

Problem with the distance matrix.

在说什么 两个原子之间的距离异常(重叠或过远)。

为什么 结构里有原子几乎重合,或 Z-matrix 里写了不可能的角度/二面角。

怎么改 打开结构看最短距离,小于 0.5 埃就是重叠;从 xyz 重新生成输入,不要手改 Z-matrix。

Large curvature ...(优化在两步之间反复横跳、能量来回抖)

在说什么 RFO/Berny 在曲率很大的方向上迈步过大。

为什么 接近过渡态、或有柔性很大的二面角。

怎么改 opt=(maxstep=5) 或 opt=(quadratic);也可以先用 opt=loose 走到大致谷底,再用 opt=tight 精修。

(不是报错,但结果不能信)Frequencies 里出现虚频

在说什么 频率计算给出负的振动频率,说明这个结构不是能量极小点。

为什么 优化没真正收敛,判据太松;或者它本来就是鞍点。

怎么改 先用 opt=(tight) 重优化,频率必须与 opt 同一理论水平;仍有虚频就沿虚频方向扰动后重优化。

SCF 与电子结构

>>>>>>>>>> Convergence criterion not met.(没有 SCF Done)

在说什么 自洽场迭代到上限仍未收敛。

为什么 初始猜测差、体系近简并(过渡金属、开壳层、双自由基)、或方法与基组组合本身难收敛。

怎么改 阶梯式收敛:scf=(maxcycle=512)、scf=(xqc)、scf=(conver=6);开壳层用 guess=mix;先用小基组(STO-3G/3-21G)跑通再换大基组。

Charge and multiplicity are incompatible. / The combination of charge and multiplicity is impossible

在说什么 你给的电荷与自旋多重度的电子数奇偶不符。

为什么 电子数 = 各原子核电荷之和 − 电荷。偶数必须配单重态或三重态,奇数必须配双重态或四重态。

怎么改 数一遍电子;阴离子和自由基体系最容易算错。加 #p 看输出里的电子数。

Symmetry error(报错里提到 symmetry)

在说什么 程序按对称性处理结构时出了矛盾。

为什么 输入的对称性判断与坐标系不一致,或结构被对称性强行套错。

怎么改 加 nosymm 关掉对称性(慢一些,但不会再因对称性失败);或把坐标写成高精度。

CPHF did not converge(算极化率、频率时出现)

在说什么 耦合微扰 Hartree-Fock 迭代不收敛。

为什么 SCF 本身不够紧,或体系近简并。

怎么改 加 scf=(tight)、int=ultrafine;或先用 scf=(maxcycle=512) 把 SCF 收干净。

内存、磁盘与并行

galloc: could not allocate memory.(或 Unable to allocate memory)

在说什么 程序申请不到你要的内存。

为什么 %mem 写太大(超过物理内存),或与 %nprocshared 的组合让单个进程超限;也可能是 ulimit 限制。

怎么改 先把 %mem 降到物理内存的 60~70% 试;多核任务里 %mem 是总量不是每核;用 free -g 看真实可用,别把 swap 当内存。

进程直接消失、日志无错误、dmesg 里有 Killed process

在说什么 被内核 OOM killer 杀掉。

为什么 内存估小了。Gaussian 的内存需求随基函数数目近似三次增长,大基组加大体系很容易翻倍。

怎么改 用 dmesg | grep -i "killed process" 确认;按基函数数估内存(见 Gaussian 配置);临时办法是降低 %nprocshared 并减小 %mem,让它跑慢一点而不是被杀。

Erroneous Write. Write 0 instead of ...(或 fd = 0)

在说什么 写临时文件(.rwf/.int)失败。

为什么 磁盘满了,或者 ulimit -f 限制了单文件大小。

怎么改 用 df -h $GAUSS_SCRDIR 看空间;把 GAUSS_SCRDIR 指到大容量数据盘;ulimit -f unlimited 后再跑。

No space left on device / disk quota exceeded

在说什么 临时文件把盘写爆了。

为什么 Gaussian 的 .rwf 可以到几十 GB(频率、大基组、IRC 尤其),scratch 却放在系统盘。

怎么改 scratch 必须挂数据盘;频率或 IRC 前先估:基函数数 × 100 字节量级 × 步数。清理旧的 .rwf/.chk 也要纳入日常。

There are not enough slots available(或 %nprocshared 设太大导致极慢/报错)

在说什么 申请的核数超过机器可用核数。

为什么 %nprocshared 写成了别的机器规格;或共享机器时核数被占满。

怎么改 按 nproc 或 lscpu 的实际核数写;共享机器上留 1~2 核给系统。

基组与方法

Standard basis: ... not available for atom ...(或 basis set not found)

在说什么 你选的基组没有为某个元素定义。

为什么 重元素(如 I、Au、Pt)在 Pople 系列基组里常常缺失;或加了弥散/极化函数后该元素没有对应定义。

怎么改 换 def2 系列(def2-SVP/def2-TZVP 覆盖面最全),或对重元素用 LANL2DZ 等含赝势的基组;也可用 gen 混合基组,逐个元素给定义。

Error reading ECP / pseudopotential 相关报错

在说什么 赝势文件读不出来。

为什么 自定义 ECP 的路径不对,或用了需要额外赝势库的元素却没给。

怎么改 内置赝势(LANL2DZ、SDD)不需要额外文件,直接写关键字即可;自定义 ECP 要确认 genecp 段落格式(元素名后紧跟 ECP 定义,末尾再一个空行)。

本页依据 Gaussian 16 的报错文本与常见原因整理;不同版本、不同 link 的措辞可能略有差异,请以你日志里的原文为准。

通用的三步定位

Gaussian 的报错几乎都是某一步没做完、程序把整个任务结束掉,所以顺序永远是先分是数值问题还是环境问题:

① 看报错里的 link 编号:l101/l103 是读输入,l202/l502 是 SCF,l103 之后是几何,l9999 只是收尾。看到 9999 不等于问题在 9999。
② 把一个能跑的小算例原样跑一遍(比如 H2O 的 HF/6-31G* opt)。能跑通说明问题在你的体系或输入;跑不通说明问题在环境(内存、磁盘、路径、并行)。
③ 把并行关掉重跑(去掉 %nprocshared)。单核能过、多核不能过,就是并行或内存分配的问题。

配套阅读:Gaussian 吃多少内存与磁盘、量子化学服务器怎么配、VASP 报错手册。