1 subroutine etotal(energia,fact)
2 implicit real*8 (a-h,o-z)
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
127 c call enerprint(energia(0),frac)
129 energia(2)=evdw2-evdw2_14
146 energia(8)=eello_turn3
147 energia(9)=eello_turn4
156 energia(20)=edihcnstr
161 if (isnan(etot).ne.0) energia(0)=1.0d+99
163 if (isnan(etot)) energia(0)=1.0d+99
168 idumm=proc_proc(etot,i)
170 call proc_proc(etot,i)
172 if(i.eq.1)energia(0)=1.0d+99
179 C Sum up the components of the Cartesian gradient.
184 gradc(j,i,icg)=wsc*gvdwc(j,i)+wscp*gvdwc_scp(j,i)+
185 & welec*fact(1)*gelc(j,i)+wvdwpp*gvdwpp(j,i)+
187 & wstrain*ghpbc(j,i)+
188 & wcorr*fact(3)*gradcorr(j,i)+
189 & wel_loc*fact(2)*gel_loc(j,i)+
190 & wturn3*fact(2)*gcorr3_turn(j,i)+
191 & wturn4*fact(3)*gcorr4_turn(j,i)+
192 & wcorr5*fact(4)*gradcorr5(j,i)+
193 & wcorr6*fact(5)*gradcorr6(j,i)+
194 & wturn6*fact(5)*gcorr6_turn(j,i)+
195 & wsccor*fact(2)*gsccorc(j,i)
196 gradx(j,i,icg)=wsc*gvdwx(j,i)+wscp*gradx_scp(j,i)+
198 & wstrain*ghpbx(j,i)+wcorr*gradxorr(j,i)+
199 & wsccor*fact(2)*gsccorx(j,i)
204 gradc(j,i,icg)=wsc*gvdwc(j,i)+wscp*gvdwc_scp(j,i)+
205 & welec*fact(1)*gelc(j,i)+wstrain*ghpbc(j,i)+
207 & wcorr*fact(3)*gradcorr(j,i)+
208 & wel_loc*fact(2)*gel_loc(j,i)+
209 & wturn3*fact(2)*gcorr3_turn(j,i)+
210 & wturn4*fact(3)*gcorr4_turn(j,i)+
211 & wcorr5*fact(4)*gradcorr5(j,i)+
212 & wcorr6*fact(5)*gradcorr6(j,i)+
213 & wturn6*fact(5)*gcorr6_turn(j,i)+
214 & wsccor*fact(2)*gsccorc(j,i)
215 gradx(j,i,icg)=wsc*gvdwx(j,i)+wscp*gradx_scp(j,i)+
217 & wstrain*ghpbx(j,i)+wcorr*gradxorr(j,i)+
218 & wsccor*fact(1)*gsccorx(j,i)
225 gloc(i,icg)=gloc(i,icg)+wcorr*fact(3)*gcorr_loc(i)
226 & +wcorr5*fact(4)*g_corr5_loc(i)
227 & +wcorr6*fact(5)*g_corr6_loc(i)
228 & +wturn4*fact(3)*gel_loc_turn4(i)
229 & +wturn3*fact(2)*gel_loc_turn3(i)
230 & +wturn6*fact(5)*gel_loc_turn6(i)
231 & +wel_loc*fact(2)*gel_loc_loc(i)
232 & +wsccor*fact(1)*gsccor_loc(i)
237 C------------------------------------------------------------------------
238 subroutine enerprint(energia,fact)
239 implicit real*8 (a-h,o-z)
241 include 'sizesclu.dat'
242 include 'COMMON.IOUNITS'
243 include 'COMMON.FFIELD'
244 include 'COMMON.SBRIDGE'
245 double precision energia(0:max_ene),fact(6)
247 evdw=energia(1)+fact(6)*energia(21)
249 evdw2=energia(2)+energia(17)
261 eello_turn3=energia(8)
262 eello_turn4=energia(9)
263 eello_turn6=energia(10)
270 edihcnstr=energia(20)
273 write (iout,10) evdw,wsc,evdw2,wscp,ees,welec*fact(1),evdw1,
275 & estr,wbond,ebe,wang,escloc,wscloc,etors,wtor*fact(1),
276 & etors_d,wtor_d*fact(2),ehpb,wstrain,
277 & ecorr,wcorr*fact(3),ecorr5,wcorr5*fact(4),ecorr6,wcorr6*fact(5),
278 & eel_loc,wel_loc*fact(2),eello_turn3,wturn3*fact(2),
279 & eello_turn4,wturn4*fact(3),eello_turn6,wturn6*fact(5),
280 & esccor,wsccor*fact(1),edihcnstr,ebr*nss,etot
281 10 format (/'Virtual-chain energies:'//
282 & 'EVDW= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC-SC)'/
283 & 'EVDW2= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC-p)'/
284 & 'EES= ',1pE16.6,' WEIGHT=',1pD16.6,' (p-p elec)'/
285 & 'EVDWPP=',1pE16.6,' WEIGHT=',1pD16.6,' (p-p VDW)'/
286 & 'ESTR= ',1pE16.6,' WEIGHT=',1pD16.6,' (stretching)'/
287 & 'EBE= ',1pE16.6,' WEIGHT=',1pD16.6,' (bending)'/
288 & 'ESC= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC local)'/
289 & 'ETORS= ',1pE16.6,' WEIGHT=',1pD16.6,' (torsional)'/
290 & 'ETORSD=',1pE16.6,' WEIGHT=',1pD16.6,' (double torsional)'/
291 & 'EHBP= ',1pE16.6,' WEIGHT=',1pD16.6,
292 & ' (SS bridges & dist. cnstr.)'/
293 & 'ECORR4=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
294 & 'ECORR5=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
295 & 'ECORR6=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
296 & 'EELLO= ',1pE16.6,' WEIGHT=',1pD16.6,' (electrostatic-local)'/
297 & 'ETURN3=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 3rd order)'/
298 & 'ETURN4=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 4th order)'/
299 & 'ETURN6=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 6th order)'/
300 & 'ESCCOR=',1pE16.6,' WEIGHT=',1pD16.6,' (backbone-rotamer corr)'/
301 & 'EDIHC= ',1pE16.6,' (dihedral angle constraints)'/
302 & 'ESS= ',1pE16.6,' (disulfide-bridge intrinsic energy)'/
303 & 'ETOT= ',1pE16.6,' (total)')
305 write (iout,10) evdw,wsc,evdw2,wscp,ees,welec*fact(1),estr,wbond,
306 & ebe,wang,escloc,wscloc,etors,wtor*fact(1),etors_d,wtor_d*fact2,
307 & ehpb,wstrain,ecorr,wcorr*fact(3),ecorr5,wcorr5*fact(4),
308 & ecorr6,wcorr6*fact(5),eel_loc,wel_loc*fact(2),
309 & eello_turn3,wturn3*fact(2),eello_turn4,wturn4*fact(3),
310 & eello_turn6,wturn6*fact(5),esccor*fact(1),wsccor,
311 & edihcnstr,ebr*nss,etot
312 10 format (/'Virtual-chain energies:'//
313 & 'EVDW= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC-SC)'/
314 & 'EVDW2= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC-p)'/
315 & 'EES= ',1pE16.6,' WEIGHT=',1pD16.6,' (p-p)'/
316 & 'ESTR= ',1pE16.6,' WEIGHT=',1pD16.6,' (stretching)'/
317 & 'EBE= ',1pE16.6,' WEIGHT=',1pD16.6,' (bending)'/
318 & 'ESC= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC local)'/
319 & 'ETORS= ',1pE16.6,' WEIGHT=',1pD16.6,' (torsional)'/
320 & 'ETORSD=',1pE16.6,' WEIGHT=',1pD16.6,' (double torsional)'/
321 & 'EHBP= ',1pE16.6,' WEIGHT=',1pD16.6,
322 & ' (SS bridges & dist. cnstr.)'/
323 & 'ECORR4=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
324 & 'ECORR5=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
325 & 'ECORR6=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
326 & 'EELLO= ',1pE16.6,' WEIGHT=',1pD16.6,' (electrostatic-local)'/
327 & 'ETURN3=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 3rd order)'/
328 & 'ETURN4=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 4th order)'/
329 & 'ETURN6=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 6th order)'/
330 & 'ESCCOR=',1pE16.6,' WEIGHT=',1pD16.6,' (backbone-rotamer corr)'/
331 & 'EDIHC= ',1pE16.6,' (dihedral angle constraints)'/
332 & 'ESS= ',1pE16.6,' (disulfide-bridge intrinsic energy)'/
333 & 'ETOT= ',1pE16.6,' (total)')
337 C-----------------------------------------------------------------------
338 subroutine elj(evdw,evdw_t)
340 C This subroutine calculates the interaction energy of nonbonded side chains
341 C assuming the LJ potential of interaction.
343 implicit real*8 (a-h,o-z)
345 include 'sizesclu.dat'
346 include "DIMENSIONS.COMPAR"
347 parameter (accur=1.0d-10)
350 include 'COMMON.LOCAL'
351 include 'COMMON.CHAIN'
352 include 'COMMON.DERIV'
353 include 'COMMON.INTERACT'
354 include 'COMMON.TORSION'
355 include 'COMMON.SBRIDGE'
356 include 'COMMON.NAMES'
357 include 'COMMON.IOUNITS'
358 include 'COMMON.CONTACTS'
362 cd print *,'Entering ELJ nnt=',nnt,' nct=',nct,' expon=',expon
367 if (itypi.eq.ntyp1) cycle
368 itypi1=iabs(itype(i+1))
375 C Calculate SC interaction energy.
378 cd write (iout,*) 'i=',i,' iint=',iint,' istart=',istart(i,iint),
379 cd & 'iend=',iend(i,iint)
380 do j=istart(i,iint),iend(i,iint)
382 if (itypj.eq.ntyp1) cycle
386 C Change 12/1/95 to calculate four-body interactions
387 rij=xj*xj+yj*yj+zj*zj
389 c write (iout,*)'i=',i,' j=',j,' itypi=',itypi,' itypj=',itypj
390 eps0ij=eps(itypi,itypj)
392 e1=fac*fac*aa(itypi,itypj)
393 e2=fac*bb(itypi,itypj)
395 ij=icant(itypi,itypj)
396 cd sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
397 cd epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
398 cd write (iout,'(2(a3,i3,2x),6(1pd12.4)/2(3(1pd12.4),5x)/)')
399 cd & restyp(itypi),i,restyp(itypj),j,aa(itypi,itypj),
400 cd & bb(itypi,itypj),1.0D0/dsqrt(rrij),evdwij,epsi,sigm,
401 cd & (c(k,i),k=1,3),(c(k,j),k=1,3)
402 if (bb(itypi,itypj).gt.0.0d0) then
409 C Calculate the components of the gradient in DC and X
411 fac=-rrij*(e1+evdwij)
416 gvdwx(k,i)=gvdwx(k,i)-gg(k)
417 gvdwx(k,j)=gvdwx(k,j)+gg(k)
421 gvdwc(l,k)=gvdwc(l,k)+gg(l)
426 C 12/1/95, revised on 5/20/97
428 C Calculate the contact function. The ith column of the array JCONT will
429 C contain the numbers of atoms that make contacts with the atom I (of numbers
430 C greater than I). The arrays FACONT and GACONT will contain the values of
431 C the contact function and its derivative.
433 C Uncomment next line, if the correlation interactions include EVDW explicitly.
434 c if (j.gt.i+1 .and. evdwij.le.0.0D0) then
435 C Uncomment next line, if the correlation interactions are contact function only
436 if (j.gt.i+1.and. eps0ij.gt.0.0D0) then
438 sigij=sigma(itypi,itypj)
439 r0ij=rs0(itypi,itypj)
441 C Check whether the SC's are not too far to make a contact.
444 call gcont(rij,rcut,1.0d0,0.2d0*rcut,fcont,fprimcont)
445 C Add a new contact, if the SC's are close enough, but not too close (r<sigma).
447 if (fcont.gt.0.0D0) then
448 C If the SC-SC distance if close to sigma, apply spline.
449 cAdam call gcont(-rij,-1.03d0*sigij,2.0d0*sigij,1.0d0,
450 cAdam & fcont1,fprimcont1)
451 cAdam fcont1=1.0d0-fcont1
452 cAdam if (fcont1.gt.0.0d0) then
453 cAdam fprimcont=fprimcont*fcont1+fcont*fprimcont1
454 cAdam fcont=fcont*fcont1
456 C Uncomment following 4 lines to have the geometric average of the epsilon0's
457 cga eps0ij=1.0d0/dsqrt(eps0ij)
459 cga gg(k)=gg(k)*eps0ij
461 cga eps0ij=-evdwij*eps0ij
462 C Uncomment for AL's type of SC correlation interactions.
464 num_conti=num_conti+1
466 facont(num_conti,i)=fcont*eps0ij
467 fprimcont=eps0ij*fprimcont/rij
469 cAdam gacont(1,num_conti,i)=-fprimcont*xj+fcont*gg(1)
470 cAdam gacont(2,num_conti,i)=-fprimcont*yj+fcont*gg(2)
471 cAdam gacont(3,num_conti,i)=-fprimcont*zj+fcont*gg(3)
472 C Uncomment following 3 lines for Skolnick's type of SC correlation.
473 gacont(1,num_conti,i)=-fprimcont*xj
474 gacont(2,num_conti,i)=-fprimcont*yj
475 gacont(3,num_conti,i)=-fprimcont*zj
476 cd write (iout,'(2i5,2f10.5)') i,j,rij,facont(num_conti,i)
477 cd write (iout,'(2i3,3f10.5)')
478 cd & i,j,(gacont(kk,num_conti,i),kk=1,3)
484 num_cont(i)=num_conti
489 gvdwc(j,i)=expon*gvdwc(j,i)
490 gvdwx(j,i)=expon*gvdwx(j,i)
494 C******************************************************************************
498 C To save time, the factor of EXPON has been extracted from ALL components
499 C of GVDWC and GRADX. Remember to multiply them by this factor before further
502 C******************************************************************************
505 C-----------------------------------------------------------------------------
506 subroutine eljk(evdw,evdw_t)
508 C This subroutine calculates the interaction energy of nonbonded side chains
509 C assuming the LJK potential of interaction.
511 implicit real*8 (a-h,o-z)
513 include 'sizesclu.dat'
514 include "DIMENSIONS.COMPAR"
517 include 'COMMON.LOCAL'
518 include 'COMMON.CHAIN'
519 include 'COMMON.DERIV'
520 include 'COMMON.INTERACT'
521 include 'COMMON.IOUNITS'
522 include 'COMMON.NAMES'
527 c print *,'Entering ELJK nnt=',nnt,' nct=',nct,' expon=',expon
532 if (itypi.eq.ntyp1) cycle
533 itypi1=iabs(itype(i+1))
538 C Calculate SC interaction energy.
541 do j=istart(i,iint),iend(i,iint)
543 if (itypj.eq.ntyp1) cycle
547 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
549 e_augm=augm(itypi,itypj)*fac_augm
552 r_shift_inv=1.0D0/(rij+r0(itypi,itypj)-sigma(itypi,itypj))
553 fac=r_shift_inv**expon
554 e1=fac*fac*aa(itypi,itypj)
555 e2=fac*bb(itypi,itypj)
557 ij=icant(itypi,itypj)
558 cd sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
559 cd epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
560 cd write (iout,'(2(a3,i3,2x),8(1pd12.4)/2(3(1pd12.4),5x)/)')
561 cd & restyp(itypi),i,restyp(itypj),j,aa(itypi,itypj),
562 cd & bb(itypi,itypj),augm(itypi,itypj),epsi,sigm,
563 cd & sigma(itypi,itypj),1.0D0/dsqrt(rrij),evdwij,
564 cd & (c(k,i),k=1,3),(c(k,j),k=1,3)
565 if (bb(itypi,itypj).gt.0.0d0) then
572 C Calculate the components of the gradient in DC and X
574 fac=-2.0D0*rrij*e_augm-r_inv_ij*r_shift_inv*(e1+e1+e2)
579 gvdwx(k,i)=gvdwx(k,i)-gg(k)
580 gvdwx(k,j)=gvdwx(k,j)+gg(k)
584 gvdwc(l,k)=gvdwc(l,k)+gg(l)
594 gvdwc(j,i)=expon*gvdwc(j,i)
595 gvdwx(j,i)=expon*gvdwx(j,i)
601 C-----------------------------------------------------------------------------
602 subroutine ebp(evdw,evdw_t)
604 C This subroutine calculates the interaction energy of nonbonded side chains
605 C assuming the Berne-Pechukas potential of interaction.
607 implicit real*8 (a-h,o-z)
609 include 'sizesclu.dat'
610 include "DIMENSIONS.COMPAR"
613 include 'COMMON.LOCAL'
614 include 'COMMON.CHAIN'
615 include 'COMMON.DERIV'
616 include 'COMMON.NAMES'
617 include 'COMMON.INTERACT'
618 include 'COMMON.IOUNITS'
619 include 'COMMON.CALC'
621 c double precision rrsave(maxdim)
627 c print *,'Entering EBP nnt=',nnt,' nct=',nct,' expon=',expon
628 c if (icall.eq.0) then
636 if (itypi.eq.ntyp1) cycle
637 itypi1=iabs(itype(i+1))
641 dxi=dc_norm(1,nres+i)
642 dyi=dc_norm(2,nres+i)
643 dzi=dc_norm(3,nres+i)
644 dsci_inv=vbld_inv(i+nres)
646 C Calculate SC interaction energy.
649 do j=istart(i,iint),iend(i,iint)
652 if (itypj.eq.ntyp1) cycle
653 dscj_inv=vbld_inv(j+nres)
654 chi1=chi(itypi,itypj)
655 chi2=chi(itypj,itypi)
662 alf12=0.5D0*(alf1+alf2)
663 C For diagnostics only!!!
676 dxj=dc_norm(1,nres+j)
677 dyj=dc_norm(2,nres+j)
678 dzj=dc_norm(3,nres+j)
679 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
680 cd if (icall.eq.0) then
686 C Calculate the angle-dependent terms of energy & contributions to derivatives.
688 C Calculate whole angle-dependent part of epsilon and contributions
690 fac=(rrij*sigsq)**expon2
691 e1=fac*fac*aa(itypi,itypj)
692 e2=fac*bb(itypi,itypj)
693 evdwij=eps1*eps2rt*eps3rt*(e1+e2)
694 eps2der=evdwij*eps3rt
695 eps3der=evdwij*eps2rt
696 evdwij=evdwij*eps2rt*eps3rt
697 ij=icant(itypi,itypj)
698 aux=eps1*eps2rt**2*eps3rt**2
699 if (bb(itypi,itypj).gt.0.0d0) then
706 sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
707 epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
708 cd write (iout,'(2(a3,i3,2x),15(0pf7.3))')
709 cd & restyp(itypi),i,restyp(itypj),j,
710 cd & epsi,sigm,chi1,chi2,chip1,chip2,
711 cd & eps1,eps2rt**2,eps3rt**2,1.0D0/dsqrt(sigsq),
712 cd & om1,om2,om12,1.0D0/dsqrt(rrij),
715 C Calculate gradient components.
716 e1=e1*eps1*eps2rt**2*eps3rt**2
717 fac=-expon*(e1+evdwij)
720 C Calculate radial part of the gradient
724 C Calculate the angular part of the gradient and sum add the contributions
725 C to the appropriate components of the Cartesian gradient.
734 C-----------------------------------------------------------------------------
735 subroutine egb(evdw,evdw_t)
737 C This subroutine calculates the interaction energy of nonbonded side chains
738 C assuming the Gay-Berne potential of interaction.
740 implicit real*8 (a-h,o-z)
742 include 'sizesclu.dat'
743 include "DIMENSIONS.COMPAR"
746 include 'COMMON.LOCAL'
747 include 'COMMON.CHAIN'
748 include 'COMMON.DERIV'
749 include 'COMMON.NAMES'
750 include 'COMMON.INTERACT'
751 include 'COMMON.IOUNITS'
752 include 'COMMON.CALC'
757 integer xshift,yshift,zshift
758 c print *,'Entering EGB nnt=',nnt,' nct=',nct,' expon=',expon
762 c if (icall.gt.0) lprn=.true.
766 if (itypi.eq.ntyp1) cycle
767 itypi1=iabs(itype(i+1))
772 if (xi.lt.0) xi=xi+boxxsize
774 if (yi.lt.0) yi=yi+boxysize
776 if (zi.lt.0) zi=zi+boxzsize
777 dxi=dc_norm(1,nres+i)
778 dyi=dc_norm(2,nres+i)
779 dzi=dc_norm(3,nres+i)
780 dsci_inv=vbld_inv(i+nres)
782 C Calculate SC interaction energy.
785 do j=istart(i,iint),iend(i,iint)
788 if (itypj.eq.ntyp1) cycle
789 dscj_inv=vbld_inv(j+nres)
790 sig0ij=sigma(itypi,itypj)
791 chi1=chi(itypi,itypj)
792 chi2=chi(itypj,itypi)
799 alf12=0.5D0*(alf1+alf2)
800 C For diagnostics only!!!
814 if (xj.lt.0) xj=xj+boxxsize
816 if (yj.lt.0) yj=yj+boxysize
818 if (zj.lt.0) zj=zj+boxzsize
819 dist_init=(xj-xi)**2+(yj-yi)**2+(zj-zi)**2
827 xj=xj_safe+xshift*boxxsize
828 yj=yj_safe+yshift*boxysize
829 zj=zj_safe+zshift*boxzsize
830 dist_temp=(xj-xi)**2+(yj-yi)**2+(zj-zi)**2
831 if(dist_temp.lt.dist_init) then
841 if (subchap.eq.1) then
850 dxj=dc_norm(1,nres+j)
851 dyj=dc_norm(2,nres+j)
852 dzj=dc_norm(3,nres+j)
853 c write (iout,*) i,j,xj,yj,zj
854 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
856 sss=sscale((1.0d0/rij)/sigma(itypi,itypj))
857 sssgrad=sscagrad((1.0d0/rij)/sigma(itypi,itypj))
858 if (sss.le.0.0d0) cycle
859 C Calculate angle-dependent terms of energy and contributions to their
863 sig=sig0ij*dsqrt(sigsq)
864 rij_shift=1.0D0/rij-sig+sig0ij
865 C I hate to put IF's in the loops, but here don't have another choice!!!!
866 if (rij_shift.le.0.0D0) then
871 c---------------------------------------------------------------
872 rij_shift=1.0D0/rij_shift
874 e1=fac*fac*aa(itypi,itypj)
875 e2=fac*bb(itypi,itypj)
876 evdwij=eps1*eps2rt*eps3rt*(e1+e2)
877 eps2der=evdwij*eps3rt
878 eps3der=evdwij*eps2rt
879 evdwij=evdwij*eps2rt*eps3rt
880 if (bb(itypi,itypj).gt.0) then
883 evdw_t=evdw_t+evdwij*sss
885 ij=icant(itypi,itypj)
886 aux=eps1*eps2rt**2*eps3rt**2
887 c write (iout,*) "i",i," j",j," itypi",itypi," itypj",itypj,
888 c & " ij",ij," eneps",aux*e1/dabs(eps(itypi,itypj)),
889 c & aux*e2/eps(itypi,itypj)
891 sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
892 epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
893 c write (iout,'(2(a3,i3,2x),17(0pf7.3))')
894 c & restyp(itypi),i,restyp(itypj),j,
895 c & epsi,sigm,chi1,chi2,chip1,chip2,
896 c & eps1,eps2rt**2,eps3rt**2,sig,sig0ij,
897 c & om1,om2,om12,1.0D0/rij,1.0D0/rij_shift,
899 c write (iout,*) "pratial sum", evdw,evdw_t
902 C Calculate gradient components.
903 e1=e1*eps1*eps2rt**2*eps3rt**2
904 fac=-expon*(e1+evdwij)*rij_shift
907 fac=fac+evdwij/sss*sssgrad/sigma(itypi,itypj)*rij
908 C Calculate the radial part of the gradient
912 C Calculate angular part of the gradient.
920 C-----------------------------------------------------------------------------
921 subroutine egbv(evdw,evdw_t)
923 C This subroutine calculates the interaction energy of nonbonded side chains
924 C assuming the Gay-Berne-Vorobjev potential of interaction.
926 implicit real*8 (a-h,o-z)
928 include 'sizesclu.dat'
929 include "DIMENSIONS.COMPAR"
932 include 'COMMON.LOCAL'
933 include 'COMMON.CHAIN'
934 include 'COMMON.DERIV'
935 include 'COMMON.NAMES'
936 include 'COMMON.INTERACT'
937 include 'COMMON.IOUNITS'
938 include 'COMMON.CALC'
945 c print *,'Entering EGB nnt=',nnt,' nct=',nct,' expon=',expon
948 c if (icall.gt.0) lprn=.true.
952 if (itypi.eq.ntyp1) cycle
953 itypi1=iabs(itype(i+1))
957 dxi=dc_norm(1,nres+i)
958 dyi=dc_norm(2,nres+i)
959 dzi=dc_norm(3,nres+i)
960 dsci_inv=vbld_inv(i+nres)
962 C Calculate SC interaction energy.
965 do j=istart(i,iint),iend(i,iint)
968 if (itypj.eq.ntyp1) cycle
969 dscj_inv=vbld_inv(j+nres)
970 sig0ij=sigma(itypi,itypj)
972 chi1=chi(itypi,itypj)
973 chi2=chi(itypj,itypi)
980 alf12=0.5D0*(alf1+alf2)
981 C For diagnostics only!!!
994 dxj=dc_norm(1,nres+j)
995 dyj=dc_norm(2,nres+j)
996 dzj=dc_norm(3,nres+j)
997 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
999 C Calculate angle-dependent terms of energy and contributions to their
1003 sig=sig0ij*dsqrt(sigsq)
1004 rij_shift=1.0D0/rij-sig+r0ij
1005 C I hate to put IF's in the loops, but here don't have another choice!!!!
1006 if (rij_shift.le.0.0D0) then
1011 c---------------------------------------------------------------
1012 rij_shift=1.0D0/rij_shift
1013 fac=rij_shift**expon
1014 e1=fac*fac*aa(itypi,itypj)
1015 e2=fac*bb(itypi,itypj)
1016 evdwij=eps1*eps2rt*eps3rt*(e1+e2)
1017 eps2der=evdwij*eps3rt
1018 eps3der=evdwij*eps2rt
1019 fac_augm=rrij**expon
1020 e_augm=augm(itypi,itypj)*fac_augm
1021 evdwij=evdwij*eps2rt*eps3rt
1022 if (bb(itypi,itypj).gt.0.0d0) then
1023 evdw=evdw+evdwij+e_augm
1025 evdw_t=evdw_t+evdwij+e_augm
1027 ij=icant(itypi,itypj)
1028 aux=eps1*eps2rt**2*eps3rt**2
1030 c sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
1031 c epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
1032 c write (iout,'(2(a3,i3,2x),17(0pf7.3))')
1033 c & restyp(itypi),i,restyp(itypj),j,
1034 c & epsi,sigm,sig,(augm(itypi,itypj)/epsi)**(1.0D0/12.0D0),
1035 c & chi1,chi2,chip1,chip2,
1036 c & eps1,eps2rt**2,eps3rt**2,
1037 c & om1,om2,om12,1.0D0/rij,1.0D0/rij_shift,
1041 C Calculate gradient components.
1042 e1=e1*eps1*eps2rt**2*eps3rt**2
1043 fac=-expon*(e1+evdwij)*rij_shift
1045 fac=rij*fac-2*expon*rrij*e_augm
1046 C Calculate the radial part of the gradient
1050 C Calculate angular part of the gradient.
1058 C-----------------------------------------------------------------------------
1059 subroutine sc_angular
1060 C Calculate eps1,eps2,eps3,sigma, and parts of their derivatives in om1,om2,
1061 C om12. Called by ebp, egb, and egbv.
1063 include 'COMMON.CALC'
1067 om1=dxi*erij(1)+dyi*erij(2)+dzi*erij(3)
1068 om2=dxj*erij(1)+dyj*erij(2)+dzj*erij(3)
1069 om12=dxi*dxj+dyi*dyj+dzi*dzj
1071 C Calculate eps1(om12) and its derivative in om12
1072 faceps1=1.0D0-om12*chiom12
1073 faceps1_inv=1.0D0/faceps1
1074 eps1=dsqrt(faceps1_inv)
1075 C Following variable is eps1*deps1/dom12
1076 eps1_om12=faceps1_inv*chiom12
1077 C Calculate sigma(om1,om2,om12) and the derivatives of sigma**2 in om1,om2,
1082 facsig=om1*chiom1+om2*chiom2-2.0D0*om1om2*chiom12
1083 sigsq=1.0D0-facsig*faceps1_inv
1084 sigsq_om1=(chiom1-chiom12*om2)*faceps1_inv
1085 sigsq_om2=(chiom2-chiom12*om1)*faceps1_inv
1086 sigsq_om12=-chi12*(om1om2*faceps1-om12*facsig)*faceps1_inv**2
1087 C Calculate eps2 and its derivatives in om1, om2, and om12.
1090 chipom12=chip12*om12
1091 facp=1.0D0-om12*chipom12
1093 facp1=om1*chipom1+om2*chipom2-2.0D0*om1om2*chipom12
1094 C Following variable is the square root of eps2
1095 eps2rt=1.0D0-facp1*facp_inv
1096 C Following three variables are the derivatives of the square root of eps
1097 C in om1, om2, and om12.
1098 eps2rt_om1=-4.0D0*(chipom1-chipom12*om2)*facp_inv
1099 eps2rt_om2=-4.0D0*(chipom2-chipom12*om1)*facp_inv
1100 eps2rt_om12=4.0D0*chip12*(om1om2*facp-om12*facp1)*facp_inv**2
1101 C Evaluate the "asymmetric" factor in the VDW constant, eps3
1102 eps3rt=1.0D0-alf1*om1+alf2*om2-alf12*om12
1103 C Calculate whole angle-dependent part of epsilon and contributions
1104 C to its derivatives
1107 C----------------------------------------------------------------------------
1109 implicit real*8 (a-h,o-z)
1110 include 'DIMENSIONS'
1111 include 'sizesclu.dat'
1112 include 'COMMON.CHAIN'
1113 include 'COMMON.DERIV'
1114 include 'COMMON.CALC'
1115 double precision dcosom1(3),dcosom2(3)
1116 eom1=eps2der*eps2rt_om1-2.0D0*alf1*eps3der+sigder*sigsq_om1
1117 eom2=eps2der*eps2rt_om2+2.0D0*alf2*eps3der+sigder*sigsq_om2
1118 eom12=evdwij*eps1_om12+eps2der*eps2rt_om12
1119 & -2.0D0*alf12*eps3der+sigder*sigsq_om12
1121 dcosom1(k)=rij*(dc_norm(k,nres+i)-om1*erij(k))
1122 dcosom2(k)=rij*(dc_norm(k,nres+j)-om2*erij(k))
1125 gg(k)=gg(k)+eom1*dcosom1(k)+eom2*dcosom2(k)
1128 gvdwx(k,i)=gvdwx(k,i)-gg(k)
1129 & +(eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,nres+i))
1130 & +eom1*(erij(k)-om1*dc_norm(k,nres+i)))*dsci_inv
1131 gvdwx(k,j)=gvdwx(k,j)+gg(k)
1132 & +(eom12*(dc_norm(k,nres+i)-om12*dc_norm(k,nres+j))
1133 & +eom2*(erij(k)-om2*dc_norm(k,nres+j)))*dscj_inv
1136 C Calculate the components of the gradient in DC and X
1140 gvdwc(l,k)=gvdwc(l,k)+gg(l)
1145 c------------------------------------------------------------------------------
1146 subroutine vec_and_deriv
1147 implicit real*8 (a-h,o-z)
1148 include 'DIMENSIONS'
1149 include 'sizesclu.dat'
1150 include 'COMMON.IOUNITS'
1151 include 'COMMON.GEO'
1152 include 'COMMON.VAR'
1153 include 'COMMON.LOCAL'
1154 include 'COMMON.CHAIN'
1155 include 'COMMON.VECTORS'
1156 include 'COMMON.DERIV'
1157 include 'COMMON.INTERACT'
1158 dimension uyder(3,3,2),uzder(3,3,2),vbld_inv_temp(2)
1159 C Compute the local reference systems. For reference system (i), the
1160 C X-axis points from CA(i) to CA(i+1), the Y axis is in the
1161 C CA(i)-CA(i+1)-CA(i+2) plane, and the Z axis is perpendicular to this plane.
1163 c if (i.eq.nres-1 .or. itel(i+1).eq.0) then
1164 if (i.eq.nres-1) then
1165 C Case of the last full residue
1166 C Compute the Z-axis
1167 call vecpr(dc_norm(1,i),dc_norm(1,i-1),uz(1,i))
1168 costh=dcos(pi-theta(nres))
1169 fac=1.0d0/dsqrt(1.0d0-costh*costh)
1174 C Compute the derivatives of uz
1176 uzder(2,1,1)=-dc_norm(3,i-1)
1177 uzder(3,1,1)= dc_norm(2,i-1)
1178 uzder(1,2,1)= dc_norm(3,i-1)
1180 uzder(3,2,1)=-dc_norm(1,i-1)
1181 uzder(1,3,1)=-dc_norm(2,i-1)
1182 uzder(2,3,1)= dc_norm(1,i-1)
1185 uzder(2,1,2)= dc_norm(3,i)
1186 uzder(3,1,2)=-dc_norm(2,i)
1187 uzder(1,2,2)=-dc_norm(3,i)
1189 uzder(3,2,2)= dc_norm(1,i)
1190 uzder(1,3,2)= dc_norm(2,i)
1191 uzder(2,3,2)=-dc_norm(1,i)
1194 C Compute the Y-axis
1197 uy(k,i)=fac*(dc_norm(k,i-1)-costh*dc_norm(k,i))
1200 C Compute the derivatives of uy
1203 uyder(k,j,1)=2*dc_norm(k,i-1)*dc_norm(j,i)
1204 & -dc_norm(k,i)*dc_norm(j,i-1)
1205 uyder(k,j,2)=-dc_norm(j,i)*dc_norm(k,i)
1207 uyder(j,j,1)=uyder(j,j,1)-costh
1208 uyder(j,j,2)=1.0d0+uyder(j,j,2)
1213 uygrad(l,k,j,i)=uyder(l,k,j)
1214 uzgrad(l,k,j,i)=uzder(l,k,j)
1218 call unormderiv(uy(1,i),uyder(1,1,1),facy,uygrad(1,1,1,i))
1219 call unormderiv(uy(1,i),uyder(1,1,2),facy,uygrad(1,1,2,i))
1220 call unormderiv(uz(1,i),uzder(1,1,1),fac,uzgrad(1,1,1,i))
1221 call unormderiv(uz(1,i),uzder(1,1,2),fac,uzgrad(1,1,2,i))
1225 C Compute the Z-axis
1226 call vecpr(dc_norm(1,i),dc_norm(1,i+1),uz(1,i))
1227 costh=dcos(pi-theta(i+2))
1228 fac=1.0d0/dsqrt(1.0d0-costh*costh)
1233 C Compute the derivatives of uz
1235 uzder(2,1,1)=-dc_norm(3,i+1)
1236 uzder(3,1,1)= dc_norm(2,i+1)
1237 uzder(1,2,1)= dc_norm(3,i+1)
1239 uzder(3,2,1)=-dc_norm(1,i+1)
1240 uzder(1,3,1)=-dc_norm(2,i+1)
1241 uzder(2,3,1)= dc_norm(1,i+1)
1244 uzder(2,1,2)= dc_norm(3,i)
1245 uzder(3,1,2)=-dc_norm(2,i)
1246 uzder(1,2,2)=-dc_norm(3,i)
1248 uzder(3,2,2)= dc_norm(1,i)
1249 uzder(1,3,2)= dc_norm(2,i)
1250 uzder(2,3,2)=-dc_norm(1,i)
1253 C Compute the Y-axis
1256 uy(k,i)=facy*(dc_norm(k,i+1)-costh*dc_norm(k,i))
1259 C Compute the derivatives of uy
1262 uyder(k,j,1)=2*dc_norm(k,i+1)*dc_norm(j,i)
1263 & -dc_norm(k,i)*dc_norm(j,i+1)
1264 uyder(k,j,2)=-dc_norm(j,i)*dc_norm(k,i)
1266 uyder(j,j,1)=uyder(j,j,1)-costh
1267 uyder(j,j,2)=1.0d0+uyder(j,j,2)
1272 uygrad(l,k,j,i)=uyder(l,k,j)
1273 uzgrad(l,k,j,i)=uzder(l,k,j)
1277 call unormderiv(uy(1,i),uyder(1,1,1),facy,uygrad(1,1,1,i))
1278 call unormderiv(uy(1,i),uyder(1,1,2),facy,uygrad(1,1,2,i))
1279 call unormderiv(uz(1,i),uzder(1,1,1),fac,uzgrad(1,1,1,i))
1280 call unormderiv(uz(1,i),uzder(1,1,2),fac,uzgrad(1,1,2,i))
1286 vbld_inv_temp(1)=vbld_inv(i+1)
1287 if (i.lt.nres-1) then
1288 vbld_inv_temp(2)=vbld_inv(i+2)
1290 vbld_inv_temp(2)=vbld_inv(i)
1295 uygrad(l,k,j,i)=vbld_inv_temp(j)*uygrad(l,k,j,i)
1296 uzgrad(l,k,j,i)=vbld_inv_temp(j)*uzgrad(l,k,j,i)
1304 C-----------------------------------------------------------------------------
1305 subroutine vec_and_deriv_test
1306 implicit real*8 (a-h,o-z)
1307 include 'DIMENSIONS'
1308 include 'sizesclu.dat'
1309 include 'COMMON.IOUNITS'
1310 include 'COMMON.GEO'
1311 include 'COMMON.VAR'
1312 include 'COMMON.LOCAL'
1313 include 'COMMON.CHAIN'
1314 include 'COMMON.VECTORS'
1315 dimension uyder(3,3,2),uzder(3,3,2)
1316 C Compute the local reference systems. For reference system (i), the
1317 C X-axis points from CA(i) to CA(i+1), the Y axis is in the
1318 C CA(i)-CA(i+1)-CA(i+2) plane, and the Z axis is perpendicular to this plane.
1320 if (i.eq.nres-1) then
1321 C Case of the last full residue
1322 C Compute the Z-axis
1323 call vecpr(dc_norm(1,i),dc_norm(1,i-1),uz(1,i))
1324 costh=dcos(pi-theta(nres))
1325 fac=1.0d0/dsqrt(1.0d0-costh*costh)
1326 c write (iout,*) 'fac',fac,
1327 c & 1.0d0/dsqrt(scalar(uz(1,i),uz(1,i)))
1328 fac=1.0d0/dsqrt(scalar(uz(1,i),uz(1,i)))
1332 C Compute the derivatives of uz
1334 uzder(2,1,1)=-dc_norm(3,i-1)
1335 uzder(3,1,1)= dc_norm(2,i-1)
1336 uzder(1,2,1)= dc_norm(3,i-1)
1338 uzder(3,2,1)=-dc_norm(1,i-1)
1339 uzder(1,3,1)=-dc_norm(2,i-1)
1340 uzder(2,3,1)= dc_norm(1,i-1)
1343 uzder(2,1,2)= dc_norm(3,i)
1344 uzder(3,1,2)=-dc_norm(2,i)
1345 uzder(1,2,2)=-dc_norm(3,i)
1347 uzder(3,2,2)= dc_norm(1,i)
1348 uzder(1,3,2)= dc_norm(2,i)
1349 uzder(2,3,2)=-dc_norm(1,i)
1351 C Compute the Y-axis
1353 uy(k,i)=fac*(dc_norm(k,i-1)-costh*dc_norm(k,i))
1356 facy=1.0d0/dsqrt(scalar(dc_norm(1,i),dc_norm(1,i))*
1357 & (scalar(dc_norm(1,i-1),dc_norm(1,i-1))**2-
1358 & scalar(dc_norm(1,i),dc_norm(1,i-1))**2))
1360 c uy(k,i)=facy*(dc_norm(k,i+1)-costh*dc_norm(k,i))
1363 & dc_norm(k,i-1)*scalar(dc_norm(1,i),dc_norm(1,i))
1364 & -scalar(dc_norm(1,i),dc_norm(1,i-1))*dc_norm(k,i)
1367 c write (iout,*) 'facy',facy,
1368 c & 1.0d0/dsqrt(scalar(uy(1,i),uy(1,i)))
1369 facy=1.0d0/dsqrt(scalar(uy(1,i),uy(1,i)))
1371 uy(k,i)=facy*uy(k,i)
1373 C Compute the derivatives of uy
1376 uyder(k,j,1)=2*dc_norm(k,i-1)*dc_norm(j,i)
1377 & -dc_norm(k,i)*dc_norm(j,i-1)
1378 uyder(k,j,2)=-dc_norm(j,i)*dc_norm(k,i)
1380 c uyder(j,j,1)=uyder(j,j,1)-costh
1381 c uyder(j,j,2)=1.0d0+uyder(j,j,2)
1382 uyder(j,j,1)=uyder(j,j,1)
1383 & -scalar(dc_norm(1,i),dc_norm(1,i-1))
1384 uyder(j,j,2)=scalar(dc_norm(1,i),dc_norm(1,i))
1390 uygrad(l,k,j,i)=uyder(l,k,j)
1391 uzgrad(l,k,j,i)=uzder(l,k,j)
1395 call unormderiv(uy(1,i),uyder(1,1,1),facy,uygrad(1,1,1,i))
1396 call unormderiv(uy(1,i),uyder(1,1,2),facy,uygrad(1,1,2,i))
1397 call unormderiv(uz(1,i),uzder(1,1,1),fac,uzgrad(1,1,1,i))
1398 call unormderiv(uz(1,i),uzder(1,1,2),fac,uzgrad(1,1,2,i))
1401 C Compute the Z-axis
1402 call vecpr(dc_norm(1,i),dc_norm(1,i+1),uz(1,i))
1403 costh=dcos(pi-theta(i+2))
1404 fac=1.0d0/dsqrt(1.0d0-costh*costh)
1405 fac=1.0d0/dsqrt(scalar(uz(1,i),uz(1,i)))
1409 C Compute the derivatives of uz
1411 uzder(2,1,1)=-dc_norm(3,i+1)
1412 uzder(3,1,1)= dc_norm(2,i+1)
1413 uzder(1,2,1)= dc_norm(3,i+1)
1415 uzder(3,2,1)=-dc_norm(1,i+1)
1416 uzder(1,3,1)=-dc_norm(2,i+1)
1417 uzder(2,3,1)= dc_norm(1,i+1)
1420 uzder(2,1,2)= dc_norm(3,i)
1421 uzder(3,1,2)=-dc_norm(2,i)
1422 uzder(1,2,2)=-dc_norm(3,i)
1424 uzder(3,2,2)= dc_norm(1,i)
1425 uzder(1,3,2)= dc_norm(2,i)
1426 uzder(2,3,2)=-dc_norm(1,i)
1428 C Compute the Y-axis
1430 facy=1.0d0/dsqrt(scalar(dc_norm(1,i),dc_norm(1,i))*
1431 & (scalar(dc_norm(1,i+1),dc_norm(1,i+1))**2-
1432 & scalar(dc_norm(1,i),dc_norm(1,i+1))**2))
1434 c uy(k,i)=facy*(dc_norm(k,i+1)-costh*dc_norm(k,i))
1437 & dc_norm(k,i+1)*scalar(dc_norm(1,i),dc_norm(1,i))
1438 & -scalar(dc_norm(1,i),dc_norm(1,i+1))*dc_norm(k,i)
1441 c write (iout,*) 'facy',facy,
1442 c & 1.0d0/dsqrt(scalar(uy(1,i),uy(1,i)))
1443 facy=1.0d0/dsqrt(scalar(uy(1,i),uy(1,i)))
1445 uy(k,i)=facy*uy(k,i)
1447 C Compute the derivatives of uy
1450 uyder(k,j,1)=2*dc_norm(k,i+1)*dc_norm(j,i)
1451 & -dc_norm(k,i)*dc_norm(j,i+1)
1452 uyder(k,j,2)=-dc_norm(j,i)*dc_norm(k,i)
1454 c uyder(j,j,1)=uyder(j,j,1)-costh
1455 c uyder(j,j,2)=1.0d0+uyder(j,j,2)
1456 uyder(j,j,1)=uyder(j,j,1)
1457 & -scalar(dc_norm(1,i),dc_norm(1,i+1))
1458 uyder(j,j,2)=scalar(dc_norm(1,i),dc_norm(1,i))
1464 uygrad(l,k,j,i)=uyder(l,k,j)
1465 uzgrad(l,k,j,i)=uzder(l,k,j)
1469 call unormderiv(uy(1,i),uyder(1,1,1),facy,uygrad(1,1,1,i))
1470 call unormderiv(uy(1,i),uyder(1,1,2),facy,uygrad(1,1,2,i))
1471 call unormderiv(uz(1,i),uzder(1,1,1),fac,uzgrad(1,1,1,i))
1472 call unormderiv(uz(1,i),uzder(1,1,2),fac,uzgrad(1,1,2,i))
1479 uygrad(l,k,j,i)=vblinv*uygrad(l,k,j,i)
1480 uzgrad(l,k,j,i)=vblinv*uzgrad(l,k,j,i)
1487 C-----------------------------------------------------------------------------
1488 subroutine check_vecgrad
1489 implicit real*8 (a-h,o-z)
1490 include 'DIMENSIONS'
1491 include 'sizesclu.dat'
1492 include 'COMMON.IOUNITS'
1493 include 'COMMON.GEO'
1494 include 'COMMON.VAR'
1495 include 'COMMON.LOCAL'
1496 include 'COMMON.CHAIN'
1497 include 'COMMON.VECTORS'
1498 dimension uygradt(3,3,2,maxres),uzgradt(3,3,2,maxres)
1499 dimension uyt(3,maxres),uzt(3,maxres)
1500 dimension uygradn(3,3,2),uzgradn(3,3,2),erij(3)
1501 double precision delta /1.0d-7/
1504 crc write(iout,'(2i5,2(3f10.5,5x))') i,1,dc_norm(:,i)
1505 crc write(iout,'(2i5,2(3f10.5,5x))') i,2,uy(:,i)
1506 crc write(iout,'(2i5,2(3f10.5,5x)/)')i,3,uz(:,i)
1507 cd write(iout,'(2i5,2(3f10.5,5x))') i,1,
1508 cd & (dc_norm(if90,i),if90=1,3)
1509 cd write(iout,'(2i5,2(3f10.5,5x))') i,2,(uy(if90,i),if90=1,3)
1510 cd write(iout,'(2i5,2(3f10.5,5x)/)')i,3,(uz(if90,i),if90=1,3)
1511 cd write(iout,'(a)')
1517 uygradt(l,k,j,i)=uygrad(l,k,j,i)
1518 uzgradt(l,k,j,i)=uzgrad(l,k,j,i)
1531 cd write (iout,*) 'i=',i
1533 erij(k)=dc_norm(k,i)
1537 dc_norm(k,i)=erij(k)
1539 dc_norm(j,i)=dc_norm(j,i)+delta
1540 c fac=dsqrt(scalar(dc_norm(1,i),dc_norm(1,i)))
1542 c dc_norm(k,i)=dc_norm(k,i)/fac
1544 c write (iout,*) (dc_norm(k,i),k=1,3)
1545 c write (iout,*) (erij(k),k=1,3)
1548 uygradn(k,j,1)=(uy(k,i)-uyt(k,i))/delta
1549 uygradn(k,j,2)=(uy(k,i-1)-uyt(k,i-1))/delta
1550 uzgradn(k,j,1)=(uz(k,i)-uzt(k,i))/delta
1551 uzgradn(k,j,2)=(uz(k,i-1)-uzt(k,i-1))/delta
1553 c write (iout,'(i5,3f8.5,3x,3f8.5,5x,3f8.5,3x,3f8.5)')
1554 c & j,(uzgradt(k,j,1,i),k=1,3),(uzgradn(k,j,1),k=1,3),
1555 c & (uzgradt(k,j,2,i-1),k=1,3),(uzgradn(k,j,2),k=1,3)
1558 dc_norm(k,i)=erij(k)
1561 cd write (iout,'(i5,3f8.5,3x,3f8.5,5x,3f8.5,3x,3f8.5)')
1562 cd & k,(uygradt(k,l,1,i),l=1,3),(uygradn(k,l,1),l=1,3),
1563 cd & (uygradt(k,l,2,i-1),l=1,3),(uygradn(k,l,2),l=1,3)
1564 cd write (iout,'(i5,3f8.5,3x,3f8.5,5x,3f8.5,3x,3f8.5)')
1565 cd & k,(uzgradt(k,l,1,i),l=1,3),(uzgradn(k,l,1),l=1,3),
1566 cd & (uzgradt(k,l,2,i-1),l=1,3),(uzgradn(k,l,2),l=1,3)
1567 cd write (iout,'(a)')
1572 C--------------------------------------------------------------------------
1573 subroutine set_matrices
1574 implicit real*8 (a-h,o-z)
1575 include 'DIMENSIONS'
1576 include 'sizesclu.dat'
1577 include 'COMMON.IOUNITS'
1578 include 'COMMON.GEO'
1579 include 'COMMON.VAR'
1580 include 'COMMON.LOCAL'
1581 include 'COMMON.CHAIN'
1582 include 'COMMON.DERIV'
1583 include 'COMMON.INTERACT'
1584 include 'COMMON.CONTACTS'
1585 include 'COMMON.TORSION'
1586 include 'COMMON.VECTORS'
1587 include 'COMMON.FFIELD'
1588 double precision auxvec(2),auxmat(2,2)
1590 C Compute the virtual-bond-torsional-angle dependent quantities needed
1591 C to calculate the el-loc multibody terms of various order.
1594 if (i .lt. nres+1) then
1631 if (i .gt. 3 .and. i .lt. nres+1) then
1632 obrot_der(1,i-2)=-sin1
1633 obrot_der(2,i-2)= cos1
1634 Ugder(1,1,i-2)= sin1
1635 Ugder(1,2,i-2)=-cos1
1636 Ugder(2,1,i-2)=-cos1
1637 Ugder(2,2,i-2)=-sin1
1640 obrot2_der(1,i-2)=-dwasin2
1641 obrot2_der(2,i-2)= dwacos2
1642 Ug2der(1,1,i-2)= dwasin2
1643 Ug2der(1,2,i-2)=-dwacos2
1644 Ug2der(2,1,i-2)=-dwacos2
1645 Ug2der(2,2,i-2)=-dwasin2
1647 obrot_der(1,i-2)=0.0d0
1648 obrot_der(2,i-2)=0.0d0
1649 Ugder(1,1,i-2)=0.0d0
1650 Ugder(1,2,i-2)=0.0d0
1651 Ugder(2,1,i-2)=0.0d0
1652 Ugder(2,2,i-2)=0.0d0
1653 obrot2_der(1,i-2)=0.0d0
1654 obrot2_der(2,i-2)=0.0d0
1655 Ug2der(1,1,i-2)=0.0d0
1656 Ug2der(1,2,i-2)=0.0d0
1657 Ug2der(2,1,i-2)=0.0d0
1658 Ug2der(2,2,i-2)=0.0d0
1660 if (i.gt. nnt+2 .and. i.lt.nct+2) then
1661 if (itype(i-2).le.ntyp) then
1662 iti = itortyp(itype(i-2))
1669 if (i.gt. nnt+1 .and. i.lt.nct+1) then
1670 if (itype(i-1).le.ntyp) then
1671 iti1 = itortyp(itype(i-1))
1678 cd write (iout,*) '*******i',i,' iti1',iti
1679 cd write (iout,*) 'b1',b1(:,iti)
1680 cd write (iout,*) 'b2',b2(:,iti)
1681 cd write (iout,*) 'Ug',Ug(:,:,i-2)
1682 c print *,"itilde1 i iti iti1",i,iti,iti1
1683 if (i .gt. iatel_s+2) then
1684 call matvec2(Ug(1,1,i-2),b2(1,iti),Ub2(1,i-2))
1685 call matmat2(EE(1,1,iti),Ug(1,1,i-2),EUg(1,1,i-2))
1686 call matmat2(CC(1,1,iti),Ug(1,1,i-2),CUg(1,1,i-2))
1687 call matmat2(DD(1,1,iti),Ug(1,1,i-2),DUg(1,1,i-2))
1688 call matmat2(Dtilde(1,1,iti),Ug2(1,1,i-2),DtUg2(1,1,i-2))
1689 call matvec2(Ctilde(1,1,iti1),obrot(1,i-2),Ctobr(1,i-2))
1690 call matvec2(Dtilde(1,1,iti),obrot2(1,i-2),Dtobr2(1,i-2))
1700 DtUg2(l,k,i-2)=0.0d0
1704 c print *,"itilde2 i iti iti1",i,iti,iti1
1705 call matvec2(Ugder(1,1,i-2),b2(1,iti),Ub2der(1,i-2))
1706 call matmat2(EE(1,1,iti),Ugder(1,1,i-2),EUgder(1,1,i-2))
1707 call matmat2(CC(1,1,iti1),Ugder(1,1,i-2),CUgder(1,1,i-2))
1708 call matmat2(DD(1,1,iti),Ugder(1,1,i-2),DUgder(1,1,i-2))
1709 call matmat2(Dtilde(1,1,iti),Ug2der(1,1,i-2),DtUg2der(1,1,i-2))
1710 call matvec2(Ctilde(1,1,iti1),obrot_der(1,i-2),Ctobrder(1,i-2))
1711 call matvec2(Dtilde(1,1,iti),obrot2_der(1,i-2),Dtobr2der(1,i-2))
1712 c print *,"itilde3 i iti iti1",i,iti,iti1
1714 muder(k,i-2)=Ub2der(k,i-2)
1716 if (i.gt. nnt+1 .and. i.lt.nct+1) then
1717 if (itype(i-1).le.ntyp) then
1718 iti1 = itortyp(itype(i-1))
1726 mu(k,i-2)=Ub2(k,i-2)+b1(k,iti1)
1728 C Vectors and matrices dependent on a single virtual-bond dihedral.
1729 call matvec2(DD(1,1,iti),b1tilde(1,iti1),auxvec(1))
1730 call matvec2(Ug2(1,1,i-2),auxvec(1),Ug2Db1t(1,i-2))
1731 call matvec2(Ug2der(1,1,i-2),auxvec(1),Ug2Db1tder(1,i-2))
1732 call matvec2(CC(1,1,iti1),Ub2(1,i-2),CUgb2(1,i-2))
1733 call matvec2(CC(1,1,iti1),Ub2der(1,i-2),CUgb2der(1,i-2))
1734 call matmat2(EUg(1,1,i-2),CC(1,1,iti1),EUgC(1,1,i-2))
1735 call matmat2(EUgder(1,1,i-2),CC(1,1,iti1),EUgCder(1,1,i-2))
1736 call matmat2(EUg(1,1,i-2),DD(1,1,iti1),EUgD(1,1,i-2))
1737 call matmat2(EUgder(1,1,i-2),DD(1,1,iti1),EUgDder(1,1,i-2))
1738 cd write (iout,*) 'i',i,' mu ',(mu(k,i-2),k=1,2),
1739 cd & ' mu1',(b1(k,i-2),k=1,2),' mu2',(Ub2(k,i-2),k=1,2)
1741 C Matrices dependent on two consecutive virtual-bond dihedrals.
1742 C The order of matrices is from left to right.
1744 call matmat2(DtUg2(1,1,i-1),EUg(1,1,i),DtUg2EUg(1,1,i))
1745 call matmat2(DtUg2der(1,1,i-1),EUg(1,1,i),DtUg2EUgder(1,1,1,i))
1746 call matmat2(DtUg2(1,1,i-1),EUgder(1,1,i),DtUg2EUgder(1,1,2,i))
1747 call transpose2(DtUg2(1,1,i-1),auxmat(1,1))
1748 call matmat2(auxmat(1,1),EUg(1,1,i),Ug2DtEUg(1,1,i))
1749 call matmat2(auxmat(1,1),EUgder(1,1,i),Ug2DtEUgder(1,1,2,i))
1750 call transpose2(DtUg2der(1,1,i-1),auxmat(1,1))
1751 call matmat2(auxmat(1,1),EUg(1,1,i),Ug2DtEUgder(1,1,1,i))
1754 cd iti = itortyp(itype(i))
1757 cd write (iout,'(2f10.5,5x,2f10.5,5x,2f10.5)')
1758 cd & (EE(j,k,iti),k=1,2),(Ug(j,k,i),k=1,2),(EUg(j,k,i),k=1,2)
1763 C--------------------------------------------------------------------------
1764 subroutine eelec(ees,evdw1,eel_loc,eello_turn3,eello_turn4)
1766 C This subroutine calculates the average interaction energy and its gradient
1767 C in the virtual-bond vectors between non-adjacent peptide groups, based on
1768 C the potential described in Liwo et al., Protein Sci., 1993, 2, 1715.
1769 C The potential depends both on the distance of peptide-group centers and on
1770 C the orientation of the CA-CA virtual bonds.
1772 implicit real*8 (a-h,o-z)
1773 include 'DIMENSIONS'
1774 include 'sizesclu.dat'
1775 include 'COMMON.CONTROL'
1776 include 'COMMON.IOUNITS'
1777 include 'COMMON.GEO'
1778 include 'COMMON.VAR'
1779 include 'COMMON.LOCAL'
1780 include 'COMMON.CHAIN'
1781 include 'COMMON.DERIV'
1782 include 'COMMON.INTERACT'
1783 include 'COMMON.CONTACTS'
1784 include 'COMMON.TORSION'
1785 include 'COMMON.VECTORS'
1786 include 'COMMON.FFIELD'
1787 dimension ggg(3),gggp(3),gggm(3),erij(3),dcosb(3),dcosg(3),
1788 & erder(3,3),uryg(3,3),urzg(3,3),vryg(3,3),vrzg(3,3)
1789 double precision acipa(2,2),agg(3,4),aggi(3,4),aggi1(3,4),
1790 & aggj(3,4),aggj1(3,4),a_temp(2,2),muij(4)
1791 common /locel/ a_temp,agg,aggi,aggi1,aggj,aggj1,j1
1792 c 4/26/02 - AL scaling factor for 1,4 repulsive VDW interactions
1793 double precision scal_el /0.5d0/
1795 C 13-go grudnia roku pamietnego...
1796 double precision unmat(3,3) /1.0d0,0.0d0,0.0d0,
1797 & 0.0d0,1.0d0,0.0d0,
1798 & 0.0d0,0.0d0,1.0d0/
1799 cd write(iout,*) 'In EELEC'
1801 cd write(iout,*) 'Type',i
1802 cd write(iout,*) 'B1',B1(:,i)
1803 cd write(iout,*) 'B2',B2(:,i)
1804 cd write(iout,*) 'CC',CC(:,:,i)
1805 cd write(iout,*) 'DD',DD(:,:,i)
1806 cd write(iout,*) 'EE',EE(:,:,i)
1808 cd call check_vecgrad
1810 integer xshift,yshift,zshift
1811 if (icheckgrad.eq.1) then
1813 fac=1.0d0/dsqrt(scalar(dc(1,i),dc(1,i)))
1815 dc_norm(k,i)=dc(k,i)*fac
1817 c write (iout,*) 'i',i,' fac',fac
1820 if (wel_loc.gt.0.0d0 .or. wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0
1821 & .or. wcorr6.gt.0.0d0 .or. wturn3.gt.0.0d0 .or.
1822 & wturn4.gt.0.0d0 .or. wturn6.gt.0.0d0) then
1823 cd if (wel_loc.gt.0.0d0) then
1824 if (icheckgrad.eq.1) then
1825 call vec_and_deriv_test
1832 cd write (iout,*) 'i=',i
1834 cd write (iout,'(i5,2f10.5)') k,uy(k,i),uz(k,i)
1837 cd write (iout,'(f10.5,2x,3f10.5,2x,3f10.5)')
1838 cd & uz(k,i),(uzgrad(k,l,1,i),l=1,3),(uzgrad(k,l,2,i),l=1,3)
1842 write (iout,*) "boxxsize",boxxsize," boxysize",boxysize,
1843 & "boxzsize",boxzsize
1855 cd print '(a)','Enter EELEC'
1856 cd write (iout,*) 'iatel_s=',iatel_s,' iatel_e=',iatel_e
1858 gel_loc_loc(i)=0.0d0
1861 do i=iatel_s,iatel_e
1863 if (itype(i).eq.ntyp1.or. itype(i+1).eq.ntyp1
1864 & .or. itype(i+2).eq.ntyp1) cycle
1866 if (itype(i).eq.ntyp1 .or. itype(i+1).eq.ntyp1
1867 & .or. itype(i+2).eq.ntyp1
1868 & .or. itype(i-1).eq.ntyp1
1871 if (itel(i).eq.0) goto 1215
1875 dx_normi=dc_norm(1,i)
1876 dy_normi=dc_norm(2,i)
1877 dz_normi=dc_norm(3,i)
1878 xmedi=c(1,i)+0.5d0*dxi
1879 ymedi=c(2,i)+0.5d0*dyi
1880 zmedi=c(3,i)+0.5d0*dzi
1881 c write (iout,*) "xmedi before",xmedi,ymedi,zmedi
1882 xmedi=mod(xmedi,boxxsize)
1883 if (xmedi.lt.0) xmedi=xmedi+boxxsize
1884 ymedi=mod(ymedi,boxysize)
1885 if (ymedi.lt.0) ymedi=ymedi+boxysize
1886 zmedi=mod(zmedi,boxzsize)
1887 if (zmedi.lt.0) zmedi=zmedi+boxzsize
1888 c write (iout,*) "xmedi after ",xmedi,ymedi,zmedi
1890 c write (iout,*) 'i',i,' ielstart',ielstart(i),' ielend',ielend(i)
1891 do j=ielstart(i),ielend(i)
1893 if (itype(j).eq.ntyp1 .or. itype(j+1).eq.ntyp1
1894 & .or.itype(j+2).eq.ntyp1
1897 if (itype(j).eq.ntyp1 .or. itype(j+1).eq.ntyp1
1898 & .or.itype(j+2).eq.ntyp1
1899 & .or.itype(j-1).eq.ntyp1
1902 if (itel(j).eq.0) goto 1216
1906 if (j.eq.i+2 .and. itelj.eq.2) iteli=2
1907 aaa=app(iteli,itelj)
1908 bbb=bpp(iteli,itelj)
1909 C Diagnostics only!!!
1915 ael6i=ael6(iteli,itelj)
1916 ael3i=ael3(iteli,itelj)
1920 dx_normj=dc_norm(1,j)
1921 dy_normj=dc_norm(2,j)
1922 dz_normj=dc_norm(3,j)
1926 c write (iout,*) "xj before",xj,yj,zj
1928 if (xj.lt.0) xj=xj+boxxsize
1930 if (yj.lt.0) yj=yj+boxysize
1932 if (zj.lt.0) zj=zj+boxzsize
1933 c write (iout,*) "xj after ",xj,yj,zj
1934 dist_init=(xj-xi)**2+(yj-yi)**2+(zj-zi)**2
1942 xj=xj_safe+xshift*boxxsize
1943 yj=yj_safe+yshift*boxysize
1944 zj=zj_safe+zshift*boxzsize
1945 dist_temp=(xj-xmedi)**2+(yj-ymedi)**2+(zj-zmedi)**2
1946 if(dist_temp.lt.dist_init) then
1956 c write (iout,*) "isubchap",isubchap
1957 c write (iout,*) "xj",xj,yj,zj
1958 if (isubchap.eq.1) then
1968 rij=xj*xj+yj*yj+zj*zj
1969 sss=sscale(sqrt(rij))
1970 sssgrad=sscagrad(sqrt(rij))
1976 cosa=dx_normi*dx_normj+dy_normi*dy_normj+dz_normi*dz_normj
1977 cosb=(xj*dx_normi+yj*dy_normi+zj*dz_normi)*rmij
1978 cosg=(xj*dx_normj+yj*dy_normj+zj*dz_normj)*rmij
1979 fac=cosa-3.0D0*cosb*cosg
1981 c 4/26/02 - AL scaling down 1,4 repulsive VDW interactions
1982 if (j.eq.i+2) ev1=scal_el*ev1
1987 el1=fac3*(4.0D0+fac*fac-3.0D0*(cosb*cosb+cosg*cosg))
1990 c write (iout,*) "i",i,iteli," j",j,itelj," eesij",eesij
1991 C 12/26/95 - for the evaluation of multi-body H-bonding interactions
1992 ees0ij=4.0D0+fac*fac-3.0D0*(cosb*cosb+cosg*cosg)
1994 evdw1=evdw1+evdwij*sss
1996 write(iout,'(2(2i3,2x),7(1pd12.4)/3(3(1pd12.4),5x)/)')
1997 & iteli,i,itelj,j,aaa,bbb,ael6i,ael3i,
1998 & 1.0D0/dsqrt(rrmij),evdwij,eesij,
1999 & xmedi,ymedi,zmedi,xj,yj,zj,dxj,dyj,dzj
2002 C Calculate contributions to the Cartesian gradient.
2005 facvdw=-6*rrmij*(ev1+evdwij)*sss
2006 facel=-3*rrmij*(el1+eesij)
2013 * Radial derivatives. First process both termini of the fragment (i,j)
2020 gelc(k,i)=gelc(k,i)+ghalf
2021 gelc(k,j)=gelc(k,j)+ghalf
2024 * Loop over residues i+1 thru j-1.
2028 gelc(l,k)=gelc(l,k)+ggg(l)
2034 if (sss.gt.0.0) then
2035 ggg(1)=facvdw*xj+sssgrad*rmij*evdwij*xj
2036 ggg(2)=facvdw*yj+sssgrad*rmij*evdwij*yj
2037 ggg(3)=facvdw*zj+sssgrad*rmij*evdwij*zj
2045 gvdwpp(k,i)=gvdwpp(k,i)+ghalf
2046 gvdwpp(k,j)=gvdwpp(k,j)+ghalf
2049 * Loop over residues i+1 thru j-1.
2053 gvdwpp(l,k)=gvdwpp(l,k)+ggg(l)
2057 facvdw=(ev1+evdwij)*sss
2060 fac=-3*rrmij*(facvdw+facvdw+facel)
2066 * Radial derivatives. First process both termini of the fragment (i,j)
2073 gelc(k,i)=gelc(k,i)+ghalf
2074 gelc(k,j)=gelc(k,j)+ghalf
2077 * Loop over residues i+1 thru j-1.
2081 gelc(l,k)=gelc(l,k)+ggg(l)
2088 ecosa=2.0D0*fac3*fac1+fac4
2091 ecosb=(fac3*(fac1*cosg+cosb)+cosg*fac4)
2092 ecosg=(fac3*(fac1*cosb+cosg)+cosb*fac4)
2094 dcosb(k)=rmij*(dc_norm(k,i)-erij(k)*cosb)
2095 dcosg(k)=rmij*(dc_norm(k,j)-erij(k)*cosg)
2097 cd print '(2i3,2(3(1pd14.5),3x))',i,j,(dcosb(k),k=1,3),
2098 cd & (dcosg(k),k=1,3)
2100 ggg(k)=ecosb*dcosb(k)+ecosg*dcosg(k)
2104 gelc(k,i)=gelc(k,i)+ghalf
2105 & +(ecosa*(dc_norm(k,j)-cosa*dc_norm(k,i))
2106 & + ecosb*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1)
2107 gelc(k,j)=gelc(k,j)+ghalf
2108 & +(ecosa*(dc_norm(k,i)-cosa*dc_norm(k,j))
2109 & + ecosg*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1)
2113 gelc(l,k)=gelc(l,k)+ggg(l)
2118 IF (wel_loc.gt.0.0d0 .or. wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0
2119 & .or. wcorr6.gt.0.0d0 .or. wturn3.gt.0.0d0
2120 & .or. wturn4.gt.0.0d0 .or. wturn6.gt.0.0d0) THEN
2122 C 9/25/99 Mixed third-order local-electrostatic terms. The local-interaction
2123 C energy of a peptide unit is assumed in the form of a second-order
2124 C Fourier series in the angles lambda1 and lambda2 (see Nishikawa et al.
2125 C Macromolecules, 1974, 7, 797-806 for definition). This correlation terms
2126 C are computed for EVERY pair of non-contiguous peptide groups.
2128 if (j.lt.nres-1) then
2139 muij(kkk)=mu(k,i)*mu(l,j)
2142 cd write (iout,*) 'EELEC: i',i,' j',j
2143 cd write (iout,*) 'j',j,' j1',j1,' j2',j2
2144 cd write(iout,*) 'muij',muij
2145 ury=scalar(uy(1,i),erij)
2146 urz=scalar(uz(1,i),erij)
2147 vry=scalar(uy(1,j),erij)
2148 vrz=scalar(uz(1,j),erij)
2149 a22=scalar(uy(1,i),uy(1,j))-3*ury*vry
2150 a23=scalar(uy(1,i),uz(1,j))-3*ury*vrz
2151 a32=scalar(uz(1,i),uy(1,j))-3*urz*vry
2152 a33=scalar(uz(1,i),uz(1,j))-3*urz*vrz
2153 C For diagnostics only
2158 fac=dsqrt(-ael6i)*r3ij
2159 cd write (2,*) 'fac=',fac
2160 C For diagnostics only
2166 cd write (iout,'(4i5,4f10.5)')
2167 cd & i,itortyp(itype(i)),j,itortyp(itype(j)),a22,a23,a32,a33
2168 cd write (iout,'(6f10.5)') (muij(k),k=1,4),fac,eel_loc_ij
2169 cd write (iout,'(2(3f10.5,5x)/2(3f10.5,5x))') (uy(k,i),k=1,3),
2170 cd & (uz(k,i),k=1,3),(uy(k,j),k=1,3),(uz(k,j),k=1,3)
2171 cd write (iout,'(4f10.5)')
2172 cd & scalar(uy(1,i),uy(1,j)),scalar(uy(1,i),uz(1,j)),
2173 cd & scalar(uz(1,i),uy(1,j)),scalar(uz(1,i),uz(1,j))
2174 cd write (iout,'(4f10.5)') ury,urz,vry,vrz
2175 cd write (iout,'(2i3,9f10.5/)') i,j,
2176 cd & fac22,a22,fac23,a23,fac32,a32,fac33,a33,eel_loc_ij
2178 C Derivatives of the elements of A in virtual-bond vectors
2179 call unormderiv(erij(1),unmat(1,1),rmij,erder(1,1))
2186 uryg(k,1)=scalar(erder(1,k),uy(1,i))
2187 uryg(k,2)=scalar(uygrad(1,k,1,i),erij(1))
2188 uryg(k,3)=scalar(uygrad(1,k,2,i),erij(1))
2189 urzg(k,1)=scalar(erder(1,k),uz(1,i))
2190 urzg(k,2)=scalar(uzgrad(1,k,1,i),erij(1))
2191 urzg(k,3)=scalar(uzgrad(1,k,2,i),erij(1))
2192 vryg(k,1)=scalar(erder(1,k),uy(1,j))
2193 vryg(k,2)=scalar(uygrad(1,k,1,j),erij(1))
2194 vryg(k,3)=scalar(uygrad(1,k,2,j),erij(1))
2195 vrzg(k,1)=scalar(erder(1,k),uz(1,j))
2196 vrzg(k,2)=scalar(uzgrad(1,k,1,j),erij(1))
2197 vrzg(k,3)=scalar(uzgrad(1,k,2,j),erij(1))
2207 C Compute radial contributions to the gradient
2229 C Add the contributions coming from er
2232 agg(k,1)=agg(k,1)+fac3*(uryg(k,1)*vry+vryg(k,1)*ury)
2233 agg(k,2)=agg(k,2)+fac3*(uryg(k,1)*vrz+vrzg(k,1)*ury)
2234 agg(k,3)=agg(k,3)+fac3*(urzg(k,1)*vry+vryg(k,1)*urz)
2235 agg(k,4)=agg(k,4)+fac3*(urzg(k,1)*vrz+vrzg(k,1)*urz)
2238 C Derivatives in DC(i)
2239 ghalf1=0.5d0*agg(k,1)
2240 ghalf2=0.5d0*agg(k,2)
2241 ghalf3=0.5d0*agg(k,3)
2242 ghalf4=0.5d0*agg(k,4)
2243 aggi(k,1)=fac*(scalar(uygrad(1,k,1,i),uy(1,j))
2244 & -3.0d0*uryg(k,2)*vry)+ghalf1
2245 aggi(k,2)=fac*(scalar(uygrad(1,k,1,i),uz(1,j))
2246 & -3.0d0*uryg(k,2)*vrz)+ghalf2
2247 aggi(k,3)=fac*(scalar(uzgrad(1,k,1,i),uy(1,j))
2248 & -3.0d0*urzg(k,2)*vry)+ghalf3
2249 aggi(k,4)=fac*(scalar(uzgrad(1,k,1,i),uz(1,j))
2250 & -3.0d0*urzg(k,2)*vrz)+ghalf4
2251 C Derivatives in DC(i+1)
2252 aggi1(k,1)=fac*(scalar(uygrad(1,k,2,i),uy(1,j))
2253 & -3.0d0*uryg(k,3)*vry)+agg(k,1)
2254 aggi1(k,2)=fac*(scalar(uygrad(1,k,2,i),uz(1,j))
2255 & -3.0d0*uryg(k,3)*vrz)+agg(k,2)
2256 aggi1(k,3)=fac*(scalar(uzgrad(1,k,2,i),uy(1,j))
2257 & -3.0d0*urzg(k,3)*vry)+agg(k,3)
2258 aggi1(k,4)=fac*(scalar(uzgrad(1,k,2,i),uz(1,j))
2259 & -3.0d0*urzg(k,3)*vrz)+agg(k,4)
2260 C Derivatives in DC(j)
2261 aggj(k,1)=fac*(scalar(uygrad(1,k,1,j),uy(1,i))
2262 & -3.0d0*vryg(k,2)*ury)+ghalf1
2263 aggj(k,2)=fac*(scalar(uzgrad(1,k,1,j),uy(1,i))
2264 & -3.0d0*vrzg(k,2)*ury)+ghalf2
2265 aggj(k,3)=fac*(scalar(uygrad(1,k,1,j),uz(1,i))
2266 & -3.0d0*vryg(k,2)*urz)+ghalf3
2267 aggj(k,4)=fac*(scalar(uzgrad(1,k,1,j),uz(1,i))
2268 & -3.0d0*vrzg(k,2)*urz)+ghalf4
2269 C Derivatives in DC(j+1) or DC(nres-1)
2270 aggj1(k,1)=fac*(scalar(uygrad(1,k,2,j),uy(1,i))
2271 & -3.0d0*vryg(k,3)*ury)
2272 aggj1(k,2)=fac*(scalar(uzgrad(1,k,2,j),uy(1,i))
2273 & -3.0d0*vrzg(k,3)*ury)
2274 aggj1(k,3)=fac*(scalar(uygrad(1,k,2,j),uz(1,i))
2275 & -3.0d0*vryg(k,3)*urz)
2276 aggj1(k,4)=fac*(scalar(uzgrad(1,k,2,j),uz(1,i))
2277 & -3.0d0*vrzg(k,3)*urz)
2282 C Derivatives in DC(i+1)
2283 cd aggi1(k,1)=agg(k,1)
2284 cd aggi1(k,2)=agg(k,2)
2285 cd aggi1(k,3)=agg(k,3)
2286 cd aggi1(k,4)=agg(k,4)
2287 C Derivatives in DC(j)
2292 C Derivatives in DC(j+1)
2297 if (j.eq.nres-1 .and. i.lt.j-2) then
2299 aggj1(k,l)=aggj1(k,l)+agg(k,l)
2300 cd aggj1(k,l)=agg(k,l)
2306 C Check the loc-el terms by numerical integration
2316 aggi(k,l)=-aggi(k,l)
2317 aggi1(k,l)=-aggi1(k,l)
2318 aggj(k,l)=-aggj(k,l)
2319 aggj1(k,l)=-aggj1(k,l)
2322 if (j.lt.nres-1) then
2328 aggi(k,l)=-aggi(k,l)
2329 aggi1(k,l)=-aggi1(k,l)
2330 aggj(k,l)=-aggj(k,l)
2331 aggj1(k,l)=-aggj1(k,l)
2342 aggi(k,l)=-aggi(k,l)
2343 aggi1(k,l)=-aggi1(k,l)
2344 aggj(k,l)=-aggj(k,l)
2345 aggj1(k,l)=-aggj1(k,l)
2351 IF (wel_loc.gt.0.0d0) THEN
2352 C Contribution to the local-electrostatic energy coming from the i-j pair
2353 eel_loc_ij=a22*muij(1)+a23*muij(2)+a32*muij(3)
2355 cd write (iout,*) 'i',i,' j',j,' eel_loc_ij',eel_loc_ij
2356 cd write (iout,*) a22,muij(1),a23,muij(2),a32,muij(3)
2357 eel_loc=eel_loc+eel_loc_ij
2358 C Partial derivatives in virtual-bond dihedral angles gamma
2361 & gel_loc_loc(i-1)=gel_loc_loc(i-1)+
2362 & a22*muder(1,i)*mu(1,j)+a23*muder(1,i)*mu(2,j)
2363 & +a32*muder(2,i)*mu(1,j)+a33*muder(2,i)*mu(2,j)
2364 gel_loc_loc(j-1)=gel_loc_loc(j-1)+
2365 & a22*mu(1,i)*muder(1,j)+a23*mu(1,i)*muder(2,j)
2366 & +a32*mu(2,i)*muder(1,j)+a33*mu(2,i)*muder(2,j)
2367 cd call checkint3(i,j,mu1,mu2,a22,a23,a32,a33,acipa,eel_loc_ij)
2368 cd write(iout,*) 'agg ',agg
2369 cd write(iout,*) 'aggi ',aggi
2370 cd write(iout,*) 'aggi1',aggi1
2371 cd write(iout,*) 'aggj ',aggj
2372 cd write(iout,*) 'aggj1',aggj1
2374 C Derivatives of eello in DC(i+1) thru DC(j-1) or DC(nres-2)
2376 ggg(l)=agg(l,1)*muij(1)+
2377 & agg(l,2)*muij(2)+agg(l,3)*muij(3)+agg(l,4)*muij(4)
2381 gel_loc(l,k)=gel_loc(l,k)+ggg(l)
2384 C Remaining derivatives of eello
2386 gel_loc(l,i)=gel_loc(l,i)+aggi(l,1)*muij(1)+
2387 & aggi(l,2)*muij(2)+aggi(l,3)*muij(3)+aggi(l,4)*muij(4)
2388 gel_loc(l,i+1)=gel_loc(l,i+1)+aggi1(l,1)*muij(1)+
2389 & aggi1(l,2)*muij(2)+aggi1(l,3)*muij(3)+aggi1(l,4)*muij(4)
2390 gel_loc(l,j)=gel_loc(l,j)+aggj(l,1)*muij(1)+
2391 & aggj(l,2)*muij(2)+aggj(l,3)*muij(3)+aggj(l,4)*muij(4)
2392 gel_loc(l,j1)=gel_loc(l,j1)+aggj1(l,1)*muij(1)+
2393 & aggj1(l,2)*muij(2)+aggj1(l,3)*muij(3)+aggj1(l,4)*muij(4)
2397 if (wturn3.gt.0.0d0 .or. wturn4.gt.0.0d0) then
2398 C Contributions from turns
2403 call eturn34(i,j,eello_turn3,eello_turn4)
2405 C Change 12/26/95 to calculate four-body contributions to H-bonding energy
2406 if (j.gt.i+1 .and. num_conti.le.maxconts) then
2408 C Calculate the contact function. The ith column of the array JCONT will
2409 C contain the numbers of atoms that make contacts with the atom I (of numbers
2410 C greater than I). The arrays FACONT and GACONT will contain the values of
2411 C the contact function and its derivative.
2412 c r0ij=1.02D0*rpp(iteli,itelj)
2413 c r0ij=1.11D0*rpp(iteli,itelj)
2414 r0ij=2.20D0*rpp(iteli,itelj)
2415 c r0ij=1.55D0*rpp(iteli,itelj)
2416 call gcont(rij,r0ij,1.0D0,0.2d0*r0ij,fcont,fprimcont)
2417 if (fcont.gt.0.0D0) then
2418 num_conti=num_conti+1
2419 if (num_conti.gt.maxconts) then
2420 write (iout,*) 'WARNING - max. # of contacts exceeded;',
2421 & ' will skip next contacts for this conf.'
2423 jcont_hb(num_conti,i)=j
2424 IF (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or.
2425 & wcorr6.gt.0.0d0 .or. wturn6.gt.0.0d0) THEN
2426 C 9/30/99 (AL) - store components necessary to evaluate higher-order loc-el
2428 d_cont(num_conti,i)=rij
2429 cd write (2,'(3e15.5)') rij,r0ij+0.2d0*r0ij,rij
2430 C --- Electrostatic-interaction matrix ---
2431 a_chuj(1,1,num_conti,i)=a22
2432 a_chuj(1,2,num_conti,i)=a23
2433 a_chuj(2,1,num_conti,i)=a32
2434 a_chuj(2,2,num_conti,i)=a33
2435 C --- Gradient of rij
2437 grij_hb_cont(kkk,num_conti,i)=erij(kkk)
2440 c a_chuj(1,1,num_conti,i)=-0.61d0
2441 c a_chuj(1,2,num_conti,i)= 0.4d0
2442 c a_chuj(2,1,num_conti,i)= 0.65d0
2443 c a_chuj(2,2,num_conti,i)= 0.50d0
2444 c else if (i.eq.2) then
2445 c a_chuj(1,1,num_conti,i)= 0.0d0
2446 c a_chuj(1,2,num_conti,i)= 0.0d0
2447 c a_chuj(2,1,num_conti,i)= 0.0d0
2448 c a_chuj(2,2,num_conti,i)= 0.0d0
2450 C --- and its gradients
2451 cd write (iout,*) 'i',i,' j',j
2453 cd write (iout,*) 'iii 1 kkk',kkk
2454 cd write (iout,*) agg(kkk,:)
2457 cd write (iout,*) 'iii 2 kkk',kkk
2458 cd write (iout,*) aggi(kkk,:)
2461 cd write (iout,*) 'iii 3 kkk',kkk
2462 cd write (iout,*) aggi1(kkk,:)
2465 cd write (iout,*) 'iii 4 kkk',kkk
2466 cd write (iout,*) aggj(kkk,:)
2469 cd write (iout,*) 'iii 5 kkk',kkk
2470 cd write (iout,*) aggj1(kkk,:)
2477 a_chuj_der(k,l,m,1,num_conti,i)=agg(m,kkll)
2478 a_chuj_der(k,l,m,2,num_conti,i)=aggi(m,kkll)
2479 a_chuj_der(k,l,m,3,num_conti,i)=aggi1(m,kkll)
2480 a_chuj_der(k,l,m,4,num_conti,i)=aggj(m,kkll)
2481 a_chuj_der(k,l,m,5,num_conti,i)=aggj1(m,kkll)
2483 c a_chuj_der(k,l,m,mm,num_conti,i)=0.0d0
2489 IF (wcorr4.eq.0.0d0 .and. wcorr.gt.0.0d0) THEN
2490 C Calculate contact energies
2492 wij=cosa-3.0D0*cosb*cosg
2495 c fac3=dsqrt(-ael6i)/r0ij**3
2496 fac3=dsqrt(-ael6i)*r3ij
2497 ees0pij=dsqrt(4.0D0+cosa4+wij*wij-3.0D0*cosbg1*cosbg1)
2498 ees0mij=dsqrt(4.0D0-cosa4+wij*wij-3.0D0*cosbg2*cosbg2)
2500 ees0p(num_conti,i)=0.5D0*fac3*(ees0pij+ees0mij)
2501 ees0m(num_conti,i)=0.5D0*fac3*(ees0pij-ees0mij)
2502 C Diagnostics. Comment out or remove after debugging!
2503 c ees0p(num_conti,i)=0.5D0*fac3*ees0pij
2504 c ees0m(num_conti,i)=0.5D0*fac3*ees0mij
2505 c ees0m(num_conti,i)=0.0D0
2507 c write (iout,*) 'i=',i,' j=',j,' rij=',rij,' r0ij=',r0ij,
2508 c & ' ees0ij=',ees0p(num_conti,i),ees0m(num_conti,i),' fcont=',fcont
2509 facont_hb(num_conti,i)=fcont
2511 C Angular derivatives of the contact function
2512 ees0pij1=fac3/ees0pij
2513 ees0mij1=fac3/ees0mij
2514 fac3p=-3.0D0*fac3*rrmij
2515 ees0pijp=0.5D0*fac3p*(ees0pij+ees0mij)
2516 ees0mijp=0.5D0*fac3p*(ees0pij-ees0mij)
2518 ecosa1= ees0pij1*( 1.0D0+0.5D0*wij)
2519 ecosb1=-1.5D0*ees0pij1*(wij*cosg+cosbg1)
2520 ecosg1=-1.5D0*ees0pij1*(wij*cosb+cosbg1)
2521 ecosa2= ees0mij1*(-1.0D0+0.5D0*wij)
2522 ecosb2=-1.5D0*ees0mij1*(wij*cosg+cosbg2)
2523 ecosg2=-1.5D0*ees0mij1*(wij*cosb-cosbg2)
2524 ecosap=ecosa1+ecosa2
2525 ecosbp=ecosb1+ecosb2
2526 ecosgp=ecosg1+ecosg2
2527 ecosam=ecosa1-ecosa2
2528 ecosbm=ecosb1-ecosb2
2529 ecosgm=ecosg1-ecosg2
2538 fprimcont=fprimcont/rij
2539 cd facont_hb(num_conti,i)=1.0D0
2540 C Following line is for diagnostics.
2543 dcosb(k)=rmij*(dc_norm(k,i)-erij(k)*cosb)
2544 dcosg(k)=rmij*(dc_norm(k,j)-erij(k)*cosg)
2547 gggp(k)=ecosbp*dcosb(k)+ecosgp*dcosg(k)
2548 gggm(k)=ecosbm*dcosb(k)+ecosgm*dcosg(k)
2550 gggp(1)=gggp(1)+ees0pijp*xj
2551 gggp(2)=gggp(2)+ees0pijp*yj
2552 gggp(3)=gggp(3)+ees0pijp*zj
2553 gggm(1)=gggm(1)+ees0mijp*xj
2554 gggm(2)=gggm(2)+ees0mijp*yj
2555 gggm(3)=gggm(3)+ees0mijp*zj
2556 C Derivatives due to the contact function
2557 gacont_hbr(1,num_conti,i)=fprimcont*xj
2558 gacont_hbr(2,num_conti,i)=fprimcont*yj
2559 gacont_hbr(3,num_conti,i)=fprimcont*zj
2561 ghalfp=0.5D0*gggp(k)
2562 ghalfm=0.5D0*gggm(k)
2563 gacontp_hb1(k,num_conti,i)=ghalfp
2564 & +(ecosap*(dc_norm(k,j)-cosa*dc_norm(k,i))
2565 & + ecosbp*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1)
2566 gacontp_hb2(k,num_conti,i)=ghalfp
2567 & +(ecosap*(dc_norm(k,i)-cosa*dc_norm(k,j))
2568 & + ecosgp*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1)
2569 gacontp_hb3(k,num_conti,i)=gggp(k)
2570 gacontm_hb1(k,num_conti,i)=ghalfm
2571 & +(ecosam*(dc_norm(k,j)-cosa*dc_norm(k,i))
2572 & + ecosbm*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1)
2573 gacontm_hb2(k,num_conti,i)=ghalfm
2574 & +(ecosam*(dc_norm(k,i)-cosa*dc_norm(k,j))
2575 & + ecosgm*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1)
2576 gacontm_hb3(k,num_conti,i)=gggm(k)
2579 C Diagnostics. Comment out or remove after debugging!
2581 cdiag gacontp_hb1(k,num_conti,i)=0.0D0
2582 cdiag gacontp_hb2(k,num_conti,i)=0.0D0
2583 cdiag gacontp_hb3(k,num_conti,i)=0.0D0
2584 cdiag gacontm_hb1(k,num_conti,i)=0.0D0
2585 cdiag gacontm_hb2(k,num_conti,i)=0.0D0
2586 cdiag gacontm_hb3(k,num_conti,i)=0.0D0
2589 endif ! num_conti.le.maxconts
2594 num_cont_hb(i)=num_conti
2598 cd write (iout,'(i3,3f10.5,5x,3f10.5)')
2599 cd & i,(gel_loc(k,i),k=1,3),gel_loc_loc(i)
2601 c 12/7/99 Adam eello_turn3 will be considered as a separate energy term
2602 ccc eel_loc=eel_loc+eello_turn3
2605 C-----------------------------------------------------------------------------
2606 subroutine eturn34(i,j,eello_turn3,eello_turn4)
2607 C Third- and fourth-order contributions from turns
2608 implicit real*8 (a-h,o-z)
2609 include 'DIMENSIONS'
2610 include 'sizesclu.dat'
2611 include 'COMMON.IOUNITS'
2612 include 'COMMON.GEO'
2613 include 'COMMON.VAR'
2614 include 'COMMON.LOCAL'
2615 include 'COMMON.CHAIN'
2616 include 'COMMON.DERIV'
2617 include 'COMMON.INTERACT'
2618 include 'COMMON.CONTACTS'
2619 include 'COMMON.TORSION'
2620 include 'COMMON.VECTORS'
2621 include 'COMMON.FFIELD'
2623 double precision auxmat(2,2),auxmat1(2,2),auxmat2(2,2),pizda(2,2),
2624 & e1t(2,2),e2t(2,2),e3t(2,2),e1tder(2,2),e2tder(2,2),e3tder(2,2),
2625 & e1a(2,2),ae3(2,2),ae3e2(2,2),auxvec(2),auxvec1(2)
2626 double precision agg(3,4),aggi(3,4),aggi1(3,4),
2627 & aggj(3,4),aggj1(3,4),a_temp(2,2)
2628 common /locel/ a_temp,agg,aggi,aggi1,aggj,aggj1,j1,j2
2630 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
2632 C Third-order contributions
2639 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
2640 cd call checkint_turn3(i,a_temp,eello_turn3_num)
2641 call matmat2(EUg(1,1,i+1),EUg(1,1,i+2),auxmat(1,1))
2642 call transpose2(auxmat(1,1),auxmat1(1,1))
2643 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
2644 eello_turn3=eello_turn3+0.5d0*(pizda(1,1)+pizda(2,2))
2645 cd write (2,*) 'i,',i,' j',j,'eello_turn3',
2646 cd & 0.5d0*(pizda(1,1)+pizda(2,2)),
2647 cd & ' eello_turn3_num',4*eello_turn3_num
2649 C Derivatives in gamma(i)
2650 call matmat2(EUgder(1,1,i+1),EUg(1,1,i+2),auxmat2(1,1))
2651 call transpose2(auxmat2(1,1),pizda(1,1))
2652 call matmat2(a_temp(1,1),pizda(1,1),pizda(1,1))
2653 gel_loc_turn3(i)=gel_loc_turn3(i)+0.5d0*(pizda(1,1)+pizda(2,2))
2654 C Derivatives in gamma(i+1)
2655 call matmat2(EUg(1,1,i+1),EUgder(1,1,i+2),auxmat2(1,1))
2656 call transpose2(auxmat2(1,1),pizda(1,1))
2657 call matmat2(a_temp(1,1),pizda(1,1),pizda(1,1))
2658 gel_loc_turn3(i+1)=gel_loc_turn3(i+1)
2659 & +0.5d0*(pizda(1,1)+pizda(2,2))
2660 C Cartesian derivatives
2662 a_temp(1,1)=aggi(l,1)
2663 a_temp(1,2)=aggi(l,2)
2664 a_temp(2,1)=aggi(l,3)
2665 a_temp(2,2)=aggi(l,4)
2666 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
2667 gcorr3_turn(l,i)=gcorr3_turn(l,i)
2668 & +0.5d0*(pizda(1,1)+pizda(2,2))
2669 a_temp(1,1)=aggi1(l,1)
2670 a_temp(1,2)=aggi1(l,2)
2671 a_temp(2,1)=aggi1(l,3)
2672 a_temp(2,2)=aggi1(l,4)
2673 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
2674 gcorr3_turn(l,i+1)=gcorr3_turn(l,i+1)
2675 & +0.5d0*(pizda(1,1)+pizda(2,2))
2676 a_temp(1,1)=aggj(l,1)
2677 a_temp(1,2)=aggj(l,2)
2678 a_temp(2,1)=aggj(l,3)
2679 a_temp(2,2)=aggj(l,4)
2680 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
2681 gcorr3_turn(l,j)=gcorr3_turn(l,j)
2682 & +0.5d0*(pizda(1,1)+pizda(2,2))
2683 a_temp(1,1)=aggj1(l,1)
2684 a_temp(1,2)=aggj1(l,2)
2685 a_temp(2,1)=aggj1(l,3)
2686 a_temp(2,2)=aggj1(l,4)
2687 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
2688 gcorr3_turn(l,j1)=gcorr3_turn(l,j1)
2689 & +0.5d0*(pizda(1,1)+pizda(2,2))
2692 else if (j.eq.i+3 .and. itype(i+2).ne.ntyp1) then
2693 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
2695 C Fourth-order contributions
2703 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
2704 cd call checkint_turn4(i,a_temp,eello_turn4_num)
2705 iti1=itortyp(itype(i+1))
2706 iti2=itortyp(itype(i+2))
2707 iti3=itortyp(itype(i+3))
2708 call transpose2(EUg(1,1,i+1),e1t(1,1))
2709 call transpose2(Eug(1,1,i+2),e2t(1,1))
2710 call transpose2(Eug(1,1,i+3),e3t(1,1))
2711 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
2712 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
2713 s1=scalar2(b1(1,iti2),auxvec(1))
2714 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
2715 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
2716 s2=scalar2(b1(1,iti1),auxvec(1))
2717 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
2718 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
2719 s3=0.5d0*(pizda(1,1)+pizda(2,2))
2720 eello_turn4=eello_turn4-(s1+s2+s3)
2721 cd write (2,*) 'i,',i,' j',j,'eello_turn4',-(s1+s2+s3),
2722 cd & ' eello_turn4_num',8*eello_turn4_num
2723 C Derivatives in gamma(i)
2725 call transpose2(EUgder(1,1,i+1),e1tder(1,1))
2726 call matmat2(e1tder(1,1),a_temp(1,1),auxmat(1,1))
2727 call matvec2(auxmat(1,1),Ub2(1,i+3),auxvec(1))
2728 s1=scalar2(b1(1,iti2),auxvec(1))
2729 call matmat2(ae3e2(1,1),e1tder(1,1),pizda(1,1))
2730 s3=0.5d0*(pizda(1,1)+pizda(2,2))
2731 gel_loc_turn4(i)=gel_loc_turn4(i)-(s1+s3)
2732 C Derivatives in gamma(i+1)
2733 call transpose2(EUgder(1,1,i+2),e2tder(1,1))
2734 call matvec2(ae3(1,1),Ub2der(1,i+2),auxvec(1))
2735 s2=scalar2(b1(1,iti1),auxvec(1))
2736 call matmat2(ae3(1,1),e2tder(1,1),auxmat(1,1))
2737 call matmat2(auxmat(1,1),e1t(1,1),pizda(1,1))
2738 s3=0.5d0*(pizda(1,1)+pizda(2,2))
2739 gel_loc_turn4(i+1)=gel_loc_turn4(i+1)-(s2+s3)
2740 C Derivatives in gamma(i+2)
2741 call transpose2(EUgder(1,1,i+3),e3tder(1,1))
2742 call matvec2(e1a(1,1),Ub2der(1,i+3),auxvec(1))
2743 s1=scalar2(b1(1,iti2),auxvec(1))
2744 call matmat2(a_temp(1,1),e3tder(1,1),auxmat(1,1))
2745 call matvec2(auxmat(1,1),Ub2(1,i+2),auxvec(1))
2746 s2=scalar2(b1(1,iti1),auxvec(1))
2747 call matmat2(auxmat(1,1),e2t(1,1),auxmat(1,1))
2748 call matmat2(auxmat(1,1),e1t(1,1),pizda(1,1))
2749 s3=0.5d0*(pizda(1,1)+pizda(2,2))
2750 gel_loc_turn4(i+2)=gel_loc_turn4(i+2)-(s1+s2+s3)
2751 C Cartesian derivatives
2752 C Derivatives of this turn contributions in DC(i+2)
2753 if (j.lt.nres-1) then
2755 a_temp(1,1)=agg(l,1)
2756 a_temp(1,2)=agg(l,2)
2757 a_temp(2,1)=agg(l,3)
2758 a_temp(2,2)=agg(l,4)
2759 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
2760 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
2761 s1=scalar2(b1(1,iti2),auxvec(1))
2762 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
2763 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
2764 s2=scalar2(b1(1,iti1),auxvec(1))
2765 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
2766 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
2767 s3=0.5d0*(pizda(1,1)+pizda(2,2))
2769 gcorr4_turn(l,i+2)=gcorr4_turn(l,i+2)-(s1+s2+s3)
2772 C Remaining derivatives of this turn contribution
2774 a_temp(1,1)=aggi(l,1)
2775 a_temp(1,2)=aggi(l,2)
2776 a_temp(2,1)=aggi(l,3)
2777 a_temp(2,2)=aggi(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,iti2),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,iti1),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,i)=gcorr4_turn(l,i)-(s1+s2+s3)
2788 a_temp(1,1)=aggi1(l,1)
2789 a_temp(1,2)=aggi1(l,2)
2790 a_temp(2,1)=aggi1(l,3)
2791 a_temp(2,2)=aggi1(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,iti2),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,iti1),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,i+1)=gcorr4_turn(l,i+1)-(s1+s2+s3)
2802 a_temp(1,1)=aggj(l,1)
2803 a_temp(1,2)=aggj(l,2)
2804 a_temp(2,1)=aggj(l,3)
2805 a_temp(2,2)=aggj(l,4)
2806 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
2807 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
2808 s1=scalar2(b1(1,iti2),auxvec(1))
2809 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
2810 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
2811 s2=scalar2(b1(1,iti1),auxvec(1))
2812 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
2813 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
2814 s3=0.5d0*(pizda(1,1)+pizda(2,2))
2815 gcorr4_turn(l,j)=gcorr4_turn(l,j)-(s1+s2+s3)
2816 a_temp(1,1)=aggj1(l,1)
2817 a_temp(1,2)=aggj1(l,2)
2818 a_temp(2,1)=aggj1(l,3)
2819 a_temp(2,2)=aggj1(l,4)
2820 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
2821 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
2822 s1=scalar2(b1(1,iti2),auxvec(1))
2823 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
2824 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
2825 s2=scalar2(b1(1,iti1),auxvec(1))
2826 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
2827 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
2828 s3=0.5d0*(pizda(1,1)+pizda(2,2))
2829 gcorr4_turn(l,j1)=gcorr4_turn(l,j1)-(s1+s2+s3)
2835 C-----------------------------------------------------------------------------
2836 subroutine vecpr(u,v,w)
2837 implicit real*8(a-h,o-z)
2838 dimension u(3),v(3),w(3)
2839 w(1)=u(2)*v(3)-u(3)*v(2)
2840 w(2)=-u(1)*v(3)+u(3)*v(1)
2841 w(3)=u(1)*v(2)-u(2)*v(1)
2844 C-----------------------------------------------------------------------------
2845 subroutine unormderiv(u,ugrad,unorm,ungrad)
2846 C This subroutine computes the derivatives of a normalized vector u, given
2847 C the derivatives computed without normalization conditions, ugrad. Returns
2850 double precision u(3),ugrad(3,3),unorm,ungrad(3,3)
2851 double precision vec(3)
2852 double precision scalar
2854 c write (2,*) 'ugrad',ugrad
2857 vec(i)=scalar(ugrad(1,i),u(1))
2859 c write (2,*) 'vec',vec
2862 ungrad(j,i)=(ugrad(j,i)-u(j)*vec(i))*unorm
2865 c write (2,*) 'ungrad',ungrad
2868 C-----------------------------------------------------------------------------
2869 subroutine escp(evdw2,evdw2_14)
2871 C This subroutine calculates the excluded-volume interaction energy between
2872 C peptide-group centers and side chains and its gradient in virtual-bond and
2873 C side-chain vectors.
2875 implicit real*8 (a-h,o-z)
2876 include 'DIMENSIONS'
2877 include 'sizesclu.dat'
2878 include 'COMMON.GEO'
2879 include 'COMMON.VAR'
2880 include 'COMMON.LOCAL'
2881 include 'COMMON.CHAIN'
2882 include 'COMMON.DERIV'
2883 include 'COMMON.INTERACT'
2884 include 'COMMON.FFIELD'
2885 include 'COMMON.IOUNITS'
2887 integer xshift,yshift,zshift
2890 cd print '(a)','Enter ESCP'
2891 c write (iout,*) 'iatscp_s=',iatscp_s,' iatscp_e=',iatscp_e,
2892 c & ' scal14',scal14
2893 do i=iatscp_s,iatscp_e
2894 if (itype(i).eq.ntyp1 .or. itype(i+1).eq.ntyp1) cycle
2896 c write (iout,*) "i",i," iteli",iteli," nscp_gr",nscp_gr(i),
2897 c & " iscp",(iscpstart(i,j),iscpend(i,j),j=1,nscp_gr(i))
2898 if (iteli.eq.0) goto 1225
2899 xi=0.5D0*(c(1,i)+c(1,i+1))
2900 yi=0.5D0*(c(2,i)+c(2,i+1))
2901 zi=0.5D0*(c(3,i)+c(3,i+1))
2902 C Returning the ith atom to box
2904 if (xi.lt.0) xi=xi+boxxsize
2906 if (yi.lt.0) yi=yi+boxysize
2908 if (zi.lt.0) zi=zi+boxzsize
2910 do iint=1,nscp_gr(i)
2912 do j=iscpstart(i,iint),iscpend(i,iint)
2913 itypj=iabs(itype(j))
2914 if (itypj.eq.ntyp1) cycle
2915 C Uncomment following three lines for SC-p interactions
2919 C Uncomment following three lines for Ca-p interactions
2923 C returning the jth atom to box
2925 if (xj.lt.0) xj=xj+boxxsize
2927 if (yj.lt.0) yj=yj+boxysize
2929 if (zj.lt.0) zj=zj+boxzsize
2930 dist_init=(xj-xi)**2+(yj-yi)**2+(zj-zi)**2
2935 C Finding the closest jth atom
2939 xj=xj_safe+xshift*boxxsize
2940 yj=yj_safe+yshift*boxysize
2941 zj=zj_safe+zshift*boxzsize
2942 dist_temp=(xj-xi)**2+(yj-yi)**2+(zj-zi)**2
2943 if(dist_temp.lt.dist_init) then
2953 if (subchap.eq.1) then
2963 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
2964 C sss is scaling function for smoothing the cutoff gradient otherwise
2965 C the gradient would not be continuouse
2966 sss=sscale(1.0d0/(dsqrt(rrij)))
2967 if (sss.le.0.0d0) cycle
2968 sssgrad=sscagrad(1.0d0/(dsqrt(rrij)))
2970 e1=fac*fac*aad(itypj,iteli)
2971 e2=fac*bad(itypj,iteli)
2972 if (iabs(j-i) .le. 2) then
2975 evdw2_14=evdw2_14+(e1+e2)*sss
2978 c write (iout,*) i,j,evdwij
2979 evdw2=evdw2+evdwij*sss
2982 C Calculate contributions to the gradient in the virtual-bond and SC vectors.
2984 fac=-(evdwij+e1)*rrij*sss
2985 fac=fac+(evdwij)*sssgrad*dsqrt(rrij)/expon
2990 cd write (iout,*) 'j<i'
2991 C Uncomment following three lines for SC-p interactions
2993 c gradx_scp(k,j)=gradx_scp(k,j)+ggg(k)
2996 cd write (iout,*) 'j>i'
2999 C Uncomment following line for SC-p interactions
3000 c gradx_scp(k,j)=gradx_scp(k,j)-ggg(k)
3004 gvdwc_scp(k,i)=gvdwc_scp(k,i)-0.5D0*ggg(k)
3008 cd write (iout,*) 'i=',i,' j=',j,' kstart=',kstart,' kend=',kend
3009 cd write (iout,*) ggg(1),ggg(2),ggg(3)
3012 gvdwc_scp(l,k)=gvdwc_scp(l,k)-ggg(l)
3022 gvdwc_scp(j,i)=expon*gvdwc_scp(j,i)
3023 gradx_scp(j,i)=expon*gradx_scp(j,i)
3026 C******************************************************************************
3030 C To save time the factor EXPON has been extracted from ALL components
3031 C of GVDWC and GRADX. Remember to multiply them by this factor before further
3034 C******************************************************************************
3037 C--------------------------------------------------------------------------
3038 subroutine edis(ehpb)
3040 C Evaluate bridge-strain energy and its gradient in virtual-bond and SC vectors.
3042 implicit real*8 (a-h,o-z)
3043 include 'DIMENSIONS'
3044 include 'sizesclu.dat'
3045 include 'COMMON.SBRIDGE'
3046 include 'COMMON.CHAIN'
3047 include 'COMMON.DERIV'
3048 include 'COMMON.VAR'
3049 include 'COMMON.INTERACT'
3052 cd print *,'edis: nhpb=',nhpb,' fbr=',fbr
3053 cd print *,'link_start=',link_start,' link_end=',link_end
3054 if (link_end.eq.0) return
3055 do i=link_start,link_end
3056 C If ihpb(i) and jhpb(i) > NRES, this is a SC-SC distance, otherwise a
3057 C CA-CA distance used in regularization of structure.
3060 C iii and jjj point to the residues for which the distance is assigned.
3061 if (ii.gt.nres) then
3068 C 24/11/03 AL: SS bridges handled separately because of introducing a specific
3069 C distance and angle dependent SS bond potential.
3070 if (ii.gt.nres .and. iabs(itype(iii)).eq.1 .and.
3071 & iabs(itype(jjj)).eq.1) then
3072 call ssbond_ene(iii,jjj,eij)
3075 C Calculate the distance between the two points and its difference from the
3079 C Get the force constant corresponding to this distance.
3081 C Calculate the contribution to energy.
3082 ehpb=ehpb+waga*rdis*rdis
3084 C Evaluate gradient.
3087 cd print *,'i=',i,' ii=',ii,' jj=',jj,' dhpb=',dhpb(i),' dd=',dd,
3088 cd & ' waga=',waga,' fac=',fac
3090 ggg(j)=fac*(c(j,jj)-c(j,ii))
3092 cd print '(i3,3(1pe14.5))',i,(ggg(j),j=1,3)
3093 C If this is a SC-SC distance, we need to calculate the contributions to the
3094 C Cartesian gradient in the SC vectors (ghpbx).
3097 ghpbx(j,iii)=ghpbx(j,iii)-ggg(j)
3098 ghpbx(j,jjj)=ghpbx(j,jjj)+ggg(j)
3103 ghpbc(k,j)=ghpbc(k,j)+ggg(k)
3111 C--------------------------------------------------------------------------
3112 subroutine ssbond_ene(i,j,eij)
3114 C Calculate the distance and angle dependent SS-bond potential energy
3115 C using a free-energy function derived based on RHF/6-31G** ab initio
3116 C calculations of diethyl disulfide.
3118 C A. Liwo and U. Kozlowska, 11/24/03
3120 implicit real*8 (a-h,o-z)
3121 include 'DIMENSIONS'
3122 include 'sizesclu.dat'
3123 include 'COMMON.SBRIDGE'
3124 include 'COMMON.CHAIN'
3125 include 'COMMON.DERIV'
3126 include 'COMMON.LOCAL'
3127 include 'COMMON.INTERACT'
3128 include 'COMMON.VAR'
3129 include 'COMMON.IOUNITS'
3130 double precision erij(3),dcosom1(3),dcosom2(3),gg(3)
3131 itypi=iabs(itype(i))
3135 dxi=dc_norm(1,nres+i)
3136 dyi=dc_norm(2,nres+i)
3137 dzi=dc_norm(3,nres+i)
3138 dsci_inv=dsc_inv(itypi)
3139 itypj=iabs(itype(j))
3140 dscj_inv=dsc_inv(itypj)
3144 dxj=dc_norm(1,nres+j)
3145 dyj=dc_norm(2,nres+j)
3146 dzj=dc_norm(3,nres+j)
3147 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
3152 om1=dxi*erij(1)+dyi*erij(2)+dzi*erij(3)
3153 om2=dxj*erij(1)+dyj*erij(2)+dzj*erij(3)
3154 om12=dxi*dxj+dyi*dyj+dzi*dzj
3156 dcosom1(k)=rij*(dc_norm(k,nres+i)-om1*erij(k))
3157 dcosom2(k)=rij*(dc_norm(k,nres+j)-om2*erij(k))
3163 deltat12=om2-om1+2.0d0
3165 eij=akcm*deltad*deltad+akth*(deltat1*deltat1+deltat2*deltat2)
3166 & +akct*deltad*deltat12
3167 & +v1ss*cosphi+v2ss*cosphi*cosphi+v3ss*cosphi*cosphi*cosphi
3168 c write(iout,*) i,j,"rij",rij,"d0cm",d0cm," akcm",akcm," akth",akth,
3169 c & " akct",akct," deltad",deltad," deltat",deltat1,deltat2,
3170 c & " deltat12",deltat12," eij",eij
3171 ed=2*akcm*deltad+akct*deltat12
3173 pom2=v1ss+2*v2ss*cosphi+3*v3ss*cosphi*cosphi
3174 eom1=-2*akth*deltat1-pom1-om2*pom2
3175 eom2= 2*akth*deltat2+pom1-om1*pom2
3178 gg(k)=ed*erij(k)+eom1*dcosom1(k)+eom2*dcosom2(k)
3181 ghpbx(k,i)=ghpbx(k,i)-gg(k)
3182 & +(eom12*dc_norm(k,nres+j)+eom1*erij(k))*dsci_inv
3183 ghpbx(k,j)=ghpbx(k,j)+gg(k)
3184 & +(eom12*dc_norm(k,nres+i)+eom2*erij(k))*dscj_inv
3187 C Calculate the components of the gradient in DC and X
3191 ghpbc(l,k)=ghpbc(l,k)+gg(l)
3196 C--------------------------------------------------------------------------
3197 subroutine ebond(estr)
3199 c Evaluate the energy of stretching of the CA-CA and CA-SC virtual bonds
3201 implicit real*8 (a-h,o-z)
3202 include 'DIMENSIONS'
3203 include 'sizesclu.dat'
3204 include 'COMMON.LOCAL'
3205 include 'COMMON.GEO'
3206 include 'COMMON.INTERACT'
3207 include 'COMMON.DERIV'
3208 include 'COMMON.VAR'
3209 include 'COMMON.CHAIN'
3210 include 'COMMON.IOUNITS'
3211 include 'COMMON.NAMES'
3212 include 'COMMON.FFIELD'
3213 include 'COMMON.CONTROL'
3214 logical energy_dec /.false./
3215 double precision u(3),ud(3)
3219 if (itype(i-1).eq.ntyp1 .and. itype(i).eq.ntyp1) cycle
3220 C estr1=estr1+gnmr1(vbld(i),-1.0d0,distchainmax)
3222 C gradb(j,i-1)=gnmr1prim(vbld(i),-1.0d0,distchainmax)
3223 C & *dc(j,i-1)/vbld(i)
3225 C if (energy_dec) write(iout,*)
3226 C & "estr1",i,vbld(i),distchainmax,
3227 C & gnmr1(vbld(i),-1.0d0,distchainmax)
3229 if (itype(i-1).eq.ntyp1 .or. itype(i).eq.ntyp1) then
3230 diff = vbld(i)-vbldpDUM
3232 diff = vbld(i)-vbldp0
3233 c write (iout,*) i,vbld(i),vbldp0,diff,AKP*diff*diff
3237 gradb(j,i-1)=AKP*diff*dc(j,i-1)/vbld(i)
3240 C write (iout,'(a7,i5,4f7.3)')
3241 C & "estr bb",i,vbld(i),vbldp0,diff,AKP*diff*diff
3243 estr=0.5d0*AKP*estr+estr1
3245 c 09/18/07 AL: multimodal bond potential based on AM1 CA-SC PMF's included
3249 if (iti.ne.10 .and. iti.ne.ntyp1) then
3252 diff=vbld(i+nres)-vbldsc0(1,iti)
3253 c write (iout,*) i,iti,vbld(i+nres),vbldsc0(1,iti),diff,
3254 c & AKSC(1,iti),AKSC(1,iti)*diff*diff
3255 estr=estr+0.5d0*AKSC(1,iti)*diff*diff
3257 gradbx(j,i)=AKSC(1,iti)*diff*dc(j,i+nres)/vbld(i+nres)
3261 diff=vbld(i+nres)-vbldsc0(j,iti)
3262 ud(j)=aksc(j,iti)*diff
3263 u(j)=abond0(j,iti)+0.5d0*ud(j)*diff
3277 uprod2=uprod2*u(k)*u(k)
3281 usumsqder=usumsqder+ud(j)*uprod2
3283 c write (iout,*) i,iti,vbld(i+nres),(vbldsc0(j,iti),
3284 c & AKSC(j,iti),abond0(j,iti),u(j),j=1,nbi)
3285 estr=estr+uprod/usum
3287 gradbx(j,i)=usumsqder/(usum*usum)*dc(j,i+nres)/vbld(i+nres)
3295 C--------------------------------------------------------------------------
3296 subroutine ebend(etheta)
3298 C Evaluate the virtual-bond-angle energy given the virtual-bond dihedral
3299 C angles gamma and its derivatives in consecutive thetas and gammas.
3301 implicit real*8 (a-h,o-z)
3302 include 'DIMENSIONS'
3303 include 'sizesclu.dat'
3304 include 'COMMON.LOCAL'
3305 include 'COMMON.GEO'
3306 include 'COMMON.INTERACT'
3307 include 'COMMON.DERIV'
3308 include 'COMMON.VAR'
3309 include 'COMMON.CHAIN'
3310 include 'COMMON.IOUNITS'
3311 include 'COMMON.NAMES'
3312 include 'COMMON.FFIELD'
3313 common /calcthet/ term1,term2,termm,diffak,ratak,
3314 & ak,aktc,termpre,termexp,sigc,sig0i,time11,time12,sigcsq,
3315 & delthe0,sig0inv,sigtc,sigsqtc,delthec,it
3316 double precision y(2),z(2)
3318 time11=dexp(-2*time)
3321 c write (iout,*) "nres",nres
3322 c write (*,'(a,i2)') 'EBEND ICG=',icg
3323 c write (iout,*) ithet_start,ithet_end
3324 do i=ithet_start,ithet_end
3326 if ((itype(i-1).eq.ntyp1).or.itype(i-2).eq.ntyp1
3327 & .or.itype(i).eq.ntyp1) cycle
3328 C Zero the energy function and its derivative at 0 or pi.
3329 call splinthet(theta(i),0.5d0*delta,ss,ssd)
3331 ichir1=isign(1,itype(i-2))
3332 ichir2=isign(1,itype(i))
3333 if (itype(i-2).eq.10) ichir1=isign(1,itype(i-1))
3334 if (itype(i).eq.10) ichir2=isign(1,itype(i-1))
3335 if (itype(i-1).eq.10) then
3336 itype1=isign(10,itype(i-2))
3337 ichir11=isign(1,itype(i-2))
3338 ichir12=isign(1,itype(i-2))
3339 itype2=isign(10,itype(i))
3340 ichir21=isign(1,itype(i))
3341 ichir22=isign(1,itype(i))
3347 if (i.gt.3 .and. itype(i-3).ne.ntyp1) then
3351 call proc_proc(phii,icrc)
3352 if (icrc.eq.1) phii=150.0
3363 if (i.lt.nres .and. itype(i+1).ne.ntyp1) then
3367 call proc_proc(phii1,icrc)
3368 if (icrc.eq.1) phii1=150.0
3380 C Calculate the "mean" value of theta from the part of the distribution
3381 C dependent on the adjacent virtual-bond-valence angles (gamma1 & gamma2).
3382 C In following comments this theta will be referred to as t_c.
3383 thet_pred_mean=0.0d0
3385 athetk=athet(k,it,ichir1,ichir2)
3386 bthetk=bthet(k,it,ichir1,ichir2)
3388 athetk=athet(k,itype1,ichir11,ichir12)
3389 bthetk=bthet(k,itype2,ichir21,ichir22)
3391 thet_pred_mean=thet_pred_mean+athetk*y(k)+bthetk*z(k)
3393 c write (iout,*) "thet_pred_mean",thet_pred_mean
3394 dthett=thet_pred_mean*ssd
3395 thet_pred_mean=thet_pred_mean*ss+a0thet(it)
3396 c write (iout,*) "thet_pred_mean",thet_pred_mean
3397 C Derivatives of the "mean" values in gamma1 and gamma2.
3398 dthetg1=(-athet(1,it,ichir1,ichir2)*y(2)
3399 &+athet(2,it,ichir1,ichir2)*y(1))*ss
3400 dthetg2=(-bthet(1,it,ichir1,ichir2)*z(2)
3401 & +bthet(2,it,ichir1,ichir2)*z(1))*ss
3403 dthetg1=(-athet(1,itype1,ichir11,ichir12)*y(2)
3404 &+athet(2,itype1,ichir11,ichir12)*y(1))*ss
3405 dthetg2=(-bthet(1,itype2,ichir21,ichir22)*z(2)
3406 & +bthet(2,itype2,ichir21,ichir22)*z(1))*ss
3408 if (theta(i).gt.pi-delta) then
3409 call theteng(pi-delta,thet_pred_mean,theta0(it),f0,fprim0,
3411 call mixder(pi-delta,thet_pred_mean,theta0(it),fprim_tc0)
3412 call theteng(pi,thet_pred_mean,theta0(it),f1,fprim1,E_tc1)
3413 call spline1(theta(i),pi-delta,delta,f0,f1,fprim0,ethetai,
3415 call spline2(theta(i),pi-delta,delta,E_tc0,E_tc1,fprim_tc0,
3417 else if (theta(i).lt.delta) then
3418 call theteng(delta,thet_pred_mean,theta0(it),f0,fprim0,E_tc0)
3419 call theteng(0.0d0,thet_pred_mean,theta0(it),f1,fprim1,E_tc1)
3420 call spline1(theta(i),delta,-delta,f0,f1,fprim0,ethetai,
3422 call mixder(delta,thet_pred_mean,theta0(it),fprim_tc0)
3423 call spline2(theta(i),delta,-delta,E_tc0,E_tc1,fprim_tc0,
3426 call theteng(theta(i),thet_pred_mean,theta0(it),ethetai,
3429 etheta=etheta+ethetai
3430 c write (iout,'(2i3,3f8.3,f10.5)') i,it,rad2deg*theta(i),
3431 c & rad2deg*phii,rad2deg*phii1,ethetai
3432 if (i.gt.3) gloc(i-3,icg)=gloc(i-3,icg)+wang*E_tc*dthetg1
3433 if (i.lt.nres) gloc(i-2,icg)=gloc(i-2,icg)+wang*E_tc*dthetg2
3434 gloc(nphi+i-2,icg)=wang*(E_theta+E_tc*dthett)
3437 C Ufff.... We've done all this!!!
3440 C---------------------------------------------------------------------------
3441 subroutine theteng(thetai,thet_pred_mean,theta0i,ethetai,E_theta,
3443 implicit real*8 (a-h,o-z)
3444 include 'DIMENSIONS'
3445 include 'COMMON.LOCAL'
3446 include 'COMMON.IOUNITS'
3447 common /calcthet/ term1,term2,termm,diffak,ratak,
3448 & ak,aktc,termpre,termexp,sigc,sig0i,time11,time12,sigcsq,
3449 & delthe0,sig0inv,sigtc,sigsqtc,delthec,it
3450 C Calculate the contributions to both Gaussian lobes.
3451 C 6/6/97 - Deform the Gaussians using the factor of 1/(1+time)
3452 C The "polynomial part" of the "standard deviation" of this part of
3456 sig=sig*thet_pred_mean+polthet(j,it)
3458 C Derivative of the "interior part" of the "standard deviation of the"
3459 C gamma-dependent Gaussian lobe in t_c.
3460 sigtc=3*polthet(3,it)
3462 sigtc=sigtc*thet_pred_mean+j*polthet(j,it)
3465 C Set the parameters of both Gaussian lobes of the distribution.
3466 C "Standard deviation" of the gamma-dependent Gaussian lobe (sigtc)
3467 fac=sig*sig+sigc0(it)
3470 C Following variable (sigsqtc) is -(1/2)d[sigma(t_c)**(-2))]/dt_c
3471 sigsqtc=-4.0D0*sigcsq*sigtc
3472 c print *,i,sig,sigtc,sigsqtc
3473 C Following variable (sigtc) is d[sigma(t_c)]/dt_c
3474 sigtc=-sigtc/(fac*fac)
3475 C Following variable is sigma(t_c)**(-2)
3476 sigcsq=sigcsq*sigcsq
3478 sig0inv=1.0D0/sig0i**2
3479 delthec=thetai-thet_pred_mean
3480 delthe0=thetai-theta0i
3481 term1=-0.5D0*sigcsq*delthec*delthec
3482 term2=-0.5D0*sig0inv*delthe0*delthe0
3483 C Following fuzzy logic is to avoid underflows in dexp and subsequent INFs and
3484 C NaNs in taking the logarithm. We extract the largest exponent which is added
3485 C to the energy (this being the log of the distribution) at the end of energy
3486 C term evaluation for this virtual-bond angle.
3487 if (term1.gt.term2) then
3489 term2=dexp(term2-termm)
3493 term1=dexp(term1-termm)
3496 C The ratio between the gamma-independent and gamma-dependent lobes of
3497 C the distribution is a Gaussian function of thet_pred_mean too.
3498 diffak=gthet(2,it)-thet_pred_mean
3499 ratak=diffak/gthet(3,it)**2
3500 ak=dexp(gthet(1,it)-0.5D0*diffak*ratak)
3501 C Let's differentiate it in thet_pred_mean NOW.
3503 C Now put together the distribution terms to make complete distribution.
3504 termexp=term1+ak*term2
3505 termpre=sigc+ak*sig0i
3506 C Contribution of the bending energy from this theta is just the -log of
3507 C the sum of the contributions from the two lobes and the pre-exponential
3508 C factor. Simple enough, isn't it?
3509 ethetai=(-dlog(termexp)-termm+dlog(termpre))
3510 C NOW the derivatives!!!
3511 C 6/6/97 Take into account the deformation.
3512 E_theta=(delthec*sigcsq*term1
3513 & +ak*delthe0*sig0inv*term2)/termexp
3514 E_tc=((sigtc+aktc*sig0i)/termpre
3515 & -((delthec*sigcsq+delthec*delthec*sigsqtc)*term1+
3516 & aktc*term2)/termexp)
3519 c-----------------------------------------------------------------------------
3520 subroutine mixder(thetai,thet_pred_mean,theta0i,E_tc_t)
3521 implicit real*8 (a-h,o-z)
3522 include 'DIMENSIONS'
3523 include 'COMMON.LOCAL'
3524 include 'COMMON.IOUNITS'
3525 common /calcthet/ term1,term2,termm,diffak,ratak,
3526 & ak,aktc,termpre,termexp,sigc,sig0i,time11,time12,sigcsq,
3527 & delthe0,sig0inv,sigtc,sigsqtc,delthec,it
3528 delthec=thetai-thet_pred_mean
3529 delthe0=thetai-theta0i
3530 C "Thank you" to MAPLE (probably spared one day of hand-differentiation).
3531 t3 = thetai-thet_pred_mean
3535 t14 = t12+t6*sigsqtc
3537 t21 = thetai-theta0i
3543 E_tc_t = -((sigcsq+2.D0*t3*sigsqtc)*t9-t14*sigcsq*t3*t16*t9
3544 & -aktc*sig0inv*t27)/t32+(t14*t9+aktc*t26)/t40
3545 & *(-t12*t9-ak*sig0inv*t27)
3549 C--------------------------------------------------------------------------
3550 subroutine ebend(etheta)
3552 C Evaluate the virtual-bond-angle energy given the virtual-bond dihedral
3553 C angles gamma and its derivatives in consecutive thetas and gammas.
3554 C ab initio-derived potentials from
3555 c Kozlowska et al., J. Phys.: Condens. Matter 19 (2007) 285203
3557 implicit real*8 (a-h,o-z)
3558 include 'DIMENSIONS'
3559 include 'sizesclu.dat'
3560 include 'COMMON.LOCAL'
3561 include 'COMMON.GEO'
3562 include 'COMMON.INTERACT'
3563 include 'COMMON.DERIV'
3564 include 'COMMON.VAR'
3565 include 'COMMON.CHAIN'
3566 include 'COMMON.IOUNITS'
3567 include 'COMMON.NAMES'
3568 include 'COMMON.FFIELD'
3569 include 'COMMON.CONTROL'
3570 double precision coskt(mmaxtheterm),sinkt(mmaxtheterm),
3571 & cosph1(maxsingle),sinph1(maxsingle),cosph2(maxsingle),
3572 & sinph2(maxsingle),cosph1ph2(maxdouble,maxdouble),
3573 & sinph1ph2(maxdouble,maxdouble)
3574 logical lprn /.false./, lprn1 /.false./
3576 c write (iout,*) "ithetyp",(ithetyp(i),i=1,ntyp1)
3577 do i=ithet_start,ithet_end
3579 if ((itype(i-1).eq.ntyp1).or.itype(i-2).eq.ntyp1
3580 & .or.itype(i).eq.ntyp1) cycle
3581 if (iabs(itype(i+1)).eq.20) iblock=2
3582 if (iabs(itype(i+1)).ne.20) iblock=1
3586 theti2=0.5d0*theta(i)
3587 ityp2=ithetyp((itype(i-1)))
3589 coskt(k)=dcos(k*theti2)
3590 sinkt(k)=dsin(k*theti2)
3600 if (i.gt.3 .and. itype(i-3).ne.ntyp1) then
3603 if (phii.ne.phii) phii=150.0
3607 ityp1=ithetyp((itype(i-2)))
3609 cosph1(k)=dcos(k*phii)
3610 sinph1(k)=dsin(k*phii)
3621 if (i.lt.nres .and. itype(i+1).ne.ntyp1) then
3624 if (phii1.ne.phii1) phii1=150.0
3629 ityp3=ithetyp((itype(i)))
3631 cosph2(k)=dcos(k*phii1)
3632 sinph2(k)=dsin(k*phii1)
3642 c write (iout,*) "i",i," ityp1",itype(i-2),ityp1,
3643 c & " ityp2",itype(i-1),ityp2," ityp3",itype(i),ityp3
3645 ethetai=aa0thet(ityp1,ityp2,ityp3,iblock)
3648 ccl=cosph1(l)*cosph2(k-l)
3649 ssl=sinph1(l)*sinph2(k-l)
3650 scl=sinph1(l)*cosph2(k-l)
3651 csl=cosph1(l)*sinph2(k-l)
3652 cosph1ph2(l,k)=ccl-ssl
3653 cosph1ph2(k,l)=ccl+ssl
3654 sinph1ph2(l,k)=scl+csl
3655 sinph1ph2(k,l)=scl-csl
3659 write (iout,*) "i",i," ityp1",ityp1," ityp2",ityp2,
3660 & " ityp3",ityp3," theti2",theti2," phii",phii," phii1",phii1
3661 write (iout,*) "coskt and sinkt"
3663 write (iout,*) k,coskt(k),sinkt(k)
3667 ethetai=ethetai+aathet(k,ityp1,ityp2,ityp3,iblock)*sinkt(k)
3668 dethetai=dethetai+0.5d0*k*aathet(k,ityp1,ityp2,ityp3,iblock)
3671 & write (iout,*) "k",k," aathet",
3672 & aathet(k,ityp1,ityp2,ityp3,iblock),
3673 & " ethetai",ethetai
3676 write (iout,*) "cosph and sinph"
3678 write (iout,*) k,cosph1(k),sinph1(k),cosph2(k),sinph2(k)
3680 write (iout,*) "cosph1ph2 and sinph2ph2"
3683 write (iout,*) l,k,cosph1ph2(l,k),cosph1ph2(k,l),
3684 & sinph1ph2(l,k),sinph1ph2(k,l)
3687 write(iout,*) "ethetai",ethetai
3691 aux=bbthet(k,m,ityp1,ityp2,ityp3,iblock)*cosph1(k)
3692 & +ccthet(k,m,ityp1,ityp2,ityp3,iblock)*sinph1(k)
3693 & +ddthet(k,m,ityp1,ityp2,ityp3,iblock)*cosph2(k)
3694 & +eethet(k,m,ityp1,ityp2,ityp3,iblock)*sinph2(k)
3695 ethetai=ethetai+sinkt(m)*aux
3696 dethetai=dethetai+0.5d0*m*aux*coskt(m)
3697 dephii=dephii+k*sinkt(m)*(
3698 & ccthet(k,m,ityp1,ityp2,ityp3,iblock)*cosph1(k)-
3699 & bbthet(k,m,ityp1,ityp2,ityp3,iblock)*sinph1(k))
3700 dephii1=dephii1+k*sinkt(m)*(
3701 & eethet(k,m,ityp1,ityp2,ityp3,iblock)*cosph2(k)-
3702 & ddthet(k,m,ityp1,ityp2,ityp3,iblock)*sinph2(k))
3704 & write (iout,*) "m",m," k",k," bbthet",
3705 & bbthet(k,m,ityp1,ityp2,ityp3,iblock)," ccthet",
3706 & ccthet(k,m,ityp1,ityp2,ityp3,iblock)," ddthet",
3707 & ddthet(k,m,ityp1,ityp2,ityp3,iblock)," eethet",
3708 & eethet(k,m,ityp1,ityp2,ityp3,iblock)," ethetai",ethetai
3712 & write(iout,*) "ethetai",ethetai
3716 aux=ffthet(l,k,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(l,k)+
3717 & ffthet(k,l,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(k,l)+
3718 & ggthet(l,k,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(l,k)+
3719 & ggthet(k,l,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(k,l)
3720 ethetai=ethetai+sinkt(m)*aux
3721 dethetai=dethetai+0.5d0*m*coskt(m)*aux
3722 dephii=dephii+l*sinkt(m)*(
3723 & -ffthet(l,k,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(l,k)-
3724 & ffthet(k,l,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(k,l)+
3725 & ggthet(l,k,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(l,k)+
3726 & ggthet(k,l,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(k,l))
3727 dephii1=dephii1+(k-l)*sinkt(m)*(
3728 & -ffthet(l,k,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(l,k)+
3729 & ffthet(k,l,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(k,l)+
3730 & ggthet(l,k,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(l,k)-
3731 & ggthet(k,l,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(k,l))
3733 write (iout,*) "m",m," k",k," l",l," ffthet",
3734 & ffthet(l,k,m,ityp1,ityp2,ityp3,iblock),
3735 & ffthet(k,l,m,ityp1,ityp2,ityp3,iblock)," ggthet",
3736 & ggthet(l,k,m,ityp1,ityp2,ityp3,iblock),
3737 & ggthet(k,l,m,ityp1,ityp2,ityp3,iblock),
3738 & " ethetai",ethetai
3739 write (iout,*) cosph1ph2(l,k)*sinkt(m),
3740 & cosph1ph2(k,l)*sinkt(m),
3741 & sinph1ph2(l,k)*sinkt(m),sinph1ph2(k,l)*sinkt(m)
3747 if (lprn1) write (iout,'(i2,3f8.1,9h ethetai ,f10.5)')
3748 & i,theta(i)*rad2deg,phii*rad2deg,
3749 & phii1*rad2deg,ethetai
3750 etheta=etheta+ethetai
3751 if (i.gt.3) gloc(i-3,icg)=gloc(i-3,icg)+wang*dephii
3752 if (i.lt.nres) gloc(i-2,icg)=gloc(i-2,icg)+wang*dephii1
3753 gloc(nphi+i-2,icg)=wang*dethetai
3759 c-----------------------------------------------------------------------------
3760 subroutine esc(escloc)
3761 C Calculate the local energy of a side chain and its derivatives in the
3762 C corresponding virtual-bond valence angles THETA and the spherical angles
3764 implicit real*8 (a-h,o-z)
3765 include 'DIMENSIONS'
3766 include 'sizesclu.dat'
3767 include 'COMMON.GEO'
3768 include 'COMMON.LOCAL'
3769 include 'COMMON.VAR'
3770 include 'COMMON.INTERACT'
3771 include 'COMMON.DERIV'
3772 include 'COMMON.CHAIN'
3773 include 'COMMON.IOUNITS'
3774 include 'COMMON.NAMES'
3775 include 'COMMON.FFIELD'
3776 double precision x(3),dersc(3),xemp(3),dersc0(3),dersc1(3),
3777 & ddersc0(3),ddummy(3),xtemp(3),temp(3)
3778 common /sccalc/ time11,time12,time112,theti,it,nlobit
3781 c write (iout,'(a)') 'ESC'
3782 do i=loc_start,loc_end
3784 if (it.eq.ntyp1) cycle
3785 if (it.eq.10) goto 1
3786 nlobit=nlob(iabs(it))
3787 c print *,'i=',i,' it=',it,' nlobit=',nlobit
3788 c write (iout,*) 'i=',i,' ssa=',ssa,' ssad=',ssad
3789 theti=theta(i+1)-pipol
3793 c write (iout,*) "i",i," x",x(1),x(2),x(3)
3795 if (x(2).gt.pi-delta) then
3799 call enesc(xtemp,escloci0,dersc0,ddersc0,.true.)
3801 call enesc(xtemp,escloci1,dersc1,ddummy,.false.)
3802 call spline1(x(2),pi-delta,delta,escloci0,escloci1,dersc0(2),
3804 call spline2(x(2),pi-delta,delta,dersc0(1),dersc1(1),
3805 & ddersc0(1),dersc(1))
3806 call spline2(x(2),pi-delta,delta,dersc0(3),dersc1(3),
3807 & ddersc0(3),dersc(3))
3809 call enesc_bound(xtemp,esclocbi0,dersc0,dersc12,.true.)
3811 call enesc_bound(xtemp,esclocbi1,dersc1,chuju,.false.)
3812 call spline1(x(2),pi-delta,delta,esclocbi0,esclocbi1,
3813 & dersc0(2),esclocbi,dersc02)
3814 call spline2(x(2),pi-delta,delta,dersc0(1),dersc1(1),
3816 call splinthet(x(2),0.5d0*delta,ss,ssd)
3821 dersc(k)=ss*dersc(k)+(1.0d0-ss)*dersc0(k)
3823 dersc(2)=dersc(2)+ssd*(escloci-esclocbi)
3824 c write (iout,*) 'i=',i,x(2)*rad2deg,escloci0,escloci,
3826 escloci=ss*escloci+(1.0d0-ss)*esclocbi
3828 c write (iout,*) escloci
3829 else if (x(2).lt.delta) then
3833 call enesc(xtemp,escloci0,dersc0,ddersc0,.true.)
3835 call enesc(xtemp,escloci1,dersc1,ddummy,.false.)
3836 call spline1(x(2),delta,-delta,escloci0,escloci1,dersc0(2),
3838 call spline2(x(2),delta,-delta,dersc0(1),dersc1(1),
3839 & ddersc0(1),dersc(1))
3840 call spline2(x(2),delta,-delta,dersc0(3),dersc1(3),
3841 & ddersc0(3),dersc(3))
3843 call enesc_bound(xtemp,esclocbi0,dersc0,dersc12,.true.)
3845 call enesc_bound(xtemp,esclocbi1,dersc1,chuju,.false.)
3846 call spline1(x(2),delta,-delta,esclocbi0,esclocbi1,
3847 & dersc0(2),esclocbi,dersc02)
3848 call spline2(x(2),delta,-delta,dersc0(1),dersc1(1),
3853 call splinthet(x(2),0.5d0*delta,ss,ssd)
3855 dersc(k)=ss*dersc(k)+(1.0d0-ss)*dersc0(k)
3857 dersc(2)=dersc(2)+ssd*(escloci-esclocbi)
3858 c write (iout,*) 'i=',i,x(2)*rad2deg,escloci0,escloci,
3860 escloci=ss*escloci+(1.0d0-ss)*esclocbi
3861 c write (iout,*) escloci
3863 call enesc(x,escloci,dersc,ddummy,.false.)
3866 escloc=escloc+escloci
3867 c write (iout,*) 'i=',i,' escloci=',escloci,' dersc=',dersc
3869 gloc(nphi+i-1,icg)=gloc(nphi+i-1,icg)+
3871 gloc(ialph(i,1),icg)=wscloc*dersc(2)
3872 gloc(ialph(i,1)+nside,icg)=wscloc*dersc(3)
3877 C---------------------------------------------------------------------------
3878 subroutine enesc(x,escloci,dersc,ddersc,mixed)
3879 implicit real*8 (a-h,o-z)
3880 include 'DIMENSIONS'
3881 include 'COMMON.GEO'
3882 include 'COMMON.LOCAL'
3883 include 'COMMON.IOUNITS'
3884 common /sccalc/ time11,time12,time112,theti,it,nlobit
3885 double precision x(3),z(3),Ax(3,maxlob,-1:1),dersc(3),ddersc(3)
3886 double precision contr(maxlob,-1:1)
3888 c write (iout,*) 'it=',it,' nlobit=',nlobit
3892 if (mixed) ddersc(j)=0.0d0
3896 C Because of periodicity of the dependence of the SC energy in omega we have
3897 C to add up the contributions from x(3)-2*pi, x(3), and x(3+2*pi).
3898 C To avoid underflows, first compute & store the exponents.
3906 z(k)=x(k)-censc(k,j,it)
3911 Axk=Axk+gaussc(l,k,j,it)*z(l)
3917 expfac=expfac+Ax(k,j,iii)*z(k)
3925 C As in the case of ebend, we want to avoid underflows in exponentiation and
3926 C subsequent NaNs and INFs in energy calculation.
3927 C Find the largest exponent
3931 if (emin.gt.contr(j,iii)) emin=contr(j,iii)
3935 cd print *,'it=',it,' emin=',emin
3937 C Compute the contribution to SC energy and derivatives
3941 expfac=dexp(bsc(j,iabs(it))-0.5D0*contr(j,iii)+emin)
3942 cd print *,'j=',j,' expfac=',expfac
3943 escloc_i=escloc_i+expfac
3945 dersc(k)=dersc(k)+Ax(k,j,iii)*expfac
3949 ddersc(k)=ddersc(k)+(-Ax(2,j,iii)*Ax(k,j,iii)
3950 & +gaussc(k,2,j,it))*expfac
3957 dersc(1)=dersc(1)/cos(theti)**2
3958 ddersc(1)=ddersc(1)/cos(theti)**2
3961 escloci=-(dlog(escloc_i)-emin)
3963 dersc(j)=dersc(j)/escloc_i
3967 ddersc(j)=(ddersc(j)/escloc_i+dersc(2)*dersc(j))
3972 C------------------------------------------------------------------------------
3973 subroutine enesc_bound(x,escloci,dersc,dersc12,mixed)
3974 implicit real*8 (a-h,o-z)
3975 include 'DIMENSIONS'
3976 include 'COMMON.GEO'
3977 include 'COMMON.LOCAL'
3978 include 'COMMON.IOUNITS'
3979 common /sccalc/ time11,time12,time112,theti,it,nlobit
3980 double precision x(3),z(3),Ax(3,maxlob),dersc(3)
3981 double precision contr(maxlob)
3992 z(k)=x(k)-censc(k,j,it)
3998 Axk=Axk+gaussc(l,k,j,it)*z(l)
4004 expfac=expfac+Ax(k,j)*z(k)
4009 C As in the case of ebend, we want to avoid underflows in exponentiation and
4010 C subsequent NaNs and INFs in energy calculation.
4011 C Find the largest exponent
4014 if (emin.gt.contr(j)) emin=contr(j)
4018 C Compute the contribution to SC energy and derivatives
4022 expfac=dexp(bsc(j,iabs(it))-0.5D0*contr(j)+emin)
4023 escloc_i=escloc_i+expfac
4025 dersc(k)=dersc(k)+Ax(k,j)*expfac
4027 if (mixed) dersc12=dersc12+(-Ax(2,j)*Ax(1,j)
4028 & +gaussc(1,2,j,it))*expfac
4032 dersc(1)=dersc(1)/cos(theti)**2
4033 dersc12=dersc12/cos(theti)**2
4034 escloci=-(dlog(escloc_i)-emin)
4036 dersc(j)=dersc(j)/escloc_i
4038 if (mixed) dersc12=(dersc12/escloc_i+dersc(2)*dersc(1))
4042 c----------------------------------------------------------------------------------
4043 subroutine esc(escloc)
4044 C Calculate the local energy of a side chain and its derivatives in the
4045 C corresponding virtual-bond valence angles THETA and the spherical angles
4046 C ALPHA and OMEGA derived from AM1 all-atom calculations.
4047 C added by Urszula Kozlowska. 07/11/2007
4049 implicit real*8 (a-h,o-z)
4050 include 'DIMENSIONS'
4051 include 'sizesclu.dat'
4052 include 'COMMON.GEO'
4053 include 'COMMON.LOCAL'
4054 include 'COMMON.VAR'
4055 include 'COMMON.SCROT'
4056 include 'COMMON.INTERACT'
4057 include 'COMMON.DERIV'
4058 include 'COMMON.CHAIN'
4059 include 'COMMON.IOUNITS'
4060 include 'COMMON.NAMES'
4061 include 'COMMON.FFIELD'
4062 include 'COMMON.CONTROL'
4063 include 'COMMON.VECTORS'
4064 double precision x_prime(3),y_prime(3),z_prime(3)
4065 & , sumene,dsc_i,dp2_i,x(65),
4066 & xx,yy,zz,sumene1,sumene2,sumene3,sumene4,s1,s1_6,s2,s2_6,
4067 & de_dxx,de_dyy,de_dzz,de_dt
4068 double precision s1_t,s1_6_t,s2_t,s2_6_t
4070 & dXX_Ci1(3),dYY_Ci1(3),dZZ_Ci1(3),dXX_Ci(3),
4071 & dYY_Ci(3),dZZ_Ci(3),dXX_XYZ(3),dYY_XYZ(3),dZZ_XYZ(3),
4072 & dt_dCi(3),dt_dCi1(3)
4073 common /sccalc/ time11,time12,time112,theti,it,nlobit
4076 do i=loc_start,loc_end
4077 if (itype(i).eq.ntyp1) cycle
4078 costtab(i+1) =dcos(theta(i+1))
4079 sinttab(i+1) =dsqrt(1-costtab(i+1)*costtab(i+1))
4080 cost2tab(i+1)=dsqrt(0.5d0*(1.0d0+costtab(i+1)))
4081 sint2tab(i+1)=dsqrt(0.5d0*(1.0d0-costtab(i+1)))
4082 cosfac2=0.5d0/(1.0d0+costtab(i+1))
4083 cosfac=dsqrt(cosfac2)
4084 sinfac2=0.5d0/(1.0d0-costtab(i+1))
4085 sinfac=dsqrt(sinfac2)
4087 if (it.eq.10) goto 1
4089 C Compute the axes of tghe local cartesian coordinates system; store in
4090 c x_prime, y_prime and z_prime
4097 C write(2,*) "dc_norm", dc_norm(1,i+nres),dc_norm(2,i+nres),
4098 C & dc_norm(3,i+nres)
4100 x_prime(j) = (dc_norm(j,i) - dc_norm(j,i-1))*cosfac
4101 y_prime(j) = (dc_norm(j,i) + dc_norm(j,i-1))*sinfac
4104 z_prime(j) = -uz(j,i-1)*dsign(1.0d0,dfloat(itype(i)))
4107 c write (2,*) "x_prime",(x_prime(j),j=1,3)
4108 c write (2,*) "y_prime",(y_prime(j),j=1,3)
4109 c write (2,*) "z_prime",(z_prime(j),j=1,3)
4110 c write (2,*) "xx",scalar(x_prime(1),x_prime(1)),
4111 c & " xy",scalar(x_prime(1),y_prime(1)),
4112 c & " xz",scalar(x_prime(1),z_prime(1)),
4113 c & " yy",scalar(y_prime(1),y_prime(1)),
4114 c & " yz",scalar(y_prime(1),z_prime(1)),
4115 c & " zz",scalar(z_prime(1),z_prime(1))
4117 C Transform the unit vector of the ith side-chain centroid, dC_norm(*,i),
4118 C to local coordinate system. Store in xx, yy, zz.
4124 xx = xx + x_prime(j)*dc_norm(j,i+nres)
4125 yy = yy + y_prime(j)*dc_norm(j,i+nres)
4126 zz = zz + z_prime(j)*dc_norm(j,i+nres)
4133 C Compute the energy of the ith side cbain
4135 c write (2,*) "xx",xx," yy",yy," zz",zz
4138 x(j) = sc_parmin(j,it)
4141 Cc diagnostics - remove later
4143 yy1 = dsin(alph(2))*dcos(omeg(2))
4144 zz1 = -dsin(alph(2))*dsin(omeg(2))
4145 write(2,'(3f8.1,3f9.3,1x,3f9.3)')
4146 & alph(2)*rad2deg,omeg(2)*rad2deg,theta(3)*rad2deg,xx,yy,zz,
4148 C," --- ", xx_w,yy_w,zz_w
4151 sumene1= x(1)+ x(2)*xx+ x(3)*yy+ x(4)*zz+ x(5)*xx**2
4152 & + x(6)*yy**2+ x(7)*zz**2+ x(8)*xx*zz+ x(9)*xx*yy
4154 sumene2= x(11) + x(12)*xx + x(13)*yy + x(14)*zz + x(15)*xx**2
4155 & + x(16)*yy**2 + x(17)*zz**2 + x(18)*xx*zz + x(19)*xx*yy
4157 sumene3= x(21) +x(22)*xx +x(23)*yy +x(24)*zz +x(25)*xx**2
4158 & +x(26)*yy**2 +x(27)*zz**2 +x(28)*xx*zz +x(29)*xx*yy
4159 & +x(30)*yy*zz +x(31)*xx**3 +x(32)*yy**3 +x(33)*zz**3
4160 & +x(34)*(xx**2)*yy +x(35)*(xx**2)*zz +x(36)*(yy**2)*xx
4161 & +x(37)*(yy**2)*zz +x(38)*(zz**2)*xx +x(39)*(zz**2)*yy
4163 sumene4= x(41) +x(42)*xx +x(43)*yy +x(44)*zz +x(45)*xx**2
4164 & +x(46)*yy**2 +x(47)*zz**2 +x(48)*xx*zz +x(49)*xx*yy
4165 & +x(50)*yy*zz +x(51)*xx**3 +x(52)*yy**3 +x(53)*zz**3
4166 & +x(54)*(xx**2)*yy +x(55)*(xx**2)*zz +x(56)*(yy**2)*xx
4167 & +x(57)*(yy**2)*zz +x(58)*(zz**2)*xx +x(59)*(zz**2)*yy
4169 dsc_i = 0.743d0+x(61)
4171 dscp1=dsqrt(dsc_i**2+dp2_i**2-2*dsc_i*dp2_i
4172 & *(xx*cost2tab(i+1)+yy*sint2tab(i+1)))
4173 dscp2=dsqrt(dsc_i**2+dp2_i**2-2*dsc_i*dp2_i
4174 & *(xx*cost2tab(i+1)-yy*sint2tab(i+1)))
4175 s1=(1+x(63))/(0.1d0 + dscp1)
4176 s1_6=(1+x(64))/(0.1d0 + dscp1**6)
4177 s2=(1+x(65))/(0.1d0 + dscp2)
4178 s2_6=(1+x(65))/(0.1d0 + dscp2**6)
4179 sumene = ( sumene3*sint2tab(i+1) + sumene1)*(s1+s1_6)
4180 & + (sumene4*cost2tab(i+1) +sumene2)*(s2+s2_6)
4181 c write(2,'(i2," sumene",7f9.3)') i,sumene1,sumene2,sumene3,
4183 c & dscp1,dscp2,sumene
4184 c sumene = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
4185 escloc = escloc + sumene
4186 c write (2,*) "escloc",escloc
4187 if (.not. calc_grad) goto 1
4190 C This section to check the numerical derivatives of the energy of ith side
4191 C chain in xx, yy, zz, and theta. Use the -DDEBUG compiler option or insert
4192 C #define DEBUG in the code to turn it on.
4194 write (2,*) "sumene =",sumene
4198 write (2,*) xx,yy,zz
4199 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
4200 de_dxx_num=(sumenep-sumene)/aincr
4202 write (2,*) "xx+ sumene from enesc=",sumenep
4205 write (2,*) xx,yy,zz
4206 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
4207 de_dyy_num=(sumenep-sumene)/aincr
4209 write (2,*) "yy+ sumene from enesc=",sumenep
4212 write (2,*) xx,yy,zz
4213 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
4214 de_dzz_num=(sumenep-sumene)/aincr
4216 write (2,*) "zz+ sumene from enesc=",sumenep
4217 costsave=cost2tab(i+1)
4218 sintsave=sint2tab(i+1)
4219 cost2tab(i+1)=dcos(0.5d0*(theta(i+1)+aincr))
4220 sint2tab(i+1)=dsin(0.5d0*(theta(i+1)+aincr))
4221 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
4222 de_dt_num=(sumenep-sumene)/aincr
4223 write (2,*) " t+ sumene from enesc=",sumenep
4224 cost2tab(i+1)=costsave
4225 sint2tab(i+1)=sintsave
4226 C End of diagnostics section.
4229 C Compute the gradient of esc
4231 pom_s1=(1.0d0+x(63))/(0.1d0 + dscp1)**2
4232 pom_s16=6*(1.0d0+x(64))/(0.1d0 + dscp1**6)**2
4233 pom_s2=(1.0d0+x(65))/(0.1d0 + dscp2)**2
4234 pom_s26=6*(1.0d0+x(65))/(0.1d0 + dscp2**6)**2
4235 pom_dx=dsc_i*dp2_i*cost2tab(i+1)
4236 pom_dy=dsc_i*dp2_i*sint2tab(i+1)
4237 pom_dt1=-0.5d0*dsc_i*dp2_i*(xx*sint2tab(i+1)-yy*cost2tab(i+1))
4238 pom_dt2=-0.5d0*dsc_i*dp2_i*(xx*sint2tab(i+1)+yy*cost2tab(i+1))
4239 pom1=(sumene3*sint2tab(i+1)+sumene1)
4240 & *(pom_s1/dscp1+pom_s16*dscp1**4)
4241 pom2=(sumene4*cost2tab(i+1)+sumene2)
4242 & *(pom_s2/dscp2+pom_s26*dscp2**4)
4243 sumene1x=x(2)+2*x(5)*xx+x(8)*zz+ x(9)*yy
4244 sumene3x=x(22)+2*x(25)*xx+x(28)*zz+x(29)*yy+3*x(31)*xx**2
4245 & +2*x(34)*xx*yy +2*x(35)*xx*zz +x(36)*(yy**2) +x(38)*(zz**2)
4247 sumene2x=x(12)+2*x(15)*xx+x(18)*zz+ x(19)*yy
4248 sumene4x=x(42)+2*x(45)*xx +x(48)*zz +x(49)*yy +3*x(51)*xx**2
4249 & +2*x(54)*xx*yy+2*x(55)*xx*zz+x(56)*(yy**2)+x(58)*(zz**2)
4251 de_dxx =(sumene1x+sumene3x*sint2tab(i+1))*(s1+s1_6)
4252 & +(sumene2x+sumene4x*cost2tab(i+1))*(s2+s2_6)
4253 & +(pom1+pom2)*pom_dx
4255 write(2,*), "de_dxx = ", de_dxx,de_dxx_num
4258 sumene1y=x(3) + 2*x(6)*yy + x(9)*xx + x(10)*zz
4259 sumene3y=x(23) +2*x(26)*yy +x(29)*xx +x(30)*zz +3*x(32)*yy**2
4260 & +x(34)*(xx**2) +2*x(36)*yy*xx +2*x(37)*yy*zz +x(39)*(zz**2)
4262 sumene2y=x(13) + 2*x(16)*yy + x(19)*xx + x(20)*zz
4263 sumene4y=x(43)+2*x(46)*yy+x(49)*xx +x(50)*zz
4264 & +3*x(52)*yy**2+x(54)*xx**2+2*x(56)*yy*xx +2*x(57)*yy*zz
4265 & +x(59)*zz**2 +x(60)*xx*zz
4266 de_dyy =(sumene1y+sumene3y*sint2tab(i+1))*(s1+s1_6)
4267 & +(sumene2y+sumene4y*cost2tab(i+1))*(s2+s2_6)
4268 & +(pom1-pom2)*pom_dy
4270 write(2,*), "de_dyy = ", de_dyy,de_dyy_num
4273 de_dzz =(x(24) +2*x(27)*zz +x(28)*xx +x(30)*yy
4274 & +3*x(33)*zz**2 +x(35)*xx**2 +x(37)*yy**2 +2*x(38)*zz*xx
4275 & +2*x(39)*zz*yy +x(40)*xx*yy)*sint2tab(i+1)*(s1+s1_6)
4276 & +(x(4) + 2*x(7)*zz+ x(8)*xx + x(10)*yy)*(s1+s1_6)
4277 & +(x(44)+2*x(47)*zz +x(48)*xx +x(50)*yy +3*x(53)*zz**2
4278 & +x(55)*xx**2 +x(57)*(yy**2)+2*x(58)*zz*xx +2*x(59)*zz*yy
4279 & +x(60)*xx*yy)*cost2tab(i+1)*(s2+s2_6)
4280 & + ( x(14) + 2*x(17)*zz+ x(18)*xx + x(20)*yy)*(s2+s2_6)
4282 write(2,*), "de_dzz = ", de_dzz,de_dzz_num
4285 de_dt = 0.5d0*sumene3*cost2tab(i+1)*(s1+s1_6)
4286 & -0.5d0*sumene4*sint2tab(i+1)*(s2+s2_6)
4287 & +pom1*pom_dt1+pom2*pom_dt2
4289 write(2,*), "de_dt = ", de_dt,de_dt_num
4293 cossc=scalar(dc_norm(1,i),dc_norm(1,i+nres))
4294 cossc1=scalar(dc_norm(1,i-1),dc_norm(1,i+nres))
4295 cosfac2xx=cosfac2*xx
4296 sinfac2yy=sinfac2*yy
4298 dt_dCi(k) = -(dc_norm(k,i-1)+costtab(i+1)*dc_norm(k,i))*
4300 dt_dCi1(k)= -(dc_norm(k,i)+costtab(i+1)*dc_norm(k,i-1))*
4302 pom=(dC_norm(k,i+nres)-cossc*dC_norm(k,i))*vbld_inv(i+1)
4303 pom1=(dC_norm(k,i+nres)-cossc1*dC_norm(k,i-1))*vbld_inv(i)
4304 c write (iout,*) "i",i," k",k," pom",pom," pom1",pom1,
4305 c & " dt_dCi",dt_dCi(k)," dt_dCi1",dt_dCi1(k)
4306 c write (iout,*) "dC_norm",(dC_norm(j,i),j=1,3),
4307 c & (dC_norm(j,i-1),j=1,3)," vbld_inv",vbld_inv(i+1),vbld_inv(i)
4308 dXX_Ci(k)=pom*cosfac-dt_dCi(k)*cosfac2xx
4309 dXX_Ci1(k)=-pom1*cosfac-dt_dCi1(k)*cosfac2xx
4310 dYY_Ci(k)=pom*sinfac+dt_dCi(k)*sinfac2yy
4311 dYY_Ci1(k)=pom1*sinfac+dt_dCi1(k)*sinfac2yy
4315 dZZ_Ci(k)=dZZ_Ci(k)-uzgrad(j,k,2,i-1)
4316 & *dsign(1.0d0,dfloat(itype(i)))*dC_norm(j,i+nres)
4317 dZZ_Ci1(k)=dZZ_Ci1(k)-uzgrad(j,k,1,i-1)
4318 & *dsign(1.0d0,dfloat(itype(i)))*dC_norm(j,i+nres)
4321 dXX_XYZ(k)=vbld_inv(i+nres)*(x_prime(k)-xx*dC_norm(k,i+nres))
4322 dYY_XYZ(k)=vbld_inv(i+nres)*(y_prime(k)-yy*dC_norm(k,i+nres))
4323 dZZ_XYZ(k)=vbld_inv(i+nres)*(z_prime(k)-zz*dC_norm(k,i+nres))
4325 dt_dCi(k) = -dt_dCi(k)/sinttab(i+1)
4326 dt_dCi1(k)= -dt_dCi1(k)/sinttab(i+1)
4330 dXX_Ctab(k,i)=dXX_Ci(k)
4331 dXX_C1tab(k,i)=dXX_Ci1(k)
4332 dYY_Ctab(k,i)=dYY_Ci(k)
4333 dYY_C1tab(k,i)=dYY_Ci1(k)
4334 dZZ_Ctab(k,i)=dZZ_Ci(k)
4335 dZZ_C1tab(k,i)=dZZ_Ci1(k)
4336 dXX_XYZtab(k,i)=dXX_XYZ(k)
4337 dYY_XYZtab(k,i)=dYY_XYZ(k)
4338 dZZ_XYZtab(k,i)=dZZ_XYZ(k)
4342 c write (iout,*) "k",k," dxx_ci1",dxx_ci1(k)," dyy_ci1",
4343 c & dyy_ci1(k)," dzz_ci1",dzz_ci1(k)
4344 c write (iout,*) "k",k," dxx_ci",dxx_ci(k)," dyy_ci",
4345 c & dyy_ci(k)," dzz_ci",dzz_ci(k)
4346 c write (iout,*) "k",k," dt_dci",dt_dci(k)," dt_dci",
4348 c write (iout,*) "k",k," dxx_XYZ",dxx_XYZ(k)," dyy_XYZ",
4349 c & dyy_XYZ(k)," dzz_XYZ",dzz_XYZ(k)
4350 gscloc(k,i-1)=gscloc(k,i-1)+de_dxx*dxx_ci1(k)
4351 & +de_dyy*dyy_ci1(k)+de_dzz*dzz_ci1(k)+de_dt*dt_dCi1(k)
4352 gscloc(k,i)=gscloc(k,i)+de_dxx*dxx_Ci(k)
4353 & +de_dyy*dyy_Ci(k)+de_dzz*dzz_Ci(k)+de_dt*dt_dCi(k)
4354 gsclocx(k,i)= de_dxx*dxx_XYZ(k)
4355 & +de_dyy*dyy_XYZ(k)+de_dzz*dzz_XYZ(k)
4357 c write(iout,*) "ENERGY GRAD = ", (gscloc(k,i-1),k=1,3),
4358 c & (gscloc(k,i),k=1,3),(gsclocx(k,i),k=1,3)
4360 C to check gradient call subroutine check_grad
4367 c------------------------------------------------------------------------------
4368 subroutine gcont(rij,r0ij,eps0ij,delta,fcont,fprimcont)
4370 C This procedure calculates two-body contact function g(rij) and its derivative:
4373 C g(rij) = esp0ij*(-0.9375*x+0.625*x**3-0.1875*x**5) ! -1 =< x =< 1
4376 C where x=(rij-r0ij)/delta
4378 C rij - interbody distance, r0ij - contact distance, eps0ij - contact energy
4381 double precision rij,r0ij,eps0ij,fcont,fprimcont
4382 double precision x,x2,x4,delta
4386 if (x.lt.-1.0D0) then
4389 else if (x.le.1.0D0) then
4392 fcont=eps0ij*(x*(-0.9375D0+0.6250D0*x2-0.1875D0*x4)+0.5D0)
4393 fprimcont=eps0ij * (-0.9375D0+1.8750D0*x2-0.9375D0*x4)/delta
4400 c------------------------------------------------------------------------------
4401 subroutine splinthet(theti,delta,ss,ssder)
4402 implicit real*8 (a-h,o-z)
4403 include 'DIMENSIONS'
4404 include 'sizesclu.dat'
4405 include 'COMMON.VAR'
4406 include 'COMMON.GEO'
4409 if (theti.gt.pipol) then
4410 call gcont(theti,thetup,1.0d0,delta,ss,ssder)
4412 call gcont(-theti,-thetlow,1.0d0,delta,ss,ssder)
4417 c------------------------------------------------------------------------------
4418 subroutine spline1(x,x0,delta,f0,f1,fprim0,f,fprim)
4420 double precision x,x0,delta,f0,f1,fprim0,f,fprim
4421 double precision ksi,ksi2,ksi3,a1,a2,a3
4422 a1=fprim0*delta/(f1-f0)
4428 f=f0+(f1-f0)*ksi*(a1+ksi*(a2+a3*ksi))
4429 fprim=(f1-f0)/delta*(a1+ksi*(2*a2+3*ksi*a3))
4432 c------------------------------------------------------------------------------
4433 subroutine spline2(x,x0,delta,f0x,f1x,fprim0x,fx)
4435 double precision x,x0,delta,f0x,f1x,fprim0x,fx
4436 double precision ksi,ksi2,ksi3,a1,a2,a3
4441 a2=3*(f1x-f0x)-2*fprim0x*delta
4442 a3=fprim0x*delta-2*(f1x-f0x)
4443 fx=f0x+a1*ksi+a2*ksi2+a3*ksi3
4446 C-----------------------------------------------------------------------------
4448 C-----------------------------------------------------------------------------
4449 subroutine etor(etors,edihcnstr,fact)
4450 implicit real*8 (a-h,o-z)
4451 include 'DIMENSIONS'
4452 include 'sizesclu.dat'
4453 include 'COMMON.VAR'
4454 include 'COMMON.GEO'
4455 include 'COMMON.LOCAL'
4456 include 'COMMON.TORSION'
4457 include 'COMMON.INTERACT'
4458 include 'COMMON.DERIV'
4459 include 'COMMON.CHAIN'
4460 include 'COMMON.NAMES'
4461 include 'COMMON.IOUNITS'
4462 include 'COMMON.FFIELD'
4463 include 'COMMON.TORCNSTR'
4465 C Set lprn=.true. for debugging
4469 do i=iphi_start,iphi_end
4470 if (itype(i-2).eq.ntyp1 .or. itype(i-1).eq.ntyp1
4471 & .or. itype(i).eq.ntyp1) cycle
4472 itori=itortyp(itype(i-2))
4473 itori1=itortyp(itype(i-1))
4476 C Proline-Proline pair is a special case...
4477 if (itori.eq.3 .and. itori1.eq.3) then
4478 if (phii.gt.-dwapi3) then
4480 fac=1.0D0/(1.0D0-cosphi)
4481 etorsi=v1(1,3,3)*fac
4482 etorsi=etorsi+etorsi
4483 etors=etors+etorsi-v1(1,3,3)
4484 gloci=gloci-3*fac*etorsi*dsin(3*phii)
4487 v1ij=v1(j+1,itori,itori1)
4488 v2ij=v2(j+1,itori,itori1)
4491 etors=etors+v1ij*cosphi+v2ij*sinphi+dabs(v1ij)+dabs(v2ij)
4492 gloci=gloci+j*(v2ij*cosphi-v1ij*sinphi)
4496 v1ij=v1(j,itori,itori1)
4497 v2ij=v2(j,itori,itori1)
4500 etors=etors+v1ij*cosphi+v2ij*sinphi+dabs(v1ij)+dabs(v2ij)
4501 gloci=gloci+j*(v2ij*cosphi-v1ij*sinphi)
4505 & write (iout,'(2(a3,2x,i3,2x),2i3,6f8.3/26x,6f8.3/)')
4506 & restyp(itype(i-2)),i-2,restyp(itype(i-1)),i-1,itori,itori1,
4507 & (v1(j,itori,itori1),j=1,6),(v2(j,itori,itori1),j=1,6)
4508 gloc(i-3,icg)=gloc(i-3,icg)+wtor*fact*gloci
4509 c write (iout,*) 'i=',i,' gloc=',gloc(i-3,icg)
4511 ! 6/20/98 - dihedral angle constraints
4514 itori=idih_constr(i)
4517 if (difi.gt.drange(i)) then
4519 edihcnstr=edihcnstr+0.25d0*ftors*difi**4
4520 gloc(itori-3,icg)=gloc(itori-3,icg)+ftors*difi**3
4521 else if (difi.lt.-drange(i)) then
4523 edihcnstr=edihcnstr+0.25d0*ftors*difi**4
4524 gloc(itori-3,icg)=gloc(itori-3,icg)+ftors*difi**3
4526 ! write (iout,'(2i5,2f8.3,2e14.5)') i,itori,rad2deg*phii,
4527 ! & rad2deg*difi,0.25d0*ftors*difi**4,gloc(itori-3,icg)
4529 ! write (iout,*) 'edihcnstr',edihcnstr
4532 c------------------------------------------------------------------------------
4534 subroutine etor(etors,edihcnstr,fact)
4535 implicit real*8 (a-h,o-z)
4536 include 'DIMENSIONS'
4537 include 'sizesclu.dat'
4538 include 'COMMON.VAR'
4539 include 'COMMON.GEO'
4540 include 'COMMON.LOCAL'
4541 include 'COMMON.TORSION'
4542 include 'COMMON.INTERACT'
4543 include 'COMMON.DERIV'
4544 include 'COMMON.CHAIN'
4545 include 'COMMON.NAMES'
4546 include 'COMMON.IOUNITS'
4547 include 'COMMON.FFIELD'
4548 include 'COMMON.TORCNSTR'
4550 C Set lprn=.true. for debugging
4554 do i=iphi_start,iphi_end
4556 if (itype(i-2).eq.ntyp1.or. itype(i-1).eq.ntyp1
4557 & .or. itype(i).eq.ntyp1 .or. itype(i-3).eq.ntyp1) cycle
4558 if (itel(i-2).eq.0 .or. itel(i-1).eq.0) goto 1215
4559 if (iabs(itype(i)).eq.20) then
4564 itori=itortyp(itype(i-2))
4565 itori1=itortyp(itype(i-1))
4568 C Regular cosine and sine terms
4569 do j=1,nterm(itori,itori1,iblock)
4570 v1ij=v1(j,itori,itori1,iblock)
4571 v2ij=v2(j,itori,itori1,iblock)
4574 etors=etors+v1ij*cosphi+v2ij*sinphi
4575 gloci=gloci+j*(v2ij*cosphi-v1ij*sinphi)
4579 C E = SUM ----------------------------------- - v1
4580 C [v2 cos(phi/2)+v3 sin(phi/2)]^2 + 1
4582 cosphi=dcos(0.5d0*phii)
4583 sinphi=dsin(0.5d0*phii)
4584 do j=1,nlor(itori,itori1,iblock)
4585 vl1ij=vlor1(j,itori,itori1)
4586 vl2ij=vlor2(j,itori,itori1)
4587 vl3ij=vlor3(j,itori,itori1)
4588 pom=vl2ij*cosphi+vl3ij*sinphi
4589 pom1=1.0d0/(pom*pom+1.0d0)
4590 etors=etors+vl1ij*pom1
4592 gloci=gloci+vl1ij*(vl3ij*cosphi-vl2ij*sinphi)*pom
4594 C Subtract the constant term
4595 etors=etors-v0(itori,itori1,iblock)
4597 & write (iout,'(2(a3,2x,i3,2x),2i3,6f8.3/26x,6f8.3/)')
4598 & restyp(itype(i-2)),i-2,restyp(itype(i-1)),i-1,itori,itori1,
4599 & (v1(j,itori,itori1,1),j=1,6),(v2(j,itori,itori1,1),j=1,6)
4600 gloc(i-3,icg)=gloc(i-3,icg)+wtor*fact*gloci
4601 c write (iout,*) 'i=',i,' gloc=',gloc(i-3,icg)
4604 ! 6/20/98 - dihedral angle constraints
4607 itori=idih_constr(i)
4609 difi=pinorm(phii-phi0(i))
4611 if (difi.gt.drange(i)) then
4613 edihcnstr=edihcnstr+0.25d0*ftors*difi**4
4614 gloc(itori-3,icg)=gloc(itori-3,icg)+ftors*difi**3
4615 edihi=0.25d0*ftors*difi**4
4616 else if (difi.lt.-drange(i)) then
4618 edihcnstr=edihcnstr+0.25d0*ftors*difi**4
4619 gloc(itori-3,icg)=gloc(itori-3,icg)+ftors*difi**3
4620 edihi=0.25d0*ftors*difi**4
4624 c write (iout,'(2i5,4f10.5,e15.5)') i,itori,phii,phi0(i),difi,
4626 ! write (iout,'(2i5,2f8.3,2e14.5)') i,itori,rad2deg*phii,
4627 ! & rad2deg*difi,0.25d0*ftors*difi**4,gloc(itori-3,icg)
4629 ! write (iout,*) 'edihcnstr',edihcnstr
4632 c----------------------------------------------------------------------------
4633 subroutine etor_d(etors_d,fact2)
4634 C 6/23/01 Compute double torsional energy
4635 implicit real*8 (a-h,o-z)
4636 include 'DIMENSIONS'
4637 include 'sizesclu.dat'
4638 include 'COMMON.VAR'
4639 include 'COMMON.GEO'
4640 include 'COMMON.LOCAL'
4641 include 'COMMON.TORSION'
4642 include 'COMMON.INTERACT'
4643 include 'COMMON.DERIV'
4644 include 'COMMON.CHAIN'
4645 include 'COMMON.NAMES'
4646 include 'COMMON.IOUNITS'
4647 include 'COMMON.FFIELD'
4648 include 'COMMON.TORCNSTR'
4650 C Set lprn=.true. for debugging
4654 do i=iphi_start,iphi_end-1
4656 if ((itype(i-2).eq.ntyp1).or.itype(i-3).eq.ntyp1.or.
4657 & (itype(i-1).eq.ntyp1).or.(itype(i).eq.ntyp1).or.
4658 & (itype(i+1).eq.ntyp1)) cycle
4659 if (itel(i-2).eq.0 .or. itel(i-1).eq.0 .or. itel(i).eq.0)
4661 itori=itortyp(itype(i-2))
4662 itori1=itortyp(itype(i-1))
4663 itori2=itortyp(itype(i))
4669 if (iabs(itype(i+1)).eq.20) iblock=2
4670 C Regular cosine and sine terms
4671 do j=1,ntermd_1(itori,itori1,itori2,iblock)
4672 v1cij=v1c(1,j,itori,itori1,itori2,iblock)
4673 v1sij=v1s(1,j,itori,itori1,itori2,iblock)
4674 v2cij=v1c(2,j,itori,itori1,itori2,iblock)
4675 v2sij=v1s(2,j,itori,itori1,itori2,iblock)
4676 cosphi1=dcos(j*phii)
4677 sinphi1=dsin(j*phii)
4678 cosphi2=dcos(j*phii1)
4679 sinphi2=dsin(j*phii1)
4680 etors_d=etors_d+v1cij*cosphi1+v1sij*sinphi1+
4681 & v2cij*cosphi2+v2sij*sinphi2
4682 gloci1=gloci1+j*(v1sij*cosphi1-v1cij*sinphi1)
4683 gloci2=gloci2+j*(v2sij*cosphi2-v2cij*sinphi2)
4685 do k=2,ntermd_2(itori,itori1,itori2,iblock)
4687 v1cdij = v2c(k,l,itori,itori1,itori2,iblock)
4688 v2cdij = v2c(l,k,itori,itori1,itori2,iblock)
4689 v1sdij = v2s(k,l,itori,itori1,itori2,iblock)
4690 v2sdij = v2s(l,k,itori,itori1,itori2,iblock)
4691 cosphi1p2=dcos(l*phii+(k-l)*phii1)
4692 cosphi1m2=dcos(l*phii-(k-l)*phii1)
4693 sinphi1p2=dsin(l*phii+(k-l)*phii1)
4694 sinphi1m2=dsin(l*phii-(k-l)*phii1)
4695 etors_d=etors_d+v1cdij*cosphi1p2+v2cdij*cosphi1m2+
4696 & v1sdij*sinphi1p2+v2sdij*sinphi1m2
4697 gloci1=gloci1+l*(v1sdij*cosphi1p2+v2sdij*cosphi1m2
4698 & -v1cdij*sinphi1p2-v2cdij*sinphi1m2)
4699 gloci2=gloci2+(k-l)*(v1sdij*cosphi1p2-v2sdij*cosphi1m2
4700 & -v1cdij*sinphi1p2+v2cdij*sinphi1m2)
4703 gloc(i-3,icg)=gloc(i-3,icg)+wtor_d*fact2*gloci1
4704 gloc(i-2,icg)=gloc(i-2,icg)+wtor_d*fact2*gloci2
4710 c------------------------------------------------------------------------------
4711 subroutine eback_sc_corr(esccor)
4712 c 7/21/2007 Correlations between the backbone-local and side-chain-local
4713 c conformational states; temporarily implemented as differences
4714 c between UNRES torsional potentials (dependent on three types of
4715 c residues) and the torsional potentials dependent on all 20 types
4716 c of residues computed from AM1 energy surfaces of terminally-blocked
4717 c amino-acid residues.
4718 implicit real*8 (a-h,o-z)
4719 include 'DIMENSIONS'
4720 include 'sizesclu.dat'
4721 include 'COMMON.VAR'
4722 include 'COMMON.GEO'
4723 include 'COMMON.LOCAL'
4724 include 'COMMON.TORSION'
4725 include 'COMMON.SCCOR'
4726 include 'COMMON.INTERACT'
4727 include 'COMMON.DERIV'
4728 include 'COMMON.CHAIN'
4729 include 'COMMON.NAMES'
4730 include 'COMMON.IOUNITS'
4731 include 'COMMON.FFIELD'
4732 include 'COMMON.CONTROL'
4734 C Set lprn=.true. for debugging
4737 c write (iout,*) "EBACK_SC_COR",iphi_start,iphi_end,nterm_sccor
4739 do i=itau_start,itau_end
4740 if (itype(i-2).eq.ntyp1 .or. itype(i-1).eq.ntyp1) cycle
4742 isccori=isccortyp(itype(i-2))
4743 isccori1=isccortyp(itype(i-1))
4745 do intertyp=1,3 !intertyp
4746 cc Added 09 May 2012 (Adasko)
4747 cc Intertyp means interaction type of backbone mainchain correlation:
4748 c 1 = SC...Ca...Ca...Ca
4749 c 2 = Ca...Ca...Ca...SC
4750 c 3 = SC...Ca...Ca...SCi
4752 if (((intertyp.eq.3).and.((itype(i-2).eq.10).or.
4753 & (itype(i-1).eq.10).or.(itype(i-2).eq.ntyp1).or.
4754 & (itype(i-1).eq.ntyp1)))
4755 & .or. ((intertyp.eq.1).and.((itype(i-2).eq.10)
4756 & .or.(itype(i-2).eq.ntyp1).or.(itype(i-1).eq.ntyp1)
4757 & .or.(itype(i).eq.ntyp1)))
4758 & .or.((intertyp.eq.2).and.((itype(i-1).eq.10).or.
4759 & (itype(i-1).eq.ntyp1).or.(itype(i-2).eq.ntyp1).or.
4760 & (itype(i-3).eq.ntyp1)))) cycle
4761 if ((intertyp.eq.2).and.(i.eq.4).and.(itype(1).eq.ntyp1)) cycle
4762 if ((intertyp.eq.1).and.(i.eq.nres).and.(itype(nres).eq.ntyp1))
4764 do j=1,nterm_sccor(isccori,isccori1)
4765 v1ij=v1sccor(j,intertyp,isccori,isccori1)
4766 v2ij=v2sccor(j,intertyp,isccori,isccori1)
4767 cosphi=dcos(j*tauangle(intertyp,i))
4768 sinphi=dsin(j*tauangle(intertyp,i))
4769 esccor=esccor+v1ij*cosphi+v2ij*sinphi
4770 c gloci=gloci+j*(v2ij*cosphi-v1ij*sinphi)
4772 c write (iout,*) "EBACK_SC_COR",i,esccor,intertyp
4773 c gloc_sc(intertyp,i-3)=gloc_sc(intertyp,i-3)+wsccor*gloci
4775 & write (iout,'(2(a3,2x,i3,2x),2i3,6f8.3/26x,6f8.3/)')
4776 & restyp(itype(i-2)),i-2,restyp(itype(i-1)),i-1,itori,itori1,
4777 & (v1sccor(j,1,itori,itori1),j=1,6),
4778 & (v2sccor(j,1,itori,itori1),j=1,6)
4779 gsccor_loc(i-3)=gloci
4784 c------------------------------------------------------------------------------
4785 subroutine multibody(ecorr)
4786 C This subroutine calculates multi-body contributions to energy following
4787 C the idea of Skolnick et al. If side chains I and J make a contact and
4788 C at the same time side chains I+1 and J+1 make a contact, an extra
4789 C contribution equal to sqrt(eps(i,j)*eps(i+1,j+1)) is added.
4790 implicit real*8 (a-h,o-z)
4791 include 'DIMENSIONS'
4792 include 'COMMON.IOUNITS'
4793 include 'COMMON.DERIV'
4794 include 'COMMON.INTERACT'
4795 include 'COMMON.CONTACTS'
4796 double precision gx(3),gx1(3)
4799 C Set lprn=.true. for debugging
4803 write (iout,'(a)') 'Contact function values:'
4805 write (iout,'(i2,20(1x,i2,f10.5))')
4806 & i,(jcont(j,i),facont(j,i),j=1,num_cont(i))
4821 num_conti=num_cont(i)
4822 num_conti1=num_cont(i1)
4827 if (j1.eq.j+ishift .or. j1.eq.j-ishift) then
4828 cd write(iout,*)'i=',i,' j=',j,' i1=',i1,' j1=',j1,
4829 cd & ' ishift=',ishift
4830 C Contacts I--J and I+ISHIFT--J+-ISHIFT1 occur simultaneously.
4831 C The system gains extra energy.
4832 ecorr=ecorr+esccorr(i,j,i1,j1,jj,kk)
4833 endif ! j1==j+-ishift
4842 c------------------------------------------------------------------------------
4843 double precision function esccorr(i,j,k,l,jj,kk)
4844 implicit real*8 (a-h,o-z)
4845 include 'DIMENSIONS'
4846 include 'COMMON.IOUNITS'
4847 include 'COMMON.DERIV'
4848 include 'COMMON.INTERACT'
4849 include 'COMMON.CONTACTS'
4850 double precision gx(3),gx1(3)
4855 cd write (iout,'(4i5,3f10.5)') i,j,k,l,eij,ekl,-eij*ekl
4856 C Calculate the multi-body contribution to energy.
4857 C Calculate multi-body contributions to the gradient.
4858 cd write (iout,'(2(2i3,3f10.5))')i,j,(gacont(m,jj,i),m=1,3),
4859 cd & k,l,(gacont(m,kk,k),m=1,3)
4861 gx(m) =ekl*gacont(m,jj,i)
4862 gx1(m)=eij*gacont(m,kk,k)
4863 gradxorr(m,i)=gradxorr(m,i)-gx(m)
4864 gradxorr(m,j)=gradxorr(m,j)+gx(m)
4865 gradxorr(m,k)=gradxorr(m,k)-gx1(m)
4866 gradxorr(m,l)=gradxorr(m,l)+gx1(m)
4870 gradcorr(ll,m)=gradcorr(ll,m)+gx(ll)
4875 gradcorr(ll,m)=gradcorr(ll,m)+gx1(ll)
4881 c------------------------------------------------------------------------------
4883 subroutine pack_buffer(dimen1,dimen2,atom,indx,buffer)
4884 implicit real*8 (a-h,o-z)
4885 include 'DIMENSIONS'
4886 integer dimen1,dimen2,atom,indx
4887 double precision buffer(dimen1,dimen2)
4888 double precision zapas
4889 common /contacts_hb/ zapas(3,20,maxres,7),
4890 & facont_hb(20,maxres),ees0p(20,maxres),ees0m(20,maxres),
4891 & num_cont_hb(maxres),jcont_hb(20,maxres)
4892 num_kont=num_cont_hb(atom)
4896 buffer(i,indx+(k-1)*3+j)=zapas(j,i,atom,k)
4899 buffer(i,indx+22)=facont_hb(i,atom)
4900 buffer(i,indx+23)=ees0p(i,atom)
4901 buffer(i,indx+24)=ees0m(i,atom)
4902 buffer(i,indx+25)=dfloat(jcont_hb(i,atom))
4904 buffer(1,indx+26)=dfloat(num_kont)
4907 c------------------------------------------------------------------------------
4908 subroutine unpack_buffer(dimen1,dimen2,atom,indx,buffer)
4909 implicit real*8 (a-h,o-z)
4910 include 'DIMENSIONS'
4911 integer dimen1,dimen2,atom,indx
4912 double precision buffer(dimen1,dimen2)
4913 double precision zapas
4914 common /contacts_hb/ zapas(3,ntyp,maxres,7),
4915 & facont_hb(ntyp,maxres),ees0p(ntyp,maxres),ees0m(ntyp,maxres),
4916 & num_cont_hb(maxres),jcont_hb(ntyp,maxres)
4917 num_kont=buffer(1,indx+26)
4918 num_kont_old=num_cont_hb(atom)
4919 num_cont_hb(atom)=num_kont+num_kont_old
4924 zapas(j,ii,atom,k)=buffer(i,indx+(k-1)*3+j)
4927 facont_hb(ii,atom)=buffer(i,indx+22)
4928 ees0p(ii,atom)=buffer(i,indx+23)
4929 ees0m(ii,atom)=buffer(i,indx+24)
4930 jcont_hb(ii,atom)=buffer(i,indx+25)
4934 c------------------------------------------------------------------------------
4936 subroutine multibody_hb(ecorr,ecorr5,ecorr6,n_corr,n_corr1)
4937 C This subroutine calculates multi-body contributions to hydrogen-bonding
4938 implicit real*8 (a-h,o-z)
4939 include 'DIMENSIONS'
4940 include 'sizesclu.dat'
4941 include 'COMMON.IOUNITS'
4943 include 'COMMON.INFO'
4945 include 'COMMON.FFIELD'
4946 include 'COMMON.DERIV'
4947 include 'COMMON.INTERACT'
4948 include 'COMMON.CONTACTS'
4950 parameter (max_cont=maxconts)
4951 parameter (max_dim=2*(8*3+2))
4952 parameter (msglen1=max_cont*max_dim*4)
4953 parameter (msglen2=2*msglen1)
4954 integer source,CorrelType,CorrelID,Error
4955 double precision buffer(max_cont,max_dim)
4957 double precision gx(3),gx1(3)
4960 C Set lprn=.true. for debugging
4965 if (fgProcs.le.1) goto 30
4967 write (iout,'(a)') 'Contact function values:'
4969 write (iout,'(2i3,50(1x,i2,f5.2))')
4970 & i,num_cont_hb(i),(jcont_hb(j,i),facont_hb(j,i),
4971 & j=1,num_cont_hb(i))
4974 C Caution! Following code assumes that electrostatic interactions concerning
4975 C a given atom are split among at most two processors!
4985 cd write (iout,*) 'MyRank',MyRank,' mm',mm
4988 cd write (iout,*) 'Sending: MyRank',MyRank,' mm',mm,' ldone',ldone
4989 if (MyRank.gt.0) then
4990 C Send correlation contributions to the preceding processor
4992 nn=num_cont_hb(iatel_s)
4993 call pack_buffer(max_cont,max_dim,iatel_s,0,buffer)
4994 cd write (iout,*) 'The BUFFER array:'
4996 cd write (iout,'(i2,9(3f8.3,2x))') i,(buffer(i,j),j=1,26)
4998 if (ielstart(iatel_s).gt.iatel_s+ispp) then
5000 call pack_buffer(max_cont,max_dim,iatel_s+1,26,buffer)
5001 C Clear the contacts of the atom passed to the neighboring processor
5002 nn=num_cont_hb(iatel_s+1)
5004 cd write (iout,'(i2,9(3f8.3,2x))') i,(buffer(i,j+26),j=1,26)
5006 num_cont_hb(iatel_s)=0
5008 cd write (iout,*) 'Processor ',MyID,MyRank,
5009 cd & ' is sending correlation contribution to processor',MyID-1,
5010 cd & ' msglen=',msglen
5011 cd write (*,*) 'Processor ',MyID,MyRank,
5012 cd & ' is sending correlation contribution to processor',MyID-1,
5013 cd & ' msglen=',msglen,' CorrelType=',CorrelType
5014 call mp_bsend(buffer,msglen,MyID-1,CorrelType,CorrelID)
5015 cd write (iout,*) 'Processor ',MyID,
5016 cd & ' has sent correlation contribution to processor',MyID-1,
5017 cd & ' msglen=',msglen,' CorrelID=',CorrelID
5018 cd write (*,*) 'Processor ',MyID,
5019 cd & ' has sent correlation contribution to processor',MyID-1,
5020 cd & ' msglen=',msglen,' CorrelID=',CorrelID
5022 endif ! (MyRank.gt.0)
5026 cd write (iout,*) 'Receiving: MyRank',MyRank,' mm',mm,' ldone',ldone
5027 if (MyRank.lt.fgProcs-1) then
5028 C Receive correlation contributions from the next processor
5030 if (ielend(iatel_e).lt.nct-1) msglen=msglen2
5031 cd write (iout,*) 'Processor',MyID,
5032 cd & ' is receiving correlation contribution from processor',MyID+1,
5033 cd & ' msglen=',msglen,' CorrelType=',CorrelType
5034 cd write (*,*) 'Processor',MyID,
5035 cd & ' is receiving correlation contribution from processor',MyID+1,
5036 cd & ' msglen=',msglen,' CorrelType=',CorrelType
5038 do while (nbytes.le.0)
5039 call mp_probe(MyID+1,CorrelType,nbytes)
5041 cd print *,'Processor',MyID,' msglen',msglen,' nbytes',nbytes
5042 call mp_brecv(buffer,msglen,MyID+1,CorrelType,nbytes)
5043 cd write (iout,*) 'Processor',MyID,
5044 cd & ' has received correlation contribution from processor',MyID+1,
5045 cd & ' msglen=',msglen,' nbytes=',nbytes
5046 cd write (iout,*) 'The received BUFFER array:'
5048 cd write (iout,'(i2,9(3f8.3,2x))') i,(buffer(i,j),j=1,52)
5050 if (msglen.eq.msglen1) then
5051 call unpack_buffer(max_cont,max_dim,iatel_e+1,0,buffer)
5052 else if (msglen.eq.msglen2) then
5053 call unpack_buffer(max_cont,max_dim,iatel_e,0,buffer)
5054 call unpack_buffer(max_cont,max_dim,iatel_e+1,26,buffer)
5057 & 'ERROR!!!! message length changed while processing correlations.'
5059 & 'ERROR!!!! message length changed while processing correlations.'
5060 call mp_stopall(Error)
5061 endif ! msglen.eq.msglen1
5062 endif ! MyRank.lt.fgProcs-1
5069 write (iout,'(a)') 'Contact function values:'
5071 write (iout,'(2i3,50(1x,i2,f5.2))')
5072 & i,num_cont_hb(i),(jcont_hb(j,i),facont_hb(j,i),
5073 & j=1,num_cont_hb(i))
5077 C Remove the loop below after debugging !!!
5084 C Calculate the local-electrostatic correlation terms
5085 do i=iatel_s,iatel_e+1
5087 num_conti=num_cont_hb(i)
5088 num_conti1=num_cont_hb(i+1)
5093 c write (iout,*) 'i=',i,' j=',j,' i1=',i1,' j1=',j1,
5094 c & ' jj=',jj,' kk=',kk
5095 if (j1.eq.j+1 .or. j1.eq.j-1) then
5096 C Contacts I-J and (I+1)-(J+1) or (I+1)-(J-1) occur simultaneously.
5097 C The system gains extra energy.
5098 ecorr=ecorr+ehbcorr(i,j,i+1,j1,jj,kk,0.72D0,0.32D0)
5100 else if (j1.eq.j) then
5101 C Contacts I-J and I-(J+1) occur simultaneously.
5102 C The system loses extra energy.
5103 c ecorr=ecorr+ehbcorr(i,j,i+1,j,jj,kk,0.60D0,-0.40D0)
5108 c write (iout,*) 'i=',i,' j=',j,' i1=',i1,' j1=',j1,
5109 c & ' jj=',jj,' kk=',kk
5111 C Contacts I-J and (I+1)-J occur simultaneously.
5112 C The system loses extra energy.
5113 c ecorr=ecorr+ehbcorr(i,j,i,j+1,jj,kk,0.60D0,-0.40D0)
5120 c------------------------------------------------------------------------------
5121 subroutine multibody_eello(ecorr,ecorr5,ecorr6,eturn6,n_corr,
5123 C This subroutine calculates multi-body contributions to hydrogen-bonding
5124 implicit real*8 (a-h,o-z)
5125 include 'DIMENSIONS'
5126 include 'sizesclu.dat'
5127 include 'COMMON.IOUNITS'
5129 include 'COMMON.INFO'
5131 include 'COMMON.FFIELD'
5132 include 'COMMON.DERIV'
5133 include 'COMMON.INTERACT'
5134 include 'COMMON.CONTACTS'
5136 parameter (max_cont=maxconts)
5137 parameter (max_dim=2*(8*3+2))
5138 parameter (msglen1=max_cont*max_dim*4)
5139 parameter (msglen2=2*msglen1)
5140 integer source,CorrelType,CorrelID,Error
5141 double precision buffer(max_cont,max_dim)
5143 double precision gx(3),gx1(3)
5146 C Set lprn=.true. for debugging
5152 if (fgProcs.le.1) goto 30
5154 write (iout,'(a)') 'Contact function values:'
5156 write (iout,'(2i3,50(1x,i2,f5.2))')
5157 & i,num_cont_hb(i),(jcont_hb(j,i),facont_hb(j,i),
5158 & j=1,num_cont_hb(i))
5161 C Caution! Following code assumes that electrostatic interactions concerning
5162 C a given atom are split among at most two processors!
5172 cd write (iout,*) 'MyRank',MyRank,' mm',mm
5175 cd write (iout,*) 'Sending: MyRank',MyRank,' mm',mm,' ldone',ldone
5176 if (MyRank.gt.0) then
5177 C Send correlation contributions to the preceding processor
5179 nn=num_cont_hb(iatel_s)
5180 call pack_buffer(max_cont,max_dim,iatel_s,0,buffer)
5181 cd write (iout,*) 'The BUFFER array:'
5183 cd write (iout,'(i2,9(3f8.3,2x))') i,(buffer(i,j),j=1,26)
5185 if (ielstart(iatel_s).gt.iatel_s+ispp) then
5187 call pack_buffer(max_cont,max_dim,iatel_s+1,26,buffer)
5188 C Clear the contacts of the atom passed to the neighboring processor
5189 nn=num_cont_hb(iatel_s+1)
5191 cd write (iout,'(i2,9(3f8.3,2x))') i,(buffer(i,j+26),j=1,26)
5193 num_cont_hb(iatel_s)=0
5195 cd write (iout,*) 'Processor ',MyID,MyRank,
5196 cd & ' is sending correlation contribution to processor',MyID-1,
5197 cd & ' msglen=',msglen
5198 cd write (*,*) 'Processor ',MyID,MyRank,
5199 cd & ' is sending correlation contribution to processor',MyID-1,
5200 cd & ' msglen=',msglen,' CorrelType=',CorrelType
5201 call mp_bsend(buffer,msglen,MyID-1,CorrelType,CorrelID)
5202 cd write (iout,*) 'Processor ',MyID,
5203 cd & ' has sent correlation contribution to processor',MyID-1,
5204 cd & ' msglen=',msglen,' CorrelID=',CorrelID
5205 cd write (*,*) 'Processor ',MyID,
5206 cd & ' has sent correlation contribution to processor',MyID-1,
5207 cd & ' msglen=',msglen,' CorrelID=',CorrelID
5209 endif ! (MyRank.gt.0)
5213 cd write (iout,*) 'Receiving: MyRank',MyRank,' mm',mm,' ldone',ldone
5214 if (MyRank.lt.fgProcs-1) then
5215 C Receive correlation contributions from the next processor
5217 if (ielend(iatel_e).lt.nct-1) msglen=msglen2
5218 cd write (iout,*) 'Processor',MyID,
5219 cd & ' is receiving correlation contribution from processor',MyID+1,
5220 cd & ' msglen=',msglen,' CorrelType=',CorrelType
5221 cd write (*,*) 'Processor',MyID,
5222 cd & ' is receiving correlation contribution from processor',MyID+1,
5223 cd & ' msglen=',msglen,' CorrelType=',CorrelType
5225 do while (nbytes.le.0)
5226 call mp_probe(MyID+1,CorrelType,nbytes)
5228 cd print *,'Processor',MyID,' msglen',msglen,' nbytes',nbytes
5229 call mp_brecv(buffer,msglen,MyID+1,CorrelType,nbytes)
5230 cd write (iout,*) 'Processor',MyID,
5231 cd & ' has received correlation contribution from processor',MyID+1,
5232 cd & ' msglen=',msglen,' nbytes=',nbytes
5233 cd write (iout,*) 'The received BUFFER array:'
5235 cd write (iout,'(i2,9(3f8.3,2x))') i,(buffer(i,j),j=1,52)
5237 if (msglen.eq.msglen1) then
5238 call unpack_buffer(max_cont,max_dim,iatel_e+1,0,buffer)
5239 else if (msglen.eq.msglen2) then
5240 call unpack_buffer(max_cont,max_dim,iatel_e,0,buffer)
5241 call unpack_buffer(max_cont,max_dim,iatel_e+1,26,buffer)
5244 & 'ERROR!!!! message length changed while processing correlations.'
5246 & 'ERROR!!!! message length changed while processing correlations.'
5247 call mp_stopall(Error)
5248 endif ! msglen.eq.msglen1
5249 endif ! MyRank.lt.fgProcs-1
5256 write (iout,'(a)') 'Contact function values:'
5258 write (iout,'(2i3,50(1x,i2,f5.2))')
5259 & i,num_cont_hb(i),(jcont_hb(j,i),facont_hb(j,i),
5260 & j=1,num_cont_hb(i))
5266 C Remove the loop below after debugging !!!
5273 C Calculate the dipole-dipole interaction energies
5274 if (wcorr6.gt.0.0d0 .or. wturn6.gt.0.0d0) then
5275 do i=iatel_s,iatel_e+1
5276 num_conti=num_cont_hb(i)
5283 C Calculate the local-electrostatic correlation terms
5284 do i=iatel_s,iatel_e+1
5286 num_conti=num_cont_hb(i)
5287 num_conti1=num_cont_hb(i+1)
5292 c write (*,*) 'i=',i,' j=',j,' i1=',i1,' j1=',j1,
5293 c & ' jj=',jj,' kk=',kk
5294 if (j1.eq.j+1 .or. j1.eq.j-1) then
5295 C Contacts I-J and (I+1)-(J+1) or (I+1)-(J-1) occur simultaneously.
5296 C The system gains extra energy.
5298 sqd1=dsqrt(d_cont(jj,i))
5299 sqd2=dsqrt(d_cont(kk,i1))
5300 sred_geom = sqd1*sqd2
5301 IF (sred_geom.lt.cutoff_corr) THEN
5302 call gcont(sred_geom,r0_corr,1.0D0,delt_corr,
5304 c write (*,*) 'i=',i,' j=',j,' i1=',i1,' j1=',j1,
5305 c & ' jj=',jj,' kk=',kk
5306 fac_prim1=0.5d0*sqd2/sqd1*fprimcont
5307 fac_prim2=0.5d0*sqd1/sqd2*fprimcont
5309 g_contij(l,1)=fac_prim1*grij_hb_cont(l,jj,i)
5310 g_contij(l,2)=fac_prim2*grij_hb_cont(l,kk,i1)
5313 cd write (iout,*) 'sred_geom=',sred_geom,
5314 cd & ' ekont=',ekont,' fprim=',fprimcont
5315 call calc_eello(i,j,i+1,j1,jj,kk)
5316 if (wcorr4.gt.0.0d0)
5317 & ecorr=ecorr+eello4(i,j,i+1,j1,jj,kk)
5318 if (wcorr5.gt.0.0d0)
5319 & ecorr5=ecorr5+eello5(i,j,i+1,j1,jj,kk)
5320 c print *,"wcorr5",ecorr5
5321 cd write(2,*)'wcorr6',wcorr6,' wturn6',wturn6
5322 cd write(2,*)'ijkl',i,j,i+1,j1
5323 if (wcorr6.gt.0.0d0 .and. (j.ne.i+4 .or. j1.ne.i+3
5324 & .or. wturn6.eq.0.0d0))then
5325 cd write (iout,*) '******ecorr6: i,j,i+1,j1',i,j,i+1,j1
5326 ecorr6=ecorr6+eello6(i,j,i+1,j1,jj,kk)
5327 cd write (iout,*) 'ecorr',ecorr,' ecorr5=',ecorr5,
5328 cd & 'ecorr6=',ecorr6
5329 cd write (iout,'(4e15.5)') sred_geom,
5330 cd & dabs(eello4(i,j,i+1,j1,jj,kk)),
5331 cd & dabs(eello5(i,j,i+1,j1,jj,kk)),
5332 cd & dabs(eello6(i,j,i+1,j1,jj,kk))
5333 else if (wturn6.gt.0.0d0
5334 & .and. (j.eq.i+4 .and. j1.eq.i+3)) then
5335 cd write (iout,*) '******eturn6: i,j,i+1,j1',i,j,i+1,j1
5336 eturn6=eturn6+eello_turn6(i,jj,kk)
5337 cd write (2,*) 'multibody_eello:eturn6',eturn6
5341 else if (j1.eq.j) then
5342 C Contacts I-J and I-(J+1) occur simultaneously.
5343 C The system loses extra energy.
5344 c ecorr=ecorr+ehbcorr(i,j,i+1,j,jj,kk,0.60D0,-0.40D0)
5349 c write (iout,*) 'i=',i,' j=',j,' i1=',i1,' j1=',j1,
5350 c & ' jj=',jj,' kk=',kk
5352 C Contacts I-J and (I+1)-J occur simultaneously.
5353 C The system loses extra energy.
5354 c ecorr=ecorr+ehbcorr(i,j,i,j+1,jj,kk,0.60D0,-0.40D0)
5361 c------------------------------------------------------------------------------
5362 double precision function ehbcorr(i,j,k,l,jj,kk,coeffp,coeffm)
5363 implicit real*8 (a-h,o-z)
5364 include 'DIMENSIONS'
5365 include 'COMMON.IOUNITS'
5366 include 'COMMON.DERIV'
5367 include 'COMMON.INTERACT'
5368 include 'COMMON.CONTACTS'
5369 double precision gx(3),gx1(3)
5379 ees=-(coeffp*ees0pij*ees0pkl+coeffm*ees0mij*ees0mkl)
5380 cd ees=-(coeffp*ees0pkl+coeffm*ees0mkl)
5381 C Following 4 lines for diagnostics.
5386 c write (iout,*)'Contacts have occurred for peptide groups',i,j,
5388 c write (iout,*)'Contacts have occurred for peptide groups',
5389 c & i,j,' fcont:',eij,' eij',' eesij',ees0pij,ees0mij,' and ',k,l
5390 c & ,' fcont ',ekl,' eeskl',ees0pkl,ees0mkl,' ees=',ees
5391 C Calculate the multi-body contribution to energy.
5392 ecorr=ecorr+ekont*ees
5394 C Calculate multi-body contributions to the gradient.
5396 ghalf=0.5D0*ees*ekl*gacont_hbr(ll,jj,i)
5397 gradcorr(ll,i)=gradcorr(ll,i)+ghalf
5398 & -ekont*(coeffp*ees0pkl*gacontp_hb1(ll,jj,i)+
5399 & coeffm*ees0mkl*gacontm_hb1(ll,jj,i))
5400 gradcorr(ll,j)=gradcorr(ll,j)+ghalf
5401 & -ekont*(coeffp*ees0pkl*gacontp_hb2(ll,jj,i)+
5402 & coeffm*ees0mkl*gacontm_hb2(ll,jj,i))
5403 ghalf=0.5D0*ees*eij*gacont_hbr(ll,kk,k)
5404 gradcorr(ll,k)=gradcorr(ll,k)+ghalf
5405 & -ekont*(coeffp*ees0pij*gacontp_hb1(ll,kk,k)+
5406 & coeffm*ees0mij*gacontm_hb1(ll,kk,k))
5407 gradcorr(ll,l)=gradcorr(ll,l)+ghalf
5408 & -ekont*(coeffp*ees0pij*gacontp_hb2(ll,kk,k)+
5409 & coeffm*ees0mij*gacontm_hb2(ll,kk,k))
5413 gradcorr(ll,m)=gradcorr(ll,m)+
5414 & ees*ekl*gacont_hbr(ll,jj,i)-
5415 & ekont*(coeffp*ees0pkl*gacontp_hb3(ll,jj,i)+
5416 & coeffm*ees0mkl*gacontm_hb3(ll,jj,i))
5421 gradcorr(ll,m)=gradcorr(ll,m)+
5422 & ees*eij*gacont_hbr(ll,kk,k)-
5423 & ekont*(coeffp*ees0pij*gacontp_hb3(ll,kk,k)+
5424 & coeffm*ees0mij*gacontm_hb3(ll,kk,k))
5431 C---------------------------------------------------------------------------
5432 subroutine dipole(i,j,jj)
5433 implicit real*8 (a-h,o-z)
5434 include 'DIMENSIONS'
5435 include 'sizesclu.dat'
5436 include 'COMMON.IOUNITS'
5437 include 'COMMON.CHAIN'
5438 include 'COMMON.FFIELD'
5439 include 'COMMON.DERIV'
5440 include 'COMMON.INTERACT'
5441 include 'COMMON.CONTACTS'
5442 include 'COMMON.TORSION'
5443 include 'COMMON.VAR'
5444 include 'COMMON.GEO'
5445 dimension dipi(2,2),dipj(2,2),dipderi(2),dipderj(2),auxvec(2),
5447 iti1 = itortyp(itype(i+1))
5448 if (j.lt.nres-1) then
5449 itj1 = itortyp(itype(j+1))
5454 dipi(iii,1)=Ub2(iii,i)
5455 dipderi(iii)=Ub2der(iii,i)
5456 dipi(iii,2)=b1(iii,iti1)
5457 dipj(iii,1)=Ub2(iii,j)
5458 dipderj(iii)=Ub2der(iii,j)
5459 dipj(iii,2)=b1(iii,itj1)
5463 call matvec2(a_chuj(1,1,jj,i),dipj(1,iii),auxvec(1))
5466 dip(kkk,jj,i)=scalar2(dipi(1,jjj),auxvec(1))
5469 if (.not.calc_grad) return
5474 call matvec2(a_chuj_der(1,1,lll,kkk,jj,i),dipj(1,iii),
5478 dipderx(lll,kkk,mmm,jj,i)=scalar2(dipi(1,jjj),auxvec(1))
5483 call transpose2(a_chuj(1,1,jj,i),auxmat(1,1))
5484 call matvec2(auxmat(1,1),dipderi(1),auxvec(1))
5486 dipderg(iii,jj,i)=scalar2(auxvec(1),dipj(1,iii))
5488 call matvec2(a_chuj(1,1,jj,i),dipderj(1),auxvec(1))
5490 dipderg(iii+2,jj,i)=scalar2(auxvec(1),dipi(1,iii))
5494 C---------------------------------------------------------------------------
5495 subroutine calc_eello(i,j,k,l,jj,kk)
5497 C This subroutine computes matrices and vectors needed to calculate
5498 C the fourth-, fifth-, and sixth-order local-electrostatic terms.
5500 implicit real*8 (a-h,o-z)
5501 include 'DIMENSIONS'
5502 include 'sizesclu.dat'
5503 include 'COMMON.IOUNITS'
5504 include 'COMMON.CHAIN'
5505 include 'COMMON.DERIV'
5506 include 'COMMON.INTERACT'
5507 include 'COMMON.CONTACTS'
5508 include 'COMMON.TORSION'
5509 include 'COMMON.VAR'
5510 include 'COMMON.GEO'
5511 include 'COMMON.FFIELD'
5512 double precision aa1(2,2),aa2(2,2),aa1t(2,2),aa2t(2,2),
5513 & aa1tder(2,2,3,5),aa2tder(2,2,3,5),auxmat(2,2)
5516 cd write (iout,*) 'calc_eello: i=',i,' j=',j,' k=',k,' l=',l,
5517 cd & ' jj=',jj,' kk=',kk
5518 cd if (i.ne.2 .or. j.ne.4 .or. k.ne.3 .or. l.ne.5) return
5521 aa1(iii,jjj)=a_chuj(iii,jjj,jj,i)
5522 aa2(iii,jjj)=a_chuj(iii,jjj,kk,k)
5525 call transpose2(aa1(1,1),aa1t(1,1))
5526 call transpose2(aa2(1,1),aa2t(1,1))
5529 call transpose2(a_chuj_der(1,1,lll,kkk,jj,i),
5530 & aa1tder(1,1,lll,kkk))
5531 call transpose2(a_chuj_der(1,1,lll,kkk,kk,k),
5532 & aa2tder(1,1,lll,kkk))
5536 C parallel orientation of the two CA-CA-CA frames.
5538 iti=itortyp(itype(i))
5542 itk1=itortyp(itype(k+1))
5543 itj=itortyp(itype(j))
5544 if (l.lt.nres-1) then
5545 itl1=itortyp(itype(l+1))
5549 C A1 kernel(j+1) A2T
5551 cd write (iout,'(3f10.5,5x,3f10.5)')
5552 cd & (EUg(iii,jjj,k),jjj=1,2),(EUg(iii,jjj,l),jjj=1,2)
5554 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
5555 & aa2tder(1,1,1,1),1,.false.,EUg(1,1,l),EUgder(1,1,l),
5556 & AEA(1,1,1),AEAderg(1,1,1),AEAderx(1,1,1,1,1,1))
5557 C Following matrices are needed only for 6-th order cumulants
5558 IF (wcorr6.gt.0.0d0) THEN
5559 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
5560 & aa2tder(1,1,1,1),1,.false.,EUgC(1,1,l),EUgCder(1,1,l),
5561 & AECA(1,1,1),AECAderg(1,1,1),AECAderx(1,1,1,1,1,1))
5562 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
5563 & aa2tder(1,1,1,1),2,.false.,Ug2DtEUg(1,1,l),
5564 & Ug2DtEUgder(1,1,1,l),ADtEA(1,1,1),ADtEAderg(1,1,1,1),
5565 & ADtEAderx(1,1,1,1,1,1))
5567 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
5568 & aa2tder(1,1,1,1),2,.false.,DtUg2EUg(1,1,l),
5569 & DtUg2EUgder(1,1,1,l),ADtEA1(1,1,1),ADtEA1derg(1,1,1,1),
5570 & ADtEA1derx(1,1,1,1,1,1))
5572 C End 6-th order cumulants
5575 cd write (2,*) 'In calc_eello6'
5577 cd write (2,*) 'iii=',iii
5579 cd write (2,*) 'kkk=',kkk
5581 cd write (2,'(3(2f10.5),5x)')
5582 cd & ((ADtEA1derx(jjj,mmm,lll,kkk,iii,1),mmm=1,2),lll=1,3)
5587 call transpose2(EUgder(1,1,k),auxmat(1,1))
5588 call matmat2(auxmat(1,1),AEA(1,1,1),EAEAderg(1,1,1,1))
5589 call transpose2(EUg(1,1,k),auxmat(1,1))
5590 call matmat2(auxmat(1,1),AEA(1,1,1),EAEA(1,1,1))
5591 call matmat2(auxmat(1,1),AEAderg(1,1,1),EAEAderg(1,1,2,1))
5595 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,1),
5596 & EAEAderx(1,1,lll,kkk,iii,1))
5600 C A1T kernel(i+1) A2
5601 call kernel(aa1t(1,1),aa2(1,1),aa1tder(1,1,1,1),
5602 & a_chuj_der(1,1,1,1,kk,k),1,.false.,EUg(1,1,k),EUgder(1,1,k),
5603 & AEA(1,1,2),AEAderg(1,1,2),AEAderx(1,1,1,1,1,2))
5604 C Following matrices are needed only for 6-th order cumulants
5605 IF (wcorr6.gt.0.0d0) THEN
5606 call kernel(aa1t(1,1),aa2(1,1),aa1tder(1,1,1,1),
5607 & a_chuj_der(1,1,1,1,kk,k),1,.false.,EUgC(1,1,k),EUgCder(1,1,k),
5608 & AECA(1,1,2),AECAderg(1,1,2),AECAderx(1,1,1,1,1,2))
5609 call kernel(aa1t(1,1),aa2(1,1),aa1tder(1,1,1,1),
5610 & a_chuj_der(1,1,1,1,kk,k),2,.false.,Ug2DtEUg(1,1,k),
5611 & Ug2DtEUgder(1,1,1,k),ADtEA(1,1,2),ADtEAderg(1,1,1,2),
5612 & ADtEAderx(1,1,1,1,1,2))
5613 call kernel(aa1t(1,1),aa2(1,1),aa1tder(1,1,1,1),
5614 & a_chuj_der(1,1,1,1,kk,k),2,.false.,DtUg2EUg(1,1,k),
5615 & DtUg2EUgder(1,1,1,k),ADtEA1(1,1,2),ADtEA1derg(1,1,1,2),
5616 & ADtEA1derx(1,1,1,1,1,2))
5618 C End 6-th order cumulants
5619 call transpose2(EUgder(1,1,l),auxmat(1,1))
5620 call matmat2(auxmat(1,1),AEA(1,1,2),EAEAderg(1,1,1,2))
5621 call transpose2(EUg(1,1,l),auxmat(1,1))
5622 call matmat2(auxmat(1,1),AEA(1,1,2),EAEA(1,1,2))
5623 call matmat2(auxmat(1,1),AEAderg(1,1,2),EAEAderg(1,1,2,2))
5627 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,2),
5628 & EAEAderx(1,1,lll,kkk,iii,2))
5633 C Calculate the vectors and their derivatives in virtual-bond dihedral angles.
5634 C They are needed only when the fifth- or the sixth-order cumulants are
5636 IF (wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0) THEN
5637 call transpose2(AEA(1,1,1),auxmat(1,1))
5638 call matvec2(auxmat(1,1),b1(1,iti),AEAb1(1,1,1))
5639 call matvec2(auxmat(1,1),Ub2(1,i),AEAb2(1,1,1))
5640 call matvec2(auxmat(1,1),Ub2der(1,i),AEAb2derg(1,2,1,1))
5641 call transpose2(AEAderg(1,1,1),auxmat(1,1))
5642 call matvec2(auxmat(1,1),b1(1,iti),AEAb1derg(1,1,1))
5643 call matvec2(auxmat(1,1),Ub2(1,i),AEAb2derg(1,1,1,1))
5644 call matvec2(AEA(1,1,1),b1(1,itk1),AEAb1(1,2,1))
5645 call matvec2(AEAderg(1,1,1),b1(1,itk1),AEAb1derg(1,2,1))
5646 call matvec2(AEA(1,1,1),Ub2(1,k+1),AEAb2(1,2,1))
5647 call matvec2(AEAderg(1,1,1),Ub2(1,k+1),AEAb2derg(1,1,2,1))
5648 call matvec2(AEA(1,1,1),Ub2der(1,k+1),AEAb2derg(1,2,2,1))
5649 call transpose2(AEA(1,1,2),auxmat(1,1))
5650 call matvec2(auxmat(1,1),b1(1,itj),AEAb1(1,1,2))
5651 call matvec2(auxmat(1,1),Ub2(1,j),AEAb2(1,1,2))
5652 call matvec2(auxmat(1,1),Ub2der(1,j),AEAb2derg(1,2,1,2))
5653 call transpose2(AEAderg(1,1,2),auxmat(1,1))
5654 call matvec2(auxmat(1,1),b1(1,itj),AEAb1derg(1,1,2))
5655 call matvec2(auxmat(1,1),Ub2(1,j),AEAb2derg(1,1,1,2))
5656 call matvec2(AEA(1,1,2),b1(1,itl1),AEAb1(1,2,2))
5657 call matvec2(AEAderg(1,1,2),b1(1,itl1),AEAb1derg(1,2,2))
5658 call matvec2(AEA(1,1,2),Ub2(1,l+1),AEAb2(1,2,2))
5659 call matvec2(AEAderg(1,1,2),Ub2(1,l+1),AEAb2derg(1,1,2,2))
5660 call matvec2(AEA(1,1,2),Ub2der(1,l+1),AEAb2derg(1,2,2,2))
5661 C Calculate the Cartesian derivatives of the vectors.
5665 call transpose2(AEAderx(1,1,lll,kkk,iii,1),auxmat(1,1))
5666 call matvec2(auxmat(1,1),b1(1,iti),
5667 & AEAb1derx(1,lll,kkk,iii,1,1))
5668 call matvec2(auxmat(1,1),Ub2(1,i),
5669 & AEAb2derx(1,lll,kkk,iii,1,1))
5670 call matvec2(AEAderx(1,1,lll,kkk,iii,1),b1(1,itk1),
5671 & AEAb1derx(1,lll,kkk,iii,2,1))
5672 call matvec2(AEAderx(1,1,lll,kkk,iii,1),Ub2(1,k+1),
5673 & AEAb2derx(1,lll,kkk,iii,2,1))
5674 call transpose2(AEAderx(1,1,lll,kkk,iii,2),auxmat(1,1))
5675 call matvec2(auxmat(1,1),b1(1,itj),
5676 & AEAb1derx(1,lll,kkk,iii,1,2))
5677 call matvec2(auxmat(1,1),Ub2(1,j),
5678 & AEAb2derx(1,lll,kkk,iii,1,2))
5679 call matvec2(AEAderx(1,1,lll,kkk,iii,2),b1(1,itl1),
5680 & AEAb1derx(1,lll,kkk,iii,2,2))
5681 call matvec2(AEAderx(1,1,lll,kkk,iii,2),Ub2(1,l+1),
5682 & AEAb2derx(1,lll,kkk,iii,2,2))
5689 C Antiparallel orientation of the two CA-CA-CA frames.
5691 iti=itortyp(itype(i))
5695 itk1=itortyp(itype(k+1))
5696 itl=itortyp(itype(l))
5697 itj=itortyp(itype(j))
5698 if (j.lt.nres-1) then
5699 itj1=itortyp(itype(j+1))
5703 C A2 kernel(j-1)T A1T
5704 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
5705 & aa2tder(1,1,1,1),1,.true.,EUg(1,1,j),EUgder(1,1,j),
5706 & AEA(1,1,1),AEAderg(1,1,1),AEAderx(1,1,1,1,1,1))
5707 C Following matrices are needed only for 6-th order cumulants
5708 IF (wcorr6.gt.0.0d0 .or. (wturn6.gt.0.0d0 .and.
5709 & j.eq.i+4 .and. l.eq.i+3)) THEN
5710 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
5711 & aa2tder(1,1,1,1),1,.true.,EUgC(1,1,j),EUgCder(1,1,j),
5712 & AECA(1,1,1),AECAderg(1,1,1),AECAderx(1,1,1,1,1,1))
5713 call kernel(aa2(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
5714 & aa2tder(1,1,1,1),2,.true.,Ug2DtEUg(1,1,j),
5715 & Ug2DtEUgder(1,1,1,j),ADtEA(1,1,1),ADtEAderg(1,1,1,1),
5716 & ADtEAderx(1,1,1,1,1,1))
5717 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
5718 & aa2tder(1,1,1,1),2,.true.,DtUg2EUg(1,1,j),
5719 & DtUg2EUgder(1,1,1,j),ADtEA1(1,1,1),ADtEA1derg(1,1,1,1),
5720 & ADtEA1derx(1,1,1,1,1,1))
5722 C End 6-th order cumulants
5723 call transpose2(EUgder(1,1,k),auxmat(1,1))
5724 call matmat2(auxmat(1,1),AEA(1,1,1),EAEAderg(1,1,1,1))
5725 call transpose2(EUg(1,1,k),auxmat(1,1))
5726 call matmat2(auxmat(1,1),AEA(1,1,1),EAEA(1,1,1))
5727 call matmat2(auxmat(1,1),AEAderg(1,1,1),EAEAderg(1,1,2,1))
5731 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,1),
5732 & EAEAderx(1,1,lll,kkk,iii,1))
5736 C A2T kernel(i+1)T A1
5737 call kernel(aa2t(1,1),aa1(1,1),aa2tder(1,1,1,1),
5738 & a_chuj_der(1,1,1,1,jj,i),1,.true.,EUg(1,1,k),EUgder(1,1,k),
5739 & AEA(1,1,2),AEAderg(1,1,2),AEAderx(1,1,1,1,1,2))
5740 C Following matrices are needed only for 6-th order cumulants
5741 IF (wcorr6.gt.0.0d0 .or. (wturn6.gt.0.0d0 .and.
5742 & j.eq.i+4 .and. l.eq.i+3)) THEN
5743 call kernel(aa2t(1,1),aa1(1,1),aa2tder(1,1,1,1),
5744 & a_chuj_der(1,1,1,1,jj,i),1,.true.,EUgC(1,1,k),EUgCder(1,1,k),
5745 & AECA(1,1,2),AECAderg(1,1,2),AECAderx(1,1,1,1,1,2))
5746 call kernel(aa2t(1,1),aa1(1,1),aa2tder(1,1,1,1),
5747 & a_chuj_der(1,1,1,1,jj,i),2,.true.,Ug2DtEUg(1,1,k),
5748 & Ug2DtEUgder(1,1,1,k),ADtEA(1,1,2),ADtEAderg(1,1,1,2),
5749 & ADtEAderx(1,1,1,1,1,2))
5750 call kernel(aa2t(1,1),aa1(1,1),aa2tder(1,1,1,1),
5751 & a_chuj_der(1,1,1,1,jj,i),2,.true.,DtUg2EUg(1,1,k),
5752 & DtUg2EUgder(1,1,1,k),ADtEA1(1,1,2),ADtEA1derg(1,1,1,2),
5753 & ADtEA1derx(1,1,1,1,1,2))
5755 C End 6-th order cumulants
5756 call transpose2(EUgder(1,1,j),auxmat(1,1))
5757 call matmat2(auxmat(1,1),AEA(1,1,1),EAEAderg(1,1,2,2))
5758 call transpose2(EUg(1,1,j),auxmat(1,1))
5759 call matmat2(auxmat(1,1),AEA(1,1,2),EAEA(1,1,2))
5760 call matmat2(auxmat(1,1),AEAderg(1,1,2),EAEAderg(1,1,2,2))
5764 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,2),
5765 & EAEAderx(1,1,lll,kkk,iii,2))
5770 C Calculate the vectors and their derivatives in virtual-bond dihedral angles.
5771 C They are needed only when the fifth- or the sixth-order cumulants are
5773 IF (wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0 .or.
5774 & (wturn6.gt.0.0d0 .and. j.eq.i+4 .and. l.eq.i+3)) THEN
5775 call transpose2(AEA(1,1,1),auxmat(1,1))
5776 call matvec2(auxmat(1,1),b1(1,iti),AEAb1(1,1,1))
5777 call matvec2(auxmat(1,1),Ub2(1,i),AEAb2(1,1,1))
5778 call matvec2(auxmat(1,1),Ub2der(1,i),AEAb2derg(1,2,1,1))
5779 call transpose2(AEAderg(1,1,1),auxmat(1,1))
5780 call matvec2(auxmat(1,1),b1(1,iti),AEAb1derg(1,1,1))
5781 call matvec2(auxmat(1,1),Ub2(1,i),AEAb2derg(1,1,1,1))
5782 call matvec2(AEA(1,1,1),b1(1,itk1),AEAb1(1,2,1))
5783 call matvec2(AEAderg(1,1,1),b1(1,itk1),AEAb1derg(1,2,1))
5784 call matvec2(AEA(1,1,1),Ub2(1,k+1),AEAb2(1,2,1))
5785 call matvec2(AEAderg(1,1,1),Ub2(1,k+1),AEAb2derg(1,1,2,1))
5786 call matvec2(AEA(1,1,1),Ub2der(1,k+1),AEAb2derg(1,2,2,1))
5787 call transpose2(AEA(1,1,2),auxmat(1,1))
5788 call matvec2(auxmat(1,1),b1(1,itj1),AEAb1(1,1,2))
5789 call matvec2(auxmat(1,1),Ub2(1,l),AEAb2(1,1,2))
5790 call matvec2(auxmat(1,1),Ub2der(1,l),AEAb2derg(1,2,1,2))
5791 call transpose2(AEAderg(1,1,2),auxmat(1,1))
5792 call matvec2(auxmat(1,1),b1(1,itl),AEAb1(1,1,2))
5793 call matvec2(auxmat(1,1),Ub2(1,l),AEAb2derg(1,1,1,2))
5794 call matvec2(AEA(1,1,2),b1(1,itj1),AEAb1(1,2,2))
5795 call matvec2(AEAderg(1,1,2),b1(1,itj1),AEAb1derg(1,2,2))
5796 call matvec2(AEA(1,1,2),Ub2(1,j),AEAb2(1,2,2))
5797 call matvec2(AEAderg(1,1,2),Ub2(1,j),AEAb2derg(1,1,2,2))
5798 call matvec2(AEA(1,1,2),Ub2der(1,j),AEAb2derg(1,2,2,2))
5799 C Calculate the Cartesian derivatives of the vectors.
5803 call transpose2(AEAderx(1,1,lll,kkk,iii,1),auxmat(1,1))
5804 call matvec2(auxmat(1,1),b1(1,iti),
5805 & AEAb1derx(1,lll,kkk,iii,1,1))
5806 call matvec2(auxmat(1,1),Ub2(1,i),
5807 & AEAb2derx(1,lll,kkk,iii,1,1))
5808 call matvec2(AEAderx(1,1,lll,kkk,iii,1),b1(1,itk1),
5809 & AEAb1derx(1,lll,kkk,iii,2,1))
5810 call matvec2(AEAderx(1,1,lll,kkk,iii,1),Ub2(1,k+1),
5811 & AEAb2derx(1,lll,kkk,iii,2,1))
5812 call transpose2(AEAderx(1,1,lll,kkk,iii,2),auxmat(1,1))
5813 call matvec2(auxmat(1,1),b1(1,itl),
5814 & AEAb1derx(1,lll,kkk,iii,1,2))
5815 call matvec2(auxmat(1,1),Ub2(1,l),
5816 & AEAb2derx(1,lll,kkk,iii,1,2))
5817 call matvec2(AEAderx(1,1,lll,kkk,iii,2),b1(1,itj1),
5818 & AEAb1derx(1,lll,kkk,iii,2,2))
5819 call matvec2(AEAderx(1,1,lll,kkk,iii,2),Ub2(1,j),
5820 & AEAb2derx(1,lll,kkk,iii,2,2))
5829 C---------------------------------------------------------------------------
5830 subroutine kernel(aa1,aa2t,aa1derx,aa2tderx,nderg,transp,
5831 & KK,KKderg,AKA,AKAderg,AKAderx)
5835 double precision aa1(2,2),aa2t(2,2),aa1derx(2,2,3,5),
5836 & aa2tderx(2,2,3,5),KK(2,2),KKderg(2,2,nderg),AKA(2,2),
5837 & AKAderg(2,2,nderg),AKAderx(2,2,3,5,2)
5842 call prodmat3(aa1(1,1),aa2t(1,1),KK(1,1),transp,AKA(1,1))
5844 call prodmat3(aa1(1,1),aa2t(1,1),KKderg(1,1,iii),transp,
5847 cd if (lprn) write (2,*) 'In kernel'
5849 cd if (lprn) write (2,*) 'kkk=',kkk
5851 call prodmat3(aa1derx(1,1,lll,kkk),aa2t(1,1),
5852 & KK(1,1),transp,AKAderx(1,1,lll,kkk,1))
5854 cd write (2,*) 'lll=',lll
5855 cd write (2,*) 'iii=1'
5857 cd write (2,'(3(2f10.5),5x)')
5858 cd & (AKAderx(jjj,mmm,lll,kkk,1),mmm=1,2)
5861 call prodmat3(aa1(1,1),aa2tderx(1,1,lll,kkk),
5862 & KK(1,1),transp,AKAderx(1,1,lll,kkk,2))
5864 cd write (2,*) 'lll=',lll
5865 cd write (2,*) 'iii=2'
5867 cd write (2,'(3(2f10.5),5x)')
5868 cd & (AKAderx(jjj,mmm,lll,kkk,2),mmm=1,2)
5875 C---------------------------------------------------------------------------
5876 double precision function eello4(i,j,k,l,jj,kk)
5877 implicit real*8 (a-h,o-z)
5878 include 'DIMENSIONS'
5879 include 'sizesclu.dat'
5880 include 'COMMON.IOUNITS'
5881 include 'COMMON.CHAIN'
5882 include 'COMMON.DERIV'
5883 include 'COMMON.INTERACT'
5884 include 'COMMON.CONTACTS'
5885 include 'COMMON.TORSION'
5886 include 'COMMON.VAR'
5887 include 'COMMON.GEO'
5888 double precision pizda(2,2),ggg1(3),ggg2(3)
5889 cd if (i.ne.1 .or. j.ne.5 .or. k.ne.2 .or.l.ne.4) then
5893 cd print *,'eello4:',i,j,k,l,jj,kk
5894 cd write (2,*) 'i',i,' j',j,' k',k,' l',l
5895 cd call checkint4(i,j,k,l,jj,kk,eel4_num)
5896 cold eij=facont_hb(jj,i)
5897 cold ekl=facont_hb(kk,k)
5899 eel4=-EAEA(1,1,1)-EAEA(2,2,1)
5901 cd eel41=-EAEA(1,1,2)-EAEA(2,2,2)
5902 gcorr_loc(k-1)=gcorr_loc(k-1)
5903 & -ekont*(EAEAderg(1,1,1,1)+EAEAderg(2,2,1,1))
5905 gcorr_loc(l-1)=gcorr_loc(l-1)
5906 & -ekont*(EAEAderg(1,1,2,1)+EAEAderg(2,2,2,1))
5908 gcorr_loc(j-1)=gcorr_loc(j-1)
5909 & -ekont*(EAEAderg(1,1,2,1)+EAEAderg(2,2,2,1))
5914 derx(lll,kkk,iii)=-EAEAderx(1,1,lll,kkk,iii,1)
5915 & -EAEAderx(2,2,lll,kkk,iii,1)
5916 cd derx(lll,kkk,iii)=0.0d0
5920 cd gcorr_loc(l-1)=0.0d0
5921 cd gcorr_loc(j-1)=0.0d0
5922 cd gcorr_loc(k-1)=0.0d0
5924 cd write (iout,*)'Contacts have occurred for peptide groups',
5925 cd & i,j,' fcont:',eij,' eij',' and ',k,l,
5926 cd & ' fcont ',ekl,' eel4=',eel4,' eel4_num',16*eel4_num
5927 if (j.lt.nres-1) then
5934 if (l.lt.nres-1) then
5942 cold ghalf=0.5d0*eel4*ekl*gacont_hbr(ll,jj,i)
5943 ggg1(ll)=eel4*g_contij(ll,1)
5944 ggg2(ll)=eel4*g_contij(ll,2)
5945 ghalf=0.5d0*ggg1(ll)
5947 gradcorr(ll,i)=gradcorr(ll,i)+ghalf+ekont*derx(ll,2,1)
5948 gradcorr(ll,i+1)=gradcorr(ll,i+1)+ekont*derx(ll,3,1)
5949 gradcorr(ll,j)=gradcorr(ll,j)+ghalf+ekont*derx(ll,4,1)
5950 gradcorr(ll,j1)=gradcorr(ll,j1)+ekont*derx(ll,5,1)
5951 cold ghalf=0.5d0*eel4*eij*gacont_hbr(ll,kk,k)
5952 ghalf=0.5d0*ggg2(ll)
5954 gradcorr(ll,k)=gradcorr(ll,k)+ghalf+ekont*derx(ll,2,2)
5955 gradcorr(ll,k+1)=gradcorr(ll,k+1)+ekont*derx(ll,3,2)
5956 gradcorr(ll,l)=gradcorr(ll,l)+ghalf+ekont*derx(ll,4,2)
5957 gradcorr(ll,l1)=gradcorr(ll,l1)+ekont*derx(ll,5,2)
5962 cold gradcorr(ll,m)=gradcorr(ll,m)+eel4*ekl*gacont_hbr(ll,jj,i)
5963 gradcorr(ll,m)=gradcorr(ll,m)+ggg1(ll)
5968 cold gradcorr(ll,m)=gradcorr(ll,m)+eel4*eij*gacont_hbr(ll,kk,k)
5969 gradcorr(ll,m)=gradcorr(ll,m)+ggg2(ll)
5975 gradcorr(ll,m)=gradcorr(ll,m)+ekont*derx(ll,1,1)
5980 gradcorr(ll,m)=gradcorr(ll,m)+ekont*derx(ll,1,2)
5984 cd write (2,*) iii,gcorr_loc(iii)
5988 cd write (2,*) 'ekont',ekont
5989 cd write (iout,*) 'eello4',ekont*eel4
5992 C---------------------------------------------------------------------------
5993 double precision function eello5(i,j,k,l,jj,kk)
5994 implicit real*8 (a-h,o-z)
5995 include 'DIMENSIONS'
5996 include 'sizesclu.dat'
5997 include 'COMMON.IOUNITS'
5998 include 'COMMON.CHAIN'
5999 include 'COMMON.DERIV'
6000 include 'COMMON.INTERACT'
6001 include 'COMMON.CONTACTS'
6002 include 'COMMON.TORSION'
6003 include 'COMMON.VAR'
6004 include 'COMMON.GEO'
6005 double precision pizda(2,2),auxmat(2,2),auxmat1(2,2),vv(2)
6006 double precision ggg1(3),ggg2(3)
6007 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
6012 C /l\ / \ \ / \ / \ / C
6013 C / \ / \ \ / \ / \ / C
6014 C j| o |l1 | o | o| o | | o |o C
6015 C \ |/k\| |/ \| / |/ \| |/ \| C
6016 C \i/ \ / \ / / \ / \ C
6018 C (I) (II) (III) (IV) C
6020 C eello5_1 eello5_2 eello5_3 eello5_4 C
6022 C Antiparallel chains C
6025 C /j\ / \ \ / \ / \ / C
6026 C / \ / \ \ / \ / \ / C
6027 C j1| o |l | o | o| o | | o |o C
6028 C \ |/k\| |/ \| / |/ \| |/ \| C
6029 C \i/ \ / \ / / \ / \ C
6031 C (I) (II) (III) (IV) C
6033 C eello5_1 eello5_2 eello5_3 eello5_4 C
6035 C o denotes a local interaction, vertical lines an electrostatic interaction. C
6037 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
6038 cd if (i.ne.2 .or. j.ne.6 .or. k.ne.3 .or. l.ne.5) then
6043 cd & 'EELLO5: Contacts have occurred for peptide groups',i,j,
6045 itk=itortyp(itype(k))
6046 itl=itortyp(itype(l))
6047 itj=itortyp(itype(j))
6052 cd call checkint5(i,j,k,l,jj,kk,eel5_1_num,eel5_2_num,
6053 cd & eel5_3_num,eel5_4_num)
6057 derx(lll,kkk,iii)=0.0d0
6061 cd eij=facont_hb(jj,i)
6062 cd ekl=facont_hb(kk,k)
6064 cd write (iout,*)'Contacts have occurred for peptide groups',
6065 cd & i,j,' fcont:',eij,' eij',' and ',k,l
6067 C Contribution from the graph I.
6068 cd write (2,*) 'AEA ',AEA(1,1,1),AEA(2,1,1),AEA(1,2,1),AEA(2,2,1)
6069 cd write (2,*) 'AEAb2',AEAb2(1,1,1),AEAb2(2,1,1)
6070 call transpose2(EUg(1,1,k),auxmat(1,1))
6071 call matmat2(AEA(1,1,1),auxmat(1,1),pizda(1,1))
6072 vv(1)=pizda(1,1)-pizda(2,2)
6073 vv(2)=pizda(1,2)+pizda(2,1)
6074 eello5_1=scalar2(AEAb2(1,1,1),Ub2(1,k))
6075 & +0.5d0*scalar2(vv(1),Dtobr2(1,i))
6077 C Explicit gradient in virtual-dihedral angles.
6078 if (i.gt.1) g_corr5_loc(i-1)=g_corr5_loc(i-1)
6079 & +ekont*(scalar2(AEAb2derg(1,2,1,1),Ub2(1,k))
6080 & +0.5d0*scalar2(vv(1),Dtobr2der(1,i)))
6081 call transpose2(EUgder(1,1,k),auxmat1(1,1))
6082 call matmat2(AEA(1,1,1),auxmat1(1,1),pizda(1,1))
6083 vv(1)=pizda(1,1)-pizda(2,2)
6084 vv(2)=pizda(1,2)+pizda(2,1)
6085 g_corr5_loc(k-1)=g_corr5_loc(k-1)
6086 & +ekont*(scalar2(AEAb2(1,1,1),Ub2der(1,k))
6087 & +0.5d0*scalar2(vv(1),Dtobr2(1,i)))
6088 call matmat2(AEAderg(1,1,1),auxmat(1,1),pizda(1,1))
6089 vv(1)=pizda(1,1)-pizda(2,2)
6090 vv(2)=pizda(1,2)+pizda(2,1)
6092 if (l.lt.nres-1) g_corr5_loc(l-1)=g_corr5_loc(l-1)
6093 & +ekont*(scalar2(AEAb2derg(1,1,1,1),Ub2(1,k))
6094 & +0.5d0*scalar2(vv(1),Dtobr2(1,i)))
6096 if (j.lt.nres-1) g_corr5_loc(j-1)=g_corr5_loc(j-1)
6097 & +ekont*(scalar2(AEAb2derg(1,1,1,1),Ub2(1,k))
6098 & +0.5d0*scalar2(vv(1),Dtobr2(1,i)))
6100 C Cartesian gradient
6104 call matmat2(AEAderx(1,1,lll,kkk,iii,1),auxmat(1,1),
6106 vv(1)=pizda(1,1)-pizda(2,2)
6107 vv(2)=pizda(1,2)+pizda(2,1)
6108 derx(lll,kkk,iii)=derx(lll,kkk,iii)
6109 & +scalar2(AEAb2derx(1,lll,kkk,iii,1,1),Ub2(1,k))
6110 & +0.5d0*scalar2(vv(1),Dtobr2(1,i))
6117 C Contribution from graph II
6118 call transpose2(EE(1,1,itk),auxmat(1,1))
6119 call matmat2(auxmat(1,1),AEA(1,1,1),pizda(1,1))
6120 vv(1)=pizda(1,1)+pizda(2,2)
6121 vv(2)=pizda(2,1)-pizda(1,2)
6122 eello5_2=scalar2(AEAb1(1,2,1),b1(1,itk))
6123 & -0.5d0*scalar2(vv(1),Ctobr(1,k))
6125 C Explicit gradient in virtual-dihedral angles.
6126 g_corr5_loc(k-1)=g_corr5_loc(k-1)
6127 & -0.5d0*ekont*scalar2(vv(1),Ctobrder(1,k))
6128 call matmat2(auxmat(1,1),AEAderg(1,1,1),pizda(1,1))
6129 vv(1)=pizda(1,1)+pizda(2,2)
6130 vv(2)=pizda(2,1)-pizda(1,2)
6132 g_corr5_loc(l-1)=g_corr5_loc(l-1)
6133 & +ekont*(scalar2(AEAb1derg(1,2,1),b1(1,itk))
6134 & -0.5d0*scalar2(vv(1),Ctobr(1,k)))
6136 g_corr5_loc(j-1)=g_corr5_loc(j-1)
6137 & +ekont*(scalar2(AEAb1derg(1,2,1),b1(1,itk))
6138 & -0.5d0*scalar2(vv(1),Ctobr(1,k)))
6140 C Cartesian gradient
6144 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,1),
6146 vv(1)=pizda(1,1)+pizda(2,2)
6147 vv(2)=pizda(2,1)-pizda(1,2)
6148 derx(lll,kkk,iii)=derx(lll,kkk,iii)
6149 & +scalar2(AEAb1derx(1,lll,kkk,iii,2,1),b1(1,itk))
6150 & -0.5d0*scalar2(vv(1),Ctobr(1,k))
6159 C Parallel orientation
6160 C Contribution from graph III
6161 call transpose2(EUg(1,1,l),auxmat(1,1))
6162 call matmat2(AEA(1,1,2),auxmat(1,1),pizda(1,1))
6163 vv(1)=pizda(1,1)-pizda(2,2)
6164 vv(2)=pizda(1,2)+pizda(2,1)
6165 eello5_3=scalar2(AEAb2(1,1,2),Ub2(1,l))
6166 & +0.5d0*scalar2(vv(1),Dtobr2(1,j))
6168 C Explicit gradient in virtual-dihedral angles.
6169 g_corr5_loc(j-1)=g_corr5_loc(j-1)
6170 & +ekont*(scalar2(AEAb2derg(1,2,1,2),Ub2(1,l))
6171 & +0.5d0*scalar2(vv(1),Dtobr2der(1,j)))
6172 call matmat2(AEAderg(1,1,2),auxmat(1,1),pizda(1,1))
6173 vv(1)=pizda(1,1)-pizda(2,2)
6174 vv(2)=pizda(1,2)+pizda(2,1)
6175 g_corr5_loc(k-1)=g_corr5_loc(k-1)
6176 & +ekont*(scalar2(AEAb2derg(1,1,1,2),Ub2(1,l))
6177 & +0.5d0*scalar2(vv(1),Dtobr2(1,j)))
6178 call transpose2(EUgder(1,1,l),auxmat1(1,1))
6179 call matmat2(AEA(1,1,2),auxmat1(1,1),pizda(1,1))
6180 vv(1)=pizda(1,1)-pizda(2,2)
6181 vv(2)=pizda(1,2)+pizda(2,1)
6182 g_corr5_loc(l-1)=g_corr5_loc(l-1)
6183 & +ekont*(scalar2(AEAb2(1,1,2),Ub2der(1,l))
6184 & +0.5d0*scalar2(vv(1),Dtobr2(1,j)))
6185 C Cartesian gradient
6189 call matmat2(AEAderx(1,1,lll,kkk,iii,2),auxmat(1,1),
6191 vv(1)=pizda(1,1)-pizda(2,2)
6192 vv(2)=pizda(1,2)+pizda(2,1)
6193 derx(lll,kkk,iii)=derx(lll,kkk,iii)
6194 & +scalar2(AEAb2derx(1,lll,kkk,iii,1,2),Ub2(1,l))
6195 & +0.5d0*scalar2(vv(1),Dtobr2(1,j))
6201 C Contribution from graph IV
6203 call transpose2(EE(1,1,itl),auxmat(1,1))
6204 call matmat2(auxmat(1,1),AEA(1,1,2),pizda(1,1))
6205 vv(1)=pizda(1,1)+pizda(2,2)
6206 vv(2)=pizda(2,1)-pizda(1,2)
6207 eello5_4=scalar2(AEAb1(1,2,2),b1(1,itl))
6208 & -0.5d0*scalar2(vv(1),Ctobr(1,l))
6210 C Explicit gradient in virtual-dihedral angles.
6211 g_corr5_loc(l-1)=g_corr5_loc(l-1)
6212 & -0.5d0*ekont*scalar2(vv(1),Ctobrder(1,l))
6213 call matmat2(auxmat(1,1),AEAderg(1,1,2),pizda(1,1))
6214 vv(1)=pizda(1,1)+pizda(2,2)
6215 vv(2)=pizda(2,1)-pizda(1,2)
6216 g_corr5_loc(k-1)=g_corr5_loc(k-1)
6217 & +ekont*(scalar2(AEAb1derg(1,2,2),b1(1,itl))
6218 & -0.5d0*scalar2(vv(1),Ctobr(1,l)))
6219 C Cartesian gradient
6223 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,2),
6225 vv(1)=pizda(1,1)+pizda(2,2)
6226 vv(2)=pizda(2,1)-pizda(1,2)
6227 derx(lll,kkk,iii)=derx(lll,kkk,iii)
6228 & +scalar2(AEAb1derx(1,lll,kkk,iii,2,2),b1(1,itl))
6229 & -0.5d0*scalar2(vv(1),Ctobr(1,l))
6235 C Antiparallel orientation
6236 C Contribution from graph III
6238 call transpose2(EUg(1,1,j),auxmat(1,1))
6239 call matmat2(AEA(1,1,2),auxmat(1,1),pizda(1,1))
6240 vv(1)=pizda(1,1)-pizda(2,2)
6241 vv(2)=pizda(1,2)+pizda(2,1)
6242 eello5_3=scalar2(AEAb2(1,1,2),Ub2(1,j))
6243 & +0.5d0*scalar2(vv(1),Dtobr2(1,l))
6245 C Explicit gradient in virtual-dihedral angles.
6246 g_corr5_loc(l-1)=g_corr5_loc(l-1)
6247 & +ekont*(scalar2(AEAb2derg(1,2,1,2),Ub2(1,j))
6248 & +0.5d0*scalar2(vv(1),Dtobr2der(1,l)))
6249 call matmat2(AEAderg(1,1,2),auxmat(1,1),pizda(1,1))
6250 vv(1)=pizda(1,1)-pizda(2,2)
6251 vv(2)=pizda(1,2)+pizda(2,1)
6252 g_corr5_loc(k-1)=g_corr5_loc(k-1)
6253 & +ekont*(scalar2(AEAb2derg(1,1,1,2),Ub2(1,j))
6254 & +0.5d0*scalar2(vv(1),Dtobr2(1,l)))
6255 call transpose2(EUgder(1,1,j),auxmat1(1,1))
6256 call matmat2(AEA(1,1,2),auxmat1(1,1),pizda(1,1))
6257 vv(1)=pizda(1,1)-pizda(2,2)
6258 vv(2)=pizda(1,2)+pizda(2,1)
6259 g_corr5_loc(j-1)=g_corr5_loc(j-1)
6260 & +ekont*(scalar2(AEAb2(1,1,2),Ub2der(1,j))
6261 & +0.5d0*scalar2(vv(1),Dtobr2(1,l)))
6262 C Cartesian gradient
6266 call matmat2(AEAderx(1,1,lll,kkk,iii,2),auxmat(1,1),
6268 vv(1)=pizda(1,1)-pizda(2,2)
6269 vv(2)=pizda(1,2)+pizda(2,1)
6270 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)
6271 & +scalar2(AEAb2derx(1,lll,kkk,iii,1,2),Ub2(1,j))
6272 & +0.5d0*scalar2(vv(1),Dtobr2(1,l))
6278 C Contribution from graph IV
6280 call transpose2(EE(1,1,itj),auxmat(1,1))
6281 call matmat2(auxmat(1,1),AEA(1,1,2),pizda(1,1))
6282 vv(1)=pizda(1,1)+pizda(2,2)
6283 vv(2)=pizda(2,1)-pizda(1,2)
6284 eello5_4=scalar2(AEAb1(1,2,2),b1(1,itj))
6285 & -0.5d0*scalar2(vv(1),Ctobr(1,j))
6287 C Explicit gradient in virtual-dihedral angles.
6288 g_corr5_loc(j-1)=g_corr5_loc(j-1)
6289 & -0.5d0*ekont*scalar2(vv(1),Ctobrder(1,j))
6290 call matmat2(auxmat(1,1),AEAderg(1,1,2),pizda(1,1))
6291 vv(1)=pizda(1,1)+pizda(2,2)
6292 vv(2)=pizda(2,1)-pizda(1,2)
6293 g_corr5_loc(k-1)=g_corr5_loc(k-1)
6294 & +ekont*(scalar2(AEAb1derg(1,2,2),b1(1,itj))
6295 & -0.5d0*scalar2(vv(1),Ctobr(1,j)))
6296 C Cartesian gradient
6300 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,2),
6302 vv(1)=pizda(1,1)+pizda(2,2)
6303 vv(2)=pizda(2,1)-pizda(1,2)
6304 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)
6305 & +scalar2(AEAb1derx(1,lll,kkk,iii,2,2),b1(1,itj))
6306 & -0.5d0*scalar2(vv(1),Ctobr(1,j))
6313 eel5=eello5_1+eello5_2+eello5_3+eello5_4
6314 cd if (i.eq.2 .and. j.eq.8 .and. k.eq.3 .and. l.eq.7) then
6315 cd write (2,*) 'ijkl',i,j,k,l
6316 cd write (2,*) 'eello5_1',eello5_1,' eello5_2',eello5_2,
6317 cd & ' eello5_3',eello5_3,' eello5_4',eello5_4
6319 cd write(iout,*) 'eello5_1',eello5_1,' eel5_1_num',16*eel5_1_num
6320 cd write(iout,*) 'eello5_2',eello5_2,' eel5_2_num',16*eel5_2_num
6321 cd write(iout,*) 'eello5_3',eello5_3,' eel5_3_num',16*eel5_3_num
6322 cd write(iout,*) 'eello5_4',eello5_4,' eel5_4_num',16*eel5_4_num
6324 if (j.lt.nres-1) then
6331 if (l.lt.nres-1) then
6341 cd write (2,*) 'eij',eij,' ekl',ekl,' ekont',ekont
6343 ggg1(ll)=eel5*g_contij(ll,1)
6344 ggg2(ll)=eel5*g_contij(ll,2)
6345 cold ghalf=0.5d0*eel5*ekl*gacont_hbr(ll,jj,i)
6346 ghalf=0.5d0*ggg1(ll)
6348 gradcorr5(ll,i)=gradcorr5(ll,i)+ghalf+ekont*derx(ll,2,1)
6349 gradcorr5(ll,i+1)=gradcorr5(ll,i+1)+ekont*derx(ll,3,1)
6350 gradcorr5(ll,j)=gradcorr5(ll,j)+ghalf+ekont*derx(ll,4,1)
6351 gradcorr5(ll,j1)=gradcorr5(ll,j1)+ekont*derx(ll,5,1)
6352 cold ghalf=0.5d0*eel5*eij*gacont_hbr(ll,kk,k)
6353 ghalf=0.5d0*ggg2(ll)
6355 gradcorr5(ll,k)=gradcorr5(ll,k)+ghalf+ekont*derx(ll,2,2)
6356 gradcorr5(ll,k+1)=gradcorr5(ll,k+1)+ekont*derx(ll,3,2)
6357 gradcorr5(ll,l)=gradcorr5(ll,l)+ghalf+ekont*derx(ll,4,2)
6358 gradcorr5(ll,l1)=gradcorr5(ll,l1)+ekont*derx(ll,5,2)
6363 cold gradcorr5(ll,m)=gradcorr5(ll,m)+eel5*ekl*gacont_hbr(ll,jj,i)
6364 gradcorr5(ll,m)=gradcorr5(ll,m)+ggg1(ll)
6369 cold gradcorr5(ll,m)=gradcorr5(ll,m)+eel5*eij*gacont_hbr(ll,kk,k)
6370 gradcorr5(ll,m)=gradcorr5(ll,m)+ggg2(ll)
6376 gradcorr5(ll,m)=gradcorr5(ll,m)+ekont*derx(ll,1,1)
6381 gradcorr5(ll,m)=gradcorr5(ll,m)+ekont*derx(ll,1,2)
6385 cd write (2,*) iii,g_corr5_loc(iii)
6389 cd write (2,*) 'ekont',ekont
6390 cd write (iout,*) 'eello5',ekont*eel5
6393 c--------------------------------------------------------------------------
6394 double precision function eello6(i,j,k,l,jj,kk)
6395 implicit real*8 (a-h,o-z)
6396 include 'DIMENSIONS'
6397 include 'sizesclu.dat'
6398 include 'COMMON.IOUNITS'
6399 include 'COMMON.CHAIN'
6400 include 'COMMON.DERIV'
6401 include 'COMMON.INTERACT'
6402 include 'COMMON.CONTACTS'
6403 include 'COMMON.TORSION'
6404 include 'COMMON.VAR'
6405 include 'COMMON.GEO'
6406 include 'COMMON.FFIELD'
6407 double precision ggg1(3),ggg2(3)
6408 cd if (i.ne.1 .or. j.ne.3 .or. k.ne.2 .or. l.ne.4) then
6413 cd & 'EELLO6: Contacts have occurred for peptide groups',i,j,
6421 cd call checkint6(i,j,k,l,jj,kk,eel6_1_num,eel6_2_num,
6422 cd & eel6_3_num,eel6_4_num,eel6_5_num,eel6_6_num)
6426 derx(lll,kkk,iii)=0.0d0
6430 cd eij=facont_hb(jj,i)
6431 cd ekl=facont_hb(kk,k)
6437 eello6_1=eello6_graph1(i,j,k,l,1,.false.)
6438 eello6_2=eello6_graph1(j,i,l,k,2,.false.)
6439 eello6_3=eello6_graph2(i,j,k,l,jj,kk,.false.)
6440 eello6_4=eello6_graph4(i,j,k,l,jj,kk,1,.false.)
6441 eello6_5=eello6_graph4(j,i,l,k,jj,kk,2,.false.)
6442 eello6_6=eello6_graph3(i,j,k,l,jj,kk,.false.)
6444 eello6_1=eello6_graph1(i,j,k,l,1,.false.)
6445 eello6_2=eello6_graph1(l,k,j,i,2,.true.)
6446 eello6_3=eello6_graph2(i,l,k,j,jj,kk,.true.)
6447 eello6_4=eello6_graph4(i,j,k,l,jj,kk,1,.false.)
6448 if (wturn6.eq.0.0d0 .or. j.ne.i+4) then
6449 eello6_5=eello6_graph4(l,k,j,i,kk,jj,2,.true.)
6453 eello6_6=eello6_graph3(i,l,k,j,jj,kk,.true.)
6455 C If turn contributions are considered, they will be handled separately.
6456 eel6=eello6_1+eello6_2+eello6_3+eello6_4+eello6_5+eello6_6
6457 cd write(iout,*) 'eello6_1',eello6_1,' eel6_1_num',16*eel6_1_num
6458 cd write(iout,*) 'eello6_2',eello6_2,' eel6_2_num',16*eel6_2_num
6459 cd write(iout,*) 'eello6_3',eello6_3,' eel6_3_num',16*eel6_3_num
6460 cd write(iout,*) 'eello6_4',eello6_4,' eel6_4_num',16*eel6_4_num
6461 cd write(iout,*) 'eello6_5',eello6_5,' eel6_5_num',16*eel6_5_num
6462 cd write(iout,*) 'eello6_6',eello6_6,' eel6_6_num',16*eel6_6_num
6465 if (j.lt.nres-1) then
6472 if (l.lt.nres-1) then
6480 ggg1(ll)=eel6*g_contij(ll,1)
6481 ggg2(ll)=eel6*g_contij(ll,2)
6482 cold ghalf=0.5d0*eel6*ekl*gacont_hbr(ll,jj,i)
6483 ghalf=0.5d0*ggg1(ll)
6485 gradcorr6(ll,i)=gradcorr6(ll,i)+ghalf+ekont*derx(ll,2,1)
6486 gradcorr6(ll,i+1)=gradcorr6(ll,i+1)+ekont*derx(ll,3,1)
6487 gradcorr6(ll,j)=gradcorr6(ll,j)+ghalf+ekont*derx(ll,4,1)
6488 gradcorr6(ll,j1)=gradcorr6(ll,j1)+ekont*derx(ll,5,1)
6489 ghalf=0.5d0*ggg2(ll)
6490 cold ghalf=0.5d0*eel6*eij*gacont_hbr(ll,kk,k)
6492 gradcorr6(ll,k)=gradcorr6(ll,k)+ghalf+ekont*derx(ll,2,2)
6493 gradcorr6(ll,k+1)=gradcorr6(ll,k+1)+ekont*derx(ll,3,2)
6494 gradcorr6(ll,l)=gradcorr6(ll,l)+ghalf+ekont*derx(ll,4,2)
6495 gradcorr6(ll,l1)=gradcorr6(ll,l1)+ekont*derx(ll,5,2)
6500 cold gradcorr6(ll,m)=gradcorr6(ll,m)+eel6*ekl*gacont_hbr(ll,jj,i)
6501 gradcorr6(ll,m)=gradcorr6(ll,m)+ggg1(ll)
6506 cold gradcorr6(ll,m)=gradcorr6(ll,m)+eel6*eij*gacont_hbr(ll,kk,k)
6507 gradcorr6(ll,m)=gradcorr6(ll,m)+ggg2(ll)
6513 gradcorr6(ll,m)=gradcorr6(ll,m)+ekont*derx(ll,1,1)
6518 gradcorr6(ll,m)=gradcorr6(ll,m)+ekont*derx(ll,1,2)
6522 cd write (2,*) iii,g_corr6_loc(iii)
6526 cd write (2,*) 'ekont',ekont
6527 cd write (iout,*) 'eello6',ekont*eel6
6530 c--------------------------------------------------------------------------
6531 double precision function eello6_graph1(i,j,k,l,imat,swap)
6532 implicit real*8 (a-h,o-z)
6533 include 'DIMENSIONS'
6534 include 'sizesclu.dat'
6535 include 'COMMON.IOUNITS'
6536 include 'COMMON.CHAIN'
6537 include 'COMMON.DERIV'
6538 include 'COMMON.INTERACT'
6539 include 'COMMON.CONTACTS'
6540 include 'COMMON.TORSION'
6541 include 'COMMON.VAR'
6542 include 'COMMON.GEO'
6543 double precision vv(2),vv1(2),pizda(2,2),auxmat(2,2),pizda1(2,2)
6547 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
6549 C Parallel Antiparallel C
6555 C \ j|/k\| / \ |/k\|l / C
6560 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
6561 itk=itortyp(itype(k))
6562 s1= scalar2(AEAb1(1,2,imat),CUgb2(1,i))
6563 s2=-scalar2(AEAb2(1,1,imat),Ug2Db1t(1,k))
6564 s3= scalar2(AEAb2(1,1,imat),CUgb2(1,k))
6565 call transpose2(EUgC(1,1,k),auxmat(1,1))
6566 call matmat2(AEA(1,1,imat),auxmat(1,1),pizda1(1,1))
6567 vv1(1)=pizda1(1,1)-pizda1(2,2)
6568 vv1(2)=pizda1(1,2)+pizda1(2,1)
6569 s4=0.5d0*scalar2(vv1(1),Dtobr2(1,i))
6570 vv(1)=AEAb1(1,2,imat)*b1(1,itk)-AEAb1(2,2,imat)*b1(2,itk)
6571 vv(2)=AEAb1(1,2,imat)*b1(2,itk)+AEAb1(2,2,imat)*b1(1,itk)
6572 s5=scalar2(vv(1),Dtobr2(1,i))
6573 cd write (2,*) 's1',s1,' s2',s2,' s3',s3,' s4', s4,' s5',s5
6574 eello6_graph1=-0.5d0*(s1+s2+s3+s4+s5)
6575 if (.not. calc_grad) return
6576 if (i.gt.1) g_corr6_loc(i-1)=g_corr6_loc(i-1)
6577 & -0.5d0*ekont*(scalar2(AEAb1(1,2,imat),CUgb2der(1,i))
6578 & -scalar2(AEAb2derg(1,2,1,imat),Ug2Db1t(1,k))
6579 & +scalar2(AEAb2derg(1,2,1,imat),CUgb2(1,k))
6580 & +0.5d0*scalar2(vv1(1),Dtobr2der(1,i))
6581 & +scalar2(vv(1),Dtobr2der(1,i)))
6582 call matmat2(AEAderg(1,1,imat),auxmat(1,1),pizda1(1,1))
6583 vv1(1)=pizda1(1,1)-pizda1(2,2)
6584 vv1(2)=pizda1(1,2)+pizda1(2,1)
6585 vv(1)=AEAb1derg(1,2,imat)*b1(1,itk)-AEAb1derg(2,2,imat)*b1(2,itk)
6586 vv(2)=AEAb1derg(1,2,imat)*b1(2,itk)+AEAb1derg(2,2,imat)*b1(1,itk)
6588 g_corr6_loc(l-1)=g_corr6_loc(l-1)
6589 & +ekont*(-0.5d0*(scalar2(AEAb1derg(1,2,imat),CUgb2(1,i))
6590 & -scalar2(AEAb2derg(1,1,1,imat),Ug2Db1t(1,k))
6591 & +scalar2(AEAb2derg(1,1,1,imat),CUgb2(1,k))
6592 & +0.5d0*scalar2(vv1(1),Dtobr2(1,i))+scalar2(vv(1),Dtobr2(1,i))))
6594 g_corr6_loc(j-1)=g_corr6_loc(j-1)
6595 & +ekont*(-0.5d0*(scalar2(AEAb1derg(1,2,imat),CUgb2(1,i))
6596 & -scalar2(AEAb2derg(1,1,1,imat),Ug2Db1t(1,k))
6597 & +scalar2(AEAb2derg(1,1,1,imat),CUgb2(1,k))
6598 & +0.5d0*scalar2(vv1(1),Dtobr2(1,i))+scalar2(vv(1),Dtobr2(1,i))))
6600 call transpose2(EUgCder(1,1,k),auxmat(1,1))
6601 call matmat2(AEA(1,1,imat),auxmat(1,1),pizda1(1,1))
6602 vv1(1)=pizda1(1,1)-pizda1(2,2)
6603 vv1(2)=pizda1(1,2)+pizda1(2,1)
6604 if (k.gt.1) g_corr6_loc(k-1)=g_corr6_loc(k-1)
6605 & +ekont*(-0.5d0*(-scalar2(AEAb2(1,1,imat),Ug2Db1tder(1,k))
6606 & +scalar2(AEAb2(1,1,imat),CUgb2der(1,k))
6607 & +0.5d0*scalar2(vv1(1),Dtobr2(1,i))))
6616 s1= scalar2(AEAb1derx(1,lll,kkk,iii,2,imat),CUgb2(1,i))
6617 s2=-scalar2(AEAb2derx(1,lll,kkk,iii,1,imat),Ug2Db1t(1,k))
6618 s3= scalar2(AEAb2derx(1,lll,kkk,iii,1,imat),CUgb2(1,k))
6619 call transpose2(EUgC(1,1,k),auxmat(1,1))
6620 call matmat2(AEAderx(1,1,lll,kkk,iii,imat),auxmat(1,1),
6622 vv1(1)=pizda1(1,1)-pizda1(2,2)
6623 vv1(2)=pizda1(1,2)+pizda1(2,1)
6624 s4=0.5d0*scalar2(vv1(1),Dtobr2(1,i))
6625 vv(1)=AEAb1derx(1,lll,kkk,iii,2,imat)*b1(1,itk)
6626 & -AEAb1derx(2,lll,kkk,iii,2,imat)*b1(2,itk)
6627 vv(2)=AEAb1derx(1,lll,kkk,iii,2,imat)*b1(2,itk)
6628 & +AEAb1derx(2,lll,kkk,iii,2,imat)*b1(1,itk)
6629 s5=scalar2(vv(1),Dtobr2(1,i))
6630 derx(lll,kkk,ind)=derx(lll,kkk,ind)-0.5d0*(s1+s2+s3+s4+s5)
6636 c----------------------------------------------------------------------------
6637 double precision function eello6_graph2(i,j,k,l,jj,kk,swap)
6638 implicit real*8 (a-h,o-z)
6639 include 'DIMENSIONS'
6640 include 'sizesclu.dat'
6641 include 'COMMON.IOUNITS'
6642 include 'COMMON.CHAIN'
6643 include 'COMMON.DERIV'
6644 include 'COMMON.INTERACT'
6645 include 'COMMON.CONTACTS'
6646 include 'COMMON.TORSION'
6647 include 'COMMON.VAR'
6648 include 'COMMON.GEO'
6650 double precision vv(2),pizda(2,2),auxmat(2,2),auxvec(2),
6651 & auxvec1(2),auxvec2(2),auxmat1(2,2)
6654 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
6656 C Parallel Antiparallel C
6662 C \ j|/k\| \ |/k\|l C
6667 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
6668 cd write (2,*) 'eello6_graph2: i,',i,' j',j,' k',k,' l',l
6669 C AL 7/4/01 s1 would occur in the sixth-order moment,
6670 C but not in a cluster cumulant
6672 s1=dip(1,jj,i)*dip(1,kk,k)
6674 call matvec2(ADtEA1(1,1,1),Ub2(1,k),auxvec(1))
6675 s2=-0.5d0*scalar2(Ub2(1,i),auxvec(1))
6676 call matvec2(ADtEA(1,1,2),Ub2(1,l),auxvec1(1))
6677 s3=-0.5d0*scalar2(Ub2(1,j),auxvec1(1))
6678 call transpose2(EUg(1,1,k),auxmat(1,1))
6679 call matmat2(ADtEA1(1,1,1),auxmat(1,1),pizda(1,1))
6680 vv(1)=pizda(1,1)-pizda(2,2)
6681 vv(2)=pizda(1,2)+pizda(2,1)
6682 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
6683 cd write (2,*) 'eello6_graph2:','s1',s1,' s2',s2,' s3',s3,' s4',s4
6685 eello6_graph2=-(s1+s2+s3+s4)
6687 eello6_graph2=-(s2+s3+s4)
6690 if (.not. calc_grad) return
6691 C Derivatives in gamma(i-1)
6694 s1=dipderg(1,jj,i)*dip(1,kk,k)
6696 s2=-0.5d0*scalar2(Ub2der(1,i),auxvec(1))
6697 call matvec2(ADtEAderg(1,1,1,2),Ub2(1,l),auxvec2(1))
6698 s3=-0.5d0*scalar2(Ub2(1,j),auxvec2(1))
6699 s4=-0.25d0*scalar2(vv(1),Dtobr2der(1,i))
6701 g_corr6_loc(i-1)=g_corr6_loc(i-1)-ekont*(s1+s2+s3+s4)
6703 g_corr6_loc(i-1)=g_corr6_loc(i-1)-ekont*(s2+s3+s4)
6705 c g_corr6_loc(i-1)=g_corr6_loc(i-1)-s3
6707 C Derivatives in gamma(k-1)
6709 s1=dip(1,jj,i)*dipderg(1,kk,k)
6711 call matvec2(ADtEA1(1,1,1),Ub2der(1,k),auxvec2(1))
6712 s2=-0.5d0*scalar2(Ub2(1,i),auxvec2(1))
6713 call matvec2(ADtEAderg(1,1,2,2),Ub2(1,l),auxvec2(1))
6714 s3=-0.5d0*scalar2(Ub2(1,j),auxvec2(1))
6715 call transpose2(EUgder(1,1,k),auxmat1(1,1))
6716 call matmat2(ADtEA1(1,1,1),auxmat1(1,1),pizda(1,1))
6717 vv(1)=pizda(1,1)-pizda(2,2)
6718 vv(2)=pizda(1,2)+pizda(2,1)
6719 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
6721 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s1+s2+s3+s4)
6723 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s2+s3+s4)
6725 c g_corr6_loc(k-1)=g_corr6_loc(k-1)-s3
6726 C Derivatives in gamma(j-1) or gamma(l-1)
6729 s1=dipderg(3,jj,i)*dip(1,kk,k)
6731 call matvec2(ADtEA1derg(1,1,1,1),Ub2(1,k),auxvec2(1))
6732 s2=-0.5d0*scalar2(Ub2(1,i),auxvec2(1))
6733 s3=-0.5d0*scalar2(Ub2der(1,j),auxvec1(1))
6734 call matmat2(ADtEA1derg(1,1,1,1),auxmat(1,1),pizda(1,1))
6735 vv(1)=pizda(1,1)-pizda(2,2)
6736 vv(2)=pizda(1,2)+pizda(2,1)
6737 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
6740 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*s1
6742 g_corr6_loc(j-1)=g_corr6_loc(j-1)-ekont*s1
6745 g_corr6_loc(j-1)=g_corr6_loc(j-1)-ekont*(s2+s3+s4)
6746 c g_corr6_loc(j-1)=g_corr6_loc(j-1)-s3
6748 C Derivatives in gamma(l-1) or gamma(j-1)
6751 s1=dip(1,jj,i)*dipderg(3,kk,k)
6753 call matvec2(ADtEA1derg(1,1,2,1),Ub2(1,k),auxvec2(1))
6754 s2=-0.5d0*scalar2(Ub2(1,i),auxvec2(1))
6755 call matvec2(ADtEA(1,1,2),Ub2der(1,l),auxvec2(1))
6756 s3=-0.5d0*scalar2(Ub2(1,j),auxvec2(1))
6757 call matmat2(ADtEA1derg(1,1,2,1),auxmat(1,1),pizda(1,1))
6758 vv(1)=pizda(1,1)-pizda(2,2)
6759 vv(2)=pizda(1,2)+pizda(2,1)
6760 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
6763 g_corr6_loc(j-1)=g_corr6_loc(j-1)-ekont*s1
6765 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*s1
6768 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*(s2+s3+s4)
6769 c g_corr6_loc(l-1)=g_corr6_loc(l-1)-s3
6771 C Cartesian derivatives.
6773 write (2,*) 'In eello6_graph2'
6775 write (2,*) 'iii=',iii
6777 write (2,*) 'kkk=',kkk
6779 write (2,'(3(2f10.5),5x)')
6780 & ((ADtEA1derx(jjj,mmm,lll,kkk,iii,1),mmm=1,2),lll=1,3)
6790 s1=dipderx(lll,kkk,1,jj,i)*dip(1,kk,k)
6792 s1=dip(1,jj,i)*dipderx(lll,kkk,1,kk,k)
6795 call matvec2(ADtEA1derx(1,1,lll,kkk,iii,1),Ub2(1,k),
6797 s2=-0.5d0*scalar2(Ub2(1,i),auxvec(1))
6798 call matvec2(ADtEAderx(1,1,lll,kkk,iii,2),Ub2(1,l),
6800 s3=-0.5d0*scalar2(Ub2(1,j),auxvec(1))
6801 call transpose2(EUg(1,1,k),auxmat(1,1))
6802 call matmat2(ADtEA1derx(1,1,lll,kkk,iii,1),auxmat(1,1),
6804 vv(1)=pizda(1,1)-pizda(2,2)
6805 vv(2)=pizda(1,2)+pizda(2,1)
6806 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
6807 cd write (2,*) 's1',s1,' s2',s2,' s3',s3,' s4',s4
6809 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s1+s2+s4)
6811 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s2+s4)
6814 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-s3
6816 derx(lll,kkk,iii)=derx(lll,kkk,iii)-s3
6823 c----------------------------------------------------------------------------
6824 double precision function eello6_graph3(i,j,k,l,jj,kk,swap)
6825 implicit real*8 (a-h,o-z)
6826 include 'DIMENSIONS'
6827 include 'sizesclu.dat'
6828 include 'COMMON.IOUNITS'
6829 include 'COMMON.CHAIN'
6830 include 'COMMON.DERIV'
6831 include 'COMMON.INTERACT'
6832 include 'COMMON.CONTACTS'
6833 include 'COMMON.TORSION'
6834 include 'COMMON.VAR'
6835 include 'COMMON.GEO'
6836 double precision vv(2),pizda(2,2),auxmat(2,2),auxvec(2)
6838 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
6840 C Parallel Antiparallel C
6846 C j|/k\| / |/k\|l / C
6851 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
6853 C 4/7/01 AL Component s1 was removed, because it pertains to the respective
6854 C energy moment and not to the cluster cumulant.
6855 iti=itortyp(itype(i))
6856 if (j.lt.nres-1) then
6857 itj1=itortyp(itype(j+1))
6861 itk=itortyp(itype(k))
6862 itk1=itortyp(itype(k+1))
6863 if (l.lt.nres-1) then
6864 itl1=itortyp(itype(l+1))
6869 s1=dip(4,jj,i)*dip(4,kk,k)
6871 call matvec2(AECA(1,1,1),b1(1,itk1),auxvec(1))
6872 s2=0.5d0*scalar2(b1(1,itk),auxvec(1))
6873 call matvec2(AECA(1,1,2),b1(1,itl1),auxvec(1))
6874 s3=0.5d0*scalar2(b1(1,itj1),auxvec(1))
6875 call transpose2(EE(1,1,itk),auxmat(1,1))
6876 call matmat2(auxmat(1,1),AECA(1,1,1),pizda(1,1))
6877 vv(1)=pizda(1,1)+pizda(2,2)
6878 vv(2)=pizda(2,1)-pizda(1,2)
6879 s4=-0.25d0*scalar2(vv(1),Ctobr(1,k))
6880 cd write (2,*) 'eello6_graph3:','s1',s1,' s2',s2,' s3',s3,' s4',s4
6882 eello6_graph3=-(s1+s2+s3+s4)
6884 eello6_graph3=-(s2+s3+s4)
6887 if (.not. calc_grad) return
6888 C Derivatives in gamma(k-1)
6889 call matvec2(AECAderg(1,1,2),b1(1,itl1),auxvec(1))
6890 s3=0.5d0*scalar2(b1(1,itj1),auxvec(1))
6891 s4=-0.25d0*scalar2(vv(1),Ctobrder(1,k))
6892 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s3+s4)
6893 C Derivatives in gamma(l-1)
6894 call matvec2(AECAderg(1,1,1),b1(1,itk1),auxvec(1))
6895 s2=0.5d0*scalar2(b1(1,itk),auxvec(1))
6896 call matmat2(auxmat(1,1),AECAderg(1,1,1),pizda(1,1))
6897 vv(1)=pizda(1,1)+pizda(2,2)
6898 vv(2)=pizda(2,1)-pizda(1,2)
6899 s4=-0.25d0*scalar2(vv(1),Ctobr(1,k))
6900 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*(s2+s4)
6901 C Cartesian derivatives.
6907 s1=dipderx(lll,kkk,4,jj,i)*dip(4,kk,k)
6909 s1=dip(4,jj,i)*dipderx(lll,kkk,4,kk,k)
6912 call matvec2(AECAderx(1,1,lll,kkk,iii,1),b1(1,itk1),
6914 s2=0.5d0*scalar2(b1(1,itk),auxvec(1))
6915 call matvec2(AECAderx(1,1,lll,kkk,iii,2),b1(1,itl1),
6917 s3=0.5d0*scalar2(b1(1,itj1),auxvec(1))
6918 call matmat2(auxmat(1,1),AECAderx(1,1,lll,kkk,iii,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),Ctobr(1,k))
6924 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s1+s2+s4)
6926 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s2+s4)
6929 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-s3
6931 derx(lll,kkk,iii)=derx(lll,kkk,iii)-s3
6933 c derx(lll,kkk,iii)=derx(lll,kkk,iii)-s4
6939 c----------------------------------------------------------------------------
6940 double precision function eello6_graph4(i,j,k,l,jj,kk,imat,swap)
6941 implicit real*8 (a-h,o-z)
6942 include 'DIMENSIONS'
6943 include 'sizesclu.dat'
6944 include 'COMMON.IOUNITS'
6945 include 'COMMON.CHAIN'
6946 include 'COMMON.DERIV'
6947 include 'COMMON.INTERACT'
6948 include 'COMMON.CONTACTS'
6949 include 'COMMON.TORSION'
6950 include 'COMMON.VAR'
6951 include 'COMMON.GEO'
6952 include 'COMMON.FFIELD'
6953 double precision vv(2),pizda(2,2),auxmat(2,2),auxvec(2),
6954 & auxvec1(2),auxmat1(2,2)
6956 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
6958 C Parallel Antiparallel C
6964 C \ j|/k\| \ |/k\|l C
6969 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
6971 C 4/7/01 AL Component s1 was removed, because it pertains to the respective
6972 C energy moment and not to the cluster cumulant.
6973 cd write (2,*) 'eello_graph4: wturn6',wturn6
6974 iti=itortyp(itype(i))
6975 itj=itortyp(itype(j))
6976 if (j.lt.nres-1) then
6977 itj1=itortyp(itype(j+1))
6981 itk=itortyp(itype(k))
6982 if (k.lt.nres-1) then
6983 itk1=itortyp(itype(k+1))
6987 itl=itortyp(itype(l))
6988 if (l.lt.nres-1) then
6989 itl1=itortyp(itype(l+1))
6993 cd write (2,*) 'eello6_graph4:','i',i,' j',j,' k',k,' l',l
6994 cd write (2,*) 'iti',iti,' itj',itj,' itj1',itj1,' itk',itk,
6995 cd & ' itl',itl,' itl1',itl1
6998 s1=dip(3,jj,i)*dip(3,kk,k)
7000 s1=dip(2,jj,j)*dip(2,kk,l)
7003 call matvec2(AECA(1,1,imat),Ub2(1,k),auxvec(1))
7004 s2=0.5d0*scalar2(Ub2(1,i),auxvec(1))
7006 call matvec2(ADtEA1(1,1,3-imat),b1(1,itj1),auxvec1(1))
7007 s3=-0.5d0*scalar2(b1(1,itj),auxvec1(1))
7009 call matvec2(ADtEA1(1,1,3-imat),b1(1,itl1),auxvec1(1))
7010 s3=-0.5d0*scalar2(b1(1,itl),auxvec1(1))
7012 call transpose2(EUg(1,1,k),auxmat(1,1))
7013 call matmat2(AECA(1,1,imat),auxmat(1,1),pizda(1,1))
7014 vv(1)=pizda(1,1)-pizda(2,2)
7015 vv(2)=pizda(2,1)+pizda(1,2)
7016 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
7017 cd write (2,*) 'eello6_graph4:','s1',s1,' s2',s2,' s3',s3,' s4',s4
7019 eello6_graph4=-(s1+s2+s3+s4)
7021 eello6_graph4=-(s2+s3+s4)
7023 if (.not. calc_grad) return
7024 C Derivatives in gamma(i-1)
7028 s1=dipderg(2,jj,i)*dip(3,kk,k)
7030 s1=dipderg(4,jj,j)*dip(2,kk,l)
7033 s2=0.5d0*scalar2(Ub2der(1,i),auxvec(1))
7035 call matvec2(ADtEA1derg(1,1,1,3-imat),b1(1,itj1),auxvec1(1))
7036 s3=-0.5d0*scalar2(b1(1,itj),auxvec1(1))
7038 call matvec2(ADtEA1derg(1,1,1,3-imat),b1(1,itl1),auxvec1(1))
7039 s3=-0.5d0*scalar2(b1(1,itl),auxvec1(1))
7041 s4=0.25d0*scalar2(vv(1),Dtobr2der(1,i))
7042 if (wturn6.gt.0.0d0 .and. k.eq.l+4 .and. i.eq.j+2) then
7043 cd write (2,*) 'turn6 derivatives'
7045 gel_loc_turn6(i-1)=gel_loc_turn6(i-1)-ekont*(s1+s2+s3+s4)
7047 gel_loc_turn6(i-1)=gel_loc_turn6(i-1)-ekont*(s2+s3+s4)
7051 g_corr6_loc(i-1)=g_corr6_loc(i-1)-ekont*(s1+s2+s3+s4)
7053 g_corr6_loc(i-1)=g_corr6_loc(i-1)-ekont*(s2+s3+s4)
7057 C Derivatives in gamma(k-1)
7060 s1=dip(3,jj,i)*dipderg(2,kk,k)
7062 s1=dip(2,jj,j)*dipderg(4,kk,l)
7065 call matvec2(AECA(1,1,imat),Ub2der(1,k),auxvec1(1))
7066 s2=0.5d0*scalar2(Ub2(1,i),auxvec1(1))
7068 call matvec2(ADtEA1derg(1,1,2,3-imat),b1(1,itj1),auxvec1(1))
7069 s3=-0.5d0*scalar2(b1(1,itj),auxvec1(1))
7071 call matvec2(ADtEA1derg(1,1,2,3-imat),b1(1,itl1),auxvec1(1))
7072 s3=-0.5d0*scalar2(b1(1,itl),auxvec1(1))
7074 call transpose2(EUgder(1,1,k),auxmat1(1,1))
7075 call matmat2(AECA(1,1,imat),auxmat1(1,1),pizda(1,1))
7076 vv(1)=pizda(1,1)-pizda(2,2)
7077 vv(2)=pizda(2,1)+pizda(1,2)
7078 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
7079 if (wturn6.gt.0.0d0 .and. k.eq.l+4 .and. i.eq.j+2) then
7081 gel_loc_turn6(k-1)=gel_loc_turn6(k-1)-ekont*(s1+s2+s3+s4)
7083 gel_loc_turn6(k-1)=gel_loc_turn6(k-1)-ekont*(s2+s3+s4)
7087 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s1+s2+s3+s4)
7089 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s2+s3+s4)
7092 C Derivatives in gamma(j-1) or gamma(l-1)
7093 if (l.eq.j+1 .and. l.gt.1) then
7094 call matvec2(AECAderg(1,1,imat),Ub2(1,k),auxvec(1))
7095 s2=0.5d0*scalar2(Ub2(1,i),auxvec(1))
7096 call matmat2(AECAderg(1,1,imat),auxmat(1,1),pizda(1,1))
7097 vv(1)=pizda(1,1)-pizda(2,2)
7098 vv(2)=pizda(2,1)+pizda(1,2)
7099 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
7100 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*(s2+s4)
7101 else if (j.gt.1) then
7102 call matvec2(AECAderg(1,1,imat),Ub2(1,k),auxvec(1))
7103 s2=0.5d0*scalar2(Ub2(1,i),auxvec(1))
7104 call matmat2(AECAderg(1,1,imat),auxmat(1,1),pizda(1,1))
7105 vv(1)=pizda(1,1)-pizda(2,2)
7106 vv(2)=pizda(2,1)+pizda(1,2)
7107 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
7108 if (wturn6.gt.0.0d0 .and. k.eq.l+4 .and. i.eq.j+2) then
7109 gel_loc_turn6(j-1)=gel_loc_turn6(j-1)-ekont*(s2+s4)
7111 g_corr6_loc(j-1)=g_corr6_loc(j-1)-ekont*(s2+s4)
7114 C Cartesian derivatives.
7121 s1=dipderx(lll,kkk,3,jj,i)*dip(3,kk,k)
7123 s1=dipderx(lll,kkk,2,jj,j)*dip(2,kk,l)
7127 s1=dip(3,jj,i)*dipderx(lll,kkk,3,kk,k)
7129 s1=dip(2,jj,j)*dipderx(lll,kkk,2,kk,l)
7133 call matvec2(AECAderx(1,1,lll,kkk,iii,imat),Ub2(1,k),
7135 s2=0.5d0*scalar2(Ub2(1,i),auxvec(1))
7137 call matvec2(ADtEA1derx(1,1,lll,kkk,iii,3-imat),
7138 & b1(1,itj1),auxvec(1))
7139 s3=-0.5d0*scalar2(b1(1,itj),auxvec(1))
7141 call matvec2(ADtEA1derx(1,1,lll,kkk,iii,3-imat),
7142 & b1(1,itl1),auxvec(1))
7143 s3=-0.5d0*scalar2(b1(1,itl),auxvec(1))
7145 call matmat2(AECAderx(1,1,lll,kkk,iii,imat),auxmat(1,1),
7147 vv(1)=pizda(1,1)-pizda(2,2)
7148 vv(2)=pizda(2,1)+pizda(1,2)
7149 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
7151 if (wturn6.gt.0.0d0 .and. k.eq.l+4 .and. i.eq.j+2) then
7153 derx_turn(lll,kkk,3-iii)=derx_turn(lll,kkk,3-iii)
7156 derx_turn(lll,kkk,3-iii)=derx_turn(lll,kkk,3-iii)
7159 derx_turn(lll,kkk,iii)=derx_turn(lll,kkk,iii)-s3
7162 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-(s1+s2+s4)
7164 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-(s2+s4)
7166 derx(lll,kkk,iii)=derx(lll,kkk,iii)-s3
7170 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s1+s2+s4)
7172 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s2+s4)
7175 derx(lll,kkk,iii)=derx(lll,kkk,iii)-s3
7177 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-s3
7185 c----------------------------------------------------------------------------
7186 double precision function eello_turn6(i,jj,kk)
7187 implicit real*8 (a-h,o-z)
7188 include 'DIMENSIONS'
7189 include 'sizesclu.dat'
7190 include 'COMMON.IOUNITS'
7191 include 'COMMON.CHAIN'
7192 include 'COMMON.DERIV'
7193 include 'COMMON.INTERACT'
7194 include 'COMMON.CONTACTS'
7195 include 'COMMON.TORSION'
7196 include 'COMMON.VAR'
7197 include 'COMMON.GEO'
7198 double precision vtemp1(2),vtemp2(2),vtemp3(2),vtemp4(2),
7199 & atemp(2,2),auxmat(2,2),achuj_temp(2,2),gtemp(2,2),gvec(2),
7201 double precision vtemp1d(2),vtemp2d(2),vtemp3d(2),vtemp4d(2),
7202 & atempd(2,2),auxmatd(2,2),achuj_tempd(2,2),gtempd(2,2),gvecd(2)
7203 C 4/7/01 AL Components s1, s8, and s13 were removed, because they pertain to
7204 C the respective energy moment and not to the cluster cumulant.
7209 iti=itortyp(itype(i))
7210 itk=itortyp(itype(k))
7211 itk1=itortyp(itype(k+1))
7212 itl=itortyp(itype(l))
7213 itj=itortyp(itype(j))
7214 cd write (2,*) 'itk',itk,' itk1',itk1,' itl',itl,' itj',itj
7215 cd write (2,*) 'i',i,' k',k,' j',j,' l',l
7216 cd if (i.ne.1 .or. j.ne.3 .or. k.ne.2 .or. l.ne.4) then
7221 cd & 'EELLO6: Contacts have occurred for peptide groups',i,j,
7223 cd call checkint_turn6(i,jj,kk,eel_turn6_num)
7227 derx_turn(lll,kkk,iii)=0.0d0
7234 eello6_5=eello6_graph4(l,k,j,i,kk,jj,2,.true.)
7236 cd write (2,*) 'eello6_5',eello6_5
7238 call transpose2(AEA(1,1,1),auxmat(1,1))
7239 call matmat2(EUg(1,1,i+1),auxmat(1,1),auxmat(1,1))
7240 ss1=scalar2(Ub2(1,i+2),b1(1,itl))
7241 s1 = (auxmat(1,1)+auxmat(2,2))*ss1
7245 call matvec2(EUg(1,1,i+2),b1(1,itl),vtemp1(1))
7246 call matvec2(AEA(1,1,1),vtemp1(1),vtemp1(1))
7247 s2 = scalar2(b1(1,itk),vtemp1(1))
7249 call transpose2(AEA(1,1,2),atemp(1,1))
7250 call matmat2(atemp(1,1),EUg(1,1,i+4),atemp(1,1))
7251 call matvec2(Ug2(1,1,i+2),dd(1,1,itk1),vtemp2(1))
7252 s8 = -(atemp(1,1)+atemp(2,2))*scalar2(cc(1,1,itl),vtemp2(1))
7256 call matmat2(EUg(1,1,i+3),AEA(1,1,2),auxmat(1,1))
7257 call matvec2(auxmat(1,1),Ub2(1,i+4),vtemp3(1))
7258 s12 = scalar2(Ub2(1,i+2),vtemp3(1))
7260 call transpose2(a_chuj(1,1,kk,i+1),achuj_temp(1,1))
7261 call matmat2(achuj_temp(1,1),EUg(1,1,i+2),gtemp(1,1))
7262 call matmat2(gtemp(1,1),EUg(1,1,i+3),gtemp(1,1))
7263 call matvec2(a_chuj(1,1,jj,i),Ub2(1,i+4),vtemp4(1))
7264 ss13 = scalar2(b1(1,itk),vtemp4(1))
7265 s13 = (gtemp(1,1)+gtemp(2,2))*ss13
7269 c write (2,*) 's1,s2,s8,s12,s13',s1,s2,s8,s12,s13
7275 eel_turn6 = eello6_5 - 0.5d0*(s1+s2+s12+s8+s13)
7277 C Derivatives in gamma(i+2)
7279 call transpose2(AEA(1,1,1),auxmatd(1,1))
7280 call matmat2(EUgder(1,1,i+1),auxmatd(1,1),auxmatd(1,1))
7281 s1d = (auxmatd(1,1)+auxmatd(2,2))*ss1
7282 call transpose2(AEAderg(1,1,2),atempd(1,1))
7283 call matmat2(atempd(1,1),EUg(1,1,i+4),atempd(1,1))
7284 s8d = -(atempd(1,1)+atempd(2,2))*scalar2(cc(1,1,itl),vtemp2(1))
7288 call matmat2(EUg(1,1,i+3),AEAderg(1,1,2),auxmatd(1,1))
7289 call matvec2(auxmatd(1,1),Ub2(1,i+4),vtemp3d(1))
7290 s12d = scalar2(Ub2(1,i+2),vtemp3d(1))
7296 gel_loc_turn6(i)=gel_loc_turn6(i)-0.5d0*ekont*(s1d+s8d+s12d)
7297 C Derivatives in gamma(i+3)
7299 call transpose2(AEA(1,1,1),auxmatd(1,1))
7300 call matmat2(EUg(1,1,i+1),auxmatd(1,1),auxmatd(1,1))
7301 ss1d=scalar2(Ub2der(1,i+2),b1(1,itl))
7302 s1d = (auxmatd(1,1)+auxmatd(2,2))*ss1d
7306 call matvec2(EUgder(1,1,i+2),b1(1,itl),vtemp1d(1))
7307 call matvec2(AEA(1,1,1),vtemp1d(1),vtemp1d(1))
7308 s2d = scalar2(b1(1,itk),vtemp1d(1))
7310 call matvec2(Ug2der(1,1,i+2),dd(1,1,itk1),vtemp2d(1))
7311 s8d = -(atemp(1,1)+atemp(2,2))*scalar2(cc(1,1,itl),vtemp2d(1))
7313 s12d = scalar2(Ub2der(1,i+2),vtemp3(1))
7315 call matmat2(achuj_temp(1,1),EUgder(1,1,i+2),gtempd(1,1))
7316 call matmat2(gtempd(1,1),EUg(1,1,i+3),gtempd(1,1))
7317 s13d = (gtempd(1,1)+gtempd(2,2))*ss13
7327 gel_loc_turn6(i+1)=gel_loc_turn6(i+1)
7328 & -0.5d0*ekont*(s1d+s2d+s8d+s12d+s13d)
7330 gel_loc_turn6(i+1)=gel_loc_turn6(i+1)
7331 & -0.5d0*ekont*(s2d+s12d)
7333 C Derivatives in gamma(i+4)
7334 call matmat2(EUgder(1,1,i+3),AEA(1,1,2),auxmatd(1,1))
7335 call matvec2(auxmatd(1,1),Ub2(1,i+4),vtemp3d(1))
7336 s12d = scalar2(Ub2(1,i+2),vtemp3d(1))
7338 call matmat2(achuj_temp(1,1),EUg(1,1,i+2),gtempd(1,1))
7339 call matmat2(gtempd(1,1),EUgder(1,1,i+3),gtempd(1,1))
7340 s13d = (gtempd(1,1)+gtempd(2,2))*ss13
7350 gel_loc_turn6(i+2)=gel_loc_turn6(i+2)-0.5d0*ekont*(s12d+s13d)
7352 gel_loc_turn6(i+2)=gel_loc_turn6(i+2)-0.5d0*ekont*(s12d)
7354 C Derivatives in gamma(i+5)
7356 call transpose2(AEAderg(1,1,1),auxmatd(1,1))
7357 call matmat2(EUg(1,1,i+1),auxmatd(1,1),auxmatd(1,1))
7358 s1d = (auxmatd(1,1)+auxmatd(2,2))*ss1
7362 call matvec2(EUg(1,1,i+2),b1(1,itl),vtemp1d(1))
7363 call matvec2(AEAderg(1,1,1),vtemp1d(1),vtemp1d(1))
7364 s2d = scalar2(b1(1,itk),vtemp1d(1))
7366 call transpose2(AEA(1,1,2),atempd(1,1))
7367 call matmat2(atempd(1,1),EUgder(1,1,i+4),atempd(1,1))
7368 s8d = -(atempd(1,1)+atempd(2,2))*scalar2(cc(1,1,itl),vtemp2(1))
7372 call matvec2(auxmat(1,1),Ub2der(1,i+4),vtemp3d(1))
7373 s12d = scalar2(Ub2(1,i+2),vtemp3d(1))
7375 call matvec2(a_chuj(1,1,jj,i),Ub2der(1,i+4),vtemp4d(1))
7376 ss13d = scalar2(b1(1,itk),vtemp4d(1))
7377 s13d = (gtemp(1,1)+gtemp(2,2))*ss13d
7387 gel_loc_turn6(i+3)=gel_loc_turn6(i+3)
7388 & -0.5d0*ekont*(s1d+s2d+s8d+s12d+s13d)
7390 gel_loc_turn6(i+3)=gel_loc_turn6(i+3)
7391 & -0.5d0*ekont*(s2d+s12d)
7393 C Cartesian derivatives
7398 call transpose2(AEAderx(1,1,lll,kkk,iii,1),auxmatd(1,1))
7399 call matmat2(EUg(1,1,i+1),auxmatd(1,1),auxmatd(1,1))
7400 s1d = (auxmatd(1,1)+auxmatd(2,2))*ss1
7404 call matvec2(EUg(1,1,i+2),b1(1,itl),vtemp1(1))
7405 call matvec2(AEAderx(1,1,lll,kkk,iii,1),vtemp1(1),
7407 s2d = scalar2(b1(1,itk),vtemp1d(1))
7409 call transpose2(AEAderx(1,1,lll,kkk,iii,2),atempd(1,1))
7410 call matmat2(atempd(1,1),EUg(1,1,i+4),atempd(1,1))
7411 s8d = -(atempd(1,1)+atempd(2,2))*
7412 & scalar2(cc(1,1,itl),vtemp2(1))
7416 call matmat2(EUg(1,1,i+3),AEAderx(1,1,lll,kkk,iii,2),
7418 call matvec2(auxmatd(1,1),Ub2(1,i+4),vtemp3d(1))
7419 s12d = scalar2(Ub2(1,i+2),vtemp3d(1))
7426 derx_turn(lll,kkk,iii) = derx_turn(lll,kkk,iii)
7429 derx_turn(lll,kkk,iii) = derx_turn(lll,kkk,iii)
7433 derx_turn(lll,kkk,3-iii) = derx_turn(lll,kkk,3-iii)
7434 & - 0.5d0*(s8d+s12d)
7436 derx_turn(lll,kkk,3-iii) = derx_turn(lll,kkk,3-iii)
7445 call transpose2(a_chuj_der(1,1,lll,kkk,kk,i+1),
7447 call matmat2(achuj_tempd(1,1),EUg(1,1,i+2),gtempd(1,1))
7448 call matmat2(gtempd(1,1),EUg(1,1,i+3),gtempd(1,1))
7449 s13d=(gtempd(1,1)+gtempd(2,2))*ss13
7450 derx_turn(lll,kkk,2) = derx_turn(lll,kkk,2)-0.5d0*s13d
7451 call matvec2(a_chuj_der(1,1,lll,kkk,jj,i),Ub2(1,i+4),
7453 ss13d = scalar2(b1(1,itk),vtemp4d(1))
7454 s13d = (gtemp(1,1)+gtemp(2,2))*ss13d
7455 derx_turn(lll,kkk,1) = derx_turn(lll,kkk,1)-0.5d0*s13d
7459 cd write(iout,*) 'eel6_turn6',eel_turn6,' eel_turn6_num',
7460 cd & 16*eel_turn6_num
7462 if (j.lt.nres-1) then
7469 if (l.lt.nres-1) then
7477 ggg1(ll)=eel_turn6*g_contij(ll,1)
7478 ggg2(ll)=eel_turn6*g_contij(ll,2)
7479 ghalf=0.5d0*ggg1(ll)
7481 gcorr6_turn(ll,i)=gcorr6_turn(ll,i)+ghalf
7482 & +ekont*derx_turn(ll,2,1)
7483 gcorr6_turn(ll,i+1)=gcorr6_turn(ll,i+1)+ekont*derx_turn(ll,3,1)
7484 gcorr6_turn(ll,j)=gcorr6_turn(ll,j)+ghalf
7485 & +ekont*derx_turn(ll,4,1)
7486 gcorr6_turn(ll,j1)=gcorr6_turn(ll,j1)+ekont*derx_turn(ll,5,1)
7487 ghalf=0.5d0*ggg2(ll)
7489 gcorr6_turn(ll,k)=gcorr6_turn(ll,k)+ghalf
7490 & +ekont*derx_turn(ll,2,2)
7491 gcorr6_turn(ll,k+1)=gcorr6_turn(ll,k+1)+ekont*derx_turn(ll,3,2)
7492 gcorr6_turn(ll,l)=gcorr6_turn(ll,l)+ghalf
7493 & +ekont*derx_turn(ll,4,2)
7494 gcorr6_turn(ll,l1)=gcorr6_turn(ll,l1)+ekont*derx_turn(ll,5,2)
7499 gcorr6_turn(ll,m)=gcorr6_turn(ll,m)+ggg1(ll)
7504 gcorr6_turn(ll,m)=gcorr6_turn(ll,m)+ggg2(ll)
7510 gcorr6_turn(ll,m)=gcorr6_turn(ll,m)+ekont*derx_turn(ll,1,1)
7515 gcorr6_turn(ll,m)=gcorr6_turn(ll,m)+ekont*derx_turn(ll,1,2)
7519 cd write (2,*) iii,g_corr6_loc(iii)
7522 eello_turn6=ekont*eel_turn6
7523 cd write (2,*) 'ekont',ekont
7524 cd write (2,*) 'eel_turn6',ekont*eel_turn6
7527 crc-------------------------------------------------
7528 SUBROUTINE MATVEC2(A1,V1,V2)
7529 implicit real*8 (a-h,o-z)
7530 include 'DIMENSIONS'
7531 DIMENSION A1(2,2),V1(2),V2(2)
7535 c 3 VI=VI+A1(I,K)*V1(K)
7539 vaux1=a1(1,1)*v1(1)+a1(1,2)*v1(2)
7540 vaux2=a1(2,1)*v1(1)+a1(2,2)*v1(2)
7545 C---------------------------------------
7546 SUBROUTINE MATMAT2(A1,A2,A3)
7547 implicit real*8 (a-h,o-z)
7548 include 'DIMENSIONS'
7549 DIMENSION A1(2,2),A2(2,2),A3(2,2)
7550 c DIMENSION AI3(2,2)
7554 c A3IJ=A3IJ+A1(I,K)*A2(K,J)
7560 ai3_11=a1(1,1)*a2(1,1)+a1(1,2)*a2(2,1)
7561 ai3_12=a1(1,1)*a2(1,2)+a1(1,2)*a2(2,2)
7562 ai3_21=a1(2,1)*a2(1,1)+a1(2,2)*a2(2,1)
7563 ai3_22=a1(2,1)*a2(1,2)+a1(2,2)*a2(2,2)
7571 c-------------------------------------------------------------------------
7572 double precision function scalar2(u,v)
7574 double precision u(2),v(2)
7577 scalar2=u(1)*v(1)+u(2)*v(2)
7581 C-----------------------------------------------------------------------------
7583 subroutine transpose2(a,at)
7585 double precision a(2,2),at(2,2)
7592 c--------------------------------------------------------------------------
7593 subroutine transpose(n,a,at)
7596 double precision a(n,n),at(n,n)
7604 C---------------------------------------------------------------------------
7605 subroutine prodmat3(a1,a2,kk,transp,prod)
7608 double precision a1(2,2),a2(2,2),a2t(2,2),kk(2,2),prod(2,2)
7610 crc double precision auxmat(2,2),prod_(2,2)
7613 crc call transpose2(kk(1,1),auxmat(1,1))
7614 crc call matmat2(a1(1,1),auxmat(1,1),auxmat(1,1))
7615 crc call matmat2(auxmat(1,1),a2(1,1),prod_(1,1))
7617 prod(1,1)=(a1(1,1)*kk(1,1)+a1(1,2)*kk(1,2))*a2(1,1)
7618 & +(a1(1,1)*kk(2,1)+a1(1,2)*kk(2,2))*a2(2,1)
7619 prod(1,2)=(a1(1,1)*kk(1,1)+a1(1,2)*kk(1,2))*a2(1,2)
7620 & +(a1(1,1)*kk(2,1)+a1(1,2)*kk(2,2))*a2(2,2)
7621 prod(2,1)=(a1(2,1)*kk(1,1)+a1(2,2)*kk(1,2))*a2(1,1)
7622 & +(a1(2,1)*kk(2,1)+a1(2,2)*kk(2,2))*a2(2,1)
7623 prod(2,2)=(a1(2,1)*kk(1,1)+a1(2,2)*kk(1,2))*a2(1,2)
7624 & +(a1(2,1)*kk(2,1)+a1(2,2)*kk(2,2))*a2(2,2)
7627 crc call matmat2(a1(1,1),kk(1,1),auxmat(1,1))
7628 crc call matmat2(auxmat(1,1),a2(1,1),prod_(1,1))
7630 prod(1,1)=(a1(1,1)*kk(1,1)+a1(1,2)*kk(2,1))*a2(1,1)
7631 & +(a1(1,1)*kk(1,2)+a1(1,2)*kk(2,2))*a2(2,1)
7632 prod(1,2)=(a1(1,1)*kk(1,1)+a1(1,2)*kk(2,1))*a2(1,2)
7633 & +(a1(1,1)*kk(1,2)+a1(1,2)*kk(2,2))*a2(2,2)
7634 prod(2,1)=(a1(2,1)*kk(1,1)+a1(2,2)*kk(2,1))*a2(1,1)
7635 & +(a1(2,1)*kk(1,2)+a1(2,2)*kk(2,2))*a2(2,1)
7636 prod(2,2)=(a1(2,1)*kk(1,1)+a1(2,2)*kk(2,1))*a2(1,2)
7637 & +(a1(2,1)*kk(1,2)+a1(2,2)*kk(2,2))*a2(2,2)
7640 c call transpose2(a2(1,1),a2t(1,1))
7643 crc print *,((prod_(i,j),i=1,2),j=1,2)
7644 crc print *,((prod(i,j),i=1,2),j=1,2)
7648 C-----------------------------------------------------------------------------
7649 double precision function scalar(u,v)
7651 double precision u(3),v(3)
7661 C-----------------------------------------------------------------------
7662 double precision function sscale(r)
7663 double precision r,gamm
7664 include "COMMON.SPLITELE"
7665 if(r.lt.r_cut-rlamb) then
7667 else if(r.le.r_cut.and.r.ge.r_cut-rlamb) then
7668 gamm=(r-(r_cut-rlamb))/rlamb
7669 sscale=1.0d0+gamm*gamm*(2*gamm-3.0d0)
7675 C-----------------------------------------------------------------------
7676 C-----------------------------------------------------------------------
7677 double precision function sscagrad(r)
7678 double precision r,gamm
7679 include "COMMON.SPLITELE"
7680 if(r.lt.r_cut-rlamb) then
7682 else if(r.le.r_cut.and.r.ge.r_cut-rlamb) then
7683 gamm=(r-(r_cut-rlamb))/rlamb
7684 sscagrad=gamm*(6*gamm-6.0d0)/rlamb
7690 C-----------------------------------------------------------------------