ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

VASPKIT 0.72 中文手册:VASP 输入生成、能带态密度与避坑指南

VASPKIT 0.72 中文手册:VASP 输入生成、能带态密度与避坑指南

简介:《VASPKIT中文手册1》是一份面向材料计算、催化研究与计算物理用户的VASP预处理与后处理工具使用手册,适合刚接触VASPKIT、希望系统掌握命令行操作与常用分析流程的科研人员。压缩包内共1个PDF文件,约2.37MB,内容围绕VASPKIT的配置方法、菜单功能与典型应用展开,并配有示例说明,便于按需查阅。手册覆盖输入文件生成与检查、PBE/HSE06能带计算、分波与局域态密度、热力学量校正、差分电荷密度、NEB路径与虚频校正、能带反折叠、3D能带、费米面及VASP2BoltzTraP接口等模块,也提及用户自定义界面等测试功能。已有3568人学习,可作为快速熟悉VASPKIT功能边界、建立计算后处理思路的参考文档。

1. VASPKIT 是什么:一个 5 MB 的插件式小工具,替你把 VASP 的四个输入文件和一堆后处理脚本接起来

只用过图形界面材料建模软件的人,第一次打开 VASP 的算例目录往往会愣住:四个纯文本文件,算完还有几十兆的 OUTCAR 和 CHGCAR 等着啃。VASPKIT 就是补这块短板的插件式工具,一个用 Fortran 编译的二进制,体积五兆出头,丢进 PATH 就能跑,把 K 点撒点、赝势拼接、INCAR 模板、能带路径、态密度投影、热力学校正全收进一个数字菜单;想试 3D 能带这种偏测试性质的玩法,它也在主菜单里留了入口,不用自己写脚本拼数据。这份中文手册对应的是 0.72 版本,从环境变量配置一路讲到能带反折叠、NEB 插点和虚频校正。适合做第一性原理计算的材料、催化方向从业者,尤其是被格式错误和赝势顺序折腾过的人。

2. 环境配置与第一个算例:从 .vaspkit 到四个输入文件落地

VASPKIT 的运行逻辑很朴素:读当前目录下的 POSCAR,按菜单选择生成或修改文件,全程不碰你的 VASP 可执行程序。所以配置的核心只有两件事——让系统找得到这个二进制,让它找得到你的赝势库。这两件事没做对,后面每一步都会以奇怪的方式失败。

2.1 把二进制放进 PATH,把.vaspkit里的路径指对

解压后先确认可执行权限。从压缩包或 U 盘拷过来的文件经常丢掉执行位,报Permission denied,这不是库的问题,一条命令就能修:

# 假设解压在 /home/vaspkit.0.72,先给执行权限 chmod u+x /home/vaspkit.0.72/bin/vaspkit # 把 bin 目录写进 PATH,注意用绝对路径替换成你自己的 echo 'export PATH=/home/vaspkit.0.72/bin/:$PATH' >> ~/.bashrc source ~/.bashrc # 复制环境变量模板到用户目录,之后所有配置都改这个文件 cp -f /home/vaspkit.0.72/how_to_set_environment_variable ~/.vaspkit

第一段只是解决"能不能执行",第二段解决"在哪都能执行",第三段才是重点:~/.vaspkit是全局配置,里面每一项都直接影响生成出来的文件质量。常见的做法是逐项过一遍再动手算,别指望默认值能适配所有体系。

配置项典型取值作用与踩坑点
VASP5.TRUE.用 VASP 5.x 及以上就保持真;用 4.x 的 POSCAR 格式要改假
PBE_PATH~/POTCAR/PBE赝势库根目录,指错会导致 103/104 任务找不到对应元素
POTCAR_TYPEPBE决定取 GGA、PBE 还是 LDA 的赝势,和你的泛函保持一致
RECOMMENDED_POTCAR.TRUE.打开后按官方推荐挑后缀,省去手动选_pv、_h的纠结
MINI_INCAR.FALSE.打开只写精简 INCAR,调试时方便,正式算之前记得关
SET_FERMI_ENERGY_ZERO.TRUE.后处理把费米能平移为零点,画能带时省一步手工对齐
SET_INCAR_WRITE_MODEOVERRIDE可改APPEND、BACK-UP-OLD、BACK-UP-NEW,防止手调参数被覆盖

