示例 18a:故意出错的 Gaussian 输入与修正版本¶
目的¶
每个 err_* 文件只包含一个典型错误,配有修正后的版本。运行它们(都只需几秒)可以亲眼看到报错出现在哪个 Link、真正的错误信息在日志的什么位置,从而学会第18章“从日志末尾往上找”的排错方法。
对应教程:第18章 常见报错排查大全与完整研究流程案例(第 3–7 节)。
文件说明¶
| 文件 | 故意制造的错误 | 预期报错(Link) | 修正版 |
|---|---|---|---|
err_l301_wrong_multiplicity.gjf |
CH₃ 自由基(9 个电子)写成 0 1 |
L301:The combination of multiplicity 1 and 9 electrons is impossible. |
err_l301_wrong_multiplicity_fixed.gjf:0 2 + UB3LYP |
err_l101_missing_blank_line.gjf.txt |
坐标最后一行之后没有空行,文件直接结束 | L101:End of file in ZSymb. |
err_l101_fixed.gjf |
err_l1_qperr_route.gjf |
route 中 Opt=(MaxCycles=100 括号未闭合 |
L1:QPErr --- A syntax error was detected in the input line. |
改为 Opt=(MaxCycles=100) Freq |
err_l301_m062x_gd3bj.gjf |
M06-2X 搭配 EmpiricalDispersion=GD3BJ(Gaussian 中没有该组合的参数) |
L301:R6DS8: Unable to choose the S8 parameter |
err_l301_m062x_gd3_fixed.gjf:改用 GD3 |
err_genecp_bad_format.gjf |
[PdCl₄]²⁻ 用了 GenECP,但只写了基组段,缺少 ECP 段 |
L301:读取 ECP 时遇到文件结尾,通常为 EOF while reading ECP pointer card. |
err_genecp_fixed.gjf:补上 Pd 0 / LANL2DZ ECP 段 |
err_l502_hard_scf_fixed.gjf |
不是错误文件,而是难收敛 SCF 的“标准处理流程”:高自旋 [FeCl₄]⁻(S = 5/2),小基组 SCF=XQC + Stable=Opt,再 Guess=Read 到大基组 |
— | — |
run_error_cases.sh |
依次运行所有 err_*.gjf,打印失败的 Link 和其上方的几行真正的错误信息 |
为什么 L101 的例子是 .gjf.txt:本仓库的检查工具要求所有 .gjf 以空行结尾,编辑器也常常会“顺手”补上空行。把这个故意出错的文件存为 .txt,可以保证它保持“错误”的状态;run_error_cases.sh 运行前会复制成 .gjf。
运行步骤¶
cd Gaussian/examples/18-error-cases
source $g16root/g16/bsd/g16.profile # or: module load gaussian/16-C.02
bash run_error_cases.sh | tee error_summary.txt
# run a single case by hand
g16 < err_l301_wrong_multiplicity.gjf > err_l301_wrong_multiplicity.log
tail -n 20 err_l301_wrong_multiplicity.log
# the hard-SCF recipe (8 cores, 8 GB as written in the file)
g16 < err_l502_hard_scf_fixed.gjf > err_l502_hard_scf_fixed.log
这些作业都很小,可以在交互节点或自己的工作站上运行;请不要在共享的登录节点上运行任何计算。
预期结果 / 如何检查¶
| 检查项 | 命令 | 期望 |
|---|---|---|
| 出错的 Link | grep "Error termination" err_*.log |
分别为 l301.exe、l101.exe、l1.exe、l301.exe、l301.exe |
| 真正的错误信息 | grep -B 8 "Error termination" err_l301_wrong_multiplicity.log |
在 Error termination 之上几行能看到具体原因 |
| 修正版正常结束 | tail -n 1 err_*_fixed.log |
Normal termination of Gaussian 16 |
| CH₃ 双重态自旋污染 | grep "S\*\*2" err_l301_wrong_multiplicity_fixed.log |
<S**2> 应接近 S(S+1) = 0.75 |
| [FeCl₄]⁻ 稳定性 | grep -i "stable" err_l502_hard_scf_fixed.log |
第 1 步结束时波函数稳定 |
| [FeCl₄]⁻ 自旋污染 | grep "S\*\*2" err_l502_hard_scf_fixed.log |
应接近 S(S+1) = 8.75 |
报错信息的确切文字可能随 Gaussian 修订版本略有差异;本仓库没有附带运行日志,请以你自己的输出为准。仓库脚本 g16_error_doctor.py 可以自动识别这些报错并给出中文建议(python ../../scripts/g16_error_doctor.py -h 查看用法)。
注意事项¶
- 电子数奇偶检查:电子数 = 各原子序数之和 − 总电荷。电子数为奇数时多重度只能是 2、4、6……;为偶数时只能是 1、3、5……。使用赝势时仍按全部电子计数。
GenECP输入的三条规则:每个元素块以****结束;基组段与 ECP 段之间空一行;整个文件以空行结束。分子中出现的每种元素都要在基组段中出现且只出现一次。err_l502_hard_scf_fixed.gjf只演示处理流程,不保证 [FeCl₄]⁻ 在默认设置下一定不收敛。真实体系 SCF 不收敛时,先检查电荷、多重度和结构是否合理,再按教程中的顺序尝试SCF=XQC、Guess=Read、SCF=VShift、SCF=Fermi等方法,不要只把MaxCycle调大。- 想检查 route 语法而不真正运行,可以用 Gaussian 自带的
testrt工具(见第18章)。