Ex3.9 VASP 的输出文件 ERROR_CAR

在本节中,我们将学习 VASP 输出中的一个“非标准”但非常关键的调试类输出文件:ERROR_CAR(这里是一个总称,不是一个正式文件名)。它指的是与 VASP 报错相关的输出文件集合,用于帮助你分析计算失败的原因。

一、什么是 “ERROR_CAR”?

在正常运行 VASP 时,输出文件中不会有明显报错,这当然是最理想的。但常在河边走,怎能不湿鞋?
无论你是新手还是老手,VASP 中止总有发生 —— 有时是输入设置有误,有时是服务器资源或运行环境出现问题。
这时我们就需要依靠这类“错误信息输出文件”来定位问题并进行修复。

我们将这类报错信息所在的文件统称为 ERROR_CAR,包含但不限于:

  • VASP 自身的标准输出(如 vasp.out
  • 调度系统(如 Slurm)生成的标准输出和错误输出文件(如 *.out.%j, *.err.%j

二、Slurm 脚本中的输出设置示例

以下本人使用 Slurm 提交 VASP 作业的脚本:

#!/bin/bash
#SBATCH --job-name=vasp_test
#SBATCH --time=20:30:00
#SBATCH --nodes=1
#SBATCH --ntasks-per-node=32
#SBATCH --mem=64G
#SBATCH --output=gamout.%j     # 标准输出
#SBATCH --error=gamerr.%j      # 标准错误输出

module purge
module load intel

BIN='/home/bigbrosci/bin/vasp.6.4.2/bin/vasp_gam'
mpirun $BIN &> vasp.out        # 将 VASP 的 stdout 和 stderr 一起写入 vasp.out

提交后,会生成以下文件:

文件名 内容类别 说明
gamout.[jobID] 标准输出 包含 Slurm 的常规作业信息,部分 MPI 报错也会出现在这里
gamerr.[jobID] 错误输出 包含系统级错误、MPI 崩溃信息等
vasp.out VASP 主输出 包含 INCAR 设置、电子迭代、错误报告等详细内容

这三类文件综合起来,就是你分析出错的“黑匣子记录”,我们将它们统称为 ERROR_CAR

三、如何使用这些输出文件排查问题?

现象 建议检查文件 可能原因举例
作业秒退,无任何输出 gamerr.*, gamout.* 节点调度错误、MPI 环境未配置
报错信息包含“ZBRENT: fatal error” vasp.out 结构优化失败
报错信息在 gamerr.* gamerr.* 服务器内存不足、MPI 通讯崩溃等外部错误

当然,VASP的报错千奇百怪,我们就不一一列举了,后面你会接触很多。这里只是简单提供一个指导的作用,告诉你出错后该去哪里找错误信息的输出文件。

四、建议做法

  • 每次提交作业前,确保清空旧的 vasp.out 和 Slurm 输出文件,避免混淆;
  • 如果 VASP 崩溃但 vasp.out 没有明显信息,请立即查看 gamerr.*
  • 熟悉 vasp.out 中的迭代信息、错误栈输出等,长期阅读能训练出“第一反应”判断;

五、总结(根据前面的slurm任务脚本)

名称 定义 典型用途
vasp.out VASP 的标准输出 追踪电子结构、自洽信息,报错分析首选
gamout.%j Slurm 的标准输出(stdout) 调度器反馈、运行状态
gamerr.%j Slurm 的标准错误输出(stderr) MPI 错误、内存不足、模块错误等

将这些文件视为 “VASP 错误分析的黑匣子” 是非常有帮助的,值得注意的是,如果你在做一些高通量计算相关的工作,这些错误信息对于你的自动化过程,尤其是自动纠错,保证任务正常进行并完成,尤为重要。做该方向的同学们应该要重视起来。