1、VASP处理splitdos实例1split-dos的工作原理我算了一个BaTiO3单胞,5个原子,加上总的态密度应该一共6组数据。但是计算结果的DOSCAR中却有1+5*7,36组数据,不知道每组数据对应什么?用split-dos脚本处理之后,确实生成了DOS0DOS5,这是怎么生成的?脚本看不懂,望指教其原理。我对比过DOS4和DOSCAR,里面的数据没相同的。PS:是不是一定要运行vp后才能运行split-dos?split_dos是把费米能级算进去了的,所以能量会有不同 但是其他的应该只是从DOSCAR里面提取出来的。可以给我发第一列是能量 后面的分别是s-up s-down p-up
2、 p-down d-up d-down从 脚本上看 vp 不是必须的实例2电子态密度图是怎么做的?我看好多文献在做电子结构计算时,都有态密度图,请问这是怎么作的?装个p4vasp,里面可以导入计算所得到的vasp.xml文件,选择electronic - DOS+BAND就可以画出态密度图,然后Graph - export 就可以到处数据到Origin中画图。p4vasp还可以处理各种PDOS,并自动把自旋向下的电子态密度数据设为负值,非常方便。我不用P4VASP 行吗?直接从DOSCAR里找出数据画图或者用split-dos给分割一下之后画图 这样做也是正确的吧?实例3split_dos运行
3、我将split_dos 和vp放在vasp第一次运行后的同一个目录下,然后运行,出现结果./split_dos94: /vp: not found No such file or directory请问是什么原因,在split_dos应该修改路径吗赋予执行属性是chmod 755 split_dos吧 我赋予了呀。split_dos中不用改路径吗,我的目录下都没bin文件那就是你缺少一个vp修正版的splitdos有三个文件:vp、 sumdos和split_dos.ksh实例4散尽金币求split_dos 运行1 我将split_dos 与vp 放在 需要计算的文件夹下 然后在当前目录运行
4、sh split_dos出现以下错误zhangkunzhangkun-desktop:/band750$ sh split_dos: not found2: : not found3: : not found8: : not found11: : not found12: : not found18: : No such file or directoryset: 20: Illegal option -Azhangkunzhangkun-desktop:/band750$请问是怎么回事 ?怎样才能计算出呢 2 还有为什么我自己编译的vasp p4vasp 不能读入vasprun.xml文件呢
5、有没有别的方法 求的局域态密度的呢 我用了split-dos 通过读入procar文件 这几个需要输入的参数是什么含义啊 为什么会显示数组越界呢我有自己些的分开DOS文件的shell,不知道和你用的split_dos功能一样不,如果需要站内PM我运行shell时不用 sh split_dos直接 . split_dos就行了我有自己些的分开DOS文件的shell,不知道和你用的split_dos功能一样不,如果需要站内PM我实例5VASP计算出来的PDOS怎么画图啊?求指教用origin 画图软件画,你把VASP计算出来的PDOS弄成txt格式(当然得从DOSCAR 中 split dos 得
6、到,这个需要小程序,你自己搜一下),有两列,一列能量,一列态密度,直接用origin打开就行。这个软件很有用的,像画能带结构什么的都是用的到的。做分子模拟和材料计算 material studio 和 origin 是必不可少的,论坛上有这两个软件的教程,自己学习一下。还有就是计算然后: ./split_dos这样他就会帮你执行啦实例6VASP 分波态密度求助: 我算一个有Zn,O,H的体系,在用VASP计算态密度的时候,用的是PAW势,在INCAR里设置LORBIT=11计算, 用split-dos程序分割每个原子的分波态密度,竟然在O原子里看到了有d电子的成分,觉得很奇怪,后来以为是INC
7、AR的设置有问题,于是舍弃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的do
8、s,发现d电子的量还是非常大,在有的能级上能和O的p电子同量级,甚至有的比p电子的量还大。这是一个O原子的PDOS,第二个是第一个在费米能级附近的放大图曾经尝试过手动输入RWIGS,调节O的RWIGS,当然我的体系中只含一个氧原子,调节总的DOS影响不大,且尽可能保证OUTCAR中的volume of typ 接近100%。可以消除O的D态。至于楼主说的没有分波态密度,猜测莫非不是静态计算,因为优化过程不产生DOS。实例7怎样移动态密度图DOS的费米能级Ef才是正确的呢?问题:为了同其他模型对比,计算出了晶体硅Si在gama点的态密度图,如下图所示,但老师说费米能级是错的。计算按标准计算DOS
9、步骤进行,经过了自洽计算-非自洽计算-DOSCAR分割,使用vdos脚本分割DOSCAR时已经自动移动了费米能级。可是经过这样做得到的费米能级似乎是错的,其位置应该是在红色点线附近才对。不知应该怎样移动费米能级才是正确的呢?从图中看应该移动大约2 eV左右,但这个值从哪里得到。盼高手解答。附:1、晶体硅Si的计算模型图2、VASP计算的INCAR文件、KPOINTS文件。INCAR文件(非自洽计算)general:System = Crystal Si cellISTART = 0 ; ICHARG=11 #自洽计算 ICHARG=2; 非自洽计算 ICHARG=11PREC=Accurate
10、ENCUT=320ISMEAR = 0; SIGMA = 0.1IALGO = 48GGA=91ISPIN=2VOSKOWN = 1AMIX=0.2BMIX=0.0001AMIX_MAG=0.8BMIX_MAG=0.0001MAGMOM= 8*0LREAL = .FALSE. #option for system contain less than 20 atomsNPAR = 1LWAVE = .F.LORBIT = 1 #非自洽计算选项,计算spd分波态密度RWIGS = 1.312非自洽计算gama点态密度DOS时的KPOINTS文件:K-Points0Gama1 1 10 0 0费米能
11、级的移动是什么意思呢?费米能级不是确定的吗?在自洽计算得到的OUTCAR文件中有的。在非自洽计算得到的OUTCAR文件中也有的。这两处得到的费米能级有些差别,有的似乎较大。做split dos的时候,会从与DOSCAR放在一起的的OUTCAR文件中读费米能级E-fermi。然后就自动以这个费米能级为零点。我个人觉得,费米能级算不准,不同软件,以及vasp中静态自洽和非自洽计算结果也有差别。所以有文献干脆不提费米能级,而只以价带顶为参考零点。你的体系并不大,静态自洽的K点只取一个似乎不好,可以取7*7*7.费米能级是否能算的准,比如费米能级是否能出现在浅受主能级与价带顶之间,或者本征绝然体带隙正
12、中间?我没有算出来过。1、费米能级是能够确定的。费米能级由vdos脚本(或split_dos脚本)自动从DOSCAR中抽取出来的,然后得到上面的DOS图。2、k点是故意选成单个gama点的。由于我想看gama点的态密度,所以只设定了一个k点,因而k点个数是不必增加的。3、费米能级的确会算不准。之前查看过自洽计算和非自洽计算的OUTCAR,它们的费米能级有差别,因而在作图时应该考虑自洽计算和非自洽计算费米能级的差值。我的困惑在于,现在图中标示的费米能级是错的,应该是在大约红线的位置,可是不知怎之前的自洽计算,k点取了多少?自洽计算时的KPOINTS文件:K-Points0m11 11 110 0
13、 0实例8怎么使用DOSCAR画出DOS图形我安装好VASP好长时间了,但是一直没有用过。这几天用别人的一个实例运行了一下,得到一些输出文件,但不知如何画DOS图。不知道如何由输出文件DOSCAR,提取有用数据从而得到DOS图形。请教大家:大致步骤和所用的工具。另:我机器上安装过了Origin8.0。好像直接可以输出DOS图!搜索下 P4VASP 或者split-dos 软件 都可以画dos附件中的程序可以帮你处理,你用下看看总DOS一般没多大用,一般投影到原子或轨道上更有用些。找到你要的那个原子,直接把数据拷出来,用ORIGIN画就是了直接拷贝出来画图即可 如果你既做了自旋极化,又做了轨道投
14、影,一般DOSCAR的结构为前301行的5列是:能量值 自旋向上的总态密度 自旋向下的总态密度 自旋向上的电子数 自旋向下的电子数 后面的是:能量值 s-up s-down py-up py-down pz-up pz-down px-up px-down dxy-up dxy-down dyz-up dyz-down dz2 -up dz2-down dxz-up dxz-down dx2-up dx2-down 类推吧在linux下你可以用xmgrace 或者用p4vasp先处理一下,再用xmgrace推荐是gnuplot,可以写一个批处理文件,以后画同一类型的都可以统一画实例9DOSCA
15、R分割问题请教大家,vasp 计算的结果 输出有个DOSCAR文件,用于分析态密度的我用split_dos 工具分割此文件 ,会出现DOS0,DOS1.; DOS1是第一个原子的分波态密度值,其中的第一列数据是能量值,第二、三、四列数据分别对应于s、p、d态的分波态密度值. 问题出现了,我这个原子没来d轨道,竟然出现第四列,这是上面原因呢?第4列上的数字是0么?建议你用p4vasp做DOS图,快些我没有设LORBIT 这个参数 按理 应出现energy s-DOS p-DOS d-DOS 我这个原子没来d轨道,竟然出现第四列 而且第四列不是0 不管算什么都会有d电子出现的。正常情况下d的值应该
16、很小才对,画的时候可以忽略掉。实例11同样情况下,不同的导出数据方法 态密度怎么不一样RT我是将DOSCAR中的数据转换成图中黑色的线,然后用小程序spilt_dos分出DOS0后,得到图中的红线,很明显,两者像是平移了一样,我有点怀疑是菲米能级的问题,用split_dos时其费米能级用的是静态计算的OUTCAR里的,但又不是很明白,麻烦大家帮帮忙。另外,我用split_dos分出每一个原子的态密度之后,我想知道某些个原子的态密度的共同贡献,怎么处理呢,总不能一个一个DOSi 相加吧,这工作量很大啊,不知道高手们是怎么处理的?你的菲米能级不一样造成的,自己看DOSCAR,确定那个的菲米能级是对
17、的吧恩 查了一下 应该是DOSCAR是以真正的费米能级,而split_dos 则是以零为费米能级的 。请问您试着叠加过很多原子的DOS么?不能手动相加吧没有 但是你可以徐程序相加 或者通过origin,excel也行origin怎么相加啊 我的大约要相加100多个原子,而且每个原子的态密度文件中又是分S.P.D的实例12读懂split_dos,学会linux shell编脚本处理数据下面是处理VASP输出数据得到态密度的脚本文件split_dos,与它配合的vp没有贴出来。学习vasp如果会一些shell编程,对vasp的运用会更灵活方便。这个程序听说比较老,有些问题,不能直接用来处理vasp
18、4.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# Script to break the VASP DOSCAR file into segments for# each atomic site. # JMS NRL 5/0/02# Modified to also align the Fermi level from the ground state# to E=0.0# JMS NRL 6/1
19、9/02# Executables reside hereBIN=/bin #把这里修改为vp保存的路径。然后把split_dos的路径添加到PATH中。if $# -ne 0 ; then #直接在shell提示符下输入split_dos运行,否则提醒Usage: split_dos,返回信息2. echo Usage: split_dos exit 2fi# Script to split the DOSCAR file into the atomic# projections labeled by atom numberdosfile=DOSCARoutfile=OUTCARinfile
20、=INCAR# Token for splitting the filestoken=$(sed -n 6 p $dosfile | awk print $1) #这个token后面好像没有用到,有什么用呢?# Number of pointsnl=$(sed -n 6 p $dosfile | awk print $3)# Number of atomsnatom=$(sed -n 1 p $dosfile | awk print $1)# Get the Fermi level if the OUTCAR file is present,# else we set it to zero.i
21、f -a $outfile ; then echo The $outfile exists, we use it to get the Fermi level, echo the RWIGS tag and the number of spins. efermi=$(grep E-fermi $outfile | tail -1 | awk print $3) echo Fermi level: $efermi nspin=$(grep ISPIN $outfile | tail -1 | awk print $3) if $nspin -eq 2 ; then echo Spin polar
22、ized calculation else echo Unpolarized calculation fi# 2.a# JMS 2/3/03 Modified to accept specification by LORBIT token. # lorbit=$(grep LORBIT $outfile | tail -1 | awk print $3) if $lorbit -ge 10 ; then echo LORBIT 10 echo WARNING: not completely test for vasp.4.* echo Use at your own risk. Please
23、check results for consistency. form=1 else# 2.a rwigs=$(grep RWIGS $outfile | tail -1 | awk print $3 | sed s/./g) if $rwigs -eq -100 ; then echo RWIGS token not set form=0 else echo RWIGS token set form=1 fi# 2.a fi# 2.aelse echo The $outfile does not exist, we set the Fermi level to 0 echo assume a
24、n unpolarized calculation, and RWIGS not set form=0 nspin=1 efermi=0.0fi# If the outcar file is not present and you wish to set something by hand# you should do it here. Uncomment the tokens below and set them by hand.#efermi=2.255#form=#nspin=# Get the atomic coordinates$BIN/vp | tmp.dattail -$nato
25、m tmp.dat | awk printf %s %12.8f %12.8f %12.8f n, #, $2, $3, $4 | tmp.dat2# Total is first DOSif $form -eq 0 ; then #这个很怪,为什么不直接i=0呢?i=0elsei=0fi start=7end=$(start+nl-1)#echo $start $end#exit 0rm -f DOS0if $form -eq 1 ; then while $i -le $natom ; do #echo $i $start $end if $i -gt 0 ; then sed -n $i
26、 p tmp.dat2 | DOS$i #读入对应原子位置坐标到DOSi第一行 fi if $i -gt 0 ; then# Atomic projected DOS if $nspin -eq 2 ; 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 pr
27、intf %12.8f %12.8f %12.8f %12.8f n, $1+(-1)*$efermi, $2, $3, $4 DOS$i fi else# Total DOS if $nspin -eq 2 ; 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 %
28、12.8f n, $1+(-1)*$efermi, $2, $3 DOS$i fi fi start=$(end+2) end=$(start+nl-1) i=$(i+1) doneelse while $i -le 0 ; do #这个奇怪,为什么要讨论i=0吗?前面已经全部包含了的呀? #echo $i $start $end if $i -gt 0 ; then sed -n $i p tmp.dat2 | DOS$i fi if $i -gt 0 ; then# Atomic projected DOS if $nspin -eq 2 ; then sed -n $start,$end
29、 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# Total DOS if $nspin -eq 2 ; then sed -n $start
30、,$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) donefiexit 0你自己用fortran写个都比这个简单多了.呵呵,想学学linux的shell编程,觉得shell编程比fortran好用呢。不过我不是反对fortr
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1