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