1 subroutine etotal(energia)
2 implicit real*8 (a-h,o-z)
4 include 'DIMENSIONS.ZSCOPT'
10 cMS$ATTRIBUTES C :: proc_proc
13 include 'COMMON.IOUNITS'
14 double precision energia(0:max_ene),energia1(0:max_ene+1)
15 include 'COMMON.FFIELD'
16 include 'COMMON.DERIV'
17 include 'COMMON.INTERACT'
18 include 'COMMON.SBRIDGE'
19 include 'COMMON.CHAIN'
20 include 'COMMON.SHIELD'
21 include 'COMMON.CONTROL'
22 include 'COMMON.TORCNSTR'
23 include 'COMMON.WEIGHTS'
24 include 'COMMON.WEIGHTDER'
25 include "COMMON.NAMES"
26 c write(iout, '(a,i2)')'Calling etotal ipot=',ipot
28 cd print *,'nnt=',nnt,' nct=',nct
30 C Compute the side-chain and electrostatic interaction energy
34 goto (101,102,103,104,105,106) ipot
35 C Lennard-Jones potential.
37 cd print '(a)','Exit ELJ'
39 C Lennard-Jones-Kihara potential (shifted).
42 C Berne-Pechukas potential (dilated LJ, angular dependence).
45 C Gay-Berne potential (shifted LJ, angular dependence).
48 C Gay-Berne-Vorobjev potential (shifted LJ, angular dependence).
52 106 call emomo(evdw,evdw_p,evdw_m)
54 C Calculate electrostatic (H-bonding) energy of the main chain.
58 if (shield_mode.eq.1) then
60 else if (shield_mode.eq.2) then
63 call eelec(ees,evdw1,eel_loc,eello_turn3,eello_turn4)
64 C write(iout,*) 'po eelec'
66 C Calculate excluded-volume interaction energy between peptide groups
69 call escp(evdw2,evdw2_14)
71 c Calculate the bond-stretching energy
75 C write (iout,*) "estr",estr
77 C Calculate the disulfide-bridge and other energy and the contributions
78 C from other distance constraints.
79 cd print *,'Calling EHPB'
81 cd print *,'EHPB exitted succesfully.'
83 C Calculate the virtual-bond-angle energy.
85 C print *,'Bend energy finished.'
87 if (tor_mode.eq.0) then
90 C ebend kcc is Kubo cumulant clustered rigorous attemp to derive the
98 if (with_theta_constr) call etheta_constr(ethetacnstr)
99 c call ebend(ebe,ethetacnstr)
100 cd print *,'Bend energy finished.'
102 C Calculate the SC local energy.
105 C print *,'SCLOC energy finished.'
107 C Calculate the virtual-bond torsional energy.
109 if (wtor.gt.0.0d0) then
110 if (tor_mode.eq.0) then
113 C etor kcc is Kubo cumulant clustered rigorous attemp to derive the
121 if (ndih_constr.gt.0) call etor_constr(edihcnstr)
122 c print *,"Processor",myrank," computed Utor"
124 C 6/23/01 Calculate double-torsional energy
126 if ((wtor_d.gt.0.0d0).and.(tor_mode.eq.0)) then
131 c print *,"Processor",myrank," computed Utord"
133 call eback_sc_corr(esccor)
136 if (wliptran.gt.0) then
137 call Eliptransfer(eliptran)
141 C 12/1/95 Multi-body terms
145 if (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0
146 & .or. wturn6.gt.0.0d0) then
147 c write(iout,*)"calling multibody_eello"
148 call multibody_eello(ecorr,ecorr5,ecorr6,eturn6,n_corr,n_corr1)
149 c write (iout,*) 'n_corr=',n_corr,' n_corr1=',n_corr1
150 c write (iout,*) ecorr,ecorr5,ecorr6,eturn6
157 if (wcorr4.eq.0.0d0 .and. wcorr.gt.0.0d0) then
158 c write (iout,*) "Calling multibody_hbond"
159 call multibody_hb(ecorr,ecorr5,ecorr6,n_corr,n_corr1)
162 if (shield_mode.gt.0) then
163 etot=wsc*(evdw+evdw_t)+wscp*evdw2
166 & +wang*ebe+wtor*etors+wscloc*escloc
167 & +wstrain*ehpb+wcorr*ecorr+wcorr5*ecorr5
168 & +wcorr6*ecorr6+wturn4*eello_turn4
169 & +wturn3*eello_turn3+wturn6*eturn6
170 & +wel_loc*eel_loc+edihcnstr+wtor_d*etors_d
171 & +wbond*estr+wsccor*esccor+ethetacnstr
174 etot=wsc*(evdw+evdw_t)+wscp*evdw2+welec*ees
176 & +wang*ebe+wtor*etors+wscloc*escloc
177 & +wstrain*ehpb+wcorr*ecorr+wcorr5*ecorr5
178 & +wcorr6*ecorr6+wturn4*eello_turn4
179 & +wturn3*eello_turn3+wturn6*eturn6
180 & +wel_loc*eel_loc+edihcnstr+wtor_d*etors_d
181 & +wbond*estr+wsccor*esccor+ethetacnstr
185 if (shield_mode.gt.0) then
186 etot=wsc*(evdw+evdw_t)+wscp*evdw2
188 & +wang*ebe+wtor*etors+wscloc*escloc
189 & +wstrain*ehpb+wcorr*ecorr+wcorr5*ecorr5
190 & +wcorr6*ecorr6+wturn4*eello_turn4
191 & +wturn3*eello_turn3+wturn6*eturn6
192 & +wel_loc*eel_loc+edihcnstr+wtor_d*etors_d
193 & +wbond*estr+wsccor*esccor+ethetacnstr
196 etot=wsc*(evdw+evdw_t)+wscp*evdw2
198 & +wang*ebe+wtor*etors+wscloc*escloc
199 & +wstrain*ehpb+wcorr*ecorr+wcorr5*ecorr5
200 & +wcorr6*ecorr6+wturn4*eello_turn4
201 & +wturn3*eello_turn3+wturn6*eturn6
202 & +wel_loc*eel_loc+edihcnstr+wtor_d*etors_d
203 & +wbond*estr+wsccor*esccor+ethetacnstr
210 energia(2)=evdw2-evdw2_14
227 energia(8)=eello_turn3
228 energia(9)=eello_turn4
237 energia(20)=edihcnstr
239 energia(24)=ethetacnstr
244 if (isnan(etot).ne.0) energia(0)=1.0d+99
246 if (isnan(etot)) energia(0)=1.0d+99
251 idumm=proc_proc(etot,i)
253 call proc_proc(etot,i)
255 if(i.eq.1)energia(0)=1.0d+99
261 call enerprint(energia)
263 c if (dyn_ss) call dyn_set_nss
266 C------------------------------------------------------------------------
267 subroutine enerprint(energia)
268 implicit real*8 (a-h,o-z)
270 include 'DIMENSIONS.ZSCOPT'
271 include 'COMMON.IOUNITS'
272 include 'COMMON.FFIELD'
273 include 'COMMON.SBRIDGE'
274 double precision energia(0:max_ene)
276 evdw=energia(1)+energia(21)
278 evdw2=energia(2)+energia(17)
290 eello_turn3=energia(8)
291 eello_turn4=energia(9)
292 eello_turn6=energia(10)
299 edihcnstr=energia(20)
301 ethetacnstr=energia(24)
304 write (iout,10) evdw,wsc,evdw2,wscp,ees,welec,evdw1,
306 & estr,wbond,ebe,wang,escloc,wscloc,etors,wtor,
307 & etors_d,wtor_d,ehpb,wstrain,
308 & ecorr,wcorr,ecorr5,wcorr5,ecorr6,wcorr6,
309 & eel_loc,wel_loc,eello_turn3,wturn3,
310 & eello_turn4,wturn4,eello_turn6,wturn6,
311 & esccor,wsccor,edihcnstr,ethetacnstr,ebr*nss,
312 & eliptran,wliptran,etot
313 10 format (/'Virtual-chain energies:'//
314 & 'EVDW= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC-SC)'/
315 & 'EVDW2= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC-p)'/
316 & 'EES= ',1pE16.6,' WEIGHT=',1pD16.6,' (p-p elec)'/
317 & 'EVDWPP=',1pE16.6,' WEIGHT=',1pD16.6,' (p-p VDW)'/
318 & 'ESTR= ',1pE16.6,' WEIGHT=',1pD16.6,' (stretching)'/
319 & 'EBE= ',1pE16.6,' WEIGHT=',1pD16.6,' (bending)'/
320 & 'ESC= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC local)'/
321 & 'ETORS= ',1pE16.6,' WEIGHT=',1pD16.6,' (torsional)'/
322 & 'ETORSD=',1pE16.6,' WEIGHT=',1pD16.6,' (double torsional)'/
323 & 'EHBP= ',1pE16.6,' WEIGHT=',1pD16.6,
324 & ' (SS bridges & dist. cnstr.)'/
325 & 'ECORR4=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
326 & 'ECORR5=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
327 & 'ECORR6=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
328 & 'EELLO= ',1pE16.6,' WEIGHT=',1pD16.6,' (electrostatic-local)'/
329 & 'ETURN3=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 3rd order)'/
330 & 'ETURN4=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 4th order)'/
331 & 'ETURN6=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 6th order)'/
332 & 'ESCCOR=',1pE16.6,' WEIGHT=',1pD16.6,' (backbone-rotamer corr)'/
333 & 'EDIHC= ',1pE16.6,' (dihedral angle constraints)'/
334 & 'ETHETC= ',1pE16.6,' (valence angle constraints)'/
335 & 'ESS= ',1pE16.6,' (disulfide-bridge intrinsic energy)'/
336 & 'ELT=',1pE16.6, ' WEIGHT=',1pD16.6,' (Lipid transfer energy)'/
337 & 'ETOT= ',1pE16.6,' (total)')
339 write (iout,10) evdw,wsc,evdw2,wscp,ees,welec,estr,wbond,
340 & ebe,wang,escloc,wscloc,etors,wtor,etors_d,wtor_d,
341 & ehpb,wstrain,ecorr,wcorr,ecorr5,wcorr5,
342 & ecorr6,wcorr6,eel_loc,wel_loc,
343 & eello_turn3,wturn3,eello_turn4,wturn4,
344 & eello_turn6,wturn6,esccor,wsccor,
345 & edihcnstr,ethetacnstr,ebr*nss,eliptran,wliptran,etot
346 10 format (/'Virtual-chain energies:'//
347 & 'EVDW= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC-SC)'/
348 & 'EVDW2= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC-p)'/
349 & 'EES= ',1pE16.6,' WEIGHT=',1pD16.6,' (p-p)'/
350 & 'ESTR= ',1pE16.6,' WEIGHT=',1pD16.6,' (stretching)'/
351 & 'EBE= ',1pE16.6,' WEIGHT=',1pD16.6,' (bending)'/
352 & 'ESC= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC local)'/
353 & 'ETORS= ',1pE16.6,' WEIGHT=',1pD16.6,' (torsional)'/
354 & 'ETORSD=',1pE16.6,' WEIGHT=',1pD16.6,' (double torsional)'/
355 & 'EHBP= ',1pE16.6,' WEIGHT=',1pD16.6,
356 & ' (SS bridges & dist. cnstr.)'/
357 & 'ECORR4=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
358 & 'ECORR5=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
359 & 'ECORR6=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
360 & 'EELLO= ',1pE16.6,' WEIGHT=',1pD16.6,' (electrostatic-local)'/
361 & 'ETURN3=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 3rd order)'/
362 & 'ETURN4=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 4th order)'/
363 & 'ETURN6=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 6th order)'/
364 & 'ESCCOR=',1pE16.6,' WEIGHT=',1pD16.6,' (backbone-rotamer corr)'/
365 & 'EDIHC= ',1pE16.6,' (dihedral angle constraints)'/
366 & 'ETHETC= ',1pE16.6,' (valence angle constraints)'/
367 & 'ESS= ',1pE16.6,' (disulfide-bridge intrinsic energy)'/
368 & 'ELT=',1pE16.6, ' WEIGHT=',1pD16.6,' (Lipid transfer energy)'/
369 & 'ETOT= ',1pE16.6,' (total)')
373 C-----------------------------------------------------------------------
376 C This subroutine calculates the interaction energy of nonbonded side chains
377 C assuming the LJ potential of interaction.
379 implicit real*8 (a-h,o-z)
381 include 'DIMENSIONS.ZSCOPT'
382 parameter (accur=1.0d-10)
385 include 'COMMON.LOCAL'
386 include 'COMMON.CHAIN'
387 include 'COMMON.DERIV'
388 include 'COMMON.INTERACT'
389 include 'COMMON.TORSION'
390 include 'COMMON.WEIGHTDER'
391 include 'COMMON.SBRIDGE'
392 include 'COMMON.NAMES'
393 include 'COMMON.IOUNITS'
394 include 'COMMON.CONTACTS'
398 cd print *,'Entering ELJ nnt=',nnt,' nct=',nct,' expon=',expon
401 eneps_temp(j,i)=0.0d0
414 C Calculate SC interaction energy.
417 cd write (iout,*) 'i=',i,' iint=',iint,' istart=',istart(i,iint),
418 cd & 'iend=',iend(i,iint)
419 do j=istart(i,iint),iend(i,iint)
424 C Change 12/1/95 to calculate four-body interactions
425 rij=xj*xj+yj*yj+zj*zj
427 c write (iout,*)'i=',i,' j=',j,' itypi=',itypi,' itypj=',itypj
428 eps0ij=eps(itypi,itypj)
430 e1=fac*fac*aa(itypi,itypj)
431 e2=fac*bb(itypi,itypj)
433 ij=icant(itypi,itypj)
434 eneps_temp(1,ij)=eneps_temp(1,ij)+e1/dabs(eps0ij)
435 eneps_temp(2,ij)=eneps_temp(2,ij)+e2/eps0ij
436 cd sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
437 cd epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
438 cd write (iout,'(2(a3,i3,2x),6(1pd12.4)/2(3(1pd12.4),5x)/)')
439 cd & restyp(itypi),i,restyp(itypj),j,aa(itypi,itypj),
440 cd & bb(itypi,itypj),1.0D0/dsqrt(rrij),evdwij,epsi,sigm,
441 cd & (c(k,i),k=1,3),(c(k,j),k=1,3)
445 C Calculate the components of the gradient in DC and X
447 fac=-rrij*(e1+evdwij)
452 gvdwx(k,i)=gvdwx(k,i)-gg(k)
453 gvdwx(k,j)=gvdwx(k,j)+gg(k)
457 c gvdwc(l,k)=gvdwc(l,k)+gg(l)
462 C 12/1/95, revised on 5/20/97
464 C Calculate the contact function. The ith column of the array JCONT will
465 C contain the numbers of atoms that make contacts with the atom I (of numbers
466 C greater than I). The arrays FACONT and GACONT will contain the values of
467 C the contact function and its derivative.
469 C Uncomment next line, if the correlation interactions include EVDW explicitly.
470 c if (j.gt.i+1 .and. evdwij.le.0.0D0) then
471 C Uncomment next line, if the correlation interactions are contact function only
472 if (j.gt.i+1.and. eps0ij.gt.0.0D0) then
474 sigij=sigma(itypi,itypj)
475 r0ij=rs0(itypi,itypj)
477 C Check whether the SC's are not too far to make a contact.
480 call gcont(rij,rcut,1.0d0,0.2d0*rcut,fcont,fprimcont)
481 C Add a new contact, if the SC's are close enough, but not too close (r<sigma).
483 if (fcont.gt.0.0D0) then
484 C If the SC-SC distance if close to sigma, apply spline.
485 cAdam call gcont(-rij,-1.03d0*sigij,2.0d0*sigij,1.0d0,
486 cAdam & fcont1,fprimcont1)
487 cAdam fcont1=1.0d0-fcont1
488 cAdam if (fcont1.gt.0.0d0) then
489 cAdam fprimcont=fprimcont*fcont1+fcont*fprimcont1
490 cAdam fcont=fcont*fcont1
492 C Uncomment following 4 lines to have the geometric average of the epsilon0's
493 cga eps0ij=1.0d0/dsqrt(eps0ij)
495 cga gg(k)=gg(k)*eps0ij
497 cga eps0ij=-evdwij*eps0ij
498 C Uncomment for AL's type of SC correlation interactions.
500 num_conti=num_conti+1
502 facont(num_conti,i)=fcont*eps0ij
503 fprimcont=eps0ij*fprimcont/rij
505 cAdam gacont(1,num_conti,i)=-fprimcont*xj+fcont*gg(1)
506 cAdam gacont(2,num_conti,i)=-fprimcont*yj+fcont*gg(2)
507 cAdam gacont(3,num_conti,i)=-fprimcont*zj+fcont*gg(3)
508 C Uncomment following 3 lines for Skolnick's type of SC correlation.
509 gacont(1,num_conti,i)=-fprimcont*xj
510 gacont(2,num_conti,i)=-fprimcont*yj
511 gacont(3,num_conti,i)=-fprimcont*zj
512 cd write (iout,'(2i5,2f10.5)') i,j,rij,facont(num_conti,i)
513 cd write (iout,'(2i3,3f10.5)')
514 cd & i,j,(gacont(kk,num_conti,i),kk=1,3)
520 num_cont(i)=num_conti
525 gvdwc(j,i)=expon*gvdwc(j,i)
526 gvdwx(j,i)=expon*gvdwx(j,i)
530 C******************************************************************************
534 C To save time, the factor of EXPON has been extracted from ALL components
535 C of GVDWC and GRADX. Remember to multiply them by this factor before further
538 C******************************************************************************
541 C-----------------------------------------------------------------------------
542 subroutine eljk(evdw)
544 C This subroutine calculates the interaction energy of nonbonded side chains
545 C assuming the LJK potential of interaction.
547 implicit real*8 (a-h,o-z)
549 include 'DIMENSIONS.ZSCOPT'
552 include 'COMMON.LOCAL'
553 include 'COMMON.CHAIN'
554 include 'COMMON.DERIV'
555 include 'COMMON.INTERACT'
556 include 'COMMON.WEIGHTDER'
557 include 'COMMON.IOUNITS'
558 include 'COMMON.NAMES'
563 c print *,'Entering ELJK nnt=',nnt,' nct=',nct,' expon=',expon
566 eneps_temp(j,i)=0.0d0
577 C Calculate SC interaction energy.
580 do j=istart(i,iint),iend(i,iint)
585 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
587 e_augm=augm(itypi,itypj)*fac_augm
590 r_shift_inv=1.0D0/(rij+r0(itypi,itypj)-sigma(itypi,itypj))
591 fac=r_shift_inv**expon
592 e1=fac*fac*aa(itypi,itypj)
593 e2=fac*bb(itypi,itypj)
595 ij=icant(itypi,itypj)
596 eneps_temp(1,ij)=eneps_temp(1,ij)+(e1+a_augm)
597 & /dabs(eps(itypi,itypj))
598 eneps_temp(2,ij)=eneps_temp(2,ij)+e2/eps(itypi,itypj)
599 cd sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
600 cd epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
601 cd write (iout,'(2(a3,i3,2x),8(1pd12.4)/2(3(1pd12.4),5x)/)')
602 cd & restyp(itypi),i,restyp(itypj),j,aa(itypi,itypj),
603 cd & bb(itypi,itypj),augm(itypi,itypj),epsi,sigm,
604 cd & sigma(itypi,itypj),1.0D0/dsqrt(rrij),evdwij,
605 cd & (c(k,i),k=1,3),(c(k,j),k=1,3)
609 C Calculate the components of the gradient in DC and X
611 fac=-2.0D0*rrij*e_augm-r_inv_ij*r_shift_inv*(e1+e1+e2)
616 gvdwx(k,i)=gvdwx(k,i)-gg(k)
617 gvdwx(k,j)=gvdwx(k,j)+gg(k)
621 c gvdwc(l,k)=gvdwc(l,k)+gg(l)
631 gvdwc(j,i)=expon*gvdwc(j,i)
632 gvdwx(j,i)=expon*gvdwx(j,i)
638 C-----------------------------------------------------------------------------
641 C This subroutine calculates the interaction energy of nonbonded side chains
642 C assuming the Berne-Pechukas potential of interaction.
644 implicit real*8 (a-h,o-z)
646 include 'DIMENSIONS.ZSCOPT'
649 include 'COMMON.LOCAL'
650 include 'COMMON.CHAIN'
651 include 'COMMON.DERIV'
652 include 'COMMON.NAMES'
653 include 'COMMON.INTERACT'
654 include 'COMMON.WEIGHTDER'
655 include 'COMMON.IOUNITS'
656 include 'COMMON.CALC'
658 c double precision rrsave(maxdim)
664 eneps_temp(j,i)=0.0d0
668 c print *,'Entering EBP nnt=',nnt,' nct=',nct,' expon=',expon
670 c if (icall.eq.0) then
682 dxi=dc_norm(1,nres+i)
683 dyi=dc_norm(2,nres+i)
684 dzi=dc_norm(3,nres+i)
685 dsci_inv=vbld_inv(i+nres)
687 C Calculate SC interaction energy.
690 do j=istart(i,iint),iend(i,iint)
693 dscj_inv=vbld_inv(j+nres)
694 chi1=chi(itypi,itypj)
695 chi2=chi(itypj,itypi)
702 alf12=0.5D0*(alf1+alf2)
703 C For diagnostics only!!!
716 dxj=dc_norm(1,nres+j)
717 dyj=dc_norm(2,nres+j)
718 dzj=dc_norm(3,nres+j)
719 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
720 cd if (icall.eq.0) then
726 C Calculate the angle-dependent terms of energy & contributions to derivatives.
728 C Calculate whole angle-dependent part of epsilon and contributions
730 fac=(rrij*sigsq)**expon2
731 e1=fac*fac*aa(itypi,itypj)
732 e2=fac*bb(itypi,itypj)
733 evdwij=eps1*eps2rt*eps3rt*(e1+e2)
734 eps2der=evdwij*eps3rt
735 eps3der=evdwij*eps2rt
736 evdwij=evdwij*eps2rt*eps3rt
737 ij=icant(itypi,itypj)
738 aux=eps1*eps2rt**2*eps3rt**2
739 eneps_temp(1,ij)=eneps_temp(1,ij)+e1*aux
740 & /dabs(eps(itypi,itypj))
741 eneps_temp(2,ij)=eneps_temp(2,ij)+e2*aux/eps(itypi,itypj)
745 sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
746 epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
747 cd write (iout,'(2(a3,i3,2x),15(0pf7.3))')
748 cd & restyp(itypi),i,restyp(itypj),j,
749 cd & epsi,sigm,chi1,chi2,chip1,chip2,
750 cd & eps1,eps2rt**2,eps3rt**2,1.0D0/dsqrt(sigsq),
751 cd & om1,om2,om12,1.0D0/dsqrt(rrij),
754 C Calculate gradient components.
755 e1=e1*eps1*eps2rt**2*eps3rt**2
756 fac=-expon*(e1+evdwij)
759 C Calculate radial part of the gradient
763 C Calculate the angular part of the gradient and sum add the contributions
764 C to the appropriate components of the Cartesian gradient.
773 C-----------------------------------------------------------------------------
776 C This subroutine calculates the interaction energy of nonbonded side chains
777 C assuming the Gay-Berne potential of interaction.
779 implicit real*8 (a-h,o-z)
781 include 'DIMENSIONS.ZSCOPT'
782 include 'COMMON.CONTROL'
785 include 'COMMON.LOCAL'
786 include 'COMMON.CHAIN'
787 include 'COMMON.DERIV'
788 include 'COMMON.NAMES'
789 include 'COMMON.INTERACT'
790 include 'COMMON.WEIGHTDER'
791 include 'COMMON.IOUNITS'
792 include 'COMMON.CALC'
793 include 'COMMON.SBRIDGE'
800 eneps_temp(j,i)=0.0d0
804 c print *,'Entering EGB nnt=',nnt,' nct=',nct,' expon=',expon
807 c if (icall.gt.0) lprn=.true.
811 if (itypi.eq.ntyp1) cycle
812 itypi1=iabs(itype(i+1))
816 C Adjusting to box limits
818 if (xi.lt.0) xi=xi+boxxsize
820 if (yi.lt.0) yi=yi+boxysize
822 if (zi.lt.0) zi=zi+boxzsize
826 if ((zi.gt.bordlipbot)
827 &.and.(zi.lt.bordliptop)) then
828 C the energy transfer exist
829 if (zi.lt.buflipbot) then
830 C what fraction I am in
832 & ((zi-bordlipbot)/lipbufthick)
833 C lipbufthick is thickenes of lipid buffore
834 sslipi=sscalelip(fracinbuf)
835 ssgradlipi=-sscagradlip(fracinbuf)/lipbufthick
836 elseif (zi.gt.bufliptop) then
837 fracinbuf=1.0d0-((bordliptop-zi)/lipbufthick)
838 sslipi=sscalelip(fracinbuf)
839 ssgradlipi=sscagradlip(fracinbuf)/lipbufthick
850 dxi=dc_norm(1,nres+i)
851 dyi=dc_norm(2,nres+i)
852 dzi=dc_norm(3,nres+i)
853 dsci_inv=vbld_inv(i+nres)
855 C Calculate SC interaction energy.
858 do j=istart(i,iint),iend(i,iint)
861 IF (dyn_ss_mask(i).and.dyn_ss_mask(j)) THEN
863 c write(iout,*) "PRZED ZWYKLE", evdwij
864 call dyn_ssbond_ene(i,j,evdwij)
865 c write(iout,*) "PO ZWYKLE", evdwij
868 if (energy_dec) write (iout,'(a6,2i5,0pf7.3,a3)')
869 & 'evdw',i,j,evdwij,' ss'
870 C triple bond artifac removal
871 do k=j+1,iend(i,iint)
872 C search over all next residues
873 if (dyn_ss_mask(k)) then
874 C check if they are cysteins
875 C write(iout,*) 'k=',k
877 c write(iout,*) "PRZED TRI", evdwij
878 evdwij_przed_tri=evdwij
879 call triple_ssbond_ene(i,j,k,evdwij)
880 c if(evdwij_przed_tri.ne.evdwij) then
881 c write (iout,*) "TRI:", evdwij, evdwij_przed_tri
884 c write(iout,*) "PO TRI", evdwij
885 C call the energy function that removes the artifical triple disulfide
886 C bond the soubroutine is located in ssMD.F
888 if (energy_dec) write (iout,'(a6,2i5,0pf7.3,a3)')
889 & 'evdw',i,j,evdwij,'tss'
897 if (itypj.eq.ntyp1) cycle
898 dscj_inv=vbld_inv(j+nres)
899 sig0ij=sigma(itypi,itypj)
900 chi1=chi(itypi,itypj)
901 chi2=chi(itypj,itypi)
908 alf12=0.5D0*(alf1+alf2)
909 C For diagnostics only!!!
923 if (xj.lt.0) xj=xj+boxxsize
925 if (yj.lt.0) yj=yj+boxysize
927 if (zj.lt.0) zj=zj+boxzsize
929 if ((zj.gt.bordlipbot)
930 & .and.(zj.lt.bordliptop)) then
931 C the energy transfer exist
932 if (zj.lt.buflipbot) then
933 C what fraction I am in
935 & ((zj-bordlipbot)/lipbufthick)
936 C lipbufthick is thickenes of lipid buffore
937 sslipj=sscalelip(fracinbuf)
938 ssgradlipj=-sscagradlip(fracinbuf)/lipbufthick
939 elseif (zj.gt.bufliptop) then
940 fracinbuf=1.0d0-((bordliptop-zj)/lipbufthick)
941 sslipj=sscalelip(fracinbuf)
942 ssgradlipj=sscagradlip(fracinbuf)/lipbufthick
951 aa=aa_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0
952 & +aa_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
953 bb=bb_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0
954 & +bb_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
955 C write(iout,*) "tu,", i,j,aa_lip(itypi,itypj),bb_lip(itypi,itypj)
956 C if (aa.ne.aa_aq(itypi,itypj)) write(63,'(2e10.5)')
957 C &(aa-aa_aq(itypi,itypj)),(bb-bb_aq(itypi,itypj))
958 C if (ssgradlipj.gt.0.0d0) print *,"??WTF??"
959 C print *,sslipi,sslipj,bordlipbot,zi,zj
961 dist_init=(xj-xi)**2+(yj-yi)**2+(zj-zi)**2
969 xj=xj_safe+xshift*boxxsize
970 yj=yj_safe+yshift*boxysize
971 zj=zj_safe+zshift*boxzsize
972 dist_temp=(xj-xi)**2+(yj-yi)**2+(zj-zi)**2
973 if(dist_temp.lt.dist_init) then
983 if (subchap.eq.1) then
992 dxj=dc_norm(1,nres+j)
993 dyj=dc_norm(2,nres+j)
994 dzj=dc_norm(3,nres+j)
995 c write (iout,*) i,j,xj,yj,zj
996 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
998 C Calculate angle-dependent terms of energy and contributions to their
1002 sig=sig0ij*dsqrt(sigsq)
1003 rij_shift=1.0D0/rij-sig+sig0ij
1004 C I hate to put IF's in the loops, but here don't have another choice!!!!
1005 if (rij_shift.le.0.0D0) then
1010 c---------------------------------------------------------------
1011 rij_shift=1.0D0/rij_shift
1012 fac=rij_shift**expon
1013 e1=fac*fac*aa(itypi,itypj)
1014 e2=fac*bb(itypi,itypj)
1015 evdwij=eps1*eps2rt*eps3rt*(e1+e2)
1016 eps2der=evdwij*eps3rt
1017 eps3der=evdwij*eps2rt
1018 evdwij=evdwij*eps2rt*eps3rt
1020 ij=icant(itypi,itypj)
1021 aux=eps1*eps2rt**2*eps3rt**2
1022 c eneps_temp(1,ij)=eneps_temp(1,ij)+aux*e1
1023 c & /dabs(eps(itypi,itypj))
1024 c eneps_temp(2,ij)=eneps_temp(2,ij)+aux*e2/eps(itypi,itypj)
1025 c-----------------------
1026 eps0ij=eps(itypi,itypj)
1027 eneps_temp(1,ij)=eneps_temp(1,ij)+aux*e1/ftune_eps(eps0ij)
1028 rr0ij=r0(itypi,itypj)
1029 eneps_temp(2,ij)=eneps_temp(2,ij)+aux*e2/eps0ij
1030 c eneps_temp(2,ij)=eneps_temp(2,ij)+(rij_shift*rr0ij)**expon
1031 c-----------------------
1032 c write (iout,*) "i",i," j",j," itypi",itypi," itypj",itypj,
1033 c & " ij",ij," eneps",aux*e1/dabs(eps(itypi,itypj)),
1034 c & aux*e2/eps(itypi,itypj)
1036 sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
1037 epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
1038 write (iout,'(2(a3,i3,2x),17(0pf7.3))')
1039 & restyp(itypi),i,restyp(itypj),j,
1040 & epsi,sigm,chi1,chi2,chip1,chip2,
1041 & eps1,eps2rt**2,eps3rt**2,sig,sig0ij,
1042 & om1,om2,om12,1.0D0/rij,1.0D0/rij_shift,
1046 C Calculate gradient components.
1047 e1=e1*eps1*eps2rt**2*eps3rt**2
1048 fac=-expon*(e1+evdwij)*rij_shift
1051 C Calculate the radial part of the gradient
1055 C Calculate angular part of the gradient.
1066 C-----------------------------------------------------------------------------
1067 subroutine egbv(evdw)
1069 C This subroutine calculates the interaction energy of nonbonded side chains
1070 C assuming the Gay-Berne-Vorobjev potential of interaction.
1072 implicit real*8 (a-h,o-z)
1073 include 'DIMENSIONS'
1074 include 'DIMENSIONS.ZSCOPT'
1075 include 'COMMON.GEO'
1076 include 'COMMON.VAR'
1077 include 'COMMON.LOCAL'
1078 include 'COMMON.CHAIN'
1079 include 'COMMON.DERIV'
1080 include 'COMMON.NAMES'
1081 include 'COMMON.INTERACT'
1082 include 'COMMON.WEIGHTDER'
1083 include 'COMMON.IOUNITS'
1084 include 'COMMON.CALC'
1085 common /srutu/ icall
1091 eneps_temp(j,i)=0.0d0
1095 c print *,'Entering EGB nnt=',nnt,' nct=',nct,' expon=',expon
1098 c if (icall.gt.0) lprn=.true.
1100 do i=iatsc_s,iatsc_e
1106 dxi=dc_norm(1,nres+i)
1107 dyi=dc_norm(2,nres+i)
1108 dzi=dc_norm(3,nres+i)
1109 dsci_inv=vbld_inv(i+nres)
1111 C Calculate SC interaction energy.
1113 do iint=1,nint_gr(i)
1114 do j=istart(i,iint),iend(i,iint)
1117 dscj_inv=vbld_inv(j+nres)
1118 sig0ij=sigma(itypi,itypj)
1119 r0ij=r0(itypi,itypj)
1120 chi1=chi(itypi,itypj)
1121 chi2=chi(itypj,itypi)
1128 alf12=0.5D0*(alf1+alf2)
1129 C For diagnostics only!!!
1142 dxj=dc_norm(1,nres+j)
1143 dyj=dc_norm(2,nres+j)
1144 dzj=dc_norm(3,nres+j)
1145 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
1147 C Calculate angle-dependent terms of energy and contributions to their
1151 sig=sig0ij*dsqrt(sigsq)
1152 rij_shift=1.0D0/rij-sig+r0ij
1153 C I hate to put IF's in the loops, but here don't have another choice!!!!
1154 if (rij_shift.le.0.0D0) then
1159 c---------------------------------------------------------------
1160 rij_shift=1.0D0/rij_shift
1161 fac=rij_shift**expon
1162 e1=fac*fac*aa(itypi,itypj)
1163 e2=fac*bb(itypi,itypj)
1164 evdwij=eps1*eps2rt*eps3rt*(e1+e2)
1165 eps2der=evdwij*eps3rt
1166 eps3der=evdwij*eps2rt
1167 fac_augm=rrij**expon
1168 e_augm=augm(itypi,itypj)*fac_augm
1169 evdwij=evdwij*eps2rt*eps3rt
1170 evdw=evdw+evdwij+e_augm
1171 ij=icant(itypi,itypj)
1172 aux=eps1*eps2rt**2*eps3rt**2
1173 eneps_temp(1,ij)=eneps_temp(1,ij)+aux*(e1+e_augm)
1174 & /dabs(eps(itypi,itypj))
1175 eneps_temp(2,ij)=eneps_temp(2,ij)+aux*e2/eps(itypi,itypj)
1176 c eneps_temp(ij)=eneps_temp(ij)
1177 c & +(evdwij+e_augm)/eps(itypi,itypj)
1179 c sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
1180 c epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
1181 c write (iout,'(2(a3,i3,2x),17(0pf7.3))')
1182 c & restyp(itypi),i,restyp(itypj),j,
1183 c & epsi,sigm,sig,(augm(itypi,itypj)/epsi)**(1.0D0/12.0D0),
1184 c & chi1,chi2,chip1,chip2,
1185 c & eps1,eps2rt**2,eps3rt**2,
1186 c & om1,om2,om12,1.0D0/rij,1.0D0/rij_shift,
1190 C Calculate gradient components.
1191 e1=e1*eps1*eps2rt**2*eps3rt**2
1192 fac=-expon*(e1+evdwij)*rij_shift
1194 fac=rij*fac-2*expon*rrij*e_augm
1195 C Calculate the radial part of the gradient
1199 C Calculate angular part of the gradient.
1207 C-----------------------------------------------------------------------------
1208 SUBROUTINE emomo(evdw,evdw_p,evdw_m)
1210 C This subroutine calculates the interaction energy of nonbonded side chains
1211 C assuming the Gay-Berne potential of interaction.
1214 INCLUDE 'DIMENSIONS'
1215 INCLUDE 'DIMENSIONS.ZSCOPT'
1216 INCLUDE 'COMMON.CALC'
1217 INCLUDE 'COMMON.CONTROL'
1218 INCLUDE 'COMMON.CHAIN'
1219 INCLUDE 'COMMON.DERIV'
1220 INCLUDE 'COMMON.EMP'
1221 INCLUDE 'COMMON.GEO'
1222 INCLUDE 'COMMON.INTERACT'
1223 INCLUDE 'COMMON.IOUNITS'
1224 INCLUDE 'COMMON.LOCAL'
1225 INCLUDE 'COMMON.NAMES'
1226 INCLUDE 'COMMON.VAR'
1227 INCLUDE 'COMMON.WEIGHTDER'
1229 double precision scalar
1230 double precision ener(4)
1236 IF (energy_dec) write (iout,'(a)')
1237 & ' AAi i AAj j 1/rij Rtail Rhead evdwij Fcav Ecl
1238 & Egb Epol Fisocav Elj Equad evdw'
1243 ccccc energy_dec=.false.
1244 c print *,'Entering EGB nnt=',nnt,' nct=',nct,' expon=',expon
1246 c if (icall.eq.0) lprn=.false.
1249 DO i = iatsc_s, iatsc_e
1251 c itypi1 = itype(i+1)
1252 dxi = dc_norm(1,nres+i)
1253 dyi = dc_norm(2,nres+i)
1254 dzi = dc_norm(3,nres+i)
1255 c dsci_inv=dsc_inv(itypi)
1256 dsci_inv = vbld_inv(i+nres)
1258 c ctail(k,1) = c(k, i+nres)
1259 c & - dtail(1,itypi,itypj) * dc_norm(k, nres+i)
1264 c!-------------------------------------------------------------------
1265 C Calculate SC interaction energy.
1266 DO iint = 1, nint_gr(i)
1267 DO j = istart(i,iint), iend(i,iint)
1268 c! initialize variables for electrostatic gradients
1269 CALL elgrad_init(eheadtail,Egb,Ecl,Elj,Equad,Epol)
1271 c dscj_inv = dsc_inv(itypj)
1272 dscj_inv = vbld_inv(j+nres)
1273 c! rij holds 1/(distance of Calpha atoms)
1274 rrij = 1.0D0 / ( xj*xj + yj*yj + zj*zj)
1276 c!-------------------------------------------------------------------
1277 C Calculate angle-dependent terms of energy and contributions to their
1281 c! DO troll = 10, 5000
1285 c! sqom1 = om1 * om1
1286 c! sqom2 = om2 * om2
1287 c! sqom12 = om12 * om12
1288 c! rij = 5.0d0 / troll
1290 c! Rtail = troll / 5.0d0
1291 c! Rhead = troll / 5.0d0
1292 c! Rhead = dsqrt((Rtail**2)+((dabs(d1-d2))**2))
1293 c! Rtail = dsqrt((Rtail**2)
1294 c! & +((dabs(dtail(1,itypi,itypj)-dtail(2,itypi,itypj)))**2))
1295 c! rij = 1.0d0/Rtail
1299 c! this should be in elgrad_init but om's are calculated by sc_angular
1300 c! which in turn is used by older potentials
1301 c! which proves how tangled UNRES code is >.<
1302 c! om = omega, sqom = om^2
1305 sqom12 = om12 * om12
1307 c! now we calculate EGB - Gey-Berne
1308 c! It will be summed up in evdwij and saved in evdw
1309 sigsq = 1.0D0 / sigsq
1310 sig = sig0ij * dsqrt(sigsq)
1311 c! rij_shift = 1.0D0 / rij - sig + sig0ij
1312 rij_shift = Rtail - sig + sig0ij
1313 IF (rij_shift.le.0.0D0) THEN
1317 sigder = -sig * sigsq
1318 rij_shift = 1.0D0 / rij_shift
1319 fac = rij_shift**expon
1320 c1 = fac * fac * aa(itypi,itypj)
1322 c2 = fac * bb(itypi,itypj)
1324 evdwij = eps1 * eps2rt * eps3rt * ( c1 + c2 )
1325 eps2der = eps3rt * evdwij
1326 eps3der = eps2rt * evdwij
1327 c! evdwij = 4.0d0 * eps2rt * eps3rt * evdwij
1328 evdwij = eps2rt * eps3rt * evdwij
1330 c! write (*,*) "Gey Berne = ", evdwij
1332 IF (bb(itypi,itypj).gt.0) THEN
1333 evdw_p = evdw_p + evdwij
1335 evdw_m = evdw_m + evdwij
1341 c!-------------------------------------------------------------------
1342 c! Calculate some components of GGB
1343 c1 = c1 * eps1 * eps2rt**2 * eps3rt**2
1344 fac = -expon * (c1 + evdwij) * rij_shift
1345 sigder = fac * sigder
1347 c! Calculate distance derivative
1354 c! write (*,*) "gg(1) = ", gg(1)
1355 c! write (*,*) "gg(2) = ", gg(2)
1356 c! write (*,*) "gg(3) = ", gg(3)
1357 c! The angular derivatives of GGB are brought together in sc_grad
1358 c!-------------------------------------------------------------------
1361 c! Catch gly-gly interactions to skip calculation of something that
1364 IF (itypi.eq.10.and.itypj.eq.10) THEN
1372 c! we are not 2 glycines, so we calculate Fcav (and maybe more)
1373 fac = chis1 * sqom1 + chis2 * sqom2
1374 & - 2.0d0 * chis12 * om1 * om2 * om12
1375 c! we will use pom later in Gcav, so dont mess with it!
1376 pom = 1.0d0 - chis1 * chis2 * sqom12
1378 Lambf = (1.0d0 - (fac / pom))
1379 Lambf = dsqrt(Lambf)
1382 sparrow = 1.0d0 / dsqrt(sig1**2.0d0 + sig2**2.0d0)
1383 c! write (*,*) "sparrow = ", sparrow
1384 Chif = Rtail * sparrow
1385 ChiLambf = Chif * Lambf
1386 eagle = dsqrt(ChiLambf)
1387 bat = ChiLambf ** 11.0d0
1389 top = b1 * ( eagle + b2 * ChiLambf - b3 )
1390 bot = 1.0d0 + b4 * (ChiLambf ** 12.0d0)
1393 c! write (*,*) "sig1 = ",sig1
1394 c! write (*,*) "sig2 = ",sig2
1395 c! write (*,*) "Rtail = ",Rtail
1396 c! write (*,*) "sparrow = ",sparrow
1397 c! write (*,*) "Chis1 = ", chis1
1398 c! write (*,*) "Chis2 = ", chis2
1399 c! write (*,*) "Chis12 = ", chis12
1400 c! write (*,*) "om1 = ", om1
1401 c! write (*,*) "om2 = ", om2
1402 c! write (*,*) "om12 = ", om12
1403 c! write (*,*) "sqom1 = ", sqom1
1404 c! write (*,*) "sqom2 = ", sqom2
1405 c! write (*,*) "sqom12 = ", sqom12
1406 c! write (*,*) "Lambf = ",Lambf
1407 c! write (*,*) "b1 = ",b1
1408 c! write (*,*) "b2 = ",b2
1409 c! write (*,*) "b3 = ",b3
1410 c! write (*,*) "b4 = ",b4
1411 c! write (*,*) "top = ",top
1412 c! write (*,*) "bot = ",bot
1415 c! write (*,*) "Fcav = ", Fcav
1416 c!-------------------------------------------------------------------
1417 c! derivative of Fcav is Gcav...
1418 c!---------------------------------------------------
1420 dtop = b1 * ((Lambf / (2.0d0 * eagle)) + (b2 * Lambf))
1421 dbot = 12.0d0 * b4 * bat * Lambf
1422 dFdR = ((dtop * bot - top * dbot) / botsq) * sparrow
1424 c! write (*,*) "dFcav/dR = ", dFdR
1426 dtop = b1 * ((Chif / (2.0d0 * eagle)) + (b2 * Chif))
1427 dbot = 12.0d0 * b4 * bat * Chif
1429 dFdOM1 = -(chis1 * om1 - chis12 * om2 * om12) / (eagle)
1430 dFdOM2 = -(chis2 * om2 - chis12 * om1 * om12) / (eagle)
1431 dFdOM12 = chis12 * (chis1 * om1 * om12 - om2)
1432 & * (chis2 * om2 * om12 - om1) / (eagle * pom)
1434 dFdL = ((dtop * bot - top * dbot) / botsq)
1436 dCAVdOM1 = dFdL * ( dFdOM1 )
1437 dCAVdOM2 = dFdL * ( dFdOM2 )
1438 dCAVdOM12 = dFdL * ( dFdOM12 )
1439 c! write (*,*) "dFcav/dOM1 = ", dCAVdOM1
1440 c! write (*,*) "dFcav/dOM2 = ", dCAVdOM2
1441 c! write (*,*) "dFcav/dOM12 = ", dCAVdOM12
1443 c!-------------------------------------------------------------------
1444 c! Finally, add the distance derivatives of GB and Fcav to gvdwc
1445 c! Pom is used here to project the gradient vector into
1446 c! cartesian coordinates and at the same time contains
1447 c! dXhb/dXsc derivative (for charged amino acids
1448 c! location of hydrophobic centre of interaction is not
1449 c! the same as geometric centre of side chain, this
1450 c! derivative takes that into account)
1451 c! derivatives of omega angles will be added in sc_grad
1454 ertail(k) = Rtail_distance(k)/Rtail
1456 erdxi = scalar( ertail(1), dC_norm(1,i+nres) )
1457 erdxj = scalar( ertail(1), dC_norm(1,j+nres) )
1458 facd1 = dtail(1,itypi,itypj) * vbld_inv(i+nres)
1459 facd2 = dtail(2,itypi,itypj) * vbld_inv(j+nres)
1461 c! write (*,*) "Gvdwc(",k,",",i,")=", gvdwc(k,i)
1462 c! write (*,*) "Gvdwc(",k,",",j,")=", gvdwc(k,j)
1463 pom = ertail(k)-facd1*(ertail(k)-erdxi*dC_norm(k,i+nres))
1464 gvdwx(k,i) = gvdwx(k,i)
1465 & - (( dFdR + gg(k) ) * pom)
1466 c! & - ( dFdR * pom )
1467 pom = ertail(k)-facd2*(ertail(k)-erdxj*dC_norm(k,j+nres))
1468 gvdwx(k,j) = gvdwx(k,j)
1469 & + (( dFdR + gg(k) ) * pom)
1470 c! & + ( dFdR * pom )
1472 gvdwc(k,i) = gvdwc(k,i)
1473 & - (( dFdR + gg(k) ) * ertail(k))
1474 c! & - ( dFdR * ertail(k))
1476 gvdwc(k,j) = gvdwc(k,j)
1477 & + (( dFdR + gg(k) ) * ertail(k))
1478 c! & + ( dFdR * ertail(k))
1481 c! write (*,*) "Gvdwc(",k,",",i,")=", gvdwc(k,i)
1482 c! write (*,*) "Gvdwc(",k,",",j,")=", gvdwc(k,j)
1485 c!-------------------------------------------------------------------
1486 c! Compute head-head and head-tail energies for each state
1488 isel = iabs(Qi) + iabs(Qj)
1490 c! No charges - do nothing
1493 ELSE IF (isel.eq.4) THEN
1494 c! Calculate dipole-dipole interactions
1498 ELSE IF (isel.eq.1 .and. iabs(Qi).eq.1) THEN
1499 c! Charge-nonpolar interactions
1503 ELSE IF (isel.eq.1 .and. iabs(Qj).eq.1) THEN
1504 c! Nonpolar-charge interactions
1508 ELSE IF (isel.eq.3 .and. icharge(itypj).eq.2) THEN
1509 c! Charge-dipole interactions
1510 CALL eqd(ecl, elj, epol)
1511 eheadtail = ECL + elj + epol
1513 ELSE IF (isel.eq.3 .and. icharge(itypi).eq.2) THEN
1514 c! Dipole-charge interactions
1515 CALL edq(ecl, elj, epol)
1516 eheadtail = ECL + elj + epol
1518 ELSE IF ((isel.eq.2.and.
1519 & iabs(Qi).eq.1).and.
1520 & nstate(itypi,itypj).eq.1) THEN
1521 c! Same charge-charge interaction ( +/+ or -/- )
1522 CALL eqq(Ecl,Egb,Epol,Fisocav,Elj)
1523 eheadtail = ECL + Egb + Epol + Fisocav + Elj
1525 ELSE IF ((isel.eq.2.and.
1526 & iabs(Qi).eq.1).and.
1527 & nstate(itypi,itypj).ne.1) THEN
1528 c! Different charge-charge interaction ( +/- or -/+ )
1530 & (istate,eheadtail,Ecl,Egb,Epol,Fisocav,Elj,Equad)
1532 END IF ! this endif ends the "catch the gly-gly" at the beggining of Fcav
1533 c! write (*,*) "evdw = ", evdw
1534 c! write (*,*) "Fcav = ", Fcav
1535 c! write (*,*) "eheadtail = ", eheadtail
1539 ij=icant(itypi,itypj)
1540 eneps_temp(1,ij)=eneps_temp(1,ij)+evdwij
1541 eneps_temp(2,ij)=eneps_temp(2,ij)+Fcav
1542 eneps_temp(3,ij)=eheadtail
1543 IF (energy_dec) write (iout,'(2(1x,a3,i3),3f6.2,9f16.7)')
1544 & restyp(itype(i)),i,restyp(itype(j)),j,
1545 & 1.0d0/rij,Rtail,Rhead,evdwij,Fcav,Ecl,Egb,Epol,Fisocav,Elj,
1547 IF (energy_dec) write (*,'(2(1x,a3,i3),3f6.2,9f16.7)')
1548 & restyp(itype(i)),i,restyp(itype(j)),j,
1549 & 1.0d0/rij,Rtail,Rhead,evdwij,Fcav,Ecl,Egb,Epol,Fisocav,Elj,
1556 c!-------------------------------------------------------------------
1557 c! As all angular derivatives are done, now we sum them up,
1558 c! then transform and project into cartesian vectors and add to gvdwc
1559 c! We call sc_grad always, with the exception of +/- interaction.
1560 c! This is because energy_quad subroutine needs to handle
1561 c! this job in his own way.
1562 c! This IS probably not very efficient and SHOULD be optimised
1563 c! but it will require major restructurization of emomo
1564 c! so it will be left as it is for now
1565 c! write (*,*) 'troll1, nstate =', nstate (itypi,itypj)
1566 IF (nstate(itypi,itypj).eq.1) THEN
1568 IF (bb(itypi,itypj).gt.0) THEN
1577 c!-------------------------------------------------------------------
1582 c write (iout,*) "Number of loop steps in EGB:",ind
1583 c energy_dec=.false.
1585 END SUBROUTINE emomo
1587 C-----------------------------------------------------------------------------
1588 SUBROUTINE eqq(Ecl,Egb,Epol,Fisocav,Elj)
1590 INCLUDE 'DIMENSIONS'
1591 INCLUDE 'DIMENSIONS.ZSCOPT'
1592 INCLUDE 'COMMON.CALC'
1593 INCLUDE 'COMMON.CHAIN'
1594 INCLUDE 'COMMON.CONTROL'
1595 INCLUDE 'COMMON.DERIV'
1596 INCLUDE 'COMMON.EMP'
1597 INCLUDE 'COMMON.GEO'
1598 INCLUDE 'COMMON.INTERACT'
1599 INCLUDE 'COMMON.IOUNITS'
1600 INCLUDE 'COMMON.LOCAL'
1601 INCLUDE 'COMMON.NAMES'
1602 INCLUDE 'COMMON.VAR'
1603 double precision scalar, facd3, facd4, federmaus, adler
1604 c! Epol and Gpol analytical parameters
1605 alphapol1 = alphapol(itypi,itypj)
1606 alphapol2 = alphapol(itypj,itypi)
1607 c! Fisocav and Gisocav analytical parameters
1608 al1 = alphiso(1,itypi,itypj)
1609 al2 = alphiso(2,itypi,itypj)
1610 al3 = alphiso(3,itypi,itypj)
1611 al4 = alphiso(4,itypi,itypj)
1613 & / dsqrt(sigiso1(itypi, itypj)**2.0d0
1614 & + sigiso2(itypi,itypj)**2.0d0))
1616 pis = sig0head(itypi,itypj)
1617 eps_head = epshead(itypi,itypj)
1618 Rhead_sq = Rhead * Rhead
1619 c! R1 - distance between head of ith side chain and tail of jth sidechain
1620 c! R2 - distance between head of jth side chain and tail of ith sidechain
1624 c! Calculate head-to-tail distances needed by Epol
1625 R1=R1+(ctail(k,2)-chead(k,1))**2
1626 R2=R2+(chead(k,2)-ctail(k,1))**2
1632 c! R1 = dsqrt((Rtail**2)+((dtail(1,itypi,itypj)
1633 c! & +dhead(1,1,itypi,itypj))**2))
1634 c! R2 = dsqrt((Rtail**2)+((dtail(2,itypi,itypj)
1635 c! & +dhead(2,1,itypi,itypj))**2))
1636 c!-------------------------------------------------------------------
1637 c! Coulomb electrostatic interaction
1638 Ecl = (332.0d0 * Qij) / Rhead
1639 c! derivative of Ecl is Gcl...
1640 dGCLdR = (-332.0d0 * Qij ) / Rhead_sq
1644 c!-------------------------------------------------------------------
1645 c! Generalised Born Solvent Polarization
1646 c! Charged head polarizes the solvent
1647 ee = dexp(-( Rhead_sq ) / (4.0d0 * a12sq))
1648 Fgb = sqrt( ( Rhead_sq ) + a12sq * ee)
1649 Egb = -(332.0d0 * Qij * eps_inout_fac) / Fgb
1650 c! Derivative of Egb is Ggb...
1651 dGGBdFGB = -(-332.0d0 * Qij * eps_inout_fac) / (Fgb * Fgb)
1652 dFGBdR = ( Rhead * ( 2.0d0 - (0.5d0 * ee) ) )
1654 dGGBdR = dGGBdFGB * dFGBdR
1655 c!-------------------------------------------------------------------
1656 c! Fisocav - isotropic cavity creation term
1657 c! or "how much energy it costs to put charged head in water"
1659 top = al1 * (dsqrt(pom) + al2 * pom - al3)
1660 bot = (1.0d0 + al4 * pom**12.0d0)
1663 c! write (*,*) "Rhead = ",Rhead
1664 c! write (*,*) "csig = ",csig
1665 c! write (*,*) "pom = ",pom
1666 c! write (*,*) "al1 = ",al1
1667 c! write (*,*) "al2 = ",al2
1668 c! write (*,*) "al3 = ",al3
1669 c! write (*,*) "al4 = ",al4
1670 c! write (*,*) "top = ",top
1671 c! write (*,*) "bot = ",bot
1672 c! Derivative of Fisocav is GCV...
1673 dtop = al1 * ((1.0d0 / (2.0d0 * dsqrt(pom))) + al2)
1674 dbot = 12.0d0 * al4 * pom ** 11.0d0
1675 dGCVdR = ((dtop * bot - top * dbot) / botsq) * csig
1676 c!-------------------------------------------------------------------
1678 c! Polarization energy - charged heads polarize hydrophobic "neck"
1679 MomoFac1 = (1.0d0 - chi1 * sqom2)
1680 MomoFac2 = (1.0d0 - chi2 * sqom1)
1681 RR1 = ( R1 * R1 ) / MomoFac1
1682 RR2 = ( R2 * R2 ) / MomoFac2
1683 ee1 = exp(-( RR1 / (4.0d0 * a12sq) ))
1684 ee2 = exp(-( RR2 / (4.0d0 * a12sq) ))
1685 fgb1 = sqrt( RR1 + a12sq * ee1 )
1686 fgb2 = sqrt( RR2 + a12sq * ee2 )
1687 epol = 332.0d0 * eps_inout_fac * (
1688 & (( alphapol1 / fgb1 )**4.0d0)+((alphapol2/fgb2) ** 4.0d0 ))
1690 c write (*,*) "eps_inout_fac = ",eps_inout_fac
1691 c write (*,*) "alphapol1 = ", alphapol1
1692 c write (*,*) "alphapol2 = ", alphapol2
1693 c write (*,*) "fgb1 = ", fgb1
1694 c write (*,*) "fgb2 = ", fgb2
1695 c write (*,*) "epol = ", epol
1696 c! derivative of Epol is Gpol...
1697 dPOLdFGB1 = -(1328.0d0 * eps_inout_fac * alphapol1 ** 4.0d0)
1699 dPOLdFGB2 = -(1328.0d0 * eps_inout_fac * alphapol2 ** 4.0d0)
1701 dFGBdR1 = ( (R1 / MomoFac1)
1702 & * ( 2.0d0 - (0.5d0 * ee1) ) )
1703 & / ( 2.0d0 * fgb1 )
1704 dFGBdR2 = ( (R2 / MomoFac2)
1705 & * ( 2.0d0 - (0.5d0 * ee2) ) )
1706 & / ( 2.0d0 * fgb2 )
1707 dFGBdOM2 = (((R1 * R1 * chi1 * om2) / (MomoFac1 * MomoFac1))
1708 & * ( 2.0d0 - 0.5d0 * ee1) )
1709 & / ( 2.0d0 * fgb1 )
1710 dFGBdOM1 = (((R2 * R2 * chi2 * om1) / (MomoFac2 * MomoFac2))
1711 & * ( 2.0d0 - 0.5d0 * ee2) )
1712 & / ( 2.0d0 * fgb2 )
1713 dPOLdR1 = dPOLdFGB1 * dFGBdR1
1715 dPOLdR2 = dPOLdFGB2 * dFGBdR2
1717 dPOLdOM1 = dPOLdFGB2 * dFGBdOM1
1719 dPOLdOM2 = dPOLdFGB1 * dFGBdOM2
1721 c!-------------------------------------------------------------------
1723 c! Lennard-Jones 6-12 interaction between heads
1724 pom = (pis / Rhead)**6.0d0
1725 Elj = 4.0d0 * eps_head * pom * (pom-1.0d0)
1726 c! derivative of Elj is Glj
1727 dGLJdR = 4.0d0 * eps_head
1728 & * (((-12.0d0*pis**12.0d0)/(Rhead**13.0d0))
1729 & + (( 6.0d0*pis**6.0d0) /(Rhead**7.0d0)))
1730 c!-------------------------------------------------------------------
1731 c! Return the results
1732 c! These things do the dRdX derivatives, that is
1733 c! allow us to change what we see from function that changes with
1734 c! distance to function that changes with LOCATION (of the interaction
1737 erhead(k) = Rhead_distance(k)/Rhead
1738 erhead_tail(k,1) = ((ctail(k,2)-chead(k,1))/R1)
1739 erhead_tail(k,2) = ((chead(k,2)-ctail(k,1))/R2)
1742 erdxi = scalar( erhead(1), dC_norm(1,i+nres) )
1743 erdxj = scalar( erhead(1), dC_norm(1,j+nres) )
1744 bat = scalar( erhead_tail(1,1), dC_norm(1,i+nres) )
1745 federmaus = scalar(erhead_tail(1,1),dC_norm(1,j+nres))
1746 eagle = scalar( erhead_tail(1,2), dC_norm(1,j+nres) )
1747 adler = scalar( erhead_tail(1,2), dC_norm(1,i+nres) )
1748 facd1 = d1 * vbld_inv(i+nres)
1749 facd2 = d2 * vbld_inv(j+nres)
1750 facd3 = dtail(1,itypi,itypj) * vbld_inv(i+nres)
1751 facd4 = dtail(2,itypi,itypj) * vbld_inv(j+nres)
1753 c! Now we add appropriate partial derivatives (one in each dimension)
1755 hawk = (erhead_tail(k,1) +
1756 & facd1 * (erhead_tail(k,1) - bat * dC_norm(k,i+nres)))
1757 condor = (erhead_tail(k,2) +
1758 & facd2 * (erhead_tail(k,2) - eagle * dC_norm(k,j+nres)))
1760 pom = erhead(k)+facd1*(erhead(k)-erdxi*dC_norm(k,i+nres))
1761 gvdwx(k,i) = gvdwx(k,i)
1766 & - dPOLdR2 * (erhead_tail(k,2)
1767 & -facd3 * (erhead_tail(k,2) - adler * dC_norm(k,i+nres)))
1770 pom = erhead(k)+facd2*(erhead(k)-erdxj*dC_norm(k,j+nres))
1771 gvdwx(k,j) = gvdwx(k,j)
1775 & + dPOLdR1 * (erhead_tail(k,1)
1776 & -facd4 * (erhead_tail(k,1) - federmaus * dC_norm(k,j+nres)))
1777 & + dPOLdR2 * condor
1780 gvdwc(k,i) = gvdwc(k,i)
1781 & - dGCLdR * erhead(k)
1782 & - dGGBdR * erhead(k)
1783 & - dGCVdR * erhead(k)
1784 & - dPOLdR1 * erhead_tail(k,1)
1785 & - dPOLdR2 * erhead_tail(k,2)
1786 & - dGLJdR * erhead(k)
1788 gvdwc(k,j) = gvdwc(k,j)
1789 & + dGCLdR * erhead(k)
1790 & + dGGBdR * erhead(k)
1791 & + dGCVdR * erhead(k)
1792 & + dPOLdR1 * erhead_tail(k,1)
1793 & + dPOLdR2 * erhead_tail(k,2)
1794 & + dGLJdR * erhead(k)
1799 c!-------------------------------------------------------------------
1800 SUBROUTINE energy_quad
1801 &(istate,eheadtail,Ecl,Egb,Epol,Fisocav,Elj,Equad)
1803 INCLUDE 'DIMENSIONS'
1804 INCLUDE 'DIMENSIONS.ZSCOPT'
1805 INCLUDE 'COMMON.CALC'
1806 INCLUDE 'COMMON.CHAIN'
1807 INCLUDE 'COMMON.CONTROL'
1808 INCLUDE 'COMMON.DERIV'
1809 INCLUDE 'COMMON.EMP'
1810 INCLUDE 'COMMON.GEO'
1811 INCLUDE 'COMMON.INTERACT'
1812 INCLUDE 'COMMON.IOUNITS'
1813 INCLUDE 'COMMON.LOCAL'
1814 INCLUDE 'COMMON.NAMES'
1815 INCLUDE 'COMMON.VAR'
1816 double precision scalar
1817 double precision ener(4)
1818 double precision dcosom1(3),dcosom2(3)
1819 c! used in Epol derivatives
1820 double precision facd3, facd4
1821 double precision federmaus, adler
1822 c! Epol and Gpol analytical parameters
1823 alphapol1 = alphapol(itypi,itypj)
1824 alphapol2 = alphapol(itypj,itypi)
1825 c! Fisocav and Gisocav analytical parameters
1826 al1 = alphiso(1,itypi,itypj)
1827 al2 = alphiso(2,itypi,itypj)
1828 al3 = alphiso(3,itypi,itypj)
1829 al4 = alphiso(4,itypi,itypj)
1831 & / dsqrt(sigiso1(itypi, itypj)**2.0d0
1832 & + sigiso2(itypi,itypj)**2.0d0))
1834 w1 = wqdip(1,itypi,itypj)
1835 w2 = wqdip(2,itypi,itypj)
1836 pis = sig0head(itypi,itypj)
1837 eps_head = epshead(itypi,itypj)
1838 c! First things first:
1839 c! We need to do sc_grad's job with GB and Fcav
1841 & eps2der * eps2rt_om1
1842 & - 2.0D0 * alf1 * eps3der
1843 & + sigder * sigsq_om1
1846 & eps2der * eps2rt_om2
1847 & + 2.0D0 * alf2 * eps3der
1848 & + sigder * sigsq_om2
1851 & evdwij * eps1_om12
1852 & + eps2der * eps2rt_om12
1853 & - 2.0D0 * alf12 * eps3der
1854 & + sigder *sigsq_om12
1856 c! now some magical transformations to project gradient into
1857 c! three cartesian vectors
1859 dcosom1(k) = rij * (dc_norm(k,nres+i) - om1 * erij(k))
1860 dcosom2(k) = rij * (dc_norm(k,nres+j) - om2 * erij(k))
1861 gg(k) = gg(k) + eom1 * dcosom1(k) + eom2 * dcosom2(k)
1862 c! this acts on hydrophobic center of interaction
1863 gvdwx(k,i)= gvdwx(k,i) - gg(k)
1864 & + (eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,nres+i))
1865 & + eom1*(erij(k)-om1*dc_norm(k,nres+i)))*dsci_inv
1866 gvdwx(k,j)= gvdwx(k,j) + gg(k)
1867 & + (eom12*(dc_norm(k,nres+i)-om12*dc_norm(k,nres+j))
1868 & + eom2*(erij(k)-om2*dc_norm(k,nres+j)))*dscj_inv
1869 c! this acts on Calpha
1870 gvdwc(k,i)=gvdwc(k,i)-gg(k)
1871 gvdwc(k,j)=gvdwc(k,j)+gg(k)
1873 c! sc_grad is done, now we will compute
1882 c! d1 = dhead(1, 1, itypi, itypj)
1883 c! d2 = dhead(2, 1, itypi, itypj)
1884 c! R1 = dsqrt((Rtail**2)+((dtail(1,itypi,itypj)
1885 c! & +dhead(1,ii,itypi,itypj))**2))
1886 c! R2 = dsqrt((Rtail**2)+((dtail(2,itypi,itypj)
1887 c! & +dhead(2,jj,itypi,itypj))**2))
1888 c! Rhead = dsqrt((Rtail**2)+((dabs(d1-d2))**2))
1889 c! END OF ENERGY DEBUG
1890 c*************************************************************
1891 DO istate = 1, nstate(itypi,itypj)
1892 c*************************************************************
1893 IF (istate.ne.1) THEN
1894 IF (istate.lt.3) THEN
1900 d1 = dhead(1,ii,itypi,itypj)
1901 d2 = dhead(2,jj,itypi,itypj)
1903 chead(k,1) = c(k, i+nres) + d1 * dc_norm(k, i+nres)
1904 chead(k,2) = c(k, j+nres) + d2 * dc_norm(k, j+nres)
1905 Rhead_distance(k) = chead(k,2) - chead(k,1)
1907 c! pitagoras (root of sum of squares)
1909 & (Rhead_distance(1)*Rhead_distance(1))
1910 & + (Rhead_distance(2)*Rhead_distance(2))
1911 & + (Rhead_distance(3)*Rhead_distance(3)))
1913 Rhead_sq = Rhead * Rhead
1915 c! R1 - distance between head of ith side chain and tail of jth sidechain
1916 c! R2 - distance between head of jth side chain and tail of ith sidechain
1920 c! Calculate head-to-tail distances
1921 R1=R1+(ctail(k,2)-chead(k,1))**2
1922 R2=R2+(chead(k,2)-ctail(k,1))**2
1929 c! write (*,*) "istate = ", istate
1930 c! write (*,*) "ii = ", ii
1931 c! write (*,*) "jj = ", jj
1932 c! R1 = dsqrt((Rtail**2)+((dtail(1,itypi,itypj)
1933 c! & +dhead(1,ii,itypi,itypj))**2))
1934 c! R2 = dsqrt((Rtail**2)+((dtail(2,itypi,itypj)
1935 c! & +dhead(2,jj,itypi,itypj))**2))
1936 c! Rhead = dsqrt((Rtail**2)+((dabs(d1-d2))**2))
1937 c! Rhead_sq = Rhead * Rhead
1938 c! write (*,*) "d1 = ",d1
1939 c! write (*,*) "d2 = ",d2
1940 c! write (*,*) "R1 = ",R1
1941 c! write (*,*) "R2 = ",R2
1942 c! write (*,*) "Rhead = ",Rhead
1943 c! END OF ENERGY DEBUG
1945 c!-------------------------------------------------------------------
1946 c! Coulomb electrostatic interaction
1947 Ecl = (332.0d0 * Qij) / (Rhead * eps_in)
1949 c! write (*,*) "Ecl = ", Ecl
1950 c! derivative of Ecl is Gcl...
1951 dGCLdR = (-332.0d0 * Qij ) / (Rhead_sq * eps_in)
1956 c!-------------------------------------------------------------------
1957 c! Generalised Born Solvent Polarization
1958 ee = dexp(-( Rhead_sq ) / (4.0d0 * a12sq))
1959 Fgb = sqrt( ( Rhead_sq ) + a12sq * ee)
1960 Egb = -(332.0d0 * Qij * eps_inout_fac) / Fgb
1962 c! write (*,*) "a1*a2 = ", a12sq
1963 c! write (*,*) "Rhead = ", Rhead
1964 c! write (*,*) "Rhead_sq = ", Rhead_sq
1965 c! write (*,*) "ee = ", ee
1966 c! write (*,*) "Fgb = ", Fgb
1967 c! write (*,*) "fac = ", eps_inout_fac
1968 c! write (*,*) "Qij = ", Qij
1969 c! write (*,*) "Egb = ", Egb
1970 c! Derivative of Egb is Ggb...
1971 c! dFGBdR is used by Quad's later...
1972 dGGBdFGB = -(-332.0d0 * Qij * eps_inout_fac) / (Fgb * Fgb)
1973 dFGBdR = ( Rhead * ( 2.0d0 - (0.5d0 * ee) ) )
1975 dGGBdR = dGGBdFGB * dFGBdR
1977 c!-------------------------------------------------------------------
1978 c! Fisocav - isotropic cavity creation term
1980 top = al1 * (dsqrt(pom) + al2 * pom - al3)
1981 bot = (1.0d0 + al4 * pom**12.0d0)
1985 c! write (*,*) "pom = ",pom
1986 c! write (*,*) "al1 = ",al1
1987 c! write (*,*) "al2 = ",al2
1988 c! write (*,*) "al3 = ",al3
1989 c! write (*,*) "al4 = ",al4
1990 c! write (*,*) "top = ",top
1991 c! write (*,*) "bot = ",bot
1992 c! write (*,*) "Fisocav = ", Fisocav
1994 c! Derivative of Fisocav is GCV...
1995 dtop = al1 * ((1.0d0 / (2.0d0 * dsqrt(pom))) + al2)
1996 dbot = 12.0d0 * al4 * pom ** 11.0d0
1997 dGCVdR = ((dtop * bot - top * dbot) / botsq) * csig
1999 c!-------------------------------------------------------------------
2000 c! Polarization energy
2002 MomoFac1 = (1.0d0 - chi1 * sqom2)
2003 MomoFac2 = (1.0d0 - chi2 * sqom1)
2004 RR1 = ( R1 * R1 ) / MomoFac1
2005 RR2 = ( R2 * R2 ) / MomoFac2
2006 ee1 = exp(-( RR1 / (4.0d0 * a12sq) ))
2007 ee2 = exp(-( RR2 / (4.0d0 * a12sq) ))
2008 fgb1 = sqrt( RR1 + a12sq * ee1 )
2009 fgb2 = sqrt( RR2 + a12sq * ee2 )
2010 epol = 332.0d0 * eps_inout_fac * (
2011 & (( alphapol1 / fgb1 )**4.0d0)+((alphapol2/fgb2) ** 4.0d0 ))
2013 c! derivative of Epol is Gpol...
2014 dPOLdFGB1 = -(1328.0d0 * eps_inout_fac * alphapol1 ** 4.0d0)
2016 dPOLdFGB2 = -(1328.0d0 * eps_inout_fac * alphapol2 ** 4.0d0)
2018 dFGBdR1 = ( (R1 / MomoFac1)
2019 & * ( 2.0d0 - (0.5d0 * ee1) ) )
2020 & / ( 2.0d0 * fgb1 )
2021 dFGBdR2 = ( (R2 / MomoFac2)
2022 & * ( 2.0d0 - (0.5d0 * ee2) ) )
2023 & / ( 2.0d0 * fgb2 )
2024 dFGBdOM2 = (((R1 * R1 * chi1 * om2) / (MomoFac1 * MomoFac1))
2025 & * ( 2.0d0 - 0.5d0 * ee1) )
2026 & / ( 2.0d0 * fgb1 )
2027 dFGBdOM1 = (((R2 * R2 * chi2 * om1) / (MomoFac2 * MomoFac2))
2028 & * ( 2.0d0 - 0.5d0 * ee2) )
2029 & / ( 2.0d0 * fgb2 )
2030 dPOLdR1 = dPOLdFGB1 * dFGBdR1
2032 dPOLdR2 = dPOLdFGB2 * dFGBdR2
2034 dPOLdOM1 = dPOLdFGB2 * dFGBdOM1
2036 dPOLdOM2 = dPOLdFGB1 * dFGBdOM2
2038 c!-------------------------------------------------------------------
2040 pom = (pis / Rhead)**6.0d0
2041 Elj = 4.0d0 * eps_head * pom * (pom-1.0d0)
2043 c! derivative of Elj is Glj
2044 dGLJdR = 4.0d0 * eps_head
2045 & * (((-12.0d0*pis**12.0d0)/(Rhead**13.0d0))
2046 & + (( 6.0d0*pis**6.0d0) /(Rhead**7.0d0)))
2048 c!-------------------------------------------------------------------
2050 IF (Wqd.ne.0.0d0) THEN
2051 Beta1 = 5.0d0 + 3.0d0 * (sqom12 - 1.0d0)
2052 & - 37.5d0 * ( sqom1 + sqom2 )
2053 & + 157.5d0 * ( sqom1 * sqom2 )
2054 & - 45.0d0 * om1*om2*om12
2055 fac = -( Wqd / (2.0d0 * Fgb**5.0d0) )
2058 c! derivative of Equad...
2059 dQUADdR = ((2.5d0 * Wqd * Beta1) / (Fgb**6.0d0)) * dFGBdR
2062 & * (-75.0d0*om1 + 315.0d0*om1*sqom2 - 45.0d0*om2*om12)
2063 c! dQUADdOM1 = 0.0d0
2065 & * (-75.0d0*om2 + 315.0d0*sqom1*om2 - 45.0d0*om1*om12)
2066 c! dQUADdOM2 = 0.0d0
2068 & * ( 6.0d0*om12 - 45.0d0*om1*om2 )
2069 c! dQUADdOM12 = 0.0d0
2074 c!-------------------------------------------------------------------
2075 c! Return the results
2077 eom1 = dPOLdOM1 + dQUADdOM1
2078 eom2 = dPOLdOM2 + dQUADdOM2
2080 c! now some magical transformations to project gradient into
2081 c! three cartesian vectors
2083 dcosom1(k) = rij * (dc_norm(k,nres+i) - om1 * erij(k))
2084 dcosom2(k) = rij * (dc_norm(k,nres+j) - om2 * erij(k))
2085 tuna(k) = eom1 * dcosom1(k) + eom2 * dcosom2(k)
2089 erhead(k) = Rhead_distance(k)/Rhead
2090 erhead_tail(k,1) = ((ctail(k,2)-chead(k,1))/R1)
2091 erhead_tail(k,2) = ((chead(k,2)-ctail(k,1))/R2)
2093 erdxi = scalar( erhead(1), dC_norm(1,i+nres) )
2094 erdxj = scalar( erhead(1), dC_norm(1,j+nres) )
2095 bat = scalar( erhead_tail(1,1), dC_norm(1,i+nres) )
2096 federmaus = scalar(erhead_tail(1,1),dC_norm(1,j+nres))
2097 eagle = scalar( erhead_tail(1,2), dC_norm(1,j+nres) )
2098 adler = scalar( erhead_tail(1,2), dC_norm(1,i+nres) )
2099 facd1 = d1 * vbld_inv(i+nres)
2100 facd2 = d2 * vbld_inv(j+nres)
2101 facd3 = dtail(1,itypi,itypj) * vbld_inv(i+nres)
2102 facd4 = dtail(2,itypi,itypj) * vbld_inv(j+nres)
2103 c! Throw the results into gheadtail which holds gradients
2104 c! for each micro-state
2106 hawk = erhead_tail(k,1) +
2107 & facd1 * (erhead_tail(k,1) - bat * dC_norm(k,i+nres))
2108 condor = erhead_tail(k,2) +
2109 & facd2 * (erhead_tail(k,2) - eagle * dC_norm(k,j+nres))
2111 pom = erhead(k)+facd1*(erhead(k)-erdxi*dC_norm(k,i+nres))
2112 c! this acts on hydrophobic center of interaction
2113 gheadtail(k,1,1) = gheadtail(k,1,1)
2118 & - dPOLdR2 * (erhead_tail(k,2)
2119 & -facd3 * (erhead_tail(k,2) - adler * dC_norm(k,i+nres)))
2123 & + (eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,nres+i))
2124 & + eom1*(erij(k)-om1*dc_norm(k,nres+i)))*dsci_inv
2126 pom = erhead(k)+facd2*(erhead(k)-erdxj*dC_norm(k,j+nres))
2127 c! this acts on hydrophobic center of interaction
2128 gheadtail(k,2,1) = gheadtail(k,2,1)
2132 & + dPOLdR1 * (erhead_tail(k,1)
2133 & -facd4 * (erhead_tail(k,1) - federmaus * dC_norm(k,j+nres)))
2134 & + dPOLdR2 * condor
2138 & + (eom12*(dc_norm(k,nres+i)-om12*dc_norm(k,nres+j))
2139 & + eom2*(erij(k)-om2*dc_norm(k,nres+j)))*dscj_inv
2141 c! this acts on Calpha
2142 gheadtail(k,3,1) = gheadtail(k,3,1)
2143 & - dGCLdR * erhead(k)
2144 & - dGGBdR * erhead(k)
2145 & - dGCVdR * erhead(k)
2146 & - dPOLdR1 * erhead_tail(k,1)
2147 & - dPOLdR2 * erhead_tail(k,2)
2148 & - dGLJdR * erhead(k)
2149 & - dQUADdR * erhead(k)
2152 c! this acts on Calpha
2153 gheadtail(k,4,1) = gheadtail(k,4,1)
2154 & + dGCLdR * erhead(k)
2155 & + dGGBdR * erhead(k)
2156 & + dGCVdR * erhead(k)
2157 & + dPOLdR1 * erhead_tail(k,1)
2158 & + dPOLdR2 * erhead_tail(k,2)
2159 & + dGLJdR * erhead(k)
2160 & + dQUADdR * erhead(k)
2163 c! write(*,*) "ECL = ", Ecl
2164 c! write(*,*) "Egb = ", Egb
2165 c! write(*,*) "Epol = ", Epol
2166 c! write(*,*) "Fisocav = ", Fisocav
2167 c! write(*,*) "Elj = ", Elj
2168 c! write(*,*) "Equad = ", Equad
2169 c! write(*,*) "wstate = ", wstate(istate,itypi,itypj)
2170 c! write(*,*) "eheadtail = ", eheadtail
2171 c! write(*,*) "TROLL = ", dexp(-betaT * ener(istate))
2172 c! write(*,*) "dGCLdR = ", dGCLdR
2173 c! write(*,*) "dGGBdR = ", dGGBdR
2174 c! write(*,*) "dGCVdR = ", dGCVdR
2175 c! write(*,*) "dPOLdR1 = ", dPOLdR1
2176 c! write(*,*) "dPOLdR2 = ", dPOLdR2
2177 c! write(*,*) "dGLJdR = ", dGLJdR
2178 c! write(*,*) "dQUADdR = ", dQUADdR
2179 c! write(*,*) "tuna(",k,") = ", tuna(k)
2180 ener(istate) = ECL + Egb + Epol + Fisocav + Elj + Equad
2181 eheadtail = eheadtail
2182 & + wstate(istate, itypi, itypj)
2183 & * dexp(-betaT * ener(istate))
2184 c! foreach cartesian dimension
2186 c! foreach of two gvdwx and gvdwc
2188 gheadtail(k,l,2) = gheadtail(k,l,2)
2189 & + wstate( istate, itypi, itypj )
2190 & * dexp(-betaT * ener(istate))
2191 & * gheadtail(k,l,1)
2192 gheadtail(k,l,1) = 0.0d0
2196 c! Here ended the gigantic DO istate = 1, 4, which starts
2197 c! at the beggining of the subroutine
2201 gheadtail(k,l,2) = gheadtail(k,l,2) / eheadtail
2203 gvdwx(k,i) = gvdwx(k,i) + gheadtail(k,1,2)
2204 gvdwx(k,j) = gvdwx(k,j) + gheadtail(k,2,2)
2205 gvdwc(k,i) = gvdwc(k,i) + gheadtail(k,3,2)
2206 gvdwc(k,j) = gvdwc(k,j) + gheadtail(k,4,2)
2208 gheadtail(k,l,1) = 0.0d0
2209 gheadtail(k,l,2) = 0.0d0
2212 eheadtail = (-dlog(eheadtail)) / betaT
2219 END SUBROUTINE energy_quad
2220 c!-------------------------------------------------------------------
2221 SUBROUTINE eqn(Epol)
2223 INCLUDE 'DIMENSIONS'
2224 INCLUDE 'DIMENSIONS.ZSCOPT'
2225 INCLUDE 'COMMON.CALC'
2226 INCLUDE 'COMMON.CHAIN'
2227 INCLUDE 'COMMON.CONTROL'
2228 INCLUDE 'COMMON.DERIV'
2229 INCLUDE 'COMMON.EMP'
2230 INCLUDE 'COMMON.GEO'
2231 INCLUDE 'COMMON.INTERACT'
2232 INCLUDE 'COMMON.IOUNITS'
2233 INCLUDE 'COMMON.LOCAL'
2234 INCLUDE 'COMMON.NAMES'
2235 INCLUDE 'COMMON.VAR'
2236 double precision scalar, facd4, federmaus
2237 alphapol1 = alphapol(itypi,itypj)
2238 c! R1 - distance between head of ith side chain and tail of jth sidechain
2241 c! Calculate head-to-tail distances
2242 R1=R1+(ctail(k,2)-chead(k,1))**2
2247 c! R1 = dsqrt((Rtail**2)+((dtail(1,itypi,itypj)
2248 c! & +dhead(1,1,itypi,itypj))**2))
2249 c! R2 = dsqrt((Rtail**2)+((dtail(2,itypi,itypj)
2250 c! & +dhead(2,1,itypi,itypj))**2))
2251 c--------------------------------------------------------------------
2252 c Polarization energy
2254 MomoFac1 = (1.0d0 - chi1 * sqom2)
2255 RR1 = R1 * R1 / MomoFac1
2256 ee1 = exp(-( RR1 / (4.0d0 * a12sq) ))
2257 fgb1 = sqrt( RR1 + a12sq * ee1)
2258 epol = 332.0d0 * eps_inout_fac * (( alphapol1 / fgb1 )**4.0d0)
2260 c!------------------------------------------------------------------
2261 c! derivative of Epol is Gpol...
2262 dPOLdFGB1 = -(1328.0d0 * eps_inout_fac * alphapol1 ** 4.0d0)
2264 dFGBdR1 = ( (R1 / MomoFac1)
2265 & * ( 2.0d0 - (0.5d0 * ee1) ) )
2266 & / ( 2.0d0 * fgb1 )
2267 dFGBdOM2 = (((R1 * R1 * chi1 * om2) / (MomoFac1 * MomoFac1))
2268 & * (2.0d0 - 0.5d0 * ee1) )
2270 dPOLdR1 = dPOLdFGB1 * dFGBdR1
2273 dPOLdOM2 = dPOLdFGB1 * dFGBdOM2
2275 c!-------------------------------------------------------------------
2276 c! Return the results
2277 c! (see comments in Eqq)
2279 erhead_tail(k,1) = ((ctail(k,2)-chead(k,1))/R1)
2281 bat = scalar( erhead_tail(1,1), dC_norm(1,i+nres) )
2282 federmaus = scalar(erhead_tail(1,1),dC_norm(1,j+nres))
2283 facd1 = d1 * vbld_inv(i+nres)
2284 facd4 = dtail(2,itypi,itypj) * vbld_inv(j+nres)
2287 hawk = (erhead_tail(k,1) +
2288 & facd1 * (erhead_tail(k,1) - bat * dC_norm(k,i+nres)))
2290 gvdwx(k,i) = gvdwx(k,i)
2292 gvdwx(k,j) = gvdwx(k,j)
2293 & + dPOLdR1 * (erhead_tail(k,1)
2294 & -facd4 * (erhead_tail(k,1) - federmaus * dC_norm(k,j+nres)))
2296 gvdwc(k,i) = gvdwc(k,i)
2297 & - dPOLdR1 * erhead_tail(k,1)
2298 gvdwc(k,j) = gvdwc(k,j)
2299 & + dPOLdR1 * erhead_tail(k,1)
2306 c!-------------------------------------------------------------------
2310 SUBROUTINE enq(Epol)
2312 INCLUDE 'DIMENSIONS'
2313 INCLUDE 'DIMENSIONS.ZSCOPT'
2314 INCLUDE 'COMMON.CALC'
2315 INCLUDE 'COMMON.CHAIN'
2316 INCLUDE 'COMMON.CONTROL'
2317 INCLUDE 'COMMON.DERIV'
2318 INCLUDE 'COMMON.EMP'
2319 INCLUDE 'COMMON.GEO'
2320 INCLUDE 'COMMON.INTERACT'
2321 INCLUDE 'COMMON.IOUNITS'
2322 INCLUDE 'COMMON.LOCAL'
2323 INCLUDE 'COMMON.NAMES'
2324 INCLUDE 'COMMON.VAR'
2325 double precision scalar, facd3, adler
2326 alphapol2 = alphapol(itypj,itypi)
2327 c! R2 - distance between head of jth side chain and tail of ith sidechain
2330 c! Calculate head-to-tail distances
2331 R2=R2+(chead(k,2)-ctail(k,1))**2
2336 c! R1 = dsqrt((Rtail**2)+((dtail(1,itypi,itypj)
2337 c! & +dhead(1,1,itypi,itypj))**2))
2338 c! R2 = dsqrt((Rtail**2)+((dtail(2,itypi,itypj)
2339 c! & +dhead(2,1,itypi,itypj))**2))
2340 c------------------------------------------------------------------------
2341 c Polarization energy
2342 MomoFac2 = (1.0d0 - chi2 * sqom1)
2343 RR2 = R2 * R2 / MomoFac2
2344 ee2 = exp(-(RR2 / (4.0d0 * a12sq)))
2345 fgb2 = sqrt(RR2 + a12sq * ee2)
2346 epol = 332.0d0 * eps_inout_fac * ((alphapol2/fgb2) ** 4.0d0 )
2348 c!-------------------------------------------------------------------
2349 c! derivative of Epol is Gpol...
2350 dPOLdFGB2 = -(1328.0d0 * eps_inout_fac * alphapol2 ** 4.0d0)
2352 dFGBdR2 = ( (R2 / MomoFac2)
2353 & * ( 2.0d0 - (0.5d0 * ee2) ) )
2355 dFGBdOM1 = (((R2 * R2 * chi2 * om1) / (MomoFac2 * MomoFac2))
2356 & * (2.0d0 - 0.5d0 * ee2) )
2358 dPOLdR2 = dPOLdFGB2 * dFGBdR2
2360 dPOLdOM1 = dPOLdFGB2 * dFGBdOM1
2363 c!-------------------------------------------------------------------
2364 c! Return the results
2365 c! (See comments in Eqq)
2367 erhead_tail(k,2) = ((chead(k,2)-ctail(k,1))/R2)
2369 eagle = scalar( erhead_tail(1,2), dC_norm(1,j+nres) )
2370 adler = scalar( erhead_tail(1,2), dC_norm(1,i+nres) )
2371 facd2 = d2 * vbld_inv(j+nres)
2372 facd3 = dtail(1,itypi,itypj) * vbld_inv(i+nres)
2374 condor = (erhead_tail(k,2)
2375 & + facd2 * (erhead_tail(k,2) - eagle * dC_norm(k,j+nres)))
2377 gvdwx(k,i) = gvdwx(k,i)
2378 & - dPOLdR2 * (erhead_tail(k,2)
2379 & -facd3 * (erhead_tail(k,2) - adler * dC_norm(k,i+nres)))
2380 gvdwx(k,j) = gvdwx(k,j)
2381 & + dPOLdR2 * condor
2383 gvdwc(k,i) = gvdwc(k,i)
2384 & - dPOLdR2 * erhead_tail(k,2)
2385 gvdwc(k,j) = gvdwc(k,j)
2386 & + dPOLdR2 * erhead_tail(k,2)
2393 c!-------------------------------------------------------------------
2396 SUBROUTINE eqd(Ecl,Elj,Epol)
2398 INCLUDE 'DIMENSIONS'
2399 INCLUDE 'DIMENSIONS.ZSCOPT'
2400 INCLUDE 'COMMON.CALC'
2401 INCLUDE 'COMMON.CHAIN'
2402 INCLUDE 'COMMON.CONTROL'
2403 INCLUDE 'COMMON.DERIV'
2404 INCLUDE 'COMMON.EMP'
2405 INCLUDE 'COMMON.GEO'
2406 INCLUDE 'COMMON.INTERACT'
2407 INCLUDE 'COMMON.IOUNITS'
2408 INCLUDE 'COMMON.LOCAL'
2409 INCLUDE 'COMMON.NAMES'
2410 INCLUDE 'COMMON.VAR'
2411 double precision scalar, facd4, federmaus
2412 alphapol1 = alphapol(itypi,itypj)
2413 w1 = wqdip(1,itypi,itypj)
2414 w2 = wqdip(2,itypi,itypj)
2415 pis = sig0head(itypi,itypj)
2416 eps_head = epshead(itypi,itypj)
2417 c!-------------------------------------------------------------------
2418 c! R1 - distance between head of ith side chain and tail of jth sidechain
2421 c! Calculate head-to-tail distances
2422 R1=R1+(ctail(k,2)-chead(k,1))**2
2427 c! R1 = dsqrt((Rtail**2)+((dtail(1,itypi,itypj)
2428 c! & +dhead(1,1,itypi,itypj))**2))
2429 c! R2 = dsqrt((Rtail**2)+((dtail(2,itypi,itypj)
2430 c! & +dhead(2,1,itypi,itypj))**2))
2432 c!-------------------------------------------------------------------
2434 sparrow = w1 * Qi * om1
2435 hawk = w2 * Qi * Qi * (1.0d0 - sqom2)
2436 Ecl = sparrow / Rhead**2.0d0
2437 & - hawk / Rhead**4.0d0
2438 c!-------------------------------------------------------------------
2439 c! derivative of ecl is Gcl
2441 dGCLdR = - 2.0d0 * sparrow / Rhead**3.0d0
2442 & + 4.0d0 * hawk / Rhead**5.0d0
2444 dGCLdOM1 = (w1 * Qi) / (Rhead**2.0d0)
2446 dGCLdOM2 = (2.0d0 * w2 * Qi * Qi * om2) / (Rhead ** 4.0d0)
2447 c--------------------------------------------------------------------
2448 c Polarization energy
2450 MomoFac1 = (1.0d0 - chi1 * sqom2)
2451 RR1 = R1 * R1 / MomoFac1
2452 ee1 = exp(-( RR1 / (4.0d0 * a12sq) ))
2453 fgb1 = sqrt( RR1 + a12sq * ee1)
2454 epol = 332.0d0 * eps_inout_fac * (( alphapol1 / fgb1 )**4.0d0)
2456 c!------------------------------------------------------------------
2457 c! derivative of Epol is Gpol...
2458 dPOLdFGB1 = -(1328.0d0 * eps_inout_fac * alphapol1 ** 4.0d0)
2460 dFGBdR1 = ( (R1 / MomoFac1)
2461 & * ( 2.0d0 - (0.5d0 * ee1) ) )
2462 & / ( 2.0d0 * fgb1 )
2463 dFGBdOM2 = (((R1 * R1 * chi1 * om2) / (MomoFac1 * MomoFac1))
2464 & * (2.0d0 - 0.5d0 * ee1) )
2466 dPOLdR1 = dPOLdFGB1 * dFGBdR1
2469 dPOLdOM2 = dPOLdFGB1 * dFGBdOM2
2471 c!-------------------------------------------------------------------
2473 pom = (pis / Rhead)**6.0d0
2474 Elj = 4.0d0 * eps_head * pom * (pom-1.0d0)
2475 c! derivative of Elj is Glj
2476 dGLJdR = 4.0d0 * eps_head
2477 & * (((-12.0d0*pis**12.0d0)/(Rhead**13.0d0))
2478 & + (( 6.0d0*pis**6.0d0) /(Rhead**7.0d0)))
2479 c!-------------------------------------------------------------------
2480 c! Return the results
2482 erhead(k) = Rhead_distance(k)/Rhead
2483 erhead_tail(k,1) = ((ctail(k,2)-chead(k,1))/R1)
2486 erdxi = scalar( erhead(1), dC_norm(1,i+nres) )
2487 erdxj = scalar( erhead(1), dC_norm(1,j+nres) )
2488 bat = scalar( erhead_tail(1,1), dC_norm(1,i+nres) )
2489 federmaus = scalar(erhead_tail(1,1),dC_norm(1,j+nres))
2490 facd1 = d1 * vbld_inv(i+nres)
2491 facd2 = d2 * vbld_inv(j+nres)
2492 facd4 = dtail(2,itypi,itypj) * vbld_inv(j+nres)
2495 hawk = (erhead_tail(k,1) +
2496 & facd1 * (erhead_tail(k,1) - bat * dC_norm(k,i+nres)))
2498 pom = erhead(k)+facd1*(erhead(k)-erdxi*dC_norm(k,i+nres))
2499 gvdwx(k,i) = gvdwx(k,i)
2504 pom = erhead(k)+facd2*(erhead(k)-erdxj*dC_norm(k,j+nres))
2505 gvdwx(k,j) = gvdwx(k,j)
2507 & + dPOLdR1 * (erhead_tail(k,1)
2508 & -facd4 * (erhead_tail(k,1) - federmaus * dC_norm(k,j+nres)))
2512 gvdwc(k,i) = gvdwc(k,i)
2513 & - dGCLdR * erhead(k)
2514 & - dPOLdR1 * erhead_tail(k,1)
2515 & - dGLJdR * erhead(k)
2517 gvdwc(k,j) = gvdwc(k,j)
2518 & + dGCLdR * erhead(k)
2519 & + dPOLdR1 * erhead_tail(k,1)
2520 & + dGLJdR * erhead(k)
2527 c!-------------------------------------------------------------------
2530 SUBROUTINE edq(Ecl,Elj,Epol)
2532 INCLUDE 'DIMENSIONS'
2533 INCLUDE 'DIMENSIONS.ZSCOPT'
2534 INCLUDE 'COMMON.CALC'
2535 INCLUDE 'COMMON.CHAIN'
2536 INCLUDE 'COMMON.CONTROL'
2537 INCLUDE 'COMMON.DERIV'
2538 INCLUDE 'COMMON.EMP'
2539 INCLUDE 'COMMON.GEO'
2540 INCLUDE 'COMMON.INTERACT'
2541 INCLUDE 'COMMON.IOUNITS'
2542 INCLUDE 'COMMON.LOCAL'
2543 INCLUDE 'COMMON.NAMES'
2544 INCLUDE 'COMMON.VAR'
2545 double precision scalar, facd3, adler
2546 alphapol2 = alphapol(itypj,itypi)
2547 w1 = wqdip(1,itypi,itypj)
2548 w2 = wqdip(2,itypi,itypj)
2549 pis = sig0head(itypi,itypj)
2550 eps_head = epshead(itypi,itypj)
2551 c!-------------------------------------------------------------------
2552 c! R2 - distance between head of jth side chain and tail of ith sidechain
2555 c! Calculate head-to-tail distances
2556 R2=R2+(chead(k,2)-ctail(k,1))**2
2561 c! R1 = dsqrt((Rtail**2)+((dtail(1,itypi,itypj)
2562 c! & +dhead(1,1,itypi,itypj))**2))
2563 c! R2 = dsqrt((Rtail**2)+((dtail(2,itypi,itypj)
2564 c! & +dhead(2,1,itypi,itypj))**2))
2567 c!-------------------------------------------------------------------
2569 sparrow = w1 * Qi * om1
2570 hawk = w2 * Qi * Qi * (1.0d0 - sqom2)
2571 ECL = sparrow / Rhead**2.0d0
2572 & - hawk / Rhead**4.0d0
2573 c!-------------------------------------------------------------------
2574 c! derivative of ecl is Gcl
2576 dGCLdR = - 2.0d0 * sparrow / Rhead**3.0d0
2577 & + 4.0d0 * hawk / Rhead**5.0d0
2579 dGCLdOM1 = (w1 * Qi) / (Rhead**2.0d0)
2581 dGCLdOM2 = (2.0d0 * w2 * Qi * Qi * om2) / (Rhead ** 4.0d0)
2582 c--------------------------------------------------------------------
2583 c Polarization energy
2585 MomoFac2 = (1.0d0 - chi2 * sqom1)
2586 RR2 = R2 * R2 / MomoFac2
2587 ee2 = exp(-(RR2 / (4.0d0 * a12sq)))
2588 fgb2 = sqrt(RR2 + a12sq * ee2)
2589 epol = 332.0d0 * eps_inout_fac * ((alphapol2/fgb2) ** 4.0d0 )
2591 c! derivative of Epol is Gpol...
2592 dPOLdFGB2 = -(1328.0d0 * eps_inout_fac * alphapol2 ** 4.0d0)
2594 dFGBdR2 = ( (R2 / MomoFac2)
2595 & * ( 2.0d0 - (0.5d0 * ee2) ) )
2597 dFGBdOM1 = (((R2 * R2 * chi2 * om1) / (MomoFac2 * MomoFac2))
2598 & * (2.0d0 - 0.5d0 * ee2) )
2600 dPOLdR2 = dPOLdFGB2 * dFGBdR2
2602 dPOLdOM1 = dPOLdFGB2 * dFGBdOM1
2605 c!-------------------------------------------------------------------
2607 pom = (pis / Rhead)**6.0d0
2608 Elj = 4.0d0 * eps_head * pom * (pom-1.0d0)
2609 c! derivative of Elj is Glj
2610 dGLJdR = 4.0d0 * eps_head
2611 & * (((-12.0d0*pis**12.0d0)/(Rhead**13.0d0))
2612 & + (( 6.0d0*pis**6.0d0) /(Rhead**7.0d0)))
2613 c!-------------------------------------------------------------------
2614 c! Return the results
2615 c! (see comments in Eqq)
2617 erhead(k) = Rhead_distance(k)/Rhead
2618 erhead_tail(k,2) = ((chead(k,2)-ctail(k,1))/R2)
2620 erdxi = scalar( erhead(1), dC_norm(1,i+nres) )
2621 erdxj = scalar( erhead(1), dC_norm(1,j+nres) )
2622 eagle = scalar( erhead_tail(1,2), dC_norm(1,j+nres) )
2623 adler = scalar( erhead_tail(1,2), dC_norm(1,i+nres) )
2624 facd1 = d1 * vbld_inv(i+nres)
2625 facd2 = d2 * vbld_inv(j+nres)
2626 facd3 = dtail(1,itypi,itypj) * vbld_inv(i+nres)
2629 condor = (erhead_tail(k,2)
2630 & + facd2 * (erhead_tail(k,2) - eagle * dC_norm(k,j+nres)))
2632 pom = erhead(k)+facd1*(erhead(k)-erdxi*dC_norm(k,i+nres))
2633 gvdwx(k,i) = gvdwx(k,i)
2635 & - dPOLdR2 * (erhead_tail(k,2)
2636 & -facd3 * (erhead_tail(k,2) - adler * dC_norm(k,i+nres)))
2639 pom = erhead(k)+facd2*(erhead(k)-erdxj*dC_norm(k,j+nres))
2640 gvdwx(k,j) = gvdwx(k,j)
2642 & + dPOLdR2 * condor
2646 gvdwc(k,i) = gvdwc(k,i)
2647 & - dGCLdR * erhead(k)
2648 & - dPOLdR2 * erhead_tail(k,2)
2649 & - dGLJdR * erhead(k)
2651 gvdwc(k,j) = gvdwc(k,j)
2652 & + dGCLdR * erhead(k)
2653 & + dPOLdR2 * erhead_tail(k,2)
2654 & + dGLJdR * erhead(k)
2661 C--------------------------------------------------------------------
2666 INCLUDE 'DIMENSIONS'
2667 INCLUDE 'DIMENSIONS.ZSCOPT'
2668 INCLUDE 'COMMON.CALC'
2669 INCLUDE 'COMMON.CHAIN'
2670 INCLUDE 'COMMON.CONTROL'
2671 INCLUDE 'COMMON.DERIV'
2672 INCLUDE 'COMMON.EMP'
2673 INCLUDE 'COMMON.GEO'
2674 INCLUDE 'COMMON.INTERACT'
2675 INCLUDE 'COMMON.IOUNITS'
2676 INCLUDE 'COMMON.LOCAL'
2677 INCLUDE 'COMMON.NAMES'
2678 INCLUDE 'COMMON.VAR'
2679 double precision scalar
2680 c! csig = sigiso(itypi,itypj)
2681 w1 = wqdip(1,itypi,itypj)
2682 w2 = wqdip(2,itypi,itypj)
2683 c!-------------------------------------------------------------------
2685 fac = (om12 - 3.0d0 * om1 * om2)
2686 c1 = (w1 / (Rhead**3.0d0)) * fac
2687 c2 = (w2 / Rhead ** 6.0d0)
2688 & * (4.0d0 + fac * fac -3.0d0 * (sqom1 + sqom2))
2690 c! write (*,*) "w1 = ", w1
2691 c! write (*,*) "w2 = ", w2
2692 c! write (*,*) "om1 = ", om1
2693 c! write (*,*) "om2 = ", om2
2694 c! write (*,*) "om12 = ", om12
2695 c! write (*,*) "fac = ", fac
2696 c! write (*,*) "c1 = ", c1
2697 c! write (*,*) "c2 = ", c2
2698 c! write (*,*) "Ecl = ", Ecl
2699 c! write (*,*) "c2_1 = ", (w2 / Rhead ** 6.0d0)
2700 c! write (*,*) "c2_2 = ",
2701 c! & (4.0d0 + fac * fac -3.0d0 * (sqom1 + sqom2))
2702 c!-------------------------------------------------------------------
2703 c! dervative of ECL is GCL...
2705 c1 = (-3.0d0 * w1 * fac) / (Rhead ** 4.0d0)
2706 c2 = (-6.0d0 * w2) / (Rhead ** 7.0d0)
2707 & * (4.0d0 + fac * fac - 3.0d0 * (sqom1 + sqom2))
2710 c1 = (-3.0d0 * w1 * om2 ) / (Rhead**3.0d0)
2711 c2 = (-6.0d0 * w2) / (Rhead**6.0d0)
2712 & * ( om2 * om12 - 3.0d0 * om1 * sqom2 + om1 )
2715 c1 = (-3.0d0 * w1 * om1 ) / (Rhead**3.0d0)
2716 c2 = (-6.0d0 * w2) / (Rhead**6.0d0)
2717 & * ( om1 * om12 - 3.0d0 * sqom1 * om2 + om2 )
2720 c1 = w1 / (Rhead ** 3.0d0)
2721 c2 = ( 2.0d0 * w2 * fac ) / Rhead ** 6.0d0
2723 c!-------------------------------------------------------------------
2724 c! Return the results
2725 c! (see comments in Eqq)
2727 erhead(k) = Rhead_distance(k)/Rhead
2729 erdxi = scalar( erhead(1), dC_norm(1,i+nres) )
2730 erdxj = scalar( erhead(1), dC_norm(1,j+nres) )
2731 facd1 = d1 * vbld_inv(i+nres)
2732 facd2 = d2 * vbld_inv(j+nres)
2735 pom = erhead(k)+facd1*(erhead(k)-erdxi*dC_norm(k,i+nres))
2736 gvdwx(k,i) = gvdwx(k,i)
2738 pom = erhead(k)+facd2*(erhead(k)-erdxj*dC_norm(k,j+nres))
2739 gvdwx(k,j) = gvdwx(k,j)
2742 gvdwc(k,i) = gvdwc(k,i)
2743 & - dGCLdR * erhead(k)
2744 gvdwc(k,j) = gvdwc(k,j)
2745 & + dGCLdR * erhead(k)
2751 c!-------------------------------------------------------------------
2754 SUBROUTINE elgrad_init(eheadtail,Egb,Ecl,Elj,Equad,Epol)
2757 INCLUDE 'DIMENSIONS'
2758 INCLUDE 'DIMENSIONS.ZSCOPT'
2759 c! itypi, itypj, i, j, k, l, chead,
2760 INCLUDE 'COMMON.CALC'
2762 INCLUDE 'COMMON.CHAIN'
2764 INCLUDE 'COMMON.DERIV'
2765 c! electrostatic gradients-specific variables
2766 INCLUDE 'COMMON.EMP'
2767 c! wquad, dhead, alphiso, alphasur, rborn, epsintab
2768 INCLUDE 'COMMON.INTERACT'
2770 c INCLUDE 'COMMON.MD'
2771 c! io for debug, disable it in final builds
2772 INCLUDE 'COMMON.IOUNITS'
2773 double precision Rb /1.987D-3/
2774 c!-------------------------------------------------------------------
2777 c! what amino acid is the aminoacid j'th?
2779 c! 1/(Gas Constant * Thermostate temperature) = BetaT
2780 c! ENABLE THIS LINE WHEN USING CHECKGRAD!!!
2782 c! BetaT = 1.0d0 / (t_bath * Rb)
2783 BetaT = 1.0d0 / (298.0d0 * Rb)
2785 sig0ij = sigma( itypi,itypj )
2786 chi1 = chi( itypi, itypj )
2787 chi2 = chi( itypj, itypi )
2789 chip1 = chipp( itypi, itypj )
2790 chip2 = chipp( itypj, itypi )
2791 chip12 = chip1 * chip2
2792 c! not used by momo potential, but needed by sc_angular which is shared
2793 c! by all energy_potential subroutines
2797 c! location, location, location
2798 xj = c( 1, nres+j ) - xi
2799 yj = c( 2, nres+j ) - yi
2800 zj = c( 3, nres+j ) - zi
2801 dxj = dc_norm( 1, nres+j )
2802 dyj = dc_norm( 2, nres+j )
2803 dzj = dc_norm( 3, nres+j )
2804 c! distance from center of chain(?) to polar/charged head
2805 c! write (*,*) "istate = ", 1
2806 c! write (*,*) "ii = ", 1
2807 c! write (*,*) "jj = ", 1
2808 d1 = dhead(1, 1, itypi, itypj)
2809 d2 = dhead(2, 1, itypi, itypj)
2811 a12sq = rborn(itypi,itypj) * rborn(itypj,itypi)
2812 c! a12sq = a12sq * a12sq
2813 c! charge of amino acid itypi is...
2818 chis1 = chis(itypi,itypj)
2819 chis2 = chis(itypj,itypi)
2820 chis12 = chis1 * chis2
2821 sig1 = sigmap1(itypi,itypj)
2822 sig2 = sigmap2(itypi,itypj)
2823 c! write (*,*) "sig1 = ", sig1
2824 c! write (*,*) "sig2 = ", sig2
2825 c! alpha factors from Fcav/Gcav
2826 b1 = alphasur(1,itypi,itypj)
2827 b2 = alphasur(2,itypi,itypj)
2828 b3 = alphasur(3,itypi,itypj)
2829 b4 = alphasur(4,itypi,itypj)
2830 c! used to determine whether we want to do quadrupole calculations
2831 wqd = wquad(itypi, itypj)
2833 eps_in = epsintab(itypi,itypj)
2834 eps_inout_fac = ( (1.0d0/eps_in) - (1.0d0/eps_out))
2835 c! write (*,*) "eps_inout_fac = ", eps_inout_fac
2836 c!-------------------------------------------------------------------
2837 c! tail location and distance calculations
2840 ctail(k,1)=c(k,i+nres)-dtail(1,itypi,itypj)*dc_norm(k,nres+i)
2841 ctail(k,2)=c(k,j+nres)-dtail(2,itypi,itypj)*dc_norm(k,nres+j)
2843 c! tail distances will be themselves usefull elswhere
2844 c1 (in Gcav, for example)
2845 Rtail_distance(1) = ctail( 1, 2 ) - ctail( 1,1 )
2846 Rtail_distance(2) = ctail( 2, 2 ) - ctail( 2,1 )
2847 Rtail_distance(3) = ctail( 3, 2 ) - ctail( 3,1 )
2849 & (Rtail_distance(1)*Rtail_distance(1))
2850 & + (Rtail_distance(2)*Rtail_distance(2))
2851 & + (Rtail_distance(3)*Rtail_distance(3)))
2852 c!-------------------------------------------------------------------
2853 c! Calculate location and distance between polar heads
2854 c! distance between heads
2855 c! for each one of our three dimensional space...
2857 c! location of polar head is computed by taking hydrophobic centre
2858 c! and moving by a d1 * dc_norm vector
2859 c! see unres publications for very informative images
2860 chead(k,1) = c(k, i+nres) + d1 * dc_norm(k, i+nres)
2861 chead(k,2) = c(k, j+nres) + d2 * dc_norm(k, j+nres)
2863 c! Rsc_distance(k) = dabs(c(k, i+nres) - c(k, j+nres))
2864 c! Rsc(k) = Rsc_distance(k) * Rsc_distance(k)
2865 Rhead_distance(k) = chead(k,2) - chead(k,1)
2867 c! pitagoras (root of sum of squares)
2869 & (Rhead_distance(1)*Rhead_distance(1))
2870 & + (Rhead_distance(2)*Rhead_distance(2))
2871 & + (Rhead_distance(3)*Rhead_distance(3)))
2872 c!-------------------------------------------------------------------
2873 c! zero everything that should be zero'ed
2886 END SUBROUTINE elgrad_init
2889 C-----------------------------------------------------------------------------
2890 subroutine sc_angular
2891 C Calculate eps1,eps2,eps3,sigma, and parts of their derivatives in om1,om2,
2892 C om12. Called by ebp, egb, and egbv.
2894 include 'COMMON.CALC'
2898 om1=dxi*erij(1)+dyi*erij(2)+dzi*erij(3)
2899 om2=dxj*erij(1)+dyj*erij(2)+dzj*erij(3)
2900 om12=dxi*dxj+dyi*dyj+dzi*dzj
2902 C Calculate eps1(om12) and its derivative in om12
2903 faceps1=1.0D0-om12*chiom12
2904 faceps1_inv=1.0D0/faceps1
2905 eps1=dsqrt(faceps1_inv)
2906 C Following variable is eps1*deps1/dom12
2907 eps1_om12=faceps1_inv*chiom12
2908 C Calculate sigma(om1,om2,om12) and the derivatives of sigma**2 in om1,om2,
2913 facsig=om1*chiom1+om2*chiom2-2.0D0*om1om2*chiom12
2914 sigsq=1.0D0-facsig*faceps1_inv
2915 sigsq_om1=(chiom1-chiom12*om2)*faceps1_inv
2916 sigsq_om2=(chiom2-chiom12*om1)*faceps1_inv
2917 sigsq_om12=-chi12*(om1om2*faceps1-om12*facsig)*faceps1_inv**2
2918 C Calculate eps2 and its derivatives in om1, om2, and om12.
2921 chipom12=chip12*om12
2922 facp=1.0D0-om12*chipom12
2924 facp1=om1*chipom1+om2*chipom2-2.0D0*om1om2*chipom12
2925 C Following variable is the square root of eps2
2926 eps2rt=1.0D0-facp1*facp_inv
2927 C Following three variables are the derivatives of the square root of eps
2928 C in om1, om2, and om12.
2929 eps2rt_om1=-4.0D0*(chipom1-chipom12*om2)*facp_inv
2930 eps2rt_om2=-4.0D0*(chipom2-chipom12*om1)*facp_inv
2931 eps2rt_om12=4.0D0*chip12*(om1om2*facp-om12*facp1)*facp_inv**2
2932 C Evaluate the "asymmetric" factor in the VDW constant, eps3
2933 eps3rt=1.0D0-alf1*om1+alf2*om2-alf12*om12
2934 C Calculate whole angle-dependent part of epsilon and contributions
2935 C to its derivatives
2938 C----------------------------------------------------------------------------
2940 implicit real*8 (a-h,o-z)
2941 include 'DIMENSIONS'
2942 include 'DIMENSIONS.ZSCOPT'
2943 include 'COMMON.CHAIN'
2944 include 'COMMON.DERIV'
2945 include 'COMMON.CALC'
2946 double precision dcosom1(3),dcosom2(3)
2947 eom1=eps2der*eps2rt_om1-2.0D0*alf1*eps3der+sigder*sigsq_om1
2948 eom2=eps2der*eps2rt_om2+2.0D0*alf2*eps3der+sigder*sigsq_om2
2949 eom12=evdwij*eps1_om12+eps2der*eps2rt_om12
2950 & -2.0D0*alf12*eps3der+sigder*sigsq_om12
2952 dcosom1(k)=rij*(dc_norm(k,nres+i)-om1*erij(k))
2953 dcosom2(k)=rij*(dc_norm(k,nres+j)-om2*erij(k))
2956 gg(k)=gg(k)+eom1*dcosom1(k)+eom2*dcosom2(k)
2959 gvdwx(k,i)=gvdwx(k,i)-gg(k)
2960 & +(eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,nres+i))
2961 & +eom1*(erij(k)-om1*dc_norm(k,nres+i)))*dsci_inv
2962 gvdwx(k,j)=gvdwx(k,j)+gg(k)
2963 & +(eom12*(dc_norm(k,nres+i)-om12*dc_norm(k,nres+j))
2964 & +eom2*(erij(k)-om2*dc_norm(k,nres+j)))*dscj_inv
2967 C Calculate the components of the gradient in DC and X
2971 c gvdwc(l,k)=gvdwc(l,k)+gg(l)
2975 gvdwc(l,i)=gvdwc(l,i)-gg(l)!+gg_lipi(l)
2976 gvdwc(l,j)=gvdwc(l,j)+gg(l)!+gg_lipj(l)
2981 c------------------------------------------------------------------------------
2982 subroutine vec_and_deriv
2983 implicit real*8 (a-h,o-z)
2984 include 'DIMENSIONS'
2985 include 'DIMENSIONS.ZSCOPT'
2986 include 'COMMON.IOUNITS'
2987 include 'COMMON.GEO'
2988 include 'COMMON.VAR'
2989 include 'COMMON.LOCAL'
2990 include 'COMMON.CHAIN'
2991 include 'COMMON.VECTORS'
2992 include 'COMMON.DERIV'
2993 include 'COMMON.INTERACT'
2994 dimension uyder(3,3,2),uzder(3,3,2),vbld_inv_temp(2)
2995 C Compute the local reference systems. For reference system (i), the
2996 C X-axis points from CA(i) to CA(i+1), the Y axis is in the
2997 C CA(i)-CA(i+1)-CA(i+2) plane, and the Z axis is perpendicular to this plane.
2999 c if (i.eq.nres-1 .or. itel(i+1).eq.0) then
3000 if (i.eq.nres-1) then
3001 C Case of the last full residue
3002 C Compute the Z-axis
3003 call vecpr(dc_norm(1,i),dc_norm(1,i-1),uz(1,i))
3004 costh=dcos(pi-theta(nres))
3005 fac=1.0d0/dsqrt(1.0d0-costh*costh)
3010 C Compute the derivatives of uz
3012 uzder(2,1,1)=-dc_norm(3,i-1)
3013 uzder(3,1,1)= dc_norm(2,i-1)
3014 uzder(1,2,1)= dc_norm(3,i-1)
3016 uzder(3,2,1)=-dc_norm(1,i-1)
3017 uzder(1,3,1)=-dc_norm(2,i-1)
3018 uzder(2,3,1)= dc_norm(1,i-1)
3021 uzder(2,1,2)= dc_norm(3,i)
3022 uzder(3,1,2)=-dc_norm(2,i)
3023 uzder(1,2,2)=-dc_norm(3,i)
3025 uzder(3,2,2)= dc_norm(1,i)
3026 uzder(1,3,2)= dc_norm(2,i)
3027 uzder(2,3,2)=-dc_norm(1,i)
3030 C Compute the Y-axis
3033 uy(k,i)=fac*(dc_norm(k,i-1)-costh*dc_norm(k,i))
3036 C Compute the derivatives of uy
3039 uyder(k,j,1)=2*dc_norm(k,i-1)*dc_norm(j,i)
3040 & -dc_norm(k,i)*dc_norm(j,i-1)
3041 uyder(k,j,2)=-dc_norm(j,i)*dc_norm(k,i)
3043 uyder(j,j,1)=uyder(j,j,1)-costh
3044 uyder(j,j,2)=1.0d0+uyder(j,j,2)
3049 uygrad(l,k,j,i)=uyder(l,k,j)
3050 uzgrad(l,k,j,i)=uzder(l,k,j)
3054 call unormderiv(uy(1,i),uyder(1,1,1),facy,uygrad(1,1,1,i))
3055 call unormderiv(uy(1,i),uyder(1,1,2),facy,uygrad(1,1,2,i))
3056 call unormderiv(uz(1,i),uzder(1,1,1),fac,uzgrad(1,1,1,i))
3057 call unormderiv(uz(1,i),uzder(1,1,2),fac,uzgrad(1,1,2,i))
3061 C Compute the Z-axis
3062 call vecpr(dc_norm(1,i),dc_norm(1,i+1),uz(1,i))
3063 costh=dcos(pi-theta(i+2))
3064 fac=1.0d0/dsqrt(1.0d0-costh*costh)
3069 C Compute the derivatives of uz
3071 uzder(2,1,1)=-dc_norm(3,i+1)
3072 uzder(3,1,1)= dc_norm(2,i+1)
3073 uzder(1,2,1)= dc_norm(3,i+1)
3075 uzder(3,2,1)=-dc_norm(1,i+1)
3076 uzder(1,3,1)=-dc_norm(2,i+1)
3077 uzder(2,3,1)= dc_norm(1,i+1)
3080 uzder(2,1,2)= dc_norm(3,i)
3081 uzder(3,1,2)=-dc_norm(2,i)
3082 uzder(1,2,2)=-dc_norm(3,i)
3084 uzder(3,2,2)= dc_norm(1,i)
3085 uzder(1,3,2)= dc_norm(2,i)
3086 uzder(2,3,2)=-dc_norm(1,i)
3089 C Compute the Y-axis
3092 uy(k,i)=facy*(dc_norm(k,i+1)-costh*dc_norm(k,i))
3095 C Compute the derivatives of uy
3098 uyder(k,j,1)=2*dc_norm(k,i+1)*dc_norm(j,i)
3099 & -dc_norm(k,i)*dc_norm(j,i+1)
3100 uyder(k,j,2)=-dc_norm(j,i)*dc_norm(k,i)
3102 uyder(j,j,1)=uyder(j,j,1)-costh
3103 uyder(j,j,2)=1.0d0+uyder(j,j,2)
3108 uygrad(l,k,j,i)=uyder(l,k,j)
3109 uzgrad(l,k,j,i)=uzder(l,k,j)
3113 call unormderiv(uy(1,i),uyder(1,1,1),facy,uygrad(1,1,1,i))
3114 call unormderiv(uy(1,i),uyder(1,1,2),facy,uygrad(1,1,2,i))
3115 call unormderiv(uz(1,i),uzder(1,1,1),fac,uzgrad(1,1,1,i))
3116 call unormderiv(uz(1,i),uzder(1,1,2),fac,uzgrad(1,1,2,i))
3122 vbld_inv_temp(1)=vbld_inv(i+1)
3123 if (i.lt.nres-1) then
3124 vbld_inv_temp(2)=vbld_inv(i+2)
3126 vbld_inv_temp(2)=vbld_inv(i)
3131 uygrad(l,k,j,i)=vbld_inv_temp(j)*uygrad(l,k,j,i)
3132 uzgrad(l,k,j,i)=vbld_inv_temp(j)*uzgrad(l,k,j,i)
3140 c------------------------------------------------------------------------------
3141 subroutine set_matrices
3142 implicit real*8 (a-h,o-z)
3143 include 'DIMENSIONS'
3147 integer status(MPI_STATUS_SIZE)
3149 include 'DIMENSIONS.ZSCOPT'
3150 include 'COMMON.IOUNITS'
3151 include 'COMMON.GEO'
3152 include 'COMMON.VAR'
3153 include 'COMMON.LOCAL'
3154 include 'COMMON.CHAIN'
3155 include 'COMMON.DERIV'
3156 include 'COMMON.INTERACT'
3157 include 'COMMON.CONTACTS'
3158 include 'COMMON.TORSION'
3159 include 'COMMON.VECTORS'
3160 include 'COMMON.FFIELD'
3161 double precision auxvec(2),auxmat(2,2)
3163 C Compute the virtual-bond-torsional-angle dependent quantities needed
3164 C to calculate the el-loc multibody terms of various order.
3166 c write(iout,*) 'SET_MATRICES nphi=',nphi,nres
3168 if (i.gt. nnt+2 .and. i.lt.nct+2) then
3169 iti = itype2loc(itype(i-2))
3173 c if (i.gt. iatel_s+1 .and. i.lt.iatel_e+4) then
3174 if (i.gt. nnt+1 .and. i.lt.nct+1) then
3175 iti1 = itype2loc(itype(i-1))
3180 cost1=dcos(theta(i-1))
3181 sint1=dsin(theta(i-1))
3183 sint1cub=sint1sq*sint1
3184 sint1cost1=2*sint1*cost1
3186 write (iout,*) "bnew1",i,iti
3187 write (iout,*) (bnew1(k,1,iti),k=1,3)
3188 write (iout,*) (bnew1(k,2,iti),k=1,3)
3189 write (iout,*) "bnew2",i,iti
3190 write (iout,*) (bnew2(k,1,iti),k=1,3)
3191 write (iout,*) (bnew2(k,2,iti),k=1,3)
3194 b1k=bnew1(1,k,iti)+(bnew1(2,k,iti)+bnew1(3,k,iti)*cost1)*cost1
3196 gtb1(k,i-2)=cost1*b1k-sint1sq*
3197 & (bnew1(2,k,iti)+2*bnew1(3,k,iti)*cost1)
3198 b2k=bnew2(1,k,iti)+(bnew2(2,k,iti)+bnew2(3,k,iti)*cost1)*cost1
3200 if (calc_grad) gtb2(k,i-2)=cost1*b2k-sint1sq*
3201 & (bnew2(2,k,iti)+2*bnew2(3,k,iti)*cost1)
3204 aux=ccnew(1,k,iti)+(ccnew(2,k,iti)+ccnew(3,k,iti)*cost1)*cost1
3205 cc(1,k,i-2)=sint1sq*aux
3206 if (calc_grad) gtcc(1,k,i-2)=sint1cost1*aux-sint1cub*
3207 & (ccnew(2,k,iti)+2*ccnew(3,k,iti)*cost1)
3208 aux=ddnew(1,k,iti)+(ddnew(2,k,iti)+ddnew(3,k,iti)*cost1)*cost1
3209 dd(1,k,i-2)=sint1sq*aux
3210 if (calc_grad) gtdd(1,k,i-2)=sint1cost1*aux-sint1cub*
3211 & (ddnew(2,k,iti)+2*ddnew(3,k,iti)*cost1)
3213 cc(2,1,i-2)=cc(1,2,i-2)
3214 cc(2,2,i-2)=-cc(1,1,i-2)
3215 gtcc(2,1,i-2)=gtcc(1,2,i-2)
3216 gtcc(2,2,i-2)=-gtcc(1,1,i-2)
3217 dd(2,1,i-2)=dd(1,2,i-2)
3218 dd(2,2,i-2)=-dd(1,1,i-2)
3219 gtdd(2,1,i-2)=gtdd(1,2,i-2)
3220 gtdd(2,2,i-2)=-gtdd(1,1,i-2)
3223 aux=eenew(1,l,k,iti)+eenew(2,l,k,iti)*cost1
3224 EE(l,k,i-2)=sint1sq*aux
3226 & gtEE(l,k,i-2)=sint1cost1*aux-sint1cub*eenew(2,l,k,iti)
3229 EE(1,1,i-2)=EE(1,1,i-2)+e0new(1,iti)*cost1
3230 EE(1,2,i-2)=EE(1,2,i-2)+e0new(2,iti)+e0new(3,iti)*cost1
3231 EE(2,1,i-2)=EE(2,1,i-2)+e0new(2,iti)*cost1+e0new(3,iti)
3232 EE(2,2,i-2)=EE(2,2,i-2)-e0new(1,iti)
3234 gtEE(1,1,i-2)=gtEE(1,1,i-2)-e0new(1,iti)*sint1
3235 gtEE(1,2,i-2)=gtEE(1,2,i-2)-e0new(3,iti)*sint1
3236 gtEE(2,1,i-2)=gtEE(2,1,i-2)-e0new(2,iti)*sint1
3238 c b1tilde(1,i-2)=b1(1,i-2)
3239 c b1tilde(2,i-2)=-b1(2,i-2)
3240 c b2tilde(1,i-2)=b2(1,i-2)
3241 c b2tilde(2,i-2)=-b2(2,i-2)
3243 write (iout,*) 'i=',i-2,gtb1(2,i-2),gtb1(1,i-2)
3244 write(iout,*) 'b1=',(b1(k,i-2),k=1,2)
3245 write(iout,*) 'b2=',(b2(k,i-2),k=1,2)
3246 write (iout,*) 'theta=', theta(i-1)
3249 if (i.gt. nnt+2 .and. i.lt.nct+2) then
3250 iti = itype2loc(itype(i-2))
3254 c if (i.gt. iatel_s+1 .and. i.lt.iatel_e+4) then
3255 if (i.gt. nnt+1 .and. i.lt.nct+1) then
3256 iti1 = itype2loc(itype(i-1))
3266 CC(k,l,i-2)=ccold(k,l,iti)
3267 DD(k,l,i-2)=ddold(k,l,iti)
3268 EE(k,l,i-2)=eeold(k,l,iti)
3272 b1tilde(1,i-2)= b1(1,i-2)
3273 b1tilde(2,i-2)=-b1(2,i-2)
3274 b2tilde(1,i-2)= b2(1,i-2)
3275 b2tilde(2,i-2)=-b2(2,i-2)
3277 Ctilde(1,1,i-2)= CC(1,1,i-2)
3278 Ctilde(1,2,i-2)= CC(1,2,i-2)
3279 Ctilde(2,1,i-2)=-CC(2,1,i-2)
3280 Ctilde(2,2,i-2)=-CC(2,2,i-2)
3282 Dtilde(1,1,i-2)= DD(1,1,i-2)
3283 Dtilde(1,2,i-2)= DD(1,2,i-2)
3284 Dtilde(2,1,i-2)=-DD(2,1,i-2)
3285 Dtilde(2,2,i-2)=-DD(2,2,i-2)
3286 c write(iout,*) "i",i," iti",iti
3287 c write(iout,*) 'b1=',(b1(k,i-2),k=1,2)
3288 c write(iout,*) 'b2=',(b2(k,i-2),k=1,2)
3291 if (i .lt. nres+1) then
3328 if (i .gt. 3 .and. i .lt. nres+1) then
3329 obrot_der(1,i-2)=-sin1
3330 obrot_der(2,i-2)= cos1
3331 Ugder(1,1,i-2)= sin1
3332 Ugder(1,2,i-2)=-cos1
3333 Ugder(2,1,i-2)=-cos1
3334 Ugder(2,2,i-2)=-sin1
3337 obrot2_der(1,i-2)=-dwasin2
3338 obrot2_der(2,i-2)= dwacos2
3339 Ug2der(1,1,i-2)= dwasin2
3340 Ug2der(1,2,i-2)=-dwacos2
3341 Ug2der(2,1,i-2)=-dwacos2
3342 Ug2der(2,2,i-2)=-dwasin2
3344 obrot_der(1,i-2)=0.0d0
3345 obrot_der(2,i-2)=0.0d0
3346 Ugder(1,1,i-2)=0.0d0
3347 Ugder(1,2,i-2)=0.0d0
3348 Ugder(2,1,i-2)=0.0d0
3349 Ugder(2,2,i-2)=0.0d0
3350 obrot2_der(1,i-2)=0.0d0
3351 obrot2_der(2,i-2)=0.0d0
3352 Ug2der(1,1,i-2)=0.0d0
3353 Ug2der(1,2,i-2)=0.0d0
3354 Ug2der(2,1,i-2)=0.0d0
3355 Ug2der(2,2,i-2)=0.0d0
3357 c if (i.gt. iatel_s+2 .and. i.lt.iatel_e+5) then
3358 if (i.gt. nnt+2 .and. i.lt.nct+2) then
3359 iti = itype2loc(itype(i-2))
3363 c if (i.gt. iatel_s+1 .and. i.lt.iatel_e+4) then
3364 if (i.gt. nnt+1 .and. i.lt.nct+1) then
3365 iti1 = itype2loc(itype(i-1))
3369 cd write (iout,*) '*******i',i,' iti1',iti
3370 cd write (iout,*) 'b1',b1(:,iti)
3371 cd write (iout,*) 'b2',b2(:,iti)
3372 cd write (iout,*) 'Ug',Ug(:,:,i-2)
3373 c if (i .gt. iatel_s+2) then
3374 if (i .gt. nnt+2) then
3375 call matvec2(Ug(1,1,i-2),b2(1,i-2),Ub2(1,i-2))
3377 call matvec2(Ug(1,1,i-2),gtb2(1,i-2),gUb2(1,i-2))
3378 c write (iout,*) Ug(1,1,i-2),gtb2(1,i-2),gUb2(1,i-2),"chuj"
3380 c write(iout,*) "co jest kurwa", iti, EE(1,1,i),EE(2,1,i),
3381 c & EE(1,2,iti),EE(2,2,i)
3382 call matmat2(EE(1,1,i-2),Ug(1,1,i-2),EUg(1,1,i-2))
3383 call matmat2(gtEE(1,1,i-2),Ug(1,1,i-2),gtEUg(1,1,i-2))
3384 c write(iout,*) "Macierz EUG",
3385 c & eug(1,1,i-2),eug(1,2,i-2),eug(2,1,i-2),
3387 if (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0)
3389 call matmat2(CC(1,1,i-2),Ug(1,1,i-2),CUg(1,1,i-2))
3390 call matmat2(DD(1,1,i-2),Ug(1,1,i-2),DUg(1,1,i-2))
3391 call matmat2(Dtilde(1,1,i-2),Ug2(1,1,i-2),DtUg2(1,1,i-2))
3392 call matvec2(Ctilde(1,1,i-1),obrot(1,i-2),Ctobr(1,i-2))
3393 call matvec2(Dtilde(1,1,i-2),obrot2(1,i-2),Dtobr2(1,i-2))
3404 DtUg2(l,k,i-2)=0.0d0
3408 call matvec2(Ugder(1,1,i-2),b2(1,i-2),Ub2der(1,i-2))
3409 call matmat2(EE(1,1,i-2),Ugder(1,1,i-2),EUgder(1,1,i-2))
3411 muder(k,i-2)=Ub2der(k,i-2)
3413 c if (i.gt. iatel_s+1 .and. i.lt.iatel_e+4) then
3414 if (i.gt. nnt+1 .and. i.lt.nct+1) then
3415 if (itype(i-1).le.ntyp) then
3416 iti1 = itype2loc(itype(i-1))
3424 mu(k,i-2)=Ub2(k,i-2)+b1(k,i-1)
3427 write (iout,'(2hmu,i3,3f8.1,12f10.5)') i-2,rad2deg*theta(i-1),
3428 & rad2deg*theta(i),rad2deg*phi(i),mu(1,i-2),mu(2,i-2),
3429 & -b2(1,i-2),b2(2,i-2),b1(1,i-2),b1(2,i-2),
3430 & dsqrt(b2(1,i-1)**2+b2(2,i-1)**2)
3431 & +dsqrt(b1(1,i-1)**2+b1(2,i-1)**2),
3432 & ((ee(l,k,i-2),l=1,2),k=1,2)
3434 cd write (iout,*) 'mu1',mu1(:,i-2)
3435 cd write (iout,*) 'mu2',mu2(:,i-2)
3436 if (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or.wcorr6.gt.0.0d0)
3439 call matmat2(CC(1,1,i-1),Ugder(1,1,i-2),CUgder(1,1,i-2))
3440 call matmat2(DD(1,1,i-2),Ugder(1,1,i-2),DUgder(1,1,i-2))
3441 call matmat2(Dtilde(1,1,i-2),Ug2der(1,1,i-2),DtUg2der(1,1,i-2))
3442 call matvec2(Ctilde(1,1,i-1),obrot_der(1,i-2),Ctobrder(1,i-2))
3443 call matvec2(Dtilde(1,1,i-2),obrot2_der(1,i-2),Dtobr2der(1,i-2))
3445 C Vectors and matrices dependent on a single virtual-bond dihedral.
3446 call matvec2(DD(1,1,i-2),b1tilde(1,i-1),auxvec(1))
3447 call matvec2(Ug2(1,1,i-2),auxvec(1),Ug2Db1t(1,i-2))
3448 call matvec2(CC(1,1,i-1),Ub2(1,i-2),CUgb2(1,i-2))
3449 call matmat2(EUg(1,1,i-2),CC(1,1,i-1),EUgC(1,1,i-2))
3450 call matmat2(EUg(1,1,i-2),DD(1,1,i-1),EUgD(1,1,i-2))
3452 call matvec2(Ug2der(1,1,i-2),auxvec(1),Ug2Db1tder(1,i-2))
3453 call matvec2(CC(1,1,i-1),Ub2der(1,i-2),CUgb2der(1,i-2))
3454 call matmat2(EUgder(1,1,i-2),CC(1,1,i-1),EUgCder(1,1,i-2))
3455 call matmat2(EUgder(1,1,i-2),DD(1,1,i-1),EUgDder(1,1,i-2))
3459 C Matrices dependent on two consecutive virtual-bond dihedrals.
3460 C The order of matrices is from left to right.
3461 if (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or.wcorr6.gt.0.0d0)
3464 call matmat2(DtUg2(1,1,i-1),EUg(1,1,i),DtUg2EUg(1,1,i))
3466 call matmat2(DtUg2der(1,1,i-1),EUg(1,1,i),DtUg2EUgder(1,1,1,i))
3467 call matmat2(DtUg2(1,1,i-1),EUgder(1,1,i),DtUg2EUgder(1,1,2,i))
3469 call transpose2(DtUg2(1,1,i-1),auxmat(1,1))
3470 call matmat2(auxmat(1,1),EUg(1,1,i),Ug2DtEUg(1,1,i))
3472 call matmat2(auxmat(1,1),EUgder(1,1,i),Ug2DtEUgder(1,1,2,i))
3473 call transpose2(DtUg2der(1,1,i-1),auxmat(1,1))
3474 call matmat2(auxmat(1,1),EUg(1,1,i),Ug2DtEUgder(1,1,1,i))
3480 C--------------------------------------------------------------------------
3481 subroutine eelec(ees,evdw1,eel_loc,eello_turn3,eello_turn4)
3483 C This subroutine calculates the average interaction energy and its gradient
3484 C in the virtual-bond vectors between non-adjacent peptide groups, based on
3485 C the potential described in Liwo et al., Protein Sci., 1993, 2, 1715.
3486 C The potential depends both on the distance of peptide-group centers and on
3487 C the orientation of the CA-CA virtual bonds.
3489 implicit real*8 (a-h,o-z)
3493 include 'DIMENSIONS'
3494 include 'DIMENSIONS.ZSCOPT'
3495 include 'COMMON.CONTROL'
3496 include 'COMMON.IOUNITS'
3497 include 'COMMON.GEO'
3498 include 'COMMON.VAR'
3499 include 'COMMON.LOCAL'
3500 include 'COMMON.CHAIN'
3501 include 'COMMON.DERIV'
3502 include 'COMMON.INTERACT'
3503 include 'COMMON.CONTACTS'
3504 include 'COMMON.TORSION'
3505 include 'COMMON.VECTORS'
3506 include 'COMMON.FFIELD'
3507 include 'COMMON.TIME1'
3508 include 'COMMON.SPLITELE'
3509 dimension ggg(3),gggp(3),gggm(3),erij(3),dcosb(3),dcosg(3),
3510 & erder(3,3),uryg(3,3),urzg(3,3),vryg(3,3),vrzg(3,3)
3511 double precision acipa(2,2),agg(3,4),aggi(3,4),aggi1(3,4),
3512 & aggj(3,4),aggj1(3,4),a_temp(2,2),muij(4),gmuij(4)
3513 common /locel/ a_temp,agg,aggi,aggi1,aggj,aggj1,a22,a23,a32,a33,
3514 & dxi,dyi,dzi,dx_normi,dy_normi,dz_normi,xmedi,ymedi,zmedi,
3516 c 4/26/02 - AL scaling factor for 1,4 repulsive VDW interactions
3518 double precision scal_el /1.0d0/
3520 double precision scal_el /0.5d0/
3523 C 13-go grudnia roku pamietnego...
3524 double precision unmat(3,3) /1.0d0,0.0d0,0.0d0,
3525 & 0.0d0,1.0d0,0.0d0,
3526 & 0.0d0,0.0d0,1.0d0/
3527 cd write(iout,*) 'In EELEC'
3529 cd write(iout,*) 'Type',i
3530 cd write(iout,*) 'B1',B1(:,i)
3531 cd write(iout,*) 'B2',B2(:,i)
3532 cd write(iout,*) 'CC',CC(:,:,i)
3533 cd write(iout,*) 'DD',DD(:,:,i)
3534 cd write(iout,*) 'EE',EE(:,:,i)
3536 cd call check_vecgrad
3538 if (icheckgrad.eq.1) then
3540 fac=1.0d0/dsqrt(scalar(dc(1,i),dc(1,i)))
3542 dc_norm(k,i)=dc(k,i)*fac
3544 c write (iout,*) 'i',i,' fac',fac
3547 if (wel_loc.gt.0.0d0 .or. wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0
3548 & .or. wcorr6.gt.0.0d0 .or. wturn3.gt.0.0d0 .or.
3549 & wturn4.gt.0.0d0 .or. wturn6.gt.0.0d0) then
3550 c call vec_and_deriv
3556 time_mat=time_mat+MPI_Wtime()-time01
3560 cd write (iout,*) 'i=',i
3562 cd write (iout,'(i5,2f10.5)') k,uy(k,i),uz(k,i)
3565 cd write (iout,'(f10.5,2x,3f10.5,2x,3f10.5)')
3566 cd & uz(k,i),(uzgrad(k,l,1,i),l=1,3),(uzgrad(k,l,2,i),l=1,3)
3579 cd print '(a)','Enter EELEC'
3580 cd write (iout,*) 'iatel_s=',iatel_s,' iatel_e=',iatel_e
3582 gel_loc_loc(i)=0.0d0
3587 c 9/27/08 AL Split the interaction loop to ensure load balancing of turn terms
3589 C Loop over i,i+2 and i,i+3 pairs of the peptide groups
3591 C 14/01/2014 TURN3,TUNR4 does no go under periodic boundry condition
3592 do i=iturn3_start,iturn3_end
3594 C write(iout,*) "tu jest i",i
3595 if (itype(i).eq.ntyp1 .or. itype(i+1).eq.ntyp1
3596 C changes suggested by Ana to avoid out of bounds
3597 C Adam: Unnecessary: handled by iturn3_end and iturn3_start
3598 c & .or.((i+4).gt.nres)
3599 c & .or.((i-1).le.0)
3600 C end of changes by Ana
3601 C dobra zmiana wycofana
3602 & .or. itype(i+2).eq.ntyp1
3603 & .or. itype(i+3).eq.ntyp1) cycle
3604 C Adam: Instructions below will switch off existing interactions
3606 c if(itype(i-1).eq.ntyp1)cycle
3608 c if(i.LT.nres-3)then
3609 c if (itype(i+4).eq.ntyp1) cycle
3614 dx_normi=dc_norm(1,i)
3615 dy_normi=dc_norm(2,i)
3616 dz_normi=dc_norm(3,i)
3617 xmedi=c(1,i)+0.5d0*dxi
3618 ymedi=c(2,i)+0.5d0*dyi
3619 zmedi=c(3,i)+0.5d0*dzi
3620 xmedi=mod(xmedi,boxxsize)
3621 if (xmedi.lt.0) xmedi=xmedi+boxxsize
3622 ymedi=mod(ymedi,boxysize)
3623 if (ymedi.lt.0) ymedi=ymedi+boxysize
3624 zmedi=mod(zmedi,boxzsize)
3625 if (zmedi.lt.0) zmedi=zmedi+boxzsize
3627 call eelecij(i,i+2,ees,evdw1,eel_loc)
3628 if (wturn3.gt.0.0d0) call eturn3(i,eello_turn3)
3629 num_cont_hb(i)=num_conti
3631 do i=iturn4_start,iturn4_end
3633 if (itype(i).eq.ntyp1 .or. itype(i+1).eq.ntyp1
3634 C changes suggested by Ana to avoid out of bounds
3635 c & .or.((i+5).gt.nres)
3636 c & .or.((i-1).le.0)
3637 C end of changes suggested by Ana
3638 & .or. itype(i+3).eq.ntyp1
3639 & .or. itype(i+4).eq.ntyp1
3640 c & .or. itype(i+5).eq.ntyp1
3641 c & .or. itype(i).eq.ntyp1
3642 c & .or. itype(i-1).eq.ntyp1
3647 dx_normi=dc_norm(1,i)
3648 dy_normi=dc_norm(2,i)
3649 dz_normi=dc_norm(3,i)
3650 xmedi=c(1,i)+0.5d0*dxi
3651 ymedi=c(2,i)+0.5d0*dyi
3652 zmedi=c(3,i)+0.5d0*dzi
3653 C Return atom into box, boxxsize is size of box in x dimension
3655 c if (xmedi.gt.((0.5d0)*boxxsize)) xmedi=xmedi-boxxsize
3656 c if (xmedi.lt.((-0.5d0)*boxxsize)) xmedi=xmedi+boxxsize
3657 C Condition for being inside the proper box
3658 c if ((xmedi.gt.((0.5d0)*boxxsize)).or.
3659 c & (xmedi.lt.((-0.5d0)*boxxsize))) then
3663 c if (ymedi.gt.((0.5d0)*boxysize)) ymedi=ymedi-boxysize
3664 c if (ymedi.lt.((-0.5d0)*boxysize)) ymedi=ymedi+boxysize
3665 C Condition for being inside the proper box
3666 c if ((ymedi.gt.((0.5d0)*boxysize)).or.
3667 c & (ymedi.lt.((-0.5d0)*boxysize))) then
3671 c if (zmedi.gt.((0.5d0)*boxzsize)) zmedi=zmedi-boxzsize
3672 c if (zmedi.lt.((-0.5d0)*boxzsize)) zmedi=zmedi+boxzsize
3673 C Condition for being inside the proper box
3674 c if ((zmedi.gt.((0.5d0)*boxzsize)).or.
3675 c & (zmedi.lt.((-0.5d0)*boxzsize))) then
3678 xmedi=mod(xmedi,boxxsize)
3679 if (xmedi.lt.0) xmedi=xmedi+boxxsize
3680 ymedi=mod(ymedi,boxysize)
3681 if (ymedi.lt.0) ymedi=ymedi+boxysize
3682 zmedi=mod(zmedi,boxzsize)
3683 if (zmedi.lt.0) zmedi=zmedi+boxzsize
3685 num_conti=num_cont_hb(i)
3686 c write(iout,*) "JESTEM W PETLI"
3687 call eelecij(i,i+3,ees,evdw1,eel_loc)
3688 if (wturn4.gt.0.0d0 .and. itype(i+2).ne.ntyp1)
3689 & call eturn4(i,eello_turn4)
3690 num_cont_hb(i)=num_conti
3692 C Loop over all neighbouring boxes
3697 c Loop over all pairs of interacting peptide groups except i,i+2 and i,i+3
3700 do i=iatel_s,iatel_e
3703 if (itype(i).eq.ntyp1 .or. itype(i+1).eq.ntyp1
3704 C changes suggested by Ana to avoid out of bounds
3705 c & .or.((i+2).gt.nres)
3706 c & .or.((i-1).le.0)
3707 C end of changes by Ana
3708 c & .or. itype(i+2).eq.ntyp1
3709 c & .or. itype(i-1).eq.ntyp1
3714 dx_normi=dc_norm(1,i)
3715 dy_normi=dc_norm(2,i)
3716 dz_normi=dc_norm(3,i)
3717 xmedi=c(1,i)+0.5d0*dxi
3718 ymedi=c(2,i)+0.5d0*dyi
3719 zmedi=c(3,i)+0.5d0*dzi
3720 xmedi=mod(xmedi,boxxsize)
3721 if (xmedi.lt.0) xmedi=xmedi+boxxsize
3722 ymedi=mod(ymedi,boxysize)
3723 if (ymedi.lt.0) ymedi=ymedi+boxysize
3724 zmedi=mod(zmedi,boxzsize)
3725 if (zmedi.lt.0) zmedi=zmedi+boxzsize
3726 C xmedi=xmedi+xshift*boxxsize
3727 C ymedi=ymedi+yshift*boxysize
3728 C zmedi=zmedi+zshift*boxzsize
3730 C Return tom into box, boxxsize is size of box in x dimension
3732 c if (xmedi.gt.((xshift+0.5d0)*boxxsize)) xmedi=xmedi-boxxsize
3733 c if (xmedi.lt.((xshift-0.5d0)*boxxsize)) xmedi=xmedi+boxxsize
3734 C Condition for being inside the proper box
3735 c if ((xmedi.gt.((xshift+0.5d0)*boxxsize)).or.
3736 c & (xmedi.lt.((xshift-0.5d0)*boxxsize))) then
3740 c if (ymedi.gt.((yshift+0.5d0)*boxysize)) ymedi=ymedi-boxysize
3741 c if (ymedi.lt.((yshift-0.5d0)*boxysize)) ymedi=ymedi+boxysize
3742 C Condition for being inside the proper box
3743 c if ((ymedi.gt.((yshift+0.5d0)*boxysize)).or.
3744 c & (ymedi.lt.((yshift-0.5d0)*boxysize))) then
3748 c if (zmedi.gt.((zshift+0.5d0)*boxzsize)) zmedi=zmedi-boxzsize
3749 c if (zmedi.lt.((zshift-0.5d0)*boxzsize)) zmedi=zmedi+boxzsize
3750 cC Condition for being inside the proper box
3751 c if ((zmedi.gt.((zshift+0.5d0)*boxzsize)).or.
3752 c & (zmedi.lt.((zshift-0.5d0)*boxzsize))) then
3756 c write (iout,*) 'i',i,' ielstart',ielstart(i),' ielend',ielend(i)
3757 num_conti=num_cont_hb(i)
3759 do j=ielstart(i),ielend(i)
3761 C write (iout,*) i,j
3763 if (itype(j).eq.ntyp1.or. itype(j+1).eq.ntyp1
3764 C changes suggested by Ana to avoid out of bounds
3765 c & .or.((j+2).gt.nres)
3766 c & .or.((j-1).le.0)
3767 C end of changes by Ana
3768 c & .or.itype(j+2).eq.ntyp1
3769 c & .or.itype(j-1).eq.ntyp1
3771 call eelecij(i,j,ees,evdw1,eel_loc)
3773 num_cont_hb(i)=num_conti
3779 c write (iout,*) "Number of loop steps in EELEC:",ind
3781 cd write (iout,'(i3,3f10.5,5x,3f10.5)')
3782 cd & i,(gel_loc(k,i),k=1,3),gel_loc_loc(i)
3784 c 12/7/99 Adam eello_turn3 will be considered as a separate energy term
3785 ccc eel_loc=eel_loc+eello_turn3
3786 cd print *,"Processor",fg_rank," t_eelecij",t_eelecij
3789 C-------------------------------------------------------------------------------
3790 subroutine eelecij(i,j,ees,evdw1,eel_loc)
3791 implicit real*8 (a-h,o-z)
3792 include 'DIMENSIONS'
3793 include 'DIMENSIONS.ZSCOPT'
3797 include 'COMMON.CONTROL'
3798 include 'COMMON.IOUNITS'
3799 include 'COMMON.GEO'
3800 include 'COMMON.VAR'
3801 include 'COMMON.LOCAL'
3802 include 'COMMON.CHAIN'
3803 include 'COMMON.DERIV'
3804 include 'COMMON.INTERACT'
3805 include 'COMMON.CONTACTS'
3806 include 'COMMON.TORSION'
3807 include 'COMMON.VECTORS'
3808 include 'COMMON.FFIELD'
3809 include 'COMMON.TIME1'
3810 include 'COMMON.SPLITELE'
3811 include 'COMMON.SHIELD'
3812 dimension ggg(3),gggp(3),gggm(3),erij(3),dcosb(3),dcosg(3),
3813 & erder(3,3),uryg(3,3),urzg(3,3),vryg(3,3),vrzg(3,3)
3814 double precision acipa(2,2),agg(3,4),aggi(3,4),aggi1(3,4),
3815 & aggj(3,4),aggj1(3,4),a_temp(2,2),muij(4),gmuij1(4),gmuji1(4),
3816 & gmuij2(4),gmuji2(4)
3817 common /locel/ a_temp,agg,aggi,aggi1,aggj,aggj1,a22,a23,a32,a33,
3818 & dxi,dyi,dzi,dx_normi,dy_normi,dz_normi,xmedi,ymedi,zmedi,
3820 c 4/26/02 - AL scaling factor for 1,4 repulsive VDW interactions
3822 double precision scal_el /1.0d0/
3824 double precision scal_el /0.5d0/
3827 C 13-go grudnia roku pamietnego...
3828 double precision unmat(3,3) /1.0d0,0.0d0,0.0d0,
3829 & 0.0d0,1.0d0,0.0d0,
3830 & 0.0d0,0.0d0,1.0d0/
3831 integer xshift,yshift,zshift
3832 c time00=MPI_Wtime()
3833 cd write (iout,*) "eelecij",i,j
3837 if (j.eq.i+2 .and. itelj.eq.2) iteli=2
3838 aaa=app(iteli,itelj)
3839 bbb=bpp(iteli,itelj)
3840 ael6i=ael6(iteli,itelj)
3841 ael3i=ael3(iteli,itelj)
3845 dx_normj=dc_norm(1,j)
3846 dy_normj=dc_norm(2,j)
3847 dz_normj=dc_norm(3,j)
3848 C xj=c(1,j)+0.5D0*dxj-xmedi
3849 C yj=c(2,j)+0.5D0*dyj-ymedi
3850 C zj=c(3,j)+0.5D0*dzj-zmedi
3855 if (xj.lt.0) xj=xj+boxxsize
3857 if (yj.lt.0) yj=yj+boxysize
3859 if (zj.lt.0) zj=zj+boxzsize
3860 if ((zj.lt.0).or.(xj.lt.0).or.(yj.lt.0)) write (*,*) "CHUJ"
3861 dist_init=(xj-xmedi)**2+(yj-ymedi)**2+(zj-zmedi)**2
3869 xj=xj_safe+xshift*boxxsize
3870 yj=yj_safe+yshift*boxysize
3871 zj=zj_safe+zshift*boxzsize
3872 dist_temp=(xj-xmedi)**2+(yj-ymedi)**2+(zj-zmedi)**2
3873 if(dist_temp.lt.dist_init) then
3883 if (isubchap.eq.1) then
3892 C if ((i+3).lt.j) then !this condition keeps for turn3 and turn4 not subject to PBC
3894 c if (xj.gt.((0.5d0)*boxxsize)) xj=xj-boxxsize
3895 c if (xj.lt.((-0.5d0)*boxxsize)) xj=xj+boxxsize
3896 C Condition for being inside the proper box
3897 c if ((xj.gt.((0.5d0)*boxxsize)).or.
3898 c & (xj.lt.((-0.5d0)*boxxsize))) then
3902 c if (yj.gt.((0.5d0)*boxysize)) yj=yj-boxysize
3903 c if (yj.lt.((-0.5d0)*boxysize)) yj=yj+boxysize
3904 C Condition for being inside the proper box
3905 c if ((yj.gt.((0.5d0)*boxysize)).or.
3906 c & (yj.lt.((-0.5d0)*boxysize))) then
3910 c if (zj.gt.((0.5d0)*boxzsize)) zj=zj-boxzsize
3911 c if (zj.lt.((-0.5d0)*boxzsize)) zj=zj+boxzsize
3912 C Condition for being inside the proper box
3913 c if ((zj.gt.((0.5d0)*boxzsize)).or.
3914 c & (zj.lt.((-0.5d0)*boxzsize))) then
3917 C endif !endPBC condintion
3921 rij=xj*xj+yj*yj+zj*zj
3923 sss=sscale(sqrt(rij))
3924 sssgrad=sscagrad(sqrt(rij))
3925 c write (iout,*) "ij",i,j," rij",sqrt(rij)," r_cut",r_cut,
3926 c & " rlamb",rlamb," sss",sss
3927 c if (sss.gt.0.0d0) then
3933 cosa=dx_normi*dx_normj+dy_normi*dy_normj+dz_normi*dz_normj
3934 cosb=(xj*dx_normi+yj*dy_normi+zj*dz_normi)*rmij
3935 cosg=(xj*dx_normj+yj*dy_normj+zj*dz_normj)*rmij
3936 fac=cosa-3.0D0*cosb*cosg
3938 c 4/26/02 - AL scaling down 1,4 repulsive VDW interactions
3939 if (j.eq.i+2) ev1=scal_el*ev1
3944 el1=fac3*(4.0D0+fac*fac-3.0D0*(cosb*cosb+cosg*cosg))
3948 C 12/26/95 - for the evaluation of multi-body H-bonding interactions
3949 ees0ij=4.0D0+fac*fac-3.0D0*(cosb*cosb+cosg*cosg)
3950 if (shield_mode.gt.0) then
3953 el1=el1*fac_shield(i)**2*fac_shield(j)**2
3954 el2=el2*fac_shield(i)**2*fac_shield(j)**2
3963 evdw1=evdw1+evdwij*sss
3964 cd write(iout,'(2(2i3,2x),7(1pd12.4)/2(3(1pd12.4),5x)/)')
3965 cd & iteli,i,itelj,j,aaa,bbb,ael6i,ael3i,
3966 cd & 1.0D0/dsqrt(rrmij),evdwij,eesij,
3967 cd & xmedi,ymedi,zmedi,xj,yj,zj
3969 if (energy_dec) then
3970 write (iout,'(a6,2i5,0pf7.3,2i5,3e11.3)')
3972 &,iteli,itelj,aaa,evdw1,sss
3973 write (iout,'(a6,2i5,0pf7.3,2f8.3)') 'ees',i,j,eesij,
3974 &fac_shield(i),fac_shield(j)
3978 C Calculate contributions to the Cartesian gradient.
3981 facvdw=-6*rrmij*(ev1+evdwij)*sss
3982 facel=-3*rrmij*(el1+eesij)
3989 * Radial derivatives. First process both termini of the fragment (i,j)
3995 if ((fac_shield(i).gt.0).and.(fac_shield(j).gt.0).and.
3996 & (shield_mode.gt.0)) then
3998 do ilist=1,ishield_list(i)
3999 iresshield=shield_list(ilist,i)
4001 rlocshield=grad_shield_side(k,ilist,i)*eesij/fac_shield(i)
4003 gshieldx(k,iresshield)=gshieldx(k,iresshield)+
4005 & +grad_shield_loc(k,ilist,i)*eesij/fac_shield(i)*2.0
4006 gshieldc(k,iresshield-1)=gshieldc(k,iresshield-1)+rlocshield
4007 C gshieldc_loc(k,iresshield)=gshieldc_loc(k,iresshield)
4008 C & +grad_shield_loc(k,ilist,i)*eesij/fac_shield(i)
4009 C if (iresshield.gt.i) then
4010 C do ishi=i+1,iresshield-1
4011 C gshieldc(k,ishi)=gshieldc(k,ishi)+rlocshield
4012 C & +grad_shield_loc(k,ilist,i)*eesij/fac_shield(i)
4016 C do ishi=iresshield,i
4017 C gshieldc(k,ishi)=gshieldc(k,ishi)-rlocshield
4018 C & -grad_shield_loc(k,ilist,i)*eesij/fac_shield(i)
4024 do ilist=1,ishield_list(j)
4025 iresshield=shield_list(ilist,j)
4027 rlocshield=grad_shield_side(k,ilist,j)*eesij/fac_shield(j)
4029 gshieldx(k,iresshield)=gshieldx(k,iresshield)+
4031 & +grad_shield_loc(k,ilist,j)*eesij/fac_shield(j)*2.0
4032 gshieldc(k,iresshield-1)=gshieldc(k,iresshield-1)+rlocshield
4034 C & +grad_shield_loc(k,ilist,j)*eesij/fac_shield(j)
4035 C gshieldc_loc(k,iresshield)=gshieldc_loc(k,iresshield)
4036 C & +grad_shield_loc(k,ilist,j)*eesij/fac_shield(j)
4037 C if (iresshield.gt.j) then
4038 C do ishi=j+1,iresshield-1
4039 C gshieldc(k,ishi)=gshieldc(k,ishi)+rlocshield
4040 C & +grad_shield_loc(k,ilist,j)*eesij/fac_shield(j)
4044 C do ishi=iresshield,j
4045 C gshieldc(k,ishi)=gshieldc(k,ishi)-rlocshield
4046 C & -grad_shield_loc(k,ilist,j)*eesij/fac_shield(j)
4053 gshieldc(k,i)=gshieldc(k,i)+
4054 & grad_shield(k,i)*eesij/fac_shield(i)*2.0
4055 gshieldc(k,j)=gshieldc(k,j)+
4056 & grad_shield(k,j)*eesij/fac_shield(j)*2.0
4057 gshieldc(k,i-1)=gshieldc(k,i-1)+
4058 & grad_shield(k,i)*eesij/fac_shield(i)*2.0
4059 gshieldc(k,j-1)=gshieldc(k,j-1)+
4060 & grad_shield(k,j)*eesij/fac_shield(j)*2.0
4065 c ghalf=0.5D0*ggg(k)
4066 c gelc(k,i)=gelc(k,i)+ghalf
4067 c gelc(k,j)=gelc(k,j)+ghalf
4069 c 9/28/08 AL Gradient compotents will be summed only at the end
4070 C print *,"before", gelc_long(1,i), gelc_long(1,j)
4072 gelc_long(k,j)=gelc_long(k,j)+ggg(k)
4073 C & +grad_shield(k,j)*eesij/fac_shield(j)
4074 gelc_long(k,i)=gelc_long(k,i)-ggg(k)
4075 C & +grad_shield(k,i)*eesij/fac_shield(i)
4076 C gelc_long(k,i-1)=gelc_long(k,i-1)
4077 C & +grad_shield(k,i)*eesij/fac_shield(i)
4078 C gelc_long(k,j-1)=gelc_long(k,j-1)
4079 C & +grad_shield(k,j)*eesij/fac_shield(j)
4081 C print *,"bafter", gelc_long(1,i), gelc_long(1,j)
4084 * Loop over residues i+1 thru j-1.
4088 cgrad gelc(l,k)=gelc(l,k)+ggg(l)
4091 if (sss.gt.0.0) then
4092 ggg(1)=facvdw*xj+sssgrad*rmij*evdwij*xj
4093 ggg(2)=facvdw*yj+sssgrad*rmij*evdwij*yj
4094 ggg(3)=facvdw*zj+sssgrad*rmij*evdwij*zj
4101 c ghalf=0.5D0*ggg(k)
4102 c gvdwpp(k,i)=gvdwpp(k,i)+ghalf
4103 c gvdwpp(k,j)=gvdwpp(k,j)+ghalf
4105 c 9/28/08 AL Gradient compotents will be summed only at the end
4107 gvdwpp(k,j)=gvdwpp(k,j)+ggg(k)
4108 gvdwpp(k,i)=gvdwpp(k,i)-ggg(k)
4111 * Loop over residues i+1 thru j-1.
4115 cgrad gvdwpp(l,k)=gvdwpp(l,k)+ggg(l)
4121 facvdw=(ev1+evdwij)*sss
4124 fac=-3*rrmij*(facvdw+facvdw+facel)
4129 * Radial derivatives. First process both termini of the fragment (i,j)
4133 C+eesij*grad_shield(1,i)+eesij*grad_shield(1,j)
4135 C+eesij*grad_shield(2,i)+eesij*grad_shield(2,j)
4137 C+eesij*grad_shield(3,i)+eesij*grad_shield(3,j)
4139 c ghalf=0.5D0*ggg(k)
4140 c gelc(k,i)=gelc(k,i)+ghalf
4141 c gelc(k,j)=gelc(k,j)+ghalf
4143 c 9/28/08 AL Gradient compotents will be summed only at the end
4145 gelc_long(k,j)=gelc(k,j)+ggg(k)
4146 gelc_long(k,i)=gelc(k,i)-ggg(k)
4149 * Loop over residues i+1 thru j-1.
4153 cgrad gelc(l,k)=gelc(l,k)+ggg(l)
4156 c 9/28/08 AL Gradient compotents will be summed only at the end
4157 ggg(1)=facvdw*xj+sssgrad*rmij*evdwij*xj
4158 ggg(2)=facvdw*yj+sssgrad*rmij*evdwij*yj
4159 ggg(3)=facvdw*zj+sssgrad*rmij*evdwij*zj
4161 gvdwpp(k,j)=gvdwpp(k,j)+ggg(k)
4162 gvdwpp(k,i)=gvdwpp(k,i)-ggg(k)
4170 ecosa=2.0D0*fac3*fac1+fac4
4173 ecosb=(fac3*(fac1*cosg+cosb)+cosg*fac4)
4174 ecosg=(fac3*(fac1*cosb+cosg)+cosb*fac4)
4176 dcosb(k)=rmij*(dc_norm(k,i)-erij(k)*cosb)
4177 dcosg(k)=rmij*(dc_norm(k,j)-erij(k)*cosg)
4179 cd print '(2i3,2(3(1pd14.5),3x))',i,j,(dcosb(k),k=1,3),
4180 cd & (dcosg(k),k=1,3)
4182 ggg(k)=(ecosb*dcosb(k)+ecosg*dcosg(k))*
4183 & fac_shield(i)**2*fac_shield(j)**2
4186 c ghalf=0.5D0*ggg(k)
4187 c gelc(k,i)=gelc(k,i)+ghalf
4188 c & +(ecosa*(dc_norm(k,j)-cosa*dc_norm(k,i))
4189 c & + ecosb*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1)
4190 c gelc(k,j)=gelc(k,j)+ghalf
4191 c & +(ecosa*(dc_norm(k,i)-cosa*dc_norm(k,j))
4192 c & + ecosg*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1)
4196 cgrad gelc(l,k)=gelc(l,k)+ggg(l)
4199 C print *,"before22", gelc_long(1,i), gelc_long(1,j)
4202 & +((ecosa*(dc_norm(k,j)-cosa*dc_norm(k,i))
4203 & + ecosb*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1))
4204 & *fac_shield(i)**2*fac_shield(j)**2
4206 & +((ecosa*(dc_norm(k,i)-cosa*dc_norm(k,j))
4207 & + ecosg*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1))
4208 & *fac_shield(i)**2*fac_shield(j)**2
4209 gelc_long(k,j)=gelc_long(k,j)+ggg(k)
4210 gelc_long(k,i)=gelc_long(k,i)-ggg(k)
4212 C print *,"before33", gelc_long(1,i), gelc_long(1,j)
4217 IF (wel_loc.gt.0.0d0 .or. wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0
4218 & .or. wcorr6.gt.0.0d0 .or. wturn3.gt.0.0d0
4219 & .or. wturn4.gt.0.0d0 .or. wturn6.gt.0.0d0) THEN
4221 C 9/25/99 Mixed third-order local-electrostatic terms. The local-interaction
4222 C energy of a peptide unit is assumed in the form of a second-order
4223 C Fourier series in the angles lambda1 and lambda2 (see Nishikawa et al.
4224 C Macromolecules, 1974, 7, 797-806 for definition). This correlation terms
4225 C are computed for EVERY pair of non-contiguous peptide groups.
4228 if (j.lt.nres-1) then
4240 muij(kkk)=mu(k,i)*mu(l,j)
4241 c write(iout,*) 'mumu=', mu(k,i),mu(l,j),i,j,k,l
4244 gmuij1(kkk)=gtb1(k,i+1)*mu(l,j)
4245 c write(iout,*) 'k=',k,i,gtb1(k,i+1),gtb1(k,i+1)*mu(l,j)
4246 gmuij2(kkk)=gUb2(k,i)*mu(l,j)
4247 gmuji1(kkk)=mu(k,i)*gtb1(l,j+1)
4248 c write(iout,*) 'l=',l,j,gtb1(l,j+1),gtb1(l,j+1)*mu(k,i)
4249 gmuji2(kkk)=mu(k,i)*gUb2(l,j)
4255 write (iout,*) 'EELEC: i',i,' j',j
4256 write (iout,*) 'j',j,' j1',j1,' j2',j2
4257 write(iout,*) 'muij',muij
4258 write (iout,*) "uy",uy(:,i)
4259 write (iout,*) "uz",uz(:,j)
4260 write (iout,*) "erij",erij
4262 ury=scalar(uy(1,i),erij)
4263 urz=scalar(uz(1,i),erij)
4264 vry=scalar(uy(1,j),erij)
4265 vrz=scalar(uz(1,j),erij)
4266 a22=scalar(uy(1,i),uy(1,j))-3*ury*vry
4267 a23=scalar(uy(1,i),uz(1,j))-3*ury*vrz
4268 a32=scalar(uz(1,i),uy(1,j))-3*urz*vry
4269 a33=scalar(uz(1,i),uz(1,j))-3*urz*vrz
4270 fac=dsqrt(-ael6i)*r3ij
4275 cd write (iout,'(4i5,4f10.5)')
4276 cd & i,itortyp(itype(i)),j,itortyp(itype(j)),a22,a23,a32,a33
4277 cd write (iout,'(6f10.5)') (muij(k),k=1,4),fac,eel_loc_ij
4278 cd write (iout,'(2(3f10.5,5x)/2(3f10.5,5x))') uy(:,i),uz(:,i),
4279 cd & uy(:,j),uz(:,j)
4280 cd write (iout,'(4f10.5)')
4281 cd & scalar(uy(1,i),uy(1,j)),scalar(uy(1,i),uz(1,j)),
4282 cd & scalar(uz(1,i),uy(1,j)),scalar(uz(1,i),uz(1,j))
4283 cd write (iout,'(4f10.5)') ury,urz,vry,vrz
4284 cd write (iout,'(9f10.5/)')
4285 cd & fac22,a22,fac23,a23,fac32,a32,fac33,a33,eel_loc_ij
4286 C Derivatives of the elements of A in virtual-bond vectors
4288 call unormderiv(erij(1),unmat(1,1),rmij,erder(1,1))
4290 uryg(k,1)=scalar(erder(1,k),uy(1,i))
4291 uryg(k,2)=scalar(uygrad(1,k,1,i),erij(1))
4292 uryg(k,3)=scalar(uygrad(1,k,2,i),erij(1))
4293 urzg(k,1)=scalar(erder(1,k),uz(1,i))
4294 urzg(k,2)=scalar(uzgrad(1,k,1,i),erij(1))
4295 urzg(k,3)=scalar(uzgrad(1,k,2,i),erij(1))
4296 vryg(k,1)=scalar(erder(1,k),uy(1,j))
4297 vryg(k,2)=scalar(uygrad(1,k,1,j),erij(1))
4298 vryg(k,3)=scalar(uygrad(1,k,2,j),erij(1))
4299 vrzg(k,1)=scalar(erder(1,k),uz(1,j))
4300 vrzg(k,2)=scalar(uzgrad(1,k,1,j),erij(1))
4301 vrzg(k,3)=scalar(uzgrad(1,k,2,j),erij(1))
4303 C Compute radial contributions to the gradient
4321 C Add the contributions coming from er
4324 agg(k,1)=agg(k,1)+fac3*(uryg(k,1)*vry+vryg(k,1)*ury)
4325 agg(k,2)=agg(k,2)+fac3*(uryg(k,1)*vrz+vrzg(k,1)*ury)
4326 agg(k,3)=agg(k,3)+fac3*(urzg(k,1)*vry+vryg(k,1)*urz)
4327 agg(k,4)=agg(k,4)+fac3*(urzg(k,1)*vrz+vrzg(k,1)*urz)
4330 C Derivatives in DC(i)
4331 cgrad ghalf1=0.5d0*agg(k,1)
4332 cgrad ghalf2=0.5d0*agg(k,2)
4333 cgrad ghalf3=0.5d0*agg(k,3)
4334 cgrad ghalf4=0.5d0*agg(k,4)
4335 aggi(k,1)=fac*(scalar(uygrad(1,k,1,i),uy(1,j))
4336 & -3.0d0*uryg(k,2)*vry)!+ghalf1
4337 aggi(k,2)=fac*(scalar(uygrad(1,k,1,i),uz(1,j))
4338 & -3.0d0*uryg(k,2)*vrz)!+ghalf2
4339 aggi(k,3)=fac*(scalar(uzgrad(1,k,1,i),uy(1,j))
4340 & -3.0d0*urzg(k,2)*vry)!+ghalf3
4341 aggi(k,4)=fac*(scalar(uzgrad(1,k,1,i),uz(1,j))
4342 & -3.0d0*urzg(k,2)*vrz)!+ghalf4
4343 C Derivatives in DC(i+1)
4344 aggi1(k,1)=fac*(scalar(uygrad(1,k,2,i),uy(1,j))
4345 & -3.0d0*uryg(k,3)*vry)!+agg(k,1)
4346 aggi1(k,2)=fac*(scalar(uygrad(1,k,2,i),uz(1,j))
4347 & -3.0d0*uryg(k,3)*vrz)!+agg(k,2)
4348 aggi1(k,3)=fac*(scalar(uzgrad(1,k,2,i),uy(1,j))
4349 & -3.0d0*urzg(k,3)*vry)!+agg(k,3)
4350 aggi1(k,4)=fac*(scalar(uzgrad(1,k,2,i),uz(1,j))
4351 & -3.0d0*urzg(k,3)*vrz)!+agg(k,4)
4352 C Derivatives in DC(j)
4353 aggj(k,1)=fac*(scalar(uygrad(1,k,1,j),uy(1,i))
4354 & -3.0d0*vryg(k,2)*ury)!+ghalf1
4355 aggj(k,2)=fac*(scalar(uzgrad(1,k,1,j),uy(1,i))
4356 & -3.0d0*vrzg(k,2)*ury)!+ghalf2
4357 aggj(k,3)=fac*(scalar(uygrad(1,k,1,j),uz(1,i))
4358 & -3.0d0*vryg(k,2)*urz)!+ghalf3
4359 aggj(k,4)=fac*(scalar(uzgrad(1,k,1,j),uz(1,i))
4360 & -3.0d0*vrzg(k,2)*urz)!+ghalf4
4361 C Derivatives in DC(j+1) or DC(nres-1)
4362 aggj1(k,1)=fac*(scalar(uygrad(1,k,2,j),uy(1,i))
4363 & -3.0d0*vryg(k,3)*ury)
4364 aggj1(k,2)=fac*(scalar(uzgrad(1,k,2,j),uy(1,i))
4365 & -3.0d0*vrzg(k,3)*ury)
4366 aggj1(k,3)=fac*(scalar(uygrad(1,k,2,j),uz(1,i))
4367 & -3.0d0*vryg(k,3)*urz)
4368 aggj1(k,4)=fac*(scalar(uzgrad(1,k,2,j),uz(1,i))
4369 & -3.0d0*vrzg(k,3)*urz)
4370 cgrad if (j.eq.nres-1 .and. i.lt.j-2) then
4372 cgrad aggj1(k,l)=aggj1(k,l)+agg(k,l)
4387 aggi(k,l)=-aggi(k,l)
4388 aggi1(k,l)=-aggi1(k,l)
4389 aggj(k,l)=-aggj(k,l)
4390 aggj1(k,l)=-aggj1(k,l)
4394 if (j.lt.nres-1) then
4400 aggi(k,l)=-aggi(k,l)
4401 aggi1(k,l)=-aggi1(k,l)
4402 aggj(k,l)=-aggj(k,l)
4403 aggj1(k,l)=-aggj1(k,l)
4414 aggi(k,l)=-aggi(k,l)
4415 aggi1(k,l)=-aggi1(k,l)
4416 aggj(k,l)=-aggj(k,l)
4417 aggj1(k,l)=-aggj1(k,l)
4422 IF (wel_loc.gt.0.0d0) THEN
4423 C Contribution to the local-electrostatic energy coming from the i-j pair
4424 eel_loc_ij=a22*muij(1)+a23*muij(2)+a32*muij(3)
4427 write (iout,*) "muij",muij," a22",a22," a23",a23," a32",a32,
4429 write (iout,*) "ij",i,j," eel_loc_ij",eel_loc_ij,
4430 & " wel_loc",wel_loc
4432 if (shield_mode.eq.0) then
4439 eel_loc_ij=eel_loc_ij
4440 & *fac_shield(i)*fac_shield(j)
4441 if (energy_dec) write (iout,'(a6,2i5,0pf7.3)')
4442 & 'eelloc',i,j,eel_loc_ij
4443 c if (eel_loc_ij.ne.0)
4444 c & write (iout,'(a4,2i4,8f9.5)')'chuj',
4445 c & i,j,a22,muij(1),a23,muij(2),a32,muij(3),a33,muij(4)
4447 eel_loc=eel_loc+eel_loc_ij
4448 C Now derivative over eel_loc
4450 if ((fac_shield(i).gt.0).and.(fac_shield(j).gt.0).and.
4451 & (shield_mode.gt.0)) then
4454 do ilist=1,ishield_list(i)
4455 iresshield=shield_list(ilist,i)
4457 rlocshield=grad_shield_side(k,ilist,i)*eel_loc_ij
4460 gshieldx_ll(k,iresshield)=gshieldx_ll(k,iresshield)+
4462 & +grad_shield_loc(k,ilist,i)*eel_loc_ij/fac_shield(i)
4463 gshieldc_ll(k,iresshield-1)=gshieldc_ll(k,iresshield-1)
4467 do ilist=1,ishield_list(j)
4468 iresshield=shield_list(ilist,j)
4470 rlocshield=grad_shield_side(k,ilist,j)*eel_loc_ij
4473 gshieldx_ll(k,iresshield)=gshieldx_ll(k,iresshield)+
4475 & +grad_shield_loc(k,ilist,j)*eel_loc_ij/fac_shield(j)
4476 gshieldc_ll(k,iresshield-1)=gshieldc_ll(k,iresshield-1)
4483 gshieldc_ll(k,i)=gshieldc_ll(k,i)+
4484 & grad_shield(k,i)*eel_loc_ij/fac_shield(i)
4485 gshieldc_ll(k,j)=gshieldc_ll(k,j)+
4486 & grad_shield(k,j)*eel_loc_ij/fac_shield(j)
4487 gshieldc_ll(k,i-1)=gshieldc_ll(k,i-1)+
4488 & grad_shield(k,i)*eel_loc_ij/fac_shield(i)
4489 gshieldc_ll(k,j-1)=gshieldc_ll(k,j-1)+
4490 & grad_shield(k,j)*eel_loc_ij/fac_shield(j)
4495 c write (iout,*) 'i',i,' j',j,itype(i),itype(j),
4496 c & ' eel_loc_ij',eel_loc_ij
4497 C write(iout,*) 'muije=',i,j,muij(1),muij(2),muij(3),muij(4)
4498 C Calculate patrial derivative for theta angle
4500 geel_loc_ij=(a22*gmuij1(1)
4504 & *fac_shield(i)*fac_shield(j)
4505 c write(iout,*) "derivative over thatai"
4506 c write(iout,*) a22*gmuij1(1), a23*gmuij1(2) ,a32*gmuij1(3),
4508 gloc(nphi+i,icg)=gloc(nphi+i,icg)+
4509 & geel_loc_ij*wel_loc
4510 gloc_compon(7,nphi+i)=gloc_compon(7,nphi+i)+
4512 c write(iout,*) "derivative over thatai-1"
4513 c write(iout,*) a22*gmuij2(1), a23*gmuij2(2) ,a32*gmuij2(3),
4520 gloc(nphi+i-1,icg)=gloc(nphi+i-1,icg)+
4521 & geel_loc_ij*wel_loc
4522 & *fac_shield(i)*fac_shield(j)
4523 gloc_compon(7,nphi+i-1)=gloc_compon(7,nphi+i-1)+
4524 & geel_loc_ij*fac_shield(i)*fac_shield(j)
4526 c Derivative over j residue
4527 geel_loc_ji=a22*gmuji1(1)
4531 c write(iout,*) "derivative over thataj"
4532 c write(iout,*) a22*gmuji1(1), a23*gmuji1(2) ,a32*gmuji1(3),
4535 gloc(nphi+j,icg)=gloc(nphi+j,icg)+
4536 & geel_loc_ji*wel_loc
4537 & *fac_shield(i)*fac_shield(j)
4538 gloc_compon(7,nphi+j)=gloc_compon(7,nphi+j)+
4539 & geel_loc_ji*fac_shield(i)*fac_shield(j)
4545 c write(iout,*) "derivative over thataj-1"
4546 c write(iout,*) a22*gmuji2(1), a23*gmuji2(2) ,a32*gmuji2(3),
4548 gloc(nphi+j-1,icg)=gloc(nphi+j-1,icg)+
4549 & geel_loc_ji*wel_loc
4550 & *fac_shield(i)*fac_shield(j)
4551 gloc_compon(7,nphi+j-1)=gloc_compon(7,nphi+j-1)+
4552 & geel_loc_ji*fac_shield(i)*fac_shield(j)
4554 cd write (iout,*) 'i',i,' j',j,' eel_loc_ij',eel_loc_ij
4556 C Partial derivatives in virtual-bond dihedral angles gamma
4558 & gel_loc_loc(i-1)=gel_loc_loc(i-1)+
4559 & (a22*muder(1,i)*mu(1,j)+a23*muder(1,i)*mu(2,j)
4560 & +a32*muder(2,i)*mu(1,j)+a33*muder(2,i)*mu(2,j))
4561 & *fac_shield(i)*fac_shield(j)
4563 gel_loc_loc(j-1)=gel_loc_loc(j-1)+
4564 & (a22*mu(1,i)*muder(1,j)+a23*mu(1,i)*muder(2,j)
4565 & +a32*mu(2,i)*muder(1,j)+a33*mu(2,i)*muder(2,j))
4566 & *fac_shield(i)*fac_shield(j)
4567 C Derivatives of eello in DC(i+1) thru DC(j-1) or DC(nres-2)
4569 ggg(l)=(agg(l,1)*muij(1)+
4570 & agg(l,2)*muij(2)+agg(l,3)*muij(3)+agg(l,4)*muij(4))
4571 & *fac_shield(i)*fac_shield(j)
4572 gel_loc_long(l,j)=gel_loc_long(l,j)+ggg(l)
4573 gel_loc_long(l,i)=gel_loc_long(l,i)-ggg(l)
4574 cgrad ghalf=0.5d0*ggg(l)
4575 cgrad gel_loc(l,i)=gel_loc(l,i)+ghalf
4576 cgrad gel_loc(l,j)=gel_loc(l,j)+ghalf
4580 cgrad gel_loc(l,k)=gel_loc(l,k)+ggg(l)
4583 C Remaining derivatives of eello
4585 gel_loc(l,i)=gel_loc(l,i)+(aggi(l,1)*muij(1)+
4586 & aggi(l,2)*muij(2)+aggi(l,3)*muij(3)+aggi(l,4)*muij(4))
4587 & *fac_shield(i)*fac_shield(j)
4589 gel_loc(l,i+1)=gel_loc(l,i+1)+(aggi1(l,1)*muij(1)+
4590 & aggi1(l,2)*muij(2)+aggi1(l,3)*muij(3)+aggi1(l,4)*muij(4))
4591 & *fac_shield(i)*fac_shield(j)
4593 gel_loc(l,j)=gel_loc(l,j)+(aggj(l,1)*muij(1)+
4594 & aggj(l,2)*muij(2)+aggj(l,3)*muij(3)+aggj(l,4)*muij(4))
4595 & *fac_shield(i)*fac_shield(j)
4597 gel_loc(l,j1)=gel_loc(l,j1)+(aggj1(l,1)*muij(1)+
4598 & aggj1(l,2)*muij(2)+aggj1(l,3)*muij(3)+aggj1(l,4)*muij(4))
4599 & *fac_shield(i)*fac_shield(j)
4606 C Change 12/26/95 to calculate four-body contributions to H-bonding energy
4607 c if (j.gt.i+1 .and. num_conti.le.maxconts) then
4608 if (wcorr+wcorr4+wcorr5+wcorr6.gt.0.0d0
4609 & .and. num_conti.le.maxconts) then
4610 c write (iout,*) i,j," entered corr"
4612 C Calculate the contact function. The ith column of the array JCONT will
4613 C contain the numbers of atoms that make contacts with the atom I (of numbers
4614 C greater than I). The arrays FACONT and GACONT will contain the values of
4615 C the contact function and its derivative.
4616 c r0ij=1.02D0*rpp(iteli,itelj)
4617 c r0ij=1.11D0*rpp(iteli,itelj)
4618 r0ij=2.20D0*rpp(iteli,itelj)
4619 c r0ij=1.55D0*rpp(iteli,itelj)
4620 call gcont(rij,r0ij,1.0D0,0.2d0*r0ij,fcont,fprimcont)
4621 if (fcont.gt.0.0D0) then
4622 num_conti=num_conti+1
4623 if (num_conti.gt.maxconts) then
4624 write (iout,*) 'WARNING - max. # of contacts exceeded;',
4625 & ' will skip next contacts for this conf.'
4627 jcont_hb(num_conti,i)=j
4628 cd write (iout,*) "i",i," j",j," num_conti",num_conti,
4629 cd & " jcont_hb",jcont_hb(num_conti,i)
4630 IF (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or.
4631 & wcorr6.gt.0.0d0 .or. wturn6.gt.0.0d0) THEN
4632 C 9/30/99 (AL) - store components necessary to evaluate higher-order loc-el
4634 d_cont(num_conti,i)=rij
4635 cd write (2,'(3e15.5)') rij,r0ij+0.2d0*r0ij,rij
4636 C --- Electrostatic-interaction matrix ---
4637 a_chuj(1,1,num_conti,i)=a22
4638 a_chuj(1,2,num_conti,i)=a23
4639 a_chuj(2,1,num_conti,i)=a32
4640 a_chuj(2,2,num_conti,i)=a33
4641 C --- Gradient of rij
4644 grij_hb_cont(kkk,num_conti,i)=erij(kkk)
4651 a_chuj_der(k,l,m,1,num_conti,i)=agg(m,kkll)
4652 a_chuj_der(k,l,m,2,num_conti,i)=aggi(m,kkll)
4653 a_chuj_der(k,l,m,3,num_conti,i)=aggi1(m,kkll)
4654 a_chuj_der(k,l,m,4,num_conti,i)=aggj(m,kkll)
4655 a_chuj_der(k,l,m,5,num_conti,i)=aggj1(m,kkll)
4661 IF (wcorr4.eq.0.0d0 .and. wcorr.gt.0.0d0) THEN
4662 C Calculate contact energies
4664 wij=cosa-3.0D0*cosb*cosg
4667 c fac3=dsqrt(-ael6i)/r0ij**3
4668 fac3=dsqrt(-ael6i)*r3ij
4669 c ees0pij=dsqrt(4.0D0+cosa4+wij*wij-3.0D0*cosbg1*cosbg1)
4670 ees0tmp=4.0D0+cosa4+wij*wij-3.0D0*cosbg1*cosbg1
4671 if (ees0tmp.gt.0) then
4672 ees0pij=dsqrt(ees0tmp)
4676 c ees0mij=dsqrt(4.0D0-cosa4+wij*wij-3.0D0*cosbg2*cosbg2)
4677 ees0tmp=4.0D0-cosa4+wij*wij-3.0D0*cosbg2*cosbg2
4678 if (ees0tmp.gt.0) then
4679 ees0mij=dsqrt(ees0tmp)
4684 if (shield_mode.eq.0) then
4688 ees0plist(num_conti,i)=j
4689 C fac_shield(i)=0.4d0
4690 C fac_shield(j)=0.6d0
4692 ees0p(num_conti,i)=0.5D0*fac3*(ees0pij+ees0mij)
4693 & *fac_shield(i)*fac_shield(j)
4694 ees0m(num_conti,i)=0.5D0*fac3*(ees0pij-ees0mij)
4695 & *fac_shield(i)*fac_shield(j)
4696 C Diagnostics. Comment out or remove after debugging!
4697 c ees0p(num_conti,i)=0.5D0*fac3*ees0pij
4698 c ees0m(num_conti,i)=0.5D0*fac3*ees0mij
4699 c ees0m(num_conti,i)=0.0D0
4701 c write (iout,*) 'i=',i,' j=',j,' rij=',rij,' r0ij=',r0ij,
4702 c & ' ees0ij=',ees0p(num_conti,i),ees0m(num_conti,i),' fcont=',fcont
4703 C Angular derivatives of the contact function
4705 ees0pij1=fac3/ees0pij
4706 ees0mij1=fac3/ees0mij
4707 fac3p=-3.0D0*fac3*rrmij
4708 ees0pijp=0.5D0*fac3p*(ees0pij+ees0mij)
4709 ees0mijp=0.5D0*fac3p*(ees0pij-ees0mij)
4711 ecosa1= ees0pij1*( 1.0D0+0.5D0*wij)
4712 ecosb1=-1.5D0*ees0pij1*(wij*cosg+cosbg1)
4713 ecosg1=-1.5D0*ees0pij1*(wij*cosb+cosbg1)
4714 ecosa2= ees0mij1*(-1.0D0+0.5D0*wij)
4715 ecosb2=-1.5D0*ees0mij1*(wij*cosg+cosbg2)
4716 ecosg2=-1.5D0*ees0mij1*(wij*cosb-cosbg2)
4717 ecosap=ecosa1+ecosa2
4718 ecosbp=ecosb1+ecosb2
4719 ecosgp=ecosg1+ecosg2
4720 ecosam=ecosa1-ecosa2
4721 ecosbm=ecosb1-ecosb2
4722 ecosgm=ecosg1-ecosg2
4731 facont_hb(num_conti,i)=fcont
4734 fprimcont=fprimcont/rij
4735 cd facont_hb(num_conti,i)=1.0D0
4736 C Following line is for diagnostics.
4739 dcosb(k)=rmij*(dc_norm(k,i)-erij(k)*cosb)
4740 dcosg(k)=rmij*(dc_norm(k,j)-erij(k)*cosg)
4743 gggp(k)=ecosbp*dcosb(k)+ecosgp*dcosg(k)
4744 gggm(k)=ecosbm*dcosb(k)+ecosgm*dcosg(k)
4746 gggp(1)=gggp(1)+ees0pijp*xj
4747 gggp(2)=gggp(2)+ees0pijp*yj
4748 gggp(3)=gggp(3)+ees0pijp*zj
4749 gggm(1)=gggm(1)+ees0mijp*xj
4750 gggm(2)=gggm(2)+ees0mijp*yj
4751 gggm(3)=gggm(3)+ees0mijp*zj
4752 C Derivatives due to the contact function
4753 gacont_hbr(1,num_conti,i)=fprimcont*xj
4754 gacont_hbr(2,num_conti,i)=fprimcont*yj
4755 gacont_hbr(3,num_conti,i)=fprimcont*zj
4758 c 10/24/08 cgrad and ! comments indicate the parts of the code removed
4759 c following the change of gradient-summation algorithm.
4761 cgrad ghalfp=0.5D0*gggp(k)
4762 cgrad ghalfm=0.5D0*gggm(k)
4763 gacontp_hb1(k,num_conti,i)=!ghalfp
4764 & +(ecosap*(dc_norm(k,j)-cosa*dc_norm(k,i))
4765 & + ecosbp*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1)
4766 & *fac_shield(i)*fac_shield(j)
4768 gacontp_hb2(k,num_conti,i)=!ghalfp
4769 & +(ecosap*(dc_norm(k,i)-cosa*dc_norm(k,j))
4770 & + ecosgp*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1)
4771 & *fac_shield(i)*fac_shield(j)
4773 gacontp_hb3(k,num_conti,i)=gggp(k)
4774 & *fac_shield(i)*fac_shield(j)
4776 gacontm_hb1(k,num_conti,i)=!ghalfm
4777 & +(ecosam*(dc_norm(k,j)-cosa*dc_norm(k,i))
4778 & + ecosbm*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1)
4779 & *fac_shield(i)*fac_shield(j)
4781 gacontm_hb2(k,num_conti,i)=!ghalfm
4782 & +(ecosam*(dc_norm(k,i)-cosa*dc_norm(k,j))
4783 & + ecosgm*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1)
4784 & *fac_shield(i)*fac_shield(j)
4786 gacontm_hb3(k,num_conti,i)=gggm(k)
4787 & *fac_shield(i)*fac_shield(j)
4790 C Diagnostics. Comment out or remove after debugging!
4792 cdiag gacontp_hb1(k,num_conti,i)=0.0D0
4793 cdiag gacontp_hb2(k,num_conti,i)=0.0D0
4794 cdiag gacontp_hb3(k,num_conti,i)=0.0D0
4795 cdiag gacontm_hb1(k,num_conti,i)=0.0D0
4796 cdiag gacontm_hb2(k,num_conti,i)=0.0D0
4797 cdiag gacontm_hb3(k,num_conti,i)=0.0D0
4803 endif ! num_conti.le.maxconts
4807 if (wturn3.gt.0.0d0 .or. wturn4.gt.0.0d0) then
4810 ghalf=0.5d0*agg(l,k)
4811 aggi(l,k)=aggi(l,k)+ghalf
4812 aggi1(l,k)=aggi1(l,k)+agg(l,k)
4813 aggj(l,k)=aggj(l,k)+ghalf
4816 if (j.eq.nres-1 .and. i.lt.j-2) then
4819 aggj1(l,k)=aggj1(l,k)+agg(l,k)
4825 c t_eelecij=t_eelecij+MPI_Wtime()-time00
4828 C-----------------------------------------------------------------------------
4829 subroutine eturn3(i,eello_turn3)
4830 C Third- and fourth-order contributions from turns
4831 implicit real*8 (a-h,o-z)
4832 include 'DIMENSIONS'
4833 include 'DIMENSIONS.ZSCOPT'
4834 include 'COMMON.IOUNITS'
4835 include 'COMMON.GEO'
4836 include 'COMMON.VAR'
4837 include 'COMMON.LOCAL'
4838 include 'COMMON.CHAIN'
4839 include 'COMMON.DERIV'
4840 include 'COMMON.INTERACT'
4841 include 'COMMON.CONTACTS'
4842 include 'COMMON.TORSION'
4843 include 'COMMON.VECTORS'
4844 include 'COMMON.FFIELD'
4845 include 'COMMON.CONTROL'
4846 include 'COMMON.SHIELD'
4848 double precision auxmat(2,2),auxmat1(2,2),auxmat2(2,2),pizda(2,2),
4849 & e1t(2,2),e2t(2,2),e3t(2,2),e1tder(2,2),e2tder(2,2),e3tder(2,2),
4850 & e1a(2,2),ae3(2,2),ae3e2(2,2),auxvec(2),auxvec1(2),gpizda1(2,2),
4851 & gpizda2(2,2),auxgmat1(2,2),auxgmatt1(2,2),
4852 & auxgmat2(2,2),auxgmatt2(2,2)
4853 double precision agg(3,4),aggi(3,4),aggi1(3,4),
4854 & aggj(3,4),aggj1(3,4),a_temp(2,2),auxmat3(2,2)
4855 common /locel/ a_temp,agg,aggi,aggi1,aggj,aggj1,a22,a23,a32,a33,
4856 & dxi,dyi,dzi,dx_normi,dy_normi,dz_normi,xmedi,ymedi,zmedi,
4859 c write (iout,*) "eturn3",i,j,j1,j2
4864 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
4866 C Third-order contributions
4873 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
4874 cd call checkint_turn3(i,a_temp,eello_turn3_num)
4875 call matmat2(EUg(1,1,i+1),EUg(1,1,i+2),auxmat(1,1))
4876 c auxalary matices for theta gradient
4877 c auxalary matrix for i+1 and constant i+2
4878 call matmat2(gtEUg(1,1,i+1),EUg(1,1,i+2),auxgmat1(1,1))
4879 c auxalary matrix for i+2 and constant i+1
4880 call matmat2(EUg(1,1,i+1),gtEUg(1,1,i+2),auxgmat2(1,1))
4881 call transpose2(auxmat(1,1),auxmat1(1,1))
4882 call transpose2(auxgmat1(1,1),auxgmatt1(1,1))
4883 call transpose2(auxgmat2(1,1),auxgmatt2(1,1))
4884 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
4885 call matmat2(a_temp(1,1),auxgmatt1(1,1),gpizda1(1,1))
4886 call matmat2(a_temp(1,1),auxgmatt2(1,1),gpizda2(1,1))
4887 if (shield_mode.eq.0) then
4894 eello_turn3=eello_turn3+0.5d0*(pizda(1,1)+pizda(2,2))
4895 & *fac_shield(i)*fac_shield(j)
4896 eello_t3=0.5d0*(pizda(1,1)+pizda(2,2))
4897 & *fac_shield(i)*fac_shield(j)
4898 if (energy_dec) write (iout,'(6heturn3,2i5,0pf7.3)') i,i+2,
4902 C Derivatives in theta
4903 gloc(nphi+i,icg)=gloc(nphi+i,icg)
4904 & +0.5d0*(gpizda1(1,1)+gpizda1(2,2))*wturn3
4905 & *fac_shield(i)*fac_shield(j)
4906 gloc_compon(8,nphi+i)=gloc_compon(8,nphi+i)+
4907 & +0.5d0*(gpizda1(1,1)+gpizda1(2,2))
4908 & *fac_shield(i)*fac_shield(j)
4909 gloc(nphi+i+1,icg)=gloc(nphi+i+1,icg)
4910 & +0.5d0*(gpizda2(1,1)+gpizda2(2,2))*wturn3
4911 & *fac_shield(i)*fac_shield(j)
4912 gloc_compon(8,nphi+i+1)=gloc_compon(8,nphi+i+1)+
4913 & +0.5d0*(gpizda2(1,1)+gpizda2(2,2))
4914 & *fac_shield(i)*fac_shield(j)
4917 C Derivatives in shield mode
4918 if ((fac_shield(i).gt.0).and.(fac_shield(j).gt.0).and.
4919 & (shield_mode.gt.0)) then
4922 do ilist=1,ishield_list(i)
4923 iresshield=shield_list(ilist,i)
4925 rlocshield=grad_shield_side(k,ilist,i)*eello_t3/fac_shield(i)
4927 gshieldx_t3(k,iresshield)=gshieldx_t3(k,iresshield)+
4929 & +grad_shield_loc(k,ilist,i)*eello_t3/fac_shield(i)
4930 gshieldc_t3(k,iresshield-1)=gshieldc_t3(k,iresshield-1)
4934 do ilist=1,ishield_list(j)
4935 iresshield=shield_list(ilist,j)
4937 rlocshield=grad_shield_side(k,ilist,j)*eello_t3/fac_shield(j)
4939 gshieldx_t3(k,iresshield)=gshieldx_t3(k,iresshield)+
4941 & +grad_shield_loc(k,ilist,j)*eello_t3/fac_shield(j)
4942 gshieldc_t3(k,iresshield-1)=gshieldc_t3(k,iresshield-1)
4949 gshieldc_t3(k,i)=gshieldc_t3(k,i)+
4950 & grad_shield(k,i)*eello_t3/fac_shield(i)
4951 gshieldc_t3(k,j)=gshieldc_t3(k,j)+
4952 & grad_shield(k,j)*eello_t3/fac_shield(j)
4953 gshieldc_t3(k,i-1)=gshieldc_t3(k,i-1)+
4954 & grad_shield(k,i)*eello_t3/fac_shield(i)
4955 gshieldc_t3(k,j-1)=gshieldc_t3(k,j-1)+
4956 & grad_shield(k,j)*eello_t3/fac_shield(j)
4960 C if (energy_dec) write (iout,'(a6,2i5,0pf7.3)')
4961 cd write (2,*) 'i,',i,' j',j,'eello_turn3',
4962 cd & 0.5d0*(pizda(1,1)+pizda(2,2)),
4963 cd & ' eello_turn3_num',4*eello_turn3_num
4964 C Derivatives in gamma(i)
4965 call matmat2(EUgder(1,1,i+1),EUg(1,1,i+2),auxmat2(1,1))
4966 call transpose2(auxmat2(1,1),auxmat3(1,1))
4967 call matmat2(a_temp(1,1),auxmat3(1,1),pizda(1,1))
4968 gel_loc_turn3(i)=gel_loc_turn3(i)+0.5d0*(pizda(1,1)+pizda(2,2))
4969 & *fac_shield(i)*fac_shield(j)
4970 C Derivatives in gamma(i+1)
4971 call matmat2(EUg(1,1,i+1),EUgder(1,1,i+2),auxmat2(1,1))
4972 call transpose2(auxmat2(1,1),auxmat3(1,1))
4973 call matmat2(a_temp(1,1),auxmat3(1,1),pizda(1,1))
4974 gel_loc_turn3(i+1)=gel_loc_turn3(i+1)
4975 & +0.5d0*(pizda(1,1)+pizda(2,2))
4976 & *fac_shield(i)*fac_shield(j)
4977 C Cartesian derivatives
4979 c ghalf1=0.5d0*agg(l,1)
4980 c ghalf2=0.5d0*agg(l,2)
4981 c ghalf3=0.5d0*agg(l,3)
4982 c ghalf4=0.5d0*agg(l,4)
4983 a_temp(1,1)=aggi(l,1)!+ghalf1
4984 a_temp(1,2)=aggi(l,2)!+ghalf2
4985 a_temp(2,1)=aggi(l,3)!+ghalf3
4986 a_temp(2,2)=aggi(l,4)!+ghalf4
4987 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
4988 gcorr3_turn(l,i)=gcorr3_turn(l,i)
4989 & +0.5d0*(pizda(1,1)+pizda(2,2))
4990 & *fac_shield(i)*fac_shield(j)
4992 a_temp(1,1)=aggi1(l,1)!+agg(l,1)
4993 a_temp(1,2)=aggi1(l,2)!+agg(l,2)
4994 a_temp(2,1)=aggi1(l,3)!+agg(l,3)
4995 a_temp(2,2)=aggi1(l,4)!+agg(l,4)
4996 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
4997 gcorr3_turn(l,i+1)=gcorr3_turn(l,i+1)
4998 & +0.5d0*(pizda(1,1)+pizda(2,2))
4999 & *fac_shield(i)*fac_shield(j)
5000 a_temp(1,1)=aggj(l,1)!+ghalf1
5001 a_temp(1,2)=aggj(l,2)!+ghalf2
5002 a_temp(2,1)=aggj(l,3)!+ghalf3
5003 a_temp(2,2)=aggj(l,4)!+ghalf4
5004 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
5005 gcorr3_turn(l,j)=gcorr3_turn(l,j)
5006 & +0.5d0*(pizda(1,1)+pizda(2,2))
5007 & *fac_shield(i)*fac_shield(j)
5008 a_temp(1,1)=aggj1(l,1)
5009 a_temp(1,2)=aggj1(l,2)
5010 a_temp(2,1)=aggj1(l,3)
5011 a_temp(2,2)=aggj1(l,4)
5012 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
5013 gcorr3_turn(l,j1)=gcorr3_turn(l,j1)
5014 & +0.5d0*(pizda(1,1)+pizda(2,2))
5015 & *fac_shield(i)*fac_shield(j)
5022 C-------------------------------------------------------------------------------
5023 subroutine eturn4(i,eello_turn4)
5024 C Third- and fourth-order contributions from turns
5025 implicit real*8 (a-h,o-z)
5026 include 'DIMENSIONS'
5027 include 'DIMENSIONS.ZSCOPT'
5028 include 'COMMON.IOUNITS'
5029 include 'COMMON.GEO'
5030 include 'COMMON.VAR'
5031 include 'COMMON.LOCAL'
5032 include 'COMMON.CHAIN'
5033 include 'COMMON.DERIV'
5034 include 'COMMON.INTERACT'
5035 include 'COMMON.CONTACTS'
5036 include 'COMMON.TORSION'
5037 include 'COMMON.VECTORS'
5038 include 'COMMON.FFIELD'
5039 include 'COMMON.CONTROL'
5040 include 'COMMON.SHIELD'
5042 double precision auxmat(2,2),auxmat1(2,2),auxmat2(2,2),pizda(2,2),
5043 & e1t(2,2),e2t(2,2),e3t(2,2),e1tder(2,2),e2tder(2,2),e3tder(2,2),
5044 & e1a(2,2),ae3(2,2),ae3e2(2,2),auxvec(2),auxvec1(2),auxgvec(2),
5045 & auxgEvec1(2),auxgEvec2(2),auxgEvec3(2),
5046 & gte1t(2,2),gte2t(2,2),gte3t(2,2),
5047 & gte1a(2,2),gtae3(2,2),gtae3e2(2,2), ae3gte2(2,2),
5048 & gtEpizda1(2,2),gtEpizda2(2,2),gtEpizda3(2,2)
5049 double precision agg(3,4),aggi(3,4),aggi1(3,4),
5050 & aggj(3,4),aggj1(3,4),a_temp(2,2),auxmat3(2,2)
5051 common /locel/ a_temp,agg,aggi,aggi1,aggj,aggj1,a22,a23,a32,a33,
5052 & dxi,dyi,dzi,dx_normi,dy_normi,dz_normi,xmedi,ymedi,zmedi,
5055 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
5057 C Fourth-order contributions
5065 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
5066 cd call checkint_turn4(i,a_temp,eello_turn4_num)
5067 c write (iout,*) "eturn4 i",i," j",j," j1",j1," j2",j2
5068 c write(iout,*)"WCHODZE W PROGRAM"
5073 iti1=itype2loc(itype(i+1))
5074 iti2=itype2loc(itype(i+2))
5075 iti3=itype2loc(itype(i+3))
5076 c write(iout,*) "iti1",iti1," iti2",iti2," iti3",iti3
5077 call transpose2(EUg(1,1,i+1),e1t(1,1))
5078 call transpose2(Eug(1,1,i+2),e2t(1,1))
5079 call transpose2(Eug(1,1,i+3),e3t(1,1))
5080 C Ematrix derivative in theta
5081 call transpose2(gtEUg(1,1,i+1),gte1t(1,1))
5082 call transpose2(gtEug(1,1,i+2),gte2t(1,1))
5083 call transpose2(gtEug(1,1,i+3),gte3t(1,1))
5084 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
5085 c eta1 in derivative theta
5086 call matmat2(gte1t(1,1),a_temp(1,1),gte1a(1,1))
5087 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
5088 c auxgvec is derivative of Ub2 so i+3 theta
5089 call matvec2(e1a(1,1),gUb2(1,i+3),auxgvec(1))
5090 c auxalary matrix of E i+1
5091 call matvec2(gte1a(1,1),Ub2(1,i+3),auxgEvec1(1))
5094 s1=scalar2(b1(1,i+2),auxvec(1))
5095 c derivative of theta i+2 with constant i+3
5096 gs23=scalar2(gtb1(1,i+2),auxvec(1))
5097 c derivative of theta i+2 with constant i+2
5098 gs32=scalar2(b1(1,i+2),auxgvec(1))
5099 c derivative of E matix in theta of i+1
5100 gsE13=scalar2(b1(1,i+2),auxgEvec1(1))
5102 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
5103 c ea31 in derivative theta
5104 call matmat2(a_temp(1,1),gte3t(1,1),gtae3(1,1))
5105 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
5106 c auxilary matrix auxgvec of Ub2 with constant E matirx
5107 call matvec2(ae3(1,1),gUb2(1,i+2),auxgvec(1))
5108 c auxilary matrix auxgEvec1 of E matix with Ub2 constant
5109 call matvec2(gtae3(1,1),Ub2(1,i+2),auxgEvec3(1))
5113 s2=scalar2(b1(1,i+1),auxvec(1))
5114 c derivative of theta i+1 with constant i+3
5115 gs13=scalar2(gtb1(1,i+1),auxvec(1))
5116 c derivative of theta i+2 with constant i+1
5117 gs21=scalar2(b1(1,i+1),auxgvec(1))
5118 c derivative of theta i+3 with constant i+1
5119 gsE31=scalar2(b1(1,i+1),auxgEvec3(1))
5120 c write(iout,*) gs1,gs2,'i=',i,auxgvec(1),gUb2(1,i+2),gtb1(1,i+2),
5122 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
5123 c two derivatives over diffetent matrices
5124 c gtae3e2 is derivative over i+3
5125 call matmat2(gtae3(1,1),e2t(1,1),gtae3e2(1,1))
5126 c ae3gte2 is derivative over i+2
5127 call matmat2(ae3(1,1),gte2t(1,1),ae3gte2(1,1))
5128 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
5129 c three possible derivative over theta E matices
5131 call matmat2(ae3e2(1,1),gte1t(1,1),gtEpizda1(1,1))
5133 call matmat2(ae3gte2(1,1),e1t(1,1),gtEpizda2(1,1))
5135 call matmat2(gtae3e2(1,1),e1t(1,1),gtEpizda3(1,1))
5136 s3=0.5d0*(pizda(1,1)+pizda(2,2))
5138 gsEE1=0.5d0*(gtEpizda1(1,1)+gtEpizda1(2,2))
5139 gsEE2=0.5d0*(gtEpizda2(1,1)+gtEpizda2(2,2))
5140 gsEE3=0.5d0*(gtEpizda3(1,1)+gtEpizda3(2,2))
5141 if (shield_mode.eq.0) then
5148 eello_turn4=eello_turn4-(s1+s2+s3)
5149 & *fac_shield(i)*fac_shield(j)
5150 eello_t4=-(s1+s2+s3)
5151 & *fac_shield(i)*fac_shield(j)
5152 c write(iout,*)'chujOWO', auxvec(1),b1(1,iti2)
5153 if (energy_dec) write (iout,'(a6,2i5,0pf7.3,3f7.3)')
5154 & 'eturn4',i,j,-(s1+s2+s3),s1,s2,s3
5155 C Now derivative over shield:
5156 if ((fac_shield(i).gt.0).and.(fac_shield(j).gt.0).and.
5157 & (shield_mode.gt.0)) then
5160 do ilist=1,ishield_list(i)
5161 iresshield=shield_list(ilist,i)
5163 rlocshield=grad_shield_side(k,ilist,i)*eello_t4/fac_shield(i)
5165 gshieldx_t4(k,iresshield)=gshieldx_t4(k,iresshield)+
5167 & +grad_shield_loc(k,ilist,i)*eello_t4/fac_shield(i)
5168 gshieldc_t4(k,iresshield-1)=gshieldc_t4(k,iresshield-1)
5172 do ilist=1,ishield_list(j)
5173 iresshield=shield_list(ilist,j)
5175 rlocshield=grad_shield_side(k,ilist,j)*eello_t4/fac_shield(j)
5177 gshieldx_t4(k,iresshield)=gshieldx_t4(k,iresshield)+
5179 & +grad_shield_loc(k,ilist,j)*eello_t4/fac_shield(j)
5180 gshieldc_t4(k,iresshield-1)=gshieldc_t4(k,iresshield-1)
5187 gshieldc_t4(k,i)=gshieldc_t4(k,i)+
5188 & grad_shield(k,i)*eello_t4/fac_shield(i)
5189 gshieldc_t4(k,j)=gshieldc_t4(k,j)+
5190 & grad_shield(k,j)*eello_t4/fac_shield(j)
5191 gshieldc_t4(k,i-1)=gshieldc_t4(k,i-1)+
5192 & grad_shield(k,i)*eello_t4/fac_shield(i)
5193 gshieldc_t4(k,j-1)=gshieldc_t4(k,j-1)+
5194 & grad_shield(k,j)*eello_t4/fac_shield(j)
5197 cd write (2,*) 'i,',i,' j',j,'eello_turn4',-(s1+s2+s3),
5198 cd & ' eello_turn4_num',8*eello_turn4_num
5200 gloc(nphi+i,icg)=gloc(nphi+i,icg)
5201 & -(gs13+gsE13+gsEE1)*wturn4
5202 & *fac_shield(i)*fac_shield(j)
5203 gloc_compon(9,nphi+i)=gloc_compon(9,nphi+i)
5204 & -(gs13+gsE13+gsEE1)*fac_shield(i)*fac_shield(j)
5205 gloc(nphi+i+1,icg)= gloc(nphi+i+1,icg)
5206 & -(gs23+gs21+gsEE2)*wturn4
5207 & *fac_shield(i)*fac_shield(j)
5209 gloc_compon(9,nphi+i+1)=gloc_compon(9,nphi+i+1)
5210 & -(gs23+gs21+gsEE2)*fac_shield(i)*fac_shield(j)
5211 gloc(nphi+i+2,icg)= gloc(nphi+i+2,icg)
5212 & -(gs32+gsE31+gsEE3)*wturn4
5213 & *fac_shield(i)*fac_shield(j)
5214 gloc_compon(9,nphi+i+2)=gloc_compon(9,nphi+i+2)
5215 & -(gs32+gsE31+gsEE3)*fac_shield(i)*fac_shield(j)
5217 c gloc(nphi+i+1,icg)=gloc(nphi+i+1,icg)-
5220 if (energy_dec) write (iout,'(a6,2i5,0pf7.3)')
5221 & 'eturn4',i,j,-(s1+s2+s3)
5222 c write (iout,*) 'i,',i,' j',j,'eello_turn4',-(s1+s2+s3),
5223 c & ' eello_turn4_num',8*eello_turn4_num
5224 C Derivatives in gamma(i)
5225 call transpose2(EUgder(1,1,i+1),e1tder(1,1))
5226 call matmat2(e1tder(1,1),a_temp(1,1),auxmat(1,1))
5227 call matvec2(auxmat(1,1),Ub2(1,i+3),auxvec(1))
5228 s1=scalar2(b1(1,i+2),auxvec(1))
5229 call matmat2(ae3e2(1,1),e1tder(1,1),pizda(1,1))
5230 s3=0.5d0*(pizda(1,1)+pizda(2,2))
5231 gel_loc_turn4(i)=gel_loc_turn4(i)-(s1+s3)
5232 & *fac_shield(i)*fac_shield(j)
5233 C Derivatives in gamma(i+1)
5234 call transpose2(EUgder(1,1,i+2),e2tder(1,1))
5235 call matvec2(ae3(1,1),Ub2der(1,i+2),auxvec(1))
5236 s2=scalar2(b1(1,i+1),auxvec(1))
5237 call matmat2(ae3(1,1),e2tder(1,1),auxmat(1,1))
5238 call matmat2(auxmat(1,1),e1t(1,1),pizda(1,1))
5239 s3=0.5d0*(pizda(1,1)+pizda(2,2))
5240 gel_loc_turn4(i+1)=gel_loc_turn4(i+1)-(s2+s3)
5241 & *fac_shield(i)*fac_shield(j)
5242 C Derivatives in gamma(i+2)
5243 call transpose2(EUgder(1,1,i+3),e3tder(1,1))
5244 call matvec2(e1a(1,1),Ub2der(1,i+3),auxvec(1))
5245 s1=scalar2(b1(1,i+2),auxvec(1))
5246 call matmat2(a_temp(1,1),e3tder(1,1),auxmat(1,1))
5247 call matvec2(auxmat(1,1),Ub2(1,i+2),auxvec(1))
5248 s2=scalar2(b1(1,i+1),auxvec(1))
5249 call matmat2(auxmat(1,1),e2t(1,1),auxmat3(1,1))
5250 call matmat2(auxmat3(1,1),e1t(1,1),pizda(1,1))
5251 s3=0.5d0*(pizda(1,1)+pizda(2,2))
5252 gel_loc_turn4(i+2)=gel_loc_turn4(i+2)-(s1+s2+s3)
5253 & *fac_shield(i)*fac_shield(j)
5255 C Cartesian derivatives
5256 C Derivatives of this turn contributions in DC(i+2)
5257 if (j.lt.nres-1) then
5259 a_temp(1,1)=agg(l,1)
5260 a_temp(1,2)=agg(l,2)
5261 a_temp(2,1)=agg(l,3)
5262 a_temp(2,2)=agg(l,4)
5263 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
5264 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
5265 s1=scalar2(b1(1,i+2),auxvec(1))
5266 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
5267 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
5268 s2=scalar2(b1(1,i+1),auxvec(1))
5269 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
5270 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
5271 s3=0.5d0*(pizda(1,1)+pizda(2,2))
5273 gcorr4_turn(l,i+2)=gcorr4_turn(l,i+2)-(s1+s2+s3)
5274 & *fac_shield(i)*fac_shield(j)
5277 C Remaining derivatives of this turn contribution
5279 a_temp(1,1)=aggi(l,1)
5280 a_temp(1,2)=aggi(l,2)
5281 a_temp(2,1)=aggi(l,3)
5282 a_temp(2,2)=aggi(l,4)
5283 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
5284 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
5285 s1=scalar2(b1(1,i+2),auxvec(1))
5286 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
5287 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
5288 s2=scalar2(b1(1,i+1),auxvec(1))
5289 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
5290 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
5291 s3=0.5d0*(pizda(1,1)+pizda(2,2))
5292 gcorr4_turn(l,i)=gcorr4_turn(l,i)-(s1+s2+s3)
5293 & *fac_shield(i)*fac_shield(j)
5294 a_temp(1,1)=aggi1(l,1)
5295 a_temp(1,2)=aggi1(l,2)
5296 a_temp(2,1)=aggi1(l,3)
5297 a_temp(2,2)=aggi1(l,4)
5298 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
5299 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
5300 s1=scalar2(b1(1,i+2),auxvec(1))
5301 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
5302 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
5303 s2=scalar2(b1(1,i+1),auxvec(1))
5304 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
5305 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
5306 s3=0.5d0*(pizda(1,1)+pizda(2,2))
5307 gcorr4_turn(l,i+1)=gcorr4_turn(l,i+1)-(s1+s2+s3)
5308 & *fac_shield(i)*fac_shield(j)
5309 a_temp(1,1)=aggj(l,1)
5310 a_temp(1,2)=aggj(l,2)
5311 a_temp(2,1)=aggj(l,3)
5312 a_temp(2,2)=aggj(l,4)
5313 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
5314 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
5315 s1=scalar2(b1(1,i+2),auxvec(1))
5316 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
5317 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
5318 s2=scalar2(b1(1,i+1),auxvec(1))
5319 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
5320 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
5321 s3=0.5d0*(pizda(1,1)+pizda(2,2))
5322 gcorr4_turn(l,j)=gcorr4_turn(l,j)-(s1+s2+s3)
5323 & *fac_shield(i)*fac_shield(j)
5324 a_temp(1,1)=aggj1(l,1)
5325 a_temp(1,2)=aggj1(l,2)
5326 a_temp(2,1)=aggj1(l,3)
5327 a_temp(2,2)=aggj1(l,4)
5328 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
5329 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
5330 s1=scalar2(b1(1,i+2),auxvec(1))
5331 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
5332 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
5333 s2=scalar2(b1(1,i+1),auxvec(1))
5334 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
5335 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
5336 s3=0.5d0*(pizda(1,1)+pizda(2,2))
5337 c write (iout,*) "s1",s1," s2",s2," s3",s3," s1+s2+s3",s1+s2+s3
5338 gcorr4_turn(l,j1)=gcorr4_turn(l,j1)-(s1+s2+s3)
5339 & *fac_shield(i)*fac_shield(j)
5346 C-----------------------------------------------------------------------------
5347 subroutine vecpr(u,v,w)
5348 implicit real*8(a-h,o-z)
5349 dimension u(3),v(3),w(3)
5350 w(1)=u(2)*v(3)-u(3)*v(2)
5351 w(2)=-u(1)*v(3)+u(3)*v(1)
5352 w(3)=u(1)*v(2)-u(2)*v(1)
5355 C-----------------------------------------------------------------------------
5356 subroutine unormderiv(u,ugrad,unorm,ungrad)
5357 C This subroutine computes the derivatives of a normalized vector u, given
5358 C the derivatives computed without normalization conditions, ugrad. Returns
5361 double precision u(3),ugrad(3,3),unorm,ungrad(3,3)
5362 double precision vec(3)
5363 double precision scalar
5365 c write (2,*) 'ugrad',ugrad
5368 vec(i)=scalar(ugrad(1,i),u(1))
5370 c write (2,*) 'vec',vec
5373 ungrad(j,i)=(ugrad(j,i)-u(j)*vec(i))*unorm
5376 c write (2,*) 'ungrad',ungrad
5379 C-----------------------------------------------------------------------------
5380 subroutine escp(evdw2,evdw2_14)
5382 C This subroutine calculates the excluded-volume interaction energy between
5383 C peptide-group centers and side chains and its gradient in virtual-bond and
5384 C side-chain vectors.
5386 implicit real*8 (a-h,o-z)
5387 include 'DIMENSIONS'
5388 include 'DIMENSIONS.ZSCOPT'
5389 include 'COMMON.GEO'
5390 include 'COMMON.VAR'
5391 include 'COMMON.LOCAL'
5392 include 'COMMON.CHAIN'
5393 include 'COMMON.DERIV'
5394 include 'COMMON.INTERACT'
5395 include 'COMMON.FFIELD'
5396 include 'COMMON.IOUNITS'
5400 cd print '(a)','Enter ESCP'
5401 c write (iout,*) 'iatscp_s=',iatscp_s,' iatscp_e=',iatscp_e,
5402 c & ' scal14',scal14
5403 do i=iatscp_s,iatscp_e
5404 if (itype(i).eq.ntyp1 .or. itype(i+1).eq.ntyp1) cycle
5406 c write (iout,*) "i",i," iteli",iteli," nscp_gr",nscp_gr(i),
5407 c & " iscp",(iscpstart(i,j),iscpend(i,j),j=1,nscp_gr(i))
5408 if (iteli.eq.0) goto 1225
5409 xi=0.5D0*(c(1,i)+c(1,i+1))
5410 yi=0.5D0*(c(2,i)+c(2,i+1))
5411 zi=0.5D0*(c(3,i)+c(3,i+1))
5412 C Returning the ith atom to box
5414 if (xi.lt.0) xi=xi+boxxsize
5416 if (yi.lt.0) yi=yi+boxysize
5418 if (zi.lt.0) zi=zi+boxzsize
5419 do iint=1,nscp_gr(i)
5421 do j=iscpstart(i,iint),iscpend(i,iint)
5422 itypj=iabs(itype(j))
5423 if (itypj.eq.ntyp1) cycle
5424 C Uncomment following three lines for SC-p interactions
5428 C Uncomment following three lines for Ca-p interactions
5432 C returning the jth atom to box
5434 if (xj.lt.0) xj=xj+boxxsize
5436 if (yj.lt.0) yj=yj+boxysize
5438 if (zj.lt.0) zj=zj+boxzsize
5439 dist_init=(xj-xi)**2+(yj-yi)**2+(zj-zi)**2
5444 C Finding the closest jth atom
5448 xj=xj_safe+xshift*boxxsize
5449 yj=yj_safe+yshift*boxysize
5450 zj=zj_safe+zshift*boxzsize
5451 dist_temp=(xj-xi)**2+(yj-yi)**2+(zj-zi)**2
5452 if(dist_temp.lt.dist_init) then
5462 if (subchap.eq.1) then
5471 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
5472 C sss is scaling function for smoothing the cutoff gradient otherwise
5473 C the gradient would not be continuouse
5474 sss=sscale(1.0d0/(dsqrt(rrij)))
5475 if (sss.le.0.0d0) cycle
5476 sssgrad=sscagrad(1.0d0/(dsqrt(rrij)))
5478 e1=fac*fac*aad(itypj,iteli)
5479 e2=fac*bad(itypj,iteli)
5480 if (iabs(j-i) .le. 2) then
5483 evdw2_14=evdw2_14+(e1+e2)*sss
5486 c write (iout,'(a6,2i5,0pf7.3,2i3,3e11.3)')
5487 c & 'evdw2',i,j,evdwij,iteli,itypj,fac,aad(itypj,iteli),
5488 c & bad(itypj,iteli)
5489 evdw2=evdw2+evdwij*sss
5492 C Calculate contributions to the gradient in the virtual-bond and SC vectors.
5494 fac=-(evdwij+e1)*rrij*sss
5495 fac=fac+(evdwij)*sssgrad*dsqrt(rrij)/expon
5500 cd write (iout,*) 'j<i'
5501 C Uncomment following three lines for SC-p interactions
5503 c gradx_scp(k,j)=gradx_scp(k,j)+ggg(k)
5506 cd write (iout,*) 'j>i'
5509 C Uncomment following line for SC-p interactions
5510 c gradx_scp(k,j)=gradx_scp(k,j)-ggg(k)
5514 gvdwc_scpp(k,i)=gvdwc_scpp(k,i)-ggg(k)
5515 gvdwc_scp(k,j)=gvdwc_scp(k,j)+ggg(k)
5519 cd write (iout,*) 'i=',i,' j=',j,' kstart=',kstart,' kend=',kend
5520 cd write (iout,*) ggg(1),ggg(2),ggg(3)
5523 c gvdwc_scp(l,k)=gvdwc_scp(l,k)-ggg(l)
5533 gvdwc_scp(j,i)=expon*gvdwc_scp(j,i)
5534 gvdwc_scpp(j,i)=expon*gvdwc_scpp(j,i)
5535 gradx_scp(j,i)=expon*gradx_scp(j,i)
5538 C******************************************************************************
5542 C To save time the factor EXPON has been extracted from ALL components
5543 C of GVDWC and GRADX. Remember to multiply them by this factor before further
5546 C******************************************************************************
5547 c write (iout,*) "gvdwc_scp"
5549 c write (iout,'(i5,3f10.5,5x,3f10.5)') i,(gvdwc_scp(j,i),j=1,3),
5550 c & (gvdwc_scpp(j,i),j=1,3)
5554 C--------------------------------------------------------------------------
5555 subroutine edis(ehpb)
5557 C Evaluate bridge-strain energy and its gradient in virtual-bond and SC vectors.
5559 implicit real*8 (a-h,o-z)
5560 include 'DIMENSIONS'
5561 include 'DIMENSIONS.ZSCOPT'
5562 include 'COMMON.SBRIDGE'
5563 include 'COMMON.CHAIN'
5564 include 'COMMON.DERIV'
5565 include 'COMMON.VAR'
5566 include 'COMMON.INTERACT'
5567 include 'COMMON.CONTROL'
5568 include 'COMMON.IOUNITS'
5571 cd print *,'edis: nhpb=',nhpb,' fbr=',fbr
5572 cd print *,'link_start=',link_start,' link_end=',link_end
5573 C write(iout,*) link_end, "link_end"
5574 if (link_end.eq.0) return
5575 do i=link_start,link_end
5576 C If ihpb(i) and jhpb(i) > NRES, this is a SC-SC distance, otherwise a
5577 C CA-CA distance used in regularization of structure.
5580 C iii and jjj point to the residues for which the distance is assigned.
5581 if (ii.gt.nres) then
5588 C 24/11/03 AL: SS bridges handled separately because of introducing a specific
5589 C distance and angle dependent SS bond potential.
5590 C if (ii.gt.nres .and. iabs(itype(iii)).eq.1 .and.
5591 C & iabs(itype(jjj)).eq.1) then
5592 C write(iout,*) constr_dist,"const"
5593 if (.not.dyn_ss .and. i.le.nss) then
5594 if (ii.gt.nres .and. iabs(itype(iii)).eq.1 .and.
5595 & iabs(itype(jjj)).eq.1) then
5596 call ssbond_ene(iii,jjj,eij)
5599 else if (ii.gt.nres .and. jj.gt.nres) then
5600 c Restraints from contact prediction
5602 if (constr_dist.eq.11) then
5603 C ehpb=ehpb+fordepth(i)**4.0d0
5604 C & *rlornmr1(dd,dhpb(i),dhpb1(i),forcon(i))
5605 ehpb=ehpb+fordepth(i)**4.0d0
5606 & *rlornmr1(dd,dhpb(i),dhpb1(i),forcon(i))
5607 fac=fordepth(i)**4.0d0
5608 & *rlornmr1prim(dd,dhpb(i),dhpb1(i),forcon(i))/dd
5609 C write (iout,'(a6,2i5,3f8.3)') "edisl",ii,jj,
5610 C & ehpb,fordepth(i),dd
5611 C write(iout,*) ehpb,"atu?"
5613 C fac=fordepth(i)**4.0d0
5614 C & *rlornmr1prim(dd,dhpb(i),dhpb1(i),forcon(i))/dd
5616 if (dhpb1(i).gt.0.0d0) then
5617 ehpb=ehpb+2*forcon(i)*gnmr1(dd,dhpb(i),dhpb1(i))
5618 fac=forcon(i)*gnmr1prim(dd,dhpb(i),dhpb1(i))/dd
5619 c write (iout,*) "beta nmr",
5620 c & dd,2*forcon(i)*gnmr1(dd,dhpb(i),dhpb1(i))
5624 C Get the force constant corresponding to this distance.
5626 C Calculate the contribution to energy.
5627 ehpb=ehpb+waga*rdis*rdis
5628 c write (iout,*) "beta reg",dd,waga*rdis*rdis
5630 C Evaluate gradient.
5633 endif !end dhpb1(i).gt.0
5634 endif !end const_dist=11
5636 ggg(j)=fac*(c(j,jj)-c(j,ii))
5639 ghpbx(j,iii)=ghpbx(j,iii)-ggg(j)
5640 ghpbx(j,jjj)=ghpbx(j,jjj)+ggg(j)
5643 ghpbc(k,jjj)=ghpbc(k,jjj)+ggg(k)
5644 ghpbc(k,iii)=ghpbc(k,iii)-ggg(k)
5647 C write(iout,*) "before"
5649 C write(iout,*) "after",dd
5650 if (constr_dist.eq.11) then
5651 ehpb=ehpb+fordepth(i)**4.0d0
5652 & *rlornmr1(dd,dhpb(i),dhpb1(i),forcon(i))
5653 fac=fordepth(i)**4.0d0
5654 & *rlornmr1prim(dd,dhpb(i),dhpb1(i),forcon(i))/dd
5655 C ehpb=ehpb+fordepth(i)**4*rlornmr1(dd,dhpb(i),dhpb1(i))
5656 C fac=fordepth(i)**4*rlornmr1prim(dd,dhpb(i),dhpb1(i))/dd
5657 C print *,ehpb,"tu?"
5658 C write(iout,*) ehpb,"btu?",
5659 C & dd,dhpb(i),dhpb1(i),fordepth(i),forcon(i)
5660 C write (iout,'(a6,2i5,3f8.3)') "edisl",ii,jj,
5661 C & ehpb,fordepth(i),dd
5663 if (dhpb1(i).gt.0.0d0) then
5664 ehpb=ehpb+2*forcon(i)*gnmr1(dd,dhpb(i),dhpb1(i))
5665 fac=forcon(i)*gnmr1prim(dd,dhpb(i),dhpb1(i))/dd
5666 c write (iout,*) "alph nmr",
5667 c & dd,2*forcon(i)*gnmr1(dd,dhpb(i),dhpb1(i))
5670 C Get the force constant corresponding to this distance.
5672 C Calculate the contribution to energy.
5673 ehpb=ehpb+waga*rdis*rdis
5674 c write (iout,*) "alpha reg",dd,waga*rdis*rdis
5676 C Evaluate gradient.
5683 ggg(j)=fac*(c(j,jj)-c(j,ii))
5685 cd print '(i3,3(1pe14.5))',i,(ggg(j),j=1,3)
5686 C If this is a SC-SC distance, we need to calculate the contributions to the
5687 C Cartesian gradient in the SC vectors (ghpbx).
5690 ghpbx(j,iii)=ghpbx(j,iii)-ggg(j)
5691 ghpbx(j,jjj)=ghpbx(j,jjj)+ggg(j)
5696 ghpbc(k,j)=ghpbc(k,j)+ggg(k)
5701 if (constr_dist.ne.11) ehpb=0.5D0*ehpb
5704 C--------------------------------------------------------------------------
5705 subroutine ssbond_ene(i,j,eij)
5707 C Calculate the distance and angle dependent SS-bond potential energy
5708 C using a free-energy function derived based on RHF/6-31G** ab initio
5709 C calculations of diethyl disulfide.
5711 C A. Liwo and U. Kozlowska, 11/24/03
5713 implicit real*8 (a-h,o-z)
5714 include 'DIMENSIONS'
5715 include 'DIMENSIONS.ZSCOPT'
5716 include 'COMMON.SBRIDGE'
5717 include 'COMMON.CHAIN'
5718 include 'COMMON.DERIV'
5719 include 'COMMON.LOCAL'
5720 include 'COMMON.INTERACT'
5721 include 'COMMON.VAR'
5722 include 'COMMON.IOUNITS'
5723 double precision erij(3),dcosom1(3),dcosom2(3),gg(3)
5724 itypi=iabs(itype(i))
5728 dxi=dc_norm(1,nres+i)
5729 dyi=dc_norm(2,nres+i)
5730 dzi=dc_norm(3,nres+i)
5731 dsci_inv=dsc_inv(itypi)
5732 itypj=iabs(itype(j))
5733 dscj_inv=dsc_inv(itypj)
5737 dxj=dc_norm(1,nres+j)
5738 dyj=dc_norm(2,nres+j)
5739 dzj=dc_norm(3,nres+j)
5740 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
5745 om1=dxi*erij(1)+dyi*erij(2)+dzi*erij(3)
5746 om2=dxj*erij(1)+dyj*erij(2)+dzj*erij(3)
5747 om12=dxi*dxj+dyi*dyj+dzi*dzj
5749 dcosom1(k)=rij*(dc_norm(k,nres+i)-om1*erij(k))
5750 dcosom2(k)=rij*(dc_norm(k,nres+j)-om2*erij(k))
5756 deltat12=om2-om1+2.0d0
5758 eij=akcm*deltad*deltad+akth*(deltat1*deltat1+deltat2*deltat2)
5759 & +akct*deltad*deltat12
5760 & +v1ss*cosphi+v2ss*cosphi*cosphi+v3ss*cosphi*cosphi*cosphi
5761 c write(iout,*) i,j,"rij",rij,"d0cm",d0cm," akcm",akcm," akth",akth,
5762 c & " akct",akct," deltad",deltad," deltat",deltat1,deltat2,
5763 c & " deltat12",deltat12," eij",eij
5764 ed=2*akcm*deltad+akct*deltat12
5766 pom2=v1ss+2*v2ss*cosphi+3*v3ss*cosphi*cosphi
5767 eom1=-2*akth*deltat1-pom1-om2*pom2
5768 eom2= 2*akth*deltat2+pom1-om1*pom2
5771 gg(k)=ed*erij(k)+eom1*dcosom1(k)+eom2*dcosom2(k)
5774 ghpbx(k,i)=ghpbx(k,i)-gg(k)
5775 & +(eom12*dc_norm(k,nres+j)+eom1*erij(k))*dsci_inv
5776 ghpbx(k,j)=ghpbx(k,j)+gg(k)
5777 & +(eom12*dc_norm(k,nres+i)+eom2*erij(k))*dscj_inv
5780 C Calculate the components of the gradient in DC and X
5784 ghpbc(l,k)=ghpbc(l,k)+gg(l)
5789 C--------------------------------------------------------------------------
5790 subroutine ebond(estr)
5792 c Evaluate the energy of stretching of the CA-CA and CA-SC virtual bonds
5794 implicit real*8 (a-h,o-z)
5795 include 'DIMENSIONS'
5796 include 'DIMENSIONS.ZSCOPT'
5797 include 'COMMON.LOCAL'
5798 include 'COMMON.GEO'
5799 include 'COMMON.INTERACT'
5800 include 'COMMON.DERIV'
5801 include 'COMMON.VAR'
5802 include 'COMMON.CHAIN'
5803 include 'COMMON.IOUNITS'
5804 include 'COMMON.NAMES'
5805 include 'COMMON.FFIELD'
5806 include 'COMMON.CONTROL'
5807 double precision u(3),ud(3)
5810 c write (iout,*) "distchainmax",distchainmax
5812 if (itype(i-1).eq.ntyp1 .and. itype(i).eq.ntyp1) cycle
5813 C estr1=estr1+gnmr1(vbld(i),-1.0d0,distchainmax)
5815 C gradb(j,i-1)=gnmr1prim(vbld(i),-1.0d0,distchainmax)
5816 C & *dc(j,i-1)/vbld(i)
5818 C if (energy_dec) write(iout,*)
5819 C & "estr1",i,vbld(i),distchainmax,
5820 C & gnmr1(vbld(i),-1.0d0,distchainmax)
5822 if (itype(i-1).eq.ntyp1 .or. itype(i).eq.ntyp1) then
5823 diff = vbld(i)-vbldpDUM
5824 C write(iout,*) i,diff
5826 diff = vbld(i)-vbldp0
5827 c write (iout,*) i,vbld(i),vbldp0,diff,AKP*diff*diff
5831 gradb(j,i-1)=AKP*diff*dc(j,i-1)/vbld(i)
5834 C write (iout,'(a7,i5,4f7.3)')
5835 C & "estr bb",i,vbld(i),vbldp0,diff,AKP*diff*diff
5837 estr=0.5d0*AKP*estr+estr1
5839 c 09/18/07 AL: multimodal bond potential based on AM1 CA-SC PMF's included
5843 if (iti.ne.10 .and. iti.ne.ntyp1) then
5846 diff=vbld(i+nres)-vbldsc0(1,iti)
5847 C write (iout,*) i,iti,vbld(i+nres),vbldsc0(1,iti),diff,
5848 C & AKSC(1,iti),AKSC(1,iti)*diff*diff
5849 estr=estr+0.5d0*AKSC(1,iti)*diff*diff
5851 gradbx(j,i)=AKSC(1,iti)*diff*dc(j,i+nres)/vbld(i+nres)
5855 diff=vbld(i+nres)-vbldsc0(j,iti)
5856 ud(j)=aksc(j,iti)*diff
5857 u(j)=abond0(j,iti)+0.5d0*ud(j)*diff
5871 uprod2=uprod2*u(k)*u(k)
5875 usumsqder=usumsqder+ud(j)*uprod2
5877 c write (iout,*) i,iti,vbld(i+nres),(vbldsc0(j,iti),
5878 c & AKSC(j,iti),abond0(j,iti),u(j),j=1,nbi)
5879 estr=estr+uprod/usum
5881 gradbx(j,i)=usumsqder/(usum*usum)*dc(j,i+nres)/vbld(i+nres)
5889 C--------------------------------------------------------------------------
5890 subroutine ebend(etheta,ethetacnstr)
5892 C Evaluate the virtual-bond-angle energy given the virtual-bond dihedral
5893 C angles gamma and its derivatives in consecutive thetas and gammas.
5895 implicit real*8 (a-h,o-z)
5896 include 'DIMENSIONS'
5897 include 'DIMENSIONS.ZSCOPT'
5898 include 'COMMON.LOCAL'
5899 include 'COMMON.GEO'
5900 include 'COMMON.INTERACT'
5901 include 'COMMON.DERIV'
5902 include 'COMMON.VAR'
5903 include 'COMMON.CHAIN'
5904 include 'COMMON.IOUNITS'
5905 include 'COMMON.NAMES'
5906 include 'COMMON.FFIELD'
5907 include 'COMMON.TORCNSTR'
5908 common /calcthet/ term1,term2,termm,diffak,ratak,
5909 & ak,aktc,termpre,termexp,sigc,sig0i,time11,time12,sigcsq,
5910 & delthe0,sig0inv,sigtc,sigsqtc,delthec,it
5911 double precision y(2),z(2)
5913 c time11=dexp(-2*time)
5916 c write (iout,*) "nres",nres
5917 c write (*,'(a,i2)') 'EBEND ICG=',icg
5918 c write (iout,*) ithet_start,ithet_end
5919 do i=ithet_start,ithet_end
5920 C if (itype(i-1).eq.ntyp1) cycle
5922 if ((itype(i-1).eq.ntyp1).or.itype(i-2).eq.ntyp1
5923 & .or.itype(i).eq.ntyp1) cycle
5924 C Zero the energy function and its derivative at 0 or pi.
5925 call splinthet(theta(i),0.5d0*delta,ss,ssd)
5927 ichir1=isign(1,itype(i-2))
5928 ichir2=isign(1,itype(i))
5929 if (itype(i-2).eq.10) ichir1=isign(1,itype(i-1))
5930 if (itype(i).eq.10) ichir2=isign(1,itype(i-1))
5931 if (itype(i-1).eq.10) then
5932 itype1=isign(10,itype(i-2))
5933 ichir11=isign(1,itype(i-2))
5934 ichir12=isign(1,itype(i-2))
5935 itype2=isign(10,itype(i))
5936 ichir21=isign(1,itype(i))
5937 ichir22=isign(1,itype(i))
5944 if (i.gt.3 .and. itype(i-3).ne.ntyp1) then
5948 c call proc_proc(phii,icrc)
5949 if (icrc.eq.1) phii=150.0
5960 if (i.lt.nres .and. itype(i+1).ne.ntyp1) then
5964 c call proc_proc(phii1,icrc)
5965 if (icrc.eq.1) phii1=150.0
5977 C Calculate the "mean" value of theta from the part of the distribution
5978 C dependent on the adjacent virtual-bond-valence angles (gamma1 & gamma2).
5979 C In following comments this theta will be referred to as t_c.
5980 thet_pred_mean=0.0d0
5982 athetk=athet(k,it,ichir1,ichir2)
5983 bthetk=bthet(k,it,ichir1,ichir2)
5985 athetk=athet(k,itype1,ichir11,ichir12)
5986 bthetk=bthet(k,itype2,ichir21,ichir22)
5988 thet_pred_mean=thet_pred_mean+athetk*y(k)+bthetk*z(k)
5990 c write (iout,*) "thet_pred_mean",thet_pred_mean
5991 dthett=thet_pred_mean*ssd
5992 thet_pred_mean=thet_pred_mean*ss+a0thet(it)
5993 c write (iout,*) "thet_pred_mean",thet_pred_mean
5994 C Derivatives of the "mean" values in gamma1 and gamma2.
5995 dthetg1=(-athet(1,it,ichir1,ichir2)*y(2)
5996 &+athet(2,it,ichir1,ichir2)*y(1))*ss
5997 dthetg2=(-bthet(1,it,ichir1,ichir2)*z(2)
5998 & +bthet(2,it,ichir1,ichir2)*z(1))*ss
6000 dthetg1=(-athet(1,itype1,ichir11,ichir12)*y(2)
6001 &+athet(2,itype1,ichir11,ichir12)*y(1))*ss
6002 dthetg2=(-bthet(1,itype2,ichir21,ichir22)*z(2)
6003 & +bthet(2,itype2,ichir21,ichir22)*z(1))*ss
6005 if (theta(i).gt.pi-delta) then
6006 call theteng(pi-delta,thet_pred_mean,theta0(it),f0,fprim0,
6008 call mixder(pi-delta,thet_pred_mean,theta0(it),fprim_tc0)
6009 call theteng(pi,thet_pred_mean,theta0(it),f1,fprim1,E_tc1)
6010 call spline1(theta(i),pi-delta,delta,f0,f1,fprim0,ethetai,
6012 call spline2(theta(i),pi-delta,delta,E_tc0,E_tc1,fprim_tc0,
6014 else if (theta(i).lt.delta) then
6015 call theteng(delta,thet_pred_mean,theta0(it),f0,fprim0,E_tc0)
6016 call theteng(0.0d0,thet_pred_mean,theta0(it),f1,fprim1,E_tc1)
6017 call spline1(theta(i),delta,-delta,f0,f1,fprim0,ethetai,
6019 call mixder(delta,thet_pred_mean,theta0(it),fprim_tc0)
6020 call spline2(theta(i),delta,-delta,E_tc0,E_tc1,fprim_tc0,
6023 call theteng(theta(i),thet_pred_mean,theta0(it),ethetai,
6026 etheta=etheta+ethetai
6027 c write (iout,'(a6,i5,0pf7.3,f7.3,i5)')
6028 c & 'ebend',i,ethetai,theta(i),itype(i)
6029 c write (iout,'(2i3,3f8.3,f10.5)') i,it,rad2deg*theta(i),
6030 c & rad2deg*phii,rad2deg*phii1,ethetai
6032 gloc(i-3,icg)=gloc(i-3,icg)+wang*E_tc*dthetg1
6033 gloc_compon(11,i-3)=gloc_compon(11,i-3)+E_tc*dthetg1
6036 gloc(i-2,icg)=gloc(i-2,icg)+wang*E_tc*dthetg2
6037 gloc_compon(11,i-2)=gloc_compon(11,i-2)+E_tc*dthetg2
6039 gloc(nphi+i-2,icg)=wang*(E_theta+E_tc*dthett)
6040 gloc_compon(11,nphi+i-2)=gloc_compon(11,nphi+i-2)
6041 & +E_theta+E_tc*dthett
6045 C print *,ithetaconstr_start,ithetaconstr_end,"TU"
6046 do i=1,ntheta_constr
6047 itheta=itheta_constr(i)
6048 thetiii=theta(itheta)
6049 difi=pinorm(thetiii-theta_constr0(i))
6050 if (difi.gt.theta_drange(i)) then
6051 difi=difi-theta_drange(i)
6052 ethetacnstr=ethetacnstr+0.25d0*for_thet_constr(i)*difi**4
6053 gloc(itheta+nphi-2,icg)=gloc(itheta+nphi-2,icg)
6054 & +for_thet_constr(i)*difi**3
6055 gloc_compon(11,itheta+nphi-2)=gloc_compon(11,itheta+nphi-2)
6056 & +for_thet_constr(i)*difi**3
6057 else if (difi.lt.-drange(i)) then
6059 ethetacnstr=ethetacnstr+0.25d0*for_thet_constr(i)*difi**4
6060 gloc(itheta+nphi-2,icg)=gloc(itheta+nphi-2,icg)
6061 & +for_thet_constr(i)*difi**3
6062 gloc_compon(11,itheta+nphi-2)=gloc_compon(11,itheta+nphi-2)
6063 & +for_thet_constr(i)*difi**3
6067 C if (energy_dec) then
6068 C write (iout,'(a6,2i5,4f8.3,2e14.5)') "ethetc",
6069 C & i,itheta,rad2deg*thetiii,
6070 C & rad2deg*theta_constr0(i), rad2deg*theta_drange(i),
6071 C & rad2deg*difi,0.25d0*for_thet_constr(i)*difi**4,
6072 C & gloc(itheta+nphi-2,icg)
6075 C Ufff.... We've done all this!!!
6078 C---------------------------------------------------------------------------
6079 subroutine theteng(thetai,thet_pred_mean,theta0i,ethetai,E_theta,
6081 implicit real*8 (a-h,o-z)
6082 include 'DIMENSIONS'
6083 include 'COMMON.LOCAL'
6084 include 'COMMON.IOUNITS'
6085 common /calcthet/ term1,term2,termm,diffak,ratak,
6086 & ak,aktc,termpre,termexp,sigc,sig0i,time11,time12,sigcsq,
6087 & delthe0,sig0inv,sigtc,sigsqtc,delthec,it
6088 C Calculate the contributions to both Gaussian lobes.
6089 C 6/6/97 - Deform the Gaussians using the factor of 1/(1+time)
6090 C The "polynomial part" of the "standard deviation" of this part of
6094 sig=sig*thet_pred_mean+polthet(j,it)
6096 C Derivative of the "interior part" of the "standard deviation of the"
6097 C gamma-dependent Gaussian lobe in t_c.
6098 sigtc=3*polthet(3,it)
6100 sigtc=sigtc*thet_pred_mean+j*polthet(j,it)
6103 C Set the parameters of both Gaussian lobes of the distribution.
6104 C "Standard deviation" of the gamma-dependent Gaussian lobe (sigtc)
6105 fac=sig*sig+sigc0(it)
6108 C Following variable (sigsqtc) is -(1/2)d[sigma(t_c)**(-2))]/dt_c
6109 sigsqtc=-4.0D0*sigcsq*sigtc
6110 c print *,i,sig,sigtc,sigsqtc
6111 C Following variable (sigtc) is d[sigma(t_c)]/dt_c
6112 sigtc=-sigtc/(fac*fac)
6113 C Following variable is sigma(t_c)**(-2)
6114 sigcsq=sigcsq*sigcsq
6116 sig0inv=1.0D0/sig0i**2
6117 delthec=thetai-thet_pred_mean
6118 delthe0=thetai-theta0i
6119 term1=-0.5D0*sigcsq*delthec*delthec
6120 term2=-0.5D0*sig0inv*delthe0*delthe0
6121 C Following fuzzy logic is to avoid underflows in dexp and subsequent INFs and
6122 C NaNs in taking the logarithm. We extract the largest exponent which is added
6123 C to the energy (this being the log of the distribution) at the end of energy
6124 C term evaluation for this virtual-bond angle.
6125 if (term1.gt.term2) then
6127 term2=dexp(term2-termm)
6131 term1=dexp(term1-termm)
6134 C The ratio between the gamma-independent and gamma-dependent lobes of
6135 C the distribution is a Gaussian function of thet_pred_mean too.
6136 diffak=gthet(2,it)-thet_pred_mean
6137 ratak=diffak/gthet(3,it)**2
6138 ak=dexp(gthet(1,it)-0.5D0*diffak*ratak)
6139 C Let's differentiate it in thet_pred_mean NOW.
6141 C Now put together the distribution terms to make complete distribution.
6142 termexp=term1+ak*term2
6143 termpre=sigc+ak*sig0i
6144 C Contribution of the bending energy from this theta is just the -log of
6145 C the sum of the contributions from the two lobes and the pre-exponential
6146 C factor. Simple enough, isn't it?
6147 ethetai=(-dlog(termexp)-termm+dlog(termpre))
6148 C NOW the derivatives!!!
6149 C 6/6/97 Take into account the deformation.
6150 E_theta=(delthec*sigcsq*term1
6151 & +ak*delthe0*sig0inv*term2)/termexp
6152 E_tc=((sigtc+aktc*sig0i)/termpre
6153 & -((delthec*sigcsq+delthec*delthec*sigsqtc)*term1+
6154 & aktc*term2)/termexp)
6157 c-----------------------------------------------------------------------------
6158 subroutine mixder(thetai,thet_pred_mean,theta0i,E_tc_t)
6159 implicit real*8 (a-h,o-z)
6160 include 'DIMENSIONS'
6161 include 'COMMON.LOCAL'
6162 include 'COMMON.IOUNITS'
6163 common /calcthet/ term1,term2,termm,diffak,ratak,
6164 & ak,aktc,termpre,termexp,sigc,sig0i,time11,time12,sigcsq,
6165 & delthe0,sig0inv,sigtc,sigsqtc,delthec,it
6166 delthec=thetai-thet_pred_mean
6167 delthe0=thetai-theta0i
6168 C "Thank you" to MAPLE (probably spared one day of hand-differentiation).
6169 t3 = thetai-thet_pred_mean
6173 t14 = t12+t6*sigsqtc
6175 t21 = thetai-theta0i
6181 E_tc_t = -((sigcsq+2.D0*t3*sigsqtc)*t9-t14*sigcsq*t3*t16*t9
6182 & -aktc*sig0inv*t27)/t32+(t14*t9+aktc*t26)/t40
6183 & *(-t12*t9-ak*sig0inv*t27)
6187 C--------------------------------------------------------------------------
6188 subroutine ebend(etheta)
6190 C Evaluate the virtual-bond-angle energy given the virtual-bond dihedral
6191 C angles gamma and its derivatives in consecutive thetas and gammas.
6192 C ab initio-derived potentials from
6193 c Kozlowska et al., J. Phys.: Condens. Matter 19 (2007) 285203
6195 implicit real*8 (a-h,o-z)
6196 include 'DIMENSIONS'
6197 include 'DIMENSIONS.ZSCOPT'
6198 include 'COMMON.LOCAL'
6199 include 'COMMON.GEO'
6200 include 'COMMON.INTERACT'
6201 include 'COMMON.DERIV'
6202 include 'COMMON.VAR'
6203 include 'COMMON.CHAIN'
6204 include 'COMMON.IOUNITS'
6205 include 'COMMON.NAMES'
6206 include 'COMMON.FFIELD'
6207 include 'COMMON.CONTROL'
6208 include 'COMMON.TORCNSTR'
6209 double precision coskt(mmaxtheterm),sinkt(mmaxtheterm),
6210 & cosph1(maxsingle),sinph1(maxsingle),cosph2(maxsingle),
6211 & sinph2(maxsingle),cosph1ph2(maxdouble,maxdouble),
6212 & sinph1ph2(maxdouble,maxdouble)
6213 logical lprn /.false./, lprn1 /.false./
6215 c write (iout,*) "ithetyp",(ithetyp(i),i=1,ntyp1)
6216 do i=ithet_start,ithet_end
6218 C if (itype(i-1).eq.ntyp1) cycle
6220 if ((itype(i-1).eq.ntyp1).or.itype(i-2).eq.ntyp1
6221 & .or.itype(i).eq.ntyp1) cycle
6222 if (iabs(itype(i+1)).eq.20) iblock=2
6223 if (iabs(itype(i+1)).ne.20) iblock=1
6227 theti2=0.5d0*theta(i)
6228 ityp2=ithetyp((itype(i-1)))
6230 coskt(k)=dcos(k*theti2)
6231 sinkt(k)=dsin(k*theti2)
6241 if (i.gt.3 .and. itype(i-3).ne.ntyp1) then
6244 if (phii.ne.phii) phii=150.0
6248 ityp1=ithetyp((itype(i-2)))
6250 cosph1(k)=dcos(k*phii)
6251 sinph1(k)=dsin(k*phii)
6257 ityp1=ithetyp((itype(i-2)))
6263 if (i.lt.nres .and. itype(i+1).ne.ntyp1) then
6266 if (phii1.ne.phii1) phii1=150.0
6271 ityp3=ithetyp((itype(i)))
6273 cosph2(k)=dcos(k*phii1)
6274 sinph2(k)=dsin(k*phii1)
6279 ityp3=ithetyp((itype(i)))
6285 c write (iout,*) "i",i," ityp1",itype(i-2),ityp1,
6286 c & " ityp2",itype(i-1),ityp2," ityp3",itype(i),ityp3
6288 ethetai=aa0thet(ityp1,ityp2,ityp3,iblock)
6291 ccl=cosph1(l)*cosph2(k-l)
6292 ssl=sinph1(l)*sinph2(k-l)
6293 scl=sinph1(l)*cosph2(k-l)
6294 csl=cosph1(l)*sinph2(k-l)
6295 cosph1ph2(l,k)=ccl-ssl
6296 cosph1ph2(k,l)=ccl+ssl
6297 sinph1ph2(l,k)=scl+csl
6298 sinph1ph2(k,l)=scl-csl
6302 write (iout,*) "i",i," ityp1",ityp1," ityp2",ityp2,
6303 & " ityp3",ityp3," theti2",theti2," phii",phii," phii1",phii1
6304 write (iout,*) "coskt and sinkt"
6306 write (iout,*) k,coskt(k),sinkt(k)
6310 ethetai=ethetai+aathet(k,ityp1,ityp2,ityp3,iblock)*sinkt(k)
6311 dethetai=dethetai+0.5d0*k*aathet(k,ityp1,ityp2,ityp3,iblock)
6314 & write (iout,*) "k",k,"
6315 & aathet",aathet(k,ityp1,ityp2,ityp3,iblock),
6316 & " ethetai",ethetai
6319 write (iout,*) "cosph and sinph"
6321 write (iout,*) k,cosph1(k),sinph1(k),cosph2(k),sinph2(k)
6323 write (iout,*) "cosph1ph2 and sinph2ph2"
6326 write (iout,*) l,k,cosph1ph2(l,k),cosph1ph2(k,l),
6327 & sinph1ph2(l,k),sinph1ph2(k,l)
6330 write(iout,*) "ethetai",ethetai
6334 aux=bbthet(k,m,ityp1,ityp2,ityp3,iblock)*cosph1(k)
6335 & +ccthet(k,m,ityp1,ityp2,ityp3,iblock)*sinph1(k)
6336 & +ddthet(k,m,ityp1,ityp2,ityp3,iblock)*cosph2(k)
6337 & +eethet(k,m,ityp1,ityp2,ityp3,iblock)*sinph2(k)
6338 ethetai=ethetai+sinkt(m)*aux
6339 dethetai=dethetai+0.5d0*m*aux*coskt(m)
6340 dephii=dephii+k*sinkt(m)*(
6341 & ccthet(k,m,ityp1,ityp2,ityp3,iblock)*cosph1(k)-
6342 & bbthet(k,m,ityp1,ityp2,ityp3,iblock)*sinph1(k))
6343 dephii1=dephii1+k*sinkt(m)*(
6344 & eethet(k,m,ityp1,ityp2,ityp3,iblock)*cosph2(k)-
6345 & ddthet(k,m,ityp1,ityp2,ityp3,iblock)*sinph2(k))
6347 & write (iout,*) "m",m," k",k," bbthet",
6348 & bbthet(k,m,ityp1,ityp2,ityp3,iblock)," ccthet",
6349 & ccthet(k,m,ityp1,ityp2,ityp3,iblock)," ddthet",
6350 & ddthet(k,m,ityp1,ityp2,ityp3,iblock)," eethet",
6351 & eethet(k,m,ityp1,ityp2,ityp3,iblock)," ethetai",ethetai
6355 & write(iout,*) "ethetai",ethetai
6359 aux=ffthet(l,k,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(l,k)+
6360 & ffthet(k,l,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(k,l)+
6361 & ggthet(l,k,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(l,k)+
6362 & ggthet(k,l,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(k,l)
6363 ethetai=ethetai+sinkt(m)*aux
6364 dethetai=dethetai+0.5d0*m*coskt(m)*aux
6365 dephii=dephii+l*sinkt(m)*(
6366 & -ffthet(l,k,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(l,k)-
6367 & ffthet(k,l,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(k,l)+
6368 & ggthet(l,k,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(l,k)+
6369 & ggthet(k,l,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(k,l))
6370 dephii1=dephii1+(k-l)*sinkt(m)*(
6371 & -ffthet(l,k,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(l,k)+
6372 & ffthet(k,l,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(k,l)+
6373 & ggthet(l,k,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(l,k)-
6374 & ggthet(k,l,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(k,l))
6376 write (iout,*) "m",m," k",k," l",l," ffthet",
6377 & ffthet(l,k,m,ityp1,ityp2,ityp3,iblock),
6378 & ffthet(k,l,m,ityp1,ityp2,ityp3,iblock)," ggthet",
6379 & ggthet(l,k,m,ityp1,ityp2,ityp3,iblock),
6380 & ggthet(k,l,m,ityp1,ityp2,ityp3,iblock),
6381 & " ethetai",ethetai
6382 write (iout,*) cosph1ph2(l,k)*sinkt(m),
6383 & cosph1ph2(k,l)*sinkt(m),
6384 & sinph1ph2(l,k)*sinkt(m),sinph1ph2(k,l)*sinkt(m)
6390 if (lprn1) write (iout,'(i2,3f8.1,9h ethetai ,f10.5)')
6391 & i,theta(i)*rad2deg,phii*rad2deg,
6392 & phii1*rad2deg,ethetai
6393 etheta=etheta+ethetai
6395 gloc(i-3,icg)=gloc(i-3,icg)+wang*dephii
6396 gloc_compon(11,i-3)=gloc_compon(11,i-3)+dephii
6399 gloc(i-2,icg)=gloc(i-2,icg)+wang*dephii1
6400 gloc_compon(11,i-2)=gloc_compon(11,i-2)+dephii1
6402 c gloc(nphi+i-2,icg)=wang*dethetai
6403 gloc(nphi+i-2,icg)=gloc(nphi+i-2,icg)+wang*dethetai
6404 gloc_compon(11,nphi+i-2)=gloc_compon(11,nphi+i-2)+dethetai
6410 c-----------------------------------------------------------------------------
6411 subroutine esc(escloc)
6412 C Calculate the local energy of a side chain and its derivatives in the
6413 C corresponding virtual-bond valence angles THETA and the spherical angles
6415 implicit real*8 (a-h,o-z)
6416 include 'DIMENSIONS'
6417 include 'DIMENSIONS.ZSCOPT'
6418 include 'COMMON.GEO'
6419 include 'COMMON.LOCAL'
6420 include 'COMMON.VAR'
6421 include 'COMMON.INTERACT'
6422 include 'COMMON.DERIV'
6423 include 'COMMON.CHAIN'
6424 include 'COMMON.IOUNITS'
6425 include 'COMMON.NAMES'
6426 include 'COMMON.FFIELD'
6427 double precision x(3),dersc(3),xemp(3),dersc0(3),dersc1(3),
6428 & ddersc0(3),ddummy(3),xtemp(3),temp(3)
6429 common /sccalc/ time11,time12,time112,theti,it,nlobit
6432 C write (iout,*) 'ESC'
6433 do i=loc_start,loc_end
6435 if (it.eq.ntyp1) cycle
6436 if (it.eq.10) goto 1
6437 nlobit=nlob(iabs(it))
6438 c print *,'i=',i,' it=',it,' nlobit=',nlobit
6439 C write (iout,*) 'i=',i,' ssa=',ssa,' ssad=',ssad
6440 theti=theta(i+1)-pipol
6444 c write (iout,*) "i",i," x",x(1),x(2),x(3)
6446 if (x(2).gt.pi-delta) then
6450 call enesc(xtemp,escloci0,dersc0,ddersc0,.true.)
6452 call enesc(xtemp,escloci1,dersc1,ddummy,.false.)
6453 call spline1(x(2),pi-delta,delta,escloci0,escloci1,dersc0(2),
6455 call spline2(x(2),pi-delta,delta,dersc0(1),dersc1(1),
6456 & ddersc0(1),dersc(1))
6457 call spline2(x(2),pi-delta,delta,dersc0(3),dersc1(3),
6458 & ddersc0(3),dersc(3))
6460 call enesc_bound(xtemp,esclocbi0,dersc0,dersc12,.true.)
6462 call enesc_bound(xtemp,esclocbi1,dersc1,chuju,.false.)
6463 call spline1(x(2),pi-delta,delta,esclocbi0,esclocbi1,
6464 & dersc0(2),esclocbi,dersc02)
6465 call spline2(x(2),pi-delta,delta,dersc0(1),dersc1(1),
6467 call splinthet(x(2),0.5d0*delta,ss,ssd)
6472 dersc(k)=ss*dersc(k)+(1.0d0-ss)*dersc0(k)
6474 dersc(2)=dersc(2)+ssd*(escloci-esclocbi)
6475 write (iout,*) 'i=',i,x(2)*rad2deg,escloci0,escloci,
6477 escloci=ss*escloci+(1.0d0-ss)*esclocbi
6479 c write (iout,*) escloci
6480 else if (x(2).lt.delta) then
6484 call enesc(xtemp,escloci0,dersc0,ddersc0,.true.)
6486 call enesc(xtemp,escloci1,dersc1,ddummy,.false.)
6487 call spline1(x(2),delta,-delta,escloci0,escloci1,dersc0(2),
6489 call spline2(x(2),delta,-delta,dersc0(1),dersc1(1),
6490 & ddersc0(1),dersc(1))
6491 call spline2(x(2),delta,-delta,dersc0(3),dersc1(3),
6492 & ddersc0(3),dersc(3))
6494 call enesc_bound(xtemp,esclocbi0,dersc0,dersc12,.true.)
6496 call enesc_bound(xtemp,esclocbi1,dersc1,chuju,.false.)
6497 call spline1(x(2),delta,-delta,esclocbi0,esclocbi1,
6498 & dersc0(2),esclocbi,dersc02)
6499 call spline2(x(2),delta,-delta,dersc0(1),dersc1(1),
6504 call splinthet(x(2),0.5d0*delta,ss,ssd)
6506 dersc(k)=ss*dersc(k)+(1.0d0-ss)*dersc0(k)
6508 dersc(2)=dersc(2)+ssd*(escloci-esclocbi)
6509 c write (iout,*) 'i=',i,x(2)*rad2deg,escloci0,escloci,
6511 escloci=ss*escloci+(1.0d0-ss)*esclocbi
6512 C write (iout,*) 'i=',i, escloci
6514 call enesc(x,escloci,dersc,ddummy,.false.)
6517 escloc=escloc+escloci
6518 C write (iout,*) 'i=',i,' escloci=',escloci,' dersc=',dersc
6519 write (iout,'(a6,i5,0pf7.3)')
6520 & 'escloc',i,escloci
6522 gloc(nphi+i-1,icg)=gloc(nphi+i-1,icg)+
6524 gloc_compon(12,nphi+i-1)=gloc_compon(12,nphi+i-1)+dersc(1)
6525 gloc(ialph(i,1),icg)=wscloc*dersc(2)
6526 gloc_compon(12,ialph(i,1))=gloc_compon(12,ialph(i,1))+dersc(2)
6527 gloc(ialph(i,1)+nside,icg)=wscloc*dersc(3)
6528 gloc_compon(12,ialph(i,1))=gloc_compon(12,ialph(i,1))+dersc(3)
6533 C---------------------------------------------------------------------------
6534 subroutine enesc(x,escloci,dersc,ddersc,mixed)
6535 implicit real*8 (a-h,o-z)
6536 include 'DIMENSIONS'
6537 include 'COMMON.GEO'
6538 include 'COMMON.LOCAL'
6539 include 'COMMON.IOUNITS'
6540 common /sccalc/ time11,time12,time112,theti,it,nlobit
6541 double precision x(3),z(3),Ax(3,maxlob,-1:1),dersc(3),ddersc(3)
6542 double precision contr(maxlob,-1:1)
6544 c write (iout,*) 'it=',it,' nlobit=',nlobit
6548 if (mixed) ddersc(j)=0.0d0
6552 C Because of periodicity of the dependence of the SC energy in omega we have
6553 C to add up the contributions from x(3)-2*pi, x(3), and x(3+2*pi).
6554 C To avoid underflows, first compute & store the exponents.
6562 z(k)=x(k)-censc(k,j,it)
6567 Axk=Axk+gaussc(l,k,j,it)*z(l)
6573 expfac=expfac+Ax(k,j,iii)*z(k)
6581 C As in the case of ebend, we want to avoid underflows in exponentiation and
6582 C subsequent NaNs and INFs in energy calculation.
6583 C Find the largest exponent
6587 if (emin.gt.contr(j,iii)) emin=contr(j,iii)
6591 cd print *,'it=',it,' emin=',emin
6593 C Compute the contribution to SC energy and derivatives
6597 expfac=dexp(bsc(j,iabs(it))-0.5D0*contr(j,iii)+emin)
6598 cd print *,'j=',j,' expfac=',expfac
6599 escloc_i=escloc_i+expfac
6601 dersc(k)=dersc(k)+Ax(k,j,iii)*expfac
6605 ddersc(k)=ddersc(k)+(-Ax(2,j,iii)*Ax(k,j,iii)
6606 & +gaussc(k,2,j,it))*expfac
6613 dersc(1)=dersc(1)/cos(theti)**2
6614 ddersc(1)=ddersc(1)/cos(theti)**2
6617 escloci=-(dlog(escloc_i)-emin)
6619 dersc(j)=dersc(j)/escloc_i
6623 ddersc(j)=(ddersc(j)/escloc_i+dersc(2)*dersc(j))
6628 C------------------------------------------------------------------------------
6629 subroutine enesc_bound(x,escloci,dersc,dersc12,mixed)
6630 implicit real*8 (a-h,o-z)
6631 include 'DIMENSIONS'
6632 include 'COMMON.GEO'
6633 include 'COMMON.LOCAL'
6634 include 'COMMON.IOUNITS'
6635 common /sccalc/ time11,time12,time112,theti,it,nlobit
6636 double precision x(3),z(3),Ax(3,maxlob),dersc(3)
6637 double precision contr(maxlob)
6648 z(k)=x(k)-censc(k,j,it)
6654 Axk=Axk+gaussc(l,k,j,it)*z(l)
6660 expfac=expfac+Ax(k,j)*z(k)
6665 C As in the case of ebend, we want to avoid underflows in exponentiation and
6666 C subsequent NaNs and INFs in energy calculation.
6667 C Find the largest exponent
6670 if (emin.gt.contr(j)) emin=contr(j)
6674 C Compute the contribution to SC energy and derivatives
6678 expfac=dexp(bsc(j,iabs(it))-0.5D0*contr(j)+emin)
6679 escloc_i=escloc_i+expfac
6681 dersc(k)=dersc(k)+Ax(k,j)*expfac
6683 if (mixed) dersc12=dersc12+(-Ax(2,j)*Ax(1,j)
6684 & +gaussc(1,2,j,it))*expfac
6688 dersc(1)=dersc(1)/cos(theti)**2
6689 dersc12=dersc12/cos(theti)**2
6690 escloci=-(dlog(escloc_i)-emin)
6692 dersc(j)=dersc(j)/escloc_i
6694 if (mixed) dersc12=(dersc12/escloc_i+dersc(2)*dersc(1))
6698 c----------------------------------------------------------------------------------
6699 subroutine esc(escloc)
6700 C Calculate the local energy of a side chain and its derivatives in the
6701 C corresponding virtual-bond valence angles THETA and the spherical angles
6702 C ALPHA and OMEGA derived from AM1 all-atom calculations.
6703 C added by Urszula Kozlowska. 07/11/2007
6705 implicit real*8 (a-h,o-z)
6706 include 'DIMENSIONS'
6707 include 'DIMENSIONS.ZSCOPT'
6708 include 'COMMON.GEO'
6709 include 'COMMON.LOCAL'
6710 include 'COMMON.VAR'
6711 include 'COMMON.SCROT'
6712 include 'COMMON.INTERACT'
6713 include 'COMMON.DERIV'
6714 include 'COMMON.CHAIN'
6715 include 'COMMON.IOUNITS'
6716 include 'COMMON.NAMES'
6717 include 'COMMON.FFIELD'
6718 include 'COMMON.CONTROL'
6719 include 'COMMON.VECTORS'
6720 double precision x_prime(3),y_prime(3),z_prime(3)
6721 & , sumene,dsc_i,dp2_i,x(65),
6722 & xx,yy,zz,sumene1,sumene2,sumene3,sumene4,s1,s1_6,s2,s2_6,
6723 & de_dxx,de_dyy,de_dzz,de_dt
6724 double precision s1_t,s1_6_t,s2_t,s2_6_t
6726 & dXX_Ci1(3),dYY_Ci1(3),dZZ_Ci1(3),dXX_Ci(3),
6727 & dYY_Ci(3),dZZ_Ci(3),dXX_XYZ(3),dYY_XYZ(3),dZZ_XYZ(3),
6728 & dt_dCi(3),dt_dCi1(3)
6729 common /sccalc/ time11,time12,time112,theti,it,nlobit
6732 do i=loc_start,loc_end
6733 if (itype(i).eq.ntyp1) cycle
6734 costtab(i+1) =dcos(theta(i+1))
6735 sinttab(i+1) =dsqrt(1-costtab(i+1)*costtab(i+1))
6736 cost2tab(i+1)=dsqrt(0.5d0*(1.0d0+costtab(i+1)))
6737 sint2tab(i+1)=dsqrt(0.5d0*(1.0d0-costtab(i+1)))
6738 cosfac2=0.5d0/(1.0d0+costtab(i+1))
6739 cosfac=dsqrt(cosfac2)
6740 sinfac2=0.5d0/(1.0d0-costtab(i+1))
6741 sinfac=dsqrt(sinfac2)
6743 if (it.eq.10) goto 1
6745 C Compute the axes of tghe local cartesian coordinates system; store in
6746 c x_prime, y_prime and z_prime
6753 C write(2,*) "dc_norm", dc_norm(1,i+nres),dc_norm(2,i+nres),
6754 C & dc_norm(3,i+nres)
6756 x_prime(j) = (dc_norm(j,i) - dc_norm(j,i-1))*cosfac
6757 y_prime(j) = (dc_norm(j,i) + dc_norm(j,i-1))*sinfac
6760 z_prime(j) = -uz(j,i-1)*dsign(1.0d0,dfloat(itype(i)))
6763 c write (2,*) "x_prime",(x_prime(j),j=1,3)
6764 c write (2,*) "y_prime",(y_prime(j),j=1,3)
6765 c write (2,*) "z_prime",(z_prime(j),j=1,3)
6766 c write (2,*) "xx",scalar(x_prime(1),x_prime(1)),
6767 c & " xy",scalar(x_prime(1),y_prime(1)),
6768 c & " xz",scalar(x_prime(1),z_prime(1)),
6769 c & " yy",scalar(y_prime(1),y_prime(1)),
6770 c & " yz",scalar(y_prime(1),z_prime(1)),
6771 c & " zz",scalar(z_prime(1),z_prime(1))
6773 C Transform the unit vector of the ith side-chain centroid, dC_norm(*,i),
6774 C to local coordinate system. Store in xx, yy, zz.
6780 xx = xx + x_prime(j)*dc_norm(j,i+nres)
6781 yy = yy + y_prime(j)*dc_norm(j,i+nres)
6782 zz = zz + z_prime(j)*dc_norm(j,i+nres)
6789 C Compute the energy of the ith side cbain
6791 c write (2,*) "xx",xx," yy",yy," zz",zz
6794 x(j) = sc_parmin(j,it)
6797 Cc diagnostics - remove later
6799 yy1 = dsin(alph(2))*dcos(omeg(2))
6800 zz1 = -dsign(1.0d0,itype(i))*dsin(alph(2))*dsin(omeg(2))
6801 write(2,'(3f8.1,3f9.3,1x,3f9.3)')
6802 & alph(2)*rad2deg,omeg(2)*rad2deg,theta(3)*rad2deg,xx,yy,zz,
6804 C," --- ", xx_w,yy_w,zz_w
6807 sumene1= x(1)+ x(2)*xx+ x(3)*yy+ x(4)*zz+ x(5)*xx**2
6808 & + x(6)*yy**2+ x(7)*zz**2+ x(8)*xx*zz+ x(9)*xx*yy
6810 sumene2= x(11) + x(12)*xx + x(13)*yy + x(14)*zz + x(15)*xx**2
6811 & + x(16)*yy**2 + x(17)*zz**2 + x(18)*xx*zz + x(19)*xx*yy
6813 sumene3= x(21) +x(22)*xx +x(23)*yy +x(24)*zz +x(25)*xx**2
6814 & +x(26)*yy**2 +x(27)*zz**2 +x(28)*xx*zz +x(29)*xx*yy
6815 & +x(30)*yy*zz +x(31)*xx**3 +x(32)*yy**3 +x(33)*zz**3
6816 & +x(34)*(xx**2)*yy +x(35)*(xx**2)*zz +x(36)*(yy**2)*xx
6817 & +x(37)*(yy**2)*zz +x(38)*(zz**2)*xx +x(39)*(zz**2)*yy
6819 sumene4= x(41) +x(42)*xx +x(43)*yy +x(44)*zz +x(45)*xx**2
6820 & +x(46)*yy**2 +x(47)*zz**2 +x(48)*xx*zz +x(49)*xx*yy
6821 & +x(50)*yy*zz +x(51)*xx**3 +x(52)*yy**3 +x(53)*zz**3
6822 & +x(54)*(xx**2)*yy +x(55)*(xx**2)*zz +x(56)*(yy**2)*xx
6823 & +x(57)*(yy**2)*zz +x(58)*(zz**2)*xx +x(59)*(zz**2)*yy
6825 dsc_i = 0.743d0+x(61)
6827 dscp1=dsqrt(dsc_i**2+dp2_i**2-2*dsc_i*dp2_i
6828 & *(xx*cost2tab(i+1)+yy*sint2tab(i+1)))
6829 dscp2=dsqrt(dsc_i**2+dp2_i**2-2*dsc_i*dp2_i
6830 & *(xx*cost2tab(i+1)-yy*sint2tab(i+1)))
6831 s1=(1+x(63))/(0.1d0 + dscp1)
6832 s1_6=(1+x(64))/(0.1d0 + dscp1**6)
6833 s2=(1+x(65))/(0.1d0 + dscp2)
6834 s2_6=(1+x(65))/(0.1d0 + dscp2**6)
6835 sumene = ( sumene3*sint2tab(i+1) + sumene1)*(s1+s1_6)
6836 & + (sumene4*cost2tab(i+1) +sumene2)*(s2+s2_6)
6837 c write(2,'(i2," sumene",7f9.3)') i,sumene1,sumene2,sumene3,
6839 c & dscp1,dscp2,sumene
6840 c sumene = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
6841 escloc = escloc + sumene
6842 c write (2,*) "escloc",escloc
6843 c write (2,*) "i",i," escloc",sumene,escloc,it,itype(i),
6845 if (.not. calc_grad) goto 1
6848 C This section to check the numerical derivatives of the energy of ith side
6849 C chain in xx, yy, zz, and theta. Use the -DDEBUG compiler option or insert
6850 C #define DEBUG in the code to turn it on.
6852 write (2,*) "sumene =",sumene
6856 write (2,*) xx,yy,zz
6857 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
6858 de_dxx_num=(sumenep-sumene)/aincr
6860 write (2,*) "xx+ sumene from enesc=",sumenep
6863 write (2,*) xx,yy,zz
6864 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
6865 de_dyy_num=(sumenep-sumene)/aincr
6867 write (2,*) "yy+ sumene from enesc=",sumenep
6870 write (2,*) xx,yy,zz
6871 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
6872 de_dzz_num=(sumenep-sumene)/aincr
6874 write (2,*) "zz+ sumene from enesc=",sumenep
6875 costsave=cost2tab(i+1)
6876 sintsave=sint2tab(i+1)
6877 cost2tab(i+1)=dcos(0.5d0*(theta(i+1)+aincr))
6878 sint2tab(i+1)=dsin(0.5d0*(theta(i+1)+aincr))
6879 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
6880 de_dt_num=(sumenep-sumene)/aincr
6881 write (2,*) " t+ sumene from enesc=",sumenep
6882 cost2tab(i+1)=costsave
6883 sint2tab(i+1)=sintsave
6884 C End of diagnostics section.
6887 C Compute the gradient of esc
6889 pom_s1=(1.0d0+x(63))/(0.1d0 + dscp1)**2
6890 pom_s16=6*(1.0d0+x(64))/(0.1d0 + dscp1**6)**2
6891 pom_s2=(1.0d0+x(65))/(0.1d0 + dscp2)**2
6892 pom_s26=6*(1.0d0+x(65))/(0.1d0 + dscp2**6)**2
6893 pom_dx=dsc_i*dp2_i*cost2tab(i+1)
6894 pom_dy=dsc_i*dp2_i*sint2tab(i+1)
6895 pom_dt1=-0.5d0*dsc_i*dp2_i*(xx*sint2tab(i+1)-yy*cost2tab(i+1))
6896 pom_dt2=-0.5d0*dsc_i*dp2_i*(xx*sint2tab(i+1)+yy*cost2tab(i+1))
6897 pom1=(sumene3*sint2tab(i+1)+sumene1)
6898 & *(pom_s1/dscp1+pom_s16*dscp1**4)
6899 pom2=(sumene4*cost2tab(i+1)+sumene2)
6900 & *(pom_s2/dscp2+pom_s26*dscp2**4)
6901 sumene1x=x(2)+2*x(5)*xx+x(8)*zz+ x(9)*yy
6902 sumene3x=x(22)+2*x(25)*xx+x(28)*zz+x(29)*yy+3*x(31)*xx**2
6903 & +2*x(34)*xx*yy +2*x(35)*xx*zz +x(36)*(yy**2) +x(38)*(zz**2)
6905 sumene2x=x(12)+2*x(15)*xx+x(18)*zz+ x(19)*yy
6906 sumene4x=x(42)+2*x(45)*xx +x(48)*zz +x(49)*yy +3*x(51)*xx**2
6907 & +2*x(54)*xx*yy+2*x(55)*xx*zz+x(56)*(yy**2)+x(58)*(zz**2)
6909 de_dxx =(sumene1x+sumene3x*sint2tab(i+1))*(s1+s1_6)
6910 & +(sumene2x+sumene4x*cost2tab(i+1))*(s2+s2_6)
6911 & +(pom1+pom2)*pom_dx
6913 write(2,*), "de_dxx = ", de_dxx,de_dxx_num
6916 sumene1y=x(3) + 2*x(6)*yy + x(9)*xx + x(10)*zz
6917 sumene3y=x(23) +2*x(26)*yy +x(29)*xx +x(30)*zz +3*x(32)*yy**2
6918 & +x(34)*(xx**2) +2*x(36)*yy*xx +2*x(37)*yy*zz +x(39)*(zz**2)
6920 sumene2y=x(13) + 2*x(16)*yy + x(19)*xx + x(20)*zz
6921 sumene4y=x(43)+2*x(46)*yy+x(49)*xx +x(50)*zz
6922 & +3*x(52)*yy**2+x(54)*xx**2+2*x(56)*yy*xx +2*x(57)*yy*zz
6923 & +x(59)*zz**2 +x(60)*xx*zz
6924 de_dyy =(sumene1y+sumene3y*sint2tab(i+1))*(s1+s1_6)
6925 & +(sumene2y+sumene4y*cost2tab(i+1))*(s2+s2_6)
6926 & +(pom1-pom2)*pom_dy
6928 write(2,*), "de_dyy = ", de_dyy,de_dyy_num
6931 de_dzz =(x(24) +2*x(27)*zz +x(28)*xx +x(30)*yy
6932 & +3*x(33)*zz**2 +x(35)*xx**2 +x(37)*yy**2 +2*x(38)*zz*xx
6933 & +2*x(39)*zz*yy +x(40)*xx*yy)*sint2tab(i+1)*(s1+s1_6)
6934 & +(x(4) + 2*x(7)*zz+ x(8)*xx + x(10)*yy)*(s1+s1_6)
6935 & +(x(44)+2*x(47)*zz +x(48)*xx +x(50)*yy +3*x(53)*zz**2
6936 & +x(55)*xx**2 +x(57)*(yy**2)+2*x(58)*zz*xx +2*x(59)*zz*yy
6937 & +x(60)*xx*yy)*cost2tab(i+1)*(s2+s2_6)
6938 & + ( x(14) + 2*x(17)*zz+ x(18)*xx + x(20)*yy)*(s2+s2_6)
6940 write(2,*), "de_dzz = ", de_dzz,de_dzz_num
6943 de_dt = 0.5d0*sumene3*cost2tab(i+1)*(s1+s1_6)
6944 & -0.5d0*sumene4*sint2tab(i+1)*(s2+s2_6)
6945 & +pom1*pom_dt1+pom2*pom_dt2
6947 write(2,*), "de_dt = ", de_dt,de_dt_num
6951 cossc=scalar(dc_norm(1,i),dc_norm(1,i+nres))
6952 cossc1=scalar(dc_norm(1,i-1),dc_norm(1,i+nres))
6953 cosfac2xx=cosfac2*xx
6954 sinfac2yy=sinfac2*yy
6956 dt_dCi(k) = -(dc_norm(k,i-1)+costtab(i+1)*dc_norm(k,i))*
6958 dt_dCi1(k)= -(dc_norm(k,i)+costtab(i+1)*dc_norm(k,i-1))*
6960 pom=(dC_norm(k,i+nres)-cossc*dC_norm(k,i))*vbld_inv(i+1)
6961 pom1=(dC_norm(k,i+nres)-cossc1*dC_norm(k,i-1))*vbld_inv(i)
6962 c write (iout,*) "i",i," k",k," pom",pom," pom1",pom1,
6963 c & " dt_dCi",dt_dCi(k)," dt_dCi1",dt_dCi1(k)
6964 c write (iout,*) "dC_norm",(dC_norm(j,i),j=1,3),
6965 c & (dC_norm(j,i-1),j=1,3)," vbld_inv",vbld_inv(i+1),vbld_inv(i)
6966 dXX_Ci(k)=pom*cosfac-dt_dCi(k)*cosfac2xx
6967 dXX_Ci1(k)=-pom1*cosfac-dt_dCi1(k)*cosfac2xx
6968 dYY_Ci(k)=pom*sinfac+dt_dCi(k)*sinfac2yy
6969 dYY_Ci1(k)=pom1*sinfac+dt_dCi1(k)*sinfac2yy
6973 dZZ_Ci(k)=dZZ_Ci(k)-uzgrad(j,k,2,i-1)
6974 & *dsign(1.0d0,dfloat(itype(i)))*dC_norm(j,i+nres)
6975 dZZ_Ci1(k)=dZZ_Ci1(k)-uzgrad(j,k,1,i-1)
6976 & *dsign(1.0d0,dfloat(itype(i)))*dC_norm(j,i+nres)
6979 dXX_XYZ(k)=vbld_inv(i+nres)*(x_prime(k)-xx*dC_norm(k,i+nres))
6980 dYY_XYZ(k)=vbld_inv(i+nres)*(y_prime(k)-yy*dC_norm(k,i+nres))
6981 dZZ_XYZ(k)=vbld_inv(i+nres)*(z_prime(k)-zz*dC_norm(k,i+nres))
6983 dt_dCi(k) = -dt_dCi(k)/sinttab(i+1)
6984 dt_dCi1(k)= -dt_dCi1(k)/sinttab(i+1)
6988 dXX_Ctab(k,i)=dXX_Ci(k)
6989 dXX_C1tab(k,i)=dXX_Ci1(k)
6990 dYY_Ctab(k,i)=dYY_Ci(k)
6991 dYY_C1tab(k,i)=dYY_Ci1(k)
6992 dZZ_Ctab(k,i)=dZZ_Ci(k)
6993 dZZ_C1tab(k,i)=dZZ_Ci1(k)
6994 dXX_XYZtab(k,i)=dXX_XYZ(k)
6995 dYY_XYZtab(k,i)=dYY_XYZ(k)
6996 dZZ_XYZtab(k,i)=dZZ_XYZ(k)
7000 c write (iout,*) "k",k," dxx_ci1",dxx_ci1(k)," dyy_ci1",
7001 c & dyy_ci1(k)," dzz_ci1",dzz_ci1(k)
7002 c write (iout,*) "k",k," dxx_ci",dxx_ci(k)," dyy_ci",
7003 c & dyy_ci(k)," dzz_ci",dzz_ci(k)
7004 c write (iout,*) "k",k," dt_dci",dt_dci(k)," dt_dci",
7006 c write (iout,*) "k",k," dxx_XYZ",dxx_XYZ(k)," dyy_XYZ",
7007 c & dyy_XYZ(k)," dzz_XYZ",dzz_XYZ(k)
7008 gscloc(k,i-1)=gscloc(k,i-1)+de_dxx*dxx_ci1(k)
7009 & +de_dyy*dyy_ci1(k)+de_dzz*dzz_ci1(k)+de_dt*dt_dCi1(k)
7010 gscloc(k,i)=gscloc(k,i)+de_dxx*dxx_Ci(k)
7011 & +de_dyy*dyy_Ci(k)+de_dzz*dzz_Ci(k)+de_dt*dt_dCi(k)
7012 gsclocx(k,i)= de_dxx*dxx_XYZ(k)
7013 & +de_dyy*dyy_XYZ(k)+de_dzz*dzz_XYZ(k)
7015 c write(iout,*) "ENERGY GRAD = ", (gscloc(k,i-1),k=1,3),
7016 c & (gscloc(k,i),k=1,3),(gsclocx(k,i),k=1,3)
7018 C to check gradient call subroutine check_grad
7025 c------------------------------------------------------------------------------
7026 subroutine gcont(rij,r0ij,eps0ij,delta,fcont,fprimcont)
7028 C This procedure calculates two-body contact function g(rij) and its derivative:
7031 C g(rij) = esp0ij*(-0.9375*x+0.625*x**3-0.1875*x**5) ! -1 =< x =< 1
7034 C where x=(rij-r0ij)/delta
7036 C rij - interbody distance, r0ij - contact distance, eps0ij - contact energy
7039 double precision rij,r0ij,eps0ij,fcont,fprimcont
7040 double precision x,x2,x4,delta
7044 if (x.lt.-1.0D0) then
7047 else if (x.le.1.0D0) then
7050 fcont=eps0ij*(x*(-0.9375D0+0.6250D0*x2-0.1875D0*x4)+0.5D0)
7051 fprimcont=eps0ij * (-0.9375D0+1.8750D0*x2-0.9375D0*x4)/delta
7058 c------------------------------------------------------------------------------
7059 subroutine splinthet(theti,delta,ss,ssder)
7060 implicit real*8 (a-h,o-z)
7061 include 'DIMENSIONS'
7062 include 'DIMENSIONS.ZSCOPT'
7063 include 'COMMON.VAR'
7064 include 'COMMON.GEO'
7067 if (theti.gt.pipol) then
7068 call gcont(theti,thetup,1.0d0,delta,ss,ssder)
7070 call gcont(-theti,-thetlow,1.0d0,delta,ss,ssder)
7075 c------------------------------------------------------------------------------
7076 subroutine spline1(x,x0,delta,f0,f1,fprim0,f,fprim)
7078 double precision x,x0,delta,f0,f1,fprim0,f,fprim
7079 double precision ksi,ksi2,ksi3,a1,a2,a3
7080 a1=fprim0*delta/(f1-f0)
7086 f=f0+(f1-f0)*ksi*(a1+ksi*(a2+a3*ksi))
7087 fprim=(f1-f0)/delta*(a1+ksi*(2*a2+3*ksi*a3))
7090 c------------------------------------------------------------------------------
7091 subroutine spline2(x,x0,delta,f0x,f1x,fprim0x,fx)
7093 double precision x,x0,delta,f0x,f1x,fprim0x,fx
7094 double precision ksi,ksi2,ksi3,a1,a2,a3
7099 a2=3*(f1x-f0x)-2*fprim0x*delta
7100 a3=fprim0x*delta-2*(f1x-f0x)
7101 fx=f0x+a1*ksi+a2*ksi2+a3*ksi3
7104 C-----------------------------------------------------------------------------
7106 C-----------------------------------------------------------------------------
7107 subroutine etor(etors)
7108 implicit real*8 (a-h,o-z)
7109 include 'DIMENSIONS'
7110 include 'DIMENSIONS.ZSCOPT'
7111 include 'COMMON.VAR'
7112 include 'COMMON.GEO'
7113 include 'COMMON.LOCAL'
7114 include 'COMMON.TORSION'
7115 include 'COMMON.INTERACT'
7116 include 'COMMON.DERIV'
7117 include 'COMMON.CHAIN'
7118 include 'COMMON.NAMES'
7119 include 'COMMON.IOUNITS'
7120 include 'COMMON.FFIELD'
7121 include 'COMMON.TORCNSTR'
7123 C Set lprn=.true. for debugging
7127 do i=iphi_start,iphi_end
7128 if (itype(i-2).eq.ntyp1 .or. itype(i-1).eq.ntyp1
7129 & .or. itype(i).eq.ntyp1) cycle
7130 itori=itortyp(itype(i-2))
7131 itori1=itortyp(itype(i-1))
7134 C Proline-Proline pair is a special case...
7135 if (itori.eq.3 .and. itori1.eq.3) then
7136 if (phii.gt.-dwapi3) then
7138 fac=1.0D0/(1.0D0-cosphi)
7139 etorsi=v1(1,3,3)*fac
7140 etorsi=etorsi+etorsi
7141 etors=etors+etorsi-v1(1,3,3)
7142 gloci=gloci-3*fac*etorsi*dsin(3*phii)
7145 v1ij=v1(j+1,itori,itori1)
7146 v2ij=v2(j+1,itori,itori1)
7149 etors=etors+v1ij*cosphi+v2ij*sinphi+dabs(v1ij)+dabs(v2ij)
7150 gloci=gloci+j*(v2ij*cosphi-v1ij*sinphi)
7154 v1ij=v1(j,itori,itori1)
7155 v2ij=v2(j,itori,itori1)
7158 etors=etors+v1ij*cosphi+v2ij*sinphi+dabs(v1ij)+dabs(v2ij)
7159 gloci=gloci+j*(v2ij*cosphi-v1ij*sinphi)
7163 & write (iout,'(2(a3,2x,i3,2x),2i3,6f8.3/26x,6f8.3/)')
7164 & restyp(itype(i-2)),i-2,restyp(itype(i-1)),i-1,itori,itori1,
7165 & (v1(j,itori,itori1),j=1,6),(v2(j,itori,itori1),j=1,6)
7166 gloc(i-3,icg)=gloc(i-3,icg)+wtor*gloci
7167 gloc_compon(13,i-3)=gloc_compon(13,i-3)+gloci
7168 c write (iout,*) 'i=',i,' gloc=',gloc(i-3,icg)
7172 c------------------------------------------------------------------------------
7174 subroutine etor(etors)
7175 implicit real*8 (a-h,o-z)
7176 include 'DIMENSIONS'
7177 include 'DIMENSIONS.ZSCOPT'
7178 include 'COMMON.VAR'
7179 include 'COMMON.GEO'
7180 include 'COMMON.LOCAL'
7181 include 'COMMON.TORSION'
7182 include 'COMMON.INTERACT'
7183 include 'COMMON.DERIV'
7184 include 'COMMON.CHAIN'
7185 include 'COMMON.NAMES'
7186 include 'COMMON.IOUNITS'
7187 include 'COMMON.FFIELD'
7188 include 'COMMON.TORCNSTR'
7189 include 'COMMON.WEIGHTS'
7190 include 'COMMON.WEIGHTDER'
7192 C Set lprn=.true. for debugging
7201 etor_temp(l,k,j,i,iblock)=0.0d0
7207 do i=iphi_start,iphi_end
7209 if (itype(i-2).eq.ntyp1.or. itype(i-1).eq.ntyp1
7210 & .or. itype(i).eq.ntyp1 .or. itype(i-3).eq.ntyp1) cycle
7211 if (itel(i-2).eq.0 .or. itel(i-1).eq.0) goto 1215
7212 if (iabs(itype(i)).eq.20) then
7217 itori=itortyp(itype(i-2))
7218 itori1=itortyp(itype(i-1))
7219 weitori=weitor(0,itori,itori1,iblock)
7223 C Regular cosine and sine terms
7224 do j=1,nterm(itori,itori1,iblock)
7225 v1ij=v1(j,itori,itori1,iblock)
7226 v2ij=v2(j,itori,itori1,iblock)
7229 etori=etori+v1ij*cosphi+v2ij*sinphi
7230 etor_temp(j,0,itori,itori1,iblock)=
7231 & etor_temp(j,0,itori,itori1,iblock)+cosphi*ww(13)
7232 etor_temp(nterm(itori,itori1,iblock)+j,0,itori,itori1,iblock)=
7233 & etor_temp(nterm(itori,itori1,iblock)+j,0,itori,itori1,iblock)+
7235 gloci=gloci+j*(v2ij*cosphi-v1ij*sinphi)
7239 C E = SUM ----------------------------------- - v1
7240 C [v2 cos(phi/2)+v3 sin(phi/2)]^2 + 1
7242 cosphi=dcos(0.5d0*phii)
7243 sinphi=dsin(0.5d0*phii)
7244 do j=1,nlor(itori,itori1,iblock)
7245 vl1ij=vlor1(j,itori,itori1)
7246 vl2ij=vlor2(j,itori,itori1)
7247 vl3ij=vlor3(j,itori,itori1)
7248 pom=vl2ij*cosphi+vl3ij*sinphi
7249 pom1=1.0d0/(pom*pom+1.0d0)
7250 etori=etori+vl1ij*pom1
7252 gloci=gloci+vl1ij*(vl3ij*cosphi-vl2ij*sinphi)*pom
7254 C Subtract the constant term
7255 etors=etors+(etori-v0(itori,itori1,iblock))*weitori
7256 etor_temp(0,0,itori,itori1,1)=etor_temp(0,0,itori,itori1,1)+
7257 & (etori-v0(itori,itori1,iblock))*ww(13)
7260 write (iout,'(2(a3,2x,i3,2x),2i3,8f8.3/26x,6f8.3/)')
7261 & restyp(itype(i-2)),i-2,restyp(itype(i-1)),i-1,itori,itori1,
7262 & weitori,v0(itori,itori1,iblock)*weitori,
7263 & (v1(j,itori,itori1,iblock)*weitori,
7264 & j=1,6),(v2(j,itori,itori1,iblock)*weitori,j=1,6)
7265 write (iout,*) "typ",itori,iloctyp(itori),itori1,
7266 & iloctyp(itori1)," etor_temp",
7267 & etor_temp(0,0,itori,itori1,1)
7270 gloc(i-3,icg)=gloc(i-3,icg)+wtor*gloci
7271 gloc_compon(13,i-3)=gloc_compon(13,i-3)+gloci
7272 c write (iout,*) 'i=',i,' gloc=',gloc(i-3,icg)
7277 c----------------------------------------------------------------------------
7278 subroutine etor_d(etors_d)
7279 C 6/23/01 Compute double torsional energy
7280 implicit real*8 (a-h,o-z)
7281 include 'DIMENSIONS'
7282 include 'DIMENSIONS.ZSCOPT'
7283 include 'COMMON.VAR'
7284 include 'COMMON.GEO'
7285 include 'COMMON.LOCAL'
7286 include 'COMMON.TORSION'
7287 include 'COMMON.INTERACT'
7288 include 'COMMON.DERIV'
7289 include 'COMMON.CHAIN'
7290 include 'COMMON.NAMES'
7291 include 'COMMON.IOUNITS'
7292 include 'COMMON.FFIELD'
7293 include 'COMMON.TORCNSTR'
7295 C Set lprn=.true. for debugging
7299 do i=iphi_start,iphi_end-1
7301 C if (itype(i-2).eq.ntyp1.or. itype(i-1).eq.ntyp1
7302 C & .or. itype(i).eq.ntyp1 .or. itype(i+1).eq.ntyp1) cycle
7303 if ((itype(i-2).eq.ntyp1).or.itype(i-3).eq.ntyp1.or.
7304 & (itype(i-1).eq.ntyp1).or.(itype(i).eq.ntyp1).or.
7305 & (itype(i+1).eq.ntyp1)) cycle
7306 if (itel(i-2).eq.0 .or. itel(i-1).eq.0 .or. itel(i).eq.0)
7308 itori=itortyp(itype(i-2))
7309 itori1=itortyp(itype(i-1))
7310 itori2=itortyp(itype(i))
7316 if (iabs(itype(i+1)).eq.20) iblock=2
7317 C Regular cosine and sine terms
7318 do j=1,ntermd_1(itori,itori1,itori2,iblock)
7319 v1cij=v1c(1,j,itori,itori1,itori2,iblock)
7320 v1sij=v1s(1,j,itori,itori1,itori2,iblock)
7321 v2cij=v1c(2,j,itori,itori1,itori2,iblock)
7322 v2sij=v1s(2,j,itori,itori1,itori2,iblock)
7323 cosphi1=dcos(j*phii)
7324 sinphi1=dsin(j*phii)
7325 cosphi2=dcos(j*phii1)
7326 sinphi2=dsin(j*phii1)
7327 etors_d=etors_d+v1cij*cosphi1+v1sij*sinphi1+
7328 & v2cij*cosphi2+v2sij*sinphi2
7329 gloci1=gloci1+j*(v1sij*cosphi1-v1cij*sinphi1)
7330 gloci2=gloci2+j*(v2sij*cosphi2-v2cij*sinphi2)
7332 do k=2,ntermd_2(itori,itori1,itori2,iblock)
7334 v1cdij = v2c(k,l,itori,itori1,itori2,iblock)
7335 v2cdij = v2c(l,k,itori,itori1,itori2,iblock)
7336 v1sdij = v2s(k,l,itori,itori1,itori2,iblock)
7337 v2sdij = v2s(l,k,itori,itori1,itori2,iblock)
7338 cosphi1p2=dcos(l*phii+(k-l)*phii1)
7339 cosphi1m2=dcos(l*phii-(k-l)*phii1)
7340 sinphi1p2=dsin(l*phii+(k-l)*phii1)
7341 sinphi1m2=dsin(l*phii-(k-l)*phii1)
7342 etors_d=etors_d+v1cdij*cosphi1p2+v2cdij*cosphi1m2+
7343 & v1sdij*sinphi1p2+v2sdij*sinphi1m2
7344 gloci1=gloci1+l*(v1sdij*cosphi1p2+v2sdij*cosphi1m2
7345 & -v1cdij*sinphi1p2-v2cdij*sinphi1m2)
7346 gloci2=gloci2+(k-l)*(v1sdij*cosphi1p2-v2sdij*cosphi1m2
7347 & -v1cdij*sinphi1p2+v2cdij*sinphi1m2)
7350 gloc(i-3,icg)=gloc(i-3,icg)+wtor_d*gloci1
7351 gloc_compon(14,i-3)=gloc_compon(14,i-3)+gloci1
7352 gloc(i-2,icg)=gloc(i-2,icg)+wtor_d*gloci2
7353 gloc_compon(14,i-2)=gloc_compon(14,i-2)+gloci2
7359 c---------------------------------------------------------------------------
7360 C The rigorous attempt to derive energy function
7361 subroutine etor_kcc(etors)
7362 implicit real*8 (a-h,o-z)
7363 include 'DIMENSIONS'
7364 include 'DIMENSIONS.ZSCOPT'
7365 include 'COMMON.VAR'
7366 include 'COMMON.GEO'
7367 include 'COMMON.LOCAL'
7368 include 'COMMON.TORSION'
7369 include 'COMMON.INTERACT'
7370 include 'COMMON.DERIV'
7371 include 'COMMON.CHAIN'
7372 include 'COMMON.NAMES'
7373 include 'COMMON.IOUNITS'
7374 include 'COMMON.FFIELD'
7375 include 'COMMON.TORCNSTR'
7376 include 'COMMON.CONTROL'
7377 include 'COMMON.WEIGHTS'
7378 include 'COMMON.WEIGHTDER'
7379 double precision c1(0:maxval_kcc),c2(0:maxval_kcc)
7381 c double precision thybt1(maxtermkcc),thybt2(maxtermkcc)
7382 C Set lprn=.true. for debugging
7385 if (lprn) write (iout,*)"ETOR_KCC"
7391 etor_temp(l,k,j,i,iblock)=0.0d0
7402 etor_temp_kcc(ll,l,k,j,i)=0.0d0
7408 if (lprn) write (iout,*) "etor_kcc tor_mode",tor_mode
7410 do i=iphi_start,iphi_end
7411 C ANY TWO ARE DUMMY ATOMS in row CYCLE
7412 c if (((itype(i-3).eq.ntyp1).and.(itype(i-2).eq.ntyp1)).or.
7413 c & ((itype(i-2).eq.ntyp1).and.(itype(i-1).eq.ntyp1)) .or.
7414 c & ((itype(i-1).eq.ntyp1).and.(itype(i).eq.ntyp1))) cycle
7415 if (itype(i-2).eq.ntyp1.or. itype(i-1).eq.ntyp1
7416 & .or. itype(i).eq.ntyp1 .or. itype(i-3).eq.ntyp1) cycle
7417 itori=itortyp(itype(i-2))
7418 itori1=itortyp(itype(i-1))
7419 weitori=weitor(0,itori,itori1,1)
7420 if (lprn) write (iout,*) i-2,i-2,itori,itori1,"weitor",weitori
7425 C to avoid multiple devision by 2
7426 c theti22=0.5d0*theta(i)
7427 C theta 12 is the theta_1 /2
7428 C theta 22 is theta_2 /2
7429 c theti12=0.5d0*theta(i-1)
7430 C and appropriate sinus function
7431 sinthet1=dsin(theta(i-1))
7432 sinthet2=dsin(theta(i))
7433 costhet1=dcos(theta(i-1))
7434 costhet2=dcos(theta(i))
7435 C to speed up lets store its mutliplication
7436 sint1t2=sinthet2*sinthet1
7438 C \sum_{i=1}^n (sin(theta_1) * sin(theta_2))^n * (c_n* cos(n*gamma)
7439 C +d_n*sin(n*gamma)) *
7440 C \sum_{i=1}^m (1+a_m*Tb_m(cos(theta_1 /2))+b_m*Tb_m(cos(theta_2 /2)))
7441 C we have two sum 1) Non-Chebyshev which is with n and gamma
7442 nval=nterm_kcc_Tb(itori,itori1)
7448 c1(j)=c1(j-1)*costhet1
7449 c2(j)=c2(j-1)*costhet2
7452 do j=1,nterm_kcc(itori,itori1)
7456 sint1t2n=sint1t2n*sint1t2
7462 sumvalc=sumvalc+v1_kcc(l,k,j,itori1,itori)*c1(k)*c2(l)
7463 etor_temp_kcc(l,k,j,itori,itori1)=
7464 & etor_temp_kcc(l,k,j,itori,itori1)+
7465 & c1(k)*c2(l)*sint1t2n*cosphi*ww(13)
7466 gradvalct1=gradvalct1+
7467 & (k-1)*v1_kcc(l,k,j,itori1,itori)*c1(k-1)*c2(l)
7468 gradvalct2=gradvalct2+
7469 & (l-1)*v1_kcc(l,k,j,itori1,itori)*c1(k)*c2(l-1)
7472 gradvalct1=-gradvalct1*sinthet1
7473 gradvalct2=-gradvalct2*sinthet2
7479 sumvals=sumvals+v2_kcc(l,k,j,itori1,itori)*c1(k)*c2(l)
7480 etor_temp_kcc(l,k,j+nterm_kcc(itori,itori1),itori,itori1)=
7481 & etor_temp_kcc(l,k,j+nterm_kcc(itori,itori1),itori,itori1)+
7482 & c1(k)*c2(l)*sint1t2n*sinphi*ww(13)
7483 gradvalst1=gradvalst1+
7484 & (k-1)*v2_kcc(l,k,j,itori1,itori)*c1(k-1)*c2(l)
7485 gradvalst2=gradvalst2+
7486 & (l-1)*v2_kcc(l,k,j,itori1,itori)*c1(k)*c2(l-1)
7489 gradvalst1=-gradvalst1*sinthet1
7490 gradvalst2=-gradvalst2*sinthet2
7491 etori=etori+sint1t2n*(sumvalc*cosphi+sumvals*sinphi)
7492 etor_temp(0,0,itori,itori1,1)=etor_temp(0,0,itori,itori1,1)
7493 & +sint1t2n*(sumvalc*cosphi+sumvals*sinphi)*ww(13)
7494 C glocig is the gradient local i site in gamma
7495 glocig=glocig+j*sint1t2n*(sumvals*cosphi-sumvalc*sinphi)
7496 C now gradient over theta_1
7497 glocit1=glocit1+sint1t2n*(gradvalct1*cosphi+gradvalst1*sinphi)
7498 & +j*sint1t2n1*costhet1*sinthet2*(sumvalc*cosphi+sumvals*sinphi)
7499 glocit2=glocit2+sint1t2n*(gradvalct2*cosphi+gradvalst2*sinphi)
7500 & +j*sint1t2n1*sinthet1*costhet2*(sumvalc*cosphi+sumvals*sinphi)
7502 etors=etors+etori*weitori
7503 C derivative over gamma
7504 gloc(i-3,icg)=gloc(i-3,icg)+wtor*glocig
7505 gloc_compon(13,i-3)=gloc_compon(13,i-3)+glocig
7506 C derivative over theta1
7507 gloc(nphi+i-3,icg)=gloc(nphi+i-3,icg)+wtor*glocit1
7508 gloc_compon(13,nphi+i-3)=gloc_compon(13,nphi+i-3)+glocit1
7509 C now derivative over theta2
7510 gloc(nphi+i-2,icg)=gloc(nphi+i-2,icg)+wtor*glocit2
7511 gloc_compon(13,nphi+i-2)=gloc_compon(13,nphi+i-2)+glocit2
7513 & write (iout,*) i-2,i-1,itype(i-2),itype(i-1),itori,itori1,
7514 & theta(i-1)*rad2deg,theta(i)*rad2deg,phii*rad2deg,etori
7518 c---------------------------------------------------------------------------------------------
7519 subroutine etor_constr(edihcnstr)
7520 implicit real*8 (a-h,o-z)
7521 include 'DIMENSIONS'
7522 include 'DIMENSIONS.ZSCOPT'
7523 include 'COMMON.VAR'
7524 include 'COMMON.GEO'
7525 include 'COMMON.LOCAL'
7526 include 'COMMON.TORSION'
7527 include 'COMMON.INTERACT'
7528 include 'COMMON.DERIV'
7529 include 'COMMON.CHAIN'
7530 include 'COMMON.NAMES'
7531 include 'COMMON.IOUNITS'
7532 include 'COMMON.FFIELD'
7533 include 'COMMON.TORCNSTR'
7534 include 'COMMON.CONTROL'
7535 ! 6/20/98 - dihedral angle constraints
7537 c do i=1,ndih_constr
7538 c write (iout,*) "idihconstr_start",idihconstr_start,
7539 c & " idihconstr_end",idihconstr_end
7540 do i=idihconstr_start,idihconstr_end
7541 itori=idih_constr(i)
7543 difi=pinorm(phii-phi0(i))
7544 if (difi.gt.drange(i)) then
7546 edihcnstr=edihcnstr+0.25d0*ftors(i)*difi**4
7547 gloc(itori-3,icg)=gloc(itori-3,icg)+ftors(i)*difi**3
7548 gloc_compon(13,itori-3)=gloc_compon(13,itori-3)
7550 else if (difi.lt.-drange(i)) then
7552 edihcnstr=edihcnstr+0.25d0*ftors(i)*difi**4
7553 gloc(itori-3,icg)=gloc(itori-3,icg)+ftors(i)*difi**3
7554 gloc_compon(13,itori-3)=gloc_compon(13,itori-3)
7562 c----------------------------------------------------------------------------
7563 C The rigorous attempt to derive energy function
7564 subroutine ebend_kcc(etheta)
7566 implicit real*8 (a-h,o-z)
7567 include 'DIMENSIONS'
7568 include 'DIMENSIONS.ZSCOPT'
7569 include 'COMMON.VAR'
7570 include 'COMMON.GEO'
7571 include 'COMMON.LOCAL'
7572 include 'COMMON.TORSION'
7573 include 'COMMON.INTERACT'
7574 include 'COMMON.DERIV'
7575 include 'COMMON.CHAIN'
7576 include 'COMMON.NAMES'
7577 include 'COMMON.IOUNITS'
7578 include 'COMMON.FFIELD'
7579 include 'COMMON.TORCNSTR'
7580 include 'COMMON.CONTROL'
7581 include 'COMMON.WEIGHTDER'
7583 double precision thybt1(maxang_kcc)
7584 C Set lprn=.true. for debugging
7587 C print *,"wchodze kcc"
7588 if (lprn) write (iout,*) "ebend_kcc tor_mode",tor_mode
7591 ebend_temp_kcc(j,i)=0.0d0
7595 do i=ithet_start,ithet_end
7596 c print *,i,itype(i-1),itype(i),itype(i-2)
7597 if ((itype(i-1).eq.ntyp1).or.itype(i-2).eq.ntyp1
7598 & .or.itype(i).eq.ntyp1) cycle
7599 iti=iabs(itortyp(itype(i-1)))
7600 sinthet=dsin(theta(i))
7601 costhet=dcos(theta(i))
7602 do j=1,nbend_kcc_Tb(iti)
7603 thybt1(j)=v1bend_chyb(j,iti)
7604 ebend_temp_kcc(j,iabs(iti))=
7605 & ebend_temp_kcc(j,iabs(iti))+dcos(j*theta(i))
7607 sumth1thyb=v1bend_chyb(0,iti)+
7608 & tschebyshev(1,nbend_kcc_Tb(iti),thybt1(1),costhet)
7609 if (lprn) write (iout,*) i-1,itype(i-1),iti,theta(i)*rad2deg,
7611 ihelp=nbend_kcc_Tb(iti)-1
7612 gradthybt1=gradtschebyshev(0,ihelp,thybt1(1),costhet)
7613 etheta=etheta+sumth1thyb
7614 C print *,sumth1thyb,gradthybt1,sinthet*(-0.5d0)
7615 gloc(nphi+i-2,icg)=gloc(nphi+i-2,icg)-wang*gradthybt1*sinthet
7616 gloc_compon(11,nphi+i-2)=gloc_compon(11,nphi+i-2)
7617 & -gradthybt1*sinthet
7621 c-------------------------------------------------------------------------------------
7622 subroutine etheta_constr(ethetacnstr)
7624 implicit real*8 (a-h,o-z)
7625 include 'DIMENSIONS'
7626 include 'DIMENSIONS.ZSCOPT'
7627 include 'COMMON.VAR'
7628 include 'COMMON.GEO'
7629 include 'COMMON.LOCAL'
7630 include 'COMMON.TORSION'
7631 include 'COMMON.INTERACT'
7632 include 'COMMON.DERIV'
7633 include 'COMMON.CHAIN'
7634 include 'COMMON.NAMES'
7635 include 'COMMON.IOUNITS'
7636 include 'COMMON.FFIELD'
7637 include 'COMMON.TORCNSTR'
7638 include 'COMMON.CONTROL'
7640 C print *,ithetaconstr_start,ithetaconstr_end,"TU"
7641 do i=ithetaconstr_start,ithetaconstr_end
7642 itheta=itheta_constr(i)
7643 thetiii=theta(itheta)
7644 difi=pinorm(thetiii-theta_constr0(i))
7645 if (difi.gt.theta_drange(i)) then
7646 difi=difi-theta_drange(i)
7647 ethetacnstr=ethetacnstr+0.25d0*for_thet_constr(i)*difi**4
7648 gloc(itheta+nphi-2,icg)=gloc(itheta+nphi-2,icg)
7649 & +for_thet_constr(i)*difi**3
7650 gloc_compon(11,itheta+nphi-2)=gloc_compon(11,itheta+nphi-2)
7651 & +for_thet_constr(i)*difi**3
7652 else if (difi.lt.-drange(i)) then
7654 ethetacnstr=ethetacnstr+0.25d0*for_thet_constr(i)*difi**4
7655 gloc(itheta+nphi-2,icg)=gloc(itheta+nphi-2,icg)
7656 & +for_thet_constr(i)*difi**3
7657 gloc_compon(11,itheta+nphi-2)=gloc_compon(11,itheta+nphi-2)
7658 & +for_thet_constr(i)*difi**3
7662 if (energy_dec) then
7663 write (iout,'(a6,2i5,4f8.3,2e14.5)') "ethetc",
7664 & i,itheta,rad2deg*thetiii,
7665 & rad2deg*theta_constr0(i), rad2deg*theta_drange(i),
7666 & rad2deg*difi,0.25d0*for_thet_constr(i)*difi**4,
7667 & gloc(itheta+nphi-2,icg)
7672 c------------------------------------------------------------------------------
7673 subroutine eback_sc_corr(esccor)
7674 c 7/21/2007 Correlations between the backbone-local and side-chain-local
7675 c conformational states; temporarily implemented as differences
7676 c between UNRES torsional potentials (dependent on three types of
7677 c residues) and the torsional potentials dependent on all 20 types
7678 c of residues computed from AM1 energy surfaces of terminally-blocked
7679 c amino-acid residues.
7680 implicit real*8 (a-h,o-z)
7681 include 'DIMENSIONS'
7682 include 'DIMENSIONS.ZSCOPT'
7683 include 'COMMON.VAR'
7684 include 'COMMON.GEO'
7685 include 'COMMON.LOCAL'
7686 include 'COMMON.TORSION'
7687 include 'COMMON.SCCOR'
7688 include 'COMMON.INTERACT'
7689 include 'COMMON.DERIV'
7690 include 'COMMON.CHAIN'
7691 include 'COMMON.NAMES'
7692 include 'COMMON.IOUNITS'
7693 include 'COMMON.FFIELD'
7694 include 'COMMON.CONTROL'
7696 C Set lprn=.true. for debugging
7699 c write (iout,*) "EBACK_SC_COR",iphi_start,iphi_end,nterm_sccor
7701 do i=itau_start,itau_end
7702 if ((itype(i-2).eq.ntyp1).or.(itype(i-1).eq.ntyp1)) cycle
7704 isccori=isccortyp(itype(i-2))
7705 isccori1=isccortyp(itype(i-1))
7707 do intertyp=1,3 !intertyp
7708 cc Added 09 May 2012 (Adasko)
7709 cc Intertyp means interaction type of backbone mainchain correlation:
7710 c 1 = SC...Ca...Ca...Ca
7711 c 2 = Ca...Ca...Ca...SC
7712 c 3 = SC...Ca...Ca...SCi
7714 if (((intertyp.eq.3).and.((itype(i-2).eq.10).or.
7715 & (itype(i-1).eq.10).or.(itype(i-2).eq.ntyp1).or.
7716 & (itype(i-1).eq.ntyp1)))
7717 & .or. ((intertyp.eq.1).and.((itype(i-2).eq.10)
7718 & .or.(itype(i-2).eq.ntyp1).or.(itype(i-1).eq.ntyp1)
7719 & .or.(itype(i).eq.ntyp1)))
7720 & .or.((intertyp.eq.2).and.((itype(i-1).eq.10).or.
7721 & (itype(i-1).eq.ntyp1).or.(itype(i-2).eq.ntyp1).or.
7722 & (itype(i-3).eq.ntyp1)))) cycle
7723 if ((intertyp.eq.2).and.(i.eq.4).and.(itype(1).eq.ntyp1)) cycle
7724 if ((intertyp.eq.1).and.(i.eq.nres).and.(itype(nres).eq.ntyp1))
7726 do j=1,nterm_sccor(isccori,isccori1)
7727 v1ij=v1sccor(j,intertyp,isccori,isccori1)
7728 v2ij=v2sccor(j,intertyp,isccori,isccori1)
7729 cosphi=dcos(j*tauangle(intertyp,i))
7730 sinphi=dsin(j*tauangle(intertyp,i))
7731 esccor=esccor+v1ij*cosphi+v2ij*sinphi
7732 gloci=gloci+j*(v2ij*cosphi-v1ij*sinphi)
7734 C write (iout,*)"EBACK_SC_COR",esccor,i
7735 c write (iout,*) "EBACK_SC_COR",i,v1ij*cosphi+v2ij*sinphi,intertyp,
7736 c & nterm_sccor(isccori,isccori1),isccori,isccori1
7737 c gloc_sc(intertyp,i-3,icg)=gloc_sc(intertyp,i-3,icg)+wsccor*gloci
7739 & write (iout,'(2(a3,2x,i3,2x),2i3,6f8.3/26x,6f8.3/)')
7740 & restyp(itype(i-2)),i-2,restyp(itype(i-1)),i-1,itori,itori1,
7741 & (v1sccor(j,1,itori,itori1),j=1,6)
7742 & ,(v2sccor(j,1,itori,itori1),j=1,6)
7743 c gsccor_loc(i-3)=gloci
7748 c------------------------------------------------------------------------------
7749 subroutine multibody(ecorr)
7750 C This subroutine calculates multi-body contributions to energy following
7751 C the idea of Skolnick et al. If side chains I and J make a contact and
7752 C at the same time side chains I+1 and J+1 make a contact, an extra
7753 C contribution equal to sqrt(eps(i,j)*eps(i+1,j+1)) is added.
7754 implicit real*8 (a-h,o-z)
7755 include 'DIMENSIONS'
7756 include 'DIMENSIONS.ZSCOPT'
7757 include 'COMMON.IOUNITS'
7758 include 'COMMON.DERIV'
7759 include 'COMMON.INTERACT'
7760 include 'COMMON.CONTACTS'
7761 double precision gx(3),gx1(3)
7764 C Set lprn=.true. for debugging
7768 write (iout,'(a)') 'Contact function values:'
7770 write (iout,'(i2,20(1x,i2,f10.5))')
7771 & i,(jcont(j,i),facont(j,i),j=1,num_cont(i))
7786 num_conti=num_cont(i)
7787 num_conti1=num_cont(i1)
7792 if (j1.eq.j+ishift .or. j1.eq.j-ishift) then
7793 cd write(iout,*)'i=',i,' j=',j,' i1=',i1,' j1=',j1,
7794 cd & ' ishift=',ishift
7795 C Contacts I--J and I+ISHIFT--J+-ISHIFT1 occur simultaneously.
7796 C The system gains extra energy.
7797 ecorr=ecorr+esccorr(i,j,i1,j1,jj,kk)
7798 endif ! j1==j+-ishift
7807 c------------------------------------------------------------------------------
7808 double precision function esccorr(i,j,k,l,jj,kk)
7809 implicit real*8 (a-h,o-z)
7810 include 'DIMENSIONS'
7811 include 'DIMENSIONS.ZSCOPT'
7812 include 'COMMON.IOUNITS'
7813 include 'COMMON.DERIV'
7814 include 'COMMON.INTERACT'
7815 include 'COMMON.CONTACTS'
7816 double precision gx(3),gx1(3)
7821 cd write (iout,'(4i5,3f10.5)') i,j,k,l,eij,ekl,-eij*ekl
7822 C Calculate the multi-body contribution to energy.
7823 C Calculate multi-body contributions to the gradient.
7824 cd write (iout,'(2(2i3,3f10.5))')i,j,(gacont(m,jj,i),m=1,3),
7825 cd & k,l,(gacont(m,kk,k),m=1,3)
7827 gx(m) =ekl*gacont(m,jj,i)
7828 gx1(m)=eij*gacont(m,kk,k)
7829 gradxorr(m,i)=gradxorr(m,i)-gx(m)
7830 gradxorr(m,j)=gradxorr(m,j)+gx(m)
7831 gradxorr(m,k)=gradxorr(m,k)-gx1(m)
7832 gradxorr(m,l)=gradxorr(m,l)+gx1(m)
7836 gradcorr(ll,m)=gradcorr(ll,m)+gx(ll)
7841 gradcorr(ll,m)=gradcorr(ll,m)+gx1(ll)
7847 c------------------------------------------------------------------------------
7848 subroutine multibody_hb(ecorr,ecorr5,ecorr6,n_corr,n_corr1)
7849 C This subroutine calculates multi-body contributions to hydrogen-bonding
7850 implicit real*8 (a-h,o-z)
7851 include 'DIMENSIONS'
7852 include 'DIMENSIONS.ZSCOPT'
7853 include 'COMMON.IOUNITS'
7854 include 'COMMON.FFIELD'
7855 include 'COMMON.DERIV'
7856 include 'COMMON.INTERACT'
7857 include 'COMMON.CONTACTS'
7858 double precision gx(3),gx1(3)
7861 C Set lprn=.true. for debugging
7864 write (iout,'(a)') 'Contact function values:'
7866 write (iout,'(2i3,50(1x,i2,f5.2))')
7867 & i,num_cont_hb(i),(jcont_hb(j,i),facont_hb(j,i),
7868 & j=1,num_cont_hb(i))
7872 C Remove the loop below after debugging !!!
7879 C Calculate the local-electrostatic correlation terms
7880 do i=iatel_s,iatel_e+1
7882 num_conti=num_cont_hb(i)
7883 num_conti1=num_cont_hb(i+1)
7888 c write (iout,*) 'i=',i,' j=',j,' i1=',i1,' j1=',j1,
7889 c & ' jj=',jj,' kk=',kk
7890 if (j1.eq.j+1 .or. j1.eq.j-1) then
7891 C Contacts I-J and (I+1)-(J+1) or (I+1)-(J-1) occur simultaneously.
7892 C The system gains extra energy.
7893 ecorr=ecorr+ehbcorr(i,j,i+1,j1,jj,kk,0.72D0,0.32D0)
7895 else if (j1.eq.j) then
7896 C Contacts I-J and I-(J+1) occur simultaneously.
7897 C The system loses extra energy.
7898 c ecorr=ecorr+ehbcorr(i,j,i+1,j,jj,kk,0.60D0,-0.40D0)
7903 c write (iout,*) 'i=',i,' j=',j,' i1=',i1,' j1=',j1,
7904 c & ' jj=',jj,' kk=',kk
7906 C Contacts I-J and (I+1)-J occur simultaneously.
7907 C The system loses extra energy.
7908 c ecorr=ecorr+ehbcorr(i,j,i,j+1,jj,kk,0.60D0,-0.40D0)
7915 c------------------------------------------------------------------------------
7916 subroutine multibody_eello(ecorr,ecorr5,ecorr6,eturn6,n_corr,
7918 C This subroutine calculates multi-body contributions to hydrogen-bonding
7919 implicit real*8 (a-h,o-z)
7920 include 'DIMENSIONS'
7921 include 'DIMENSIONS.ZSCOPT'
7922 include 'COMMON.IOUNITS'
7926 include 'COMMON.FFIELD'
7927 include 'COMMON.DERIV'
7928 include 'COMMON.LOCAL'
7929 include 'COMMON.INTERACT'
7930 include 'COMMON.CONTACTS'
7931 include 'COMMON.CHAIN'
7932 include 'COMMON.CONTROL'
7933 include 'COMMON.SHIELD'
7934 double precision gx(3),gx1(3)
7935 integer num_cont_hb_old(maxres)
7937 double precision eello4,eello5,eelo6,eello_turn6
7938 external eello4,eello5,eello6,eello_turn6
7939 C Set lprn=.true. for debugging
7943 write (iout,'(a)') 'Contact function values:'
7945 write (iout,'(2i3,50(1x,i2,5f6.3))')
7946 & i,num_cont_hb(i),(jcont_hb(j,i),d_cont(j,i),
7947 & ((a_chuj(ll,kk,j,i),ll=1,2),kk=1,2),j=1,num_cont_hb(i))
7953 C Remove the loop below after debugging !!!
7960 C Calculate the dipole-dipole interaction energies
7961 if (wcorr6.gt.0.0d0 .or. wturn6.gt.0.0d0) then
7962 do i=iatel_s,iatel_e+1
7963 num_conti=num_cont_hb(i)
7972 C Calculate the local-electrostatic correlation terms
7973 c write (iout,*) "gradcorr5 in eello5 before loop"
7975 c write (iout,'(i5,3f10.5)')
7976 c & iii,(gradcorr5(jjj,iii),jjj=1,3)
7978 do i=min0(iatel_s,iturn4_start),max0(iatel_e+1,iturn3_end+1)
7979 c write (iout,*) "corr loop i",i
7981 num_conti=num_cont_hb(i)
7982 num_conti1=num_cont_hb(i+1)
7989 c write (iout,*) 'i=',i,' j=',j,' i1=',i1,' j1=',j1,
7990 c & ' jj=',jj,' kk=',kk
7991 c if (j1.eq.j+1 .or. j1.eq.j-1) then
7992 if ((j.gt.0 .and. j1.gt.0 .or. j.gt.0 .and. j1.lt.0
7993 & .or. j.lt.0 .and. j1.gt.0) .and.
7994 & (jp1.eq.jp+1 .or. jp1.eq.jp-1)) then
7995 C Contacts I-J and (I+1)-(J+1) or (I+1)-(J-1) occur simultaneously.
7996 C The system gains extra energy.
7998 sqd1=dsqrt(d_cont(jj,i))
7999 sqd2=dsqrt(d_cont(kk,i1))
8000 sred_geom = sqd1*sqd2
8001 IF (sred_geom.lt.cutoff_corr) THEN
8002 call gcont(sred_geom,r0_corr,1.0D0,delt_corr,
8004 cd write (iout,*) 'i=',i,' j=',jp,' i1=',i1,' j1=',jp1,
8005 cd & ' jj=',jj,' kk=',kk
8006 fac_prim1=0.5d0*sqd2/sqd1*fprimcont
8007 fac_prim2=0.5d0*sqd1/sqd2*fprimcont
8009 g_contij(l,1)=fac_prim1*grij_hb_cont(l,jj,i)
8010 g_contij(l,2)=fac_prim2*grij_hb_cont(l,kk,i1)
8013 cd write (iout,*) 'sred_geom=',sred_geom,
8014 cd & ' ekont=',ekont,' fprim=',fprimcont,
8015 cd & ' fac_prim1',fac_prim1,' fac_prim2',fac_prim2
8016 cd write (iout,*) "g_contij",g_contij
8017 cd write (iout,*) "grij_hb_cont i",grij_hb_cont(:,jj,i)
8018 cd write (iout,*) "grij_hb_cont i1",grij_hb_cont(:,jj,i1)
8019 call calc_eello(i,jp,i+1,jp1,jj,kk)
8020 if (wcorr4.gt.0.0d0)
8021 & ecorr=ecorr+eello4(i,jp,i+1,jp1,jj,kk)
8022 CC & *fac_shield(i)**2*fac_shield(j)**2
8023 if (energy_dec.and.wcorr4.gt.0.0d0)
8024 1 write (iout,'(a6,4i5,0pf7.3)')
8025 2 'ecorr4',i,j,i+1,j1,eello4(i,jp,i+1,jp1,jj,kk)
8026 c write (iout,*) "gradcorr5 before eello5"
8028 c write (iout,'(i5,3f10.5)')
8029 c & iii,(gradcorr5(jjj,iii),jjj=1,3)
8031 if (wcorr5.gt.0.0d0)
8032 & ecorr5=ecorr5+eello5(i,jp,i+1,jp1,jj,kk)
8033 c write (iout,*) "gradcorr5 after eello5"
8035 c write (iout,'(i5,3f10.5)')
8036 c & iii,(gradcorr5(jjj,iii),jjj=1,3)
8038 if (energy_dec.and.wcorr5.gt.0.0d0)
8039 1 write (iout,'(a6,4i5,0pf7.3)')
8040 2 'ecorr5',i,j,i+1,j1,eello5(i,jp,i+1,jp1,jj,kk)
8041 cd write(2,*)'wcorr6',wcorr6,' wturn6',wturn6
8042 cd write(2,*)'ijkl',i,jp,i+1,jp1
8043 if (wcorr6.gt.0.0d0 .and. (jp.ne.i+4 .or. jp1.ne.i+3
8044 & .or. wturn6.eq.0.0d0))then
8045 cd write (iout,*) '******ecorr6: i,j,i+1,j1',i,j,i+1,j1
8046 ecorr6=ecorr6+eello6(i,jp,i+1,jp1,jj,kk)
8047 if (energy_dec) write (iout,'(a6,4i5,0pf7.3)')
8048 1 'ecorr6',i,j,i+1,j1,eello6(i,jp,i+1,jp1,jj,kk)
8049 cd write (iout,*) 'ecorr',ecorr,' ecorr5=',ecorr5,
8050 cd & 'ecorr6=',ecorr6
8051 cd write (iout,'(4e15.5)') sred_geom,
8052 cd & dabs(eello4(i,jp,i+1,jp1,jj,kk)),
8053 cd & dabs(eello5(i,jp,i+1,jp1,jj,kk)),
8054 cd & dabs(eello6(i,jp,i+1,jp1,jj,kk))
8055 else if (wturn6.gt.0.0d0
8056 & .and. (jp.eq.i+4 .and. jp1.eq.i+3)) then
8057 cd write (iout,*) '******eturn6: i,j,i+1,j1',i,jip,i+1,jp1
8058 eturn6=eturn6+eello_turn6(i,jj,kk)
8059 if (energy_dec) write (iout,'(a6,4i5,0pf7.3)')
8060 1 'eturn6',i,j,i+1,j1,eello_turn6(i,jj,kk)
8061 cd write (2,*) 'multibody_eello:eturn6',eturn6
8070 num_cont_hb(i)=num_cont_hb_old(i)
8072 c write (iout,*) "gradcorr5 in eello5"
8074 c write (iout,'(i5,3f10.5)')
8075 c & iii,(gradcorr5(jjj,iii),jjj=1,3)
8079 c------------------------------------------------------------------------------
8080 double precision function ehbcorr(i,j,k,l,jj,kk,coeffp,coeffm)
8081 implicit real*8 (a-h,o-z)
8082 include 'DIMENSIONS'
8083 include 'DIMENSIONS.ZSCOPT'
8084 include 'COMMON.IOUNITS'
8085 include 'COMMON.DERIV'
8086 include 'COMMON.INTERACT'
8087 include 'COMMON.CONTACTS'
8088 include 'COMMON.SHIELD'
8089 include 'COMMON.CONTROL'
8090 double precision gx(3),gx1(3)
8093 C print *,"wchodze",fac_shield(i),shield_mode
8101 ees=-(coeffp*ees0pij*ees0pkl+coeffm*ees0mij*ees0mkl)
8103 C & fac_shield(i)**2*fac_shield(j)**2
8104 cd ees=-(coeffp*ees0pkl+coeffm*ees0mkl)
8105 C Following 4 lines for diagnostics.
8110 c write (iout,'(2(a,2i3,a,f10.5,a,2f10.5),a,f10.5,a,$)')
8111 c & 'Contacts ',i,j,
8112 c & ' eij',eij,' eesij',ees0pij,ees0mij,' and ',k,l
8113 c & ,' fcont ',ekl,' eeskl',ees0pkl,ees0mkl,' energy=',ekont*ees,
8115 C Calculate the multi-body contribution to energy.
8116 C ecorr=ecorr+ekont*ees
8117 C Calculate multi-body contributions to the gradient.
8118 coeffpees0pij=coeffp*ees0pij
8119 coeffmees0mij=coeffm*ees0mij
8120 coeffpees0pkl=coeffp*ees0pkl
8121 coeffmees0mkl=coeffm*ees0mkl
8123 cgrad ghalfi=ees*ekl*gacont_hbr(ll,jj,i)
8124 gradcorr(ll,i)=gradcorr(ll,i)!+0.5d0*ghalfi
8125 & -ekont*(coeffpees0pkl*gacontp_hb1(ll,jj,i)+
8126 & coeffmees0mkl*gacontm_hb1(ll,jj,i))
8127 gradcorr(ll,j)=gradcorr(ll,j)!+0.5d0*ghalfi
8128 & -ekont*(coeffpees0pkl*gacontp_hb2(ll,jj,i)+
8129 & coeffmees0mkl*gacontm_hb2(ll,jj,i))
8130 cgrad ghalfk=ees*eij*gacont_hbr(ll,kk,k)
8131 gradcorr(ll,k)=gradcorr(ll,k)!+0.5d0*ghalfk
8132 & -ekont*(coeffpees0pij*gacontp_hb1(ll,kk,k)+
8133 & coeffmees0mij*gacontm_hb1(ll,kk,k))
8134 gradcorr(ll,l)=gradcorr(ll,l)!+0.5d0*ghalfk
8135 & -ekont*(coeffpees0pij*gacontp_hb2(ll,kk,k)+
8136 & coeffmees0mij*gacontm_hb2(ll,kk,k))
8137 gradlongij=ees*ekl*gacont_hbr(ll,jj,i)-
8138 & ekont*(coeffpees0pkl*gacontp_hb3(ll,jj,i)+
8139 & coeffmees0mkl*gacontm_hb3(ll,jj,i))
8140 gradcorr_long(ll,j)=gradcorr_long(ll,j)+gradlongij
8141 gradcorr_long(ll,i)=gradcorr_long(ll,i)-gradlongij
8142 gradlongkl=ees*eij*gacont_hbr(ll,kk,k)-
8143 & ekont*(coeffpees0pij*gacontp_hb3(ll,kk,k)+
8144 & coeffmees0mij*gacontm_hb3(ll,kk,k))
8145 gradcorr_long(ll,l)=gradcorr_long(ll,l)+gradlongkl
8146 gradcorr_long(ll,k)=gradcorr_long(ll,k)-gradlongkl
8147 c write (iout,'(2f10.5,2x,$)') gradlongij,gradlongkl
8152 cgrad gradcorr(ll,m)=gradcorr(ll,m)+
8153 cgrad & ees*ekl*gacont_hbr(ll,jj,i)-
8154 cgrad & ekont*(coeffp*ees0pkl*gacontp_hb3(ll,jj,i)+
8155 cgrad & coeffm*ees0mkl*gacontm_hb3(ll,jj,i))
8160 cgrad gradcorr(ll,m)=gradcorr(ll,m)+
8161 cgrad & ees*eij*gacont_hbr(ll,kk,k)-
8162 cgrad & ekont*(coeffp*ees0pij*gacontp_hb3(ll,kk,k)+
8163 cgrad & coeffm*ees0mij*gacontm_hb3(ll,kk,k))
8166 c write (iout,*) "ehbcorr",ekont*ees
8167 C print *,ekont,ees,i,k
8169 C now gradient over shielding
8171 if (shield_mode.gt.0) then
8174 C print *,i,j,fac_shield(i),fac_shield(j),
8175 C &fac_shield(k),fac_shield(l)
8176 if ((fac_shield(i).gt.0).and.(fac_shield(j).gt.0).and.
8177 & (fac_shield(k).gt.0).and.(fac_shield(l).gt.0)) then
8178 do ilist=1,ishield_list(i)
8179 iresshield=shield_list(ilist,i)
8181 rlocshield=grad_shield_side(m,ilist,i)*ehbcorr/fac_shield(i)
8183 gshieldx_ec(m,iresshield)=gshieldx_ec(m,iresshield)+
8185 & +grad_shield_loc(m,ilist,i)*ehbcorr/fac_shield(i)
8186 gshieldc_ec(m,iresshield-1)=gshieldc_ec(m,iresshield-1)
8190 do ilist=1,ishield_list(j)
8191 iresshield=shield_list(ilist,j)
8193 rlocshield=grad_shield_side(m,ilist,j)*ehbcorr/fac_shield(j)
8195 gshieldx_ec(m,iresshield)=gshieldx_ec(m,iresshield)+
8197 & +grad_shield_loc(m,ilist,j)*ehbcorr/fac_shield(j)
8198 gshieldc_ec(m,iresshield-1)=gshieldc_ec(m,iresshield-1)
8203 do ilist=1,ishield_list(k)
8204 iresshield=shield_list(ilist,k)
8206 rlocshield=grad_shield_side(m,ilist,k)*ehbcorr/fac_shield(k)
8208 gshieldx_ec(m,iresshield)=gshieldx_ec(m,iresshield)+
8210 & +grad_shield_loc(m,ilist,k)*ehbcorr/fac_shield(k)
8211 gshieldc_ec(m,iresshield-1)=gshieldc_ec(m,iresshield-1)
8215 do ilist=1,ishield_list(l)
8216 iresshield=shield_list(ilist,l)
8218 rlocshield=grad_shield_side(m,ilist,l)*ehbcorr/fac_shield(l)
8220 gshieldx_ec(m,iresshield)=gshieldx_ec(m,iresshield)+
8222 & +grad_shield_loc(m,ilist,l)*ehbcorr/fac_shield(l)
8223 gshieldc_ec(m,iresshield-1)=gshieldc_ec(m,iresshield-1)
8227 C print *,gshieldx(m,iresshield)
8229 gshieldc_ec(m,i)=gshieldc_ec(m,i)+
8230 & grad_shield(m,i)*ehbcorr/fac_shield(i)
8231 gshieldc_ec(m,j)=gshieldc_ec(m,j)+
8232 & grad_shield(m,j)*ehbcorr/fac_shield(j)
8233 gshieldc_ec(m,i-1)=gshieldc_ec(m,i-1)+
8234 & grad_shield(m,i)*ehbcorr/fac_shield(i)
8235 gshieldc_ec(m,j-1)=gshieldc_ec(m,j-1)+
8236 & grad_shield(m,j)*ehbcorr/fac_shield(j)
8238 gshieldc_ec(m,k)=gshieldc_ec(m,k)+
8239 & grad_shield(m,k)*ehbcorr/fac_shield(k)
8240 gshieldc_ec(m,l)=gshieldc_ec(m,l)+
8241 & grad_shield(m,l)*ehbcorr/fac_shield(l)
8242 gshieldc_ec(m,k-1)=gshieldc_ec(m,k-1)+
8243 & grad_shield(m,k)*ehbcorr/fac_shield(k)
8244 gshieldc_ec(m,l-1)=gshieldc_ec(m,l-1)+
8245 & grad_shield(m,l)*ehbcorr/fac_shield(l)
8253 C---------------------------------------------------------------------------
8254 subroutine dipole(i,j,jj)
8255 implicit real*8 (a-h,o-z)
8256 include 'DIMENSIONS'
8257 include 'DIMENSIONS.ZSCOPT'
8258 include 'COMMON.IOUNITS'
8259 include 'COMMON.CHAIN'
8260 include 'COMMON.FFIELD'
8261 include 'COMMON.DERIV'
8262 include 'COMMON.INTERACT'
8263 include 'COMMON.CONTACTS'
8264 include 'COMMON.TORSION'
8265 include 'COMMON.VAR'
8266 include 'COMMON.GEO'
8267 dimension dipi(2,2),dipj(2,2),dipderi(2),dipderj(2),auxvec(2),
8269 iti1 = itortyp(itype(i+1))
8270 if (j.lt.nres-1) then
8271 itj1 = itype2loc(itype(j+1))
8276 dipi(iii,1)=Ub2(iii,i)
8277 dipderi(iii)=Ub2der(iii,i)
8278 dipi(iii,2)=b1(iii,i+1)
8279 dipj(iii,1)=Ub2(iii,j)
8280 dipderj(iii)=Ub2der(iii,j)
8281 dipj(iii,2)=b1(iii,j+1)
8285 call matvec2(a_chuj(1,1,jj,i),dipj(1,iii),auxvec(1))
8288 dip(kkk,jj,i)=scalar2(dipi(1,jjj),auxvec(1))
8295 call matvec2(a_chuj_der(1,1,lll,kkk,jj,i),dipj(1,iii),
8299 dipderx(lll,kkk,mmm,jj,i)=scalar2(dipi(1,jjj),auxvec(1))
8304 call transpose2(a_chuj(1,1,jj,i),auxmat(1,1))
8305 call matvec2(auxmat(1,1),dipderi(1),auxvec(1))
8307 dipderg(iii,jj,i)=scalar2(auxvec(1),dipj(1,iii))
8309 call matvec2(a_chuj(1,1,jj,i),dipderj(1),auxvec(1))
8311 dipderg(iii+2,jj,i)=scalar2(auxvec(1),dipi(1,iii))
8316 C---------------------------------------------------------------------------
8317 subroutine calc_eello(i,j,k,l,jj,kk)
8319 C This subroutine computes matrices and vectors needed to calculate
8320 C the fourth-, fifth-, and sixth-order local-electrostatic terms.
8322 implicit real*8 (a-h,o-z)
8323 include 'DIMENSIONS'
8324 include 'DIMENSIONS.ZSCOPT'
8325 include 'COMMON.IOUNITS'
8326 include 'COMMON.CHAIN'
8327 include 'COMMON.DERIV'
8328 include 'COMMON.INTERACT'
8329 include 'COMMON.CONTACTS'
8330 include 'COMMON.TORSION'
8331 include 'COMMON.VAR'
8332 include 'COMMON.GEO'
8333 include 'COMMON.FFIELD'
8334 double precision aa1(2,2),aa2(2,2),aa1t(2,2),aa2t(2,2),
8335 & aa1tder(2,2,3,5),aa2tder(2,2,3,5),auxmat(2,2)
8338 cd write (iout,*) 'calc_eello: i=',i,' j=',j,' k=',k,' l=',l,
8339 cd & ' jj=',jj,' kk=',kk
8340 cd if (i.ne.2 .or. j.ne.4 .or. k.ne.3 .or. l.ne.5) return
8341 cd write (iout,*) "a_chujij",((a_chuj(iii,jjj,jj,i),iii=1,2),jjj=1,2)
8342 cd write (iout,*) "a_chujkl",((a_chuj(iii,jjj,kk,k),iii=1,2),jjj=1,2)
8345 aa1(iii,jjj)=a_chuj(iii,jjj,jj,i)
8346 aa2(iii,jjj)=a_chuj(iii,jjj,kk,k)
8349 call transpose2(aa1(1,1),aa1t(1,1))
8350 call transpose2(aa2(1,1),aa2t(1,1))
8353 call transpose2(a_chuj_der(1,1,lll,kkk,jj,i),
8354 & aa1tder(1,1,lll,kkk))
8355 call transpose2(a_chuj_der(1,1,lll,kkk,kk,k),
8356 & aa2tder(1,1,lll,kkk))
8360 C parallel orientation of the two CA-CA-CA frames.
8362 iti=itype2loc(itype(i))
8366 itk1=itype2loc(itype(k+1))
8367 itj=itype2loc(itype(j))
8368 if (l.lt.nres-1) then
8369 itl1=itype2loc(itype(l+1))
8373 C A1 kernel(j+1) A2T
8375 cd write (iout,'(3f10.5,5x,3f10.5)')
8376 cd & (EUg(iii,jjj,k),jjj=1,2),(EUg(iii,jjj,l),jjj=1,2)
8378 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
8379 & aa2tder(1,1,1,1),1,.false.,EUg(1,1,l),EUgder(1,1,l),
8380 & AEA(1,1,1),AEAderg(1,1,1),AEAderx(1,1,1,1,1,1))
8381 C Following matrices are needed only for 6-th order cumulants
8382 IF (wcorr6.gt.0.0d0) THEN
8383 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
8384 & aa2tder(1,1,1,1),1,.false.,EUgC(1,1,l),EUgCder(1,1,l),
8385 & AECA(1,1,1),AECAderg(1,1,1),AECAderx(1,1,1,1,1,1))
8386 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
8387 & aa2tder(1,1,1,1),2,.false.,Ug2DtEUg(1,1,l),
8388 & Ug2DtEUgder(1,1,1,l),ADtEA(1,1,1),ADtEAderg(1,1,1,1),
8389 & ADtEAderx(1,1,1,1,1,1))
8391 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
8392 & aa2tder(1,1,1,1),2,.false.,DtUg2EUg(1,1,l),
8393 & DtUg2EUgder(1,1,1,l),ADtEA1(1,1,1),ADtEA1derg(1,1,1,1),
8394 & ADtEA1derx(1,1,1,1,1,1))
8396 C End 6-th order cumulants
8399 cd write (2,*) 'In calc_eello6'
8401 cd write (2,*) 'iii=',iii
8403 cd write (2,*) 'kkk=',kkk
8405 cd write (2,'(3(2f10.5),5x)')
8406 cd & ((ADtEA1derx(jjj,mmm,lll,kkk,iii,1),mmm=1,2),lll=1,3)
8411 call transpose2(EUgder(1,1,k),auxmat(1,1))
8412 call matmat2(auxmat(1,1),AEA(1,1,1),EAEAderg(1,1,1,1))
8413 call transpose2(EUg(1,1,k),auxmat(1,1))
8414 call matmat2(auxmat(1,1),AEA(1,1,1),EAEA(1,1,1))
8415 call matmat2(auxmat(1,1),AEAderg(1,1,1),EAEAderg(1,1,2,1))
8419 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,1),
8420 & EAEAderx(1,1,lll,kkk,iii,1))
8424 C A1T kernel(i+1) A2
8425 call kernel(aa1t(1,1),aa2(1,1),aa1tder(1,1,1,1),
8426 & a_chuj_der(1,1,1,1,kk,k),1,.false.,EUg(1,1,k),EUgder(1,1,k),
8427 & AEA(1,1,2),AEAderg(1,1,2),AEAderx(1,1,1,1,1,2))
8428 C Following matrices are needed only for 6-th order cumulants
8429 IF (wcorr6.gt.0.0d0) THEN
8430 call kernel(aa1t(1,1),aa2(1,1),aa1tder(1,1,1,1),
8431 & a_chuj_der(1,1,1,1,kk,k),1,.false.,EUgC(1,1,k),EUgCder(1,1,k),
8432 & AECA(1,1,2),AECAderg(1,1,2),AECAderx(1,1,1,1,1,2))
8433 call kernel(aa1t(1,1),aa2(1,1),aa1tder(1,1,1,1),
8434 & a_chuj_der(1,1,1,1,kk,k),2,.false.,Ug2DtEUg(1,1,k),
8435 & Ug2DtEUgder(1,1,1,k),ADtEA(1,1,2),ADtEAderg(1,1,1,2),
8436 & ADtEAderx(1,1,1,1,1,2))
8437 call kernel(aa1t(1,1),aa2(1,1),aa1tder(1,1,1,1),
8438 & a_chuj_der(1,1,1,1,kk,k),2,.false.,DtUg2EUg(1,1,k),
8439 & DtUg2EUgder(1,1,1,k),ADtEA1(1,1,2),ADtEA1derg(1,1,1,2),
8440 & ADtEA1derx(1,1,1,1,1,2))
8442 C End 6-th order cumulants
8443 call transpose2(EUgder(1,1,l),auxmat(1,1))
8444 call matmat2(auxmat(1,1),AEA(1,1,2),EAEAderg(1,1,1,2))
8445 call transpose2(EUg(1,1,l),auxmat(1,1))
8446 call matmat2(auxmat(1,1),AEA(1,1,2),EAEA(1,1,2))
8447 call matmat2(auxmat(1,1),AEAderg(1,1,2),EAEAderg(1,1,2,2))
8451 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,2),
8452 & EAEAderx(1,1,lll,kkk,iii,2))
8457 C Calculate the vectors and their derivatives in virtual-bond dihedral angles.
8458 C They are needed only when the fifth- or the sixth-order cumulants are
8460 IF (wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0) THEN
8461 call transpose2(AEA(1,1,1),auxmat(1,1))
8462 call matvec2(auxmat(1,1),b1(1,i),AEAb1(1,1,1))
8463 call matvec2(auxmat(1,1),Ub2(1,i),AEAb2(1,1,1))
8464 call matvec2(auxmat(1,1),Ub2der(1,i),AEAb2derg(1,2,1,1))
8465 call transpose2(AEAderg(1,1,1),auxmat(1,1))
8466 call matvec2(auxmat(1,1),b1(1,i),AEAb1derg(1,1,1))
8467 call matvec2(auxmat(1,1),Ub2(1,i),AEAb2derg(1,1,1,1))
8468 call matvec2(AEA(1,1,1),b1(1,k+1),AEAb1(1,2,1))
8469 call matvec2(AEAderg(1,1,1),b1(1,k+1),AEAb1derg(1,2,1))
8470 call matvec2(AEA(1,1,1),Ub2(1,k+1),AEAb2(1,2,1))
8471 call matvec2(AEAderg(1,1,1),Ub2(1,k+1),AEAb2derg(1,1,2,1))
8472 call matvec2(AEA(1,1,1),Ub2der(1,k+1),AEAb2derg(1,2,2,1))
8473 call transpose2(AEA(1,1,2),auxmat(1,1))
8474 call matvec2(auxmat(1,1),b1(1,j),AEAb1(1,1,2))
8475 call matvec2(auxmat(1,1),Ub2(1,j),AEAb2(1,1,2))
8476 call matvec2(auxmat(1,1),Ub2der(1,j),AEAb2derg(1,2,1,2))
8477 call transpose2(AEAderg(1,1,2),auxmat(1,1))
8478 call matvec2(auxmat(1,1),b1(1,j),AEAb1derg(1,1,2))
8479 call matvec2(auxmat(1,1),Ub2(1,j),AEAb2derg(1,1,1,2))
8480 call matvec2(AEA(1,1,2),b1(1,l+1),AEAb1(1,2,2))
8481 call matvec2(AEAderg(1,1,2),b1(1,l+1),AEAb1derg(1,2,2))
8482 call matvec2(AEA(1,1,2),Ub2(1,l+1),AEAb2(1,2,2))
8483 call matvec2(AEAderg(1,1,2),Ub2(1,l+1),AEAb2derg(1,1,2,2))
8484 call matvec2(AEA(1,1,2),Ub2der(1,l+1),AEAb2derg(1,2,2,2))
8485 C Calculate the Cartesian derivatives of the vectors.
8489 call transpose2(AEAderx(1,1,lll,kkk,iii,1),auxmat(1,1))
8490 call matvec2(auxmat(1,1),b1(1,i),
8491 & AEAb1derx(1,lll,kkk,iii,1,1))
8492 call matvec2(auxmat(1,1),Ub2(1,i),
8493 & AEAb2derx(1,lll,kkk,iii,1,1))
8494 call matvec2(AEAderx(1,1,lll,kkk,iii,1),b1(1,k+1),
8495 & AEAb1derx(1,lll,kkk,iii,2,1))
8496 call matvec2(AEAderx(1,1,lll,kkk,iii,1),Ub2(1,k+1),
8497 & AEAb2derx(1,lll,kkk,iii,2,1))
8498 call transpose2(AEAderx(1,1,lll,kkk,iii,2),auxmat(1,1))
8499 call matvec2(auxmat(1,1),b1(1,j),
8500 & AEAb1derx(1,lll,kkk,iii,1,2))
8501 call matvec2(auxmat(1,1),Ub2(1,j),
8502 & AEAb2derx(1,lll,kkk,iii,1,2))
8503 call matvec2(AEAderx(1,1,lll,kkk,iii,2),b1(1,l+1),
8504 & AEAb1derx(1,lll,kkk,iii,2,2))
8505 call matvec2(AEAderx(1,1,lll,kkk,iii,2),Ub2(1,l+1),
8506 & AEAb2derx(1,lll,kkk,iii,2,2))
8513 C Antiparallel orientation of the two CA-CA-CA frames.
8515 iti=itype2loc(itype(i))
8519 itk1=itype2loc(itype(k+1))
8520 itl=itype2loc(itype(l))
8521 itj=itype2loc(itype(j))
8522 if (j.lt.nres-1) then
8523 itj1=itype2loc(itype(j+1))
8527 C A2 kernel(j-1)T A1T
8528 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
8529 & aa2tder(1,1,1,1),1,.true.,EUg(1,1,j),EUgder(1,1,j),
8530 & AEA(1,1,1),AEAderg(1,1,1),AEAderx(1,1,1,1,1,1))
8531 C Following matrices are needed only for 6-th order cumulants
8532 IF (wcorr6.gt.0.0d0 .or. (wturn6.gt.0.0d0 .and.
8533 & j.eq.i+4 .and. l.eq.i+3)) THEN
8534 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
8535 & aa2tder(1,1,1,1),1,.true.,EUgC(1,1,j),EUgCder(1,1,j),
8536 & AECA(1,1,1),AECAderg(1,1,1),AECAderx(1,1,1,1,1,1))
8537 call kernel(aa2(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
8538 & aa2tder(1,1,1,1),2,.true.,Ug2DtEUg(1,1,j),
8539 & Ug2DtEUgder(1,1,1,j),ADtEA(1,1,1),ADtEAderg(1,1,1,1),
8540 & ADtEAderx(1,1,1,1,1,1))
8541 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
8542 & aa2tder(1,1,1,1),2,.true.,DtUg2EUg(1,1,j),
8543 & DtUg2EUgder(1,1,1,j),ADtEA1(1,1,1),ADtEA1derg(1,1,1,1),
8544 & ADtEA1derx(1,1,1,1,1,1))
8546 C End 6-th order cumulants
8547 call transpose2(EUgder(1,1,k),auxmat(1,1))
8548 call matmat2(auxmat(1,1),AEA(1,1,1),EAEAderg(1,1,1,1))
8549 call transpose2(EUg(1,1,k),auxmat(1,1))
8550 call matmat2(auxmat(1,1),AEA(1,1,1),EAEA(1,1,1))
8551 call matmat2(auxmat(1,1),AEAderg(1,1,1),EAEAderg(1,1,2,1))
8555 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,1),
8556 & EAEAderx(1,1,lll,kkk,iii,1))
8560 C A2T kernel(i+1)T A1
8561 call kernel(aa2t(1,1),aa1(1,1),aa2tder(1,1,1,1),
8562 & a_chuj_der(1,1,1,1,jj,i),1,.true.,EUg(1,1,k),EUgder(1,1,k),
8563 & AEA(1,1,2),AEAderg(1,1,2),AEAderx(1,1,1,1,1,2))
8564 C Following matrices are needed only for 6-th order cumulants
8565 IF (wcorr6.gt.0.0d0 .or. (wturn6.gt.0.0d0 .and.
8566 & j.eq.i+4 .and. l.eq.i+3)) THEN
8567 call kernel(aa2t(1,1),aa1(1,1),aa2tder(1,1,1,1),
8568 & a_chuj_der(1,1,1,1,jj,i),1,.true.,EUgC(1,1,k),EUgCder(1,1,k),
8569 & AECA(1,1,2),AECAderg(1,1,2),AECAderx(1,1,1,1,1,2))
8570 call kernel(aa2t(1,1),aa1(1,1),aa2tder(1,1,1,1),
8571 & a_chuj_der(1,1,1,1,jj,i),2,.true.,Ug2DtEUg(1,1,k),
8572 & Ug2DtEUgder(1,1,1,k),ADtEA(1,1,2),ADtEAderg(1,1,1,2),
8573 & ADtEAderx(1,1,1,1,1,2))
8574 call kernel(aa2t(1,1),aa1(1,1),aa2tder(1,1,1,1),
8575 & a_chuj_der(1,1,1,1,jj,i),2,.true.,DtUg2EUg(1,1,k),
8576 & DtUg2EUgder(1,1,1,k),ADtEA1(1,1,2),ADtEA1derg(1,1,1,2),
8577 & ADtEA1derx(1,1,1,1,1,2))
8579 C End 6-th order cumulants
8580 call transpose2(EUgder(1,1,j),auxmat(1,1))
8581 call matmat2(auxmat(1,1),AEA(1,1,1),EAEAderg(1,1,2,2))
8582 call transpose2(EUg(1,1,j),auxmat(1,1))
8583 call matmat2(auxmat(1,1),AEA(1,1,2),EAEA(1,1,2))
8584 call matmat2(auxmat(1,1),AEAderg(1,1,2),EAEAderg(1,1,2,2))
8588 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,2),
8589 & EAEAderx(1,1,lll,kkk,iii,2))
8594 C Calculate the vectors and their derivatives in virtual-bond dihedral angles.
8595 C They are needed only when the fifth- or the sixth-order cumulants are
8597 IF (wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0 .or.
8598 & (wturn6.gt.0.0d0 .and. j.eq.i+4 .and. l.eq.i+3)) THEN
8599 call transpose2(AEA(1,1,1),auxmat(1,1))
8600 call matvec2(auxmat(1,1),b1(1,i),AEAb1(1,1,1))
8601 call matvec2(auxmat(1,1),Ub2(1,i),AEAb2(1,1,1))
8602 call matvec2(auxmat(1,1),Ub2der(1,i),AEAb2derg(1,2,1,1))
8603 call transpose2(AEAderg(1,1,1),auxmat(1,1))
8604 call matvec2(auxmat(1,1),b1(1,i),AEAb1derg(1,1,1))
8605 call matvec2(auxmat(1,1),Ub2(1,i),AEAb2derg(1,1,1,1))
8606 call matvec2(AEA(1,1,1),b1(1,k+1),AEAb1(1,2,1))
8607 call matvec2(AEAderg(1,1,1),b1(1,k+1),AEAb1derg(1,2,1))
8608 call matvec2(AEA(1,1,1),Ub2(1,k+1),AEAb2(1,2,1))
8609 call matvec2(AEAderg(1,1,1),Ub2(1,k+1),AEAb2derg(1,1,2,1))
8610 call matvec2(AEA(1,1,1),Ub2der(1,k+1),AEAb2derg(1,2,2,1))
8611 call transpose2(AEA(1,1,2),auxmat(1,1))
8612 call matvec2(auxmat(1,1),b1(1,j+1),AEAb1(1,1,2))
8613 call matvec2(auxmat(1,1),Ub2(1,l),AEAb2(1,1,2))
8614 call matvec2(auxmat(1,1),Ub2der(1,l),AEAb2derg(1,2,1,2))
8615 call transpose2(AEAderg(1,1,2),auxmat(1,1))
8616 call matvec2(auxmat(1,1),b1(1,l),AEAb1(1,1,2))
8617 call matvec2(auxmat(1,1),Ub2(1,l),AEAb2derg(1,1,1,2))
8618 call matvec2(AEA(1,1,2),b1(1,j+1),AEAb1(1,2,2))
8619 call matvec2(AEAderg(1,1,2),b1(1,j+1),AEAb1derg(1,2,2))
8620 call matvec2(AEA(1,1,2),Ub2(1,j),AEAb2(1,2,2))
8621 call matvec2(AEAderg(1,1,2),Ub2(1,j),AEAb2derg(1,1,2,2))
8622 call matvec2(AEA(1,1,2),Ub2der(1,j),AEAb2derg(1,2,2,2))
8623 C Calculate the Cartesian derivatives of the vectors.
8627 call transpose2(AEAderx(1,1,lll,kkk,iii,1),auxmat(1,1))
8628 call matvec2(auxmat(1,1),b1(1,i),
8629 & AEAb1derx(1,lll,kkk,iii,1,1))
8630 call matvec2(auxmat(1,1),Ub2(1,i),
8631 & AEAb2derx(1,lll,kkk,iii,1,1))
8632 call matvec2(AEAderx(1,1,lll,kkk,iii,1),b1(1,k+1),
8633 & AEAb1derx(1,lll,kkk,iii,2,1))
8634 call matvec2(AEAderx(1,1,lll,kkk,iii,1),Ub2(1,k+1),
8635 & AEAb2derx(1,lll,kkk,iii,2,1))
8636 call transpose2(AEAderx(1,1,lll,kkk,iii,2),auxmat(1,1))
8637 call matvec2(auxmat(1,1),b1(1,l),
8638 & AEAb1derx(1,lll,kkk,iii,1,2))
8639 call matvec2(auxmat(1,1),Ub2(1,l),
8640 & AEAb2derx(1,lll,kkk,iii,1,2))
8641 call matvec2(AEAderx(1,1,lll,kkk,iii,2),b1(1,j+1),
8642 & AEAb1derx(1,lll,kkk,iii,2,2))
8643 call matvec2(AEAderx(1,1,lll,kkk,iii,2),Ub2(1,j),
8644 & AEAb2derx(1,lll,kkk,iii,2,2))
8653 C---------------------------------------------------------------------------
8654 subroutine kernel(aa1,aa2t,aa1derx,aa2tderx,nderg,transp,
8655 & KK,KKderg,AKA,AKAderg,AKAderx)
8659 double precision aa1(2,2),aa2t(2,2),aa1derx(2,2,3,5),
8660 & aa2tderx(2,2,3,5),KK(2,2),KKderg(2,2,nderg),AKA(2,2),
8661 & AKAderg(2,2,nderg),AKAderx(2,2,3,5,2)
8666 call prodmat3(aa1(1,1),aa2t(1,1),KK(1,1),transp,AKA(1,1))
8668 call prodmat3(aa1(1,1),aa2t(1,1),KKderg(1,1,iii),transp,
8671 cd if (lprn) write (2,*) 'In kernel'
8673 cd if (lprn) write (2,*) 'kkk=',kkk
8675 call prodmat3(aa1derx(1,1,lll,kkk),aa2t(1,1),
8676 & KK(1,1),transp,AKAderx(1,1,lll,kkk,1))
8678 cd write (2,*) 'lll=',lll
8679 cd write (2,*) 'iii=1'
8681 cd write (2,'(3(2f10.5),5x)')
8682 cd & (AKAderx(jjj,mmm,lll,kkk,1),mmm=1,2)
8685 call prodmat3(aa1(1,1),aa2tderx(1,1,lll,kkk),
8686 & KK(1,1),transp,AKAderx(1,1,lll,kkk,2))
8688 cd write (2,*) 'lll=',lll
8689 cd write (2,*) 'iii=2'
8691 cd write (2,'(3(2f10.5),5x)')
8692 cd & (AKAderx(jjj,mmm,lll,kkk,2),mmm=1,2)
8699 C---------------------------------------------------------------------------
8700 double precision function eello4(i,j,k,l,jj,kk)
8701 implicit real*8 (a-h,o-z)
8702 include 'DIMENSIONS'
8703 include 'DIMENSIONS.ZSCOPT'
8704 include 'COMMON.IOUNITS'
8705 include 'COMMON.CHAIN'
8706 include 'COMMON.DERIV'
8707 include 'COMMON.INTERACT'
8708 include 'COMMON.CONTACTS'
8709 include 'COMMON.TORSION'
8710 include 'COMMON.VAR'
8711 include 'COMMON.GEO'
8712 double precision pizda(2,2),ggg1(3),ggg2(3)
8713 cd if (i.ne.1 .or. j.ne.5 .or. k.ne.2 .or.l.ne.4) then
8717 cd print *,'eello4:',i,j,k,l,jj,kk
8718 cd write (2,*) 'i',i,' j',j,' k',k,' l',l
8719 cd call checkint4(i,j,k,l,jj,kk,eel4_num)
8720 cold eij=facont_hb(jj,i)
8721 cold ekl=facont_hb(kk,k)
8723 eel4=-EAEA(1,1,1)-EAEA(2,2,1)
8725 cd eel41=-EAEA(1,1,2)-EAEA(2,2,2)
8726 gcorr_loc(k-1)=gcorr_loc(k-1)
8727 & -ekont*(EAEAderg(1,1,1,1)+EAEAderg(2,2,1,1))
8729 gcorr_loc(l-1)=gcorr_loc(l-1)
8730 & -ekont*(EAEAderg(1,1,2,1)+EAEAderg(2,2,2,1))
8732 gcorr_loc(j-1)=gcorr_loc(j-1)
8733 & -ekont*(EAEAderg(1,1,2,1)+EAEAderg(2,2,2,1))
8738 derx(lll,kkk,iii)=-EAEAderx(1,1,lll,kkk,iii,1)
8739 & -EAEAderx(2,2,lll,kkk,iii,1)
8740 cd derx(lll,kkk,iii)=0.0d0
8744 cd gcorr_loc(l-1)=0.0d0
8745 cd gcorr_loc(j-1)=0.0d0
8746 cd gcorr_loc(k-1)=0.0d0
8748 cd write (iout,*)'Contacts have occurred for peptide groups',
8749 cd & i,j,' fcont:',eij,' eij',' and ',k,l,
8750 cd & ' fcont ',ekl,' eel4=',eel4,' eel4_num',16*eel4_num
8751 if (j.lt.nres-1) then
8758 if (l.lt.nres-1) then
8766 cgrad ggg1(ll)=eel4*g_contij(ll,1)
8767 cgrad ggg2(ll)=eel4*g_contij(ll,2)
8768 glongij=eel4*g_contij(ll,1)+ekont*derx(ll,1,1)
8769 glongkl=eel4*g_contij(ll,2)+ekont*derx(ll,1,2)
8770 cgrad ghalf=0.5d0*ggg1(ll)
8771 gradcorr(ll,i)=gradcorr(ll,i)+ekont*derx(ll,2,1)
8772 gradcorr(ll,i+1)=gradcorr(ll,i+1)+ekont*derx(ll,3,1)
8773 gradcorr(ll,j)=gradcorr(ll,j)+ekont*derx(ll,4,1)
8774 gradcorr(ll,j1)=gradcorr(ll,j1)+ekont*derx(ll,5,1)
8775 gradcorr_long(ll,j)=gradcorr_long(ll,j)+glongij
8776 gradcorr_long(ll,i)=gradcorr_long(ll,i)-glongij
8777 cgrad ghalf=0.5d0*ggg2(ll)
8778 gradcorr(ll,k)=gradcorr(ll,k)+ekont*derx(ll,2,2)
8779 gradcorr(ll,k+1)=gradcorr(ll,k+1)+ekont*derx(ll,3,2)
8780 gradcorr(ll,l)=gradcorr(ll,l)+ekont*derx(ll,4,2)
8781 gradcorr(ll,l1)=gradcorr(ll,l1)+ekont*derx(ll,5,2)
8782 gradcorr_long(ll,l)=gradcorr_long(ll,l)+glongkl
8783 gradcorr_long(ll,k)=gradcorr_long(ll,k)-glongkl
8787 cgrad gradcorr(ll,m)=gradcorr(ll,m)+ggg1(ll)
8792 cgrad gradcorr(ll,m)=gradcorr(ll,m)+ggg2(ll)
8797 cgrad gradcorr(ll,m)=gradcorr(ll,m)+ekont*derx(ll,1,1)
8802 cgrad gradcorr(ll,m)=gradcorr(ll,m)+ekont*derx(ll,1,2)
8806 cd write (2,*) iii,gcorr_loc(iii)
8810 cd write (2,*) 'ekont',ekont
8811 cd write (iout,*) 'eello4',ekont*eel4
8814 C---------------------------------------------------------------------------
8815 double precision function eello5(i,j,k,l,jj,kk)
8816 implicit real*8 (a-h,o-z)
8817 include 'DIMENSIONS'
8818 include 'DIMENSIONS.ZSCOPT'
8819 include 'COMMON.IOUNITS'
8820 include 'COMMON.CHAIN'
8821 include 'COMMON.DERIV'
8822 include 'COMMON.INTERACT'
8823 include 'COMMON.CONTACTS'
8824 include 'COMMON.TORSION'
8825 include 'COMMON.VAR'
8826 include 'COMMON.GEO'
8827 double precision pizda(2,2),auxmat(2,2),auxmat1(2,2),vv(2)
8828 double precision ggg1(3),ggg2(3)
8829 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
8834 C /l\ / \ \ / \ / \ / C
8835 C / \ / \ \ / \ / \ / C
8836 C j| o |l1 | o | o| o | | o |o C
8837 C \ |/k\| |/ \| / |/ \| |/ \| C
8838 C \i/ \ / \ / / \ / \ C
8840 C (I) (II) (III) (IV) C
8842 C eello5_1 eello5_2 eello5_3 eello5_4 C
8844 C Antiparallel chains C
8847 C /j\ / \ \ / \ / \ / C
8848 C / \ / \ \ / \ / \ / C
8849 C j1| o |l | o | o| o | | o |o C
8850 C \ |/k\| |/ \| / |/ \| |/ \| C
8851 C \i/ \ / \ / / \ / \ C
8853 C (I) (II) (III) (IV) C
8855 C eello5_1 eello5_2 eello5_3 eello5_4 C
8857 C o denotes a local interaction, vertical lines an electrostatic interaction. C
8859 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
8860 cd if (i.ne.2 .or. j.ne.6 .or. k.ne.3 .or. l.ne.5) then
8865 cd & 'EELLO5: Contacts have occurred for peptide groups',i,j,
8867 itk=itype2loc(itype(k))
8868 itl=itype2loc(itype(l))
8869 itj=itype2loc(itype(j))
8874 cd call checkint5(i,j,k,l,jj,kk,eel5_1_num,eel5_2_num,
8875 cd & eel5_3_num,eel5_4_num)
8879 derx(lll,kkk,iii)=0.0d0
8883 cd eij=facont_hb(jj,i)
8884 cd ekl=facont_hb(kk,k)
8886 cd write (iout,*)'Contacts have occurred for peptide groups',
8887 cd & i,j,' fcont:',eij,' eij',' and ',k,l
8889 C Contribution from the graph I.
8890 cd write (2,*) 'AEA ',AEA(1,1,1),AEA(2,1,1),AEA(1,2,1),AEA(2,2,1)
8891 cd write (2,*) 'AEAb2',AEAb2(1,1,1),AEAb2(2,1,1)
8892 call transpose2(EUg(1,1,k),auxmat(1,1))
8893 call matmat2(AEA(1,1,1),auxmat(1,1),pizda(1,1))
8894 vv(1)=pizda(1,1)-pizda(2,2)
8895 vv(2)=pizda(1,2)+pizda(2,1)
8896 eello5_1=scalar2(AEAb2(1,1,1),Ub2(1,k))
8897 & +0.5d0*scalar2(vv(1),Dtobr2(1,i))
8899 C Explicit gradient in virtual-dihedral angles.
8900 if (i.gt.1) g_corr5_loc(i-1)=g_corr5_loc(i-1)
8901 & +ekont*(scalar2(AEAb2derg(1,2,1,1),Ub2(1,k))
8902 & +0.5d0*scalar2(vv(1),Dtobr2der(1,i)))
8903 call transpose2(EUgder(1,1,k),auxmat1(1,1))
8904 call matmat2(AEA(1,1,1),auxmat1(1,1),pizda(1,1))
8905 vv(1)=pizda(1,1)-pizda(2,2)
8906 vv(2)=pizda(1,2)+pizda(2,1)
8907 g_corr5_loc(k-1)=g_corr5_loc(k-1)
8908 & +ekont*(scalar2(AEAb2(1,1,1),Ub2der(1,k))
8909 & +0.5d0*scalar2(vv(1),Dtobr2(1,i)))
8910 call matmat2(AEAderg(1,1,1),auxmat(1,1),pizda(1,1))
8911 vv(1)=pizda(1,1)-pizda(2,2)
8912 vv(2)=pizda(1,2)+pizda(2,1)
8914 if (l.lt.nres-1) g_corr5_loc(l-1)=g_corr5_loc(l-1)
8915 & +ekont*(scalar2(AEAb2derg(1,1,1,1),Ub2(1,k))
8916 & +0.5d0*scalar2(vv(1),Dtobr2(1,i)))
8918 if (j.lt.nres-1) g_corr5_loc(j-1)=g_corr5_loc(j-1)
8919 & +ekont*(scalar2(AEAb2derg(1,1,1,1),Ub2(1,k))
8920 & +0.5d0*scalar2(vv(1),Dtobr2(1,i)))
8922 C Cartesian gradient
8926 call matmat2(AEAderx(1,1,lll,kkk,iii,1),auxmat(1,1),
8928 vv(1)=pizda(1,1)-pizda(2,2)
8929 vv(2)=pizda(1,2)+pizda(2,1)
8930 derx(lll,kkk,iii)=derx(lll,kkk,iii)
8931 & +scalar2(AEAb2derx(1,lll,kkk,iii,1,1),Ub2(1,k))
8932 & +0.5d0*scalar2(vv(1),Dtobr2(1,i))
8939 C Contribution from graph II
8940 call transpose2(EE(1,1,k),auxmat(1,1))
8941 call matmat2(auxmat(1,1),AEA(1,1,1),pizda(1,1))
8942 vv(1)=pizda(1,1)+pizda(2,2)
8943 vv(2)=pizda(2,1)-pizda(1,2)
8944 eello5_2=scalar2(AEAb1(1,2,1),b1(1,k))
8945 & -0.5d0*scalar2(vv(1),Ctobr(1,k))
8947 C Explicit gradient in virtual-dihedral angles.
8948 g_corr5_loc(k-1)=g_corr5_loc(k-1)
8949 & -0.5d0*ekont*scalar2(vv(1),Ctobrder(1,k))
8950 call matmat2(auxmat(1,1),AEAderg(1,1,1),pizda(1,1))
8951 vv(1)=pizda(1,1)+pizda(2,2)
8952 vv(2)=pizda(2,1)-pizda(1,2)
8954 g_corr5_loc(l-1)=g_corr5_loc(l-1)
8955 & +ekont*(scalar2(AEAb1derg(1,2,1),b1(1,k))
8956 & -0.5d0*scalar2(vv(1),Ctobr(1,k)))
8958 g_corr5_loc(j-1)=g_corr5_loc(j-1)
8959 & +ekont*(scalar2(AEAb1derg(1,2,1),b1(1,k))
8960 & -0.5d0*scalar2(vv(1),Ctobr(1,k)))
8962 C Cartesian gradient
8966 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,1),
8968 vv(1)=pizda(1,1)+pizda(2,2)
8969 vv(2)=pizda(2,1)-pizda(1,2)
8970 derx(lll,kkk,iii)=derx(lll,kkk,iii)
8971 & +scalar2(AEAb1derx(1,lll,kkk,iii,2,1),b1(1,k))
8972 & -0.5d0*scalar2(vv(1),Ctobr(1,k))
8981 C Parallel orientation
8982 C Contribution from graph III
8983 call transpose2(EUg(1,1,l),auxmat(1,1))
8984 call matmat2(AEA(1,1,2),auxmat(1,1),pizda(1,1))
8985 vv(1)=pizda(1,1)-pizda(2,2)
8986 vv(2)=pizda(1,2)+pizda(2,1)
8987 eello5_3=scalar2(AEAb2(1,1,2),Ub2(1,l))
8988 & +0.5d0*scalar2(vv(1),Dtobr2(1,j))
8990 C Explicit gradient in virtual-dihedral angles.
8991 g_corr5_loc(j-1)=g_corr5_loc(j-1)
8992 & +ekont*(scalar2(AEAb2derg(1,2,1,2),Ub2(1,l))
8993 & +0.5d0*scalar2(vv(1),Dtobr2der(1,j)))
8994 call matmat2(AEAderg(1,1,2),auxmat(1,1),pizda(1,1))
8995 vv(1)=pizda(1,1)-pizda(2,2)
8996 vv(2)=pizda(1,2)+pizda(2,1)
8997 g_corr5_loc(k-1)=g_corr5_loc(k-1)
8998 & +ekont*(scalar2(AEAb2derg(1,1,1,2),Ub2(1,l))
8999 & +0.5d0*scalar2(vv(1),Dtobr2(1,j)))
9000 call transpose2(EUgder(1,1,l),auxmat1(1,1))
9001 call matmat2(AEA(1,1,2),auxmat1(1,1),pizda(1,1))
9002 vv(1)=pizda(1,1)-pizda(2,2)
9003 vv(2)=pizda(1,2)+pizda(2,1)
9004 g_corr5_loc(l-1)=g_corr5_loc(l-1)
9005 & +ekont*(scalar2(AEAb2(1,1,2),Ub2der(1,l))
9006 & +0.5d0*scalar2(vv(1),Dtobr2(1,j)))
9007 C Cartesian gradient
9011 call matmat2(AEAderx(1,1,lll,kkk,iii,2),auxmat(1,1),
9013 vv(1)=pizda(1,1)-pizda(2,2)
9014 vv(2)=pizda(1,2)+pizda(2,1)
9015 derx(lll,kkk,iii)=derx(lll,kkk,iii)
9016 & +scalar2(AEAb2derx(1,lll,kkk,iii,1,2),Ub2(1,l))
9017 & +0.5d0*scalar2(vv(1),Dtobr2(1,j))
9022 C Contribution from graph IV
9024 call transpose2(EE(1,1,l),auxmat(1,1))
9025 call matmat2(auxmat(1,1),AEA(1,1,2),pizda(1,1))
9026 vv(1)=pizda(1,1)+pizda(2,2)
9027 vv(2)=pizda(2,1)-pizda(1,2)
9028 eello5_4=scalar2(AEAb1(1,2,2),b1(1,l))
9029 & -0.5d0*scalar2(vv(1),Ctobr(1,l))
9030 C Explicit gradient in virtual-dihedral angles.
9031 g_corr5_loc(l-1)=g_corr5_loc(l-1)
9032 & -0.5d0*ekont*scalar2(vv(1),Ctobrder(1,l))
9033 call matmat2(auxmat(1,1),AEAderg(1,1,2),pizda(1,1))
9034 vv(1)=pizda(1,1)+pizda(2,2)
9035 vv(2)=pizda(2,1)-pizda(1,2)
9036 g_corr5_loc(k-1)=g_corr5_loc(k-1)
9037 & +ekont*(scalar2(AEAb1derg(1,2,2),b1(1,l))
9038 & -0.5d0*scalar2(vv(1),Ctobr(1,l)))
9039 C Cartesian gradient
9043 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,2),
9045 vv(1)=pizda(1,1)+pizda(2,2)
9046 vv(2)=pizda(2,1)-pizda(1,2)
9047 derx(lll,kkk,iii)=derx(lll,kkk,iii)
9048 & +scalar2(AEAb1derx(1,lll,kkk,iii,2,2),b1(1,l))
9049 & -0.5d0*scalar2(vv(1),Ctobr(1,l))
9055 C Antiparallel orientation
9056 C Contribution from graph III
9058 call transpose2(EUg(1,1,j),auxmat(1,1))
9059 call matmat2(AEA(1,1,2),auxmat(1,1),pizda(1,1))
9060 vv(1)=pizda(1,1)-pizda(2,2)
9061 vv(2)=pizda(1,2)+pizda(2,1)
9062 eello5_3=scalar2(AEAb2(1,1,2),Ub2(1,j))
9063 & +0.5d0*scalar2(vv(1),Dtobr2(1,l))
9065 C Explicit gradient in virtual-dihedral angles.
9066 g_corr5_loc(l-1)=g_corr5_loc(l-1)
9067 & +ekont*(scalar2(AEAb2derg(1,2,1,2),Ub2(1,j))
9068 & +0.5d0*scalar2(vv(1),Dtobr2der(1,l)))
9069 call matmat2(AEAderg(1,1,2),auxmat(1,1),pizda(1,1))
9070 vv(1)=pizda(1,1)-pizda(2,2)
9071 vv(2)=pizda(1,2)+pizda(2,1)
9072 g_corr5_loc(k-1)=g_corr5_loc(k-1)
9073 & +ekont*(scalar2(AEAb2derg(1,1,1,2),Ub2(1,j))
9074 & +0.5d0*scalar2(vv(1),Dtobr2(1,l)))
9075 call transpose2(EUgder(1,1,j),auxmat1(1,1))
9076 call matmat2(AEA(1,1,2),auxmat1(1,1),pizda(1,1))
9077 vv(1)=pizda(1,1)-pizda(2,2)
9078 vv(2)=pizda(1,2)+pizda(2,1)
9079 g_corr5_loc(j-1)=g_corr5_loc(j-1)
9080 & +ekont*(scalar2(AEAb2(1,1,2),Ub2der(1,j))
9081 & +0.5d0*scalar2(vv(1),Dtobr2(1,l)))
9082 C Cartesian gradient
9086 call matmat2(AEAderx(1,1,lll,kkk,iii,2),auxmat(1,1),
9088 vv(1)=pizda(1,1)-pizda(2,2)
9089 vv(2)=pizda(1,2)+pizda(2,1)
9090 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)
9091 & +scalar2(AEAb2derx(1,lll,kkk,iii,1,2),Ub2(1,j))
9092 & +0.5d0*scalar2(vv(1),Dtobr2(1,l))
9098 C Contribution from graph IV
9100 call transpose2(EE(1,1,j),auxmat(1,1))
9101 call matmat2(auxmat(1,1),AEA(1,1,2),pizda(1,1))
9102 vv(1)=pizda(1,1)+pizda(2,2)
9103 vv(2)=pizda(2,1)-pizda(1,2)
9104 eello5_4=scalar2(AEAb1(1,2,2),b1(1,j))
9105 & -0.5d0*scalar2(vv(1),Ctobr(1,j))
9107 C Explicit gradient in virtual-dihedral angles.
9108 g_corr5_loc(j-1)=g_corr5_loc(j-1)
9109 & -0.5d0*ekont*scalar2(vv(1),Ctobrder(1,j))
9110 call matmat2(auxmat(1,1),AEAderg(1,1,2),pizda(1,1))
9111 vv(1)=pizda(1,1)+pizda(2,2)
9112 vv(2)=pizda(2,1)-pizda(1,2)
9113 g_corr5_loc(k-1)=g_corr5_loc(k-1)
9114 & +ekont*(scalar2(AEAb1derg(1,2,2),b1(1,j))
9115 & -0.5d0*scalar2(vv(1),Ctobr(1,j)))
9116 C Cartesian gradient
9120 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,2),
9122 vv(1)=pizda(1,1)+pizda(2,2)
9123 vv(2)=pizda(2,1)-pizda(1,2)
9124 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)
9125 & +scalar2(AEAb1derx(1,lll,kkk,iii,2,2),b1(1,j))
9126 & -0.5d0*scalar2(vv(1),Ctobr(1,j))
9133 eel5=eello5_1+eello5_2+eello5_3+eello5_4
9134 cd if (i.eq.2 .and. j.eq.8 .and. k.eq.3 .and. l.eq.7) then
9135 cd write (2,*) 'ijkl',i,j,k,l
9136 cd write (2,*) 'eello5_1',eello5_1,' eello5_2',eello5_2,
9137 cd & ' eello5_3',eello5_3,' eello5_4',eello5_4
9139 cd write(iout,*) 'eello5_1',eello5_1,' eel5_1_num',16*eel5_1_num
9140 cd write(iout,*) 'eello5_2',eello5_2,' eel5_2_num',16*eel5_2_num
9141 cd write(iout,*) 'eello5_3',eello5_3,' eel5_3_num',16*eel5_3_num
9142 cd write(iout,*) 'eello5_4',eello5_4,' eel5_4_num',16*eel5_4_num
9144 if (j.lt.nres-1) then
9151 if (l.lt.nres-1) then
9161 cd write (2,*) 'eij',eij,' ekl',ekl,' ekont',ekont
9162 C 2/11/08 AL Gradients over DC's connecting interacting sites will be
9163 C summed up outside the subrouine as for the other subroutines
9164 C handling long-range interactions. The old code is commented out
9165 C with "cgrad" to keep track of changes.
9167 cgrad ggg1(ll)=eel5*g_contij(ll,1)
9168 cgrad ggg2(ll)=eel5*g_contij(ll,2)
9169 gradcorr5ij=eel5*g_contij(ll,1)+ekont*derx(ll,1,1)
9170 gradcorr5kl=eel5*g_contij(ll,2)+ekont*derx(ll,1,2)
9171 c write (iout,'(a,3i3,a,5f8.3,2i3,a,5f8.3,a,f8.3)')
9172 c & "ecorr5",ll,i,j," derx",derx(ll,2,1),derx(ll,3,1),derx(ll,4,1),
9173 c & derx(ll,5,1),k,l," derx",derx(ll,2,2),derx(ll,3,2),
9174 c & derx(ll,4,2),derx(ll,5,2)," ekont",ekont
9175 c write (iout,'(a,3i3,a,3f8.3,2i3,a,3f8.3)')
9176 c & "ecorr5",ll,i,j," gradcorr5",g_contij(ll,1),derx(ll,1,1),
9178 c & k,l," gradcorr5",g_contij(ll,2),derx(ll,1,2),gradcorr5kl
9179 cold ghalf=0.5d0*eel5*ekl*gacont_hbr(ll,jj,i)
9180 cgrad ghalf=0.5d0*ggg1(ll)
9182 gradcorr5(ll,i)=gradcorr5(ll,i)+ekont*derx(ll,2,1)
9183 gradcorr5(ll,i+1)=gradcorr5(ll,i+1)+ekont*derx(ll,3,1)
9184 gradcorr5(ll,j)=gradcorr5(ll,j)+ekont*derx(ll,4,1)
9185 gradcorr5(ll,j1)=gradcorr5(ll,j1)+ekont*derx(ll,5,1)
9186 gradcorr5_long(ll,j)=gradcorr5_long(ll,j)+gradcorr5ij
9187 gradcorr5_long(ll,i)=gradcorr5_long(ll,i)-gradcorr5ij
9188 cold ghalf=0.5d0*eel5*eij*gacont_hbr(ll,kk,k)
9189 cgrad ghalf=0.5d0*ggg2(ll)
9191 gradcorr5(ll,k)=gradcorr5(ll,k)+ekont*derx(ll,2,2)
9192 gradcorr5(ll,k+1)=gradcorr5(ll,k+1)+ekont*derx(ll,3,2)
9193 gradcorr5(ll,l)=gradcorr5(ll,l)+ekont*derx(ll,4,2)
9194 gradcorr5(ll,l1)=gradcorr5(ll,l1)+ekont*derx(ll,5,2)
9195 gradcorr5_long(ll,l)=gradcorr5_long(ll,l)+gradcorr5kl
9196 gradcorr5_long(ll,k)=gradcorr5_long(ll,k)-gradcorr5kl
9202 cold gradcorr5(ll,m)=gradcorr5(ll,m)+eel5*ekl*gacont_hbr(ll,jj,i)
9203 cgrad gradcorr5(ll,m)=gradcorr5(ll,m)+ggg1(ll)
9208 cold gradcorr5(ll,m)=gradcorr5(ll,m)+eel5*eij*gacont_hbr(ll,kk,k)
9209 cgrad gradcorr5(ll,m)=gradcorr5(ll,m)+ggg2(ll)
9215 cgrad gradcorr5(ll,m)=gradcorr5(ll,m)+ekont*derx(ll,1,1)
9220 cgrad gradcorr5(ll,m)=gradcorr5(ll,m)+ekont*derx(ll,1,2)
9224 cd write (2,*) iii,g_corr5_loc(iii)
9227 cd write (2,*) 'ekont',ekont
9228 cd write (iout,*) 'eello5',ekont*eel5
9231 c--------------------------------------------------------------------------
9232 double precision function eello6(i,j,k,l,jj,kk)
9233 implicit real*8 (a-h,o-z)
9234 include 'DIMENSIONS'
9235 include 'DIMENSIONS.ZSCOPT'
9236 include 'COMMON.IOUNITS'
9237 include 'COMMON.CHAIN'
9238 include 'COMMON.DERIV'
9239 include 'COMMON.INTERACT'
9240 include 'COMMON.CONTACTS'
9241 include 'COMMON.TORSION'
9242 include 'COMMON.VAR'
9243 include 'COMMON.GEO'
9244 include 'COMMON.FFIELD'
9245 double precision ggg1(3),ggg2(3)
9246 cd if (i.ne.1 .or. j.ne.3 .or. k.ne.2 .or. l.ne.4) then
9251 cd & 'EELLO6: Contacts have occurred for peptide groups',i,j,
9259 cd call checkint6(i,j,k,l,jj,kk,eel6_1_num,eel6_2_num,
9260 cd & eel6_3_num,eel6_4_num,eel6_5_num,eel6_6_num)
9264 derx(lll,kkk,iii)=0.0d0
9268 cd eij=facont_hb(jj,i)
9269 cd ekl=facont_hb(kk,k)
9275 eello6_1=eello6_graph1(i,j,k,l,1,.false.)
9276 eello6_2=eello6_graph1(j,i,l,k,2,.false.)
9277 eello6_3=eello6_graph2(i,j,k,l,jj,kk,.false.)
9278 eello6_4=eello6_graph4(i,j,k,l,jj,kk,1,.false.)
9279 eello6_5=eello6_graph4(j,i,l,k,jj,kk,2,.false.)
9280 eello6_6=eello6_graph3(i,j,k,l,jj,kk,.false.)
9282 eello6_1=eello6_graph1(i,j,k,l,1,.false.)
9283 eello6_2=eello6_graph1(l,k,j,i,2,.true.)
9284 eello6_3=eello6_graph2(i,l,k,j,jj,kk,.true.)
9285 eello6_4=eello6_graph4(i,j,k,l,jj,kk,1,.false.)
9286 if (wturn6.eq.0.0d0 .or. j.ne.i+4) then
9287 eello6_5=eello6_graph4(l,k,j,i,kk,jj,2,.true.)
9291 eello6_6=eello6_graph3(i,l,k,j,jj,kk,.true.)
9293 C If turn contributions are considered, they will be handled separately.
9294 eel6=eello6_1+eello6_2+eello6_3+eello6_4+eello6_5+eello6_6
9295 cd write(iout,*) 'eello6_1',eello6_1!,' eel6_1_num',16*eel6_1_num
9296 cd write(iout,*) 'eello6_2',eello6_2!,' eel6_2_num',16*eel6_2_num
9297 cd write(iout,*) 'eello6_3',eello6_3!,' eel6_3_num',16*eel6_3_num
9298 cd write(iout,*) 'eello6_4',eello6_4!,' eel6_4_num',16*eel6_4_num
9299 cd write(iout,*) 'eello6_5',eello6_5!,' eel6_5_num',16*eel6_5_num
9300 cd write(iout,*) 'eello6_6',eello6_6!,' eel6_6_num',16*eel6_6_num
9303 if (j.lt.nres-1) then
9310 if (l.lt.nres-1) then
9318 cgrad ggg1(ll)=eel6*g_contij(ll,1)
9319 cgrad ggg2(ll)=eel6*g_contij(ll,2)
9320 cold ghalf=0.5d0*eel6*ekl*gacont_hbr(ll,jj,i)
9321 cgrad ghalf=0.5d0*ggg1(ll)
9323 gradcorr6ij=eel6*g_contij(ll,1)+ekont*derx(ll,1,1)
9324 gradcorr6kl=eel6*g_contij(ll,2)+ekont*derx(ll,1,2)
9325 gradcorr6(ll,i)=gradcorr6(ll,i)+ekont*derx(ll,2,1)
9326 gradcorr6(ll,i+1)=gradcorr6(ll,i+1)+ekont*derx(ll,3,1)
9327 gradcorr6(ll,j)=gradcorr6(ll,j)+ekont*derx(ll,4,1)
9328 gradcorr6(ll,j1)=gradcorr6(ll,j1)+ekont*derx(ll,5,1)
9329 gradcorr6_long(ll,j)=gradcorr6_long(ll,j)+gradcorr6ij
9330 gradcorr6_long(ll,i)=gradcorr6_long(ll,i)-gradcorr6ij
9331 cgrad ghalf=0.5d0*ggg2(ll)
9332 cold ghalf=0.5d0*eel6*eij*gacont_hbr(ll,kk,k)
9334 gradcorr6(ll,k)=gradcorr6(ll,k)+ekont*derx(ll,2,2)
9335 gradcorr6(ll,k+1)=gradcorr6(ll,k+1)+ekont*derx(ll,3,2)
9336 gradcorr6(ll,l)=gradcorr6(ll,l)+ekont*derx(ll,4,2)
9337 gradcorr6(ll,l1)=gradcorr6(ll,l1)+ekont*derx(ll,5,2)
9338 gradcorr6_long(ll,l)=gradcorr6_long(ll,l)+gradcorr6kl
9339 gradcorr6_long(ll,k)=gradcorr6_long(ll,k)-gradcorr6kl
9345 cold gradcorr6(ll,m)=gradcorr6(ll,m)+eel6*ekl*gacont_hbr(ll,jj,i)
9346 cgrad gradcorr6(ll,m)=gradcorr6(ll,m)+ggg1(ll)
9351 cold gradcorr6(ll,m)=gradcorr6(ll,m)+eel6*eij*gacont_hbr(ll,kk,k)
9352 cgrad gradcorr6(ll,m)=gradcorr6(ll,m)+ggg2(ll)
9358 cgrad gradcorr6(ll,m)=gradcorr6(ll,m)+ekont*derx(ll,1,1)
9363 cgrad gradcorr6(ll,m)=gradcorr6(ll,m)+ekont*derx(ll,1,2)
9367 cd write (2,*) iii,g_corr6_loc(iii)
9370 cd write (2,*) 'ekont',ekont
9371 cd write (iout,*) 'eello6',ekont*eel6
9374 c--------------------------------------------------------------------------
9375 double precision function eello6_graph1(i,j,k,l,imat,swap)
9376 implicit real*8 (a-h,o-z)
9377 include 'DIMENSIONS'
9378 include 'DIMENSIONS.ZSCOPT'
9379 include 'COMMON.IOUNITS'
9380 include 'COMMON.CHAIN'
9381 include 'COMMON.DERIV'
9382 include 'COMMON.INTERACT'
9383 include 'COMMON.CONTACTS'
9384 include 'COMMON.TORSION'
9385 include 'COMMON.VAR'
9386 include 'COMMON.GEO'
9387 double precision vv(2),vv1(2),pizda(2,2),auxmat(2,2),pizda1(2,2)
9391 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
9393 C Parallel Antiparallel C
9399 C \ j|/k\| / \ |/k\|l / C
9404 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
9405 itk=itype2loc(itype(k))
9406 s1= scalar2(AEAb1(1,2,imat),CUgb2(1,i))
9407 s2=-scalar2(AEAb2(1,1,imat),Ug2Db1t(1,k))
9408 s3= scalar2(AEAb2(1,1,imat),CUgb2(1,k))
9409 call transpose2(EUgC(1,1,k),auxmat(1,1))
9410 call matmat2(AEA(1,1,imat),auxmat(1,1),pizda1(1,1))
9411 vv1(1)=pizda1(1,1)-pizda1(2,2)
9412 vv1(2)=pizda1(1,2)+pizda1(2,1)
9413 s4=0.5d0*scalar2(vv1(1),Dtobr2(1,i))
9414 vv(1)=AEAb1(1,2,imat)*b1(1,k)-AEAb1(2,2,imat)*b1(2,k)
9415 vv(2)=AEAb1(1,2,imat)*b1(2,k)+AEAb1(2,2,imat)*b1(1,k)
9416 s5=scalar2(vv(1),Dtobr2(1,i))
9417 cd write (2,*) 's1',s1,' s2',s2,' s3',s3,' s4', s4,' s5',s5
9418 eello6_graph1=-0.5d0*(s1+s2+s3+s4+s5)
9420 if (i.gt.1) g_corr6_loc(i-1)=g_corr6_loc(i-1)
9421 & -0.5d0*ekont*(scalar2(AEAb1(1,2,imat),CUgb2der(1,i))
9422 & -scalar2(AEAb2derg(1,2,1,imat),Ug2Db1t(1,k))
9423 & +scalar2(AEAb2derg(1,2,1,imat),CUgb2(1,k))
9424 & +0.5d0*scalar2(vv1(1),Dtobr2der(1,i))
9425 & +scalar2(vv(1),Dtobr2der(1,i)))
9426 call matmat2(AEAderg(1,1,imat),auxmat(1,1),pizda1(1,1))
9427 vv1(1)=pizda1(1,1)-pizda1(2,2)
9428 vv1(2)=pizda1(1,2)+pizda1(2,1)
9429 vv(1)=AEAb1derg(1,2,imat)*b1(1,k)-AEAb1derg(2,2,imat)*b1(2,k)
9430 vv(2)=AEAb1derg(1,2,imat)*b1(2,k)+AEAb1derg(2,2,imat)*b1(1,k)
9432 g_corr6_loc(l-1)=g_corr6_loc(l-1)
9433 & +ekont*(-0.5d0*(scalar2(AEAb1derg(1,2,imat),CUgb2(1,i))
9434 & -scalar2(AEAb2derg(1,1,1,imat),Ug2Db1t(1,k))
9435 & +scalar2(AEAb2derg(1,1,1,imat),CUgb2(1,k))
9436 & +0.5d0*scalar2(vv1(1),Dtobr2(1,i))+scalar2(vv(1),Dtobr2(1,i))))
9438 g_corr6_loc(j-1)=g_corr6_loc(j-1)
9439 & +ekont*(-0.5d0*(scalar2(AEAb1derg(1,2,imat),CUgb2(1,i))
9440 & -scalar2(AEAb2derg(1,1,1,imat),Ug2Db1t(1,k))
9441 & +scalar2(AEAb2derg(1,1,1,imat),CUgb2(1,k))
9442 & +0.5d0*scalar2(vv1(1),Dtobr2(1,i))+scalar2(vv(1),Dtobr2(1,i))))
9444 call transpose2(EUgCder(1,1,k),auxmat(1,1))
9445 call matmat2(AEA(1,1,imat),auxmat(1,1),pizda1(1,1))
9446 vv1(1)=pizda1(1,1)-pizda1(2,2)
9447 vv1(2)=pizda1(1,2)+pizda1(2,1)
9448 if (k.gt.1) g_corr6_loc(k-1)=g_corr6_loc(k-1)
9449 & +ekont*(-0.5d0*(-scalar2(AEAb2(1,1,imat),Ug2Db1tder(1,k))
9450 & +scalar2(AEAb2(1,1,imat),CUgb2der(1,k))
9451 & +0.5d0*scalar2(vv1(1),Dtobr2(1,i))))
9460 s1= scalar2(AEAb1derx(1,lll,kkk,iii,2,imat),CUgb2(1,i))
9461 s2=-scalar2(AEAb2derx(1,lll,kkk,iii,1,imat),Ug2Db1t(1,k))
9462 s3= scalar2(AEAb2derx(1,lll,kkk,iii,1,imat),CUgb2(1,k))
9463 call transpose2(EUgC(1,1,k),auxmat(1,1))
9464 call matmat2(AEAderx(1,1,lll,kkk,iii,imat),auxmat(1,1),
9466 vv1(1)=pizda1(1,1)-pizda1(2,2)
9467 vv1(2)=pizda1(1,2)+pizda1(2,1)
9468 s4=0.5d0*scalar2(vv1(1),Dtobr2(1,i))
9469 vv(1)=AEAb1derx(1,lll,kkk,iii,2,imat)*b1(1,k)
9470 & -AEAb1derx(2,lll,kkk,iii,2,imat)*b1(2,k)
9471 vv(2)=AEAb1derx(1,lll,kkk,iii,2,imat)*b1(2,k)
9472 & +AEAb1derx(2,lll,kkk,iii,2,imat)*b1(1,k)
9473 s5=scalar2(vv(1),Dtobr2(1,i))
9474 derx(lll,kkk,ind)=derx(lll,kkk,ind)-0.5d0*(s1+s2+s3+s4+s5)
9481 c----------------------------------------------------------------------------
9482 double precision function eello6_graph2(i,j,k,l,jj,kk,swap)
9483 implicit real*8 (a-h,o-z)
9484 include 'DIMENSIONS'
9485 include 'DIMENSIONS.ZSCOPT'
9486 include 'COMMON.IOUNITS'
9487 include 'COMMON.CHAIN'
9488 include 'COMMON.DERIV'
9489 include 'COMMON.INTERACT'
9490 include 'COMMON.CONTACTS'
9491 include 'COMMON.TORSION'
9492 include 'COMMON.VAR'
9493 include 'COMMON.GEO'
9495 double precision vv(2),pizda(2,2),auxmat(2,2),auxvec(2),
9496 & auxvec1(2),auxvec2(2),auxmat1(2,2)
9499 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
9501 C Parallel Antiparallel C
9507 C \ j|/k\| \ |/k\|l C
9512 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
9513 cd write (2,*) 'eello6_graph2: i,',i,' j',j,' k',k,' l',l
9514 C AL 7/4/01 s1 would occur in the sixth-order moment,
9515 C but not in a cluster cumulant
9517 s1=dip(1,jj,i)*dip(1,kk,k)
9519 call matvec2(ADtEA1(1,1,1),Ub2(1,k),auxvec(1))
9520 s2=-0.5d0*scalar2(Ub2(1,i),auxvec(1))
9521 call matvec2(ADtEA(1,1,2),Ub2(1,l),auxvec1(1))
9522 s3=-0.5d0*scalar2(Ub2(1,j),auxvec1(1))
9523 call transpose2(EUg(1,1,k),auxmat(1,1))
9524 call matmat2(ADtEA1(1,1,1),auxmat(1,1),pizda(1,1))
9525 vv(1)=pizda(1,1)-pizda(2,2)
9526 vv(2)=pizda(1,2)+pizda(2,1)
9527 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
9528 cd write (2,*) 'eello6_graph2:','s1',s1,' s2',s2,' s3',s3,' s4',s4
9530 eello6_graph2=-(s1+s2+s3+s4)
9532 eello6_graph2=-(s2+s3+s4)
9535 C Derivatives in gamma(i-1)
9539 s1=dipderg(1,jj,i)*dip(1,kk,k)
9541 s2=-0.5d0*scalar2(Ub2der(1,i),auxvec(1))
9542 call matvec2(ADtEAderg(1,1,1,2),Ub2(1,l),auxvec2(1))
9543 s3=-0.5d0*scalar2(Ub2(1,j),auxvec2(1))
9544 s4=-0.25d0*scalar2(vv(1),Dtobr2der(1,i))
9546 g_corr6_loc(i-1)=g_corr6_loc(i-1)-ekont*(s1+s2+s3+s4)
9548 g_corr6_loc(i-1)=g_corr6_loc(i-1)-ekont*(s2+s3+s4)
9550 c g_corr6_loc(i-1)=g_corr6_loc(i-1)-s3
9552 C Derivatives in gamma(k-1)
9554 s1=dip(1,jj,i)*dipderg(1,kk,k)
9556 call matvec2(ADtEA1(1,1,1),Ub2der(1,k),auxvec2(1))
9557 s2=-0.5d0*scalar2(Ub2(1,i),auxvec2(1))
9558 call matvec2(ADtEAderg(1,1,2,2),Ub2(1,l),auxvec2(1))
9559 s3=-0.5d0*scalar2(Ub2(1,j),auxvec2(1))
9560 call transpose2(EUgder(1,1,k),auxmat1(1,1))
9561 call matmat2(ADtEA1(1,1,1),auxmat1(1,1),pizda(1,1))
9562 vv(1)=pizda(1,1)-pizda(2,2)
9563 vv(2)=pizda(1,2)+pizda(2,1)
9564 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
9566 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s1+s2+s3+s4)
9568 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s2+s3+s4)
9570 c g_corr6_loc(k-1)=g_corr6_loc(k-1)-s3
9571 C Derivatives in gamma(j-1) or gamma(l-1)
9574 s1=dipderg(3,jj,i)*dip(1,kk,k)
9576 call matvec2(ADtEA1derg(1,1,1,1),Ub2(1,k),auxvec2(1))
9577 s2=-0.5d0*scalar2(Ub2(1,i),auxvec2(1))
9578 s3=-0.5d0*scalar2(Ub2der(1,j),auxvec1(1))
9579 call matmat2(ADtEA1derg(1,1,1,1),auxmat(1,1),pizda(1,1))
9580 vv(1)=pizda(1,1)-pizda(2,2)
9581 vv(2)=pizda(1,2)+pizda(2,1)
9582 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
9585 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*s1
9587 g_corr6_loc(j-1)=g_corr6_loc(j-1)-ekont*s1
9590 g_corr6_loc(j-1)=g_corr6_loc(j-1)-ekont*(s2+s3+s4)
9591 c g_corr6_loc(j-1)=g_corr6_loc(j-1)-s3
9593 C Derivatives in gamma(l-1) or gamma(j-1)
9596 s1=dip(1,jj,i)*dipderg(3,kk,k)
9598 call matvec2(ADtEA1derg(1,1,2,1),Ub2(1,k),auxvec2(1))
9599 s2=-0.5d0*scalar2(Ub2(1,i),auxvec2(1))
9600 call matvec2(ADtEA(1,1,2),Ub2der(1,l),auxvec2(1))
9601 s3=-0.5d0*scalar2(Ub2(1,j),auxvec2(1))
9602 call matmat2(ADtEA1derg(1,1,2,1),auxmat(1,1),pizda(1,1))
9603 vv(1)=pizda(1,1)-pizda(2,2)
9604 vv(2)=pizda(1,2)+pizda(2,1)
9605 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
9608 g_corr6_loc(j-1)=g_corr6_loc(j-1)-ekont*s1
9610 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*s1
9613 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*(s2+s3+s4)
9614 c g_corr6_loc(l-1)=g_corr6_loc(l-1)-s3
9616 C Cartesian derivatives.
9618 write (2,*) 'In eello6_graph2'
9620 write (2,*) 'iii=',iii
9622 write (2,*) 'kkk=',kkk
9624 write (2,'(3(2f10.5),5x)')
9625 & ((ADtEA1derx(jjj,mmm,lll,kkk,iii,1),mmm=1,2),lll=1,3)
9635 s1=dipderx(lll,kkk,1,jj,i)*dip(1,kk,k)
9637 s1=dip(1,jj,i)*dipderx(lll,kkk,1,kk,k)
9640 call matvec2(ADtEA1derx(1,1,lll,kkk,iii,1),Ub2(1,k),
9642 s2=-0.5d0*scalar2(Ub2(1,i),auxvec(1))
9643 call matvec2(ADtEAderx(1,1,lll,kkk,iii,2),Ub2(1,l),
9645 s3=-0.5d0*scalar2(Ub2(1,j),auxvec(1))
9646 call transpose2(EUg(1,1,k),auxmat(1,1))
9647 call matmat2(ADtEA1derx(1,1,lll,kkk,iii,1),auxmat(1,1),
9649 vv(1)=pizda(1,1)-pizda(2,2)
9650 vv(2)=pizda(1,2)+pizda(2,1)
9651 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
9652 cd write (2,*) 's1',s1,' s2',s2,' s3',s3,' s4',s4
9654 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s1+s2+s4)
9656 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s2+s4)
9659 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-s3
9661 derx(lll,kkk,iii)=derx(lll,kkk,iii)-s3
9669 c----------------------------------------------------------------------------
9670 double precision function eello6_graph3(i,j,k,l,jj,kk,swap)
9671 implicit real*8 (a-h,o-z)
9672 include 'DIMENSIONS'
9673 include 'DIMENSIONS.ZSCOPT'
9674 include 'COMMON.IOUNITS'
9675 include 'COMMON.CHAIN'
9676 include 'COMMON.DERIV'
9677 include 'COMMON.INTERACT'
9678 include 'COMMON.CONTACTS'
9679 include 'COMMON.TORSION'
9680 include 'COMMON.VAR'
9681 include 'COMMON.GEO'
9682 double precision vv(2),pizda(2,2),auxmat(2,2),auxvec(2)
9684 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
9686 C Parallel Antiparallel C
9692 C j|/k\| / |/k\|l / C
9697 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
9699 C 4/7/01 AL Component s1 was removed, because it pertains to the respective
9700 C energy moment and not to the cluster cumulant.
9701 iti=itortyp(itype(i))
9702 if (j.lt.nres-1) then
9703 itj1=itype2loc(itype(j+1))
9707 itk=itype2loc(itype(k))
9708 itk1=itype2loc(itype(k+1))
9709 if (l.lt.nres-1) then
9710 itl1=itype2loc(itype(l+1))
9715 s1=dip(4,jj,i)*dip(4,kk,k)
9717 call matvec2(AECA(1,1,1),b1(1,k+1),auxvec(1))
9718 s2=0.5d0*scalar2(b1(1,k),auxvec(1))
9719 call matvec2(AECA(1,1,2),b1(1,l+1),auxvec(1))
9720 s3=0.5d0*scalar2(b1(1,j+1),auxvec(1))
9721 call transpose2(EE(1,1,k),auxmat(1,1))
9722 call matmat2(auxmat(1,1),AECA(1,1,1),pizda(1,1))
9723 vv(1)=pizda(1,1)+pizda(2,2)
9724 vv(2)=pizda(2,1)-pizda(1,2)
9725 s4=-0.25d0*scalar2(vv(1),Ctobr(1,k))
9726 cd write (2,*) 'eello6_graph3:','s1',s1,' s2',s2,' s3',s3,' s4',s4,
9727 cd & "sum",-(s2+s3+s4)
9729 eello6_graph3=-(s1+s2+s3+s4)
9731 eello6_graph3=-(s2+s3+s4)
9734 C Derivatives in gamma(k-1)
9736 call matvec2(AECAderg(1,1,2),b1(1,l+1),auxvec(1))
9737 s3=0.5d0*scalar2(b1(1,j+1),auxvec(1))
9738 s4=-0.25d0*scalar2(vv(1),Ctobrder(1,k))
9739 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s3+s4)
9740 C Derivatives in gamma(l-1)
9741 call matvec2(AECAderg(1,1,1),b1(1,k+1),auxvec(1))
9742 s2=0.5d0*scalar2(b1(1,k),auxvec(1))
9743 call matmat2(auxmat(1,1),AECAderg(1,1,1),pizda(1,1))
9744 vv(1)=pizda(1,1)+pizda(2,2)
9745 vv(2)=pizda(2,1)-pizda(1,2)
9746 s4=-0.25d0*scalar2(vv(1),Ctobr(1,k))
9747 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*(s2+s4)
9748 C Cartesian derivatives.
9754 s1=dipderx(lll,kkk,4,jj,i)*dip(4,kk,k)
9756 s1=dip(4,jj,i)*dipderx(lll,kkk,4,kk,k)
9759 call matvec2(AECAderx(1,1,lll,kkk,iii,1),b1(1,k+1),
9761 s2=0.5d0*scalar2(b1(1,k),auxvec(1))
9762 call matvec2(AECAderx(1,1,lll,kkk,iii,2),b1(1,l+1),
9764 s3=0.5d0*scalar2(b1(1,j+1),auxvec(1))
9765 call matmat2(auxmat(1,1),AECAderx(1,1,lll,kkk,iii,1),
9767 vv(1)=pizda(1,1)+pizda(2,2)
9768 vv(2)=pizda(2,1)-pizda(1,2)
9769 s4=-0.25d0*scalar2(vv(1),Ctobr(1,k))
9771 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s1+s2+s4)
9773 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s2+s4)
9776 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-s3
9778 derx(lll,kkk,iii)=derx(lll,kkk,iii)-s3
9780 c derx(lll,kkk,iii)=derx(lll,kkk,iii)-s4
9787 c----------------------------------------------------------------------------
9788 double precision function eello6_graph4(i,j,k,l,jj,kk,imat,swap)
9789 implicit real*8 (a-h,o-z)
9790 include 'DIMENSIONS'
9791 include 'DIMENSIONS.ZSCOPT'
9792 include 'COMMON.IOUNITS'
9793 include 'COMMON.CHAIN'
9794 include 'COMMON.DERIV'
9795 include 'COMMON.INTERACT'
9796 include 'COMMON.CONTACTS'
9797 include 'COMMON.TORSION'
9798 include 'COMMON.VAR'
9799 include 'COMMON.GEO'
9800 include 'COMMON.FFIELD'
9801 double precision vv(2),pizda(2,2),auxmat(2,2),auxvec(2),
9802 & auxvec1(2),auxmat1(2,2)
9804 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
9806 C Parallel Antiparallel C
9812 C \ j|/k\| \ |/k\|l C
9817 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
9819 C 4/7/01 AL Component s1 was removed, because it pertains to the respective
9820 C energy moment and not to the cluster cumulant.
9821 cd write (2,*) 'eello_graph4: wturn6',wturn6
9822 iti=itype2loc(itype(i))
9823 itj=itype2loc(itype(j))
9824 if (j.lt.nres-1) then
9825 itj1=itype2loc(itype(j+1))
9829 itk=itype2loc(itype(k))
9830 if (k.lt.nres-1) then
9831 itk1=itype2loc(itype(k+1))
9835 itl=itype2loc(itype(l))
9836 if (l.lt.nres-1) then
9837 itl1=itype2loc(itype(l+1))
9841 cd write (2,*) 'eello6_graph4:','i',i,' j',j,' k',k,' l',l
9842 cd write (2,*) 'iti',iti,' itj',itj,' itj1',itj1,' itk',itk,
9843 cd & ' itl',itl,' itl1',itl1
9846 s1=dip(3,jj,i)*dip(3,kk,k)
9848 s1=dip(2,jj,j)*dip(2,kk,l)
9851 call matvec2(AECA(1,1,imat),Ub2(1,k),auxvec(1))
9852 s2=0.5d0*scalar2(Ub2(1,i),auxvec(1))
9854 call matvec2(ADtEA1(1,1,3-imat),b1(1,j+1),auxvec1(1))
9855 s3=-0.5d0*scalar2(b1(1,j),auxvec1(1))
9857 call matvec2(ADtEA1(1,1,3-imat),b1(1,l+1),auxvec1(1))
9858 s3=-0.5d0*scalar2(b1(1,l),auxvec1(1))
9860 call transpose2(EUg(1,1,k),auxmat(1,1))
9861 call matmat2(AECA(1,1,imat),auxmat(1,1),pizda(1,1))
9862 vv(1)=pizda(1,1)-pizda(2,2)
9863 vv(2)=pizda(2,1)+pizda(1,2)
9864 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
9865 cd write (2,*) 'eello6_graph4:','s1',s1,' s2',s2,' s3',s3,' s4',s4
9867 eello6_graph4=-(s1+s2+s3+s4)
9869 eello6_graph4=-(s2+s3+s4)
9871 C Derivatives in gamma(i-1)
9876 s1=dipderg(2,jj,i)*dip(3,kk,k)
9878 s1=dipderg(4,jj,j)*dip(2,kk,l)
9881 s2=0.5d0*scalar2(Ub2der(1,i),auxvec(1))
9883 call matvec2(ADtEA1derg(1,1,1,3-imat),b1(1,j+1),auxvec1(1))
9884 s3=-0.5d0*scalar2(b1(1,j),auxvec1(1))
9886 call matvec2(ADtEA1derg(1,1,1,3-imat),b1(1,l+1),auxvec1(1))
9887 s3=-0.5d0*scalar2(b1(1,l),auxvec1(1))
9889 s4=0.25d0*scalar2(vv(1),Dtobr2der(1,i))
9890 if (wturn6.gt.0.0d0 .and. k.eq.l+4 .and. i.eq.j+2) then
9891 cd write (2,*) 'turn6 derivatives'
9893 gel_loc_turn6(i-1)=gel_loc_turn6(i-1)-ekont*(s1+s2+s3+s4)
9895 gel_loc_turn6(i-1)=gel_loc_turn6(i-1)-ekont*(s2+s3+s4)
9899 g_corr6_loc(i-1)=g_corr6_loc(i-1)-ekont*(s1+s2+s3+s4)
9901 g_corr6_loc(i-1)=g_corr6_loc(i-1)-ekont*(s2+s3+s4)
9905 C Derivatives in gamma(k-1)
9908 s1=dip(3,jj,i)*dipderg(2,kk,k)
9910 s1=dip(2,jj,j)*dipderg(4,kk,l)
9913 call matvec2(AECA(1,1,imat),Ub2der(1,k),auxvec1(1))
9914 s2=0.5d0*scalar2(Ub2(1,i),auxvec1(1))
9916 call matvec2(ADtEA1derg(1,1,2,3-imat),b1(1,j+1),auxvec1(1))
9917 s3=-0.5d0*scalar2(b1(1,j),auxvec1(1))
9919 call matvec2(ADtEA1derg(1,1,2,3-imat),b1(1,l+1),auxvec1(1))
9920 s3=-0.5d0*scalar2(b1(1,l),auxvec1(1))
9922 call transpose2(EUgder(1,1,k),auxmat1(1,1))
9923 call matmat2(AECA(1,1,imat),auxmat1(1,1),pizda(1,1))
9924 vv(1)=pizda(1,1)-pizda(2,2)
9925 vv(2)=pizda(2,1)+pizda(1,2)
9926 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
9927 if (wturn6.gt.0.0d0 .and. k.eq.l+4 .and. i.eq.j+2) then
9929 gel_loc_turn6(k-1)=gel_loc_turn6(k-1)-ekont*(s1+s2+s3+s4)
9931 gel_loc_turn6(k-1)=gel_loc_turn6(k-1)-ekont*(s2+s3+s4)
9935 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s1+s2+s3+s4)
9937 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s2+s3+s4)
9940 C Derivatives in gamma(j-1) or gamma(l-1)
9941 if (l.eq.j+1 .and. l.gt.1) then
9942 call matvec2(AECAderg(1,1,imat),Ub2(1,k),auxvec(1))
9943 s2=0.5d0*scalar2(Ub2(1,i),auxvec(1))
9944 call matmat2(AECAderg(1,1,imat),auxmat(1,1),pizda(1,1))
9945 vv(1)=pizda(1,1)-pizda(2,2)
9946 vv(2)=pizda(2,1)+pizda(1,2)
9947 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
9948 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*(s2+s4)
9949 else if (j.gt.1) then
9950 call matvec2(AECAderg(1,1,imat),Ub2(1,k),auxvec(1))
9951 s2=0.5d0*scalar2(Ub2(1,i),auxvec(1))
9952 call matmat2(AECAderg(1,1,imat),auxmat(1,1),pizda(1,1))
9953 vv(1)=pizda(1,1)-pizda(2,2)
9954 vv(2)=pizda(2,1)+pizda(1,2)
9955 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
9956 if (wturn6.gt.0.0d0 .and. k.eq.l+4 .and. i.eq.j+2) then
9957 gel_loc_turn6(j-1)=gel_loc_turn6(j-1)-ekont*(s2+s4)
9959 g_corr6_loc(j-1)=g_corr6_loc(j-1)-ekont*(s2+s4)
9962 C Cartesian derivatives.
9969 s1=dipderx(lll,kkk,3,jj,i)*dip(3,kk,k)
9971 s1=dipderx(lll,kkk,2,jj,j)*dip(2,kk,l)
9975 s1=dip(3,jj,i)*dipderx(lll,kkk,3,kk,k)
9977 s1=dip(2,jj,j)*dipderx(lll,kkk,2,kk,l)
9981 call matvec2(AECAderx(1,1,lll,kkk,iii,imat),Ub2(1,k),
9983 s2=0.5d0*scalar2(Ub2(1,i),auxvec(1))
9985 call matvec2(ADtEA1derx(1,1,lll,kkk,iii,3-imat),
9986 & b1(1,j+1),auxvec(1))
9987 s3=-0.5d0*scalar2(b1(1,j),auxvec(1))
9989 call matvec2(ADtEA1derx(1,1,lll,kkk,iii,3-imat),
9990 & b1(1,l+1),auxvec(1))
9991 s3=-0.5d0*scalar2(b1(1,l),auxvec(1))
9993 call matmat2(AECAderx(1,1,lll,kkk,iii,imat),auxmat(1,1),
9995 vv(1)=pizda(1,1)-pizda(2,2)
9996 vv(2)=pizda(2,1)+pizda(1,2)
9997 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
9999 if (wturn6.gt.0.0d0 .and. k.eq.l+4 .and. i.eq.j+2) then
10001 derx_turn(lll,kkk,3-iii)=derx_turn(lll,kkk,3-iii)
10004 derx_turn(lll,kkk,3-iii)=derx_turn(lll,kkk,3-iii)
10007 derx_turn(lll,kkk,iii)=derx_turn(lll,kkk,iii)-s3
10010 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-(s1+s2+s4)
10012 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-(s2+s4)
10014 derx(lll,kkk,iii)=derx(lll,kkk,iii)-s3
10018 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s1+s2+s4)
10020 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s2+s4)
10023 derx(lll,kkk,iii)=derx(lll,kkk,iii)-s3
10025 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-s3
10034 c----------------------------------------------------------------------------
10035 double precision function eello_turn6(i,jj,kk)
10036 implicit real*8 (a-h,o-z)
10037 include 'DIMENSIONS'
10038 include 'DIMENSIONS.ZSCOPT'
10039 include 'COMMON.IOUNITS'
10040 include 'COMMON.CHAIN'
10041 include 'COMMON.DERIV'
10042 include 'COMMON.INTERACT'
10043 include 'COMMON.CONTACTS'
10044 include 'COMMON.TORSION'
10045 include 'COMMON.VAR'
10046 include 'COMMON.GEO'
10047 double precision vtemp1(2),vtemp2(2),vtemp3(2),vtemp4(2),
10048 & atemp(2,2),auxmat(2,2),achuj_temp(2,2),gtemp(2,2),gvec(2),
10050 double precision vtemp1d(2),vtemp2d(2),vtemp3d(2),vtemp4d(2),
10051 & atempd(2,2),auxmatd(2,2),achuj_tempd(2,2),gtempd(2,2),gvecd(2)
10052 C 4/7/01 AL Components s1, s8, and s13 were removed, because they pertain to
10053 C the respective energy moment and not to the cluster cumulant.
10062 iti=itype2loc(itype(i))
10063 itk=itype2loc(itype(k))
10064 itk1=itype2loc(itype(k+1))
10065 itl=itype2loc(itype(l))
10066 itj=itype2loc(itype(j))
10067 cd write (2,*) 'itk',itk,' itk1',itk1,' itl',itl,' itj',itj
10068 cd write (2,*) 'i',i,' k',k,' j',j,' l',l
10069 cd if (i.ne.1 .or. j.ne.3 .or. k.ne.2 .or. l.ne.4) then
10074 cd & 'EELLO6: Contacts have occurred for peptide groups',i,j,
10076 cd call checkint_turn6(i,jj,kk,eel_turn6_num)
10080 derx_turn(lll,kkk,iii)=0.0d0
10087 eello6_5=eello6_graph4(l,k,j,i,kk,jj,2,.true.)
10089 cd write (2,*) 'eello6_5',eello6_5
10091 call transpose2(AEA(1,1,1),auxmat(1,1))
10092 call matmat2(EUg(1,1,i+1),auxmat(1,1),auxmat(1,1))
10093 ss1=scalar2(Ub2(1,i+2),b1(1,l))
10094 s1 = (auxmat(1,1)+auxmat(2,2))*ss1
10096 call matvec2(EUg(1,1,i+2),b1(1,l),vtemp1(1))
10097 call matvec2(AEA(1,1,1),vtemp1(1),vtemp1(1))
10098 s2 = scalar2(b1(1,k),vtemp1(1))
10100 call transpose2(AEA(1,1,2),atemp(1,1))
10101 call matmat2(atemp(1,1),EUg(1,1,i+4),atemp(1,1))
10102 call matvec2(Ug2(1,1,i+2),dd(1,1,k+1),vtemp2(1))
10103 s8 = -(atemp(1,1)+atemp(2,2))*scalar2(cc(1,1,l),vtemp2(1))
10105 call matmat2(EUg(1,1,i+3),AEA(1,1,2),auxmat(1,1))
10106 call matvec2(auxmat(1,1),Ub2(1,i+4),vtemp3(1))
10107 s12 = scalar2(Ub2(1,i+2),vtemp3(1))
10109 call transpose2(a_chuj(1,1,kk,i+1),achuj_temp(1,1))
10110 call matmat2(achuj_temp(1,1),EUg(1,1,i+2),gtemp(1,1))
10111 call matmat2(gtemp(1,1),EUg(1,1,i+3),gtemp(1,1))
10112 call matvec2(a_chuj(1,1,jj,i),Ub2(1,i+4),vtemp4(1))
10113 ss13 = scalar2(b1(1,k),vtemp4(1))
10114 s13 = (gtemp(1,1)+gtemp(2,2))*ss13
10116 c write (2,*) 's1,s2,s8,s12,s13',s1,s2,s8,s12,s13
10122 eel_turn6 = eello6_5 - 0.5d0*(s1+s2+s12+s8+s13)
10123 C Derivatives in gamma(i+2)
10124 if (calc_grad) then
10128 call transpose2(AEA(1,1,1),auxmatd(1,1))
10129 call matmat2(EUgder(1,1,i+1),auxmatd(1,1),auxmatd(1,1))
10130 s1d = (auxmatd(1,1)+auxmatd(2,2))*ss1
10131 call transpose2(AEAderg(1,1,2),atempd(1,1))
10132 call matmat2(atempd(1,1),EUg(1,1,i+4),atempd(1,1))
10133 s8d = -(atempd(1,1)+atempd(2,2))*scalar2(cc(1,1,l),vtemp2(1))
10135 call matmat2(EUg(1,1,i+3),AEAderg(1,1,2),auxmatd(1,1))
10136 call matvec2(auxmatd(1,1),Ub2(1,i+4),vtemp3d(1))
10137 s12d = scalar2(Ub2(1,i+2),vtemp3d(1))
10143 gel_loc_turn6(i)=gel_loc_turn6(i)-0.5d0*ekont*(s1d+s8d+s12d)
10144 C Derivatives in gamma(i+3)
10146 call transpose2(AEA(1,1,1),auxmatd(1,1))
10147 call matmat2(EUg(1,1,i+1),auxmatd(1,1),auxmatd(1,1))
10148 ss1d=scalar2(Ub2der(1,i+2),b1(1,l))
10149 s1d = (auxmatd(1,1)+auxmatd(2,2))*ss1d
10151 call matvec2(EUgder(1,1,i+2),b1(1,l),vtemp1d(1))
10152 call matvec2(AEA(1,1,1),vtemp1d(1),vtemp1d(1))
10153 s2d = scalar2(b1(1,k),vtemp1d(1))
10155 call matvec2(Ug2der(1,1,i+2),dd(1,1,k+1),vtemp2d(1))
10156 s8d = -(atemp(1,1)+atemp(2,2))*scalar2(cc(1,1,l),vtemp2d(1))
10158 s12d = scalar2(Ub2der(1,i+2),vtemp3(1))
10160 call matmat2(achuj_temp(1,1),EUgder(1,1,i+2),gtempd(1,1))
10161 call matmat2(gtempd(1,1),EUg(1,1,i+3),gtempd(1,1))
10162 s13d = (gtempd(1,1)+gtempd(2,2))*ss13
10170 gel_loc_turn6(i+1)=gel_loc_turn6(i+1)
10171 & -0.5d0*ekont*(s1d+s2d+s8d+s12d+s13d)
10173 gel_loc_turn6(i+1)=gel_loc_turn6(i+1)
10174 & -0.5d0*ekont*(s2d+s12d)
10176 C Derivatives in gamma(i+4)
10177 call matmat2(EUgder(1,1,i+3),AEA(1,1,2),auxmatd(1,1))
10178 call matvec2(auxmatd(1,1),Ub2(1,i+4),vtemp3d(1))
10179 s12d = scalar2(Ub2(1,i+2),vtemp3d(1))
10181 call matmat2(achuj_temp(1,1),EUg(1,1,i+2),gtempd(1,1))
10182 call matmat2(gtempd(1,1),EUgder(1,1,i+3),gtempd(1,1))
10183 s13d = (gtempd(1,1)+gtempd(2,2))*ss13
10191 gel_loc_turn6(i+2)=gel_loc_turn6(i+2)-0.5d0*ekont*(s12d+s13d)
10193 gel_loc_turn6(i+2)=gel_loc_turn6(i+2)-0.5d0*ekont*(s12d)
10195 C Derivatives in gamma(i+5)
10197 call transpose2(AEAderg(1,1,1),auxmatd(1,1))
10198 call matmat2(EUg(1,1,i+1),auxmatd(1,1),auxmatd(1,1))
10199 s1d = (auxmatd(1,1)+auxmatd(2,2))*ss1
10201 call matvec2(EUg(1,1,i+2),b1(1,l),vtemp1d(1))
10202 call matvec2(AEAderg(1,1,1),vtemp1d(1),vtemp1d(1))
10203 s2d = scalar2(b1(1,k),vtemp1d(1))
10205 call transpose2(AEA(1,1,2),atempd(1,1))
10206 call matmat2(atempd(1,1),EUgder(1,1,i+4),atempd(1,1))
10207 s8d = -(atempd(1,1)+atempd(2,2))*scalar2(cc(1,1,l),vtemp2(1))
10209 call matvec2(auxmat(1,1),Ub2der(1,i+4),vtemp3d(1))
10210 s12d = scalar2(Ub2(1,i+2),vtemp3d(1))
10212 call matvec2(a_chuj(1,1,jj,i),Ub2der(1,i+4),vtemp4d(1))
10213 ss13d = scalar2(b1(1,k),vtemp4d(1))
10214 s13d = (gtemp(1,1)+gtemp(2,2))*ss13d
10222 gel_loc_turn6(i+3)=gel_loc_turn6(i+3)
10223 & -0.5d0*ekont*(s1d+s2d+s8d+s12d+s13d)
10225 gel_loc_turn6(i+3)=gel_loc_turn6(i+3)
10226 & -0.5d0*ekont*(s2d+s12d)
10228 C Cartesian derivatives
10233 call transpose2(AEAderx(1,1,lll,kkk,iii,1),auxmatd(1,1))
10234 call matmat2(EUg(1,1,i+1),auxmatd(1,1),auxmatd(1,1))
10235 s1d = (auxmatd(1,1)+auxmatd(2,2))*ss1
10237 call matvec2(EUg(1,1,i+2),b1(1,l),vtemp1(1))
10238 call matvec2(AEAderx(1,1,lll,kkk,iii,1),vtemp1(1),
10240 s2d = scalar2(b1(1,k),vtemp1d(1))
10242 call transpose2(AEAderx(1,1,lll,kkk,iii,2),atempd(1,1))
10243 call matmat2(atempd(1,1),EUg(1,1,i+4),atempd(1,1))
10244 s8d = -(atempd(1,1)+atempd(2,2))*
10245 & scalar2(cc(1,1,l),vtemp2(1))
10247 call matmat2(EUg(1,1,i+3),AEAderx(1,1,lll,kkk,iii,2),
10249 call matvec2(auxmatd(1,1),Ub2(1,i+4),vtemp3d(1))
10250 s12d = scalar2(Ub2(1,i+2),vtemp3d(1))
10257 derx_turn(lll,kkk,iii) = derx_turn(lll,kkk,iii)
10258 & - 0.5d0*(s1d+s2d)
10260 derx_turn(lll,kkk,iii) = derx_turn(lll,kkk,iii)
10264 derx_turn(lll,kkk,3-iii) = derx_turn(lll,kkk,3-iii)
10265 & - 0.5d0*(s8d+s12d)
10267 derx_turn(lll,kkk,3-iii) = derx_turn(lll,kkk,3-iii)
10276 call transpose2(a_chuj_der(1,1,lll,kkk,kk,i+1),
10277 & achuj_tempd(1,1))
10278 call matmat2(achuj_tempd(1,1),EUg(1,1,i+2),gtempd(1,1))
10279 call matmat2(gtempd(1,1),EUg(1,1,i+3),gtempd(1,1))
10280 s13d=(gtempd(1,1)+gtempd(2,2))*ss13
10281 derx_turn(lll,kkk,2) = derx_turn(lll,kkk,2)-0.5d0*s13d
10282 call matvec2(a_chuj_der(1,1,lll,kkk,jj,i),Ub2(1,i+4),
10284 ss13d = scalar2(b1(1,k),vtemp4d(1))
10285 s13d = (gtemp(1,1)+gtemp(2,2))*ss13d
10286 derx_turn(lll,kkk,1) = derx_turn(lll,kkk,1)-0.5d0*s13d
10290 cd write(iout,*) 'eel6_turn6',eel_turn6,' eel_turn6_num',
10291 cd & 16*eel_turn6_num
10293 if (j.lt.nres-1) then
10300 if (l.lt.nres-1) then
10308 cgrad ggg1(ll)=eel_turn6*g_contij(ll,1)
10309 cgrad ggg2(ll)=eel_turn6*g_contij(ll,2)
10310 cgrad ghalf=0.5d0*ggg1(ll)
10312 gturn6ij=eel_turn6*g_contij(ll,1)+ekont*derx_turn(ll,1,1)
10313 gturn6kl=eel_turn6*g_contij(ll,2)+ekont*derx_turn(ll,1,2)
10314 gcorr6_turn(ll,i)=gcorr6_turn(ll,i)!+ghalf
10315 & +ekont*derx_turn(ll,2,1)
10316 gcorr6_turn(ll,i+1)=gcorr6_turn(ll,i+1)+ekont*derx_turn(ll,3,1)
10317 gcorr6_turn(ll,j)=gcorr6_turn(ll,j)!+ghalf
10318 & +ekont*derx_turn(ll,4,1)
10319 gcorr6_turn(ll,j1)=gcorr6_turn(ll,j1)+ekont*derx_turn(ll,5,1)
10320 gcorr6_turn_long(ll,j)=gcorr6_turn_long(ll,j)+gturn6ij
10321 gcorr6_turn_long(ll,i)=gcorr6_turn_long(ll,i)-gturn6ij
10322 cgrad ghalf=0.5d0*ggg2(ll)
10324 gcorr6_turn(ll,k)=gcorr6_turn(ll,k)!+ghalf
10325 & +ekont*derx_turn(ll,2,2)
10326 gcorr6_turn(ll,k+1)=gcorr6_turn(ll,k+1)+ekont*derx_turn(ll,3,2)
10327 gcorr6_turn(ll,l)=gcorr6_turn(ll,l)!+ghalf
10328 & +ekont*derx_turn(ll,4,2)
10329 gcorr6_turn(ll,l1)=gcorr6_turn(ll,l1)+ekont*derx_turn(ll,5,2)
10330 gcorr6_turn_long(ll,l)=gcorr6_turn_long(ll,l)+gturn6kl
10331 gcorr6_turn_long(ll,k)=gcorr6_turn_long(ll,k)-gturn6kl
10336 cgrad gcorr6_turn(ll,m)=gcorr6_turn(ll,m)+ggg1(ll)
10341 cgrad gcorr6_turn(ll,m)=gcorr6_turn(ll,m)+ggg2(ll)
10347 cgrad gcorr6_turn(ll,m)=gcorr6_turn(ll,m)+ekont*derx_turn(ll,1,1)
10352 cgrad gcorr6_turn(ll,m)=gcorr6_turn(ll,m)+ekont*derx_turn(ll,1,2)
10356 cd write (2,*) iii,g_corr6_loc(iii)
10359 eello_turn6=ekont*eel_turn6
10360 cd write (2,*) 'ekont',ekont
10361 cd write (2,*) 'eel_turn6',ekont*eel_turn6
10365 crc-------------------------------------------------
10366 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
10367 subroutine Eliptransfer(eliptran)
10368 implicit real*8 (a-h,o-z)
10369 include 'DIMENSIONS'
10370 include 'DIMENSIONS.ZSCOPT'
10371 include 'COMMON.GEO'
10372 include 'COMMON.VAR'
10373 include 'COMMON.LOCAL'
10374 include 'COMMON.CHAIN'
10375 include 'COMMON.DERIV'
10376 include 'COMMON.INTERACT'
10377 include 'COMMON.IOUNITS'
10378 include 'COMMON.CALC'
10379 include 'COMMON.CONTROL'
10380 include 'COMMON.SPLITELE'
10381 include 'COMMON.SBRIDGE'
10382 C this is done by Adasko
10383 C print *,"wchodze"
10384 C structure of box:
10386 C--bordliptop-- buffore starts
10387 C--bufliptop--- here true lipid starts
10389 C--buflipbot--- lipid ends buffore starts
10390 C--bordlipbot--buffore ends
10394 if (itype(i).eq.ntyp1) cycle
10396 positi=(mod(((c(3,i)+c(3,i+1))/2.0d0),boxzsize))
10397 if (positi.le.0) positi=positi+boxzsize
10399 C first for peptide groups
10400 c for each residue check if it is in lipid or lipid water border area
10401 if ((positi.gt.bordlipbot)
10402 &.and.(positi.lt.bordliptop)) then
10403 C the energy transfer exist
10404 if (positi.lt.buflipbot) then
10405 C what fraction I am in
10407 & ((positi-bordlipbot)/lipbufthick)
10408 C lipbufthick is thickenes of lipid buffore
10409 sslip=sscalelip(fracinbuf)
10410 ssgradlip=-sscagradlip(fracinbuf)/lipbufthick
10411 eliptran=eliptran+sslip*pepliptran
10412 gliptranc(3,i)=gliptranc(3,i)+ssgradlip*pepliptran/2.0d0
10413 gliptranc(3,i-1)=gliptranc(3,i-1)+ssgradlip*pepliptran/2.0d0
10414 C gliptranc(3,i-2)=gliptranc(3,i)+ssgradlip*pepliptran
10415 elseif (positi.gt.bufliptop) then
10416 fracinbuf=1.0d0-((bordliptop-positi)/lipbufthick)
10417 sslip=sscalelip(fracinbuf)
10418 ssgradlip=sscagradlip(fracinbuf)/lipbufthick
10419 eliptran=eliptran+sslip*pepliptran
10420 gliptranc(3,i)=gliptranc(3,i)+ssgradlip*pepliptran/2.0d0
10421 gliptranc(3,i-1)=gliptranc(3,i-1)+ssgradlip*pepliptran/2.0d0
10422 C gliptranc(3,i-2)=gliptranc(3,i)+ssgradlip*pepliptran
10423 C print *, "doing sscalefor top part"
10424 C print *,i,sslip,fracinbuf,ssgradlip
10426 eliptran=eliptran+pepliptran
10427 C print *,"I am in true lipid"
10430 C eliptran=elpitran+0.0 ! I am in water
10433 C print *, "nic nie bylo w lipidzie?"
10434 C now multiply all by the peptide group transfer factor
10435 C eliptran=eliptran*pepliptran
10436 C now the same for side chains
10439 if (itype(i).eq.ntyp1) cycle
10440 positi=(mod(c(3,i+nres),boxzsize))
10441 if (positi.le.0) positi=positi+boxzsize
10442 C print *,mod(c(3,i+nres),boxzsize),bordlipbot,bordliptop
10443 c for each residue check if it is in lipid or lipid water border area
10444 C respos=mod(c(3,i+nres),boxzsize)
10445 C print *,positi,bordlipbot,buflipbot
10446 if ((positi.gt.bordlipbot)
10447 & .and.(positi.lt.bordliptop)) then
10448 C the energy transfer exist
10449 if (positi.lt.buflipbot) then
10451 & ((positi-bordlipbot)/lipbufthick)
10452 C lipbufthick is thickenes of lipid buffore
10453 sslip=sscalelip(fracinbuf)
10454 ssgradlip=-sscagradlip(fracinbuf)/lipbufthick
10455 eliptran=eliptran+sslip*liptranene(itype(i))
10456 gliptranx(3,i)=gliptranx(3,i)
10457 &+ssgradlip*liptranene(itype(i))
10458 gliptranc(3,i-1)= gliptranc(3,i-1)
10459 &+ssgradlip*liptranene(itype(i))
10460 C print *,"doing sccale for lower part"
10461 elseif (positi.gt.bufliptop) then
10463 &((bordliptop-positi)/lipbufthick)
10464 sslip=sscalelip(fracinbuf)
10465 ssgradlip=sscagradlip(fracinbuf)/lipbufthick
10466 eliptran=eliptran+sslip*liptranene(itype(i))
10467 gliptranx(3,i)=gliptranx(3,i)
10468 &+ssgradlip*liptranene(itype(i))
10469 gliptranc(3,i-1)= gliptranc(3,i-1)
10470 &+ssgradlip*liptranene(itype(i))
10471 C print *, "doing sscalefor top part",sslip,fracinbuf
10473 eliptran=eliptran+liptranene(itype(i))
10474 C print *,"I am in true lipid"
10476 endif ! if in lipid or buffor
10478 C eliptran=elpitran+0.0 ! I am in water
10484 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
10486 SUBROUTINE MATVEC2(A1,V1,V2)
10487 implicit real*8 (a-h,o-z)
10488 include 'DIMENSIONS'
10489 DIMENSION A1(2,2),V1(2),V2(2)
10493 c 3 VI=VI+A1(I,K)*V1(K)
10497 vaux1=a1(1,1)*v1(1)+a1(1,2)*v1(2)
10498 vaux2=a1(2,1)*v1(1)+a1(2,2)*v1(2)
10503 C---------------------------------------
10504 SUBROUTINE MATMAT2(A1,A2,A3)
10505 implicit real*8 (a-h,o-z)
10506 include 'DIMENSIONS'
10507 DIMENSION A1(2,2),A2(2,2),A3(2,2)
10508 c DIMENSION AI3(2,2)
10512 c A3IJ=A3IJ+A1(I,K)*A2(K,J)
10518 ai3_11=a1(1,1)*a2(1,1)+a1(1,2)*a2(2,1)
10519 ai3_12=a1(1,1)*a2(1,2)+a1(1,2)*a2(2,2)
10520 ai3_21=a1(2,1)*a2(1,1)+a1(2,2)*a2(2,1)
10521 ai3_22=a1(2,1)*a2(1,2)+a1(2,2)*a2(2,2)
10529 c-------------------------------------------------------------------------
10530 double precision function scalar2(u,v)
10532 double precision u(2),v(2)
10533 double precision sc
10535 scalar2=u(1)*v(1)+u(2)*v(2)
10539 C-----------------------------------------------------------------------------
10541 subroutine transpose2(a,at)
10543 double precision a(2,2),at(2,2)
10550 c--------------------------------------------------------------------------
10551 subroutine transpose(n,a,at)
10554 double precision a(n,n),at(n,n)
10562 C---------------------------------------------------------------------------
10563 subroutine prodmat3(a1,a2,kk,transp,prod)
10566 double precision a1(2,2),a2(2,2),a2t(2,2),kk(2,2),prod(2,2)
10568 crc double precision auxmat(2,2),prod_(2,2)
10571 crc call transpose2(kk(1,1),auxmat(1,1))
10572 crc call matmat2(a1(1,1),auxmat(1,1),auxmat(1,1))
10573 crc call matmat2(auxmat(1,1),a2(1,1),prod_(1,1))
10575 prod(1,1)=(a1(1,1)*kk(1,1)+a1(1,2)*kk(1,2))*a2(1,1)
10576 & +(a1(1,1)*kk(2,1)+a1(1,2)*kk(2,2))*a2(2,1)
10577 prod(1,2)=(a1(1,1)*kk(1,1)+a1(1,2)*kk(1,2))*a2(1,2)
10578 & +(a1(1,1)*kk(2,1)+a1(1,2)*kk(2,2))*a2(2,2)
10579 prod(2,1)=(a1(2,1)*kk(1,1)+a1(2,2)*kk(1,2))*a2(1,1)
10580 & +(a1(2,1)*kk(2,1)+a1(2,2)*kk(2,2))*a2(2,1)
10581 prod(2,2)=(a1(2,1)*kk(1,1)+a1(2,2)*kk(1,2))*a2(1,2)
10582 & +(a1(2,1)*kk(2,1)+a1(2,2)*kk(2,2))*a2(2,2)
10585 crc call matmat2(a1(1,1),kk(1,1),auxmat(1,1))
10586 crc call matmat2(auxmat(1,1),a2(1,1),prod_(1,1))
10588 prod(1,1)=(a1(1,1)*kk(1,1)+a1(1,2)*kk(2,1))*a2(1,1)
10589 & +(a1(1,1)*kk(1,2)+a1(1,2)*kk(2,2))*a2(2,1)
10590 prod(1,2)=(a1(1,1)*kk(1,1)+a1(1,2)*kk(2,1))*a2(1,2)
10591 & +(a1(1,1)*kk(1,2)+a1(1,2)*kk(2,2))*a2(2,2)
10592 prod(2,1)=(a1(2,1)*kk(1,1)+a1(2,2)*kk(2,1))*a2(1,1)
10593 & +(a1(2,1)*kk(1,2)+a1(2,2)*kk(2,2))*a2(2,1)
10594 prod(2,2)=(a1(2,1)*kk(1,1)+a1(2,2)*kk(2,1))*a2(1,2)
10595 & +(a1(2,1)*kk(1,2)+a1(2,2)*kk(2,2))*a2(2,2)
10598 c call transpose2(a2(1,1),a2t(1,1))
10601 crc print *,((prod_(i,j),i=1,2),j=1,2)
10602 crc print *,((prod(i,j),i=1,2),j=1,2)
10606 C-----------------------------------------------------------------------------
10607 double precision function scalar(u,v)
10609 double precision u(3),v(3)
10610 double precision sc
10619 C-----------------------------------------------------------------------
10620 double precision function sscale(r)
10621 double precision r,gamm
10622 include "COMMON.SPLITELE"
10623 if(r.lt.r_cut-rlamb) then
10625 else if(r.le.r_cut.and.r.ge.r_cut-rlamb) then
10626 gamm=(r-(r_cut-rlamb))/rlamb
10627 sscale=1.0d0+gamm*gamm*(2*gamm-3.0d0)
10633 C-----------------------------------------------------------------------
10634 C-----------------------------------------------------------------------
10635 double precision function sscagrad(r)
10636 double precision r,gamm
10637 include "COMMON.SPLITELE"
10638 if(r.lt.r_cut-rlamb) then
10640 else if(r.le.r_cut.and.r.ge.r_cut-rlamb) then
10641 gamm=(r-(r_cut-rlamb))/rlamb
10642 sscagrad=gamm*(6*gamm-6.0d0)/rlamb
10648 C-----------------------------------------------------------------------
10649 C-----------------------------------------------------------------------
10650 double precision function sscalelip(r)
10651 double precision r,gamm
10652 include "COMMON.SPLITELE"
10653 C if(r.lt.r_cut-rlamb) then
10655 C else if(r.le.r_cut.and.r.ge.r_cut-rlamb) then
10656 C gamm=(r-(r_cut-rlamb))/rlamb
10657 sscalelip=1.0d0+r*r*(2*r-3.0d0)
10663 C-----------------------------------------------------------------------
10664 double precision function sscagradlip(r)
10665 double precision r,gamm
10666 include "COMMON.SPLITELE"
10667 C if(r.lt.r_cut-rlamb) then
10669 C else if(r.le.r_cut.and.r.ge.r_cut-rlamb) then
10670 C gamm=(r-(r_cut-rlamb))/rlamb
10671 sscagradlip=r*(6*r-6.0d0)
10678 C-----------------------------------------------------------------------
10679 subroutine set_shield_fac
10680 implicit real*8 (a-h,o-z)
10681 include 'DIMENSIONS'
10682 include 'DIMENSIONS.ZSCOPT'
10683 include 'COMMON.CHAIN'
10684 include 'COMMON.DERIV'
10685 include 'COMMON.IOUNITS'
10686 include 'COMMON.SHIELD'
10687 include 'COMMON.INTERACT'
10688 C this is the squar root 77 devided by 81 the epislion in lipid (in protein)
10689 double precision div77_81/0.974996043d0/,
10690 &div4_81/0.2222222222d0/,sh_frac_dist_grad(3)
10692 C the vector between center of side_chain and peptide group
10693 double precision pep_side(3),long,side_calf(3),
10694 &pept_group(3),costhet_grad(3),cosphi_grad_long(3),
10695 &cosphi_grad_loc(3),pep_side_norm(3),side_calf_norm(3)
10696 C the line belowe needs to be changed for FGPROC>1
10698 if ((itype(i).eq.ntyp1).and.itype(i+1).eq.ntyp1) cycle
10700 Cif there two consequtive dummy atoms there is no peptide group between them
10701 C the line below has to be changed for FGPROC>1
10704 if ((itype(k).eq.ntyp1).or.(itype(k).eq.10)) cycle
10708 C first lets set vector conecting the ithe side-chain with kth side-chain
10709 pep_side(j)=c(j,k+nres)-(c(j,i)+c(j,i+1))/2.0d0
10710 C pep_side(j)=2.0d0
10711 C and vector conecting the side-chain with its proper calfa
10712 side_calf(j)=c(j,k+nres)-c(j,k)
10713 C side_calf(j)=2.0d0
10714 pept_group(j)=c(j,i)-c(j,i+1)
10715 C lets have their lenght
10716 dist_pep_side=pep_side(j)**2+dist_pep_side
10717 dist_side_calf=dist_side_calf+side_calf(j)**2
10718 dist_pept_group=dist_pept_group+pept_group(j)**2
10720 dist_pep_side=dsqrt(dist_pep_side)
10721 dist_pept_group=dsqrt(dist_pept_group)
10722 dist_side_calf=dsqrt(dist_side_calf)
10724 pep_side_norm(j)=pep_side(j)/dist_pep_side
10725 side_calf_norm(j)=dist_side_calf
10727 C now sscale fraction
10728 sh_frac_dist=-(dist_pep_side-rpp(1,1)-buff_shield)/buff_shield
10729 C print *,buff_shield,"buff"
10731 if (sh_frac_dist.le.0.0) cycle
10732 C If we reach here it means that this side chain reaches the shielding sphere
10733 C Lets add him to the list for gradient
10734 ishield_list(i)=ishield_list(i)+1
10735 C ishield_list is a list of non 0 side-chain that contribute to factor gradient
10736 C this list is essential otherwise problem would be O3
10737 shield_list(ishield_list(i),i)=k
10738 C Lets have the sscale value
10739 if (sh_frac_dist.gt.1.0) then
10740 scale_fac_dist=1.0d0
10742 sh_frac_dist_grad(j)=0.0d0
10745 scale_fac_dist=-sh_frac_dist*sh_frac_dist
10746 & *(2.0*sh_frac_dist-3.0d0)
10747 fac_help_scale=6.0*(sh_frac_dist-sh_frac_dist**2)
10748 & /dist_pep_side/buff_shield*0.5
10749 C remember for the final gradient multiply sh_frac_dist_grad(j)
10750 C for side_chain by factor -2 !
10752 sh_frac_dist_grad(j)=fac_help_scale*pep_side(j)
10753 C print *,"jestem",scale_fac_dist,fac_help_scale,
10754 C & sh_frac_dist_grad(j)
10757 C if ((i.eq.3).and.(k.eq.2)) then
10758 C print *,i,sh_frac_dist,dist_pep,fac_help_scale,scale_fac_dist
10762 C this is what is now we have the distance scaling now volume...
10763 short=short_r_sidechain(itype(k))
10764 long=long_r_sidechain(itype(k))
10765 costhet=1.0d0/dsqrt(1.0+short**2/dist_pep_side**2)
10768 costhet_fac=costhet**3*short**2*(-0.5)/dist_pep_side**4
10769 C costhet_fac=0.0d0
10771 costhet_grad(j)=costhet_fac*pep_side(j)
10773 C remember for the final gradient multiply costhet_grad(j)
10774 C for side_chain by factor -2 !
10775 C fac alfa is angle between CB_k,CA_k, CA_i,CA_i+1
10776 C pep_side0pept_group is vector multiplication
10777 pep_side0pept_group=0.0
10779 pep_side0pept_group=pep_side0pept_group+pep_side(j)*side_calf(j)
10781 cosalfa=(pep_side0pept_group/
10782 & (dist_pep_side*dist_side_calf))
10783 fac_alfa_sin=1.0-cosalfa**2
10784 fac_alfa_sin=dsqrt(fac_alfa_sin)
10785 rkprim=fac_alfa_sin*(long-short)+short
10787 cosphi=1.0d0/dsqrt(1.0+rkprim**2/dist_pep_side**2)
10788 cosphi_fac=cosphi**3*rkprim**2*(-0.5)/dist_pep_side**4
10791 cosphi_grad_long(j)=cosphi_fac*pep_side(j)
10792 &+cosphi**3*0.5/dist_pep_side**2*(-rkprim)
10793 &*(long-short)/fac_alfa_sin*cosalfa/
10794 &((dist_pep_side*dist_side_calf))*
10795 &((side_calf(j))-cosalfa*
10796 &((pep_side(j)/dist_pep_side)*dist_side_calf))
10798 cosphi_grad_loc(j)=cosphi**3*0.5/dist_pep_side**2*(-rkprim)
10799 &*(long-short)/fac_alfa_sin*cosalfa
10800 &/((dist_pep_side*dist_side_calf))*
10802 &cosalfa*side_calf(j)/dist_side_calf*dist_pep_side)
10805 VofOverlap=VSolvSphere/2.0d0*(1.0-costhet)*(1.0-cosphi)
10808 C now the gradient...
10809 C grad_shield is gradient of Calfa for peptide groups
10810 C write(iout,*) "shield_compon",i,k,VSolvSphere,scale_fac_dist,
10812 C write(iout,*) "cosphi_compon",i,k,pep_side0pept_group,
10813 C & dist_pep_side,dist_side_calf,c(1,k+nres),c(1,k),itype(k)
10815 grad_shield(j,i)=grad_shield(j,i)
10816 C gradient po skalowaniu
10817 & +(sh_frac_dist_grad(j)
10818 C gradient po costhet
10819 &-scale_fac_dist*costhet_grad(j)/(1.0-costhet)
10820 &-scale_fac_dist*(cosphi_grad_long(j))
10821 &/(1.0-cosphi) )*div77_81
10823 C grad_shield_side is Cbeta sidechain gradient
10824 grad_shield_side(j,ishield_list(i),i)=
10825 & (sh_frac_dist_grad(j)*-2.0d0
10826 & +scale_fac_dist*costhet_grad(j)*2.0d0/(1.0-costhet)
10827 & +scale_fac_dist*(cosphi_grad_long(j))
10828 & *2.0d0/(1.0-cosphi))
10829 & *div77_81*VofOverlap
10831 grad_shield_loc(j,ishield_list(i),i)=
10832 & scale_fac_dist*cosphi_grad_loc(j)
10833 & *2.0d0/(1.0-cosphi)
10834 & *div77_81*VofOverlap
10836 VolumeTotal=VolumeTotal+VofOverlap*scale_fac_dist
10838 fac_shield(i)=VolumeTotal*div77_81+div4_81
10839 C write(2,*) "TOTAL VOLUME",i,VolumeTotal,fac_shield(i)
10843 C--------------------------------------------------------------------------
10844 C first for shielding is setting of function of side-chains
10845 subroutine set_shield_fac2
10846 implicit real*8 (a-h,o-z)
10847 include 'DIMENSIONS'
10848 include 'DIMENSIONS.ZSCOPT'
10849 include 'COMMON.CHAIN'
10850 include 'COMMON.DERIV'
10851 include 'COMMON.IOUNITS'
10852 include 'COMMON.SHIELD'
10853 include 'COMMON.INTERACT'
10854 C this is the squar root 77 devided by 81 the epislion in lipid (in protein)
10855 double precision div77_81/0.974996043d0/,
10856 &div4_81/0.2222222222d0/,sh_frac_dist_grad(3)
10858 C the vector between center of side_chain and peptide group
10859 double precision pep_side(3),long,side_calf(3),
10860 &pept_group(3),costhet_grad(3),cosphi_grad_long(3),
10861 &cosphi_grad_loc(3),pep_side_norm(3),side_calf_norm(3)
10862 C the line belowe needs to be changed for FGPROC>1
10864 if ((itype(i).eq.ntyp1).and.itype(i+1).eq.ntyp1) cycle
10866 Cif there two consequtive dummy atoms there is no peptide group between them
10867 C the line below has to be changed for FGPROC>1
10870 if ((itype(k).eq.ntyp1).or.(itype(k).eq.10)) cycle
10874 C first lets set vector conecting the ithe side-chain with kth side-chain
10875 pep_side(j)=c(j,k+nres)-(c(j,i)+c(j,i+1))/2.0d0
10876 C pep_side(j)=2.0d0
10877 C and vector conecting the side-chain with its proper calfa
10878 side_calf(j)=c(j,k+nres)-c(j,k)
10879 C side_calf(j)=2.0d0
10880 pept_group(j)=c(j,i)-c(j,i+1)
10881 C lets have their lenght
10882 dist_pep_side=pep_side(j)**2+dist_pep_side
10883 dist_side_calf=dist_side_calf+side_calf(j)**2
10884 dist_pept_group=dist_pept_group+pept_group(j)**2
10886 dist_pep_side=dsqrt(dist_pep_side)
10887 dist_pept_group=dsqrt(dist_pept_group)
10888 dist_side_calf=dsqrt(dist_side_calf)
10890 pep_side_norm(j)=pep_side(j)/dist_pep_side
10891 side_calf_norm(j)=dist_side_calf
10893 C now sscale fraction
10894 sh_frac_dist=-(dist_pep_side-rpp(1,1)-buff_shield)/buff_shield
10895 C print *,buff_shield,"buff"
10897 if (sh_frac_dist.le.0.0) cycle
10898 C If we reach here it means that this side chain reaches the shielding sphere
10899 C Lets add him to the list for gradient
10900 ishield_list(i)=ishield_list(i)+1
10901 C ishield_list is a list of non 0 side-chain that contribute to factor gradient
10902 C this list is essential otherwise problem would be O3
10903 shield_list(ishield_list(i),i)=k
10904 C Lets have the sscale value
10905 if (sh_frac_dist.gt.1.0) then
10906 scale_fac_dist=1.0d0
10908 sh_frac_dist_grad(j)=0.0d0
10911 scale_fac_dist=-sh_frac_dist*sh_frac_dist
10912 & *(2.0d0*sh_frac_dist-3.0d0)
10913 fac_help_scale=6.0d0*(sh_frac_dist-sh_frac_dist**2)
10914 & /dist_pep_side/buff_shield*0.5d0
10915 C remember for the final gradient multiply sh_frac_dist_grad(j)
10916 C for side_chain by factor -2 !
10918 sh_frac_dist_grad(j)=fac_help_scale*pep_side(j)
10919 C sh_frac_dist_grad(j)=0.0d0
10920 C scale_fac_dist=1.0d0
10921 C print *,"jestem",scale_fac_dist,fac_help_scale,
10922 C & sh_frac_dist_grad(j)
10925 C this is what is now we have the distance scaling now volume...
10926 short=short_r_sidechain(itype(k))
10927 long=long_r_sidechain(itype(k))
10928 costhet=1.0d0/dsqrt(1.0d0+short**2/dist_pep_side**2)
10929 sinthet=short/dist_pep_side*costhet
10933 costhet_fac=costhet**3*short**2*(-0.5d0)/dist_pep_side**4
10934 C sinthet_fac=costhet**2*0.5d0*(short**3/dist_pep_side**4*costhet
10935 C & -short/dist_pep_side**2/costhet)
10936 C costhet_fac=0.0d0
10938 costhet_grad(j)=costhet_fac*pep_side(j)
10940 C remember for the final gradient multiply costhet_grad(j)
10941 C for side_chain by factor -2 !
10942 C fac alfa is angle between CB_k,CA_k, CA_i,CA_i+1
10943 C pep_side0pept_group is vector multiplication
10944 pep_side0pept_group=0.0d0
10946 pep_side0pept_group=pep_side0pept_group+pep_side(j)*side_calf(j)
10948 cosalfa=(pep_side0pept_group/
10949 & (dist_pep_side*dist_side_calf))
10950 fac_alfa_sin=1.0d0-cosalfa**2
10951 fac_alfa_sin=dsqrt(fac_alfa_sin)
10952 rkprim=fac_alfa_sin*(long-short)+short
10956 cosphi=1.0d0/dsqrt(1.0d0+rkprim**2/dist_pep_side**2)
10958 cosphi_fac=cosphi**3*rkprim**2*(-0.5d0)/dist_pep_side**4
10959 sinphi=rkprim/dist_pep_side/dsqrt(1.0d0+rkprim**2/
10960 & dist_pep_side**2)
10963 cosphi_grad_long(j)=cosphi_fac*pep_side(j)
10964 &+cosphi**3*0.5d0/dist_pep_side**2*(-rkprim)
10965 &*(long-short)/fac_alfa_sin*cosalfa/
10966 &((dist_pep_side*dist_side_calf))*
10967 &((side_calf(j))-cosalfa*
10968 &((pep_side(j)/dist_pep_side)*dist_side_calf))
10969 C cosphi_grad_long(j)=0.0d0
10970 cosphi_grad_loc(j)=cosphi**3*0.5d0/dist_pep_side**2*(-rkprim)
10971 &*(long-short)/fac_alfa_sin*cosalfa
10972 &/((dist_pep_side*dist_side_calf))*
10974 &cosalfa*side_calf(j)/dist_side_calf*dist_pep_side)
10975 C cosphi_grad_loc(j)=0.0d0
10977 C print *,sinphi,sinthet
10978 VofOverlap=VSolvSphere/2.0d0*(1.0d0-dsqrt(1.0d0-sinphi*sinthet))
10981 C now the gradient...
10983 grad_shield(j,i)=grad_shield(j,i)
10984 C gradient po skalowaniu
10985 & +(sh_frac_dist_grad(j)*VofOverlap
10986 C gradient po costhet
10987 & +scale_fac_dist*VSolvSphere/VSolvSphere_div/4.0d0*
10988 &(1.0d0/(-dsqrt(1.0d0-sinphi*sinthet))*(
10989 & sinphi/sinthet*costhet*costhet_grad(j)
10990 & +sinthet/sinphi*cosphi*cosphi_grad_long(j)))
10992 C grad_shield_side is Cbeta sidechain gradient
10993 grad_shield_side(j,ishield_list(i),i)=
10994 & (sh_frac_dist_grad(j)*-2.0d0
10996 & -scale_fac_dist*VSolvSphere/VSolvSphere_div/2.0d0*
10997 &(1.0d0/(-dsqrt(1.0d0-sinphi*sinthet))*(
10998 & sinphi/sinthet*costhet*costhet_grad(j)
10999 & +sinthet/sinphi*cosphi*cosphi_grad_long(j)))
11002 grad_shield_loc(j,ishield_list(i),i)=
11003 & scale_fac_dist*VSolvSphere/VSolvSphere_div/2.0d0*
11004 &(1.0d0/(dsqrt(1.0d0-sinphi*sinthet))*(
11005 & sinthet/sinphi*cosphi*cosphi_grad_loc(j)
11009 VolumeTotal=VolumeTotal+VofOverlap*scale_fac_dist
11011 fac_shield(i)=VolumeTotal*wshield+(1.0d0-wshield)
11012 C write(2,*) "TOTAL VOLUME",i,VolumeTotal,fac_shield(i)
11013 C write(2,*) "TU",rpp(1,1),short,long,buff_shield
11017 C--------------------------------------------------------------------------
11018 double precision function tschebyshev(m,n,x,y)
11020 include "DIMENSIONS"
11022 double precision x(n),y,yy(0:maxvar),aux
11023 c Tschebyshev polynomial. Note that the first term is omitted
11024 c m=0: the constant term is included
11025 c m=1: the constant term is not included
11029 yy(i)=2*yy(1)*yy(i-1)-yy(i-2)
11038 C--------------------------------------------------------------------------
11039 double precision function gradtschebyshev(m,n,x,y)
11041 include "DIMENSIONS"
11043 double precision x(n+1),y,yy(0:maxvar),aux
11044 c Tschebyshev polynomial. Note that the first term is omitted
11045 c m=0: the constant term is included
11046 c m=1: the constant term is not included
11050 yy(i)=2*y*yy(i-1)-yy(i-2)
11054 aux=aux+x(i+1)*yy(i)*(i+1)
11055 C print *, x(i+1),yy(i),i
11057 gradtschebyshev=aux