1 subroutine etotal(energia,fact)
2 implicit real*8 (a-h,o-z)
4 include 'DIMENSIONS.ZSCOPT'
10 cMS$ATTRIBUTES C :: proc_proc
13 include 'COMMON.IOUNITS'
14 double precision energia(0:max_ene),energia1(0:max_ene+1)
20 include 'COMMON.FFIELD'
21 include 'COMMON.DERIV'
22 include 'COMMON.INTERACT'
23 include 'COMMON.SBRIDGE'
24 include 'COMMON.CHAIN'
25 double precision fact(6)
26 cd write(iout, '(a,i2)')'Calling etotal ipot=',ipot
27 cd print *,'nnt=',nnt,' nct=',nct
29 C Compute the side-chain and electrostatic interaction energy
31 goto (101,102,103,104,105) ipot
32 C Lennard-Jones potential.
33 101 call elj(evdw,evdw_t)
34 cd print '(a)','Exit ELJ'
36 C Lennard-Jones-Kihara potential (shifted).
37 102 call eljk(evdw,evdw_t)
39 C Berne-Pechukas potential (dilated LJ, angular dependence).
40 103 call ebp(evdw,evdw_t)
42 C Gay-Berne potential (shifted LJ, angular dependence).
43 104 call egb(evdw,evdw_t)
45 C Gay-Berne-Vorobjev potential (shifted LJ, angular dependence).
46 105 call egbv(evdw,evdw_t)
48 C Calculate electrostatic (H-bonding) energy of the main chain.
50 106 call eelec(ees,evdw1,eel_loc,eello_turn3,eello_turn4)
52 C Calculate excluded-volume interaction energy between peptide groups
55 call escp(evdw2,evdw2_14)
57 c Calculate the bond-stretching energy
60 c write (iout,*) "estr",estr
62 C Calculate the disulfide-bridge and other energy and the contributions
63 C from other distance constraints.
64 cd print *,'Calling EHPB'
66 cd print *,'EHPB exitted succesfully.'
68 C Calculate the virtual-bond-angle energy.
71 cd print *,'Bend energy finished.'
73 C Calculate the SC local energy.
76 cd print *,'SCLOC energy finished.'
78 C Calculate the virtual-bond torsional energy.
80 cd print *,'nterm=',nterm
81 call etor(etors,edihcnstr,fact(1))
83 C 6/23/01 Calculate double-torsional energy
85 call etor_d(etors_d,fact(2))
87 C 21/5/07 Calculate local sicdechain correlation energy
89 call eback_sc_corr(esccor)
91 C 12/1/95 Multi-body terms
95 if (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0
96 & .or. wturn6.gt.0.0d0) then
97 c print *,"calling multibody_eello"
98 call multibody_eello(ecorr,ecorr5,ecorr6,eturn6,n_corr,n_corr1)
99 c write (*,*) 'n_corr=',n_corr,' n_corr1=',n_corr1
100 c print *,ecorr,ecorr5,ecorr6,eturn6
102 if (wcorr4.eq.0.0d0 .and. wcorr.gt.0.0d0) then
103 call multibody_hb(ecorr,ecorr5,ecorr6,n_corr,n_corr1)
105 c write (iout,*) "ft(6)",fact(6)," evdw",evdw," evdw_t",evdw_t
107 etot=wsc*(evdw+fact(6)*evdw_t)+wscp*evdw2+welec*fact(1)*ees
109 & +wang*ebe+wtor*fact(1)*etors+wscloc*escloc
110 & +wstrain*ehpb+nss*ebr+wcorr*fact(3)*ecorr+wcorr5*fact(4)*ecorr5
111 & +wcorr6*fact(5)*ecorr6+wturn4*fact(3)*eello_turn4
112 & +wturn3*fact(2)*eello_turn3+wturn6*fact(5)*eturn6
113 & +wel_loc*fact(2)*eel_loc+edihcnstr+wtor_d*fact(2)*etors_d
114 & +wbond*estr+wsccor*fact(1)*esccor
116 etot=wsc*(evdw+fact(6)*evdw_t)+wscp*evdw2
117 & +welec*fact(1)*(ees+evdw1)
118 & +wang*ebe+wtor*fact(1)*etors+wscloc*escloc
119 & +wstrain*ehpb+nss*ebr+wcorr*fact(3)*ecorr+wcorr5*fact(4)*ecorr5
120 & +wcorr6*fact(5)*ecorr6+wturn4*fact(3)*eello_turn4
121 & +wturn3*fact(2)*eello_turn3+wturn6*fact(5)*eturn6
122 & +wel_loc*fact(2)*eel_loc+edihcnstr+wtor_d*fact(2)*etors_d
123 & +wbond*estr+wsccor*fact(1)*esccor
128 energia(2)=evdw2-evdw2_14
145 energia(8)=eello_turn3
146 energia(9)=eello_turn4
155 energia(20)=edihcnstr
160 if (isnan(etot).ne.0) energia(0)=1.0d+99
162 if (isnan(etot)) energia(0)=1.0d+99
167 idumm=proc_proc(etot,i)
169 call proc_proc(etot,i)
171 if(i.eq.1)energia(0)=1.0d+99
178 C Sum up the components of the Cartesian gradient.
183 gradc(j,i,icg)=wsc*gvdwc(j,i)+wscp*gvdwc_scp(j,i)+
184 & welec*fact(1)*gelc(j,i)+wvdwpp*gvdwpp(j,i)+
186 & wstrain*ghpbc(j,i)+
187 & wcorr*fact(3)*gradcorr(j,i)+
188 & wel_loc*fact(2)*gel_loc(j,i)+
189 & wturn3*fact(2)*gcorr3_turn(j,i)+
190 & wturn4*fact(3)*gcorr4_turn(j,i)+
191 & wcorr5*fact(4)*gradcorr5(j,i)+
192 & wcorr6*fact(5)*gradcorr6(j,i)+
193 & wturn6*fact(5)*gcorr6_turn(j,i)+
194 & wsccor*fact(2)*gsccorc(j,i)
195 gradx(j,i,icg)=wsc*gvdwx(j,i)+wscp*gradx_scp(j,i)+
197 & wstrain*ghpbx(j,i)+wcorr*gradxorr(j,i)+
198 & wsccor*fact(2)*gsccorx(j,i)
203 gradc(j,i,icg)=wsc*gvdwc(j,i)+wscp*gvdwc_scp(j,i)+
204 & welec*fact(1)*gelc(j,i)+wstrain*ghpbc(j,i)+
206 & wcorr*fact(3)*gradcorr(j,i)+
207 & wel_loc*fact(2)*gel_loc(j,i)+
208 & wturn3*fact(2)*gcorr3_turn(j,i)+
209 & wturn4*fact(3)*gcorr4_turn(j,i)+
210 & wcorr5*fact(4)*gradcorr5(j,i)+
211 & wcorr6*fact(5)*gradcorr6(j,i)+
212 & wturn6*fact(5)*gcorr6_turn(j,i)+
213 & wsccor*fact(2)*gsccorc(j,i)
214 gradx(j,i,icg)=wsc*gvdwx(j,i)+wscp*gradx_scp(j,i)+
216 & wstrain*ghpbx(j,i)+wcorr*gradxorr(j,i)+
217 & wsccor*fact(1)*gsccorx(j,i)
224 gloc(i,icg)=gloc(i,icg)+wcorr*fact(3)*gcorr_loc(i)
225 & +wcorr5*fact(4)*g_corr5_loc(i)
226 & +wcorr6*fact(5)*g_corr6_loc(i)
227 & +wturn4*fact(3)*gel_loc_turn4(i)
228 & +wturn3*fact(2)*gel_loc_turn3(i)
229 & +wturn6*fact(5)*gel_loc_turn6(i)
230 & +wel_loc*fact(2)*gel_loc_loc(i)
235 C------------------------------------------------------------------------
236 subroutine enerprint(energia,fact)
237 implicit real*8 (a-h,o-z)
239 include 'DIMENSIONS.ZSCOPT'
240 include 'COMMON.IOUNITS'
241 include 'COMMON.FFIELD'
242 include 'COMMON.SBRIDGE'
243 double precision energia(0:max_ene),fact(6)
245 evdw=energia(1)+fact(6)*energia(21)
247 evdw2=energia(2)+energia(17)
259 eello_turn3=energia(8)
260 eello_turn4=energia(9)
261 eello_turn6=energia(10)
268 edihcnstr=energia(20)
271 write (iout,10) evdw,wsc,evdw2,wscp,ees,welec*fact(1),evdw1,
273 & estr,wbond,ebe,wang,escloc,wscloc,etors,wtor*fact(1),
274 & etors_d,wtor_d*fact(2),ehpb,wstrain,
275 & ecorr,wcorr*fact(3),ecorr5,wcorr5*fact(4),ecorr6,wcorr6*fact(5),
276 & eel_loc,wel_loc*fact(2),eello_turn3,wturn3*fact(2),
277 & eello_turn4,wturn4*fact(3),eello_turn6,wturn6*fact(5),
278 & esccor,wsccor*fact(1),edihcnstr,ebr*nss,etot
279 10 format (/'Virtual-chain energies:'//
280 & 'EVDW= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC-SC)'/
281 & 'EVDW2= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC-p)'/
282 & 'EES= ',1pE16.6,' WEIGHT=',1pD16.6,' (p-p elec)'/
283 & 'EVDWPP=',1pE16.6,' WEIGHT=',1pD16.6,' (p-p VDW)'/
284 & 'ESTR= ',1pE16.6,' WEIGHT=',1pD16.6,' (stretching)'/
285 & 'EBE= ',1pE16.6,' WEIGHT=',1pD16.6,' (bending)'/
286 & 'ESC= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC local)'/
287 & 'ETORS= ',1pE16.6,' WEIGHT=',1pD16.6,' (torsional)'/
288 & 'ETORSD=',1pE16.6,' WEIGHT=',1pD16.6,' (double torsional)'/
289 & 'EHBP= ',1pE16.6,' WEIGHT=',1pD16.6,
290 & ' (SS bridges & dist. cnstr.)'/
291 & 'ECORR4=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
292 & 'ECORR5=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
293 & 'ECORR6=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
294 & 'EELLO= ',1pE16.6,' WEIGHT=',1pD16.6,' (electrostatic-local)'/
295 & 'ETURN3=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 3rd order)'/
296 & 'ETURN4=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 4th order)'/
297 & 'ETURN6=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 6th order)'/
298 & 'ESCCOR=',1pE16.6,' WEIGHT=',1pD16.6,' (backbone-rotamer corr)'/
299 & 'EDIHC= ',1pE16.6,' (dihedral angle constraints)'/
300 & 'ESS= ',1pE16.6,' (disulfide-bridge intrinsic energy)'/
301 & 'ETOT= ',1pE16.6,' (total)')
303 write (iout,10) evdw,wsc,evdw2,wscp,ees,welec*fact(1),estr,wbond,
304 & ebe,wang,escloc,wscloc,etors,wtor*fact(1),etors_d,wtor_d*fact2,
305 & ehpb,wstrain,ecorr,wcorr*fact(3),ecorr5,wcorr5*fact(4),
306 & ecorr6,wcorr6*fact(5),eel_loc,wel_loc*fact(2),
307 & eello_turn3,wturn3*fact(2),eello_turn4,wturn4*fact(3),
308 & eello_turn6,wturn6*fact(5),esccor*fact(1),wsccor,
309 & edihcnstr,ebr*nss,etot
310 10 format (/'Virtual-chain energies:'//
311 & 'EVDW= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC-SC)'/
312 & 'EVDW2= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC-p)'/
313 & 'EES= ',1pE16.6,' WEIGHT=',1pD16.6,' (p-p)'/
314 & 'ESTR= ',1pE16.6,' WEIGHT=',1pD16.6,' (stretching)'/
315 & 'EBE= ',1pE16.6,' WEIGHT=',1pD16.6,' (bending)'/
316 & 'ESC= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC local)'/
317 & 'ETORS= ',1pE16.6,' WEIGHT=',1pD16.6,' (torsional)'/
318 & 'ETORSD=',1pE16.6,' WEIGHT=',1pD16.6,' (double torsional)'/
319 & 'EHBP= ',1pE16.6,' WEIGHT=',1pD16.6,
320 & ' (SS bridges & dist. cnstr.)'/
321 & 'ECORR4=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
322 & 'ECORR5=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
323 & 'ECORR6=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
324 & 'EELLO= ',1pE16.6,' WEIGHT=',1pD16.6,' (electrostatic-local)'/
325 & 'ETURN3=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 3rd order)'/
326 & 'ETURN4=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 4th order)'/
327 & 'ETURN6=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 6th order)'/
328 & 'ESCCOR=',1pE16.6,' WEIGHT=',1pD16.6,' (backbone-rotamer corr)'/
329 & 'EDIHC= ',1pE16.6,' (dihedral angle constraints)'/
330 & 'ESS= ',1pE16.6,' (disulfide-bridge intrinsic energy)'/
331 & 'ETOT= ',1pE16.6,' (total)')
335 C-----------------------------------------------------------------------
336 subroutine elj(evdw,evdw_t)
338 C This subroutine calculates the interaction energy of nonbonded side chains
339 C assuming the LJ potential of interaction.
341 implicit real*8 (a-h,o-z)
343 include 'DIMENSIONS.ZSCOPT'
344 include "DIMENSIONS.COMPAR"
345 parameter (accur=1.0d-10)
348 include 'COMMON.LOCAL'
349 include 'COMMON.CHAIN'
350 include 'COMMON.DERIV'
351 include 'COMMON.INTERACT'
352 include 'COMMON.TORSION'
353 include 'COMMON.ENEPS'
354 include 'COMMON.SBRIDGE'
355 include 'COMMON.NAMES'
356 include 'COMMON.IOUNITS'
357 include 'COMMON.CONTACTS'
361 cd print *,'Entering ELJ nnt=',nnt,' nct=',nct,' expon=',expon
364 eneps_temp(j,i)=0.0d0
371 if (itypi.eq.ntyp1) cycle
372 itypi1=iabs(itype(i+1))
379 C Calculate SC interaction energy.
382 cd write (iout,*) 'i=',i,' iint=',iint,' istart=',istart(i,iint),
383 cd & 'iend=',iend(i,iint)
384 do j=istart(i,iint),iend(i,iint)
386 if (itypj.eq.ntyp1) cycle
390 C Change 12/1/95 to calculate four-body interactions
391 rij=xj*xj+yj*yj+zj*zj
393 c write (iout,*)'i=',i,' j=',j,' itypi=',itypi,' itypj=',itypj
394 eps0ij=eps(itypi,itypj)
396 e1=fac*fac*aa(itypi,itypj)
397 e2=fac*bb(itypi,itypj)
399 ij=icant(itypi,itypj)
400 eneps_temp(1,ij)=eneps_temp(1,ij)+e1/dabs(eps0ij)
401 eneps_temp(2,ij)=eneps_temp(2,ij)+e2/eps0ij
402 cd sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
403 cd epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
404 cd write (iout,'(2(a3,i3,2x),6(1pd12.4)/2(3(1pd12.4),5x)/)')
405 cd & restyp(itypi),i,restyp(itypj),j,aa(itypi,itypj),
406 cd & bb(itypi,itypj),1.0D0/dsqrt(rrij),evdwij,epsi,sigm,
407 cd & (c(k,i),k=1,3),(c(k,j),k=1,3)
408 if (bb(itypi,itypj).gt.0.0d0) then
415 C Calculate the components of the gradient in DC and X
417 fac=-rrij*(e1+evdwij)
422 gvdwx(k,i)=gvdwx(k,i)-gg(k)
423 gvdwx(k,j)=gvdwx(k,j)+gg(k)
427 gvdwc(l,k)=gvdwc(l,k)+gg(l)
432 C 12/1/95, revised on 5/20/97
434 C Calculate the contact function. The ith column of the array JCONT will
435 C contain the numbers of atoms that make contacts with the atom I (of numbers
436 C greater than I). The arrays FACONT and GACONT will contain the values of
437 C the contact function and its derivative.
439 C Uncomment next line, if the correlation interactions include EVDW explicitly.
440 c if (j.gt.i+1 .and. evdwij.le.0.0D0) then
441 C Uncomment next line, if the correlation interactions are contact function only
442 if (j.gt.i+1.and. eps0ij.gt.0.0D0) then
444 sigij=sigma(itypi,itypj)
445 r0ij=rs0(itypi,itypj)
447 C Check whether the SC's are not too far to make a contact.
450 call gcont(rij,rcut,1.0d0,0.2d0*rcut,fcont,fprimcont)
451 C Add a new contact, if the SC's are close enough, but not too close (r<sigma).
453 if (fcont.gt.0.0D0) then
454 C If the SC-SC distance if close to sigma, apply spline.
455 cAdam call gcont(-rij,-1.03d0*sigij,2.0d0*sigij,1.0d0,
456 cAdam & fcont1,fprimcont1)
457 cAdam fcont1=1.0d0-fcont1
458 cAdam if (fcont1.gt.0.0d0) then
459 cAdam fprimcont=fprimcont*fcont1+fcont*fprimcont1
460 cAdam fcont=fcont*fcont1
462 C Uncomment following 4 lines to have the geometric average of the epsilon0's
463 cga eps0ij=1.0d0/dsqrt(eps0ij)
465 cga gg(k)=gg(k)*eps0ij
467 cga eps0ij=-evdwij*eps0ij
468 C Uncomment for AL's type of SC correlation interactions.
470 num_conti=num_conti+1
472 facont(num_conti,i)=fcont*eps0ij
473 fprimcont=eps0ij*fprimcont/rij
475 cAdam gacont(1,num_conti,i)=-fprimcont*xj+fcont*gg(1)
476 cAdam gacont(2,num_conti,i)=-fprimcont*yj+fcont*gg(2)
477 cAdam gacont(3,num_conti,i)=-fprimcont*zj+fcont*gg(3)
478 C Uncomment following 3 lines for Skolnick's type of SC correlation.
479 gacont(1,num_conti,i)=-fprimcont*xj
480 gacont(2,num_conti,i)=-fprimcont*yj
481 gacont(3,num_conti,i)=-fprimcont*zj
482 cd write (iout,'(2i5,2f10.5)') i,j,rij,facont(num_conti,i)
483 cd write (iout,'(2i3,3f10.5)')
484 cd & i,j,(gacont(kk,num_conti,i),kk=1,3)
490 num_cont(i)=num_conti
495 gvdwc(j,i)=expon*gvdwc(j,i)
496 gvdwx(j,i)=expon*gvdwx(j,i)
500 C******************************************************************************
504 C To save time, the factor of EXPON has been extracted from ALL components
505 C of GVDWC and GRADX. Remember to multiply them by this factor before further
508 C******************************************************************************
511 C-----------------------------------------------------------------------------
512 subroutine eljk(evdw,evdw_t)
514 C This subroutine calculates the interaction energy of nonbonded side chains
515 C assuming the LJK potential of interaction.
517 implicit real*8 (a-h,o-z)
519 include 'DIMENSIONS.ZSCOPT'
520 include "DIMENSIONS.COMPAR"
523 include 'COMMON.LOCAL'
524 include 'COMMON.CHAIN'
525 include 'COMMON.DERIV'
526 include 'COMMON.INTERACT'
527 include 'COMMON.ENEPS'
528 include 'COMMON.IOUNITS'
529 include 'COMMON.NAMES'
534 c print *,'Entering ELJK nnt=',nnt,' nct=',nct,' expon=',expon
537 eneps_temp(j,i)=0.0d0
544 if (itypi.eq.ntyp1) cycle
545 itypi1=iabs(itype(i+1))
550 C Calculate SC interaction energy.
553 do j=istart(i,iint),iend(i,iint)
555 if (itypj.eq.ntyp1) cycle
559 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
561 e_augm=augm(itypi,itypj)*fac_augm
564 r_shift_inv=1.0D0/(rij+r0(itypi,itypj)-sigma(itypi,itypj))
565 fac=r_shift_inv**expon
566 e1=fac*fac*aa(itypi,itypj)
567 e2=fac*bb(itypi,itypj)
569 ij=icant(itypi,itypj)
570 eneps_temp(1,ij)=eneps_temp(1,ij)+(e1+a_augm)
571 & /dabs(eps(itypi,itypj))
572 eneps_temp(2,ij)=eneps_temp(2,ij)+e2/eps(itypi,itypj)
573 cd sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
574 cd epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
575 cd write (iout,'(2(a3,i3,2x),8(1pd12.4)/2(3(1pd12.4),5x)/)')
576 cd & restyp(itypi),i,restyp(itypj),j,aa(itypi,itypj),
577 cd & bb(itypi,itypj),augm(itypi,itypj),epsi,sigm,
578 cd & sigma(itypi,itypj),1.0D0/dsqrt(rrij),evdwij,
579 cd & (c(k,i),k=1,3),(c(k,j),k=1,3)
580 if (bb(itypi,itypj).gt.0.0d0) then
587 C Calculate the components of the gradient in DC and X
589 fac=-2.0D0*rrij*e_augm-r_inv_ij*r_shift_inv*(e1+e1+e2)
594 gvdwx(k,i)=gvdwx(k,i)-gg(k)
595 gvdwx(k,j)=gvdwx(k,j)+gg(k)
599 gvdwc(l,k)=gvdwc(l,k)+gg(l)
609 gvdwc(j,i)=expon*gvdwc(j,i)
610 gvdwx(j,i)=expon*gvdwx(j,i)
616 C-----------------------------------------------------------------------------
617 subroutine ebp(evdw,evdw_t)
619 C This subroutine calculates the interaction energy of nonbonded side chains
620 C assuming the Berne-Pechukas potential of interaction.
622 implicit real*8 (a-h,o-z)
624 include 'DIMENSIONS.ZSCOPT'
625 include "DIMENSIONS.COMPAR"
628 include 'COMMON.LOCAL'
629 include 'COMMON.CHAIN'
630 include 'COMMON.DERIV'
631 include 'COMMON.NAMES'
632 include 'COMMON.INTERACT'
633 include 'COMMON.ENEPS'
634 include 'COMMON.IOUNITS'
635 include 'COMMON.CALC'
637 c double precision rrsave(maxdim)
643 eneps_temp(j,i)=0.0d0
648 c print *,'Entering EBP nnt=',nnt,' nct=',nct,' expon=',expon
649 c if (icall.eq.0) then
657 if (itypi.eq.ntyp1) cycle
658 itypi1=iabs(itype(i+1))
662 dxi=dc_norm(1,nres+i)
663 dyi=dc_norm(2,nres+i)
664 dzi=dc_norm(3,nres+i)
665 dsci_inv=vbld_inv(i+nres)
667 C Calculate SC interaction energy.
670 do j=istart(i,iint),iend(i,iint)
673 if (itypj.eq.ntyp1) cycle
674 dscj_inv=vbld_inv(j+nres)
675 chi1=chi(itypi,itypj)
676 chi2=chi(itypj,itypi)
683 alf12=0.5D0*(alf1+alf2)
684 C For diagnostics only!!!
697 dxj=dc_norm(1,nres+j)
698 dyj=dc_norm(2,nres+j)
699 dzj=dc_norm(3,nres+j)
700 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
701 cd if (icall.eq.0) then
707 C Calculate the angle-dependent terms of energy & contributions to derivatives.
709 C Calculate whole angle-dependent part of epsilon and contributions
711 fac=(rrij*sigsq)**expon2
712 e1=fac*fac*aa(itypi,itypj)
713 e2=fac*bb(itypi,itypj)
714 evdwij=eps1*eps2rt*eps3rt*(e1+e2)
715 eps2der=evdwij*eps3rt
716 eps3der=evdwij*eps2rt
717 evdwij=evdwij*eps2rt*eps3rt
718 ij=icant(itypi,itypj)
719 aux=eps1*eps2rt**2*eps3rt**2
720 eneps_temp(1,ij)=eneps_temp(1,ij)+e1*aux
721 & /dabs(eps(itypi,itypj))
722 eneps_temp(2,ij)=eneps_temp(2,ij)+e2*aux/eps(itypi,itypj)
723 if (bb(itypi,itypj).gt.0.0d0) then
730 sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
731 epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
732 write (iout,'(2(a3,i3,2x),15(0pf7.3))')
733 & restyp(itypi),i,restyp(itypj),j,
734 & epsi,sigm,chi1,chi2,chip1,chip2,
735 & eps1,eps2rt**2,eps3rt**2,1.0D0/dsqrt(sigsq),
736 & om1,om2,om12,1.0D0/dsqrt(rrij),
739 C Calculate gradient components.
740 e1=e1*eps1*eps2rt**2*eps3rt**2
741 fac=-expon*(e1+evdwij)
744 C Calculate radial part of the gradient
748 C Calculate the angular part of the gradient and sum add the contributions
749 C to the appropriate components of the Cartesian gradient.
758 C-----------------------------------------------------------------------------
759 subroutine egb(evdw,evdw_t)
761 C This subroutine calculates the interaction energy of nonbonded side chains
762 C assuming the Gay-Berne potential of interaction.
764 implicit real*8 (a-h,o-z)
766 include 'DIMENSIONS.ZSCOPT'
767 include "DIMENSIONS.COMPAR"
770 include 'COMMON.LOCAL'
771 include 'COMMON.CHAIN'
772 include 'COMMON.DERIV'
773 include 'COMMON.NAMES'
774 include 'COMMON.INTERACT'
775 include 'COMMON.ENEPS'
776 include 'COMMON.IOUNITS'
777 include 'COMMON.CALC'
784 eneps_temp(j,i)=0.0d0
787 c print *,'Entering EGB nnt=',nnt,' nct=',nct,' expon=',expon
791 c if (icall.gt.0) lprn=.true.
795 if (itypi.eq.ntyp1) cycle
796 itypi1=iabs(itype(i+1))
800 dxi=dc_norm(1,nres+i)
801 dyi=dc_norm(2,nres+i)
802 dzi=dc_norm(3,nres+i)
803 dsci_inv=vbld_inv(i+nres)
805 C Calculate SC interaction energy.
808 do j=istart(i,iint),iend(i,iint)
811 if (itypj.eq.ntyp1) cycle
812 dscj_inv=vbld_inv(j+nres)
813 sig0ij=sigma(itypi,itypj)
814 chi1=chi(itypi,itypj)
815 chi2=chi(itypj,itypi)
822 alf12=0.5D0*(alf1+alf2)
823 C For diagnostics only!!!
836 dxj=dc_norm(1,nres+j)
837 dyj=dc_norm(2,nres+j)
838 dzj=dc_norm(3,nres+j)
839 c write (iout,*) i,j,xj,yj,zj
840 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
842 C Calculate angle-dependent terms of energy and contributions to their
846 sig=sig0ij*dsqrt(sigsq)
847 rij_shift=1.0D0/rij-sig+sig0ij
848 C I hate to put IF's in the loops, but here don't have another choice!!!!
849 if (rij_shift.le.0.0D0) then
854 c---------------------------------------------------------------
855 rij_shift=1.0D0/rij_shift
857 e1=fac*fac*aa(itypi,itypj)
858 e2=fac*bb(itypi,itypj)
859 evdwij=eps1*eps2rt*eps3rt*(e1+e2)
860 eps2der=evdwij*eps3rt
861 eps3der=evdwij*eps2rt
862 evdwij=evdwij*eps2rt*eps3rt
863 if (bb(itypi,itypj).gt.0) then
868 ij=icant(itypi,itypj)
869 aux=eps1*eps2rt**2*eps3rt**2
870 eneps_temp(1,ij)=eneps_temp(1,ij)+aux*e1
871 & /dabs(eps(itypi,itypj))
872 eneps_temp(2,ij)=eneps_temp(2,ij)+aux*e2/eps(itypi,itypj)
873 c write (iout,*) "i",i," j",j," itypi",itypi," itypj",itypj,
874 c & " ij",ij," eneps",aux*e1/dabs(eps(itypi,itypj)),
875 c & aux*e2/eps(itypi,itypj)
877 sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
878 epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
880 write (iout,'(2(a3,i3,2x),17(0pf7.3))')
881 & restyp(itypi),i,restyp(itypj),j,
882 & epsi,sigm,chi1,chi2,chip1,chip2,
883 & eps1,eps2rt**2,eps3rt**2,sig,sig0ij,
884 & om1,om2,om12,1.0D0/rij,1.0D0/rij_shift,
886 write (iout,*) "partial sum", evdw, evdw_t
890 C Calculate gradient components.
891 e1=e1*eps1*eps2rt**2*eps3rt**2
892 fac=-expon*(e1+evdwij)*rij_shift
895 C Calculate the radial part of the gradient
899 C Calculate angular part of the gradient.
907 C-----------------------------------------------------------------------------
908 subroutine egbv(evdw,evdw_t)
910 C This subroutine calculates the interaction energy of nonbonded side chains
911 C assuming the Gay-Berne-Vorobjev potential of interaction.
913 implicit real*8 (a-h,o-z)
915 include 'DIMENSIONS.ZSCOPT'
916 include "DIMENSIONS.COMPAR"
919 include 'COMMON.LOCAL'
920 include 'COMMON.CHAIN'
921 include 'COMMON.DERIV'
922 include 'COMMON.NAMES'
923 include 'COMMON.INTERACT'
924 include 'COMMON.ENEPS'
925 include 'COMMON.IOUNITS'
926 include 'COMMON.CALC'
933 eneps_temp(j,i)=0.0d0
938 c print *,'Entering EGB nnt=',nnt,' nct=',nct,' expon=',expon
941 c if (icall.gt.0) lprn=.true.
945 if (itypi.eq.ntyp1) cycle
946 itypi1=iabs(itype(i+1))
950 dxi=dc_norm(1,nres+i)
951 dyi=dc_norm(2,nres+i)
952 dzi=dc_norm(3,nres+i)
953 dsci_inv=vbld_inv(i+nres)
955 C Calculate SC interaction energy.
958 do j=istart(i,iint),iend(i,iint)
961 if (itypj.eq.ntyp1) cycle
962 dscj_inv=vbld_inv(j+nres)
963 sig0ij=sigma(itypi,itypj)
965 chi1=chi(itypi,itypj)
966 chi2=chi(itypj,itypi)
973 alf12=0.5D0*(alf1+alf2)
974 C For diagnostics only!!!
987 dxj=dc_norm(1,nres+j)
988 dyj=dc_norm(2,nres+j)
989 dzj=dc_norm(3,nres+j)
990 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
992 C Calculate angle-dependent terms of energy and contributions to their
996 sig=sig0ij*dsqrt(sigsq)
997 rij_shift=1.0D0/rij-sig+r0ij
998 C I hate to put IF's in the loops, but here don't have another choice!!!!
999 if (rij_shift.le.0.0D0) then
1004 c---------------------------------------------------------------
1005 rij_shift=1.0D0/rij_shift
1006 fac=rij_shift**expon
1007 e1=fac*fac*aa(itypi,itypj)
1008 e2=fac*bb(itypi,itypj)
1009 evdwij=eps1*eps2rt*eps3rt*(e1+e2)
1010 eps2der=evdwij*eps3rt
1011 eps3der=evdwij*eps2rt
1012 fac_augm=rrij**expon
1013 e_augm=augm(itypi,itypj)*fac_augm
1014 evdwij=evdwij*eps2rt*eps3rt
1015 if (bb(itypi,itypj).gt.0.0d0) then
1016 evdw=evdw+evdwij+e_augm
1018 evdw_t=evdw_t+evdwij+e_augm
1020 ij=icant(itypi,itypj)
1021 aux=eps1*eps2rt**2*eps3rt**2
1022 eneps_temp(1,ij)=eneps_temp(1,ij)+aux*(e1+e_augm)
1023 & /dabs(eps(itypi,itypj))
1024 eneps_temp(2,ij)=eneps_temp(2,ij)+aux*e2/eps(itypi,itypj)
1025 c eneps_temp(ij)=eneps_temp(ij)
1026 c & +(evdwij+e_augm)/eps(itypi,itypj)
1028 c sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
1029 c epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
1030 c write (iout,'(2(a3,i3,2x),17(0pf7.3))')
1031 c & restyp(itypi),i,restyp(itypj),j,
1032 c & epsi,sigm,sig,(augm(itypi,itypj)/epsi)**(1.0D0/12.0D0),
1033 c & chi1,chi2,chip1,chip2,
1034 c & eps1,eps2rt**2,eps3rt**2,
1035 c & om1,om2,om12,1.0D0/rij,1.0D0/rij_shift,
1039 C Calculate gradient components.
1040 e1=e1*eps1*eps2rt**2*eps3rt**2
1041 fac=-expon*(e1+evdwij)*rij_shift
1043 fac=rij*fac-2*expon*rrij*e_augm
1044 C Calculate the radial part of the gradient
1048 C Calculate angular part of the gradient.
1056 C-----------------------------------------------------------------------------
1057 subroutine sc_angular
1058 C Calculate eps1,eps2,eps3,sigma, and parts of their derivatives in om1,om2,
1059 C om12. Called by ebp, egb, and egbv.
1061 include 'COMMON.CALC'
1065 om1=dxi*erij(1)+dyi*erij(2)+dzi*erij(3)
1066 om2=dxj*erij(1)+dyj*erij(2)+dzj*erij(3)
1067 om12=dxi*dxj+dyi*dyj+dzi*dzj
1069 C Calculate eps1(om12) and its derivative in om12
1070 faceps1=1.0D0-om12*chiom12
1071 faceps1_inv=1.0D0/faceps1
1072 eps1=dsqrt(faceps1_inv)
1073 C Following variable is eps1*deps1/dom12
1074 eps1_om12=faceps1_inv*chiom12
1075 C Calculate sigma(om1,om2,om12) and the derivatives of sigma**2 in om1,om2,
1080 facsig=om1*chiom1+om2*chiom2-2.0D0*om1om2*chiom12
1081 sigsq=1.0D0-facsig*faceps1_inv
1082 sigsq_om1=(chiom1-chiom12*om2)*faceps1_inv
1083 sigsq_om2=(chiom2-chiom12*om1)*faceps1_inv
1084 sigsq_om12=-chi12*(om1om2*faceps1-om12*facsig)*faceps1_inv**2
1085 C Calculate eps2 and its derivatives in om1, om2, and om12.
1088 chipom12=chip12*om12
1089 facp=1.0D0-om12*chipom12
1091 facp1=om1*chipom1+om2*chipom2-2.0D0*om1om2*chipom12
1092 C Following variable is the square root of eps2
1093 eps2rt=1.0D0-facp1*facp_inv
1094 C Following three variables are the derivatives of the square root of eps
1095 C in om1, om2, and om12.
1096 eps2rt_om1=-4.0D0*(chipom1-chipom12*om2)*facp_inv
1097 eps2rt_om2=-4.0D0*(chipom2-chipom12*om1)*facp_inv
1098 eps2rt_om12=4.0D0*chip12*(om1om2*facp-om12*facp1)*facp_inv**2
1099 C Evaluate the "asymmetric" factor in the VDW constant, eps3
1100 eps3rt=1.0D0-alf1*om1+alf2*om2-alf12*om12
1101 C Calculate whole angle-dependent part of epsilon and contributions
1102 C to its derivatives
1105 C----------------------------------------------------------------------------
1107 implicit real*8 (a-h,o-z)
1108 include 'DIMENSIONS'
1109 include 'DIMENSIONS.ZSCOPT'
1110 include 'COMMON.CHAIN'
1111 include 'COMMON.DERIV'
1112 include 'COMMON.CALC'
1113 double precision dcosom1(3),dcosom2(3)
1114 eom1=eps2der*eps2rt_om1-2.0D0*alf1*eps3der+sigder*sigsq_om1
1115 eom2=eps2der*eps2rt_om2+2.0D0*alf2*eps3der+sigder*sigsq_om2
1116 eom12=evdwij*eps1_om12+eps2der*eps2rt_om12
1117 & -2.0D0*alf12*eps3der+sigder*sigsq_om12
1119 dcosom1(k)=rij*(dc_norm(k,nres+i)-om1*erij(k))
1120 dcosom2(k)=rij*(dc_norm(k,nres+j)-om2*erij(k))
1123 gg(k)=gg(k)+eom1*dcosom1(k)+eom2*dcosom2(k)
1126 gvdwx(k,i)=gvdwx(k,i)-gg(k)
1127 & +(eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,nres+i))
1128 & +eom1*(erij(k)-om1*dc_norm(k,nres+i)))*dsci_inv
1129 gvdwx(k,j)=gvdwx(k,j)+gg(k)
1130 & +(eom12*(dc_norm(k,nres+i)-om12*dc_norm(k,nres+j))
1131 & +eom2*(erij(k)-om2*dc_norm(k,nres+j)))*dscj_inv
1134 C Calculate the components of the gradient in DC and X
1138 gvdwc(l,k)=gvdwc(l,k)+gg(l)
1143 c------------------------------------------------------------------------------
1144 subroutine vec_and_deriv
1145 implicit real*8 (a-h,o-z)
1146 include 'DIMENSIONS'
1147 include 'DIMENSIONS.ZSCOPT'
1148 include 'COMMON.IOUNITS'
1149 include 'COMMON.GEO'
1150 include 'COMMON.VAR'
1151 include 'COMMON.LOCAL'
1152 include 'COMMON.CHAIN'
1153 include 'COMMON.VECTORS'
1154 include 'COMMON.DERIV'
1155 include 'COMMON.INTERACT'
1156 dimension uyder(3,3,2),uzder(3,3,2),vbld_inv_temp(2)
1157 C Compute the local reference systems. For reference system (i), the
1158 C X-axis points from CA(i) to CA(i+1), the Y axis is in the
1159 C CA(i)-CA(i+1)-CA(i+2) plane, and the Z axis is perpendicular to this plane.
1161 c if (i.eq.nres-1 .or. itel(i+1).eq.0) then
1162 if (i.eq.nres-1) then
1163 C Case of the last full residue
1164 C Compute the Z-axis
1165 call vecpr(dc_norm(1,i),dc_norm(1,i-1),uz(1,i))
1166 costh=dcos(pi-theta(nres))
1167 fac=1.0d0/dsqrt(1.0d0-costh*costh)
1172 C Compute the derivatives of uz
1174 uzder(2,1,1)=-dc_norm(3,i-1)
1175 uzder(3,1,1)= dc_norm(2,i-1)
1176 uzder(1,2,1)= dc_norm(3,i-1)
1178 uzder(3,2,1)=-dc_norm(1,i-1)
1179 uzder(1,3,1)=-dc_norm(2,i-1)
1180 uzder(2,3,1)= dc_norm(1,i-1)
1183 uzder(2,1,2)= dc_norm(3,i)
1184 uzder(3,1,2)=-dc_norm(2,i)
1185 uzder(1,2,2)=-dc_norm(3,i)
1187 uzder(3,2,2)= dc_norm(1,i)
1188 uzder(1,3,2)= dc_norm(2,i)
1189 uzder(2,3,2)=-dc_norm(1,i)
1192 C Compute the Y-axis
1195 uy(k,i)=fac*(dc_norm(k,i-1)-costh*dc_norm(k,i))
1198 C Compute the derivatives of uy
1201 uyder(k,j,1)=2*dc_norm(k,i-1)*dc_norm(j,i)
1202 & -dc_norm(k,i)*dc_norm(j,i-1)
1203 uyder(k,j,2)=-dc_norm(j,i)*dc_norm(k,i)
1205 uyder(j,j,1)=uyder(j,j,1)-costh
1206 uyder(j,j,2)=1.0d0+uyder(j,j,2)
1211 uygrad(l,k,j,i)=uyder(l,k,j)
1212 uzgrad(l,k,j,i)=uzder(l,k,j)
1216 call unormderiv(uy(1,i),uyder(1,1,1),facy,uygrad(1,1,1,i))
1217 call unormderiv(uy(1,i),uyder(1,1,2),facy,uygrad(1,1,2,i))
1218 call unormderiv(uz(1,i),uzder(1,1,1),fac,uzgrad(1,1,1,i))
1219 call unormderiv(uz(1,i),uzder(1,1,2),fac,uzgrad(1,1,2,i))
1223 C Compute the Z-axis
1224 call vecpr(dc_norm(1,i),dc_norm(1,i+1),uz(1,i))
1225 costh=dcos(pi-theta(i+2))
1226 fac=1.0d0/dsqrt(1.0d0-costh*costh)
1231 C Compute the derivatives of uz
1233 uzder(2,1,1)=-dc_norm(3,i+1)
1234 uzder(3,1,1)= dc_norm(2,i+1)
1235 uzder(1,2,1)= dc_norm(3,i+1)
1237 uzder(3,2,1)=-dc_norm(1,i+1)
1238 uzder(1,3,1)=-dc_norm(2,i+1)
1239 uzder(2,3,1)= dc_norm(1,i+1)
1242 uzder(2,1,2)= dc_norm(3,i)
1243 uzder(3,1,2)=-dc_norm(2,i)
1244 uzder(1,2,2)=-dc_norm(3,i)
1246 uzder(3,2,2)= dc_norm(1,i)
1247 uzder(1,3,2)= dc_norm(2,i)
1248 uzder(2,3,2)=-dc_norm(1,i)
1251 C Compute the Y-axis
1254 uy(k,i)=facy*(dc_norm(k,i+1)-costh*dc_norm(k,i))
1257 C Compute the derivatives of uy
1260 uyder(k,j,1)=2*dc_norm(k,i+1)*dc_norm(j,i)
1261 & -dc_norm(k,i)*dc_norm(j,i+1)
1262 uyder(k,j,2)=-dc_norm(j,i)*dc_norm(k,i)
1264 uyder(j,j,1)=uyder(j,j,1)-costh
1265 uyder(j,j,2)=1.0d0+uyder(j,j,2)
1270 uygrad(l,k,j,i)=uyder(l,k,j)
1271 uzgrad(l,k,j,i)=uzder(l,k,j)
1275 call unormderiv(uy(1,i),uyder(1,1,1),facy,uygrad(1,1,1,i))
1276 call unormderiv(uy(1,i),uyder(1,1,2),facy,uygrad(1,1,2,i))
1277 call unormderiv(uz(1,i),uzder(1,1,1),fac,uzgrad(1,1,1,i))
1278 call unormderiv(uz(1,i),uzder(1,1,2),fac,uzgrad(1,1,2,i))
1284 vbld_inv_temp(1)=vbld_inv(i+1)
1285 if (i.lt.nres-1) then
1286 vbld_inv_temp(2)=vbld_inv(i+2)
1288 vbld_inv_temp(2)=vbld_inv(i)
1293 uygrad(l,k,j,i)=vbld_inv_temp(j)*uygrad(l,k,j,i)
1294 uzgrad(l,k,j,i)=vbld_inv_temp(j)*uzgrad(l,k,j,i)
1302 C-----------------------------------------------------------------------------
1303 subroutine vec_and_deriv_test
1304 implicit real*8 (a-h,o-z)
1305 include 'DIMENSIONS'
1306 include 'DIMENSIONS.ZSCOPT'
1307 include 'COMMON.IOUNITS'
1308 include 'COMMON.GEO'
1309 include 'COMMON.VAR'
1310 include 'COMMON.LOCAL'
1311 include 'COMMON.CHAIN'
1312 include 'COMMON.VECTORS'
1313 dimension uyder(3,3,2),uzder(3,3,2)
1314 C Compute the local reference systems. For reference system (i), the
1315 C X-axis points from CA(i) to CA(i+1), the Y axis is in the
1316 C CA(i)-CA(i+1)-CA(i+2) plane, and the Z axis is perpendicular to this plane.
1318 if (i.eq.nres-1) then
1319 C Case of the last full residue
1320 C Compute the Z-axis
1321 call vecpr(dc_norm(1,i),dc_norm(1,i-1),uz(1,i))
1322 costh=dcos(pi-theta(nres))
1323 fac=1.0d0/dsqrt(1.0d0-costh*costh)
1324 c write (iout,*) 'fac',fac,
1325 c & 1.0d0/dsqrt(scalar(uz(1,i),uz(1,i)))
1326 fac=1.0d0/dsqrt(scalar(uz(1,i),uz(1,i)))
1330 C Compute the derivatives of uz
1332 uzder(2,1,1)=-dc_norm(3,i-1)
1333 uzder(3,1,1)= dc_norm(2,i-1)
1334 uzder(1,2,1)= dc_norm(3,i-1)
1336 uzder(3,2,1)=-dc_norm(1,i-1)
1337 uzder(1,3,1)=-dc_norm(2,i-1)
1338 uzder(2,3,1)= dc_norm(1,i-1)
1341 uzder(2,1,2)= dc_norm(3,i)
1342 uzder(3,1,2)=-dc_norm(2,i)
1343 uzder(1,2,2)=-dc_norm(3,i)
1345 uzder(3,2,2)= dc_norm(1,i)
1346 uzder(1,3,2)= dc_norm(2,i)
1347 uzder(2,3,2)=-dc_norm(1,i)
1349 C Compute the Y-axis
1351 uy(k,i)=fac*(dc_norm(k,i-1)-costh*dc_norm(k,i))
1354 facy=1.0d0/dsqrt(scalar(dc_norm(1,i),dc_norm(1,i))*
1355 & (scalar(dc_norm(1,i-1),dc_norm(1,i-1))**2-
1356 & scalar(dc_norm(1,i),dc_norm(1,i-1))**2))
1358 c uy(k,i)=facy*(dc_norm(k,i+1)-costh*dc_norm(k,i))
1361 & dc_norm(k,i-1)*scalar(dc_norm(1,i),dc_norm(1,i))
1362 & -scalar(dc_norm(1,i),dc_norm(1,i-1))*dc_norm(k,i)
1365 c write (iout,*) 'facy',facy,
1366 c & 1.0d0/dsqrt(scalar(uy(1,i),uy(1,i)))
1367 facy=1.0d0/dsqrt(scalar(uy(1,i),uy(1,i)))
1369 uy(k,i)=facy*uy(k,i)
1371 C Compute the derivatives of uy
1374 uyder(k,j,1)=2*dc_norm(k,i-1)*dc_norm(j,i)
1375 & -dc_norm(k,i)*dc_norm(j,i-1)
1376 uyder(k,j,2)=-dc_norm(j,i)*dc_norm(k,i)
1378 c uyder(j,j,1)=uyder(j,j,1)-costh
1379 c uyder(j,j,2)=1.0d0+uyder(j,j,2)
1380 uyder(j,j,1)=uyder(j,j,1)
1381 & -scalar(dc_norm(1,i),dc_norm(1,i-1))
1382 uyder(j,j,2)=scalar(dc_norm(1,i),dc_norm(1,i))
1388 uygrad(l,k,j,i)=uyder(l,k,j)
1389 uzgrad(l,k,j,i)=uzder(l,k,j)
1393 call unormderiv(uy(1,i),uyder(1,1,1),facy,uygrad(1,1,1,i))
1394 call unormderiv(uy(1,i),uyder(1,1,2),facy,uygrad(1,1,2,i))
1395 call unormderiv(uz(1,i),uzder(1,1,1),fac,uzgrad(1,1,1,i))
1396 call unormderiv(uz(1,i),uzder(1,1,2),fac,uzgrad(1,1,2,i))
1399 C Compute the Z-axis
1400 call vecpr(dc_norm(1,i),dc_norm(1,i+1),uz(1,i))
1401 costh=dcos(pi-theta(i+2))
1402 fac=1.0d0/dsqrt(1.0d0-costh*costh)
1403 fac=1.0d0/dsqrt(scalar(uz(1,i),uz(1,i)))
1407 C Compute the derivatives of uz
1409 uzder(2,1,1)=-dc_norm(3,i+1)
1410 uzder(3,1,1)= dc_norm(2,i+1)
1411 uzder(1,2,1)= dc_norm(3,i+1)
1413 uzder(3,2,1)=-dc_norm(1,i+1)
1414 uzder(1,3,1)=-dc_norm(2,i+1)
1415 uzder(2,3,1)= dc_norm(1,i+1)
1418 uzder(2,1,2)= dc_norm(3,i)
1419 uzder(3,1,2)=-dc_norm(2,i)
1420 uzder(1,2,2)=-dc_norm(3,i)
1422 uzder(3,2,2)= dc_norm(1,i)
1423 uzder(1,3,2)= dc_norm(2,i)
1424 uzder(2,3,2)=-dc_norm(1,i)
1426 C Compute the Y-axis
1428 facy=1.0d0/dsqrt(scalar(dc_norm(1,i),dc_norm(1,i))*
1429 & (scalar(dc_norm(1,i+1),dc_norm(1,i+1))**2-
1430 & scalar(dc_norm(1,i),dc_norm(1,i+1))**2))
1432 c uy(k,i)=facy*(dc_norm(k,i+1)-costh*dc_norm(k,i))
1435 & dc_norm(k,i+1)*scalar(dc_norm(1,i),dc_norm(1,i))
1436 & -scalar(dc_norm(1,i),dc_norm(1,i+1))*dc_norm(k,i)
1439 c write (iout,*) 'facy',facy,
1440 c & 1.0d0/dsqrt(scalar(uy(1,i),uy(1,i)))
1441 facy=1.0d0/dsqrt(scalar(uy(1,i),uy(1,i)))
1443 uy(k,i)=facy*uy(k,i)
1445 C Compute the derivatives of uy
1448 uyder(k,j,1)=2*dc_norm(k,i+1)*dc_norm(j,i)
1449 & -dc_norm(k,i)*dc_norm(j,i+1)
1450 uyder(k,j,2)=-dc_norm(j,i)*dc_norm(k,i)
1452 c uyder(j,j,1)=uyder(j,j,1)-costh
1453 c uyder(j,j,2)=1.0d0+uyder(j,j,2)
1454 uyder(j,j,1)=uyder(j,j,1)
1455 & -scalar(dc_norm(1,i),dc_norm(1,i+1))
1456 uyder(j,j,2)=scalar(dc_norm(1,i),dc_norm(1,i))
1462 uygrad(l,k,j,i)=uyder(l,k,j)
1463 uzgrad(l,k,j,i)=uzder(l,k,j)
1467 call unormderiv(uy(1,i),uyder(1,1,1),facy,uygrad(1,1,1,i))
1468 call unormderiv(uy(1,i),uyder(1,1,2),facy,uygrad(1,1,2,i))
1469 call unormderiv(uz(1,i),uzder(1,1,1),fac,uzgrad(1,1,1,i))
1470 call unormderiv(uz(1,i),uzder(1,1,2),fac,uzgrad(1,1,2,i))
1477 uygrad(l,k,j,i)=vblinv*uygrad(l,k,j,i)
1478 uzgrad(l,k,j,i)=vblinv*uzgrad(l,k,j,i)
1485 C-----------------------------------------------------------------------------
1486 subroutine check_vecgrad
1487 implicit real*8 (a-h,o-z)
1488 include 'DIMENSIONS'
1489 include 'DIMENSIONS.ZSCOPT'
1490 include 'COMMON.IOUNITS'
1491 include 'COMMON.GEO'
1492 include 'COMMON.VAR'
1493 include 'COMMON.LOCAL'
1494 include 'COMMON.CHAIN'
1495 include 'COMMON.VECTORS'
1496 dimension uygradt(3,3,2,maxres),uzgradt(3,3,2,maxres)
1497 dimension uyt(3,maxres),uzt(3,maxres)
1498 dimension uygradn(3,3,2),uzgradn(3,3,2),erij(3)
1499 double precision delta /1.0d-7/
1502 crc write(iout,'(2i5,2(3f10.5,5x))') i,1,dc_norm(:,i)
1503 crc write(iout,'(2i5,2(3f10.5,5x))') i,2,uy(:,i)
1504 crc write(iout,'(2i5,2(3f10.5,5x)/)')i,3,uz(:,i)
1505 cd write(iout,'(2i5,2(3f10.5,5x))') i,1,
1506 cd & (dc_norm(if90,i),if90=1,3)
1507 cd write(iout,'(2i5,2(3f10.5,5x))') i,2,(uy(if90,i),if90=1,3)
1508 cd write(iout,'(2i5,2(3f10.5,5x)/)')i,3,(uz(if90,i),if90=1,3)
1509 cd write(iout,'(a)')
1515 uygradt(l,k,j,i)=uygrad(l,k,j,i)
1516 uzgradt(l,k,j,i)=uzgrad(l,k,j,i)
1529 cd write (iout,*) 'i=',i
1531 erij(k)=dc_norm(k,i)
1535 dc_norm(k,i)=erij(k)
1537 dc_norm(j,i)=dc_norm(j,i)+delta
1538 c fac=dsqrt(scalar(dc_norm(1,i),dc_norm(1,i)))
1540 c dc_norm(k,i)=dc_norm(k,i)/fac
1542 c write (iout,*) (dc_norm(k,i),k=1,3)
1543 c write (iout,*) (erij(k),k=1,3)
1546 uygradn(k,j,1)=(uy(k,i)-uyt(k,i))/delta
1547 uygradn(k,j,2)=(uy(k,i-1)-uyt(k,i-1))/delta
1548 uzgradn(k,j,1)=(uz(k,i)-uzt(k,i))/delta
1549 uzgradn(k,j,2)=(uz(k,i-1)-uzt(k,i-1))/delta
1551 c write (iout,'(i5,3f8.5,3x,3f8.5,5x,3f8.5,3x,3f8.5)')
1552 c & j,(uzgradt(k,j,1,i),k=1,3),(uzgradn(k,j,1),k=1,3),
1553 c & (uzgradt(k,j,2,i-1),k=1,3),(uzgradn(k,j,2),k=1,3)
1556 dc_norm(k,i)=erij(k)
1559 cd write (iout,'(i5,3f8.5,3x,3f8.5,5x,3f8.5,3x,3f8.5)')
1560 cd & k,(uygradt(k,l,1,i),l=1,3),(uygradn(k,l,1),l=1,3),
1561 cd & (uygradt(k,l,2,i-1),l=1,3),(uygradn(k,l,2),l=1,3)
1562 cd write (iout,'(i5,3f8.5,3x,3f8.5,5x,3f8.5,3x,3f8.5)')
1563 cd & k,(uzgradt(k,l,1,i),l=1,3),(uzgradn(k,l,1),l=1,3),
1564 cd & (uzgradt(k,l,2,i-1),l=1,3),(uzgradn(k,l,2),l=1,3)
1565 cd write (iout,'(a)')
1570 C--------------------------------------------------------------------------
1571 subroutine set_matrices
1572 implicit real*8 (a-h,o-z)
1573 include 'DIMENSIONS'
1574 include 'DIMENSIONS.ZSCOPT'
1575 include 'COMMON.IOUNITS'
1576 include 'COMMON.GEO'
1577 include 'COMMON.VAR'
1578 include 'COMMON.LOCAL'
1579 include 'COMMON.CHAIN'
1580 include 'COMMON.DERIV'
1581 include 'COMMON.INTERACT'
1582 include 'COMMON.CONTACTS'
1583 include 'COMMON.TORSION'
1584 include 'COMMON.VECTORS'
1585 include 'COMMON.FFIELD'
1586 double precision auxvec(2),auxmat(2,2)
1588 C Compute the virtual-bond-torsional-angle dependent quantities needed
1589 C to calculate the el-loc multibody terms of various order.
1593 if (i.gt. nnt+2 .and. i.lt.nct+2) then
1594 iti = itortyp(itype(i-2))
1598 c if (i.gt. iatel_s+1 .and. i.lt.iatel_e+4) then
1599 if (i.gt. nnt+1 .and. i.lt.nct+1) then
1600 iti1 = itortyp(itype(i-1))
1605 b1(1,i-2)=bnew1(1,1,iti)*dsin(theta(i-1)/2.0d0)
1606 & +bnew1(2,1,iti)*dsin(theta(i-1))
1607 & +bnew1(3,1,iti)*dcos(theta(i-1)/2.0d0)
1608 b2(1,i-2)=bnew2(1,1,iti)*dsin(theta(i-1)/2.0d0)
1609 & +bnew2(2,1,iti)*dsin(theta(i-1))
1610 & +bnew2(3,1,iti)*dcos(theta(i-1)/2.0d0)
1611 c & +bnew2(3,1,iti)*dsin(alpha(i))*cos(beta(i))
1612 c &*(cos(theta(i)/2.0)
1613 b1(2,i-2)=bnew1(1,2,iti)
1614 b2(2,i-2)=bnew2(1,2,iti)
1615 EE(1,1,i-2)=eenew(1,iti)*dcos(theta(i-1))
1616 EE(1,2,i-2)=eeold(1,2,iti)
1617 EE(2,1,i-2)=eeold(2,1,iti)
1618 EE(2,2,i-2)=eeold(2,2,iti)
1619 b1tilde(1,i-2)=b1(1,i-2)
1620 b1tilde(2,i-2)=-b1(2,i-2)
1621 c write (iout,*) 'i=',i-2,gtb1(2,i-2),gtb1(1,i-2)
1622 c write (iout,*) 'theta=', theta(i-1)
1626 if (i.gt. nnt+2 .and. i.lt.nct+2) then
1627 iti = itortyp(itype(i-2))
1631 if (i.gt. nnt+1 .and. i.lt.nct+1) then
1632 iti1 = itortyp(itype(i-1))
1636 if (i .lt. nres+1) then
1673 if (i .gt. 3 .and. i .lt. nres+1) then
1674 obrot_der(1,i-2)=-sin1
1675 obrot_der(2,i-2)= cos1
1676 Ugder(1,1,i-2)= sin1
1677 Ugder(1,2,i-2)=-cos1
1678 Ugder(2,1,i-2)=-cos1
1679 Ugder(2,2,i-2)=-sin1
1682 obrot2_der(1,i-2)=-dwasin2
1683 obrot2_der(2,i-2)= dwacos2
1684 Ug2der(1,1,i-2)= dwasin2
1685 Ug2der(1,2,i-2)=-dwacos2
1686 Ug2der(2,1,i-2)=-dwacos2
1687 Ug2der(2,2,i-2)=-dwasin2
1689 obrot_der(1,i-2)=0.0d0
1690 obrot_der(2,i-2)=0.0d0
1691 Ugder(1,1,i-2)=0.0d0
1692 Ugder(1,2,i-2)=0.0d0
1693 Ugder(2,1,i-2)=0.0d0
1694 Ugder(2,2,i-2)=0.0d0
1695 obrot2_der(1,i-2)=0.0d0
1696 obrot2_der(2,i-2)=0.0d0
1697 Ug2der(1,1,i-2)=0.0d0
1698 Ug2der(1,2,i-2)=0.0d0
1699 Ug2der(2,1,i-2)=0.0d0
1700 Ug2der(2,2,i-2)=0.0d0
1702 if (i.gt. nnt+2 .and. i.lt.nct+2) then
1703 if (itype(i-2).le.ntyp) then
1704 iti = itortyp(itype(i-2))
1711 if (i.gt. nnt+1 .and. i.lt.nct+1) then
1712 if (itype(i-1).le.ntyp) then
1713 iti1 = itortyp(itype(i-1))
1720 cd write (iout,*) '*******i',i,' iti1',iti
1721 cd write (iout,*) 'b1',b1(:,iti)
1722 cd write (iout,*) 'b2',b2(:,iti)
1723 cd write (iout,*) 'Ug',Ug(:,:,i-2)
1724 c print *,"itilde1 i iti iti1",i,iti,iti1
1725 if (i .gt. iatel_s+2) then
1726 call matvec2(Ug(1,1,i-2),b2(1,i-2),Ub2(1,i-2))
1727 call matmat2(EE(1,1,i-2),Ug(1,1,i-2),EUg(1,1,i-2))
1728 call matmat2(CC(1,1,iti),Ug(1,1,i-2),CUg(1,1,i-2))
1729 call matmat2(DD(1,1,iti),Ug(1,1,i-2),DUg(1,1,i-2))
1730 call matmat2(Dtilde(1,1,iti),Ug2(1,1,i-2),DtUg2(1,1,i-2))
1731 call matvec2(Ctilde(1,1,iti1),obrot(1,i-2),Ctobr(1,i-2))
1732 call matvec2(Dtilde(1,1,iti),obrot2(1,i-2),Dtobr2(1,i-2))
1742 DtUg2(l,k,i-2)=0.0d0
1746 c print *,"itilde2 i iti iti1",i,iti,iti1
1747 call matvec2(Ugder(1,1,i-2),b2(1,i-2),Ub2der(1,i-2))
1748 call matmat2(EE(1,1,i),Ugder(1,1,i-2),EUgder(1,1,i-2))
1749 call matmat2(CC(1,1,iti1),Ugder(1,1,i-2),CUgder(1,1,i-2))
1750 call matmat2(DD(1,1,iti),Ugder(1,1,i-2),DUgder(1,1,i-2))
1751 call matmat2(Dtilde(1,1,iti),Ug2der(1,1,i-2),DtUg2der(1,1,i-2))
1752 call matvec2(Ctilde(1,1,iti1),obrot_der(1,i-2),Ctobrder(1,i-2))
1753 call matvec2(Dtilde(1,1,iti),obrot2_der(1,i-2),Dtobr2der(1,i-2))
1754 c print *,"itilde3 i iti iti1",i,iti,iti1
1756 muder(k,i-2)=Ub2der(k,i-2)
1758 if (i.gt. nnt+1 .and. i.lt.nct+1) then
1759 if (itype(i-1).le.ntyp) then
1760 iti1 = itortyp(itype(i-1))
1768 mu(k,i-2)=Ub2(k,i-2)+b1(k,i-1)
1771 write (iout,'(2hmu,i3,3f8.1,12f10.5)') i-2,rad2deg*theta(i-1),
1772 & rad2deg*theta(i),rad2deg*phi(i),mu(1,i-2),mu(2,i-2),
1773 & -b2(1,i-2),b2(2,i-2),b1(1,i-2),b1(2,i-2),
1774 & dsqrt(b2(1,i-1)**2+b2(2,i-1)**2)
1775 & +dsqrt(b1(1,i-1)**2+b1(2,i-1)**2),
1776 & ((ee(l,k,i-2),l=1,2),k=1,2),eenew(1,itortyp(iti))
1778 C Vectors and matrices dependent on a single virtual-bond dihedral.
1779 call matvec2(DD(1,1,iti),b1tilde(1,i+1),auxvec(1))
1780 call matvec2(Ug2(1,1,i-2),auxvec(1),Ug2Db1t(1,i-2))
1781 call matvec2(Ug2der(1,1,i-2),auxvec(1),Ug2Db1tder(1,i-2))
1782 call matvec2(CC(1,1,iti1),Ub2(1,i-2),CUgb2(1,i-2))
1783 call matvec2(CC(1,1,iti1),Ub2der(1,i-2),CUgb2der(1,i-2))
1784 call matmat2(EUg(1,1,i-2),CC(1,1,iti1),EUgC(1,1,i-2))
1785 call matmat2(EUgder(1,1,i-2),CC(1,1,iti1),EUgCder(1,1,i-2))
1786 call matmat2(EUg(1,1,i-2),DD(1,1,iti1),EUgD(1,1,i-2))
1787 call matmat2(EUgder(1,1,i-2),DD(1,1,iti1),EUgDder(1,1,i-2))
1788 cd write (iout,*) 'i',i,' mu ',(mu(k,i-2),k=1,2),
1789 cd & ' mu1',(b1(k,i-2),k=1,2),' mu2',(Ub2(k,i-2),k=1,2)
1791 C Matrices dependent on two consecutive virtual-bond dihedrals.
1792 C The order of matrices is from left to right.
1794 call matmat2(DtUg2(1,1,i-1),EUg(1,1,i),DtUg2EUg(1,1,i))
1795 call matmat2(DtUg2der(1,1,i-1),EUg(1,1,i),DtUg2EUgder(1,1,1,i))
1796 call matmat2(DtUg2(1,1,i-1),EUgder(1,1,i),DtUg2EUgder(1,1,2,i))
1797 call transpose2(DtUg2(1,1,i-1),auxmat(1,1))
1798 call matmat2(auxmat(1,1),EUg(1,1,i),Ug2DtEUg(1,1,i))
1799 call matmat2(auxmat(1,1),EUgder(1,1,i),Ug2DtEUgder(1,1,2,i))
1800 call transpose2(DtUg2der(1,1,i-1),auxmat(1,1))
1801 call matmat2(auxmat(1,1),EUg(1,1,i),Ug2DtEUgder(1,1,1,i))
1804 cd iti = itortyp(itype(i))
1807 cd write (iout,'(2f10.5,5x,2f10.5,5x,2f10.5)')
1808 cd & (EE(j,k,i),k=1,2),(Ug(j,k,i),k=1,2),(EUg(j,k,i),k=1,2)
1813 C--------------------------------------------------------------------------
1814 subroutine eelec(ees,evdw1,eel_loc,eello_turn3,eello_turn4)
1816 C This subroutine calculates the average interaction energy and its gradient
1817 C in the virtual-bond vectors between non-adjacent peptide groups, based on
1818 C the potential described in Liwo et al., Protein Sci., 1993, 2, 1715.
1819 C The potential depends both on the distance of peptide-group centers and on
1820 C the orientation of the CA-CA virtual bonds.
1822 implicit real*8 (a-h,o-z)
1823 include 'DIMENSIONS'
1824 include 'DIMENSIONS.ZSCOPT'
1825 include 'COMMON.CONTROL'
1826 include 'COMMON.IOUNITS'
1827 include 'COMMON.GEO'
1828 include 'COMMON.VAR'
1829 include 'COMMON.LOCAL'
1830 include 'COMMON.CHAIN'
1831 include 'COMMON.DERIV'
1832 include 'COMMON.INTERACT'
1833 include 'COMMON.CONTACTS'
1834 include 'COMMON.TORSION'
1835 include 'COMMON.VECTORS'
1836 include 'COMMON.FFIELD'
1837 dimension ggg(3),gggp(3),gggm(3),erij(3),dcosb(3),dcosg(3),
1838 & erder(3,3),uryg(3,3),urzg(3,3),vryg(3,3),vrzg(3,3)
1839 double precision acipa(2,2),agg(3,4),aggi(3,4),aggi1(3,4),
1840 & aggj(3,4),aggj1(3,4),a_temp(2,2),muij(4)
1841 common /locel/ a_temp,agg,aggi,aggi1,aggj,aggj1,j1
1842 c 4/26/02 - AL scaling factor for 1,4 repulsive VDW interactions
1843 double precision scal_el /0.5d0/
1845 C 13-go grudnia roku pamietnego...
1846 double precision unmat(3,3) /1.0d0,0.0d0,0.0d0,
1847 & 0.0d0,1.0d0,0.0d0,
1848 & 0.0d0,0.0d0,1.0d0/
1849 cd write(iout,*) 'In EELEC'
1851 cd write(iout,*) 'Type',i
1852 cd write(iout,*) 'B1',B1(:,i)
1853 cd write(iout,*) 'B2',B2(:,i)
1854 cd write(iout,*) 'CC',CC(:,:,i)
1855 cd write(iout,*) 'DD',DD(:,:,i)
1856 cd write(iout,*) 'EE',EE(:,:,i)
1858 cd call check_vecgrad
1860 if (icheckgrad.eq.1) then
1862 fac=1.0d0/dsqrt(scalar(dc(1,i),dc(1,i)))
1864 dc_norm(k,i)=dc(k,i)*fac
1866 c write (iout,*) 'i',i,' fac',fac
1869 if (wel_loc.gt.0.0d0 .or. wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0
1870 & .or. wcorr6.gt.0.0d0 .or. wturn3.gt.0.0d0 .or.
1871 & wturn4.gt.0.0d0 .or. wturn6.gt.0.0d0) then
1872 cd if (wel_loc.gt.0.0d0) then
1873 if (icheckgrad.eq.1) then
1874 call vec_and_deriv_test
1881 cd write (iout,*) 'i=',i
1883 cd write (iout,'(i5,2f10.5)') k,uy(k,i),uz(k,i)
1886 cd write (iout,'(f10.5,2x,3f10.5,2x,3f10.5)')
1887 cd & uz(k,i),(uzgrad(k,l,1,i),l=1,3),(uzgrad(k,l,2,i),l=1,3)
1900 cd print '(a)','Enter EELEC'
1901 cd write (iout,*) 'iatel_s=',iatel_s,' iatel_e=',iatel_e
1903 gel_loc_loc(i)=0.0d0
1906 do i=iatel_s,iatel_e
1907 if (itype(i).eq.ntyp1 .or. itype(i+1).eq.ntyp1) cycle
1908 if (itel(i).eq.0) goto 1215
1912 dx_normi=dc_norm(1,i)
1913 dy_normi=dc_norm(2,i)
1914 dz_normi=dc_norm(3,i)
1915 xmedi=c(1,i)+0.5d0*dxi
1916 ymedi=c(2,i)+0.5d0*dyi
1917 zmedi=c(3,i)+0.5d0*dzi
1919 c write (iout,*) 'i',i,' ielstart',ielstart(i),' ielend',ielend(i)
1920 do j=ielstart(i),ielend(i)
1921 if (itype(j).eq.ntyp1 .or. itype(j+1).eq.ntyp1) cycle
1922 if (itel(j).eq.0) goto 1216
1926 if (j.eq.i+2 .and. itelj.eq.2) iteli=2
1927 aaa=app(iteli,itelj)
1928 bbb=bpp(iteli,itelj)
1929 C Diagnostics only!!!
1935 ael6i=ael6(iteli,itelj)
1936 ael3i=ael3(iteli,itelj)
1940 dx_normj=dc_norm(1,j)
1941 dy_normj=dc_norm(2,j)
1942 dz_normj=dc_norm(3,j)
1943 xj=c(1,j)+0.5D0*dxj-xmedi
1944 yj=c(2,j)+0.5D0*dyj-ymedi
1945 zj=c(3,j)+0.5D0*dzj-zmedi
1946 rij=xj*xj+yj*yj+zj*zj
1952 cosa=dx_normi*dx_normj+dy_normi*dy_normj+dz_normi*dz_normj
1953 cosb=(xj*dx_normi+yj*dy_normi+zj*dz_normi)*rmij
1954 cosg=(xj*dx_normj+yj*dy_normj+zj*dz_normj)*rmij
1955 fac=cosa-3.0D0*cosb*cosg
1957 c 4/26/02 - AL scaling down 1,4 repulsive VDW interactions
1958 if (j.eq.i+2) ev1=scal_el*ev1
1963 el1=fac3*(4.0D0+fac*fac-3.0D0*(cosb*cosb+cosg*cosg))
1966 c write (iout,*) "i",i,iteli," j",j,itelj," eesij",eesij
1967 C 12/26/95 - for the evaluation of multi-body H-bonding interactions
1968 ees0ij=4.0D0+fac*fac-3.0D0*(cosb*cosb+cosg*cosg)
1971 c write (iout,'(a6,2i5,0pf7.3,2i5,2e11.3)')
1972 c &'evdw1',i,j,evdwij
1973 c &,iteli,itelj,aaa,evdw1
1975 c write (iout,'(a6,2i5,0pf7.3)') 'ees',i,j,eesij
1976 c write(iout,'(2(2i3,2x),7(1pd12.4)/2(3(1pd12.4),5x)/)')
1977 c & iteli,i,itelj,j,aaa,bbb,ael6i,ael3i,
1978 c & 1.0D0/dsqrt(rrmij),evdwij,eesij,
1979 c & xmedi,ymedi,zmedi,xj,yj,zj
1981 C Calculate contributions to the Cartesian gradient.
1984 facvdw=-6*rrmij*(ev1+evdwij)
1985 facel=-3*rrmij*(el1+eesij)
1992 * Radial derivatives. First process both termini of the fragment (i,j)
1999 gelc(k,i)=gelc(k,i)+ghalf
2000 gelc(k,j)=gelc(k,j)+ghalf
2003 * Loop over residues i+1 thru j-1.
2007 gelc(l,k)=gelc(l,k)+ggg(l)
2015 gvdwpp(k,i)=gvdwpp(k,i)+ghalf
2016 gvdwpp(k,j)=gvdwpp(k,j)+ghalf
2019 * Loop over residues i+1 thru j-1.
2023 gvdwpp(l,k)=gvdwpp(l,k)+ggg(l)
2030 fac=-3*rrmij*(facvdw+facvdw+facel)
2036 * Radial derivatives. First process both termini of the fragment (i,j)
2043 gelc(k,i)=gelc(k,i)+ghalf
2044 gelc(k,j)=gelc(k,j)+ghalf
2047 * Loop over residues i+1 thru j-1.
2051 gelc(l,k)=gelc(l,k)+ggg(l)
2058 ecosa=2.0D0*fac3*fac1+fac4
2061 ecosb=(fac3*(fac1*cosg+cosb)+cosg*fac4)
2062 ecosg=(fac3*(fac1*cosb+cosg)+cosb*fac4)
2064 dcosb(k)=rmij*(dc_norm(k,i)-erij(k)*cosb)
2065 dcosg(k)=rmij*(dc_norm(k,j)-erij(k)*cosg)
2067 cd print '(2i3,2(3(1pd14.5),3x))',i,j,(dcosb(k),k=1,3),
2068 cd & (dcosg(k),k=1,3)
2070 ggg(k)=ecosb*dcosb(k)+ecosg*dcosg(k)
2074 gelc(k,i)=gelc(k,i)+ghalf
2075 & +(ecosa*(dc_norm(k,j)-cosa*dc_norm(k,i))
2076 & + ecosb*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1)
2077 gelc(k,j)=gelc(k,j)+ghalf
2078 & +(ecosa*(dc_norm(k,i)-cosa*dc_norm(k,j))
2079 & + ecosg*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1)
2083 gelc(l,k)=gelc(l,k)+ggg(l)
2088 IF (wel_loc.gt.0.0d0 .or. wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0
2089 & .or. wcorr6.gt.0.0d0 .or. wturn3.gt.0.0d0
2090 & .or. wturn4.gt.0.0d0 .or. wturn6.gt.0.0d0) THEN
2092 C 9/25/99 Mixed third-order local-electrostatic terms. The local-interaction
2093 C energy of a peptide unit is assumed in the form of a second-order
2094 C Fourier series in the angles lambda1 and lambda2 (see Nishikawa et al.
2095 C Macromolecules, 1974, 7, 797-806 for definition). This correlation terms
2096 C are computed for EVERY pair of non-contiguous peptide groups.
2098 if (j.lt.nres-1) then
2109 muij(kkk)=mu(k,i)*mu(l,j)
2112 cd write (iout,*) 'EELEC: i',i,' j',j
2113 cd write (iout,*) 'j',j,' j1',j1,' j2',j2
2114 cd write(iout,*) 'muij',muij
2115 ury=scalar(uy(1,i),erij)
2116 urz=scalar(uz(1,i),erij)
2117 vry=scalar(uy(1,j),erij)
2118 vrz=scalar(uz(1,j),erij)
2119 a22=scalar(uy(1,i),uy(1,j))-3*ury*vry
2120 a23=scalar(uy(1,i),uz(1,j))-3*ury*vrz
2121 a32=scalar(uz(1,i),uy(1,j))-3*urz*vry
2122 a33=scalar(uz(1,i),uz(1,j))-3*urz*vrz
2123 C For diagnostics only
2128 fac=dsqrt(-ael6i)*r3ij
2129 cd write (2,*) 'fac=',fac
2130 C For diagnostics only
2136 cd write (iout,'(4i5,4f10.5)')
2137 cd & i,itortyp(itype(i)),j,itortyp(itype(j)),a22,a23,a32,a33
2138 cd write (iout,'(6f10.5)') (muij(k),k=1,4),fac,eel_loc_ij
2139 cd write (iout,'(2(3f10.5,5x)/2(3f10.5,5x))') (uy(k,i),k=1,3),
2140 cd & (uz(k,i),k=1,3),(uy(k,j),k=1,3),(uz(k,j),k=1,3)
2141 cd write (iout,'(4f10.5)')
2142 cd & scalar(uy(1,i),uy(1,j)),scalar(uy(1,i),uz(1,j)),
2143 cd & scalar(uz(1,i),uy(1,j)),scalar(uz(1,i),uz(1,j))
2144 cd write (iout,'(4f10.5)') ury,urz,vry,vrz
2145 cd write (iout,'(2i3,9f10.5/)') i,j,
2146 cd & fac22,a22,fac23,a23,fac32,a32,fac33,a33,eel_loc_ij
2148 C Derivatives of the elements of A in virtual-bond vectors
2149 call unormderiv(erij(1),unmat(1,1),rmij,erder(1,1))
2156 uryg(k,1)=scalar(erder(1,k),uy(1,i))
2157 uryg(k,2)=scalar(uygrad(1,k,1,i),erij(1))
2158 uryg(k,3)=scalar(uygrad(1,k,2,i),erij(1))
2159 urzg(k,1)=scalar(erder(1,k),uz(1,i))
2160 urzg(k,2)=scalar(uzgrad(1,k,1,i),erij(1))
2161 urzg(k,3)=scalar(uzgrad(1,k,2,i),erij(1))
2162 vryg(k,1)=scalar(erder(1,k),uy(1,j))
2163 vryg(k,2)=scalar(uygrad(1,k,1,j),erij(1))
2164 vryg(k,3)=scalar(uygrad(1,k,2,j),erij(1))
2165 vrzg(k,1)=scalar(erder(1,k),uz(1,j))
2166 vrzg(k,2)=scalar(uzgrad(1,k,1,j),erij(1))
2167 vrzg(k,3)=scalar(uzgrad(1,k,2,j),erij(1))
2177 C Compute radial contributions to the gradient
2199 C Add the contributions coming from er
2202 agg(k,1)=agg(k,1)+fac3*(uryg(k,1)*vry+vryg(k,1)*ury)
2203 agg(k,2)=agg(k,2)+fac3*(uryg(k,1)*vrz+vrzg(k,1)*ury)
2204 agg(k,3)=agg(k,3)+fac3*(urzg(k,1)*vry+vryg(k,1)*urz)
2205 agg(k,4)=agg(k,4)+fac3*(urzg(k,1)*vrz+vrzg(k,1)*urz)
2208 C Derivatives in DC(i)
2209 ghalf1=0.5d0*agg(k,1)
2210 ghalf2=0.5d0*agg(k,2)
2211 ghalf3=0.5d0*agg(k,3)
2212 ghalf4=0.5d0*agg(k,4)
2213 aggi(k,1)=fac*(scalar(uygrad(1,k,1,i),uy(1,j))
2214 & -3.0d0*uryg(k,2)*vry)+ghalf1
2215 aggi(k,2)=fac*(scalar(uygrad(1,k,1,i),uz(1,j))
2216 & -3.0d0*uryg(k,2)*vrz)+ghalf2
2217 aggi(k,3)=fac*(scalar(uzgrad(1,k,1,i),uy(1,j))
2218 & -3.0d0*urzg(k,2)*vry)+ghalf3
2219 aggi(k,4)=fac*(scalar(uzgrad(1,k,1,i),uz(1,j))
2220 & -3.0d0*urzg(k,2)*vrz)+ghalf4
2221 C Derivatives in DC(i+1)
2222 aggi1(k,1)=fac*(scalar(uygrad(1,k,2,i),uy(1,j))
2223 & -3.0d0*uryg(k,3)*vry)+agg(k,1)
2224 aggi1(k,2)=fac*(scalar(uygrad(1,k,2,i),uz(1,j))
2225 & -3.0d0*uryg(k,3)*vrz)+agg(k,2)
2226 aggi1(k,3)=fac*(scalar(uzgrad(1,k,2,i),uy(1,j))
2227 & -3.0d0*urzg(k,3)*vry)+agg(k,3)
2228 aggi1(k,4)=fac*(scalar(uzgrad(1,k,2,i),uz(1,j))
2229 & -3.0d0*urzg(k,3)*vrz)+agg(k,4)
2230 C Derivatives in DC(j)
2231 aggj(k,1)=fac*(scalar(uygrad(1,k,1,j),uy(1,i))
2232 & -3.0d0*vryg(k,2)*ury)+ghalf1
2233 aggj(k,2)=fac*(scalar(uzgrad(1,k,1,j),uy(1,i))
2234 & -3.0d0*vrzg(k,2)*ury)+ghalf2
2235 aggj(k,3)=fac*(scalar(uygrad(1,k,1,j),uz(1,i))
2236 & -3.0d0*vryg(k,2)*urz)+ghalf3
2237 aggj(k,4)=fac*(scalar(uzgrad(1,k,1,j),uz(1,i))
2238 & -3.0d0*vrzg(k,2)*urz)+ghalf4
2239 C Derivatives in DC(j+1) or DC(nres-1)
2240 aggj1(k,1)=fac*(scalar(uygrad(1,k,2,j),uy(1,i))
2241 & -3.0d0*vryg(k,3)*ury)
2242 aggj1(k,2)=fac*(scalar(uzgrad(1,k,2,j),uy(1,i))
2243 & -3.0d0*vrzg(k,3)*ury)
2244 aggj1(k,3)=fac*(scalar(uygrad(1,k,2,j),uz(1,i))
2245 & -3.0d0*vryg(k,3)*urz)
2246 aggj1(k,4)=fac*(scalar(uzgrad(1,k,2,j),uz(1,i))
2247 & -3.0d0*vrzg(k,3)*urz)
2252 C Derivatives in DC(i+1)
2253 cd aggi1(k,1)=agg(k,1)
2254 cd aggi1(k,2)=agg(k,2)
2255 cd aggi1(k,3)=agg(k,3)
2256 cd aggi1(k,4)=agg(k,4)
2257 C Derivatives in DC(j)
2262 C Derivatives in DC(j+1)
2267 if (j.eq.nres-1 .and. i.lt.j-2) then
2269 aggj1(k,l)=aggj1(k,l)+agg(k,l)
2270 cd aggj1(k,l)=agg(k,l)
2276 C Check the loc-el terms by numerical integration
2286 aggi(k,l)=-aggi(k,l)
2287 aggi1(k,l)=-aggi1(k,l)
2288 aggj(k,l)=-aggj(k,l)
2289 aggj1(k,l)=-aggj1(k,l)
2292 if (j.lt.nres-1) then
2298 aggi(k,l)=-aggi(k,l)
2299 aggi1(k,l)=-aggi1(k,l)
2300 aggj(k,l)=-aggj(k,l)
2301 aggj1(k,l)=-aggj1(k,l)
2312 aggi(k,l)=-aggi(k,l)
2313 aggi1(k,l)=-aggi1(k,l)
2314 aggj(k,l)=-aggj(k,l)
2315 aggj1(k,l)=-aggj1(k,l)
2321 IF (wel_loc.gt.0.0d0) THEN
2322 C Contribution to the local-electrostatic energy coming from the i-j pair
2323 eel_loc_ij=a22*muij(1)+a23*muij(2)+a32*muij(3)
2325 c write (iout,*) 'i',i,' j',j,' eel_loc_ij',eel_loc_ij
2326 c write (iout,'(a6,2i5,0pf7.3)')
2327 c & 'eelloc',i,j,eel_loc_ij
2328 c write (iout,*) a22,muij(1),a23,muij(2),a32,muij(3)
2329 eel_loc=eel_loc+eel_loc_ij
2330 C Partial derivatives in virtual-bond dihedral angles gamma
2333 & gel_loc_loc(i-1)=gel_loc_loc(i-1)+
2334 & a22*muder(1,i)*mu(1,j)+a23*muder(1,i)*mu(2,j)
2335 & +a32*muder(2,i)*mu(1,j)+a33*muder(2,i)*mu(2,j)
2336 gel_loc_loc(j-1)=gel_loc_loc(j-1)+
2337 & a22*mu(1,i)*muder(1,j)+a23*mu(1,i)*muder(2,j)
2338 & +a32*mu(2,i)*muder(1,j)+a33*mu(2,i)*muder(2,j)
2339 cd call checkint3(i,j,mu1,mu2,a22,a23,a32,a33,acipa,eel_loc_ij)
2340 cd write(iout,*) 'agg ',agg
2341 cd write(iout,*) 'aggi ',aggi
2342 cd write(iout,*) 'aggi1',aggi1
2343 cd write(iout,*) 'aggj ',aggj
2344 cd write(iout,*) 'aggj1',aggj1
2346 C Derivatives of eello in DC(i+1) thru DC(j-1) or DC(nres-2)
2348 ggg(l)=agg(l,1)*muij(1)+
2349 & agg(l,2)*muij(2)+agg(l,3)*muij(3)+agg(l,4)*muij(4)
2353 gel_loc(l,k)=gel_loc(l,k)+ggg(l)
2356 C Remaining derivatives of eello
2358 gel_loc(l,i)=gel_loc(l,i)+aggi(l,1)*muij(1)+
2359 & aggi(l,2)*muij(2)+aggi(l,3)*muij(3)+aggi(l,4)*muij(4)
2360 gel_loc(l,i+1)=gel_loc(l,i+1)+aggi1(l,1)*muij(1)+
2361 & aggi1(l,2)*muij(2)+aggi1(l,3)*muij(3)+aggi1(l,4)*muij(4)
2362 gel_loc(l,j)=gel_loc(l,j)+aggj(l,1)*muij(1)+
2363 & aggj(l,2)*muij(2)+aggj(l,3)*muij(3)+aggj(l,4)*muij(4)
2364 gel_loc(l,j1)=gel_loc(l,j1)+aggj1(l,1)*muij(1)+
2365 & aggj1(l,2)*muij(2)+aggj1(l,3)*muij(3)+aggj1(l,4)*muij(4)
2369 if (wturn3.gt.0.0d0 .or. wturn4.gt.0.0d0) then
2370 C Contributions from turns
2375 call eturn34(i,j,eello_turn3,eello_turn4)
2377 C Change 12/26/95 to calculate four-body contributions to H-bonding energy
2378 if (j.gt.i+1 .and. num_conti.le.maxconts) then
2380 C Calculate the contact function. The ith column of the array JCONT will
2381 C contain the numbers of atoms that make contacts with the atom I (of numbers
2382 C greater than I). The arrays FACONT and GACONT will contain the values of
2383 C the contact function and its derivative.
2384 c r0ij=1.02D0*rpp(iteli,itelj)
2385 c r0ij=1.11D0*rpp(iteli,itelj)
2386 r0ij=2.20D0*rpp(iteli,itelj)
2387 c r0ij=1.55D0*rpp(iteli,itelj)
2388 call gcont(rij,r0ij,1.0D0,0.2d0*r0ij,fcont,fprimcont)
2389 if (fcont.gt.0.0D0) then
2390 num_conti=num_conti+1
2391 if (num_conti.gt.maxconts) then
2392 write (iout,*) 'WARNING - max. # of contacts exceeded;',
2393 & ' will skip next contacts for this conf.'
2395 jcont_hb(num_conti,i)=j
2396 IF (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or.
2397 & wcorr6.gt.0.0d0 .or. wturn6.gt.0.0d0) THEN
2398 C 9/30/99 (AL) - store components necessary to evaluate higher-order loc-el
2400 d_cont(num_conti,i)=rij
2401 cd write (2,'(3e15.5)') rij,r0ij+0.2d0*r0ij,rij
2402 C --- Electrostatic-interaction matrix ---
2403 a_chuj(1,1,num_conti,i)=a22
2404 a_chuj(1,2,num_conti,i)=a23
2405 a_chuj(2,1,num_conti,i)=a32
2406 a_chuj(2,2,num_conti,i)=a33
2407 C --- Gradient of rij
2409 grij_hb_cont(kkk,num_conti,i)=erij(kkk)
2412 c a_chuj(1,1,num_conti,i)=-0.61d0
2413 c a_chuj(1,2,num_conti,i)= 0.4d0
2414 c a_chuj(2,1,num_conti,i)= 0.65d0
2415 c a_chuj(2,2,num_conti,i)= 0.50d0
2416 c else if (i.eq.2) then
2417 c a_chuj(1,1,num_conti,i)= 0.0d0
2418 c a_chuj(1,2,num_conti,i)= 0.0d0
2419 c a_chuj(2,1,num_conti,i)= 0.0d0
2420 c a_chuj(2,2,num_conti,i)= 0.0d0
2422 C --- and its gradients
2423 cd write (iout,*) 'i',i,' j',j
2425 cd write (iout,*) 'iii 1 kkk',kkk
2426 cd write (iout,*) agg(kkk,:)
2429 cd write (iout,*) 'iii 2 kkk',kkk
2430 cd write (iout,*) aggi(kkk,:)
2433 cd write (iout,*) 'iii 3 kkk',kkk
2434 cd write (iout,*) aggi1(kkk,:)
2437 cd write (iout,*) 'iii 4 kkk',kkk
2438 cd write (iout,*) aggj(kkk,:)
2441 cd write (iout,*) 'iii 5 kkk',kkk
2442 cd write (iout,*) aggj1(kkk,:)
2449 a_chuj_der(k,l,m,1,num_conti,i)=agg(m,kkll)
2450 a_chuj_der(k,l,m,2,num_conti,i)=aggi(m,kkll)
2451 a_chuj_der(k,l,m,3,num_conti,i)=aggi1(m,kkll)
2452 a_chuj_der(k,l,m,4,num_conti,i)=aggj(m,kkll)
2453 a_chuj_der(k,l,m,5,num_conti,i)=aggj1(m,kkll)
2455 c a_chuj_der(k,l,m,mm,num_conti,i)=0.0d0
2461 IF (wcorr4.eq.0.0d0 .and. wcorr.gt.0.0d0) THEN
2462 C Calculate contact energies
2464 wij=cosa-3.0D0*cosb*cosg
2467 c fac3=dsqrt(-ael6i)/r0ij**3
2468 fac3=dsqrt(-ael6i)*r3ij
2469 ees0pij=dsqrt(4.0D0+cosa4+wij*wij-3.0D0*cosbg1*cosbg1)
2470 ees0mij=dsqrt(4.0D0-cosa4+wij*wij-3.0D0*cosbg2*cosbg2)
2472 ees0p(num_conti,i)=0.5D0*fac3*(ees0pij+ees0mij)
2473 ees0m(num_conti,i)=0.5D0*fac3*(ees0pij-ees0mij)
2474 C Diagnostics. Comment out or remove after debugging!
2475 c ees0p(num_conti,i)=0.5D0*fac3*ees0pij
2476 c ees0m(num_conti,i)=0.5D0*fac3*ees0mij
2477 c ees0m(num_conti,i)=0.0D0
2479 c write (iout,*) 'i=',i,' j=',j,' rij=',rij,' r0ij=',r0ij,
2480 c & ' ees0ij=',ees0p(num_conti,i),ees0m(num_conti,i),' fcont=',fcont
2481 facont_hb(num_conti,i)=fcont
2483 C Angular derivatives of the contact function
2484 ees0pij1=fac3/ees0pij
2485 ees0mij1=fac3/ees0mij
2486 fac3p=-3.0D0*fac3*rrmij
2487 ees0pijp=0.5D0*fac3p*(ees0pij+ees0mij)
2488 ees0mijp=0.5D0*fac3p*(ees0pij-ees0mij)
2490 ecosa1= ees0pij1*( 1.0D0+0.5D0*wij)
2491 ecosb1=-1.5D0*ees0pij1*(wij*cosg+cosbg1)
2492 ecosg1=-1.5D0*ees0pij1*(wij*cosb+cosbg1)
2493 ecosa2= ees0mij1*(-1.0D0+0.5D0*wij)
2494 ecosb2=-1.5D0*ees0mij1*(wij*cosg+cosbg2)
2495 ecosg2=-1.5D0*ees0mij1*(wij*cosb-cosbg2)
2496 ecosap=ecosa1+ecosa2
2497 ecosbp=ecosb1+ecosb2
2498 ecosgp=ecosg1+ecosg2
2499 ecosam=ecosa1-ecosa2
2500 ecosbm=ecosb1-ecosb2
2501 ecosgm=ecosg1-ecosg2
2510 fprimcont=fprimcont/rij
2511 cd facont_hb(num_conti,i)=1.0D0
2512 C Following line is for diagnostics.
2515 dcosb(k)=rmij*(dc_norm(k,i)-erij(k)*cosb)
2516 dcosg(k)=rmij*(dc_norm(k,j)-erij(k)*cosg)
2519 gggp(k)=ecosbp*dcosb(k)+ecosgp*dcosg(k)
2520 gggm(k)=ecosbm*dcosb(k)+ecosgm*dcosg(k)
2522 gggp(1)=gggp(1)+ees0pijp*xj
2523 gggp(2)=gggp(2)+ees0pijp*yj
2524 gggp(3)=gggp(3)+ees0pijp*zj
2525 gggm(1)=gggm(1)+ees0mijp*xj
2526 gggm(2)=gggm(2)+ees0mijp*yj
2527 gggm(3)=gggm(3)+ees0mijp*zj
2528 C Derivatives due to the contact function
2529 gacont_hbr(1,num_conti,i)=fprimcont*xj
2530 gacont_hbr(2,num_conti,i)=fprimcont*yj
2531 gacont_hbr(3,num_conti,i)=fprimcont*zj
2533 ghalfp=0.5D0*gggp(k)
2534 ghalfm=0.5D0*gggm(k)
2535 gacontp_hb1(k,num_conti,i)=ghalfp
2536 & +(ecosap*(dc_norm(k,j)-cosa*dc_norm(k,i))
2537 & + ecosbp*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1)
2538 gacontp_hb2(k,num_conti,i)=ghalfp
2539 & +(ecosap*(dc_norm(k,i)-cosa*dc_norm(k,j))
2540 & + ecosgp*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1)
2541 gacontp_hb3(k,num_conti,i)=gggp(k)
2542 gacontm_hb1(k,num_conti,i)=ghalfm
2543 & +(ecosam*(dc_norm(k,j)-cosa*dc_norm(k,i))
2544 & + ecosbm*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1)
2545 gacontm_hb2(k,num_conti,i)=ghalfm
2546 & +(ecosam*(dc_norm(k,i)-cosa*dc_norm(k,j))
2547 & + ecosgm*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1)
2548 gacontm_hb3(k,num_conti,i)=gggm(k)
2551 C Diagnostics. Comment out or remove after debugging!
2553 cdiag gacontp_hb1(k,num_conti,i)=0.0D0
2554 cdiag gacontp_hb2(k,num_conti,i)=0.0D0
2555 cdiag gacontp_hb3(k,num_conti,i)=0.0D0
2556 cdiag gacontm_hb1(k,num_conti,i)=0.0D0
2557 cdiag gacontm_hb2(k,num_conti,i)=0.0D0
2558 cdiag gacontm_hb3(k,num_conti,i)=0.0D0
2561 endif ! num_conti.le.maxconts
2566 num_cont_hb(i)=num_conti
2570 cd write (iout,'(i3,3f10.5,5x,3f10.5)')
2571 cd & i,(gel_loc(k,i),k=1,3),gel_loc_loc(i)
2573 c 12/7/99 Adam eello_turn3 will be considered as a separate energy term
2574 ccc eel_loc=eel_loc+eello_turn3
2577 C-----------------------------------------------------------------------------
2578 subroutine eturn34(i,j,eello_turn3,eello_turn4)
2579 C Third- and fourth-order contributions from turns
2580 implicit real*8 (a-h,o-z)
2581 include 'DIMENSIONS'
2582 include 'DIMENSIONS.ZSCOPT'
2583 include 'COMMON.IOUNITS'
2584 include 'COMMON.GEO'
2585 include 'COMMON.VAR'
2586 include 'COMMON.LOCAL'
2587 include 'COMMON.CHAIN'
2588 include 'COMMON.DERIV'
2589 include 'COMMON.INTERACT'
2590 include 'COMMON.CONTACTS'
2591 include 'COMMON.TORSION'
2592 include 'COMMON.VECTORS'
2593 include 'COMMON.FFIELD'
2595 double precision auxmat(2,2),auxmat1(2,2),auxmat2(2,2),pizda(2,2),
2596 & e1t(2,2),e2t(2,2),e3t(2,2),e1tder(2,2),e2tder(2,2),e3tder(2,2),
2597 & e1a(2,2),ae3(2,2),ae3e2(2,2),auxvec(2),auxvec1(2)
2598 double precision agg(3,4),aggi(3,4),aggi1(3,4),
2599 & aggj(3,4),aggj1(3,4),a_temp(2,2)
2600 common /locel/ a_temp,agg,aggi,aggi1,aggj,aggj1,j1,j2
2602 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
2604 C Third-order contributions
2611 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
2612 cd call checkint_turn3(i,a_temp,eello_turn3_num)
2613 call matmat2(EUg(1,1,i+1),EUg(1,1,i+2),auxmat(1,1))
2614 call transpose2(auxmat(1,1),auxmat1(1,1))
2615 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
2616 eello_turn3=eello_turn3+0.5d0*(pizda(1,1)+pizda(2,2))
2617 cd write (2,*) 'i,',i,' j',j,'eello_turn3',
2618 cd & 0.5d0*(pizda(1,1)+pizda(2,2)),
2619 cd & ' eello_turn3_num',4*eello_turn3_num
2621 C Derivatives in gamma(i)
2622 call matmat2(EUgder(1,1,i+1),EUg(1,1,i+2),auxmat2(1,1))
2623 call transpose2(auxmat2(1,1),pizda(1,1))
2624 call matmat2(a_temp(1,1),pizda(1,1),pizda(1,1))
2625 gel_loc_turn3(i)=gel_loc_turn3(i)+0.5d0*(pizda(1,1)+pizda(2,2))
2626 C Derivatives in gamma(i+1)
2627 call matmat2(EUg(1,1,i+1),EUgder(1,1,i+2),auxmat2(1,1))
2628 call transpose2(auxmat2(1,1),pizda(1,1))
2629 call matmat2(a_temp(1,1),pizda(1,1),pizda(1,1))
2630 gel_loc_turn3(i+1)=gel_loc_turn3(i+1)
2631 & +0.5d0*(pizda(1,1)+pizda(2,2))
2632 C Cartesian derivatives
2634 a_temp(1,1)=aggi(l,1)
2635 a_temp(1,2)=aggi(l,2)
2636 a_temp(2,1)=aggi(l,3)
2637 a_temp(2,2)=aggi(l,4)
2638 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
2639 gcorr3_turn(l,i)=gcorr3_turn(l,i)
2640 & +0.5d0*(pizda(1,1)+pizda(2,2))
2641 a_temp(1,1)=aggi1(l,1)
2642 a_temp(1,2)=aggi1(l,2)
2643 a_temp(2,1)=aggi1(l,3)
2644 a_temp(2,2)=aggi1(l,4)
2645 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
2646 gcorr3_turn(l,i+1)=gcorr3_turn(l,i+1)
2647 & +0.5d0*(pizda(1,1)+pizda(2,2))
2648 a_temp(1,1)=aggj(l,1)
2649 a_temp(1,2)=aggj(l,2)
2650 a_temp(2,1)=aggj(l,3)
2651 a_temp(2,2)=aggj(l,4)
2652 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
2653 gcorr3_turn(l,j)=gcorr3_turn(l,j)
2654 & +0.5d0*(pizda(1,1)+pizda(2,2))
2655 a_temp(1,1)=aggj1(l,1)
2656 a_temp(1,2)=aggj1(l,2)
2657 a_temp(2,1)=aggj1(l,3)
2658 a_temp(2,2)=aggj1(l,4)
2659 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
2660 gcorr3_turn(l,j1)=gcorr3_turn(l,j1)
2661 & +0.5d0*(pizda(1,1)+pizda(2,2))
2664 else if (j.eq.i+3 .and. itype(i+2).ne.ntyp1) then
2665 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
2667 C Fourth-order contributions
2675 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
2676 cd call checkint_turn4(i,a_temp,eello_turn4_num)
2677 iti1=itortyp(itype(i+1))
2678 iti2=itortyp(itype(i+2))
2679 iti3=itortyp(itype(i+3))
2680 call transpose2(EUg(1,1,i+1),e1t(1,1))
2681 call transpose2(Eug(1,1,i+2),e2t(1,1))
2682 call transpose2(Eug(1,1,i+3),e3t(1,1))
2683 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
2684 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
2685 s1=scalar2(b1(1,i+2),auxvec(1))
2686 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
2687 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
2688 s2=scalar2(b1(1,i+1),auxvec(1))
2689 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
2690 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
2691 s3=0.5d0*(pizda(1,1)+pizda(2,2))
2692 eello_turn4=eello_turn4-(s1+s2+s3)
2693 cd write (2,*) 'i,',i,' j',j,'eello_turn4',-(s1+s2+s3),
2694 cd & ' eello_turn4_num',8*eello_turn4_num
2695 C Derivatives in gamma(i)
2697 call transpose2(EUgder(1,1,i+1),e1tder(1,1))
2698 call matmat2(e1tder(1,1),a_temp(1,1),auxmat(1,1))
2699 call matvec2(auxmat(1,1),Ub2(1,i+3),auxvec(1))
2700 s1=scalar2(b1(1,i+2),auxvec(1))
2701 call matmat2(ae3e2(1,1),e1tder(1,1),pizda(1,1))
2702 s3=0.5d0*(pizda(1,1)+pizda(2,2))
2703 gel_loc_turn4(i)=gel_loc_turn4(i)-(s1+s3)
2704 C Derivatives in gamma(i+1)
2705 call transpose2(EUgder(1,1,i+2),e2tder(1,1))
2706 call matvec2(ae3(1,1),Ub2der(1,i+2),auxvec(1))
2707 s2=scalar2(b1(1,i+1),auxvec(1))
2708 call matmat2(ae3(1,1),e2tder(1,1),auxmat(1,1))
2709 call matmat2(auxmat(1,1),e1t(1,1),pizda(1,1))
2710 s3=0.5d0*(pizda(1,1)+pizda(2,2))
2711 gel_loc_turn4(i+1)=gel_loc_turn4(i+1)-(s2+s3)
2712 C Derivatives in gamma(i+2)
2713 call transpose2(EUgder(1,1,i+3),e3tder(1,1))
2714 call matvec2(e1a(1,1),Ub2der(1,i+3),auxvec(1))
2715 s1=scalar2(b1(1,i+2),auxvec(1))
2716 call matmat2(a_temp(1,1),e3tder(1,1),auxmat(1,1))
2717 call matvec2(auxmat(1,1),Ub2(1,i+2),auxvec(1))
2718 s2=scalar2(b1(1,i+1),auxvec(1))
2719 call matmat2(auxmat(1,1),e2t(1,1),auxmat(1,1))
2720 call matmat2(auxmat(1,1),e1t(1,1),pizda(1,1))
2721 s3=0.5d0*(pizda(1,1)+pizda(2,2))
2722 gel_loc_turn4(i+2)=gel_loc_turn4(i+2)-(s1+s2+s3)
2723 C Cartesian derivatives
2724 C Derivatives of this turn contributions in DC(i+2)
2725 if (j.lt.nres-1) then
2727 a_temp(1,1)=agg(l,1)
2728 a_temp(1,2)=agg(l,2)
2729 a_temp(2,1)=agg(l,3)
2730 a_temp(2,2)=agg(l,4)
2731 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
2732 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
2733 s1=scalar2(b1(1,i+2),auxvec(1))
2734 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
2735 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
2736 s2=scalar2(b1(1,i+1),auxvec(1))
2737 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
2738 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
2739 s3=0.5d0*(pizda(1,1)+pizda(2,2))
2741 gcorr4_turn(l,i+2)=gcorr4_turn(l,i+2)-(s1+s2+s3)
2744 C Remaining derivatives of this turn contribution
2746 a_temp(1,1)=aggi(l,1)
2747 a_temp(1,2)=aggi(l,2)
2748 a_temp(2,1)=aggi(l,3)
2749 a_temp(2,2)=aggi(l,4)
2750 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
2751 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
2752 s1=scalar2(b1(1,i+2),auxvec(1))
2753 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
2754 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
2755 s2=scalar2(b1(1,i+1),auxvec(1))
2756 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
2757 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
2758 s3=0.5d0*(pizda(1,1)+pizda(2,2))
2759 gcorr4_turn(l,i)=gcorr4_turn(l,i)-(s1+s2+s3)
2760 a_temp(1,1)=aggi1(l,1)
2761 a_temp(1,2)=aggi1(l,2)
2762 a_temp(2,1)=aggi1(l,3)
2763 a_temp(2,2)=aggi1(l,4)
2764 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
2765 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
2766 s1=scalar2(b1(1,i+2),auxvec(1))
2767 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
2768 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
2769 s2=scalar2(b1(1,i+1),auxvec(1))
2770 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
2771 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
2772 s3=0.5d0*(pizda(1,1)+pizda(2,2))
2773 gcorr4_turn(l,i+1)=gcorr4_turn(l,i+1)-(s1+s2+s3)
2774 a_temp(1,1)=aggj(l,1)
2775 a_temp(1,2)=aggj(l,2)
2776 a_temp(2,1)=aggj(l,3)
2777 a_temp(2,2)=aggj(l,4)
2778 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
2779 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
2780 s1=scalar2(b1(1,i+2),auxvec(1))
2781 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
2782 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
2783 s2=scalar2(b1(1,i+1),auxvec(1))
2784 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
2785 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
2786 s3=0.5d0*(pizda(1,1)+pizda(2,2))
2787 gcorr4_turn(l,j)=gcorr4_turn(l,j)-(s1+s2+s3)
2788 a_temp(1,1)=aggj1(l,1)
2789 a_temp(1,2)=aggj1(l,2)
2790 a_temp(2,1)=aggj1(l,3)
2791 a_temp(2,2)=aggj1(l,4)
2792 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
2793 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
2794 s1=scalar2(b1(1,i+2),auxvec(1))
2795 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
2796 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
2797 s2=scalar2(b1(1,i+1),auxvec(1))
2798 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
2799 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
2800 s3=0.5d0*(pizda(1,1)+pizda(2,2))
2801 gcorr4_turn(l,j1)=gcorr4_turn(l,j1)-(s1+s2+s3)
2807 C-----------------------------------------------------------------------------
2808 subroutine vecpr(u,v,w)
2809 implicit real*8(a-h,o-z)
2810 dimension u(3),v(3),w(3)
2811 w(1)=u(2)*v(3)-u(3)*v(2)
2812 w(2)=-u(1)*v(3)+u(3)*v(1)
2813 w(3)=u(1)*v(2)-u(2)*v(1)
2816 C-----------------------------------------------------------------------------
2817 subroutine unormderiv(u,ugrad,unorm,ungrad)
2818 C This subroutine computes the derivatives of a normalized vector u, given
2819 C the derivatives computed without normalization conditions, ugrad. Returns
2822 double precision u(3),ugrad(3,3),unorm,ungrad(3,3)
2823 double precision vec(3)
2824 double precision scalar
2826 c write (2,*) 'ugrad',ugrad
2829 vec(i)=scalar(ugrad(1,i),u(1))
2831 c write (2,*) 'vec',vec
2834 ungrad(j,i)=(ugrad(j,i)-u(j)*vec(i))*unorm
2837 c write (2,*) 'ungrad',ungrad
2840 C-----------------------------------------------------------------------------
2841 subroutine escp(evdw2,evdw2_14)
2843 C This subroutine calculates the excluded-volume interaction energy between
2844 C peptide-group centers and side chains and its gradient in virtual-bond and
2845 C side-chain vectors.
2847 implicit real*8 (a-h,o-z)
2848 include 'DIMENSIONS'
2849 include 'DIMENSIONS.ZSCOPT'
2850 include 'COMMON.GEO'
2851 include 'COMMON.VAR'
2852 include 'COMMON.LOCAL'
2853 include 'COMMON.CHAIN'
2854 include 'COMMON.DERIV'
2855 include 'COMMON.INTERACT'
2856 include 'COMMON.FFIELD'
2857 include 'COMMON.IOUNITS'
2861 cd print '(a)','Enter ESCP'
2862 c write (iout,*) 'iatscp_s=',iatscp_s,' iatscp_e=',iatscp_e,
2863 c & ' scal14',scal14
2864 do i=iatscp_s,iatscp_e
2865 if (itype(i).eq.ntyp1 .or. itype(i+1).eq.ntyp1) cycle
2867 c write (iout,*) "i",i," iteli",iteli," nscp_gr",nscp_gr(i),
2868 c & " iscp",(iscpstart(i,j),iscpend(i,j),j=1,nscp_gr(i))
2869 if (iteli.eq.0) goto 1225
2870 xi=0.5D0*(c(1,i)+c(1,i+1))
2871 yi=0.5D0*(c(2,i)+c(2,i+1))
2872 zi=0.5D0*(c(3,i)+c(3,i+1))
2874 do iint=1,nscp_gr(i)
2876 do j=iscpstart(i,iint),iscpend(i,iint)
2877 itypj=iabs(itype(j))
2878 if (itypj.eq.ntyp1) cycle
2879 C Uncomment following three lines for SC-p interactions
2883 C Uncomment following three lines for Ca-p interactions
2887 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
2889 e1=fac*fac*aad(itypj,iteli)
2890 e2=fac*bad(itypj,iteli)
2891 if (iabs(j-i) .le. 2) then
2894 evdw2_14=evdw2_14+e1+e2
2897 c write (iout,'(a6,2i5,0pf7.3,2i3,3e11.3)')
2898 c & 'evdw2',i,j,evdwij,iteli,itypj,fac,aad(itypj,iteli),
2899 c & bad(itypj,iteli)
2903 C Calculate contributions to the gradient in the virtual-bond and SC vectors.
2905 fac=-(evdwij+e1)*rrij
2910 cd write (iout,*) 'j<i'
2911 C Uncomment following three lines for SC-p interactions
2913 c gradx_scp(k,j)=gradx_scp(k,j)+ggg(k)
2916 cd write (iout,*) 'j>i'
2919 C Uncomment following line for SC-p interactions
2920 c gradx_scp(k,j)=gradx_scp(k,j)-ggg(k)
2924 gvdwc_scp(k,i)=gvdwc_scp(k,i)-0.5D0*ggg(k)
2928 cd write (iout,*) 'i=',i,' j=',j,' kstart=',kstart,' kend=',kend
2929 cd write (iout,*) ggg(1),ggg(2),ggg(3)
2932 gvdwc_scp(l,k)=gvdwc_scp(l,k)-ggg(l)
2942 gvdwc_scp(j,i)=expon*gvdwc_scp(j,i)
2943 gradx_scp(j,i)=expon*gradx_scp(j,i)
2946 C******************************************************************************
2950 C To save time the factor EXPON has been extracted from ALL components
2951 C of GVDWC and GRADX. Remember to multiply them by this factor before further
2954 C******************************************************************************
2957 C--------------------------------------------------------------------------
2958 subroutine edis(ehpb)
2960 C Evaluate bridge-strain energy and its gradient in virtual-bond and SC vectors.
2962 implicit real*8 (a-h,o-z)
2963 include 'DIMENSIONS'
2964 include 'DIMENSIONS.ZSCOPT'
2965 include 'COMMON.SBRIDGE'
2966 include 'COMMON.CHAIN'
2967 include 'COMMON.DERIV'
2968 include 'COMMON.VAR'
2969 include 'COMMON.INTERACT'
2972 cd print *,'edis: nhpb=',nhpb,' fbr=',fbr
2973 cd print *,'link_start=',link_start,' link_end=',link_end
2974 if (link_end.eq.0) return
2975 do i=link_start,link_end
2976 C If ihpb(i) and jhpb(i) > NRES, this is a SC-SC distance, otherwise a
2977 C CA-CA distance used in regularization of structure.
2980 C iii and jjj point to the residues for which the distance is assigned.
2981 if (ii.gt.nres) then
2988 C 24/11/03 AL: SS bridges handled separately because of introducing a specific
2989 C distance and angle dependent SS bond potential.
2990 if (ii.gt.nres .and. iabs(itype(iii)).eq.1 .and.
2991 & iabs(itype(jjj)).eq.1) then
2992 call ssbond_ene(iii,jjj,eij)
2995 C Calculate the distance between the two points and its difference from the
2999 C Get the force constant corresponding to this distance.
3001 C Calculate the contribution to energy.
3002 ehpb=ehpb+waga*rdis*rdis
3004 C Evaluate gradient.
3007 cd print *,'i=',i,' ii=',ii,' jj=',jj,' dhpb=',dhpb(i),' dd=',dd,
3008 cd & ' waga=',waga,' fac=',fac
3010 ggg(j)=fac*(c(j,jj)-c(j,ii))
3012 cd print '(i3,3(1pe14.5))',i,(ggg(j),j=1,3)
3013 C If this is a SC-SC distance, we need to calculate the contributions to the
3014 C Cartesian gradient in the SC vectors (ghpbx).
3017 ghpbx(j,iii)=ghpbx(j,iii)-ggg(j)
3018 ghpbx(j,jjj)=ghpbx(j,jjj)+ggg(j)
3023 ghpbc(k,j)=ghpbc(k,j)+ggg(k)
3031 C--------------------------------------------------------------------------
3032 subroutine ssbond_ene(i,j,eij)
3034 C Calculate the distance and angle dependent SS-bond potential energy
3035 C using a free-energy function derived based on RHF/6-31G** ab initio
3036 C calculations of diethyl disulfide.
3038 C A. Liwo and U. Kozlowska, 11/24/03
3040 implicit real*8 (a-h,o-z)
3041 include 'DIMENSIONS'
3042 include 'DIMENSIONS.ZSCOPT'
3043 include 'COMMON.SBRIDGE'
3044 include 'COMMON.CHAIN'
3045 include 'COMMON.DERIV'
3046 include 'COMMON.LOCAL'
3047 include 'COMMON.INTERACT'
3048 include 'COMMON.VAR'
3049 include 'COMMON.IOUNITS'
3050 double precision erij(3),dcosom1(3),dcosom2(3),gg(3)
3051 itypi=iabs(itype(i))
3055 dxi=dc_norm(1,nres+i)
3056 dyi=dc_norm(2,nres+i)
3057 dzi=dc_norm(3,nres+i)
3058 dsci_inv=dsc_inv(itypi)
3059 itypj=iabs(itype(j))
3060 dscj_inv=dsc_inv(itypj)
3064 dxj=dc_norm(1,nres+j)
3065 dyj=dc_norm(2,nres+j)
3066 dzj=dc_norm(3,nres+j)
3067 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
3072 om1=dxi*erij(1)+dyi*erij(2)+dzi*erij(3)
3073 om2=dxj*erij(1)+dyj*erij(2)+dzj*erij(3)
3074 om12=dxi*dxj+dyi*dyj+dzi*dzj
3076 dcosom1(k)=rij*(dc_norm(k,nres+i)-om1*erij(k))
3077 dcosom2(k)=rij*(dc_norm(k,nres+j)-om2*erij(k))
3083 deltat12=om2-om1+2.0d0
3085 eij=akcm*deltad*deltad+akth*(deltat1*deltat1+deltat2*deltat2)
3086 & +akct*deltad*deltat12
3087 & +v1ss*cosphi+v2ss*cosphi*cosphi+v3ss*cosphi*cosphi*cosphi
3088 c write(iout,*) i,j,"rij",rij,"d0cm",d0cm," akcm",akcm," akth",akth,
3089 c & " akct",akct," deltad",deltad," deltat",deltat1,deltat2,
3090 c & " deltat12",deltat12," eij",eij
3091 ed=2*akcm*deltad+akct*deltat12
3093 pom2=v1ss+2*v2ss*cosphi+3*v3ss*cosphi*cosphi
3094 eom1=-2*akth*deltat1-pom1-om2*pom2
3095 eom2= 2*akth*deltat2+pom1-om1*pom2
3098 gg(k)=ed*erij(k)+eom1*dcosom1(k)+eom2*dcosom2(k)
3101 ghpbx(k,i)=ghpbx(k,i)-gg(k)
3102 & +(eom12*dc_norm(k,nres+j)+eom1*erij(k))*dsci_inv
3103 ghpbx(k,j)=ghpbx(k,j)+gg(k)
3104 & +(eom12*dc_norm(k,nres+i)+eom2*erij(k))*dscj_inv
3107 C Calculate the components of the gradient in DC and X
3111 ghpbc(l,k)=ghpbc(l,k)+gg(l)
3116 C--------------------------------------------------------------------------
3117 subroutine ebond(estr)
3119 c Evaluate the energy of stretching of the CA-CA and CA-SC virtual bonds
3121 implicit real*8 (a-h,o-z)
3122 include 'DIMENSIONS'
3123 include 'DIMENSIONS.ZSCOPT'
3124 include 'COMMON.LOCAL'
3125 include 'COMMON.GEO'
3126 include 'COMMON.INTERACT'
3127 include 'COMMON.DERIV'
3128 include 'COMMON.VAR'
3129 include 'COMMON.CHAIN'
3130 include 'COMMON.IOUNITS'
3131 include 'COMMON.NAMES'
3132 include 'COMMON.FFIELD'
3133 include 'COMMON.CONTROL'
3134 logical energy_dec /.false./
3135 double precision u(3),ud(3)
3138 c write (iout,*) "distchainmax",distchainmax
3140 if (itype(i-1).eq.ntyp1 .or. itype(i).eq.ntyp1) then
3141 estr1=estr1+gnmr1(vbld(i),-1.0d0,distchainmax)
3143 gradb(j,i-1)=gnmr1prim(vbld(i),-1.0d0,distchainmax)
3144 & *dc(j,i-1)/vbld(i)
3146 if (energy_dec) write(iout,*)
3147 & "estr1",i,vbld(i),distchainmax,
3148 & gnmr1(vbld(i),-1.0d0,distchainmax)
3150 diff = vbld(i)-vbldp0
3151 c write (iout,*) i,vbld(i),vbldp0,diff,AKP*diff*diff
3154 gradb(j,i-1)=AKP*diff*dc(j,i-1)/vbld(i)
3159 estr=0.5d0*AKP*estr+estr1
3161 c 09/18/07 AL: multimodal bond potential based on AM1 CA-SC PMF's included
3165 if (iti.ne.10 .and. iti.ne.ntyp1) then
3168 diff=vbld(i+nres)-vbldsc0(1,iti)
3169 c write (iout,*) i,iti,vbld(i+nres),vbldsc0(1,iti),diff,
3170 c & AKSC(1,iti),AKSC(1,iti)*diff*diff
3171 estr=estr+0.5d0*AKSC(1,iti)*diff*diff
3173 gradbx(j,i)=AKSC(1,iti)*diff*dc(j,i+nres)/vbld(i+nres)
3177 diff=vbld(i+nres)-vbldsc0(j,iti)
3178 ud(j)=aksc(j,iti)*diff
3179 u(j)=abond0(j,iti)+0.5d0*ud(j)*diff
3193 uprod2=uprod2*u(k)*u(k)
3197 usumsqder=usumsqder+ud(j)*uprod2
3199 c write (iout,*) i,iti,vbld(i+nres),(vbldsc0(j,iti),
3200 c & AKSC(j,iti),abond0(j,iti),u(j),j=1,nbi)
3201 estr=estr+uprod/usum
3203 gradbx(j,i)=usumsqder/(usum*usum)*dc(j,i+nres)/vbld(i+nres)
3211 C--------------------------------------------------------------------------
3212 subroutine ebend(etheta)
3214 C Evaluate the virtual-bond-angle energy given the virtual-bond dihedral
3215 C angles gamma and its derivatives in consecutive thetas and gammas.
3217 implicit real*8 (a-h,o-z)
3218 include 'DIMENSIONS'
3219 include 'DIMENSIONS.ZSCOPT'
3220 include 'COMMON.LOCAL'
3221 include 'COMMON.GEO'
3222 include 'COMMON.INTERACT'
3223 include 'COMMON.DERIV'
3224 include 'COMMON.VAR'
3225 include 'COMMON.CHAIN'
3226 include 'COMMON.IOUNITS'
3227 include 'COMMON.NAMES'
3228 include 'COMMON.FFIELD'
3229 common /calcthet/ term1,term2,termm,diffak,ratak,
3230 & ak,aktc,termpre,termexp,sigc,sig0i,time11,time12,sigcsq,
3231 & delthe0,sig0inv,sigtc,sigsqtc,delthec,it
3232 double precision y(2),z(2)
3234 time11=dexp(-2*time)
3237 c write (iout,*) "nres",nres
3238 c write (*,'(a,i2)') 'EBEND ICG=',icg
3239 c write (iout,*) ithet_start,ithet_end
3240 do i=ithet_start,ithet_end
3241 if (itype(i-1).eq.ntyp1) cycle
3242 C Zero the energy function and its derivative at 0 or pi.
3243 call splinthet(theta(i),0.5d0*delta,ss,ssd)
3245 ichir1=isign(1,itype(i-2))
3246 ichir2=isign(1,itype(i))
3247 if (itype(i-2).eq.10) ichir1=isign(1,itype(i-1))
3248 if (itype(i).eq.10) ichir2=isign(1,itype(i-1))
3249 if (itype(i-1).eq.10) then
3250 itype1=isign(10,itype(i-2))
3251 ichir11=isign(1,itype(i-2))
3252 ichir12=isign(1,itype(i-2))
3253 itype2=isign(10,itype(i))
3254 ichir21=isign(1,itype(i))
3255 ichir22=isign(1,itype(i))
3258 if (i.gt.3 .and. itype(i-2).ne.ntyp1) then
3262 call proc_proc(phii,icrc)
3263 if (icrc.eq.1) phii=150.0
3273 if (i.lt.nres .and. itype(i).ne.ntyp1) then
3277 call proc_proc(phii1,icrc)
3278 if (icrc.eq.1) phii1=150.0
3290 C Calculate the "mean" value of theta from the part of the distribution
3291 C dependent on the adjacent virtual-bond-valence angles (gamma1 & gamma2).
3292 C In following comments this theta will be referred to as t_c.
3293 thet_pred_mean=0.0d0
3295 athetk=athet(k,it,ichir1,ichir2)
3296 bthetk=bthet(k,it,ichir1,ichir2)
3298 athetk=athet(k,itype1,ichir11,ichir12)
3299 bthetk=bthet(k,itype2,ichir21,ichir22)
3301 thet_pred_mean=thet_pred_mean+athetk*y(k)+bthetk*z(k)
3303 c write (iout,*) "thet_pred_mean",thet_pred_mean
3304 dthett=thet_pred_mean*ssd
3305 thet_pred_mean=thet_pred_mean*ss+a0thet(it)
3306 c write (iout,*) "thet_pred_mean",thet_pred_mean
3307 C Derivatives of the "mean" values in gamma1 and gamma2.
3308 dthetg1=(-athet(1,it,ichir1,ichir2)*y(2)
3309 &+athet(2,it,ichir1,ichir2)*y(1))*ss
3310 dthetg2=(-bthet(1,it,ichir1,ichir2)*z(2)
3311 & +bthet(2,it,ichir1,ichir2)*z(1))*ss
3313 dthetg1=(-athet(1,itype1,ichir11,ichir12)*y(2)
3314 &+athet(2,itype1,ichir11,ichir12)*y(1))*ss
3315 dthetg2=(-bthet(1,itype2,ichir21,ichir22)*z(2)
3316 & +bthet(2,itype2,ichir21,ichir22)*z(1))*ss
3318 if (theta(i).gt.pi-delta) then
3319 call theteng(pi-delta,thet_pred_mean,theta0(it),f0,fprim0,
3321 call mixder(pi-delta,thet_pred_mean,theta0(it),fprim_tc0)
3322 call theteng(pi,thet_pred_mean,theta0(it),f1,fprim1,E_tc1)
3323 call spline1(theta(i),pi-delta,delta,f0,f1,fprim0,ethetai,
3325 call spline2(theta(i),pi-delta,delta,E_tc0,E_tc1,fprim_tc0,
3327 else if (theta(i).lt.delta) then
3328 call theteng(delta,thet_pred_mean,theta0(it),f0,fprim0,E_tc0)
3329 call theteng(0.0d0,thet_pred_mean,theta0(it),f1,fprim1,E_tc1)
3330 call spline1(theta(i),delta,-delta,f0,f1,fprim0,ethetai,
3332 call mixder(delta,thet_pred_mean,theta0(it),fprim_tc0)
3333 call spline2(theta(i),delta,-delta,E_tc0,E_tc1,fprim_tc0,
3336 call theteng(theta(i),thet_pred_mean,theta0(it),ethetai,
3339 etheta=etheta+ethetai
3340 c write (iout,'(2i3,3f8.3,f10.5)') i,it,rad2deg*theta(i),
3341 c & rad2deg*phii,rad2deg*phii1,ethetai
3342 if (i.gt.3) gloc(i-3,icg)=gloc(i-3,icg)+wang*E_tc*dthetg1
3343 if (i.lt.nres) gloc(i-2,icg)=gloc(i-2,icg)+wang*E_tc*dthetg2
3344 gloc(nphi+i-2,icg)=wang*(E_theta+E_tc*dthett)
3347 C Ufff.... We've done all this!!!
3350 C---------------------------------------------------------------------------
3351 subroutine theteng(thetai,thet_pred_mean,theta0i,ethetai,E_theta,
3353 implicit real*8 (a-h,o-z)
3354 include 'DIMENSIONS'
3355 include 'COMMON.LOCAL'
3356 include 'COMMON.IOUNITS'
3357 common /calcthet/ term1,term2,termm,diffak,ratak,
3358 & ak,aktc,termpre,termexp,sigc,sig0i,time11,time12,sigcsq,
3359 & delthe0,sig0inv,sigtc,sigsqtc,delthec,it
3360 C Calculate the contributions to both Gaussian lobes.
3361 C 6/6/97 - Deform the Gaussians using the factor of 1/(1+time)
3362 C The "polynomial part" of the "standard deviation" of this part of
3366 sig=sig*thet_pred_mean+polthet(j,it)
3368 C Derivative of the "interior part" of the "standard deviation of the"
3369 C gamma-dependent Gaussian lobe in t_c.
3370 sigtc=3*polthet(3,it)
3372 sigtc=sigtc*thet_pred_mean+j*polthet(j,it)
3375 C Set the parameters of both Gaussian lobes of the distribution.
3376 C "Standard deviation" of the gamma-dependent Gaussian lobe (sigtc)
3377 fac=sig*sig+sigc0(it)
3380 C Following variable (sigsqtc) is -(1/2)d[sigma(t_c)**(-2))]/dt_c
3381 sigsqtc=-4.0D0*sigcsq*sigtc
3382 c print *,i,sig,sigtc,sigsqtc
3383 C Following variable (sigtc) is d[sigma(t_c)]/dt_c
3384 sigtc=-sigtc/(fac*fac)
3385 C Following variable is sigma(t_c)**(-2)
3386 sigcsq=sigcsq*sigcsq
3388 sig0inv=1.0D0/sig0i**2
3389 delthec=thetai-thet_pred_mean
3390 delthe0=thetai-theta0i
3391 term1=-0.5D0*sigcsq*delthec*delthec
3392 term2=-0.5D0*sig0inv*delthe0*delthe0
3393 C Following fuzzy logic is to avoid underflows in dexp and subsequent INFs and
3394 C NaNs in taking the logarithm. We extract the largest exponent which is added
3395 C to the energy (this being the log of the distribution) at the end of energy
3396 C term evaluation for this virtual-bond angle.
3397 if (term1.gt.term2) then
3399 term2=dexp(term2-termm)
3403 term1=dexp(term1-termm)
3406 C The ratio between the gamma-independent and gamma-dependent lobes of
3407 C the distribution is a Gaussian function of thet_pred_mean too.
3408 diffak=gthet(2,it)-thet_pred_mean
3409 ratak=diffak/gthet(3,it)**2
3410 ak=dexp(gthet(1,it)-0.5D0*diffak*ratak)
3411 C Let's differentiate it in thet_pred_mean NOW.
3413 C Now put together the distribution terms to make complete distribution.
3414 termexp=term1+ak*term2
3415 termpre=sigc+ak*sig0i
3416 C Contribution of the bending energy from this theta is just the -log of
3417 C the sum of the contributions from the two lobes and the pre-exponential
3418 C factor. Simple enough, isn't it?
3419 ethetai=(-dlog(termexp)-termm+dlog(termpre))
3420 C NOW the derivatives!!!
3421 C 6/6/97 Take into account the deformation.
3422 E_theta=(delthec*sigcsq*term1
3423 & +ak*delthe0*sig0inv*term2)/termexp
3424 E_tc=((sigtc+aktc*sig0i)/termpre
3425 & -((delthec*sigcsq+delthec*delthec*sigsqtc)*term1+
3426 & aktc*term2)/termexp)
3429 c-----------------------------------------------------------------------------
3430 subroutine mixder(thetai,thet_pred_mean,theta0i,E_tc_t)
3431 implicit real*8 (a-h,o-z)
3432 include 'DIMENSIONS'
3433 include 'COMMON.LOCAL'
3434 include 'COMMON.IOUNITS'
3435 common /calcthet/ term1,term2,termm,diffak,ratak,
3436 & ak,aktc,termpre,termexp,sigc,sig0i,time11,time12,sigcsq,
3437 & delthe0,sig0inv,sigtc,sigsqtc,delthec,it
3438 delthec=thetai-thet_pred_mean
3439 delthe0=thetai-theta0i
3440 C "Thank you" to MAPLE (probably spared one day of hand-differentiation).
3441 t3 = thetai-thet_pred_mean
3445 t14 = t12+t6*sigsqtc
3447 t21 = thetai-theta0i
3453 E_tc_t = -((sigcsq+2.D0*t3*sigsqtc)*t9-t14*sigcsq*t3*t16*t9
3454 & -aktc*sig0inv*t27)/t32+(t14*t9+aktc*t26)/t40
3455 & *(-t12*t9-ak*sig0inv*t27)
3459 C--------------------------------------------------------------------------
3460 subroutine ebend(etheta)
3462 C Evaluate the virtual-bond-angle energy given the virtual-bond dihedral
3463 C angles gamma and its derivatives in consecutive thetas and gammas.
3464 C ab initio-derived potentials from
3465 c Kozlowska et al., J. Phys.: Condens. Matter 19 (2007) 285203
3467 implicit real*8 (a-h,o-z)
3468 include 'DIMENSIONS'
3469 include 'DIMENSIONS.ZSCOPT'
3470 include 'COMMON.LOCAL'
3471 include 'COMMON.GEO'
3472 include 'COMMON.INTERACT'
3473 include 'COMMON.DERIV'
3474 include 'COMMON.VAR'
3475 include 'COMMON.CHAIN'
3476 include 'COMMON.IOUNITS'
3477 include 'COMMON.NAMES'
3478 include 'COMMON.FFIELD'
3479 include 'COMMON.CONTROL'
3480 double precision coskt(mmaxtheterm),sinkt(mmaxtheterm),
3481 & cosph1(maxsingle),sinph1(maxsingle),cosph2(maxsingle),
3482 & sinph2(maxsingle),cosph1ph2(maxdouble,maxdouble),
3483 & sinph1ph2(maxdouble,maxdouble)
3484 logical lprn /.false./, lprn1 /.false./
3486 c write (iout,*) "ithetyp",(ithetyp(i),i=1,ntyp1)
3487 do i=ithet_start,ithet_end
3488 if (itype(i-1).eq.ntyp1) cycle
3489 if (iabs(itype(i+1)).eq.20) iblock=2
3490 if (iabs(itype(i+1)).ne.20) iblock=1
3494 theti2=0.5d0*theta(i)
3495 ityp2=ithetyp((itype(i-1)))
3497 coskt(k)=dcos(k*theti2)
3498 sinkt(k)=dsin(k*theti2)
3500 if (i.gt.3 .and. itype(i-2).ne.ntyp1) then
3503 if (phii.ne.phii) phii=150.0
3507 ityp1=ithetyp((itype(i-2)))
3509 cosph1(k)=dcos(k*phii)
3510 sinph1(k)=dsin(k*phii)
3520 if (i.lt.nres .and. itype(i).ne.ntyp1) then
3523 if (phii1.ne.phii1) phii1=150.0
3528 ityp3=ithetyp((itype(i)))
3530 cosph2(k)=dcos(k*phii1)
3531 sinph2(k)=dsin(k*phii1)
3541 c write (iout,*) "i",i," ityp1",itype(i-2),ityp1,
3542 c & " ityp2",itype(i-1),ityp2," ityp3",itype(i),ityp3
3544 ethetai=aa0thet(ityp1,ityp2,ityp3,iblock)
3547 ccl=cosph1(l)*cosph2(k-l)
3548 ssl=sinph1(l)*sinph2(k-l)
3549 scl=sinph1(l)*cosph2(k-l)
3550 csl=cosph1(l)*sinph2(k-l)
3551 cosph1ph2(l,k)=ccl-ssl
3552 cosph1ph2(k,l)=ccl+ssl
3553 sinph1ph2(l,k)=scl+csl
3554 sinph1ph2(k,l)=scl-csl
3558 write (iout,*) "i",i," ityp1",ityp1," ityp2",ityp2,
3559 & " ityp3",ityp3," theti2",theti2," phii",phii," phii1",phii1
3560 write (iout,*) "coskt and sinkt"
3562 write (iout,*) k,coskt(k),sinkt(k)
3566 ethetai=ethetai+aathet(k,ityp1,ityp2,ityp3,iblock)*sinkt(k)
3567 dethetai=dethetai+0.5d0*k*aathet(k,ityp1,ityp2,ityp3,iblock)
3570 & write (iout,*) "k",k,"
3571 & aathet",aathet(k,ityp1,ityp2,ityp3,iblock),
3572 & " ethetai",ethetai
3575 write (iout,*) "cosph and sinph"
3577 write (iout,*) k,cosph1(k),sinph1(k),cosph2(k),sinph2(k)
3579 write (iout,*) "cosph1ph2 and sinph2ph2"
3582 write (iout,*) l,k,cosph1ph2(l,k),cosph1ph2(k,l),
3583 & sinph1ph2(l,k),sinph1ph2(k,l)
3586 write(iout,*) "ethetai",ethetai
3590 aux=bbthet(k,m,ityp1,ityp2,ityp3,iblock)*cosph1(k)
3591 & +ccthet(k,m,ityp1,ityp2,ityp3,iblock)*sinph1(k)
3592 & +ddthet(k,m,ityp1,ityp2,ityp3,iblock)*cosph2(k)
3593 & +eethet(k,m,ityp1,ityp2,ityp3,iblock)*sinph2(k)
3594 ethetai=ethetai+sinkt(m)*aux
3595 dethetai=dethetai+0.5d0*m*aux*coskt(m)
3596 dephii=dephii+k*sinkt(m)*(
3597 & ccthet(k,m,ityp1,ityp2,ityp3,iblock)*cosph1(k)-
3598 & bbthet(k,m,ityp1,ityp2,ityp3,iblock)*sinph1(k))
3599 dephii1=dephii1+k*sinkt(m)*(
3600 & eethet(k,m,ityp1,ityp2,ityp3,iblock)*cosph2(k)-
3601 & ddthet(k,m,ityp1,ityp2,ityp3,iblock)*sinph2(k))
3603 & write (iout,*) "m",m," k",k," bbthet",
3604 & bbthet(k,m,ityp1,ityp2,ityp3,iblock)," ccthet",
3605 & ccthet(k,m,ityp1,ityp2,ityp3,iblock)," ddthet",
3606 & ddthet(k,m,ityp1,ityp2,ityp3,iblock)," eethet",
3607 & eethet(k,m,ityp1,ityp2,ityp3,iblock)," ethetai",ethetai
3611 & write(iout,*) "ethetai",ethetai
3615 aux=ffthet(l,k,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(l,k)+
3616 & ffthet(k,l,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(k,l)+
3617 & ggthet(l,k,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(l,k)+
3618 & ggthet(k,l,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(k,l)
3619 ethetai=ethetai+sinkt(m)*aux
3620 dethetai=dethetai+0.5d0*m*coskt(m)*aux
3621 dephii=dephii+l*sinkt(m)*(
3622 & -ffthet(l,k,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(l,k)-
3623 & ffthet(k,l,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(k,l)+
3624 & ggthet(l,k,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(l,k)+
3625 & ggthet(k,l,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(k,l))
3626 dephii1=dephii1+(k-l)*sinkt(m)*(
3627 & -ffthet(l,k,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(l,k)+
3628 & ffthet(k,l,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(k,l)+
3629 & ggthet(l,k,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(l,k)-
3630 & ggthet(k,l,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(k,l))
3632 write (iout,*) "m",m," k",k," l",l," ffthet",
3633 & ffthet(l,k,m,ityp1,ityp2,ityp3,iblock),
3634 & ffthet(k,l,m,ityp1,ityp2,ityp3,iblock)," ggthet",
3635 & ggthet(l,k,m,ityp1,ityp2,ityp3,iblock),
3636 & ggthet(k,l,m,ityp1,ityp2,ityp3,iblock),
3637 & " ethetai",ethetai
3638 write (iout,*) cosph1ph2(l,k)*sinkt(m),
3639 & cosph1ph2(k,l)*sinkt(m),
3640 & sinph1ph2(l,k)*sinkt(m),sinph1ph2(k,l)*sinkt(m)
3646 if (lprn1) write (iout,'(i2,3f8.1,9h ethetai ,f10.5)')
3647 & i,theta(i)*rad2deg,phii*rad2deg,
3648 & phii1*rad2deg,ethetai
3649 etheta=etheta+ethetai
3650 if (i.gt.3) gloc(i-3,icg)=gloc(i-3,icg)+wang*dephii
3651 if (i.lt.nres) gloc(i-2,icg)=gloc(i-2,icg)+wang*dephii1
3652 gloc(nphi+i-2,icg)=wang*dethetai
3658 c-----------------------------------------------------------------------------
3659 subroutine esc(escloc)
3660 C Calculate the local energy of a side chain and its derivatives in the
3661 C corresponding virtual-bond valence angles THETA and the spherical angles
3663 implicit real*8 (a-h,o-z)
3664 include 'DIMENSIONS'
3665 include 'DIMENSIONS.ZSCOPT'
3666 include 'COMMON.GEO'
3667 include 'COMMON.LOCAL'
3668 include 'COMMON.VAR'
3669 include 'COMMON.INTERACT'
3670 include 'COMMON.DERIV'
3671 include 'COMMON.CHAIN'
3672 include 'COMMON.IOUNITS'
3673 include 'COMMON.NAMES'
3674 include 'COMMON.FFIELD'
3675 double precision x(3),dersc(3),xemp(3),dersc0(3),dersc1(3),
3676 & ddersc0(3),ddummy(3),xtemp(3),temp(3)
3677 common /sccalc/ time11,time12,time112,theti,it,nlobit
3680 c write (iout,'(a)') 'ESC'
3681 do i=loc_start,loc_end
3683 if (it.eq.ntyp1) cycle
3684 if (it.eq.10) goto 1
3685 nlobit=nlob(iabs(it))
3686 c print *,'i=',i,' it=',it,' nlobit=',nlobit
3687 c write (iout,*) 'i=',i,' ssa=',ssa,' ssad=',ssad
3688 theti=theta(i+1)-pipol
3692 c write (iout,*) "i",i," x",x(1),x(2),x(3)
3694 if (x(2).gt.pi-delta) then
3698 call enesc(xtemp,escloci0,dersc0,ddersc0,.true.)
3700 call enesc(xtemp,escloci1,dersc1,ddummy,.false.)
3701 call spline1(x(2),pi-delta,delta,escloci0,escloci1,dersc0(2),
3703 call spline2(x(2),pi-delta,delta,dersc0(1),dersc1(1),
3704 & ddersc0(1),dersc(1))
3705 call spline2(x(2),pi-delta,delta,dersc0(3),dersc1(3),
3706 & ddersc0(3),dersc(3))
3708 call enesc_bound(xtemp,esclocbi0,dersc0,dersc12,.true.)
3710 call enesc_bound(xtemp,esclocbi1,dersc1,chuju,.false.)
3711 call spline1(x(2),pi-delta,delta,esclocbi0,esclocbi1,
3712 & dersc0(2),esclocbi,dersc02)
3713 call spline2(x(2),pi-delta,delta,dersc0(1),dersc1(1),
3715 call splinthet(x(2),0.5d0*delta,ss,ssd)
3720 dersc(k)=ss*dersc(k)+(1.0d0-ss)*dersc0(k)
3722 dersc(2)=dersc(2)+ssd*(escloci-esclocbi)
3723 c write (iout,*) 'i=',i,x(2)*rad2deg,escloci0,escloci,
3725 escloci=ss*escloci+(1.0d0-ss)*esclocbi
3727 c write (iout,*) escloci
3728 else if (x(2).lt.delta) then
3732 call enesc(xtemp,escloci0,dersc0,ddersc0,.true.)
3734 call enesc(xtemp,escloci1,dersc1,ddummy,.false.)
3735 call spline1(x(2),delta,-delta,escloci0,escloci1,dersc0(2),
3737 call spline2(x(2),delta,-delta,dersc0(1),dersc1(1),
3738 & ddersc0(1),dersc(1))
3739 call spline2(x(2),delta,-delta,dersc0(3),dersc1(3),
3740 & ddersc0(3),dersc(3))
3742 call enesc_bound(xtemp,esclocbi0,dersc0,dersc12,.true.)
3744 call enesc_bound(xtemp,esclocbi1,dersc1,chuju,.false.)
3745 call spline1(x(2),delta,-delta,esclocbi0,esclocbi1,
3746 & dersc0(2),esclocbi,dersc02)
3747 call spline2(x(2),delta,-delta,dersc0(1),dersc1(1),
3752 call splinthet(x(2),0.5d0*delta,ss,ssd)
3754 dersc(k)=ss*dersc(k)+(1.0d0-ss)*dersc0(k)
3756 dersc(2)=dersc(2)+ssd*(escloci-esclocbi)
3757 c write (iout,*) 'i=',i,x(2)*rad2deg,escloci0,escloci,
3759 escloci=ss*escloci+(1.0d0-ss)*esclocbi
3760 c write (iout,*) escloci
3762 call enesc(x,escloci,dersc,ddummy,.false.)
3765 escloc=escloc+escloci
3766 c write (iout,*) 'i=',i,' escloci=',escloci,' dersc=',dersc
3768 gloc(nphi+i-1,icg)=gloc(nphi+i-1,icg)+
3770 gloc(ialph(i,1),icg)=wscloc*dersc(2)
3771 gloc(ialph(i,1)+nside,icg)=wscloc*dersc(3)
3776 C---------------------------------------------------------------------------
3777 subroutine enesc(x,escloci,dersc,ddersc,mixed)
3778 implicit real*8 (a-h,o-z)
3779 include 'DIMENSIONS'
3780 include 'COMMON.GEO'
3781 include 'COMMON.LOCAL'
3782 include 'COMMON.IOUNITS'
3783 common /sccalc/ time11,time12,time112,theti,it,nlobit
3784 double precision x(3),z(3),Ax(3,maxlob,-1:1),dersc(3),ddersc(3)
3785 double precision contr(maxlob,-1:1)
3787 c write (iout,*) 'it=',it,' nlobit=',nlobit
3791 if (mixed) ddersc(j)=0.0d0
3795 C Because of periodicity of the dependence of the SC energy in omega we have
3796 C to add up the contributions from x(3)-2*pi, x(3), and x(3+2*pi).
3797 C To avoid underflows, first compute & store the exponents.
3805 z(k)=x(k)-censc(k,j,it)
3810 Axk=Axk+gaussc(l,k,j,it)*z(l)
3816 expfac=expfac+Ax(k,j,iii)*z(k)
3824 C As in the case of ebend, we want to avoid underflows in exponentiation and
3825 C subsequent NaNs and INFs in energy calculation.
3826 C Find the largest exponent
3830 if (emin.gt.contr(j,iii)) emin=contr(j,iii)
3834 cd print *,'it=',it,' emin=',emin
3836 C Compute the contribution to SC energy and derivatives
3840 expfac=dexp(bsc(j,iabs(it))-0.5D0*contr(j,iii)+emin)
3841 cd print *,'j=',j,' expfac=',expfac
3842 escloc_i=escloc_i+expfac
3844 dersc(k)=dersc(k)+Ax(k,j,iii)*expfac
3848 ddersc(k)=ddersc(k)+(-Ax(2,j,iii)*Ax(k,j,iii)
3849 & +gaussc(k,2,j,it))*expfac
3856 dersc(1)=dersc(1)/cos(theti)**2
3857 ddersc(1)=ddersc(1)/cos(theti)**2
3860 escloci=-(dlog(escloc_i)-emin)
3862 dersc(j)=dersc(j)/escloc_i
3866 ddersc(j)=(ddersc(j)/escloc_i+dersc(2)*dersc(j))
3871 C------------------------------------------------------------------------------
3872 subroutine enesc_bound(x,escloci,dersc,dersc12,mixed)
3873 implicit real*8 (a-h,o-z)
3874 include 'DIMENSIONS'
3875 include 'COMMON.GEO'
3876 include 'COMMON.LOCAL'
3877 include 'COMMON.IOUNITS'
3878 common /sccalc/ time11,time12,time112,theti,it,nlobit
3879 double precision x(3),z(3),Ax(3,maxlob),dersc(3)
3880 double precision contr(maxlob)
3891 z(k)=x(k)-censc(k,j,it)
3897 Axk=Axk+gaussc(l,k,j,it)*z(l)
3903 expfac=expfac+Ax(k,j)*z(k)
3908 C As in the case of ebend, we want to avoid underflows in exponentiation and
3909 C subsequent NaNs and INFs in energy calculation.
3910 C Find the largest exponent
3913 if (emin.gt.contr(j)) emin=contr(j)
3917 C Compute the contribution to SC energy and derivatives
3921 expfac=dexp(bsc(j,iabs(it))-0.5D0*contr(j)+emin)
3922 escloc_i=escloc_i+expfac
3924 dersc(k)=dersc(k)+Ax(k,j)*expfac
3926 if (mixed) dersc12=dersc12+(-Ax(2,j)*Ax(1,j)
3927 & +gaussc(1,2,j,it))*expfac
3931 dersc(1)=dersc(1)/cos(theti)**2
3932 dersc12=dersc12/cos(theti)**2
3933 escloci=-(dlog(escloc_i)-emin)
3935 dersc(j)=dersc(j)/escloc_i
3937 if (mixed) dersc12=(dersc12/escloc_i+dersc(2)*dersc(1))
3941 c----------------------------------------------------------------------------------
3942 subroutine esc(escloc)
3943 C Calculate the local energy of a side chain and its derivatives in the
3944 C corresponding virtual-bond valence angles THETA and the spherical angles
3945 C ALPHA and OMEGA derived from AM1 all-atom calculations.
3946 C added by Urszula Kozlowska. 07/11/2007
3948 implicit real*8 (a-h,o-z)
3949 include 'DIMENSIONS'
3950 include 'DIMENSIONS.ZSCOPT'
3951 include 'COMMON.GEO'
3952 include 'COMMON.LOCAL'
3953 include 'COMMON.VAR'
3954 include 'COMMON.SCROT'
3955 include 'COMMON.INTERACT'
3956 include 'COMMON.DERIV'
3957 include 'COMMON.CHAIN'
3958 include 'COMMON.IOUNITS'
3959 include 'COMMON.NAMES'
3960 include 'COMMON.FFIELD'
3961 include 'COMMON.CONTROL'
3962 include 'COMMON.VECTORS'
3963 double precision x_prime(3),y_prime(3),z_prime(3)
3964 & , sumene,dsc_i,dp2_i,x(65),
3965 & xx,yy,zz,sumene1,sumene2,sumene3,sumene4,s1,s1_6,s2,s2_6,
3966 & de_dxx,de_dyy,de_dzz,de_dt
3967 double precision s1_t,s1_6_t,s2_t,s2_6_t
3969 & dXX_Ci1(3),dYY_Ci1(3),dZZ_Ci1(3),dXX_Ci(3),
3970 & dYY_Ci(3),dZZ_Ci(3),dXX_XYZ(3),dYY_XYZ(3),dZZ_XYZ(3),
3971 & dt_dCi(3),dt_dCi1(3)
3972 common /sccalc/ time11,time12,time112,theti,it,nlobit
3975 do i=loc_start,loc_end
3976 if (itype(i).eq.ntyp1) cycle
3977 costtab(i+1) =dcos(theta(i+1))
3978 sinttab(i+1) =dsqrt(1-costtab(i+1)*costtab(i+1))
3979 cost2tab(i+1)=dsqrt(0.5d0*(1.0d0+costtab(i+1)))
3980 sint2tab(i+1)=dsqrt(0.5d0*(1.0d0-costtab(i+1)))
3981 cosfac2=0.5d0/(1.0d0+costtab(i+1))
3982 cosfac=dsqrt(cosfac2)
3983 sinfac2=0.5d0/(1.0d0-costtab(i+1))
3984 sinfac=dsqrt(sinfac2)
3986 if (it.eq.10) goto 1
3988 C Compute the axes of tghe local cartesian coordinates system; store in
3989 c x_prime, y_prime and z_prime
3996 C write(2,*) "dc_norm", dc_norm(1,i+nres),dc_norm(2,i+nres),
3997 C & dc_norm(3,i+nres)
3999 x_prime(j) = (dc_norm(j,i) - dc_norm(j,i-1))*cosfac
4000 y_prime(j) = (dc_norm(j,i) + dc_norm(j,i-1))*sinfac
4003 z_prime(j) = -uz(j,i-1)*dsign(1.0d0,dfloat(itype(i)))
4006 c write (2,*) "x_prime",(x_prime(j),j=1,3)
4007 c write (2,*) "y_prime",(y_prime(j),j=1,3)
4008 c write (2,*) "z_prime",(z_prime(j),j=1,3)
4009 c write (2,*) "xx",scalar(x_prime(1),x_prime(1)),
4010 c & " xy",scalar(x_prime(1),y_prime(1)),
4011 c & " xz",scalar(x_prime(1),z_prime(1)),
4012 c & " yy",scalar(y_prime(1),y_prime(1)),
4013 c & " yz",scalar(y_prime(1),z_prime(1)),
4014 c & " zz",scalar(z_prime(1),z_prime(1))
4016 C Transform the unit vector of the ith side-chain centroid, dC_norm(*,i),
4017 C to local coordinate system. Store in xx, yy, zz.
4023 xx = xx + x_prime(j)*dc_norm(j,i+nres)
4024 yy = yy + y_prime(j)*dc_norm(j,i+nres)
4025 zz = zz + z_prime(j)*dc_norm(j,i+nres)
4032 C Compute the energy of the ith side cbain
4034 c write (2,*) "xx",xx," yy",yy," zz",zz
4037 x(j) = sc_parmin(j,it)
4040 Cc diagnostics - remove later
4042 yy1 = dsin(alph(2))*dcos(omeg(2))
4043 zz1 = -dsign(1.0d0,itype(i))*dsin(alph(2))*dsin(omeg(2))
4044 write(2,'(3f8.1,3f9.3,1x,3f9.3)')
4045 & alph(2)*rad2deg,omeg(2)*rad2deg,theta(3)*rad2deg,xx,yy,zz,
4047 C," --- ", xx_w,yy_w,zz_w
4050 sumene1= x(1)+ x(2)*xx+ x(3)*yy+ x(4)*zz+ x(5)*xx**2
4051 & + x(6)*yy**2+ x(7)*zz**2+ x(8)*xx*zz+ x(9)*xx*yy
4053 sumene2= x(11) + x(12)*xx + x(13)*yy + x(14)*zz + x(15)*xx**2
4054 & + x(16)*yy**2 + x(17)*zz**2 + x(18)*xx*zz + x(19)*xx*yy
4056 sumene3= x(21) +x(22)*xx +x(23)*yy +x(24)*zz +x(25)*xx**2
4057 & +x(26)*yy**2 +x(27)*zz**2 +x(28)*xx*zz +x(29)*xx*yy
4058 & +x(30)*yy*zz +x(31)*xx**3 +x(32)*yy**3 +x(33)*zz**3
4059 & +x(34)*(xx**2)*yy +x(35)*(xx**2)*zz +x(36)*(yy**2)*xx
4060 & +x(37)*(yy**2)*zz +x(38)*(zz**2)*xx +x(39)*(zz**2)*yy
4062 sumene4= x(41) +x(42)*xx +x(43)*yy +x(44)*zz +x(45)*xx**2
4063 & +x(46)*yy**2 +x(47)*zz**2 +x(48)*xx*zz +x(49)*xx*yy
4064 & +x(50)*yy*zz +x(51)*xx**3 +x(52)*yy**3 +x(53)*zz**3
4065 & +x(54)*(xx**2)*yy +x(55)*(xx**2)*zz +x(56)*(yy**2)*xx
4066 & +x(57)*(yy**2)*zz +x(58)*(zz**2)*xx +x(59)*(zz**2)*yy
4068 dsc_i = 0.743d0+x(61)
4070 dscp1=dsqrt(dsc_i**2+dp2_i**2-2*dsc_i*dp2_i
4071 & *(xx*cost2tab(i+1)+yy*sint2tab(i+1)))
4072 dscp2=dsqrt(dsc_i**2+dp2_i**2-2*dsc_i*dp2_i
4073 & *(xx*cost2tab(i+1)-yy*sint2tab(i+1)))
4074 s1=(1+x(63))/(0.1d0 + dscp1)
4075 s1_6=(1+x(64))/(0.1d0 + dscp1**6)
4076 s2=(1+x(65))/(0.1d0 + dscp2)
4077 s2_6=(1+x(65))/(0.1d0 + dscp2**6)
4078 sumene = ( sumene3*sint2tab(i+1) + sumene1)*(s1+s1_6)
4079 & + (sumene4*cost2tab(i+1) +sumene2)*(s2+s2_6)
4080 c write(2,'(i2," sumene",7f9.3)') i,sumene1,sumene2,sumene3,
4082 c & dscp1,dscp2,sumene
4083 c sumene = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
4084 escloc = escloc + sumene
4085 c write (2,*) "escloc",escloc
4086 c write (2,*) "i",i," escloc",sumene,escloc,it,itype(i),
4088 if (.not. calc_grad) goto 1
4091 C This section to check the numerical derivatives of the energy of ith side
4092 C chain in xx, yy, zz, and theta. Use the -DDEBUG compiler option or insert
4093 C #define DEBUG in the code to turn it on.
4095 write (2,*) "sumene =",sumene
4099 write (2,*) xx,yy,zz
4100 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
4101 de_dxx_num=(sumenep-sumene)/aincr
4103 write (2,*) "xx+ sumene from enesc=",sumenep
4106 write (2,*) xx,yy,zz
4107 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
4108 de_dyy_num=(sumenep-sumene)/aincr
4110 write (2,*) "yy+ sumene from enesc=",sumenep
4113 write (2,*) xx,yy,zz
4114 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
4115 de_dzz_num=(sumenep-sumene)/aincr
4117 write (2,*) "zz+ sumene from enesc=",sumenep
4118 costsave=cost2tab(i+1)
4119 sintsave=sint2tab(i+1)
4120 cost2tab(i+1)=dcos(0.5d0*(theta(i+1)+aincr))
4121 sint2tab(i+1)=dsin(0.5d0*(theta(i+1)+aincr))
4122 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
4123 de_dt_num=(sumenep-sumene)/aincr
4124 write (2,*) " t+ sumene from enesc=",sumenep
4125 cost2tab(i+1)=costsave
4126 sint2tab(i+1)=sintsave
4127 C End of diagnostics section.
4130 C Compute the gradient of esc
4132 pom_s1=(1.0d0+x(63))/(0.1d0 + dscp1)**2
4133 pom_s16=6*(1.0d0+x(64))/(0.1d0 + dscp1**6)**2
4134 pom_s2=(1.0d0+x(65))/(0.1d0 + dscp2)**2
4135 pom_s26=6*(1.0d0+x(65))/(0.1d0 + dscp2**6)**2
4136 pom_dx=dsc_i*dp2_i*cost2tab(i+1)
4137 pom_dy=dsc_i*dp2_i*sint2tab(i+1)
4138 pom_dt1=-0.5d0*dsc_i*dp2_i*(xx*sint2tab(i+1)-yy*cost2tab(i+1))
4139 pom_dt2=-0.5d0*dsc_i*dp2_i*(xx*sint2tab(i+1)+yy*cost2tab(i+1))
4140 pom1=(sumene3*sint2tab(i+1)+sumene1)
4141 & *(pom_s1/dscp1+pom_s16*dscp1**4)
4142 pom2=(sumene4*cost2tab(i+1)+sumene2)
4143 & *(pom_s2/dscp2+pom_s26*dscp2**4)
4144 sumene1x=x(2)+2*x(5)*xx+x(8)*zz+ x(9)*yy
4145 sumene3x=x(22)+2*x(25)*xx+x(28)*zz+x(29)*yy+3*x(31)*xx**2
4146 & +2*x(34)*xx*yy +2*x(35)*xx*zz +x(36)*(yy**2) +x(38)*(zz**2)
4148 sumene2x=x(12)+2*x(15)*xx+x(18)*zz+ x(19)*yy
4149 sumene4x=x(42)+2*x(45)*xx +x(48)*zz +x(49)*yy +3*x(51)*xx**2
4150 & +2*x(54)*xx*yy+2*x(55)*xx*zz+x(56)*(yy**2)+x(58)*(zz**2)
4152 de_dxx =(sumene1x+sumene3x*sint2tab(i+1))*(s1+s1_6)
4153 & +(sumene2x+sumene4x*cost2tab(i+1))*(s2+s2_6)
4154 & +(pom1+pom2)*pom_dx
4156 write(2,*), "de_dxx = ", de_dxx,de_dxx_num
4159 sumene1y=x(3) + 2*x(6)*yy + x(9)*xx + x(10)*zz
4160 sumene3y=x(23) +2*x(26)*yy +x(29)*xx +x(30)*zz +3*x(32)*yy**2
4161 & +x(34)*(xx**2) +2*x(36)*yy*xx +2*x(37)*yy*zz +x(39)*(zz**2)
4163 sumene2y=x(13) + 2*x(16)*yy + x(19)*xx + x(20)*zz
4164 sumene4y=x(43)+2*x(46)*yy+x(49)*xx +x(50)*zz
4165 & +3*x(52)*yy**2+x(54)*xx**2+2*x(56)*yy*xx +2*x(57)*yy*zz
4166 & +x(59)*zz**2 +x(60)*xx*zz
4167 de_dyy =(sumene1y+sumene3y*sint2tab(i+1))*(s1+s1_6)
4168 & +(sumene2y+sumene4y*cost2tab(i+1))*(s2+s2_6)
4169 & +(pom1-pom2)*pom_dy
4171 write(2,*), "de_dyy = ", de_dyy,de_dyy_num
4174 de_dzz =(x(24) +2*x(27)*zz +x(28)*xx +x(30)*yy
4175 & +3*x(33)*zz**2 +x(35)*xx**2 +x(37)*yy**2 +2*x(38)*zz*xx
4176 & +2*x(39)*zz*yy +x(40)*xx*yy)*sint2tab(i+1)*(s1+s1_6)
4177 & +(x(4) + 2*x(7)*zz+ x(8)*xx + x(10)*yy)*(s1+s1_6)
4178 & +(x(44)+2*x(47)*zz +x(48)*xx +x(50)*yy +3*x(53)*zz**2
4179 & +x(55)*xx**2 +x(57)*(yy**2)+2*x(58)*zz*xx +2*x(59)*zz*yy
4180 & +x(60)*xx*yy)*cost2tab(i+1)*(s2+s2_6)
4181 & + ( x(14) + 2*x(17)*zz+ x(18)*xx + x(20)*yy)*(s2+s2_6)
4183 write(2,*), "de_dzz = ", de_dzz,de_dzz_num
4186 de_dt = 0.5d0*sumene3*cost2tab(i+1)*(s1+s1_6)
4187 & -0.5d0*sumene4*sint2tab(i+1)*(s2+s2_6)
4188 & +pom1*pom_dt1+pom2*pom_dt2
4190 write(2,*), "de_dt = ", de_dt,de_dt_num
4194 cossc=scalar(dc_norm(1,i),dc_norm(1,i+nres))
4195 cossc1=scalar(dc_norm(1,i-1),dc_norm(1,i+nres))
4196 cosfac2xx=cosfac2*xx
4197 sinfac2yy=sinfac2*yy
4199 dt_dCi(k) = -(dc_norm(k,i-1)+costtab(i+1)*dc_norm(k,i))*
4201 dt_dCi1(k)= -(dc_norm(k,i)+costtab(i+1)*dc_norm(k,i-1))*
4203 pom=(dC_norm(k,i+nres)-cossc*dC_norm(k,i))*vbld_inv(i+1)
4204 pom1=(dC_norm(k,i+nres)-cossc1*dC_norm(k,i-1))*vbld_inv(i)
4205 c write (iout,*) "i",i," k",k," pom",pom," pom1",pom1,
4206 c & " dt_dCi",dt_dCi(k)," dt_dCi1",dt_dCi1(k)
4207 c write (iout,*) "dC_norm",(dC_norm(j,i),j=1,3),
4208 c & (dC_norm(j,i-1),j=1,3)," vbld_inv",vbld_inv(i+1),vbld_inv(i)
4209 dXX_Ci(k)=pom*cosfac-dt_dCi(k)*cosfac2xx
4210 dXX_Ci1(k)=-pom1*cosfac-dt_dCi1(k)*cosfac2xx
4211 dYY_Ci(k)=pom*sinfac+dt_dCi(k)*sinfac2yy
4212 dYY_Ci1(k)=pom1*sinfac+dt_dCi1(k)*sinfac2yy
4216 dZZ_Ci(k)=dZZ_Ci(k)-uzgrad(j,k,2,i-1)
4217 & *dsign(1.0d0,dfloat(itype(i)))*dC_norm(j,i+nres)
4218 dZZ_Ci1(k)=dZZ_Ci1(k)-uzgrad(j,k,1,i-1)
4219 & *dsign(1.0d0,dfloat(itype(i)))*dC_norm(j,i+nres)
4222 dXX_XYZ(k)=vbld_inv(i+nres)*(x_prime(k)-xx*dC_norm(k,i+nres))
4223 dYY_XYZ(k)=vbld_inv(i+nres)*(y_prime(k)-yy*dC_norm(k,i+nres))
4224 dZZ_XYZ(k)=vbld_inv(i+nres)*(z_prime(k)-zz*dC_norm(k,i+nres))
4226 dt_dCi(k) = -dt_dCi(k)/sinttab(i+1)
4227 dt_dCi1(k)= -dt_dCi1(k)/sinttab(i+1)
4231 dXX_Ctab(k,i)=dXX_Ci(k)
4232 dXX_C1tab(k,i)=dXX_Ci1(k)
4233 dYY_Ctab(k,i)=dYY_Ci(k)
4234 dYY_C1tab(k,i)=dYY_Ci1(k)
4235 dZZ_Ctab(k,i)=dZZ_Ci(k)
4236 dZZ_C1tab(k,i)=dZZ_Ci1(k)
4237 dXX_XYZtab(k,i)=dXX_XYZ(k)
4238 dYY_XYZtab(k,i)=dYY_XYZ(k)
4239 dZZ_XYZtab(k,i)=dZZ_XYZ(k)
4243 c write (iout,*) "k",k," dxx_ci1",dxx_ci1(k)," dyy_ci1",
4244 c & dyy_ci1(k)," dzz_ci1",dzz_ci1(k)
4245 c write (iout,*) "k",k," dxx_ci",dxx_ci(k)," dyy_ci",
4246 c & dyy_ci(k)," dzz_ci",dzz_ci(k)
4247 c write (iout,*) "k",k," dt_dci",dt_dci(k)," dt_dci",
4249 c write (iout,*) "k",k," dxx_XYZ",dxx_XYZ(k)," dyy_XYZ",
4250 c & dyy_XYZ(k)," dzz_XYZ",dzz_XYZ(k)
4251 gscloc(k,i-1)=gscloc(k,i-1)+de_dxx*dxx_ci1(k)
4252 & +de_dyy*dyy_ci1(k)+de_dzz*dzz_ci1(k)+de_dt*dt_dCi1(k)
4253 gscloc(k,i)=gscloc(k,i)+de_dxx*dxx_Ci(k)
4254 & +de_dyy*dyy_Ci(k)+de_dzz*dzz_Ci(k)+de_dt*dt_dCi(k)
4255 gsclocx(k,i)= de_dxx*dxx_XYZ(k)
4256 & +de_dyy*dyy_XYZ(k)+de_dzz*dzz_XYZ(k)
4258 c write(iout,*) "ENERGY GRAD = ", (gscloc(k,i-1),k=1,3),
4259 c & (gscloc(k,i),k=1,3),(gsclocx(k,i),k=1,3)
4261 C to check gradient call subroutine check_grad
4268 c------------------------------------------------------------------------------
4269 subroutine gcont(rij,r0ij,eps0ij,delta,fcont,fprimcont)
4271 C This procedure calculates two-body contact function g(rij) and its derivative:
4274 C g(rij) = esp0ij*(-0.9375*x+0.625*x**3-0.1875*x**5) ! -1 =< x =< 1
4277 C where x=(rij-r0ij)/delta
4279 C rij - interbody distance, r0ij - contact distance, eps0ij - contact energy
4282 double precision rij,r0ij,eps0ij,fcont,fprimcont
4283 double precision x,x2,x4,delta
4287 if (x.lt.-1.0D0) then
4290 else if (x.le.1.0D0) then
4293 fcont=eps0ij*(x*(-0.9375D0+0.6250D0*x2-0.1875D0*x4)+0.5D0)
4294 fprimcont=eps0ij * (-0.9375D0+1.8750D0*x2-0.9375D0*x4)/delta
4301 c------------------------------------------------------------------------------
4302 subroutine splinthet(theti,delta,ss,ssder)
4303 implicit real*8 (a-h,o-z)
4304 include 'DIMENSIONS'
4305 include 'DIMENSIONS.ZSCOPT'
4306 include 'COMMON.VAR'
4307 include 'COMMON.GEO'
4310 if (theti.gt.pipol) then
4311 call gcont(theti,thetup,1.0d0,delta,ss,ssder)
4313 call gcont(-theti,-thetlow,1.0d0,delta,ss,ssder)
4318 c------------------------------------------------------------------------------
4319 subroutine spline1(x,x0,delta,f0,f1,fprim0,f,fprim)
4321 double precision x,x0,delta,f0,f1,fprim0,f,fprim
4322 double precision ksi,ksi2,ksi3,a1,a2,a3
4323 a1=fprim0*delta/(f1-f0)
4329 f=f0+(f1-f0)*ksi*(a1+ksi*(a2+a3*ksi))
4330 fprim=(f1-f0)/delta*(a1+ksi*(2*a2+3*ksi*a3))
4333 c------------------------------------------------------------------------------
4334 subroutine spline2(x,x0,delta,f0x,f1x,fprim0x,fx)
4336 double precision x,x0,delta,f0x,f1x,fprim0x,fx
4337 double precision ksi,ksi2,ksi3,a1,a2,a3
4342 a2=3*(f1x-f0x)-2*fprim0x*delta
4343 a3=fprim0x*delta-2*(f1x-f0x)
4344 fx=f0x+a1*ksi+a2*ksi2+a3*ksi3
4347 C-----------------------------------------------------------------------------
4349 C-----------------------------------------------------------------------------
4350 subroutine etor(etors,edihcnstr,fact)
4351 implicit real*8 (a-h,o-z)
4352 include 'DIMENSIONS'
4353 include 'DIMENSIONS.ZSCOPT'
4354 include 'COMMON.VAR'
4355 include 'COMMON.GEO'
4356 include 'COMMON.LOCAL'
4357 include 'COMMON.TORSION'
4358 include 'COMMON.INTERACT'
4359 include 'COMMON.DERIV'
4360 include 'COMMON.CHAIN'
4361 include 'COMMON.NAMES'
4362 include 'COMMON.IOUNITS'
4363 include 'COMMON.FFIELD'
4364 include 'COMMON.TORCNSTR'
4366 C Set lprn=.true. for debugging
4370 do i=iphi_start,iphi_end
4371 if (itype(i-2).eq.ntyp1 .or. itype(i-1).eq.ntyp1
4372 & .or. itype(i).eq.ntyp1) cycle
4373 itori=itortyp(itype(i-2))
4374 itori1=itortyp(itype(i-1))
4377 C Proline-Proline pair is a special case...
4378 if (itori.eq.3 .and. itori1.eq.3) then
4379 if (phii.gt.-dwapi3) then
4381 fac=1.0D0/(1.0D0-cosphi)
4382 etorsi=v1(1,3,3)*fac
4383 etorsi=etorsi+etorsi
4384 etors=etors+etorsi-v1(1,3,3)
4385 gloci=gloci-3*fac*etorsi*dsin(3*phii)
4388 v1ij=v1(j+1,itori,itori1)
4389 v2ij=v2(j+1,itori,itori1)
4392 etors=etors+v1ij*cosphi+v2ij*sinphi+dabs(v1ij)+dabs(v2ij)
4393 gloci=gloci+j*(v2ij*cosphi-v1ij*sinphi)
4397 v1ij=v1(j,itori,itori1)
4398 v2ij=v2(j,itori,itori1)
4401 etors=etors+v1ij*cosphi+v2ij*sinphi+dabs(v1ij)+dabs(v2ij)
4402 gloci=gloci+j*(v2ij*cosphi-v1ij*sinphi)
4406 & write (iout,'(2(a3,2x,i3,2x),2i3,6f8.3/26x,6f8.3/)')
4407 & restyp(itype(i-2)),i-2,restyp(itype(i-1)),i-1,itori,itori1,
4408 & (v1(j,itori,itori1),j=1,6),(v2(j,itori,itori1),j=1,6)
4409 gloc(i-3,icg)=gloc(i-3,icg)+wtor*fact*gloci
4410 c write (iout,*) 'i=',i,' gloc=',gloc(i-3,icg)
4412 ! 6/20/98 - dihedral angle constraints
4415 itori=idih_constr(i)
4418 if (difi.gt.drange(i)) then
4420 edihcnstr=edihcnstr+0.25d0*ftors*difi**4
4421 gloc(itori-3,icg)=gloc(itori-3,icg)+ftors*difi**3
4422 else if (difi.lt.-drange(i)) then
4424 edihcnstr=edihcnstr+0.25d0*ftors*difi**4
4425 gloc(itori-3,icg)=gloc(itori-3,icg)+ftors*difi**3
4427 ! write (iout,'(2i5,2f8.3,2e14.5)') i,itori,rad2deg*phii,
4428 ! & rad2deg*difi,0.25d0*ftors*difi**4,gloc(itori-3,icg)
4430 ! write (iout,*) 'edihcnstr',edihcnstr
4433 c------------------------------------------------------------------------------
4435 subroutine etor(etors,edihcnstr,fact)
4436 implicit real*8 (a-h,o-z)
4437 include 'DIMENSIONS'
4438 include 'DIMENSIONS.ZSCOPT'
4439 include 'COMMON.VAR'
4440 include 'COMMON.GEO'
4441 include 'COMMON.LOCAL'
4442 include 'COMMON.TORSION'
4443 include 'COMMON.INTERACT'
4444 include 'COMMON.DERIV'
4445 include 'COMMON.CHAIN'
4446 include 'COMMON.NAMES'
4447 include 'COMMON.IOUNITS'
4448 include 'COMMON.FFIELD'
4449 include 'COMMON.TORCNSTR'
4451 C Set lprn=.true. for debugging
4455 do i=iphi_start,iphi_end
4456 if (itype(i-2).eq.ntyp1 .or. itype(i-1).eq.ntyp1
4457 & .or. itype(i).eq.ntyp1) cycle
4458 if (itel(i-2).eq.0 .or. itel(i-1).eq.0) goto 1215
4459 if (iabs(itype(i)).eq.20) then
4464 itori=itortyp(itype(i-2))
4465 itori1=itortyp(itype(i-1))
4468 C Regular cosine and sine terms
4469 do j=1,nterm(itori,itori1,iblock)
4470 v1ij=v1(j,itori,itori1,iblock)
4471 v2ij=v2(j,itori,itori1,iblock)
4474 etors=etors+v1ij*cosphi+v2ij*sinphi
4475 gloci=gloci+j*(v2ij*cosphi-v1ij*sinphi)
4479 C E = SUM ----------------------------------- - v1
4480 C [v2 cos(phi/2)+v3 sin(phi/2)]^2 + 1
4482 cosphi=dcos(0.5d0*phii)
4483 sinphi=dsin(0.5d0*phii)
4484 do j=1,nlor(itori,itori1,iblock)
4485 vl1ij=vlor1(j,itori,itori1)
4486 vl2ij=vlor2(j,itori,itori1)
4487 vl3ij=vlor3(j,itori,itori1)
4488 pom=vl2ij*cosphi+vl3ij*sinphi
4489 pom1=1.0d0/(pom*pom+1.0d0)
4490 etors=etors+vl1ij*pom1
4491 c if (energy_dec) etors_ii=etors_ii+
4494 gloci=gloci+vl1ij*(vl3ij*cosphi-vl2ij*sinphi)*pom
4496 C Subtract the constant term
4497 etors=etors-v0(itori,itori1,iblock)
4499 & write (iout,'(2(a3,2x,i3,2x),2i3,6f8.3/26x,6f8.3/)')
4500 & restyp(itype(i-2)),i-2,restyp(itype(i-1)),i-1,itori,itori1,
4501 & (v1(j,itori,itori1,1),j=1,6),(v2(j,itori,itori1,1),j=1,6)
4502 gloc(i-3,icg)=gloc(i-3,icg)+wtor*fact*gloci
4503 c write (iout,*) 'i=',i,' gloc=',gloc(i-3,icg)
4506 ! 6/20/98 - dihedral angle constraints
4509 itori=idih_constr(i)
4511 difi=pinorm(phii-phi0(i))
4513 if (difi.gt.drange(i)) then
4515 edihcnstr=edihcnstr+0.25d0*ftors*difi**4
4516 gloc(itori-3,icg)=gloc(itori-3,icg)+ftors*difi**3
4517 edihi=0.25d0*ftors*difi**4
4518 else if (difi.lt.-drange(i)) then
4520 edihcnstr=edihcnstr+0.25d0*ftors*difi**4
4521 gloc(itori-3,icg)=gloc(itori-3,icg)+ftors*difi**3
4522 edihi=0.25d0*ftors*difi**4
4526 c write (iout,'(2i5,4f10.5,e15.5)') i,itori,phii,phi0(i),difi,
4528 ! write (iout,'(2i5,2f8.3,2e14.5)') i,itori,rad2deg*phii,
4529 ! & rad2deg*difi,0.25d0*ftors*difi**4,gloc(itori-3,icg)
4531 ! write (iout,*) 'edihcnstr',edihcnstr
4534 c----------------------------------------------------------------------------
4535 subroutine etor_d(etors_d,fact2)
4536 C 6/23/01 Compute double torsional energy
4537 implicit real*8 (a-h,o-z)
4538 include 'DIMENSIONS'
4539 include 'DIMENSIONS.ZSCOPT'
4540 include 'COMMON.VAR'
4541 include 'COMMON.GEO'
4542 include 'COMMON.LOCAL'
4543 include 'COMMON.TORSION'
4544 include 'COMMON.INTERACT'
4545 include 'COMMON.DERIV'
4546 include 'COMMON.CHAIN'
4547 include 'COMMON.NAMES'
4548 include 'COMMON.IOUNITS'
4549 include 'COMMON.FFIELD'
4550 include 'COMMON.TORCNSTR'
4552 C Set lprn=.true. for debugging
4556 do i=iphi_start,iphi_end-1
4557 if (itype(i-2).eq.ntyp1.or. itype(i-1).eq.ntyp1
4558 & .or. itype(i).eq.ntyp1 .or. itype(i+1).eq.ntyp1) cycle
4559 if (itel(i-2).eq.0 .or. itel(i-1).eq.0 .or. itel(i).eq.0)
4561 itori=itortyp(itype(i-2))
4562 itori1=itortyp(itype(i-1))
4563 itori2=itortyp(itype(i))
4569 if (iabs(itype(i+1)).eq.20) iblock=2
4570 C Regular cosine and sine terms
4571 do j=1,ntermd_1(itori,itori1,itori2,iblock)
4572 v1cij=v1c(1,j,itori,itori1,itori2,iblock)
4573 v1sij=v1s(1,j,itori,itori1,itori2,iblock)
4574 v2cij=v1c(2,j,itori,itori1,itori2,iblock)
4575 v2sij=v1s(2,j,itori,itori1,itori2,iblock)
4576 cosphi1=dcos(j*phii)
4577 sinphi1=dsin(j*phii)
4578 cosphi2=dcos(j*phii1)
4579 sinphi2=dsin(j*phii1)
4580 etors_d=etors_d+v1cij*cosphi1+v1sij*sinphi1+
4581 & v2cij*cosphi2+v2sij*sinphi2
4582 gloci1=gloci1+j*(v1sij*cosphi1-v1cij*sinphi1)
4583 gloci2=gloci2+j*(v2sij*cosphi2-v2cij*sinphi2)
4585 do k=2,ntermd_2(itori,itori1,itori2,iblock)
4587 v1cdij = v2c(k,l,itori,itori1,itori2,iblock)
4588 v2cdij = v2c(l,k,itori,itori1,itori2,iblock)
4589 v1sdij = v2s(k,l,itori,itori1,itori2,iblock)
4590 v2sdij = v2s(l,k,itori,itori1,itori2,iblock)
4591 cosphi1p2=dcos(l*phii+(k-l)*phii1)
4592 cosphi1m2=dcos(l*phii-(k-l)*phii1)
4593 sinphi1p2=dsin(l*phii+(k-l)*phii1)
4594 sinphi1m2=dsin(l*phii-(k-l)*phii1)
4595 etors_d=etors_d+v1cdij*cosphi1p2+v2cdij*cosphi1m2+
4596 & v1sdij*sinphi1p2+v2sdij*sinphi1m2
4597 gloci1=gloci1+l*(v1sdij*cosphi1p2+v2sdij*cosphi1m2
4598 & -v1cdij*sinphi1p2-v2cdij*sinphi1m2)
4599 gloci2=gloci2+(k-l)*(v1sdij*cosphi1p2-v2sdij*cosphi1m2
4600 & -v1cdij*sinphi1p2+v2cdij*sinphi1m2)
4603 gloc(i-3,icg)=gloc(i-3,icg)+wtor_d*fact2*gloci1
4604 gloc(i-2,icg)=gloc(i-2,icg)+wtor_d*fact2*gloci2
4610 c------------------------------------------------------------------------------
4611 subroutine eback_sc_corr(esccor)
4612 c 7/21/2007 Correlations between the backbone-local and side-chain-local
4613 c conformational states; temporarily implemented as differences
4614 c between UNRES torsional potentials (dependent on three types of
4615 c residues) and the torsional potentials dependent on all 20 types
4616 c of residues computed from AM1 energy surfaces of terminally-blocked
4617 c amino-acid residues.
4618 implicit real*8 (a-h,o-z)
4619 include 'DIMENSIONS'
4620 include 'DIMENSIONS.ZSCOPT'
4621 include 'COMMON.VAR'
4622 include 'COMMON.GEO'
4623 include 'COMMON.LOCAL'
4624 include 'COMMON.TORSION'
4625 include 'COMMON.SCCOR'
4626 include 'COMMON.INTERACT'
4627 include 'COMMON.DERIV'
4628 include 'COMMON.CHAIN'
4629 include 'COMMON.NAMES'
4630 include 'COMMON.IOUNITS'
4631 include 'COMMON.FFIELD'
4632 include 'COMMON.CONTROL'
4634 C Set lprn=.true. for debugging
4637 c write (iout,*) "EBACK_SC_COR",iphi_start,iphi_end,nterm_sccor
4639 do i=itau_start,itau_end
4640 if ((itype(i-2).eq.ntyp1).or.(itype(i-1).eq.ntyp1)) cycle
4642 isccori=isccortyp(itype(i-2))
4643 isccori1=isccortyp(itype(i-1))
4645 do intertyp=1,3 !intertyp
4646 cc Added 09 May 2012 (Adasko)
4647 cc Intertyp means interaction type of backbone mainchain correlation:
4648 c 1 = SC...Ca...Ca...Ca
4649 c 2 = Ca...Ca...Ca...SC
4650 c 3 = SC...Ca...Ca...SCi
4652 if (((intertyp.eq.3).and.((itype(i-2).eq.10).or.
4653 & (itype(i-1).eq.10).or.(itype(i-2).eq.ntyp1).or.
4654 & (itype(i-1).eq.ntyp1)))
4655 & .or. ((intertyp.eq.1).and.((itype(i-2).eq.10)
4656 & .or.(itype(i-2).eq.ntyp1).or.(itype(i-1).eq.ntyp1)
4657 & .or.(itype(i).eq.ntyp1)))
4658 & .or.((intertyp.eq.2).and.((itype(i-1).eq.10).or.
4659 & (itype(i-1).eq.ntyp1).or.(itype(i-2).eq.ntyp1).or.
4660 & (itype(i-3).eq.ntyp1)))) cycle
4661 if ((intertyp.eq.2).and.(i.eq.4).and.(itype(1).eq.ntyp1)) cycle
4662 if ((intertyp.eq.1).and.(i.eq.nres).and.(itype(nres).eq.ntyp1))
4664 do j=1,nterm_sccor(isccori,isccori1)
4665 v1ij=v1sccor(j,intertyp,isccori,isccori1)
4666 v2ij=v2sccor(j,intertyp,isccori,isccori1)
4667 cosphi=dcos(j*tauangle(intertyp,i))
4668 sinphi=dsin(j*tauangle(intertyp,i))
4669 esccor=esccor+v1ij*cosphi+v2ij*sinphi
4670 gloci=gloci+j*(v2ij*cosphi-v1ij*sinphi)
4672 c write (iout,*) "EBACK_SC_COR",i,v1ij*cosphi+v2ij*sinphi,intertyp,
4673 c & nterm_sccor(isccori,isccori1),isccori,isccori1
4674 c gloc_sc(intertyp,i-3,icg)=gloc_sc(intertyp,i-3,icg)+wsccor*gloci
4676 & write (iout,'(2(a3,2x,i3,2x),2i3,6f8.3/26x,6f8.3/)')
4677 & restyp(itype(i-2)),i-2,restyp(itype(i-1)),i-1,itori,itori1,
4678 & (v1sccor(j,1,itori,itori1),j=1,6)
4679 & ,(v2sccor(j,1,itori,itori1),j=1,6)
4680 c gsccor_loc(i-3)=gloci
4685 c------------------------------------------------------------------------------
4686 subroutine multibody(ecorr)
4687 C This subroutine calculates multi-body contributions to energy following
4688 C the idea of Skolnick et al. If side chains I and J make a contact and
4689 C at the same time side chains I+1 and J+1 make a contact, an extra
4690 C contribution equal to sqrt(eps(i,j)*eps(i+1,j+1)) is added.
4691 implicit real*8 (a-h,o-z)
4692 include 'DIMENSIONS'
4693 include 'COMMON.IOUNITS'
4694 include 'COMMON.DERIV'
4695 include 'COMMON.INTERACT'
4696 include 'COMMON.CONTACTS'
4697 double precision gx(3),gx1(3)
4700 C Set lprn=.true. for debugging
4704 write (iout,'(a)') 'Contact function values:'
4706 write (iout,'(i2,20(1x,i2,f10.5))')
4707 & i,(jcont(j,i),facont(j,i),j=1,num_cont(i))
4722 num_conti=num_cont(i)
4723 num_conti1=num_cont(i1)
4728 if (j1.eq.j+ishift .or. j1.eq.j-ishift) then
4729 cd write(iout,*)'i=',i,' j=',j,' i1=',i1,' j1=',j1,
4730 cd & ' ishift=',ishift
4731 C Contacts I--J and I+ISHIFT--J+-ISHIFT1 occur simultaneously.
4732 C The system gains extra energy.
4733 ecorr=ecorr+esccorr(i,j,i1,j1,jj,kk)
4734 endif ! j1==j+-ishift
4743 c------------------------------------------------------------------------------
4744 double precision function esccorr(i,j,k,l,jj,kk)
4745 implicit real*8 (a-h,o-z)
4746 include 'DIMENSIONS'
4747 include 'COMMON.IOUNITS'
4748 include 'COMMON.DERIV'
4749 include 'COMMON.INTERACT'
4750 include 'COMMON.CONTACTS'
4751 double precision gx(3),gx1(3)
4756 cd write (iout,'(4i5,3f10.5)') i,j,k,l,eij,ekl,-eij*ekl
4757 C Calculate the multi-body contribution to energy.
4758 C Calculate multi-body contributions to the gradient.
4759 cd write (iout,'(2(2i3,3f10.5))')i,j,(gacont(m,jj,i),m=1,3),
4760 cd & k,l,(gacont(m,kk,k),m=1,3)
4762 gx(m) =ekl*gacont(m,jj,i)
4763 gx1(m)=eij*gacont(m,kk,k)
4764 gradxorr(m,i)=gradxorr(m,i)-gx(m)
4765 gradxorr(m,j)=gradxorr(m,j)+gx(m)
4766 gradxorr(m,k)=gradxorr(m,k)-gx1(m)
4767 gradxorr(m,l)=gradxorr(m,l)+gx1(m)
4771 gradcorr(ll,m)=gradcorr(ll,m)+gx(ll)
4776 gradcorr(ll,m)=gradcorr(ll,m)+gx1(ll)
4782 c------------------------------------------------------------------------------
4784 subroutine pack_buffer(dimen1,dimen2,atom,indx,buffer)
4785 implicit real*8 (a-h,o-z)
4786 include 'DIMENSIONS'
4787 integer dimen1,dimen2,atom,indx
4788 double precision buffer(dimen1,dimen2)
4789 double precision zapas
4790 common /contacts_hb/ zapas(3,ntyp,maxres,7),
4791 & facont_hb(ntyp,maxres),ees0p(ntyp,maxres),ees0m(ntyp,maxres),
4792 & num_cont_hb(maxres),jcont_hb(ntyp,maxres)
4793 num_kont=num_cont_hb(atom)
4797 buffer(i,indx+(k-1)*3+j)=zapas(j,i,atom,k)
4800 buffer(i,indx+22)=facont_hb(i,atom)
4801 buffer(i,indx+23)=ees0p(i,atom)
4802 buffer(i,indx+24)=ees0m(i,atom)
4803 buffer(i,indx+25)=dfloat(jcont_hb(i,atom))
4805 buffer(1,indx+26)=dfloat(num_kont)
4808 c------------------------------------------------------------------------------
4809 subroutine unpack_buffer(dimen1,dimen2,atom,indx,buffer)
4810 implicit real*8 (a-h,o-z)
4811 include 'DIMENSIONS'
4812 integer dimen1,dimen2,atom,indx
4813 double precision buffer(dimen1,dimen2)
4814 double precision zapas
4815 common /contacts_hb/ zapas(3,ntyp,maxres,7),
4816 & facont_hb(ntyp,maxres),ees0p(ntyp,maxres),
4817 & ees0m(ntyp,maxres),
4818 & num_cont_hb(maxres),jcont_hb(ntyp,maxres)
4819 num_kont=buffer(1,indx+26)
4820 num_kont_old=num_cont_hb(atom)
4821 num_cont_hb(atom)=num_kont+num_kont_old
4826 zapas(j,ii,atom,k)=buffer(i,indx+(k-1)*3+j)
4829 facont_hb(ii,atom)=buffer(i,indx+22)
4830 ees0p(ii,atom)=buffer(i,indx+23)
4831 ees0m(ii,atom)=buffer(i,indx+24)
4832 jcont_hb(ii,atom)=buffer(i,indx+25)
4836 c------------------------------------------------------------------------------
4838 subroutine multibody_hb(ecorr,ecorr5,ecorr6,n_corr,n_corr1)
4839 C This subroutine calculates multi-body contributions to hydrogen-bonding
4840 implicit real*8 (a-h,o-z)
4841 include 'DIMENSIONS'
4842 include 'DIMENSIONS.ZSCOPT'
4843 include 'COMMON.IOUNITS'
4845 include 'COMMON.INFO'
4847 include 'COMMON.FFIELD'
4848 include 'COMMON.DERIV'
4849 include 'COMMON.INTERACT'
4850 include 'COMMON.CONTACTS'
4852 parameter (max_cont=maxconts)
4853 parameter (max_dim=2*(8*3+2))
4854 parameter (msglen1=max_cont*max_dim*4)
4855 parameter (msglen2=2*msglen1)
4856 integer source,CorrelType,CorrelID,Error
4857 double precision buffer(max_cont,max_dim)
4859 double precision gx(3),gx1(3)
4862 C Set lprn=.true. for debugging
4867 if (fgProcs.le.1) goto 30
4869 write (iout,'(a)') 'Contact function values:'
4871 write (iout,'(2i3,50(1x,i2,f5.2))')
4872 & i,num_cont_hb(i),(jcont_hb(j,i),facont_hb(j,i),
4873 & j=1,num_cont_hb(i))
4876 C Caution! Following code assumes that electrostatic interactions concerning
4877 C a given atom are split among at most two processors!
4887 cd write (iout,*) 'MyRank',MyRank,' mm',mm
4890 cd write (iout,*) 'Sending: MyRank',MyRank,' mm',mm,' ldone',ldone
4891 if (MyRank.gt.0) then
4892 C Send correlation contributions to the preceding processor
4894 nn=num_cont_hb(iatel_s)
4895 call pack_buffer(max_cont,max_dim,iatel_s,0,buffer)
4896 cd write (iout,*) 'The BUFFER array:'
4898 cd write (iout,'(i2,9(3f8.3,2x))') i,(buffer(i,j),j=1,26)
4900 if (ielstart(iatel_s).gt.iatel_s+ispp) then
4902 call pack_buffer(max_cont,max_dim,iatel_s+1,26,buffer)
4903 C Clear the contacts of the atom passed to the neighboring processor
4904 nn=num_cont_hb(iatel_s+1)
4906 cd write (iout,'(i2,9(3f8.3,2x))') i,(buffer(i,j+26),j=1,26)
4908 num_cont_hb(iatel_s)=0
4910 cd write (iout,*) 'Processor ',MyID,MyRank,
4911 cd & ' is sending correlation contribution to processor',MyID-1,
4912 cd & ' msglen=',msglen
4913 cd write (*,*) 'Processor ',MyID,MyRank,
4914 cd & ' is sending correlation contribution to processor',MyID-1,
4915 cd & ' msglen=',msglen,' CorrelType=',CorrelType
4916 call mp_bsend(buffer,msglen,MyID-1,CorrelType,CorrelID)
4917 cd write (iout,*) 'Processor ',MyID,
4918 cd & ' has sent correlation contribution to processor',MyID-1,
4919 cd & ' msglen=',msglen,' CorrelID=',CorrelID
4920 cd write (*,*) 'Processor ',MyID,
4921 cd & ' has sent correlation contribution to processor',MyID-1,
4922 cd & ' msglen=',msglen,' CorrelID=',CorrelID
4924 endif ! (MyRank.gt.0)
4928 cd write (iout,*) 'Receiving: MyRank',MyRank,' mm',mm,' ldone',ldone
4929 if (MyRank.lt.fgProcs-1) then
4930 C Receive correlation contributions from the next processor
4932 if (ielend(iatel_e).lt.nct-1) msglen=msglen2
4933 cd write (iout,*) 'Processor',MyID,
4934 cd & ' is receiving correlation contribution from processor',MyID+1,
4935 cd & ' msglen=',msglen,' CorrelType=',CorrelType
4936 cd write (*,*) 'Processor',MyID,
4937 cd & ' is receiving correlation contribution from processor',MyID+1,
4938 cd & ' msglen=',msglen,' CorrelType=',CorrelType
4940 do while (nbytes.le.0)
4941 call mp_probe(MyID+1,CorrelType,nbytes)
4943 cd print *,'Processor',MyID,' msglen',msglen,' nbytes',nbytes
4944 call mp_brecv(buffer,msglen,MyID+1,CorrelType,nbytes)
4945 cd write (iout,*) 'Processor',MyID,
4946 cd & ' has received correlation contribution from processor',MyID+1,
4947 cd & ' msglen=',msglen,' nbytes=',nbytes
4948 cd write (iout,*) 'The received BUFFER array:'
4950 cd write (iout,'(i2,9(3f8.3,2x))') i,(buffer(i,j),j=1,52)
4952 if (msglen.eq.msglen1) then
4953 call unpack_buffer(max_cont,max_dim,iatel_e+1,0,buffer)
4954 else if (msglen.eq.msglen2) then
4955 call unpack_buffer(max_cont,max_dim,iatel_e,0,buffer)
4956 call unpack_buffer(max_cont,max_dim,iatel_e+1,26,buffer)
4959 & 'ERROR!!!! message length changed while processing correlations.'
4961 & 'ERROR!!!! message length changed while processing correlations.'
4962 call mp_stopall(Error)
4963 endif ! msglen.eq.msglen1
4964 endif ! MyRank.lt.fgProcs-1
4971 write (iout,'(a)') 'Contact function values:'
4973 write (iout,'(2i3,50(1x,i2,f5.2))')
4974 & i,num_cont_hb(i),(jcont_hb(j,i),facont_hb(j,i),
4975 & j=1,num_cont_hb(i))
4979 C Remove the loop below after debugging !!!
4986 C Calculate the local-electrostatic correlation terms
4987 do i=iatel_s,iatel_e+1
4989 num_conti=num_cont_hb(i)
4990 num_conti1=num_cont_hb(i+1)
4995 c write (iout,*) 'i=',i,' j=',j,' i1=',i1,' j1=',j1,
4996 c & ' jj=',jj,' kk=',kk
4997 if (j1.eq.j+1 .or. j1.eq.j-1) then
4998 C Contacts I-J and (I+1)-(J+1) or (I+1)-(J-1) occur simultaneously.
4999 C The system gains extra energy.
5000 ecorr=ecorr+ehbcorr(i,j,i+1,j1,jj,kk,0.72D0,0.32D0)
5002 else if (j1.eq.j) then
5003 C Contacts I-J and I-(J+1) occur simultaneously.
5004 C The system loses extra energy.
5005 c ecorr=ecorr+ehbcorr(i,j,i+1,j,jj,kk,0.60D0,-0.40D0)
5010 c write (iout,*) 'i=',i,' j=',j,' i1=',i1,' j1=',j1,
5011 c & ' jj=',jj,' kk=',kk
5013 C Contacts I-J and (I+1)-J occur simultaneously.
5014 C The system loses extra energy.
5015 c ecorr=ecorr+ehbcorr(i,j,i,j+1,jj,kk,0.60D0,-0.40D0)
5022 c------------------------------------------------------------------------------
5023 subroutine multibody_eello(ecorr,ecorr5,ecorr6,eturn6,n_corr,
5025 C This subroutine calculates multi-body contributions to hydrogen-bonding
5026 implicit real*8 (a-h,o-z)
5027 include 'DIMENSIONS'
5028 include 'DIMENSIONS.ZSCOPT'
5029 include 'COMMON.IOUNITS'
5031 include 'COMMON.INFO'
5033 include 'COMMON.FFIELD'
5034 include 'COMMON.DERIV'
5035 include 'COMMON.INTERACT'
5036 include 'COMMON.CONTACTS'
5038 parameter (max_cont=maxconts)
5039 parameter (max_dim=2*(8*3+2))
5040 parameter (msglen1=max_cont*max_dim*4)
5041 parameter (msglen2=2*msglen1)
5042 integer source,CorrelType,CorrelID,Error
5043 double precision buffer(max_cont,max_dim)
5045 double precision gx(3),gx1(3)
5048 C Set lprn=.true. for debugging
5054 if (fgProcs.le.1) goto 30
5056 write (iout,'(a)') 'Contact function values:'
5058 write (iout,'(2i3,50(1x,i2,f5.2))')
5059 & i,num_cont_hb(i),(jcont_hb(j,i),facont_hb(j,i),
5060 & j=1,num_cont_hb(i))
5063 C Caution! Following code assumes that electrostatic interactions concerning
5064 C a given atom are split among at most two processors!
5074 cd write (iout,*) 'MyRank',MyRank,' mm',mm
5077 cd write (iout,*) 'Sending: MyRank',MyRank,' mm',mm,' ldone',ldone
5078 if (MyRank.gt.0) then
5079 C Send correlation contributions to the preceding processor
5081 nn=num_cont_hb(iatel_s)
5082 call pack_buffer(max_cont,max_dim,iatel_s,0,buffer)
5083 cd write (iout,*) 'The BUFFER array:'
5085 cd write (iout,'(i2,9(3f8.3,2x))') i,(buffer(i,j),j=1,26)
5087 if (ielstart(iatel_s).gt.iatel_s+ispp) then
5089 call pack_buffer(max_cont,max_dim,iatel_s+1,26,buffer)
5090 C Clear the contacts of the atom passed to the neighboring processor
5091 nn=num_cont_hb(iatel_s+1)
5093 cd write (iout,'(i2,9(3f8.3,2x))') i,(buffer(i,j+26),j=1,26)
5095 num_cont_hb(iatel_s)=0
5097 cd write (iout,*) 'Processor ',MyID,MyRank,
5098 cd & ' is sending correlation contribution to processor',MyID-1,
5099 cd & ' msglen=',msglen
5100 cd write (*,*) 'Processor ',MyID,MyRank,
5101 cd & ' is sending correlation contribution to processor',MyID-1,
5102 cd & ' msglen=',msglen,' CorrelType=',CorrelType
5103 call mp_bsend(buffer,msglen,MyID-1,CorrelType,CorrelID)
5104 cd write (iout,*) 'Processor ',MyID,
5105 cd & ' has sent correlation contribution to processor',MyID-1,
5106 cd & ' msglen=',msglen,' CorrelID=',CorrelID
5107 cd write (*,*) 'Processor ',MyID,
5108 cd & ' has sent correlation contribution to processor',MyID-1,
5109 cd & ' msglen=',msglen,' CorrelID=',CorrelID
5111 endif ! (MyRank.gt.0)
5115 cd write (iout,*) 'Receiving: MyRank',MyRank,' mm',mm,' ldone',ldone
5116 if (MyRank.lt.fgProcs-1) then
5117 C Receive correlation contributions from the next processor
5119 if (ielend(iatel_e).lt.nct-1) msglen=msglen2
5120 cd write (iout,*) 'Processor',MyID,
5121 cd & ' is receiving correlation contribution from processor',MyID+1,
5122 cd & ' msglen=',msglen,' CorrelType=',CorrelType
5123 cd write (*,*) 'Processor',MyID,
5124 cd & ' is receiving correlation contribution from processor',MyID+1,
5125 cd & ' msglen=',msglen,' CorrelType=',CorrelType
5127 do while (nbytes.le.0)
5128 call mp_probe(MyID+1,CorrelType,nbytes)
5130 cd print *,'Processor',MyID,' msglen',msglen,' nbytes',nbytes
5131 call mp_brecv(buffer,msglen,MyID+1,CorrelType,nbytes)
5132 cd write (iout,*) 'Processor',MyID,
5133 cd & ' has received correlation contribution from processor',MyID+1,
5134 cd & ' msglen=',msglen,' nbytes=',nbytes
5135 cd write (iout,*) 'The received BUFFER array:'
5137 cd write (iout,'(i2,9(3f8.3,2x))') i,(buffer(i,j),j=1,52)
5139 if (msglen.eq.msglen1) then
5140 call unpack_buffer(max_cont,max_dim,iatel_e+1,0,buffer)
5141 else if (msglen.eq.msglen2) then
5142 call unpack_buffer(max_cont,max_dim,iatel_e,0,buffer)
5143 call unpack_buffer(max_cont,max_dim,iatel_e+1,26,buffer)
5146 & 'ERROR!!!! message length changed while processing correlations.'
5148 & 'ERROR!!!! message length changed while processing correlations.'
5149 call mp_stopall(Error)
5150 endif ! msglen.eq.msglen1
5151 endif ! MyRank.lt.fgProcs-1
5158 write (iout,'(a)') 'Contact function values:'
5160 write (iout,'(2i3,50(1x,i2,f5.2))')
5161 & i,num_cont_hb(i),(jcont_hb(j,i),facont_hb(j,i),
5162 & j=1,num_cont_hb(i))
5168 C Remove the loop below after debugging !!!
5175 C Calculate the dipole-dipole interaction energies
5176 if (wcorr6.gt.0.0d0 .or. wturn6.gt.0.0d0) then
5177 do i=iatel_s,iatel_e+1
5178 num_conti=num_cont_hb(i)
5185 C Calculate the local-electrostatic correlation terms
5186 do i=iatel_s,iatel_e+1
5188 num_conti=num_cont_hb(i)
5189 num_conti1=num_cont_hb(i+1)
5194 c write (*,*) 'i=',i,' j=',j,' i1=',i1,' j1=',j1,
5195 c & ' jj=',jj,' kk=',kk
5196 if (j1.eq.j+1 .or. j1.eq.j-1) then
5197 C Contacts I-J and (I+1)-(J+1) or (I+1)-(J-1) occur simultaneously.
5198 C The system gains extra energy.
5200 sqd1=dsqrt(d_cont(jj,i))
5201 sqd2=dsqrt(d_cont(kk,i1))
5202 sred_geom = sqd1*sqd2
5203 IF (sred_geom.lt.cutoff_corr) THEN
5204 call gcont(sred_geom,r0_corr,1.0D0,delt_corr,
5206 c write (*,*) 'i=',i,' j=',j,' i1=',i1,' j1=',j1,
5207 c & ' jj=',jj,' kk=',kk
5208 fac_prim1=0.5d0*sqd2/sqd1*fprimcont
5209 fac_prim2=0.5d0*sqd1/sqd2*fprimcont
5211 g_contij(l,1)=fac_prim1*grij_hb_cont(l,jj,i)
5212 g_contij(l,2)=fac_prim2*grij_hb_cont(l,kk,i1)
5215 cd write (iout,*) 'sred_geom=',sred_geom,
5216 cd & ' ekont=',ekont,' fprim=',fprimcont
5217 call calc_eello(i,j,i+1,j1,jj,kk)
5218 if (wcorr4.gt.0.0d0)
5219 & ecorr=ecorr+eello4(i,j,i+1,j1,jj,kk)
5220 if (wcorr5.gt.0.0d0)
5221 & ecorr5=ecorr5+eello5(i,j,i+1,j1,jj,kk)
5222 c print *,"wcorr5",ecorr5
5223 cd write(2,*)'wcorr6',wcorr6,' wturn6',wturn6
5224 cd write(2,*)'ijkl',i,j,i+1,j1
5225 if (wcorr6.gt.0.0d0 .and. (j.ne.i+4 .or. j1.ne.i+3
5226 & .or. wturn6.eq.0.0d0))then
5227 cd write (iout,*) '******ecorr6: i,j,i+1,j1',i,j,i+1,j1
5228 ecorr6=ecorr6+eello6(i,j,i+1,j1,jj,kk)
5229 cd write (iout,*) 'ecorr',ecorr,' ecorr5=',ecorr5,
5230 cd & 'ecorr6=',ecorr6
5231 cd write (iout,'(4e15.5)') sred_geom,
5232 cd & dabs(eello4(i,j,i+1,j1,jj,kk)),
5233 cd & dabs(eello5(i,j,i+1,j1,jj,kk)),
5234 cd & dabs(eello6(i,j,i+1,j1,jj,kk))
5235 else if (wturn6.gt.0.0d0
5236 & .and. (j.eq.i+4 .and. j1.eq.i+3)) then
5237 cd write (iout,*) '******eturn6: i,j,i+1,j1',i,j,i+1,j1
5238 eturn6=eturn6+eello_turn6(i,jj,kk)
5239 cd write (2,*) 'multibody_eello:eturn6',eturn6
5243 else if (j1.eq.j) then
5244 C Contacts I-J and I-(J+1) occur simultaneously.
5245 C The system loses extra energy.
5246 c ecorr=ecorr+ehbcorr(i,j,i+1,j,jj,kk,0.60D0,-0.40D0)
5251 c write (iout,*) 'i=',i,' j=',j,' i1=',i1,' j1=',j1,
5252 c & ' jj=',jj,' kk=',kk
5254 C Contacts I-J and (I+1)-J occur simultaneously.
5255 C The system loses extra energy.
5256 c ecorr=ecorr+ehbcorr(i,j,i,j+1,jj,kk,0.60D0,-0.40D0)
5263 c------------------------------------------------------------------------------
5264 double precision function ehbcorr(i,j,k,l,jj,kk,coeffp,coeffm)
5265 implicit real*8 (a-h,o-z)
5266 include 'DIMENSIONS'
5267 include 'COMMON.IOUNITS'
5268 include 'COMMON.DERIV'
5269 include 'COMMON.INTERACT'
5270 include 'COMMON.CONTACTS'
5271 double precision gx(3),gx1(3)
5281 ees=-(coeffp*ees0pij*ees0pkl+coeffm*ees0mij*ees0mkl)
5282 cd ees=-(coeffp*ees0pkl+coeffm*ees0mkl)
5283 C Following 4 lines for diagnostics.
5288 c write (iout,*)'Contacts have occurred for peptide groups',i,j,
5290 c write (iout,*)'Contacts have occurred for peptide groups',
5291 c & i,j,' fcont:',eij,' eij',' eesij',ees0pij,ees0mij,' and ',k,l
5292 c & ,' fcont ',ekl,' eeskl',ees0pkl,ees0mkl,' ees=',ees
5293 C Calculate the multi-body contribution to energy.
5294 ecorr=ecorr+ekont*ees
5296 C Calculate multi-body contributions to the gradient.
5298 ghalf=0.5D0*ees*ekl*gacont_hbr(ll,jj,i)
5299 gradcorr(ll,i)=gradcorr(ll,i)+ghalf
5300 & -ekont*(coeffp*ees0pkl*gacontp_hb1(ll,jj,i)+
5301 & coeffm*ees0mkl*gacontm_hb1(ll,jj,i))
5302 gradcorr(ll,j)=gradcorr(ll,j)+ghalf
5303 & -ekont*(coeffp*ees0pkl*gacontp_hb2(ll,jj,i)+
5304 & coeffm*ees0mkl*gacontm_hb2(ll,jj,i))
5305 ghalf=0.5D0*ees*eij*gacont_hbr(ll,kk,k)
5306 gradcorr(ll,k)=gradcorr(ll,k)+ghalf
5307 & -ekont*(coeffp*ees0pij*gacontp_hb1(ll,kk,k)+
5308 & coeffm*ees0mij*gacontm_hb1(ll,kk,k))
5309 gradcorr(ll,l)=gradcorr(ll,l)+ghalf
5310 & -ekont*(coeffp*ees0pij*gacontp_hb2(ll,kk,k)+
5311 & coeffm*ees0mij*gacontm_hb2(ll,kk,k))
5315 gradcorr(ll,m)=gradcorr(ll,m)+
5316 & ees*ekl*gacont_hbr(ll,jj,i)-
5317 & ekont*(coeffp*ees0pkl*gacontp_hb3(ll,jj,i)+
5318 & coeffm*ees0mkl*gacontm_hb3(ll,jj,i))
5323 gradcorr(ll,m)=gradcorr(ll,m)+
5324 & ees*eij*gacont_hbr(ll,kk,k)-
5325 & ekont*(coeffp*ees0pij*gacontp_hb3(ll,kk,k)+
5326 & coeffm*ees0mij*gacontm_hb3(ll,kk,k))
5333 C---------------------------------------------------------------------------
5334 subroutine dipole(i,j,jj)
5335 implicit real*8 (a-h,o-z)
5336 include 'DIMENSIONS'
5337 include 'DIMENSIONS.ZSCOPT'
5338 include 'COMMON.IOUNITS'
5339 include 'COMMON.CHAIN'
5340 include 'COMMON.FFIELD'
5341 include 'COMMON.DERIV'
5342 include 'COMMON.INTERACT'
5343 include 'COMMON.CONTACTS'
5344 include 'COMMON.TORSION'
5345 include 'COMMON.VAR'
5346 include 'COMMON.GEO'
5347 dimension dipi(2,2),dipj(2,2),dipderi(2),dipderj(2),auxvec(2),
5349 iti1 = itortyp(itype(i+1))
5350 if (j.lt.nres-1) then
5351 if (itype(j).le.ntyp) then
5352 itj1 = itortyp(itype(j+1))
5360 dipi(iii,1)=Ub2(iii,i)
5361 dipderi(iii)=Ub2der(iii,i)
5362 dipi(iii,2)=b1(iii,i+1)
5363 dipj(iii,1)=Ub2(iii,j)
5364 dipderj(iii)=Ub2der(iii,j)
5365 dipj(iii,2)=b1(iii,j+1)
5369 call matvec2(a_chuj(1,1,jj,i),dipj(1,iii),auxvec(1))
5372 dip(kkk,jj,i)=scalar2(dipi(1,jjj),auxvec(1))
5375 if (.not.calc_grad) return
5380 call matvec2(a_chuj_der(1,1,lll,kkk,jj,i),dipj(1,iii),
5384 dipderx(lll,kkk,mmm,jj,i)=scalar2(dipi(1,jjj),auxvec(1))
5389 call transpose2(a_chuj(1,1,jj,i),auxmat(1,1))
5390 call matvec2(auxmat(1,1),dipderi(1),auxvec(1))
5392 dipderg(iii,jj,i)=scalar2(auxvec(1),dipj(1,iii))
5394 call matvec2(a_chuj(1,1,jj,i),dipderj(1),auxvec(1))
5396 dipderg(iii+2,jj,i)=scalar2(auxvec(1),dipi(1,iii))
5400 C---------------------------------------------------------------------------
5401 subroutine calc_eello(i,j,k,l,jj,kk)
5403 C This subroutine computes matrices and vectors needed to calculate
5404 C the fourth-, fifth-, and sixth-order local-electrostatic terms.
5406 implicit real*8 (a-h,o-z)
5407 include 'DIMENSIONS'
5408 include 'DIMENSIONS.ZSCOPT'
5409 include 'COMMON.IOUNITS'
5410 include 'COMMON.CHAIN'
5411 include 'COMMON.DERIV'
5412 include 'COMMON.INTERACT'
5413 include 'COMMON.CONTACTS'
5414 include 'COMMON.TORSION'
5415 include 'COMMON.VAR'
5416 include 'COMMON.GEO'
5417 include 'COMMON.FFIELD'
5418 double precision aa1(2,2),aa2(2,2),aa1t(2,2),aa2t(2,2),
5419 & aa1tder(2,2,3,5),aa2tder(2,2,3,5),auxmat(2,2)
5422 cd write (iout,*) 'calc_eello: i=',i,' j=',j,' k=',k,' l=',l,
5423 cd & ' jj=',jj,' kk=',kk
5424 cd if (i.ne.2 .or. j.ne.4 .or. k.ne.3 .or. l.ne.5) return
5427 aa1(iii,jjj)=a_chuj(iii,jjj,jj,i)
5428 aa2(iii,jjj)=a_chuj(iii,jjj,kk,k)
5431 call transpose2(aa1(1,1),aa1t(1,1))
5432 call transpose2(aa2(1,1),aa2t(1,1))
5435 call transpose2(a_chuj_der(1,1,lll,kkk,jj,i),
5436 & aa1tder(1,1,lll,kkk))
5437 call transpose2(a_chuj_der(1,1,lll,kkk,kk,k),
5438 & aa2tder(1,1,lll,kkk))
5442 C parallel orientation of the two CA-CA-CA frames.
5443 if (i.gt.1 .and. itype(i).le.ntyp) then
5444 iti=itortyp(itype(i))
5448 itk1=itortyp(itype(k+1))
5449 itj=itortyp(itype(j))
5450 if (l.lt.nres-1 .and. itype(l+1).le.ntyp) then
5451 itl1=itortyp(itype(l+1))
5455 C A1 kernel(j+1) A2T
5457 cd write (iout,'(3f10.5,5x,3f10.5)')
5458 cd & (EUg(iii,jjj,k),jjj=1,2),(EUg(iii,jjj,l),jjj=1,2)
5460 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
5461 & aa2tder(1,1,1,1),1,.false.,EUg(1,1,l),EUgder(1,1,l),
5462 & AEA(1,1,1),AEAderg(1,1,1),AEAderx(1,1,1,1,1,1))
5463 C Following matrices are needed only for 6-th order cumulants
5464 IF (wcorr6.gt.0.0d0) THEN
5465 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
5466 & aa2tder(1,1,1,1),1,.false.,EUgC(1,1,l),EUgCder(1,1,l),
5467 & AECA(1,1,1),AECAderg(1,1,1),AECAderx(1,1,1,1,1,1))
5468 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
5469 & aa2tder(1,1,1,1),2,.false.,Ug2DtEUg(1,1,l),
5470 & Ug2DtEUgder(1,1,1,l),ADtEA(1,1,1),ADtEAderg(1,1,1,1),
5471 & ADtEAderx(1,1,1,1,1,1))
5473 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
5474 & aa2tder(1,1,1,1),2,.false.,DtUg2EUg(1,1,l),
5475 & DtUg2EUgder(1,1,1,l),ADtEA1(1,1,1),ADtEA1derg(1,1,1,1),
5476 & ADtEA1derx(1,1,1,1,1,1))
5478 C End 6-th order cumulants
5481 cd write (2,*) 'In calc_eello6'
5483 cd write (2,*) 'iii=',iii
5485 cd write (2,*) 'kkk=',kkk
5487 cd write (2,'(3(2f10.5),5x)')
5488 cd & ((ADtEA1derx(jjj,mmm,lll,kkk,iii,1),mmm=1,2),lll=1,3)
5493 call transpose2(EUgder(1,1,k),auxmat(1,1))
5494 call matmat2(auxmat(1,1),AEA(1,1,1),EAEAderg(1,1,1,1))
5495 call transpose2(EUg(1,1,k),auxmat(1,1))
5496 call matmat2(auxmat(1,1),AEA(1,1,1),EAEA(1,1,1))
5497 call matmat2(auxmat(1,1),AEAderg(1,1,1),EAEAderg(1,1,2,1))
5501 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,1),
5502 & EAEAderx(1,1,lll,kkk,iii,1))
5506 C A1T kernel(i+1) A2
5507 call kernel(aa1t(1,1),aa2(1,1),aa1tder(1,1,1,1),
5508 & a_chuj_der(1,1,1,1,kk,k),1,.false.,EUg(1,1,k),EUgder(1,1,k),
5509 & AEA(1,1,2),AEAderg(1,1,2),AEAderx(1,1,1,1,1,2))
5510 C Following matrices are needed only for 6-th order cumulants
5511 IF (wcorr6.gt.0.0d0) THEN
5512 call kernel(aa1t(1,1),aa2(1,1),aa1tder(1,1,1,1),
5513 & a_chuj_der(1,1,1,1,kk,k),1,.false.,EUgC(1,1,k),EUgCder(1,1,k),
5514 & AECA(1,1,2),AECAderg(1,1,2),AECAderx(1,1,1,1,1,2))
5515 call kernel(aa1t(1,1),aa2(1,1),aa1tder(1,1,1,1),
5516 & a_chuj_der(1,1,1,1,kk,k),2,.false.,Ug2DtEUg(1,1,k),
5517 & Ug2DtEUgder(1,1,1,k),ADtEA(1,1,2),ADtEAderg(1,1,1,2),
5518 & ADtEAderx(1,1,1,1,1,2))
5519 call kernel(aa1t(1,1),aa2(1,1),aa1tder(1,1,1,1),
5520 & a_chuj_der(1,1,1,1,kk,k),2,.false.,DtUg2EUg(1,1,k),
5521 & DtUg2EUgder(1,1,1,k),ADtEA1(1,1,2),ADtEA1derg(1,1,1,2),
5522 & ADtEA1derx(1,1,1,1,1,2))
5524 C End 6-th order cumulants
5525 call transpose2(EUgder(1,1,l),auxmat(1,1))
5526 call matmat2(auxmat(1,1),AEA(1,1,2),EAEAderg(1,1,1,2))
5527 call transpose2(EUg(1,1,l),auxmat(1,1))
5528 call matmat2(auxmat(1,1),AEA(1,1,2),EAEA(1,1,2))
5529 call matmat2(auxmat(1,1),AEAderg(1,1,2),EAEAderg(1,1,2,2))
5533 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,2),
5534 & EAEAderx(1,1,lll,kkk,iii,2))
5539 C Calculate the vectors and their derivatives in virtual-bond dihedral angles.
5540 C They are needed only when the fifth- or the sixth-order cumulants are
5542 IF (wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0) THEN
5543 call transpose2(AEA(1,1,1),auxmat(1,1))
5544 call matvec2(auxmat(1,1),b1(1,i),AEAb1(1,1,1))
5545 call matvec2(auxmat(1,1),Ub2(1,i),AEAb2(1,1,1))
5546 call matvec2(auxmat(1,1),Ub2der(1,i),AEAb2derg(1,2,1,1))
5547 call transpose2(AEAderg(1,1,1),auxmat(1,1))
5548 call matvec2(auxmat(1,1),b1(1,i),AEAb1derg(1,1,1))
5549 call matvec2(auxmat(1,1),Ub2(1,i),AEAb2derg(1,1,1,1))
5550 call matvec2(AEA(1,1,1),b1(1,k+1),AEAb1(1,2,1))
5551 call matvec2(AEAderg(1,1,1),b1(1,k+1),AEAb1derg(1,2,1))
5552 call matvec2(AEA(1,1,1),Ub2(1,k+1),AEAb2(1,2,1))
5553 call matvec2(AEAderg(1,1,1),Ub2(1,k+1),AEAb2derg(1,1,2,1))
5554 call matvec2(AEA(1,1,1),Ub2der(1,k+1),AEAb2derg(1,2,2,1))
5555 call transpose2(AEA(1,1,2),auxmat(1,1))
5556 call matvec2(auxmat(1,1),b1(1,j),AEAb1(1,1,2))
5557 call matvec2(auxmat(1,1),Ub2(1,j),AEAb2(1,1,2))
5558 call matvec2(auxmat(1,1),Ub2der(1,j),AEAb2derg(1,2,1,2))
5559 call transpose2(AEAderg(1,1,2),auxmat(1,1))
5560 call matvec2(auxmat(1,1),b1(1,j),AEAb1derg(1,1,2))
5561 call matvec2(auxmat(1,1),Ub2(1,j),AEAb2derg(1,1,1,2))
5562 call matvec2(AEA(1,1,2),b1(1,l+1),AEAb1(1,2,2))
5563 call matvec2(AEAderg(1,1,2),b1(1,l+1),AEAb1derg(1,2,2))
5564 call matvec2(AEA(1,1,2),Ub2(1,l+1),AEAb2(1,2,2))
5565 call matvec2(AEAderg(1,1,2),Ub2(1,l+1),AEAb2derg(1,1,2,2))
5566 call matvec2(AEA(1,1,2),Ub2der(1,l+1),AEAb2derg(1,2,2,2))
5567 C Calculate the Cartesian derivatives of the vectors.
5571 call transpose2(AEAderx(1,1,lll,kkk,iii,1),auxmat(1,1))
5572 call matvec2(auxmat(1,1),b1(1,i),
5573 & AEAb1derx(1,lll,kkk,iii,1,1))
5574 call matvec2(auxmat(1,1),Ub2(1,i),
5575 & AEAb2derx(1,lll,kkk,iii,1,1))
5576 call matvec2(AEAderx(1,1,lll,kkk,iii,1),b1(1,k+1),
5577 & AEAb1derx(1,lll,kkk,iii,2,1))
5578 call matvec2(AEAderx(1,1,lll,kkk,iii,1),Ub2(1,k+1),
5579 & AEAb2derx(1,lll,kkk,iii,2,1))
5580 call transpose2(AEAderx(1,1,lll,kkk,iii,2),auxmat(1,1))
5581 call matvec2(auxmat(1,1),b1(1,j),
5582 & AEAb1derx(1,lll,kkk,iii,1,2))
5583 call matvec2(auxmat(1,1),Ub2(1,j),
5584 & AEAb2derx(1,lll,kkk,iii,1,2))
5585 call matvec2(AEAderx(1,1,lll,kkk,iii,2),b1(1,l+1),
5586 & AEAb1derx(1,lll,kkk,iii,2,2))
5587 call matvec2(AEAderx(1,1,lll,kkk,iii,2),Ub2(1,l+1),
5588 & AEAb2derx(1,lll,kkk,iii,2,2))
5595 C Antiparallel orientation of the two CA-CA-CA frames.
5596 if (i.gt.1 .and. itype(i).le.ntyp) then
5597 iti=itortyp(itype(i))
5601 itk1=itortyp(itype(k+1))
5602 itl=itortyp(itype(l))
5603 itj=itortyp(itype(j))
5604 if (j.lt.nres-1 .and. itype(j+1).le.ntyp) then
5605 itj1=itortyp(itype(j+1))
5609 C A2 kernel(j-1)T A1T
5610 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
5611 & aa2tder(1,1,1,1),1,.true.,EUg(1,1,j),EUgder(1,1,j),
5612 & AEA(1,1,1),AEAderg(1,1,1),AEAderx(1,1,1,1,1,1))
5613 C Following matrices are needed only for 6-th order cumulants
5614 IF (wcorr6.gt.0.0d0 .or. (wturn6.gt.0.0d0 .and.
5615 & j.eq.i+4 .and. l.eq.i+3)) THEN
5616 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
5617 & aa2tder(1,1,1,1),1,.true.,EUgC(1,1,j),EUgCder(1,1,j),
5618 & AECA(1,1,1),AECAderg(1,1,1),AECAderx(1,1,1,1,1,1))
5619 call kernel(aa2(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
5620 & aa2tder(1,1,1,1),2,.true.,Ug2DtEUg(1,1,j),
5621 & Ug2DtEUgder(1,1,1,j),ADtEA(1,1,1),ADtEAderg(1,1,1,1),
5622 & ADtEAderx(1,1,1,1,1,1))
5623 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
5624 & aa2tder(1,1,1,1),2,.true.,DtUg2EUg(1,1,j),
5625 & DtUg2EUgder(1,1,1,j),ADtEA1(1,1,1),ADtEA1derg(1,1,1,1),
5626 & ADtEA1derx(1,1,1,1,1,1))
5628 C End 6-th order cumulants
5629 call transpose2(EUgder(1,1,k),auxmat(1,1))
5630 call matmat2(auxmat(1,1),AEA(1,1,1),EAEAderg(1,1,1,1))
5631 call transpose2(EUg(1,1,k),auxmat(1,1))
5632 call matmat2(auxmat(1,1),AEA(1,1,1),EAEA(1,1,1))
5633 call matmat2(auxmat(1,1),AEAderg(1,1,1),EAEAderg(1,1,2,1))
5637 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,1),
5638 & EAEAderx(1,1,lll,kkk,iii,1))
5642 C A2T kernel(i+1)T A1
5643 call kernel(aa2t(1,1),aa1(1,1),aa2tder(1,1,1,1),
5644 & a_chuj_der(1,1,1,1,jj,i),1,.true.,EUg(1,1,k),EUgder(1,1,k),
5645 & AEA(1,1,2),AEAderg(1,1,2),AEAderx(1,1,1,1,1,2))
5646 C Following matrices are needed only for 6-th order cumulants
5647 IF (wcorr6.gt.0.0d0 .or. (wturn6.gt.0.0d0 .and.
5648 & j.eq.i+4 .and. l.eq.i+3)) THEN
5649 call kernel(aa2t(1,1),aa1(1,1),aa2tder(1,1,1,1),
5650 & a_chuj_der(1,1,1,1,jj,i),1,.true.,EUgC(1,1,k),EUgCder(1,1,k),
5651 & AECA(1,1,2),AECAderg(1,1,2),AECAderx(1,1,1,1,1,2))
5652 call kernel(aa2t(1,1),aa1(1,1),aa2tder(1,1,1,1),
5653 & a_chuj_der(1,1,1,1,jj,i),2,.true.,Ug2DtEUg(1,1,k),
5654 & Ug2DtEUgder(1,1,1,k),ADtEA(1,1,2),ADtEAderg(1,1,1,2),
5655 & ADtEAderx(1,1,1,1,1,2))
5656 call kernel(aa2t(1,1),aa1(1,1),aa2tder(1,1,1,1),
5657 & a_chuj_der(1,1,1,1,jj,i),2,.true.,DtUg2EUg(1,1,k),
5658 & DtUg2EUgder(1,1,1,k),ADtEA1(1,1,2),ADtEA1derg(1,1,1,2),
5659 & ADtEA1derx(1,1,1,1,1,2))
5661 C End 6-th order cumulants
5662 call transpose2(EUgder(1,1,j),auxmat(1,1))
5663 call matmat2(auxmat(1,1),AEA(1,1,1),EAEAderg(1,1,2,2))
5664 call transpose2(EUg(1,1,j),auxmat(1,1))
5665 call matmat2(auxmat(1,1),AEA(1,1,2),EAEA(1,1,2))
5666 call matmat2(auxmat(1,1),AEAderg(1,1,2),EAEAderg(1,1,2,2))
5670 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,2),
5671 & EAEAderx(1,1,lll,kkk,iii,2))
5676 C Calculate the vectors and their derivatives in virtual-bond dihedral angles.
5677 C They are needed only when the fifth- or the sixth-order cumulants are
5679 IF (wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0 .or.
5680 & (wturn6.gt.0.0d0 .and. j.eq.i+4 .and. l.eq.i+3)) THEN
5681 call transpose2(AEA(1,1,1),auxmat(1,1))
5682 call matvec2(auxmat(1,1),b1(1,i),AEAb1(1,1,1))
5683 call matvec2(auxmat(1,1),Ub2(1,i),AEAb2(1,1,1))
5684 call matvec2(auxmat(1,1),Ub2der(1,i),AEAb2derg(1,2,1,1))
5685 call transpose2(AEAderg(1,1,1),auxmat(1,1))
5686 call matvec2(auxmat(1,1),b1(1,i),AEAb1derg(1,1,1))
5687 call matvec2(auxmat(1,1),Ub2(1,i),AEAb2derg(1,1,1,1))
5688 call matvec2(AEA(1,1,1),b1(1,k+1),AEAb1(1,2,1))
5689 call matvec2(AEAderg(1,1,1),b1(1,k+1),AEAb1derg(1,2,1))
5690 call matvec2(AEA(1,1,1),Ub2(1,k+1),AEAb2(1,2,1))
5691 call matvec2(AEAderg(1,1,1),Ub2(1,k+1),AEAb2derg(1,1,2,1))
5692 call matvec2(AEA(1,1,1),Ub2der(1,k+1),AEAb2derg(1,2,2,1))
5693 call transpose2(AEA(1,1,2),auxmat(1,1))
5694 call matvec2(auxmat(1,1),b1(1,j+1),AEAb1(1,1,2))
5695 call matvec2(auxmat(1,1),Ub2(1,l),AEAb2(1,1,2))
5696 call matvec2(auxmat(1,1),Ub2der(1,l),AEAb2derg(1,2,1,2))
5697 call transpose2(AEAderg(1,1,2),auxmat(1,1))
5698 call matvec2(auxmat(1,1),b1(1,l),AEAb1(1,1,2))
5699 call matvec2(auxmat(1,1),Ub2(1,l),AEAb2derg(1,1,1,2))
5700 call matvec2(AEA(1,1,2),b1(1,j+1),AEAb1(1,2,2))
5701 call matvec2(AEAderg(1,1,2),b1(1,j+1),AEAb1derg(1,2,2))
5702 call matvec2(AEA(1,1,2),Ub2(1,j),AEAb2(1,2,2))
5703 call matvec2(AEAderg(1,1,2),Ub2(1,j),AEAb2derg(1,1,2,2))
5704 call matvec2(AEA(1,1,2),Ub2der(1,j),AEAb2derg(1,2,2,2))
5705 C Calculate the Cartesian derivatives of the vectors.
5709 call transpose2(AEAderx(1,1,lll,kkk,iii,1),auxmat(1,1))
5710 call matvec2(auxmat(1,1),b1(1,i),
5711 & AEAb1derx(1,lll,kkk,iii,1,1))
5712 call matvec2(auxmat(1,1),Ub2(1,i),
5713 & AEAb2derx(1,lll,kkk,iii,1,1))
5714 call matvec2(AEAderx(1,1,lll,kkk,iii,1),b1(1,k+1),
5715 & AEAb1derx(1,lll,kkk,iii,2,1))
5716 call matvec2(AEAderx(1,1,lll,kkk,iii,1),Ub2(1,k+1),
5717 & AEAb2derx(1,lll,kkk,iii,2,1))
5718 call transpose2(AEAderx(1,1,lll,kkk,iii,2),auxmat(1,1))
5719 call matvec2(auxmat(1,1),b1(1,l),
5720 & AEAb1derx(1,lll,kkk,iii,1,2))
5721 call matvec2(auxmat(1,1),Ub2(1,l),
5722 & AEAb2derx(1,lll,kkk,iii,1,2))
5723 call matvec2(AEAderx(1,1,lll,kkk,iii,2),b1(1,j+1),
5724 & AEAb1derx(1,lll,kkk,iii,2,2))
5725 call matvec2(AEAderx(1,1,lll,kkk,iii,2),Ub2(1,j),
5726 & AEAb2derx(1,lll,kkk,iii,2,2))
5735 C---------------------------------------------------------------------------
5736 subroutine kernel(aa1,aa2t,aa1derx,aa2tderx,nderg,transp,
5737 & KK,KKderg,AKA,AKAderg,AKAderx)
5741 double precision aa1(2,2),aa2t(2,2),aa1derx(2,2,3,5),
5742 & aa2tderx(2,2,3,5),KK(2,2),KKderg(2,2,nderg),AKA(2,2),
5743 & AKAderg(2,2,nderg),AKAderx(2,2,3,5,2)
5748 call prodmat3(aa1(1,1),aa2t(1,1),KK(1,1),transp,AKA(1,1))
5750 call prodmat3(aa1(1,1),aa2t(1,1),KKderg(1,1,iii),transp,
5753 cd if (lprn) write (2,*) 'In kernel'
5755 cd if (lprn) write (2,*) 'kkk=',kkk
5757 call prodmat3(aa1derx(1,1,lll,kkk),aa2t(1,1),
5758 & KK(1,1),transp,AKAderx(1,1,lll,kkk,1))
5760 cd write (2,*) 'lll=',lll
5761 cd write (2,*) 'iii=1'
5763 cd write (2,'(3(2f10.5),5x)')
5764 cd & (AKAderx(jjj,mmm,lll,kkk,1),mmm=1,2)
5767 call prodmat3(aa1(1,1),aa2tderx(1,1,lll,kkk),
5768 & KK(1,1),transp,AKAderx(1,1,lll,kkk,2))
5770 cd write (2,*) 'lll=',lll
5771 cd write (2,*) 'iii=2'
5773 cd write (2,'(3(2f10.5),5x)')
5774 cd & (AKAderx(jjj,mmm,lll,kkk,2),mmm=1,2)
5781 C---------------------------------------------------------------------------
5782 double precision function eello4(i,j,k,l,jj,kk)
5783 implicit real*8 (a-h,o-z)
5784 include 'DIMENSIONS'
5785 include 'DIMENSIONS.ZSCOPT'
5786 include 'COMMON.IOUNITS'
5787 include 'COMMON.CHAIN'
5788 include 'COMMON.DERIV'
5789 include 'COMMON.INTERACT'
5790 include 'COMMON.CONTACTS'
5791 include 'COMMON.TORSION'
5792 include 'COMMON.VAR'
5793 include 'COMMON.GEO'
5794 double precision pizda(2,2),ggg1(3),ggg2(3)
5795 cd if (i.ne.1 .or. j.ne.5 .or. k.ne.2 .or.l.ne.4) then
5799 cd print *,'eello4:',i,j,k,l,jj,kk
5800 cd write (2,*) 'i',i,' j',j,' k',k,' l',l
5801 cd call checkint4(i,j,k,l,jj,kk,eel4_num)
5802 cold eij=facont_hb(jj,i)
5803 cold ekl=facont_hb(kk,k)
5805 eel4=-EAEA(1,1,1)-EAEA(2,2,1)
5807 cd eel41=-EAEA(1,1,2)-EAEA(2,2,2)
5808 gcorr_loc(k-1)=gcorr_loc(k-1)
5809 & -ekont*(EAEAderg(1,1,1,1)+EAEAderg(2,2,1,1))
5811 gcorr_loc(l-1)=gcorr_loc(l-1)
5812 & -ekont*(EAEAderg(1,1,2,1)+EAEAderg(2,2,2,1))
5814 gcorr_loc(j-1)=gcorr_loc(j-1)
5815 & -ekont*(EAEAderg(1,1,2,1)+EAEAderg(2,2,2,1))
5820 derx(lll,kkk,iii)=-EAEAderx(1,1,lll,kkk,iii,1)
5821 & -EAEAderx(2,2,lll,kkk,iii,1)
5822 cd derx(lll,kkk,iii)=0.0d0
5826 cd gcorr_loc(l-1)=0.0d0
5827 cd gcorr_loc(j-1)=0.0d0
5828 cd gcorr_loc(k-1)=0.0d0
5830 cd write (iout,*)'Contacts have occurred for peptide groups',
5831 cd & i,j,' fcont:',eij,' eij',' and ',k,l,
5832 cd & ' fcont ',ekl,' eel4=',eel4,' eel4_num',16*eel4_num
5833 if (j.lt.nres-1) then
5840 if (l.lt.nres-1) then
5848 cold ghalf=0.5d0*eel4*ekl*gacont_hbr(ll,jj,i)
5849 ggg1(ll)=eel4*g_contij(ll,1)
5850 ggg2(ll)=eel4*g_contij(ll,2)
5851 ghalf=0.5d0*ggg1(ll)
5853 gradcorr(ll,i)=gradcorr(ll,i)+ghalf+ekont*derx(ll,2,1)
5854 gradcorr(ll,i+1)=gradcorr(ll,i+1)+ekont*derx(ll,3,1)
5855 gradcorr(ll,j)=gradcorr(ll,j)+ghalf+ekont*derx(ll,4,1)
5856 gradcorr(ll,j1)=gradcorr(ll,j1)+ekont*derx(ll,5,1)
5857 cold ghalf=0.5d0*eel4*eij*gacont_hbr(ll,kk,k)
5858 ghalf=0.5d0*ggg2(ll)
5860 gradcorr(ll,k)=gradcorr(ll,k)+ghalf+ekont*derx(ll,2,2)
5861 gradcorr(ll,k+1)=gradcorr(ll,k+1)+ekont*derx(ll,3,2)
5862 gradcorr(ll,l)=gradcorr(ll,l)+ghalf+ekont*derx(ll,4,2)
5863 gradcorr(ll,l1)=gradcorr(ll,l1)+ekont*derx(ll,5,2)
5868 cold gradcorr(ll,m)=gradcorr(ll,m)+eel4*ekl*gacont_hbr(ll,jj,i)
5869 gradcorr(ll,m)=gradcorr(ll,m)+ggg1(ll)
5874 cold gradcorr(ll,m)=gradcorr(ll,m)+eel4*eij*gacont_hbr(ll,kk,k)
5875 gradcorr(ll,m)=gradcorr(ll,m)+ggg2(ll)
5881 gradcorr(ll,m)=gradcorr(ll,m)+ekont*derx(ll,1,1)
5886 gradcorr(ll,m)=gradcorr(ll,m)+ekont*derx(ll,1,2)
5890 cd write (2,*) iii,gcorr_loc(iii)
5894 cd write (2,*) 'ekont',ekont
5895 cd write (iout,*) 'eello4',ekont*eel4
5898 C---------------------------------------------------------------------------
5899 double precision function eello5(i,j,k,l,jj,kk)
5900 implicit real*8 (a-h,o-z)
5901 include 'DIMENSIONS'
5902 include 'DIMENSIONS.ZSCOPT'
5903 include 'COMMON.IOUNITS'
5904 include 'COMMON.CHAIN'
5905 include 'COMMON.DERIV'
5906 include 'COMMON.INTERACT'
5907 include 'COMMON.CONTACTS'
5908 include 'COMMON.TORSION'
5909 include 'COMMON.VAR'
5910 include 'COMMON.GEO'
5911 double precision pizda(2,2),auxmat(2,2),auxmat1(2,2),vv(2)
5912 double precision ggg1(3),ggg2(3)
5913 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
5918 C /l\ / \ \ / \ / \ / C
5919 C / \ / \ \ / \ / \ / C
5920 C j| o |l1 | o | o| o | | o |o C
5921 C \ |/k\| |/ \| / |/ \| |/ \| C
5922 C \i/ \ / \ / / \ / \ C
5924 C (I) (II) (III) (IV) C
5926 C eello5_1 eello5_2 eello5_3 eello5_4 C
5928 C Antiparallel chains C
5931 C /j\ / \ \ / \ / \ / C
5932 C / \ / \ \ / \ / \ / C
5933 C j1| o |l | o | o| o | | o |o C
5934 C \ |/k\| |/ \| / |/ \| |/ \| C
5935 C \i/ \ / \ / / \ / \ C
5937 C (I) (II) (III) (IV) C
5939 C eello5_1 eello5_2 eello5_3 eello5_4 C
5941 C o denotes a local interaction, vertical lines an electrostatic interaction. C
5943 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
5944 cd if (i.ne.2 .or. j.ne.6 .or. k.ne.3 .or. l.ne.5) then
5949 cd & 'EELLO5: Contacts have occurred for peptide groups',i,j,
5951 itk=itortyp(itype(k))
5952 itl=itortyp(itype(l))
5953 itj=itortyp(itype(j))
5958 cd call checkint5(i,j,k,l,jj,kk,eel5_1_num,eel5_2_num,
5959 cd & eel5_3_num,eel5_4_num)
5963 derx(lll,kkk,iii)=0.0d0
5967 cd eij=facont_hb(jj,i)
5968 cd ekl=facont_hb(kk,k)
5970 cd write (iout,*)'Contacts have occurred for peptide groups',
5971 cd & i,j,' fcont:',eij,' eij',' and ',k,l
5973 C Contribution from the graph I.
5974 cd write (2,*) 'AEA ',AEA(1,1,1),AEA(2,1,1),AEA(1,2,1),AEA(2,2,1)
5975 cd write (2,*) 'AEAb2',AEAb2(1,1,1),AEAb2(2,1,1)
5976 call transpose2(EUg(1,1,k),auxmat(1,1))
5977 call matmat2(AEA(1,1,1),auxmat(1,1),pizda(1,1))
5978 vv(1)=pizda(1,1)-pizda(2,2)
5979 vv(2)=pizda(1,2)+pizda(2,1)
5980 eello5_1=scalar2(AEAb2(1,1,1),Ub2(1,k))
5981 & +0.5d0*scalar2(vv(1),Dtobr2(1,i))
5983 C Explicit gradient in virtual-dihedral angles.
5984 if (i.gt.1) g_corr5_loc(i-1)=g_corr5_loc(i-1)
5985 & +ekont*(scalar2(AEAb2derg(1,2,1,1),Ub2(1,k))
5986 & +0.5d0*scalar2(vv(1),Dtobr2der(1,i)))
5987 call transpose2(EUgder(1,1,k),auxmat1(1,1))
5988 call matmat2(AEA(1,1,1),auxmat1(1,1),pizda(1,1))
5989 vv(1)=pizda(1,1)-pizda(2,2)
5990 vv(2)=pizda(1,2)+pizda(2,1)
5991 g_corr5_loc(k-1)=g_corr5_loc(k-1)
5992 & +ekont*(scalar2(AEAb2(1,1,1),Ub2der(1,k))
5993 & +0.5d0*scalar2(vv(1),Dtobr2(1,i)))
5994 call matmat2(AEAderg(1,1,1),auxmat(1,1),pizda(1,1))
5995 vv(1)=pizda(1,1)-pizda(2,2)
5996 vv(2)=pizda(1,2)+pizda(2,1)
5998 if (l.lt.nres-1) g_corr5_loc(l-1)=g_corr5_loc(l-1)
5999 & +ekont*(scalar2(AEAb2derg(1,1,1,1),Ub2(1,k))
6000 & +0.5d0*scalar2(vv(1),Dtobr2(1,i)))
6002 if (j.lt.nres-1) g_corr5_loc(j-1)=g_corr5_loc(j-1)
6003 & +ekont*(scalar2(AEAb2derg(1,1,1,1),Ub2(1,k))
6004 & +0.5d0*scalar2(vv(1),Dtobr2(1,i)))
6006 C Cartesian gradient
6010 call matmat2(AEAderx(1,1,lll,kkk,iii,1),auxmat(1,1),
6012 vv(1)=pizda(1,1)-pizda(2,2)
6013 vv(2)=pizda(1,2)+pizda(2,1)
6014 derx(lll,kkk,iii)=derx(lll,kkk,iii)
6015 & +scalar2(AEAb2derx(1,lll,kkk,iii,1,1),Ub2(1,k))
6016 & +0.5d0*scalar2(vv(1),Dtobr2(1,i))
6023 C Contribution from graph II
6024 call transpose2(EE(1,1,k),auxmat(1,1))
6025 call matmat2(auxmat(1,1),AEA(1,1,1),pizda(1,1))
6026 vv(1)=pizda(1,1)+pizda(2,2)
6027 vv(2)=pizda(2,1)-pizda(1,2)
6028 eello5_2=scalar2(AEAb1(1,2,1),b1(1,k))
6029 & -0.5d0*scalar2(vv(1),Ctobr(1,k))
6031 C Explicit gradient in virtual-dihedral angles.
6032 g_corr5_loc(k-1)=g_corr5_loc(k-1)
6033 & -0.5d0*ekont*scalar2(vv(1),Ctobrder(1,k))
6034 call matmat2(auxmat(1,1),AEAderg(1,1,1),pizda(1,1))
6035 vv(1)=pizda(1,1)+pizda(2,2)
6036 vv(2)=pizda(2,1)-pizda(1,2)
6038 g_corr5_loc(l-1)=g_corr5_loc(l-1)
6039 & +ekont*(scalar2(AEAb1derg(1,2,1),b1(1,k))
6040 & -0.5d0*scalar2(vv(1),Ctobr(1,k)))
6042 g_corr5_loc(j-1)=g_corr5_loc(j-1)
6043 & +ekont*(scalar2(AEAb1derg(1,2,1),b1(1,k))
6044 & -0.5d0*scalar2(vv(1),Ctobr(1,k)))
6046 C Cartesian gradient
6050 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,1),
6052 vv(1)=pizda(1,1)+pizda(2,2)
6053 vv(2)=pizda(2,1)-pizda(1,2)
6054 derx(lll,kkk,iii)=derx(lll,kkk,iii)
6055 & +scalar2(AEAb1derx(1,lll,kkk,iii,2,1),b1(1,k))
6056 & -0.5d0*scalar2(vv(1),Ctobr(1,k))
6065 C Parallel orientation
6066 C Contribution from graph III
6067 call transpose2(EUg(1,1,l),auxmat(1,1))
6068 call matmat2(AEA(1,1,2),auxmat(1,1),pizda(1,1))
6069 vv(1)=pizda(1,1)-pizda(2,2)
6070 vv(2)=pizda(1,2)+pizda(2,1)
6071 eello5_3=scalar2(AEAb2(1,1,2),Ub2(1,l))
6072 & +0.5d0*scalar2(vv(1),Dtobr2(1,j))
6074 C Explicit gradient in virtual-dihedral angles.
6075 g_corr5_loc(j-1)=g_corr5_loc(j-1)
6076 & +ekont*(scalar2(AEAb2derg(1,2,1,2),Ub2(1,l))
6077 & +0.5d0*scalar2(vv(1),Dtobr2der(1,j)))
6078 call matmat2(AEAderg(1,1,2),auxmat(1,1),pizda(1,1))
6079 vv(1)=pizda(1,1)-pizda(2,2)
6080 vv(2)=pizda(1,2)+pizda(2,1)
6081 g_corr5_loc(k-1)=g_corr5_loc(k-1)
6082 & +ekont*(scalar2(AEAb2derg(1,1,1,2),Ub2(1,l))
6083 & +0.5d0*scalar2(vv(1),Dtobr2(1,j)))
6084 call transpose2(EUgder(1,1,l),auxmat1(1,1))
6085 call matmat2(AEA(1,1,2),auxmat1(1,1),pizda(1,1))
6086 vv(1)=pizda(1,1)-pizda(2,2)
6087 vv(2)=pizda(1,2)+pizda(2,1)
6088 g_corr5_loc(l-1)=g_corr5_loc(l-1)
6089 & +ekont*(scalar2(AEAb2(1,1,2),Ub2der(1,l))
6090 & +0.5d0*scalar2(vv(1),Dtobr2(1,j)))
6091 C Cartesian gradient
6095 call matmat2(AEAderx(1,1,lll,kkk,iii,2),auxmat(1,1),
6097 vv(1)=pizda(1,1)-pizda(2,2)
6098 vv(2)=pizda(1,2)+pizda(2,1)
6099 derx(lll,kkk,iii)=derx(lll,kkk,iii)
6100 & +scalar2(AEAb2derx(1,lll,kkk,iii,1,2),Ub2(1,l))
6101 & +0.5d0*scalar2(vv(1),Dtobr2(1,j))
6107 C Contribution from graph IV
6109 call transpose2(EE(1,1,l),auxmat(1,1))
6110 call matmat2(auxmat(1,1),AEA(1,1,2),pizda(1,1))
6111 vv(1)=pizda(1,1)+pizda(2,2)
6112 vv(2)=pizda(2,1)-pizda(1,2)
6113 eello5_4=scalar2(AEAb1(1,2,2),b1(1,l))
6114 & -0.5d0*scalar2(vv(1),Ctobr(1,l))
6116 C Explicit gradient in virtual-dihedral angles.
6117 g_corr5_loc(l-1)=g_corr5_loc(l-1)
6118 & -0.5d0*ekont*scalar2(vv(1),Ctobrder(1,l))
6119 call matmat2(auxmat(1,1),AEAderg(1,1,2),pizda(1,1))
6120 vv(1)=pizda(1,1)+pizda(2,2)
6121 vv(2)=pizda(2,1)-pizda(1,2)
6122 g_corr5_loc(k-1)=g_corr5_loc(k-1)
6123 & +ekont*(scalar2(AEAb1derg(1,2,2),b1(1,l))
6124 & -0.5d0*scalar2(vv(1),Ctobr(1,l)))
6125 C Cartesian gradient
6129 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,2),
6131 vv(1)=pizda(1,1)+pizda(2,2)
6132 vv(2)=pizda(2,1)-pizda(1,2)
6133 derx(lll,kkk,iii)=derx(lll,kkk,iii)
6134 & +scalar2(AEAb1derx(1,lll,kkk,iii,2,2),b1(1,l))
6135 & -0.5d0*scalar2(vv(1),Ctobr(1,l))
6141 C Antiparallel orientation
6142 C Contribution from graph III
6144 call transpose2(EUg(1,1,j),auxmat(1,1))
6145 call matmat2(AEA(1,1,2),auxmat(1,1),pizda(1,1))
6146 vv(1)=pizda(1,1)-pizda(2,2)
6147 vv(2)=pizda(1,2)+pizda(2,1)
6148 eello5_3=scalar2(AEAb2(1,1,2),Ub2(1,j))
6149 & +0.5d0*scalar2(vv(1),Dtobr2(1,l))
6151 C Explicit gradient in virtual-dihedral angles.
6152 g_corr5_loc(l-1)=g_corr5_loc(l-1)
6153 & +ekont*(scalar2(AEAb2derg(1,2,1,2),Ub2(1,j))
6154 & +0.5d0*scalar2(vv(1),Dtobr2der(1,l)))
6155 call matmat2(AEAderg(1,1,2),auxmat(1,1),pizda(1,1))
6156 vv(1)=pizda(1,1)-pizda(2,2)
6157 vv(2)=pizda(1,2)+pizda(2,1)
6158 g_corr5_loc(k-1)=g_corr5_loc(k-1)
6159 & +ekont*(scalar2(AEAb2derg(1,1,1,2),Ub2(1,j))
6160 & +0.5d0*scalar2(vv(1),Dtobr2(1,l)))
6161 call transpose2(EUgder(1,1,j),auxmat1(1,1))
6162 call matmat2(AEA(1,1,2),auxmat1(1,1),pizda(1,1))
6163 vv(1)=pizda(1,1)-pizda(2,2)
6164 vv(2)=pizda(1,2)+pizda(2,1)
6165 g_corr5_loc(j-1)=g_corr5_loc(j-1)
6166 & +ekont*(scalar2(AEAb2(1,1,2),Ub2der(1,j))
6167 & +0.5d0*scalar2(vv(1),Dtobr2(1,l)))
6168 C Cartesian gradient
6172 call matmat2(AEAderx(1,1,lll,kkk,iii,2),auxmat(1,1),
6174 vv(1)=pizda(1,1)-pizda(2,2)
6175 vv(2)=pizda(1,2)+pizda(2,1)
6176 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)
6177 & +scalar2(AEAb2derx(1,lll,kkk,iii,1,2),Ub2(1,j))
6178 & +0.5d0*scalar2(vv(1),Dtobr2(1,l))
6184 C Contribution from graph IV
6186 call transpose2(EE(1,1,j),auxmat(1,1))
6187 call matmat2(auxmat(1,1),AEA(1,1,2),pizda(1,1))
6188 vv(1)=pizda(1,1)+pizda(2,2)
6189 vv(2)=pizda(2,1)-pizda(1,2)
6190 eello5_4=scalar2(AEAb1(1,2,2),b1(1,j))
6191 & -0.5d0*scalar2(vv(1),Ctobr(1,j))
6193 C Explicit gradient in virtual-dihedral angles.
6194 g_corr5_loc(j-1)=g_corr5_loc(j-1)
6195 & -0.5d0*ekont*scalar2(vv(1),Ctobrder(1,j))
6196 call matmat2(auxmat(1,1),AEAderg(1,1,2),pizda(1,1))
6197 vv(1)=pizda(1,1)+pizda(2,2)
6198 vv(2)=pizda(2,1)-pizda(1,2)
6199 g_corr5_loc(k-1)=g_corr5_loc(k-1)
6200 & +ekont*(scalar2(AEAb1derg(1,2,2),b1(1,j))
6201 & -0.5d0*scalar2(vv(1),Ctobr(1,j)))
6202 C Cartesian gradient
6206 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,2),
6208 vv(1)=pizda(1,1)+pizda(2,2)
6209 vv(2)=pizda(2,1)-pizda(1,2)
6210 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)
6211 & +scalar2(AEAb1derx(1,lll,kkk,iii,2,2),b1(1,j))
6212 & -0.5d0*scalar2(vv(1),Ctobr(1,j))
6219 eel5=eello5_1+eello5_2+eello5_3+eello5_4
6220 cd if (i.eq.2 .and. j.eq.8 .and. k.eq.3 .and. l.eq.7) then
6221 cd write (2,*) 'ijkl',i,j,k,l
6222 cd write (2,*) 'eello5_1',eello5_1,' eello5_2',eello5_2,
6223 cd & ' eello5_3',eello5_3,' eello5_4',eello5_4
6225 cd write(iout,*) 'eello5_1',eello5_1,' eel5_1_num',16*eel5_1_num
6226 cd write(iout,*) 'eello5_2',eello5_2,' eel5_2_num',16*eel5_2_num
6227 cd write(iout,*) 'eello5_3',eello5_3,' eel5_3_num',16*eel5_3_num
6228 cd write(iout,*) 'eello5_4',eello5_4,' eel5_4_num',16*eel5_4_num
6230 if (j.lt.nres-1) then
6237 if (l.lt.nres-1) then
6247 cd write (2,*) 'eij',eij,' ekl',ekl,' ekont',ekont
6249 ggg1(ll)=eel5*g_contij(ll,1)
6250 ggg2(ll)=eel5*g_contij(ll,2)
6251 cold ghalf=0.5d0*eel5*ekl*gacont_hbr(ll,jj,i)
6252 ghalf=0.5d0*ggg1(ll)
6254 gradcorr5(ll,i)=gradcorr5(ll,i)+ghalf+ekont*derx(ll,2,1)
6255 gradcorr5(ll,i+1)=gradcorr5(ll,i+1)+ekont*derx(ll,3,1)
6256 gradcorr5(ll,j)=gradcorr5(ll,j)+ghalf+ekont*derx(ll,4,1)
6257 gradcorr5(ll,j1)=gradcorr5(ll,j1)+ekont*derx(ll,5,1)
6258 cold ghalf=0.5d0*eel5*eij*gacont_hbr(ll,kk,k)
6259 ghalf=0.5d0*ggg2(ll)
6261 gradcorr5(ll,k)=gradcorr5(ll,k)+ghalf+ekont*derx(ll,2,2)
6262 gradcorr5(ll,k+1)=gradcorr5(ll,k+1)+ekont*derx(ll,3,2)
6263 gradcorr5(ll,l)=gradcorr5(ll,l)+ghalf+ekont*derx(ll,4,2)
6264 gradcorr5(ll,l1)=gradcorr5(ll,l1)+ekont*derx(ll,5,2)
6269 cold gradcorr5(ll,m)=gradcorr5(ll,m)+eel5*ekl*gacont_hbr(ll,jj,i)
6270 gradcorr5(ll,m)=gradcorr5(ll,m)+ggg1(ll)
6275 cold gradcorr5(ll,m)=gradcorr5(ll,m)+eel5*eij*gacont_hbr(ll,kk,k)
6276 gradcorr5(ll,m)=gradcorr5(ll,m)+ggg2(ll)
6282 gradcorr5(ll,m)=gradcorr5(ll,m)+ekont*derx(ll,1,1)
6287 gradcorr5(ll,m)=gradcorr5(ll,m)+ekont*derx(ll,1,2)
6291 cd write (2,*) iii,g_corr5_loc(iii)
6295 cd write (2,*) 'ekont',ekont
6296 cd write (iout,*) 'eello5',ekont*eel5
6299 c--------------------------------------------------------------------------
6300 double precision function eello6(i,j,k,l,jj,kk)
6301 implicit real*8 (a-h,o-z)
6302 include 'DIMENSIONS'
6303 include 'DIMENSIONS.ZSCOPT'
6304 include 'COMMON.IOUNITS'
6305 include 'COMMON.CHAIN'
6306 include 'COMMON.DERIV'
6307 include 'COMMON.INTERACT'
6308 include 'COMMON.CONTACTS'
6309 include 'COMMON.TORSION'
6310 include 'COMMON.VAR'
6311 include 'COMMON.GEO'
6312 include 'COMMON.FFIELD'
6313 double precision ggg1(3),ggg2(3)
6314 cd if (i.ne.1 .or. j.ne.3 .or. k.ne.2 .or. l.ne.4) then
6319 cd & 'EELLO6: Contacts have occurred for peptide groups',i,j,
6327 cd call checkint6(i,j,k,l,jj,kk,eel6_1_num,eel6_2_num,
6328 cd & eel6_3_num,eel6_4_num,eel6_5_num,eel6_6_num)
6332 derx(lll,kkk,iii)=0.0d0
6336 cd eij=facont_hb(jj,i)
6337 cd ekl=facont_hb(kk,k)
6343 eello6_1=eello6_graph1(i,j,k,l,1,.false.)
6344 eello6_2=eello6_graph1(j,i,l,k,2,.false.)
6345 eello6_3=eello6_graph2(i,j,k,l,jj,kk,.false.)
6346 eello6_4=eello6_graph4(i,j,k,l,jj,kk,1,.false.)
6347 eello6_5=eello6_graph4(j,i,l,k,jj,kk,2,.false.)
6348 eello6_6=eello6_graph3(i,j,k,l,jj,kk,.false.)
6350 eello6_1=eello6_graph1(i,j,k,l,1,.false.)
6351 eello6_2=eello6_graph1(l,k,j,i,2,.true.)
6352 eello6_3=eello6_graph2(i,l,k,j,jj,kk,.true.)
6353 eello6_4=eello6_graph4(i,j,k,l,jj,kk,1,.false.)
6354 if (wturn6.eq.0.0d0 .or. j.ne.i+4) then
6355 eello6_5=eello6_graph4(l,k,j,i,kk,jj,2,.true.)
6359 eello6_6=eello6_graph3(i,l,k,j,jj,kk,.true.)
6361 C If turn contributions are considered, they will be handled separately.
6362 eel6=eello6_1+eello6_2+eello6_3+eello6_4+eello6_5+eello6_6
6363 cd write(iout,*) 'eello6_1',eello6_1,' eel6_1_num',16*eel6_1_num
6364 cd write(iout,*) 'eello6_2',eello6_2,' eel6_2_num',16*eel6_2_num
6365 cd write(iout,*) 'eello6_3',eello6_3,' eel6_3_num',16*eel6_3_num
6366 cd write(iout,*) 'eello6_4',eello6_4,' eel6_4_num',16*eel6_4_num
6367 cd write(iout,*) 'eello6_5',eello6_5,' eel6_5_num',16*eel6_5_num
6368 cd write(iout,*) 'eello6_6',eello6_6,' eel6_6_num',16*eel6_6_num
6371 if (j.lt.nres-1) then
6378 if (l.lt.nres-1) then
6386 ggg1(ll)=eel6*g_contij(ll,1)
6387 ggg2(ll)=eel6*g_contij(ll,2)
6388 cold ghalf=0.5d0*eel6*ekl*gacont_hbr(ll,jj,i)
6389 ghalf=0.5d0*ggg1(ll)
6391 gradcorr6(ll,i)=gradcorr6(ll,i)+ghalf+ekont*derx(ll,2,1)
6392 gradcorr6(ll,i+1)=gradcorr6(ll,i+1)+ekont*derx(ll,3,1)
6393 gradcorr6(ll,j)=gradcorr6(ll,j)+ghalf+ekont*derx(ll,4,1)
6394 gradcorr6(ll,j1)=gradcorr6(ll,j1)+ekont*derx(ll,5,1)
6395 ghalf=0.5d0*ggg2(ll)
6396 cold ghalf=0.5d0*eel6*eij*gacont_hbr(ll,kk,k)
6398 gradcorr6(ll,k)=gradcorr6(ll,k)+ghalf+ekont*derx(ll,2,2)
6399 gradcorr6(ll,k+1)=gradcorr6(ll,k+1)+ekont*derx(ll,3,2)
6400 gradcorr6(ll,l)=gradcorr6(ll,l)+ghalf+ekont*derx(ll,4,2)
6401 gradcorr6(ll,l1)=gradcorr6(ll,l1)+ekont*derx(ll,5,2)
6406 cold gradcorr6(ll,m)=gradcorr6(ll,m)+eel6*ekl*gacont_hbr(ll,jj,i)
6407 gradcorr6(ll,m)=gradcorr6(ll,m)+ggg1(ll)
6412 cold gradcorr6(ll,m)=gradcorr6(ll,m)+eel6*eij*gacont_hbr(ll,kk,k)
6413 gradcorr6(ll,m)=gradcorr6(ll,m)+ggg2(ll)
6419 gradcorr6(ll,m)=gradcorr6(ll,m)+ekont*derx(ll,1,1)
6424 gradcorr6(ll,m)=gradcorr6(ll,m)+ekont*derx(ll,1,2)
6428 cd write (2,*) iii,g_corr6_loc(iii)
6432 cd write (2,*) 'ekont',ekont
6433 cd write (iout,*) 'eello6',ekont*eel6
6436 c--------------------------------------------------------------------------
6437 double precision function eello6_graph1(i,j,k,l,imat,swap)
6438 implicit real*8 (a-h,o-z)
6439 include 'DIMENSIONS'
6440 include 'DIMENSIONS.ZSCOPT'
6441 include 'COMMON.IOUNITS'
6442 include 'COMMON.CHAIN'
6443 include 'COMMON.DERIV'
6444 include 'COMMON.INTERACT'
6445 include 'COMMON.CONTACTS'
6446 include 'COMMON.TORSION'
6447 include 'COMMON.VAR'
6448 include 'COMMON.GEO'
6449 double precision vv(2),vv1(2),pizda(2,2),auxmat(2,2),pizda1(2,2)
6453 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
6455 C Parallel Antiparallel C
6461 C \ j|/k\| / \ |/k\|l / C
6466 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
6467 itk=itortyp(itype(k))
6468 s1= scalar2(AEAb1(1,2,imat),CUgb2(1,i))
6469 s2=-scalar2(AEAb2(1,1,imat),Ug2Db1t(1,k))
6470 s3= scalar2(AEAb2(1,1,imat),CUgb2(1,k))
6471 call transpose2(EUgC(1,1,k),auxmat(1,1))
6472 call matmat2(AEA(1,1,imat),auxmat(1,1),pizda1(1,1))
6473 vv1(1)=pizda1(1,1)-pizda1(2,2)
6474 vv1(2)=pizda1(1,2)+pizda1(2,1)
6475 s4=0.5d0*scalar2(vv1(1),Dtobr2(1,i))
6476 vv(1)=AEAb1(1,2,imat)*b1(1,k)-AEAb1(2,2,imat)*b1(2,k)
6477 vv(2)=AEAb1(1,2,imat)*b1(2,k)+AEAb1(2,2,imat)*b1(1,k)
6478 s5=scalar2(vv(1),Dtobr2(1,i))
6479 cd write (2,*) 's1',s1,' s2',s2,' s3',s3,' s4', s4,' s5',s5
6480 eello6_graph1=-0.5d0*(s1+s2+s3+s4+s5)
6481 if (.not. calc_grad) return
6482 if (i.gt.1) g_corr6_loc(i-1)=g_corr6_loc(i-1)
6483 & -0.5d0*ekont*(scalar2(AEAb1(1,2,imat),CUgb2der(1,i))
6484 & -scalar2(AEAb2derg(1,2,1,imat),Ug2Db1t(1,k))
6485 & +scalar2(AEAb2derg(1,2,1,imat),CUgb2(1,k))
6486 & +0.5d0*scalar2(vv1(1),Dtobr2der(1,i))
6487 & +scalar2(vv(1),Dtobr2der(1,i)))
6488 call matmat2(AEAderg(1,1,imat),auxmat(1,1),pizda1(1,1))
6489 vv1(1)=pizda1(1,1)-pizda1(2,2)
6490 vv1(2)=pizda1(1,2)+pizda1(2,1)
6491 vv(1)=AEAb1derg(1,2,imat)*b1(1,k)-AEAb1derg(2,2,imat)*b1(2,k)
6492 vv(2)=AEAb1derg(1,2,imat)*b1(2,k)+AEAb1derg(2,2,imat)*b1(1,k)
6494 g_corr6_loc(l-1)=g_corr6_loc(l-1)
6495 & +ekont*(-0.5d0*(scalar2(AEAb1derg(1,2,imat),CUgb2(1,i))
6496 & -scalar2(AEAb2derg(1,1,1,imat),Ug2Db1t(1,k))
6497 & +scalar2(AEAb2derg(1,1,1,imat),CUgb2(1,k))
6498 & +0.5d0*scalar2(vv1(1),Dtobr2(1,i))+scalar2(vv(1),Dtobr2(1,i))))
6500 g_corr6_loc(j-1)=g_corr6_loc(j-1)
6501 & +ekont*(-0.5d0*(scalar2(AEAb1derg(1,2,imat),CUgb2(1,i))
6502 & -scalar2(AEAb2derg(1,1,1,imat),Ug2Db1t(1,k))
6503 & +scalar2(AEAb2derg(1,1,1,imat),CUgb2(1,k))
6504 & +0.5d0*scalar2(vv1(1),Dtobr2(1,i))+scalar2(vv(1),Dtobr2(1,i))))
6506 call transpose2(EUgCder(1,1,k),auxmat(1,1))
6507 call matmat2(AEA(1,1,imat),auxmat(1,1),pizda1(1,1))
6508 vv1(1)=pizda1(1,1)-pizda1(2,2)
6509 vv1(2)=pizda1(1,2)+pizda1(2,1)
6510 if (k.gt.1) g_corr6_loc(k-1)=g_corr6_loc(k-1)
6511 & +ekont*(-0.5d0*(-scalar2(AEAb2(1,1,imat),Ug2Db1tder(1,k))
6512 & +scalar2(AEAb2(1,1,imat),CUgb2der(1,k))
6513 & +0.5d0*scalar2(vv1(1),Dtobr2(1,i))))
6522 s1= scalar2(AEAb1derx(1,lll,kkk,iii,2,imat),CUgb2(1,i))
6523 s2=-scalar2(AEAb2derx(1,lll,kkk,iii,1,imat),Ug2Db1t(1,k))
6524 s3= scalar2(AEAb2derx(1,lll,kkk,iii,1,imat),CUgb2(1,k))
6525 call transpose2(EUgC(1,1,k),auxmat(1,1))
6526 call matmat2(AEAderx(1,1,lll,kkk,iii,imat),auxmat(1,1),
6528 vv1(1)=pizda1(1,1)-pizda1(2,2)
6529 vv1(2)=pizda1(1,2)+pizda1(2,1)
6530 s4=0.5d0*scalar2(vv1(1),Dtobr2(1,i))
6531 vv(1)=AEAb1derx(1,lll,kkk,iii,2,imat)*b1(1,k)
6532 & -AEAb1derx(2,lll,kkk,iii,2,imat)*b1(2,k)
6533 vv(2)=AEAb1derx(1,lll,kkk,iii,2,imat)*b1(2,k)
6534 & +AEAb1derx(2,lll,kkk,iii,2,imat)*b1(1,k)
6535 s5=scalar2(vv(1),Dtobr2(1,i))
6536 derx(lll,kkk,ind)=derx(lll,kkk,ind)-0.5d0*(s1+s2+s3+s4+s5)
6542 c----------------------------------------------------------------------------
6543 double precision function eello6_graph2(i,j,k,l,jj,kk,swap)
6544 implicit real*8 (a-h,o-z)
6545 include 'DIMENSIONS'
6546 include 'DIMENSIONS.ZSCOPT'
6547 include 'COMMON.IOUNITS'
6548 include 'COMMON.CHAIN'
6549 include 'COMMON.DERIV'
6550 include 'COMMON.INTERACT'
6551 include 'COMMON.CONTACTS'
6552 include 'COMMON.TORSION'
6553 include 'COMMON.VAR'
6554 include 'COMMON.GEO'
6556 double precision vv(2),pizda(2,2),auxmat(2,2),auxvec(2),
6557 & auxvec1(2),auxvec2(2),auxmat1(2,2)
6560 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
6562 C Parallel Antiparallel C
6568 C \ j|/k\| \ |/k\|l C
6573 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
6574 cd write (2,*) 'eello6_graph2: i,',i,' j',j,' k',k,' l',l
6575 C AL 7/4/01 s1 would occur in the sixth-order moment,
6576 C but not in a cluster cumulant
6578 s1=dip(1,jj,i)*dip(1,kk,k)
6580 call matvec2(ADtEA1(1,1,1),Ub2(1,k),auxvec(1))
6581 s2=-0.5d0*scalar2(Ub2(1,i),auxvec(1))
6582 call matvec2(ADtEA(1,1,2),Ub2(1,l),auxvec1(1))
6583 s3=-0.5d0*scalar2(Ub2(1,j),auxvec1(1))
6584 call transpose2(EUg(1,1,k),auxmat(1,1))
6585 call matmat2(ADtEA1(1,1,1),auxmat(1,1),pizda(1,1))
6586 vv(1)=pizda(1,1)-pizda(2,2)
6587 vv(2)=pizda(1,2)+pizda(2,1)
6588 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
6589 cd write (2,*) 'eello6_graph2:','s1',s1,' s2',s2,' s3',s3,' s4',s4
6591 eello6_graph2=-(s1+s2+s3+s4)
6593 eello6_graph2=-(s2+s3+s4)
6596 if (.not. calc_grad) return
6597 C Derivatives in gamma(i-1)
6600 s1=dipderg(1,jj,i)*dip(1,kk,k)
6602 s2=-0.5d0*scalar2(Ub2der(1,i),auxvec(1))
6603 call matvec2(ADtEAderg(1,1,1,2),Ub2(1,l),auxvec2(1))
6604 s3=-0.5d0*scalar2(Ub2(1,j),auxvec2(1))
6605 s4=-0.25d0*scalar2(vv(1),Dtobr2der(1,i))
6607 g_corr6_loc(i-1)=g_corr6_loc(i-1)-ekont*(s1+s2+s3+s4)
6609 g_corr6_loc(i-1)=g_corr6_loc(i-1)-ekont*(s2+s3+s4)
6611 c g_corr6_loc(i-1)=g_corr6_loc(i-1)-s3
6613 C Derivatives in gamma(k-1)
6615 s1=dip(1,jj,i)*dipderg(1,kk,k)
6617 call matvec2(ADtEA1(1,1,1),Ub2der(1,k),auxvec2(1))
6618 s2=-0.5d0*scalar2(Ub2(1,i),auxvec2(1))
6619 call matvec2(ADtEAderg(1,1,2,2),Ub2(1,l),auxvec2(1))
6620 s3=-0.5d0*scalar2(Ub2(1,j),auxvec2(1))
6621 call transpose2(EUgder(1,1,k),auxmat1(1,1))
6622 call matmat2(ADtEA1(1,1,1),auxmat1(1,1),pizda(1,1))
6623 vv(1)=pizda(1,1)-pizda(2,2)
6624 vv(2)=pizda(1,2)+pizda(2,1)
6625 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
6627 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s1+s2+s3+s4)
6629 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s2+s3+s4)
6631 c g_corr6_loc(k-1)=g_corr6_loc(k-1)-s3
6632 C Derivatives in gamma(j-1) or gamma(l-1)
6635 s1=dipderg(3,jj,i)*dip(1,kk,k)
6637 call matvec2(ADtEA1derg(1,1,1,1),Ub2(1,k),auxvec2(1))
6638 s2=-0.5d0*scalar2(Ub2(1,i),auxvec2(1))
6639 s3=-0.5d0*scalar2(Ub2der(1,j),auxvec1(1))
6640 call matmat2(ADtEA1derg(1,1,1,1),auxmat(1,1),pizda(1,1))
6641 vv(1)=pizda(1,1)-pizda(2,2)
6642 vv(2)=pizda(1,2)+pizda(2,1)
6643 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
6646 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*s1
6648 g_corr6_loc(j-1)=g_corr6_loc(j-1)-ekont*s1
6651 g_corr6_loc(j-1)=g_corr6_loc(j-1)-ekont*(s2+s3+s4)
6652 c g_corr6_loc(j-1)=g_corr6_loc(j-1)-s3
6654 C Derivatives in gamma(l-1) or gamma(j-1)
6657 s1=dip(1,jj,i)*dipderg(3,kk,k)
6659 call matvec2(ADtEA1derg(1,1,2,1),Ub2(1,k),auxvec2(1))
6660 s2=-0.5d0*scalar2(Ub2(1,i),auxvec2(1))
6661 call matvec2(ADtEA(1,1,2),Ub2der(1,l),auxvec2(1))
6662 s3=-0.5d0*scalar2(Ub2(1,j),auxvec2(1))
6663 call matmat2(ADtEA1derg(1,1,2,1),auxmat(1,1),pizda(1,1))
6664 vv(1)=pizda(1,1)-pizda(2,2)
6665 vv(2)=pizda(1,2)+pizda(2,1)
6666 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
6669 g_corr6_loc(j-1)=g_corr6_loc(j-1)-ekont*s1
6671 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*s1
6674 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*(s2+s3+s4)
6675 c g_corr6_loc(l-1)=g_corr6_loc(l-1)-s3
6677 C Cartesian derivatives.
6679 write (2,*) 'In eello6_graph2'
6681 write (2,*) 'iii=',iii
6683 write (2,*) 'kkk=',kkk
6685 write (2,'(3(2f10.5),5x)')
6686 & ((ADtEA1derx(jjj,mmm,lll,kkk,iii,1),mmm=1,2),lll=1,3)
6696 s1=dipderx(lll,kkk,1,jj,i)*dip(1,kk,k)
6698 s1=dip(1,jj,i)*dipderx(lll,kkk,1,kk,k)
6701 call matvec2(ADtEA1derx(1,1,lll,kkk,iii,1),Ub2(1,k),
6703 s2=-0.5d0*scalar2(Ub2(1,i),auxvec(1))
6704 call matvec2(ADtEAderx(1,1,lll,kkk,iii,2),Ub2(1,l),
6706 s3=-0.5d0*scalar2(Ub2(1,j),auxvec(1))
6707 call transpose2(EUg(1,1,k),auxmat(1,1))
6708 call matmat2(ADtEA1derx(1,1,lll,kkk,iii,1),auxmat(1,1),
6710 vv(1)=pizda(1,1)-pizda(2,2)
6711 vv(2)=pizda(1,2)+pizda(2,1)
6712 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
6713 cd write (2,*) 's1',s1,' s2',s2,' s3',s3,' s4',s4
6715 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s1+s2+s4)
6717 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s2+s4)
6720 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-s3
6722 derx(lll,kkk,iii)=derx(lll,kkk,iii)-s3
6729 c----------------------------------------------------------------------------
6730 double precision function eello6_graph3(i,j,k,l,jj,kk,swap)
6731 implicit real*8 (a-h,o-z)
6732 include 'DIMENSIONS'
6733 include 'DIMENSIONS.ZSCOPT'
6734 include 'COMMON.IOUNITS'
6735 include 'COMMON.CHAIN'
6736 include 'COMMON.DERIV'
6737 include 'COMMON.INTERACT'
6738 include 'COMMON.CONTACTS'
6739 include 'COMMON.TORSION'
6740 include 'COMMON.VAR'
6741 include 'COMMON.GEO'
6742 double precision vv(2),pizda(2,2),auxmat(2,2),auxvec(2)
6744 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
6746 C Parallel Antiparallel C
6752 C j|/k\| / |/k\|l / C
6757 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
6759 C 4/7/01 AL Component s1 was removed, because it pertains to the respective
6760 C energy moment and not to the cluster cumulant.
6761 iti=itortyp(itype(i))
6762 if (j.lt.nres-1 .and. itype(j+1).le.ntyp) then
6763 itj1=itortyp(itype(j+1))
6767 itk=itortyp(itype(k))
6768 itk1=itortyp(itype(k+1))
6769 if (l.lt.nres-1 .and. itype(l+1).le.ntyp) then
6770 itl1=itortyp(itype(l+1))
6775 s1=dip(4,jj,i)*dip(4,kk,k)
6777 call matvec2(AECA(1,1,1),b1(1,k+1),auxvec(1))
6778 s2=0.5d0*scalar2(b1(1,k),auxvec(1))
6779 call matvec2(AECA(1,1,2),b1(1,l+1),auxvec(1))
6780 s3=0.5d0*scalar2(b1(1,j+1),auxvec(1))
6781 call transpose2(EE(1,1,k),auxmat(1,1))
6782 call matmat2(auxmat(1,1),AECA(1,1,1),pizda(1,1))
6783 vv(1)=pizda(1,1)+pizda(2,2)
6784 vv(2)=pizda(2,1)-pizda(1,2)
6785 s4=-0.25d0*scalar2(vv(1),Ctobr(1,k))
6786 cd write (2,*) 'eello6_graph3:','s1',s1,' s2',s2,' s3',s3,' s4',s4
6788 eello6_graph3=-(s1+s2+s3+s4)
6790 eello6_graph3=-(s2+s3+s4)
6793 if (.not. calc_grad) return
6794 C Derivatives in gamma(k-1)
6795 call matvec2(AECAderg(1,1,2),b1(1,l+1),auxvec(1))
6796 s3=0.5d0*scalar2(b1(1,j+1),auxvec(1))
6797 s4=-0.25d0*scalar2(vv(1),Ctobrder(1,k))
6798 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s3+s4)
6799 C Derivatives in gamma(l-1)
6800 call matvec2(AECAderg(1,1,1),b1(1,k+1),auxvec(1))
6801 s2=0.5d0*scalar2(b1(1,k),auxvec(1))
6802 call matmat2(auxmat(1,1),AECAderg(1,1,1),pizda(1,1))
6803 vv(1)=pizda(1,1)+pizda(2,2)
6804 vv(2)=pizda(2,1)-pizda(1,2)
6805 s4=-0.25d0*scalar2(vv(1),Ctobr(1,k))
6806 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*(s2+s4)
6807 C Cartesian derivatives.
6813 s1=dipderx(lll,kkk,4,jj,i)*dip(4,kk,k)
6815 s1=dip(4,jj,i)*dipderx(lll,kkk,4,kk,k)
6818 call matvec2(AECAderx(1,1,lll,kkk,iii,1),b1(1,k+1),
6820 s2=0.5d0*scalar2(b1(1,k),auxvec(1))
6821 call matvec2(AECAderx(1,1,lll,kkk,iii,2),b1(1,l+1),
6823 s3=0.5d0*scalar2(b1(1,j+1),auxvec(1))
6824 call matmat2(auxmat(1,1),AECAderx(1,1,lll,kkk,iii,1),
6826 vv(1)=pizda(1,1)+pizda(2,2)
6827 vv(2)=pizda(2,1)-pizda(1,2)
6828 s4=-0.25d0*scalar2(vv(1),Ctobr(1,k))
6830 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s1+s2+s4)
6832 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s2+s4)
6835 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-s3
6837 derx(lll,kkk,iii)=derx(lll,kkk,iii)-s3
6839 c derx(lll,kkk,iii)=derx(lll,kkk,iii)-s4
6845 c----------------------------------------------------------------------------
6846 double precision function eello6_graph4(i,j,k,l,jj,kk,imat,swap)
6847 implicit real*8 (a-h,o-z)
6848 include 'DIMENSIONS'
6849 include 'DIMENSIONS.ZSCOPT'
6850 include 'COMMON.IOUNITS'
6851 include 'COMMON.CHAIN'
6852 include 'COMMON.DERIV'
6853 include 'COMMON.INTERACT'
6854 include 'COMMON.CONTACTS'
6855 include 'COMMON.TORSION'
6856 include 'COMMON.VAR'
6857 include 'COMMON.GEO'
6858 include 'COMMON.FFIELD'
6859 double precision vv(2),pizda(2,2),auxmat(2,2),auxvec(2),
6860 & auxvec1(2),auxmat1(2,2)
6862 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
6864 C Parallel Antiparallel C
6870 C \ j|/k\| \ |/k\|l C
6875 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
6877 C 4/7/01 AL Component s1 was removed, because it pertains to the respective
6878 C energy moment and not to the cluster cumulant.
6879 cd write (2,*) 'eello_graph4: wturn6',wturn6
6880 iti=itortyp(itype(i))
6881 itj=itortyp(itype(j))
6882 if (j.lt.nres-1 .and. itype(j+1).le.ntyp) then
6883 itj1=itortyp(itype(j+1))
6887 itk=itortyp(itype(k))
6888 if (k.lt.nres-1 .and. itype(k+1).le.ntyp) then
6889 itk1=itortyp(itype(k+1))
6893 itl=itortyp(itype(l))
6894 if (l.lt.nres-1) then
6895 itl1=itortyp(itype(l+1))
6899 cd write (2,*) 'eello6_graph4:','i',i,' j',j,' k',k,' l',l
6900 cd write (2,*) 'iti',iti,' itj',itj,' itj1',itj1,' itk',itk,
6901 cd & ' itl',itl,' itl1',itl1
6904 s1=dip(3,jj,i)*dip(3,kk,k)
6906 s1=dip(2,jj,j)*dip(2,kk,l)
6909 call matvec2(AECA(1,1,imat),Ub2(1,k),auxvec(1))
6910 s2=0.5d0*scalar2(Ub2(1,i),auxvec(1))
6912 call matvec2(ADtEA1(1,1,3-imat),b1(1,j+1),auxvec1(1))
6913 s3=-0.5d0*scalar2(b1(1,j),auxvec1(1))
6915 call matvec2(ADtEA1(1,1,3-imat),b1(1,l+1),auxvec1(1))
6916 s3=-0.5d0*scalar2(b1(1,l),auxvec1(1))
6918 call transpose2(EUg(1,1,k),auxmat(1,1))
6919 call matmat2(AECA(1,1,imat),auxmat(1,1),pizda(1,1))
6920 vv(1)=pizda(1,1)-pizda(2,2)
6921 vv(2)=pizda(2,1)+pizda(1,2)
6922 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
6923 cd write (2,*) 'eello6_graph4:','s1',s1,' s2',s2,' s3',s3,' s4',s4
6925 eello6_graph4=-(s1+s2+s3+s4)
6927 eello6_graph4=-(s2+s3+s4)
6929 if (.not. calc_grad) return
6930 C Derivatives in gamma(i-1)
6934 s1=dipderg(2,jj,i)*dip(3,kk,k)
6936 s1=dipderg(4,jj,j)*dip(2,kk,l)
6939 s2=0.5d0*scalar2(Ub2der(1,i),auxvec(1))
6941 call matvec2(ADtEA1derg(1,1,1,3-imat),b1(1,j+1),auxvec1(1))
6942 s3=-0.5d0*scalar2(b1(1,j),auxvec1(1))
6944 call matvec2(ADtEA1derg(1,1,1,3-imat),b1(1,l+1),auxvec1(1))
6945 s3=-0.5d0*scalar2(b1(1,l),auxvec1(1))
6947 s4=0.25d0*scalar2(vv(1),Dtobr2der(1,i))
6948 if (wturn6.gt.0.0d0 .and. k.eq.l+4 .and. i.eq.j+2) then
6949 cd write (2,*) 'turn6 derivatives'
6951 gel_loc_turn6(i-1)=gel_loc_turn6(i-1)-ekont*(s1+s2+s3+s4)
6953 gel_loc_turn6(i-1)=gel_loc_turn6(i-1)-ekont*(s2+s3+s4)
6957 g_corr6_loc(i-1)=g_corr6_loc(i-1)-ekont*(s1+s2+s3+s4)
6959 g_corr6_loc(i-1)=g_corr6_loc(i-1)-ekont*(s2+s3+s4)
6963 C Derivatives in gamma(k-1)
6966 s1=dip(3,jj,i)*dipderg(2,kk,k)
6968 s1=dip(2,jj,j)*dipderg(4,kk,l)
6971 call matvec2(AECA(1,1,imat),Ub2der(1,k),auxvec1(1))
6972 s2=0.5d0*scalar2(Ub2(1,i),auxvec1(1))
6974 call matvec2(ADtEA1derg(1,1,2,3-imat),b1(1,j+1),auxvec1(1))
6975 s3=-0.5d0*scalar2(b1(1,j),auxvec1(1))
6977 call matvec2(ADtEA1derg(1,1,2,3-imat),b1(1,l+1),auxvec1(1))
6978 s3=-0.5d0*scalar2(b1(1,l),auxvec1(1))
6980 call transpose2(EUgder(1,1,k),auxmat1(1,1))
6981 call matmat2(AECA(1,1,imat),auxmat1(1,1),pizda(1,1))
6982 vv(1)=pizda(1,1)-pizda(2,2)
6983 vv(2)=pizda(2,1)+pizda(1,2)
6984 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
6985 if (wturn6.gt.0.0d0 .and. k.eq.l+4 .and. i.eq.j+2) then
6987 gel_loc_turn6(k-1)=gel_loc_turn6(k-1)-ekont*(s1+s2+s3+s4)
6989 gel_loc_turn6(k-1)=gel_loc_turn6(k-1)-ekont*(s2+s3+s4)
6993 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s1+s2+s3+s4)
6995 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s2+s3+s4)
6998 C Derivatives in gamma(j-1) or gamma(l-1)
6999 if (l.eq.j+1 .and. l.gt.1) then
7000 call matvec2(AECAderg(1,1,imat),Ub2(1,k),auxvec(1))
7001 s2=0.5d0*scalar2(Ub2(1,i),auxvec(1))
7002 call matmat2(AECAderg(1,1,imat),auxmat(1,1),pizda(1,1))
7003 vv(1)=pizda(1,1)-pizda(2,2)
7004 vv(2)=pizda(2,1)+pizda(1,2)
7005 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
7006 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*(s2+s4)
7007 else if (j.gt.1) then
7008 call matvec2(AECAderg(1,1,imat),Ub2(1,k),auxvec(1))
7009 s2=0.5d0*scalar2(Ub2(1,i),auxvec(1))
7010 call matmat2(AECAderg(1,1,imat),auxmat(1,1),pizda(1,1))
7011 vv(1)=pizda(1,1)-pizda(2,2)
7012 vv(2)=pizda(2,1)+pizda(1,2)
7013 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
7014 if (wturn6.gt.0.0d0 .and. k.eq.l+4 .and. i.eq.j+2) then
7015 gel_loc_turn6(j-1)=gel_loc_turn6(j-1)-ekont*(s2+s4)
7017 g_corr6_loc(j-1)=g_corr6_loc(j-1)-ekont*(s2+s4)
7020 C Cartesian derivatives.
7027 s1=dipderx(lll,kkk,3,jj,i)*dip(3,kk,k)
7029 s1=dipderx(lll,kkk,2,jj,j)*dip(2,kk,l)
7033 s1=dip(3,jj,i)*dipderx(lll,kkk,3,kk,k)
7035 s1=dip(2,jj,j)*dipderx(lll,kkk,2,kk,l)
7039 call matvec2(AECAderx(1,1,lll,kkk,iii,imat),Ub2(1,k),
7041 s2=0.5d0*scalar2(Ub2(1,i),auxvec(1))
7043 call matvec2(ADtEA1derx(1,1,lll,kkk,iii,3-imat),
7044 & b1(1,j+1),auxvec(1))
7045 s3=-0.5d0*scalar2(b1(1,j),auxvec(1))
7047 call matvec2(ADtEA1derx(1,1,lll,kkk,iii,3-imat),
7048 & b1(1,l+1),auxvec(1))
7049 s3=-0.5d0*scalar2(b1(1,l),auxvec(1))
7051 call matmat2(AECAderx(1,1,lll,kkk,iii,imat),auxmat(1,1),
7053 vv(1)=pizda(1,1)-pizda(2,2)
7054 vv(2)=pizda(2,1)+pizda(1,2)
7055 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
7057 if (wturn6.gt.0.0d0 .and. k.eq.l+4 .and. i.eq.j+2) then
7059 derx_turn(lll,kkk,3-iii)=derx_turn(lll,kkk,3-iii)
7062 derx_turn(lll,kkk,3-iii)=derx_turn(lll,kkk,3-iii)
7065 derx_turn(lll,kkk,iii)=derx_turn(lll,kkk,iii)-s3
7068 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-(s1+s2+s4)
7070 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-(s2+s4)
7072 derx(lll,kkk,iii)=derx(lll,kkk,iii)-s3
7076 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s1+s2+s4)
7078 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s2+s4)
7081 derx(lll,kkk,iii)=derx(lll,kkk,iii)-s3
7083 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-s3
7091 c----------------------------------------------------------------------------
7092 double precision function eello_turn6(i,jj,kk)
7093 implicit real*8 (a-h,o-z)
7094 include 'DIMENSIONS'
7095 include 'DIMENSIONS.ZSCOPT'
7096 include 'COMMON.IOUNITS'
7097 include 'COMMON.CHAIN'
7098 include 'COMMON.DERIV'
7099 include 'COMMON.INTERACT'
7100 include 'COMMON.CONTACTS'
7101 include 'COMMON.TORSION'
7102 include 'COMMON.VAR'
7103 include 'COMMON.GEO'
7104 double precision vtemp1(2),vtemp2(2),vtemp3(2),vtemp4(2),
7105 & atemp(2,2),auxmat(2,2),achuj_temp(2,2),gtemp(2,2),gvec(2),
7107 double precision vtemp1d(2),vtemp2d(2),vtemp3d(2),vtemp4d(2),
7108 & atempd(2,2),auxmatd(2,2),achuj_tempd(2,2),gtempd(2,2),gvecd(2)
7109 C 4/7/01 AL Components s1, s8, and s13 were removed, because they pertain to
7110 C the respective energy moment and not to the cluster cumulant.
7115 iti=itortyp(itype(i))
7116 itk=itortyp(itype(k))
7117 itk1=itortyp(itype(k+1))
7118 itl=itortyp(itype(l))
7119 itj=itortyp(itype(j))
7120 cd write (2,*) 'itk',itk,' itk1',itk1,' itl',itl,' itj',itj
7121 cd write (2,*) 'i',i,' k',k,' j',j,' l',l
7122 cd if (i.ne.1 .or. j.ne.3 .or. k.ne.2 .or. l.ne.4) then
7127 cd & 'EELLO6: Contacts have occurred for peptide groups',i,j,
7129 cd call checkint_turn6(i,jj,kk,eel_turn6_num)
7133 derx_turn(lll,kkk,iii)=0.0d0
7140 eello6_5=eello6_graph4(l,k,j,i,kk,jj,2,.true.)
7142 cd write (2,*) 'eello6_5',eello6_5
7144 call transpose2(AEA(1,1,1),auxmat(1,1))
7145 call matmat2(EUg(1,1,i+1),auxmat(1,1),auxmat(1,1))
7146 ss1=scalar2(Ub2(1,i+2),b1(1,l))
7147 s1 = (auxmat(1,1)+auxmat(2,2))*ss1
7151 call matvec2(EUg(1,1,i+2),b1(1,l),vtemp1(1))
7152 call matvec2(AEA(1,1,1),vtemp1(1),vtemp1(1))
7153 s2 = scalar2(b1(1,k),vtemp1(1))
7155 call transpose2(AEA(1,1,2),atemp(1,1))
7156 call matmat2(atemp(1,1),EUg(1,1,i+4),atemp(1,1))
7157 call matvec2(Ug2(1,1,i+2),dd(1,1,itk1),vtemp2(1))
7158 s8 = -(atemp(1,1)+atemp(2,2))*scalar2(cc(1,1,itl),vtemp2(1))
7162 call matmat2(EUg(1,1,i+3),AEA(1,1,2),auxmat(1,1))
7163 call matvec2(auxmat(1,1),Ub2(1,i+4),vtemp3(1))
7164 s12 = scalar2(Ub2(1,i+2),vtemp3(1))
7166 call transpose2(a_chuj(1,1,kk,i+1),achuj_temp(1,1))
7167 call matmat2(achuj_temp(1,1),EUg(1,1,i+2),gtemp(1,1))
7168 call matmat2(gtemp(1,1),EUg(1,1,i+3),gtemp(1,1))
7169 call matvec2(a_chuj(1,1,jj,i),Ub2(1,i+4),vtemp4(1))
7170 ss13 = scalar2(b1(1,k),vtemp4(1))
7171 s13 = (gtemp(1,1)+gtemp(2,2))*ss13
7175 c write (2,*) 's1,s2,s8,s12,s13',s1,s2,s8,s12,s13
7181 eel_turn6 = eello6_5 - 0.5d0*(s1+s2+s12+s8+s13)
7183 C Derivatives in gamma(i+2)
7185 call transpose2(AEA(1,1,1),auxmatd(1,1))
7186 call matmat2(EUgder(1,1,i+1),auxmatd(1,1),auxmatd(1,1))
7187 s1d = (auxmatd(1,1)+auxmatd(2,2))*ss1
7188 call transpose2(AEAderg(1,1,2),atempd(1,1))
7189 call matmat2(atempd(1,1),EUg(1,1,i+4),atempd(1,1))
7190 s8d = -(atempd(1,1)+atempd(2,2))*scalar2(cc(1,1,itl),vtemp2(1))
7194 call matmat2(EUg(1,1,i+3),AEAderg(1,1,2),auxmatd(1,1))
7195 call matvec2(auxmatd(1,1),Ub2(1,i+4),vtemp3d(1))
7196 s12d = scalar2(Ub2(1,i+2),vtemp3d(1))
7202 gel_loc_turn6(i)=gel_loc_turn6(i)-0.5d0*ekont*(s1d+s8d+s12d)
7203 C Derivatives in gamma(i+3)
7205 call transpose2(AEA(1,1,1),auxmatd(1,1))
7206 call matmat2(EUg(1,1,i+1),auxmatd(1,1),auxmatd(1,1))
7207 ss1d=scalar2(Ub2der(1,i+2),b1(1,l))
7208 s1d = (auxmatd(1,1)+auxmatd(2,2))*ss1d
7212 call matvec2(EUgder(1,1,i+2),b1(1,l),vtemp1d(1))
7213 call matvec2(AEA(1,1,1),vtemp1d(1),vtemp1d(1))
7214 s2d = scalar2(b1(1,k),vtemp1d(1))
7216 call matvec2(Ug2der(1,1,i+2),dd(1,1,itk1),vtemp2d(1))
7217 s8d = -(atemp(1,1)+atemp(2,2))*scalar2(cc(1,1,itl),vtemp2d(1))
7219 s12d = scalar2(Ub2der(1,i+2),vtemp3(1))
7221 call matmat2(achuj_temp(1,1),EUgder(1,1,i+2),gtempd(1,1))
7222 call matmat2(gtempd(1,1),EUg(1,1,i+3),gtempd(1,1))
7223 s13d = (gtempd(1,1)+gtempd(2,2))*ss13
7233 gel_loc_turn6(i+1)=gel_loc_turn6(i+1)
7234 & -0.5d0*ekont*(s1d+s2d+s8d+s12d+s13d)
7236 gel_loc_turn6(i+1)=gel_loc_turn6(i+1)
7237 & -0.5d0*ekont*(s2d+s12d)
7239 C Derivatives in gamma(i+4)
7240 call matmat2(EUgder(1,1,i+3),AEA(1,1,2),auxmatd(1,1))
7241 call matvec2(auxmatd(1,1),Ub2(1,i+4),vtemp3d(1))
7242 s12d = scalar2(Ub2(1,i+2),vtemp3d(1))
7244 call matmat2(achuj_temp(1,1),EUg(1,1,i+2),gtempd(1,1))
7245 call matmat2(gtempd(1,1),EUgder(1,1,i+3),gtempd(1,1))
7246 s13d = (gtempd(1,1)+gtempd(2,2))*ss13
7256 gel_loc_turn6(i+2)=gel_loc_turn6(i+2)-0.5d0*ekont*(s12d+s13d)
7258 gel_loc_turn6(i+2)=gel_loc_turn6(i+2)-0.5d0*ekont*(s12d)
7260 C Derivatives in gamma(i+5)
7262 call transpose2(AEAderg(1,1,1),auxmatd(1,1))
7263 call matmat2(EUg(1,1,i+1),auxmatd(1,1),auxmatd(1,1))
7264 s1d = (auxmatd(1,1)+auxmatd(2,2))*ss1
7268 call matvec2(EUg(1,1,i+2),b1(1,l),vtemp1d(1))
7269 call matvec2(AEAderg(1,1,1),vtemp1d(1),vtemp1d(1))
7270 s2d = scalar2(b1(1,k),vtemp1d(1))
7272 call transpose2(AEA(1,1,2),atempd(1,1))
7273 call matmat2(atempd(1,1),EUgder(1,1,i+4),atempd(1,1))
7274 s8d = -(atempd(1,1)+atempd(2,2))*scalar2(cc(1,1,itl),vtemp2(1))
7278 call matvec2(auxmat(1,1),Ub2der(1,i+4),vtemp3d(1))
7279 s12d = scalar2(Ub2(1,i+2),vtemp3d(1))
7281 call matvec2(a_chuj(1,1,jj,i),Ub2der(1,i+4),vtemp4d(1))
7282 ss13d = scalar2(b1(1,k),vtemp4d(1))
7283 s13d = (gtemp(1,1)+gtemp(2,2))*ss13d
7293 gel_loc_turn6(i+3)=gel_loc_turn6(i+3)
7294 & -0.5d0*ekont*(s1d+s2d+s8d+s12d+s13d)
7296 gel_loc_turn6(i+3)=gel_loc_turn6(i+3)
7297 & -0.5d0*ekont*(s2d+s12d)
7299 C Cartesian derivatives
7304 call transpose2(AEAderx(1,1,lll,kkk,iii,1),auxmatd(1,1))
7305 call matmat2(EUg(1,1,i+1),auxmatd(1,1),auxmatd(1,1))
7306 s1d = (auxmatd(1,1)+auxmatd(2,2))*ss1
7310 call matvec2(EUg(1,1,i+2),b1(1,l),vtemp1(1))
7311 call matvec2(AEAderx(1,1,lll,kkk,iii,1),vtemp1(1),
7313 s2d = scalar2(b1(1,k),vtemp1d(1))
7315 call transpose2(AEAderx(1,1,lll,kkk,iii,2),atempd(1,1))
7316 call matmat2(atempd(1,1),EUg(1,1,i+4),atempd(1,1))
7317 s8d = -(atempd(1,1)+atempd(2,2))*
7318 & scalar2(cc(1,1,itl),vtemp2(1))
7322 call matmat2(EUg(1,1,i+3),AEAderx(1,1,lll,kkk,iii,2),
7324 call matvec2(auxmatd(1,1),Ub2(1,i+4),vtemp3d(1))
7325 s12d = scalar2(Ub2(1,i+2),vtemp3d(1))
7332 derx_turn(lll,kkk,iii) = derx_turn(lll,kkk,iii)
7335 derx_turn(lll,kkk,iii) = derx_turn(lll,kkk,iii)
7339 derx_turn(lll,kkk,3-iii) = derx_turn(lll,kkk,3-iii)
7340 & - 0.5d0*(s8d+s12d)
7342 derx_turn(lll,kkk,3-iii) = derx_turn(lll,kkk,3-iii)
7351 call transpose2(a_chuj_der(1,1,lll,kkk,kk,i+1),
7353 call matmat2(achuj_tempd(1,1),EUg(1,1,i+2),gtempd(1,1))
7354 call matmat2(gtempd(1,1),EUg(1,1,i+3),gtempd(1,1))
7355 s13d=(gtempd(1,1)+gtempd(2,2))*ss13
7356 derx_turn(lll,kkk,2) = derx_turn(lll,kkk,2)-0.5d0*s13d
7357 call matvec2(a_chuj_der(1,1,lll,kkk,jj,i),Ub2(1,i+4),
7359 ss13d = scalar2(b1(1,k),vtemp4d(1))
7360 s13d = (gtemp(1,1)+gtemp(2,2))*ss13d
7361 derx_turn(lll,kkk,1) = derx_turn(lll,kkk,1)-0.5d0*s13d
7365 cd write(iout,*) 'eel6_turn6',eel_turn6,' eel_turn6_num',
7366 cd & 16*eel_turn6_num
7368 if (j.lt.nres-1) then
7375 if (l.lt.nres-1) then
7383 ggg1(ll)=eel_turn6*g_contij(ll,1)
7384 ggg2(ll)=eel_turn6*g_contij(ll,2)
7385 ghalf=0.5d0*ggg1(ll)
7387 gcorr6_turn(ll,i)=gcorr6_turn(ll,i)+ghalf
7388 & +ekont*derx_turn(ll,2,1)
7389 gcorr6_turn(ll,i+1)=gcorr6_turn(ll,i+1)+ekont*derx_turn(ll,3,1)
7390 gcorr6_turn(ll,j)=gcorr6_turn(ll,j)+ghalf
7391 & +ekont*derx_turn(ll,4,1)
7392 gcorr6_turn(ll,j1)=gcorr6_turn(ll,j1)+ekont*derx_turn(ll,5,1)
7393 ghalf=0.5d0*ggg2(ll)
7395 gcorr6_turn(ll,k)=gcorr6_turn(ll,k)+ghalf
7396 & +ekont*derx_turn(ll,2,2)
7397 gcorr6_turn(ll,k+1)=gcorr6_turn(ll,k+1)+ekont*derx_turn(ll,3,2)
7398 gcorr6_turn(ll,l)=gcorr6_turn(ll,l)+ghalf
7399 & +ekont*derx_turn(ll,4,2)
7400 gcorr6_turn(ll,l1)=gcorr6_turn(ll,l1)+ekont*derx_turn(ll,5,2)
7405 gcorr6_turn(ll,m)=gcorr6_turn(ll,m)+ggg1(ll)
7410 gcorr6_turn(ll,m)=gcorr6_turn(ll,m)+ggg2(ll)
7416 gcorr6_turn(ll,m)=gcorr6_turn(ll,m)+ekont*derx_turn(ll,1,1)
7421 gcorr6_turn(ll,m)=gcorr6_turn(ll,m)+ekont*derx_turn(ll,1,2)
7425 cd write (2,*) iii,g_corr6_loc(iii)
7428 eello_turn6=ekont*eel_turn6
7429 cd write (2,*) 'ekont',ekont
7430 cd write (2,*) 'eel_turn6',ekont*eel_turn6
7433 crc-------------------------------------------------
7434 SUBROUTINE MATVEC2(A1,V1,V2)
7435 implicit real*8 (a-h,o-z)
7436 include 'DIMENSIONS'
7437 DIMENSION A1(2,2),V1(2),V2(2)
7441 c 3 VI=VI+A1(I,K)*V1(K)
7445 vaux1=a1(1,1)*v1(1)+a1(1,2)*v1(2)
7446 vaux2=a1(2,1)*v1(1)+a1(2,2)*v1(2)
7451 C---------------------------------------
7452 SUBROUTINE MATMAT2(A1,A2,A3)
7453 implicit real*8 (a-h,o-z)
7454 include 'DIMENSIONS'
7455 DIMENSION A1(2,2),A2(2,2),A3(2,2)
7456 c DIMENSION AI3(2,2)
7460 c A3IJ=A3IJ+A1(I,K)*A2(K,J)
7466 ai3_11=a1(1,1)*a2(1,1)+a1(1,2)*a2(2,1)
7467 ai3_12=a1(1,1)*a2(1,2)+a1(1,2)*a2(2,2)
7468 ai3_21=a1(2,1)*a2(1,1)+a1(2,2)*a2(2,1)
7469 ai3_22=a1(2,1)*a2(1,2)+a1(2,2)*a2(2,2)
7477 c-------------------------------------------------------------------------
7478 double precision function scalar2(u,v)
7480 double precision u(2),v(2)
7483 scalar2=u(1)*v(1)+u(2)*v(2)
7487 C-----------------------------------------------------------------------------
7489 subroutine transpose2(a,at)
7491 double precision a(2,2),at(2,2)
7498 c--------------------------------------------------------------------------
7499 subroutine transpose(n,a,at)
7502 double precision a(n,n),at(n,n)
7510 C---------------------------------------------------------------------------
7511 subroutine prodmat3(a1,a2,kk,transp,prod)
7514 double precision a1(2,2),a2(2,2),a2t(2,2),kk(2,2),prod(2,2)
7516 crc double precision auxmat(2,2),prod_(2,2)
7519 crc call transpose2(kk(1,1),auxmat(1,1))
7520 crc call matmat2(a1(1,1),auxmat(1,1),auxmat(1,1))
7521 crc call matmat2(auxmat(1,1),a2(1,1),prod_(1,1))
7523 prod(1,1)=(a1(1,1)*kk(1,1)+a1(1,2)*kk(1,2))*a2(1,1)
7524 & +(a1(1,1)*kk(2,1)+a1(1,2)*kk(2,2))*a2(2,1)
7525 prod(1,2)=(a1(1,1)*kk(1,1)+a1(1,2)*kk(1,2))*a2(1,2)
7526 & +(a1(1,1)*kk(2,1)+a1(1,2)*kk(2,2))*a2(2,2)
7527 prod(2,1)=(a1(2,1)*kk(1,1)+a1(2,2)*kk(1,2))*a2(1,1)
7528 & +(a1(2,1)*kk(2,1)+a1(2,2)*kk(2,2))*a2(2,1)
7529 prod(2,2)=(a1(2,1)*kk(1,1)+a1(2,2)*kk(1,2))*a2(1,2)
7530 & +(a1(2,1)*kk(2,1)+a1(2,2)*kk(2,2))*a2(2,2)
7533 crc call matmat2(a1(1,1),kk(1,1),auxmat(1,1))
7534 crc call matmat2(auxmat(1,1),a2(1,1),prod_(1,1))
7536 prod(1,1)=(a1(1,1)*kk(1,1)+a1(1,2)*kk(2,1))*a2(1,1)
7537 & +(a1(1,1)*kk(1,2)+a1(1,2)*kk(2,2))*a2(2,1)
7538 prod(1,2)=(a1(1,1)*kk(1,1)+a1(1,2)*kk(2,1))*a2(1,2)
7539 & +(a1(1,1)*kk(1,2)+a1(1,2)*kk(2,2))*a2(2,2)
7540 prod(2,1)=(a1(2,1)*kk(1,1)+a1(2,2)*kk(2,1))*a2(1,1)
7541 & +(a1(2,1)*kk(1,2)+a1(2,2)*kk(2,2))*a2(2,1)
7542 prod(2,2)=(a1(2,1)*kk(1,1)+a1(2,2)*kk(2,1))*a2(1,2)
7543 & +(a1(2,1)*kk(1,2)+a1(2,2)*kk(2,2))*a2(2,2)
7546 c call transpose2(a2(1,1),a2t(1,1))
7549 crc print *,((prod_(i,j),i=1,2),j=1,2)
7550 crc print *,((prod(i,j),i=1,2),j=1,2)
7554 C-----------------------------------------------------------------------------
7555 double precision function scalar(u,v)
7557 double precision u(3),v(3)