added search bonds file ...
[physik/posic.git] / vasp_tools / search_bonds
1 #!/bin/bash
2
3 file=$1
4 len=$2
5 delta=$3
6 tA=$4
7 tB=$5
8
9 echo
10 echo "usage:"
11 echo "$0 <contcar file> <len> <delta> <type a> <type b>"
12 echo
13 echo "args: $@"
14 echo
15
16 scale=`sed -n 2p $1`
17
18 X1=`sed -n 3p $file | awk '{ print $1 }'`
19 X2=`sed -n 3p $file | awk '{ print $2 }'`
20 X3=`sed -n 3p $file | awk '{ print $3 }'`
21
22 Y1=`sed -n 4p $file | awk '{ print $1 }'`
23 Y2=`sed -n 4p $file | awk '{ print $2 }'`
24 Y3=`sed -n 4p $file | awk '{ print $3 }'`
25
26 Z1=`sed -n 5p $file | awk '{ print $1 }'`
27 Z2=`sed -n 5p $file | awk '{ print $2 }'`
28 Z3=`sed -n 5p $file | awk '{ print $3 }'`
29
30 export X1 X2 X3
31 export Y1 Y2 Y3
32 export Z1 Z2 Z3
33
34 nsi=`sed -n 6p $file | awk '{ print $1 }'`
35 nc=`sed -n 6p $file | awk '{ print $2 }'`
36
37 ((nt=nsi+nc))
38
39 ((offset=8))
40 ((count=1))
41
42 echo "found $nt atoms: Si = $nsi / C = $nc"
43
44 while [ "1" ]; do
45
46         if [ $count -le $nsi ]; then
47                 typea=S
48         else
49                 typea=C
50         fi
51
52         if [ "$tA" != "$typea" ]; then
53                 ((count+=1))
54                 [ $count -gt $nt ] && break
55                 continue
56         fi
57
58         ((line=count+offset))
59
60         temp="`sed -n ${line}p $1`"
61         xa=`echo $temp | awk '{ print $1 }'`
62         ya=`echo $temp | awk '{ print $2 }'`
63         za=`echo $temp | awk '{ print $3 }'`
64
65         ((ic=1))
66         while [ "1" ]; do
67                 ((il=ic+offset))
68                 if [ $line != $il ]; then
69                         if [ $ic -le $nsi ] ; then
70                                 typeb=S
71                         else
72                                 typeb=C
73                         fi
74                         if [ "$typeb" != "$tB" ]; then
75                                 ((ic+=1))
76                                 [ $ic -gt $nt ] && break
77                                 continue
78                         fi
79                         tmpb="`sed -n ${il}p $1`"
80                         xb=`echo $tmpb | awk '{ print $1 }'`
81                         yb=`echo $tmpb | awk '{ print $2 }'`
82                         zb=`echo $tmpb | awk '{ print $3 }'`
83
84                         echo "$xa $ya $za $xa $yb $zb $scale $len $delta" | \
85                         awk ' \
86                         BEGIN {
87                         xa=0; xb=0; 
88                         dx=0; dy=0; dz=0; dist=0
89                         X1=ENVIRON["X1"]; X2=ENVIRON["X2"]; X3=ENVIRON["X3"]
90                         Y1=ENVIRON["Y1"]; Y2=ENVIRON["Y2"]; Y3=ENVIRON["Y3"]
91                         Z1=ENVIRON["Z1"]; Z2=ENVIRON["Z2"]; Z3=ENVIRON["Z3"]
92                         }       
93                         {
94                         xa=$1*X1+$2*Y1+$3*Z1
95                         ya=$1*X2+$2*Y2+$3*Z2
96                         za=$1*X3+$2*Y3+$3*Z3
97                         xb=$4*X1+$5*Y1+$6*Z1
98                         yb=$4*X2+$5*Y2+$6*Z2
99                         zb=$4*X3+$5*Y3+$6*Z3
100                         dx=xa-xb
101                         dy=ya-yb
102                         dz=za-zb
103                         dist=sqrt(dx^2+dy^2+dz^2)
104                         dist*=$7
105                         if((dist>=($8-$9))&&(dist<=($8+$9))) {
106                                 print $1 " " $2 " " $3
107                                 print $4 " " $5 " " $6 " (" dist ")"
108                         }
109                         }'
110                 fi
111
112                 ((ic+=1))
113                 [ $ic -gt $nt ] && break
114
115         done
116
117         ((count+=1))
118         [ $count -gt $nt ] && break
119
120 done
121
122 echo "done"
123