计算表面态的详细过程Word文件下载.docx

上传人:b****6 文档编号:8575141 上传时间:2023-05-11 格式:DOCX 页数:15 大小:756.16KB
下载 相关 举报
计算表面态的详细过程Word文件下载.docx_第1页
第1页 / 共15页
计算表面态的详细过程Word文件下载.docx_第2页
第2页 / 共15页
计算表面态的详细过程Word文件下载.docx_第3页
第3页 / 共15页
计算表面态的详细过程Word文件下载.docx_第4页
第4页 / 共15页
计算表面态的详细过程Word文件下载.docx_第5页
第5页 / 共15页
计算表面态的详细过程Word文件下载.docx_第6页
第6页 / 共15页
计算表面态的详细过程Word文件下载.docx_第7页
第7页 / 共15页
计算表面态的详细过程Word文件下载.docx_第8页
第8页 / 共15页
计算表面态的详细过程Word文件下载.docx_第9页
第9页 / 共15页
计算表面态的详细过程Word文件下载.docx_第10页
第10页 / 共15页
计算表面态的详细过程Word文件下载.docx_第11页
第11页 / 共15页
计算表面态的详细过程Word文件下载.docx_第12页
第12页 / 共15页
计算表面态的详细过程Word文件下载.docx_第13页
第13页 / 共15页
计算表面态的详细过程Word文件下载.docx_第14页
第14页 / 共15页
计算表面态的详细过程Word文件下载.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

计算表面态的详细过程Word文件下载.docx

《计算表面态的详细过程Word文件下载.docx》由会员分享,可在线阅读,更多相关《计算表面态的详细过程Word文件下载.docx(15页珍藏版)》请在冰点文库上搜索。

计算表面态的详细过程Word文件下载.docx

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点,这样可以得到更准确的图。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2