SET_INCAR_WRITE_MODE这一项我建议新手直接改成BACK-UP-OLD。默认的OVERRIDE会无条件覆盖已有 INCAR,你花半小时调好的 U 值、磁矩、IMAGES数目,下一次跑 101 就没了影,这种损失很难事后察觉。

还有一种启动失败跟配置无关:终端报GLIBC_2.14 not found之类的库版本错误,说明当前系统的 C 运行库比编译环境老。升级系统库风险大,稳妥做法是换一台机器或者找一份针对低版本环境编译的二进制,别硬扛。

2.2 用 101、102、103 生成 INCAR、KPOINTS、POTCAR

0.71 之后,K 点、赝势、INCAR 的生成被合进了功能 1VASP Input Files Generator。整个流程是"进主菜单 → 输 1 → 输三位子任务号"的三级结构,熟悉之后可以盲敲。

先备好 POSCAR。简单体系手搭就行,复杂结构从数据库下 CIF 或 POSCAR,注意分数占据和元素顺序。下面这段是教科书式的第一次操作:

# 进入工作目录,把结构文件统一命名为 POSCAR cd ~/work/ZnO_bulk cp ZnO-xxxx.vasp POSCAR # 启动交互菜单 vaspkit # 主菜单输入 1 -> VASP Input Files Generator # 子菜单输入 101 -> Customize INCAR File # 再输入 LR,得到晶格弛豫模板

101 弹出来的模板列表按任务类型分组:ST静态、SR标准弛豫、LR晶格弛豫、PUDFT+U、H6HSE06、NENEB、FQ频率计算等等。选LR生成的 INCAR 默认带PREC = High,并注释掉ENCUT,让 VASP 自己取max(ENMAX)*1.3。这个组合在优化晶胞常数时够用,但要注意较新的官方手册更推荐PREC = Accurate加手动固定ENCUT,目的是让同一体系在不同批次的算例里截断能完全一致,否则能量差里会混进基组误差。

接着生成 K 点和赝势:

# 同目录再次运行 vaspkit # 1 -> 102 Generate KPOINTS File for SCF Calculation # 选择 2 Gamma Scheme # 提示输入倒空间分辨率时填 0.04

这一步的输入值不是"K 点个数",而是倒空间步长,单位是 2π/Å。程序先算出倒格矢长度,再按你给的步长换算成各方向点数。0.04 属于中等偏精,官方给的参考区间是低精度 0.06~0.04、中精度 0.04~0.03、高精度 0.02~0.01。这个设计比"三个方向各取 N 个点"合理得多,因为非正交晶系的倒格矢长度和晶格常数不成反比,等间距撒点才能保证各方向 K 点密度一致。

102 在写 KPOINTS 的同时会顺手生成 POTCAR,前提是~/.vaspkit里PBE_PATH指对了。看到Written POTCAR File with the Recommended Potential!说明走的是推荐后缀路线;想手动指定,改用 104,逐个元素输入你想要的赝势类型,比如Zn_pv,目录里没有对应文件时程序会要求重新输入。

生成完必须做一次自检,两条命令足够:

# 确认赝势顺序和元素类型对得上 grep TIT POTCAR # 确认 ENCUT 大于所有元素的 ENMAX grep ENMAX POTCAR

第一条输出两行元素名,顺序必须和 POSCAR 第五行完全一致;第二条给出每个元素的推荐截断能,INCAR 里的ENCUT只要不低于最大值就安全。这两步花十秒,能挡掉后面一大类"算完了但结果是错的"。

2.3 109 与 108:把格式检查变成固定动作

从网页或数据库下载的 POSCAR,分隔符经常是制表符而不是空格,Windows 下编辑过的文件还可能混入奇怪的回车。VASP 对这类问题极其沉默:它可能只读出第一个元素,剩下的当不存在,然后在 POTCAR 数量不匹配时报一句语焉不详的错。更麻烦的是元素类型和 POTCAR 不一致时它根本不报错——你用氢的赝势算石墨烯也能跑完,结果当然全错。

