VASP处理splitdos.docx

上传人:b****5 文档编号:12304178 上传时间:2023-04-18 格式:DOCX 页数:47 大小:199.98KB
下载 相关 举报
VASP处理splitdos.docx_第1页
第1页 / 共47页
VASP处理splitdos.docx_第2页
第2页 / 共47页
VASP处理splitdos.docx_第3页
第3页 / 共47页
VASP处理splitdos.docx_第4页
第4页 / 共47页
VASP处理splitdos.docx_第5页
第5页 / 共47页
点击查看更多>>
下载资源
资源描述

VASP处理splitdos.docx

《VASP处理splitdos.docx》由会员分享,可在线阅读,更多相关《VASP处理splitdos.docx(47页珍藏版)》请在冰豆网上搜索。

VASP处理splitdos.docx

VASP处理splitdos

实例1

split-dos的工作原理

我算了一个BaTiO3单胞,5个原子,加上总的态密度应该一共6组数据。

但是计算结果的DOSCAR中却有1+5*7,36组数据,不知道每组数据对应什么?

用split-dos脚本处理之后,确实生成了DOS0……DOS5,这是怎么生成的?

脚本看不懂,望指教其原理。

我对比过DOS4和DOSCAR,里面的数据没相同的。

PS:

是不是一定要运行vp后才能运行split-dos?

split_dos是把费米能级算进去了的,所以能量会有不同但是其他的应该只是从DOSCAR里面提取出来的。

可以给我发第一列是能量后面的分别是s-ups-downp-upp-downd-upd-down

从脚本上看vp不是必须的

实例2

电子态密度图是怎么做的?

我看好多文献在做电子结构计算时,都有态密度图,请问这是怎么作的?

装个p4vasp,里面可以导入计算所得到的vasp.xml文件,选择electronic->DOS+BAND就可以画出态密度图,然后Graph->export就可以到处数据到Origin中画图。

p4vasp还可以处理各种PDOS,并自动把自旋向下的电子态密度数据设为负值,非常方便。

我不用P4VASP行吗?

直接从DOSCAR里找出数据画图或者用split-dos给分割一下之后画图这样做也是正确的吧?

实例3

split_dos运行

我将split_dos和vp放在vasp第一次运行后的同一个目录下,然后运行,出现结果./split_dos[94]:

/vp:

notfound[Nosuchfileordirectory]

请问是什么原因,在split_dos应该修改路径吗

赋予执行属性

是chmod755split_dos吧我赋予了呀。

split_dos中不用改路径吗,我的目录下都没bin文件

那就是你缺少一个vp

修正版的splitdos有三个文件:

vp、sumdos和split_dos.ksh

实例4

散尽金币求split_dos运行

1我将split_dos与vp放在需要计算的文件夹下然后在当前目录运行shsplit_dos

出现以下错误

zhangkun@zhangkun-desktop:

~/band750$shsplit_dos

:

notfound2:

:

notfound3:

:

notfound8:

:

notfound11:

:

notfound12:

:

notfound18:

:

Nosuchfileordirectory

set:

20:

Illegaloption-A

zhangkun@zhangkun-desktop:

~/band750$

请问是怎么回事?

怎样才能计算出呢

2还有为什么我自己编译的vaspp4vasp不能读入vasprun.xml文件呢

有没有别的方法求的局域态密度的呢

我用了split-dos通过读入procar文件这几个需要输入的参数是什么含义啊

为什么会显示数组越界呢

我有自己些的分开DOS文件的shell,不知道和你用的split_dos功能一样不,如果需要站内PM我

运行shell时不用shsplit_dos直接./split_dos就行了

我有自己些的分开DOS文件的shell,不知道和你用的split_dos功能一样不,如果需要站内PM我

实例5

VASP计算出来的PDOS怎么画图啊?

求指教

