1 subroutine etotal(energia,fact)
2 implicit real*8 (a-h,o-z)
4 include 'DIMENSIONS.ZSCOPT'
5 include 'DIMENSIONS.FREE'
11 cMS$ATTRIBUTES C :: proc_proc
14 include 'COMMON.IOUNITS'
15 double precision energia(0:max_ene),energia1(0:max_ene+1)
21 include 'COMMON.FFIELD'
22 include 'COMMON.DERIV'
23 include 'COMMON.INTERACT'
24 include 'COMMON.SBRIDGE'
25 include 'COMMON.CHAIN'
26 include 'COMMON.CONTROL'
27 double precision fact(6)
28 cd write(iout, '(a,i2)')'Calling etotal ipot=',ipot
29 cd print *,'nnt=',nnt,' nct=',nct
31 C Compute the side-chain and electrostatic interaction energy
33 goto (101,102,103,104,105) ipot
34 C Lennard-Jones potential.
35 101 call elj(evdw,evdw_t)
36 cd print '(a)','Exit ELJ'
38 C Lennard-Jones-Kihara potential (shifted).
39 102 call eljk(evdw,evdw_t)
41 C Berne-Pechukas potential (dilated LJ, angular dependence).
42 103 call ebp(evdw,evdw_t)
44 C Gay-Berne potential (shifted LJ, angular dependence).
45 104 call egb(evdw,evdw_t)
47 C Gay-Berne-Vorobjev potential (shifted LJ, angular dependence).
48 105 call egbv(evdw,evdw_t)
50 C Calculate electrostatic (H-bonding) energy of the main chain.
52 106 call eelec(ees,evdw1,eel_loc,eello_turn3,eello_turn4)
54 C Calculate excluded-volume interaction energy between peptide groups
57 call escp(evdw2,evdw2_14)
59 c Calculate the bond-stretching energy
62 c write (iout,*) "estr",estr
64 C Calculate the disulfide-bridge and other energy and the contributions
65 C from other distance constraints.
66 cd print *,'Calling EHPB'
68 cd print *,'EHPB exitted succesfully.'
70 C Calculate the virtual-bond-angle energy.
73 cd print *,'Bend energy finished.'
75 C Calculate the SC local energy.
78 cd print *,'SCLOC energy finished.'
80 C Calculate the virtual-bond torsional energy.
82 cd print *,'nterm=',nterm
83 call etor(etors,edihcnstr,fact(1))
85 C 6/23/01 Calculate double-torsional energy
87 call etor_d(etors_d,fact(2))
89 C 21/5/07 Calculate local sicdechain correlation energy
91 call eback_sc_corr(esccor)
93 C 12/1/95 Multi-body terms
97 if (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0
98 & .or. wturn6.gt.0.0d0) then
99 c print *,"calling multibody_eello"
100 call multibody_eello(ecorr,ecorr5,ecorr6,eturn6,n_corr,n_corr1)
101 c write (*,*) 'n_corr=',n_corr,' n_corr1=',n_corr1
102 c print *,ecorr,ecorr5,ecorr6,eturn6
104 if (wcorr4.eq.0.0d0 .and. wcorr.gt.0.0d0) then
105 call multibody_hb(ecorr,ecorr5,ecorr6,n_corr,n_corr1)
109 c write(iout,*) "TEST_ENE1 constr_homology=",constr_homology
110 if (constr_homology.ge.1) then
111 call e_modeller(ehomology_constr)
113 ehomology_constr=0.0d0
116 c write(iout,*) "TEST_ENE1 ehomology_constr=",ehomology_constr
118 C BARTEK for dfa test!
119 if (wdfa_dist.gt.0) call edfad(edfadis)
120 c write(iout,*)'edfad is finished!', wdfa_dist,edfadis
121 if (wdfa_tor.gt.0) call edfat(edfator)
122 c write(iout,*)'edfat is finished!', wdfa_tor,edfator
123 if (wdfa_nei.gt.0) call edfan(edfanei)
124 c write(iout,*)'edfan is finished!', wdfa_nei,edfanei
125 if (wdfa_beta.gt.0) call edfab(edfabet)
126 c write(iout,*)'edfab is finished!', wdfa_beta,edfabet
128 c write (iout,*) "ft(6)",fact(6)," evdw",evdw," evdw_t",evdw_t
130 etot=wsc*(evdw+fact(6)*evdw_t)+wscp*evdw2+welec*fact(1)*ees
132 & +wang*ebe+wtor*fact(1)*etors+wscloc*escloc
133 & +wstrain*ehpb+wcorr*fact(3)*ecorr+wcorr5*fact(4)*ecorr5
134 & +wcorr6*fact(5)*ecorr6+wturn4*fact(3)*eello_turn4
135 & +wturn3*fact(2)*eello_turn3+wturn6*fact(5)*eturn6
136 & +wel_loc*fact(2)*eel_loc+edihcnstr+wtor_d*fact(2)*etors_d
137 & +wbond*estr+wsccor*fact(1)*esccor!+ehomology_constr
138 & +wdfa_dist*edfadis+wdfa_tor*edfator+wdfa_nei*edfanei
141 etot=wsc*(evdw+fact(6)*evdw_t)+wscp*evdw2
142 & +welec*fact(1)*(ees+evdw1)
143 & +wang*ebe+wtor*fact(1)*etors+wscloc*escloc
144 & +wstrain*ehpb+wcorr*fact(3)*ecorr+wcorr5*fact(4)*ecorr5
145 & +wcorr6*fact(5)*ecorr6+wturn4*fact(3)*eello_turn4
146 & +wturn3*fact(2)*eello_turn3+wturn6*fact(5)*eturn6
147 & +wel_loc*fact(2)*eel_loc+edihcnstr+wtor_d*fact(2)*etors_d
148 & +wbond*estr+wsccor*fact(1)*esccor!+ehomology_constr
149 & +wdfa_dist*edfadis+wdfa_tor*edfator+wdfa_nei*edfanei
155 energia(2)=evdw2-evdw2_14
172 energia(8)=eello_turn3
173 energia(9)=eello_turn4
182 energia(20)=edihcnstr
184 energia(22)=ehomology_constr
189 c if (dyn_ss) call dyn_set_nss
193 if (isnan(etot).ne.0) energia(0)=1.0d+99
195 if (isnan(etot)) energia(0)=1.0d+99
200 idumm=proc_proc(etot,i)
202 call proc_proc(etot,i)
204 if(i.eq.1)energia(0)=1.0d+99
211 C Sum up the components of the Cartesian gradient.
216 gradc(j,i,icg)=wsc*gvdwc(j,i)+wscp*gvdwc_scp(j,i)+
217 & welec*fact(1)*gelc(j,i)+wvdwpp*gvdwpp(j,i)+
219 & wstrain*ghpbc(j,i)+
220 & wcorr*fact(3)*gradcorr(j,i)+
221 & wel_loc*fact(2)*gel_loc(j,i)+
222 & wturn3*fact(2)*gcorr3_turn(j,i)+
223 & wturn4*fact(3)*gcorr4_turn(j,i)+
224 & wcorr5*fact(4)*gradcorr5(j,i)+
225 & wcorr6*fact(5)*gradcorr6(j,i)+
226 & wturn6*fact(5)*gcorr6_turn(j,i)+
227 & wsccor*fact(2)*gsccorc(j,i)+
228 & wdfa_dist*gdfad(j,i)+
229 & wdfa_tor*gdfat(j,i)+
230 & wdfa_nei*gdfan(j,i)+
231 & wdfa_beta*gdfab(j,i)
232 gradx(j,i,icg)=wsc*gvdwx(j,i)+wscp*gradx_scp(j,i)+
234 & wstrain*ghpbx(j,i)+wcorr*gradxorr(j,i)+
235 & wsccor*fact(2)*gsccorx(j,i)
240 gradc(j,i,icg)=wsc*gvdwc(j,i)+wscp*gvdwc_scp(j,i)+
241 & welec*fact(1)*gelc(j,i)+wstrain*ghpbc(j,i)+
243 & wcorr*fact(3)*gradcorr(j,i)+
244 & wel_loc*fact(2)*gel_loc(j,i)+
245 & wturn3*fact(2)*gcorr3_turn(j,i)+
246 & wturn4*fact(3)*gcorr4_turn(j,i)+
247 & wcorr5*fact(4)*gradcorr5(j,i)+
248 & wcorr6*fact(5)*gradcorr6(j,i)+
249 & wturn6*fact(5)*gcorr6_turn(j,i)+
250 & wsccor*fact(2)*gsccorc(j,i)+
251 & wdfa_dist*gdfad(j,i)+
252 & wdfa_tor*gdfat(j,i)+
253 & wdfa_nei*gdfan(j,i)+
254 & wdfa_beta*gdfab(j,i)
255 gradx(j,i,icg)=wsc*gvdwx(j,i)+wscp*gradx_scp(j,i)+
257 & wstrain*ghpbx(j,i)+wcorr*gradxorr(j,i)+
258 & wsccor*fact(1)*gsccorx(j,i)
265 gloc(i,icg)=gloc(i,icg)+wcorr*fact(3)*gcorr_loc(i)
266 & +wcorr5*fact(4)*g_corr5_loc(i)
267 & +wcorr6*fact(5)*g_corr6_loc(i)
268 & +wturn4*fact(3)*gel_loc_turn4(i)
269 & +wturn3*fact(2)*gel_loc_turn3(i)
270 & +wturn6*fact(5)*gel_loc_turn6(i)
271 & +wel_loc*fact(2)*gel_loc_loc(i)
272 & +wsccor*fact(1)*gsccor_loc(i)
277 C------------------------------------------------------------------------
278 subroutine enerprint(energia,fact)
279 implicit real*8 (a-h,o-z)
281 include 'DIMENSIONS.ZSCOPT'
282 include 'COMMON.IOUNITS'
283 include 'COMMON.FFIELD'
284 include 'COMMON.SBRIDGE'
285 double precision energia(0:max_ene),fact(6)
287 evdw=energia(1)+fact(6)*energia(21)
289 evdw2=energia(2)+energia(17)
301 eello_turn3=energia(8)
302 eello_turn4=energia(9)
303 eello_turn6=energia(10)
310 edihcnstr=energia(20)
312 ehomology_constr=energia(22)
318 write (iout,10) evdw,wsc,evdw2,wscp,ees,welec*fact(1),evdw1,
320 & estr,wbond,ebe,wang,escloc,wscloc,etors,wtor*fact(1),
321 & etors_d,wtor_d*fact(2),ehpb,wstrain,
322 & ecorr,wcorr*fact(3),ecorr5,wcorr5*fact(4),ecorr6,wcorr6*fact(5),
323 & eel_loc,wel_loc*fact(2),eello_turn3,wturn3*fact(2),
324 & eello_turn4,wturn4*fact(3),eello_turn6,wturn6*fact(5),
325 & esccor,wsccor*fact(1),edihcnstr,ehomology_constr,ebr*nss,
326 & edfadis,wdfa_dist,edfator,wdfa_tor,edfanei,wdfa_nei,edfabet,
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 elec)'/
332 & 'EVDWPP=',1pE16.6,' WEIGHT=',1pD16.6,' (p-p VDW)'/
333 & 'ESTR= ',1pE16.6,' WEIGHT=',1pD16.6,' (stretching)'/
334 & 'EBE= ',1pE16.6,' WEIGHT=',1pD16.6,' (bending)'/
335 & 'ESC= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC local)'/
336 & 'ETORS= ',1pE16.6,' WEIGHT=',1pD16.6,' (torsional)'/
337 & 'ETORSD=',1pE16.6,' WEIGHT=',1pD16.6,' (double torsional)'/
338 & 'EHBP= ',1pE16.6,' WEIGHT=',1pD16.6,
339 & ' (SS bridges & dist. cnstr.)'/
340 & 'ECORR4=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
341 & 'ECORR5=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
342 & 'ECORR6=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
343 & 'EELLO= ',1pE16.6,' WEIGHT=',1pD16.6,' (electrostatic-local)'/
344 & 'ETURN3=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 3rd order)'/
345 & 'ETURN4=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 4th order)'/
346 & 'ETURN6=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 6th order)'/
347 & 'ESCCOR=',1pE16.6,' WEIGHT=',1pD16.6,' (backbone-rotamer corr)'/
348 & 'EDIHC= ',1pE16.6,' (dihedral angle constraints)'/
349 & 'H_CONS=',1pE16.6,' (Homology model constraints energy)'/
350 & 'ESS= ',1pE16.6,' (disulfide-bridge intrinsic energy)'/
351 & 'EDFAD= ',1pE16.6,' WEIGHT=',1pD16.6,' (DFA distance energy)'/
352 & 'EDFAT= ',1pE16.6,' WEIGHT=',1pD16.6,' (DFA torsion energy)'/
353 & 'EDFAN= ',1pE16.6,' WEIGHT=',1pD16.6,' (DFA NCa energy)'/
354 & 'EDFAB= ',1pE16.6,' WEIGHT=',1pD16.6,' (DFA Beta energy)'/
355 & 'ETOT= ',1pE16.6,' (total)')
357 write (iout,10) evdw,wsc,evdw2,wscp,ees,welec*fact(1),estr,wbond,
358 & ebe,wang,escloc,wscloc,etors,wtor*fact(1),etors_d,wtor_d*fact2,
359 & ehpb,wstrain,ecorr,wcorr*fact(3),ecorr5,wcorr5*fact(4),
360 & ecorr6,wcorr6*fact(5),eel_loc,wel_loc*fact(2),
361 & eello_turn3,wturn3*fact(2),eello_turn4,wturn4*fact(3),
362 & eello_turn6,wturn6*fact(5),esccor*fact(1),wsccor,
363 & edihcnstr,ehomology_constr,ebr*nss,
364 & edfadis,wdfa_dist,edfator,wdfa_tor,edfanei,wdfa_nei,edfabet,
366 10 format (/'Virtual-chain energies:'//
367 & 'EVDW= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC-SC)'/
368 & 'EVDW2= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC-p)'/
369 & 'EES= ',1pE16.6,' WEIGHT=',1pD16.6,' (p-p)'/
370 & 'ESTR= ',1pE16.6,' WEIGHT=',1pD16.6,' (stretching)'/
371 & 'EBE= ',1pE16.6,' WEIGHT=',1pD16.6,' (bending)'/
372 & 'ESC= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC local)'/
373 & 'ETORS= ',1pE16.6,' WEIGHT=',1pD16.6,' (torsional)'/
374 & 'ETORSD=',1pE16.6,' WEIGHT=',1pD16.6,' (double torsional)'/
375 & 'EHBP= ',1pE16.6,' WEIGHT=',1pD16.6,
376 & ' (SS bridges & dist. cnstr.)'/
377 & 'ECORR4=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
378 & 'ECORR5=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
379 & 'ECORR6=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
380 & 'EELLO= ',1pE16.6,' WEIGHT=',1pD16.6,' (electrostatic-local)'/
381 & 'ETURN3=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 3rd order)'/
382 & 'ETURN4=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 4th order)'/
383 & 'ETURN6=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 6th order)'/
384 & 'ESCCOR=',1pE16.6,' WEIGHT=',1pD16.6,' (backbone-rotamer corr)'/
385 & 'EDIHC= ',1pE16.6,' (dihedral angle constraints)'/
386 & 'H_CONS=',1pE16.6,' (Homology model constraints energy)'/
387 & 'ESS= ',1pE16.6,' (disulfide-bridge intrinsic energy)'/
388 & 'EDFAD= ',1pE16.6,' WEIGHT=',1pD16.6,' (DFA distance energy)'/
389 & 'EDFAT= ',1pE16.6,' WEIGHT=',1pD16.6,' (DFA torsion energy)'/
390 & 'EDFAN= ',1pE16.6,' WEIGHT=',1pD16.6,' (DFA NCa energy)'/
391 & 'EDFAB= ',1pE16.6,' WEIGHT=',1pD16.6,' (DFA Beta energy)'/
392 & 'ETOT= ',1pE16.6,' (total)')
396 C-----------------------------------------------------------------------
397 subroutine elj(evdw,evdw_t)
399 C This subroutine calculates the interaction energy of nonbonded side chains
400 C assuming the LJ potential of interaction.
402 implicit real*8 (a-h,o-z)
404 include 'DIMENSIONS.ZSCOPT'
405 include "DIMENSIONS.COMPAR"
406 parameter (accur=1.0d-10)
409 include 'COMMON.LOCAL'
410 include 'COMMON.CHAIN'
411 include 'COMMON.DERIV'
412 include 'COMMON.INTERACT'
413 include 'COMMON.TORSION'
414 include 'COMMON.ENEPS'
415 include 'COMMON.SBRIDGE'
416 include 'COMMON.NAMES'
417 include 'COMMON.IOUNITS'
418 include 'COMMON.CONTACTS'
422 cd print *,'Entering ELJ nnt=',nnt,' nct=',nct,' expon=',expon
425 eneps_temp(j,i)=0.0d0
439 C Calculate SC interaction energy.
442 cd write (iout,*) 'i=',i,' iint=',iint,' istart=',istart(i,iint),
443 cd & 'iend=',iend(i,iint)
444 do j=istart(i,iint),iend(i,iint)
449 C Change 12/1/95 to calculate four-body interactions
450 rij=xj*xj+yj*yj+zj*zj
452 c write (iout,*)'i=',i,' j=',j,' itypi=',itypi,' itypj=',itypj
453 eps0ij=eps(itypi,itypj)
455 e1=fac*fac*aa(itypi,itypj)
456 e2=fac*bb(itypi,itypj)
458 ij=icant(itypi,itypj)
459 eneps_temp(1,ij)=eneps_temp(1,ij)+e1/dabs(eps0ij)
460 eneps_temp(2,ij)=eneps_temp(2,ij)+e2/eps0ij
461 cd sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
462 cd epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
463 cd write (iout,'(2(a3,i3,2x),6(1pd12.4)/2(3(1pd12.4),5x)/)')
464 cd & restyp(itypi),i,restyp(itypj),j,aa(itypi,itypj),
465 cd & bb(itypi,itypj),1.0D0/dsqrt(rrij),evdwij,epsi,sigm,
466 cd & (c(k,i),k=1,3),(c(k,j),k=1,3)
467 if (bb(itypi,itypj).gt.0.0d0) then
474 C Calculate the components of the gradient in DC and X
476 fac=-rrij*(e1+evdwij)
481 gvdwx(k,i)=gvdwx(k,i)-gg(k)
482 gvdwx(k,j)=gvdwx(k,j)+gg(k)
486 gvdwc(l,k)=gvdwc(l,k)+gg(l)
491 C 12/1/95, revised on 5/20/97
493 C Calculate the contact function. The ith column of the array JCONT will
494 C contain the numbers of atoms that make contacts with the atom I (of numbers
495 C greater than I). The arrays FACONT and GACONT will contain the values of
496 C the contact function and its derivative.
498 C Uncomment next line, if the correlation interactions include EVDW explicitly.
499 c if (j.gt.i+1 .and. evdwij.le.0.0D0) then
500 C Uncomment next line, if the correlation interactions are contact function only
501 if (j.gt.i+1.and. eps0ij.gt.0.0D0) then
503 sigij=sigma(itypi,itypj)
504 r0ij=rs0(itypi,itypj)
506 C Check whether the SC's are not too far to make a contact.
509 call gcont(rij,rcut,1.0d0,0.2d0*rcut,fcont,fprimcont)
510 C Add a new contact, if the SC's are close enough, but not too close (r<sigma).
512 if (fcont.gt.0.0D0) then
513 C If the SC-SC distance if close to sigma, apply spline.
514 cAdam call gcont(-rij,-1.03d0*sigij,2.0d0*sigij,1.0d0,
515 cAdam & fcont1,fprimcont1)
516 cAdam fcont1=1.0d0-fcont1
517 cAdam if (fcont1.gt.0.0d0) then
518 cAdam fprimcont=fprimcont*fcont1+fcont*fprimcont1
519 cAdam fcont=fcont*fcont1
521 C Uncomment following 4 lines to have the geometric average of the epsilon0's
522 cga eps0ij=1.0d0/dsqrt(eps0ij)
524 cga gg(k)=gg(k)*eps0ij
526 cga eps0ij=-evdwij*eps0ij
527 C Uncomment for AL's type of SC correlation interactions.
529 num_conti=num_conti+1
531 facont(num_conti,i)=fcont*eps0ij
532 fprimcont=eps0ij*fprimcont/rij
534 cAdam gacont(1,num_conti,i)=-fprimcont*xj+fcont*gg(1)
535 cAdam gacont(2,num_conti,i)=-fprimcont*yj+fcont*gg(2)
536 cAdam gacont(3,num_conti,i)=-fprimcont*zj+fcont*gg(3)
537 C Uncomment following 3 lines for Skolnick's type of SC correlation.
538 gacont(1,num_conti,i)=-fprimcont*xj
539 gacont(2,num_conti,i)=-fprimcont*yj
540 gacont(3,num_conti,i)=-fprimcont*zj
541 cd write (iout,'(2i5,2f10.5)') i,j,rij,facont(num_conti,i)
542 cd write (iout,'(2i3,3f10.5)')
543 cd & i,j,(gacont(kk,num_conti,i),kk=1,3)
549 num_cont(i)=num_conti
554 gvdwc(j,i)=expon*gvdwc(j,i)
555 gvdwx(j,i)=expon*gvdwx(j,i)
559 C******************************************************************************
563 C To save time, the factor of EXPON has been extracted from ALL components
564 C of GVDWC and GRADX. Remember to multiply them by this factor before further
567 C******************************************************************************
570 C-----------------------------------------------------------------------------
571 subroutine eljk(evdw,evdw_t)
573 C This subroutine calculates the interaction energy of nonbonded side chains
574 C assuming the LJK potential of interaction.
576 implicit real*8 (a-h,o-z)
578 include 'DIMENSIONS.ZSCOPT'
579 include "DIMENSIONS.COMPAR"
582 include 'COMMON.LOCAL'
583 include 'COMMON.CHAIN'
584 include 'COMMON.DERIV'
585 include 'COMMON.INTERACT'
586 include 'COMMON.ENEPS'
587 include 'COMMON.IOUNITS'
588 include 'COMMON.NAMES'
593 c print *,'Entering ELJK nnt=',nnt,' nct=',nct,' expon=',expon
596 eneps_temp(j,i)=0.0d0
608 C Calculate SC interaction energy.
611 do j=istart(i,iint),iend(i,iint)
616 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
618 e_augm=augm(itypi,itypj)*fac_augm
621 r_shift_inv=1.0D0/(rij+r0(itypi,itypj)-sigma(itypi,itypj))
622 fac=r_shift_inv**expon
623 e1=fac*fac*aa(itypi,itypj)
624 e2=fac*bb(itypi,itypj)
626 ij=icant(itypi,itypj)
627 eneps_temp(1,ij)=eneps_temp(1,ij)+(e1+a_augm)
628 & /dabs(eps(itypi,itypj))
629 eneps_temp(2,ij)=eneps_temp(2,ij)+e2/eps(itypi,itypj)
630 cd sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
631 cd epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
632 cd write (iout,'(2(a3,i3,2x),8(1pd12.4)/2(3(1pd12.4),5x)/)')
633 cd & restyp(itypi),i,restyp(itypj),j,aa(itypi,itypj),
634 cd & bb(itypi,itypj),augm(itypi,itypj),epsi,sigm,
635 cd & sigma(itypi,itypj),1.0D0/dsqrt(rrij),evdwij,
636 cd & (c(k,i),k=1,3),(c(k,j),k=1,3)
637 if (bb(itypi,itypj).gt.0.0d0) then
644 C Calculate the components of the gradient in DC and X
646 fac=-2.0D0*rrij*e_augm-r_inv_ij*r_shift_inv*(e1+e1+e2)
651 gvdwx(k,i)=gvdwx(k,i)-gg(k)
652 gvdwx(k,j)=gvdwx(k,j)+gg(k)
656 gvdwc(l,k)=gvdwc(l,k)+gg(l)
666 gvdwc(j,i)=expon*gvdwc(j,i)
667 gvdwx(j,i)=expon*gvdwx(j,i)
673 C-----------------------------------------------------------------------------
674 subroutine ebp(evdw,evdw_t)
676 C This subroutine calculates the interaction energy of nonbonded side chains
677 C assuming the Berne-Pechukas potential of interaction.
679 implicit real*8 (a-h,o-z)
681 include 'DIMENSIONS.ZSCOPT'
682 include "DIMENSIONS.COMPAR"
685 include 'COMMON.LOCAL'
686 include 'COMMON.CHAIN'
687 include 'COMMON.DERIV'
688 include 'COMMON.NAMES'
689 include 'COMMON.INTERACT'
690 include 'COMMON.ENEPS'
691 include 'COMMON.IOUNITS'
692 include 'COMMON.CALC'
694 c double precision rrsave(maxdim)
700 eneps_temp(j,i)=0.0d0
705 c print *,'Entering EBP nnt=',nnt,' nct=',nct,' expon=',expon
706 c if (icall.eq.0) then
718 dxi=dc_norm(1,nres+i)
719 dyi=dc_norm(2,nres+i)
720 dzi=dc_norm(3,nres+i)
721 dsci_inv=vbld_inv(i+nres)
723 C Calculate SC interaction energy.
726 do j=istart(i,iint),iend(i,iint)
729 dscj_inv=vbld_inv(j+nres)
730 chi1=chi(itypi,itypj)
731 chi2=chi(itypj,itypi)
738 alf12=0.5D0*(alf1+alf2)
739 C For diagnostics only!!!
752 dxj=dc_norm(1,nres+j)
753 dyj=dc_norm(2,nres+j)
754 dzj=dc_norm(3,nres+j)
755 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
756 cd if (icall.eq.0) then
762 C Calculate the angle-dependent terms of energy & contributions to derivatives.
764 C Calculate whole angle-dependent part of epsilon and contributions
766 fac=(rrij*sigsq)**expon2
767 e1=fac*fac*aa(itypi,itypj)
768 e2=fac*bb(itypi,itypj)
769 evdwij=eps1*eps2rt*eps3rt*(e1+e2)
770 eps2der=evdwij*eps3rt
771 eps3der=evdwij*eps2rt
772 evdwij=evdwij*eps2rt*eps3rt
773 ij=icant(itypi,itypj)
774 aux=eps1*eps2rt**2*eps3rt**2
775 eneps_temp(1,ij)=eneps_temp(1,ij)+e1*aux
776 & /dabs(eps(itypi,itypj))
777 eneps_temp(2,ij)=eneps_temp(2,ij)+e2*aux/eps(itypi,itypj)
778 if (bb(itypi,itypj).gt.0.0d0) then
785 sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
786 epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
787 cd write (iout,'(2(a3,i3,2x),15(0pf7.3))')
788 cd & restyp(itypi),i,restyp(itypj),j,
789 cd & epsi,sigm,chi1,chi2,chip1,chip2,
790 cd & eps1,eps2rt**2,eps3rt**2,1.0D0/dsqrt(sigsq),
791 cd & om1,om2,om12,1.0D0/dsqrt(rrij),
794 C Calculate gradient components.
795 e1=e1*eps1*eps2rt**2*eps3rt**2
796 fac=-expon*(e1+evdwij)
799 C Calculate radial part of the gradient
803 C Calculate the angular part of the gradient and sum add the contributions
804 C to the appropriate components of the Cartesian gradient.
813 C-----------------------------------------------------------------------------
814 subroutine egb(evdw,evdw_t)
816 C This subroutine calculates the interaction energy of nonbonded side chains
817 C assuming the Gay-Berne potential of interaction.
819 implicit real*8 (a-h,o-z)
821 include 'DIMENSIONS.ZSCOPT'
822 include "DIMENSIONS.COMPAR"
825 include 'COMMON.LOCAL'
826 include 'COMMON.CHAIN'
827 include 'COMMON.DERIV'
828 include 'COMMON.NAMES'
829 include 'COMMON.INTERACT'
830 include 'COMMON.ENEPS'
831 include 'COMMON.IOUNITS'
832 include 'COMMON.CALC'
833 include 'COMMON.SBRIDGE'
840 eneps_temp(j,i)=0.0d0
843 c print *,'Entering EGB nnt=',nnt,' nct=',nct,' expon=',expon
847 c if (icall.gt.0) lprn=.true.
855 dxi=dc_norm(1,nres+i)
856 dyi=dc_norm(2,nres+i)
857 dzi=dc_norm(3,nres+i)
858 dsci_inv=vbld_inv(i+nres)
860 C Calculate SC interaction energy.
863 do j=istart(i,iint),iend(i,iint)
864 C in case of diagnostics write (iout,*) "TU SZUKAJ",i,j,dyn_ss_mask(i),dyn_ss_mask(j)
865 C /06/28/2013 Adasko: In case of dyn_ss - dynamic disulfide bond
866 C formation no electrostatic interactions should be calculated. If it
867 C would be allowed NaN would appear
868 IF (dyn_ss_mask(i).and.dyn_ss_mask(j)) THEN
869 C /06/28/2013 Adasko: dyn_ss_mask is logical statement wheather this Cys
870 C residue can or cannot form disulfide bond. There is still bug allowing
871 C Cys...Cys...Cys bond formation
872 call dyn_ssbond_ene(i,j,evdwij)
873 C /06/28/2013 Adasko: dyn_ssbond_ene is dynamic SS bond foration energy
876 c if (energy_dec) write (iout,'(a6,2i5,0pf7.3,a3)')
877 c & 'evdw',i,j,evdwij,' ss'
881 dscj_inv=vbld_inv(j+nres)
882 sig0ij=sigma(itypi,itypj)
883 chi1=chi(itypi,itypj)
884 chi2=chi(itypj,itypi)
891 alf12=0.5D0*(alf1+alf2)
892 C For diagnostics only!!!
905 dxj=dc_norm(1,nres+j)
906 dyj=dc_norm(2,nres+j)
907 dzj=dc_norm(3,nres+j)
908 c write (iout,*) i,j,xj,yj,zj
909 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
911 C Calculate angle-dependent terms of energy and contributions to their
915 sig=sig0ij*dsqrt(sigsq)
916 rij_shift=1.0D0/rij-sig+sig0ij
917 C I hate to put IF's in the loops, but here don't have another choice!!!!
918 if (rij_shift.le.0.0D0) then
923 c---------------------------------------------------------------
924 rij_shift=1.0D0/rij_shift
926 e1=fac*fac*aa(itypi,itypj)
927 e2=fac*bb(itypi,itypj)
928 evdwij=eps1*eps2rt*eps3rt*(e1+e2)
929 eps2der=evdwij*eps3rt
930 eps3der=evdwij*eps2rt
931 evdwij=evdwij*eps2rt*eps3rt
932 if (bb(itypi,itypj).gt.0) then
937 ij=icant(itypi,itypj)
938 aux=eps1*eps2rt**2*eps3rt**2
939 eneps_temp(1,ij)=eneps_temp(1,ij)+aux*e1
940 & /dabs(eps(itypi,itypj))
941 eneps_temp(2,ij)=eneps_temp(2,ij)+aux*e2/eps(itypi,itypj)
942 c write (iout,*) "i",i," j",j," itypi",itypi," itypj",itypj,
943 c & " ij",ij," eneps",aux*e1/dabs(eps(itypi,itypj)),
944 c & aux*e2/eps(itypi,itypj)
945 c write (iout,'(a6,2i5,0pf7.3)') 'evdw',i,j,evdwij
947 sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
948 epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
949 write (iout,'(2(a3,i3,2x),17(0pf7.3))')
950 & restyp(itypi),i,restyp(itypj),j,
951 & epsi,sigm,chi1,chi2,chip1,chip2,
952 & eps1,eps2rt**2,eps3rt**2,sig,sig0ij,
953 & om1,om2,om12,1.0D0/rij,1.0D0/rij_shift,
957 C Calculate gradient components.
958 e1=e1*eps1*eps2rt**2*eps3rt**2
959 fac=-expon*(e1+evdwij)*rij_shift
962 C Calculate the radial part of the gradient
966 C Calculate angular part of the gradient.
975 C-----------------------------------------------------------------------------
976 subroutine egbv(evdw,evdw_t)
978 C This subroutine calculates the interaction energy of nonbonded side chains
979 C assuming the Gay-Berne-Vorobjev potential of interaction.
981 implicit real*8 (a-h,o-z)
983 include 'DIMENSIONS.ZSCOPT'
984 include "DIMENSIONS.COMPAR"
987 include 'COMMON.LOCAL'
988 include 'COMMON.CHAIN'
989 include 'COMMON.DERIV'
990 include 'COMMON.NAMES'
991 include 'COMMON.INTERACT'
992 include 'COMMON.ENEPS'
993 include 'COMMON.IOUNITS'
994 include 'COMMON.CALC'
1001 eneps_temp(j,i)=0.0d0
1006 c print *,'Entering EGB nnt=',nnt,' nct=',nct,' expon=',expon
1009 c if (icall.gt.0) lprn=.true.
1011 do i=iatsc_s,iatsc_e
1017 dxi=dc_norm(1,nres+i)
1018 dyi=dc_norm(2,nres+i)
1019 dzi=dc_norm(3,nres+i)
1020 dsci_inv=vbld_inv(i+nres)
1022 C Calculate SC interaction energy.
1024 do iint=1,nint_gr(i)
1025 do j=istart(i,iint),iend(i,iint)
1028 dscj_inv=vbld_inv(j+nres)
1029 sig0ij=sigma(itypi,itypj)
1030 r0ij=r0(itypi,itypj)
1031 chi1=chi(itypi,itypj)
1032 chi2=chi(itypj,itypi)
1039 alf12=0.5D0*(alf1+alf2)
1040 C For diagnostics only!!!
1053 dxj=dc_norm(1,nres+j)
1054 dyj=dc_norm(2,nres+j)
1055 dzj=dc_norm(3,nres+j)
1056 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
1058 C Calculate angle-dependent terms of energy and contributions to their
1062 sig=sig0ij*dsqrt(sigsq)
1063 rij_shift=1.0D0/rij-sig+r0ij
1064 C I hate to put IF's in the loops, but here don't have another choice!!!!
1065 if (rij_shift.le.0.0D0) then
1070 c---------------------------------------------------------------
1071 rij_shift=1.0D0/rij_shift
1072 fac=rij_shift**expon
1073 e1=fac*fac*aa(itypi,itypj)
1074 e2=fac*bb(itypi,itypj)
1075 evdwij=eps1*eps2rt*eps3rt*(e1+e2)
1076 eps2der=evdwij*eps3rt
1077 eps3der=evdwij*eps2rt
1078 fac_augm=rrij**expon
1079 e_augm=augm(itypi,itypj)*fac_augm
1080 evdwij=evdwij*eps2rt*eps3rt
1081 if (bb(itypi,itypj).gt.0.0d0) then
1082 evdw=evdw+evdwij+e_augm
1084 evdw_t=evdw_t+evdwij+e_augm
1086 ij=icant(itypi,itypj)
1087 aux=eps1*eps2rt**2*eps3rt**2
1088 eneps_temp(1,ij)=eneps_temp(1,ij)+aux*(e1+e_augm)
1089 & /dabs(eps(itypi,itypj))
1090 eneps_temp(2,ij)=eneps_temp(2,ij)+aux*e2/eps(itypi,itypj)
1091 c eneps_temp(ij)=eneps_temp(ij)
1092 c & +(evdwij+e_augm)/eps(itypi,itypj)
1094 c sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
1095 c epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
1096 c write (iout,'(2(a3,i3,2x),17(0pf7.3))')
1097 c & restyp(itypi),i,restyp(itypj),j,
1098 c & epsi,sigm,sig,(augm(itypi,itypj)/epsi)**(1.0D0/12.0D0),
1099 c & chi1,chi2,chip1,chip2,
1100 c & eps1,eps2rt**2,eps3rt**2,
1101 c & om1,om2,om12,1.0D0/rij,1.0D0/rij_shift,
1105 C Calculate gradient components.
1106 e1=e1*eps1*eps2rt**2*eps3rt**2
1107 fac=-expon*(e1+evdwij)*rij_shift
1109 fac=rij*fac-2*expon*rrij*e_augm
1110 C Calculate the radial part of the gradient
1114 C Calculate angular part of the gradient.
1122 C-----------------------------------------------------------------------------
1123 subroutine sc_angular
1124 C Calculate eps1,eps2,eps3,sigma, and parts of their derivatives in om1,om2,
1125 C om12. Called by ebp, egb, and egbv.
1127 include 'COMMON.CALC'
1131 om1=dxi*erij(1)+dyi*erij(2)+dzi*erij(3)
1132 om2=dxj*erij(1)+dyj*erij(2)+dzj*erij(3)
1133 om12=dxi*dxj+dyi*dyj+dzi*dzj
1135 C Calculate eps1(om12) and its derivative in om12
1136 faceps1=1.0D0-om12*chiom12
1137 faceps1_inv=1.0D0/faceps1
1138 eps1=dsqrt(faceps1_inv)
1139 C Following variable is eps1*deps1/dom12
1140 eps1_om12=faceps1_inv*chiom12
1141 C Calculate sigma(om1,om2,om12) and the derivatives of sigma**2 in om1,om2,
1146 facsig=om1*chiom1+om2*chiom2-2.0D0*om1om2*chiom12
1147 sigsq=1.0D0-facsig*faceps1_inv
1148 sigsq_om1=(chiom1-chiom12*om2)*faceps1_inv
1149 sigsq_om2=(chiom2-chiom12*om1)*faceps1_inv
1150 sigsq_om12=-chi12*(om1om2*faceps1-om12*facsig)*faceps1_inv**2
1151 C Calculate eps2 and its derivatives in om1, om2, and om12.
1154 chipom12=chip12*om12
1155 facp=1.0D0-om12*chipom12
1157 facp1=om1*chipom1+om2*chipom2-2.0D0*om1om2*chipom12
1158 C Following variable is the square root of eps2
1159 eps2rt=1.0D0-facp1*facp_inv
1160 C Following three variables are the derivatives of the square root of eps
1161 C in om1, om2, and om12.
1162 eps2rt_om1=-4.0D0*(chipom1-chipom12*om2)*facp_inv
1163 eps2rt_om2=-4.0D0*(chipom2-chipom12*om1)*facp_inv
1164 eps2rt_om12=4.0D0*chip12*(om1om2*facp-om12*facp1)*facp_inv**2
1165 C Evaluate the "asymmetric" factor in the VDW constant, eps3
1166 eps3rt=1.0D0-alf1*om1+alf2*om2-alf12*om12
1167 C Calculate whole angle-dependent part of epsilon and contributions
1168 C to its derivatives
1171 C----------------------------------------------------------------------------
1173 implicit real*8 (a-h,o-z)
1174 include 'DIMENSIONS'
1175 include 'DIMENSIONS.ZSCOPT'
1176 include 'COMMON.CHAIN'
1177 include 'COMMON.DERIV'
1178 include 'COMMON.CALC'
1179 double precision dcosom1(3),dcosom2(3)
1180 eom1=eps2der*eps2rt_om1-2.0D0*alf1*eps3der+sigder*sigsq_om1
1181 eom2=eps2der*eps2rt_om2+2.0D0*alf2*eps3der+sigder*sigsq_om2
1182 eom12=evdwij*eps1_om12+eps2der*eps2rt_om12
1183 & -2.0D0*alf12*eps3der+sigder*sigsq_om12
1185 dcosom1(k)=rij*(dc_norm(k,nres+i)-om1*erij(k))
1186 dcosom2(k)=rij*(dc_norm(k,nres+j)-om2*erij(k))
1189 gg(k)=gg(k)+eom1*dcosom1(k)+eom2*dcosom2(k)
1192 gvdwx(k,i)=gvdwx(k,i)-gg(k)
1193 & +(eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,nres+i))
1194 & +eom1*(erij(k)-om1*dc_norm(k,nres+i)))*dsci_inv
1195 gvdwx(k,j)=gvdwx(k,j)+gg(k)
1196 & +(eom12*(dc_norm(k,nres+i)-om12*dc_norm(k,nres+j))
1197 & +eom2*(erij(k)-om2*dc_norm(k,nres+j)))*dscj_inv
1200 C Calculate the components of the gradient in DC and X
1204 gvdwc(l,k)=gvdwc(l,k)+gg(l)
1209 c------------------------------------------------------------------------------
1210 subroutine vec_and_deriv
1211 implicit real*8 (a-h,o-z)
1212 include 'DIMENSIONS'
1213 include 'DIMENSIONS.ZSCOPT'
1214 include 'COMMON.IOUNITS'
1215 include 'COMMON.GEO'
1216 include 'COMMON.VAR'
1217 include 'COMMON.LOCAL'
1218 include 'COMMON.CHAIN'
1219 include 'COMMON.VECTORS'
1220 include 'COMMON.DERIV'
1221 include 'COMMON.INTERACT'
1222 dimension uyder(3,3,2),uzder(3,3,2),vbld_inv_temp(2)
1223 C Compute the local reference systems. For reference system (i), the
1224 C X-axis points from CA(i) to CA(i+1), the Y axis is in the
1225 C CA(i)-CA(i+1)-CA(i+2) plane, and the Z axis is perpendicular to this plane.
1227 c if (i.eq.nres-1 .or. itel(i+1).eq.0) then
1228 if (i.eq.nres-1) then
1229 C Case of the last full residue
1230 C Compute the Z-axis
1231 call vecpr(dc_norm(1,i),dc_norm(1,i-1),uz(1,i))
1232 costh=dcos(pi-theta(nres))
1233 fac=1.0d0/dsqrt(1.0d0-costh*costh)
1238 C Compute the derivatives of uz
1240 uzder(2,1,1)=-dc_norm(3,i-1)
1241 uzder(3,1,1)= dc_norm(2,i-1)
1242 uzder(1,2,1)= dc_norm(3,i-1)
1244 uzder(3,2,1)=-dc_norm(1,i-1)
1245 uzder(1,3,1)=-dc_norm(2,i-1)
1246 uzder(2,3,1)= dc_norm(1,i-1)
1249 uzder(2,1,2)= dc_norm(3,i)
1250 uzder(3,1,2)=-dc_norm(2,i)
1251 uzder(1,2,2)=-dc_norm(3,i)
1253 uzder(3,2,2)= dc_norm(1,i)
1254 uzder(1,3,2)= dc_norm(2,i)
1255 uzder(2,3,2)=-dc_norm(1,i)
1258 C Compute the Y-axis
1261 uy(k,i)=fac*(dc_norm(k,i-1)-costh*dc_norm(k,i))
1264 C Compute the derivatives of uy
1267 uyder(k,j,1)=2*dc_norm(k,i-1)*dc_norm(j,i)
1268 & -dc_norm(k,i)*dc_norm(j,i-1)
1269 uyder(k,j,2)=-dc_norm(j,i)*dc_norm(k,i)
1271 uyder(j,j,1)=uyder(j,j,1)-costh
1272 uyder(j,j,2)=1.0d0+uyder(j,j,2)
1277 uygrad(l,k,j,i)=uyder(l,k,j)
1278 uzgrad(l,k,j,i)=uzder(l,k,j)
1282 call unormderiv(uy(1,i),uyder(1,1,1),facy,uygrad(1,1,1,i))
1283 call unormderiv(uy(1,i),uyder(1,1,2),facy,uygrad(1,1,2,i))
1284 call unormderiv(uz(1,i),uzder(1,1,1),fac,uzgrad(1,1,1,i))
1285 call unormderiv(uz(1,i),uzder(1,1,2),fac,uzgrad(1,1,2,i))
1289 C Compute the Z-axis
1290 call vecpr(dc_norm(1,i),dc_norm(1,i+1),uz(1,i))
1291 costh=dcos(pi-theta(i+2))
1292 fac=1.0d0/dsqrt(1.0d0-costh*costh)
1297 C Compute the derivatives of uz
1299 uzder(2,1,1)=-dc_norm(3,i+1)
1300 uzder(3,1,1)= dc_norm(2,i+1)
1301 uzder(1,2,1)= dc_norm(3,i+1)
1303 uzder(3,2,1)=-dc_norm(1,i+1)
1304 uzder(1,3,1)=-dc_norm(2,i+1)
1305 uzder(2,3,1)= dc_norm(1,i+1)
1308 uzder(2,1,2)= dc_norm(3,i)
1309 uzder(3,1,2)=-dc_norm(2,i)
1310 uzder(1,2,2)=-dc_norm(3,i)
1312 uzder(3,2,2)= dc_norm(1,i)
1313 uzder(1,3,2)= dc_norm(2,i)
1314 uzder(2,3,2)=-dc_norm(1,i)
1317 C Compute the Y-axis
1320 uy(k,i)=facy*(dc_norm(k,i+1)-costh*dc_norm(k,i))
1323 C Compute the derivatives of uy
1326 uyder(k,j,1)=2*dc_norm(k,i+1)*dc_norm(j,i)
1327 & -dc_norm(k,i)*dc_norm(j,i+1)
1328 uyder(k,j,2)=-dc_norm(j,i)*dc_norm(k,i)
1330 uyder(j,j,1)=uyder(j,j,1)-costh
1331 uyder(j,j,2)=1.0d0+uyder(j,j,2)
1336 uygrad(l,k,j,i)=uyder(l,k,j)
1337 uzgrad(l,k,j,i)=uzder(l,k,j)
1341 call unormderiv(uy(1,i),uyder(1,1,1),facy,uygrad(1,1,1,i))
1342 call unormderiv(uy(1,i),uyder(1,1,2),facy,uygrad(1,1,2,i))
1343 call unormderiv(uz(1,i),uzder(1,1,1),fac,uzgrad(1,1,1,i))
1344 call unormderiv(uz(1,i),uzder(1,1,2),fac,uzgrad(1,1,2,i))
1350 vbld_inv_temp(1)=vbld_inv(i+1)
1351 if (i.lt.nres-1) then
1352 vbld_inv_temp(2)=vbld_inv(i+2)
1354 vbld_inv_temp(2)=vbld_inv(i)
1359 uygrad(l,k,j,i)=vbld_inv_temp(j)*uygrad(l,k,j,i)
1360 uzgrad(l,k,j,i)=vbld_inv_temp(j)*uzgrad(l,k,j,i)
1368 C-----------------------------------------------------------------------------
1369 subroutine vec_and_deriv_test
1370 implicit real*8 (a-h,o-z)
1371 include 'DIMENSIONS'
1372 include 'DIMENSIONS.ZSCOPT'
1373 include 'COMMON.IOUNITS'
1374 include 'COMMON.GEO'
1375 include 'COMMON.VAR'
1376 include 'COMMON.LOCAL'
1377 include 'COMMON.CHAIN'
1378 include 'COMMON.VECTORS'
1379 dimension uyder(3,3,2),uzder(3,3,2)
1380 C Compute the local reference systems. For reference system (i), the
1381 C X-axis points from CA(i) to CA(i+1), the Y axis is in the
1382 C CA(i)-CA(i+1)-CA(i+2) plane, and the Z axis is perpendicular to this plane.
1384 if (i.eq.nres-1) then
1385 C Case of the last full residue
1386 C Compute the Z-axis
1387 call vecpr(dc_norm(1,i),dc_norm(1,i-1),uz(1,i))
1388 costh=dcos(pi-theta(nres))
1389 fac=1.0d0/dsqrt(1.0d0-costh*costh)
1390 c write (iout,*) 'fac',fac,
1391 c & 1.0d0/dsqrt(scalar(uz(1,i),uz(1,i)))
1392 fac=1.0d0/dsqrt(scalar(uz(1,i),uz(1,i)))
1396 C Compute the derivatives of uz
1398 uzder(2,1,1)=-dc_norm(3,i-1)
1399 uzder(3,1,1)= dc_norm(2,i-1)
1400 uzder(1,2,1)= dc_norm(3,i-1)
1402 uzder(3,2,1)=-dc_norm(1,i-1)
1403 uzder(1,3,1)=-dc_norm(2,i-1)
1404 uzder(2,3,1)= dc_norm(1,i-1)
1407 uzder(2,1,2)= dc_norm(3,i)
1408 uzder(3,1,2)=-dc_norm(2,i)
1409 uzder(1,2,2)=-dc_norm(3,i)
1411 uzder(3,2,2)= dc_norm(1,i)
1412 uzder(1,3,2)= dc_norm(2,i)
1413 uzder(2,3,2)=-dc_norm(1,i)
1415 C Compute the Y-axis
1417 uy(k,i)=fac*(dc_norm(k,i-1)-costh*dc_norm(k,i))
1420 facy=1.0d0/dsqrt(scalar(dc_norm(1,i),dc_norm(1,i))*
1421 & (scalar(dc_norm(1,i-1),dc_norm(1,i-1))**2-
1422 & scalar(dc_norm(1,i),dc_norm(1,i-1))**2))
1424 c uy(k,i)=facy*(dc_norm(k,i+1)-costh*dc_norm(k,i))
1427 & dc_norm(k,i-1)*scalar(dc_norm(1,i),dc_norm(1,i))
1428 & -scalar(dc_norm(1,i),dc_norm(1,i-1))*dc_norm(k,i)
1431 c write (iout,*) 'facy',facy,
1432 c & 1.0d0/dsqrt(scalar(uy(1,i),uy(1,i)))
1433 facy=1.0d0/dsqrt(scalar(uy(1,i),uy(1,i)))
1435 uy(k,i)=facy*uy(k,i)
1437 C Compute the derivatives of uy
1440 uyder(k,j,1)=2*dc_norm(k,i-1)*dc_norm(j,i)
1441 & -dc_norm(k,i)*dc_norm(j,i-1)
1442 uyder(k,j,2)=-dc_norm(j,i)*dc_norm(k,i)
1444 c uyder(j,j,1)=uyder(j,j,1)-costh
1445 c uyder(j,j,2)=1.0d0+uyder(j,j,2)
1446 uyder(j,j,1)=uyder(j,j,1)
1447 & -scalar(dc_norm(1,i),dc_norm(1,i-1))
1448 uyder(j,j,2)=scalar(dc_norm(1,i),dc_norm(1,i))
1454 uygrad(l,k,j,i)=uyder(l,k,j)
1455 uzgrad(l,k,j,i)=uzder(l,k,j)
1459 call unormderiv(uy(1,i),uyder(1,1,1),facy,uygrad(1,1,1,i))
1460 call unormderiv(uy(1,i),uyder(1,1,2),facy,uygrad(1,1,2,i))
1461 call unormderiv(uz(1,i),uzder(1,1,1),fac,uzgrad(1,1,1,i))
1462 call unormderiv(uz(1,i),uzder(1,1,2),fac,uzgrad(1,1,2,i))
1465 C Compute the Z-axis
1466 call vecpr(dc_norm(1,i),dc_norm(1,i+1),uz(1,i))
1467 costh=dcos(pi-theta(i+2))
1468 fac=1.0d0/dsqrt(1.0d0-costh*costh)
1469 fac=1.0d0/dsqrt(scalar(uz(1,i),uz(1,i)))
1473 C Compute the derivatives of uz
1475 uzder(2,1,1)=-dc_norm(3,i+1)
1476 uzder(3,1,1)= dc_norm(2,i+1)
1477 uzder(1,2,1)= dc_norm(3,i+1)
1479 uzder(3,2,1)=-dc_norm(1,i+1)
1480 uzder(1,3,1)=-dc_norm(2,i+1)
1481 uzder(2,3,1)= dc_norm(1,i+1)
1484 uzder(2,1,2)= dc_norm(3,i)
1485 uzder(3,1,2)=-dc_norm(2,i)
1486 uzder(1,2,2)=-dc_norm(3,i)
1488 uzder(3,2,2)= dc_norm(1,i)
1489 uzder(1,3,2)= dc_norm(2,i)
1490 uzder(2,3,2)=-dc_norm(1,i)
1492 C Compute the Y-axis
1494 facy=1.0d0/dsqrt(scalar(dc_norm(1,i),dc_norm(1,i))*
1495 & (scalar(dc_norm(1,i+1),dc_norm(1,i+1))**2-
1496 & scalar(dc_norm(1,i),dc_norm(1,i+1))**2))
1498 c uy(k,i)=facy*(dc_norm(k,i+1)-costh*dc_norm(k,i))
1501 & dc_norm(k,i+1)*scalar(dc_norm(1,i),dc_norm(1,i))
1502 & -scalar(dc_norm(1,i),dc_norm(1,i+1))*dc_norm(k,i)
1505 c write (iout,*) 'facy',facy,
1506 c & 1.0d0/dsqrt(scalar(uy(1,i),uy(1,i)))
1507 facy=1.0d0/dsqrt(scalar(uy(1,i),uy(1,i)))
1509 uy(k,i)=facy*uy(k,i)
1511 C Compute the derivatives of uy
1514 uyder(k,j,1)=2*dc_norm(k,i+1)*dc_norm(j,i)
1515 & -dc_norm(k,i)*dc_norm(j,i+1)
1516 uyder(k,j,2)=-dc_norm(j,i)*dc_norm(k,i)
1518 c uyder(j,j,1)=uyder(j,j,1)-costh
1519 c uyder(j,j,2)=1.0d0+uyder(j,j,2)
1520 uyder(j,j,1)=uyder(j,j,1)
1521 & -scalar(dc_norm(1,i),dc_norm(1,i+1))
1522 uyder(j,j,2)=scalar(dc_norm(1,i),dc_norm(1,i))
1528 uygrad(l,k,j,i)=uyder(l,k,j)
1529 uzgrad(l,k,j,i)=uzder(l,k,j)
1533 call unormderiv(uy(1,i),uyder(1,1,1),facy,uygrad(1,1,1,i))
1534 call unormderiv(uy(1,i),uyder(1,1,2),facy,uygrad(1,1,2,i))
1535 call unormderiv(uz(1,i),uzder(1,1,1),fac,uzgrad(1,1,1,i))
1536 call unormderiv(uz(1,i),uzder(1,1,2),fac,uzgrad(1,1,2,i))
1543 uygrad(l,k,j,i)=vblinv*uygrad(l,k,j,i)
1544 uzgrad(l,k,j,i)=vblinv*uzgrad(l,k,j,i)
1551 C-----------------------------------------------------------------------------
1552 subroutine check_vecgrad
1553 implicit real*8 (a-h,o-z)
1554 include 'DIMENSIONS'
1555 include 'DIMENSIONS.ZSCOPT'
1556 include 'COMMON.IOUNITS'
1557 include 'COMMON.GEO'
1558 include 'COMMON.VAR'
1559 include 'COMMON.LOCAL'
1560 include 'COMMON.CHAIN'
1561 include 'COMMON.VECTORS'
1562 dimension uygradt(3,3,2,maxres),uzgradt(3,3,2,maxres)
1563 dimension uyt(3,maxres),uzt(3,maxres)
1564 dimension uygradn(3,3,2),uzgradn(3,3,2),erij(3)
1565 double precision delta /1.0d-7/
1568 crc write(iout,'(2i5,2(3f10.5,5x))') i,1,dc_norm(:,i)
1569 crc write(iout,'(2i5,2(3f10.5,5x))') i,2,uy(:,i)
1570 crc write(iout,'(2i5,2(3f10.5,5x)/)')i,3,uz(:,i)
1571 cd write(iout,'(2i5,2(3f10.5,5x))') i,1,
1572 cd & (dc_norm(if90,i),if90=1,3)
1573 cd write(iout,'(2i5,2(3f10.5,5x))') i,2,(uy(if90,i),if90=1,3)
1574 cd write(iout,'(2i5,2(3f10.5,5x)/)')i,3,(uz(if90,i),if90=1,3)
1575 cd write(iout,'(a)')
1581 uygradt(l,k,j,i)=uygrad(l,k,j,i)
1582 uzgradt(l,k,j,i)=uzgrad(l,k,j,i)
1595 cd write (iout,*) 'i=',i
1597 erij(k)=dc_norm(k,i)
1601 dc_norm(k,i)=erij(k)
1603 dc_norm(j,i)=dc_norm(j,i)+delta
1604 c fac=dsqrt(scalar(dc_norm(1,i),dc_norm(1,i)))
1606 c dc_norm(k,i)=dc_norm(k,i)/fac
1608 c write (iout,*) (dc_norm(k,i),k=1,3)
1609 c write (iout,*) (erij(k),k=1,3)
1612 uygradn(k,j,1)=(uy(k,i)-uyt(k,i))/delta
1613 uygradn(k,j,2)=(uy(k,i-1)-uyt(k,i-1))/delta
1614 uzgradn(k,j,1)=(uz(k,i)-uzt(k,i))/delta
1615 uzgradn(k,j,2)=(uz(k,i-1)-uzt(k,i-1))/delta
1617 c write (iout,'(i5,3f8.5,3x,3f8.5,5x,3f8.5,3x,3f8.5)')
1618 c & j,(uzgradt(k,j,1,i),k=1,3),(uzgradn(k,j,1),k=1,3),
1619 c & (uzgradt(k,j,2,i-1),k=1,3),(uzgradn(k,j,2),k=1,3)
1622 dc_norm(k,i)=erij(k)
1625 cd write (iout,'(i5,3f8.5,3x,3f8.5,5x,3f8.5,3x,3f8.5)')
1626 cd & k,(uygradt(k,l,1,i),l=1,3),(uygradn(k,l,1),l=1,3),
1627 cd & (uygradt(k,l,2,i-1),l=1,3),(uygradn(k,l,2),l=1,3)
1628 cd write (iout,'(i5,3f8.5,3x,3f8.5,5x,3f8.5,3x,3f8.5)')
1629 cd & k,(uzgradt(k,l,1,i),l=1,3),(uzgradn(k,l,1),l=1,3),
1630 cd & (uzgradt(k,l,2,i-1),l=1,3),(uzgradn(k,l,2),l=1,3)
1631 cd write (iout,'(a)')
1636 C--------------------------------------------------------------------------
1637 subroutine set_matrices
1638 implicit real*8 (a-h,o-z)
1639 include 'DIMENSIONS'
1640 include 'DIMENSIONS.ZSCOPT'
1641 include 'COMMON.IOUNITS'
1642 include 'COMMON.GEO'
1643 include 'COMMON.VAR'
1644 include 'COMMON.LOCAL'
1645 include 'COMMON.CHAIN'
1646 include 'COMMON.DERIV'
1647 include 'COMMON.INTERACT'
1648 include 'COMMON.CONTACTS'
1649 include 'COMMON.TORSION'
1650 include 'COMMON.VECTORS'
1651 include 'COMMON.FFIELD'
1652 double precision auxvec(2),auxmat(2,2)
1654 C Compute the virtual-bond-torsional-angle dependent quantities needed
1655 C to calculate the el-loc multibody terms of various order.
1658 if (i .lt. nres+1) then
1695 if (i .gt. 3 .and. i .lt. nres+1) then
1696 obrot_der(1,i-2)=-sin1
1697 obrot_der(2,i-2)= cos1
1698 Ugder(1,1,i-2)= sin1
1699 Ugder(1,2,i-2)=-cos1
1700 Ugder(2,1,i-2)=-cos1
1701 Ugder(2,2,i-2)=-sin1
1704 obrot2_der(1,i-2)=-dwasin2
1705 obrot2_der(2,i-2)= dwacos2
1706 Ug2der(1,1,i-2)= dwasin2
1707 Ug2der(1,2,i-2)=-dwacos2
1708 Ug2der(2,1,i-2)=-dwacos2
1709 Ug2der(2,2,i-2)=-dwasin2
1711 obrot_der(1,i-2)=0.0d0
1712 obrot_der(2,i-2)=0.0d0
1713 Ugder(1,1,i-2)=0.0d0
1714 Ugder(1,2,i-2)=0.0d0
1715 Ugder(2,1,i-2)=0.0d0
1716 Ugder(2,2,i-2)=0.0d0
1717 obrot2_der(1,i-2)=0.0d0
1718 obrot2_der(2,i-2)=0.0d0
1719 Ug2der(1,1,i-2)=0.0d0
1720 Ug2der(1,2,i-2)=0.0d0
1721 Ug2der(2,1,i-2)=0.0d0
1722 Ug2der(2,2,i-2)=0.0d0
1724 if (i.gt. iatel_s+2 .and. i.lt.iatel_e+5) then
1725 iti = itortyp(itype(i-2))
1729 if (i.gt. iatel_s+1 .and. i.lt.iatel_e+4) then
1730 iti1 = itortyp(itype(i-1))
1734 cd write (iout,*) '*******i',i,' iti1',iti
1735 cd write (iout,*) 'b1',b1(:,iti)
1736 cd write (iout,*) 'b2',b2(:,iti)
1737 cd write (iout,*) 'Ug',Ug(:,:,i-2)
1738 if (i .gt. iatel_s+2) then
1739 call matvec2(Ug(1,1,i-2),b2(1,iti),Ub2(1,i-2))
1740 call matmat2(EE(1,1,iti),Ug(1,1,i-2),EUg(1,1,i-2))
1741 call matmat2(CC(1,1,iti),Ug(1,1,i-2),CUg(1,1,i-2))
1742 call matmat2(DD(1,1,iti),Ug(1,1,i-2),DUg(1,1,i-2))
1743 call matmat2(Dtilde(1,1,iti),Ug2(1,1,i-2),DtUg2(1,1,i-2))
1744 call matvec2(Ctilde(1,1,iti1),obrot(1,i-2),Ctobr(1,i-2))
1745 call matvec2(Dtilde(1,1,iti),obrot2(1,i-2),Dtobr2(1,i-2))
1755 DtUg2(l,k,i-2)=0.0d0
1759 call matvec2(Ugder(1,1,i-2),b2(1,iti),Ub2der(1,i-2))
1760 call matmat2(EE(1,1,iti),Ugder(1,1,i-2),EUgder(1,1,i-2))
1761 call matmat2(CC(1,1,iti1),Ugder(1,1,i-2),CUgder(1,1,i-2))
1762 call matmat2(DD(1,1,iti),Ugder(1,1,i-2),DUgder(1,1,i-2))
1763 call matmat2(Dtilde(1,1,iti),Ug2der(1,1,i-2),DtUg2der(1,1,i-2))
1764 call matvec2(Ctilde(1,1,iti1),obrot_der(1,i-2),Ctobrder(1,i-2))
1765 call matvec2(Dtilde(1,1,iti),obrot2_der(1,i-2),Dtobr2der(1,i-2))
1767 muder(k,i-2)=Ub2der(k,i-2)
1769 if (i.gt. iatel_s+1 .and. i.lt.iatel_e+4) then
1770 iti1 = itortyp(itype(i-1))
1775 mu(k,i-2)=Ub2(k,i-2)+b1(k,iti1)
1777 C Vectors and matrices dependent on a single virtual-bond dihedral.
1778 call matvec2(DD(1,1,iti),b1tilde(1,iti1),auxvec(1))
1779 call matvec2(Ug2(1,1,i-2),auxvec(1),Ug2Db1t(1,i-2))
1780 call matvec2(Ug2der(1,1,i-2),auxvec(1),Ug2Db1tder(1,i-2))
1781 call matvec2(CC(1,1,iti1),Ub2(1,i-2),CUgb2(1,i-2))
1782 call matvec2(CC(1,1,iti1),Ub2der(1,i-2),CUgb2der(1,i-2))
1783 call matmat2(EUg(1,1,i-2),CC(1,1,iti1),EUgC(1,1,i-2))
1784 call matmat2(EUgder(1,1,i-2),CC(1,1,iti1),EUgCder(1,1,i-2))
1785 call matmat2(EUg(1,1,i-2),DD(1,1,iti1),EUgD(1,1,i-2))
1786 call matmat2(EUgder(1,1,i-2),DD(1,1,iti1),EUgDder(1,1,i-2))
1787 cd write (iout,*) 'i',i,' mu ',(mu(k,i-2),k=1,2),
1788 cd & ' mu1',(b1(k,i-2),k=1,2),' mu2',(Ub2(k,i-2),k=1,2)
1790 C Matrices dependent on two consecutive virtual-bond dihedrals.
1791 C The order of matrices is from left to right.
1793 call matmat2(DtUg2(1,1,i-1),EUg(1,1,i),DtUg2EUg(1,1,i))
1794 call matmat2(DtUg2der(1,1,i-1),EUg(1,1,i),DtUg2EUgder(1,1,1,i))
1795 call matmat2(DtUg2(1,1,i-1),EUgder(1,1,i),DtUg2EUgder(1,1,2,i))
1796 call transpose2(DtUg2(1,1,i-1),auxmat(1,1))
1797 call matmat2(auxmat(1,1),EUg(1,1,i),Ug2DtEUg(1,1,i))
1798 call matmat2(auxmat(1,1),EUgder(1,1,i),Ug2DtEUgder(1,1,2,i))
1799 call transpose2(DtUg2der(1,1,i-1),auxmat(1,1))
1800 call matmat2(auxmat(1,1),EUg(1,1,i),Ug2DtEUgder(1,1,1,i))
1803 cd iti = itortyp(itype(i))
1806 cd write (iout,'(2f10.5,5x,2f10.5,5x,2f10.5)')
1807 cd & (EE(j,k,iti),k=1,2),(Ug(j,k,i),k=1,2),(EUg(j,k,i),k=1,2)
1812 C--------------------------------------------------------------------------
1813 subroutine eelec(ees,evdw1,eel_loc,eello_turn3,eello_turn4)
1815 C This subroutine calculates the average interaction energy and its gradient
1816 C in the virtual-bond vectors between non-adjacent peptide groups, based on
1817 C the potential described in Liwo et al., Protein Sci., 1993, 2, 1715.
1818 C The potential depends both on the distance of peptide-group centers and on
1819 C the orientation of the CA-CA virtual bonds.
1821 implicit real*8 (a-h,o-z)
1822 include 'DIMENSIONS'
1823 include 'DIMENSIONS.ZSCOPT'
1824 include 'DIMENSIONS.FREE'
1825 include 'COMMON.CONTROL'
1826 include 'COMMON.IOUNITS'
1827 include 'COMMON.GEO'
1828 include 'COMMON.VAR'
1829 include 'COMMON.LOCAL'
1830 include 'COMMON.CHAIN'
1831 include 'COMMON.DERIV'
1832 include 'COMMON.INTERACT'
1833 include 'COMMON.CONTACTS'
1834 include 'COMMON.TORSION'
1835 include 'COMMON.VECTORS'
1836 include 'COMMON.FFIELD'
1837 dimension ggg(3),gggp(3),gggm(3),erij(3),dcosb(3),dcosg(3),
1838 & erder(3,3),uryg(3,3),urzg(3,3),vryg(3,3),vrzg(3,3)
1839 double precision acipa(2,2),agg(3,4),aggi(3,4),aggi1(3,4),
1840 & aggj(3,4),aggj1(3,4),a_temp(2,2),muij(4)
1841 common /locel/ a_temp,agg,aggi,aggi1,aggj,aggj1,j1
1842 c 4/26/02 - AL scaling factor for 1,4 repulsive VDW interactions
1843 double precision scal_el /0.5d0/
1845 C 13-go grudnia roku pamietnego...
1846 double precision unmat(3,3) /1.0d0,0.0d0,0.0d0,
1847 & 0.0d0,1.0d0,0.0d0,
1848 & 0.0d0,0.0d0,1.0d0/
1849 cd write(iout,*) 'In EELEC'
1851 cd write(iout,*) 'Type',i
1852 cd write(iout,*) 'B1',B1(:,i)
1853 cd write(iout,*) 'B2',B2(:,i)
1854 cd write(iout,*) 'CC',CC(:,:,i)
1855 cd write(iout,*) 'DD',DD(:,:,i)
1856 cd write(iout,*) 'EE',EE(:,:,i)
1858 cd call check_vecgrad
1860 if (icheckgrad.eq.1) then
1862 fac=1.0d0/dsqrt(scalar(dc(1,i),dc(1,i)))
1864 dc_norm(k,i)=dc(k,i)*fac
1866 c write (iout,*) 'i',i,' fac',fac
1869 if (wel_loc.gt.0.0d0 .or. wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0
1870 & .or. wcorr6.gt.0.0d0 .or. wturn3.gt.0.0d0 .or.
1871 & wturn4.gt.0.0d0 .or. wturn6.gt.0.0d0) then
1872 cd if (wel_loc.gt.0.0d0) then
1873 if (icheckgrad.eq.1) then
1874 call vec_and_deriv_test
1881 cd write (iout,*) 'i=',i
1883 cd write (iout,'(i5,2f10.5)') k,uy(k,i),uz(k,i)
1886 cd write (iout,'(f10.5,2x,3f10.5,2x,3f10.5)')
1887 cd & uz(k,i),(uzgrad(k,l,1,i),l=1,3),(uzgrad(k,l,2,i),l=1,3)
1900 cd print '(a)','Enter EELEC'
1901 cd write (iout,*) 'iatel_s=',iatel_s,' iatel_e=',iatel_e
1903 gel_loc_loc(i)=0.0d0
1906 do i=iatel_s,iatel_e
1907 if (itel(i).eq.0) goto 1215
1911 dx_normi=dc_norm(1,i)
1912 dy_normi=dc_norm(2,i)
1913 dz_normi=dc_norm(3,i)
1914 xmedi=c(1,i)+0.5d0*dxi
1915 ymedi=c(2,i)+0.5d0*dyi
1916 zmedi=c(3,i)+0.5d0*dzi
1918 c write (iout,*) 'i',i,' ielstart',ielstart(i),' ielend',ielend(i)
1919 do j=ielstart(i),ielend(i)
1920 if (itel(j).eq.0) goto 1216
1924 if (j.eq.i+2 .and. itelj.eq.2) iteli=2
1925 aaa=app(iteli,itelj)
1926 bbb=bpp(iteli,itelj)
1927 C Diagnostics only!!!
1933 ael6i=ael6(iteli,itelj)
1934 ael3i=ael3(iteli,itelj)
1938 dx_normj=dc_norm(1,j)
1939 dy_normj=dc_norm(2,j)
1940 dz_normj=dc_norm(3,j)
1941 xj=c(1,j)+0.5D0*dxj-xmedi
1942 yj=c(2,j)+0.5D0*dyj-ymedi
1943 zj=c(3,j)+0.5D0*dzj-zmedi
1944 rij=xj*xj+yj*yj+zj*zj
1950 cosa=dx_normi*dx_normj+dy_normi*dy_normj+dz_normi*dz_normj
1951 cosb=(xj*dx_normi+yj*dy_normi+zj*dz_normi)*rmij
1952 cosg=(xj*dx_normj+yj*dy_normj+zj*dz_normj)*rmij
1953 fac=cosa-3.0D0*cosb*cosg
1955 c 4/26/02 - AL scaling down 1,4 repulsive VDW interactions
1956 if (j.eq.i+2) ev1=scal_el*ev1
1961 el1=fac3*(4.0D0+fac*fac-3.0D0*(cosb*cosb+cosg*cosg))
1964 c write (iout,*) "i",i,iteli," j",j,itelj," eesij",eesij
1965 C 12/26/95 - for the evaluation of multi-body H-bonding interactions
1966 ees0ij=4.0D0+fac*fac-3.0D0*(cosb*cosb+cosg*cosg)
1969 cd write(iout,'(2(2i3,2x),7(1pd12.4)/2(3(1pd12.4),5x)/)')
1970 cd & iteli,i,itelj,j,aaa,bbb,ael6i,ael3i,
1971 cd & 1.0D0/dsqrt(rrmij),evdwij,eesij,
1972 cd & xmedi,ymedi,zmedi,xj,yj,zj
1974 C Calculate contributions to the Cartesian gradient.
1977 facvdw=-6*rrmij*(ev1+evdwij)
1978 facel=-3*rrmij*(el1+eesij)
1985 * Radial derivatives. First process both termini of the fragment (i,j)
1992 gelc(k,i)=gelc(k,i)+ghalf
1993 gelc(k,j)=gelc(k,j)+ghalf
1996 * Loop over residues i+1 thru j-1.
2000 gelc(l,k)=gelc(l,k)+ggg(l)
2008 gvdwpp(k,i)=gvdwpp(k,i)+ghalf
2009 gvdwpp(k,j)=gvdwpp(k,j)+ghalf
2012 * Loop over residues i+1 thru j-1.
2016 gvdwpp(l,k)=gvdwpp(l,k)+ggg(l)
2023 fac=-3*rrmij*(facvdw+facvdw+facel)
2029 * Radial derivatives. First process both termini of the fragment (i,j)
2036 gelc(k,i)=gelc(k,i)+ghalf
2037 gelc(k,j)=gelc(k,j)+ghalf
2040 * Loop over residues i+1 thru j-1.
2044 gelc(l,k)=gelc(l,k)+ggg(l)
2051 ecosa=2.0D0*fac3*fac1+fac4
2054 ecosb=(fac3*(fac1*cosg+cosb)+cosg*fac4)
2055 ecosg=(fac3*(fac1*cosb+cosg)+cosb*fac4)
2057 dcosb(k)=rmij*(dc_norm(k,i)-erij(k)*cosb)
2058 dcosg(k)=rmij*(dc_norm(k,j)-erij(k)*cosg)
2060 cd print '(2i3,2(3(1pd14.5),3x))',i,j,(dcosb(k),k=1,3),
2061 cd & (dcosg(k),k=1,3)
2063 ggg(k)=ecosb*dcosb(k)+ecosg*dcosg(k)
2067 gelc(k,i)=gelc(k,i)+ghalf
2068 & +(ecosa*(dc_norm(k,j)-cosa*dc_norm(k,i))
2069 & + ecosb*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1)
2070 gelc(k,j)=gelc(k,j)+ghalf
2071 & +(ecosa*(dc_norm(k,i)-cosa*dc_norm(k,j))
2072 & + ecosg*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1)
2076 gelc(l,k)=gelc(l,k)+ggg(l)
2081 IF (wel_loc.gt.0.0d0 .or. wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0
2082 & .or. wcorr6.gt.0.0d0 .or. wturn3.gt.0.0d0
2083 & .or. wturn4.gt.0.0d0 .or. wturn6.gt.0.0d0) THEN
2085 C 9/25/99 Mixed third-order local-electrostatic terms. The local-interaction
2086 C energy of a peptide unit is assumed in the form of a second-order
2087 C Fourier series in the angles lambda1 and lambda2 (see Nishikawa et al.
2088 C Macromolecules, 1974, 7, 797-806 for definition). This correlation terms
2089 C are computed for EVERY pair of non-contiguous peptide groups.
2091 if (j.lt.nres-1) then
2102 muij(kkk)=mu(k,i)*mu(l,j)
2105 cd write (iout,*) 'EELEC: i',i,' j',j
2106 cd write (iout,*) 'j',j,' j1',j1,' j2',j2
2107 cd write(iout,*) 'muij',muij
2108 ury=scalar(uy(1,i),erij)
2109 urz=scalar(uz(1,i),erij)
2110 vry=scalar(uy(1,j),erij)
2111 vrz=scalar(uz(1,j),erij)
2112 a22=scalar(uy(1,i),uy(1,j))-3*ury*vry
2113 a23=scalar(uy(1,i),uz(1,j))-3*ury*vrz
2114 a32=scalar(uz(1,i),uy(1,j))-3*urz*vry
2115 a33=scalar(uz(1,i),uz(1,j))-3*urz*vrz
2116 C For diagnostics only
2121 fac=dsqrt(-ael6i)*r3ij
2122 cd write (2,*) 'fac=',fac
2123 C For diagnostics only
2129 cd write (iout,'(4i5,4f10.5)')
2130 cd & i,itortyp(itype(i)),j,itortyp(itype(j)),a22,a23,a32,a33
2131 cd write (iout,'(6f10.5)') (muij(k),k=1,4),fac,eel_loc_ij
2132 cd write (iout,'(2(3f10.5,5x)/2(3f10.5,5x))') (uy(k,i),k=1,3),
2133 cd & (uz(k,i),k=1,3),(uy(k,j),k=1,3),(uz(k,j),k=1,3)
2134 cd write (iout,'(4f10.5)')
2135 cd & scalar(uy(1,i),uy(1,j)),scalar(uy(1,i),uz(1,j)),
2136 cd & scalar(uz(1,i),uy(1,j)),scalar(uz(1,i),uz(1,j))
2137 cd write (iout,'(4f10.5)') ury,urz,vry,vrz
2138 cd write (iout,'(2i3,9f10.5/)') i,j,
2139 cd & fac22,a22,fac23,a23,fac32,a32,fac33,a33,eel_loc_ij
2141 C Derivatives of the elements of A in virtual-bond vectors
2142 call unormderiv(erij(1),unmat(1,1),rmij,erder(1,1))
2149 uryg(k,1)=scalar(erder(1,k),uy(1,i))
2150 uryg(k,2)=scalar(uygrad(1,k,1,i),erij(1))
2151 uryg(k,3)=scalar(uygrad(1,k,2,i),erij(1))
2152 urzg(k,1)=scalar(erder(1,k),uz(1,i))
2153 urzg(k,2)=scalar(uzgrad(1,k,1,i),erij(1))
2154 urzg(k,3)=scalar(uzgrad(1,k,2,i),erij(1))
2155 vryg(k,1)=scalar(erder(1,k),uy(1,j))
2156 vryg(k,2)=scalar(uygrad(1,k,1,j),erij(1))
2157 vryg(k,3)=scalar(uygrad(1,k,2,j),erij(1))
2158 vrzg(k,1)=scalar(erder(1,k),uz(1,j))
2159 vrzg(k,2)=scalar(uzgrad(1,k,1,j),erij(1))
2160 vrzg(k,3)=scalar(uzgrad(1,k,2,j),erij(1))
2170 C Compute radial contributions to the gradient
2192 C Add the contributions coming from er
2195 agg(k,1)=agg(k,1)+fac3*(uryg(k,1)*vry+vryg(k,1)*ury)
2196 agg(k,2)=agg(k,2)+fac3*(uryg(k,1)*vrz+vrzg(k,1)*ury)
2197 agg(k,3)=agg(k,3)+fac3*(urzg(k,1)*vry+vryg(k,1)*urz)
2198 agg(k,4)=agg(k,4)+fac3*(urzg(k,1)*vrz+vrzg(k,1)*urz)
2201 C Derivatives in DC(i)
2202 ghalf1=0.5d0*agg(k,1)
2203 ghalf2=0.5d0*agg(k,2)
2204 ghalf3=0.5d0*agg(k,3)
2205 ghalf4=0.5d0*agg(k,4)
2206 aggi(k,1)=fac*(scalar(uygrad(1,k,1,i),uy(1,j))
2207 & -3.0d0*uryg(k,2)*vry)+ghalf1
2208 aggi(k,2)=fac*(scalar(uygrad(1,k,1,i),uz(1,j))
2209 & -3.0d0*uryg(k,2)*vrz)+ghalf2
2210 aggi(k,3)=fac*(scalar(uzgrad(1,k,1,i),uy(1,j))
2211 & -3.0d0*urzg(k,2)*vry)+ghalf3
2212 aggi(k,4)=fac*(scalar(uzgrad(1,k,1,i),uz(1,j))
2213 & -3.0d0*urzg(k,2)*vrz)+ghalf4
2214 C Derivatives in DC(i+1)
2215 aggi1(k,1)=fac*(scalar(uygrad(1,k,2,i),uy(1,j))
2216 & -3.0d0*uryg(k,3)*vry)+agg(k,1)
2217 aggi1(k,2)=fac*(scalar(uygrad(1,k,2,i),uz(1,j))
2218 & -3.0d0*uryg(k,3)*vrz)+agg(k,2)
2219 aggi1(k,3)=fac*(scalar(uzgrad(1,k,2,i),uy(1,j))
2220 & -3.0d0*urzg(k,3)*vry)+agg(k,3)
2221 aggi1(k,4)=fac*(scalar(uzgrad(1,k,2,i),uz(1,j))
2222 & -3.0d0*urzg(k,3)*vrz)+agg(k,4)
2223 C Derivatives in DC(j)
2224 aggj(k,1)=fac*(scalar(uygrad(1,k,1,j),uy(1,i))
2225 & -3.0d0*vryg(k,2)*ury)+ghalf1
2226 aggj(k,2)=fac*(scalar(uzgrad(1,k,1,j),uy(1,i))
2227 & -3.0d0*vrzg(k,2)*ury)+ghalf2
2228 aggj(k,3)=fac*(scalar(uygrad(1,k,1,j),uz(1,i))
2229 & -3.0d0*vryg(k,2)*urz)+ghalf3
2230 aggj(k,4)=fac*(scalar(uzgrad(1,k,1,j),uz(1,i))
2231 & -3.0d0*vrzg(k,2)*urz)+ghalf4
2232 C Derivatives in DC(j+1) or DC(nres-1)
2233 aggj1(k,1)=fac*(scalar(uygrad(1,k,2,j),uy(1,i))
2234 & -3.0d0*vryg(k,3)*ury)
2235 aggj1(k,2)=fac*(scalar(uzgrad(1,k,2,j),uy(1,i))
2236 & -3.0d0*vrzg(k,3)*ury)
2237 aggj1(k,3)=fac*(scalar(uygrad(1,k,2,j),uz(1,i))
2238 & -3.0d0*vryg(k,3)*urz)
2239 aggj1(k,4)=fac*(scalar(uzgrad(1,k,2,j),uz(1,i))
2240 & -3.0d0*vrzg(k,3)*urz)
2245 C Derivatives in DC(i+1)
2246 cd aggi1(k,1)=agg(k,1)
2247 cd aggi1(k,2)=agg(k,2)
2248 cd aggi1(k,3)=agg(k,3)
2249 cd aggi1(k,4)=agg(k,4)
2250 C Derivatives in DC(j)
2255 C Derivatives in DC(j+1)
2260 if (j.eq.nres-1 .and. i.lt.j-2) then
2262 aggj1(k,l)=aggj1(k,l)+agg(k,l)
2263 cd aggj1(k,l)=agg(k,l)
2269 C Check the loc-el terms by numerical integration
2279 aggi(k,l)=-aggi(k,l)
2280 aggi1(k,l)=-aggi1(k,l)
2281 aggj(k,l)=-aggj(k,l)
2282 aggj1(k,l)=-aggj1(k,l)
2285 if (j.lt.nres-1) then
2291 aggi(k,l)=-aggi(k,l)
2292 aggi1(k,l)=-aggi1(k,l)
2293 aggj(k,l)=-aggj(k,l)
2294 aggj1(k,l)=-aggj1(k,l)
2305 aggi(k,l)=-aggi(k,l)
2306 aggi1(k,l)=-aggi1(k,l)
2307 aggj(k,l)=-aggj(k,l)
2308 aggj1(k,l)=-aggj1(k,l)
2314 IF (wel_loc.gt.0.0d0) THEN
2315 C Contribution to the local-electrostatic energy coming from the i-j pair
2316 eel_loc_ij=a22*muij(1)+a23*muij(2)+a32*muij(3)
2318 cd write (iout,*) 'i',i,' j',j,' eel_loc_ij',eel_loc_ij
2319 cd write (iout,*) a22,muij(1),a23,muij(2),a32,muij(3)
2320 eel_loc=eel_loc+eel_loc_ij
2321 C Partial derivatives in virtual-bond dihedral angles gamma
2324 & gel_loc_loc(i-1)=gel_loc_loc(i-1)+
2325 & a22*muder(1,i)*mu(1,j)+a23*muder(1,i)*mu(2,j)
2326 & +a32*muder(2,i)*mu(1,j)+a33*muder(2,i)*mu(2,j)
2327 gel_loc_loc(j-1)=gel_loc_loc(j-1)+
2328 & a22*mu(1,i)*muder(1,j)+a23*mu(1,i)*muder(2,j)
2329 & +a32*mu(2,i)*muder(1,j)+a33*mu(2,i)*muder(2,j)
2330 cd call checkint3(i,j,mu1,mu2,a22,a23,a32,a33,acipa,eel_loc_ij)
2331 cd write(iout,*) 'agg ',agg
2332 cd write(iout,*) 'aggi ',aggi
2333 cd write(iout,*) 'aggi1',aggi1
2334 cd write(iout,*) 'aggj ',aggj
2335 cd write(iout,*) 'aggj1',aggj1
2337 C Derivatives of eello in DC(i+1) thru DC(j-1) or DC(nres-2)
2339 ggg(l)=agg(l,1)*muij(1)+
2340 & agg(l,2)*muij(2)+agg(l,3)*muij(3)+agg(l,4)*muij(4)
2344 gel_loc(l,k)=gel_loc(l,k)+ggg(l)
2347 C Remaining derivatives of eello
2349 gel_loc(l,i)=gel_loc(l,i)+aggi(l,1)*muij(1)+
2350 & aggi(l,2)*muij(2)+aggi(l,3)*muij(3)+aggi(l,4)*muij(4)
2351 gel_loc(l,i+1)=gel_loc(l,i+1)+aggi1(l,1)*muij(1)+
2352 & aggi1(l,2)*muij(2)+aggi1(l,3)*muij(3)+aggi1(l,4)*muij(4)
2353 gel_loc(l,j)=gel_loc(l,j)+aggj(l,1)*muij(1)+
2354 & aggj(l,2)*muij(2)+aggj(l,3)*muij(3)+aggj(l,4)*muij(4)
2355 gel_loc(l,j1)=gel_loc(l,j1)+aggj1(l,1)*muij(1)+
2356 & aggj1(l,2)*muij(2)+aggj1(l,3)*muij(3)+aggj1(l,4)*muij(4)
2360 if (wturn3.gt.0.0d0 .or. wturn4.gt.0.0d0) then
2361 C Contributions from turns
2366 call eturn34(i,j,eello_turn3,eello_turn4)
2368 C Change 12/26/95 to calculate four-body contributions to H-bonding energy
2369 if (j.gt.i+1 .and. num_conti.le.maxconts) then
2371 C Calculate the contact function. The ith column of the array JCONT will
2372 C contain the numbers of atoms that make contacts with the atom I (of numbers
2373 C greater than I). The arrays FACONT and GACONT will contain the values of
2374 C the contact function and its derivative.
2375 c r0ij=1.02D0*rpp(iteli,itelj)
2376 c r0ij=1.11D0*rpp(iteli,itelj)
2377 r0ij=2.20D0*rpp(iteli,itelj)
2378 c r0ij=1.55D0*rpp(iteli,itelj)
2379 call gcont(rij,r0ij,1.0D0,0.2d0*r0ij,fcont,fprimcont)
2380 if (fcont.gt.0.0D0) then
2381 num_conti=num_conti+1
2382 if (num_conti.gt.maxconts) then
2383 write (iout,*) 'WARNING - max. # of contacts exceeded;',
2384 & ' will skip next contacts for this conf.'
2386 jcont_hb(num_conti,i)=j
2387 IF (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or.
2388 & wcorr6.gt.0.0d0 .or. wturn6.gt.0.0d0) THEN
2389 C 9/30/99 (AL) - store components necessary to evaluate higher-order loc-el
2391 d_cont(num_conti,i)=rij
2392 cd write (2,'(3e15.5)') rij,r0ij+0.2d0*r0ij,rij
2393 C --- Electrostatic-interaction matrix ---
2394 a_chuj(1,1,num_conti,i)=a22
2395 a_chuj(1,2,num_conti,i)=a23
2396 a_chuj(2,1,num_conti,i)=a32
2397 a_chuj(2,2,num_conti,i)=a33
2398 C --- Gradient of rij
2400 grij_hb_cont(kkk,num_conti,i)=erij(kkk)
2403 c a_chuj(1,1,num_conti,i)=-0.61d0
2404 c a_chuj(1,2,num_conti,i)= 0.4d0
2405 c a_chuj(2,1,num_conti,i)= 0.65d0
2406 c a_chuj(2,2,num_conti,i)= 0.50d0
2407 c else if (i.eq.2) then
2408 c a_chuj(1,1,num_conti,i)= 0.0d0
2409 c a_chuj(1,2,num_conti,i)= 0.0d0
2410 c a_chuj(2,1,num_conti,i)= 0.0d0
2411 c a_chuj(2,2,num_conti,i)= 0.0d0
2413 C --- and its gradients
2414 cd write (iout,*) 'i',i,' j',j
2416 cd write (iout,*) 'iii 1 kkk',kkk
2417 cd write (iout,*) agg(kkk,:)
2420 cd write (iout,*) 'iii 2 kkk',kkk
2421 cd write (iout,*) aggi(kkk,:)
2424 cd write (iout,*) 'iii 3 kkk',kkk
2425 cd write (iout,*) aggi1(kkk,:)
2428 cd write (iout,*) 'iii 4 kkk',kkk
2429 cd write (iout,*) aggj(kkk,:)
2432 cd write (iout,*) 'iii 5 kkk',kkk
2433 cd write (iout,*) aggj1(kkk,:)
2440 a_chuj_der(k,l,m,1,num_conti,i)=agg(m,kkll)
2441 a_chuj_der(k,l,m,2,num_conti,i)=aggi(m,kkll)
2442 a_chuj_der(k,l,m,3,num_conti,i)=aggi1(m,kkll)
2443 a_chuj_der(k,l,m,4,num_conti,i)=aggj(m,kkll)
2444 a_chuj_der(k,l,m,5,num_conti,i)=aggj1(m,kkll)
2446 c a_chuj_der(k,l,m,mm,num_conti,i)=0.0d0
2452 IF (wcorr4.eq.0.0d0 .and. wcorr.gt.0.0d0) THEN
2453 C Calculate contact energies
2455 wij=cosa-3.0D0*cosb*cosg
2458 c fac3=dsqrt(-ael6i)/r0ij**3
2459 fac3=dsqrt(-ael6i)*r3ij
2460 ees0pij=dsqrt(4.0D0+cosa4+wij*wij-3.0D0*cosbg1*cosbg1)
2461 ees0mij=dsqrt(4.0D0-cosa4+wij*wij-3.0D0*cosbg2*cosbg2)
2463 ees0p(num_conti,i)=0.5D0*fac3*(ees0pij+ees0mij)
2464 ees0m(num_conti,i)=0.5D0*fac3*(ees0pij-ees0mij)
2465 C Diagnostics. Comment out or remove after debugging!
2466 c ees0p(num_conti,i)=0.5D0*fac3*ees0pij
2467 c ees0m(num_conti,i)=0.5D0*fac3*ees0mij
2468 c ees0m(num_conti,i)=0.0D0
2470 c write (iout,*) 'i=',i,' j=',j,' rij=',rij,' r0ij=',r0ij,
2471 c & ' ees0ij=',ees0p(num_conti,i),ees0m(num_conti,i),' fcont=',fcont
2472 facont_hb(num_conti,i)=fcont
2474 C Angular derivatives of the contact function
2475 ees0pij1=fac3/ees0pij
2476 ees0mij1=fac3/ees0mij
2477 fac3p=-3.0D0*fac3*rrmij
2478 ees0pijp=0.5D0*fac3p*(ees0pij+ees0mij)
2479 ees0mijp=0.5D0*fac3p*(ees0pij-ees0mij)
2481 ecosa1= ees0pij1*( 1.0D0+0.5D0*wij)
2482 ecosb1=-1.5D0*ees0pij1*(wij*cosg+cosbg1)
2483 ecosg1=-1.5D0*ees0pij1*(wij*cosb+cosbg1)
2484 ecosa2= ees0mij1*(-1.0D0+0.5D0*wij)
2485 ecosb2=-1.5D0*ees0mij1*(wij*cosg+cosbg2)
2486 ecosg2=-1.5D0*ees0mij1*(wij*cosb-cosbg2)
2487 ecosap=ecosa1+ecosa2
2488 ecosbp=ecosb1+ecosb2
2489 ecosgp=ecosg1+ecosg2
2490 ecosam=ecosa1-ecosa2
2491 ecosbm=ecosb1-ecosb2
2492 ecosgm=ecosg1-ecosg2
2501 fprimcont=fprimcont/rij
2502 cd facont_hb(num_conti,i)=1.0D0
2503 C Following line is for diagnostics.
2506 dcosb(k)=rmij*(dc_norm(k,i)-erij(k)*cosb)
2507 dcosg(k)=rmij*(dc_norm(k,j)-erij(k)*cosg)
2510 gggp(k)=ecosbp*dcosb(k)+ecosgp*dcosg(k)
2511 gggm(k)=ecosbm*dcosb(k)+ecosgm*dcosg(k)
2513 gggp(1)=gggp(1)+ees0pijp*xj
2514 gggp(2)=gggp(2)+ees0pijp*yj
2515 gggp(3)=gggp(3)+ees0pijp*zj
2516 gggm(1)=gggm(1)+ees0mijp*xj
2517 gggm(2)=gggm(2)+ees0mijp*yj
2518 gggm(3)=gggm(3)+ees0mijp*zj
2519 C Derivatives due to the contact function
2520 gacont_hbr(1,num_conti,i)=fprimcont*xj
2521 gacont_hbr(2,num_conti,i)=fprimcont*yj
2522 gacont_hbr(3,num_conti,i)=fprimcont*zj
2524 ghalfp=0.5D0*gggp(k)
2525 ghalfm=0.5D0*gggm(k)
2526 gacontp_hb1(k,num_conti,i)=ghalfp
2527 & +(ecosap*(dc_norm(k,j)-cosa*dc_norm(k,i))
2528 & + ecosbp*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1)
2529 gacontp_hb2(k,num_conti,i)=ghalfp
2530 & +(ecosap*(dc_norm(k,i)-cosa*dc_norm(k,j))
2531 & + ecosgp*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1)
2532 gacontp_hb3(k,num_conti,i)=gggp(k)
2533 gacontm_hb1(k,num_conti,i)=ghalfm
2534 & +(ecosam*(dc_norm(k,j)-cosa*dc_norm(k,i))
2535 & + ecosbm*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1)
2536 gacontm_hb2(k,num_conti,i)=ghalfm
2537 & +(ecosam*(dc_norm(k,i)-cosa*dc_norm(k,j))
2538 & + ecosgm*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1)
2539 gacontm_hb3(k,num_conti,i)=gggm(k)
2542 C Diagnostics. Comment out or remove after debugging!
2544 cdiag gacontp_hb1(k,num_conti,i)=0.0D0
2545 cdiag gacontp_hb2(k,num_conti,i)=0.0D0
2546 cdiag gacontp_hb3(k,num_conti,i)=0.0D0
2547 cdiag gacontm_hb1(k,num_conti,i)=0.0D0
2548 cdiag gacontm_hb2(k,num_conti,i)=0.0D0
2549 cdiag gacontm_hb3(k,num_conti,i)=0.0D0
2552 endif ! num_conti.le.maxconts
2557 num_cont_hb(i)=num_conti
2561 cd write (iout,'(i3,3f10.5,5x,3f10.5)')
2562 cd & i,(gel_loc(k,i),k=1,3),gel_loc_loc(i)
2564 c 12/7/99 Adam eello_turn3 will be considered as a separate energy term
2565 ccc eel_loc=eel_loc+eello_turn3
2568 C-----------------------------------------------------------------------------
2569 subroutine eturn34(i,j,eello_turn3,eello_turn4)
2570 C Third- and fourth-order contributions from turns
2571 implicit real*8 (a-h,o-z)
2572 include 'DIMENSIONS'
2573 include 'DIMENSIONS.ZSCOPT'
2574 include 'COMMON.IOUNITS'
2575 include 'COMMON.GEO'
2576 include 'COMMON.VAR'
2577 include 'COMMON.LOCAL'
2578 include 'COMMON.CHAIN'
2579 include 'COMMON.DERIV'
2580 include 'COMMON.INTERACT'
2581 include 'COMMON.CONTACTS'
2582 include 'COMMON.TORSION'
2583 include 'COMMON.VECTORS'
2584 include 'COMMON.FFIELD'
2586 double precision auxmat(2,2),auxmat1(2,2),auxmat2(2,2),pizda(2,2),
2587 & e1t(2,2),e2t(2,2),e3t(2,2),e1tder(2,2),e2tder(2,2),e3tder(2,2),
2588 & e1a(2,2),ae3(2,2),ae3e2(2,2),auxvec(2),auxvec1(2)
2589 double precision agg(3,4),aggi(3,4),aggi1(3,4),
2590 & aggj(3,4),aggj1(3,4),a_temp(2,2)
2591 common /locel/ a_temp,agg,aggi,aggi1,aggj,aggj1,j1,j2
2593 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
2595 C Third-order contributions
2602 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
2603 cd call checkint_turn3(i,a_temp,eello_turn3_num)
2604 call matmat2(EUg(1,1,i+1),EUg(1,1,i+2),auxmat(1,1))
2605 call transpose2(auxmat(1,1),auxmat1(1,1))
2606 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
2607 eello_turn3=eello_turn3+0.5d0*(pizda(1,1)+pizda(2,2))
2608 cd write (2,*) 'i,',i,' j',j,'eello_turn3',
2609 cd & 0.5d0*(pizda(1,1)+pizda(2,2)),
2610 cd & ' eello_turn3_num',4*eello_turn3_num
2612 C Derivatives in gamma(i)
2613 call matmat2(EUgder(1,1,i+1),EUg(1,1,i+2),auxmat2(1,1))
2614 call transpose2(auxmat2(1,1),pizda(1,1))
2615 call matmat2(a_temp(1,1),pizda(1,1),pizda(1,1))
2616 gel_loc_turn3(i)=gel_loc_turn3(i)+0.5d0*(pizda(1,1)+pizda(2,2))
2617 C Derivatives in gamma(i+1)
2618 call matmat2(EUg(1,1,i+1),EUgder(1,1,i+2),auxmat2(1,1))
2619 call transpose2(auxmat2(1,1),pizda(1,1))
2620 call matmat2(a_temp(1,1),pizda(1,1),pizda(1,1))
2621 gel_loc_turn3(i+1)=gel_loc_turn3(i+1)
2622 & +0.5d0*(pizda(1,1)+pizda(2,2))
2623 C Cartesian derivatives
2625 a_temp(1,1)=aggi(l,1)
2626 a_temp(1,2)=aggi(l,2)
2627 a_temp(2,1)=aggi(l,3)
2628 a_temp(2,2)=aggi(l,4)
2629 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
2630 gcorr3_turn(l,i)=gcorr3_turn(l,i)
2631 & +0.5d0*(pizda(1,1)+pizda(2,2))
2632 a_temp(1,1)=aggi1(l,1)
2633 a_temp(1,2)=aggi1(l,2)
2634 a_temp(2,1)=aggi1(l,3)
2635 a_temp(2,2)=aggi1(l,4)
2636 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
2637 gcorr3_turn(l,i+1)=gcorr3_turn(l,i+1)
2638 & +0.5d0*(pizda(1,1)+pizda(2,2))
2639 a_temp(1,1)=aggj(l,1)
2640 a_temp(1,2)=aggj(l,2)
2641 a_temp(2,1)=aggj(l,3)
2642 a_temp(2,2)=aggj(l,4)
2643 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
2644 gcorr3_turn(l,j)=gcorr3_turn(l,j)
2645 & +0.5d0*(pizda(1,1)+pizda(2,2))
2646 a_temp(1,1)=aggj1(l,1)
2647 a_temp(1,2)=aggj1(l,2)
2648 a_temp(2,1)=aggj1(l,3)
2649 a_temp(2,2)=aggj1(l,4)
2650 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
2651 gcorr3_turn(l,j1)=gcorr3_turn(l,j1)
2652 & +0.5d0*(pizda(1,1)+pizda(2,2))
2655 else if (j.eq.i+3) then
2656 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
2658 C Fourth-order contributions
2666 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
2667 cd call checkint_turn4(i,a_temp,eello_turn4_num)
2668 iti1=itortyp(itype(i+1))
2669 iti2=itortyp(itype(i+2))
2670 iti3=itortyp(itype(i+3))
2671 call transpose2(EUg(1,1,i+1),e1t(1,1))
2672 call transpose2(Eug(1,1,i+2),e2t(1,1))
2673 call transpose2(Eug(1,1,i+3),e3t(1,1))
2674 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
2675 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
2676 s1=scalar2(b1(1,iti2),auxvec(1))
2677 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
2678 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
2679 s2=scalar2(b1(1,iti1),auxvec(1))
2680 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
2681 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
2682 s3=0.5d0*(pizda(1,1)+pizda(2,2))
2683 eello_turn4=eello_turn4-(s1+s2+s3)
2684 cd write (2,*) 'i,',i,' j',j,'eello_turn4',-(s1+s2+s3),
2685 cd & ' eello_turn4_num',8*eello_turn4_num
2686 C Derivatives in gamma(i)
2688 call transpose2(EUgder(1,1,i+1),e1tder(1,1))
2689 call matmat2(e1tder(1,1),a_temp(1,1),auxmat(1,1))
2690 call matvec2(auxmat(1,1),Ub2(1,i+3),auxvec(1))
2691 s1=scalar2(b1(1,iti2),auxvec(1))
2692 call matmat2(ae3e2(1,1),e1tder(1,1),pizda(1,1))
2693 s3=0.5d0*(pizda(1,1)+pizda(2,2))
2694 gel_loc_turn4(i)=gel_loc_turn4(i)-(s1+s3)
2695 C Derivatives in gamma(i+1)
2696 call transpose2(EUgder(1,1,i+2),e2tder(1,1))
2697 call matvec2(ae3(1,1),Ub2der(1,i+2),auxvec(1))
2698 s2=scalar2(b1(1,iti1),auxvec(1))
2699 call matmat2(ae3(1,1),e2tder(1,1),auxmat(1,1))
2700 call matmat2(auxmat(1,1),e1t(1,1),pizda(1,1))
2701 s3=0.5d0*(pizda(1,1)+pizda(2,2))
2702 gel_loc_turn4(i+1)=gel_loc_turn4(i+1)-(s2+s3)
2703 C Derivatives in gamma(i+2)
2704 call transpose2(EUgder(1,1,i+3),e3tder(1,1))
2705 call matvec2(e1a(1,1),Ub2der(1,i+3),auxvec(1))
2706 s1=scalar2(b1(1,iti2),auxvec(1))
2707 call matmat2(a_temp(1,1),e3tder(1,1),auxmat(1,1))
2708 call matvec2(auxmat(1,1),Ub2(1,i+2),auxvec(1))
2709 s2=scalar2(b1(1,iti1),auxvec(1))
2710 call matmat2(auxmat(1,1),e2t(1,1),auxmat(1,1))
2711 call matmat2(auxmat(1,1),e1t(1,1),pizda(1,1))
2712 s3=0.5d0*(pizda(1,1)+pizda(2,2))
2713 gel_loc_turn4(i+2)=gel_loc_turn4(i+2)-(s1+s2+s3)
2714 C Cartesian derivatives
2715 C Derivatives of this turn contributions in DC(i+2)
2716 if (j.lt.nres-1) then
2718 a_temp(1,1)=agg(l,1)
2719 a_temp(1,2)=agg(l,2)
2720 a_temp(2,1)=agg(l,3)
2721 a_temp(2,2)=agg(l,4)
2722 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
2723 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
2724 s1=scalar2(b1(1,iti2),auxvec(1))
2725 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
2726 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
2727 s2=scalar2(b1(1,iti1),auxvec(1))
2728 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
2729 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
2730 s3=0.5d0*(pizda(1,1)+pizda(2,2))
2732 gcorr4_turn(l,i+2)=gcorr4_turn(l,i+2)-(s1+s2+s3)
2735 C Remaining derivatives of this turn contribution
2737 a_temp(1,1)=aggi(l,1)
2738 a_temp(1,2)=aggi(l,2)
2739 a_temp(2,1)=aggi(l,3)
2740 a_temp(2,2)=aggi(l,4)
2741 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
2742 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
2743 s1=scalar2(b1(1,iti2),auxvec(1))
2744 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
2745 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
2746 s2=scalar2(b1(1,iti1),auxvec(1))
2747 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
2748 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
2749 s3=0.5d0*(pizda(1,1)+pizda(2,2))
2750 gcorr4_turn(l,i)=gcorr4_turn(l,i)-(s1+s2+s3)
2751 a_temp(1,1)=aggi1(l,1)
2752 a_temp(1,2)=aggi1(l,2)
2753 a_temp(2,1)=aggi1(l,3)
2754 a_temp(2,2)=aggi1(l,4)
2755 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
2756 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
2757 s1=scalar2(b1(1,iti2),auxvec(1))
2758 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
2759 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
2760 s2=scalar2(b1(1,iti1),auxvec(1))
2761 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
2762 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
2763 s3=0.5d0*(pizda(1,1)+pizda(2,2))
2764 gcorr4_turn(l,i+1)=gcorr4_turn(l,i+1)-(s1+s2+s3)
2765 a_temp(1,1)=aggj(l,1)
2766 a_temp(1,2)=aggj(l,2)
2767 a_temp(2,1)=aggj(l,3)
2768 a_temp(2,2)=aggj(l,4)
2769 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
2770 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
2771 s1=scalar2(b1(1,iti2),auxvec(1))
2772 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
2773 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
2774 s2=scalar2(b1(1,iti1),auxvec(1))
2775 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
2776 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
2777 s3=0.5d0*(pizda(1,1)+pizda(2,2))
2778 gcorr4_turn(l,j)=gcorr4_turn(l,j)-(s1+s2+s3)
2779 a_temp(1,1)=aggj1(l,1)
2780 a_temp(1,2)=aggj1(l,2)
2781 a_temp(2,1)=aggj1(l,3)
2782 a_temp(2,2)=aggj1(l,4)
2783 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
2784 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
2785 s1=scalar2(b1(1,iti2),auxvec(1))
2786 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
2787 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
2788 s2=scalar2(b1(1,iti1),auxvec(1))
2789 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
2790 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
2791 s3=0.5d0*(pizda(1,1)+pizda(2,2))
2792 gcorr4_turn(l,j1)=gcorr4_turn(l,j1)-(s1+s2+s3)
2798 C-----------------------------------------------------------------------------
2799 subroutine vecpr(u,v,w)
2800 implicit real*8(a-h,o-z)
2801 dimension u(3),v(3),w(3)
2802 w(1)=u(2)*v(3)-u(3)*v(2)
2803 w(2)=-u(1)*v(3)+u(3)*v(1)
2804 w(3)=u(1)*v(2)-u(2)*v(1)
2807 C-----------------------------------------------------------------------------
2808 subroutine unormderiv(u,ugrad,unorm,ungrad)
2809 C This subroutine computes the derivatives of a normalized vector u, given
2810 C the derivatives computed without normalization conditions, ugrad. Returns
2813 double precision u(3),ugrad(3,3),unorm,ungrad(3,3)
2814 double precision vec(3)
2815 double precision scalar
2817 c write (2,*) 'ugrad',ugrad
2820 vec(i)=scalar(ugrad(1,i),u(1))
2822 c write (2,*) 'vec',vec
2825 ungrad(j,i)=(ugrad(j,i)-u(j)*vec(i))*unorm
2828 c write (2,*) 'ungrad',ungrad
2831 C-----------------------------------------------------------------------------
2832 subroutine escp(evdw2,evdw2_14)
2834 C This subroutine calculates the excluded-volume interaction energy between
2835 C peptide-group centers and side chains and its gradient in virtual-bond and
2836 C side-chain vectors.
2838 implicit real*8 (a-h,o-z)
2839 include 'DIMENSIONS'
2840 include 'DIMENSIONS.ZSCOPT'
2841 include 'COMMON.GEO'
2842 include 'COMMON.VAR'
2843 include 'COMMON.LOCAL'
2844 include 'COMMON.CHAIN'
2845 include 'COMMON.DERIV'
2846 include 'COMMON.INTERACT'
2847 include 'COMMON.FFIELD'
2848 include 'COMMON.IOUNITS'
2852 cd print '(a)','Enter ESCP'
2853 c write (iout,*) 'iatscp_s=',iatscp_s,' iatscp_e=',iatscp_e,
2854 c & ' scal14',scal14
2855 do i=iatscp_s,iatscp_e
2857 c write (iout,*) "i",i," iteli",iteli," nscp_gr",nscp_gr(i),
2858 c & " iscp",(iscpstart(i,j),iscpend(i,j),j=1,nscp_gr(i))
2859 if (iteli.eq.0) goto 1225
2860 xi=0.5D0*(c(1,i)+c(1,i+1))
2861 yi=0.5D0*(c(2,i)+c(2,i+1))
2862 zi=0.5D0*(c(3,i)+c(3,i+1))
2864 do iint=1,nscp_gr(i)
2866 do j=iscpstart(i,iint),iscpend(i,iint)
2868 C Uncomment following three lines for SC-p interactions
2872 C Uncomment following three lines for Ca-p interactions
2876 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
2878 e1=fac*fac*aad(itypj,iteli)
2879 e2=fac*bad(itypj,iteli)
2880 if (iabs(j-i) .le. 2) then
2883 evdw2_14=evdw2_14+e1+e2
2886 c write (iout,*) i,j,evdwij
2890 C Calculate contributions to the gradient in the virtual-bond and SC vectors.
2892 fac=-(evdwij+e1)*rrij
2897 cd write (iout,*) 'j<i'
2898 C Uncomment following three lines for SC-p interactions
2900 c gradx_scp(k,j)=gradx_scp(k,j)+ggg(k)
2903 cd write (iout,*) 'j>i'
2906 C Uncomment following line for SC-p interactions
2907 c gradx_scp(k,j)=gradx_scp(k,j)-ggg(k)
2911 gvdwc_scp(k,i)=gvdwc_scp(k,i)-0.5D0*ggg(k)
2915 cd write (iout,*) 'i=',i,' j=',j,' kstart=',kstart,' kend=',kend
2916 cd write (iout,*) ggg(1),ggg(2),ggg(3)
2919 gvdwc_scp(l,k)=gvdwc_scp(l,k)-ggg(l)
2929 gvdwc_scp(j,i)=expon*gvdwc_scp(j,i)
2930 gradx_scp(j,i)=expon*gradx_scp(j,i)
2933 C******************************************************************************
2937 C To save time the factor EXPON has been extracted from ALL components
2938 C of GVDWC and GRADX. Remember to multiply them by this factor before further
2941 C******************************************************************************
2944 C--------------------------------------------------------------------------
2945 subroutine edis(ehpb)
2947 C Evaluate bridge-strain energy and its gradient in virtual-bond and SC vectors.
2949 implicit real*8 (a-h,o-z)
2950 include 'DIMENSIONS'
2951 include 'COMMON.SBRIDGE'
2952 include 'COMMON.CHAIN'
2953 include 'COMMON.DERIV'
2954 include 'COMMON.VAR'
2955 include 'COMMON.INTERACT'
2956 include 'COMMON.IOUNITS'
2959 cd write(iout,*)'edis: nhpb=',nhpb,' fbr=',fbr
2960 cd write(iout,*)'link_start=',link_start,' link_end=',link_end
2961 if (link_end.eq.0) return
2962 do i=link_start,link_end
2963 C If ihpb(i) and jhpb(i) > NRES, this is a SC-SC distance, otherwise a
2964 C CA-CA distance used in regularization of structure.
2967 C iii and jjj point to the residues for which the distance is assigned.
2968 if (ii.gt.nres) then
2975 c write (iout,*) "i",i," ii",ii," iii",iii," jj",jj," jjj",jjj,
2976 c & dhpb(i),dhpb1(i),forcon(i)
2977 C 24/11/03 AL: SS bridges handled separately because of introducing a specific
2978 C distance and angle dependent SS bond potential.
2979 if (.not.dyn_ss .and. i.le.nss) then
2980 C 15/02/13 CC dynamic SSbond - additional check
2981 if (ii.gt.nres .and. itype(iii).eq.1 .and. itype(jjj).eq.1) then
2982 call ssbond_ene(iii,jjj,eij)
2985 cd write (iout,*) "eij",eij
2986 else if (ii.gt.nres .and. jj.gt.nres) then
2987 c Restraints from contact prediction
2989 if (dhpb1(i).gt.0.0d0) then
2990 ehpb=ehpb+2*forcon(i)*gnmr1(dd,dhpb(i),dhpb1(i))
2991 fac=forcon(i)*gnmr1prim(dd,dhpb(i),dhpb1(i))/dd
2992 c write (iout,*) "beta nmr",
2993 c & dd,2*forcon(i)*gnmr1(dd,dhpb(i),dhpb1(i))
2997 C Get the force constant corresponding to this distance.
2999 C Calculate the contribution to energy.
3000 ehpb=ehpb+waga*rdis*rdis
3001 c write (iout,*) "beta reg",dd,waga*rdis*rdis
3003 C Evaluate gradient.
3008 ggg(j)=fac*(c(j,jj)-c(j,ii))
3011 ghpbx(j,iii)=ghpbx(j,iii)-ggg(j)
3012 ghpbx(j,jjj)=ghpbx(j,jjj)+ggg(j)
3015 ghpbc(k,jjj)=ghpbc(k,jjj)+ggg(k)
3016 ghpbc(k,iii)=ghpbc(k,iii)-ggg(k)
3019 C Calculate the distance between the two points and its difference from the
3022 if (dhpb1(i).gt.0.0d0) then
3023 ehpb=ehpb+2*forcon(i)*gnmr1(dd,dhpb(i),dhpb1(i))
3024 fac=forcon(i)*gnmr1prim(dd,dhpb(i),dhpb1(i))/dd
3025 c write (iout,*) "alph nmr",
3026 c & dd,2*forcon(i)*gnmr1(dd,dhpb(i),dhpb1(i))
3029 C Get the force constant corresponding to this distance.
3031 C Calculate the contribution to energy.
3032 ehpb=ehpb+waga*rdis*rdis
3033 c write (iout,*) "alpha reg",dd,waga*rdis*rdis
3035 C Evaluate gradient.
3039 cd print *,'i=',i,' ii=',ii,' jj=',jj,' dhpb=',dhpb(i),' dd=',dd,
3040 cd & ' waga=',waga,' fac=',fac
3042 ggg(j)=fac*(c(j,jj)-c(j,ii))
3044 cd print '(i3,3(1pe14.5))',i,(ggg(j),j=1,3)
3045 C If this is a SC-SC distance, we need to calculate the contributions to the
3046 C Cartesian gradient in the SC vectors (ghpbx).
3049 ghpbx(j,iii)=ghpbx(j,iii)-ggg(j)
3050 ghpbx(j,jjj)=ghpbx(j,jjj)+ggg(j)
3054 ghpbc(k,jjj)=ghpbc(k,jjj)+ggg(k)
3055 ghpbc(k,iii)=ghpbc(k,iii)-ggg(k)
3062 C--------------------------------------------------------------------------
3063 subroutine ssbond_ene(i,j,eij)
3065 C Calculate the distance and angle dependent SS-bond potential energy
3066 C using a free-energy function derived based on RHF/6-31G** ab initio
3067 C calculations of diethyl disulfide.
3069 C A. Liwo and U. Kozlowska, 11/24/03
3071 implicit real*8 (a-h,o-z)
3072 include 'DIMENSIONS'
3073 include 'DIMENSIONS.ZSCOPT'
3074 include 'COMMON.SBRIDGE'
3075 include 'COMMON.CHAIN'
3076 include 'COMMON.DERIV'
3077 include 'COMMON.LOCAL'
3078 include 'COMMON.INTERACT'
3079 include 'COMMON.VAR'
3080 include 'COMMON.IOUNITS'
3081 double precision erij(3),dcosom1(3),dcosom2(3),gg(3)
3086 dxi=dc_norm(1,nres+i)
3087 dyi=dc_norm(2,nres+i)
3088 dzi=dc_norm(3,nres+i)
3089 dsci_inv=dsc_inv(itypi)
3091 dscj_inv=dsc_inv(itypj)
3095 dxj=dc_norm(1,nres+j)
3096 dyj=dc_norm(2,nres+j)
3097 dzj=dc_norm(3,nres+j)
3098 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
3103 om1=dxi*erij(1)+dyi*erij(2)+dzi*erij(3)
3104 om2=dxj*erij(1)+dyj*erij(2)+dzj*erij(3)
3105 om12=dxi*dxj+dyi*dyj+dzi*dzj
3107 dcosom1(k)=rij*(dc_norm(k,nres+i)-om1*erij(k))
3108 dcosom2(k)=rij*(dc_norm(k,nres+j)-om2*erij(k))
3114 deltat12=om2-om1+2.0d0
3116 eij=akcm*deltad*deltad+akth*(deltat1*deltat1+deltat2*deltat2)
3117 & +akct*deltad*deltat12+ebr
3118 c & +akct*deltad*deltat12
3119 & +v1ss*cosphi+v2ss*cosphi*cosphi+v3ss*cosphi*cosphi*cosphi
3120 write(iout,*) i,j,"rij",rij,"d0cm",d0cm," akcm",akcm," akth",akth,
3121 & " akct",akct," deltad",deltad," deltat",deltat1,deltat2,
3122 & " deltat12",deltat12," eij",eij,"ebr",ebr
3123 ed=2*akcm*deltad+akct*deltat12
3125 pom2=v1ss+2*v2ss*cosphi+3*v3ss*cosphi*cosphi
3126 eom1=-2*akth*deltat1-pom1-om2*pom2
3127 eom2= 2*akth*deltat2+pom1-om1*pom2
3130 gg(k)=ed*erij(k)+eom1*dcosom1(k)+eom2*dcosom2(k)
3133 ghpbx(k,i)=ghpbx(k,i)-gg(k)
3134 & +(eom12*dc_norm(k,nres+j)+eom1*erij(k))*dsci_inv
3135 ghpbx(k,j)=ghpbx(k,j)+gg(k)
3136 & +(eom12*dc_norm(k,nres+i)+eom2*erij(k))*dscj_inv
3139 C Calculate the components of the gradient in DC and X
3143 ghpbc(l,k)=ghpbc(l,k)+gg(l)
3148 C--------------------------------------------------------------------------
3149 c MODELLER restraint function
3150 subroutine e_modeller(ehomology_constr)
3151 implicit real*8 (a-h,o-z)
3152 include 'DIMENSIONS'
3153 include 'DIMENSIONS.ZSCOPT'
3154 include 'DIMENSIONS.FREE'
3155 integer nnn, i, j, k, ki, irec, l
3156 integer katy, odleglosci, test7
3157 real*8 odleg, odleg2, odleg3, kat, kat2, kat3, gdih(max_template)
3158 real*8 distance(max_template),distancek(max_template),
3159 & min_odl,godl(max_template),dih_diff(max_template)
3162 c FP - 30/10/2014 Temporary specifications for homology restraints
3164 double precision utheta_i,gutheta_i,sum_gtheta,sum_sgtheta,
3166 double precision, dimension (maxres) :: guscdiff,usc_diff
3167 double precision, dimension (max_template) ::
3168 & gtheta,dscdiff,uscdiffk,guscdiff2,guscdiff3,
3171 include 'COMMON.SBRIDGE'
3172 include 'COMMON.CHAIN'
3173 include 'COMMON.GEO'
3174 include 'COMMON.DERIV'
3175 include 'COMMON.LOCAL'
3176 include 'COMMON.INTERACT'
3177 include 'COMMON.VAR'
3178 include 'COMMON.IOUNITS'
3179 include 'COMMON.CONTROL'
3180 include 'COMMON.HOMRESTR'
3182 include 'COMMON.SETUP'
3183 include 'COMMON.NAMES'
3186 distancek(i)=9999999.9
3191 c Pseudo-energy and gradient from homology restraints (MODELLER-like
3193 C AL 5/2/14 - Introduce list of restraints
3194 c write(iout,*) "waga_theta",waga_theta,"waga_d",waga_d
3196 write(iout,*) "------- dist restrs start -------"
3198 do ii = link_start_homo,link_end_homo
3202 c write (iout,*) "dij(",i,j,") =",dij
3203 do k=1,constr_homology
3204 distance(k)=odl(k,ii)-dij
3205 c write (iout,*) "distance(",k,") =",distance(k)
3207 c For Gaussian-type Urestr
3209 distancek(k)=0.5d0*distance(k)**2*sigma_odl(k,ii) ! waga_dist rmvd from Gaussian argument
3210 c write (iout,*) "sigma_odl(",k,ii,") =",sigma_odl(k,ii)
3211 c write (iout,*) "distancek(",k,") =",distancek(k)
3212 c distancek(k)=0.5d0*waga_dist*distance(k)**2*sigma_odl(k,ii)
3214 c For Lorentzian-type Urestr
3216 if (waga_dist.lt.0.0d0) then
3217 sigma_odlir(k,ii)=dsqrt(1/sigma_odl(k,ii))
3218 distancek(k)=distance(k)**2/(sigma_odlir(k,ii)*
3219 & (distance(k)**2+sigma_odlir(k,ii)**2))
3223 min_odl=minval(distancek)
3224 c write (iout,* )"min_odl",min_odl
3226 write (iout,*) "ij dij",i,j,dij
3227 write (iout,*) "distance",(distance(k),k=1,constr_homology)
3228 write (iout,*) "distancek",(distancek(k),k=1,constr_homology)
3229 write (iout,* )"min_odl",min_odl
3232 do k=1,constr_homology
3233 c Nie wiem po co to liczycie jeszcze raz!
3234 c odleg3=-waga_dist(iset)*((distance(i,j,k)**2)/
3235 c & (2*(sigma_odl(i,j,k))**2))
3236 if (waga_dist.ge.0.0d0) then
3238 c For Gaussian-type Urestr
3240 godl(k)=dexp(-distancek(k)+min_odl)
3241 odleg2=odleg2+godl(k)
3243 c For Lorentzian-type Urestr
3246 odleg2=odleg2+distancek(k)
3249 ccc write(iout,779) i,j,k, "odleg2=",odleg2, "odleg3=", odleg3,
3250 ccc & "dEXP(odleg3)=", dEXP(odleg3),"distance(i,j,k)^2=",
3251 ccc & distance(i,j,k)**2, "dist(i+1,j+1)=", dist(i+1,j+1),
3252 ccc & "sigma_odl(i,j,k)=", sigma_odl(i,j,k)
3255 c write (iout,*) "godl",(godl(k),k=1,constr_homology) ! exponents
3256 c write (iout,*) "ii i j",ii,i,j," odleg2",odleg2 ! sum of exps
3258 write (iout,*) "godl",(godl(k),k=1,constr_homology) ! exponents
3259 write (iout,*) "ii i j",ii,i,j," odleg2",odleg2 ! sum of exps
3261 if (waga_dist.ge.0.0d0) then
3263 c For Gaussian-type Urestr
3265 odleg=odleg-dLOG(odleg2/constr_homology)+min_odl
3267 c For Lorentzian-type Urestr
3270 odleg=odleg+odleg2/constr_homology
3274 c write (iout,*) "odleg",odleg ! sum of -ln-s
3277 c For Gaussian-type Urestr
3279 if (waga_dist.ge.0.0d0) sum_godl=odleg2
3281 do k=1,constr_homology
3282 c godl=dexp(((-(distance(i,j,k)**2)/(2*(sigma_odl(i,j,k))**2))
3283 c & *waga_dist)+min_odl
3284 c sgodl=-godl(k)*distance(k)*sigma_odl(k,ii)*waga_dist
3286 if (waga_dist.ge.0.0d0) then
3287 c For Gaussian-type Urestr
3289 sgodl=-godl(k)*distance(k)*sigma_odl(k,ii) ! waga_dist rmvd
3291 c For Lorentzian-type Urestr
3294 sgodl=-2*sigma_odlir(k,ii)*(distance(k)/(distance(k)**2+
3295 & sigma_odlir(k,ii)**2)**2)
3297 sum_sgodl=sum_sgodl+sgodl
3299 c sgodl2=sgodl2+sgodl
3300 c write(iout,*) i, j, k, distance(i,j,k), "W GRADIENCIE1"
3301 c write(iout,*) "constr_homology=",constr_homology
3302 c write(iout,*) i, j, k, "TEST K"
3304 if (waga_dist.ge.0.0d0) then
3306 c For Gaussian-type Urestr
3308 grad_odl3=waga_homology(iset)*waga_dist
3309 & *sum_sgodl/(sum_godl*dij)
3311 c For Lorentzian-type Urestr
3314 c Original grad expr modified by analogy w Gaussian-type Urestr grad
3315 c grad_odl3=-waga_homology(iset)*waga_dist*sum_sgodl
3316 grad_odl3=-waga_homology(iset)*waga_dist*
3317 & sum_sgodl/(constr_homology*dij)
3320 c grad_odl3=sum_sgodl/(sum_godl*dij)
3323 c write(iout,*) i, j, k, distance(i,j,k), "W GRADIENCIE2"
3324 c write(iout,*) (distance(i,j,k)**2), (2*(sigma_odl(i,j,k))**2),
3325 c & (-(distance(i,j,k)**2)/(2*(sigma_odl(i,j,k))**2))
3327 ccc write(iout,*) godl, sgodl, grad_odl3
3329 c grad_odl=grad_odl+grad_odl3
3332 ggodl=grad_odl3*(c(jik,i)-c(jik,j))
3333 ccc write(iout,*) c(jik,i+1), c(jik,j+1), (c(jik,i+1)-c(jik,j+1))
3334 ccc write(iout,746) "GRAD_ODL_1", i, j, jik, ggodl,
3335 ccc & ghpbc(jik,i+1), ghpbc(jik,j+1)
3336 ghpbc(jik,i)=ghpbc(jik,i)+ggodl
3337 ghpbc(jik,j)=ghpbc(jik,j)-ggodl
3338 ccc write(iout,746) "GRAD_ODL_2", i, j, jik, ggodl,
3339 ccc & ghpbc(jik,i+1), ghpbc(jik,j+1)
3340 c if (i.eq.25.and.j.eq.27) then
3341 c write(iout,*) "jik",jik,"i",i,"j",j
3342 c write(iout,*) "sum_sgodl",sum_sgodl,"sgodl",sgodl
3343 c write(iout,*) "grad_odl3",grad_odl3
3344 c write(iout,*) "c(",jik,i,")",c(jik,i),"c(",jik,j,")",c(jik,j)
3345 c write(iout,*) "ggodl",ggodl
3346 c write(iout,*) "ghpbc(",jik,i,")",
3347 c & ghpbc(jik,i),"ghpbc(",jik,j,")",
3352 ccc write(iout,778)"TEST: odleg2=", odleg2, "DLOG(odleg2)=",
3353 ccc & dLOG(odleg2),"-odleg=", -odleg
3355 enddo ! ii-loop for dist
3357 write(iout,*) "------- dist restrs end -------"
3358 c if (waga_angle.eq.1.0d0 .or. waga_theta.eq.1.0d0 .or.
3359 c & waga_d.eq.1.0d0) call sum_gradient
3361 c Pseudo-energy and gradient from dihedral-angle restraints from
3362 c homology templates
3363 c write (iout,*) "End of distance loop"
3366 c write (iout,*) idihconstr_start_homo,idihconstr_end_homo
3368 write(iout,*) "------- dih restrs start -------"
3369 do i=idihconstr_start_homo,idihconstr_end_homo
3370 write (iout,*) "gloc_init(",i,icg,")",gloc(i,icg)
3373 do i=idihconstr_start_homo,idihconstr_end_homo
3375 c betai=beta(i,i+1,i+2,i+3)
3377 c write (iout,*) "betai =",betai
3378 do k=1,constr_homology
3379 dih_diff(k)=pinorm(dih(k,i)-betai)
3380 c write (iout,*) "dih_diff(",k,") =",dih_diff(k)
3381 c if (dih_diff(i,k).gt.3.14159) dih_diff(i,k)=
3382 c & -(6.28318-dih_diff(i,k))
3383 c if (dih_diff(i,k).lt.-3.14159) dih_diff(i,k)=
3384 c & 6.28318+dih_diff(i,k)
3386 kat3=-0.5d0*dih_diff(k)**2*sigma_dih(k,i) ! waga_angle rmvd from Gaussian argument
3387 c kat3=-0.5d0*waga_angle*dih_diff(k)**2*sigma_dih(k,i)
3390 c write(iout,*) "kat2=", kat2, "exp(kat3)=", exp(kat3)
3393 c write (iout,*) "gdih",(gdih(k),k=1,constr_homology) ! exps
3394 c write (iout,*) "i",i," betai",betai," kat2",kat2 ! sum of exps
3396 write (iout,*) "i",i," betai",betai," kat2",kat2
3397 write (iout,*) "gdih",(gdih(k),k=1,constr_homology)
3399 if (kat2.le.1.0d-14) cycle
3400 kat=kat-dLOG(kat2/constr_homology)
3401 c write (iout,*) "kat",kat ! sum of -ln-s
3403 ccc write(iout,778)"TEST: kat2=", kat2, "DLOG(kat2)=",
3404 ccc & dLOG(kat2), "-kat=", -kat
3407 c ----------------------------------------------------------------------
3409 c ----------------------------------------------------------------------
3413 do k=1,constr_homology
3414 sgdih=-gdih(k)*dih_diff(k)*sigma_dih(k,i) ! waga_angle rmvd
3415 c sgdih=-gdih(k)*dih_diff(k)*sigma_dih(k,i)*waga_angle
3416 sum_sgdih=sum_sgdih+sgdih
3418 c grad_dih3=sum_sgdih/sum_gdih
3419 grad_dih3=waga_homology(iset)*waga_angle*sum_sgdih/sum_gdih
3421 c write(iout,*)i,k,gdih,sgdih,beta(i+1,i+2,i+3,i+4),grad_dih3
3422 ccc write(iout,747) "GRAD_KAT_1", i, nphi, icg, grad_dih3,
3423 ccc & gloc(nphi+i-3,icg)
3424 gloc(i,icg)=gloc(i,icg)+grad_dih3
3426 c write(iout,*) "i",i,"icg",icg,"gloc(",i,icg,")",gloc(i,icg)
3428 ccc write(iout,747) "GRAD_KAT_2", i, nphi, icg, grad_dih3,
3429 ccc & gloc(nphi+i-3,icg)
3431 enddo ! i-loop for dih
3433 write(iout,*) "------- dih restrs end -------"
3436 c Pseudo-energy and gradient for theta angle restraints from
3437 c homology templates
3438 c FP 01/15 - inserted from econstr_local_test.F, loop structure
3442 c For constr_homology reference structures (FP)
3444 c Uconst_back_tot=0.0d0
3447 c Econstr_back legacy
3450 c do i=ithet_start,ithet_end
3453 c do i=loc_start,loc_end
3456 duscdiffx(j,i)=0.0d0
3462 c write (iout,*) "ithet_start =",ithet_start,"ithet_end =",ithet_end
3463 c write (iout,*) "waga_theta",waga_theta
3464 if (waga_theta.gt.0.0d0) then
3466 write (iout,*) "usampl",usampl
3467 write(iout,*) "------- theta restrs start -------"
3468 c do i=ithet_start,ithet_end
3469 c write (iout,*) "gloc_init(",nphi+i,icg,")",gloc(nphi+i,icg)
3472 c write (iout,*) "maxres",maxres,"nres",nres
3474 do i=ithet_start,ithet_end
3477 c ii = ifrag_back(2,i,iset)-ifrag_back(1,i,iset)
3479 c Deviation of theta angles wrt constr_homology ref structures
3481 utheta_i=0.0d0 ! argument of Gaussian for single k
3482 gutheta_i=0.0d0 ! Sum of Gaussians over constr_homology ref structures
3483 c do j=ifrag_back(1,i,iset)+2,ifrag_back(2,i,iset) ! original loop
3484 c over residues in a fragment
3485 c write (iout,*) "theta(",i,")=",theta(i)
3486 do k=1,constr_homology
3488 c dtheta_i=theta(j)-thetaref(j,iref)
3489 c dtheta_i=thetaref(k,i)-theta(i) ! original form without indexing
3490 theta_diff(k)=thetatpl(k,i)-theta(i)
3492 utheta_i=-0.5d0*theta_diff(k)**2*sigma_theta(k,i) ! waga_theta rmvd from Gaussian argument
3493 c utheta_i=-0.5d0*waga_theta*theta_diff(k)**2*sigma_theta(k,i) ! waga_theta?
3494 gtheta(k)=dexp(utheta_i) ! + min_utheta_i?
3495 gutheta_i=gutheta_i+dexp(utheta_i) ! Sum of Gaussians (pk)
3496 c Gradient for single Gaussian restraint in subr Econstr_back
3497 c dutheta(j-2)=dutheta(j-2)+wfrag_back(1,i,iset)*dtheta_i/(ii-1)
3500 c write (iout,*) "gtheta",(gtheta(k),k=1,constr_homology) ! exps
3501 c write (iout,*) "i",i," gutheta_i",gutheta_i ! sum of exps
3505 c Gradient for multiple Gaussian restraint
3506 sum_gtheta=gutheta_i
3508 do k=1,constr_homology
3509 c New generalized expr for multiple Gaussian from Econstr_back
3510 sgtheta=-gtheta(k)*theta_diff(k)*sigma_theta(k,i) ! waga_theta rmvd
3512 c sgtheta=-gtheta(k)*theta_diff(k)*sigma_theta(k,i)*waga_theta ! right functional form?
3513 sum_sgtheta=sum_sgtheta+sgtheta ! cum variable
3516 c Final value of gradient using same var as in Econstr_back
3517 dutheta(i-2)=sum_sgtheta/sum_gtheta*waga_theta
3518 & *waga_homology(iset)
3519 c dutheta(i)=sum_sgtheta/sum_gtheta
3521 c Uconst_back=Uconst_back+waga_theta*utheta(i) ! waga_theta added as weight
3523 Eval=Eval-dLOG(gutheta_i/constr_homology)
3524 c write (iout,*) "utheta(",i,")=",utheta(i) ! -ln of sum of exps
3525 c write (iout,*) "Uconst_back",Uconst_back ! sum of -ln-s
3526 c Uconst_back=Uconst_back+utheta(i)
3527 enddo ! (i-loop for theta)
3529 write(iout,*) "------- theta restrs end -------"
3533 c Deviation of local SC geometry
3535 c Separation of two i-loops (instructed by AL - 11/3/2014)
3537 c write (iout,*) "loc_start =",loc_start,"loc_end =",loc_end
3538 c write (iout,*) "waga_d",waga_d
3541 write(iout,*) "------- SC restrs start -------"
3542 write (iout,*) "Initial duscdiff,duscdiffx"
3543 do i=loc_start,loc_end
3544 write (iout,*) i,(duscdiff(jik,i),jik=1,3),
3545 & (duscdiffx(jik,i),jik=1,3)
3548 do i=loc_start,loc_end
3549 usc_diff_i=0.0d0 ! argument of Gaussian for single k
3550 guscdiff(i)=0.0d0 ! Sum of Gaussians over constr_homology ref structures
3551 c do j=ifrag_back(1,i,iset)+1,ifrag_back(2,i,iset)-1 ! Econstr_back legacy
3552 c write(iout,*) "xxtab, yytab, zztab"
3553 c write(iout,'(i5,3f8.2)') i,xxtab(i),yytab(i),zztab(i)
3554 do k=1,constr_homology
3556 dxx=-xxtpl(k,i)+xxtab(i) ! Diff b/w x component of ith SC vector in model and kth ref str?
3557 c Original sign inverted for calc of gradients (s. Econstr_back)
3558 dyy=-yytpl(k,i)+yytab(i) ! ibid y
3559 dzz=-zztpl(k,i)+zztab(i) ! ibid z
3560 c write(iout,*) "dxx, dyy, dzz"
3561 c write(iout,'(2i5,3f8.2)') k,i,dxx,dyy,dzz
3563 usc_diff_i=-0.5d0*(dxx**2+dyy**2+dzz**2)*sigma_d(k,i) ! waga_d rmvd from Gaussian argument
3564 c usc_diff(i)=-0.5d0*waga_d*(dxx**2+dyy**2+dzz**2)*sigma_d(k,i) ! waga_d?
3565 c uscdiffk(k)=usc_diff(i)
3566 guscdiff2(k)=dexp(usc_diff_i) ! without min_scdiff
3567 guscdiff(i)=guscdiff(i)+dexp(usc_diff_i) !Sum of Gaussians (pk)
3568 c write (iout,'(i5,6f10.5)') j,xxtab(j),yytab(j),zztab(j),
3569 c & xxref(j),yyref(j),zzref(j)
3574 c Generalized expression for multiple Gaussian acc to that for a single
3575 c Gaussian in Econstr_back as instructed by AL (FP - 03/11/2014)
3577 c Original implementation
3578 c sum_guscdiff=guscdiff(i)
3580 c sum_sguscdiff=0.0d0
3581 c do k=1,constr_homology
3582 c sguscdiff=-guscdiff2(k)*dscdiff(k)*sigma_d(k,i)*waga_d !waga_d?
3583 c sguscdiff=-guscdiff3(k)*dscdiff(k)*sigma_d(k,i)*waga_d ! w min_uscdiff
3584 c sum_sguscdiff=sum_sguscdiff+sguscdiff
3587 c Implementation of new expressions for gradient (Jan. 2015)
3589 c grad_uscdiff=sum_sguscdiff/(sum_guscdiff*dtab) !?
3591 do k=1,constr_homology
3593 c New calculation of dxx, dyy, and dzz corrected by AL (07/11), was missing and wrong
3594 c before. Now the drivatives should be correct
3596 dxx=-xxtpl(k,i)+xxtab(i) ! Diff b/w x component of ith SC vector in model and kth ref str?
3597 c Original sign inverted for calc of gradients (s. Econstr_back)
3598 dyy=-yytpl(k,i)+yytab(i) ! ibid y
3599 dzz=-zztpl(k,i)+zztab(i) ! ibid z
3601 c New implementation
3603 sum_guscdiff=guscdiff2(k)*!(dsqrt(dxx*dxx+dyy*dyy+dzz*dzz))* -> wrong!
3604 & sigma_d(k,i) ! for the grad wrt r'
3605 c sum_sguscdiff=sum_sguscdiff+sum_guscdiff
3608 c New implementation
3609 sum_guscdiff = waga_homology(iset)*waga_d*sum_guscdiff
3611 duscdiff(jik,i-1)=duscdiff(jik,i-1)+
3612 & sum_guscdiff*(dXX_C1tab(jik,i)*dxx+
3613 & dYY_C1tab(jik,i)*dyy+dZZ_C1tab(jik,i)*dzz)/guscdiff(i)
3614 duscdiff(jik,i)=duscdiff(jik,i)+
3615 & sum_guscdiff*(dXX_Ctab(jik,i)*dxx+
3616 & dYY_Ctab(jik,i)*dyy+dZZ_Ctab(jik,i)*dzz)/guscdiff(i)
3617 duscdiffx(jik,i)=duscdiffx(jik,i)+
3618 & sum_guscdiff*(dXX_XYZtab(jik,i)*dxx+
3619 & dYY_XYZtab(jik,i)*dyy+dZZ_XYZtab(jik,i)*dzz)/guscdiff(i)
3622 write(iout,*) "jik",jik,"i",i
3623 write(iout,*) "dxx, dyy, dzz"
3624 write(iout,'(2i5,3f8.2)') k,i,dxx,dyy,dzz
3625 write(iout,*) "guscdiff2(",k,")",guscdiff2(k)
3626 c write(iout,*) "sum_sguscdiff",sum_sguscdiff
3627 cc write(iout,*) "dXX_Ctab(",jik,i,")",dXX_Ctab(jik,i)
3628 c write(iout,*) "dYY_Ctab(",jik,i,")",dYY_Ctab(jik,i)
3629 c write(iout,*) "dZZ_Ctab(",jik,i,")",dZZ_Ctab(jik,i)
3630 c write(iout,*) "dXX_C1tab(",jik,i,")",dXX_C1tab(jik,i)
3631 c write(iout,*) "dYY_C1tab(",jik,i,")",dYY_C1tab(jik,i)
3632 c write(iout,*) "dZZ_C1tab(",jik,i,")",dZZ_C1tab(jik,i)
3633 c write(iout,*) "dXX_XYZtab(",jik,i,")",dXX_XYZtab(jik,i)
3634 c write(iout,*) "dYY_XYZtab(",jik,i,")",dYY_XYZtab(jik,i)
3635 c write(iout,*) "dZZ_XYZtab(",jik,i,")",dZZ_XYZtab(jik,i)
3636 c write(iout,*) "duscdiff(",jik,i-1,")",duscdiff(jik,i-1)
3637 c write(iout,*) "duscdiff(",jik,i,")",duscdiff(jik,i)
3638 c write(iout,*) "duscdiffx(",jik,i,")",duscdiffx(jik,i)
3645 c uscdiff(i)=-dLOG(guscdiff(i)/(ii-1)) ! Weighting by (ii-1) required?
3646 c usc_diff(i)=-dLOG(guscdiff(i)/constr_homology) ! + min_uscdiff ?
3648 c write (iout,*) i," uscdiff",uscdiff(i)
3650 c Put together deviations from local geometry
3652 c Uconst_back=Uconst_back+wfrag_back(1,i,iset)*utheta(i)+
3653 c & wfrag_back(3,i,iset)*uscdiff(i)
3654 Erot=Erot-dLOG(guscdiff(i)/constr_homology)
3655 c write (iout,*) "usc_diff(",i,")=",usc_diff(i) ! -ln of sum of exps
3656 c write (iout,*) "Uconst_back",Uconst_back ! cum sum of -ln-s
3657 c Uconst_back=Uconst_back+usc_diff(i)
3659 c Gradient of multiple Gaussian restraint (FP - 04/11/2014 - right?)
3661 c New implment: multiplied by sum_sguscdiff
3664 enddo ! (i-loop for dscdiff)
3669 write(iout,*) "------- SC restrs end -------"
3670 write (iout,*) "------ After SC loop in e_modeller ------"
3671 do i=loc_start,loc_end
3672 write (iout,*) "i",i," gradc",(gradc(j,i,icg),j=1,3)
3673 write (iout,*) "i",i," gradx",(gradx(j,i,icg),j=1,3)
3675 if (waga_theta.eq.1.0d0) then
3676 write (iout,*) "in e_modeller after SC restr end: dutheta"
3677 do i=ithet_start,ithet_end
3678 write (iout,*) i,dutheta(i)
3681 if (waga_d.eq.1.0d0) then
3682 write (iout,*) "e_modeller after SC loop: duscdiff/x"
3684 write (iout,*) i,(duscdiff(j,i),j=1,3)
3685 write (iout,*) i,(duscdiffx(j,i),j=1,3)
3690 c Total energy from homology restraints
3692 write (iout,*) "odleg",odleg," kat",kat
3693 write (iout,*) "odleg",odleg," kat",kat
3694 write (iout,*) "Eval",Eval," Erot",Erot
3695 write (iout,*) "waga_homology(",iset,")",waga_homology(iset)
3696 write (iout,*) "waga_dist ",waga_dist,"waga_angle ",waga_angle
3697 write (iout,*) "waga_theta ",waga_theta,"waga_d ",waga_d
3700 c Addition of energy of theta angle and SC local geom over constr_homologs ref strs
3702 c ehomology_constr=odleg+kat
3704 c For Lorentzian-type Urestr
3707 if (waga_dist.ge.0.0d0) then
3709 c For Gaussian-type Urestr
3711 c ehomology_constr=(waga_dist*odleg+waga_angle*kat+
3712 c & waga_theta*Eval+waga_d*Erot)*waga_homology(iset)
3713 ehomology_constr=waga_dist*odleg+waga_angle*kat+
3714 & waga_theta*Eval+waga_d*Erot
3715 c write (iout,*) "ehomology_constr=",ehomology_constr
3718 c For Lorentzian-type Urestr
3720 c ehomology_constr=(-waga_dist*odleg+waga_angle*kat+
3721 c & waga_theta*Eval+waga_d*Erot)*waga_homology(iset)
3722 ehomology_constr=-waga_dist*odleg+waga_angle*kat+
3723 & waga_theta*Eval+waga_d*Erot
3724 c write (iout,*) "ehomology_constr=",ehomology_constr
3727 write (iout,*) "odleg",waga_dist,odleg," kat",waga_angle,kat,
3728 & "Eval",waga_theta,eval,
3729 & "Erot",waga_d,Erot
3730 write (iout,*) "ehomology_constr",ehomology_constr
3734 748 format(a8,f12.3,a6,f12.3,a7,f12.3)
3735 747 format(a12,i4,i4,i4,f8.3,f8.3)
3736 746 format(a12,i4,i4,i4,f8.3,f8.3,f8.3)
3737 778 format(a7,1X,f10.3,1X,a4,1X,f10.3,1X,a5,1X,f10.3)
3738 779 format(i3,1X,i3,1X,i2,1X,a7,1X,f7.3,1X,a7,1X,f7.3,1X,a13,1X,
3739 & f7.3,1X,a17,1X,f9.3,1X,a10,1X,f8.3,1X,a10,1X,f8.3)
3741 c-----------------------------------------------------------------------
3742 subroutine ebond(estr)
3744 c Evaluate the energy of stretching of the CA-CA and CA-SC virtual bonds
3746 implicit real*8 (a-h,o-z)
3747 include 'DIMENSIONS'
3748 include 'DIMENSIONS.ZSCOPT'
3749 include 'DIMENSIONS.FREE'
3750 include 'COMMON.LOCAL'
3751 include 'COMMON.GEO'
3752 include 'COMMON.INTERACT'
3753 include 'COMMON.DERIV'
3754 include 'COMMON.VAR'
3755 include 'COMMON.CHAIN'
3756 include 'COMMON.IOUNITS'
3757 include 'COMMON.NAMES'
3758 include 'COMMON.FFIELD'
3759 include 'COMMON.CONTROL'
3760 double precision u(3),ud(3)
3761 logical :: lprn=.false.
3764 diff = vbld(i)-vbldp0
3765 c write (iout,*) i,vbld(i),vbldp0,diff,AKP*diff*diff
3768 gradb(j,i-1)=AKP*diff*dc(j,i-1)/vbld(i)
3773 c 09/18/07 AL: multimodal bond potential based on AM1 CA-SC PMF's included
3780 diff=vbld(i+nres)-vbldsc0(1,iti)
3782 & write (iout,*) i,iti,vbld(i+nres),vbldsc0(1,iti),diff,
3783 & AKSC(1,iti),AKSC(1,iti)*diff*diff
3784 estr=estr+0.5d0*AKSC(1,iti)*diff*diff
3786 gradbx(j,i)=AKSC(1,iti)*diff*dc(j,i+nres)/vbld(i+nres)
3790 diff=vbld(i+nres)-vbldsc0(j,iti)
3791 ud(j)=aksc(j,iti)*diff
3792 u(j)=abond0(j,iti)+0.5d0*ud(j)*diff
3806 uprod2=uprod2*u(k)*u(k)
3810 usumsqder=usumsqder+ud(j)*uprod2
3813 & write (iout,*) i,iti,vbld(i+nres),(vbldsc0(j,iti),
3814 & AKSC(j,iti),abond0(j,iti),u(j),j=1,nbi)
3815 estr=estr+uprod/usum
3817 gradbx(j,i)=usumsqder/(usum*usum)*dc(j,i+nres)/vbld(i+nres)
3825 C--------------------------------------------------------------------------
3826 subroutine ebend(etheta)
3828 C Evaluate the virtual-bond-angle energy given the virtual-bond dihedral
3829 C angles gamma and its derivatives in consecutive thetas and gammas.
3831 implicit real*8 (a-h,o-z)
3832 include 'DIMENSIONS'
3833 include 'DIMENSIONS.ZSCOPT'
3834 include 'COMMON.LOCAL'
3835 include 'COMMON.GEO'
3836 include 'COMMON.INTERACT'
3837 include 'COMMON.DERIV'
3838 include 'COMMON.VAR'
3839 include 'COMMON.CHAIN'
3840 include 'COMMON.IOUNITS'
3841 include 'COMMON.NAMES'
3842 include 'COMMON.FFIELD'
3843 common /calcthet/ term1,term2,termm,diffak,ratak,
3844 & ak,aktc,termpre,termexp,sigc,sig0i,time11,time12,sigcsq,
3845 & delthe0,sig0inv,sigtc,sigsqtc,delthec,it
3846 double precision y(2),z(2)
3848 time11=dexp(-2*time)
3851 c write (iout,*) "nres",nres
3852 c write (*,'(a,i2)') 'EBEND ICG=',icg
3853 c write (iout,*) ithet_start,ithet_end
3854 do i=ithet_start,ithet_end
3855 C Zero the energy function and its derivative at 0 or pi.
3856 call splinthet(theta(i),0.5d0*delta,ss,ssd)
3858 c if (i.gt.ithet_start .and.
3859 c & (itel(i-1).eq.0 .or. itel(i-2).eq.0)) goto 1215
3860 c if (i.gt.3 .and. (i.le.4 .or. itel(i-3).ne.0)) then
3868 c if (i.lt.nres .and. itel(i).ne.0) then
3880 call proc_proc(phii,icrc)
3881 if (icrc.eq.1) phii=150.0
3895 call proc_proc(phii1,icrc)
3896 if (icrc.eq.1) phii1=150.0
3908 C Calculate the "mean" value of theta from the part of the distribution
3909 C dependent on the adjacent virtual-bond-valence angles (gamma1 & gamma2).
3910 C In following comments this theta will be referred to as t_c.
3911 thet_pred_mean=0.0d0
3915 thet_pred_mean=thet_pred_mean+athetk*y(k)+bthetk*z(k)
3917 c write (iout,*) "thet_pred_mean",thet_pred_mean
3918 dthett=thet_pred_mean*ssd
3919 thet_pred_mean=thet_pred_mean*ss+a0thet(it)
3920 c write (iout,*) "thet_pred_mean",thet_pred_mean
3921 C Derivatives of the "mean" values in gamma1 and gamma2.
3922 dthetg1=(-athet(1,it)*y(2)+athet(2,it)*y(1))*ss
3923 dthetg2=(-bthet(1,it)*z(2)+bthet(2,it)*z(1))*ss
3924 if (theta(i).gt.pi-delta) then
3925 call theteng(pi-delta,thet_pred_mean,theta0(it),f0,fprim0,
3927 call mixder(pi-delta,thet_pred_mean,theta0(it),fprim_tc0)
3928 call theteng(pi,thet_pred_mean,theta0(it),f1,fprim1,E_tc1)
3929 call spline1(theta(i),pi-delta,delta,f0,f1,fprim0,ethetai,
3931 call spline2(theta(i),pi-delta,delta,E_tc0,E_tc1,fprim_tc0,
3933 else if (theta(i).lt.delta) then
3934 call theteng(delta,thet_pred_mean,theta0(it),f0,fprim0,E_tc0)
3935 call theteng(0.0d0,thet_pred_mean,theta0(it),f1,fprim1,E_tc1)
3936 call spline1(theta(i),delta,-delta,f0,f1,fprim0,ethetai,
3938 call mixder(delta,thet_pred_mean,theta0(it),fprim_tc0)
3939 call spline2(theta(i),delta,-delta,E_tc0,E_tc1,fprim_tc0,
3942 call theteng(theta(i),thet_pred_mean,theta0(it),ethetai,
3945 etheta=etheta+ethetai
3946 c write (iout,'(2i3,3f8.3,f10.5)') i,it,rad2deg*theta(i),
3947 c & rad2deg*phii,rad2deg*phii1,ethetai
3948 if (i.gt.3) gloc(i-3,icg)=gloc(i-3,icg)+wang*E_tc*dthetg1
3949 if (i.lt.nres) gloc(i-2,icg)=gloc(i-2,icg)+wang*E_tc*dthetg2
3950 gloc(nphi+i-2,icg)=wang*(E_theta+E_tc*dthett)
3953 C Ufff.... We've done all this!!!
3956 C---------------------------------------------------------------------------
3957 subroutine theteng(thetai,thet_pred_mean,theta0i,ethetai,E_theta,
3959 implicit real*8 (a-h,o-z)
3960 include 'DIMENSIONS'
3961 include 'COMMON.LOCAL'
3962 include 'COMMON.IOUNITS'
3963 common /calcthet/ term1,term2,termm,diffak,ratak,
3964 & ak,aktc,termpre,termexp,sigc,sig0i,time11,time12,sigcsq,
3965 & delthe0,sig0inv,sigtc,sigsqtc,delthec,it
3966 C Calculate the contributions to both Gaussian lobes.
3967 C 6/6/97 - Deform the Gaussians using the factor of 1/(1+time)
3968 C The "polynomial part" of the "standard deviation" of this part of
3972 sig=sig*thet_pred_mean+polthet(j,it)
3974 C Derivative of the "interior part" of the "standard deviation of the"
3975 C gamma-dependent Gaussian lobe in t_c.
3976 sigtc=3*polthet(3,it)
3978 sigtc=sigtc*thet_pred_mean+j*polthet(j,it)
3981 C Set the parameters of both Gaussian lobes of the distribution.
3982 C "Standard deviation" of the gamma-dependent Gaussian lobe (sigtc)
3983 fac=sig*sig+sigc0(it)
3986 C Following variable (sigsqtc) is -(1/2)d[sigma(t_c)**(-2))]/dt_c
3987 sigsqtc=-4.0D0*sigcsq*sigtc
3988 c print *,i,sig,sigtc,sigsqtc
3989 C Following variable (sigtc) is d[sigma(t_c)]/dt_c
3990 sigtc=-sigtc/(fac*fac)
3991 C Following variable is sigma(t_c)**(-2)
3992 sigcsq=sigcsq*sigcsq
3994 sig0inv=1.0D0/sig0i**2
3995 delthec=thetai-thet_pred_mean
3996 delthe0=thetai-theta0i
3997 term1=-0.5D0*sigcsq*delthec*delthec
3998 term2=-0.5D0*sig0inv*delthe0*delthe0
3999 C Following fuzzy logic is to avoid underflows in dexp and subsequent INFs and
4000 C NaNs in taking the logarithm. We extract the largest exponent which is added
4001 C to the energy (this being the log of the distribution) at the end of energy
4002 C term evaluation for this virtual-bond angle.
4003 if (term1.gt.term2) then
4005 term2=dexp(term2-termm)
4009 term1=dexp(term1-termm)
4012 C The ratio between the gamma-independent and gamma-dependent lobes of
4013 C the distribution is a Gaussian function of thet_pred_mean too.
4014 diffak=gthet(2,it)-thet_pred_mean
4015 ratak=diffak/gthet(3,it)**2
4016 ak=dexp(gthet(1,it)-0.5D0*diffak*ratak)
4017 C Let's differentiate it in thet_pred_mean NOW.
4019 C Now put together the distribution terms to make complete distribution.
4020 termexp=term1+ak*term2
4021 termpre=sigc+ak*sig0i
4022 C Contribution of the bending energy from this theta is just the -log of
4023 C the sum of the contributions from the two lobes and the pre-exponential
4024 C factor. Simple enough, isn't it?
4025 ethetai=(-dlog(termexp)-termm+dlog(termpre))
4026 C NOW the derivatives!!!
4027 C 6/6/97 Take into account the deformation.
4028 E_theta=(delthec*sigcsq*term1
4029 & +ak*delthe0*sig0inv*term2)/termexp
4030 E_tc=((sigtc+aktc*sig0i)/termpre
4031 & -((delthec*sigcsq+delthec*delthec*sigsqtc)*term1+
4032 & aktc*term2)/termexp)
4035 c-----------------------------------------------------------------------------
4036 subroutine mixder(thetai,thet_pred_mean,theta0i,E_tc_t)
4037 implicit real*8 (a-h,o-z)
4038 include 'DIMENSIONS'
4039 include 'COMMON.LOCAL'
4040 include 'COMMON.IOUNITS'
4041 common /calcthet/ term1,term2,termm,diffak,ratak,
4042 & ak,aktc,termpre,termexp,sigc,sig0i,time11,time12,sigcsq,
4043 & delthe0,sig0inv,sigtc,sigsqtc,delthec,it
4044 delthec=thetai-thet_pred_mean
4045 delthe0=thetai-theta0i
4046 C "Thank you" to MAPLE (probably spared one day of hand-differentiation).
4047 t3 = thetai-thet_pred_mean
4051 t14 = t12+t6*sigsqtc
4053 t21 = thetai-theta0i
4059 E_tc_t = -((sigcsq+2.D0*t3*sigsqtc)*t9-t14*sigcsq*t3*t16*t9
4060 & -aktc*sig0inv*t27)/t32+(t14*t9+aktc*t26)/t40
4061 & *(-t12*t9-ak*sig0inv*t27)
4065 C--------------------------------------------------------------------------
4066 subroutine ebend(etheta)
4068 C Evaluate the virtual-bond-angle energy given the virtual-bond dihedral
4069 C angles gamma and its derivatives in consecutive thetas and gammas.
4070 C ab initio-derived potentials from
4071 c Kozlowska et al., J. Phys.: Condens. Matter 19 (2007) 285203
4073 implicit real*8 (a-h,o-z)
4074 include 'DIMENSIONS'
4075 include 'DIMENSIONS.ZSCOPT'
4076 include 'DIMENSIONS.FREE'
4077 include 'COMMON.LOCAL'
4078 include 'COMMON.GEO'
4079 include 'COMMON.INTERACT'
4080 include 'COMMON.DERIV'
4081 include 'COMMON.VAR'
4082 include 'COMMON.CHAIN'
4083 include 'COMMON.IOUNITS'
4084 include 'COMMON.NAMES'
4085 include 'COMMON.FFIELD'
4086 include 'COMMON.CONTROL'
4087 double precision coskt(mmaxtheterm),sinkt(mmaxtheterm),
4088 & cosph1(maxsingle),sinph1(maxsingle),cosph2(maxsingle),
4089 & sinph2(maxsingle),cosph1ph2(maxdouble,maxdouble),
4090 & sinph1ph2(maxdouble,maxdouble)
4091 logical lprn /.false./, lprn1 /.false./
4093 c write (iout,*) "ithetyp",(ithetyp(i),i=1,ntyp1)
4094 do i=ithet_start,ithet_end
4095 if ((itype(i-1).eq.ntyp1).or.(itype(i-2).eq.ntyp1).or.
4096 & (itype(i).eq.ntyp1)) cycle
4100 theti2=0.5d0*theta(i)
4101 ityp2=ithetyp(itype(i-1))
4103 coskt(k)=dcos(k*theti2)
4104 sinkt(k)=dsin(k*theti2)
4106 if (i.gt.3 .and. itype(i-3).ne.ntyp1) then
4109 if (phii.ne.phii) phii=150.0
4113 ityp1=ithetyp(itype(i-2))
4115 cosph1(k)=dcos(k*phii)
4116 sinph1(k)=dsin(k*phii)
4120 ityp1=ithetyp(itype(i-2))
4126 if (i.lt.nres .and. itype(i+1).ne.ntyp1) then
4129 if (phii1.ne.phii1) phii1=150.0
4134 ityp3=ithetyp(itype(i))
4136 cosph2(k)=dcos(k*phii1)
4137 sinph2(k)=dsin(k*phii1)
4142 ityp3=ithetyp(itype(i))
4148 c write (iout,*) "i",i," ityp1",itype(i-2),ityp1,
4149 c & " ityp2",itype(i-1),ityp2," ityp3",itype(i),ityp3
4151 ethetai=aa0thet(ityp1,ityp2,ityp3)
4154 ccl=cosph1(l)*cosph2(k-l)
4155 ssl=sinph1(l)*sinph2(k-l)
4156 scl=sinph1(l)*cosph2(k-l)
4157 csl=cosph1(l)*sinph2(k-l)
4158 cosph1ph2(l,k)=ccl-ssl
4159 cosph1ph2(k,l)=ccl+ssl
4160 sinph1ph2(l,k)=scl+csl
4161 sinph1ph2(k,l)=scl-csl
4165 write (iout,*) "i",i," ityp1",ityp1," ityp2",ityp2,
4166 & " ityp3",ityp3," theti2",theti2," phii",phii," phii1",phii1
4167 write (iout,*) "coskt and sinkt"
4169 write (iout,*) k,coskt(k),sinkt(k)
4173 ethetai=ethetai+aathet(k,ityp1,ityp2,ityp3)*sinkt(k)
4174 dethetai=dethetai+0.5d0*k*aathet(k,ityp1,ityp2,ityp3)
4177 & write (iout,*) "k",k," aathet",aathet(k,ityp1,ityp2,ityp3),
4178 & " ethetai",ethetai
4181 write (iout,*) "cosph and sinph"
4183 write (iout,*) k,cosph1(k),sinph1(k),cosph2(k),sinph2(k)
4185 write (iout,*) "cosph1ph2 and sinph2ph2"
4188 write (iout,*) l,k,cosph1ph2(l,k),cosph1ph2(k,l),
4189 & sinph1ph2(l,k),sinph1ph2(k,l)
4192 write(iout,*) "ethetai",ethetai
4196 aux=bbthet(k,m,ityp1,ityp2,ityp3)*cosph1(k)
4197 & +ccthet(k,m,ityp1,ityp2,ityp3)*sinph1(k)
4198 & +ddthet(k,m,ityp1,ityp2,ityp3)*cosph2(k)
4199 & +eethet(k,m,ityp1,ityp2,ityp3)*sinph2(k)
4200 ethetai=ethetai+sinkt(m)*aux
4201 dethetai=dethetai+0.5d0*m*aux*coskt(m)
4202 dephii=dephii+k*sinkt(m)*(
4203 & ccthet(k,m,ityp1,ityp2,ityp3)*cosph1(k)-
4204 & bbthet(k,m,ityp1,ityp2,ityp3)*sinph1(k))
4205 dephii1=dephii1+k*sinkt(m)*(
4206 & eethet(k,m,ityp1,ityp2,ityp3)*cosph2(k)-
4207 & ddthet(k,m,ityp1,ityp2,ityp3)*sinph2(k))
4209 & write (iout,*) "m",m," k",k," bbthet",
4210 & bbthet(k,m,ityp1,ityp2,ityp3)," ccthet",
4211 & ccthet(k,m,ityp1,ityp2,ityp3)," ddthet",
4212 & ddthet(k,m,ityp1,ityp2,ityp3)," eethet",
4213 & eethet(k,m,ityp1,ityp2,ityp3)," ethetai",ethetai
4217 & write(iout,*) "ethetai",ethetai
4221 aux=ffthet(l,k,m,ityp1,ityp2,ityp3)*cosph1ph2(l,k)+
4222 & ffthet(k,l,m,ityp1,ityp2,ityp3)*cosph1ph2(k,l)+
4223 & ggthet(l,k,m,ityp1,ityp2,ityp3)*sinph1ph2(l,k)+
4224 & ggthet(k,l,m,ityp1,ityp2,ityp3)*sinph1ph2(k,l)
4225 ethetai=ethetai+sinkt(m)*aux
4226 dethetai=dethetai+0.5d0*m*coskt(m)*aux
4227 dephii=dephii+l*sinkt(m)*(
4228 & -ffthet(l,k,m,ityp1,ityp2,ityp3)*sinph1ph2(l,k)-
4229 & ffthet(k,l,m,ityp1,ityp2,ityp3)*sinph1ph2(k,l)+
4230 & ggthet(l,k,m,ityp1,ityp2,ityp3)*cosph1ph2(l,k)+
4231 & ggthet(k,l,m,ityp1,ityp2,ityp3)*cosph1ph2(k,l))
4232 dephii1=dephii1+(k-l)*sinkt(m)*(
4233 & -ffthet(l,k,m,ityp1,ityp2,ityp3)*sinph1ph2(l,k)+
4234 & ffthet(k,l,m,ityp1,ityp2,ityp3)*sinph1ph2(k,l)+
4235 & ggthet(l,k,m,ityp1,ityp2,ityp3)*cosph1ph2(l,k)-
4236 & ggthet(k,l,m,ityp1,ityp2,ityp3)*cosph1ph2(k,l))
4238 write (iout,*) "m",m," k",k," l",l," ffthet",
4239 & ffthet(l,k,m,ityp1,ityp2,ityp3),
4240 & ffthet(k,l,m,ityp1,ityp2,ityp3)," ggthet",
4241 & ggthet(l,k,m,ityp1,ityp2,ityp3),
4242 & ggthet(k,l,m,ityp1,ityp2,ityp3)," ethetai",ethetai
4243 write (iout,*) cosph1ph2(l,k)*sinkt(m),
4244 & cosph1ph2(k,l)*sinkt(m),
4245 & sinph1ph2(l,k)*sinkt(m),sinph1ph2(k,l)*sinkt(m)
4252 if (lprn1) write (iout,'(a4,i2,3f8.1,9h ethetai ,f10.5)')
4253 & 'ebe',i,theta(i)*rad2deg,phii*rad2deg,
4254 & phii1*rad2deg,ethetai
4256 etheta=etheta+ethetai
4258 if (i.gt.3) gloc(i-3,icg)=gloc(i-3,icg)+wang*dephii
4259 if (i.lt.nres) gloc(i-2,icg)=gloc(i-2,icg)+wang*dephii1
4260 gloc(nphi+i-2,icg)=wang*dethetai
4266 c-----------------------------------------------------------------------------
4267 subroutine esc(escloc)
4268 C Calculate the local energy of a side chain and its derivatives in the
4269 C corresponding virtual-bond valence angles THETA and the spherical angles
4271 implicit real*8 (a-h,o-z)
4272 include 'DIMENSIONS'
4273 include 'DIMENSIONS.ZSCOPT'
4274 include 'COMMON.GEO'
4275 include 'COMMON.LOCAL'
4276 include 'COMMON.VAR'
4277 include 'COMMON.INTERACT'
4278 include 'COMMON.DERIV'
4279 include 'COMMON.CHAIN'
4280 include 'COMMON.IOUNITS'
4281 include 'COMMON.NAMES'
4282 include 'COMMON.FFIELD'
4283 double precision x(3),dersc(3),xemp(3),dersc0(3),dersc1(3),
4284 & ddersc0(3),ddummy(3),xtemp(3),temp(3)
4285 common /sccalc/ time11,time12,time112,theti,it,nlobit
4288 c write (iout,'(a)') 'ESC'
4289 do i=loc_start,loc_end
4291 if (it.eq.10) goto 1
4293 c print *,'i=',i,' it=',it,' nlobit=',nlobit
4294 c write (iout,*) 'i=',i,' ssa=',ssa,' ssad=',ssad
4295 theti=theta(i+1)-pipol
4299 c write (iout,*) "i",i," x",x(1),x(2),x(3)
4301 if (x(2).gt.pi-delta) then
4305 call enesc(xtemp,escloci0,dersc0,ddersc0,.true.)
4307 call enesc(xtemp,escloci1,dersc1,ddummy,.false.)
4308 call spline1(x(2),pi-delta,delta,escloci0,escloci1,dersc0(2),
4310 call spline2(x(2),pi-delta,delta,dersc0(1),dersc1(1),
4311 & ddersc0(1),dersc(1))
4312 call spline2(x(2),pi-delta,delta,dersc0(3),dersc1(3),
4313 & ddersc0(3),dersc(3))
4315 call enesc_bound(xtemp,esclocbi0,dersc0,dersc12,.true.)
4317 call enesc_bound(xtemp,esclocbi1,dersc1,chuju,.false.)
4318 call spline1(x(2),pi-delta,delta,esclocbi0,esclocbi1,
4319 & dersc0(2),esclocbi,dersc02)
4320 call spline2(x(2),pi-delta,delta,dersc0(1),dersc1(1),
4322 call splinthet(x(2),0.5d0*delta,ss,ssd)
4327 dersc(k)=ss*dersc(k)+(1.0d0-ss)*dersc0(k)
4329 dersc(2)=dersc(2)+ssd*(escloci-esclocbi)
4330 c write (iout,*) 'i=',i,x(2)*rad2deg,escloci0,escloci,
4332 escloci=ss*escloci+(1.0d0-ss)*esclocbi
4334 c write (iout,*) escloci
4335 else if (x(2).lt.delta) then
4339 call enesc(xtemp,escloci0,dersc0,ddersc0,.true.)
4341 call enesc(xtemp,escloci1,dersc1,ddummy,.false.)
4342 call spline1(x(2),delta,-delta,escloci0,escloci1,dersc0(2),
4344 call spline2(x(2),delta,-delta,dersc0(1),dersc1(1),
4345 & ddersc0(1),dersc(1))
4346 call spline2(x(2),delta,-delta,dersc0(3),dersc1(3),
4347 & ddersc0(3),dersc(3))
4349 call enesc_bound(xtemp,esclocbi0,dersc0,dersc12,.true.)
4351 call enesc_bound(xtemp,esclocbi1,dersc1,chuju,.false.)
4352 call spline1(x(2),delta,-delta,esclocbi0,esclocbi1,
4353 & dersc0(2),esclocbi,dersc02)
4354 call spline2(x(2),delta,-delta,dersc0(1),dersc1(1),
4359 call splinthet(x(2),0.5d0*delta,ss,ssd)
4361 dersc(k)=ss*dersc(k)+(1.0d0-ss)*dersc0(k)
4363 dersc(2)=dersc(2)+ssd*(escloci-esclocbi)
4364 c write (iout,*) 'i=',i,x(2)*rad2deg,escloci0,escloci,
4366 escloci=ss*escloci+(1.0d0-ss)*esclocbi
4367 c write (iout,*) escloci
4369 call enesc(x,escloci,dersc,ddummy,.false.)
4372 escloc=escloc+escloci
4373 c write (iout,*) 'i=',i,' escloci=',escloci,' dersc=',dersc
4375 gloc(nphi+i-1,icg)=gloc(nphi+i-1,icg)+
4377 gloc(ialph(i,1),icg)=wscloc*dersc(2)
4378 gloc(ialph(i,1)+nside,icg)=wscloc*dersc(3)
4383 C---------------------------------------------------------------------------
4384 subroutine enesc(x,escloci,dersc,ddersc,mixed)
4385 implicit real*8 (a-h,o-z)
4386 include 'DIMENSIONS'
4387 include 'COMMON.GEO'
4388 include 'COMMON.LOCAL'
4389 include 'COMMON.IOUNITS'
4390 common /sccalc/ time11,time12,time112,theti,it,nlobit
4391 double precision x(3),z(3),Ax(3,maxlob,-1:1),dersc(3),ddersc(3)
4392 double precision contr(maxlob,-1:1)
4394 c write (iout,*) 'it=',it,' nlobit=',nlobit
4398 if (mixed) ddersc(j)=0.0d0
4402 C Because of periodicity of the dependence of the SC energy in omega we have
4403 C to add up the contributions from x(3)-2*pi, x(3), and x(3+2*pi).
4404 C To avoid underflows, first compute & store the exponents.
4412 z(k)=x(k)-censc(k,j,it)
4417 Axk=Axk+gaussc(l,k,j,it)*z(l)
4423 expfac=expfac+Ax(k,j,iii)*z(k)
4431 C As in the case of ebend, we want to avoid underflows in exponentiation and
4432 C subsequent NaNs and INFs in energy calculation.
4433 C Find the largest exponent
4437 if (emin.gt.contr(j,iii)) emin=contr(j,iii)
4441 cd print *,'it=',it,' emin=',emin
4443 C Compute the contribution to SC energy and derivatives
4447 expfac=dexp(bsc(j,it)-0.5D0*contr(j,iii)+emin)
4448 cd print *,'j=',j,' expfac=',expfac
4449 escloc_i=escloc_i+expfac
4451 dersc(k)=dersc(k)+Ax(k,j,iii)*expfac
4455 ddersc(k)=ddersc(k)+(-Ax(2,j,iii)*Ax(k,j,iii)
4456 & +gaussc(k,2,j,it))*expfac
4463 dersc(1)=dersc(1)/cos(theti)**2
4464 ddersc(1)=ddersc(1)/cos(theti)**2
4467 escloci=-(dlog(escloc_i)-emin)
4469 dersc(j)=dersc(j)/escloc_i
4473 ddersc(j)=(ddersc(j)/escloc_i+dersc(2)*dersc(j))
4478 C------------------------------------------------------------------------------
4479 subroutine enesc_bound(x,escloci,dersc,dersc12,mixed)
4480 implicit real*8 (a-h,o-z)
4481 include 'DIMENSIONS'
4482 include 'COMMON.GEO'
4483 include 'COMMON.LOCAL'
4484 include 'COMMON.IOUNITS'
4485 common /sccalc/ time11,time12,time112,theti,it,nlobit
4486 double precision x(3),z(3),Ax(3,maxlob),dersc(3)
4487 double precision contr(maxlob)
4498 z(k)=x(k)-censc(k,j,it)
4504 Axk=Axk+gaussc(l,k,j,it)*z(l)
4510 expfac=expfac+Ax(k,j)*z(k)
4515 C As in the case of ebend, we want to avoid underflows in exponentiation and
4516 C subsequent NaNs and INFs in energy calculation.
4517 C Find the largest exponent
4520 if (emin.gt.contr(j)) emin=contr(j)
4524 C Compute the contribution to SC energy and derivatives
4528 expfac=dexp(bsc(j,it)-0.5D0*contr(j)+emin)
4529 escloc_i=escloc_i+expfac
4531 dersc(k)=dersc(k)+Ax(k,j)*expfac
4533 if (mixed) dersc12=dersc12+(-Ax(2,j)*Ax(1,j)
4534 & +gaussc(1,2,j,it))*expfac
4538 dersc(1)=dersc(1)/cos(theti)**2
4539 dersc12=dersc12/cos(theti)**2
4540 escloci=-(dlog(escloc_i)-emin)
4542 dersc(j)=dersc(j)/escloc_i
4544 if (mixed) dersc12=(dersc12/escloc_i+dersc(2)*dersc(1))
4548 c----------------------------------------------------------------------------------
4549 subroutine esc(escloc)
4550 C Calculate the local energy of a side chain and its derivatives in the
4551 C corresponding virtual-bond valence angles THETA and the spherical angles
4552 C ALPHA and OMEGA derived from AM1 all-atom calculations.
4553 C added by Urszula Kozlowska. 07/11/2007
4555 implicit real*8 (a-h,o-z)
4556 include 'DIMENSIONS'
4557 include 'DIMENSIONS.ZSCOPT'
4558 include 'DIMENSIONS.FREE'
4559 include 'COMMON.GEO'
4560 include 'COMMON.LOCAL'
4561 include 'COMMON.VAR'
4562 include 'COMMON.SCROT'
4563 include 'COMMON.INTERACT'
4564 include 'COMMON.DERIV'
4565 include 'COMMON.CHAIN'
4566 include 'COMMON.IOUNITS'
4567 include 'COMMON.NAMES'
4568 include 'COMMON.FFIELD'
4569 include 'COMMON.CONTROL'
4570 include 'COMMON.VECTORS'
4571 double precision x_prime(3),y_prime(3),z_prime(3)
4572 & , sumene,dsc_i,dp2_i,x(65),
4573 & xx,yy,zz,sumene1,sumene2,sumene3,sumene4,s1,s1_6,s2,s2_6,
4574 & de_dxx,de_dyy,de_dzz,de_dt
4575 double precision s1_t,s1_6_t,s2_t,s2_6_t
4577 & dXX_Ci1(3),dYY_Ci1(3),dZZ_Ci1(3),dXX_Ci(3),
4578 & dYY_Ci(3),dZZ_Ci(3),dXX_XYZ(3),dYY_XYZ(3),dZZ_XYZ(3),
4579 & dt_dCi(3),dt_dCi1(3)
4580 common /sccalc/ time11,time12,time112,theti,it,nlobit
4583 do i=loc_start,loc_end
4584 costtab(i+1) =dcos(theta(i+1))
4585 sinttab(i+1) =dsqrt(1-costtab(i+1)*costtab(i+1))
4586 cost2tab(i+1)=dsqrt(0.5d0*(1.0d0+costtab(i+1)))
4587 sint2tab(i+1)=dsqrt(0.5d0*(1.0d0-costtab(i+1)))
4588 cosfac2=0.5d0/(1.0d0+costtab(i+1))
4589 cosfac=dsqrt(cosfac2)
4590 sinfac2=0.5d0/(1.0d0-costtab(i+1))
4591 sinfac=dsqrt(sinfac2)
4593 if (it.eq.10) goto 1
4595 C Compute the axes of tghe local cartesian coordinates system; store in
4596 c x_prime, y_prime and z_prime
4603 C write(2,*) "dc_norm", dc_norm(1,i+nres),dc_norm(2,i+nres),
4604 C & dc_norm(3,i+nres)
4606 x_prime(j) = (dc_norm(j,i) - dc_norm(j,i-1))*cosfac
4607 y_prime(j) = (dc_norm(j,i) + dc_norm(j,i-1))*sinfac
4610 z_prime(j) = -uz(j,i-1)
4613 c write (2,*) "x_prime",(x_prime(j),j=1,3)
4614 c write (2,*) "y_prime",(y_prime(j),j=1,3)
4615 c write (2,*) "z_prime",(z_prime(j),j=1,3)
4616 c write (2,*) "xx",scalar(x_prime(1),x_prime(1)),
4617 c & " xy",scalar(x_prime(1),y_prime(1)),
4618 c & " xz",scalar(x_prime(1),z_prime(1)),
4619 c & " yy",scalar(y_prime(1),y_prime(1)),
4620 c & " yz",scalar(y_prime(1),z_prime(1)),
4621 c & " zz",scalar(z_prime(1),z_prime(1))
4623 C Transform the unit vector of the ith side-chain centroid, dC_norm(*,i),
4624 C to local coordinate system. Store in xx, yy, zz.
4630 xx = xx + x_prime(j)*dc_norm(j,i+nres)
4631 yy = yy + y_prime(j)*dc_norm(j,i+nres)
4632 zz = zz + z_prime(j)*dc_norm(j,i+nres)
4639 C Compute the energy of the ith side cbain
4641 c write (2,*) "xx",xx," yy",yy," zz",zz
4644 x(j) = sc_parmin(j,it)
4647 Cc diagnostics - remove later
4649 yy1 = dsin(alph(2))*dcos(omeg(2))
4650 zz1 = -dsin(alph(2))*dsin(omeg(2))
4651 write(2,'(3f8.1,3f9.3,1x,3f9.3)')
4652 & alph(2)*rad2deg,omeg(2)*rad2deg,theta(3)*rad2deg,xx,yy,zz,
4654 C," --- ", xx_w,yy_w,zz_w
4657 sumene1= x(1)+ x(2)*xx+ x(3)*yy+ x(4)*zz+ x(5)*xx**2
4658 & + x(6)*yy**2+ x(7)*zz**2+ x(8)*xx*zz+ x(9)*xx*yy
4660 sumene2= x(11) + x(12)*xx + x(13)*yy + x(14)*zz + x(15)*xx**2
4661 & + x(16)*yy**2 + x(17)*zz**2 + x(18)*xx*zz + x(19)*xx*yy
4663 sumene3= x(21) +x(22)*xx +x(23)*yy +x(24)*zz +x(25)*xx**2
4664 & +x(26)*yy**2 +x(27)*zz**2 +x(28)*xx*zz +x(29)*xx*yy
4665 & +x(30)*yy*zz +x(31)*xx**3 +x(32)*yy**3 +x(33)*zz**3
4666 & +x(34)*(xx**2)*yy +x(35)*(xx**2)*zz +x(36)*(yy**2)*xx
4667 & +x(37)*(yy**2)*zz +x(38)*(zz**2)*xx +x(39)*(zz**2)*yy
4669 sumene4= x(41) +x(42)*xx +x(43)*yy +x(44)*zz +x(45)*xx**2
4670 & +x(46)*yy**2 +x(47)*zz**2 +x(48)*xx*zz +x(49)*xx*yy
4671 & +x(50)*yy*zz +x(51)*xx**3 +x(52)*yy**3 +x(53)*zz**3
4672 & +x(54)*(xx**2)*yy +x(55)*(xx**2)*zz +x(56)*(yy**2)*xx
4673 & +x(57)*(yy**2)*zz +x(58)*(zz**2)*xx +x(59)*(zz**2)*yy
4675 dsc_i = 0.743d0+x(61)
4677 dscp1=dsqrt(dsc_i**2+dp2_i**2-2*dsc_i*dp2_i
4678 & *(xx*cost2tab(i+1)+yy*sint2tab(i+1)))
4679 dscp2=dsqrt(dsc_i**2+dp2_i**2-2*dsc_i*dp2_i
4680 & *(xx*cost2tab(i+1)-yy*sint2tab(i+1)))
4681 s1=(1+x(63))/(0.1d0 + dscp1)
4682 s1_6=(1+x(64))/(0.1d0 + dscp1**6)
4683 s2=(1+x(65))/(0.1d0 + dscp2)
4684 s2_6=(1+x(65))/(0.1d0 + dscp2**6)
4685 sumene = ( sumene3*sint2tab(i+1) + sumene1)*(s1+s1_6)
4686 & + (sumene4*cost2tab(i+1) +sumene2)*(s2+s2_6)
4687 c write(2,'(i2," sumene",7f9.3)') i,sumene1,sumene2,sumene3,
4689 c & dscp1,dscp2,sumene
4690 c sumene = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
4691 escloc = escloc + sumene
4692 c write (2,*) "escloc",escloc
4693 if (.not. calc_grad) goto 1
4697 C This section to check the numerical derivatives of the energy of ith side
4698 C chain in xx, yy, zz, and theta. Use the -DDEBUG compiler option or insert
4699 C #define DEBUG in the code to turn it on.
4701 write (2,*) "sumene =",sumene
4705 write (2,*) xx,yy,zz
4706 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
4707 de_dxx_num=(sumenep-sumene)/aincr
4709 write (2,*) "xx+ sumene from enesc=",sumenep
4712 write (2,*) xx,yy,zz
4713 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
4714 de_dyy_num=(sumenep-sumene)/aincr
4716 write (2,*) "yy+ sumene from enesc=",sumenep
4719 write (2,*) xx,yy,zz
4720 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
4721 de_dzz_num=(sumenep-sumene)/aincr
4723 write (2,*) "zz+ sumene from enesc=",sumenep
4724 costsave=cost2tab(i+1)
4725 sintsave=sint2tab(i+1)
4726 cost2tab(i+1)=dcos(0.5d0*(theta(i+1)+aincr))
4727 sint2tab(i+1)=dsin(0.5d0*(theta(i+1)+aincr))
4728 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
4729 de_dt_num=(sumenep-sumene)/aincr
4730 write (2,*) " t+ sumene from enesc=",sumenep
4731 cost2tab(i+1)=costsave
4732 sint2tab(i+1)=sintsave
4733 C End of diagnostics section.
4736 C Compute the gradient of esc
4738 pom_s1=(1.0d0+x(63))/(0.1d0 + dscp1)**2
4739 pom_s16=6*(1.0d0+x(64))/(0.1d0 + dscp1**6)**2
4740 pom_s2=(1.0d0+x(65))/(0.1d0 + dscp2)**2
4741 pom_s26=6*(1.0d0+x(65))/(0.1d0 + dscp2**6)**2
4742 pom_dx=dsc_i*dp2_i*cost2tab(i+1)
4743 pom_dy=dsc_i*dp2_i*sint2tab(i+1)
4744 pom_dt1=-0.5d0*dsc_i*dp2_i*(xx*sint2tab(i+1)-yy*cost2tab(i+1))
4745 pom_dt2=-0.5d0*dsc_i*dp2_i*(xx*sint2tab(i+1)+yy*cost2tab(i+1))
4746 pom1=(sumene3*sint2tab(i+1)+sumene1)
4747 & *(pom_s1/dscp1+pom_s16*dscp1**4)
4748 pom2=(sumene4*cost2tab(i+1)+sumene2)
4749 & *(pom_s2/dscp2+pom_s26*dscp2**4)
4750 sumene1x=x(2)+2*x(5)*xx+x(8)*zz+ x(9)*yy
4751 sumene3x=x(22)+2*x(25)*xx+x(28)*zz+x(29)*yy+3*x(31)*xx**2
4752 & +2*x(34)*xx*yy +2*x(35)*xx*zz +x(36)*(yy**2) +x(38)*(zz**2)
4754 sumene2x=x(12)+2*x(15)*xx+x(18)*zz+ x(19)*yy
4755 sumene4x=x(42)+2*x(45)*xx +x(48)*zz +x(49)*yy +3*x(51)*xx**2
4756 & +2*x(54)*xx*yy+2*x(55)*xx*zz+x(56)*(yy**2)+x(58)*(zz**2)
4758 de_dxx =(sumene1x+sumene3x*sint2tab(i+1))*(s1+s1_6)
4759 & +(sumene2x+sumene4x*cost2tab(i+1))*(s2+s2_6)
4760 & +(pom1+pom2)*pom_dx
4762 write(2,*), "de_dxx = ", de_dxx,de_dxx_num
4765 sumene1y=x(3) + 2*x(6)*yy + x(9)*xx + x(10)*zz
4766 sumene3y=x(23) +2*x(26)*yy +x(29)*xx +x(30)*zz +3*x(32)*yy**2
4767 & +x(34)*(xx**2) +2*x(36)*yy*xx +2*x(37)*yy*zz +x(39)*(zz**2)
4769 sumene2y=x(13) + 2*x(16)*yy + x(19)*xx + x(20)*zz
4770 sumene4y=x(43)+2*x(46)*yy+x(49)*xx +x(50)*zz
4771 & +3*x(52)*yy**2+x(54)*xx**2+2*x(56)*yy*xx +2*x(57)*yy*zz
4772 & +x(59)*zz**2 +x(60)*xx*zz
4773 de_dyy =(sumene1y+sumene3y*sint2tab(i+1))*(s1+s1_6)
4774 & +(sumene2y+sumene4y*cost2tab(i+1))*(s2+s2_6)
4775 & +(pom1-pom2)*pom_dy
4777 write(2,*), "de_dyy = ", de_dyy,de_dyy_num
4780 de_dzz =(x(24) +2*x(27)*zz +x(28)*xx +x(30)*yy
4781 & +3*x(33)*zz**2 +x(35)*xx**2 +x(37)*yy**2 +2*x(38)*zz*xx
4782 & +2*x(39)*zz*yy +x(40)*xx*yy)*sint2tab(i+1)*(s1+s1_6)
4783 & +(x(4) + 2*x(7)*zz+ x(8)*xx + x(10)*yy)*(s1+s1_6)
4784 & +(x(44)+2*x(47)*zz +x(48)*xx +x(50)*yy +3*x(53)*zz**2
4785 & +x(55)*xx**2 +x(57)*(yy**2)+2*x(58)*zz*xx +2*x(59)*zz*yy
4786 & +x(60)*xx*yy)*cost2tab(i+1)*(s2+s2_6)
4787 & + ( x(14) + 2*x(17)*zz+ x(18)*xx + x(20)*yy)*(s2+s2_6)
4789 write(2,*), "de_dzz = ", de_dzz,de_dzz_num
4792 de_dt = 0.5d0*sumene3*cost2tab(i+1)*(s1+s1_6)
4793 & -0.5d0*sumene4*sint2tab(i+1)*(s2+s2_6)
4794 & +pom1*pom_dt1+pom2*pom_dt2
4796 write(2,*), "de_dt = ", de_dt,de_dt_num
4800 cossc=scalar(dc_norm(1,i),dc_norm(1,i+nres))
4801 cossc1=scalar(dc_norm(1,i-1),dc_norm(1,i+nres))
4802 cosfac2xx=cosfac2*xx
4803 sinfac2yy=sinfac2*yy
4805 dt_dCi(k) = -(dc_norm(k,i-1)+costtab(i+1)*dc_norm(k,i))*
4807 dt_dCi1(k)= -(dc_norm(k,i)+costtab(i+1)*dc_norm(k,i-1))*
4809 pom=(dC_norm(k,i+nres)-cossc*dC_norm(k,i))*vbld_inv(i+1)
4810 pom1=(dC_norm(k,i+nres)-cossc1*dC_norm(k,i-1))*vbld_inv(i)
4811 c write (iout,*) "i",i," k",k," pom",pom," pom1",pom1,
4812 c & " dt_dCi",dt_dCi(k)," dt_dCi1",dt_dCi1(k)
4813 c write (iout,*) "dC_norm",(dC_norm(j,i),j=1,3),
4814 c & (dC_norm(j,i-1),j=1,3)," vbld_inv",vbld_inv(i+1),vbld_inv(i)
4815 dXX_Ci(k)=pom*cosfac-dt_dCi(k)*cosfac2xx
4816 dXX_Ci1(k)=-pom1*cosfac-dt_dCi1(k)*cosfac2xx
4817 dYY_Ci(k)=pom*sinfac+dt_dCi(k)*sinfac2yy
4818 dYY_Ci1(k)=pom1*sinfac+dt_dCi1(k)*sinfac2yy
4822 dZZ_Ci(k)=dZZ_Ci(k)-uzgrad(j,k,2,i-1)*dC_norm(j,i+nres)
4823 dZZ_Ci1(k)=dZZ_Ci1(k)-uzgrad(j,k,1,i-1)*dC_norm(j,i+nres)
4826 dXX_XYZ(k)=vbld_inv(i+nres)*(x_prime(k)-xx*dC_norm(k,i+nres))
4827 dYY_XYZ(k)=vbld_inv(i+nres)*(y_prime(k)-yy*dC_norm(k,i+nres))
4828 dZZ_XYZ(k)=vbld_inv(i+nres)*(z_prime(k)-zz*dC_norm(k,i+nres))
4830 dt_dCi(k) = -dt_dCi(k)/sinttab(i+1)
4831 dt_dCi1(k)= -dt_dCi1(k)/sinttab(i+1)
4835 dXX_Ctab(k,i)=dXX_Ci(k)
4836 dXX_C1tab(k,i)=dXX_Ci1(k)
4837 dYY_Ctab(k,i)=dYY_Ci(k)
4838 dYY_C1tab(k,i)=dYY_Ci1(k)
4839 dZZ_Ctab(k,i)=dZZ_Ci(k)
4840 dZZ_C1tab(k,i)=dZZ_Ci1(k)
4841 dXX_XYZtab(k,i)=dXX_XYZ(k)
4842 dYY_XYZtab(k,i)=dYY_XYZ(k)
4843 dZZ_XYZtab(k,i)=dZZ_XYZ(k)
4847 c write (iout,*) "k",k," dxx_ci1",dxx_ci1(k)," dyy_ci1",
4848 c & dyy_ci1(k)," dzz_ci1",dzz_ci1(k)
4849 c write (iout,*) "k",k," dxx_ci",dxx_ci(k)," dyy_ci",
4850 c & dyy_ci(k)," dzz_ci",dzz_ci(k)
4851 c write (iout,*) "k",k," dt_dci",dt_dci(k)," dt_dci",
4853 c write (iout,*) "k",k," dxx_XYZ",dxx_XYZ(k)," dyy_XYZ",
4854 c & dyy_XYZ(k)," dzz_XYZ",dzz_XYZ(k)
4855 gscloc(k,i-1)=gscloc(k,i-1)+de_dxx*dxx_ci1(k)
4856 & +de_dyy*dyy_ci1(k)+de_dzz*dzz_ci1(k)+de_dt*dt_dCi1(k)
4857 gscloc(k,i)=gscloc(k,i)+de_dxx*dxx_Ci(k)
4858 & +de_dyy*dyy_Ci(k)+de_dzz*dzz_Ci(k)+de_dt*dt_dCi(k)
4859 gsclocx(k,i)= de_dxx*dxx_XYZ(k)
4860 & +de_dyy*dyy_XYZ(k)+de_dzz*dzz_XYZ(k)
4862 c write(iout,*) "ENERGY GRAD = ", (gscloc(k,i-1),k=1,3),
4863 c & (gscloc(k,i),k=1,3),(gsclocx(k,i),k=1,3)
4865 C to check gradient call subroutine check_grad
4872 c------------------------------------------------------------------------------
4873 subroutine gcont(rij,r0ij,eps0ij,delta,fcont,fprimcont)
4875 C This procedure calculates two-body contact function g(rij) and its derivative:
4878 C g(rij) = esp0ij*(-0.9375*x+0.625*x**3-0.1875*x**5) ! -1 =< x =< 1
4881 C where x=(rij-r0ij)/delta
4883 C rij - interbody distance, r0ij - contact distance, eps0ij - contact energy
4886 double precision rij,r0ij,eps0ij,fcont,fprimcont
4887 double precision x,x2,x4,delta
4891 if (x.lt.-1.0D0) then
4894 else if (x.le.1.0D0) then
4897 fcont=eps0ij*(x*(-0.9375D0+0.6250D0*x2-0.1875D0*x4)+0.5D0)
4898 fprimcont=eps0ij * (-0.9375D0+1.8750D0*x2-0.9375D0*x4)/delta
4905 c------------------------------------------------------------------------------
4906 subroutine splinthet(theti,delta,ss,ssder)
4907 implicit real*8 (a-h,o-z)
4908 include 'DIMENSIONS'
4909 include 'DIMENSIONS.ZSCOPT'
4910 include 'COMMON.VAR'
4911 include 'COMMON.GEO'
4914 if (theti.gt.pipol) then
4915 call gcont(theti,thetup,1.0d0,delta,ss,ssder)
4917 call gcont(-theti,-thetlow,1.0d0,delta,ss,ssder)
4922 c------------------------------------------------------------------------------
4923 subroutine spline1(x,x0,delta,f0,f1,fprim0,f,fprim)
4925 double precision x,x0,delta,f0,f1,fprim0,f,fprim
4926 double precision ksi,ksi2,ksi3,a1,a2,a3
4927 a1=fprim0*delta/(f1-f0)
4933 f=f0+(f1-f0)*ksi*(a1+ksi*(a2+a3*ksi))
4934 fprim=(f1-f0)/delta*(a1+ksi*(2*a2+3*ksi*a3))
4937 c------------------------------------------------------------------------------
4938 subroutine spline2(x,x0,delta,f0x,f1x,fprim0x,fx)
4940 double precision x,x0,delta,f0x,f1x,fprim0x,fx
4941 double precision ksi,ksi2,ksi3,a1,a2,a3
4946 a2=3*(f1x-f0x)-2*fprim0x*delta
4947 a3=fprim0x*delta-2*(f1x-f0x)
4948 fx=f0x+a1*ksi+a2*ksi2+a3*ksi3
4951 C-----------------------------------------------------------------------------
4953 C-----------------------------------------------------------------------------
4954 subroutine etor(etors,edihcnstr,fact)
4955 implicit real*8 (a-h,o-z)
4956 include 'DIMENSIONS'
4957 include 'DIMENSIONS.ZSCOPT'
4958 include 'COMMON.VAR'
4959 include 'COMMON.GEO'
4960 include 'COMMON.LOCAL'
4961 include 'COMMON.TORSION'
4962 include 'COMMON.INTERACT'
4963 include 'COMMON.DERIV'
4964 include 'COMMON.CHAIN'
4965 include 'COMMON.NAMES'
4966 include 'COMMON.IOUNITS'
4967 include 'COMMON.FFIELD'
4968 include 'COMMON.TORCNSTR'
4970 C Set lprn=.true. for debugging
4974 do i=iphi_start,iphi_end
4975 itori=itortyp(itype(i-2))
4976 itori1=itortyp(itype(i-1))
4979 C Proline-Proline pair is a special case...
4980 if (itori.eq.3 .and. itori1.eq.3) then
4981 if (phii.gt.-dwapi3) then
4983 fac=1.0D0/(1.0D0-cosphi)
4984 etorsi=v1(1,3,3)*fac
4985 etorsi=etorsi+etorsi
4986 etors=etors+etorsi-v1(1,3,3)
4987 gloci=gloci-3*fac*etorsi*dsin(3*phii)
4990 v1ij=v1(j+1,itori,itori1)
4991 v2ij=v2(j+1,itori,itori1)
4994 etors=etors+v1ij*cosphi+v2ij*sinphi+dabs(v1ij)+dabs(v2ij)
4995 gloci=gloci+j*(v2ij*cosphi-v1ij*sinphi)
4999 v1ij=v1(j,itori,itori1)
5000 v2ij=v2(j,itori,itori1)
5003 etors=etors+v1ij*cosphi+v2ij*sinphi+dabs(v1ij)+dabs(v2ij)
5004 gloci=gloci+j*(v2ij*cosphi-v1ij*sinphi)
5008 & write (iout,'(2(a3,2x,i3,2x),2i3,6f8.3/26x,6f8.3/)')
5009 & restyp(itype(i-2)),i-2,restyp(itype(i-1)),i-1,itori,itori1,
5010 & (v1(j,itori,itori1),j=1,6),(v2(j,itori,itori1),j=1,6)
5011 gloc(i-3,icg)=gloc(i-3,icg)+wtor*fact*gloci
5012 c write (iout,*) 'i=',i,' gloc=',gloc(i-3,icg)
5014 ! 6/20/98 - dihedral angle constraints
5017 itori=idih_constr(i)
5020 if (difi.gt.drange(i)) then
5022 edihcnstr=edihcnstr+0.25d0*ftors*difi**4
5023 gloc(itori-3,icg)=gloc(itori-3,icg)+ftors*difi**3
5024 else if (difi.lt.-drange(i)) then
5026 edihcnstr=edihcnstr+0.25d0*ftors*difi**4
5027 gloc(itori-3,icg)=gloc(itori-3,icg)+ftors*difi**3
5029 ! write (iout,'(2i5,2f8.3,2e14.5)') i,itori,rad2deg*phii,
5030 ! & rad2deg*difi,0.25d0*ftors*difi**4,gloc(itori-3,icg)
5032 ! write (iout,*) 'edihcnstr',edihcnstr
5035 c------------------------------------------------------------------------------
5037 subroutine etor(etors,edihcnstr,fact)
5038 implicit real*8 (a-h,o-z)
5039 include 'DIMENSIONS'
5040 include 'DIMENSIONS.ZSCOPT'
5041 include 'COMMON.VAR'
5042 include 'COMMON.GEO'
5043 include 'COMMON.LOCAL'
5044 include 'COMMON.TORSION'
5045 include 'COMMON.INTERACT'
5046 include 'COMMON.DERIV'
5047 include 'COMMON.CHAIN'
5048 include 'COMMON.NAMES'
5049 include 'COMMON.IOUNITS'
5050 include 'COMMON.FFIELD'
5051 include 'COMMON.TORCNSTR'
5053 C Set lprn=.true. for debugging
5057 do i=iphi_start,iphi_end
5058 if (itel(i-2).eq.0 .or. itel(i-1).eq.0) goto 1215
5059 itori=itortyp(itype(i-2))
5060 itori1=itortyp(itype(i-1))
5063 C Regular cosine and sine terms
5064 do j=1,nterm(itori,itori1)
5065 v1ij=v1(j,itori,itori1)
5066 v2ij=v2(j,itori,itori1)
5069 etors=etors+v1ij*cosphi+v2ij*sinphi
5070 gloci=gloci+j*(v2ij*cosphi-v1ij*sinphi)
5074 C E = SUM ----------------------------------- - v1
5075 C [v2 cos(phi/2)+v3 sin(phi/2)]^2 + 1
5077 cosphi=dcos(0.5d0*phii)
5078 sinphi=dsin(0.5d0*phii)
5079 do j=1,nlor(itori,itori1)
5080 vl1ij=vlor1(j,itori,itori1)
5081 vl2ij=vlor2(j,itori,itori1)
5082 vl3ij=vlor3(j,itori,itori1)
5083 pom=vl2ij*cosphi+vl3ij*sinphi
5084 pom1=1.0d0/(pom*pom+1.0d0)
5085 etors=etors+vl1ij*pom1
5087 gloci=gloci+vl1ij*(vl3ij*cosphi-vl2ij*sinphi)*pom
5089 C Subtract the constant term
5090 etors=etors-v0(itori,itori1)
5092 & write (iout,'(2(a3,2x,i3,2x),2i3,6f8.3/26x,6f8.3/)')
5093 & restyp(itype(i-2)),i-2,restyp(itype(i-1)),i-1,itori,itori1,
5094 & (v1(j,itori,itori1),j=1,6),(v2(j,itori,itori1),j=1,6)
5095 gloc(i-3,icg)=gloc(i-3,icg)+wtor*fact*gloci
5096 c write (iout,*) 'i=',i,' gloc=',gloc(i-3,icg)
5099 ! 6/20/98 - dihedral angle constraints
5102 itori=idih_constr(i)
5104 difi=pinorm(phii-phi0(i))
5106 if (difi.gt.drange(i)) then
5108 edihcnstr=edihcnstr+0.25d0*ftors*difi**4
5109 gloc(itori-3,icg)=gloc(itori-3,icg)+ftors*difi**3
5110 edihi=0.25d0*ftors*difi**4
5111 else if (difi.lt.-drange(i)) then
5113 edihcnstr=edihcnstr+0.25d0*ftors*difi**4
5114 gloc(itori-3,icg)=gloc(itori-3,icg)+ftors*difi**3
5115 edihi=0.25d0*ftors*difi**4
5119 c write (iout,'(2i5,4f10.5,e15.5)') i,itori,phii,phi0(i),difi,
5121 ! write (iout,'(2i5,2f8.3,2e14.5)') i,itori,rad2deg*phii,
5122 ! & rad2deg*difi,0.25d0*ftors*difi**4,gloc(itori-3,icg)
5124 ! write (iout,*) 'edihcnstr',edihcnstr
5127 c----------------------------------------------------------------------------
5128 subroutine etor_d(etors_d,fact2)
5129 C 6/23/01 Compute double torsional energy
5130 implicit real*8 (a-h,o-z)
5131 include 'DIMENSIONS'
5132 include 'DIMENSIONS.ZSCOPT'
5133 include 'COMMON.VAR'
5134 include 'COMMON.GEO'
5135 include 'COMMON.LOCAL'
5136 include 'COMMON.TORSION'
5137 include 'COMMON.INTERACT'
5138 include 'COMMON.DERIV'
5139 include 'COMMON.CHAIN'
5140 include 'COMMON.NAMES'
5141 include 'COMMON.IOUNITS'
5142 include 'COMMON.FFIELD'
5143 include 'COMMON.TORCNSTR'
5145 C Set lprn=.true. for debugging
5149 do i=iphi_start,iphi_end-1
5150 if (itel(i-2).eq.0 .or. itel(i-1).eq.0 .or. itel(i).eq.0)
5152 itori=itortyp(itype(i-2))
5153 itori1=itortyp(itype(i-1))
5154 itori2=itortyp(itype(i))
5159 C Regular cosine and sine terms
5160 do j=1,ntermd_1(itori,itori1,itori2)
5161 v1cij=v1c(1,j,itori,itori1,itori2)
5162 v1sij=v1s(1,j,itori,itori1,itori2)
5163 v2cij=v1c(2,j,itori,itori1,itori2)
5164 v2sij=v1s(2,j,itori,itori1,itori2)
5165 cosphi1=dcos(j*phii)
5166 sinphi1=dsin(j*phii)
5167 cosphi2=dcos(j*phii1)
5168 sinphi2=dsin(j*phii1)
5169 etors_d=etors_d+v1cij*cosphi1+v1sij*sinphi1+
5170 & v2cij*cosphi2+v2sij*sinphi2
5171 gloci1=gloci1+j*(v1sij*cosphi1-v1cij*sinphi1)
5172 gloci2=gloci2+j*(v2sij*cosphi2-v2cij*sinphi2)
5174 do k=2,ntermd_2(itori,itori1,itori2)
5176 v1cdij = v2c(k,l,itori,itori1,itori2)
5177 v2cdij = v2c(l,k,itori,itori1,itori2)
5178 v1sdij = v2s(k,l,itori,itori1,itori2)
5179 v2sdij = v2s(l,k,itori,itori1,itori2)
5180 cosphi1p2=dcos(l*phii+(k-l)*phii1)
5181 cosphi1m2=dcos(l*phii-(k-l)*phii1)
5182 sinphi1p2=dsin(l*phii+(k-l)*phii1)
5183 sinphi1m2=dsin(l*phii-(k-l)*phii1)
5184 etors_d=etors_d+v1cdij*cosphi1p2+v2cdij*cosphi1m2+
5185 & v1sdij*sinphi1p2+v2sdij*sinphi1m2
5186 gloci1=gloci1+l*(v1sdij*cosphi1p2+v2sdij*cosphi1m2
5187 & -v1cdij*sinphi1p2-v2cdij*sinphi1m2)
5188 gloci2=gloci2+(k-l)*(v1sdij*cosphi1p2-v2sdij*cosphi1m2
5189 & -v1cdij*sinphi1p2+v2cdij*sinphi1m2)
5192 gloc(i-3,icg)=gloc(i-3,icg)+wtor_d*fact2*gloci1
5193 gloc(i-2,icg)=gloc(i-2,icg)+wtor_d*fact2*gloci2
5199 c------------------------------------------------------------------------------
5200 subroutine eback_sc_corr(esccor)
5201 c 7/21/2007 Correlations between the backbone-local and side-chain-local
5202 c conformational states; temporarily implemented as differences
5203 c between UNRES torsional potentials (dependent on three types of
5204 c residues) and the torsional potentials dependent on all 20 types
5205 c of residues computed from AM1 energy surfaces of terminally-blocked
5206 c amino-acid residues.
5207 implicit real*8 (a-h,o-z)
5208 include 'DIMENSIONS'
5209 include 'DIMENSIONS.ZSCOPT'
5210 include 'DIMENSIONS.FREE'
5211 include 'COMMON.VAR'
5212 include 'COMMON.GEO'
5213 include 'COMMON.LOCAL'
5214 include 'COMMON.TORSION'
5215 include 'COMMON.SCCOR'
5216 include 'COMMON.INTERACT'
5217 include 'COMMON.DERIV'
5218 include 'COMMON.CHAIN'
5219 include 'COMMON.NAMES'
5220 include 'COMMON.IOUNITS'
5221 include 'COMMON.FFIELD'
5222 include 'COMMON.CONTROL'
5224 C Set lprn=.true. for debugging
5227 c write (iout,*) "EBACK_SC_COR",itau_start,itau_end,nterm_sccor
5229 do i=itau_start,itau_end
5231 isccori=isccortyp(itype(i-2))
5232 isccori1=isccortyp(itype(i-1))
5234 cccc Added 9 May 2012
5235 cc Tauangle is torsional engle depending on the value of first digit
5236 c(see comment below)
5237 cc Omicron is flat angle depending on the value of first digit
5238 c(see comment below)
5241 do intertyp=1,3 !intertyp
5242 cc Added 09 May 2012 (Adasko)
5243 cc Intertyp means interaction type of backbone mainchain correlation:
5244 c 1 = SC...Ca...Ca...Ca
5245 c 2 = Ca...Ca...Ca...SC
5246 c 3 = SC...Ca...Ca...SCi
5248 if (((intertyp.eq.3).and.((itype(i-2).eq.10).or.
5249 & (itype(i-1).eq.10).or.(itype(i-2).eq.21).or.
5250 & (itype(i-1).eq.21)))
5251 & .or. ((intertyp.eq.1).and.((itype(i-2).eq.10)
5252 & .or.(itype(i-2).eq.21)))
5253 & .or.((intertyp.eq.2).and.((itype(i-1).eq.10).or.
5254 & (itype(i-1).eq.21)))) cycle
5255 if ((intertyp.eq.2).and.(i.eq.4).and.(itype(1).eq.21)) cycle
5256 if ((intertyp.eq.1).and.(i.eq.nres).and.(itype(nres).eq.21))
5258 do j=1,nterm_sccor(isccori,isccori1)
5259 v1ij=v1sccor(j,intertyp,isccori,isccori1)
5260 v2ij=v2sccor(j,intertyp,isccori,isccori1)
5261 cosphi=dcos(j*tauangle(intertyp,i))
5262 sinphi=dsin(j*tauangle(intertyp,i))
5263 esccor=esccor+v1ij*cosphi+v2ij*sinphi
5265 esccor_ii=esccor_ii+v1ij*cosphi+v2ij*sinphi
5267 gloci=gloci+j*(v2ij*cosphi-v1ij*sinphi)
5269 gloc_sc(intertyp,i-3,icg)=gloc_sc(intertyp,i-3,icg)+wsccor*gloci
5270 c write (iout,*) "WTF",intertyp,i,itype(i),v1ij*cosphi+v2ij*sinphi
5271 c &gloc_sc(intertyp,i-3,icg)
5273 & write (iout,'(2(a3,2x,i3,2x),2i3,6f8.3/26x,6f8.3/)')
5274 & restyp(itype(i-2)),i-2,restyp(itype(i-1)),i-1,itori,itori1,
5275 & (v1sccor(j,intertyp,itori,itori1),j=1,6)
5276 & ,(v2sccor(j,intertyp,itori,itori1),j=1,6)
5277 gsccor_loc(i-3)=gsccor_loc(i-3)+gloci
5280 write (iout,*) "i",i,(tauangle(j,i),j=1,3),esccor_ii
5284 c write (iout,*) "W@T@F", gloc_sc(1,i,icg),gloc(i,icg)
5288 c------------------------------------------------------------------------------
5289 subroutine multibody(ecorr)
5290 C This subroutine calculates multi-body contributions to energy following
5291 C the idea of Skolnick et al. If side chains I and J make a contact and
5292 C at the same time side chains I+1 and J+1 make a contact, an extra
5293 C contribution equal to sqrt(eps(i,j)*eps(i+1,j+1)) is added.
5294 implicit real*8 (a-h,o-z)
5295 include 'DIMENSIONS'
5296 include 'COMMON.IOUNITS'
5297 include 'COMMON.DERIV'
5298 include 'COMMON.INTERACT'
5299 include 'COMMON.CONTACTS'
5300 double precision gx(3),gx1(3)
5303 C Set lprn=.true. for debugging
5307 write (iout,'(a)') 'Contact function values:'
5309 write (iout,'(i2,20(1x,i2,f10.5))')
5310 & i,(jcont(j,i),facont(j,i),j=1,num_cont(i))
5325 num_conti=num_cont(i)
5326 num_conti1=num_cont(i1)
5331 if (j1.eq.j+ishift .or. j1.eq.j-ishift) then
5332 cd write(iout,*)'i=',i,' j=',j,' i1=',i1,' j1=',j1,
5333 cd & ' ishift=',ishift
5334 C Contacts I--J and I+ISHIFT--J+-ISHIFT1 occur simultaneously.
5335 C The system gains extra energy.
5336 ecorr=ecorr+esccorr(i,j,i1,j1,jj,kk)
5337 endif ! j1==j+-ishift
5346 c------------------------------------------------------------------------------
5347 double precision function esccorr(i,j,k,l,jj,kk)
5348 implicit real*8 (a-h,o-z)
5349 include 'DIMENSIONS'
5350 include 'COMMON.IOUNITS'
5351 include 'COMMON.DERIV'
5352 include 'COMMON.INTERACT'
5353 include 'COMMON.CONTACTS'
5354 double precision gx(3),gx1(3)
5359 cd write (iout,'(4i5,3f10.5)') i,j,k,l,eij,ekl,-eij*ekl
5360 C Calculate the multi-body contribution to energy.
5361 C Calculate multi-body contributions to the gradient.
5362 cd write (iout,'(2(2i3,3f10.5))')i,j,(gacont(m,jj,i),m=1,3),
5363 cd & k,l,(gacont(m,kk,k),m=1,3)
5365 gx(m) =ekl*gacont(m,jj,i)
5366 gx1(m)=eij*gacont(m,kk,k)
5367 gradxorr(m,i)=gradxorr(m,i)-gx(m)
5368 gradxorr(m,j)=gradxorr(m,j)+gx(m)
5369 gradxorr(m,k)=gradxorr(m,k)-gx1(m)
5370 gradxorr(m,l)=gradxorr(m,l)+gx1(m)
5374 gradcorr(ll,m)=gradcorr(ll,m)+gx(ll)
5379 gradcorr(ll,m)=gradcorr(ll,m)+gx1(ll)
5385 c------------------------------------------------------------------------------
5387 subroutine pack_buffer(dimen1,dimen2,atom,indx,buffer)
5388 implicit real*8 (a-h,o-z)
5389 include 'DIMENSIONS'
5390 integer dimen1,dimen2,atom,indx
5391 double precision buffer(dimen1,dimen2)
5392 double precision zapas
5393 common /contacts_hb/ zapas(3,20,maxres,7),
5394 & facont_hb(20,maxres),ees0p(20,maxres),ees0m(20,maxres),
5395 & num_cont_hb(maxres),jcont_hb(20,maxres)
5396 num_kont=num_cont_hb(atom)
5400 buffer(i,indx+(k-1)*3+j)=zapas(j,i,atom,k)
5403 buffer(i,indx+22)=facont_hb(i,atom)
5404 buffer(i,indx+23)=ees0p(i,atom)
5405 buffer(i,indx+24)=ees0m(i,atom)
5406 buffer(i,indx+25)=dfloat(jcont_hb(i,atom))
5408 buffer(1,indx+26)=dfloat(num_kont)
5411 c------------------------------------------------------------------------------
5412 subroutine unpack_buffer(dimen1,dimen2,atom,indx,buffer)
5413 implicit real*8 (a-h,o-z)
5414 include 'DIMENSIONS'
5415 integer dimen1,dimen2,atom,indx
5416 double precision buffer(dimen1,dimen2)
5417 double precision zapas
5418 common /contacts_hb/ zapas(3,20,maxres,7),
5419 & facont_hb(20,maxres),ees0p(20,maxres),ees0m(20,maxres),
5420 & num_cont_hb(maxres),jcont_hb(20,maxres)
5421 num_kont=buffer(1,indx+26)
5422 num_kont_old=num_cont_hb(atom)
5423 num_cont_hb(atom)=num_kont+num_kont_old
5428 zapas(j,ii,atom,k)=buffer(i,indx+(k-1)*3+j)
5431 facont_hb(ii,atom)=buffer(i,indx+22)
5432 ees0p(ii,atom)=buffer(i,indx+23)
5433 ees0m(ii,atom)=buffer(i,indx+24)
5434 jcont_hb(ii,atom)=buffer(i,indx+25)
5438 c------------------------------------------------------------------------------
5440 subroutine multibody_hb(ecorr,ecorr5,ecorr6,n_corr,n_corr1)
5441 C This subroutine calculates multi-body contributions to hydrogen-bonding
5442 implicit real*8 (a-h,o-z)
5443 include 'DIMENSIONS'
5444 include 'DIMENSIONS.ZSCOPT'
5445 include 'COMMON.IOUNITS'
5447 include 'COMMON.INFO'
5449 include 'COMMON.FFIELD'
5450 include 'COMMON.DERIV'
5451 include 'COMMON.INTERACT'
5452 include 'COMMON.CONTACTS'
5454 parameter (max_cont=maxconts)
5455 parameter (max_dim=2*(8*3+2))
5456 parameter (msglen1=max_cont*max_dim*4)
5457 parameter (msglen2=2*msglen1)
5458 integer source,CorrelType,CorrelID,Error
5459 double precision buffer(max_cont,max_dim)
5461 double precision gx(3),gx1(3)
5464 C Set lprn=.true. for debugging
5469 if (fgProcs.le.1) goto 30
5471 write (iout,'(a)') 'Contact function values:'
5473 write (iout,'(2i3,50(1x,i2,f5.2))')
5474 & i,num_cont_hb(i),(jcont_hb(j,i),facont_hb(j,i),
5475 & j=1,num_cont_hb(i))
5478 C Caution! Following code assumes that electrostatic interactions concerning
5479 C a given atom are split among at most two processors!
5489 cd write (iout,*) 'MyRank',MyRank,' mm',mm
5492 cd write (iout,*) 'Sending: MyRank',MyRank,' mm',mm,' ldone',ldone
5493 if (MyRank.gt.0) then
5494 C Send correlation contributions to the preceding processor
5496 nn=num_cont_hb(iatel_s)
5497 call pack_buffer(max_cont,max_dim,iatel_s,0,buffer)
5498 cd write (iout,*) 'The BUFFER array:'
5500 cd write (iout,'(i2,9(3f8.3,2x))') i,(buffer(i,j),j=1,26)
5502 if (ielstart(iatel_s).gt.iatel_s+ispp) then
5504 call pack_buffer(max_cont,max_dim,iatel_s+1,26,buffer)
5505 C Clear the contacts of the atom passed to the neighboring processor
5506 nn=num_cont_hb(iatel_s+1)
5508 cd write (iout,'(i2,9(3f8.3,2x))') i,(buffer(i,j+26),j=1,26)
5510 num_cont_hb(iatel_s)=0
5512 cd write (iout,*) 'Processor ',MyID,MyRank,
5513 cd & ' is sending correlation contribution to processor',MyID-1,
5514 cd & ' msglen=',msglen
5515 cd write (*,*) 'Processor ',MyID,MyRank,
5516 cd & ' is sending correlation contribution to processor',MyID-1,
5517 cd & ' msglen=',msglen,' CorrelType=',CorrelType
5518 call mp_bsend(buffer,msglen,MyID-1,CorrelType,CorrelID)
5519 cd write (iout,*) 'Processor ',MyID,
5520 cd & ' has sent correlation contribution to processor',MyID-1,
5521 cd & ' msglen=',msglen,' CorrelID=',CorrelID
5522 cd write (*,*) 'Processor ',MyID,
5523 cd & ' has sent correlation contribution to processor',MyID-1,
5524 cd & ' msglen=',msglen,' CorrelID=',CorrelID
5526 endif ! (MyRank.gt.0)
5530 cd write (iout,*) 'Receiving: MyRank',MyRank,' mm',mm,' ldone',ldone
5531 if (MyRank.lt.fgProcs-1) then
5532 C Receive correlation contributions from the next processor
5534 if (ielend(iatel_e).lt.nct-1) msglen=msglen2
5535 cd write (iout,*) 'Processor',MyID,
5536 cd & ' is receiving correlation contribution from processor',MyID+1,
5537 cd & ' msglen=',msglen,' CorrelType=',CorrelType
5538 cd write (*,*) 'Processor',MyID,
5539 cd & ' is receiving correlation contribution from processor',MyID+1,
5540 cd & ' msglen=',msglen,' CorrelType=',CorrelType
5542 do while (nbytes.le.0)
5543 call mp_probe(MyID+1,CorrelType,nbytes)
5545 cd print *,'Processor',MyID,' msglen',msglen,' nbytes',nbytes
5546 call mp_brecv(buffer,msglen,MyID+1,CorrelType,nbytes)
5547 cd write (iout,*) 'Processor',MyID,
5548 cd & ' has received correlation contribution from processor',MyID+1,
5549 cd & ' msglen=',msglen,' nbytes=',nbytes
5550 cd write (iout,*) 'The received BUFFER array:'
5552 cd write (iout,'(i2,9(3f8.3,2x))') i,(buffer(i,j),j=1,52)
5554 if (msglen.eq.msglen1) then
5555 call unpack_buffer(max_cont,max_dim,iatel_e+1,0,buffer)
5556 else if (msglen.eq.msglen2) then
5557 call unpack_buffer(max_cont,max_dim,iatel_e,0,buffer)
5558 call unpack_buffer(max_cont,max_dim,iatel_e+1,26,buffer)
5561 & 'ERROR!!!! message length changed while processing correlations.'
5563 & 'ERROR!!!! message length changed while processing correlations.'
5564 call mp_stopall(Error)
5565 endif ! msglen.eq.msglen1
5566 endif ! MyRank.lt.fgProcs-1
5573 write (iout,'(a)') 'Contact function values:'
5575 write (iout,'(2i3,50(1x,i2,f5.2))')
5576 & i,num_cont_hb(i),(jcont_hb(j,i),facont_hb(j,i),
5577 & j=1,num_cont_hb(i))
5581 C Remove the loop below after debugging !!!
5588 C Calculate the local-electrostatic correlation terms
5589 do i=iatel_s,iatel_e+1
5591 num_conti=num_cont_hb(i)
5592 num_conti1=num_cont_hb(i+1)
5597 c write (iout,*) 'i=',i,' j=',j,' i1=',i1,' j1=',j1,
5598 c & ' jj=',jj,' kk=',kk
5599 if (j1.eq.j+1 .or. j1.eq.j-1) then
5600 C Contacts I-J and (I+1)-(J+1) or (I+1)-(J-1) occur simultaneously.
5601 C The system gains extra energy.
5602 ecorr=ecorr+ehbcorr(i,j,i+1,j1,jj,kk,0.72D0,0.32D0)
5604 write (iout,*) "ecorr",i,j,i+1,j1,
5605 & ehbcorr(i,j,i+1,j1,jj,kk,0.72D0,0.32D0)
5608 else if (j1.eq.j) then
5609 C Contacts I-J and I-(J+1) occur simultaneously.
5610 C The system loses extra energy.
5611 c ecorr=ecorr+ehbcorr(i,j,i+1,j,jj,kk,0.60D0,-0.40D0)
5616 c write (iout,*) 'i=',i,' j=',j,' i1=',i1,' j1=',j1,
5617 c & ' jj=',jj,' kk=',kk
5619 C Contacts I-J and (I+1)-J occur simultaneously.
5620 C The system loses extra energy.
5621 c ecorr=ecorr+ehbcorr(i,j,i,j+1,jj,kk,0.60D0,-0.40D0)
5628 c------------------------------------------------------------------------------
5629 subroutine multibody_eello(ecorr,ecorr5,ecorr6,eturn6,n_corr,
5631 C This subroutine calculates multi-body contributions to hydrogen-bonding
5632 implicit real*8 (a-h,o-z)
5633 include 'DIMENSIONS'
5634 include 'DIMENSIONS.ZSCOPT'
5635 include 'COMMON.IOUNITS'
5637 include 'COMMON.INFO'
5639 include 'COMMON.FFIELD'
5640 include 'COMMON.DERIV'
5641 include 'COMMON.INTERACT'
5642 include 'COMMON.CONTACTS'
5644 parameter (max_cont=maxconts)
5645 parameter (max_dim=2*(8*3+2))
5646 parameter (msglen1=max_cont*max_dim*4)
5647 parameter (msglen2=2*msglen1)
5648 integer source,CorrelType,CorrelID,Error
5649 double precision buffer(max_cont,max_dim)
5651 double precision gx(3),gx1(3)
5654 C Set lprn=.true. for debugging
5660 if (fgProcs.le.1) goto 30
5662 write (iout,'(a)') 'Contact function values:'
5664 write (iout,'(2i3,50(1x,i2,f5.2))')
5665 & i,num_cont_hb(i),(jcont_hb(j,i),facont_hb(j,i),
5666 & j=1,num_cont_hb(i))
5669 C Caution! Following code assumes that electrostatic interactions concerning
5670 C a given atom are split among at most two processors!
5680 cd write (iout,*) 'MyRank',MyRank,' mm',mm
5683 cd write (iout,*) 'Sending: MyRank',MyRank,' mm',mm,' ldone',ldone
5684 if (MyRank.gt.0) then
5685 C Send correlation contributions to the preceding processor
5687 nn=num_cont_hb(iatel_s)
5688 call pack_buffer(max_cont,max_dim,iatel_s,0,buffer)
5689 cd write (iout,*) 'The BUFFER array:'
5691 cd write (iout,'(i2,9(3f8.3,2x))') i,(buffer(i,j),j=1,26)
5693 if (ielstart(iatel_s).gt.iatel_s+ispp) then
5695 call pack_buffer(max_cont,max_dim,iatel_s+1,26,buffer)
5696 C Clear the contacts of the atom passed to the neighboring processor
5697 nn=num_cont_hb(iatel_s+1)
5699 cd write (iout,'(i2,9(3f8.3,2x))') i,(buffer(i,j+26),j=1,26)
5701 num_cont_hb(iatel_s)=0
5703 cd write (iout,*) 'Processor ',MyID,MyRank,
5704 cd & ' is sending correlation contribution to processor',MyID-1,
5705 cd & ' msglen=',msglen
5706 cd write (*,*) 'Processor ',MyID,MyRank,
5707 cd & ' is sending correlation contribution to processor',MyID-1,
5708 cd & ' msglen=',msglen,' CorrelType=',CorrelType
5709 call mp_bsend(buffer,msglen,MyID-1,CorrelType,CorrelID)
5710 cd write (iout,*) 'Processor ',MyID,
5711 cd & ' has sent correlation contribution to processor',MyID-1,
5712 cd & ' msglen=',msglen,' CorrelID=',CorrelID
5713 cd write (*,*) 'Processor ',MyID,
5714 cd & ' has sent correlation contribution to processor',MyID-1,
5715 cd & ' msglen=',msglen,' CorrelID=',CorrelID
5717 endif ! (MyRank.gt.0)
5721 cd write (iout,*) 'Receiving: MyRank',MyRank,' mm',mm,' ldone',ldone
5722 if (MyRank.lt.fgProcs-1) then
5723 C Receive correlation contributions from the next processor
5725 if (ielend(iatel_e).lt.nct-1) msglen=msglen2
5726 cd write (iout,*) 'Processor',MyID,
5727 cd & ' is receiving correlation contribution from processor',MyID+1,
5728 cd & ' msglen=',msglen,' CorrelType=',CorrelType
5729 cd write (*,*) 'Processor',MyID,
5730 cd & ' is receiving correlation contribution from processor',MyID+1,
5731 cd & ' msglen=',msglen,' CorrelType=',CorrelType
5733 do while (nbytes.le.0)
5734 call mp_probe(MyID+1,CorrelType,nbytes)
5736 cd print *,'Processor',MyID,' msglen',msglen,' nbytes',nbytes
5737 call mp_brecv(buffer,msglen,MyID+1,CorrelType,nbytes)
5738 cd write (iout,*) 'Processor',MyID,
5739 cd & ' has received correlation contribution from processor',MyID+1,
5740 cd & ' msglen=',msglen,' nbytes=',nbytes
5741 cd write (iout,*) 'The received BUFFER array:'
5743 cd write (iout,'(i2,9(3f8.3,2x))') i,(buffer(i,j),j=1,52)
5745 if (msglen.eq.msglen1) then
5746 call unpack_buffer(max_cont,max_dim,iatel_e+1,0,buffer)
5747 else if (msglen.eq.msglen2) then
5748 call unpack_buffer(max_cont,max_dim,iatel_e,0,buffer)
5749 call unpack_buffer(max_cont,max_dim,iatel_e+1,26,buffer)
5752 & 'ERROR!!!! message length changed while processing correlations.'
5754 & 'ERROR!!!! message length changed while processing correlations.'
5755 call mp_stopall(Error)
5756 endif ! msglen.eq.msglen1
5757 endif ! MyRank.lt.fgProcs-1
5764 write (iout,'(a)') 'Contact function values:'
5766 write (iout,'(2i3,50(1x,i2,f5.2))')
5767 & i,num_cont_hb(i),(jcont_hb(j,i),facont_hb(j,i),
5768 & j=1,num_cont_hb(i))
5774 C Remove the loop below after debugging !!!
5781 C Calculate the dipole-dipole interaction energies
5782 if (wcorr6.gt.0.0d0 .or. wturn6.gt.0.0d0) then
5783 do i=iatel_s,iatel_e+1
5784 num_conti=num_cont_hb(i)
5791 C Calculate the local-electrostatic correlation terms
5792 do i=iatel_s,iatel_e+1
5794 num_conti=num_cont_hb(i)
5795 num_conti1=num_cont_hb(i+1)
5800 c write (*,*) 'i=',i,' j=',j,' i1=',i1,' j1=',j1,
5801 c & ' jj=',jj,' kk=',kk
5802 if (j1.eq.j+1 .or. j1.eq.j-1) then
5803 C Contacts I-J and (I+1)-(J+1) or (I+1)-(J-1) occur simultaneously.
5804 C The system gains extra energy.
5806 sqd1=dsqrt(d_cont(jj,i))
5807 sqd2=dsqrt(d_cont(kk,i1))
5808 sred_geom = sqd1*sqd2
5809 IF (sred_geom.lt.cutoff_corr) THEN
5810 call gcont(sred_geom,r0_corr,1.0D0,delt_corr,
5812 c write (*,*) 'i=',i,' j=',j,' i1=',i1,' j1=',j1,
5813 c & ' jj=',jj,' kk=',kk
5814 fac_prim1=0.5d0*sqd2/sqd1*fprimcont
5815 fac_prim2=0.5d0*sqd1/sqd2*fprimcont
5817 g_contij(l,1)=fac_prim1*grij_hb_cont(l,jj,i)
5818 g_contij(l,2)=fac_prim2*grij_hb_cont(l,kk,i1)
5821 cd write (iout,*) 'sred_geom=',sred_geom,
5822 cd & ' ekont=',ekont,' fprim=',fprimcont
5823 call calc_eello(i,j,i+1,j1,jj,kk)
5824 if (wcorr4.gt.0.0d0)
5825 & ecorr=ecorr+eello4(i,j,i+1,j1,jj,kk)
5826 if (wcorr5.gt.0.0d0)
5827 & ecorr5=ecorr5+eello5(i,j,i+1,j1,jj,kk)
5828 c print *,"wcorr5",ecorr5
5829 cd write(2,*)'wcorr6',wcorr6,' wturn6',wturn6
5830 cd write(2,*)'ijkl',i,j,i+1,j1
5831 if (wcorr6.gt.0.0d0 .and. (j.ne.i+4 .or. j1.ne.i+3
5832 & .or. wturn6.eq.0.0d0))then
5833 cd write (iout,*) '******ecorr6: i,j,i+1,j1',i,j,i+1,j1
5834 ecorr6=ecorr6+eello6(i,j,i+1,j1,jj,kk)
5835 cd write (iout,*) 'ecorr',ecorr,' ecorr5=',ecorr5,
5836 cd & 'ecorr6=',ecorr6
5837 cd write (iout,'(4e15.5)') sred_geom,
5838 cd & dabs(eello4(i,j,i+1,j1,jj,kk)),
5839 cd & dabs(eello5(i,j,i+1,j1,jj,kk)),
5840 cd & dabs(eello6(i,j,i+1,j1,jj,kk))
5841 else if (wturn6.gt.0.0d0
5842 & .and. (j.eq.i+4 .and. j1.eq.i+3)) then
5843 cd write (iout,*) '******eturn6: i,j,i+1,j1',i,j,i+1,j1
5844 eturn6=eturn6+eello_turn6(i,jj,kk)
5845 cd write (2,*) 'multibody_eello:eturn6',eturn6
5849 else if (j1.eq.j) then
5850 C Contacts I-J and I-(J+1) occur simultaneously.
5851 C The system loses extra energy.
5852 c ecorr=ecorr+ehbcorr(i,j,i+1,j,jj,kk,0.60D0,-0.40D0)
5857 c write (iout,*) 'i=',i,' j=',j,' i1=',i1,' j1=',j1,
5858 c & ' jj=',jj,' kk=',kk
5860 C Contacts I-J and (I+1)-J occur simultaneously.
5861 C The system loses extra energy.
5862 c ecorr=ecorr+ehbcorr(i,j,i,j+1,jj,kk,0.60D0,-0.40D0)
5869 c------------------------------------------------------------------------------
5870 double precision function ehbcorr(i,j,k,l,jj,kk,coeffp,coeffm)
5871 implicit real*8 (a-h,o-z)
5872 include 'DIMENSIONS'
5873 include 'COMMON.IOUNITS'
5874 include 'COMMON.DERIV'
5875 include 'COMMON.INTERACT'
5876 include 'COMMON.CONTACTS'
5877 double precision gx(3),gx1(3)
5887 ees=-(coeffp*ees0pij*ees0pkl+coeffm*ees0mij*ees0mkl)
5888 cd ees=-(coeffp*ees0pkl+coeffm*ees0mkl)
5889 C Following 4 lines for diagnostics.
5894 cd write (iout,*)'Contacts have occurred for peptide groups',i,j,
5896 cd write (iout,*)'Contacts have occurred for peptide groups',
5897 cd & i,j,' fcont:',eij,' eij',' eesij',ees0pij,ees0mij,' and ',k,l
5898 cd & ,' fcont ',ekl,' eeskl',ees0pkl,ees0mkl,' ees=',ees
5899 C Calculate the multi-body contribution to energy.
5900 ecorr=ecorr+ekont*ees
5902 C Calculate multi-body contributions to the gradient.
5904 ghalf=0.5D0*ees*ekl*gacont_hbr(ll,jj,i)
5905 gradcorr(ll,i)=gradcorr(ll,i)+ghalf
5906 & -ekont*(coeffp*ees0pkl*gacontp_hb1(ll,jj,i)+
5907 & coeffm*ees0mkl*gacontm_hb1(ll,jj,i))
5908 gradcorr(ll,j)=gradcorr(ll,j)+ghalf
5909 & -ekont*(coeffp*ees0pkl*gacontp_hb2(ll,jj,i)+
5910 & coeffm*ees0mkl*gacontm_hb2(ll,jj,i))
5911 ghalf=0.5D0*ees*eij*gacont_hbr(ll,kk,k)
5912 gradcorr(ll,k)=gradcorr(ll,k)+ghalf
5913 & -ekont*(coeffp*ees0pij*gacontp_hb1(ll,kk,k)+
5914 & coeffm*ees0mij*gacontm_hb1(ll,kk,k))
5915 gradcorr(ll,l)=gradcorr(ll,l)+ghalf
5916 & -ekont*(coeffp*ees0pij*gacontp_hb2(ll,kk,k)+
5917 & coeffm*ees0mij*gacontm_hb2(ll,kk,k))
5921 gradcorr(ll,m)=gradcorr(ll,m)+
5922 & ees*ekl*gacont_hbr(ll,jj,i)-
5923 & ekont*(coeffp*ees0pkl*gacontp_hb3(ll,jj,i)+
5924 & coeffm*ees0mkl*gacontm_hb3(ll,jj,i))
5929 gradcorr(ll,m)=gradcorr(ll,m)+
5930 & ees*eij*gacont_hbr(ll,kk,k)-
5931 & ekont*(coeffp*ees0pij*gacontp_hb3(ll,kk,k)+
5932 & coeffm*ees0mij*gacontm_hb3(ll,kk,k))
5939 C---------------------------------------------------------------------------
5940 subroutine dipole(i,j,jj)
5941 implicit real*8 (a-h,o-z)
5942 include 'DIMENSIONS'
5943 include 'DIMENSIONS.ZSCOPT'
5944 include 'COMMON.IOUNITS'
5945 include 'COMMON.CHAIN'
5946 include 'COMMON.FFIELD'
5947 include 'COMMON.DERIV'
5948 include 'COMMON.INTERACT'
5949 include 'COMMON.CONTACTS'
5950 include 'COMMON.TORSION'
5951 include 'COMMON.VAR'
5952 include 'COMMON.GEO'
5953 dimension dipi(2,2),dipj(2,2),dipderi(2),dipderj(2),auxvec(2),
5955 iti1 = itortyp(itype(i+1))
5956 if (j.lt.nres-1) then
5957 itj1 = itortyp(itype(j+1))
5962 dipi(iii,1)=Ub2(iii,i)
5963 dipderi(iii)=Ub2der(iii,i)
5964 dipi(iii,2)=b1(iii,iti1)
5965 dipj(iii,1)=Ub2(iii,j)
5966 dipderj(iii)=Ub2der(iii,j)
5967 dipj(iii,2)=b1(iii,itj1)
5971 call matvec2(a_chuj(1,1,jj,i),dipj(1,iii),auxvec(1))
5974 dip(kkk,jj,i)=scalar2(dipi(1,jjj),auxvec(1))
5977 if (.not.calc_grad) return
5982 call matvec2(a_chuj_der(1,1,lll,kkk,jj,i),dipj(1,iii),
5986 dipderx(lll,kkk,mmm,jj,i)=scalar2(dipi(1,jjj),auxvec(1))
5991 call transpose2(a_chuj(1,1,jj,i),auxmat(1,1))
5992 call matvec2(auxmat(1,1),dipderi(1),auxvec(1))
5994 dipderg(iii,jj,i)=scalar2(auxvec(1),dipj(1,iii))
5996 call matvec2(a_chuj(1,1,jj,i),dipderj(1),auxvec(1))
5998 dipderg(iii+2,jj,i)=scalar2(auxvec(1),dipi(1,iii))
6002 C---------------------------------------------------------------------------
6003 subroutine calc_eello(i,j,k,l,jj,kk)
6005 C This subroutine computes matrices and vectors needed to calculate
6006 C the fourth-, fifth-, and sixth-order local-electrostatic terms.
6008 implicit real*8 (a-h,o-z)
6009 include 'DIMENSIONS'
6010 include 'DIMENSIONS.ZSCOPT'
6011 include 'COMMON.IOUNITS'
6012 include 'COMMON.CHAIN'
6013 include 'COMMON.DERIV'
6014 include 'COMMON.INTERACT'
6015 include 'COMMON.CONTACTS'
6016 include 'COMMON.TORSION'
6017 include 'COMMON.VAR'
6018 include 'COMMON.GEO'
6019 include 'COMMON.FFIELD'
6020 double precision aa1(2,2),aa2(2,2),aa1t(2,2),aa2t(2,2),
6021 & aa1tder(2,2,3,5),aa2tder(2,2,3,5),auxmat(2,2)
6024 cd write (iout,*) 'calc_eello: i=',i,' j=',j,' k=',k,' l=',l,
6025 cd & ' jj=',jj,' kk=',kk
6026 cd if (i.ne.2 .or. j.ne.4 .or. k.ne.3 .or. l.ne.5) return
6029 aa1(iii,jjj)=a_chuj(iii,jjj,jj,i)
6030 aa2(iii,jjj)=a_chuj(iii,jjj,kk,k)
6033 call transpose2(aa1(1,1),aa1t(1,1))
6034 call transpose2(aa2(1,1),aa2t(1,1))
6037 call transpose2(a_chuj_der(1,1,lll,kkk,jj,i),
6038 & aa1tder(1,1,lll,kkk))
6039 call transpose2(a_chuj_der(1,1,lll,kkk,kk,k),
6040 & aa2tder(1,1,lll,kkk))
6044 C parallel orientation of the two CA-CA-CA frames.
6046 iti=itortyp(itype(i))
6050 itk1=itortyp(itype(k+1))
6051 itj=itortyp(itype(j))
6052 if (l.lt.nres-1) then
6053 itl1=itortyp(itype(l+1))
6057 C A1 kernel(j+1) A2T
6059 cd write (iout,'(3f10.5,5x,3f10.5)')
6060 cd & (EUg(iii,jjj,k),jjj=1,2),(EUg(iii,jjj,l),jjj=1,2)
6062 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
6063 & aa2tder(1,1,1,1),1,.false.,EUg(1,1,l),EUgder(1,1,l),
6064 & AEA(1,1,1),AEAderg(1,1,1),AEAderx(1,1,1,1,1,1))
6065 C Following matrices are needed only for 6-th order cumulants
6066 IF (wcorr6.gt.0.0d0) THEN
6067 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
6068 & aa2tder(1,1,1,1),1,.false.,EUgC(1,1,l),EUgCder(1,1,l),
6069 & AECA(1,1,1),AECAderg(1,1,1),AECAderx(1,1,1,1,1,1))
6070 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
6071 & aa2tder(1,1,1,1),2,.false.,Ug2DtEUg(1,1,l),
6072 & Ug2DtEUgder(1,1,1,l),ADtEA(1,1,1),ADtEAderg(1,1,1,1),
6073 & ADtEAderx(1,1,1,1,1,1))
6075 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
6076 & aa2tder(1,1,1,1),2,.false.,DtUg2EUg(1,1,l),
6077 & DtUg2EUgder(1,1,1,l),ADtEA1(1,1,1),ADtEA1derg(1,1,1,1),
6078 & ADtEA1derx(1,1,1,1,1,1))
6080 C End 6-th order cumulants
6083 cd write (2,*) 'In calc_eello6'
6085 cd write (2,*) 'iii=',iii
6087 cd write (2,*) 'kkk=',kkk
6089 cd write (2,'(3(2f10.5),5x)')
6090 cd & ((ADtEA1derx(jjj,mmm,lll,kkk,iii,1),mmm=1,2),lll=1,3)
6095 call transpose2(EUgder(1,1,k),auxmat(1,1))
6096 call matmat2(auxmat(1,1),AEA(1,1,1),EAEAderg(1,1,1,1))
6097 call transpose2(EUg(1,1,k),auxmat(1,1))
6098 call matmat2(auxmat(1,1),AEA(1,1,1),EAEA(1,1,1))
6099 call matmat2(auxmat(1,1),AEAderg(1,1,1),EAEAderg(1,1,2,1))
6103 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,1),
6104 & EAEAderx(1,1,lll,kkk,iii,1))
6108 C A1T kernel(i+1) A2
6109 call kernel(aa1t(1,1),aa2(1,1),aa1tder(1,1,1,1),
6110 & a_chuj_der(1,1,1,1,kk,k),1,.false.,EUg(1,1,k),EUgder(1,1,k),
6111 & AEA(1,1,2),AEAderg(1,1,2),AEAderx(1,1,1,1,1,2))
6112 C Following matrices are needed only for 6-th order cumulants
6113 IF (wcorr6.gt.0.0d0) THEN
6114 call kernel(aa1t(1,1),aa2(1,1),aa1tder(1,1,1,1),
6115 & a_chuj_der(1,1,1,1,kk,k),1,.false.,EUgC(1,1,k),EUgCder(1,1,k),
6116 & AECA(1,1,2),AECAderg(1,1,2),AECAderx(1,1,1,1,1,2))
6117 call kernel(aa1t(1,1),aa2(1,1),aa1tder(1,1,1,1),
6118 & a_chuj_der(1,1,1,1,kk,k),2,.false.,Ug2DtEUg(1,1,k),
6119 & Ug2DtEUgder(1,1,1,k),ADtEA(1,1,2),ADtEAderg(1,1,1,2),
6120 & ADtEAderx(1,1,1,1,1,2))
6121 call kernel(aa1t(1,1),aa2(1,1),aa1tder(1,1,1,1),
6122 & a_chuj_der(1,1,1,1,kk,k),2,.false.,DtUg2EUg(1,1,k),
6123 & DtUg2EUgder(1,1,1,k),ADtEA1(1,1,2),ADtEA1derg(1,1,1,2),
6124 & ADtEA1derx(1,1,1,1,1,2))
6126 C End 6-th order cumulants
6127 call transpose2(EUgder(1,1,l),auxmat(1,1))
6128 call matmat2(auxmat(1,1),AEA(1,1,2),EAEAderg(1,1,1,2))
6129 call transpose2(EUg(1,1,l),auxmat(1,1))
6130 call matmat2(auxmat(1,1),AEA(1,1,2),EAEA(1,1,2))
6131 call matmat2(auxmat(1,1),AEAderg(1,1,2),EAEAderg(1,1,2,2))
6135 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,2),
6136 & EAEAderx(1,1,lll,kkk,iii,2))
6141 C Calculate the vectors and their derivatives in virtual-bond dihedral angles.
6142 C They are needed only when the fifth- or the sixth-order cumulants are
6144 IF (wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0) THEN
6145 call transpose2(AEA(1,1,1),auxmat(1,1))
6146 call matvec2(auxmat(1,1),b1(1,iti),AEAb1(1,1,1))
6147 call matvec2(auxmat(1,1),Ub2(1,i),AEAb2(1,1,1))
6148 call matvec2(auxmat(1,1),Ub2der(1,i),AEAb2derg(1,2,1,1))
6149 call transpose2(AEAderg(1,1,1),auxmat(1,1))
6150 call matvec2(auxmat(1,1),b1(1,iti),AEAb1derg(1,1,1))
6151 call matvec2(auxmat(1,1),Ub2(1,i),AEAb2derg(1,1,1,1))
6152 call matvec2(AEA(1,1,1),b1(1,itk1),AEAb1(1,2,1))
6153 call matvec2(AEAderg(1,1,1),b1(1,itk1),AEAb1derg(1,2,1))
6154 call matvec2(AEA(1,1,1),Ub2(1,k+1),AEAb2(1,2,1))
6155 call matvec2(AEAderg(1,1,1),Ub2(1,k+1),AEAb2derg(1,1,2,1))
6156 call matvec2(AEA(1,1,1),Ub2der(1,k+1),AEAb2derg(1,2,2,1))
6157 call transpose2(AEA(1,1,2),auxmat(1,1))
6158 call matvec2(auxmat(1,1),b1(1,itj),AEAb1(1,1,2))
6159 call matvec2(auxmat(1,1),Ub2(1,j),AEAb2(1,1,2))
6160 call matvec2(auxmat(1,1),Ub2der(1,j),AEAb2derg(1,2,1,2))
6161 call transpose2(AEAderg(1,1,2),auxmat(1,1))
6162 call matvec2(auxmat(1,1),b1(1,itj),AEAb1derg(1,1,2))
6163 call matvec2(auxmat(1,1),Ub2(1,j),AEAb2derg(1,1,1,2))
6164 call matvec2(AEA(1,1,2),b1(1,itl1),AEAb1(1,2,2))
6165 call matvec2(AEAderg(1,1,2),b1(1,itl1),AEAb1derg(1,2,2))
6166 call matvec2(AEA(1,1,2),Ub2(1,l+1),AEAb2(1,2,2))
6167 call matvec2(AEAderg(1,1,2),Ub2(1,l+1),AEAb2derg(1,1,2,2))
6168 call matvec2(AEA(1,1,2),Ub2der(1,l+1),AEAb2derg(1,2,2,2))
6169 C Calculate the Cartesian derivatives of the vectors.
6173 call transpose2(AEAderx(1,1,lll,kkk,iii,1),auxmat(1,1))
6174 call matvec2(auxmat(1,1),b1(1,iti),
6175 & AEAb1derx(1,lll,kkk,iii,1,1))
6176 call matvec2(auxmat(1,1),Ub2(1,i),
6177 & AEAb2derx(1,lll,kkk,iii,1,1))
6178 call matvec2(AEAderx(1,1,lll,kkk,iii,1),b1(1,itk1),
6179 & AEAb1derx(1,lll,kkk,iii,2,1))
6180 call matvec2(AEAderx(1,1,lll,kkk,iii,1),Ub2(1,k+1),
6181 & AEAb2derx(1,lll,kkk,iii,2,1))
6182 call transpose2(AEAderx(1,1,lll,kkk,iii,2),auxmat(1,1))
6183 call matvec2(auxmat(1,1),b1(1,itj),
6184 & AEAb1derx(1,lll,kkk,iii,1,2))
6185 call matvec2(auxmat(1,1),Ub2(1,j),
6186 & AEAb2derx(1,lll,kkk,iii,1,2))
6187 call matvec2(AEAderx(1,1,lll,kkk,iii,2),b1(1,itl1),
6188 & AEAb1derx(1,lll,kkk,iii,2,2))
6189 call matvec2(AEAderx(1,1,lll,kkk,iii,2),Ub2(1,l+1),
6190 & AEAb2derx(1,lll,kkk,iii,2,2))
6197 C Antiparallel orientation of the two CA-CA-CA frames.
6199 iti=itortyp(itype(i))
6203 itk1=itortyp(itype(k+1))
6204 itl=itortyp(itype(l))
6205 itj=itortyp(itype(j))
6206 if (j.lt.nres-1) then
6207 itj1=itortyp(itype(j+1))
6211 C A2 kernel(j-1)T A1T
6212 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
6213 & aa2tder(1,1,1,1),1,.true.,EUg(1,1,j),EUgder(1,1,j),
6214 & AEA(1,1,1),AEAderg(1,1,1),AEAderx(1,1,1,1,1,1))
6215 C Following matrices are needed only for 6-th order cumulants
6216 IF (wcorr6.gt.0.0d0 .or. (wturn6.gt.0.0d0 .and.
6217 & j.eq.i+4 .and. l.eq.i+3)) THEN
6218 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
6219 & aa2tder(1,1,1,1),1,.true.,EUgC(1,1,j),EUgCder(1,1,j),
6220 & AECA(1,1,1),AECAderg(1,1,1),AECAderx(1,1,1,1,1,1))
6221 call kernel(aa2(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
6222 & aa2tder(1,1,1,1),2,.true.,Ug2DtEUg(1,1,j),
6223 & Ug2DtEUgder(1,1,1,j),ADtEA(1,1,1),ADtEAderg(1,1,1,1),
6224 & ADtEAderx(1,1,1,1,1,1))
6225 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
6226 & aa2tder(1,1,1,1),2,.true.,DtUg2EUg(1,1,j),
6227 & DtUg2EUgder(1,1,1,j),ADtEA1(1,1,1),ADtEA1derg(1,1,1,1),
6228 & ADtEA1derx(1,1,1,1,1,1))
6230 C End 6-th order cumulants
6231 call transpose2(EUgder(1,1,k),auxmat(1,1))
6232 call matmat2(auxmat(1,1),AEA(1,1,1),EAEAderg(1,1,1,1))
6233 call transpose2(EUg(1,1,k),auxmat(1,1))
6234 call matmat2(auxmat(1,1),AEA(1,1,1),EAEA(1,1,1))
6235 call matmat2(auxmat(1,1),AEAderg(1,1,1),EAEAderg(1,1,2,1))
6239 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,1),
6240 & EAEAderx(1,1,lll,kkk,iii,1))
6244 C A2T kernel(i+1)T A1
6245 call kernel(aa2t(1,1),aa1(1,1),aa2tder(1,1,1,1),
6246 & a_chuj_der(1,1,1,1,jj,i),1,.true.,EUg(1,1,k),EUgder(1,1,k),
6247 & AEA(1,1,2),AEAderg(1,1,2),AEAderx(1,1,1,1,1,2))
6248 C Following matrices are needed only for 6-th order cumulants
6249 IF (wcorr6.gt.0.0d0 .or. (wturn6.gt.0.0d0 .and.
6250 & j.eq.i+4 .and. l.eq.i+3)) THEN
6251 call kernel(aa2t(1,1),aa1(1,1),aa2tder(1,1,1,1),
6252 & a_chuj_der(1,1,1,1,jj,i),1,.true.,EUgC(1,1,k),EUgCder(1,1,k),
6253 & AECA(1,1,2),AECAderg(1,1,2),AECAderx(1,1,1,1,1,2))
6254 call kernel(aa2t(1,1),aa1(1,1),aa2tder(1,1,1,1),
6255 & a_chuj_der(1,1,1,1,jj,i),2,.true.,Ug2DtEUg(1,1,k),
6256 & Ug2DtEUgder(1,1,1,k),ADtEA(1,1,2),ADtEAderg(1,1,1,2),
6257 & ADtEAderx(1,1,1,1,1,2))
6258 call kernel(aa2t(1,1),aa1(1,1),aa2tder(1,1,1,1),
6259 & a_chuj_der(1,1,1,1,jj,i),2,.true.,DtUg2EUg(1,1,k),
6260 & DtUg2EUgder(1,1,1,k),ADtEA1(1,1,2),ADtEA1derg(1,1,1,2),
6261 & ADtEA1derx(1,1,1,1,1,2))
6263 C End 6-th order cumulants
6264 call transpose2(EUgder(1,1,j),auxmat(1,1))
6265 call matmat2(auxmat(1,1),AEA(1,1,1),EAEAderg(1,1,2,2))
6266 call transpose2(EUg(1,1,j),auxmat(1,1))
6267 call matmat2(auxmat(1,1),AEA(1,1,2),EAEA(1,1,2))
6268 call matmat2(auxmat(1,1),AEAderg(1,1,2),EAEAderg(1,1,2,2))
6272 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,2),
6273 & EAEAderx(1,1,lll,kkk,iii,2))
6278 C Calculate the vectors and their derivatives in virtual-bond dihedral angles.
6279 C They are needed only when the fifth- or the sixth-order cumulants are
6281 IF (wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0 .or.
6282 & (wturn6.gt.0.0d0 .and. j.eq.i+4 .and. l.eq.i+3)) THEN
6283 call transpose2(AEA(1,1,1),auxmat(1,1))
6284 call matvec2(auxmat(1,1),b1(1,iti),AEAb1(1,1,1))
6285 call matvec2(auxmat(1,1),Ub2(1,i),AEAb2(1,1,1))
6286 call matvec2(auxmat(1,1),Ub2der(1,i),AEAb2derg(1,2,1,1))
6287 call transpose2(AEAderg(1,1,1),auxmat(1,1))
6288 call matvec2(auxmat(1,1),b1(1,iti),AEAb1derg(1,1,1))
6289 call matvec2(auxmat(1,1),Ub2(1,i),AEAb2derg(1,1,1,1))
6290 call matvec2(AEA(1,1,1),b1(1,itk1),AEAb1(1,2,1))
6291 call matvec2(AEAderg(1,1,1),b1(1,itk1),AEAb1derg(1,2,1))
6292 call matvec2(AEA(1,1,1),Ub2(1,k+1),AEAb2(1,2,1))
6293 call matvec2(AEAderg(1,1,1),Ub2(1,k+1),AEAb2derg(1,1,2,1))
6294 call matvec2(AEA(1,1,1),Ub2der(1,k+1),AEAb2derg(1,2,2,1))
6295 call transpose2(AEA(1,1,2),auxmat(1,1))
6296 call matvec2(auxmat(1,1),b1(1,itj1),AEAb1(1,1,2))
6297 call matvec2(auxmat(1,1),Ub2(1,l),AEAb2(1,1,2))
6298 call matvec2(auxmat(1,1),Ub2der(1,l),AEAb2derg(1,2,1,2))
6299 call transpose2(AEAderg(1,1,2),auxmat(1,1))
6300 call matvec2(auxmat(1,1),b1(1,itl),AEAb1(1,1,2))
6301 call matvec2(auxmat(1,1),Ub2(1,l),AEAb2derg(1,1,1,2))
6302 call matvec2(AEA(1,1,2),b1(1,itj1),AEAb1(1,2,2))
6303 call matvec2(AEAderg(1,1,2),b1(1,itj1),AEAb1derg(1,2,2))
6304 call matvec2(AEA(1,1,2),Ub2(1,j),AEAb2(1,2,2))
6305 call matvec2(AEAderg(1,1,2),Ub2(1,j),AEAb2derg(1,1,2,2))
6306 call matvec2(AEA(1,1,2),Ub2der(1,j),AEAb2derg(1,2,2,2))
6307 C Calculate the Cartesian derivatives of the vectors.
6311 call transpose2(AEAderx(1,1,lll,kkk,iii,1),auxmat(1,1))
6312 call matvec2(auxmat(1,1),b1(1,iti),
6313 & AEAb1derx(1,lll,kkk,iii,1,1))
6314 call matvec2(auxmat(1,1),Ub2(1,i),
6315 & AEAb2derx(1,lll,kkk,iii,1,1))
6316 call matvec2(AEAderx(1,1,lll,kkk,iii,1),b1(1,itk1),
6317 & AEAb1derx(1,lll,kkk,iii,2,1))
6318 call matvec2(AEAderx(1,1,lll,kkk,iii,1),Ub2(1,k+1),
6319 & AEAb2derx(1,lll,kkk,iii,2,1))
6320 call transpose2(AEAderx(1,1,lll,kkk,iii,2),auxmat(1,1))
6321 call matvec2(auxmat(1,1),b1(1,itl),
6322 & AEAb1derx(1,lll,kkk,iii,1,2))
6323 call matvec2(auxmat(1,1),Ub2(1,l),
6324 & AEAb2derx(1,lll,kkk,iii,1,2))
6325 call matvec2(AEAderx(1,1,lll,kkk,iii,2),b1(1,itj1),
6326 & AEAb1derx(1,lll,kkk,iii,2,2))
6327 call matvec2(AEAderx(1,1,lll,kkk,iii,2),Ub2(1,j),
6328 & AEAb2derx(1,lll,kkk,iii,2,2))
6337 C---------------------------------------------------------------------------
6338 subroutine kernel(aa1,aa2t,aa1derx,aa2tderx,nderg,transp,
6339 & KK,KKderg,AKA,AKAderg,AKAderx)
6343 double precision aa1(2,2),aa2t(2,2),aa1derx(2,2,3,5),
6344 & aa2tderx(2,2,3,5),KK(2,2),KKderg(2,2,nderg),AKA(2,2),
6345 & AKAderg(2,2,nderg),AKAderx(2,2,3,5,2)
6350 call prodmat3(aa1(1,1),aa2t(1,1),KK(1,1),transp,AKA(1,1))
6352 call prodmat3(aa1(1,1),aa2t(1,1),KKderg(1,1,iii),transp,
6355 cd if (lprn) write (2,*) 'In kernel'
6357 cd if (lprn) write (2,*) 'kkk=',kkk
6359 call prodmat3(aa1derx(1,1,lll,kkk),aa2t(1,1),
6360 & KK(1,1),transp,AKAderx(1,1,lll,kkk,1))
6362 cd write (2,*) 'lll=',lll
6363 cd write (2,*) 'iii=1'
6365 cd write (2,'(3(2f10.5),5x)')
6366 cd & (AKAderx(jjj,mmm,lll,kkk,1),mmm=1,2)
6369 call prodmat3(aa1(1,1),aa2tderx(1,1,lll,kkk),
6370 & KK(1,1),transp,AKAderx(1,1,lll,kkk,2))
6372 cd write (2,*) 'lll=',lll
6373 cd write (2,*) 'iii=2'
6375 cd write (2,'(3(2f10.5),5x)')
6376 cd & (AKAderx(jjj,mmm,lll,kkk,2),mmm=1,2)
6383 C---------------------------------------------------------------------------
6384 double precision function eello4(i,j,k,l,jj,kk)
6385 implicit real*8 (a-h,o-z)
6386 include 'DIMENSIONS'
6387 include 'DIMENSIONS.ZSCOPT'
6388 include 'COMMON.IOUNITS'
6389 include 'COMMON.CHAIN'
6390 include 'COMMON.DERIV'
6391 include 'COMMON.INTERACT'
6392 include 'COMMON.CONTACTS'
6393 include 'COMMON.TORSION'
6394 include 'COMMON.VAR'
6395 include 'COMMON.GEO'
6396 double precision pizda(2,2),ggg1(3),ggg2(3)
6397 cd if (i.ne.1 .or. j.ne.5 .or. k.ne.2 .or.l.ne.4) then
6401 cd print *,'eello4:',i,j,k,l,jj,kk
6402 cd write (2,*) 'i',i,' j',j,' k',k,' l',l
6403 cd call checkint4(i,j,k,l,jj,kk,eel4_num)
6404 cold eij=facont_hb(jj,i)
6405 cold ekl=facont_hb(kk,k)
6407 eel4=-EAEA(1,1,1)-EAEA(2,2,1)
6409 cd eel41=-EAEA(1,1,2)-EAEA(2,2,2)
6410 gcorr_loc(k-1)=gcorr_loc(k-1)
6411 & -ekont*(EAEAderg(1,1,1,1)+EAEAderg(2,2,1,1))
6413 gcorr_loc(l-1)=gcorr_loc(l-1)
6414 & -ekont*(EAEAderg(1,1,2,1)+EAEAderg(2,2,2,1))
6416 gcorr_loc(j-1)=gcorr_loc(j-1)
6417 & -ekont*(EAEAderg(1,1,2,1)+EAEAderg(2,2,2,1))
6422 derx(lll,kkk,iii)=-EAEAderx(1,1,lll,kkk,iii,1)
6423 & -EAEAderx(2,2,lll,kkk,iii,1)
6424 cd derx(lll,kkk,iii)=0.0d0
6428 cd gcorr_loc(l-1)=0.0d0
6429 cd gcorr_loc(j-1)=0.0d0
6430 cd gcorr_loc(k-1)=0.0d0
6432 cd write (iout,*)'Contacts have occurred for peptide groups',
6433 cd & i,j,' fcont:',eij,' eij',' and ',k,l,
6434 cd & ' fcont ',ekl,' eel4=',eel4,' eel4_num',16*eel4_num
6435 if (j.lt.nres-1) then
6442 if (l.lt.nres-1) then
6450 cold ghalf=0.5d0*eel4*ekl*gacont_hbr(ll,jj,i)
6451 ggg1(ll)=eel4*g_contij(ll,1)
6452 ggg2(ll)=eel4*g_contij(ll,2)
6453 ghalf=0.5d0*ggg1(ll)
6455 gradcorr(ll,i)=gradcorr(ll,i)+ghalf+ekont*derx(ll,2,1)
6456 gradcorr(ll,i+1)=gradcorr(ll,i+1)+ekont*derx(ll,3,1)
6457 gradcorr(ll,j)=gradcorr(ll,j)+ghalf+ekont*derx(ll,4,1)
6458 gradcorr(ll,j1)=gradcorr(ll,j1)+ekont*derx(ll,5,1)
6459 cold ghalf=0.5d0*eel4*eij*gacont_hbr(ll,kk,k)
6460 ghalf=0.5d0*ggg2(ll)
6462 gradcorr(ll,k)=gradcorr(ll,k)+ghalf+ekont*derx(ll,2,2)
6463 gradcorr(ll,k+1)=gradcorr(ll,k+1)+ekont*derx(ll,3,2)
6464 gradcorr(ll,l)=gradcorr(ll,l)+ghalf+ekont*derx(ll,4,2)
6465 gradcorr(ll,l1)=gradcorr(ll,l1)+ekont*derx(ll,5,2)
6470 cold gradcorr(ll,m)=gradcorr(ll,m)+eel4*ekl*gacont_hbr(ll,jj,i)
6471 gradcorr(ll,m)=gradcorr(ll,m)+ggg1(ll)
6476 cold gradcorr(ll,m)=gradcorr(ll,m)+eel4*eij*gacont_hbr(ll,kk,k)
6477 gradcorr(ll,m)=gradcorr(ll,m)+ggg2(ll)
6483 gradcorr(ll,m)=gradcorr(ll,m)+ekont*derx(ll,1,1)
6488 gradcorr(ll,m)=gradcorr(ll,m)+ekont*derx(ll,1,2)
6492 cd write (2,*) iii,gcorr_loc(iii)
6496 cd write (2,*) 'ekont',ekont
6497 cd write (iout,*) 'eello4',ekont*eel4
6500 C---------------------------------------------------------------------------
6501 double precision function eello5(i,j,k,l,jj,kk)
6502 implicit real*8 (a-h,o-z)
6503 include 'DIMENSIONS'
6504 include 'DIMENSIONS.ZSCOPT'
6505 include 'COMMON.IOUNITS'
6506 include 'COMMON.CHAIN'
6507 include 'COMMON.DERIV'
6508 include 'COMMON.INTERACT'
6509 include 'COMMON.CONTACTS'
6510 include 'COMMON.TORSION'
6511 include 'COMMON.VAR'
6512 include 'COMMON.GEO'
6513 double precision pizda(2,2),auxmat(2,2),auxmat1(2,2),vv(2)
6514 double precision ggg1(3),ggg2(3)
6515 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
6520 C /l\ / \ \ / \ / \ / C
6521 C / \ / \ \ / \ / \ / C
6522 C j| o |l1 | o | o| o | | o |o C
6523 C \ |/k\| |/ \| / |/ \| |/ \| C
6524 C \i/ \ / \ / / \ / \ C
6526 C (I) (II) (III) (IV) C
6528 C eello5_1 eello5_2 eello5_3 eello5_4 C
6530 C Antiparallel chains C
6533 C /j\ / \ \ / \ / \ / C
6534 C / \ / \ \ / \ / \ / C
6535 C j1| o |l | o | o| o | | o |o C
6536 C \ |/k\| |/ \| / |/ \| |/ \| C
6537 C \i/ \ / \ / / \ / \ C
6539 C (I) (II) (III) (IV) C
6541 C eello5_1 eello5_2 eello5_3 eello5_4 C
6543 C o denotes a local interaction, vertical lines an electrostatic interaction. C
6545 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
6546 cd if (i.ne.2 .or. j.ne.6 .or. k.ne.3 .or. l.ne.5) then
6551 cd & 'EELLO5: Contacts have occurred for peptide groups',i,j,
6553 itk=itortyp(itype(k))
6554 itl=itortyp(itype(l))
6555 itj=itortyp(itype(j))
6560 cd call checkint5(i,j,k,l,jj,kk,eel5_1_num,eel5_2_num,
6561 cd & eel5_3_num,eel5_4_num)
6565 derx(lll,kkk,iii)=0.0d0
6569 cd eij=facont_hb(jj,i)
6570 cd ekl=facont_hb(kk,k)
6572 cd write (iout,*)'Contacts have occurred for peptide groups',
6573 cd & i,j,' fcont:',eij,' eij',' and ',k,l
6575 C Contribution from the graph I.
6576 cd write (2,*) 'AEA ',AEA(1,1,1),AEA(2,1,1),AEA(1,2,1),AEA(2,2,1)
6577 cd write (2,*) 'AEAb2',AEAb2(1,1,1),AEAb2(2,1,1)
6578 call transpose2(EUg(1,1,k),auxmat(1,1))
6579 call matmat2(AEA(1,1,1),auxmat(1,1),pizda(1,1))
6580 vv(1)=pizda(1,1)-pizda(2,2)
6581 vv(2)=pizda(1,2)+pizda(2,1)
6582 eello5_1=scalar2(AEAb2(1,1,1),Ub2(1,k))
6583 & +0.5d0*scalar2(vv(1),Dtobr2(1,i))
6585 C Explicit gradient in virtual-dihedral angles.
6586 if (i.gt.1) g_corr5_loc(i-1)=g_corr5_loc(i-1)
6587 & +ekont*(scalar2(AEAb2derg(1,2,1,1),Ub2(1,k))
6588 & +0.5d0*scalar2(vv(1),Dtobr2der(1,i)))
6589 call transpose2(EUgder(1,1,k),auxmat1(1,1))
6590 call matmat2(AEA(1,1,1),auxmat1(1,1),pizda(1,1))
6591 vv(1)=pizda(1,1)-pizda(2,2)
6592 vv(2)=pizda(1,2)+pizda(2,1)
6593 g_corr5_loc(k-1)=g_corr5_loc(k-1)
6594 & +ekont*(scalar2(AEAb2(1,1,1),Ub2der(1,k))
6595 & +0.5d0*scalar2(vv(1),Dtobr2(1,i)))
6596 call matmat2(AEAderg(1,1,1),auxmat(1,1),pizda(1,1))
6597 vv(1)=pizda(1,1)-pizda(2,2)
6598 vv(2)=pizda(1,2)+pizda(2,1)
6600 if (l.lt.nres-1) g_corr5_loc(l-1)=g_corr5_loc(l-1)
6601 & +ekont*(scalar2(AEAb2derg(1,1,1,1),Ub2(1,k))
6602 & +0.5d0*scalar2(vv(1),Dtobr2(1,i)))
6604 if (j.lt.nres-1) g_corr5_loc(j-1)=g_corr5_loc(j-1)
6605 & +ekont*(scalar2(AEAb2derg(1,1,1,1),Ub2(1,k))
6606 & +0.5d0*scalar2(vv(1),Dtobr2(1,i)))
6608 C Cartesian gradient
6612 call matmat2(AEAderx(1,1,lll,kkk,iii,1),auxmat(1,1),
6614 vv(1)=pizda(1,1)-pizda(2,2)
6615 vv(2)=pizda(1,2)+pizda(2,1)
6616 derx(lll,kkk,iii)=derx(lll,kkk,iii)
6617 & +scalar2(AEAb2derx(1,lll,kkk,iii,1,1),Ub2(1,k))
6618 & +0.5d0*scalar2(vv(1),Dtobr2(1,i))
6625 C Contribution from graph II
6626 call transpose2(EE(1,1,itk),auxmat(1,1))
6627 call matmat2(auxmat(1,1),AEA(1,1,1),pizda(1,1))
6628 vv(1)=pizda(1,1)+pizda(2,2)
6629 vv(2)=pizda(2,1)-pizda(1,2)
6630 eello5_2=scalar2(AEAb1(1,2,1),b1(1,itk))
6631 & -0.5d0*scalar2(vv(1),Ctobr(1,k))
6633 C Explicit gradient in virtual-dihedral angles.
6634 g_corr5_loc(k-1)=g_corr5_loc(k-1)
6635 & -0.5d0*ekont*scalar2(vv(1),Ctobrder(1,k))
6636 call matmat2(auxmat(1,1),AEAderg(1,1,1),pizda(1,1))
6637 vv(1)=pizda(1,1)+pizda(2,2)
6638 vv(2)=pizda(2,1)-pizda(1,2)
6640 g_corr5_loc(l-1)=g_corr5_loc(l-1)
6641 & +ekont*(scalar2(AEAb1derg(1,2,1),b1(1,itk))
6642 & -0.5d0*scalar2(vv(1),Ctobr(1,k)))
6644 g_corr5_loc(j-1)=g_corr5_loc(j-1)
6645 & +ekont*(scalar2(AEAb1derg(1,2,1),b1(1,itk))
6646 & -0.5d0*scalar2(vv(1),Ctobr(1,k)))
6648 C Cartesian gradient
6652 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,1),
6654 vv(1)=pizda(1,1)+pizda(2,2)
6655 vv(2)=pizda(2,1)-pizda(1,2)
6656 derx(lll,kkk,iii)=derx(lll,kkk,iii)
6657 & +scalar2(AEAb1derx(1,lll,kkk,iii,2,1),b1(1,itk))
6658 & -0.5d0*scalar2(vv(1),Ctobr(1,k))
6667 C Parallel orientation
6668 C Contribution from graph III
6669 call transpose2(EUg(1,1,l),auxmat(1,1))
6670 call matmat2(AEA(1,1,2),auxmat(1,1),pizda(1,1))
6671 vv(1)=pizda(1,1)-pizda(2,2)
6672 vv(2)=pizda(1,2)+pizda(2,1)
6673 eello5_3=scalar2(AEAb2(1,1,2),Ub2(1,l))
6674 & +0.5d0*scalar2(vv(1),Dtobr2(1,j))
6676 C Explicit gradient in virtual-dihedral angles.
6677 g_corr5_loc(j-1)=g_corr5_loc(j-1)
6678 & +ekont*(scalar2(AEAb2derg(1,2,1,2),Ub2(1,l))
6679 & +0.5d0*scalar2(vv(1),Dtobr2der(1,j)))
6680 call matmat2(AEAderg(1,1,2),auxmat(1,1),pizda(1,1))
6681 vv(1)=pizda(1,1)-pizda(2,2)
6682 vv(2)=pizda(1,2)+pizda(2,1)
6683 g_corr5_loc(k-1)=g_corr5_loc(k-1)
6684 & +ekont*(scalar2(AEAb2derg(1,1,1,2),Ub2(1,l))
6685 & +0.5d0*scalar2(vv(1),Dtobr2(1,j)))
6686 call transpose2(EUgder(1,1,l),auxmat1(1,1))
6687 call matmat2(AEA(1,1,2),auxmat1(1,1),pizda(1,1))
6688 vv(1)=pizda(1,1)-pizda(2,2)
6689 vv(2)=pizda(1,2)+pizda(2,1)
6690 g_corr5_loc(l-1)=g_corr5_loc(l-1)
6691 & +ekont*(scalar2(AEAb2(1,1,2),Ub2der(1,l))
6692 & +0.5d0*scalar2(vv(1),Dtobr2(1,j)))
6693 C Cartesian gradient
6697 call matmat2(AEAderx(1,1,lll,kkk,iii,2),auxmat(1,1),
6699 vv(1)=pizda(1,1)-pizda(2,2)
6700 vv(2)=pizda(1,2)+pizda(2,1)
6701 derx(lll,kkk,iii)=derx(lll,kkk,iii)
6702 & +scalar2(AEAb2derx(1,lll,kkk,iii,1,2),Ub2(1,l))
6703 & +0.5d0*scalar2(vv(1),Dtobr2(1,j))
6709 C Contribution from graph IV
6711 call transpose2(EE(1,1,itl),auxmat(1,1))
6712 call matmat2(auxmat(1,1),AEA(1,1,2),pizda(1,1))
6713 vv(1)=pizda(1,1)+pizda(2,2)
6714 vv(2)=pizda(2,1)-pizda(1,2)
6715 eello5_4=scalar2(AEAb1(1,2,2),b1(1,itl))
6716 & -0.5d0*scalar2(vv(1),Ctobr(1,l))
6718 C Explicit gradient in virtual-dihedral angles.
6719 g_corr5_loc(l-1)=g_corr5_loc(l-1)
6720 & -0.5d0*ekont*scalar2(vv(1),Ctobrder(1,l))
6721 call matmat2(auxmat(1,1),AEAderg(1,1,2),pizda(1,1))
6722 vv(1)=pizda(1,1)+pizda(2,2)
6723 vv(2)=pizda(2,1)-pizda(1,2)
6724 g_corr5_loc(k-1)=g_corr5_loc(k-1)
6725 & +ekont*(scalar2(AEAb1derg(1,2,2),b1(1,itl))
6726 & -0.5d0*scalar2(vv(1),Ctobr(1,l)))
6727 C Cartesian gradient
6731 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,2),
6733 vv(1)=pizda(1,1)+pizda(2,2)
6734 vv(2)=pizda(2,1)-pizda(1,2)
6735 derx(lll,kkk,iii)=derx(lll,kkk,iii)
6736 & +scalar2(AEAb1derx(1,lll,kkk,iii,2,2),b1(1,itl))
6737 & -0.5d0*scalar2(vv(1),Ctobr(1,l))
6743 C Antiparallel orientation
6744 C Contribution from graph III
6746 call transpose2(EUg(1,1,j),auxmat(1,1))
6747 call matmat2(AEA(1,1,2),auxmat(1,1),pizda(1,1))
6748 vv(1)=pizda(1,1)-pizda(2,2)
6749 vv(2)=pizda(1,2)+pizda(2,1)
6750 eello5_3=scalar2(AEAb2(1,1,2),Ub2(1,j))
6751 & +0.5d0*scalar2(vv(1),Dtobr2(1,l))
6753 C Explicit gradient in virtual-dihedral angles.
6754 g_corr5_loc(l-1)=g_corr5_loc(l-1)
6755 & +ekont*(scalar2(AEAb2derg(1,2,1,2),Ub2(1,j))
6756 & +0.5d0*scalar2(vv(1),Dtobr2der(1,l)))
6757 call matmat2(AEAderg(1,1,2),auxmat(1,1),pizda(1,1))
6758 vv(1)=pizda(1,1)-pizda(2,2)
6759 vv(2)=pizda(1,2)+pizda(2,1)
6760 g_corr5_loc(k-1)=g_corr5_loc(k-1)
6761 & +ekont*(scalar2(AEAb2derg(1,1,1,2),Ub2(1,j))
6762 & +0.5d0*scalar2(vv(1),Dtobr2(1,l)))
6763 call transpose2(EUgder(1,1,j),auxmat1(1,1))
6764 call matmat2(AEA(1,1,2),auxmat1(1,1),pizda(1,1))
6765 vv(1)=pizda(1,1)-pizda(2,2)
6766 vv(2)=pizda(1,2)+pizda(2,1)
6767 g_corr5_loc(j-1)=g_corr5_loc(j-1)
6768 & +ekont*(scalar2(AEAb2(1,1,2),Ub2der(1,j))
6769 & +0.5d0*scalar2(vv(1),Dtobr2(1,l)))
6770 C Cartesian gradient
6774 call matmat2(AEAderx(1,1,lll,kkk,iii,2),auxmat(1,1),
6776 vv(1)=pizda(1,1)-pizda(2,2)
6777 vv(2)=pizda(1,2)+pizda(2,1)
6778 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)
6779 & +scalar2(AEAb2derx(1,lll,kkk,iii,1,2),Ub2(1,j))
6780 & +0.5d0*scalar2(vv(1),Dtobr2(1,l))
6786 C Contribution from graph IV
6788 call transpose2(EE(1,1,itj),auxmat(1,1))
6789 call matmat2(auxmat(1,1),AEA(1,1,2),pizda(1,1))
6790 vv(1)=pizda(1,1)+pizda(2,2)
6791 vv(2)=pizda(2,1)-pizda(1,2)
6792 eello5_4=scalar2(AEAb1(1,2,2),b1(1,itj))
6793 & -0.5d0*scalar2(vv(1),Ctobr(1,j))
6795 C Explicit gradient in virtual-dihedral angles.
6796 g_corr5_loc(j-1)=g_corr5_loc(j-1)
6797 & -0.5d0*ekont*scalar2(vv(1),Ctobrder(1,j))
6798 call matmat2(auxmat(1,1),AEAderg(1,1,2),pizda(1,1))
6799 vv(1)=pizda(1,1)+pizda(2,2)
6800 vv(2)=pizda(2,1)-pizda(1,2)
6801 g_corr5_loc(k-1)=g_corr5_loc(k-1)
6802 & +ekont*(scalar2(AEAb1derg(1,2,2),b1(1,itj))
6803 & -0.5d0*scalar2(vv(1),Ctobr(1,j)))
6804 C Cartesian gradient
6808 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,2),
6810 vv(1)=pizda(1,1)+pizda(2,2)
6811 vv(2)=pizda(2,1)-pizda(1,2)
6812 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)
6813 & +scalar2(AEAb1derx(1,lll,kkk,iii,2,2),b1(1,itj))
6814 & -0.5d0*scalar2(vv(1),Ctobr(1,j))
6821 eel5=eello5_1+eello5_2+eello5_3+eello5_4
6822 cd if (i.eq.2 .and. j.eq.8 .and. k.eq.3 .and. l.eq.7) then
6823 cd write (2,*) 'ijkl',i,j,k,l
6824 cd write (2,*) 'eello5_1',eello5_1,' eello5_2',eello5_2,
6825 cd & ' eello5_3',eello5_3,' eello5_4',eello5_4
6827 cd write(iout,*) 'eello5_1',eello5_1,' eel5_1_num',16*eel5_1_num
6828 cd write(iout,*) 'eello5_2',eello5_2,' eel5_2_num',16*eel5_2_num
6829 cd write(iout,*) 'eello5_3',eello5_3,' eel5_3_num',16*eel5_3_num
6830 cd write(iout,*) 'eello5_4',eello5_4,' eel5_4_num',16*eel5_4_num
6832 if (j.lt.nres-1) then
6839 if (l.lt.nres-1) then
6849 cd write (2,*) 'eij',eij,' ekl',ekl,' ekont',ekont
6851 ggg1(ll)=eel5*g_contij(ll,1)
6852 ggg2(ll)=eel5*g_contij(ll,2)
6853 cold ghalf=0.5d0*eel5*ekl*gacont_hbr(ll,jj,i)
6854 ghalf=0.5d0*ggg1(ll)
6856 gradcorr5(ll,i)=gradcorr5(ll,i)+ghalf+ekont*derx(ll,2,1)
6857 gradcorr5(ll,i+1)=gradcorr5(ll,i+1)+ekont*derx(ll,3,1)
6858 gradcorr5(ll,j)=gradcorr5(ll,j)+ghalf+ekont*derx(ll,4,1)
6859 gradcorr5(ll,j1)=gradcorr5(ll,j1)+ekont*derx(ll,5,1)
6860 cold ghalf=0.5d0*eel5*eij*gacont_hbr(ll,kk,k)
6861 ghalf=0.5d0*ggg2(ll)
6863 gradcorr5(ll,k)=gradcorr5(ll,k)+ghalf+ekont*derx(ll,2,2)
6864 gradcorr5(ll,k+1)=gradcorr5(ll,k+1)+ekont*derx(ll,3,2)
6865 gradcorr5(ll,l)=gradcorr5(ll,l)+ghalf+ekont*derx(ll,4,2)
6866 gradcorr5(ll,l1)=gradcorr5(ll,l1)+ekont*derx(ll,5,2)
6871 cold gradcorr5(ll,m)=gradcorr5(ll,m)+eel5*ekl*gacont_hbr(ll,jj,i)
6872 gradcorr5(ll,m)=gradcorr5(ll,m)+ggg1(ll)
6877 cold gradcorr5(ll,m)=gradcorr5(ll,m)+eel5*eij*gacont_hbr(ll,kk,k)
6878 gradcorr5(ll,m)=gradcorr5(ll,m)+ggg2(ll)
6884 gradcorr5(ll,m)=gradcorr5(ll,m)+ekont*derx(ll,1,1)
6889 gradcorr5(ll,m)=gradcorr5(ll,m)+ekont*derx(ll,1,2)
6893 cd write (2,*) iii,g_corr5_loc(iii)
6897 cd write (2,*) 'ekont',ekont
6898 cd write (iout,*) 'eello5',ekont*eel5
6901 c--------------------------------------------------------------------------
6902 double precision function eello6(i,j,k,l,jj,kk)
6903 implicit real*8 (a-h,o-z)
6904 include 'DIMENSIONS'
6905 include 'DIMENSIONS.ZSCOPT'
6906 include 'COMMON.IOUNITS'
6907 include 'COMMON.CHAIN'
6908 include 'COMMON.DERIV'
6909 include 'COMMON.INTERACT'
6910 include 'COMMON.CONTACTS'
6911 include 'COMMON.TORSION'
6912 include 'COMMON.VAR'
6913 include 'COMMON.GEO'
6914 include 'COMMON.FFIELD'
6915 double precision ggg1(3),ggg2(3)
6916 cd if (i.ne.1 .or. j.ne.3 .or. k.ne.2 .or. l.ne.4) then
6921 cd & 'EELLO6: Contacts have occurred for peptide groups',i,j,
6929 cd call checkint6(i,j,k,l,jj,kk,eel6_1_num,eel6_2_num,
6930 cd & eel6_3_num,eel6_4_num,eel6_5_num,eel6_6_num)
6934 derx(lll,kkk,iii)=0.0d0
6938 cd eij=facont_hb(jj,i)
6939 cd ekl=facont_hb(kk,k)
6945 eello6_1=eello6_graph1(i,j,k,l,1,.false.)
6946 eello6_2=eello6_graph1(j,i,l,k,2,.false.)
6947 eello6_3=eello6_graph2(i,j,k,l,jj,kk,.false.)
6948 eello6_4=eello6_graph4(i,j,k,l,jj,kk,1,.false.)
6949 eello6_5=eello6_graph4(j,i,l,k,jj,kk,2,.false.)
6950 eello6_6=eello6_graph3(i,j,k,l,jj,kk,.false.)
6952 eello6_1=eello6_graph1(i,j,k,l,1,.false.)
6953 eello6_2=eello6_graph1(l,k,j,i,2,.true.)
6954 eello6_3=eello6_graph2(i,l,k,j,jj,kk,.true.)
6955 eello6_4=eello6_graph4(i,j,k,l,jj,kk,1,.false.)
6956 if (wturn6.eq.0.0d0 .or. j.ne.i+4) then
6957 eello6_5=eello6_graph4(l,k,j,i,kk,jj,2,.true.)
6961 eello6_6=eello6_graph3(i,l,k,j,jj,kk,.true.)
6963 C If turn contributions are considered, they will be handled separately.
6964 eel6=eello6_1+eello6_2+eello6_3+eello6_4+eello6_5+eello6_6
6965 cd write(iout,*) 'eello6_1',eello6_1,' eel6_1_num',16*eel6_1_num
6966 cd write(iout,*) 'eello6_2',eello6_2,' eel6_2_num',16*eel6_2_num
6967 cd write(iout,*) 'eello6_3',eello6_3,' eel6_3_num',16*eel6_3_num
6968 cd write(iout,*) 'eello6_4',eello6_4,' eel6_4_num',16*eel6_4_num
6969 cd write(iout,*) 'eello6_5',eello6_5,' eel6_5_num',16*eel6_5_num
6970 cd write(iout,*) 'eello6_6',eello6_6,' eel6_6_num',16*eel6_6_num
6973 if (j.lt.nres-1) then
6980 if (l.lt.nres-1) then
6988 ggg1(ll)=eel6*g_contij(ll,1)
6989 ggg2(ll)=eel6*g_contij(ll,2)
6990 cold ghalf=0.5d0*eel6*ekl*gacont_hbr(ll,jj,i)
6991 ghalf=0.5d0*ggg1(ll)
6993 gradcorr6(ll,i)=gradcorr6(ll,i)+ghalf+ekont*derx(ll,2,1)
6994 gradcorr6(ll,i+1)=gradcorr6(ll,i+1)+ekont*derx(ll,3,1)
6995 gradcorr6(ll,j)=gradcorr6(ll,j)+ghalf+ekont*derx(ll,4,1)
6996 gradcorr6(ll,j1)=gradcorr6(ll,j1)+ekont*derx(ll,5,1)
6997 ghalf=0.5d0*ggg2(ll)
6998 cold ghalf=0.5d0*eel6*eij*gacont_hbr(ll,kk,k)
7000 gradcorr6(ll,k)=gradcorr6(ll,k)+ghalf+ekont*derx(ll,2,2)
7001 gradcorr6(ll,k+1)=gradcorr6(ll,k+1)+ekont*derx(ll,3,2)
7002 gradcorr6(ll,l)=gradcorr6(ll,l)+ghalf+ekont*derx(ll,4,2)
7003 gradcorr6(ll,l1)=gradcorr6(ll,l1)+ekont*derx(ll,5,2)
7008 cold gradcorr6(ll,m)=gradcorr6(ll,m)+eel6*ekl*gacont_hbr(ll,jj,i)
7009 gradcorr6(ll,m)=gradcorr6(ll,m)+ggg1(ll)
7014 cold gradcorr6(ll,m)=gradcorr6(ll,m)+eel6*eij*gacont_hbr(ll,kk,k)
7015 gradcorr6(ll,m)=gradcorr6(ll,m)+ggg2(ll)
7021 gradcorr6(ll,m)=gradcorr6(ll,m)+ekont*derx(ll,1,1)
7026 gradcorr6(ll,m)=gradcorr6(ll,m)+ekont*derx(ll,1,2)
7030 cd write (2,*) iii,g_corr6_loc(iii)
7034 cd write (2,*) 'ekont',ekont
7035 cd write (iout,*) 'eello6',ekont*eel6
7038 c--------------------------------------------------------------------------
7039 double precision function eello6_graph1(i,j,k,l,imat,swap)
7040 implicit real*8 (a-h,o-z)
7041 include 'DIMENSIONS'
7042 include 'DIMENSIONS.ZSCOPT'
7043 include 'COMMON.IOUNITS'
7044 include 'COMMON.CHAIN'
7045 include 'COMMON.DERIV'
7046 include 'COMMON.INTERACT'
7047 include 'COMMON.CONTACTS'
7048 include 'COMMON.TORSION'
7049 include 'COMMON.VAR'
7050 include 'COMMON.GEO'
7051 double precision vv(2),vv1(2),pizda(2,2),auxmat(2,2),pizda1(2,2)
7055 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
7057 C Parallel Antiparallel C
7063 C \ j|/k\| / \ |/k\|l / C
7068 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
7069 itk=itortyp(itype(k))
7070 s1= scalar2(AEAb1(1,2,imat),CUgb2(1,i))
7071 s2=-scalar2(AEAb2(1,1,imat),Ug2Db1t(1,k))
7072 s3= scalar2(AEAb2(1,1,imat),CUgb2(1,k))
7073 call transpose2(EUgC(1,1,k),auxmat(1,1))
7074 call matmat2(AEA(1,1,imat),auxmat(1,1),pizda1(1,1))
7075 vv1(1)=pizda1(1,1)-pizda1(2,2)
7076 vv1(2)=pizda1(1,2)+pizda1(2,1)
7077 s4=0.5d0*scalar2(vv1(1),Dtobr2(1,i))
7078 vv(1)=AEAb1(1,2,imat)*b1(1,itk)-AEAb1(2,2,imat)*b1(2,itk)
7079 vv(2)=AEAb1(1,2,imat)*b1(2,itk)+AEAb1(2,2,imat)*b1(1,itk)
7080 s5=scalar2(vv(1),Dtobr2(1,i))
7081 cd write (2,*) 's1',s1,' s2',s2,' s3',s3,' s4', s4,' s5',s5
7082 eello6_graph1=-0.5d0*(s1+s2+s3+s4+s5)
7083 if (.not. calc_grad) return
7084 if (i.gt.1) g_corr6_loc(i-1)=g_corr6_loc(i-1)
7085 & -0.5d0*ekont*(scalar2(AEAb1(1,2,imat),CUgb2der(1,i))
7086 & -scalar2(AEAb2derg(1,2,1,imat),Ug2Db1t(1,k))
7087 & +scalar2(AEAb2derg(1,2,1,imat),CUgb2(1,k))
7088 & +0.5d0*scalar2(vv1(1),Dtobr2der(1,i))
7089 & +scalar2(vv(1),Dtobr2der(1,i)))
7090 call matmat2(AEAderg(1,1,imat),auxmat(1,1),pizda1(1,1))
7091 vv1(1)=pizda1(1,1)-pizda1(2,2)
7092 vv1(2)=pizda1(1,2)+pizda1(2,1)
7093 vv(1)=AEAb1derg(1,2,imat)*b1(1,itk)-AEAb1derg(2,2,imat)*b1(2,itk)
7094 vv(2)=AEAb1derg(1,2,imat)*b1(2,itk)+AEAb1derg(2,2,imat)*b1(1,itk)
7096 g_corr6_loc(l-1)=g_corr6_loc(l-1)
7097 & +ekont*(-0.5d0*(scalar2(AEAb1derg(1,2,imat),CUgb2(1,i))
7098 & -scalar2(AEAb2derg(1,1,1,imat),Ug2Db1t(1,k))
7099 & +scalar2(AEAb2derg(1,1,1,imat),CUgb2(1,k))
7100 & +0.5d0*scalar2(vv1(1),Dtobr2(1,i))+scalar2(vv(1),Dtobr2(1,i))))
7102 g_corr6_loc(j-1)=g_corr6_loc(j-1)
7103 & +ekont*(-0.5d0*(scalar2(AEAb1derg(1,2,imat),CUgb2(1,i))
7104 & -scalar2(AEAb2derg(1,1,1,imat),Ug2Db1t(1,k))
7105 & +scalar2(AEAb2derg(1,1,1,imat),CUgb2(1,k))
7106 & +0.5d0*scalar2(vv1(1),Dtobr2(1,i))+scalar2(vv(1),Dtobr2(1,i))))
7108 call transpose2(EUgCder(1,1,k),auxmat(1,1))
7109 call matmat2(AEA(1,1,imat),auxmat(1,1),pizda1(1,1))
7110 vv1(1)=pizda1(1,1)-pizda1(2,2)
7111 vv1(2)=pizda1(1,2)+pizda1(2,1)
7112 if (k.gt.1) g_corr6_loc(k-1)=g_corr6_loc(k-1)
7113 & +ekont*(-0.5d0*(-scalar2(AEAb2(1,1,imat),Ug2Db1tder(1,k))
7114 & +scalar2(AEAb2(1,1,imat),CUgb2der(1,k))
7115 & +0.5d0*scalar2(vv1(1),Dtobr2(1,i))))
7124 s1= scalar2(AEAb1derx(1,lll,kkk,iii,2,imat),CUgb2(1,i))
7125 s2=-scalar2(AEAb2derx(1,lll,kkk,iii,1,imat),Ug2Db1t(1,k))
7126 s3= scalar2(AEAb2derx(1,lll,kkk,iii,1,imat),CUgb2(1,k))
7127 call transpose2(EUgC(1,1,k),auxmat(1,1))
7128 call matmat2(AEAderx(1,1,lll,kkk,iii,imat),auxmat(1,1),
7130 vv1(1)=pizda1(1,1)-pizda1(2,2)
7131 vv1(2)=pizda1(1,2)+pizda1(2,1)
7132 s4=0.5d0*scalar2(vv1(1),Dtobr2(1,i))
7133 vv(1)=AEAb1derx(1,lll,kkk,iii,2,imat)*b1(1,itk)
7134 & -AEAb1derx(2,lll,kkk,iii,2,imat)*b1(2,itk)
7135 vv(2)=AEAb1derx(1,lll,kkk,iii,2,imat)*b1(2,itk)
7136 & +AEAb1derx(2,lll,kkk,iii,2,imat)*b1(1,itk)
7137 s5=scalar2(vv(1),Dtobr2(1,i))
7138 derx(lll,kkk,ind)=derx(lll,kkk,ind)-0.5d0*(s1+s2+s3+s4+s5)
7144 c----------------------------------------------------------------------------
7145 double precision function eello6_graph2(i,j,k,l,jj,kk,swap)
7146 implicit real*8 (a-h,o-z)
7147 include 'DIMENSIONS'
7148 include 'DIMENSIONS.ZSCOPT'
7149 include 'COMMON.IOUNITS'
7150 include 'COMMON.CHAIN'
7151 include 'COMMON.DERIV'
7152 include 'COMMON.INTERACT'
7153 include 'COMMON.CONTACTS'
7154 include 'COMMON.TORSION'
7155 include 'COMMON.VAR'
7156 include 'COMMON.GEO'
7158 double precision vv(2),pizda(2,2),auxmat(2,2),auxvec(2),
7159 & auxvec1(2),auxvec2(2),auxmat1(2,2)
7162 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
7164 C Parallel Antiparallel C
7170 C \ j|/k\| \ |/k\|l C
7175 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
7176 cd write (2,*) 'eello6_graph2: i,',i,' j',j,' k',k,' l',l
7177 C AL 7/4/01 s1 would occur in the sixth-order moment,
7178 C but not in a cluster cumulant
7180 s1=dip(1,jj,i)*dip(1,kk,k)
7182 call matvec2(ADtEA1(1,1,1),Ub2(1,k),auxvec(1))
7183 s2=-0.5d0*scalar2(Ub2(1,i),auxvec(1))
7184 call matvec2(ADtEA(1,1,2),Ub2(1,l),auxvec1(1))
7185 s3=-0.5d0*scalar2(Ub2(1,j),auxvec1(1))
7186 call transpose2(EUg(1,1,k),auxmat(1,1))
7187 call matmat2(ADtEA1(1,1,1),auxmat(1,1),pizda(1,1))
7188 vv(1)=pizda(1,1)-pizda(2,2)
7189 vv(2)=pizda(1,2)+pizda(2,1)
7190 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
7191 cd write (2,*) 'eello6_graph2:','s1',s1,' s2',s2,' s3',s3,' s4',s4
7193 eello6_graph2=-(s1+s2+s3+s4)
7195 eello6_graph2=-(s2+s3+s4)
7198 if (.not. calc_grad) return
7199 C Derivatives in gamma(i-1)
7202 s1=dipderg(1,jj,i)*dip(1,kk,k)
7204 s2=-0.5d0*scalar2(Ub2der(1,i),auxvec(1))
7205 call matvec2(ADtEAderg(1,1,1,2),Ub2(1,l),auxvec2(1))
7206 s3=-0.5d0*scalar2(Ub2(1,j),auxvec2(1))
7207 s4=-0.25d0*scalar2(vv(1),Dtobr2der(1,i))
7209 g_corr6_loc(i-1)=g_corr6_loc(i-1)-ekont*(s1+s2+s3+s4)
7211 g_corr6_loc(i-1)=g_corr6_loc(i-1)-ekont*(s2+s3+s4)
7213 c g_corr6_loc(i-1)=g_corr6_loc(i-1)-s3
7215 C Derivatives in gamma(k-1)
7217 s1=dip(1,jj,i)*dipderg(1,kk,k)
7219 call matvec2(ADtEA1(1,1,1),Ub2der(1,k),auxvec2(1))
7220 s2=-0.5d0*scalar2(Ub2(1,i),auxvec2(1))
7221 call matvec2(ADtEAderg(1,1,2,2),Ub2(1,l),auxvec2(1))
7222 s3=-0.5d0*scalar2(Ub2(1,j),auxvec2(1))
7223 call transpose2(EUgder(1,1,k),auxmat1(1,1))
7224 call matmat2(ADtEA1(1,1,1),auxmat1(1,1),pizda(1,1))
7225 vv(1)=pizda(1,1)-pizda(2,2)
7226 vv(2)=pizda(1,2)+pizda(2,1)
7227 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
7229 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s1+s2+s3+s4)
7231 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s2+s3+s4)
7233 c g_corr6_loc(k-1)=g_corr6_loc(k-1)-s3
7234 C Derivatives in gamma(j-1) or gamma(l-1)
7237 s1=dipderg(3,jj,i)*dip(1,kk,k)
7239 call matvec2(ADtEA1derg(1,1,1,1),Ub2(1,k),auxvec2(1))
7240 s2=-0.5d0*scalar2(Ub2(1,i),auxvec2(1))
7241 s3=-0.5d0*scalar2(Ub2der(1,j),auxvec1(1))
7242 call matmat2(ADtEA1derg(1,1,1,1),auxmat(1,1),pizda(1,1))
7243 vv(1)=pizda(1,1)-pizda(2,2)
7244 vv(2)=pizda(1,2)+pizda(2,1)
7245 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
7248 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*s1
7250 g_corr6_loc(j-1)=g_corr6_loc(j-1)-ekont*s1
7253 g_corr6_loc(j-1)=g_corr6_loc(j-1)-ekont*(s2+s3+s4)
7254 c g_corr6_loc(j-1)=g_corr6_loc(j-1)-s3
7256 C Derivatives in gamma(l-1) or gamma(j-1)
7259 s1=dip(1,jj,i)*dipderg(3,kk,k)
7261 call matvec2(ADtEA1derg(1,1,2,1),Ub2(1,k),auxvec2(1))
7262 s2=-0.5d0*scalar2(Ub2(1,i),auxvec2(1))
7263 call matvec2(ADtEA(1,1,2),Ub2der(1,l),auxvec2(1))
7264 s3=-0.5d0*scalar2(Ub2(1,j),auxvec2(1))
7265 call matmat2(ADtEA1derg(1,1,2,1),auxmat(1,1),pizda(1,1))
7266 vv(1)=pizda(1,1)-pizda(2,2)
7267 vv(2)=pizda(1,2)+pizda(2,1)
7268 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
7271 g_corr6_loc(j-1)=g_corr6_loc(j-1)-ekont*s1
7273 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*s1
7276 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*(s2+s3+s4)
7277 c g_corr6_loc(l-1)=g_corr6_loc(l-1)-s3
7279 C Cartesian derivatives.
7281 write (2,*) 'In eello6_graph2'
7283 write (2,*) 'iii=',iii
7285 write (2,*) 'kkk=',kkk
7287 write (2,'(3(2f10.5),5x)')
7288 & ((ADtEA1derx(jjj,mmm,lll,kkk,iii,1),mmm=1,2),lll=1,3)
7298 s1=dipderx(lll,kkk,1,jj,i)*dip(1,kk,k)
7300 s1=dip(1,jj,i)*dipderx(lll,kkk,1,kk,k)
7303 call matvec2(ADtEA1derx(1,1,lll,kkk,iii,1),Ub2(1,k),
7305 s2=-0.5d0*scalar2(Ub2(1,i),auxvec(1))
7306 call matvec2(ADtEAderx(1,1,lll,kkk,iii,2),Ub2(1,l),
7308 s3=-0.5d0*scalar2(Ub2(1,j),auxvec(1))
7309 call transpose2(EUg(1,1,k),auxmat(1,1))
7310 call matmat2(ADtEA1derx(1,1,lll,kkk,iii,1),auxmat(1,1),
7312 vv(1)=pizda(1,1)-pizda(2,2)
7313 vv(2)=pizda(1,2)+pizda(2,1)
7314 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
7315 cd write (2,*) 's1',s1,' s2',s2,' s3',s3,' s4',s4
7317 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s1+s2+s4)
7319 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s2+s4)
7322 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-s3
7324 derx(lll,kkk,iii)=derx(lll,kkk,iii)-s3
7331 c----------------------------------------------------------------------------
7332 double precision function eello6_graph3(i,j,k,l,jj,kk,swap)
7333 implicit real*8 (a-h,o-z)
7334 include 'DIMENSIONS'
7335 include 'DIMENSIONS.ZSCOPT'
7336 include 'COMMON.IOUNITS'
7337 include 'COMMON.CHAIN'
7338 include 'COMMON.DERIV'
7339 include 'COMMON.INTERACT'
7340 include 'COMMON.CONTACTS'
7341 include 'COMMON.TORSION'
7342 include 'COMMON.VAR'
7343 include 'COMMON.GEO'
7344 double precision vv(2),pizda(2,2),auxmat(2,2),auxvec(2)
7346 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
7348 C Parallel Antiparallel C
7354 C j|/k\| / |/k\|l / C
7359 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
7361 C 4/7/01 AL Component s1 was removed, because it pertains to the respective
7362 C energy moment and not to the cluster cumulant.
7363 iti=itortyp(itype(i))
7364 if (j.lt.nres-1) then
7365 itj1=itortyp(itype(j+1))
7369 itk=itortyp(itype(k))
7370 itk1=itortyp(itype(k+1))
7371 if (l.lt.nres-1) then
7372 itl1=itortyp(itype(l+1))
7377 s1=dip(4,jj,i)*dip(4,kk,k)
7379 call matvec2(AECA(1,1,1),b1(1,itk1),auxvec(1))
7380 s2=0.5d0*scalar2(b1(1,itk),auxvec(1))
7381 call matvec2(AECA(1,1,2),b1(1,itl1),auxvec(1))
7382 s3=0.5d0*scalar2(b1(1,itj1),auxvec(1))
7383 call transpose2(EE(1,1,itk),auxmat(1,1))
7384 call matmat2(auxmat(1,1),AECA(1,1,1),pizda(1,1))
7385 vv(1)=pizda(1,1)+pizda(2,2)
7386 vv(2)=pizda(2,1)-pizda(1,2)
7387 s4=-0.25d0*scalar2(vv(1),Ctobr(1,k))
7388 cd write (2,*) 'eello6_graph3:','s1',s1,' s2',s2,' s3',s3,' s4',s4
7390 eello6_graph3=-(s1+s2+s3+s4)
7392 eello6_graph3=-(s2+s3+s4)
7395 if (.not. calc_grad) return
7396 C Derivatives in gamma(k-1)
7397 call matvec2(AECAderg(1,1,2),b1(1,itl1),auxvec(1))
7398 s3=0.5d0*scalar2(b1(1,itj1),auxvec(1))
7399 s4=-0.25d0*scalar2(vv(1),Ctobrder(1,k))
7400 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s3+s4)
7401 C Derivatives in gamma(l-1)
7402 call matvec2(AECAderg(1,1,1),b1(1,itk1),auxvec(1))
7403 s2=0.5d0*scalar2(b1(1,itk),auxvec(1))
7404 call matmat2(auxmat(1,1),AECAderg(1,1,1),pizda(1,1))
7405 vv(1)=pizda(1,1)+pizda(2,2)
7406 vv(2)=pizda(2,1)-pizda(1,2)
7407 s4=-0.25d0*scalar2(vv(1),Ctobr(1,k))
7408 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*(s2+s4)
7409 C Cartesian derivatives.
7415 s1=dipderx(lll,kkk,4,jj,i)*dip(4,kk,k)
7417 s1=dip(4,jj,i)*dipderx(lll,kkk,4,kk,k)
7420 call matvec2(AECAderx(1,1,lll,kkk,iii,1),b1(1,itk1),
7422 s2=0.5d0*scalar2(b1(1,itk),auxvec(1))
7423 call matvec2(AECAderx(1,1,lll,kkk,iii,2),b1(1,itl1),
7425 s3=0.5d0*scalar2(b1(1,itj1),auxvec(1))
7426 call matmat2(auxmat(1,1),AECAderx(1,1,lll,kkk,iii,1),
7428 vv(1)=pizda(1,1)+pizda(2,2)
7429 vv(2)=pizda(2,1)-pizda(1,2)
7430 s4=-0.25d0*scalar2(vv(1),Ctobr(1,k))
7432 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s1+s2+s4)
7434 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s2+s4)
7437 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-s3
7439 derx(lll,kkk,iii)=derx(lll,kkk,iii)-s3
7441 c derx(lll,kkk,iii)=derx(lll,kkk,iii)-s4
7447 c----------------------------------------------------------------------------
7448 double precision function eello6_graph4(i,j,k,l,jj,kk,imat,swap)
7449 implicit real*8 (a-h,o-z)
7450 include 'DIMENSIONS'
7451 include 'DIMENSIONS.ZSCOPT'
7452 include 'COMMON.IOUNITS'
7453 include 'COMMON.CHAIN'
7454 include 'COMMON.DERIV'
7455 include 'COMMON.INTERACT'
7456 include 'COMMON.CONTACTS'
7457 include 'COMMON.TORSION'
7458 include 'COMMON.VAR'
7459 include 'COMMON.GEO'
7460 include 'COMMON.FFIELD'
7461 double precision vv(2),pizda(2,2),auxmat(2,2),auxvec(2),
7462 & auxvec1(2),auxmat1(2,2)
7464 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
7466 C Parallel Antiparallel C
7472 C \ j|/k\| \ |/k\|l C
7477 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
7479 C 4/7/01 AL Component s1 was removed, because it pertains to the respective
7480 C energy moment and not to the cluster cumulant.
7481 cd write (2,*) 'eello_graph4: wturn6',wturn6
7482 iti=itortyp(itype(i))
7483 itj=itortyp(itype(j))
7484 if (j.lt.nres-1) then
7485 itj1=itortyp(itype(j+1))
7489 itk=itortyp(itype(k))
7490 if (k.lt.nres-1) then
7491 itk1=itortyp(itype(k+1))
7495 itl=itortyp(itype(l))
7496 if (l.lt.nres-1) then
7497 itl1=itortyp(itype(l+1))
7501 cd write (2,*) 'eello6_graph4:','i',i,' j',j,' k',k,' l',l
7502 cd write (2,*) 'iti',iti,' itj',itj,' itj1',itj1,' itk',itk,
7503 cd & ' itl',itl,' itl1',itl1
7506 s1=dip(3,jj,i)*dip(3,kk,k)
7508 s1=dip(2,jj,j)*dip(2,kk,l)
7511 call matvec2(AECA(1,1,imat),Ub2(1,k),auxvec(1))
7512 s2=0.5d0*scalar2(Ub2(1,i),auxvec(1))
7514 call matvec2(ADtEA1(1,1,3-imat),b1(1,itj1),auxvec1(1))
7515 s3=-0.5d0*scalar2(b1(1,itj),auxvec1(1))
7517 call matvec2(ADtEA1(1,1,3-imat),b1(1,itl1),auxvec1(1))
7518 s3=-0.5d0*scalar2(b1(1,itl),auxvec1(1))
7520 call transpose2(EUg(1,1,k),auxmat(1,1))
7521 call matmat2(AECA(1,1,imat),auxmat(1,1),pizda(1,1))
7522 vv(1)=pizda(1,1)-pizda(2,2)
7523 vv(2)=pizda(2,1)+pizda(1,2)
7524 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
7525 cd write (2,*) 'eello6_graph4:','s1',s1,' s2',s2,' s3',s3,' s4',s4
7527 eello6_graph4=-(s1+s2+s3+s4)
7529 eello6_graph4=-(s2+s3+s4)
7531 if (.not. calc_grad) return
7532 C Derivatives in gamma(i-1)
7536 s1=dipderg(2,jj,i)*dip(3,kk,k)
7538 s1=dipderg(4,jj,j)*dip(2,kk,l)
7541 s2=0.5d0*scalar2(Ub2der(1,i),auxvec(1))
7543 call matvec2(ADtEA1derg(1,1,1,3-imat),b1(1,itj1),auxvec1(1))
7544 s3=-0.5d0*scalar2(b1(1,itj),auxvec1(1))
7546 call matvec2(ADtEA1derg(1,1,1,3-imat),b1(1,itl1),auxvec1(1))
7547 s3=-0.5d0*scalar2(b1(1,itl),auxvec1(1))
7549 s4=0.25d0*scalar2(vv(1),Dtobr2der(1,i))
7550 if (wturn6.gt.0.0d0 .and. k.eq.l+4 .and. i.eq.j+2) then
7551 cd write (2,*) 'turn6 derivatives'
7553 gel_loc_turn6(i-1)=gel_loc_turn6(i-1)-ekont*(s1+s2+s3+s4)
7555 gel_loc_turn6(i-1)=gel_loc_turn6(i-1)-ekont*(s2+s3+s4)
7559 g_corr6_loc(i-1)=g_corr6_loc(i-1)-ekont*(s1+s2+s3+s4)
7561 g_corr6_loc(i-1)=g_corr6_loc(i-1)-ekont*(s2+s3+s4)
7565 C Derivatives in gamma(k-1)
7568 s1=dip(3,jj,i)*dipderg(2,kk,k)
7570 s1=dip(2,jj,j)*dipderg(4,kk,l)
7573 call matvec2(AECA(1,1,imat),Ub2der(1,k),auxvec1(1))
7574 s2=0.5d0*scalar2(Ub2(1,i),auxvec1(1))
7576 call matvec2(ADtEA1derg(1,1,2,3-imat),b1(1,itj1),auxvec1(1))
7577 s3=-0.5d0*scalar2(b1(1,itj),auxvec1(1))
7579 call matvec2(ADtEA1derg(1,1,2,3-imat),b1(1,itl1),auxvec1(1))
7580 s3=-0.5d0*scalar2(b1(1,itl),auxvec1(1))
7582 call transpose2(EUgder(1,1,k),auxmat1(1,1))
7583 call matmat2(AECA(1,1,imat),auxmat1(1,1),pizda(1,1))
7584 vv(1)=pizda(1,1)-pizda(2,2)
7585 vv(2)=pizda(2,1)+pizda(1,2)
7586 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
7587 if (wturn6.gt.0.0d0 .and. k.eq.l+4 .and. i.eq.j+2) then
7589 gel_loc_turn6(k-1)=gel_loc_turn6(k-1)-ekont*(s1+s2+s3+s4)
7591 gel_loc_turn6(k-1)=gel_loc_turn6(k-1)-ekont*(s2+s3+s4)
7595 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s1+s2+s3+s4)
7597 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s2+s3+s4)
7600 C Derivatives in gamma(j-1) or gamma(l-1)
7601 if (l.eq.j+1 .and. l.gt.1) then
7602 call matvec2(AECAderg(1,1,imat),Ub2(1,k),auxvec(1))
7603 s2=0.5d0*scalar2(Ub2(1,i),auxvec(1))
7604 call matmat2(AECAderg(1,1,imat),auxmat(1,1),pizda(1,1))
7605 vv(1)=pizda(1,1)-pizda(2,2)
7606 vv(2)=pizda(2,1)+pizda(1,2)
7607 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
7608 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*(s2+s4)
7609 else if (j.gt.1) then
7610 call matvec2(AECAderg(1,1,imat),Ub2(1,k),auxvec(1))
7611 s2=0.5d0*scalar2(Ub2(1,i),auxvec(1))
7612 call matmat2(AECAderg(1,1,imat),auxmat(1,1),pizda(1,1))
7613 vv(1)=pizda(1,1)-pizda(2,2)
7614 vv(2)=pizda(2,1)+pizda(1,2)
7615 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
7616 if (wturn6.gt.0.0d0 .and. k.eq.l+4 .and. i.eq.j+2) then
7617 gel_loc_turn6(j-1)=gel_loc_turn6(j-1)-ekont*(s2+s4)
7619 g_corr6_loc(j-1)=g_corr6_loc(j-1)-ekont*(s2+s4)
7622 C Cartesian derivatives.
7629 s1=dipderx(lll,kkk,3,jj,i)*dip(3,kk,k)
7631 s1=dipderx(lll,kkk,2,jj,j)*dip(2,kk,l)
7635 s1=dip(3,jj,i)*dipderx(lll,kkk,3,kk,k)
7637 s1=dip(2,jj,j)*dipderx(lll,kkk,2,kk,l)
7641 call matvec2(AECAderx(1,1,lll,kkk,iii,imat),Ub2(1,k),
7643 s2=0.5d0*scalar2(Ub2(1,i),auxvec(1))
7645 call matvec2(ADtEA1derx(1,1,lll,kkk,iii,3-imat),
7646 & b1(1,itj1),auxvec(1))
7647 s3=-0.5d0*scalar2(b1(1,itj),auxvec(1))
7649 call matvec2(ADtEA1derx(1,1,lll,kkk,iii,3-imat),
7650 & b1(1,itl1),auxvec(1))
7651 s3=-0.5d0*scalar2(b1(1,itl),auxvec(1))
7653 call matmat2(AECAderx(1,1,lll,kkk,iii,imat),auxmat(1,1),
7655 vv(1)=pizda(1,1)-pizda(2,2)
7656 vv(2)=pizda(2,1)+pizda(1,2)
7657 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
7659 if (wturn6.gt.0.0d0 .and. k.eq.l+4 .and. i.eq.j+2) then
7661 derx_turn(lll,kkk,3-iii)=derx_turn(lll,kkk,3-iii)
7664 derx_turn(lll,kkk,3-iii)=derx_turn(lll,kkk,3-iii)
7667 derx_turn(lll,kkk,iii)=derx_turn(lll,kkk,iii)-s3
7670 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-(s1+s2+s4)
7672 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-(s2+s4)
7674 derx(lll,kkk,iii)=derx(lll,kkk,iii)-s3
7678 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s1+s2+s4)
7680 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s2+s4)
7683 derx(lll,kkk,iii)=derx(lll,kkk,iii)-s3
7685 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-s3
7693 c----------------------------------------------------------------------------
7694 double precision function eello_turn6(i,jj,kk)
7695 implicit real*8 (a-h,o-z)
7696 include 'DIMENSIONS'
7697 include 'DIMENSIONS.ZSCOPT'
7698 include 'COMMON.IOUNITS'
7699 include 'COMMON.CHAIN'
7700 include 'COMMON.DERIV'
7701 include 'COMMON.INTERACT'
7702 include 'COMMON.CONTACTS'
7703 include 'COMMON.TORSION'
7704 include 'COMMON.VAR'
7705 include 'COMMON.GEO'
7706 double precision vtemp1(2),vtemp2(2),vtemp3(2),vtemp4(2),
7707 & atemp(2,2),auxmat(2,2),achuj_temp(2,2),gtemp(2,2),gvec(2),
7709 double precision vtemp1d(2),vtemp2d(2),vtemp3d(2),vtemp4d(2),
7710 & atempd(2,2),auxmatd(2,2),achuj_tempd(2,2),gtempd(2,2),gvecd(2)
7711 C 4/7/01 AL Components s1, s8, and s13 were removed, because they pertain to
7712 C the respective energy moment and not to the cluster cumulant.
7717 iti=itortyp(itype(i))
7718 itk=itortyp(itype(k))
7719 itk1=itortyp(itype(k+1))
7720 itl=itortyp(itype(l))
7721 itj=itortyp(itype(j))
7722 cd write (2,*) 'itk',itk,' itk1',itk1,' itl',itl,' itj',itj
7723 cd write (2,*) 'i',i,' k',k,' j',j,' l',l
7724 cd if (i.ne.1 .or. j.ne.3 .or. k.ne.2 .or. l.ne.4) then
7729 cd & 'EELLO6: Contacts have occurred for peptide groups',i,j,
7731 cd call checkint_turn6(i,jj,kk,eel_turn6_num)
7735 derx_turn(lll,kkk,iii)=0.0d0
7742 eello6_5=eello6_graph4(l,k,j,i,kk,jj,2,.true.)
7744 cd write (2,*) 'eello6_5',eello6_5
7746 call transpose2(AEA(1,1,1),auxmat(1,1))
7747 call matmat2(EUg(1,1,i+1),auxmat(1,1),auxmat(1,1))
7748 ss1=scalar2(Ub2(1,i+2),b1(1,itl))
7749 s1 = (auxmat(1,1)+auxmat(2,2))*ss1
7753 call matvec2(EUg(1,1,i+2),b1(1,itl),vtemp1(1))
7754 call matvec2(AEA(1,1,1),vtemp1(1),vtemp1(1))
7755 s2 = scalar2(b1(1,itk),vtemp1(1))
7757 call transpose2(AEA(1,1,2),atemp(1,1))
7758 call matmat2(atemp(1,1),EUg(1,1,i+4),atemp(1,1))
7759 call matvec2(Ug2(1,1,i+2),dd(1,1,itk1),vtemp2(1))
7760 s8 = -(atemp(1,1)+atemp(2,2))*scalar2(cc(1,1,itl),vtemp2(1))
7764 call matmat2(EUg(1,1,i+3),AEA(1,1,2),auxmat(1,1))
7765 call matvec2(auxmat(1,1),Ub2(1,i+4),vtemp3(1))
7766 s12 = scalar2(Ub2(1,i+2),vtemp3(1))
7768 call transpose2(a_chuj(1,1,kk,i+1),achuj_temp(1,1))
7769 call matmat2(achuj_temp(1,1),EUg(1,1,i+2),gtemp(1,1))
7770 call matmat2(gtemp(1,1),EUg(1,1,i+3),gtemp(1,1))
7771 call matvec2(a_chuj(1,1,jj,i),Ub2(1,i+4),vtemp4(1))
7772 ss13 = scalar2(b1(1,itk),vtemp4(1))
7773 s13 = (gtemp(1,1)+gtemp(2,2))*ss13
7777 c write (2,*) 's1,s2,s8,s12,s13',s1,s2,s8,s12,s13
7783 eel_turn6 = eello6_5 - 0.5d0*(s1+s2+s12+s8+s13)
7785 C Derivatives in gamma(i+2)
7787 call transpose2(AEA(1,1,1),auxmatd(1,1))
7788 call matmat2(EUgder(1,1,i+1),auxmatd(1,1),auxmatd(1,1))
7789 s1d = (auxmatd(1,1)+auxmatd(2,2))*ss1
7790 call transpose2(AEAderg(1,1,2),atempd(1,1))
7791 call matmat2(atempd(1,1),EUg(1,1,i+4),atempd(1,1))
7792 s8d = -(atempd(1,1)+atempd(2,2))*scalar2(cc(1,1,itl),vtemp2(1))
7796 call matmat2(EUg(1,1,i+3),AEAderg(1,1,2),auxmatd(1,1))
7797 call matvec2(auxmatd(1,1),Ub2(1,i+4),vtemp3d(1))
7798 s12d = scalar2(Ub2(1,i+2),vtemp3d(1))
7804 gel_loc_turn6(i)=gel_loc_turn6(i)-0.5d0*ekont*(s1d+s8d+s12d)
7805 C Derivatives in gamma(i+3)
7807 call transpose2(AEA(1,1,1),auxmatd(1,1))
7808 call matmat2(EUg(1,1,i+1),auxmatd(1,1),auxmatd(1,1))
7809 ss1d=scalar2(Ub2der(1,i+2),b1(1,itl))
7810 s1d = (auxmatd(1,1)+auxmatd(2,2))*ss1d
7814 call matvec2(EUgder(1,1,i+2),b1(1,itl),vtemp1d(1))
7815 call matvec2(AEA(1,1,1),vtemp1d(1),vtemp1d(1))
7816 s2d = scalar2(b1(1,itk),vtemp1d(1))
7818 call matvec2(Ug2der(1,1,i+2),dd(1,1,itk1),vtemp2d(1))
7819 s8d = -(atemp(1,1)+atemp(2,2))*scalar2(cc(1,1,itl),vtemp2d(1))
7821 s12d = scalar2(Ub2der(1,i+2),vtemp3(1))
7823 call matmat2(achuj_temp(1,1),EUgder(1,1,i+2),gtempd(1,1))
7824 call matmat2(gtempd(1,1),EUg(1,1,i+3),gtempd(1,1))
7825 s13d = (gtempd(1,1)+gtempd(2,2))*ss13
7835 gel_loc_turn6(i+1)=gel_loc_turn6(i+1)
7836 & -0.5d0*ekont*(s1d+s2d+s8d+s12d+s13d)
7838 gel_loc_turn6(i+1)=gel_loc_turn6(i+1)
7839 & -0.5d0*ekont*(s2d+s12d)
7841 C Derivatives in gamma(i+4)
7842 call matmat2(EUgder(1,1,i+3),AEA(1,1,2),auxmatd(1,1))
7843 call matvec2(auxmatd(1,1),Ub2(1,i+4),vtemp3d(1))
7844 s12d = scalar2(Ub2(1,i+2),vtemp3d(1))
7846 call matmat2(achuj_temp(1,1),EUg(1,1,i+2),gtempd(1,1))
7847 call matmat2(gtempd(1,1),EUgder(1,1,i+3),gtempd(1,1))
7848 s13d = (gtempd(1,1)+gtempd(2,2))*ss13
7858 gel_loc_turn6(i+2)=gel_loc_turn6(i+2)-0.5d0*ekont*(s12d+s13d)
7860 gel_loc_turn6(i+2)=gel_loc_turn6(i+2)-0.5d0*ekont*(s12d)
7862 C Derivatives in gamma(i+5)
7864 call transpose2(AEAderg(1,1,1),auxmatd(1,1))
7865 call matmat2(EUg(1,1,i+1),auxmatd(1,1),auxmatd(1,1))
7866 s1d = (auxmatd(1,1)+auxmatd(2,2))*ss1
7870 call matvec2(EUg(1,1,i+2),b1(1,itl),vtemp1d(1))
7871 call matvec2(AEAderg(1,1,1),vtemp1d(1),vtemp1d(1))
7872 s2d = scalar2(b1(1,itk),vtemp1d(1))
7874 call transpose2(AEA(1,1,2),atempd(1,1))
7875 call matmat2(atempd(1,1),EUgder(1,1,i+4),atempd(1,1))
7876 s8d = -(atempd(1,1)+atempd(2,2))*scalar2(cc(1,1,itl),vtemp2(1))
7880 call matvec2(auxmat(1,1),Ub2der(1,i+4),vtemp3d(1))
7881 s12d = scalar2(Ub2(1,i+2),vtemp3d(1))
7883 call matvec2(a_chuj(1,1,jj,i),Ub2der(1,i+4),vtemp4d(1))
7884 ss13d = scalar2(b1(1,itk),vtemp4d(1))
7885 s13d = (gtemp(1,1)+gtemp(2,2))*ss13d
7895 gel_loc_turn6(i+3)=gel_loc_turn6(i+3)
7896 & -0.5d0*ekont*(s1d+s2d+s8d+s12d+s13d)
7898 gel_loc_turn6(i+3)=gel_loc_turn6(i+3)
7899 & -0.5d0*ekont*(s2d+s12d)
7901 C Cartesian derivatives
7906 call transpose2(AEAderx(1,1,lll,kkk,iii,1),auxmatd(1,1))
7907 call matmat2(EUg(1,1,i+1),auxmatd(1,1),auxmatd(1,1))
7908 s1d = (auxmatd(1,1)+auxmatd(2,2))*ss1
7912 call matvec2(EUg(1,1,i+2),b1(1,itl),vtemp1(1))
7913 call matvec2(AEAderx(1,1,lll,kkk,iii,1),vtemp1(1),
7915 s2d = scalar2(b1(1,itk),vtemp1d(1))
7917 call transpose2(AEAderx(1,1,lll,kkk,iii,2),atempd(1,1))
7918 call matmat2(atempd(1,1),EUg(1,1,i+4),atempd(1,1))
7919 s8d = -(atempd(1,1)+atempd(2,2))*
7920 & scalar2(cc(1,1,itl),vtemp2(1))
7924 call matmat2(EUg(1,1,i+3),AEAderx(1,1,lll,kkk,iii,2),
7926 call matvec2(auxmatd(1,1),Ub2(1,i+4),vtemp3d(1))
7927 s12d = scalar2(Ub2(1,i+2),vtemp3d(1))
7934 derx_turn(lll,kkk,iii) = derx_turn(lll,kkk,iii)
7937 derx_turn(lll,kkk,iii) = derx_turn(lll,kkk,iii)
7941 derx_turn(lll,kkk,3-iii) = derx_turn(lll,kkk,3-iii)
7942 & - 0.5d0*(s8d+s12d)
7944 derx_turn(lll,kkk,3-iii) = derx_turn(lll,kkk,3-iii)
7953 call transpose2(a_chuj_der(1,1,lll,kkk,kk,i+1),
7955 call matmat2(achuj_tempd(1,1),EUg(1,1,i+2),gtempd(1,1))
7956 call matmat2(gtempd(1,1),EUg(1,1,i+3),gtempd(1,1))
7957 s13d=(gtempd(1,1)+gtempd(2,2))*ss13
7958 derx_turn(lll,kkk,2) = derx_turn(lll,kkk,2)-0.5d0*s13d
7959 call matvec2(a_chuj_der(1,1,lll,kkk,jj,i),Ub2(1,i+4),
7961 ss13d = scalar2(b1(1,itk),vtemp4d(1))
7962 s13d = (gtemp(1,1)+gtemp(2,2))*ss13d
7963 derx_turn(lll,kkk,1) = derx_turn(lll,kkk,1)-0.5d0*s13d
7967 cd write(iout,*) 'eel6_turn6',eel_turn6,' eel_turn6_num',
7968 cd & 16*eel_turn6_num
7970 if (j.lt.nres-1) then
7977 if (l.lt.nres-1) then
7985 ggg1(ll)=eel_turn6*g_contij(ll,1)
7986 ggg2(ll)=eel_turn6*g_contij(ll,2)
7987 ghalf=0.5d0*ggg1(ll)
7989 gcorr6_turn(ll,i)=gcorr6_turn(ll,i)+ghalf
7990 & +ekont*derx_turn(ll,2,1)
7991 gcorr6_turn(ll,i+1)=gcorr6_turn(ll,i+1)+ekont*derx_turn(ll,3,1)
7992 gcorr6_turn(ll,j)=gcorr6_turn(ll,j)+ghalf
7993 & +ekont*derx_turn(ll,4,1)
7994 gcorr6_turn(ll,j1)=gcorr6_turn(ll,j1)+ekont*derx_turn(ll,5,1)
7995 ghalf=0.5d0*ggg2(ll)
7997 gcorr6_turn(ll,k)=gcorr6_turn(ll,k)+ghalf
7998 & +ekont*derx_turn(ll,2,2)
7999 gcorr6_turn(ll,k+1)=gcorr6_turn(ll,k+1)+ekont*derx_turn(ll,3,2)
8000 gcorr6_turn(ll,l)=gcorr6_turn(ll,l)+ghalf
8001 & +ekont*derx_turn(ll,4,2)
8002 gcorr6_turn(ll,l1)=gcorr6_turn(ll,l1)+ekont*derx_turn(ll,5,2)
8007 gcorr6_turn(ll,m)=gcorr6_turn(ll,m)+ggg1(ll)
8012 gcorr6_turn(ll,m)=gcorr6_turn(ll,m)+ggg2(ll)
8018 gcorr6_turn(ll,m)=gcorr6_turn(ll,m)+ekont*derx_turn(ll,1,1)
8023 gcorr6_turn(ll,m)=gcorr6_turn(ll,m)+ekont*derx_turn(ll,1,2)
8027 cd write (2,*) iii,g_corr6_loc(iii)
8030 eello_turn6=ekont*eel_turn6
8031 cd write (2,*) 'ekont',ekont
8032 cd write (2,*) 'eel_turn6',ekont*eel_turn6
8035 crc-------------------------------------------------
8036 SUBROUTINE MATVEC2(A1,V1,V2)
8037 implicit real*8 (a-h,o-z)
8038 include 'DIMENSIONS'
8039 DIMENSION A1(2,2),V1(2),V2(2)
8043 c 3 VI=VI+A1(I,K)*V1(K)
8047 vaux1=a1(1,1)*v1(1)+a1(1,2)*v1(2)
8048 vaux2=a1(2,1)*v1(1)+a1(2,2)*v1(2)
8053 C---------------------------------------
8054 SUBROUTINE MATMAT2(A1,A2,A3)
8055 implicit real*8 (a-h,o-z)
8056 include 'DIMENSIONS'
8057 DIMENSION A1(2,2),A2(2,2),A3(2,2)
8058 c DIMENSION AI3(2,2)
8062 c A3IJ=A3IJ+A1(I,K)*A2(K,J)
8068 ai3_11=a1(1,1)*a2(1,1)+a1(1,2)*a2(2,1)
8069 ai3_12=a1(1,1)*a2(1,2)+a1(1,2)*a2(2,2)
8070 ai3_21=a1(2,1)*a2(1,1)+a1(2,2)*a2(2,1)
8071 ai3_22=a1(2,1)*a2(1,2)+a1(2,2)*a2(2,2)
8079 c-------------------------------------------------------------------------
8080 double precision function scalar2(u,v)
8082 double precision u(2),v(2)
8085 scalar2=u(1)*v(1)+u(2)*v(2)
8089 C-----------------------------------------------------------------------------
8091 subroutine transpose2(a,at)
8093 double precision a(2,2),at(2,2)
8100 c--------------------------------------------------------------------------
8101 subroutine transpose(n,a,at)
8104 double precision a(n,n),at(n,n)
8112 C---------------------------------------------------------------------------
8113 subroutine prodmat3(a1,a2,kk,transp,prod)
8116 double precision a1(2,2),a2(2,2),a2t(2,2),kk(2,2),prod(2,2)
8118 crc double precision auxmat(2,2),prod_(2,2)
8121 crc call transpose2(kk(1,1),auxmat(1,1))
8122 crc call matmat2(a1(1,1),auxmat(1,1),auxmat(1,1))
8123 crc call matmat2(auxmat(1,1),a2(1,1),prod_(1,1))
8125 prod(1,1)=(a1(1,1)*kk(1,1)+a1(1,2)*kk(1,2))*a2(1,1)
8126 & +(a1(1,1)*kk(2,1)+a1(1,2)*kk(2,2))*a2(2,1)
8127 prod(1,2)=(a1(1,1)*kk(1,1)+a1(1,2)*kk(1,2))*a2(1,2)
8128 & +(a1(1,1)*kk(2,1)+a1(1,2)*kk(2,2))*a2(2,2)
8129 prod(2,1)=(a1(2,1)*kk(1,1)+a1(2,2)*kk(1,2))*a2(1,1)
8130 & +(a1(2,1)*kk(2,1)+a1(2,2)*kk(2,2))*a2(2,1)
8131 prod(2,2)=(a1(2,1)*kk(1,1)+a1(2,2)*kk(1,2))*a2(1,2)
8132 & +(a1(2,1)*kk(2,1)+a1(2,2)*kk(2,2))*a2(2,2)
8135 crc call matmat2(a1(1,1),kk(1,1),auxmat(1,1))
8136 crc call matmat2(auxmat(1,1),a2(1,1),prod_(1,1))
8138 prod(1,1)=(a1(1,1)*kk(1,1)+a1(1,2)*kk(2,1))*a2(1,1)
8139 & +(a1(1,1)*kk(1,2)+a1(1,2)*kk(2,2))*a2(2,1)
8140 prod(1,2)=(a1(1,1)*kk(1,1)+a1(1,2)*kk(2,1))*a2(1,2)
8141 & +(a1(1,1)*kk(1,2)+a1(1,2)*kk(2,2))*a2(2,2)
8142 prod(2,1)=(a1(2,1)*kk(1,1)+a1(2,2)*kk(2,1))*a2(1,1)
8143 & +(a1(2,1)*kk(1,2)+a1(2,2)*kk(2,2))*a2(2,1)
8144 prod(2,2)=(a1(2,1)*kk(1,1)+a1(2,2)*kk(2,1))*a2(1,2)
8145 & +(a1(2,1)*kk(1,2)+a1(2,2)*kk(2,2))*a2(2,2)
8148 c call transpose2(a2(1,1),a2t(1,1))
8151 crc print *,((prod_(i,j),i=1,2),j=1,2)
8152 crc print *,((prod(i,j),i=1,2),j=1,2)
8156 C-----------------------------------------------------------------------------
8157 double precision function scalar(u,v)
8159 double precision u(3),v(3)