功能 109Check All VASP Files就是为这个场景加的:自动纠正 INCAR 和 POSCAR 的格式,并交叉检查元素类型是否一致。功能 108 更进一步,把"设 INCAR → 设 K 点密度 → 生成 KPOINTS 和 POTCAR → 调用 109 检查"串成一条流水线,一次交互走完全部准备动作。我的习惯是任何新算例目录第一次提交前都强制走一遍 108,宁可多按几次回车。

2.4 一个完整的弛豫算例串起来

把上面的动作按顺序落成一个可复制的流程:

mkdir -p ~/work/ZnO_relax && cd ~/work/ZnO_relax cp /path/to/ZnO-xxxx.vasp POSCAR vaspkit # 1 -> 101 -> LR 生成 INCAR vaspkit # 1 -> 102 -> 2 -> 0.04 生成 KPOINTS 和 POTCAR vaspkit # 1 -> 109 格式纠正与元素检查

跑完看三个地方:INCAR 里IBRION、ISIF、NSW是否符合弛豫预期;KPOINTS 里三个方向的点数是否和你的晶胞长宽比大致匹配;POTCAR 的元素顺序。都过了再投任务。ZnO 这种六方体系,Gamma 方案加 0.04 步长通常给出 9×9×5 左右的网格,对 20 Å 以上的 c 轴来说是合理的。

3. 能带与态密度:PBE、HSE06 两条路径,以及 3D 能带值不值得算

能带计算是 VASPKIT 用得最密集的一块,也是最容易在流程上出错的一块。核心区别在于 KPOINTS:自洽计算要覆盖整个布里渊区的均匀网格,能带计算只要沿高对称路径的一条线。两步混用是新手最常见的翻车点。

3.1 高对称点路径:KPATH.in 与 PRIMCELL.vasp 的关系

功能 3K-Path Generator内置了与外部高对称点工具一致的算法,能直接分析晶体对称性给出建议路径。操作是主菜单输 3,再输 3 选3D bulk structure,程序读取 POSCAR 后输出两样东西:KPATH.in和PRIMCELL.vasp。

这里有个必须记住的前提:路径是在原胞上定义的。如果你的 POSCAR 是惯用胞,直接拿它算能带,路径和结构对不上,能带图会呈现出莫名其妙的折叠。正确做法是用生成的原胞替换结构文件:

# 备份惯用胞,用原胞作为后续计算的结构 cp POSCAR POSCAR.conventional cp PRIMCELL.vasp POSCAR # 查看建议路径和每段插值点数 head -5 KPATH.in

KPATH.in第二行的数字是每段路径上的插值点数,默认值偏密。算不动的时候把这个数调小是最直接的减负手段,代价是能带曲线变粗糙。程序同时会打印两条候选路径,比如GAMMA-X-U|K-GAMMA-L-W-X这种,选哪条取决于你想强调哪个方向的特征。三斜晶系目前不在支持范围内,遇到就退回外部工具生成 KPOINTS。

还有一点值得留意:这个功能在菜单里标了 Experimental。意思是算法本身没问题,但对称性识别在畸变结构、超胞、表面体系上可能给出你不想要的路径。稳妥的做法是跑完之后用外部工具核对一遍高对称点坐标,尤其是做二维材料或者有真空层的模型时。

3.2 PBE 与 HSE06:先收敛再上杂化

标准 PBE 能带的流程是两步。第一步用 102 生成的均匀网格 KPOINTS 做自洽,得到收敛的电荷密度;第二步把 KPOINTS 换成KPATH.in的内容做非自洽,读入上一步的 CHGCAR。PBE 会低估带隙,这是泛函本身的问题,不是流程错。

杂化泛函要贵得多,用例子里磷化镓那种体系,HSE06 的计算量是 PBE 的十几倍。0.72 在功能 25Hybrid-DFT Band-Structure上加了沿不同 k 路径做均匀采样的支持,这个改进对杂化能带很关键:传统做法是先算一条路径上的 PBE 波函数再插值,路径形状一变就得重来;有了均匀采样,同一次 HSE06 计算能覆盖多条路径。

实操上的顺序建议是:先用 PBE 把结构弛豫干净、把路径确认好,再切 HSE06。HSE06 的 INCAR 可以从 101 的H6模板起步,但ISTART、ICHARG要按"读 PBE 的 WAVECAR/CHGCAR"来设。没收敛的 PBE 电荷密度直接喂给 HSE06,最典型的症状是能带在迭代中反复漂移、最终带隙比预期还小,白烧机时。

