1 subroutine etotal(energia,fact)
2 implicit real*8 (a-h,o-z)
4 include 'DIMENSIONS.ZSCOPT'
10 cMS$ATTRIBUTES C :: proc_proc
13 include 'COMMON.IOUNITS'
14 double precision energia(0:max_ene),energia1(0:max_ene+1)
20 include 'COMMON.FFIELD'
21 include 'COMMON.DERIV'
22 include 'COMMON.INTERACT'
23 include 'COMMON.SBRIDGE'
24 include 'COMMON.CHAIN'
25 include 'COMMON.CONTROL'
26 double precision fact(6)
27 cd write(iout, '(a,i2)')'Calling etotal ipot=',ipot
28 cd print *,'nnt=',nnt,' nct=',nct
30 C Compute the side-chain and electrostatic interaction energy
32 goto (101,102,103,104,105) ipot
33 C Lennard-Jones potential.
34 101 call elj(evdw,evdw_t)
35 cd print '(a)','Exit ELJ'
37 C Lennard-Jones-Kihara potential (shifted).
38 102 call eljk(evdw,evdw_t)
40 C Berne-Pechukas potential (dilated LJ, angular dependence).
41 103 call ebp(evdw,evdw_t)
43 C Gay-Berne potential (shifted LJ, angular dependence).
44 104 call egb(evdw,evdw_t)
46 C Gay-Berne-Vorobjev potential (shifted LJ, angular dependence).
47 105 call egbv(evdw,evdw_t)
49 C Calculate electrostatic (H-bonding) energy of the main chain.
51 106 call eelec(ees,evdw1,eel_loc,eello_turn3,eello_turn4)
53 C Calculate excluded-volume interaction energy between peptide groups
56 call escp(evdw2,evdw2_14)
58 c Calculate the bond-stretching energy
61 c write (iout,*) "estr",estr
63 C Calculate the disulfide-bridge and other energy and the contributions
64 C from other distance constraints.
65 cd print *,'Calling EHPB'
67 cd print *,'EHPB exitted succesfully.'
69 C Calculate the virtual-bond-angle energy.
72 cd print *,'Bend energy finished.'
74 C Calculate the SC local energy.
77 cd print *,'SCLOC energy finished.'
79 C Calculate the virtual-bond torsional energy.
81 cd print *,'nterm=',nterm
82 call etor(etors,edihcnstr,fact(1))
84 C 6/23/01 Calculate double-torsional energy
86 call etor_d(etors_d,fact(2))
88 C 21/5/07 Calculate local sicdechain correlation energy
90 call eback_sc_corr(esccor)
92 C 12/1/95 Multi-body terms
96 if (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0
97 & .or. wturn6.gt.0.0d0) then
98 c print *,"calling multibody_eello"
99 call multibody_eello(ecorr,ecorr5,ecorr6,eturn6,n_corr,n_corr1)
100 c write (*,*) 'n_corr=',n_corr,' n_corr1=',n_corr1
101 c print *,ecorr,ecorr5,ecorr6,eturn6
103 if (wcorr4.eq.0.0d0 .and. wcorr.gt.0.0d0) then
104 call multibody_hb(ecorr,ecorr5,ecorr6,n_corr,n_corr1)
108 c write(iout,*) "TEST_ENE1 constr_homology=",constr_homology
109 if (constr_homology.ge.1) then
110 call e_modeller(ehomology_constr)
115 c write(iout,*) "TEST_ENE1 ehomology_constr=",ehomology_constr
118 c write (iout,*) "ft(6)",fact(6)," evdw",evdw," evdw_t",evdw_t
120 etot=wsc*(evdw+fact(6)*evdw_t)+wscp*evdw2+welec*fact(1)*ees
122 & +wang*ebe+wtor*fact(1)*etors+wscloc*escloc
123 & +wstrain*ehpb+wcorr*fact(3)*ecorr+wcorr5*fact(4)*ecorr5
124 & +wcorr6*fact(5)*ecorr6+wturn4*fact(3)*eello_turn4
125 & +wturn3*fact(2)*eello_turn3+wturn6*fact(5)*eturn6
126 & +wel_loc*fact(2)*eel_loc+edihcnstr+wtor_d*fact(2)*etors_d
127 & +wbond*estr+wsccor*fact(1)*esccor+ehomology_constr
129 etot=wsc*(evdw+fact(6)*evdw_t)+wscp*evdw2
130 & +welec*fact(1)*(ees+evdw1)
131 & +wang*ebe+wtor*fact(1)*etors+wscloc*escloc
132 & +wstrain*ehpb+wcorr*fact(3)*ecorr+wcorr5*fact(4)*ecorr5
133 & +wcorr6*fact(5)*ecorr6+wturn4*fact(3)*eello_turn4
134 & +wturn3*fact(2)*eello_turn3+wturn6*fact(5)*eturn6
135 & +wel_loc*fact(2)*eel_loc+edihcnstr+wtor_d*fact(2)*etors_d
136 & +wbond*estr+wsccor*fact(1)*esccor+ehomology_constr
141 energia(2)=evdw2-evdw2_14
158 energia(8)=eello_turn3
159 energia(9)=eello_turn4
168 energia(20)=edihcnstr
170 energia(22)=ehomology_constr
171 c if (dyn_ss) call dyn_set_nss
175 if (isnan(etot).ne.0) energia(0)=1.0d+99
177 if (isnan(etot)) energia(0)=1.0d+99
182 idumm=proc_proc(etot,i)
184 call proc_proc(etot,i)
186 if(i.eq.1)energia(0)=1.0d+99
193 C Sum up the components of the Cartesian gradient.
198 gradc(j,i,icg)=wsc*gvdwc(j,i)+wscp*gvdwc_scp(j,i)+
199 & welec*fact(1)*gelc(j,i)+wvdwpp*gvdwpp(j,i)+
201 & wstrain*ghpbc(j,i)+
202 & wcorr*fact(3)*gradcorr(j,i)+
203 & wel_loc*fact(2)*gel_loc(j,i)+
204 & wturn3*fact(2)*gcorr3_turn(j,i)+
205 & wturn4*fact(3)*gcorr4_turn(j,i)+
206 & wcorr5*fact(4)*gradcorr5(j,i)+
207 & wcorr6*fact(5)*gradcorr6(j,i)+
208 & wturn6*fact(5)*gcorr6_turn(j,i)+
209 & wsccor*fact(2)*gsccorc(j,i)
210 gradx(j,i,icg)=wsc*gvdwx(j,i)+wscp*gradx_scp(j,i)+
212 & wstrain*ghpbx(j,i)+wcorr*gradxorr(j,i)+
213 & wsccor*fact(2)*gsccorx(j,i)
218 gradc(j,i,icg)=wsc*gvdwc(j,i)+wscp*gvdwc_scp(j,i)+
219 & welec*fact(1)*gelc(j,i)+wstrain*ghpbc(j,i)+
221 & wcorr*fact(3)*gradcorr(j,i)+
222 & wel_loc*fact(2)*gel_loc(j,i)+
223 & wturn3*fact(2)*gcorr3_turn(j,i)+
224 & wturn4*fact(3)*gcorr4_turn(j,i)+
225 & wcorr5*fact(4)*gradcorr5(j,i)+
226 & wcorr6*fact(5)*gradcorr6(j,i)+
227 & wturn6*fact(5)*gcorr6_turn(j,i)+
228 & wsccor*fact(2)*gsccorc(j,i)
229 gradx(j,i,icg)=wsc*gvdwx(j,i)+wscp*gradx_scp(j,i)+
231 & wstrain*ghpbx(j,i)+wcorr*gradxorr(j,i)+
232 & wsccor*fact(1)*gsccorx(j,i)
239 gloc(i,icg)=gloc(i,icg)+wcorr*fact(3)*gcorr_loc(i)
240 & +wcorr5*fact(4)*g_corr5_loc(i)
241 & +wcorr6*fact(5)*g_corr6_loc(i)
242 & +wturn4*fact(3)*gel_loc_turn4(i)
243 & +wturn3*fact(2)*gel_loc_turn3(i)
244 & +wturn6*fact(5)*gel_loc_turn6(i)
245 & +wel_loc*fact(2)*gel_loc_loc(i)
246 & +wsccor*fact(1)*gsccor_loc(i)
251 C------------------------------------------------------------------------
252 subroutine enerprint(energia,fact)
253 implicit real*8 (a-h,o-z)
255 include 'DIMENSIONS.ZSCOPT'
256 include 'COMMON.IOUNITS'
257 include 'COMMON.FFIELD'
258 include 'COMMON.SBRIDGE'
259 double precision energia(0:max_ene),fact(6)
261 evdw=energia(1)+fact(6)*energia(21)
263 evdw2=energia(2)+energia(17)
275 eello_turn3=energia(8)
276 eello_turn4=energia(9)
277 eello_turn6=energia(10)
284 edihcnstr=energia(20)
286 ehomology_constr=energia(22)
288 write (iout,10) evdw,wsc,evdw2,wscp,ees,welec*fact(1),evdw1,
290 & estr,wbond,ebe,wang,escloc,wscloc,etors,wtor*fact(1),
291 & etors_d,wtor_d*fact(2),ehpb,wstrain,
292 & ecorr,wcorr*fact(3),ecorr5,wcorr5*fact(4),ecorr6,wcorr6*fact(5),
293 & eel_loc,wel_loc*fact(2),eello_turn3,wturn3*fact(2),
294 & eello_turn4,wturn4*fact(3),eello_turn6,wturn6*fact(5),
295 & esccor,wsccor*fact(1),edihcnstr,ehomology_constr,ebr*nss,etot
296 10 format (/'Virtual-chain energies:'//
297 & 'EVDW= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC-SC)'/
298 & 'EVDW2= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC-p)'/
299 & 'EES= ',1pE16.6,' WEIGHT=',1pD16.6,' (p-p elec)'/
300 & 'EVDWPP=',1pE16.6,' WEIGHT=',1pD16.6,' (p-p VDW)'/
301 & 'ESTR= ',1pE16.6,' WEIGHT=',1pD16.6,' (stretching)'/
302 & 'EBE= ',1pE16.6,' WEIGHT=',1pD16.6,' (bending)'/
303 & 'ESC= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC local)'/
304 & 'ETORS= ',1pE16.6,' WEIGHT=',1pD16.6,' (torsional)'/
305 & 'ETORSD=',1pE16.6,' WEIGHT=',1pD16.6,' (double torsional)'/
306 & 'EHBP= ',1pE16.6,' WEIGHT=',1pD16.6,
307 & ' (SS bridges & dist. cnstr.)'/
308 & 'ECORR4=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
309 & 'ECORR5=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
310 & 'ECORR6=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
311 & 'EELLO= ',1pE16.6,' WEIGHT=',1pD16.6,' (electrostatic-local)'/
312 & 'ETURN3=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 3rd order)'/
313 & 'ETURN4=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 4th order)'/
314 & 'ETURN6=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 6th order)'/
315 & 'ESCCOR=',1pE16.6,' WEIGHT=',1pD16.6,' (backbone-rotamer corr)'/
316 & 'EDIHC= ',1pE16.6,' (dihedral angle constraints)'/
317 & 'H_CONS=',1pE16.6,' (Homology model constraints energy)'/
318 & 'ESS= ',1pE16.6,' (disulfide-bridge intrinsic energy)'/
319 & 'ETOT= ',1pE16.6,' (total)')
321 write (iout,10) evdw,wsc,evdw2,wscp,ees,welec*fact(1),estr,wbond,
322 & ebe,wang,escloc,wscloc,etors,wtor*fact(1),etors_d,wtor_d*fact2,
323 & ehpb,wstrain,ecorr,wcorr*fact(3),ecorr5,wcorr5*fact(4),
324 & ecorr6,wcorr6*fact(5),eel_loc,wel_loc*fact(2),
325 & eello_turn3,wturn3*fact(2),eello_turn4,wturn4*fact(3),
326 & eello_turn6,wturn6*fact(5),esccor*fact(1),wsccor,
327 & edihcnstr,ehomology_constr,ebr*nss,etot
328 10 format (/'Virtual-chain energies:'//
329 & 'EVDW= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC-SC)'/
330 & 'EVDW2= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC-p)'/
331 & 'EES= ',1pE16.6,' WEIGHT=',1pD16.6,' (p-p)'/
332 & 'ESTR= ',1pE16.6,' WEIGHT=',1pD16.6,' (stretching)'/
333 & 'EBE= ',1pE16.6,' WEIGHT=',1pD16.6,' (bending)'/
334 & 'ESC= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC local)'/
335 & 'ETORS= ',1pE16.6,' WEIGHT=',1pD16.6,' (torsional)'/
336 & 'ETORSD=',1pE16.6,' WEIGHT=',1pD16.6,' (double torsional)'/
337 & 'EHBP= ',1pE16.6,' WEIGHT=',1pD16.6,
338 & ' (SS bridges & dist. cnstr.)'/
339 & 'ECORR4=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
340 & 'ECORR5=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
341 & 'ECORR6=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
342 & 'EELLO= ',1pE16.6,' WEIGHT=',1pD16.6,' (electrostatic-local)'/
343 & 'ETURN3=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 3rd order)'/
344 & 'ETURN4=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 4th order)'/
345 & 'ETURN6=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 6th order)'/
346 & 'ESCCOR=',1pE16.6,' WEIGHT=',1pD16.6,' (backbone-rotamer corr)'/
347 & 'EDIHC= ',1pE16.6,' (dihedral angle constraints)'/
348 & 'H_CONS=',1pE16.6,' (Homology model constraints energy)'/
349 & 'ESS= ',1pE16.6,' (disulfide-bridge intrinsic energy)'/
350 & 'ETOT= ',1pE16.6,' (total)')
354 C-----------------------------------------------------------------------
355 subroutine elj(evdw,evdw_t)
357 C This subroutine calculates the interaction energy of nonbonded side chains
358 C assuming the LJ potential of interaction.
360 implicit real*8 (a-h,o-z)
362 include 'DIMENSIONS.ZSCOPT'
363 include "DIMENSIONS.COMPAR"
364 parameter (accur=1.0d-10)
367 include 'COMMON.LOCAL'
368 include 'COMMON.CHAIN'
369 include 'COMMON.DERIV'
370 include 'COMMON.INTERACT'
371 include 'COMMON.TORSION'
372 include 'COMMON.ENEPS'
373 include 'COMMON.SBRIDGE'
374 include 'COMMON.NAMES'
375 include 'COMMON.IOUNITS'
376 include 'COMMON.CONTACTS'
380 cd print *,'Entering ELJ nnt=',nnt,' nct=',nct,' expon=',expon
383 eneps_temp(j,i)=0.0d0
397 C Calculate SC interaction energy.
400 cd write (iout,*) 'i=',i,' iint=',iint,' istart=',istart(i,iint),
401 cd & 'iend=',iend(i,iint)
402 do j=istart(i,iint),iend(i,iint)
407 C Change 12/1/95 to calculate four-body interactions
408 rij=xj*xj+yj*yj+zj*zj
410 c write (iout,*)'i=',i,' j=',j,' itypi=',itypi,' itypj=',itypj
411 eps0ij=eps(itypi,itypj)
413 e1=fac*fac*aa(itypi,itypj)
414 e2=fac*bb(itypi,itypj)
416 ij=icant(itypi,itypj)
417 eneps_temp(1,ij)=eneps_temp(1,ij)+e1/dabs(eps0ij)
418 eneps_temp(2,ij)=eneps_temp(2,ij)+e2/eps0ij
419 cd sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
420 cd epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
421 cd write (iout,'(2(a3,i3,2x),6(1pd12.4)/2(3(1pd12.4),5x)/)')
422 cd & restyp(itypi),i,restyp(itypj),j,aa(itypi,itypj),
423 cd & bb(itypi,itypj),1.0D0/dsqrt(rrij),evdwij,epsi,sigm,
424 cd & (c(k,i),k=1,3),(c(k,j),k=1,3)
425 if (bb(itypi,itypj).gt.0.0d0) then
432 C Calculate the components of the gradient in DC and X
434 fac=-rrij*(e1+evdwij)
439 gvdwx(k,i)=gvdwx(k,i)-gg(k)
440 gvdwx(k,j)=gvdwx(k,j)+gg(k)
444 gvdwc(l,k)=gvdwc(l,k)+gg(l)
449 C 12/1/95, revised on 5/20/97
451 C Calculate the contact function. The ith column of the array JCONT will
452 C contain the numbers of atoms that make contacts with the atom I (of numbers
453 C greater than I). The arrays FACONT and GACONT will contain the values of
454 C the contact function and its derivative.
456 C Uncomment next line, if the correlation interactions include EVDW explicitly.
457 c if (j.gt.i+1 .and. evdwij.le.0.0D0) then
458 C Uncomment next line, if the correlation interactions are contact function only
459 if (j.gt.i+1.and. eps0ij.gt.0.0D0) then
461 sigij=sigma(itypi,itypj)
462 r0ij=rs0(itypi,itypj)
464 C Check whether the SC's are not too far to make a contact.
467 call gcont(rij,rcut,1.0d0,0.2d0*rcut,fcont,fprimcont)
468 C Add a new contact, if the SC's are close enough, but not too close (r<sigma).
470 if (fcont.gt.0.0D0) then
471 C If the SC-SC distance if close to sigma, apply spline.
472 cAdam call gcont(-rij,-1.03d0*sigij,2.0d0*sigij,1.0d0,
473 cAdam & fcont1,fprimcont1)
474 cAdam fcont1=1.0d0-fcont1
475 cAdam if (fcont1.gt.0.0d0) then
476 cAdam fprimcont=fprimcont*fcont1+fcont*fprimcont1
477 cAdam fcont=fcont*fcont1
479 C Uncomment following 4 lines to have the geometric average of the epsilon0's
480 cga eps0ij=1.0d0/dsqrt(eps0ij)
482 cga gg(k)=gg(k)*eps0ij
484 cga eps0ij=-evdwij*eps0ij
485 C Uncomment for AL's type of SC correlation interactions.
487 num_conti=num_conti+1
489 facont(num_conti,i)=fcont*eps0ij
490 fprimcont=eps0ij*fprimcont/rij
492 cAdam gacont(1,num_conti,i)=-fprimcont*xj+fcont*gg(1)
493 cAdam gacont(2,num_conti,i)=-fprimcont*yj+fcont*gg(2)
494 cAdam gacont(3,num_conti,i)=-fprimcont*zj+fcont*gg(3)
495 C Uncomment following 3 lines for Skolnick's type of SC correlation.
496 gacont(1,num_conti,i)=-fprimcont*xj
497 gacont(2,num_conti,i)=-fprimcont*yj
498 gacont(3,num_conti,i)=-fprimcont*zj
499 cd write (iout,'(2i5,2f10.5)') i,j,rij,facont(num_conti,i)
500 cd write (iout,'(2i3,3f10.5)')
501 cd & i,j,(gacont(kk,num_conti,i),kk=1,3)
507 num_cont(i)=num_conti
512 gvdwc(j,i)=expon*gvdwc(j,i)
513 gvdwx(j,i)=expon*gvdwx(j,i)
517 C******************************************************************************
521 C To save time, the factor of EXPON has been extracted from ALL components
522 C of GVDWC and GRADX. Remember to multiply them by this factor before further
525 C******************************************************************************
528 C-----------------------------------------------------------------------------
529 subroutine eljk(evdw,evdw_t)
531 C This subroutine calculates the interaction energy of nonbonded side chains
532 C assuming the LJK potential of interaction.
534 implicit real*8 (a-h,o-z)
536 include 'DIMENSIONS.ZSCOPT'
537 include "DIMENSIONS.COMPAR"
540 include 'COMMON.LOCAL'
541 include 'COMMON.CHAIN'
542 include 'COMMON.DERIV'
543 include 'COMMON.INTERACT'
544 include 'COMMON.ENEPS'
545 include 'COMMON.IOUNITS'
546 include 'COMMON.NAMES'
551 c print *,'Entering ELJK nnt=',nnt,' nct=',nct,' expon=',expon
554 eneps_temp(j,i)=0.0d0
566 C Calculate SC interaction energy.
569 do j=istart(i,iint),iend(i,iint)
574 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
576 e_augm=augm(itypi,itypj)*fac_augm
579 r_shift_inv=1.0D0/(rij+r0(itypi,itypj)-sigma(itypi,itypj))
580 fac=r_shift_inv**expon
581 e1=fac*fac*aa(itypi,itypj)
582 e2=fac*bb(itypi,itypj)
584 ij=icant(itypi,itypj)
585 eneps_temp(1,ij)=eneps_temp(1,ij)+(e1+a_augm)
586 & /dabs(eps(itypi,itypj))
587 eneps_temp(2,ij)=eneps_temp(2,ij)+e2/eps(itypi,itypj)
588 cd sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
589 cd epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
590 cd write (iout,'(2(a3,i3,2x),8(1pd12.4)/2(3(1pd12.4),5x)/)')
591 cd & restyp(itypi),i,restyp(itypj),j,aa(itypi,itypj),
592 cd & bb(itypi,itypj),augm(itypi,itypj),epsi,sigm,
593 cd & sigma(itypi,itypj),1.0D0/dsqrt(rrij),evdwij,
594 cd & (c(k,i),k=1,3),(c(k,j),k=1,3)
595 if (bb(itypi,itypj).gt.0.0d0) then
602 C Calculate the components of the gradient in DC and X
604 fac=-2.0D0*rrij*e_augm-r_inv_ij*r_shift_inv*(e1+e1+e2)
609 gvdwx(k,i)=gvdwx(k,i)-gg(k)
610 gvdwx(k,j)=gvdwx(k,j)+gg(k)
614 gvdwc(l,k)=gvdwc(l,k)+gg(l)
624 gvdwc(j,i)=expon*gvdwc(j,i)
625 gvdwx(j,i)=expon*gvdwx(j,i)
631 C-----------------------------------------------------------------------------
632 subroutine ebp(evdw,evdw_t)
634 C This subroutine calculates the interaction energy of nonbonded side chains
635 C assuming the Berne-Pechukas potential of interaction.
637 implicit real*8 (a-h,o-z)
639 include 'DIMENSIONS.ZSCOPT'
640 include "DIMENSIONS.COMPAR"
643 include 'COMMON.LOCAL'
644 include 'COMMON.CHAIN'
645 include 'COMMON.DERIV'
646 include 'COMMON.NAMES'
647 include 'COMMON.INTERACT'
648 include 'COMMON.ENEPS'
649 include 'COMMON.IOUNITS'
650 include 'COMMON.CALC'
652 c double precision rrsave(maxdim)
658 eneps_temp(j,i)=0.0d0
663 c print *,'Entering EBP nnt=',nnt,' nct=',nct,' expon=',expon
664 c if (icall.eq.0) then
676 dxi=dc_norm(1,nres+i)
677 dyi=dc_norm(2,nres+i)
678 dzi=dc_norm(3,nres+i)
679 dsci_inv=vbld_inv(i+nres)
681 C Calculate SC interaction energy.
684 do j=istart(i,iint),iend(i,iint)
687 dscj_inv=vbld_inv(j+nres)
688 chi1=chi(itypi,itypj)
689 chi2=chi(itypj,itypi)
696 alf12=0.5D0*(alf1+alf2)
697 C For diagnostics only!!!
710 dxj=dc_norm(1,nres+j)
711 dyj=dc_norm(2,nres+j)
712 dzj=dc_norm(3,nres+j)
713 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
714 cd if (icall.eq.0) then
720 C Calculate the angle-dependent terms of energy & contributions to derivatives.
722 C Calculate whole angle-dependent part of epsilon and contributions
724 fac=(rrij*sigsq)**expon2
725 e1=fac*fac*aa(itypi,itypj)
726 e2=fac*bb(itypi,itypj)
727 evdwij=eps1*eps2rt*eps3rt*(e1+e2)
728 eps2der=evdwij*eps3rt
729 eps3der=evdwij*eps2rt
730 evdwij=evdwij*eps2rt*eps3rt
731 ij=icant(itypi,itypj)
732 aux=eps1*eps2rt**2*eps3rt**2
733 eneps_temp(1,ij)=eneps_temp(1,ij)+e1*aux
734 & /dabs(eps(itypi,itypj))
735 eneps_temp(2,ij)=eneps_temp(2,ij)+e2*aux/eps(itypi,itypj)
736 if (bb(itypi,itypj).gt.0.0d0) then
743 sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
744 epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
745 cd write (iout,'(2(a3,i3,2x),15(0pf7.3))')
746 cd & restyp(itypi),i,restyp(itypj),j,
747 cd & epsi,sigm,chi1,chi2,chip1,chip2,
748 cd & eps1,eps2rt**2,eps3rt**2,1.0D0/dsqrt(sigsq),
749 cd & om1,om2,om12,1.0D0/dsqrt(rrij),
752 C Calculate gradient components.
753 e1=e1*eps1*eps2rt**2*eps3rt**2
754 fac=-expon*(e1+evdwij)
757 C Calculate radial part of the gradient
761 C Calculate the angular part of the gradient and sum add the contributions
762 C to the appropriate components of the Cartesian gradient.
771 C-----------------------------------------------------------------------------
772 subroutine egb(evdw,evdw_t)
774 C This subroutine calculates the interaction energy of nonbonded side chains
775 C assuming the Gay-Berne potential of interaction.
777 implicit real*8 (a-h,o-z)
779 include 'DIMENSIONS.ZSCOPT'
780 include "DIMENSIONS.COMPAR"
783 include 'COMMON.LOCAL'
784 include 'COMMON.CHAIN'
785 include 'COMMON.DERIV'
786 include 'COMMON.NAMES'
787 include 'COMMON.INTERACT'
788 include 'COMMON.ENEPS'
789 include 'COMMON.IOUNITS'
790 include 'COMMON.CALC'
791 include 'COMMON.SBRIDGE'
798 eneps_temp(j,i)=0.0d0
801 c print *,'Entering EGB nnt=',nnt,' nct=',nct,' expon=',expon
805 c if (icall.gt.0) lprn=.true.
813 dxi=dc_norm(1,nres+i)
814 dyi=dc_norm(2,nres+i)
815 dzi=dc_norm(3,nres+i)
816 dsci_inv=vbld_inv(i+nres)
818 C Calculate SC interaction energy.
821 do j=istart(i,iint),iend(i,iint)
822 C in case of diagnostics write (iout,*) "TU SZUKAJ",i,j,dyn_ss_mask(i),dyn_ss_mask(j)
823 C /06/28/2013 Adasko: In case of dyn_ss - dynamic disulfide bond
824 C formation no electrostatic interactions should be calculated. If it
825 C would be allowed NaN would appear
826 IF (dyn_ss_mask(i).and.dyn_ss_mask(j)) THEN
827 C /06/28/2013 Adasko: dyn_ss_mask is logical statement wheather this Cys
828 C residue can or cannot form disulfide bond. There is still bug allowing
829 C Cys...Cys...Cys bond formation
830 call dyn_ssbond_ene(i,j,evdwij)
831 C /06/28/2013 Adasko: dyn_ssbond_ene is dynamic SS bond foration energy
834 c if (energy_dec) write (iout,'(a6,2i5,0pf7.3,a3)')
835 c & 'evdw',i,j,evdwij,' ss'
839 dscj_inv=vbld_inv(j+nres)
840 sig0ij=sigma(itypi,itypj)
841 chi1=chi(itypi,itypj)
842 chi2=chi(itypj,itypi)
849 alf12=0.5D0*(alf1+alf2)
850 C For diagnostics only!!!
863 dxj=dc_norm(1,nres+j)
864 dyj=dc_norm(2,nres+j)
865 dzj=dc_norm(3,nres+j)
866 c write (iout,*) i,j,xj,yj,zj
867 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
869 C Calculate angle-dependent terms of energy and contributions to their
873 sig=sig0ij*dsqrt(sigsq)
874 rij_shift=1.0D0/rij-sig+sig0ij
875 C I hate to put IF's in the loops, but here don't have another choice!!!!
876 if (rij_shift.le.0.0D0) then
881 c---------------------------------------------------------------
882 rij_shift=1.0D0/rij_shift
884 e1=fac*fac*aa(itypi,itypj)
885 e2=fac*bb(itypi,itypj)
886 evdwij=eps1*eps2rt*eps3rt*(e1+e2)
887 eps2der=evdwij*eps3rt
888 eps3der=evdwij*eps2rt
889 evdwij=evdwij*eps2rt*eps3rt
890 if (bb(itypi,itypj).gt.0) then
895 ij=icant(itypi,itypj)
896 aux=eps1*eps2rt**2*eps3rt**2
897 eneps_temp(1,ij)=eneps_temp(1,ij)+aux*e1
898 & /dabs(eps(itypi,itypj))
899 eneps_temp(2,ij)=eneps_temp(2,ij)+aux*e2/eps(itypi,itypj)
900 c write (iout,*) "i",i," j",j," itypi",itypi," itypj",itypj,
901 c & " ij",ij," eneps",aux*e1/dabs(eps(itypi,itypj)),
902 c & aux*e2/eps(itypi,itypj)
903 c write (iout,'(a6,2i5,0pf7.3)') 'evdw',i,j,evdwij
905 sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
906 epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
907 write (iout,'(2(a3,i3,2x),17(0pf7.3))')
908 & restyp(itypi),i,restyp(itypj),j,
909 & epsi,sigm,chi1,chi2,chip1,chip2,
910 & eps1,eps2rt**2,eps3rt**2,sig,sig0ij,
911 & om1,om2,om12,1.0D0/rij,1.0D0/rij_shift,
915 C Calculate gradient components.
916 e1=e1*eps1*eps2rt**2*eps3rt**2
917 fac=-expon*(e1+evdwij)*rij_shift
920 C Calculate the radial part of the gradient
924 C Calculate angular part of the gradient.
933 C-----------------------------------------------------------------------------
934 subroutine egbv(evdw,evdw_t)
936 C This subroutine calculates the interaction energy of nonbonded side chains
937 C assuming the Gay-Berne-Vorobjev potential of interaction.
939 implicit real*8 (a-h,o-z)
941 include 'DIMENSIONS.ZSCOPT'
942 include "DIMENSIONS.COMPAR"
945 include 'COMMON.LOCAL'
946 include 'COMMON.CHAIN'
947 include 'COMMON.DERIV'
948 include 'COMMON.NAMES'
949 include 'COMMON.INTERACT'
950 include 'COMMON.ENEPS'
951 include 'COMMON.IOUNITS'
952 include 'COMMON.CALC'
959 eneps_temp(j,i)=0.0d0
964 c print *,'Entering EGB nnt=',nnt,' nct=',nct,' expon=',expon
967 c if (icall.gt.0) lprn=.true.
975 dxi=dc_norm(1,nres+i)
976 dyi=dc_norm(2,nres+i)
977 dzi=dc_norm(3,nres+i)
978 dsci_inv=vbld_inv(i+nres)
980 C Calculate SC interaction energy.
983 do j=istart(i,iint),iend(i,iint)
986 dscj_inv=vbld_inv(j+nres)
987 sig0ij=sigma(itypi,itypj)
989 chi1=chi(itypi,itypj)
990 chi2=chi(itypj,itypi)
997 alf12=0.5D0*(alf1+alf2)
998 C For diagnostics only!!!
1011 dxj=dc_norm(1,nres+j)
1012 dyj=dc_norm(2,nres+j)
1013 dzj=dc_norm(3,nres+j)
1014 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
1016 C Calculate angle-dependent terms of energy and contributions to their
1020 sig=sig0ij*dsqrt(sigsq)
1021 rij_shift=1.0D0/rij-sig+r0ij
1022 C I hate to put IF's in the loops, but here don't have another choice!!!!
1023 if (rij_shift.le.0.0D0) then
1028 c---------------------------------------------------------------
1029 rij_shift=1.0D0/rij_shift
1030 fac=rij_shift**expon
1031 e1=fac*fac*aa(itypi,itypj)
1032 e2=fac*bb(itypi,itypj)
1033 evdwij=eps1*eps2rt*eps3rt*(e1+e2)
1034 eps2der=evdwij*eps3rt
1035 eps3der=evdwij*eps2rt
1036 fac_augm=rrij**expon
1037 e_augm=augm(itypi,itypj)*fac_augm
1038 evdwij=evdwij*eps2rt*eps3rt
1039 if (bb(itypi,itypj).gt.0.0d0) then
1040 evdw=evdw+evdwij+e_augm
1042 evdw_t=evdw_t+evdwij+e_augm
1044 ij=icant(itypi,itypj)
1045 aux=eps1*eps2rt**2*eps3rt**2
1046 eneps_temp(1,ij)=eneps_temp(1,ij)+aux*(e1+e_augm)
1047 & /dabs(eps(itypi,itypj))
1048 eneps_temp(2,ij)=eneps_temp(2,ij)+aux*e2/eps(itypi,itypj)
1049 c eneps_temp(ij)=eneps_temp(ij)
1050 c & +(evdwij+e_augm)/eps(itypi,itypj)
1052 c sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
1053 c epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
1054 c write (iout,'(2(a3,i3,2x),17(0pf7.3))')
1055 c & restyp(itypi),i,restyp(itypj),j,
1056 c & epsi,sigm,sig,(augm(itypi,itypj)/epsi)**(1.0D0/12.0D0),
1057 c & chi1,chi2,chip1,chip2,
1058 c & eps1,eps2rt**2,eps3rt**2,
1059 c & om1,om2,om12,1.0D0/rij,1.0D0/rij_shift,
1063 C Calculate gradient components.
1064 e1=e1*eps1*eps2rt**2*eps3rt**2
1065 fac=-expon*(e1+evdwij)*rij_shift
1067 fac=rij*fac-2*expon*rrij*e_augm
1068 C Calculate the radial part of the gradient
1072 C Calculate angular part of the gradient.
1080 C-----------------------------------------------------------------------------
1081 subroutine sc_angular
1082 C Calculate eps1,eps2,eps3,sigma, and parts of their derivatives in om1,om2,
1083 C om12. Called by ebp, egb, and egbv.
1085 include 'COMMON.CALC'
1089 om1=dxi*erij(1)+dyi*erij(2)+dzi*erij(3)
1090 om2=dxj*erij(1)+dyj*erij(2)+dzj*erij(3)
1091 om12=dxi*dxj+dyi*dyj+dzi*dzj
1093 C Calculate eps1(om12) and its derivative in om12
1094 faceps1=1.0D0-om12*chiom12
1095 faceps1_inv=1.0D0/faceps1
1096 eps1=dsqrt(faceps1_inv)
1097 C Following variable is eps1*deps1/dom12
1098 eps1_om12=faceps1_inv*chiom12
1099 C Calculate sigma(om1,om2,om12) and the derivatives of sigma**2 in om1,om2,
1104 facsig=om1*chiom1+om2*chiom2-2.0D0*om1om2*chiom12
1105 sigsq=1.0D0-facsig*faceps1_inv
1106 sigsq_om1=(chiom1-chiom12*om2)*faceps1_inv
1107 sigsq_om2=(chiom2-chiom12*om1)*faceps1_inv
1108 sigsq_om12=-chi12*(om1om2*faceps1-om12*facsig)*faceps1_inv**2
1109 C Calculate eps2 and its derivatives in om1, om2, and om12.
1112 chipom12=chip12*om12
1113 facp=1.0D0-om12*chipom12
1115 facp1=om1*chipom1+om2*chipom2-2.0D0*om1om2*chipom12
1116 C Following variable is the square root of eps2
1117 eps2rt=1.0D0-facp1*facp_inv
1118 C Following three variables are the derivatives of the square root of eps
1119 C in om1, om2, and om12.
1120 eps2rt_om1=-4.0D0*(chipom1-chipom12*om2)*facp_inv
1121 eps2rt_om2=-4.0D0*(chipom2-chipom12*om1)*facp_inv
1122 eps2rt_om12=4.0D0*chip12*(om1om2*facp-om12*facp1)*facp_inv**2
1123 C Evaluate the "asymmetric" factor in the VDW constant, eps3
1124 eps3rt=1.0D0-alf1*om1+alf2*om2-alf12*om12
1125 C Calculate whole angle-dependent part of epsilon and contributions
1126 C to its derivatives
1129 C----------------------------------------------------------------------------
1131 implicit real*8 (a-h,o-z)
1132 include 'DIMENSIONS'
1133 include 'DIMENSIONS.ZSCOPT'
1134 include 'COMMON.CHAIN'
1135 include 'COMMON.DERIV'
1136 include 'COMMON.CALC'
1137 double precision dcosom1(3),dcosom2(3)
1138 eom1=eps2der*eps2rt_om1-2.0D0*alf1*eps3der+sigder*sigsq_om1
1139 eom2=eps2der*eps2rt_om2+2.0D0*alf2*eps3der+sigder*sigsq_om2
1140 eom12=evdwij*eps1_om12+eps2der*eps2rt_om12
1141 & -2.0D0*alf12*eps3der+sigder*sigsq_om12
1143 dcosom1(k)=rij*(dc_norm(k,nres+i)-om1*erij(k))
1144 dcosom2(k)=rij*(dc_norm(k,nres+j)-om2*erij(k))
1147 gg(k)=gg(k)+eom1*dcosom1(k)+eom2*dcosom2(k)
1150 gvdwx(k,i)=gvdwx(k,i)-gg(k)
1151 & +(eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,nres+i))
1152 & +eom1*(erij(k)-om1*dc_norm(k,nres+i)))*dsci_inv
1153 gvdwx(k,j)=gvdwx(k,j)+gg(k)
1154 & +(eom12*(dc_norm(k,nres+i)-om12*dc_norm(k,nres+j))
1155 & +eom2*(erij(k)-om2*dc_norm(k,nres+j)))*dscj_inv
1158 C Calculate the components of the gradient in DC and X
1162 gvdwc(l,k)=gvdwc(l,k)+gg(l)
1167 c------------------------------------------------------------------------------
1168 subroutine vec_and_deriv
1169 implicit real*8 (a-h,o-z)
1170 include 'DIMENSIONS'
1171 include 'DIMENSIONS.ZSCOPT'
1172 include 'COMMON.IOUNITS'
1173 include 'COMMON.GEO'
1174 include 'COMMON.VAR'
1175 include 'COMMON.LOCAL'
1176 include 'COMMON.CHAIN'
1177 include 'COMMON.VECTORS'
1178 include 'COMMON.DERIV'
1179 include 'COMMON.INTERACT'
1180 dimension uyder(3,3,2),uzder(3,3,2),vbld_inv_temp(2)
1181 C Compute the local reference systems. For reference system (i), the
1182 C X-axis points from CA(i) to CA(i+1), the Y axis is in the
1183 C CA(i)-CA(i+1)-CA(i+2) plane, and the Z axis is perpendicular to this plane.
1185 c if (i.eq.nres-1 .or. itel(i+1).eq.0) then
1186 if (i.eq.nres-1) then
1187 C Case of the last full residue
1188 C Compute the Z-axis
1189 call vecpr(dc_norm(1,i),dc_norm(1,i-1),uz(1,i))
1190 costh=dcos(pi-theta(nres))
1191 fac=1.0d0/dsqrt(1.0d0-costh*costh)
1196 C Compute the derivatives of uz
1198 uzder(2,1,1)=-dc_norm(3,i-1)
1199 uzder(3,1,1)= dc_norm(2,i-1)
1200 uzder(1,2,1)= dc_norm(3,i-1)
1202 uzder(3,2,1)=-dc_norm(1,i-1)
1203 uzder(1,3,1)=-dc_norm(2,i-1)
1204 uzder(2,3,1)= dc_norm(1,i-1)
1207 uzder(2,1,2)= dc_norm(3,i)
1208 uzder(3,1,2)=-dc_norm(2,i)
1209 uzder(1,2,2)=-dc_norm(3,i)
1211 uzder(3,2,2)= dc_norm(1,i)
1212 uzder(1,3,2)= dc_norm(2,i)
1213 uzder(2,3,2)=-dc_norm(1,i)
1216 C Compute the Y-axis
1219 uy(k,i)=fac*(dc_norm(k,i-1)-costh*dc_norm(k,i))
1222 C Compute the derivatives of uy
1225 uyder(k,j,1)=2*dc_norm(k,i-1)*dc_norm(j,i)
1226 & -dc_norm(k,i)*dc_norm(j,i-1)
1227 uyder(k,j,2)=-dc_norm(j,i)*dc_norm(k,i)
1229 uyder(j,j,1)=uyder(j,j,1)-costh
1230 uyder(j,j,2)=1.0d0+uyder(j,j,2)
1235 uygrad(l,k,j,i)=uyder(l,k,j)
1236 uzgrad(l,k,j,i)=uzder(l,k,j)
1240 call unormderiv(uy(1,i),uyder(1,1,1),facy,uygrad(1,1,1,i))
1241 call unormderiv(uy(1,i),uyder(1,1,2),facy,uygrad(1,1,2,i))
1242 call unormderiv(uz(1,i),uzder(1,1,1),fac,uzgrad(1,1,1,i))
1243 call unormderiv(uz(1,i),uzder(1,1,2),fac,uzgrad(1,1,2,i))
1247 C Compute the Z-axis
1248 call vecpr(dc_norm(1,i),dc_norm(1,i+1),uz(1,i))
1249 costh=dcos(pi-theta(i+2))
1250 fac=1.0d0/dsqrt(1.0d0-costh*costh)
1255 C Compute the derivatives of uz
1257 uzder(2,1,1)=-dc_norm(3,i+1)
1258 uzder(3,1,1)= dc_norm(2,i+1)
1259 uzder(1,2,1)= dc_norm(3,i+1)
1261 uzder(3,2,1)=-dc_norm(1,i+1)
1262 uzder(1,3,1)=-dc_norm(2,i+1)
1263 uzder(2,3,1)= dc_norm(1,i+1)
1266 uzder(2,1,2)= dc_norm(3,i)
1267 uzder(3,1,2)=-dc_norm(2,i)
1268 uzder(1,2,2)=-dc_norm(3,i)
1270 uzder(3,2,2)= dc_norm(1,i)
1271 uzder(1,3,2)= dc_norm(2,i)
1272 uzder(2,3,2)=-dc_norm(1,i)
1275 C Compute the Y-axis
1278 uy(k,i)=facy*(dc_norm(k,i+1)-costh*dc_norm(k,i))
1281 C Compute the derivatives of uy
1284 uyder(k,j,1)=2*dc_norm(k,i+1)*dc_norm(j,i)
1285 & -dc_norm(k,i)*dc_norm(j,i+1)
1286 uyder(k,j,2)=-dc_norm(j,i)*dc_norm(k,i)
1288 uyder(j,j,1)=uyder(j,j,1)-costh
1289 uyder(j,j,2)=1.0d0+uyder(j,j,2)
1294 uygrad(l,k,j,i)=uyder(l,k,j)
1295 uzgrad(l,k,j,i)=uzder(l,k,j)
1299 call unormderiv(uy(1,i),uyder(1,1,1),facy,uygrad(1,1,1,i))
1300 call unormderiv(uy(1,i),uyder(1,1,2),facy,uygrad(1,1,2,i))
1301 call unormderiv(uz(1,i),uzder(1,1,1),fac,uzgrad(1,1,1,i))
1302 call unormderiv(uz(1,i),uzder(1,1,2),fac,uzgrad(1,1,2,i))
1308 vbld_inv_temp(1)=vbld_inv(i+1)
1309 if (i.lt.nres-1) then
1310 vbld_inv_temp(2)=vbld_inv(i+2)
1312 vbld_inv_temp(2)=vbld_inv(i)
1317 uygrad(l,k,j,i)=vbld_inv_temp(j)*uygrad(l,k,j,i)
1318 uzgrad(l,k,j,i)=vbld_inv_temp(j)*uzgrad(l,k,j,i)
1326 C-----------------------------------------------------------------------------
1327 subroutine vec_and_deriv_test
1328 implicit real*8 (a-h,o-z)
1329 include 'DIMENSIONS'
1330 include 'DIMENSIONS.ZSCOPT'
1331 include 'COMMON.IOUNITS'
1332 include 'COMMON.GEO'
1333 include 'COMMON.VAR'
1334 include 'COMMON.LOCAL'
1335 include 'COMMON.CHAIN'
1336 include 'COMMON.VECTORS'
1337 dimension uyder(3,3,2),uzder(3,3,2)
1338 C Compute the local reference systems. For reference system (i), the
1339 C X-axis points from CA(i) to CA(i+1), the Y axis is in the
1340 C CA(i)-CA(i+1)-CA(i+2) plane, and the Z axis is perpendicular to this plane.
1342 if (i.eq.nres-1) then
1343 C Case of the last full residue
1344 C Compute the Z-axis
1345 call vecpr(dc_norm(1,i),dc_norm(1,i-1),uz(1,i))
1346 costh=dcos(pi-theta(nres))
1347 fac=1.0d0/dsqrt(1.0d0-costh*costh)
1348 c write (iout,*) 'fac',fac,
1349 c & 1.0d0/dsqrt(scalar(uz(1,i),uz(1,i)))
1350 fac=1.0d0/dsqrt(scalar(uz(1,i),uz(1,i)))
1354 C Compute the derivatives of uz
1356 uzder(2,1,1)=-dc_norm(3,i-1)
1357 uzder(3,1,1)= dc_norm(2,i-1)
1358 uzder(1,2,1)= dc_norm(3,i-1)
1360 uzder(3,2,1)=-dc_norm(1,i-1)
1361 uzder(1,3,1)=-dc_norm(2,i-1)
1362 uzder(2,3,1)= dc_norm(1,i-1)
1365 uzder(2,1,2)= dc_norm(3,i)
1366 uzder(3,1,2)=-dc_norm(2,i)
1367 uzder(1,2,2)=-dc_norm(3,i)
1369 uzder(3,2,2)= dc_norm(1,i)
1370 uzder(1,3,2)= dc_norm(2,i)
1371 uzder(2,3,2)=-dc_norm(1,i)
1373 C Compute the Y-axis
1375 uy(k,i)=fac*(dc_norm(k,i-1)-costh*dc_norm(k,i))
1378 facy=1.0d0/dsqrt(scalar(dc_norm(1,i),dc_norm(1,i))*
1379 & (scalar(dc_norm(1,i-1),dc_norm(1,i-1))**2-
1380 & scalar(dc_norm(1,i),dc_norm(1,i-1))**2))
1382 c uy(k,i)=facy*(dc_norm(k,i+1)-costh*dc_norm(k,i))
1385 & dc_norm(k,i-1)*scalar(dc_norm(1,i),dc_norm(1,i))
1386 & -scalar(dc_norm(1,i),dc_norm(1,i-1))*dc_norm(k,i)
1389 c write (iout,*) 'facy',facy,
1390 c & 1.0d0/dsqrt(scalar(uy(1,i),uy(1,i)))
1391 facy=1.0d0/dsqrt(scalar(uy(1,i),uy(1,i)))
1393 uy(k,i)=facy*uy(k,i)
1395 C Compute the derivatives of uy
1398 uyder(k,j,1)=2*dc_norm(k,i-1)*dc_norm(j,i)
1399 & -dc_norm(k,i)*dc_norm(j,i-1)
1400 uyder(k,j,2)=-dc_norm(j,i)*dc_norm(k,i)
1402 c uyder(j,j,1)=uyder(j,j,1)-costh
1403 c uyder(j,j,2)=1.0d0+uyder(j,j,2)
1404 uyder(j,j,1)=uyder(j,j,1)
1405 & -scalar(dc_norm(1,i),dc_norm(1,i-1))
1406 uyder(j,j,2)=scalar(dc_norm(1,i),dc_norm(1,i))
1412 uygrad(l,k,j,i)=uyder(l,k,j)
1413 uzgrad(l,k,j,i)=uzder(l,k,j)
1417 call unormderiv(uy(1,i),uyder(1,1,1),facy,uygrad(1,1,1,i))
1418 call unormderiv(uy(1,i),uyder(1,1,2),facy,uygrad(1,1,2,i))
1419 call unormderiv(uz(1,i),uzder(1,1,1),fac,uzgrad(1,1,1,i))
1420 call unormderiv(uz(1,i),uzder(1,1,2),fac,uzgrad(1,1,2,i))
1423 C Compute the Z-axis
1424 call vecpr(dc_norm(1,i),dc_norm(1,i+1),uz(1,i))
1425 costh=dcos(pi-theta(i+2))
1426 fac=1.0d0/dsqrt(1.0d0-costh*costh)
1427 fac=1.0d0/dsqrt(scalar(uz(1,i),uz(1,i)))
1431 C Compute the derivatives of uz
1433 uzder(2,1,1)=-dc_norm(3,i+1)
1434 uzder(3,1,1)= dc_norm(2,i+1)
1435 uzder(1,2,1)= dc_norm(3,i+1)
1437 uzder(3,2,1)=-dc_norm(1,i+1)
1438 uzder(1,3,1)=-dc_norm(2,i+1)
1439 uzder(2,3,1)= dc_norm(1,i+1)
1442 uzder(2,1,2)= dc_norm(3,i)
1443 uzder(3,1,2)=-dc_norm(2,i)
1444 uzder(1,2,2)=-dc_norm(3,i)
1446 uzder(3,2,2)= dc_norm(1,i)
1447 uzder(1,3,2)= dc_norm(2,i)
1448 uzder(2,3,2)=-dc_norm(1,i)
1450 C Compute the Y-axis
1452 facy=1.0d0/dsqrt(scalar(dc_norm(1,i),dc_norm(1,i))*
1453 & (scalar(dc_norm(1,i+1),dc_norm(1,i+1))**2-
1454 & scalar(dc_norm(1,i),dc_norm(1,i+1))**2))
1456 c uy(k,i)=facy*(dc_norm(k,i+1)-costh*dc_norm(k,i))
1459 & dc_norm(k,i+1)*scalar(dc_norm(1,i),dc_norm(1,i))
1460 & -scalar(dc_norm(1,i),dc_norm(1,i+1))*dc_norm(k,i)
1463 c write (iout,*) 'facy',facy,
1464 c & 1.0d0/dsqrt(scalar(uy(1,i),uy(1,i)))
1465 facy=1.0d0/dsqrt(scalar(uy(1,i),uy(1,i)))
1467 uy(k,i)=facy*uy(k,i)
1469 C Compute the derivatives of uy
1472 uyder(k,j,1)=2*dc_norm(k,i+1)*dc_norm(j,i)
1473 & -dc_norm(k,i)*dc_norm(j,i+1)
1474 uyder(k,j,2)=-dc_norm(j,i)*dc_norm(k,i)
1476 c uyder(j,j,1)=uyder(j,j,1)-costh
1477 c uyder(j,j,2)=1.0d0+uyder(j,j,2)
1478 uyder(j,j,1)=uyder(j,j,1)
1479 & -scalar(dc_norm(1,i),dc_norm(1,i+1))
1480 uyder(j,j,2)=scalar(dc_norm(1,i),dc_norm(1,i))
1486 uygrad(l,k,j,i)=uyder(l,k,j)
1487 uzgrad(l,k,j,i)=uzder(l,k,j)
1491 call unormderiv(uy(1,i),uyder(1,1,1),facy,uygrad(1,1,1,i))
1492 call unormderiv(uy(1,i),uyder(1,1,2),facy,uygrad(1,1,2,i))
1493 call unormderiv(uz(1,i),uzder(1,1,1),fac,uzgrad(1,1,1,i))
1494 call unormderiv(uz(1,i),uzder(1,1,2),fac,uzgrad(1,1,2,i))
1501 uygrad(l,k,j,i)=vblinv*uygrad(l,k,j,i)
1502 uzgrad(l,k,j,i)=vblinv*uzgrad(l,k,j,i)
1509 C-----------------------------------------------------------------------------
1510 subroutine check_vecgrad
1511 implicit real*8 (a-h,o-z)
1512 include 'DIMENSIONS'
1513 include 'DIMENSIONS.ZSCOPT'
1514 include 'COMMON.IOUNITS'
1515 include 'COMMON.GEO'
1516 include 'COMMON.VAR'
1517 include 'COMMON.LOCAL'
1518 include 'COMMON.CHAIN'
1519 include 'COMMON.VECTORS'
1520 dimension uygradt(3,3,2,maxres),uzgradt(3,3,2,maxres)
1521 dimension uyt(3,maxres),uzt(3,maxres)
1522 dimension uygradn(3,3,2),uzgradn(3,3,2),erij(3)
1523 double precision delta /1.0d-7/
1526 crc write(iout,'(2i5,2(3f10.5,5x))') i,1,dc_norm(:,i)
1527 crc write(iout,'(2i5,2(3f10.5,5x))') i,2,uy(:,i)
1528 crc write(iout,'(2i5,2(3f10.5,5x)/)')i,3,uz(:,i)
1529 cd write(iout,'(2i5,2(3f10.5,5x))') i,1,
1530 cd & (dc_norm(if90,i),if90=1,3)
1531 cd write(iout,'(2i5,2(3f10.5,5x))') i,2,(uy(if90,i),if90=1,3)
1532 cd write(iout,'(2i5,2(3f10.5,5x)/)')i,3,(uz(if90,i),if90=1,3)
1533 cd write(iout,'(a)')
1539 uygradt(l,k,j,i)=uygrad(l,k,j,i)
1540 uzgradt(l,k,j,i)=uzgrad(l,k,j,i)
1553 cd write (iout,*) 'i=',i
1555 erij(k)=dc_norm(k,i)
1559 dc_norm(k,i)=erij(k)
1561 dc_norm(j,i)=dc_norm(j,i)+delta
1562 c fac=dsqrt(scalar(dc_norm(1,i),dc_norm(1,i)))
1564 c dc_norm(k,i)=dc_norm(k,i)/fac
1566 c write (iout,*) (dc_norm(k,i),k=1,3)
1567 c write (iout,*) (erij(k),k=1,3)
1570 uygradn(k,j,1)=(uy(k,i)-uyt(k,i))/delta
1571 uygradn(k,j,2)=(uy(k,i-1)-uyt(k,i-1))/delta
1572 uzgradn(k,j,1)=(uz(k,i)-uzt(k,i))/delta
1573 uzgradn(k,j,2)=(uz(k,i-1)-uzt(k,i-1))/delta
1575 c write (iout,'(i5,3f8.5,3x,3f8.5,5x,3f8.5,3x,3f8.5)')
1576 c & j,(uzgradt(k,j,1,i),k=1,3),(uzgradn(k,j,1),k=1,3),
1577 c & (uzgradt(k,j,2,i-1),k=1,3),(uzgradn(k,j,2),k=1,3)
1580 dc_norm(k,i)=erij(k)
1583 cd write (iout,'(i5,3f8.5,3x,3f8.5,5x,3f8.5,3x,3f8.5)')
1584 cd & k,(uygradt(k,l,1,i),l=1,3),(uygradn(k,l,1),l=1,3),
1585 cd & (uygradt(k,l,2,i-1),l=1,3),(uygradn(k,l,2),l=1,3)
1586 cd write (iout,'(i5,3f8.5,3x,3f8.5,5x,3f8.5,3x,3f8.5)')
1587 cd & k,(uzgradt(k,l,1,i),l=1,3),(uzgradn(k,l,1),l=1,3),
1588 cd & (uzgradt(k,l,2,i-1),l=1,3),(uzgradn(k,l,2),l=1,3)
1589 cd write (iout,'(a)')
1594 C--------------------------------------------------------------------------
1595 subroutine set_matrices
1596 implicit real*8 (a-h,o-z)
1597 include 'DIMENSIONS'
1598 include 'DIMENSIONS.ZSCOPT'
1599 include 'COMMON.IOUNITS'
1600 include 'COMMON.GEO'
1601 include 'COMMON.VAR'
1602 include 'COMMON.LOCAL'
1603 include 'COMMON.CHAIN'
1604 include 'COMMON.DERIV'
1605 include 'COMMON.INTERACT'
1606 include 'COMMON.CONTACTS'
1607 include 'COMMON.TORSION'
1608 include 'COMMON.VECTORS'
1609 include 'COMMON.FFIELD'
1610 double precision auxvec(2),auxmat(2,2)
1612 C Compute the virtual-bond-torsional-angle dependent quantities needed
1613 C to calculate the el-loc multibody terms of various order.
1616 if (i .lt. nres+1) then
1653 if (i .gt. 3 .and. i .lt. nres+1) then
1654 obrot_der(1,i-2)=-sin1
1655 obrot_der(2,i-2)= cos1
1656 Ugder(1,1,i-2)= sin1
1657 Ugder(1,2,i-2)=-cos1
1658 Ugder(2,1,i-2)=-cos1
1659 Ugder(2,2,i-2)=-sin1
1662 obrot2_der(1,i-2)=-dwasin2
1663 obrot2_der(2,i-2)= dwacos2
1664 Ug2der(1,1,i-2)= dwasin2
1665 Ug2der(1,2,i-2)=-dwacos2
1666 Ug2der(2,1,i-2)=-dwacos2
1667 Ug2der(2,2,i-2)=-dwasin2
1669 obrot_der(1,i-2)=0.0d0
1670 obrot_der(2,i-2)=0.0d0
1671 Ugder(1,1,i-2)=0.0d0
1672 Ugder(1,2,i-2)=0.0d0
1673 Ugder(2,1,i-2)=0.0d0
1674 Ugder(2,2,i-2)=0.0d0
1675 obrot2_der(1,i-2)=0.0d0
1676 obrot2_der(2,i-2)=0.0d0
1677 Ug2der(1,1,i-2)=0.0d0
1678 Ug2der(1,2,i-2)=0.0d0
1679 Ug2der(2,1,i-2)=0.0d0
1680 Ug2der(2,2,i-2)=0.0d0
1682 if (i.gt. iatel_s+2 .and. i.lt.iatel_e+5) then
1683 iti = itortyp(itype(i-2))
1687 if (i.gt. iatel_s+1 .and. i.lt.iatel_e+4) then
1688 iti1 = itortyp(itype(i-1))
1692 cd write (iout,*) '*******i',i,' iti1',iti
1693 cd write (iout,*) 'b1',b1(:,iti)
1694 cd write (iout,*) 'b2',b2(:,iti)
1695 cd write (iout,*) 'Ug',Ug(:,:,i-2)
1696 if (i .gt. iatel_s+2) then
1697 call matvec2(Ug(1,1,i-2),b2(1,iti),Ub2(1,i-2))
1698 call matmat2(EE(1,1,iti),Ug(1,1,i-2),EUg(1,1,i-2))
1699 call matmat2(CC(1,1,iti),Ug(1,1,i-2),CUg(1,1,i-2))
1700 call matmat2(DD(1,1,iti),Ug(1,1,i-2),DUg(1,1,i-2))
1701 call matmat2(Dtilde(1,1,iti),Ug2(1,1,i-2),DtUg2(1,1,i-2))
1702 call matvec2(Ctilde(1,1,iti1),obrot(1,i-2),Ctobr(1,i-2))
1703 call matvec2(Dtilde(1,1,iti),obrot2(1,i-2),Dtobr2(1,i-2))
1713 DtUg2(l,k,i-2)=0.0d0
1717 call matvec2(Ugder(1,1,i-2),b2(1,iti),Ub2der(1,i-2))
1718 call matmat2(EE(1,1,iti),Ugder(1,1,i-2),EUgder(1,1,i-2))
1719 call matmat2(CC(1,1,iti1),Ugder(1,1,i-2),CUgder(1,1,i-2))
1720 call matmat2(DD(1,1,iti),Ugder(1,1,i-2),DUgder(1,1,i-2))
1721 call matmat2(Dtilde(1,1,iti),Ug2der(1,1,i-2),DtUg2der(1,1,i-2))
1722 call matvec2(Ctilde(1,1,iti1),obrot_der(1,i-2),Ctobrder(1,i-2))
1723 call matvec2(Dtilde(1,1,iti),obrot2_der(1,i-2),Dtobr2der(1,i-2))
1725 muder(k,i-2)=Ub2der(k,i-2)
1727 if (i.gt. iatel_s+1 .and. i.lt.iatel_e+4) then
1728 iti1 = itortyp(itype(i-1))
1733 mu(k,i-2)=Ub2(k,i-2)+b1(k,iti1)
1735 C Vectors and matrices dependent on a single virtual-bond dihedral.
1736 call matvec2(DD(1,1,iti),b1tilde(1,iti1),auxvec(1))
1737 call matvec2(Ug2(1,1,i-2),auxvec(1),Ug2Db1t(1,i-2))
1738 call matvec2(Ug2der(1,1,i-2),auxvec(1),Ug2Db1tder(1,i-2))
1739 call matvec2(CC(1,1,iti1),Ub2(1,i-2),CUgb2(1,i-2))
1740 call matvec2(CC(1,1,iti1),Ub2der(1,i-2),CUgb2der(1,i-2))
1741 call matmat2(EUg(1,1,i-2),CC(1,1,iti1),EUgC(1,1,i-2))
1742 call matmat2(EUgder(1,1,i-2),CC(1,1,iti1),EUgCder(1,1,i-2))
1743 call matmat2(EUg(1,1,i-2),DD(1,1,iti1),EUgD(1,1,i-2))
1744 call matmat2(EUgder(1,1,i-2),DD(1,1,iti1),EUgDder(1,1,i-2))
1745 cd write (iout,*) 'i',i,' mu ',(mu(k,i-2),k=1,2),
1746 cd & ' mu1',(b1(k,i-2),k=1,2),' mu2',(Ub2(k,i-2),k=1,2)
1748 C Matrices dependent on two consecutive virtual-bond dihedrals.
1749 C The order of matrices is from left to right.
1751 call matmat2(DtUg2(1,1,i-1),EUg(1,1,i),DtUg2EUg(1,1,i))
1752 call matmat2(DtUg2der(1,1,i-1),EUg(1,1,i),DtUg2EUgder(1,1,1,i))
1753 call matmat2(DtUg2(1,1,i-1),EUgder(1,1,i),DtUg2EUgder(1,1,2,i))
1754 call transpose2(DtUg2(1,1,i-1),auxmat(1,1))
1755 call matmat2(auxmat(1,1),EUg(1,1,i),Ug2DtEUg(1,1,i))
1756 call matmat2(auxmat(1,1),EUgder(1,1,i),Ug2DtEUgder(1,1,2,i))
1757 call transpose2(DtUg2der(1,1,i-1),auxmat(1,1))
1758 call matmat2(auxmat(1,1),EUg(1,1,i),Ug2DtEUgder(1,1,1,i))
1761 cd iti = itortyp(itype(i))
1764 cd write (iout,'(2f10.5,5x,2f10.5,5x,2f10.5)')
1765 cd & (EE(j,k,iti),k=1,2),(Ug(j,k,i),k=1,2),(EUg(j,k,i),k=1,2)
1770 C--------------------------------------------------------------------------
1771 subroutine eelec(ees,evdw1,eel_loc,eello_turn3,eello_turn4)
1773 C This subroutine calculates the average interaction energy and its gradient
1774 C in the virtual-bond vectors between non-adjacent peptide groups, based on
1775 C the potential described in Liwo et al., Protein Sci., 1993, 2, 1715.
1776 C The potential depends both on the distance of peptide-group centers and on
1777 C the orientation of the CA-CA virtual bonds.
1779 implicit real*8 (a-h,o-z)
1780 include 'DIMENSIONS'
1781 include 'DIMENSIONS.ZSCOPT'
1782 include 'COMMON.CONTROL'
1783 include 'COMMON.IOUNITS'
1784 include 'COMMON.GEO'
1785 include 'COMMON.VAR'
1786 include 'COMMON.LOCAL'
1787 include 'COMMON.CHAIN'
1788 include 'COMMON.DERIV'
1789 include 'COMMON.INTERACT'
1790 include 'COMMON.CONTACTS'
1791 include 'COMMON.TORSION'
1792 include 'COMMON.VECTORS'
1793 include 'COMMON.FFIELD'
1794 dimension ggg(3),gggp(3),gggm(3),erij(3),dcosb(3),dcosg(3),
1795 & erder(3,3),uryg(3,3),urzg(3,3),vryg(3,3),vrzg(3,3)
1796 double precision acipa(2,2),agg(3,4),aggi(3,4),aggi1(3,4),
1797 & aggj(3,4),aggj1(3,4),a_temp(2,2),muij(4)
1798 common /locel/ a_temp,agg,aggi,aggi1,aggj,aggj1,j1
1799 c 4/26/02 - AL scaling factor for 1,4 repulsive VDW interactions
1800 double precision scal_el /0.5d0/
1802 C 13-go grudnia roku pamietnego...
1803 double precision unmat(3,3) /1.0d0,0.0d0,0.0d0,
1804 & 0.0d0,1.0d0,0.0d0,
1805 & 0.0d0,0.0d0,1.0d0/
1806 cd write(iout,*) 'In EELEC'
1808 cd write(iout,*) 'Type',i
1809 cd write(iout,*) 'B1',B1(:,i)
1810 cd write(iout,*) 'B2',B2(:,i)
1811 cd write(iout,*) 'CC',CC(:,:,i)
1812 cd write(iout,*) 'DD',DD(:,:,i)
1813 cd write(iout,*) 'EE',EE(:,:,i)
1815 cd call check_vecgrad
1817 if (icheckgrad.eq.1) then
1819 fac=1.0d0/dsqrt(scalar(dc(1,i),dc(1,i)))
1821 dc_norm(k,i)=dc(k,i)*fac
1823 c write (iout,*) 'i',i,' fac',fac
1826 if (wel_loc.gt.0.0d0 .or. wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0
1827 & .or. wcorr6.gt.0.0d0 .or. wturn3.gt.0.0d0 .or.
1828 & wturn4.gt.0.0d0 .or. wturn6.gt.0.0d0) then
1829 cd if (wel_loc.gt.0.0d0) then
1830 if (icheckgrad.eq.1) then
1831 call vec_and_deriv_test
1838 cd write (iout,*) 'i=',i
1840 cd write (iout,'(i5,2f10.5)') k,uy(k,i),uz(k,i)
1843 cd write (iout,'(f10.5,2x,3f10.5,2x,3f10.5)')
1844 cd & uz(k,i),(uzgrad(k,l,1,i),l=1,3),(uzgrad(k,l,2,i),l=1,3)
1857 cd print '(a)','Enter EELEC'
1858 cd write (iout,*) 'iatel_s=',iatel_s,' iatel_e=',iatel_e
1860 gel_loc_loc(i)=0.0d0
1863 do i=iatel_s,iatel_e
1864 if (itel(i).eq.0) goto 1215
1868 dx_normi=dc_norm(1,i)
1869 dy_normi=dc_norm(2,i)
1870 dz_normi=dc_norm(3,i)
1871 xmedi=c(1,i)+0.5d0*dxi
1872 ymedi=c(2,i)+0.5d0*dyi
1873 zmedi=c(3,i)+0.5d0*dzi
1875 c write (iout,*) 'i',i,' ielstart',ielstart(i),' ielend',ielend(i)
1876 do j=ielstart(i),ielend(i)
1877 if (itel(j).eq.0) goto 1216
1881 if (j.eq.i+2 .and. itelj.eq.2) iteli=2
1882 aaa=app(iteli,itelj)
1883 bbb=bpp(iteli,itelj)
1884 C Diagnostics only!!!
1890 ael6i=ael6(iteli,itelj)
1891 ael3i=ael3(iteli,itelj)
1895 dx_normj=dc_norm(1,j)
1896 dy_normj=dc_norm(2,j)
1897 dz_normj=dc_norm(3,j)
1898 xj=c(1,j)+0.5D0*dxj-xmedi
1899 yj=c(2,j)+0.5D0*dyj-ymedi
1900 zj=c(3,j)+0.5D0*dzj-zmedi
1901 rij=xj*xj+yj*yj+zj*zj
1907 cosa=dx_normi*dx_normj+dy_normi*dy_normj+dz_normi*dz_normj
1908 cosb=(xj*dx_normi+yj*dy_normi+zj*dz_normi)*rmij
1909 cosg=(xj*dx_normj+yj*dy_normj+zj*dz_normj)*rmij
1910 fac=cosa-3.0D0*cosb*cosg
1912 c 4/26/02 - AL scaling down 1,4 repulsive VDW interactions
1913 if (j.eq.i+2) ev1=scal_el*ev1
1918 el1=fac3*(4.0D0+fac*fac-3.0D0*(cosb*cosb+cosg*cosg))
1921 c write (iout,*) "i",i,iteli," j",j,itelj," eesij",eesij
1922 C 12/26/95 - for the evaluation of multi-body H-bonding interactions
1923 ees0ij=4.0D0+fac*fac-3.0D0*(cosb*cosb+cosg*cosg)
1926 cd write(iout,'(2(2i3,2x),7(1pd12.4)/2(3(1pd12.4),5x)/)')
1927 cd & iteli,i,itelj,j,aaa,bbb,ael6i,ael3i,
1928 cd & 1.0D0/dsqrt(rrmij),evdwij,eesij,
1929 cd & xmedi,ymedi,zmedi,xj,yj,zj
1931 C Calculate contributions to the Cartesian gradient.
1934 facvdw=-6*rrmij*(ev1+evdwij)
1935 facel=-3*rrmij*(el1+eesij)
1942 * Radial derivatives. First process both termini of the fragment (i,j)
1949 gelc(k,i)=gelc(k,i)+ghalf
1950 gelc(k,j)=gelc(k,j)+ghalf
1953 * Loop over residues i+1 thru j-1.
1957 gelc(l,k)=gelc(l,k)+ggg(l)
1965 gvdwpp(k,i)=gvdwpp(k,i)+ghalf
1966 gvdwpp(k,j)=gvdwpp(k,j)+ghalf
1969 * Loop over residues i+1 thru j-1.
1973 gvdwpp(l,k)=gvdwpp(l,k)+ggg(l)
1980 fac=-3*rrmij*(facvdw+facvdw+facel)
1986 * Radial derivatives. First process both termini of the fragment (i,j)
1993 gelc(k,i)=gelc(k,i)+ghalf
1994 gelc(k,j)=gelc(k,j)+ghalf
1997 * Loop over residues i+1 thru j-1.
2001 gelc(l,k)=gelc(l,k)+ggg(l)
2008 ecosa=2.0D0*fac3*fac1+fac4
2011 ecosb=(fac3*(fac1*cosg+cosb)+cosg*fac4)
2012 ecosg=(fac3*(fac1*cosb+cosg)+cosb*fac4)
2014 dcosb(k)=rmij*(dc_norm(k,i)-erij(k)*cosb)
2015 dcosg(k)=rmij*(dc_norm(k,j)-erij(k)*cosg)
2017 cd print '(2i3,2(3(1pd14.5),3x))',i,j,(dcosb(k),k=1,3),
2018 cd & (dcosg(k),k=1,3)
2020 ggg(k)=ecosb*dcosb(k)+ecosg*dcosg(k)
2024 gelc(k,i)=gelc(k,i)+ghalf
2025 & +(ecosa*(dc_norm(k,j)-cosa*dc_norm(k,i))
2026 & + ecosb*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1)
2027 gelc(k,j)=gelc(k,j)+ghalf
2028 & +(ecosa*(dc_norm(k,i)-cosa*dc_norm(k,j))
2029 & + ecosg*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1)
2033 gelc(l,k)=gelc(l,k)+ggg(l)
2038 IF (wel_loc.gt.0.0d0 .or. wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0
2039 & .or. wcorr6.gt.0.0d0 .or. wturn3.gt.0.0d0
2040 & .or. wturn4.gt.0.0d0 .or. wturn6.gt.0.0d0) THEN
2042 C 9/25/99 Mixed third-order local-electrostatic terms. The local-interaction
2043 C energy of a peptide unit is assumed in the form of a second-order
2044 C Fourier series in the angles lambda1 and lambda2 (see Nishikawa et al.
2045 C Macromolecules, 1974, 7, 797-806 for definition). This correlation terms
2046 C are computed for EVERY pair of non-contiguous peptide groups.
2048 if (j.lt.nres-1) then
2059 muij(kkk)=mu(k,i)*mu(l,j)
2062 cd write (iout,*) 'EELEC: i',i,' j',j
2063 cd write (iout,*) 'j',j,' j1',j1,' j2',j2
2064 cd write(iout,*) 'muij',muij
2065 ury=scalar(uy(1,i),erij)
2066 urz=scalar(uz(1,i),erij)
2067 vry=scalar(uy(1,j),erij)
2068 vrz=scalar(uz(1,j),erij)
2069 a22=scalar(uy(1,i),uy(1,j))-3*ury*vry
2070 a23=scalar(uy(1,i),uz(1,j))-3*ury*vrz
2071 a32=scalar(uz(1,i),uy(1,j))-3*urz*vry
2072 a33=scalar(uz(1,i),uz(1,j))-3*urz*vrz
2073 C For diagnostics only
2078 fac=dsqrt(-ael6i)*r3ij
2079 cd write (2,*) 'fac=',fac
2080 C For diagnostics only
2086 cd write (iout,'(4i5,4f10.5)')
2087 cd & i,itortyp(itype(i)),j,itortyp(itype(j)),a22,a23,a32,a33
2088 cd write (iout,'(6f10.5)') (muij(k),k=1,4),fac,eel_loc_ij
2089 cd write (iout,'(2(3f10.5,5x)/2(3f10.5,5x))') (uy(k,i),k=1,3),
2090 cd & (uz(k,i),k=1,3),(uy(k,j),k=1,3),(uz(k,j),k=1,3)
2091 cd write (iout,'(4f10.5)')
2092 cd & scalar(uy(1,i),uy(1,j)),scalar(uy(1,i),uz(1,j)),
2093 cd & scalar(uz(1,i),uy(1,j)),scalar(uz(1,i),uz(1,j))
2094 cd write (iout,'(4f10.5)') ury,urz,vry,vrz
2095 cd write (iout,'(2i3,9f10.5/)') i,j,
2096 cd & fac22,a22,fac23,a23,fac32,a32,fac33,a33,eel_loc_ij
2098 C Derivatives of the elements of A in virtual-bond vectors
2099 call unormderiv(erij(1),unmat(1,1),rmij,erder(1,1))
2106 uryg(k,1)=scalar(erder(1,k),uy(1,i))
2107 uryg(k,2)=scalar(uygrad(1,k,1,i),erij(1))
2108 uryg(k,3)=scalar(uygrad(1,k,2,i),erij(1))
2109 urzg(k,1)=scalar(erder(1,k),uz(1,i))
2110 urzg(k,2)=scalar(uzgrad(1,k,1,i),erij(1))
2111 urzg(k,3)=scalar(uzgrad(1,k,2,i),erij(1))
2112 vryg(k,1)=scalar(erder(1,k),uy(1,j))
2113 vryg(k,2)=scalar(uygrad(1,k,1,j),erij(1))
2114 vryg(k,3)=scalar(uygrad(1,k,2,j),erij(1))
2115 vrzg(k,1)=scalar(erder(1,k),uz(1,j))
2116 vrzg(k,2)=scalar(uzgrad(1,k,1,j),erij(1))
2117 vrzg(k,3)=scalar(uzgrad(1,k,2,j),erij(1))
2127 C Compute radial contributions to the gradient
2149 C Add the contributions coming from er
2152 agg(k,1)=agg(k,1)+fac3*(uryg(k,1)*vry+vryg(k,1)*ury)
2153 agg(k,2)=agg(k,2)+fac3*(uryg(k,1)*vrz+vrzg(k,1)*ury)
2154 agg(k,3)=agg(k,3)+fac3*(urzg(k,1)*vry+vryg(k,1)*urz)
2155 agg(k,4)=agg(k,4)+fac3*(urzg(k,1)*vrz+vrzg(k,1)*urz)
2158 C Derivatives in DC(i)
2159 ghalf1=0.5d0*agg(k,1)
2160 ghalf2=0.5d0*agg(k,2)
2161 ghalf3=0.5d0*agg(k,3)
2162 ghalf4=0.5d0*agg(k,4)
2163 aggi(k,1)=fac*(scalar(uygrad(1,k,1,i),uy(1,j))
2164 & -3.0d0*uryg(k,2)*vry)+ghalf1
2165 aggi(k,2)=fac*(scalar(uygrad(1,k,1,i),uz(1,j))
2166 & -3.0d0*uryg(k,2)*vrz)+ghalf2
2167 aggi(k,3)=fac*(scalar(uzgrad(1,k,1,i),uy(1,j))
2168 & -3.0d0*urzg(k,2)*vry)+ghalf3
2169 aggi(k,4)=fac*(scalar(uzgrad(1,k,1,i),uz(1,j))
2170 & -3.0d0*urzg(k,2)*vrz)+ghalf4
2171 C Derivatives in DC(i+1)
2172 aggi1(k,1)=fac*(scalar(uygrad(1,k,2,i),uy(1,j))
2173 & -3.0d0*uryg(k,3)*vry)+agg(k,1)
2174 aggi1(k,2)=fac*(scalar(uygrad(1,k,2,i),uz(1,j))
2175 & -3.0d0*uryg(k,3)*vrz)+agg(k,2)
2176 aggi1(k,3)=fac*(scalar(uzgrad(1,k,2,i),uy(1,j))
2177 & -3.0d0*urzg(k,3)*vry)+agg(k,3)
2178 aggi1(k,4)=fac*(scalar(uzgrad(1,k,2,i),uz(1,j))
2179 & -3.0d0*urzg(k,3)*vrz)+agg(k,4)
2180 C Derivatives in DC(j)
2181 aggj(k,1)=fac*(scalar(uygrad(1,k,1,j),uy(1,i))
2182 & -3.0d0*vryg(k,2)*ury)+ghalf1
2183 aggj(k,2)=fac*(scalar(uzgrad(1,k,1,j),uy(1,i))
2184 & -3.0d0*vrzg(k,2)*ury)+ghalf2
2185 aggj(k,3)=fac*(scalar(uygrad(1,k,1,j),uz(1,i))
2186 & -3.0d0*vryg(k,2)*urz)+ghalf3
2187 aggj(k,4)=fac*(scalar(uzgrad(1,k,1,j),uz(1,i))
2188 & -3.0d0*vrzg(k,2)*urz)+ghalf4
2189 C Derivatives in DC(j+1) or DC(nres-1)
2190 aggj1(k,1)=fac*(scalar(uygrad(1,k,2,j),uy(1,i))
2191 & -3.0d0*vryg(k,3)*ury)
2192 aggj1(k,2)=fac*(scalar(uzgrad(1,k,2,j),uy(1,i))
2193 & -3.0d0*vrzg(k,3)*ury)
2194 aggj1(k,3)=fac*(scalar(uygrad(1,k,2,j),uz(1,i))
2195 & -3.0d0*vryg(k,3)*urz)
2196 aggj1(k,4)=fac*(scalar(uzgrad(1,k,2,j),uz(1,i))
2197 & -3.0d0*vrzg(k,3)*urz)
2202 C Derivatives in DC(i+1)
2203 cd aggi1(k,1)=agg(k,1)
2204 cd aggi1(k,2)=agg(k,2)
2205 cd aggi1(k,3)=agg(k,3)
2206 cd aggi1(k,4)=agg(k,4)
2207 C Derivatives in DC(j)
2212 C Derivatives in DC(j+1)
2217 if (j.eq.nres-1 .and. i.lt.j-2) then
2219 aggj1(k,l)=aggj1(k,l)+agg(k,l)
2220 cd aggj1(k,l)=agg(k,l)
2226 C Check the loc-el terms by numerical integration
2236 aggi(k,l)=-aggi(k,l)
2237 aggi1(k,l)=-aggi1(k,l)
2238 aggj(k,l)=-aggj(k,l)
2239 aggj1(k,l)=-aggj1(k,l)
2242 if (j.lt.nres-1) then
2248 aggi(k,l)=-aggi(k,l)
2249 aggi1(k,l)=-aggi1(k,l)
2250 aggj(k,l)=-aggj(k,l)
2251 aggj1(k,l)=-aggj1(k,l)
2262 aggi(k,l)=-aggi(k,l)
2263 aggi1(k,l)=-aggi1(k,l)
2264 aggj(k,l)=-aggj(k,l)
2265 aggj1(k,l)=-aggj1(k,l)
2271 IF (wel_loc.gt.0.0d0) THEN
2272 C Contribution to the local-electrostatic energy coming from the i-j pair
2273 eel_loc_ij=a22*muij(1)+a23*muij(2)+a32*muij(3)
2275 cd write (iout,*) 'i',i,' j',j,' eel_loc_ij',eel_loc_ij
2276 cd write (iout,*) a22,muij(1),a23,muij(2),a32,muij(3)
2277 eel_loc=eel_loc+eel_loc_ij
2278 C Partial derivatives in virtual-bond dihedral angles gamma
2281 & gel_loc_loc(i-1)=gel_loc_loc(i-1)+
2282 & a22*muder(1,i)*mu(1,j)+a23*muder(1,i)*mu(2,j)
2283 & +a32*muder(2,i)*mu(1,j)+a33*muder(2,i)*mu(2,j)
2284 gel_loc_loc(j-1)=gel_loc_loc(j-1)+
2285 & a22*mu(1,i)*muder(1,j)+a23*mu(1,i)*muder(2,j)
2286 & +a32*mu(2,i)*muder(1,j)+a33*mu(2,i)*muder(2,j)
2287 cd call checkint3(i,j,mu1,mu2,a22,a23,a32,a33,acipa,eel_loc_ij)
2288 cd write(iout,*) 'agg ',agg
2289 cd write(iout,*) 'aggi ',aggi
2290 cd write(iout,*) 'aggi1',aggi1
2291 cd write(iout,*) 'aggj ',aggj
2292 cd write(iout,*) 'aggj1',aggj1
2294 C Derivatives of eello in DC(i+1) thru DC(j-1) or DC(nres-2)
2296 ggg(l)=agg(l,1)*muij(1)+
2297 & agg(l,2)*muij(2)+agg(l,3)*muij(3)+agg(l,4)*muij(4)
2301 gel_loc(l,k)=gel_loc(l,k)+ggg(l)
2304 C Remaining derivatives of eello
2306 gel_loc(l,i)=gel_loc(l,i)+aggi(l,1)*muij(1)+
2307 & aggi(l,2)*muij(2)+aggi(l,3)*muij(3)+aggi(l,4)*muij(4)
2308 gel_loc(l,i+1)=gel_loc(l,i+1)+aggi1(l,1)*muij(1)+
2309 & aggi1(l,2)*muij(2)+aggi1(l,3)*muij(3)+aggi1(l,4)*muij(4)
2310 gel_loc(l,j)=gel_loc(l,j)+aggj(l,1)*muij(1)+
2311 & aggj(l,2)*muij(2)+aggj(l,3)*muij(3)+aggj(l,4)*muij(4)
2312 gel_loc(l,j1)=gel_loc(l,j1)+aggj1(l,1)*muij(1)+
2313 & aggj1(l,2)*muij(2)+aggj1(l,3)*muij(3)+aggj1(l,4)*muij(4)
2317 if (wturn3.gt.0.0d0 .or. wturn4.gt.0.0d0) then
2318 C Contributions from turns
2323 call eturn34(i,j,eello_turn3,eello_turn4)
2325 C Change 12/26/95 to calculate four-body contributions to H-bonding energy
2326 if (j.gt.i+1 .and. num_conti.le.maxconts) then
2328 C Calculate the contact function. The ith column of the array JCONT will
2329 C contain the numbers of atoms that make contacts with the atom I (of numbers
2330 C greater than I). The arrays FACONT and GACONT will contain the values of
2331 C the contact function and its derivative.
2332 c r0ij=1.02D0*rpp(iteli,itelj)
2333 c r0ij=1.11D0*rpp(iteli,itelj)
2334 r0ij=2.20D0*rpp(iteli,itelj)
2335 c r0ij=1.55D0*rpp(iteli,itelj)
2336 call gcont(rij,r0ij,1.0D0,0.2d0*r0ij,fcont,fprimcont)
2337 if (fcont.gt.0.0D0) then
2338 num_conti=num_conti+1
2339 if (num_conti.gt.maxconts) then
2340 write (iout,*) 'WARNING - max. # of contacts exceeded;',
2341 & ' will skip next contacts for this conf.'
2343 jcont_hb(num_conti,i)=j
2344 IF (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or.
2345 & wcorr6.gt.0.0d0 .or. wturn6.gt.0.0d0) THEN
2346 C 9/30/99 (AL) - store components necessary to evaluate higher-order loc-el
2348 d_cont(num_conti,i)=rij
2349 cd write (2,'(3e15.5)') rij,r0ij+0.2d0*r0ij,rij
2350 C --- Electrostatic-interaction matrix ---
2351 a_chuj(1,1,num_conti,i)=a22
2352 a_chuj(1,2,num_conti,i)=a23
2353 a_chuj(2,1,num_conti,i)=a32
2354 a_chuj(2,2,num_conti,i)=a33
2355 C --- Gradient of rij
2357 grij_hb_cont(kkk,num_conti,i)=erij(kkk)
2360 c a_chuj(1,1,num_conti,i)=-0.61d0
2361 c a_chuj(1,2,num_conti,i)= 0.4d0
2362 c a_chuj(2,1,num_conti,i)= 0.65d0
2363 c a_chuj(2,2,num_conti,i)= 0.50d0
2364 c else if (i.eq.2) then
2365 c a_chuj(1,1,num_conti,i)= 0.0d0
2366 c a_chuj(1,2,num_conti,i)= 0.0d0
2367 c a_chuj(2,1,num_conti,i)= 0.0d0
2368 c a_chuj(2,2,num_conti,i)= 0.0d0
2370 C --- and its gradients
2371 cd write (iout,*) 'i',i,' j',j
2373 cd write (iout,*) 'iii 1 kkk',kkk
2374 cd write (iout,*) agg(kkk,:)
2377 cd write (iout,*) 'iii 2 kkk',kkk
2378 cd write (iout,*) aggi(kkk,:)
2381 cd write (iout,*) 'iii 3 kkk',kkk
2382 cd write (iout,*) aggi1(kkk,:)
2385 cd write (iout,*) 'iii 4 kkk',kkk
2386 cd write (iout,*) aggj(kkk,:)
2389 cd write (iout,*) 'iii 5 kkk',kkk
2390 cd write (iout,*) aggj1(kkk,:)
2397 a_chuj_der(k,l,m,1,num_conti,i)=agg(m,kkll)
2398 a_chuj_der(k,l,m,2,num_conti,i)=aggi(m,kkll)
2399 a_chuj_der(k,l,m,3,num_conti,i)=aggi1(m,kkll)
2400 a_chuj_der(k,l,m,4,num_conti,i)=aggj(m,kkll)
2401 a_chuj_der(k,l,m,5,num_conti,i)=aggj1(m,kkll)
2403 c a_chuj_der(k,l,m,mm,num_conti,i)=0.0d0
2409 IF (wcorr4.eq.0.0d0 .and. wcorr.gt.0.0d0) THEN
2410 C Calculate contact energies
2412 wij=cosa-3.0D0*cosb*cosg
2415 c fac3=dsqrt(-ael6i)/r0ij**3
2416 fac3=dsqrt(-ael6i)*r3ij
2417 ees0pij=dsqrt(4.0D0+cosa4+wij*wij-3.0D0*cosbg1*cosbg1)
2418 ees0mij=dsqrt(4.0D0-cosa4+wij*wij-3.0D0*cosbg2*cosbg2)
2420 ees0p(num_conti,i)=0.5D0*fac3*(ees0pij+ees0mij)
2421 ees0m(num_conti,i)=0.5D0*fac3*(ees0pij-ees0mij)
2422 C Diagnostics. Comment out or remove after debugging!
2423 c ees0p(num_conti,i)=0.5D0*fac3*ees0pij
2424 c ees0m(num_conti,i)=0.5D0*fac3*ees0mij
2425 c ees0m(num_conti,i)=0.0D0
2427 c write (iout,*) 'i=',i,' j=',j,' rij=',rij,' r0ij=',r0ij,
2428 c & ' ees0ij=',ees0p(num_conti,i),ees0m(num_conti,i),' fcont=',fcont
2429 facont_hb(num_conti,i)=fcont
2431 C Angular derivatives of the contact function
2432 ees0pij1=fac3/ees0pij
2433 ees0mij1=fac3/ees0mij
2434 fac3p=-3.0D0*fac3*rrmij
2435 ees0pijp=0.5D0*fac3p*(ees0pij+ees0mij)
2436 ees0mijp=0.5D0*fac3p*(ees0pij-ees0mij)
2438 ecosa1= ees0pij1*( 1.0D0+0.5D0*wij)
2439 ecosb1=-1.5D0*ees0pij1*(wij*cosg+cosbg1)
2440 ecosg1=-1.5D0*ees0pij1*(wij*cosb+cosbg1)
2441 ecosa2= ees0mij1*(-1.0D0+0.5D0*wij)
2442 ecosb2=-1.5D0*ees0mij1*(wij*cosg+cosbg2)
2443 ecosg2=-1.5D0*ees0mij1*(wij*cosb-cosbg2)
2444 ecosap=ecosa1+ecosa2
2445 ecosbp=ecosb1+ecosb2
2446 ecosgp=ecosg1+ecosg2
2447 ecosam=ecosa1-ecosa2
2448 ecosbm=ecosb1-ecosb2
2449 ecosgm=ecosg1-ecosg2
2458 fprimcont=fprimcont/rij
2459 cd facont_hb(num_conti,i)=1.0D0
2460 C Following line is for diagnostics.
2463 dcosb(k)=rmij*(dc_norm(k,i)-erij(k)*cosb)
2464 dcosg(k)=rmij*(dc_norm(k,j)-erij(k)*cosg)
2467 gggp(k)=ecosbp*dcosb(k)+ecosgp*dcosg(k)
2468 gggm(k)=ecosbm*dcosb(k)+ecosgm*dcosg(k)
2470 gggp(1)=gggp(1)+ees0pijp*xj
2471 gggp(2)=gggp(2)+ees0pijp*yj
2472 gggp(3)=gggp(3)+ees0pijp*zj
2473 gggm(1)=gggm(1)+ees0mijp*xj
2474 gggm(2)=gggm(2)+ees0mijp*yj
2475 gggm(3)=gggm(3)+ees0mijp*zj
2476 C Derivatives due to the contact function
2477 gacont_hbr(1,num_conti,i)=fprimcont*xj
2478 gacont_hbr(2,num_conti,i)=fprimcont*yj
2479 gacont_hbr(3,num_conti,i)=fprimcont*zj
2481 ghalfp=0.5D0*gggp(k)
2482 ghalfm=0.5D0*gggm(k)
2483 gacontp_hb1(k,num_conti,i)=ghalfp
2484 & +(ecosap*(dc_norm(k,j)-cosa*dc_norm(k,i))
2485 & + ecosbp*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1)
2486 gacontp_hb2(k,num_conti,i)=ghalfp
2487 & +(ecosap*(dc_norm(k,i)-cosa*dc_norm(k,j))
2488 & + ecosgp*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1)
2489 gacontp_hb3(k,num_conti,i)=gggp(k)
2490 gacontm_hb1(k,num_conti,i)=ghalfm
2491 & +(ecosam*(dc_norm(k,j)-cosa*dc_norm(k,i))
2492 & + ecosbm*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1)
2493 gacontm_hb2(k,num_conti,i)=ghalfm
2494 & +(ecosam*(dc_norm(k,i)-cosa*dc_norm(k,j))
2495 & + ecosgm*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1)
2496 gacontm_hb3(k,num_conti,i)=gggm(k)
2499 C Diagnostics. Comment out or remove after debugging!
2501 cdiag gacontp_hb1(k,num_conti,i)=0.0D0
2502 cdiag gacontp_hb2(k,num_conti,i)=0.0D0
2503 cdiag gacontp_hb3(k,num_conti,i)=0.0D0
2504 cdiag gacontm_hb1(k,num_conti,i)=0.0D0
2505 cdiag gacontm_hb2(k,num_conti,i)=0.0D0
2506 cdiag gacontm_hb3(k,num_conti,i)=0.0D0
2509 endif ! num_conti.le.maxconts
2514 num_cont_hb(i)=num_conti
2518 cd write (iout,'(i3,3f10.5,5x,3f10.5)')
2519 cd & i,(gel_loc(k,i),k=1,3),gel_loc_loc(i)
2521 c 12/7/99 Adam eello_turn3 will be considered as a separate energy term
2522 ccc eel_loc=eel_loc+eello_turn3
2525 C-----------------------------------------------------------------------------
2526 subroutine eturn34(i,j,eello_turn3,eello_turn4)
2527 C Third- and fourth-order contributions from turns
2528 implicit real*8 (a-h,o-z)
2529 include 'DIMENSIONS'
2530 include 'DIMENSIONS.ZSCOPT'
2531 include 'COMMON.IOUNITS'
2532 include 'COMMON.GEO'
2533 include 'COMMON.VAR'
2534 include 'COMMON.LOCAL'
2535 include 'COMMON.CHAIN'
2536 include 'COMMON.DERIV'
2537 include 'COMMON.INTERACT'
2538 include 'COMMON.CONTACTS'
2539 include 'COMMON.TORSION'
2540 include 'COMMON.VECTORS'
2541 include 'COMMON.FFIELD'
2543 double precision auxmat(2,2),auxmat1(2,2),auxmat2(2,2),pizda(2,2),
2544 & e1t(2,2),e2t(2,2),e3t(2,2),e1tder(2,2),e2tder(2,2),e3tder(2,2),
2545 & e1a(2,2),ae3(2,2),ae3e2(2,2),auxvec(2),auxvec1(2)
2546 double precision agg(3,4),aggi(3,4),aggi1(3,4),
2547 & aggj(3,4),aggj1(3,4),a_temp(2,2)
2548 common /locel/ a_temp,agg,aggi,aggi1,aggj,aggj1,j1,j2
2550 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
2552 C Third-order contributions
2559 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
2560 cd call checkint_turn3(i,a_temp,eello_turn3_num)
2561 call matmat2(EUg(1,1,i+1),EUg(1,1,i+2),auxmat(1,1))
2562 call transpose2(auxmat(1,1),auxmat1(1,1))
2563 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
2564 eello_turn3=eello_turn3+0.5d0*(pizda(1,1)+pizda(2,2))
2565 cd write (2,*) 'i,',i,' j',j,'eello_turn3',
2566 cd & 0.5d0*(pizda(1,1)+pizda(2,2)),
2567 cd & ' eello_turn3_num',4*eello_turn3_num
2569 C Derivatives in gamma(i)
2570 call matmat2(EUgder(1,1,i+1),EUg(1,1,i+2),auxmat2(1,1))
2571 call transpose2(auxmat2(1,1),pizda(1,1))
2572 call matmat2(a_temp(1,1),pizda(1,1),pizda(1,1))
2573 gel_loc_turn3(i)=gel_loc_turn3(i)+0.5d0*(pizda(1,1)+pizda(2,2))
2574 C Derivatives in gamma(i+1)
2575 call matmat2(EUg(1,1,i+1),EUgder(1,1,i+2),auxmat2(1,1))
2576 call transpose2(auxmat2(1,1),pizda(1,1))
2577 call matmat2(a_temp(1,1),pizda(1,1),pizda(1,1))
2578 gel_loc_turn3(i+1)=gel_loc_turn3(i+1)
2579 & +0.5d0*(pizda(1,1)+pizda(2,2))
2580 C Cartesian derivatives
2582 a_temp(1,1)=aggi(l,1)
2583 a_temp(1,2)=aggi(l,2)
2584 a_temp(2,1)=aggi(l,3)
2585 a_temp(2,2)=aggi(l,4)
2586 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
2587 gcorr3_turn(l,i)=gcorr3_turn(l,i)
2588 & +0.5d0*(pizda(1,1)+pizda(2,2))
2589 a_temp(1,1)=aggi1(l,1)
2590 a_temp(1,2)=aggi1(l,2)
2591 a_temp(2,1)=aggi1(l,3)
2592 a_temp(2,2)=aggi1(l,4)
2593 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
2594 gcorr3_turn(l,i+1)=gcorr3_turn(l,i+1)
2595 & +0.5d0*(pizda(1,1)+pizda(2,2))
2596 a_temp(1,1)=aggj(l,1)
2597 a_temp(1,2)=aggj(l,2)
2598 a_temp(2,1)=aggj(l,3)
2599 a_temp(2,2)=aggj(l,4)
2600 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
2601 gcorr3_turn(l,j)=gcorr3_turn(l,j)
2602 & +0.5d0*(pizda(1,1)+pizda(2,2))
2603 a_temp(1,1)=aggj1(l,1)
2604 a_temp(1,2)=aggj1(l,2)
2605 a_temp(2,1)=aggj1(l,3)
2606 a_temp(2,2)=aggj1(l,4)
2607 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
2608 gcorr3_turn(l,j1)=gcorr3_turn(l,j1)
2609 & +0.5d0*(pizda(1,1)+pizda(2,2))
2612 else if (j.eq.i+3) then
2613 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
2615 C Fourth-order contributions
2623 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
2624 cd call checkint_turn4(i,a_temp,eello_turn4_num)
2625 iti1=itortyp(itype(i+1))
2626 iti2=itortyp(itype(i+2))
2627 iti3=itortyp(itype(i+3))
2628 call transpose2(EUg(1,1,i+1),e1t(1,1))
2629 call transpose2(Eug(1,1,i+2),e2t(1,1))
2630 call transpose2(Eug(1,1,i+3),e3t(1,1))
2631 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
2632 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
2633 s1=scalar2(b1(1,iti2),auxvec(1))
2634 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
2635 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
2636 s2=scalar2(b1(1,iti1),auxvec(1))
2637 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
2638 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
2639 s3=0.5d0*(pizda(1,1)+pizda(2,2))
2640 eello_turn4=eello_turn4-(s1+s2+s3)
2641 cd write (2,*) 'i,',i,' j',j,'eello_turn4',-(s1+s2+s3),
2642 cd & ' eello_turn4_num',8*eello_turn4_num
2643 C Derivatives in gamma(i)
2645 call transpose2(EUgder(1,1,i+1),e1tder(1,1))
2646 call matmat2(e1tder(1,1),a_temp(1,1),auxmat(1,1))
2647 call matvec2(auxmat(1,1),Ub2(1,i+3),auxvec(1))
2648 s1=scalar2(b1(1,iti2),auxvec(1))
2649 call matmat2(ae3e2(1,1),e1tder(1,1),pizda(1,1))
2650 s3=0.5d0*(pizda(1,1)+pizda(2,2))
2651 gel_loc_turn4(i)=gel_loc_turn4(i)-(s1+s3)
2652 C Derivatives in gamma(i+1)
2653 call transpose2(EUgder(1,1,i+2),e2tder(1,1))
2654 call matvec2(ae3(1,1),Ub2der(1,i+2),auxvec(1))
2655 s2=scalar2(b1(1,iti1),auxvec(1))
2656 call matmat2(ae3(1,1),e2tder(1,1),auxmat(1,1))
2657 call matmat2(auxmat(1,1),e1t(1,1),pizda(1,1))
2658 s3=0.5d0*(pizda(1,1)+pizda(2,2))
2659 gel_loc_turn4(i+1)=gel_loc_turn4(i+1)-(s2+s3)
2660 C Derivatives in gamma(i+2)
2661 call transpose2(EUgder(1,1,i+3),e3tder(1,1))
2662 call matvec2(e1a(1,1),Ub2der(1,i+3),auxvec(1))
2663 s1=scalar2(b1(1,iti2),auxvec(1))
2664 call matmat2(a_temp(1,1),e3tder(1,1),auxmat(1,1))
2665 call matvec2(auxmat(1,1),Ub2(1,i+2),auxvec(1))
2666 s2=scalar2(b1(1,iti1),auxvec(1))
2667 call matmat2(auxmat(1,1),e2t(1,1),auxmat(1,1))
2668 call matmat2(auxmat(1,1),e1t(1,1),pizda(1,1))
2669 s3=0.5d0*(pizda(1,1)+pizda(2,2))
2670 gel_loc_turn4(i+2)=gel_loc_turn4(i+2)-(s1+s2+s3)
2671 C Cartesian derivatives
2672 C Derivatives of this turn contributions in DC(i+2)
2673 if (j.lt.nres-1) then
2675 a_temp(1,1)=agg(l,1)
2676 a_temp(1,2)=agg(l,2)
2677 a_temp(2,1)=agg(l,3)
2678 a_temp(2,2)=agg(l,4)
2679 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
2680 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
2681 s1=scalar2(b1(1,iti2),auxvec(1))
2682 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
2683 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
2684 s2=scalar2(b1(1,iti1),auxvec(1))
2685 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
2686 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
2687 s3=0.5d0*(pizda(1,1)+pizda(2,2))
2689 gcorr4_turn(l,i+2)=gcorr4_turn(l,i+2)-(s1+s2+s3)
2692 C Remaining derivatives of this turn contribution
2694 a_temp(1,1)=aggi(l,1)
2695 a_temp(1,2)=aggi(l,2)
2696 a_temp(2,1)=aggi(l,3)
2697 a_temp(2,2)=aggi(l,4)
2698 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
2699 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
2700 s1=scalar2(b1(1,iti2),auxvec(1))
2701 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
2702 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
2703 s2=scalar2(b1(1,iti1),auxvec(1))
2704 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
2705 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
2706 s3=0.5d0*(pizda(1,1)+pizda(2,2))
2707 gcorr4_turn(l,i)=gcorr4_turn(l,i)-(s1+s2+s3)
2708 a_temp(1,1)=aggi1(l,1)
2709 a_temp(1,2)=aggi1(l,2)
2710 a_temp(2,1)=aggi1(l,3)
2711 a_temp(2,2)=aggi1(l,4)
2712 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
2713 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
2714 s1=scalar2(b1(1,iti2),auxvec(1))
2715 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
2716 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
2717 s2=scalar2(b1(1,iti1),auxvec(1))
2718 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
2719 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
2720 s3=0.5d0*(pizda(1,1)+pizda(2,2))
2721 gcorr4_turn(l,i+1)=gcorr4_turn(l,i+1)-(s1+s2+s3)
2722 a_temp(1,1)=aggj(l,1)
2723 a_temp(1,2)=aggj(l,2)
2724 a_temp(2,1)=aggj(l,3)
2725 a_temp(2,2)=aggj(l,4)
2726 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
2727 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
2728 s1=scalar2(b1(1,iti2),auxvec(1))
2729 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
2730 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
2731 s2=scalar2(b1(1,iti1),auxvec(1))
2732 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
2733 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
2734 s3=0.5d0*(pizda(1,1)+pizda(2,2))
2735 gcorr4_turn(l,j)=gcorr4_turn(l,j)-(s1+s2+s3)
2736 a_temp(1,1)=aggj1(l,1)
2737 a_temp(1,2)=aggj1(l,2)
2738 a_temp(2,1)=aggj1(l,3)
2739 a_temp(2,2)=aggj1(l,4)
2740 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
2741 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
2742 s1=scalar2(b1(1,iti2),auxvec(1))
2743 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
2744 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
2745 s2=scalar2(b1(1,iti1),auxvec(1))
2746 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
2747 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
2748 s3=0.5d0*(pizda(1,1)+pizda(2,2))
2749 gcorr4_turn(l,j1)=gcorr4_turn(l,j1)-(s1+s2+s3)
2755 C-----------------------------------------------------------------------------
2756 subroutine vecpr(u,v,w)
2757 implicit real*8(a-h,o-z)
2758 dimension u(3),v(3),w(3)
2759 w(1)=u(2)*v(3)-u(3)*v(2)
2760 w(2)=-u(1)*v(3)+u(3)*v(1)
2761 w(3)=u(1)*v(2)-u(2)*v(1)
2764 C-----------------------------------------------------------------------------
2765 subroutine unormderiv(u,ugrad,unorm,ungrad)
2766 C This subroutine computes the derivatives of a normalized vector u, given
2767 C the derivatives computed without normalization conditions, ugrad. Returns
2770 double precision u(3),ugrad(3,3),unorm,ungrad(3,3)
2771 double precision vec(3)
2772 double precision scalar
2774 c write (2,*) 'ugrad',ugrad
2777 vec(i)=scalar(ugrad(1,i),u(1))
2779 c write (2,*) 'vec',vec
2782 ungrad(j,i)=(ugrad(j,i)-u(j)*vec(i))*unorm
2785 c write (2,*) 'ungrad',ungrad
2788 C-----------------------------------------------------------------------------
2789 subroutine escp(evdw2,evdw2_14)
2791 C This subroutine calculates the excluded-volume interaction energy between
2792 C peptide-group centers and side chains and its gradient in virtual-bond and
2793 C side-chain vectors.
2795 implicit real*8 (a-h,o-z)
2796 include 'DIMENSIONS'
2797 include 'DIMENSIONS.ZSCOPT'
2798 include 'COMMON.GEO'
2799 include 'COMMON.VAR'
2800 include 'COMMON.LOCAL'
2801 include 'COMMON.CHAIN'
2802 include 'COMMON.DERIV'
2803 include 'COMMON.INTERACT'
2804 include 'COMMON.FFIELD'
2805 include 'COMMON.IOUNITS'
2809 cd print '(a)','Enter ESCP'
2810 c write (iout,*) 'iatscp_s=',iatscp_s,' iatscp_e=',iatscp_e,
2811 c & ' scal14',scal14
2812 do i=iatscp_s,iatscp_e
2814 c write (iout,*) "i",i," iteli",iteli," nscp_gr",nscp_gr(i),
2815 c & " iscp",(iscpstart(i,j),iscpend(i,j),j=1,nscp_gr(i))
2816 if (iteli.eq.0) goto 1225
2817 xi=0.5D0*(c(1,i)+c(1,i+1))
2818 yi=0.5D0*(c(2,i)+c(2,i+1))
2819 zi=0.5D0*(c(3,i)+c(3,i+1))
2821 do iint=1,nscp_gr(i)
2823 do j=iscpstart(i,iint),iscpend(i,iint)
2825 C Uncomment following three lines for SC-p interactions
2829 C Uncomment following three lines for Ca-p interactions
2833 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
2835 e1=fac*fac*aad(itypj,iteli)
2836 e2=fac*bad(itypj,iteli)
2837 if (iabs(j-i) .le. 2) then
2840 evdw2_14=evdw2_14+e1+e2
2843 c write (iout,*) i,j,evdwij
2847 C Calculate contributions to the gradient in the virtual-bond and SC vectors.
2849 fac=-(evdwij+e1)*rrij
2854 cd write (iout,*) 'j<i'
2855 C Uncomment following three lines for SC-p interactions
2857 c gradx_scp(k,j)=gradx_scp(k,j)+ggg(k)
2860 cd write (iout,*) 'j>i'
2863 C Uncomment following line for SC-p interactions
2864 c gradx_scp(k,j)=gradx_scp(k,j)-ggg(k)
2868 gvdwc_scp(k,i)=gvdwc_scp(k,i)-0.5D0*ggg(k)
2872 cd write (iout,*) 'i=',i,' j=',j,' kstart=',kstart,' kend=',kend
2873 cd write (iout,*) ggg(1),ggg(2),ggg(3)
2876 gvdwc_scp(l,k)=gvdwc_scp(l,k)-ggg(l)
2886 gvdwc_scp(j,i)=expon*gvdwc_scp(j,i)
2887 gradx_scp(j,i)=expon*gradx_scp(j,i)
2890 C******************************************************************************
2894 C To save time the factor EXPON has been extracted from ALL components
2895 C of GVDWC and GRADX. Remember to multiply them by this factor before further
2898 C******************************************************************************
2901 C--------------------------------------------------------------------------
2902 subroutine edis(ehpb)
2904 C Evaluate bridge-strain energy and its gradient in virtual-bond and SC vectors.
2906 implicit real*8 (a-h,o-z)
2907 include 'DIMENSIONS'
2908 include 'COMMON.SBRIDGE'
2909 include 'COMMON.CHAIN'
2910 include 'COMMON.DERIV'
2911 include 'COMMON.VAR'
2912 include 'COMMON.INTERACT'
2913 include 'COMMON.IOUNITS'
2916 cd write(iout,*)'edis: nhpb=',nhpb,' fbr=',fbr
2917 cd write(iout,*)'link_start=',link_start,' link_end=',link_end
2918 if (link_end.eq.0) return
2919 do i=link_start,link_end
2920 C If ihpb(i) and jhpb(i) > NRES, this is a SC-SC distance, otherwise a
2921 C CA-CA distance used in regularization of structure.
2924 C iii and jjj point to the residues for which the distance is assigned.
2925 if (ii.gt.nres) then
2932 c write (iout,*) "i",i," ii",ii," iii",iii," jj",jj," jjj",jjj,
2933 c & dhpb(i),dhpb1(i),forcon(i)
2934 C 24/11/03 AL: SS bridges handled separately because of introducing a specific
2935 C distance and angle dependent SS bond potential.
2936 if (.not.dyn_ss .and. i.le.nss) then
2937 C 15/02/13 CC dynamic SSbond - additional check
2938 if (ii.gt.nres .and. itype(iii).eq.1 .and. itype(jjj).eq.1) then
2939 call ssbond_ene(iii,jjj,eij)
2942 cd write (iout,*) "eij",eij
2943 else if (ii.gt.nres .and. jj.gt.nres) then
2944 c Restraints from contact prediction
2946 if (dhpb1(i).gt.0.0d0) then
2947 ehpb=ehpb+2*forcon(i)*gnmr1(dd,dhpb(i),dhpb1(i))
2948 fac=forcon(i)*gnmr1prim(dd,dhpb(i),dhpb1(i))/dd
2949 c write (iout,*) "beta nmr",
2950 c & dd,2*forcon(i)*gnmr1(dd,dhpb(i),dhpb1(i))
2954 C Get the force constant corresponding to this distance.
2956 C Calculate the contribution to energy.
2957 ehpb=ehpb+waga*rdis*rdis
2958 c write (iout,*) "beta reg",dd,waga*rdis*rdis
2960 C Evaluate gradient.
2965 ggg(j)=fac*(c(j,jj)-c(j,ii))
2968 ghpbx(j,iii)=ghpbx(j,iii)-ggg(j)
2969 ghpbx(j,jjj)=ghpbx(j,jjj)+ggg(j)
2972 ghpbc(k,jjj)=ghpbc(k,jjj)+ggg(k)
2973 ghpbc(k,iii)=ghpbc(k,iii)-ggg(k)
2976 C Calculate the distance between the two points and its difference from the
2979 if (dhpb1(i).gt.0.0d0) then
2980 ehpb=ehpb+2*forcon(i)*gnmr1(dd,dhpb(i),dhpb1(i))
2981 fac=forcon(i)*gnmr1prim(dd,dhpb(i),dhpb1(i))/dd
2982 c write (iout,*) "alph nmr",
2983 c & dd,2*forcon(i)*gnmr1(dd,dhpb(i),dhpb1(i))
2986 C Get the force constant corresponding to this distance.
2988 C Calculate the contribution to energy.
2989 ehpb=ehpb+waga*rdis*rdis
2990 c write (iout,*) "alpha reg",dd,waga*rdis*rdis
2992 C Evaluate gradient.
2996 cd print *,'i=',i,' ii=',ii,' jj=',jj,' dhpb=',dhpb(i),' dd=',dd,
2997 cd & ' waga=',waga,' fac=',fac
2999 ggg(j)=fac*(c(j,jj)-c(j,ii))
3001 cd print '(i3,3(1pe14.5))',i,(ggg(j),j=1,3)
3002 C If this is a SC-SC distance, we need to calculate the contributions to the
3003 C Cartesian gradient in the SC vectors (ghpbx).
3006 ghpbx(j,iii)=ghpbx(j,iii)-ggg(j)
3007 ghpbx(j,jjj)=ghpbx(j,jjj)+ggg(j)
3011 ghpbc(k,jjj)=ghpbc(k,jjj)+ggg(k)
3012 ghpbc(k,iii)=ghpbc(k,iii)-ggg(k)
3019 C--------------------------------------------------------------------------
3020 subroutine ssbond_ene(i,j,eij)
3022 C Calculate the distance and angle dependent SS-bond potential energy
3023 C using a free-energy function derived based on RHF/6-31G** ab initio
3024 C calculations of diethyl disulfide.
3026 C A. Liwo and U. Kozlowska, 11/24/03
3028 implicit real*8 (a-h,o-z)
3029 include 'DIMENSIONS'
3030 include 'DIMENSIONS.ZSCOPT'
3031 include 'COMMON.SBRIDGE'
3032 include 'COMMON.CHAIN'
3033 include 'COMMON.DERIV'
3034 include 'COMMON.LOCAL'
3035 include 'COMMON.INTERACT'
3036 include 'COMMON.VAR'
3037 include 'COMMON.IOUNITS'
3038 double precision erij(3),dcosom1(3),dcosom2(3),gg(3)
3043 dxi=dc_norm(1,nres+i)
3044 dyi=dc_norm(2,nres+i)
3045 dzi=dc_norm(3,nres+i)
3046 dsci_inv=dsc_inv(itypi)
3048 dscj_inv=dsc_inv(itypj)
3052 dxj=dc_norm(1,nres+j)
3053 dyj=dc_norm(2,nres+j)
3054 dzj=dc_norm(3,nres+j)
3055 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
3060 om1=dxi*erij(1)+dyi*erij(2)+dzi*erij(3)
3061 om2=dxj*erij(1)+dyj*erij(2)+dzj*erij(3)
3062 om12=dxi*dxj+dyi*dyj+dzi*dzj
3064 dcosom1(k)=rij*(dc_norm(k,nres+i)-om1*erij(k))
3065 dcosom2(k)=rij*(dc_norm(k,nres+j)-om2*erij(k))
3071 deltat12=om2-om1+2.0d0
3073 eij=akcm*deltad*deltad+akth*(deltat1*deltat1+deltat2*deltat2)
3074 & +akct*deltad*deltat12+ebr
3075 c & +akct*deltad*deltat12
3076 & +v1ss*cosphi+v2ss*cosphi*cosphi+v3ss*cosphi*cosphi*cosphi
3077 write(iout,*) i,j,"rij",rij,"d0cm",d0cm," akcm",akcm," akth",akth,
3078 & " akct",akct," deltad",deltad," deltat",deltat1,deltat2,
3079 & " deltat12",deltat12," eij",eij,"ebr",ebr
3080 ed=2*akcm*deltad+akct*deltat12
3082 pom2=v1ss+2*v2ss*cosphi+3*v3ss*cosphi*cosphi
3083 eom1=-2*akth*deltat1-pom1-om2*pom2
3084 eom2= 2*akth*deltat2+pom1-om1*pom2
3087 gg(k)=ed*erij(k)+eom1*dcosom1(k)+eom2*dcosom2(k)
3090 ghpbx(k,i)=ghpbx(k,i)-gg(k)
3091 & +(eom12*dc_norm(k,nres+j)+eom1*erij(k))*dsci_inv
3092 ghpbx(k,j)=ghpbx(k,j)+gg(k)
3093 & +(eom12*dc_norm(k,nres+i)+eom2*erij(k))*dscj_inv
3096 C Calculate the components of the gradient in DC and X
3100 ghpbc(l,k)=ghpbc(l,k)+gg(l)
3105 C--------------------------------------------------------------------------
3108 c LICZENIE WIEZOW Z ROWNANIA ENERGII MODELLERA
3109 subroutine e_modeller(ehomology_constr)
3110 implicit real*8 (a-h,o-z)
3112 integer nnn, i, j, k, ki, irec, l
3113 integer katy, odleglosci, test7
3114 real*8 odleg, odleg2, odleg3, kat, kat2, kat3
3115 real*8 distance(499,499,19), dih_diff(499,19)
3116 real*8 distancek(19), min_odl(499,499)
3119 include 'DIMENSIONS'
3120 include 'COMMON.SBRIDGE'
3121 include 'COMMON.CHAIN'
3122 include 'COMMON.GEO'
3123 include 'COMMON.DERIV'
3124 include 'COMMON.LOCAL'
3125 include 'COMMON.INTERACT'
3126 include 'COMMON.VAR'
3127 include 'COMMON.IOUNITS'
3128 c include 'COMMON.MD'
3129 include 'COMMON.CONTROL'
3132 distancek(i)=9999999.9
3141 c LICZENIE WKLADU DO ENERGI POCHODZACEGO Z WIEZOW NA ODLEGLOSCI
3143 c write(iout,*) "TEST_ENE2 constr_homology=",constr_homology
3144 c write(iout,*) "TEST_ENE2 odl(1,3,1)=",odl(1,3,1)
3145 c write(iout,*) "TEST_ENE2 dist(2,4,1)=",dist(2,4,1)
3150 do k=1,constr_homology
3151 distance(i,j,k)=(odl(i,j,k)-dist(i+1,j+1))
3152 distancek(k)=waga_dist*((distance(i,j,k)**2)/
3153 & (2*(sigma_odl(i,j,k))**2))
3156 min_odl(i,j)=minval(distancek)
3158 c write(iout,*) "TEST_ENE2 distance=",distance(i,j,k), min_odl(i,j)
3160 do k=1,constr_homology
3161 odleg3=-waga_dist*((distance(i,j,k)**2)/
3162 & (2*(sigma_odl(i,j,k))**2))
3163 odleg2=odleg2+dexp(odleg3+min_odl(i,j))
3165 ccc write(iout,779) i,j,k, "odleg2=",odleg2, "odleg3=", odleg3,
3166 ccc & "dEXP(odleg3)=", dEXP(odleg3),"distance(i,j,k)^2=",
3167 ccc & distance(i,j,k)**2, "dist(i+1,j+1)=", dist(i+1,j+1),
3168 ccc & "sigma_odl(i,j,k)=", sigma_odl(i,j,k)
3170 odleg=odleg-dLOG(odleg2/constr_homology)+min_odl(i,j)
3171 ccc write(iout,778)"TEST: odleg2=", odleg2, "DLOG(odleg2)=",
3172 ccc & dLOG(odleg2),"-odleg=", -odleg
3178 c write(iout,*) "TEST_ENE2 odleg=",odleg
3181 c LICZENIE WKLADU DO ENERGI POCHODZACEGO Z WIEZOW NA KATY W
3183 do k=1,constr_homology
3184 dih_diff(i,k)=(dih(i,k)-beta(i+1,i+2,i+3,i+4))
3185 if (dih_diff(i,k).gt.3.14159) dih_diff(i,k)=
3186 & -(6.28318-dih_diff(i,k))
3187 if (dih_diff(i,k).lt.-3.14159) dih_diff(i,k)=
3188 & 6.28318+dih_diff(i,k)
3190 kat3=-waga_angle*((dih_diff(i,k)**2)/
3191 & (2*(sigma_dih(i,k))**2))
3192 c write(iout,*) "w(i,k)=",w(i,k),"beta=",beta(i+1,i+2,i+3,i+4)
3193 kat2=kat2+dexp(kat3)
3194 c write(iout,*) "kat2=", kat2, "exp(kat3)=", exp(kat3)
3197 kat=kat-dLOG(kat2/constr_homology)
3199 ccc write(iout,778)"TEST: kat2=", kat2, "DLOG(kat2)=",
3200 ccc & dLOG(kat2), "-kat=", -kat
3205 c write(iout,*) "TEST_ENE2 kat=",kat
3208 c write(iout,748) "2odleg=", odleg, "kat=", kat,"suma=",odleg+kat
3212 c ----------------------------------------------------------------------
3213 c LICZENIE GRADIENTU
3214 c ----------------------------------------------------------------------
3220 c GRADIENT DLA ODLEGLOSCI
3223 do k=1,constr_homology
3224 godl=dexp(((-(distance(i,j,k)**2)/(2*(sigma_odl(i,j,k))**2))
3225 & *waga_dist)+min_odl(i,j))
3226 sgodl=godl*((-((distance(i,j,k))/
3227 & ((sigma_odl(i,j,k))**2)))*waga_dist)
3229 sum_godl=sum_godl+godl
3230 sum_sgodl=sum_sgodl+sgodl
3232 c sgodl2=sgodl2+sgodl
3233 c write(iout,*) i, j, k, distance(i,j,k), "W GRADIENCIE1"
3234 c write(iout,*) "constr_homology=",constr_homology
3235 c write(iout,*) i, j, k, "TEST K"
3238 grad_odl3=((1/sum_godl)*sum_sgodl)
3244 c write(iout,*) i, j, k, distance(i,j,k), "W GRADIENCIE2"
3245 c write(iout,*) (distance(i,j,k)**2), (2*(sigma_odl(i,j,k))**2),
3246 c & (-(distance(i,j,k)**2)/(2*(sigma_odl(i,j,k))**2))
3248 ccc write(iout,*) godl, sgodl, grad_odl3
3250 c grad_odl=grad_odl+grad_odl3
3253 ggodl=grad_odl3*(c(jik,i+1)-c(jik,j+1))
3254 ccc write(iout,*) c(jik,i+1), c(jik,j+1), (c(jik,i+1)-c(jik,j+1))
3255 ccc write(iout,746) "GRAD_ODL_1", i, j, jik, ggodl,
3256 ccc & ghpbc(jik,i+1), ghpbc(jik,j+1)
3257 ghpbc(jik,i+1)=ghpbc(jik,i+1)+ggodl
3258 ghpbc(jik,j+1)=ghpbc(jik,j+1)-ggodl
3259 ccc write(iout,746) "GRAD_ODL_2", i, j, jik, ggodl,
3260 ccc & ghpbc(jik,i+1), ghpbc(jik,j+1)
3268 c GRADIENT DLA KATOW
3272 do k=1,constr_homology
3273 gdih=dexp((-(dih_diff(i,k)**2)/(2*(sigma_dih(i,k))**2))
3275 sgdih=gdih*((-((dih_diff(i,k))/
3276 & ((sigma_dih(i,k))**2)))*waga_angle)
3278 sum_gdih=sum_gdih+gdih
3279 sum_sgdih=sum_sgdih+sgdih
3281 grad_dih3=((1.0/sum_gdih)*sum_sgdih)
3285 c write(iout,*)i,k,gdih,sgdih,beta(i+1,i+2,i+3,i+4),grad_dih3
3286 ccc write(iout,747) "GRAD_KAT_1", i, nphi, icg, grad_dih3,
3287 ccc & gloc(nphi+i-3,icg)
3288 gloc(i+1,icg)=gloc(i+1,icg)+grad_dih3
3289 ccc write(iout,747) "GRAD_KAT_2", i, nphi, icg, grad_dih3,
3290 ccc & gloc(nphi+i-3,icg)
3296 c CALKOWITY WKLAD DO ENERGII WYNIKAJACY Z WIEZOW
3297 ehomology_constr=odleg+kat
3299 c write(iout,*) "TEST_ENE2 ehomology_constr=",ehomology_constr
3300 c write(iout,*) "TEST_ENE2"
3304 748 format(a8,f12.3,a6,f12.3,a7,f12.3)
3305 747 format(a12,i4,i4,i4,f8.3,f8.3)
3306 746 format(a12,i4,i4,i4,f8.3,f8.3,f8.3)
3307 778 format(a7,1X,f10.3,1X,a4,1X,f10.3,1X,a5,1X,f10.3)
3308 779 format(i3,1X,i3,1X,i2,1X,a7,1X,f7.3,1X,a7,1X,f7.3,1X,a13,1X,
3309 & f7.3,1X,a17,1X,f9.3,1X,a10,1X,f8.3,1X,a10,1X,f8.3)
3317 c-----------------------------------------------------------------------
3318 subroutine ebond(estr)
3320 c Evaluate the energy of stretching of the CA-CA and CA-SC virtual bonds
3322 implicit real*8 (a-h,o-z)
3323 include 'DIMENSIONS'
3324 include 'DIMENSIONS.ZSCOPT'
3325 include 'COMMON.LOCAL'
3326 include 'COMMON.GEO'
3327 include 'COMMON.INTERACT'
3328 include 'COMMON.DERIV'
3329 include 'COMMON.VAR'
3330 include 'COMMON.CHAIN'
3331 include 'COMMON.IOUNITS'
3332 include 'COMMON.NAMES'
3333 include 'COMMON.FFIELD'
3334 include 'COMMON.CONTROL'
3335 double precision u(3),ud(3)
3336 logical :: lprn=.false.
3339 diff = vbld(i)-vbldp0
3340 c write (iout,*) i,vbld(i),vbldp0,diff,AKP*diff*diff
3343 gradb(j,i-1)=AKP*diff*dc(j,i-1)/vbld(i)
3348 c 09/18/07 AL: multimodal bond potential based on AM1 CA-SC PMF's included
3355 diff=vbld(i+nres)-vbldsc0(1,iti)
3357 & write (iout,*) i,iti,vbld(i+nres),vbldsc0(1,iti),diff,
3358 & AKSC(1,iti),AKSC(1,iti)*diff*diff
3359 estr=estr+0.5d0*AKSC(1,iti)*diff*diff
3361 gradbx(j,i)=AKSC(1,iti)*diff*dc(j,i+nres)/vbld(i+nres)
3365 diff=vbld(i+nres)-vbldsc0(j,iti)
3366 ud(j)=aksc(j,iti)*diff
3367 u(j)=abond0(j,iti)+0.5d0*ud(j)*diff
3381 uprod2=uprod2*u(k)*u(k)
3385 usumsqder=usumsqder+ud(j)*uprod2
3388 & write (iout,*) i,iti,vbld(i+nres),(vbldsc0(j,iti),
3389 & AKSC(j,iti),abond0(j,iti),u(j),j=1,nbi)
3390 estr=estr+uprod/usum
3392 gradbx(j,i)=usumsqder/(usum*usum)*dc(j,i+nres)/vbld(i+nres)
3400 C--------------------------------------------------------------------------
3401 subroutine ebend(etheta)
3403 C Evaluate the virtual-bond-angle energy given the virtual-bond dihedral
3404 C angles gamma and its derivatives in consecutive thetas and gammas.
3406 implicit real*8 (a-h,o-z)
3407 include 'DIMENSIONS'
3408 include 'DIMENSIONS.ZSCOPT'
3409 include 'COMMON.LOCAL'
3410 include 'COMMON.GEO'
3411 include 'COMMON.INTERACT'
3412 include 'COMMON.DERIV'
3413 include 'COMMON.VAR'
3414 include 'COMMON.CHAIN'
3415 include 'COMMON.IOUNITS'
3416 include 'COMMON.NAMES'
3417 include 'COMMON.FFIELD'
3418 common /calcthet/ term1,term2,termm,diffak,ratak,
3419 & ak,aktc,termpre,termexp,sigc,sig0i,time11,time12,sigcsq,
3420 & delthe0,sig0inv,sigtc,sigsqtc,delthec,it
3421 double precision y(2),z(2)
3423 time11=dexp(-2*time)
3426 c write (iout,*) "nres",nres
3427 c write (*,'(a,i2)') 'EBEND ICG=',icg
3428 c write (iout,*) ithet_start,ithet_end
3429 do i=ithet_start,ithet_end
3430 C Zero the energy function and its derivative at 0 or pi.
3431 call splinthet(theta(i),0.5d0*delta,ss,ssd)
3433 c if (i.gt.ithet_start .and.
3434 c & (itel(i-1).eq.0 .or. itel(i-2).eq.0)) goto 1215
3435 c if (i.gt.3 .and. (i.le.4 .or. itel(i-3).ne.0)) then
3443 c if (i.lt.nres .and. itel(i).ne.0) then
3455 call proc_proc(phii,icrc)
3456 if (icrc.eq.1) phii=150.0
3470 call proc_proc(phii1,icrc)
3471 if (icrc.eq.1) phii1=150.0
3483 C Calculate the "mean" value of theta from the part of the distribution
3484 C dependent on the adjacent virtual-bond-valence angles (gamma1 & gamma2).
3485 C In following comments this theta will be referred to as t_c.
3486 thet_pred_mean=0.0d0
3490 thet_pred_mean=thet_pred_mean+athetk*y(k)+bthetk*z(k)
3492 c write (iout,*) "thet_pred_mean",thet_pred_mean
3493 dthett=thet_pred_mean*ssd
3494 thet_pred_mean=thet_pred_mean*ss+a0thet(it)
3495 c write (iout,*) "thet_pred_mean",thet_pred_mean
3496 C Derivatives of the "mean" values in gamma1 and gamma2.
3497 dthetg1=(-athet(1,it)*y(2)+athet(2,it)*y(1))*ss
3498 dthetg2=(-bthet(1,it)*z(2)+bthet(2,it)*z(1))*ss
3499 if (theta(i).gt.pi-delta) then
3500 call theteng(pi-delta,thet_pred_mean,theta0(it),f0,fprim0,
3502 call mixder(pi-delta,thet_pred_mean,theta0(it),fprim_tc0)
3503 call theteng(pi,thet_pred_mean,theta0(it),f1,fprim1,E_tc1)
3504 call spline1(theta(i),pi-delta,delta,f0,f1,fprim0,ethetai,
3506 call spline2(theta(i),pi-delta,delta,E_tc0,E_tc1,fprim_tc0,
3508 else if (theta(i).lt.delta) then
3509 call theteng(delta,thet_pred_mean,theta0(it),f0,fprim0,E_tc0)
3510 call theteng(0.0d0,thet_pred_mean,theta0(it),f1,fprim1,E_tc1)
3511 call spline1(theta(i),delta,-delta,f0,f1,fprim0,ethetai,
3513 call mixder(delta,thet_pred_mean,theta0(it),fprim_tc0)
3514 call spline2(theta(i),delta,-delta,E_tc0,E_tc1,fprim_tc0,
3517 call theteng(theta(i),thet_pred_mean,theta0(it),ethetai,
3520 etheta=etheta+ethetai
3521 c write (iout,'(2i3,3f8.3,f10.5)') i,it,rad2deg*theta(i),
3522 c & rad2deg*phii,rad2deg*phii1,ethetai
3523 if (i.gt.3) gloc(i-3,icg)=gloc(i-3,icg)+wang*E_tc*dthetg1
3524 if (i.lt.nres) gloc(i-2,icg)=gloc(i-2,icg)+wang*E_tc*dthetg2
3525 gloc(nphi+i-2,icg)=wang*(E_theta+E_tc*dthett)
3528 C Ufff.... We've done all this!!!
3531 C---------------------------------------------------------------------------
3532 subroutine theteng(thetai,thet_pred_mean,theta0i,ethetai,E_theta,
3534 implicit real*8 (a-h,o-z)
3535 include 'DIMENSIONS'
3536 include 'COMMON.LOCAL'
3537 include 'COMMON.IOUNITS'
3538 common /calcthet/ term1,term2,termm,diffak,ratak,
3539 & ak,aktc,termpre,termexp,sigc,sig0i,time11,time12,sigcsq,
3540 & delthe0,sig0inv,sigtc,sigsqtc,delthec,it
3541 C Calculate the contributions to both Gaussian lobes.
3542 C 6/6/97 - Deform the Gaussians using the factor of 1/(1+time)
3543 C The "polynomial part" of the "standard deviation" of this part of
3547 sig=sig*thet_pred_mean+polthet(j,it)
3549 C Derivative of the "interior part" of the "standard deviation of the"
3550 C gamma-dependent Gaussian lobe in t_c.
3551 sigtc=3*polthet(3,it)
3553 sigtc=sigtc*thet_pred_mean+j*polthet(j,it)
3556 C Set the parameters of both Gaussian lobes of the distribution.
3557 C "Standard deviation" of the gamma-dependent Gaussian lobe (sigtc)
3558 fac=sig*sig+sigc0(it)
3561 C Following variable (sigsqtc) is -(1/2)d[sigma(t_c)**(-2))]/dt_c
3562 sigsqtc=-4.0D0*sigcsq*sigtc
3563 c print *,i,sig,sigtc,sigsqtc
3564 C Following variable (sigtc) is d[sigma(t_c)]/dt_c
3565 sigtc=-sigtc/(fac*fac)
3566 C Following variable is sigma(t_c)**(-2)
3567 sigcsq=sigcsq*sigcsq
3569 sig0inv=1.0D0/sig0i**2
3570 delthec=thetai-thet_pred_mean
3571 delthe0=thetai-theta0i
3572 term1=-0.5D0*sigcsq*delthec*delthec
3573 term2=-0.5D0*sig0inv*delthe0*delthe0
3574 C Following fuzzy logic is to avoid underflows in dexp and subsequent INFs and
3575 C NaNs in taking the logarithm. We extract the largest exponent which is added
3576 C to the energy (this being the log of the distribution) at the end of energy
3577 C term evaluation for this virtual-bond angle.
3578 if (term1.gt.term2) then
3580 term2=dexp(term2-termm)
3584 term1=dexp(term1-termm)
3587 C The ratio between the gamma-independent and gamma-dependent lobes of
3588 C the distribution is a Gaussian function of thet_pred_mean too.
3589 diffak=gthet(2,it)-thet_pred_mean
3590 ratak=diffak/gthet(3,it)**2
3591 ak=dexp(gthet(1,it)-0.5D0*diffak*ratak)
3592 C Let's differentiate it in thet_pred_mean NOW.
3594 C Now put together the distribution terms to make complete distribution.
3595 termexp=term1+ak*term2
3596 termpre=sigc+ak*sig0i
3597 C Contribution of the bending energy from this theta is just the -log of
3598 C the sum of the contributions from the two lobes and the pre-exponential
3599 C factor. Simple enough, isn't it?
3600 ethetai=(-dlog(termexp)-termm+dlog(termpre))
3601 C NOW the derivatives!!!
3602 C 6/6/97 Take into account the deformation.
3603 E_theta=(delthec*sigcsq*term1
3604 & +ak*delthe0*sig0inv*term2)/termexp
3605 E_tc=((sigtc+aktc*sig0i)/termpre
3606 & -((delthec*sigcsq+delthec*delthec*sigsqtc)*term1+
3607 & aktc*term2)/termexp)
3610 c-----------------------------------------------------------------------------
3611 subroutine mixder(thetai,thet_pred_mean,theta0i,E_tc_t)
3612 implicit real*8 (a-h,o-z)
3613 include 'DIMENSIONS'
3614 include 'COMMON.LOCAL'
3615 include 'COMMON.IOUNITS'
3616 common /calcthet/ term1,term2,termm,diffak,ratak,
3617 & ak,aktc,termpre,termexp,sigc,sig0i,time11,time12,sigcsq,
3618 & delthe0,sig0inv,sigtc,sigsqtc,delthec,it
3619 delthec=thetai-thet_pred_mean
3620 delthe0=thetai-theta0i
3621 C "Thank you" to MAPLE (probably spared one day of hand-differentiation).
3622 t3 = thetai-thet_pred_mean
3626 t14 = t12+t6*sigsqtc
3628 t21 = thetai-theta0i
3634 E_tc_t = -((sigcsq+2.D0*t3*sigsqtc)*t9-t14*sigcsq*t3*t16*t9
3635 & -aktc*sig0inv*t27)/t32+(t14*t9+aktc*t26)/t40
3636 & *(-t12*t9-ak*sig0inv*t27)
3640 C--------------------------------------------------------------------------
3641 subroutine ebend(etheta)
3643 C Evaluate the virtual-bond-angle energy given the virtual-bond dihedral
3644 C angles gamma and its derivatives in consecutive thetas and gammas.
3645 C ab initio-derived potentials from
3646 c Kozlowska et al., J. Phys.: Condens. Matter 19 (2007) 285203
3648 implicit real*8 (a-h,o-z)
3649 include 'DIMENSIONS'
3650 include 'DIMENSIONS.ZSCOPT'
3651 include 'COMMON.LOCAL'
3652 include 'COMMON.GEO'
3653 include 'COMMON.INTERACT'
3654 include 'COMMON.DERIV'
3655 include 'COMMON.VAR'
3656 include 'COMMON.CHAIN'
3657 include 'COMMON.IOUNITS'
3658 include 'COMMON.NAMES'
3659 include 'COMMON.FFIELD'
3660 include 'COMMON.CONTROL'
3661 double precision coskt(mmaxtheterm),sinkt(mmaxtheterm),
3662 & cosph1(maxsingle),sinph1(maxsingle),cosph2(maxsingle),
3663 & sinph2(maxsingle),cosph1ph2(maxdouble,maxdouble),
3664 & sinph1ph2(maxdouble,maxdouble)
3665 logical lprn /.false./, lprn1 /.false./
3667 c write (iout,*) "ithetyp",(ithetyp(i),i=1,ntyp1)
3668 do i=ithet_start,ithet_end
3672 theti2=0.5d0*theta(i)
3673 ityp2=ithetyp(itype(i-1))
3675 coskt(k)=dcos(k*theti2)
3676 sinkt(k)=dsin(k*theti2)
3681 if (phii.ne.phii) phii=150.0
3685 ityp1=ithetyp(itype(i-2))
3687 cosph1(k)=dcos(k*phii)
3688 sinph1(k)=dsin(k*phii)
3701 if (phii1.ne.phii1) phii1=150.0
3706 ityp3=ithetyp(itype(i))
3708 cosph2(k)=dcos(k*phii1)
3709 sinph2(k)=dsin(k*phii1)
3719 c write (iout,*) "i",i," ityp1",itype(i-2),ityp1,
3720 c & " ityp2",itype(i-1),ityp2," ityp3",itype(i),ityp3
3722 ethetai=aa0thet(ityp1,ityp2,ityp3)
3725 ccl=cosph1(l)*cosph2(k-l)
3726 ssl=sinph1(l)*sinph2(k-l)
3727 scl=sinph1(l)*cosph2(k-l)
3728 csl=cosph1(l)*sinph2(k-l)
3729 cosph1ph2(l,k)=ccl-ssl
3730 cosph1ph2(k,l)=ccl+ssl
3731 sinph1ph2(l,k)=scl+csl
3732 sinph1ph2(k,l)=scl-csl
3736 write (iout,*) "i",i," ityp1",ityp1," ityp2",ityp2,
3737 & " ityp3",ityp3," theti2",theti2," phii",phii," phii1",phii1
3738 write (iout,*) "coskt and sinkt"
3740 write (iout,*) k,coskt(k),sinkt(k)
3744 ethetai=ethetai+aathet(k,ityp1,ityp2,ityp3)*sinkt(k)
3745 dethetai=dethetai+0.5d0*k*aathet(k,ityp1,ityp2,ityp3)
3748 & write (iout,*) "k",k," aathet",aathet(k,ityp1,ityp2,ityp3),
3749 & " ethetai",ethetai
3752 write (iout,*) "cosph and sinph"
3754 write (iout,*) k,cosph1(k),sinph1(k),cosph2(k),sinph2(k)
3756 write (iout,*) "cosph1ph2 and sinph2ph2"
3759 write (iout,*) l,k,cosph1ph2(l,k),cosph1ph2(k,l),
3760 & sinph1ph2(l,k),sinph1ph2(k,l)
3763 write(iout,*) "ethetai",ethetai
3767 aux=bbthet(k,m,ityp1,ityp2,ityp3)*cosph1(k)
3768 & +ccthet(k,m,ityp1,ityp2,ityp3)*sinph1(k)
3769 & +ddthet(k,m,ityp1,ityp2,ityp3)*cosph2(k)
3770 & +eethet(k,m,ityp1,ityp2,ityp3)*sinph2(k)
3771 ethetai=ethetai+sinkt(m)*aux
3772 dethetai=dethetai+0.5d0*m*aux*coskt(m)
3773 dephii=dephii+k*sinkt(m)*(
3774 & ccthet(k,m,ityp1,ityp2,ityp3)*cosph1(k)-
3775 & bbthet(k,m,ityp1,ityp2,ityp3)*sinph1(k))
3776 dephii1=dephii1+k*sinkt(m)*(
3777 & eethet(k,m,ityp1,ityp2,ityp3)*cosph2(k)-
3778 & ddthet(k,m,ityp1,ityp2,ityp3)*sinph2(k))
3780 & write (iout,*) "m",m," k",k," bbthet",
3781 & bbthet(k,m,ityp1,ityp2,ityp3)," ccthet",
3782 & ccthet(k,m,ityp1,ityp2,ityp3)," ddthet",
3783 & ddthet(k,m,ityp1,ityp2,ityp3)," eethet",
3784 & eethet(k,m,ityp1,ityp2,ityp3)," ethetai",ethetai
3788 & write(iout,*) "ethetai",ethetai
3792 aux=ffthet(l,k,m,ityp1,ityp2,ityp3)*cosph1ph2(l,k)+
3793 & ffthet(k,l,m,ityp1,ityp2,ityp3)*cosph1ph2(k,l)+
3794 & ggthet(l,k,m,ityp1,ityp2,ityp3)*sinph1ph2(l,k)+
3795 & ggthet(k,l,m,ityp1,ityp2,ityp3)*sinph1ph2(k,l)
3796 ethetai=ethetai+sinkt(m)*aux
3797 dethetai=dethetai+0.5d0*m*coskt(m)*aux
3798 dephii=dephii+l*sinkt(m)*(
3799 & -ffthet(l,k,m,ityp1,ityp2,ityp3)*sinph1ph2(l,k)-
3800 & ffthet(k,l,m,ityp1,ityp2,ityp3)*sinph1ph2(k,l)+
3801 & ggthet(l,k,m,ityp1,ityp2,ityp3)*cosph1ph2(l,k)+
3802 & ggthet(k,l,m,ityp1,ityp2,ityp3)*cosph1ph2(k,l))
3803 dephii1=dephii1+(k-l)*sinkt(m)*(
3804 & -ffthet(l,k,m,ityp1,ityp2,ityp3)*sinph1ph2(l,k)+
3805 & ffthet(k,l,m,ityp1,ityp2,ityp3)*sinph1ph2(k,l)+
3806 & ggthet(l,k,m,ityp1,ityp2,ityp3)*cosph1ph2(l,k)-
3807 & ggthet(k,l,m,ityp1,ityp2,ityp3)*cosph1ph2(k,l))
3809 write (iout,*) "m",m," k",k," l",l," ffthet",
3810 & ffthet(l,k,m,ityp1,ityp2,ityp3),
3811 & ffthet(k,l,m,ityp1,ityp2,ityp3)," ggthet",
3812 & ggthet(l,k,m,ityp1,ityp2,ityp3),
3813 & ggthet(k,l,m,ityp1,ityp2,ityp3)," ethetai",ethetai
3814 write (iout,*) cosph1ph2(l,k)*sinkt(m),
3815 & cosph1ph2(k,l)*sinkt(m),
3816 & sinph1ph2(l,k)*sinkt(m),sinph1ph2(k,l)*sinkt(m)
3823 if (lprn1) write (iout,'(a4,i2,3f8.1,9h ethetai ,f10.5)')
3824 & 'ebe',i,theta(i)*rad2deg,phii*rad2deg,
3825 & phii1*rad2deg,ethetai
3827 etheta=etheta+ethetai
3829 if (i.gt.3) gloc(i-3,icg)=gloc(i-3,icg)+wang*dephii
3830 if (i.lt.nres) gloc(i-2,icg)=gloc(i-2,icg)+wang*dephii1
3831 gloc(nphi+i-2,icg)=wang*dethetai
3837 c-----------------------------------------------------------------------------
3838 subroutine esc(escloc)
3839 C Calculate the local energy of a side chain and its derivatives in the
3840 C corresponding virtual-bond valence angles THETA and the spherical angles
3842 implicit real*8 (a-h,o-z)
3843 include 'DIMENSIONS'
3844 include 'DIMENSIONS.ZSCOPT'
3845 include 'COMMON.GEO'
3846 include 'COMMON.LOCAL'
3847 include 'COMMON.VAR'
3848 include 'COMMON.INTERACT'
3849 include 'COMMON.DERIV'
3850 include 'COMMON.CHAIN'
3851 include 'COMMON.IOUNITS'
3852 include 'COMMON.NAMES'
3853 include 'COMMON.FFIELD'
3854 double precision x(3),dersc(3),xemp(3),dersc0(3),dersc1(3),
3855 & ddersc0(3),ddummy(3),xtemp(3),temp(3)
3856 common /sccalc/ time11,time12,time112,theti,it,nlobit
3859 c write (iout,'(a)') 'ESC'
3860 do i=loc_start,loc_end
3862 if (it.eq.10) goto 1
3864 c print *,'i=',i,' it=',it,' nlobit=',nlobit
3865 c write (iout,*) 'i=',i,' ssa=',ssa,' ssad=',ssad
3866 theti=theta(i+1)-pipol
3870 c write (iout,*) "i",i," x",x(1),x(2),x(3)
3872 if (x(2).gt.pi-delta) then
3876 call enesc(xtemp,escloci0,dersc0,ddersc0,.true.)
3878 call enesc(xtemp,escloci1,dersc1,ddummy,.false.)
3879 call spline1(x(2),pi-delta,delta,escloci0,escloci1,dersc0(2),
3881 call spline2(x(2),pi-delta,delta,dersc0(1),dersc1(1),
3882 & ddersc0(1),dersc(1))
3883 call spline2(x(2),pi-delta,delta,dersc0(3),dersc1(3),
3884 & ddersc0(3),dersc(3))
3886 call enesc_bound(xtemp,esclocbi0,dersc0,dersc12,.true.)
3888 call enesc_bound(xtemp,esclocbi1,dersc1,chuju,.false.)
3889 call spline1(x(2),pi-delta,delta,esclocbi0,esclocbi1,
3890 & dersc0(2),esclocbi,dersc02)
3891 call spline2(x(2),pi-delta,delta,dersc0(1),dersc1(1),
3893 call splinthet(x(2),0.5d0*delta,ss,ssd)
3898 dersc(k)=ss*dersc(k)+(1.0d0-ss)*dersc0(k)
3900 dersc(2)=dersc(2)+ssd*(escloci-esclocbi)
3901 c write (iout,*) 'i=',i,x(2)*rad2deg,escloci0,escloci,
3903 escloci=ss*escloci+(1.0d0-ss)*esclocbi
3905 c write (iout,*) escloci
3906 else if (x(2).lt.delta) then
3910 call enesc(xtemp,escloci0,dersc0,ddersc0,.true.)
3912 call enesc(xtemp,escloci1,dersc1,ddummy,.false.)
3913 call spline1(x(2),delta,-delta,escloci0,escloci1,dersc0(2),
3915 call spline2(x(2),delta,-delta,dersc0(1),dersc1(1),
3916 & ddersc0(1),dersc(1))
3917 call spline2(x(2),delta,-delta,dersc0(3),dersc1(3),
3918 & ddersc0(3),dersc(3))
3920 call enesc_bound(xtemp,esclocbi0,dersc0,dersc12,.true.)
3922 call enesc_bound(xtemp,esclocbi1,dersc1,chuju,.false.)
3923 call spline1(x(2),delta,-delta,esclocbi0,esclocbi1,
3924 & dersc0(2),esclocbi,dersc02)
3925 call spline2(x(2),delta,-delta,dersc0(1),dersc1(1),
3930 call splinthet(x(2),0.5d0*delta,ss,ssd)
3932 dersc(k)=ss*dersc(k)+(1.0d0-ss)*dersc0(k)
3934 dersc(2)=dersc(2)+ssd*(escloci-esclocbi)
3935 c write (iout,*) 'i=',i,x(2)*rad2deg,escloci0,escloci,
3937 escloci=ss*escloci+(1.0d0-ss)*esclocbi
3938 c write (iout,*) escloci
3940 call enesc(x,escloci,dersc,ddummy,.false.)
3943 escloc=escloc+escloci
3944 c write (iout,*) 'i=',i,' escloci=',escloci,' dersc=',dersc
3946 gloc(nphi+i-1,icg)=gloc(nphi+i-1,icg)+
3948 gloc(ialph(i,1),icg)=wscloc*dersc(2)
3949 gloc(ialph(i,1)+nside,icg)=wscloc*dersc(3)
3954 C---------------------------------------------------------------------------
3955 subroutine enesc(x,escloci,dersc,ddersc,mixed)
3956 implicit real*8 (a-h,o-z)
3957 include 'DIMENSIONS'
3958 include 'COMMON.GEO'
3959 include 'COMMON.LOCAL'
3960 include 'COMMON.IOUNITS'
3961 common /sccalc/ time11,time12,time112,theti,it,nlobit
3962 double precision x(3),z(3),Ax(3,maxlob,-1:1),dersc(3),ddersc(3)
3963 double precision contr(maxlob,-1:1)
3965 c write (iout,*) 'it=',it,' nlobit=',nlobit
3969 if (mixed) ddersc(j)=0.0d0
3973 C Because of periodicity of the dependence of the SC energy in omega we have
3974 C to add up the contributions from x(3)-2*pi, x(3), and x(3+2*pi).
3975 C To avoid underflows, first compute & store the exponents.
3983 z(k)=x(k)-censc(k,j,it)
3988 Axk=Axk+gaussc(l,k,j,it)*z(l)
3994 expfac=expfac+Ax(k,j,iii)*z(k)
4002 C As in the case of ebend, we want to avoid underflows in exponentiation and
4003 C subsequent NaNs and INFs in energy calculation.
4004 C Find the largest exponent
4008 if (emin.gt.contr(j,iii)) emin=contr(j,iii)
4012 cd print *,'it=',it,' emin=',emin
4014 C Compute the contribution to SC energy and derivatives
4018 expfac=dexp(bsc(j,it)-0.5D0*contr(j,iii)+emin)
4019 cd print *,'j=',j,' expfac=',expfac
4020 escloc_i=escloc_i+expfac
4022 dersc(k)=dersc(k)+Ax(k,j,iii)*expfac
4026 ddersc(k)=ddersc(k)+(-Ax(2,j,iii)*Ax(k,j,iii)
4027 & +gaussc(k,2,j,it))*expfac
4034 dersc(1)=dersc(1)/cos(theti)**2
4035 ddersc(1)=ddersc(1)/cos(theti)**2
4038 escloci=-(dlog(escloc_i)-emin)
4040 dersc(j)=dersc(j)/escloc_i
4044 ddersc(j)=(ddersc(j)/escloc_i+dersc(2)*dersc(j))
4049 C------------------------------------------------------------------------------
4050 subroutine enesc_bound(x,escloci,dersc,dersc12,mixed)
4051 implicit real*8 (a-h,o-z)
4052 include 'DIMENSIONS'
4053 include 'COMMON.GEO'
4054 include 'COMMON.LOCAL'
4055 include 'COMMON.IOUNITS'
4056 common /sccalc/ time11,time12,time112,theti,it,nlobit
4057 double precision x(3),z(3),Ax(3,maxlob),dersc(3)
4058 double precision contr(maxlob)
4069 z(k)=x(k)-censc(k,j,it)
4075 Axk=Axk+gaussc(l,k,j,it)*z(l)
4081 expfac=expfac+Ax(k,j)*z(k)
4086 C As in the case of ebend, we want to avoid underflows in exponentiation and
4087 C subsequent NaNs and INFs in energy calculation.
4088 C Find the largest exponent
4091 if (emin.gt.contr(j)) emin=contr(j)
4095 C Compute the contribution to SC energy and derivatives
4099 expfac=dexp(bsc(j,it)-0.5D0*contr(j)+emin)
4100 escloc_i=escloc_i+expfac
4102 dersc(k)=dersc(k)+Ax(k,j)*expfac
4104 if (mixed) dersc12=dersc12+(-Ax(2,j)*Ax(1,j)
4105 & +gaussc(1,2,j,it))*expfac
4109 dersc(1)=dersc(1)/cos(theti)**2
4110 dersc12=dersc12/cos(theti)**2
4111 escloci=-(dlog(escloc_i)-emin)
4113 dersc(j)=dersc(j)/escloc_i
4115 if (mixed) dersc12=(dersc12/escloc_i+dersc(2)*dersc(1))
4119 c----------------------------------------------------------------------------------
4120 subroutine esc(escloc)
4121 C Calculate the local energy of a side chain and its derivatives in the
4122 C corresponding virtual-bond valence angles THETA and the spherical angles
4123 C ALPHA and OMEGA derived from AM1 all-atom calculations.
4124 C added by Urszula Kozlowska. 07/11/2007
4126 implicit real*8 (a-h,o-z)
4127 include 'DIMENSIONS'
4128 include 'DIMENSIONS.ZSCOPT'
4129 include 'COMMON.GEO'
4130 include 'COMMON.LOCAL'
4131 include 'COMMON.VAR'
4132 include 'COMMON.SCROT'
4133 include 'COMMON.INTERACT'
4134 include 'COMMON.DERIV'
4135 include 'COMMON.CHAIN'
4136 include 'COMMON.IOUNITS'
4137 include 'COMMON.NAMES'
4138 include 'COMMON.FFIELD'
4139 include 'COMMON.CONTROL'
4140 include 'COMMON.VECTORS'
4141 double precision x_prime(3),y_prime(3),z_prime(3)
4142 & , sumene,dsc_i,dp2_i,x(65),
4143 & xx,yy,zz,sumene1,sumene2,sumene3,sumene4,s1,s1_6,s2,s2_6,
4144 & de_dxx,de_dyy,de_dzz,de_dt
4145 double precision s1_t,s1_6_t,s2_t,s2_6_t
4147 & dXX_Ci1(3),dYY_Ci1(3),dZZ_Ci1(3),dXX_Ci(3),
4148 & dYY_Ci(3),dZZ_Ci(3),dXX_XYZ(3),dYY_XYZ(3),dZZ_XYZ(3),
4149 & dt_dCi(3),dt_dCi1(3)
4150 common /sccalc/ time11,time12,time112,theti,it,nlobit
4153 do i=loc_start,loc_end
4154 costtab(i+1) =dcos(theta(i+1))
4155 sinttab(i+1) =dsqrt(1-costtab(i+1)*costtab(i+1))
4156 cost2tab(i+1)=dsqrt(0.5d0*(1.0d0+costtab(i+1)))
4157 sint2tab(i+1)=dsqrt(0.5d0*(1.0d0-costtab(i+1)))
4158 cosfac2=0.5d0/(1.0d0+costtab(i+1))
4159 cosfac=dsqrt(cosfac2)
4160 sinfac2=0.5d0/(1.0d0-costtab(i+1))
4161 sinfac=dsqrt(sinfac2)
4163 if (it.eq.10) goto 1
4165 C Compute the axes of tghe local cartesian coordinates system; store in
4166 c x_prime, y_prime and z_prime
4173 C write(2,*) "dc_norm", dc_norm(1,i+nres),dc_norm(2,i+nres),
4174 C & dc_norm(3,i+nres)
4176 x_prime(j) = (dc_norm(j,i) - dc_norm(j,i-1))*cosfac
4177 y_prime(j) = (dc_norm(j,i) + dc_norm(j,i-1))*sinfac
4180 z_prime(j) = -uz(j,i-1)
4183 c write (2,*) "x_prime",(x_prime(j),j=1,3)
4184 c write (2,*) "y_prime",(y_prime(j),j=1,3)
4185 c write (2,*) "z_prime",(z_prime(j),j=1,3)
4186 c write (2,*) "xx",scalar(x_prime(1),x_prime(1)),
4187 c & " xy",scalar(x_prime(1),y_prime(1)),
4188 c & " xz",scalar(x_prime(1),z_prime(1)),
4189 c & " yy",scalar(y_prime(1),y_prime(1)),
4190 c & " yz",scalar(y_prime(1),z_prime(1)),
4191 c & " zz",scalar(z_prime(1),z_prime(1))
4193 C Transform the unit vector of the ith side-chain centroid, dC_norm(*,i),
4194 C to local coordinate system. Store in xx, yy, zz.
4200 xx = xx + x_prime(j)*dc_norm(j,i+nres)
4201 yy = yy + y_prime(j)*dc_norm(j,i+nres)
4202 zz = zz + z_prime(j)*dc_norm(j,i+nres)
4209 C Compute the energy of the ith side cbain
4211 c write (2,*) "xx",xx," yy",yy," zz",zz
4214 x(j) = sc_parmin(j,it)
4217 Cc diagnostics - remove later
4219 yy1 = dsin(alph(2))*dcos(omeg(2))
4220 zz1 = -dsin(alph(2))*dsin(omeg(2))
4221 write(2,'(3f8.1,3f9.3,1x,3f9.3)')
4222 & alph(2)*rad2deg,omeg(2)*rad2deg,theta(3)*rad2deg,xx,yy,zz,
4224 C," --- ", xx_w,yy_w,zz_w
4227 sumene1= x(1)+ x(2)*xx+ x(3)*yy+ x(4)*zz+ x(5)*xx**2
4228 & + x(6)*yy**2+ x(7)*zz**2+ x(8)*xx*zz+ x(9)*xx*yy
4230 sumene2= x(11) + x(12)*xx + x(13)*yy + x(14)*zz + x(15)*xx**2
4231 & + x(16)*yy**2 + x(17)*zz**2 + x(18)*xx*zz + x(19)*xx*yy
4233 sumene3= x(21) +x(22)*xx +x(23)*yy +x(24)*zz +x(25)*xx**2
4234 & +x(26)*yy**2 +x(27)*zz**2 +x(28)*xx*zz +x(29)*xx*yy
4235 & +x(30)*yy*zz +x(31)*xx**3 +x(32)*yy**3 +x(33)*zz**3
4236 & +x(34)*(xx**2)*yy +x(35)*(xx**2)*zz +x(36)*(yy**2)*xx
4237 & +x(37)*(yy**2)*zz +x(38)*(zz**2)*xx +x(39)*(zz**2)*yy
4239 sumene4= x(41) +x(42)*xx +x(43)*yy +x(44)*zz +x(45)*xx**2
4240 & +x(46)*yy**2 +x(47)*zz**2 +x(48)*xx*zz +x(49)*xx*yy
4241 & +x(50)*yy*zz +x(51)*xx**3 +x(52)*yy**3 +x(53)*zz**3
4242 & +x(54)*(xx**2)*yy +x(55)*(xx**2)*zz +x(56)*(yy**2)*xx
4243 & +x(57)*(yy**2)*zz +x(58)*(zz**2)*xx +x(59)*(zz**2)*yy
4245 dsc_i = 0.743d0+x(61)
4247 dscp1=dsqrt(dsc_i**2+dp2_i**2-2*dsc_i*dp2_i
4248 & *(xx*cost2tab(i+1)+yy*sint2tab(i+1)))
4249 dscp2=dsqrt(dsc_i**2+dp2_i**2-2*dsc_i*dp2_i
4250 & *(xx*cost2tab(i+1)-yy*sint2tab(i+1)))
4251 s1=(1+x(63))/(0.1d0 + dscp1)
4252 s1_6=(1+x(64))/(0.1d0 + dscp1**6)
4253 s2=(1+x(65))/(0.1d0 + dscp2)
4254 s2_6=(1+x(65))/(0.1d0 + dscp2**6)
4255 sumene = ( sumene3*sint2tab(i+1) + sumene1)*(s1+s1_6)
4256 & + (sumene4*cost2tab(i+1) +sumene2)*(s2+s2_6)
4257 c write(2,'(i2," sumene",7f9.3)') i,sumene1,sumene2,sumene3,
4259 c & dscp1,dscp2,sumene
4260 c sumene = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
4261 escloc = escloc + sumene
4262 c write (2,*) "escloc",escloc
4263 if (.not. calc_grad) goto 1
4267 C This section to check the numerical derivatives of the energy of ith side
4268 C chain in xx, yy, zz, and theta. Use the -DDEBUG compiler option or insert
4269 C #define DEBUG in the code to turn it on.
4271 write (2,*) "sumene =",sumene
4275 write (2,*) xx,yy,zz
4276 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
4277 de_dxx_num=(sumenep-sumene)/aincr
4279 write (2,*) "xx+ sumene from enesc=",sumenep
4282 write (2,*) xx,yy,zz
4283 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
4284 de_dyy_num=(sumenep-sumene)/aincr
4286 write (2,*) "yy+ sumene from enesc=",sumenep
4289 write (2,*) xx,yy,zz
4290 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
4291 de_dzz_num=(sumenep-sumene)/aincr
4293 write (2,*) "zz+ sumene from enesc=",sumenep
4294 costsave=cost2tab(i+1)
4295 sintsave=sint2tab(i+1)
4296 cost2tab(i+1)=dcos(0.5d0*(theta(i+1)+aincr))
4297 sint2tab(i+1)=dsin(0.5d0*(theta(i+1)+aincr))
4298 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
4299 de_dt_num=(sumenep-sumene)/aincr
4300 write (2,*) " t+ sumene from enesc=",sumenep
4301 cost2tab(i+1)=costsave
4302 sint2tab(i+1)=sintsave
4303 C End of diagnostics section.
4306 C Compute the gradient of esc
4308 pom_s1=(1.0d0+x(63))/(0.1d0 + dscp1)**2
4309 pom_s16=6*(1.0d0+x(64))/(0.1d0 + dscp1**6)**2
4310 pom_s2=(1.0d0+x(65))/(0.1d0 + dscp2)**2
4311 pom_s26=6*(1.0d0+x(65))/(0.1d0 + dscp2**6)**2
4312 pom_dx=dsc_i*dp2_i*cost2tab(i+1)
4313 pom_dy=dsc_i*dp2_i*sint2tab(i+1)
4314 pom_dt1=-0.5d0*dsc_i*dp2_i*(xx*sint2tab(i+1)-yy*cost2tab(i+1))
4315 pom_dt2=-0.5d0*dsc_i*dp2_i*(xx*sint2tab(i+1)+yy*cost2tab(i+1))
4316 pom1=(sumene3*sint2tab(i+1)+sumene1)
4317 & *(pom_s1/dscp1+pom_s16*dscp1**4)
4318 pom2=(sumene4*cost2tab(i+1)+sumene2)
4319 & *(pom_s2/dscp2+pom_s26*dscp2**4)
4320 sumene1x=x(2)+2*x(5)*xx+x(8)*zz+ x(9)*yy
4321 sumene3x=x(22)+2*x(25)*xx+x(28)*zz+x(29)*yy+3*x(31)*xx**2
4322 & +2*x(34)*xx*yy +2*x(35)*xx*zz +x(36)*(yy**2) +x(38)*(zz**2)
4324 sumene2x=x(12)+2*x(15)*xx+x(18)*zz+ x(19)*yy
4325 sumene4x=x(42)+2*x(45)*xx +x(48)*zz +x(49)*yy +3*x(51)*xx**2
4326 & +2*x(54)*xx*yy+2*x(55)*xx*zz+x(56)*(yy**2)+x(58)*(zz**2)
4328 de_dxx =(sumene1x+sumene3x*sint2tab(i+1))*(s1+s1_6)
4329 & +(sumene2x+sumene4x*cost2tab(i+1))*(s2+s2_6)
4330 & +(pom1+pom2)*pom_dx
4332 write(2,*), "de_dxx = ", de_dxx,de_dxx_num
4335 sumene1y=x(3) + 2*x(6)*yy + x(9)*xx + x(10)*zz
4336 sumene3y=x(23) +2*x(26)*yy +x(29)*xx +x(30)*zz +3*x(32)*yy**2
4337 & +x(34)*(xx**2) +2*x(36)*yy*xx +2*x(37)*yy*zz +x(39)*(zz**2)
4339 sumene2y=x(13) + 2*x(16)*yy + x(19)*xx + x(20)*zz
4340 sumene4y=x(43)+2*x(46)*yy+x(49)*xx +x(50)*zz
4341 & +3*x(52)*yy**2+x(54)*xx**2+2*x(56)*yy*xx +2*x(57)*yy*zz
4342 & +x(59)*zz**2 +x(60)*xx*zz
4343 de_dyy =(sumene1y+sumene3y*sint2tab(i+1))*(s1+s1_6)
4344 & +(sumene2y+sumene4y*cost2tab(i+1))*(s2+s2_6)
4345 & +(pom1-pom2)*pom_dy
4347 write(2,*), "de_dyy = ", de_dyy,de_dyy_num
4350 de_dzz =(x(24) +2*x(27)*zz +x(28)*xx +x(30)*yy
4351 & +3*x(33)*zz**2 +x(35)*xx**2 +x(37)*yy**2 +2*x(38)*zz*xx
4352 & +2*x(39)*zz*yy +x(40)*xx*yy)*sint2tab(i+1)*(s1+s1_6)
4353 & +(x(4) + 2*x(7)*zz+ x(8)*xx + x(10)*yy)*(s1+s1_6)
4354 & +(x(44)+2*x(47)*zz +x(48)*xx +x(50)*yy +3*x(53)*zz**2
4355 & +x(55)*xx**2 +x(57)*(yy**2)+2*x(58)*zz*xx +2*x(59)*zz*yy
4356 & +x(60)*xx*yy)*cost2tab(i+1)*(s2+s2_6)
4357 & + ( x(14) + 2*x(17)*zz+ x(18)*xx + x(20)*yy)*(s2+s2_6)
4359 write(2,*), "de_dzz = ", de_dzz,de_dzz_num
4362 de_dt = 0.5d0*sumene3*cost2tab(i+1)*(s1+s1_6)
4363 & -0.5d0*sumene4*sint2tab(i+1)*(s2+s2_6)
4364 & +pom1*pom_dt1+pom2*pom_dt2
4366 write(2,*), "de_dt = ", de_dt,de_dt_num
4370 cossc=scalar(dc_norm(1,i),dc_norm(1,i+nres))
4371 cossc1=scalar(dc_norm(1,i-1),dc_norm(1,i+nres))
4372 cosfac2xx=cosfac2*xx
4373 sinfac2yy=sinfac2*yy
4375 dt_dCi(k) = -(dc_norm(k,i-1)+costtab(i+1)*dc_norm(k,i))*
4377 dt_dCi1(k)= -(dc_norm(k,i)+costtab(i+1)*dc_norm(k,i-1))*
4379 pom=(dC_norm(k,i+nres)-cossc*dC_norm(k,i))*vbld_inv(i+1)
4380 pom1=(dC_norm(k,i+nres)-cossc1*dC_norm(k,i-1))*vbld_inv(i)
4381 c write (iout,*) "i",i," k",k," pom",pom," pom1",pom1,
4382 c & " dt_dCi",dt_dCi(k)," dt_dCi1",dt_dCi1(k)
4383 c write (iout,*) "dC_norm",(dC_norm(j,i),j=1,3),
4384 c & (dC_norm(j,i-1),j=1,3)," vbld_inv",vbld_inv(i+1),vbld_inv(i)
4385 dXX_Ci(k)=pom*cosfac-dt_dCi(k)*cosfac2xx
4386 dXX_Ci1(k)=-pom1*cosfac-dt_dCi1(k)*cosfac2xx
4387 dYY_Ci(k)=pom*sinfac+dt_dCi(k)*sinfac2yy
4388 dYY_Ci1(k)=pom1*sinfac+dt_dCi1(k)*sinfac2yy
4392 dZZ_Ci(k)=dZZ_Ci(k)-uzgrad(j,k,2,i-1)*dC_norm(j,i+nres)
4393 dZZ_Ci1(k)=dZZ_Ci1(k)-uzgrad(j,k,1,i-1)*dC_norm(j,i+nres)
4396 dXX_XYZ(k)=vbld_inv(i+nres)*(x_prime(k)-xx*dC_norm(k,i+nres))
4397 dYY_XYZ(k)=vbld_inv(i+nres)*(y_prime(k)-yy*dC_norm(k,i+nres))
4398 dZZ_XYZ(k)=vbld_inv(i+nres)*(z_prime(k)-zz*dC_norm(k,i+nres))
4400 dt_dCi(k) = -dt_dCi(k)/sinttab(i+1)
4401 dt_dCi1(k)= -dt_dCi1(k)/sinttab(i+1)
4405 dXX_Ctab(k,i)=dXX_Ci(k)
4406 dXX_C1tab(k,i)=dXX_Ci1(k)
4407 dYY_Ctab(k,i)=dYY_Ci(k)
4408 dYY_C1tab(k,i)=dYY_Ci1(k)
4409 dZZ_Ctab(k,i)=dZZ_Ci(k)
4410 dZZ_C1tab(k,i)=dZZ_Ci1(k)
4411 dXX_XYZtab(k,i)=dXX_XYZ(k)
4412 dYY_XYZtab(k,i)=dYY_XYZ(k)
4413 dZZ_XYZtab(k,i)=dZZ_XYZ(k)
4417 c write (iout,*) "k",k," dxx_ci1",dxx_ci1(k)," dyy_ci1",
4418 c & dyy_ci1(k)," dzz_ci1",dzz_ci1(k)
4419 c write (iout,*) "k",k," dxx_ci",dxx_ci(k)," dyy_ci",
4420 c & dyy_ci(k)," dzz_ci",dzz_ci(k)
4421 c write (iout,*) "k",k," dt_dci",dt_dci(k)," dt_dci",
4423 c write (iout,*) "k",k," dxx_XYZ",dxx_XYZ(k)," dyy_XYZ",
4424 c & dyy_XYZ(k)," dzz_XYZ",dzz_XYZ(k)
4425 gscloc(k,i-1)=gscloc(k,i-1)+de_dxx*dxx_ci1(k)
4426 & +de_dyy*dyy_ci1(k)+de_dzz*dzz_ci1(k)+de_dt*dt_dCi1(k)
4427 gscloc(k,i)=gscloc(k,i)+de_dxx*dxx_Ci(k)
4428 & +de_dyy*dyy_Ci(k)+de_dzz*dzz_Ci(k)+de_dt*dt_dCi(k)
4429 gsclocx(k,i)= de_dxx*dxx_XYZ(k)
4430 & +de_dyy*dyy_XYZ(k)+de_dzz*dzz_XYZ(k)
4432 c write(iout,*) "ENERGY GRAD = ", (gscloc(k,i-1),k=1,3),
4433 c & (gscloc(k,i),k=1,3),(gsclocx(k,i),k=1,3)
4435 C to check gradient call subroutine check_grad
4442 c------------------------------------------------------------------------------
4443 subroutine gcont(rij,r0ij,eps0ij,delta,fcont,fprimcont)
4445 C This procedure calculates two-body contact function g(rij) and its derivative:
4448 C g(rij) = esp0ij*(-0.9375*x+0.625*x**3-0.1875*x**5) ! -1 =< x =< 1
4451 C where x=(rij-r0ij)/delta
4453 C rij - interbody distance, r0ij - contact distance, eps0ij - contact energy
4456 double precision rij,r0ij,eps0ij,fcont,fprimcont
4457 double precision x,x2,x4,delta
4461 if (x.lt.-1.0D0) then
4464 else if (x.le.1.0D0) then
4467 fcont=eps0ij*(x*(-0.9375D0+0.6250D0*x2-0.1875D0*x4)+0.5D0)
4468 fprimcont=eps0ij * (-0.9375D0+1.8750D0*x2-0.9375D0*x4)/delta
4475 c------------------------------------------------------------------------------
4476 subroutine splinthet(theti,delta,ss,ssder)
4477 implicit real*8 (a-h,o-z)
4478 include 'DIMENSIONS'
4479 include 'DIMENSIONS.ZSCOPT'
4480 include 'COMMON.VAR'
4481 include 'COMMON.GEO'
4484 if (theti.gt.pipol) then
4485 call gcont(theti,thetup,1.0d0,delta,ss,ssder)
4487 call gcont(-theti,-thetlow,1.0d0,delta,ss,ssder)
4492 c------------------------------------------------------------------------------
4493 subroutine spline1(x,x0,delta,f0,f1,fprim0,f,fprim)
4495 double precision x,x0,delta,f0,f1,fprim0,f,fprim
4496 double precision ksi,ksi2,ksi3,a1,a2,a3
4497 a1=fprim0*delta/(f1-f0)
4503 f=f0+(f1-f0)*ksi*(a1+ksi*(a2+a3*ksi))
4504 fprim=(f1-f0)/delta*(a1+ksi*(2*a2+3*ksi*a3))
4507 c------------------------------------------------------------------------------
4508 subroutine spline2(x,x0,delta,f0x,f1x,fprim0x,fx)
4510 double precision x,x0,delta,f0x,f1x,fprim0x,fx
4511 double precision ksi,ksi2,ksi3,a1,a2,a3
4516 a2=3*(f1x-f0x)-2*fprim0x*delta
4517 a3=fprim0x*delta-2*(f1x-f0x)
4518 fx=f0x+a1*ksi+a2*ksi2+a3*ksi3
4521 C-----------------------------------------------------------------------------
4523 C-----------------------------------------------------------------------------
4524 subroutine etor(etors,edihcnstr,fact)
4525 implicit real*8 (a-h,o-z)
4526 include 'DIMENSIONS'
4527 include 'DIMENSIONS.ZSCOPT'
4528 include 'COMMON.VAR'
4529 include 'COMMON.GEO'
4530 include 'COMMON.LOCAL'
4531 include 'COMMON.TORSION'
4532 include 'COMMON.INTERACT'
4533 include 'COMMON.DERIV'
4534 include 'COMMON.CHAIN'
4535 include 'COMMON.NAMES'
4536 include 'COMMON.IOUNITS'
4537 include 'COMMON.FFIELD'
4538 include 'COMMON.TORCNSTR'
4540 C Set lprn=.true. for debugging
4544 do i=iphi_start,iphi_end
4545 itori=itortyp(itype(i-2))
4546 itori1=itortyp(itype(i-1))
4549 C Proline-Proline pair is a special case...
4550 if (itori.eq.3 .and. itori1.eq.3) then
4551 if (phii.gt.-dwapi3) then
4553 fac=1.0D0/(1.0D0-cosphi)
4554 etorsi=v1(1,3,3)*fac
4555 etorsi=etorsi+etorsi
4556 etors=etors+etorsi-v1(1,3,3)
4557 gloci=gloci-3*fac*etorsi*dsin(3*phii)
4560 v1ij=v1(j+1,itori,itori1)
4561 v2ij=v2(j+1,itori,itori1)
4564 etors=etors+v1ij*cosphi+v2ij*sinphi+dabs(v1ij)+dabs(v2ij)
4565 gloci=gloci+j*(v2ij*cosphi-v1ij*sinphi)
4569 v1ij=v1(j,itori,itori1)
4570 v2ij=v2(j,itori,itori1)
4573 etors=etors+v1ij*cosphi+v2ij*sinphi+dabs(v1ij)+dabs(v2ij)
4574 gloci=gloci+j*(v2ij*cosphi-v1ij*sinphi)
4578 & write (iout,'(2(a3,2x,i3,2x),2i3,6f8.3/26x,6f8.3/)')
4579 & restyp(itype(i-2)),i-2,restyp(itype(i-1)),i-1,itori,itori1,
4580 & (v1(j,itori,itori1),j=1,6),(v2(j,itori,itori1),j=1,6)
4581 gloc(i-3,icg)=gloc(i-3,icg)+wtor*fact*gloci
4582 c write (iout,*) 'i=',i,' gloc=',gloc(i-3,icg)
4584 ! 6/20/98 - dihedral angle constraints
4587 itori=idih_constr(i)
4590 if (difi.gt.drange(i)) then
4592 edihcnstr=edihcnstr+0.25d0*ftors*difi**4
4593 gloc(itori-3,icg)=gloc(itori-3,icg)+ftors*difi**3
4594 else if (difi.lt.-drange(i)) then
4596 edihcnstr=edihcnstr+0.25d0*ftors*difi**4
4597 gloc(itori-3,icg)=gloc(itori-3,icg)+ftors*difi**3
4599 ! write (iout,'(2i5,2f8.3,2e14.5)') i,itori,rad2deg*phii,
4600 ! & rad2deg*difi,0.25d0*ftors*difi**4,gloc(itori-3,icg)
4602 ! write (iout,*) 'edihcnstr',edihcnstr
4605 c------------------------------------------------------------------------------
4607 subroutine etor(etors,edihcnstr,fact)
4608 implicit real*8 (a-h,o-z)
4609 include 'DIMENSIONS'
4610 include 'DIMENSIONS.ZSCOPT'
4611 include 'COMMON.VAR'
4612 include 'COMMON.GEO'
4613 include 'COMMON.LOCAL'
4614 include 'COMMON.TORSION'
4615 include 'COMMON.INTERACT'
4616 include 'COMMON.DERIV'
4617 include 'COMMON.CHAIN'
4618 include 'COMMON.NAMES'
4619 include 'COMMON.IOUNITS'
4620 include 'COMMON.FFIELD'
4621 include 'COMMON.TORCNSTR'
4623 C Set lprn=.true. for debugging
4627 do i=iphi_start,iphi_end
4628 if (itel(i-2).eq.0 .or. itel(i-1).eq.0) goto 1215
4629 itori=itortyp(itype(i-2))
4630 itori1=itortyp(itype(i-1))
4633 C Regular cosine and sine terms
4634 do j=1,nterm(itori,itori1)
4635 v1ij=v1(j,itori,itori1)
4636 v2ij=v2(j,itori,itori1)
4639 etors=etors+v1ij*cosphi+v2ij*sinphi
4640 gloci=gloci+j*(v2ij*cosphi-v1ij*sinphi)
4644 C E = SUM ----------------------------------- - v1
4645 C [v2 cos(phi/2)+v3 sin(phi/2)]^2 + 1
4647 cosphi=dcos(0.5d0*phii)
4648 sinphi=dsin(0.5d0*phii)
4649 do j=1,nlor(itori,itori1)
4650 vl1ij=vlor1(j,itori,itori1)
4651 vl2ij=vlor2(j,itori,itori1)
4652 vl3ij=vlor3(j,itori,itori1)
4653 pom=vl2ij*cosphi+vl3ij*sinphi
4654 pom1=1.0d0/(pom*pom+1.0d0)
4655 etors=etors+vl1ij*pom1
4657 gloci=gloci+vl1ij*(vl3ij*cosphi-vl2ij*sinphi)*pom
4659 C Subtract the constant term
4660 etors=etors-v0(itori,itori1)
4662 & write (iout,'(2(a3,2x,i3,2x),2i3,6f8.3/26x,6f8.3/)')
4663 & restyp(itype(i-2)),i-2,restyp(itype(i-1)),i-1,itori,itori1,
4664 & (v1(j,itori,itori1),j=1,6),(v2(j,itori,itori1),j=1,6)
4665 gloc(i-3,icg)=gloc(i-3,icg)+wtor*fact*gloci
4666 c write (iout,*) 'i=',i,' gloc=',gloc(i-3,icg)
4669 ! 6/20/98 - dihedral angle constraints
4672 itori=idih_constr(i)
4674 difi=pinorm(phii-phi0(i))
4676 if (difi.gt.drange(i)) then
4678 edihcnstr=edihcnstr+0.25d0*ftors*difi**4
4679 gloc(itori-3,icg)=gloc(itori-3,icg)+ftors*difi**3
4680 edihi=0.25d0*ftors*difi**4
4681 else if (difi.lt.-drange(i)) then
4683 edihcnstr=edihcnstr+0.25d0*ftors*difi**4
4684 gloc(itori-3,icg)=gloc(itori-3,icg)+ftors*difi**3
4685 edihi=0.25d0*ftors*difi**4
4689 c write (iout,'(2i5,4f10.5,e15.5)') i,itori,phii,phi0(i),difi,
4691 ! write (iout,'(2i5,2f8.3,2e14.5)') i,itori,rad2deg*phii,
4692 ! & rad2deg*difi,0.25d0*ftors*difi**4,gloc(itori-3,icg)
4694 ! write (iout,*) 'edihcnstr',edihcnstr
4697 c----------------------------------------------------------------------------
4698 subroutine etor_d(etors_d,fact2)
4699 C 6/23/01 Compute double torsional energy
4700 implicit real*8 (a-h,o-z)
4701 include 'DIMENSIONS'
4702 include 'DIMENSIONS.ZSCOPT'
4703 include 'COMMON.VAR'
4704 include 'COMMON.GEO'
4705 include 'COMMON.LOCAL'
4706 include 'COMMON.TORSION'
4707 include 'COMMON.INTERACT'
4708 include 'COMMON.DERIV'
4709 include 'COMMON.CHAIN'
4710 include 'COMMON.NAMES'
4711 include 'COMMON.IOUNITS'
4712 include 'COMMON.FFIELD'
4713 include 'COMMON.TORCNSTR'
4715 C Set lprn=.true. for debugging
4719 do i=iphi_start,iphi_end-1
4720 if (itel(i-2).eq.0 .or. itel(i-1).eq.0 .or. itel(i).eq.0)
4722 itori=itortyp(itype(i-2))
4723 itori1=itortyp(itype(i-1))
4724 itori2=itortyp(itype(i))
4729 C Regular cosine and sine terms
4730 do j=1,ntermd_1(itori,itori1,itori2)
4731 v1cij=v1c(1,j,itori,itori1,itori2)
4732 v1sij=v1s(1,j,itori,itori1,itori2)
4733 v2cij=v1c(2,j,itori,itori1,itori2)
4734 v2sij=v1s(2,j,itori,itori1,itori2)
4735 cosphi1=dcos(j*phii)
4736 sinphi1=dsin(j*phii)
4737 cosphi2=dcos(j*phii1)
4738 sinphi2=dsin(j*phii1)
4739 etors_d=etors_d+v1cij*cosphi1+v1sij*sinphi1+
4740 & v2cij*cosphi2+v2sij*sinphi2
4741 gloci1=gloci1+j*(v1sij*cosphi1-v1cij*sinphi1)
4742 gloci2=gloci2+j*(v2sij*cosphi2-v2cij*sinphi2)
4744 do k=2,ntermd_2(itori,itori1,itori2)
4746 v1cdij = v2c(k,l,itori,itori1,itori2)
4747 v2cdij = v2c(l,k,itori,itori1,itori2)
4748 v1sdij = v2s(k,l,itori,itori1,itori2)
4749 v2sdij = v2s(l,k,itori,itori1,itori2)
4750 cosphi1p2=dcos(l*phii+(k-l)*phii1)
4751 cosphi1m2=dcos(l*phii-(k-l)*phii1)
4752 sinphi1p2=dsin(l*phii+(k-l)*phii1)
4753 sinphi1m2=dsin(l*phii-(k-l)*phii1)
4754 etors_d=etors_d+v1cdij*cosphi1p2+v2cdij*cosphi1m2+
4755 & v1sdij*sinphi1p2+v2sdij*sinphi1m2
4756 gloci1=gloci1+l*(v1sdij*cosphi1p2+v2sdij*cosphi1m2
4757 & -v1cdij*sinphi1p2-v2cdij*sinphi1m2)
4758 gloci2=gloci2+(k-l)*(v1sdij*cosphi1p2-v2sdij*cosphi1m2
4759 & -v1cdij*sinphi1p2+v2cdij*sinphi1m2)
4762 gloc(i-3,icg)=gloc(i-3,icg)+wtor_d*fact2*gloci1
4763 gloc(i-2,icg)=gloc(i-2,icg)+wtor_d*fact2*gloci2
4769 c------------------------------------------------------------------------------
4770 subroutine eback_sc_corr(esccor)
4771 c 7/21/2007 Correlations between the backbone-local and side-chain-local
4772 c conformational states; temporarily implemented as differences
4773 c between UNRES torsional potentials (dependent on three types of
4774 c residues) and the torsional potentials dependent on all 20 types
4775 c of residues computed from AM1 energy surfaces of terminally-blocked
4776 c amino-acid residues.
4777 implicit real*8 (a-h,o-z)
4778 include 'DIMENSIONS'
4779 include 'DIMENSIONS.ZSCOPT'
4780 include 'COMMON.VAR'
4781 include 'COMMON.GEO'
4782 include 'COMMON.LOCAL'
4783 include 'COMMON.TORSION'
4784 include 'COMMON.SCCOR'
4785 include 'COMMON.INTERACT'
4786 include 'COMMON.DERIV'
4787 include 'COMMON.CHAIN'
4788 include 'COMMON.NAMES'
4789 include 'COMMON.IOUNITS'
4790 include 'COMMON.FFIELD'
4791 include 'COMMON.CONTROL'
4793 C Set lprn=.true. for debugging
4796 c write (iout,*) "EBACK_SC_COR",itau_start,itau_end,nterm_sccor
4798 do i=itau_start,itau_end
4800 isccori=isccortyp(itype(i-2))
4801 isccori1=isccortyp(itype(i-1))
4803 cccc Added 9 May 2012
4804 cc Tauangle is torsional engle depending on the value of first digit
4805 c(see comment below)
4806 cc Omicron is flat angle depending on the value of first digit
4807 c(see comment below)
4810 do intertyp=1,3 !intertyp
4811 cc Added 09 May 2012 (Adasko)
4812 cc Intertyp means interaction type of backbone mainchain correlation:
4813 c 1 = SC...Ca...Ca...Ca
4814 c 2 = Ca...Ca...Ca...SC
4815 c 3 = SC...Ca...Ca...SCi
4817 if (((intertyp.eq.3).and.((itype(i-2).eq.10).or.
4818 & (itype(i-1).eq.10).or.(itype(i-2).eq.21).or.
4819 & (itype(i-1).eq.21)))
4820 & .or. ((intertyp.eq.1).and.((itype(i-2).eq.10)
4821 & .or.(itype(i-2).eq.21)))
4822 & .or.((intertyp.eq.2).and.((itype(i-1).eq.10).or.
4823 & (itype(i-1).eq.21)))) cycle
4824 if ((intertyp.eq.2).and.(i.eq.4).and.(itype(1).eq.21)) cycle
4825 if ((intertyp.eq.1).and.(i.eq.nres).and.(itype(nres).eq.21))
4827 do j=1,nterm_sccor(isccori,isccori1)
4828 v1ij=v1sccor(j,intertyp,isccori,isccori1)
4829 v2ij=v2sccor(j,intertyp,isccori,isccori1)
4830 cosphi=dcos(j*tauangle(intertyp,i))
4831 sinphi=dsin(j*tauangle(intertyp,i))
4832 esccor=esccor+v1ij*cosphi+v2ij*sinphi
4833 gloci=gloci+j*(v2ij*cosphi-v1ij*sinphi)
4835 gloc_sc(intertyp,i-3,icg)=gloc_sc(intertyp,i-3,icg)+wsccor*gloci
4836 c write (iout,*) "WTF",intertyp,i,itype(i),v1ij*cosphi+v2ij*sinphi
4837 c &gloc_sc(intertyp,i-3,icg)
4839 & write (iout,'(2(a3,2x,i3,2x),2i3,6f8.3/26x,6f8.3/)')
4840 & restyp(itype(i-2)),i-2,restyp(itype(i-1)),i-1,itori,itori1,
4841 & (v1sccor(j,intertyp,itori,itori1),j=1,6)
4842 & ,(v2sccor(j,intertyp,itori,itori1),j=1,6)
4843 gsccor_loc(i-3)=gsccor_loc(i-3)+gloci
4847 c write (iout,*) "W@T@F", gloc_sc(1,i,icg),gloc(i,icg)
4851 c------------------------------------------------------------------------------
4852 subroutine multibody(ecorr)
4853 C This subroutine calculates multi-body contributions to energy following
4854 C the idea of Skolnick et al. If side chains I and J make a contact and
4855 C at the same time side chains I+1 and J+1 make a contact, an extra
4856 C contribution equal to sqrt(eps(i,j)*eps(i+1,j+1)) is added.
4857 implicit real*8 (a-h,o-z)
4858 include 'DIMENSIONS'
4859 include 'COMMON.IOUNITS'
4860 include 'COMMON.DERIV'
4861 include 'COMMON.INTERACT'
4862 include 'COMMON.CONTACTS'
4863 double precision gx(3),gx1(3)
4866 C Set lprn=.true. for debugging
4870 write (iout,'(a)') 'Contact function values:'
4872 write (iout,'(i2,20(1x,i2,f10.5))')
4873 & i,(jcont(j,i),facont(j,i),j=1,num_cont(i))
4888 num_conti=num_cont(i)
4889 num_conti1=num_cont(i1)
4894 if (j1.eq.j+ishift .or. j1.eq.j-ishift) then
4895 cd write(iout,*)'i=',i,' j=',j,' i1=',i1,' j1=',j1,
4896 cd & ' ishift=',ishift
4897 C Contacts I--J and I+ISHIFT--J+-ISHIFT1 occur simultaneously.
4898 C The system gains extra energy.
4899 ecorr=ecorr+esccorr(i,j,i1,j1,jj,kk)
4900 endif ! j1==j+-ishift
4909 c------------------------------------------------------------------------------
4910 double precision function esccorr(i,j,k,l,jj,kk)
4911 implicit real*8 (a-h,o-z)
4912 include 'DIMENSIONS'
4913 include 'COMMON.IOUNITS'
4914 include 'COMMON.DERIV'
4915 include 'COMMON.INTERACT'
4916 include 'COMMON.CONTACTS'
4917 double precision gx(3),gx1(3)
4922 cd write (iout,'(4i5,3f10.5)') i,j,k,l,eij,ekl,-eij*ekl
4923 C Calculate the multi-body contribution to energy.
4924 C Calculate multi-body contributions to the gradient.
4925 cd write (iout,'(2(2i3,3f10.5))')i,j,(gacont(m,jj,i),m=1,3),
4926 cd & k,l,(gacont(m,kk,k),m=1,3)
4928 gx(m) =ekl*gacont(m,jj,i)
4929 gx1(m)=eij*gacont(m,kk,k)
4930 gradxorr(m,i)=gradxorr(m,i)-gx(m)
4931 gradxorr(m,j)=gradxorr(m,j)+gx(m)
4932 gradxorr(m,k)=gradxorr(m,k)-gx1(m)
4933 gradxorr(m,l)=gradxorr(m,l)+gx1(m)
4937 gradcorr(ll,m)=gradcorr(ll,m)+gx(ll)
4942 gradcorr(ll,m)=gradcorr(ll,m)+gx1(ll)
4948 c------------------------------------------------------------------------------
4950 subroutine pack_buffer(dimen1,dimen2,atom,indx,buffer)
4951 implicit real*8 (a-h,o-z)
4952 include 'DIMENSIONS'
4953 integer dimen1,dimen2,atom,indx
4954 double precision buffer(dimen1,dimen2)
4955 double precision zapas
4956 common /contacts_hb/ zapas(3,20,maxres,7),
4957 & facont_hb(20,maxres),ees0p(20,maxres),ees0m(20,maxres),
4958 & num_cont_hb(maxres),jcont_hb(20,maxres)
4959 num_kont=num_cont_hb(atom)
4963 buffer(i,indx+(k-1)*3+j)=zapas(j,i,atom,k)
4966 buffer(i,indx+22)=facont_hb(i,atom)
4967 buffer(i,indx+23)=ees0p(i,atom)
4968 buffer(i,indx+24)=ees0m(i,atom)
4969 buffer(i,indx+25)=dfloat(jcont_hb(i,atom))
4971 buffer(1,indx+26)=dfloat(num_kont)
4974 c------------------------------------------------------------------------------
4975 subroutine unpack_buffer(dimen1,dimen2,atom,indx,buffer)
4976 implicit real*8 (a-h,o-z)
4977 include 'DIMENSIONS'
4978 integer dimen1,dimen2,atom,indx
4979 double precision buffer(dimen1,dimen2)
4980 double precision zapas
4981 common /contacts_hb/ zapas(3,20,maxres,7),
4982 & facont_hb(20,maxres),ees0p(20,maxres),ees0m(20,maxres),
4983 & num_cont_hb(maxres),jcont_hb(20,maxres)
4984 num_kont=buffer(1,indx+26)
4985 num_kont_old=num_cont_hb(atom)
4986 num_cont_hb(atom)=num_kont+num_kont_old
4991 zapas(j,ii,atom,k)=buffer(i,indx+(k-1)*3+j)
4994 facont_hb(ii,atom)=buffer(i,indx+22)
4995 ees0p(ii,atom)=buffer(i,indx+23)
4996 ees0m(ii,atom)=buffer(i,indx+24)
4997 jcont_hb(ii,atom)=buffer(i,indx+25)
5001 c------------------------------------------------------------------------------
5003 subroutine multibody_hb(ecorr,ecorr5,ecorr6,n_corr,n_corr1)
5004 C This subroutine calculates multi-body contributions to hydrogen-bonding
5005 implicit real*8 (a-h,o-z)
5006 include 'DIMENSIONS'
5007 include 'DIMENSIONS.ZSCOPT'
5008 include 'COMMON.IOUNITS'
5010 include 'COMMON.INFO'
5012 include 'COMMON.FFIELD'
5013 include 'COMMON.DERIV'
5014 include 'COMMON.INTERACT'
5015 include 'COMMON.CONTACTS'
5017 parameter (max_cont=maxconts)
5018 parameter (max_dim=2*(8*3+2))
5019 parameter (msglen1=max_cont*max_dim*4)
5020 parameter (msglen2=2*msglen1)
5021 integer source,CorrelType,CorrelID,Error
5022 double precision buffer(max_cont,max_dim)
5024 double precision gx(3),gx1(3)
5027 C Set lprn=.true. for debugging
5032 if (fgProcs.le.1) goto 30
5034 write (iout,'(a)') 'Contact function values:'
5036 write (iout,'(2i3,50(1x,i2,f5.2))')
5037 & i,num_cont_hb(i),(jcont_hb(j,i),facont_hb(j,i),
5038 & j=1,num_cont_hb(i))
5041 C Caution! Following code assumes that electrostatic interactions concerning
5042 C a given atom are split among at most two processors!
5052 cd write (iout,*) 'MyRank',MyRank,' mm',mm
5055 cd write (iout,*) 'Sending: MyRank',MyRank,' mm',mm,' ldone',ldone
5056 if (MyRank.gt.0) then
5057 C Send correlation contributions to the preceding processor
5059 nn=num_cont_hb(iatel_s)
5060 call pack_buffer(max_cont,max_dim,iatel_s,0,buffer)
5061 cd write (iout,*) 'The BUFFER array:'
5063 cd write (iout,'(i2,9(3f8.3,2x))') i,(buffer(i,j),j=1,26)
5065 if (ielstart(iatel_s).gt.iatel_s+ispp) then
5067 call pack_buffer(max_cont,max_dim,iatel_s+1,26,buffer)
5068 C Clear the contacts of the atom passed to the neighboring processor
5069 nn=num_cont_hb(iatel_s+1)
5071 cd write (iout,'(i2,9(3f8.3,2x))') i,(buffer(i,j+26),j=1,26)
5073 num_cont_hb(iatel_s)=0
5075 cd write (iout,*) 'Processor ',MyID,MyRank,
5076 cd & ' is sending correlation contribution to processor',MyID-1,
5077 cd & ' msglen=',msglen
5078 cd write (*,*) 'Processor ',MyID,MyRank,
5079 cd & ' is sending correlation contribution to processor',MyID-1,
5080 cd & ' msglen=',msglen,' CorrelType=',CorrelType
5081 call mp_bsend(buffer,msglen,MyID-1,CorrelType,CorrelID)
5082 cd write (iout,*) 'Processor ',MyID,
5083 cd & ' has sent correlation contribution to processor',MyID-1,
5084 cd & ' msglen=',msglen,' CorrelID=',CorrelID
5085 cd write (*,*) 'Processor ',MyID,
5086 cd & ' has sent correlation contribution to processor',MyID-1,
5087 cd & ' msglen=',msglen,' CorrelID=',CorrelID
5089 endif ! (MyRank.gt.0)
5093 cd write (iout,*) 'Receiving: MyRank',MyRank,' mm',mm,' ldone',ldone
5094 if (MyRank.lt.fgProcs-1) then
5095 C Receive correlation contributions from the next processor
5097 if (ielend(iatel_e).lt.nct-1) msglen=msglen2
5098 cd write (iout,*) 'Processor',MyID,
5099 cd & ' is receiving correlation contribution from processor',MyID+1,
5100 cd & ' msglen=',msglen,' CorrelType=',CorrelType
5101 cd write (*,*) 'Processor',MyID,
5102 cd & ' is receiving correlation contribution from processor',MyID+1,
5103 cd & ' msglen=',msglen,' CorrelType=',CorrelType
5105 do while (nbytes.le.0)
5106 call mp_probe(MyID+1,CorrelType,nbytes)
5108 cd print *,'Processor',MyID,' msglen',msglen,' nbytes',nbytes
5109 call mp_brecv(buffer,msglen,MyID+1,CorrelType,nbytes)
5110 cd write (iout,*) 'Processor',MyID,
5111 cd & ' has received correlation contribution from processor',MyID+1,
5112 cd & ' msglen=',msglen,' nbytes=',nbytes
5113 cd write (iout,*) 'The received BUFFER array:'
5115 cd write (iout,'(i2,9(3f8.3,2x))') i,(buffer(i,j),j=1,52)
5117 if (msglen.eq.msglen1) then
5118 call unpack_buffer(max_cont,max_dim,iatel_e+1,0,buffer)
5119 else if (msglen.eq.msglen2) then
5120 call unpack_buffer(max_cont,max_dim,iatel_e,0,buffer)
5121 call unpack_buffer(max_cont,max_dim,iatel_e+1,26,buffer)
5124 & 'ERROR!!!! message length changed while processing correlations.'
5126 & 'ERROR!!!! message length changed while processing correlations.'
5127 call mp_stopall(Error)
5128 endif ! msglen.eq.msglen1
5129 endif ! MyRank.lt.fgProcs-1
5136 write (iout,'(a)') 'Contact function values:'
5138 write (iout,'(2i3,50(1x,i2,f5.2))')
5139 & i,num_cont_hb(i),(jcont_hb(j,i),facont_hb(j,i),
5140 & j=1,num_cont_hb(i))
5144 C Remove the loop below after debugging !!!
5151 C Calculate the local-electrostatic correlation terms
5152 do i=iatel_s,iatel_e+1
5154 num_conti=num_cont_hb(i)
5155 num_conti1=num_cont_hb(i+1)
5160 c write (iout,*) 'i=',i,' j=',j,' i1=',i1,' j1=',j1,
5161 c & ' jj=',jj,' kk=',kk
5162 if (j1.eq.j+1 .or. j1.eq.j-1) then
5163 C Contacts I-J and (I+1)-(J+1) or (I+1)-(J-1) occur simultaneously.
5164 C The system gains extra energy.
5165 ecorr=ecorr+ehbcorr(i,j,i+1,j1,jj,kk,0.72D0,0.32D0)
5167 else if (j1.eq.j) then
5168 C Contacts I-J and I-(J+1) occur simultaneously.
5169 C The system loses extra energy.
5170 c ecorr=ecorr+ehbcorr(i,j,i+1,j,jj,kk,0.60D0,-0.40D0)
5175 c write (iout,*) 'i=',i,' j=',j,' i1=',i1,' j1=',j1,
5176 c & ' jj=',jj,' kk=',kk
5178 C Contacts I-J and (I+1)-J occur simultaneously.
5179 C The system loses extra energy.
5180 c ecorr=ecorr+ehbcorr(i,j,i,j+1,jj,kk,0.60D0,-0.40D0)
5187 c------------------------------------------------------------------------------
5188 subroutine multibody_eello(ecorr,ecorr5,ecorr6,eturn6,n_corr,
5190 C This subroutine calculates multi-body contributions to hydrogen-bonding
5191 implicit real*8 (a-h,o-z)
5192 include 'DIMENSIONS'
5193 include 'DIMENSIONS.ZSCOPT'
5194 include 'COMMON.IOUNITS'
5196 include 'COMMON.INFO'
5198 include 'COMMON.FFIELD'
5199 include 'COMMON.DERIV'
5200 include 'COMMON.INTERACT'
5201 include 'COMMON.CONTACTS'
5203 parameter (max_cont=maxconts)
5204 parameter (max_dim=2*(8*3+2))
5205 parameter (msglen1=max_cont*max_dim*4)
5206 parameter (msglen2=2*msglen1)
5207 integer source,CorrelType,CorrelID,Error
5208 double precision buffer(max_cont,max_dim)
5210 double precision gx(3),gx1(3)
5213 C Set lprn=.true. for debugging
5219 if (fgProcs.le.1) goto 30
5221 write (iout,'(a)') 'Contact function values:'
5223 write (iout,'(2i3,50(1x,i2,f5.2))')
5224 & i,num_cont_hb(i),(jcont_hb(j,i),facont_hb(j,i),
5225 & j=1,num_cont_hb(i))
5228 C Caution! Following code assumes that electrostatic interactions concerning
5229 C a given atom are split among at most two processors!
5239 cd write (iout,*) 'MyRank',MyRank,' mm',mm
5242 cd write (iout,*) 'Sending: MyRank',MyRank,' mm',mm,' ldone',ldone
5243 if (MyRank.gt.0) then
5244 C Send correlation contributions to the preceding processor
5246 nn=num_cont_hb(iatel_s)
5247 call pack_buffer(max_cont,max_dim,iatel_s,0,buffer)
5248 cd write (iout,*) 'The BUFFER array:'
5250 cd write (iout,'(i2,9(3f8.3,2x))') i,(buffer(i,j),j=1,26)
5252 if (ielstart(iatel_s).gt.iatel_s+ispp) then
5254 call pack_buffer(max_cont,max_dim,iatel_s+1,26,buffer)
5255 C Clear the contacts of the atom passed to the neighboring processor
5256 nn=num_cont_hb(iatel_s+1)
5258 cd write (iout,'(i2,9(3f8.3,2x))') i,(buffer(i,j+26),j=1,26)
5260 num_cont_hb(iatel_s)=0
5262 cd write (iout,*) 'Processor ',MyID,MyRank,
5263 cd & ' is sending correlation contribution to processor',MyID-1,
5264 cd & ' msglen=',msglen
5265 cd write (*,*) 'Processor ',MyID,MyRank,
5266 cd & ' is sending correlation contribution to processor',MyID-1,
5267 cd & ' msglen=',msglen,' CorrelType=',CorrelType
5268 call mp_bsend(buffer,msglen,MyID-1,CorrelType,CorrelID)
5269 cd write (iout,*) 'Processor ',MyID,
5270 cd & ' has sent correlation contribution to processor',MyID-1,
5271 cd & ' msglen=',msglen,' CorrelID=',CorrelID
5272 cd write (*,*) 'Processor ',MyID,
5273 cd & ' has sent correlation contribution to processor',MyID-1,
5274 cd & ' msglen=',msglen,' CorrelID=',CorrelID
5276 endif ! (MyRank.gt.0)
5280 cd write (iout,*) 'Receiving: MyRank',MyRank,' mm',mm,' ldone',ldone
5281 if (MyRank.lt.fgProcs-1) then
5282 C Receive correlation contributions from the next processor
5284 if (ielend(iatel_e).lt.nct-1) msglen=msglen2
5285 cd write (iout,*) 'Processor',MyID,
5286 cd & ' is receiving correlation contribution from processor',MyID+1,
5287 cd & ' msglen=',msglen,' CorrelType=',CorrelType
5288 cd write (*,*) 'Processor',MyID,
5289 cd & ' is receiving correlation contribution from processor',MyID+1,
5290 cd & ' msglen=',msglen,' CorrelType=',CorrelType
5292 do while (nbytes.le.0)
5293 call mp_probe(MyID+1,CorrelType,nbytes)
5295 cd print *,'Processor',MyID,' msglen',msglen,' nbytes',nbytes
5296 call mp_brecv(buffer,msglen,MyID+1,CorrelType,nbytes)
5297 cd write (iout,*) 'Processor',MyID,
5298 cd & ' has received correlation contribution from processor',MyID+1,
5299 cd & ' msglen=',msglen,' nbytes=',nbytes
5300 cd write (iout,*) 'The received BUFFER array:'
5302 cd write (iout,'(i2,9(3f8.3,2x))') i,(buffer(i,j),j=1,52)
5304 if (msglen.eq.msglen1) then
5305 call unpack_buffer(max_cont,max_dim,iatel_e+1,0,buffer)
5306 else if (msglen.eq.msglen2) then
5307 call unpack_buffer(max_cont,max_dim,iatel_e,0,buffer)
5308 call unpack_buffer(max_cont,max_dim,iatel_e+1,26,buffer)
5311 & 'ERROR!!!! message length changed while processing correlations.'
5313 & 'ERROR!!!! message length changed while processing correlations.'
5314 call mp_stopall(Error)
5315 endif ! msglen.eq.msglen1
5316 endif ! MyRank.lt.fgProcs-1
5323 write (iout,'(a)') 'Contact function values:'
5325 write (iout,'(2i3,50(1x,i2,f5.2))')
5326 & i,num_cont_hb(i),(jcont_hb(j,i),facont_hb(j,i),
5327 & j=1,num_cont_hb(i))
5333 C Remove the loop below after debugging !!!
5340 C Calculate the dipole-dipole interaction energies
5341 if (wcorr6.gt.0.0d0 .or. wturn6.gt.0.0d0) then
5342 do i=iatel_s,iatel_e+1
5343 num_conti=num_cont_hb(i)
5350 C Calculate the local-electrostatic correlation terms
5351 do i=iatel_s,iatel_e+1
5353 num_conti=num_cont_hb(i)
5354 num_conti1=num_cont_hb(i+1)
5359 c write (*,*) 'i=',i,' j=',j,' i1=',i1,' j1=',j1,
5360 c & ' jj=',jj,' kk=',kk
5361 if (j1.eq.j+1 .or. j1.eq.j-1) then
5362 C Contacts I-J and (I+1)-(J+1) or (I+1)-(J-1) occur simultaneously.
5363 C The system gains extra energy.
5365 sqd1=dsqrt(d_cont(jj,i))
5366 sqd2=dsqrt(d_cont(kk,i1))
5367 sred_geom = sqd1*sqd2
5368 IF (sred_geom.lt.cutoff_corr) THEN
5369 call gcont(sred_geom,r0_corr,1.0D0,delt_corr,
5371 c write (*,*) 'i=',i,' j=',j,' i1=',i1,' j1=',j1,
5372 c & ' jj=',jj,' kk=',kk
5373 fac_prim1=0.5d0*sqd2/sqd1*fprimcont
5374 fac_prim2=0.5d0*sqd1/sqd2*fprimcont
5376 g_contij(l,1)=fac_prim1*grij_hb_cont(l,jj,i)
5377 g_contij(l,2)=fac_prim2*grij_hb_cont(l,kk,i1)
5380 cd write (iout,*) 'sred_geom=',sred_geom,
5381 cd & ' ekont=',ekont,' fprim=',fprimcont
5382 call calc_eello(i,j,i+1,j1,jj,kk)
5383 if (wcorr4.gt.0.0d0)
5384 & ecorr=ecorr+eello4(i,j,i+1,j1,jj,kk)
5385 if (wcorr5.gt.0.0d0)
5386 & ecorr5=ecorr5+eello5(i,j,i+1,j1,jj,kk)
5387 c print *,"wcorr5",ecorr5
5388 cd write(2,*)'wcorr6',wcorr6,' wturn6',wturn6
5389 cd write(2,*)'ijkl',i,j,i+1,j1
5390 if (wcorr6.gt.0.0d0 .and. (j.ne.i+4 .or. j1.ne.i+3
5391 & .or. wturn6.eq.0.0d0))then
5392 cd write (iout,*) '******ecorr6: i,j,i+1,j1',i,j,i+1,j1
5393 ecorr6=ecorr6+eello6(i,j,i+1,j1,jj,kk)
5394 cd write (iout,*) 'ecorr',ecorr,' ecorr5=',ecorr5,
5395 cd & 'ecorr6=',ecorr6
5396 cd write (iout,'(4e15.5)') sred_geom,
5397 cd & dabs(eello4(i,j,i+1,j1,jj,kk)),
5398 cd & dabs(eello5(i,j,i+1,j1,jj,kk)),
5399 cd & dabs(eello6(i,j,i+1,j1,jj,kk))
5400 else if (wturn6.gt.0.0d0
5401 & .and. (j.eq.i+4 .and. j1.eq.i+3)) then
5402 cd write (iout,*) '******eturn6: i,j,i+1,j1',i,j,i+1,j1
5403 eturn6=eturn6+eello_turn6(i,jj,kk)
5404 cd write (2,*) 'multibody_eello:eturn6',eturn6
5408 else if (j1.eq.j) then
5409 C Contacts I-J and I-(J+1) occur simultaneously.
5410 C The system loses extra energy.
5411 c ecorr=ecorr+ehbcorr(i,j,i+1,j,jj,kk,0.60D0,-0.40D0)
5416 c write (iout,*) 'i=',i,' j=',j,' i1=',i1,' j1=',j1,
5417 c & ' jj=',jj,' kk=',kk
5419 C Contacts I-J and (I+1)-J occur simultaneously.
5420 C The system loses extra energy.
5421 c ecorr=ecorr+ehbcorr(i,j,i,j+1,jj,kk,0.60D0,-0.40D0)
5428 c------------------------------------------------------------------------------
5429 double precision function ehbcorr(i,j,k,l,jj,kk,coeffp,coeffm)
5430 implicit real*8 (a-h,o-z)
5431 include 'DIMENSIONS'
5432 include 'COMMON.IOUNITS'
5433 include 'COMMON.DERIV'
5434 include 'COMMON.INTERACT'
5435 include 'COMMON.CONTACTS'
5436 double precision gx(3),gx1(3)
5446 ees=-(coeffp*ees0pij*ees0pkl+coeffm*ees0mij*ees0mkl)
5447 cd ees=-(coeffp*ees0pkl+coeffm*ees0mkl)
5448 C Following 4 lines for diagnostics.
5453 c write (iout,*)'Contacts have occurred for peptide groups',i,j,
5455 c write (iout,*)'Contacts have occurred for peptide groups',
5456 c & i,j,' fcont:',eij,' eij',' eesij',ees0pij,ees0mij,' and ',k,l
5457 c & ,' fcont ',ekl,' eeskl',ees0pkl,ees0mkl,' ees=',ees
5458 C Calculate the multi-body contribution to energy.
5459 ecorr=ecorr+ekont*ees
5461 C Calculate multi-body contributions to the gradient.
5463 ghalf=0.5D0*ees*ekl*gacont_hbr(ll,jj,i)
5464 gradcorr(ll,i)=gradcorr(ll,i)+ghalf
5465 & -ekont*(coeffp*ees0pkl*gacontp_hb1(ll,jj,i)+
5466 & coeffm*ees0mkl*gacontm_hb1(ll,jj,i))
5467 gradcorr(ll,j)=gradcorr(ll,j)+ghalf
5468 & -ekont*(coeffp*ees0pkl*gacontp_hb2(ll,jj,i)+
5469 & coeffm*ees0mkl*gacontm_hb2(ll,jj,i))
5470 ghalf=0.5D0*ees*eij*gacont_hbr(ll,kk,k)
5471 gradcorr(ll,k)=gradcorr(ll,k)+ghalf
5472 & -ekont*(coeffp*ees0pij*gacontp_hb1(ll,kk,k)+
5473 & coeffm*ees0mij*gacontm_hb1(ll,kk,k))
5474 gradcorr(ll,l)=gradcorr(ll,l)+ghalf
5475 & -ekont*(coeffp*ees0pij*gacontp_hb2(ll,kk,k)+
5476 & coeffm*ees0mij*gacontm_hb2(ll,kk,k))
5480 gradcorr(ll,m)=gradcorr(ll,m)+
5481 & ees*ekl*gacont_hbr(ll,jj,i)-
5482 & ekont*(coeffp*ees0pkl*gacontp_hb3(ll,jj,i)+
5483 & coeffm*ees0mkl*gacontm_hb3(ll,jj,i))
5488 gradcorr(ll,m)=gradcorr(ll,m)+
5489 & ees*eij*gacont_hbr(ll,kk,k)-
5490 & ekont*(coeffp*ees0pij*gacontp_hb3(ll,kk,k)+
5491 & coeffm*ees0mij*gacontm_hb3(ll,kk,k))
5498 C---------------------------------------------------------------------------
5499 subroutine dipole(i,j,jj)
5500 implicit real*8 (a-h,o-z)
5501 include 'DIMENSIONS'
5502 include 'DIMENSIONS.ZSCOPT'
5503 include 'COMMON.IOUNITS'
5504 include 'COMMON.CHAIN'
5505 include 'COMMON.FFIELD'
5506 include 'COMMON.DERIV'
5507 include 'COMMON.INTERACT'
5508 include 'COMMON.CONTACTS'
5509 include 'COMMON.TORSION'
5510 include 'COMMON.VAR'
5511 include 'COMMON.GEO'
5512 dimension dipi(2,2),dipj(2,2),dipderi(2),dipderj(2),auxvec(2),
5514 iti1 = itortyp(itype(i+1))
5515 if (j.lt.nres-1) then
5516 itj1 = itortyp(itype(j+1))
5521 dipi(iii,1)=Ub2(iii,i)
5522 dipderi(iii)=Ub2der(iii,i)
5523 dipi(iii,2)=b1(iii,iti1)
5524 dipj(iii,1)=Ub2(iii,j)
5525 dipderj(iii)=Ub2der(iii,j)
5526 dipj(iii,2)=b1(iii,itj1)
5530 call matvec2(a_chuj(1,1,jj,i),dipj(1,iii),auxvec(1))
5533 dip(kkk,jj,i)=scalar2(dipi(1,jjj),auxvec(1))
5536 if (.not.calc_grad) return
5541 call matvec2(a_chuj_der(1,1,lll,kkk,jj,i),dipj(1,iii),
5545 dipderx(lll,kkk,mmm,jj,i)=scalar2(dipi(1,jjj),auxvec(1))
5550 call transpose2(a_chuj(1,1,jj,i),auxmat(1,1))
5551 call matvec2(auxmat(1,1),dipderi(1),auxvec(1))
5553 dipderg(iii,jj,i)=scalar2(auxvec(1),dipj(1,iii))
5555 call matvec2(a_chuj(1,1,jj,i),dipderj(1),auxvec(1))
5557 dipderg(iii+2,jj,i)=scalar2(auxvec(1),dipi(1,iii))
5561 C---------------------------------------------------------------------------
5562 subroutine calc_eello(i,j,k,l,jj,kk)
5564 C This subroutine computes matrices and vectors needed to calculate
5565 C the fourth-, fifth-, and sixth-order local-electrostatic terms.
5567 implicit real*8 (a-h,o-z)
5568 include 'DIMENSIONS'
5569 include 'DIMENSIONS.ZSCOPT'
5570 include 'COMMON.IOUNITS'
5571 include 'COMMON.CHAIN'
5572 include 'COMMON.DERIV'
5573 include 'COMMON.INTERACT'
5574 include 'COMMON.CONTACTS'
5575 include 'COMMON.TORSION'
5576 include 'COMMON.VAR'
5577 include 'COMMON.GEO'
5578 include 'COMMON.FFIELD'
5579 double precision aa1(2,2),aa2(2,2),aa1t(2,2),aa2t(2,2),
5580 & aa1tder(2,2,3,5),aa2tder(2,2,3,5),auxmat(2,2)
5583 cd write (iout,*) 'calc_eello: i=',i,' j=',j,' k=',k,' l=',l,
5584 cd & ' jj=',jj,' kk=',kk
5585 cd if (i.ne.2 .or. j.ne.4 .or. k.ne.3 .or. l.ne.5) return
5588 aa1(iii,jjj)=a_chuj(iii,jjj,jj,i)
5589 aa2(iii,jjj)=a_chuj(iii,jjj,kk,k)
5592 call transpose2(aa1(1,1),aa1t(1,1))
5593 call transpose2(aa2(1,1),aa2t(1,1))
5596 call transpose2(a_chuj_der(1,1,lll,kkk,jj,i),
5597 & aa1tder(1,1,lll,kkk))
5598 call transpose2(a_chuj_der(1,1,lll,kkk,kk,k),
5599 & aa2tder(1,1,lll,kkk))
5603 C parallel orientation of the two CA-CA-CA frames.
5605 iti=itortyp(itype(i))
5609 itk1=itortyp(itype(k+1))
5610 itj=itortyp(itype(j))
5611 if (l.lt.nres-1) then
5612 itl1=itortyp(itype(l+1))
5616 C A1 kernel(j+1) A2T
5618 cd write (iout,'(3f10.5,5x,3f10.5)')
5619 cd & (EUg(iii,jjj,k),jjj=1,2),(EUg(iii,jjj,l),jjj=1,2)
5621 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
5622 & aa2tder(1,1,1,1),1,.false.,EUg(1,1,l),EUgder(1,1,l),
5623 & AEA(1,1,1),AEAderg(1,1,1),AEAderx(1,1,1,1,1,1))
5624 C Following matrices are needed only for 6-th order cumulants
5625 IF (wcorr6.gt.0.0d0) THEN
5626 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
5627 & aa2tder(1,1,1,1),1,.false.,EUgC(1,1,l),EUgCder(1,1,l),
5628 & AECA(1,1,1),AECAderg(1,1,1),AECAderx(1,1,1,1,1,1))
5629 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
5630 & aa2tder(1,1,1,1),2,.false.,Ug2DtEUg(1,1,l),
5631 & Ug2DtEUgder(1,1,1,l),ADtEA(1,1,1),ADtEAderg(1,1,1,1),
5632 & ADtEAderx(1,1,1,1,1,1))
5634 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
5635 & aa2tder(1,1,1,1),2,.false.,DtUg2EUg(1,1,l),
5636 & DtUg2EUgder(1,1,1,l),ADtEA1(1,1,1),ADtEA1derg(1,1,1,1),
5637 & ADtEA1derx(1,1,1,1,1,1))
5639 C End 6-th order cumulants
5642 cd write (2,*) 'In calc_eello6'
5644 cd write (2,*) 'iii=',iii
5646 cd write (2,*) 'kkk=',kkk
5648 cd write (2,'(3(2f10.5),5x)')
5649 cd & ((ADtEA1derx(jjj,mmm,lll,kkk,iii,1),mmm=1,2),lll=1,3)
5654 call transpose2(EUgder(1,1,k),auxmat(1,1))
5655 call matmat2(auxmat(1,1),AEA(1,1,1),EAEAderg(1,1,1,1))
5656 call transpose2(EUg(1,1,k),auxmat(1,1))
5657 call matmat2(auxmat(1,1),AEA(1,1,1),EAEA(1,1,1))
5658 call matmat2(auxmat(1,1),AEAderg(1,1,1),EAEAderg(1,1,2,1))
5662 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,1),
5663 & EAEAderx(1,1,lll,kkk,iii,1))
5667 C A1T kernel(i+1) A2
5668 call kernel(aa1t(1,1),aa2(1,1),aa1tder(1,1,1,1),
5669 & a_chuj_der(1,1,1,1,kk,k),1,.false.,EUg(1,1,k),EUgder(1,1,k),
5670 & AEA(1,1,2),AEAderg(1,1,2),AEAderx(1,1,1,1,1,2))
5671 C Following matrices are needed only for 6-th order cumulants
5672 IF (wcorr6.gt.0.0d0) THEN
5673 call kernel(aa1t(1,1),aa2(1,1),aa1tder(1,1,1,1),
5674 & a_chuj_der(1,1,1,1,kk,k),1,.false.,EUgC(1,1,k),EUgCder(1,1,k),
5675 & AECA(1,1,2),AECAderg(1,1,2),AECAderx(1,1,1,1,1,2))
5676 call kernel(aa1t(1,1),aa2(1,1),aa1tder(1,1,1,1),
5677 & a_chuj_der(1,1,1,1,kk,k),2,.false.,Ug2DtEUg(1,1,k),
5678 & Ug2DtEUgder(1,1,1,k),ADtEA(1,1,2),ADtEAderg(1,1,1,2),
5679 & ADtEAderx(1,1,1,1,1,2))
5680 call kernel(aa1t(1,1),aa2(1,1),aa1tder(1,1,1,1),
5681 & a_chuj_der(1,1,1,1,kk,k),2,.false.,DtUg2EUg(1,1,k),
5682 & DtUg2EUgder(1,1,1,k),ADtEA1(1,1,2),ADtEA1derg(1,1,1,2),
5683 & ADtEA1derx(1,1,1,1,1,2))
5685 C End 6-th order cumulants
5686 call transpose2(EUgder(1,1,l),auxmat(1,1))
5687 call matmat2(auxmat(1,1),AEA(1,1,2),EAEAderg(1,1,1,2))
5688 call transpose2(EUg(1,1,l),auxmat(1,1))
5689 call matmat2(auxmat(1,1),AEA(1,1,2),EAEA(1,1,2))
5690 call matmat2(auxmat(1,1),AEAderg(1,1,2),EAEAderg(1,1,2,2))
5694 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,2),
5695 & EAEAderx(1,1,lll,kkk,iii,2))
5700 C Calculate the vectors and their derivatives in virtual-bond dihedral angles.
5701 C They are needed only when the fifth- or the sixth-order cumulants are
5703 IF (wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0) THEN
5704 call transpose2(AEA(1,1,1),auxmat(1,1))
5705 call matvec2(auxmat(1,1),b1(1,iti),AEAb1(1,1,1))
5706 call matvec2(auxmat(1,1),Ub2(1,i),AEAb2(1,1,1))
5707 call matvec2(auxmat(1,1),Ub2der(1,i),AEAb2derg(1,2,1,1))
5708 call transpose2(AEAderg(1,1,1),auxmat(1,1))
5709 call matvec2(auxmat(1,1),b1(1,iti),AEAb1derg(1,1,1))
5710 call matvec2(auxmat(1,1),Ub2(1,i),AEAb2derg(1,1,1,1))
5711 call matvec2(AEA(1,1,1),b1(1,itk1),AEAb1(1,2,1))
5712 call matvec2(AEAderg(1,1,1),b1(1,itk1),AEAb1derg(1,2,1))
5713 call matvec2(AEA(1,1,1),Ub2(1,k+1),AEAb2(1,2,1))
5714 call matvec2(AEAderg(1,1,1),Ub2(1,k+1),AEAb2derg(1,1,2,1))
5715 call matvec2(AEA(1,1,1),Ub2der(1,k+1),AEAb2derg(1,2,2,1))
5716 call transpose2(AEA(1,1,2),auxmat(1,1))
5717 call matvec2(auxmat(1,1),b1(1,itj),AEAb1(1,1,2))
5718 call matvec2(auxmat(1,1),Ub2(1,j),AEAb2(1,1,2))
5719 call matvec2(auxmat(1,1),Ub2der(1,j),AEAb2derg(1,2,1,2))
5720 call transpose2(AEAderg(1,1,2),auxmat(1,1))
5721 call matvec2(auxmat(1,1),b1(1,itj),AEAb1derg(1,1,2))
5722 call matvec2(auxmat(1,1),Ub2(1,j),AEAb2derg(1,1,1,2))
5723 call matvec2(AEA(1,1,2),b1(1,itl1),AEAb1(1,2,2))
5724 call matvec2(AEAderg(1,1,2),b1(1,itl1),AEAb1derg(1,2,2))
5725 call matvec2(AEA(1,1,2),Ub2(1,l+1),AEAb2(1,2,2))
5726 call matvec2(AEAderg(1,1,2),Ub2(1,l+1),AEAb2derg(1,1,2,2))
5727 call matvec2(AEA(1,1,2),Ub2der(1,l+1),AEAb2derg(1,2,2,2))
5728 C Calculate the Cartesian derivatives of the vectors.
5732 call transpose2(AEAderx(1,1,lll,kkk,iii,1),auxmat(1,1))
5733 call matvec2(auxmat(1,1),b1(1,iti),
5734 & AEAb1derx(1,lll,kkk,iii,1,1))
5735 call matvec2(auxmat(1,1),Ub2(1,i),
5736 & AEAb2derx(1,lll,kkk,iii,1,1))
5737 call matvec2(AEAderx(1,1,lll,kkk,iii,1),b1(1,itk1),
5738 & AEAb1derx(1,lll,kkk,iii,2,1))
5739 call matvec2(AEAderx(1,1,lll,kkk,iii,1),Ub2(1,k+1),
5740 & AEAb2derx(1,lll,kkk,iii,2,1))
5741 call transpose2(AEAderx(1,1,lll,kkk,iii,2),auxmat(1,1))
5742 call matvec2(auxmat(1,1),b1(1,itj),
5743 & AEAb1derx(1,lll,kkk,iii,1,2))
5744 call matvec2(auxmat(1,1),Ub2(1,j),
5745 & AEAb2derx(1,lll,kkk,iii,1,2))
5746 call matvec2(AEAderx(1,1,lll,kkk,iii,2),b1(1,itl1),
5747 & AEAb1derx(1,lll,kkk,iii,2,2))
5748 call matvec2(AEAderx(1,1,lll,kkk,iii,2),Ub2(1,l+1),
5749 & AEAb2derx(1,lll,kkk,iii,2,2))
5756 C Antiparallel orientation of the two CA-CA-CA frames.
5758 iti=itortyp(itype(i))
5762 itk1=itortyp(itype(k+1))
5763 itl=itortyp(itype(l))
5764 itj=itortyp(itype(j))
5765 if (j.lt.nres-1) then
5766 itj1=itortyp(itype(j+1))
5770 C A2 kernel(j-1)T A1T
5771 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
5772 & aa2tder(1,1,1,1),1,.true.,EUg(1,1,j),EUgder(1,1,j),
5773 & AEA(1,1,1),AEAderg(1,1,1),AEAderx(1,1,1,1,1,1))
5774 C Following matrices are needed only for 6-th order cumulants
5775 IF (wcorr6.gt.0.0d0 .or. (wturn6.gt.0.0d0 .and.
5776 & j.eq.i+4 .and. l.eq.i+3)) THEN
5777 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
5778 & aa2tder(1,1,1,1),1,.true.,EUgC(1,1,j),EUgCder(1,1,j),
5779 & AECA(1,1,1),AECAderg(1,1,1),AECAderx(1,1,1,1,1,1))
5780 call kernel(aa2(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
5781 & aa2tder(1,1,1,1),2,.true.,Ug2DtEUg(1,1,j),
5782 & Ug2DtEUgder(1,1,1,j),ADtEA(1,1,1),ADtEAderg(1,1,1,1),
5783 & ADtEAderx(1,1,1,1,1,1))
5784 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
5785 & aa2tder(1,1,1,1),2,.true.,DtUg2EUg(1,1,j),
5786 & DtUg2EUgder(1,1,1,j),ADtEA1(1,1,1),ADtEA1derg(1,1,1,1),
5787 & ADtEA1derx(1,1,1,1,1,1))
5789 C End 6-th order cumulants
5790 call transpose2(EUgder(1,1,k),auxmat(1,1))
5791 call matmat2(auxmat(1,1),AEA(1,1,1),EAEAderg(1,1,1,1))
5792 call transpose2(EUg(1,1,k),auxmat(1,1))
5793 call matmat2(auxmat(1,1),AEA(1,1,1),EAEA(1,1,1))
5794 call matmat2(auxmat(1,1),AEAderg(1,1,1),EAEAderg(1,1,2,1))
5798 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,1),
5799 & EAEAderx(1,1,lll,kkk,iii,1))
5803 C A2T kernel(i+1)T A1
5804 call kernel(aa2t(1,1),aa1(1,1),aa2tder(1,1,1,1),
5805 & a_chuj_der(1,1,1,1,jj,i),1,.true.,EUg(1,1,k),EUgder(1,1,k),
5806 & AEA(1,1,2),AEAderg(1,1,2),AEAderx(1,1,1,1,1,2))
5807 C Following matrices are needed only for 6-th order cumulants
5808 IF (wcorr6.gt.0.0d0 .or. (wturn6.gt.0.0d0 .and.
5809 & j.eq.i+4 .and. l.eq.i+3)) THEN
5810 call kernel(aa2t(1,1),aa1(1,1),aa2tder(1,1,1,1),
5811 & a_chuj_der(1,1,1,1,jj,i),1,.true.,EUgC(1,1,k),EUgCder(1,1,k),
5812 & AECA(1,1,2),AECAderg(1,1,2),AECAderx(1,1,1,1,1,2))
5813 call kernel(aa2t(1,1),aa1(1,1),aa2tder(1,1,1,1),
5814 & a_chuj_der(1,1,1,1,jj,i),2,.true.,Ug2DtEUg(1,1,k),
5815 & Ug2DtEUgder(1,1,1,k),ADtEA(1,1,2),ADtEAderg(1,1,1,2),
5816 & ADtEAderx(1,1,1,1,1,2))
5817 call kernel(aa2t(1,1),aa1(1,1),aa2tder(1,1,1,1),
5818 & a_chuj_der(1,1,1,1,jj,i),2,.true.,DtUg2EUg(1,1,k),
5819 & DtUg2EUgder(1,1,1,k),ADtEA1(1,1,2),ADtEA1derg(1,1,1,2),
5820 & ADtEA1derx(1,1,1,1,1,2))
5822 C End 6-th order cumulants
5823 call transpose2(EUgder(1,1,j),auxmat(1,1))
5824 call matmat2(auxmat(1,1),AEA(1,1,1),EAEAderg(1,1,2,2))
5825 call transpose2(EUg(1,1,j),auxmat(1,1))
5826 call matmat2(auxmat(1,1),AEA(1,1,2),EAEA(1,1,2))
5827 call matmat2(auxmat(1,1),AEAderg(1,1,2),EAEAderg(1,1,2,2))
5831 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,2),
5832 & EAEAderx(1,1,lll,kkk,iii,2))
5837 C Calculate the vectors and their derivatives in virtual-bond dihedral angles.
5838 C They are needed only when the fifth- or the sixth-order cumulants are
5840 IF (wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0 .or.
5841 & (wturn6.gt.0.0d0 .and. j.eq.i+4 .and. l.eq.i+3)) THEN
5842 call transpose2(AEA(1,1,1),auxmat(1,1))
5843 call matvec2(auxmat(1,1),b1(1,iti),AEAb1(1,1,1))
5844 call matvec2(auxmat(1,1),Ub2(1,i),AEAb2(1,1,1))
5845 call matvec2(auxmat(1,1),Ub2der(1,i),AEAb2derg(1,2,1,1))
5846 call transpose2(AEAderg(1,1,1),auxmat(1,1))
5847 call matvec2(auxmat(1,1),b1(1,iti),AEAb1derg(1,1,1))
5848 call matvec2(auxmat(1,1),Ub2(1,i),AEAb2derg(1,1,1,1))
5849 call matvec2(AEA(1,1,1),b1(1,itk1),AEAb1(1,2,1))
5850 call matvec2(AEAderg(1,1,1),b1(1,itk1),AEAb1derg(1,2,1))
5851 call matvec2(AEA(1,1,1),Ub2(1,k+1),AEAb2(1,2,1))
5852 call matvec2(AEAderg(1,1,1),Ub2(1,k+1),AEAb2derg(1,1,2,1))
5853 call matvec2(AEA(1,1,1),Ub2der(1,k+1),AEAb2derg(1,2,2,1))
5854 call transpose2(AEA(1,1,2),auxmat(1,1))
5855 call matvec2(auxmat(1,1),b1(1,itj1),AEAb1(1,1,2))
5856 call matvec2(auxmat(1,1),Ub2(1,l),AEAb2(1,1,2))
5857 call matvec2(auxmat(1,1),Ub2der(1,l),AEAb2derg(1,2,1,2))
5858 call transpose2(AEAderg(1,1,2),auxmat(1,1))
5859 call matvec2(auxmat(1,1),b1(1,itl),AEAb1(1,1,2))
5860 call matvec2(auxmat(1,1),Ub2(1,l),AEAb2derg(1,1,1,2))
5861 call matvec2(AEA(1,1,2),b1(1,itj1),AEAb1(1,2,2))
5862 call matvec2(AEAderg(1,1,2),b1(1,itj1),AEAb1derg(1,2,2))
5863 call matvec2(AEA(1,1,2),Ub2(1,j),AEAb2(1,2,2))
5864 call matvec2(AEAderg(1,1,2),Ub2(1,j),AEAb2derg(1,1,2,2))
5865 call matvec2(AEA(1,1,2),Ub2der(1,j),AEAb2derg(1,2,2,2))
5866 C Calculate the Cartesian derivatives of the vectors.
5870 call transpose2(AEAderx(1,1,lll,kkk,iii,1),auxmat(1,1))
5871 call matvec2(auxmat(1,1),b1(1,iti),
5872 & AEAb1derx(1,lll,kkk,iii,1,1))
5873 call matvec2(auxmat(1,1),Ub2(1,i),
5874 & AEAb2derx(1,lll,kkk,iii,1,1))
5875 call matvec2(AEAderx(1,1,lll,kkk,iii,1),b1(1,itk1),
5876 & AEAb1derx(1,lll,kkk,iii,2,1))
5877 call matvec2(AEAderx(1,1,lll,kkk,iii,1),Ub2(1,k+1),
5878 & AEAb2derx(1,lll,kkk,iii,2,1))
5879 call transpose2(AEAderx(1,1,lll,kkk,iii,2),auxmat(1,1))
5880 call matvec2(auxmat(1,1),b1(1,itl),
5881 & AEAb1derx(1,lll,kkk,iii,1,2))
5882 call matvec2(auxmat(1,1),Ub2(1,l),
5883 & AEAb2derx(1,lll,kkk,iii,1,2))
5884 call matvec2(AEAderx(1,1,lll,kkk,iii,2),b1(1,itj1),
5885 & AEAb1derx(1,lll,kkk,iii,2,2))
5886 call matvec2(AEAderx(1,1,lll,kkk,iii,2),Ub2(1,j),
5887 & AEAb2derx(1,lll,kkk,iii,2,2))
5896 C---------------------------------------------------------------------------
5897 subroutine kernel(aa1,aa2t,aa1derx,aa2tderx,nderg,transp,
5898 & KK,KKderg,AKA,AKAderg,AKAderx)
5902 double precision aa1(2,2),aa2t(2,2),aa1derx(2,2,3,5),
5903 & aa2tderx(2,2,3,5),KK(2,2),KKderg(2,2,nderg),AKA(2,2),
5904 & AKAderg(2,2,nderg),AKAderx(2,2,3,5,2)
5909 call prodmat3(aa1(1,1),aa2t(1,1),KK(1,1),transp,AKA(1,1))
5911 call prodmat3(aa1(1,1),aa2t(1,1),KKderg(1,1,iii),transp,
5914 cd if (lprn) write (2,*) 'In kernel'
5916 cd if (lprn) write (2,*) 'kkk=',kkk
5918 call prodmat3(aa1derx(1,1,lll,kkk),aa2t(1,1),
5919 & KK(1,1),transp,AKAderx(1,1,lll,kkk,1))
5921 cd write (2,*) 'lll=',lll
5922 cd write (2,*) 'iii=1'
5924 cd write (2,'(3(2f10.5),5x)')
5925 cd & (AKAderx(jjj,mmm,lll,kkk,1),mmm=1,2)
5928 call prodmat3(aa1(1,1),aa2tderx(1,1,lll,kkk),
5929 & KK(1,1),transp,AKAderx(1,1,lll,kkk,2))
5931 cd write (2,*) 'lll=',lll
5932 cd write (2,*) 'iii=2'
5934 cd write (2,'(3(2f10.5),5x)')
5935 cd & (AKAderx(jjj,mmm,lll,kkk,2),mmm=1,2)
5942 C---------------------------------------------------------------------------
5943 double precision function eello4(i,j,k,l,jj,kk)
5944 implicit real*8 (a-h,o-z)
5945 include 'DIMENSIONS'
5946 include 'DIMENSIONS.ZSCOPT'
5947 include 'COMMON.IOUNITS'
5948 include 'COMMON.CHAIN'
5949 include 'COMMON.DERIV'
5950 include 'COMMON.INTERACT'
5951 include 'COMMON.CONTACTS'
5952 include 'COMMON.TORSION'
5953 include 'COMMON.VAR'
5954 include 'COMMON.GEO'
5955 double precision pizda(2,2),ggg1(3),ggg2(3)
5956 cd if (i.ne.1 .or. j.ne.5 .or. k.ne.2 .or.l.ne.4) then
5960 cd print *,'eello4:',i,j,k,l,jj,kk
5961 cd write (2,*) 'i',i,' j',j,' k',k,' l',l
5962 cd call checkint4(i,j,k,l,jj,kk,eel4_num)
5963 cold eij=facont_hb(jj,i)
5964 cold ekl=facont_hb(kk,k)
5966 eel4=-EAEA(1,1,1)-EAEA(2,2,1)
5968 cd eel41=-EAEA(1,1,2)-EAEA(2,2,2)
5969 gcorr_loc(k-1)=gcorr_loc(k-1)
5970 & -ekont*(EAEAderg(1,1,1,1)+EAEAderg(2,2,1,1))
5972 gcorr_loc(l-1)=gcorr_loc(l-1)
5973 & -ekont*(EAEAderg(1,1,2,1)+EAEAderg(2,2,2,1))
5975 gcorr_loc(j-1)=gcorr_loc(j-1)
5976 & -ekont*(EAEAderg(1,1,2,1)+EAEAderg(2,2,2,1))
5981 derx(lll,kkk,iii)=-EAEAderx(1,1,lll,kkk,iii,1)
5982 & -EAEAderx(2,2,lll,kkk,iii,1)
5983 cd derx(lll,kkk,iii)=0.0d0
5987 cd gcorr_loc(l-1)=0.0d0
5988 cd gcorr_loc(j-1)=0.0d0
5989 cd gcorr_loc(k-1)=0.0d0
5991 cd write (iout,*)'Contacts have occurred for peptide groups',
5992 cd & i,j,' fcont:',eij,' eij',' and ',k,l,
5993 cd & ' fcont ',ekl,' eel4=',eel4,' eel4_num',16*eel4_num
5994 if (j.lt.nres-1) then
6001 if (l.lt.nres-1) then
6009 cold ghalf=0.5d0*eel4*ekl*gacont_hbr(ll,jj,i)
6010 ggg1(ll)=eel4*g_contij(ll,1)
6011 ggg2(ll)=eel4*g_contij(ll,2)
6012 ghalf=0.5d0*ggg1(ll)
6014 gradcorr(ll,i)=gradcorr(ll,i)+ghalf+ekont*derx(ll,2,1)
6015 gradcorr(ll,i+1)=gradcorr(ll,i+1)+ekont*derx(ll,3,1)
6016 gradcorr(ll,j)=gradcorr(ll,j)+ghalf+ekont*derx(ll,4,1)
6017 gradcorr(ll,j1)=gradcorr(ll,j1)+ekont*derx(ll,5,1)
6018 cold ghalf=0.5d0*eel4*eij*gacont_hbr(ll,kk,k)
6019 ghalf=0.5d0*ggg2(ll)
6021 gradcorr(ll,k)=gradcorr(ll,k)+ghalf+ekont*derx(ll,2,2)
6022 gradcorr(ll,k+1)=gradcorr(ll,k+1)+ekont*derx(ll,3,2)
6023 gradcorr(ll,l)=gradcorr(ll,l)+ghalf+ekont*derx(ll,4,2)
6024 gradcorr(ll,l1)=gradcorr(ll,l1)+ekont*derx(ll,5,2)
6029 cold gradcorr(ll,m)=gradcorr(ll,m)+eel4*ekl*gacont_hbr(ll,jj,i)
6030 gradcorr(ll,m)=gradcorr(ll,m)+ggg1(ll)
6035 cold gradcorr(ll,m)=gradcorr(ll,m)+eel4*eij*gacont_hbr(ll,kk,k)
6036 gradcorr(ll,m)=gradcorr(ll,m)+ggg2(ll)
6042 gradcorr(ll,m)=gradcorr(ll,m)+ekont*derx(ll,1,1)
6047 gradcorr(ll,m)=gradcorr(ll,m)+ekont*derx(ll,1,2)
6051 cd write (2,*) iii,gcorr_loc(iii)
6055 cd write (2,*) 'ekont',ekont
6056 cd write (iout,*) 'eello4',ekont*eel4
6059 C---------------------------------------------------------------------------
6060 double precision function eello5(i,j,k,l,jj,kk)
6061 implicit real*8 (a-h,o-z)
6062 include 'DIMENSIONS'
6063 include 'DIMENSIONS.ZSCOPT'
6064 include 'COMMON.IOUNITS'
6065 include 'COMMON.CHAIN'
6066 include 'COMMON.DERIV'
6067 include 'COMMON.INTERACT'
6068 include 'COMMON.CONTACTS'
6069 include 'COMMON.TORSION'
6070 include 'COMMON.VAR'
6071 include 'COMMON.GEO'
6072 double precision pizda(2,2),auxmat(2,2),auxmat1(2,2),vv(2)
6073 double precision ggg1(3),ggg2(3)
6074 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
6079 C /l\ / \ \ / \ / \ / C
6080 C / \ / \ \ / \ / \ / C
6081 C j| o |l1 | o | o| o | | o |o C
6082 C \ |/k\| |/ \| / |/ \| |/ \| C
6083 C \i/ \ / \ / / \ / \ C
6085 C (I) (II) (III) (IV) C
6087 C eello5_1 eello5_2 eello5_3 eello5_4 C
6089 C Antiparallel chains C
6092 C /j\ / \ \ / \ / \ / C
6093 C / \ / \ \ / \ / \ / C
6094 C j1| o |l | o | o| o | | o |o C
6095 C \ |/k\| |/ \| / |/ \| |/ \| C
6096 C \i/ \ / \ / / \ / \ C
6098 C (I) (II) (III) (IV) C
6100 C eello5_1 eello5_2 eello5_3 eello5_4 C
6102 C o denotes a local interaction, vertical lines an electrostatic interaction. C
6104 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
6105 cd if (i.ne.2 .or. j.ne.6 .or. k.ne.3 .or. l.ne.5) then
6110 cd & 'EELLO5: Contacts have occurred for peptide groups',i,j,
6112 itk=itortyp(itype(k))
6113 itl=itortyp(itype(l))
6114 itj=itortyp(itype(j))
6119 cd call checkint5(i,j,k,l,jj,kk,eel5_1_num,eel5_2_num,
6120 cd & eel5_3_num,eel5_4_num)
6124 derx(lll,kkk,iii)=0.0d0
6128 cd eij=facont_hb(jj,i)
6129 cd ekl=facont_hb(kk,k)
6131 cd write (iout,*)'Contacts have occurred for peptide groups',
6132 cd & i,j,' fcont:',eij,' eij',' and ',k,l
6134 C Contribution from the graph I.
6135 cd write (2,*) 'AEA ',AEA(1,1,1),AEA(2,1,1),AEA(1,2,1),AEA(2,2,1)
6136 cd write (2,*) 'AEAb2',AEAb2(1,1,1),AEAb2(2,1,1)
6137 call transpose2(EUg(1,1,k),auxmat(1,1))
6138 call matmat2(AEA(1,1,1),auxmat(1,1),pizda(1,1))
6139 vv(1)=pizda(1,1)-pizda(2,2)
6140 vv(2)=pizda(1,2)+pizda(2,1)
6141 eello5_1=scalar2(AEAb2(1,1,1),Ub2(1,k))
6142 & +0.5d0*scalar2(vv(1),Dtobr2(1,i))
6144 C Explicit gradient in virtual-dihedral angles.
6145 if (i.gt.1) g_corr5_loc(i-1)=g_corr5_loc(i-1)
6146 & +ekont*(scalar2(AEAb2derg(1,2,1,1),Ub2(1,k))
6147 & +0.5d0*scalar2(vv(1),Dtobr2der(1,i)))
6148 call transpose2(EUgder(1,1,k),auxmat1(1,1))
6149 call matmat2(AEA(1,1,1),auxmat1(1,1),pizda(1,1))
6150 vv(1)=pizda(1,1)-pizda(2,2)
6151 vv(2)=pizda(1,2)+pizda(2,1)
6152 g_corr5_loc(k-1)=g_corr5_loc(k-1)
6153 & +ekont*(scalar2(AEAb2(1,1,1),Ub2der(1,k))
6154 & +0.5d0*scalar2(vv(1),Dtobr2(1,i)))
6155 call matmat2(AEAderg(1,1,1),auxmat(1,1),pizda(1,1))
6156 vv(1)=pizda(1,1)-pizda(2,2)
6157 vv(2)=pizda(1,2)+pizda(2,1)
6159 if (l.lt.nres-1) g_corr5_loc(l-1)=g_corr5_loc(l-1)
6160 & +ekont*(scalar2(AEAb2derg(1,1,1,1),Ub2(1,k))
6161 & +0.5d0*scalar2(vv(1),Dtobr2(1,i)))
6163 if (j.lt.nres-1) g_corr5_loc(j-1)=g_corr5_loc(j-1)
6164 & +ekont*(scalar2(AEAb2derg(1,1,1,1),Ub2(1,k))
6165 & +0.5d0*scalar2(vv(1),Dtobr2(1,i)))
6167 C Cartesian gradient
6171 call matmat2(AEAderx(1,1,lll,kkk,iii,1),auxmat(1,1),
6173 vv(1)=pizda(1,1)-pizda(2,2)
6174 vv(2)=pizda(1,2)+pizda(2,1)
6175 derx(lll,kkk,iii)=derx(lll,kkk,iii)
6176 & +scalar2(AEAb2derx(1,lll,kkk,iii,1,1),Ub2(1,k))
6177 & +0.5d0*scalar2(vv(1),Dtobr2(1,i))
6184 C Contribution from graph II
6185 call transpose2(EE(1,1,itk),auxmat(1,1))
6186 call matmat2(auxmat(1,1),AEA(1,1,1),pizda(1,1))
6187 vv(1)=pizda(1,1)+pizda(2,2)
6188 vv(2)=pizda(2,1)-pizda(1,2)
6189 eello5_2=scalar2(AEAb1(1,2,1),b1(1,itk))
6190 & -0.5d0*scalar2(vv(1),Ctobr(1,k))
6192 C Explicit gradient in virtual-dihedral angles.
6193 g_corr5_loc(k-1)=g_corr5_loc(k-1)
6194 & -0.5d0*ekont*scalar2(vv(1),Ctobrder(1,k))
6195 call matmat2(auxmat(1,1),AEAderg(1,1,1),pizda(1,1))
6196 vv(1)=pizda(1,1)+pizda(2,2)
6197 vv(2)=pizda(2,1)-pizda(1,2)
6199 g_corr5_loc(l-1)=g_corr5_loc(l-1)
6200 & +ekont*(scalar2(AEAb1derg(1,2,1),b1(1,itk))
6201 & -0.5d0*scalar2(vv(1),Ctobr(1,k)))
6203 g_corr5_loc(j-1)=g_corr5_loc(j-1)
6204 & +ekont*(scalar2(AEAb1derg(1,2,1),b1(1,itk))
6205 & -0.5d0*scalar2(vv(1),Ctobr(1,k)))
6207 C Cartesian gradient
6211 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,1),
6213 vv(1)=pizda(1,1)+pizda(2,2)
6214 vv(2)=pizda(2,1)-pizda(1,2)
6215 derx(lll,kkk,iii)=derx(lll,kkk,iii)
6216 & +scalar2(AEAb1derx(1,lll,kkk,iii,2,1),b1(1,itk))
6217 & -0.5d0*scalar2(vv(1),Ctobr(1,k))
6226 C Parallel orientation
6227 C Contribution from graph III
6228 call transpose2(EUg(1,1,l),auxmat(1,1))
6229 call matmat2(AEA(1,1,2),auxmat(1,1),pizda(1,1))
6230 vv(1)=pizda(1,1)-pizda(2,2)
6231 vv(2)=pizda(1,2)+pizda(2,1)
6232 eello5_3=scalar2(AEAb2(1,1,2),Ub2(1,l))
6233 & +0.5d0*scalar2(vv(1),Dtobr2(1,j))
6235 C Explicit gradient in virtual-dihedral angles.
6236 g_corr5_loc(j-1)=g_corr5_loc(j-1)
6237 & +ekont*(scalar2(AEAb2derg(1,2,1,2),Ub2(1,l))
6238 & +0.5d0*scalar2(vv(1),Dtobr2der(1,j)))
6239 call matmat2(AEAderg(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 g_corr5_loc(k-1)=g_corr5_loc(k-1)
6243 & +ekont*(scalar2(AEAb2derg(1,1,1,2),Ub2(1,l))
6244 & +0.5d0*scalar2(vv(1),Dtobr2(1,j)))
6245 call transpose2(EUgder(1,1,l),auxmat1(1,1))
6246 call matmat2(AEA(1,1,2),auxmat1(1,1),pizda(1,1))
6247 vv(1)=pizda(1,1)-pizda(2,2)
6248 vv(2)=pizda(1,2)+pizda(2,1)
6249 g_corr5_loc(l-1)=g_corr5_loc(l-1)
6250 & +ekont*(scalar2(AEAb2(1,1,2),Ub2der(1,l))
6251 & +0.5d0*scalar2(vv(1),Dtobr2(1,j)))
6252 C Cartesian gradient
6256 call matmat2(AEAderx(1,1,lll,kkk,iii,2),auxmat(1,1),
6258 vv(1)=pizda(1,1)-pizda(2,2)
6259 vv(2)=pizda(1,2)+pizda(2,1)
6260 derx(lll,kkk,iii)=derx(lll,kkk,iii)
6261 & +scalar2(AEAb2derx(1,lll,kkk,iii,1,2),Ub2(1,l))
6262 & +0.5d0*scalar2(vv(1),Dtobr2(1,j))
6268 C Contribution from graph IV
6270 call transpose2(EE(1,1,itl),auxmat(1,1))
6271 call matmat2(auxmat(1,1),AEA(1,1,2),pizda(1,1))
6272 vv(1)=pizda(1,1)+pizda(2,2)
6273 vv(2)=pizda(2,1)-pizda(1,2)
6274 eello5_4=scalar2(AEAb1(1,2,2),b1(1,itl))
6275 & -0.5d0*scalar2(vv(1),Ctobr(1,l))
6277 C Explicit gradient in virtual-dihedral angles.
6278 g_corr5_loc(l-1)=g_corr5_loc(l-1)
6279 & -0.5d0*ekont*scalar2(vv(1),Ctobrder(1,l))
6280 call matmat2(auxmat(1,1),AEAderg(1,1,2),pizda(1,1))
6281 vv(1)=pizda(1,1)+pizda(2,2)
6282 vv(2)=pizda(2,1)-pizda(1,2)
6283 g_corr5_loc(k-1)=g_corr5_loc(k-1)
6284 & +ekont*(scalar2(AEAb1derg(1,2,2),b1(1,itl))
6285 & -0.5d0*scalar2(vv(1),Ctobr(1,l)))
6286 C Cartesian gradient
6290 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,2),
6292 vv(1)=pizda(1,1)+pizda(2,2)
6293 vv(2)=pizda(2,1)-pizda(1,2)
6294 derx(lll,kkk,iii)=derx(lll,kkk,iii)
6295 & +scalar2(AEAb1derx(1,lll,kkk,iii,2,2),b1(1,itl))
6296 & -0.5d0*scalar2(vv(1),Ctobr(1,l))
6302 C Antiparallel orientation
6303 C Contribution from graph III
6305 call transpose2(EUg(1,1,j),auxmat(1,1))
6306 call matmat2(AEA(1,1,2),auxmat(1,1),pizda(1,1))
6307 vv(1)=pizda(1,1)-pizda(2,2)
6308 vv(2)=pizda(1,2)+pizda(2,1)
6309 eello5_3=scalar2(AEAb2(1,1,2),Ub2(1,j))
6310 & +0.5d0*scalar2(vv(1),Dtobr2(1,l))
6312 C Explicit gradient in virtual-dihedral angles.
6313 g_corr5_loc(l-1)=g_corr5_loc(l-1)
6314 & +ekont*(scalar2(AEAb2derg(1,2,1,2),Ub2(1,j))
6315 & +0.5d0*scalar2(vv(1),Dtobr2der(1,l)))
6316 call matmat2(AEAderg(1,1,2),auxmat(1,1),pizda(1,1))
6317 vv(1)=pizda(1,1)-pizda(2,2)
6318 vv(2)=pizda(1,2)+pizda(2,1)
6319 g_corr5_loc(k-1)=g_corr5_loc(k-1)
6320 & +ekont*(scalar2(AEAb2derg(1,1,1,2),Ub2(1,j))
6321 & +0.5d0*scalar2(vv(1),Dtobr2(1,l)))
6322 call transpose2(EUgder(1,1,j),auxmat1(1,1))
6323 call matmat2(AEA(1,1,2),auxmat1(1,1),pizda(1,1))
6324 vv(1)=pizda(1,1)-pizda(2,2)
6325 vv(2)=pizda(1,2)+pizda(2,1)
6326 g_corr5_loc(j-1)=g_corr5_loc(j-1)
6327 & +ekont*(scalar2(AEAb2(1,1,2),Ub2der(1,j))
6328 & +0.5d0*scalar2(vv(1),Dtobr2(1,l)))
6329 C Cartesian gradient
6333 call matmat2(AEAderx(1,1,lll,kkk,iii,2),auxmat(1,1),
6335 vv(1)=pizda(1,1)-pizda(2,2)
6336 vv(2)=pizda(1,2)+pizda(2,1)
6337 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)
6338 & +scalar2(AEAb2derx(1,lll,kkk,iii,1,2),Ub2(1,j))
6339 & +0.5d0*scalar2(vv(1),Dtobr2(1,l))
6345 C Contribution from graph IV
6347 call transpose2(EE(1,1,itj),auxmat(1,1))
6348 call matmat2(auxmat(1,1),AEA(1,1,2),pizda(1,1))
6349 vv(1)=pizda(1,1)+pizda(2,2)
6350 vv(2)=pizda(2,1)-pizda(1,2)
6351 eello5_4=scalar2(AEAb1(1,2,2),b1(1,itj))
6352 & -0.5d0*scalar2(vv(1),Ctobr(1,j))
6354 C Explicit gradient in virtual-dihedral angles.
6355 g_corr5_loc(j-1)=g_corr5_loc(j-1)
6356 & -0.5d0*ekont*scalar2(vv(1),Ctobrder(1,j))
6357 call matmat2(auxmat(1,1),AEAderg(1,1,2),pizda(1,1))
6358 vv(1)=pizda(1,1)+pizda(2,2)
6359 vv(2)=pizda(2,1)-pizda(1,2)
6360 g_corr5_loc(k-1)=g_corr5_loc(k-1)
6361 & +ekont*(scalar2(AEAb1derg(1,2,2),b1(1,itj))
6362 & -0.5d0*scalar2(vv(1),Ctobr(1,j)))
6363 C Cartesian gradient
6367 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,2),
6369 vv(1)=pizda(1,1)+pizda(2,2)
6370 vv(2)=pizda(2,1)-pizda(1,2)
6371 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)
6372 & +scalar2(AEAb1derx(1,lll,kkk,iii,2,2),b1(1,itj))
6373 & -0.5d0*scalar2(vv(1),Ctobr(1,j))
6380 eel5=eello5_1+eello5_2+eello5_3+eello5_4
6381 cd if (i.eq.2 .and. j.eq.8 .and. k.eq.3 .and. l.eq.7) then
6382 cd write (2,*) 'ijkl',i,j,k,l
6383 cd write (2,*) 'eello5_1',eello5_1,' eello5_2',eello5_2,
6384 cd & ' eello5_3',eello5_3,' eello5_4',eello5_4
6386 cd write(iout,*) 'eello5_1',eello5_1,' eel5_1_num',16*eel5_1_num
6387 cd write(iout,*) 'eello5_2',eello5_2,' eel5_2_num',16*eel5_2_num
6388 cd write(iout,*) 'eello5_3',eello5_3,' eel5_3_num',16*eel5_3_num
6389 cd write(iout,*) 'eello5_4',eello5_4,' eel5_4_num',16*eel5_4_num
6391 if (j.lt.nres-1) then
6398 if (l.lt.nres-1) then
6408 cd write (2,*) 'eij',eij,' ekl',ekl,' ekont',ekont
6410 ggg1(ll)=eel5*g_contij(ll,1)
6411 ggg2(ll)=eel5*g_contij(ll,2)
6412 cold ghalf=0.5d0*eel5*ekl*gacont_hbr(ll,jj,i)
6413 ghalf=0.5d0*ggg1(ll)
6415 gradcorr5(ll,i)=gradcorr5(ll,i)+ghalf+ekont*derx(ll,2,1)
6416 gradcorr5(ll,i+1)=gradcorr5(ll,i+1)+ekont*derx(ll,3,1)
6417 gradcorr5(ll,j)=gradcorr5(ll,j)+ghalf+ekont*derx(ll,4,1)
6418 gradcorr5(ll,j1)=gradcorr5(ll,j1)+ekont*derx(ll,5,1)
6419 cold ghalf=0.5d0*eel5*eij*gacont_hbr(ll,kk,k)
6420 ghalf=0.5d0*ggg2(ll)
6422 gradcorr5(ll,k)=gradcorr5(ll,k)+ghalf+ekont*derx(ll,2,2)
6423 gradcorr5(ll,k+1)=gradcorr5(ll,k+1)+ekont*derx(ll,3,2)
6424 gradcorr5(ll,l)=gradcorr5(ll,l)+ghalf+ekont*derx(ll,4,2)
6425 gradcorr5(ll,l1)=gradcorr5(ll,l1)+ekont*derx(ll,5,2)
6430 cold gradcorr5(ll,m)=gradcorr5(ll,m)+eel5*ekl*gacont_hbr(ll,jj,i)
6431 gradcorr5(ll,m)=gradcorr5(ll,m)+ggg1(ll)
6436 cold gradcorr5(ll,m)=gradcorr5(ll,m)+eel5*eij*gacont_hbr(ll,kk,k)
6437 gradcorr5(ll,m)=gradcorr5(ll,m)+ggg2(ll)
6443 gradcorr5(ll,m)=gradcorr5(ll,m)+ekont*derx(ll,1,1)
6448 gradcorr5(ll,m)=gradcorr5(ll,m)+ekont*derx(ll,1,2)
6452 cd write (2,*) iii,g_corr5_loc(iii)
6456 cd write (2,*) 'ekont',ekont
6457 cd write (iout,*) 'eello5',ekont*eel5
6460 c--------------------------------------------------------------------------
6461 double precision function eello6(i,j,k,l,jj,kk)
6462 implicit real*8 (a-h,o-z)
6463 include 'DIMENSIONS'
6464 include 'DIMENSIONS.ZSCOPT'
6465 include 'COMMON.IOUNITS'
6466 include 'COMMON.CHAIN'
6467 include 'COMMON.DERIV'
6468 include 'COMMON.INTERACT'
6469 include 'COMMON.CONTACTS'
6470 include 'COMMON.TORSION'
6471 include 'COMMON.VAR'
6472 include 'COMMON.GEO'
6473 include 'COMMON.FFIELD'
6474 double precision ggg1(3),ggg2(3)
6475 cd if (i.ne.1 .or. j.ne.3 .or. k.ne.2 .or. l.ne.4) then
6480 cd & 'EELLO6: Contacts have occurred for peptide groups',i,j,
6488 cd call checkint6(i,j,k,l,jj,kk,eel6_1_num,eel6_2_num,
6489 cd & eel6_3_num,eel6_4_num,eel6_5_num,eel6_6_num)
6493 derx(lll,kkk,iii)=0.0d0
6497 cd eij=facont_hb(jj,i)
6498 cd ekl=facont_hb(kk,k)
6504 eello6_1=eello6_graph1(i,j,k,l,1,.false.)
6505 eello6_2=eello6_graph1(j,i,l,k,2,.false.)
6506 eello6_3=eello6_graph2(i,j,k,l,jj,kk,.false.)
6507 eello6_4=eello6_graph4(i,j,k,l,jj,kk,1,.false.)
6508 eello6_5=eello6_graph4(j,i,l,k,jj,kk,2,.false.)
6509 eello6_6=eello6_graph3(i,j,k,l,jj,kk,.false.)
6511 eello6_1=eello6_graph1(i,j,k,l,1,.false.)
6512 eello6_2=eello6_graph1(l,k,j,i,2,.true.)
6513 eello6_3=eello6_graph2(i,l,k,j,jj,kk,.true.)
6514 eello6_4=eello6_graph4(i,j,k,l,jj,kk,1,.false.)
6515 if (wturn6.eq.0.0d0 .or. j.ne.i+4) then
6516 eello6_5=eello6_graph4(l,k,j,i,kk,jj,2,.true.)
6520 eello6_6=eello6_graph3(i,l,k,j,jj,kk,.true.)
6522 C If turn contributions are considered, they will be handled separately.
6523 eel6=eello6_1+eello6_2+eello6_3+eello6_4+eello6_5+eello6_6
6524 cd write(iout,*) 'eello6_1',eello6_1,' eel6_1_num',16*eel6_1_num
6525 cd write(iout,*) 'eello6_2',eello6_2,' eel6_2_num',16*eel6_2_num
6526 cd write(iout,*) 'eello6_3',eello6_3,' eel6_3_num',16*eel6_3_num
6527 cd write(iout,*) 'eello6_4',eello6_4,' eel6_4_num',16*eel6_4_num
6528 cd write(iout,*) 'eello6_5',eello6_5,' eel6_5_num',16*eel6_5_num
6529 cd write(iout,*) 'eello6_6',eello6_6,' eel6_6_num',16*eel6_6_num
6532 if (j.lt.nres-1) then
6539 if (l.lt.nres-1) then
6547 ggg1(ll)=eel6*g_contij(ll,1)
6548 ggg2(ll)=eel6*g_contij(ll,2)
6549 cold ghalf=0.5d0*eel6*ekl*gacont_hbr(ll,jj,i)
6550 ghalf=0.5d0*ggg1(ll)
6552 gradcorr6(ll,i)=gradcorr6(ll,i)+ghalf+ekont*derx(ll,2,1)
6553 gradcorr6(ll,i+1)=gradcorr6(ll,i+1)+ekont*derx(ll,3,1)
6554 gradcorr6(ll,j)=gradcorr6(ll,j)+ghalf+ekont*derx(ll,4,1)
6555 gradcorr6(ll,j1)=gradcorr6(ll,j1)+ekont*derx(ll,5,1)
6556 ghalf=0.5d0*ggg2(ll)
6557 cold ghalf=0.5d0*eel6*eij*gacont_hbr(ll,kk,k)
6559 gradcorr6(ll,k)=gradcorr6(ll,k)+ghalf+ekont*derx(ll,2,2)
6560 gradcorr6(ll,k+1)=gradcorr6(ll,k+1)+ekont*derx(ll,3,2)
6561 gradcorr6(ll,l)=gradcorr6(ll,l)+ghalf+ekont*derx(ll,4,2)
6562 gradcorr6(ll,l1)=gradcorr6(ll,l1)+ekont*derx(ll,5,2)
6567 cold gradcorr6(ll,m)=gradcorr6(ll,m)+eel6*ekl*gacont_hbr(ll,jj,i)
6568 gradcorr6(ll,m)=gradcorr6(ll,m)+ggg1(ll)
6573 cold gradcorr6(ll,m)=gradcorr6(ll,m)+eel6*eij*gacont_hbr(ll,kk,k)
6574 gradcorr6(ll,m)=gradcorr6(ll,m)+ggg2(ll)
6580 gradcorr6(ll,m)=gradcorr6(ll,m)+ekont*derx(ll,1,1)
6585 gradcorr6(ll,m)=gradcorr6(ll,m)+ekont*derx(ll,1,2)
6589 cd write (2,*) iii,g_corr6_loc(iii)
6593 cd write (2,*) 'ekont',ekont
6594 cd write (iout,*) 'eello6',ekont*eel6
6597 c--------------------------------------------------------------------------
6598 double precision function eello6_graph1(i,j,k,l,imat,swap)
6599 implicit real*8 (a-h,o-z)
6600 include 'DIMENSIONS'
6601 include 'DIMENSIONS.ZSCOPT'
6602 include 'COMMON.IOUNITS'
6603 include 'COMMON.CHAIN'
6604 include 'COMMON.DERIV'
6605 include 'COMMON.INTERACT'
6606 include 'COMMON.CONTACTS'
6607 include 'COMMON.TORSION'
6608 include 'COMMON.VAR'
6609 include 'COMMON.GEO'
6610 double precision vv(2),vv1(2),pizda(2,2),auxmat(2,2),pizda1(2,2)
6614 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
6616 C Parallel Antiparallel C
6622 C \ j|/k\| / \ |/k\|l / C
6627 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
6628 itk=itortyp(itype(k))
6629 s1= scalar2(AEAb1(1,2,imat),CUgb2(1,i))
6630 s2=-scalar2(AEAb2(1,1,imat),Ug2Db1t(1,k))
6631 s3= scalar2(AEAb2(1,1,imat),CUgb2(1,k))
6632 call transpose2(EUgC(1,1,k),auxmat(1,1))
6633 call matmat2(AEA(1,1,imat),auxmat(1,1),pizda1(1,1))
6634 vv1(1)=pizda1(1,1)-pizda1(2,2)
6635 vv1(2)=pizda1(1,2)+pizda1(2,1)
6636 s4=0.5d0*scalar2(vv1(1),Dtobr2(1,i))
6637 vv(1)=AEAb1(1,2,imat)*b1(1,itk)-AEAb1(2,2,imat)*b1(2,itk)
6638 vv(2)=AEAb1(1,2,imat)*b1(2,itk)+AEAb1(2,2,imat)*b1(1,itk)
6639 s5=scalar2(vv(1),Dtobr2(1,i))
6640 cd write (2,*) 's1',s1,' s2',s2,' s3',s3,' s4', s4,' s5',s5
6641 eello6_graph1=-0.5d0*(s1+s2+s3+s4+s5)
6642 if (.not. calc_grad) return
6643 if (i.gt.1) g_corr6_loc(i-1)=g_corr6_loc(i-1)
6644 & -0.5d0*ekont*(scalar2(AEAb1(1,2,imat),CUgb2der(1,i))
6645 & -scalar2(AEAb2derg(1,2,1,imat),Ug2Db1t(1,k))
6646 & +scalar2(AEAb2derg(1,2,1,imat),CUgb2(1,k))
6647 & +0.5d0*scalar2(vv1(1),Dtobr2der(1,i))
6648 & +scalar2(vv(1),Dtobr2der(1,i)))
6649 call matmat2(AEAderg(1,1,imat),auxmat(1,1),pizda1(1,1))
6650 vv1(1)=pizda1(1,1)-pizda1(2,2)
6651 vv1(2)=pizda1(1,2)+pizda1(2,1)
6652 vv(1)=AEAb1derg(1,2,imat)*b1(1,itk)-AEAb1derg(2,2,imat)*b1(2,itk)
6653 vv(2)=AEAb1derg(1,2,imat)*b1(2,itk)+AEAb1derg(2,2,imat)*b1(1,itk)
6655 g_corr6_loc(l-1)=g_corr6_loc(l-1)
6656 & +ekont*(-0.5d0*(scalar2(AEAb1derg(1,2,imat),CUgb2(1,i))
6657 & -scalar2(AEAb2derg(1,1,1,imat),Ug2Db1t(1,k))
6658 & +scalar2(AEAb2derg(1,1,1,imat),CUgb2(1,k))
6659 & +0.5d0*scalar2(vv1(1),Dtobr2(1,i))+scalar2(vv(1),Dtobr2(1,i))))
6661 g_corr6_loc(j-1)=g_corr6_loc(j-1)
6662 & +ekont*(-0.5d0*(scalar2(AEAb1derg(1,2,imat),CUgb2(1,i))
6663 & -scalar2(AEAb2derg(1,1,1,imat),Ug2Db1t(1,k))
6664 & +scalar2(AEAb2derg(1,1,1,imat),CUgb2(1,k))
6665 & +0.5d0*scalar2(vv1(1),Dtobr2(1,i))+scalar2(vv(1),Dtobr2(1,i))))
6667 call transpose2(EUgCder(1,1,k),auxmat(1,1))
6668 call matmat2(AEA(1,1,imat),auxmat(1,1),pizda1(1,1))
6669 vv1(1)=pizda1(1,1)-pizda1(2,2)
6670 vv1(2)=pizda1(1,2)+pizda1(2,1)
6671 if (k.gt.1) g_corr6_loc(k-1)=g_corr6_loc(k-1)
6672 & +ekont*(-0.5d0*(-scalar2(AEAb2(1,1,imat),Ug2Db1tder(1,k))
6673 & +scalar2(AEAb2(1,1,imat),CUgb2der(1,k))
6674 & +0.5d0*scalar2(vv1(1),Dtobr2(1,i))))
6683 s1= scalar2(AEAb1derx(1,lll,kkk,iii,2,imat),CUgb2(1,i))
6684 s2=-scalar2(AEAb2derx(1,lll,kkk,iii,1,imat),Ug2Db1t(1,k))
6685 s3= scalar2(AEAb2derx(1,lll,kkk,iii,1,imat),CUgb2(1,k))
6686 call transpose2(EUgC(1,1,k),auxmat(1,1))
6687 call matmat2(AEAderx(1,1,lll,kkk,iii,imat),auxmat(1,1),
6689 vv1(1)=pizda1(1,1)-pizda1(2,2)
6690 vv1(2)=pizda1(1,2)+pizda1(2,1)
6691 s4=0.5d0*scalar2(vv1(1),Dtobr2(1,i))
6692 vv(1)=AEAb1derx(1,lll,kkk,iii,2,imat)*b1(1,itk)
6693 & -AEAb1derx(2,lll,kkk,iii,2,imat)*b1(2,itk)
6694 vv(2)=AEAb1derx(1,lll,kkk,iii,2,imat)*b1(2,itk)
6695 & +AEAb1derx(2,lll,kkk,iii,2,imat)*b1(1,itk)
6696 s5=scalar2(vv(1),Dtobr2(1,i))
6697 derx(lll,kkk,ind)=derx(lll,kkk,ind)-0.5d0*(s1+s2+s3+s4+s5)
6703 c----------------------------------------------------------------------------
6704 double precision function eello6_graph2(i,j,k,l,jj,kk,swap)
6705 implicit real*8 (a-h,o-z)
6706 include 'DIMENSIONS'
6707 include 'DIMENSIONS.ZSCOPT'
6708 include 'COMMON.IOUNITS'
6709 include 'COMMON.CHAIN'
6710 include 'COMMON.DERIV'
6711 include 'COMMON.INTERACT'
6712 include 'COMMON.CONTACTS'
6713 include 'COMMON.TORSION'
6714 include 'COMMON.VAR'
6715 include 'COMMON.GEO'
6717 double precision vv(2),pizda(2,2),auxmat(2,2),auxvec(2),
6718 & auxvec1(2),auxvec2(2),auxmat1(2,2)
6721 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
6723 C Parallel Antiparallel C
6729 C \ j|/k\| \ |/k\|l C
6734 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
6735 cd write (2,*) 'eello6_graph2: i,',i,' j',j,' k',k,' l',l
6736 C AL 7/4/01 s1 would occur in the sixth-order moment,
6737 C but not in a cluster cumulant
6739 s1=dip(1,jj,i)*dip(1,kk,k)
6741 call matvec2(ADtEA1(1,1,1),Ub2(1,k),auxvec(1))
6742 s2=-0.5d0*scalar2(Ub2(1,i),auxvec(1))
6743 call matvec2(ADtEA(1,1,2),Ub2(1,l),auxvec1(1))
6744 s3=-0.5d0*scalar2(Ub2(1,j),auxvec1(1))
6745 call transpose2(EUg(1,1,k),auxmat(1,1))
6746 call matmat2(ADtEA1(1,1,1),auxmat(1,1),pizda(1,1))
6747 vv(1)=pizda(1,1)-pizda(2,2)
6748 vv(2)=pizda(1,2)+pizda(2,1)
6749 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
6750 cd write (2,*) 'eello6_graph2:','s1',s1,' s2',s2,' s3',s3,' s4',s4
6752 eello6_graph2=-(s1+s2+s3+s4)
6754 eello6_graph2=-(s2+s3+s4)
6757 if (.not. calc_grad) return
6758 C Derivatives in gamma(i-1)
6761 s1=dipderg(1,jj,i)*dip(1,kk,k)
6763 s2=-0.5d0*scalar2(Ub2der(1,i),auxvec(1))
6764 call matvec2(ADtEAderg(1,1,1,2),Ub2(1,l),auxvec2(1))
6765 s3=-0.5d0*scalar2(Ub2(1,j),auxvec2(1))
6766 s4=-0.25d0*scalar2(vv(1),Dtobr2der(1,i))
6768 g_corr6_loc(i-1)=g_corr6_loc(i-1)-ekont*(s1+s2+s3+s4)
6770 g_corr6_loc(i-1)=g_corr6_loc(i-1)-ekont*(s2+s3+s4)
6772 c g_corr6_loc(i-1)=g_corr6_loc(i-1)-s3
6774 C Derivatives in gamma(k-1)
6776 s1=dip(1,jj,i)*dipderg(1,kk,k)
6778 call matvec2(ADtEA1(1,1,1),Ub2der(1,k),auxvec2(1))
6779 s2=-0.5d0*scalar2(Ub2(1,i),auxvec2(1))
6780 call matvec2(ADtEAderg(1,1,2,2),Ub2(1,l),auxvec2(1))
6781 s3=-0.5d0*scalar2(Ub2(1,j),auxvec2(1))
6782 call transpose2(EUgder(1,1,k),auxmat1(1,1))
6783 call matmat2(ADtEA1(1,1,1),auxmat1(1,1),pizda(1,1))
6784 vv(1)=pizda(1,1)-pizda(2,2)
6785 vv(2)=pizda(1,2)+pizda(2,1)
6786 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
6788 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s1+s2+s3+s4)
6790 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s2+s3+s4)
6792 c g_corr6_loc(k-1)=g_corr6_loc(k-1)-s3
6793 C Derivatives in gamma(j-1) or gamma(l-1)
6796 s1=dipderg(3,jj,i)*dip(1,kk,k)
6798 call matvec2(ADtEA1derg(1,1,1,1),Ub2(1,k),auxvec2(1))
6799 s2=-0.5d0*scalar2(Ub2(1,i),auxvec2(1))
6800 s3=-0.5d0*scalar2(Ub2der(1,j),auxvec1(1))
6801 call matmat2(ADtEA1derg(1,1,1,1),auxmat(1,1),pizda(1,1))
6802 vv(1)=pizda(1,1)-pizda(2,2)
6803 vv(2)=pizda(1,2)+pizda(2,1)
6804 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
6807 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*s1
6809 g_corr6_loc(j-1)=g_corr6_loc(j-1)-ekont*s1
6812 g_corr6_loc(j-1)=g_corr6_loc(j-1)-ekont*(s2+s3+s4)
6813 c g_corr6_loc(j-1)=g_corr6_loc(j-1)-s3
6815 C Derivatives in gamma(l-1) or gamma(j-1)
6818 s1=dip(1,jj,i)*dipderg(3,kk,k)
6820 call matvec2(ADtEA1derg(1,1,2,1),Ub2(1,k),auxvec2(1))
6821 s2=-0.5d0*scalar2(Ub2(1,i),auxvec2(1))
6822 call matvec2(ADtEA(1,1,2),Ub2der(1,l),auxvec2(1))
6823 s3=-0.5d0*scalar2(Ub2(1,j),auxvec2(1))
6824 call matmat2(ADtEA1derg(1,1,2,1),auxmat(1,1),pizda(1,1))
6825 vv(1)=pizda(1,1)-pizda(2,2)
6826 vv(2)=pizda(1,2)+pizda(2,1)
6827 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
6830 g_corr6_loc(j-1)=g_corr6_loc(j-1)-ekont*s1
6832 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*s1
6835 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*(s2+s3+s4)
6836 c g_corr6_loc(l-1)=g_corr6_loc(l-1)-s3
6838 C Cartesian derivatives.
6840 write (2,*) 'In eello6_graph2'
6842 write (2,*) 'iii=',iii
6844 write (2,*) 'kkk=',kkk
6846 write (2,'(3(2f10.5),5x)')
6847 & ((ADtEA1derx(jjj,mmm,lll,kkk,iii,1),mmm=1,2),lll=1,3)
6857 s1=dipderx(lll,kkk,1,jj,i)*dip(1,kk,k)
6859 s1=dip(1,jj,i)*dipderx(lll,kkk,1,kk,k)
6862 call matvec2(ADtEA1derx(1,1,lll,kkk,iii,1),Ub2(1,k),
6864 s2=-0.5d0*scalar2(Ub2(1,i),auxvec(1))
6865 call matvec2(ADtEAderx(1,1,lll,kkk,iii,2),Ub2(1,l),
6867 s3=-0.5d0*scalar2(Ub2(1,j),auxvec(1))
6868 call transpose2(EUg(1,1,k),auxmat(1,1))
6869 call matmat2(ADtEA1derx(1,1,lll,kkk,iii,1),auxmat(1,1),
6871 vv(1)=pizda(1,1)-pizda(2,2)
6872 vv(2)=pizda(1,2)+pizda(2,1)
6873 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
6874 cd write (2,*) 's1',s1,' s2',s2,' s3',s3,' s4',s4
6876 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s1+s2+s4)
6878 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s2+s4)
6881 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-s3
6883 derx(lll,kkk,iii)=derx(lll,kkk,iii)-s3
6890 c----------------------------------------------------------------------------
6891 double precision function eello6_graph3(i,j,k,l,jj,kk,swap)
6892 implicit real*8 (a-h,o-z)
6893 include 'DIMENSIONS'
6894 include 'DIMENSIONS.ZSCOPT'
6895 include 'COMMON.IOUNITS'
6896 include 'COMMON.CHAIN'
6897 include 'COMMON.DERIV'
6898 include 'COMMON.INTERACT'
6899 include 'COMMON.CONTACTS'
6900 include 'COMMON.TORSION'
6901 include 'COMMON.VAR'
6902 include 'COMMON.GEO'
6903 double precision vv(2),pizda(2,2),auxmat(2,2),auxvec(2)
6905 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
6907 C Parallel Antiparallel C
6913 C j|/k\| / |/k\|l / C
6918 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
6920 C 4/7/01 AL Component s1 was removed, because it pertains to the respective
6921 C energy moment and not to the cluster cumulant.
6922 iti=itortyp(itype(i))
6923 if (j.lt.nres-1) then
6924 itj1=itortyp(itype(j+1))
6928 itk=itortyp(itype(k))
6929 itk1=itortyp(itype(k+1))
6930 if (l.lt.nres-1) then
6931 itl1=itortyp(itype(l+1))
6936 s1=dip(4,jj,i)*dip(4,kk,k)
6938 call matvec2(AECA(1,1,1),b1(1,itk1),auxvec(1))
6939 s2=0.5d0*scalar2(b1(1,itk),auxvec(1))
6940 call matvec2(AECA(1,1,2),b1(1,itl1),auxvec(1))
6941 s3=0.5d0*scalar2(b1(1,itj1),auxvec(1))
6942 call transpose2(EE(1,1,itk),auxmat(1,1))
6943 call matmat2(auxmat(1,1),AECA(1,1,1),pizda(1,1))
6944 vv(1)=pizda(1,1)+pizda(2,2)
6945 vv(2)=pizda(2,1)-pizda(1,2)
6946 s4=-0.25d0*scalar2(vv(1),Ctobr(1,k))
6947 cd write (2,*) 'eello6_graph3:','s1',s1,' s2',s2,' s3',s3,' s4',s4
6949 eello6_graph3=-(s1+s2+s3+s4)
6951 eello6_graph3=-(s2+s3+s4)
6954 if (.not. calc_grad) return
6955 C Derivatives in gamma(k-1)
6956 call matvec2(AECAderg(1,1,2),b1(1,itl1),auxvec(1))
6957 s3=0.5d0*scalar2(b1(1,itj1),auxvec(1))
6958 s4=-0.25d0*scalar2(vv(1),Ctobrder(1,k))
6959 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s3+s4)
6960 C Derivatives in gamma(l-1)
6961 call matvec2(AECAderg(1,1,1),b1(1,itk1),auxvec(1))
6962 s2=0.5d0*scalar2(b1(1,itk),auxvec(1))
6963 call matmat2(auxmat(1,1),AECAderg(1,1,1),pizda(1,1))
6964 vv(1)=pizda(1,1)+pizda(2,2)
6965 vv(2)=pizda(2,1)-pizda(1,2)
6966 s4=-0.25d0*scalar2(vv(1),Ctobr(1,k))
6967 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*(s2+s4)
6968 C Cartesian derivatives.
6974 s1=dipderx(lll,kkk,4,jj,i)*dip(4,kk,k)
6976 s1=dip(4,jj,i)*dipderx(lll,kkk,4,kk,k)
6979 call matvec2(AECAderx(1,1,lll,kkk,iii,1),b1(1,itk1),
6981 s2=0.5d0*scalar2(b1(1,itk),auxvec(1))
6982 call matvec2(AECAderx(1,1,lll,kkk,iii,2),b1(1,itl1),
6984 s3=0.5d0*scalar2(b1(1,itj1),auxvec(1))
6985 call matmat2(auxmat(1,1),AECAderx(1,1,lll,kkk,iii,1),
6987 vv(1)=pizda(1,1)+pizda(2,2)
6988 vv(2)=pizda(2,1)-pizda(1,2)
6989 s4=-0.25d0*scalar2(vv(1),Ctobr(1,k))
6991 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s1+s2+s4)
6993 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s2+s4)
6996 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-s3
6998 derx(lll,kkk,iii)=derx(lll,kkk,iii)-s3
7000 c derx(lll,kkk,iii)=derx(lll,kkk,iii)-s4
7006 c----------------------------------------------------------------------------
7007 double precision function eello6_graph4(i,j,k,l,jj,kk,imat,swap)
7008 implicit real*8 (a-h,o-z)
7009 include 'DIMENSIONS'
7010 include 'DIMENSIONS.ZSCOPT'
7011 include 'COMMON.IOUNITS'
7012 include 'COMMON.CHAIN'
7013 include 'COMMON.DERIV'
7014 include 'COMMON.INTERACT'
7015 include 'COMMON.CONTACTS'
7016 include 'COMMON.TORSION'
7017 include 'COMMON.VAR'
7018 include 'COMMON.GEO'
7019 include 'COMMON.FFIELD'
7020 double precision vv(2),pizda(2,2),auxmat(2,2),auxvec(2),
7021 & auxvec1(2),auxmat1(2,2)
7023 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
7025 C Parallel Antiparallel C
7031 C \ j|/k\| \ |/k\|l C
7036 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
7038 C 4/7/01 AL Component s1 was removed, because it pertains to the respective
7039 C energy moment and not to the cluster cumulant.
7040 cd write (2,*) 'eello_graph4: wturn6',wturn6
7041 iti=itortyp(itype(i))
7042 itj=itortyp(itype(j))
7043 if (j.lt.nres-1) then
7044 itj1=itortyp(itype(j+1))
7048 itk=itortyp(itype(k))
7049 if (k.lt.nres-1) then
7050 itk1=itortyp(itype(k+1))
7054 itl=itortyp(itype(l))
7055 if (l.lt.nres-1) then
7056 itl1=itortyp(itype(l+1))
7060 cd write (2,*) 'eello6_graph4:','i',i,' j',j,' k',k,' l',l
7061 cd write (2,*) 'iti',iti,' itj',itj,' itj1',itj1,' itk',itk,
7062 cd & ' itl',itl,' itl1',itl1
7065 s1=dip(3,jj,i)*dip(3,kk,k)
7067 s1=dip(2,jj,j)*dip(2,kk,l)
7070 call matvec2(AECA(1,1,imat),Ub2(1,k),auxvec(1))
7071 s2=0.5d0*scalar2(Ub2(1,i),auxvec(1))
7073 call matvec2(ADtEA1(1,1,3-imat),b1(1,itj1),auxvec1(1))
7074 s3=-0.5d0*scalar2(b1(1,itj),auxvec1(1))
7076 call matvec2(ADtEA1(1,1,3-imat),b1(1,itl1),auxvec1(1))
7077 s3=-0.5d0*scalar2(b1(1,itl),auxvec1(1))
7079 call transpose2(EUg(1,1,k),auxmat(1,1))
7080 call matmat2(AECA(1,1,imat),auxmat(1,1),pizda(1,1))
7081 vv(1)=pizda(1,1)-pizda(2,2)
7082 vv(2)=pizda(2,1)+pizda(1,2)
7083 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
7084 cd write (2,*) 'eello6_graph4:','s1',s1,' s2',s2,' s3',s3,' s4',s4
7086 eello6_graph4=-(s1+s2+s3+s4)
7088 eello6_graph4=-(s2+s3+s4)
7090 if (.not. calc_grad) return
7091 C Derivatives in gamma(i-1)
7095 s1=dipderg(2,jj,i)*dip(3,kk,k)
7097 s1=dipderg(4,jj,j)*dip(2,kk,l)
7100 s2=0.5d0*scalar2(Ub2der(1,i),auxvec(1))
7102 call matvec2(ADtEA1derg(1,1,1,3-imat),b1(1,itj1),auxvec1(1))
7103 s3=-0.5d0*scalar2(b1(1,itj),auxvec1(1))
7105 call matvec2(ADtEA1derg(1,1,1,3-imat),b1(1,itl1),auxvec1(1))
7106 s3=-0.5d0*scalar2(b1(1,itl),auxvec1(1))
7108 s4=0.25d0*scalar2(vv(1),Dtobr2der(1,i))
7109 if (wturn6.gt.0.0d0 .and. k.eq.l+4 .and. i.eq.j+2) then
7110 cd write (2,*) 'turn6 derivatives'
7112 gel_loc_turn6(i-1)=gel_loc_turn6(i-1)-ekont*(s1+s2+s3+s4)
7114 gel_loc_turn6(i-1)=gel_loc_turn6(i-1)-ekont*(s2+s3+s4)
7118 g_corr6_loc(i-1)=g_corr6_loc(i-1)-ekont*(s1+s2+s3+s4)
7120 g_corr6_loc(i-1)=g_corr6_loc(i-1)-ekont*(s2+s3+s4)
7124 C Derivatives in gamma(k-1)
7127 s1=dip(3,jj,i)*dipderg(2,kk,k)
7129 s1=dip(2,jj,j)*dipderg(4,kk,l)
7132 call matvec2(AECA(1,1,imat),Ub2der(1,k),auxvec1(1))
7133 s2=0.5d0*scalar2(Ub2(1,i),auxvec1(1))
7135 call matvec2(ADtEA1derg(1,1,2,3-imat),b1(1,itj1),auxvec1(1))
7136 s3=-0.5d0*scalar2(b1(1,itj),auxvec1(1))
7138 call matvec2(ADtEA1derg(1,1,2,3-imat),b1(1,itl1),auxvec1(1))
7139 s3=-0.5d0*scalar2(b1(1,itl),auxvec1(1))
7141 call transpose2(EUgder(1,1,k),auxmat1(1,1))
7142 call matmat2(AECA(1,1,imat),auxmat1(1,1),pizda(1,1))
7143 vv(1)=pizda(1,1)-pizda(2,2)
7144 vv(2)=pizda(2,1)+pizda(1,2)
7145 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
7146 if (wturn6.gt.0.0d0 .and. k.eq.l+4 .and. i.eq.j+2) then
7148 gel_loc_turn6(k-1)=gel_loc_turn6(k-1)-ekont*(s1+s2+s3+s4)
7150 gel_loc_turn6(k-1)=gel_loc_turn6(k-1)-ekont*(s2+s3+s4)
7154 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s1+s2+s3+s4)
7156 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s2+s3+s4)
7159 C Derivatives in gamma(j-1) or gamma(l-1)
7160 if (l.eq.j+1 .and. l.gt.1) then
7161 call matvec2(AECAderg(1,1,imat),Ub2(1,k),auxvec(1))
7162 s2=0.5d0*scalar2(Ub2(1,i),auxvec(1))
7163 call matmat2(AECAderg(1,1,imat),auxmat(1,1),pizda(1,1))
7164 vv(1)=pizda(1,1)-pizda(2,2)
7165 vv(2)=pizda(2,1)+pizda(1,2)
7166 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
7167 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*(s2+s4)
7168 else if (j.gt.1) then
7169 call matvec2(AECAderg(1,1,imat),Ub2(1,k),auxvec(1))
7170 s2=0.5d0*scalar2(Ub2(1,i),auxvec(1))
7171 call matmat2(AECAderg(1,1,imat),auxmat(1,1),pizda(1,1))
7172 vv(1)=pizda(1,1)-pizda(2,2)
7173 vv(2)=pizda(2,1)+pizda(1,2)
7174 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
7175 if (wturn6.gt.0.0d0 .and. k.eq.l+4 .and. i.eq.j+2) then
7176 gel_loc_turn6(j-1)=gel_loc_turn6(j-1)-ekont*(s2+s4)
7178 g_corr6_loc(j-1)=g_corr6_loc(j-1)-ekont*(s2+s4)
7181 C Cartesian derivatives.
7188 s1=dipderx(lll,kkk,3,jj,i)*dip(3,kk,k)
7190 s1=dipderx(lll,kkk,2,jj,j)*dip(2,kk,l)
7194 s1=dip(3,jj,i)*dipderx(lll,kkk,3,kk,k)
7196 s1=dip(2,jj,j)*dipderx(lll,kkk,2,kk,l)
7200 call matvec2(AECAderx(1,1,lll,kkk,iii,imat),Ub2(1,k),
7202 s2=0.5d0*scalar2(Ub2(1,i),auxvec(1))
7204 call matvec2(ADtEA1derx(1,1,lll,kkk,iii,3-imat),
7205 & b1(1,itj1),auxvec(1))
7206 s3=-0.5d0*scalar2(b1(1,itj),auxvec(1))
7208 call matvec2(ADtEA1derx(1,1,lll,kkk,iii,3-imat),
7209 & b1(1,itl1),auxvec(1))
7210 s3=-0.5d0*scalar2(b1(1,itl),auxvec(1))
7212 call matmat2(AECAderx(1,1,lll,kkk,iii,imat),auxmat(1,1),
7214 vv(1)=pizda(1,1)-pizda(2,2)
7215 vv(2)=pizda(2,1)+pizda(1,2)
7216 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
7218 if (wturn6.gt.0.0d0 .and. k.eq.l+4 .and. i.eq.j+2) then
7220 derx_turn(lll,kkk,3-iii)=derx_turn(lll,kkk,3-iii)
7223 derx_turn(lll,kkk,3-iii)=derx_turn(lll,kkk,3-iii)
7226 derx_turn(lll,kkk,iii)=derx_turn(lll,kkk,iii)-s3
7229 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-(s1+s2+s4)
7231 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-(s2+s4)
7233 derx(lll,kkk,iii)=derx(lll,kkk,iii)-s3
7237 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s1+s2+s4)
7239 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s2+s4)
7242 derx(lll,kkk,iii)=derx(lll,kkk,iii)-s3
7244 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-s3
7252 c----------------------------------------------------------------------------
7253 double precision function eello_turn6(i,jj,kk)
7254 implicit real*8 (a-h,o-z)
7255 include 'DIMENSIONS'
7256 include 'DIMENSIONS.ZSCOPT'
7257 include 'COMMON.IOUNITS'
7258 include 'COMMON.CHAIN'
7259 include 'COMMON.DERIV'
7260 include 'COMMON.INTERACT'
7261 include 'COMMON.CONTACTS'
7262 include 'COMMON.TORSION'
7263 include 'COMMON.VAR'
7264 include 'COMMON.GEO'
7265 double precision vtemp1(2),vtemp2(2),vtemp3(2),vtemp4(2),
7266 & atemp(2,2),auxmat(2,2),achuj_temp(2,2),gtemp(2,2),gvec(2),
7268 double precision vtemp1d(2),vtemp2d(2),vtemp3d(2),vtemp4d(2),
7269 & atempd(2,2),auxmatd(2,2),achuj_tempd(2,2),gtempd(2,2),gvecd(2)
7270 C 4/7/01 AL Components s1, s8, and s13 were removed, because they pertain to
7271 C the respective energy moment and not to the cluster cumulant.
7276 iti=itortyp(itype(i))
7277 itk=itortyp(itype(k))
7278 itk1=itortyp(itype(k+1))
7279 itl=itortyp(itype(l))
7280 itj=itortyp(itype(j))
7281 cd write (2,*) 'itk',itk,' itk1',itk1,' itl',itl,' itj',itj
7282 cd write (2,*) 'i',i,' k',k,' j',j,' l',l
7283 cd if (i.ne.1 .or. j.ne.3 .or. k.ne.2 .or. l.ne.4) then
7288 cd & 'EELLO6: Contacts have occurred for peptide groups',i,j,
7290 cd call checkint_turn6(i,jj,kk,eel_turn6_num)
7294 derx_turn(lll,kkk,iii)=0.0d0
7301 eello6_5=eello6_graph4(l,k,j,i,kk,jj,2,.true.)
7303 cd write (2,*) 'eello6_5',eello6_5
7305 call transpose2(AEA(1,1,1),auxmat(1,1))
7306 call matmat2(EUg(1,1,i+1),auxmat(1,1),auxmat(1,1))
7307 ss1=scalar2(Ub2(1,i+2),b1(1,itl))
7308 s1 = (auxmat(1,1)+auxmat(2,2))*ss1
7312 call matvec2(EUg(1,1,i+2),b1(1,itl),vtemp1(1))
7313 call matvec2(AEA(1,1,1),vtemp1(1),vtemp1(1))
7314 s2 = scalar2(b1(1,itk),vtemp1(1))
7316 call transpose2(AEA(1,1,2),atemp(1,1))
7317 call matmat2(atemp(1,1),EUg(1,1,i+4),atemp(1,1))
7318 call matvec2(Ug2(1,1,i+2),dd(1,1,itk1),vtemp2(1))
7319 s8 = -(atemp(1,1)+atemp(2,2))*scalar2(cc(1,1,itl),vtemp2(1))
7323 call matmat2(EUg(1,1,i+3),AEA(1,1,2),auxmat(1,1))
7324 call matvec2(auxmat(1,1),Ub2(1,i+4),vtemp3(1))
7325 s12 = scalar2(Ub2(1,i+2),vtemp3(1))
7327 call transpose2(a_chuj(1,1,kk,i+1),achuj_temp(1,1))
7328 call matmat2(achuj_temp(1,1),EUg(1,1,i+2),gtemp(1,1))
7329 call matmat2(gtemp(1,1),EUg(1,1,i+3),gtemp(1,1))
7330 call matvec2(a_chuj(1,1,jj,i),Ub2(1,i+4),vtemp4(1))
7331 ss13 = scalar2(b1(1,itk),vtemp4(1))
7332 s13 = (gtemp(1,1)+gtemp(2,2))*ss13
7336 c write (2,*) 's1,s2,s8,s12,s13',s1,s2,s8,s12,s13
7342 eel_turn6 = eello6_5 - 0.5d0*(s1+s2+s12+s8+s13)
7344 C Derivatives in gamma(i+2)
7346 call transpose2(AEA(1,1,1),auxmatd(1,1))
7347 call matmat2(EUgder(1,1,i+1),auxmatd(1,1),auxmatd(1,1))
7348 s1d = (auxmatd(1,1)+auxmatd(2,2))*ss1
7349 call transpose2(AEAderg(1,1,2),atempd(1,1))
7350 call matmat2(atempd(1,1),EUg(1,1,i+4),atempd(1,1))
7351 s8d = -(atempd(1,1)+atempd(2,2))*scalar2(cc(1,1,itl),vtemp2(1))
7355 call matmat2(EUg(1,1,i+3),AEAderg(1,1,2),auxmatd(1,1))
7356 call matvec2(auxmatd(1,1),Ub2(1,i+4),vtemp3d(1))
7357 s12d = scalar2(Ub2(1,i+2),vtemp3d(1))
7363 gel_loc_turn6(i)=gel_loc_turn6(i)-0.5d0*ekont*(s1d+s8d+s12d)
7364 C Derivatives in gamma(i+3)
7366 call transpose2(AEA(1,1,1),auxmatd(1,1))
7367 call matmat2(EUg(1,1,i+1),auxmatd(1,1),auxmatd(1,1))
7368 ss1d=scalar2(Ub2der(1,i+2),b1(1,itl))
7369 s1d = (auxmatd(1,1)+auxmatd(2,2))*ss1d
7373 call matvec2(EUgder(1,1,i+2),b1(1,itl),vtemp1d(1))
7374 call matvec2(AEA(1,1,1),vtemp1d(1),vtemp1d(1))
7375 s2d = scalar2(b1(1,itk),vtemp1d(1))
7377 call matvec2(Ug2der(1,1,i+2),dd(1,1,itk1),vtemp2d(1))
7378 s8d = -(atemp(1,1)+atemp(2,2))*scalar2(cc(1,1,itl),vtemp2d(1))
7380 s12d = scalar2(Ub2der(1,i+2),vtemp3(1))
7382 call matmat2(achuj_temp(1,1),EUgder(1,1,i+2),gtempd(1,1))
7383 call matmat2(gtempd(1,1),EUg(1,1,i+3),gtempd(1,1))
7384 s13d = (gtempd(1,1)+gtempd(2,2))*ss13
7394 gel_loc_turn6(i+1)=gel_loc_turn6(i+1)
7395 & -0.5d0*ekont*(s1d+s2d+s8d+s12d+s13d)
7397 gel_loc_turn6(i+1)=gel_loc_turn6(i+1)
7398 & -0.5d0*ekont*(s2d+s12d)
7400 C Derivatives in gamma(i+4)
7401 call matmat2(EUgder(1,1,i+3),AEA(1,1,2),auxmatd(1,1))
7402 call matvec2(auxmatd(1,1),Ub2(1,i+4),vtemp3d(1))
7403 s12d = scalar2(Ub2(1,i+2),vtemp3d(1))
7405 call matmat2(achuj_temp(1,1),EUg(1,1,i+2),gtempd(1,1))
7406 call matmat2(gtempd(1,1),EUgder(1,1,i+3),gtempd(1,1))
7407 s13d = (gtempd(1,1)+gtempd(2,2))*ss13
7417 gel_loc_turn6(i+2)=gel_loc_turn6(i+2)-0.5d0*ekont*(s12d+s13d)
7419 gel_loc_turn6(i+2)=gel_loc_turn6(i+2)-0.5d0*ekont*(s12d)
7421 C Derivatives in gamma(i+5)
7423 call transpose2(AEAderg(1,1,1),auxmatd(1,1))
7424 call matmat2(EUg(1,1,i+1),auxmatd(1,1),auxmatd(1,1))
7425 s1d = (auxmatd(1,1)+auxmatd(2,2))*ss1
7429 call matvec2(EUg(1,1,i+2),b1(1,itl),vtemp1d(1))
7430 call matvec2(AEAderg(1,1,1),vtemp1d(1),vtemp1d(1))
7431 s2d = scalar2(b1(1,itk),vtemp1d(1))
7433 call transpose2(AEA(1,1,2),atempd(1,1))
7434 call matmat2(atempd(1,1),EUgder(1,1,i+4),atempd(1,1))
7435 s8d = -(atempd(1,1)+atempd(2,2))*scalar2(cc(1,1,itl),vtemp2(1))
7439 call matvec2(auxmat(1,1),Ub2der(1,i+4),vtemp3d(1))
7440 s12d = scalar2(Ub2(1,i+2),vtemp3d(1))
7442 call matvec2(a_chuj(1,1,jj,i),Ub2der(1,i+4),vtemp4d(1))
7443 ss13d = scalar2(b1(1,itk),vtemp4d(1))
7444 s13d = (gtemp(1,1)+gtemp(2,2))*ss13d
7454 gel_loc_turn6(i+3)=gel_loc_turn6(i+3)
7455 & -0.5d0*ekont*(s1d+s2d+s8d+s12d+s13d)
7457 gel_loc_turn6(i+3)=gel_loc_turn6(i+3)
7458 & -0.5d0*ekont*(s2d+s12d)
7460 C Cartesian derivatives
7465 call transpose2(AEAderx(1,1,lll,kkk,iii,1),auxmatd(1,1))
7466 call matmat2(EUg(1,1,i+1),auxmatd(1,1),auxmatd(1,1))
7467 s1d = (auxmatd(1,1)+auxmatd(2,2))*ss1
7471 call matvec2(EUg(1,1,i+2),b1(1,itl),vtemp1(1))
7472 call matvec2(AEAderx(1,1,lll,kkk,iii,1),vtemp1(1),
7474 s2d = scalar2(b1(1,itk),vtemp1d(1))
7476 call transpose2(AEAderx(1,1,lll,kkk,iii,2),atempd(1,1))
7477 call matmat2(atempd(1,1),EUg(1,1,i+4),atempd(1,1))
7478 s8d = -(atempd(1,1)+atempd(2,2))*
7479 & scalar2(cc(1,1,itl),vtemp2(1))
7483 call matmat2(EUg(1,1,i+3),AEAderx(1,1,lll,kkk,iii,2),
7485 call matvec2(auxmatd(1,1),Ub2(1,i+4),vtemp3d(1))
7486 s12d = scalar2(Ub2(1,i+2),vtemp3d(1))
7493 derx_turn(lll,kkk,iii) = derx_turn(lll,kkk,iii)
7496 derx_turn(lll,kkk,iii) = derx_turn(lll,kkk,iii)
7500 derx_turn(lll,kkk,3-iii) = derx_turn(lll,kkk,3-iii)
7501 & - 0.5d0*(s8d+s12d)
7503 derx_turn(lll,kkk,3-iii) = derx_turn(lll,kkk,3-iii)
7512 call transpose2(a_chuj_der(1,1,lll,kkk,kk,i+1),
7514 call matmat2(achuj_tempd(1,1),EUg(1,1,i+2),gtempd(1,1))
7515 call matmat2(gtempd(1,1),EUg(1,1,i+3),gtempd(1,1))
7516 s13d=(gtempd(1,1)+gtempd(2,2))*ss13
7517 derx_turn(lll,kkk,2) = derx_turn(lll,kkk,2)-0.5d0*s13d
7518 call matvec2(a_chuj_der(1,1,lll,kkk,jj,i),Ub2(1,i+4),
7520 ss13d = scalar2(b1(1,itk),vtemp4d(1))
7521 s13d = (gtemp(1,1)+gtemp(2,2))*ss13d
7522 derx_turn(lll,kkk,1) = derx_turn(lll,kkk,1)-0.5d0*s13d
7526 cd write(iout,*) 'eel6_turn6',eel_turn6,' eel_turn6_num',
7527 cd & 16*eel_turn6_num
7529 if (j.lt.nres-1) then
7536 if (l.lt.nres-1) then
7544 ggg1(ll)=eel_turn6*g_contij(ll,1)
7545 ggg2(ll)=eel_turn6*g_contij(ll,2)
7546 ghalf=0.5d0*ggg1(ll)
7548 gcorr6_turn(ll,i)=gcorr6_turn(ll,i)+ghalf
7549 & +ekont*derx_turn(ll,2,1)
7550 gcorr6_turn(ll,i+1)=gcorr6_turn(ll,i+1)+ekont*derx_turn(ll,3,1)
7551 gcorr6_turn(ll,j)=gcorr6_turn(ll,j)+ghalf
7552 & +ekont*derx_turn(ll,4,1)
7553 gcorr6_turn(ll,j1)=gcorr6_turn(ll,j1)+ekont*derx_turn(ll,5,1)
7554 ghalf=0.5d0*ggg2(ll)
7556 gcorr6_turn(ll,k)=gcorr6_turn(ll,k)+ghalf
7557 & +ekont*derx_turn(ll,2,2)
7558 gcorr6_turn(ll,k+1)=gcorr6_turn(ll,k+1)+ekont*derx_turn(ll,3,2)
7559 gcorr6_turn(ll,l)=gcorr6_turn(ll,l)+ghalf
7560 & +ekont*derx_turn(ll,4,2)
7561 gcorr6_turn(ll,l1)=gcorr6_turn(ll,l1)+ekont*derx_turn(ll,5,2)
7566 gcorr6_turn(ll,m)=gcorr6_turn(ll,m)+ggg1(ll)
7571 gcorr6_turn(ll,m)=gcorr6_turn(ll,m)+ggg2(ll)
7577 gcorr6_turn(ll,m)=gcorr6_turn(ll,m)+ekont*derx_turn(ll,1,1)
7582 gcorr6_turn(ll,m)=gcorr6_turn(ll,m)+ekont*derx_turn(ll,1,2)
7586 cd write (2,*) iii,g_corr6_loc(iii)
7589 eello_turn6=ekont*eel_turn6
7590 cd write (2,*) 'ekont',ekont
7591 cd write (2,*) 'eel_turn6',ekont*eel_turn6
7594 crc-------------------------------------------------
7595 SUBROUTINE MATVEC2(A1,V1,V2)
7596 implicit real*8 (a-h,o-z)
7597 include 'DIMENSIONS'
7598 DIMENSION A1(2,2),V1(2),V2(2)
7602 c 3 VI=VI+A1(I,K)*V1(K)
7606 vaux1=a1(1,1)*v1(1)+a1(1,2)*v1(2)
7607 vaux2=a1(2,1)*v1(1)+a1(2,2)*v1(2)
7612 C---------------------------------------
7613 SUBROUTINE MATMAT2(A1,A2,A3)
7614 implicit real*8 (a-h,o-z)
7615 include 'DIMENSIONS'
7616 DIMENSION A1(2,2),A2(2,2),A3(2,2)
7617 c DIMENSION AI3(2,2)
7621 c A3IJ=A3IJ+A1(I,K)*A2(K,J)
7627 ai3_11=a1(1,1)*a2(1,1)+a1(1,2)*a2(2,1)
7628 ai3_12=a1(1,1)*a2(1,2)+a1(1,2)*a2(2,2)
7629 ai3_21=a1(2,1)*a2(1,1)+a1(2,2)*a2(2,1)
7630 ai3_22=a1(2,1)*a2(1,2)+a1(2,2)*a2(2,2)
7638 c-------------------------------------------------------------------------
7639 double precision function scalar2(u,v)
7641 double precision u(2),v(2)
7644 scalar2=u(1)*v(1)+u(2)*v(2)
7648 C-----------------------------------------------------------------------------
7650 subroutine transpose2(a,at)
7652 double precision a(2,2),at(2,2)
7659 c--------------------------------------------------------------------------
7660 subroutine transpose(n,a,at)
7663 double precision a(n,n),at(n,n)
7671 C---------------------------------------------------------------------------
7672 subroutine prodmat3(a1,a2,kk,transp,prod)
7675 double precision a1(2,2),a2(2,2),a2t(2,2),kk(2,2),prod(2,2)
7677 crc double precision auxmat(2,2),prod_(2,2)
7680 crc call transpose2(kk(1,1),auxmat(1,1))
7681 crc call matmat2(a1(1,1),auxmat(1,1),auxmat(1,1))
7682 crc call matmat2(auxmat(1,1),a2(1,1),prod_(1,1))
7684 prod(1,1)=(a1(1,1)*kk(1,1)+a1(1,2)*kk(1,2))*a2(1,1)
7685 & +(a1(1,1)*kk(2,1)+a1(1,2)*kk(2,2))*a2(2,1)
7686 prod(1,2)=(a1(1,1)*kk(1,1)+a1(1,2)*kk(1,2))*a2(1,2)
7687 & +(a1(1,1)*kk(2,1)+a1(1,2)*kk(2,2))*a2(2,2)
7688 prod(2,1)=(a1(2,1)*kk(1,1)+a1(2,2)*kk(1,2))*a2(1,1)
7689 & +(a1(2,1)*kk(2,1)+a1(2,2)*kk(2,2))*a2(2,1)
7690 prod(2,2)=(a1(2,1)*kk(1,1)+a1(2,2)*kk(1,2))*a2(1,2)
7691 & +(a1(2,1)*kk(2,1)+a1(2,2)*kk(2,2))*a2(2,2)
7694 crc call matmat2(a1(1,1),kk(1,1),auxmat(1,1))
7695 crc call matmat2(auxmat(1,1),a2(1,1),prod_(1,1))
7697 prod(1,1)=(a1(1,1)*kk(1,1)+a1(1,2)*kk(2,1))*a2(1,1)
7698 & +(a1(1,1)*kk(1,2)+a1(1,2)*kk(2,2))*a2(2,1)
7699 prod(1,2)=(a1(1,1)*kk(1,1)+a1(1,2)*kk(2,1))*a2(1,2)
7700 & +(a1(1,1)*kk(1,2)+a1(1,2)*kk(2,2))*a2(2,2)
7701 prod(2,1)=(a1(2,1)*kk(1,1)+a1(2,2)*kk(2,1))*a2(1,1)
7702 & +(a1(2,1)*kk(1,2)+a1(2,2)*kk(2,2))*a2(2,1)
7703 prod(2,2)=(a1(2,1)*kk(1,1)+a1(2,2)*kk(2,1))*a2(1,2)
7704 & +(a1(2,1)*kk(1,2)+a1(2,2)*kk(2,2))*a2(2,2)
7707 c call transpose2(a2(1,1),a2t(1,1))
7710 crc print *,((prod_(i,j),i=1,2),j=1,2)
7711 crc print *,((prod(i,j),i=1,2),j=1,2)
7715 C-----------------------------------------------------------------------------
7716 double precision function scalar(u,v)
7718 double precision u(3),v(3)