计算表面态的详细过程Word文件下载.docx
《计算表面态的详细过程Word文件下载.docx》由会员分享,可在线阅读,更多相关《计算表面态的详细过程Word文件下载.docx(15页珍藏版)》请在冰点文库上搜索。
![计算表面态的详细过程Word文件下载.docx](https://file1.bingdoc.com/fileroot1/2023-5/11/aa19255f-422d-4041-884b-8fcca291cfdd/aa19255f-422d-4041-884b-8fcca291cfdd1.gif)
character(len=132)line
integerspec_counter,lower,upper
parameter(n=10000)
character*4aindex(n)
character*50KP(:
:
),PK(:
)
realKK(:
),BB(:
),Natoms(:
),B(:
),Cut(:
allocatableKK,BB,Natoms,B,Cut,KP,PK,NatomJia(:
INTEGERA,I,J,K,Nk,Nb,Na,EleN,Nok,soc
C%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
OPEN(20,FILE='
PROCAR'
open(102,file="
PRO"
)
READ(20,*)
read(20,30)Nk,Nb,Na
write(*,*)Nk,Nb,Na
30format(15x,I5,20X,I5,17x,I5)
allocate(KK(Nk,Nb,Na))
*ChecktheatomlabelsandspeciesinPOTCAR*
open(15,file='
POTCAR'
status='
OLD'
EleN=0
dowhile(.not.EOF(15))
read(15,'
(a)'
end=10)line
if(index(line,'
VRHFIN'
).ne.0)then
EleN=EleN+1
upper=index(line,'
:
'
)-1
lower=index(line,'
='
)+1
aindex(EleN)=line(lower:
upper)
print*,aindex(EleN)
endif
enddo
close(15)
10continue
*ChecktheeveryspeciesnumberinPOSCAR*
allocate(Natoms(EleN))
allocate(BB(Nb,Nk,EleN))
allocate(Cut(EleN))
allocate(KP(Nb,Nk))
allocate(PK(Nb,Nk))
open(101,file="
POSCAR"
read(101,*)
read(101,*)(Natoms(i),i=1,EleN)
close(101)
continue
write(*,*)"
alittlepropgramforPROCAR,pleasewritehowmany"
atomsdoyouwanttodealwithandgivemetheirorder"
inthefilenamedasinput."
ifyoursocisopeninput1,ifsocisclosed,input0"
read(*,*)soc
************************************************
数组归零,KK用来读取数据,BB用来对相对同K点求和*
doi=1,Nk
doj=1,Nb
dok=1,Na
KK(i,j,k)=0
doi=1,Nb
dok=1,Nk
doj=1,EleN
BB(i,k,j)=0
KP(i,k)='
PK(i,k)='
*****************************************************
*********OVERVanish***************OK****************
*****************************************************
read(20,*)!
读K-POINTi之前的空格行
读过K-POINTi行
读过K-POINTi之后的空格行
读bandi行
读bandi之后的空格行
读ions.....无用行
dok=1,Na!
开始读i,下j,下的第k个原子的数据.
read(20,40)HEADER,KK(i,j,k)
enddo!
结束原子loop
读bandi统计tot行.
if(soc==1)then
!
-----------------ifsocisopen-------
doii=1,Na+1
read(20,*)
--------------------
endif
读badi前的空格行.
enddo!
结束能带loop,
结束k点loop
40format(1x,A67,f5.3)
write(*,*)KK(1,1,1)!
用来判断读对没有,对照这个输出和数据中的第一个值
write(*,*)KK(Nk,Nb,Na)!
对照这个输出和数据中最后一个值
open(122,file='
pro.dat'
------------------------------------------------------------
open(1101,file="
input"
read(1101,*)Njia
allocate(NatomJia(Njia))
read(1101,*)(NatomJia(I),i=1,Njia)
选择你想要的模式:
1.求和原样输出;
2.按标准归0和归1输出"
read(*,*)mode
if(mode==2)then
判断依据的设置大小"
read(*,*)biaozhui
-------------------------------------------------------------
tot=0
doj=1,Nk
tot=0!
所关心的那一部分原子
dok=1,Njia
tot=KK(j,i,NatomJia(k))+tot
-----mode2归0归1--------------------------------
tot2=0!
所有原子
tot2=KK(j,i,k)+tot
enddo
if(tot/tot2>
biaozhui)then
tot=1
else
-------------------------------------------------------
write(122,10101)tot
write(122,*)
10101Format(1x,100f12.6)
END
将以上可执行的脚本,输出为PROCARchuli-2.exe的可执行程序(当然,也可以直接用脚本来处理数据)
用PROCARchuli-2.exe处理数据的过程:
1.将可执行程序PROCARchuli-2.exe和输入文件放在一起
2.输入文件包括POSCAR(删除原子符号行)、POTCAR、PROCAR、input
3.Input中内容
第一行:
需要处理的原子总数(不是全部原子)
第二行:
需要处理的原子编号(按照POSCAR中原子的顺序)
4.双击程序PROCARchuli-2.exe
第一步:
考虑了soc则输入1,否则输入0
第二步:
选择模式,选择1,原样输出,选择2按照一定的标准将数值归0,归1.
第二步选择二,则进入第三步,输入归0,归1的标准
第三步:
输入合适的判断标准,比如0.3,0.48,0.5….
运行成功之后,输出文件pro.dat
5.用vasp_band.exe小程序处理EIGENVAL,输入费米能,得到band.dat文件,将band.dat、pro.dat文件拖到Origin中对比作图,将pro.dat设置为原来能带图上的比重。
6.怎样将比重在oringin图中显示:
将能带和比重的数据分别拖到origin中。
将比重的数据添加到能带数据的第三列
选中第一二列作点线图
双击图标的点线,进入编辑,size选择col(c),调整scaling,调整大小,点击倒三角,设置图形,选择Edgecolor—Individual—选择单一的颜色,也可以选择彩色。
得到的图:
根据需要调整坐标等参数
图中圆圈的大小,就代表表面态原子所占的比重。
举例:
我们算了一个6QLBi2Te3-Bi异质结,
想要知道表面2QLBT和Bi层的能带,而且将表面2QLBT和Bi层分别用不同的颜色在图中表示出来:
首先按照求表面态的方法,分别得到几种原子的表面态的图。
比如:
1)先得到表面Bi原子的数据
修改input,数目改成2,表面Bi
Bi原子的编号:
2126
处理PROCAR,得到数据pro,修改为pro-Bi
2)再得到表面2QL-BT原子的数据
修改input,数目改成10,表面2QL
BT的原子标号:
11121315171820222325
处理PROCAR,得到数据pro,修改为pro-2QL
3)vasp-band处理EIGHEVAL得到的能带数据band.dat,将其导入oringin中,然后,将pro-Bi和pro-2QL导入oringin,将pro-Bi和pro-2QL的数据分别添加到第三列和第四列,然后做图的时候,分别将能带的大小表示为第三列和第四列,得到下面两个图:
4)将这两个图合并为一个图:
graph-Merge(合并、融合)GraphWindows-openDialog..-
将需要合并的图打开,其他的隐藏:
hide,然后选择:
Allinactive(不活跃的)Folder(open)
修改行数和列数为1
NumberofRows:
NumberofColumns:
OK!
合并之后的图产生:
修改其中的坐标为需要的样子,从oringin导出:
如图,我们看到坐标的图,点相对还是比较稀疏,可以在计算能带的时候,再多撒一些K点,这样可以得到更准确的图。