3.3 DOS 与 PDOS:112 到 115 的分工

态密度这一组任务号排得很整齐,区别只在"投影到谁身上":

vaspkit # 11 -> 111 总态密度 DOS vaspkit # 11 -> 112 指定原子的投影态密度 vaspkit # 11 -> 113 按元素一次性输出 PDOS vaspkit # 11 -> 114 对选定原子求和 vaspkit # 11 -> 115 对选定原子和选定轨道求和

112 会交互式问你原子序号,适合分析单个吸附位点或某个过渡金属中心;113 按元素出结果,做系列对比时省事;114 和 115 是后加的组合能力,比如催化里常要看的"某几个表面原子的 d 轨道总贡献",用 115 一次就能拿到,不用自己拿文本相加再画图。

0.72 修掉了一个 f 轨道投影的 bug,也修了自旋极化下带隙求值的错误。如果你的体系含稀土或锕系元素,或者开了ISPIN = 2,用旧版本得到的 PDOS 和带隙值得怀疑,换到 0.72 之后重跑一遍再下结论。投影能带对应的是 212、253 这一组,按原子、按元素、按求和的三个层次和 DOS 那边一一对应,用法可以照搬。

3.4 3D 能带、费米面与 BoltzTraP 接口:算之前先想清楚要什么

功能 23 出三维能带,功能 26 算费米面,功能 73 把结果整理成 BoltzTraP 能读的格式。这三个都属于"数据量大、出图好看、但容易算了一堆用不上"的类型。

3D 能带本质上是在布里渊区里撒一个三维 K 点网格做非自洽,输出 E(kx,ky,kz) 的体数据。它适合看能带在某个平面上的拓扑、找节点线或者判断各向异性,不适合替代常规路径能带,因为沿高对称线的细节在体数据里反而看不清。费米面同理,金属体系才有意义,半导体算出来是一片空。BoltzTraP 接口要求你先有足够密的 K 点网格和收敛的输运相关设置,直接拿弛豫阶段的粗网格去喂,得到的电导率曲线基本没有参考价值。

这三个功能我更愿意归类为"验证性工具":主结论用路径能带和 DOS 定,3D 能带和费米面用来交叉确认各向异性或者拓扑特征,别把它们当成常规产出。

4. 催化与热力学:NEB 插点、虚频校正和自由能校正怎么落地

材料计算里真正耗人力的不是算,是把一堆能量换算成能跟实验对得上的物理量。这一块 VASPKIT 提供了不少小工具,单个都不复杂,组合起来能省掉大量手写脚本。

4.1 热力学量校正:气相分子与吸附质分开处理

自由能校正的核心是把频率计算得到的振动信息转成零点振动能,再加上温度对焓和熵的贡献。气相分子和吸附质分子的处理路径不同:气相分子在气相里做频率计算,全部振动模都是实频;吸附质固定在表面,低频模往往对应受限平动和转动,有些会变成虚频,处理方式要区分。

流程上先做频率计算(101 模板里的FQ,或者有限位移、密度泛函微扰两条路线),拿到频率后调对应校正功能,把ZPE、TS、U、H、G的修正量算出来加回电子能。几个必须留意的参数:温度默认值要和你论文里的实验条件一致;压强和对称数会显著影响气相分子的熵项,尤其线性分子;频率计算用的ENCUT和EDIFF要比常规弛豫更严,否则低频模的数值噪声会被放大成几十毫电子伏的误差,直接盖过你想比较的能量差。

一个血泪经验是:整套体系的能量对比必须用同一套校正参数。A 体系用了 298.15 K、B 体系忘了改回来用了 300 K,差出来的那点熵项足以让两个几乎简并的路径排出错误顺序。

4.2 差分电荷密度与静电势:先对齐网格再相减

差分电荷密度是理解成键和电荷转移最直观的手段,做法是把复合体系的电荷密度减去各组分单独算的电荷密度。三个 CHGCAR 必须在同一网格上,也就是NGXF/NGYF/NGZF一致,否则相减出来的东西全是插值噪声。

