253226f74043ca7d09bc3ab50f46f013b0129d82
[physik/posic.git] / vasp_tools / disp_calc
1 #!/bin/bash
2
3 file=$1
4 init=$2
5 atom=$3
6
7 if [ -n "$4" ]; then
8 ref=$4
9 else
10 ref=$atom
11 fi
12 echo "atom number $ref is used as a reference ..."
13 echo
14
15 scale=`sed -n 2p $file`
16
17 X1=`sed -n 3p $file | awk '{ print $1 }'`
18 X2=`sed -n 3p $file | awk '{ print $2 }'`
19 X3=`sed -n 3p $file | awk '{ print $3 }'`
20
21 Y1=`sed -n 4p $file | awk '{ print $1 }'`
22 Y2=`sed -n 4p $file | awk '{ print $2 }'`
23 Y3=`sed -n 4p $file | awk '{ print $3 }'`
24
25 Z1=`sed -n 5p $file | awk '{ print $1 }'`
26 Z2=`sed -n 5p $file | awk '{ print $2 }'`
27 Z3=`sed -n 5p $file | awk '{ print $3 }'`
28
29 export X1 X2 X3
30 export Y1 Y2 Y3
31 export Z1 Z2 Z3
32
33 ((offset=8))
34
35 echo "final:"
36 echo "scale: $scale"
37 echo "X: $X1 $X2 $X3"
38 echo "Y: $Y1 $Y2 $Y3"
39 echo "Z: $Z1 $Z2 $Z3"
40
41 ((line1=atom+offset))
42
43 temp="`sed -n ${line1}p $1`"
44 xa=`echo $temp | awk '{ print $1 }'`
45 ya=`echo $temp | awk '{ print $2 }'`
46 za=`echo $temp | awk '{ print $3 }'`
47 echo "(x,y,z) = $xa $ya $za $scale"
48
49 results=`echo "$xa $ya $za $scale" | \
50         awk ' \
51         BEGIN {
52                 X1=ENVIRON["X1"]; X2=ENVIRON["X2"]; X3=ENVIRON["X3"]
53                 Y1=ENVIRON["Y1"]; Y2=ENVIRON["Y2"]; Y3=ENVIRON["Y3"]
54                 Z1=ENVIRON["Z1"]; Z2=ENVIRON["Z2"]; Z3=ENVIRON["Z3"]
55         }       
56         {
57                 X=sqrt(X1^2+X2^2+X3^2)
58                 Y=sqrt(Y1^2+Y2^2+Y3^2)
59                 Z=sqrt(Z1^2+Z2^2+Z3^2)
60                 x=$1*X
61                 if(x>1.0)
62                         x-=1.0;
63                 if(x<-1.0)
64                         x+=1.0;
65                 y=$2*Y
66                 if(y>1.0)
67                         y-=1.0;
68                 if(y<-1.0)
69                         y+=1.0;
70                 z=$3*Z
71                 if(z>1.0)
72                         z-=1.0;
73                 if(z<-1.0)
74                         z+=1.0;
75
76                 print x*$4 " " y*$4 " " z*$4
77         }'`
78
79 xf=`echo $results | awk '{ print $1 }'`
80 yf=`echo $results | awk '{ print $2 }'`
81 zf=`echo $results | awk '{ print $3 }'`
82 echo "---> $xf $yf $zf"
83
84 file=$init
85
86 scale=`sed -n 2p $file`
87
88 X1=`sed -n 3p $file | awk '{ print $1 }'`
89 X2=`sed -n 3p $file | awk '{ print $2 }'`
90 X3=`sed -n 3p $file | awk '{ print $3 }'`
91
92 Y1=`sed -n 4p $file | awk '{ print $1 }'`
93 Y2=`sed -n 4p $file | awk '{ print $2 }'`
94 Y3=`sed -n 4p $file | awk '{ print $3 }'`
95
96 Z1=`sed -n 5p $file | awk '{ print $1 }'`
97 Z2=`sed -n 5p $file | awk '{ print $2 }'`
98 Z3=`sed -n 5p $file | awk '{ print $3 }'`
99
100 export X1 X2 X3
101 export Y1 Y2 Y3
102 export Z1 Z2 Z3
103
104 ((offset=8))
105
106 echo
107 echo "initial:"
108 echo "scale: $scale"
109 echo "X: $X1 $X2 $X3"
110 echo "Y: $Y1 $Y2 $Y3"
111 echo "Z: $Z1 $Z2 $Z3"
112
113 ((line1=ref+offset))
114
115 temp="`sed -n ${line1}p $file`"
116 xa=`echo $temp | awk '{ print $1 }'`
117 ya=`echo $temp | awk '{ print $2 }'`
118 za=`echo $temp | awk '{ print $3 }'`
119 echo "(x,y,z) = $xa $ya $za $scale"
120
121 results=`echo "$xa $ya $za $scale" | \
122         awk ' \
123         BEGIN {
124                 X1=ENVIRON["X1"]; X2=ENVIRON["X2"]; X3=ENVIRON["X3"]
125                 Y1=ENVIRON["Y1"]; Y2=ENVIRON["Y2"]; Y3=ENVIRON["Y3"]
126                 Z1=ENVIRON["Z1"]; Z2=ENVIRON["Z2"]; Z3=ENVIRON["Z3"]
127         }       
128         {
129                 X=sqrt(X1^2+X2^2+X3^2)*$4
130                 Y=sqrt(Y1^2+Y2^2+Y3^2)*$4
131                 Z=sqrt(Z1^2+Z2^2+Z3^2)*$4
132                 print $1*X " " $2*Y " " $3*Z
133         }'`
134
135 xi=`echo $results | awk '{ print $1 }'`
136 yi=`echo $results | awk '{ print $2 }'`
137 zi=`echo $results | awk '{ print $3 }'`
138 echo "---> $xi $yi $zi"
139
140 echo
141 echo -en "displacement: "
142 echo $xf $yf $zf $xi $yi $zi | awk '{ print $1-$4 " " $2-$5 " " $3-$6 }'
143 echo
144