用origin画图软件画,你把VASP计算出来的PDOS弄成txt格式(当然得从DOSCAR中splitdos得到,这个需要小程序,你自己搜一下),有两列,一列能量,一列态密度,直接用origin打开就行。

这个软件很有用的,像画能带结构什么的都是用的到的。

做分子模拟和材料计算materialstudio和origin是必不可少的,论坛上有这两个软件的教程,自己学习一下。

还有就是计算

然后:

./split_dos这样他就会帮你执行啦

实例6

VASP分波态密度

求助:

我算一个有Zn,O,H的体系,在用VASP计算态密度的时候,用的是PAW势,在INCAR里设置LORBIT=11计算,用split-dos程序分割每个原子的分波态密度,竟然在O原子里看到了有d电子的成分,觉得很奇怪,后来以为是INCAR的设置有问题,于是舍弃LORBIT=11,换成RWIGS,将Zn,O,H三个元素的Weige-Size半径写到INCAR里,可是最后得到的DOSCAR里连每个原子的dos都没有,只有一个总的dos.请教大家一下,这到底是为什么,要如何设置才能得到每个原子正确的分波态密度。

应该还是要设LORBIT=11这个参数的,至于O出现d的成份,很正常,因为PAW里面O默认的RWIGS偏大有可能把金属原子的d成份包括进去了,不过你可以把O原子所谓的p和d画在一起看看,你会发现d相对于p来说很小,几乎可以忽略不计,而且其所在的能量范围也比p高(可能就是金属原子的d所在能量范围)。

我查了一下O的dos,发现d电子的量还是非常大,在有的能级上能和O的p电子同量级,甚至有的比p电子的量还大。

这是一个O原子的PDOS,第二个是第一个在费米能级附近的放大图

曾经尝试过手动输入RWIGS,调节O的RWIGS,当然我的体系中只含一个氧原子,调节总的DOS影响不大,且尽可能保证OUTCAR中的volumeoftyp接近100%。

可以消除O的D态。

至于楼主说的没有分波态密度,猜测莫非不是静态计算,因为优化过程不产生DOS。

实例7

怎样移动态密度图DOS的费米能级Ef才是正确的呢?

问题:

为了同其他模型对比,计算出了晶体硅Si在gama点的态密度图,如下图所示,但老师说费米能级是错的。

计算按标准计算DOS步骤进行,经过了自洽计算->非自洽计算->DOSCAR分割,使用vdos脚本分割DOSCAR时已经自动移动了费米能级。

可是经过这样做得到的费米能级似乎是错的,其位置应该是在红色点线附近才对。

不知应该怎样移动费米能级才是正确的呢?

从图中看应该移动大约2eV左右,但这个值从哪里得到。

盼高手解答。

附:

1、晶体硅Si的计算模型图

2、VASP计算的INCAR文件、KPOINTS文件。

INCAR文件(非自洽计算)

general:

System=CrystalSicell

ISTART=0;ICHARG=11#自洽计算ICHARG=2;非自洽计算ICHARG=11

PREC=Accurate

ENCUT=320

ISMEAR=0;SIGMA=0.1

IALGO=48

GGA=91

ISPIN=2

VOSKOWN=1

AMIX=0.2

BMIX=0.0001

AMIX_MAG=0.8

BMIX_MAG=0.0001

MAGMOM=8*0

LREAL=.FALSE.#optionforsystemcontainlessthan20atoms

NPAR=1

LWAVE=.F.

LORBIT=1#非自洽计算选项,计算spd分波态密度

RWIGS=1.312

非自洽计算gama点态密度DOS时的KPOINTS文件:

K-Points

0

Gama

111

000

费米能级的移动是什么意思呢?

费米能级不是确定的吗?

在自洽计算得到的OUTCAR文件中有的。

在非自洽计算得到的OUTCAR文件中也有的。

这两处得到的费米能级有些差别,有的似乎较大。