流程一般是:算 AB 复合体系拿 CHGCAR_total,固定同一结构分别算 A 和 B(把另一半原子删掉,保留晶胞参数,不做新的弛豫)拿 CHGCAR_A 和 CHGCAR_B,然后调功能 31 系列做相减,输出到可视化软件能读的格式。0.72 给 316 和 426 加了把 CHGCAR 和 LOCPOT 转成 XcrySDen 格式的能力,这一步比以前省事,不用再借第三方脚本转格式。

静电势那边要注意的是真空层。二维材料做平面平均静电势,真空厚度不够会让两侧势能面耦合,曲线看着平滑但台阶高度对不上。常规做法是真空层至少 15 Å,必要时加到 20 Å 再确认曲线中间段完全平直。

4.3 NEB 路径:线性插点 505、PDB 可视化与虚频校正 507

NEB 是最容易在准备阶段就翻车的计算。两端结构原子顺序必须一致,中间插值要合理,IMAGES数目要和 INCAR 里的设置对上。

505 提供线性插值,从初态和末态直接生成中间图像,省掉手动线性组合坐标的活。生成的路径可以转成 PDB 用可视化软件动画播放,看原子是不是按预期路径迁移——那些插值后原子穿进别的原子里的情况,肉眼一看就知道,硬算只会得到一堆虚频。功能 405 处理的是 XDATCAR 到 PDB 的转换,用于分子动力学轨迹回放,和 NEB 的路径可视化是两条链路,别弄混。

507 做虚频校正,对应的是过渡态搜索里常见的那种局面:频率分析出来一个几十波数的小虚频,能量和路径都对,就这个模不干净。校正工具把该模对应的方向修正掉,避免为一个数值噪声重算整个过渡态。但要注意,大幅虚频(几百波数以上)说明结构本身不处在鞍点,工具修不了,老老实实重新优化。

4.4 用户自定义界面:74 号任务能做什么

0.72 开放了 74 号任务给高级用户,允许按自己的需求组合原子电荷着色、结构图绘制这类功能。手册里给的例子是二维材料投影能带的计算,前提是不考虑自旋极化和自旋轨道耦合,也就是非磁性、无重元素的体系。这个限制来自实现方式,不是随便写的:投影需要把波函数按原子轨道展开,一旦开了自旋极化,两个自旋通道要分别处理,接口就复杂了。

对大多数用户来说,74 的价值不在直接拿来用,而在于看它的输入输出约定,然后照着自己领域的后处理需求写小模块。手册里配了how_to_set_environment_variable说明,照着改环境变量就能把自定义路径挂进去。

5. 避坑与排查:五个让结果悄悄出错的细节

下面这几条全部来自实际算例里反复出现的故障,共同特征是"程序不报错,结果不可信"。

5.1 POSCAR 里的制表符:VASP 只读出了第一个元素

现象:任务提交后立刻退出,OUTCAR 里只有一种元素的赝势信息,POTCAR 数量和 POSCAR 对不上。

原因:从数据库或网页下载的结构文件用制表符分隔字段,Windows 下编辑过的还带 CRLF 换行,VASP 的文本解析按空格切分,遇到制表符整行识别失败。

解决:跑一次功能 109 做格式纠正,或者手动sed -i 's/\t/ /g' POSCAR再检查。养成习惯:任何外部来源的结构文件进目录第一件事就是过一遍 109。

5.2 赝势后缀选错:Bader 分析和强关联体系的隐性偏差

现象:Bader 电荷分析结果物理上说不通,或者 DFT+U 算出来的占据数和预期差很远。

原因:用了不带后缀的赝势,次外层电子被冻在核里,电荷划分时这部分贡献完全缺失。Bader 分析对_pv、_sv这类把 semi-core 当价电子处理的赝势更友好。另外双原子分子体系(O₂、CO、N₂ 这类)官方建议用_h后缀的硬赝势,短键长下的描述更准。

解决:用 104 手动指定元素赝势类型,不确定时两种赝势各算一遍对比关键结论,影响不大就选截断能低的那个,省机时。

5.3 INCAR 被覆盖:手调参数下一次生成就没了

现象:明明设好了LDAU的 U 值和IMAGES数目,重新跑一次 101 之后全变成默认模板。

