Merge branch 'leadoff'
[physik/posic.git] / vasp_tools / get_ks_levels
diff --git a/vasp_tools/get_ks_levels b/vasp_tools/get_ks_levels
new file mode 100755 (executable)
index 0000000..8ef690e
--- /dev/null
@@ -0,0 +1,123 @@
+#!/bin/bash
+
+# get the kohn sham levels (plotted nicely)
+
+# spin component 1
+
+file=$1/OUTCAR
+
+WUP=1.2
+WDOWN=1.8
+PS=2
+OPT=7
+UPT=4
+
+if [ ! -f $file ]; then
+       echo "no OUTCAR file found ..."
+       exit
+fi
+
+rm -f $1/ks_levels_*
+
+center="0"
+
+cntup=0
+echo $cntup > $1/temp_cu
+fup=0
+echo $fup > $1/temp_fu
+cntdown=0
+echo $cntdown > $1/temp_cd
+fdown=0
+echo $fdown > $1/temp_fd
+
+# spin component 1
+startline=`grep -n spin\ component\ 1 $file | tail -1 | awk -F: '{ print $1 }'`
+echo -en "spin component 1 ($startline)... "
+sed -n "$startline,/spin component 2/p" $file | grep ^' '*[0-9] | \
+       while read number energy occu; do
+               if [ "$occu" = "1.00000" ]; then
+               echo "0.18 $energy 0.1" >> $1/ks_levels_o
+               cntup=`cat $1/temp_cu`
+               ((cntup+=1))
+               echo $cntup > $1/temp_cu
+               elif [ "$occu" = "0.00000" ]; then
+               echo "0.18 $energy 0.1" >> $1/ks_levels_u
+               else
+               echo "0.18 $energy 0.1" >> $1/ks_levels_p
+               fup=`cat $1/temp_fu`
+               fup=`echo $fup $occu | awk '{ print $1+$2 }'`
+               echo $fup > $1/temp_fu
+               fi
+       done
+echo "done"
+
+# spin component 2
+startline=`grep -n spin\ component\ 2 $file | tail -1 | awk -F: '{ print $1 }'`
+echo -en "spin component 2 ($startline) ... "
+sed -n "$startline,/---/p" $file | grep ^' '*[0-9] | \
+       while read number energy occu; do
+               if [ "$occu" = "1.00000" ]; then
+               echo "0.42 $energy 0.1" >> $1/ks_levels_o
+               cntdown=`cat $1/temp_cd`
+               ((cntdown+=1))
+               echo $cntdown > $1/temp_cd
+               elif [ "$occu" = "0.00000" ]; then
+                       if [ "$center" = "0" ]; then
+                               echo -en "setting mid value -> $energy ... "
+                               center=$energy
+                               echo "$energy" > $1/temp_e
+                       fi
+               echo "0.42 $energy 0.1" >> $1/ks_levels_u
+               else
+               echo "0.42 $energy 0.1" >> $1/ks_levels_p
+               fdown=`cat $1/temp_fd`
+               fdown=`echo $fdown $occu | awk '{ print $1+$2 }'`
+               echo $fdown > $1/temp_fd
+               fi
+       done
+echo "done"
+
+cntup=`cat $1/temp_cu`
+fup=`cat $1/temp_fu`
+cntdown=`cat $1/temp_cd`
+fdown=`cat $1/temp_fd`
+center=`cat $1/temp_e`
+yl=`echo $center $WDOWN | awk '{ print $1-$2 }'`
+yh=`echo $center $WUP | awk '{ print $1+$2 }'`
+fup=`awk -v var=$fup 'BEGIN{ printf"%0.f\n", var }'`
+fdown=`awk -v var=$fdown 'BEGIN{ printf"%0.f\n", var }'`
+((cntup+=fup))
+((cntdown+=fdown))
+((difference=cntup-cntdown))
+echo "generating gnuplot file ($center, $yl, $yh, $ly) ..."
+cat > $1/ksl_plot.gpi <<!
+plot "ks_levels_o" w xerrorbars pt $OPT ps $PS t "", "ks_levels_u" w xerrorbars pt $UPT ps $PS t "", "ks_levels_p" w xerrorbars pt $OPT ps $PS t ""
+unset bars
+set ylabel "Kohn-Sham levels [eV]"
+set xrange [0:0.6]
+set yrange [$yl:$yh]
+set xlabel "Spin up / down"
+set format x ""
+set x2label "$cntup / $cntdown (Delta: $difference)"
+unset xtics
+set mytics 5
+set size ratio 3.0
+replot
+set term epslatex standalone color solid size 3.5,7
+set out "ksl.tex"
+replot
+!
+
+cd $1
+
+echo "running gnuplot and latex ..."
+gnuplot ksl_plot.gpi
+latex ksl
+dvips ksl
+gv ksl
+
+cd ../..
+
+echo "done"
+echo "file: $1/ksl.ps"
+echo