energy_dec for esccor and some other debug printout
[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       scalar=(x12*x23+y12*y23+z12*z23)/(vnorm*wnorm)
21       alpha=arcos(scalar)
22       return
23       end
24 C
25 C------------------------------------------------------------------------------
26 C
27       double precision function beta(i1,i2,i3,i4)
28 c
29 c  Calculates the dihedral angle between atoms (i1), (i2), (i3) and (i4)
30 c
31       implicit real*8 (a-h,o-z)
32       include 'DIMENSIONS'
33       include 'COMMON.GEO'
34       include 'COMMON.CHAIN'
35       include 'COMMON.IOUNITS'
36       x12=c(1,i1)-c(1,i2)
37       x23=c(1,i3)-c(1,i2)
38       x34=c(1,i4)-c(1,i3)
39       y12=c(2,i1)-c(2,i2)
40       y23=c(2,i3)-c(2,i2)
41       y34=c(2,i4)-c(2,i3)
42       z12=c(3,i1)-c(3,i2)
43       z23=c(3,i3)-c(3,i2)
44       z34=c(3,i4)-c(3,i3)
45 cd    print '(2i3,3f10.5)',i1,i2,x12,y12,z12
46 cd    print '(2i3,3f10.5)',i2,i3,x23,y23,z23
47 cd    print '(2i3,3f10.5)',i3,i4,x34,y34,z34
48       wx=-y23*z34+y34*z23
49       wy=x23*z34-z23*x34
50       wz=-x23*y34+y23*x34
51       wnorm=dsqrt(wx*wx+wy*wy+wz*wz)
52       vx=y12*z23-z12*y23
53       vy=-x12*z23+z12*x23
54       vz=x12*y23-y12*x23
55       vnorm=dsqrt(vx*vx+vy*vy+vz*vz)
56       if (vnorm.gt.1.0D-13 .and. wnorm.gt.1.0D-13) then
57       scalar=(vx*wx+vy*wy+vz*wz)/(vnorm*wnorm)
58       if (dabs(scalar).gt.1.0D0) 
59      &scalar=0.99999999999999D0*scalar/dabs(scalar)
60       angle=dacos(scalar)
61       else
62       angle=pi
63       endif 
64 c     if (angle.le.0.0D0) angle=pi+angle
65       tx=vy*wz-vz*wy
66       ty=-vx*wz+vz*wx
67       tz=vx*wy-vy*wx
68       scalar=tx*x23+ty*y23+tz*z23
69       if (scalar.lt.0.0D0) angle=-angle
70       beta=angle
71 cd      if ((vnorm.lt.0.01.or.wnorm.lt.0.01).and.angle.ne.pi
72 cd     & .and.i3.ne.maxres*2)
73 cd     & write(iout,'(a12,4i4,6f7.3,4f10.5)') 'beta warning',i1,i2,i3,i4,
74 cd     & vx,vy,vz,wx,wy,wz,vnorm,wnorm,scalar,angle*RAD2DEG
75       return
76       end
77 C
78 C------------------------------------------------------------------------------
79 C
80       function dist(i1,i2)
81 c
82 c  Calculates the distance between atoms (i1) and (i2).
83 c
84       implicit real*8 (a-h,o-z)
85       include 'DIMENSIONS'
86       include 'COMMON.GEO'
87       include 'COMMON.CHAIN'
88       x12=c(1,i1)-c(1,i2)
89       y12=c(2,i1)-c(2,i2)
90       z12=c(3,i1)-c(3,i2)
91       dist=dsqrt(x12*x12+y12*y12+z12*z12)
92       return
93       end
94 C