在VASP计算能带结构时,输出的本征值文件为EIGENVAL,它的格式如下:
例子
2 2 1 1
0.3484800E+03 0.1200000E-08 0.1200000E-08 0.4840000E-09 0.5000000E-15
1.00000000000000D-004
CAR
Al
6 26 15
0.0000000E+00 0.0000000E+00 0.0000000E+00 0.3846154E-01
1 -10.1916
2 -5.0683
3 -4.2171
4 -4.2171
5 -3.1342
6 -0.4730
7 0.4006
8 0.6271
9 1.0307
10 1.0307
11 1.1635
12 1.3672
13 1.3672
14 2.0885
15 2.1586
。。。。。。。。。。。。。
第一行,前三个整数无意义,第四个整数,如果是2, 表示是自旋极化的计算,如果是1, 表示非自旋极化的计算。
第2至5行的数据含义不大明确,可以不管它。
第6行的数据表示:第一个数表示体系总的价电子数目,第二个数表示的计算能带时总的k点数目,第三个数表示的是计算能带时计算了多少条能带。
第8行的前三个数是k点的坐标,第四个数是相应k点的权重。
第9行给出的是该k点对应的本征值的序号(即第几条能带),及相应的本征值。
下面是根据pwscf提供的band_plot.f90文件略改写后针对VASP的EIGENVAL文件,把它转换为origin或xmgrace软件能直接画图的数据。
下面是band_plotvasp.f90源代码:
! for VASP
!
program prog
real, allocatable :: e(:,:),eup(:,:),edn(:,:)
real, allocatable :: k(:,:)
real, dimension(3) ::k0,a
real, dimension(6) ::xxxx
character(len=32):: xx, yy
write(6,*) 'fermi level (eV)'
read(5,*) ef
open(10,file='EIGENVAL', status='old')
open(11,file='bnd.dat')
read(10,*) iii, iii, iii, ispin
read(10,*) (xxxx(i),i=1,5)
read(10,*) xxxx(6)
read(10,*) xx
read(10,*) yy
read(10,*) nn,nk,nbands
allocate(e(nk,nbands))
allocate(k(nk,3))
if(ispin.eq.2) then
do i=1,nk
read(10,*)
read(10,*) (k(i,j),j=1,3),wtk
do j=1,nbands
read(10,*) jj,eup(i,j),edn(i,j)
enddo
write(13,9030) (eup(i,j),j=1,nbands)
write(14,9030) (edn(i,j),j=1,nbands)
enddo
write(6,*)(k(i,j),j=1,3)
read(10,*) (e(i,n),n=1,nbands)
write(13,9030) (e(i,n),n=1,nbands)
else
do i=1,nk
read(10,*)
read(10,*) (k(i,j),j=1,3),wtk
do j=1,nbands
read(10,*) jj,e(i,j)
enddo
write(13,9030) (e(i,j),j=1,nbands)
enddo
endif
9030 format (8f9.5)
do j=1,nbands
dk=0
do i=1,nk
if (i.eq.1) then
k0=k(i,:)
endif
a=k(i,:)-k0
dk=dk+sqrt(dot_product(a,a))
if(ispin.eq.2) then
write(11,*)dk,eup(i,j)-ef, edn(i,j)-ef
else
write(11,*)dk,e(i,j)-ef
endif
k0=k(i,:)
enddo
write(11,*)
enddo
stop
end program prog
采用pgf90或ifc编译后( pgf90 band_plotvasp.f90或 ifc band_plotvasp.f90),得到a.out,然后运行a.out,按提示输入体系的费米能级(注意:对半导体材料,以它的价带顶作为体系的费米能级).
得到输出文件bnd.dat,该文件的第一列数据是k点距离的绝对值,第二列数据是以Ferim level为参考的本征值。
下面就可以直接用origin或xmgrace来直接对bnd.dat来画图了。 |