Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1097067
  • 博文数量: 264
  • 博客积分: 7225
  • 博客等级: 少将
  • 技术积分: 5096
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-17 08:53
文章分类

全部博文(264)

文章存档

2011年(33)

2010年(52)

2009年(152)

2008年(27)

我的朋友

分类:

2009-10-21 19:59:59

处理VASP计算得到的本征值文件

学习资料   2008-06-16 10:42   阅读53   评论0  
字号:    

在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来画图了。

阅读(4485) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~