VASP结构优化过程中查看能量和力收敛
Created At : 2019-08-19 00:00
Views 👀 :
原作者Pai Li,本文转自一个人就是一个叠加态的博客 ,http://blog.sina.com.cn/s/blog_b364ab230102vxj8.html
注原脚本有一些小bug,在此博文中纠正,未经允许禁止转载 。但非常欢迎转发文章链接。
上传两个自己写的shell脚本,是用来查看vasp结构优化过程中能量和力等收敛情况的。 第一个脚本比较简单:
1 2 3 4 5 6 7 8 9 10 11 12 #!/bin/sh #edit by lipai@USTC #plot energies of structure in optimization awk '/E0/{if ( i<=5 ) i++;else print $0 }' OSZICAR >temp.e gnuplot <<EOF set term dumb set title 'Energy of each ion steps' set xlabel 'Ion steps' set ylabel 'Energy(eV)' plot 'temp.e' u 1:5 w l EOF #rm temp.e
其过程就是查看OSZICAR文件中每一离子步的能量,然后用gnuplot把数据画出来。 效果如下:
第二个脚本画两个图:
一个图是计算每一步的结构离初始的POSCAR结构有多远(需要用到vtst的脚本dist.pl ,输入which dist.pl
确定此脚本在系统环境路径里)第二个图是画出每一步中原子所受最大力。第二个图中的力对应于INCAR中的EDIFFG参数,某个离子步中的最大力小于EDIFFG的绝对值,就达到收敛结束计算。
效果如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 #!/bin/bash # eliminate forces of fixed atoms fix=$1 if test -z $1; then fix=0 fi # get force form OUTCAR awk -v fix="$fix" '/POSITION/,/drift/{ if($1~/^[0-9.]+$/&&$3>=fix) print $1,$2,$3,sqrt($4*$4+$5*$5+$6*$6i); else if($1=="total") print $0 }' OUTCAR >temp.f awk '{ if($1=="total") {print ++i,a;a=0} else {if(a<$4) a=$4} }' temp.f >force.conv #sed -i '1,9d' force.conv #rm temp.f tail -30 force.conv >temp.f #get dist from XDATCAR touch p1.conv p2.conv; touch dist.conv Num=`awk 'NR==7{for(i=1;i<=NF;i++) a=$i+a;}END{print a}' XDATCAR` Lnum=`wc XDATCAR|awk '{print $1}'` ((n=(Lnum-7)/(Num+1))) head -7 XDATCAR >p1.conv awk -v num="$Num" 'NR==9,NR==(num+1)+7{print $0}' XDATCAR >>p1.conv for((i=1;i<n;i++)) do head -7 XDATCAR >p2.conv ((n1=9+(Num+1)*i)) ((n2=(i+1)*(Num+1)+7)) #echo $n1 #echo $n2 sed -n "$n1,$n2"'p' XDATCAR >>p2.conv echo -e $i"\t"`dist.pl p1.conv p2.conv ` >>dist.conv done #plot gnuplot <<EOF set term dumb set xlabel 'Ion steps' set ylabel 'Dist (Angstrom)' plot 'dist.conv' w l t " Dist " set xlabel 'Ion steps' set ylabel 'Force (eV/Angstrom)' plot 'temp.f' w l t " Force " EOF rm force.conv dist.conv p1.conv p2.conv temp.f
需要说明的是:
因为脚本中涉及到很多距离计算,画图时间会略长。
这里说所有原子所受最大力,其实不包括固定原子。vasp的力的收敛是忽略固定原子受力情况的。
脚本中用到了dist.pl脚本,这个脚本详情可参见我的博文
这里力只画了最后的30步,如需画更多步,更改脚本中的30即可。
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。