1 double precision function qwolynes(seg1,seg2,flag,seg3,seg4)
2 implicit real*8 (a-h,o-z)
4 include 'COMMON.IOUNITS'
6 include 'COMMON.INTERACT'
8 include 'COMMON.QRESTR'
9 integer i,j,jl,k,l,il,kl,nl,np,seg1,seg2,seg3,seg4,secseg
11 double precision dist,qm
12 double precision qq,qqij,qqijCM,dij,d0ij,dijCM,d0ijCM
13 logical lprn /.false./
24 write (iout,*) "seg1",seg1," seg2",seg2," seg3",seg3," seg4",seg4,
32 if (itype(il).ne.10) then
37 if (itype(jl).ne.10) then
42 qqijCM = qcontrib(il,jl,ilnres,jlnres)
45 write (iout,*) "qqijCM",qqijCM
51 write (iout,*) "nl",nl," qq",qq
56 if((seg3-il).lt.3) then
63 if (itype(il).ne.10) then
68 if (itype(jl).ne.10) then
73 qqijCM = qcontrib(il,jl,ilnres,jlnres)
76 write (iout,*) "qqijCM",qqijCM
86 dqwol(j,i)=dqwol(j,i)/nl
87 dxqwol(j,i)=dxqwol(j,i)/nl
93 c-------------------------------------------------------------------
94 subroutine qwol_num(seg1,seg2,flag,seg3,seg4)
95 implicit real*8 (a-h,o-z)
97 include 'COMMON.IOUNITS'
98 include 'COMMON.CHAIN'
99 include 'COMMON.INTERACT'
101 include 'COMMON.QRESTR'
102 integer seg1,seg2,seg3,seg4
104 double precision qwolan(3,0:maxres),cdummy(3,0:maxres2),
105 & qwolxan(3,0:maxres),q1,q2
106 double precision delta /1.0d-7/
107 write (iout,*) "seg1",seg1," seg2",seg2," seg3",seg3," seg4",seg4
108 write(iout,*) "dQ/dc backbone "
110 write(iout,'(i5,3e15.5)') i, (dqwol(j,i),j=1,3)
112 write(iout,*) "dQ/dX side chain "
114 write(iout,'(i5,3e15.5)') i,(dxqwol(j,i),j=1,3)
120 q1=qwolynes(seg1,seg2,flag,seg3,seg4)
121 c(j,i)=cdummy(j,i)+delta
122 q2=qwolynes(seg1,seg2,flag,seg3,seg4)
123 qwolan(j,i)=0.5d0*(q2-q1)/delta
125 c write (iout,*) "i",i," j",j," q1",q1," a2",q2
130 cdummy(j,i+nres)=c(j,i+nres)
131 c(j,i+nres)=c(j,i+nres)-delta
132 q1=qwolynes(seg1,seg2,flag,seg3,seg4)
133 c(j,i+nres)=cdummy(j,i+nres)+delta
134 q2=qwolynes(seg1,seg2,flag,seg3,seg4)
135 qwolxan(j,i)=0.5d0*(q2-q1)/delta
136 c(j,i+nres)=cdummy(j,i+nres)
139 write(iout,*) "Numerical Q cartesian gradients backbone: "
141 write(iout,'(i5,3e15.5)') i, (qwolan(j,i),j=1,3)
143 write(iout,*) "Numerical Q cartesian gradients side-chain: "
145 write(iout,'(i5,3e15.5)') i, (qwolxan(j,i),j=1,3)
150 c------------------------------------------------------------------------
152 c MD with umbrella_sampling using Wolyne's distance measure as a constraint
153 implicit real*8 (a-h,o-z)
155 include 'COMMON.CONTROL'
157 include 'COMMON.QRESTR'
159 include 'COMMON.LANGEVIN'
161 include 'COMMON.LANGEVIN.lang0'
163 include 'COMMON.CHAIN'
164 include 'COMMON.DERIV'
166 include 'COMMON.LOCAL'
167 include 'COMMON.INTERACT'
168 include 'COMMON.IOUNITS'
169 include 'COMMON.NAMES'
170 include 'COMMON.TIME1'
171 double precision uzap1,uzap2,hm1,hm2,hmnum
172 double precision ucdelan,dUcartan(3,0:MAXRES)
173 & ,dUxcartan(3,0:MAXRES),cdummy(3,0:MAXRES),
174 & duconst(3,0:MAXRES),duxconst(3,0:MAXRES)
175 integer kstart,kend,lstart,lend,idummy
176 double precision delta /1.0d-7/
187 qfrag(i)=qwolynes(ifrag(1,i,iset),ifrag(2,i,iset),.true.
189 Uconst=Uconst+wfrag(i,iset)*harmonic(qfrag(i),qinfrag(i,iset))
190 c Calculating the derivatives of Constraint energy with respect to Q
191 Ucdfrag=wfrag(i,iset)*harmonicprim(qfrag(i),qinfrag(i,iset))
192 c Calculating the derivatives of Q with respect to cartesian coordinates
195 duconst(j,ii)=dUconst(j,ii)+ucdfrag*dqwol(j,ii)
196 dUxconst(j,ii)=dUxconst(j,ii)+ucdfrag*dxqwol(j,ii)
199 c write (iout,*) "Calling qwol_num"
200 c call qwol_num(ifrag(1,i,iset),ifrag(2,i,iset),.true.,idummy,idummy)
204 kstart=ifrag(1,ipair(1,i,iset),iset)
205 kend=ifrag(2,ipair(1,i,iset),iset)
206 lstart=ifrag(1,ipair(2,i,iset),iset)
207 lend=ifrag(2,ipair(2,i,iset),iset)
208 qpair(i)=qwolynes(kstart,kend,.false.,lstart,lend)
209 Uconst=Uconst+wpair(i,iset)*harmonic(qpair(i),qinpair(i,iset))
211 Ucdpair=wpair(i,iset)*harmonicprim(qpair(i),qinpair(i,iset))
215 duconst(j,ii)=dUconst(j,ii)+ucdpair*dqwol(j,ii)
216 dUxconst(j,ii)=dUxconst(j,ii)+ucdpair*dxqwol(j,ii)
220 c write(iout,*) "Uconst inside subroutine ", Uconst
221 c Transforming the gradients from Cs to dCs for the backbone
225 dudconst(k,i)=dudconst(k,i)+duconst(k,j)+duxconst(k,j)
229 c Transforming the gradients from Cs to dCs for the side chains
232 dudxconst(j,i)=duxconst(j,i)
235 c write(iout,*) "dU/dc backbone "
237 c write(iout,'(i5,3e15.5)') ii, (duconst(j,ii),j=1,3)
239 c write(iout,*) "dU/dX side chain "
241 c write(iout,'(i5,3e15.5)') ii,(duxconst(j,ii),j=1,3)
243 c write(iout,*) "dU/ddc backbone "
245 c write(iout,'(i5,3e15.5)') ii, (dudconst(j,ii),j=1,3)
247 c write(iout,*) "dU/ddX side chain "
249 c write(iout,'(i5,3e15.5)') ii,(dudxconst(j,ii),j=1,3)
251 c Calculating numerical gradients of dUconst/ddc and dUconst/ddx
256 c-----------------------------------------------------------------------
257 subroutine dEconstrQ_num
258 c Calculating numerical dUconst/ddc and dUconst/ddx
259 implicit real*8 (a-h,o-z)
261 include 'COMMON.CONTROL'
263 include 'COMMON.QRESTR'
265 include 'COMMON.LANGEVIN'
267 include 'COMMON.LANGEVIN.lang0'
269 include 'COMMON.CHAIN'
270 include 'COMMON.DERIV'
272 include 'COMMON.LOCAL'
273 include 'COMMON.INTERACT'
274 include 'COMMON.IOUNITS'
275 include 'COMMON.NAMES'
276 include 'COMMON.TIME1'
277 double precision uzap1,uzap2
278 double precision dUcartan(3,0:MAXRES)
279 & ,dUxcartan(3,0:MAXRES),cdummy(3,0:MAXRES)
280 integer kstart,kend,lstart,lend,idummy
281 double precision delta /1.0d-7/
287 dc(j,i)=dc(j,i)+delta
291 qfrag(ii)=qwolynes(ifrag(1,ii,iset),ifrag(2,ii,iset),
292 & .true.,idummy,idummy)
293 uzap2=uzap2+wfrag(ii,iset)*
294 & harmonic(qfrag(ii),qinfrag(ii,iset))
297 kstart=ifrag(1,ipair(1,ii,iset),iset)
298 kend=ifrag(2,ipair(1,ii,iset),iset)
299 lstart=ifrag(1,ipair(2,ii,iset),iset)
300 lend=ifrag(2,ipair(2,ii,iset),iset)
301 qpair(ii)=qwolynes(kstart,kend,.false.,lstart,lend)
302 uzap2=uzap2+wpair(ii,iset)*
303 & harmonic(qpair(ii),qinpair(ii,iset))
309 qfrag(ii)=qwolynes(ifrag(1,ii,iset),ifrag(2,ii,iset),
310 & .true.,idummy,idummy)
311 uzap1=uzap1+wfrag(ii,iset)*
312 & harmonic(qfrag(ii),qinfrag(ii,iset))
315 kstart=ifrag(1,ipair(1,ii,iset),iset)
316 kend=ifrag(2,ipair(1,ii,iset),iset)
317 lstart=ifrag(1,ipair(2,ii,iset),iset)
318 lend=ifrag(2,ipair(2,ii,iset),iset)
319 qpair(ii)=qwolynes(kstart,kend,.false.,lstart,lend)
320 uzap1=uzap1+wpair(ii,iset)*
321 & harmonic(qpair(ii),qinpair(ii,iset))
323 ducartan(j,i)=(uzap2-uzap1)/(delta)
326 c Calculating numerical gradients for dU/ddx
332 cdummy(j,i)=dc(j,i+nres)
333 dc(j,i+nres)=dc(j,i+nres)+delta
337 qfrag(ii)=qwolynes(ifrag(1,ii,iset),ifrag(2,ii,iset),
338 & .true.,idummy,idummy)
339 uzap2=uzap2+wfrag(ii,iset)*
340 & harmonic(qfrag(ii),qinfrag(ii,iset))
343 kstart=ifrag(1,ipair(1,ii,iset),iset)
344 kend=ifrag(2,ipair(1,ii,iset),iset)
345 lstart=ifrag(1,ipair(2,ii,iset),iset)
346 lend=ifrag(2,ipair(2,ii,iset),iset)
347 qpair(ii)=qwolynes(kstart,kend,.false.,lstart,lend)
348 uzap2=uzap2+wpair(ii,iset)*
349 & harmonic(qpair(ii),qinpair(ii,iset))
351 dc(j,i+nres)=cdummy(j,i)
355 qfrag(ii)=qwolynes(ifrag(1,ii,iset),ifrag(2,ii,iset),
356 & .true.,idummy,idummy)
357 uzap1=uzap1+wfrag(ii,iset)*
358 & harmonic(qfrag(ii),qinfrag(ii,iset))
361 kstart=ifrag(1,ipair(1,ii,iset),iset)
362 kend=ifrag(2,ipair(1,ii,iset),iset)
363 lstart=ifrag(1,ipair(2,ii,iset),iset)
364 lend=ifrag(2,ipair(2,ii,iset),iset)
365 qpair(ii)=qwolynes(kstart,kend,.false.,lstart,lend)
366 uzap1=uzap1+wpair(ii,iset)*
367 & harmonic(qpair(ii),qinpair(ii,iset))
369 duxcartan(j,i)=(uzap2-uzap1)/(delta)
372 write(iout,*) "Numerical dUconst/ddc backbone "
374 write(iout,'(i5,3e15.5)') ii,(dUcartan(j,ii),j=1,3)
376 write(iout,*) "Numerical dUconst/ddx side-chain "
378 write(iout,'(i5,3e15.5)') ii,(dUxcartan(j,ii),j=1,3)
383 c---------------------------------------------------------------------------
384 double precision function qcontrib(il,jl,il1,jl1)
387 include 'COMMON.IOUNITS'
388 include 'COMMON.CHAIN'
389 include 'COMMON.INTERACT'
390 include 'COMMON.QRESTR'
391 include 'COMMON.LOCAL'
392 integer i,j,k,il,jl,il1,jl1,nd,itl,jtl
393 double precision dist
395 double precision dij,dij1,d0ij,d0ij1,om1,om2,om12,om10,om20,om120
396 & ,fac,fac1,ddave,ssij,ddqij,d0ii1,d0jj1,rij,eom1,eom2,eom12
397 double precision u(3),v(3),er(3),er0(3),dcosom1(3),dcosom2(3),
399 double precision scalar
401 logical lprn /.false./
402 if (lprn) write (iout,*) "il",il," jl",jl," il1",il1," jl1",jl1
403 d0ij=dsqrt((cref(1,jl)-cref(1,il))**2+
404 & (cref(2,jl)-cref(2,il))**2+
405 & (cref(3,jl)-cref(3,il))**2)
409 er(i)=(c(i,jl1)-c(i,il1))/dij1
412 er0(i)=cref(i,jl1)-cref(i,il1)
414 d0ij1=dsqrt(scalar(er0,er0))
418 if (il.ne.il1 .or. jl.ne.jl1) then
419 ddave=0.5d0*((dij-d0ij)**2+(dij1-d0ij1)**2)
427 u(i)=cref(i,il1)-cref(i,il)
429 d0ii1=dsqrt(scalar(u,u))
434 write (iout,*) "u",(u(i),i=1,3)
435 write (iout,*) "er0",(er0(i),i=1,3)
437 om1=scalar(er,dc_norm(1,il1))
438 write (iout,*) "om10",om10," om1",om1
446 v(i)=cref(i,jl1)-cref(i,jl)
448 d0jj1=dsqrt(scalar(v,v))
453 write (iout,*) "v",(v(i),i=1,3)
454 write (iout,*) "er0",(er0(i),i=1,3)
456 om2=scalar(er,dc_norm(1,jl1))
457 write (iout,*) "om20",om20," om2",om2
463 if (il.ne.il1 .and. jl.ne.jl1) then
465 om12=scalar(dc_norm(1,il1),dc_norm(1,jl1))
471 write (iout,*) "il",il," jl",jl,itype(il),itype(jl)
472 write (iout,*)"d0ij",d0ij," om10",om10," om20",om20,
474 & " dij",dij," om1",om1," om2",om2," om12",om12
477 ssij = 16.0d0/(d0ij*d0ij)
478 qcontrib = dexp(-0.5d0*(ddave*ssij+((om1-om10)**2
479 & +(om2-om20)**2+(om12-om120)**2)))
480 if (lprn) write (iout,*) "ssij",ssij," qcontrib",qcontrib
481 c qcontrib = dexp(-0.5d0*(ddave*ssij)+(om1-om10)**2+(om2-om20)**2)
482 c qcontrib = dexp(-0.5d0*(ddave*ssij))
483 c Compute gradient - radial component
484 fac1 = qcontrib*ssij/nd
485 fac = fac1*(dij-d0ij)/dij
487 ddqij = (c(k,il)-c(k,jl))*fac
488 dqwol(k,il)=dqwol(k,il)+ddqij
489 dqwol(k,jl)=dqwol(k,jl)-ddqij
491 if (il1.ne.il .or. jl1.ne.jl) then
492 fac = fac1*(dij1-d0ij1)/dij1
494 ddqij = (c(k,il1)-c(k,jl1))*fac
496 dxqwol(k,il)=dxqwol(k,il)+ddqij
498 dqwol(k,il)=dqwol(k,il)+ddqij
501 dxqwol(k,jl)=dxqwol(k,jl)-ddqij
503 dqwol(k,jl)=dqwol(k,jl)-ddqij
508 c Orientational contributions
510 eom1=qcontrib*(om1-om10)
511 eom2=qcontrib*(om2-om20)
512 eom12=qcontrib*(om12-om120)
514 dcosom1(k)=rij*(dc_norm(k,il1)-om1*er(k))
515 dcosom2(k)=rij*(dc_norm(k,jl1)-om2*er(k))
518 ddqij=eom1*dcosom1(k)+eom2*dcosom2(k)
519 aux1=(eom12*(dc_norm(k,jl1)-om12*dc_norm(k,il1))
520 & +eom1*(er(k)-om1*dc_norm(k,il1)))*vbld_inv(il1)
521 aux2=(eom12*(dc_norm(k,il1)-om12*dc_norm(k,jl1))
522 & +eom2*(er(k)-om2*dc_norm(k,jl1)))*vbld_inv(jl1)
523 dqwol(k,il)=dqwol(k,il)-ddqij-aux1
524 dqwol(k,jl)=dqwol(k,jl)+ddqij-aux2
525 dxqwol(k,il)=dxqwol(k,il)-ddqij+aux1
526 c & +(eom12*(dc_norm(k,jl1)-om12*dc_norm(k,il1))
527 c & +eom1*(er(k)-om1*dc_norm(k,il1)))*vbld_inv(il1)
528 dxqwol(k,jl)=dxqwol(k,jl)+ddqij+aux2
529 c & +(eom12*(dc_norm(k,il1)-om12*dc_norm(k,jl1))
530 c & +eom2*(er(k)-om2*dc_norm(k,jl1)))*vbld_inv(jl1)