做splitdos的时候,会从与DOSCAR放在一起的的OUTCAR文件中读费米能级E-fermi。

然后就自动以这个费米能级为零点。

我个人觉得,费米能级算不准,不同软件,以及vasp中静态自洽和非自洽计算结果也有差别。

所以有文献干脆不提费米能级,而只以价带顶为参考零点。

你的体系并不大,静态自洽的K点只取一个似乎不好,可以取7*7*7.

费米能级是否能算的准,比如费米能级是否能出现在浅受主能级与价带顶之间,或者本征绝然体带隙正中间?

我没有算出来过。

1、费米能级是能够确定的。

费米能级由vdos脚本(或split_dos脚本)自动从DOSCAR中抽取出来的,然后得到上面的DOS图。

2、k点是故意选成单个gama点的。

由于我想看gama点的态密度,所以只设定了一个k点,因而k点个数是不必增加的。

3、费米能级的确会算不准。

之前查看过自洽计算和非自洽计算的OUTCAR,它们的费米能级有差别,因而在作图时应该考虑自洽计算和非自洽计算费米能级的差值。

我的困惑在于,现在图中标示的费米能级是错的,应该是在大约红线的位置,可是不知怎之前的自洽计算,k点取了多少?

自洽计算时的KPOINTS文件:

K-Points

0

m

111111

000

实例8

怎么使用DOSCAR画出DOS图形

∙我安装好VASP好长时间了,但是一直没有用过。

这几天用别人的一个实例运行了一下,得到一些输出文件,但不知如何画DOS图。

不知道如何由输出文件DOSCAR,提取有用数据从而得到DOS图形。

请教大家:

大致步骤和所用的工具。

另:

我机器上安装过了Origin8.0。

好像直接可以输出DOS图!

搜索下P4VASP或者split-dos软件都可以画dos

附件中的程序可以帮你处理,你用下看看

总DOS一般没多大用,一般投影到原子或轨道上更有用些。

找到你要的那个原子,直接把数据拷出来,用ORIGIN画就是了

直接拷贝出来画图即可如果你既做了自旋极化,又做了轨道投影,一般DOSCAR的结构为前301行的5列是:

能量值自旋向上的总态密度自旋向下的总态密度自旋向上的电子数自旋向下的电子数后面的是:

能量值s-ups-downpy-uppy-downpz-uppz-downpx-uppx-downdxy-updxy-downdyz-updyz-downdz2-updz2-downdxz-updxz-downdx2-updx2-down类推吧

在linux下你可以用xmgrace或者用p4vasp先处理一下,再用xmgrace

推荐是gnuplot,可以写一个批处理文件,以后画同一类型的都可以统一画

实例9

DOSCAR分割问题

请教大家,vasp计算的结果输出有个DOSCAR文件,用于分析态密度的我用split_dos工具分割此文件,会出现DOS0,DOS1.........;DOS1是第一个原子的分波态密度值,其中的第一列数据是能量值,第二、三、四列数据分别对应于s、p、d态的分波态密度值.

问题出现了,我这个原子没来d轨道,竟然出现第四列,这是上面原因呢?

第4列上的数字是0么?

建议你用p4vasp做DOS图,快些

我没有设LORBIT这个参数按理应出现energys-DOSp-DOSd-DOS我这个原子没来d轨道,竟然出现第四列而且第四列不是0

不管算什么都会有d电子出现的。

正常情况下d的值应该很小才对,画的时候可以忽略掉。

实例11同样情况下,不同的导出数据方法态密度怎么不一样

RT

我是将DOSCAR中的数据转换成图中黑色的线,然后用小程序spilt_dos分出DOS0后,得到图中的红线,很明显,两者像是平移了一样,我有点怀疑是菲米能级的问题,用split_dos时其费米能级用的是静态计算的OUTCAR里的,但又不是很明白,麻烦大家帮帮忙。

