VASPKIT实战指南:从输入文件到能带与态密度分析
简介:《VASPKIT中文手册1》是一份面向VASP用户的中文PDF手册,适合材料科学、催化研究等领域需要处理VASP输入输出数据的科研人员与初学者。手册系统梳理了VASPKIT这一轻量级预处理/后处理工具的核心功能,从输入文件生成检查、能带与分波态密度计算,到热力学量校正、差分电荷密度绘图、NEB路径处理、虚频校正、能带反折叠、3D能带、费米面及VASP2BoltzTraP接口等均有涉及,并附有用户自定义界面示例。资源共1个PDF文件,压缩包大小2.37MB,内容模块清晰,便于按需查阅。目前已有3564人学习下载。通过这份手册,读者可以快速掌握VASPKIT的菜单操作与典型计算流程,减少第三方脚本和编程门槛,提升VASP计算前后处理的效率。
1. 从VASPKIT说起:材料计算里被低估的预-后处理工具
第一次跑 VASP 能带计算的人,多半会经历同一个夜晚:POSCAR、INCAR、POTCAR、KPOINTS 四个文件一个个排雷,好不容易算完机时,画能带又要写脚本提取本征值、对齐费米能级,稍不留神就是一周白算。VASPKIT 这个运行在 Linux 下的命令行预-后处理工具,恰好把这条链路收拢成一个菜单。它由项目维护者与多位贡献者共同维护,用 FORTRAN 写成,几乎不依赖第三方库,体积很小,解压即用,自带 EXAMPLES 测试例子。做催化、光学、材料和半导体的人都能用它生成输入文件、处理能带、态密度、电荷密度乃至 NEB 路径。对新用户它是避坑手册,对熟手它是批量操作的瑞士军刀——这正是值得拆这份中文手册的原因。
2. 配置与启动:让 vaspkit 第一次运行就成功
2.1 环境变量文件 ~/.vaspkit 是唯一的开关
vaspkit 的设计思路很简单:下载解压后不需要编译,但要让它"认识"你的 VASP 环境和赝势库。第一次使用前,把随包附带的配置模板复制到用户目录下:
cp -f how_to_set_environment_variable ~/.vaspkit vi ~/.vaspkit复制后编辑 ~/.vaspkit,这个文件是全局配置的唯一入口。下面是我常用的配置模板及字段含义:
| 字段 | 示例值 | 作用 |
|---|---|---|
| VASP5 | .TRUE. | 声明你用的是 VASP 5.x 还是 4.x,决定 POSCAR 是否读取元素类型行 |
| PBE_PATH | '~/POTCAR/PBE' | PBE 赝势库的存放目录,生成 POTCAR 时从这里找元素赝势 |
| GGA_PATH / LDA_PATH | '~/POTCAR/GGA' 等 | 对应 GGA-PW91 和 LDA 赝势库,按需填写 |
| POTCAR_TYPE | PBE | 默认生成哪种类型的赝势,可切换为 GGA 或 LDA |
| RECOMMENDED_POTCAR | .TRUE. | 为 .TRUE. 时按 VASP 官网推荐选择赝势;为 .FALSE. 时按元素名称直接匹配 |
| MINI_INCAR | .FALSE. | 控制是否写入简化版 INCAR 模板 |
| SET_FERMI_ENERGY_ZERO | .TRUE. | 处理能带时是否自动将费米能级对齐到 0 eV |
| SET_INCAR_WRITE_MODE | OVERRIDE | INCAR 已存在时的处理方式,可改为 APPEND、BACK-UP-OLD、BACK-UP-NEW |
这里最容易翻车的字段是三个赝势路径。vaspkit 生成 POTCAR 时只认路径不认人,路径写错或目录不存在,程序不会当场崩溃,但会在生成环节静默失败,最后你拿到一个不完整的 POTCAR 还找不到原因。建议所有路径写绝对路径,避免 ~ 在某些 shell 环境下的展开歧义。
2.2 PATH 设置、权限与初次启动
为了方便,把 vaspkit 的可执行目录写进 PATH,这样任何目录下都能直接敲 vaspkit 启动:
echo 'export PATH=/home/vaspkit.0.72/bin/:$PATH' >> ~/.bashrc source ~/.bashrc chmod u+x /home/vaspkit.0.72/bin/vaspkit最后一步 chmod 是很多新用户漏掉的动作。解压出来的二进制文件不一定带执行权限,不授权就会出现典型的 Permission denied。加完 PATH 后,在终端输入 vaspkit,会看到字符画主菜单,按数字进入对应功能组。菜单结构不是摆设,它把几十个子任务按结构、电子、电荷、工具分类,记不住任务号也没关系,看菜单逐层进入即可。
2.3 启动失败的两种典型现场
一种是 GLIBC 版本不匹配。出现/lib64/libc.so.6: version 'GLIBC_2.14' not found这类报错,原因是 vaspkit 在较新的 Linux 发行版上编译,你的系统自带的 C 运行库太老。常见的错误做法是升级系统库,这会把整个发行版的依赖关系弄乱。更稳妥的做法是联系维护者获取在低版本系统上编译的版本,或者换一台更新系统的机器运行。
另一种是前文说的权限问题,chmod u+x 即可解决。如果启动后光标卡住没有菜单,多半是终端窗口太小,字符画无法完整绘制,放大窗口或去掉终端最小宽度限制再试。
3. 输入文件生成与检查:INCAR、KPOINTS、POTCAR 的正确打开方式
3.1 四个输入文件的职责,先理清再动手
VASP 计算的四个基本输入文件各有分工:INCAR 是控制参数,告诉 VASP 算什么、怎么算;POSCAR 描述晶格和原子坐标;POTCAR 是赝势,把内层电子替换成势函数;KPOINTS 定义倒空间采样。vaspkit 把输入文件相关的子任务全部整合在功能 1 "VASP Input Files Generator" 下,任务 101 到 109 覆盖 INCAR 定制、KPOINTS 生成、POTCAR 生成、POSCAR 重排和文件检查。
实际操作时,我先准备 POSCAR。最常用的两个来源是:从材料数据库下载 POSCAR 或 CIF 文件;用 VESTA 把 CIF 转成 POSCAR。转出来的文件通常能直接用,但下载的 POSCAR 有时会带制表符或格式瑕疵,这在后面第 5 章会详细说。先把结构文件放到工作目录并改名:
cd ~/vaspkit/examples/ZnO_optimization cp -f ZnO-1811117.vasp POSCAR以纤锌矿 ZnO 为例,这一步做完,工作目录里就有了结构文件。接下来所有输入文件都围绕这个 POSCAR 生成。
3.2 选择 INCAR 模板:参数该由模板管,还是自己管
运行 vaspkit 后输入 1 进入输入文件功能组,再输入 101 选择自定义 INCAR,程序会列出十几个场景化模板,包括 ST 静态计算、SR 标准弛豫、LR 晶格弛豫、HG 磁性质、SO 自旋轨道耦合、H6 HSE06 计算、PU DFT+U、MD 分子动力学、NE NEB 等。
我在做 ZnO 晶格优化时选 LR,此时 vaspkit 生成的 INCAR 会带 PREC = High,因为优化晶胞常数需要更高的截断能。这里有个值得注意的细节:老的 VASP 教程喜欢用 PREC = High 让程序自动抬升截断能,但新版 VASP 官方手册已经不推荐这种做法,更建议 PREC = Accurate 并手动指定 ENCUT。vaspkit 的模板会把 ENCUT 参数注释掉,程序运行时取所有元素 ENMAX 的最大值;一旦你手动取消注释并设定 ENCUT,就以你的值为准。优化晶胞时如果发现晶格常数收敛得很"玄学",先检查 ENCUT 是否真的高于所有元素的 ENMAX。
INCAR 的写入模式由 ~/.vaspkit 里的 SET_INCAR_WRITE_MODE 控制。默认 OVERRIDE 是直接覆盖旧文件;如果不想丢失之前的参数记录,改成 BACK-UP-OLD 会先把旧 INCAR 存一份再写新文件,改成 BACK-UP-NEW 则把新模板写到 INCAR.new,跟旧文件并存。我习惯设为 BACK-UP-OLD,相当于给每次模板生成留一颗后悔药。
3.3 KPOINTS:Gamma-scheme 与 0.04 那个经验值
非能带计算不需要手动设计 K 点路径,vaspkit 任务 102 按照用户给的倒空间分辨率自动撒点。生成界面会按精度给几个参考区间:Low 对应 0.06~0.04,Medium 对应 0.04~0.03,Fine 对应 0.02~0.01,并提示 0.04 一般已经够精确。对大多数半导体和绝缘体,我直接输入 0.04;对金属体系会加密到 0.03 甚至 0.02。
vaspkit # 输入 1 进入 VASP Input Files Generator # 输入 102 选择 Generate KPOINTS File for SCF Calculation # 输入 2 选择 Gamma Scheme # 输入 0.04 作为 KP-Resolved ValueGamma-scheme 适合正交或接近正交的格子,对六方晶系这类含 120 度角的体系也稳定,是比较稳妥的默认选择。vaspkit 不是简单按"每个方向多少 K 点"均匀撒点,而是先算出倒空间三个格矢的长度比例,再按你给的分辨率反推每个方向的 K 点数。经验上判断 K 点够不够密,可以用"K 点数乘实空间对应晶矢量大于 20 埃"这个粗略准则。前人有总结说,对于非正交体系,倒格矢长度和晶常数不满足反比关系,用 ka≈kb≈kc 的经验能不能保证倒空间各方向分辨率一致,vaspkit 按倒空间长度反推的做法更可靠。
生成 KPOINTS 的同时,vaspkit 会根据 POSCAR 里的元素类型自动从赝势库抽取并组合成 POTCAR,前提是 ~/.vaspkit 里的 PBE_PATH 路径指向正确。写入成功后程序会提示 Written POTCAR File with the Recommended Potential,意思是它按 VASP 官网的推荐为每个元素选定了赝势。这一步省了手动 cat 多个 POTCAR 的重复劳动。
3.4 POTCAR 的坑:没有后缀、_pv、_sv、_d 和 _h 怎么选
PBE 赝势目录里同名元素往往有多个版本:无后缀的、带 _pv / _sv / _d 后缀的,还有带数字后缀的。后缀的含义是半芯态也当价电子处理,比如 Zn 的 3d 和 3p 如果参与成键,就得用 Zn_pv。做 Bader 电荷分析时,我用 _pv 或 _sv 版本,因为电荷分析对芯态和价态的边界很敏感,默认赝势容易把本该计入的电荷漏掉。
还有一个官网特别强调的规则:如果化合物里存在 O2、CO、N2、F2、P2、S2、Cl2 这类含短键的二聚体,建议用带 _h 后缀的赝势。实际操作中我一般先用默认推荐势跑一遍,看看对关心的性质影响大不大;如果差异小,就用无后缀版,因为多包含一层价电子意味着更高的截断能和更多机时。想手动指定某个元素的赝势类型,用任务 104,逐个输入元素和你想用的赝势名:
vaspkit # 输入 1 选择 VASP Input Files Generator # 输入 104 选择 Generate POTCAR with User Specified Potential # 按提示先输入 O,再输入 Zn_pv生成后立刻检查:
grep TIT POTCAR grep ENMAX POTCAR第一条确认 POTCAR 里元素的顺序和赝势后缀是否符合预期,第二条确认截断能的上限。选择赝势版本没有绝对对错,本质是精度和机时的权衡,用两种赝势对同一体系做对比测试,比盲目追求高配置更靠谱。
3.5 任务 108 与 109:把格式检查变成强制习惯
vaspkit 0.71 之后加入了任务 109 Check All VASP Files,专门做两件事:纠正 INCAR 和 POSCAR 的格式问题;检查 POTCAR 中的元素类型是否与 POSCAR 一致。相信我,第二点非常重要——VASP 自己不会检查元素一致性,你拿石墨烯配氢的 POTCAR 去算,它也能跑,但结果毫无意义且没人会告诉你说错了。任务 108 则是"一条龙":先定制 INCAR,再设置 K 点密度,生成 KPOINTS 和 POTCAR,最后自动调用 109 检查所有文件。我现在给新体系准备输入文件时,一律走 108,不再分步操作,少踩很多坑。
4. 能带与态密度实操:PBE 与 HSE06 两条技术路径
4.1 能带路径生成:功能 3 与 PRIMCELL 替换
能带计算需要的 KPOINTS 跟自洽计算完全不同,它要求在第一布里渊区内沿高对称点路径采样。老办法是去在线工具或 Material Studio 查高对称点,再写脚本插值;vaspkit 内置了与 SeeK-Path 一致的结构分析算法,直接在 POSCAR 基础上生成路径文件。
vaspkit # 输入 3 选择 K-Path Generator # 输入 3 选择 3D bulk structure程序会输出两条建议路径,例如 [GAMMA-X-U|K-GAMMA-L-W-X],生成 PRIMCELL.vasp 和 KPATH.in 两个文件。KPATH.in 第二行数字代表每段路径上插值的 K 点数。默认值如果算不动,就把它调小;如果画出来的能带曲线太糙,再调大。
这里有一个设计上的取舍:能带路径只针对 primitive cell,如果你手里的 POSCAR 是超胞或惯用胞,必须先把 PRIMCELL.vasp 替换成 POSCAR,否则后续计算基于错误的晶胞。这是做能带最容易忽略的一步:
cp -f PRIMCELL.vasp POSCAR替换完记得核对晶格和原子数目,vaspkit 输出的单胞可能与你的原胞表示不同,但原子的相对位置应该一致。
4.2 PBE 能带计算:提取能量与费米能级对齐
用功能 1 配好输入文件、按能带路径生成 KPOINTS 后,提交 VASP 自洽计算加能带计算。vaspkit 处理 PBE 能带数据的子任务放在功能 21 下,常见有 211 到 215 几个选项,对应提取不同范围的能带数据、分原子投影等。我用得最多的是 211 提取常规能带数据,然后按 ~/.vaspkit 里 SET_FERMI_ENERGY_ZERO 的设置,程序自动把 VASP 输出的费米能级对齐到 0 eV。
能带数据处理里最常见的伪需求是手动从 OUTCAR 里扒本征值。直接用 vaspkit 输出整理好的能带数据文件,得到的是三维数组:第 1 列是 k 点坐标,后续列是本征值,按能带序号排列。拿到数据后就可以交给你熟悉的画图工具。如果算的是自旋极化体系,注意旧版 vaspkit 在带隙评估上有个 bug,0.72 版本已经修复,但我仍然习惯手动确认一次费米能级附近的占据情况,不盲目相信程序给的带隙数值。
4.3 分波态密度与投影能带:按原子、元素、轨道三个粒度
分波态密度和投影能带的价值在于回答"这个能带特征主要来自哪个原子、哪个轨道"。vaspkit 功能 11 下有一组任务:112 和 212 分别提取指定一个或多个原子的投影态密度和投影能带;113 和 213 按元素一次性投影;114 和 214 对选定原子求和;115 对选定原子和轨道同时求和。比如研究二维材料 MoS2 时,我想单独看 Mo 的 d 轨道和 S 的 p 轨道贡献,用 115 就能一次算完四个通道的数据,不用自己在 DOSCAR 里翻列。
这些任务背后都依赖 VASP 输出的 PROCAR 或 DOSCAR,因此投影计算完成后,务必保留完整的 PROCAR 文件,不要只保存能带能量数据就清空工作目录。f 轨道投影在旧版 vaspkit 里有 bug,0.72 修复后仍然建议对 f 电子体系多一步交叉验证。
4.4 HSE06 杂化泛函与 3D 能带:K 点策略的分岔口
HSE06 杂化泛函的能带计算和 PBE 有两个关键区别。第一,自洽计算通常需要先 PBE 收敛,再读 PBE 波函数做 HSE06 单点,否则从头算起来机时翻倍。第二,vaspkit 功能 25 专门处理 hybrid-DFT 能带,它要求沿不同 k 路径做均匀 K 点采样,而不是像 PBE 能带那样直接生成高对称路径 KPOINTS。这是因为 HSE06 计算里 Fock 交换项的 K 点网格必须保持一致,否则能量不收敛。
实际操作比 PBE 啰嗦不少:先按标准流程做个 HSE06 自洽的 KPOINTS,再在能带路径上生成另一个专门用于能带计算的 KPOINTS,两个计算先后提交。机时消耗大约是 PBE 的十几倍到几十倍,因此我在动手前总会先用 PBE 把结构、路径和 K 点密度全部验证一遍,确认没有低级错误再上 HSE06。
3D 能带(功能 23)和费米面(功能 26)是进阶电子结构分析的常用工具。3D 能带把能量本征值映射到三维倒空间网格上,适合观察带边极值位置和能带简并情况;费米面计算则对金属和掺杂体系更有意义,输出数据可以直接导入可视化软件。这两个功能对 K 点密度要求高,机时预算要按正常计算的数倍估。
5. 避坑与常见问题排查:五个能毁掉一周机时的隐形坑
5.1 POSCAR 制表符分隔导致 VASP 读不出元素类型
现象:从在线数据库下载的 POSCAR 放入工作目录后,提交 VASP 计算秒失败,错误日志显示 type information is not consistent with the number of types,VASP 只读出了部分元素。
原因:文件里元素分隔用的是制表符 \t,而不是空格。VASP 对字符串分隔符的解析很挑剔,遇到 \t 直接读串行,元素数量和类型对不上,任务立即中断。
解决:不再手工改空格。进入 vaspkit 任务 109 做一次格式检查和纠正,它会自动把 POSCAR 和 INCAR 里的分隔符统一成空格。从那以后我新建任何体系都会先跑一次 109,避免再被这种低级格式问题浪费半天。
5.2 POTCAR 与 POSCAR 元素不一致,VASP 不报错
现象:计算正常跑完,能带、态密度结果也画出来了,但数据明显不合理,检查后才发现 POTCAR 里的元素顺序跟 POSCAR 不一致,甚至元素都对不上。
原因:VASP 默认不检查 POSCAR 中的元素类型是否与 POTCAR 匹配。理论上你拿氢的赝势去算石墨烯它也会照跑,只是结果彻底错误,而且没有任何警告。
解决:grep TIT POTCAR 核对元素列表,或用任务 109 自动比对。建议把"提交前查一次 TIT"变成肌肉记忆,比任何后处理脚本都可靠。
5.3 Windows 下编辑的 INCAR 和 POSCAR 字符异常
现象:在 Windows 上用记事本改过的 INCAR 或 POSCAR,拿到 Linux 上提交 VASP,报出一些看不懂的字符或换行错误。
原因:Windows 的换行符是 CRLF,Linux 只认 LF,记事本还会在文件开头写 BOM 头,VASP 解析这类文件容易在首行或行尾读入不可见字符。
解决:统一用 sed 或 dos2unix 转换,或者直接让 vaspkit 任务 109 纠正格式。我自己的习惯是只在自己的工作目录操作文件,不跨系统拷贝原始文件,如果必须拷贝就先用 file 命令检查格式。
5.4 PREC=High 与 ENCUT 不匹配导致晶格常数漂移
现象:用 LR 模板优化晶胞,几次循环后晶格常数总是收敛不到稳定值,或者不同核数算出的结果有细微差异。
原因:PREC=High 让 VASP 自动把 ENCUT 抬到 max(ENMAX)*1.3,但不同版本的 VASP 对这个"自动抬升"的实现略有差别,同一体系在不同机器上可能拿到不同的截断能,结果自然不稳定。新版官方手册也明确不推荐用 PREC 控制精度。
解决:改用 PREC=Accurate,在 INCAR 里手动写死 ENCUT,例如对 ZnO 体系设为 520 eV,并确认高于所有元素 ENMAX。手动设定截断能后,同一体系在不同计算环境之间才具备可复现性。
5.5 HSE06 能带 K 点路径跟自洽 K 点混用
现象:HSE06 能带计算能量不收敛,反复增加 K 点也没用,机时消耗巨大却拿不到平滑能带。
原因:把 PBE 能带那套高对称路径 KPOINTS 直接拿来跑 HSE06 自洽,Fock 交换项的 K 点采样不均匀,导致能量振荡。
解决:按功能 25 的提示,自洽和能带两个阶段分别准备 KPOINTS,能带路径计算时保持 K 点沿路径均匀分布。另外 HSE06 前先确认 PBE 的波函数收敛文件 CONTCAR/WAVECAR 完整,否则等于从头开始算,机时预算会失控。
6. 进阶技巧:命令行批量处理与自定义界面初探
6.1 用 vaspkit -task 参数批量处理
交互菜单适合试手,真正干活时我更愿意用命令行参数直接调用任务,配合 shell 循环批量处理几十个结构。vaspkit 支持通过 -h 查看命令行参数,常见的是 -task 直接指定任务号。比如批量对多个目录执行输入文件检查:
for d in */; do (cd "$d" && vaspkit -task 109 > /dev/null 2>&1) echo "checked: $d" done逻辑说明:循环遍历当前目录下所有子目录,进入每个目录后无交互地调用 109 任务,输出重定向避免刷屏,最后打印检查完成的目录名。这样处理一批结构文件比逐个打开菜单高效得多。注意 vaspkit 的 -task 参数在不同版本间有细微差异,批量脚本跑之前先拿单目录测试一遍。
6.2 用户自定义界面(测试功能)的边界
0.72 版本开放了任务 74 用户自定义界面,主要面向有编程基础的高级用户,可以绘制原子电荷着色的结构图、做二维材料的投影能带等。它本质是给用户留了一个"把自己的后处理逻辑挂进 vaspkit"的入口,但标记为测试功能,接口稳定度有限。我试过用它做 MoS2 的投影能带,流程能跑通,但遇到边界情况时错误提示比较模糊,建议只在交互式环境里使用,不要写进批处理脚本。
6.3 和 ASE、Pymatgen 等生态工具配合
vaspkit 的定位是"开箱即用",ASE 和 Pymatgen 则擅长更灵活的数据结构操作,两者并不冲突。我的一般流程是:用 ASE 做复杂的结构建模和变形,导出 POSCAR 后交给 vaspkit 生成输入文件和初步后处理;需要做更深入的晶体场分析或结构搜索时再用 Pymatgen 读回结果。VASP2BoltzTraP 接口(功能 73)也值得提一笔,它把 VASP 的能量本征值转成 BoltzTraP 需要的格式,省去手动写接口文件的麻烦。
这几年下来,我最大的教训是:vaspkit 再怎么"傻瓜化",也只是把中间过程压缩了,没有解决物理模型选错的问题。从那以后我每次拿到新体系,都强制走一遍 108 生成全套输入文件、109 做格式和元素一致性检查,再用 PBE 快速验证一遍 K 点和截断能设置,最后才决定要不要上 HSE06 和更重的计算。这套顺序陪我把无数个"疑似翻车"的项目从悬崖边拉了回来,希望帮到你。
本文还有配套的精品资源,点击获取