77范文网 - 专业文章范例文档资料分享平台

VASP处理split_dos(4)

来源:网络收集 时间:2019-06-11 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

echo \ form=0 else

echo \ form=1 fi fi # 2.a

else

#如果没有OUTCAR,那就自己设置一些参数:非自旋极化计算,费米能为0. echo \ echo \ form=0 nspin=1 efermi=0.0 fi

# 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.

#这里是如果你要多次处理一些文件,同时又没有OUTCAR文件那么可以在这里设置费米能。

#efermi=2.255 #form= #nspin=

# Get the atomic coordinates $BIN/vp >| tmp.dat

tail -$natom tmp.dat | awk '{printf \tmp.dat2

#调用vp从POSCAR中获得原子的位置,然后用tail和awk获得具体的原子坐标,并且前面加上#,方便后面gnuplot画图。

#>表示重新定向,把本来vp输出到终端的结果输出到文件tmp.dat中 #使用>要注意,如果只是附加而不是新建那么必须用>>而非>

#除此之外,>是这样的工作的,它会左右两边的命令同时运行(只是一个直接运行而一个等待输入)而不是等一个运行完之后才运行第二个。所以不要执行这种命令:cat a.txt > a.txt,这样你只会得到一个空白文件,因为>在cat的时候同时创建了a.txt空白文件等待输入同时就把原来的a.txt覆盖掉了,所以cat a.txt就只是空白,重新定向输入到a.txt也就是空白。

# Total is first DOS i=0

#之前的if语句没有用,是因为之前的修改而留下的冗余语句。 #这个i是标记第几个原子的变量。

start=7

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

#从第7行到第end行开始输出DOS

echo $start $end #exit 0 rm -f DOS0

if [ $form -eq 1 ]; then #LORBIT=10

while [ $i -le $natom ]; do

#输入所有的原子,用while语句实现:i小于原子数,那么输出 echo $i $start $end

if [ $i -gt 0 ]; then

#并非totalDOS,那么在第一行中加入原子位置,输出到DOS$i文件 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' p' $dosfile | awk '{printf \$4, -1*$5, $6, -1*$7}' >> DOS$i

#如果是自旋计算,那么就按格式输出,并且把自旋朝下的乘以-1,方便后面画图。

#sed指定输出从start到end的行,awk指定输出格式并且做能量的处理(平移费米能到零点)

else sed -n ''$start','$end' p' $dosfile | awk '{printf \ #没有自旋就简单多了,只需要平移就可以了。 fi

else

# Total DOS

if [ $nspin -eq 2 ]; then sed -n ''$start','$end' p' $dosfile | awk '{printf \.8f .8f .8f .8f \\n\$1+(-1)*'$efermi', $2, -1*$3, $4, -1*$5 }' >> DOS$i else

sed -n ''$start','$end' p' $dosfile | awk '{printf \\\n\ fi

#对totaldos的处理 fi

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

移动到下一个原子的输出,只需要控制start和end就可以了,并且修改i的大小。 done

elif [ $form -eq 0 ];then

# the form=0 is an unkown code! while [ $i -le 0 ]; do

#这里-le应该换成-eq也可以,也即是说等于0就是totaldos就不输出原子坐标了。 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' p' $dosfile | awk '{printf \$4, -1*$5, $6, -1*$7}' >> DOS$i else sed -n ''$start','$end' p' $dosfile | awk '{printf \ fi

else

# Total DOS

if [ $nspin -eq 2 ]; then sed -n ''$start','$end' p' $dosfile | awk '{printf \.8f .8f .8f .8f \\n\$1+(-1)*'$efermi', $2, -1*$3, $4, -1*$5 }' >> DOS$i else

sed -n ''$start','$end' p' $dosfile | awk '{printf \\\n\

fi

fi

start=$((end+2)) end=$((start+nl-1)) i=$((i+1)) done

#以上都是和form=1是一样的

elif [ $form -eq 2 ];then

#这里是我处理的LORBIT=11的时候加入的。主要是修改awk的输出格式 while [ $i -le $natom ]; do

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' p' $dosfile | awk '{printf \.8f .8f .8f .8f .8f .8f .8f .8f \\n\-1*$3, $4, -1*$5, $6, -1*$7,$8,-1*$9,$10,-1*$11,$12,-1*$13,$14,-1*$15,$16,-1*$17,$18,-1*$19}' >> DOS$i #这里是要命的awk输出,其实就长一点,格式没有什么困难。

#这里的问题是不论是原子,都会输出这么长的一串,即使没有d,f轨道,但都是0.这是VASP的问题,不是这个脚本的问题。

else sed -n ''$start','$end' p' $dosfile | awk '{printf \.8f .8f .8f .8f .8f .8f .8f .8f .8f \\n\$1+(-1)*'$efermi', $2, $3, $4,$5,$6,$7,$8,$9,$10 }' >> DOS$i fi

else

# Total DOS

if [ $nspin -eq 2 ]; then sed -n ''$start','$end' p' $dosfile | awk '{printf \.8f .8f .8f .8f \\n\$1+(-1)*'$efermi', $2, -1*$3, $4, -1*$5 }' >> DOS$i

else

sed -n ''$start','$end' p' $dosfile | awk '{printf \\\n\ fi

fi

start=$((end+2)) end=$((start+nl-1)) i=$((i+1)) done

#其他的都没有什么需要改的了 fi

exit 0

#这里停止程序并给出一个0的状态符,是个好的习惯,方便别人调用的脚本的时候判断这个脚本是否正常运行结束了。

#最后是shellscript和python,perl的对比

#不得不说perl,python的功能更加强大,但是shellscript更容易学和容易编写

#因为shellscipt就是把我们在命令行下面的输入的命令直接合在一起就可以了,而不需要调用库文件和编译之类;同时我们很多时候都用shell命令,对这些命令更加熟悉,在编写的时候也容易把握。

#有很多命令都可以在shell下面直接尝试,调好之后就直接放在shellscript就可以了。(我经常是这么干的……)

#shellscript就像把我们日常的话整理一下放在一起就发表的文章,而python,perl有专门的语法而要求,就像规范的文章.所以前者要容易写的多,后者如果不是经常写容易出错。 #由于shellscipt是没有编译的和优化的,所以效率会低;同时由于没有编译,所以没有整体的检查,所以bug会隐蔽(当然语法错误在运行的时候还是会提醒的)。而且由于很多管道和正则,所以shellscript的可读性并不是很好。而且shellscript的依赖性很强,不好移植。所以不要用shellscript写大程序,特别是计算量很大的程序。很多时候,shellscript是方便快捷的\处理。

#计算量大的程序,用fortran;处理大量文档和文本,用python或perl。

我的输入法不是很好所以经常有错别字,抱歉,发现请告知

PROCAR给出的信息非常多,但是和DOSCAR不一样,没有可比性。DOSCAR是给出态密度,而PROCAR是给出每个K点上面的每个能级的组合成分

实例13

关于VASP计算PDOS的疑问

小弟刚学VASP在计算完TDOS和PDOS之后,不知道怎么将DOS图画出来。后来找了个dos-procar.f的小脚本,不知道对不对。在处理之后得到的结果看不懂,以O原子为例:本

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库VASP处理split_dos(4)在线全文阅读。

VASP处理split_dos(4).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/658172.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: