1 subroutine etotal(energia,fact)
2 implicit real*8 (a-h,o-z)
8 cMS$ATTRIBUTES C :: proc_proc
11 include 'COMMON.IOUNITS'
12 double precision energia(0:max_ene),energia1(0:max_ene+1)
18 include 'COMMON.FFIELD'
19 include 'COMMON.DERIV'
20 include 'COMMON.INTERACT'
21 include 'COMMON.SBRIDGE'
22 include 'COMMON.CHAIN'
23 include 'COMMON.CONTROL'
25 double precision fact(5)
26 cd write(iout, '(a,i2)')'Calling etotal ipot=',ipot
27 cd print *,'nnt=',nnt,' nct=',nct
29 C Compute the side-chain and electrostatic interaction energy
31 goto (101,102,103,104,105) ipot
32 C Lennard-Jones potential.
34 cd print '(a)','Exit ELJ'
36 C Lennard-Jones-Kihara potential (shifted).
39 C Berne-Pechukas potential (dilated LJ, angular dependence).
42 C Gay-Berne potential (shifted LJ, angular dependence).
45 C Gay-Berne-Vorobjev potential (shifted LJ, angular dependence).
48 C Calculate electrostatic (H-bonding) energy of the main chain.
50 106 call eelec(ees,evdw1,eel_loc,eello_turn3,eello_turn4)
52 C Calculate excluded-volume interaction energy between peptide groups
55 call escp(evdw2,evdw2_14)
57 c Calculate the bond-stretching energy
60 c write (iout,*) "estr",estr
62 C Calculate the disulfide-bridge and other energy and the contributions
63 C from other distance constraints.
64 cd print *,'Calling EHPB'
66 cd print *,'EHPB exitted succesfully.'
68 C Calculate the virtual-bond-angle energy.
71 cd print *,'Bend energy finished.'
73 C Calculate the SC local energy.
76 cd print *,'SCLOC energy finished.'
78 C Calculate the virtual-bond torsional energy.
80 cd print *,'nterm=',nterm
81 call etor(etors,edihcnstr,fact(1))
83 C 6/23/01 Calculate double-torsional energy
85 call etor_d(etors_d,fact(2))
87 C 21/5/07 Calculate local sicdechain correlation energy
89 call eback_sc_corr(esccor,fact(1))
91 C 12/1/95 Multi-body terms
95 if (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0
96 & .or. wturn6.gt.0.0d0) then
97 c print *,"calling multibody_eello"
98 call multibody_eello(ecorr,ecorr5,ecorr6,eturn6,n_corr,n_corr1)
99 c write (*,*) 'n_corr=',n_corr,' n_corr1=',n_corr1
100 c print *,ecorr,ecorr5,ecorr6,eturn6
102 if (wcorr4.eq.0.0d0 .and. wcorr.gt.0.0d0) then
103 call multibody_hb(ecorr,ecorr5,ecorr6,n_corr,n_corr1)
106 c write(iout,*) "TEST_ENE",constr_homology
107 if (constr_homology.ge.1) then
108 call e_modeller(ehomology_constr)
110 ehomology_constr=0.0d0
112 c write(iout,*) "TEST_ENE",ehomology_constr
114 C BARTEK for dfa test!
115 if (wdfa_dist.gt.0) call edfad(edfadis)
116 c print*, 'edfad is finished!', edfadis
117 if (wdfa_tor.gt.0) call edfat(edfator)
118 c print*, 'edfat is finished!', edfator
119 if (wdfa_nei.gt.0) call edfan(edfanei)
120 c print*, 'edfan is finished!', edfanei
121 if (wdfa_beta.gt.0) call edfab(edfabet)
122 c print*, 'edfab is finished!', edfabet
125 C call multibody(ecorr)
130 etot=wsc*evdw+wscp*evdw2+welec*fact(1)*ees+wvdwpp*evdw1
131 & +wang*ebe+wtor*fact(1)*etors+wscloc*escloc
132 & +wstrain*ehpb+wcorr*fact(3)*ecorr+wcorr5*fact(4)*ecorr5
133 & +wcorr6*fact(5)*ecorr6+wturn4*fact(3)*eello_turn4
134 & +wturn3*fact(2)*eello_turn3+wturn6*fact(5)*eturn6
135 & +wel_loc*fact(2)*eel_loc+edihcnstr+wtor_d*fact(2)*etors_d
136 & +wbond*estr+wsccor*fact(1)*esccor+ehomology_constr
137 & +wdfa_dist*edfadis+wdfa_tor*edfator+wdfa_nei*edfanei
140 etot=wsc*evdw+wscp*evdw2+welec*fact(1)*(ees+evdw1)
141 & +wang*ebe+wtor*fact(1)*etors+wscloc*escloc
142 & +wstrain*ehpb+wcorr*fact(3)*ecorr+wcorr5*fact(4)*ecorr5
143 & +wcorr6*fact(5)*ecorr6+wturn4*fact(3)*eello_turn4
144 & +wturn3*fact(2)*eello_turn3+wturn6*fact(5)*eturn6
145 & +wel_loc*fact(2)*eel_loc+edihcnstr+wtor_d*fact(2)*etors_d
146 & +wbond*estr+wsccor*fact(1)*esccor+ehomology_constr
147 & +wdfa_dist*edfadis+wdfa_tor*edfator+wdfa_nei*edfanei
153 energia(2)=evdw2-evdw2_14
170 energia(8)=eello_turn3
171 energia(9)=eello_turn4
180 energia(20)=edihcnstr
181 energia(21)=ehomology_constr
186 cc if (dyn_ss) call dyn_set_nss
190 idumm=proc_proc(etot,i)
192 c call proc_proc(etot,i)
194 if(i.eq.1)energia(0)=1.0d+99
200 C Sum up the components of the Cartesian gradient.
205 gradc(j,i,icg)=wsc*gvdwc(j,i)+wscp*gvdwc_scp(j,i)+
206 & welec*fact(1)*gelc(j,i)+wvdwpp*gvdwpp(j,i)+
208 & wstrain*ghpbc(j,i)+
209 & wcorr*fact(3)*gradcorr(j,i)+
210 & wel_loc*fact(2)*gel_loc(j,i)+
211 & wturn3*fact(2)*gcorr3_turn(j,i)+
212 & wturn4*fact(3)*gcorr4_turn(j,i)+
213 & wcorr5*fact(4)*gradcorr5(j,i)+
214 & wcorr6*fact(5)*gradcorr6(j,i)+
215 & wturn6*fact(5)*gcorr6_turn(j,i)+
216 & wsccor*fact(2)*gsccorc(j,i)+
217 & wdfa_dist*gdfad(j,i)+
218 & wdfa_tor*gdfat(j,i)+
219 & wdfa_nei*gdfan(j,i)+
220 & wdfa_beta*gdfab(j,i)
221 gradx(j,i,icg)=wsc*gvdwx(j,i)+wscp*gradx_scp(j,i)+
223 & wstrain*ghpbx(j,i)+wcorr*gradxorr(j,i)
228 gradc(j,i,icg)=wsc*gvdwc(j,i)+wscp*gvdwc_scp(j,i)+
229 & welec*fact(1)*gelc(j,i)+wstrain*ghpbc(j,i)+
231 & wcorr*fact(3)*gradcorr(j,i)+
232 & wel_loc*fact(2)*gel_loc(j,i)+
233 & wturn3*fact(2)*gcorr3_turn(j,i)+
234 & wturn4*fact(3)*gcorr4_turn(j,i)+
235 & wcorr5*fact(4)*gradcorr5(j,i)+
236 & wcorr6*fact(5)*gradcorr6(j,i)+
237 & wturn6*fact(5)*gcorr6_turn(j,i)+
238 & wsccor*fact(2)*gsccorc(j,i)+
239 & wdfa_dist*gdfad(j,i)+
240 & wdfa_tor*gdfat(j,i)+
241 & wdfa_nei*gdfan(j,i)+
242 & wdfa_beta*gdfab(j,i)
243 gradx(j,i,icg)=wsc*gvdwx(j,i)+wscp*gradx_scp(j,i)+
245 & wstrain*ghpbx(j,i)+wcorr*gradxorr(j,i)
248 cd print '(i3,9(1pe12.4))',i,(gvdwc(k,i),k=1,3),(gelc(k,i),k=1,3),
249 cd & (gradc(k,i),k=1,3)
254 cd write (iout,*) i,g_corr5_loc(i)
255 gloc(i,icg)=gloc(i,icg)+wcorr*fact(3)*gcorr_loc(i)
256 & +wcorr5*fact(4)*g_corr5_loc(i)
257 & +wcorr6*fact(5)*g_corr6_loc(i)
258 & +wturn4*fact(3)*gel_loc_turn4(i)
259 & +wturn3*fact(2)*gel_loc_turn3(i)
260 & +wturn6*fact(5)*gel_loc_turn6(i)
261 & +wel_loc*fact(2)*gel_loc_loc(i)
262 & +wsccor*fact(1)*gsccor_loc(i)
265 cd call enerprint(energia(0),fact)
270 C------------------------------------------------------------------------
271 subroutine enerprint(energia,fact)
272 implicit real*8 (a-h,o-z)
274 include 'sizesclu.dat'
275 include 'COMMON.IOUNITS'
276 include 'COMMON.FFIELD'
277 include 'COMMON.SBRIDGE'
278 double precision energia(0:max_ene),fact(5)
282 evdw2=energia(2)+energia(17)
294 eello_turn3=energia(8)
295 eello_turn4=energia(9)
296 eello_turn6=energia(10)
303 edihcnstr=energia(20)
305 ehomology_constr=energia(21)
311 write (iout,10) evdw,wsc,evdw2,wscp,ees,welec*fact(1),evdw1,
313 & estr,wbond,ebe,wang,escloc,wscloc,etors,wtor*fact(1),
314 & etors_d,wtor_d*fact(2),ehpb,wstrain,
315 & ecorr,wcorr*fact(3),ecorr5,wcorr5*fact(4),ecorr6,wcorr6*fact(5),
316 & eel_loc,wel_loc*fact(2),eello_turn3,wturn3*fact(2),
317 & eello_turn4,wturn4*fact(3),eello_turn6,wturn6*fact(5),
318 & esccor,wsccor*fact(1),edihcnstr,ehomology_constr,ebr*nss,
319 & edfadis,wdfa_dist,edfator,wdfa_tor,edfanei,wdfa_nei,edfabet,
321 10 format (/'Virtual-chain energies:'//
322 & 'EVDW= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC-SC)'/
323 & 'EVDW2= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC-p)'/
324 & 'EES= ',1pE16.6,' WEIGHT=',1pD16.6,' (p-p elec)'/
325 & 'EVDWPP=',1pE16.6,' WEIGHT=',1pD16.6,' (p-p VDW)'/
326 & 'ESTR= ',1pE16.6,' WEIGHT=',1pD16.6,' (stretching)'/
327 & 'EBE= ',1pE16.6,' WEIGHT=',1pD16.6,' (bending)'/
328 & 'ESC= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC local)'/
329 & 'ETORS= ',1pE16.6,' WEIGHT=',1pD16.6,' (torsional)'/
330 & 'ETORSD=',1pE16.6,' WEIGHT=',1pD16.6,' (double torsional)'/
331 & 'EHBP= ',1pE16.6,' WEIGHT=',1pD16.6,
332 & ' (SS bridges & dist. cnstr.)'/
333 & 'ECORR4=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
334 & 'ECORR5=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
335 & 'ECORR6=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
336 & 'EELLO= ',1pE16.6,' WEIGHT=',1pD16.6,' (electrostatic-local)'/
337 & 'ETURN3=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 3rd order)'/
338 & 'ETURN4=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 4th order)'/
339 & 'ETURN6=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 6th order)'/
340 & 'ESCCOR=',1pE16.6,' WEIGHT=',1pD16.6,' (backbone-rotamer corr)'/
341 & 'EDIHC= ',1pE16.6,' (dihedral angle constraints)'/
342 & 'H_CONS=',1pE16.6,' (Homology model constraints energy)'/
343 & 'ESS= ',1pE16.6,' (disulfide-bridge intrinsic energy)'/
344 & 'EDFAD= ',1pE16.6,' WEIGHT=',1pD16.6,' (DFA distance energy)'/
345 & 'EDFAT= ',1pE16.6,' WEIGHT=',1pD16.6,' (DFA torsion energy)'/
346 & 'EDFAN= ',1pE16.6,' WEIGHT=',1pD16.6,' (DFA NCa energy)'/
347 & 'EDFAB= ',1pE16.6,' WEIGHT=',1pD16.6,' (DFA Beta energy)'/
348 & 'ETOT= ',1pE16.6,' (total)')
350 write (iout,10) evdw,wsc,evdw2,wscp,ees,welec*fact(1),estr,wbond,
351 & ebe,wang,escloc,wscloc,etors,wtor*fact(1),etors_d,wtor_d*fact2,
352 & ehpb,wstrain,ecorr,wcorr*fact(3),ecorr5,wcorr5*fact(4),
353 & ecorr6,wcorr6*fact(5),eel_loc,wel_loc*fact(2),
354 & eello_turn3,wturn3*fact(2),eello_turn4,wturn4*fact(3),
355 & eello_turn6,wturn6*fact(5),esccor*fact(1),wsccor,
356 & edihcnstr,ehomology_constr,ebr*nss,
357 & edfadis,wdfa_dist,edfator,wdfa_tor,edfanei,wdfa_nei,edfabet,
359 10 format (/'Virtual-chain energies:'//
360 & 'EVDW= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC-SC)'/
361 & 'EVDW2= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC-p)'/
362 & 'EES= ',1pE16.6,' WEIGHT=',1pD16.6,' (p-p)'/
363 & 'ESTR= ',1pE16.6,' WEIGHT=',1pD16.6,' (stretching)'/
364 & 'EBE= ',1pE16.6,' WEIGHT=',1pD16.6,' (bending)'/
365 & 'ESC= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC local)'/
366 & 'ETORS= ',1pE16.6,' WEIGHT=',1pD16.6,' (torsional)'/
367 & 'ETORSD=',1pE16.6,' WEIGHT=',1pD16.6,' (double torsional)'/
368 & 'EHBP= ',1pE16.6,' WEIGHT=',1pD16.6,
369 & ' (SS bridges & dist. cnstr.)'/
370 & 'ECORR4=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
371 & 'ECORR5=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
372 & 'ECORR6=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
373 & 'EELLO= ',1pE16.6,' WEIGHT=',1pD16.6,' (electrostatic-local)'/
374 & 'ETURN3=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 3rd order)'/
375 & 'ETURN4=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 4th order)'/
376 & 'ETURN6=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 6th order)'/
377 & 'ESCCOR=',1pE16.6,' WEIGHT=',1pD16.6,' (backbone-rotamer corr)'/
378 & 'EDIHC= ',1pE16.6,' (dihedral angle constraints)'/
379 & 'H_CONS=',1pE16.6,' (Homology model constraints energy)'/
380 & 'ESS= ',1pE16.6,' (disulfide-bridge intrinsic energy)'/
381 & 'EDFAD= ',1pE16.6,' WEIGHT=',1pD16.6,' (DFA distance energy)'/
382 & 'EDFAT= ',1pE16.6,' WEIGHT=',1pD16.6,' (DFA torsion energy)'/
383 & 'EDFAN= ',1pE16.6,' WEIGHT=',1pD16.6,' (DFA NCa energy)'/
384 & 'EDFAB= ',1pE16.6,' WEIGHT=',1pD16.6,' (DFA Beta energy)'/
385 & 'ETOT= ',1pE16.6,' (total)')
389 C-----------------------------------------------------------------------
392 C This subroutine calculates the interaction energy of nonbonded side chains
393 C assuming the LJ potential of interaction.
395 implicit real*8 (a-h,o-z)
397 include 'sizesclu.dat'
398 c include "DIMENSIONS.COMPAR"
399 parameter (accur=1.0d-10)
402 include 'COMMON.LOCAL'
403 include 'COMMON.CHAIN'
404 include 'COMMON.DERIV'
405 include 'COMMON.INTERACT'
406 include 'COMMON.TORSION'
407 include 'COMMON.SBRIDGE'
408 include 'COMMON.NAMES'
409 include 'COMMON.IOUNITS'
410 include 'COMMON.CONTACTS'
414 cd print *,'Entering ELJ nnt=',nnt,' nct=',nct,' expon=',expon
425 C Calculate SC interaction energy.
428 cd write (iout,*) 'i=',i,' iint=',iint,' istart=',istart(i,iint),
429 cd & 'iend=',iend(i,iint)
430 do j=istart(i,iint),iend(i,iint)
435 C Change 12/1/95 to calculate four-body interactions
436 rij=xj*xj+yj*yj+zj*zj
438 c write (iout,*)'i=',i,' j=',j,' itypi=',itypi,' itypj=',itypj
439 eps0ij=eps(itypi,itypj)
441 e1=fac*fac*aa(itypi,itypj)
442 e2=fac*bb(itypi,itypj)
444 ij=icant(itypi,itypj)
445 cd sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
446 cd epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
447 cd write (iout,'(2(a3,i3,2x),6(1pd12.4)/2(3(1pd12.4),5x)/)')
448 cd & restyp(itypi),i,restyp(itypj),j,aa(itypi,itypj),
449 cd & bb(itypi,itypj),1.0D0/dsqrt(rrij),evdwij,epsi,sigm,
450 cd & (c(k,i),k=1,3),(c(k,j),k=1,3)
454 C Calculate the components of the gradient in DC and X
456 fac=-rrij*(e1+evdwij)
461 gvdwx(k,i)=gvdwx(k,i)-gg(k)
462 gvdwx(k,j)=gvdwx(k,j)+gg(k)
466 gvdwc(l,k)=gvdwc(l,k)+gg(l)
471 C 12/1/95, revised on 5/20/97
473 C Calculate the contact function. The ith column of the array JCONT will
474 C contain the numbers of atoms that make contacts with the atom I (of numbers
475 C greater than I). The arrays FACONT and GACONT will contain the values of
476 C the contact function and its derivative.
478 C Uncomment next line, if the correlation interactions include EVDW explicitly.
479 c if (j.gt.i+1 .and. evdwij.le.0.0D0) then
480 C Uncomment next line, if the correlation interactions are contact function only
481 if (j.gt.i+1.and. eps0ij.gt.0.0D0) then
483 sigij=sigma(itypi,itypj)
484 r0ij=rs0(itypi,itypj)
486 C Check whether the SC's are not too far to make a contact.
489 call gcont(rij,rcut,1.0d0,0.2d0*rcut,fcont,fprimcont)
490 C Add a new contact, if the SC's are close enough, but not too close (r<sigma).
492 if (fcont.gt.0.0D0) then
493 C If the SC-SC distance if close to sigma, apply spline.
494 cAdam call gcont(-rij,-1.03d0*sigij,2.0d0*sigij,1.0d0,
495 cAdam & fcont1,fprimcont1)
496 cAdam fcont1=1.0d0-fcont1
497 cAdam if (fcont1.gt.0.0d0) then
498 cAdam fprimcont=fprimcont*fcont1+fcont*fprimcont1
499 cAdam fcont=fcont*fcont1
501 C Uncomment following 4 lines to have the geometric average of the epsilon0's
502 cga eps0ij=1.0d0/dsqrt(eps0ij)
504 cga gg(k)=gg(k)*eps0ij
506 cga eps0ij=-evdwij*eps0ij
507 C Uncomment for AL's type of SC correlation interactions.
509 num_conti=num_conti+1
511 facont(num_conti,i)=fcont*eps0ij
512 fprimcont=eps0ij*fprimcont/rij
514 cAdam gacont(1,num_conti,i)=-fprimcont*xj+fcont*gg(1)
515 cAdam gacont(2,num_conti,i)=-fprimcont*yj+fcont*gg(2)
516 cAdam gacont(3,num_conti,i)=-fprimcont*zj+fcont*gg(3)
517 C Uncomment following 3 lines for Skolnick's type of SC correlation.
518 gacont(1,num_conti,i)=-fprimcont*xj
519 gacont(2,num_conti,i)=-fprimcont*yj
520 gacont(3,num_conti,i)=-fprimcont*zj
521 cd write (iout,'(2i5,2f10.5)') i,j,rij,facont(num_conti,i)
522 cd write (iout,'(2i3,3f10.5)')
523 cd & i,j,(gacont(kk,num_conti,i),kk=1,3)
529 num_cont(i)=num_conti
534 gvdwc(j,i)=expon*gvdwc(j,i)
535 gvdwx(j,i)=expon*gvdwx(j,i)
539 C******************************************************************************
543 C To save time, the factor of EXPON has been extracted from ALL components
544 C of GVDWC and GRADX. Remember to multiply them by this factor before further
547 C******************************************************************************
550 C-----------------------------------------------------------------------------
551 subroutine eljk(evdw)
553 C This subroutine calculates the interaction energy of nonbonded side chains
554 C assuming the LJK potential of interaction.
556 implicit real*8 (a-h,o-z)
558 include 'sizesclu.dat'
559 c include "DIMENSIONS.COMPAR"
562 include 'COMMON.LOCAL'
563 include 'COMMON.CHAIN'
564 include 'COMMON.DERIV'
565 include 'COMMON.INTERACT'
566 include 'COMMON.IOUNITS'
567 include 'COMMON.NAMES'
572 c print *,'Entering ELJK nnt=',nnt,' nct=',nct,' expon=',expon
581 C Calculate SC interaction energy.
584 do j=istart(i,iint),iend(i,iint)
589 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
591 e_augm=augm(itypi,itypj)*fac_augm
594 r_shift_inv=1.0D0/(rij+r0(itypi,itypj)-sigma(itypi,itypj))
595 fac=r_shift_inv**expon
596 e1=fac*fac*aa(itypi,itypj)
597 e2=fac*bb(itypi,itypj)
599 ij=icant(itypi,itypj)
600 cd sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
601 cd epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
602 cd write (iout,'(2(a3,i3,2x),8(1pd12.4)/2(3(1pd12.4),5x)/)')
603 cd & restyp(itypi),i,restyp(itypj),j,aa(itypi,itypj),
604 cd & bb(itypi,itypj),augm(itypi,itypj),epsi,sigm,
605 cd & sigma(itypi,itypj),1.0D0/dsqrt(rrij),evdwij,
606 cd & (c(k,i),k=1,3),(c(k,j),k=1,3)
610 C Calculate the components of the gradient in DC and X
612 fac=-2.0D0*rrij*e_augm-r_inv_ij*r_shift_inv*(e1+e1+e2)
617 gvdwx(k,i)=gvdwx(k,i)-gg(k)
618 gvdwx(k,j)=gvdwx(k,j)+gg(k)
622 gvdwc(l,k)=gvdwc(l,k)+gg(l)
632 gvdwc(j,i)=expon*gvdwc(j,i)
633 gvdwx(j,i)=expon*gvdwx(j,i)
639 C-----------------------------------------------------------------------------
642 C This subroutine calculates the interaction energy of nonbonded side chains
643 C assuming the Berne-Pechukas potential of interaction.
645 implicit real*8 (a-h,o-z)
647 include 'sizesclu.dat'
648 c include "DIMENSIONS.COMPAR"
651 include 'COMMON.LOCAL'
652 include 'COMMON.CHAIN'
653 include 'COMMON.DERIV'
654 include 'COMMON.NAMES'
655 include 'COMMON.INTERACT'
656 include 'COMMON.IOUNITS'
657 include 'COMMON.CALC'
659 c double precision rrsave(maxdim)
664 c print *,'Entering EBP nnt=',nnt,' nct=',nct,' expon=',expon
666 c if (icall.eq.0) then
678 dxi=dc_norm(1,nres+i)
679 dyi=dc_norm(2,nres+i)
680 dzi=dc_norm(3,nres+i)
681 dsci_inv=vbld_inv(i+nres)
683 C Calculate SC interaction energy.
686 do j=istart(i,iint),iend(i,iint)
689 dscj_inv=vbld_inv(j+nres)
690 chi1=chi(itypi,itypj)
691 chi2=chi(itypj,itypi)
698 alf12=0.5D0*(alf1+alf2)
699 C For diagnostics only!!!
712 dxj=dc_norm(1,nres+j)
713 dyj=dc_norm(2,nres+j)
714 dzj=dc_norm(3,nres+j)
715 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
716 cd if (icall.eq.0) then
722 C Calculate the angle-dependent terms of energy & contributions to derivatives.
724 C Calculate whole angle-dependent part of epsilon and contributions
726 fac=(rrij*sigsq)**expon2
727 e1=fac*fac*aa(itypi,itypj)
728 e2=fac*bb(itypi,itypj)
729 evdwij=eps1*eps2rt*eps3rt*(e1+e2)
730 eps2der=evdwij*eps3rt
731 eps3der=evdwij*eps2rt
732 evdwij=evdwij*eps2rt*eps3rt
733 ij=icant(itypi,itypj)
734 aux=eps1*eps2rt**2*eps3rt**2
738 sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
739 epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
740 cd write (iout,'(2(a3,i3,2x),15(0pf7.3))')
741 cd & restyp(itypi),i,restyp(itypj),j,
742 cd & epsi,sigm,chi1,chi2,chip1,chip2,
743 cd & eps1,eps2rt**2,eps3rt**2,1.0D0/dsqrt(sigsq),
744 cd & om1,om2,om12,1.0D0/dsqrt(rrij),
747 C Calculate gradient components.
748 e1=e1*eps1*eps2rt**2*eps3rt**2
749 fac=-expon*(e1+evdwij)
752 C Calculate radial part of the gradient
756 C Calculate the angular part of the gradient and sum add the contributions
757 C to the appropriate components of the Cartesian gradient.
766 C-----------------------------------------------------------------------------
769 C This subroutine calculates the interaction energy of nonbonded side chains
770 C assuming the Gay-Berne potential of interaction.
772 implicit real*8 (a-h,o-z)
774 include 'sizesclu.dat'
775 c include "DIMENSIONS.COMPAR"
778 include 'COMMON.LOCAL'
779 include 'COMMON.CHAIN'
780 include 'COMMON.DERIV'
781 include 'COMMON.NAMES'
782 include 'COMMON.INTERACT'
783 include 'COMMON.IOUNITS'
784 include 'COMMON.CALC'
785 include 'COMMON.SBRIDGE'
791 c print *,'Entering EGB nnt=',nnt,' nct=',nct,' expon=',expon
794 c if (icall.gt.0) lprn=.true.
802 dxi=dc_norm(1,nres+i)
803 dyi=dc_norm(2,nres+i)
804 dzi=dc_norm(3,nres+i)
805 dsci_inv=vbld_inv(i+nres)
807 C Calculate SC interaction energy.
810 do j=istart(i,iint),iend(i,iint)
811 IF (dyn_ss_mask(i).and.dyn_ss_mask(j)) THEN
812 call dyn_ssbond_ene(i,j,evdwij)
814 c if (energy_dec) write (iout,'(a6,2i5,0pf7.3,a3)')
815 c & 'evdw',i,j,evdwij,' ss'
819 dscj_inv=vbld_inv(j+nres)
820 sig0ij=sigma(itypi,itypj)
821 chi1=chi(itypi,itypj)
822 chi2=chi(itypj,itypi)
829 alf12=0.5D0*(alf1+alf2)
830 C For diagnostics only!!!
843 dxj=dc_norm(1,nres+j)
844 dyj=dc_norm(2,nres+j)
845 dzj=dc_norm(3,nres+j)
846 c write (iout,*) i,j,xj,yj,zj
847 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
849 C Calculate angle-dependent terms of energy and contributions to their
853 sig=sig0ij*dsqrt(sigsq)
854 rij_shift=1.0D0/rij-sig+sig0ij
855 C I hate to put IF's in the loops, but here don't have another choice!!!!
856 if (rij_shift.le.0.0D0) then
861 c---------------------------------------------------------------
862 rij_shift=1.0D0/rij_shift
864 e1=fac*fac*aa(itypi,itypj)
865 e2=fac*bb(itypi,itypj)
866 evdwij=eps1*eps2rt*eps3rt*(e1+e2)
867 eps2der=evdwij*eps3rt
868 eps3der=evdwij*eps2rt
869 evdwij=evdwij*eps2rt*eps3rt
871 ij=icant(itypi,itypj)
872 aux=eps1*eps2rt**2*eps3rt**2
873 c write (iout,*) "i",i," j",j," itypi",itypi," itypj",itypj,
874 c & " ij",ij," eneps",aux*e1/dabs(eps(itypi,itypj)),
875 c & aux*e2/eps(itypi,itypj)
877 sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
878 epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
879 write (iout,'(2(a3,i3,2x),17(0pf7.3))')
880 & restyp(itypi),i,restyp(itypj),j,
881 & epsi,sigm,chi1,chi2,chip1,chip2,
882 & eps1,eps2rt**2,eps3rt**2,sig,sig0ij,
883 & om1,om2,om12,1.0D0/rij,1.0D0/rij_shift,
887 C Calculate gradient components.
888 e1=e1*eps1*eps2rt**2*eps3rt**2
889 fac=-expon*(e1+evdwij)*rij_shift
892 C Calculate the radial part of the gradient
896 C Calculate angular part of the gradient.
905 C-----------------------------------------------------------------------------
906 subroutine egbv(evdw)
908 C This subroutine calculates the interaction energy of nonbonded side chains
909 C assuming the Gay-Berne-Vorobjev potential of interaction.
911 implicit real*8 (a-h,o-z)
913 include 'sizesclu.dat'
914 c include "DIMENSIONS.COMPAR"
917 include 'COMMON.LOCAL'
918 include 'COMMON.CHAIN'
919 include 'COMMON.DERIV'
920 include 'COMMON.NAMES'
921 include 'COMMON.INTERACT'
922 include 'COMMON.IOUNITS'
923 include 'COMMON.CALC'
924 include 'COMMON.SBRIDGE'
930 c print *,'Entering EGB nnt=',nnt,' nct=',nct,' expon=',expon
933 c if (icall.gt.0) lprn=.true.
941 dxi=dc_norm(1,nres+i)
942 dyi=dc_norm(2,nres+i)
943 dzi=dc_norm(3,nres+i)
944 dsci_inv=vbld_inv(i+nres)
946 C Calculate SC interaction energy.
949 do j=istart(i,iint),iend(i,iint)
950 C in case of diagnostics write (iout,*) "TU SZUKAJ",i,j,dyn_ss_mask(i),dyn_ss_mask(j)
951 IF (dyn_ss_mask(i).and.dyn_ss_mask(j)) THEN
952 call dyn_ssbond_ene(i,j,evdwij)
954 c if (energy_dec) write (iout,'(a6,2i5,0pf7.3,a3)')
955 c & 'evdw',i,j,evdwij,' ss'
959 dscj_inv=vbld_inv(j+nres)
960 sig0ij=sigma(itypi,itypj)
962 chi1=chi(itypi,itypj)
963 chi2=chi(itypj,itypi)
970 alf12=0.5D0*(alf1+alf2)
971 C For diagnostics only!!!
984 dxj=dc_norm(1,nres+j)
985 dyj=dc_norm(2,nres+j)
986 dzj=dc_norm(3,nres+j)
987 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
989 C Calculate angle-dependent terms of energy and contributions to their
993 sig=sig0ij*dsqrt(sigsq)
994 rij_shift=1.0D0/rij-sig+r0ij
995 C I hate to put IF's in the loops, but here don't have another choice!!!!
996 if (rij_shift.le.0.0D0) then
1001 c---------------------------------------------------------------
1002 rij_shift=1.0D0/rij_shift
1003 fac=rij_shift**expon
1004 e1=fac*fac*aa(itypi,itypj)
1005 e2=fac*bb(itypi,itypj)
1006 evdwij=eps1*eps2rt*eps3rt*(e1+e2)
1007 eps2der=evdwij*eps3rt
1008 eps3der=evdwij*eps2rt
1009 fac_augm=rrij**expon
1010 e_augm=augm(itypi,itypj)*fac_augm
1011 evdwij=evdwij*eps2rt*eps3rt
1012 evdw=evdw+evdwij+e_augm
1013 ij=icant(itypi,itypj)
1014 aux=eps1*eps2rt**2*eps3rt**2
1016 c sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
1017 c epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
1018 c write (iout,'(2(a3,i3,2x),17(0pf7.3))')
1019 c & restyp(itypi),i,restyp(itypj),j,
1020 c & epsi,sigm,sig,(augm(itypi,itypj)/epsi)**(1.0D0/12.0D0),
1021 c & chi1,chi2,chip1,chip2,
1022 c & eps1,eps2rt**2,eps3rt**2,
1023 c & om1,om2,om12,1.0D0/rij,1.0D0/rij_shift,
1027 C Calculate gradient components.
1028 e1=e1*eps1*eps2rt**2*eps3rt**2
1029 fac=-expon*(e1+evdwij)*rij_shift
1031 fac=rij*fac-2*expon*rrij*e_augm
1032 C Calculate the radial part of the gradient
1036 C Calculate angular part of the gradient.
1045 C-----------------------------------------------------------------------------
1046 subroutine sc_angular
1047 C Calculate eps1,eps2,eps3,sigma, and parts of their derivatives in om1,om2,
1048 C om12. Called by ebp, egb, and egbv.
1050 include 'COMMON.CALC'
1054 om1=dxi*erij(1)+dyi*erij(2)+dzi*erij(3)
1055 om2=dxj*erij(1)+dyj*erij(2)+dzj*erij(3)
1056 om12=dxi*dxj+dyi*dyj+dzi*dzj
1058 C Calculate eps1(om12) and its derivative in om12
1059 faceps1=1.0D0-om12*chiom12
1060 faceps1_inv=1.0D0/faceps1
1061 eps1=dsqrt(faceps1_inv)
1062 C Following variable is eps1*deps1/dom12
1063 eps1_om12=faceps1_inv*chiom12
1064 C Calculate sigma(om1,om2,om12) and the derivatives of sigma**2 in om1,om2,
1069 facsig=om1*chiom1+om2*chiom2-2.0D0*om1om2*chiom12
1070 sigsq=1.0D0-facsig*faceps1_inv
1071 sigsq_om1=(chiom1-chiom12*om2)*faceps1_inv
1072 sigsq_om2=(chiom2-chiom12*om1)*faceps1_inv
1073 sigsq_om12=-chi12*(om1om2*faceps1-om12*facsig)*faceps1_inv**2
1074 C Calculate eps2 and its derivatives in om1, om2, and om12.
1077 chipom12=chip12*om12
1078 facp=1.0D0-om12*chipom12
1080 facp1=om1*chipom1+om2*chipom2-2.0D0*om1om2*chipom12
1081 C Following variable is the square root of eps2
1082 eps2rt=1.0D0-facp1*facp_inv
1083 C Following three variables are the derivatives of the square root of eps
1084 C in om1, om2, and om12.
1085 eps2rt_om1=-4.0D0*(chipom1-chipom12*om2)*facp_inv
1086 eps2rt_om2=-4.0D0*(chipom2-chipom12*om1)*facp_inv
1087 eps2rt_om12=4.0D0*chip12*(om1om2*facp-om12*facp1)*facp_inv**2
1088 C Evaluate the "asymmetric" factor in the VDW constant, eps3
1089 eps3rt=1.0D0-alf1*om1+alf2*om2-alf12*om12
1090 C Calculate whole angle-dependent part of epsilon and contributions
1091 C to its derivatives
1094 C----------------------------------------------------------------------------
1096 implicit real*8 (a-h,o-z)
1097 include 'DIMENSIONS'
1098 include 'sizesclu.dat'
1099 include 'COMMON.CHAIN'
1100 include 'COMMON.DERIV'
1101 include 'COMMON.CALC'
1102 double precision dcosom1(3),dcosom2(3)
1103 eom1=eps2der*eps2rt_om1-2.0D0*alf1*eps3der+sigder*sigsq_om1
1104 eom2=eps2der*eps2rt_om2+2.0D0*alf2*eps3der+sigder*sigsq_om2
1105 eom12=evdwij*eps1_om12+eps2der*eps2rt_om12
1106 & -2.0D0*alf12*eps3der+sigder*sigsq_om12
1108 dcosom1(k)=rij*(dc_norm(k,nres+i)-om1*erij(k))
1109 dcosom2(k)=rij*(dc_norm(k,nres+j)-om2*erij(k))
1112 gg(k)=gg(k)+eom1*dcosom1(k)+eom2*dcosom2(k)
1115 gvdwx(k,i)=gvdwx(k,i)-gg(k)
1116 & +(eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,nres+i))
1117 & +eom1*(erij(k)-om1*dc_norm(k,nres+i)))*dsci_inv
1118 gvdwx(k,j)=gvdwx(k,j)+gg(k)
1119 & +(eom12*(dc_norm(k,nres+i)-om12*dc_norm(k,nres+j))
1120 & +eom2*(erij(k)-om2*dc_norm(k,nres+j)))*dscj_inv
1123 C Calculate the components of the gradient in DC and X
1127 gvdwc(l,k)=gvdwc(l,k)+gg(l)
1132 c------------------------------------------------------------------------------
1133 subroutine vec_and_deriv
1134 implicit real*8 (a-h,o-z)
1135 include 'DIMENSIONS'
1136 include 'sizesclu.dat'
1137 include 'COMMON.IOUNITS'
1138 include 'COMMON.GEO'
1139 include 'COMMON.VAR'
1140 include 'COMMON.LOCAL'
1141 include 'COMMON.CHAIN'
1142 include 'COMMON.VECTORS'
1143 include 'COMMON.DERIV'
1144 include 'COMMON.INTERACT'
1145 dimension uyder(3,3,2),uzder(3,3,2),vbld_inv_temp(2)
1146 C Compute the local reference systems. For reference system (i), the
1147 C X-axis points from CA(i) to CA(i+1), the Y axis is in the
1148 C CA(i)-CA(i+1)-CA(i+2) plane, and the Z axis is perpendicular to this plane.
1150 c if (i.eq.nres-1 .or. itel(i+1).eq.0) then
1151 if (i.eq.nres-1) then
1152 C Case of the last full residue
1153 C Compute the Z-axis
1154 call vecpr(dc_norm(1,i),dc_norm(1,i-1),uz(1,i))
1155 costh=dcos(pi-theta(nres))
1156 fac=1.0d0/dsqrt(1.0d0-costh*costh)
1161 C Compute the derivatives of uz
1163 uzder(2,1,1)=-dc_norm(3,i-1)
1164 uzder(3,1,1)= dc_norm(2,i-1)
1165 uzder(1,2,1)= dc_norm(3,i-1)
1167 uzder(3,2,1)=-dc_norm(1,i-1)
1168 uzder(1,3,1)=-dc_norm(2,i-1)
1169 uzder(2,3,1)= dc_norm(1,i-1)
1172 uzder(2,1,2)= dc_norm(3,i)
1173 uzder(3,1,2)=-dc_norm(2,i)
1174 uzder(1,2,2)=-dc_norm(3,i)
1176 uzder(3,2,2)= dc_norm(1,i)
1177 uzder(1,3,2)= dc_norm(2,i)
1178 uzder(2,3,2)=-dc_norm(1,i)
1181 C Compute the Y-axis
1184 uy(k,i)=fac*(dc_norm(k,i-1)-costh*dc_norm(k,i))
1187 C Compute the derivatives of uy
1190 uyder(k,j,1)=2*dc_norm(k,i-1)*dc_norm(j,i)
1191 & -dc_norm(k,i)*dc_norm(j,i-1)
1192 uyder(k,j,2)=-dc_norm(j,i)*dc_norm(k,i)
1194 uyder(j,j,1)=uyder(j,j,1)-costh
1195 uyder(j,j,2)=1.0d0+uyder(j,j,2)
1200 uygrad(l,k,j,i)=uyder(l,k,j)
1201 uzgrad(l,k,j,i)=uzder(l,k,j)
1205 call unormderiv(uy(1,i),uyder(1,1,1),facy,uygrad(1,1,1,i))
1206 call unormderiv(uy(1,i),uyder(1,1,2),facy,uygrad(1,1,2,i))
1207 call unormderiv(uz(1,i),uzder(1,1,1),fac,uzgrad(1,1,1,i))
1208 call unormderiv(uz(1,i),uzder(1,1,2),fac,uzgrad(1,1,2,i))
1212 C Compute the Z-axis
1213 call vecpr(dc_norm(1,i),dc_norm(1,i+1),uz(1,i))
1214 costh=dcos(pi-theta(i+2))
1215 fac=1.0d0/dsqrt(1.0d0-costh*costh)
1220 C Compute the derivatives of uz
1222 uzder(2,1,1)=-dc_norm(3,i+1)
1223 uzder(3,1,1)= dc_norm(2,i+1)
1224 uzder(1,2,1)= dc_norm(3,i+1)
1226 uzder(3,2,1)=-dc_norm(1,i+1)
1227 uzder(1,3,1)=-dc_norm(2,i+1)
1228 uzder(2,3,1)= dc_norm(1,i+1)
1231 uzder(2,1,2)= dc_norm(3,i)
1232 uzder(3,1,2)=-dc_norm(2,i)
1233 uzder(1,2,2)=-dc_norm(3,i)
1235 uzder(3,2,2)= dc_norm(1,i)
1236 uzder(1,3,2)= dc_norm(2,i)
1237 uzder(2,3,2)=-dc_norm(1,i)
1240 C Compute the Y-axis
1243 uy(k,i)=facy*(dc_norm(k,i+1)-costh*dc_norm(k,i))
1246 C Compute the derivatives of uy
1249 uyder(k,j,1)=2*dc_norm(k,i+1)*dc_norm(j,i)
1250 & -dc_norm(k,i)*dc_norm(j,i+1)
1251 uyder(k,j,2)=-dc_norm(j,i)*dc_norm(k,i)
1253 uyder(j,j,1)=uyder(j,j,1)-costh
1254 uyder(j,j,2)=1.0d0+uyder(j,j,2)
1259 uygrad(l,k,j,i)=uyder(l,k,j)
1260 uzgrad(l,k,j,i)=uzder(l,k,j)
1264 call unormderiv(uy(1,i),uyder(1,1,1),facy,uygrad(1,1,1,i))
1265 call unormderiv(uy(1,i),uyder(1,1,2),facy,uygrad(1,1,2,i))
1266 call unormderiv(uz(1,i),uzder(1,1,1),fac,uzgrad(1,1,1,i))
1267 call unormderiv(uz(1,i),uzder(1,1,2),fac,uzgrad(1,1,2,i))
1273 vbld_inv_temp(1)=vbld_inv(i+1)
1274 if (i.lt.nres-1) then
1275 vbld_inv_temp(2)=vbld_inv(i+2)
1277 vbld_inv_temp(2)=vbld_inv(i)
1282 uygrad(l,k,j,i)=vbld_inv_temp(j)*uygrad(l,k,j,i)
1283 uzgrad(l,k,j,i)=vbld_inv_temp(j)*uzgrad(l,k,j,i)
1291 C-----------------------------------------------------------------------------
1292 subroutine vec_and_deriv_test
1293 implicit real*8 (a-h,o-z)
1294 include 'DIMENSIONS'
1295 include 'sizesclu.dat'
1296 include 'COMMON.IOUNITS'
1297 include 'COMMON.GEO'
1298 include 'COMMON.VAR'
1299 include 'COMMON.LOCAL'
1300 include 'COMMON.CHAIN'
1301 include 'COMMON.VECTORS'
1302 dimension uyder(3,3,2),uzder(3,3,2)
1303 C Compute the local reference systems. For reference system (i), the
1304 C X-axis points from CA(i) to CA(i+1), the Y axis is in the
1305 C CA(i)-CA(i+1)-CA(i+2) plane, and the Z axis is perpendicular to this plane.
1307 if (i.eq.nres-1) then
1308 C Case of the last full residue
1309 C Compute the Z-axis
1310 call vecpr(dc_norm(1,i),dc_norm(1,i-1),uz(1,i))
1311 costh=dcos(pi-theta(nres))
1312 fac=1.0d0/dsqrt(1.0d0-costh*costh)
1313 c write (iout,*) 'fac',fac,
1314 c & 1.0d0/dsqrt(scalar(uz(1,i),uz(1,i)))
1315 fac=1.0d0/dsqrt(scalar(uz(1,i),uz(1,i)))
1319 C Compute the derivatives of uz
1321 uzder(2,1,1)=-dc_norm(3,i-1)
1322 uzder(3,1,1)= dc_norm(2,i-1)
1323 uzder(1,2,1)= dc_norm(3,i-1)
1325 uzder(3,2,1)=-dc_norm(1,i-1)
1326 uzder(1,3,1)=-dc_norm(2,i-1)
1327 uzder(2,3,1)= dc_norm(1,i-1)
1330 uzder(2,1,2)= dc_norm(3,i)
1331 uzder(3,1,2)=-dc_norm(2,i)
1332 uzder(1,2,2)=-dc_norm(3,i)
1334 uzder(3,2,2)= dc_norm(1,i)
1335 uzder(1,3,2)= dc_norm(2,i)
1336 uzder(2,3,2)=-dc_norm(1,i)
1338 C Compute the Y-axis
1340 uy(k,i)=fac*(dc_norm(k,i-1)-costh*dc_norm(k,i))
1343 facy=1.0d0/dsqrt(scalar(dc_norm(1,i),dc_norm(1,i))*
1344 & (scalar(dc_norm(1,i-1),dc_norm(1,i-1))**2-
1345 & scalar(dc_norm(1,i),dc_norm(1,i-1))**2))
1347 c uy(k,i)=facy*(dc_norm(k,i+1)-costh*dc_norm(k,i))
1350 & dc_norm(k,i-1)*scalar(dc_norm(1,i),dc_norm(1,i))
1351 & -scalar(dc_norm(1,i),dc_norm(1,i-1))*dc_norm(k,i)
1354 c write (iout,*) 'facy',facy,
1355 c & 1.0d0/dsqrt(scalar(uy(1,i),uy(1,i)))
1356 facy=1.0d0/dsqrt(scalar(uy(1,i),uy(1,i)))
1358 uy(k,i)=facy*uy(k,i)
1360 C Compute the derivatives of uy
1363 uyder(k,j,1)=2*dc_norm(k,i-1)*dc_norm(j,i)
1364 & -dc_norm(k,i)*dc_norm(j,i-1)
1365 uyder(k,j,2)=-dc_norm(j,i)*dc_norm(k,i)
1367 c uyder(j,j,1)=uyder(j,j,1)-costh
1368 c uyder(j,j,2)=1.0d0+uyder(j,j,2)
1369 uyder(j,j,1)=uyder(j,j,1)
1370 & -scalar(dc_norm(1,i),dc_norm(1,i-1))
1371 uyder(j,j,2)=scalar(dc_norm(1,i),dc_norm(1,i))
1377 uygrad(l,k,j,i)=uyder(l,k,j)
1378 uzgrad(l,k,j,i)=uzder(l,k,j)
1382 call unormderiv(uy(1,i),uyder(1,1,1),facy,uygrad(1,1,1,i))
1383 call unormderiv(uy(1,i),uyder(1,1,2),facy,uygrad(1,1,2,i))
1384 call unormderiv(uz(1,i),uzder(1,1,1),fac,uzgrad(1,1,1,i))
1385 call unormderiv(uz(1,i),uzder(1,1,2),fac,uzgrad(1,1,2,i))
1388 C Compute the Z-axis
1389 call vecpr(dc_norm(1,i),dc_norm(1,i+1),uz(1,i))
1390 costh=dcos(pi-theta(i+2))
1391 fac=1.0d0/dsqrt(1.0d0-costh*costh)
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 facy=1.0d0/dsqrt(scalar(dc_norm(1,i),dc_norm(1,i))*
1418 & (scalar(dc_norm(1,i+1),dc_norm(1,i+1))**2-
1419 & scalar(dc_norm(1,i),dc_norm(1,i+1))**2))
1421 c uy(k,i)=facy*(dc_norm(k,i+1)-costh*dc_norm(k,i))
1424 & dc_norm(k,i+1)*scalar(dc_norm(1,i),dc_norm(1,i))
1425 & -scalar(dc_norm(1,i),dc_norm(1,i+1))*dc_norm(k,i)
1428 c write (iout,*) 'facy',facy,
1429 c & 1.0d0/dsqrt(scalar(uy(1,i),uy(1,i)))
1430 facy=1.0d0/dsqrt(scalar(uy(1,i),uy(1,i)))
1432 uy(k,i)=facy*uy(k,i)
1434 C Compute the derivatives of uy
1437 uyder(k,j,1)=2*dc_norm(k,i+1)*dc_norm(j,i)
1438 & -dc_norm(k,i)*dc_norm(j,i+1)
1439 uyder(k,j,2)=-dc_norm(j,i)*dc_norm(k,i)
1441 c uyder(j,j,1)=uyder(j,j,1)-costh
1442 c uyder(j,j,2)=1.0d0+uyder(j,j,2)
1443 uyder(j,j,1)=uyder(j,j,1)
1444 & -scalar(dc_norm(1,i),dc_norm(1,i+1))
1445 uyder(j,j,2)=scalar(dc_norm(1,i),dc_norm(1,i))
1451 uygrad(l,k,j,i)=uyder(l,k,j)
1452 uzgrad(l,k,j,i)=uzder(l,k,j)
1456 call unormderiv(uy(1,i),uyder(1,1,1),facy,uygrad(1,1,1,i))
1457 call unormderiv(uy(1,i),uyder(1,1,2),facy,uygrad(1,1,2,i))
1458 call unormderiv(uz(1,i),uzder(1,1,1),fac,uzgrad(1,1,1,i))
1459 call unormderiv(uz(1,i),uzder(1,1,2),fac,uzgrad(1,1,2,i))
1466 uygrad(l,k,j,i)=vblinv*uygrad(l,k,j,i)
1467 uzgrad(l,k,j,i)=vblinv*uzgrad(l,k,j,i)
1474 C-----------------------------------------------------------------------------
1475 subroutine check_vecgrad
1476 implicit real*8 (a-h,o-z)
1477 include 'DIMENSIONS'
1478 include 'sizesclu.dat'
1479 include 'COMMON.IOUNITS'
1480 include 'COMMON.GEO'
1481 include 'COMMON.VAR'
1482 include 'COMMON.LOCAL'
1483 include 'COMMON.CHAIN'
1484 include 'COMMON.VECTORS'
1485 dimension uygradt(3,3,2,maxres),uzgradt(3,3,2,maxres)
1486 dimension uyt(3,maxres),uzt(3,maxres)
1487 dimension uygradn(3,3,2),uzgradn(3,3,2),erij(3)
1488 double precision delta /1.0d-7/
1491 crc write(iout,'(2i5,2(3f10.5,5x))') i,1,dc_norm(:,i)
1492 crc write(iout,'(2i5,2(3f10.5,5x))') i,2,uy(:,i)
1493 crc write(iout,'(2i5,2(3f10.5,5x)/)')i,3,uz(:,i)
1494 cd write(iout,'(2i5,2(3f10.5,5x))') i,1,
1495 cd & (dc_norm(if90,i),if90=1,3)
1496 cd write(iout,'(2i5,2(3f10.5,5x))') i,2,(uy(if90,i),if90=1,3)
1497 cd write(iout,'(2i5,2(3f10.5,5x)/)')i,3,(uz(if90,i),if90=1,3)
1498 cd write(iout,'(a)')
1504 uygradt(l,k,j,i)=uygrad(l,k,j,i)
1505 uzgradt(l,k,j,i)=uzgrad(l,k,j,i)
1518 cd write (iout,*) 'i=',i
1520 erij(k)=dc_norm(k,i)
1524 dc_norm(k,i)=erij(k)
1526 dc_norm(j,i)=dc_norm(j,i)+delta
1527 c fac=dsqrt(scalar(dc_norm(1,i),dc_norm(1,i)))
1529 c dc_norm(k,i)=dc_norm(k,i)/fac
1531 c write (iout,*) (dc_norm(k,i),k=1,3)
1532 c write (iout,*) (erij(k),k=1,3)
1535 uygradn(k,j,1)=(uy(k,i)-uyt(k,i))/delta
1536 uygradn(k,j,2)=(uy(k,i-1)-uyt(k,i-1))/delta
1537 uzgradn(k,j,1)=(uz(k,i)-uzt(k,i))/delta
1538 uzgradn(k,j,2)=(uz(k,i-1)-uzt(k,i-1))/delta
1540 c write (iout,'(i5,3f8.5,3x,3f8.5,5x,3f8.5,3x,3f8.5)')
1541 c & j,(uzgradt(k,j,1,i),k=1,3),(uzgradn(k,j,1),k=1,3),
1542 c & (uzgradt(k,j,2,i-1),k=1,3),(uzgradn(k,j,2),k=1,3)
1545 dc_norm(k,i)=erij(k)
1548 cd write (iout,'(i5,3f8.5,3x,3f8.5,5x,3f8.5,3x,3f8.5)')
1549 cd & k,(uygradt(k,l,1,i),l=1,3),(uygradn(k,l,1),l=1,3),
1550 cd & (uygradt(k,l,2,i-1),l=1,3),(uygradn(k,l,2),l=1,3)
1551 cd write (iout,'(i5,3f8.5,3x,3f8.5,5x,3f8.5,3x,3f8.5)')
1552 cd & k,(uzgradt(k,l,1,i),l=1,3),(uzgradn(k,l,1),l=1,3),
1553 cd & (uzgradt(k,l,2,i-1),l=1,3),(uzgradn(k,l,2),l=1,3)
1554 cd write (iout,'(a)')
1559 C--------------------------------------------------------------------------
1560 subroutine set_matrices
1561 implicit real*8 (a-h,o-z)
1562 include 'DIMENSIONS'
1563 include 'sizesclu.dat'
1564 include 'COMMON.IOUNITS'
1565 include 'COMMON.GEO'
1566 include 'COMMON.VAR'
1567 include 'COMMON.LOCAL'
1568 include 'COMMON.CHAIN'
1569 include 'COMMON.DERIV'
1570 include 'COMMON.INTERACT'
1571 include 'COMMON.CONTACTS'
1572 include 'COMMON.TORSION'
1573 include 'COMMON.VECTORS'
1574 include 'COMMON.FFIELD'
1575 double precision auxvec(2),auxmat(2,2)
1577 C Compute the virtual-bond-torsional-angle dependent quantities needed
1578 C to calculate the el-loc multibody terms of various order.
1581 if (i .lt. nres+1) then
1618 if (i .gt. 3 .and. i .lt. nres+1) then
1619 obrot_der(1,i-2)=-sin1
1620 obrot_der(2,i-2)= cos1
1621 Ugder(1,1,i-2)= sin1
1622 Ugder(1,2,i-2)=-cos1
1623 Ugder(2,1,i-2)=-cos1
1624 Ugder(2,2,i-2)=-sin1
1627 obrot2_der(1,i-2)=-dwasin2
1628 obrot2_der(2,i-2)= dwacos2
1629 Ug2der(1,1,i-2)= dwasin2
1630 Ug2der(1,2,i-2)=-dwacos2
1631 Ug2der(2,1,i-2)=-dwacos2
1632 Ug2der(2,2,i-2)=-dwasin2
1634 obrot_der(1,i-2)=0.0d0
1635 obrot_der(2,i-2)=0.0d0
1636 Ugder(1,1,i-2)=0.0d0
1637 Ugder(1,2,i-2)=0.0d0
1638 Ugder(2,1,i-2)=0.0d0
1639 Ugder(2,2,i-2)=0.0d0
1640 obrot2_der(1,i-2)=0.0d0
1641 obrot2_der(2,i-2)=0.0d0
1642 Ug2der(1,1,i-2)=0.0d0
1643 Ug2der(1,2,i-2)=0.0d0
1644 Ug2der(2,1,i-2)=0.0d0
1645 Ug2der(2,2,i-2)=0.0d0
1647 if (i.gt. iatel_s+2 .and. i.lt.iatel_e+5) then
1648 iti = itortyp(itype(i-2))
1652 if (i.gt. iatel_s+1 .and. i.lt.iatel_e+4) then
1653 iti1 = itortyp(itype(i-1))
1657 cd write (iout,*) '*******i',i,' iti1',iti
1658 cd write (iout,*) 'b1',b1(:,iti)
1659 cd write (iout,*) 'b2',b2(:,iti)
1660 cd write (iout,*) 'Ug',Ug(:,:,i-2)
1661 if (i .gt. iatel_s+2) then
1662 call matvec2(Ug(1,1,i-2),b2(1,iti),Ub2(1,i-2))
1663 call matmat2(EE(1,1,iti),Ug(1,1,i-2),EUg(1,1,i-2))
1664 call matmat2(CC(1,1,iti),Ug(1,1,i-2),CUg(1,1,i-2))
1665 call matmat2(DD(1,1,iti),Ug(1,1,i-2),DUg(1,1,i-2))
1666 call matmat2(Dtilde(1,1,iti),Ug2(1,1,i-2),DtUg2(1,1,i-2))
1667 call matvec2(Ctilde(1,1,iti1),obrot(1,i-2),Ctobr(1,i-2))
1668 call matvec2(Dtilde(1,1,iti),obrot2(1,i-2),Dtobr2(1,i-2))
1678 DtUg2(l,k,i-2)=0.0d0
1682 call matvec2(Ugder(1,1,i-2),b2(1,iti),Ub2der(1,i-2))
1683 call matmat2(EE(1,1,iti),Ugder(1,1,i-2),EUgder(1,1,i-2))
1684 call matmat2(CC(1,1,iti1),Ugder(1,1,i-2),CUgder(1,1,i-2))
1685 call matmat2(DD(1,1,iti),Ugder(1,1,i-2),DUgder(1,1,i-2))
1686 call matmat2(Dtilde(1,1,iti),Ug2der(1,1,i-2),DtUg2der(1,1,i-2))
1687 call matvec2(Ctilde(1,1,iti1),obrot_der(1,i-2),Ctobrder(1,i-2))
1688 call matvec2(Dtilde(1,1,iti),obrot2_der(1,i-2),Dtobr2der(1,i-2))
1690 muder(k,i-2)=Ub2der(k,i-2)
1692 if (i.gt. iatel_s+1 .and. i.lt.iatel_e+4) then
1693 iti1 = itortyp(itype(i-1))
1698 mu(k,i-2)=Ub2(k,i-2)+b1(k,iti1)
1700 C Vectors and matrices dependent on a single virtual-bond dihedral.
1701 call matvec2(DD(1,1,iti),b1tilde(1,iti1),auxvec(1))
1702 call matvec2(Ug2(1,1,i-2),auxvec(1),Ug2Db1t(1,i-2))
1703 call matvec2(Ug2der(1,1,i-2),auxvec(1),Ug2Db1tder(1,i-2))
1704 call matvec2(CC(1,1,iti1),Ub2(1,i-2),CUgb2(1,i-2))
1705 call matvec2(CC(1,1,iti1),Ub2der(1,i-2),CUgb2der(1,i-2))
1706 call matmat2(EUg(1,1,i-2),CC(1,1,iti1),EUgC(1,1,i-2))
1707 call matmat2(EUgder(1,1,i-2),CC(1,1,iti1),EUgCder(1,1,i-2))
1708 call matmat2(EUg(1,1,i-2),DD(1,1,iti1),EUgD(1,1,i-2))
1709 call matmat2(EUgder(1,1,i-2),DD(1,1,iti1),EUgDder(1,1,i-2))
1710 cd write (iout,*) 'i',i,' mu ',(mu(k,i-2),k=1,2),
1711 cd & ' mu1',(b1(k,i-2),k=1,2),' mu2',(Ub2(k,i-2),k=1,2)
1713 C Matrices dependent on two consecutive virtual-bond dihedrals.
1714 C The order of matrices is from left to right.
1716 call matmat2(DtUg2(1,1,i-1),EUg(1,1,i),DtUg2EUg(1,1,i))
1717 call matmat2(DtUg2der(1,1,i-1),EUg(1,1,i),DtUg2EUgder(1,1,1,i))
1718 call matmat2(DtUg2(1,1,i-1),EUgder(1,1,i),DtUg2EUgder(1,1,2,i))
1719 call transpose2(DtUg2(1,1,i-1),auxmat(1,1))
1720 call matmat2(auxmat(1,1),EUg(1,1,i),Ug2DtEUg(1,1,i))
1721 call matmat2(auxmat(1,1),EUgder(1,1,i),Ug2DtEUgder(1,1,2,i))
1722 call transpose2(DtUg2der(1,1,i-1),auxmat(1,1))
1723 call matmat2(auxmat(1,1),EUg(1,1,i),Ug2DtEUgder(1,1,1,i))
1726 cd iti = itortyp(itype(i))
1729 cd write (iout,'(2f10.5,5x,2f10.5,5x,2f10.5)')
1730 cd & (EE(j,k,iti),k=1,2),(Ug(j,k,i),k=1,2),(EUg(j,k,i),k=1,2)
1735 C--------------------------------------------------------------------------
1736 subroutine eelec(ees,evdw1,eel_loc,eello_turn3,eello_turn4)
1738 C This subroutine calculates the average interaction energy and its gradient
1739 C in the virtual-bond vectors between non-adjacent peptide groups, based on
1740 C the potential described in Liwo et al., Protein Sci., 1993, 2, 1715.
1741 C The potential depends both on the distance of peptide-group centers and on
1742 C the orientation of the CA-CA virtual bonds.
1744 implicit real*8 (a-h,o-z)
1745 include 'DIMENSIONS'
1746 include 'sizesclu.dat'
1747 include 'COMMON.CONTROL'
1748 include 'COMMON.IOUNITS'
1749 include 'COMMON.GEO'
1750 include 'COMMON.VAR'
1751 include 'COMMON.LOCAL'
1752 include 'COMMON.CHAIN'
1753 include 'COMMON.DERIV'
1754 include 'COMMON.INTERACT'
1755 include 'COMMON.CONTACTS'
1756 include 'COMMON.TORSION'
1757 include 'COMMON.VECTORS'
1758 include 'COMMON.FFIELD'
1759 dimension ggg(3),gggp(3),gggm(3),erij(3),dcosb(3),dcosg(3),
1760 & erder(3,3),uryg(3,3),urzg(3,3),vryg(3,3),vrzg(3,3)
1761 double precision acipa(2,2),agg(3,4),aggi(3,4),aggi1(3,4),
1762 & aggj(3,4),aggj1(3,4),a_temp(2,2),muij(4)
1763 common /locel/ a_temp,agg,aggi,aggi1,aggj,aggj1,j1
1764 c 4/26/02 - AL scaling factor for 1,4 repulsive VDW interactions
1765 double precision scal_el /0.5d0/
1767 C 13-go grudnia roku pamietnego...
1768 double precision unmat(3,3) /1.0d0,0.0d0,0.0d0,
1769 & 0.0d0,1.0d0,0.0d0,
1770 & 0.0d0,0.0d0,1.0d0/
1771 cd write(iout,*) 'In EELEC'
1773 cd write(iout,*) 'Type',i
1774 cd write(iout,*) 'B1',B1(:,i)
1775 cd write(iout,*) 'B2',B2(:,i)
1776 cd write(iout,*) 'CC',CC(:,:,i)
1777 cd write(iout,*) 'DD',DD(:,:,i)
1778 cd write(iout,*) 'EE',EE(:,:,i)
1780 cd call check_vecgrad
1782 if (icheckgrad.eq.1) then
1784 fac=1.0d0/dsqrt(scalar(dc(1,i),dc(1,i)))
1786 dc_norm(k,i)=dc(k,i)*fac
1788 c write (iout,*) 'i',i,' fac',fac
1791 if (wel_loc.gt.0.0d0 .or. wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0
1792 & .or. wcorr6.gt.0.0d0 .or. wturn3.gt.0.0d0 .or.
1793 & wturn4.gt.0.0d0 .or. wturn6.gt.0.0d0) then
1794 cd if (wel_loc.gt.0.0d0) then
1795 if (icheckgrad.eq.1) then
1796 call vec_and_deriv_test
1803 cd write (iout,*) 'i=',i
1805 cd write (iout,'(i5,2f10.5)') k,uy(k,i),uz(k,i)
1808 cd write (iout,'(f10.5,2x,3f10.5,2x,3f10.5)')
1809 cd & uz(k,i),(uzgrad(k,l,1,i),l=1,3),(uzgrad(k,l,2,i),l=1,3)
1822 cd print '(a)','Enter EELEC'
1823 cd write (iout,*) 'iatel_s=',iatel_s,' iatel_e=',iatel_e
1825 gel_loc_loc(i)=0.0d0
1828 do i=iatel_s,iatel_e
1829 if (itel(i).eq.0) goto 1215
1833 dx_normi=dc_norm(1,i)
1834 dy_normi=dc_norm(2,i)
1835 dz_normi=dc_norm(3,i)
1836 xmedi=c(1,i)+0.5d0*dxi
1837 ymedi=c(2,i)+0.5d0*dyi
1838 zmedi=c(3,i)+0.5d0*dzi
1840 c write (iout,*) 'i',i,' ielstart',ielstart(i),' ielend',ielend(i)
1841 do j=ielstart(i),ielend(i)
1842 if (itel(j).eq.0) goto 1216
1846 if (j.eq.i+2 .and. itelj.eq.2) iteli=2
1847 aaa=app(iteli,itelj)
1848 bbb=bpp(iteli,itelj)
1849 C Diagnostics only!!!
1855 ael6i=ael6(iteli,itelj)
1856 ael3i=ael3(iteli,itelj)
1860 dx_normj=dc_norm(1,j)
1861 dy_normj=dc_norm(2,j)
1862 dz_normj=dc_norm(3,j)
1863 xj=c(1,j)+0.5D0*dxj-xmedi
1864 yj=c(2,j)+0.5D0*dyj-ymedi
1865 zj=c(3,j)+0.5D0*dzj-zmedi
1866 rij=xj*xj+yj*yj+zj*zj
1872 cosa=dx_normi*dx_normj+dy_normi*dy_normj+dz_normi*dz_normj
1873 cosb=(xj*dx_normi+yj*dy_normi+zj*dz_normi)*rmij
1874 cosg=(xj*dx_normj+yj*dy_normj+zj*dz_normj)*rmij
1875 fac=cosa-3.0D0*cosb*cosg
1877 c 4/26/02 - AL scaling down 1,4 repulsive VDW interactions
1878 if (j.eq.i+2) ev1=scal_el*ev1
1883 el1=fac3*(4.0D0+fac*fac-3.0D0*(cosb*cosb+cosg*cosg))
1886 c write (iout,*) "i",i,iteli," j",j,itelj," eesij",eesij
1887 C 12/26/95 - for the evaluation of multi-body H-bonding interactions
1888 ees0ij=4.0D0+fac*fac-3.0D0*(cosb*cosb+cosg*cosg)
1891 cd write(iout,'(2(2i3,2x),7(1pd12.4)/2(3(1pd12.4),5x)/)')
1892 cd & iteli,i,itelj,j,aaa,bbb,ael6i,ael3i,
1893 cd & 1.0D0/dsqrt(rrmij),evdwij,eesij,
1894 cd & xmedi,ymedi,zmedi,xj,yj,zj
1896 C Calculate contributions to the Cartesian gradient.
1899 facvdw=-6*rrmij*(ev1+evdwij)
1900 facel=-3*rrmij*(el1+eesij)
1907 * Radial derivatives. First process both termini of the fragment (i,j)
1914 gelc(k,i)=gelc(k,i)+ghalf
1915 gelc(k,j)=gelc(k,j)+ghalf
1918 * Loop over residues i+1 thru j-1.
1922 gelc(l,k)=gelc(l,k)+ggg(l)
1930 gvdwpp(k,i)=gvdwpp(k,i)+ghalf
1931 gvdwpp(k,j)=gvdwpp(k,j)+ghalf
1934 * Loop over residues i+1 thru j-1.
1938 gvdwpp(l,k)=gvdwpp(l,k)+ggg(l)
1945 fac=-3*rrmij*(facvdw+facvdw+facel)
1951 * Radial derivatives. First process both termini of the fragment (i,j)
1958 gelc(k,i)=gelc(k,i)+ghalf
1959 gelc(k,j)=gelc(k,j)+ghalf
1962 * Loop over residues i+1 thru j-1.
1966 gelc(l,k)=gelc(l,k)+ggg(l)
1973 ecosa=2.0D0*fac3*fac1+fac4
1976 ecosb=(fac3*(fac1*cosg+cosb)+cosg*fac4)
1977 ecosg=(fac3*(fac1*cosb+cosg)+cosb*fac4)
1979 dcosb(k)=rmij*(dc_norm(k,i)-erij(k)*cosb)
1980 dcosg(k)=rmij*(dc_norm(k,j)-erij(k)*cosg)
1982 cd print '(2i3,2(3(1pd14.5),3x))',i,j,(dcosb(k),k=1,3),
1983 cd & (dcosg(k),k=1,3)
1985 ggg(k)=ecosb*dcosb(k)+ecosg*dcosg(k)
1989 gelc(k,i)=gelc(k,i)+ghalf
1990 & +(ecosa*(dc_norm(k,j)-cosa*dc_norm(k,i))
1991 & + ecosb*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1)
1992 gelc(k,j)=gelc(k,j)+ghalf
1993 & +(ecosa*(dc_norm(k,i)-cosa*dc_norm(k,j))
1994 & + ecosg*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1)
1998 gelc(l,k)=gelc(l,k)+ggg(l)
2003 IF (wel_loc.gt.0.0d0 .or. wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0
2004 & .or. wcorr6.gt.0.0d0 .or. wturn3.gt.0.0d0
2005 & .or. wturn4.gt.0.0d0 .or. wturn6.gt.0.0d0) THEN
2007 C 9/25/99 Mixed third-order local-electrostatic terms. The local-interaction
2008 C energy of a peptide unit is assumed in the form of a second-order
2009 C Fourier series in the angles lambda1 and lambda2 (see Nishikawa et al.
2010 C Macromolecules, 1974, 7, 797-806 for definition). This correlation terms
2011 C are computed for EVERY pair of non-contiguous peptide groups.
2013 if (j.lt.nres-1) then
2024 muij(kkk)=mu(k,i)*mu(l,j)
2027 cd write (iout,*) 'EELEC: i',i,' j',j
2028 cd write (iout,*) 'j',j,' j1',j1,' j2',j2
2029 cd write(iout,*) 'muij',muij
2030 ury=scalar(uy(1,i),erij)
2031 urz=scalar(uz(1,i),erij)
2032 vry=scalar(uy(1,j),erij)
2033 vrz=scalar(uz(1,j),erij)
2034 a22=scalar(uy(1,i),uy(1,j))-3*ury*vry
2035 a23=scalar(uy(1,i),uz(1,j))-3*ury*vrz
2036 a32=scalar(uz(1,i),uy(1,j))-3*urz*vry
2037 a33=scalar(uz(1,i),uz(1,j))-3*urz*vrz
2038 C For diagnostics only
2043 fac=dsqrt(-ael6i)*r3ij
2044 cd write (2,*) 'fac=',fac
2045 C For diagnostics only
2051 cd write (iout,'(4i5,4f10.5)')
2052 cd & i,itortyp(itype(i)),j,itortyp(itype(j)),a22,a23,a32,a33
2053 cd write (iout,'(6f10.5)') (muij(k),k=1,4),fac,eel_loc_ij
2054 cd write (iout,'(2(3f10.5,5x)/2(3f10.5,5x))') (uy(k,i),k=1,3),
2055 cd & (uz(k,i),k=1,3),(uy(k,j),k=1,3),(uz(k,j),k=1,3)
2056 cd write (iout,'(4f10.5)')
2057 cd & scalar(uy(1,i),uy(1,j)),scalar(uy(1,i),uz(1,j)),
2058 cd & scalar(uz(1,i),uy(1,j)),scalar(uz(1,i),uz(1,j))
2059 cd write (iout,'(4f10.5)') ury,urz,vry,vrz
2060 cd write (iout,'(2i3,9f10.5/)') i,j,
2061 cd & fac22,a22,fac23,a23,fac32,a32,fac33,a33,eel_loc_ij
2063 C Derivatives of the elements of A in virtual-bond vectors
2064 call unormderiv(erij(1),unmat(1,1),rmij,erder(1,1))
2071 uryg(k,1)=scalar(erder(1,k),uy(1,i))
2072 uryg(k,2)=scalar(uygrad(1,k,1,i),erij(1))
2073 uryg(k,3)=scalar(uygrad(1,k,2,i),erij(1))
2074 urzg(k,1)=scalar(erder(1,k),uz(1,i))
2075 urzg(k,2)=scalar(uzgrad(1,k,1,i),erij(1))
2076 urzg(k,3)=scalar(uzgrad(1,k,2,i),erij(1))
2077 vryg(k,1)=scalar(erder(1,k),uy(1,j))
2078 vryg(k,2)=scalar(uygrad(1,k,1,j),erij(1))
2079 vryg(k,3)=scalar(uygrad(1,k,2,j),erij(1))
2080 vrzg(k,1)=scalar(erder(1,k),uz(1,j))
2081 vrzg(k,2)=scalar(uzgrad(1,k,1,j),erij(1))
2082 vrzg(k,3)=scalar(uzgrad(1,k,2,j),erij(1))
2092 C Compute radial contributions to the gradient
2114 C Add the contributions coming from er
2117 agg(k,1)=agg(k,1)+fac3*(uryg(k,1)*vry+vryg(k,1)*ury)
2118 agg(k,2)=agg(k,2)+fac3*(uryg(k,1)*vrz+vrzg(k,1)*ury)
2119 agg(k,3)=agg(k,3)+fac3*(urzg(k,1)*vry+vryg(k,1)*urz)
2120 agg(k,4)=agg(k,4)+fac3*(urzg(k,1)*vrz+vrzg(k,1)*urz)
2123 C Derivatives in DC(i)
2124 ghalf1=0.5d0*agg(k,1)
2125 ghalf2=0.5d0*agg(k,2)
2126 ghalf3=0.5d0*agg(k,3)
2127 ghalf4=0.5d0*agg(k,4)
2128 aggi(k,1)=fac*(scalar(uygrad(1,k,1,i),uy(1,j))
2129 & -3.0d0*uryg(k,2)*vry)+ghalf1
2130 aggi(k,2)=fac*(scalar(uygrad(1,k,1,i),uz(1,j))
2131 & -3.0d0*uryg(k,2)*vrz)+ghalf2
2132 aggi(k,3)=fac*(scalar(uzgrad(1,k,1,i),uy(1,j))
2133 & -3.0d0*urzg(k,2)*vry)+ghalf3
2134 aggi(k,4)=fac*(scalar(uzgrad(1,k,1,i),uz(1,j))
2135 & -3.0d0*urzg(k,2)*vrz)+ghalf4
2136 C Derivatives in DC(i+1)
2137 aggi1(k,1)=fac*(scalar(uygrad(1,k,2,i),uy(1,j))
2138 & -3.0d0*uryg(k,3)*vry)+agg(k,1)
2139 aggi1(k,2)=fac*(scalar(uygrad(1,k,2,i),uz(1,j))
2140 & -3.0d0*uryg(k,3)*vrz)+agg(k,2)
2141 aggi1(k,3)=fac*(scalar(uzgrad(1,k,2,i),uy(1,j))
2142 & -3.0d0*urzg(k,3)*vry)+agg(k,3)
2143 aggi1(k,4)=fac*(scalar(uzgrad(1,k,2,i),uz(1,j))
2144 & -3.0d0*urzg(k,3)*vrz)+agg(k,4)
2145 C Derivatives in DC(j)
2146 aggj(k,1)=fac*(scalar(uygrad(1,k,1,j),uy(1,i))
2147 & -3.0d0*vryg(k,2)*ury)+ghalf1
2148 aggj(k,2)=fac*(scalar(uzgrad(1,k,1,j),uy(1,i))
2149 & -3.0d0*vrzg(k,2)*ury)+ghalf2
2150 aggj(k,3)=fac*(scalar(uygrad(1,k,1,j),uz(1,i))
2151 & -3.0d0*vryg(k,2)*urz)+ghalf3
2152 aggj(k,4)=fac*(scalar(uzgrad(1,k,1,j),uz(1,i))
2153 & -3.0d0*vrzg(k,2)*urz)+ghalf4
2154 C Derivatives in DC(j+1) or DC(nres-1)
2155 aggj1(k,1)=fac*(scalar(uygrad(1,k,2,j),uy(1,i))
2156 & -3.0d0*vryg(k,3)*ury)
2157 aggj1(k,2)=fac*(scalar(uzgrad(1,k,2,j),uy(1,i))
2158 & -3.0d0*vrzg(k,3)*ury)
2159 aggj1(k,3)=fac*(scalar(uygrad(1,k,2,j),uz(1,i))
2160 & -3.0d0*vryg(k,3)*urz)
2161 aggj1(k,4)=fac*(scalar(uzgrad(1,k,2,j),uz(1,i))
2162 & -3.0d0*vrzg(k,3)*urz)
2167 C Derivatives in DC(i+1)
2168 cd aggi1(k,1)=agg(k,1)
2169 cd aggi1(k,2)=agg(k,2)
2170 cd aggi1(k,3)=agg(k,3)
2171 cd aggi1(k,4)=agg(k,4)
2172 C Derivatives in DC(j)
2177 C Derivatives in DC(j+1)
2182 if (j.eq.nres-1 .and. i.lt.j-2) then
2184 aggj1(k,l)=aggj1(k,l)+agg(k,l)
2185 cd aggj1(k,l)=agg(k,l)
2191 C Check the loc-el terms by numerical integration
2201 aggi(k,l)=-aggi(k,l)
2202 aggi1(k,l)=-aggi1(k,l)
2203 aggj(k,l)=-aggj(k,l)
2204 aggj1(k,l)=-aggj1(k,l)
2207 if (j.lt.nres-1) then
2213 aggi(k,l)=-aggi(k,l)
2214 aggi1(k,l)=-aggi1(k,l)
2215 aggj(k,l)=-aggj(k,l)
2216 aggj1(k,l)=-aggj1(k,l)
2227 aggi(k,l)=-aggi(k,l)
2228 aggi1(k,l)=-aggi1(k,l)
2229 aggj(k,l)=-aggj(k,l)
2230 aggj1(k,l)=-aggj1(k,l)
2236 IF (wel_loc.gt.0.0d0) THEN
2237 C Contribution to the local-electrostatic energy coming from the i-j pair
2238 eel_loc_ij=a22*muij(1)+a23*muij(2)+a32*muij(3)
2240 cd write (iout,*) 'i',i,' j',j,' eel_loc_ij',eel_loc_ij
2241 cd write (iout,*) a22,muij(1),a23,muij(2),a32,muij(3)
2242 eel_loc=eel_loc+eel_loc_ij
2243 C Partial derivatives in virtual-bond dihedral angles gamma
2246 & gel_loc_loc(i-1)=gel_loc_loc(i-1)+
2247 & a22*muder(1,i)*mu(1,j)+a23*muder(1,i)*mu(2,j)
2248 & +a32*muder(2,i)*mu(1,j)+a33*muder(2,i)*mu(2,j)
2249 gel_loc_loc(j-1)=gel_loc_loc(j-1)+
2250 & a22*mu(1,i)*muder(1,j)+a23*mu(1,i)*muder(2,j)
2251 & +a32*mu(2,i)*muder(1,j)+a33*mu(2,i)*muder(2,j)
2252 cd call checkint3(i,j,mu1,mu2,a22,a23,a32,a33,acipa,eel_loc_ij)
2253 cd write(iout,*) 'agg ',agg
2254 cd write(iout,*) 'aggi ',aggi
2255 cd write(iout,*) 'aggi1',aggi1
2256 cd write(iout,*) 'aggj ',aggj
2257 cd write(iout,*) 'aggj1',aggj1
2259 C Derivatives of eello in DC(i+1) thru DC(j-1) or DC(nres-2)
2261 ggg(l)=agg(l,1)*muij(1)+
2262 & agg(l,2)*muij(2)+agg(l,3)*muij(3)+agg(l,4)*muij(4)
2266 gel_loc(l,k)=gel_loc(l,k)+ggg(l)
2269 C Remaining derivatives of eello
2271 gel_loc(l,i)=gel_loc(l,i)+aggi(l,1)*muij(1)+
2272 & aggi(l,2)*muij(2)+aggi(l,3)*muij(3)+aggi(l,4)*muij(4)
2273 gel_loc(l,i+1)=gel_loc(l,i+1)+aggi1(l,1)*muij(1)+
2274 & aggi1(l,2)*muij(2)+aggi1(l,3)*muij(3)+aggi1(l,4)*muij(4)
2275 gel_loc(l,j)=gel_loc(l,j)+aggj(l,1)*muij(1)+
2276 & aggj(l,2)*muij(2)+aggj(l,3)*muij(3)+aggj(l,4)*muij(4)
2277 gel_loc(l,j1)=gel_loc(l,j1)+aggj1(l,1)*muij(1)+
2278 & aggj1(l,2)*muij(2)+aggj1(l,3)*muij(3)+aggj1(l,4)*muij(4)
2282 if (wturn3.gt.0.0d0 .or. wturn4.gt.0.0d0) then
2283 C Contributions from turns
2288 call eturn34(i,j,eello_turn3,eello_turn4)
2290 C Change 12/26/95 to calculate four-body contributions to H-bonding energy
2291 if (j.gt.i+1 .and. num_conti.le.maxconts) then
2293 C Calculate the contact function. The ith column of the array JCONT will
2294 C contain the numbers of atoms that make contacts with the atom I (of numbers
2295 C greater than I). The arrays FACONT and GACONT will contain the values of
2296 C the contact function and its derivative.
2297 c r0ij=1.02D0*rpp(iteli,itelj)
2298 c r0ij=1.11D0*rpp(iteli,itelj)
2299 r0ij=2.20D0*rpp(iteli,itelj)
2300 c r0ij=1.55D0*rpp(iteli,itelj)
2301 call gcont(rij,r0ij,1.0D0,0.2d0*r0ij,fcont,fprimcont)
2302 if (fcont.gt.0.0D0) then
2303 num_conti=num_conti+1
2304 if (num_conti.gt.maxconts) then
2305 write (iout,*) 'WARNING - max. # of contacts exceeded;',
2306 & ' will skip next contacts for this conf.'
2308 jcont_hb(num_conti,i)=j
2309 IF (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or.
2310 & wcorr6.gt.0.0d0 .or. wturn6.gt.0.0d0) THEN
2311 C 9/30/99 (AL) - store components necessary to evaluate higher-order loc-el
2313 d_cont(num_conti,i)=rij
2314 cd write (2,'(3e15.5)') rij,r0ij+0.2d0*r0ij,rij
2315 C --- Electrostatic-interaction matrix ---
2316 a_chuj(1,1,num_conti,i)=a22
2317 a_chuj(1,2,num_conti,i)=a23
2318 a_chuj(2,1,num_conti,i)=a32
2319 a_chuj(2,2,num_conti,i)=a33
2320 C --- Gradient of rij
2322 grij_hb_cont(kkk,num_conti,i)=erij(kkk)
2325 c a_chuj(1,1,num_conti,i)=-0.61d0
2326 c a_chuj(1,2,num_conti,i)= 0.4d0
2327 c a_chuj(2,1,num_conti,i)= 0.65d0
2328 c a_chuj(2,2,num_conti,i)= 0.50d0
2329 c else if (i.eq.2) then
2330 c a_chuj(1,1,num_conti,i)= 0.0d0
2331 c a_chuj(1,2,num_conti,i)= 0.0d0
2332 c a_chuj(2,1,num_conti,i)= 0.0d0
2333 c a_chuj(2,2,num_conti,i)= 0.0d0
2335 C --- and its gradients
2336 cd write (iout,*) 'i',i,' j',j
2338 cd write (iout,*) 'iii 1 kkk',kkk
2339 cd write (iout,*) agg(kkk,:)
2342 cd write (iout,*) 'iii 2 kkk',kkk
2343 cd write (iout,*) aggi(kkk,:)
2346 cd write (iout,*) 'iii 3 kkk',kkk
2347 cd write (iout,*) aggi1(kkk,:)
2350 cd write (iout,*) 'iii 4 kkk',kkk
2351 cd write (iout,*) aggj(kkk,:)
2354 cd write (iout,*) 'iii 5 kkk',kkk
2355 cd write (iout,*) aggj1(kkk,:)
2362 a_chuj_der(k,l,m,1,num_conti,i)=agg(m,kkll)
2363 a_chuj_der(k,l,m,2,num_conti,i)=aggi(m,kkll)
2364 a_chuj_der(k,l,m,3,num_conti,i)=aggi1(m,kkll)
2365 a_chuj_der(k,l,m,4,num_conti,i)=aggj(m,kkll)
2366 a_chuj_der(k,l,m,5,num_conti,i)=aggj1(m,kkll)
2368 c a_chuj_der(k,l,m,mm,num_conti,i)=0.0d0
2374 IF (wcorr4.eq.0.0d0 .and. wcorr.gt.0.0d0) THEN
2375 C Calculate contact energies
2377 wij=cosa-3.0D0*cosb*cosg
2380 c fac3=dsqrt(-ael6i)/r0ij**3
2381 fac3=dsqrt(-ael6i)*r3ij
2382 ees0pij=dsqrt(4.0D0+cosa4+wij*wij-3.0D0*cosbg1*cosbg1)
2383 ees0mij=dsqrt(4.0D0-cosa4+wij*wij-3.0D0*cosbg2*cosbg2)
2385 ees0p(num_conti,i)=0.5D0*fac3*(ees0pij+ees0mij)
2386 ees0m(num_conti,i)=0.5D0*fac3*(ees0pij-ees0mij)
2387 C Diagnostics. Comment out or remove after debugging!
2388 c ees0p(num_conti,i)=0.5D0*fac3*ees0pij
2389 c ees0m(num_conti,i)=0.5D0*fac3*ees0mij
2390 c ees0m(num_conti,i)=0.0D0
2392 c write (iout,*) 'i=',i,' j=',j,' rij=',rij,' r0ij=',r0ij,
2393 c & ' ees0ij=',ees0p(num_conti,i),ees0m(num_conti,i),' fcont=',fcont
2394 facont_hb(num_conti,i)=fcont
2396 C Angular derivatives of the contact function
2397 ees0pij1=fac3/ees0pij
2398 ees0mij1=fac3/ees0mij
2399 fac3p=-3.0D0*fac3*rrmij
2400 ees0pijp=0.5D0*fac3p*(ees0pij+ees0mij)
2401 ees0mijp=0.5D0*fac3p*(ees0pij-ees0mij)
2403 ecosa1= ees0pij1*( 1.0D0+0.5D0*wij)
2404 ecosb1=-1.5D0*ees0pij1*(wij*cosg+cosbg1)
2405 ecosg1=-1.5D0*ees0pij1*(wij*cosb+cosbg1)
2406 ecosa2= ees0mij1*(-1.0D0+0.5D0*wij)
2407 ecosb2=-1.5D0*ees0mij1*(wij*cosg+cosbg2)
2408 ecosg2=-1.5D0*ees0mij1*(wij*cosb-cosbg2)
2409 ecosap=ecosa1+ecosa2
2410 ecosbp=ecosb1+ecosb2
2411 ecosgp=ecosg1+ecosg2
2412 ecosam=ecosa1-ecosa2
2413 ecosbm=ecosb1-ecosb2
2414 ecosgm=ecosg1-ecosg2
2423 fprimcont=fprimcont/rij
2424 cd facont_hb(num_conti,i)=1.0D0
2425 C Following line is for diagnostics.
2428 dcosb(k)=rmij*(dc_norm(k,i)-erij(k)*cosb)
2429 dcosg(k)=rmij*(dc_norm(k,j)-erij(k)*cosg)
2432 gggp(k)=ecosbp*dcosb(k)+ecosgp*dcosg(k)
2433 gggm(k)=ecosbm*dcosb(k)+ecosgm*dcosg(k)
2435 gggp(1)=gggp(1)+ees0pijp*xj
2436 gggp(2)=gggp(2)+ees0pijp*yj
2437 gggp(3)=gggp(3)+ees0pijp*zj
2438 gggm(1)=gggm(1)+ees0mijp*xj
2439 gggm(2)=gggm(2)+ees0mijp*yj
2440 gggm(3)=gggm(3)+ees0mijp*zj
2441 C Derivatives due to the contact function
2442 gacont_hbr(1,num_conti,i)=fprimcont*xj
2443 gacont_hbr(2,num_conti,i)=fprimcont*yj
2444 gacont_hbr(3,num_conti,i)=fprimcont*zj
2446 ghalfp=0.5D0*gggp(k)
2447 ghalfm=0.5D0*gggm(k)
2448 gacontp_hb1(k,num_conti,i)=ghalfp
2449 & +(ecosap*(dc_norm(k,j)-cosa*dc_norm(k,i))
2450 & + ecosbp*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1)
2451 gacontp_hb2(k,num_conti,i)=ghalfp
2452 & +(ecosap*(dc_norm(k,i)-cosa*dc_norm(k,j))
2453 & + ecosgp*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1)
2454 gacontp_hb3(k,num_conti,i)=gggp(k)
2455 gacontm_hb1(k,num_conti,i)=ghalfm
2456 & +(ecosam*(dc_norm(k,j)-cosa*dc_norm(k,i))
2457 & + ecosbm*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1)
2458 gacontm_hb2(k,num_conti,i)=ghalfm
2459 & +(ecosam*(dc_norm(k,i)-cosa*dc_norm(k,j))
2460 & + ecosgm*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1)
2461 gacontm_hb3(k,num_conti,i)=gggm(k)
2464 C Diagnostics. Comment out or remove after debugging!
2466 cdiag gacontp_hb1(k,num_conti,i)=0.0D0
2467 cdiag gacontp_hb2(k,num_conti,i)=0.0D0
2468 cdiag gacontp_hb3(k,num_conti,i)=0.0D0
2469 cdiag gacontm_hb1(k,num_conti,i)=0.0D0
2470 cdiag gacontm_hb2(k,num_conti,i)=0.0D0
2471 cdiag gacontm_hb3(k,num_conti,i)=0.0D0
2474 endif ! num_conti.le.maxconts
2479 num_cont_hb(i)=num_conti
2483 cd write (iout,'(i3,3f10.5,5x,3f10.5)')
2484 cd & i,(gel_loc(k,i),k=1,3),gel_loc_loc(i)
2486 c 12/7/99 Adam eello_turn3 will be considered as a separate energy term
2487 ccc eel_loc=eel_loc+eello_turn3
2490 C-----------------------------------------------------------------------------
2491 subroutine eturn34(i,j,eello_turn3,eello_turn4)
2492 C Third- and fourth-order contributions from turns
2493 implicit real*8 (a-h,o-z)
2494 include 'DIMENSIONS'
2495 include 'sizesclu.dat'
2496 include 'COMMON.IOUNITS'
2497 include 'COMMON.GEO'
2498 include 'COMMON.VAR'
2499 include 'COMMON.LOCAL'
2500 include 'COMMON.CHAIN'
2501 include 'COMMON.DERIV'
2502 include 'COMMON.INTERACT'
2503 include 'COMMON.CONTACTS'
2504 include 'COMMON.TORSION'
2505 include 'COMMON.VECTORS'
2506 include 'COMMON.FFIELD'
2508 double precision auxmat(2,2),auxmat1(2,2),auxmat2(2,2),pizda(2,2),
2509 & e1t(2,2),e2t(2,2),e3t(2,2),e1tder(2,2),e2tder(2,2),e3tder(2,2),
2510 & e1a(2,2),ae3(2,2),ae3e2(2,2),auxvec(2),auxvec1(2)
2511 double precision agg(3,4),aggi(3,4),aggi1(3,4),
2512 & aggj(3,4),aggj1(3,4),a_temp(2,2)
2513 common /locel/ a_temp,agg,aggi,aggi1,aggj,aggj1,j1,j2
2515 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
2517 C Third-order contributions
2524 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
2525 cd call checkint_turn3(i,a_temp,eello_turn3_num)
2526 call matmat2(EUg(1,1,i+1),EUg(1,1,i+2),auxmat(1,1))
2527 call transpose2(auxmat(1,1),auxmat1(1,1))
2528 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
2529 eello_turn3=eello_turn3+0.5d0*(pizda(1,1)+pizda(2,2))
2530 cd write (2,*) 'i,',i,' j',j,'eello_turn3',
2531 cd & 0.5d0*(pizda(1,1)+pizda(2,2)),
2532 cd & ' eello_turn3_num',4*eello_turn3_num
2534 C Derivatives in gamma(i)
2535 call matmat2(EUgder(1,1,i+1),EUg(1,1,i+2),auxmat2(1,1))
2536 call transpose2(auxmat2(1,1),pizda(1,1))
2537 call matmat2(a_temp(1,1),pizda(1,1),pizda(1,1))
2538 gel_loc_turn3(i)=gel_loc_turn3(i)+0.5d0*(pizda(1,1)+pizda(2,2))
2539 C Derivatives in gamma(i+1)
2540 call matmat2(EUg(1,1,i+1),EUgder(1,1,i+2),auxmat2(1,1))
2541 call transpose2(auxmat2(1,1),pizda(1,1))
2542 call matmat2(a_temp(1,1),pizda(1,1),pizda(1,1))
2543 gel_loc_turn3(i+1)=gel_loc_turn3(i+1)
2544 & +0.5d0*(pizda(1,1)+pizda(2,2))
2545 C Cartesian derivatives
2547 a_temp(1,1)=aggi(l,1)
2548 a_temp(1,2)=aggi(l,2)
2549 a_temp(2,1)=aggi(l,3)
2550 a_temp(2,2)=aggi(l,4)
2551 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
2552 gcorr3_turn(l,i)=gcorr3_turn(l,i)
2553 & +0.5d0*(pizda(1,1)+pizda(2,2))
2554 a_temp(1,1)=aggi1(l,1)
2555 a_temp(1,2)=aggi1(l,2)
2556 a_temp(2,1)=aggi1(l,3)
2557 a_temp(2,2)=aggi1(l,4)
2558 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
2559 gcorr3_turn(l,i+1)=gcorr3_turn(l,i+1)
2560 & +0.5d0*(pizda(1,1)+pizda(2,2))
2561 a_temp(1,1)=aggj(l,1)
2562 a_temp(1,2)=aggj(l,2)
2563 a_temp(2,1)=aggj(l,3)
2564 a_temp(2,2)=aggj(l,4)
2565 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
2566 gcorr3_turn(l,j)=gcorr3_turn(l,j)
2567 & +0.5d0*(pizda(1,1)+pizda(2,2))
2568 a_temp(1,1)=aggj1(l,1)
2569 a_temp(1,2)=aggj1(l,2)
2570 a_temp(2,1)=aggj1(l,3)
2571 a_temp(2,2)=aggj1(l,4)
2572 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
2573 gcorr3_turn(l,j1)=gcorr3_turn(l,j1)
2574 & +0.5d0*(pizda(1,1)+pizda(2,2))
2577 else if (j.eq.i+3) then
2578 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
2580 C Fourth-order contributions
2588 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
2589 cd call checkint_turn4(i,a_temp,eello_turn4_num)
2590 iti1=itortyp(itype(i+1))
2591 iti2=itortyp(itype(i+2))
2592 iti3=itortyp(itype(i+3))
2593 call transpose2(EUg(1,1,i+1),e1t(1,1))
2594 call transpose2(Eug(1,1,i+2),e2t(1,1))
2595 call transpose2(Eug(1,1,i+3),e3t(1,1))
2596 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
2597 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
2598 s1=scalar2(b1(1,iti2),auxvec(1))
2599 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
2600 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
2601 s2=scalar2(b1(1,iti1),auxvec(1))
2602 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
2603 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
2604 s3=0.5d0*(pizda(1,1)+pizda(2,2))
2605 eello_turn4=eello_turn4-(s1+s2+s3)
2606 cd write (2,*) 'i,',i,' j',j,'eello_turn4',-(s1+s2+s3),
2607 cd & ' eello_turn4_num',8*eello_turn4_num
2608 C Derivatives in gamma(i)
2610 call transpose2(EUgder(1,1,i+1),e1tder(1,1))
2611 call matmat2(e1tder(1,1),a_temp(1,1),auxmat(1,1))
2612 call matvec2(auxmat(1,1),Ub2(1,i+3),auxvec(1))
2613 s1=scalar2(b1(1,iti2),auxvec(1))
2614 call matmat2(ae3e2(1,1),e1tder(1,1),pizda(1,1))
2615 s3=0.5d0*(pizda(1,1)+pizda(2,2))
2616 gel_loc_turn4(i)=gel_loc_turn4(i)-(s1+s3)
2617 C Derivatives in gamma(i+1)
2618 call transpose2(EUgder(1,1,i+2),e2tder(1,1))
2619 call matvec2(ae3(1,1),Ub2der(1,i+2),auxvec(1))
2620 s2=scalar2(b1(1,iti1),auxvec(1))
2621 call matmat2(ae3(1,1),e2tder(1,1),auxmat(1,1))
2622 call matmat2(auxmat(1,1),e1t(1,1),pizda(1,1))
2623 s3=0.5d0*(pizda(1,1)+pizda(2,2))
2624 gel_loc_turn4(i+1)=gel_loc_turn4(i+1)-(s2+s3)
2625 C Derivatives in gamma(i+2)
2626 call transpose2(EUgder(1,1,i+3),e3tder(1,1))
2627 call matvec2(e1a(1,1),Ub2der(1,i+3),auxvec(1))
2628 s1=scalar2(b1(1,iti2),auxvec(1))
2629 call matmat2(a_temp(1,1),e3tder(1,1),auxmat(1,1))
2630 call matvec2(auxmat(1,1),Ub2(1,i+2),auxvec(1))
2631 s2=scalar2(b1(1,iti1),auxvec(1))
2632 call matmat2(auxmat(1,1),e2t(1,1),auxmat(1,1))
2633 call matmat2(auxmat(1,1),e1t(1,1),pizda(1,1))
2634 s3=0.5d0*(pizda(1,1)+pizda(2,2))
2635 gel_loc_turn4(i+2)=gel_loc_turn4(i+2)-(s1+s2+s3)
2636 C Cartesian derivatives
2637 C Derivatives of this turn contributions in DC(i+2)
2638 if (j.lt.nres-1) then
2640 a_temp(1,1)=agg(l,1)
2641 a_temp(1,2)=agg(l,2)
2642 a_temp(2,1)=agg(l,3)
2643 a_temp(2,2)=agg(l,4)
2644 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
2645 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
2646 s1=scalar2(b1(1,iti2),auxvec(1))
2647 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
2648 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
2649 s2=scalar2(b1(1,iti1),auxvec(1))
2650 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
2651 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
2652 s3=0.5d0*(pizda(1,1)+pizda(2,2))
2654 gcorr4_turn(l,i+2)=gcorr4_turn(l,i+2)-(s1+s2+s3)
2657 C Remaining derivatives of this turn contribution
2659 a_temp(1,1)=aggi(l,1)
2660 a_temp(1,2)=aggi(l,2)
2661 a_temp(2,1)=aggi(l,3)
2662 a_temp(2,2)=aggi(l,4)
2663 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
2664 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
2665 s1=scalar2(b1(1,iti2),auxvec(1))
2666 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
2667 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
2668 s2=scalar2(b1(1,iti1),auxvec(1))
2669 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
2670 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
2671 s3=0.5d0*(pizda(1,1)+pizda(2,2))
2672 gcorr4_turn(l,i)=gcorr4_turn(l,i)-(s1+s2+s3)
2673 a_temp(1,1)=aggi1(l,1)
2674 a_temp(1,2)=aggi1(l,2)
2675 a_temp(2,1)=aggi1(l,3)
2676 a_temp(2,2)=aggi1(l,4)
2677 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
2678 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
2679 s1=scalar2(b1(1,iti2),auxvec(1))
2680 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
2681 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
2682 s2=scalar2(b1(1,iti1),auxvec(1))
2683 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
2684 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
2685 s3=0.5d0*(pizda(1,1)+pizda(2,2))
2686 gcorr4_turn(l,i+1)=gcorr4_turn(l,i+1)-(s1+s2+s3)
2687 a_temp(1,1)=aggj(l,1)
2688 a_temp(1,2)=aggj(l,2)
2689 a_temp(2,1)=aggj(l,3)
2690 a_temp(2,2)=aggj(l,4)
2691 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
2692 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
2693 s1=scalar2(b1(1,iti2),auxvec(1))
2694 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
2695 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
2696 s2=scalar2(b1(1,iti1),auxvec(1))
2697 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
2698 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
2699 s3=0.5d0*(pizda(1,1)+pizda(2,2))
2700 gcorr4_turn(l,j)=gcorr4_turn(l,j)-(s1+s2+s3)
2701 a_temp(1,1)=aggj1(l,1)
2702 a_temp(1,2)=aggj1(l,2)
2703 a_temp(2,1)=aggj1(l,3)
2704 a_temp(2,2)=aggj1(l,4)
2705 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
2706 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
2707 s1=scalar2(b1(1,iti2),auxvec(1))
2708 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
2709 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
2710 s2=scalar2(b1(1,iti1),auxvec(1))
2711 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
2712 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
2713 s3=0.5d0*(pizda(1,1)+pizda(2,2))
2714 gcorr4_turn(l,j1)=gcorr4_turn(l,j1)-(s1+s2+s3)
2720 C-----------------------------------------------------------------------------
2721 subroutine vecpr(u,v,w)
2722 implicit real*8(a-h,o-z)
2723 dimension u(3),v(3),w(3)
2724 w(1)=u(2)*v(3)-u(3)*v(2)
2725 w(2)=-u(1)*v(3)+u(3)*v(1)
2726 w(3)=u(1)*v(2)-u(2)*v(1)
2729 C-----------------------------------------------------------------------------
2730 subroutine unormderiv(u,ugrad,unorm,ungrad)
2731 C This subroutine computes the derivatives of a normalized vector u, given
2732 C the derivatives computed without normalization conditions, ugrad. Returns
2735 double precision u(3),ugrad(3,3),unorm,ungrad(3,3)
2736 double precision vec(3)
2737 double precision scalar
2739 c write (2,*) 'ugrad',ugrad
2742 vec(i)=scalar(ugrad(1,i),u(1))
2744 c write (2,*) 'vec',vec
2747 ungrad(j,i)=(ugrad(j,i)-u(j)*vec(i))*unorm
2750 c write (2,*) 'ungrad',ungrad
2753 C-----------------------------------------------------------------------------
2754 subroutine escp(evdw2,evdw2_14)
2756 C This subroutine calculates the excluded-volume interaction energy between
2757 C peptide-group centers and side chains and its gradient in virtual-bond and
2758 C side-chain vectors.
2760 implicit real*8 (a-h,o-z)
2761 include 'DIMENSIONS'
2762 include 'sizesclu.dat'
2763 include 'COMMON.GEO'
2764 include 'COMMON.VAR'
2765 include 'COMMON.LOCAL'
2766 include 'COMMON.CHAIN'
2767 include 'COMMON.DERIV'
2768 include 'COMMON.INTERACT'
2769 include 'COMMON.FFIELD'
2770 include 'COMMON.IOUNITS'
2774 cd print '(a)','Enter ESCP'
2775 c write (iout,*) 'iatscp_s=',iatscp_s,' iatscp_e=',iatscp_e,
2776 c & ' scal14',scal14
2777 do i=iatscp_s,iatscp_e
2779 c write (iout,*) "i",i," iteli",iteli," nscp_gr",nscp_gr(i),
2780 c & " iscp",(iscpstart(i,j),iscpend(i,j),j=1,nscp_gr(i))
2781 if (iteli.eq.0) goto 1225
2782 xi=0.5D0*(c(1,i)+c(1,i+1))
2783 yi=0.5D0*(c(2,i)+c(2,i+1))
2784 zi=0.5D0*(c(3,i)+c(3,i+1))
2786 do iint=1,nscp_gr(i)
2788 do j=iscpstart(i,iint),iscpend(i,iint)
2790 C Uncomment following three lines for SC-p interactions
2794 C Uncomment following three lines for Ca-p interactions
2798 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
2800 e1=fac*fac*aad(itypj,iteli)
2801 e2=fac*bad(itypj,iteli)
2802 if (iabs(j-i) .le. 2) then
2805 evdw2_14=evdw2_14+e1+e2
2808 c write (iout,*) i,j,evdwij
2812 C Calculate contributions to the gradient in the virtual-bond and SC vectors.
2814 fac=-(evdwij+e1)*rrij
2819 cd write (iout,*) 'j<i'
2820 C Uncomment following three lines for SC-p interactions
2822 c gradx_scp(k,j)=gradx_scp(k,j)+ggg(k)
2825 cd write (iout,*) 'j>i'
2828 C Uncomment following line for SC-p interactions
2829 c gradx_scp(k,j)=gradx_scp(k,j)-ggg(k)
2833 gvdwc_scp(k,i)=gvdwc_scp(k,i)-0.5D0*ggg(k)
2837 cd write (iout,*) 'i=',i,' j=',j,' kstart=',kstart,' kend=',kend
2838 cd write (iout,*) ggg(1),ggg(2),ggg(3)
2841 gvdwc_scp(l,k)=gvdwc_scp(l,k)-ggg(l)
2851 gvdwc_scp(j,i)=expon*gvdwc_scp(j,i)
2852 gradx_scp(j,i)=expon*gradx_scp(j,i)
2855 C******************************************************************************
2859 C To save time the factor EXPON has been extracted from ALL components
2860 C of GVDWC and GRADX. Remember to multiply them by this factor before further
2863 C******************************************************************************
2866 C--------------------------------------------------------------------------
2867 subroutine edis(ehpb)
2869 C Evaluate bridge-strain energy and its gradient in virtual-bond and SC vectors.
2871 implicit real*8 (a-h,o-z)
2872 include 'DIMENSIONS'
2873 include 'COMMON.SBRIDGE'
2874 include 'COMMON.CHAIN'
2875 include 'COMMON.DERIV'
2876 include 'COMMON.VAR'
2877 include 'COMMON.INTERACT'
2878 include 'COMMON.IOUNITS'
2881 cd write(iout,*)'edis: nhpb=',nhpb,' fbr=',fbr
2882 cd write(iout,*)'link_start=',link_start,' link_end=',link_end
2883 if (link_end.eq.0) return
2884 do i=link_start,link_end
2885 C If ihpb(i) and jhpb(i) > NRES, this is a SC-SC distance, otherwise a
2886 C CA-CA distance used in regularization of structure.
2889 C iii and jjj point to the residues for which the distance is assigned.
2890 if (ii.gt.nres) then
2897 c write (iout,*) "i",i," ii",ii," iii",iii," jj",jj," jjj",jjj,
2898 c & dhpb(i),dhpb1(i),forcon(i)
2899 C 24/11/03 AL: SS bridges handled separately because of introducing a specific
2900 C distance and angle dependent SS bond potential.
2901 if (.not.dyn_ss .and. i.le.nss) then
2902 C 15/02/13 CC dynamic SSbond - additional check
2903 if (ii.gt.nres .and. itype(iii).eq.1 .and. itype(jjj).eq.1) then
2904 call ssbond_ene(iii,jjj,eij)
2906 cd write (iout,*) "eij",eij
2908 else if (ii.gt.nres .and. jj.gt.nres) then
2909 c Restraints from contact prediction
2911 if (dhpb1(i).gt.0.0d0) then
2912 ehpb=ehpb+2*forcon(i)*gnmr1(dd,dhpb(i),dhpb1(i))
2913 fac=forcon(i)*gnmr1prim(dd,dhpb(i),dhpb1(i))/dd
2914 c write (iout,*) "beta nmr",
2915 c & dd,2*forcon(i)*gnmr1(dd,dhpb(i),dhpb1(i))
2919 C Get the force constant corresponding to this distance.
2921 C Calculate the contribution to energy.
2922 ehpb=ehpb+waga*rdis*rdis
2923 c write (iout,*) "beta reg",dd,waga*rdis*rdis
2925 C Evaluate gradient.
2930 ggg(j)=fac*(c(j,jj)-c(j,ii))
2933 ghpbx(j,iii)=ghpbx(j,iii)-ggg(j)
2934 ghpbx(j,jjj)=ghpbx(j,jjj)+ggg(j)
2937 ghpbc(k,jjj)=ghpbc(k,jjj)+ggg(k)
2938 ghpbc(k,iii)=ghpbc(k,iii)-ggg(k)
2941 C Calculate the distance between the two points and its difference from the
2944 if (dhpb1(i).gt.0.0d0) then
2945 ehpb=ehpb+2*forcon(i)*gnmr1(dd,dhpb(i),dhpb1(i))
2946 fac=forcon(i)*gnmr1prim(dd,dhpb(i),dhpb1(i))/dd
2947 c write (iout,*) "alph nmr",
2948 c & dd,2*forcon(i)*gnmr1(dd,dhpb(i),dhpb1(i))
2951 C Get the force constant corresponding to this distance.
2953 C Calculate the contribution to energy.
2954 ehpb=ehpb+waga*rdis*rdis
2955 c write (iout,*) "alpha reg",dd,waga*rdis*rdis
2957 C Evaluate gradient.
2961 cd print *,'i=',i,' ii=',ii,' jj=',jj,' dhpb=',dhpb(i),' dd=',dd,
2962 cd & ' waga=',waga,' fac=',fac
2964 ggg(j)=fac*(c(j,jj)-c(j,ii))
2966 cd print '(i3,3(1pe14.5))',i,(ggg(j),j=1,3)
2967 C If this is a SC-SC distance, we need to calculate the contributions to the
2968 C Cartesian gradient in the SC vectors (ghpbx).
2971 ghpbx(j,iii)=ghpbx(j,iii)-ggg(j)
2972 ghpbx(j,jjj)=ghpbx(j,jjj)+ggg(j)
2976 ghpbc(k,jjj)=ghpbc(k,jjj)+ggg(k)
2977 ghpbc(k,iii)=ghpbc(k,iii)-ggg(k)
2984 C--------------------------------------------------------------------------
2985 subroutine ssbond_ene(i,j,eij)
2987 C Calculate the distance and angle dependent SS-bond potential energy
2988 C using a free-energy function derived based on RHF/6-31G** ab initio
2989 C calculations of diethyl disulfide.
2991 C A. Liwo and U. Kozlowska, 11/24/03
2993 implicit real*8 (a-h,o-z)
2994 include 'DIMENSIONS'
2995 include 'sizesclu.dat'
2996 include 'COMMON.SBRIDGE'
2997 include 'COMMON.CHAIN'
2998 include 'COMMON.DERIV'
2999 include 'COMMON.LOCAL'
3000 include 'COMMON.INTERACT'
3001 include 'COMMON.VAR'
3002 include 'COMMON.IOUNITS'
3003 double precision erij(3),dcosom1(3),dcosom2(3),gg(3)
3008 dxi=dc_norm(1,nres+i)
3009 dyi=dc_norm(2,nres+i)
3010 dzi=dc_norm(3,nres+i)
3011 dsci_inv=dsc_inv(itypi)
3013 dscj_inv=dsc_inv(itypj)
3017 dxj=dc_norm(1,nres+j)
3018 dyj=dc_norm(2,nres+j)
3019 dzj=dc_norm(3,nres+j)
3020 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
3025 om1=dxi*erij(1)+dyi*erij(2)+dzi*erij(3)
3026 om2=dxj*erij(1)+dyj*erij(2)+dzj*erij(3)
3027 om12=dxi*dxj+dyi*dyj+dzi*dzj
3029 dcosom1(k)=rij*(dc_norm(k,nres+i)-om1*erij(k))
3030 dcosom2(k)=rij*(dc_norm(k,nres+j)-om2*erij(k))
3036 deltat12=om2-om1+2.0d0
3038 eij=akcm*deltad*deltad+akth*(deltat1*deltat1+deltat2*deltat2)
3039 & +akct*deltad*deltat12+ebr
3040 & +v1ss*cosphi+v2ss*cosphi*cosphi+v3ss*cosphi*cosphi*cosphi
3041 c write(iout,*) i,j,"rij",rij,"d0cm",d0cm," akcm",akcm," akth",akth,
3042 c & " akct",akct," deltad",deltad," deltat",deltat1,deltat2,
3043 c & " deltat12",deltat12," eij",eij
3044 ed=2*akcm*deltad+akct*deltat12
3046 pom2=v1ss+2*v2ss*cosphi+3*v3ss*cosphi*cosphi
3047 eom1=-2*akth*deltat1-pom1-om2*pom2
3048 eom2= 2*akth*deltat2+pom1-om1*pom2
3051 gg(k)=ed*erij(k)+eom1*dcosom1(k)+eom2*dcosom2(k)
3054 ghpbx(k,i)=ghpbx(k,i)-gg(k)
3055 & +(eom12*dc_norm(k,nres+j)+eom1*erij(k))*dsci_inv
3056 ghpbx(k,j)=ghpbx(k,j)+gg(k)
3057 & +(eom12*dc_norm(k,nres+i)+eom2*erij(k))*dscj_inv
3060 C Calculate the components of the gradient in DC and X
3064 ghpbc(l,k)=ghpbc(l,k)+gg(l)
3070 C--------------------------------------------------------------------------
3073 c LICZENIE WIEZOW Z ROWNANIA ENERGII MODELLERA
3074 subroutine e_modeller(ehomology_constr)
3075 implicit real*8 (a-h,o-z)
3077 include 'DIMENSIONS'
3079 integer nnn, i, j, k, ki, irec, l
3080 integer katy, odleglosci, test7
3081 real*8 odleg, odleg2, odleg3, kat, kat2, kat3, gdih(max_template)
3082 real*8 distance(max_template),distancek(max_template),
3083 & min_odl,godl(max_template),dih_diff(max_template)
3086 c FP - 30/10/2014 Temporary specifications for homology restraints
3088 double precision utheta_i,gutheta_i,sum_gtheta,sum_sgtheta,
3090 double precision, dimension (maxres) :: guscdiff,usc_diff
3091 double precision, dimension (max_template) ::
3092 & gtheta,dscdiff,uscdiffk,guscdiff2,guscdiff3,
3095 include 'COMMON.SBRIDGE'
3096 include 'COMMON.CHAIN'
3097 include 'COMMON.GEO'
3098 include 'COMMON.DERIV'
3099 include 'COMMON.LOCAL'
3100 include 'COMMON.INTERACT'
3101 include 'COMMON.VAR'
3102 include 'COMMON.IOUNITS'
3103 include 'COMMON.CONTROL'
3104 include 'COMMON.HOMRESTR'
3106 include 'COMMON.SETUP'
3107 include 'COMMON.NAMES'
3110 distancek(i)=9999999.9
3115 c Pseudo-energy and gradient from homology restraints (MODELLER-like
3117 C AL 5/2/14 - Introduce list of restraints
3118 c write(iout,*) "waga_theta",waga_theta,"waga_d",waga_d
3120 write(iout,*) "------- dist restrs start -------"
3121 write (iout,*) "link_start_homo",link_start_homo,
3122 & " link_end_homo",link_end_homo
3124 do ii = link_start_homo,link_end_homo
3128 c write (iout,*) "dij(",i,j,") =",dij
3129 do k=1,constr_homology
3130 distance(k)=odl(k,ii)-dij
3131 c write (iout,*) "distance(",k,") =",distance(k)
3133 c For Gaussian-type Urestr
3135 distancek(k)=0.5d0*distance(k)**2*sigma_odl(k,ii) ! waga_dist rmvd from Gaussian argument
3136 c write (iout,*) "sigma_odl(",k,ii,") =",sigma_odl(k,ii)
3137 c write (iout,*) "distancek(",k,") =",distancek(k)
3138 c distancek(k)=0.5d0*waga_dist*distance(k)**2*sigma_odl(k,ii)
3140 c For Lorentzian-type Urestr
3142 if (waga_dist.lt.0.0d0) then
3143 sigma_odlir(k,ii)=dsqrt(1/sigma_odl(k,ii))
3144 distancek(k)=distance(k)**2/(sigma_odlir(k,ii)*
3145 & (distance(k)**2+sigma_odlir(k,ii)**2))
3149 min_odl=minval(distancek)
3150 c write (iout,* )"min_odl",min_odl
3152 write (iout,*) "ij dij",i,j,dij
3153 write (iout,*) "distance",(distance(k),k=1,constr_homology)
3154 write (iout,*) "distancek",(distancek(k),k=1,constr_homology)
3155 write (iout,* )"min_odl",min_odl
3158 do k=1,constr_homology
3159 c Nie wiem po co to liczycie jeszcze raz!
3160 c odleg3=-waga_dist(iset)*((distance(i,j,k)**2)/
3161 c & (2*(sigma_odl(i,j,k))**2))
3162 if (waga_dist.ge.0.0d0) then
3164 c For Gaussian-type Urestr
3166 godl(k)=dexp(-distancek(k)+min_odl)
3167 odleg2=odleg2+godl(k)
3169 c For Lorentzian-type Urestr
3172 odleg2=odleg2+distancek(k)
3175 ccc write(iout,779) i,j,k, "odleg2=",odleg2, "odleg3=", odleg3,
3176 ccc & "dEXP(odleg3)=", dEXP(odleg3),"distance(i,j,k)^2=",
3177 ccc & distance(i,j,k)**2, "dist(i+1,j+1)=", dist(i+1,j+1),
3178 ccc & "sigma_odl(i,j,k)=", sigma_odl(i,j,k)
3181 c write (iout,*) "godl",(godl(k),k=1,constr_homology) ! exponents
3182 c write (iout,*) "ii i j",ii,i,j," odleg2",odleg2 ! sum of exps
3184 write (iout,*) "godl",(godl(k),k=1,constr_homology) ! exponents
3185 write (iout,*) "ii i j",ii,i,j," odleg2",odleg2 ! sum of exps
3187 if (waga_dist.ge.0.0d0) then
3189 c For Gaussian-type Urestr
3191 odleg=odleg-dLOG(odleg2/constr_homology)+min_odl
3193 c For Lorentzian-type Urestr
3196 odleg=odleg+odleg2/constr_homology
3200 c write (iout,*) "odleg",odleg ! sum of -ln-s
3203 c For Gaussian-type Urestr
3205 if (waga_dist.ge.0.0d0) sum_godl=odleg2
3207 do k=1,constr_homology
3208 c godl=dexp(((-(distance(i,j,k)**2)/(2*(sigma_odl(i,j,k))**2))
3209 c & *waga_dist)+min_odl
3210 c sgodl=-godl(k)*distance(k)*sigma_odl(k,ii)*waga_dist
3212 if (waga_dist.ge.0.0d0) then
3213 c For Gaussian-type Urestr
3215 sgodl=-godl(k)*distance(k)*sigma_odl(k,ii) ! waga_dist rmvd
3217 c For Lorentzian-type Urestr
3220 sgodl=-2*sigma_odlir(k,ii)*(distance(k)/(distance(k)**2+
3221 & sigma_odlir(k,ii)**2)**2)
3223 sum_sgodl=sum_sgodl+sgodl
3225 c sgodl2=sgodl2+sgodl
3226 c write(iout,*) i, j, k, distance(i,j,k), "W GRADIENCIE1"
3227 c write(iout,*) "constr_homology=",constr_homology
3228 c write(iout,*) i, j, k, "TEST K"
3230 if (waga_dist.ge.0.0d0) then
3232 c For Gaussian-type Urestr
3234 grad_odl3=waga_homology(iset)*waga_dist
3235 & *sum_sgodl/(sum_godl*dij)
3237 c For Lorentzian-type Urestr
3240 c Original grad expr modified by analogy w Gaussian-type Urestr grad
3241 c grad_odl3=-waga_homology(iset)*waga_dist*sum_sgodl
3242 grad_odl3=-waga_homology(iset)*waga_dist*
3243 & sum_sgodl/(constr_homology*dij)
3246 c grad_odl3=sum_sgodl/(sum_godl*dij)
3249 c write(iout,*) i, j, k, distance(i,j,k), "W GRADIENCIE2"
3250 c write(iout,*) (distance(i,j,k)**2), (2*(sigma_odl(i,j,k))**2),
3251 c & (-(distance(i,j,k)**2)/(2*(sigma_odl(i,j,k))**2))
3253 ccc write(iout,*) godl, sgodl, grad_odl3
3255 c grad_odl=grad_odl+grad_odl3
3258 ggodl=grad_odl3*(c(jik,i)-c(jik,j))
3259 ccc write(iout,*) c(jik,i+1), c(jik,j+1), (c(jik,i+1)-c(jik,j+1))
3260 ccc write(iout,746) "GRAD_ODL_1", i, j, jik, ggodl,
3261 ccc & ghpbc(jik,i+1), ghpbc(jik,j+1)
3262 ghpbc(jik,i)=ghpbc(jik,i)+ggodl
3263 ghpbc(jik,j)=ghpbc(jik,j)-ggodl
3264 ccc write(iout,746) "GRAD_ODL_2", i, j, jik, ggodl,
3265 ccc & ghpbc(jik,i+1), ghpbc(jik,j+1)
3266 c if (i.eq.25.and.j.eq.27) then
3267 c write(iout,*) "jik",jik,"i",i,"j",j
3268 c write(iout,*) "sum_sgodl",sum_sgodl,"sgodl",sgodl
3269 c write(iout,*) "grad_odl3",grad_odl3
3270 c write(iout,*) "c(",jik,i,")",c(jik,i),"c(",jik,j,")",c(jik,j)
3271 c write(iout,*) "ggodl",ggodl
3272 c write(iout,*) "ghpbc(",jik,i,")",
3273 c & ghpbc(jik,i),"ghpbc(",jik,j,")",
3278 ccc write(iout,778)"TEST: odleg2=", odleg2, "DLOG(odleg2)=",
3279 ccc & dLOG(odleg2),"-odleg=", -odleg
3281 enddo ! ii-loop for dist
3283 write(iout,*) "------- dist restrs end -------"
3284 c if (waga_angle.eq.1.0d0 .or. waga_theta.eq.1.0d0 .or.
3285 c & waga_d.eq.1.0d0) call sum_gradient
3287 c Pseudo-energy and gradient from dihedral-angle restraints from
3288 c homology templates
3289 c write (iout,*) "End of distance loop"
3292 c write (iout,*) idihconstr_start_homo,idihconstr_end_homo
3294 write(iout,*) "------- dih restrs start -------"
3295 do i=idihconstr_start_homo,idihconstr_end_homo
3296 write (iout,*) "gloc_init(",i,icg,")",gloc(i,icg)
3299 do i=idihconstr_start_homo,idihconstr_end_homo
3301 c betai=beta(i,i+1,i+2,i+3)
3303 c write (iout,*) "betai =",betai
3304 do k=1,constr_homology
3305 dih_diff(k)=pinorm(dih(k,i)-betai)
3306 c write (iout,*) "dih_diff(",k,") =",dih_diff(k)
3307 c if (dih_diff(i,k).gt.3.14159) dih_diff(i,k)=
3308 c & -(6.28318-dih_diff(i,k))
3309 c if (dih_diff(i,k).lt.-3.14159) dih_diff(i,k)=
3310 c & 6.28318+dih_diff(i,k)
3312 kat3=-0.5d0*dih_diff(k)**2*sigma_dih(k,i) ! waga_angle rmvd from Gaussian argument
3313 c kat3=-0.5d0*waga_angle*dih_diff(k)**2*sigma_dih(k,i)
3316 c write(iout,*) "kat2=", kat2, "exp(kat3)=", exp(kat3)
3319 c write (iout,*) "gdih",(gdih(k),k=1,constr_homology) ! exps
3320 c write (iout,*) "i",i," betai",betai," kat2",kat2 ! sum of exps
3322 write (iout,*) "i",i," betai",betai," kat2",kat2
3323 write (iout,*) "gdih",(gdih(k),k=1,constr_homology)
3325 if (kat2.le.1.0d-14) cycle
3326 kat=kat-dLOG(kat2/constr_homology)
3327 c write (iout,*) "kat",kat ! sum of -ln-s
3329 ccc write(iout,778)"TEST: kat2=", kat2, "DLOG(kat2)=",
3330 ccc & dLOG(kat2), "-kat=", -kat
3333 c ----------------------------------------------------------------------
3335 c ----------------------------------------------------------------------
3339 do k=1,constr_homology
3340 sgdih=-gdih(k)*dih_diff(k)*sigma_dih(k,i) ! waga_angle rmvd
3341 c sgdih=-gdih(k)*dih_diff(k)*sigma_dih(k,i)*waga_angle
3342 sum_sgdih=sum_sgdih+sgdih
3344 c grad_dih3=sum_sgdih/sum_gdih
3345 grad_dih3=waga_homology(iset)*waga_angle*sum_sgdih/sum_gdih
3347 c write(iout,*)i,k,gdih,sgdih,beta(i+1,i+2,i+3,i+4),grad_dih3
3348 ccc write(iout,747) "GRAD_KAT_1", i, nphi, icg, grad_dih3,
3349 ccc & gloc(nphi+i-3,icg)
3350 gloc(i,icg)=gloc(i,icg)+grad_dih3
3352 c write(iout,*) "i",i,"icg",icg,"gloc(",i,icg,")",gloc(i,icg)
3354 ccc write(iout,747) "GRAD_KAT_2", i, nphi, icg, grad_dih3,
3355 ccc & gloc(nphi+i-3,icg)
3357 enddo ! i-loop for dih
3359 write(iout,*) "------- dih restrs end -------"
3362 c Pseudo-energy and gradient for theta angle restraints from
3363 c homology templates
3364 c FP 01/15 - inserted from econstr_local_test.F, loop structure
3368 c For constr_homology reference structures (FP)
3370 c Uconst_back_tot=0.0d0
3373 c Econstr_back legacy
3376 c do i=ithet_start,ithet_end
3379 c do i=loc_start,loc_end
3382 duscdiffx(j,i)=0.0d0
3388 c write (iout,*) "ithet_start =",ithet_start,"ithet_end =",ithet_end
3389 c write (iout,*) "waga_theta",waga_theta
3390 if (waga_theta.gt.0.0d0) then
3392 write (iout,*) "usampl",usampl
3393 write(iout,*) "------- theta restrs start -------"
3394 c do i=ithet_start,ithet_end
3395 c write (iout,*) "gloc_init(",nphi+i,icg,")",gloc(nphi+i,icg)
3398 c write (iout,*) "maxres",maxres,"nres",nres
3400 do i=ithet_start,ithet_end
3403 c ii = ifrag_back(2,i,iset)-ifrag_back(1,i,iset)
3405 c Deviation of theta angles wrt constr_homology ref structures
3407 utheta_i=0.0d0 ! argument of Gaussian for single k
3408 gutheta_i=0.0d0 ! Sum of Gaussians over constr_homology ref structures
3409 c do j=ifrag_back(1,i,iset)+2,ifrag_back(2,i,iset) ! original loop
3410 c over residues in a fragment
3411 c write (iout,*) "theta(",i,")=",theta(i)
3412 do k=1,constr_homology
3414 c dtheta_i=theta(j)-thetaref(j,iref)
3415 c dtheta_i=thetaref(k,i)-theta(i) ! original form without indexing
3416 theta_diff(k)=thetatpl(k,i)-theta(i)
3418 utheta_i=-0.5d0*theta_diff(k)**2*sigma_theta(k,i) ! waga_theta rmvd from Gaussian argument
3419 c utheta_i=-0.5d0*waga_theta*theta_diff(k)**2*sigma_theta(k,i) ! waga_theta?
3420 gtheta(k)=dexp(utheta_i) ! + min_utheta_i?
3421 gutheta_i=gutheta_i+dexp(utheta_i) ! Sum of Gaussians (pk)
3422 c Gradient for single Gaussian restraint in subr Econstr_back
3423 c dutheta(j-2)=dutheta(j-2)+wfrag_back(1,i,iset)*dtheta_i/(ii-1)
3426 c write (iout,*) "gtheta",(gtheta(k),k=1,constr_homology) ! exps
3427 c write (iout,*) "i",i," gutheta_i",gutheta_i ! sum of exps
3431 c Gradient for multiple Gaussian restraint
3432 sum_gtheta=gutheta_i
3434 do k=1,constr_homology
3435 c New generalized expr for multiple Gaussian from Econstr_back
3436 sgtheta=-gtheta(k)*theta_diff(k)*sigma_theta(k,i) ! waga_theta rmvd
3438 c sgtheta=-gtheta(k)*theta_diff(k)*sigma_theta(k,i)*waga_theta ! right functional form?
3439 sum_sgtheta=sum_sgtheta+sgtheta ! cum variable
3442 c Final value of gradient using same var as in Econstr_back
3443 dutheta(i-2)=sum_sgtheta/sum_gtheta*waga_theta
3444 & *waga_homology(iset)
3445 c dutheta(i)=sum_sgtheta/sum_gtheta
3447 c Uconst_back=Uconst_back+waga_theta*utheta(i) ! waga_theta added as weight
3449 Eval=Eval-dLOG(gutheta_i/constr_homology)
3450 c write (iout,*) "utheta(",i,")=",utheta(i) ! -ln of sum of exps
3451 c write (iout,*) "Uconst_back",Uconst_back ! sum of -ln-s
3452 c Uconst_back=Uconst_back+utheta(i)
3453 enddo ! (i-loop for theta)
3455 write(iout,*) "------- theta restrs end -------"
3459 c Deviation of local SC geometry
3461 c Separation of two i-loops (instructed by AL - 11/3/2014)
3463 c write (iout,*) "loc_start =",loc_start,"loc_end =",loc_end
3464 c write (iout,*) "waga_d",waga_d
3467 write(iout,*) "------- SC restrs start -------"
3468 write (iout,*) "Initial duscdiff,duscdiffx"
3469 do i=loc_start,loc_end
3470 write (iout,*) i,(duscdiff(jik,i),jik=1,3),
3471 & (duscdiffx(jik,i),jik=1,3)
3474 do i=loc_start,loc_end
3475 usc_diff_i=0.0d0 ! argument of Gaussian for single k
3476 guscdiff(i)=0.0d0 ! Sum of Gaussians over constr_homology ref structures
3477 c do j=ifrag_back(1,i,iset)+1,ifrag_back(2,i,iset)-1 ! Econstr_back legacy
3478 c write(iout,*) "xxtab, yytab, zztab"
3479 c write(iout,'(i5,3f8.2)') i,xxtab(i),yytab(i),zztab(i)
3480 do k=1,constr_homology
3482 dxx=-xxtpl(k,i)+xxtab(i) ! Diff b/w x component of ith SC vector in model and kth ref str?
3483 c Original sign inverted for calc of gradients (s. Econstr_back)
3484 dyy=-yytpl(k,i)+yytab(i) ! ibid y
3485 dzz=-zztpl(k,i)+zztab(i) ! ibid z
3486 c write(iout,*) "dxx, dyy, dzz"
3487 c write(iout,'(2i5,3f8.2)') k,i,dxx,dyy,dzz
3489 usc_diff_i=-0.5d0*(dxx**2+dyy**2+dzz**2)*sigma_d(k,i) ! waga_d rmvd from Gaussian argument
3490 c usc_diff(i)=-0.5d0*waga_d*(dxx**2+dyy**2+dzz**2)*sigma_d(k,i) ! waga_d?
3491 c uscdiffk(k)=usc_diff(i)
3492 guscdiff2(k)=dexp(usc_diff_i) ! without min_scdiff
3493 guscdiff(i)=guscdiff(i)+dexp(usc_diff_i) !Sum of Gaussians (pk)
3494 c write (iout,'(i5,6f10.5)') j,xxtab(j),yytab(j),zztab(j),
3495 c & xxref(j),yyref(j),zzref(j)
3500 c Generalized expression for multiple Gaussian acc to that for a single
3501 c Gaussian in Econstr_back as instructed by AL (FP - 03/11/2014)
3503 c Original implementation
3504 c sum_guscdiff=guscdiff(i)
3506 c sum_sguscdiff=0.0d0
3507 c do k=1,constr_homology
3508 c sguscdiff=-guscdiff2(k)*dscdiff(k)*sigma_d(k,i)*waga_d !waga_d?
3509 c sguscdiff=-guscdiff3(k)*dscdiff(k)*sigma_d(k,i)*waga_d ! w min_uscdiff
3510 c sum_sguscdiff=sum_sguscdiff+sguscdiff
3513 c Implementation of new expressions for gradient (Jan. 2015)
3515 c grad_uscdiff=sum_sguscdiff/(sum_guscdiff*dtab) !?
3517 do k=1,constr_homology
3519 c New calculation of dxx, dyy, and dzz corrected by AL (07/11), was missing and wrong
3520 c before. Now the drivatives should be correct
3522 dxx=-xxtpl(k,i)+xxtab(i) ! Diff b/w x component of ith SC vector in model and kth ref str?
3523 c Original sign inverted for calc of gradients (s. Econstr_back)
3524 dyy=-yytpl(k,i)+yytab(i) ! ibid y
3525 dzz=-zztpl(k,i)+zztab(i) ! ibid z
3527 c New implementation
3529 sum_guscdiff=guscdiff2(k)*!(dsqrt(dxx*dxx+dyy*dyy+dzz*dzz))* -> wrong!
3530 & sigma_d(k,i) ! for the grad wrt r'
3531 c sum_sguscdiff=sum_sguscdiff+sum_guscdiff
3534 c New implementation
3535 sum_guscdiff = waga_homology(iset)*waga_d*sum_guscdiff
3537 duscdiff(jik,i-1)=duscdiff(jik,i-1)+
3538 & sum_guscdiff*(dXX_C1tab(jik,i)*dxx+
3539 & dYY_C1tab(jik,i)*dyy+dZZ_C1tab(jik,i)*dzz)/guscdiff(i)
3540 duscdiff(jik,i)=duscdiff(jik,i)+
3541 & sum_guscdiff*(dXX_Ctab(jik,i)*dxx+
3542 & dYY_Ctab(jik,i)*dyy+dZZ_Ctab(jik,i)*dzz)/guscdiff(i)
3543 duscdiffx(jik,i)=duscdiffx(jik,i)+
3544 & sum_guscdiff*(dXX_XYZtab(jik,i)*dxx+
3545 & dYY_XYZtab(jik,i)*dyy+dZZ_XYZtab(jik,i)*dzz)/guscdiff(i)
3548 write(iout,*) "jik",jik,"i",i
3549 write(iout,*) "dxx, dyy, dzz"
3550 write(iout,'(2i5,3f8.2)') k,i,dxx,dyy,dzz
3551 write(iout,*) "guscdiff2(",k,")",guscdiff2(k)
3552 c write(iout,*) "sum_sguscdiff",sum_sguscdiff
3553 cc write(iout,*) "dXX_Ctab(",jik,i,")",dXX_Ctab(jik,i)
3554 c write(iout,*) "dYY_Ctab(",jik,i,")",dYY_Ctab(jik,i)
3555 c write(iout,*) "dZZ_Ctab(",jik,i,")",dZZ_Ctab(jik,i)
3556 c write(iout,*) "dXX_C1tab(",jik,i,")",dXX_C1tab(jik,i)
3557 c write(iout,*) "dYY_C1tab(",jik,i,")",dYY_C1tab(jik,i)
3558 c write(iout,*) "dZZ_C1tab(",jik,i,")",dZZ_C1tab(jik,i)
3559 c write(iout,*) "dXX_XYZtab(",jik,i,")",dXX_XYZtab(jik,i)
3560 c write(iout,*) "dYY_XYZtab(",jik,i,")",dYY_XYZtab(jik,i)
3561 c write(iout,*) "dZZ_XYZtab(",jik,i,")",dZZ_XYZtab(jik,i)
3562 c write(iout,*) "duscdiff(",jik,i-1,")",duscdiff(jik,i-1)
3563 c write(iout,*) "duscdiff(",jik,i,")",duscdiff(jik,i)
3564 c write(iout,*) "duscdiffx(",jik,i,")",duscdiffx(jik,i)
3571 c uscdiff(i)=-dLOG(guscdiff(i)/(ii-1)) ! Weighting by (ii-1) required?
3572 c usc_diff(i)=-dLOG(guscdiff(i)/constr_homology) ! + min_uscdiff ?
3574 c write (iout,*) i," uscdiff",uscdiff(i)
3576 c Put together deviations from local geometry
3578 c Uconst_back=Uconst_back+wfrag_back(1,i,iset)*utheta(i)+
3579 c & wfrag_back(3,i,iset)*uscdiff(i)
3580 Erot=Erot-dLOG(guscdiff(i)/constr_homology)
3581 c write (iout,*) "usc_diff(",i,")=",usc_diff(i) ! -ln of sum of exps
3582 c write (iout,*) "Uconst_back",Uconst_back ! cum sum of -ln-s
3583 c Uconst_back=Uconst_back+usc_diff(i)
3585 c Gradient of multiple Gaussian restraint (FP - 04/11/2014 - right?)
3587 c New implment: multiplied by sum_sguscdiff
3590 enddo ! (i-loop for dscdiff)
3595 write(iout,*) "------- SC restrs end -------"
3596 write (iout,*) "------ After SC loop in e_modeller ------"
3597 do i=loc_start,loc_end
3598 write (iout,*) "i",i," gradc",(gradc(j,i,icg),j=1,3)
3599 write (iout,*) "i",i," gradx",(gradx(j,i,icg),j=1,3)
3601 if (waga_theta.eq.1.0d0) then
3602 write (iout,*) "in e_modeller after SC restr end: dutheta"
3603 do i=ithet_start,ithet_end
3604 write (iout,*) i,dutheta(i)
3607 if (waga_d.eq.1.0d0) then
3608 write (iout,*) "e_modeller after SC loop: duscdiff/x"
3610 write (iout,*) i,(duscdiff(j,i),j=1,3)
3611 write (iout,*) i,(duscdiffx(j,i),j=1,3)
3616 c Total energy from homology restraints
3618 write (iout,*) "odleg",odleg," kat",kat
3619 write (iout,*) "odleg",odleg," kat",kat
3620 write (iout,*) "Eval",Eval," Erot",Erot
3621 write (iout,*) "waga_homology(",iset,")",waga_homology(iset)
3622 write (iout,*) "waga_dist ",waga_dist,"waga_angle ",waga_angle
3623 write (iout,*) "waga_theta ",waga_theta,"waga_d ",waga_d
3624 write (iout,*) "waga_homology(",iset,")",waga_homology(iset)
3627 c Addition of energy of theta angle and SC local geom over constr_homologs ref strs
3629 c ehomology_constr=odleg+kat
3631 c For Lorentzian-type Urestr
3634 if (waga_dist.ge.0.0d0) then
3636 c For Gaussian-type Urestr
3638 ehomology_constr=(waga_dist*odleg+waga_angle*kat+
3639 & waga_theta*Eval+waga_d*Erot)*waga_homology(iset)
3640 c write (iout,*) "ehomology_constr=",ehomology_constr
3643 c For Lorentzian-type Urestr
3645 ehomology_constr=(-waga_dist*odleg+waga_angle*kat+
3646 & waga_theta*Eval+waga_d*Erot)*waga_homology(iset)
3647 c write (iout,*) "ehomology_constr=",ehomology_constr
3649 c write (iout,*) "odleg",odleg," kat",kat," Eval",Eval," Erot",Erot
3650 c write (iout,*) "ehomology_constr",ehomology_constr
3651 c ehomology_constr=odleg+kat+Uconst_back
3654 748 format(a8,f12.3,a6,f12.3,a7,f12.3)
3655 747 format(a12,i4,i4,i4,f8.3,f8.3)
3656 746 format(a12,i4,i4,i4,f8.3,f8.3,f8.3)
3657 778 format(a7,1X,f10.3,1X,a4,1X,f10.3,1X,a5,1X,f10.3)
3658 779 format(i3,1X,i3,1X,i2,1X,a7,1X,f7.3,1X,a7,1X,f7.3,1X,a13,1X,
3659 & f7.3,1X,a17,1X,f9.3,1X,a10,1X,f8.3,1X,a10,1X,f8.3)
3661 C--------------------------------------------------------------------------
3662 subroutine ebond(estr)
3664 c Evaluate the energy of stretching of the CA-CA and CA-SC virtual bonds
3666 implicit real*8 (a-h,o-z)
3667 include 'DIMENSIONS'
3668 include 'COMMON.LOCAL'
3669 include 'COMMON.GEO'
3670 include 'COMMON.INTERACT'
3671 include 'COMMON.DERIV'
3672 include 'COMMON.VAR'
3673 include 'COMMON.CHAIN'
3674 include 'COMMON.IOUNITS'
3675 include 'COMMON.NAMES'
3676 include 'COMMON.FFIELD'
3677 include 'COMMON.CONTROL'
3678 double precision u(3),ud(3)
3681 diff = vbld(i)-vbldp0
3682 c write (iout,*) i,vbld(i),vbldp0,diff,AKP*diff*diff
3685 gradb(j,i-1)=AKP*diff*dc(j,i-1)/vbld(i)
3690 c 09/18/07 AL: multimodal bond potential based on AM1 CA-SC PMF's included
3697 diff=vbld(i+nres)-vbldsc0(1,iti)
3698 c write (iout,*) i,iti,vbld(i+nres),vbldsc0(1,iti),diff,
3699 c & AKSC(1,iti),AKSC(1,iti)*diff*diff
3700 estr=estr+0.5d0*AKSC(1,iti)*diff*diff
3702 gradbx(j,i)=AKSC(1,iti)*diff*dc(j,i+nres)/vbld(i+nres)
3706 diff=vbld(i+nres)-vbldsc0(j,iti)
3707 ud(j)=aksc(j,iti)*diff
3708 u(j)=abond0(j,iti)+0.5d0*ud(j)*diff
3722 uprod2=uprod2*u(k)*u(k)
3726 usumsqder=usumsqder+ud(j)*uprod2
3728 c write (iout,*) i,iti,vbld(i+nres),(vbldsc0(j,iti),
3729 c & AKSC(j,iti),abond0(j,iti),u(j),j=1,nbi)
3730 estr=estr+uprod/usum
3732 gradbx(j,i)=usumsqder/(usum*usum)*dc(j,i+nres)/vbld(i+nres)
3740 C--------------------------------------------------------------------------
3741 subroutine ebend(etheta)
3743 C Evaluate the virtual-bond-angle energy given the virtual-bond dihedral
3744 C angles gamma and its derivatives in consecutive thetas and gammas.
3746 implicit real*8 (a-h,o-z)
3747 include 'DIMENSIONS'
3748 include 'sizesclu.dat'
3749 include 'COMMON.LOCAL'
3750 include 'COMMON.GEO'
3751 include 'COMMON.INTERACT'
3752 include 'COMMON.DERIV'
3753 include 'COMMON.VAR'
3754 include 'COMMON.CHAIN'
3755 include 'COMMON.IOUNITS'
3756 include 'COMMON.NAMES'
3757 include 'COMMON.FFIELD'
3758 common /calcthet/ term1,term2,termm,diffak,ratak,
3759 & ak,aktc,termpre,termexp,sigc,sig0i,time11,time12,sigcsq,
3760 & delthe0,sig0inv,sigtc,sigsqtc,delthec,it
3761 double precision y(2),z(2)
3763 time11=dexp(-2*time)
3766 c write (iout,*) "nres",nres
3767 c write (*,'(a,i2)') 'EBEND ICG=',icg
3768 c write (iout,*) ithet_start,ithet_end
3769 do i=ithet_start,ithet_end
3770 C Zero the energy function and its derivative at 0 or pi.
3771 call splinthet(theta(i),0.5d0*delta,ss,ssd)
3773 c if (i.gt.ithet_start .and.
3774 c & (itel(i-1).eq.0 .or. itel(i-2).eq.0)) goto 1215
3775 c if (i.gt.3 .and. (i.le.4 .or. itel(i-3).ne.0)) then
3783 c if (i.lt.nres .and. itel(i).ne.0) then
3795 call proc_proc(phii,icrc)
3796 if (icrc.eq.1) phii=150.0
3810 call proc_proc(phii1,icrc)
3811 if (icrc.eq.1) phii1=150.0
3823 C Calculate the "mean" value of theta from the part of the distribution
3824 C dependent on the adjacent virtual-bond-valence angles (gamma1 & gamma2).
3825 C In following comments this theta will be referred to as t_c.
3826 thet_pred_mean=0.0d0
3830 thet_pred_mean=thet_pred_mean+athetk*y(k)+bthetk*z(k)
3832 c write (iout,*) "thet_pred_mean",thet_pred_mean
3833 dthett=thet_pred_mean*ssd
3834 thet_pred_mean=thet_pred_mean*ss+a0thet(it)
3835 c write (iout,*) "thet_pred_mean",thet_pred_mean
3836 C Derivatives of the "mean" values in gamma1 and gamma2.
3837 dthetg1=(-athet(1,it)*y(2)+athet(2,it)*y(1))*ss
3838 dthetg2=(-bthet(1,it)*z(2)+bthet(2,it)*z(1))*ss
3839 if (theta(i).gt.pi-delta) then
3840 call theteng(pi-delta,thet_pred_mean,theta0(it),f0,fprim0,
3842 call mixder(pi-delta,thet_pred_mean,theta0(it),fprim_tc0)
3843 call theteng(pi,thet_pred_mean,theta0(it),f1,fprim1,E_tc1)
3844 call spline1(theta(i),pi-delta,delta,f0,f1,fprim0,ethetai,
3846 call spline2(theta(i),pi-delta,delta,E_tc0,E_tc1,fprim_tc0,
3848 else if (theta(i).lt.delta) then
3849 call theteng(delta,thet_pred_mean,theta0(it),f0,fprim0,E_tc0)
3850 call theteng(0.0d0,thet_pred_mean,theta0(it),f1,fprim1,E_tc1)
3851 call spline1(theta(i),delta,-delta,f0,f1,fprim0,ethetai,
3853 call mixder(delta,thet_pred_mean,theta0(it),fprim_tc0)
3854 call spline2(theta(i),delta,-delta,E_tc0,E_tc1,fprim_tc0,
3857 call theteng(theta(i),thet_pred_mean,theta0(it),ethetai,
3860 etheta=etheta+ethetai
3861 c write (iout,'(2i3,3f8.3,f10.5)') i,it,rad2deg*theta(i),
3862 c & rad2deg*phii,rad2deg*phii1,ethetai
3863 if (i.gt.3) gloc(i-3,icg)=gloc(i-3,icg)+wang*E_tc*dthetg1
3864 if (i.lt.nres) gloc(i-2,icg)=gloc(i-2,icg)+wang*E_tc*dthetg2
3865 gloc(nphi+i-2,icg)=wang*(E_theta+E_tc*dthett)
3868 C Ufff.... We've done all this!!!
3871 C---------------------------------------------------------------------------
3872 subroutine theteng(thetai,thet_pred_mean,theta0i,ethetai,E_theta,
3874 implicit real*8 (a-h,o-z)
3875 include 'DIMENSIONS'
3876 include 'COMMON.LOCAL'
3877 include 'COMMON.IOUNITS'
3878 common /calcthet/ term1,term2,termm,diffak,ratak,
3879 & ak,aktc,termpre,termexp,sigc,sig0i,time11,time12,sigcsq,
3880 & delthe0,sig0inv,sigtc,sigsqtc,delthec,it
3881 C Calculate the contributions to both Gaussian lobes.
3882 C 6/6/97 - Deform the Gaussians using the factor of 1/(1+time)
3883 C The "polynomial part" of the "standard deviation" of this part of
3887 sig=sig*thet_pred_mean+polthet(j,it)
3889 C Derivative of the "interior part" of the "standard deviation of the"
3890 C gamma-dependent Gaussian lobe in t_c.
3891 sigtc=3*polthet(3,it)
3893 sigtc=sigtc*thet_pred_mean+j*polthet(j,it)
3896 C Set the parameters of both Gaussian lobes of the distribution.
3897 C "Standard deviation" of the gamma-dependent Gaussian lobe (sigtc)
3898 fac=sig*sig+sigc0(it)
3901 C Following variable (sigsqtc) is -(1/2)d[sigma(t_c)**(-2))]/dt_c
3902 sigsqtc=-4.0D0*sigcsq*sigtc
3903 c print *,i,sig,sigtc,sigsqtc
3904 C Following variable (sigtc) is d[sigma(t_c)]/dt_c
3905 sigtc=-sigtc/(fac*fac)
3906 C Following variable is sigma(t_c)**(-2)
3907 sigcsq=sigcsq*sigcsq
3909 sig0inv=1.0D0/sig0i**2
3910 delthec=thetai-thet_pred_mean
3911 delthe0=thetai-theta0i
3912 term1=-0.5D0*sigcsq*delthec*delthec
3913 term2=-0.5D0*sig0inv*delthe0*delthe0
3914 C Following fuzzy logic is to avoid underflows in dexp and subsequent INFs and
3915 C NaNs in taking the logarithm. We extract the largest exponent which is added
3916 C to the energy (this being the log of the distribution) at the end of energy
3917 C term evaluation for this virtual-bond angle.
3918 if (term1.gt.term2) then
3920 term2=dexp(term2-termm)
3924 term1=dexp(term1-termm)
3927 C The ratio between the gamma-independent and gamma-dependent lobes of
3928 C the distribution is a Gaussian function of thet_pred_mean too.
3929 diffak=gthet(2,it)-thet_pred_mean
3930 ratak=diffak/gthet(3,it)**2
3931 ak=dexp(gthet(1,it)-0.5D0*diffak*ratak)
3932 C Let's differentiate it in thet_pred_mean NOW.
3934 C Now put together the distribution terms to make complete distribution.
3935 termexp=term1+ak*term2
3936 termpre=sigc+ak*sig0i
3937 C Contribution of the bending energy from this theta is just the -log of
3938 C the sum of the contributions from the two lobes and the pre-exponential
3939 C factor. Simple enough, isn't it?
3940 ethetai=(-dlog(termexp)-termm+dlog(termpre))
3941 C NOW the derivatives!!!
3942 C 6/6/97 Take into account the deformation.
3943 E_theta=(delthec*sigcsq*term1
3944 & +ak*delthe0*sig0inv*term2)/termexp
3945 E_tc=((sigtc+aktc*sig0i)/termpre
3946 & -((delthec*sigcsq+delthec*delthec*sigsqtc)*term1+
3947 & aktc*term2)/termexp)
3950 c-----------------------------------------------------------------------------
3951 subroutine mixder(thetai,thet_pred_mean,theta0i,E_tc_t)
3952 implicit real*8 (a-h,o-z)
3953 include 'DIMENSIONS'
3954 include 'COMMON.LOCAL'
3955 include 'COMMON.IOUNITS'
3956 common /calcthet/ term1,term2,termm,diffak,ratak,
3957 & ak,aktc,termpre,termexp,sigc,sig0i,time11,time12,sigcsq,
3958 & delthe0,sig0inv,sigtc,sigsqtc,delthec,it
3959 delthec=thetai-thet_pred_mean
3960 delthe0=thetai-theta0i
3961 C "Thank you" to MAPLE (probably spared one day of hand-differentiation).
3962 t3 = thetai-thet_pred_mean
3966 t14 = t12+t6*sigsqtc
3968 t21 = thetai-theta0i
3974 E_tc_t = -((sigcsq+2.D0*t3*sigsqtc)*t9-t14*sigcsq*t3*t16*t9
3975 & -aktc*sig0inv*t27)/t32+(t14*t9+aktc*t26)/t40
3976 & *(-t12*t9-ak*sig0inv*t27)
3980 C--------------------------------------------------------------------------
3981 subroutine ebend(etheta)
3983 C Evaluate the virtual-bond-angle energy given the virtual-bond dihedral
3984 C angles gamma and its derivatives in consecutive thetas and gammas.
3985 C ab initio-derived potentials from
3986 c Kozlowska et al., J. Phys.: Condens. Matter 19 (2007) 285203
3988 implicit real*8 (a-h,o-z)
3989 include 'DIMENSIONS'
3990 include 'COMMON.LOCAL'
3991 include 'COMMON.GEO'
3992 include 'COMMON.INTERACT'
3993 include 'COMMON.DERIV'
3994 include 'COMMON.VAR'
3995 include 'COMMON.CHAIN'
3996 include 'COMMON.IOUNITS'
3997 include 'COMMON.NAMES'
3998 include 'COMMON.FFIELD'
3999 include 'COMMON.CONTROL'
4000 double precision coskt(mmaxtheterm),sinkt(mmaxtheterm),
4001 & cosph1(maxsingle),sinph1(maxsingle),cosph2(maxsingle),
4002 & sinph2(maxsingle),cosph1ph2(maxdouble,maxdouble),
4003 & sinph1ph2(maxdouble,maxdouble)
4004 logical lprn /.false./, lprn1 /.false./
4006 do i=ithet_start,ithet_end
4007 if ((itype(i-1).eq.ntyp1).or.(itype(i-2).eq.ntyp1).or.
4008 & (itype(i).eq.ntyp1)) cycle
4012 theti2=0.5d0*theta(i)
4013 ityp2=ithetyp(itype(i-1))
4015 coskt(k)=dcos(k*theti2)
4016 sinkt(k)=dsin(k*theti2)
4018 if (i.gt.3 .and. itype(i-3).ne.ntyp1) then
4021 if (phii.ne.phii) phii=150.0
4025 ityp1=ithetyp(itype(i-2))
4027 cosph1(k)=dcos(k*phii)
4028 sinph1(k)=dsin(k*phii)
4032 ityp1=ithetyp(itype(i-2))
4038 if (i.lt.nres .and. itype(i+1).ne.ntyp1) then
4041 if (phii1.ne.phii1) phii1=150.0
4046 ityp3=ithetyp(itype(i))
4048 cosph2(k)=dcos(k*phii1)
4049 sinph2(k)=dsin(k*phii1)
4053 ityp3=ithetyp(itype(i))
4059 c write (iout,*) "i",i," ityp1",itype(i-2),ityp1,
4060 c & " ityp2",itype(i-1),ityp2," ityp3",itype(i),ityp3
4062 ethetai=aa0thet(ityp1,ityp2,ityp3)
4065 ccl=cosph1(l)*cosph2(k-l)
4066 ssl=sinph1(l)*sinph2(k-l)
4067 scl=sinph1(l)*cosph2(k-l)
4068 csl=cosph1(l)*sinph2(k-l)
4069 cosph1ph2(l,k)=ccl-ssl
4070 cosph1ph2(k,l)=ccl+ssl
4071 sinph1ph2(l,k)=scl+csl
4072 sinph1ph2(k,l)=scl-csl
4076 write (iout,*) "i",i," ityp1",ityp1," ityp2",ityp2,
4077 & " ityp3",ityp3," theti2",theti2," phii",phii," phii1",phii1
4078 write (iout,*) "coskt and sinkt"
4080 write (iout,*) k,coskt(k),sinkt(k)
4084 ethetai=ethetai+aathet(k,ityp1,ityp2,ityp3)*sinkt(k)
4085 dethetai=dethetai+0.5d0*k*aathet(k,ityp1,ityp2,ityp3)
4088 & write (iout,*) "k",k," aathet",aathet(k,ityp1,ityp2,ityp3),
4089 & " ethetai",ethetai
4092 write (iout,*) "cosph and sinph"
4094 write (iout,*) k,cosph1(k),sinph1(k),cosph2(k),sinph2(k)
4096 write (iout,*) "cosph1ph2 and sinph2ph2"
4099 write (iout,*) l,k,cosph1ph2(l,k),cosph1ph2(k,l),
4100 & sinph1ph2(l,k),sinph1ph2(k,l)
4103 write(iout,*) "ethetai",ethetai
4107 aux=bbthet(k,m,ityp1,ityp2,ityp3)*cosph1(k)
4108 & +ccthet(k,m,ityp1,ityp2,ityp3)*sinph1(k)
4109 & +ddthet(k,m,ityp1,ityp2,ityp3)*cosph2(k)
4110 & +eethet(k,m,ityp1,ityp2,ityp3)*sinph2(k)
4111 ethetai=ethetai+sinkt(m)*aux
4112 dethetai=dethetai+0.5d0*m*aux*coskt(m)
4113 dephii=dephii+k*sinkt(m)*(
4114 & ccthet(k,m,ityp1,ityp2,ityp3)*cosph1(k)-
4115 & bbthet(k,m,ityp1,ityp2,ityp3)*sinph1(k))
4116 dephii1=dephii1+k*sinkt(m)*(
4117 & eethet(k,m,ityp1,ityp2,ityp3)*cosph2(k)-
4118 & ddthet(k,m,ityp1,ityp2,ityp3)*sinph2(k))
4120 & write (iout,*) "m",m," k",k," bbthet",
4121 & bbthet(k,m,ityp1,ityp2,ityp3)," ccthet",
4122 & ccthet(k,m,ityp1,ityp2,ityp3)," ddthet",
4123 & ddthet(k,m,ityp1,ityp2,ityp3)," eethet",
4124 & eethet(k,m,ityp1,ityp2,ityp3)," ethetai",ethetai
4128 & write(iout,*) "ethetai",ethetai
4132 aux=ffthet(l,k,m,ityp1,ityp2,ityp3)*cosph1ph2(l,k)+
4133 & ffthet(k,l,m,ityp1,ityp2,ityp3)*cosph1ph2(k,l)+
4134 & ggthet(l,k,m,ityp1,ityp2,ityp3)*sinph1ph2(l,k)+
4135 & ggthet(k,l,m,ityp1,ityp2,ityp3)*sinph1ph2(k,l)
4136 ethetai=ethetai+sinkt(m)*aux
4137 dethetai=dethetai+0.5d0*m*coskt(m)*aux
4138 dephii=dephii+l*sinkt(m)*(
4139 & -ffthet(l,k,m,ityp1,ityp2,ityp3)*sinph1ph2(l,k)-
4140 & ffthet(k,l,m,ityp1,ityp2,ityp3)*sinph1ph2(k,l)+
4141 & ggthet(l,k,m,ityp1,ityp2,ityp3)*cosph1ph2(l,k)+
4142 & ggthet(k,l,m,ityp1,ityp2,ityp3)*cosph1ph2(k,l))
4143 dephii1=dephii1+(k-l)*sinkt(m)*(
4144 & -ffthet(l,k,m,ityp1,ityp2,ityp3)*sinph1ph2(l,k)+
4145 & ffthet(k,l,m,ityp1,ityp2,ityp3)*sinph1ph2(k,l)+
4146 & ggthet(l,k,m,ityp1,ityp2,ityp3)*cosph1ph2(l,k)-
4147 & ggthet(k,l,m,ityp1,ityp2,ityp3)*cosph1ph2(k,l))
4149 write (iout,*) "m",m," k",k," l",l," ffthet",
4150 & ffthet(l,k,m,ityp1,ityp2,ityp3),
4151 & ffthet(k,l,m,ityp1,ityp2,ityp3)," ggthet",
4152 & ggthet(l,k,m,ityp1,ityp2,ityp3),
4153 & ggthet(k,l,m,ityp1,ityp2,ityp3)," ethetai",ethetai
4154 write (iout,*) cosph1ph2(l,k)*sinkt(m),
4155 & cosph1ph2(k,l)*sinkt(m),
4156 & sinph1ph2(l,k)*sinkt(m),sinph1ph2(k,l)*sinkt(m)
4163 if (lprn1) write (iout,'(a4,i2,3f8.1,9h ethetai ,f10.5)')
4164 & 'ebe',i,theta(i)*rad2deg,phii*rad2deg,
4165 & phii1*rad2deg,ethetai
4167 etheta=etheta+ethetai
4169 if (i.gt.3) gloc(i-3,icg)=gloc(i-3,icg)+wang*dephii
4170 if (i.lt.nres) gloc(i-2,icg)=gloc(i-2,icg)+wang*dephii1
4171 gloc(nphi+i-2,icg)=wang*dethetai
4177 c-----------------------------------------------------------------------------
4178 subroutine esc(escloc)
4179 C Calculate the local energy of a side chain and its derivatives in the
4180 C corresponding virtual-bond valence angles THETA and the spherical angles
4182 implicit real*8 (a-h,o-z)
4183 include 'DIMENSIONS'
4184 include 'sizesclu.dat'
4185 include 'COMMON.GEO'
4186 include 'COMMON.LOCAL'
4187 include 'COMMON.VAR'
4188 include 'COMMON.INTERACT'
4189 include 'COMMON.DERIV'
4190 include 'COMMON.CHAIN'
4191 include 'COMMON.IOUNITS'
4192 include 'COMMON.NAMES'
4193 include 'COMMON.FFIELD'
4194 double precision x(3),dersc(3),xemp(3),dersc0(3),dersc1(3),
4195 & ddersc0(3),ddummy(3),xtemp(3),temp(3)
4196 common /sccalc/ time11,time12,time112,theti,it,nlobit
4199 c write (iout,'(a)') 'ESC'
4200 do i=loc_start,loc_end
4202 if (it.eq.10) goto 1
4204 c print *,'i=',i,' it=',it,' nlobit=',nlobit
4205 c write (iout,*) 'i=',i,' ssa=',ssa,' ssad=',ssad
4206 theti=theta(i+1)-pipol
4210 c write (iout,*) "i",i," x",x(1),x(2),x(3)
4212 if (x(2).gt.pi-delta) then
4216 call enesc(xtemp,escloci0,dersc0,ddersc0,.true.)
4218 call enesc(xtemp,escloci1,dersc1,ddummy,.false.)
4219 call spline1(x(2),pi-delta,delta,escloci0,escloci1,dersc0(2),
4221 call spline2(x(2),pi-delta,delta,dersc0(1),dersc1(1),
4222 & ddersc0(1),dersc(1))
4223 call spline2(x(2),pi-delta,delta,dersc0(3),dersc1(3),
4224 & ddersc0(3),dersc(3))
4226 call enesc_bound(xtemp,esclocbi0,dersc0,dersc12,.true.)
4228 call enesc_bound(xtemp,esclocbi1,dersc1,chuju,.false.)
4229 call spline1(x(2),pi-delta,delta,esclocbi0,esclocbi1,
4230 & dersc0(2),esclocbi,dersc02)
4231 call spline2(x(2),pi-delta,delta,dersc0(1),dersc1(1),
4233 call splinthet(x(2),0.5d0*delta,ss,ssd)
4238 dersc(k)=ss*dersc(k)+(1.0d0-ss)*dersc0(k)
4240 dersc(2)=dersc(2)+ssd*(escloci-esclocbi)
4241 c write (iout,*) 'i=',i,x(2)*rad2deg,escloci0,escloci,
4243 escloci=ss*escloci+(1.0d0-ss)*esclocbi
4245 c write (iout,*) escloci
4246 else if (x(2).lt.delta) then
4250 call enesc(xtemp,escloci0,dersc0,ddersc0,.true.)
4252 call enesc(xtemp,escloci1,dersc1,ddummy,.false.)
4253 call spline1(x(2),delta,-delta,escloci0,escloci1,dersc0(2),
4255 call spline2(x(2),delta,-delta,dersc0(1),dersc1(1),
4256 & ddersc0(1),dersc(1))
4257 call spline2(x(2),delta,-delta,dersc0(3),dersc1(3),
4258 & ddersc0(3),dersc(3))
4260 call enesc_bound(xtemp,esclocbi0,dersc0,dersc12,.true.)
4262 call enesc_bound(xtemp,esclocbi1,dersc1,chuju,.false.)
4263 call spline1(x(2),delta,-delta,esclocbi0,esclocbi1,
4264 & dersc0(2),esclocbi,dersc02)
4265 call spline2(x(2),delta,-delta,dersc0(1),dersc1(1),
4270 call splinthet(x(2),0.5d0*delta,ss,ssd)
4272 dersc(k)=ss*dersc(k)+(1.0d0-ss)*dersc0(k)
4274 dersc(2)=dersc(2)+ssd*(escloci-esclocbi)
4275 c write (iout,*) 'i=',i,x(2)*rad2deg,escloci0,escloci,
4277 escloci=ss*escloci+(1.0d0-ss)*esclocbi
4278 c write (iout,*) escloci
4280 call enesc(x,escloci,dersc,ddummy,.false.)
4283 escloc=escloc+escloci
4284 c write (iout,*) 'i=',i,' escloci=',escloci,' dersc=',dersc
4286 gloc(nphi+i-1,icg)=gloc(nphi+i-1,icg)+
4288 gloc(ialph(i,1),icg)=wscloc*dersc(2)
4289 gloc(ialph(i,1)+nside,icg)=wscloc*dersc(3)
4294 C---------------------------------------------------------------------------
4295 subroutine enesc(x,escloci,dersc,ddersc,mixed)
4296 implicit real*8 (a-h,o-z)
4297 include 'DIMENSIONS'
4298 include 'COMMON.GEO'
4299 include 'COMMON.LOCAL'
4300 include 'COMMON.IOUNITS'
4301 common /sccalc/ time11,time12,time112,theti,it,nlobit
4302 double precision x(3),z(3),Ax(3,maxlob,-1:1),dersc(3),ddersc(3)
4303 double precision contr(maxlob,-1:1)
4305 c write (iout,*) 'it=',it,' nlobit=',nlobit
4309 if (mixed) ddersc(j)=0.0d0
4313 C Because of periodicity of the dependence of the SC energy in omega we have
4314 C to add up the contributions from x(3)-2*pi, x(3), and x(3+2*pi).
4315 C To avoid underflows, first compute & store the exponents.
4323 z(k)=x(k)-censc(k,j,it)
4328 Axk=Axk+gaussc(l,k,j,it)*z(l)
4334 expfac=expfac+Ax(k,j,iii)*z(k)
4342 C As in the case of ebend, we want to avoid underflows in exponentiation and
4343 C subsequent NaNs and INFs in energy calculation.
4344 C Find the largest exponent
4348 if (emin.gt.contr(j,iii)) emin=contr(j,iii)
4352 cd print *,'it=',it,' emin=',emin
4354 C Compute the contribution to SC energy and derivatives
4358 expfac=dexp(bsc(j,it)-0.5D0*contr(j,iii)+emin)
4359 cd print *,'j=',j,' expfac=',expfac
4360 escloc_i=escloc_i+expfac
4362 dersc(k)=dersc(k)+Ax(k,j,iii)*expfac
4366 ddersc(k)=ddersc(k)+(-Ax(2,j,iii)*Ax(k,j,iii)
4367 & +gaussc(k,2,j,it))*expfac
4374 dersc(1)=dersc(1)/cos(theti)**2
4375 ddersc(1)=ddersc(1)/cos(theti)**2
4378 escloci=-(dlog(escloc_i)-emin)
4380 dersc(j)=dersc(j)/escloc_i
4384 ddersc(j)=(ddersc(j)/escloc_i+dersc(2)*dersc(j))
4389 C------------------------------------------------------------------------------
4390 subroutine enesc_bound(x,escloci,dersc,dersc12,mixed)
4391 implicit real*8 (a-h,o-z)
4392 include 'DIMENSIONS'
4393 include 'COMMON.GEO'
4394 include 'COMMON.LOCAL'
4395 include 'COMMON.IOUNITS'
4396 common /sccalc/ time11,time12,time112,theti,it,nlobit
4397 double precision x(3),z(3),Ax(3,maxlob),dersc(3)
4398 double precision contr(maxlob)
4409 z(k)=x(k)-censc(k,j,it)
4415 Axk=Axk+gaussc(l,k,j,it)*z(l)
4421 expfac=expfac+Ax(k,j)*z(k)
4426 C As in the case of ebend, we want to avoid underflows in exponentiation and
4427 C subsequent NaNs and INFs in energy calculation.
4428 C Find the largest exponent
4431 if (emin.gt.contr(j)) emin=contr(j)
4435 C Compute the contribution to SC energy and derivatives
4439 expfac=dexp(bsc(j,it)-0.5D0*contr(j)+emin)
4440 escloc_i=escloc_i+expfac
4442 dersc(k)=dersc(k)+Ax(k,j)*expfac
4444 if (mixed) dersc12=dersc12+(-Ax(2,j)*Ax(1,j)
4445 & +gaussc(1,2,j,it))*expfac
4449 dersc(1)=dersc(1)/cos(theti)**2
4450 dersc12=dersc12/cos(theti)**2
4451 escloci=-(dlog(escloc_i)-emin)
4453 dersc(j)=dersc(j)/escloc_i
4455 if (mixed) dersc12=(dersc12/escloc_i+dersc(2)*dersc(1))
4459 c----------------------------------------------------------------------------------
4460 subroutine esc(escloc)
4461 C Calculate the local energy of a side chain and its derivatives in the
4462 C corresponding virtual-bond valence angles THETA and the spherical angles
4463 C ALPHA and OMEGA derived from AM1 all-atom calculations.
4464 C added by Urszula Kozlowska. 07/11/2007
4466 implicit real*8 (a-h,o-z)
4467 include 'DIMENSIONS'
4468 include 'COMMON.GEO'
4469 include 'COMMON.LOCAL'
4470 include 'COMMON.VAR'
4471 include 'COMMON.SCROT'
4472 include 'COMMON.INTERACT'
4473 include 'COMMON.DERIV'
4474 include 'COMMON.CHAIN'
4475 include 'COMMON.IOUNITS'
4476 include 'COMMON.NAMES'
4477 include 'COMMON.FFIELD'
4478 include 'COMMON.CONTROL'
4479 include 'COMMON.VECTORS'
4480 double precision x_prime(3),y_prime(3),z_prime(3)
4481 & , sumene,dsc_i,dp2_i,x(65),
4482 & xx,yy,zz,sumene1,sumene2,sumene3,sumene4,s1,s1_6,s2,s2_6,
4483 & de_dxx,de_dyy,de_dzz,de_dt
4484 double precision s1_t,s1_6_t,s2_t,s2_6_t
4486 & dXX_Ci1(3),dYY_Ci1(3),dZZ_Ci1(3),dXX_Ci(3),
4487 & dYY_Ci(3),dZZ_Ci(3),dXX_XYZ(3),dYY_XYZ(3),dZZ_XYZ(3),
4488 & dt_dCi(3),dt_dCi1(3)
4489 common /sccalc/ time11,time12,time112,theti,it,nlobit
4492 do i=loc_start,loc_end
4493 costtab(i+1) =dcos(theta(i+1))
4494 sinttab(i+1) =dsqrt(1-costtab(i+1)*costtab(i+1))
4495 cost2tab(i+1)=dsqrt(0.5d0*(1.0d0+costtab(i+1)))
4496 sint2tab(i+1)=dsqrt(0.5d0*(1.0d0-costtab(i+1)))
4497 cosfac2=0.5d0/(1.0d0+costtab(i+1))
4498 cosfac=dsqrt(cosfac2)
4499 sinfac2=0.5d0/(1.0d0-costtab(i+1))
4500 sinfac=dsqrt(sinfac2)
4502 if (it.eq.10) goto 1
4504 C Compute the axes of tghe local cartesian coordinates system; store in
4505 c x_prime, y_prime and z_prime
4512 C write(2,*) "dc_norm", dc_norm(1,i+nres),dc_norm(2,i+nres),
4513 C & dc_norm(3,i+nres)
4515 x_prime(j) = (dc_norm(j,i) - dc_norm(j,i-1))*cosfac
4516 y_prime(j) = (dc_norm(j,i) + dc_norm(j,i-1))*sinfac
4519 z_prime(j) = -uz(j,i-1)
4522 c write (2,*) "x_prime",(x_prime(j),j=1,3)
4523 c write (2,*) "y_prime",(y_prime(j),j=1,3)
4524 c write (2,*) "z_prime",(z_prime(j),j=1,3)
4525 c write (2,*) "xx",scalar(x_prime(1),x_prime(1)),
4526 c & " xy",scalar(x_prime(1),y_prime(1)),
4527 c & " xz",scalar(x_prime(1),z_prime(1)),
4528 c & " yy",scalar(y_prime(1),y_prime(1)),
4529 c & " yz",scalar(y_prime(1),z_prime(1)),
4530 c & " zz",scalar(z_prime(1),z_prime(1))
4532 C Transform the unit vector of the ith side-chain centroid, dC_norm(*,i),
4533 C to local coordinate system. Store in xx, yy, zz.
4539 xx = xx + x_prime(j)*dc_norm(j,i+nres)
4540 yy = yy + y_prime(j)*dc_norm(j,i+nres)
4541 zz = zz + z_prime(j)*dc_norm(j,i+nres)
4548 C Compute the energy of the ith side cbain
4550 c write (2,*) "xx",xx," yy",yy," zz",zz
4553 x(j) = sc_parmin(j,it)
4556 Cc diagnostics - remove later
4558 yy1 = dsin(alph(2))*dcos(omeg(2))
4559 zz1 = -dsin(alph(2))*dsin(omeg(2))
4560 write(2,'(3f8.1,3f9.3,1x,3f9.3)')
4561 & alph(2)*rad2deg,omeg(2)*rad2deg,theta(3)*rad2deg,xx,yy,zz,
4563 C," --- ", xx_w,yy_w,zz_w
4566 sumene1= x(1)+ x(2)*xx+ x(3)*yy+ x(4)*zz+ x(5)*xx**2
4567 & + x(6)*yy**2+ x(7)*zz**2+ x(8)*xx*zz+ x(9)*xx*yy
4569 sumene2= x(11) + x(12)*xx + x(13)*yy + x(14)*zz + x(15)*xx**2
4570 & + x(16)*yy**2 + x(17)*zz**2 + x(18)*xx*zz + x(19)*xx*yy
4572 sumene3= x(21) +x(22)*xx +x(23)*yy +x(24)*zz +x(25)*xx**2
4573 & +x(26)*yy**2 +x(27)*zz**2 +x(28)*xx*zz +x(29)*xx*yy
4574 & +x(30)*yy*zz +x(31)*xx**3 +x(32)*yy**3 +x(33)*zz**3
4575 & +x(34)*(xx**2)*yy +x(35)*(xx**2)*zz +x(36)*(yy**2)*xx
4576 & +x(37)*(yy**2)*zz +x(38)*(zz**2)*xx +x(39)*(zz**2)*yy
4578 sumene4= x(41) +x(42)*xx +x(43)*yy +x(44)*zz +x(45)*xx**2
4579 & +x(46)*yy**2 +x(47)*zz**2 +x(48)*xx*zz +x(49)*xx*yy
4580 & +x(50)*yy*zz +x(51)*xx**3 +x(52)*yy**3 +x(53)*zz**3
4581 & +x(54)*(xx**2)*yy +x(55)*(xx**2)*zz +x(56)*(yy**2)*xx
4582 & +x(57)*(yy**2)*zz +x(58)*(zz**2)*xx +x(59)*(zz**2)*yy
4584 dsc_i = 0.743d0+x(61)
4586 dscp1=dsqrt(dsc_i**2+dp2_i**2-2*dsc_i*dp2_i
4587 & *(xx*cost2tab(i+1)+yy*sint2tab(i+1)))
4588 dscp2=dsqrt(dsc_i**2+dp2_i**2-2*dsc_i*dp2_i
4589 & *(xx*cost2tab(i+1)-yy*sint2tab(i+1)))
4590 s1=(1+x(63))/(0.1d0 + dscp1)
4591 s1_6=(1+x(64))/(0.1d0 + dscp1**6)
4592 s2=(1+x(65))/(0.1d0 + dscp2)
4593 s2_6=(1+x(65))/(0.1d0 + dscp2**6)
4594 sumene = ( sumene3*sint2tab(i+1) + sumene1)*(s1+s1_6)
4595 & + (sumene4*cost2tab(i+1) +sumene2)*(s2+s2_6)
4596 c write(2,'(i2," sumene",7f9.3)') i,sumene1,sumene2,sumene3,
4598 c & dscp1,dscp2,sumene
4599 c sumene = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
4600 escloc = escloc + sumene
4601 c write (2,*) "escloc",escloc
4602 if (.not. calc_grad) goto 1
4605 C This section to check the numerical derivatives of the energy of ith side
4606 C chain in xx, yy, zz, and theta. Use the -DDEBUG compiler option or insert
4607 C #define DEBUG in the code to turn it on.
4609 write (2,*) "sumene =",sumene
4613 write (2,*) xx,yy,zz
4614 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
4615 de_dxx_num=(sumenep-sumene)/aincr
4617 write (2,*) "xx+ sumene from enesc=",sumenep
4620 write (2,*) xx,yy,zz
4621 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
4622 de_dyy_num=(sumenep-sumene)/aincr
4624 write (2,*) "yy+ sumene from enesc=",sumenep
4627 write (2,*) xx,yy,zz
4628 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
4629 de_dzz_num=(sumenep-sumene)/aincr
4631 write (2,*) "zz+ sumene from enesc=",sumenep
4632 costsave=cost2tab(i+1)
4633 sintsave=sint2tab(i+1)
4634 cost2tab(i+1)=dcos(0.5d0*(theta(i+1)+aincr))
4635 sint2tab(i+1)=dsin(0.5d0*(theta(i+1)+aincr))
4636 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
4637 de_dt_num=(sumenep-sumene)/aincr
4638 write (2,*) " t+ sumene from enesc=",sumenep
4639 cost2tab(i+1)=costsave
4640 sint2tab(i+1)=sintsave
4641 C End of diagnostics section.
4644 C Compute the gradient of esc
4646 pom_s1=(1.0d0+x(63))/(0.1d0 + dscp1)**2
4647 pom_s16=6*(1.0d0+x(64))/(0.1d0 + dscp1**6)**2
4648 pom_s2=(1.0d0+x(65))/(0.1d0 + dscp2)**2
4649 pom_s26=6*(1.0d0+x(65))/(0.1d0 + dscp2**6)**2
4650 pom_dx=dsc_i*dp2_i*cost2tab(i+1)
4651 pom_dy=dsc_i*dp2_i*sint2tab(i+1)
4652 pom_dt1=-0.5d0*dsc_i*dp2_i*(xx*sint2tab(i+1)-yy*cost2tab(i+1))
4653 pom_dt2=-0.5d0*dsc_i*dp2_i*(xx*sint2tab(i+1)+yy*cost2tab(i+1))
4654 pom1=(sumene3*sint2tab(i+1)+sumene1)
4655 & *(pom_s1/dscp1+pom_s16*dscp1**4)
4656 pom2=(sumene4*cost2tab(i+1)+sumene2)
4657 & *(pom_s2/dscp2+pom_s26*dscp2**4)
4658 sumene1x=x(2)+2*x(5)*xx+x(8)*zz+ x(9)*yy
4659 sumene3x=x(22)+2*x(25)*xx+x(28)*zz+x(29)*yy+3*x(31)*xx**2
4660 & +2*x(34)*xx*yy +2*x(35)*xx*zz +x(36)*(yy**2) +x(38)*(zz**2)
4662 sumene2x=x(12)+2*x(15)*xx+x(18)*zz+ x(19)*yy
4663 sumene4x=x(42)+2*x(45)*xx +x(48)*zz +x(49)*yy +3*x(51)*xx**2
4664 & +2*x(54)*xx*yy+2*x(55)*xx*zz+x(56)*(yy**2)+x(58)*(zz**2)
4666 de_dxx =(sumene1x+sumene3x*sint2tab(i+1))*(s1+s1_6)
4667 & +(sumene2x+sumene4x*cost2tab(i+1))*(s2+s2_6)
4668 & +(pom1+pom2)*pom_dx
4670 write(2,*), "de_dxx = ", de_dxx,de_dxx_num
4673 sumene1y=x(3) + 2*x(6)*yy + x(9)*xx + x(10)*zz
4674 sumene3y=x(23) +2*x(26)*yy +x(29)*xx +x(30)*zz +3*x(32)*yy**2
4675 & +x(34)*(xx**2) +2*x(36)*yy*xx +2*x(37)*yy*zz +x(39)*(zz**2)
4677 sumene2y=x(13) + 2*x(16)*yy + x(19)*xx + x(20)*zz
4678 sumene4y=x(43)+2*x(46)*yy+x(49)*xx +x(50)*zz
4679 & +3*x(52)*yy**2+x(54)*xx**2+2*x(56)*yy*xx +2*x(57)*yy*zz
4680 & +x(59)*zz**2 +x(60)*xx*zz
4681 de_dyy =(sumene1y+sumene3y*sint2tab(i+1))*(s1+s1_6)
4682 & +(sumene2y+sumene4y*cost2tab(i+1))*(s2+s2_6)
4683 & +(pom1-pom2)*pom_dy
4685 write(2,*), "de_dyy = ", de_dyy,de_dyy_num
4688 de_dzz =(x(24) +2*x(27)*zz +x(28)*xx +x(30)*yy
4689 & +3*x(33)*zz**2 +x(35)*xx**2 +x(37)*yy**2 +2*x(38)*zz*xx
4690 & +2*x(39)*zz*yy +x(40)*xx*yy)*sint2tab(i+1)*(s1+s1_6)
4691 & +(x(4) + 2*x(7)*zz+ x(8)*xx + x(10)*yy)*(s1+s1_6)
4692 & +(x(44)+2*x(47)*zz +x(48)*xx +x(50)*yy +3*x(53)*zz**2
4693 & +x(55)*xx**2 +x(57)*(yy**2)+2*x(58)*zz*xx +2*x(59)*zz*yy
4694 & +x(60)*xx*yy)*cost2tab(i+1)*(s2+s2_6)
4695 & + ( x(14) + 2*x(17)*zz+ x(18)*xx + x(20)*yy)*(s2+s2_6)
4697 write(2,*), "de_dzz = ", de_dzz,de_dzz_num
4700 de_dt = 0.5d0*sumene3*cost2tab(i+1)*(s1+s1_6)
4701 & -0.5d0*sumene4*sint2tab(i+1)*(s2+s2_6)
4702 & +pom1*pom_dt1+pom2*pom_dt2
4704 write(2,*), "de_dt = ", de_dt,de_dt_num
4708 cossc=scalar(dc_norm(1,i),dc_norm(1,i+nres))
4709 cossc1=scalar(dc_norm(1,i-1),dc_norm(1,i+nres))
4710 cosfac2xx=cosfac2*xx
4711 sinfac2yy=sinfac2*yy
4713 dt_dCi(k) = -(dc_norm(k,i-1)+costtab(i+1)*dc_norm(k,i))*
4715 dt_dCi1(k)= -(dc_norm(k,i)+costtab(i+1)*dc_norm(k,i-1))*
4717 pom=(dC_norm(k,i+nres)-cossc*dC_norm(k,i))*vbld_inv(i+1)
4718 pom1=(dC_norm(k,i+nres)-cossc1*dC_norm(k,i-1))*vbld_inv(i)
4719 c write (iout,*) "i",i," k",k," pom",pom," pom1",pom1,
4720 c & " dt_dCi",dt_dCi(k)," dt_dCi1",dt_dCi1(k)
4721 c write (iout,*) "dC_norm",(dC_norm(j,i),j=1,3),
4722 c & (dC_norm(j,i-1),j=1,3)," vbld_inv",vbld_inv(i+1),vbld_inv(i)
4723 dXX_Ci(k)=pom*cosfac-dt_dCi(k)*cosfac2xx
4724 dXX_Ci1(k)=-pom1*cosfac-dt_dCi1(k)*cosfac2xx
4725 dYY_Ci(k)=pom*sinfac+dt_dCi(k)*sinfac2yy
4726 dYY_Ci1(k)=pom1*sinfac+dt_dCi1(k)*sinfac2yy
4730 dZZ_Ci(k)=dZZ_Ci(k)-uzgrad(j,k,2,i-1)*dC_norm(j,i+nres)
4731 dZZ_Ci1(k)=dZZ_Ci1(k)-uzgrad(j,k,1,i-1)*dC_norm(j,i+nres)
4734 dXX_XYZ(k)=vbld_inv(i+nres)*(x_prime(k)-xx*dC_norm(k,i+nres))
4735 dYY_XYZ(k)=vbld_inv(i+nres)*(y_prime(k)-yy*dC_norm(k,i+nres))
4736 dZZ_XYZ(k)=vbld_inv(i+nres)*(z_prime(k)-zz*dC_norm(k,i+nres))
4738 dt_dCi(k) = -dt_dCi(k)/sinttab(i+1)
4739 dt_dCi1(k)= -dt_dCi1(k)/sinttab(i+1)
4743 dXX_Ctab(k,i)=dXX_Ci(k)
4744 dXX_C1tab(k,i)=dXX_Ci1(k)
4745 dYY_Ctab(k,i)=dYY_Ci(k)
4746 dYY_C1tab(k,i)=dYY_Ci1(k)
4747 dZZ_Ctab(k,i)=dZZ_Ci(k)
4748 dZZ_C1tab(k,i)=dZZ_Ci1(k)
4749 dXX_XYZtab(k,i)=dXX_XYZ(k)
4750 dYY_XYZtab(k,i)=dYY_XYZ(k)
4751 dZZ_XYZtab(k,i)=dZZ_XYZ(k)
4755 c write (iout,*) "k",k," dxx_ci1",dxx_ci1(k)," dyy_ci1",
4756 c & dyy_ci1(k)," dzz_ci1",dzz_ci1(k)
4757 c write (iout,*) "k",k," dxx_ci",dxx_ci(k)," dyy_ci",
4758 c & dyy_ci(k)," dzz_ci",dzz_ci(k)
4759 c write (iout,*) "k",k," dt_dci",dt_dci(k)," dt_dci",
4761 c write (iout,*) "k",k," dxx_XYZ",dxx_XYZ(k)," dyy_XYZ",
4762 c & dyy_XYZ(k)," dzz_XYZ",dzz_XYZ(k)
4763 gscloc(k,i-1)=gscloc(k,i-1)+de_dxx*dxx_ci1(k)
4764 & +de_dyy*dyy_ci1(k)+de_dzz*dzz_ci1(k)+de_dt*dt_dCi1(k)
4765 gscloc(k,i)=gscloc(k,i)+de_dxx*dxx_Ci(k)
4766 & +de_dyy*dyy_Ci(k)+de_dzz*dzz_Ci(k)+de_dt*dt_dCi(k)
4767 gsclocx(k,i)= de_dxx*dxx_XYZ(k)
4768 & +de_dyy*dyy_XYZ(k)+de_dzz*dzz_XYZ(k)
4770 c write(iout,*) "ENERGY GRAD = ", (gscloc(k,i-1),k=1,3),
4771 c & (gscloc(k,i),k=1,3),(gsclocx(k,i),k=1,3)
4773 C to check gradient call subroutine check_grad
4780 c------------------------------------------------------------------------------
4781 subroutine gcont(rij,r0ij,eps0ij,delta,fcont,fprimcont)
4783 C This procedure calculates two-body contact function g(rij) and its derivative:
4786 C g(rij) = esp0ij*(-0.9375*x+0.625*x**3-0.1875*x**5) ! -1 =< x =< 1
4789 C where x=(rij-r0ij)/delta
4791 C rij - interbody distance, r0ij - contact distance, eps0ij - contact energy
4794 double precision rij,r0ij,eps0ij,fcont,fprimcont
4795 double precision x,x2,x4,delta
4799 if (x.lt.-1.0D0) then
4802 else if (x.le.1.0D0) then
4805 fcont=eps0ij*(x*(-0.9375D0+0.6250D0*x2-0.1875D0*x4)+0.5D0)
4806 fprimcont=eps0ij * (-0.9375D0+1.8750D0*x2-0.9375D0*x4)/delta
4813 c------------------------------------------------------------------------------
4814 subroutine splinthet(theti,delta,ss,ssder)
4815 implicit real*8 (a-h,o-z)
4816 include 'DIMENSIONS'
4817 include 'sizesclu.dat'
4818 include 'COMMON.VAR'
4819 include 'COMMON.GEO'
4822 if (theti.gt.pipol) then
4823 call gcont(theti,thetup,1.0d0,delta,ss,ssder)
4825 call gcont(-theti,-thetlow,1.0d0,delta,ss,ssder)
4830 c------------------------------------------------------------------------------
4831 subroutine spline1(x,x0,delta,f0,f1,fprim0,f,fprim)
4833 double precision x,x0,delta,f0,f1,fprim0,f,fprim
4834 double precision ksi,ksi2,ksi3,a1,a2,a3
4835 a1=fprim0*delta/(f1-f0)
4841 f=f0+(f1-f0)*ksi*(a1+ksi*(a2+a3*ksi))
4842 fprim=(f1-f0)/delta*(a1+ksi*(2*a2+3*ksi*a3))
4845 c------------------------------------------------------------------------------
4846 subroutine spline2(x,x0,delta,f0x,f1x,fprim0x,fx)
4848 double precision x,x0,delta,f0x,f1x,fprim0x,fx
4849 double precision ksi,ksi2,ksi3,a1,a2,a3
4854 a2=3*(f1x-f0x)-2*fprim0x*delta
4855 a3=fprim0x*delta-2*(f1x-f0x)
4856 fx=f0x+a1*ksi+a2*ksi2+a3*ksi3
4859 C-----------------------------------------------------------------------------
4861 C-----------------------------------------------------------------------------
4862 subroutine etor(etors,edihcnstr,fact)
4863 implicit real*8 (a-h,o-z)
4864 include 'DIMENSIONS'
4865 include 'sizesclu.dat'
4866 include 'COMMON.VAR'
4867 include 'COMMON.GEO'
4868 include 'COMMON.LOCAL'
4869 include 'COMMON.TORSION'
4870 include 'COMMON.INTERACT'
4871 include 'COMMON.DERIV'
4872 include 'COMMON.CHAIN'
4873 include 'COMMON.NAMES'
4874 include 'COMMON.IOUNITS'
4875 include 'COMMON.FFIELD'
4876 include 'COMMON.TORCNSTR'
4878 C Set lprn=.true. for debugging
4882 do i=iphi_start,iphi_end
4883 itori=itortyp(itype(i-2))
4884 itori1=itortyp(itype(i-1))
4887 C Proline-Proline pair is a special case...
4888 if (itori.eq.3 .and. itori1.eq.3) then
4889 if (phii.gt.-dwapi3) then
4891 fac=1.0D0/(1.0D0-cosphi)
4892 etorsi=v1(1,3,3)*fac
4893 etorsi=etorsi+etorsi
4894 etors=etors+etorsi-v1(1,3,3)
4895 gloci=gloci-3*fac*etorsi*dsin(3*phii)
4898 v1ij=v1(j+1,itori,itori1)
4899 v2ij=v2(j+1,itori,itori1)
4902 etors=etors+v1ij*cosphi+v2ij*sinphi+dabs(v1ij)+dabs(v2ij)
4903 gloci=gloci+j*(v2ij*cosphi-v1ij*sinphi)
4907 v1ij=v1(j,itori,itori1)
4908 v2ij=v2(j,itori,itori1)
4911 etors=etors+v1ij*cosphi+v2ij*sinphi+dabs(v1ij)+dabs(v2ij)
4912 gloci=gloci+j*(v2ij*cosphi-v1ij*sinphi)
4916 & write (iout,'(2(a3,2x,i3,2x),2i3,6f8.3/26x,6f8.3/)')
4917 & restyp(itype(i-2)),i-2,restyp(itype(i-1)),i-1,itori,itori1,
4918 & (v1(j,itori,itori1),j=1,6),(v2(j,itori,itori1),j=1,6)
4919 gloc(i-3,icg)=gloc(i-3,icg)+wtor*fact*gloci
4920 c write (iout,*) 'i=',i,' gloc=',gloc(i-3,icg)
4922 ! 6/20/98 - dihedral angle constraints
4925 itori=idih_constr(i)
4927 difi=pinorm(phii-phi0(i))
4928 if (difi.gt.drange(i)) then
4930 edihcnstr=edihcnstr+0.25d0*ftors*difi**4
4931 gloc(itori-3,icg)=gloc(itori-3,icg)+ftors*difi**3
4932 else if (difi.lt.-drange(i)) then
4934 edihcnstr=edihcnstr+0.25d0*ftors*difi**4
4935 gloc(itori-3,icg)=gloc(itori-3,icg)+ftors*difi**3
4937 c write (iout,'(2i5,2f8.3,2e14.5)') i,itori,rad2deg*phii,
4938 c & rad2deg*difi,0.25d0*ftors*difi**4,gloc(itori-3,icg)
4940 write (iout,*) 'edihcnstr',edihcnstr
4943 c------------------------------------------------------------------------------
4945 subroutine etor(etors,edihcnstr,fact)
4946 implicit real*8 (a-h,o-z)
4947 include 'DIMENSIONS'
4948 include 'sizesclu.dat'
4949 include 'COMMON.VAR'
4950 include 'COMMON.GEO'
4951 include 'COMMON.LOCAL'
4952 include 'COMMON.TORSION'
4953 include 'COMMON.INTERACT'
4954 include 'COMMON.DERIV'
4955 include 'COMMON.CHAIN'
4956 include 'COMMON.NAMES'
4957 include 'COMMON.IOUNITS'
4958 include 'COMMON.FFIELD'
4959 include 'COMMON.TORCNSTR'
4961 C Set lprn=.true. for debugging
4965 do i=iphi_start,iphi_end
4966 if (itel(i-2).eq.0 .or. itel(i-1).eq.0) goto 1215
4967 itori=itortyp(itype(i-2))
4968 itori1=itortyp(itype(i-1))
4971 C Regular cosine and sine terms
4972 do j=1,nterm(itori,itori1)
4973 v1ij=v1(j,itori,itori1)
4974 v2ij=v2(j,itori,itori1)
4977 etors=etors+v1ij*cosphi+v2ij*sinphi
4978 gloci=gloci+j*(v2ij*cosphi-v1ij*sinphi)
4982 C E = SUM ----------------------------------- - v1
4983 C [v2 cos(phi/2)+v3 sin(phi/2)]^2 + 1
4985 cosphi=dcos(0.5d0*phii)
4986 sinphi=dsin(0.5d0*phii)
4987 do j=1,nlor(itori,itori1)
4988 vl1ij=vlor1(j,itori,itori1)
4989 vl2ij=vlor2(j,itori,itori1)
4990 vl3ij=vlor3(j,itori,itori1)
4991 pom=vl2ij*cosphi+vl3ij*sinphi
4992 pom1=1.0d0/(pom*pom+1.0d0)
4993 etors=etors+vl1ij*pom1
4995 gloci=gloci+vl1ij*(vl3ij*cosphi-vl2ij*sinphi)*pom
4997 C Subtract the constant term
4998 etors=etors-v0(itori,itori1)
5000 & write (iout,'(2(a3,2x,i3,2x),2i3,6f8.3/26x,6f8.3/)')
5001 & restyp(itype(i-2)),i-2,restyp(itype(i-1)),i-1,itori,itori1,
5002 & (v1(j,itori,itori1),j=1,6),(v2(j,itori,itori1),j=1,6)
5003 gloc(i-3,icg)=gloc(i-3,icg)+wtor*fact*gloci
5004 c write (iout,*) 'i=',i,' gloc=',gloc(i-3,icg)
5007 ! 6/20/98 - dihedral angle constraints
5009 c write (iout,*) "Dihedral angle restraint energy"
5011 itori=idih_constr(i)
5013 difi=pinorm(phii-phi0(i))
5014 c write (iout,'(2i5,4f8.3,2e14.5)') i,itori,rad2deg*phii,
5015 c & rad2deg*difi,rad2deg*phi0(i),rad2deg*drange(i)
5016 if (difi.gt.drange(i)) then
5018 edihcnstr=edihcnstr+0.25d0*ftors*difi**4
5019 gloc(itori-3,icg)=gloc(itori-3,icg)+ftors*difi**3
5020 c write (iout,*) 0.25d0*ftors*difi**4
5021 else if (difi.lt.-drange(i)) then
5023 edihcnstr=edihcnstr+0.25d0*ftors*difi**4
5024 gloc(itori-3,icg)=gloc(itori-3,icg)+ftors*difi**3
5025 c write (iout,*) 0.25d0*ftors*difi**4
5028 c write (iout,*) 'edihcnstr',edihcnstr
5031 c----------------------------------------------------------------------------
5032 subroutine etor_d(etors_d,fact2)
5033 C 6/23/01 Compute double torsional energy
5034 implicit real*8 (a-h,o-z)
5035 include 'DIMENSIONS'
5036 include 'sizesclu.dat'
5037 include 'COMMON.VAR'
5038 include 'COMMON.GEO'
5039 include 'COMMON.LOCAL'
5040 include 'COMMON.TORSION'
5041 include 'COMMON.INTERACT'
5042 include 'COMMON.DERIV'
5043 include 'COMMON.CHAIN'
5044 include 'COMMON.NAMES'
5045 include 'COMMON.IOUNITS'
5046 include 'COMMON.FFIELD'
5047 include 'COMMON.TORCNSTR'
5049 C Set lprn=.true. for debugging
5053 do i=iphi_start,iphi_end-1
5054 if (itel(i-2).eq.0 .or. itel(i-1).eq.0 .or. itel(i).eq.0)
5056 itori=itortyp(itype(i-2))
5057 itori1=itortyp(itype(i-1))
5058 itori2=itortyp(itype(i))
5063 C Regular cosine and sine terms
5064 do j=1,ntermd_1(itori,itori1,itori2)
5065 v1cij=v1c(1,j,itori,itori1,itori2)
5066 v1sij=v1s(1,j,itori,itori1,itori2)
5067 v2cij=v1c(2,j,itori,itori1,itori2)
5068 v2sij=v1s(2,j,itori,itori1,itori2)
5069 cosphi1=dcos(j*phii)
5070 sinphi1=dsin(j*phii)
5071 cosphi2=dcos(j*phii1)
5072 sinphi2=dsin(j*phii1)
5073 etors_d=etors_d+v1cij*cosphi1+v1sij*sinphi1+
5074 & v2cij*cosphi2+v2sij*sinphi2
5075 gloci1=gloci1+j*(v1sij*cosphi1-v1cij*sinphi1)
5076 gloci2=gloci2+j*(v2sij*cosphi2-v2cij*sinphi2)
5078 do k=2,ntermd_2(itori,itori1,itori2)
5080 v1cdij = v2c(k,l,itori,itori1,itori2)
5081 v2cdij = v2c(l,k,itori,itori1,itori2)
5082 v1sdij = v2s(k,l,itori,itori1,itori2)
5083 v2sdij = v2s(l,k,itori,itori1,itori2)
5084 cosphi1p2=dcos(l*phii+(k-l)*phii1)
5085 cosphi1m2=dcos(l*phii-(k-l)*phii1)
5086 sinphi1p2=dsin(l*phii+(k-l)*phii1)
5087 sinphi1m2=dsin(l*phii-(k-l)*phii1)
5088 etors_d=etors_d+v1cdij*cosphi1p2+v2cdij*cosphi1m2+
5089 & v1sdij*sinphi1p2+v2sdij*sinphi1m2
5090 gloci1=gloci1+l*(v1sdij*cosphi1p2+v2sdij*cosphi1m2
5091 & -v1cdij*sinphi1p2-v2cdij*sinphi1m2)
5092 gloci2=gloci2+(k-l)*(v1sdij*cosphi1p2-v2sdij*cosphi1m2
5093 & -v1cdij*sinphi1p2+v2cdij*sinphi1m2)
5096 gloc(i-3,icg)=gloc(i-3,icg)+wtor_d*fact2*gloci1
5097 gloc(i-2,icg)=gloc(i-2,icg)+wtor_d*fact2*gloci2
5103 c------------------------------------------------------------------------------
5104 subroutine eback_sc_corr(esccor,fact)
5105 c 7/21/2007 Correlations between the backbone-local and side-chain-local
5106 c conformational states; temporarily implemented as differences
5107 c between UNRES torsional potentials (dependent on three types of
5108 c residues) and the torsional potentials dependent on all 20 types
5109 c of residues computed from AM1 energy surfaces of terminally-blocked
5110 c amino-acid residues.
5111 implicit real*8 (a-h,o-z)
5112 include 'DIMENSIONS'
5113 include 'COMMON.VAR'
5114 include 'COMMON.GEO'
5115 include 'COMMON.LOCAL'
5116 include 'COMMON.TORSION'
5117 include 'COMMON.SCCOR'
5118 include 'COMMON.INTERACT'
5119 include 'COMMON.DERIV'
5120 include 'COMMON.CHAIN'
5121 include 'COMMON.NAMES'
5122 include 'COMMON.IOUNITS'
5123 include 'COMMON.FFIELD'
5124 include 'COMMON.CONTROL'
5126 C Set lprn=.true. for debugging
5129 c write (iout,*) "EBACK_SC_COR",iphi_start,iphi_end,nterm_sccor
5131 do i=itau_start,itau_end
5133 isccori=isccortyp(itype(i-2))
5134 isccori1=isccortyp(itype(i-1))
5136 cccc Added 9 May 2012
5137 cc Tauangle is torsional engle depending on the value of first digit
5138 c(see comment below)
5139 cc Omicron is flat angle depending on the value of first digit
5140 c(see comment below)
5143 do intertyp=1,3 !intertyp
5144 cc Added 09 May 2012 (Adasko)
5145 cc Intertyp means interaction type of backbone mainchain correlation:
5146 c 1 = SC...Ca...Ca...Ca
5147 c 2 = Ca...Ca...Ca...SC
5148 c 3 = SC...Ca...Ca...SCi
5150 if (((intertyp.eq.3).and.((itype(i-2).eq.10).or.
5151 & (itype(i-1).eq.10).or.(itype(i-2).eq.21).or.
5152 & (itype(i-1).eq.21)))
5153 & .or. ((intertyp.eq.1).and.((itype(i-2).eq.10)
5154 & .or.(itype(i-2).eq.21)))
5155 & .or.((intertyp.eq.2).and.((itype(i-1).eq.10).or.
5156 & (itype(i-1).eq.21)))) cycle
5157 if ((intertyp.eq.2).and.(i.eq.4).and.(itype(1).eq.21)) cycle
5158 if ((intertyp.eq.1).and.(i.eq.nres).and.(itype(nres).eq.21))
5160 do j=1,nterm_sccor(isccori,isccori1)
5161 v1ij=v1sccor(j,intertyp,isccori,isccori1)
5162 v2ij=v2sccor(j,intertyp,isccori,isccori1)
5163 cosphi=dcos(j*tauangle(intertyp,i))
5164 sinphi=dsin(j*tauangle(intertyp,i))
5165 esccor=esccor+v1ij*cosphi+v2ij*sinphi
5166 gloci=gloci+j*(v2ij*cosphi-v1ij*sinphi)
5168 gloc_sc(intertyp,i-3,icg)=gloc_sc(intertyp,i-3,icg)+wsccor*gloci
5169 c write (iout,*) "WTF",intertyp,i,itype(i),v1ij*cosphi+v2ij*sinphi
5170 c &gloc_sc(intertyp,i-3,icg)
5172 & write (iout,'(2(a3,2x,i3,2x),2i3,6f8.3/26x,6f8.3/)')
5173 & restyp(itype(i-2)),i-2,restyp(itype(i-1)),i-1,itori,itori1,
5174 & (v1sccor(j,intertyp,itori,itori1),j=1,6)
5175 & ,(v2sccor(j,intertyp,itori,itori1),j=1,6)
5176 gsccor_loc(i-3)=gsccor_loc(i-3)+gloci
5182 c------------------------------------------------------------------------------
5183 subroutine multibody(ecorr)
5184 C This subroutine calculates multi-body contributions to energy following
5185 C the idea of Skolnick et al. If side chains I and J make a contact and
5186 C at the same time side chains I+1 and J+1 make a contact, an extra
5187 C contribution equal to sqrt(eps(i,j)*eps(i+1,j+1)) is added.
5188 implicit real*8 (a-h,o-z)
5189 include 'DIMENSIONS'
5190 include 'COMMON.IOUNITS'
5191 include 'COMMON.DERIV'
5192 include 'COMMON.INTERACT'
5193 include 'COMMON.CONTACTS'
5194 double precision gx(3),gx1(3)
5197 C Set lprn=.true. for debugging
5201 write (iout,'(a)') 'Contact function values:'
5203 write (iout,'(i2,20(1x,i2,f10.5))')
5204 & i,(jcont(j,i),facont(j,i),j=1,num_cont(i))
5219 num_conti=num_cont(i)
5220 num_conti1=num_cont(i1)
5225 if (j1.eq.j+ishift .or. j1.eq.j-ishift) then
5226 cd write(iout,*)'i=',i,' j=',j,' i1=',i1,' j1=',j1,
5227 cd & ' ishift=',ishift
5228 C Contacts I--J and I+ISHIFT--J+-ISHIFT1 occur simultaneously.
5229 C The system gains extra energy.
5230 ecorr=ecorr+esccorr(i,j,i1,j1,jj,kk)
5231 endif ! j1==j+-ishift
5240 c------------------------------------------------------------------------------
5241 double precision function esccorr(i,j,k,l,jj,kk)
5242 implicit real*8 (a-h,o-z)
5243 include 'DIMENSIONS'
5244 include 'COMMON.IOUNITS'
5245 include 'COMMON.DERIV'
5246 include 'COMMON.INTERACT'
5247 include 'COMMON.CONTACTS'
5248 double precision gx(3),gx1(3)
5253 cd write (iout,'(4i5,3f10.5)') i,j,k,l,eij,ekl,-eij*ekl
5254 C Calculate the multi-body contribution to energy.
5255 C Calculate multi-body contributions to the gradient.
5256 cd write (iout,'(2(2i3,3f10.5))')i,j,(gacont(m,jj,i),m=1,3),
5257 cd & k,l,(gacont(m,kk,k),m=1,3)
5259 gx(m) =ekl*gacont(m,jj,i)
5260 gx1(m)=eij*gacont(m,kk,k)
5261 gradxorr(m,i)=gradxorr(m,i)-gx(m)
5262 gradxorr(m,j)=gradxorr(m,j)+gx(m)
5263 gradxorr(m,k)=gradxorr(m,k)-gx1(m)
5264 gradxorr(m,l)=gradxorr(m,l)+gx1(m)
5268 gradcorr(ll,m)=gradcorr(ll,m)+gx(ll)
5273 gradcorr(ll,m)=gradcorr(ll,m)+gx1(ll)
5279 c------------------------------------------------------------------------------
5281 subroutine pack_buffer(dimen1,dimen2,atom,indx,buffer)
5282 implicit real*8 (a-h,o-z)
5283 include 'DIMENSIONS'
5284 integer dimen1,dimen2,atom,indx
5285 double precision buffer(dimen1,dimen2)
5286 double precision zapas
5287 common /contacts_hb/ zapas(3,20,maxres,7),
5288 & facont_hb(20,maxres),ees0p(20,maxres),ees0m(20,maxres),
5289 & num_cont_hb(maxres),jcont_hb(20,maxres)
5290 num_kont=num_cont_hb(atom)
5294 buffer(i,indx+(k-1)*3+j)=zapas(j,i,atom,k)
5297 buffer(i,indx+22)=facont_hb(i,atom)
5298 buffer(i,indx+23)=ees0p(i,atom)
5299 buffer(i,indx+24)=ees0m(i,atom)
5300 buffer(i,indx+25)=dfloat(jcont_hb(i,atom))
5302 buffer(1,indx+26)=dfloat(num_kont)
5305 c------------------------------------------------------------------------------
5306 subroutine unpack_buffer(dimen1,dimen2,atom,indx,buffer)
5307 implicit real*8 (a-h,o-z)
5308 include 'DIMENSIONS'
5309 integer dimen1,dimen2,atom,indx
5310 double precision buffer(dimen1,dimen2)
5311 double precision zapas
5312 common /contacts_hb/ zapas(3,20,maxres,7),
5313 & facont_hb(20,maxres),ees0p(20,maxres),ees0m(20,maxres),
5314 & num_cont_hb(maxres),jcont_hb(20,maxres)
5315 num_kont=buffer(1,indx+26)
5316 num_kont_old=num_cont_hb(atom)
5317 num_cont_hb(atom)=num_kont+num_kont_old
5322 zapas(j,ii,atom,k)=buffer(i,indx+(k-1)*3+j)
5325 facont_hb(ii,atom)=buffer(i,indx+22)
5326 ees0p(ii,atom)=buffer(i,indx+23)
5327 ees0m(ii,atom)=buffer(i,indx+24)
5328 jcont_hb(ii,atom)=buffer(i,indx+25)
5332 c------------------------------------------------------------------------------
5334 subroutine multibody_hb(ecorr,ecorr5,ecorr6,n_corr,n_corr1)
5335 C This subroutine calculates multi-body contributions to hydrogen-bonding
5336 implicit real*8 (a-h,o-z)
5337 include 'DIMENSIONS'
5338 include 'sizesclu.dat'
5339 include 'COMMON.IOUNITS'
5341 include 'COMMON.INFO'
5343 include 'COMMON.FFIELD'
5344 include 'COMMON.DERIV'
5345 include 'COMMON.INTERACT'
5346 include 'COMMON.CONTACTS'
5348 parameter (max_cont=maxconts)
5349 parameter (max_dim=2*(8*3+2))
5350 parameter (msglen1=max_cont*max_dim*4)
5351 parameter (msglen2=2*msglen1)
5352 integer source,CorrelType,CorrelID,Error
5353 double precision buffer(max_cont,max_dim)
5355 double precision gx(3),gx1(3)
5358 C Set lprn=.true. for debugging
5363 if (fgProcs.le.1) goto 30
5365 write (iout,'(a)') 'Contact function values:'
5367 write (iout,'(2i3,50(1x,i2,f5.2))')
5368 & i,num_cont_hb(i),(jcont_hb(j,i),facont_hb(j,i),
5369 & j=1,num_cont_hb(i))
5372 C Caution! Following code assumes that electrostatic interactions concerning
5373 C a given atom are split among at most two processors!
5383 cd write (iout,*) 'MyRank',MyRank,' mm',mm
5386 cd write (iout,*) 'Sending: MyRank',MyRank,' mm',mm,' ldone',ldone
5387 if (MyRank.gt.0) then
5388 C Send correlation contributions to the preceding processor
5390 nn=num_cont_hb(iatel_s)
5391 call pack_buffer(max_cont,max_dim,iatel_s,0,buffer)
5392 cd write (iout,*) 'The BUFFER array:'
5394 cd write (iout,'(i2,9(3f8.3,2x))') i,(buffer(i,j),j=1,26)
5396 if (ielstart(iatel_s).gt.iatel_s+ispp) then
5398 call pack_buffer(max_cont,max_dim,iatel_s+1,26,buffer)
5399 C Clear the contacts of the atom passed to the neighboring processor
5400 nn=num_cont_hb(iatel_s+1)
5402 cd write (iout,'(i2,9(3f8.3,2x))') i,(buffer(i,j+26),j=1,26)
5404 num_cont_hb(iatel_s)=0
5406 cd write (iout,*) 'Processor ',MyID,MyRank,
5407 cd & ' is sending correlation contribution to processor',MyID-1,
5408 cd & ' msglen=',msglen
5409 cd write (*,*) 'Processor ',MyID,MyRank,
5410 cd & ' is sending correlation contribution to processor',MyID-1,
5411 cd & ' msglen=',msglen,' CorrelType=',CorrelType
5412 call mp_bsend(buffer,msglen,MyID-1,CorrelType,CorrelID)
5413 cd write (iout,*) 'Processor ',MyID,
5414 cd & ' has sent correlation contribution to processor',MyID-1,
5415 cd & ' msglen=',msglen,' CorrelID=',CorrelID
5416 cd write (*,*) 'Processor ',MyID,
5417 cd & ' has sent correlation contribution to processor',MyID-1,
5418 cd & ' msglen=',msglen,' CorrelID=',CorrelID
5420 endif ! (MyRank.gt.0)
5424 cd write (iout,*) 'Receiving: MyRank',MyRank,' mm',mm,' ldone',ldone
5425 if (MyRank.lt.fgProcs-1) then
5426 C Receive correlation contributions from the next processor
5428 if (ielend(iatel_e).lt.nct-1) msglen=msglen2
5429 cd write (iout,*) 'Processor',MyID,
5430 cd & ' is receiving correlation contribution from processor',MyID+1,
5431 cd & ' msglen=',msglen,' CorrelType=',CorrelType
5432 cd write (*,*) 'Processor',MyID,
5433 cd & ' is receiving correlation contribution from processor',MyID+1,
5434 cd & ' msglen=',msglen,' CorrelType=',CorrelType
5436 do while (nbytes.le.0)
5437 call mp_probe(MyID+1,CorrelType,nbytes)
5439 cd print *,'Processor',MyID,' msglen',msglen,' nbytes',nbytes
5440 call mp_brecv(buffer,msglen,MyID+1,CorrelType,nbytes)
5441 cd write (iout,*) 'Processor',MyID,
5442 cd & ' has received correlation contribution from processor',MyID+1,
5443 cd & ' msglen=',msglen,' nbytes=',nbytes
5444 cd write (iout,*) 'The received BUFFER array:'
5446 cd write (iout,'(i2,9(3f8.3,2x))') i,(buffer(i,j),j=1,52)
5448 if (msglen.eq.msglen1) then
5449 call unpack_buffer(max_cont,max_dim,iatel_e+1,0,buffer)
5450 else if (msglen.eq.msglen2) then
5451 call unpack_buffer(max_cont,max_dim,iatel_e,0,buffer)
5452 call unpack_buffer(max_cont,max_dim,iatel_e+1,26,buffer)
5455 & 'ERROR!!!! message length changed while processing correlations.'
5457 & 'ERROR!!!! message length changed while processing correlations.'
5458 call mp_stopall(Error)
5459 endif ! msglen.eq.msglen1
5460 endif ! MyRank.lt.fgProcs-1
5467 write (iout,'(a)') 'Contact function values:'
5469 write (iout,'(2i3,50(1x,i2,f5.2))')
5470 & i,num_cont_hb(i),(jcont_hb(j,i),facont_hb(j,i),
5471 & j=1,num_cont_hb(i))
5475 C Remove the loop below after debugging !!!
5482 C Calculate the local-electrostatic correlation terms
5483 do i=iatel_s,iatel_e+1
5485 num_conti=num_cont_hb(i)
5486 num_conti1=num_cont_hb(i+1)
5491 c write (iout,*) 'i=',i,' j=',j,' i1=',i1,' j1=',j1,
5492 c & ' jj=',jj,' kk=',kk
5493 if (j1.eq.j+1 .or. j1.eq.j-1) then
5494 C Contacts I-J and (I+1)-(J+1) or (I+1)-(J-1) occur simultaneously.
5495 C The system gains extra energy.
5496 ecorr=ecorr+ehbcorr(i,j,i+1,j1,jj,kk,0.72D0,0.32D0)
5498 else if (j1.eq.j) then
5499 C Contacts I-J and I-(J+1) occur simultaneously.
5500 C The system loses extra energy.
5501 c ecorr=ecorr+ehbcorr(i,j,i+1,j,jj,kk,0.60D0,-0.40D0)
5506 c write (iout,*) 'i=',i,' j=',j,' i1=',i1,' j1=',j1,
5507 c & ' jj=',jj,' kk=',kk
5509 C Contacts I-J and (I+1)-J occur simultaneously.
5510 C The system loses extra energy.
5511 c ecorr=ecorr+ehbcorr(i,j,i,j+1,jj,kk,0.60D0,-0.40D0)
5518 c------------------------------------------------------------------------------
5519 subroutine multibody_eello(ecorr,ecorr5,ecorr6,eturn6,n_corr,
5521 C This subroutine calculates multi-body contributions to hydrogen-bonding
5522 implicit real*8 (a-h,o-z)
5523 include 'DIMENSIONS'
5524 include 'sizesclu.dat'
5525 include 'COMMON.IOUNITS'
5527 include 'COMMON.INFO'
5529 include 'COMMON.FFIELD'
5530 include 'COMMON.DERIV'
5531 include 'COMMON.INTERACT'
5532 include 'COMMON.CONTACTS'
5534 parameter (max_cont=maxconts)
5535 parameter (max_dim=2*(8*3+2))
5536 parameter (msglen1=max_cont*max_dim*4)
5537 parameter (msglen2=2*msglen1)
5538 integer source,CorrelType,CorrelID,Error
5539 double precision buffer(max_cont,max_dim)
5541 double precision gx(3),gx1(3)
5544 C Set lprn=.true. for debugging
5551 if (fgProcs.le.1) goto 30
5553 write (iout,'(a)') 'Contact function values:'
5555 write (iout,'(2i3,50(1x,i2,f5.2))')
5556 & i,num_cont_hb(i),(jcont_hb(j,i),facont_hb(j,i),
5557 & j=1,num_cont_hb(i))
5560 C Caution! Following code assumes that electrostatic interactions concerning
5561 C a given atom are split among at most two processors!
5571 cd write (iout,*) 'MyRank',MyRank,' mm',mm
5574 cd write (iout,*) 'Sending: MyRank',MyRank,' mm',mm,' ldone',ldone
5575 if (MyRank.gt.0) then
5576 C Send correlation contributions to the preceding processor
5578 nn=num_cont_hb(iatel_s)
5579 call pack_buffer(max_cont,max_dim,iatel_s,0,buffer)
5580 cd write (iout,*) 'The BUFFER array:'
5582 cd write (iout,'(i2,9(3f8.3,2x))') i,(buffer(i,j),j=1,26)
5584 if (ielstart(iatel_s).gt.iatel_s+ispp) then
5586 call pack_buffer(max_cont,max_dim,iatel_s+1,26,buffer)
5587 C Clear the contacts of the atom passed to the neighboring processor
5588 nn=num_cont_hb(iatel_s+1)
5590 cd write (iout,'(i2,9(3f8.3,2x))') i,(buffer(i,j+26),j=1,26)
5592 num_cont_hb(iatel_s)=0
5594 cd write (iout,*) 'Processor ',MyID,MyRank,
5595 cd & ' is sending correlation contribution to processor',MyID-1,
5596 cd & ' msglen=',msglen
5597 cd write (*,*) 'Processor ',MyID,MyRank,
5598 cd & ' is sending correlation contribution to processor',MyID-1,
5599 cd & ' msglen=',msglen,' CorrelType=',CorrelType
5600 call mp_bsend(buffer,msglen,MyID-1,CorrelType,CorrelID)
5601 cd write (iout,*) 'Processor ',MyID,
5602 cd & ' has sent correlation contribution to processor',MyID-1,
5603 cd & ' msglen=',msglen,' CorrelID=',CorrelID
5604 cd write (*,*) 'Processor ',MyID,
5605 cd & ' has sent correlation contribution to processor',MyID-1,
5606 cd & ' msglen=',msglen,' CorrelID=',CorrelID
5608 endif ! (MyRank.gt.0)
5612 cd write (iout,*) 'Receiving: MyRank',MyRank,' mm',mm,' ldone',ldone
5613 if (MyRank.lt.fgProcs-1) then
5614 C Receive correlation contributions from the next processor
5616 if (ielend(iatel_e).lt.nct-1) msglen=msglen2
5617 cd write (iout,*) 'Processor',MyID,
5618 cd & ' is receiving correlation contribution from processor',MyID+1,
5619 cd & ' msglen=',msglen,' CorrelType=',CorrelType
5620 cd write (*,*) 'Processor',MyID,
5621 cd & ' is receiving correlation contribution from processor',MyID+1,
5622 cd & ' msglen=',msglen,' CorrelType=',CorrelType
5624 do while (nbytes.le.0)
5625 call mp_probe(MyID+1,CorrelType,nbytes)
5627 cd print *,'Processor',MyID,' msglen',msglen,' nbytes',nbytes
5628 call mp_brecv(buffer,msglen,MyID+1,CorrelType,nbytes)
5629 cd write (iout,*) 'Processor',MyID,
5630 cd & ' has received correlation contribution from processor',MyID+1,
5631 cd & ' msglen=',msglen,' nbytes=',nbytes
5632 cd write (iout,*) 'The received BUFFER array:'
5634 cd write (iout,'(i2,9(3f8.3,2x))') i,(buffer(i,j),j=1,52)
5636 if (msglen.eq.msglen1) then
5637 call unpack_buffer(max_cont,max_dim,iatel_e+1,0,buffer)
5638 else if (msglen.eq.msglen2) then
5639 call unpack_buffer(max_cont,max_dim,iatel_e,0,buffer)
5640 call unpack_buffer(max_cont,max_dim,iatel_e+1,26,buffer)
5643 & 'ERROR!!!! message length changed while processing correlations.'
5645 & 'ERROR!!!! message length changed while processing correlations.'
5646 call mp_stopall(Error)
5647 endif ! msglen.eq.msglen1
5648 endif ! MyRank.lt.fgProcs-1
5655 write (iout,'(a)') 'Contact function values:'
5657 write (iout,'(2i3,50(1x,i2,f5.2))')
5658 & i,num_cont_hb(i),(jcont_hb(j,i),facont_hb(j,i),
5659 & j=1,num_cont_hb(i))
5665 C Remove the loop below after debugging !!!
5672 C Calculate the dipole-dipole interaction energies
5673 if (wcorr6.gt.0.0d0 .or. wturn6.gt.0.0d0) then
5674 do i=iatel_s,iatel_e+1
5675 num_conti=num_cont_hb(i)
5682 C Calculate the local-electrostatic correlation terms
5683 do i=iatel_s,iatel_e+1
5685 num_conti=num_cont_hb(i)
5686 num_conti1=num_cont_hb(i+1)
5691 c write (*,*) 'i=',i,' j=',j,' i1=',i1,' j1=',j1,
5692 c & ' jj=',jj,' kk=',kk
5693 if (j1.eq.j+1 .or. j1.eq.j-1) then
5694 C Contacts I-J and (I+1)-(J+1) or (I+1)-(J-1) occur simultaneously.
5695 C The system gains extra energy.
5697 sqd1=dsqrt(d_cont(jj,i))
5698 sqd2=dsqrt(d_cont(kk,i1))
5699 sred_geom = sqd1*sqd2
5700 IF (sred_geom.lt.cutoff_corr) THEN
5701 call gcont(sred_geom,r0_corr,1.0D0,delt_corr,
5703 c write (*,*) 'i=',i,' j=',j,' i1=',i1,' j1=',j1,
5704 c & ' jj=',jj,' kk=',kk
5705 fac_prim1=0.5d0*sqd2/sqd1*fprimcont
5706 fac_prim2=0.5d0*sqd1/sqd2*fprimcont
5708 g_contij(l,1)=fac_prim1*grij_hb_cont(l,jj,i)
5709 g_contij(l,2)=fac_prim2*grij_hb_cont(l,kk,i1)
5712 cd write (iout,*) 'sred_geom=',sred_geom,
5713 cd & ' ekont=',ekont,' fprim=',fprimcont
5714 call calc_eello(i,j,i+1,j1,jj,kk)
5715 if (wcorr4.gt.0.0d0)
5716 & ecorr=ecorr+eello4(i,j,i+1,j1,jj,kk)
5717 if (wcorr5.gt.0.0d0)
5718 & ecorr5=ecorr5+eello5(i,j,i+1,j1,jj,kk)
5719 c print *,"wcorr5",ecorr5
5720 cd write(2,*)'wcorr6',wcorr6,' wturn6',wturn6
5721 cd write(2,*)'ijkl',i,j,i+1,j1
5722 if (wcorr6.gt.0.0d0 .and. (j.ne.i+4 .or. j1.ne.i+3
5723 & .or. wturn6.eq.0.0d0))then
5724 c write (iout,*) '******ecorr6: i,j,i+1,j1',i,j,i+1,j1
5725 c ecorr6=ecorr6+eello6(i,j,i+1,j1,jj,kk)
5726 c write (iout,*) 'ecorr',ecorr,' ecorr5=',ecorr5,
5727 c & 'ecorr6=',ecorr6, wcorr6
5728 cd write (iout,'(4e15.5)') sred_geom,
5729 cd & dabs(eello4(i,j,i+1,j1,jj,kk)),
5730 cd & dabs(eello5(i,j,i+1,j1,jj,kk)),
5731 cd & dabs(eello6(i,j,i+1,j1,jj,kk))
5732 else if (wturn6.gt.0.0d0
5733 & .and. (j.eq.i+4 .and. j1.eq.i+3)) then
5734 cd write (iout,*) '******eturn6: i,j,i+1,j1',i,j,i+1,j1
5735 eturn6=eturn6+eello_turn6(i,jj,kk)
5736 cd write (2,*) 'multibody_eello:eturn6',eturn6
5740 else if (j1.eq.j) then
5741 C Contacts I-J and I-(J+1) occur simultaneously.
5742 C The system loses extra energy.
5743 c ecorr=ecorr+ehbcorr(i,j,i+1,j,jj,kk,0.60D0,-0.40D0)
5748 c write (iout,*) 'i=',i,' j=',j,' i1=',i1,' j1=',j1,
5749 c & ' jj=',jj,' kk=',kk
5751 C Contacts I-J and (I+1)-J occur simultaneously.
5752 C The system loses extra energy.
5753 c ecorr=ecorr+ehbcorr(i,j,i,j+1,jj,kk,0.60D0,-0.40D0)
5760 c------------------------------------------------------------------------------
5761 double precision function ehbcorr(i,j,k,l,jj,kk,coeffp,coeffm)
5762 implicit real*8 (a-h,o-z)
5763 include 'DIMENSIONS'
5764 include 'COMMON.IOUNITS'
5765 include 'COMMON.DERIV'
5766 include 'COMMON.INTERACT'
5767 include 'COMMON.CONTACTS'
5768 double precision gx(3),gx1(3)
5778 ees=-(coeffp*ees0pij*ees0pkl+coeffm*ees0mij*ees0mkl)
5779 cd ees=-(coeffp*ees0pkl+coeffm*ees0mkl)
5780 C Following 4 lines for diagnostics.
5785 c write (iout,*)'Contacts have occurred for peptide groups',i,j,
5787 c write (iout,*)'Contacts have occurred for peptide groups',
5788 c & i,j,' fcont:',eij,' eij',' eesij',ees0pij,ees0mij,' and ',k,l
5789 c & ,' fcont ',ekl,' eeskl',ees0pkl,ees0mkl,' ees=',ees
5790 C Calculate the multi-body contribution to energy.
5791 ecorr=ecorr+ekont*ees
5793 C Calculate multi-body contributions to the gradient.
5795 ghalf=0.5D0*ees*ekl*gacont_hbr(ll,jj,i)
5796 gradcorr(ll,i)=gradcorr(ll,i)+ghalf
5797 & -ekont*(coeffp*ees0pkl*gacontp_hb1(ll,jj,i)+
5798 & coeffm*ees0mkl*gacontm_hb1(ll,jj,i))
5799 gradcorr(ll,j)=gradcorr(ll,j)+ghalf
5800 & -ekont*(coeffp*ees0pkl*gacontp_hb2(ll,jj,i)+
5801 & coeffm*ees0mkl*gacontm_hb2(ll,jj,i))
5802 ghalf=0.5D0*ees*eij*gacont_hbr(ll,kk,k)
5803 gradcorr(ll,k)=gradcorr(ll,k)+ghalf
5804 & -ekont*(coeffp*ees0pij*gacontp_hb1(ll,kk,k)+
5805 & coeffm*ees0mij*gacontm_hb1(ll,kk,k))
5806 gradcorr(ll,l)=gradcorr(ll,l)+ghalf
5807 & -ekont*(coeffp*ees0pij*gacontp_hb2(ll,kk,k)+
5808 & coeffm*ees0mij*gacontm_hb2(ll,kk,k))
5812 gradcorr(ll,m)=gradcorr(ll,m)+
5813 & ees*ekl*gacont_hbr(ll,jj,i)-
5814 & ekont*(coeffp*ees0pkl*gacontp_hb3(ll,jj,i)+
5815 & coeffm*ees0mkl*gacontm_hb3(ll,jj,i))
5820 gradcorr(ll,m)=gradcorr(ll,m)+
5821 & ees*eij*gacont_hbr(ll,kk,k)-
5822 & ekont*(coeffp*ees0pij*gacontp_hb3(ll,kk,k)+
5823 & coeffm*ees0mij*gacontm_hb3(ll,kk,k))
5830 C---------------------------------------------------------------------------
5831 subroutine dipole(i,j,jj)
5832 implicit real*8 (a-h,o-z)
5833 include 'DIMENSIONS'
5834 include 'sizesclu.dat'
5835 include 'COMMON.IOUNITS'
5836 include 'COMMON.CHAIN'
5837 include 'COMMON.FFIELD'
5838 include 'COMMON.DERIV'
5839 include 'COMMON.INTERACT'
5840 include 'COMMON.CONTACTS'
5841 include 'COMMON.TORSION'
5842 include 'COMMON.VAR'
5843 include 'COMMON.GEO'
5844 dimension dipi(2,2),dipj(2,2),dipderi(2),dipderj(2),auxvec(2),
5846 iti1 = itortyp(itype(i+1))
5847 if (j.lt.nres-1) then
5848 itj1 = itortyp(itype(j+1))
5853 dipi(iii,1)=Ub2(iii,i)
5854 dipderi(iii)=Ub2der(iii,i)
5855 dipi(iii,2)=b1(iii,iti1)
5856 dipj(iii,1)=Ub2(iii,j)
5857 dipderj(iii)=Ub2der(iii,j)
5858 dipj(iii,2)=b1(iii,itj1)
5862 call matvec2(a_chuj(1,1,jj,i),dipj(1,iii),auxvec(1))
5865 dip(kkk,jj,i)=scalar2(dipi(1,jjj),auxvec(1))
5868 if (.not.calc_grad) return
5873 call matvec2(a_chuj_der(1,1,lll,kkk,jj,i),dipj(1,iii),
5877 dipderx(lll,kkk,mmm,jj,i)=scalar2(dipi(1,jjj),auxvec(1))
5882 call transpose2(a_chuj(1,1,jj,i),auxmat(1,1))
5883 call matvec2(auxmat(1,1),dipderi(1),auxvec(1))
5885 dipderg(iii,jj,i)=scalar2(auxvec(1),dipj(1,iii))
5887 call matvec2(a_chuj(1,1,jj,i),dipderj(1),auxvec(1))
5889 dipderg(iii+2,jj,i)=scalar2(auxvec(1),dipi(1,iii))
5893 C---------------------------------------------------------------------------
5894 subroutine calc_eello(i,j,k,l,jj,kk)
5896 C This subroutine computes matrices and vectors needed to calculate
5897 C the fourth-, fifth-, and sixth-order local-electrostatic terms.
5899 implicit real*8 (a-h,o-z)
5900 include 'DIMENSIONS'
5901 include 'sizesclu.dat'
5902 include 'COMMON.IOUNITS'
5903 include 'COMMON.CHAIN'
5904 include 'COMMON.DERIV'
5905 include 'COMMON.INTERACT'
5906 include 'COMMON.CONTACTS'
5907 include 'COMMON.TORSION'
5908 include 'COMMON.VAR'
5909 include 'COMMON.GEO'
5910 include 'COMMON.FFIELD'
5911 double precision aa1(2,2),aa2(2,2),aa1t(2,2),aa2t(2,2),
5912 & aa1tder(2,2,3,5),aa2tder(2,2,3,5),auxmat(2,2)
5915 cd write (iout,*) 'calc_eello: i=',i,' j=',j,' k=',k,' l=',l,
5916 cd & ' jj=',jj,' kk=',kk
5917 cd if (i.ne.2 .or. j.ne.4 .or. k.ne.3 .or. l.ne.5) return
5920 aa1(iii,jjj)=a_chuj(iii,jjj,jj,i)
5921 aa2(iii,jjj)=a_chuj(iii,jjj,kk,k)
5924 call transpose2(aa1(1,1),aa1t(1,1))
5925 call transpose2(aa2(1,1),aa2t(1,1))
5928 call transpose2(a_chuj_der(1,1,lll,kkk,jj,i),
5929 & aa1tder(1,1,lll,kkk))
5930 call transpose2(a_chuj_der(1,1,lll,kkk,kk,k),
5931 & aa2tder(1,1,lll,kkk))
5935 C parallel orientation of the two CA-CA-CA frames.
5937 iti=itortyp(itype(i))
5941 itk1=itortyp(itype(k+1))
5942 itj=itortyp(itype(j))
5943 if (l.lt.nres-1) then
5944 itl1=itortyp(itype(l+1))
5948 C A1 kernel(j+1) A2T
5950 cd write (iout,'(3f10.5,5x,3f10.5)')
5951 cd & (EUg(iii,jjj,k),jjj=1,2),(EUg(iii,jjj,l),jjj=1,2)
5953 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
5954 & aa2tder(1,1,1,1),1,.false.,EUg(1,1,l),EUgder(1,1,l),
5955 & AEA(1,1,1),AEAderg(1,1,1),AEAderx(1,1,1,1,1,1))
5956 C Following matrices are needed only for 6-th order cumulants
5957 IF (wcorr6.gt.0.0d0) THEN
5958 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
5959 & aa2tder(1,1,1,1),1,.false.,EUgC(1,1,l),EUgCder(1,1,l),
5960 & AECA(1,1,1),AECAderg(1,1,1),AECAderx(1,1,1,1,1,1))
5961 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
5962 & aa2tder(1,1,1,1),2,.false.,Ug2DtEUg(1,1,l),
5963 & Ug2DtEUgder(1,1,1,l),ADtEA(1,1,1),ADtEAderg(1,1,1,1),
5964 & ADtEAderx(1,1,1,1,1,1))
5966 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
5967 & aa2tder(1,1,1,1),2,.false.,DtUg2EUg(1,1,l),
5968 & DtUg2EUgder(1,1,1,l),ADtEA1(1,1,1),ADtEA1derg(1,1,1,1),
5969 & ADtEA1derx(1,1,1,1,1,1))
5971 C End 6-th order cumulants
5974 cd write (2,*) 'In calc_eello6'
5976 cd write (2,*) 'iii=',iii
5978 cd write (2,*) 'kkk=',kkk
5980 cd write (2,'(3(2f10.5),5x)')
5981 cd & ((ADtEA1derx(jjj,mmm,lll,kkk,iii,1),mmm=1,2),lll=1,3)
5986 call transpose2(EUgder(1,1,k),auxmat(1,1))
5987 call matmat2(auxmat(1,1),AEA(1,1,1),EAEAderg(1,1,1,1))
5988 call transpose2(EUg(1,1,k),auxmat(1,1))
5989 call matmat2(auxmat(1,1),AEA(1,1,1),EAEA(1,1,1))
5990 call matmat2(auxmat(1,1),AEAderg(1,1,1),EAEAderg(1,1,2,1))
5994 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,1),
5995 & EAEAderx(1,1,lll,kkk,iii,1))
5999 C A1T kernel(i+1) A2
6000 call kernel(aa1t(1,1),aa2(1,1),aa1tder(1,1,1,1),
6001 & a_chuj_der(1,1,1,1,kk,k),1,.false.,EUg(1,1,k),EUgder(1,1,k),
6002 & AEA(1,1,2),AEAderg(1,1,2),AEAderx(1,1,1,1,1,2))
6003 C Following matrices are needed only for 6-th order cumulants
6004 IF (wcorr6.gt.0.0d0) THEN
6005 call kernel(aa1t(1,1),aa2(1,1),aa1tder(1,1,1,1),
6006 & a_chuj_der(1,1,1,1,kk,k),1,.false.,EUgC(1,1,k),EUgCder(1,1,k),
6007 & AECA(1,1,2),AECAderg(1,1,2),AECAderx(1,1,1,1,1,2))
6008 call kernel(aa1t(1,1),aa2(1,1),aa1tder(1,1,1,1),
6009 & a_chuj_der(1,1,1,1,kk,k),2,.false.,Ug2DtEUg(1,1,k),
6010 & Ug2DtEUgder(1,1,1,k),ADtEA(1,1,2),ADtEAderg(1,1,1,2),
6011 & ADtEAderx(1,1,1,1,1,2))
6012 call kernel(aa1t(1,1),aa2(1,1),aa1tder(1,1,1,1),
6013 & a_chuj_der(1,1,1,1,kk,k),2,.false.,DtUg2EUg(1,1,k),
6014 & DtUg2EUgder(1,1,1,k),ADtEA1(1,1,2),ADtEA1derg(1,1,1,2),
6015 & ADtEA1derx(1,1,1,1,1,2))
6017 C End 6-th order cumulants
6018 call transpose2(EUgder(1,1,l),auxmat(1,1))
6019 call matmat2(auxmat(1,1),AEA(1,1,2),EAEAderg(1,1,1,2))
6020 call transpose2(EUg(1,1,l),auxmat(1,1))
6021 call matmat2(auxmat(1,1),AEA(1,1,2),EAEA(1,1,2))
6022 call matmat2(auxmat(1,1),AEAderg(1,1,2),EAEAderg(1,1,2,2))
6026 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,2),
6027 & EAEAderx(1,1,lll,kkk,iii,2))
6032 C Calculate the vectors and their derivatives in virtual-bond dihedral angles.
6033 C They are needed only when the fifth- or the sixth-order cumulants are
6035 IF (wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0) THEN
6036 call transpose2(AEA(1,1,1),auxmat(1,1))
6037 call matvec2(auxmat(1,1),b1(1,iti),AEAb1(1,1,1))
6038 call matvec2(auxmat(1,1),Ub2(1,i),AEAb2(1,1,1))
6039 call matvec2(auxmat(1,1),Ub2der(1,i),AEAb2derg(1,2,1,1))
6040 call transpose2(AEAderg(1,1,1),auxmat(1,1))
6041 call matvec2(auxmat(1,1),b1(1,iti),AEAb1derg(1,1,1))
6042 call matvec2(auxmat(1,1),Ub2(1,i),AEAb2derg(1,1,1,1))
6043 call matvec2(AEA(1,1,1),b1(1,itk1),AEAb1(1,2,1))
6044 call matvec2(AEAderg(1,1,1),b1(1,itk1),AEAb1derg(1,2,1))
6045 call matvec2(AEA(1,1,1),Ub2(1,k+1),AEAb2(1,2,1))
6046 call matvec2(AEAderg(1,1,1),Ub2(1,k+1),AEAb2derg(1,1,2,1))
6047 call matvec2(AEA(1,1,1),Ub2der(1,k+1),AEAb2derg(1,2,2,1))
6048 call transpose2(AEA(1,1,2),auxmat(1,1))
6049 call matvec2(auxmat(1,1),b1(1,itj),AEAb1(1,1,2))
6050 call matvec2(auxmat(1,1),Ub2(1,j),AEAb2(1,1,2))
6051 call matvec2(auxmat(1,1),Ub2der(1,j),AEAb2derg(1,2,1,2))
6052 call transpose2(AEAderg(1,1,2),auxmat(1,1))
6053 call matvec2(auxmat(1,1),b1(1,itj),AEAb1derg(1,1,2))
6054 call matvec2(auxmat(1,1),Ub2(1,j),AEAb2derg(1,1,1,2))
6055 call matvec2(AEA(1,1,2),b1(1,itl1),AEAb1(1,2,2))
6056 call matvec2(AEAderg(1,1,2),b1(1,itl1),AEAb1derg(1,2,2))
6057 call matvec2(AEA(1,1,2),Ub2(1,l+1),AEAb2(1,2,2))
6058 call matvec2(AEAderg(1,1,2),Ub2(1,l+1),AEAb2derg(1,1,2,2))
6059 call matvec2(AEA(1,1,2),Ub2der(1,l+1),AEAb2derg(1,2,2,2))
6060 C Calculate the Cartesian derivatives of the vectors.
6064 call transpose2(AEAderx(1,1,lll,kkk,iii,1),auxmat(1,1))
6065 call matvec2(auxmat(1,1),b1(1,iti),
6066 & AEAb1derx(1,lll,kkk,iii,1,1))
6067 call matvec2(auxmat(1,1),Ub2(1,i),
6068 & AEAb2derx(1,lll,kkk,iii,1,1))
6069 call matvec2(AEAderx(1,1,lll,kkk,iii,1),b1(1,itk1),
6070 & AEAb1derx(1,lll,kkk,iii,2,1))
6071 call matvec2(AEAderx(1,1,lll,kkk,iii,1),Ub2(1,k+1),
6072 & AEAb2derx(1,lll,kkk,iii,2,1))
6073 call transpose2(AEAderx(1,1,lll,kkk,iii,2),auxmat(1,1))
6074 call matvec2(auxmat(1,1),b1(1,itj),
6075 & AEAb1derx(1,lll,kkk,iii,1,2))
6076 call matvec2(auxmat(1,1),Ub2(1,j),
6077 & AEAb2derx(1,lll,kkk,iii,1,2))
6078 call matvec2(AEAderx(1,1,lll,kkk,iii,2),b1(1,itl1),
6079 & AEAb1derx(1,lll,kkk,iii,2,2))
6080 call matvec2(AEAderx(1,1,lll,kkk,iii,2),Ub2(1,l+1),
6081 & AEAb2derx(1,lll,kkk,iii,2,2))
6088 C Antiparallel orientation of the two CA-CA-CA frames.
6090 iti=itortyp(itype(i))
6094 itk1=itortyp(itype(k+1))
6095 itl=itortyp(itype(l))
6096 itj=itortyp(itype(j))
6097 if (j.lt.nres-1) then
6098 itj1=itortyp(itype(j+1))
6102 C A2 kernel(j-1)T A1T
6103 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
6104 & aa2tder(1,1,1,1),1,.true.,EUg(1,1,j),EUgder(1,1,j),
6105 & AEA(1,1,1),AEAderg(1,1,1),AEAderx(1,1,1,1,1,1))
6106 C Following matrices are needed only for 6-th order cumulants
6107 IF (wcorr6.gt.0.0d0 .or. (wturn6.gt.0.0d0 .and.
6108 & j.eq.i+4 .and. l.eq.i+3)) THEN
6109 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
6110 & aa2tder(1,1,1,1),1,.true.,EUgC(1,1,j),EUgCder(1,1,j),
6111 & AECA(1,1,1),AECAderg(1,1,1),AECAderx(1,1,1,1,1,1))
6112 call kernel(aa2(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
6113 & aa2tder(1,1,1,1),2,.true.,Ug2DtEUg(1,1,j),
6114 & Ug2DtEUgder(1,1,1,j),ADtEA(1,1,1),ADtEAderg(1,1,1,1),
6115 & ADtEAderx(1,1,1,1,1,1))
6116 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
6117 & aa2tder(1,1,1,1),2,.true.,DtUg2EUg(1,1,j),
6118 & DtUg2EUgder(1,1,1,j),ADtEA1(1,1,1),ADtEA1derg(1,1,1,1),
6119 & ADtEA1derx(1,1,1,1,1,1))
6121 C End 6-th order cumulants
6122 call transpose2(EUgder(1,1,k),auxmat(1,1))
6123 call matmat2(auxmat(1,1),AEA(1,1,1),EAEAderg(1,1,1,1))
6124 call transpose2(EUg(1,1,k),auxmat(1,1))
6125 call matmat2(auxmat(1,1),AEA(1,1,1),EAEA(1,1,1))
6126 call matmat2(auxmat(1,1),AEAderg(1,1,1),EAEAderg(1,1,2,1))
6130 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,1),
6131 & EAEAderx(1,1,lll,kkk,iii,1))
6135 C A2T kernel(i+1)T A1
6136 call kernel(aa2t(1,1),aa1(1,1),aa2tder(1,1,1,1),
6137 & a_chuj_der(1,1,1,1,jj,i),1,.true.,EUg(1,1,k),EUgder(1,1,k),
6138 & AEA(1,1,2),AEAderg(1,1,2),AEAderx(1,1,1,1,1,2))
6139 C Following matrices are needed only for 6-th order cumulants
6140 IF (wcorr6.gt.0.0d0 .or. (wturn6.gt.0.0d0 .and.
6141 & j.eq.i+4 .and. l.eq.i+3)) THEN
6142 call kernel(aa2t(1,1),aa1(1,1),aa2tder(1,1,1,1),
6143 & a_chuj_der(1,1,1,1,jj,i),1,.true.,EUgC(1,1,k),EUgCder(1,1,k),
6144 & AECA(1,1,2),AECAderg(1,1,2),AECAderx(1,1,1,1,1,2))
6145 call kernel(aa2t(1,1),aa1(1,1),aa2tder(1,1,1,1),
6146 & a_chuj_der(1,1,1,1,jj,i),2,.true.,Ug2DtEUg(1,1,k),
6147 & Ug2DtEUgder(1,1,1,k),ADtEA(1,1,2),ADtEAderg(1,1,1,2),
6148 & ADtEAderx(1,1,1,1,1,2))
6149 call kernel(aa2t(1,1),aa1(1,1),aa2tder(1,1,1,1),
6150 & a_chuj_der(1,1,1,1,jj,i),2,.true.,DtUg2EUg(1,1,k),
6151 & DtUg2EUgder(1,1,1,k),ADtEA1(1,1,2),ADtEA1derg(1,1,1,2),
6152 & ADtEA1derx(1,1,1,1,1,2))
6154 C End 6-th order cumulants
6155 call transpose2(EUgder(1,1,j),auxmat(1,1))
6156 call matmat2(auxmat(1,1),AEA(1,1,1),EAEAderg(1,1,2,2))
6157 call transpose2(EUg(1,1,j),auxmat(1,1))
6158 call matmat2(auxmat(1,1),AEA(1,1,2),EAEA(1,1,2))
6159 call matmat2(auxmat(1,1),AEAderg(1,1,2),EAEAderg(1,1,2,2))
6163 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,2),
6164 & EAEAderx(1,1,lll,kkk,iii,2))
6169 C Calculate the vectors and their derivatives in virtual-bond dihedral angles.
6170 C They are needed only when the fifth- or the sixth-order cumulants are
6172 IF (wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0 .or.
6173 & (wturn6.gt.0.0d0 .and. j.eq.i+4 .and. l.eq.i+3)) THEN
6174 call transpose2(AEA(1,1,1),auxmat(1,1))
6175 call matvec2(auxmat(1,1),b1(1,iti),AEAb1(1,1,1))
6176 call matvec2(auxmat(1,1),Ub2(1,i),AEAb2(1,1,1))
6177 call matvec2(auxmat(1,1),Ub2der(1,i),AEAb2derg(1,2,1,1))
6178 call transpose2(AEAderg(1,1,1),auxmat(1,1))
6179 call matvec2(auxmat(1,1),b1(1,iti),AEAb1derg(1,1,1))
6180 call matvec2(auxmat(1,1),Ub2(1,i),AEAb2derg(1,1,1,1))
6181 call matvec2(AEA(1,1,1),b1(1,itk1),AEAb1(1,2,1))
6182 call matvec2(AEAderg(1,1,1),b1(1,itk1),AEAb1derg(1,2,1))
6183 call matvec2(AEA(1,1,1),Ub2(1,k+1),AEAb2(1,2,1))
6184 call matvec2(AEAderg(1,1,1),Ub2(1,k+1),AEAb2derg(1,1,2,1))
6185 call matvec2(AEA(1,1,1),Ub2der(1,k+1),AEAb2derg(1,2,2,1))
6186 call transpose2(AEA(1,1,2),auxmat(1,1))
6187 call matvec2(auxmat(1,1),b1(1,itj1),AEAb1(1,1,2))
6188 call matvec2(auxmat(1,1),Ub2(1,l),AEAb2(1,1,2))
6189 call matvec2(auxmat(1,1),Ub2der(1,l),AEAb2derg(1,2,1,2))
6190 call transpose2(AEAderg(1,1,2),auxmat(1,1))
6191 call matvec2(auxmat(1,1),b1(1,itl),AEAb1(1,1,2))
6192 call matvec2(auxmat(1,1),Ub2(1,l),AEAb2derg(1,1,1,2))
6193 call matvec2(AEA(1,1,2),b1(1,itj1),AEAb1(1,2,2))
6194 call matvec2(AEAderg(1,1,2),b1(1,itj1),AEAb1derg(1,2,2))
6195 call matvec2(AEA(1,1,2),Ub2(1,j),AEAb2(1,2,2))
6196 call matvec2(AEAderg(1,1,2),Ub2(1,j),AEAb2derg(1,1,2,2))
6197 call matvec2(AEA(1,1,2),Ub2der(1,j),AEAb2derg(1,2,2,2))
6198 C Calculate the Cartesian derivatives of the vectors.
6202 call transpose2(AEAderx(1,1,lll,kkk,iii,1),auxmat(1,1))
6203 call matvec2(auxmat(1,1),b1(1,iti),
6204 & AEAb1derx(1,lll,kkk,iii,1,1))
6205 call matvec2(auxmat(1,1),Ub2(1,i),
6206 & AEAb2derx(1,lll,kkk,iii,1,1))
6207 call matvec2(AEAderx(1,1,lll,kkk,iii,1),b1(1,itk1),
6208 & AEAb1derx(1,lll,kkk,iii,2,1))
6209 call matvec2(AEAderx(1,1,lll,kkk,iii,1),Ub2(1,k+1),
6210 & AEAb2derx(1,lll,kkk,iii,2,1))
6211 call transpose2(AEAderx(1,1,lll,kkk,iii,2),auxmat(1,1))
6212 call matvec2(auxmat(1,1),b1(1,itl),
6213 & AEAb1derx(1,lll,kkk,iii,1,2))
6214 call matvec2(auxmat(1,1),Ub2(1,l),
6215 & AEAb2derx(1,lll,kkk,iii,1,2))
6216 call matvec2(AEAderx(1,1,lll,kkk,iii,2),b1(1,itj1),
6217 & AEAb1derx(1,lll,kkk,iii,2,2))
6218 call matvec2(AEAderx(1,1,lll,kkk,iii,2),Ub2(1,j),
6219 & AEAb2derx(1,lll,kkk,iii,2,2))
6228 C---------------------------------------------------------------------------
6229 subroutine kernel(aa1,aa2t,aa1derx,aa2tderx,nderg,transp,
6230 & KK,KKderg,AKA,AKAderg,AKAderx)
6234 double precision aa1(2,2),aa2t(2,2),aa1derx(2,2,3,5),
6235 & aa2tderx(2,2,3,5),KK(2,2),KKderg(2,2,nderg),AKA(2,2),
6236 & AKAderg(2,2,nderg),AKAderx(2,2,3,5,2)
6241 call prodmat3(aa1(1,1),aa2t(1,1),KK(1,1),transp,AKA(1,1))
6243 call prodmat3(aa1(1,1),aa2t(1,1),KKderg(1,1,iii),transp,
6246 cd if (lprn) write (2,*) 'In kernel'
6248 cd if (lprn) write (2,*) 'kkk=',kkk
6250 call prodmat3(aa1derx(1,1,lll,kkk),aa2t(1,1),
6251 & KK(1,1),transp,AKAderx(1,1,lll,kkk,1))
6253 cd write (2,*) 'lll=',lll
6254 cd write (2,*) 'iii=1'
6256 cd write (2,'(3(2f10.5),5x)')
6257 cd & (AKAderx(jjj,mmm,lll,kkk,1),mmm=1,2)
6260 call prodmat3(aa1(1,1),aa2tderx(1,1,lll,kkk),
6261 & KK(1,1),transp,AKAderx(1,1,lll,kkk,2))
6263 cd write (2,*) 'lll=',lll
6264 cd write (2,*) 'iii=2'
6266 cd write (2,'(3(2f10.5),5x)')
6267 cd & (AKAderx(jjj,mmm,lll,kkk,2),mmm=1,2)
6274 C---------------------------------------------------------------------------
6275 double precision function eello4(i,j,k,l,jj,kk)
6276 implicit real*8 (a-h,o-z)
6277 include 'DIMENSIONS'
6278 include 'sizesclu.dat'
6279 include 'COMMON.IOUNITS'
6280 include 'COMMON.CHAIN'
6281 include 'COMMON.DERIV'
6282 include 'COMMON.INTERACT'
6283 include 'COMMON.CONTACTS'
6284 include 'COMMON.TORSION'
6285 include 'COMMON.VAR'
6286 include 'COMMON.GEO'
6287 double precision pizda(2,2),ggg1(3),ggg2(3)
6288 cd if (i.ne.1 .or. j.ne.5 .or. k.ne.2 .or.l.ne.4) then
6292 cd print *,'eello4:',i,j,k,l,jj,kk
6293 cd write (2,*) 'i',i,' j',j,' k',k,' l',l
6294 cd call checkint4(i,j,k,l,jj,kk,eel4_num)
6295 cold eij=facont_hb(jj,i)
6296 cold ekl=facont_hb(kk,k)
6298 eel4=-EAEA(1,1,1)-EAEA(2,2,1)
6300 cd eel41=-EAEA(1,1,2)-EAEA(2,2,2)
6301 gcorr_loc(k-1)=gcorr_loc(k-1)
6302 & -ekont*(EAEAderg(1,1,1,1)+EAEAderg(2,2,1,1))
6304 gcorr_loc(l-1)=gcorr_loc(l-1)
6305 & -ekont*(EAEAderg(1,1,2,1)+EAEAderg(2,2,2,1))
6307 gcorr_loc(j-1)=gcorr_loc(j-1)
6308 & -ekont*(EAEAderg(1,1,2,1)+EAEAderg(2,2,2,1))
6313 derx(lll,kkk,iii)=-EAEAderx(1,1,lll,kkk,iii,1)
6314 & -EAEAderx(2,2,lll,kkk,iii,1)
6315 cd derx(lll,kkk,iii)=0.0d0
6319 cd gcorr_loc(l-1)=0.0d0
6320 cd gcorr_loc(j-1)=0.0d0
6321 cd gcorr_loc(k-1)=0.0d0
6323 cd write (iout,*)'Contacts have occurred for peptide groups',
6324 cd & i,j,' fcont:',eij,' eij',' and ',k,l,
6325 cd & ' fcont ',ekl,' eel4=',eel4,' eel4_num',16*eel4_num
6326 if (j.lt.nres-1) then
6333 if (l.lt.nres-1) then
6341 cold ghalf=0.5d0*eel4*ekl*gacont_hbr(ll,jj,i)
6342 ggg1(ll)=eel4*g_contij(ll,1)
6343 ggg2(ll)=eel4*g_contij(ll,2)
6344 ghalf=0.5d0*ggg1(ll)
6346 gradcorr(ll,i)=gradcorr(ll,i)+ghalf+ekont*derx(ll,2,1)
6347 gradcorr(ll,i+1)=gradcorr(ll,i+1)+ekont*derx(ll,3,1)
6348 gradcorr(ll,j)=gradcorr(ll,j)+ghalf+ekont*derx(ll,4,1)
6349 gradcorr(ll,j1)=gradcorr(ll,j1)+ekont*derx(ll,5,1)
6350 cold ghalf=0.5d0*eel4*eij*gacont_hbr(ll,kk,k)
6351 ghalf=0.5d0*ggg2(ll)
6353 gradcorr(ll,k)=gradcorr(ll,k)+ghalf+ekont*derx(ll,2,2)
6354 gradcorr(ll,k+1)=gradcorr(ll,k+1)+ekont*derx(ll,3,2)
6355 gradcorr(ll,l)=gradcorr(ll,l)+ghalf+ekont*derx(ll,4,2)
6356 gradcorr(ll,l1)=gradcorr(ll,l1)+ekont*derx(ll,5,2)
6361 cold gradcorr(ll,m)=gradcorr(ll,m)+eel4*ekl*gacont_hbr(ll,jj,i)
6362 gradcorr(ll,m)=gradcorr(ll,m)+ggg1(ll)
6367 cold gradcorr(ll,m)=gradcorr(ll,m)+eel4*eij*gacont_hbr(ll,kk,k)
6368 gradcorr(ll,m)=gradcorr(ll,m)+ggg2(ll)
6374 gradcorr(ll,m)=gradcorr(ll,m)+ekont*derx(ll,1,1)
6379 gradcorr(ll,m)=gradcorr(ll,m)+ekont*derx(ll,1,2)
6383 cd write (2,*) iii,gcorr_loc(iii)
6387 cd write (2,*) 'ekont',ekont
6388 cd write (iout,*) 'eello4',ekont*eel4
6391 C---------------------------------------------------------------------------
6392 double precision function eello5(i,j,k,l,jj,kk)
6393 implicit real*8 (a-h,o-z)
6394 include 'DIMENSIONS'
6395 include 'sizesclu.dat'
6396 include 'COMMON.IOUNITS'
6397 include 'COMMON.CHAIN'
6398 include 'COMMON.DERIV'
6399 include 'COMMON.INTERACT'
6400 include 'COMMON.CONTACTS'
6401 include 'COMMON.TORSION'
6402 include 'COMMON.VAR'
6403 include 'COMMON.GEO'
6404 double precision pizda(2,2),auxmat(2,2),auxmat1(2,2),vv(2)
6405 double precision ggg1(3),ggg2(3)
6406 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
6411 C /l\ / \ \ / \ / \ / C
6412 C / \ / \ \ / \ / \ / C
6413 C j| o |l1 | o | o| o | | o |o C
6414 C \ |/k\| |/ \| / |/ \| |/ \| C
6415 C \i/ \ / \ / / \ / \ C
6417 C (I) (II) (III) (IV) C
6419 C eello5_1 eello5_2 eello5_3 eello5_4 C
6421 C Antiparallel chains C
6424 C /j\ / \ \ / \ / \ / C
6425 C / \ / \ \ / \ / \ / C
6426 C j1| o |l | o | o| o | | o |o C
6427 C \ |/k\| |/ \| / |/ \| |/ \| C
6428 C \i/ \ / \ / / \ / \ C
6430 C (I) (II) (III) (IV) C
6432 C eello5_1 eello5_2 eello5_3 eello5_4 C
6434 C o denotes a local interaction, vertical lines an electrostatic interaction. C
6436 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
6437 cd if (i.ne.2 .or. j.ne.6 .or. k.ne.3 .or. l.ne.5) then
6442 cd & 'EELLO5: Contacts have occurred for peptide groups',i,j,
6444 itk=itortyp(itype(k))
6445 itl=itortyp(itype(l))
6446 itj=itortyp(itype(j))
6451 cd call checkint5(i,j,k,l,jj,kk,eel5_1_num,eel5_2_num,
6452 cd & eel5_3_num,eel5_4_num)
6456 derx(lll,kkk,iii)=0.0d0
6460 cd eij=facont_hb(jj,i)
6461 cd ekl=facont_hb(kk,k)
6463 cd write (iout,*)'Contacts have occurred for peptide groups',
6464 cd & i,j,' fcont:',eij,' eij',' and ',k,l
6466 C Contribution from the graph I.
6467 cd write (2,*) 'AEA ',AEA(1,1,1),AEA(2,1,1),AEA(1,2,1),AEA(2,2,1)
6468 cd write (2,*) 'AEAb2',AEAb2(1,1,1),AEAb2(2,1,1)
6469 call transpose2(EUg(1,1,k),auxmat(1,1))
6470 call matmat2(AEA(1,1,1),auxmat(1,1),pizda(1,1))
6471 vv(1)=pizda(1,1)-pizda(2,2)
6472 vv(2)=pizda(1,2)+pizda(2,1)
6473 eello5_1=scalar2(AEAb2(1,1,1),Ub2(1,k))
6474 & +0.5d0*scalar2(vv(1),Dtobr2(1,i))
6476 C Explicit gradient in virtual-dihedral angles.
6477 if (i.gt.1) g_corr5_loc(i-1)=g_corr5_loc(i-1)
6478 & +ekont*(scalar2(AEAb2derg(1,2,1,1),Ub2(1,k))
6479 & +0.5d0*scalar2(vv(1),Dtobr2der(1,i)))
6480 call transpose2(EUgder(1,1,k),auxmat1(1,1))
6481 call matmat2(AEA(1,1,1),auxmat1(1,1),pizda(1,1))
6482 vv(1)=pizda(1,1)-pizda(2,2)
6483 vv(2)=pizda(1,2)+pizda(2,1)
6484 g_corr5_loc(k-1)=g_corr5_loc(k-1)
6485 & +ekont*(scalar2(AEAb2(1,1,1),Ub2der(1,k))
6486 & +0.5d0*scalar2(vv(1),Dtobr2(1,i)))
6487 call matmat2(AEAderg(1,1,1),auxmat(1,1),pizda(1,1))
6488 vv(1)=pizda(1,1)-pizda(2,2)
6489 vv(2)=pizda(1,2)+pizda(2,1)
6491 if (l.lt.nres-1) g_corr5_loc(l-1)=g_corr5_loc(l-1)
6492 & +ekont*(scalar2(AEAb2derg(1,1,1,1),Ub2(1,k))
6493 & +0.5d0*scalar2(vv(1),Dtobr2(1,i)))
6495 if (j.lt.nres-1) g_corr5_loc(j-1)=g_corr5_loc(j-1)
6496 & +ekont*(scalar2(AEAb2derg(1,1,1,1),Ub2(1,k))
6497 & +0.5d0*scalar2(vv(1),Dtobr2(1,i)))
6499 C Cartesian gradient
6503 call matmat2(AEAderx(1,1,lll,kkk,iii,1),auxmat(1,1),
6505 vv(1)=pizda(1,1)-pizda(2,2)
6506 vv(2)=pizda(1,2)+pizda(2,1)
6507 derx(lll,kkk,iii)=derx(lll,kkk,iii)
6508 & +scalar2(AEAb2derx(1,lll,kkk,iii,1,1),Ub2(1,k))
6509 & +0.5d0*scalar2(vv(1),Dtobr2(1,i))
6516 C Contribution from graph II
6517 call transpose2(EE(1,1,itk),auxmat(1,1))
6518 call matmat2(auxmat(1,1),AEA(1,1,1),pizda(1,1))
6519 vv(1)=pizda(1,1)+pizda(2,2)
6520 vv(2)=pizda(2,1)-pizda(1,2)
6521 eello5_2=scalar2(AEAb1(1,2,1),b1(1,itk))
6522 & -0.5d0*scalar2(vv(1),Ctobr(1,k))
6524 C Explicit gradient in virtual-dihedral angles.
6525 g_corr5_loc(k-1)=g_corr5_loc(k-1)
6526 & -0.5d0*ekont*scalar2(vv(1),Ctobrder(1,k))
6527 call matmat2(auxmat(1,1),AEAderg(1,1,1),pizda(1,1))
6528 vv(1)=pizda(1,1)+pizda(2,2)
6529 vv(2)=pizda(2,1)-pizda(1,2)
6531 g_corr5_loc(l-1)=g_corr5_loc(l-1)
6532 & +ekont*(scalar2(AEAb1derg(1,2,1),b1(1,itk))
6533 & -0.5d0*scalar2(vv(1),Ctobr(1,k)))
6535 g_corr5_loc(j-1)=g_corr5_loc(j-1)
6536 & +ekont*(scalar2(AEAb1derg(1,2,1),b1(1,itk))
6537 & -0.5d0*scalar2(vv(1),Ctobr(1,k)))
6539 C Cartesian gradient
6543 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,1),
6545 vv(1)=pizda(1,1)+pizda(2,2)
6546 vv(2)=pizda(2,1)-pizda(1,2)
6547 derx(lll,kkk,iii)=derx(lll,kkk,iii)
6548 & +scalar2(AEAb1derx(1,lll,kkk,iii,2,1),b1(1,itk))
6549 & -0.5d0*scalar2(vv(1),Ctobr(1,k))
6558 C Parallel orientation
6559 C Contribution from graph III
6560 call transpose2(EUg(1,1,l),auxmat(1,1))
6561 call matmat2(AEA(1,1,2),auxmat(1,1),pizda(1,1))
6562 vv(1)=pizda(1,1)-pizda(2,2)
6563 vv(2)=pizda(1,2)+pizda(2,1)
6564 eello5_3=scalar2(AEAb2(1,1,2),Ub2(1,l))
6565 & +0.5d0*scalar2(vv(1),Dtobr2(1,j))
6567 C Explicit gradient in virtual-dihedral angles.
6568 g_corr5_loc(j-1)=g_corr5_loc(j-1)
6569 & +ekont*(scalar2(AEAb2derg(1,2,1,2),Ub2(1,l))
6570 & +0.5d0*scalar2(vv(1),Dtobr2der(1,j)))
6571 call matmat2(AEAderg(1,1,2),auxmat(1,1),pizda(1,1))
6572 vv(1)=pizda(1,1)-pizda(2,2)
6573 vv(2)=pizda(1,2)+pizda(2,1)
6574 g_corr5_loc(k-1)=g_corr5_loc(k-1)
6575 & +ekont*(scalar2(AEAb2derg(1,1,1,2),Ub2(1,l))
6576 & +0.5d0*scalar2(vv(1),Dtobr2(1,j)))
6577 call transpose2(EUgder(1,1,l),auxmat1(1,1))
6578 call matmat2(AEA(1,1,2),auxmat1(1,1),pizda(1,1))
6579 vv(1)=pizda(1,1)-pizda(2,2)
6580 vv(2)=pizda(1,2)+pizda(2,1)
6581 g_corr5_loc(l-1)=g_corr5_loc(l-1)
6582 & +ekont*(scalar2(AEAb2(1,1,2),Ub2der(1,l))
6583 & +0.5d0*scalar2(vv(1),Dtobr2(1,j)))
6584 C Cartesian gradient
6588 call matmat2(AEAderx(1,1,lll,kkk,iii,2),auxmat(1,1),
6590 vv(1)=pizda(1,1)-pizda(2,2)
6591 vv(2)=pizda(1,2)+pizda(2,1)
6592 derx(lll,kkk,iii)=derx(lll,kkk,iii)
6593 & +scalar2(AEAb2derx(1,lll,kkk,iii,1,2),Ub2(1,l))
6594 & +0.5d0*scalar2(vv(1),Dtobr2(1,j))
6600 C Contribution from graph IV
6602 call transpose2(EE(1,1,itl),auxmat(1,1))
6603 call matmat2(auxmat(1,1),AEA(1,1,2),pizda(1,1))
6604 vv(1)=pizda(1,1)+pizda(2,2)
6605 vv(2)=pizda(2,1)-pizda(1,2)
6606 eello5_4=scalar2(AEAb1(1,2,2),b1(1,itl))
6607 & -0.5d0*scalar2(vv(1),Ctobr(1,l))
6609 C Explicit gradient in virtual-dihedral angles.
6610 g_corr5_loc(l-1)=g_corr5_loc(l-1)
6611 & -0.5d0*ekont*scalar2(vv(1),Ctobrder(1,l))
6612 call matmat2(auxmat(1,1),AEAderg(1,1,2),pizda(1,1))
6613 vv(1)=pizda(1,1)+pizda(2,2)
6614 vv(2)=pizda(2,1)-pizda(1,2)
6615 g_corr5_loc(k-1)=g_corr5_loc(k-1)
6616 & +ekont*(scalar2(AEAb1derg(1,2,2),b1(1,itl))
6617 & -0.5d0*scalar2(vv(1),Ctobr(1,l)))
6618 C Cartesian gradient
6622 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,2),
6624 vv(1)=pizda(1,1)+pizda(2,2)
6625 vv(2)=pizda(2,1)-pizda(1,2)
6626 derx(lll,kkk,iii)=derx(lll,kkk,iii)
6627 & +scalar2(AEAb1derx(1,lll,kkk,iii,2,2),b1(1,itl))
6628 & -0.5d0*scalar2(vv(1),Ctobr(1,l))
6634 C Antiparallel orientation
6635 C Contribution from graph III
6637 call transpose2(EUg(1,1,j),auxmat(1,1))
6638 call matmat2(AEA(1,1,2),auxmat(1,1),pizda(1,1))
6639 vv(1)=pizda(1,1)-pizda(2,2)
6640 vv(2)=pizda(1,2)+pizda(2,1)
6641 eello5_3=scalar2(AEAb2(1,1,2),Ub2(1,j))
6642 & +0.5d0*scalar2(vv(1),Dtobr2(1,l))
6644 C Explicit gradient in virtual-dihedral angles.
6645 g_corr5_loc(l-1)=g_corr5_loc(l-1)
6646 & +ekont*(scalar2(AEAb2derg(1,2,1,2),Ub2(1,j))
6647 & +0.5d0*scalar2(vv(1),Dtobr2der(1,l)))
6648 call matmat2(AEAderg(1,1,2),auxmat(1,1),pizda(1,1))
6649 vv(1)=pizda(1,1)-pizda(2,2)
6650 vv(2)=pizda(1,2)+pizda(2,1)
6651 g_corr5_loc(k-1)=g_corr5_loc(k-1)
6652 & +ekont*(scalar2(AEAb2derg(1,1,1,2),Ub2(1,j))
6653 & +0.5d0*scalar2(vv(1),Dtobr2(1,l)))
6654 call transpose2(EUgder(1,1,j),auxmat1(1,1))
6655 call matmat2(AEA(1,1,2),auxmat1(1,1),pizda(1,1))
6656 vv(1)=pizda(1,1)-pizda(2,2)
6657 vv(2)=pizda(1,2)+pizda(2,1)
6658 g_corr5_loc(j-1)=g_corr5_loc(j-1)
6659 & +ekont*(scalar2(AEAb2(1,1,2),Ub2der(1,j))
6660 & +0.5d0*scalar2(vv(1),Dtobr2(1,l)))
6661 C Cartesian gradient
6665 call matmat2(AEAderx(1,1,lll,kkk,iii,2),auxmat(1,1),
6667 vv(1)=pizda(1,1)-pizda(2,2)
6668 vv(2)=pizda(1,2)+pizda(2,1)
6669 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)
6670 & +scalar2(AEAb2derx(1,lll,kkk,iii,1,2),Ub2(1,j))
6671 & +0.5d0*scalar2(vv(1),Dtobr2(1,l))
6677 C Contribution from graph IV
6679 call transpose2(EE(1,1,itj),auxmat(1,1))
6680 call matmat2(auxmat(1,1),AEA(1,1,2),pizda(1,1))
6681 vv(1)=pizda(1,1)+pizda(2,2)
6682 vv(2)=pizda(2,1)-pizda(1,2)
6683 eello5_4=scalar2(AEAb1(1,2,2),b1(1,itj))
6684 & -0.5d0*scalar2(vv(1),Ctobr(1,j))
6686 C Explicit gradient in virtual-dihedral angles.
6687 g_corr5_loc(j-1)=g_corr5_loc(j-1)
6688 & -0.5d0*ekont*scalar2(vv(1),Ctobrder(1,j))
6689 call matmat2(auxmat(1,1),AEAderg(1,1,2),pizda(1,1))
6690 vv(1)=pizda(1,1)+pizda(2,2)
6691 vv(2)=pizda(2,1)-pizda(1,2)
6692 g_corr5_loc(k-1)=g_corr5_loc(k-1)
6693 & +ekont*(scalar2(AEAb1derg(1,2,2),b1(1,itj))
6694 & -0.5d0*scalar2(vv(1),Ctobr(1,j)))
6695 C Cartesian gradient
6699 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,2),
6701 vv(1)=pizda(1,1)+pizda(2,2)
6702 vv(2)=pizda(2,1)-pizda(1,2)
6703 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)
6704 & +scalar2(AEAb1derx(1,lll,kkk,iii,2,2),b1(1,itj))
6705 & -0.5d0*scalar2(vv(1),Ctobr(1,j))
6712 eel5=eello5_1+eello5_2+eello5_3+eello5_4
6713 cd if (i.eq.2 .and. j.eq.8 .and. k.eq.3 .and. l.eq.7) then
6714 cd write (2,*) 'ijkl',i,j,k,l
6715 cd write (2,*) 'eello5_1',eello5_1,' eello5_2',eello5_2,
6716 cd & ' eello5_3',eello5_3,' eello5_4',eello5_4
6718 cd write(iout,*) 'eello5_1',eello5_1,' eel5_1_num',16*eel5_1_num
6719 cd write(iout,*) 'eello5_2',eello5_2,' eel5_2_num',16*eel5_2_num
6720 cd write(iout,*) 'eello5_3',eello5_3,' eel5_3_num',16*eel5_3_num
6721 cd write(iout,*) 'eello5_4',eello5_4,' eel5_4_num',16*eel5_4_num
6723 if (j.lt.nres-1) then
6730 if (l.lt.nres-1) then
6740 cd write (2,*) 'eij',eij,' ekl',ekl,' ekont',ekont
6742 ggg1(ll)=eel5*g_contij(ll,1)
6743 ggg2(ll)=eel5*g_contij(ll,2)
6744 cold ghalf=0.5d0*eel5*ekl*gacont_hbr(ll,jj,i)
6745 ghalf=0.5d0*ggg1(ll)
6747 gradcorr5(ll,i)=gradcorr5(ll,i)+ghalf+ekont*derx(ll,2,1)
6748 gradcorr5(ll,i+1)=gradcorr5(ll,i+1)+ekont*derx(ll,3,1)
6749 gradcorr5(ll,j)=gradcorr5(ll,j)+ghalf+ekont*derx(ll,4,1)
6750 gradcorr5(ll,j1)=gradcorr5(ll,j1)+ekont*derx(ll,5,1)
6751 cold ghalf=0.5d0*eel5*eij*gacont_hbr(ll,kk,k)
6752 ghalf=0.5d0*ggg2(ll)
6754 gradcorr5(ll,k)=gradcorr5(ll,k)+ghalf+ekont*derx(ll,2,2)
6755 gradcorr5(ll,k+1)=gradcorr5(ll,k+1)+ekont*derx(ll,3,2)
6756 gradcorr5(ll,l)=gradcorr5(ll,l)+ghalf+ekont*derx(ll,4,2)
6757 gradcorr5(ll,l1)=gradcorr5(ll,l1)+ekont*derx(ll,5,2)
6762 cold gradcorr5(ll,m)=gradcorr5(ll,m)+eel5*ekl*gacont_hbr(ll,jj,i)
6763 gradcorr5(ll,m)=gradcorr5(ll,m)+ggg1(ll)
6768 cold gradcorr5(ll,m)=gradcorr5(ll,m)+eel5*eij*gacont_hbr(ll,kk,k)
6769 gradcorr5(ll,m)=gradcorr5(ll,m)+ggg2(ll)
6775 gradcorr5(ll,m)=gradcorr5(ll,m)+ekont*derx(ll,1,1)
6780 gradcorr5(ll,m)=gradcorr5(ll,m)+ekont*derx(ll,1,2)
6784 cd write (2,*) iii,g_corr5_loc(iii)
6788 cd write (2,*) 'ekont',ekont
6789 cd write (iout,*) 'eello5',ekont*eel5
6792 c--------------------------------------------------------------------------
6793 double precision function eello6(i,j,k,l,jj,kk)
6794 implicit real*8 (a-h,o-z)
6795 include 'DIMENSIONS'
6796 include 'sizesclu.dat'
6797 include 'COMMON.IOUNITS'
6798 include 'COMMON.CHAIN'
6799 include 'COMMON.DERIV'
6800 include 'COMMON.INTERACT'
6801 include 'COMMON.CONTACTS'
6802 include 'COMMON.TORSION'
6803 include 'COMMON.VAR'
6804 include 'COMMON.GEO'
6805 include 'COMMON.FFIELD'
6806 double precision ggg1(3),ggg2(3)
6807 cd if (i.ne.1 .or. j.ne.3 .or. k.ne.2 .or. l.ne.4) then
6812 cd & 'EELLO6: Contacts have occurred for peptide groups',i,j,
6820 cd call checkint6(i,j,k,l,jj,kk,eel6_1_num,eel6_2_num,
6821 cd & eel6_3_num,eel6_4_num,eel6_5_num,eel6_6_num)
6825 derx(lll,kkk,iii)=0.0d0
6829 cd eij=facont_hb(jj,i)
6830 cd ekl=facont_hb(kk,k)
6836 eello6_1=eello6_graph1(i,j,k,l,1,.false.)
6837 eello6_2=eello6_graph1(j,i,l,k,2,.false.)
6838 eello6_3=eello6_graph2(i,j,k,l,jj,kk,.false.)
6839 eello6_4=eello6_graph4(i,j,k,l,jj,kk,1,.false.)
6840 eello6_5=eello6_graph4(j,i,l,k,jj,kk,2,.false.)
6841 eello6_6=eello6_graph3(i,j,k,l,jj,kk,.false.)
6843 eello6_1=eello6_graph1(i,j,k,l,1,.false.)
6844 eello6_2=eello6_graph1(l,k,j,i,2,.true.)
6845 eello6_3=eello6_graph2(i,l,k,j,jj,kk,.true.)
6846 eello6_4=eello6_graph4(i,j,k,l,jj,kk,1,.false.)
6847 if (wturn6.eq.0.0d0 .or. j.ne.i+4) then
6848 eello6_5=eello6_graph4(l,k,j,i,kk,jj,2,.true.)
6852 eello6_6=eello6_graph3(i,l,k,j,jj,kk,.true.)
6854 C If turn contributions are considered, they will be handled separately.
6855 eel6=eello6_1+eello6_2+eello6_3+eello6_4+eello6_5+eello6_6
6856 cd write(iout,*) 'eello6_1',eello6_1,' eel6_1_num',16*eel6_1_num
6857 cd write(iout,*) 'eello6_2',eello6_2,' eel6_2_num',16*eel6_2_num
6858 cd write(iout,*) 'eello6_3',eello6_3,' eel6_3_num',16*eel6_3_num
6859 cd write(iout,*) 'eello6_4',eello6_4,' eel6_4_num',16*eel6_4_num
6860 cd write(iout,*) 'eello6_5',eello6_5,' eel6_5_num',16*eel6_5_num
6861 cd write(iout,*) 'eello6_6',eello6_6,' eel6_6_num',16*eel6_6_num
6864 if (j.lt.nres-1) then
6871 if (l.lt.nres-1) then
6879 ggg1(ll)=eel6*g_contij(ll,1)
6880 ggg2(ll)=eel6*g_contij(ll,2)
6881 cold ghalf=0.5d0*eel6*ekl*gacont_hbr(ll,jj,i)
6882 ghalf=0.5d0*ggg1(ll)
6884 gradcorr6(ll,i)=gradcorr6(ll,i)+ghalf+ekont*derx(ll,2,1)
6885 gradcorr6(ll,i+1)=gradcorr6(ll,i+1)+ekont*derx(ll,3,1)
6886 gradcorr6(ll,j)=gradcorr6(ll,j)+ghalf+ekont*derx(ll,4,1)
6887 gradcorr6(ll,j1)=gradcorr6(ll,j1)+ekont*derx(ll,5,1)
6888 ghalf=0.5d0*ggg2(ll)
6889 cold ghalf=0.5d0*eel6*eij*gacont_hbr(ll,kk,k)
6891 gradcorr6(ll,k)=gradcorr6(ll,k)+ghalf+ekont*derx(ll,2,2)
6892 gradcorr6(ll,k+1)=gradcorr6(ll,k+1)+ekont*derx(ll,3,2)
6893 gradcorr6(ll,l)=gradcorr6(ll,l)+ghalf+ekont*derx(ll,4,2)
6894 gradcorr6(ll,l1)=gradcorr6(ll,l1)+ekont*derx(ll,5,2)
6899 cold gradcorr6(ll,m)=gradcorr6(ll,m)+eel6*ekl*gacont_hbr(ll,jj,i)
6900 gradcorr6(ll,m)=gradcorr6(ll,m)+ggg1(ll)
6905 cold gradcorr6(ll,m)=gradcorr6(ll,m)+eel6*eij*gacont_hbr(ll,kk,k)
6906 gradcorr6(ll,m)=gradcorr6(ll,m)+ggg2(ll)
6912 gradcorr6(ll,m)=gradcorr6(ll,m)+ekont*derx(ll,1,1)
6917 gradcorr6(ll,m)=gradcorr6(ll,m)+ekont*derx(ll,1,2)
6921 cd write (2,*) iii,g_corr6_loc(iii)
6925 cd write (2,*) 'ekont',ekont
6926 cd write (iout,*) 'eello6',ekont*eel6
6929 c--------------------------------------------------------------------------
6930 double precision function eello6_graph1(i,j,k,l,imat,swap)
6931 implicit real*8 (a-h,o-z)
6932 include 'DIMENSIONS'
6933 include 'sizesclu.dat'
6934 include 'COMMON.IOUNITS'
6935 include 'COMMON.CHAIN'
6936 include 'COMMON.DERIV'
6937 include 'COMMON.INTERACT'
6938 include 'COMMON.CONTACTS'
6939 include 'COMMON.TORSION'
6940 include 'COMMON.VAR'
6941 include 'COMMON.GEO'
6942 double precision vv(2),vv1(2),pizda(2,2),auxmat(2,2),pizda1(2,2)
6946 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
6948 C Parallel Antiparallel C
6954 C \ j|/k\| / \ |/k\|l / C
6959 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
6960 itk=itortyp(itype(k))
6961 s1= scalar2(AEAb1(1,2,imat),CUgb2(1,i))
6962 s2=-scalar2(AEAb2(1,1,imat),Ug2Db1t(1,k))
6963 s3= scalar2(AEAb2(1,1,imat),CUgb2(1,k))
6964 call transpose2(EUgC(1,1,k),auxmat(1,1))
6965 call matmat2(AEA(1,1,imat),auxmat(1,1),pizda1(1,1))
6966 vv1(1)=pizda1(1,1)-pizda1(2,2)
6967 vv1(2)=pizda1(1,2)+pizda1(2,1)
6968 s4=0.5d0*scalar2(vv1(1),Dtobr2(1,i))
6969 vv(1)=AEAb1(1,2,imat)*b1(1,itk)-AEAb1(2,2,imat)*b1(2,itk)
6970 vv(2)=AEAb1(1,2,imat)*b1(2,itk)+AEAb1(2,2,imat)*b1(1,itk)
6971 s5=scalar2(vv(1),Dtobr2(1,i))
6972 cd write (2,*) 's1',s1,' s2',s2,' s3',s3,' s4', s4,' s5',s5
6973 eello6_graph1=-0.5d0*(s1+s2+s3+s4+s5)
6974 if (.not. calc_grad) return
6975 if (i.gt.1) g_corr6_loc(i-1)=g_corr6_loc(i-1)
6976 & -0.5d0*ekont*(scalar2(AEAb1(1,2,imat),CUgb2der(1,i))
6977 & -scalar2(AEAb2derg(1,2,1,imat),Ug2Db1t(1,k))
6978 & +scalar2(AEAb2derg(1,2,1,imat),CUgb2(1,k))
6979 & +0.5d0*scalar2(vv1(1),Dtobr2der(1,i))
6980 & +scalar2(vv(1),Dtobr2der(1,i)))
6981 call matmat2(AEAderg(1,1,imat),auxmat(1,1),pizda1(1,1))
6982 vv1(1)=pizda1(1,1)-pizda1(2,2)
6983 vv1(2)=pizda1(1,2)+pizda1(2,1)
6984 vv(1)=AEAb1derg(1,2,imat)*b1(1,itk)-AEAb1derg(2,2,imat)*b1(2,itk)
6985 vv(2)=AEAb1derg(1,2,imat)*b1(2,itk)+AEAb1derg(2,2,imat)*b1(1,itk)
6987 g_corr6_loc(l-1)=g_corr6_loc(l-1)
6988 & +ekont*(-0.5d0*(scalar2(AEAb1derg(1,2,imat),CUgb2(1,i))
6989 & -scalar2(AEAb2derg(1,1,1,imat),Ug2Db1t(1,k))
6990 & +scalar2(AEAb2derg(1,1,1,imat),CUgb2(1,k))
6991 & +0.5d0*scalar2(vv1(1),Dtobr2(1,i))+scalar2(vv(1),Dtobr2(1,i))))
6993 g_corr6_loc(j-1)=g_corr6_loc(j-1)
6994 & +ekont*(-0.5d0*(scalar2(AEAb1derg(1,2,imat),CUgb2(1,i))
6995 & -scalar2(AEAb2derg(1,1,1,imat),Ug2Db1t(1,k))
6996 & +scalar2(AEAb2derg(1,1,1,imat),CUgb2(1,k))
6997 & +0.5d0*scalar2(vv1(1),Dtobr2(1,i))+scalar2(vv(1),Dtobr2(1,i))))
6999 call transpose2(EUgCder(1,1,k),auxmat(1,1))
7000 call matmat2(AEA(1,1,imat),auxmat(1,1),pizda1(1,1))
7001 vv1(1)=pizda1(1,1)-pizda1(2,2)
7002 vv1(2)=pizda1(1,2)+pizda1(2,1)
7003 if (k.gt.1) g_corr6_loc(k-1)=g_corr6_loc(k-1)
7004 & +ekont*(-0.5d0*(-scalar2(AEAb2(1,1,imat),Ug2Db1tder(1,k))
7005 & +scalar2(AEAb2(1,1,imat),CUgb2der(1,k))
7006 & +0.5d0*scalar2(vv1(1),Dtobr2(1,i))))
7015 s1= scalar2(AEAb1derx(1,lll,kkk,iii,2,imat),CUgb2(1,i))
7016 s2=-scalar2(AEAb2derx(1,lll,kkk,iii,1,imat),Ug2Db1t(1,k))
7017 s3= scalar2(AEAb2derx(1,lll,kkk,iii,1,imat),CUgb2(1,k))
7018 call transpose2(EUgC(1,1,k),auxmat(1,1))
7019 call matmat2(AEAderx(1,1,lll,kkk,iii,imat),auxmat(1,1),
7021 vv1(1)=pizda1(1,1)-pizda1(2,2)
7022 vv1(2)=pizda1(1,2)+pizda1(2,1)
7023 s4=0.5d0*scalar2(vv1(1),Dtobr2(1,i))
7024 vv(1)=AEAb1derx(1,lll,kkk,iii,2,imat)*b1(1,itk)
7025 & -AEAb1derx(2,lll,kkk,iii,2,imat)*b1(2,itk)
7026 vv(2)=AEAb1derx(1,lll,kkk,iii,2,imat)*b1(2,itk)
7027 & +AEAb1derx(2,lll,kkk,iii,2,imat)*b1(1,itk)
7028 s5=scalar2(vv(1),Dtobr2(1,i))
7029 derx(lll,kkk,ind)=derx(lll,kkk,ind)-0.5d0*(s1+s2+s3+s4+s5)
7035 c----------------------------------------------------------------------------
7036 double precision function eello6_graph2(i,j,k,l,jj,kk,swap)
7037 implicit real*8 (a-h,o-z)
7038 include 'DIMENSIONS'
7039 include 'sizesclu.dat'
7040 include 'COMMON.IOUNITS'
7041 include 'COMMON.CHAIN'
7042 include 'COMMON.DERIV'
7043 include 'COMMON.INTERACT'
7044 include 'COMMON.CONTACTS'
7045 include 'COMMON.TORSION'
7046 include 'COMMON.VAR'
7047 include 'COMMON.GEO'
7049 double precision vv(2),pizda(2,2),auxmat(2,2),auxvec(2),
7050 & auxvec1(2),auxvec2(2),auxmat1(2,2)
7053 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
7055 C Parallel Antiparallel C
7061 C \ j|/k\| \ |/k\|l C
7066 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
7067 cd write (2,*) 'eello6_graph2: i,',i,' j',j,' k',k,' l',l
7068 C AL 7/4/01 s1 would occur in the sixth-order moment,
7069 C but not in a cluster cumulant
7071 s1=dip(1,jj,i)*dip(1,kk,k)
7073 call matvec2(ADtEA1(1,1,1),Ub2(1,k),auxvec(1))
7074 s2=-0.5d0*scalar2(Ub2(1,i),auxvec(1))
7075 call matvec2(ADtEA(1,1,2),Ub2(1,l),auxvec1(1))
7076 s3=-0.5d0*scalar2(Ub2(1,j),auxvec1(1))
7077 call transpose2(EUg(1,1,k),auxmat(1,1))
7078 call matmat2(ADtEA1(1,1,1),auxmat(1,1),pizda(1,1))
7079 vv(1)=pizda(1,1)-pizda(2,2)
7080 vv(2)=pizda(1,2)+pizda(2,1)
7081 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
7082 cd write (2,*) 'eello6_graph2:','s1',s1,' s2',s2,' s3',s3,' s4',s4
7084 eello6_graph2=-(s1+s2+s3+s4)
7086 eello6_graph2=-(s2+s3+s4)
7089 if (.not. calc_grad) return
7090 C Derivatives in gamma(i-1)
7093 s1=dipderg(1,jj,i)*dip(1,kk,k)
7095 s2=-0.5d0*scalar2(Ub2der(1,i),auxvec(1))
7096 call matvec2(ADtEAderg(1,1,1,2),Ub2(1,l),auxvec2(1))
7097 s3=-0.5d0*scalar2(Ub2(1,j),auxvec2(1))
7098 s4=-0.25d0*scalar2(vv(1),Dtobr2der(1,i))
7100 g_corr6_loc(i-1)=g_corr6_loc(i-1)-ekont*(s1+s2+s3+s4)
7102 g_corr6_loc(i-1)=g_corr6_loc(i-1)-ekont*(s2+s3+s4)
7104 c g_corr6_loc(i-1)=g_corr6_loc(i-1)-s3
7106 C Derivatives in gamma(k-1)
7108 s1=dip(1,jj,i)*dipderg(1,kk,k)
7110 call matvec2(ADtEA1(1,1,1),Ub2der(1,k),auxvec2(1))
7111 s2=-0.5d0*scalar2(Ub2(1,i),auxvec2(1))
7112 call matvec2(ADtEAderg(1,1,2,2),Ub2(1,l),auxvec2(1))
7113 s3=-0.5d0*scalar2(Ub2(1,j),auxvec2(1))
7114 call transpose2(EUgder(1,1,k),auxmat1(1,1))
7115 call matmat2(ADtEA1(1,1,1),auxmat1(1,1),pizda(1,1))
7116 vv(1)=pizda(1,1)-pizda(2,2)
7117 vv(2)=pizda(1,2)+pizda(2,1)
7118 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
7120 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s1+s2+s3+s4)
7122 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s2+s3+s4)
7124 c g_corr6_loc(k-1)=g_corr6_loc(k-1)-s3
7125 C Derivatives in gamma(j-1) or gamma(l-1)
7128 s1=dipderg(3,jj,i)*dip(1,kk,k)
7130 call matvec2(ADtEA1derg(1,1,1,1),Ub2(1,k),auxvec2(1))
7131 s2=-0.5d0*scalar2(Ub2(1,i),auxvec2(1))
7132 s3=-0.5d0*scalar2(Ub2der(1,j),auxvec1(1))
7133 call matmat2(ADtEA1derg(1,1,1,1),auxmat(1,1),pizda(1,1))
7134 vv(1)=pizda(1,1)-pizda(2,2)
7135 vv(2)=pizda(1,2)+pizda(2,1)
7136 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
7139 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*s1
7141 g_corr6_loc(j-1)=g_corr6_loc(j-1)-ekont*s1
7144 g_corr6_loc(j-1)=g_corr6_loc(j-1)-ekont*(s2+s3+s4)
7145 c g_corr6_loc(j-1)=g_corr6_loc(j-1)-s3
7147 C Derivatives in gamma(l-1) or gamma(j-1)
7150 s1=dip(1,jj,i)*dipderg(3,kk,k)
7152 call matvec2(ADtEA1derg(1,1,2,1),Ub2(1,k),auxvec2(1))
7153 s2=-0.5d0*scalar2(Ub2(1,i),auxvec2(1))
7154 call matvec2(ADtEA(1,1,2),Ub2der(1,l),auxvec2(1))
7155 s3=-0.5d0*scalar2(Ub2(1,j),auxvec2(1))
7156 call matmat2(ADtEA1derg(1,1,2,1),auxmat(1,1),pizda(1,1))
7157 vv(1)=pizda(1,1)-pizda(2,2)
7158 vv(2)=pizda(1,2)+pizda(2,1)
7159 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
7162 g_corr6_loc(j-1)=g_corr6_loc(j-1)-ekont*s1
7164 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*s1
7167 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*(s2+s3+s4)
7168 c g_corr6_loc(l-1)=g_corr6_loc(l-1)-s3
7170 C Cartesian derivatives.
7172 write (2,*) 'In eello6_graph2'
7174 write (2,*) 'iii=',iii
7176 write (2,*) 'kkk=',kkk
7178 write (2,'(3(2f10.5),5x)')
7179 & ((ADtEA1derx(jjj,mmm,lll,kkk,iii,1),mmm=1,2),lll=1,3)
7189 s1=dipderx(lll,kkk,1,jj,i)*dip(1,kk,k)
7191 s1=dip(1,jj,i)*dipderx(lll,kkk,1,kk,k)
7194 call matvec2(ADtEA1derx(1,1,lll,kkk,iii,1),Ub2(1,k),
7196 s2=-0.5d0*scalar2(Ub2(1,i),auxvec(1))
7197 call matvec2(ADtEAderx(1,1,lll,kkk,iii,2),Ub2(1,l),
7199 s3=-0.5d0*scalar2(Ub2(1,j),auxvec(1))
7200 call transpose2(EUg(1,1,k),auxmat(1,1))
7201 call matmat2(ADtEA1derx(1,1,lll,kkk,iii,1),auxmat(1,1),
7203 vv(1)=pizda(1,1)-pizda(2,2)
7204 vv(2)=pizda(1,2)+pizda(2,1)
7205 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
7206 cd write (2,*) 's1',s1,' s2',s2,' s3',s3,' s4',s4
7208 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s1+s2+s4)
7210 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s2+s4)
7213 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-s3
7215 derx(lll,kkk,iii)=derx(lll,kkk,iii)-s3
7222 c----------------------------------------------------------------------------
7223 double precision function eello6_graph3(i,j,k,l,jj,kk,swap)
7224 implicit real*8 (a-h,o-z)
7225 include 'DIMENSIONS'
7226 include 'sizesclu.dat'
7227 include 'COMMON.IOUNITS'
7228 include 'COMMON.CHAIN'
7229 include 'COMMON.DERIV'
7230 include 'COMMON.INTERACT'
7231 include 'COMMON.CONTACTS'
7232 include 'COMMON.TORSION'
7233 include 'COMMON.VAR'
7234 include 'COMMON.GEO'
7235 double precision vv(2),pizda(2,2),auxmat(2,2),auxvec(2)
7237 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
7239 C Parallel Antiparallel C
7245 C j|/k\| / |/k\|l / C
7250 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
7252 C 4/7/01 AL Component s1 was removed, because it pertains to the respective
7253 C energy moment and not to the cluster cumulant.
7254 iti=itortyp(itype(i))
7255 if (j.lt.nres-1) then
7256 itj1=itortyp(itype(j+1))
7260 itk=itortyp(itype(k))
7261 itk1=itortyp(itype(k+1))
7262 if (l.lt.nres-1) then
7263 itl1=itortyp(itype(l+1))
7268 s1=dip(4,jj,i)*dip(4,kk,k)
7270 call matvec2(AECA(1,1,1),b1(1,itk1),auxvec(1))
7271 s2=0.5d0*scalar2(b1(1,itk),auxvec(1))
7272 call matvec2(AECA(1,1,2),b1(1,itl1),auxvec(1))
7273 s3=0.5d0*scalar2(b1(1,itj1),auxvec(1))
7274 call transpose2(EE(1,1,itk),auxmat(1,1))
7275 call matmat2(auxmat(1,1),AECA(1,1,1),pizda(1,1))
7276 vv(1)=pizda(1,1)+pizda(2,2)
7277 vv(2)=pizda(2,1)-pizda(1,2)
7278 s4=-0.25d0*scalar2(vv(1),Ctobr(1,k))
7279 cd write (2,*) 'eello6_graph3:','s1',s1,' s2',s2,' s3',s3,' s4',s4
7281 eello6_graph3=-(s1+s2+s3+s4)
7283 eello6_graph3=-(s2+s3+s4)
7286 if (.not. calc_grad) return
7287 C Derivatives in gamma(k-1)
7288 call matvec2(AECAderg(1,1,2),b1(1,itl1),auxvec(1))
7289 s3=0.5d0*scalar2(b1(1,itj1),auxvec(1))
7290 s4=-0.25d0*scalar2(vv(1),Ctobrder(1,k))
7291 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s3+s4)
7292 C Derivatives in gamma(l-1)
7293 call matvec2(AECAderg(1,1,1),b1(1,itk1),auxvec(1))
7294 s2=0.5d0*scalar2(b1(1,itk),auxvec(1))
7295 call matmat2(auxmat(1,1),AECAderg(1,1,1),pizda(1,1))
7296 vv(1)=pizda(1,1)+pizda(2,2)
7297 vv(2)=pizda(2,1)-pizda(1,2)
7298 s4=-0.25d0*scalar2(vv(1),Ctobr(1,k))
7299 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*(s2+s4)
7300 C Cartesian derivatives.
7306 s1=dipderx(lll,kkk,4,jj,i)*dip(4,kk,k)
7308 s1=dip(4,jj,i)*dipderx(lll,kkk,4,kk,k)
7311 call matvec2(AECAderx(1,1,lll,kkk,iii,1),b1(1,itk1),
7313 s2=0.5d0*scalar2(b1(1,itk),auxvec(1))
7314 call matvec2(AECAderx(1,1,lll,kkk,iii,2),b1(1,itl1),
7316 s3=0.5d0*scalar2(b1(1,itj1),auxvec(1))
7317 call matmat2(auxmat(1,1),AECAderx(1,1,lll,kkk,iii,1),
7319 vv(1)=pizda(1,1)+pizda(2,2)
7320 vv(2)=pizda(2,1)-pizda(1,2)
7321 s4=-0.25d0*scalar2(vv(1),Ctobr(1,k))
7323 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s1+s2+s4)
7325 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s2+s4)
7328 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-s3
7330 derx(lll,kkk,iii)=derx(lll,kkk,iii)-s3
7332 c derx(lll,kkk,iii)=derx(lll,kkk,iii)-s4
7338 c----------------------------------------------------------------------------
7339 double precision function eello6_graph4(i,j,k,l,jj,kk,imat,swap)
7340 implicit real*8 (a-h,o-z)
7341 include 'DIMENSIONS'
7342 include 'sizesclu.dat'
7343 include 'COMMON.IOUNITS'
7344 include 'COMMON.CHAIN'
7345 include 'COMMON.DERIV'
7346 include 'COMMON.INTERACT'
7347 include 'COMMON.CONTACTS'
7348 include 'COMMON.TORSION'
7349 include 'COMMON.VAR'
7350 include 'COMMON.GEO'
7351 include 'COMMON.FFIELD'
7352 double precision vv(2),pizda(2,2),auxmat(2,2),auxvec(2),
7353 & auxvec1(2),auxmat1(2,2)
7355 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
7357 C Parallel Antiparallel C
7363 C \ j|/k\| \ |/k\|l C
7368 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
7370 C 4/7/01 AL Component s1 was removed, because it pertains to the respective
7371 C energy moment and not to the cluster cumulant.
7372 cd write (2,*) 'eello_graph4: wturn6',wturn6
7373 iti=itortyp(itype(i))
7374 itj=itortyp(itype(j))
7375 if (j.lt.nres-1) then
7376 itj1=itortyp(itype(j+1))
7380 itk=itortyp(itype(k))
7381 if (k.lt.nres-1) then
7382 itk1=itortyp(itype(k+1))
7386 itl=itortyp(itype(l))
7387 if (l.lt.nres-1) then
7388 itl1=itortyp(itype(l+1))
7392 cd write (2,*) 'eello6_graph4:','i',i,' j',j,' k',k,' l',l
7393 cd write (2,*) 'iti',iti,' itj',itj,' itj1',itj1,' itk',itk,
7394 cd & ' itl',itl,' itl1',itl1
7397 s1=dip(3,jj,i)*dip(3,kk,k)
7399 s1=dip(2,jj,j)*dip(2,kk,l)
7402 call matvec2(AECA(1,1,imat),Ub2(1,k),auxvec(1))
7403 s2=0.5d0*scalar2(Ub2(1,i),auxvec(1))
7405 call matvec2(ADtEA1(1,1,3-imat),b1(1,itj1),auxvec1(1))
7406 s3=-0.5d0*scalar2(b1(1,itj),auxvec1(1))
7408 call matvec2(ADtEA1(1,1,3-imat),b1(1,itl1),auxvec1(1))
7409 s3=-0.5d0*scalar2(b1(1,itl),auxvec1(1))
7411 call transpose2(EUg(1,1,k),auxmat(1,1))
7412 call matmat2(AECA(1,1,imat),auxmat(1,1),pizda(1,1))
7413 vv(1)=pizda(1,1)-pizda(2,2)
7414 vv(2)=pizda(2,1)+pizda(1,2)
7415 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
7416 cd write (2,*) 'eello6_graph4:','s1',s1,' s2',s2,' s3',s3,' s4',s4
7418 eello6_graph4=-(s1+s2+s3+s4)
7420 eello6_graph4=-(s2+s3+s4)
7422 if (.not. calc_grad) return
7423 C Derivatives in gamma(i-1)
7427 s1=dipderg(2,jj,i)*dip(3,kk,k)
7429 s1=dipderg(4,jj,j)*dip(2,kk,l)
7432 s2=0.5d0*scalar2(Ub2der(1,i),auxvec(1))
7434 call matvec2(ADtEA1derg(1,1,1,3-imat),b1(1,itj1),auxvec1(1))
7435 s3=-0.5d0*scalar2(b1(1,itj),auxvec1(1))
7437 call matvec2(ADtEA1derg(1,1,1,3-imat),b1(1,itl1),auxvec1(1))
7438 s3=-0.5d0*scalar2(b1(1,itl),auxvec1(1))
7440 s4=0.25d0*scalar2(vv(1),Dtobr2der(1,i))
7441 if (wturn6.gt.0.0d0 .and. k.eq.l+4 .and. i.eq.j+2) then
7442 cd write (2,*) 'turn6 derivatives'
7444 gel_loc_turn6(i-1)=gel_loc_turn6(i-1)-ekont*(s1+s2+s3+s4)
7446 gel_loc_turn6(i-1)=gel_loc_turn6(i-1)-ekont*(s2+s3+s4)
7450 g_corr6_loc(i-1)=g_corr6_loc(i-1)-ekont*(s1+s2+s3+s4)
7452 g_corr6_loc(i-1)=g_corr6_loc(i-1)-ekont*(s2+s3+s4)
7456 C Derivatives in gamma(k-1)
7459 s1=dip(3,jj,i)*dipderg(2,kk,k)
7461 s1=dip(2,jj,j)*dipderg(4,kk,l)
7464 call matvec2(AECA(1,1,imat),Ub2der(1,k),auxvec1(1))
7465 s2=0.5d0*scalar2(Ub2(1,i),auxvec1(1))
7467 call matvec2(ADtEA1derg(1,1,2,3-imat),b1(1,itj1),auxvec1(1))
7468 s3=-0.5d0*scalar2(b1(1,itj),auxvec1(1))
7470 call matvec2(ADtEA1derg(1,1,2,3-imat),b1(1,itl1),auxvec1(1))
7471 s3=-0.5d0*scalar2(b1(1,itl),auxvec1(1))
7473 call transpose2(EUgder(1,1,k),auxmat1(1,1))
7474 call matmat2(AECA(1,1,imat),auxmat1(1,1),pizda(1,1))
7475 vv(1)=pizda(1,1)-pizda(2,2)
7476 vv(2)=pizda(2,1)+pizda(1,2)
7477 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
7478 if (wturn6.gt.0.0d0 .and. k.eq.l+4 .and. i.eq.j+2) then
7480 gel_loc_turn6(k-1)=gel_loc_turn6(k-1)-ekont*(s1+s2+s3+s4)
7482 gel_loc_turn6(k-1)=gel_loc_turn6(k-1)-ekont*(s2+s3+s4)
7486 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s1+s2+s3+s4)
7488 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s2+s3+s4)
7491 C Derivatives in gamma(j-1) or gamma(l-1)
7492 if (l.eq.j+1 .and. l.gt.1) then
7493 call matvec2(AECAderg(1,1,imat),Ub2(1,k),auxvec(1))
7494 s2=0.5d0*scalar2(Ub2(1,i),auxvec(1))
7495 call matmat2(AECAderg(1,1,imat),auxmat(1,1),pizda(1,1))
7496 vv(1)=pizda(1,1)-pizda(2,2)
7497 vv(2)=pizda(2,1)+pizda(1,2)
7498 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
7499 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*(s2+s4)
7500 else if (j.gt.1) then
7501 call matvec2(AECAderg(1,1,imat),Ub2(1,k),auxvec(1))
7502 s2=0.5d0*scalar2(Ub2(1,i),auxvec(1))
7503 call matmat2(AECAderg(1,1,imat),auxmat(1,1),pizda(1,1))
7504 vv(1)=pizda(1,1)-pizda(2,2)
7505 vv(2)=pizda(2,1)+pizda(1,2)
7506 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
7507 if (wturn6.gt.0.0d0 .and. k.eq.l+4 .and. i.eq.j+2) then
7508 gel_loc_turn6(j-1)=gel_loc_turn6(j-1)-ekont*(s2+s4)
7510 g_corr6_loc(j-1)=g_corr6_loc(j-1)-ekont*(s2+s4)
7513 C Cartesian derivatives.
7520 s1=dipderx(lll,kkk,3,jj,i)*dip(3,kk,k)
7522 s1=dipderx(lll,kkk,2,jj,j)*dip(2,kk,l)
7526 s1=dip(3,jj,i)*dipderx(lll,kkk,3,kk,k)
7528 s1=dip(2,jj,j)*dipderx(lll,kkk,2,kk,l)
7532 call matvec2(AECAderx(1,1,lll,kkk,iii,imat),Ub2(1,k),
7534 s2=0.5d0*scalar2(Ub2(1,i),auxvec(1))
7536 call matvec2(ADtEA1derx(1,1,lll,kkk,iii,3-imat),
7537 & b1(1,itj1),auxvec(1))
7538 s3=-0.5d0*scalar2(b1(1,itj),auxvec(1))
7540 call matvec2(ADtEA1derx(1,1,lll,kkk,iii,3-imat),
7541 & b1(1,itl1),auxvec(1))
7542 s3=-0.5d0*scalar2(b1(1,itl),auxvec(1))
7544 call matmat2(AECAderx(1,1,lll,kkk,iii,imat),auxmat(1,1),
7546 vv(1)=pizda(1,1)-pizda(2,2)
7547 vv(2)=pizda(2,1)+pizda(1,2)
7548 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
7550 if (wturn6.gt.0.0d0 .and. k.eq.l+4 .and. i.eq.j+2) then
7552 derx_turn(lll,kkk,3-iii)=derx_turn(lll,kkk,3-iii)
7555 derx_turn(lll,kkk,3-iii)=derx_turn(lll,kkk,3-iii)
7558 derx_turn(lll,kkk,iii)=derx_turn(lll,kkk,iii)-s3
7561 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-(s1+s2+s4)
7563 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-(s2+s4)
7565 derx(lll,kkk,iii)=derx(lll,kkk,iii)-s3
7569 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s1+s2+s4)
7571 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s2+s4)
7574 derx(lll,kkk,iii)=derx(lll,kkk,iii)-s3
7576 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-s3
7584 c----------------------------------------------------------------------------
7585 double precision function eello_turn6(i,jj,kk)
7586 implicit real*8 (a-h,o-z)
7587 include 'DIMENSIONS'
7588 include 'sizesclu.dat'
7589 include 'COMMON.IOUNITS'
7590 include 'COMMON.CHAIN'
7591 include 'COMMON.DERIV'
7592 include 'COMMON.INTERACT'
7593 include 'COMMON.CONTACTS'
7594 include 'COMMON.TORSION'
7595 include 'COMMON.VAR'
7596 include 'COMMON.GEO'
7597 double precision vtemp1(2),vtemp2(2),vtemp3(2),vtemp4(2),
7598 & atemp(2,2),auxmat(2,2),achuj_temp(2,2),gtemp(2,2),gvec(2),
7600 double precision vtemp1d(2),vtemp2d(2),vtemp3d(2),vtemp4d(2),
7601 & atempd(2,2),auxmatd(2,2),achuj_tempd(2,2),gtempd(2,2),gvecd(2)
7602 C 4/7/01 AL Components s1, s8, and s13 were removed, because they pertain to
7603 C the respective energy moment and not to the cluster cumulant.
7608 iti=itortyp(itype(i))
7609 itk=itortyp(itype(k))
7610 itk1=itortyp(itype(k+1))
7611 itl=itortyp(itype(l))
7612 itj=itortyp(itype(j))
7613 cd write (2,*) 'itk',itk,' itk1',itk1,' itl',itl,' itj',itj
7614 cd write (2,*) 'i',i,' k',k,' j',j,' l',l
7615 cd if (i.ne.1 .or. j.ne.3 .or. k.ne.2 .or. l.ne.4) then
7620 cd & 'EELLO6: Contacts have occurred for peptide groups',i,j,
7622 cd call checkint_turn6(i,jj,kk,eel_turn6_num)
7626 derx_turn(lll,kkk,iii)=0.0d0
7633 eello6_5=eello6_graph4(l,k,j,i,kk,jj,2,.true.)
7635 cd write (2,*) 'eello6_5',eello6_5
7637 call transpose2(AEA(1,1,1),auxmat(1,1))
7638 call matmat2(EUg(1,1,i+1),auxmat(1,1),auxmat(1,1))
7639 ss1=scalar2(Ub2(1,i+2),b1(1,itl))
7640 s1 = (auxmat(1,1)+auxmat(2,2))*ss1
7644 call matvec2(EUg(1,1,i+2),b1(1,itl),vtemp1(1))
7645 call matvec2(AEA(1,1,1),vtemp1(1),vtemp1(1))
7646 s2 = scalar2(b1(1,itk),vtemp1(1))
7648 call transpose2(AEA(1,1,2),atemp(1,1))
7649 call matmat2(atemp(1,1),EUg(1,1,i+4),atemp(1,1))
7650 call matvec2(Ug2(1,1,i+2),dd(1,1,itk1),vtemp2(1))
7651 s8 = -(atemp(1,1)+atemp(2,2))*scalar2(cc(1,1,itl),vtemp2(1))
7655 call matmat2(EUg(1,1,i+3),AEA(1,1,2),auxmat(1,1))
7656 call matvec2(auxmat(1,1),Ub2(1,i+4),vtemp3(1))
7657 s12 = scalar2(Ub2(1,i+2),vtemp3(1))
7659 call transpose2(a_chuj(1,1,kk,i+1),achuj_temp(1,1))
7660 call matmat2(achuj_temp(1,1),EUg(1,1,i+2),gtemp(1,1))
7661 call matmat2(gtemp(1,1),EUg(1,1,i+3),gtemp(1,1))
7662 call matvec2(a_chuj(1,1,jj,i),Ub2(1,i+4),vtemp4(1))
7663 ss13 = scalar2(b1(1,itk),vtemp4(1))
7664 s13 = (gtemp(1,1)+gtemp(2,2))*ss13
7668 c write (2,*) 's1,s2,s8,s12,s13',s1,s2,s8,s12,s13
7674 eel_turn6 = eello6_5 - 0.5d0*(s1+s2+s12+s8+s13)
7676 C Derivatives in gamma(i+2)
7678 call transpose2(AEA(1,1,1),auxmatd(1,1))
7679 call matmat2(EUgder(1,1,i+1),auxmatd(1,1),auxmatd(1,1))
7680 s1d = (auxmatd(1,1)+auxmatd(2,2))*ss1
7681 call transpose2(AEAderg(1,1,2),atempd(1,1))
7682 call matmat2(atempd(1,1),EUg(1,1,i+4),atempd(1,1))
7683 s8d = -(atempd(1,1)+atempd(2,2))*scalar2(cc(1,1,itl),vtemp2(1))
7687 call matmat2(EUg(1,1,i+3),AEAderg(1,1,2),auxmatd(1,1))
7688 call matvec2(auxmatd(1,1),Ub2(1,i+4),vtemp3d(1))
7689 s12d = scalar2(Ub2(1,i+2),vtemp3d(1))
7695 gel_loc_turn6(i)=gel_loc_turn6(i)-0.5d0*ekont*(s1d+s8d+s12d)
7696 C Derivatives in gamma(i+3)
7698 call transpose2(AEA(1,1,1),auxmatd(1,1))
7699 call matmat2(EUg(1,1,i+1),auxmatd(1,1),auxmatd(1,1))
7700 ss1d=scalar2(Ub2der(1,i+2),b1(1,itl))
7701 s1d = (auxmatd(1,1)+auxmatd(2,2))*ss1d
7705 call matvec2(EUgder(1,1,i+2),b1(1,itl),vtemp1d(1))
7706 call matvec2(AEA(1,1,1),vtemp1d(1),vtemp1d(1))
7707 s2d = scalar2(b1(1,itk),vtemp1d(1))
7709 call matvec2(Ug2der(1,1,i+2),dd(1,1,itk1),vtemp2d(1))
7710 s8d = -(atemp(1,1)+atemp(2,2))*scalar2(cc(1,1,itl),vtemp2d(1))
7712 s12d = scalar2(Ub2der(1,i+2),vtemp3(1))
7714 call matmat2(achuj_temp(1,1),EUgder(1,1,i+2),gtempd(1,1))
7715 call matmat2(gtempd(1,1),EUg(1,1,i+3),gtempd(1,1))
7716 s13d = (gtempd(1,1)+gtempd(2,2))*ss13
7726 gel_loc_turn6(i+1)=gel_loc_turn6(i+1)
7727 & -0.5d0*ekont*(s1d+s2d+s8d+s12d+s13d)
7729 gel_loc_turn6(i+1)=gel_loc_turn6(i+1)
7730 & -0.5d0*ekont*(s2d+s12d)
7732 C Derivatives in gamma(i+4)
7733 call matmat2(EUgder(1,1,i+3),AEA(1,1,2),auxmatd(1,1))
7734 call matvec2(auxmatd(1,1),Ub2(1,i+4),vtemp3d(1))
7735 s12d = scalar2(Ub2(1,i+2),vtemp3d(1))
7737 call matmat2(achuj_temp(1,1),EUg(1,1,i+2),gtempd(1,1))
7738 call matmat2(gtempd(1,1),EUgder(1,1,i+3),gtempd(1,1))
7739 s13d = (gtempd(1,1)+gtempd(2,2))*ss13
7749 gel_loc_turn6(i+2)=gel_loc_turn6(i+2)-0.5d0*ekont*(s12d+s13d)
7751 gel_loc_turn6(i+2)=gel_loc_turn6(i+2)-0.5d0*ekont*(s12d)
7753 C Derivatives in gamma(i+5)
7755 call transpose2(AEAderg(1,1,1),auxmatd(1,1))
7756 call matmat2(EUg(1,1,i+1),auxmatd(1,1),auxmatd(1,1))
7757 s1d = (auxmatd(1,1)+auxmatd(2,2))*ss1
7761 call matvec2(EUg(1,1,i+2),b1(1,itl),vtemp1d(1))
7762 call matvec2(AEAderg(1,1,1),vtemp1d(1),vtemp1d(1))
7763 s2d = scalar2(b1(1,itk),vtemp1d(1))
7765 call transpose2(AEA(1,1,2),atempd(1,1))
7766 call matmat2(atempd(1,1),EUgder(1,1,i+4),atempd(1,1))
7767 s8d = -(atempd(1,1)+atempd(2,2))*scalar2(cc(1,1,itl),vtemp2(1))
7771 call matvec2(auxmat(1,1),Ub2der(1,i+4),vtemp3d(1))
7772 s12d = scalar2(Ub2(1,i+2),vtemp3d(1))
7774 call matvec2(a_chuj(1,1,jj,i),Ub2der(1,i+4),vtemp4d(1))
7775 ss13d = scalar2(b1(1,itk),vtemp4d(1))
7776 s13d = (gtemp(1,1)+gtemp(2,2))*ss13d
7786 gel_loc_turn6(i+3)=gel_loc_turn6(i+3)
7787 & -0.5d0*ekont*(s1d+s2d+s8d+s12d+s13d)
7789 gel_loc_turn6(i+3)=gel_loc_turn6(i+3)
7790 & -0.5d0*ekont*(s2d+s12d)
7792 C Cartesian derivatives
7797 call transpose2(AEAderx(1,1,lll,kkk,iii,1),auxmatd(1,1))
7798 call matmat2(EUg(1,1,i+1),auxmatd(1,1),auxmatd(1,1))
7799 s1d = (auxmatd(1,1)+auxmatd(2,2))*ss1
7803 call matvec2(EUg(1,1,i+2),b1(1,itl),vtemp1(1))
7804 call matvec2(AEAderx(1,1,lll,kkk,iii,1),vtemp1(1),
7806 s2d = scalar2(b1(1,itk),vtemp1d(1))
7808 call transpose2(AEAderx(1,1,lll,kkk,iii,2),atempd(1,1))
7809 call matmat2(atempd(1,1),EUg(1,1,i+4),atempd(1,1))
7810 s8d = -(atempd(1,1)+atempd(2,2))*
7811 & scalar2(cc(1,1,itl),vtemp2(1))
7815 call matmat2(EUg(1,1,i+3),AEAderx(1,1,lll,kkk,iii,2),
7817 call matvec2(auxmatd(1,1),Ub2(1,i+4),vtemp3d(1))
7818 s12d = scalar2(Ub2(1,i+2),vtemp3d(1))
7825 derx_turn(lll,kkk,iii) = derx_turn(lll,kkk,iii)
7828 derx_turn(lll,kkk,iii) = derx_turn(lll,kkk,iii)
7832 derx_turn(lll,kkk,3-iii) = derx_turn(lll,kkk,3-iii)
7833 & - 0.5d0*(s8d+s12d)
7835 derx_turn(lll,kkk,3-iii) = derx_turn(lll,kkk,3-iii)
7844 call transpose2(a_chuj_der(1,1,lll,kkk,kk,i+1),
7846 call matmat2(achuj_tempd(1,1),EUg(1,1,i+2),gtempd(1,1))
7847 call matmat2(gtempd(1,1),EUg(1,1,i+3),gtempd(1,1))
7848 s13d=(gtempd(1,1)+gtempd(2,2))*ss13
7849 derx_turn(lll,kkk,2) = derx_turn(lll,kkk,2)-0.5d0*s13d
7850 call matvec2(a_chuj_der(1,1,lll,kkk,jj,i),Ub2(1,i+4),
7852 ss13d = scalar2(b1(1,itk),vtemp4d(1))
7853 s13d = (gtemp(1,1)+gtemp(2,2))*ss13d
7854 derx_turn(lll,kkk,1) = derx_turn(lll,kkk,1)-0.5d0*s13d
7858 cd write(iout,*) 'eel6_turn6',eel_turn6,' eel_turn6_num',
7859 cd & 16*eel_turn6_num
7861 if (j.lt.nres-1) then
7868 if (l.lt.nres-1) then
7876 ggg1(ll)=eel_turn6*g_contij(ll,1)
7877 ggg2(ll)=eel_turn6*g_contij(ll,2)
7878 ghalf=0.5d0*ggg1(ll)
7880 gcorr6_turn(ll,i)=gcorr6_turn(ll,i)+ghalf
7881 & +ekont*derx_turn(ll,2,1)
7882 gcorr6_turn(ll,i+1)=gcorr6_turn(ll,i+1)+ekont*derx_turn(ll,3,1)
7883 gcorr6_turn(ll,j)=gcorr6_turn(ll,j)+ghalf
7884 & +ekont*derx_turn(ll,4,1)
7885 gcorr6_turn(ll,j1)=gcorr6_turn(ll,j1)+ekont*derx_turn(ll,5,1)
7886 ghalf=0.5d0*ggg2(ll)
7888 gcorr6_turn(ll,k)=gcorr6_turn(ll,k)+ghalf
7889 & +ekont*derx_turn(ll,2,2)
7890 gcorr6_turn(ll,k+1)=gcorr6_turn(ll,k+1)+ekont*derx_turn(ll,3,2)
7891 gcorr6_turn(ll,l)=gcorr6_turn(ll,l)+ghalf
7892 & +ekont*derx_turn(ll,4,2)
7893 gcorr6_turn(ll,l1)=gcorr6_turn(ll,l1)+ekont*derx_turn(ll,5,2)
7898 gcorr6_turn(ll,m)=gcorr6_turn(ll,m)+ggg1(ll)
7903 gcorr6_turn(ll,m)=gcorr6_turn(ll,m)+ggg2(ll)
7909 gcorr6_turn(ll,m)=gcorr6_turn(ll,m)+ekont*derx_turn(ll,1,1)
7914 gcorr6_turn(ll,m)=gcorr6_turn(ll,m)+ekont*derx_turn(ll,1,2)
7918 cd write (2,*) iii,g_corr6_loc(iii)
7921 eello_turn6=ekont*eel_turn6
7922 cd write (2,*) 'ekont',ekont
7923 cd write (2,*) 'eel_turn6',ekont*eel_turn6
7926 crc-------------------------------------------------
7927 SUBROUTINE MATVEC2(A1,V1,V2)
7928 implicit real*8 (a-h,o-z)
7929 include 'DIMENSIONS'
7930 DIMENSION A1(2,2),V1(2),V2(2)
7934 c 3 VI=VI+A1(I,K)*V1(K)
7938 vaux1=a1(1,1)*v1(1)+a1(1,2)*v1(2)
7939 vaux2=a1(2,1)*v1(1)+a1(2,2)*v1(2)
7944 C---------------------------------------
7945 SUBROUTINE MATMAT2(A1,A2,A3)
7946 implicit real*8 (a-h,o-z)
7947 include 'DIMENSIONS'
7948 DIMENSION A1(2,2),A2(2,2),A3(2,2)
7949 c DIMENSION AI3(2,2)
7953 c A3IJ=A3IJ+A1(I,K)*A2(K,J)
7959 ai3_11=a1(1,1)*a2(1,1)+a1(1,2)*a2(2,1)
7960 ai3_12=a1(1,1)*a2(1,2)+a1(1,2)*a2(2,2)
7961 ai3_21=a1(2,1)*a2(1,1)+a1(2,2)*a2(2,1)
7962 ai3_22=a1(2,1)*a2(1,2)+a1(2,2)*a2(2,2)
7970 c-------------------------------------------------------------------------
7971 double precision function scalar2(u,v)
7973 double precision u(2),v(2)
7976 scalar2=u(1)*v(1)+u(2)*v(2)
7980 C-----------------------------------------------------------------------------
7982 subroutine transpose2(a,at)
7984 double precision a(2,2),at(2,2)
7991 c--------------------------------------------------------------------------
7992 subroutine transpose(n,a,at)
7995 double precision a(n,n),at(n,n)
8003 C---------------------------------------------------------------------------
8004 subroutine prodmat3(a1,a2,kk,transp,prod)
8007 double precision a1(2,2),a2(2,2),a2t(2,2),kk(2,2),prod(2,2)
8009 crc double precision auxmat(2,2),prod_(2,2)
8012 crc call transpose2(kk(1,1),auxmat(1,1))
8013 crc call matmat2(a1(1,1),auxmat(1,1),auxmat(1,1))
8014 crc call matmat2(auxmat(1,1),a2(1,1),prod_(1,1))
8016 prod(1,1)=(a1(1,1)*kk(1,1)+a1(1,2)*kk(1,2))*a2(1,1)
8017 & +(a1(1,1)*kk(2,1)+a1(1,2)*kk(2,2))*a2(2,1)
8018 prod(1,2)=(a1(1,1)*kk(1,1)+a1(1,2)*kk(1,2))*a2(1,2)
8019 & +(a1(1,1)*kk(2,1)+a1(1,2)*kk(2,2))*a2(2,2)
8020 prod(2,1)=(a1(2,1)*kk(1,1)+a1(2,2)*kk(1,2))*a2(1,1)
8021 & +(a1(2,1)*kk(2,1)+a1(2,2)*kk(2,2))*a2(2,1)
8022 prod(2,2)=(a1(2,1)*kk(1,1)+a1(2,2)*kk(1,2))*a2(1,2)
8023 & +(a1(2,1)*kk(2,1)+a1(2,2)*kk(2,2))*a2(2,2)
8026 crc call matmat2(a1(1,1),kk(1,1),auxmat(1,1))
8027 crc call matmat2(auxmat(1,1),a2(1,1),prod_(1,1))
8029 prod(1,1)=(a1(1,1)*kk(1,1)+a1(1,2)*kk(2,1))*a2(1,1)
8030 & +(a1(1,1)*kk(1,2)+a1(1,2)*kk(2,2))*a2(2,1)
8031 prod(1,2)=(a1(1,1)*kk(1,1)+a1(1,2)*kk(2,1))*a2(1,2)
8032 & +(a1(1,1)*kk(1,2)+a1(1,2)*kk(2,2))*a2(2,2)
8033 prod(2,1)=(a1(2,1)*kk(1,1)+a1(2,2)*kk(2,1))*a2(1,1)
8034 & +(a1(2,1)*kk(1,2)+a1(2,2)*kk(2,2))*a2(2,1)
8035 prod(2,2)=(a1(2,1)*kk(1,1)+a1(2,2)*kk(2,1))*a2(1,2)
8036 & +(a1(2,1)*kk(1,2)+a1(2,2)*kk(2,2))*a2(2,2)
8039 c call transpose2(a2(1,1),a2t(1,1))
8042 crc print *,((prod_(i,j),i=1,2),j=1,2)
8043 crc print *,((prod(i,j),i=1,2),j=1,2)
8047 C-----------------------------------------------------------------------------
8048 double precision function scalar(u,v)
8050 double precision u(3),v(3)