added source code
[unres.git] / source / cluster / unres / src / intcor.f
1 C
2 C------------------------------------------------------------------------------
3 C
4       double precision function alpha(i1,i2,i3)
5 c
6 c  Calculates the planar angle between atoms (i1), (i2), and (i3).
7 c
8       include 'DIMENSIONS'
9       include 'COMMON.GEO'
10       include 'COMMON.CHAIN'
11       if (i1.lt.1 .or. i2.lt.1 .or. i3.lt.1 .or. i4.lt.1) then
12         alpha=0.0
13         return
14       endif
15       x12=c(1,i1)-c(1,i2)
16       x23=c(1,i3)-c(1,i2)
17       y12=c(2,i1)-c(2,i2)
18       y23=c(2,i3)-c(2,i2)
19       z12=c(3,i1)-c(3,i2)
20       z23=c(3,i3)-c(3,i2)
21       vnorm=dsqrt(x12*x12+y12*y12+z12*z12)
22       wnorm=dsqrt(x23*x23+y23*y23+z23*z23)
23       scalar=(x12*x23+y12*y23+z12*z23)/(vnorm*wnorm)
24       alpha=arcos(scalar)
25       return
26       end
27 C
28 C------------------------------------------------------------------------------
29 C
30       double precision function beta(i1,i2,i3,i4)
31 c
32 c  Calculates the dihedral angle between atoms (i1), (i2), (i3) and (i4)
33 c
34       include 'DIMENSIONS'
35       include 'COMMON.GEO'
36       include 'COMMON.CHAIN'
37       if (i1.lt.1 .or. i2.lt.1 .or. i3.lt.1 .or. i4.lt.1) then
38         beta=0.0
39         return
40       endif
41       x12=c(1,i1)-c(1,i2)
42       x23=c(1,i3)-c(1,i2)
43       x34=c(1,i4)-c(1,i3)
44       y12=c(2,i1)-c(2,i2)
45       y23=c(2,i3)-c(2,i2)
46       y34=c(2,i4)-c(2,i3)
47       z12=c(3,i1)-c(3,i2)
48       z23=c(3,i3)-c(3,i2)
49       z34=c(3,i4)-c(3,i3)
50 cd    print '(2i3,3f10.5)',i1,i2,x12,y12,z12
51 cd    print '(2i3,3f10.5)',i2,i3,x23,y23,z23
52 cd    print '(2i3,3f10.5)',i3,i4,x34,y34,z34
53       wx=-y23*z34+y34*z23
54       wy=x23*z34-z23*x34
55       wz=-x23*y34+y23*x34
56       wnorm=dsqrt(wx*wx+wy*wy+wz*wz)
57       vx=y12*z23-z12*y23
58       vy=-x12*z23+z12*x23
59       vz=x12*y23-y12*x23
60       vnorm=dsqrt(vx*vx+vy*vy+vz*vz)
61       if (vnorm.gt.1.0D-13 .and. wnorm.gt.1.0D-13) then
62       scalar=(vx*wx+vy*wy+vz*wz)/(vnorm*wnorm)
63       if (dabs(scalar).gt.1.0D0) 
64      &scalar=0.99999999999999D0*scalar/dabs(scalar)
65       angle=dacos(scalar)
66 cd    print '(2i4,10f7.3)',i2,i3,vx,vy,vz,wx,wy,wz,vnorm,wnorm,
67 cd   &scalar,angle
68       else
69       angle=pi
70       endif 
71 c     if (angle.le.0.0D0) angle=pi+angle
72       tx=vy*wz-vz*wy
73       ty=-vx*wz+vz*wx
74       tz=vx*wy-vy*wx
75       scalar=tx*x23+ty*y23+tz*z23
76       if (scalar.lt.0.0D0) angle=-angle
77       beta=angle
78       return
79       end
80 C
81 C------------------------------------------------------------------------------
82 C
83       function dist(i1,i2)
84 c
85 c  Calculates the distance between atoms (i1) and (i2).
86 c
87       include 'DIMENSIONS'
88       include 'COMMON.GEO'
89       include 'COMMON.CHAIN'
90       if (i1.lt.1 .or. i2.lt.1) then
91         dist=0.0
92         return
93       endif
94       x12=c(1,i1)-c(1,i2)
95       y12=c(2,i1)-c(2,i2)
96       z12=c(3,i1)-c(3,i2)
97       dist=dsqrt(x12*x12+y12*y12+z12*z12)
98       return
99       end
100 C