|
|
一个处理能带数据的代码
★ ★ ★ 小木虫(金币+0.5):给个红包,谢谢回帖交流 zzy870720z(金币+2):谢谢分享,呵呵 2010-12-01 00:48:02
一个处理能带数据的代码,先编译一下生成一个可执行程序,然后在你的vasp计算目录下面运行生成的可执行程序即可得到一个可以用origin处理的能带数据
如果没有考虑自旋转,生成的文件名是bnd.dat
考虑了自选,则生成两个文件bndup.dat和bnddn.dat,一个自旋向上,另一个是自旋向下
程序执行过程中会要你输入费米能级(单位是eV)。
bnd.dat文件中,第一列是x坐标(没有意义,画图的时候要把它的标度隐掉,并写上高对称点),它按KPOINTS中的高对点顺序依次排开。
程序从网上找的,自己相应改一下.......版权不属于我......呵呵
program prog
real, allocatable :: e(:, ,eup(:, ,edn(:,
real, allocatable :: k(:, ,dk( ,x(
real, dimension(3) ::k0,a
real, dimension(6) ::xxxx
character(len=32):: xx, yy ,nosence
write(6,*) 'fermi level (eV)'
read(5,*) ef
open(10,file='EIGENVAL', status='old')
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(eup(nk,nbands))
allocate(edn(nk,nbands))
allocate(k(nk,3))
allocate(dk(0:nk))
allocate(x(1:nk))
wtk=0.2500000E-01
if(ispin.eq.2) then
open(13,file='bndup.dat')
open(14,file='bnddn.dat')
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
enddo
do n=1,nk
dk(0)=0
if (n.eq.1) then
k0=k(n,
endif
a=k(n, -k0
dk(n)=dk(n-1)+sqrt(dot_product(a,a))
x(n)=dk(n)
k0=k(n,
enddo
do i=1,nk
write(13,9030) x(i), ((eup(i,j)-ef),j=1,nbands)
write(14,9030) x(i), ((edn(i,j)-ef),j=1,nbands)
enddo
else
open(11,file='bnd.dat')
do i=1,nk
read(10,*)
read(10,*) nosence,nosence,nosence,(k(i,j),j=1,3)
read(10,*)
do j=1,nbands
read(10,*) jj,e(i,j)
enddo
enddo
do n=1,nk
dk(0)=0
if (n.eq.1) then
k0=k(n,
endif
a=k(n, -k0
dk(n)=dk(n-1)+sqrt(dot_product(a,a))
x(n)=dk(n)
k0=k(n,
enddo
do i=1,nk
write(11,9030) x(i),((e(i,j)-ef),j=1,nbands)
enddo
endif
9030 format (1x,f9.4,2x ,2000(f12.6,2x))
stop
end program prog |
|