VASP 使用¶
约 3662 个字 199 行代码 预计阅读时间 15 分钟
介绍¶
- VASP 全称:Vienna Ab-initio Simulation Package
多粒子体系的复杂性主要体现在交换关联能 \(E_{xc}\) 项上,对交换关联能 \(E_{xc}\) 的精确描述是求解 KS 方程的关键所在。
引入关于电子密度函数的近似泛函,如 LDA、GGA、杂化泛函等
LDA 忽略了非均匀效应,认为在具有同等电子密度的前提下,空间任意点的 \(E_{xc}\) 相同与均匀电子云的相同
GGA 对 LDA 中忽略的电子密度的非均匀效应进行了修正,即加入电子密度梯度的作用
Perdew-Burke-Ernzerhof (PBE) 形式的 generalized gradient approximation (GGA) 泛函(表达电子间的交换关联作用)
全电子势描述电子 - 原子核相互作用,如 EMTO(The Exact Muffin-Tin Orbitals)
投影缀加平面波赝势(PAW)方法(描述离子 - 电子相互作用)
PAW (Projected Augmented Wave) 投影缀加波,是基于密度泛函理论(DFT)开发的描述电子、原子核行为的全电子方法
APW 是增广平面波方法(Augmented Plane Wave),也是一种全电子方法,将电子分为软、硬两部分,前者用 PW 描述,后者用 LCAO 描述(Linear Combination of Atomic Orbitals,原子轨道的线性组合)
PBE 是泛函,描述电子的交换 - 相关能的拟合函数,以 Perdew-Burke-Ernzerhof 三位开发者的名字缩写命名
PW 是指平面波基组,用于展开波函数或者说原子、分子轨道
PAW 是独立于 PBE 的理论方法,但是我们常常会见到 POTCAR 中称为 PAW-PBE 赝势,把三个概念放在一起了,意思实际上是针对不同的的泛函利用 PAW 方法相应调参优化得到的一致性赝势文件
PAW (Projected Augmented Wave) 全电子理论计算方法
含各种类型计算的通用 INCAR 文件: GitHub - WMD-group/INCAR: A generic INCAR file for the density functional theory package VASP
计算一致性:K 点密度、截断能、SMEAR 平面波数量也应一致(对于空位形成能计算)
DFT-D3:vdW 相互作用修正
Heyd–Scuseria–Ernzerhof 泛函 (HSE06):更精确,处理电子和光学性质
METAGGA
SCAN (Strongly constrained and appropriately normed)
参考资料¶
- VASP INCAR 参数:Category:INCAR tag - Vaspwiki
- VASP POSCAR:POSCAR - Vaspwiki
- VASP KPOINTS:KPOINTS - Vaspwiki
- VASP 赝势推荐:Available PAW potentials - Vaspwiki
- VASP 输出文件:Category:Output files - Vaspwiki
- VASP Manual:The VASP Manual - Vaspwiki
- VASP Categories:Categories - Vaspwiki
- VASP Tutorial:Category:Tutorials - Vaspwiki、Tutorials
-
VASP Examples:Category:Examples - Vaspwiki
-
VASP 计算流程:VASP的计算流程 - Jun's Blog
-
输入文件参数介绍:GitHub - bzkarimi/VASP: Practical guide on how to use VASP
VASP 中计算电子基态的算法
Algorithms used in VASP to calculate the electronic groundstate - Vaspwiki
k 点积分
phonon dispersion 计算
原子计算
分子动力学计算
GW 计算
内含 VASP 计算相关的案例
GitHub - hello-arun/tutorials: Tutorials of codes such as VASP, Quantum Espresso and Lammps
使用¶
工具¶
- VASPMO:用于显示 VASP 计算的波函(或分子轨道)。它能够读取 VASP 的输出文件 PROCAR 和 CONTCAR,并产生 Gaussian 输出格式的输出文件,用于其它显示工具,如 Molekel、Chemcraft、Gabedit、Molden 和 JMol 等)读取,进而绘制和观看体系的分子轨道
算例¶
-
内含表面能、层间距变化计算公式:Ni 100 surface relaxation - VASP Wiki
-
石墨堆叠方向层间距确定:
- GGA level 的半局域(semilocal)DFT 低估了长程色散相互作用,导致石墨晶格在堆叠方向上的错误高估:8.84Å(PBE)对 6.71Å(exp)。
- 使用 Tchatchenko and Scheffler 方法(添加 IVDW 和 LVDW_EWALD 参数)考虑范德华力相互作用(van der Waals interactions)进行纠正
-
Ni(111) 表面高精度单点能计算(截断能提高;用以计算吸附能、功函数(添加 LVHAR 参数)):Ni 111 surface high precision - VASP Wiki
-
功函数相关
-
振动频率计算的意义?NFREE 参数,振动 mode?
-
K 点网格某方向数值为奇数,\(\Gamma\) 中心?
-
AIMD 相关
- Si 熔化 AIMD 计算:Liquid Si - Standard MD - VASP Wiki
- Si 结晶 AIMD 计算(扩散系数及 PCF):Liquid Si - Freezing - VASP Wiki
- 只有 1 个 K 点,可以用 vasp_gam 来运行,加快运行速度
- 利用分子动力学轨迹计算粒子运动的均方位移和扩散系数 - 知乎
-
注意事项:
- VASP 官网算例中的部分 POSCAR 文件格式非 VASP5 版本
- VASP Wiki 中的示例 POSCAR 格式和 POTCAR 文件(PAW 格式)较老?
- FCC Ni 及 Ni(100) 表面的 DOS 计算,没有先进行自洽计算
- Ni(100) 表面的能带结构计算,K-path 是 reziprok 方式,非 Line-Mode,vaspkit 和 pymatgen 无法获取数据,只能使用 p4vasp?
- NiO:反铁磁
示例¶
# 能带结构、DOS 计算
ISTART = 1
ICHARG = 11
# 其余计算
ISTART = 0
ICHARG = 2
# 断点后续算;其他参数值不改变
ISTART = 1
ICHARG = 1
静态计算¶
孤立原子能量¶
-
需添加自旋;建立简单立方胞(SC,15 Å 足够),将原子置于中心或原点;K 点密度为 1*1*1,Gamma-centered MP
# INCAR 重要参数
ISPIN = 2 # 开启自旋
KSPACING = 1.0 # 可确保 K 点密度为 1x1x1
KGAMMA = .TRUE.
ISMEAR = 0 # 使用 Gaussian smearing
SIGMA = 0.001 # 展宽值取小;或 0.05
NELM = 300 # 增加电子步
ISYM = 0 # 关闭对称性
内聚能¶
-
内聚能(cohesive energy/atomization energy)定义:孤立原子结合成固体/晶体时释放的能量,为正值(一般以这个为准);部分定义为其逆过程,为负值
-
分子动力学中部分经验势函数不考虑自能,孤立原子能量为 0,体系平均原子能量即为内聚能
-
DFT 中孤立原子能量不为 0
收敛性测试¶
-
自洽计算的K点选取 和 KPOINTS 文件生成方法 - 第一性原理 (First Principle) - 计算化学公社
-
对 K 点和 ENCUT 进行收敛性测试,同一构型采用超胞和单胞得到的结果类似,单胞的 ENCUT 值可直接用于超胞计算,单胞的 K 点密度等比例缩小用于超胞计算
-
个人收敛性测试步骤(先 K 点后 KPOINTS):
- 先粗结构优化(ENCUT 为 1.3ENMAX,K 点密度稍密)
- 之后进行 K 点测试(ENCUT 为 1.3ENMAX)
- 之后进行 ENCUT 测试(K 点密度选择达到收敛性标准的)
- 采用达到收敛性标准的 K 点密度 + ENCUT 进行细结构优化
- 个人经验:计算体系含 C/O 时,可不进行 ENCUT 测试,直接使其为 520(ENMAX 均为 400.0)
弛豫/结构优化计算¶
-
建议结构优化(尤其变胞优化)后再进行一次静态计算的原因(能量更准确):Hartree 势积分格点的问题;因为积分格点是从最开始定死的,变胞优化完之后沿用的是优化前的格点结果自然会有点问题(来自 GPUMD 学习交流群)
-
高精度结构优化:ISIF=3 优化 --> ISIF=2 优化(基本 1-2 步结束)--> scf 单点能计算
-
INCAR 参数示例:
Global Parameters
SYSTEM = Relaxation
ISTART = 0
ICHARG = 2
ISPIN = 1
LCHARG = .FALSE.
LWAVE = .FALSE.
PREC = Accurate
LREAL = .FALSE.
ENCUT = 500
KSPACING = 0.15
KGAMMA = .TRUE.
Electronic Relaxation
ALGO = Normal
ISMEAR = 1
SIGMA = 0.05
EDIFF = 1E-06
NELM = 300
NELMIN = 6
Ionic Relxation
NSW = 150
IBRION = 2
ISIF = 3
EDIFFG = -1E-02
NPAR = 4
(平衡)晶格常数¶
-
EOS 拟合(扫描法):在晶格常数附近取 N 个点,分别进行单点能计算,进行 EOS 拟合
-
直接弛豫
用力弛豫时,若存在内变量的体系,如固溶体,溶质原子几乎不会待在在平衡位置(有可能),近邻的溶剂原子偏离其理想位置,因此需要对它们的位置进行弛豫,用扫描的方法,不做弛豫,得不到准确的位置,因此需要用到弛豫的方法;对于计算胞对称性不太好,用扫描法,一般适合只有一个变量变化,变量多,需要用弛豫的方法(hcp 结构)
表面能¶
-
表面能计算收敛性测试:slab 层数、真空层层数
点缺陷形成能¶
-
空位、间隙原子形成能
-
超胞尽可能是立方体形状
-
要做原子数 n(不能太大)和空位形成能的收敛性测试
态密度、能带计算¶
-
参考:
-
计算流程:
- 弛豫计算(或结构优化;初始构型很好,可忽略此步)
- 静态自洽计算(可不用拷贝自洽计算生成的 WAVECAR)
- 态密度计算:拷贝自洽计算生成的 CHGCAR,非自洽计算(ICHARG=11,增加 K 点密度;
K*a=45
可满足要求) - 能带计算:拷贝自洽计算生成的 CHGCAR,非自洽计算(ICHARG=11,K-path)
-
自洽与非自洽计算的区别:电子密度是否匹配;不是静态与弛豫计算的区别!
-
开启自旋极化,DOS 会有上下两条线(自旋向上、向下;上下对称、不对称的含义是什么)
-
建议 NEDOS 数值稍微取密一些(NEDOS=2000/3000 足够好)
-
DOS、能带计算耗时相对较少
-
DOS 计算相比弛豫对截断能没有那么敏感,截断能值可以设小一些(?)
-
态密度相关输出文件:DOSCAR、PROCAR
Bader 电荷计算¶
-
参考:
-
Bader 电荷:
- DFT 计算中常见的一种电荷分析方法,通过其对电荷的定义计算出每个原子在体系中得失电子的情况,即净电荷
- 又称为 atom-in-molecule (AIM) charge,是一种将空间中的电子密度的零通量分界面作为划分电荷所属相应原子的方法
- 通过处理 VASP 得到的 CHGCAR 或 Gaussian 格式的 cube 文件计算体系的 Bader 电荷
- 电荷的定义或者说划分方法会明显影响计算数值,所以不同的分析方法得到的绝对数值没有太大的意义,而是应该在不同体系之间横向比较
- 电荷布居分析:统计每个原子带多少电荷的办法;Bader 电荷布居(Bader charge analysis);还有 Mulliken 布居,Lodwin 布居,Hirshfield 布居等
-
差分电荷密度:charge density difference;原子相互作用后(成键前后)的电荷密度与初始原子电荷密度之差;可分析在成键和成键电子耦合过程中的电荷移动以及成键极化方向等性质
-
计算:与静态计算类似;添加
LAECHG
参数(计算内层电荷密度和价电子层电荷密度,将两个文件叠加求得总电荷,再求解 Bader 电荷)
# INCAR 参数设置
IBRION = -1
NSW = 0
LCHARG = .TRUE.
LAECHG = .TRUE. # Bader 计算
# 后处理
chgsum.pl AECCAR0 AECCAR2 # 得到 CHGCAR_sum,包含了 VASP 中定义的原子总电荷密度
bader CHGCAR -ref CHGCAR_sum # 得到 BCF.dat、ACF.dat、AVF.dat
cat ACF.dat # 查看 CHARGE 列
# BCF.dat
# TODO: 待确认
# 电荷极大值序号和坐标;体积内的bader电荷积分;距离极大值最近的原子和距离
# ACF.dat;包含了所有原子的价电子数信息
# TODO: 待确认
# 原子序号和坐标;价电荷数;到零通量面最小距离;原子体积)
# 示例
# X Y Z CHARGE MIN DIST ATOMIC VOL
--------------------------------------------------------------------------------
1 3.164973 3.164973 3.164973 8.129202 2.022066 50.790052
2 0.000000 0.000000 0.000000 13.223566 1.494570 30.667423
3 0.000000 0.000000 3.164973 7.549077 1.582486 57.390231
4 3.164973 0.000000 0.000000 7.549079 1.582486 57.390910
5 0.000000 3.164973 0.000000 7.549079 1.582486 57.390910
--------------------------------------------------------------------------------
VACUUM CHARGE: 0.0000
VACUUM VOLUME: 0.0000
NUMBER OF ELECTRONS: 44.0000
ELF¶
-
电子局域化函数 (electron localization function, ELF)
-
在自洽计算中添加/修改以下参数;计算结束后,得到 ELFCAR 文件;使用 VESTA 进行可视化;可将 ELF 图与构型视图叠放在一起,对照效果更好
弹性常数计算¶
-
可用原胞计算弹性常数(但还是建议用单胞进行计算)
-
VASP 计算弹性常数,其 ENCUT 数值要比弛豫计算的更高,通常 1.5 倍 ENMAX
-
计算得到的弹性常数值不是很准确
# INCAR 参数设置
ENCUT = 520 # 尽量高一些;个人设置 700
IBRION = 6
NSW = 1
NFREE = 2 # 4 或 2
POTIM = 0.015
ISIF = 3
# 单位换算
1 kBar = 0.1 GPa
# 获取弹性常数数据
# 方式 1
grep -A9 'TOTAL ELASTIC MODULI' OUTCAR
# 方式 2
vaspkit - 2 - 203
# OSZICAR 相关内容
Found 1 degrees of freedom:
Adding 6 more for cell shape distortion
# log/out 文件相关内容
Found 1 degrees of freedom:
Adding 6 more for cell shape distortion
Finite differences POTIM= 0.01500 DOF= 7
Finite differences progress:
Degree of freedom: 1/ 7
Displacement: 2/ 2
Total: 2/ 14
# OUTCAR 相关内容
Found 1 degrees of freedom:
Directions for atom 1:
--------------------------
1.0000000000000000 0.0000000000000000 0.0000000000000000
Strain: 6 additional degrees of freedom
---------------------------------------
Finite differences:
Step POTIM = 1.500000000000000E-002
Degrees of freedom DOF = 7
Finite differences progress:
Degree of freedom: 1/ 7
Displacement: 2/ 2
Total: 2/ 14
# 相关 Warning(有无影响,影响是否大)
VERY BAD NEWS! internal error in subroutine IBZKPT:
Reciprocal lattice and k-lattice belong to different class of lattices. Often results are still useful... 96
功函数计算¶
-
步骤:结构弛豫;静态计算(修改以下 INCAR 参数)
AIMD 计算¶
-
参考:
-
主要考虑 NVT 系综(NPT 用的情况不多?近几年 VASP 才有 NPT 系综;由于计算胞很小,体积变化可能会很剧烈;截断能包括的 K 点数目取自第一帧数据不变,变体积会不准确)
-
盒子多大/多少个原子时,设为 1x1x1 并用 vasp_gam 版本运行 AIMD(没有确定的标准)
-
NVT AIMD 的起始温度和终止温度直接设置为目标温度,起始温度可不用设为 0K(升温很快)
-
势函数训练集 AIMD 采样大多用的是 NVT,几乎不用 NPT
-
系综
- NVE 系综:MDALGO=1, ANDERSEN_PROB=0.0
- NVT 系综:ISIF=2, MDALGO=1 (Andersen)、2 (Nose-Hoover)、3 (Langevin)、4 (NHC)、5 (CSVR)、13 (Multiple Andersen)
- NPT 系综:ISIF=3, MDALGO=3 (Langevin)
- NPH 系综:ISIF=3, MDALGO=3, LANGEVIN_GAMMA=LANGEVIN_GAMMA_L=0.0
- 所有热浴在 NVT 系综都可用,但目前 Langevin 热浴只在 NPT 系综中可用
-
NPT 参数设置
PSTRESS # Parinello-Rahman 压浴控制目标压强
# LANGEVIN_GAMMA、LANGEVIN_GAMMA_L 这两个额外 tag 必须设置
# PMASS 可选 tag
LANGEVIN_GAMMA # 原子自由度的 langevin 摩擦系数
LANGEVIN_GAMMA_L # 点阵自由度的 langevin 摩擦系数
PMASS # 点阵自由度的虚拟质量
- NVT 参数设置
# INCAR 参数设置
ENCUT = 400 # 不用很高
EDIFF = 1E-5 # 不用很小;EDIFFG 不用于 AIMD
ISMEAR = 0 # 不用设置成 1
SIGMA = 0.05
LWAVE = .FALSE.
LCHARG = .FALSE.
LREAL = Auto
PREC = Normal
ALGO = Fast
IBRION = 0 # 开启 AIMD
MDALGO = 2 # MDALGO、ISIF 控制系综和热浴
ISIF = 2
SMASS = 0 # 控制 AIMD 运行过程中的速度
ISYM = 0 # 关闭对称性
POTIM = 1 # 时间步长(单位 fs)
NSW = 10000 # 跑多少步;10 ps
TEBEG = 300 # 起始温度
TEEND = 300 # 终止温度
NWRITE = 1 # 长时 AIMD,建议取 1/0
# 数据获取
# 压强
grep 'external pressure' OUTCAR | awk '{print $4}'
# 运行步数,温度
grep 'T= ' OSZICAR | awk '{print $1 " " $3 " " }'
进行 NVT 模拟时,不会设置 PSTRESS,所以 Pullay stress=0
原子数越多,温度波动越小
外压 external pressure
数值 = Total in kB
XX、YY、ZZ 分量之和的平均值 - Pullay stress
基于分子动力学模拟,可以通过对速度自关联函数(velocity autocorrelation function,VACF)进行傅里叶变换得到材料的振动态密度(vibrational density of states, VDOS)。VACF 是根据动力学模拟出来的轨迹文件和速度文件,求算系统在某一时刻的速度与另一时刻速度的关联程度的函数,直接看 VACF 并不能很直观的得到一些信息,而 VDOS 直接对应实验红外光谱,可以直观的对高温或高压下的振动变化情况等进行分析。
其他¶
- VASP 拉伸模拟
- SOC:自旋轨道耦合、旋轨耦合
- VASP INCAR 参数
LSORBIT = T
开启 SOC 时,需使用vasp_ncl
,使用vasp_std
会出现以下报错
- VASP INCAR 参数
ERROR: non collinear calculations require that VASP is compiled
without the flag -DNGXhalf and -DNGZhalf
ERROR: non collinear calculations require that VASP is compiled
without the flag -DNGXhalf and -DNGZhalf
# pymatgen 解析 SOC 的 Vasprun 文件出现以下 Warning(实际不影响)
pymatgen/io/vasp/outputs.py:161: UserWarning: Float overflow (*******) encountered in vasprun
warnings.warn("Float overflow (*******) encountered in vasprun")
-
红外光谱(Infrared Spectroscopy,IR):VASP快速计算红外光谱(IR) 后处理软件vasprun推荐
-
静电势能计算: 在 INCAR 中添加 LVHAR=.TRUE. 参数
-
表面吸附位点:
- Top 顶位(T)
- Bridge 桥位(B)
- Hollow 洞位(H)