原因:~/.vaspkit里SET_INCAR_WRITE_MODE是OVERRIDE,每次生成都无条件覆盖。

解决:改成BACK-UP-OLD或BACK-UP-NEW,前者备份原文件再写,后者写到.new里让你自己比对合并。改动前先确认当前目录没有正在跑的算例依赖旧 INCAR。

5.4 能带路径和结构不匹配:图很好看,但折叠得不对

现象:能带图上的带隙位置和高对称点的标注对不上,或者跟文献里同一材料的图形状差很远。

原因:用惯用胞的结构算了原胞定义的路径,或者忘了把PRIMCELL.vasp替换成 POSCAR。

解决:确认计算目录的 POSCAR 是原胞,KPATH.in里标注的高对称点和你的晶格类型一致,必要时用外部工具交叉验证一遍路径。

5.5 计算量失控:K 点密度和插值点数叠乘

现象:杂化泛函能带算了两周还没收敛,或者 3D 能带的输出文件几十 GB。

原因:KPATH.in第二行插值点数用了默认的密值,同时 HSE06 本身又是 PBE 的十几倍开销;3D 能带在三个方向都撒了细网格。

解决:能带插值点数按"能看清曲线拐点"的标准下调,先跑粗路径看整体形状,确定要放大哪一段再补算。3D 能带把网格降到能看出拓扑的最低密度。机时是有限资源,不是所有图都需要出版级分辨率。

6. 进阶:拿 EXAMPLES 目录当回归基准,把生成动作脚本化

手册配套的examples目录是最容易被忽略的资产。里面的每个子目录都是一个可运行的算例,结构文件、参考输入、预期输出齐备。我现在的做法是先在这些算例目录里跑一遍,确认自己的环境配置、赝势库路径、二进制版本都是对的,再去碰自己的体系——这比拿真实算例试错便宜得多,因为出问题时你至少知道结构文件和参考输出是可信的。

更进一步,可以把生成动作写成非交互的包装脚本。VASPKIT 虽然主界面是菜单式的,但子任务可以通过标准输入管道喂进去,一串echo就能把 INCAR、KPOINTS、POTCAR 一次生成完:

#!/bin/bash # gen_inputs.sh:对当前目录的 POSCAR 批量生成输入文件 # 前提:POSCAR 已经是原胞,且 ~/.vaspkit 配置正确 set -e # 101 选 LR 生成弛豫模板;102 选 Gamma 方案,步长 0.04 printf "1\n101\nLR\n" | vaspkit > /dev/null printf "1\n102\n2\n0.04\n" | vaspkit > /dev/null # 108 走完整检查,任何格式或元素不一致都会在这里拦下 printf "1\n108\n" | vaspkit > check.log # 关键字段自检,缺一个就退出 grep -q "ENCUT" INCAR || echo "WARN: ENCUT 未显式设置,确认 PREC 设置是否符合预期" grep TIT POTCAR echo "生成完毕,检查 check.log 后再提交"

这段脚本的每个printf对应菜单层级:1进输入文件生成,101选 INCAR 模板,LR指定晶格弛豫;第二个命令的2是 Gamma 方案,0.04是倒空间步长。set -e保证中途任何一步失败就停,避免在半成品目录上继续叠加错误操作。跑完必须看check.log和grep TIT POTCAR的输出,脚本化省的是手速,不是判断。

配合两个验证动作,基本可以保证每次生成的输入一致:一是把当前目录的 INCAR 和examples里同类任务的参考 INCAR 做diff,差异应该只有体系相关的参数;二是记录二进制版本号,vaspkit -h打出来的信息存进算例目录的说明文件,半年后回头查问题时能说清当时用的是哪个版本。手册里提到的 spglib 版本、f 轨道投影修复这些改动,恰恰是同类体系在不同版本间结果漂移的常见来源。

从那以后我每次开新算例,第一件事就是把examples里结构最接近的那个目录拷出来跑通,再把自己的 POSCAR 换进去重走 108,从不直接在空目录里手敲菜单——吃过一次 INCAR 被覆盖、弛豫烧了三天才发现ISIF不对的亏,这个动作就再也没省过。希望帮到你。

本文还有配套的精品资源,点击获取

返回列表