make cp src-HCD-5D
[unres.git] / source / unres / src-HCD-5D / econstr_local.F
1       subroutine Econstr_back
2 c     MD with umbrella_sampling using Wolyne's distance measure as a constraint
3       implicit none
4       include 'DIMENSIONS'
5       include 'COMMON.CONTROL'
6       include 'COMMON.VAR'
7       include 'COMMON.MD'
8       include 'COMMON.QRESTR'
9 #ifndef LANG0
10       include 'COMMON.LANGEVIN'
11 #else
12 #ifdef FIVEDIAG
13       include 'COMMON.LANGEVIN.lang0.5diag'
14 #else
15       include 'COMMON.LANGEVIN.lang0'
16 #endif
17 #endif
18       include 'COMMON.CHAIN'
19       include 'COMMON.DERIV'
20       include 'COMMON.GEO'
21       include 'COMMON.LOCAL'
22       include 'COMMON.INTERACT'
23       include 'COMMON.IOUNITS'
24       include 'COMMON.NAMES'
25       include 'COMMON.TIME1'
26       integer i,j,ii,k
27       double precision utheta_i,dtheta_i,ugamma_i,dgamma_i,dxx,dyy,dzz
28       double precision pinorm
29       Uconst_back=0.0d0
30       do i=1,nres
31         dutheta(i)=0.0d0
32         dugamma(i)=0.0d0
33         do j=1,3
34           duscdiff(j,i)=0.0d0
35           duscdiffx(j,i)=0.0d0
36         enddo
37       enddo
38       do i=1,nfrag_back
39         ii = ifrag_back(2,i,iset)-ifrag_back(1,i,iset)
40 c
41 c Deviations from theta angles
42 c
43         utheta_i=0.0d0
44         do j=ifrag_back(1,i,iset)+2,ifrag_back(2,i,iset)
45           dtheta_i=theta(j)-thetaref(j)
46           utheta_i=utheta_i+0.5d0*dtheta_i*dtheta_i
47           dutheta(j-2)=dutheta(j-2)+wfrag_back(1,i,iset)*dtheta_i/(ii-1)
48         enddo
49         utheta(i)=utheta_i/(ii-1)
50 c
51 c Deviations from gamma angles
52 c
53         ugamma_i=0.0d0
54         do j=ifrag_back(1,i,iset)+3,ifrag_back(2,i,iset)
55           dgamma_i=pinorm(phi(j)-phiref(j))
56 c          write (iout,*) j,phi(j),phi(j)-phiref(j)
57           ugamma_i=ugamma_i+0.5d0*dgamma_i*dgamma_i
58           dugamma(j-3)=dugamma(j-3)+wfrag_back(2,i,iset)*dgamma_i/(ii-2)
59 c          write (iout,*) i,j,dgamma_i,wfrag_back(2,i,iset),dugamma(j-3)
60         enddo
61         ugamma(i)=ugamma_i/(ii-2)
62 c
63 c Deviations from local SC geometry
64 c
65         uscdiff(i)=0.0d0
66         do j=ifrag_back(1,i,iset)+1,ifrag_back(2,i,iset)-1
67           dxx=xxtab(j)-xxref(j)
68           dyy=yytab(j)-yyref(j)
69           dzz=zztab(j)-zzref(j)
70           uscdiff(i)=uscdiff(i)+dxx*dxx+dyy*dyy+dzz*dzz
71           do k=1,3
72             duscdiff(k,j-1)=duscdiff(k,j-1)+wfrag_back(3,i,iset)*
73      &       (dXX_C1tab(k,j)*dxx+dYY_C1tab(k,j)*dyy+dZZ_C1tab(k,j)*dzz)/
74      &       (ii-1)
75             duscdiff(k,j)=duscdiff(k,j)+wfrag_back(3,i,iset)*
76      &       (dXX_Ctab(k,j)*dxx+dYY_Ctab(k,j)*dyy+dZZ_Ctab(k,j)*dzz)/
77      &       (ii-1)
78             duscdiffx(k,j)=duscdiffx(k,j)+wfrag_back(3,i,iset)*
79      &     (dXX_XYZtab(k,j)*dxx+dYY_XYZtab(k,j)*dyy+dZZ_XYZtab(k,j)*dzz)
80      &      /(ii-1)
81           enddo
82 c          write (iout,'(i5,6f10.5)') j,xxtab(j),yytab(j),zztab(j),
83 c     &      xxref(j),yyref(j),zzref(j)
84         enddo
85         uscdiff(i)=0.5d0*uscdiff(i)/(ii-1)
86 c        write (iout,*) i," uscdiff",uscdiff(i)
87 c
88 c Put together deviations from local geometry
89 c
90         Uconst_back=Uconst_back+wfrag_back(1,i,iset)*utheta(i)+
91      &    wfrag_back(2,i,iset)*ugamma(i)+wfrag_back(3,i,iset)*uscdiff(i)
92 c        write(iout,*) "i",i," utheta",utheta(i)," ugamma",ugamma(i),
93 c     &   " uconst_back",uconst_back
94         utheta(i)=dsqrt(utheta(i))
95         ugamma(i)=dsqrt(ugamma(i))
96         uscdiff(i)=dsqrt(uscdiff(i))
97       enddo
98       return
99       end