Merge branch 'leadoff'
[physik/posic.git] / vasp_tools / search_bonds
diff --git a/vasp_tools/search_bonds b/vasp_tools/search_bonds
new file mode 100755 (executable)
index 0000000..29b6d1c
--- /dev/null
@@ -0,0 +1,144 @@
+#!/bin/bash
+
+file=$1
+len=$2
+delta=$3
+tA=$4
+tB=$5
+
+echo
+echo "usage:"
+echo "$0 <contcar file> <len> <delta> <type a> <type b>"
+echo
+echo "args: $@"
+echo
+
+scale=`sed -n 2p $1`
+
+X1=`sed -n 3p $file | awk '{ print $1 }'`
+X2=`sed -n 3p $file | awk '{ print $2 }'`
+X3=`sed -n 3p $file | awk '{ print $3 }'`
+
+Y1=`sed -n 4p $file | awk '{ print $1 }'`
+Y2=`sed -n 4p $file | awk '{ print $2 }'`
+Y3=`sed -n 4p $file | awk '{ print $3 }'`
+
+Z1=`sed -n 5p $file | awk '{ print $1 }'`
+Z2=`sed -n 5p $file | awk '{ print $2 }'`
+Z3=`sed -n 5p $file | awk '{ print $3 }'`
+
+export X1 X2 X3
+export Y1 Y2 Y3
+export Z1 Z2 Z3
+
+nsi=`sed -n 6p $file | awk '{ print $1 }'`
+nc=`sed -n 6p $file | awk '{ print $2 }'`
+
+((nt=nsi+nc))
+
+((offset=8))
+((count=1))
+
+echo "found $nt atoms: Si = $nsi / C = $nc"
+echo "scale: $scale"
+echo "X: $X1 $X2 $X3"
+echo "Y: $Y1 $Y2 $Y3"
+echo "Z: $Z1 $Z2 $Z3"
+echo
+
+while [ "1" ]; do
+
+       if [ $count -le $nsi ]; then
+               typea=S
+       else
+               typea=C
+       fi
+
+       if [ "$tA" != "$typea" ]; then
+               ((count+=1))
+               [ $count -gt $nt ] && break
+               continue
+       fi
+
+       ((line=count+offset))
+
+       temp="`sed -n ${line}p $1`"
+       xa=`echo $temp | awk '{ print $1 }'`
+       ya=`echo $temp | awk '{ print $2 }'`
+       za=`echo $temp | awk '{ print $3 }'`
+
+       ((ic=1))
+       while [ "1" ]; do
+               ((il=ic+offset))
+               if [ $line != $il ]; then
+                       if [ $ic -le $nsi ] ; then
+                               typeb=S
+                       else
+                               typeb=C
+                       fi
+                       if [ "$typeb" != "$tB" ]; then
+                               ((ic+=1))
+                               [ $ic -gt $nt ] && break
+                               continue
+                       fi
+                       tmpb="`sed -n ${il}p $1`"
+                       xb=`echo $tmpb | awk '{ print $1 }'`
+                       yb=`echo $tmpb | awk '{ print $2 }'`
+                       zb=`echo $tmpb | awk '{ print $3 }'`
+
+                       echo "$xa $ya $za $xb $yb $zb $scale $len $delta $count $ic" | \
+                       awk ' \
+                       BEGIN {
+                       dxt=0; dyt=0; dzt=0
+                       dx=0; dy=0; dz=0; dist=0
+                       X=0; Y=0; Z=0
+                       X1=ENVIRON["X1"]; X2=ENVIRON["X2"]; X3=ENVIRON["X3"]
+                       Y1=ENVIRON["Y1"]; Y2=ENVIRON["Y2"]; Y3=ENVIRON["Y3"]
+                       Z1=ENVIRON["Z1"]; Z2=ENVIRON["Z2"]; Z3=ENVIRON["Z3"]
+                       }       
+                       {
+                       X=sqrt(X1^2+X2^2+X3^2)
+                       Y=sqrt(Y1^2+Y2^2+Y3^2)
+                       Z=sqrt(Z1^2+Z2^2+Z3^2)
+                       dx=$1-$4
+                       dy=$2-$5
+                       dz=$3-$6
+                       if(dx>1/2)
+                               dx-=1
+                       if(dx<-1/2)
+                               dx+=1
+                       if(dy>1/2)
+                               dy-=1
+                       if(dy<-1/2)
+                               dy+=1
+                       if(dz>1/2)
+                               dz-=1
+                       if(dz<-1/2)
+                               dz+=1
+                       dxt=dx*X1+dy*Y1+dz*Z1
+                       dyt=dx*X2+dy*Y2+dz*Z2
+                       dzt=dx*X3+dy*Y3+dz*Z3
+                       dist=sqrt(dxt^2+dyt^2+dzt^2)
+                       dist*=$7
+                       if((dist>=($8-$9))&&(dist<=($8+$9))) {
+                               print ""
+                               print "atoms: " $10 " - " $11
+                               print $1 " " $2 " " $3
+                               print $4 " " $5 " " $6 " (" dist " - " $8 ")"
+                               print "displace: " dx*X " " dy*Y " " dz*Z
+                       }
+                       }'
+               fi
+
+               ((ic+=1))
+               [ $ic -gt $nt ] && break
+
+       done
+
+       ((count+=1))
+       [ $count -gt $nt ] && break
+
+done
+
+echo "done"
+