另外,我用split_dos分出每一个原子的态密度之后,我想知道某些个原子的态密度的共同贡献,怎么处理呢,总不能一个一个DOSi相加吧,这工作量很大啊,不知道高手们是怎么处理的?

你的菲米能级不一样造成的,自己看DOSCAR,确定那个的菲米能级是对的吧

恩查了一下应该是DOSCAR是以真正的费米能级,而split_dos则是以零为费米能级的。

请问您试着叠加过很多原子的DOS么?

不能手动相加吧

没有但是你可以徐程序相加或者通过origin,excel也行

origin怎么相加啊我的大约要相加100多个原子,而且每个原子的态密度文件中又是分S.P.D的

实例12读懂split_dos,学会linuxshell编脚本处理数据

下面是处理VASP输出数据得到态密度的脚本文件split_dos,与它配合的vp没有贴出来。

学习vasp如果会一些shell编程,对vasp的运用会更灵活方便。

这个程序听说比较老,有些问题,不能直接用来处理vasp4.6及以上版本的数据,也不能处理f电子。

有兴趣的可以关注一下,看看语法本身,或者提出修改意见,都有BB鼓励。

:

D:

D:

D:

D:

D:

D:

D:

D:

D:

D:

D:

D:

D:

D:

D:

D:

D:

D:

D:

D:

D:

D:

D:

D:

D:

D:

D:

D:

D

 

#!

/bin/ksh

 

#ScripttobreaktheVASPDOSCARfileintosegmentsfor

#eachatomicsite.

#JMSNRL5/0/02

#ModifiedtoalsoaligntheFermilevelfromthegroundstate

#toE=0.0

#JMSNRL6/19/02

 

#Executablesresidehere

BIN=~/bin#把这里修改为vp保存的路径。

然后把split_dos的路径添加到PATH中。

 

