1 C-----------------------------------------------------------------------
2 double precision function sscalelip(r)
4 double precision r,gamm
5 include "COMMON.SPLITELE"
6 C if(r.lt.r_cut-rlamb) then
8 C else if(r.le.r_cut.and.r.ge.r_cut-rlamb) then
9 C gamm=(r-(r_cut-rlamb))/rlamb
10 sscalelip=1.0d0+r*r*(2*r-3.0d0)
16 C-----------------------------------------------------------------------
17 double precision function sscagradlip(r)
19 double precision r,gamm
20 include "COMMON.SPLITELE"
21 C if(r.lt.r_cut-rlamb) then
23 C else if(r.le.r_cut.and.r.ge.r_cut-rlamb) then
24 C gamm=(r-(r_cut-rlamb))/rlamb
25 sscagradlip=r*(6*r-6.0d0)
32 C-----------------------------------------------------------------------
33 double precision function sscale(r,r_cut)
35 double precision r,r_cut,gamm
36 include "COMMON.SPLITELE"
37 if(r.lt.r_cut-rlamb) then
39 else if(r.le.r_cut.and.r.ge.r_cut-rlamb) then
40 gamm=(r-(r_cut-rlamb))/rlamb
41 sscale=1.0d0+gamm*gamm*(2*gamm-3.0d0)
47 C-----------------------------------------------------------------------
48 double precision function sscagrad(r,r_cut)
50 double precision r,r_cut,gamm
51 include "COMMON.SPLITELE"
52 if(r.lt.r_cut-rlamb) then
54 else if(r.le.r_cut.and.r.ge.r_cut-rlamb) then
55 gamm=(r-(r_cut-rlamb))/rlamb
56 sscagrad=gamm*(6*gamm-6.0d0)/rlamb
62 C-----------------------------------------------------------------------
63 subroutine elj_long(evdw)
65 C This subroutine calculates the interaction energy of nonbonded side chains
66 C assuming the LJ potential of interaction.
72 include 'COMMON.LOCAL'
73 include 'COMMON.CHAIN'
74 include 'COMMON.DERIV'
75 include 'COMMON.INTERACT'
76 include 'COMMON.TORSION'
77 include 'COMMON.SBRIDGE'
78 include 'COMMON.NAMES'
79 include 'COMMON.IOUNITS'
80 include "COMMON.SPLITELE"
81 c include 'COMMON.CONTACTS'
82 double precision gg(3)
83 double precision evdw,evdwij
84 integer i,j,k,itypi,itypj,itypi1,num_conti,iint
85 double precision xi,yi,zi,xj,yj,zj,rij,eps0ij,fac,e1,e2,rrij,
86 & sigij,r0ij,rcut,sss1,sssgrad1,sqrij
87 double precision sscale,sscagrad
88 c write(iout,*)'Entering ELJ nnt=',nnt,' nct=',nct,' expon=',expon
92 if (itypi.eq.ntyp1) cycle
93 itypi1=iabs(itype(i+1))
98 C Calculate SC interaction energy.
101 cd write (iout,*) 'i=',i,' iint=',iint,' istart=',istart(i,iint),
102 cd & 'iend=',iend(i,iint)
103 do j=istart(i,iint),iend(i,iint)
105 if (itypj.eq.ntyp1) cycle
109 rij=xj*xj+yj*yj+zj*zj
111 eps0ij=eps(itypi,itypj)
112 sss1=sscale(sqrij,r_cut_int)
113 if (sss1.eq.0.0d0) cycle
114 sssgrad1=sscagrad(sqrij,r_cut_int)
116 & sscagrad(sqrij/sigma(itypi,itypj),r_cut_respa)
117 sss=sscale(sqrij/sigma(itypi,itypj),r_cut_respa)
118 if (sss.lt.1.0d0) then
124 evdw=evdw+(1.0d0-sss)*sss1*evdwij
126 C Calculate the components of the gradient in DC and X
128 fac=-rrij*(e1+evdwij)*(1.0d0-sss)*sss1
129 & +evdwij*(-sss1*sssgrad/sigma(itypi,itypj)
130 & +(1.0d0-sss)*sssgrad1)/sqrij
135 gvdwx(k,i)=gvdwx(k,i)-gg(k)
136 gvdwx(k,j)=gvdwx(k,j)+gg(k)
137 gvdwc(k,i)=gvdwc(k,i)-gg(k)
138 gvdwc(k,j)=gvdwc(k,j)+gg(k)
146 gvdwc(j,i)=expon*gvdwc(j,i)
147 gvdwx(j,i)=expon*gvdwx(j,i)
150 C******************************************************************************
154 C To save time, the factor of EXPON has been extracted from ALL components
155 C of GVDWC and GRADX. Remember to multiply them by this factor before further
158 C******************************************************************************
161 C-----------------------------------------------------------------------
162 subroutine elj_short(evdw)
164 C This subroutine calculates the interaction energy of nonbonded side chains
165 C assuming the LJ potential of interaction.
171 include 'COMMON.LOCAL'
172 include 'COMMON.CHAIN'
173 include 'COMMON.DERIV'
174 include 'COMMON.INTERACT'
175 include 'COMMON.TORSION'
176 include 'COMMON.SBRIDGE'
177 include 'COMMON.NAMES'
178 include 'COMMON.IOUNITS'
179 include "COMMON.SPLITELE"
180 c include 'COMMON.CONTACTS'
181 double precision gg(3)
182 double precision evdw,evdwij
183 integer i,j,k,itypi,itypj,itypi1,num_conti,iint
184 double precision xi,yi,zi,xj,yj,zj,rij,eps0ij,fac,e1,e2,rrij,
185 & sigij,r0ij,rcut,sqrij,sss1,sssgrad1
186 double precision sscale,sscagrad
187 c write(iout,*)'Entering ELJ nnt=',nnt,' nct=',nct,' expon=',expon
191 if (itypi.eq.ntyp1) cycle
192 itypi1=iabs(itype(i+1))
199 C Calculate SC interaction energy.
202 cd write (iout,*) 'i=',i,' iint=',iint,' istart=',istart(i,iint),
203 cd & 'iend=',iend(i,iint)
204 do j=istart(i,iint),iend(i,iint)
206 if (itypj.eq.ntyp1) cycle
210 C Change 12/1/95 to calculate four-body interactions
211 rij=xj*xj+yj*yj+zj*zj
213 sss=sscale(sqrij/sigma(itypi,itypj),r_cut_respa)
214 if (sss.gt.0.0d0) then
216 & sscagrad(sqrij/sigma(itypi,itypj),r_cut_respa)
218 eps0ij=eps(itypi,itypj)
225 C Calculate the components of the gradient in DC and X
227 fac=-rrij*(e1+evdwij)*sss+evdwij*sssgrad/sqrij
232 gvdwx(k,i)=gvdwx(k,i)-gg(k)
233 gvdwx(k,j)=gvdwx(k,j)+gg(k)
234 gvdwc(k,i)=gvdwc(k,i)-gg(k)
235 gvdwc(k,j)=gvdwc(k,j)+gg(k)
243 gvdwc(j,i)=expon*gvdwc(j,i)
244 gvdwx(j,i)=expon*gvdwx(j,i)
247 C******************************************************************************
251 C To save time, the factor of EXPON has been extracted from ALL components
252 C of GVDWC and GRADX. Remember to multiply them by this factor before further
255 C******************************************************************************
258 C-----------------------------------------------------------------------------
259 subroutine eljk_long(evdw)
261 C This subroutine calculates the interaction energy of nonbonded side chains
262 C assuming the LJK potential of interaction.
268 include 'COMMON.LOCAL'
269 include 'COMMON.CHAIN'
270 include 'COMMON.DERIV'
271 include 'COMMON.INTERACT'
272 include 'COMMON.IOUNITS'
273 include 'COMMON.NAMES'
274 include "COMMON.SPLITELE"
275 double precision gg(3)
276 double precision evdw,evdwij
277 integer i,j,k,itypi,itypj,itypi1,iint
278 double precision xi,yi,zi,xj,yj,zj,rij,eps0ij,fac,e1,e2,rrij,
279 & fac_augm,e_augm,r_inv_ij,r_shift_inv,sss1,sssgrad1
281 double precision sscale,sscagrad
282 c print *,'Entering ELJK nnt=',nnt,' nct=',nct,' expon=',expon
286 if (itypi.eq.ntyp1) cycle
287 itypi1=iabs(itype(i+1))
292 C Calculate SC interaction energy.
295 do j=istart(i,iint),iend(i,iint)
297 if (itypj.eq.ntyp1) cycle
301 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
303 e_augm=augm(itypi,itypj)*fac_augm
306 sss1=sscale(rij,r_cut_int)
307 if (sss1.eq.0.0d0) cycle
308 sssgrad1=sscagrad(rij,r_cut_int)
309 sss=sscale(rij/sigma(itypi,itypj),r_cut_respa)
310 if (sss.lt.1.0d0) then
312 & sscagrad(rij/sigma(itypi,itypj),r_cut_respa)
313 r_shift_inv=1.0D0/(rij+r0(itypi,itypj)-sigma(itypi,itypj))
314 fac=r_shift_inv**expon
318 cd sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
319 cd epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
320 cd write (iout,'(2(a3,i3,2x),8(1pd12.4)/2(3(1pd12.4),5x)/)')
321 cd & restyp(itypi),i,restyp(itypj),j,aa(itypi,itypj),
322 cd & bb(itypi,itypj),augm(itypi,itypj),epsi,sigm,
323 cd & sigma(itypi,itypj),1.0D0/dsqrt(rrij),evdwij,
324 cd & (c(k,i),k=1,3),(c(k,j),k=1,3)
325 evdw=evdw+(1.0d0-sss)*sss1*evdwij
327 C Calculate the components of the gradient in DC and X
329 fac=-2.0D0*rrij*e_augm-r_inv_ij*r_shift_inv*(e1+e1+e2)
330 fac=fac*(1.0d0-sss)*sss1
331 & +evdwij*(-sss1*sssgrad/sigma(itypi,itypj)
332 & +(1.0d0-sss)*sssgrad1)*r_inv_ij
337 gvdwx(k,i)=gvdwx(k,i)-gg(k)
338 gvdwx(k,j)=gvdwx(k,j)+gg(k)
339 gvdwc(k,i)=gvdwc(k,i)-gg(k)
340 gvdwc(k,j)=gvdwc(k,j)+gg(k)
348 gvdwc(j,i)=expon*gvdwc(j,i)
349 gvdwx(j,i)=expon*gvdwx(j,i)
354 C-----------------------------------------------------------------------------
355 subroutine eljk_short(evdw)
357 C This subroutine calculates the interaction energy of nonbonded side chains
358 C assuming the LJK potential of interaction.
360 implicit real*8 (a-h,o-z)
364 include 'COMMON.LOCAL'
365 include 'COMMON.CHAIN'
366 include 'COMMON.DERIV'
367 include 'COMMON.INTERACT'
368 include 'COMMON.IOUNITS'
369 include 'COMMON.NAMES'
370 include "COMMON.SPLITELE"
371 double precision gg(3)
372 double precision evdw,evdwij
373 integer i,j,k,itypi,itypj,itypi1,iint
374 double precision xi,yi,zi,xj,yj,zj,rij,eps0ij,fac,e1,e2,rrij,
375 & fac_augm,e_augm,r_inv_ij,r_shift_inv,sss1,sssgrad1
377 double precision sscale,sscagrad
378 c print *,'Entering ELJK nnt=',nnt,' nct=',nct,' expon=',expon
382 if (itypi.eq.ntyp1) cycle
383 itypi1=iabs(itype(i+1))
388 C Calculate SC interaction energy.
391 do j=istart(i,iint),iend(i,iint)
393 if (itypj.eq.ntyp1) cycle
397 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
399 e_augm=augm(itypi,itypj)*fac_augm
402 sss=sscale(rij/sigma(itypi,itypj),r_cut_respa)
403 if (sss.gt.0.0d0) then
404 r_shift_inv=1.0D0/(rij+r0(itypi,itypj)-sigma(itypi,itypj))
405 fac=r_shift_inv**expon
409 cd sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
410 cd epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
411 cd write (iout,'(2(a3,i3,2x),8(1pd12.4)/2(3(1pd12.4),5x)/)')
412 cd & restyp(itypi),i,restyp(itypj),j,aa(itypi,itypj),
413 cd & bb(itypi,itypj),augm(itypi,itypj),epsi,sigm,
414 cd & sigma(itypi,itypj),1.0D0/dsqrt(rrij),evdwij,
415 cd & (c(k,i),k=1,3),(c(k,j),k=1,3)
418 C Calculate the components of the gradient in DC and X
420 fac=-2.0D0*rrij*e_augm-r_inv_ij*r_shift_inv*(e1+e1+e2)
421 & +evdwij*sssgrad/sigma(itypi,itypj)*r_inv_ij
427 gvdwx(k,i)=gvdwx(k,i)-gg(k)
428 gvdwx(k,j)=gvdwx(k,j)+gg(k)
429 gvdwc(k,i)=gvdwc(k,i)-gg(k)
430 gvdwc(k,j)=gvdwc(k,j)+gg(k)
438 gvdwc(j,i)=expon*gvdwc(j,i)
439 gvdwx(j,i)=expon*gvdwx(j,i)
444 C-----------------------------------------------------------------------------
445 subroutine ebp_long(evdw)
447 C This subroutine calculates the interaction energy of nonbonded side chains
448 C assuming the Berne-Pechukas potential of interaction.
454 include 'COMMON.LOCAL'
455 include 'COMMON.CHAIN'
456 include 'COMMON.DERIV'
457 include 'COMMON.NAMES'
458 include 'COMMON.INTERACT'
459 include 'COMMON.IOUNITS'
460 include 'COMMON.CALC'
461 include "COMMON.SPLITELE"
464 double precision evdw
465 integer itypi,itypj,itypi1,iint,ind
466 double precision eps0ij,epsi,sigm,fac,e1,e2,rrij,xi,yi,zi
467 double precision sss1,sssgrad1
468 double precision sscale,sscagrad
469 c double precision rrsave(maxdim)
472 c print *,'Entering EBP nnt=',nnt,' nct=',nct,' expon=',expon
474 c if (icall.eq.0) then
482 if (itypi.eq.ntyp1) cycle
483 itypi1=iabs(itype(i+1))
487 dxi=dc_norm(1,nres+i)
488 dyi=dc_norm(2,nres+i)
489 dzi=dc_norm(3,nres+i)
490 c dsci_inv=dsc_inv(itypi)
491 dsci_inv=vbld_inv(i+nres)
493 C Calculate SC interaction energy.
496 do j=istart(i,iint),iend(i,iint)
499 if (itypj.eq.ntyp1) cycle
500 c dscj_inv=dsc_inv(itypj)
501 dscj_inv=vbld_inv(j+nres)
502 chi1=chi(itypi,itypj)
503 chi2=chi(itypj,itypi)
510 alf12=0.5D0*(alf1+alf2)
514 dxj=dc_norm(1,nres+j)
515 dyj=dc_norm(2,nres+j)
516 dzj=dc_norm(3,nres+j)
517 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
519 sss1=sscale(1.0d0/rij,r_cut_int)
520 if (sss1.eq.0.0d0) cycle
521 sss=sscale(1.0d0/(rij*sigmaii(itypi,itypj)),r_cut_respa)
522 if (sss.lt.1.0d0) then
524 & sscagrad(1.0d0/(rij*sigmaii(itypi,itypj)),r_cut_respa)
525 sssgrad1=sscagrad(1.0d0/rij,r_cut_int)
526 C Calculate the angle-dependent terms of energy & contributions to derivatives.
528 C Calculate whole angle-dependent part of epsilon and contributions
530 fac=(rrij*sigsq)**expon2
533 evdwij=eps1*eps2rt*eps3rt*(e1+e2)
534 eps2der=evdwij*eps3rt
535 eps3der=evdwij*eps2rt
536 evdwij=evdwij*eps2rt*eps3rt
537 evdw=evdw+evdwij*(1.0d0-sss)*sss1
539 sigm=dabs(aa/bb)**(1.0D0/6.0D0)
541 cd write (iout,'(2(a3,i3,2x),15(0pf7.3))')
542 cd & restyp(itypi),i,restyp(itypj),j,
543 cd & epsi,sigm,chi1,chi2,chip1,chip2,
544 cd & eps1,eps2rt**2,eps3rt**2,1.0D0/dsqrt(sigsq),
545 cd & om1,om2,om12,1.0D0/dsqrt(rrij),
548 C Calculate gradient components.
549 e1=e1*eps1*eps2rt**2*eps3rt**2
550 fac=-expon*(e1+evdwij)
553 & +evdwij*(sss1*sssgrad/sigmaii(itypi,itypj)
554 & +(1.0d0-sss)*sssgrad1)*rij
555 C Calculate radial part of the gradient
559 C Calculate the angular part of the gradient and sum add the contributions
560 C to the appropriate components of the Cartesian gradient.
561 call sc_grad_scale((1.0d0-sss)*sss1)
569 C-----------------------------------------------------------------------------
570 subroutine ebp_short(evdw)
572 C This subroutine calculates the interaction energy of nonbonded side chains
573 C assuming the Berne-Pechukas potential of interaction.
575 implicit real*8 (a-h,o-z)
579 include 'COMMON.LOCAL'
580 include 'COMMON.CHAIN'
581 include 'COMMON.DERIV'
582 include 'COMMON.NAMES'
583 include 'COMMON.INTERACT'
584 include 'COMMON.IOUNITS'
585 include 'COMMON.CALC'
586 include "COMMON.SPLITELE"
589 double precision evdw
590 integer itypi,itypj,itypi1,iint,ind
591 double precision eps0ij,epsi,sigm,fac,e1,e2,rrij,xi,yi,zi
592 double precision sscale,sscagrad
593 c double precision rrsave(maxdim)
596 c print *,'Entering EBP nnt=',nnt,' nct=',nct,' expon=',expon
598 c if (icall.eq.0) then
606 if (itypi.eq.ntyp1) cycle
607 itypi1=iabs(itype(i+1))
611 dxi=dc_norm(1,nres+i)
612 dyi=dc_norm(2,nres+i)
613 dzi=dc_norm(3,nres+i)
614 c dsci_inv=dsc_inv(itypi)
615 dsci_inv=vbld_inv(i+nres)
617 C Calculate SC interaction energy.
620 do j=istart(i,iint),iend(i,iint)
623 if (itypj.eq.ntyp1) cycle
624 c dscj_inv=dsc_inv(itypj)
625 dscj_inv=vbld_inv(j+nres)
626 chi1=chi(itypi,itypj)
627 chi2=chi(itypj,itypi)
634 alf12=0.5D0*(alf1+alf2)
638 dxj=dc_norm(1,nres+j)
639 dyj=dc_norm(2,nres+j)
640 dzj=dc_norm(3,nres+j)
641 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
643 sss=sscale(1.0d0/(rij*sigmaii(itypi,itypj)),r_cut_respa)
645 if (sss.gt.0.0d0) then
647 C Calculate the angle-dependent terms of energy & contributions to derivatives.
649 C Calculate whole angle-dependent part of epsilon and contributions
651 fac=(rrij*sigsq)**expon2
654 evdwij=eps1*eps2rt*eps3rt*(e1+e2)
655 eps2der=evdwij*eps3rt
656 eps3der=evdwij*eps2rt
657 evdwij=evdwij*eps2rt*eps3rt
660 sigm=dabs(aa/bb)**(1.0D0/6.0D0)
662 cd write (iout,'(2(a3,i3,2x),15(0pf7.3))')
663 cd & restyp(itypi),i,restyp(itypj),j,
664 cd & epsi,sigm,chi1,chi2,chip1,chip2,
665 cd & eps1,eps2rt**2,eps3rt**2,1.0D0/dsqrt(sigsq),
666 cd & om1,om2,om12,1.0D0/dsqrt(rrij),
669 C Calculate gradient components.
670 e1=e1*eps1*eps2rt**2*eps3rt**2
671 fac=-expon*(e1+evdwij)
674 & +evdwij*sssgrad/sigmaii(itypi,itypj)*rrij
675 C Calculate radial part of the gradient
679 C Calculate the angular part of the gradient and sum add the contributions
680 C to the appropriate components of the Cartesian gradient.
681 call sc_grad_scale(sss)
689 C-----------------------------------------------------------------------------
690 subroutine egb_long(evdw)
692 C This subroutine calculates the interaction energy of nonbonded side chains
693 C assuming the Gay-Berne potential of interaction.
699 include 'COMMON.LOCAL'
700 include 'COMMON.CHAIN'
701 include 'COMMON.DERIV'
702 include 'COMMON.NAMES'
703 include 'COMMON.INTERACT'
704 include 'COMMON.IOUNITS'
705 include 'COMMON.CALC'
706 include 'COMMON.CONTROL'
707 include "COMMON.SPLITELE"
709 integer xshift,yshift,zshift
710 double precision evdw
711 integer itypi,itypj,itypi1,iint,ind
712 double precision eps0ij,epsi,sigm,fac,e1,e2,rrij,xi,yi,zi
713 double precision fracinbuf,sslipi,evdwij_przed_tri,sig0ij,
714 & sslipj,ssgradlipj,ssgradlipi,dist_init,xj_safe,yj_safe,zj_safe,
715 & xj_temp,yj_temp,zj_temp,dist_temp,sig,rij_shift,faclip
716 double precision dist,sscale,sscagrad,sscagradlip,sscalelip
717 double precision subchap,sss1,sssgrad1
719 ccccc energy_dec=.false.
720 c print *,'Entering EGB nnt=',nnt,' nct=',nct,' expon=',expon
723 c if (icall.eq.0) lprn=.false.
727 if (itypi.eq.ntyp1) cycle
728 itypi1=iabs(itype(i+1))
733 if (xi.lt.0) xi=xi+boxxsize
735 if (yi.lt.0) yi=yi+boxysize
737 if (zi.lt.0) zi=zi+boxzsize
738 dxi=dc_norm(1,nres+i)
739 dyi=dc_norm(2,nres+i)
740 dzi=dc_norm(3,nres+i)
741 c dsci_inv=dsc_inv(itypi)
742 dsci_inv=vbld_inv(i+nres)
743 c write (iout,*) "i",i,dsc_inv(itypi),dsci_inv,1.0d0/vbld(i+nres)
744 c write (iout,*) "dcnori",dxi*dxi+dyi*dyi+dzi*dzi
746 C Calculate SC interaction energy.
749 do j=istart(i,iint),iend(i,iint)
752 if (itypj.eq.ntyp1) cycle
753 c dscj_inv=dsc_inv(itypj)
754 dscj_inv=vbld_inv(j+nres)
755 c write (iout,*) "j",j,dsc_inv(itypj),dscj_inv,
756 c & 1.0d0/vbld(j+nres)
757 c write (iout,*) "i",i," j", j," itype",itype(i),itype(j)
758 sig0ij=sigma(itypi,itypj)
759 chi1=chi(itypi,itypj)
760 chi2=chi(itypj,itypi)
767 alf12=0.5D0*(alf1+alf2)
772 if (xj.lt.0) xj=xj+boxxsize
774 if (yj.lt.0) yj=yj+boxysize
776 if (zj.lt.0) zj=zj+boxzsize
777 if ((zj.gt.bordlipbot).and.(zj.lt.bordliptop)) then
778 C the energy transfer exist
779 if (zj.lt.buflipbot) then
780 C what fraction I am in
781 fracinbuf=1.0d0-((zi-bordlipbot)/lipbufthick)
782 C lipbufthick is thickenes of lipid buffore
783 sslipj=sscalelip(fracinbuf)
784 ssgradlipj=-sscagradlip(fracinbuf)/lipbufthick
785 else if (zi.gt.bufliptop) then
786 fracinbuf=1.0d0-((bordliptop-zi)/lipbufthick)
787 sslipj=sscalelip(fracinbuf)
788 ssgradlipj=sscagradlip(fracinbuf)/lipbufthick
797 aa=aa_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0
798 & +aa_aq(itypi,itypj)*(2.0d0-sslipi+sslipj)/2.0d0
799 bb=bb_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0
800 & +bb_aq(itypi,itypj)*(2.0d0-sslipi+sslipj)/2.0d0
801 dist_init=(xj-xi)**2+(yj-yi)**2+(zj-zi)**2
809 xj=xj_safe+xshift*boxxsize
810 yj=yj_safe+yshift*boxysize
811 zj=zj_safe+zshift*boxzsize
812 dist_temp=(xj-xi)**2+(yj-yi)**2+(zj-zi)**2
813 if (dist_temp.lt.dist_init) then
823 if (subchap.eq.1) then
832 dxj=dc_norm(1,nres+j)
833 dyj=dc_norm(2,nres+j)
834 dzj=dc_norm(3,nres+j)
835 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
837 sss1=sscale(1.0d0/rij,r_cut_int)
838 if (sss1.eq.0.0d0) cycle
839 sss=sscale(1.0d0/(rij*sigmaii(itypi,itypj)),r_cut_respa)
840 if (sss.lt.1.0d0) then
841 C Calculate angle-dependent terms of energy and contributions to their
844 & sscagrad((1.0d0/rij)/sigmaii(itypi,itypj),r_cut_respa)
845 sssgrad1=sscagrad(1.0d0/rij,r_cut_int)
848 sig=sig0ij*dsqrt(sigsq)
849 rij_shift=1.0D0/rij-sig+sig0ij
850 c for diagnostics; uncomment
851 c rij_shift=1.2*sig0ij
852 C I hate to put IF's in the loops, but here don't have another choice!!!!
853 if (rij_shift.le.0.0D0) then
855 cd write (iout,'(2(a3,i3,2x),17(0pf7.3))')
856 cd & restyp(itypi),i,restyp(itypj),j,
857 cd & rij_shift,1.0D0/rij,sig,sig0ij,sigsq,1-dsqrt(sigsq)
861 c---------------------------------------------------------------
862 rij_shift=1.0D0/rij_shift
866 evdwij=eps1*eps2rt*eps3rt*(e1+e2)
867 eps2der=evdwij*eps3rt
868 eps3der=evdwij*eps2rt
869 c write (iout,*) "sigsq",sigsq," sig",sig," eps2rt",eps2rt,
870 c & " eps3rt",eps3rt," eps1",eps1," e1",e1," e2",e2
871 evdwij=evdwij*eps2rt*eps3rt
872 evdw=evdw+evdwij*(1.0d0-sss)*sss1
874 sigm=dabs(aa/bb)**(1.0D0/6.0D0)
876 write (iout,'(2(a3,i3,2x),17(0pf7.3))')
877 & restyp(itypi),i,restyp(itypj),j,
878 & epsi,sigm,chi1,chi2,chip1,chip2,
879 & eps1,eps2rt**2,eps3rt**2,sig,sig0ij,
880 & om1,om2,om12,1.0D0/rij,1.0D0/rij_shift,
884 if (energy_dec) write (iout,'(a6,2i5,4f10.5)')
885 & 'evdw',i,j,rij,sss,sss1,evdwij
887 C Calculate gradient components.
888 e1=e1*eps1*eps2rt**2*eps3rt**2
889 fac=-expon*(e1+evdwij)*rij_shift
892 fac=fac+evdwij*(-sss1*sssgrad/sigmaii(itypi,itypj)
893 & +(1.0d0-sss)*sssgrad1)*rij
895 C Calculate the radial part of the gradient
899 gg_lipi(3)=ssgradlipi*evdwij
900 gg_lipj(3)=ssgradlipj*evdwij
901 C Calculate angular part of the gradient.
902 call sc_grad_scale((1.0d0-sss)*sss1)
907 c write (iout,*) "Number of loop steps in EGB:",ind
908 cccc energy_dec=.false.
911 C-----------------------------------------------------------------------------
912 subroutine egb_short(evdw)
914 C This subroutine calculates the interaction energy of nonbonded side chains
915 C assuming the Gay-Berne potential of interaction.
921 include 'COMMON.LOCAL'
922 include 'COMMON.CHAIN'
923 include 'COMMON.DERIV'
924 include 'COMMON.NAMES'
925 include 'COMMON.INTERACT'
926 include 'COMMON.IOUNITS'
927 include 'COMMON.CALC'
928 include 'COMMON.CONTROL'
929 include "COMMON.SPLITELE"
931 integer xshift,yshift,zshift
932 double precision evdw
933 integer itypi,itypj,itypi1,iint,ind
934 double precision eps0ij,epsi,sigm,fac,e1,e2,rrij,xi,yi,zi
935 double precision fracinbuf,sslipi,evdwij_przed_tri,sig0ij,
936 & sslipj,ssgradlipj,ssgradlipi,dist_init,xj_safe,yj_safe,zj_safe,
937 & xj_temp,yj_temp,zj_temp,dist_temp,sig,rij_shift,faclip
938 double precision dist,sscale,sscagrad,sscagradlip,sscalelip
939 double precision subchap
941 ccccc energy_dec=.false.
942 c print *,'Entering EGB nnt=',nnt,' nct=',nct,' expon=',expon
945 c if (icall.eq.0) lprn=.false.
949 if (itypi.eq.ntyp1) cycle
950 itypi1=iabs(itype(i+1))
955 if (xi.lt.0) xi=xi+boxxsize
957 if (yi.lt.0) yi=yi+boxysize
959 if (zi.lt.0) zi=zi+boxzsize
960 dxi=dc_norm(1,nres+i)
961 dyi=dc_norm(2,nres+i)
962 dzi=dc_norm(3,nres+i)
963 c dsci_inv=dsc_inv(itypi)
964 dsci_inv=vbld_inv(i+nres)
965 c write (iout,*) "i",i,dsc_inv(itypi),dsci_inv,1.0d0/vbld(i+nres)
966 c write (iout,*) "dcnori",dxi*dxi+dyi*dyi+dzi*dzi
968 C Calculate SC interaction energy.
971 do j=istart(i,iint),iend(i,iint)
974 if (itypj.eq.ntyp1) cycle
975 c dscj_inv=dsc_inv(itypj)
976 dscj_inv=vbld_inv(j+nres)
977 c write (iout,*) "j",j,dsc_inv(itypj),dscj_inv,
978 c & 1.0d0/vbld(j+nres)
979 c write (iout,*) "i",i," j", j," itype",itype(i),itype(j)
980 sig0ij=sigma(itypi,itypj)
981 chi1=chi(itypi,itypj)
982 chi2=chi(itypj,itypi)
989 alf12=0.5D0*(alf1+alf2)
994 if (xj.lt.0) xj=xj+boxxsize
996 if (yj.lt.0) yj=yj+boxysize
998 if (zj.lt.0) zj=zj+boxzsize
999 if ((zj.gt.bordlipbot).and.(zj.lt.bordliptop)) then
1000 C the energy transfer exist
1001 if (zj.lt.buflipbot) then
1002 C what fraction I am in
1003 fracinbuf=1.0d0-((zi-bordlipbot)/lipbufthick)
1004 C lipbufthick is thickenes of lipid buffore
1005 sslipj=sscalelip(fracinbuf)
1006 ssgradlipj=-sscagradlip(fracinbuf)/lipbufthick
1007 elseif (zi.gt.bufliptop) then
1008 fracinbuf=1.0d0-((bordliptop-zi)/lipbufthick)
1009 sslipj=sscalelip(fracinbuf)
1010 ssgradlipj=sscagradlip(fracinbuf)/lipbufthick
1019 aa=aa_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0
1020 & +aa_aq(itypi,itypj)*(2.0d0-sslipi+sslipj)/2.0d0
1021 bb=bb_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0
1022 & +bb_aq(itypi,itypj)*(2.0d0-sslipi+sslipj)/2.0d0
1023 dist_init=(xj-xi)**2+(yj-yi)**2+(zj-zi)**2
1031 xj=xj_safe+xshift*boxxsize
1032 yj=yj_safe+yshift*boxysize
1033 zj=zj_safe+zshift*boxzsize
1034 dist_temp=(xj-xi)**2+(yj-yi)**2+(zj-zi)**2
1035 if(dist_temp.lt.dist_init) then
1045 if (subchap.eq.1) then
1054 dxj=dc_norm(1,nres+j)
1055 dyj=dc_norm(2,nres+j)
1056 dzj=dc_norm(3,nres+j)
1057 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
1059 sss=sscale(1.0d0/(rij*sigmaii(itypi,itypj)),r_cut_respa)
1060 sssgrad=sscagrad((1.0d0/rij)/sigmaii(itypi,itypj),r_cut_respa)
1061 if (sss.gt.0.0d0) then
1063 C Calculate angle-dependent terms of energy and contributions to their
1067 sig=sig0ij*dsqrt(sigsq)
1068 rij_shift=1.0D0/rij-sig+sig0ij
1069 c for diagnostics; uncomment
1070 c rij_shift=1.2*sig0ij
1071 C I hate to put IF's in the loops, but here don't have another choice!!!!
1072 if (rij_shift.le.0.0D0) then
1074 cd write (iout,'(2(a3,i3,2x),17(0pf7.3))')
1075 cd & restyp(itypi),i,restyp(itypj),j,
1076 cd & rij_shift,1.0D0/rij,sig,sig0ij,sigsq,1-dsqrt(sigsq)
1080 c---------------------------------------------------------------
1081 rij_shift=1.0D0/rij_shift
1082 fac=rij_shift**expon
1085 evdwij=eps1*eps2rt*eps3rt*(e1+e2)
1086 eps2der=evdwij*eps3rt
1087 eps3der=evdwij*eps2rt
1088 c write (iout,*) "sigsq",sigsq," sig",sig," eps2rt",eps2rt,
1089 c & " eps3rt",eps3rt," eps1",eps1," e1",e1," e2",e2
1090 evdwij=evdwij*eps2rt*eps3rt
1091 evdw=evdw+evdwij*sss
1093 sigm=dabs(aa/bb)**(1.0D0/6.0D0)
1095 write (iout,'(2(a3,i3,2x),17(0pf7.3))')
1096 & restyp(itypi),i,restyp(itypj),j,
1097 & epsi,sigm,chi1,chi2,chip1,chip2,
1098 & eps1,eps2rt**2,eps3rt**2,sig,sig0ij,
1099 & om1,om2,om12,1.0D0/rij,1.0D0/rij_shift,
1103 if (energy_dec) write (iout,'(a6,2i5,0pf7.3)')
1106 C Calculate gradient components.
1107 e1=e1*eps1*eps2rt**2*eps3rt**2
1108 fac=-expon*(e1+evdwij)*rij_shift
1111 fac=fac+evdwij*sssgrad/sigmaii(itypi,itypj)*rij
1113 C Calculate the radial part of the gradient
1117 gg_lipi(3)=ssgradlipi*evdwij
1118 gg_lipj(3)=ssgradlipj*evdwij
1119 C Calculate angular part of the gradient.
1120 call sc_grad_scale(sss)
1125 c write (iout,*) "Number of loop steps in EGB:",ind
1126 cccc energy_dec=.false.
1129 C-----------------------------------------------------------------------------
1130 subroutine egbv_long(evdw)
1132 C This subroutine calculates the interaction energy of nonbonded side chains
1133 C assuming the Gay-Berne-Vorobjev potential of interaction.
1135 implicit real*8 (a-h,o-z)
1136 include 'DIMENSIONS'
1137 include 'COMMON.GEO'
1138 include 'COMMON.VAR'
1139 include 'COMMON.LOCAL'
1140 include 'COMMON.CHAIN'
1141 include 'COMMON.DERIV'
1142 include 'COMMON.NAMES'
1143 include 'COMMON.INTERACT'
1144 include 'COMMON.IOUNITS'
1145 include 'COMMON.CALC'
1146 include "COMMON.SPLITELE"
1148 common /srutu/ icall
1150 integer itypi,itypj,itypi1,iint,ind
1151 double precision eps0ij,epsi,sigm,fac,e1,e2,rrij,r0ij,
1152 & xi,yi,zi,fac_augm,e_augm
1153 double precision fracinbuf,sslipi,evdwij_przed_tri,sig0ij,
1154 & sslipj,ssgradlipj,ssgradlipi,dist_init,xj_safe,yj_safe,zj_safe,
1155 & xj_temp,yj_temp,zj_temp,dist_temp,sig,rij_shift,faclip
1156 double precision dist,sscale,sscagrad,sscagradlip,sscalelip
1157 double precision sss1,sssgrad1
1159 c print *,'Entering EGB nnt=',nnt,' nct=',nct,' expon=',expon
1162 c if (icall.eq.0) lprn=.true.
1164 do i=iatsc_s,iatsc_e
1165 itypi=iabs(itype(i))
1166 if (itypi.eq.ntyp1) cycle
1167 itypi1=iabs(itype(i+1))
1171 dxi=dc_norm(1,nres+i)
1172 dyi=dc_norm(2,nres+i)
1173 dzi=dc_norm(3,nres+i)
1174 c dsci_inv=dsc_inv(itypi)
1175 dsci_inv=vbld_inv(i+nres)
1177 C Calculate SC interaction energy.
1179 do iint=1,nint_gr(i)
1180 do j=istart(i,iint),iend(i,iint)
1182 itypj=iabs(itype(j))
1183 if (itypj.eq.ntyp1) cycle
1184 c dscj_inv=dsc_inv(itypj)
1185 dscj_inv=vbld_inv(j+nres)
1186 sig0ij=sigma(itypi,itypj)
1187 r0ij=r0(itypi,itypj)
1188 chi1=chi(itypi,itypj)
1189 chi2=chi(itypj,itypi)
1196 alf12=0.5D0*(alf1+alf2)
1200 dxj=dc_norm(1,nres+j)
1201 dyj=dc_norm(2,nres+j)
1202 dzj=dc_norm(3,nres+j)
1203 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
1206 sss1=sscale(1.0d0/rij,r_cut_int)
1207 if (sss1.eq.0.0d0) cycle
1209 if (sss.lt.1.0d0) then
1211 & sscagrad((1.0d0/rij)/sigmaii(itypi,itypj),r_cut_respa)
1212 sssgrad1=sscagrad(1.0d0/rij,r_cut_int)
1214 C Calculate angle-dependent terms of energy and contributions to their
1218 sig=sig0ij*dsqrt(sigsq)
1219 rij_shift=1.0D0/rij-sig+r0ij
1220 C I hate to put IF's in the loops, but here don't have another choice!!!!
1221 if (rij_shift.le.0.0D0) then
1226 c---------------------------------------------------------------
1227 rij_shift=1.0D0/rij_shift
1228 fac=rij_shift**expon
1231 evdwij=eps1*eps2rt*eps3rt*(e1+e2)
1232 eps2der=evdwij*eps3rt
1233 eps3der=evdwij*eps2rt
1234 fac_augm=rrij**expon
1235 e_augm=augm(itypi,itypj)*fac_augm
1236 evdwij=evdwij*eps2rt*eps3rt
1237 evdw=evdw+(evdwij+e_augm)*sss1*(1.0d0-sss)
1239 sigm=dabs(aa/bb)**(1.0D0/6.0D0)
1241 write (iout,'(2(a3,i3,2x),17(0pf7.3))')
1242 & restyp(itypi),i,restyp(itypj),j,
1243 & epsi,sigm,sig,(augm(itypi,itypj)/epsi)**(1.0D0/12.0D0),
1244 & chi1,chi2,chip1,chip2,
1245 & eps1,eps2rt**2,eps3rt**2,
1246 & om1,om2,om12,1.0D0/rij,1.0D0/rij_shift,
1249 C Calculate gradient components.
1250 e1=e1*eps1*eps2rt**2*eps3rt**2
1251 fac=-expon*(e1+evdwij)*rij_shift
1253 fac=rij*fac-2*expon*rrij*e_augm
1254 fac=fac+(evdwij+e_augm)*
1255 & (-sss1*sssgrad/sigmaii(itypi,itypj)
1256 & +(1.0d0-sss)*sssgrad1)*rij
1257 C Calculate the radial part of the gradient
1261 C Calculate angular part of the gradient.
1262 call sc_grad_scale((1.0d0-sss)*sss1)
1268 C-----------------------------------------------------------------------------
1269 subroutine egbv_short(evdw)
1271 C This subroutine calculates the interaction energy of nonbonded side chains
1272 C assuming the Gay-Berne-Vorobjev potential of interaction.
1275 include 'DIMENSIONS'
1276 include 'COMMON.GEO'
1277 include 'COMMON.VAR'
1278 include 'COMMON.LOCAL'
1279 include 'COMMON.CHAIN'
1280 include 'COMMON.DERIV'
1281 include 'COMMON.NAMES'
1282 include 'COMMON.INTERACT'
1283 include 'COMMON.IOUNITS'
1284 include 'COMMON.CALC'
1285 include "COMMON.SPLITELE"
1287 common /srutu/ icall
1289 integer itypi,itypj,itypi1,iint,ind
1290 double precision eps0ij,epsi,sigm,fac,e1,e2,rrij,r0ij,
1291 & xi,yi,zi,fac_augm,e_augm
1292 double precision evdw
1293 double precision fracinbuf,sslipi,evdwij_przed_tri,sig0ij,
1294 & sslipj,ssgradlipj,ssgradlipi,dist_init,xj_safe,yj_safe,zj_safe,
1295 & xj_temp,yj_temp,zj_temp,dist_temp,sig,rij_shift,faclip
1296 double precision dist,sscale,sscagrad,sscagradlip,sscalelip
1298 c print *,'Entering EGB nnt=',nnt,' nct=',nct,' expon=',expon
1301 c if (icall.eq.0) lprn=.true.
1303 do i=iatsc_s,iatsc_e
1304 itypi=iabs(itype(i))
1305 if (itypi.eq.ntyp1) cycle
1306 itypi1=iabs(itype(i+1))
1310 dxi=dc_norm(1,nres+i)
1311 dyi=dc_norm(2,nres+i)
1312 dzi=dc_norm(3,nres+i)
1313 c dsci_inv=dsc_inv(itypi)
1314 dsci_inv=vbld_inv(i+nres)
1316 C Calculate SC interaction energy.
1318 do iint=1,nint_gr(i)
1319 do j=istart(i,iint),iend(i,iint)
1321 itypj=iabs(itype(j))
1322 if (itypj.eq.ntyp1) cycle
1323 c dscj_inv=dsc_inv(itypj)
1324 dscj_inv=vbld_inv(j+nres)
1325 sig0ij=sigma(itypi,itypj)
1326 r0ij=r0(itypi,itypj)
1327 chi1=chi(itypi,itypj)
1328 chi2=chi(itypj,itypi)
1335 alf12=0.5D0*(alf1+alf2)
1339 dxj=dc_norm(1,nres+j)
1340 dyj=dc_norm(2,nres+j)
1341 dzj=dc_norm(3,nres+j)
1342 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
1345 sss=sscale(1.0d0/(rij*sigmaii(itypi,itypj)),r_cut_respa)
1347 if (sss.gt.0.0d0) then
1349 C Calculate angle-dependent terms of energy and contributions to their
1353 sig=sig0ij*dsqrt(sigsq)
1354 rij_shift=1.0D0/rij-sig+r0ij
1355 C I hate to put IF's in the loops, but here don't have another choice!!!!
1356 if (rij_shift.le.0.0D0) then
1361 c---------------------------------------------------------------
1362 rij_shift=1.0D0/rij_shift
1363 fac=rij_shift**expon
1366 evdwij=eps1*eps2rt*eps3rt*(e1+e2)
1367 eps2der=evdwij*eps3rt
1368 eps3der=evdwij*eps2rt
1369 fac_augm=rrij**expon
1370 e_augm=augm(itypi,itypj)*fac_augm
1371 evdwij=evdwij*eps2rt*eps3rt
1372 evdw=evdw+(evdwij+e_augm)*sss
1374 sigm=dabs(aa/bb)**(1.0D0/6.0D0)
1376 write (iout,'(2(a3,i3,2x),17(0pf7.3))')
1377 & restyp(itypi),i,restyp(itypj),j,
1378 & epsi,sigm,sig,(augm(itypi,itypj)/epsi)**(1.0D0/12.0D0),
1379 & chi1,chi2,chip1,chip2,
1380 & eps1,eps2rt**2,eps3rt**2,
1381 & om1,om2,om12,1.0D0/rij,1.0D0/rij_shift,
1384 C Calculate gradient components.
1385 e1=e1*eps1*eps2rt**2*eps3rt**2
1386 fac=-expon*(e1+evdwij)*rij_shift
1388 fac=rij*fac-2*expon*rrij*e_augm+
1389 & (evdwij+e_augm)*sssgrad/sigmaii(itypi,itypj)*rij
1390 C Calculate the radial part of the gradient
1394 C Calculate angular part of the gradient.
1395 call sc_grad_scale(sss)
1401 C----------------------------------------------------------------------------
1402 subroutine sc_grad_scale(scalfac)
1403 implicit real*8 (a-h,o-z)
1404 include 'DIMENSIONS'
1405 include 'COMMON.CHAIN'
1406 include 'COMMON.DERIV'
1407 include 'COMMON.CALC'
1408 include 'COMMON.IOUNITS'
1409 include "COMMON.SPLITELE"
1410 double precision dcosom1(3),dcosom2(3)
1411 double precision scalfac
1412 eom1=eps2der*eps2rt_om1-2.0D0*alf1*eps3der+sigder*sigsq_om1
1413 eom2=eps2der*eps2rt_om2+2.0D0*alf2*eps3der+sigder*sigsq_om2
1414 eom12=evdwij*eps1_om12+eps2der*eps2rt_om12
1415 & -2.0D0*alf12*eps3der+sigder*sigsq_om12
1419 c eom12=evdwij*eps1_om12
1421 c write (iout,*) "eps2der",eps2der," eps3der",eps3der,
1422 c & " sigder",sigder
1423 c write (iout,*) "eps1_om12",eps1_om12," eps2rt_om12",eps2rt_om12
1424 c write (iout,*) "eom1",eom1," eom2",eom2," eom12",eom12
1426 dcosom1(k)=rij*(dc_norm(k,nres+i)-om1*erij(k))
1427 dcosom2(k)=rij*(dc_norm(k,nres+j)-om2*erij(k))
1430 gg(k)=(gg(k)+eom1*dcosom1(k)+eom2*dcosom2(k))*scalfac
1432 c write (iout,*) "gg",(gg(k),k=1,3)
1434 gvdwx(k,i)=gvdwx(k,i)-gg(k)+gg_lipi(k)
1435 & +(eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,nres+i))
1436 & +eom1*(erij(k)-om1*dc_norm(k,nres+i)))*dsci_inv*scalfac
1437 gvdwx(k,j)=gvdwx(k,j)+gg(k)+gg_lipj(k)
1438 & +(eom12*(dc_norm(k,nres+i)-om12*dc_norm(k,nres+j))
1439 & +eom2*(erij(k)-om2*dc_norm(k,nres+j)))*dscj_inv*scalfac
1440 c write (iout,*)(eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,nres+i))
1441 c & +eom1*(erij(k)-om1*dc_norm(k,nres+i)))*dsci_inv
1442 c write (iout,*)(eom12*(dc_norm(k,nres+i)-om12*dc_norm(k,nres+j))
1443 c & +eom2*(erij(k)-om2*dc_norm(k,nres+j)))*dscj_inv
1446 C Calculate the components of the gradient in DC and X
1449 gvdwc(l,i)=gvdwc(l,i)-gg(l)+gg_lipi(l)
1450 gvdwc(l,j)=gvdwc(l,j)+gg(l)+gg_lipj(l)
1454 C--------------------------------------------------------------------------
1455 subroutine eelec_scale(ees,evdw1,eel_loc,eello_turn3,eello_turn4)
1457 C This subroutine calculates the average interaction energy and its gradient
1458 C in the virtual-bond vectors between non-adjacent peptide groups, based on
1459 C the potential described in Liwo et al., Protein Sci., 1993, 2, 1715.
1460 C The potential depends both on the distance of peptide-group centers and on
1461 C the orientation of the CA-CA virtual bonds.
1463 implicit real*8 (a-h,o-z)
1467 include 'DIMENSIONS'
1468 include 'COMMON.CONTROL'
1469 include 'COMMON.SETUP'
1470 include 'COMMON.IOUNITS'
1471 include 'COMMON.GEO'
1472 include 'COMMON.VAR'
1473 include 'COMMON.LOCAL'
1474 include 'COMMON.CHAIN'
1475 include 'COMMON.DERIV'
1476 include 'COMMON.INTERACT'
1478 include 'COMMON.CONTACTS'
1479 include 'COMMON.CONTMAT'
1481 include 'COMMON.CORRMAT'
1482 include 'COMMON.TORSION'
1483 include 'COMMON.VECTORS'
1484 include 'COMMON.FFIELD'
1485 include 'COMMON.TIME1'
1486 include 'COMMON.SHIELD'
1487 include "COMMON.SPLITELE"
1488 dimension ggg(3),gggp(3),gggm(3),erij(3),dcosb(3),dcosg(3),
1489 & erder(3,3),uryg(3,3),urzg(3,3),vryg(3,3),vrzg(3,3)
1490 double precision acipa(2,2),agg(3,4),aggi(3,4),aggi1(3,4),
1491 & aggj(3,4),aggj1(3,4),a_temp(2,2),muij(4)
1492 common /locel/ a_temp,agg,aggi,aggi1,aggj,aggj1,a22,a23,a32,a33,
1493 & dxi,dyi,dzi,dx_normi,dy_normi,dz_normi,xmedi,ymedi,zmedi,
1495 c 4/26/02 - AL scaling factor for 1,4 repulsive VDW interactions
1497 double precision scal_el /1.0d0/
1499 double precision scal_el /0.5d0/
1502 C 13-go grudnia roku pamietnego...
1503 double precision unmat(3,3) /1.0d0,0.0d0,0.0d0,
1504 & 0.0d0,1.0d0,0.0d0,
1505 & 0.0d0,0.0d0,1.0d0/
1506 cd write(iout,*) 'In EELEC'
1508 cd write(iout,*) 'Type',i
1509 cd write(iout,*) 'B1',B1(:,i)
1510 cd write(iout,*) 'B2',B2(:,i)
1511 cd write(iout,*) 'CC',CC(:,:,i)
1512 cd write(iout,*) 'DD',DD(:,:,i)
1513 cd write(iout,*) 'EE',EE(:,:,i)
1515 cd call check_vecgrad
1517 C print *,"WCHODZE3"
1518 if (icheckgrad.eq.1) then
1520 fac=1.0d0/dsqrt(scalar(dc(1,i),dc(1,i)))
1522 dc_norm(k,i)=dc(k,i)*fac
1524 c write (iout,*) 'i',i,' fac',fac
1527 if (wel_loc.gt.0.0d0 .or. wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0
1528 & .or. wcorr6.gt.0.0d0 .or. wturn3.gt.0.0d0 .or.
1529 & wturn4.gt.0.0d0 .or. wturn6.gt.0.0d0) then
1530 c call vec_and_deriv
1536 time_mat=time_mat+MPI_Wtime()-time01
1540 cd write (iout,*) 'i=',i
1542 cd write (iout,'(i5,2f10.5)') k,uy(k,i),uz(k,i)
1545 cd write (iout,'(f10.5,2x,3f10.5,2x,3f10.5)')
1546 cd & uz(k,i),(uzgrad(k,l,1,i),l=1,3),(uzgrad(k,l,2,i),l=1,3)
1561 cd print '(a)','Enter EELEC'
1562 cd write (iout,*) 'iatel_s=',iatel_s,' iatel_e=',iatel_e
1564 gel_loc_loc(i)=0.0d0
1569 c 9/27/08 AL Split the interaction loop to ensure load balancing of turn terms
1571 C Loop over i,i+2 and i,i+3 pairs of the peptide groups
1573 do i=iturn3_start,iturn3_end
1574 if (itype(i).eq.ntyp1.or. itype(i+1).eq.ntyp1
1575 & .or. itype(i+2).eq.ntyp1 .or. itype(i+3).eq.ntyp1
1576 C & .or. itype(i-1).eq.ntyp1
1577 C & .or. itype(i+4).eq.ntyp1
1582 dx_normi=dc_norm(1,i)
1583 dy_normi=dc_norm(2,i)
1584 dz_normi=dc_norm(3,i)
1585 xmedi=c(1,i)+0.5d0*dxi
1586 ymedi=c(2,i)+0.5d0*dyi
1587 zmedi=c(3,i)+0.5d0*dzi
1588 xmedi=mod(xmedi,boxxsize)
1589 if (xmedi.lt.0) xmedi=xmedi+boxxsize
1590 ymedi=mod(ymedi,boxysize)
1591 if (ymedi.lt.0) ymedi=ymedi+boxysize
1592 zmedi=mod(zmedi,boxzsize)
1593 if (zmedi.lt.0) zmedi=zmedi+boxzsize
1595 call eelecij_scale(i,i+2,ees,evdw1,eel_loc)
1596 if (wturn3.gt.0.0d0) call eturn3(i,eello_turn3)
1598 num_cont_hb(i)=num_conti
1601 do i=iturn4_start,iturn4_end
1602 if (itype(i).eq.ntyp1 .or. itype(i+1).eq.ntyp1
1603 & .or. itype(i+3).eq.ntyp1
1604 & .or. itype(i+4).eq.ntyp1
1605 C & .or. itype(i+5).eq.ntyp1
1606 C & .or. itype(i-1).eq.ntyp1
1611 dx_normi=dc_norm(1,i)
1612 dy_normi=dc_norm(2,i)
1613 dz_normi=dc_norm(3,i)
1614 xmedi=c(1,i)+0.5d0*dxi
1615 ymedi=c(2,i)+0.5d0*dyi
1616 zmedi=c(3,i)+0.5d0*dzi
1617 xmedi=mod(xmedi,boxxsize)
1618 if (xmedi.lt.0) xmedi=xmedi+boxxsize
1619 ymedi=mod(ymedi,boxysize)
1620 if (ymedi.lt.0) ymedi=ymedi+boxysize
1621 zmedi=mod(zmedi,boxzsize)
1622 if (zmedi.lt.0) zmedi=zmedi+boxzsize
1624 num_conti=num_cont_hb(i)
1626 call eelecij_scale(i,i+3,ees,evdw1,eel_loc)
1627 if (wturn4.gt.0.0d0 .and. itype(i+2).ne.ntyp1)
1628 & call eturn4(i,eello_turn4)
1630 num_cont_hb(i)=num_conti
1634 c Loop over all pairs of interacting peptide groups except i,i+2 and i,i+3
1636 do i=iatel_s,iatel_e
1637 if (itype(i).eq.ntyp1 .or. itype(i+1).eq.ntyp1
1638 C & .or. itype(i+2).eq.ntyp1
1639 C & .or. itype(i-1).eq.ntyp1
1644 dx_normi=dc_norm(1,i)
1645 dy_normi=dc_norm(2,i)
1646 dz_normi=dc_norm(3,i)
1647 xmedi=c(1,i)+0.5d0*dxi
1648 ymedi=c(2,i)+0.5d0*dyi
1649 zmedi=c(3,i)+0.5d0*dzi
1650 xmedi=mod(xmedi,boxxsize)
1651 if (xmedi.lt.0) xmedi=xmedi+boxxsize
1652 ymedi=mod(ymedi,boxysize)
1653 if (ymedi.lt.0) ymedi=ymedi+boxysize
1654 zmedi=mod(zmedi,boxzsize)
1655 if (zmedi.lt.0) zmedi=zmedi+boxzsize
1656 c write (iout,*) 'i',i,' ielstart',ielstart(i),' ielend',ielend
1658 num_conti=num_cont_hb(i)
1660 do j=ielstart(i),ielend(i)
1661 if (itype(j).eq.ntyp1 .or. itype(j+1).eq.ntyp1
1662 C & .or.itype(j+2).eq.ntyp1
1663 C & .or.itype(j-1).eq.ntyp1
1665 call eelecij_scale(i,j,ees,evdw1,eel_loc)
1668 num_cont_hb(i)=num_conti
1671 c write (iout,*) "Number of loop steps in EELEC:",ind
1673 cd write (iout,'(i3,3f10.5,5x,3f10.5)')
1674 cd & i,(gel_loc(k,i),k=1,3),gel_loc_loc(i)
1676 c 12/7/99 Adam eello_turn3 will be considered as a separate energy term
1677 ccc eel_loc=eel_loc+eello_turn3
1678 cd print *,"Processor",fg_rank," t_eelecij",t_eelecij
1681 C-------------------------------------------------------------------------------
1682 subroutine eelecij_scale(i,j,ees,evdw1,eel_loc)
1684 include 'DIMENSIONS'
1688 include 'COMMON.CONTROL'
1689 include 'COMMON.IOUNITS'
1690 include 'COMMON.GEO'
1691 include 'COMMON.VAR'
1692 include 'COMMON.LOCAL'
1693 include 'COMMON.CHAIN'
1694 include 'COMMON.DERIV'
1695 include 'COMMON.INTERACT'
1697 include 'COMMON.CONTACTS'
1698 include 'COMMON.CONTMAT'
1700 include 'COMMON.CORRMAT'
1701 include 'COMMON.TORSION'
1702 include 'COMMON.VECTORS'
1703 include 'COMMON.FFIELD'
1704 include 'COMMON.TIME1'
1705 include 'COMMON.SHIELD'
1706 include "COMMON.SPLITELE"
1707 integer xshift,yshift,zshift
1708 double precision ggg(3),gggp(3),gggm(3),erij(3),dcosb(3),dcosg(3),
1709 & erder(3,3),uryg(3,3),urzg(3,3),vryg(3,3),vrzg(3,3)
1710 double precision acipa(2,2),agg(3,4),aggi(3,4),aggi1(3,4),
1711 & aggj(3,4),aggj1(3,4),a_temp(2,2),muij(4),gmuij1(4),gmuji1(4),
1712 & gmuij2(4),gmuji2(4)
1713 integer j1,j2,num_conti
1714 common /locel/ a_temp,agg,aggi,aggi1,aggj,aggj1,a22,a23,a32,a33,
1715 & dxi,dyi,dzi,dx_normi,dy_normi,dz_normi,xmedi,ymedi,zmedi,
1717 integer k,i,j,iteli,itelj,kkk,l,kkll,m,isubchap,ind,itypi,itypj
1718 integer ilist,iresshield
1719 double precision rlocshield
1720 double precision ael6i,rrmij,rmij,r0ij,fcont,fprimcont,ees0tmp
1721 double precision ees,evdw1,eel_loc,aaa,bbb,ael3i
1722 double precision dxj,dyj,dzj,dx_normj,dy_normj,dz_normj,xj,yj,zj,
1723 & rij,r3ij,r6ij,cosa,cosb,cosg,fac,ev1,ev2,fac3,fac4,
1724 & evdwij,el1,el2,eesij,ees0ij,facvdw,facel,fac1,ecosa,
1725 & ecosb,ecosg,ury,urz,vry,vrz,facr,a22der,a23der,a32der,
1726 & a33der,eel_loc_ij,cosa4,wij,cosbg1,cosbg2,ees0pij,
1727 & ees0pij1,ees0mij,ees0mij1,fac3p,ees0mijp,ees0pijp,
1728 & ecosa1,ecosb1,ecosg1,ecosa2,ecosb2,ecosg2,ecosap,ecosbp,
1729 & ecosgp,ecosam,ecosbm,ecosgm,ghalf,geel_loc_ij,geel_loc_ji,
1730 & dxi,dyi,dzi,a22,a23,a32,a33
1731 double precision dist_init,xmedi,ymedi,zmedi,xj_safe,yj_safe,
1732 & zj_safe,xj_temp,yj_temp,zj_temp,dist_temp,dx_normi,dy_normi,
1734 double precision sss1,sssgrad1
1735 double precision sscale,sscagrad
1736 double precision scalar
1738 c 4/26/02 - AL scaling factor for 1,4 repulsive VDW interactions
1740 double precision scal_el /1.0d0/
1742 double precision scal_el /0.5d0/
1745 C 13-go grudnia roku pamietnego...
1746 double precision unmat(3,3) /1.0d0,0.0d0,0.0d0,
1747 & 0.0d0,1.0d0,0.0d0,
1748 & 0.0d0,0.0d0,1.0d0/
1749 c time00=MPI_Wtime()
1750 cd write (iout,*) "eelecij",i,j
1751 C print *,"WCHODZE2"
1755 if (j.eq.i+2 .and. itelj.eq.2) iteli=2
1756 aaa=app(iteli,itelj)
1757 bbb=bpp(iteli,itelj)
1758 ael6i=ael6(iteli,itelj)
1759 ael3i=ael3(iteli,itelj)
1763 dx_normj=dc_norm(1,j)
1764 dy_normj=dc_norm(2,j)
1765 dz_normj=dc_norm(3,j)
1770 if (xj.lt.0) xj=xj+boxxsize
1772 if (yj.lt.0) yj=yj+boxysize
1774 if (zj.lt.0) zj=zj+boxzsize
1775 dist_init=(xj-xmedi)**2+(yj-ymedi)**2+(zj-zmedi)**2
1783 xj=xj_safe+xshift*boxxsize
1784 yj=yj_safe+yshift*boxysize
1785 zj=zj_safe+zshift*boxzsize
1786 dist_temp=(xj-xmedi)**2+(yj-ymedi)**2+(zj-zmedi)**2
1787 if(dist_temp.lt.dist_init) then
1797 if (isubchap.eq.1) then
1807 rij=xj*xj+yj*yj+zj*zj
1811 c For extracting the short-range part of Evdwpp
1812 sss1=sscale(rij,r_cut_int)
1813 if (sss1.eq.0.0d0) return
1814 sss=sscale(rij/rpp(iteli,itelj),r_cut_respa)
1815 sssgrad=sscagrad(rij/rpp(iteli,itelj),r_cut_respa)
1816 sssgrad1=sscagrad(rij,r_cut_int)
1819 cosa=dx_normi*dx_normj+dy_normi*dy_normj+dz_normi*dz_normj
1820 cosb=(xj*dx_normi+yj*dy_normi+zj*dz_normi)*rmij
1821 cosg=(xj*dx_normj+yj*dy_normj+zj*dz_normj)*rmij
1822 fac=cosa-3.0D0*cosb*cosg
1824 c 4/26/02 - AL scaling down 1,4 repulsive VDW interactions
1825 if (j.eq.i+2) ev1=scal_el*ev1
1830 if (shield_mode.eq.0) then
1834 el1=fac3*(4.0D0+fac*fac-3.0D0*(cosb*cosb+cosg*cosg))
1836 el1=el1*fac_shield(i)**2*fac_shield(j)**2
1837 el2=el2*fac_shield(i)**2*fac_shield(j)**2
1839 C 12/26/95 - for the evaluation of multi-body H-bonding interactions
1840 ees0ij=4.0D0+fac*fac-3.0D0*(cosb*cosb+cosg*cosg)
1842 evdw1=evdw1+evdwij*(1.0d0-sss)*sss1
1843 cd write(iout,'(2(2i3,2x),7(1pd12.4)/2(3(1pd12.4),5x)/)')
1844 cd & iteli,i,itelj,j,aaa,bbb,ael6i,ael3i,
1845 cd & 1.0D0/dsqrt(rrmij),evdwij,eesij,
1846 cd & xmedi,ymedi,zmedi,xj,yj,zj
1848 if (energy_dec) then
1849 write (iout,'(a6,2i5,0pf7.3,2f7.3)')
1850 & 'evdw1',i,j,evdwij,sss,sss1
1851 write (iout,'(a6,2i5,0pf7.3)') 'ees',i,j,eesij
1855 C Calculate contributions to the Cartesian gradient.
1858 facvdw=-6*rrmij*(ev1+evdwij)*(1.0d0-sss)*sss1
1859 c & *((sslipi+sslipj)/2.0d0*lipscale**2+1.0d0)
1860 facel=-3*rrmij*(el1+eesij)*sss1
1861 c & *((sslipi+sslipj)/2.0d0*lipscale**2+1.0d0)
1867 * Radial derivatives. First process both termini of the fragment (i,j)
1869 aux=facel+(sssgrad1*(1.0d0-sss)-sssgrad*sss1/rpp(iteli,itelj))
1871 c & *((sslipi+sslipj)/2.0d0*lipscale**2+1.0d0)
1878 if ((fac_shield(i).gt.0).and.(fac_shield(j).gt.0).and.
1879 & (shield_mode.gt.0)) then
1881 do ilist=1,ishield_list(i)
1882 iresshield=shield_list(ilist,i)
1884 rlocshield=grad_shield_side(k,ilist,i)*eesij*sss1
1885 & /fac_shield(i)*2.0*sss1
1886 gshieldx(k,iresshield)=gshieldx(k,iresshield)+
1888 & +grad_shield_loc(k,ilist,i)*eesij*sss1/fac_shield(i)*2.0
1890 gshieldc(k,iresshield-1)=gshieldc(k,iresshield-1)+rlocshield
1891 C gshieldc_loc(k,iresshield)=gshieldc_loc(k,iresshield)
1892 C & +grad_shield_loc(k,ilist,i)*eesij/fac_shield(i)
1893 C if (iresshield.gt.i) then
1894 C do ishi=i+1,iresshield-1
1895 C gshieldc(k,ishi)=gshieldc(k,ishi)+rlocshield
1896 C & +grad_shield_loc(k,ilist,i)*eesij/fac_shield(i)
1900 C do ishi=iresshield,i
1901 C gshieldc(k,ishi)=gshieldc(k,ishi)-rlocshield
1902 C & -grad_shield_loc(k,ilist,i)*eesij/fac_shield(i)
1908 do ilist=1,ishield_list(j)
1909 iresshield=shield_list(ilist,j)
1911 rlocshield=grad_shield_side(k,ilist,j)*eesij/fac_shield(j)
1913 gshieldx(k,iresshield)=gshieldx(k,iresshield)+
1915 & +grad_shield_loc(k,ilist,j)*eesij/fac_shield(j)*2.0*sss1
1916 gshieldc(k,iresshield-1)=gshieldc(k,iresshield-1)+rlocshield
1921 gshieldc(k,i)=gshieldc(k,i)+
1922 & grad_shield(k,i)*eesij/fac_shield(i)*2.0*sss1
1923 gshieldc(k,j)=gshieldc(k,j)+
1924 & grad_shield(k,j)*eesij/fac_shield(j)*2.0*sss1
1925 gshieldc(k,i-1)=gshieldc(k,i-1)+
1926 & grad_shield(k,i)*eesij/fac_shield(i)*2.0*sss1
1927 gshieldc(k,j-1)=gshieldc(k,j-1)+
1928 & grad_shield(k,j)*eesij/fac_shield(j)*2.0*sss1
1934 c ghalf=0.5D0*ggg(k)
1935 c gelc(k,i)=gelc(k,i)+ghalf
1936 c gelc(k,j)=gelc(k,j)+ghalf
1938 c 9/28/08 AL Gradient compotents will be summed only at the end
1940 gelc_long(k,j)=gelc_long(k,j)+ggg(k)
1941 gelc_long(k,i)=gelc_long(k,i)-ggg(k)
1943 c gelc_long(3,i)=gelc_long(3,i)+
1944 c ssgradlipi*eesij/2.0d0*lipscale**2*sss1
1946 * Loop over residues i+1 thru j-1.
1950 cgrad gelc(l,k)=gelc(l,k)+ggg(l)
1954 & (-sss1*sssgrad/rpp(iteli,itelj)+(1.0d0-sss)*sssgrad1)*rmij*evdwij
1955 c & *((sslipi+sslipj)/2.0d0*lipscale**2+1.0d0)
1960 c ghalf=0.5D0*ggg(k)
1961 c gvdwpp(k,i)=gvdwpp(k,i)+ghalf
1962 c gvdwpp(k,j)=gvdwpp(k,j)+ghalf
1964 c 9/28/08 AL Gradient compotents will be summed only at the end
1966 gvdwpp(k,j)=gvdwpp(k,j)+ggg(k)
1967 gvdwpp(k,i)=gvdwpp(k,i)-ggg(k)
1970 * Loop over residues i+1 thru j-1.
1974 cgrad gvdwpp(l,k)=gvdwpp(l,k)+ggg(l)
1978 facvdw=-6*rrmij*(ev1+evdwij)*(1.0d0-sss)*sss1
1979 c & *((sslipi+sslipj)/2.0d0*lipscale**2+1.0d0)
1980 facel=-3*rrmij*(el1+eesij)*sss1
1981 c & *((sslipi+sslipj)/2.0d0*lipscale**2+1.0d0)
1983 c facvdw=ev1+evdwij*(1.0d0-sss)*sss1
1986 fac=-3*rrmij*(facvdw+facvdw+facel)
1991 * Radial derivatives. First process both termini of the fragment (i,j)
1993 aux=fac+(sssgrad1*(1.0d0-sss)-sssgrad*sss1/rpp(iteli,itelj))
1995 c & *((sslipi+sslipj)/2.0d0*lipscale**2+1.0d0)
2003 c ghalf=0.5D0*ggg(k)
2004 c gelc(k,i)=gelc(k,i)+ghalf
2005 c gelc(k,j)=gelc(k,j)+ghalf
2007 c 9/28/08 AL Gradient compotents will be summed only at the end
2009 gelc_long(k,j)=gelc(k,j)+ggg(k)
2010 gelc_long(k,i)=gelc(k,i)-ggg(k)
2013 * Loop over residues i+1 thru j-1.
2017 cgrad gelc(l,k)=gelc(l,k)+ggg(l)
2020 c 9/28/08 AL Gradient compotents will be summed only at the end
2025 & (-sssgrad*sss1/rpp(iteli,itelj)+sssgrad1*(1.0d0-sss))*rmij*evdwij
2030 gvdwpp(k,j)=gvdwpp(k,j)+ggg(k)
2031 gvdwpp(k,i)=gvdwpp(k,i)-ggg(k)
2037 ecosa=2.0D0*fac3*fac1+fac4
2040 ecosb=(fac3*(fac1*cosg+cosb)+cosg*fac4)
2041 ecosg=(fac3*(fac1*cosb+cosg)+cosb*fac4)
2043 dcosb(k)=rmij*(dc_norm(k,i)-erij(k)*cosb)
2044 dcosg(k)=rmij*(dc_norm(k,j)-erij(k)*cosg)
2046 cd print '(2i3,2(3(1pd14.5),3x))',i,j,(dcosb(k),k=1,3),
2047 cd & (dcosg(k),k=1,3)
2049 ggg(k)=(ecosb*dcosb(k)+ecosg*dcosg(k))*sss1
2050 & *fac_shield(i)**2*fac_shield(j)**2
2051 c & *((sslipi+sslipj)/2.0d0*lipscale**2+1.0d0)
2055 c ghalf=0.5D0*ggg(k)
2056 c gelc(k,i)=gelc(k,i)+ghalf
2057 c & +(ecosa*(dc_norm(k,j)-cosa*dc_norm(k,i))
2058 c & + ecosb*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1)
2059 c gelc(k,j)=gelc(k,j)+ghalf
2060 c & +(ecosa*(dc_norm(k,i)-cosa*dc_norm(k,j))
2061 c & + ecosg*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1)
2065 cgrad gelc(l,k)=gelc(l,k)+ggg(l)
2070 & +((ecosa*(dc_norm(k,j)-cosa*dc_norm(k,i))
2071 & +ecosb*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1))*sss1
2072 & *fac_shield(i)**2*fac_shield(j)**2
2073 c & *((sslipi+sslipj)/2.0d0*lipscale**2+1.0d0)
2076 & +((ecosa*(dc_norm(k,i)-cosa*dc_norm(k,j))
2077 & +ecosg*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1))*sss1
2078 & *fac_shield(i)**2*fac_shield(j)**2
2079 c & *((sslipi+sslipj)/2.0d0*lipscale**2+1.0d0)
2080 gelc_long(k,j)=gelc_long(k,j)+ggg(k)
2081 gelc_long(k,i)=gelc_long(k,i)-ggg(k)
2083 IF (wel_loc.gt.0.0d0 .or. wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0
2084 & .or. wcorr6.gt.0.0d0 .or. wturn3.gt.0.0d0
2085 & .or. wturn4.gt.0.0d0 .or. wturn6.gt.0.0d0) THEN
2087 C 9/25/99 Mixed third-order local-electrostatic terms. The local-interaction
2088 C energy of a peptide unit is assumed in the form of a second-order
2089 C Fourier series in the angles lambda1 and lambda2 (see Nishikawa et al.
2090 C Macromolecules, 1974, 7, 797-806 for definition). This correlation terms
2091 C are computed for EVERY pair of non-contiguous peptide groups.
2093 if (j.lt.nres-1) then
2104 muij(kkk)=mu(k,i)*mu(l,j)
2106 gmuij1(kkk)=gtb1(k,i+1)*mu(l,j)
2107 c write(iout,*) 'k=',k,i,gtb1(k,i+1),gtb1(k,i+1)*mu(l,j)
2108 gmuij2(kkk)=gUb2(k,i)*mu(l,j)
2109 gmuji1(kkk)=mu(k,i)*gtb1(l,j+1)
2110 c write(iout,*) 'l=',l,j,gtb1(l,j+1),gtb1(l,j+1)*mu(k,i)
2111 gmuji2(kkk)=mu(k,i)*gUb2(l,j)
2115 cd write (iout,*) 'EELEC: i',i,' j',j
2116 cd write (iout,*) 'j',j,' j1',j1,' j2',j2
2117 cd write(iout,*) 'muij',muij
2118 ury=scalar(uy(1,i),erij)
2119 urz=scalar(uz(1,i),erij)
2120 vry=scalar(uy(1,j),erij)
2121 vrz=scalar(uz(1,j),erij)
2122 a22=scalar(uy(1,i),uy(1,j))-3*ury*vry
2123 a23=scalar(uy(1,i),uz(1,j))-3*ury*vrz
2124 a32=scalar(uz(1,i),uy(1,j))-3*urz*vry
2125 a33=scalar(uz(1,i),uz(1,j))-3*urz*vrz
2126 fac=dsqrt(-ael6i)*r3ij
2131 cd write (iout,'(4i5,4f10.5)')
2132 cd & i,itortyp(itype(i)),j,itortyp(itype(j)),a22,a23,a32,a33
2133 cd write (iout,'(6f10.5)') (muij(k),k=1,4),fac,eel_loc_ij
2134 cd write (iout,'(2(3f10.5,5x)/2(3f10.5,5x))') uy(:,i),uz(:,i),
2135 cd & uy(:,j),uz(:,j)
2136 cd write (iout,'(4f10.5)')
2137 cd & scalar(uy(1,i),uy(1,j)),scalar(uy(1,i),uz(1,j)),
2138 cd & scalar(uz(1,i),uy(1,j)),scalar(uz(1,i),uz(1,j))
2139 cd write (iout,'(4f10.5)') ury,urz,vry,vrz
2140 cd write (iout,'(9f10.5/)')
2141 cd & fac22,a22,fac23,a23,fac32,a32,fac33,a33,eel_loc_ij
2142 C Derivatives of the elements of A in virtual-bond vectors
2143 call unormderiv(erij(1),unmat(1,1),rmij,erder(1,1))
2145 uryg(k,1)=scalar(erder(1,k),uy(1,i))
2146 uryg(k,2)=scalar(uygrad(1,k,1,i),erij(1))
2147 uryg(k,3)=scalar(uygrad(1,k,2,i),erij(1))
2148 urzg(k,1)=scalar(erder(1,k),uz(1,i))
2149 urzg(k,2)=scalar(uzgrad(1,k,1,i),erij(1))
2150 urzg(k,3)=scalar(uzgrad(1,k,2,i),erij(1))
2151 vryg(k,1)=scalar(erder(1,k),uy(1,j))
2152 vryg(k,2)=scalar(uygrad(1,k,1,j),erij(1))
2153 vryg(k,3)=scalar(uygrad(1,k,2,j),erij(1))
2154 vrzg(k,1)=scalar(erder(1,k),uz(1,j))
2155 vrzg(k,2)=scalar(uzgrad(1,k,1,j),erij(1))
2156 vrzg(k,3)=scalar(uzgrad(1,k,2,j),erij(1))
2158 C Compute radial contributions to the gradient
2176 C Add the contributions coming from er
2179 agg(k,1)=agg(k,1)+fac3*(uryg(k,1)*vry+vryg(k,1)*ury)
2180 agg(k,2)=agg(k,2)+fac3*(uryg(k,1)*vrz+vrzg(k,1)*ury)
2181 agg(k,3)=agg(k,3)+fac3*(urzg(k,1)*vry+vryg(k,1)*urz)
2182 agg(k,4)=agg(k,4)+fac3*(urzg(k,1)*vrz+vrzg(k,1)*urz)
2185 C Derivatives in DC(i)
2186 cgrad ghalf1=0.5d0*agg(k,1)
2187 cgrad ghalf2=0.5d0*agg(k,2)
2188 cgrad ghalf3=0.5d0*agg(k,3)
2189 cgrad ghalf4=0.5d0*agg(k,4)
2190 aggi(k,1)=fac*(scalar(uygrad(1,k,1,i),uy(1,j))
2191 & -3.0d0*uryg(k,2)*vry)!+ghalf1
2192 aggi(k,2)=fac*(scalar(uygrad(1,k,1,i),uz(1,j))
2193 & -3.0d0*uryg(k,2)*vrz)!+ghalf2
2194 aggi(k,3)=fac*(scalar(uzgrad(1,k,1,i),uy(1,j))
2195 & -3.0d0*urzg(k,2)*vry)!+ghalf3
2196 aggi(k,4)=fac*(scalar(uzgrad(1,k,1,i),uz(1,j))
2197 & -3.0d0*urzg(k,2)*vrz)!+ghalf4
2198 C Derivatives in DC(i+1)
2199 aggi1(k,1)=fac*(scalar(uygrad(1,k,2,i),uy(1,j))
2200 & -3.0d0*uryg(k,3)*vry)!+agg(k,1)
2201 aggi1(k,2)=fac*(scalar(uygrad(1,k,2,i),uz(1,j))
2202 & -3.0d0*uryg(k,3)*vrz)!+agg(k,2)
2203 aggi1(k,3)=fac*(scalar(uzgrad(1,k,2,i),uy(1,j))
2204 & -3.0d0*urzg(k,3)*vry)!+agg(k,3)
2205 aggi1(k,4)=fac*(scalar(uzgrad(1,k,2,i),uz(1,j))
2206 & -3.0d0*urzg(k,3)*vrz)!+agg(k,4)
2207 C Derivatives in DC(j)
2208 aggj(k,1)=fac*(scalar(uygrad(1,k,1,j),uy(1,i))
2209 & -3.0d0*vryg(k,2)*ury)!+ghalf1
2210 aggj(k,2)=fac*(scalar(uzgrad(1,k,1,j),uy(1,i))
2211 & -3.0d0*vrzg(k,2)*ury)!+ghalf2
2212 aggj(k,3)=fac*(scalar(uygrad(1,k,1,j),uz(1,i))
2213 & -3.0d0*vryg(k,2)*urz)!+ghalf3
2214 aggj(k,4)=fac*(scalar(uzgrad(1,k,1,j),uz(1,i))
2215 & -3.0d0*vrzg(k,2)*urz)!+ghalf4
2216 C Derivatives in DC(j+1) or DC(nres-1)
2217 aggj1(k,1)=fac*(scalar(uygrad(1,k,2,j),uy(1,i))
2218 & -3.0d0*vryg(k,3)*ury)
2219 aggj1(k,2)=fac*(scalar(uzgrad(1,k,2,j),uy(1,i))
2220 & -3.0d0*vrzg(k,3)*ury)
2221 aggj1(k,3)=fac*(scalar(uygrad(1,k,2,j),uz(1,i))
2222 & -3.0d0*vryg(k,3)*urz)
2223 aggj1(k,4)=fac*(scalar(uzgrad(1,k,2,j),uz(1,i))
2224 & -3.0d0*vrzg(k,3)*urz)
2225 cgrad if (j.eq.nres-1 .and. i.lt.j-2) then
2227 cgrad aggj1(k,l)=aggj1(k,l)+agg(k,l)
2240 aggi(k,l)=-aggi(k,l)
2241 aggi1(k,l)=-aggi1(k,l)
2242 aggj(k,l)=-aggj(k,l)
2243 aggj1(k,l)=-aggj1(k,l)
2246 if (j.lt.nres-1) then
2252 aggi(k,l)=-aggi(k,l)
2253 aggi1(k,l)=-aggi1(k,l)
2254 aggj(k,l)=-aggj(k,l)
2255 aggj1(k,l)=-aggj1(k,l)
2266 aggi(k,l)=-aggi(k,l)
2267 aggi1(k,l)=-aggi1(k,l)
2268 aggj(k,l)=-aggj(k,l)
2269 aggj1(k,l)=-aggj1(k,l)
2274 IF (wel_loc.gt.0.0d0) THEN
2275 C Contribution to the local-electrostatic energy coming from the i-j pair
2276 eel_loc_ij=a22*muij(1)+a23*muij(2)+a32*muij(3)
2278 cd write (iout,*) 'i',i,' j',j,' eel_loc_ij',eel_loc_ij
2280 if (energy_dec) write (iout,'(a6,2i5,0pf7.3)')
2281 & 'eelloc',i,j,eel_loc_ij
2284 if (shield_mode.eq.0) then
2291 eel_loc_ij=eel_loc_ij
2292 & *fac_shield(i)*fac_shield(j)
2293 eel_loc=eel_loc+eel_loc_ij*sss1
2295 if ((fac_shield(i).gt.0).and.(fac_shield(j).gt.0).and.
2296 & (shield_mode.gt.0)) then
2299 do ilist=1,ishield_list(i)
2300 iresshield=shield_list(ilist,i)
2302 rlocshield=grad_shield_side(k,ilist,i)*eel_loc_ij
2303 & /fac_shield(i)*sss1
2305 gshieldx_ll(k,iresshield)=gshieldx_ll(k,iresshield)+
2307 & +grad_shield_loc(k,ilist,i)*eel_loc_ij/fac_shield(i)*sss1
2308 gshieldc_ll(k,iresshield-1)=gshieldc_ll(k,iresshield-1)
2312 do ilist=1,ishield_list(j)
2313 iresshield=shield_list(ilist,j)
2315 rlocshield=grad_shield_side(k,ilist,j)*eel_loc_ij
2316 & /fac_shield(j)*sss1
2318 gshieldx_ll(k,iresshield)=gshieldx_ll(k,iresshield)+
2320 & +grad_shield_loc(k,ilist,j)*eel_loc_ij/fac_shield(j)*sss1
2321 gshieldc_ll(k,iresshield-1)=gshieldc_ll(k,iresshield-1)
2328 gshieldc_ll(k,i)=gshieldc_ll(k,i)+
2329 & grad_shield(k,i)*eel_loc_ij/fac_shield(i)*sss1
2330 gshieldc_ll(k,j)=gshieldc_ll(k,j)+
2331 & grad_shield(k,j)*eel_loc_ij/fac_shield(j)*sss1
2332 gshieldc_ll(k,i-1)=gshieldc_ll(k,i-1)+
2333 & grad_shield(k,i)*eel_loc_ij/fac_shield(i)*sss1
2334 gshieldc_ll(k,j-1)=gshieldc_ll(k,j-1)+
2335 & grad_shield(k,j)*eel_loc_ij/fac_shield(j)*sss1
2340 geel_loc_ij=(a22*gmuij1(1)
2344 & *fac_shield(i)*fac_shield(j)*sss1
2345 c write(iout,*) "derivative over thatai"
2346 c write(iout,*) a22*gmuij1(1), a23*gmuij1(2) ,a32*gmuij1(3),
2348 gloc(nphi+i,icg)=gloc(nphi+i,icg)+
2349 & geel_loc_ij*wel_loc
2350 c write(iout,*) "derivative over thatai-1"
2351 c write(iout,*) a22*gmuij2(1), a23*gmuij2(2) ,a32*gmuij2(3),
2358 gloc(nphi+i-1,icg)=gloc(nphi+i-1,icg)+
2359 & geel_loc_ij*wel_loc
2360 & *fac_shield(i)*fac_shield(j)*sss1
2362 c Derivative over j residue
2363 geel_loc_ji=a22*gmuji1(1)
2367 c write(iout,*) "derivative over thataj"
2368 c write(iout,*) a22*gmuji1(1), a23*gmuji1(2) ,a32*gmuji1(3),
2371 gloc(nphi+j,icg)=gloc(nphi+j,icg)+
2372 & geel_loc_ji*wel_loc
2373 & *fac_shield(i)*fac_shield(j)*sss1
2380 c write(iout,*) "derivative over thataj-1"
2381 c write(iout,*) a22*gmuji2(1), a23*gmuji2(2) ,a32*gmuji2(3),
2383 gloc(nphi+j-1,icg)=gloc(nphi+j-1,icg)+
2384 & geel_loc_ji*wel_loc
2385 & *fac_shield(i)*fac_shield(j)*sss1
2387 cC Paral derivatives in virtual-bond dihedral angles gamma
2389 & gel_loc_loc(i-1)=gel_loc_loc(i-1)+
2390 & (a22*muder(1,i)*mu(1,j)+a23*muder(1,i)*mu(2,j)
2391 & +a32*muder(2,i)*mu(1,j)+a33*muder(2,i)*mu(2,j))
2392 & *fac_shield(i)*fac_shield(j)*sss1
2393 c & *fac_shield(i)*fac_shield(j)
2394 c & *((sslipi+sslipj)/2.0d0*lipscale+1.0d0)
2397 gel_loc_loc(j-1)=gel_loc_loc(j-1)+
2398 & (a22*mu(1,i)*muder(1,j)+a23*mu(1,i)*muder(2,j)
2399 & +a32*mu(2,i)*muder(1,j)+a33*mu(2,i)*muder(2,j))
2400 & *fac_shield(i)*fac_shield(j)*sss1
2401 c & *fac_shield(i)*fac_shield(j)
2402 c & *((sslipi+sslipj)/2.0d0*lipscale+1.0d0)
2404 C Derivatives of eello in DC(i+1) thru DC(j-1) or DC(nres-2)
2406 ggg(l)=(agg(l,1)*muij(1)+
2407 & agg(l,2)*muij(2)+agg(l,3)*muij(3)+agg(l,4)*muij(4))
2408 & *fac_shield(i)*fac_shield(j)*sss1
2409 c & *fac_shield(i)*fac_shield(j)
2410 c & *((sslipi+sslipj)/2.0d0*lipscale+1.0d0)
2412 gel_loc_long(l,j)=gel_loc_long(l,j)+ggg(l)
2413 gel_loc_long(l,i)=gel_loc_long(l,i)-ggg(l)
2414 cgrad ghalf=0.5d0*ggg(l)
2415 cgrad gel_loc(l,i)=gel_loc(l,i)+ghalf
2416 cgrad gel_loc(l,j)=gel_loc(l,j)+ghalf
2420 cgrad gel_loc(l,k)=gel_loc(l,k)+ggg(l)
2423 C Remaining derivatives of eello
2424 c gel_loc_long(3,j)=gel_loc_long(3,j)+ &
2425 c ssgradlipj*eel_loc_ij/2.0d0*lipscale/ &
2426 c ((sslipi+sslipj)/2.0d0*lipscale+1.0d0)*sss_ele_cut
2428 c gel_loc_long(3,i)=gel_loc_long(3,i)+ &
2429 c ssgradlipi*eel_loc_ij/2.0d0*lipscale/ &
2430 c ((sslipi+sslipj)/2.0d0*lipscale+1.0d0)*sss_ele_cut
2433 gel_loc(l,i)=gel_loc(l,i)+(aggi(l,1)*muij(1)+
2434 & aggi(l,2)*muij(2)+aggi(l,3)*muij(3)+aggi(l,4)*muij(4))
2435 & *fac_shield(i)*fac_shield(j)*sss1
2436 c & *((sslipi+sslipj)/2.0d0*lipscale+1.0d0)
2438 gel_loc(l,i+1)=gel_loc(l,i+1)+(aggi1(l,1)*muij(1)+
2439 & aggi1(l,2)*muij(2)+aggi1(l,3)*muij(3)+aggi1(l,4)*muij(4))
2440 & *fac_shield(i)*fac_shield(j)*sss1
2441 c & *((sslipi+sslipj)/2.0d0*lipscale+1.0d0)
2443 gel_loc(l,j)=gel_loc(l,j)+(aggj(l,1)*muij(1)+
2444 & aggj(l,2)*muij(2)+aggj(l,3)*muij(3)+aggj(l,4)*muij(4))
2445 & *fac_shield(i)*fac_shield(j)*sss1
2446 c & *((sslipi+sslipj)/2.0d0*lipscale+1.0d0)
2448 gel_loc(l,j1)=gel_loc(l,j1)+(aggj1(l,1)*muij(1)+
2449 & aggj1(l,2)*muij(2)+aggj1(l,3)*muij(3)+aggj1(l,4)*muij(4))
2450 & *fac_shield(i)*fac_shield(j)*sss1
2451 c & *((sslipi+sslipj)/2.0d0*lipscale+1.0d0)
2456 C Change 12/26/95 to calculate four-body contributions to H-bonding energy
2457 c if (j.gt.i+1 .and. num_conti.le.maxconts) then
2458 if (wcorr+wcorr4+wcorr5+wcorr6.gt.0.0d0
2459 & .and. num_conti.le.maxconts) then
2460 c write (iout,*) i,j," entered corr"
2462 C Calculate the contact function. The ith column of the array JCONT will
2463 C contain the numbers of atoms that make contacts with the atom I (of numbers
2464 C greater than I). The arrays FACONT and GACONT will contain the values of
2465 C the contact function and its derivative.
2466 c r0ij=1.02D0*rpp(iteli,itelj)
2467 c r0ij=1.11D0*rpp(iteli,itelj)
2468 r0ij=2.20D0*rpp(iteli,itelj)
2469 c r0ij=1.55D0*rpp(iteli,itelj)
2470 call gcont(rij,r0ij,1.0D0,0.2d0*r0ij,fcont,fprimcont)
2471 if (fcont.gt.0.0D0) then
2472 num_conti=num_conti+1
2473 if (num_conti.gt.maxconts) then
2474 write (iout,*) 'WARNING - max. # of contacts exceeded;',
2475 & ' will skip next contacts for this conf.'
2477 jcont_hb(num_conti,i)=j
2478 cd write (iout,*) "i",i," j",j," num_conti",num_conti,
2479 cd " jcont_hb",jcont_hb(num_conti,i)
2480 IF (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or.
2481 & wcorr6.gt.0.0d0 .or. wturn6.gt.0.0d0) THEN
2482 C 9/30/99 (AL) - store components necessary to evaluate higher-order loc-el
2484 d_cont(num_conti,i)=rij
2485 cd write (2,'(3e15.5)') rij,r0ij+0.2d0*r0ij,rij
2486 C --- Electrostatic-interaction matrix ---
2487 a_chuj(1,1,num_conti,i)=a22
2488 a_chuj(1,2,num_conti,i)=a23
2489 a_chuj(2,1,num_conti,i)=a32
2490 a_chuj(2,2,num_conti,i)=a33
2491 C --- Gradient of rij
2493 grij_hb_cont(kkk,num_conti,i)=erij(kkk)
2500 a_chuj_der(k,l,m,1,num_conti,i)=agg(m,kkll)
2501 a_chuj_der(k,l,m,2,num_conti,i)=aggi(m,kkll)
2502 a_chuj_der(k,l,m,3,num_conti,i)=aggi1(m,kkll)
2503 a_chuj_der(k,l,m,4,num_conti,i)=aggj(m,kkll)
2504 a_chuj_der(k,l,m,5,num_conti,i)=aggj1(m,kkll)
2509 IF (wcorr4.eq.0.0d0 .and. wcorr.gt.0.0d0) THEN
2510 C Calculate contact energies
2512 wij=cosa-3.0D0*cosb*cosg
2515 c fac3=dsqrt(-ael6i)/r0ij**3
2516 fac3=dsqrt(-ael6i)*r3ij
2517 c ees0pij=dsqrt(4.0D0+cosa4+wij*wij-3.0D0*cosbg1*cosbg1)
2518 ees0tmp=4.0D0+cosa4+wij*wij-3.0D0*cosbg1*cosbg1
2519 if (ees0tmp.gt.0) then
2520 ees0pij=dsqrt(ees0tmp)
2524 c ees0mij=dsqrt(4.0D0-cosa4+wij*wij-3.0D0*cosbg2*cosbg2)
2525 ees0tmp=4.0D0-cosa4+wij*wij-3.0D0*cosbg2*cosbg2
2526 if (ees0tmp.gt.0) then
2527 ees0mij=dsqrt(ees0tmp)
2532 if (shield_mode.eq.0) then
2536 ees0plist(num_conti,i)=j
2537 C fac_shield(i)=0.4d0
2538 C fac_shield(j)=0.6d0
2540 ees0p(num_conti,i)=0.5D0*fac3*(ees0pij+ees0mij)
2541 & *fac_shield(i)*fac_shield(j)*sss1
2542 ees0m(num_conti,i)=0.5D0*fac3*(ees0pij-ees0mij)
2543 & *fac_shield(i)*fac_shield(j)*sss1
2545 C Diagnostics. Comment out or remove after debugging!
2546 c ees0p(num_conti,i)=0.5D0*fac3*ees0pij
2547 c ees0m(num_conti,i)=0.5D0*fac3*ees0mij
2548 c ees0m(num_conti,i)=0.0D0
2550 c write (iout,*) 'i=',i,' j=',j,' rij=',rij,' r0ij=',r0ij,
2551 c & ' ees0ij=',ees0p(num_conti,i),ees0m(num_conti,i),' fcont=',fcont
2552 C Angular derivatives of the contact function
2553 ees0pij1=fac3/ees0pij
2554 ees0mij1=fac3/ees0mij
2555 fac3p=-3.0D0*fac3*rrmij
2556 ees0pijp=0.5D0*fac3p*(ees0pij+ees0mij)
2557 ees0mijp=0.5D0*fac3p*(ees0pij-ees0mij)
2559 ecosa1= ees0pij1*( 1.0D0+0.5D0*wij)
2560 ecosb1=-1.5D0*ees0pij1*(wij*cosg+cosbg1)
2561 ecosg1=-1.5D0*ees0pij1*(wij*cosb+cosbg1)
2562 ecosa2= ees0mij1*(-1.0D0+0.5D0*wij)
2563 ecosb2=-1.5D0*ees0mij1*(wij*cosg+cosbg2)
2564 ecosg2=-1.5D0*ees0mij1*(wij*cosb-cosbg2)
2565 ecosap=ecosa1+ecosa2
2566 ecosbp=ecosb1+ecosb2
2567 ecosgp=ecosg1+ecosg2
2568 ecosam=ecosa1-ecosa2
2569 ecosbm=ecosb1-ecosb2
2570 ecosgm=ecosg1-ecosg2
2579 facont_hb(num_conti,i)=fcont
2580 fprimcont=fprimcont/rij
2581 cd facont_hb(num_conti,i)=1.0D0
2582 C Following line is for diagnostics.
2585 dcosb(k)=rmij*(dc_norm(k,i)-erij(k)*cosb)
2586 dcosg(k)=rmij*(dc_norm(k,j)-erij(k)*cosg)
2589 gggp(k)=ecosbp*dcosb(k)+ecosgp*dcosg(k)
2590 gggm(k)=ecosbm*dcosb(k)+ecosgm*dcosg(k)
2592 gggp(1)=gggp(1)+ees0pijp*xj
2593 & +ees0p(num_conti,i)/sss1*rmij*xj*sssgrad1
2594 gggp(2)=gggp(2)+ees0pijp*yj
2595 & +ees0p(num_conti,i)/sss1*rmij*yj*sssgrad1
2596 gggp(3)=gggp(3)+ees0pijp*zj
2597 & +ees0p(num_conti,i)/sss1*rmij*zj*sssgrad1
2598 gggm(1)=gggm(1)+ees0mijp*xj
2599 & +ees0m(num_conti,i)/sss1*rmij*xj*sssgrad1
2600 gggm(2)=gggm(2)+ees0mijp*yj
2601 & +ees0m(num_conti,i)/sss1*rmij*yj*sssgrad1
2602 gggm(3)=gggm(3)+ees0mijp*zj
2603 & +ees0m(num_conti,i)/sss1*rmij*zj*sssgrad1
2604 C Derivatives due to the contact function
2605 gacont_hbr(1,num_conti,i)=fprimcont*xj
2606 gacont_hbr(2,num_conti,i)=fprimcont*yj
2607 gacont_hbr(3,num_conti,i)=fprimcont*zj
2610 c 10/24/08 cgrad and ! comments indicate the parts of the code removed
2611 c following the change of gradient-summation algorithm.
2613 cgrad ghalfp=0.5D0*gggp(k)
2614 cgrad ghalfm=0.5D0*gggm(k)
2615 gacontp_hb1(k,num_conti,i)=!ghalfp
2616 & +(ecosap*(dc_norm(k,j)-cosa*dc_norm(k,i))
2617 & + ecosbp*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1)
2618 & *sss1*fac_shield(i)*fac_shield(j)
2620 gacontp_hb2(k,num_conti,i)=!ghalfp
2621 & +(ecosap*(dc_norm(k,i)-cosa*dc_norm(k,j))
2622 & + ecosgp*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1)
2623 & *sss1*fac_shield(i)*fac_shield(j)
2625 gacontp_hb3(k,num_conti,i)=gggp(k)
2626 & *sss1*fac_shield(i)*fac_shield(j)
2628 gacontm_hb1(k,num_conti,i)=!ghalfm
2629 & +(ecosam*(dc_norm(k,j)-cosa*dc_norm(k,i))
2630 & + ecosbm*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1)
2631 & *sss1*fac_shield(i)*fac_shield(j)
2633 gacontm_hb2(k,num_conti,i)=!ghalfm
2634 & +(ecosam*(dc_norm(k,i)-cosa*dc_norm(k,j))
2635 & + ecosgm*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1)
2636 & *sss1*fac_shield(i)*fac_shield(j)
2638 gacontm_hb3(k,num_conti,i)=gggm(k)
2639 & *sss1*fac_shield(i)*fac_shield(j)
2643 endif ! num_conti.le.maxconts
2647 if (wturn3.gt.0.0d0 .or. wturn4.gt.0.0d0) then
2650 ghalf=0.5d0*agg(l,k)
2651 aggi(l,k)=aggi(l,k)+ghalf
2652 aggi1(l,k)=aggi1(l,k)+agg(l,k)
2653 aggj(l,k)=aggj(l,k)+ghalf
2656 if (j.eq.nres-1 .and. i.lt.j-2) then
2659 aggj1(l,k)=aggj1(l,k)+agg(l,k)
2664 c t_eelecij=t_eelecij+MPI_Wtime()-time00
2667 C-----------------------------------------------------------------------
2668 subroutine evdwpp_short(evdw1)
2673 include 'DIMENSIONS'
2674 include 'COMMON.CONTROL'
2675 include 'COMMON.IOUNITS'
2676 include 'COMMON.GEO'
2677 include 'COMMON.VAR'
2678 include 'COMMON.LOCAL'
2679 include 'COMMON.CHAIN'
2680 include 'COMMON.DERIV'
2681 include 'COMMON.INTERACT'
2682 c include 'COMMON.CONTACTS'
2683 include 'COMMON.TORSION'
2684 include 'COMMON.VECTORS'
2685 include 'COMMON.FFIELD'
2686 include "COMMON.SPLITELE"
2687 double precision ggg(3)
2688 integer xshift,yshift,zshift
2689 c 4/26/02 - AL scaling factor for 1,4 repulsive VDW interactions
2691 double precision scal_el /1.0d0/
2693 double precision scal_el /0.5d0/
2695 c write (iout,*) "evdwpp_short"
2696 integer i,j,k,iteli,itelj,num_conti,ind,isubchap
2697 double precision dxi,dyi,dzi,dxj,dyj,dzj,aaa,bbb
2698 double precision xj,yj,zj,rij,rrmij,r3ij,r6ij,evdw1,
2699 & dx_normi,dy_normi,dz_normi,xmedi,ymedi,zmedi,
2700 & dx_normj,dy_normj,dz_normj,rmij,ev1,ev2,evdwij,facvdw
2701 double precision xj_safe,yj_safe,zj_safe,xj_temp,yj_temp,zj_temp,
2702 & dist_temp, dist_init,sss_grad
2703 double precision sscale,sscagrad
2706 c write (iout,*) "iatel_s_vdw",iatel_s_vdw,
2707 c & " iatel_e_vdw",iatel_e_vdw
2709 do i=iatel_s_vdw,iatel_e_vdw
2710 if (itype(i).eq.ntyp1.or. itype(i+1).eq.ntyp1) cycle
2714 dx_normi=dc_norm(1,i)
2715 dy_normi=dc_norm(2,i)
2716 dz_normi=dc_norm(3,i)
2717 xmedi=c(1,i)+0.5d0*dxi
2718 ymedi=c(2,i)+0.5d0*dyi
2719 zmedi=c(3,i)+0.5d0*dzi
2720 xmedi=mod(xmedi,boxxsize)
2721 if (xmedi.lt.0.0d0) xmedi=xmedi+boxxsize
2722 ymedi=mod(ymedi,boxysize)
2723 if (ymedi.lt.0.0d0) ymedi=ymedi+boxysize
2724 zmedi=mod(zmedi,boxzsize)
2725 if (zmedi.lt.0.0d0) zmedi=zmedi+boxzsize
2727 c write (iout,*) 'i',i,' ielstart',ielstart_vdw(i),
2728 c & ' ielend',ielend_vdw(i)
2730 do j=ielstart_vdw(i),ielend_vdw(i)
2731 if (itype(j).eq.ntyp1 .or. itype(j+1).eq.ntyp1) cycle
2735 if (j.eq.i+2 .and. itelj.eq.2) iteli=2
2736 aaa=app(iteli,itelj)
2737 bbb=bpp(iteli,itelj)
2741 dx_normj=dc_norm(1,j)
2742 dy_normj=dc_norm(2,j)
2743 dz_normj=dc_norm(3,j)
2748 if (xj.lt.0) xj=xj+boxxsize
2750 if (yj.lt.0) yj=yj+boxysize
2752 if (zj.lt.0) zj=zj+boxzsize
2753 dist_init=(xj-xmedi)**2+(yj-ymedi)**2+(zj-zmedi)**2
2761 xj=xj_safe+xshift*boxxsize
2762 yj=yj_safe+yshift*boxysize
2763 zj=zj_safe+zshift*boxzsize
2764 dist_temp=(xj-xmedi)**2+(yj-ymedi)**2+(zj-zmedi)**2
2765 if(dist_temp.lt.dist_init) then
2775 if (isubchap.eq.1) then
2784 rij=xj*xj+yj*yj+zj*zj
2787 c sss=sscale(rij/rpp(iteli,itelj))
2788 c sssgrad=sscagrad(rij/rpp(iteli,itelj))
2789 sss=sscale(rij/rpp(iteli,itelj),r_cut_respa)
2790 sssgrad=sscagrad(rij/rpp(iteli,itelj),r_cut_respa)
2791 if (sss.gt.0.0d0) then
2796 c 4/26/02 - AL scaling down 1,4 repulsive VDW interactions
2797 if (j.eq.i+2) ev1=scal_el*ev1
2800 if (energy_dec) then
2801 write (iout,'(a6,2i5,0pf7.3,f7.3)') 'evdw1',i,j,evdwij,sss
2803 evdw1=evdw1+evdwij*sss
2804 if (energy_dec) write (iout,'(a10,2i5,0pf7.3)')
2805 & 'evdw1_sum',i,j,evdw1
2807 C Calculate contributions to the Cartesian gradient.
2809 facvdw=-6*rrmij*(ev1+evdwij)*sss
2810 ggg(1)=facvdw*xj+sssgrad*rmij*evdwij*xj/rpp(iteli,itelj)
2811 ggg(2)=facvdw*yj+sssgrad*rmij*evdwij*yj/rpp(iteli,itelj)
2812 ggg(3)=facvdw*zj+sssgrad*rmij*evdwij*zj/rpp(iteli,itelj)
2817 gvdwpp(k,j)=gvdwpp(k,j)+ggg(k)
2818 gvdwpp(k,i)=gvdwpp(k,i)-ggg(k)
2825 C-----------------------------------------------------------------------------
2826 subroutine escp_long(evdw2,evdw2_14)
2828 C This subroutine calculates the excluded-volume interaction energy between
2829 C peptide-group centers and side chains and its gradient in virtual-bond and
2830 C side-chain vectors.
2832 implicit real*8 (a-h,o-z)
2833 include 'DIMENSIONS'
2834 include 'COMMON.GEO'
2835 include 'COMMON.VAR'
2836 include 'COMMON.LOCAL'
2837 include 'COMMON.CHAIN'
2838 include 'COMMON.DERIV'
2839 include 'COMMON.INTERACT'
2840 include 'COMMON.FFIELD'
2841 include 'COMMON.IOUNITS'
2842 include 'COMMON.CONTROL'
2843 include "COMMON.SPLITELE"
2844 logical lprint_short
2845 common /shortcheck/ lprint_short
2846 double precision ggg(3)
2847 integer xshift,yshift,zshift
2848 integer i,iint,j,k,iteli,itypj,subchap
2849 double precision xi,yi,zi,xj,yj,zj,rrij,sss1,sssgrad1,
2851 double precision evdw2,evdw2_14,evdwij
2852 double precision xj_safe,yj_safe,zj_safe,xj_temp,yj_temp,zj_temp,
2853 & dist_temp, dist_init
2854 double precision sscale,sscagrad
2855 if (energy_dec) write (iout,*) "escp_long:",r_cut,rlamb
2858 CD print '(a)','Enter ESCP KURWA'
2859 cd write (iout,*) 'iatscp_s=',iatscp_s,' iatscp_e=',iatscp_e
2861 c & write (iout,*) 'ESCP_LONG iatscp_s=',iatscp_s,
2862 c & ' iatscp_e=',iatscp_e
2863 do i=iatscp_s,iatscp_e
2864 if (itype(i).eq.ntyp1 .or. itype(i+1).eq.ntyp1) cycle
2866 xi=0.5D0*(c(1,i)+c(1,i+1))
2867 yi=0.5D0*(c(2,i)+c(2,i+1))
2868 zi=0.5D0*(c(3,i)+c(3,i+1))
2870 if (xi.lt.0) xi=xi+boxxsize
2872 if (yi.lt.0) yi=yi+boxysize
2874 if (zi.lt.0) zi=zi+boxzsize
2876 do iint=1,nscp_gr(i)
2878 do j=iscpstart(i,iint),iscpend(i,iint)
2879 itypj=iabs(itype(j))
2880 if (itypj.eq.ntyp1) cycle
2881 C Uncomment following three lines for SC-p interactions
2885 C Uncomment following three lines for Ca-p interactions
2891 if (xj.lt.0) xj=xj+boxxsize
2893 if (yj.lt.0) yj=yj+boxysize
2895 if (zj.lt.0) zj=zj+boxzsize
2897 dist_init=(xj-xi)**2+(yj-yi)**2+(zj-zi)**2
2905 xj=xj_safe+xshift*boxxsize
2906 yj=yj_safe+yshift*boxysize
2907 zj=zj_safe+zshift*boxzsize
2908 dist_temp=(xj-xi)**2+(yj-yi)**2+(zj-zi)**2
2909 if(dist_temp.lt.dist_init) then
2919 if (subchap.eq.1) then
2929 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
2931 sss1=sscale(1.0d0/(dsqrt(rrij)),r_cut_int)
2932 if (sss1.eq.0) cycle
2933 sss=sscale(1.0d0/(dsqrt(rrij)*rscp(itypj,iteli)),r_cut_respa)
2935 & sscagrad(1.0d0/(dsqrt(rrij)*rscp(itypj,iteli)),r_cut_respa)
2936 sssgrad1=sscagrad(1.0d0/dsqrt(rrij),r_cut_int)
2937 if (energy_dec) write (iout,*) "rrij",1.0d0/dsqrt(rrij),
2938 & " rscp",rscp(itypj,iteli)," subchap",subchap," sss",sss
2939 if (sss.lt.1.0d0) then
2941 e1=fac*fac*aad(itypj,iteli)
2942 e2=fac*bad(itypj,iteli)
2943 if (iabs(j-i) .le. 2) then
2946 evdw2_14=evdw2_14+(e1+e2)*(1.0d0-sss)*sss1
2949 evdw2=evdw2+evdwij*(1.0d0-sss)*sss1
2950 if (energy_dec) write (iout,'(a6,2i5,2(0pf7.3))')
2951 & 'evdw2',i,j,sss,evdwij
2953 C Calculate contributions to the gradient in the virtual-bond and SC vectors.
2956 fac=-(evdwij+e1)*rrij*(1.0d0-sss)*sss1
2957 fac=fac+evdwij*dsqrt(rrij)*(-sssgrad/rscp(itypj,iteli)
2962 C Uncomment following three lines for SC-p interactions
2964 c gradx_scp(k,j)=gradx_scp(k,j)+ggg(k)
2966 C Uncomment following line for SC-p interactions
2967 c gradx_scp(k,j)=gradx_scp(k,j)+ggg(k)
2969 gvdwc_scpp(k,i)=gvdwc_scpp(k,i)-ggg(k)
2970 gvdwc_scp(k,j)=gvdwc_scp(k,j)+ggg(k)
2979 gvdwc_scp(j,i)=expon*gvdwc_scp(j,i)
2980 gvdwc_scpp(j,i)=expon*gvdwc_scpp(j,i)
2981 gradx_scp(j,i)=expon*gradx_scp(j,i)
2984 C******************************************************************************
2988 C To save time the factor EXPON has been extracted from ALL components
2989 C of GVDWC and GRADX. Remember to multiply them by this factor before further
2992 C******************************************************************************
2995 C-----------------------------------------------------------------------------
2996 subroutine escp_short(evdw2,evdw2_14)
2998 C This subroutine calculates the excluded-volume interaction energy between
2999 C peptide-group centers and side chains and its gradient in virtual-bond and
3000 C side-chain vectors.
3003 include 'DIMENSIONS'
3004 include 'COMMON.GEO'
3005 include 'COMMON.VAR'
3006 include 'COMMON.LOCAL'
3007 include 'COMMON.CHAIN'
3008 include 'COMMON.DERIV'
3009 include 'COMMON.INTERACT'
3010 include 'COMMON.FFIELD'
3011 include 'COMMON.IOUNITS'
3012 include 'COMMON.CONTROL'
3013 include "COMMON.SPLITELE"
3014 integer xshift,yshift,zshift
3015 logical lprint_short
3016 common /shortcheck/ lprint_short
3017 integer i,iint,j,k,iteli,itypj,subchap
3018 double precision xi,yi,zi,xj,yj,zj,rrij,sss1,sssgrad1,
3020 double precision evdw2,evdw2_14,evdwij
3021 double precision xj_safe,yj_safe,zj_safe,xj_temp,yj_temp,zj_temp,
3022 & dist_temp, dist_init
3023 double precision ggg(3)
3024 double precision sscale,sscagrad
3027 cd print '(a)','Enter ESCP'
3029 c & write (iout,*) 'ESCP_SHORT iatscp_s=',iatscp_s,
3030 c & ' iatscp_e=',iatscp_e
3031 if (energy_dec) write (iout,*) "escp_short:",r_cut_int,rlamb
3032 do i=iatscp_s,iatscp_e
3033 if (itype(i).eq.ntyp1 .or. itype(i+1).eq.ntyp1) cycle
3035 xi=0.5D0*(c(1,i)+c(1,i+1))
3036 yi=0.5D0*(c(2,i)+c(2,i+1))
3037 zi=0.5D0*(c(3,i)+c(3,i+1))
3039 if (xi.lt.0) xi=xi+boxxsize
3041 if (yi.lt.0) yi=yi+boxysize
3043 if (zi.lt.0) zi=zi+boxzsize
3046 c & write (iout,*) "i",i," itype",itype(i),itype(i+1),
3047 c & " nscp_gr",nscp_gr(i)
3048 do iint=1,nscp_gr(i)
3050 do j=iscpstart(i,iint),iscpend(i,iint)
3051 itypj=iabs(itype(j))
3053 c & write (iout,*) "j",j," itypj",itypj
3054 if (itypj.eq.ntyp1) cycle
3055 C Uncomment following three lines for SC-p interactions
3059 C Uncomment following three lines for Ca-p interactions
3065 if (xj.lt.0) xj=xj+boxxsize
3067 if (yj.lt.0) yj=yj+boxysize
3069 if (zj.lt.0) zj=zj+boxzsize
3071 dist_init=(xj-xi)**2+(yj-yi)**2+(zj-zi)**2
3072 c if (lprint_short) then
3073 c write (iout,*) i,j,xi,yi,zi,xj,yj,zj
3074 c write (iout,*) "dist_init",dsqrt(dist_init)
3083 xj=xj_safe+xshift*boxxsize
3084 yj=yj_safe+yshift*boxysize
3085 zj=zj_safe+zshift*boxzsize
3086 dist_temp=(xj-xi)**2+(yj-yi)**2+(zj-zi)**2
3087 if(dist_temp.lt.dist_init) then
3097 c if (lprint_short) write (iout,*) "dist_temp",dsqrt(dist_temp)
3098 if (subchap.eq.1) then
3107 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
3108 c sss=sscale(1.0d0/(dsqrt(rrij)*rscp(itypj,iteli)))
3109 c sssgrad=sscagrad(1.0d0/(dsqrt(rrij)*rscp(itypj,iteli)))
3110 sss=sscale(1.0d0/(dsqrt(rrij*rscp(itypj,iteli))),r_cut_respa)
3111 sssgrad=sscagrad(1.0d0/(dsqrt(rrij*rscp(itypj,iteli))),
3113 if (energy_dec) write (iout,*) "rrij",1.0d0/dsqrt(rrij),
3114 & " rscp",rscp(itypj,iteli)," subchap",subchap," sss",sss
3115 c if (lprint_short) write (iout,*) "rij",1.0/dsqrt(rrij),
3116 c & " subchap",subchap," sss",sss
3117 if (sss.gt.0.0d0) then
3120 e1=fac*fac*aad(itypj,iteli)
3121 e2=fac*bad(itypj,iteli)
3122 if (iabs(j-i) .le. 2) then
3125 evdw2_14=evdw2_14+(e1+e2)*sss
3128 evdw2=evdw2+evdwij*sss
3129 if (energy_dec) write (iout,'(a6,2i5,2(0pf7.3))')
3130 & 'evdw2',i,j,sss,evdwij
3132 C Calculate contributions to the gradient in the virtual-bond and SC vectors.
3134 fac=-(evdwij+e1)*rrij*sss
3135 fac=fac+(evdwij)*sssgrad*dsqrt(rrij)/rscp(itypj,iteli)
3139 C Uncomment following three lines for SC-p interactions
3141 c gradx_scp(k,j)=gradx_scp(k,j)+ggg(k)
3143 C Uncomment following line for SC-p interactions
3144 c gradx_scp(k,j)=gradx_scp(k,j)+ggg(k)
3146 gvdwc_scpp(k,i)=gvdwc_scpp(k,i)-ggg(k)
3147 gvdwc_scp(k,j)=gvdwc_scp(k,j)+ggg(k)
3156 gvdwc_scp(j,i)=expon*gvdwc_scp(j,i)
3157 gvdwc_scpp(j,i)=expon*gvdwc_scpp(j,i)
3158 gradx_scp(j,i)=expon*gradx_scp(j,i)
3161 C******************************************************************************
3165 C To save time the factor EXPON has been extracted from ALL components
3166 C of GVDWC and GRADX. Remember to multiply them by this factor before further
3169 C******************************************************************************