Adam's unres update
[unres.git] / source / unres / src-HCD-5D / orig_frame_chain.F
1       subroutine orig_frame_chain(istart)
2 C
3 C Define the origin and orientation of the coordinate system starting
4 C at residue istart and locate sites istart+1 and istart+2. The
5 C coordinates of site istart and the respective dc and dc_norm must be
6 C pre-defined
7 C
8       implicit none
9       integer i,j,istart,ichain
10       double precision cost,sint,cosg,sing,aux
11       include 'DIMENSIONS'
12       include 'COMMON.CHAIN'
13       include 'COMMON.IOUNITS'
14       include 'COMMON.LOCAL'
15       include 'COMMON.GEO'
16       include 'COMMON.VAR'
17       cost=dc_norm(1,istart)
18       aux=dsqrt(dc_norm(2,istart)**2+dc_norm(3,istart)**2)
19       cosg=dc_norm(2,istart)/aux
20       sing=dc_norm(3,istart)/aux
21       cost=dcos(theta(istart+2))
22       sint=dsin(theta(istart+2))
23       prod(1,1,istart)=cost
24       prod(1,2,istart)=-sint
25       prod(1,3,istart)=0.0d0
26       prod(2,1,istart)=sint*cosg
27       prod(2,2,istart)=cost*cosg
28       prod(2,3,istart)=-sing
29       prod(3,1,istart)=sint*sing
30       prod(3,2,istart)=cost*sing
31       prod(3,3,istart)=cosg
32       aux=prod(1,1,istart)*(prod(2,2,istart)*prod(3,3,istart)
33      & -prod(3,2,istart)*prod(2,3,istart))
34      & -prod(1,2,istart)*(prod(2,1,istart)*prod(3,3,istart)
35      & -prod(3,1,istart)*prod(2,3,istart))
36      & +prod(1,3,istart)*(prod(2,1,istart)*prod(3,2,istart)
37      & -prod(3,1,istart)*prod(2,2,istart))
38 c      write (iout,*) "orig_frame_chain prod",istart
39 c      do i=1,3
40 c        write(iout,'(i5,3f10.5)') i,(prod(i,j,istart),j=1,3)
41 c      enddo
42 c      write (iout,*) "orig_frame_chain: prod",istart," determinant",aux
43       t(1,1,istart)=cost
44       t(1,2,istart)=-sint 
45       t(1,3,istart)= 0.0D0
46       t(2,1,istart)=sint
47       t(2,2,istart)=cost
48       t(2,3,istart)= 0.0D0
49       t(3,1,istart)= 0.0D0
50       t(3,2,istart)= 0.0D0
51       t(3,3,istart)= 1.0D0
52       r(1,1,istart)= 1.0D0
53       r(1,2,istart)= 0.0D0
54       r(1,3,istart)= 0.0D0
55       r(2,1,istart)= 0.0D0
56       r(2,2,istart)= 1.0D0
57       r(2,3,istart)= 0.0D0
58       r(3,1,istart)= 0.0D0
59       r(3,2,istart)= 0.0D0
60       r(3,3,istart)= 1.0D0
61       do i=1,3
62         do j=1,3
63           rt(i,j,istart)=t(i,j,istart)
64         enddo
65       enddo
66       call matmult(prod(1,1,istart),rt(1,1,istart),prod(1,1,istart+1))
67 c      aux=prod(1,1,istart+1)*(prod(2,2,istart+1)*prod(3,3,istart+1)
68 c     & -prod(3,2,istart+1)*prod(2,3,istart+1))
69 c     & -prod(1,2,istart+1)*(prod(2,1,istart+1)*prod(3,3,istart+1)
70 c     & -prod(3,1,istart+1)*prod(2,3,istart+1))
71 c     & +prod(1,3,istart+1)*(prod(2,1,istart+1)*prod(3,2,istart+1)
72 c     & -prod(3,1,istart+1)*prod(2,2,istart+1))
73 c      write (iout,*) "orig_frame_chain prod",istart+1
74 c      do i=1,3
75 c        write(iout,'(i5,3f10.5)') i,(prod(i,j,istart+1),j=1,3)
76 c      enddo
77 c      write (iout,*)"orig_frame_chain: prod",istart+1," determinant",aux
78       do j=1,3
79         dc_norm(j,istart+1)=prod(j,1,istart+1)
80         dc(j,istart+1)=vbld(istart+2)*prod(j,1,istart+1)
81         c(j,istart+2)=c(j,istart+1)+dc(j,istart+1)
82       enddo
83       call locate_side_chain(istart+1)
84       return
85       end