VASP计算单层黑磷能带(PBE)

摘要

以单层黑磷为例记录一下用vasp使用PBE计算二维材料的方法

预备工具

  1. 装有Linux系统的的电脑(本文使用wsl2下的ubuntu1804版本,使用vscode编辑)
  2. VASP 5.4.4
  3. vaspkit 1.3.5

结构优化

这一步是为了得到原子的最优位置,所以POSCAR给的稍微有些偏差问题是不大的,因为后面VASP会优化。

新建文件夹BP_1L,在当前目录创建名为opt的文件夹。

POSCAR

POSCAR可以去下载cif通过VESTA转换,也可以通过MS或VESTA画出来

导入写好的POSCAR,这里为了实现单层y方向给了20埃的长度

POSCAR
1
2
3
4
5
6
7
8
9
10
11
12
BP_1L
1.0
3.3159999847 0.0000000000 0.0000000000
0.0000000000 20.0000000000 0.0000000000
0.0000000000 0.0000000000 4.3889999390
P
4
Direct
0.809849977 0.456869990 0.580680013
0.809849977 0.559960008 0.400680006
0.309850007 0.559960008 0.080679998
0.309850007 0.456869990 0.900680006

INCAR

INCAR
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# Global Parameters
SYSTEM = BP_1L
ISTART = 0
ISPIN = 1
ICHARG = 2
LWAVE = .F.
LCHARG = .F.
ENCUT = 500
# LORBIT = 11

# Electronic Relaxation
ISMEAR = 0
SIGMA = 0.05
NELM = 300
NELMIN = 6
EDIFF = 1E-06

# Ionic Relaxation
NSW = 100
IBRION = 2
ISIF = 3
EDIFFG = -1E-03
ISYM = 0
POTIM = 0.2

POTCAR和KPOINT

使用vaspkit生成

输入vaspkit

  1. 选 1) VASP Input-Files Kit
  2. 选 103) Generate POTCAR File with Default Setting

即可生成POTCAR

输入vaspkit

  1. 选 1) VASP Input-Files Kit
  2. 选 102) Generate KPOINTS File for SCF Calculation
  3. 选 1) Monkhorst-Pack Scheme
  4. 输入0.01
  5. 在生成的KPOINTS中第四行修改为14 1 10

得到KPOINTS

OPTCELL

二维材料还需要一个optcell文件来让VASP不要优化真空层方向

里面写101即可,0表示不优化第二个方向

运行vasp

自洽

将上一步骤完成的文件复制一份并重命名为scf

在该目录下输入cp CONTCAR POSCAR将上一步优化好的结果赋给POSCAR

修改INCARD

INCAR
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# Global Parameters
SYSTEM = BP_1L
ISTART = 0
ISPIN = 1
ICHARG = 2
LWAVE = .T.
LCHARG = .T.
ENCUT = 500
LORBIT = 11

# Electronic Relaxation
ISMEAR = 0
SIGMA = 0.05
NELM = 300
NELMIN = 6
EDIFF = 1E-06

# Ionic Relaxation
NSW = 0
IBRION = -1
ISIF = 3
EDIFFG = -1E-03
ISYM = 0
POTIM = 0.2

运行vasp

能带计算

将文件复制到一个band文件夹,修改INCAR

INCAR
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# Global Parameters
SYSTEM = BP_1L
ISTART = 1
ISPIN = 1
ICHARG = 11
LWAVE = .F.
LCHARG = .F.
ENCUT = 500
LORBIT = 11

# Electronic Relaxation
ISMEAR = 0
SIGMA = 0.05
NELM = 300
NELMIN = 6
EDIFF = 1E-06

# Ionic Relaxation
NSW = 0
IBRION = -1
ISIF = 3
EDIFFG = -1E-03
ISYM = 0
POTIM = 0.2

使用vaspkit生成新的k路径

输入vaspkit

  1. 选 3) K-Path for Band-Structure
  2. 选 302) 2D Structure
  3. cp KPATH.in KPOINTS

提交运行

输出文件中的DOSCAR内的费米能级是不准确的,所以这里进行一个修改, 使用grep fermi ../scf/OUTCAR从自洽中找到准确的费米能级

1
2
ISMEAR =     0;   SIGMA  =   0.05  broadening in eV -4-tet -1-fermi 0-gaus
E-fermi : -1.8123 XC(G=0): -3.0926 alpha+bet : -3.0343
我这里是-1.8123

将该数值复制到band文件夹下输出文件DOSCAR的第六行的第4个数,两个数的值一般会比较接近。

参看数据及绘制能带图

通过vaspkit计算能带

输入vaspkit

  1. 选 21) Band-Structure
  2. 选 211) Band-Structure

输出文件中有BAND_GAP可以看见 Band Gap (eV)

绘制能带图可以使用 python 的 pymatgen 或 origin(把band.dat拖进去)

下面给出pymatgen的绘制能带图代码,代码节选自刘锦城老师的文章

1
2
3
4
5
6
7
8
9
10
11
import matplotlib.pyplot as plt
from pymatgen.io.vasp.outputs import Vasprun
from pymatgen.electronic_structure.plotter import BSDOSPlotter,BSPlotter,BSPlotterProjected,DosPlotter

bs_vasprun = Vasprun("./vasprun.xml",parse_projected_eigen=True)
bs_data = bs_vasprun.get_band_structure(line_mode=True)

band_fig = BSPlotter(bs=bs_data)
band_fig.get_plot()
plt.savefig('band_fig.png', img_format='png')