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
采用VASP軟件計算出相應(yīng)的能帶后,那就用origin,好多列用不同的y就可以了啊,不僅是能帶計算,帶自旋的態(tài)密度計算也同樣處理。
一個處理能帶數(shù)據(jù)的代碼,先編譯一下生成一個可執(zhí)行程序,然后在你的vasp計算目錄下面運行生成的可執(zhí)行程序即可得到一個可以用origin處理的能帶數(shù)據(jù)
如果沒有考慮自旋轉(zhuǎn),生成的文件名是bnd.dat
考慮了自選,則生成兩個文件bndup.dat和bnddn.dat,一個自旋向上,另一個是自旋向下
程序執(zhí)行過程中會要你輸入費米能級(單位是eV)。
bnd.dat文件中,第一列是x坐標(沒有意義,畫圖的時候要把它的標度隱掉,并寫上高對稱點),它按KPOINTS中的高對點順序依次排開。
程序從網(wǎng)上找的,自己相應(yīng)改一下.......版權(quán)不屬于我......呵呵
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
學習一下~,
這個問題需要知道或查找到這些數(shù)據(jù):
1、AZO的費米能級相對于真空能級的位置(AZO的費米能級一般進入到ZnO的導(dǎo)帶中,其位置與Al的摻雜量等有關(guān));
2、MgO的導(dǎo)帶、價帶相對于真空能級的位置。如果MgO是本征的(i-MgO),則其費米能級在禁帶中央;否則其費米能級與摻雜水平等有關(guān)(需確認或查找)。
結(jié)合上述數(shù)據(jù),再看看“半導(dǎo)體物理”一書中“金屬-半導(dǎo)體接觸”章節(jié)的知識就完全可以畫出來了。(費米能級的知識在“半導(dǎo)體物理”一書中也有)