if[$#-ne0];then#直接在shell提示符下输入split_dos运行,否则提醒Usage:

split_dos,返回信息2.

echo"Usage:

split_dos"

exit2

fi

#ScripttosplittheDOSCARfileintotheatomic

#projectionslabeledbyatomnumber

dosfile=DOSCAR

outfile=OUTCAR

infile=INCAR

 

#Tokenforsplittingthefiles

token=$(sed-n'6p'$dosfile|awk'{print$1}')#这个token后面好像没有用到,有什么用呢?

#Numberofpoints

nl=$(sed-n'6p'$dosfile|awk'{print$3}')

#Numberofatoms

natom=$(sed-n'1p'$dosfile|awk'{print$1}')

 

#GettheFermileveliftheOUTCARfileispresent,

#elsewesetittozero.

if[-a$outfile];then

echo"The"$outfile"exists,weuseittogettheFermilevel,"

echo"theRWIGStagandthenumberofspins."

efermi=$(grep"E-fermi"$outfile|tail-1|awk'{print$3}')

echo"Fermilevel:

"$efermi

nspin=$(grep"ISPIN"$outfile|tail-1|awk'{print$3}')

if[$nspin-eq2];then

echo"Spinpolarizedcalculation"

else

echo"Unpolarizedcalculation"

fi

#2.a

#JMS2/3/03ModifiedtoacceptspecificationbyLORBITtoken.

#

lorbit=$(grep"LORBIT"$outfile|tail-1|awk'{print$3}')

if[$lorbit-ge10];then

echo"LORBIT>10"

echo"WARNING:

notcompletelytestforvasp.4.*"

echo"Useatyourownrisk.Pleasecheckresultsforconsistency."

form=1

else

#2.a

rwigs=$(grep"RWIGS"$outfile|tail-1|awk'{print$3}'|sed's/\.//g')

if[$rwigs-eq-100];then

echo"RWIGStokennotset"

form=0

else

echo"RWIGStokenset"

form=1

fi

#2.a

fi

#2.a

else

echo"The"$outfile"doesnotexist,wesettheFermilevelto0"

echo"assumeanunpolarizedcalculation,andRWIGSnotset"

form=0

nspin=1

efermi=0.0

fi

#Iftheoutcarfileisnotpresentandyouwishtosetsomethingbyhand

#youshoulddoithere.Uncommentthetokensbelowandsetthembyhand.

#efermi=2.255

#form=

#nspin=

#Gettheatomiccoordinates

$BIN/vp>|tmp.dat

tail-$natomtmp.dat|awk'{printf"%s%12.8f%12.8f%12.8f\n","#",$2,$3,$4}'>|tmp.dat2

#TotalisfirstDOS

if[$form-eq0];then#这个很怪,为什么不直接i=0呢?

i=0

else

i=0

fi

start=7

end=$((start+nl-1))

#echo$start$end

#exit0

rm-fDOS0

if[$form-eq1];then

while[$i-le$natom];do

#echo$i$start$end

if[$i-gt0];then

sed-n''$i'p'tmp.dat2>|DOS$i#读入对应原子位置坐标到DOSi第一行

fi

if[$i-gt0];then

#AtomicprojectedDOS

if[$nspin-eq2];then

sed-n''$start','$end'p'$dosfile|awk'{printf"%12.8f%12.8f%12.8f%12.8f%12.8f%12.8f%12.8f\n",$1+(-1)*'$efermi',$2,-1*$3,$4,-1*$5,$6,-1*$7}'>>DOS$i

else

sed-n''$start','$end'p'$dosfile|awk'{printf"%12.8f%12.8f%12.8f%12.8f\n",$1+(-1)*'$efermi',$2,$3,$4}'>>DOS$i

fi

else

#TotalDOS

if[$nspin-eq2];then

sed-n''$start','$end'p'$dosfile|awk'{printf"%12.8f%12.8f%12.8f%12.8f%12.8f\n",$1+(-1)*'$efermi',$2,-1*$3,$4,-1*$5}'>>DOS$i

else

sed-n''$start','$end'p'$dosfile|awk'{printf"%12.8f%12.8f%12.8f\n",$1+(-1)*'$efermi',$2,$3}'>>DOS$i

fi

fi

start=$((end+2))

end=$((start+nl-1))

i=$((i+1))

done

else

while[$i-le0];do#这个奇怪,为什么要讨论i<0呢?

不是只需考虑i>=0吗?

前面已经全部包含了的呀?

#echo$i$start$end

if[$i-gt0];then

sed-n''$i'p'tmp.dat2>|DOS$i

fi

if[$i-gt0];then

#AtomicprojectedDOS

if[$nspin-eq2];then

sed-n''$start','$end'p'$dosfile|awk'{printf"%12.8f%12.8f%12.8f%12.8f%12.8f%12.8f%12.8f\n",$1+(-1)*'$efermi',$2,-1*$3,$4,-1*$5,$6,-1*$7}'>>DOS$i

else

sed-n''$start','$end'p'$dosfile|awk'{printf"%12.8f%12.8f%12.8f%12.8f\n",$1+(-1)*'$efermi',$2,$3,$4}'>>DOS$i

fi

else

#TotalDOS

if[$nspin-eq2];then

sed-n''$start','$end'p'$dosfile|awk'{printf"%12.8f%12.8f%12.8f%12.8f%12.8f\n",$1+(-1)*'$efermi',$2,-1*$3,$4,-1*$5}'>>DOS$i

else

sed-n''$start','$end'p'$dosfile|awk'{printf"%12.8f%12.8f%12.8f\n",$1+(-1)*'$efermi',$2,$3}'>>DOS$i

fi

fi

start=$((end+2))

end=$((start+nl-1))

i=$((i+1))

done

fi

exit0

 

你自己用fortran写个都比这个简单多了.

 

呵呵,想学学linux的shell编程,觉得shell编程比fortran好用呢。

不过我不是反对fortr

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

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1