2 c MD with umbrella_sampling using Wolyne's distance measure as a constraint
3 implicit real*8 (a-h,o-z)
9 include 'COMMON.CONTROL'
11 include 'COMMON.QRESTR'
12 include 'COMMON.CHAIN'
13 include 'COMMON.DERIV'
15 include 'COMMON.LOCAL'
16 include 'COMMON.INTERACT'
17 include 'COMMON.IOUNITS'
18 include 'COMMON.NAMES'
19 include 'COMMON.TIME1'
20 double precision uzap1,uzap2,hm1,hm2,hmnum
21 double precision ucdelan,dUcartan(3,0:MAXRES)
22 & ,dUxcartan(3,0:MAXRES),cdummy(3,0:MAXRES),
23 & duconst(3,0:MAXRES),duxconst(3,0:MAXRES)
24 integer kstart,kend,lstart,lend,idummy
25 double precision delta /1.0d-7/
35 write (iout,*) "Econstrq adaptive",adaptive," iset",iset
39 qfrag(i)=qwolynes(ifrag(1,i,iset),ifrag(2,i,iset),.true.
42 write (iout,*) "fragment",i," qfrag",qfrag(i)," iset",iset,
43 & " ifrag",ifrag(1,i,iset),ifrag(2,i,iset)," qinfrag",
46 Uconst=Uconst+wfrag(i,iset)*harmonic(qfrag(i),qinfrag(i,iset))
47 c Calculating the derivatives of Constraint energy with respect to Q
48 Ucdfrag=wfrag(i,iset)*harmonicprim(qfrag(i),
51 write (iout,*) "Uconst",Uconst," Ucdfrag",Ucdfrag
53 if (adaptive.and.i.eq.1) then
54 c write (iout,*) "Econstrq adative"
55 call PMF_energy(qfrag(1),ePMF,ePMF_q)
57 Ucdfrag=Ucdfrag+ePMF_q
59 write (iout,*) "PMF Uconst",Uconst," Ucdfrag",Ucdfrag
62 c hm1=harmonic(qfrag(i,iset),qinfrag(i,iset))
63 c hm2=harmonic(qfrag(i,iset)+delta,qinfrag(i,iset))
64 c hmnum=(hm2-hm1)/delta
65 c write(iout,*) "harmonicprim frag",harmonicprim(qfrag(i,iset),
67 c write(iout,*) "harmonicnum frag", hmnum
68 c Calculating the derivatives of Q with respect to cartesian coordinates
69 call qwolynes_prim(ifrag(1,i,iset),ifrag(2,i,iset),.true.
72 write(iout,*) "dqwol "
74 write(iout,'(i5,3e15.5)') ii,(dqwol(j,ii),j=1,3)
76 write(iout,*) "dxqwol "
78 write(iout,'(i5,3e15.5)') ii,(dxqwol(j,ii),j=1,3)
81 c Calculating numerical gradients of dU/dQi and dQi/dxi
82 c call qwol_num(ifrag(1,i,iset),ifrag(2,i,iset),.true.
84 c The gradients of Uconst in Cs
87 duconst(j,ii)=dUconst(j,ii)+ucdfrag*dqwol(j,ii)
88 dUxconst(j,ii)=dUxconst(j,ii)+ucdfrag*dxqwol(j,ii)
93 kstart=ifrag(1,ipair(1,i,iset),iset)
94 kend=ifrag(2,ipair(1,i,iset),iset)
95 lstart=ifrag(1,ipair(2,i,iset),iset)
96 lend=ifrag(2,ipair(2,i,iset),iset)
97 qpair(i)=qwolynes(kstart,kend,.false.,lstart,lend)
98 Uconst=Uconst+wpair(i,iset)*harmonic(qpair(i),qinpair(i,iset))
100 Ucdpair=wpair(i,iset)*harmonicprim(qpair(i),qinpair(i,iset))
101 c hm1=harmonic(qpair(i),qinpair(i,iset))
102 c hm2=harmonic(qpair(i)+delta,qinpair(i,iset))
103 c hmnum=(hm2-hm1)/delta
104 c write(iout,*) "harmonicprim pair ",harmonicprim(qpair(i),
106 c write(iout,*) "harmonicnum pair ", hmnum
108 call qwolynes_prim(kstart,kend,.false.
110 c write(iout,*) "dqwol "
112 c write(iout,'(i5,3e15.5)') ii,(dqwol(j,ii),j=1,3)
114 c write(iout,*) "dxqwol "
116 c write(iout,'(i5,3e15.5)') ii,(dxqwol(j,ii),j=1,3)
118 c Calculating numerical gradients
119 c call qwol_num(kstart,kend,.false.
121 c The gradients of Uconst in Cs
124 duconst(j,ii)=dUconst(j,ii)+ucdpair*dqwol(j,ii)
125 dUxconst(j,ii)=dUxconst(j,ii)+ucdpair*dxqwol(j,ii)
129 c write(iout,*) "Uconst inside subroutine ", Uconst
130 c Transforming the gradients from Cs to dCs for the backbone
134 dudconst(k,i)=dudconst(k,i)+duconst(k,j)+duxconst(k,j)
138 c Transforming the gradients from Cs to dCs for the side chains
141 dudxconst(j,i)=duxconst(j,i)
145 write(iout,*) "dU/ddc backbone "
147 write(iout,'(i5,3e15.5)') ii, (dudconst(j,ii),j=1,3)
149 write(iout,*) "dU/ddX side chain "
151 write(iout,'(i5,3e15.5)') ii,(duxconst(j,ii),j=1,3)
154 c Calculating numerical gradients of dUconst/ddc and dUconst/ddx