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