|
|
[交流]
【求助】VASP计算能带的数据处理与作图 已有2人参与
我用VASP计算了能带,用脚本vaspbnd处理后得到vaspbndup.dat和vaspbnddn.dat,用Origin作图后发现:几条能带的部分数据互换了!如下图蓝色、红色和粉色的曲线!红色的中部应该是向上上去的,结果向下凹了,正好那部分应该是粉色的。检查了脚本vaspbnd处理的数据文件vaspbndup.dat,其数据是和outcar以及EIGENVAL的结果对应的!如何调整让同一能带的数据在同一列?不想手工移动数据!!请问有没有其他脚本处理后不会出现这种情况?
附脚本vaspbnd内容:
#! /bin/bash
#Writted by N.C.Arlonne
#Modified by Zhao Jian-Hua,2010/04/15
#Time: 2008/04/05 1:49
echo "Writted by N.C.Arlonne"
echo "Modified by Zhao Jian-Hua,2010/04/15"
#echo "how many nbands?"
#read nband
if [ -d BAND ]
then
rm -rf BAND
fi
mkdir BAND
#--------------- Required variable global start -----------------#
#rm OUTCARtmp
eig=EIGENVAL
outcar=OUTCAR
spin=$(sed -n '1 p' $eig|awk '{print $4}')
nband=$(sed -n '6 p' $eig|awk '{print $3}')
npoint=$(sed -n '6 p' $eig|awk '{print $2}')
export efermi=$(grep E-fermi OUTCAR|awk '{print $3}')
awk '{print NR, $0}' $outcar>>OUTCARtmp
tmpoutcar=OUTCARtmp
#efermi=$(grep E-fermi OUTCAR|awk '{print $3}')
echo "E-Fermi:" $efermi
#-------------- Required global variable end ------------------#
#========================== Main start ===============================#
if [ "$spin" -eq 1 ];then
echo "calculation is non-spin" #---- Non-spin split OUTCAR start ---#
start=$(grep "k-point 1 :" $tmpoutcar|awk '{printf $1}')
if [ "$npoint" -ge 10 -a "$npoint" -lt 100 ];then
endp=$(grep "k-point $npoint :" $tmpoutcar|awk '{printf $1}')
elif [ "$npoint" -ge 100 ];then
endp=$(grep "k-point $npoint :" $tmpoutcar|awk '{printf $1}')
else
endp=$(grep "k-point $npoint :" $tmpoutcar|awk '{printf $1}')
fi
end=$(($endp+$nband+1))
sed -n ''$start','$end' p' $tmpoutcar>>OUTCARn
#echo "fermi?"
#read efermi
awk '/k-point/{
printf "%d\t",$3
getline
for (i=1;i<='$nband';i++) {
getline
printf "%8.4f\t",$3-'$efermi' }
printf "\n"}' OUTCARn>>BAND/vaspbnd.dat
rm OUTCARn
#-------------------- Non-spin split OUTCAR end ---------------#
else
echo "calculation is spin-polarize" #--- Spin-up split OUTCAR start ---#
startup=$(grep "spin component 1" $tmpoutcar|head -1|awk '{printf $1}')
endup=$(grep "spin component 2" $tmpoutcar|head -1|awk '{printf $1}')
#endup=$(($endupp+$nband+1))
sed -n ''$startup','$endup' p' $tmpoutcar>>OUTCARup
#echo "fermi?"
#read efermi
awk '/k-point/{
printf "%d\t",$3
getline
for (i=1;i<='$nband';i++) {
getline
printf "%8.4f\t",$3}
printf "\n"}' OUTCARup>>BAND/vaspbndup.dat
#rm OUTCARup
#printf "%8.4f\t",$3 - '$efermi' }
#-------------------- Spin-up split OUTCAR end ---------------#
#-------------------- Spin-dn split OUTCAR start ---------------#
startdn=$(grep "spin component 2" $tmpoutcar|tail -1|awk '{printf $1}')
enddn=$(grep "aborting loop" $tmpoutcar|awk '{printf $1}')
#enddn=$(($enddnp+$nband+1))
sed -n ''$startdn','$enddn' p' $tmpoutcar>>OUTCARdn
awk '/k-point/{
printf "%d\t",$3
getline
for (j=1;j<='$nband';j++) {
getline
printf "%8.4f\t",$3}
printf "\n"}' OUTCARdn>>BAND/vaspbnddn.dat
#rm OUTCARdn
fi #------------- Spin-dn split OUTCAR end ---------------#
#rm OUTCARtmp
exit 0
#========================== Main end ===============================#
[ Last edited by zhjh888888 on 2010-4-21 at 11:16 ] |
|