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