1 subroutine etotal(energia)
2 implicit real*8 (a-h,o-z)
7 cMS$ATTRIBUTES C :: proc_proc
12 double precision weights_(n_ene)
14 include 'COMMON.SETUP'
15 include 'COMMON.IOUNITS'
16 double precision energia(0:n_ene)
17 include 'COMMON.LOCAL'
18 include 'COMMON.FFIELD'
19 include 'COMMON.DERIV'
20 include 'COMMON.INTERACT'
21 include 'COMMON.SBRIDGE'
22 include 'COMMON.CHAIN'
25 include 'COMMON.CONTROL'
26 include 'COMMON.TIME1'
28 c print*,"ETOTAL Processor",fg_rank," absolute rank",myrank,
29 c & " nfgtasks",nfgtasks
30 if (nfgtasks.gt.1) then
36 C FG slaves call the following matching MPI_Bcast in ERGASTULUM
37 if (fg_rank.eq.0) then
38 call MPI_Bcast(0,1,MPI_INTEGER,king,FG_COMM,IERROR)
39 c print *,"Processor",myrank," BROADCAST iorder"
40 C FG master sets up the WEIGHTS_ array which will be broadcast to the
41 C FG slaves as WEIGHTS array.
62 C FG Master broadcasts the WEIGHTS_ array
63 call MPI_Bcast(weights_(1),n_ene,
64 & MPI_DOUBLE_PRECISION,king,FG_COMM,IERROR)
66 C FG slaves receive the WEIGHTS array
67 call MPI_Bcast(weights(1),n_ene,
68 & MPI_DOUBLE_PRECISION,king,FG_COMM,IERROR)
90 time_Bcast=time_Bcast+MPI_Wtime()-time00
91 time_Bcastw=time_Bcastw+MPI_Wtime()-time00
92 c call chainbuild_cart
94 c print *,'Processor',myrank,' calling etotal ipot=',ipot
95 c print *,'Processor',myrank,' nnt=',nnt,' nct=',nct
97 c if (modecalc.eq.12.or.modecalc.eq.14) then
98 c call int_from_cart1(.false.)
109 C Compute the side-chain and electrostatic interaction energy
111 goto (101,102,103,104,105,106) ipot
112 C Lennard-Jones potential.
113 101 call elj(evdw,evdw_p,evdw_m)
114 cd print '(a)','Exit ELJ'
116 C Lennard-Jones-Kihara potential (shifted).
117 102 call eljk(evdw,evdw_p,evdw_m)
119 C Berne-Pechukas potential (dilated LJ, angular dependence).
120 103 call ebp(evdw,evdw_p,evdw_m)
122 C Gay-Berne potential (shifted LJ, angular dependence).
123 104 call egb(evdw,evdw_p,evdw_m)
125 C Gay-Berne-Vorobjev potential (shifted LJ, angular dependence).
126 105 call egbv(evdw,evdw_p,evdw_m)
128 C Soft-sphere potential
129 106 call e_softsphere(evdw)
131 C Calculate electrostatic (H-bonding) energy of the main chain.
134 c print *,"Processor",myrank," computed USCSC"
145 time_vec=time_vec+MPI_Wtime()-time01
147 time_vec=time_vec+tcpu()-time01
150 c print *,"Processor",myrank," left VEC_AND_DERIV"
153 if (welec.gt.0d0.or.wvdwpp.gt.0d0.or.wel_loc.gt.0d0.or.
154 & wturn3.gt.0d0.or.wturn4.gt.0d0 .or. wcorr.gt.0.0d0
155 & .or. wcorr4.gt.0.0d0 .or. wcorr5.gt.0.d0
156 & .or. wcorr6.gt.0.0d0 .or. wturn6.gt.0.0d0 ) then
158 if (welec.gt.0d0.or.wel_loc.gt.0d0.or.
159 & wturn3.gt.0d0.or.wturn4.gt.0d0 .or. wcorr.gt.0.0d0
160 & .or. wcorr4.gt.0.0d0 .or. wcorr5.gt.0.d0
161 & .or. wcorr6.gt.0.0d0 .or. wturn6.gt.0.0d0 ) then
163 call eelec(ees,evdw1,eel_loc,eello_turn3,eello_turn4)
172 c write (iout,*) "Soft-spheer ELEC potential"
173 call eelec_soft_sphere(ees,evdw1,eel_loc,eello_turn3,
176 c print *,"Processor",myrank," computed UELEC"
178 C Calculate excluded-volume interaction energy between peptide groups
183 call escp(evdw2,evdw2_14)
189 c write (iout,*) "Soft-sphere SCP potential"
190 call escp_soft_sphere(evdw2,evdw2_14)
193 c Calculate the bond-stretching energy
197 C Calculate the disulfide-bridge and other energy and the contributions
198 C from other distance constraints.
199 cd print *,'Calling EHPB'
201 cd print *,'EHPB exitted succesfully.'
203 C Calculate the virtual-bond-angle energy.
205 if (wang.gt.0d0) then
210 c print *,"Processor",myrank," computed UB"
212 C Calculate the SC local energy.
215 c print *,"Processor",myrank," computed USC"
217 C Calculate the virtual-bond torsional energy.
219 cd print *,'nterm=',nterm
221 call etor(etors,edihcnstr)
226 c print *,"Processor",myrank," computed Utor"
228 C 6/23/01 Calculate double-torsional energy
230 if (wtor_d.gt.0) then
235 c print *,"Processor",myrank," computed Utord"
237 C 21/5/07 Calculate local sicdechain correlation energy
239 if (wsccor.gt.0.0d0) then
240 call eback_sc_corr(esccor)
244 c print *,"Processor",myrank," computed Usccorr"
246 C 12/1/95 Multi-body terms
250 if ((wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0
251 & .or. wturn6.gt.0.0d0) .and. ipot.lt.6) then
252 call multibody_eello(ecorr,ecorr5,ecorr6,eturn6,n_corr,n_corr1)
253 cd write(2,*)'multibody_eello n_corr=',n_corr,' n_corr1=',n_corr1,
254 cd &" ecorr",ecorr," ecorr5",ecorr5," ecorr6",ecorr6," eturn6",eturn6
261 if ((wcorr4.eq.0.0d0 .and. wcorr.gt.0.0d0) .and. ipot.lt.6) then
262 call multibody_hb(ecorr,ecorr5,ecorr6,n_corr,n_corr1)
263 cd write (iout,*) "multibody_hb ecorr",ecorr
265 c print *,"Processor",myrank," computed Ucorr"
267 C If performing constraint dynamics, call the constraint energy
268 C after the equilibration time
269 if(usampl.and.totT.gt.eq_time) then
278 time_enecalc=time_enecalc+MPI_Wtime()-time00
280 time_enecalc=time_enecalc+tcpu()-time00
283 c print *,"Processor",myrank," computed Uconstr"
296 energia(2)=evdw2-evdw2_14
313 energia(8)=eello_turn3
314 energia(9)=eello_turn4
321 energia(19)=edihcnstr
323 energia(20)=Uconst+Uconst_back
327 c print *," Processor",myrank," calls SUM_ENERGY"
328 call sum_energy(energia,.true.)
329 c print *," Processor",myrank," left SUM_ENERGY"
332 time_sumene=time_sumene+MPI_Wtime()-time00
334 time_sumene=time_sumene+tcpu()-time00
339 c-------------------------------------------------------------------------------
340 subroutine sum_energy(energia,reduce)
341 implicit real*8 (a-h,o-z)
346 cMS$ATTRIBUTES C :: proc_proc
352 include 'COMMON.SETUP'
353 include 'COMMON.IOUNITS'
354 double precision energia(0:n_ene),enebuff(0:n_ene+1)
355 include 'COMMON.FFIELD'
356 include 'COMMON.DERIV'
357 include 'COMMON.INTERACT'
358 include 'COMMON.SBRIDGE'
359 include 'COMMON.CHAIN'
361 include 'COMMON.CONTROL'
362 include 'COMMON.TIME1'
365 if (nfgtasks.gt.1 .and. reduce) then
367 write (iout,*) "energies before REDUCE"
368 call enerprint(energia)
372 enebuff(i)=energia(i)
375 call MPI_Barrier(FG_COMM,IERR)
376 time_barrier_e=time_barrier_e+MPI_Wtime()-time00
378 call MPI_Reduce(enebuff(0),energia(0),n_ene+1,
379 & MPI_DOUBLE_PRECISION,MPI_SUM,king,FG_COMM,IERR)
381 write (iout,*) "energies after REDUCE"
382 call enerprint(energia)
385 time_Reduce=time_Reduce+MPI_Wtime()-time00
387 if (fg_rank.eq.0) then
390 evdw=energia(22)+wsct*energia(23)
395 evdw2=energia(2)+energia(18)
411 eello_turn3=energia(8)
412 eello_turn4=energia(9)
419 edihcnstr=energia(19)
424 etot=wsc*evdw+wscp*evdw2+welec*ees+wvdwpp*evdw1
425 & +wang*ebe+wtor*etors+wscloc*escloc
426 & +wstrain*ehpb+nss*ebr+wcorr*ecorr+wcorr5*ecorr5
427 & +wcorr6*ecorr6+wturn4*eello_turn4+wturn3*eello_turn3
428 & +wturn6*eturn6+wel_loc*eel_loc+edihcnstr+wtor_d*etors_d
429 & +wbond*estr+Uconst+wsccor*esccor
431 etot=wsc*evdw+wscp*evdw2+welec*(ees+evdw1)
432 & +wang*ebe+wtor*etors+wscloc*escloc
433 & +wstrain*ehpb+nss*ebr+wcorr*ecorr+wcorr5*ecorr5
434 & +wcorr6*ecorr6+wturn4*eello_turn4+wturn3*eello_turn3
435 & +wturn6*eturn6+wel_loc*eel_loc+edihcnstr+wtor_d*etors_d
436 & +wbond*estr+Uconst+wsccor*esccor
442 if (isnan(etot).ne.0) energia(0)=1.0d+99
444 if (isnan(etot)) energia(0)=1.0d+99
449 idumm=proc_proc(etot,i)
451 call proc_proc(etot,i)
453 if(i.eq.1)energia(0)=1.0d+99
460 c-------------------------------------------------------------------------------
461 subroutine sum_gradient
462 implicit real*8 (a-h,o-z)
467 cMS$ATTRIBUTES C :: proc_proc
473 double precision gradbufc(3,maxres),gradbufx(3,maxres),
474 & glocbuf(4*maxres),gradbufc_sum(3,maxres),gloc_scbuf(3,maxres)
475 include 'COMMON.SETUP'
476 include 'COMMON.IOUNITS'
477 include 'COMMON.FFIELD'
478 include 'COMMON.DERIV'
479 include 'COMMON.INTERACT'
480 include 'COMMON.SBRIDGE'
481 include 'COMMON.CHAIN'
483 include 'COMMON.CONTROL'
484 include 'COMMON.TIME1'
485 include 'COMMON.MAXGRAD'
486 include 'COMMON.SCCOR'
495 write (iout,*) "sum_gradient gvdwc, gvdwx"
497 write (iout,'(i3,3f10.5,5x,3f10.5,5x,3f10.5,5x,3f10.5)')
498 & i,(gvdwx(j,i),j=1,3),(gvdwcT(j,i),j=1,3),(gvdwc(j,i),j=1,3),
499 & (gvdwcT(j,i),j=1,3)
504 C FG slaves call the following matching MPI_Bcast in ERGASTULUM
505 if (nfgtasks.gt.1 .and. fg_rank.eq.0)
506 & call MPI_Bcast(1,1,MPI_INTEGER,king,FG_COMM,IERROR)
509 C 9/29/08 AL Transform parts of gradients in site coordinates to the gradient
510 C in virtual-bond-vector coordinates
513 c write (iout,*) "gel_loc gel_loc_long and gel_loc_loc"
515 c write (iout,'(i5,3f10.5,2x,3f10.5,2x,f10.5)')
516 c & i,(gel_loc(j,i),j=1,3),(gel_loc_long(j,i),j=1,3),gel_loc_loc(i)
518 c write (iout,*) "gel_loc_tur3 gel_loc_turn4"
520 c write (iout,'(i5,3f10.5,2x,f10.5)')
521 c & i,(gcorr4_turn(j,i),j=1,3),gel_loc_turn4(i)
523 write (iout,*) "gradcorr5 gradcorr5_long gradcorr5_loc"
525 write (iout,'(i3,3f10.5,5x,3f10.5,5x,f10.5)')
526 & i,(gradcorr5(j,i),j=1,3),(gradcorr5_long(j,i),j=1,3),
535 gradbufc(j,i)=wsc*gvdwc(j,i)+wsc*wscT*gvdwcT(j,i)+
536 & wscp*(gvdwc_scp(j,i)+gvdwc_scpp(j,i))+
537 & welec*gelc_long(j,i)+wvdwpp*gvdwpp(j,i)+
538 & wel_loc*gel_loc_long(j,i)+
539 & wcorr*gradcorr_long(j,i)+
540 & wcorr5*gradcorr5_long(j,i)+
541 & wcorr6*gradcorr6_long(j,i)+
542 & wturn6*gcorr6_turn_long(j,i)+
549 gradbufc(j,i)=wsc*gvdwc(j,i)+
550 & wscp*(gvdwc_scp(j,i)+gvdwc_scpp(j,i))+
551 & welec*gelc_long(j,i)+wvdwpp*gvdwpp(j,i)+
552 & wel_loc*gel_loc_long(j,i)+
553 & wcorr*gradcorr_long(j,i)+
554 & wcorr5*gradcorr5_long(j,i)+
555 & wcorr6*gradcorr6_long(j,i)+
556 & wturn6*gcorr6_turn_long(j,i)+
564 gradbufc(j,i)=wsc*gvdwc(j,i)+
565 & wscp*(gvdwc_scp(j,i)+gvdwc_scpp(j,i))+
566 & welec*gelc_long(j,i)+
568 & wel_loc*gel_loc_long(j,i)+
569 & wcorr*gradcorr_long(j,i)+
570 & wcorr5*gradcorr5_long(j,i)+
571 & wcorr6*gradcorr6_long(j,i)+
572 & wturn6*gcorr6_turn_long(j,i)+
578 if (nfgtasks.gt.1) then
581 write (iout,*) "gradbufc before allreduce"
583 write (iout,'(i3,3f10.5)') i,(gradbufc(j,i),j=1,3)
589 gradbufc_sum(j,i)=gradbufc(j,i)
592 c call MPI_AllReduce(gradbufc(1,1),gradbufc_sum(1,1),3*nres,
593 c & MPI_DOUBLE_PRECISION,MPI_SUM,FG_COMM,IERR)
594 c time_reduce=time_reduce+MPI_Wtime()-time00
596 c write (iout,*) "gradbufc_sum after allreduce"
598 c write (iout,'(i3,3f10.5)') i,(gradbufc_sum(j,i),j=1,3)
603 c time_allreduce=time_allreduce+MPI_Wtime()-time00
611 write (iout,*) "igrad_start",igrad_start," igrad_end",igrad_end
612 write (iout,*) (i," jgrad_start",jgrad_start(i),
613 & " jgrad_end ",jgrad_end(i),
614 & i=igrad_start,igrad_end)
617 c Obsolete and inefficient code; we can make the effort O(n) and, therefore,
618 c do not parallelize this part.
620 c do i=igrad_start,igrad_end
621 c do j=jgrad_start(i),jgrad_end(i)
623 c gradbufc(k,i)=gradbufc(k,i)+gradbufc_sum(k,j)
628 gradbufc(j,nres-1)=gradbufc_sum(j,nres)
632 gradbufc(j,i)=gradbufc(j,i+1)+gradbufc_sum(j,i+1)
636 write (iout,*) "gradbufc after summing"
638 write (iout,'(i3,3f10.5)') i,(gradbufc(j,i),j=1,3)
645 write (iout,*) "gradbufc"
647 write (iout,'(i3,3f10.5)') i,(gradbufc(j,i),j=1,3)
653 gradbufc_sum(j,i)=gradbufc(j,i)
658 gradbufc(j,nres-1)=gradbufc_sum(j,nres)
662 gradbufc(j,i)=gradbufc(j,i+1)+gradbufc_sum(j,i+1)
667 c gradbufc(k,i)=0.0d0
671 c gradbufc(k,i)=gradbufc(k,i)+gradbufc(k,j)
676 write (iout,*) "gradbufc after summing"
678 write (iout,'(i3,3f10.5)') i,(gradbufc(j,i),j=1,3)
686 gradbufc(k,nres)=0.0d0
691 gradc(j,i,icg)=gradbufc(j,i)+welec*gelc(j,i)+
692 & wel_loc*gel_loc(j,i)+
693 & 0.5d0*(wscp*gvdwc_scpp(j,i)+
694 & welec*gelc_long(j,i)+wvdwpp*gvdwpp(j,i)+
695 & wel_loc*gel_loc_long(j,i)+
696 & wcorr*gradcorr_long(j,i)+
697 & wcorr5*gradcorr5_long(j,i)+
698 & wcorr6*gradcorr6_long(j,i)+
699 & wturn6*gcorr6_turn_long(j,i))+
701 & wcorr*gradcorr(j,i)+
702 & wturn3*gcorr3_turn(j,i)+
703 & wturn4*gcorr4_turn(j,i)+
704 & wcorr5*gradcorr5(j,i)+
705 & wcorr6*gradcorr6(j,i)+
706 & wturn6*gcorr6_turn(j,i)+
707 & wsccor*gsccorc(j,i)
708 & +wscloc*gscloc(j,i)
710 gradc(j,i,icg)=gradbufc(j,i)+welec*gelc(j,i)+
711 & wel_loc*gel_loc(j,i)+
712 & 0.5d0*(wscp*gvdwc_scpp(j,i)+
713 & welec*gelc_long(j,i)+
714 & wel_loc*gel_loc_long(j,i)+
715 & wcorr*gcorr_long(j,i)+
716 & wcorr5*gradcorr5_long(j,i)+
717 & wcorr6*gradcorr6_long(j,i)+
718 & wturn6*gcorr6_turn_long(j,i))+
720 & wcorr*gradcorr(j,i)+
721 & wturn3*gcorr3_turn(j,i)+
722 & wturn4*gcorr4_turn(j,i)+
723 & wcorr5*gradcorr5(j,i)+
724 & wcorr6*gradcorr6(j,i)+
725 & wturn6*gcorr6_turn(j,i)+
726 & wsccor*gsccorc(j,i)
727 & +wscloc*gscloc(j,i)
730 gradx(j,i,icg)=wsc*gvdwx(j,i)+wsc*wscT*gvdwxT(j,i)+
731 & wscp*gradx_scp(j,i)+
733 & wstrain*ghpbx(j,i)+wcorr*gradxorr(j,i)+
734 & wsccor*gsccorx(j,i)
735 & +wscloc*gsclocx(j,i)
737 gradx(j,i,icg)=wsc*gvdwx(j,i)+wscp*gradx_scp(j,i)+
739 & wstrain*ghpbx(j,i)+wcorr*gradxorr(j,i)+
740 & wsccor*gsccorx(j,i)
741 & +wscloc*gsclocx(j,i)
746 write (iout,*) "gloc before adding corr"
748 write (iout,*) i,gloc(i,icg)
752 gloc(i,icg)=gloc(i,icg)+wcorr*gcorr_loc(i)
753 & +wcorr5*g_corr5_loc(i)
754 & +wcorr6*g_corr6_loc(i)
755 & +wturn4*gel_loc_turn4(i)
756 & +wturn3*gel_loc_turn3(i)
757 & +wturn6*gel_loc_turn6(i)
758 & +wel_loc*gel_loc_loc(i)
761 write (iout,*) "gloc after adding corr"
763 write (iout,*) i,gloc(i,icg)
767 if (nfgtasks.gt.1) then
770 gradbufc(j,i)=gradc(j,i,icg)
771 gradbufx(j,i)=gradx(j,i,icg)
775 glocbuf(i)=gloc(i,icg)
779 write (iout,*) "gloc_sc before reduce"
782 write (iout,*) i,j,gloc_sc(j,i,icg)
789 gloc_scbuf(j,i)=gloc_sc(j,i,icg)
793 call MPI_Barrier(FG_COMM,IERR)
794 time_barrier_g=time_barrier_g+MPI_Wtime()-time00
796 call MPI_Reduce(gradbufc(1,1),gradc(1,1,icg),3*nres,
797 & MPI_DOUBLE_PRECISION,MPI_SUM,king,FG_COMM,IERR)
798 call MPI_Reduce(gradbufx(1,1),gradx(1,1,icg),3*nres,
799 & MPI_DOUBLE_PRECISION,MPI_SUM,king,FG_COMM,IERR)
800 call MPI_Reduce(glocbuf(1),gloc(1,icg),4*nres,
801 & MPI_DOUBLE_PRECISION,MPI_SUM,king,FG_COMM,IERR)
802 call MPI_Reduce(gloc_scbuf(1,1),gloc_sc(1,1,icg),3*nres,
803 & MPI_DOUBLE_PRECISION,MPI_SUM,king,FG_COMM,IERR)
804 time_reduce=time_reduce+MPI_Wtime()-time00
807 write (iout,*) "gloc_sc after reduce"
810 write (iout,*) i,j,gloc_sc(j,i,icg)
816 write (iout,*) "gloc after reduce"
818 write (iout,*) i,gloc(i,icg)
823 if (gnorm_check) then
825 c Compute the maximum elements of the gradient
835 gcorr3_turn_max=0.0d0
836 gcorr4_turn_max=0.0d0
839 gcorr6_turn_max=0.0d0
849 gvdwc_norm=dsqrt(scalar(gvdwc(1,i),gvdwc(1,i)))
850 if (gvdwc_norm.gt.gvdwc_max) gvdwc_max=gvdwc_norm
852 gvdwc_norm=dsqrt(scalar(gvdwcT(1,i),gvdwcT(1,i)))
853 if (gvdwc_norm.gt.gvdwc_max) gvdwc_max=gvdwc_norm
855 gvdwc_scp_norm=dsqrt(scalar(gvdwc_scp(1,i),gvdwc_scp(1,i)))
856 if (gvdwc_scp_norm.gt.gvdwc_scp_max)
857 & gvdwc_scp_max=gvdwc_scp_norm
858 gelc_norm=dsqrt(scalar(gelc(1,i),gelc(1,i)))
859 if (gelc_norm.gt.gelc_max) gelc_max=gelc_norm
860 gvdwpp_norm=dsqrt(scalar(gvdwpp(1,i),gvdwpp(1,i)))
861 if (gvdwpp_norm.gt.gvdwpp_max) gvdwpp_max=gvdwpp_norm
862 gradb_norm=dsqrt(scalar(gradb(1,i),gradb(1,i)))
863 if (gradb_norm.gt.gradb_max) gradb_max=gradb_norm
864 ghpbc_norm=dsqrt(scalar(ghpbc(1,i),ghpbc(1,i)))
865 if (ghpbc_norm.gt.ghpbc_max) ghpbc_max=ghpbc_norm
866 gradcorr_norm=dsqrt(scalar(gradcorr(1,i),gradcorr(1,i)))
867 if (gradcorr_norm.gt.gradcorr_max) gradcorr_max=gradcorr_norm
868 gel_loc_norm=dsqrt(scalar(gel_loc(1,i),gel_loc(1,i)))
869 if (gel_loc_norm.gt.gel_loc_max) gel_loc_max=gel_loc_norm
870 gcorr3_turn_norm=dsqrt(scalar(gcorr3_turn(1,i),
872 if (gcorr3_turn_norm.gt.gcorr3_turn_max)
873 & gcorr3_turn_max=gcorr3_turn_norm
874 gcorr4_turn_norm=dsqrt(scalar(gcorr4_turn(1,i),
876 if (gcorr4_turn_norm.gt.gcorr4_turn_max)
877 & gcorr4_turn_max=gcorr4_turn_norm
878 gradcorr5_norm=dsqrt(scalar(gradcorr5(1,i),gradcorr5(1,i)))
879 if (gradcorr5_norm.gt.gradcorr5_max)
880 & gradcorr5_max=gradcorr5_norm
881 gradcorr6_norm=dsqrt(scalar(gradcorr6(1,i),gradcorr6(1,i)))
882 if (gradcorr6_norm.gt.gradcorr6_max) gcorr6_max=gradcorr6_norm
883 gcorr6_turn_norm=dsqrt(scalar(gcorr6_turn(1,i),
885 if (gcorr6_turn_norm.gt.gcorr6_turn_max)
886 & gcorr6_turn_max=gcorr6_turn_norm
887 gsccorr_norm=dsqrt(scalar(gsccorc(1,i),gsccorc(1,i)))
888 if (gsccorr_norm.gt.gsccorr_max) gsccorr_max=gsccorr_norm
889 gscloc_norm=dsqrt(scalar(gscloc(1,i),gscloc(1,i)))
890 if (gscloc_norm.gt.gscloc_max) gscloc_max=gscloc_norm
891 gvdwx_norm=dsqrt(scalar(gvdwx(1,i),gvdwx(1,i)))
892 if (gvdwx_norm.gt.gvdwx_max) gvdwx_max=gvdwx_norm
894 gvdwx_norm=dsqrt(scalar(gvdwxT(1,i),gvdwxT(1,i)))
895 if (gvdwx_norm.gt.gvdwx_max) gvdwx_max=gvdwx_norm
897 gradx_scp_norm=dsqrt(scalar(gradx_scp(1,i),gradx_scp(1,i)))
898 if (gradx_scp_norm.gt.gradx_scp_max)
899 & gradx_scp_max=gradx_scp_norm
900 ghpbx_norm=dsqrt(scalar(ghpbx(1,i),ghpbx(1,i)))
901 if (ghpbx_norm.gt.ghpbx_max) ghpbx_max=ghpbx_norm
902 gradxorr_norm=dsqrt(scalar(gradxorr(1,i),gradxorr(1,i)))
903 if (gradxorr_norm.gt.gradxorr_max) gradxorr_max=gradxorr_norm
904 gsccorrx_norm=dsqrt(scalar(gsccorx(1,i),gsccorx(1,i)))
905 if (gsccorrx_norm.gt.gsccorrx_max) gsccorrx_max=gsccorrx_norm
906 gsclocx_norm=dsqrt(scalar(gsclocx(1,i),gsclocx(1,i)))
907 if (gsclocx_norm.gt.gsclocx_max) gsclocx_max=gsclocx_norm
911 open(istat,file=statname,position="append")
913 open(istat,file=statname,access="append")
915 write (istat,'(1h#,21f10.2)') gvdwc_max,gvdwc_scp_max,
916 & gelc_max,gvdwpp_max,gradb_max,ghpbc_max,
917 & gradcorr_max,gel_loc_max,gcorr3_turn_max,gcorr4_turn_max,
918 & gradcorr5_max,gradcorr6_max,gcorr6_turn_max,gsccorc_max,
919 & gscloc_max,gvdwx_max,gradx_scp_max,ghpbx_max,gradxorr_max,
920 & gsccorx_max,gsclocx_max
922 if (gvdwc_max.gt.1.0d4) then
923 write (iout,*) "gvdwc gvdwx gradb gradbx"
925 write(iout,'(i5,4(3f10.2,5x))') i,(gvdwc(j,i),gvdwx(j,i),
926 & gradb(j,i),gradbx(j,i),j=1,3)
928 call pdbout(0.0d0,'cipiszcze',iout)
934 write (iout,*) "gradc gradx gloc"
936 write (iout,'(i5,3f10.5,5x,3f10.5,5x,f10.5)')
937 & i,(gradc(j,i,icg),j=1,3),(gradx(j,i,icg),j=1,3),gloc(i,icg)
942 time_sumgradient=time_sumgradient+MPI_Wtime()-time01
944 time_sumgradient=time_sumgradient+tcpu()-time01
949 c-------------------------------------------------------------------------------
950 subroutine rescale_weights(t_bath)
951 implicit real*8 (a-h,o-z)
953 include 'COMMON.IOUNITS'
954 include 'COMMON.FFIELD'
955 include 'COMMON.SBRIDGE'
956 double precision kfac /2.4d0/
957 double precision x,x2,x3,x4,x5,licznik /1.12692801104297249644/
959 c facT=2*temp0/(t_bath+temp0)
960 if (rescale_mode.eq.0) then
966 else if (rescale_mode.eq.1) then
967 facT=kfac/(kfac-1.0d0+t_bath/temp0)
968 facT2=kfac**2/(kfac**2-1.0d0+(t_bath/temp0)**2)
969 facT3=kfac**3/(kfac**3-1.0d0+(t_bath/temp0)**3)
970 facT4=kfac**4/(kfac**4-1.0d0+(t_bath/temp0)**4)
971 facT5=kfac**5/(kfac**5-1.0d0+(t_bath/temp0)**5)
972 else if (rescale_mode.eq.2) then
978 facT=licznik/dlog(dexp(x)+dexp(-x))
979 facT2=licznik/dlog(dexp(x2)+dexp(-x2))
980 facT3=licznik/dlog(dexp(x3)+dexp(-x3))
981 facT4=licznik/dlog(dexp(x4)+dexp(-x4))
982 facT5=licznik/dlog(dexp(x5)+dexp(-x5))
984 write (iout,*) "Wrong RESCALE_MODE",rescale_mode
985 write (*,*) "Wrong RESCALE_MODE",rescale_mode
987 call MPI_Finalize(MPI_COMM_WORLD,IERROR)
991 welec=weights(3)*fact
992 wcorr=weights(4)*fact3
993 wcorr5=weights(5)*fact4
994 wcorr6=weights(6)*fact5
995 wel_loc=weights(7)*fact2
996 wturn3=weights(8)*fact2
997 wturn4=weights(9)*fact3
998 wturn6=weights(10)*fact5
999 wtor=weights(13)*fact
1000 wtor_d=weights(14)*fact2
1001 wsccor=weights(21)*fact
1004 wsct=(320.0+80.0*dtanh((t_bath-320.0)/80.0))/320.0
1008 C------------------------------------------------------------------------
1009 subroutine enerprint(energia)
1010 implicit real*8 (a-h,o-z)
1011 include 'DIMENSIONS'
1012 include 'COMMON.IOUNITS'
1013 include 'COMMON.FFIELD'
1014 include 'COMMON.SBRIDGE'
1016 double precision energia(0:n_ene)
1019 evdw=energia(22)+wsct*energia(23)
1025 evdw2=energia(2)+energia(18)
1037 eello_turn3=energia(8)
1038 eello_turn4=energia(9)
1039 eello_turn6=energia(10)
1045 edihcnstr=energia(19)
1050 write (iout,10) evdw,wsc,evdw2,wscp,ees,welec,evdw1,wvdwpp,
1051 & estr,wbond,ebe,wang,
1052 & escloc,wscloc,etors,wtor,etors_d,wtor_d,ehpb,wstrain,
1054 & ecorr5,wcorr5,ecorr6,wcorr6,eel_loc,wel_loc,eello_turn3,wturn3,
1055 & eello_turn4,wturn4,eello_turn6,wturn6,esccor,wsccor,
1056 & edihcnstr,ebr*nss,
1058 10 format (/'Virtual-chain energies:'//
1059 & 'EVDW= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC-SC)'/
1060 & 'EVDW2= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC-p)'/
1061 & 'EES= ',1pE16.6,' WEIGHT=',1pD16.6,' (p-p)'/
1062 & 'EVDWPP=',1pE16.6,' WEIGHT=',1pD16.6,' (p-p VDW)'/
1063 & 'ESTR= ',1pE16.6,' WEIGHT=',1pD16.6,' (stretching)'/
1064 & 'EBE= ',1pE16.6,' WEIGHT=',1pD16.6,' (bending)'/
1065 & 'ESC= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC local)'/
1066 & 'ETORS= ',1pE16.6,' WEIGHT=',1pD16.6,' (torsional)'/
1067 & 'ETORSD=',1pE16.6,' WEIGHT=',1pD16.6,' (double torsional)'/
1068 & 'EHBP= ',1pE16.6,' WEIGHT=',1pD16.6,
1069 & ' (SS bridges & dist. cnstr.)'/
1070 & 'ECORR4=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
1071 & 'ECORR5=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
1072 & 'ECORR6=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
1073 & 'EELLO= ',1pE16.6,' WEIGHT=',1pD16.6,' (electrostatic-local)'/
1074 & 'ETURN3=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 3rd order)'/
1075 & 'ETURN4=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 4th order)'/
1076 & 'ETURN6=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 6th order)'/
1077 & 'ESCCOR=',1pE16.6,' WEIGHT=',1pD16.6,' (backbone-rotamer corr)'/
1078 & 'EDIHC= ',1pE16.6,' (dihedral angle constraints)'/
1079 & 'ESS= ',1pE16.6,' (disulfide-bridge intrinsic energy)'/
1080 & 'UCONST= ',1pE16.6,' (Constraint energy)'/
1081 & 'ETOT= ',1pE16.6,' (total)')
1083 write (iout,10) evdw,wsc,evdw2,wscp,ees,welec,
1084 & estr,wbond,ebe,wang,
1085 & escloc,wscloc,etors,wtor,etors_d,wtor_d,ehpb,wstrain,
1087 & ecorr5,wcorr5,ecorr6,wcorr6,eel_loc,wel_loc,eello_turn3,wturn3,
1088 & eello_turn4,wturn4,eello_turn6,wturn6,esccor,wsccro,edihcnstr,
1089 & ebr*nss,Uconst,etot
1090 10 format (/'Virtual-chain energies:'//
1091 & 'EVDW= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC-SC)'/
1092 & 'EVDW2= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC-p)'/
1093 & 'EES= ',1pE16.6,' WEIGHT=',1pD16.6,' (p-p)'/
1094 & 'ESTR= ',1pE16.6,' WEIGHT=',1pD16.6,' (stretching)'/
1095 & 'EBE= ',1pE16.6,' WEIGHT=',1pD16.6,' (bending)'/
1096 & 'ESC= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC local)'/
1097 & 'ETORS= ',1pE16.6,' WEIGHT=',1pD16.6,' (torsional)'/
1098 & 'ETORSD=',1pE16.6,' WEIGHT=',1pD16.6,' (double torsional)'/
1099 & 'EHBP= ',1pE16.6,' WEIGHT=',1pD16.6,
1100 & ' (SS bridges & dist. cnstr.)'/
1101 & 'ECORR4=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
1102 & 'ECORR5=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
1103 & 'ECORR6=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
1104 & 'EELLO= ',1pE16.6,' WEIGHT=',1pD16.6,' (electrostatic-local)'/
1105 & 'ETURN3=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 3rd order)'/
1106 & 'ETURN4=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 4th order)'/
1107 & 'ETURN6=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 6th order)'/
1108 & 'ESCCOR=',1pE16.6,' WEIGHT=',1pD16.6,' (backbone-rotamer corr)'/
1109 & 'EDIHC= ',1pE16.6,' (dihedral angle constraints)'/
1110 & 'ESS= ',1pE16.6,' (disulfide-bridge intrinsic energy)'/
1111 & 'UCONST=',1pE16.6,' (Constraint energy)'/
1112 & 'ETOT= ',1pE16.6,' (total)')
1116 C-----------------------------------------------------------------------
1117 subroutine elj(evdw,evdw_p,evdw_m)
1119 C This subroutine calculates the interaction energy of nonbonded side chains
1120 C assuming the LJ potential of interaction.
1122 implicit real*8 (a-h,o-z)
1123 include 'DIMENSIONS'
1124 parameter (accur=1.0d-10)
1125 include 'COMMON.GEO'
1126 include 'COMMON.VAR'
1127 include 'COMMON.LOCAL'
1128 include 'COMMON.CHAIN'
1129 include 'COMMON.DERIV'
1130 include 'COMMON.INTERACT'
1131 include 'COMMON.TORSION'
1132 include 'COMMON.SBRIDGE'
1133 include 'COMMON.NAMES'
1134 include 'COMMON.IOUNITS'
1135 include 'COMMON.CONTACTS'
1137 c write(iout,*)'Entering ELJ nnt=',nnt,' nct=',nct,' expon=',expon
1139 do i=iatsc_s,iatsc_e
1148 C Calculate SC interaction energy.
1150 do iint=1,nint_gr(i)
1151 cd write (iout,*) 'i=',i,' iint=',iint,' istart=',istart(i,iint),
1152 cd & 'iend=',iend(i,iint)
1153 do j=istart(i,iint),iend(i,iint)
1158 C Change 12/1/95 to calculate four-body interactions
1159 rij=xj*xj+yj*yj+zj*zj
1161 c write (iout,*)'i=',i,' j=',j,' itypi=',itypi,' itypj=',itypj
1162 eps0ij=eps(itypi,itypj)
1164 e1=fac*fac*aa(itypi,itypj)
1165 e2=fac*bb(itypi,itypj)
1167 cd sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
1168 cd epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
1169 cd write (iout,'(2(a3,i3,2x),6(1pd12.4)/2(3(1pd12.4),5x)/)')
1170 cd & restyp(itypi),i,restyp(itypj),j,aa(itypi,itypj),
1171 cd & bb(itypi,itypj),1.0D0/dsqrt(rrij),evdwij,epsi,sigm,
1172 cd & (c(k,i),k=1,3),(c(k,j),k=1,3)
1174 if (bb(itypi,itypj).gt.0) then
1175 evdw_p=evdw_p+evdwij
1177 evdw_m=evdw_m+evdwij
1183 C Calculate the components of the gradient in DC and X
1185 fac=-rrij*(e1+evdwij)
1190 if (bb(itypi,itypj).gt.0.0d0) then
1192 gvdwx(k,i)=gvdwx(k,i)-gg(k)
1193 gvdwx(k,j)=gvdwx(k,j)+gg(k)
1194 gvdwc(k,i)=gvdwc(k,i)-gg(k)
1195 gvdwc(k,j)=gvdwc(k,j)+gg(k)
1199 gvdwxT(k,i)=gvdwxT(k,i)-gg(k)
1200 gvdwxT(k,j)=gvdwxT(k,j)+gg(k)
1201 gvdwcT(k,i)=gvdwcT(k,i)-gg(k)
1202 gvdwcT(k,j)=gvdwcT(k,j)+gg(k)
1207 gvdwx(k,i)=gvdwx(k,i)-gg(k)
1208 gvdwx(k,j)=gvdwx(k,j)+gg(k)
1209 gvdwc(k,i)=gvdwc(k,i)-gg(k)
1210 gvdwc(k,j)=gvdwc(k,j)+gg(k)
1215 cgrad gvdwc(l,k)=gvdwc(l,k)+gg(l)
1219 C 12/1/95, revised on 5/20/97
1221 C Calculate the contact function. The ith column of the array JCONT will
1222 C contain the numbers of atoms that make contacts with the atom I (of numbers
1223 C greater than I). The arrays FACONT and GACONT will contain the values of
1224 C the contact function and its derivative.
1226 C Uncomment next line, if the correlation interactions include EVDW explicitly.
1227 c if (j.gt.i+1 .and. evdwij.le.0.0D0) then
1228 C Uncomment next line, if the correlation interactions are contact function only
1229 if (j.gt.i+1.and. eps0ij.gt.0.0D0) then
1231 sigij=sigma(itypi,itypj)
1232 r0ij=rs0(itypi,itypj)
1234 C Check whether the SC's are not too far to make a contact.
1237 call gcont(rij,rcut,1.0d0,0.2d0*rcut,fcont,fprimcont)
1238 C Add a new contact, if the SC's are close enough, but not too close (r<sigma).
1240 if (fcont.gt.0.0D0) then
1241 C If the SC-SC distance if close to sigma, apply spline.
1242 cAdam call gcont(-rij,-1.03d0*sigij,2.0d0*sigij,1.0d0,
1243 cAdam & fcont1,fprimcont1)
1244 cAdam fcont1=1.0d0-fcont1
1245 cAdam if (fcont1.gt.0.0d0) then
1246 cAdam fprimcont=fprimcont*fcont1+fcont*fprimcont1
1247 cAdam fcont=fcont*fcont1
1249 C Uncomment following 4 lines to have the geometric average of the epsilon0's
1250 cga eps0ij=1.0d0/dsqrt(eps0ij)
1252 cga gg(k)=gg(k)*eps0ij
1254 cga eps0ij=-evdwij*eps0ij
1255 C Uncomment for AL's type of SC correlation interactions.
1256 cadam eps0ij=-evdwij
1257 num_conti=num_conti+1
1258 jcont(num_conti,i)=j
1259 facont(num_conti,i)=fcont*eps0ij
1260 fprimcont=eps0ij*fprimcont/rij
1262 cAdam gacont(1,num_conti,i)=-fprimcont*xj+fcont*gg(1)
1263 cAdam gacont(2,num_conti,i)=-fprimcont*yj+fcont*gg(2)
1264 cAdam gacont(3,num_conti,i)=-fprimcont*zj+fcont*gg(3)
1265 C Uncomment following 3 lines for Skolnick's type of SC correlation.
1266 gacont(1,num_conti,i)=-fprimcont*xj
1267 gacont(2,num_conti,i)=-fprimcont*yj
1268 gacont(3,num_conti,i)=-fprimcont*zj
1269 cd write (iout,'(2i5,2f10.5)') i,j,rij,facont(num_conti,i)
1270 cd write (iout,'(2i3,3f10.5)')
1271 cd & i,j,(gacont(kk,num_conti,i),kk=1,3)
1277 num_cont(i)=num_conti
1281 gvdwc(j,i)=expon*gvdwc(j,i)
1282 gvdwx(j,i)=expon*gvdwx(j,i)
1285 C******************************************************************************
1289 C To save time, the factor of EXPON has been extracted from ALL components
1290 C of GVDWC and GRADX. Remember to multiply them by this factor before further
1293 C******************************************************************************
1296 C-----------------------------------------------------------------------------
1297 subroutine eljk(evdw,evdw_p,evdw_m)
1299 C This subroutine calculates the interaction energy of nonbonded side chains
1300 C assuming the LJK potential of interaction.
1302 implicit real*8 (a-h,o-z)
1303 include 'DIMENSIONS'
1304 include 'COMMON.GEO'
1305 include 'COMMON.VAR'
1306 include 'COMMON.LOCAL'
1307 include 'COMMON.CHAIN'
1308 include 'COMMON.DERIV'
1309 include 'COMMON.INTERACT'
1310 include 'COMMON.IOUNITS'
1311 include 'COMMON.NAMES'
1314 c print *,'Entering ELJK nnt=',nnt,' nct=',nct,' expon=',expon
1316 do i=iatsc_s,iatsc_e
1323 C Calculate SC interaction energy.
1325 do iint=1,nint_gr(i)
1326 do j=istart(i,iint),iend(i,iint)
1331 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
1332 fac_augm=rrij**expon
1333 e_augm=augm(itypi,itypj)*fac_augm
1334 r_inv_ij=dsqrt(rrij)
1336 r_shift_inv=1.0D0/(rij+r0(itypi,itypj)-sigma(itypi,itypj))
1337 fac=r_shift_inv**expon
1338 e1=fac*fac*aa(itypi,itypj)
1339 e2=fac*bb(itypi,itypj)
1341 cd sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
1342 cd epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
1343 cd write (iout,'(2(a3,i3,2x),8(1pd12.4)/2(3(1pd12.4),5x)/)')
1344 cd & restyp(itypi),i,restyp(itypj),j,aa(itypi,itypj),
1345 cd & bb(itypi,itypj),augm(itypi,itypj),epsi,sigm,
1346 cd & sigma(itypi,itypj),1.0D0/dsqrt(rrij),evdwij,
1347 cd & (c(k,i),k=1,3),(c(k,j),k=1,3)
1349 if (bb(itypi,itypj).gt.0) then
1350 evdw_p=evdw_p+evdwij
1352 evdw_m=evdw_m+evdwij
1358 C Calculate the components of the gradient in DC and X
1360 fac=-2.0D0*rrij*e_augm-r_inv_ij*r_shift_inv*(e1+e1+e2)
1365 if (bb(itypi,itypj).gt.0.0d0) then
1367 gvdwx(k,i)=gvdwx(k,i)-gg(k)
1368 gvdwx(k,j)=gvdwx(k,j)+gg(k)
1369 gvdwc(k,i)=gvdwc(k,i)-gg(k)
1370 gvdwc(k,j)=gvdwc(k,j)+gg(k)
1374 gvdwxT(k,i)=gvdwxT(k,i)-gg(k)
1375 gvdwxT(k,j)=gvdwxT(k,j)+gg(k)
1376 gvdwcT(k,i)=gvdwcT(k,i)-gg(k)
1377 gvdwcT(k,j)=gvdwcT(k,j)+gg(k)
1382 gvdwx(k,i)=gvdwx(k,i)-gg(k)
1383 gvdwx(k,j)=gvdwx(k,j)+gg(k)
1384 gvdwc(k,i)=gvdwc(k,i)-gg(k)
1385 gvdwc(k,j)=gvdwc(k,j)+gg(k)
1390 cgrad gvdwc(l,k)=gvdwc(l,k)+gg(l)
1398 gvdwc(j,i)=expon*gvdwc(j,i)
1399 gvdwx(j,i)=expon*gvdwx(j,i)
1404 C-----------------------------------------------------------------------------
1405 subroutine ebp(evdw,evdw_p,evdw_m)
1407 C This subroutine calculates the interaction energy of nonbonded side chains
1408 C assuming the Berne-Pechukas potential of interaction.
1410 implicit real*8 (a-h,o-z)
1411 include 'DIMENSIONS'
1412 include 'COMMON.GEO'
1413 include 'COMMON.VAR'
1414 include 'COMMON.LOCAL'
1415 include 'COMMON.CHAIN'
1416 include 'COMMON.DERIV'
1417 include 'COMMON.NAMES'
1418 include 'COMMON.INTERACT'
1419 include 'COMMON.IOUNITS'
1420 include 'COMMON.CALC'
1421 common /srutu/ icall
1422 c double precision rrsave(maxdim)
1425 c print *,'Entering EBP nnt=',nnt,' nct=',nct,' expon=',expon
1427 c if (icall.eq.0) then
1433 do i=iatsc_s,iatsc_e
1439 dxi=dc_norm(1,nres+i)
1440 dyi=dc_norm(2,nres+i)
1441 dzi=dc_norm(3,nres+i)
1442 c dsci_inv=dsc_inv(itypi)
1443 dsci_inv=vbld_inv(i+nres)
1445 C Calculate SC interaction energy.
1447 do iint=1,nint_gr(i)
1448 do j=istart(i,iint),iend(i,iint)
1451 c dscj_inv=dsc_inv(itypj)
1452 dscj_inv=vbld_inv(j+nres)
1453 chi1=chi(itypi,itypj)
1454 chi2=chi(itypj,itypi)
1461 alf12=0.5D0*(alf1+alf2)
1462 C For diagnostics only!!!
1475 dxj=dc_norm(1,nres+j)
1476 dyj=dc_norm(2,nres+j)
1477 dzj=dc_norm(3,nres+j)
1478 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
1479 cd if (icall.eq.0) then
1485 C Calculate the angle-dependent terms of energy & contributions to derivatives.
1487 C Calculate whole angle-dependent part of epsilon and contributions
1488 C to its derivatives
1489 fac=(rrij*sigsq)**expon2
1490 e1=fac*fac*aa(itypi,itypj)
1491 e2=fac*bb(itypi,itypj)
1492 evdwij=eps1*eps2rt*eps3rt*(e1+e2)
1493 eps2der=evdwij*eps3rt
1494 eps3der=evdwij*eps2rt
1495 evdwij=evdwij*eps2rt*eps3rt
1497 if (bb(itypi,itypj).gt.0) then
1498 evdw_p=evdw_p+evdwij
1500 evdw_m=evdw_m+evdwij
1506 sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
1507 epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
1508 cd write (iout,'(2(a3,i3,2x),15(0pf7.3))')
1509 cd & restyp(itypi),i,restyp(itypj),j,
1510 cd & epsi,sigm,chi1,chi2,chip1,chip2,
1511 cd & eps1,eps2rt**2,eps3rt**2,1.0D0/dsqrt(sigsq),
1512 cd & om1,om2,om12,1.0D0/dsqrt(rrij),
1515 C Calculate gradient components.
1516 e1=e1*eps1*eps2rt**2*eps3rt**2
1517 fac=-expon*(e1+evdwij)
1520 C Calculate radial part of the gradient
1524 C Calculate the angular part of the gradient and sum add the contributions
1525 C to the appropriate components of the Cartesian gradient.
1527 if (bb(itypi,itypj).gt.0) then
1541 C-----------------------------------------------------------------------------
1542 subroutine egb(evdw,evdw_p,evdw_m)
1544 C This subroutine calculates the interaction energy of nonbonded side chains
1545 C assuming the Gay-Berne potential of interaction.
1547 implicit real*8 (a-h,o-z)
1548 include 'DIMENSIONS'
1549 include 'COMMON.GEO'
1550 include 'COMMON.VAR'
1551 include 'COMMON.LOCAL'
1552 include 'COMMON.CHAIN'
1553 include 'COMMON.DERIV'
1554 include 'COMMON.NAMES'
1555 include 'COMMON.INTERACT'
1556 include 'COMMON.IOUNITS'
1557 include 'COMMON.CALC'
1558 include 'COMMON.CONTROL'
1561 ccccc energy_dec=.false.
1562 c print *,'Entering EGB nnt=',nnt,' nct=',nct,' expon=',expon
1567 c if (icall.eq.0) lprn=.false.
1569 do i=iatsc_s,iatsc_e
1575 dxi=dc_norm(1,nres+i)
1576 dyi=dc_norm(2,nres+i)
1577 dzi=dc_norm(3,nres+i)
1578 c dsci_inv=dsc_inv(itypi)
1579 dsci_inv=vbld_inv(i+nres)
1580 c write (iout,*) "i",i,dsc_inv(itypi),dsci_inv,1.0d0/vbld(i+nres)
1581 c write (iout,*) "dcnori",dxi*dxi+dyi*dyi+dzi*dzi
1583 C Calculate SC interaction energy.
1585 do iint=1,nint_gr(i)
1586 do j=istart(i,iint),iend(i,iint)
1589 c dscj_inv=dsc_inv(itypj)
1590 dscj_inv=vbld_inv(j+nres)
1591 c write (iout,*) "j",j,dsc_inv(itypj),dscj_inv,
1592 c & 1.0d0/vbld(j+nres)
1593 c write (iout,*) "i",i," j", j," itype",itype(i),itype(j)
1594 sig0ij=sigma(itypi,itypj)
1595 chi1=chi(itypi,itypj)
1596 chi2=chi(itypj,itypi)
1603 alf12=0.5D0*(alf1+alf2)
1604 C For diagnostics only!!!
1617 dxj=dc_norm(1,nres+j)
1618 dyj=dc_norm(2,nres+j)
1619 dzj=dc_norm(3,nres+j)
1620 c write (iout,*) "dcnorj",dxi*dxi+dyi*dyi+dzi*dzi
1621 c write (iout,*) "j",j," dc_norm",
1622 c & dc_norm(1,nres+j),dc_norm(2,nres+j),dc_norm(3,nres+j)
1623 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
1625 C Calculate angle-dependent terms of energy and contributions to their
1629 sig=sig0ij*dsqrt(sigsq)
1630 rij_shift=1.0D0/rij-sig+sig0ij
1631 c for diagnostics; uncomment
1632 c rij_shift=1.2*sig0ij
1633 C I hate to put IF's in the loops, but here don't have another choice!!!!
1634 if (rij_shift.le.0.0D0) then
1636 cd write (iout,'(2(a3,i3,2x),17(0pf7.3))')
1637 cd & restyp(itypi),i,restyp(itypj),j,
1638 cd & rij_shift,1.0D0/rij,sig,sig0ij,sigsq,1-dsqrt(sigsq)
1642 c---------------------------------------------------------------
1643 rij_shift=1.0D0/rij_shift
1644 fac=rij_shift**expon
1645 e1=fac*fac*aa(itypi,itypj)
1646 e2=fac*bb(itypi,itypj)
1647 evdwij=eps1*eps2rt*eps3rt*(e1+e2)
1648 eps2der=evdwij*eps3rt
1649 eps3der=evdwij*eps2rt
1650 c write (iout,*) "sigsq",sigsq," sig",sig," eps2rt",eps2rt,
1651 c & " eps3rt",eps3rt," eps1",eps1," e1",e1," e2",e2
1652 evdwij=evdwij*eps2rt*eps3rt
1654 if (bb(itypi,itypj).gt.0) then
1655 evdw_p=evdw_p+evdwij
1657 evdw_m=evdw_m+evdwij
1663 sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
1664 epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
1665 write (iout,'(2(a3,i3,2x),17(0pf7.3))')
1666 & restyp(itypi),i,restyp(itypj),j,
1667 & epsi,sigm,chi1,chi2,chip1,chip2,
1668 & eps1,eps2rt**2,eps3rt**2,sig,sig0ij,
1669 & om1,om2,om12,1.0D0/rij,1.0D0/rij_shift,
1673 if (energy_dec) write (iout,'(a6,2i5,0pf7.3)')
1676 C Calculate gradient components.
1677 e1=e1*eps1*eps2rt**2*eps3rt**2
1678 fac=-expon*(e1+evdwij)*rij_shift
1682 C Calculate the radial part of the gradient
1686 C Calculate angular part of the gradient.
1688 if (bb(itypi,itypj).gt.0) then
1699 c write (iout,*) "Number of loop steps in EGB:",ind
1700 cccc energy_dec=.false.
1703 C-----------------------------------------------------------------------------
1704 subroutine egbv(evdw,evdw_p,evdw_m)
1706 C This subroutine calculates the interaction energy of nonbonded side chains
1707 C assuming the Gay-Berne-Vorobjev potential of interaction.
1709 implicit real*8 (a-h,o-z)
1710 include 'DIMENSIONS'
1711 include 'COMMON.GEO'
1712 include 'COMMON.VAR'
1713 include 'COMMON.LOCAL'
1714 include 'COMMON.CHAIN'
1715 include 'COMMON.DERIV'
1716 include 'COMMON.NAMES'
1717 include 'COMMON.INTERACT'
1718 include 'COMMON.IOUNITS'
1719 include 'COMMON.CALC'
1720 common /srutu/ icall
1723 c print *,'Entering EGB nnt=',nnt,' nct=',nct,' expon=',expon
1726 c if (icall.eq.0) lprn=.true.
1728 do i=iatsc_s,iatsc_e
1734 dxi=dc_norm(1,nres+i)
1735 dyi=dc_norm(2,nres+i)
1736 dzi=dc_norm(3,nres+i)
1737 c dsci_inv=dsc_inv(itypi)
1738 dsci_inv=vbld_inv(i+nres)
1740 C Calculate SC interaction energy.
1742 do iint=1,nint_gr(i)
1743 do j=istart(i,iint),iend(i,iint)
1746 c dscj_inv=dsc_inv(itypj)
1747 dscj_inv=vbld_inv(j+nres)
1748 sig0ij=sigma(itypi,itypj)
1749 r0ij=r0(itypi,itypj)
1750 chi1=chi(itypi,itypj)
1751 chi2=chi(itypj,itypi)
1758 alf12=0.5D0*(alf1+alf2)
1759 C For diagnostics only!!!
1772 dxj=dc_norm(1,nres+j)
1773 dyj=dc_norm(2,nres+j)
1774 dzj=dc_norm(3,nres+j)
1775 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
1777 C Calculate angle-dependent terms of energy and contributions to their
1781 sig=sig0ij*dsqrt(sigsq)
1782 rij_shift=1.0D0/rij-sig+r0ij
1783 C I hate to put IF's in the loops, but here don't have another choice!!!!
1784 if (rij_shift.le.0.0D0) then
1789 c---------------------------------------------------------------
1790 rij_shift=1.0D0/rij_shift
1791 fac=rij_shift**expon
1792 e1=fac*fac*aa(itypi,itypj)
1793 e2=fac*bb(itypi,itypj)
1794 evdwij=eps1*eps2rt*eps3rt*(e1+e2)
1795 eps2der=evdwij*eps3rt
1796 eps3der=evdwij*eps2rt
1797 fac_augm=rrij**expon
1798 e_augm=augm(itypi,itypj)*fac_augm
1799 evdwij=evdwij*eps2rt*eps3rt
1801 if (bb(itypi,itypj).gt.0) then
1802 evdw_p=evdw_p+evdwij+e_augm
1804 evdw_m=evdw_m+evdwij+e_augm
1807 evdw=evdw+evdwij+e_augm
1810 sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
1811 epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
1812 write (iout,'(2(a3,i3,2x),17(0pf7.3))')
1813 & restyp(itypi),i,restyp(itypj),j,
1814 & epsi,sigm,sig,(augm(itypi,itypj)/epsi)**(1.0D0/12.0D0),
1815 & chi1,chi2,chip1,chip2,
1816 & eps1,eps2rt**2,eps3rt**2,
1817 & om1,om2,om12,1.0D0/rij,1.0D0/rij_shift,
1820 C Calculate gradient components.
1821 e1=e1*eps1*eps2rt**2*eps3rt**2
1822 fac=-expon*(e1+evdwij)*rij_shift
1824 fac=rij*fac-2*expon*rrij*e_augm
1825 C Calculate the radial part of the gradient
1829 C Calculate angular part of the gradient.
1831 if (bb(itypi,itypj).gt.0) then
1843 C-----------------------------------------------------------------------------
1844 subroutine sc_angular
1845 C Calculate eps1,eps2,eps3,sigma, and parts of their derivatives in om1,om2,
1846 C om12. Called by ebp, egb, and egbv.
1848 include 'COMMON.CALC'
1849 include 'COMMON.IOUNITS'
1853 om1=dxi*erij(1)+dyi*erij(2)+dzi*erij(3)
1854 om2=dxj*erij(1)+dyj*erij(2)+dzj*erij(3)
1855 om12=dxi*dxj+dyi*dyj+dzi*dzj
1857 C Calculate eps1(om12) and its derivative in om12
1858 faceps1=1.0D0-om12*chiom12
1859 faceps1_inv=1.0D0/faceps1
1860 eps1=dsqrt(faceps1_inv)
1861 C Following variable is eps1*deps1/dom12
1862 eps1_om12=faceps1_inv*chiom12
1867 c write (iout,*) "om12",om12," eps1",eps1
1868 C Calculate sigma(om1,om2,om12) and the derivatives of sigma**2 in om1,om2,
1873 facsig=om1*chiom1+om2*chiom2-2.0D0*om1om2*chiom12
1874 sigsq=1.0D0-facsig*faceps1_inv
1875 sigsq_om1=(chiom1-chiom12*om2)*faceps1_inv
1876 sigsq_om2=(chiom2-chiom12*om1)*faceps1_inv
1877 sigsq_om12=-chi12*(om1om2*faceps1-om12*facsig)*faceps1_inv**2
1883 c write (iout,*) "chiom1",chiom1," chiom2",chiom2," chiom12",chiom12
1884 c write (iout,*) "faceps1",faceps1," faceps1_inv",faceps1_inv,
1886 C Calculate eps2 and its derivatives in om1, om2, and om12.
1889 chipom12=chip12*om12
1890 facp=1.0D0-om12*chipom12
1892 facp1=om1*chipom1+om2*chipom2-2.0D0*om1om2*chipom12
1893 c write (iout,*) "chipom1",chipom1," chipom2",chipom2,
1894 c & " chipom12",chipom12," facp",facp," facp_inv",facp_inv
1895 C Following variable is the square root of eps2
1896 eps2rt=1.0D0-facp1*facp_inv
1897 C Following three variables are the derivatives of the square root of eps
1898 C in om1, om2, and om12.
1899 eps2rt_om1=-4.0D0*(chipom1-chipom12*om2)*facp_inv
1900 eps2rt_om2=-4.0D0*(chipom2-chipom12*om1)*facp_inv
1901 eps2rt_om12=4.0D0*chip12*(om1om2*facp-om12*facp1)*facp_inv**2
1902 C Evaluate the "asymmetric" factor in the VDW constant, eps3
1903 eps3rt=1.0D0-alf1*om1+alf2*om2-alf12*om12
1904 c write (iout,*) "eps2rt",eps2rt," eps3rt",eps3rt
1905 c write (iout,*) "eps2rt_om1",eps2rt_om1," eps2rt_om2",eps2rt_om2,
1906 c & " eps2rt_om12",eps2rt_om12
1907 C Calculate whole angle-dependent part of epsilon and contributions
1908 C to its derivatives
1912 C----------------------------------------------------------------------------
1913 subroutine sc_grad_T
1914 implicit real*8 (a-h,o-z)
1915 include 'DIMENSIONS'
1916 include 'COMMON.CHAIN'
1917 include 'COMMON.DERIV'
1918 include 'COMMON.CALC'
1919 include 'COMMON.IOUNITS'
1920 double precision dcosom1(3),dcosom2(3)
1921 eom1=eps2der*eps2rt_om1-2.0D0*alf1*eps3der+sigder*sigsq_om1
1922 eom2=eps2der*eps2rt_om2+2.0D0*alf2*eps3der+sigder*sigsq_om2
1923 eom12=evdwij*eps1_om12+eps2der*eps2rt_om12
1924 & -2.0D0*alf12*eps3der+sigder*sigsq_om12
1928 c eom12=evdwij*eps1_om12
1930 c write (iout,*) "eps2der",eps2der," eps3der",eps3der,
1931 c & " sigder",sigder
1932 c write (iout,*) "eps1_om12",eps1_om12," eps2rt_om12",eps2rt_om12
1933 c write (iout,*) "eom1",eom1," eom2",eom2," eom12",eom12
1935 dcosom1(k)=rij*(dc_norm(k,nres+i)-om1*erij(k))
1936 dcosom2(k)=rij*(dc_norm(k,nres+j)-om2*erij(k))
1939 gg(k)=gg(k)+eom1*dcosom1(k)+eom2*dcosom2(k)
1941 c write (iout,*) "gg",(gg(k),k=1,3)
1943 gvdwxT(k,i)=gvdwxT(k,i)-gg(k)
1944 & +(eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,nres+i))
1945 & +eom1*(erij(k)-om1*dc_norm(k,nres+i)))*dsci_inv
1946 gvdwxT(k,j)=gvdwxT(k,j)+gg(k)
1947 & +(eom12*(dc_norm(k,nres+i)-om12*dc_norm(k,nres+j))
1948 & +eom2*(erij(k)-om2*dc_norm(k,nres+j)))*dscj_inv
1949 c write (iout,*)(eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,nres+i))
1950 c & +eom1*(erij(k)-om1*dc_norm(k,nres+i)))*dsci_inv
1951 c write (iout,*)(eom12*(dc_norm(k,nres+i)-om12*dc_norm(k,nres+j))
1952 c & +eom2*(erij(k)-om2*dc_norm(k,nres+j)))*dscj_inv
1955 C Calculate the components of the gradient in DC and X
1959 cgrad gvdwc(l,k)=gvdwc(l,k)+gg(l)
1963 gvdwcT(l,i)=gvdwcT(l,i)-gg(l)
1964 gvdwcT(l,j)=gvdwcT(l,j)+gg(l)
1969 C----------------------------------------------------------------------------
1971 implicit real*8 (a-h,o-z)
1972 include 'DIMENSIONS'
1973 include 'COMMON.CHAIN'
1974 include 'COMMON.DERIV'
1975 include 'COMMON.CALC'
1976 include 'COMMON.IOUNITS'
1977 double precision dcosom1(3),dcosom2(3)
1978 eom1=eps2der*eps2rt_om1-2.0D0*alf1*eps3der+sigder*sigsq_om1
1979 eom2=eps2der*eps2rt_om2+2.0D0*alf2*eps3der+sigder*sigsq_om2
1980 eom12=evdwij*eps1_om12+eps2der*eps2rt_om12
1981 & -2.0D0*alf12*eps3der+sigder*sigsq_om12
1985 c eom12=evdwij*eps1_om12
1987 c write (iout,*) "eps2der",eps2der," eps3der",eps3der,
1988 c & " sigder",sigder
1989 c write (iout,*) "eps1_om12",eps1_om12," eps2rt_om12",eps2rt_om12
1990 c write (iout,*) "eom1",eom1," eom2",eom2," eom12",eom12
1992 dcosom1(k)=rij*(dc_norm(k,nres+i)-om1*erij(k))
1993 dcosom2(k)=rij*(dc_norm(k,nres+j)-om2*erij(k))
1996 gg(k)=gg(k)+eom1*dcosom1(k)+eom2*dcosom2(k)
1998 c write (iout,*) "gg",(gg(k),k=1,3)
2000 gvdwx(k,i)=gvdwx(k,i)-gg(k)
2001 & +(eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,nres+i))
2002 & +eom1*(erij(k)-om1*dc_norm(k,nres+i)))*dsci_inv
2003 gvdwx(k,j)=gvdwx(k,j)+gg(k)
2004 & +(eom12*(dc_norm(k,nres+i)-om12*dc_norm(k,nres+j))
2005 & +eom2*(erij(k)-om2*dc_norm(k,nres+j)))*dscj_inv
2006 c write (iout,*)(eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,nres+i))
2007 c & +eom1*(erij(k)-om1*dc_norm(k,nres+i)))*dsci_inv
2008 c write (iout,*)(eom12*(dc_norm(k,nres+i)-om12*dc_norm(k,nres+j))
2009 c & +eom2*(erij(k)-om2*dc_norm(k,nres+j)))*dscj_inv
2012 C Calculate the components of the gradient in DC and X
2016 cgrad gvdwc(l,k)=gvdwc(l,k)+gg(l)
2020 gvdwc(l,i)=gvdwc(l,i)-gg(l)
2021 gvdwc(l,j)=gvdwc(l,j)+gg(l)
2025 C-----------------------------------------------------------------------
2026 subroutine e_softsphere(evdw)
2028 C This subroutine calculates the interaction energy of nonbonded side chains
2029 C assuming the LJ potential of interaction.
2031 implicit real*8 (a-h,o-z)
2032 include 'DIMENSIONS'
2033 parameter (accur=1.0d-10)
2034 include 'COMMON.GEO'
2035 include 'COMMON.VAR'
2036 include 'COMMON.LOCAL'
2037 include 'COMMON.CHAIN'
2038 include 'COMMON.DERIV'
2039 include 'COMMON.INTERACT'
2040 include 'COMMON.TORSION'
2041 include 'COMMON.SBRIDGE'
2042 include 'COMMON.NAMES'
2043 include 'COMMON.IOUNITS'
2044 include 'COMMON.CONTACTS'
2046 cd print *,'Entering Esoft_sphere nnt=',nnt,' nct=',nct
2048 do i=iatsc_s,iatsc_e
2055 C Calculate SC interaction energy.
2057 do iint=1,nint_gr(i)
2058 cd write (iout,*) 'i=',i,' iint=',iint,' istart=',istart(i,iint),
2059 cd & 'iend=',iend(i,iint)
2060 do j=istart(i,iint),iend(i,iint)
2065 rij=xj*xj+yj*yj+zj*zj
2066 c write (iout,*)'i=',i,' j=',j,' itypi=',itypi,' itypj=',itypj
2067 r0ij=r0(itypi,itypj)
2069 c print *,i,j,r0ij,dsqrt(rij)
2070 if (rij.lt.r0ijsq) then
2071 evdwij=0.25d0*(rij-r0ijsq)**2
2079 C Calculate the components of the gradient in DC and X
2085 gvdwx(k,i)=gvdwx(k,i)-gg(k)
2086 gvdwx(k,j)=gvdwx(k,j)+gg(k)
2087 gvdwc(k,i)=gvdwc(k,i)-gg(k)
2088 gvdwc(k,j)=gvdwc(k,j)+gg(k)
2092 cgrad gvdwc(l,k)=gvdwc(l,k)+gg(l)
2100 C--------------------------------------------------------------------------
2101 subroutine eelec_soft_sphere(ees,evdw1,eel_loc,eello_turn3,
2104 C Soft-sphere potential of p-p interaction
2106 implicit real*8 (a-h,o-z)
2107 include 'DIMENSIONS'
2108 include 'COMMON.CONTROL'
2109 include 'COMMON.IOUNITS'
2110 include 'COMMON.GEO'
2111 include 'COMMON.VAR'
2112 include 'COMMON.LOCAL'
2113 include 'COMMON.CHAIN'
2114 include 'COMMON.DERIV'
2115 include 'COMMON.INTERACT'
2116 include 'COMMON.CONTACTS'
2117 include 'COMMON.TORSION'
2118 include 'COMMON.VECTORS'
2119 include 'COMMON.FFIELD'
2121 cd write(iout,*) 'In EELEC_soft_sphere'
2128 do i=iatel_s,iatel_e
2132 xmedi=c(1,i)+0.5d0*dxi
2133 ymedi=c(2,i)+0.5d0*dyi
2134 zmedi=c(3,i)+0.5d0*dzi
2136 c write (iout,*) 'i',i,' ielstart',ielstart(i),' ielend',ielend(i)
2137 do j=ielstart(i),ielend(i)
2141 if (j.eq.i+2 .and. itelj.eq.2) iteli=2
2142 r0ij=rpp(iteli,itelj)
2147 xj=c(1,j)+0.5D0*dxj-xmedi
2148 yj=c(2,j)+0.5D0*dyj-ymedi
2149 zj=c(3,j)+0.5D0*dzj-zmedi
2150 rij=xj*xj+yj*yj+zj*zj
2151 if (rij.lt.r0ijsq) then
2152 evdw1ij=0.25d0*(rij-r0ijsq)**2
2160 C Calculate contributions to the Cartesian gradient.
2166 gvdwpp(k,i)=gvdwpp(k,i)-ggg(k)
2167 gvdwpp(k,j)=gvdwpp(k,j)+ggg(k)
2170 * Loop over residues i+1 thru j-1.
2174 cgrad gelc(l,k)=gelc(l,k)+ggg(l)
2179 cgrad do i=nnt,nct-1
2181 cgrad gelc(k,i)=gelc(k,i)+0.5d0*gelc(k,i)
2183 cgrad do j=i+1,nct-1
2185 cgrad gelc(k,i)=gelc(k,i)+gelc(k,j)
2191 c------------------------------------------------------------------------------
2192 subroutine vec_and_deriv
2193 implicit real*8 (a-h,o-z)
2194 include 'DIMENSIONS'
2198 include 'COMMON.IOUNITS'
2199 include 'COMMON.GEO'
2200 include 'COMMON.VAR'
2201 include 'COMMON.LOCAL'
2202 include 'COMMON.CHAIN'
2203 include 'COMMON.VECTORS'
2204 include 'COMMON.SETUP'
2205 include 'COMMON.TIME1'
2206 dimension uyder(3,3,2),uzder(3,3,2),vbld_inv_temp(2)
2207 C Compute the local reference systems. For reference system (i), the
2208 C X-axis points from CA(i) to CA(i+1), the Y axis is in the
2209 C CA(i)-CA(i+1)-CA(i+2) plane, and the Z axis is perpendicular to this plane.
2211 do i=ivec_start,ivec_end
2215 if (i.eq.nres-1) then
2216 C Case of the last full residue
2217 C Compute the Z-axis
2218 call vecpr(dc_norm(1,i),dc_norm(1,i-1),uz(1,i))
2219 costh=dcos(pi-theta(nres))
2220 fac=1.0d0/dsqrt(1.0d0-costh*costh)
2224 C Compute the derivatives of uz
2226 uzder(2,1,1)=-dc_norm(3,i-1)
2227 uzder(3,1,1)= dc_norm(2,i-1)
2228 uzder(1,2,1)= dc_norm(3,i-1)
2230 uzder(3,2,1)=-dc_norm(1,i-1)
2231 uzder(1,3,1)=-dc_norm(2,i-1)
2232 uzder(2,3,1)= dc_norm(1,i-1)
2235 uzder(2,1,2)= dc_norm(3,i)
2236 uzder(3,1,2)=-dc_norm(2,i)
2237 uzder(1,2,2)=-dc_norm(3,i)
2239 uzder(3,2,2)= dc_norm(1,i)
2240 uzder(1,3,2)= dc_norm(2,i)
2241 uzder(2,3,2)=-dc_norm(1,i)
2243 C Compute the Y-axis
2246 uy(k,i)=fac*(dc_norm(k,i-1)-costh*dc_norm(k,i))
2248 C Compute the derivatives of uy
2251 uyder(k,j,1)=2*dc_norm(k,i-1)*dc_norm(j,i)
2252 & -dc_norm(k,i)*dc_norm(j,i-1)
2253 uyder(k,j,2)=-dc_norm(j,i)*dc_norm(k,i)
2255 uyder(j,j,1)=uyder(j,j,1)-costh
2256 uyder(j,j,2)=1.0d0+uyder(j,j,2)
2261 uygrad(l,k,j,i)=uyder(l,k,j)
2262 uzgrad(l,k,j,i)=uzder(l,k,j)
2266 call unormderiv(uy(1,i),uyder(1,1,1),facy,uygrad(1,1,1,i))
2267 call unormderiv(uy(1,i),uyder(1,1,2),facy,uygrad(1,1,2,i))
2268 call unormderiv(uz(1,i),uzder(1,1,1),fac,uzgrad(1,1,1,i))
2269 call unormderiv(uz(1,i),uzder(1,1,2),fac,uzgrad(1,1,2,i))
2272 C Compute the Z-axis
2273 call vecpr(dc_norm(1,i),dc_norm(1,i+1),uz(1,i))
2274 costh=dcos(pi-theta(i+2))
2275 fac=1.0d0/dsqrt(1.0d0-costh*costh)
2279 C Compute the derivatives of uz
2281 uzder(2,1,1)=-dc_norm(3,i+1)
2282 uzder(3,1,1)= dc_norm(2,i+1)
2283 uzder(1,2,1)= dc_norm(3,i+1)
2285 uzder(3,2,1)=-dc_norm(1,i+1)
2286 uzder(1,3,1)=-dc_norm(2,i+1)
2287 uzder(2,3,1)= dc_norm(1,i+1)
2290 uzder(2,1,2)= dc_norm(3,i)
2291 uzder(3,1,2)=-dc_norm(2,i)
2292 uzder(1,2,2)=-dc_norm(3,i)
2294 uzder(3,2,2)= dc_norm(1,i)
2295 uzder(1,3,2)= dc_norm(2,i)
2296 uzder(2,3,2)=-dc_norm(1,i)
2298 C Compute the Y-axis
2301 uy(k,i)=facy*(dc_norm(k,i+1)-costh*dc_norm(k,i))
2303 C Compute the derivatives of uy
2306 uyder(k,j,1)=2*dc_norm(k,i+1)*dc_norm(j,i)
2307 & -dc_norm(k,i)*dc_norm(j,i+1)
2308 uyder(k,j,2)=-dc_norm(j,i)*dc_norm(k,i)
2310 uyder(j,j,1)=uyder(j,j,1)-costh
2311 uyder(j,j,2)=1.0d0+uyder(j,j,2)
2316 uygrad(l,k,j,i)=uyder(l,k,j)
2317 uzgrad(l,k,j,i)=uzder(l,k,j)
2321 call unormderiv(uy(1,i),uyder(1,1,1),facy,uygrad(1,1,1,i))
2322 call unormderiv(uy(1,i),uyder(1,1,2),facy,uygrad(1,1,2,i))
2323 call unormderiv(uz(1,i),uzder(1,1,1),fac,uzgrad(1,1,1,i))
2324 call unormderiv(uz(1,i),uzder(1,1,2),fac,uzgrad(1,1,2,i))
2328 vbld_inv_temp(1)=vbld_inv(i+1)
2329 if (i.lt.nres-1) then
2330 vbld_inv_temp(2)=vbld_inv(i+2)
2332 vbld_inv_temp(2)=vbld_inv(i)
2337 uygrad(l,k,j,i)=vbld_inv_temp(j)*uygrad(l,k,j,i)
2338 uzgrad(l,k,j,i)=vbld_inv_temp(j)*uzgrad(l,k,j,i)
2343 #if defined(PARVEC) && defined(MPI)
2344 if (nfgtasks1.gt.1) then
2346 c print *,"Processor",fg_rank1,kolor1," ivec_start",ivec_start,
2347 c & " ivec_displ",(ivec_displ(i),i=0,nfgtasks1-1),
2348 c & " ivec_count",(ivec_count(i),i=0,nfgtasks1-1)
2349 call MPI_Allgatherv(uy(1,ivec_start),ivec_count(fg_rank1),
2350 & MPI_UYZ,uy(1,1),ivec_count(0),ivec_displ(0),MPI_UYZ,
2352 call MPI_Allgatherv(uz(1,ivec_start),ivec_count(fg_rank1),
2353 & MPI_UYZ,uz(1,1),ivec_count(0),ivec_displ(0),MPI_UYZ,
2355 call MPI_Allgatherv(uygrad(1,1,1,ivec_start),
2356 & ivec_count(fg_rank1),MPI_UYZGRAD,uygrad(1,1,1,1),ivec_count(0),
2357 & ivec_displ(0),MPI_UYZGRAD,FG_COMM1,IERR)
2358 call MPI_Allgatherv(uzgrad(1,1,1,ivec_start),
2359 & ivec_count(fg_rank1),MPI_UYZGRAD,uzgrad(1,1,1,1),ivec_count(0),
2360 & ivec_displ(0),MPI_UYZGRAD,FG_COMM1,IERR)
2361 time_gather=time_gather+MPI_Wtime()-time00
2363 c if (fg_rank.eq.0) then
2364 c write (iout,*) "Arrays UY and UZ"
2366 c write (iout,'(i5,3f10.5,5x,3f10.5)') i,(uy(k,i),k=1,3),
2373 C-----------------------------------------------------------------------------
2374 subroutine check_vecgrad
2375 implicit real*8 (a-h,o-z)
2376 include 'DIMENSIONS'
2377 include 'COMMON.IOUNITS'
2378 include 'COMMON.GEO'
2379 include 'COMMON.VAR'
2380 include 'COMMON.LOCAL'
2381 include 'COMMON.CHAIN'
2382 include 'COMMON.VECTORS'
2383 dimension uygradt(3,3,2,maxres),uzgradt(3,3,2,maxres)
2384 dimension uyt(3,maxres),uzt(3,maxres)
2385 dimension uygradn(3,3,2),uzgradn(3,3,2),erij(3)
2386 double precision delta /1.0d-7/
2389 crc write(iout,'(2i5,2(3f10.5,5x))') i,1,dc_norm(:,i)
2390 crc write(iout,'(2i5,2(3f10.5,5x))') i,2,uy(:,i)
2391 crc write(iout,'(2i5,2(3f10.5,5x)/)')i,3,uz(:,i)
2392 cd write(iout,'(2i5,2(3f10.5,5x))') i,1,
2393 cd & (dc_norm(if90,i),if90=1,3)
2394 cd write(iout,'(2i5,2(3f10.5,5x))') i,2,(uy(if90,i),if90=1,3)
2395 cd write(iout,'(2i5,2(3f10.5,5x)/)')i,3,(uz(if90,i),if90=1,3)
2396 cd write(iout,'(a)')
2402 uygradt(l,k,j,i)=uygrad(l,k,j,i)
2403 uzgradt(l,k,j,i)=uzgrad(l,k,j,i)
2416 cd write (iout,*) 'i=',i
2418 erij(k)=dc_norm(k,i)
2422 dc_norm(k,i)=erij(k)
2424 dc_norm(j,i)=dc_norm(j,i)+delta
2425 c fac=dsqrt(scalar(dc_norm(1,i),dc_norm(1,i)))
2427 c dc_norm(k,i)=dc_norm(k,i)/fac
2429 c write (iout,*) (dc_norm(k,i),k=1,3)
2430 c write (iout,*) (erij(k),k=1,3)
2433 uygradn(k,j,1)=(uy(k,i)-uyt(k,i))/delta
2434 uygradn(k,j,2)=(uy(k,i-1)-uyt(k,i-1))/delta
2435 uzgradn(k,j,1)=(uz(k,i)-uzt(k,i))/delta
2436 uzgradn(k,j,2)=(uz(k,i-1)-uzt(k,i-1))/delta
2438 c write (iout,'(i5,3f8.5,3x,3f8.5,5x,3f8.5,3x,3f8.5)')
2439 c & j,(uzgradt(k,j,1,i),k=1,3),(uzgradn(k,j,1),k=1,3),
2440 c & (uzgradt(k,j,2,i-1),k=1,3),(uzgradn(k,j,2),k=1,3)
2443 dc_norm(k,i)=erij(k)
2446 cd write (iout,'(i5,3f8.5,3x,3f8.5,5x,3f8.5,3x,3f8.5)')
2447 cd & k,(uygradt(k,l,1,i),l=1,3),(uygradn(k,l,1),l=1,3),
2448 cd & (uygradt(k,l,2,i-1),l=1,3),(uygradn(k,l,2),l=1,3)
2449 cd write (iout,'(i5,3f8.5,3x,3f8.5,5x,3f8.5,3x,3f8.5)')
2450 cd & k,(uzgradt(k,l,1,i),l=1,3),(uzgradn(k,l,1),l=1,3),
2451 cd & (uzgradt(k,l,2,i-1),l=1,3),(uzgradn(k,l,2),l=1,3)
2452 cd write (iout,'(a)')
2457 C--------------------------------------------------------------------------
2458 subroutine set_matrices
2459 implicit real*8 (a-h,o-z)
2460 include 'DIMENSIONS'
2463 include "COMMON.SETUP"
2465 integer status(MPI_STATUS_SIZE)
2467 include 'COMMON.IOUNITS'
2468 include 'COMMON.GEO'
2469 include 'COMMON.VAR'
2470 include 'COMMON.LOCAL'
2471 include 'COMMON.CHAIN'
2472 include 'COMMON.DERIV'
2473 include 'COMMON.INTERACT'
2474 include 'COMMON.CONTACTS'
2475 include 'COMMON.TORSION'
2476 include 'COMMON.VECTORS'
2477 include 'COMMON.FFIELD'
2478 double precision auxvec(2),auxmat(2,2)
2480 C Compute the virtual-bond-torsional-angle dependent quantities needed
2481 C to calculate the el-loc multibody terms of various order.
2484 do i=ivec_start+2,ivec_end+2
2488 if (i .lt. nres+1) then
2525 if (i .gt. 3 .and. i .lt. nres+1) then
2526 obrot_der(1,i-2)=-sin1
2527 obrot_der(2,i-2)= cos1
2528 Ugder(1,1,i-2)= sin1
2529 Ugder(1,2,i-2)=-cos1
2530 Ugder(2,1,i-2)=-cos1
2531 Ugder(2,2,i-2)=-sin1
2534 obrot2_der(1,i-2)=-dwasin2
2535 obrot2_der(2,i-2)= dwacos2
2536 Ug2der(1,1,i-2)= dwasin2
2537 Ug2der(1,2,i-2)=-dwacos2
2538 Ug2der(2,1,i-2)=-dwacos2
2539 Ug2der(2,2,i-2)=-dwasin2
2541 obrot_der(1,i-2)=0.0d0
2542 obrot_der(2,i-2)=0.0d0
2543 Ugder(1,1,i-2)=0.0d0
2544 Ugder(1,2,i-2)=0.0d0
2545 Ugder(2,1,i-2)=0.0d0
2546 Ugder(2,2,i-2)=0.0d0
2547 obrot2_der(1,i-2)=0.0d0
2548 obrot2_der(2,i-2)=0.0d0
2549 Ug2der(1,1,i-2)=0.0d0
2550 Ug2der(1,2,i-2)=0.0d0
2551 Ug2der(2,1,i-2)=0.0d0
2552 Ug2der(2,2,i-2)=0.0d0
2554 c if (i.gt. iatel_s+2 .and. i.lt.iatel_e+5) then
2555 if (i.gt. nnt+2 .and. i.lt.nct+2) then
2556 iti = itortyp(itype(i-2))
2560 c if (i.gt. iatel_s+1 .and. i.lt.iatel_e+4) then
2561 if (i.gt. nnt+1 .and. i.lt.nct+1) then
2562 iti1 = itortyp(itype(i-1))
2566 cd write (iout,*) '*******i',i,' iti1',iti
2567 cd write (iout,*) 'b1',b1(:,iti)
2568 cd write (iout,*) 'b2',b2(:,iti)
2569 cd write (iout,*) 'Ug',Ug(:,:,i-2)
2570 c if (i .gt. iatel_s+2) then
2571 if (i .gt. nnt+2) then
2572 call matvec2(Ug(1,1,i-2),b2(1,iti),Ub2(1,i-2))
2573 call matmat2(EE(1,1,iti),Ug(1,1,i-2),EUg(1,1,i-2))
2574 if (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0)
2576 call matmat2(CC(1,1,iti),Ug(1,1,i-2),CUg(1,1,i-2))
2577 call matmat2(DD(1,1,iti),Ug(1,1,i-2),DUg(1,1,i-2))
2578 call matmat2(Dtilde(1,1,iti),Ug2(1,1,i-2),DtUg2(1,1,i-2))
2579 call matvec2(Ctilde(1,1,iti1),obrot(1,i-2),Ctobr(1,i-2))
2580 call matvec2(Dtilde(1,1,iti),obrot2(1,i-2),Dtobr2(1,i-2))
2591 DtUg2(l,k,i-2)=0.0d0
2595 call matvec2(Ugder(1,1,i-2),b2(1,iti),Ub2der(1,i-2))
2596 call matmat2(EE(1,1,iti),Ugder(1,1,i-2),EUgder(1,1,i-2))
2598 muder(k,i-2)=Ub2der(k,i-2)
2600 c if (i.gt. iatel_s+1 .and. i.lt.iatel_e+4) then
2601 if (i.gt. nnt+1 .and. i.lt.nct+1) then
2602 iti1 = itortyp(itype(i-1))
2607 mu(k,i-2)=Ub2(k,i-2)+b1(k,iti1)
2609 cd write (iout,*) 'mu ',mu(:,i-2)
2610 cd write (iout,*) 'mu1',mu1(:,i-2)
2611 cd write (iout,*) 'mu2',mu2(:,i-2)
2612 if (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or.wcorr6.gt.0.0d0)
2614 call matmat2(CC(1,1,iti1),Ugder(1,1,i-2),CUgder(1,1,i-2))
2615 call matmat2(DD(1,1,iti),Ugder(1,1,i-2),DUgder(1,1,i-2))
2616 call matmat2(Dtilde(1,1,iti),Ug2der(1,1,i-2),DtUg2der(1,1,i-2))
2617 call matvec2(Ctilde(1,1,iti1),obrot_der(1,i-2),Ctobrder(1,i-2))
2618 call matvec2(Dtilde(1,1,iti),obrot2_der(1,i-2),Dtobr2der(1,i-2))
2619 C Vectors and matrices dependent on a single virtual-bond dihedral.
2620 call matvec2(DD(1,1,iti),b1tilde(1,iti1),auxvec(1))
2621 call matvec2(Ug2(1,1,i-2),auxvec(1),Ug2Db1t(1,i-2))
2622 call matvec2(Ug2der(1,1,i-2),auxvec(1),Ug2Db1tder(1,i-2))
2623 call matvec2(CC(1,1,iti1),Ub2(1,i-2),CUgb2(1,i-2))
2624 call matvec2(CC(1,1,iti1),Ub2der(1,i-2),CUgb2der(1,i-2))
2625 call matmat2(EUg(1,1,i-2),CC(1,1,iti1),EUgC(1,1,i-2))
2626 call matmat2(EUgder(1,1,i-2),CC(1,1,iti1),EUgCder(1,1,i-2))
2627 call matmat2(EUg(1,1,i-2),DD(1,1,iti1),EUgD(1,1,i-2))
2628 call matmat2(EUgder(1,1,i-2),DD(1,1,iti1),EUgDder(1,1,i-2))
2631 C Matrices dependent on two consecutive virtual-bond dihedrals.
2632 C The order of matrices is from left to right.
2633 if (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or.wcorr6.gt.0.0d0)
2635 c do i=max0(ivec_start,2),ivec_end
2637 call matmat2(DtUg2(1,1,i-1),EUg(1,1,i),DtUg2EUg(1,1,i))
2638 call matmat2(DtUg2der(1,1,i-1),EUg(1,1,i),DtUg2EUgder(1,1,1,i))
2639 call matmat2(DtUg2(1,1,i-1),EUgder(1,1,i),DtUg2EUgder(1,1,2,i))
2640 call transpose2(DtUg2(1,1,i-1),auxmat(1,1))
2641 call matmat2(auxmat(1,1),EUg(1,1,i),Ug2DtEUg(1,1,i))
2642 call matmat2(auxmat(1,1),EUgder(1,1,i),Ug2DtEUgder(1,1,2,i))
2643 call transpose2(DtUg2der(1,1,i-1),auxmat(1,1))
2644 call matmat2(auxmat(1,1),EUg(1,1,i),Ug2DtEUgder(1,1,1,i))
2647 #if defined(MPI) && defined(PARMAT)
2649 c if (fg_rank.eq.0) then
2650 write (iout,*) "Arrays UG and UGDER before GATHER"
2652 write (iout,'(i5,4f10.5,5x,4f10.5)') i,
2653 & ((ug(l,k,i),l=1,2),k=1,2),
2654 & ((ugder(l,k,i),l=1,2),k=1,2)
2656 write (iout,*) "Arrays UG2 and UG2DER"
2658 write (iout,'(i5,4f10.5,5x,4f10.5)') i,
2659 & ((ug2(l,k,i),l=1,2),k=1,2),
2660 & ((ug2der(l,k,i),l=1,2),k=1,2)
2662 write (iout,*) "Arrays OBROT OBROT2 OBROTDER and OBROT2DER"
2664 write (iout,'(i5,4f10.5,5x,4f10.5)') i,
2665 & (obrot(k,i),k=1,2),(obrot2(k,i),k=1,2),
2666 & (obrot_der(k,i),k=1,2),(obrot2_der(k,i),k=1,2)
2668 write (iout,*) "Arrays COSTAB SINTAB COSTAB2 and SINTAB2"
2670 write (iout,'(i5,4f10.5,5x,4f10.5)') i,
2671 & costab(i),sintab(i),costab2(i),sintab2(i)
2673 write (iout,*) "Array MUDER"
2675 write (iout,'(i5,2f10.5)') i,muder(1,i),muder(2,i)
2679 if (nfgtasks.gt.1) then
2681 c write(iout,*)"Processor",fg_rank,kolor," ivec_start",ivec_start,
2682 c & " ivec_displ",(ivec_displ(i),i=0,nfgtasks-1),
2683 c & " ivec_count",(ivec_count(i),i=0,nfgtasks-1)
2685 call MPI_Allgatherv(Ub2(1,ivec_start),ivec_count(fg_rank1),
2686 & MPI_MU,Ub2(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2688 call MPI_Allgatherv(Ub2der(1,ivec_start),ivec_count(fg_rank1),
2689 & MPI_MU,Ub2der(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2691 call MPI_Allgatherv(mu(1,ivec_start),ivec_count(fg_rank1),
2692 & MPI_MU,mu(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2694 call MPI_Allgatherv(muder(1,ivec_start),ivec_count(fg_rank1),
2695 & MPI_MU,muder(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2697 call MPI_Allgatherv(Eug(1,1,ivec_start),ivec_count(fg_rank1),
2698 & MPI_MAT1,Eug(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2700 call MPI_Allgatherv(Eugder(1,1,ivec_start),ivec_count(fg_rank1),
2701 & MPI_MAT1,Eugder(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2703 call MPI_Allgatherv(costab(ivec_start),ivec_count(fg_rank1),
2704 & MPI_DOUBLE_PRECISION,costab(1),ivec_count(0),ivec_displ(0),
2705 & MPI_DOUBLE_PRECISION,FG_COMM1,IERR)
2706 call MPI_Allgatherv(sintab(ivec_start),ivec_count(fg_rank1),
2707 & MPI_DOUBLE_PRECISION,sintab(1),ivec_count(0),ivec_displ(0),
2708 & MPI_DOUBLE_PRECISION,FG_COMM1,IERR)
2709 call MPI_Allgatherv(costab2(ivec_start),ivec_count(fg_rank1),
2710 & MPI_DOUBLE_PRECISION,costab2(1),ivec_count(0),ivec_displ(0),
2711 & MPI_DOUBLE_PRECISION,FG_COMM1,IERR)
2712 call MPI_Allgatherv(sintab2(ivec_start),ivec_count(fg_rank1),
2713 & MPI_DOUBLE_PRECISION,sintab2(1),ivec_count(0),ivec_displ(0),
2714 & MPI_DOUBLE_PRECISION,FG_COMM1,IERR)
2715 if (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0)
2717 call MPI_Allgatherv(Ctobr(1,ivec_start),ivec_count(fg_rank1),
2718 & MPI_MU,Ctobr(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2720 call MPI_Allgatherv(Ctobrder(1,ivec_start),ivec_count(fg_rank1),
2721 & MPI_MU,Ctobrder(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2723 call MPI_Allgatherv(Dtobr2(1,ivec_start),ivec_count(fg_rank1),
2724 & MPI_MU,Dtobr2(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2726 call MPI_Allgatherv(Dtobr2der(1,ivec_start),ivec_count(fg_rank1),
2727 & MPI_MU,Dtobr2der(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2729 call MPI_Allgatherv(Ug2Db1t(1,ivec_start),ivec_count(fg_rank1),
2730 & MPI_MU,Ug2Db1t(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2732 call MPI_Allgatherv(Ug2Db1tder(1,ivec_start),
2733 & ivec_count(fg_rank1),
2734 & MPI_MU,Ug2Db1tder(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2736 call MPI_Allgatherv(CUgb2(1,ivec_start),ivec_count(fg_rank1),
2737 & MPI_MU,CUgb2(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2739 call MPI_Allgatherv(CUgb2der(1,ivec_start),ivec_count(fg_rank1),
2740 & MPI_MU,CUgb2der(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2742 call MPI_Allgatherv(Cug(1,1,ivec_start),ivec_count(fg_rank1),
2743 & MPI_MAT1,Cug(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2745 call MPI_Allgatherv(Cugder(1,1,ivec_start),ivec_count(fg_rank1),
2746 & MPI_MAT1,Cugder(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2748 call MPI_Allgatherv(Dug(1,1,ivec_start),ivec_count(fg_rank1),
2749 & MPI_MAT1,Dug(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2751 call MPI_Allgatherv(Dugder(1,1,ivec_start),ivec_count(fg_rank1),
2752 & MPI_MAT1,Dugder(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2754 call MPI_Allgatherv(Dtug2(1,1,ivec_start),ivec_count(fg_rank1),
2755 & MPI_MAT1,Dtug2(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2757 call MPI_Allgatherv(Dtug2der(1,1,ivec_start),
2758 & ivec_count(fg_rank1),
2759 & MPI_MAT1,Dtug2der(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2761 call MPI_Allgatherv(EugC(1,1,ivec_start),ivec_count(fg_rank1),
2762 & MPI_MAT1,EugC(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2764 call MPI_Allgatherv(EugCder(1,1,ivec_start),ivec_count(fg_rank1),
2765 & MPI_MAT1,EugCder(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2767 call MPI_Allgatherv(EugD(1,1,ivec_start),ivec_count(fg_rank1),
2768 & MPI_MAT1,EugD(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2770 call MPI_Allgatherv(EugDder(1,1,ivec_start),ivec_count(fg_rank1),
2771 & MPI_MAT1,EugDder(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2773 call MPI_Allgatherv(DtUg2EUg(1,1,ivec_start),
2774 & ivec_count(fg_rank1),
2775 & MPI_MAT1,DtUg2EUg(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2777 call MPI_Allgatherv(Ug2DtEUg(1,1,ivec_start),
2778 & ivec_count(fg_rank1),
2779 & MPI_MAT1,Ug2DtEUg(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2781 call MPI_Allgatherv(DtUg2EUgder(1,1,1,ivec_start),
2782 & ivec_count(fg_rank1),
2783 & MPI_MAT2,DtUg2EUgder(1,1,1,1),ivec_count(0),ivec_displ(0),
2784 & MPI_MAT2,FG_COMM1,IERR)
2785 call MPI_Allgatherv(Ug2DtEUgder(1,1,1,ivec_start),
2786 & ivec_count(fg_rank1),
2787 & MPI_MAT2,Ug2DtEUgder(1,1,1,1),ivec_count(0),ivec_displ(0),
2788 & MPI_MAT2,FG_COMM1,IERR)
2791 c Passes matrix info through the ring
2794 if (irecv.lt.0) irecv=nfgtasks1-1
2797 if (inext.ge.nfgtasks1) inext=0
2799 c write (iout,*) "isend",isend," irecv",irecv
2801 lensend=lentyp(isend)
2802 lenrecv=lentyp(irecv)
2803 c write (iout,*) "lensend",lensend," lenrecv",lenrecv
2804 c call MPI_SENDRECV(ug(1,1,ivec_displ(isend)+1),1,
2805 c & MPI_ROTAT1(lensend),inext,2200+isend,
2806 c & ug(1,1,ivec_displ(irecv)+1),1,MPI_ROTAT1(lenrecv),
2807 c & iprev,2200+irecv,FG_COMM,status,IERR)
2808 c write (iout,*) "Gather ROTAT1"
2810 c call MPI_SENDRECV(obrot(1,ivec_displ(isend)+1),1,
2811 c & MPI_ROTAT2(lensend),inext,3300+isend,
2812 c & obrot(1,ivec_displ(irecv)+1),1,MPI_ROTAT2(lenrecv),
2813 c & iprev,3300+irecv,FG_COMM,status,IERR)
2814 c write (iout,*) "Gather ROTAT2"
2816 call MPI_SENDRECV(costab(ivec_displ(isend)+1),1,
2817 & MPI_ROTAT_OLD(lensend),inext,4400+isend,
2818 & costab(ivec_displ(irecv)+1),1,MPI_ROTAT_OLD(lenrecv),
2819 & iprev,4400+irecv,FG_COMM,status,IERR)
2820 c write (iout,*) "Gather ROTAT_OLD"
2822 call MPI_SENDRECV(mu(1,ivec_displ(isend)+1),1,
2823 & MPI_PRECOMP11(lensend),inext,5500+isend,
2824 & mu(1,ivec_displ(irecv)+1),1,MPI_PRECOMP11(lenrecv),
2825 & iprev,5500+irecv,FG_COMM,status,IERR)
2826 c write (iout,*) "Gather PRECOMP11"
2828 call MPI_SENDRECV(Eug(1,1,ivec_displ(isend)+1),1,
2829 & MPI_PRECOMP12(lensend),inext,6600+isend,
2830 & Eug(1,1,ivec_displ(irecv)+1),1,MPI_PRECOMP12(lenrecv),
2831 & iprev,6600+irecv,FG_COMM,status,IERR)
2832 c write (iout,*) "Gather PRECOMP12"
2834 if (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0)
2836 call MPI_SENDRECV(ug2db1t(1,ivec_displ(isend)+1),1,
2837 & MPI_ROTAT2(lensend),inext,7700+isend,
2838 & ug2db1t(1,ivec_displ(irecv)+1),1,MPI_ROTAT2(lenrecv),
2839 & iprev,7700+irecv,FG_COMM,status,IERR)
2840 c write (iout,*) "Gather PRECOMP21"
2842 call MPI_SENDRECV(EUgC(1,1,ivec_displ(isend)+1),1,
2843 & MPI_PRECOMP22(lensend),inext,8800+isend,
2844 & EUgC(1,1,ivec_displ(irecv)+1),1,MPI_PRECOMP22(lenrecv),
2845 & iprev,8800+irecv,FG_COMM,status,IERR)
2846 c write (iout,*) "Gather PRECOMP22"
2848 call MPI_SENDRECV(Ug2DtEUgder(1,1,1,ivec_displ(isend)+1),1,
2849 & MPI_PRECOMP23(lensend),inext,9900+isend,
2850 & Ug2DtEUgder(1,1,1,ivec_displ(irecv)+1),1,
2851 & MPI_PRECOMP23(lenrecv),
2852 & iprev,9900+irecv,FG_COMM,status,IERR)
2853 c write (iout,*) "Gather PRECOMP23"
2858 if (irecv.lt.0) irecv=nfgtasks1-1
2861 time_gather=time_gather+MPI_Wtime()-time00
2864 c if (fg_rank.eq.0) then
2865 write (iout,*) "Arrays UG and UGDER"
2867 write (iout,'(i5,4f10.5,5x,4f10.5)') i,
2868 & ((ug(l,k,i),l=1,2),k=1,2),
2869 & ((ugder(l,k,i),l=1,2),k=1,2)
2871 write (iout,*) "Arrays UG2 and UG2DER"
2873 write (iout,'(i5,4f10.5,5x,4f10.5)') i,
2874 & ((ug2(l,k,i),l=1,2),k=1,2),
2875 & ((ug2der(l,k,i),l=1,2),k=1,2)
2877 write (iout,*) "Arrays OBROT OBROT2 OBROTDER and OBROT2DER"
2879 write (iout,'(i5,4f10.5,5x,4f10.5)') i,
2880 & (obrot(k,i),k=1,2),(obrot2(k,i),k=1,2),
2881 & (obrot_der(k,i),k=1,2),(obrot2_der(k,i),k=1,2)
2883 write (iout,*) "Arrays COSTAB SINTAB COSTAB2 and SINTAB2"
2885 write (iout,'(i5,4f10.5,5x,4f10.5)') i,
2886 & costab(i),sintab(i),costab2(i),sintab2(i)
2888 write (iout,*) "Array MUDER"
2890 write (iout,'(i5,2f10.5)') i,muder(1,i),muder(2,i)
2896 cd iti = itortyp(itype(i))
2899 cd write (iout,'(2f10.5,5x,2f10.5,5x,2f10.5)')
2900 cd & (EE(j,k,iti),k=1,2),(Ug(j,k,i),k=1,2),(EUg(j,k,i),k=1,2)
2905 C--------------------------------------------------------------------------
2906 subroutine eelec(ees,evdw1,eel_loc,eello_turn3,eello_turn4)
2908 C This subroutine calculates the average interaction energy and its gradient
2909 C in the virtual-bond vectors between non-adjacent peptide groups, based on
2910 C the potential described in Liwo et al., Protein Sci., 1993, 2, 1715.
2911 C The potential depends both on the distance of peptide-group centers and on
2912 C the orientation of the CA-CA virtual bonds.
2914 implicit real*8 (a-h,o-z)
2918 include 'DIMENSIONS'
2919 include 'COMMON.CONTROL'
2920 include 'COMMON.SETUP'
2921 include 'COMMON.IOUNITS'
2922 include 'COMMON.GEO'
2923 include 'COMMON.VAR'
2924 include 'COMMON.LOCAL'
2925 include 'COMMON.CHAIN'
2926 include 'COMMON.DERIV'
2927 include 'COMMON.INTERACT'
2928 include 'COMMON.CONTACTS'
2929 include 'COMMON.TORSION'
2930 include 'COMMON.VECTORS'
2931 include 'COMMON.FFIELD'
2932 include 'COMMON.TIME1'
2933 dimension ggg(3),gggp(3),gggm(3),erij(3),dcosb(3),dcosg(3),
2934 & erder(3,3),uryg(3,3),urzg(3,3),vryg(3,3),vrzg(3,3)
2935 double precision acipa(2,2),agg(3,4),aggi(3,4),aggi1(3,4),
2936 & aggj(3,4),aggj1(3,4),a_temp(2,2),muij(4)
2937 common /locel/ a_temp,agg,aggi,aggi1,aggj,aggj1,a22,a23,a32,a33,
2938 & dxi,dyi,dzi,dx_normi,dy_normi,dz_normi,xmedi,ymedi,zmedi,
2940 c 4/26/02 - AL scaling factor for 1,4 repulsive VDW interactions
2942 double precision scal_el /1.0d0/
2944 double precision scal_el /0.5d0/
2947 C 13-go grudnia roku pamietnego...
2948 double precision unmat(3,3) /1.0d0,0.0d0,0.0d0,
2949 & 0.0d0,1.0d0,0.0d0,
2950 & 0.0d0,0.0d0,1.0d0/
2951 cd write(iout,*) 'In EELEC'
2953 cd write(iout,*) 'Type',i
2954 cd write(iout,*) 'B1',B1(:,i)
2955 cd write(iout,*) 'B2',B2(:,i)
2956 cd write(iout,*) 'CC',CC(:,:,i)
2957 cd write(iout,*) 'DD',DD(:,:,i)
2958 cd write(iout,*) 'EE',EE(:,:,i)
2960 cd call check_vecgrad
2962 if (icheckgrad.eq.1) then
2964 fac=1.0d0/dsqrt(scalar(dc(1,i),dc(1,i)))
2966 dc_norm(k,i)=dc(k,i)*fac
2968 c write (iout,*) 'i',i,' fac',fac
2971 if (wel_loc.gt.0.0d0 .or. wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0
2972 & .or. wcorr6.gt.0.0d0 .or. wturn3.gt.0.0d0 .or.
2973 & wturn4.gt.0.0d0 .or. wturn6.gt.0.0d0) then
2974 c call vec_and_deriv
2980 time_mat=time_mat+MPI_Wtime()-time01
2984 cd write (iout,*) 'i=',i
2986 cd write (iout,'(i5,2f10.5)') k,uy(k,i),uz(k,i)
2989 cd write (iout,'(f10.5,2x,3f10.5,2x,3f10.5)')
2990 cd & uz(k,i),(uzgrad(k,l,1,i),l=1,3),(uzgrad(k,l,2,i),l=1,3)
3003 cd print '(a)','Enter EELEC'
3004 cd write (iout,*) 'iatel_s=',iatel_s,' iatel_e=',iatel_e
3006 gel_loc_loc(i)=0.0d0
3011 c 9/27/08 AL Split the interaction loop to ensure load balancing of turn terms
3013 C Loop over i,i+2 and i,i+3 pairs of the peptide groups
3015 do i=iturn3_start,iturn3_end
3019 dx_normi=dc_norm(1,i)
3020 dy_normi=dc_norm(2,i)
3021 dz_normi=dc_norm(3,i)
3022 xmedi=c(1,i)+0.5d0*dxi
3023 ymedi=c(2,i)+0.5d0*dyi
3024 zmedi=c(3,i)+0.5d0*dzi
3026 call eelecij(i,i+2,ees,evdw1,eel_loc)
3027 if (wturn3.gt.0.0d0) call eturn3(i,eello_turn3)
3028 num_cont_hb(i)=num_conti
3030 do i=iturn4_start,iturn4_end
3034 dx_normi=dc_norm(1,i)
3035 dy_normi=dc_norm(2,i)
3036 dz_normi=dc_norm(3,i)
3037 xmedi=c(1,i)+0.5d0*dxi
3038 ymedi=c(2,i)+0.5d0*dyi
3039 zmedi=c(3,i)+0.5d0*dzi
3040 num_conti=num_cont_hb(i)
3041 call eelecij(i,i+3,ees,evdw1,eel_loc)
3042 if (wturn4.gt.0.0d0) call eturn4(i,eello_turn4)
3043 num_cont_hb(i)=num_conti
3046 c Loop over all pairs of interacting peptide groups except i,i+2 and i,i+3
3048 do i=iatel_s,iatel_e
3052 dx_normi=dc_norm(1,i)
3053 dy_normi=dc_norm(2,i)
3054 dz_normi=dc_norm(3,i)
3055 xmedi=c(1,i)+0.5d0*dxi
3056 ymedi=c(2,i)+0.5d0*dyi
3057 zmedi=c(3,i)+0.5d0*dzi
3058 c write (iout,*) 'i',i,' ielstart',ielstart(i),' ielend',ielend(i)
3059 num_conti=num_cont_hb(i)
3060 do j=ielstart(i),ielend(i)
3061 call eelecij(i,j,ees,evdw1,eel_loc)
3063 num_cont_hb(i)=num_conti
3065 c write (iout,*) "Number of loop steps in EELEC:",ind
3067 cd write (iout,'(i3,3f10.5,5x,3f10.5)')
3068 cd & i,(gel_loc(k,i),k=1,3),gel_loc_loc(i)
3070 c 12/7/99 Adam eello_turn3 will be considered as a separate energy term
3071 ccc eel_loc=eel_loc+eello_turn3
3072 cd print *,"Processor",fg_rank," t_eelecij",t_eelecij
3075 C-------------------------------------------------------------------------------
3076 subroutine eelecij(i,j,ees,evdw1,eel_loc)
3077 implicit real*8 (a-h,o-z)
3078 include 'DIMENSIONS'
3082 include 'COMMON.CONTROL'
3083 include 'COMMON.IOUNITS'
3084 include 'COMMON.GEO'
3085 include 'COMMON.VAR'
3086 include 'COMMON.LOCAL'
3087 include 'COMMON.CHAIN'
3088 include 'COMMON.DERIV'
3089 include 'COMMON.INTERACT'
3090 include 'COMMON.CONTACTS'
3091 include 'COMMON.TORSION'
3092 include 'COMMON.VECTORS'
3093 include 'COMMON.FFIELD'
3094 include 'COMMON.TIME1'
3095 dimension ggg(3),gggp(3),gggm(3),erij(3),dcosb(3),dcosg(3),
3096 & erder(3,3),uryg(3,3),urzg(3,3),vryg(3,3),vrzg(3,3)
3097 double precision acipa(2,2),agg(3,4),aggi(3,4),aggi1(3,4),
3098 & aggj(3,4),aggj1(3,4),a_temp(2,2),muij(4)
3099 common /locel/ a_temp,agg,aggi,aggi1,aggj,aggj1,a22,a23,a32,a33,
3100 & dxi,dyi,dzi,dx_normi,dy_normi,dz_normi,xmedi,ymedi,zmedi,
3102 c 4/26/02 - AL scaling factor for 1,4 repulsive VDW interactions
3104 double precision scal_el /1.0d0/
3106 double precision scal_el /0.5d0/
3109 C 13-go grudnia roku pamietnego...
3110 double precision unmat(3,3) /1.0d0,0.0d0,0.0d0,
3111 & 0.0d0,1.0d0,0.0d0,
3112 & 0.0d0,0.0d0,1.0d0/
3113 c time00=MPI_Wtime()
3114 cd write (iout,*) "eelecij",i,j
3118 if (j.eq.i+2 .and. itelj.eq.2) iteli=2
3119 aaa=app(iteli,itelj)
3120 bbb=bpp(iteli,itelj)
3121 ael6i=ael6(iteli,itelj)
3122 ael3i=ael3(iteli,itelj)
3126 dx_normj=dc_norm(1,j)
3127 dy_normj=dc_norm(2,j)
3128 dz_normj=dc_norm(3,j)
3129 xj=c(1,j)+0.5D0*dxj-xmedi
3130 yj=c(2,j)+0.5D0*dyj-ymedi
3131 zj=c(3,j)+0.5D0*dzj-zmedi
3132 rij=xj*xj+yj*yj+zj*zj
3138 cosa=dx_normi*dx_normj+dy_normi*dy_normj+dz_normi*dz_normj
3139 cosb=(xj*dx_normi+yj*dy_normi+zj*dz_normi)*rmij
3140 cosg=(xj*dx_normj+yj*dy_normj+zj*dz_normj)*rmij
3141 fac=cosa-3.0D0*cosb*cosg
3143 c 4/26/02 - AL scaling down 1,4 repulsive VDW interactions
3144 if (j.eq.i+2) ev1=scal_el*ev1
3149 el1=fac3*(4.0D0+fac*fac-3.0D0*(cosb*cosb+cosg*cosg))
3152 C 12/26/95 - for the evaluation of multi-body H-bonding interactions
3153 ees0ij=4.0D0+fac*fac-3.0D0*(cosb*cosb+cosg*cosg)
3156 cd write(iout,'(2(2i3,2x),7(1pd12.4)/2(3(1pd12.4),5x)/)')
3157 cd & iteli,i,itelj,j,aaa,bbb,ael6i,ael3i,
3158 cd & 1.0D0/dsqrt(rrmij),evdwij,eesij,
3159 cd & xmedi,ymedi,zmedi,xj,yj,zj
3161 if (energy_dec) then
3162 write (iout,'(a6,2i5,0pf7.3)') 'evdw1',i,j,evdwij
3163 write (iout,'(a6,2i5,0pf7.3)') 'ees',i,j,eesij
3167 C Calculate contributions to the Cartesian gradient.
3170 facvdw=-6*rrmij*(ev1+evdwij)
3171 facel=-3*rrmij*(el1+eesij)
3177 * Radial derivatives. First process both termini of the fragment (i,j)
3183 c ghalf=0.5D0*ggg(k)
3184 c gelc(k,i)=gelc(k,i)+ghalf
3185 c gelc(k,j)=gelc(k,j)+ghalf
3187 c 9/28/08 AL Gradient compotents will be summed only at the end
3189 gelc_long(k,j)=gelc_long(k,j)+ggg(k)
3190 gelc_long(k,i)=gelc_long(k,i)-ggg(k)
3193 * Loop over residues i+1 thru j-1.
3197 cgrad gelc(l,k)=gelc(l,k)+ggg(l)
3204 c ghalf=0.5D0*ggg(k)
3205 c gvdwpp(k,i)=gvdwpp(k,i)+ghalf
3206 c gvdwpp(k,j)=gvdwpp(k,j)+ghalf
3208 c 9/28/08 AL Gradient compotents will be summed only at the end
3210 gvdwpp(k,j)=gvdwpp(k,j)+ggg(k)
3211 gvdwpp(k,i)=gvdwpp(k,i)-ggg(k)
3214 * Loop over residues i+1 thru j-1.
3218 cgrad gvdwpp(l,k)=gvdwpp(l,k)+ggg(l)
3225 fac=-3*rrmij*(facvdw+facvdw+facel)
3230 * Radial derivatives. First process both termini of the fragment (i,j)
3236 c ghalf=0.5D0*ggg(k)
3237 c gelc(k,i)=gelc(k,i)+ghalf
3238 c gelc(k,j)=gelc(k,j)+ghalf
3240 c 9/28/08 AL Gradient compotents will be summed only at the end
3242 gelc_long(k,j)=gelc(k,j)+ggg(k)
3243 gelc_long(k,i)=gelc(k,i)-ggg(k)
3246 * Loop over residues i+1 thru j-1.
3250 cgrad gelc(l,k)=gelc(l,k)+ggg(l)
3253 c 9/28/08 AL Gradient compotents will be summed only at the end
3258 gvdwpp(k,j)=gvdwpp(k,j)+ggg(k)
3259 gvdwpp(k,i)=gvdwpp(k,i)-ggg(k)
3265 ecosa=2.0D0*fac3*fac1+fac4
3268 ecosb=(fac3*(fac1*cosg+cosb)+cosg*fac4)
3269 ecosg=(fac3*(fac1*cosb+cosg)+cosb*fac4)
3271 dcosb(k)=rmij*(dc_norm(k,i)-erij(k)*cosb)
3272 dcosg(k)=rmij*(dc_norm(k,j)-erij(k)*cosg)
3274 cd print '(2i3,2(3(1pd14.5),3x))',i,j,(dcosb(k),k=1,3),
3275 cd & (dcosg(k),k=1,3)
3277 ggg(k)=ecosb*dcosb(k)+ecosg*dcosg(k)
3280 c ghalf=0.5D0*ggg(k)
3281 c gelc(k,i)=gelc(k,i)+ghalf
3282 c & +(ecosa*(dc_norm(k,j)-cosa*dc_norm(k,i))
3283 c & + ecosb*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1)
3284 c gelc(k,j)=gelc(k,j)+ghalf
3285 c & +(ecosa*(dc_norm(k,i)-cosa*dc_norm(k,j))
3286 c & + ecosg*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1)
3290 cgrad gelc(l,k)=gelc(l,k)+ggg(l)
3295 & +(ecosa*(dc_norm(k,j)-cosa*dc_norm(k,i))
3296 & + ecosb*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1)
3298 & +(ecosa*(dc_norm(k,i)-cosa*dc_norm(k,j))
3299 & + ecosg*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1)
3300 gelc_long(k,j)=gelc_long(k,j)+ggg(k)
3301 gelc_long(k,i)=gelc_long(k,i)-ggg(k)
3303 IF (wel_loc.gt.0.0d0 .or. wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0
3304 & .or. wcorr6.gt.0.0d0 .or. wturn3.gt.0.0d0
3305 & .or. wturn4.gt.0.0d0 .or. wturn6.gt.0.0d0) THEN
3307 C 9/25/99 Mixed third-order local-electrostatic terms. The local-interaction
3308 C energy of a peptide unit is assumed in the form of a second-order
3309 C Fourier series in the angles lambda1 and lambda2 (see Nishikawa et al.
3310 C Macromolecules, 1974, 7, 797-806 for definition). This correlation terms
3311 C are computed for EVERY pair of non-contiguous peptide groups.
3313 if (j.lt.nres-1) then
3324 muij(kkk)=mu(k,i)*mu(l,j)
3327 cd write (iout,*) 'EELEC: i',i,' j',j
3328 cd write (iout,*) 'j',j,' j1',j1,' j2',j2
3329 cd write(iout,*) 'muij',muij
3330 ury=scalar(uy(1,i),erij)
3331 urz=scalar(uz(1,i),erij)
3332 vry=scalar(uy(1,j),erij)
3333 vrz=scalar(uz(1,j),erij)
3334 a22=scalar(uy(1,i),uy(1,j))-3*ury*vry
3335 a23=scalar(uy(1,i),uz(1,j))-3*ury*vrz
3336 a32=scalar(uz(1,i),uy(1,j))-3*urz*vry
3337 a33=scalar(uz(1,i),uz(1,j))-3*urz*vrz
3338 fac=dsqrt(-ael6i)*r3ij
3343 cd write (iout,'(4i5,4f10.5)')
3344 cd & i,itortyp(itype(i)),j,itortyp(itype(j)),a22,a23,a32,a33
3345 cd write (iout,'(6f10.5)') (muij(k),k=1,4),fac,eel_loc_ij
3346 cd write (iout,'(2(3f10.5,5x)/2(3f10.5,5x))') uy(:,i),uz(:,i),
3347 cd & uy(:,j),uz(:,j)
3348 cd write (iout,'(4f10.5)')
3349 cd & scalar(uy(1,i),uy(1,j)),scalar(uy(1,i),uz(1,j)),
3350 cd & scalar(uz(1,i),uy(1,j)),scalar(uz(1,i),uz(1,j))
3351 cd write (iout,'(4f10.5)') ury,urz,vry,vrz
3352 cd write (iout,'(9f10.5/)')
3353 cd & fac22,a22,fac23,a23,fac32,a32,fac33,a33,eel_loc_ij
3354 C Derivatives of the elements of A in virtual-bond vectors
3355 call unormderiv(erij(1),unmat(1,1),rmij,erder(1,1))
3357 uryg(k,1)=scalar(erder(1,k),uy(1,i))
3358 uryg(k,2)=scalar(uygrad(1,k,1,i),erij(1))
3359 uryg(k,3)=scalar(uygrad(1,k,2,i),erij(1))
3360 urzg(k,1)=scalar(erder(1,k),uz(1,i))
3361 urzg(k,2)=scalar(uzgrad(1,k,1,i),erij(1))
3362 urzg(k,3)=scalar(uzgrad(1,k,2,i),erij(1))
3363 vryg(k,1)=scalar(erder(1,k),uy(1,j))
3364 vryg(k,2)=scalar(uygrad(1,k,1,j),erij(1))
3365 vryg(k,3)=scalar(uygrad(1,k,2,j),erij(1))
3366 vrzg(k,1)=scalar(erder(1,k),uz(1,j))
3367 vrzg(k,2)=scalar(uzgrad(1,k,1,j),erij(1))
3368 vrzg(k,3)=scalar(uzgrad(1,k,2,j),erij(1))
3370 C Compute radial contributions to the gradient
3388 C Add the contributions coming from er
3391 agg(k,1)=agg(k,1)+fac3*(uryg(k,1)*vry+vryg(k,1)*ury)
3392 agg(k,2)=agg(k,2)+fac3*(uryg(k,1)*vrz+vrzg(k,1)*ury)
3393 agg(k,3)=agg(k,3)+fac3*(urzg(k,1)*vry+vryg(k,1)*urz)
3394 agg(k,4)=agg(k,4)+fac3*(urzg(k,1)*vrz+vrzg(k,1)*urz)
3397 C Derivatives in DC(i)
3398 cgrad ghalf1=0.5d0*agg(k,1)
3399 cgrad ghalf2=0.5d0*agg(k,2)
3400 cgrad ghalf3=0.5d0*agg(k,3)
3401 cgrad ghalf4=0.5d0*agg(k,4)
3402 aggi(k,1)=fac*(scalar(uygrad(1,k,1,i),uy(1,j))
3403 & -3.0d0*uryg(k,2)*vry)!+ghalf1
3404 aggi(k,2)=fac*(scalar(uygrad(1,k,1,i),uz(1,j))
3405 & -3.0d0*uryg(k,2)*vrz)!+ghalf2
3406 aggi(k,3)=fac*(scalar(uzgrad(1,k,1,i),uy(1,j))
3407 & -3.0d0*urzg(k,2)*vry)!+ghalf3
3408 aggi(k,4)=fac*(scalar(uzgrad(1,k,1,i),uz(1,j))
3409 & -3.0d0*urzg(k,2)*vrz)!+ghalf4
3410 C Derivatives in DC(i+1)
3411 aggi1(k,1)=fac*(scalar(uygrad(1,k,2,i),uy(1,j))
3412 & -3.0d0*uryg(k,3)*vry)!+agg(k,1)
3413 aggi1(k,2)=fac*(scalar(uygrad(1,k,2,i),uz(1,j))
3414 & -3.0d0*uryg(k,3)*vrz)!+agg(k,2)
3415 aggi1(k,3)=fac*(scalar(uzgrad(1,k,2,i),uy(1,j))
3416 & -3.0d0*urzg(k,3)*vry)!+agg(k,3)
3417 aggi1(k,4)=fac*(scalar(uzgrad(1,k,2,i),uz(1,j))
3418 & -3.0d0*urzg(k,3)*vrz)!+agg(k,4)
3419 C Derivatives in DC(j)
3420 aggj(k,1)=fac*(scalar(uygrad(1,k,1,j),uy(1,i))
3421 & -3.0d0*vryg(k,2)*ury)!+ghalf1
3422 aggj(k,2)=fac*(scalar(uzgrad(1,k,1,j),uy(1,i))
3423 & -3.0d0*vrzg(k,2)*ury)!+ghalf2
3424 aggj(k,3)=fac*(scalar(uygrad(1,k,1,j),uz(1,i))
3425 & -3.0d0*vryg(k,2)*urz)!+ghalf3
3426 aggj(k,4)=fac*(scalar(uzgrad(1,k,1,j),uz(1,i))
3427 & -3.0d0*vrzg(k,2)*urz)!+ghalf4
3428 C Derivatives in DC(j+1) or DC(nres-1)
3429 aggj1(k,1)=fac*(scalar(uygrad(1,k,2,j),uy(1,i))
3430 & -3.0d0*vryg(k,3)*ury)
3431 aggj1(k,2)=fac*(scalar(uzgrad(1,k,2,j),uy(1,i))
3432 & -3.0d0*vrzg(k,3)*ury)
3433 aggj1(k,3)=fac*(scalar(uygrad(1,k,2,j),uz(1,i))
3434 & -3.0d0*vryg(k,3)*urz)
3435 aggj1(k,4)=fac*(scalar(uzgrad(1,k,2,j),uz(1,i))
3436 & -3.0d0*vrzg(k,3)*urz)
3437 cgrad if (j.eq.nres-1 .and. i.lt.j-2) then
3439 cgrad aggj1(k,l)=aggj1(k,l)+agg(k,l)
3452 aggi(k,l)=-aggi(k,l)
3453 aggi1(k,l)=-aggi1(k,l)
3454 aggj(k,l)=-aggj(k,l)
3455 aggj1(k,l)=-aggj1(k,l)
3458 if (j.lt.nres-1) then
3464 aggi(k,l)=-aggi(k,l)
3465 aggi1(k,l)=-aggi1(k,l)
3466 aggj(k,l)=-aggj(k,l)
3467 aggj1(k,l)=-aggj1(k,l)
3478 aggi(k,l)=-aggi(k,l)
3479 aggi1(k,l)=-aggi1(k,l)
3480 aggj(k,l)=-aggj(k,l)
3481 aggj1(k,l)=-aggj1(k,l)
3486 IF (wel_loc.gt.0.0d0) THEN
3487 C Contribution to the local-electrostatic energy coming from the i-j pair
3488 eel_loc_ij=a22*muij(1)+a23*muij(2)+a32*muij(3)
3490 cd write (iout,*) 'i',i,' j',j,' eel_loc_ij',eel_loc_ij
3492 if (energy_dec) write (iout,'(a6,2i5,0pf7.3)')
3493 & 'eelloc',i,j,eel_loc_ij
3495 eel_loc=eel_loc+eel_loc_ij
3496 C Partial derivatives in virtual-bond dihedral angles gamma
3498 & gel_loc_loc(i-1)=gel_loc_loc(i-1)+
3499 & a22*muder(1,i)*mu(1,j)+a23*muder(1,i)*mu(2,j)
3500 & +a32*muder(2,i)*mu(1,j)+a33*muder(2,i)*mu(2,j)
3501 gel_loc_loc(j-1)=gel_loc_loc(j-1)+
3502 & a22*mu(1,i)*muder(1,j)+a23*mu(1,i)*muder(2,j)
3503 & +a32*mu(2,i)*muder(1,j)+a33*mu(2,i)*muder(2,j)
3504 C Derivatives of eello in DC(i+1) thru DC(j-1) or DC(nres-2)
3506 ggg(l)=agg(l,1)*muij(1)+
3507 & agg(l,2)*muij(2)+agg(l,3)*muij(3)+agg(l,4)*muij(4)
3508 gel_loc_long(l,j)=gel_loc_long(l,j)+ggg(l)
3509 gel_loc_long(l,i)=gel_loc_long(l,i)-ggg(l)
3510 cgrad ghalf=0.5d0*ggg(l)
3511 cgrad gel_loc(l,i)=gel_loc(l,i)+ghalf
3512 cgrad gel_loc(l,j)=gel_loc(l,j)+ghalf
3516 cgrad gel_loc(l,k)=gel_loc(l,k)+ggg(l)
3519 C Remaining derivatives of eello
3521 gel_loc(l,i)=gel_loc(l,i)+aggi(l,1)*muij(1)+
3522 & aggi(l,2)*muij(2)+aggi(l,3)*muij(3)+aggi(l,4)*muij(4)
3523 gel_loc(l,i+1)=gel_loc(l,i+1)+aggi1(l,1)*muij(1)+
3524 & aggi1(l,2)*muij(2)+aggi1(l,3)*muij(3)+aggi1(l,4)*muij(4)
3525 gel_loc(l,j)=gel_loc(l,j)+aggj(l,1)*muij(1)+
3526 & aggj(l,2)*muij(2)+aggj(l,3)*muij(3)+aggj(l,4)*muij(4)
3527 gel_loc(l,j1)=gel_loc(l,j1)+aggj1(l,1)*muij(1)+
3528 & aggj1(l,2)*muij(2)+aggj1(l,3)*muij(3)+aggj1(l,4)*muij(4)
3531 C Change 12/26/95 to calculate four-body contributions to H-bonding energy
3532 c if (j.gt.i+1 .and. num_conti.le.maxconts) then
3533 if (wcorr+wcorr4+wcorr5+wcorr6.gt.0.0d0
3534 & .and. num_conti.le.maxconts) then
3535 c write (iout,*) i,j," entered corr"
3537 C Calculate the contact function. The ith column of the array JCONT will
3538 C contain the numbers of atoms that make contacts with the atom I (of numbers
3539 C greater than I). The arrays FACONT and GACONT will contain the values of
3540 C the contact function and its derivative.
3541 c r0ij=1.02D0*rpp(iteli,itelj)
3542 c r0ij=1.11D0*rpp(iteli,itelj)
3543 r0ij=2.20D0*rpp(iteli,itelj)
3544 c r0ij=1.55D0*rpp(iteli,itelj)
3545 call gcont(rij,r0ij,1.0D0,0.2d0*r0ij,fcont,fprimcont)
3546 if (fcont.gt.0.0D0) then
3547 num_conti=num_conti+1
3548 if (num_conti.gt.maxconts) then
3549 write (iout,*) 'WARNING - max. # of contacts exceeded;',
3550 & ' will skip next contacts for this conf.'
3552 jcont_hb(num_conti,i)=j
3553 cd write (iout,*) "i",i," j",j," num_conti",num_conti,
3554 cd & " jcont_hb",jcont_hb(num_conti,i)
3555 IF (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or.
3556 & wcorr6.gt.0.0d0 .or. wturn6.gt.0.0d0) THEN
3557 C 9/30/99 (AL) - store components necessary to evaluate higher-order loc-el
3559 d_cont(num_conti,i)=rij
3560 cd write (2,'(3e15.5)') rij,r0ij+0.2d0*r0ij,rij
3561 C --- Electrostatic-interaction matrix ---
3562 a_chuj(1,1,num_conti,i)=a22
3563 a_chuj(1,2,num_conti,i)=a23
3564 a_chuj(2,1,num_conti,i)=a32
3565 a_chuj(2,2,num_conti,i)=a33
3566 C --- Gradient of rij
3568 grij_hb_cont(kkk,num_conti,i)=erij(kkk)
3575 a_chuj_der(k,l,m,1,num_conti,i)=agg(m,kkll)
3576 a_chuj_der(k,l,m,2,num_conti,i)=aggi(m,kkll)
3577 a_chuj_der(k,l,m,3,num_conti,i)=aggi1(m,kkll)
3578 a_chuj_der(k,l,m,4,num_conti,i)=aggj(m,kkll)
3579 a_chuj_der(k,l,m,5,num_conti,i)=aggj1(m,kkll)
3584 IF (wcorr4.eq.0.0d0 .and. wcorr.gt.0.0d0) THEN
3585 C Calculate contact energies
3587 wij=cosa-3.0D0*cosb*cosg
3590 c fac3=dsqrt(-ael6i)/r0ij**3
3591 fac3=dsqrt(-ael6i)*r3ij
3592 c ees0pij=dsqrt(4.0D0+cosa4+wij*wij-3.0D0*cosbg1*cosbg1)
3593 ees0tmp=4.0D0+cosa4+wij*wij-3.0D0*cosbg1*cosbg1
3594 if (ees0tmp.gt.0) then
3595 ees0pij=dsqrt(ees0tmp)
3599 c ees0mij=dsqrt(4.0D0-cosa4+wij*wij-3.0D0*cosbg2*cosbg2)
3600 ees0tmp=4.0D0-cosa4+wij*wij-3.0D0*cosbg2*cosbg2
3601 if (ees0tmp.gt.0) then
3602 ees0mij=dsqrt(ees0tmp)
3607 ees0p(num_conti,i)=0.5D0*fac3*(ees0pij+ees0mij)
3608 ees0m(num_conti,i)=0.5D0*fac3*(ees0pij-ees0mij)
3609 C Diagnostics. Comment out or remove after debugging!
3610 c ees0p(num_conti,i)=0.5D0*fac3*ees0pij
3611 c ees0m(num_conti,i)=0.5D0*fac3*ees0mij
3612 c ees0m(num_conti,i)=0.0D0
3614 c write (iout,*) 'i=',i,' j=',j,' rij=',rij,' r0ij=',r0ij,
3615 c & ' ees0ij=',ees0p(num_conti,i),ees0m(num_conti,i),' fcont=',fcont
3616 C Angular derivatives of the contact function
3617 ees0pij1=fac3/ees0pij
3618 ees0mij1=fac3/ees0mij
3619 fac3p=-3.0D0*fac3*rrmij
3620 ees0pijp=0.5D0*fac3p*(ees0pij+ees0mij)
3621 ees0mijp=0.5D0*fac3p*(ees0pij-ees0mij)
3623 ecosa1= ees0pij1*( 1.0D0+0.5D0*wij)
3624 ecosb1=-1.5D0*ees0pij1*(wij*cosg+cosbg1)
3625 ecosg1=-1.5D0*ees0pij1*(wij*cosb+cosbg1)
3626 ecosa2= ees0mij1*(-1.0D0+0.5D0*wij)
3627 ecosb2=-1.5D0*ees0mij1*(wij*cosg+cosbg2)
3628 ecosg2=-1.5D0*ees0mij1*(wij*cosb-cosbg2)
3629 ecosap=ecosa1+ecosa2
3630 ecosbp=ecosb1+ecosb2
3631 ecosgp=ecosg1+ecosg2
3632 ecosam=ecosa1-ecosa2
3633 ecosbm=ecosb1-ecosb2
3634 ecosgm=ecosg1-ecosg2
3643 facont_hb(num_conti,i)=fcont
3644 fprimcont=fprimcont/rij
3645 cd facont_hb(num_conti,i)=1.0D0
3646 C Following line is for diagnostics.
3649 dcosb(k)=rmij*(dc_norm(k,i)-erij(k)*cosb)
3650 dcosg(k)=rmij*(dc_norm(k,j)-erij(k)*cosg)
3653 gggp(k)=ecosbp*dcosb(k)+ecosgp*dcosg(k)
3654 gggm(k)=ecosbm*dcosb(k)+ecosgm*dcosg(k)
3656 gggp(1)=gggp(1)+ees0pijp*xj
3657 gggp(2)=gggp(2)+ees0pijp*yj
3658 gggp(3)=gggp(3)+ees0pijp*zj
3659 gggm(1)=gggm(1)+ees0mijp*xj
3660 gggm(2)=gggm(2)+ees0mijp*yj
3661 gggm(3)=gggm(3)+ees0mijp*zj
3662 C Derivatives due to the contact function
3663 gacont_hbr(1,num_conti,i)=fprimcont*xj
3664 gacont_hbr(2,num_conti,i)=fprimcont*yj
3665 gacont_hbr(3,num_conti,i)=fprimcont*zj
3668 c 10/24/08 cgrad and ! comments indicate the parts of the code removed
3669 c following the change of gradient-summation algorithm.
3671 cgrad ghalfp=0.5D0*gggp(k)
3672 cgrad ghalfm=0.5D0*gggm(k)
3673 gacontp_hb1(k,num_conti,i)=!ghalfp
3674 & +(ecosap*(dc_norm(k,j)-cosa*dc_norm(k,i))
3675 & + ecosbp*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1)
3676 gacontp_hb2(k,num_conti,i)=!ghalfp
3677 & +(ecosap*(dc_norm(k,i)-cosa*dc_norm(k,j))
3678 & + ecosgp*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1)
3679 gacontp_hb3(k,num_conti,i)=gggp(k)
3680 gacontm_hb1(k,num_conti,i)=!ghalfm
3681 & +(ecosam*(dc_norm(k,j)-cosa*dc_norm(k,i))
3682 & + ecosbm*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1)
3683 gacontm_hb2(k,num_conti,i)=!ghalfm
3684 & +(ecosam*(dc_norm(k,i)-cosa*dc_norm(k,j))
3685 & + ecosgm*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1)
3686 gacontm_hb3(k,num_conti,i)=gggm(k)
3688 C Diagnostics. Comment out or remove after debugging!
3690 cdiag gacontp_hb1(k,num_conti,i)=0.0D0
3691 cdiag gacontp_hb2(k,num_conti,i)=0.0D0
3692 cdiag gacontp_hb3(k,num_conti,i)=0.0D0
3693 cdiag gacontm_hb1(k,num_conti,i)=0.0D0
3694 cdiag gacontm_hb2(k,num_conti,i)=0.0D0
3695 cdiag gacontm_hb3(k,num_conti,i)=0.0D0
3698 endif ! num_conti.le.maxconts
3701 if (wturn3.gt.0.0d0 .or. wturn4.gt.0.0d0) then
3704 ghalf=0.5d0*agg(l,k)
3705 aggi(l,k)=aggi(l,k)+ghalf
3706 aggi1(l,k)=aggi1(l,k)+agg(l,k)
3707 aggj(l,k)=aggj(l,k)+ghalf
3710 if (j.eq.nres-1 .and. i.lt.j-2) then
3713 aggj1(l,k)=aggj1(l,k)+agg(l,k)
3718 c t_eelecij=t_eelecij+MPI_Wtime()-time00
3721 C-----------------------------------------------------------------------------
3722 subroutine eturn3(i,eello_turn3)
3723 C Third- and fourth-order contributions from turns
3724 implicit real*8 (a-h,o-z)
3725 include 'DIMENSIONS'
3726 include 'COMMON.IOUNITS'
3727 include 'COMMON.GEO'
3728 include 'COMMON.VAR'
3729 include 'COMMON.LOCAL'
3730 include 'COMMON.CHAIN'
3731 include 'COMMON.DERIV'
3732 include 'COMMON.INTERACT'
3733 include 'COMMON.CONTACTS'
3734 include 'COMMON.TORSION'
3735 include 'COMMON.VECTORS'
3736 include 'COMMON.FFIELD'
3737 include 'COMMON.CONTROL'
3739 double precision auxmat(2,2),auxmat1(2,2),auxmat2(2,2),pizda(2,2),
3740 & e1t(2,2),e2t(2,2),e3t(2,2),e1tder(2,2),e2tder(2,2),e3tder(2,2),
3741 & e1a(2,2),ae3(2,2),ae3e2(2,2),auxvec(2),auxvec1(2)
3742 double precision agg(3,4),aggi(3,4),aggi1(3,4),
3743 & aggj(3,4),aggj1(3,4),a_temp(2,2),auxmat3(2,2)
3744 common /locel/ a_temp,agg,aggi,aggi1,aggj,aggj1,a22,a23,a32,a33,
3745 & dxi,dyi,dzi,dx_normi,dy_normi,dz_normi,xmedi,ymedi,zmedi,
3748 c write (iout,*) "eturn3",i,j,j1,j2
3753 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
3755 C Third-order contributions
3762 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
3763 cd call checkint_turn3(i,a_temp,eello_turn3_num)
3764 call matmat2(EUg(1,1,i+1),EUg(1,1,i+2),auxmat(1,1))
3765 call transpose2(auxmat(1,1),auxmat1(1,1))
3766 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
3767 eello_turn3=eello_turn3+0.5d0*(pizda(1,1)+pizda(2,2))
3768 if (energy_dec) write (iout,'(a6,2i5,0pf7.3)')
3769 & 'eturn3',i,j,0.5d0*(pizda(1,1)+pizda(2,2))
3770 cd write (2,*) 'i,',i,' j',j,'eello_turn3',
3771 cd & 0.5d0*(pizda(1,1)+pizda(2,2)),
3772 cd & ' eello_turn3_num',4*eello_turn3_num
3773 C Derivatives in gamma(i)
3774 call matmat2(EUgder(1,1,i+1),EUg(1,1,i+2),auxmat2(1,1))
3775 call transpose2(auxmat2(1,1),auxmat3(1,1))
3776 call matmat2(a_temp(1,1),auxmat3(1,1),pizda(1,1))
3777 gel_loc_turn3(i)=gel_loc_turn3(i)+0.5d0*(pizda(1,1)+pizda(2,2))
3778 C Derivatives in gamma(i+1)
3779 call matmat2(EUg(1,1,i+1),EUgder(1,1,i+2),auxmat2(1,1))
3780 call transpose2(auxmat2(1,1),auxmat3(1,1))
3781 call matmat2(a_temp(1,1),auxmat3(1,1),pizda(1,1))
3782 gel_loc_turn3(i+1)=gel_loc_turn3(i+1)
3783 & +0.5d0*(pizda(1,1)+pizda(2,2))
3784 C Cartesian derivatives
3786 c ghalf1=0.5d0*agg(l,1)
3787 c ghalf2=0.5d0*agg(l,2)
3788 c ghalf3=0.5d0*agg(l,3)
3789 c ghalf4=0.5d0*agg(l,4)
3790 a_temp(1,1)=aggi(l,1)!+ghalf1
3791 a_temp(1,2)=aggi(l,2)!+ghalf2
3792 a_temp(2,1)=aggi(l,3)!+ghalf3
3793 a_temp(2,2)=aggi(l,4)!+ghalf4
3794 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
3795 gcorr3_turn(l,i)=gcorr3_turn(l,i)
3796 & +0.5d0*(pizda(1,1)+pizda(2,2))
3797 a_temp(1,1)=aggi1(l,1)!+agg(l,1)
3798 a_temp(1,2)=aggi1(l,2)!+agg(l,2)
3799 a_temp(2,1)=aggi1(l,3)!+agg(l,3)
3800 a_temp(2,2)=aggi1(l,4)!+agg(l,4)
3801 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
3802 gcorr3_turn(l,i+1)=gcorr3_turn(l,i+1)
3803 & +0.5d0*(pizda(1,1)+pizda(2,2))
3804 a_temp(1,1)=aggj(l,1)!+ghalf1
3805 a_temp(1,2)=aggj(l,2)!+ghalf2
3806 a_temp(2,1)=aggj(l,3)!+ghalf3
3807 a_temp(2,2)=aggj(l,4)!+ghalf4
3808 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
3809 gcorr3_turn(l,j)=gcorr3_turn(l,j)
3810 & +0.5d0*(pizda(1,1)+pizda(2,2))
3811 a_temp(1,1)=aggj1(l,1)
3812 a_temp(1,2)=aggj1(l,2)
3813 a_temp(2,1)=aggj1(l,3)
3814 a_temp(2,2)=aggj1(l,4)
3815 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
3816 gcorr3_turn(l,j1)=gcorr3_turn(l,j1)
3817 & +0.5d0*(pizda(1,1)+pizda(2,2))
3821 C-------------------------------------------------------------------------------
3822 subroutine eturn4(i,eello_turn4)
3823 C Third- and fourth-order contributions from turns
3824 implicit real*8 (a-h,o-z)
3825 include 'DIMENSIONS'
3826 include 'COMMON.IOUNITS'
3827 include 'COMMON.GEO'
3828 include 'COMMON.VAR'
3829 include 'COMMON.LOCAL'
3830 include 'COMMON.CHAIN'
3831 include 'COMMON.DERIV'
3832 include 'COMMON.INTERACT'
3833 include 'COMMON.CONTACTS'
3834 include 'COMMON.TORSION'
3835 include 'COMMON.VECTORS'
3836 include 'COMMON.FFIELD'
3837 include 'COMMON.CONTROL'
3839 double precision auxmat(2,2),auxmat1(2,2),auxmat2(2,2),pizda(2,2),
3840 & e1t(2,2),e2t(2,2),e3t(2,2),e1tder(2,2),e2tder(2,2),e3tder(2,2),
3841 & e1a(2,2),ae3(2,2),ae3e2(2,2),auxvec(2),auxvec1(2)
3842 double precision agg(3,4),aggi(3,4),aggi1(3,4),
3843 & aggj(3,4),aggj1(3,4),a_temp(2,2),auxmat3(2,2)
3844 common /locel/ a_temp,agg,aggi,aggi1,aggj,aggj1,a22,a23,a32,a33,
3845 & dxi,dyi,dzi,dx_normi,dy_normi,dz_normi,xmedi,ymedi,zmedi,
3848 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
3850 C Fourth-order contributions
3858 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
3859 cd call checkint_turn4(i,a_temp,eello_turn4_num)
3860 c write (iout,*) "eturn4 i",i," j",j," j1",j1," j2",j2
3865 iti1=itortyp(itype(i+1))
3866 iti2=itortyp(itype(i+2))
3867 iti3=itortyp(itype(i+3))
3868 c write(iout,*) "iti1",iti1," iti2",iti2," iti3",iti3
3869 call transpose2(EUg(1,1,i+1),e1t(1,1))
3870 call transpose2(Eug(1,1,i+2),e2t(1,1))
3871 call transpose2(Eug(1,1,i+3),e3t(1,1))
3872 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
3873 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
3874 s1=scalar2(b1(1,iti2),auxvec(1))
3875 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
3876 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
3877 s2=scalar2(b1(1,iti1),auxvec(1))
3878 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
3879 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
3880 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3881 eello_turn4=eello_turn4-(s1+s2+s3)
3882 if (energy_dec) write (iout,'(a6,2i5,0pf7.3)')
3883 & 'eturn4',i,j,-(s1+s2+s3)
3884 cd write (2,*) 'i,',i,' j',j,'eello_turn4',-(s1+s2+s3),
3885 cd & ' eello_turn4_num',8*eello_turn4_num
3886 C Derivatives in gamma(i)
3887 call transpose2(EUgder(1,1,i+1),e1tder(1,1))
3888 call matmat2(e1tder(1,1),a_temp(1,1),auxmat(1,1))
3889 call matvec2(auxmat(1,1),Ub2(1,i+3),auxvec(1))
3890 s1=scalar2(b1(1,iti2),auxvec(1))
3891 call matmat2(ae3e2(1,1),e1tder(1,1),pizda(1,1))
3892 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3893 gel_loc_turn4(i)=gel_loc_turn4(i)-(s1+s3)
3894 C Derivatives in gamma(i+1)
3895 call transpose2(EUgder(1,1,i+2),e2tder(1,1))
3896 call matvec2(ae3(1,1),Ub2der(1,i+2),auxvec(1))
3897 s2=scalar2(b1(1,iti1),auxvec(1))
3898 call matmat2(ae3(1,1),e2tder(1,1),auxmat(1,1))
3899 call matmat2(auxmat(1,1),e1t(1,1),pizda(1,1))
3900 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3901 gel_loc_turn4(i+1)=gel_loc_turn4(i+1)-(s2+s3)
3902 C Derivatives in gamma(i+2)
3903 call transpose2(EUgder(1,1,i+3),e3tder(1,1))
3904 call matvec2(e1a(1,1),Ub2der(1,i+3),auxvec(1))
3905 s1=scalar2(b1(1,iti2),auxvec(1))
3906 call matmat2(a_temp(1,1),e3tder(1,1),auxmat(1,1))
3907 call matvec2(auxmat(1,1),Ub2(1,i+2),auxvec(1))
3908 s2=scalar2(b1(1,iti1),auxvec(1))
3909 call matmat2(auxmat(1,1),e2t(1,1),auxmat3(1,1))
3910 call matmat2(auxmat3(1,1),e1t(1,1),pizda(1,1))
3911 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3912 gel_loc_turn4(i+2)=gel_loc_turn4(i+2)-(s1+s2+s3)
3913 C Cartesian derivatives
3914 C Derivatives of this turn contributions in DC(i+2)
3915 if (j.lt.nres-1) then
3917 a_temp(1,1)=agg(l,1)
3918 a_temp(1,2)=agg(l,2)
3919 a_temp(2,1)=agg(l,3)
3920 a_temp(2,2)=agg(l,4)
3921 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
3922 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
3923 s1=scalar2(b1(1,iti2),auxvec(1))
3924 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
3925 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
3926 s2=scalar2(b1(1,iti1),auxvec(1))
3927 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
3928 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
3929 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3931 gcorr4_turn(l,i+2)=gcorr4_turn(l,i+2)-(s1+s2+s3)
3934 C Remaining derivatives of this turn contribution
3936 a_temp(1,1)=aggi(l,1)
3937 a_temp(1,2)=aggi(l,2)
3938 a_temp(2,1)=aggi(l,3)
3939 a_temp(2,2)=aggi(l,4)
3940 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
3941 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
3942 s1=scalar2(b1(1,iti2),auxvec(1))
3943 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
3944 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
3945 s2=scalar2(b1(1,iti1),auxvec(1))
3946 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
3947 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
3948 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3949 gcorr4_turn(l,i)=gcorr4_turn(l,i)-(s1+s2+s3)
3950 a_temp(1,1)=aggi1(l,1)
3951 a_temp(1,2)=aggi1(l,2)
3952 a_temp(2,1)=aggi1(l,3)
3953 a_temp(2,2)=aggi1(l,4)
3954 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
3955 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
3956 s1=scalar2(b1(1,iti2),auxvec(1))
3957 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
3958 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
3959 s2=scalar2(b1(1,iti1),auxvec(1))
3960 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
3961 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
3962 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3963 gcorr4_turn(l,i+1)=gcorr4_turn(l,i+1)-(s1+s2+s3)
3964 a_temp(1,1)=aggj(l,1)
3965 a_temp(1,2)=aggj(l,2)
3966 a_temp(2,1)=aggj(l,3)
3967 a_temp(2,2)=aggj(l,4)
3968 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
3969 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
3970 s1=scalar2(b1(1,iti2),auxvec(1))
3971 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
3972 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
3973 s2=scalar2(b1(1,iti1),auxvec(1))
3974 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
3975 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
3976 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3977 gcorr4_turn(l,j)=gcorr4_turn(l,j)-(s1+s2+s3)
3978 a_temp(1,1)=aggj1(l,1)
3979 a_temp(1,2)=aggj1(l,2)
3980 a_temp(2,1)=aggj1(l,3)
3981 a_temp(2,2)=aggj1(l,4)
3982 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
3983 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
3984 s1=scalar2(b1(1,iti2),auxvec(1))
3985 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
3986 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
3987 s2=scalar2(b1(1,iti1),auxvec(1))
3988 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
3989 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
3990 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3991 c write (iout,*) "s1",s1," s2",s2," s3",s3," s1+s2+s3",s1+s2+s3
3992 gcorr4_turn(l,j1)=gcorr4_turn(l,j1)-(s1+s2+s3)
3996 C-----------------------------------------------------------------------------
3997 subroutine vecpr(u,v,w)
3998 implicit real*8(a-h,o-z)
3999 dimension u(3),v(3),w(3)
4000 w(1)=u(2)*v(3)-u(3)*v(2)
4001 w(2)=-u(1)*v(3)+u(3)*v(1)
4002 w(3)=u(1)*v(2)-u(2)*v(1)
4005 C-----------------------------------------------------------------------------
4006 subroutine unormderiv(u,ugrad,unorm,ungrad)
4007 C This subroutine computes the derivatives of a normalized vector u, given
4008 C the derivatives computed without normalization conditions, ugrad. Returns
4011 double precision u(3),ugrad(3,3),unorm,ungrad(3,3)
4012 double precision vec(3)
4013 double precision scalar
4015 c write (2,*) 'ugrad',ugrad
4018 vec(i)=scalar(ugrad(1,i),u(1))
4020 c write (2,*) 'vec',vec
4023 ungrad(j,i)=(ugrad(j,i)-u(j)*vec(i))*unorm
4026 c write (2,*) 'ungrad',ungrad
4029 C-----------------------------------------------------------------------------
4030 subroutine escp_soft_sphere(evdw2,evdw2_14)
4032 C This subroutine calculates the excluded-volume interaction energy between
4033 C peptide-group centers and side chains and its gradient in virtual-bond and
4034 C side-chain vectors.
4036 implicit real*8 (a-h,o-z)
4037 include 'DIMENSIONS'
4038 include 'COMMON.GEO'
4039 include 'COMMON.VAR'
4040 include 'COMMON.LOCAL'
4041 include 'COMMON.CHAIN'
4042 include 'COMMON.DERIV'
4043 include 'COMMON.INTERACT'
4044 include 'COMMON.FFIELD'
4045 include 'COMMON.IOUNITS'
4046 include 'COMMON.CONTROL'
4051 cd print '(a)','Enter ESCP'
4052 cd write (iout,*) 'iatscp_s=',iatscp_s,' iatscp_e=',iatscp_e
4053 do i=iatscp_s,iatscp_e
4055 xi=0.5D0*(c(1,i)+c(1,i+1))
4056 yi=0.5D0*(c(2,i)+c(2,i+1))
4057 zi=0.5D0*(c(3,i)+c(3,i+1))
4059 do iint=1,nscp_gr(i)
4061 do j=iscpstart(i,iint),iscpend(i,iint)
4063 C Uncomment following three lines for SC-p interactions
4067 C Uncomment following three lines for Ca-p interactions
4071 rij=xj*xj+yj*yj+zj*zj
4074 if (rij.lt.r0ijsq) then
4075 evdwij=0.25d0*(rij-r0ijsq)**2
4083 C Calculate contributions to the gradient in the virtual-bond and SC vectors.
4088 cgrad if (j.lt.i) then
4089 cd write (iout,*) 'j<i'
4090 C Uncomment following three lines for SC-p interactions
4092 c gradx_scp(k,j)=gradx_scp(k,j)+ggg(k)
4095 cd write (iout,*) 'j>i'
4097 cgrad ggg(k)=-ggg(k)
4098 C Uncomment following line for SC-p interactions
4099 c gradx_scp(k,j)=gradx_scp(k,j)-ggg(k)
4103 cgrad gvdwc_scp(k,i)=gvdwc_scp(k,i)-0.5D0*ggg(k)
4105 cgrad kstart=min0(i+1,j)
4106 cgrad kend=max0(i-1,j-1)
4107 cd write (iout,*) 'i=',i,' j=',j,' kstart=',kstart,' kend=',kend
4108 cd write (iout,*) ggg(1),ggg(2),ggg(3)
4109 cgrad do k=kstart,kend
4111 cgrad gvdwc_scp(l,k)=gvdwc_scp(l,k)-ggg(l)
4115 gvdwc_scpp(k,i)=gvdwc_scpp(k,i)-ggg(k)
4116 gvdwc_scp(k,j)=gvdwc_scp(k,j)+ggg(k)
4124 C-----------------------------------------------------------------------------
4125 subroutine escp(evdw2,evdw2_14)
4127 C This subroutine calculates the excluded-volume interaction energy between
4128 C peptide-group centers and side chains and its gradient in virtual-bond and
4129 C side-chain vectors.
4131 implicit real*8 (a-h,o-z)
4132 include 'DIMENSIONS'
4133 include 'COMMON.GEO'
4134 include 'COMMON.VAR'
4135 include 'COMMON.LOCAL'
4136 include 'COMMON.CHAIN'
4137 include 'COMMON.DERIV'
4138 include 'COMMON.INTERACT'
4139 include 'COMMON.FFIELD'
4140 include 'COMMON.IOUNITS'
4141 include 'COMMON.CONTROL'
4145 cd print '(a)','Enter ESCP'
4146 cd write (iout,*) 'iatscp_s=',iatscp_s,' iatscp_e=',iatscp_e
4147 do i=iatscp_s,iatscp_e
4149 xi=0.5D0*(c(1,i)+c(1,i+1))
4150 yi=0.5D0*(c(2,i)+c(2,i+1))
4151 zi=0.5D0*(c(3,i)+c(3,i+1))
4153 do iint=1,nscp_gr(i)
4155 do j=iscpstart(i,iint),iscpend(i,iint)
4157 C Uncomment following three lines for SC-p interactions
4161 C Uncomment following three lines for Ca-p interactions
4165 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
4167 e1=fac*fac*aad(itypj,iteli)
4168 e2=fac*bad(itypj,iteli)
4169 if (iabs(j-i) .le. 2) then
4172 evdw2_14=evdw2_14+e1+e2
4176 if (energy_dec) write (iout,'(a6,2i5,0pf7.3)')
4177 & 'evdw2',i,j,evdwij
4179 C Calculate contributions to the gradient in the virtual-bond and SC vectors.
4181 fac=-(evdwij+e1)*rrij
4185 cgrad if (j.lt.i) then
4186 cd write (iout,*) 'j<i'
4187 C Uncomment following three lines for SC-p interactions
4189 c gradx_scp(k,j)=gradx_scp(k,j)+ggg(k)
4192 cd write (iout,*) 'j>i'
4194 cgrad ggg(k)=-ggg(k)
4195 C Uncomment following line for SC-p interactions
4196 ccgrad gradx_scp(k,j)=gradx_scp(k,j)-ggg(k)
4197 c gradx_scp(k,j)=gradx_scp(k,j)+ggg(k)
4201 cgrad gvdwc_scp(k,i)=gvdwc_scp(k,i)-0.5D0*ggg(k)
4203 cgrad kstart=min0(i+1,j)
4204 cgrad kend=max0(i-1,j-1)
4205 cd write (iout,*) 'i=',i,' j=',j,' kstart=',kstart,' kend=',kend
4206 cd write (iout,*) ggg(1),ggg(2),ggg(3)
4207 cgrad do k=kstart,kend
4209 cgrad gvdwc_scp(l,k)=gvdwc_scp(l,k)-ggg(l)
4213 gvdwc_scpp(k,i)=gvdwc_scpp(k,i)-ggg(k)
4214 gvdwc_scp(k,j)=gvdwc_scp(k,j)+ggg(k)
4222 gvdwc_scp(j,i)=expon*gvdwc_scp(j,i)
4223 gvdwc_scpp(j,i)=expon*gvdwc_scpp(j,i)
4224 gradx_scp(j,i)=expon*gradx_scp(j,i)
4227 C******************************************************************************
4231 C To save time the factor EXPON has been extracted from ALL components
4232 C of GVDWC and GRADX. Remember to multiply them by this factor before further
4235 C******************************************************************************
4238 C--------------------------------------------------------------------------
4239 subroutine edis(ehpb)
4241 C Evaluate bridge-strain energy and its gradient in virtual-bond and SC vectors.
4243 implicit real*8 (a-h,o-z)
4244 include 'DIMENSIONS'
4245 include 'COMMON.SBRIDGE'
4246 include 'COMMON.CHAIN'
4247 include 'COMMON.DERIV'
4248 include 'COMMON.VAR'
4249 include 'COMMON.INTERACT'
4250 include 'COMMON.IOUNITS'
4253 cd write(iout,*)'edis: nhpb=',nhpb,' fbr=',fbr
4254 cd write(iout,*)'link_start=',link_start,' link_end=',link_end
4255 if (link_end.eq.0) return
4256 do i=link_start,link_end
4257 C If ihpb(i) and jhpb(i) > NRES, this is a SC-SC distance, otherwise a
4258 C CA-CA distance used in regularization of structure.
4261 C iii and jjj point to the residues for which the distance is assigned.
4262 if (ii.gt.nres) then
4269 cd write (iout,*) "i",i," ii",ii," iii",iii," jj",jj," jjj",jjj
4270 C 24/11/03 AL: SS bridges handled separately because of introducing a specific
4271 C distance and angle dependent SS bond potential.
4272 if (ii.gt.nres .and. itype(iii).eq.1 .and. itype(jjj).eq.1) then
4273 call ssbond_ene(iii,jjj,eij)
4275 cd write (iout,*) "eij",eij
4277 C Calculate the distance between the two points and its difference from the
4281 C Get the force constant corresponding to this distance.
4283 C Calculate the contribution to energy.
4284 ehpb=ehpb+waga*rdis*rdis
4286 C Evaluate gradient.
4289 cd print *,'i=',i,' ii=',ii,' jj=',jj,' dhpb=',dhpb(i),' dd=',dd,
4290 cd & ' waga=',waga,' fac=',fac
4292 ggg(j)=fac*(c(j,jj)-c(j,ii))
4294 cd print '(i3,3(1pe14.5))',i,(ggg(j),j=1,3)
4295 C If this is a SC-SC distance, we need to calculate the contributions to the
4296 C Cartesian gradient in the SC vectors (ghpbx).
4299 ghpbx(j,iii)=ghpbx(j,iii)-ggg(j)
4300 ghpbx(j,jjj)=ghpbx(j,jjj)+ggg(j)
4303 cgrad do j=iii,jjj-1
4305 cgrad ghpbc(k,j)=ghpbc(k,j)+ggg(k)
4309 ghpbc(k,jjj)=ghpbc(k,jjj)+ggg(k)
4310 ghpbc(k,iii)=ghpbc(k,iii)-ggg(k)
4317 C--------------------------------------------------------------------------
4318 subroutine ssbond_ene(i,j,eij)
4320 C Calculate the distance and angle dependent SS-bond potential energy
4321 C using a free-energy function derived based on RHF/6-31G** ab initio
4322 C calculations of diethyl disulfide.
4324 C A. Liwo and U. Kozlowska, 11/24/03
4326 implicit real*8 (a-h,o-z)
4327 include 'DIMENSIONS'
4328 include 'COMMON.SBRIDGE'
4329 include 'COMMON.CHAIN'
4330 include 'COMMON.DERIV'
4331 include 'COMMON.LOCAL'
4332 include 'COMMON.INTERACT'
4333 include 'COMMON.VAR'
4334 include 'COMMON.IOUNITS'
4335 double precision erij(3),dcosom1(3),dcosom2(3),gg(3)
4340 dxi=dc_norm(1,nres+i)
4341 dyi=dc_norm(2,nres+i)
4342 dzi=dc_norm(3,nres+i)
4343 c dsci_inv=dsc_inv(itypi)
4344 dsci_inv=vbld_inv(nres+i)
4346 c dscj_inv=dsc_inv(itypj)
4347 dscj_inv=vbld_inv(nres+j)
4351 dxj=dc_norm(1,nres+j)
4352 dyj=dc_norm(2,nres+j)
4353 dzj=dc_norm(3,nres+j)
4354 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
4359 om1=dxi*erij(1)+dyi*erij(2)+dzi*erij(3)
4360 om2=dxj*erij(1)+dyj*erij(2)+dzj*erij(3)
4361 om12=dxi*dxj+dyi*dyj+dzi*dzj
4363 dcosom1(k)=rij*(dc_norm(k,nres+i)-om1*erij(k))
4364 dcosom2(k)=rij*(dc_norm(k,nres+j)-om2*erij(k))
4370 deltat12=om2-om1+2.0d0
4372 eij=akcm*deltad*deltad+akth*(deltat1*deltat1+deltat2*deltat2)
4373 & +akct*deltad*deltat12
4374 & +v1ss*cosphi+v2ss*cosphi*cosphi+v3ss*cosphi*cosphi*cosphi
4375 c write(iout,*) i,j,"rij",rij,"d0cm",d0cm," akcm",akcm," akth",akth,
4376 c & " akct",akct," deltad",deltad," deltat",deltat1,deltat2,
4377 c & " deltat12",deltat12," eij",eij
4378 ed=2*akcm*deltad+akct*deltat12
4380 pom2=v1ss+2*v2ss*cosphi+3*v3ss*cosphi*cosphi
4381 eom1=-2*akth*deltat1-pom1-om2*pom2
4382 eom2= 2*akth*deltat2+pom1-om1*pom2
4385 ggk=ed*erij(k)+eom1*dcosom1(k)+eom2*dcosom2(k)
4386 ghpbx(k,i)=ghpbx(k,i)-ggk
4387 & +(eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,nres+i))
4388 & +eom1*(erij(k)-om1*dc_norm(k,nres+i)))*dsci_inv
4389 ghpbx(k,j)=ghpbx(k,j)+ggk
4390 & +(eom12*(dc_norm(k,nres+i)-om12*dc_norm(k,nres+j))
4391 & +eom2*(erij(k)-om2*dc_norm(k,nres+j)))*dscj_inv
4392 ghpbc(k,i)=ghpbc(k,i)-ggk
4393 ghpbc(k,j)=ghpbc(k,j)+ggk
4396 C Calculate the components of the gradient in DC and X
4400 cgrad ghpbc(l,k)=ghpbc(l,k)+gg(l)
4405 C--------------------------------------------------------------------------
4406 subroutine ebond(estr)
4408 c Evaluate the energy of stretching of the CA-CA and CA-SC virtual bonds
4410 implicit real*8 (a-h,o-z)
4411 include 'DIMENSIONS'
4412 include 'COMMON.LOCAL'
4413 include 'COMMON.GEO'
4414 include 'COMMON.INTERACT'
4415 include 'COMMON.DERIV'
4416 include 'COMMON.VAR'
4417 include 'COMMON.CHAIN'
4418 include 'COMMON.IOUNITS'
4419 include 'COMMON.NAMES'
4420 include 'COMMON.FFIELD'
4421 include 'COMMON.CONTROL'
4422 include 'COMMON.SETUP'
4423 double precision u(3),ud(3)
4425 do i=ibondp_start,ibondp_end
4426 diff = vbld(i)-vbldp0
4427 c write (iout,*) i,vbld(i),vbldp0,diff,AKP*diff*diff
4430 gradb(j,i-1)=AKP*diff*dc(j,i-1)/vbld(i)
4432 c write (iout,'(i5,3f10.5)') i,(gradb(j,i-1),j=1,3)
4436 c 09/18/07 AL: multimodal bond potential based on AM1 CA-SC PMF's included
4438 do i=ibond_start,ibond_end
4443 diff=vbld(i+nres)-vbldsc0(1,iti)
4444 c write (iout,*) i,iti,vbld(i+nres),vbldsc0(1,iti),diff,
4445 c & AKSC(1,iti),AKSC(1,iti)*diff*diff
4446 estr=estr+0.5d0*AKSC(1,iti)*diff*diff
4448 gradbx(j,i)=AKSC(1,iti)*diff*dc(j,i+nres)/vbld(i+nres)
4452 diff=vbld(i+nres)-vbldsc0(j,iti)
4453 ud(j)=aksc(j,iti)*diff
4454 u(j)=abond0(j,iti)+0.5d0*ud(j)*diff
4468 uprod2=uprod2*u(k)*u(k)
4472 usumsqder=usumsqder+ud(j)*uprod2
4474 estr=estr+uprod/usum
4476 gradbx(j,i)=usumsqder/(usum*usum)*dc(j,i+nres)/vbld(i+nres)
4484 C--------------------------------------------------------------------------
4485 subroutine ebend(etheta)
4487 C Evaluate the virtual-bond-angle energy given the virtual-bond dihedral
4488 C angles gamma and its derivatives in consecutive thetas and gammas.
4490 implicit real*8 (a-h,o-z)
4491 include 'DIMENSIONS'
4492 include 'COMMON.LOCAL'
4493 include 'COMMON.GEO'
4494 include 'COMMON.INTERACT'
4495 include 'COMMON.DERIV'
4496 include 'COMMON.VAR'
4497 include 'COMMON.CHAIN'
4498 include 'COMMON.IOUNITS'
4499 include 'COMMON.NAMES'
4500 include 'COMMON.FFIELD'
4501 include 'COMMON.CONTROL'
4502 common /calcthet/ term1,term2,termm,diffak,ratak,
4503 & ak,aktc,termpre,termexp,sigc,sig0i,time11,time12,sigcsq,
4504 & delthe0,sig0inv,sigtc,sigsqtc,delthec,it
4505 double precision y(2),z(2)
4507 c time11=dexp(-2*time)
4510 c write (*,'(a,i2)') 'EBEND ICG=',icg
4511 do i=ithet_start,ithet_end
4512 C Zero the energy function and its derivative at 0 or pi.
4513 call splinthet(theta(i),0.5d0*delta,ss,ssd)
4518 if (phii.ne.phii) phii=150.0
4531 if (phii1.ne.phii1) phii1=150.0
4543 C Calculate the "mean" value of theta from the part of the distribution
4544 C dependent on the adjacent virtual-bond-valence angles (gamma1 & gamma2).
4545 C In following comments this theta will be referred to as t_c.
4546 thet_pred_mean=0.0d0
4550 thet_pred_mean=thet_pred_mean+athetk*y(k)+bthetk*z(k)
4552 dthett=thet_pred_mean*ssd
4553 thet_pred_mean=thet_pred_mean*ss+a0thet(it)
4554 C Derivatives of the "mean" values in gamma1 and gamma2.
4555 dthetg1=(-athet(1,it)*y(2)+athet(2,it)*y(1))*ss
4556 dthetg2=(-bthet(1,it)*z(2)+bthet(2,it)*z(1))*ss
4557 if (theta(i).gt.pi-delta) then
4558 call theteng(pi-delta,thet_pred_mean,theta0(it),f0,fprim0,
4560 call mixder(pi-delta,thet_pred_mean,theta0(it),fprim_tc0)
4561 call theteng(pi,thet_pred_mean,theta0(it),f1,fprim1,E_tc1)
4562 call spline1(theta(i),pi-delta,delta,f0,f1,fprim0,ethetai,
4564 call spline2(theta(i),pi-delta,delta,E_tc0,E_tc1,fprim_tc0,
4566 else if (theta(i).lt.delta) then
4567 call theteng(delta,thet_pred_mean,theta0(it),f0,fprim0,E_tc0)
4568 call theteng(0.0d0,thet_pred_mean,theta0(it),f1,fprim1,E_tc1)
4569 call spline1(theta(i),delta,-delta,f0,f1,fprim0,ethetai,
4571 call mixder(delta,thet_pred_mean,theta0(it),fprim_tc0)
4572 call spline2(theta(i),delta,-delta,E_tc0,E_tc1,fprim_tc0,
4575 call theteng(theta(i),thet_pred_mean,theta0(it),ethetai,
4578 etheta=etheta+ethetai
4579 if (energy_dec) write (iout,'(a6,i5,0pf7.3)')
4581 if (i.gt.3) gloc(i-3,icg)=gloc(i-3,icg)+wang*E_tc*dthetg1
4582 if (i.lt.nres) gloc(i-2,icg)=gloc(i-2,icg)+wang*E_tc*dthetg2
4583 gloc(nphi+i-2,icg)=wang*(E_theta+E_tc*dthett)
4585 C Ufff.... We've done all this!!!
4588 C---------------------------------------------------------------------------
4589 subroutine theteng(thetai,thet_pred_mean,theta0i,ethetai,E_theta,
4591 implicit real*8 (a-h,o-z)
4592 include 'DIMENSIONS'
4593 include 'COMMON.LOCAL'
4594 include 'COMMON.IOUNITS'
4595 common /calcthet/ term1,term2,termm,diffak,ratak,
4596 & ak,aktc,termpre,termexp,sigc,sig0i,time11,time12,sigcsq,
4597 & delthe0,sig0inv,sigtc,sigsqtc,delthec,it
4598 C Calculate the contributions to both Gaussian lobes.
4599 C 6/6/97 - Deform the Gaussians using the factor of 1/(1+time)
4600 C The "polynomial part" of the "standard deviation" of this part of
4604 sig=sig*thet_pred_mean+polthet(j,it)
4606 C Derivative of the "interior part" of the "standard deviation of the"
4607 C gamma-dependent Gaussian lobe in t_c.
4608 sigtc=3*polthet(3,it)
4610 sigtc=sigtc*thet_pred_mean+j*polthet(j,it)
4613 C Set the parameters of both Gaussian lobes of the distribution.
4614 C "Standard deviation" of the gamma-dependent Gaussian lobe (sigtc)
4615 fac=sig*sig+sigc0(it)
4618 C Following variable (sigsqtc) is -(1/2)d[sigma(t_c)**(-2))]/dt_c
4619 sigsqtc=-4.0D0*sigcsq*sigtc
4620 c print *,i,sig,sigtc,sigsqtc
4621 C Following variable (sigtc) is d[sigma(t_c)]/dt_c
4622 sigtc=-sigtc/(fac*fac)
4623 C Following variable is sigma(t_c)**(-2)
4624 sigcsq=sigcsq*sigcsq
4626 sig0inv=1.0D0/sig0i**2
4627 delthec=thetai-thet_pred_mean
4628 delthe0=thetai-theta0i
4629 term1=-0.5D0*sigcsq*delthec*delthec
4630 term2=-0.5D0*sig0inv*delthe0*delthe0
4631 C Following fuzzy logic is to avoid underflows in dexp and subsequent INFs and
4632 C NaNs in taking the logarithm. We extract the largest exponent which is added
4633 C to the energy (this being the log of the distribution) at the end of energy
4634 C term evaluation for this virtual-bond angle.
4635 if (term1.gt.term2) then
4637 term2=dexp(term2-termm)
4641 term1=dexp(term1-termm)
4644 C The ratio between the gamma-independent and gamma-dependent lobes of
4645 C the distribution is a Gaussian function of thet_pred_mean too.
4646 diffak=gthet(2,it)-thet_pred_mean
4647 ratak=diffak/gthet(3,it)**2
4648 ak=dexp(gthet(1,it)-0.5D0*diffak*ratak)
4649 C Let's differentiate it in thet_pred_mean NOW.
4651 C Now put together the distribution terms to make complete distribution.
4652 termexp=term1+ak*term2
4653 termpre=sigc+ak*sig0i
4654 C Contribution of the bending energy from this theta is just the -log of
4655 C the sum of the contributions from the two lobes and the pre-exponential
4656 C factor. Simple enough, isn't it?
4657 ethetai=(-dlog(termexp)-termm+dlog(termpre))
4658 C NOW the derivatives!!!
4659 C 6/6/97 Take into account the deformation.
4660 E_theta=(delthec*sigcsq*term1
4661 & +ak*delthe0*sig0inv*term2)/termexp
4662 E_tc=((sigtc+aktc*sig0i)/termpre
4663 & -((delthec*sigcsq+delthec*delthec*sigsqtc)*term1+
4664 & aktc*term2)/termexp)
4667 c-----------------------------------------------------------------------------
4668 subroutine mixder(thetai,thet_pred_mean,theta0i,E_tc_t)
4669 implicit real*8 (a-h,o-z)
4670 include 'DIMENSIONS'
4671 include 'COMMON.LOCAL'
4672 include 'COMMON.IOUNITS'
4673 common /calcthet/ term1,term2,termm,diffak,ratak,
4674 & ak,aktc,termpre,termexp,sigc,sig0i,time11,time12,sigcsq,
4675 & delthe0,sig0inv,sigtc,sigsqtc,delthec,it
4676 delthec=thetai-thet_pred_mean
4677 delthe0=thetai-theta0i
4678 C "Thank you" to MAPLE (probably spared one day of hand-differentiation).
4679 t3 = thetai-thet_pred_mean
4683 t14 = t12+t6*sigsqtc
4685 t21 = thetai-theta0i
4691 E_tc_t = -((sigcsq+2.D0*t3*sigsqtc)*t9-t14*sigcsq*t3*t16*t9
4692 & -aktc*sig0inv*t27)/t32+(t14*t9+aktc*t26)/t40
4693 & *(-t12*t9-ak*sig0inv*t27)
4697 C--------------------------------------------------------------------------
4698 subroutine ebend(etheta)
4700 C Evaluate the virtual-bond-angle energy given the virtual-bond dihedral
4701 C angles gamma and its derivatives in consecutive thetas and gammas.
4702 C ab initio-derived potentials from
4703 c Kozlowska et al., J. Phys.: Condens. Matter 19 (2007) 285203
4705 implicit real*8 (a-h,o-z)
4706 include 'DIMENSIONS'
4707 include 'COMMON.LOCAL'
4708 include 'COMMON.GEO'
4709 include 'COMMON.INTERACT'
4710 include 'COMMON.DERIV'
4711 include 'COMMON.VAR'
4712 include 'COMMON.CHAIN'
4713 include 'COMMON.IOUNITS'
4714 include 'COMMON.NAMES'
4715 include 'COMMON.FFIELD'
4716 include 'COMMON.CONTROL'
4717 double precision coskt(mmaxtheterm),sinkt(mmaxtheterm),
4718 & cosph1(maxsingle),sinph1(maxsingle),cosph2(maxsingle),
4719 & sinph2(maxsingle),cosph1ph2(maxdouble,maxdouble),
4720 & sinph1ph2(maxdouble,maxdouble)
4721 logical lprn /.false./, lprn1 /.false./
4723 do i=ithet_start,ithet_end
4727 theti2=0.5d0*theta(i)
4728 ityp2=ithetyp(itype(i-1))
4730 coskt(k)=dcos(k*theti2)
4731 sinkt(k)=dsin(k*theti2)
4736 if (phii.ne.phii) phii=150.0
4740 ityp1=ithetyp(itype(i-2))
4742 cosph1(k)=dcos(k*phii)
4743 sinph1(k)=dsin(k*phii)
4756 if (phii1.ne.phii1) phii1=150.0
4761 ityp3=ithetyp(itype(i))
4763 cosph2(k)=dcos(k*phii1)
4764 sinph2(k)=dsin(k*phii1)
4774 ethetai=aa0thet(ityp1,ityp2,ityp3)
4777 ccl=cosph1(l)*cosph2(k-l)
4778 ssl=sinph1(l)*sinph2(k-l)
4779 scl=sinph1(l)*cosph2(k-l)
4780 csl=cosph1(l)*sinph2(k-l)
4781 cosph1ph2(l,k)=ccl-ssl
4782 cosph1ph2(k,l)=ccl+ssl
4783 sinph1ph2(l,k)=scl+csl
4784 sinph1ph2(k,l)=scl-csl
4788 write (iout,*) "i",i," ityp1",ityp1," ityp2",ityp2,
4789 & " ityp3",ityp3," theti2",theti2," phii",phii," phii1",phii1
4790 write (iout,*) "coskt and sinkt"
4792 write (iout,*) k,coskt(k),sinkt(k)
4796 ethetai=ethetai+aathet(k,ityp1,ityp2,ityp3)*sinkt(k)
4797 dethetai=dethetai+0.5d0*k*aathet(k,ityp1,ityp2,ityp3)
4800 & write (iout,*) "k",k," aathet",aathet(k,ityp1,ityp2,ityp3),
4801 & " ethetai",ethetai
4804 write (iout,*) "cosph and sinph"
4806 write (iout,*) k,cosph1(k),sinph1(k),cosph2(k),sinph2(k)
4808 write (iout,*) "cosph1ph2 and sinph2ph2"
4811 write (iout,*) l,k,cosph1ph2(l,k),cosph1ph2(k,l),
4812 & sinph1ph2(l,k),sinph1ph2(k,l)
4815 write(iout,*) "ethetai",ethetai
4819 aux=bbthet(k,m,ityp1,ityp2,ityp3)*cosph1(k)
4820 & +ccthet(k,m,ityp1,ityp2,ityp3)*sinph1(k)
4821 & +ddthet(k,m,ityp1,ityp2,ityp3)*cosph2(k)
4822 & +eethet(k,m,ityp1,ityp2,ityp3)*sinph2(k)
4823 ethetai=ethetai+sinkt(m)*aux
4824 dethetai=dethetai+0.5d0*m*aux*coskt(m)
4825 dephii=dephii+k*sinkt(m)*(
4826 & ccthet(k,m,ityp1,ityp2,ityp3)*cosph1(k)-
4827 & bbthet(k,m,ityp1,ityp2,ityp3)*sinph1(k))
4828 dephii1=dephii1+k*sinkt(m)*(
4829 & eethet(k,m,ityp1,ityp2,ityp3)*cosph2(k)-
4830 & ddthet(k,m,ityp1,ityp2,ityp3)*sinph2(k))
4832 & write (iout,*) "m",m," k",k," bbthet",
4833 & bbthet(k,m,ityp1,ityp2,ityp3)," ccthet",
4834 & ccthet(k,m,ityp1,ityp2,ityp3)," ddthet",
4835 & ddthet(k,m,ityp1,ityp2,ityp3)," eethet",
4836 & eethet(k,m,ityp1,ityp2,ityp3)," ethetai",ethetai
4840 & write(iout,*) "ethetai",ethetai
4844 aux=ffthet(l,k,m,ityp1,ityp2,ityp3)*cosph1ph2(l,k)+
4845 & ffthet(k,l,m,ityp1,ityp2,ityp3)*cosph1ph2(k,l)+
4846 & ggthet(l,k,m,ityp1,ityp2,ityp3)*sinph1ph2(l,k)+
4847 & ggthet(k,l,m,ityp1,ityp2,ityp3)*sinph1ph2(k,l)
4848 ethetai=ethetai+sinkt(m)*aux
4849 dethetai=dethetai+0.5d0*m*coskt(m)*aux
4850 dephii=dephii+l*sinkt(m)*(
4851 & -ffthet(l,k,m,ityp1,ityp2,ityp3)*sinph1ph2(l,k)-
4852 & ffthet(k,l,m,ityp1,ityp2,ityp3)*sinph1ph2(k,l)+
4853 & ggthet(l,k,m,ityp1,ityp2,ityp3)*cosph1ph2(l,k)+
4854 & ggthet(k,l,m,ityp1,ityp2,ityp3)*cosph1ph2(k,l))
4855 dephii1=dephii1+(k-l)*sinkt(m)*(
4856 & -ffthet(l,k,m,ityp1,ityp2,ityp3)*sinph1ph2(l,k)+
4857 & ffthet(k,l,m,ityp1,ityp2,ityp3)*sinph1ph2(k,l)+
4858 & ggthet(l,k,m,ityp1,ityp2,ityp3)*cosph1ph2(l,k)-
4859 & ggthet(k,l,m,ityp1,ityp2,ityp3)*cosph1ph2(k,l))
4861 write (iout,*) "m",m," k",k," l",l," ffthet",
4862 & ffthet(l,k,m,ityp1,ityp2,ityp3),
4863 & ffthet(k,l,m,ityp1,ityp2,ityp3)," ggthet",
4864 & ggthet(l,k,m,ityp1,ityp2,ityp3),
4865 & ggthet(k,l,m,ityp1,ityp2,ityp3)," ethetai",ethetai
4866 write (iout,*) cosph1ph2(l,k)*sinkt(m),
4867 & cosph1ph2(k,l)*sinkt(m),
4868 & sinph1ph2(l,k)*sinkt(m),sinph1ph2(k,l)*sinkt(m)
4874 if (lprn1) write (iout,'(i2,3f8.1,9h ethetai ,f10.5)')
4875 & i,theta(i)*rad2deg,phii*rad2deg,
4876 & phii1*rad2deg,ethetai
4877 etheta=etheta+ethetai
4878 if (i.gt.3) gloc(i-3,icg)=gloc(i-3,icg)+wang*dephii
4879 if (i.lt.nres) gloc(i-2,icg)=gloc(i-2,icg)+wang*dephii1
4880 gloc(nphi+i-2,icg)=wang*dethetai
4886 c-----------------------------------------------------------------------------
4887 subroutine esc(escloc)
4888 C Calculate the local energy of a side chain and its derivatives in the
4889 C corresponding virtual-bond valence angles THETA and the spherical angles
4891 implicit real*8 (a-h,o-z)
4892 include 'DIMENSIONS'
4893 include 'COMMON.GEO'
4894 include 'COMMON.LOCAL'
4895 include 'COMMON.VAR'
4896 include 'COMMON.INTERACT'
4897 include 'COMMON.DERIV'
4898 include 'COMMON.CHAIN'
4899 include 'COMMON.IOUNITS'
4900 include 'COMMON.NAMES'
4901 include 'COMMON.FFIELD'
4902 include 'COMMON.CONTROL'
4903 double precision x(3),dersc(3),xemp(3),dersc0(3),dersc1(3),
4904 & ddersc0(3),ddummy(3),xtemp(3),temp(3)
4905 common /sccalc/ time11,time12,time112,theti,it,nlobit
4908 c write (iout,'(a)') 'ESC'
4909 do i=loc_start,loc_end
4911 if (it.eq.10) goto 1
4913 c print *,'i=',i,' it=',it,' nlobit=',nlobit
4914 c write (iout,*) 'i=',i,' ssa=',ssa,' ssad=',ssad
4915 theti=theta(i+1)-pipol
4920 if (x(2).gt.pi-delta) then
4924 call enesc(xtemp,escloci0,dersc0,ddersc0,.true.)
4926 call enesc(xtemp,escloci1,dersc1,ddummy,.false.)
4927 call spline1(x(2),pi-delta,delta,escloci0,escloci1,dersc0(2),
4929 call spline2(x(2),pi-delta,delta,dersc0(1),dersc1(1),
4930 & ddersc0(1),dersc(1))
4931 call spline2(x(2),pi-delta,delta,dersc0(3),dersc1(3),
4932 & ddersc0(3),dersc(3))
4934 call enesc_bound(xtemp,esclocbi0,dersc0,dersc12,.true.)
4936 call enesc_bound(xtemp,esclocbi1,dersc1,chuju,.false.)
4937 call spline1(x(2),pi-delta,delta,esclocbi0,esclocbi1,
4938 & dersc0(2),esclocbi,dersc02)
4939 call spline2(x(2),pi-delta,delta,dersc0(1),dersc1(1),
4941 call splinthet(x(2),0.5d0*delta,ss,ssd)
4946 dersc(k)=ss*dersc(k)+(1.0d0-ss)*dersc0(k)
4948 dersc(2)=dersc(2)+ssd*(escloci-esclocbi)
4949 c write (iout,*) 'i=',i,x(2)*rad2deg,escloci0,escloci,
4951 escloci=ss*escloci+(1.0d0-ss)*esclocbi
4953 c write (iout,*) escloci
4954 else if (x(2).lt.delta) then
4958 call enesc(xtemp,escloci0,dersc0,ddersc0,.true.)
4960 call enesc(xtemp,escloci1,dersc1,ddummy,.false.)
4961 call spline1(x(2),delta,-delta,escloci0,escloci1,dersc0(2),
4963 call spline2(x(2),delta,-delta,dersc0(1),dersc1(1),
4964 & ddersc0(1),dersc(1))
4965 call spline2(x(2),delta,-delta,dersc0(3),dersc1(3),
4966 & ddersc0(3),dersc(3))
4968 call enesc_bound(xtemp,esclocbi0,dersc0,dersc12,.true.)
4970 call enesc_bound(xtemp,esclocbi1,dersc1,chuju,.false.)
4971 call spline1(x(2),delta,-delta,esclocbi0,esclocbi1,
4972 & dersc0(2),esclocbi,dersc02)
4973 call spline2(x(2),delta,-delta,dersc0(1),dersc1(1),
4978 call splinthet(x(2),0.5d0*delta,ss,ssd)
4980 dersc(k)=ss*dersc(k)+(1.0d0-ss)*dersc0(k)
4982 dersc(2)=dersc(2)+ssd*(escloci-esclocbi)
4983 c write (iout,*) 'i=',i,x(2)*rad2deg,escloci0,escloci,
4985 escloci=ss*escloci+(1.0d0-ss)*esclocbi
4986 c write (iout,*) escloci
4988 call enesc(x,escloci,dersc,ddummy,.false.)
4991 escloc=escloc+escloci
4992 if (energy_dec) write (iout,'(a6,i5,0pf7.3)')
4993 & 'escloc',i,escloci
4994 c write (iout,*) 'i=',i,' escloci=',escloci,' dersc=',dersc
4996 gloc(nphi+i-1,icg)=gloc(nphi+i-1,icg)+
4998 gloc(ialph(i,1),icg)=wscloc*dersc(2)
4999 gloc(ialph(i,1)+nside,icg)=wscloc*dersc(3)
5004 C---------------------------------------------------------------------------
5005 subroutine enesc(x,escloci,dersc,ddersc,mixed)
5006 implicit real*8 (a-h,o-z)
5007 include 'DIMENSIONS'
5008 include 'COMMON.GEO'
5009 include 'COMMON.LOCAL'
5010 include 'COMMON.IOUNITS'
5011 common /sccalc/ time11,time12,time112,theti,it,nlobit
5012 double precision x(3),z(3),Ax(3,maxlob,-1:1),dersc(3),ddersc(3)
5013 double precision contr(maxlob,-1:1)
5015 c write (iout,*) 'it=',it,' nlobit=',nlobit
5019 if (mixed) ddersc(j)=0.0d0
5023 C Because of periodicity of the dependence of the SC energy in omega we have
5024 C to add up the contributions from x(3)-2*pi, x(3), and x(3+2*pi).
5025 C To avoid underflows, first compute & store the exponents.
5033 z(k)=x(k)-censc(k,j,it)
5038 Axk=Axk+gaussc(l,k,j,it)*z(l)
5044 expfac=expfac+Ax(k,j,iii)*z(k)
5052 C As in the case of ebend, we want to avoid underflows in exponentiation and
5053 C subsequent NaNs and INFs in energy calculation.
5054 C Find the largest exponent
5058 if (emin.gt.contr(j,iii)) emin=contr(j,iii)
5062 cd print *,'it=',it,' emin=',emin
5064 C Compute the contribution to SC energy and derivatives
5069 adexp=bsc(j,it)-0.5D0*contr(j,iii)+emin
5070 if(adexp.ne.adexp) adexp=1.0
5073 expfac=dexp(bsc(j,it)-0.5D0*contr(j,iii)+emin)
5075 cd print *,'j=',j,' expfac=',expfac
5076 escloc_i=escloc_i+expfac
5078 dersc(k)=dersc(k)+Ax(k,j,iii)*expfac
5082 ddersc(k)=ddersc(k)+(-Ax(2,j,iii)*Ax(k,j,iii)
5083 & +gaussc(k,2,j,it))*expfac
5090 dersc(1)=dersc(1)/cos(theti)**2
5091 ddersc(1)=ddersc(1)/cos(theti)**2
5094 escloci=-(dlog(escloc_i)-emin)
5096 dersc(j)=dersc(j)/escloc_i
5100 ddersc(j)=(ddersc(j)/escloc_i+dersc(2)*dersc(j))
5105 C------------------------------------------------------------------------------
5106 subroutine enesc_bound(x,escloci,dersc,dersc12,mixed)
5107 implicit real*8 (a-h,o-z)
5108 include 'DIMENSIONS'
5109 include 'COMMON.GEO'
5110 include 'COMMON.LOCAL'
5111 include 'COMMON.IOUNITS'
5112 common /sccalc/ time11,time12,time112,theti,it,nlobit
5113 double precision x(3),z(3),Ax(3,maxlob),dersc(3)
5114 double precision contr(maxlob)
5125 z(k)=x(k)-censc(k,j,it)
5131 Axk=Axk+gaussc(l,k,j,it)*z(l)
5137 expfac=expfac+Ax(k,j)*z(k)
5142 C As in the case of ebend, we want to avoid underflows in exponentiation and
5143 C subsequent NaNs and INFs in energy calculation.
5144 C Find the largest exponent
5147 if (emin.gt.contr(j)) emin=contr(j)
5151 C Compute the contribution to SC energy and derivatives
5155 expfac=dexp(bsc(j,it)-0.5D0*contr(j)+emin)
5156 escloc_i=escloc_i+expfac
5158 dersc(k)=dersc(k)+Ax(k,j)*expfac
5160 if (mixed) dersc12=dersc12+(-Ax(2,j)*Ax(1,j)
5161 & +gaussc(1,2,j,it))*expfac
5165 dersc(1)=dersc(1)/cos(theti)**2
5166 dersc12=dersc12/cos(theti)**2
5167 escloci=-(dlog(escloc_i)-emin)
5169 dersc(j)=dersc(j)/escloc_i
5171 if (mixed) dersc12=(dersc12/escloc_i+dersc(2)*dersc(1))
5175 c----------------------------------------------------------------------------------
5176 subroutine esc(escloc)
5177 C Calculate the local energy of a side chain and its derivatives in the
5178 C corresponding virtual-bond valence angles THETA and the spherical angles
5179 C ALPHA and OMEGA derived from AM1 all-atom calculations.
5180 C added by Urszula Kozlowska. 07/11/2007
5182 implicit real*8 (a-h,o-z)
5183 include 'DIMENSIONS'
5184 include 'COMMON.GEO'
5185 include 'COMMON.LOCAL'
5186 include 'COMMON.VAR'
5187 include 'COMMON.SCROT'
5188 include 'COMMON.INTERACT'
5189 include 'COMMON.DERIV'
5190 include 'COMMON.CHAIN'
5191 include 'COMMON.IOUNITS'
5192 include 'COMMON.NAMES'
5193 include 'COMMON.FFIELD'
5194 include 'COMMON.CONTROL'
5195 include 'COMMON.VECTORS'
5196 double precision x_prime(3),y_prime(3),z_prime(3)
5197 & , sumene,dsc_i,dp2_i,x(65),
5198 & xx,yy,zz,sumene1,sumene2,sumene3,sumene4,s1,s1_6,s2,s2_6,
5199 & de_dxx,de_dyy,de_dzz,de_dt
5200 double precision s1_t,s1_6_t,s2_t,s2_6_t
5202 & dXX_Ci1(3),dYY_Ci1(3),dZZ_Ci1(3),dXX_Ci(3),
5203 & dYY_Ci(3),dZZ_Ci(3),dXX_XYZ(3),dYY_XYZ(3),dZZ_XYZ(3),
5204 & dt_dCi(3),dt_dCi1(3)
5205 common /sccalc/ time11,time12,time112,theti,it,nlobit
5208 do i=loc_start,loc_end
5209 costtab(i+1) =dcos(theta(i+1))
5210 sinttab(i+1) =dsqrt(1-costtab(i+1)*costtab(i+1))
5211 cost2tab(i+1)=dsqrt(0.5d0*(1.0d0+costtab(i+1)))
5212 sint2tab(i+1)=dsqrt(0.5d0*(1.0d0-costtab(i+1)))
5213 cosfac2=0.5d0/(1.0d0+costtab(i+1))
5214 cosfac=dsqrt(cosfac2)
5215 sinfac2=0.5d0/(1.0d0-costtab(i+1))
5216 sinfac=dsqrt(sinfac2)
5218 if (it.eq.10) goto 1
5220 C Compute the axes of tghe local cartesian coordinates system; store in
5221 c x_prime, y_prime and z_prime
5228 C write(2,*) "dc_norm", dc_norm(1,i+nres),dc_norm(2,i+nres),
5229 C & dc_norm(3,i+nres)
5231 x_prime(j) = (dc_norm(j,i) - dc_norm(j,i-1))*cosfac
5232 y_prime(j) = (dc_norm(j,i) + dc_norm(j,i-1))*sinfac
5235 z_prime(j) = -uz(j,i-1)
5238 c write (2,*) "x_prime",(x_prime(j),j=1,3)
5239 c write (2,*) "y_prime",(y_prime(j),j=1,3)
5240 c write (2,*) "z_prime",(z_prime(j),j=1,3)
5241 c write (2,*) "xx",scalar(x_prime(1),x_prime(1)),
5242 c & " xy",scalar(x_prime(1),y_prime(1)),
5243 c & " xz",scalar(x_prime(1),z_prime(1)),
5244 c & " yy",scalar(y_prime(1),y_prime(1)),
5245 c & " yz",scalar(y_prime(1),z_prime(1)),
5246 c & " zz",scalar(z_prime(1),z_prime(1))
5248 C Transform the unit vector of the ith side-chain centroid, dC_norm(*,i),
5249 C to local coordinate system. Store in xx, yy, zz.
5255 xx = xx + x_prime(j)*dc_norm(j,i+nres)
5256 yy = yy + y_prime(j)*dc_norm(j,i+nres)
5257 zz = zz + z_prime(j)*dc_norm(j,i+nres)
5264 C Compute the energy of the ith side cbain
5266 c write (2,*) "xx",xx," yy",yy," zz",zz
5269 x(j) = sc_parmin(j,it)
5272 Cc diagnostics - remove later
5274 yy1 = dsin(alph(2))*dcos(omeg(2))
5275 zz1 = -dsin(alph(2))*dsin(omeg(2))
5276 write(2,'(3f8.1,3f9.3,1x,3f9.3)')
5277 & alph(2)*rad2deg,omeg(2)*rad2deg,theta(3)*rad2deg,xx,yy,zz,
5279 C," --- ", xx_w,yy_w,zz_w
5282 sumene1= x(1)+ x(2)*xx+ x(3)*yy+ x(4)*zz+ x(5)*xx**2
5283 & + x(6)*yy**2+ x(7)*zz**2+ x(8)*xx*zz+ x(9)*xx*yy
5285 sumene2= x(11) + x(12)*xx + x(13)*yy + x(14)*zz + x(15)*xx**2
5286 & + x(16)*yy**2 + x(17)*zz**2 + x(18)*xx*zz + x(19)*xx*yy
5288 sumene3= x(21) +x(22)*xx +x(23)*yy +x(24)*zz +x(25)*xx**2
5289 & +x(26)*yy**2 +x(27)*zz**2 +x(28)*xx*zz +x(29)*xx*yy
5290 & +x(30)*yy*zz +x(31)*xx**3 +x(32)*yy**3 +x(33)*zz**3
5291 & +x(34)*(xx**2)*yy +x(35)*(xx**2)*zz +x(36)*(yy**2)*xx
5292 & +x(37)*(yy**2)*zz +x(38)*(zz**2)*xx +x(39)*(zz**2)*yy
5294 sumene4= x(41) +x(42)*xx +x(43)*yy +x(44)*zz +x(45)*xx**2
5295 & +x(46)*yy**2 +x(47)*zz**2 +x(48)*xx*zz +x(49)*xx*yy
5296 & +x(50)*yy*zz +x(51)*xx**3 +x(52)*yy**3 +x(53)*zz**3
5297 & +x(54)*(xx**2)*yy +x(55)*(xx**2)*zz +x(56)*(yy**2)*xx
5298 & +x(57)*(yy**2)*zz +x(58)*(zz**2)*xx +x(59)*(zz**2)*yy
5300 dsc_i = 0.743d0+x(61)
5302 dscp1=dsqrt(dsc_i**2+dp2_i**2-2*dsc_i*dp2_i
5303 & *(xx*cost2tab(i+1)+yy*sint2tab(i+1)))
5304 dscp2=dsqrt(dsc_i**2+dp2_i**2-2*dsc_i*dp2_i
5305 & *(xx*cost2tab(i+1)-yy*sint2tab(i+1)))
5306 s1=(1+x(63))/(0.1d0 + dscp1)
5307 s1_6=(1+x(64))/(0.1d0 + dscp1**6)
5308 s2=(1+x(65))/(0.1d0 + dscp2)
5309 s2_6=(1+x(65))/(0.1d0 + dscp2**6)
5310 sumene = ( sumene3*sint2tab(i+1) + sumene1)*(s1+s1_6)
5311 & + (sumene4*cost2tab(i+1) +sumene2)*(s2+s2_6)
5312 c write(2,'(i2," sumene",7f9.3)') i,sumene1,sumene2,sumene3,
5314 c & dscp1,dscp2,sumene
5315 c sumene = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
5316 escloc = escloc + sumene
5317 c write (2,*) "i",i," escloc",sumene,escloc
5320 C This section to check the numerical derivatives of the energy of ith side
5321 C chain in xx, yy, zz, and theta. Use the -DDEBUG compiler option or insert
5322 C #define DEBUG in the code to turn it on.
5324 write (2,*) "sumene =",sumene
5328 write (2,*) xx,yy,zz
5329 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
5330 de_dxx_num=(sumenep-sumene)/aincr
5332 write (2,*) "xx+ sumene from enesc=",sumenep
5335 write (2,*) xx,yy,zz
5336 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
5337 de_dyy_num=(sumenep-sumene)/aincr
5339 write (2,*) "yy+ sumene from enesc=",sumenep
5342 write (2,*) xx,yy,zz
5343 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
5344 de_dzz_num=(sumenep-sumene)/aincr
5346 write (2,*) "zz+ sumene from enesc=",sumenep
5347 costsave=cost2tab(i+1)
5348 sintsave=sint2tab(i+1)
5349 cost2tab(i+1)=dcos(0.5d0*(theta(i+1)+aincr))
5350 sint2tab(i+1)=dsin(0.5d0*(theta(i+1)+aincr))
5351 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
5352 de_dt_num=(sumenep-sumene)/aincr
5353 write (2,*) " t+ sumene from enesc=",sumenep
5354 cost2tab(i+1)=costsave
5355 sint2tab(i+1)=sintsave
5356 C End of diagnostics section.
5359 C Compute the gradient of esc
5361 pom_s1=(1.0d0+x(63))/(0.1d0 + dscp1)**2
5362 pom_s16=6*(1.0d0+x(64))/(0.1d0 + dscp1**6)**2
5363 pom_s2=(1.0d0+x(65))/(0.1d0 + dscp2)**2
5364 pom_s26=6*(1.0d0+x(65))/(0.1d0 + dscp2**6)**2
5365 pom_dx=dsc_i*dp2_i*cost2tab(i+1)
5366 pom_dy=dsc_i*dp2_i*sint2tab(i+1)
5367 pom_dt1=-0.5d0*dsc_i*dp2_i*(xx*sint2tab(i+1)-yy*cost2tab(i+1))
5368 pom_dt2=-0.5d0*dsc_i*dp2_i*(xx*sint2tab(i+1)+yy*cost2tab(i+1))
5369 pom1=(sumene3*sint2tab(i+1)+sumene1)
5370 & *(pom_s1/dscp1+pom_s16*dscp1**4)
5371 pom2=(sumene4*cost2tab(i+1)+sumene2)
5372 & *(pom_s2/dscp2+pom_s26*dscp2**4)
5373 sumene1x=x(2)+2*x(5)*xx+x(8)*zz+ x(9)*yy
5374 sumene3x=x(22)+2*x(25)*xx+x(28)*zz+x(29)*yy+3*x(31)*xx**2
5375 & +2*x(34)*xx*yy +2*x(35)*xx*zz +x(36)*(yy**2) +x(38)*(zz**2)
5377 sumene2x=x(12)+2*x(15)*xx+x(18)*zz+ x(19)*yy
5378 sumene4x=x(42)+2*x(45)*xx +x(48)*zz +x(49)*yy +3*x(51)*xx**2
5379 & +2*x(54)*xx*yy+2*x(55)*xx*zz+x(56)*(yy**2)+x(58)*(zz**2)
5381 de_dxx =(sumene1x+sumene3x*sint2tab(i+1))*(s1+s1_6)
5382 & +(sumene2x+sumene4x*cost2tab(i+1))*(s2+s2_6)
5383 & +(pom1+pom2)*pom_dx
5385 write(2,*), "de_dxx = ", de_dxx,de_dxx_num
5388 sumene1y=x(3) + 2*x(6)*yy + x(9)*xx + x(10)*zz
5389 sumene3y=x(23) +2*x(26)*yy +x(29)*xx +x(30)*zz +3*x(32)*yy**2
5390 & +x(34)*(xx**2) +2*x(36)*yy*xx +2*x(37)*yy*zz +x(39)*(zz**2)
5392 sumene2y=x(13) + 2*x(16)*yy + x(19)*xx + x(20)*zz
5393 sumene4y=x(43)+2*x(46)*yy+x(49)*xx +x(50)*zz
5394 & +3*x(52)*yy**2+x(54)*xx**2+2*x(56)*yy*xx +2*x(57)*yy*zz
5395 & +x(59)*zz**2 +x(60)*xx*zz
5396 de_dyy =(sumene1y+sumene3y*sint2tab(i+1))*(s1+s1_6)
5397 & +(sumene2y+sumene4y*cost2tab(i+1))*(s2+s2_6)
5398 & +(pom1-pom2)*pom_dy
5400 write(2,*), "de_dyy = ", de_dyy,de_dyy_num
5403 de_dzz =(x(24) +2*x(27)*zz +x(28)*xx +x(30)*yy
5404 & +3*x(33)*zz**2 +x(35)*xx**2 +x(37)*yy**2 +2*x(38)*zz*xx
5405 & +2*x(39)*zz*yy +x(40)*xx*yy)*sint2tab(i+1)*(s1+s1_6)
5406 & +(x(4) + 2*x(7)*zz+ x(8)*xx + x(10)*yy)*(s1+s1_6)
5407 & +(x(44)+2*x(47)*zz +x(48)*xx +x(50)*yy +3*x(53)*zz**2
5408 & +x(55)*xx**2 +x(57)*(yy**2)+2*x(58)*zz*xx +2*x(59)*zz*yy
5409 & +x(60)*xx*yy)*cost2tab(i+1)*(s2+s2_6)
5410 & + ( x(14) + 2*x(17)*zz+ x(18)*xx + x(20)*yy)*(s2+s2_6)
5412 write(2,*), "de_dzz = ", de_dzz,de_dzz_num
5415 de_dt = 0.5d0*sumene3*cost2tab(i+1)*(s1+s1_6)
5416 & -0.5d0*sumene4*sint2tab(i+1)*(s2+s2_6)
5417 & +pom1*pom_dt1+pom2*pom_dt2
5419 write(2,*), "de_dt = ", de_dt,de_dt_num
5423 cossc=scalar(dc_norm(1,i),dc_norm(1,i+nres))
5424 cossc1=scalar(dc_norm(1,i-1),dc_norm(1,i+nres))
5425 cosfac2xx=cosfac2*xx
5426 sinfac2yy=sinfac2*yy
5428 dt_dCi(k) = -(dc_norm(k,i-1)+costtab(i+1)*dc_norm(k,i))*
5430 dt_dCi1(k)= -(dc_norm(k,i)+costtab(i+1)*dc_norm(k,i-1))*
5432 pom=(dC_norm(k,i+nres)-cossc*dC_norm(k,i))*vbld_inv(i+1)
5433 pom1=(dC_norm(k,i+nres)-cossc1*dC_norm(k,i-1))*vbld_inv(i)
5434 c write (iout,*) "i",i," k",k," pom",pom," pom1",pom1,
5435 c & " dt_dCi",dt_dCi(k)," dt_dCi1",dt_dCi1(k)
5436 c write (iout,*) "dC_norm",(dC_norm(j,i),j=1,3),
5437 c & (dC_norm(j,i-1),j=1,3)," vbld_inv",vbld_inv(i+1),vbld_inv(i)
5438 dXX_Ci(k)=pom*cosfac-dt_dCi(k)*cosfac2xx
5439 dXX_Ci1(k)=-pom1*cosfac-dt_dCi1(k)*cosfac2xx
5440 dYY_Ci(k)=pom*sinfac+dt_dCi(k)*sinfac2yy
5441 dYY_Ci1(k)=pom1*sinfac+dt_dCi1(k)*sinfac2yy
5445 dZZ_Ci(k)=dZZ_Ci(k)-uzgrad(j,k,2,i-1)*dC_norm(j,i+nres)
5446 dZZ_Ci1(k)=dZZ_Ci1(k)-uzgrad(j,k,1,i-1)*dC_norm(j,i+nres)
5449 dXX_XYZ(k)=vbld_inv(i+nres)*(x_prime(k)-xx*dC_norm(k,i+nres))
5450 dYY_XYZ(k)=vbld_inv(i+nres)*(y_prime(k)-yy*dC_norm(k,i+nres))
5451 dZZ_XYZ(k)=vbld_inv(i+nres)*(z_prime(k)-zz*dC_norm(k,i+nres))
5453 dt_dCi(k) = -dt_dCi(k)/sinttab(i+1)
5454 dt_dCi1(k)= -dt_dCi1(k)/sinttab(i+1)
5458 dXX_Ctab(k,i)=dXX_Ci(k)
5459 dXX_C1tab(k,i)=dXX_Ci1(k)
5460 dYY_Ctab(k,i)=dYY_Ci(k)
5461 dYY_C1tab(k,i)=dYY_Ci1(k)
5462 dZZ_Ctab(k,i)=dZZ_Ci(k)
5463 dZZ_C1tab(k,i)=dZZ_Ci1(k)
5464 dXX_XYZtab(k,i)=dXX_XYZ(k)
5465 dYY_XYZtab(k,i)=dYY_XYZ(k)
5466 dZZ_XYZtab(k,i)=dZZ_XYZ(k)
5470 c write (iout,*) "k",k," dxx_ci1",dxx_ci1(k)," dyy_ci1",
5471 c & dyy_ci1(k)," dzz_ci1",dzz_ci1(k)
5472 c write (iout,*) "k",k," dxx_ci",dxx_ci(k)," dyy_ci",
5473 c & dyy_ci(k)," dzz_ci",dzz_ci(k)
5474 c write (iout,*) "k",k," dt_dci",dt_dci(k)," dt_dci",
5476 c write (iout,*) "k",k," dxx_XYZ",dxx_XYZ(k)," dyy_XYZ",
5477 c & dyy_XYZ(k)," dzz_XYZ",dzz_XYZ(k)
5478 gscloc(k,i-1)=gscloc(k,i-1)+de_dxx*dxx_ci1(k)
5479 & +de_dyy*dyy_ci1(k)+de_dzz*dzz_ci1(k)+de_dt*dt_dCi1(k)
5480 gscloc(k,i)=gscloc(k,i)+de_dxx*dxx_Ci(k)
5481 & +de_dyy*dyy_Ci(k)+de_dzz*dzz_Ci(k)+de_dt*dt_dCi(k)
5482 gsclocx(k,i)= de_dxx*dxx_XYZ(k)
5483 & +de_dyy*dyy_XYZ(k)+de_dzz*dzz_XYZ(k)
5485 c write(iout,*) "ENERGY GRAD = ", (gscloc(k,i-1),k=1,3),
5486 c & (gscloc(k,i),k=1,3),(gsclocx(k,i),k=1,3)
5488 C to check gradient call subroutine check_grad
5494 c------------------------------------------------------------------------------
5495 double precision function enesc(x,xx,yy,zz,cost2,sint2)
5497 double precision x(65),xx,yy,zz,cost2,sint2,sumene1,sumene2,
5498 & sumene3,sumene4,sumene,dsc_i,dp2_i,dscp1,dscp2,s1,s1_6,s2,s2_6
5499 sumene1= x(1)+ x(2)*xx+ x(3)*yy+ x(4)*zz+ x(5)*xx**2
5500 & + x(6)*yy**2+ x(7)*zz**2+ x(8)*xx*zz+ x(9)*xx*yy
5502 sumene2= x(11) + x(12)*xx + x(13)*yy + x(14)*zz + x(15)*xx**2
5503 & + x(16)*yy**2 + x(17)*zz**2 + x(18)*xx*zz + x(19)*xx*yy
5505 sumene3= x(21) +x(22)*xx +x(23)*yy +x(24)*zz +x(25)*xx**2
5506 & +x(26)*yy**2 +x(27)*zz**2 +x(28)*xx*zz +x(29)*xx*yy
5507 & +x(30)*yy*zz +x(31)*xx**3 +x(32)*yy**3 +x(33)*zz**3
5508 & +x(34)*(xx**2)*yy +x(35)*(xx**2)*zz +x(36)*(yy**2)*xx
5509 & +x(37)*(yy**2)*zz +x(38)*(zz**2)*xx +x(39)*(zz**2)*yy
5511 sumene4= x(41) +x(42)*xx +x(43)*yy +x(44)*zz +x(45)*xx**2
5512 & +x(46)*yy**2 +x(47)*zz**2 +x(48)*xx*zz +x(49)*xx*yy
5513 & +x(50)*yy*zz +x(51)*xx**3 +x(52)*yy**3 +x(53)*zz**3
5514 & +x(54)*(xx**2)*yy +x(55)*(xx**2)*zz +x(56)*(yy**2)*xx
5515 & +x(57)*(yy**2)*zz +x(58)*(zz**2)*xx +x(59)*(zz**2)*yy
5517 dsc_i = 0.743d0+x(61)
5519 dscp1=dsqrt(dsc_i**2+dp2_i**2-2*dsc_i*dp2_i
5520 & *(xx*cost2+yy*sint2))
5521 dscp2=dsqrt(dsc_i**2+dp2_i**2-2*dsc_i*dp2_i
5522 & *(xx*cost2-yy*sint2))
5523 s1=(1+x(63))/(0.1d0 + dscp1)
5524 s1_6=(1+x(64))/(0.1d0 + dscp1**6)
5525 s2=(1+x(65))/(0.1d0 + dscp2)
5526 s2_6=(1+x(65))/(0.1d0 + dscp2**6)
5527 sumene = ( sumene3*sint2 + sumene1)*(s1+s1_6)
5528 & + (sumene4*cost2 +sumene2)*(s2+s2_6)
5533 c------------------------------------------------------------------------------
5534 subroutine gcont(rij,r0ij,eps0ij,delta,fcont,fprimcont)
5536 C This procedure calculates two-body contact function g(rij) and its derivative:
5539 C g(rij) = esp0ij*(-0.9375*x+0.625*x**3-0.1875*x**5) ! -1 =< x =< 1
5542 C where x=(rij-r0ij)/delta
5544 C rij - interbody distance, r0ij - contact distance, eps0ij - contact energy
5547 double precision rij,r0ij,eps0ij,fcont,fprimcont
5548 double precision x,x2,x4,delta
5552 if (x.lt.-1.0D0) then
5555 else if (x.le.1.0D0) then
5558 fcont=eps0ij*(x*(-0.9375D0+0.6250D0*x2-0.1875D0*x4)+0.5D0)
5559 fprimcont=eps0ij * (-0.9375D0+1.8750D0*x2-0.9375D0*x4)/delta
5566 c------------------------------------------------------------------------------
5567 subroutine splinthet(theti,delta,ss,ssder)
5568 implicit real*8 (a-h,o-z)
5569 include 'DIMENSIONS'
5570 include 'COMMON.VAR'
5571 include 'COMMON.GEO'
5574 if (theti.gt.pipol) then
5575 call gcont(theti,thetup,1.0d0,delta,ss,ssder)
5577 call gcont(-theti,-thetlow,1.0d0,delta,ss,ssder)
5582 c------------------------------------------------------------------------------
5583 subroutine spline1(x,x0,delta,f0,f1,fprim0,f,fprim)
5585 double precision x,x0,delta,f0,f1,fprim0,f,fprim
5586 double precision ksi,ksi2,ksi3,a1,a2,a3
5587 a1=fprim0*delta/(f1-f0)
5593 f=f0+(f1-f0)*ksi*(a1+ksi*(a2+a3*ksi))
5594 fprim=(f1-f0)/delta*(a1+ksi*(2*a2+3*ksi*a3))
5597 c------------------------------------------------------------------------------
5598 subroutine spline2(x,x0,delta,f0x,f1x,fprim0x,fx)
5600 double precision x,x0,delta,f0x,f1x,fprim0x,fx
5601 double precision ksi,ksi2,ksi3,a1,a2,a3
5606 a2=3*(f1x-f0x)-2*fprim0x*delta
5607 a3=fprim0x*delta-2*(f1x-f0x)
5608 fx=f0x+a1*ksi+a2*ksi2+a3*ksi3
5611 C-----------------------------------------------------------------------------
5613 C-----------------------------------------------------------------------------
5614 subroutine etor(etors,edihcnstr)
5615 implicit real*8 (a-h,o-z)
5616 include 'DIMENSIONS'
5617 include 'COMMON.VAR'
5618 include 'COMMON.GEO'
5619 include 'COMMON.LOCAL'
5620 include 'COMMON.TORSION'
5621 include 'COMMON.INTERACT'
5622 include 'COMMON.DERIV'
5623 include 'COMMON.CHAIN'
5624 include 'COMMON.NAMES'
5625 include 'COMMON.IOUNITS'
5626 include 'COMMON.FFIELD'
5627 include 'COMMON.TORCNSTR'
5628 include 'COMMON.CONTROL'
5630 C Set lprn=.true. for debugging
5634 do i=iphi_start,iphi_end
5636 itori=itortyp(itype(i-2))
5637 itori1=itortyp(itype(i-1))
5640 C Proline-Proline pair is a special case...
5641 if (itori.eq.3 .and. itori1.eq.3) then
5642 if (phii.gt.-dwapi3) then
5644 fac=1.0D0/(1.0D0-cosphi)
5645 etorsi=v1(1,3,3)*fac
5646 etorsi=etorsi+etorsi
5647 etors=etors+etorsi-v1(1,3,3)
5648 if (energy_dec) etors_ii=etors_ii+etorsi-v1(1,3,3)
5649 gloci=gloci-3*fac*etorsi*dsin(3*phii)
5652 v1ij=v1(j+1,itori,itori1)
5653 v2ij=v2(j+1,itori,itori1)
5656 etors=etors+v1ij*cosphi+v2ij*sinphi+dabs(v1ij)+dabs(v2ij)
5657 if (energy_dec) etors_ii=etors_ii+
5658 & v2ij*sinphi+dabs(v1ij)+dabs(v2ij)
5659 gloci=gloci+j*(v2ij*cosphi-v1ij*sinphi)
5663 v1ij=v1(j,itori,itori1)
5664 v2ij=v2(j,itori,itori1)
5667 etors=etors+v1ij*cosphi+v2ij*sinphi+dabs(v1ij)+dabs(v2ij)
5668 if (energy_dec) etors_ii=etors_ii+
5669 & v1ij*cosphi+v2ij*sinphi+dabs(v1ij)+dabs(v2ij)
5670 gloci=gloci+j*(v2ij*cosphi-v1ij*sinphi)
5673 if (energy_dec) write (iout,'(a6,i5,0pf7.3)')
5676 & write (iout,'(2(a3,2x,i3,2x),2i3,6f8.3/26x,6f8.3/)')
5677 & restyp(itype(i-2)),i-2,restyp(itype(i-1)),i-1,itori,itori1,
5678 & (v1(j,itori,itori1),j=1,6),(v2(j,itori,itori1),j=1,6)
5679 gloc(i-3,icg)=gloc(i-3,icg)+wtor*gloci
5680 write (iout,*) 'i=',i,' gloc=',gloc(i-3,icg)
5682 ! 6/20/98 - dihedral angle constraints
5685 itori=idih_constr(i)
5688 if (difi.gt.drange(i)) then
5690 edihcnstr=edihcnstr+0.25d0*ftors*difi**4
5691 gloc(itori-3,icg)=gloc(itori-3,icg)+ftors*difi**3
5692 else if (difi.lt.-drange(i)) then
5694 edihcnstr=edihcnstr+0.25d0*ftors*difi**4
5695 gloc(itori-3,icg)=gloc(itori-3,icg)+ftors*difi**3
5697 ! write (iout,'(2i5,2f8.3,2e14.5)') i,itori,rad2deg*phii,
5698 ! & rad2deg*difi,0.25d0*ftors*difi**4,gloc(itori-3,icg)
5700 ! write (iout,*) 'edihcnstr',edihcnstr
5703 c------------------------------------------------------------------------------
5704 subroutine etor_d(etors_d)
5708 c----------------------------------------------------------------------------
5710 subroutine etor(etors,edihcnstr)
5711 implicit real*8 (a-h,o-z)
5712 include 'DIMENSIONS'
5713 include 'COMMON.VAR'
5714 include 'COMMON.GEO'
5715 include 'COMMON.LOCAL'
5716 include 'COMMON.TORSION'
5717 include 'COMMON.INTERACT'
5718 include 'COMMON.DERIV'
5719 include 'COMMON.CHAIN'
5720 include 'COMMON.NAMES'
5721 include 'COMMON.IOUNITS'
5722 include 'COMMON.FFIELD'
5723 include 'COMMON.TORCNSTR'
5724 include 'COMMON.CONTROL'
5726 C Set lprn=.true. for debugging
5730 do i=iphi_start,iphi_end
5732 itori=itortyp(itype(i-2))
5733 itori1=itortyp(itype(i-1))
5736 C Regular cosine and sine terms
5737 do j=1,nterm(itori,itori1)
5738 v1ij=v1(j,itori,itori1)
5739 v2ij=v2(j,itori,itori1)
5742 etors=etors+v1ij*cosphi+v2ij*sinphi
5743 if (energy_dec) etors_ii=etors_ii+
5744 & v1ij*cosphi+v2ij*sinphi
5745 gloci=gloci+j*(v2ij*cosphi-v1ij*sinphi)
5749 C E = SUM ----------------------------------- - v1
5750 C [v2 cos(phi/2)+v3 sin(phi/2)]^2 + 1
5752 cosphi=dcos(0.5d0*phii)
5753 sinphi=dsin(0.5d0*phii)
5754 do j=1,nlor(itori,itori1)
5755 vl1ij=vlor1(j,itori,itori1)
5756 vl2ij=vlor2(j,itori,itori1)
5757 vl3ij=vlor3(j,itori,itori1)
5758 pom=vl2ij*cosphi+vl3ij*sinphi
5759 pom1=1.0d0/(pom*pom+1.0d0)
5760 etors=etors+vl1ij*pom1
5761 if (energy_dec) etors_ii=etors_ii+
5764 gloci=gloci+vl1ij*(vl3ij*cosphi-vl2ij*sinphi)*pom
5766 C Subtract the constant term
5767 etors=etors-v0(itori,itori1)
5768 if (energy_dec) write (iout,'(a6,i5,0pf7.3)')
5769 & 'etor',i,etors_ii-v0(itori,itori1)
5771 & write (iout,'(2(a3,2x,i3,2x),2i3,6f8.3/26x,6f8.3/)')
5772 & restyp(itype(i-2)),i-2,restyp(itype(i-1)),i-1,itori,itori1,
5773 & (v1(j,itori,itori1),j=1,6),(v2(j,itori,itori1),j=1,6)
5774 gloc(i-3,icg)=gloc(i-3,icg)+wtor*gloci
5775 c write (iout,*) 'i=',i,' gloc=',gloc(i-3,icg)
5777 ! 6/20/98 - dihedral angle constraints
5779 c do i=1,ndih_constr
5780 do i=idihconstr_start,idihconstr_end
5781 itori=idih_constr(i)
5783 difi=pinorm(phii-phi0(i))
5784 if (difi.gt.drange(i)) then
5786 edihcnstr=edihcnstr+0.25d0*ftors*difi**4
5787 gloc(itori-3,icg)=gloc(itori-3,icg)+ftors*difi**3
5788 else if (difi.lt.-drange(i)) then
5790 edihcnstr=edihcnstr+0.25d0*ftors*difi**4
5791 gloc(itori-3,icg)=gloc(itori-3,icg)+ftors*difi**3
5795 c write (iout,*) "gloci", gloc(i-3,icg)
5796 cd write (iout,'(2i5,4f8.3,2e14.5)') i,itori,rad2deg*phii,
5797 cd & rad2deg*phi0(i), rad2deg*drange(i),
5798 cd & rad2deg*difi,0.25d0*ftors*difi**4,gloc(itori-3,icg)
5800 cd write (iout,*) 'edihcnstr',edihcnstr
5803 c----------------------------------------------------------------------------
5804 subroutine etor_d(etors_d)
5805 C 6/23/01 Compute double torsional energy
5806 implicit real*8 (a-h,o-z)
5807 include 'DIMENSIONS'
5808 include 'COMMON.VAR'
5809 include 'COMMON.GEO'
5810 include 'COMMON.LOCAL'
5811 include 'COMMON.TORSION'
5812 include 'COMMON.INTERACT'
5813 include 'COMMON.DERIV'
5814 include 'COMMON.CHAIN'
5815 include 'COMMON.NAMES'
5816 include 'COMMON.IOUNITS'
5817 include 'COMMON.FFIELD'
5818 include 'COMMON.TORCNSTR'
5820 C Set lprn=.true. for debugging
5824 do i=iphid_start,iphid_end
5825 itori=itortyp(itype(i-2))
5826 itori1=itortyp(itype(i-1))
5827 itori2=itortyp(itype(i))
5832 do j=1,ntermd_1(itori,itori1,itori2)
5833 v1cij=v1c(1,j,itori,itori1,itori2)
5834 v1sij=v1s(1,j,itori,itori1,itori2)
5835 v2cij=v1c(2,j,itori,itori1,itori2)
5836 v2sij=v1s(2,j,itori,itori1,itori2)
5837 cosphi1=dcos(j*phii)
5838 sinphi1=dsin(j*phii)
5839 cosphi2=dcos(j*phii1)
5840 sinphi2=dsin(j*phii1)
5841 etors_d=etors_d+v1cij*cosphi1+v1sij*sinphi1+
5842 & v2cij*cosphi2+v2sij*sinphi2
5843 gloci1=gloci1+j*(v1sij*cosphi1-v1cij*sinphi1)
5844 gloci2=gloci2+j*(v2sij*cosphi2-v2cij*sinphi2)
5846 do k=2,ntermd_2(itori,itori1,itori2)
5848 v1cdij = v2c(k,l,itori,itori1,itori2)
5849 v2cdij = v2c(l,k,itori,itori1,itori2)
5850 v1sdij = v2s(k,l,itori,itori1,itori2)
5851 v2sdij = v2s(l,k,itori,itori1,itori2)
5852 cosphi1p2=dcos(l*phii+(k-l)*phii1)
5853 cosphi1m2=dcos(l*phii-(k-l)*phii1)
5854 sinphi1p2=dsin(l*phii+(k-l)*phii1)
5855 sinphi1m2=dsin(l*phii-(k-l)*phii1)
5856 etors_d=etors_d+v1cdij*cosphi1p2+v2cdij*cosphi1m2+
5857 & v1sdij*sinphi1p2+v2sdij*sinphi1m2
5858 gloci1=gloci1+l*(v1sdij*cosphi1p2+v2sdij*cosphi1m2
5859 & -v1cdij*sinphi1p2-v2cdij*sinphi1m2)
5860 gloci2=gloci2+(k-l)*(v1sdij*cosphi1p2-v2sdij*cosphi1m2
5861 & -v1cdij*sinphi1p2+v2cdij*sinphi1m2)
5864 gloc(i-3,icg)=gloc(i-3,icg)+wtor_d*gloci1
5865 gloc(i-2,icg)=gloc(i-2,icg)+wtor_d*gloci2
5866 c write (iout,*) "gloci", gloc(i-3,icg)
5871 c------------------------------------------------------------------------------
5872 subroutine eback_sc_corr(esccor)
5873 c 7/21/2007 Correlations between the backbone-local and side-chain-local
5874 c conformational states; temporarily implemented as differences
5875 c between UNRES torsional potentials (dependent on three types of
5876 c residues) and the torsional potentials dependent on all 20 types
5877 c of residues computed from AM1 energy surfaces of terminally-blocked
5878 c amino-acid residues.
5879 implicit real*8 (a-h,o-z)
5880 include 'DIMENSIONS'
5881 include 'COMMON.VAR'
5882 include 'COMMON.GEO'
5883 include 'COMMON.LOCAL'
5884 include 'COMMON.TORSION'
5885 include 'COMMON.SCCOR'
5886 include 'COMMON.INTERACT'
5887 include 'COMMON.DERIV'
5888 include 'COMMON.CHAIN'
5889 include 'COMMON.NAMES'
5890 include 'COMMON.IOUNITS'
5891 include 'COMMON.FFIELD'
5892 include 'COMMON.CONTROL'
5894 C Set lprn=.true. for debugging
5897 c write (iout,*) "EBACK_SC_COR",iphi_start,iphi_end,nterm_sccor
5899 do i=itau_start,itau_end
5901 isccori=isccortyp(itype(i-2))
5902 isccori1=isccortyp(itype(i-1))
5904 cccc Added 9 May 2012
5905 cc Tauangle is torsional engle depending on the value of first digit
5906 c(see comment below)
5907 cc Omicron is flat angle depending on the value of first digit
5908 c(see comment below)
5911 do intertyp=1,3 !intertyp
5912 cc Added 09 May 2012 (Adasko)
5913 cc Intertyp means interaction type of backbone mainchain correlation:
5914 c 1 = SC...Ca...Ca...Ca
5915 c 2 = Ca...Ca...Ca...SC
5916 c 3 = SC...Ca...Ca...SCi
5918 if (((intertyp.eq.3).and.((itype(i-2).eq.10).or.
5919 & (itype(i-1).eq.10).or.(itype(i-2).eq.21).or.
5920 & (itype(i-1).eq.21)))
5921 & .or. ((intertyp.eq.1).and.((itype(i-2).eq.10)
5922 & .or.(itype(i-2).eq.21)))
5923 & .or.((intertyp.eq.2).and.((itype(i-1).eq.10).or.
5924 & (itype(i-1).eq.21)))) cycle
5925 if ((intertyp.eq.2).and.(i.eq.4).and.(itype(1).eq.21)) cycle
5926 if ((intertyp.eq.1).and.(i.eq.nres).and.(itype(nres).eq.21))
5928 do j=1,nterm_sccor(isccori,isccori1)
5929 v1ij=v1sccor(j,intertyp,isccori,isccori1)
5930 v2ij=v2sccor(j,intertyp,isccori,isccori1)
5931 cosphi=dcos(j*tauangle(intertyp,i))
5932 sinphi=dsin(j*tauangle(intertyp,i))
5933 esccor=esccor+v1ij*cosphi+v2ij*sinphi
5934 gloci=gloci+j*(v2ij*cosphi-v1ij*sinphi)
5936 gloc_sc(intertyp,i-3,icg)=gloc_sc(intertyp,i-3,icg)+wsccor*gloci
5937 c write (iout,*) "WTF",intertyp,i,itype(i),v1ij*cosphi+v2ij*sinphi
5938 c &gloc_sc(intertyp,i-3,icg)
5940 & write (iout,'(2(a3,2x,i3,2x),2i3,6f8.3/26x,6f8.3/)')
5941 & restyp(itype(i-2)),i-2,restyp(itype(i-1)),i-1,itori,itori1,
5942 & (v1sccor(j,intertyp,itori,itori1),j=1,6)
5943 & ,(v2sccor(j,intertyp,itori,itori1),j=1,6)
5944 gsccor_loc(i-3)=gsccor_loc(i-3)+gloci
5948 c write (iout,*) "W@T@F", gloc_sc(1,i,icg),gloc(i,icg)
5952 c----------------------------------------------------------------------------
5953 subroutine multibody(ecorr)
5954 C This subroutine calculates multi-body contributions to energy following
5955 C the idea of Skolnick et al. If side chains I and J make a contact and
5956 C at the same time side chains I+1 and J+1 make a contact, an extra
5957 C contribution equal to sqrt(eps(i,j)*eps(i+1,j+1)) is added.
5958 implicit real*8 (a-h,o-z)
5959 include 'DIMENSIONS'
5960 include 'COMMON.IOUNITS'
5961 include 'COMMON.DERIV'
5962 include 'COMMON.INTERACT'
5963 include 'COMMON.CONTACTS'
5964 double precision gx(3),gx1(3)
5967 C Set lprn=.true. for debugging
5971 write (iout,'(a)') 'Contact function values:'
5973 write (iout,'(i2,20(1x,i2,f10.5))')
5974 & i,(jcont(j,i),facont(j,i),j=1,num_cont(i))
5989 num_conti=num_cont(i)
5990 num_conti1=num_cont(i1)
5995 if (j1.eq.j+ishift .or. j1.eq.j-ishift) then
5996 cd write(iout,*)'i=',i,' j=',j,' i1=',i1,' j1=',j1,
5997 cd & ' ishift=',ishift
5998 C Contacts I--J and I+ISHIFT--J+-ISHIFT1 occur simultaneously.
5999 C The system gains extra energy.
6000 ecorr=ecorr+esccorr(i,j,i1,j1,jj,kk)
6001 endif ! j1==j+-ishift
6010 c------------------------------------------------------------------------------
6011 double precision function esccorr(i,j,k,l,jj,kk)
6012 implicit real*8 (a-h,o-z)
6013 include 'DIMENSIONS'
6014 include 'COMMON.IOUNITS'
6015 include 'COMMON.DERIV'
6016 include 'COMMON.INTERACT'
6017 include 'COMMON.CONTACTS'
6018 double precision gx(3),gx1(3)
6023 cd write (iout,'(4i5,3f10.5)') i,j,k,l,eij,ekl,-eij*ekl
6024 C Calculate the multi-body contribution to energy.
6025 C Calculate multi-body contributions to the gradient.
6026 cd write (iout,'(2(2i3,3f10.5))')i,j,(gacont(m,jj,i),m=1,3),
6027 cd & k,l,(gacont(m,kk,k),m=1,3)
6029 gx(m) =ekl*gacont(m,jj,i)
6030 gx1(m)=eij*gacont(m,kk,k)
6031 gradxorr(m,i)=gradxorr(m,i)-gx(m)
6032 gradxorr(m,j)=gradxorr(m,j)+gx(m)
6033 gradxorr(m,k)=gradxorr(m,k)-gx1(m)
6034 gradxorr(m,l)=gradxorr(m,l)+gx1(m)
6038 gradcorr(ll,m)=gradcorr(ll,m)+gx(ll)
6043 gradcorr(ll,m)=gradcorr(ll,m)+gx1(ll)
6049 c------------------------------------------------------------------------------
6050 subroutine multibody_hb(ecorr,ecorr5,ecorr6,n_corr,n_corr1)
6051 C This subroutine calculates multi-body contributions to hydrogen-bonding
6052 implicit real*8 (a-h,o-z)
6053 include 'DIMENSIONS'
6054 include 'COMMON.IOUNITS'
6057 parameter (max_cont=maxconts)
6058 parameter (max_dim=26)
6059 integer source,CorrelType,CorrelID,CorrelType1,CorrelID1,Error
6060 double precision zapas(max_dim,maxconts,max_fg_procs),
6061 & zapas_recv(max_dim,maxconts,max_fg_procs)
6062 common /przechowalnia/ zapas
6063 integer status(MPI_STATUS_SIZE),req(maxconts*2),
6064 & status_array(MPI_STATUS_SIZE,maxconts*2)
6066 include 'COMMON.SETUP'
6067 include 'COMMON.FFIELD'
6068 include 'COMMON.DERIV'
6069 include 'COMMON.INTERACT'
6070 include 'COMMON.CONTACTS'
6071 include 'COMMON.CONTROL'
6072 include 'COMMON.LOCAL'
6073 double precision gx(3),gx1(3),time00
6076 C Set lprn=.true. for debugging
6081 if (nfgtasks.le.1) goto 30
6083 write (iout,'(a)') 'Contact function values before RECEIVE:'
6085 write (iout,'(2i3,50(1x,i2,f5.2))')
6086 & i,num_cont_hb(i),(jcont_hb(j,i),facont_hb(j,i),
6087 & j=1,num_cont_hb(i))
6091 do i=1,ntask_cont_from
6094 do i=1,ntask_cont_to
6097 c write (iout,*) "ntask_cont_from",ntask_cont_from," ntask_cont_to",
6099 C Make the list of contacts to send to send to other procesors
6100 c write (iout,*) "limits",max0(iturn4_end-1,iatel_s),iturn3_end
6102 do i=iturn3_start,iturn3_end
6103 c write (iout,*) "make contact list turn3",i," num_cont",
6105 call add_hb_contact(i,i+2,iturn3_sent_local(1,i))
6107 do i=iturn4_start,iturn4_end
6108 c write (iout,*) "make contact list turn4",i," num_cont",
6110 call add_hb_contact(i,i+3,iturn4_sent_local(1,i))
6114 c write (iout,*) "make contact list longrange",i,ii," num_cont",
6116 do j=1,num_cont_hb(i)
6119 iproc=iint_sent_local(k,jjc,ii)
6120 c write (iout,*) "i",i," j",j," k",k," jjc",jjc," iproc",iproc
6121 if (iproc.gt.0) then
6122 ncont_sent(iproc)=ncont_sent(iproc)+1
6123 nn=ncont_sent(iproc)
6125 zapas(2,nn,iproc)=jjc
6126 zapas(3,nn,iproc)=facont_hb(j,i)
6127 zapas(4,nn,iproc)=ees0p(j,i)
6128 zapas(5,nn,iproc)=ees0m(j,i)
6129 zapas(6,nn,iproc)=gacont_hbr(1,j,i)
6130 zapas(7,nn,iproc)=gacont_hbr(2,j,i)
6131 zapas(8,nn,iproc)=gacont_hbr(3,j,i)
6132 zapas(9,nn,iproc)=gacontm_hb1(1,j,i)
6133 zapas(10,nn,iproc)=gacontm_hb1(2,j,i)
6134 zapas(11,nn,iproc)=gacontm_hb1(3,j,i)
6135 zapas(12,nn,iproc)=gacontp_hb1(1,j,i)
6136 zapas(13,nn,iproc)=gacontp_hb1(2,j,i)
6137 zapas(14,nn,iproc)=gacontp_hb1(3,j,i)
6138 zapas(15,nn,iproc)=gacontm_hb2(1,j,i)
6139 zapas(16,nn,iproc)=gacontm_hb2(2,j,i)
6140 zapas(17,nn,iproc)=gacontm_hb2(3,j,i)
6141 zapas(18,nn,iproc)=gacontp_hb2(1,j,i)
6142 zapas(19,nn,iproc)=gacontp_hb2(2,j,i)
6143 zapas(20,nn,iproc)=gacontp_hb2(3,j,i)
6144 zapas(21,nn,iproc)=gacontm_hb3(1,j,i)
6145 zapas(22,nn,iproc)=gacontm_hb3(2,j,i)
6146 zapas(23,nn,iproc)=gacontm_hb3(3,j,i)
6147 zapas(24,nn,iproc)=gacontp_hb3(1,j,i)
6148 zapas(25,nn,iproc)=gacontp_hb3(2,j,i)
6149 zapas(26,nn,iproc)=gacontp_hb3(3,j,i)
6156 & "Numbers of contacts to be sent to other processors",
6157 & (ncont_sent(i),i=1,ntask_cont_to)
6158 write (iout,*) "Contacts sent"
6159 do ii=1,ntask_cont_to
6161 iproc=itask_cont_to(ii)
6162 write (iout,*) nn," contacts to processor",iproc,
6163 & " of CONT_TO_COMM group"
6165 write(iout,'(2f5.0,4f10.5)')(zapas(j,i,ii),j=1,5)
6173 CorrelID1=nfgtasks+fg_rank+1
6175 C Receive the numbers of needed contacts from other processors
6176 do ii=1,ntask_cont_from
6177 iproc=itask_cont_from(ii)
6179 call MPI_Irecv(ncont_recv(ii),1,MPI_INTEGER,iproc,CorrelType,
6180 & FG_COMM,req(ireq),IERR)
6182 c write (iout,*) "IRECV ended"
6184 C Send the number of contacts needed by other processors
6185 do ii=1,ntask_cont_to
6186 iproc=itask_cont_to(ii)
6188 call MPI_Isend(ncont_sent(ii),1,MPI_INTEGER,iproc,CorrelType,
6189 & FG_COMM,req(ireq),IERR)
6191 c write (iout,*) "ISEND ended"
6192 c write (iout,*) "number of requests (nn)",ireq
6195 & call MPI_Waitall(ireq,req,status_array,ierr)
6197 c & "Numbers of contacts to be received from other processors",
6198 c & (ncont_recv(i),i=1,ntask_cont_from)
6202 do ii=1,ntask_cont_from
6203 iproc=itask_cont_from(ii)
6205 c write (iout,*) "Receiving",nn," contacts from processor",iproc,
6206 c & " of CONT_TO_COMM group"
6210 call MPI_Irecv(zapas_recv(1,1,ii),nn*max_dim,
6211 & MPI_DOUBLE_PRECISION,iproc,CorrelType1,FG_COMM,req(ireq),IERR)
6212 c write (iout,*) "ireq,req",ireq,req(ireq)
6215 C Send the contacts to processors that need them
6216 do ii=1,ntask_cont_to
6217 iproc=itask_cont_to(ii)
6219 c write (iout,*) nn," contacts to processor",iproc,
6220 c & " of CONT_TO_COMM group"
6223 call MPI_Isend(zapas(1,1,ii),nn*max_dim,MPI_DOUBLE_PRECISION,
6224 & iproc,CorrelType1,FG_COMM,req(ireq),IERR)
6225 c write (iout,*) "ireq,req",ireq,req(ireq)
6227 c write(iout,'(2f5.0,4f10.5)')(zapas(j,i,ii),j=1,5)
6231 c write (iout,*) "number of requests (contacts)",ireq
6232 c write (iout,*) "req",(req(i),i=1,4)
6235 & call MPI_Waitall(ireq,req,status_array,ierr)
6236 do iii=1,ntask_cont_from
6237 iproc=itask_cont_from(iii)
6240 write (iout,*) "Received",nn," contacts from processor",iproc,
6241 & " of CONT_FROM_COMM group"
6244 write(iout,'(2f5.0,4f10.5)')(zapas_recv(j,i,iii),j=1,5)
6249 ii=zapas_recv(1,i,iii)
6250 c Flag the received contacts to prevent double-counting
6251 jj=-zapas_recv(2,i,iii)
6252 c write (iout,*) "iii",iii," i",i," ii",ii," jj",jj
6254 nnn=num_cont_hb(ii)+1
6257 facont_hb(nnn,ii)=zapas_recv(3,i,iii)
6258 ees0p(nnn,ii)=zapas_recv(4,i,iii)
6259 ees0m(nnn,ii)=zapas_recv(5,i,iii)
6260 gacont_hbr(1,nnn,ii)=zapas_recv(6,i,iii)
6261 gacont_hbr(2,nnn,ii)=zapas_recv(7,i,iii)
6262 gacont_hbr(3,nnn,ii)=zapas_recv(8,i,iii)
6263 gacontm_hb1(1,nnn,ii)=zapas_recv(9,i,iii)
6264 gacontm_hb1(2,nnn,ii)=zapas_recv(10,i,iii)
6265 gacontm_hb1(3,nnn,ii)=zapas_recv(11,i,iii)
6266 gacontp_hb1(1,nnn,ii)=zapas_recv(12,i,iii)
6267 gacontp_hb1(2,nnn,ii)=zapas_recv(13,i,iii)
6268 gacontp_hb1(3,nnn,ii)=zapas_recv(14,i,iii)
6269 gacontm_hb2(1,nnn,ii)=zapas_recv(15,i,iii)
6270 gacontm_hb2(2,nnn,ii)=zapas_recv(16,i,iii)
6271 gacontm_hb2(3,nnn,ii)=zapas_recv(17,i,iii)
6272 gacontp_hb2(1,nnn,ii)=zapas_recv(18,i,iii)
6273 gacontp_hb2(2,nnn,ii)=zapas_recv(19,i,iii)
6274 gacontp_hb2(3,nnn,ii)=zapas_recv(20,i,iii)
6275 gacontm_hb3(1,nnn,ii)=zapas_recv(21,i,iii)
6276 gacontm_hb3(2,nnn,ii)=zapas_recv(22,i,iii)
6277 gacontm_hb3(3,nnn,ii)=zapas_recv(23,i,iii)
6278 gacontp_hb3(1,nnn,ii)=zapas_recv(24,i,iii)
6279 gacontp_hb3(2,nnn,ii)=zapas_recv(25,i,iii)
6280 gacontp_hb3(3,nnn,ii)=zapas_recv(26,i,iii)
6285 write (iout,'(a)') 'Contact function values after receive:'
6287 write (iout,'(2i3,50(1x,i3,f5.2))')
6288 & i,num_cont_hb(i),(jcont_hb(j,i),facont_hb(j,i),
6289 & j=1,num_cont_hb(i))
6296 write (iout,'(a)') 'Contact function values:'
6298 write (iout,'(2i3,50(1x,i3,f5.2))')
6299 & i,num_cont_hb(i),(jcont_hb(j,i),facont_hb(j,i),
6300 & j=1,num_cont_hb(i))
6304 C Remove the loop below after debugging !!!
6311 C Calculate the local-electrostatic correlation terms
6312 do i=min0(iatel_s,iturn4_start),max0(iatel_e,iturn3_end)
6314 num_conti=num_cont_hb(i)
6315 num_conti1=num_cont_hb(i+1)
6322 c write (iout,*) 'i=',i,' j=',j,' i1=',i1,' j1=',j1,
6323 c & ' jj=',jj,' kk=',kk
6324 if ((j.gt.0 .and. j1.gt.0 .or. j.gt.0 .and. j1.lt.0
6325 & .or. j.lt.0 .and. j1.gt.0) .and.
6326 & (jp1.eq.jp+1 .or. jp1.eq.jp-1)) then
6327 C Contacts I-J and (I+1)-(J+1) or (I+1)-(J-1) occur simultaneously.
6328 C The system gains extra energy.
6329 ecorr=ecorr+ehbcorr(i,jp,i+1,jp1,jj,kk,0.72D0,0.32D0)
6330 if (energy_dec) write (iout,'(a6,2i5,0pf7.3)')
6331 & 'ecorrh',i,j,ehbcorr(i,j,i+1,j1,jj,kk,0.72D0,0.32D0)
6333 else if (j1.eq.j) then
6334 C Contacts I-J and I-(J+1) occur simultaneously.
6335 C The system loses extra energy.
6336 c ecorr=ecorr+ehbcorr(i,j,i+1,j,jj,kk,0.60D0,-0.40D0)
6341 c write (iout,*) 'i=',i,' j=',j,' i1=',i1,' j1=',j1,
6342 c & ' jj=',jj,' kk=',kk
6344 C Contacts I-J and (I+1)-J occur simultaneously.
6345 C The system loses extra energy.
6346 c ecorr=ecorr+ehbcorr(i,j,i,j+1,jj,kk,0.60D0,-0.40D0)
6353 c------------------------------------------------------------------------------
6354 subroutine add_hb_contact(ii,jj,itask)
6355 implicit real*8 (a-h,o-z)
6356 include "DIMENSIONS"
6357 include "COMMON.IOUNITS"
6360 parameter (max_cont=maxconts)
6361 parameter (max_dim=26)
6362 include "COMMON.CONTACTS"
6363 double precision zapas(max_dim,maxconts,max_fg_procs),
6364 & zapas_recv(max_dim,maxconts,max_fg_procs)
6365 common /przechowalnia/ zapas
6366 integer i,j,ii,jj,iproc,itask(4),nn
6367 c write (iout,*) "itask",itask
6370 if (iproc.gt.0) then
6371 do j=1,num_cont_hb(ii)
6373 c write (iout,*) "i",ii," j",jj," jjc",jjc
6375 ncont_sent(iproc)=ncont_sent(iproc)+1
6376 nn=ncont_sent(iproc)
6377 zapas(1,nn,iproc)=ii
6378 zapas(2,nn,iproc)=jjc
6379 zapas(3,nn,iproc)=facont_hb(j,ii)
6380 zapas(4,nn,iproc)=ees0p(j,ii)
6381 zapas(5,nn,iproc)=ees0m(j,ii)
6382 zapas(6,nn,iproc)=gacont_hbr(1,j,ii)
6383 zapas(7,nn,iproc)=gacont_hbr(2,j,ii)
6384 zapas(8,nn,iproc)=gacont_hbr(3,j,ii)
6385 zapas(9,nn,iproc)=gacontm_hb1(1,j,ii)
6386 zapas(10,nn,iproc)=gacontm_hb1(2,j,ii)
6387 zapas(11,nn,iproc)=gacontm_hb1(3,j,ii)
6388 zapas(12,nn,iproc)=gacontp_hb1(1,j,ii)
6389 zapas(13,nn,iproc)=gacontp_hb1(2,j,ii)
6390 zapas(14,nn,iproc)=gacontp_hb1(3,j,ii)
6391 zapas(15,nn,iproc)=gacontm_hb2(1,j,ii)
6392 zapas(16,nn,iproc)=gacontm_hb2(2,j,ii)
6393 zapas(17,nn,iproc)=gacontm_hb2(3,j,ii)
6394 zapas(18,nn,iproc)=gacontp_hb2(1,j,ii)
6395 zapas(19,nn,iproc)=gacontp_hb2(2,j,ii)
6396 zapas(20,nn,iproc)=gacontp_hb2(3,j,ii)
6397 zapas(21,nn,iproc)=gacontm_hb3(1,j,ii)
6398 zapas(22,nn,iproc)=gacontm_hb3(2,j,ii)
6399 zapas(23,nn,iproc)=gacontm_hb3(3,j,ii)
6400 zapas(24,nn,iproc)=gacontp_hb3(1,j,ii)
6401 zapas(25,nn,iproc)=gacontp_hb3(2,j,ii)
6402 zapas(26,nn,iproc)=gacontp_hb3(3,j,ii)
6410 c------------------------------------------------------------------------------
6411 subroutine multibody_eello(ecorr,ecorr5,ecorr6,eturn6,n_corr,
6413 C This subroutine calculates multi-body contributions to hydrogen-bonding
6414 implicit real*8 (a-h,o-z)
6415 include 'DIMENSIONS'
6416 include 'COMMON.IOUNITS'
6419 parameter (max_cont=maxconts)
6420 parameter (max_dim=70)
6421 integer source,CorrelType,CorrelID,CorrelType1,CorrelID1,Error
6422 double precision zapas(max_dim,maxconts,max_fg_procs),
6423 & zapas_recv(max_dim,maxconts,max_fg_procs)
6424 common /przechowalnia/ zapas
6425 integer status(MPI_STATUS_SIZE),req(maxconts*2),
6426 & status_array(MPI_STATUS_SIZE,maxconts*2)
6428 include 'COMMON.SETUP'
6429 include 'COMMON.FFIELD'
6430 include 'COMMON.DERIV'
6431 include 'COMMON.LOCAL'
6432 include 'COMMON.INTERACT'
6433 include 'COMMON.CONTACTS'
6434 include 'COMMON.CHAIN'
6435 include 'COMMON.CONTROL'
6436 double precision gx(3),gx1(3)
6437 integer num_cont_hb_old(maxres)
6439 double precision eello4,eello5,eelo6,eello_turn6
6440 external eello4,eello5,eello6,eello_turn6
6441 C Set lprn=.true. for debugging
6446 num_cont_hb_old(i)=num_cont_hb(i)
6450 if (nfgtasks.le.1) goto 30
6452 write (iout,'(a)') 'Contact function values before RECEIVE:'
6454 write (iout,'(2i3,50(1x,i2,f5.2))')
6455 & i,num_cont_hb(i),(jcont_hb(j,i),facont_hb(j,i),
6456 & j=1,num_cont_hb(i))
6460 do i=1,ntask_cont_from
6463 do i=1,ntask_cont_to
6466 c write (iout,*) "ntask_cont_from",ntask_cont_from," ntask_cont_to",
6468 C Make the list of contacts to send to send to other procesors
6469 do i=iturn3_start,iturn3_end
6470 c write (iout,*) "make contact list turn3",i," num_cont",
6472 call add_hb_contact_eello(i,i+2,iturn3_sent_local(1,i))
6474 do i=iturn4_start,iturn4_end
6475 c write (iout,*) "make contact list turn4",i," num_cont",
6477 call add_hb_contact_eello(i,i+3,iturn4_sent_local(1,i))
6481 c write (iout,*) "make contact list longrange",i,ii," num_cont",
6483 do j=1,num_cont_hb(i)
6486 iproc=iint_sent_local(k,jjc,ii)
6487 c write (iout,*) "i",i," j",j," k",k," jjc",jjc," iproc",iproc
6488 if (iproc.ne.0) then
6489 ncont_sent(iproc)=ncont_sent(iproc)+1
6490 nn=ncont_sent(iproc)
6492 zapas(2,nn,iproc)=jjc
6493 zapas(3,nn,iproc)=d_cont(j,i)
6497 zapas(ind,nn,iproc)=grij_hb_cont(kk,j,i)
6502 zapas(ind,nn,iproc)=a_chuj(ll,kk,j,i)
6510 zapas(ind,nn,iproc)=a_chuj_der(mm,ll,kk,jj,j,i)
6521 & "Numbers of contacts to be sent to other processors",
6522 & (ncont_sent(i),i=1,ntask_cont_to)
6523 write (iout,*) "Contacts sent"
6524 do ii=1,ntask_cont_to
6526 iproc=itask_cont_to(ii)
6527 write (iout,*) nn," contacts to processor",iproc,
6528 & " of CONT_TO_COMM group"
6530 write(iout,'(2f5.0,10f10.5)')(zapas(j,i,ii),j=1,10)
6538 CorrelID1=nfgtasks+fg_rank+1
6540 C Receive the numbers of needed contacts from other processors
6541 do ii=1,ntask_cont_from
6542 iproc=itask_cont_from(ii)
6544 call MPI_Irecv(ncont_recv(ii),1,MPI_INTEGER,iproc,CorrelType,
6545 & FG_COMM,req(ireq),IERR)
6547 c write (iout,*) "IRECV ended"
6549 C Send the number of contacts needed by other processors
6550 do ii=1,ntask_cont_to
6551 iproc=itask_cont_to(ii)
6553 call MPI_Isend(ncont_sent(ii),1,MPI_INTEGER,iproc,CorrelType,
6554 & FG_COMM,req(ireq),IERR)
6556 c write (iout,*) "ISEND ended"
6557 c write (iout,*) "number of requests (nn)",ireq
6560 & call MPI_Waitall(ireq,req,status_array,ierr)
6562 c & "Numbers of contacts to be received from other processors",
6563 c & (ncont_recv(i),i=1,ntask_cont_from)
6567 do ii=1,ntask_cont_from
6568 iproc=itask_cont_from(ii)
6570 c write (iout,*) "Receiving",nn," contacts from processor",iproc,
6571 c & " of CONT_TO_COMM group"
6575 call MPI_Irecv(zapas_recv(1,1,ii),nn*max_dim,
6576 & MPI_DOUBLE_PRECISION,iproc,CorrelType1,FG_COMM,req(ireq),IERR)
6577 c write (iout,*) "ireq,req",ireq,req(ireq)
6580 C Send the contacts to processors that need them
6581 do ii=1,ntask_cont_to
6582 iproc=itask_cont_to(ii)
6584 c write (iout,*) nn," contacts to processor",iproc,
6585 c & " of CONT_TO_COMM group"
6588 call MPI_Isend(zapas(1,1,ii),nn*max_dim,MPI_DOUBLE_PRECISION,
6589 & iproc,CorrelType1,FG_COMM,req(ireq),IERR)
6590 c write (iout,*) "ireq,req",ireq,req(ireq)
6592 c write(iout,'(2f5.0,4f10.5)')(zapas(j,i,ii),j=1,5)
6596 c write (iout,*) "number of requests (contacts)",ireq
6597 c write (iout,*) "req",(req(i),i=1,4)
6600 & call MPI_Waitall(ireq,req,status_array,ierr)
6601 do iii=1,ntask_cont_from
6602 iproc=itask_cont_from(iii)
6605 write (iout,*) "Received",nn," contacts from processor",iproc,
6606 & " of CONT_FROM_COMM group"
6609 write(iout,'(2f5.0,10f10.5)')(zapas_recv(j,i,iii),j=1,10)
6614 ii=zapas_recv(1,i,iii)
6615 c Flag the received contacts to prevent double-counting
6616 jj=-zapas_recv(2,i,iii)
6617 c write (iout,*) "iii",iii," i",i," ii",ii," jj",jj
6619 nnn=num_cont_hb(ii)+1
6622 d_cont(nnn,ii)=zapas_recv(3,i,iii)
6626 grij_hb_cont(kk,nnn,ii)=zapas_recv(ind,i,iii)
6631 a_chuj(ll,kk,nnn,ii)=zapas_recv(ind,i,iii)
6639 a_chuj_der(mm,ll,kk,jj,nnn,ii)=zapas_recv(ind,i,iii)
6648 write (iout,'(a)') 'Contact function values after receive:'
6650 write (iout,'(2i3,50(1x,i3,5f6.3))')
6651 & i,num_cont_hb(i),(jcont_hb(j,i),d_cont(j,i),
6652 & ((a_chuj(ll,kk,j,i),ll=1,2),kk=1,2),j=1,num_cont_hb(i))
6659 write (iout,'(a)') 'Contact function values:'
6661 write (iout,'(2i3,50(1x,i2,5f6.3))')
6662 & i,num_cont_hb(i),(jcont_hb(j,i),d_cont(j,i),
6663 & ((a_chuj(ll,kk,j,i),ll=1,2),kk=1,2),j=1,num_cont_hb(i))
6669 C Remove the loop below after debugging !!!
6676 C Calculate the dipole-dipole interaction energies
6677 if (wcorr6.gt.0.0d0 .or. wturn6.gt.0.0d0) then
6678 do i=iatel_s,iatel_e+1
6679 num_conti=num_cont_hb(i)
6688 C Calculate the local-electrostatic correlation terms
6689 c write (iout,*) "gradcorr5 in eello5 before loop"
6691 c write (iout,'(i5,3f10.5)')
6692 c & iii,(gradcorr5(jjj,iii),jjj=1,3)
6694 do i=min0(iatel_s,iturn4_start),max0(iatel_e+1,iturn3_end+1)
6695 c write (iout,*) "corr loop i",i
6697 num_conti=num_cont_hb(i)
6698 num_conti1=num_cont_hb(i+1)
6705 c write (iout,*) 'i=',i,' j=',j,' i1=',i1,' j1=',j1,
6706 c & ' jj=',jj,' kk=',kk
6707 c if (j1.eq.j+1 .or. j1.eq.j-1) then
6708 if ((j.gt.0 .and. j1.gt.0 .or. j.gt.0 .and. j1.lt.0
6709 & .or. j.lt.0 .and. j1.gt.0) .and.
6710 & (jp1.eq.jp+1 .or. jp1.eq.jp-1)) then
6711 C Contacts I-J and (I+1)-(J+1) or (I+1)-(J-1) occur simultaneously.
6712 C The system gains extra energy.
6714 sqd1=dsqrt(d_cont(jj,i))
6715 sqd2=dsqrt(d_cont(kk,i1))
6716 sred_geom = sqd1*sqd2
6717 IF (sred_geom.lt.cutoff_corr) THEN
6718 call gcont(sred_geom,r0_corr,1.0D0,delt_corr,
6720 cd write (iout,*) 'i=',i,' j=',jp,' i1=',i1,' j1=',jp1,
6721 cd & ' jj=',jj,' kk=',kk
6722 fac_prim1=0.5d0*sqd2/sqd1*fprimcont
6723 fac_prim2=0.5d0*sqd1/sqd2*fprimcont
6725 g_contij(l,1)=fac_prim1*grij_hb_cont(l,jj,i)
6726 g_contij(l,2)=fac_prim2*grij_hb_cont(l,kk,i1)
6729 cd write (iout,*) 'sred_geom=',sred_geom,
6730 cd & ' ekont=',ekont,' fprim=',fprimcont,
6731 cd & ' fac_prim1',fac_prim1,' fac_prim2',fac_prim2
6732 cd write (iout,*) "g_contij",g_contij
6733 cd write (iout,*) "grij_hb_cont i",grij_hb_cont(:,jj,i)
6734 cd write (iout,*) "grij_hb_cont i1",grij_hb_cont(:,jj,i1)
6735 call calc_eello(i,jp,i+1,jp1,jj,kk)
6736 if (wcorr4.gt.0.0d0)
6737 & ecorr=ecorr+eello4(i,jp,i+1,jp1,jj,kk)
6738 if (energy_dec.and.wcorr4.gt.0.0d0)
6739 1 write (iout,'(a6,4i5,0pf7.3)')
6740 2 'ecorr4',i,j,i+1,j1,eello4(i,jp,i+1,jp1,jj,kk)
6741 c write (iout,*) "gradcorr5 before eello5"
6743 c write (iout,'(i5,3f10.5)')
6744 c & iii,(gradcorr5(jjj,iii),jjj=1,3)
6746 if (wcorr5.gt.0.0d0)
6747 & ecorr5=ecorr5+eello5(i,jp,i+1,jp1,jj,kk)
6748 c write (iout,*) "gradcorr5 after eello5"
6750 c write (iout,'(i5,3f10.5)')
6751 c & iii,(gradcorr5(jjj,iii),jjj=1,3)
6753 if (energy_dec.and.wcorr5.gt.0.0d0)
6754 1 write (iout,'(a6,4i5,0pf7.3)')
6755 2 'ecorr5',i,j,i+1,j1,eello5(i,jp,i+1,jp1,jj,kk)
6756 cd write(2,*)'wcorr6',wcorr6,' wturn6',wturn6
6757 cd write(2,*)'ijkl',i,jp,i+1,jp1
6758 if (wcorr6.gt.0.0d0 .and. (jp.ne.i+4 .or. jp1.ne.i+3
6759 & .or. wturn6.eq.0.0d0))then
6760 cd write (iout,*) '******ecorr6: i,j,i+1,j1',i,j,i+1,j1
6761 ecorr6=ecorr6+eello6(i,jp,i+1,jp1,jj,kk)
6762 if (energy_dec) write (iout,'(a6,4i5,0pf7.3)')
6763 1 'ecorr6',i,j,i+1,j1,eello6(i,jp,i+1,jp1,jj,kk)
6764 cd write (iout,*) 'ecorr',ecorr,' ecorr5=',ecorr5,
6765 cd & 'ecorr6=',ecorr6
6766 cd write (iout,'(4e15.5)') sred_geom,
6767 cd & dabs(eello4(i,jp,i+1,jp1,jj,kk)),
6768 cd & dabs(eello5(i,jp,i+1,jp1,jj,kk)),
6769 cd & dabs(eello6(i,jp,i+1,jp1,jj,kk))
6770 else if (wturn6.gt.0.0d0
6771 & .and. (jp.eq.i+4 .and. jp1.eq.i+3)) then
6772 cd write (iout,*) '******eturn6: i,j,i+1,j1',i,jip,i+1,jp1
6773 eturn6=eturn6+eello_turn6(i,jj,kk)
6774 if (energy_dec) write (iout,'(a6,4i5,0pf7.3)')
6775 1 'eturn6',i,j,i+1,j1,eello_turn6(i,jj,kk)
6776 cd write (2,*) 'multibody_eello:eturn6',eturn6
6785 num_cont_hb(i)=num_cont_hb_old(i)
6787 c write (iout,*) "gradcorr5 in eello5"
6789 c write (iout,'(i5,3f10.5)')
6790 c & iii,(gradcorr5(jjj,iii),jjj=1,3)
6794 c------------------------------------------------------------------------------
6795 subroutine add_hb_contact_eello(ii,jj,itask)
6796 implicit real*8 (a-h,o-z)
6797 include "DIMENSIONS"
6798 include "COMMON.IOUNITS"
6801 parameter (max_cont=maxconts)
6802 parameter (max_dim=70)
6803 include "COMMON.CONTACTS"
6804 double precision zapas(max_dim,maxconts,max_fg_procs),
6805 & zapas_recv(max_dim,maxconts,max_fg_procs)
6806 common /przechowalnia/ zapas
6807 integer i,j,ii,jj,iproc,itask(4),nn
6808 c write (iout,*) "itask",itask
6811 if (iproc.gt.0) then
6812 do j=1,num_cont_hb(ii)
6814 c write (iout,*) "send turns i",ii," j",jj," jjc",jjc
6816 ncont_sent(iproc)=ncont_sent(iproc)+1
6817 nn=ncont_sent(iproc)
6818 zapas(1,nn,iproc)=ii
6819 zapas(2,nn,iproc)=jjc
6820 zapas(3,nn,iproc)=d_cont(j,ii)
6824 zapas(ind,nn,iproc)=grij_hb_cont(kk,j,ii)
6829 zapas(ind,nn,iproc)=a_chuj(ll,kk,j,ii)
6837 zapas(ind,nn,iproc)=a_chuj_der(mm,ll,kk,jj,j,ii)
6849 c------------------------------------------------------------------------------
6850 double precision function ehbcorr(i,j,k,l,jj,kk,coeffp,coeffm)
6851 implicit real*8 (a-h,o-z)
6852 include 'DIMENSIONS'
6853 include 'COMMON.IOUNITS'
6854 include 'COMMON.DERIV'
6855 include 'COMMON.INTERACT'
6856 include 'COMMON.CONTACTS'
6857 double precision gx(3),gx1(3)
6867 ees=-(coeffp*ees0pij*ees0pkl+coeffm*ees0mij*ees0mkl)
6868 cd ees=-(coeffp*ees0pkl+coeffm*ees0mkl)
6869 C Following 4 lines for diagnostics.
6874 c write (iout,'(2(a,2i3,a,f10.5,a,2f10.5),a,f10.5,a,$)')
6875 c & 'Contacts ',i,j,
6876 c & ' eij',eij,' eesij',ees0pij,ees0mij,' and ',k,l
6877 c & ,' fcont ',ekl,' eeskl',ees0pkl,ees0mkl,' energy=',ekont*ees,
6879 C Calculate the multi-body contribution to energy.
6880 c ecorr=ecorr+ekont*ees
6881 C Calculate multi-body contributions to the gradient.
6882 coeffpees0pij=coeffp*ees0pij
6883 coeffmees0mij=coeffm*ees0mij
6884 coeffpees0pkl=coeffp*ees0pkl
6885 coeffmees0mkl=coeffm*ees0mkl
6887 cgrad ghalfi=ees*ekl*gacont_hbr(ll,jj,i)
6888 gradcorr(ll,i)=gradcorr(ll,i)!+0.5d0*ghalfi
6889 & -ekont*(coeffpees0pkl*gacontp_hb1(ll,jj,i)+
6890 & coeffmees0mkl*gacontm_hb1(ll,jj,i))
6891 gradcorr(ll,j)=gradcorr(ll,j)!+0.5d0*ghalfi
6892 & -ekont*(coeffpees0pkl*gacontp_hb2(ll,jj,i)+
6893 & coeffmees0mkl*gacontm_hb2(ll,jj,i))
6894 cgrad ghalfk=ees*eij*gacont_hbr(ll,kk,k)
6895 gradcorr(ll,k)=gradcorr(ll,k)!+0.5d0*ghalfk
6896 & -ekont*(coeffpees0pij*gacontp_hb1(ll,kk,k)+
6897 & coeffmees0mij*gacontm_hb1(ll,kk,k))
6898 gradcorr(ll,l)=gradcorr(ll,l)!+0.5d0*ghalfk
6899 & -ekont*(coeffpees0pij*gacontp_hb2(ll,kk,k)+
6900 & coeffmees0mij*gacontm_hb2(ll,kk,k))
6901 gradlongij=ees*ekl*gacont_hbr(ll,jj,i)-
6902 & ekont*(coeffpees0pkl*gacontp_hb3(ll,jj,i)+
6903 & coeffmees0mkl*gacontm_hb3(ll,jj,i))
6904 gradcorr_long(ll,j)=gradcorr_long(ll,j)+gradlongij
6905 gradcorr_long(ll,i)=gradcorr_long(ll,i)-gradlongij
6906 gradlongkl=ees*eij*gacont_hbr(ll,kk,k)-
6907 & ekont*(coeffpees0pij*gacontp_hb3(ll,kk,k)+
6908 & coeffmees0mij*gacontm_hb3(ll,kk,k))
6909 gradcorr_long(ll,l)=gradcorr_long(ll,l)+gradlongkl
6910 gradcorr_long(ll,k)=gradcorr_long(ll,k)-gradlongkl
6911 c write (iout,'(2f10.5,2x,$)') gradlongij,gradlongkl
6916 cgrad gradcorr(ll,m)=gradcorr(ll,m)+
6917 cgrad & ees*ekl*gacont_hbr(ll,jj,i)-
6918 cgrad & ekont*(coeffp*ees0pkl*gacontp_hb3(ll,jj,i)+
6919 cgrad & coeffm*ees0mkl*gacontm_hb3(ll,jj,i))
6924 cgrad gradcorr(ll,m)=gradcorr(ll,m)+
6925 cgrad & ees*eij*gacont_hbr(ll,kk,k)-
6926 cgrad & ekont*(coeffp*ees0pij*gacontp_hb3(ll,kk,k)+
6927 cgrad & coeffm*ees0mij*gacontm_hb3(ll,kk,k))
6930 c write (iout,*) "ehbcorr",ekont*ees
6935 C---------------------------------------------------------------------------
6936 subroutine dipole(i,j,jj)
6937 implicit real*8 (a-h,o-z)
6938 include 'DIMENSIONS'
6939 include 'COMMON.IOUNITS'
6940 include 'COMMON.CHAIN'
6941 include 'COMMON.FFIELD'
6942 include 'COMMON.DERIV'
6943 include 'COMMON.INTERACT'
6944 include 'COMMON.CONTACTS'
6945 include 'COMMON.TORSION'
6946 include 'COMMON.VAR'
6947 include 'COMMON.GEO'
6948 dimension dipi(2,2),dipj(2,2),dipderi(2),dipderj(2),auxvec(2),
6950 iti1 = itortyp(itype(i+1))
6951 if (j.lt.nres-1) then
6952 itj1 = itortyp(itype(j+1))
6957 dipi(iii,1)=Ub2(iii,i)
6958 dipderi(iii)=Ub2der(iii,i)
6959 dipi(iii,2)=b1(iii,iti1)
6960 dipj(iii,1)=Ub2(iii,j)
6961 dipderj(iii)=Ub2der(iii,j)
6962 dipj(iii,2)=b1(iii,itj1)
6966 call matvec2(a_chuj(1,1,jj,i),dipj(1,iii),auxvec(1))
6969 dip(kkk,jj,i)=scalar2(dipi(1,jjj),auxvec(1))
6976 call matvec2(a_chuj_der(1,1,lll,kkk,jj,i),dipj(1,iii),
6980 dipderx(lll,kkk,mmm,jj,i)=scalar2(dipi(1,jjj),auxvec(1))
6985 call transpose2(a_chuj(1,1,jj,i),auxmat(1,1))
6986 call matvec2(auxmat(1,1),dipderi(1),auxvec(1))
6988 dipderg(iii,jj,i)=scalar2(auxvec(1),dipj(1,iii))
6990 call matvec2(a_chuj(1,1,jj,i),dipderj(1),auxvec(1))
6992 dipderg(iii+2,jj,i)=scalar2(auxvec(1),dipi(1,iii))
6997 C---------------------------------------------------------------------------
6998 subroutine calc_eello(i,j,k,l,jj,kk)
7000 C This subroutine computes matrices and vectors needed to calculate
7001 C the fourth-, fifth-, and sixth-order local-electrostatic terms.
7003 implicit real*8 (a-h,o-z)
7004 include 'DIMENSIONS'
7005 include 'COMMON.IOUNITS'
7006 include 'COMMON.CHAIN'
7007 include 'COMMON.DERIV'
7008 include 'COMMON.INTERACT'
7009 include 'COMMON.CONTACTS'
7010 include 'COMMON.TORSION'
7011 include 'COMMON.VAR'
7012 include 'COMMON.GEO'
7013 include 'COMMON.FFIELD'
7014 double precision aa1(2,2),aa2(2,2),aa1t(2,2),aa2t(2,2),
7015 & aa1tder(2,2,3,5),aa2tder(2,2,3,5),auxmat(2,2)
7018 cd write (iout,*) 'calc_eello: i=',i,' j=',j,' k=',k,' l=',l,
7019 cd & ' jj=',jj,' kk=',kk
7020 cd if (i.ne.2 .or. j.ne.4 .or. k.ne.3 .or. l.ne.5) return
7021 cd write (iout,*) "a_chujij",((a_chuj(iii,jjj,jj,i),iii=1,2),jjj=1,2)
7022 cd write (iout,*) "a_chujkl",((a_chuj(iii,jjj,kk,k),iii=1,2),jjj=1,2)
7025 aa1(iii,jjj)=a_chuj(iii,jjj,jj,i)
7026 aa2(iii,jjj)=a_chuj(iii,jjj,kk,k)
7029 call transpose2(aa1(1,1),aa1t(1,1))
7030 call transpose2(aa2(1,1),aa2t(1,1))
7033 call transpose2(a_chuj_der(1,1,lll,kkk,jj,i),
7034 & aa1tder(1,1,lll,kkk))
7035 call transpose2(a_chuj_der(1,1,lll,kkk,kk,k),
7036 & aa2tder(1,1,lll,kkk))
7040 C parallel orientation of the two CA-CA-CA frames.
7042 iti=itortyp(itype(i))
7046 itk1=itortyp(itype(k+1))
7047 itj=itortyp(itype(j))
7048 if (l.lt.nres-1) then
7049 itl1=itortyp(itype(l+1))
7053 C A1 kernel(j+1) A2T
7055 cd write (iout,'(3f10.5,5x,3f10.5)')
7056 cd & (EUg(iii,jjj,k),jjj=1,2),(EUg(iii,jjj,l),jjj=1,2)
7058 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
7059 & aa2tder(1,1,1,1),1,.false.,EUg(1,1,l),EUgder(1,1,l),
7060 & AEA(1,1,1),AEAderg(1,1,1),AEAderx(1,1,1,1,1,1))
7061 C Following matrices are needed only for 6-th order cumulants
7062 IF (wcorr6.gt.0.0d0) THEN
7063 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
7064 & aa2tder(1,1,1,1),1,.false.,EUgC(1,1,l),EUgCder(1,1,l),
7065 & AECA(1,1,1),AECAderg(1,1,1),AECAderx(1,1,1,1,1,1))
7066 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
7067 & aa2tder(1,1,1,1),2,.false.,Ug2DtEUg(1,1,l),
7068 & Ug2DtEUgder(1,1,1,l),ADtEA(1,1,1),ADtEAderg(1,1,1,1),
7069 & ADtEAderx(1,1,1,1,1,1))
7071 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
7072 & aa2tder(1,1,1,1),2,.false.,DtUg2EUg(1,1,l),
7073 & DtUg2EUgder(1,1,1,l),ADtEA1(1,1,1),ADtEA1derg(1,1,1,1),
7074 & ADtEA1derx(1,1,1,1,1,1))
7076 C End 6-th order cumulants
7079 cd write (2,*) 'In calc_eello6'
7081 cd write (2,*) 'iii=',iii
7083 cd write (2,*) 'kkk=',kkk
7085 cd write (2,'(3(2f10.5),5x)')
7086 cd & ((ADtEA1derx(jjj,mmm,lll,kkk,iii,1),mmm=1,2),lll=1,3)
7091 call transpose2(EUgder(1,1,k),auxmat(1,1))
7092 call matmat2(auxmat(1,1),AEA(1,1,1),EAEAderg(1,1,1,1))
7093 call transpose2(EUg(1,1,k),auxmat(1,1))
7094 call matmat2(auxmat(1,1),AEA(1,1,1),EAEA(1,1,1))
7095 call matmat2(auxmat(1,1),AEAderg(1,1,1),EAEAderg(1,1,2,1))
7099 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,1),
7100 & EAEAderx(1,1,lll,kkk,iii,1))
7104 C A1T kernel(i+1) A2
7105 call kernel(aa1t(1,1),aa2(1,1),aa1tder(1,1,1,1),
7106 & a_chuj_der(1,1,1,1,kk,k),1,.false.,EUg(1,1,k),EUgder(1,1,k),
7107 & AEA(1,1,2),AEAderg(1,1,2),AEAderx(1,1,1,1,1,2))
7108 C Following matrices are needed only for 6-th order cumulants
7109 IF (wcorr6.gt.0.0d0) THEN
7110 call kernel(aa1t(1,1),aa2(1,1),aa1tder(1,1,1,1),
7111 & a_chuj_der(1,1,1,1,kk,k),1,.false.,EUgC(1,1,k),EUgCder(1,1,k),
7112 & AECA(1,1,2),AECAderg(1,1,2),AECAderx(1,1,1,1,1,2))
7113 call kernel(aa1t(1,1),aa2(1,1),aa1tder(1,1,1,1),
7114 & a_chuj_der(1,1,1,1,kk,k),2,.false.,Ug2DtEUg(1,1,k),
7115 & Ug2DtEUgder(1,1,1,k),ADtEA(1,1,2),ADtEAderg(1,1,1,2),
7116 & ADtEAderx(1,1,1,1,1,2))
7117 call kernel(aa1t(1,1),aa2(1,1),aa1tder(1,1,1,1),
7118 & a_chuj_der(1,1,1,1,kk,k),2,.false.,DtUg2EUg(1,1,k),
7119 & DtUg2EUgder(1,1,1,k),ADtEA1(1,1,2),ADtEA1derg(1,1,1,2),
7120 & ADtEA1derx(1,1,1,1,1,2))
7122 C End 6-th order cumulants
7123 call transpose2(EUgder(1,1,l),auxmat(1,1))
7124 call matmat2(auxmat(1,1),AEA(1,1,2),EAEAderg(1,1,1,2))
7125 call transpose2(EUg(1,1,l),auxmat(1,1))
7126 call matmat2(auxmat(1,1),AEA(1,1,2),EAEA(1,1,2))
7127 call matmat2(auxmat(1,1),AEAderg(1,1,2),EAEAderg(1,1,2,2))
7131 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,2),
7132 & EAEAderx(1,1,lll,kkk,iii,2))
7137 C Calculate the vectors and their derivatives in virtual-bond dihedral angles.
7138 C They are needed only when the fifth- or the sixth-order cumulants are
7140 IF (wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0) THEN
7141 call transpose2(AEA(1,1,1),auxmat(1,1))
7142 call matvec2(auxmat(1,1),b1(1,iti),AEAb1(1,1,1))
7143 call matvec2(auxmat(1,1),Ub2(1,i),AEAb2(1,1,1))
7144 call matvec2(auxmat(1,1),Ub2der(1,i),AEAb2derg(1,2,1,1))
7145 call transpose2(AEAderg(1,1,1),auxmat(1,1))
7146 call matvec2(auxmat(1,1),b1(1,iti),AEAb1derg(1,1,1))
7147 call matvec2(auxmat(1,1),Ub2(1,i),AEAb2derg(1,1,1,1))
7148 call matvec2(AEA(1,1,1),b1(1,itk1),AEAb1(1,2,1))
7149 call matvec2(AEAderg(1,1,1),b1(1,itk1),AEAb1derg(1,2,1))
7150 call matvec2(AEA(1,1,1),Ub2(1,k+1),AEAb2(1,2,1))
7151 call matvec2(AEAderg(1,1,1),Ub2(1,k+1),AEAb2derg(1,1,2,1))
7152 call matvec2(AEA(1,1,1),Ub2der(1,k+1),AEAb2derg(1,2,2,1))
7153 call transpose2(AEA(1,1,2),auxmat(1,1))
7154 call matvec2(auxmat(1,1),b1(1,itj),AEAb1(1,1,2))
7155 call matvec2(auxmat(1,1),Ub2(1,j),AEAb2(1,1,2))
7156 call matvec2(auxmat(1,1),Ub2der(1,j),AEAb2derg(1,2,1,2))
7157 call transpose2(AEAderg(1,1,2),auxmat(1,1))
7158 call matvec2(auxmat(1,1),b1(1,itj),AEAb1derg(1,1,2))
7159 call matvec2(auxmat(1,1),Ub2(1,j),AEAb2derg(1,1,1,2))
7160 call matvec2(AEA(1,1,2),b1(1,itl1),AEAb1(1,2,2))
7161 call matvec2(AEAderg(1,1,2),b1(1,itl1),AEAb1derg(1,2,2))
7162 call matvec2(AEA(1,1,2),Ub2(1,l+1),AEAb2(1,2,2))
7163 call matvec2(AEAderg(1,1,2),Ub2(1,l+1),AEAb2derg(1,1,2,2))
7164 call matvec2(AEA(1,1,2),Ub2der(1,l+1),AEAb2derg(1,2,2,2))
7165 C Calculate the Cartesian derivatives of the vectors.
7169 call transpose2(AEAderx(1,1,lll,kkk,iii,1),auxmat(1,1))
7170 call matvec2(auxmat(1,1),b1(1,iti),
7171 & AEAb1derx(1,lll,kkk,iii,1,1))
7172 call matvec2(auxmat(1,1),Ub2(1,i),
7173 & AEAb2derx(1,lll,kkk,iii,1,1))
7174 call matvec2(AEAderx(1,1,lll,kkk,iii,1),b1(1,itk1),
7175 & AEAb1derx(1,lll,kkk,iii,2,1))
7176 call matvec2(AEAderx(1,1,lll,kkk,iii,1),Ub2(1,k+1),
7177 & AEAb2derx(1,lll,kkk,iii,2,1))
7178 call transpose2(AEAderx(1,1,lll,kkk,iii,2),auxmat(1,1))
7179 call matvec2(auxmat(1,1),b1(1,itj),
7180 & AEAb1derx(1,lll,kkk,iii,1,2))
7181 call matvec2(auxmat(1,1),Ub2(1,j),
7182 & AEAb2derx(1,lll,kkk,iii,1,2))
7183 call matvec2(AEAderx(1,1,lll,kkk,iii,2),b1(1,itl1),
7184 & AEAb1derx(1,lll,kkk,iii,2,2))
7185 call matvec2(AEAderx(1,1,lll,kkk,iii,2),Ub2(1,l+1),
7186 & AEAb2derx(1,lll,kkk,iii,2,2))
7193 C Antiparallel orientation of the two CA-CA-CA frames.
7195 iti=itortyp(itype(i))
7199 itk1=itortyp(itype(k+1))
7200 itl=itortyp(itype(l))
7201 itj=itortyp(itype(j))
7202 if (j.lt.nres-1) then
7203 itj1=itortyp(itype(j+1))
7207 C A2 kernel(j-1)T A1T
7208 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
7209 & aa2tder(1,1,1,1),1,.true.,EUg(1,1,j),EUgder(1,1,j),
7210 & AEA(1,1,1),AEAderg(1,1,1),AEAderx(1,1,1,1,1,1))
7211 C Following matrices are needed only for 6-th order cumulants
7212 IF (wcorr6.gt.0.0d0 .or. (wturn6.gt.0.0d0 .and.
7213 & j.eq.i+4 .and. l.eq.i+3)) THEN
7214 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
7215 & aa2tder(1,1,1,1),1,.true.,EUgC(1,1,j),EUgCder(1,1,j),
7216 & AECA(1,1,1),AECAderg(1,1,1),AECAderx(1,1,1,1,1,1))
7217 call kernel(aa2(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
7218 & aa2tder(1,1,1,1),2,.true.,Ug2DtEUg(1,1,j),
7219 & Ug2DtEUgder(1,1,1,j),ADtEA(1,1,1),ADtEAderg(1,1,1,1),
7220 & ADtEAderx(1,1,1,1,1,1))
7221 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
7222 & aa2tder(1,1,1,1),2,.true.,DtUg2EUg(1,1,j),
7223 & DtUg2EUgder(1,1,1,j),ADtEA1(1,1,1),ADtEA1derg(1,1,1,1),
7224 & ADtEA1derx(1,1,1,1,1,1))
7226 C End 6-th order cumulants
7227 call transpose2(EUgder(1,1,k),auxmat(1,1))
7228 call matmat2(auxmat(1,1),AEA(1,1,1),EAEAderg(1,1,1,1))
7229 call transpose2(EUg(1,1,k),auxmat(1,1))
7230 call matmat2(auxmat(1,1),AEA(1,1,1),EAEA(1,1,1))
7231 call matmat2(auxmat(1,1),AEAderg(1,1,1),EAEAderg(1,1,2,1))
7235 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,1),
7236 & EAEAderx(1,1,lll,kkk,iii,1))
7240 C A2T kernel(i+1)T A1
7241 call kernel(aa2t(1,1),aa1(1,1),aa2tder(1,1,1,1),
7242 & a_chuj_der(1,1,1,1,jj,i),1,.true.,EUg(1,1,k),EUgder(1,1,k),
7243 & AEA(1,1,2),AEAderg(1,1,2),AEAderx(1,1,1,1,1,2))
7244 C Following matrices are needed only for 6-th order cumulants
7245 IF (wcorr6.gt.0.0d0 .or. (wturn6.gt.0.0d0 .and.
7246 & j.eq.i+4 .and. l.eq.i+3)) THEN
7247 call kernel(aa2t(1,1),aa1(1,1),aa2tder(1,1,1,1),
7248 & a_chuj_der(1,1,1,1,jj,i),1,.true.,EUgC(1,1,k),EUgCder(1,1,k),
7249 & AECA(1,1,2),AECAderg(1,1,2),AECAderx(1,1,1,1,1,2))
7250 call kernel(aa2t(1,1),aa1(1,1),aa2tder(1,1,1,1),
7251 & a_chuj_der(1,1,1,1,jj,i),2,.true.,Ug2DtEUg(1,1,k),
7252 & Ug2DtEUgder(1,1,1,k),ADtEA(1,1,2),ADtEAderg(1,1,1,2),
7253 & ADtEAderx(1,1,1,1,1,2))
7254 call kernel(aa2t(1,1),aa1(1,1),aa2tder(1,1,1,1),
7255 & a_chuj_der(1,1,1,1,jj,i),2,.true.,DtUg2EUg(1,1,k),
7256 & DtUg2EUgder(1,1,1,k),ADtEA1(1,1,2),ADtEA1derg(1,1,1,2),
7257 & ADtEA1derx(1,1,1,1,1,2))
7259 C End 6-th order cumulants
7260 call transpose2(EUgder(1,1,j),auxmat(1,1))
7261 call matmat2(auxmat(1,1),AEA(1,1,1),EAEAderg(1,1,2,2))
7262 call transpose2(EUg(1,1,j),auxmat(1,1))
7263 call matmat2(auxmat(1,1),AEA(1,1,2),EAEA(1,1,2))
7264 call matmat2(auxmat(1,1),AEAderg(1,1,2),EAEAderg(1,1,2,2))
7268 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,2),
7269 & EAEAderx(1,1,lll,kkk,iii,2))
7274 C Calculate the vectors and their derivatives in virtual-bond dihedral angles.
7275 C They are needed only when the fifth- or the sixth-order cumulants are
7277 IF (wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0 .or.
7278 & (wturn6.gt.0.0d0 .and. j.eq.i+4 .and. l.eq.i+3)) THEN
7279 call transpose2(AEA(1,1,1),auxmat(1,1))
7280 call matvec2(auxmat(1,1),b1(1,iti),AEAb1(1,1,1))
7281 call matvec2(auxmat(1,1),Ub2(1,i),AEAb2(1,1,1))
7282 call matvec2(auxmat(1,1),Ub2der(1,i),AEAb2derg(1,2,1,1))
7283 call transpose2(AEAderg(1,1,1),auxmat(1,1))
7284 call matvec2(auxmat(1,1),b1(1,iti),AEAb1derg(1,1,1))
7285 call matvec2(auxmat(1,1),Ub2(1,i),AEAb2derg(1,1,1,1))
7286 call matvec2(AEA(1,1,1),b1(1,itk1),AEAb1(1,2,1))
7287 call matvec2(AEAderg(1,1,1),b1(1,itk1),AEAb1derg(1,2,1))
7288 call matvec2(AEA(1,1,1),Ub2(1,k+1),AEAb2(1,2,1))
7289 call matvec2(AEAderg(1,1,1),Ub2(1,k+1),AEAb2derg(1,1,2,1))
7290 call matvec2(AEA(1,1,1),Ub2der(1,k+1),AEAb2derg(1,2,2,1))
7291 call transpose2(AEA(1,1,2),auxmat(1,1))
7292 call matvec2(auxmat(1,1),b1(1,itj1),AEAb1(1,1,2))
7293 call matvec2(auxmat(1,1),Ub2(1,l),AEAb2(1,1,2))
7294 call matvec2(auxmat(1,1),Ub2der(1,l),AEAb2derg(1,2,1,2))
7295 call transpose2(AEAderg(1,1,2),auxmat(1,1))
7296 call matvec2(auxmat(1,1),b1(1,itl),AEAb1(1,1,2))
7297 call matvec2(auxmat(1,1),Ub2(1,l),AEAb2derg(1,1,1,2))
7298 call matvec2(AEA(1,1,2),b1(1,itj1),AEAb1(1,2,2))
7299 call matvec2(AEAderg(1,1,2),b1(1,itj1),AEAb1derg(1,2,2))
7300 call matvec2(AEA(1,1,2),Ub2(1,j),AEAb2(1,2,2))
7301 call matvec2(AEAderg(1,1,2),Ub2(1,j),AEAb2derg(1,1,2,2))
7302 call matvec2(AEA(1,1,2),Ub2der(1,j),AEAb2derg(1,2,2,2))
7303 C Calculate the Cartesian derivatives of the vectors.
7307 call transpose2(AEAderx(1,1,lll,kkk,iii,1),auxmat(1,1))
7308 call matvec2(auxmat(1,1),b1(1,iti),
7309 & AEAb1derx(1,lll,kkk,iii,1,1))
7310 call matvec2(auxmat(1,1),Ub2(1,i),
7311 & AEAb2derx(1,lll,kkk,iii,1,1))
7312 call matvec2(AEAderx(1,1,lll,kkk,iii,1),b1(1,itk1),
7313 & AEAb1derx(1,lll,kkk,iii,2,1))
7314 call matvec2(AEAderx(1,1,lll,kkk,iii,1),Ub2(1,k+1),
7315 & AEAb2derx(1,lll,kkk,iii,2,1))
7316 call transpose2(AEAderx(1,1,lll,kkk,iii,2),auxmat(1,1))
7317 call matvec2(auxmat(1,1),b1(1,itl),
7318 & AEAb1derx(1,lll,kkk,iii,1,2))
7319 call matvec2(auxmat(1,1),Ub2(1,l),
7320 & AEAb2derx(1,lll,kkk,iii,1,2))
7321 call matvec2(AEAderx(1,1,lll,kkk,iii,2),b1(1,itj1),
7322 & AEAb1derx(1,lll,kkk,iii,2,2))
7323 call matvec2(AEAderx(1,1,lll,kkk,iii,2),Ub2(1,j),
7324 & AEAb2derx(1,lll,kkk,iii,2,2))
7333 C---------------------------------------------------------------------------
7334 subroutine kernel(aa1,aa2t,aa1derx,aa2tderx,nderg,transp,
7335 & KK,KKderg,AKA,AKAderg,AKAderx)
7339 double precision aa1(2,2),aa2t(2,2),aa1derx(2,2,3,5),
7340 & aa2tderx(2,2,3,5),KK(2,2),KKderg(2,2,nderg),AKA(2,2),
7341 & AKAderg(2,2,nderg),AKAderx(2,2,3,5,2)
7346 call prodmat3(aa1(1,1),aa2t(1,1),KK(1,1),transp,AKA(1,1))
7348 call prodmat3(aa1(1,1),aa2t(1,1),KKderg(1,1,iii),transp,
7351 cd if (lprn) write (2,*) 'In kernel'
7353 cd if (lprn) write (2,*) 'kkk=',kkk
7355 call prodmat3(aa1derx(1,1,lll,kkk),aa2t(1,1),
7356 & KK(1,1),transp,AKAderx(1,1,lll,kkk,1))
7358 cd write (2,*) 'lll=',lll
7359 cd write (2,*) 'iii=1'
7361 cd write (2,'(3(2f10.5),5x)')
7362 cd & (AKAderx(jjj,mmm,lll,kkk,1),mmm=1,2)
7365 call prodmat3(aa1(1,1),aa2tderx(1,1,lll,kkk),
7366 & KK(1,1),transp,AKAderx(1,1,lll,kkk,2))
7368 cd write (2,*) 'lll=',lll
7369 cd write (2,*) 'iii=2'
7371 cd write (2,'(3(2f10.5),5x)')
7372 cd & (AKAderx(jjj,mmm,lll,kkk,2),mmm=1,2)
7379 C---------------------------------------------------------------------------
7380 double precision function eello4(i,j,k,l,jj,kk)
7381 implicit real*8 (a-h,o-z)
7382 include 'DIMENSIONS'
7383 include 'COMMON.IOUNITS'
7384 include 'COMMON.CHAIN'
7385 include 'COMMON.DERIV'
7386 include 'COMMON.INTERACT'
7387 include 'COMMON.CONTACTS'
7388 include 'COMMON.TORSION'
7389 include 'COMMON.VAR'
7390 include 'COMMON.GEO'
7391 double precision pizda(2,2),ggg1(3),ggg2(3)
7392 cd if (i.ne.1 .or. j.ne.5 .or. k.ne.2 .or.l.ne.4) then
7396 cd print *,'eello4:',i,j,k,l,jj,kk
7397 cd write (2,*) 'i',i,' j',j,' k',k,' l',l
7398 cd call checkint4(i,j,k,l,jj,kk,eel4_num)
7399 cold eij=facont_hb(jj,i)
7400 cold ekl=facont_hb(kk,k)
7402 eel4=-EAEA(1,1,1)-EAEA(2,2,1)
7403 cd eel41=-EAEA(1,1,2)-EAEA(2,2,2)
7404 gcorr_loc(k-1)=gcorr_loc(k-1)
7405 & -ekont*(EAEAderg(1,1,1,1)+EAEAderg(2,2,1,1))
7407 gcorr_loc(l-1)=gcorr_loc(l-1)
7408 & -ekont*(EAEAderg(1,1,2,1)+EAEAderg(2,2,2,1))
7410 gcorr_loc(j-1)=gcorr_loc(j-1)
7411 & -ekont*(EAEAderg(1,1,2,1)+EAEAderg(2,2,2,1))
7416 derx(lll,kkk,iii)=-EAEAderx(1,1,lll,kkk,iii,1)
7417 & -EAEAderx(2,2,lll,kkk,iii,1)
7418 cd derx(lll,kkk,iii)=0.0d0
7422 cd gcorr_loc(l-1)=0.0d0
7423 cd gcorr_loc(j-1)=0.0d0
7424 cd gcorr_loc(k-1)=0.0d0
7426 cd write (iout,*)'Contacts have occurred for peptide groups',
7427 cd & i,j,' fcont:',eij,' eij',' and ',k,l,
7428 cd & ' fcont ',ekl,' eel4=',eel4,' eel4_num',16*eel4_num
7429 if (j.lt.nres-1) then
7436 if (l.lt.nres-1) then
7444 cgrad ggg1(ll)=eel4*g_contij(ll,1)
7445 cgrad ggg2(ll)=eel4*g_contij(ll,2)
7446 glongij=eel4*g_contij(ll,1)+ekont*derx(ll,1,1)
7447 glongkl=eel4*g_contij(ll,2)+ekont*derx(ll,1,2)
7448 cgrad ghalf=0.5d0*ggg1(ll)
7449 gradcorr(ll,i)=gradcorr(ll,i)+ekont*derx(ll,2,1)
7450 gradcorr(ll,i+1)=gradcorr(ll,i+1)+ekont*derx(ll,3,1)
7451 gradcorr(ll,j)=gradcorr(ll,j)+ekont*derx(ll,4,1)
7452 gradcorr(ll,j1)=gradcorr(ll,j1)+ekont*derx(ll,5,1)
7453 gradcorr_long(ll,j)=gradcorr_long(ll,j)+glongij
7454 gradcorr_long(ll,i)=gradcorr_long(ll,i)-glongij
7455 cgrad ghalf=0.5d0*ggg2(ll)
7456 gradcorr(ll,k)=gradcorr(ll,k)+ekont*derx(ll,2,2)
7457 gradcorr(ll,k+1)=gradcorr(ll,k+1)+ekont*derx(ll,3,2)
7458 gradcorr(ll,l)=gradcorr(ll,l)+ekont*derx(ll,4,2)
7459 gradcorr(ll,l1)=gradcorr(ll,l1)+ekont*derx(ll,5,2)
7460 gradcorr_long(ll,l)=gradcorr_long(ll,l)+glongkl
7461 gradcorr_long(ll,k)=gradcorr_long(ll,k)-glongkl
7465 cgrad gradcorr(ll,m)=gradcorr(ll,m)+ggg1(ll)
7470 cgrad gradcorr(ll,m)=gradcorr(ll,m)+ggg2(ll)
7475 cgrad gradcorr(ll,m)=gradcorr(ll,m)+ekont*derx(ll,1,1)
7480 cgrad gradcorr(ll,m)=gradcorr(ll,m)+ekont*derx(ll,1,2)
7484 cd write (2,*) iii,gcorr_loc(iii)
7487 cd write (2,*) 'ekont',ekont
7488 cd write (iout,*) 'eello4',ekont*eel4
7491 C---------------------------------------------------------------------------
7492 double precision function eello5(i,j,k,l,jj,kk)
7493 implicit real*8 (a-h,o-z)
7494 include 'DIMENSIONS'
7495 include 'COMMON.IOUNITS'
7496 include 'COMMON.CHAIN'
7497 include 'COMMON.DERIV'
7498 include 'COMMON.INTERACT'
7499 include 'COMMON.CONTACTS'
7500 include 'COMMON.TORSION'
7501 include 'COMMON.VAR'
7502 include 'COMMON.GEO'
7503 double precision pizda(2,2),auxmat(2,2),auxmat1(2,2),vv(2)
7504 double precision ggg1(3),ggg2(3)
7505 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
7510 C /l\ / \ \ / \ / \ / C
7511 C / \ / \ \ / \ / \ / C
7512 C j| o |l1 | o | o| o | | o |o C
7513 C \ |/k\| |/ \| / |/ \| |/ \| C
7514 C \i/ \ / \ / / \ / \ C
7516 C (I) (II) (III) (IV) C
7518 C eello5_1 eello5_2 eello5_3 eello5_4 C
7520 C Antiparallel chains C
7523 C /j\ / \ \ / \ / \ / C
7524 C / \ / \ \ / \ / \ / C
7525 C j1| o |l | o | o| o | | o |o C
7526 C \ |/k\| |/ \| / |/ \| |/ \| C
7527 C \i/ \ / \ / / \ / \ C
7529 C (I) (II) (III) (IV) C
7531 C eello5_1 eello5_2 eello5_3 eello5_4 C
7533 C o denotes a local interaction, vertical lines an electrostatic interaction. C
7535 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
7536 cd if (i.ne.2 .or. j.ne.6 .or. k.ne.3 .or. l.ne.5) then
7541 cd & 'EELLO5: Contacts have occurred for peptide groups',i,j,
7543 itk=itortyp(itype(k))
7544 itl=itortyp(itype(l))
7545 itj=itortyp(itype(j))
7550 cd call checkint5(i,j,k,l,jj,kk,eel5_1_num,eel5_2_num,
7551 cd & eel5_3_num,eel5_4_num)
7555 derx(lll,kkk,iii)=0.0d0
7559 cd eij=facont_hb(jj,i)
7560 cd ekl=facont_hb(kk,k)
7562 cd write (iout,*)'Contacts have occurred for peptide groups',
7563 cd & i,j,' fcont:',eij,' eij',' and ',k,l
7565 C Contribution from the graph I.
7566 cd write (2,*) 'AEA ',AEA(1,1,1),AEA(2,1,1),AEA(1,2,1),AEA(2,2,1)
7567 cd write (2,*) 'AEAb2',AEAb2(1,1,1),AEAb2(2,1,1)
7568 call transpose2(EUg(1,1,k),auxmat(1,1))
7569 call matmat2(AEA(1,1,1),auxmat(1,1),pizda(1,1))
7570 vv(1)=pizda(1,1)-pizda(2,2)
7571 vv(2)=pizda(1,2)+pizda(2,1)
7572 eello5_1=scalar2(AEAb2(1,1,1),Ub2(1,k))
7573 & +0.5d0*scalar2(vv(1),Dtobr2(1,i))
7574 C Explicit gradient in virtual-dihedral angles.
7575 if (i.gt.1) g_corr5_loc(i-1)=g_corr5_loc(i-1)
7576 & +ekont*(scalar2(AEAb2derg(1,2,1,1),Ub2(1,k))
7577 & +0.5d0*scalar2(vv(1),Dtobr2der(1,i)))
7578 call transpose2(EUgder(1,1,k),auxmat1(1,1))
7579 call matmat2(AEA(1,1,1),auxmat1(1,1),pizda(1,1))
7580 vv(1)=pizda(1,1)-pizda(2,2)
7581 vv(2)=pizda(1,2)+pizda(2,1)
7582 g_corr5_loc(k-1)=g_corr5_loc(k-1)
7583 & +ekont*(scalar2(AEAb2(1,1,1),Ub2der(1,k))
7584 & +0.5d0*scalar2(vv(1),Dtobr2(1,i)))
7585 call matmat2(AEAderg(1,1,1),auxmat(1,1),pizda(1,1))
7586 vv(1)=pizda(1,1)-pizda(2,2)
7587 vv(2)=pizda(1,2)+pizda(2,1)
7589 if (l.lt.nres-1) g_corr5_loc(l-1)=g_corr5_loc(l-1)
7590 & +ekont*(scalar2(AEAb2derg(1,1,1,1),Ub2(1,k))
7591 & +0.5d0*scalar2(vv(1),Dtobr2(1,i)))
7593 if (j.lt.nres-1) g_corr5_loc(j-1)=g_corr5_loc(j-1)
7594 & +ekont*(scalar2(AEAb2derg(1,1,1,1),Ub2(1,k))
7595 & +0.5d0*scalar2(vv(1),Dtobr2(1,i)))
7597 C Cartesian gradient
7601 call matmat2(AEAderx(1,1,lll,kkk,iii,1),auxmat(1,1),
7603 vv(1)=pizda(1,1)-pizda(2,2)
7604 vv(2)=pizda(1,2)+pizda(2,1)
7605 derx(lll,kkk,iii)=derx(lll,kkk,iii)
7606 & +scalar2(AEAb2derx(1,lll,kkk,iii,1,1),Ub2(1,k))
7607 & +0.5d0*scalar2(vv(1),Dtobr2(1,i))
7613 C Contribution from graph II
7614 call transpose2(EE(1,1,itk),auxmat(1,1))
7615 call matmat2(auxmat(1,1),AEA(1,1,1),pizda(1,1))
7616 vv(1)=pizda(1,1)+pizda(2,2)
7617 vv(2)=pizda(2,1)-pizda(1,2)
7618 eello5_2=scalar2(AEAb1(1,2,1),b1(1,itk))
7619 & -0.5d0*scalar2(vv(1),Ctobr(1,k))
7620 C Explicit gradient in virtual-dihedral angles.
7621 g_corr5_loc(k-1)=g_corr5_loc(k-1)
7622 & -0.5d0*ekont*scalar2(vv(1),Ctobrder(1,k))
7623 call matmat2(auxmat(1,1),AEAderg(1,1,1),pizda(1,1))
7624 vv(1)=pizda(1,1)+pizda(2,2)
7625 vv(2)=pizda(2,1)-pizda(1,2)
7627 g_corr5_loc(l-1)=g_corr5_loc(l-1)
7628 & +ekont*(scalar2(AEAb1derg(1,2,1),b1(1,itk))
7629 & -0.5d0*scalar2(vv(1),Ctobr(1,k)))
7631 g_corr5_loc(j-1)=g_corr5_loc(j-1)
7632 & +ekont*(scalar2(AEAb1derg(1,2,1),b1(1,itk))
7633 & -0.5d0*scalar2(vv(1),Ctobr(1,k)))
7635 C Cartesian gradient
7639 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,1),
7641 vv(1)=pizda(1,1)+pizda(2,2)
7642 vv(2)=pizda(2,1)-pizda(1,2)
7643 derx(lll,kkk,iii)=derx(lll,kkk,iii)
7644 & +scalar2(AEAb1derx(1,lll,kkk,iii,2,1),b1(1,itk))
7645 & -0.5d0*scalar2(vv(1),Ctobr(1,k))
7653 C Parallel orientation
7654 C Contribution from graph III
7655 call transpose2(EUg(1,1,l),auxmat(1,1))
7656 call matmat2(AEA(1,1,2),auxmat(1,1),pizda(1,1))
7657 vv(1)=pizda(1,1)-pizda(2,2)
7658 vv(2)=pizda(1,2)+pizda(2,1)
7659 eello5_3=scalar2(AEAb2(1,1,2),Ub2(1,l))
7660 & +0.5d0*scalar2(vv(1),Dtobr2(1,j))
7661 C Explicit gradient in virtual-dihedral angles.
7662 g_corr5_loc(j-1)=g_corr5_loc(j-1)
7663 & +ekont*(scalar2(AEAb2derg(1,2,1,2),Ub2(1,l))
7664 & +0.5d0*scalar2(vv(1),Dtobr2der(1,j)))
7665 call matmat2(AEAderg(1,1,2),auxmat(1,1),pizda(1,1))
7666 vv(1)=pizda(1,1)-pizda(2,2)
7667 vv(2)=pizda(1,2)+pizda(2,1)
7668 g_corr5_loc(k-1)=g_corr5_loc(k-1)
7669 & +ekont*(scalar2(AEAb2derg(1,1,1,2),Ub2(1,l))
7670 & +0.5d0*scalar2(vv(1),Dtobr2(1,j)))
7671 call transpose2(EUgder(1,1,l),auxmat1(1,1))
7672 call matmat2(AEA(1,1,2),auxmat1(1,1),pizda(1,1))
7673 vv(1)=pizda(1,1)-pizda(2,2)
7674 vv(2)=pizda(1,2)+pizda(2,1)
7675 g_corr5_loc(l-1)=g_corr5_loc(l-1)
7676 & +ekont*(scalar2(AEAb2(1,1,2),Ub2der(1,l))
7677 & +0.5d0*scalar2(vv(1),Dtobr2(1,j)))
7678 C Cartesian gradient
7682 call matmat2(AEAderx(1,1,lll,kkk,iii,2),auxmat(1,1),
7684 vv(1)=pizda(1,1)-pizda(2,2)
7685 vv(2)=pizda(1,2)+pizda(2,1)
7686 derx(lll,kkk,iii)=derx(lll,kkk,iii)
7687 & +scalar2(AEAb2derx(1,lll,kkk,iii,1,2),Ub2(1,l))
7688 & +0.5d0*scalar2(vv(1),Dtobr2(1,j))
7693 C Contribution from graph IV
7695 call transpose2(EE(1,1,itl),auxmat(1,1))
7696 call matmat2(auxmat(1,1),AEA(1,1,2),pizda(1,1))
7697 vv(1)=pizda(1,1)+pizda(2,2)
7698 vv(2)=pizda(2,1)-pizda(1,2)
7699 eello5_4=scalar2(AEAb1(1,2,2),b1(1,itl))
7700 & -0.5d0*scalar2(vv(1),Ctobr(1,l))
7701 C Explicit gradient in virtual-dihedral angles.
7702 g_corr5_loc(l-1)=g_corr5_loc(l-1)
7703 & -0.5d0*ekont*scalar2(vv(1),Ctobrder(1,l))
7704 call matmat2(auxmat(1,1),AEAderg(1,1,2),pizda(1,1))
7705 vv(1)=pizda(1,1)+pizda(2,2)
7706 vv(2)=pizda(2,1)-pizda(1,2)
7707 g_corr5_loc(k-1)=g_corr5_loc(k-1)
7708 & +ekont*(scalar2(AEAb1derg(1,2,2),b1(1,itl))
7709 & -0.5d0*scalar2(vv(1),Ctobr(1,l)))
7710 C Cartesian gradient
7714 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,2),
7716 vv(1)=pizda(1,1)+pizda(2,2)
7717 vv(2)=pizda(2,1)-pizda(1,2)
7718 derx(lll,kkk,iii)=derx(lll,kkk,iii)
7719 & +scalar2(AEAb1derx(1,lll,kkk,iii,2,2),b1(1,itl))
7720 & -0.5d0*scalar2(vv(1),Ctobr(1,l))
7725 C Antiparallel orientation
7726 C Contribution from graph III
7728 call transpose2(EUg(1,1,j),auxmat(1,1))
7729 call matmat2(AEA(1,1,2),auxmat(1,1),pizda(1,1))
7730 vv(1)=pizda(1,1)-pizda(2,2)
7731 vv(2)=pizda(1,2)+pizda(2,1)
7732 eello5_3=scalar2(AEAb2(1,1,2),Ub2(1,j))
7733 & +0.5d0*scalar2(vv(1),Dtobr2(1,l))
7734 C Explicit gradient in virtual-dihedral angles.
7735 g_corr5_loc(l-1)=g_corr5_loc(l-1)
7736 & +ekont*(scalar2(AEAb2derg(1,2,1,2),Ub2(1,j))
7737 & +0.5d0*scalar2(vv(1),Dtobr2der(1,l)))
7738 call matmat2(AEAderg(1,1,2),auxmat(1,1),pizda(1,1))
7739 vv(1)=pizda(1,1)-pizda(2,2)
7740 vv(2)=pizda(1,2)+pizda(2,1)
7741 g_corr5_loc(k-1)=g_corr5_loc(k-1)
7742 & +ekont*(scalar2(AEAb2derg(1,1,1,2),Ub2(1,j))
7743 & +0.5d0*scalar2(vv(1),Dtobr2(1,l)))
7744 call transpose2(EUgder(1,1,j),auxmat1(1,1))
7745 call matmat2(AEA(1,1,2),auxmat1(1,1),pizda(1,1))
7746 vv(1)=pizda(1,1)-pizda(2,2)
7747 vv(2)=pizda(1,2)+pizda(2,1)
7748 g_corr5_loc(j-1)=g_corr5_loc(j-1)
7749 & +ekont*(scalar2(AEAb2(1,1,2),Ub2der(1,j))
7750 & +0.5d0*scalar2(vv(1),Dtobr2(1,l)))
7751 C Cartesian gradient
7755 call matmat2(AEAderx(1,1,lll,kkk,iii,2),auxmat(1,1),
7757 vv(1)=pizda(1,1)-pizda(2,2)
7758 vv(2)=pizda(1,2)+pizda(2,1)
7759 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)
7760 & +scalar2(AEAb2derx(1,lll,kkk,iii,1,2),Ub2(1,j))
7761 & +0.5d0*scalar2(vv(1),Dtobr2(1,l))
7766 C Contribution from graph IV
7768 call transpose2(EE(1,1,itj),auxmat(1,1))
7769 call matmat2(auxmat(1,1),AEA(1,1,2),pizda(1,1))
7770 vv(1)=pizda(1,1)+pizda(2,2)
7771 vv(2)=pizda(2,1)-pizda(1,2)
7772 eello5_4=scalar2(AEAb1(1,2,2),b1(1,itj))
7773 & -0.5d0*scalar2(vv(1),Ctobr(1,j))
7774 C Explicit gradient in virtual-dihedral angles.
7775 g_corr5_loc(j-1)=g_corr5_loc(j-1)
7776 & -0.5d0*ekont*scalar2(vv(1),Ctobrder(1,j))
7777 call matmat2(auxmat(1,1),AEAderg(1,1,2),pizda(1,1))
7778 vv(1)=pizda(1,1)+pizda(2,2)
7779 vv(2)=pizda(2,1)-pizda(1,2)
7780 g_corr5_loc(k-1)=g_corr5_loc(k-1)
7781 & +ekont*(scalar2(AEAb1derg(1,2,2),b1(1,itj))
7782 & -0.5d0*scalar2(vv(1),Ctobr(1,j)))
7783 C Cartesian gradient
7787 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,2),
7789 vv(1)=pizda(1,1)+pizda(2,2)
7790 vv(2)=pizda(2,1)-pizda(1,2)
7791 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)
7792 & +scalar2(AEAb1derx(1,lll,kkk,iii,2,2),b1(1,itj))
7793 & -0.5d0*scalar2(vv(1),Ctobr(1,j))
7799 eel5=eello5_1+eello5_2+eello5_3+eello5_4
7800 cd if (i.eq.2 .and. j.eq.8 .and. k.eq.3 .and. l.eq.7) then
7801 cd write (2,*) 'ijkl',i,j,k,l
7802 cd write (2,*) 'eello5_1',eello5_1,' eello5_2',eello5_2,
7803 cd & ' eello5_3',eello5_3,' eello5_4',eello5_4
7805 cd write(iout,*) 'eello5_1',eello5_1,' eel5_1_num',16*eel5_1_num
7806 cd write(iout,*) 'eello5_2',eello5_2,' eel5_2_num',16*eel5_2_num
7807 cd write(iout,*) 'eello5_3',eello5_3,' eel5_3_num',16*eel5_3_num
7808 cd write(iout,*) 'eello5_4',eello5_4,' eel5_4_num',16*eel5_4_num
7809 if (j.lt.nres-1) then
7816 if (l.lt.nres-1) then
7826 cd write (2,*) 'eij',eij,' ekl',ekl,' ekont',ekont
7827 C 2/11/08 AL Gradients over DC's connecting interacting sites will be
7828 C summed up outside the subrouine as for the other subroutines
7829 C handling long-range interactions. The old code is commented out
7830 C with "cgrad" to keep track of changes.
7832 cgrad ggg1(ll)=eel5*g_contij(ll,1)
7833 cgrad ggg2(ll)=eel5*g_contij(ll,2)
7834 gradcorr5ij=eel5*g_contij(ll,1)+ekont*derx(ll,1,1)
7835 gradcorr5kl=eel5*g_contij(ll,2)+ekont*derx(ll,1,2)
7836 c write (iout,'(a,3i3,a,5f8.3,2i3,a,5f8.3,a,f8.3)')
7837 c & "ecorr5",ll,i,j," derx",derx(ll,2,1),derx(ll,3,1),derx(ll,4,1),
7838 c & derx(ll,5,1),k,l," derx",derx(ll,2,2),derx(ll,3,2),
7839 c & derx(ll,4,2),derx(ll,5,2)," ekont",ekont
7840 c write (iout,'(a,3i3,a,3f8.3,2i3,a,3f8.3)')
7841 c & "ecorr5",ll,i,j," gradcorr5",g_contij(ll,1),derx(ll,1,1),
7843 c & k,l," gradcorr5",g_contij(ll,2),derx(ll,1,2),gradcorr5kl
7844 cold ghalf=0.5d0*eel5*ekl*gacont_hbr(ll,jj,i)
7845 cgrad ghalf=0.5d0*ggg1(ll)
7847 gradcorr5(ll,i)=gradcorr5(ll,i)+ekont*derx(ll,2,1)
7848 gradcorr5(ll,i+1)=gradcorr5(ll,i+1)+ekont*derx(ll,3,1)
7849 gradcorr5(ll,j)=gradcorr5(ll,j)+ekont*derx(ll,4,1)
7850 gradcorr5(ll,j1)=gradcorr5(ll,j1)+ekont*derx(ll,5,1)
7851 gradcorr5_long(ll,j)=gradcorr5_long(ll,j)+gradcorr5ij
7852 gradcorr5_long(ll,i)=gradcorr5_long(ll,i)-gradcorr5ij
7853 cold ghalf=0.5d0*eel5*eij*gacont_hbr(ll,kk,k)
7854 cgrad ghalf=0.5d0*ggg2(ll)
7856 gradcorr5(ll,k)=gradcorr5(ll,k)+ghalf+ekont*derx(ll,2,2)
7857 gradcorr5(ll,k+1)=gradcorr5(ll,k+1)+ekont*derx(ll,3,2)
7858 gradcorr5(ll,l)=gradcorr5(ll,l)+ghalf+ekont*derx(ll,4,2)
7859 gradcorr5(ll,l1)=gradcorr5(ll,l1)+ekont*derx(ll,5,2)
7860 gradcorr5_long(ll,l)=gradcorr5_long(ll,l)+gradcorr5kl
7861 gradcorr5_long(ll,k)=gradcorr5_long(ll,k)-gradcorr5kl
7866 cold gradcorr5(ll,m)=gradcorr5(ll,m)+eel5*ekl*gacont_hbr(ll,jj,i)
7867 cgrad gradcorr5(ll,m)=gradcorr5(ll,m)+ggg1(ll)
7872 cold gradcorr5(ll,m)=gradcorr5(ll,m)+eel5*eij*gacont_hbr(ll,kk,k)
7873 cgrad gradcorr5(ll,m)=gradcorr5(ll,m)+ggg2(ll)
7879 cgrad gradcorr5(ll,m)=gradcorr5(ll,m)+ekont*derx(ll,1,1)
7884 cgrad gradcorr5(ll,m)=gradcorr5(ll,m)+ekont*derx(ll,1,2)
7888 cd write (2,*) iii,g_corr5_loc(iii)
7891 cd write (2,*) 'ekont',ekont
7892 cd write (iout,*) 'eello5',ekont*eel5
7895 c--------------------------------------------------------------------------
7896 double precision function eello6(i,j,k,l,jj,kk)
7897 implicit real*8 (a-h,o-z)
7898 include 'DIMENSIONS'
7899 include 'COMMON.IOUNITS'
7900 include 'COMMON.CHAIN'
7901 include 'COMMON.DERIV'
7902 include 'COMMON.INTERACT'
7903 include 'COMMON.CONTACTS'
7904 include 'COMMON.TORSION'
7905 include 'COMMON.VAR'
7906 include 'COMMON.GEO'
7907 include 'COMMON.FFIELD'
7908 double precision ggg1(3),ggg2(3)
7909 cd if (i.ne.1 .or. j.ne.3 .or. k.ne.2 .or. l.ne.4) then
7914 cd & 'EELLO6: Contacts have occurred for peptide groups',i,j,
7922 cd call checkint6(i,j,k,l,jj,kk,eel6_1_num,eel6_2_num,
7923 cd & eel6_3_num,eel6_4_num,eel6_5_num,eel6_6_num)
7927 derx(lll,kkk,iii)=0.0d0
7931 cd eij=facont_hb(jj,i)
7932 cd ekl=facont_hb(kk,k)
7938 eello6_1=eello6_graph1(i,j,k,l,1,.false.)
7939 eello6_2=eello6_graph1(j,i,l,k,2,.false.)
7940 eello6_3=eello6_graph2(i,j,k,l,jj,kk,.false.)
7941 eello6_4=eello6_graph4(i,j,k,l,jj,kk,1,.false.)
7942 eello6_5=eello6_graph4(j,i,l,k,jj,kk,2,.false.)
7943 eello6_6=eello6_graph3(i,j,k,l,jj,kk,.false.)
7945 eello6_1=eello6_graph1(i,j,k,l,1,.false.)
7946 eello6_2=eello6_graph1(l,k,j,i,2,.true.)
7947 eello6_3=eello6_graph2(i,l,k,j,jj,kk,.true.)
7948 eello6_4=eello6_graph4(i,j,k,l,jj,kk,1,.false.)
7949 if (wturn6.eq.0.0d0 .or. j.ne.i+4) then
7950 eello6_5=eello6_graph4(l,k,j,i,kk,jj,2,.true.)
7954 eello6_6=eello6_graph3(i,l,k,j,jj,kk,.true.)
7956 C If turn contributions are considered, they will be handled separately.
7957 eel6=eello6_1+eello6_2+eello6_3+eello6_4+eello6_5+eello6_6
7958 cd write(iout,*) 'eello6_1',eello6_1!,' eel6_1_num',16*eel6_1_num
7959 cd write(iout,*) 'eello6_2',eello6_2!,' eel6_2_num',16*eel6_2_num
7960 cd write(iout,*) 'eello6_3',eello6_3!,' eel6_3_num',16*eel6_3_num
7961 cd write(iout,*) 'eello6_4',eello6_4!,' eel6_4_num',16*eel6_4_num
7962 cd write(iout,*) 'eello6_5',eello6_5!,' eel6_5_num',16*eel6_5_num
7963 cd write(iout,*) 'eello6_6',eello6_6!,' eel6_6_num',16*eel6_6_num
7965 if (j.lt.nres-1) then
7972 if (l.lt.nres-1) then
7980 cgrad ggg1(ll)=eel6*g_contij(ll,1)
7981 cgrad ggg2(ll)=eel6*g_contij(ll,2)
7982 cold ghalf=0.5d0*eel6*ekl*gacont_hbr(ll,jj,i)
7983 cgrad ghalf=0.5d0*ggg1(ll)
7985 gradcorr6ij=eel6*g_contij(ll,1)+ekont*derx(ll,1,1)
7986 gradcorr6kl=eel6*g_contij(ll,2)+ekont*derx(ll,1,2)
7987 gradcorr6(ll,i)=gradcorr6(ll,i)+ekont*derx(ll,2,1)
7988 gradcorr6(ll,i+1)=gradcorr6(ll,i+1)+ekont*derx(ll,3,1)
7989 gradcorr6(ll,j)=gradcorr6(ll,j)+ekont*derx(ll,4,1)
7990 gradcorr6(ll,j1)=gradcorr6(ll,j1)+ekont*derx(ll,5,1)
7991 gradcorr6_long(ll,j)=gradcorr6_long(ll,j)+gradcorr6ij
7992 gradcorr6_long(ll,i)=gradcorr6_long(ll,i)-gradcorr6ij
7993 cgrad ghalf=0.5d0*ggg2(ll)
7994 cold ghalf=0.5d0*eel6*eij*gacont_hbr(ll,kk,k)
7996 gradcorr6(ll,k)=gradcorr6(ll,k)+ekont*derx(ll,2,2)
7997 gradcorr6(ll,k+1)=gradcorr6(ll,k+1)+ekont*derx(ll,3,2)
7998 gradcorr6(ll,l)=gradcorr6(ll,l)+ekont*derx(ll,4,2)
7999 gradcorr6(ll,l1)=gradcorr6(ll,l1)+ekont*derx(ll,5,2)
8000 gradcorr6_long(ll,l)=gradcorr6_long(ll,l)+gradcorr6kl
8001 gradcorr6_long(ll,k)=gradcorr6_long(ll,k)-gradcorr6kl
8006 cold gradcorr6(ll,m)=gradcorr6(ll,m)+eel6*ekl*gacont_hbr(ll,jj,i)
8007 cgrad gradcorr6(ll,m)=gradcorr6(ll,m)+ggg1(ll)
8012 cold gradcorr6(ll,m)=gradcorr6(ll,m)+eel6*eij*gacont_hbr(ll,kk,k)
8013 cgrad gradcorr6(ll,m)=gradcorr6(ll,m)+ggg2(ll)
8019 cgrad gradcorr6(ll,m)=gradcorr6(ll,m)+ekont*derx(ll,1,1)
8024 cgrad gradcorr6(ll,m)=gradcorr6(ll,m)+ekont*derx(ll,1,2)
8028 cd write (2,*) iii,g_corr6_loc(iii)
8031 cd write (2,*) 'ekont',ekont
8032 cd write (iout,*) 'eello6',ekont*eel6
8035 c--------------------------------------------------------------------------
8036 double precision function eello6_graph1(i,j,k,l,imat,swap)
8037 implicit real*8 (a-h,o-z)
8038 include 'DIMENSIONS'
8039 include 'COMMON.IOUNITS'
8040 include 'COMMON.CHAIN'
8041 include 'COMMON.DERIV'
8042 include 'COMMON.INTERACT'
8043 include 'COMMON.CONTACTS'
8044 include 'COMMON.TORSION'
8045 include 'COMMON.VAR'
8046 include 'COMMON.GEO'
8047 double precision vv(2),vv1(2),pizda(2,2),auxmat(2,2),pizda1(2,2)
8051 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
8053 C Parallel Antiparallel
8059 C \ j|/k\| / \ |/k\|l /
8064 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
8065 itk=itortyp(itype(k))
8066 s1= scalar2(AEAb1(1,2,imat),CUgb2(1,i))
8067 s2=-scalar2(AEAb2(1,1,imat),Ug2Db1t(1,k))
8068 s3= scalar2(AEAb2(1,1,imat),CUgb2(1,k))
8069 call transpose2(EUgC(1,1,k),auxmat(1,1))
8070 call matmat2(AEA(1,1,imat),auxmat(1,1),pizda1(1,1))
8071 vv1(1)=pizda1(1,1)-pizda1(2,2)
8072 vv1(2)=pizda1(1,2)+pizda1(2,1)
8073 s4=0.5d0*scalar2(vv1(1),Dtobr2(1,i))
8074 vv(1)=AEAb1(1,2,imat)*b1(1,itk)-AEAb1(2,2,imat)*b1(2,itk)
8075 vv(2)=AEAb1(1,2,imat)*b1(2,itk)+AEAb1(2,2,imat)*b1(1,itk)
8076 s5=scalar2(vv(1),Dtobr2(1,i))
8077 cd write (2,*) 's1',s1,' s2',s2,' s3',s3,' s4', s4,' s5',s5
8078 eello6_graph1=-0.5d0*(s1+s2+s3+s4+s5)
8079 if (i.gt.1) g_corr6_loc(i-1)=g_corr6_loc(i-1)
8080 & -0.5d0*ekont*(scalar2(AEAb1(1,2,imat),CUgb2der(1,i))
8081 & -scalar2(AEAb2derg(1,2,1,imat),Ug2Db1t(1,k))
8082 & +scalar2(AEAb2derg(1,2,1,imat),CUgb2(1,k))
8083 & +0.5d0*scalar2(vv1(1),Dtobr2der(1,i))
8084 & +scalar2(vv(1),Dtobr2der(1,i)))
8085 call matmat2(AEAderg(1,1,imat),auxmat(1,1),pizda1(1,1))
8086 vv1(1)=pizda1(1,1)-pizda1(2,2)
8087 vv1(2)=pizda1(1,2)+pizda1(2,1)
8088 vv(1)=AEAb1derg(1,2,imat)*b1(1,itk)-AEAb1derg(2,2,imat)*b1(2,itk)
8089 vv(2)=AEAb1derg(1,2,imat)*b1(2,itk)+AEAb1derg(2,2,imat)*b1(1,itk)
8091 g_corr6_loc(l-1)=g_corr6_loc(l-1)
8092 & +ekont*(-0.5d0*(scalar2(AEAb1derg(1,2,imat),CUgb2(1,i))
8093 & -scalar2(AEAb2derg(1,1,1,imat),Ug2Db1t(1,k))
8094 & +scalar2(AEAb2derg(1,1,1,imat),CUgb2(1,k))
8095 & +0.5d0*scalar2(vv1(1),Dtobr2(1,i))+scalar2(vv(1),Dtobr2(1,i))))
8097 g_corr6_loc(j-1)=g_corr6_loc(j-1)
8098 & +ekont*(-0.5d0*(scalar2(AEAb1derg(1,2,imat),CUgb2(1,i))
8099 & -scalar2(AEAb2derg(1,1,1,imat),Ug2Db1t(1,k))
8100 & +scalar2(AEAb2derg(1,1,1,imat),CUgb2(1,k))
8101 & +0.5d0*scalar2(vv1(1),Dtobr2(1,i))+scalar2(vv(1),Dtobr2(1,i))))
8103 call transpose2(EUgCder(1,1,k),auxmat(1,1))
8104 call matmat2(AEA(1,1,imat),auxmat(1,1),pizda1(1,1))
8105 vv1(1)=pizda1(1,1)-pizda1(2,2)
8106 vv1(2)=pizda1(1,2)+pizda1(2,1)
8107 if (k.gt.1) g_corr6_loc(k-1)=g_corr6_loc(k-1)
8108 & +ekont*(-0.5d0*(-scalar2(AEAb2(1,1,imat),Ug2Db1tder(1,k))
8109 & +scalar2(AEAb2(1,1,imat),CUgb2der(1,k))
8110 & +0.5d0*scalar2(vv1(1),Dtobr2(1,i))))
8119 s1= scalar2(AEAb1derx(1,lll,kkk,iii,2,imat),CUgb2(1,i))
8120 s2=-scalar2(AEAb2derx(1,lll,kkk,iii,1,imat),Ug2Db1t(1,k))
8121 s3= scalar2(AEAb2derx(1,lll,kkk,iii,1,imat),CUgb2(1,k))
8122 call transpose2(EUgC(1,1,k),auxmat(1,1))
8123 call matmat2(AEAderx(1,1,lll,kkk,iii,imat),auxmat(1,1),
8125 vv1(1)=pizda1(1,1)-pizda1(2,2)
8126 vv1(2)=pizda1(1,2)+pizda1(2,1)
8127 s4=0.5d0*scalar2(vv1(1),Dtobr2(1,i))
8128 vv(1)=AEAb1derx(1,lll,kkk,iii,2,imat)*b1(1,itk)
8129 & -AEAb1derx(2,lll,kkk,iii,2,imat)*b1(2,itk)
8130 vv(2)=AEAb1derx(1,lll,kkk,iii,2,imat)*b1(2,itk)
8131 & +AEAb1derx(2,lll,kkk,iii,2,imat)*b1(1,itk)
8132 s5=scalar2(vv(1),Dtobr2(1,i))
8133 derx(lll,kkk,ind)=derx(lll,kkk,ind)-0.5d0*(s1+s2+s3+s4+s5)
8139 c----------------------------------------------------------------------------
8140 double precision function eello6_graph2(i,j,k,l,jj,kk,swap)
8141 implicit real*8 (a-h,o-z)
8142 include 'DIMENSIONS'
8143 include 'COMMON.IOUNITS'
8144 include 'COMMON.CHAIN'
8145 include 'COMMON.DERIV'
8146 include 'COMMON.INTERACT'
8147 include 'COMMON.CONTACTS'
8148 include 'COMMON.TORSION'
8149 include 'COMMON.VAR'
8150 include 'COMMON.GEO'
8152 double precision vv(2),pizda(2,2),auxmat(2,2),auxvec(2),
8153 & auxvec1(2),auxvec2(1),auxmat1(2,2)
8156 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
8158 C Parallel Antiparallel C
8164 C \ j|/k\| \ |/k\|l C
8169 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
8170 cd write (2,*) 'eello6_graph2: i,',i,' j',j,' k',k,' l',l
8171 C AL 7/4/01 s1 would occur in the sixth-order moment,
8172 C but not in a cluster cumulant
8174 s1=dip(1,jj,i)*dip(1,kk,k)
8176 call matvec2(ADtEA1(1,1,1),Ub2(1,k),auxvec(1))
8177 s2=-0.5d0*scalar2(Ub2(1,i),auxvec(1))
8178 call matvec2(ADtEA(1,1,2),Ub2(1,l),auxvec1(1))
8179 s3=-0.5d0*scalar2(Ub2(1,j),auxvec1(1))
8180 call transpose2(EUg(1,1,k),auxmat(1,1))
8181 call matmat2(ADtEA1(1,1,1),auxmat(1,1),pizda(1,1))
8182 vv(1)=pizda(1,1)-pizda(2,2)
8183 vv(2)=pizda(1,2)+pizda(2,1)
8184 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
8185 cd write (2,*) 'eello6_graph2:','s1',s1,' s2',s2,' s3',s3,' s4',s4
8187 eello6_graph2=-(s1+s2+s3+s4)
8189 eello6_graph2=-(s2+s3+s4)
8192 C Derivatives in gamma(i-1)
8195 s1=dipderg(1,jj,i)*dip(1,kk,k)
8197 s2=-0.5d0*scalar2(Ub2der(1,i),auxvec(1))
8198 call matvec2(ADtEAderg(1,1,1,2),Ub2(1,l),auxvec2(1))
8199 s3=-0.5d0*scalar2(Ub2(1,j),auxvec2(1))
8200 s4=-0.25d0*scalar2(vv(1),Dtobr2der(1,i))
8202 g_corr6_loc(i-1)=g_corr6_loc(i-1)-ekont*(s1+s2+s3+s4)
8204 g_corr6_loc(i-1)=g_corr6_loc(i-1)-ekont*(s2+s3+s4)
8206 c g_corr6_loc(i-1)=g_corr6_loc(i-1)-s3
8208 C Derivatives in gamma(k-1)
8210 s1=dip(1,jj,i)*dipderg(1,kk,k)
8212 call matvec2(ADtEA1(1,1,1),Ub2der(1,k),auxvec2(1))
8213 s2=-0.5d0*scalar2(Ub2(1,i),auxvec2(1))
8214 call matvec2(ADtEAderg(1,1,2,2),Ub2(1,l),auxvec2(1))
8215 s3=-0.5d0*scalar2(Ub2(1,j),auxvec2(1))
8216 call transpose2(EUgder(1,1,k),auxmat1(1,1))
8217 call matmat2(ADtEA1(1,1,1),auxmat1(1,1),pizda(1,1))
8218 vv(1)=pizda(1,1)-pizda(2,2)
8219 vv(2)=pizda(1,2)+pizda(2,1)
8220 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
8222 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s1+s2+s3+s4)
8224 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s2+s3+s4)
8226 c g_corr6_loc(k-1)=g_corr6_loc(k-1)-s3
8227 C Derivatives in gamma(j-1) or gamma(l-1)
8230 s1=dipderg(3,jj,i)*dip(1,kk,k)
8232 call matvec2(ADtEA1derg(1,1,1,1),Ub2(1,k),auxvec2(1))
8233 s2=-0.5d0*scalar2(Ub2(1,i),auxvec2(1))
8234 s3=-0.5d0*scalar2(Ub2der(1,j),auxvec1(1))
8235 call matmat2(ADtEA1derg(1,1,1,1),auxmat(1,1),pizda(1,1))
8236 vv(1)=pizda(1,1)-pizda(2,2)
8237 vv(2)=pizda(1,2)+pizda(2,1)
8238 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
8241 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*s1
8243 g_corr6_loc(j-1)=g_corr6_loc(j-1)-ekont*s1
8246 g_corr6_loc(j-1)=g_corr6_loc(j-1)-ekont*(s2+s3+s4)
8247 c g_corr6_loc(j-1)=g_corr6_loc(j-1)-s3
8249 C Derivatives in gamma(l-1) or gamma(j-1)
8252 s1=dip(1,jj,i)*dipderg(3,kk,k)
8254 call matvec2(ADtEA1derg(1,1,2,1),Ub2(1,k),auxvec2(1))
8255 s2=-0.5d0*scalar2(Ub2(1,i),auxvec2(1))
8256 call matvec2(ADtEA(1,1,2),Ub2der(1,l),auxvec2(1))
8257 s3=-0.5d0*scalar2(Ub2(1,j),auxvec2(1))
8258 call matmat2(ADtEA1derg(1,1,2,1),auxmat(1,1),pizda(1,1))
8259 vv(1)=pizda(1,1)-pizda(2,2)
8260 vv(2)=pizda(1,2)+pizda(2,1)
8261 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
8264 g_corr6_loc(j-1)=g_corr6_loc(j-1)-ekont*s1
8266 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*s1
8269 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*(s2+s3+s4)
8270 c g_corr6_loc(l-1)=g_corr6_loc(l-1)-s3
8272 C Cartesian derivatives.
8274 write (2,*) 'In eello6_graph2'
8276 write (2,*) 'iii=',iii
8278 write (2,*) 'kkk=',kkk
8280 write (2,'(3(2f10.5),5x)')
8281 & ((ADtEA1derx(jjj,mmm,lll,kkk,iii,1),mmm=1,2),lll=1,3)
8291 s1=dipderx(lll,kkk,1,jj,i)*dip(1,kk,k)
8293 s1=dip(1,jj,i)*dipderx(lll,kkk,1,kk,k)
8296 call matvec2(ADtEA1derx(1,1,lll,kkk,iii,1),Ub2(1,k),
8298 s2=-0.5d0*scalar2(Ub2(1,i),auxvec(1))
8299 call matvec2(ADtEAderx(1,1,lll,kkk,iii,2),Ub2(1,l),
8301 s3=-0.5d0*scalar2(Ub2(1,j),auxvec(1))
8302 call transpose2(EUg(1,1,k),auxmat(1,1))
8303 call matmat2(ADtEA1derx(1,1,lll,kkk,iii,1),auxmat(1,1),
8305 vv(1)=pizda(1,1)-pizda(2,2)
8306 vv(2)=pizda(1,2)+pizda(2,1)
8307 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
8308 cd write (2,*) 's1',s1,' s2',s2,' s3',s3,' s4',s4
8310 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s1+s2+s4)
8312 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s2+s4)
8315 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-s3
8317 derx(lll,kkk,iii)=derx(lll,kkk,iii)-s3
8324 c----------------------------------------------------------------------------
8325 double precision function eello6_graph3(i,j,k,l,jj,kk,swap)
8326 implicit real*8 (a-h,o-z)
8327 include 'DIMENSIONS'
8328 include 'COMMON.IOUNITS'
8329 include 'COMMON.CHAIN'
8330 include 'COMMON.DERIV'
8331 include 'COMMON.INTERACT'
8332 include 'COMMON.CONTACTS'
8333 include 'COMMON.TORSION'
8334 include 'COMMON.VAR'
8335 include 'COMMON.GEO'
8336 double precision vv(2),pizda(2,2),auxmat(2,2),auxvec(2)
8338 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
8340 C Parallel Antiparallel C
8346 C j|/k\| / |/k\|l / C
8351 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
8353 C 4/7/01 AL Component s1 was removed, because it pertains to the respective
8354 C energy moment and not to the cluster cumulant.
8355 iti=itortyp(itype(i))
8356 if (j.lt.nres-1) then
8357 itj1=itortyp(itype(j+1))
8361 itk=itortyp(itype(k))
8362 itk1=itortyp(itype(k+1))
8363 if (l.lt.nres-1) then
8364 itl1=itortyp(itype(l+1))
8369 s1=dip(4,jj,i)*dip(4,kk,k)
8371 call matvec2(AECA(1,1,1),b1(1,itk1),auxvec(1))
8372 s2=0.5d0*scalar2(b1(1,itk),auxvec(1))
8373 call matvec2(AECA(1,1,2),b1(1,itl1),auxvec(1))
8374 s3=0.5d0*scalar2(b1(1,itj1),auxvec(1))
8375 call transpose2(EE(1,1,itk),auxmat(1,1))
8376 call matmat2(auxmat(1,1),AECA(1,1,1),pizda(1,1))
8377 vv(1)=pizda(1,1)+pizda(2,2)
8378 vv(2)=pizda(2,1)-pizda(1,2)
8379 s4=-0.25d0*scalar2(vv(1),Ctobr(1,k))
8380 cd write (2,*) 'eello6_graph3:','s1',s1,' s2',s2,' s3',s3,' s4',s4,
8381 cd & "sum",-(s2+s3+s4)
8383 eello6_graph3=-(s1+s2+s3+s4)
8385 eello6_graph3=-(s2+s3+s4)
8388 C Derivatives in gamma(k-1)
8389 call matvec2(AECAderg(1,1,2),b1(1,itl1),auxvec(1))
8390 s3=0.5d0*scalar2(b1(1,itj1),auxvec(1))
8391 s4=-0.25d0*scalar2(vv(1),Ctobrder(1,k))
8392 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s3+s4)
8393 C Derivatives in gamma(l-1)
8394 call matvec2(AECAderg(1,1,1),b1(1,itk1),auxvec(1))
8395 s2=0.5d0*scalar2(b1(1,itk),auxvec(1))
8396 call matmat2(auxmat(1,1),AECAderg(1,1,1),pizda(1,1))
8397 vv(1)=pizda(1,1)+pizda(2,2)
8398 vv(2)=pizda(2,1)-pizda(1,2)
8399 s4=-0.25d0*scalar2(vv(1),Ctobr(1,k))
8400 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*(s2+s4)
8401 C Cartesian derivatives.
8407 s1=dipderx(lll,kkk,4,jj,i)*dip(4,kk,k)
8409 s1=dip(4,jj,i)*dipderx(lll,kkk,4,kk,k)
8412 call matvec2(AECAderx(1,1,lll,kkk,iii,1),b1(1,itk1),
8414 s2=0.5d0*scalar2(b1(1,itk),auxvec(1))
8415 call matvec2(AECAderx(1,1,lll,kkk,iii,2),b1(1,itl1),
8417 s3=0.5d0*scalar2(b1(1,itj1),auxvec(1))
8418 call matmat2(auxmat(1,1),AECAderx(1,1,lll,kkk,iii,1),
8420 vv(1)=pizda(1,1)+pizda(2,2)
8421 vv(2)=pizda(2,1)-pizda(1,2)
8422 s4=-0.25d0*scalar2(vv(1),Ctobr(1,k))
8424 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s1+s2+s4)
8426 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s2+s4)
8429 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-s3
8431 derx(lll,kkk,iii)=derx(lll,kkk,iii)-s3
8433 c derx(lll,kkk,iii)=derx(lll,kkk,iii)-s4
8439 c----------------------------------------------------------------------------
8440 double precision function eello6_graph4(i,j,k,l,jj,kk,imat,swap)
8441 implicit real*8 (a-h,o-z)
8442 include 'DIMENSIONS'
8443 include 'COMMON.IOUNITS'
8444 include 'COMMON.CHAIN'
8445 include 'COMMON.DERIV'
8446 include 'COMMON.INTERACT'
8447 include 'COMMON.CONTACTS'
8448 include 'COMMON.TORSION'
8449 include 'COMMON.VAR'
8450 include 'COMMON.GEO'
8451 include 'COMMON.FFIELD'
8452 double precision vv(2),pizda(2,2),auxmat(2,2),auxvec(2),
8453 & auxvec1(2),auxmat1(2,2)
8455 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
8457 C Parallel Antiparallel C
8463 C \ j|/k\| \ |/k\|l C
8468 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
8470 C 4/7/01 AL Component s1 was removed, because it pertains to the respective
8471 C energy moment and not to the cluster cumulant.
8472 cd write (2,*) 'eello_graph4: wturn6',wturn6
8473 iti=itortyp(itype(i))
8474 itj=itortyp(itype(j))
8475 if (j.lt.nres-1) then
8476 itj1=itortyp(itype(j+1))
8480 itk=itortyp(itype(k))
8481 if (k.lt.nres-1) then
8482 itk1=itortyp(itype(k+1))
8486 itl=itortyp(itype(l))
8487 if (l.lt.nres-1) then
8488 itl1=itortyp(itype(l+1))
8492 cd write (2,*) 'eello6_graph4:','i',i,' j',j,' k',k,' l',l
8493 cd write (2,*) 'iti',iti,' itj',itj,' itj1',itj1,' itk',itk,
8494 cd & ' itl',itl,' itl1',itl1
8497 s1=dip(3,jj,i)*dip(3,kk,k)
8499 s1=dip(2,jj,j)*dip(2,kk,l)
8502 call matvec2(AECA(1,1,imat),Ub2(1,k),auxvec(1))
8503 s2=0.5d0*scalar2(Ub2(1,i),auxvec(1))
8505 call matvec2(ADtEA1(1,1,3-imat),b1(1,itj1),auxvec1(1))
8506 s3=-0.5d0*scalar2(b1(1,itj),auxvec1(1))
8508 call matvec2(ADtEA1(1,1,3-imat),b1(1,itl1),auxvec1(1))
8509 s3=-0.5d0*scalar2(b1(1,itl),auxvec1(1))
8511 call transpose2(EUg(1,1,k),auxmat(1,1))
8512 call matmat2(AECA(1,1,imat),auxmat(1,1),pizda(1,1))
8513 vv(1)=pizda(1,1)-pizda(2,2)
8514 vv(2)=pizda(2,1)+pizda(1,2)
8515 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
8516 cd write (2,*) 'eello6_graph4:','s1',s1,' s2',s2,' s3',s3,' s4',s4
8518 eello6_graph4=-(s1+s2+s3+s4)
8520 eello6_graph4=-(s2+s3+s4)
8522 C Derivatives in gamma(i-1)
8526 s1=dipderg(2,jj,i)*dip(3,kk,k)
8528 s1=dipderg(4,jj,j)*dip(2,kk,l)
8531 s2=0.5d0*scalar2(Ub2der(1,i),auxvec(1))
8533 call matvec2(ADtEA1derg(1,1,1,3-imat),b1(1,itj1),auxvec1(1))
8534 s3=-0.5d0*scalar2(b1(1,itj),auxvec1(1))
8536 call matvec2(ADtEA1derg(1,1,1,3-imat),b1(1,itl1),auxvec1(1))
8537 s3=-0.5d0*scalar2(b1(1,itl),auxvec1(1))
8539 s4=0.25d0*scalar2(vv(1),Dtobr2der(1,i))
8540 if (wturn6.gt.0.0d0 .and. k.eq.l+4 .and. i.eq.j+2) then
8541 cd write (2,*) 'turn6 derivatives'
8543 gel_loc_turn6(i-1)=gel_loc_turn6(i-1)-ekont*(s1+s2+s3+s4)
8545 gel_loc_turn6(i-1)=gel_loc_turn6(i-1)-ekont*(s2+s3+s4)
8549 g_corr6_loc(i-1)=g_corr6_loc(i-1)-ekont*(s1+s2+s3+s4)
8551 g_corr6_loc(i-1)=g_corr6_loc(i-1)-ekont*(s2+s3+s4)
8555 C Derivatives in gamma(k-1)
8558 s1=dip(3,jj,i)*dipderg(2,kk,k)
8560 s1=dip(2,jj,j)*dipderg(4,kk,l)
8563 call matvec2(AECA(1,1,imat),Ub2der(1,k),auxvec1(1))
8564 s2=0.5d0*scalar2(Ub2(1,i),auxvec1(1))
8566 call matvec2(ADtEA1derg(1,1,2,3-imat),b1(1,itj1),auxvec1(1))
8567 s3=-0.5d0*scalar2(b1(1,itj),auxvec1(1))
8569 call matvec2(ADtEA1derg(1,1,2,3-imat),b1(1,itl1),auxvec1(1))
8570 s3=-0.5d0*scalar2(b1(1,itl),auxvec1(1))
8572 call transpose2(EUgder(1,1,k),auxmat1(1,1))
8573 call matmat2(AECA(1,1,imat),auxmat1(1,1),pizda(1,1))
8574 vv(1)=pizda(1,1)-pizda(2,2)
8575 vv(2)=pizda(2,1)+pizda(1,2)
8576 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
8577 if (wturn6.gt.0.0d0 .and. k.eq.l+4 .and. i.eq.j+2) then
8579 gel_loc_turn6(k-1)=gel_loc_turn6(k-1)-ekont*(s1+s2+s3+s4)
8581 gel_loc_turn6(k-1)=gel_loc_turn6(k-1)-ekont*(s2+s3+s4)
8585 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s1+s2+s3+s4)
8587 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s2+s3+s4)
8590 C Derivatives in gamma(j-1) or gamma(l-1)
8591 if (l.eq.j+1 .and. l.gt.1) then
8592 call matvec2(AECAderg(1,1,imat),Ub2(1,k),auxvec(1))
8593 s2=0.5d0*scalar2(Ub2(1,i),auxvec(1))
8594 call matmat2(AECAderg(1,1,imat),auxmat(1,1),pizda(1,1))
8595 vv(1)=pizda(1,1)-pizda(2,2)
8596 vv(2)=pizda(2,1)+pizda(1,2)
8597 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
8598 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*(s2+s4)
8599 else if (j.gt.1) then
8600 call matvec2(AECAderg(1,1,imat),Ub2(1,k),auxvec(1))
8601 s2=0.5d0*scalar2(Ub2(1,i),auxvec(1))
8602 call matmat2(AECAderg(1,1,imat),auxmat(1,1),pizda(1,1))
8603 vv(1)=pizda(1,1)-pizda(2,2)
8604 vv(2)=pizda(2,1)+pizda(1,2)
8605 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
8606 if (wturn6.gt.0.0d0 .and. k.eq.l+4 .and. i.eq.j+2) then
8607 gel_loc_turn6(j-1)=gel_loc_turn6(j-1)-ekont*(s2+s4)
8609 g_corr6_loc(j-1)=g_corr6_loc(j-1)-ekont*(s2+s4)
8612 C Cartesian derivatives.
8619 s1=dipderx(lll,kkk,3,jj,i)*dip(3,kk,k)
8621 s1=dipderx(lll,kkk,2,jj,j)*dip(2,kk,l)
8625 s1=dip(3,jj,i)*dipderx(lll,kkk,3,kk,k)
8627 s1=dip(2,jj,j)*dipderx(lll,kkk,2,kk,l)
8631 call matvec2(AECAderx(1,1,lll,kkk,iii,imat),Ub2(1,k),
8633 s2=0.5d0*scalar2(Ub2(1,i),auxvec(1))
8635 call matvec2(ADtEA1derx(1,1,lll,kkk,iii,3-imat),
8636 & b1(1,itj1),auxvec(1))
8637 s3=-0.5d0*scalar2(b1(1,itj),auxvec(1))
8639 call matvec2(ADtEA1derx(1,1,lll,kkk,iii,3-imat),
8640 & b1(1,itl1),auxvec(1))
8641 s3=-0.5d0*scalar2(b1(1,itl),auxvec(1))
8643 call matmat2(AECAderx(1,1,lll,kkk,iii,imat),auxmat(1,1),
8645 vv(1)=pizda(1,1)-pizda(2,2)
8646 vv(2)=pizda(2,1)+pizda(1,2)
8647 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
8649 if (wturn6.gt.0.0d0 .and. k.eq.l+4 .and. i.eq.j+2) then
8651 derx_turn(lll,kkk,3-iii)=derx_turn(lll,kkk,3-iii)
8654 derx_turn(lll,kkk,3-iii)=derx_turn(lll,kkk,3-iii)
8657 derx_turn(lll,kkk,iii)=derx_turn(lll,kkk,iii)-s3
8660 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-(s1+s2+s4)
8662 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-(s2+s4)
8664 derx(lll,kkk,iii)=derx(lll,kkk,iii)-s3
8668 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s1+s2+s4)
8670 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s2+s4)
8673 derx(lll,kkk,iii)=derx(lll,kkk,iii)-s3
8675 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-s3
8683 c----------------------------------------------------------------------------
8684 double precision function eello_turn6(i,jj,kk)
8685 implicit real*8 (a-h,o-z)
8686 include 'DIMENSIONS'
8687 include 'COMMON.IOUNITS'
8688 include 'COMMON.CHAIN'
8689 include 'COMMON.DERIV'
8690 include 'COMMON.INTERACT'
8691 include 'COMMON.CONTACTS'
8692 include 'COMMON.TORSION'
8693 include 'COMMON.VAR'
8694 include 'COMMON.GEO'
8695 double precision vtemp1(2),vtemp2(2),vtemp3(2),vtemp4(2),
8696 & atemp(2,2),auxmat(2,2),achuj_temp(2,2),gtemp(2,2),gvec(2),
8698 double precision vtemp1d(2),vtemp2d(2),vtemp3d(2),vtemp4d(2),
8699 & atempd(2,2),auxmatd(2,2),achuj_tempd(2,2),gtempd(2,2),gvecd(2)
8700 C 4/7/01 AL Components s1, s8, and s13 were removed, because they pertain to
8701 C the respective energy moment and not to the cluster cumulant.
8710 iti=itortyp(itype(i))
8711 itk=itortyp(itype(k))
8712 itk1=itortyp(itype(k+1))
8713 itl=itortyp(itype(l))
8714 itj=itortyp(itype(j))
8715 cd write (2,*) 'itk',itk,' itk1',itk1,' itl',itl,' itj',itj
8716 cd write (2,*) 'i',i,' k',k,' j',j,' l',l
8717 cd if (i.ne.1 .or. j.ne.3 .or. k.ne.2 .or. l.ne.4) then
8722 cd & 'EELLO6: Contacts have occurred for peptide groups',i,j,
8724 cd call checkint_turn6(i,jj,kk,eel_turn6_num)
8728 derx_turn(lll,kkk,iii)=0.0d0
8735 eello6_5=eello6_graph4(l,k,j,i,kk,jj,2,.true.)
8737 cd write (2,*) 'eello6_5',eello6_5
8739 call transpose2(AEA(1,1,1),auxmat(1,1))
8740 call matmat2(EUg(1,1,i+1),auxmat(1,1),auxmat(1,1))
8741 ss1=scalar2(Ub2(1,i+2),b1(1,itl))
8742 s1 = (auxmat(1,1)+auxmat(2,2))*ss1
8744 call matvec2(EUg(1,1,i+2),b1(1,itl),vtemp1(1))
8745 call matvec2(AEA(1,1,1),vtemp1(1),vtemp1(1))
8746 s2 = scalar2(b1(1,itk),vtemp1(1))
8748 call transpose2(AEA(1,1,2),atemp(1,1))
8749 call matmat2(atemp(1,1),EUg(1,1,i+4),atemp(1,1))
8750 call matvec2(Ug2(1,1,i+2),dd(1,1,itk1),vtemp2(1))
8751 s8 = -(atemp(1,1)+atemp(2,2))*scalar2(cc(1,1,itl),vtemp2(1))
8753 call matmat2(EUg(1,1,i+3),AEA(1,1,2),auxmat(1,1))
8754 call matvec2(auxmat(1,1),Ub2(1,i+4),vtemp3(1))
8755 s12 = scalar2(Ub2(1,i+2),vtemp3(1))
8757 call transpose2(a_chuj(1,1,kk,i+1),achuj_temp(1,1))
8758 call matmat2(achuj_temp(1,1),EUg(1,1,i+2),gtemp(1,1))
8759 call matmat2(gtemp(1,1),EUg(1,1,i+3),gtemp(1,1))
8760 call matvec2(a_chuj(1,1,jj,i),Ub2(1,i+4),vtemp4(1))
8761 ss13 = scalar2(b1(1,itk),vtemp4(1))
8762 s13 = (gtemp(1,1)+gtemp(2,2))*ss13
8764 c write (2,*) 's1,s2,s8,s12,s13',s1,s2,s8,s12,s13
8770 eel_turn6 = eello6_5 - 0.5d0*(s1+s2+s12+s8+s13)
8771 C Derivatives in gamma(i+2)
8775 call transpose2(AEA(1,1,1),auxmatd(1,1))
8776 call matmat2(EUgder(1,1,i+1),auxmatd(1,1),auxmatd(1,1))
8777 s1d = (auxmatd(1,1)+auxmatd(2,2))*ss1
8778 call transpose2(AEAderg(1,1,2),atempd(1,1))
8779 call matmat2(atempd(1,1),EUg(1,1,i+4),atempd(1,1))
8780 s8d = -(atempd(1,1)+atempd(2,2))*scalar2(cc(1,1,itl),vtemp2(1))
8782 call matmat2(EUg(1,1,i+3),AEAderg(1,1,2),auxmatd(1,1))
8783 call matvec2(auxmatd(1,1),Ub2(1,i+4),vtemp3d(1))
8784 s12d = scalar2(Ub2(1,i+2),vtemp3d(1))
8790 gel_loc_turn6(i)=gel_loc_turn6(i)-0.5d0*ekont*(s1d+s8d+s12d)
8791 C Derivatives in gamma(i+3)
8793 call transpose2(AEA(1,1,1),auxmatd(1,1))
8794 call matmat2(EUg(1,1,i+1),auxmatd(1,1),auxmatd(1,1))
8795 ss1d=scalar2(Ub2der(1,i+2),b1(1,itl))
8796 s1d = (auxmatd(1,1)+auxmatd(2,2))*ss1d
8798 call matvec2(EUgder(1,1,i+2),b1(1,itl),vtemp1d(1))
8799 call matvec2(AEA(1,1,1),vtemp1d(1),vtemp1d(1))
8800 s2d = scalar2(b1(1,itk),vtemp1d(1))
8802 call matvec2(Ug2der(1,1,i+2),dd(1,1,itk1),vtemp2d(1))
8803 s8d = -(atemp(1,1)+atemp(2,2))*scalar2(cc(1,1,itl),vtemp2d(1))
8805 s12d = scalar2(Ub2der(1,i+2),vtemp3(1))
8807 call matmat2(achuj_temp(1,1),EUgder(1,1,i+2),gtempd(1,1))
8808 call matmat2(gtempd(1,1),EUg(1,1,i+3),gtempd(1,1))
8809 s13d = (gtempd(1,1)+gtempd(2,2))*ss13
8817 gel_loc_turn6(i+1)=gel_loc_turn6(i+1)
8818 & -0.5d0*ekont*(s1d+s2d+s8d+s12d+s13d)
8820 gel_loc_turn6(i+1)=gel_loc_turn6(i+1)
8821 & -0.5d0*ekont*(s2d+s12d)
8823 C Derivatives in gamma(i+4)
8824 call matmat2(EUgder(1,1,i+3),AEA(1,1,2),auxmatd(1,1))
8825 call matvec2(auxmatd(1,1),Ub2(1,i+4),vtemp3d(1))
8826 s12d = scalar2(Ub2(1,i+2),vtemp3d(1))
8828 call matmat2(achuj_temp(1,1),EUg(1,1,i+2),gtempd(1,1))
8829 call matmat2(gtempd(1,1),EUgder(1,1,i+3),gtempd(1,1))
8830 s13d = (gtempd(1,1)+gtempd(2,2))*ss13
8838 gel_loc_turn6(i+2)=gel_loc_turn6(i+2)-0.5d0*ekont*(s12d+s13d)
8840 gel_loc_turn6(i+2)=gel_loc_turn6(i+2)-0.5d0*ekont*(s12d)
8842 C Derivatives in gamma(i+5)
8844 call transpose2(AEAderg(1,1,1),auxmatd(1,1))
8845 call matmat2(EUg(1,1,i+1),auxmatd(1,1),auxmatd(1,1))
8846 s1d = (auxmatd(1,1)+auxmatd(2,2))*ss1
8848 call matvec2(EUg(1,1,i+2),b1(1,itl),vtemp1d(1))
8849 call matvec2(AEAderg(1,1,1),vtemp1d(1),vtemp1d(1))
8850 s2d = scalar2(b1(1,itk),vtemp1d(1))
8852 call transpose2(AEA(1,1,2),atempd(1,1))
8853 call matmat2(atempd(1,1),EUgder(1,1,i+4),atempd(1,1))
8854 s8d = -(atempd(1,1)+atempd(2,2))*scalar2(cc(1,1,itl),vtemp2(1))
8856 call matvec2(auxmat(1,1),Ub2der(1,i+4),vtemp3d(1))
8857 s12d = scalar2(Ub2(1,i+2),vtemp3d(1))
8859 call matvec2(a_chuj(1,1,jj,i),Ub2der(1,i+4),vtemp4d(1))
8860 ss13d = scalar2(b1(1,itk),vtemp4d(1))
8861 s13d = (gtemp(1,1)+gtemp(2,2))*ss13d
8869 gel_loc_turn6(i+3)=gel_loc_turn6(i+3)
8870 & -0.5d0*ekont*(s1d+s2d+s8d+s12d+s13d)
8872 gel_loc_turn6(i+3)=gel_loc_turn6(i+3)
8873 & -0.5d0*ekont*(s2d+s12d)
8875 C Cartesian derivatives
8880 call transpose2(AEAderx(1,1,lll,kkk,iii,1),auxmatd(1,1))
8881 call matmat2(EUg(1,1,i+1),auxmatd(1,1),auxmatd(1,1))
8882 s1d = (auxmatd(1,1)+auxmatd(2,2))*ss1
8884 call matvec2(EUg(1,1,i+2),b1(1,itl),vtemp1(1))
8885 call matvec2(AEAderx(1,1,lll,kkk,iii,1),vtemp1(1),
8887 s2d = scalar2(b1(1,itk),vtemp1d(1))
8889 call transpose2(AEAderx(1,1,lll,kkk,iii,2),atempd(1,1))
8890 call matmat2(atempd(1,1),EUg(1,1,i+4),atempd(1,1))
8891 s8d = -(atempd(1,1)+atempd(2,2))*
8892 & scalar2(cc(1,1,itl),vtemp2(1))
8894 call matmat2(EUg(1,1,i+3),AEAderx(1,1,lll,kkk,iii,2),
8896 call matvec2(auxmatd(1,1),Ub2(1,i+4),vtemp3d(1))
8897 s12d = scalar2(Ub2(1,i+2),vtemp3d(1))
8904 derx_turn(lll,kkk,iii) = derx_turn(lll,kkk,iii)
8907 derx_turn(lll,kkk,iii) = derx_turn(lll,kkk,iii)
8911 derx_turn(lll,kkk,3-iii) = derx_turn(lll,kkk,3-iii)
8912 & - 0.5d0*(s8d+s12d)
8914 derx_turn(lll,kkk,3-iii) = derx_turn(lll,kkk,3-iii)
8923 call transpose2(a_chuj_der(1,1,lll,kkk,kk,i+1),
8925 call matmat2(achuj_tempd(1,1),EUg(1,1,i+2),gtempd(1,1))
8926 call matmat2(gtempd(1,1),EUg(1,1,i+3),gtempd(1,1))
8927 s13d=(gtempd(1,1)+gtempd(2,2))*ss13
8928 derx_turn(lll,kkk,2) = derx_turn(lll,kkk,2)-0.5d0*s13d
8929 call matvec2(a_chuj_der(1,1,lll,kkk,jj,i),Ub2(1,i+4),
8931 ss13d = scalar2(b1(1,itk),vtemp4d(1))
8932 s13d = (gtemp(1,1)+gtemp(2,2))*ss13d
8933 derx_turn(lll,kkk,1) = derx_turn(lll,kkk,1)-0.5d0*s13d
8937 cd write(iout,*) 'eel6_turn6',eel_turn6,' eel_turn6_num',
8938 cd & 16*eel_turn6_num
8940 if (j.lt.nres-1) then
8947 if (l.lt.nres-1) then
8955 cgrad ggg1(ll)=eel_turn6*g_contij(ll,1)
8956 cgrad ggg2(ll)=eel_turn6*g_contij(ll,2)
8957 cgrad ghalf=0.5d0*ggg1(ll)
8959 gturn6ij=eel_turn6*g_contij(ll,1)+ekont*derx_turn(ll,1,1)
8960 gturn6kl=eel_turn6*g_contij(ll,2)+ekont*derx_turn(ll,1,2)
8961 gcorr6_turn(ll,i)=gcorr6_turn(ll,i)!+ghalf
8962 & +ekont*derx_turn(ll,2,1)
8963 gcorr6_turn(ll,i+1)=gcorr6_turn(ll,i+1)+ekont*derx_turn(ll,3,1)
8964 gcorr6_turn(ll,j)=gcorr6_turn(ll,j)!+ghalf
8965 & +ekont*derx_turn(ll,4,1)
8966 gcorr6_turn(ll,j1)=gcorr6_turn(ll,j1)+ekont*derx_turn(ll,5,1)
8967 gcorr6_turn_long(ll,j)=gcorr6_turn_long(ll,j)+gturn6ij
8968 gcorr6_turn_long(ll,i)=gcorr6_turn_long(ll,i)-gturn6ij
8969 cgrad ghalf=0.5d0*ggg2(ll)
8971 gcorr6_turn(ll,k)=gcorr6_turn(ll,k)!+ghalf
8972 & +ekont*derx_turn(ll,2,2)
8973 gcorr6_turn(ll,k+1)=gcorr6_turn(ll,k+1)+ekont*derx_turn(ll,3,2)
8974 gcorr6_turn(ll,l)=gcorr6_turn(ll,l)!+ghalf
8975 & +ekont*derx_turn(ll,4,2)
8976 gcorr6_turn(ll,l1)=gcorr6_turn(ll,l1)+ekont*derx_turn(ll,5,2)
8977 gcorr6_turn_long(ll,l)=gcorr6_turn_long(ll,l)+gturn6kl
8978 gcorr6_turn_long(ll,k)=gcorr6_turn_long(ll,k)-gturn6kl
8983 cgrad gcorr6_turn(ll,m)=gcorr6_turn(ll,m)+ggg1(ll)
8988 cgrad gcorr6_turn(ll,m)=gcorr6_turn(ll,m)+ggg2(ll)
8994 cgrad gcorr6_turn(ll,m)=gcorr6_turn(ll,m)+ekont*derx_turn(ll,1,1)
8999 cgrad gcorr6_turn(ll,m)=gcorr6_turn(ll,m)+ekont*derx_turn(ll,1,2)
9003 cd write (2,*) iii,g_corr6_loc(iii)
9005 eello_turn6=ekont*eel_turn6
9006 cd write (2,*) 'ekont',ekont
9007 cd write (2,*) 'eel_turn6',ekont*eel_turn6
9011 C-----------------------------------------------------------------------------
9012 double precision function scalar(u,v)
9013 !DIR$ INLINEALWAYS scalar
9015 cDEC$ ATTRIBUTES FORCEINLINE::scalar
9018 double precision u(3),v(3)
9019 cd double precision sc
9027 scalar=u(1)*v(1)+u(2)*v(2)+u(3)*v(3)
9030 crc-------------------------------------------------
9031 SUBROUTINE MATVEC2(A1,V1,V2)
9032 !DIR$ INLINEALWAYS MATVEC2
9034 cDEC$ ATTRIBUTES FORCEINLINE::MATVEC2
9036 implicit real*8 (a-h,o-z)
9037 include 'DIMENSIONS'
9038 DIMENSION A1(2,2),V1(2),V2(2)
9042 c 3 VI=VI+A1(I,K)*V1(K)
9046 vaux1=a1(1,1)*v1(1)+a1(1,2)*v1(2)
9047 vaux2=a1(2,1)*v1(1)+a1(2,2)*v1(2)
9052 C---------------------------------------
9053 SUBROUTINE MATMAT2(A1,A2,A3)
9055 cDEC$ ATTRIBUTES FORCEINLINE::MATMAT2
9057 implicit real*8 (a-h,o-z)
9058 include 'DIMENSIONS'
9059 DIMENSION A1(2,2),A2(2,2),A3(2,2)
9060 c DIMENSION AI3(2,2)
9064 c A3IJ=A3IJ+A1(I,K)*A2(K,J)
9070 ai3_11=a1(1,1)*a2(1,1)+a1(1,2)*a2(2,1)
9071 ai3_12=a1(1,1)*a2(1,2)+a1(1,2)*a2(2,2)
9072 ai3_21=a1(2,1)*a2(1,1)+a1(2,2)*a2(2,1)
9073 ai3_22=a1(2,1)*a2(1,2)+a1(2,2)*a2(2,2)
9081 c-------------------------------------------------------------------------
9082 double precision function scalar2(u,v)
9083 !DIR$ INLINEALWAYS scalar2
9085 double precision u(2),v(2)
9088 scalar2=u(1)*v(1)+u(2)*v(2)
9092 C-----------------------------------------------------------------------------
9094 subroutine transpose2(a,at)
9095 !DIR$ INLINEALWAYS transpose2
9097 cDEC$ ATTRIBUTES FORCEINLINE::transpose2
9100 double precision a(2,2),at(2,2)
9107 c--------------------------------------------------------------------------
9108 subroutine transpose(n,a,at)
9111 double precision a(n,n),at(n,n)
9119 C---------------------------------------------------------------------------
9120 subroutine prodmat3(a1,a2,kk,transp,prod)
9121 !DIR$ INLINEALWAYS prodmat3
9123 cDEC$ ATTRIBUTES FORCEINLINE::prodmat3
9127 double precision a1(2,2),a2(2,2),a2t(2,2),kk(2,2),prod(2,2)
9129 crc double precision auxmat(2,2),prod_(2,2)
9132 crc call transpose2(kk(1,1),auxmat(1,1))
9133 crc call matmat2(a1(1,1),auxmat(1,1),auxmat(1,1))
9134 crc call matmat2(auxmat(1,1),a2(1,1),prod_(1,1))
9136 prod(1,1)=(a1(1,1)*kk(1,1)+a1(1,2)*kk(1,2))*a2(1,1)
9137 & +(a1(1,1)*kk(2,1)+a1(1,2)*kk(2,2))*a2(2,1)
9138 prod(1,2)=(a1(1,1)*kk(1,1)+a1(1,2)*kk(1,2))*a2(1,2)
9139 & +(a1(1,1)*kk(2,1)+a1(1,2)*kk(2,2))*a2(2,2)
9140 prod(2,1)=(a1(2,1)*kk(1,1)+a1(2,2)*kk(1,2))*a2(1,1)
9141 & +(a1(2,1)*kk(2,1)+a1(2,2)*kk(2,2))*a2(2,1)
9142 prod(2,2)=(a1(2,1)*kk(1,1)+a1(2,2)*kk(1,2))*a2(1,2)
9143 & +(a1(2,1)*kk(2,1)+a1(2,2)*kk(2,2))*a2(2,2)
9146 crc call matmat2(a1(1,1),kk(1,1),auxmat(1,1))
9147 crc call matmat2(auxmat(1,1),a2(1,1),prod_(1,1))
9149 prod(1,1)=(a1(1,1)*kk(1,1)+a1(1,2)*kk(2,1))*a2(1,1)
9150 & +(a1(1,1)*kk(1,2)+a1(1,2)*kk(2,2))*a2(2,1)
9151 prod(1,2)=(a1(1,1)*kk(1,1)+a1(1,2)*kk(2,1))*a2(1,2)
9152 & +(a1(1,1)*kk(1,2)+a1(1,2)*kk(2,2))*a2(2,2)
9153 prod(2,1)=(a1(2,1)*kk(1,1)+a1(2,2)*kk(2,1))*a2(1,1)
9154 & +(a1(2,1)*kk(1,2)+a1(2,2)*kk(2,2))*a2(2,1)
9155 prod(2,2)=(a1(2,1)*kk(1,1)+a1(2,2)*kk(2,1))*a2(1,2)
9156 & +(a1(2,1)*kk(1,2)+a1(2,2)*kk(2,2))*a2(2,2)
9159 c call transpose2(a2(1,1),a2t(1,1))
9162 crc print *,((prod_(i,j),i=1,2),j=1,2)
9163 crc print *,((prod(i,j),i=1,2),j=1,2)