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.
135 cmc Sep-06: egb takes care of dynamic ss bonds too
137 if (dyn_ss) call dyn_set_nss
139 c print *,"Processor",myrank," computed USCSC"
150 time_vec=time_vec+MPI_Wtime()-time01
152 time_vec=time_vec+tcpu()-time01
155 c print *,"Processor",myrank," left VEC_AND_DERIV"
158 if (welec.gt.0d0.or.wvdwpp.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 if (welec.gt.0d0.or.wel_loc.gt.0d0.or.
164 & wturn3.gt.0d0.or.wturn4.gt.0d0 .or. wcorr.gt.0.0d0
165 & .or. wcorr4.gt.0.0d0 .or. wcorr5.gt.0.d0
166 & .or. wcorr6.gt.0.0d0 .or. wturn6.gt.0.0d0 ) then
168 call eelec(ees,evdw1,eel_loc,eello_turn3,eello_turn4)
177 c write (iout,*) "Soft-spheer ELEC potential"
178 call eelec_soft_sphere(ees,evdw1,eel_loc,eello_turn3,
181 c print *,"Processor",myrank," computed UELEC"
183 C Calculate excluded-volume interaction energy between peptide groups
188 call escp(evdw2,evdw2_14)
194 c write (iout,*) "Soft-sphere SCP potential"
195 call escp_soft_sphere(evdw2,evdw2_14)
198 c Calculate the bond-stretching energy
202 C Calculate the disulfide-bridge and other energy and the contributions
203 C from other distance constraints.
204 cd print *,'Calling EHPB'
206 cd print *,'EHPB exitted succesfully.'
208 C Calculate the virtual-bond-angle energy.
210 if (wang.gt.0d0) then
215 c print *,"Processor",myrank," computed UB"
217 C Calculate the SC local energy.
220 c print *,"Processor",myrank," computed USC"
222 C Calculate the virtual-bond torsional energy.
224 cd print *,'nterm=',nterm
226 call etor(etors,edihcnstr)
231 c print *,"Processor",myrank," computed Utor"
233 C 6/23/01 Calculate double-torsional energy
235 if (wtor_d.gt.0) then
240 c print *,"Processor",myrank," computed Utord"
242 C 21/5/07 Calculate local sicdechain correlation energy
244 if (wsccor.gt.0.0d0) then
245 call eback_sc_corr(esccor)
249 c print *,"Processor",myrank," computed Usccorr"
251 C 12/1/95 Multi-body terms
255 if ((wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0
256 & .or. wturn6.gt.0.0d0) .and. ipot.lt.6) then
257 call multibody_eello(ecorr,ecorr5,ecorr6,eturn6,n_corr,n_corr1)
258 cd write(2,*)'multibody_eello n_corr=',n_corr,' n_corr1=',n_corr1,
259 cd &" ecorr",ecorr," ecorr5",ecorr5," ecorr6",ecorr6," eturn6",eturn6
266 if ((wcorr4.eq.0.0d0 .and. wcorr.gt.0.0d0) .and. ipot.lt.6) then
267 call multibody_hb(ecorr,ecorr5,ecorr6,n_corr,n_corr1)
268 cd write (iout,*) "multibody_hb ecorr",ecorr
270 c print *,"Processor",myrank," computed Ucorr"
272 C If performing constraint dynamics, call the constraint energy
273 C after the equilibration time
274 if(usampl.and.totT.gt.eq_time) then
283 time_enecalc=time_enecalc+MPI_Wtime()-time00
285 time_enecalc=time_enecalc+tcpu()-time00
288 c print *,"Processor",myrank," computed Uconstr"
301 energia(2)=evdw2-evdw2_14
318 energia(8)=eello_turn3
319 energia(9)=eello_turn4
326 energia(19)=edihcnstr
328 energia(20)=Uconst+Uconst_back
332 c print *," Processor",myrank," calls SUM_ENERGY"
333 call sum_energy(energia,.true.)
334 c print *," Processor",myrank," left SUM_ENERGY"
337 time_sumene=time_sumene+MPI_Wtime()-time00
339 time_sumene=time_sumene+tcpu()-time00
344 c-------------------------------------------------------------------------------
345 subroutine sum_energy(energia,reduce)
346 implicit real*8 (a-h,o-z)
351 cMS$ATTRIBUTES C :: proc_proc
357 include 'COMMON.SETUP'
358 include 'COMMON.IOUNITS'
359 double precision energia(0:n_ene),enebuff(0:n_ene+1)
360 include 'COMMON.FFIELD'
361 include 'COMMON.DERIV'
362 include 'COMMON.INTERACT'
363 include 'COMMON.SBRIDGE'
364 include 'COMMON.CHAIN'
366 include 'COMMON.CONTROL'
367 include 'COMMON.TIME1'
370 if (nfgtasks.gt.1 .and. reduce) then
372 write (iout,*) "energies before REDUCE"
373 call enerprint(energia)
377 enebuff(i)=energia(i)
380 call MPI_Barrier(FG_COMM,IERR)
381 time_barrier_e=time_barrier_e+MPI_Wtime()-time00
383 call MPI_Reduce(enebuff(0),energia(0),n_ene+1,
384 & MPI_DOUBLE_PRECISION,MPI_SUM,king,FG_COMM,IERR)
386 write (iout,*) "energies after REDUCE"
387 call enerprint(energia)
390 time_Reduce=time_Reduce+MPI_Wtime()-time00
392 if (fg_rank.eq.0) then
395 evdw=energia(22)+wsct*energia(23)
400 evdw2=energia(2)+energia(18)
416 eello_turn3=energia(8)
417 eello_turn4=energia(9)
424 edihcnstr=energia(19)
429 etot=wsc*evdw+wscp*evdw2+welec*ees+wvdwpp*evdw1
430 & +wang*ebe+wtor*etors+wscloc*escloc
431 & +wstrain*ehpb+wcorr*ecorr+wcorr5*ecorr5
432 & +wcorr6*ecorr6+wturn4*eello_turn4+wturn3*eello_turn3
433 & +wturn6*eturn6+wel_loc*eel_loc+edihcnstr+wtor_d*etors_d
434 & +wbond*estr+Uconst+wsccor*esccor
436 etot=wsc*evdw+wscp*evdw2+welec*(ees+evdw1)
437 & +wang*ebe+wtor*etors+wscloc*escloc
438 & +wstrain*ehpb+wcorr*ecorr+wcorr5*ecorr5
439 & +wcorr6*ecorr6+wturn4*eello_turn4+wturn3*eello_turn3
440 & +wturn6*eturn6+wel_loc*eel_loc+edihcnstr+wtor_d*etors_d
441 & +wbond*estr+Uconst+wsccor*esccor
447 if (isnan(etot).ne.0) energia(0)=1.0d+99
449 if (isnan(etot)) energia(0)=1.0d+99
454 idumm=proc_proc(etot,i)
456 call proc_proc(etot,i)
458 if(i.eq.1)energia(0)=1.0d+99
465 c-------------------------------------------------------------------------------
466 subroutine sum_gradient
467 implicit real*8 (a-h,o-z)
472 cMS$ATTRIBUTES C :: proc_proc
478 double precision gradbufc(3,maxres),gradbufx(3,maxres),
479 & glocbuf(4*maxres),gradbufc_sum(3,maxres),gloc_scbuf(3,maxres)
480 include 'COMMON.SETUP'
481 include 'COMMON.IOUNITS'
482 include 'COMMON.FFIELD'
483 include 'COMMON.DERIV'
484 include 'COMMON.INTERACT'
485 include 'COMMON.SBRIDGE'
486 include 'COMMON.CHAIN'
488 include 'COMMON.CONTROL'
489 include 'COMMON.TIME1'
490 include 'COMMON.MAXGRAD'
491 include 'COMMON.SCCOR'
500 write (iout,*) "sum_gradient gvdwc, gvdwx"
502 write (iout,'(i3,3f10.5,5x,3f10.5,5x,3f10.5,5x,3f10.5)')
503 & i,(gvdwx(j,i),j=1,3),(gvdwcT(j,i),j=1,3),(gvdwc(j,i),j=1,3),
504 & (gvdwcT(j,i),j=1,3)
509 C FG slaves call the following matching MPI_Bcast in ERGASTULUM
510 if (nfgtasks.gt.1 .and. fg_rank.eq.0)
511 & call MPI_Bcast(1,1,MPI_INTEGER,king,FG_COMM,IERROR)
514 C 9/29/08 AL Transform parts of gradients in site coordinates to the gradient
515 C in virtual-bond-vector coordinates
518 c write (iout,*) "gel_loc gel_loc_long and gel_loc_loc"
520 c write (iout,'(i5,3f10.5,2x,3f10.5,2x,f10.5)')
521 c & i,(gel_loc(j,i),j=1,3),(gel_loc_long(j,i),j=1,3),gel_loc_loc(i)
523 c write (iout,*) "gel_loc_tur3 gel_loc_turn4"
525 c write (iout,'(i5,3f10.5,2x,f10.5)')
526 c & i,(gcorr4_turn(j,i),j=1,3),gel_loc_turn4(i)
528 write (iout,*) "gradcorr5 gradcorr5_long gradcorr5_loc"
530 write (iout,'(i3,3f10.5,5x,3f10.5,5x,f10.5)')
531 & i,(gradcorr5(j,i),j=1,3),(gradcorr5_long(j,i),j=1,3),
540 gradbufc(j,i)=wsc*gvdwc(j,i)+wsc*wscT*gvdwcT(j,i)+
541 & wscp*(gvdwc_scp(j,i)+gvdwc_scpp(j,i))+
542 & welec*gelc_long(j,i)+wvdwpp*gvdwpp(j,i)+
543 & wel_loc*gel_loc_long(j,i)+
544 & wcorr*gradcorr_long(j,i)+
545 & wcorr5*gradcorr5_long(j,i)+
546 & wcorr6*gradcorr6_long(j,i)+
547 & wturn6*gcorr6_turn_long(j,i)+
554 gradbufc(j,i)=wsc*gvdwc(j,i)+
555 & wscp*(gvdwc_scp(j,i)+gvdwc_scpp(j,i))+
556 & welec*gelc_long(j,i)+wvdwpp*gvdwpp(j,i)+
557 & wel_loc*gel_loc_long(j,i)+
558 & wcorr*gradcorr_long(j,i)+
559 & wcorr5*gradcorr5_long(j,i)+
560 & wcorr6*gradcorr6_long(j,i)+
561 & wturn6*gcorr6_turn_long(j,i)+
569 gradbufc(j,i)=wsc*gvdwc(j,i)+
570 & wscp*(gvdwc_scp(j,i)+gvdwc_scpp(j,i))+
571 & welec*gelc_long(j,i)+
573 & wel_loc*gel_loc_long(j,i)+
574 & wcorr*gradcorr_long(j,i)+
575 & wcorr5*gradcorr5_long(j,i)+
576 & wcorr6*gradcorr6_long(j,i)+
577 & wturn6*gcorr6_turn_long(j,i)+
583 if (nfgtasks.gt.1) then
586 write (iout,*) "gradbufc before allreduce"
588 write (iout,'(i3,3f10.5)') i,(gradbufc(j,i),j=1,3)
594 gradbufc_sum(j,i)=gradbufc(j,i)
597 c call MPI_AllReduce(gradbufc(1,1),gradbufc_sum(1,1),3*nres,
598 c & MPI_DOUBLE_PRECISION,MPI_SUM,FG_COMM,IERR)
599 c time_reduce=time_reduce+MPI_Wtime()-time00
601 c write (iout,*) "gradbufc_sum after allreduce"
603 c write (iout,'(i3,3f10.5)') i,(gradbufc_sum(j,i),j=1,3)
608 c time_allreduce=time_allreduce+MPI_Wtime()-time00
616 write (iout,*) "igrad_start",igrad_start," igrad_end",igrad_end
617 write (iout,*) (i," jgrad_start",jgrad_start(i),
618 & " jgrad_end ",jgrad_end(i),
619 & i=igrad_start,igrad_end)
622 c Obsolete and inefficient code; we can make the effort O(n) and, therefore,
623 c do not parallelize this part.
625 c do i=igrad_start,igrad_end
626 c do j=jgrad_start(i),jgrad_end(i)
628 c gradbufc(k,i)=gradbufc(k,i)+gradbufc_sum(k,j)
633 gradbufc(j,nres-1)=gradbufc_sum(j,nres)
637 gradbufc(j,i)=gradbufc(j,i+1)+gradbufc_sum(j,i+1)
641 write (iout,*) "gradbufc after summing"
643 write (iout,'(i3,3f10.5)') i,(gradbufc(j,i),j=1,3)
650 write (iout,*) "gradbufc"
652 write (iout,'(i3,3f10.5)') i,(gradbufc(j,i),j=1,3)
658 gradbufc_sum(j,i)=gradbufc(j,i)
663 gradbufc(j,nres-1)=gradbufc_sum(j,nres)
667 gradbufc(j,i)=gradbufc(j,i+1)+gradbufc_sum(j,i+1)
672 c gradbufc(k,i)=0.0d0
676 c gradbufc(k,i)=gradbufc(k,i)+gradbufc(k,j)
681 write (iout,*) "gradbufc after summing"
683 write (iout,'(i3,3f10.5)') i,(gradbufc(j,i),j=1,3)
691 gradbufc(k,nres)=0.0d0
696 gradc(j,i,icg)=gradbufc(j,i)+welec*gelc(j,i)+
697 & wel_loc*gel_loc(j,i)+
698 & 0.5d0*(wscp*gvdwc_scpp(j,i)+
699 & welec*gelc_long(j,i)+wvdwpp*gvdwpp(j,i)+
700 & wel_loc*gel_loc_long(j,i)+
701 & wcorr*gradcorr_long(j,i)+
702 & wcorr5*gradcorr5_long(j,i)+
703 & wcorr6*gradcorr6_long(j,i)+
704 & wturn6*gcorr6_turn_long(j,i))+
706 & wcorr*gradcorr(j,i)+
707 & wturn3*gcorr3_turn(j,i)+
708 & wturn4*gcorr4_turn(j,i)+
709 & wcorr5*gradcorr5(j,i)+
710 & wcorr6*gradcorr6(j,i)+
711 & wturn6*gcorr6_turn(j,i)+
712 & wsccor*gsccorc(j,i)
713 & +wscloc*gscloc(j,i)
715 gradc(j,i,icg)=gradbufc(j,i)+welec*gelc(j,i)+
716 & wel_loc*gel_loc(j,i)+
717 & 0.5d0*(wscp*gvdwc_scpp(j,i)+
718 & welec*gelc_long(j,i)+
719 & wel_loc*gel_loc_long(j,i)+
720 & wcorr*gcorr_long(j,i)+
721 & wcorr5*gradcorr5_long(j,i)+
722 & wcorr6*gradcorr6_long(j,i)+
723 & wturn6*gcorr6_turn_long(j,i))+
725 & wcorr*gradcorr(j,i)+
726 & wturn3*gcorr3_turn(j,i)+
727 & wturn4*gcorr4_turn(j,i)+
728 & wcorr5*gradcorr5(j,i)+
729 & wcorr6*gradcorr6(j,i)+
730 & wturn6*gcorr6_turn(j,i)+
731 & wsccor*gsccorc(j,i)
732 & +wscloc*gscloc(j,i)
735 gradx(j,i,icg)=wsc*gvdwx(j,i)+wsc*wscT*gvdwxT(j,i)+
736 & wscp*gradx_scp(j,i)+
738 & wstrain*ghpbx(j,i)+wcorr*gradxorr(j,i)+
739 & wsccor*gsccorx(j,i)
740 & +wscloc*gsclocx(j,i)
742 gradx(j,i,icg)=wsc*gvdwx(j,i)+wscp*gradx_scp(j,i)+
744 & wstrain*ghpbx(j,i)+wcorr*gradxorr(j,i)+
745 & wsccor*gsccorx(j,i)
746 & +wscloc*gsclocx(j,i)
751 write (iout,*) "gloc before adding corr"
753 write (iout,*) i,gloc(i,icg)
757 gloc(i,icg)=gloc(i,icg)+wcorr*gcorr_loc(i)
758 & +wcorr5*g_corr5_loc(i)
759 & +wcorr6*g_corr6_loc(i)
760 & +wturn4*gel_loc_turn4(i)
761 & +wturn3*gel_loc_turn3(i)
762 & +wturn6*gel_loc_turn6(i)
763 & +wel_loc*gel_loc_loc(i)
766 write (iout,*) "gloc after adding corr"
768 write (iout,*) i,gloc(i,icg)
772 if (nfgtasks.gt.1) then
775 gradbufc(j,i)=gradc(j,i,icg)
776 gradbufx(j,i)=gradx(j,i,icg)
780 glocbuf(i)=gloc(i,icg)
783 write (iout,*) "gloc_sc before reduce"
786 write (iout,*) i,j,gloc_sc(j,i,icg)
792 gloc_scbuf(j,i)=gloc_sc(j,i,icg)
796 call MPI_Barrier(FG_COMM,IERR)
797 time_barrier_g=time_barrier_g+MPI_Wtime()-time00
799 call MPI_Reduce(gradbufc(1,1),gradc(1,1,icg),3*nres,
800 & MPI_DOUBLE_PRECISION,MPI_SUM,king,FG_COMM,IERR)
801 call MPI_Reduce(gradbufx(1,1),gradx(1,1,icg),3*nres,
802 & MPI_DOUBLE_PRECISION,MPI_SUM,king,FG_COMM,IERR)
803 call MPI_Reduce(glocbuf(1),gloc(1,icg),4*nres,
804 & MPI_DOUBLE_PRECISION,MPI_SUM,king,FG_COMM,IERR)
805 call MPI_Reduce(gloc_scbuf(1,1),gloc_sc(1,1,icg),3*nres,
806 & MPI_DOUBLE_PRECISION,MPI_SUM,king,FG_COMM,IERR)
807 time_reduce=time_reduce+MPI_Wtime()-time00
809 write (iout,*) "gloc_sc after reduce"
812 write (iout,*) i,j,gloc_sc(j,i,icg)
817 write (iout,*) "gloc after reduce"
819 write (iout,*) i,gloc(i,icg)
824 if (gnorm_check) then
826 c Compute the maximum elements of the gradient
836 gcorr3_turn_max=0.0d0
837 gcorr4_turn_max=0.0d0
840 gcorr6_turn_max=0.0d0
850 gvdwc_norm=dsqrt(scalar(gvdwc(1,i),gvdwc(1,i)))
851 if (gvdwc_norm.gt.gvdwc_max) gvdwc_max=gvdwc_norm
853 gvdwc_norm=dsqrt(scalar(gvdwcT(1,i),gvdwcT(1,i)))
854 if (gvdwc_norm.gt.gvdwc_max) gvdwc_max=gvdwc_norm
856 gvdwc_scp_norm=dsqrt(scalar(gvdwc_scp(1,i),gvdwc_scp(1,i)))
857 if (gvdwc_scp_norm.gt.gvdwc_scp_max)
858 & gvdwc_scp_max=gvdwc_scp_norm
859 gelc_norm=dsqrt(scalar(gelc(1,i),gelc(1,i)))
860 if (gelc_norm.gt.gelc_max) gelc_max=gelc_norm
861 gvdwpp_norm=dsqrt(scalar(gvdwpp(1,i),gvdwpp(1,i)))
862 if (gvdwpp_norm.gt.gvdwpp_max) gvdwpp_max=gvdwpp_norm
863 gradb_norm=dsqrt(scalar(gradb(1,i),gradb(1,i)))
864 if (gradb_norm.gt.gradb_max) gradb_max=gradb_norm
865 ghpbc_norm=dsqrt(scalar(ghpbc(1,i),ghpbc(1,i)))
866 if (ghpbc_norm.gt.ghpbc_max) ghpbc_max=ghpbc_norm
867 gradcorr_norm=dsqrt(scalar(gradcorr(1,i),gradcorr(1,i)))
868 if (gradcorr_norm.gt.gradcorr_max) gradcorr_max=gradcorr_norm
869 gel_loc_norm=dsqrt(scalar(gel_loc(1,i),gel_loc(1,i)))
870 if (gel_loc_norm.gt.gel_loc_max) gel_loc_max=gel_loc_norm
871 gcorr3_turn_norm=dsqrt(scalar(gcorr3_turn(1,i),
873 if (gcorr3_turn_norm.gt.gcorr3_turn_max)
874 & gcorr3_turn_max=gcorr3_turn_norm
875 gcorr4_turn_norm=dsqrt(scalar(gcorr4_turn(1,i),
877 if (gcorr4_turn_norm.gt.gcorr4_turn_max)
878 & gcorr4_turn_max=gcorr4_turn_norm
879 gradcorr5_norm=dsqrt(scalar(gradcorr5(1,i),gradcorr5(1,i)))
880 if (gradcorr5_norm.gt.gradcorr5_max)
881 & gradcorr5_max=gradcorr5_norm
882 gradcorr6_norm=dsqrt(scalar(gradcorr6(1,i),gradcorr6(1,i)))
883 if (gradcorr6_norm.gt.gradcorr6_max) gcorr6_max=gradcorr6_norm
884 gcorr6_turn_norm=dsqrt(scalar(gcorr6_turn(1,i),
886 if (gcorr6_turn_norm.gt.gcorr6_turn_max)
887 & gcorr6_turn_max=gcorr6_turn_norm
888 gsccorr_norm=dsqrt(scalar(gsccorc(1,i),gsccorc(1,i)))
889 if (gsccorr_norm.gt.gsccorr_max) gsccorr_max=gsccorr_norm
890 gscloc_norm=dsqrt(scalar(gscloc(1,i),gscloc(1,i)))
891 if (gscloc_norm.gt.gscloc_max) gscloc_max=gscloc_norm
892 gvdwx_norm=dsqrt(scalar(gvdwx(1,i),gvdwx(1,i)))
893 if (gvdwx_norm.gt.gvdwx_max) gvdwx_max=gvdwx_norm
895 gvdwx_norm=dsqrt(scalar(gvdwxT(1,i),gvdwxT(1,i)))
896 if (gvdwx_norm.gt.gvdwx_max) gvdwx_max=gvdwx_norm
898 gradx_scp_norm=dsqrt(scalar(gradx_scp(1,i),gradx_scp(1,i)))
899 if (gradx_scp_norm.gt.gradx_scp_max)
900 & gradx_scp_max=gradx_scp_norm
901 ghpbx_norm=dsqrt(scalar(ghpbx(1,i),ghpbx(1,i)))
902 if (ghpbx_norm.gt.ghpbx_max) ghpbx_max=ghpbx_norm
903 gradxorr_norm=dsqrt(scalar(gradxorr(1,i),gradxorr(1,i)))
904 if (gradxorr_norm.gt.gradxorr_max) gradxorr_max=gradxorr_norm
905 gsccorrx_norm=dsqrt(scalar(gsccorx(1,i),gsccorx(1,i)))
906 if (gsccorrx_norm.gt.gsccorrx_max) gsccorrx_max=gsccorrx_norm
907 gsclocx_norm=dsqrt(scalar(gsclocx(1,i),gsclocx(1,i)))
908 if (gsclocx_norm.gt.gsclocx_max) gsclocx_max=gsclocx_norm
912 open(istat,file=statname,position="append")
914 open(istat,file=statname,access="append")
916 write (istat,'(1h#,21f10.2)') gvdwc_max,gvdwc_scp_max,
917 & gelc_max,gvdwpp_max,gradb_max,ghpbc_max,
918 & gradcorr_max,gel_loc_max,gcorr3_turn_max,gcorr4_turn_max,
919 & gradcorr5_max,gradcorr6_max,gcorr6_turn_max,gsccorc_max,
920 & gscloc_max,gvdwx_max,gradx_scp_max,ghpbx_max,gradxorr_max,
921 & gsccorx_max,gsclocx_max
923 if (gvdwc_max.gt.1.0d4) then
924 write (iout,*) "gvdwc gvdwx gradb gradbx"
926 write(iout,'(i5,4(3f10.2,5x))') i,(gvdwc(j,i),gvdwx(j,i),
927 & gradb(j,i),gradbx(j,i),j=1,3)
929 call pdbout(0.0d0,'cipiszcze',iout)
935 write (iout,*) "gradc gradx gloc"
937 write (iout,'(i5,3f10.5,5x,3f10.5,5x,f10.5)')
938 & i,(gradc(j,i,icg),j=1,3),(gradx(j,i,icg),j=1,3),gloc(i,icg)
943 time_sumgradient=time_sumgradient+MPI_Wtime()-time01
945 time_sumgradient=time_sumgradient+tcpu()-time01
950 c-------------------------------------------------------------------------------
951 subroutine rescale_weights(t_bath)
952 implicit real*8 (a-h,o-z)
954 include 'COMMON.IOUNITS'
955 include 'COMMON.FFIELD'
956 include 'COMMON.SBRIDGE'
957 double precision kfac /2.4d0/
958 double precision x,x2,x3,x4,x5,licznik /1.12692801104297249644/
960 c facT=2*temp0/(t_bath+temp0)
961 if (rescale_mode.eq.0) then
967 else if (rescale_mode.eq.1) then
968 facT=kfac/(kfac-1.0d0+t_bath/temp0)
969 facT2=kfac**2/(kfac**2-1.0d0+(t_bath/temp0)**2)
970 facT3=kfac**3/(kfac**3-1.0d0+(t_bath/temp0)**3)
971 facT4=kfac**4/(kfac**4-1.0d0+(t_bath/temp0)**4)
972 facT5=kfac**5/(kfac**5-1.0d0+(t_bath/temp0)**5)
973 else if (rescale_mode.eq.2) then
979 facT=licznik/dlog(dexp(x)+dexp(-x))
980 facT2=licznik/dlog(dexp(x2)+dexp(-x2))
981 facT3=licznik/dlog(dexp(x3)+dexp(-x3))
982 facT4=licznik/dlog(dexp(x4)+dexp(-x4))
983 facT5=licznik/dlog(dexp(x5)+dexp(-x5))
985 write (iout,*) "Wrong RESCALE_MODE",rescale_mode
986 write (*,*) "Wrong RESCALE_MODE",rescale_mode
988 call MPI_Finalize(MPI_COMM_WORLD,IERROR)
992 welec=weights(3)*fact
993 wcorr=weights(4)*fact3
994 wcorr5=weights(5)*fact4
995 wcorr6=weights(6)*fact5
996 wel_loc=weights(7)*fact2
997 wturn3=weights(8)*fact2
998 wturn4=weights(9)*fact3
999 wturn6=weights(10)*fact5
1000 wtor=weights(13)*fact
1001 wtor_d=weights(14)*fact2
1002 wsccor=weights(21)*fact
1005 wsct=(320.0+80.0*dtanh((t_bath-320.0)/80.0))/320.0
1009 C------------------------------------------------------------------------
1010 subroutine enerprint(energia)
1011 implicit real*8 (a-h,o-z)
1012 include 'DIMENSIONS'
1013 include 'COMMON.IOUNITS'
1014 include 'COMMON.FFIELD'
1015 include 'COMMON.SBRIDGE'
1017 double precision energia(0:n_ene)
1020 evdw=energia(22)+wsct*energia(23)
1026 evdw2=energia(2)+energia(18)
1038 eello_turn3=energia(8)
1039 eello_turn4=energia(9)
1040 eello_turn6=energia(10)
1046 edihcnstr=energia(19)
1051 write (iout,10) evdw,wsc,evdw2,wscp,ees,welec,evdw1,wvdwpp,
1052 & estr,wbond,ebe,wang,
1053 & escloc,wscloc,etors,wtor,etors_d,wtor_d,ehpb,wstrain,
1055 & ecorr5,wcorr5,ecorr6,wcorr6,eel_loc,wel_loc,eello_turn3,wturn3,
1056 & eello_turn4,wturn4,eello_turn6,wturn6,esccor,wsccor,
1057 & edihcnstr,ebr*nss,
1059 10 format (/'Virtual-chain energies:'//
1060 & 'EVDW= ',1pE16.6,' WEIGHT=',1pE16.6,' (SC-SC)'/
1061 & 'EVDW2= ',1pE16.6,' WEIGHT=',1pE16.6,' (SC-p)'/
1062 & 'EES= ',1pE16.6,' WEIGHT=',1pE16.6,' (p-p)'/
1063 & 'EVDWPP=',1pE16.6,' WEIGHT=',1pE16.6,' (p-p VDW)'/
1064 & 'ESTR= ',1pE16.6,' WEIGHT=',1pE16.6,' (stretching)'/
1065 & 'EBE= ',1pE16.6,' WEIGHT=',1pE16.6,' (bending)'/
1066 & 'ESC= ',1pE16.6,' WEIGHT=',1pE16.6,' (SC local)'/
1067 & 'ETORS= ',1pE16.6,' WEIGHT=',1pE16.6,' (torsional)'/
1068 & 'ETORSD=',1pE16.6,' WEIGHT=',1pE16.6,' (double torsional)'/
1069 & 'EHPB= ',1pE16.6,' WEIGHT=',1pE16.6,
1070 & ' (SS bridges & dist. cnstr.)'/
1071 & 'ECORR4=',1pE16.6,' WEIGHT=',1pE16.6,' (multi-body)'/
1072 & 'ECORR5=',1pE16.6,' WEIGHT=',1pE16.6,' (multi-body)'/
1073 & 'ECORR6=',1pE16.6,' WEIGHT=',1pE16.6,' (multi-body)'/
1074 & 'EELLO= ',1pE16.6,' WEIGHT=',1pE16.6,' (electrostatic-local)'/
1075 & 'ETURN3=',1pE16.6,' WEIGHT=',1pE16.6,' (turns, 3rd order)'/
1076 & 'ETURN4=',1pE16.6,' WEIGHT=',1pE16.6,' (turns, 4th order)'/
1077 & 'ETURN6=',1pE16.6,' WEIGHT=',1pE16.6,' (turns, 6th order)'/
1078 & 'ESCCOR=',1pE16.6,' WEIGHT=',1pE16.6,' (backbone-rotamer corr)'/
1079 & 'EDIHC= ',1pE16.6,' (dihedral angle constraints)'/
1080 & 'ESS= ',1pE16.6,' (disulfide-bridge intrinsic energy)'/
1081 & 'UCONST= ',1pE16.6,' (Constraint energy)'/
1082 & 'ETOT= ',1pE16.6,' (total)')
1084 write (iout,10) evdw,wsc,evdw2,wscp,ees,welec,
1085 & estr,wbond,ebe,wang,
1086 & escloc,wscloc,etors,wtor,etors_d,wtor_d,ehpb,wstrain,
1088 & ecorr5,wcorr5,ecorr6,wcorr6,eel_loc,wel_loc,eello_turn3,wturn3,
1089 & eello_turn4,wturn4,eello_turn6,wturn6,esccor,wsccro,edihcnstr,
1090 & ebr*nss,Uconst,etot
1091 10 format (/'Virtual-chain energies:'//
1092 & 'EVDW= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC-SC)'/
1093 & 'EVDW2= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC-p)'/
1094 & 'EES= ',1pE16.6,' WEIGHT=',1pD16.6,' (p-p)'/
1095 & 'ESTR= ',1pE16.6,' WEIGHT=',1pD16.6,' (stretching)'/
1096 & 'EBE= ',1pE16.6,' WEIGHT=',1pD16.6,' (bending)'/
1097 & 'ESC= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC local)'/
1098 & 'ETORS= ',1pE16.6,' WEIGHT=',1pD16.6,' (torsional)'/
1099 & 'ETORSD=',1pE16.6,' WEIGHT=',1pD16.6,' (double torsional)'/
1100 & 'EHBP= ',1pE16.6,' WEIGHT=',1pD16.6,
1101 & ' (SS bridges & dist. cnstr.)'/
1102 & 'ECORR4=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
1103 & 'ECORR5=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
1104 & 'ECORR6=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
1105 & 'EELLO= ',1pE16.6,' WEIGHT=',1pD16.6,' (electrostatic-local)'/
1106 & 'ETURN3=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 3rd order)'/
1107 & 'ETURN4=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 4th order)'/
1108 & 'ETURN6=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 6th order)'/
1109 & 'ESCCOR=',1pE16.6,' WEIGHT=',1pD16.6,' (backbone-rotamer corr)'/
1110 & 'EDIHC= ',1pE16.6,' (dihedral angle constraints)'/
1111 & 'ESS= ',1pE16.6,' (disulfide-bridge intrinsic energy)'/
1112 & 'UCONST=',1pE16.6,' (Constraint energy)'/
1113 & 'ETOT= ',1pE16.6,' (total)')
1117 C-----------------------------------------------------------------------
1118 subroutine elj(evdw,evdw_p,evdw_m)
1120 C This subroutine calculates the interaction energy of nonbonded side chains
1121 C assuming the LJ potential of interaction.
1123 implicit real*8 (a-h,o-z)
1124 include 'DIMENSIONS'
1125 parameter (accur=1.0d-10)
1126 include 'COMMON.GEO'
1127 include 'COMMON.VAR'
1128 include 'COMMON.LOCAL'
1129 include 'COMMON.CHAIN'
1130 include 'COMMON.DERIV'
1131 include 'COMMON.INTERACT'
1132 include 'COMMON.TORSION'
1133 include 'COMMON.SBRIDGE'
1134 include 'COMMON.NAMES'
1135 include 'COMMON.IOUNITS'
1136 include 'COMMON.CONTACTS'
1138 c write(iout,*)'Entering ELJ nnt=',nnt,' nct=',nct,' expon=',expon
1140 do i=iatsc_s,iatsc_e
1149 C Calculate SC interaction energy.
1151 do iint=1,nint_gr(i)
1152 cd write (iout,*) 'i=',i,' iint=',iint,' istart=',istart(i,iint),
1153 cd & 'iend=',iend(i,iint)
1154 do j=istart(i,iint),iend(i,iint)
1159 C Change 12/1/95 to calculate four-body interactions
1160 rij=xj*xj+yj*yj+zj*zj
1162 c write (iout,*)'i=',i,' j=',j,' itypi=',itypi,' itypj=',itypj
1163 eps0ij=eps(itypi,itypj)
1165 e1=fac*fac*aa(itypi,itypj)
1166 e2=fac*bb(itypi,itypj)
1168 cd sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
1169 cd epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
1170 cd write (iout,'(2(a3,i3,2x),6(1pd12.4)/2(3(1pd12.4),5x)/)')
1171 cd & restyp(itypi),i,restyp(itypj),j,aa(itypi,itypj),
1172 cd & bb(itypi,itypj),1.0D0/dsqrt(rrij),evdwij,epsi,sigm,
1173 cd & (c(k,i),k=1,3),(c(k,j),k=1,3)
1175 if (bb(itypi,itypj).gt.0) then
1176 evdw_p=evdw_p+evdwij
1178 evdw_m=evdw_m+evdwij
1184 C Calculate the components of the gradient in DC and X
1186 fac=-rrij*(e1+evdwij)
1191 if (bb(itypi,itypj).gt.0.0d0) then
1193 gvdwx(k,i)=gvdwx(k,i)-gg(k)
1194 gvdwx(k,j)=gvdwx(k,j)+gg(k)
1195 gvdwc(k,i)=gvdwc(k,i)-gg(k)
1196 gvdwc(k,j)=gvdwc(k,j)+gg(k)
1200 gvdwxT(k,i)=gvdwxT(k,i)-gg(k)
1201 gvdwxT(k,j)=gvdwxT(k,j)+gg(k)
1202 gvdwcT(k,i)=gvdwcT(k,i)-gg(k)
1203 gvdwcT(k,j)=gvdwcT(k,j)+gg(k)
1208 gvdwx(k,i)=gvdwx(k,i)-gg(k)
1209 gvdwx(k,j)=gvdwx(k,j)+gg(k)
1210 gvdwc(k,i)=gvdwc(k,i)-gg(k)
1211 gvdwc(k,j)=gvdwc(k,j)+gg(k)
1216 cgrad gvdwc(l,k)=gvdwc(l,k)+gg(l)
1220 C 12/1/95, revised on 5/20/97
1222 C Calculate the contact function. The ith column of the array JCONT will
1223 C contain the numbers of atoms that make contacts with the atom I (of numbers
1224 C greater than I). The arrays FACONT and GACONT will contain the values of
1225 C the contact function and its derivative.
1227 C Uncomment next line, if the correlation interactions include EVDW explicitly.
1228 c if (j.gt.i+1 .and. evdwij.le.0.0D0) then
1229 C Uncomment next line, if the correlation interactions are contact function only
1230 if (j.gt.i+1.and. eps0ij.gt.0.0D0) then
1232 sigij=sigma(itypi,itypj)
1233 r0ij=rs0(itypi,itypj)
1235 C Check whether the SC's are not too far to make a contact.
1238 call gcont(rij,rcut,1.0d0,0.2d0*rcut,fcont,fprimcont)
1239 C Add a new contact, if the SC's are close enough, but not too close (r<sigma).
1241 if (fcont.gt.0.0D0) then
1242 C If the SC-SC distance if close to sigma, apply spline.
1243 cAdam call gcont(-rij,-1.03d0*sigij,2.0d0*sigij,1.0d0,
1244 cAdam & fcont1,fprimcont1)
1245 cAdam fcont1=1.0d0-fcont1
1246 cAdam if (fcont1.gt.0.0d0) then
1247 cAdam fprimcont=fprimcont*fcont1+fcont*fprimcont1
1248 cAdam fcont=fcont*fcont1
1250 C Uncomment following 4 lines to have the geometric average of the epsilon0's
1251 cga eps0ij=1.0d0/dsqrt(eps0ij)
1253 cga gg(k)=gg(k)*eps0ij
1255 cga eps0ij=-evdwij*eps0ij
1256 C Uncomment for AL's type of SC correlation interactions.
1257 cadam eps0ij=-evdwij
1258 num_conti=num_conti+1
1259 jcont(num_conti,i)=j
1260 facont(num_conti,i)=fcont*eps0ij
1261 fprimcont=eps0ij*fprimcont/rij
1263 cAdam gacont(1,num_conti,i)=-fprimcont*xj+fcont*gg(1)
1264 cAdam gacont(2,num_conti,i)=-fprimcont*yj+fcont*gg(2)
1265 cAdam gacont(3,num_conti,i)=-fprimcont*zj+fcont*gg(3)
1266 C Uncomment following 3 lines for Skolnick's type of SC correlation.
1267 gacont(1,num_conti,i)=-fprimcont*xj
1268 gacont(2,num_conti,i)=-fprimcont*yj
1269 gacont(3,num_conti,i)=-fprimcont*zj
1270 cd write (iout,'(2i5,2f10.5)') i,j,rij,facont(num_conti,i)
1271 cd write (iout,'(2i3,3f10.5)')
1272 cd & i,j,(gacont(kk,num_conti,i),kk=1,3)
1278 num_cont(i)=num_conti
1282 gvdwc(j,i)=expon*gvdwc(j,i)
1283 gvdwx(j,i)=expon*gvdwx(j,i)
1286 C******************************************************************************
1290 C To save time, the factor of EXPON has been extracted from ALL components
1291 C of GVDWC and GRADX. Remember to multiply them by this factor before further
1294 C******************************************************************************
1297 C-----------------------------------------------------------------------------
1298 subroutine eljk(evdw,evdw_p,evdw_m)
1300 C This subroutine calculates the interaction energy of nonbonded side chains
1301 C assuming the LJK potential of interaction.
1303 implicit real*8 (a-h,o-z)
1304 include 'DIMENSIONS'
1305 include 'COMMON.GEO'
1306 include 'COMMON.VAR'
1307 include 'COMMON.LOCAL'
1308 include 'COMMON.CHAIN'
1309 include 'COMMON.DERIV'
1310 include 'COMMON.INTERACT'
1311 include 'COMMON.IOUNITS'
1312 include 'COMMON.NAMES'
1315 c print *,'Entering ELJK nnt=',nnt,' nct=',nct,' expon=',expon
1317 do i=iatsc_s,iatsc_e
1324 C Calculate SC interaction energy.
1326 do iint=1,nint_gr(i)
1327 do j=istart(i,iint),iend(i,iint)
1332 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
1333 fac_augm=rrij**expon
1334 e_augm=augm(itypi,itypj)*fac_augm
1335 r_inv_ij=dsqrt(rrij)
1337 r_shift_inv=1.0D0/(rij+r0(itypi,itypj)-sigma(itypi,itypj))
1338 fac=r_shift_inv**expon
1339 e1=fac*fac*aa(itypi,itypj)
1340 e2=fac*bb(itypi,itypj)
1342 cd sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
1343 cd epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
1344 cd write (iout,'(2(a3,i3,2x),8(1pd12.4)/2(3(1pd12.4),5x)/)')
1345 cd & restyp(itypi),i,restyp(itypj),j,aa(itypi,itypj),
1346 cd & bb(itypi,itypj),augm(itypi,itypj),epsi,sigm,
1347 cd & sigma(itypi,itypj),1.0D0/dsqrt(rrij),evdwij,
1348 cd & (c(k,i),k=1,3),(c(k,j),k=1,3)
1350 if (bb(itypi,itypj).gt.0) then
1351 evdw_p=evdw_p+evdwij
1353 evdw_m=evdw_m+evdwij
1359 C Calculate the components of the gradient in DC and X
1361 fac=-2.0D0*rrij*e_augm-r_inv_ij*r_shift_inv*(e1+e1+e2)
1366 if (bb(itypi,itypj).gt.0.0d0) then
1368 gvdwx(k,i)=gvdwx(k,i)-gg(k)
1369 gvdwx(k,j)=gvdwx(k,j)+gg(k)
1370 gvdwc(k,i)=gvdwc(k,i)-gg(k)
1371 gvdwc(k,j)=gvdwc(k,j)+gg(k)
1375 gvdwxT(k,i)=gvdwxT(k,i)-gg(k)
1376 gvdwxT(k,j)=gvdwxT(k,j)+gg(k)
1377 gvdwcT(k,i)=gvdwcT(k,i)-gg(k)
1378 gvdwcT(k,j)=gvdwcT(k,j)+gg(k)
1383 gvdwx(k,i)=gvdwx(k,i)-gg(k)
1384 gvdwx(k,j)=gvdwx(k,j)+gg(k)
1385 gvdwc(k,i)=gvdwc(k,i)-gg(k)
1386 gvdwc(k,j)=gvdwc(k,j)+gg(k)
1391 cgrad gvdwc(l,k)=gvdwc(l,k)+gg(l)
1399 gvdwc(j,i)=expon*gvdwc(j,i)
1400 gvdwx(j,i)=expon*gvdwx(j,i)
1405 C-----------------------------------------------------------------------------
1406 subroutine ebp(evdw,evdw_p,evdw_m)
1408 C This subroutine calculates the interaction energy of nonbonded side chains
1409 C assuming the Berne-Pechukas potential of interaction.
1411 implicit real*8 (a-h,o-z)
1412 include 'DIMENSIONS'
1413 include 'COMMON.GEO'
1414 include 'COMMON.VAR'
1415 include 'COMMON.LOCAL'
1416 include 'COMMON.CHAIN'
1417 include 'COMMON.DERIV'
1418 include 'COMMON.NAMES'
1419 include 'COMMON.INTERACT'
1420 include 'COMMON.IOUNITS'
1421 include 'COMMON.CALC'
1422 common /srutu/ icall
1423 c double precision rrsave(maxdim)
1426 c print *,'Entering EBP nnt=',nnt,' nct=',nct,' expon=',expon
1428 c if (icall.eq.0) then
1434 do i=iatsc_s,iatsc_e
1440 dxi=dc_norm(1,nres+i)
1441 dyi=dc_norm(2,nres+i)
1442 dzi=dc_norm(3,nres+i)
1443 c dsci_inv=dsc_inv(itypi)
1444 dsci_inv=vbld_inv(i+nres)
1446 C Calculate SC interaction energy.
1448 do iint=1,nint_gr(i)
1449 do j=istart(i,iint),iend(i,iint)
1452 c dscj_inv=dsc_inv(itypj)
1453 dscj_inv=vbld_inv(j+nres)
1454 chi1=chi(itypi,itypj)
1455 chi2=chi(itypj,itypi)
1462 alf12=0.5D0*(alf1+alf2)
1463 C For diagnostics only!!!
1476 dxj=dc_norm(1,nres+j)
1477 dyj=dc_norm(2,nres+j)
1478 dzj=dc_norm(3,nres+j)
1479 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
1480 cd if (icall.eq.0) then
1486 C Calculate the angle-dependent terms of energy & contributions to derivatives.
1488 C Calculate whole angle-dependent part of epsilon and contributions
1489 C to its derivatives
1490 fac=(rrij*sigsq)**expon2
1491 e1=fac*fac*aa(itypi,itypj)
1492 e2=fac*bb(itypi,itypj)
1493 evdwij=eps1*eps2rt*eps3rt*(e1+e2)
1494 eps2der=evdwij*eps3rt
1495 eps3der=evdwij*eps2rt
1496 evdwij=evdwij*eps2rt*eps3rt
1498 if (bb(itypi,itypj).gt.0) then
1499 evdw_p=evdw_p+evdwij
1501 evdw_m=evdw_m+evdwij
1507 sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
1508 epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
1509 cd write (iout,'(2(a3,i3,2x),15(0pf7.3))')
1510 cd & restyp(itypi),i,restyp(itypj),j,
1511 cd & epsi,sigm,chi1,chi2,chip1,chip2,
1512 cd & eps1,eps2rt**2,eps3rt**2,1.0D0/dsqrt(sigsq),
1513 cd & om1,om2,om12,1.0D0/dsqrt(rrij),
1516 C Calculate gradient components.
1517 e1=e1*eps1*eps2rt**2*eps3rt**2
1518 fac=-expon*(e1+evdwij)
1521 C Calculate radial part of the gradient
1525 C Calculate the angular part of the gradient and sum add the contributions
1526 C to the appropriate components of the Cartesian gradient.
1528 if (bb(itypi,itypj).gt.0) then
1542 C-----------------------------------------------------------------------------
1543 subroutine egb(evdw,evdw_p,evdw_m)
1545 C This subroutine calculates the interaction energy of nonbonded side chains
1546 C assuming the Gay-Berne potential of interaction.
1548 implicit real*8 (a-h,o-z)
1549 include 'DIMENSIONS'
1550 include 'COMMON.GEO'
1551 include 'COMMON.VAR'
1552 include 'COMMON.LOCAL'
1553 include 'COMMON.CHAIN'
1554 include 'COMMON.DERIV'
1555 include 'COMMON.NAMES'
1556 include 'COMMON.INTERACT'
1557 include 'COMMON.IOUNITS'
1558 include 'COMMON.CALC'
1559 include 'COMMON.CONTROL'
1560 include 'COMMON.SBRIDGE'
1563 ccccc energy_dec=.false.
1564 c print *,'Entering EGB nnt=',nnt,' nct=',nct,' expon=',expon
1569 c if (icall.eq.0) lprn=.false.
1571 do i=iatsc_s,iatsc_e
1577 dxi=dc_norm(1,nres+i)
1578 dyi=dc_norm(2,nres+i)
1579 dzi=dc_norm(3,nres+i)
1580 c dsci_inv=dsc_inv(itypi)
1581 dsci_inv=vbld_inv(i+nres)
1582 c write (iout,*) "i",i,dsc_inv(itypi),dsci_inv,1.0d0/vbld(i+nres)
1583 c write (iout,*) "dcnori",dxi*dxi+dyi*dyi+dzi*dzi
1585 C Calculate SC interaction energy.
1587 do iint=1,nint_gr(i)
1588 do j=istart(i,iint),iend(i,iint)
1589 IF (dyn_ss_mask(i).and.dyn_ss_mask(j)) THEN
1590 call dyn_ssbond_ene(i,j,evdwij)
1592 if (energy_dec) write (iout,'(a6,2i5,0pf7.3,a3)')
1593 & 'evdw',i,j,evdwij,' ss'
1597 c dscj_inv=dsc_inv(itypj)
1598 dscj_inv=vbld_inv(j+nres)
1599 c write (iout,*) "j",j,dsc_inv(itypj),dscj_inv,
1600 c & 1.0d0/vbld(j+nres)
1601 c write (iout,*) "i",i," j", j," itype",itype(i),itype(j)
1602 sig0ij=sigma(itypi,itypj)
1603 chi1=chi(itypi,itypj)
1604 chi2=chi(itypj,itypi)
1611 alf12=0.5D0*(alf1+alf2)
1612 C For diagnostics only!!!
1625 dxj=dc_norm(1,nres+j)
1626 dyj=dc_norm(2,nres+j)
1627 dzj=dc_norm(3,nres+j)
1628 c write (iout,*) "dcnorj",dxi*dxi+dyi*dyi+dzi*dzi
1629 c write (iout,*) "j",j," dc_norm",
1630 c & dc_norm(1,nres+j),dc_norm(2,nres+j),dc_norm(3,nres+j)
1631 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
1633 C Calculate angle-dependent terms of energy and contributions to their
1637 sig=sig0ij*dsqrt(sigsq)
1638 rij_shift=1.0D0/rij-sig+sig0ij
1639 c for diagnostics; uncomment
1640 c rij_shift=1.2*sig0ij
1641 C I hate to put IF's in the loops, but here don't have another choice!!!!
1642 if (rij_shift.le.0.0D0) then
1644 cd write (iout,'(2(a3,i3,2x),17(0pf7.3))')
1645 cd & restyp(itypi),i,restyp(itypj),j,
1646 cd & rij_shift,1.0D0/rij,sig,sig0ij,sigsq,1-dsqrt(sigsq)
1650 c---------------------------------------------------------------
1651 rij_shift=1.0D0/rij_shift
1652 fac=rij_shift**expon
1653 e1=fac*fac*aa(itypi,itypj)
1654 e2=fac*bb(itypi,itypj)
1655 evdwij=eps1*eps2rt*eps3rt*(e1+e2)
1656 eps2der=evdwij*eps3rt
1657 eps3der=evdwij*eps2rt
1658 c write (iout,*) "sigsq",sigsq," sig",sig," eps2rt",eps2rt,
1659 c & " eps3rt",eps3rt," eps1",eps1," e1",e1," e2",e2
1660 evdwij=evdwij*eps2rt*eps3rt
1662 if (bb(itypi,itypj).gt.0) then
1663 evdw_p=evdw_p+evdwij
1665 evdw_m=evdw_m+evdwij
1671 sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
1672 epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
1673 write (iout,'(2(a3,i3,2x),17(0pf7.3))')
1674 & restyp(itypi),i,restyp(itypj),j,
1675 & epsi,sigm,chi1,chi2,chip1,chip2,
1676 & eps1,eps2rt**2,eps3rt**2,sig,sig0ij,
1677 & om1,om2,om12,1.0D0/rij,1.0D0/rij_shift,
1681 if (energy_dec) write (iout,'(a6,2i5,0pf7.3)')
1684 C Calculate gradient components.
1685 e1=e1*eps1*eps2rt**2*eps3rt**2
1686 fac=-expon*(e1+evdwij)*rij_shift
1690 C Calculate the radial part of the gradient
1694 C Calculate angular part of the gradient.
1696 if (bb(itypi,itypj).gt.0) then
1708 c write (iout,*) "Number of loop steps in EGB:",ind
1709 cccc energy_dec=.false.
1712 C-----------------------------------------------------------------------------
1713 subroutine egbv(evdw,evdw_p,evdw_m)
1715 C This subroutine calculates the interaction energy of nonbonded side chains
1716 C assuming the Gay-Berne-Vorobjev potential of interaction.
1718 implicit real*8 (a-h,o-z)
1719 include 'DIMENSIONS'
1720 include 'COMMON.GEO'
1721 include 'COMMON.VAR'
1722 include 'COMMON.LOCAL'
1723 include 'COMMON.CHAIN'
1724 include 'COMMON.DERIV'
1725 include 'COMMON.NAMES'
1726 include 'COMMON.INTERACT'
1727 include 'COMMON.IOUNITS'
1728 include 'COMMON.CALC'
1729 common /srutu/ icall
1732 c print *,'Entering EGB nnt=',nnt,' nct=',nct,' expon=',expon
1735 c if (icall.eq.0) lprn=.true.
1737 do i=iatsc_s,iatsc_e
1743 dxi=dc_norm(1,nres+i)
1744 dyi=dc_norm(2,nres+i)
1745 dzi=dc_norm(3,nres+i)
1746 c dsci_inv=dsc_inv(itypi)
1747 dsci_inv=vbld_inv(i+nres)
1749 C Calculate SC interaction energy.
1751 do iint=1,nint_gr(i)
1752 do j=istart(i,iint),iend(i,iint)
1755 c dscj_inv=dsc_inv(itypj)
1756 dscj_inv=vbld_inv(j+nres)
1757 sig0ij=sigma(itypi,itypj)
1758 r0ij=r0(itypi,itypj)
1759 chi1=chi(itypi,itypj)
1760 chi2=chi(itypj,itypi)
1767 alf12=0.5D0*(alf1+alf2)
1768 C For diagnostics only!!!
1781 dxj=dc_norm(1,nres+j)
1782 dyj=dc_norm(2,nres+j)
1783 dzj=dc_norm(3,nres+j)
1784 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
1786 C Calculate angle-dependent terms of energy and contributions to their
1790 sig=sig0ij*dsqrt(sigsq)
1791 rij_shift=1.0D0/rij-sig+r0ij
1792 C I hate to put IF's in the loops, but here don't have another choice!!!!
1793 if (rij_shift.le.0.0D0) then
1798 c---------------------------------------------------------------
1799 rij_shift=1.0D0/rij_shift
1800 fac=rij_shift**expon
1801 e1=fac*fac*aa(itypi,itypj)
1802 e2=fac*bb(itypi,itypj)
1803 evdwij=eps1*eps2rt*eps3rt*(e1+e2)
1804 eps2der=evdwij*eps3rt
1805 eps3der=evdwij*eps2rt
1806 fac_augm=rrij**expon
1807 e_augm=augm(itypi,itypj)*fac_augm
1808 evdwij=evdwij*eps2rt*eps3rt
1810 if (bb(itypi,itypj).gt.0) then
1811 evdw_p=evdw_p+evdwij+e_augm
1813 evdw_m=evdw_m+evdwij+e_augm
1816 evdw=evdw+evdwij+e_augm
1819 sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
1820 epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
1821 write (iout,'(2(a3,i3,2x),17(0pf7.3))')
1822 & restyp(itypi),i,restyp(itypj),j,
1823 & epsi,sigm,sig,(augm(itypi,itypj)/epsi)**(1.0D0/12.0D0),
1824 & chi1,chi2,chip1,chip2,
1825 & eps1,eps2rt**2,eps3rt**2,
1826 & om1,om2,om12,1.0D0/rij,1.0D0/rij_shift,
1829 C Calculate gradient components.
1830 e1=e1*eps1*eps2rt**2*eps3rt**2
1831 fac=-expon*(e1+evdwij)*rij_shift
1833 fac=rij*fac-2*expon*rrij*e_augm
1834 C Calculate the radial part of the gradient
1838 C Calculate angular part of the gradient.
1840 if (bb(itypi,itypj).gt.0) then
1852 C-----------------------------------------------------------------------------
1853 subroutine sc_angular
1854 C Calculate eps1,eps2,eps3,sigma, and parts of their derivatives in om1,om2,
1855 C om12. Called by ebp, egb, and egbv.
1857 include 'COMMON.CALC'
1858 include 'COMMON.IOUNITS'
1862 om1=dxi*erij(1)+dyi*erij(2)+dzi*erij(3)
1863 om2=dxj*erij(1)+dyj*erij(2)+dzj*erij(3)
1864 om12=dxi*dxj+dyi*dyj+dzi*dzj
1866 C Calculate eps1(om12) and its derivative in om12
1867 faceps1=1.0D0-om12*chiom12
1868 faceps1_inv=1.0D0/faceps1
1869 eps1=dsqrt(faceps1_inv)
1870 C Following variable is eps1*deps1/dom12
1871 eps1_om12=faceps1_inv*chiom12
1876 c write (iout,*) "om12",om12," eps1",eps1
1877 C Calculate sigma(om1,om2,om12) and the derivatives of sigma**2 in om1,om2,
1882 facsig=om1*chiom1+om2*chiom2-2.0D0*om1om2*chiom12
1883 sigsq=1.0D0-facsig*faceps1_inv
1884 sigsq_om1=(chiom1-chiom12*om2)*faceps1_inv
1885 sigsq_om2=(chiom2-chiom12*om1)*faceps1_inv
1886 sigsq_om12=-chi12*(om1om2*faceps1-om12*facsig)*faceps1_inv**2
1892 c write (iout,*) "chiom1",chiom1," chiom2",chiom2," chiom12",chiom12
1893 c write (iout,*) "faceps1",faceps1," faceps1_inv",faceps1_inv,
1895 C Calculate eps2 and its derivatives in om1, om2, and om12.
1898 chipom12=chip12*om12
1899 facp=1.0D0-om12*chipom12
1901 facp1=om1*chipom1+om2*chipom2-2.0D0*om1om2*chipom12
1902 c write (iout,*) "chipom1",chipom1," chipom2",chipom2,
1903 c & " chipom12",chipom12," facp",facp," facp_inv",facp_inv
1904 C Following variable is the square root of eps2
1905 eps2rt=1.0D0-facp1*facp_inv
1906 C Following three variables are the derivatives of the square root of eps
1907 C in om1, om2, and om12.
1908 eps2rt_om1=-4.0D0*(chipom1-chipom12*om2)*facp_inv
1909 eps2rt_om2=-4.0D0*(chipom2-chipom12*om1)*facp_inv
1910 eps2rt_om12=4.0D0*chip12*(om1om2*facp-om12*facp1)*facp_inv**2
1911 C Evaluate the "asymmetric" factor in the VDW constant, eps3
1912 eps3rt=1.0D0-alf1*om1+alf2*om2-alf12*om12
1913 c write (iout,*) "eps2rt",eps2rt," eps3rt",eps3rt
1914 c write (iout,*) "eps2rt_om1",eps2rt_om1," eps2rt_om2",eps2rt_om2,
1915 c & " eps2rt_om12",eps2rt_om12
1916 C Calculate whole angle-dependent part of epsilon and contributions
1917 C to its derivatives
1921 C----------------------------------------------------------------------------
1922 subroutine sc_grad_T
1923 implicit real*8 (a-h,o-z)
1924 include 'DIMENSIONS'
1925 include 'COMMON.CHAIN'
1926 include 'COMMON.DERIV'
1927 include 'COMMON.CALC'
1928 include 'COMMON.IOUNITS'
1929 double precision dcosom1(3),dcosom2(3)
1930 eom1=eps2der*eps2rt_om1-2.0D0*alf1*eps3der+sigder*sigsq_om1
1931 eom2=eps2der*eps2rt_om2+2.0D0*alf2*eps3der+sigder*sigsq_om2
1932 eom12=evdwij*eps1_om12+eps2der*eps2rt_om12
1933 & -2.0D0*alf12*eps3der+sigder*sigsq_om12
1937 c eom12=evdwij*eps1_om12
1939 c write (iout,*) "eps2der",eps2der," eps3der",eps3der,
1940 c & " sigder",sigder
1941 c write (iout,*) "eps1_om12",eps1_om12," eps2rt_om12",eps2rt_om12
1942 c write (iout,*) "eom1",eom1," eom2",eom2," eom12",eom12
1944 dcosom1(k)=rij*(dc_norm(k,nres+i)-om1*erij(k))
1945 dcosom2(k)=rij*(dc_norm(k,nres+j)-om2*erij(k))
1948 gg(k)=gg(k)+eom1*dcosom1(k)+eom2*dcosom2(k)
1950 c write (iout,*) "gg",(gg(k),k=1,3)
1952 gvdwxT(k,i)=gvdwxT(k,i)-gg(k)
1953 & +(eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,nres+i))
1954 & +eom1*(erij(k)-om1*dc_norm(k,nres+i)))*dsci_inv
1955 gvdwxT(k,j)=gvdwxT(k,j)+gg(k)
1956 & +(eom12*(dc_norm(k,nres+i)-om12*dc_norm(k,nres+j))
1957 & +eom2*(erij(k)-om2*dc_norm(k,nres+j)))*dscj_inv
1958 c write (iout,*)(eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,nres+i))
1959 c & +eom1*(erij(k)-om1*dc_norm(k,nres+i)))*dsci_inv
1960 c write (iout,*)(eom12*(dc_norm(k,nres+i)-om12*dc_norm(k,nres+j))
1961 c & +eom2*(erij(k)-om2*dc_norm(k,nres+j)))*dscj_inv
1964 C Calculate the components of the gradient in DC and X
1968 cgrad gvdwc(l,k)=gvdwc(l,k)+gg(l)
1972 gvdwcT(l,i)=gvdwcT(l,i)-gg(l)
1973 gvdwcT(l,j)=gvdwcT(l,j)+gg(l)
1978 C----------------------------------------------------------------------------
1980 implicit real*8 (a-h,o-z)
1981 include 'DIMENSIONS'
1982 include 'COMMON.CHAIN'
1983 include 'COMMON.DERIV'
1984 include 'COMMON.CALC'
1985 include 'COMMON.IOUNITS'
1986 double precision dcosom1(3),dcosom2(3)
1987 eom1=eps2der*eps2rt_om1-2.0D0*alf1*eps3der+sigder*sigsq_om1
1988 eom2=eps2der*eps2rt_om2+2.0D0*alf2*eps3der+sigder*sigsq_om2
1989 eom12=evdwij*eps1_om12+eps2der*eps2rt_om12
1990 & -2.0D0*alf12*eps3der+sigder*sigsq_om12
1994 c eom12=evdwij*eps1_om12
1996 c write (iout,*) "eps2der",eps2der," eps3der",eps3der,
1997 c & " sigder",sigder
1998 c write (iout,*) "eps1_om12",eps1_om12," eps2rt_om12",eps2rt_om12
1999 c write (iout,*) "eom1",eom1," eom2",eom2," eom12",eom12
2001 dcosom1(k)=rij*(dc_norm(k,nres+i)-om1*erij(k))
2002 dcosom2(k)=rij*(dc_norm(k,nres+j)-om2*erij(k))
2005 gg(k)=gg(k)+eom1*dcosom1(k)+eom2*dcosom2(k)
2007 c write (iout,*) "gg",(gg(k),k=1,3)
2009 gvdwx(k,i)=gvdwx(k,i)-gg(k)
2010 & +(eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,nres+i))
2011 & +eom1*(erij(k)-om1*dc_norm(k,nres+i)))*dsci_inv
2012 gvdwx(k,j)=gvdwx(k,j)+gg(k)
2013 & +(eom12*(dc_norm(k,nres+i)-om12*dc_norm(k,nres+j))
2014 & +eom2*(erij(k)-om2*dc_norm(k,nres+j)))*dscj_inv
2015 c write (iout,*)(eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,nres+i))
2016 c & +eom1*(erij(k)-om1*dc_norm(k,nres+i)))*dsci_inv
2017 c write (iout,*)(eom12*(dc_norm(k,nres+i)-om12*dc_norm(k,nres+j))
2018 c & +eom2*(erij(k)-om2*dc_norm(k,nres+j)))*dscj_inv
2021 C Calculate the components of the gradient in DC and X
2025 cgrad gvdwc(l,k)=gvdwc(l,k)+gg(l)
2029 gvdwc(l,i)=gvdwc(l,i)-gg(l)
2030 gvdwc(l,j)=gvdwc(l,j)+gg(l)
2034 C-----------------------------------------------------------------------
2035 subroutine e_softsphere(evdw)
2037 C This subroutine calculates the interaction energy of nonbonded side chains
2038 C assuming the LJ potential of interaction.
2040 implicit real*8 (a-h,o-z)
2041 include 'DIMENSIONS'
2042 parameter (accur=1.0d-10)
2043 include 'COMMON.GEO'
2044 include 'COMMON.VAR'
2045 include 'COMMON.LOCAL'
2046 include 'COMMON.CHAIN'
2047 include 'COMMON.DERIV'
2048 include 'COMMON.INTERACT'
2049 include 'COMMON.TORSION'
2050 include 'COMMON.SBRIDGE'
2051 include 'COMMON.NAMES'
2052 include 'COMMON.IOUNITS'
2053 include 'COMMON.CONTACTS'
2055 cd print *,'Entering Esoft_sphere nnt=',nnt,' nct=',nct
2057 do i=iatsc_s,iatsc_e
2064 C Calculate SC interaction energy.
2066 do iint=1,nint_gr(i)
2067 cd write (iout,*) 'i=',i,' iint=',iint,' istart=',istart(i,iint),
2068 cd & 'iend=',iend(i,iint)
2069 do j=istart(i,iint),iend(i,iint)
2074 rij=xj*xj+yj*yj+zj*zj
2075 c write (iout,*)'i=',i,' j=',j,' itypi=',itypi,' itypj=',itypj
2076 r0ij=r0(itypi,itypj)
2078 c print *,i,j,r0ij,dsqrt(rij)
2079 if (rij.lt.r0ijsq) then
2080 evdwij=0.25d0*(rij-r0ijsq)**2
2088 C Calculate the components of the gradient in DC and X
2094 gvdwx(k,i)=gvdwx(k,i)-gg(k)
2095 gvdwx(k,j)=gvdwx(k,j)+gg(k)
2096 gvdwc(k,i)=gvdwc(k,i)-gg(k)
2097 gvdwc(k,j)=gvdwc(k,j)+gg(k)
2101 cgrad gvdwc(l,k)=gvdwc(l,k)+gg(l)
2109 C--------------------------------------------------------------------------
2110 subroutine eelec_soft_sphere(ees,evdw1,eel_loc,eello_turn3,
2113 C Soft-sphere potential of p-p interaction
2115 implicit real*8 (a-h,o-z)
2116 include 'DIMENSIONS'
2117 include 'COMMON.CONTROL'
2118 include 'COMMON.IOUNITS'
2119 include 'COMMON.GEO'
2120 include 'COMMON.VAR'
2121 include 'COMMON.LOCAL'
2122 include 'COMMON.CHAIN'
2123 include 'COMMON.DERIV'
2124 include 'COMMON.INTERACT'
2125 include 'COMMON.CONTACTS'
2126 include 'COMMON.TORSION'
2127 include 'COMMON.VECTORS'
2128 include 'COMMON.FFIELD'
2130 cd write(iout,*) 'In EELEC_soft_sphere'
2137 do i=iatel_s,iatel_e
2141 xmedi=c(1,i)+0.5d0*dxi
2142 ymedi=c(2,i)+0.5d0*dyi
2143 zmedi=c(3,i)+0.5d0*dzi
2145 c write (iout,*) 'i',i,' ielstart',ielstart(i),' ielend',ielend(i)
2146 do j=ielstart(i),ielend(i)
2150 if (j.eq.i+2 .and. itelj.eq.2) iteli=2
2151 r0ij=rpp(iteli,itelj)
2156 xj=c(1,j)+0.5D0*dxj-xmedi
2157 yj=c(2,j)+0.5D0*dyj-ymedi
2158 zj=c(3,j)+0.5D0*dzj-zmedi
2159 rij=xj*xj+yj*yj+zj*zj
2160 if (rij.lt.r0ijsq) then
2161 evdw1ij=0.25d0*(rij-r0ijsq)**2
2169 C Calculate contributions to the Cartesian gradient.
2175 gvdwpp(k,i)=gvdwpp(k,i)-ggg(k)
2176 gvdwpp(k,j)=gvdwpp(k,j)+ggg(k)
2179 * Loop over residues i+1 thru j-1.
2183 cgrad gelc(l,k)=gelc(l,k)+ggg(l)
2188 cgrad do i=nnt,nct-1
2190 cgrad gelc(k,i)=gelc(k,i)+0.5d0*gelc(k,i)
2192 cgrad do j=i+1,nct-1
2194 cgrad gelc(k,i)=gelc(k,i)+gelc(k,j)
2200 c------------------------------------------------------------------------------
2201 subroutine vec_and_deriv
2202 implicit real*8 (a-h,o-z)
2203 include 'DIMENSIONS'
2207 include 'COMMON.IOUNITS'
2208 include 'COMMON.GEO'
2209 include 'COMMON.VAR'
2210 include 'COMMON.LOCAL'
2211 include 'COMMON.CHAIN'
2212 include 'COMMON.VECTORS'
2213 include 'COMMON.SETUP'
2214 include 'COMMON.TIME1'
2215 dimension uyder(3,3,2),uzder(3,3,2),vbld_inv_temp(2)
2216 C Compute the local reference systems. For reference system (i), the
2217 C X-axis points from CA(i) to CA(i+1), the Y axis is in the
2218 C CA(i)-CA(i+1)-CA(i+2) plane, and the Z axis is perpendicular to this plane.
2220 do i=ivec_start,ivec_end
2224 if (i.eq.nres-1) then
2225 C Case of the last full residue
2226 C Compute the Z-axis
2227 call vecpr(dc_norm(1,i),dc_norm(1,i-1),uz(1,i))
2228 costh=dcos(pi-theta(nres))
2229 fac=1.0d0/dsqrt(1.0d0-costh*costh)
2233 C Compute the derivatives of uz
2235 uzder(2,1,1)=-dc_norm(3,i-1)
2236 uzder(3,1,1)= dc_norm(2,i-1)
2237 uzder(1,2,1)= dc_norm(3,i-1)
2239 uzder(3,2,1)=-dc_norm(1,i-1)
2240 uzder(1,3,1)=-dc_norm(2,i-1)
2241 uzder(2,3,1)= dc_norm(1,i-1)
2244 uzder(2,1,2)= dc_norm(3,i)
2245 uzder(3,1,2)=-dc_norm(2,i)
2246 uzder(1,2,2)=-dc_norm(3,i)
2248 uzder(3,2,2)= dc_norm(1,i)
2249 uzder(1,3,2)= dc_norm(2,i)
2250 uzder(2,3,2)=-dc_norm(1,i)
2252 C Compute the Y-axis
2255 uy(k,i)=fac*(dc_norm(k,i-1)-costh*dc_norm(k,i))
2257 C Compute the derivatives of uy
2260 uyder(k,j,1)=2*dc_norm(k,i-1)*dc_norm(j,i)
2261 & -dc_norm(k,i)*dc_norm(j,i-1)
2262 uyder(k,j,2)=-dc_norm(j,i)*dc_norm(k,i)
2264 uyder(j,j,1)=uyder(j,j,1)-costh
2265 uyder(j,j,2)=1.0d0+uyder(j,j,2)
2270 uygrad(l,k,j,i)=uyder(l,k,j)
2271 uzgrad(l,k,j,i)=uzder(l,k,j)
2275 call unormderiv(uy(1,i),uyder(1,1,1),facy,uygrad(1,1,1,i))
2276 call unormderiv(uy(1,i),uyder(1,1,2),facy,uygrad(1,1,2,i))
2277 call unormderiv(uz(1,i),uzder(1,1,1),fac,uzgrad(1,1,1,i))
2278 call unormderiv(uz(1,i),uzder(1,1,2),fac,uzgrad(1,1,2,i))
2281 C Compute the Z-axis
2282 call vecpr(dc_norm(1,i),dc_norm(1,i+1),uz(1,i))
2283 costh=dcos(pi-theta(i+2))
2284 fac=1.0d0/dsqrt(1.0d0-costh*costh)
2288 C Compute the derivatives of uz
2290 uzder(2,1,1)=-dc_norm(3,i+1)
2291 uzder(3,1,1)= dc_norm(2,i+1)
2292 uzder(1,2,1)= dc_norm(3,i+1)
2294 uzder(3,2,1)=-dc_norm(1,i+1)
2295 uzder(1,3,1)=-dc_norm(2,i+1)
2296 uzder(2,3,1)= dc_norm(1,i+1)
2299 uzder(2,1,2)= dc_norm(3,i)
2300 uzder(3,1,2)=-dc_norm(2,i)
2301 uzder(1,2,2)=-dc_norm(3,i)
2303 uzder(3,2,2)= dc_norm(1,i)
2304 uzder(1,3,2)= dc_norm(2,i)
2305 uzder(2,3,2)=-dc_norm(1,i)
2307 C Compute the Y-axis
2310 uy(k,i)=facy*(dc_norm(k,i+1)-costh*dc_norm(k,i))
2312 C Compute the derivatives of uy
2315 uyder(k,j,1)=2*dc_norm(k,i+1)*dc_norm(j,i)
2316 & -dc_norm(k,i)*dc_norm(j,i+1)
2317 uyder(k,j,2)=-dc_norm(j,i)*dc_norm(k,i)
2319 uyder(j,j,1)=uyder(j,j,1)-costh
2320 uyder(j,j,2)=1.0d0+uyder(j,j,2)
2325 uygrad(l,k,j,i)=uyder(l,k,j)
2326 uzgrad(l,k,j,i)=uzder(l,k,j)
2330 call unormderiv(uy(1,i),uyder(1,1,1),facy,uygrad(1,1,1,i))
2331 call unormderiv(uy(1,i),uyder(1,1,2),facy,uygrad(1,1,2,i))
2332 call unormderiv(uz(1,i),uzder(1,1,1),fac,uzgrad(1,1,1,i))
2333 call unormderiv(uz(1,i),uzder(1,1,2),fac,uzgrad(1,1,2,i))
2337 vbld_inv_temp(1)=vbld_inv(i+1)
2338 if (i.lt.nres-1) then
2339 vbld_inv_temp(2)=vbld_inv(i+2)
2341 vbld_inv_temp(2)=vbld_inv(i)
2346 uygrad(l,k,j,i)=vbld_inv_temp(j)*uygrad(l,k,j,i)
2347 uzgrad(l,k,j,i)=vbld_inv_temp(j)*uzgrad(l,k,j,i)
2352 #if defined(PARVEC) && defined(MPI)
2353 if (nfgtasks1.gt.1) then
2355 c print *,"Processor",fg_rank1,kolor1," ivec_start",ivec_start,
2356 c & " ivec_displ",(ivec_displ(i),i=0,nfgtasks1-1),
2357 c & " ivec_count",(ivec_count(i),i=0,nfgtasks1-1)
2358 call MPI_Allgatherv(uy(1,ivec_start),ivec_count(fg_rank1),
2359 & MPI_UYZ,uy(1,1),ivec_count(0),ivec_displ(0),MPI_UYZ,
2361 call MPI_Allgatherv(uz(1,ivec_start),ivec_count(fg_rank1),
2362 & MPI_UYZ,uz(1,1),ivec_count(0),ivec_displ(0),MPI_UYZ,
2364 call MPI_Allgatherv(uygrad(1,1,1,ivec_start),
2365 & ivec_count(fg_rank1),MPI_UYZGRAD,uygrad(1,1,1,1),ivec_count(0),
2366 & ivec_displ(0),MPI_UYZGRAD,FG_COMM1,IERR)
2367 call MPI_Allgatherv(uzgrad(1,1,1,ivec_start),
2368 & ivec_count(fg_rank1),MPI_UYZGRAD,uzgrad(1,1,1,1),ivec_count(0),
2369 & ivec_displ(0),MPI_UYZGRAD,FG_COMM1,IERR)
2370 time_gather=time_gather+MPI_Wtime()-time00
2372 c if (fg_rank.eq.0) then
2373 c write (iout,*) "Arrays UY and UZ"
2375 c write (iout,'(i5,3f10.5,5x,3f10.5)') i,(uy(k,i),k=1,3),
2382 C-----------------------------------------------------------------------------
2383 subroutine check_vecgrad
2384 implicit real*8 (a-h,o-z)
2385 include 'DIMENSIONS'
2386 include 'COMMON.IOUNITS'
2387 include 'COMMON.GEO'
2388 include 'COMMON.VAR'
2389 include 'COMMON.LOCAL'
2390 include 'COMMON.CHAIN'
2391 include 'COMMON.VECTORS'
2392 dimension uygradt(3,3,2,maxres),uzgradt(3,3,2,maxres)
2393 dimension uyt(3,maxres),uzt(3,maxres)
2394 dimension uygradn(3,3,2),uzgradn(3,3,2),erij(3)
2395 double precision delta /1.0d-7/
2398 crc write(iout,'(2i5,2(3f10.5,5x))') i,1,dc_norm(:,i)
2399 crc write(iout,'(2i5,2(3f10.5,5x))') i,2,uy(:,i)
2400 crc write(iout,'(2i5,2(3f10.5,5x)/)')i,3,uz(:,i)
2401 cd write(iout,'(2i5,2(3f10.5,5x))') i,1,
2402 cd & (dc_norm(if90,i),if90=1,3)
2403 cd write(iout,'(2i5,2(3f10.5,5x))') i,2,(uy(if90,i),if90=1,3)
2404 cd write(iout,'(2i5,2(3f10.5,5x)/)')i,3,(uz(if90,i),if90=1,3)
2405 cd write(iout,'(a)')
2411 uygradt(l,k,j,i)=uygrad(l,k,j,i)
2412 uzgradt(l,k,j,i)=uzgrad(l,k,j,i)
2425 cd write (iout,*) 'i=',i
2427 erij(k)=dc_norm(k,i)
2431 dc_norm(k,i)=erij(k)
2433 dc_norm(j,i)=dc_norm(j,i)+delta
2434 c fac=dsqrt(scalar(dc_norm(1,i),dc_norm(1,i)))
2436 c dc_norm(k,i)=dc_norm(k,i)/fac
2438 c write (iout,*) (dc_norm(k,i),k=1,3)
2439 c write (iout,*) (erij(k),k=1,3)
2442 uygradn(k,j,1)=(uy(k,i)-uyt(k,i))/delta
2443 uygradn(k,j,2)=(uy(k,i-1)-uyt(k,i-1))/delta
2444 uzgradn(k,j,1)=(uz(k,i)-uzt(k,i))/delta
2445 uzgradn(k,j,2)=(uz(k,i-1)-uzt(k,i-1))/delta
2447 c write (iout,'(i5,3f8.5,3x,3f8.5,5x,3f8.5,3x,3f8.5)')
2448 c & j,(uzgradt(k,j,1,i),k=1,3),(uzgradn(k,j,1),k=1,3),
2449 c & (uzgradt(k,j,2,i-1),k=1,3),(uzgradn(k,j,2),k=1,3)
2452 dc_norm(k,i)=erij(k)
2455 cd write (iout,'(i5,3f8.5,3x,3f8.5,5x,3f8.5,3x,3f8.5)')
2456 cd & k,(uygradt(k,l,1,i),l=1,3),(uygradn(k,l,1),l=1,3),
2457 cd & (uygradt(k,l,2,i-1),l=1,3),(uygradn(k,l,2),l=1,3)
2458 cd write (iout,'(i5,3f8.5,3x,3f8.5,5x,3f8.5,3x,3f8.5)')
2459 cd & k,(uzgradt(k,l,1,i),l=1,3),(uzgradn(k,l,1),l=1,3),
2460 cd & (uzgradt(k,l,2,i-1),l=1,3),(uzgradn(k,l,2),l=1,3)
2461 cd write (iout,'(a)')
2466 C--------------------------------------------------------------------------
2467 subroutine set_matrices
2468 implicit real*8 (a-h,o-z)
2469 include 'DIMENSIONS'
2472 include "COMMON.SETUP"
2474 integer status(MPI_STATUS_SIZE)
2476 include 'COMMON.IOUNITS'
2477 include 'COMMON.GEO'
2478 include 'COMMON.VAR'
2479 include 'COMMON.LOCAL'
2480 include 'COMMON.CHAIN'
2481 include 'COMMON.DERIV'
2482 include 'COMMON.INTERACT'
2483 include 'COMMON.CONTACTS'
2484 include 'COMMON.TORSION'
2485 include 'COMMON.VECTORS'
2486 include 'COMMON.FFIELD'
2487 double precision auxvec(2),auxmat(2,2)
2489 C Compute the virtual-bond-torsional-angle dependent quantities needed
2490 C to calculate the el-loc multibody terms of various order.
2493 do i=ivec_start+2,ivec_end+2
2497 if (i .lt. nres+1) then
2534 if (i .gt. 3 .and. i .lt. nres+1) then
2535 obrot_der(1,i-2)=-sin1
2536 obrot_der(2,i-2)= cos1
2537 Ugder(1,1,i-2)= sin1
2538 Ugder(1,2,i-2)=-cos1
2539 Ugder(2,1,i-2)=-cos1
2540 Ugder(2,2,i-2)=-sin1
2543 obrot2_der(1,i-2)=-dwasin2
2544 obrot2_der(2,i-2)= dwacos2
2545 Ug2der(1,1,i-2)= dwasin2
2546 Ug2der(1,2,i-2)=-dwacos2
2547 Ug2der(2,1,i-2)=-dwacos2
2548 Ug2der(2,2,i-2)=-dwasin2
2550 obrot_der(1,i-2)=0.0d0
2551 obrot_der(2,i-2)=0.0d0
2552 Ugder(1,1,i-2)=0.0d0
2553 Ugder(1,2,i-2)=0.0d0
2554 Ugder(2,1,i-2)=0.0d0
2555 Ugder(2,2,i-2)=0.0d0
2556 obrot2_der(1,i-2)=0.0d0
2557 obrot2_der(2,i-2)=0.0d0
2558 Ug2der(1,1,i-2)=0.0d0
2559 Ug2der(1,2,i-2)=0.0d0
2560 Ug2der(2,1,i-2)=0.0d0
2561 Ug2der(2,2,i-2)=0.0d0
2563 c if (i.gt. iatel_s+2 .and. i.lt.iatel_e+5) then
2564 if (i.gt. nnt+2 .and. i.lt.nct+2) then
2565 iti = itortyp(itype(i-2))
2569 c if (i.gt. iatel_s+1 .and. i.lt.iatel_e+4) then
2570 if (i.gt. nnt+1 .and. i.lt.nct+1) then
2571 iti1 = itortyp(itype(i-1))
2575 cd write (iout,*) '*******i',i,' iti1',iti
2576 cd write (iout,*) 'b1',b1(:,iti)
2577 cd write (iout,*) 'b2',b2(:,iti)
2578 cd write (iout,*) 'Ug',Ug(:,:,i-2)
2579 c if (i .gt. iatel_s+2) then
2580 if (i .gt. nnt+2) then
2581 call matvec2(Ug(1,1,i-2),b2(1,iti),Ub2(1,i-2))
2582 call matmat2(EE(1,1,iti),Ug(1,1,i-2),EUg(1,1,i-2))
2583 if (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0)
2585 call matmat2(CC(1,1,iti),Ug(1,1,i-2),CUg(1,1,i-2))
2586 call matmat2(DD(1,1,iti),Ug(1,1,i-2),DUg(1,1,i-2))
2587 call matmat2(Dtilde(1,1,iti),Ug2(1,1,i-2),DtUg2(1,1,i-2))
2588 call matvec2(Ctilde(1,1,iti1),obrot(1,i-2),Ctobr(1,i-2))
2589 call matvec2(Dtilde(1,1,iti),obrot2(1,i-2),Dtobr2(1,i-2))
2600 DtUg2(l,k,i-2)=0.0d0
2604 call matvec2(Ugder(1,1,i-2),b2(1,iti),Ub2der(1,i-2))
2605 call matmat2(EE(1,1,iti),Ugder(1,1,i-2),EUgder(1,1,i-2))
2607 muder(k,i-2)=Ub2der(k,i-2)
2609 c if (i.gt. iatel_s+1 .and. i.lt.iatel_e+4) then
2610 if (i.gt. nnt+1 .and. i.lt.nct+1) then
2611 iti1 = itortyp(itype(i-1))
2616 mu(k,i-2)=Ub2(k,i-2)+b1(k,iti1)
2618 cd write (iout,*) 'mu ',mu(:,i-2)
2619 cd write (iout,*) 'mu1',mu1(:,i-2)
2620 cd write (iout,*) 'mu2',mu2(:,i-2)
2621 if (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or.wcorr6.gt.0.0d0)
2623 call matmat2(CC(1,1,iti1),Ugder(1,1,i-2),CUgder(1,1,i-2))
2624 call matmat2(DD(1,1,iti),Ugder(1,1,i-2),DUgder(1,1,i-2))
2625 call matmat2(Dtilde(1,1,iti),Ug2der(1,1,i-2),DtUg2der(1,1,i-2))
2626 call matvec2(Ctilde(1,1,iti1),obrot_der(1,i-2),Ctobrder(1,i-2))
2627 call matvec2(Dtilde(1,1,iti),obrot2_der(1,i-2),Dtobr2der(1,i-2))
2628 C Vectors and matrices dependent on a single virtual-bond dihedral.
2629 call matvec2(DD(1,1,iti),b1tilde(1,iti1),auxvec(1))
2630 call matvec2(Ug2(1,1,i-2),auxvec(1),Ug2Db1t(1,i-2))
2631 call matvec2(Ug2der(1,1,i-2),auxvec(1),Ug2Db1tder(1,i-2))
2632 call matvec2(CC(1,1,iti1),Ub2(1,i-2),CUgb2(1,i-2))
2633 call matvec2(CC(1,1,iti1),Ub2der(1,i-2),CUgb2der(1,i-2))
2634 call matmat2(EUg(1,1,i-2),CC(1,1,iti1),EUgC(1,1,i-2))
2635 call matmat2(EUgder(1,1,i-2),CC(1,1,iti1),EUgCder(1,1,i-2))
2636 call matmat2(EUg(1,1,i-2),DD(1,1,iti1),EUgD(1,1,i-2))
2637 call matmat2(EUgder(1,1,i-2),DD(1,1,iti1),EUgDder(1,1,i-2))
2640 C Matrices dependent on two consecutive virtual-bond dihedrals.
2641 C The order of matrices is from left to right.
2642 if (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or.wcorr6.gt.0.0d0)
2644 c do i=max0(ivec_start,2),ivec_end
2646 call matmat2(DtUg2(1,1,i-1),EUg(1,1,i),DtUg2EUg(1,1,i))
2647 call matmat2(DtUg2der(1,1,i-1),EUg(1,1,i),DtUg2EUgder(1,1,1,i))
2648 call matmat2(DtUg2(1,1,i-1),EUgder(1,1,i),DtUg2EUgder(1,1,2,i))
2649 call transpose2(DtUg2(1,1,i-1),auxmat(1,1))
2650 call matmat2(auxmat(1,1),EUg(1,1,i),Ug2DtEUg(1,1,i))
2651 call matmat2(auxmat(1,1),EUgder(1,1,i),Ug2DtEUgder(1,1,2,i))
2652 call transpose2(DtUg2der(1,1,i-1),auxmat(1,1))
2653 call matmat2(auxmat(1,1),EUg(1,1,i),Ug2DtEUgder(1,1,1,i))
2656 #if defined(MPI) && defined(PARMAT)
2658 c if (fg_rank.eq.0) then
2659 write (iout,*) "Arrays UG and UGDER before GATHER"
2661 write (iout,'(i5,4f10.5,5x,4f10.5)') i,
2662 & ((ug(l,k,i),l=1,2),k=1,2),
2663 & ((ugder(l,k,i),l=1,2),k=1,2)
2665 write (iout,*) "Arrays UG2 and UG2DER"
2667 write (iout,'(i5,4f10.5,5x,4f10.5)') i,
2668 & ((ug2(l,k,i),l=1,2),k=1,2),
2669 & ((ug2der(l,k,i),l=1,2),k=1,2)
2671 write (iout,*) "Arrays OBROT OBROT2 OBROTDER and OBROT2DER"
2673 write (iout,'(i5,4f10.5,5x,4f10.5)') i,
2674 & (obrot(k,i),k=1,2),(obrot2(k,i),k=1,2),
2675 & (obrot_der(k,i),k=1,2),(obrot2_der(k,i),k=1,2)
2677 write (iout,*) "Arrays COSTAB SINTAB COSTAB2 and SINTAB2"
2679 write (iout,'(i5,4f10.5,5x,4f10.5)') i,
2680 & costab(i),sintab(i),costab2(i),sintab2(i)
2682 write (iout,*) "Array MUDER"
2684 write (iout,'(i5,2f10.5)') i,muder(1,i),muder(2,i)
2688 if (nfgtasks.gt.1) then
2690 c write(iout,*)"Processor",fg_rank,kolor," ivec_start",ivec_start,
2691 c & " ivec_displ",(ivec_displ(i),i=0,nfgtasks-1),
2692 c & " ivec_count",(ivec_count(i),i=0,nfgtasks-1)
2694 call MPI_Allgatherv(Ub2(1,ivec_start),ivec_count(fg_rank1),
2695 & MPI_MU,Ub2(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2697 call MPI_Allgatherv(Ub2der(1,ivec_start),ivec_count(fg_rank1),
2698 & MPI_MU,Ub2der(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2700 call MPI_Allgatherv(mu(1,ivec_start),ivec_count(fg_rank1),
2701 & MPI_MU,mu(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2703 call MPI_Allgatherv(muder(1,ivec_start),ivec_count(fg_rank1),
2704 & MPI_MU,muder(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2706 call MPI_Allgatherv(Eug(1,1,ivec_start),ivec_count(fg_rank1),
2707 & MPI_MAT1,Eug(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2709 call MPI_Allgatherv(Eugder(1,1,ivec_start),ivec_count(fg_rank1),
2710 & MPI_MAT1,Eugder(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2712 call MPI_Allgatherv(costab(ivec_start),ivec_count(fg_rank1),
2713 & MPI_DOUBLE_PRECISION,costab(1),ivec_count(0),ivec_displ(0),
2714 & MPI_DOUBLE_PRECISION,FG_COMM1,IERR)
2715 call MPI_Allgatherv(sintab(ivec_start),ivec_count(fg_rank1),
2716 & MPI_DOUBLE_PRECISION,sintab(1),ivec_count(0),ivec_displ(0),
2717 & MPI_DOUBLE_PRECISION,FG_COMM1,IERR)
2718 call MPI_Allgatherv(costab2(ivec_start),ivec_count(fg_rank1),
2719 & MPI_DOUBLE_PRECISION,costab2(1),ivec_count(0),ivec_displ(0),
2720 & MPI_DOUBLE_PRECISION,FG_COMM1,IERR)
2721 call MPI_Allgatherv(sintab2(ivec_start),ivec_count(fg_rank1),
2722 & MPI_DOUBLE_PRECISION,sintab2(1),ivec_count(0),ivec_displ(0),
2723 & MPI_DOUBLE_PRECISION,FG_COMM1,IERR)
2724 if (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0)
2726 call MPI_Allgatherv(Ctobr(1,ivec_start),ivec_count(fg_rank1),
2727 & MPI_MU,Ctobr(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2729 call MPI_Allgatherv(Ctobrder(1,ivec_start),ivec_count(fg_rank1),
2730 & MPI_MU,Ctobrder(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2732 call MPI_Allgatherv(Dtobr2(1,ivec_start),ivec_count(fg_rank1),
2733 & MPI_MU,Dtobr2(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2735 call MPI_Allgatherv(Dtobr2der(1,ivec_start),ivec_count(fg_rank1),
2736 & MPI_MU,Dtobr2der(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2738 call MPI_Allgatherv(Ug2Db1t(1,ivec_start),ivec_count(fg_rank1),
2739 & MPI_MU,Ug2Db1t(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2741 call MPI_Allgatherv(Ug2Db1tder(1,ivec_start),
2742 & ivec_count(fg_rank1),
2743 & MPI_MU,Ug2Db1tder(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2745 call MPI_Allgatherv(CUgb2(1,ivec_start),ivec_count(fg_rank1),
2746 & MPI_MU,CUgb2(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2748 call MPI_Allgatherv(CUgb2der(1,ivec_start),ivec_count(fg_rank1),
2749 & MPI_MU,CUgb2der(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2751 call MPI_Allgatherv(Cug(1,1,ivec_start),ivec_count(fg_rank1),
2752 & MPI_MAT1,Cug(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2754 call MPI_Allgatherv(Cugder(1,1,ivec_start),ivec_count(fg_rank1),
2755 & MPI_MAT1,Cugder(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2757 call MPI_Allgatherv(Dug(1,1,ivec_start),ivec_count(fg_rank1),
2758 & MPI_MAT1,Dug(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2760 call MPI_Allgatherv(Dugder(1,1,ivec_start),ivec_count(fg_rank1),
2761 & MPI_MAT1,Dugder(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2763 call MPI_Allgatherv(Dtug2(1,1,ivec_start),ivec_count(fg_rank1),
2764 & MPI_MAT1,Dtug2(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2766 call MPI_Allgatherv(Dtug2der(1,1,ivec_start),
2767 & ivec_count(fg_rank1),
2768 & MPI_MAT1,Dtug2der(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2770 call MPI_Allgatherv(EugC(1,1,ivec_start),ivec_count(fg_rank1),
2771 & MPI_MAT1,EugC(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2773 call MPI_Allgatherv(EugCder(1,1,ivec_start),ivec_count(fg_rank1),
2774 & MPI_MAT1,EugCder(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2776 call MPI_Allgatherv(EugD(1,1,ivec_start),ivec_count(fg_rank1),
2777 & MPI_MAT1,EugD(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2779 call MPI_Allgatherv(EugDder(1,1,ivec_start),ivec_count(fg_rank1),
2780 & MPI_MAT1,EugDder(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2782 call MPI_Allgatherv(DtUg2EUg(1,1,ivec_start),
2783 & ivec_count(fg_rank1),
2784 & MPI_MAT1,DtUg2EUg(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2786 call MPI_Allgatherv(Ug2DtEUg(1,1,ivec_start),
2787 & ivec_count(fg_rank1),
2788 & MPI_MAT1,Ug2DtEUg(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2790 call MPI_Allgatherv(DtUg2EUgder(1,1,1,ivec_start),
2791 & ivec_count(fg_rank1),
2792 & MPI_MAT2,DtUg2EUgder(1,1,1,1),ivec_count(0),ivec_displ(0),
2793 & MPI_MAT2,FG_COMM1,IERR)
2794 call MPI_Allgatherv(Ug2DtEUgder(1,1,1,ivec_start),
2795 & ivec_count(fg_rank1),
2796 & MPI_MAT2,Ug2DtEUgder(1,1,1,1),ivec_count(0),ivec_displ(0),
2797 & MPI_MAT2,FG_COMM1,IERR)
2800 c Passes matrix info through the ring
2803 if (irecv.lt.0) irecv=nfgtasks1-1
2806 if (inext.ge.nfgtasks1) inext=0
2808 c write (iout,*) "isend",isend," irecv",irecv
2810 lensend=lentyp(isend)
2811 lenrecv=lentyp(irecv)
2812 c write (iout,*) "lensend",lensend," lenrecv",lenrecv
2813 c call MPI_SENDRECV(ug(1,1,ivec_displ(isend)+1),1,
2814 c & MPI_ROTAT1(lensend),inext,2200+isend,
2815 c & ug(1,1,ivec_displ(irecv)+1),1,MPI_ROTAT1(lenrecv),
2816 c & iprev,2200+irecv,FG_COMM,status,IERR)
2817 c write (iout,*) "Gather ROTAT1"
2819 c call MPI_SENDRECV(obrot(1,ivec_displ(isend)+1),1,
2820 c & MPI_ROTAT2(lensend),inext,3300+isend,
2821 c & obrot(1,ivec_displ(irecv)+1),1,MPI_ROTAT2(lenrecv),
2822 c & iprev,3300+irecv,FG_COMM,status,IERR)
2823 c write (iout,*) "Gather ROTAT2"
2825 call MPI_SENDRECV(costab(ivec_displ(isend)+1),1,
2826 & MPI_ROTAT_OLD(lensend),inext,4400+isend,
2827 & costab(ivec_displ(irecv)+1),1,MPI_ROTAT_OLD(lenrecv),
2828 & iprev,4400+irecv,FG_COMM,status,IERR)
2829 c write (iout,*) "Gather ROTAT_OLD"
2831 call MPI_SENDRECV(mu(1,ivec_displ(isend)+1),1,
2832 & MPI_PRECOMP11(lensend),inext,5500+isend,
2833 & mu(1,ivec_displ(irecv)+1),1,MPI_PRECOMP11(lenrecv),
2834 & iprev,5500+irecv,FG_COMM,status,IERR)
2835 c write (iout,*) "Gather PRECOMP11"
2837 call MPI_SENDRECV(Eug(1,1,ivec_displ(isend)+1),1,
2838 & MPI_PRECOMP12(lensend),inext,6600+isend,
2839 & Eug(1,1,ivec_displ(irecv)+1),1,MPI_PRECOMP12(lenrecv),
2840 & iprev,6600+irecv,FG_COMM,status,IERR)
2841 c write (iout,*) "Gather PRECOMP12"
2843 if (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0)
2845 call MPI_SENDRECV(ug2db1t(1,ivec_displ(isend)+1),1,
2846 & MPI_ROTAT2(lensend),inext,7700+isend,
2847 & ug2db1t(1,ivec_displ(irecv)+1),1,MPI_ROTAT2(lenrecv),
2848 & iprev,7700+irecv,FG_COMM,status,IERR)
2849 c write (iout,*) "Gather PRECOMP21"
2851 call MPI_SENDRECV(EUgC(1,1,ivec_displ(isend)+1),1,
2852 & MPI_PRECOMP22(lensend),inext,8800+isend,
2853 & EUgC(1,1,ivec_displ(irecv)+1),1,MPI_PRECOMP22(lenrecv),
2854 & iprev,8800+irecv,FG_COMM,status,IERR)
2855 c write (iout,*) "Gather PRECOMP22"
2857 call MPI_SENDRECV(Ug2DtEUgder(1,1,1,ivec_displ(isend)+1),1,
2858 & MPI_PRECOMP23(lensend),inext,9900+isend,
2859 & Ug2DtEUgder(1,1,1,ivec_displ(irecv)+1),1,
2860 & MPI_PRECOMP23(lenrecv),
2861 & iprev,9900+irecv,FG_COMM,status,IERR)
2862 c write (iout,*) "Gather PRECOMP23"
2867 if (irecv.lt.0) irecv=nfgtasks1-1
2870 time_gather=time_gather+MPI_Wtime()-time00
2873 c if (fg_rank.eq.0) then
2874 write (iout,*) "Arrays UG and UGDER"
2876 write (iout,'(i5,4f10.5,5x,4f10.5)') i,
2877 & ((ug(l,k,i),l=1,2),k=1,2),
2878 & ((ugder(l,k,i),l=1,2),k=1,2)
2880 write (iout,*) "Arrays UG2 and UG2DER"
2882 write (iout,'(i5,4f10.5,5x,4f10.5)') i,
2883 & ((ug2(l,k,i),l=1,2),k=1,2),
2884 & ((ug2der(l,k,i),l=1,2),k=1,2)
2886 write (iout,*) "Arrays OBROT OBROT2 OBROTDER and OBROT2DER"
2888 write (iout,'(i5,4f10.5,5x,4f10.5)') i,
2889 & (obrot(k,i),k=1,2),(obrot2(k,i),k=1,2),
2890 & (obrot_der(k,i),k=1,2),(obrot2_der(k,i),k=1,2)
2892 write (iout,*) "Arrays COSTAB SINTAB COSTAB2 and SINTAB2"
2894 write (iout,'(i5,4f10.5,5x,4f10.5)') i,
2895 & costab(i),sintab(i),costab2(i),sintab2(i)
2897 write (iout,*) "Array MUDER"
2899 write (iout,'(i5,2f10.5)') i,muder(1,i),muder(2,i)
2905 cd iti = itortyp(itype(i))
2908 cd write (iout,'(2f10.5,5x,2f10.5,5x,2f10.5)')
2909 cd & (EE(j,k,iti),k=1,2),(Ug(j,k,i),k=1,2),(EUg(j,k,i),k=1,2)
2914 C--------------------------------------------------------------------------
2915 subroutine eelec(ees,evdw1,eel_loc,eello_turn3,eello_turn4)
2917 C This subroutine calculates the average interaction energy and its gradient
2918 C in the virtual-bond vectors between non-adjacent peptide groups, based on
2919 C the potential described in Liwo et al., Protein Sci., 1993, 2, 1715.
2920 C The potential depends both on the distance of peptide-group centers and on
2921 C the orientation of the CA-CA virtual bonds.
2923 implicit real*8 (a-h,o-z)
2927 include 'DIMENSIONS'
2928 include 'COMMON.CONTROL'
2929 include 'COMMON.SETUP'
2930 include 'COMMON.IOUNITS'
2931 include 'COMMON.GEO'
2932 include 'COMMON.VAR'
2933 include 'COMMON.LOCAL'
2934 include 'COMMON.CHAIN'
2935 include 'COMMON.DERIV'
2936 include 'COMMON.INTERACT'
2937 include 'COMMON.CONTACTS'
2938 include 'COMMON.TORSION'
2939 include 'COMMON.VECTORS'
2940 include 'COMMON.FFIELD'
2941 include 'COMMON.TIME1'
2942 dimension ggg(3),gggp(3),gggm(3),erij(3),dcosb(3),dcosg(3),
2943 & erder(3,3),uryg(3,3),urzg(3,3),vryg(3,3),vrzg(3,3)
2944 double precision acipa(2,2),agg(3,4),aggi(3,4),aggi1(3,4),
2945 & aggj(3,4),aggj1(3,4),a_temp(2,2),muij(4)
2946 common /locel/ a_temp,agg,aggi,aggi1,aggj,aggj1,a22,a23,a32,a33,
2947 & dxi,dyi,dzi,dx_normi,dy_normi,dz_normi,xmedi,ymedi,zmedi,
2949 c 4/26/02 - AL scaling factor for 1,4 repulsive VDW interactions
2951 double precision scal_el /1.0d0/
2953 double precision scal_el /0.5d0/
2956 C 13-go grudnia roku pamietnego...
2957 double precision unmat(3,3) /1.0d0,0.0d0,0.0d0,
2958 & 0.0d0,1.0d0,0.0d0,
2959 & 0.0d0,0.0d0,1.0d0/
2960 cd write(iout,*) 'In EELEC'
2962 cd write(iout,*) 'Type',i
2963 cd write(iout,*) 'B1',B1(:,i)
2964 cd write(iout,*) 'B2',B2(:,i)
2965 cd write(iout,*) 'CC',CC(:,:,i)
2966 cd write(iout,*) 'DD',DD(:,:,i)
2967 cd write(iout,*) 'EE',EE(:,:,i)
2969 cd call check_vecgrad
2971 if (icheckgrad.eq.1) then
2973 fac=1.0d0/dsqrt(scalar(dc(1,i),dc(1,i)))
2975 dc_norm(k,i)=dc(k,i)*fac
2977 c write (iout,*) 'i',i,' fac',fac
2980 if (wel_loc.gt.0.0d0 .or. wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0
2981 & .or. wcorr6.gt.0.0d0 .or. wturn3.gt.0.0d0 .or.
2982 & wturn4.gt.0.0d0 .or. wturn6.gt.0.0d0) then
2983 c call vec_and_deriv
2989 time_mat=time_mat+MPI_Wtime()-time01
2993 cd write (iout,*) 'i=',i
2995 cd write (iout,'(i5,2f10.5)') k,uy(k,i),uz(k,i)
2998 cd write (iout,'(f10.5,2x,3f10.5,2x,3f10.5)')
2999 cd & uz(k,i),(uzgrad(k,l,1,i),l=1,3),(uzgrad(k,l,2,i),l=1,3)
3012 cd print '(a)','Enter EELEC'
3013 cd write (iout,*) 'iatel_s=',iatel_s,' iatel_e=',iatel_e
3015 gel_loc_loc(i)=0.0d0
3020 c 9/27/08 AL Split the interaction loop to ensure load balancing of turn terms
3022 C Loop over i,i+2 and i,i+3 pairs of the peptide groups
3024 do i=iturn3_start,iturn3_end
3028 dx_normi=dc_norm(1,i)
3029 dy_normi=dc_norm(2,i)
3030 dz_normi=dc_norm(3,i)
3031 xmedi=c(1,i)+0.5d0*dxi
3032 ymedi=c(2,i)+0.5d0*dyi
3033 zmedi=c(3,i)+0.5d0*dzi
3035 call eelecij(i,i+2,ees,evdw1,eel_loc)
3036 if (wturn3.gt.0.0d0) call eturn3(i,eello_turn3)
3037 num_cont_hb(i)=num_conti
3039 do i=iturn4_start,iturn4_end
3043 dx_normi=dc_norm(1,i)
3044 dy_normi=dc_norm(2,i)
3045 dz_normi=dc_norm(3,i)
3046 xmedi=c(1,i)+0.5d0*dxi
3047 ymedi=c(2,i)+0.5d0*dyi
3048 zmedi=c(3,i)+0.5d0*dzi
3049 num_conti=num_cont_hb(i)
3050 call eelecij(i,i+3,ees,evdw1,eel_loc)
3051 if (wturn4.gt.0.0d0) call eturn4(i,eello_turn4)
3052 num_cont_hb(i)=num_conti
3055 c Loop over all pairs of interacting peptide groups except i,i+2 and i,i+3
3057 do i=iatel_s,iatel_e
3061 dx_normi=dc_norm(1,i)
3062 dy_normi=dc_norm(2,i)
3063 dz_normi=dc_norm(3,i)
3064 xmedi=c(1,i)+0.5d0*dxi
3065 ymedi=c(2,i)+0.5d0*dyi
3066 zmedi=c(3,i)+0.5d0*dzi
3067 c write (iout,*) 'i',i,' ielstart',ielstart(i),' ielend',ielend(i)
3068 num_conti=num_cont_hb(i)
3069 do j=ielstart(i),ielend(i)
3070 call eelecij(i,j,ees,evdw1,eel_loc)
3072 num_cont_hb(i)=num_conti
3074 c write (iout,*) "Number of loop steps in EELEC:",ind
3076 cd write (iout,'(i3,3f10.5,5x,3f10.5)')
3077 cd & i,(gel_loc(k,i),k=1,3),gel_loc_loc(i)
3079 c 12/7/99 Adam eello_turn3 will be considered as a separate energy term
3080 ccc eel_loc=eel_loc+eello_turn3
3081 cd print *,"Processor",fg_rank," t_eelecij",t_eelecij
3084 C-------------------------------------------------------------------------------
3085 subroutine eelecij(i,j,ees,evdw1,eel_loc)
3086 implicit real*8 (a-h,o-z)
3087 include 'DIMENSIONS'
3091 include 'COMMON.CONTROL'
3092 include 'COMMON.IOUNITS'
3093 include 'COMMON.GEO'
3094 include 'COMMON.VAR'
3095 include 'COMMON.LOCAL'
3096 include 'COMMON.CHAIN'
3097 include 'COMMON.DERIV'
3098 include 'COMMON.INTERACT'
3099 include 'COMMON.CONTACTS'
3100 include 'COMMON.TORSION'
3101 include 'COMMON.VECTORS'
3102 include 'COMMON.FFIELD'
3103 include 'COMMON.TIME1'
3104 dimension ggg(3),gggp(3),gggm(3),erij(3),dcosb(3),dcosg(3),
3105 & erder(3,3),uryg(3,3),urzg(3,3),vryg(3,3),vrzg(3,3)
3106 double precision acipa(2,2),agg(3,4),aggi(3,4),aggi1(3,4),
3107 & aggj(3,4),aggj1(3,4),a_temp(2,2),muij(4)
3108 common /locel/ a_temp,agg,aggi,aggi1,aggj,aggj1,a22,a23,a32,a33,
3109 & dxi,dyi,dzi,dx_normi,dy_normi,dz_normi,xmedi,ymedi,zmedi,
3111 c 4/26/02 - AL scaling factor for 1,4 repulsive VDW interactions
3113 double precision scal_el /1.0d0/
3115 double precision scal_el /0.5d0/
3118 C 13-go grudnia roku pamietnego...
3119 double precision unmat(3,3) /1.0d0,0.0d0,0.0d0,
3120 & 0.0d0,1.0d0,0.0d0,
3121 & 0.0d0,0.0d0,1.0d0/
3122 c time00=MPI_Wtime()
3123 cd write (iout,*) "eelecij",i,j
3127 if (j.eq.i+2 .and. itelj.eq.2) iteli=2
3128 aaa=app(iteli,itelj)
3129 bbb=bpp(iteli,itelj)
3130 ael6i=ael6(iteli,itelj)
3131 ael3i=ael3(iteli,itelj)
3135 dx_normj=dc_norm(1,j)
3136 dy_normj=dc_norm(2,j)
3137 dz_normj=dc_norm(3,j)
3138 xj=c(1,j)+0.5D0*dxj-xmedi
3139 yj=c(2,j)+0.5D0*dyj-ymedi
3140 zj=c(3,j)+0.5D0*dzj-zmedi
3141 rij=xj*xj+yj*yj+zj*zj
3147 cosa=dx_normi*dx_normj+dy_normi*dy_normj+dz_normi*dz_normj
3148 cosb=(xj*dx_normi+yj*dy_normi+zj*dz_normi)*rmij
3149 cosg=(xj*dx_normj+yj*dy_normj+zj*dz_normj)*rmij
3150 fac=cosa-3.0D0*cosb*cosg
3152 c 4/26/02 - AL scaling down 1,4 repulsive VDW interactions
3153 if (j.eq.i+2) ev1=scal_el*ev1
3158 el1=fac3*(4.0D0+fac*fac-3.0D0*(cosb*cosb+cosg*cosg))
3161 C 12/26/95 - for the evaluation of multi-body H-bonding interactions
3162 ees0ij=4.0D0+fac*fac-3.0D0*(cosb*cosb+cosg*cosg)
3165 cd write(iout,'(2(2i3,2x),7(1pd12.4)/2(3(1pd12.4),5x)/)')
3166 cd & iteli,i,itelj,j,aaa,bbb,ael6i,ael3i,
3167 cd & 1.0D0/dsqrt(rrmij),evdwij,eesij,
3168 cd & xmedi,ymedi,zmedi,xj,yj,zj
3170 if (energy_dec) then
3171 write (iout,'(a6,2i5,0pf7.3)') 'evdw1',i,j,evdwij
3172 write (iout,'(a6,2i5,0pf7.3)') 'ees',i,j,eesij
3176 C Calculate contributions to the Cartesian gradient.
3179 facvdw=-6*rrmij*(ev1+evdwij)
3180 facel=-3*rrmij*(el1+eesij)
3186 * Radial derivatives. First process both termini of the fragment (i,j)
3192 c ghalf=0.5D0*ggg(k)
3193 c gelc(k,i)=gelc(k,i)+ghalf
3194 c gelc(k,j)=gelc(k,j)+ghalf
3196 c 9/28/08 AL Gradient compotents will be summed only at the end
3198 gelc_long(k,j)=gelc_long(k,j)+ggg(k)
3199 gelc_long(k,i)=gelc_long(k,i)-ggg(k)
3202 * Loop over residues i+1 thru j-1.
3206 cgrad gelc(l,k)=gelc(l,k)+ggg(l)
3213 c ghalf=0.5D0*ggg(k)
3214 c gvdwpp(k,i)=gvdwpp(k,i)+ghalf
3215 c gvdwpp(k,j)=gvdwpp(k,j)+ghalf
3217 c 9/28/08 AL Gradient compotents will be summed only at the end
3219 gvdwpp(k,j)=gvdwpp(k,j)+ggg(k)
3220 gvdwpp(k,i)=gvdwpp(k,i)-ggg(k)
3223 * Loop over residues i+1 thru j-1.
3227 cgrad gvdwpp(l,k)=gvdwpp(l,k)+ggg(l)
3234 fac=-3*rrmij*(facvdw+facvdw+facel)
3239 * Radial derivatives. First process both termini of the fragment (i,j)
3245 c ghalf=0.5D0*ggg(k)
3246 c gelc(k,i)=gelc(k,i)+ghalf
3247 c gelc(k,j)=gelc(k,j)+ghalf
3249 c 9/28/08 AL Gradient compotents will be summed only at the end
3251 gelc_long(k,j)=gelc(k,j)+ggg(k)
3252 gelc_long(k,i)=gelc(k,i)-ggg(k)
3255 * Loop over residues i+1 thru j-1.
3259 cgrad gelc(l,k)=gelc(l,k)+ggg(l)
3262 c 9/28/08 AL Gradient compotents will be summed only at the end
3267 gvdwpp(k,j)=gvdwpp(k,j)+ggg(k)
3268 gvdwpp(k,i)=gvdwpp(k,i)-ggg(k)
3274 ecosa=2.0D0*fac3*fac1+fac4
3277 ecosb=(fac3*(fac1*cosg+cosb)+cosg*fac4)
3278 ecosg=(fac3*(fac1*cosb+cosg)+cosb*fac4)
3280 dcosb(k)=rmij*(dc_norm(k,i)-erij(k)*cosb)
3281 dcosg(k)=rmij*(dc_norm(k,j)-erij(k)*cosg)
3283 cd print '(2i3,2(3(1pd14.5),3x))',i,j,(dcosb(k),k=1,3),
3284 cd & (dcosg(k),k=1,3)
3286 ggg(k)=ecosb*dcosb(k)+ecosg*dcosg(k)
3289 c ghalf=0.5D0*ggg(k)
3290 c gelc(k,i)=gelc(k,i)+ghalf
3291 c & +(ecosa*(dc_norm(k,j)-cosa*dc_norm(k,i))
3292 c & + ecosb*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1)
3293 c gelc(k,j)=gelc(k,j)+ghalf
3294 c & +(ecosa*(dc_norm(k,i)-cosa*dc_norm(k,j))
3295 c & + ecosg*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1)
3299 cgrad gelc(l,k)=gelc(l,k)+ggg(l)
3304 & +(ecosa*(dc_norm(k,j)-cosa*dc_norm(k,i))
3305 & + ecosb*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1)
3307 & +(ecosa*(dc_norm(k,i)-cosa*dc_norm(k,j))
3308 & + ecosg*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1)
3309 gelc_long(k,j)=gelc_long(k,j)+ggg(k)
3310 gelc_long(k,i)=gelc_long(k,i)-ggg(k)
3312 IF (wel_loc.gt.0.0d0 .or. wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0
3313 & .or. wcorr6.gt.0.0d0 .or. wturn3.gt.0.0d0
3314 & .or. wturn4.gt.0.0d0 .or. wturn6.gt.0.0d0) THEN
3316 C 9/25/99 Mixed third-order local-electrostatic terms. The local-interaction
3317 C energy of a peptide unit is assumed in the form of a second-order
3318 C Fourier series in the angles lambda1 and lambda2 (see Nishikawa et al.
3319 C Macromolecules, 1974, 7, 797-806 for definition). This correlation terms
3320 C are computed for EVERY pair of non-contiguous peptide groups.
3322 if (j.lt.nres-1) then
3333 muij(kkk)=mu(k,i)*mu(l,j)
3336 cd write (iout,*) 'EELEC: i',i,' j',j
3337 cd write (iout,*) 'j',j,' j1',j1,' j2',j2
3338 cd write(iout,*) 'muij',muij
3339 ury=scalar(uy(1,i),erij)
3340 urz=scalar(uz(1,i),erij)
3341 vry=scalar(uy(1,j),erij)
3342 vrz=scalar(uz(1,j),erij)
3343 a22=scalar(uy(1,i),uy(1,j))-3*ury*vry
3344 a23=scalar(uy(1,i),uz(1,j))-3*ury*vrz
3345 a32=scalar(uz(1,i),uy(1,j))-3*urz*vry
3346 a33=scalar(uz(1,i),uz(1,j))-3*urz*vrz
3347 fac=dsqrt(-ael6i)*r3ij
3352 cd write (iout,'(4i5,4f10.5)')
3353 cd & i,itortyp(itype(i)),j,itortyp(itype(j)),a22,a23,a32,a33
3354 cd write (iout,'(6f10.5)') (muij(k),k=1,4),fac,eel_loc_ij
3355 cd write (iout,'(2(3f10.5,5x)/2(3f10.5,5x))') uy(:,i),uz(:,i),
3356 cd & uy(:,j),uz(:,j)
3357 cd write (iout,'(4f10.5)')
3358 cd & scalar(uy(1,i),uy(1,j)),scalar(uy(1,i),uz(1,j)),
3359 cd & scalar(uz(1,i),uy(1,j)),scalar(uz(1,i),uz(1,j))
3360 cd write (iout,'(4f10.5)') ury,urz,vry,vrz
3361 cd write (iout,'(9f10.5/)')
3362 cd & fac22,a22,fac23,a23,fac32,a32,fac33,a33,eel_loc_ij
3363 C Derivatives of the elements of A in virtual-bond vectors
3364 call unormderiv(erij(1),unmat(1,1),rmij,erder(1,1))
3366 uryg(k,1)=scalar(erder(1,k),uy(1,i))
3367 uryg(k,2)=scalar(uygrad(1,k,1,i),erij(1))
3368 uryg(k,3)=scalar(uygrad(1,k,2,i),erij(1))
3369 urzg(k,1)=scalar(erder(1,k),uz(1,i))
3370 urzg(k,2)=scalar(uzgrad(1,k,1,i),erij(1))
3371 urzg(k,3)=scalar(uzgrad(1,k,2,i),erij(1))
3372 vryg(k,1)=scalar(erder(1,k),uy(1,j))
3373 vryg(k,2)=scalar(uygrad(1,k,1,j),erij(1))
3374 vryg(k,3)=scalar(uygrad(1,k,2,j),erij(1))
3375 vrzg(k,1)=scalar(erder(1,k),uz(1,j))
3376 vrzg(k,2)=scalar(uzgrad(1,k,1,j),erij(1))
3377 vrzg(k,3)=scalar(uzgrad(1,k,2,j),erij(1))
3379 C Compute radial contributions to the gradient
3397 C Add the contributions coming from er
3400 agg(k,1)=agg(k,1)+fac3*(uryg(k,1)*vry+vryg(k,1)*ury)
3401 agg(k,2)=agg(k,2)+fac3*(uryg(k,1)*vrz+vrzg(k,1)*ury)
3402 agg(k,3)=agg(k,3)+fac3*(urzg(k,1)*vry+vryg(k,1)*urz)
3403 agg(k,4)=agg(k,4)+fac3*(urzg(k,1)*vrz+vrzg(k,1)*urz)
3406 C Derivatives in DC(i)
3407 cgrad ghalf1=0.5d0*agg(k,1)
3408 cgrad ghalf2=0.5d0*agg(k,2)
3409 cgrad ghalf3=0.5d0*agg(k,3)
3410 cgrad ghalf4=0.5d0*agg(k,4)
3411 aggi(k,1)=fac*(scalar(uygrad(1,k,1,i),uy(1,j))
3412 & -3.0d0*uryg(k,2)*vry)!+ghalf1
3413 aggi(k,2)=fac*(scalar(uygrad(1,k,1,i),uz(1,j))
3414 & -3.0d0*uryg(k,2)*vrz)!+ghalf2
3415 aggi(k,3)=fac*(scalar(uzgrad(1,k,1,i),uy(1,j))
3416 & -3.0d0*urzg(k,2)*vry)!+ghalf3
3417 aggi(k,4)=fac*(scalar(uzgrad(1,k,1,i),uz(1,j))
3418 & -3.0d0*urzg(k,2)*vrz)!+ghalf4
3419 C Derivatives in DC(i+1)
3420 aggi1(k,1)=fac*(scalar(uygrad(1,k,2,i),uy(1,j))
3421 & -3.0d0*uryg(k,3)*vry)!+agg(k,1)
3422 aggi1(k,2)=fac*(scalar(uygrad(1,k,2,i),uz(1,j))
3423 & -3.0d0*uryg(k,3)*vrz)!+agg(k,2)
3424 aggi1(k,3)=fac*(scalar(uzgrad(1,k,2,i),uy(1,j))
3425 & -3.0d0*urzg(k,3)*vry)!+agg(k,3)
3426 aggi1(k,4)=fac*(scalar(uzgrad(1,k,2,i),uz(1,j))
3427 & -3.0d0*urzg(k,3)*vrz)!+agg(k,4)
3428 C Derivatives in DC(j)
3429 aggj(k,1)=fac*(scalar(uygrad(1,k,1,j),uy(1,i))
3430 & -3.0d0*vryg(k,2)*ury)!+ghalf1
3431 aggj(k,2)=fac*(scalar(uzgrad(1,k,1,j),uy(1,i))
3432 & -3.0d0*vrzg(k,2)*ury)!+ghalf2
3433 aggj(k,3)=fac*(scalar(uygrad(1,k,1,j),uz(1,i))
3434 & -3.0d0*vryg(k,2)*urz)!+ghalf3
3435 aggj(k,4)=fac*(scalar(uzgrad(1,k,1,j),uz(1,i))
3436 & -3.0d0*vrzg(k,2)*urz)!+ghalf4
3437 C Derivatives in DC(j+1) or DC(nres-1)
3438 aggj1(k,1)=fac*(scalar(uygrad(1,k,2,j),uy(1,i))
3439 & -3.0d0*vryg(k,3)*ury)
3440 aggj1(k,2)=fac*(scalar(uzgrad(1,k,2,j),uy(1,i))
3441 & -3.0d0*vrzg(k,3)*ury)
3442 aggj1(k,3)=fac*(scalar(uygrad(1,k,2,j),uz(1,i))
3443 & -3.0d0*vryg(k,3)*urz)
3444 aggj1(k,4)=fac*(scalar(uzgrad(1,k,2,j),uz(1,i))
3445 & -3.0d0*vrzg(k,3)*urz)
3446 cgrad if (j.eq.nres-1 .and. i.lt.j-2) then
3448 cgrad aggj1(k,l)=aggj1(k,l)+agg(k,l)
3461 aggi(k,l)=-aggi(k,l)
3462 aggi1(k,l)=-aggi1(k,l)
3463 aggj(k,l)=-aggj(k,l)
3464 aggj1(k,l)=-aggj1(k,l)
3467 if (j.lt.nres-1) then
3473 aggi(k,l)=-aggi(k,l)
3474 aggi1(k,l)=-aggi1(k,l)
3475 aggj(k,l)=-aggj(k,l)
3476 aggj1(k,l)=-aggj1(k,l)
3487 aggi(k,l)=-aggi(k,l)
3488 aggi1(k,l)=-aggi1(k,l)
3489 aggj(k,l)=-aggj(k,l)
3490 aggj1(k,l)=-aggj1(k,l)
3495 IF (wel_loc.gt.0.0d0) THEN
3496 C Contribution to the local-electrostatic energy coming from the i-j pair
3497 eel_loc_ij=a22*muij(1)+a23*muij(2)+a32*muij(3)
3499 cd write (iout,*) 'i',i,' j',j,' eel_loc_ij',eel_loc_ij
3501 if (energy_dec) write (iout,'(a6,2i5,0pf7.3)')
3502 & 'eelloc',i,j,eel_loc_ij
3504 eel_loc=eel_loc+eel_loc_ij
3505 C Partial derivatives in virtual-bond dihedral angles gamma
3507 & gel_loc_loc(i-1)=gel_loc_loc(i-1)+
3508 & a22*muder(1,i)*mu(1,j)+a23*muder(1,i)*mu(2,j)
3509 & +a32*muder(2,i)*mu(1,j)+a33*muder(2,i)*mu(2,j)
3510 gel_loc_loc(j-1)=gel_loc_loc(j-1)+
3511 & a22*mu(1,i)*muder(1,j)+a23*mu(1,i)*muder(2,j)
3512 & +a32*mu(2,i)*muder(1,j)+a33*mu(2,i)*muder(2,j)
3513 C Derivatives of eello in DC(i+1) thru DC(j-1) or DC(nres-2)
3515 ggg(l)=agg(l,1)*muij(1)+
3516 & agg(l,2)*muij(2)+agg(l,3)*muij(3)+agg(l,4)*muij(4)
3517 gel_loc_long(l,j)=gel_loc_long(l,j)+ggg(l)
3518 gel_loc_long(l,i)=gel_loc_long(l,i)-ggg(l)
3519 cgrad ghalf=0.5d0*ggg(l)
3520 cgrad gel_loc(l,i)=gel_loc(l,i)+ghalf
3521 cgrad gel_loc(l,j)=gel_loc(l,j)+ghalf
3525 cgrad gel_loc(l,k)=gel_loc(l,k)+ggg(l)
3528 C Remaining derivatives of eello
3530 gel_loc(l,i)=gel_loc(l,i)+aggi(l,1)*muij(1)+
3531 & aggi(l,2)*muij(2)+aggi(l,3)*muij(3)+aggi(l,4)*muij(4)
3532 gel_loc(l,i+1)=gel_loc(l,i+1)+aggi1(l,1)*muij(1)+
3533 & aggi1(l,2)*muij(2)+aggi1(l,3)*muij(3)+aggi1(l,4)*muij(4)
3534 gel_loc(l,j)=gel_loc(l,j)+aggj(l,1)*muij(1)+
3535 & aggj(l,2)*muij(2)+aggj(l,3)*muij(3)+aggj(l,4)*muij(4)
3536 gel_loc(l,j1)=gel_loc(l,j1)+aggj1(l,1)*muij(1)+
3537 & aggj1(l,2)*muij(2)+aggj1(l,3)*muij(3)+aggj1(l,4)*muij(4)
3540 C Change 12/26/95 to calculate four-body contributions to H-bonding energy
3541 c if (j.gt.i+1 .and. num_conti.le.maxconts) then
3542 if (wcorr+wcorr4+wcorr5+wcorr6.gt.0.0d0
3543 & .and. num_conti.le.maxconts) then
3544 c write (iout,*) i,j," entered corr"
3546 C Calculate the contact function. The ith column of the array JCONT will
3547 C contain the numbers of atoms that make contacts with the atom I (of numbers
3548 C greater than I). The arrays FACONT and GACONT will contain the values of
3549 C the contact function and its derivative.
3550 c r0ij=1.02D0*rpp(iteli,itelj)
3551 c r0ij=1.11D0*rpp(iteli,itelj)
3552 r0ij=2.20D0*rpp(iteli,itelj)
3553 c r0ij=1.55D0*rpp(iteli,itelj)
3554 call gcont(rij,r0ij,1.0D0,0.2d0*r0ij,fcont,fprimcont)
3555 if (fcont.gt.0.0D0) then
3556 num_conti=num_conti+1
3557 if (num_conti.gt.maxconts) then
3558 write (iout,*) 'WARNING - max. # of contacts exceeded;',
3559 & ' will skip next contacts for this conf.'
3561 jcont_hb(num_conti,i)=j
3562 cd write (iout,*) "i",i," j",j," num_conti",num_conti,
3563 cd & " jcont_hb",jcont_hb(num_conti,i)
3564 IF (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or.
3565 & wcorr6.gt.0.0d0 .or. wturn6.gt.0.0d0) THEN
3566 C 9/30/99 (AL) - store components necessary to evaluate higher-order loc-el
3568 d_cont(num_conti,i)=rij
3569 cd write (2,'(3e15.5)') rij,r0ij+0.2d0*r0ij,rij
3570 C --- Electrostatic-interaction matrix ---
3571 a_chuj(1,1,num_conti,i)=a22
3572 a_chuj(1,2,num_conti,i)=a23
3573 a_chuj(2,1,num_conti,i)=a32
3574 a_chuj(2,2,num_conti,i)=a33
3575 C --- Gradient of rij
3577 grij_hb_cont(kkk,num_conti,i)=erij(kkk)
3584 a_chuj_der(k,l,m,1,num_conti,i)=agg(m,kkll)
3585 a_chuj_der(k,l,m,2,num_conti,i)=aggi(m,kkll)
3586 a_chuj_der(k,l,m,3,num_conti,i)=aggi1(m,kkll)
3587 a_chuj_der(k,l,m,4,num_conti,i)=aggj(m,kkll)
3588 a_chuj_der(k,l,m,5,num_conti,i)=aggj1(m,kkll)
3593 IF (wcorr4.eq.0.0d0 .and. wcorr.gt.0.0d0) THEN
3594 C Calculate contact energies
3596 wij=cosa-3.0D0*cosb*cosg
3599 c fac3=dsqrt(-ael6i)/r0ij**3
3600 fac3=dsqrt(-ael6i)*r3ij
3601 c ees0pij=dsqrt(4.0D0+cosa4+wij*wij-3.0D0*cosbg1*cosbg1)
3602 ees0tmp=4.0D0+cosa4+wij*wij-3.0D0*cosbg1*cosbg1
3603 if (ees0tmp.gt.0) then
3604 ees0pij=dsqrt(ees0tmp)
3608 c ees0mij=dsqrt(4.0D0-cosa4+wij*wij-3.0D0*cosbg2*cosbg2)
3609 ees0tmp=4.0D0-cosa4+wij*wij-3.0D0*cosbg2*cosbg2
3610 if (ees0tmp.gt.0) then
3611 ees0mij=dsqrt(ees0tmp)
3616 ees0p(num_conti,i)=0.5D0*fac3*(ees0pij+ees0mij)
3617 ees0m(num_conti,i)=0.5D0*fac3*(ees0pij-ees0mij)
3618 C Diagnostics. Comment out or remove after debugging!
3619 c ees0p(num_conti,i)=0.5D0*fac3*ees0pij
3620 c ees0m(num_conti,i)=0.5D0*fac3*ees0mij
3621 c ees0m(num_conti,i)=0.0D0
3623 c write (iout,*) 'i=',i,' j=',j,' rij=',rij,' r0ij=',r0ij,
3624 c & ' ees0ij=',ees0p(num_conti,i),ees0m(num_conti,i),' fcont=',fcont
3625 C Angular derivatives of the contact function
3626 ees0pij1=fac3/ees0pij
3627 ees0mij1=fac3/ees0mij
3628 fac3p=-3.0D0*fac3*rrmij
3629 ees0pijp=0.5D0*fac3p*(ees0pij+ees0mij)
3630 ees0mijp=0.5D0*fac3p*(ees0pij-ees0mij)
3632 ecosa1= ees0pij1*( 1.0D0+0.5D0*wij)
3633 ecosb1=-1.5D0*ees0pij1*(wij*cosg+cosbg1)
3634 ecosg1=-1.5D0*ees0pij1*(wij*cosb+cosbg1)
3635 ecosa2= ees0mij1*(-1.0D0+0.5D0*wij)
3636 ecosb2=-1.5D0*ees0mij1*(wij*cosg+cosbg2)
3637 ecosg2=-1.5D0*ees0mij1*(wij*cosb-cosbg2)
3638 ecosap=ecosa1+ecosa2
3639 ecosbp=ecosb1+ecosb2
3640 ecosgp=ecosg1+ecosg2
3641 ecosam=ecosa1-ecosa2
3642 ecosbm=ecosb1-ecosb2
3643 ecosgm=ecosg1-ecosg2
3652 facont_hb(num_conti,i)=fcont
3653 fprimcont=fprimcont/rij
3654 cd facont_hb(num_conti,i)=1.0D0
3655 C Following line is for diagnostics.
3658 dcosb(k)=rmij*(dc_norm(k,i)-erij(k)*cosb)
3659 dcosg(k)=rmij*(dc_norm(k,j)-erij(k)*cosg)
3662 gggp(k)=ecosbp*dcosb(k)+ecosgp*dcosg(k)
3663 gggm(k)=ecosbm*dcosb(k)+ecosgm*dcosg(k)
3665 gggp(1)=gggp(1)+ees0pijp*xj
3666 gggp(2)=gggp(2)+ees0pijp*yj
3667 gggp(3)=gggp(3)+ees0pijp*zj
3668 gggm(1)=gggm(1)+ees0mijp*xj
3669 gggm(2)=gggm(2)+ees0mijp*yj
3670 gggm(3)=gggm(3)+ees0mijp*zj
3671 C Derivatives due to the contact function
3672 gacont_hbr(1,num_conti,i)=fprimcont*xj
3673 gacont_hbr(2,num_conti,i)=fprimcont*yj
3674 gacont_hbr(3,num_conti,i)=fprimcont*zj
3677 c 10/24/08 cgrad and ! comments indicate the parts of the code removed
3678 c following the change of gradient-summation algorithm.
3680 cgrad ghalfp=0.5D0*gggp(k)
3681 cgrad ghalfm=0.5D0*gggm(k)
3682 gacontp_hb1(k,num_conti,i)=!ghalfp
3683 & +(ecosap*(dc_norm(k,j)-cosa*dc_norm(k,i))
3684 & + ecosbp*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1)
3685 gacontp_hb2(k,num_conti,i)=!ghalfp
3686 & +(ecosap*(dc_norm(k,i)-cosa*dc_norm(k,j))
3687 & + ecosgp*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1)
3688 gacontp_hb3(k,num_conti,i)=gggp(k)
3689 gacontm_hb1(k,num_conti,i)=!ghalfm
3690 & +(ecosam*(dc_norm(k,j)-cosa*dc_norm(k,i))
3691 & + ecosbm*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1)
3692 gacontm_hb2(k,num_conti,i)=!ghalfm
3693 & +(ecosam*(dc_norm(k,i)-cosa*dc_norm(k,j))
3694 & + ecosgm*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1)
3695 gacontm_hb3(k,num_conti,i)=gggm(k)
3697 C Diagnostics. Comment out or remove after debugging!
3699 cdiag gacontp_hb1(k,num_conti,i)=0.0D0
3700 cdiag gacontp_hb2(k,num_conti,i)=0.0D0
3701 cdiag gacontp_hb3(k,num_conti,i)=0.0D0
3702 cdiag gacontm_hb1(k,num_conti,i)=0.0D0
3703 cdiag gacontm_hb2(k,num_conti,i)=0.0D0
3704 cdiag gacontm_hb3(k,num_conti,i)=0.0D0
3707 endif ! num_conti.le.maxconts
3710 if (wturn3.gt.0.0d0 .or. wturn4.gt.0.0d0) then
3713 ghalf=0.5d0*agg(l,k)
3714 aggi(l,k)=aggi(l,k)+ghalf
3715 aggi1(l,k)=aggi1(l,k)+agg(l,k)
3716 aggj(l,k)=aggj(l,k)+ghalf
3719 if (j.eq.nres-1 .and. i.lt.j-2) then
3722 aggj1(l,k)=aggj1(l,k)+agg(l,k)
3727 c t_eelecij=t_eelecij+MPI_Wtime()-time00
3730 C-----------------------------------------------------------------------------
3731 subroutine eturn3(i,eello_turn3)
3732 C Third- and fourth-order contributions from turns
3733 implicit real*8 (a-h,o-z)
3734 include 'DIMENSIONS'
3735 include 'COMMON.IOUNITS'
3736 include 'COMMON.GEO'
3737 include 'COMMON.VAR'
3738 include 'COMMON.LOCAL'
3739 include 'COMMON.CHAIN'
3740 include 'COMMON.DERIV'
3741 include 'COMMON.INTERACT'
3742 include 'COMMON.CONTACTS'
3743 include 'COMMON.TORSION'
3744 include 'COMMON.VECTORS'
3745 include 'COMMON.FFIELD'
3746 include 'COMMON.CONTROL'
3748 double precision auxmat(2,2),auxmat1(2,2),auxmat2(2,2),pizda(2,2),
3749 & e1t(2,2),e2t(2,2),e3t(2,2),e1tder(2,2),e2tder(2,2),e3tder(2,2),
3750 & e1a(2,2),ae3(2,2),ae3e2(2,2),auxvec(2),auxvec1(2)
3751 double precision agg(3,4),aggi(3,4),aggi1(3,4),
3752 & aggj(3,4),aggj1(3,4),a_temp(2,2),auxmat3(2,2)
3753 common /locel/ a_temp,agg,aggi,aggi1,aggj,aggj1,a22,a23,a32,a33,
3754 & dxi,dyi,dzi,dx_normi,dy_normi,dz_normi,xmedi,ymedi,zmedi,
3757 c write (iout,*) "eturn3",i,j,j1,j2
3762 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
3764 C Third-order contributions
3771 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
3772 cd call checkint_turn3(i,a_temp,eello_turn3_num)
3773 call matmat2(EUg(1,1,i+1),EUg(1,1,i+2),auxmat(1,1))
3774 call transpose2(auxmat(1,1),auxmat1(1,1))
3775 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
3776 eello_turn3=eello_turn3+0.5d0*(pizda(1,1)+pizda(2,2))
3777 if (energy_dec) write (iout,'(a6,2i5,0pf7.3)')
3778 & 'eturn3',i,j,0.5d0*(pizda(1,1)+pizda(2,2))
3779 cd write (2,*) 'i,',i,' j',j,'eello_turn3',
3780 cd & 0.5d0*(pizda(1,1)+pizda(2,2)),
3781 cd & ' eello_turn3_num',4*eello_turn3_num
3782 C Derivatives in gamma(i)
3783 call matmat2(EUgder(1,1,i+1),EUg(1,1,i+2),auxmat2(1,1))
3784 call transpose2(auxmat2(1,1),auxmat3(1,1))
3785 call matmat2(a_temp(1,1),auxmat3(1,1),pizda(1,1))
3786 gel_loc_turn3(i)=gel_loc_turn3(i)+0.5d0*(pizda(1,1)+pizda(2,2))
3787 C Derivatives in gamma(i+1)
3788 call matmat2(EUg(1,1,i+1),EUgder(1,1,i+2),auxmat2(1,1))
3789 call transpose2(auxmat2(1,1),auxmat3(1,1))
3790 call matmat2(a_temp(1,1),auxmat3(1,1),pizda(1,1))
3791 gel_loc_turn3(i+1)=gel_loc_turn3(i+1)
3792 & +0.5d0*(pizda(1,1)+pizda(2,2))
3793 C Cartesian derivatives
3795 c ghalf1=0.5d0*agg(l,1)
3796 c ghalf2=0.5d0*agg(l,2)
3797 c ghalf3=0.5d0*agg(l,3)
3798 c ghalf4=0.5d0*agg(l,4)
3799 a_temp(1,1)=aggi(l,1)!+ghalf1
3800 a_temp(1,2)=aggi(l,2)!+ghalf2
3801 a_temp(2,1)=aggi(l,3)!+ghalf3
3802 a_temp(2,2)=aggi(l,4)!+ghalf4
3803 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
3804 gcorr3_turn(l,i)=gcorr3_turn(l,i)
3805 & +0.5d0*(pizda(1,1)+pizda(2,2))
3806 a_temp(1,1)=aggi1(l,1)!+agg(l,1)
3807 a_temp(1,2)=aggi1(l,2)!+agg(l,2)
3808 a_temp(2,1)=aggi1(l,3)!+agg(l,3)
3809 a_temp(2,2)=aggi1(l,4)!+agg(l,4)
3810 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
3811 gcorr3_turn(l,i+1)=gcorr3_turn(l,i+1)
3812 & +0.5d0*(pizda(1,1)+pizda(2,2))
3813 a_temp(1,1)=aggj(l,1)!+ghalf1
3814 a_temp(1,2)=aggj(l,2)!+ghalf2
3815 a_temp(2,1)=aggj(l,3)!+ghalf3
3816 a_temp(2,2)=aggj(l,4)!+ghalf4
3817 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
3818 gcorr3_turn(l,j)=gcorr3_turn(l,j)
3819 & +0.5d0*(pizda(1,1)+pizda(2,2))
3820 a_temp(1,1)=aggj1(l,1)
3821 a_temp(1,2)=aggj1(l,2)
3822 a_temp(2,1)=aggj1(l,3)
3823 a_temp(2,2)=aggj1(l,4)
3824 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
3825 gcorr3_turn(l,j1)=gcorr3_turn(l,j1)
3826 & +0.5d0*(pizda(1,1)+pizda(2,2))
3830 C-------------------------------------------------------------------------------
3831 subroutine eturn4(i,eello_turn4)
3832 C Third- and fourth-order contributions from turns
3833 implicit real*8 (a-h,o-z)
3834 include 'DIMENSIONS'
3835 include 'COMMON.IOUNITS'
3836 include 'COMMON.GEO'
3837 include 'COMMON.VAR'
3838 include 'COMMON.LOCAL'
3839 include 'COMMON.CHAIN'
3840 include 'COMMON.DERIV'
3841 include 'COMMON.INTERACT'
3842 include 'COMMON.CONTACTS'
3843 include 'COMMON.TORSION'
3844 include 'COMMON.VECTORS'
3845 include 'COMMON.FFIELD'
3846 include 'COMMON.CONTROL'
3848 double precision auxmat(2,2),auxmat1(2,2),auxmat2(2,2),pizda(2,2),
3849 & e1t(2,2),e2t(2,2),e3t(2,2),e1tder(2,2),e2tder(2,2),e3tder(2,2),
3850 & e1a(2,2),ae3(2,2),ae3e2(2,2),auxvec(2),auxvec1(2)
3851 double precision agg(3,4),aggi(3,4),aggi1(3,4),
3852 & aggj(3,4),aggj1(3,4),a_temp(2,2),auxmat3(2,2)
3853 common /locel/ a_temp,agg,aggi,aggi1,aggj,aggj1,a22,a23,a32,a33,
3854 & dxi,dyi,dzi,dx_normi,dy_normi,dz_normi,xmedi,ymedi,zmedi,
3857 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
3859 C Fourth-order contributions
3867 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
3868 cd call checkint_turn4(i,a_temp,eello_turn4_num)
3869 c write (iout,*) "eturn4 i",i," j",j," j1",j1," j2",j2
3874 iti1=itortyp(itype(i+1))
3875 iti2=itortyp(itype(i+2))
3876 iti3=itortyp(itype(i+3))
3877 c write(iout,*) "iti1",iti1," iti2",iti2," iti3",iti3
3878 call transpose2(EUg(1,1,i+1),e1t(1,1))
3879 call transpose2(Eug(1,1,i+2),e2t(1,1))
3880 call transpose2(Eug(1,1,i+3),e3t(1,1))
3881 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
3882 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
3883 s1=scalar2(b1(1,iti2),auxvec(1))
3884 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
3885 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
3886 s2=scalar2(b1(1,iti1),auxvec(1))
3887 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
3888 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
3889 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3890 eello_turn4=eello_turn4-(s1+s2+s3)
3891 if (energy_dec) write (iout,'(a6,2i5,0pf7.3)')
3892 & 'eturn4',i,j,-(s1+s2+s3)
3893 cd write (2,*) 'i,',i,' j',j,'eello_turn4',-(s1+s2+s3),
3894 cd & ' eello_turn4_num',8*eello_turn4_num
3895 C Derivatives in gamma(i)
3896 call transpose2(EUgder(1,1,i+1),e1tder(1,1))
3897 call matmat2(e1tder(1,1),a_temp(1,1),auxmat(1,1))
3898 call matvec2(auxmat(1,1),Ub2(1,i+3),auxvec(1))
3899 s1=scalar2(b1(1,iti2),auxvec(1))
3900 call matmat2(ae3e2(1,1),e1tder(1,1),pizda(1,1))
3901 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3902 gel_loc_turn4(i)=gel_loc_turn4(i)-(s1+s3)
3903 C Derivatives in gamma(i+1)
3904 call transpose2(EUgder(1,1,i+2),e2tder(1,1))
3905 call matvec2(ae3(1,1),Ub2der(1,i+2),auxvec(1))
3906 s2=scalar2(b1(1,iti1),auxvec(1))
3907 call matmat2(ae3(1,1),e2tder(1,1),auxmat(1,1))
3908 call matmat2(auxmat(1,1),e1t(1,1),pizda(1,1))
3909 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3910 gel_loc_turn4(i+1)=gel_loc_turn4(i+1)-(s2+s3)
3911 C Derivatives in gamma(i+2)
3912 call transpose2(EUgder(1,1,i+3),e3tder(1,1))
3913 call matvec2(e1a(1,1),Ub2der(1,i+3),auxvec(1))
3914 s1=scalar2(b1(1,iti2),auxvec(1))
3915 call matmat2(a_temp(1,1),e3tder(1,1),auxmat(1,1))
3916 call matvec2(auxmat(1,1),Ub2(1,i+2),auxvec(1))
3917 s2=scalar2(b1(1,iti1),auxvec(1))
3918 call matmat2(auxmat(1,1),e2t(1,1),auxmat3(1,1))
3919 call matmat2(auxmat3(1,1),e1t(1,1),pizda(1,1))
3920 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3921 gel_loc_turn4(i+2)=gel_loc_turn4(i+2)-(s1+s2+s3)
3922 C Cartesian derivatives
3923 C Derivatives of this turn contributions in DC(i+2)
3924 if (j.lt.nres-1) then
3926 a_temp(1,1)=agg(l,1)
3927 a_temp(1,2)=agg(l,2)
3928 a_temp(2,1)=agg(l,3)
3929 a_temp(2,2)=agg(l,4)
3930 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
3931 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
3932 s1=scalar2(b1(1,iti2),auxvec(1))
3933 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
3934 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
3935 s2=scalar2(b1(1,iti1),auxvec(1))
3936 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
3937 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
3938 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3940 gcorr4_turn(l,i+2)=gcorr4_turn(l,i+2)-(s1+s2+s3)
3943 C Remaining derivatives of this turn contribution
3945 a_temp(1,1)=aggi(l,1)
3946 a_temp(1,2)=aggi(l,2)
3947 a_temp(2,1)=aggi(l,3)
3948 a_temp(2,2)=aggi(l,4)
3949 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
3950 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
3951 s1=scalar2(b1(1,iti2),auxvec(1))
3952 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
3953 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
3954 s2=scalar2(b1(1,iti1),auxvec(1))
3955 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
3956 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
3957 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3958 gcorr4_turn(l,i)=gcorr4_turn(l,i)-(s1+s2+s3)
3959 a_temp(1,1)=aggi1(l,1)
3960 a_temp(1,2)=aggi1(l,2)
3961 a_temp(2,1)=aggi1(l,3)
3962 a_temp(2,2)=aggi1(l,4)
3963 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
3964 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
3965 s1=scalar2(b1(1,iti2),auxvec(1))
3966 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
3967 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
3968 s2=scalar2(b1(1,iti1),auxvec(1))
3969 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
3970 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
3971 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3972 gcorr4_turn(l,i+1)=gcorr4_turn(l,i+1)-(s1+s2+s3)
3973 a_temp(1,1)=aggj(l,1)
3974 a_temp(1,2)=aggj(l,2)
3975 a_temp(2,1)=aggj(l,3)
3976 a_temp(2,2)=aggj(l,4)
3977 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
3978 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
3979 s1=scalar2(b1(1,iti2),auxvec(1))
3980 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
3981 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
3982 s2=scalar2(b1(1,iti1),auxvec(1))
3983 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
3984 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
3985 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3986 gcorr4_turn(l,j)=gcorr4_turn(l,j)-(s1+s2+s3)
3987 a_temp(1,1)=aggj1(l,1)
3988 a_temp(1,2)=aggj1(l,2)
3989 a_temp(2,1)=aggj1(l,3)
3990 a_temp(2,2)=aggj1(l,4)
3991 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
3992 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
3993 s1=scalar2(b1(1,iti2),auxvec(1))
3994 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
3995 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
3996 s2=scalar2(b1(1,iti1),auxvec(1))
3997 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
3998 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
3999 s3=0.5d0*(pizda(1,1)+pizda(2,2))
4000 c write (iout,*) "s1",s1," s2",s2," s3",s3," s1+s2+s3",s1+s2+s3
4001 gcorr4_turn(l,j1)=gcorr4_turn(l,j1)-(s1+s2+s3)
4005 C-----------------------------------------------------------------------------
4006 subroutine vecpr(u,v,w)
4007 implicit real*8(a-h,o-z)
4008 dimension u(3),v(3),w(3)
4009 w(1)=u(2)*v(3)-u(3)*v(2)
4010 w(2)=-u(1)*v(3)+u(3)*v(1)
4011 w(3)=u(1)*v(2)-u(2)*v(1)
4014 C-----------------------------------------------------------------------------
4015 subroutine unormderiv(u,ugrad,unorm,ungrad)
4016 C This subroutine computes the derivatives of a normalized vector u, given
4017 C the derivatives computed without normalization conditions, ugrad. Returns
4020 double precision u(3),ugrad(3,3),unorm,ungrad(3,3)
4021 double precision vec(3)
4022 double precision scalar
4024 c write (2,*) 'ugrad',ugrad
4027 vec(i)=scalar(ugrad(1,i),u(1))
4029 c write (2,*) 'vec',vec
4032 ungrad(j,i)=(ugrad(j,i)-u(j)*vec(i))*unorm
4035 c write (2,*) 'ungrad',ungrad
4038 C-----------------------------------------------------------------------------
4039 subroutine escp_soft_sphere(evdw2,evdw2_14)
4041 C This subroutine calculates the excluded-volume interaction energy between
4042 C peptide-group centers and side chains and its gradient in virtual-bond and
4043 C side-chain vectors.
4045 implicit real*8 (a-h,o-z)
4046 include 'DIMENSIONS'
4047 include 'COMMON.GEO'
4048 include 'COMMON.VAR'
4049 include 'COMMON.LOCAL'
4050 include 'COMMON.CHAIN'
4051 include 'COMMON.DERIV'
4052 include 'COMMON.INTERACT'
4053 include 'COMMON.FFIELD'
4054 include 'COMMON.IOUNITS'
4055 include 'COMMON.CONTROL'
4060 cd print '(a)','Enter ESCP'
4061 cd write (iout,*) 'iatscp_s=',iatscp_s,' iatscp_e=',iatscp_e
4062 do i=iatscp_s,iatscp_e
4064 xi=0.5D0*(c(1,i)+c(1,i+1))
4065 yi=0.5D0*(c(2,i)+c(2,i+1))
4066 zi=0.5D0*(c(3,i)+c(3,i+1))
4068 do iint=1,nscp_gr(i)
4070 do j=iscpstart(i,iint),iscpend(i,iint)
4072 C Uncomment following three lines for SC-p interactions
4076 C Uncomment following three lines for Ca-p interactions
4080 rij=xj*xj+yj*yj+zj*zj
4083 if (rij.lt.r0ijsq) then
4084 evdwij=0.25d0*(rij-r0ijsq)**2
4092 C Calculate contributions to the gradient in the virtual-bond and SC vectors.
4097 cgrad if (j.lt.i) then
4098 cd write (iout,*) 'j<i'
4099 C Uncomment following three lines for SC-p interactions
4101 c gradx_scp(k,j)=gradx_scp(k,j)+ggg(k)
4104 cd write (iout,*) 'j>i'
4106 cgrad ggg(k)=-ggg(k)
4107 C Uncomment following line for SC-p interactions
4108 c gradx_scp(k,j)=gradx_scp(k,j)-ggg(k)
4112 cgrad gvdwc_scp(k,i)=gvdwc_scp(k,i)-0.5D0*ggg(k)
4114 cgrad kstart=min0(i+1,j)
4115 cgrad kend=max0(i-1,j-1)
4116 cd write (iout,*) 'i=',i,' j=',j,' kstart=',kstart,' kend=',kend
4117 cd write (iout,*) ggg(1),ggg(2),ggg(3)
4118 cgrad do k=kstart,kend
4120 cgrad gvdwc_scp(l,k)=gvdwc_scp(l,k)-ggg(l)
4124 gvdwc_scpp(k,i)=gvdwc_scpp(k,i)-ggg(k)
4125 gvdwc_scp(k,j)=gvdwc_scp(k,j)+ggg(k)
4133 C-----------------------------------------------------------------------------
4134 subroutine escp(evdw2,evdw2_14)
4136 C This subroutine calculates the excluded-volume interaction energy between
4137 C peptide-group centers and side chains and its gradient in virtual-bond and
4138 C side-chain vectors.
4140 implicit real*8 (a-h,o-z)
4141 include 'DIMENSIONS'
4142 include 'COMMON.GEO'
4143 include 'COMMON.VAR'
4144 include 'COMMON.LOCAL'
4145 include 'COMMON.CHAIN'
4146 include 'COMMON.DERIV'
4147 include 'COMMON.INTERACT'
4148 include 'COMMON.FFIELD'
4149 include 'COMMON.IOUNITS'
4150 include 'COMMON.CONTROL'
4154 cd print '(a)','Enter ESCP'
4155 cd write (iout,*) 'iatscp_s=',iatscp_s,' iatscp_e=',iatscp_e
4156 do i=iatscp_s,iatscp_e
4158 xi=0.5D0*(c(1,i)+c(1,i+1))
4159 yi=0.5D0*(c(2,i)+c(2,i+1))
4160 zi=0.5D0*(c(3,i)+c(3,i+1))
4162 do iint=1,nscp_gr(i)
4164 do j=iscpstart(i,iint),iscpend(i,iint)
4166 C Uncomment following three lines for SC-p interactions
4170 C Uncomment following three lines for Ca-p interactions
4174 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
4176 e1=fac*fac*aad(itypj,iteli)
4177 e2=fac*bad(itypj,iteli)
4178 if (iabs(j-i) .le. 2) then
4181 evdw2_14=evdw2_14+e1+e2
4185 if (energy_dec) write (iout,'(a6,2i5,0pf7.3)')
4186 & 'evdw2',i,j,evdwij
4188 C Calculate contributions to the gradient in the virtual-bond and SC vectors.
4190 fac=-(evdwij+e1)*rrij
4194 cgrad if (j.lt.i) then
4195 cd write (iout,*) 'j<i'
4196 C Uncomment following three lines for SC-p interactions
4198 c gradx_scp(k,j)=gradx_scp(k,j)+ggg(k)
4201 cd write (iout,*) 'j>i'
4203 cgrad ggg(k)=-ggg(k)
4204 C Uncomment following line for SC-p interactions
4205 ccgrad gradx_scp(k,j)=gradx_scp(k,j)-ggg(k)
4206 c gradx_scp(k,j)=gradx_scp(k,j)+ggg(k)
4210 cgrad gvdwc_scp(k,i)=gvdwc_scp(k,i)-0.5D0*ggg(k)
4212 cgrad kstart=min0(i+1,j)
4213 cgrad kend=max0(i-1,j-1)
4214 cd write (iout,*) 'i=',i,' j=',j,' kstart=',kstart,' kend=',kend
4215 cd write (iout,*) ggg(1),ggg(2),ggg(3)
4216 cgrad do k=kstart,kend
4218 cgrad gvdwc_scp(l,k)=gvdwc_scp(l,k)-ggg(l)
4222 gvdwc_scpp(k,i)=gvdwc_scpp(k,i)-ggg(k)
4223 gvdwc_scp(k,j)=gvdwc_scp(k,j)+ggg(k)
4231 gvdwc_scp(j,i)=expon*gvdwc_scp(j,i)
4232 gvdwc_scpp(j,i)=expon*gvdwc_scpp(j,i)
4233 gradx_scp(j,i)=expon*gradx_scp(j,i)
4236 C******************************************************************************
4240 C To save time the factor EXPON has been extracted from ALL components
4241 C of GVDWC and GRADX. Remember to multiply them by this factor before further
4244 C******************************************************************************
4247 C--------------------------------------------------------------------------
4248 subroutine edis(ehpb)
4250 C Evaluate bridge-strain energy and its gradient in virtual-bond and SC vectors.
4252 implicit real*8 (a-h,o-z)
4253 include 'DIMENSIONS'
4254 include 'COMMON.SBRIDGE'
4255 include 'COMMON.CHAIN'
4256 include 'COMMON.DERIV'
4257 include 'COMMON.VAR'
4258 include 'COMMON.INTERACT'
4259 include 'COMMON.IOUNITS'
4262 cd write(iout,*)'edis: nhpb=',nhpb,' fbr=',fbr
4263 cd write(iout,*)'link_start=',link_start,' link_end=',link_end
4264 if (link_end.eq.0) return
4265 do i=link_start,link_end
4266 C If ihpb(i) and jhpb(i) > NRES, this is a SC-SC distance, otherwise a
4267 C CA-CA distance used in regularization of structure.
4270 C iii and jjj point to the residues for which the distance is assigned.
4271 if (ii.gt.nres) then
4278 c write (iout,*) "i",i," ii",ii," iii",iii," jj",jj," jjj",jjj,
4279 c & dhpb(i),dhpb1(i),forcon(i)
4280 C 24/11/03 AL: SS bridges handled separately because of introducing a specific
4281 C distance and angle dependent SS bond potential.
4282 cmc if (ii.gt.nres .and. itype(iii).eq.1 .and. itype(jjj).eq.1) then
4283 C 18/07/06 MC: Use the convention that the first nss pairs are SS bonds
4284 if (.not.dyn_ss .and. i.le.nss) then
4285 C 15/02/13 CC dynamic SSbond - additional check
4287 & .and. itype(iii).eq.1 .and. itype(jjj).eq.1) then
4288 call ssbond_ene(iii,jjj,eij)
4291 cd write (iout,*) "eij",eij
4292 else if (ii.gt.nres .and. jj.gt.nres) then
4293 c Restraints from contact prediction
4295 if (dhpb1(i).gt.0.0d0) then
4296 ehpb=ehpb+2*forcon(i)*gnmr1(dd,dhpb(i),dhpb1(i))
4297 fac=forcon(i)*gnmr1prim(dd,dhpb(i),dhpb1(i))/dd
4298 c write (iout,*) "beta nmr",
4299 c & dd,2*forcon(i)*gnmr1(dd,dhpb(i),dhpb1(i))
4303 C Get the force constant corresponding to this distance.
4305 C Calculate the contribution to energy.
4306 ehpb=ehpb+waga*rdis*rdis
4307 c write (iout,*) "beta reg",dd,waga*rdis*rdis
4309 C Evaluate gradient.
4314 ggg(j)=fac*(c(j,jj)-c(j,ii))
4317 ghpbx(j,iii)=ghpbx(j,iii)-ggg(j)
4318 ghpbx(j,jjj)=ghpbx(j,jjj)+ggg(j)
4321 ghpbc(k,jjj)=ghpbc(k,jjj)+ggg(k)
4322 ghpbc(k,iii)=ghpbc(k,iii)-ggg(k)
4325 C Calculate the distance between the two points and its difference from the
4328 if (dhpb1(i).gt.0.0d0) then
4329 ehpb=ehpb+2*forcon(i)*gnmr1(dd,dhpb(i),dhpb1(i))
4330 fac=forcon(i)*gnmr1prim(dd,dhpb(i),dhpb1(i))/dd
4331 c write (iout,*) "alph nmr",
4332 c & dd,2*forcon(i)*gnmr1(dd,dhpb(i),dhpb1(i))
4335 C Get the force constant corresponding to this distance.
4337 C Calculate the contribution to energy.
4338 ehpb=ehpb+waga*rdis*rdis
4339 c write (iout,*) "alpha reg",dd,waga*rdis*rdis
4341 C Evaluate gradient.
4345 cd print *,'i=',i,' ii=',ii,' jj=',jj,' dhpb=',dhpb(i),' dd=',dd,
4346 cd & ' waga=',waga,' fac=',fac
4348 ggg(j)=fac*(c(j,jj)-c(j,ii))
4350 cd print '(i3,3(1pe14.5))',i,(ggg(j),j=1,3)
4351 C If this is a SC-SC distance, we need to calculate the contributions to the
4352 C Cartesian gradient in the SC vectors (ghpbx).
4355 ghpbx(j,iii)=ghpbx(j,iii)-ggg(j)
4356 ghpbx(j,jjj)=ghpbx(j,jjj)+ggg(j)
4359 cgrad do j=iii,jjj-1
4361 cgrad ghpbc(k,j)=ghpbc(k,j)+ggg(k)
4365 ghpbc(k,jjj)=ghpbc(k,jjj)+ggg(k)
4366 ghpbc(k,iii)=ghpbc(k,iii)-ggg(k)
4373 C--------------------------------------------------------------------------
4374 subroutine ssbond_ene(i,j,eij)
4376 C Calculate the distance and angle dependent SS-bond potential energy
4377 C using a free-energy function derived based on RHF/6-31G** ab initio
4378 C calculations of diethyl disulfide.
4380 C A. Liwo and U. Kozlowska, 11/24/03
4382 implicit real*8 (a-h,o-z)
4383 include 'DIMENSIONS'
4384 include 'COMMON.SBRIDGE'
4385 include 'COMMON.CHAIN'
4386 include 'COMMON.DERIV'
4387 include 'COMMON.LOCAL'
4388 include 'COMMON.INTERACT'
4389 include 'COMMON.VAR'
4390 include 'COMMON.IOUNITS'
4391 double precision erij(3),dcosom1(3),dcosom2(3),gg(3)
4396 dxi=dc_norm(1,nres+i)
4397 dyi=dc_norm(2,nres+i)
4398 dzi=dc_norm(3,nres+i)
4399 c dsci_inv=dsc_inv(itypi)
4400 dsci_inv=vbld_inv(nres+i)
4402 c dscj_inv=dsc_inv(itypj)
4403 dscj_inv=vbld_inv(nres+j)
4407 dxj=dc_norm(1,nres+j)
4408 dyj=dc_norm(2,nres+j)
4409 dzj=dc_norm(3,nres+j)
4410 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
4415 om1=dxi*erij(1)+dyi*erij(2)+dzi*erij(3)
4416 om2=dxj*erij(1)+dyj*erij(2)+dzj*erij(3)
4417 om12=dxi*dxj+dyi*dyj+dzi*dzj
4419 dcosom1(k)=rij*(dc_norm(k,nres+i)-om1*erij(k))
4420 dcosom2(k)=rij*(dc_norm(k,nres+j)-om2*erij(k))
4426 deltat12=om2-om1+2.0d0
4428 eij=akcm*deltad*deltad+akth*(deltat1*deltat1+deltat2*deltat2)
4429 & +akct*deltad*deltat12+ebr
4430 & +v1ss*cosphi+v2ss*cosphi*cosphi+v3ss*cosphi*cosphi*cosphi
4431 c write(iout,*) i,j,"rij",rij,"d0cm",d0cm," akcm",akcm," akth",akth,
4432 c & " akct",akct," deltad",deltad," deltat",deltat1,deltat2,
4433 c & " deltat12",deltat12," eij",eij
4434 ed=2*akcm*deltad+akct*deltat12
4436 pom2=v1ss+2*v2ss*cosphi+3*v3ss*cosphi*cosphi
4437 eom1=-2*akth*deltat1-pom1-om2*pom2
4438 eom2= 2*akth*deltat2+pom1-om1*pom2
4441 ggk=ed*erij(k)+eom1*dcosom1(k)+eom2*dcosom2(k)
4442 ghpbx(k,i)=ghpbx(k,i)-ggk
4443 & +(eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,nres+i))
4444 & +eom1*(erij(k)-om1*dc_norm(k,nres+i)))*dsci_inv
4445 ghpbx(k,j)=ghpbx(k,j)+ggk
4446 & +(eom12*(dc_norm(k,nres+i)-om12*dc_norm(k,nres+j))
4447 & +eom2*(erij(k)-om2*dc_norm(k,nres+j)))*dscj_inv
4448 ghpbc(k,i)=ghpbc(k,i)-ggk
4449 ghpbc(k,j)=ghpbc(k,j)+ggk
4452 C Calculate the components of the gradient in DC and X
4456 cgrad ghpbc(l,k)=ghpbc(l,k)+gg(l)
4461 C--------------------------------------------------------------------------
4462 subroutine ebond(estr)
4464 c Evaluate the energy of stretching of the CA-CA and CA-SC virtual bonds
4466 implicit real*8 (a-h,o-z)
4467 include 'DIMENSIONS'
4468 include 'COMMON.LOCAL'
4469 include 'COMMON.GEO'
4470 include 'COMMON.INTERACT'
4471 include 'COMMON.DERIV'
4472 include 'COMMON.VAR'
4473 include 'COMMON.CHAIN'
4474 include 'COMMON.IOUNITS'
4475 include 'COMMON.NAMES'
4476 include 'COMMON.FFIELD'
4477 include 'COMMON.CONTROL'
4478 include 'COMMON.SETUP'
4479 double precision u(3),ud(3)
4481 do i=ibondp_start,ibondp_end
4482 diff = vbld(i)-vbldp0
4483 c write (iout,*) i,vbld(i),vbldp0,diff,AKP*diff*diff
4486 gradb(j,i-1)=AKP*diff*dc(j,i-1)/vbld(i)
4488 c write (iout,'(i5,3f10.5)') i,(gradb(j,i-1),j=1,3)
4492 c 09/18/07 AL: multimodal bond potential based on AM1 CA-SC PMF's included
4494 do i=ibond_start,ibond_end
4499 diff=vbld(i+nres)-vbldsc0(1,iti)
4500 c write (iout,*) i,iti,vbld(i+nres),vbldsc0(1,iti),diff,
4501 c & AKSC(1,iti),AKSC(1,iti)*diff*diff
4502 estr=estr+0.5d0*AKSC(1,iti)*diff*diff
4504 gradbx(j,i)=AKSC(1,iti)*diff*dc(j,i+nres)/vbld(i+nres)
4508 diff=vbld(i+nres)-vbldsc0(j,iti)
4509 ud(j)=aksc(j,iti)*diff
4510 u(j)=abond0(j,iti)+0.5d0*ud(j)*diff
4524 uprod2=uprod2*u(k)*u(k)
4528 usumsqder=usumsqder+ud(j)*uprod2
4530 estr=estr+uprod/usum
4532 gradbx(j,i)=usumsqder/(usum*usum)*dc(j,i+nres)/vbld(i+nres)
4540 C--------------------------------------------------------------------------
4541 subroutine ebend(etheta)
4543 C Evaluate the virtual-bond-angle energy given the virtual-bond dihedral
4544 C angles gamma and its derivatives in consecutive thetas and gammas.
4546 implicit real*8 (a-h,o-z)
4547 include 'DIMENSIONS'
4548 include 'COMMON.LOCAL'
4549 include 'COMMON.GEO'
4550 include 'COMMON.INTERACT'
4551 include 'COMMON.DERIV'
4552 include 'COMMON.VAR'
4553 include 'COMMON.CHAIN'
4554 include 'COMMON.IOUNITS'
4555 include 'COMMON.NAMES'
4556 include 'COMMON.FFIELD'
4557 include 'COMMON.CONTROL'
4558 common /calcthet/ term1,term2,termm,diffak,ratak,
4559 & ak,aktc,termpre,termexp,sigc,sig0i,time11,time12,sigcsq,
4560 & delthe0,sig0inv,sigtc,sigsqtc,delthec,it
4561 double precision y(2),z(2)
4563 c time11=dexp(-2*time)
4566 c write (*,'(a,i2)') 'EBEND ICG=',icg
4567 do i=ithet_start,ithet_end
4568 C Zero the energy function and its derivative at 0 or pi.
4569 call splinthet(theta(i),0.5d0*delta,ss,ssd)
4574 if (phii.ne.phii) phii=150.0
4587 if (phii1.ne.phii1) phii1=150.0
4599 C Calculate the "mean" value of theta from the part of the distribution
4600 C dependent on the adjacent virtual-bond-valence angles (gamma1 & gamma2).
4601 C In following comments this theta will be referred to as t_c.
4602 thet_pred_mean=0.0d0
4606 thet_pred_mean=thet_pred_mean+athetk*y(k)+bthetk*z(k)
4608 dthett=thet_pred_mean*ssd
4609 thet_pred_mean=thet_pred_mean*ss+a0thet(it)
4610 C Derivatives of the "mean" values in gamma1 and gamma2.
4611 dthetg1=(-athet(1,it)*y(2)+athet(2,it)*y(1))*ss
4612 dthetg2=(-bthet(1,it)*z(2)+bthet(2,it)*z(1))*ss
4613 if (theta(i).gt.pi-delta) then
4614 call theteng(pi-delta,thet_pred_mean,theta0(it),f0,fprim0,
4616 call mixder(pi-delta,thet_pred_mean,theta0(it),fprim_tc0)
4617 call theteng(pi,thet_pred_mean,theta0(it),f1,fprim1,E_tc1)
4618 call spline1(theta(i),pi-delta,delta,f0,f1,fprim0,ethetai,
4620 call spline2(theta(i),pi-delta,delta,E_tc0,E_tc1,fprim_tc0,
4622 else if (theta(i).lt.delta) then
4623 call theteng(delta,thet_pred_mean,theta0(it),f0,fprim0,E_tc0)
4624 call theteng(0.0d0,thet_pred_mean,theta0(it),f1,fprim1,E_tc1)
4625 call spline1(theta(i),delta,-delta,f0,f1,fprim0,ethetai,
4627 call mixder(delta,thet_pred_mean,theta0(it),fprim_tc0)
4628 call spline2(theta(i),delta,-delta,E_tc0,E_tc1,fprim_tc0,
4631 call theteng(theta(i),thet_pred_mean,theta0(it),ethetai,
4634 etheta=etheta+ethetai
4635 if (energy_dec) write (iout,'(a6,i5,0pf7.3)')
4637 if (i.gt.3) gloc(i-3,icg)=gloc(i-3,icg)+wang*E_tc*dthetg1
4638 if (i.lt.nres) gloc(i-2,icg)=gloc(i-2,icg)+wang*E_tc*dthetg2
4639 gloc(nphi+i-2,icg)=wang*(E_theta+E_tc*dthett)
4641 C Ufff.... We've done all this!!!
4644 C---------------------------------------------------------------------------
4645 subroutine theteng(thetai,thet_pred_mean,theta0i,ethetai,E_theta,
4647 implicit real*8 (a-h,o-z)
4648 include 'DIMENSIONS'
4649 include 'COMMON.LOCAL'
4650 include 'COMMON.IOUNITS'
4651 common /calcthet/ term1,term2,termm,diffak,ratak,
4652 & ak,aktc,termpre,termexp,sigc,sig0i,time11,time12,sigcsq,
4653 & delthe0,sig0inv,sigtc,sigsqtc,delthec,it
4654 C Calculate the contributions to both Gaussian lobes.
4655 C 6/6/97 - Deform the Gaussians using the factor of 1/(1+time)
4656 C The "polynomial part" of the "standard deviation" of this part of
4660 sig=sig*thet_pred_mean+polthet(j,it)
4662 C Derivative of the "interior part" of the "standard deviation of the"
4663 C gamma-dependent Gaussian lobe in t_c.
4664 sigtc=3*polthet(3,it)
4666 sigtc=sigtc*thet_pred_mean+j*polthet(j,it)
4669 C Set the parameters of both Gaussian lobes of the distribution.
4670 C "Standard deviation" of the gamma-dependent Gaussian lobe (sigtc)
4671 fac=sig*sig+sigc0(it)
4674 C Following variable (sigsqtc) is -(1/2)d[sigma(t_c)**(-2))]/dt_c
4675 sigsqtc=-4.0D0*sigcsq*sigtc
4676 c print *,i,sig,sigtc,sigsqtc
4677 C Following variable (sigtc) is d[sigma(t_c)]/dt_c
4678 sigtc=-sigtc/(fac*fac)
4679 C Following variable is sigma(t_c)**(-2)
4680 sigcsq=sigcsq*sigcsq
4682 sig0inv=1.0D0/sig0i**2
4683 delthec=thetai-thet_pred_mean
4684 delthe0=thetai-theta0i
4685 term1=-0.5D0*sigcsq*delthec*delthec
4686 term2=-0.5D0*sig0inv*delthe0*delthe0
4687 C Following fuzzy logic is to avoid underflows in dexp and subsequent INFs and
4688 C NaNs in taking the logarithm. We extract the largest exponent which is added
4689 C to the energy (this being the log of the distribution) at the end of energy
4690 C term evaluation for this virtual-bond angle.
4691 if (term1.gt.term2) then
4693 term2=dexp(term2-termm)
4697 term1=dexp(term1-termm)
4700 C The ratio between the gamma-independent and gamma-dependent lobes of
4701 C the distribution is a Gaussian function of thet_pred_mean too.
4702 diffak=gthet(2,it)-thet_pred_mean
4703 ratak=diffak/gthet(3,it)**2
4704 ak=dexp(gthet(1,it)-0.5D0*diffak*ratak)
4705 C Let's differentiate it in thet_pred_mean NOW.
4707 C Now put together the distribution terms to make complete distribution.
4708 termexp=term1+ak*term2
4709 termpre=sigc+ak*sig0i
4710 C Contribution of the bending energy from this theta is just the -log of
4711 C the sum of the contributions from the two lobes and the pre-exponential
4712 C factor. Simple enough, isn't it?
4713 ethetai=(-dlog(termexp)-termm+dlog(termpre))
4714 C NOW the derivatives!!!
4715 C 6/6/97 Take into account the deformation.
4716 E_theta=(delthec*sigcsq*term1
4717 & +ak*delthe0*sig0inv*term2)/termexp
4718 E_tc=((sigtc+aktc*sig0i)/termpre
4719 & -((delthec*sigcsq+delthec*delthec*sigsqtc)*term1+
4720 & aktc*term2)/termexp)
4723 c-----------------------------------------------------------------------------
4724 subroutine mixder(thetai,thet_pred_mean,theta0i,E_tc_t)
4725 implicit real*8 (a-h,o-z)
4726 include 'DIMENSIONS'
4727 include 'COMMON.LOCAL'
4728 include 'COMMON.IOUNITS'
4729 common /calcthet/ term1,term2,termm,diffak,ratak,
4730 & ak,aktc,termpre,termexp,sigc,sig0i,time11,time12,sigcsq,
4731 & delthe0,sig0inv,sigtc,sigsqtc,delthec,it
4732 delthec=thetai-thet_pred_mean
4733 delthe0=thetai-theta0i
4734 C "Thank you" to MAPLE (probably spared one day of hand-differentiation).
4735 t3 = thetai-thet_pred_mean
4739 t14 = t12+t6*sigsqtc
4741 t21 = thetai-theta0i
4747 E_tc_t = -((sigcsq+2.D0*t3*sigsqtc)*t9-t14*sigcsq*t3*t16*t9
4748 & -aktc*sig0inv*t27)/t32+(t14*t9+aktc*t26)/t40
4749 & *(-t12*t9-ak*sig0inv*t27)
4753 C--------------------------------------------------------------------------
4754 subroutine ebend(etheta)
4756 C Evaluate the virtual-bond-angle energy given the virtual-bond dihedral
4757 C angles gamma and its derivatives in consecutive thetas and gammas.
4758 C ab initio-derived potentials from
4759 c Kozlowska et al., J. Phys.: Condens. Matter 19 (2007) 285203
4761 implicit real*8 (a-h,o-z)
4762 include 'DIMENSIONS'
4763 include 'COMMON.LOCAL'
4764 include 'COMMON.GEO'
4765 include 'COMMON.INTERACT'
4766 include 'COMMON.DERIV'
4767 include 'COMMON.VAR'
4768 include 'COMMON.CHAIN'
4769 include 'COMMON.IOUNITS'
4770 include 'COMMON.NAMES'
4771 include 'COMMON.FFIELD'
4772 include 'COMMON.CONTROL'
4773 double precision coskt(mmaxtheterm),sinkt(mmaxtheterm),
4774 & cosph1(maxsingle),sinph1(maxsingle),cosph2(maxsingle),
4775 & sinph2(maxsingle),cosph1ph2(maxdouble,maxdouble),
4776 & sinph1ph2(maxdouble,maxdouble)
4777 logical lprn /.false./, lprn1 /.false./
4779 do i=ithet_start,ithet_end
4783 theti2=0.5d0*theta(i)
4784 ityp2=ithetyp(itype(i-1))
4786 coskt(k)=dcos(k*theti2)
4787 sinkt(k)=dsin(k*theti2)
4792 if (phii.ne.phii) phii=150.0
4796 ityp1=ithetyp(itype(i-2))
4798 cosph1(k)=dcos(k*phii)
4799 sinph1(k)=dsin(k*phii)
4812 if (phii1.ne.phii1) phii1=150.0
4817 ityp3=ithetyp(itype(i))
4819 cosph2(k)=dcos(k*phii1)
4820 sinph2(k)=dsin(k*phii1)
4830 ethetai=aa0thet(ityp1,ityp2,ityp3)
4833 ccl=cosph1(l)*cosph2(k-l)
4834 ssl=sinph1(l)*sinph2(k-l)
4835 scl=sinph1(l)*cosph2(k-l)
4836 csl=cosph1(l)*sinph2(k-l)
4837 cosph1ph2(l,k)=ccl-ssl
4838 cosph1ph2(k,l)=ccl+ssl
4839 sinph1ph2(l,k)=scl+csl
4840 sinph1ph2(k,l)=scl-csl
4844 write (iout,*) "i",i," ityp1",ityp1," ityp2",ityp2,
4845 & " ityp3",ityp3," theti2",theti2," phii",phii," phii1",phii1
4846 write (iout,*) "coskt and sinkt"
4848 write (iout,*) k,coskt(k),sinkt(k)
4852 ethetai=ethetai+aathet(k,ityp1,ityp2,ityp3)*sinkt(k)
4853 dethetai=dethetai+0.5d0*k*aathet(k,ityp1,ityp2,ityp3)
4856 & write (iout,*) "k",k," aathet",aathet(k,ityp1,ityp2,ityp3),
4857 & " ethetai",ethetai
4860 write (iout,*) "cosph and sinph"
4862 write (iout,*) k,cosph1(k),sinph1(k),cosph2(k),sinph2(k)
4864 write (iout,*) "cosph1ph2 and sinph2ph2"
4867 write (iout,*) l,k,cosph1ph2(l,k),cosph1ph2(k,l),
4868 & sinph1ph2(l,k),sinph1ph2(k,l)
4871 write(iout,*) "ethetai",ethetai
4875 aux=bbthet(k,m,ityp1,ityp2,ityp3)*cosph1(k)
4876 & +ccthet(k,m,ityp1,ityp2,ityp3)*sinph1(k)
4877 & +ddthet(k,m,ityp1,ityp2,ityp3)*cosph2(k)
4878 & +eethet(k,m,ityp1,ityp2,ityp3)*sinph2(k)
4879 ethetai=ethetai+sinkt(m)*aux
4880 dethetai=dethetai+0.5d0*m*aux*coskt(m)
4881 dephii=dephii+k*sinkt(m)*(
4882 & ccthet(k,m,ityp1,ityp2,ityp3)*cosph1(k)-
4883 & bbthet(k,m,ityp1,ityp2,ityp3)*sinph1(k))
4884 dephii1=dephii1+k*sinkt(m)*(
4885 & eethet(k,m,ityp1,ityp2,ityp3)*cosph2(k)-
4886 & ddthet(k,m,ityp1,ityp2,ityp3)*sinph2(k))
4888 & write (iout,*) "m",m," k",k," bbthet",
4889 & bbthet(k,m,ityp1,ityp2,ityp3)," ccthet",
4890 & ccthet(k,m,ityp1,ityp2,ityp3)," ddthet",
4891 & ddthet(k,m,ityp1,ityp2,ityp3)," eethet",
4892 & eethet(k,m,ityp1,ityp2,ityp3)," ethetai",ethetai
4896 & write(iout,*) "ethetai",ethetai
4900 aux=ffthet(l,k,m,ityp1,ityp2,ityp3)*cosph1ph2(l,k)+
4901 & ffthet(k,l,m,ityp1,ityp2,ityp3)*cosph1ph2(k,l)+
4902 & ggthet(l,k,m,ityp1,ityp2,ityp3)*sinph1ph2(l,k)+
4903 & ggthet(k,l,m,ityp1,ityp2,ityp3)*sinph1ph2(k,l)
4904 ethetai=ethetai+sinkt(m)*aux
4905 dethetai=dethetai+0.5d0*m*coskt(m)*aux
4906 dephii=dephii+l*sinkt(m)*(
4907 & -ffthet(l,k,m,ityp1,ityp2,ityp3)*sinph1ph2(l,k)-
4908 & ffthet(k,l,m,ityp1,ityp2,ityp3)*sinph1ph2(k,l)+
4909 & ggthet(l,k,m,ityp1,ityp2,ityp3)*cosph1ph2(l,k)+
4910 & ggthet(k,l,m,ityp1,ityp2,ityp3)*cosph1ph2(k,l))
4911 dephii1=dephii1+(k-l)*sinkt(m)*(
4912 & -ffthet(l,k,m,ityp1,ityp2,ityp3)*sinph1ph2(l,k)+
4913 & ffthet(k,l,m,ityp1,ityp2,ityp3)*sinph1ph2(k,l)+
4914 & ggthet(l,k,m,ityp1,ityp2,ityp3)*cosph1ph2(l,k)-
4915 & ggthet(k,l,m,ityp1,ityp2,ityp3)*cosph1ph2(k,l))
4917 write (iout,*) "m",m," k",k," l",l," ffthet",
4918 & ffthet(l,k,m,ityp1,ityp2,ityp3),
4919 & ffthet(k,l,m,ityp1,ityp2,ityp3)," ggthet",
4920 & ggthet(l,k,m,ityp1,ityp2,ityp3),
4921 & ggthet(k,l,m,ityp1,ityp2,ityp3)," ethetai",ethetai
4922 write (iout,*) cosph1ph2(l,k)*sinkt(m),
4923 & cosph1ph2(k,l)*sinkt(m),
4924 & sinph1ph2(l,k)*sinkt(m),sinph1ph2(k,l)*sinkt(m)
4930 if (lprn1) write (iout,'(i2,3f8.1,9h ethetai ,f10.5)')
4931 & i,theta(i)*rad2deg,phii*rad2deg,
4932 & phii1*rad2deg,ethetai
4933 etheta=etheta+ethetai
4934 if (i.gt.3) gloc(i-3,icg)=gloc(i-3,icg)+wang*dephii
4935 if (i.lt.nres) gloc(i-2,icg)=gloc(i-2,icg)+wang*dephii1
4936 gloc(nphi+i-2,icg)=wang*dethetai
4942 c-----------------------------------------------------------------------------
4943 subroutine esc(escloc)
4944 C Calculate the local energy of a side chain and its derivatives in the
4945 C corresponding virtual-bond valence angles THETA and the spherical angles
4947 implicit real*8 (a-h,o-z)
4948 include 'DIMENSIONS'
4949 include 'COMMON.GEO'
4950 include 'COMMON.LOCAL'
4951 include 'COMMON.VAR'
4952 include 'COMMON.INTERACT'
4953 include 'COMMON.DERIV'
4954 include 'COMMON.CHAIN'
4955 include 'COMMON.IOUNITS'
4956 include 'COMMON.NAMES'
4957 include 'COMMON.FFIELD'
4958 include 'COMMON.CONTROL'
4959 double precision x(3),dersc(3),xemp(3),dersc0(3),dersc1(3),
4960 & ddersc0(3),ddummy(3),xtemp(3),temp(3)
4961 common /sccalc/ time11,time12,time112,theti,it,nlobit
4964 c write (iout,'(a)') 'ESC'
4965 do i=loc_start,loc_end
4967 if (it.eq.10) goto 1
4969 c print *,'i=',i,' it=',it,' nlobit=',nlobit
4970 c write (iout,*) 'i=',i,' ssa=',ssa,' ssad=',ssad
4971 theti=theta(i+1)-pipol
4976 if (x(2).gt.pi-delta) then
4980 call enesc(xtemp,escloci0,dersc0,ddersc0,.true.)
4982 call enesc(xtemp,escloci1,dersc1,ddummy,.false.)
4983 call spline1(x(2),pi-delta,delta,escloci0,escloci1,dersc0(2),
4985 call spline2(x(2),pi-delta,delta,dersc0(1),dersc1(1),
4986 & ddersc0(1),dersc(1))
4987 call spline2(x(2),pi-delta,delta,dersc0(3),dersc1(3),
4988 & ddersc0(3),dersc(3))
4990 call enesc_bound(xtemp,esclocbi0,dersc0,dersc12,.true.)
4992 call enesc_bound(xtemp,esclocbi1,dersc1,chuju,.false.)
4993 call spline1(x(2),pi-delta,delta,esclocbi0,esclocbi1,
4994 & dersc0(2),esclocbi,dersc02)
4995 call spline2(x(2),pi-delta,delta,dersc0(1),dersc1(1),
4997 call splinthet(x(2),0.5d0*delta,ss,ssd)
5002 dersc(k)=ss*dersc(k)+(1.0d0-ss)*dersc0(k)
5004 dersc(2)=dersc(2)+ssd*(escloci-esclocbi)
5005 c write (iout,*) 'i=',i,x(2)*rad2deg,escloci0,escloci,
5007 escloci=ss*escloci+(1.0d0-ss)*esclocbi
5009 c write (iout,*) escloci
5010 else if (x(2).lt.delta) then
5014 call enesc(xtemp,escloci0,dersc0,ddersc0,.true.)
5016 call enesc(xtemp,escloci1,dersc1,ddummy,.false.)
5017 call spline1(x(2),delta,-delta,escloci0,escloci1,dersc0(2),
5019 call spline2(x(2),delta,-delta,dersc0(1),dersc1(1),
5020 & ddersc0(1),dersc(1))
5021 call spline2(x(2),delta,-delta,dersc0(3),dersc1(3),
5022 & ddersc0(3),dersc(3))
5024 call enesc_bound(xtemp,esclocbi0,dersc0,dersc12,.true.)
5026 call enesc_bound(xtemp,esclocbi1,dersc1,chuju,.false.)
5027 call spline1(x(2),delta,-delta,esclocbi0,esclocbi1,
5028 & dersc0(2),esclocbi,dersc02)
5029 call spline2(x(2),delta,-delta,dersc0(1),dersc1(1),
5034 call splinthet(x(2),0.5d0*delta,ss,ssd)
5036 dersc(k)=ss*dersc(k)+(1.0d0-ss)*dersc0(k)
5038 dersc(2)=dersc(2)+ssd*(escloci-esclocbi)
5039 c write (iout,*) 'i=',i,x(2)*rad2deg,escloci0,escloci,
5041 escloci=ss*escloci+(1.0d0-ss)*esclocbi
5042 c write (iout,*) escloci
5044 call enesc(x,escloci,dersc,ddummy,.false.)
5047 escloc=escloc+escloci
5048 if (energy_dec) write (iout,'(a6,i5,0pf7.3)')
5049 & 'escloc',i,escloci
5050 c write (iout,*) 'i=',i,' escloci=',escloci,' dersc=',dersc
5052 gloc(nphi+i-1,icg)=gloc(nphi+i-1,icg)+
5054 gloc(ialph(i,1),icg)=wscloc*dersc(2)
5055 gloc(ialph(i,1)+nside,icg)=wscloc*dersc(3)
5060 C---------------------------------------------------------------------------
5061 subroutine enesc(x,escloci,dersc,ddersc,mixed)
5062 implicit real*8 (a-h,o-z)
5063 include 'DIMENSIONS'
5064 include 'COMMON.GEO'
5065 include 'COMMON.LOCAL'
5066 include 'COMMON.IOUNITS'
5067 common /sccalc/ time11,time12,time112,theti,it,nlobit
5068 double precision x(3),z(3),Ax(3,maxlob,-1:1),dersc(3),ddersc(3)
5069 double precision contr(maxlob,-1:1)
5071 c write (iout,*) 'it=',it,' nlobit=',nlobit
5075 if (mixed) ddersc(j)=0.0d0
5079 C Because of periodicity of the dependence of the SC energy in omega we have
5080 C to add up the contributions from x(3)-2*pi, x(3), and x(3+2*pi).
5081 C To avoid underflows, first compute & store the exponents.
5089 z(k)=x(k)-censc(k,j,it)
5094 Axk=Axk+gaussc(l,k,j,it)*z(l)
5100 expfac=expfac+Ax(k,j,iii)*z(k)
5108 C As in the case of ebend, we want to avoid underflows in exponentiation and
5109 C subsequent NaNs and INFs in energy calculation.
5110 C Find the largest exponent
5114 if (emin.gt.contr(j,iii)) emin=contr(j,iii)
5118 cd print *,'it=',it,' emin=',emin
5120 C Compute the contribution to SC energy and derivatives
5125 adexp=bsc(j,it)-0.5D0*contr(j,iii)+emin
5126 if(adexp.ne.adexp) adexp=1.0
5129 expfac=dexp(bsc(j,it)-0.5D0*contr(j,iii)+emin)
5131 cd print *,'j=',j,' expfac=',expfac
5132 escloc_i=escloc_i+expfac
5134 dersc(k)=dersc(k)+Ax(k,j,iii)*expfac
5138 ddersc(k)=ddersc(k)+(-Ax(2,j,iii)*Ax(k,j,iii)
5139 & +gaussc(k,2,j,it))*expfac
5146 dersc(1)=dersc(1)/cos(theti)**2
5147 ddersc(1)=ddersc(1)/cos(theti)**2
5150 escloci=-(dlog(escloc_i)-emin)
5152 dersc(j)=dersc(j)/escloc_i
5156 ddersc(j)=(ddersc(j)/escloc_i+dersc(2)*dersc(j))
5161 C------------------------------------------------------------------------------
5162 subroutine enesc_bound(x,escloci,dersc,dersc12,mixed)
5163 implicit real*8 (a-h,o-z)
5164 include 'DIMENSIONS'
5165 include 'COMMON.GEO'
5166 include 'COMMON.LOCAL'
5167 include 'COMMON.IOUNITS'
5168 common /sccalc/ time11,time12,time112,theti,it,nlobit
5169 double precision x(3),z(3),Ax(3,maxlob),dersc(3)
5170 double precision contr(maxlob)
5181 z(k)=x(k)-censc(k,j,it)
5187 Axk=Axk+gaussc(l,k,j,it)*z(l)
5193 expfac=expfac+Ax(k,j)*z(k)
5198 C As in the case of ebend, we want to avoid underflows in exponentiation and
5199 C subsequent NaNs and INFs in energy calculation.
5200 C Find the largest exponent
5203 if (emin.gt.contr(j)) emin=contr(j)
5207 C Compute the contribution to SC energy and derivatives
5211 expfac=dexp(bsc(j,it)-0.5D0*contr(j)+emin)
5212 escloc_i=escloc_i+expfac
5214 dersc(k)=dersc(k)+Ax(k,j)*expfac
5216 if (mixed) dersc12=dersc12+(-Ax(2,j)*Ax(1,j)
5217 & +gaussc(1,2,j,it))*expfac
5221 dersc(1)=dersc(1)/cos(theti)**2
5222 dersc12=dersc12/cos(theti)**2
5223 escloci=-(dlog(escloc_i)-emin)
5225 dersc(j)=dersc(j)/escloc_i
5227 if (mixed) dersc12=(dersc12/escloc_i+dersc(2)*dersc(1))
5231 c----------------------------------------------------------------------------------
5232 subroutine esc(escloc)
5233 C Calculate the local energy of a side chain and its derivatives in the
5234 C corresponding virtual-bond valence angles THETA and the spherical angles
5235 C ALPHA and OMEGA derived from AM1 all-atom calculations.
5236 C added by Urszula Kozlowska. 07/11/2007
5238 implicit real*8 (a-h,o-z)
5239 include 'DIMENSIONS'
5240 include 'COMMON.GEO'
5241 include 'COMMON.LOCAL'
5242 include 'COMMON.VAR'
5243 include 'COMMON.SCROT'
5244 include 'COMMON.INTERACT'
5245 include 'COMMON.DERIV'
5246 include 'COMMON.CHAIN'
5247 include 'COMMON.IOUNITS'
5248 include 'COMMON.NAMES'
5249 include 'COMMON.FFIELD'
5250 include 'COMMON.CONTROL'
5251 include 'COMMON.VECTORS'
5252 double precision x_prime(3),y_prime(3),z_prime(3)
5253 & , sumene,dsc_i,dp2_i,x(65),
5254 & xx,yy,zz,sumene1,sumene2,sumene3,sumene4,s1,s1_6,s2,s2_6,
5255 & de_dxx,de_dyy,de_dzz,de_dt
5256 double precision s1_t,s1_6_t,s2_t,s2_6_t
5258 & dXX_Ci1(3),dYY_Ci1(3),dZZ_Ci1(3),dXX_Ci(3),
5259 & dYY_Ci(3),dZZ_Ci(3),dXX_XYZ(3),dYY_XYZ(3),dZZ_XYZ(3),
5260 & dt_dCi(3),dt_dCi1(3)
5261 common /sccalc/ time11,time12,time112,theti,it,nlobit
5264 do i=loc_start,loc_end
5265 costtab(i+1) =dcos(theta(i+1))
5266 sinttab(i+1) =dsqrt(1-costtab(i+1)*costtab(i+1))
5267 cost2tab(i+1)=dsqrt(0.5d0*(1.0d0+costtab(i+1)))
5268 sint2tab(i+1)=dsqrt(0.5d0*(1.0d0-costtab(i+1)))
5269 cosfac2=0.5d0/(1.0d0+costtab(i+1))
5270 cosfac=dsqrt(cosfac2)
5271 sinfac2=0.5d0/(1.0d0-costtab(i+1))
5272 sinfac=dsqrt(sinfac2)
5274 if (it.eq.10) goto 1
5276 C Compute the axes of tghe local cartesian coordinates system; store in
5277 c x_prime, y_prime and z_prime
5284 C write(2,*) "dc_norm", dc_norm(1,i+nres),dc_norm(2,i+nres),
5285 C & dc_norm(3,i+nres)
5287 x_prime(j) = (dc_norm(j,i) - dc_norm(j,i-1))*cosfac
5288 y_prime(j) = (dc_norm(j,i) + dc_norm(j,i-1))*sinfac
5291 z_prime(j) = -uz(j,i-1)
5294 c write (2,*) "x_prime",(x_prime(j),j=1,3)
5295 c write (2,*) "y_prime",(y_prime(j),j=1,3)
5296 c write (2,*) "z_prime",(z_prime(j),j=1,3)
5297 c write (2,*) "xx",scalar(x_prime(1),x_prime(1)),
5298 c & " xy",scalar(x_prime(1),y_prime(1)),
5299 c & " xz",scalar(x_prime(1),z_prime(1)),
5300 c & " yy",scalar(y_prime(1),y_prime(1)),
5301 c & " yz",scalar(y_prime(1),z_prime(1)),
5302 c & " zz",scalar(z_prime(1),z_prime(1))
5304 C Transform the unit vector of the ith side-chain centroid, dC_norm(*,i),
5305 C to local coordinate system. Store in xx, yy, zz.
5311 xx = xx + x_prime(j)*dc_norm(j,i+nres)
5312 yy = yy + y_prime(j)*dc_norm(j,i+nres)
5313 zz = zz + z_prime(j)*dc_norm(j,i+nres)
5320 C Compute the energy of the ith side cbain
5322 c write (2,*) "xx",xx," yy",yy," zz",zz
5325 x(j) = sc_parmin(j,it)
5328 Cc diagnostics - remove later
5330 yy1 = dsin(alph(2))*dcos(omeg(2))
5331 zz1 = -dsin(alph(2))*dsin(omeg(2))
5332 write(2,'(3f8.1,3f9.3,1x,3f9.3)')
5333 & alph(2)*rad2deg,omeg(2)*rad2deg,theta(3)*rad2deg,xx,yy,zz,
5335 C," --- ", xx_w,yy_w,zz_w
5338 sumene1= x(1)+ x(2)*xx+ x(3)*yy+ x(4)*zz+ x(5)*xx**2
5339 & + x(6)*yy**2+ x(7)*zz**2+ x(8)*xx*zz+ x(9)*xx*yy
5341 sumene2= x(11) + x(12)*xx + x(13)*yy + x(14)*zz + x(15)*xx**2
5342 & + x(16)*yy**2 + x(17)*zz**2 + x(18)*xx*zz + x(19)*xx*yy
5344 sumene3= x(21) +x(22)*xx +x(23)*yy +x(24)*zz +x(25)*xx**2
5345 & +x(26)*yy**2 +x(27)*zz**2 +x(28)*xx*zz +x(29)*xx*yy
5346 & +x(30)*yy*zz +x(31)*xx**3 +x(32)*yy**3 +x(33)*zz**3
5347 & +x(34)*(xx**2)*yy +x(35)*(xx**2)*zz +x(36)*(yy**2)*xx
5348 & +x(37)*(yy**2)*zz +x(38)*(zz**2)*xx +x(39)*(zz**2)*yy
5350 sumene4= x(41) +x(42)*xx +x(43)*yy +x(44)*zz +x(45)*xx**2
5351 & +x(46)*yy**2 +x(47)*zz**2 +x(48)*xx*zz +x(49)*xx*yy
5352 & +x(50)*yy*zz +x(51)*xx**3 +x(52)*yy**3 +x(53)*zz**3
5353 & +x(54)*(xx**2)*yy +x(55)*(xx**2)*zz +x(56)*(yy**2)*xx
5354 & +x(57)*(yy**2)*zz +x(58)*(zz**2)*xx +x(59)*(zz**2)*yy
5356 dsc_i = 0.743d0+x(61)
5358 dscp1=dsqrt(dsc_i**2+dp2_i**2-2*dsc_i*dp2_i
5359 & *(xx*cost2tab(i+1)+yy*sint2tab(i+1)))
5360 dscp2=dsqrt(dsc_i**2+dp2_i**2-2*dsc_i*dp2_i
5361 & *(xx*cost2tab(i+1)-yy*sint2tab(i+1)))
5362 s1=(1+x(63))/(0.1d0 + dscp1)
5363 s1_6=(1+x(64))/(0.1d0 + dscp1**6)
5364 s2=(1+x(65))/(0.1d0 + dscp2)
5365 s2_6=(1+x(65))/(0.1d0 + dscp2**6)
5366 sumene = ( sumene3*sint2tab(i+1) + sumene1)*(s1+s1_6)
5367 & + (sumene4*cost2tab(i+1) +sumene2)*(s2+s2_6)
5368 c write(2,'(i2," sumene",7f9.3)') i,sumene1,sumene2,sumene3,
5370 c & dscp1,dscp2,sumene
5371 c sumene = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
5372 escloc = escloc + sumene
5373 c write (2,*) "i",i," escloc",sumene,escloc
5376 C This section to check the numerical derivatives of the energy of ith side
5377 C chain in xx, yy, zz, and theta. Use the -DDEBUG compiler option or insert
5378 C #define DEBUG in the code to turn it on.
5380 write (2,*) "sumene =",sumene
5384 write (2,*) xx,yy,zz
5385 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
5386 de_dxx_num=(sumenep-sumene)/aincr
5388 write (2,*) "xx+ sumene from enesc=",sumenep
5391 write (2,*) xx,yy,zz
5392 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
5393 de_dyy_num=(sumenep-sumene)/aincr
5395 write (2,*) "yy+ sumene from enesc=",sumenep
5398 write (2,*) xx,yy,zz
5399 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
5400 de_dzz_num=(sumenep-sumene)/aincr
5402 write (2,*) "zz+ sumene from enesc=",sumenep
5403 costsave=cost2tab(i+1)
5404 sintsave=sint2tab(i+1)
5405 cost2tab(i+1)=dcos(0.5d0*(theta(i+1)+aincr))
5406 sint2tab(i+1)=dsin(0.5d0*(theta(i+1)+aincr))
5407 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
5408 de_dt_num=(sumenep-sumene)/aincr
5409 write (2,*) " t+ sumene from enesc=",sumenep
5410 cost2tab(i+1)=costsave
5411 sint2tab(i+1)=sintsave
5412 C End of diagnostics section.
5415 C Compute the gradient of esc
5417 pom_s1=(1.0d0+x(63))/(0.1d0 + dscp1)**2
5418 pom_s16=6*(1.0d0+x(64))/(0.1d0 + dscp1**6)**2
5419 pom_s2=(1.0d0+x(65))/(0.1d0 + dscp2)**2
5420 pom_s26=6*(1.0d0+x(65))/(0.1d0 + dscp2**6)**2
5421 pom_dx=dsc_i*dp2_i*cost2tab(i+1)
5422 pom_dy=dsc_i*dp2_i*sint2tab(i+1)
5423 pom_dt1=-0.5d0*dsc_i*dp2_i*(xx*sint2tab(i+1)-yy*cost2tab(i+1))
5424 pom_dt2=-0.5d0*dsc_i*dp2_i*(xx*sint2tab(i+1)+yy*cost2tab(i+1))
5425 pom1=(sumene3*sint2tab(i+1)+sumene1)
5426 & *(pom_s1/dscp1+pom_s16*dscp1**4)
5427 pom2=(sumene4*cost2tab(i+1)+sumene2)
5428 & *(pom_s2/dscp2+pom_s26*dscp2**4)
5429 sumene1x=x(2)+2*x(5)*xx+x(8)*zz+ x(9)*yy
5430 sumene3x=x(22)+2*x(25)*xx+x(28)*zz+x(29)*yy+3*x(31)*xx**2
5431 & +2*x(34)*xx*yy +2*x(35)*xx*zz +x(36)*(yy**2) +x(38)*(zz**2)
5433 sumene2x=x(12)+2*x(15)*xx+x(18)*zz+ x(19)*yy
5434 sumene4x=x(42)+2*x(45)*xx +x(48)*zz +x(49)*yy +3*x(51)*xx**2
5435 & +2*x(54)*xx*yy+2*x(55)*xx*zz+x(56)*(yy**2)+x(58)*(zz**2)
5437 de_dxx =(sumene1x+sumene3x*sint2tab(i+1))*(s1+s1_6)
5438 & +(sumene2x+sumene4x*cost2tab(i+1))*(s2+s2_6)
5439 & +(pom1+pom2)*pom_dx
5441 write(2,*), "de_dxx = ", de_dxx,de_dxx_num
5444 sumene1y=x(3) + 2*x(6)*yy + x(9)*xx + x(10)*zz
5445 sumene3y=x(23) +2*x(26)*yy +x(29)*xx +x(30)*zz +3*x(32)*yy**2
5446 & +x(34)*(xx**2) +2*x(36)*yy*xx +2*x(37)*yy*zz +x(39)*(zz**2)
5448 sumene2y=x(13) + 2*x(16)*yy + x(19)*xx + x(20)*zz
5449 sumene4y=x(43)+2*x(46)*yy+x(49)*xx +x(50)*zz
5450 & +3*x(52)*yy**2+x(54)*xx**2+2*x(56)*yy*xx +2*x(57)*yy*zz
5451 & +x(59)*zz**2 +x(60)*xx*zz
5452 de_dyy =(sumene1y+sumene3y*sint2tab(i+1))*(s1+s1_6)
5453 & +(sumene2y+sumene4y*cost2tab(i+1))*(s2+s2_6)
5454 & +(pom1-pom2)*pom_dy
5456 write(2,*), "de_dyy = ", de_dyy,de_dyy_num
5459 de_dzz =(x(24) +2*x(27)*zz +x(28)*xx +x(30)*yy
5460 & +3*x(33)*zz**2 +x(35)*xx**2 +x(37)*yy**2 +2*x(38)*zz*xx
5461 & +2*x(39)*zz*yy +x(40)*xx*yy)*sint2tab(i+1)*(s1+s1_6)
5462 & +(x(4) + 2*x(7)*zz+ x(8)*xx + x(10)*yy)*(s1+s1_6)
5463 & +(x(44)+2*x(47)*zz +x(48)*xx +x(50)*yy +3*x(53)*zz**2
5464 & +x(55)*xx**2 +x(57)*(yy**2)+2*x(58)*zz*xx +2*x(59)*zz*yy
5465 & +x(60)*xx*yy)*cost2tab(i+1)*(s2+s2_6)
5466 & + ( x(14) + 2*x(17)*zz+ x(18)*xx + x(20)*yy)*(s2+s2_6)
5468 write(2,*), "de_dzz = ", de_dzz,de_dzz_num
5471 de_dt = 0.5d0*sumene3*cost2tab(i+1)*(s1+s1_6)
5472 & -0.5d0*sumene4*sint2tab(i+1)*(s2+s2_6)
5473 & +pom1*pom_dt1+pom2*pom_dt2
5475 write(2,*), "de_dt = ", de_dt,de_dt_num
5479 cossc=scalar(dc_norm(1,i),dc_norm(1,i+nres))
5480 cossc1=scalar(dc_norm(1,i-1),dc_norm(1,i+nres))
5481 cosfac2xx=cosfac2*xx
5482 sinfac2yy=sinfac2*yy
5484 dt_dCi(k) = -(dc_norm(k,i-1)+costtab(i+1)*dc_norm(k,i))*
5486 dt_dCi1(k)= -(dc_norm(k,i)+costtab(i+1)*dc_norm(k,i-1))*
5488 pom=(dC_norm(k,i+nres)-cossc*dC_norm(k,i))*vbld_inv(i+1)
5489 pom1=(dC_norm(k,i+nres)-cossc1*dC_norm(k,i-1))*vbld_inv(i)
5490 c write (iout,*) "i",i," k",k," pom",pom," pom1",pom1,
5491 c & " dt_dCi",dt_dCi(k)," dt_dCi1",dt_dCi1(k)
5492 c write (iout,*) "dC_norm",(dC_norm(j,i),j=1,3),
5493 c & (dC_norm(j,i-1),j=1,3)," vbld_inv",vbld_inv(i+1),vbld_inv(i)
5494 dXX_Ci(k)=pom*cosfac-dt_dCi(k)*cosfac2xx
5495 dXX_Ci1(k)=-pom1*cosfac-dt_dCi1(k)*cosfac2xx
5496 dYY_Ci(k)=pom*sinfac+dt_dCi(k)*sinfac2yy
5497 dYY_Ci1(k)=pom1*sinfac+dt_dCi1(k)*sinfac2yy
5501 dZZ_Ci(k)=dZZ_Ci(k)-uzgrad(j,k,2,i-1)*dC_norm(j,i+nres)
5502 dZZ_Ci1(k)=dZZ_Ci1(k)-uzgrad(j,k,1,i-1)*dC_norm(j,i+nres)
5505 dXX_XYZ(k)=vbld_inv(i+nres)*(x_prime(k)-xx*dC_norm(k,i+nres))
5506 dYY_XYZ(k)=vbld_inv(i+nres)*(y_prime(k)-yy*dC_norm(k,i+nres))
5507 dZZ_XYZ(k)=vbld_inv(i+nres)*(z_prime(k)-zz*dC_norm(k,i+nres))
5509 dt_dCi(k) = -dt_dCi(k)/sinttab(i+1)
5510 dt_dCi1(k)= -dt_dCi1(k)/sinttab(i+1)
5514 dXX_Ctab(k,i)=dXX_Ci(k)
5515 dXX_C1tab(k,i)=dXX_Ci1(k)
5516 dYY_Ctab(k,i)=dYY_Ci(k)
5517 dYY_C1tab(k,i)=dYY_Ci1(k)
5518 dZZ_Ctab(k,i)=dZZ_Ci(k)
5519 dZZ_C1tab(k,i)=dZZ_Ci1(k)
5520 dXX_XYZtab(k,i)=dXX_XYZ(k)
5521 dYY_XYZtab(k,i)=dYY_XYZ(k)
5522 dZZ_XYZtab(k,i)=dZZ_XYZ(k)
5526 c write (iout,*) "k",k," dxx_ci1",dxx_ci1(k)," dyy_ci1",
5527 c & dyy_ci1(k)," dzz_ci1",dzz_ci1(k)
5528 c write (iout,*) "k",k," dxx_ci",dxx_ci(k)," dyy_ci",
5529 c & dyy_ci(k)," dzz_ci",dzz_ci(k)
5530 c write (iout,*) "k",k," dt_dci",dt_dci(k)," dt_dci",
5532 c write (iout,*) "k",k," dxx_XYZ",dxx_XYZ(k)," dyy_XYZ",
5533 c & dyy_XYZ(k)," dzz_XYZ",dzz_XYZ(k)
5534 gscloc(k,i-1)=gscloc(k,i-1)+de_dxx*dxx_ci1(k)
5535 & +de_dyy*dyy_ci1(k)+de_dzz*dzz_ci1(k)+de_dt*dt_dCi1(k)
5536 gscloc(k,i)=gscloc(k,i)+de_dxx*dxx_Ci(k)
5537 & +de_dyy*dyy_Ci(k)+de_dzz*dzz_Ci(k)+de_dt*dt_dCi(k)
5538 gsclocx(k,i)= de_dxx*dxx_XYZ(k)
5539 & +de_dyy*dyy_XYZ(k)+de_dzz*dzz_XYZ(k)
5541 c write(iout,*) "ENERGY GRAD = ", (gscloc(k,i-1),k=1,3),
5542 c & (gscloc(k,i),k=1,3),(gsclocx(k,i),k=1,3)
5544 C to check gradient call subroutine check_grad
5550 c------------------------------------------------------------------------------
5551 double precision function enesc(x,xx,yy,zz,cost2,sint2)
5553 double precision x(65),xx,yy,zz,cost2,sint2,sumene1,sumene2,
5554 & sumene3,sumene4,sumene,dsc_i,dp2_i,dscp1,dscp2,s1,s1_6,s2,s2_6
5555 sumene1= x(1)+ x(2)*xx+ x(3)*yy+ x(4)*zz+ x(5)*xx**2
5556 & + x(6)*yy**2+ x(7)*zz**2+ x(8)*xx*zz+ x(9)*xx*yy
5558 sumene2= x(11) + x(12)*xx + x(13)*yy + x(14)*zz + x(15)*xx**2
5559 & + x(16)*yy**2 + x(17)*zz**2 + x(18)*xx*zz + x(19)*xx*yy
5561 sumene3= x(21) +x(22)*xx +x(23)*yy +x(24)*zz +x(25)*xx**2
5562 & +x(26)*yy**2 +x(27)*zz**2 +x(28)*xx*zz +x(29)*xx*yy
5563 & +x(30)*yy*zz +x(31)*xx**3 +x(32)*yy**3 +x(33)*zz**3
5564 & +x(34)*(xx**2)*yy +x(35)*(xx**2)*zz +x(36)*(yy**2)*xx
5565 & +x(37)*(yy**2)*zz +x(38)*(zz**2)*xx +x(39)*(zz**2)*yy
5567 sumene4= x(41) +x(42)*xx +x(43)*yy +x(44)*zz +x(45)*xx**2
5568 & +x(46)*yy**2 +x(47)*zz**2 +x(48)*xx*zz +x(49)*xx*yy
5569 & +x(50)*yy*zz +x(51)*xx**3 +x(52)*yy**3 +x(53)*zz**3
5570 & +x(54)*(xx**2)*yy +x(55)*(xx**2)*zz +x(56)*(yy**2)*xx
5571 & +x(57)*(yy**2)*zz +x(58)*(zz**2)*xx +x(59)*(zz**2)*yy
5573 dsc_i = 0.743d0+x(61)
5575 dscp1=dsqrt(dsc_i**2+dp2_i**2-2*dsc_i*dp2_i
5576 & *(xx*cost2+yy*sint2))
5577 dscp2=dsqrt(dsc_i**2+dp2_i**2-2*dsc_i*dp2_i
5578 & *(xx*cost2-yy*sint2))
5579 s1=(1+x(63))/(0.1d0 + dscp1)
5580 s1_6=(1+x(64))/(0.1d0 + dscp1**6)
5581 s2=(1+x(65))/(0.1d0 + dscp2)
5582 s2_6=(1+x(65))/(0.1d0 + dscp2**6)
5583 sumene = ( sumene3*sint2 + sumene1)*(s1+s1_6)
5584 & + (sumene4*cost2 +sumene2)*(s2+s2_6)
5589 c------------------------------------------------------------------------------
5590 subroutine gcont(rij,r0ij,eps0ij,delta,fcont,fprimcont)
5592 C This procedure calculates two-body contact function g(rij) and its derivative:
5595 C g(rij) = esp0ij*(-0.9375*x+0.625*x**3-0.1875*x**5) ! -1 =< x =< 1
5598 C where x=(rij-r0ij)/delta
5600 C rij - interbody distance, r0ij - contact distance, eps0ij - contact energy
5603 double precision rij,r0ij,eps0ij,fcont,fprimcont
5604 double precision x,x2,x4,delta
5608 if (x.lt.-1.0D0) then
5611 else if (x.le.1.0D0) then
5614 fcont=eps0ij*(x*(-0.9375D0+0.6250D0*x2-0.1875D0*x4)+0.5D0)
5615 fprimcont=eps0ij * (-0.9375D0+1.8750D0*x2-0.9375D0*x4)/delta
5622 c------------------------------------------------------------------------------
5623 subroutine splinthet(theti,delta,ss,ssder)
5624 implicit real*8 (a-h,o-z)
5625 include 'DIMENSIONS'
5626 include 'COMMON.VAR'
5627 include 'COMMON.GEO'
5630 if (theti.gt.pipol) then
5631 call gcont(theti,thetup,1.0d0,delta,ss,ssder)
5633 call gcont(-theti,-thetlow,1.0d0,delta,ss,ssder)
5638 c------------------------------------------------------------------------------
5639 subroutine spline1(x,x0,delta,f0,f1,fprim0,f,fprim)
5641 double precision x,x0,delta,f0,f1,fprim0,f,fprim
5642 double precision ksi,ksi2,ksi3,a1,a2,a3
5643 a1=fprim0*delta/(f1-f0)
5649 f=f0+(f1-f0)*ksi*(a1+ksi*(a2+a3*ksi))
5650 fprim=(f1-f0)/delta*(a1+ksi*(2*a2+3*ksi*a3))
5653 c------------------------------------------------------------------------------
5654 subroutine spline2(x,x0,delta,f0x,f1x,fprim0x,fx)
5656 double precision x,x0,delta,f0x,f1x,fprim0x,fx
5657 double precision ksi,ksi2,ksi3,a1,a2,a3
5662 a2=3*(f1x-f0x)-2*fprim0x*delta
5663 a3=fprim0x*delta-2*(f1x-f0x)
5664 fx=f0x+a1*ksi+a2*ksi2+a3*ksi3
5667 C-----------------------------------------------------------------------------
5669 C-----------------------------------------------------------------------------
5670 subroutine etor(etors,edihcnstr)
5671 implicit real*8 (a-h,o-z)
5672 include 'DIMENSIONS'
5673 include 'COMMON.VAR'
5674 include 'COMMON.GEO'
5675 include 'COMMON.LOCAL'
5676 include 'COMMON.TORSION'
5677 include 'COMMON.INTERACT'
5678 include 'COMMON.DERIV'
5679 include 'COMMON.CHAIN'
5680 include 'COMMON.NAMES'
5681 include 'COMMON.IOUNITS'
5682 include 'COMMON.FFIELD'
5683 include 'COMMON.TORCNSTR'
5684 include 'COMMON.CONTROL'
5686 C Set lprn=.true. for debugging
5690 do i=iphi_start,iphi_end
5692 itori=itortyp(itype(i-2))
5693 itori1=itortyp(itype(i-1))
5696 C Proline-Proline pair is a special case...
5697 if (itori.eq.3 .and. itori1.eq.3) then
5698 if (phii.gt.-dwapi3) then
5700 fac=1.0D0/(1.0D0-cosphi)
5701 etorsi=v1(1,3,3)*fac
5702 etorsi=etorsi+etorsi
5703 etors=etors+etorsi-v1(1,3,3)
5704 if (energy_dec) etors_ii=etors_ii+etorsi-v1(1,3,3)
5705 gloci=gloci-3*fac*etorsi*dsin(3*phii)
5708 v1ij=v1(j+1,itori,itori1)
5709 v2ij=v2(j+1,itori,itori1)
5712 etors=etors+v1ij*cosphi+v2ij*sinphi+dabs(v1ij)+dabs(v2ij)
5713 if (energy_dec) etors_ii=etors_ii+
5714 & v2ij*sinphi+dabs(v1ij)+dabs(v2ij)
5715 gloci=gloci+j*(v2ij*cosphi-v1ij*sinphi)
5719 v1ij=v1(j,itori,itori1)
5720 v2ij=v2(j,itori,itori1)
5723 etors=etors+v1ij*cosphi+v2ij*sinphi+dabs(v1ij)+dabs(v2ij)
5724 if (energy_dec) etors_ii=etors_ii+
5725 & v1ij*cosphi+v2ij*sinphi+dabs(v1ij)+dabs(v2ij)
5726 gloci=gloci+j*(v2ij*cosphi-v1ij*sinphi)
5729 if (energy_dec) write (iout,'(a6,i5,0pf7.3)')
5732 & write (iout,'(2(a3,2x,i3,2x),2i3,6f8.3/26x,6f8.3/)')
5733 & restyp(itype(i-2)),i-2,restyp(itype(i-1)),i-1,itori,itori1,
5734 & (v1(j,itori,itori1),j=1,6),(v2(j,itori,itori1),j=1,6)
5735 gloc(i-3,icg)=gloc(i-3,icg)+wtor*gloci
5736 write (iout,*) 'i=',i,' gloc=',gloc(i-3,icg)
5738 ! 6/20/98 - dihedral angle constraints
5741 itori=idih_constr(i)
5744 if (difi.gt.drange(i)) then
5746 edihcnstr=edihcnstr+0.25d0*ftors*difi**4
5747 gloc(itori-3,icg)=gloc(itori-3,icg)+ftors*difi**3
5748 else if (difi.lt.-drange(i)) then
5750 edihcnstr=edihcnstr+0.25d0*ftors*difi**4
5751 gloc(itori-3,icg)=gloc(itori-3,icg)+ftors*difi**3
5753 ! write (iout,'(2i5,2f8.3,2e14.5)') i,itori,rad2deg*phii,
5754 ! & rad2deg*difi,0.25d0*ftors*difi**4,gloc(itori-3,icg)
5756 ! write (iout,*) 'edihcnstr',edihcnstr
5759 c------------------------------------------------------------------------------
5760 subroutine etor_d(etors_d)
5764 c----------------------------------------------------------------------------
5766 subroutine etor(etors,edihcnstr)
5767 implicit real*8 (a-h,o-z)
5768 include 'DIMENSIONS'
5769 include 'COMMON.VAR'
5770 include 'COMMON.GEO'
5771 include 'COMMON.LOCAL'
5772 include 'COMMON.TORSION'
5773 include 'COMMON.INTERACT'
5774 include 'COMMON.DERIV'
5775 include 'COMMON.CHAIN'
5776 include 'COMMON.NAMES'
5777 include 'COMMON.IOUNITS'
5778 include 'COMMON.FFIELD'
5779 include 'COMMON.TORCNSTR'
5780 include 'COMMON.CONTROL'
5782 C Set lprn=.true. for debugging
5786 do i=iphi_start,iphi_end
5788 itori=itortyp(itype(i-2))
5789 itori1=itortyp(itype(i-1))
5792 C Regular cosine and sine terms
5793 do j=1,nterm(itori,itori1)
5794 v1ij=v1(j,itori,itori1)
5795 v2ij=v2(j,itori,itori1)
5798 etors=etors+v1ij*cosphi+v2ij*sinphi
5799 if (energy_dec) etors_ii=etors_ii+
5800 & v1ij*cosphi+v2ij*sinphi
5801 gloci=gloci+j*(v2ij*cosphi-v1ij*sinphi)
5805 C E = SUM ----------------------------------- - v1
5806 C [v2 cos(phi/2)+v3 sin(phi/2)]^2 + 1
5808 cosphi=dcos(0.5d0*phii)
5809 sinphi=dsin(0.5d0*phii)
5810 do j=1,nlor(itori,itori1)
5811 vl1ij=vlor1(j,itori,itori1)
5812 vl2ij=vlor2(j,itori,itori1)
5813 vl3ij=vlor3(j,itori,itori1)
5814 pom=vl2ij*cosphi+vl3ij*sinphi
5815 pom1=1.0d0/(pom*pom+1.0d0)
5816 etors=etors+vl1ij*pom1
5817 if (energy_dec) etors_ii=etors_ii+
5820 gloci=gloci+vl1ij*(vl3ij*cosphi-vl2ij*sinphi)*pom
5822 C Subtract the constant term
5823 etors=etors-v0(itori,itori1)
5824 if (energy_dec) write (iout,'(a6,i5,0pf7.3)')
5825 & 'etor',i,etors_ii-v0(itori,itori1)
5827 & write (iout,'(2(a3,2x,i3,2x),2i3,6f8.3/26x,6f8.3/)')
5828 & restyp(itype(i-2)),i-2,restyp(itype(i-1)),i-1,itori,itori1,
5829 & (v1(j,itori,itori1),j=1,6),(v2(j,itori,itori1),j=1,6)
5830 gloc(i-3,icg)=gloc(i-3,icg)+wtor*gloci
5831 c write (iout,*) 'i=',i,' gloc=',gloc(i-3,icg)
5833 ! 6/20/98 - dihedral angle constraints
5835 c do i=1,ndih_constr
5836 do i=idihconstr_start,idihconstr_end
5837 itori=idih_constr(i)
5839 difi=pinorm(phii-phi0(i))
5840 if (difi.gt.drange(i)) then
5842 edihcnstr=edihcnstr+0.25d0*ftors*difi**4
5843 gloc(itori-3,icg)=gloc(itori-3,icg)+ftors*difi**3
5844 else if (difi.lt.-drange(i)) then
5846 edihcnstr=edihcnstr+0.25d0*ftors*difi**4
5847 gloc(itori-3,icg)=gloc(itori-3,icg)+ftors*difi**3
5851 c write (iout,*) "gloci", gloc(i-3,icg)
5852 cd write (iout,'(2i5,4f8.3,2e14.5)') i,itori,rad2deg*phii,
5853 cd & rad2deg*phi0(i), rad2deg*drange(i),
5854 cd & rad2deg*difi,0.25d0*ftors*difi**4,gloc(itori-3,icg)
5856 cd write (iout,*) 'edihcnstr',edihcnstr
5859 c----------------------------------------------------------------------------
5860 subroutine etor_d(etors_d)
5861 C 6/23/01 Compute double torsional energy
5862 implicit real*8 (a-h,o-z)
5863 include 'DIMENSIONS'
5864 include 'COMMON.VAR'
5865 include 'COMMON.GEO'
5866 include 'COMMON.LOCAL'
5867 include 'COMMON.TORSION'
5868 include 'COMMON.INTERACT'
5869 include 'COMMON.DERIV'
5870 include 'COMMON.CHAIN'
5871 include 'COMMON.NAMES'
5872 include 'COMMON.IOUNITS'
5873 include 'COMMON.FFIELD'
5874 include 'COMMON.TORCNSTR'
5876 C Set lprn=.true. for debugging
5880 do i=iphid_start,iphid_end
5881 itori=itortyp(itype(i-2))
5882 itori1=itortyp(itype(i-1))
5883 itori2=itortyp(itype(i))
5888 do j=1,ntermd_1(itori,itori1,itori2)
5889 v1cij=v1c(1,j,itori,itori1,itori2)
5890 v1sij=v1s(1,j,itori,itori1,itori2)
5891 v2cij=v1c(2,j,itori,itori1,itori2)
5892 v2sij=v1s(2,j,itori,itori1,itori2)
5893 cosphi1=dcos(j*phii)
5894 sinphi1=dsin(j*phii)
5895 cosphi2=dcos(j*phii1)
5896 sinphi2=dsin(j*phii1)
5897 etors_d=etors_d+v1cij*cosphi1+v1sij*sinphi1+
5898 & v2cij*cosphi2+v2sij*sinphi2
5899 gloci1=gloci1+j*(v1sij*cosphi1-v1cij*sinphi1)
5900 gloci2=gloci2+j*(v2sij*cosphi2-v2cij*sinphi2)
5902 do k=2,ntermd_2(itori,itori1,itori2)
5904 v1cdij = v2c(k,l,itori,itori1,itori2)
5905 v2cdij = v2c(l,k,itori,itori1,itori2)
5906 v1sdij = v2s(k,l,itori,itori1,itori2)
5907 v2sdij = v2s(l,k,itori,itori1,itori2)
5908 cosphi1p2=dcos(l*phii+(k-l)*phii1)
5909 cosphi1m2=dcos(l*phii-(k-l)*phii1)
5910 sinphi1p2=dsin(l*phii+(k-l)*phii1)
5911 sinphi1m2=dsin(l*phii-(k-l)*phii1)
5912 etors_d=etors_d+v1cdij*cosphi1p2+v2cdij*cosphi1m2+
5913 & v1sdij*sinphi1p2+v2sdij*sinphi1m2
5914 gloci1=gloci1+l*(v1sdij*cosphi1p2+v2sdij*cosphi1m2
5915 & -v1cdij*sinphi1p2-v2cdij*sinphi1m2)
5916 gloci2=gloci2+(k-l)*(v1sdij*cosphi1p2-v2sdij*cosphi1m2
5917 & -v1cdij*sinphi1p2+v2cdij*sinphi1m2)
5920 gloc(i-3,icg)=gloc(i-3,icg)+wtor_d*gloci1
5921 gloc(i-2,icg)=gloc(i-2,icg)+wtor_d*gloci2
5922 c write (iout,*) "gloci", gloc(i-3,icg)
5927 c------------------------------------------------------------------------------
5928 subroutine eback_sc_corr(esccor)
5929 c 7/21/2007 Correlations between the backbone-local and side-chain-local
5930 c conformational states; temporarily implemented as differences
5931 c between UNRES torsional potentials (dependent on three types of
5932 c residues) and the torsional potentials dependent on all 20 types
5933 c of residues computed from AM1 energy surfaces of terminally-blocked
5934 c amino-acid residues.
5935 implicit real*8 (a-h,o-z)
5936 include 'DIMENSIONS'
5937 include 'COMMON.VAR'
5938 include 'COMMON.GEO'
5939 include 'COMMON.LOCAL'
5940 include 'COMMON.TORSION'
5941 include 'COMMON.SCCOR'
5942 include 'COMMON.INTERACT'
5943 include 'COMMON.DERIV'
5944 include 'COMMON.CHAIN'
5945 include 'COMMON.NAMES'
5946 include 'COMMON.IOUNITS'
5947 include 'COMMON.FFIELD'
5948 include 'COMMON.CONTROL'
5950 C Set lprn=.true. for debugging
5953 c write (iout,*) "EBACK_SC_COR",iphi_start,iphi_end,nterm_sccor
5955 do i=itau_start,itau_end
5957 isccori=isccortyp(itype(i-2))
5958 isccori1=isccortyp(itype(i-1))
5960 cccc Added 9 May 2012
5961 cc Tauangle is torsional engle depending on the value of first digit
5962 c(see comment below)
5963 cc Omicron is flat angle depending on the value of first digit
5964 c(see comment below)
5967 do intertyp=1,3 !intertyp
5968 cc Added 09 May 2012 (Adasko)
5969 cc Intertyp means interaction type of backbone mainchain correlation:
5970 c 1 = SC...Ca...Ca...Ca
5971 c 2 = Ca...Ca...Ca...SC
5972 c 3 = SC...Ca...Ca...SCi
5974 if (((intertyp.eq.3).and.((itype(i-2).eq.10).or.
5975 & (itype(i-1).eq.10).or.(itype(i-2).eq.21).or.
5976 & (itype(i-1).eq.21)))
5977 & .or. ((intertyp.eq.1).and.((itype(i-2).eq.10)
5978 & .or.(itype(i-2).eq.21)))
5979 & .or.((intertyp.eq.2).and.((itype(i-1).eq.10).or.
5980 & (itype(i-1).eq.21)))) cycle
5981 if ((intertyp.eq.2).and.(i.eq.4).and.(itype(1).eq.21)) cycle
5982 if ((intertyp.eq.1).and.(i.eq.nres).and.(itype(nres).eq.21))
5984 do j=1,nterm_sccor(isccori,isccori1)
5985 v1ij=v1sccor(j,intertyp,isccori,isccori1)
5986 v2ij=v2sccor(j,intertyp,isccori,isccori1)
5987 cosphi=dcos(j*tauangle(intertyp,i))
5988 sinphi=dsin(j*tauangle(intertyp,i))
5989 esccor=esccor+v1ij*cosphi+v2ij*sinphi
5990 gloci=gloci+j*(v2ij*cosphi-v1ij*sinphi)
5992 gloc_sc(intertyp,i-3,icg)=gloc_sc(intertyp,i-3,icg)+wsccor*gloci
5993 c write (iout,*) "WTF",intertyp,i,itype(i),v1ij*cosphi+v2ij*sinphi
5994 c &gloc_sc(intertyp,i-3,icg)
5996 & write (iout,'(2(a3,2x,i3,2x),2i3,6f8.3/26x,6f8.3/)')
5997 & restyp(itype(i-2)),i-2,restyp(itype(i-1)),i-1,itori,itori1,
5998 & (v1sccor(j,intertyp,itori,itori1),j=1,6)
5999 & ,(v2sccor(j,intertyp,itori,itori1),j=1,6)
6000 gsccor_loc(i-3)=gsccor_loc(i-3)+gloci
6004 c write (iout,*) "W@T@F", gloc_sc(1,i,icg),gloc(i,icg)
6008 c----------------------------------------------------------------------------
6009 subroutine multibody(ecorr)
6010 C This subroutine calculates multi-body contributions to energy following
6011 C the idea of Skolnick et al. If side chains I and J make a contact and
6012 C at the same time side chains I+1 and J+1 make a contact, an extra
6013 C contribution equal to sqrt(eps(i,j)*eps(i+1,j+1)) is added.
6014 implicit real*8 (a-h,o-z)
6015 include 'DIMENSIONS'
6016 include 'COMMON.IOUNITS'
6017 include 'COMMON.DERIV'
6018 include 'COMMON.INTERACT'
6019 include 'COMMON.CONTACTS'
6020 double precision gx(3),gx1(3)
6023 C Set lprn=.true. for debugging
6027 write (iout,'(a)') 'Contact function values:'
6029 write (iout,'(i2,20(1x,i2,f10.5))')
6030 & i,(jcont(j,i),facont(j,i),j=1,num_cont(i))
6045 num_conti=num_cont(i)
6046 num_conti1=num_cont(i1)
6051 if (j1.eq.j+ishift .or. j1.eq.j-ishift) then
6052 cd write(iout,*)'i=',i,' j=',j,' i1=',i1,' j1=',j1,
6053 cd & ' ishift=',ishift
6054 C Contacts I--J and I+ISHIFT--J+-ISHIFT1 occur simultaneously.
6055 C The system gains extra energy.
6056 ecorr=ecorr+esccorr(i,j,i1,j1,jj,kk)
6057 endif ! j1==j+-ishift
6066 c------------------------------------------------------------------------------
6067 double precision function esccorr(i,j,k,l,jj,kk)
6068 implicit real*8 (a-h,o-z)
6069 include 'DIMENSIONS'
6070 include 'COMMON.IOUNITS'
6071 include 'COMMON.DERIV'
6072 include 'COMMON.INTERACT'
6073 include 'COMMON.CONTACTS'
6074 double precision gx(3),gx1(3)
6079 cd write (iout,'(4i5,3f10.5)') i,j,k,l,eij,ekl,-eij*ekl
6080 C Calculate the multi-body contribution to energy.
6081 C Calculate multi-body contributions to the gradient.
6082 cd write (iout,'(2(2i3,3f10.5))')i,j,(gacont(m,jj,i),m=1,3),
6083 cd & k,l,(gacont(m,kk,k),m=1,3)
6085 gx(m) =ekl*gacont(m,jj,i)
6086 gx1(m)=eij*gacont(m,kk,k)
6087 gradxorr(m,i)=gradxorr(m,i)-gx(m)
6088 gradxorr(m,j)=gradxorr(m,j)+gx(m)
6089 gradxorr(m,k)=gradxorr(m,k)-gx1(m)
6090 gradxorr(m,l)=gradxorr(m,l)+gx1(m)
6094 gradcorr(ll,m)=gradcorr(ll,m)+gx(ll)
6099 gradcorr(ll,m)=gradcorr(ll,m)+gx1(ll)
6105 c------------------------------------------------------------------------------
6106 subroutine multibody_hb(ecorr,ecorr5,ecorr6,n_corr,n_corr1)
6107 C This subroutine calculates multi-body contributions to hydrogen-bonding
6108 implicit real*8 (a-h,o-z)
6109 include 'DIMENSIONS'
6110 include 'COMMON.IOUNITS'
6113 parameter (max_cont=maxconts)
6114 parameter (max_dim=26)
6115 integer source,CorrelType,CorrelID,CorrelType1,CorrelID1,Error
6116 double precision zapas(max_dim,maxconts,max_fg_procs),
6117 & zapas_recv(max_dim,maxconts,max_fg_procs)
6118 common /przechowalnia/ zapas
6119 integer status(MPI_STATUS_SIZE),req(maxconts*2),
6120 & status_array(MPI_STATUS_SIZE,maxconts*2)
6122 include 'COMMON.SETUP'
6123 include 'COMMON.FFIELD'
6124 include 'COMMON.DERIV'
6125 include 'COMMON.INTERACT'
6126 include 'COMMON.CONTACTS'
6127 include 'COMMON.CONTROL'
6128 include 'COMMON.LOCAL'
6129 double precision gx(3),gx1(3),time00
6132 C Set lprn=.true. for debugging
6137 if (nfgtasks.le.1) goto 30
6139 write (iout,'(a)') 'Contact function values before RECEIVE:'
6141 write (iout,'(2i3,50(1x,i2,f5.2))')
6142 & i,num_cont_hb(i),(jcont_hb(j,i),facont_hb(j,i),
6143 & j=1,num_cont_hb(i))
6147 do i=1,ntask_cont_from
6150 do i=1,ntask_cont_to
6153 c write (iout,*) "ntask_cont_from",ntask_cont_from," ntask_cont_to",
6155 C Make the list of contacts to send to send to other procesors
6156 c write (iout,*) "limits",max0(iturn4_end-1,iatel_s),iturn3_end
6158 do i=iturn3_start,iturn3_end
6159 c write (iout,*) "make contact list turn3",i," num_cont",
6161 call add_hb_contact(i,i+2,iturn3_sent_local(1,i))
6163 do i=iturn4_start,iturn4_end
6164 c write (iout,*) "make contact list turn4",i," num_cont",
6166 call add_hb_contact(i,i+3,iturn4_sent_local(1,i))
6170 c write (iout,*) "make contact list longrange",i,ii," num_cont",
6172 do j=1,num_cont_hb(i)
6175 iproc=iint_sent_local(k,jjc,ii)
6176 c write (iout,*) "i",i," j",j," k",k," jjc",jjc," iproc",iproc
6177 if (iproc.gt.0) then
6178 ncont_sent(iproc)=ncont_sent(iproc)+1
6179 nn=ncont_sent(iproc)
6181 zapas(2,nn,iproc)=jjc
6182 zapas(3,nn,iproc)=facont_hb(j,i)
6183 zapas(4,nn,iproc)=ees0p(j,i)
6184 zapas(5,nn,iproc)=ees0m(j,i)
6185 zapas(6,nn,iproc)=gacont_hbr(1,j,i)
6186 zapas(7,nn,iproc)=gacont_hbr(2,j,i)
6187 zapas(8,nn,iproc)=gacont_hbr(3,j,i)
6188 zapas(9,nn,iproc)=gacontm_hb1(1,j,i)
6189 zapas(10,nn,iproc)=gacontm_hb1(2,j,i)
6190 zapas(11,nn,iproc)=gacontm_hb1(3,j,i)
6191 zapas(12,nn,iproc)=gacontp_hb1(1,j,i)
6192 zapas(13,nn,iproc)=gacontp_hb1(2,j,i)
6193 zapas(14,nn,iproc)=gacontp_hb1(3,j,i)
6194 zapas(15,nn,iproc)=gacontm_hb2(1,j,i)
6195 zapas(16,nn,iproc)=gacontm_hb2(2,j,i)
6196 zapas(17,nn,iproc)=gacontm_hb2(3,j,i)
6197 zapas(18,nn,iproc)=gacontp_hb2(1,j,i)
6198 zapas(19,nn,iproc)=gacontp_hb2(2,j,i)
6199 zapas(20,nn,iproc)=gacontp_hb2(3,j,i)
6200 zapas(21,nn,iproc)=gacontm_hb3(1,j,i)
6201 zapas(22,nn,iproc)=gacontm_hb3(2,j,i)
6202 zapas(23,nn,iproc)=gacontm_hb3(3,j,i)
6203 zapas(24,nn,iproc)=gacontp_hb3(1,j,i)
6204 zapas(25,nn,iproc)=gacontp_hb3(2,j,i)
6205 zapas(26,nn,iproc)=gacontp_hb3(3,j,i)
6212 & "Numbers of contacts to be sent to other processors",
6213 & (ncont_sent(i),i=1,ntask_cont_to)
6214 write (iout,*) "Contacts sent"
6215 do ii=1,ntask_cont_to
6217 iproc=itask_cont_to(ii)
6218 write (iout,*) nn," contacts to processor",iproc,
6219 & " of CONT_TO_COMM group"
6221 write(iout,'(2f5.0,4f10.5)')(zapas(j,i,ii),j=1,5)
6229 CorrelID1=nfgtasks+fg_rank+1
6231 C Receive the numbers of needed contacts from other processors
6232 do ii=1,ntask_cont_from
6233 iproc=itask_cont_from(ii)
6235 call MPI_Irecv(ncont_recv(ii),1,MPI_INTEGER,iproc,CorrelType,
6236 & FG_COMM,req(ireq),IERR)
6238 c write (iout,*) "IRECV ended"
6240 C Send the number of contacts needed by other processors
6241 do ii=1,ntask_cont_to
6242 iproc=itask_cont_to(ii)
6244 call MPI_Isend(ncont_sent(ii),1,MPI_INTEGER,iproc,CorrelType,
6245 & FG_COMM,req(ireq),IERR)
6247 c write (iout,*) "ISEND ended"
6248 c write (iout,*) "number of requests (nn)",ireq
6251 & call MPI_Waitall(ireq,req,status_array,ierr)
6253 c & "Numbers of contacts to be received from other processors",
6254 c & (ncont_recv(i),i=1,ntask_cont_from)
6258 do ii=1,ntask_cont_from
6259 iproc=itask_cont_from(ii)
6261 c write (iout,*) "Receiving",nn," contacts from processor",iproc,
6262 c & " of CONT_TO_COMM group"
6266 call MPI_Irecv(zapas_recv(1,1,ii),nn*max_dim,
6267 & MPI_DOUBLE_PRECISION,iproc,CorrelType1,FG_COMM,req(ireq),IERR)
6268 c write (iout,*) "ireq,req",ireq,req(ireq)
6271 C Send the contacts to processors that need them
6272 do ii=1,ntask_cont_to
6273 iproc=itask_cont_to(ii)
6275 c write (iout,*) nn," contacts to processor",iproc,
6276 c & " of CONT_TO_COMM group"
6279 call MPI_Isend(zapas(1,1,ii),nn*max_dim,MPI_DOUBLE_PRECISION,
6280 & iproc,CorrelType1,FG_COMM,req(ireq),IERR)
6281 c write (iout,*) "ireq,req",ireq,req(ireq)
6283 c write(iout,'(2f5.0,4f10.5)')(zapas(j,i,ii),j=1,5)
6287 c write (iout,*) "number of requests (contacts)",ireq
6288 c write (iout,*) "req",(req(i),i=1,4)
6291 & call MPI_Waitall(ireq,req,status_array,ierr)
6292 do iii=1,ntask_cont_from
6293 iproc=itask_cont_from(iii)
6296 write (iout,*) "Received",nn," contacts from processor",iproc,
6297 & " of CONT_FROM_COMM group"
6300 write(iout,'(2f5.0,4f10.5)')(zapas_recv(j,i,iii),j=1,5)
6305 ii=zapas_recv(1,i,iii)
6306 c Flag the received contacts to prevent double-counting
6307 jj=-zapas_recv(2,i,iii)
6308 c write (iout,*) "iii",iii," i",i," ii",ii," jj",jj
6310 nnn=num_cont_hb(ii)+1
6313 facont_hb(nnn,ii)=zapas_recv(3,i,iii)
6314 ees0p(nnn,ii)=zapas_recv(4,i,iii)
6315 ees0m(nnn,ii)=zapas_recv(5,i,iii)
6316 gacont_hbr(1,nnn,ii)=zapas_recv(6,i,iii)
6317 gacont_hbr(2,nnn,ii)=zapas_recv(7,i,iii)
6318 gacont_hbr(3,nnn,ii)=zapas_recv(8,i,iii)
6319 gacontm_hb1(1,nnn,ii)=zapas_recv(9,i,iii)
6320 gacontm_hb1(2,nnn,ii)=zapas_recv(10,i,iii)
6321 gacontm_hb1(3,nnn,ii)=zapas_recv(11,i,iii)
6322 gacontp_hb1(1,nnn,ii)=zapas_recv(12,i,iii)
6323 gacontp_hb1(2,nnn,ii)=zapas_recv(13,i,iii)
6324 gacontp_hb1(3,nnn,ii)=zapas_recv(14,i,iii)
6325 gacontm_hb2(1,nnn,ii)=zapas_recv(15,i,iii)
6326 gacontm_hb2(2,nnn,ii)=zapas_recv(16,i,iii)
6327 gacontm_hb2(3,nnn,ii)=zapas_recv(17,i,iii)
6328 gacontp_hb2(1,nnn,ii)=zapas_recv(18,i,iii)
6329 gacontp_hb2(2,nnn,ii)=zapas_recv(19,i,iii)
6330 gacontp_hb2(3,nnn,ii)=zapas_recv(20,i,iii)
6331 gacontm_hb3(1,nnn,ii)=zapas_recv(21,i,iii)
6332 gacontm_hb3(2,nnn,ii)=zapas_recv(22,i,iii)
6333 gacontm_hb3(3,nnn,ii)=zapas_recv(23,i,iii)
6334 gacontp_hb3(1,nnn,ii)=zapas_recv(24,i,iii)
6335 gacontp_hb3(2,nnn,ii)=zapas_recv(25,i,iii)
6336 gacontp_hb3(3,nnn,ii)=zapas_recv(26,i,iii)
6341 write (iout,'(a)') 'Contact function values after receive:'
6343 write (iout,'(2i3,50(1x,i3,f5.2))')
6344 & i,num_cont_hb(i),(jcont_hb(j,i),facont_hb(j,i),
6345 & j=1,num_cont_hb(i))
6352 write (iout,'(a)') 'Contact function values:'
6354 write (iout,'(2i3,50(1x,i3,f5.2))')
6355 & i,num_cont_hb(i),(jcont_hb(j,i),facont_hb(j,i),
6356 & j=1,num_cont_hb(i))
6360 C Remove the loop below after debugging !!!
6367 C Calculate the local-electrostatic correlation terms
6368 do i=min0(iatel_s,iturn4_start),max0(iatel_e,iturn3_end)
6370 num_conti=num_cont_hb(i)
6371 num_conti1=num_cont_hb(i+1)
6378 c write (iout,*) 'i=',i,' j=',j,' i1=',i1,' j1=',j1,
6379 c & ' jj=',jj,' kk=',kk
6380 if ((j.gt.0 .and. j1.gt.0 .or. j.gt.0 .and. j1.lt.0
6381 & .or. j.lt.0 .and. j1.gt.0) .and.
6382 & (jp1.eq.jp+1 .or. jp1.eq.jp-1)) then
6383 C Contacts I-J and (I+1)-(J+1) or (I+1)-(J-1) occur simultaneously.
6384 C The system gains extra energy.
6385 ecorr=ecorr+ehbcorr(i,jp,i+1,jp1,jj,kk,0.72D0,0.32D0)
6386 if (energy_dec) write (iout,'(a6,2i5,0pf7.3)')
6387 & 'ecorrh',i,j,ehbcorr(i,j,i+1,j1,jj,kk,0.72D0,0.32D0)
6389 else if (j1.eq.j) then
6390 C Contacts I-J and I-(J+1) occur simultaneously.
6391 C The system loses extra energy.
6392 c ecorr=ecorr+ehbcorr(i,j,i+1,j,jj,kk,0.60D0,-0.40D0)
6397 c write (iout,*) 'i=',i,' j=',j,' i1=',i1,' j1=',j1,
6398 c & ' jj=',jj,' kk=',kk
6400 C Contacts I-J and (I+1)-J occur simultaneously.
6401 C The system loses extra energy.
6402 c ecorr=ecorr+ehbcorr(i,j,i,j+1,jj,kk,0.60D0,-0.40D0)
6409 c------------------------------------------------------------------------------
6410 subroutine add_hb_contact(ii,jj,itask)
6411 implicit real*8 (a-h,o-z)
6412 include "DIMENSIONS"
6413 include "COMMON.IOUNITS"
6416 parameter (max_cont=maxconts)
6417 parameter (max_dim=26)
6418 include "COMMON.CONTACTS"
6419 double precision zapas(max_dim,maxconts,max_fg_procs),
6420 & zapas_recv(max_dim,maxconts,max_fg_procs)
6421 common /przechowalnia/ zapas
6422 integer i,j,ii,jj,iproc,itask(4),nn
6423 c write (iout,*) "itask",itask
6426 if (iproc.gt.0) then
6427 do j=1,num_cont_hb(ii)
6429 c write (iout,*) "i",ii," j",jj," jjc",jjc
6431 ncont_sent(iproc)=ncont_sent(iproc)+1
6432 nn=ncont_sent(iproc)
6433 zapas(1,nn,iproc)=ii
6434 zapas(2,nn,iproc)=jjc
6435 zapas(3,nn,iproc)=facont_hb(j,ii)
6436 zapas(4,nn,iproc)=ees0p(j,ii)
6437 zapas(5,nn,iproc)=ees0m(j,ii)
6438 zapas(6,nn,iproc)=gacont_hbr(1,j,ii)
6439 zapas(7,nn,iproc)=gacont_hbr(2,j,ii)
6440 zapas(8,nn,iproc)=gacont_hbr(3,j,ii)
6441 zapas(9,nn,iproc)=gacontm_hb1(1,j,ii)
6442 zapas(10,nn,iproc)=gacontm_hb1(2,j,ii)
6443 zapas(11,nn,iproc)=gacontm_hb1(3,j,ii)
6444 zapas(12,nn,iproc)=gacontp_hb1(1,j,ii)
6445 zapas(13,nn,iproc)=gacontp_hb1(2,j,ii)
6446 zapas(14,nn,iproc)=gacontp_hb1(3,j,ii)
6447 zapas(15,nn,iproc)=gacontm_hb2(1,j,ii)
6448 zapas(16,nn,iproc)=gacontm_hb2(2,j,ii)
6449 zapas(17,nn,iproc)=gacontm_hb2(3,j,ii)
6450 zapas(18,nn,iproc)=gacontp_hb2(1,j,ii)
6451 zapas(19,nn,iproc)=gacontp_hb2(2,j,ii)
6452 zapas(20,nn,iproc)=gacontp_hb2(3,j,ii)
6453 zapas(21,nn,iproc)=gacontm_hb3(1,j,ii)
6454 zapas(22,nn,iproc)=gacontm_hb3(2,j,ii)
6455 zapas(23,nn,iproc)=gacontm_hb3(3,j,ii)
6456 zapas(24,nn,iproc)=gacontp_hb3(1,j,ii)
6457 zapas(25,nn,iproc)=gacontp_hb3(2,j,ii)
6458 zapas(26,nn,iproc)=gacontp_hb3(3,j,ii)
6466 c------------------------------------------------------------------------------
6467 subroutine multibody_eello(ecorr,ecorr5,ecorr6,eturn6,n_corr,
6469 C This subroutine calculates multi-body contributions to hydrogen-bonding
6470 implicit real*8 (a-h,o-z)
6471 include 'DIMENSIONS'
6472 include 'COMMON.IOUNITS'
6475 parameter (max_cont=maxconts)
6476 parameter (max_dim=70)
6477 integer source,CorrelType,CorrelID,CorrelType1,CorrelID1,Error
6478 double precision zapas(max_dim,maxconts,max_fg_procs),
6479 & zapas_recv(max_dim,maxconts,max_fg_procs)
6480 common /przechowalnia/ zapas
6481 integer status(MPI_STATUS_SIZE),req(maxconts*2),
6482 & status_array(MPI_STATUS_SIZE,maxconts*2)
6484 include 'COMMON.SETUP'
6485 include 'COMMON.FFIELD'
6486 include 'COMMON.DERIV'
6487 include 'COMMON.LOCAL'
6488 include 'COMMON.INTERACT'
6489 include 'COMMON.CONTACTS'
6490 include 'COMMON.CHAIN'
6491 include 'COMMON.CONTROL'
6492 double precision gx(3),gx1(3)
6493 integer num_cont_hb_old(maxres)
6495 double precision eello4,eello5,eelo6,eello_turn6
6496 external eello4,eello5,eello6,eello_turn6
6497 C Set lprn=.true. for debugging
6502 num_cont_hb_old(i)=num_cont_hb(i)
6506 if (nfgtasks.le.1) goto 30
6508 write (iout,'(a)') 'Contact function values before RECEIVE:'
6510 write (iout,'(2i3,50(1x,i2,f5.2))')
6511 & i,num_cont_hb(i),(jcont_hb(j,i),facont_hb(j,i),
6512 & j=1,num_cont_hb(i))
6516 do i=1,ntask_cont_from
6519 do i=1,ntask_cont_to
6522 c write (iout,*) "ntask_cont_from",ntask_cont_from," ntask_cont_to",
6524 C Make the list of contacts to send to send to other procesors
6525 do i=iturn3_start,iturn3_end
6526 c write (iout,*) "make contact list turn3",i," num_cont",
6528 call add_hb_contact_eello(i,i+2,iturn3_sent_local(1,i))
6530 do i=iturn4_start,iturn4_end
6531 c write (iout,*) "make contact list turn4",i," num_cont",
6533 call add_hb_contact_eello(i,i+3,iturn4_sent_local(1,i))
6537 c write (iout,*) "make contact list longrange",i,ii," num_cont",
6539 do j=1,num_cont_hb(i)
6542 iproc=iint_sent_local(k,jjc,ii)
6543 c write (iout,*) "i",i," j",j," k",k," jjc",jjc," iproc",iproc
6544 if (iproc.ne.0) then
6545 ncont_sent(iproc)=ncont_sent(iproc)+1
6546 nn=ncont_sent(iproc)
6548 zapas(2,nn,iproc)=jjc
6549 zapas(3,nn,iproc)=d_cont(j,i)
6553 zapas(ind,nn,iproc)=grij_hb_cont(kk,j,i)
6558 zapas(ind,nn,iproc)=a_chuj(ll,kk,j,i)
6566 zapas(ind,nn,iproc)=a_chuj_der(mm,ll,kk,jj,j,i)
6577 & "Numbers of contacts to be sent to other processors",
6578 & (ncont_sent(i),i=1,ntask_cont_to)
6579 write (iout,*) "Contacts sent"
6580 do ii=1,ntask_cont_to
6582 iproc=itask_cont_to(ii)
6583 write (iout,*) nn," contacts to processor",iproc,
6584 & " of CONT_TO_COMM group"
6586 write(iout,'(2f5.0,10f10.5)')(zapas(j,i,ii),j=1,10)
6594 CorrelID1=nfgtasks+fg_rank+1
6596 C Receive the numbers of needed contacts from other processors
6597 do ii=1,ntask_cont_from
6598 iproc=itask_cont_from(ii)
6600 call MPI_Irecv(ncont_recv(ii),1,MPI_INTEGER,iproc,CorrelType,
6601 & FG_COMM,req(ireq),IERR)
6603 c write (iout,*) "IRECV ended"
6605 C Send the number of contacts needed by other processors
6606 do ii=1,ntask_cont_to
6607 iproc=itask_cont_to(ii)
6609 call MPI_Isend(ncont_sent(ii),1,MPI_INTEGER,iproc,CorrelType,
6610 & FG_COMM,req(ireq),IERR)
6612 c write (iout,*) "ISEND ended"
6613 c write (iout,*) "number of requests (nn)",ireq
6616 & call MPI_Waitall(ireq,req,status_array,ierr)
6618 c & "Numbers of contacts to be received from other processors",
6619 c & (ncont_recv(i),i=1,ntask_cont_from)
6623 do ii=1,ntask_cont_from
6624 iproc=itask_cont_from(ii)
6626 c write (iout,*) "Receiving",nn," contacts from processor",iproc,
6627 c & " of CONT_TO_COMM group"
6631 call MPI_Irecv(zapas_recv(1,1,ii),nn*max_dim,
6632 & MPI_DOUBLE_PRECISION,iproc,CorrelType1,FG_COMM,req(ireq),IERR)
6633 c write (iout,*) "ireq,req",ireq,req(ireq)
6636 C Send the contacts to processors that need them
6637 do ii=1,ntask_cont_to
6638 iproc=itask_cont_to(ii)
6640 c write (iout,*) nn," contacts to processor",iproc,
6641 c & " of CONT_TO_COMM group"
6644 call MPI_Isend(zapas(1,1,ii),nn*max_dim,MPI_DOUBLE_PRECISION,
6645 & iproc,CorrelType1,FG_COMM,req(ireq),IERR)
6646 c write (iout,*) "ireq,req",ireq,req(ireq)
6648 c write(iout,'(2f5.0,4f10.5)')(zapas(j,i,ii),j=1,5)
6652 c write (iout,*) "number of requests (contacts)",ireq
6653 c write (iout,*) "req",(req(i),i=1,4)
6656 & call MPI_Waitall(ireq,req,status_array,ierr)
6657 do iii=1,ntask_cont_from
6658 iproc=itask_cont_from(iii)
6661 write (iout,*) "Received",nn," contacts from processor",iproc,
6662 & " of CONT_FROM_COMM group"
6665 write(iout,'(2f5.0,10f10.5)')(zapas_recv(j,i,iii),j=1,10)
6670 ii=zapas_recv(1,i,iii)
6671 c Flag the received contacts to prevent double-counting
6672 jj=-zapas_recv(2,i,iii)
6673 c write (iout,*) "iii",iii," i",i," ii",ii," jj",jj
6675 nnn=num_cont_hb(ii)+1
6678 d_cont(nnn,ii)=zapas_recv(3,i,iii)
6682 grij_hb_cont(kk,nnn,ii)=zapas_recv(ind,i,iii)
6687 a_chuj(ll,kk,nnn,ii)=zapas_recv(ind,i,iii)
6695 a_chuj_der(mm,ll,kk,jj,nnn,ii)=zapas_recv(ind,i,iii)
6704 write (iout,'(a)') 'Contact function values after receive:'
6706 write (iout,'(2i3,50(1x,i3,5f6.3))')
6707 & i,num_cont_hb(i),(jcont_hb(j,i),d_cont(j,i),
6708 & ((a_chuj(ll,kk,j,i),ll=1,2),kk=1,2),j=1,num_cont_hb(i))
6715 write (iout,'(a)') 'Contact function values:'
6717 write (iout,'(2i3,50(1x,i2,5f6.3))')
6718 & i,num_cont_hb(i),(jcont_hb(j,i),d_cont(j,i),
6719 & ((a_chuj(ll,kk,j,i),ll=1,2),kk=1,2),j=1,num_cont_hb(i))
6725 C Remove the loop below after debugging !!!
6732 C Calculate the dipole-dipole interaction energies
6733 if (wcorr6.gt.0.0d0 .or. wturn6.gt.0.0d0) then
6734 do i=iatel_s,iatel_e+1
6735 num_conti=num_cont_hb(i)
6744 C Calculate the local-electrostatic correlation terms
6745 c write (iout,*) "gradcorr5 in eello5 before loop"
6747 c write (iout,'(i5,3f10.5)')
6748 c & iii,(gradcorr5(jjj,iii),jjj=1,3)
6750 do i=min0(iatel_s,iturn4_start),max0(iatel_e+1,iturn3_end+1)
6751 c write (iout,*) "corr loop i",i
6753 num_conti=num_cont_hb(i)
6754 num_conti1=num_cont_hb(i+1)
6761 c write (iout,*) 'i=',i,' j=',j,' i1=',i1,' j1=',j1,
6762 c & ' jj=',jj,' kk=',kk
6763 c if (j1.eq.j+1 .or. j1.eq.j-1) then
6764 if ((j.gt.0 .and. j1.gt.0 .or. j.gt.0 .and. j1.lt.0
6765 & .or. j.lt.0 .and. j1.gt.0) .and.
6766 & (jp1.eq.jp+1 .or. jp1.eq.jp-1)) then
6767 C Contacts I-J and (I+1)-(J+1) or (I+1)-(J-1) occur simultaneously.
6768 C The system gains extra energy.
6770 sqd1=dsqrt(d_cont(jj,i))
6771 sqd2=dsqrt(d_cont(kk,i1))
6772 sred_geom = sqd1*sqd2
6773 IF (sred_geom.lt.cutoff_corr) THEN
6774 call gcont(sred_geom,r0_corr,1.0D0,delt_corr,
6776 cd write (iout,*) 'i=',i,' j=',jp,' i1=',i1,' j1=',jp1,
6777 cd & ' jj=',jj,' kk=',kk
6778 fac_prim1=0.5d0*sqd2/sqd1*fprimcont
6779 fac_prim2=0.5d0*sqd1/sqd2*fprimcont
6781 g_contij(l,1)=fac_prim1*grij_hb_cont(l,jj,i)
6782 g_contij(l,2)=fac_prim2*grij_hb_cont(l,kk,i1)
6785 cd write (iout,*) 'sred_geom=',sred_geom,
6786 cd & ' ekont=',ekont,' fprim=',fprimcont,
6787 cd & ' fac_prim1',fac_prim1,' fac_prim2',fac_prim2
6788 cd write (iout,*) "g_contij",g_contij
6789 cd write (iout,*) "grij_hb_cont i",grij_hb_cont(:,jj,i)
6790 cd write (iout,*) "grij_hb_cont i1",grij_hb_cont(:,jj,i1)
6791 call calc_eello(i,jp,i+1,jp1,jj,kk)
6792 if (wcorr4.gt.0.0d0)
6793 & ecorr=ecorr+eello4(i,jp,i+1,jp1,jj,kk)
6794 if (energy_dec.and.wcorr4.gt.0.0d0)
6795 1 write (iout,'(a6,4i5,0pf7.3)')
6796 2 'ecorr4',i,j,i+1,j1,eello4(i,jp,i+1,jp1,jj,kk)
6797 c write (iout,*) "gradcorr5 before eello5"
6799 c write (iout,'(i5,3f10.5)')
6800 c & iii,(gradcorr5(jjj,iii),jjj=1,3)
6802 if (wcorr5.gt.0.0d0)
6803 & ecorr5=ecorr5+eello5(i,jp,i+1,jp1,jj,kk)
6804 c write (iout,*) "gradcorr5 after eello5"
6806 c write (iout,'(i5,3f10.5)')
6807 c & iii,(gradcorr5(jjj,iii),jjj=1,3)
6809 if (energy_dec.and.wcorr5.gt.0.0d0)
6810 1 write (iout,'(a6,4i5,0pf7.3)')
6811 2 'ecorr5',i,j,i+1,j1,eello5(i,jp,i+1,jp1,jj,kk)
6812 cd write(2,*)'wcorr6',wcorr6,' wturn6',wturn6
6813 cd write(2,*)'ijkl',i,jp,i+1,jp1
6814 if (wcorr6.gt.0.0d0 .and. (jp.ne.i+4 .or. jp1.ne.i+3
6815 & .or. wturn6.eq.0.0d0))then
6816 cd write (iout,*) '******ecorr6: i,j,i+1,j1',i,j,i+1,j1
6817 ecorr6=ecorr6+eello6(i,jp,i+1,jp1,jj,kk)
6818 if (energy_dec) write (iout,'(a6,4i5,0pf7.3)')
6819 1 'ecorr6',i,j,i+1,j1,eello6(i,jp,i+1,jp1,jj,kk)
6820 cd write (iout,*) 'ecorr',ecorr,' ecorr5=',ecorr5,
6821 cd & 'ecorr6=',ecorr6
6822 cd write (iout,'(4e15.5)') sred_geom,
6823 cd & dabs(eello4(i,jp,i+1,jp1,jj,kk)),
6824 cd & dabs(eello5(i,jp,i+1,jp1,jj,kk)),
6825 cd & dabs(eello6(i,jp,i+1,jp1,jj,kk))
6826 else if (wturn6.gt.0.0d0
6827 & .and. (jp.eq.i+4 .and. jp1.eq.i+3)) then
6828 cd write (iout,*) '******eturn6: i,j,i+1,j1',i,jip,i+1,jp1
6829 eturn6=eturn6+eello_turn6(i,jj,kk)
6830 if (energy_dec) write (iout,'(a6,4i5,0pf7.3)')
6831 1 'eturn6',i,j,i+1,j1,eello_turn6(i,jj,kk)
6832 cd write (2,*) 'multibody_eello:eturn6',eturn6
6841 num_cont_hb(i)=num_cont_hb_old(i)
6843 c write (iout,*) "gradcorr5 in eello5"
6845 c write (iout,'(i5,3f10.5)')
6846 c & iii,(gradcorr5(jjj,iii),jjj=1,3)
6850 c------------------------------------------------------------------------------
6851 subroutine add_hb_contact_eello(ii,jj,itask)
6852 implicit real*8 (a-h,o-z)
6853 include "DIMENSIONS"
6854 include "COMMON.IOUNITS"
6857 parameter (max_cont=maxconts)
6858 parameter (max_dim=70)
6859 include "COMMON.CONTACTS"
6860 double precision zapas(max_dim,maxconts,max_fg_procs),
6861 & zapas_recv(max_dim,maxconts,max_fg_procs)
6862 common /przechowalnia/ zapas
6863 integer i,j,ii,jj,iproc,itask(4),nn
6864 c write (iout,*) "itask",itask
6867 if (iproc.gt.0) then
6868 do j=1,num_cont_hb(ii)
6870 c write (iout,*) "send turns i",ii," j",jj," jjc",jjc
6872 ncont_sent(iproc)=ncont_sent(iproc)+1
6873 nn=ncont_sent(iproc)
6874 zapas(1,nn,iproc)=ii
6875 zapas(2,nn,iproc)=jjc
6876 zapas(3,nn,iproc)=d_cont(j,ii)
6880 zapas(ind,nn,iproc)=grij_hb_cont(kk,j,ii)
6885 zapas(ind,nn,iproc)=a_chuj(ll,kk,j,ii)
6893 zapas(ind,nn,iproc)=a_chuj_der(mm,ll,kk,jj,j,ii)
6905 c------------------------------------------------------------------------------
6906 double precision function ehbcorr(i,j,k,l,jj,kk,coeffp,coeffm)
6907 implicit real*8 (a-h,o-z)
6908 include 'DIMENSIONS'
6909 include 'COMMON.IOUNITS'
6910 include 'COMMON.DERIV'
6911 include 'COMMON.INTERACT'
6912 include 'COMMON.CONTACTS'
6913 double precision gx(3),gx1(3)
6923 ees=-(coeffp*ees0pij*ees0pkl+coeffm*ees0mij*ees0mkl)
6924 cd ees=-(coeffp*ees0pkl+coeffm*ees0mkl)
6925 C Following 4 lines for diagnostics.
6930 c write (iout,'(2(a,2i3,a,f10.5,a,2f10.5),a,f10.5,a,$)')
6931 c & 'Contacts ',i,j,
6932 c & ' eij',eij,' eesij',ees0pij,ees0mij,' and ',k,l
6933 c & ,' fcont ',ekl,' eeskl',ees0pkl,ees0mkl,' energy=',ekont*ees,
6935 C Calculate the multi-body contribution to energy.
6936 c ecorr=ecorr+ekont*ees
6937 C Calculate multi-body contributions to the gradient.
6938 coeffpees0pij=coeffp*ees0pij
6939 coeffmees0mij=coeffm*ees0mij
6940 coeffpees0pkl=coeffp*ees0pkl
6941 coeffmees0mkl=coeffm*ees0mkl
6943 cgrad ghalfi=ees*ekl*gacont_hbr(ll,jj,i)
6944 gradcorr(ll,i)=gradcorr(ll,i)!+0.5d0*ghalfi
6945 & -ekont*(coeffpees0pkl*gacontp_hb1(ll,jj,i)+
6946 & coeffmees0mkl*gacontm_hb1(ll,jj,i))
6947 gradcorr(ll,j)=gradcorr(ll,j)!+0.5d0*ghalfi
6948 & -ekont*(coeffpees0pkl*gacontp_hb2(ll,jj,i)+
6949 & coeffmees0mkl*gacontm_hb2(ll,jj,i))
6950 cgrad ghalfk=ees*eij*gacont_hbr(ll,kk,k)
6951 gradcorr(ll,k)=gradcorr(ll,k)!+0.5d0*ghalfk
6952 & -ekont*(coeffpees0pij*gacontp_hb1(ll,kk,k)+
6953 & coeffmees0mij*gacontm_hb1(ll,kk,k))
6954 gradcorr(ll,l)=gradcorr(ll,l)!+0.5d0*ghalfk
6955 & -ekont*(coeffpees0pij*gacontp_hb2(ll,kk,k)+
6956 & coeffmees0mij*gacontm_hb2(ll,kk,k))
6957 gradlongij=ees*ekl*gacont_hbr(ll,jj,i)-
6958 & ekont*(coeffpees0pkl*gacontp_hb3(ll,jj,i)+
6959 & coeffmees0mkl*gacontm_hb3(ll,jj,i))
6960 gradcorr_long(ll,j)=gradcorr_long(ll,j)+gradlongij
6961 gradcorr_long(ll,i)=gradcorr_long(ll,i)-gradlongij
6962 gradlongkl=ees*eij*gacont_hbr(ll,kk,k)-
6963 & ekont*(coeffpees0pij*gacontp_hb3(ll,kk,k)+
6964 & coeffmees0mij*gacontm_hb3(ll,kk,k))
6965 gradcorr_long(ll,l)=gradcorr_long(ll,l)+gradlongkl
6966 gradcorr_long(ll,k)=gradcorr_long(ll,k)-gradlongkl
6967 c write (iout,'(2f10.5,2x,$)') gradlongij,gradlongkl
6972 cgrad gradcorr(ll,m)=gradcorr(ll,m)+
6973 cgrad & ees*ekl*gacont_hbr(ll,jj,i)-
6974 cgrad & ekont*(coeffp*ees0pkl*gacontp_hb3(ll,jj,i)+
6975 cgrad & coeffm*ees0mkl*gacontm_hb3(ll,jj,i))
6980 cgrad gradcorr(ll,m)=gradcorr(ll,m)+
6981 cgrad & ees*eij*gacont_hbr(ll,kk,k)-
6982 cgrad & ekont*(coeffp*ees0pij*gacontp_hb3(ll,kk,k)+
6983 cgrad & coeffm*ees0mij*gacontm_hb3(ll,kk,k))
6986 c write (iout,*) "ehbcorr",ekont*ees
6991 C---------------------------------------------------------------------------
6992 subroutine dipole(i,j,jj)
6993 implicit real*8 (a-h,o-z)
6994 include 'DIMENSIONS'
6995 include 'COMMON.IOUNITS'
6996 include 'COMMON.CHAIN'
6997 include 'COMMON.FFIELD'
6998 include 'COMMON.DERIV'
6999 include 'COMMON.INTERACT'
7000 include 'COMMON.CONTACTS'
7001 include 'COMMON.TORSION'
7002 include 'COMMON.VAR'
7003 include 'COMMON.GEO'
7004 dimension dipi(2,2),dipj(2,2),dipderi(2),dipderj(2),auxvec(2),
7006 iti1 = itortyp(itype(i+1))
7007 if (j.lt.nres-1) then
7008 itj1 = itortyp(itype(j+1))
7013 dipi(iii,1)=Ub2(iii,i)
7014 dipderi(iii)=Ub2der(iii,i)
7015 dipi(iii,2)=b1(iii,iti1)
7016 dipj(iii,1)=Ub2(iii,j)
7017 dipderj(iii)=Ub2der(iii,j)
7018 dipj(iii,2)=b1(iii,itj1)
7022 call matvec2(a_chuj(1,1,jj,i),dipj(1,iii),auxvec(1))
7025 dip(kkk,jj,i)=scalar2(dipi(1,jjj),auxvec(1))
7032 call matvec2(a_chuj_der(1,1,lll,kkk,jj,i),dipj(1,iii),
7036 dipderx(lll,kkk,mmm,jj,i)=scalar2(dipi(1,jjj),auxvec(1))
7041 call transpose2(a_chuj(1,1,jj,i),auxmat(1,1))
7042 call matvec2(auxmat(1,1),dipderi(1),auxvec(1))
7044 dipderg(iii,jj,i)=scalar2(auxvec(1),dipj(1,iii))
7046 call matvec2(a_chuj(1,1,jj,i),dipderj(1),auxvec(1))
7048 dipderg(iii+2,jj,i)=scalar2(auxvec(1),dipi(1,iii))
7053 C---------------------------------------------------------------------------
7054 subroutine calc_eello(i,j,k,l,jj,kk)
7056 C This subroutine computes matrices and vectors needed to calculate
7057 C the fourth-, fifth-, and sixth-order local-electrostatic terms.
7059 implicit real*8 (a-h,o-z)
7060 include 'DIMENSIONS'
7061 include 'COMMON.IOUNITS'
7062 include 'COMMON.CHAIN'
7063 include 'COMMON.DERIV'
7064 include 'COMMON.INTERACT'
7065 include 'COMMON.CONTACTS'
7066 include 'COMMON.TORSION'
7067 include 'COMMON.VAR'
7068 include 'COMMON.GEO'
7069 include 'COMMON.FFIELD'
7070 double precision aa1(2,2),aa2(2,2),aa1t(2,2),aa2t(2,2),
7071 & aa1tder(2,2,3,5),aa2tder(2,2,3,5),auxmat(2,2)
7074 cd write (iout,*) 'calc_eello: i=',i,' j=',j,' k=',k,' l=',l,
7075 cd & ' jj=',jj,' kk=',kk
7076 cd if (i.ne.2 .or. j.ne.4 .or. k.ne.3 .or. l.ne.5) return
7077 cd write (iout,*) "a_chujij",((a_chuj(iii,jjj,jj,i),iii=1,2),jjj=1,2)
7078 cd write (iout,*) "a_chujkl",((a_chuj(iii,jjj,kk,k),iii=1,2),jjj=1,2)
7081 aa1(iii,jjj)=a_chuj(iii,jjj,jj,i)
7082 aa2(iii,jjj)=a_chuj(iii,jjj,kk,k)
7085 call transpose2(aa1(1,1),aa1t(1,1))
7086 call transpose2(aa2(1,1),aa2t(1,1))
7089 call transpose2(a_chuj_der(1,1,lll,kkk,jj,i),
7090 & aa1tder(1,1,lll,kkk))
7091 call transpose2(a_chuj_der(1,1,lll,kkk,kk,k),
7092 & aa2tder(1,1,lll,kkk))
7096 C parallel orientation of the two CA-CA-CA frames.
7098 iti=itortyp(itype(i))
7102 itk1=itortyp(itype(k+1))
7103 itj=itortyp(itype(j))
7104 if (l.lt.nres-1) then
7105 itl1=itortyp(itype(l+1))
7109 C A1 kernel(j+1) A2T
7111 cd write (iout,'(3f10.5,5x,3f10.5)')
7112 cd & (EUg(iii,jjj,k),jjj=1,2),(EUg(iii,jjj,l),jjj=1,2)
7114 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
7115 & aa2tder(1,1,1,1),1,.false.,EUg(1,1,l),EUgder(1,1,l),
7116 & AEA(1,1,1),AEAderg(1,1,1),AEAderx(1,1,1,1,1,1))
7117 C Following matrices are needed only for 6-th order cumulants
7118 IF (wcorr6.gt.0.0d0) THEN
7119 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
7120 & aa2tder(1,1,1,1),1,.false.,EUgC(1,1,l),EUgCder(1,1,l),
7121 & AECA(1,1,1),AECAderg(1,1,1),AECAderx(1,1,1,1,1,1))
7122 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
7123 & aa2tder(1,1,1,1),2,.false.,Ug2DtEUg(1,1,l),
7124 & Ug2DtEUgder(1,1,1,l),ADtEA(1,1,1),ADtEAderg(1,1,1,1),
7125 & ADtEAderx(1,1,1,1,1,1))
7127 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
7128 & aa2tder(1,1,1,1),2,.false.,DtUg2EUg(1,1,l),
7129 & DtUg2EUgder(1,1,1,l),ADtEA1(1,1,1),ADtEA1derg(1,1,1,1),
7130 & ADtEA1derx(1,1,1,1,1,1))
7132 C End 6-th order cumulants
7135 cd write (2,*) 'In calc_eello6'
7137 cd write (2,*) 'iii=',iii
7139 cd write (2,*) 'kkk=',kkk
7141 cd write (2,'(3(2f10.5),5x)')
7142 cd & ((ADtEA1derx(jjj,mmm,lll,kkk,iii,1),mmm=1,2),lll=1,3)
7147 call transpose2(EUgder(1,1,k),auxmat(1,1))
7148 call matmat2(auxmat(1,1),AEA(1,1,1),EAEAderg(1,1,1,1))
7149 call transpose2(EUg(1,1,k),auxmat(1,1))
7150 call matmat2(auxmat(1,1),AEA(1,1,1),EAEA(1,1,1))
7151 call matmat2(auxmat(1,1),AEAderg(1,1,1),EAEAderg(1,1,2,1))
7155 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,1),
7156 & EAEAderx(1,1,lll,kkk,iii,1))
7160 C A1T kernel(i+1) A2
7161 call kernel(aa1t(1,1),aa2(1,1),aa1tder(1,1,1,1),
7162 & a_chuj_der(1,1,1,1,kk,k),1,.false.,EUg(1,1,k),EUgder(1,1,k),
7163 & AEA(1,1,2),AEAderg(1,1,2),AEAderx(1,1,1,1,1,2))
7164 C Following matrices are needed only for 6-th order cumulants
7165 IF (wcorr6.gt.0.0d0) THEN
7166 call kernel(aa1t(1,1),aa2(1,1),aa1tder(1,1,1,1),
7167 & a_chuj_der(1,1,1,1,kk,k),1,.false.,EUgC(1,1,k),EUgCder(1,1,k),
7168 & AECA(1,1,2),AECAderg(1,1,2),AECAderx(1,1,1,1,1,2))
7169 call kernel(aa1t(1,1),aa2(1,1),aa1tder(1,1,1,1),
7170 & a_chuj_der(1,1,1,1,kk,k),2,.false.,Ug2DtEUg(1,1,k),
7171 & Ug2DtEUgder(1,1,1,k),ADtEA(1,1,2),ADtEAderg(1,1,1,2),
7172 & ADtEAderx(1,1,1,1,1,2))
7173 call kernel(aa1t(1,1),aa2(1,1),aa1tder(1,1,1,1),
7174 & a_chuj_der(1,1,1,1,kk,k),2,.false.,DtUg2EUg(1,1,k),
7175 & DtUg2EUgder(1,1,1,k),ADtEA1(1,1,2),ADtEA1derg(1,1,1,2),
7176 & ADtEA1derx(1,1,1,1,1,2))
7178 C End 6-th order cumulants
7179 call transpose2(EUgder(1,1,l),auxmat(1,1))
7180 call matmat2(auxmat(1,1),AEA(1,1,2),EAEAderg(1,1,1,2))
7181 call transpose2(EUg(1,1,l),auxmat(1,1))
7182 call matmat2(auxmat(1,1),AEA(1,1,2),EAEA(1,1,2))
7183 call matmat2(auxmat(1,1),AEAderg(1,1,2),EAEAderg(1,1,2,2))
7187 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,2),
7188 & EAEAderx(1,1,lll,kkk,iii,2))
7193 C Calculate the vectors and their derivatives in virtual-bond dihedral angles.
7194 C They are needed only when the fifth- or the sixth-order cumulants are
7196 IF (wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0) THEN
7197 call transpose2(AEA(1,1,1),auxmat(1,1))
7198 call matvec2(auxmat(1,1),b1(1,iti),AEAb1(1,1,1))
7199 call matvec2(auxmat(1,1),Ub2(1,i),AEAb2(1,1,1))
7200 call matvec2(auxmat(1,1),Ub2der(1,i),AEAb2derg(1,2,1,1))
7201 call transpose2(AEAderg(1,1,1),auxmat(1,1))
7202 call matvec2(auxmat(1,1),b1(1,iti),AEAb1derg(1,1,1))
7203 call matvec2(auxmat(1,1),Ub2(1,i),AEAb2derg(1,1,1,1))
7204 call matvec2(AEA(1,1,1),b1(1,itk1),AEAb1(1,2,1))
7205 call matvec2(AEAderg(1,1,1),b1(1,itk1),AEAb1derg(1,2,1))
7206 call matvec2(AEA(1,1,1),Ub2(1,k+1),AEAb2(1,2,1))
7207 call matvec2(AEAderg(1,1,1),Ub2(1,k+1),AEAb2derg(1,1,2,1))
7208 call matvec2(AEA(1,1,1),Ub2der(1,k+1),AEAb2derg(1,2,2,1))
7209 call transpose2(AEA(1,1,2),auxmat(1,1))
7210 call matvec2(auxmat(1,1),b1(1,itj),AEAb1(1,1,2))
7211 call matvec2(auxmat(1,1),Ub2(1,j),AEAb2(1,1,2))
7212 call matvec2(auxmat(1,1),Ub2der(1,j),AEAb2derg(1,2,1,2))
7213 call transpose2(AEAderg(1,1,2),auxmat(1,1))
7214 call matvec2(auxmat(1,1),b1(1,itj),AEAb1derg(1,1,2))
7215 call matvec2(auxmat(1,1),Ub2(1,j),AEAb2derg(1,1,1,2))
7216 call matvec2(AEA(1,1,2),b1(1,itl1),AEAb1(1,2,2))
7217 call matvec2(AEAderg(1,1,2),b1(1,itl1),AEAb1derg(1,2,2))
7218 call matvec2(AEA(1,1,2),Ub2(1,l+1),AEAb2(1,2,2))
7219 call matvec2(AEAderg(1,1,2),Ub2(1,l+1),AEAb2derg(1,1,2,2))
7220 call matvec2(AEA(1,1,2),Ub2der(1,l+1),AEAb2derg(1,2,2,2))
7221 C Calculate the Cartesian derivatives of the vectors.
7225 call transpose2(AEAderx(1,1,lll,kkk,iii,1),auxmat(1,1))
7226 call matvec2(auxmat(1,1),b1(1,iti),
7227 & AEAb1derx(1,lll,kkk,iii,1,1))
7228 call matvec2(auxmat(1,1),Ub2(1,i),
7229 & AEAb2derx(1,lll,kkk,iii,1,1))
7230 call matvec2(AEAderx(1,1,lll,kkk,iii,1),b1(1,itk1),
7231 & AEAb1derx(1,lll,kkk,iii,2,1))
7232 call matvec2(AEAderx(1,1,lll,kkk,iii,1),Ub2(1,k+1),
7233 & AEAb2derx(1,lll,kkk,iii,2,1))
7234 call transpose2(AEAderx(1,1,lll,kkk,iii,2),auxmat(1,1))
7235 call matvec2(auxmat(1,1),b1(1,itj),
7236 & AEAb1derx(1,lll,kkk,iii,1,2))
7237 call matvec2(auxmat(1,1),Ub2(1,j),
7238 & AEAb2derx(1,lll,kkk,iii,1,2))
7239 call matvec2(AEAderx(1,1,lll,kkk,iii,2),b1(1,itl1),
7240 & AEAb1derx(1,lll,kkk,iii,2,2))
7241 call matvec2(AEAderx(1,1,lll,kkk,iii,2),Ub2(1,l+1),
7242 & AEAb2derx(1,lll,kkk,iii,2,2))
7249 C Antiparallel orientation of the two CA-CA-CA frames.
7251 iti=itortyp(itype(i))
7255 itk1=itortyp(itype(k+1))
7256 itl=itortyp(itype(l))
7257 itj=itortyp(itype(j))
7258 if (j.lt.nres-1) then
7259 itj1=itortyp(itype(j+1))
7263 C A2 kernel(j-1)T A1T
7264 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
7265 & aa2tder(1,1,1,1),1,.true.,EUg(1,1,j),EUgder(1,1,j),
7266 & AEA(1,1,1),AEAderg(1,1,1),AEAderx(1,1,1,1,1,1))
7267 C Following matrices are needed only for 6-th order cumulants
7268 IF (wcorr6.gt.0.0d0 .or. (wturn6.gt.0.0d0 .and.
7269 & j.eq.i+4 .and. l.eq.i+3)) THEN
7270 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
7271 & aa2tder(1,1,1,1),1,.true.,EUgC(1,1,j),EUgCder(1,1,j),
7272 & AECA(1,1,1),AECAderg(1,1,1),AECAderx(1,1,1,1,1,1))
7273 call kernel(aa2(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
7274 & aa2tder(1,1,1,1),2,.true.,Ug2DtEUg(1,1,j),
7275 & Ug2DtEUgder(1,1,1,j),ADtEA(1,1,1),ADtEAderg(1,1,1,1),
7276 & ADtEAderx(1,1,1,1,1,1))
7277 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
7278 & aa2tder(1,1,1,1),2,.true.,DtUg2EUg(1,1,j),
7279 & DtUg2EUgder(1,1,1,j),ADtEA1(1,1,1),ADtEA1derg(1,1,1,1),
7280 & ADtEA1derx(1,1,1,1,1,1))
7282 C End 6-th order cumulants
7283 call transpose2(EUgder(1,1,k),auxmat(1,1))
7284 call matmat2(auxmat(1,1),AEA(1,1,1),EAEAderg(1,1,1,1))
7285 call transpose2(EUg(1,1,k),auxmat(1,1))
7286 call matmat2(auxmat(1,1),AEA(1,1,1),EAEA(1,1,1))
7287 call matmat2(auxmat(1,1),AEAderg(1,1,1),EAEAderg(1,1,2,1))
7291 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,1),
7292 & EAEAderx(1,1,lll,kkk,iii,1))
7296 C A2T kernel(i+1)T A1
7297 call kernel(aa2t(1,1),aa1(1,1),aa2tder(1,1,1,1),
7298 & a_chuj_der(1,1,1,1,jj,i),1,.true.,EUg(1,1,k),EUgder(1,1,k),
7299 & AEA(1,1,2),AEAderg(1,1,2),AEAderx(1,1,1,1,1,2))
7300 C Following matrices are needed only for 6-th order cumulants
7301 IF (wcorr6.gt.0.0d0 .or. (wturn6.gt.0.0d0 .and.
7302 & j.eq.i+4 .and. l.eq.i+3)) THEN
7303 call kernel(aa2t(1,1),aa1(1,1),aa2tder(1,1,1,1),
7304 & a_chuj_der(1,1,1,1,jj,i),1,.true.,EUgC(1,1,k),EUgCder(1,1,k),
7305 & AECA(1,1,2),AECAderg(1,1,2),AECAderx(1,1,1,1,1,2))
7306 call kernel(aa2t(1,1),aa1(1,1),aa2tder(1,1,1,1),
7307 & a_chuj_der(1,1,1,1,jj,i),2,.true.,Ug2DtEUg(1,1,k),
7308 & Ug2DtEUgder(1,1,1,k),ADtEA(1,1,2),ADtEAderg(1,1,1,2),
7309 & ADtEAderx(1,1,1,1,1,2))
7310 call kernel(aa2t(1,1),aa1(1,1),aa2tder(1,1,1,1),
7311 & a_chuj_der(1,1,1,1,jj,i),2,.true.,DtUg2EUg(1,1,k),
7312 & DtUg2EUgder(1,1,1,k),ADtEA1(1,1,2),ADtEA1derg(1,1,1,2),
7313 & ADtEA1derx(1,1,1,1,1,2))
7315 C End 6-th order cumulants
7316 call transpose2(EUgder(1,1,j),auxmat(1,1))
7317 call matmat2(auxmat(1,1),AEA(1,1,1),EAEAderg(1,1,2,2))
7318 call transpose2(EUg(1,1,j),auxmat(1,1))
7319 call matmat2(auxmat(1,1),AEA(1,1,2),EAEA(1,1,2))
7320 call matmat2(auxmat(1,1),AEAderg(1,1,2),EAEAderg(1,1,2,2))
7324 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,2),
7325 & EAEAderx(1,1,lll,kkk,iii,2))
7330 C Calculate the vectors and their derivatives in virtual-bond dihedral angles.
7331 C They are needed only when the fifth- or the sixth-order cumulants are
7333 IF (wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0 .or.
7334 & (wturn6.gt.0.0d0 .and. j.eq.i+4 .and. l.eq.i+3)) THEN
7335 call transpose2(AEA(1,1,1),auxmat(1,1))
7336 call matvec2(auxmat(1,1),b1(1,iti),AEAb1(1,1,1))
7337 call matvec2(auxmat(1,1),Ub2(1,i),AEAb2(1,1,1))
7338 call matvec2(auxmat(1,1),Ub2der(1,i),AEAb2derg(1,2,1,1))
7339 call transpose2(AEAderg(1,1,1),auxmat(1,1))
7340 call matvec2(auxmat(1,1),b1(1,iti),AEAb1derg(1,1,1))
7341 call matvec2(auxmat(1,1),Ub2(1,i),AEAb2derg(1,1,1,1))
7342 call matvec2(AEA(1,1,1),b1(1,itk1),AEAb1(1,2,1))
7343 call matvec2(AEAderg(1,1,1),b1(1,itk1),AEAb1derg(1,2,1))
7344 call matvec2(AEA(1,1,1),Ub2(1,k+1),AEAb2(1,2,1))
7345 call matvec2(AEAderg(1,1,1),Ub2(1,k+1),AEAb2derg(1,1,2,1))
7346 call matvec2(AEA(1,1,1),Ub2der(1,k+1),AEAb2derg(1,2,2,1))
7347 call transpose2(AEA(1,1,2),auxmat(1,1))
7348 call matvec2(auxmat(1,1),b1(1,itj1),AEAb1(1,1,2))
7349 call matvec2(auxmat(1,1),Ub2(1,l),AEAb2(1,1,2))
7350 call matvec2(auxmat(1,1),Ub2der(1,l),AEAb2derg(1,2,1,2))
7351 call transpose2(AEAderg(1,1,2),auxmat(1,1))
7352 call matvec2(auxmat(1,1),b1(1,itl),AEAb1(1,1,2))
7353 call matvec2(auxmat(1,1),Ub2(1,l),AEAb2derg(1,1,1,2))
7354 call matvec2(AEA(1,1,2),b1(1,itj1),AEAb1(1,2,2))
7355 call matvec2(AEAderg(1,1,2),b1(1,itj1),AEAb1derg(1,2,2))
7356 call matvec2(AEA(1,1,2),Ub2(1,j),AEAb2(1,2,2))
7357 call matvec2(AEAderg(1,1,2),Ub2(1,j),AEAb2derg(1,1,2,2))
7358 call matvec2(AEA(1,1,2),Ub2der(1,j),AEAb2derg(1,2,2,2))
7359 C Calculate the Cartesian derivatives of the vectors.
7363 call transpose2(AEAderx(1,1,lll,kkk,iii,1),auxmat(1,1))
7364 call matvec2(auxmat(1,1),b1(1,iti),
7365 & AEAb1derx(1,lll,kkk,iii,1,1))
7366 call matvec2(auxmat(1,1),Ub2(1,i),
7367 & AEAb2derx(1,lll,kkk,iii,1,1))
7368 call matvec2(AEAderx(1,1,lll,kkk,iii,1),b1(1,itk1),
7369 & AEAb1derx(1,lll,kkk,iii,2,1))
7370 call matvec2(AEAderx(1,1,lll,kkk,iii,1),Ub2(1,k+1),
7371 & AEAb2derx(1,lll,kkk,iii,2,1))
7372 call transpose2(AEAderx(1,1,lll,kkk,iii,2),auxmat(1,1))
7373 call matvec2(auxmat(1,1),b1(1,itl),
7374 & AEAb1derx(1,lll,kkk,iii,1,2))
7375 call matvec2(auxmat(1,1),Ub2(1,l),
7376 & AEAb2derx(1,lll,kkk,iii,1,2))
7377 call matvec2(AEAderx(1,1,lll,kkk,iii,2),b1(1,itj1),
7378 & AEAb1derx(1,lll,kkk,iii,2,2))
7379 call matvec2(AEAderx(1,1,lll,kkk,iii,2),Ub2(1,j),
7380 & AEAb2derx(1,lll,kkk,iii,2,2))
7389 C---------------------------------------------------------------------------
7390 subroutine kernel(aa1,aa2t,aa1derx,aa2tderx,nderg,transp,
7391 & KK,KKderg,AKA,AKAderg,AKAderx)
7395 double precision aa1(2,2),aa2t(2,2),aa1derx(2,2,3,5),
7396 & aa2tderx(2,2,3,5),KK(2,2),KKderg(2,2,nderg),AKA(2,2),
7397 & AKAderg(2,2,nderg),AKAderx(2,2,3,5,2)
7402 call prodmat3(aa1(1,1),aa2t(1,1),KK(1,1),transp,AKA(1,1))
7404 call prodmat3(aa1(1,1),aa2t(1,1),KKderg(1,1,iii),transp,
7407 cd if (lprn) write (2,*) 'In kernel'
7409 cd if (lprn) write (2,*) 'kkk=',kkk
7411 call prodmat3(aa1derx(1,1,lll,kkk),aa2t(1,1),
7412 & KK(1,1),transp,AKAderx(1,1,lll,kkk,1))
7414 cd write (2,*) 'lll=',lll
7415 cd write (2,*) 'iii=1'
7417 cd write (2,'(3(2f10.5),5x)')
7418 cd & (AKAderx(jjj,mmm,lll,kkk,1),mmm=1,2)
7421 call prodmat3(aa1(1,1),aa2tderx(1,1,lll,kkk),
7422 & KK(1,1),transp,AKAderx(1,1,lll,kkk,2))
7424 cd write (2,*) 'lll=',lll
7425 cd write (2,*) 'iii=2'
7427 cd write (2,'(3(2f10.5),5x)')
7428 cd & (AKAderx(jjj,mmm,lll,kkk,2),mmm=1,2)
7435 C---------------------------------------------------------------------------
7436 double precision function eello4(i,j,k,l,jj,kk)
7437 implicit real*8 (a-h,o-z)
7438 include 'DIMENSIONS'
7439 include 'COMMON.IOUNITS'
7440 include 'COMMON.CHAIN'
7441 include 'COMMON.DERIV'
7442 include 'COMMON.INTERACT'
7443 include 'COMMON.CONTACTS'
7444 include 'COMMON.TORSION'
7445 include 'COMMON.VAR'
7446 include 'COMMON.GEO'
7447 double precision pizda(2,2),ggg1(3),ggg2(3)
7448 cd if (i.ne.1 .or. j.ne.5 .or. k.ne.2 .or.l.ne.4) then
7452 cd print *,'eello4:',i,j,k,l,jj,kk
7453 cd write (2,*) 'i',i,' j',j,' k',k,' l',l
7454 cd call checkint4(i,j,k,l,jj,kk,eel4_num)
7455 cold eij=facont_hb(jj,i)
7456 cold ekl=facont_hb(kk,k)
7458 eel4=-EAEA(1,1,1)-EAEA(2,2,1)
7459 cd eel41=-EAEA(1,1,2)-EAEA(2,2,2)
7460 gcorr_loc(k-1)=gcorr_loc(k-1)
7461 & -ekont*(EAEAderg(1,1,1,1)+EAEAderg(2,2,1,1))
7463 gcorr_loc(l-1)=gcorr_loc(l-1)
7464 & -ekont*(EAEAderg(1,1,2,1)+EAEAderg(2,2,2,1))
7466 gcorr_loc(j-1)=gcorr_loc(j-1)
7467 & -ekont*(EAEAderg(1,1,2,1)+EAEAderg(2,2,2,1))
7472 derx(lll,kkk,iii)=-EAEAderx(1,1,lll,kkk,iii,1)
7473 & -EAEAderx(2,2,lll,kkk,iii,1)
7474 cd derx(lll,kkk,iii)=0.0d0
7478 cd gcorr_loc(l-1)=0.0d0
7479 cd gcorr_loc(j-1)=0.0d0
7480 cd gcorr_loc(k-1)=0.0d0
7482 cd write (iout,*)'Contacts have occurred for peptide groups',
7483 cd & i,j,' fcont:',eij,' eij',' and ',k,l,
7484 cd & ' fcont ',ekl,' eel4=',eel4,' eel4_num',16*eel4_num
7485 if (j.lt.nres-1) then
7492 if (l.lt.nres-1) then
7500 cgrad ggg1(ll)=eel4*g_contij(ll,1)
7501 cgrad ggg2(ll)=eel4*g_contij(ll,2)
7502 glongij=eel4*g_contij(ll,1)+ekont*derx(ll,1,1)
7503 glongkl=eel4*g_contij(ll,2)+ekont*derx(ll,1,2)
7504 cgrad ghalf=0.5d0*ggg1(ll)
7505 gradcorr(ll,i)=gradcorr(ll,i)+ekont*derx(ll,2,1)
7506 gradcorr(ll,i+1)=gradcorr(ll,i+1)+ekont*derx(ll,3,1)
7507 gradcorr(ll,j)=gradcorr(ll,j)+ekont*derx(ll,4,1)
7508 gradcorr(ll,j1)=gradcorr(ll,j1)+ekont*derx(ll,5,1)
7509 gradcorr_long(ll,j)=gradcorr_long(ll,j)+glongij
7510 gradcorr_long(ll,i)=gradcorr_long(ll,i)-glongij
7511 cgrad ghalf=0.5d0*ggg2(ll)
7512 gradcorr(ll,k)=gradcorr(ll,k)+ekont*derx(ll,2,2)
7513 gradcorr(ll,k+1)=gradcorr(ll,k+1)+ekont*derx(ll,3,2)
7514 gradcorr(ll,l)=gradcorr(ll,l)+ekont*derx(ll,4,2)
7515 gradcorr(ll,l1)=gradcorr(ll,l1)+ekont*derx(ll,5,2)
7516 gradcorr_long(ll,l)=gradcorr_long(ll,l)+glongkl
7517 gradcorr_long(ll,k)=gradcorr_long(ll,k)-glongkl
7521 cgrad gradcorr(ll,m)=gradcorr(ll,m)+ggg1(ll)
7526 cgrad gradcorr(ll,m)=gradcorr(ll,m)+ggg2(ll)
7531 cgrad gradcorr(ll,m)=gradcorr(ll,m)+ekont*derx(ll,1,1)
7536 cgrad gradcorr(ll,m)=gradcorr(ll,m)+ekont*derx(ll,1,2)
7540 cd write (2,*) iii,gcorr_loc(iii)
7543 cd write (2,*) 'ekont',ekont
7544 cd write (iout,*) 'eello4',ekont*eel4
7547 C---------------------------------------------------------------------------
7548 double precision function eello5(i,j,k,l,jj,kk)
7549 implicit real*8 (a-h,o-z)
7550 include 'DIMENSIONS'
7551 include 'COMMON.IOUNITS'
7552 include 'COMMON.CHAIN'
7553 include 'COMMON.DERIV'
7554 include 'COMMON.INTERACT'
7555 include 'COMMON.CONTACTS'
7556 include 'COMMON.TORSION'
7557 include 'COMMON.VAR'
7558 include 'COMMON.GEO'
7559 double precision pizda(2,2),auxmat(2,2),auxmat1(2,2),vv(2)
7560 double precision ggg1(3),ggg2(3)
7561 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
7566 C /l\ / \ \ / \ / \ / C
7567 C / \ / \ \ / \ / \ / C
7568 C j| o |l1 | o | o| o | | o |o C
7569 C \ |/k\| |/ \| / |/ \| |/ \| C
7570 C \i/ \ / \ / / \ / \ C
7572 C (I) (II) (III) (IV) C
7574 C eello5_1 eello5_2 eello5_3 eello5_4 C
7576 C Antiparallel chains C
7579 C /j\ / \ \ / \ / \ / C
7580 C / \ / \ \ / \ / \ / C
7581 C j1| o |l | o | o| o | | o |o C
7582 C \ |/k\| |/ \| / |/ \| |/ \| C
7583 C \i/ \ / \ / / \ / \ C
7585 C (I) (II) (III) (IV) C
7587 C eello5_1 eello5_2 eello5_3 eello5_4 C
7589 C o denotes a local interaction, vertical lines an electrostatic interaction. C
7591 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
7592 cd if (i.ne.2 .or. j.ne.6 .or. k.ne.3 .or. l.ne.5) then
7597 cd & 'EELLO5: Contacts have occurred for peptide groups',i,j,
7599 itk=itortyp(itype(k))
7600 itl=itortyp(itype(l))
7601 itj=itortyp(itype(j))
7606 cd call checkint5(i,j,k,l,jj,kk,eel5_1_num,eel5_2_num,
7607 cd & eel5_3_num,eel5_4_num)
7611 derx(lll,kkk,iii)=0.0d0
7615 cd eij=facont_hb(jj,i)
7616 cd ekl=facont_hb(kk,k)
7618 cd write (iout,*)'Contacts have occurred for peptide groups',
7619 cd & i,j,' fcont:',eij,' eij',' and ',k,l
7621 C Contribution from the graph I.
7622 cd write (2,*) 'AEA ',AEA(1,1,1),AEA(2,1,1),AEA(1,2,1),AEA(2,2,1)
7623 cd write (2,*) 'AEAb2',AEAb2(1,1,1),AEAb2(2,1,1)
7624 call transpose2(EUg(1,1,k),auxmat(1,1))
7625 call matmat2(AEA(1,1,1),auxmat(1,1),pizda(1,1))
7626 vv(1)=pizda(1,1)-pizda(2,2)
7627 vv(2)=pizda(1,2)+pizda(2,1)
7628 eello5_1=scalar2(AEAb2(1,1,1),Ub2(1,k))
7629 & +0.5d0*scalar2(vv(1),Dtobr2(1,i))
7630 C Explicit gradient in virtual-dihedral angles.
7631 if (i.gt.1) g_corr5_loc(i-1)=g_corr5_loc(i-1)
7632 & +ekont*(scalar2(AEAb2derg(1,2,1,1),Ub2(1,k))
7633 & +0.5d0*scalar2(vv(1),Dtobr2der(1,i)))
7634 call transpose2(EUgder(1,1,k),auxmat1(1,1))
7635 call matmat2(AEA(1,1,1),auxmat1(1,1),pizda(1,1))
7636 vv(1)=pizda(1,1)-pizda(2,2)
7637 vv(2)=pizda(1,2)+pizda(2,1)
7638 g_corr5_loc(k-1)=g_corr5_loc(k-1)
7639 & +ekont*(scalar2(AEAb2(1,1,1),Ub2der(1,k))
7640 & +0.5d0*scalar2(vv(1),Dtobr2(1,i)))
7641 call matmat2(AEAderg(1,1,1),auxmat(1,1),pizda(1,1))
7642 vv(1)=pizda(1,1)-pizda(2,2)
7643 vv(2)=pizda(1,2)+pizda(2,1)
7645 if (l.lt.nres-1) g_corr5_loc(l-1)=g_corr5_loc(l-1)
7646 & +ekont*(scalar2(AEAb2derg(1,1,1,1),Ub2(1,k))
7647 & +0.5d0*scalar2(vv(1),Dtobr2(1,i)))
7649 if (j.lt.nres-1) g_corr5_loc(j-1)=g_corr5_loc(j-1)
7650 & +ekont*(scalar2(AEAb2derg(1,1,1,1),Ub2(1,k))
7651 & +0.5d0*scalar2(vv(1),Dtobr2(1,i)))
7653 C Cartesian gradient
7657 call matmat2(AEAderx(1,1,lll,kkk,iii,1),auxmat(1,1),
7659 vv(1)=pizda(1,1)-pizda(2,2)
7660 vv(2)=pizda(1,2)+pizda(2,1)
7661 derx(lll,kkk,iii)=derx(lll,kkk,iii)
7662 & +scalar2(AEAb2derx(1,lll,kkk,iii,1,1),Ub2(1,k))
7663 & +0.5d0*scalar2(vv(1),Dtobr2(1,i))
7669 C Contribution from graph II
7670 call transpose2(EE(1,1,itk),auxmat(1,1))
7671 call matmat2(auxmat(1,1),AEA(1,1,1),pizda(1,1))
7672 vv(1)=pizda(1,1)+pizda(2,2)
7673 vv(2)=pizda(2,1)-pizda(1,2)
7674 eello5_2=scalar2(AEAb1(1,2,1),b1(1,itk))
7675 & -0.5d0*scalar2(vv(1),Ctobr(1,k))
7676 C Explicit gradient in virtual-dihedral angles.
7677 g_corr5_loc(k-1)=g_corr5_loc(k-1)
7678 & -0.5d0*ekont*scalar2(vv(1),Ctobrder(1,k))
7679 call matmat2(auxmat(1,1),AEAderg(1,1,1),pizda(1,1))
7680 vv(1)=pizda(1,1)+pizda(2,2)
7681 vv(2)=pizda(2,1)-pizda(1,2)
7683 g_corr5_loc(l-1)=g_corr5_loc(l-1)
7684 & +ekont*(scalar2(AEAb1derg(1,2,1),b1(1,itk))
7685 & -0.5d0*scalar2(vv(1),Ctobr(1,k)))
7687 g_corr5_loc(j-1)=g_corr5_loc(j-1)
7688 & +ekont*(scalar2(AEAb1derg(1,2,1),b1(1,itk))
7689 & -0.5d0*scalar2(vv(1),Ctobr(1,k)))
7691 C Cartesian gradient
7695 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,1),
7697 vv(1)=pizda(1,1)+pizda(2,2)
7698 vv(2)=pizda(2,1)-pizda(1,2)
7699 derx(lll,kkk,iii)=derx(lll,kkk,iii)
7700 & +scalar2(AEAb1derx(1,lll,kkk,iii,2,1),b1(1,itk))
7701 & -0.5d0*scalar2(vv(1),Ctobr(1,k))
7709 C Parallel orientation
7710 C Contribution from graph III
7711 call transpose2(EUg(1,1,l),auxmat(1,1))
7712 call matmat2(AEA(1,1,2),auxmat(1,1),pizda(1,1))
7713 vv(1)=pizda(1,1)-pizda(2,2)
7714 vv(2)=pizda(1,2)+pizda(2,1)
7715 eello5_3=scalar2(AEAb2(1,1,2),Ub2(1,l))
7716 & +0.5d0*scalar2(vv(1),Dtobr2(1,j))
7717 C Explicit gradient in virtual-dihedral angles.
7718 g_corr5_loc(j-1)=g_corr5_loc(j-1)
7719 & +ekont*(scalar2(AEAb2derg(1,2,1,2),Ub2(1,l))
7720 & +0.5d0*scalar2(vv(1),Dtobr2der(1,j)))
7721 call matmat2(AEAderg(1,1,2),auxmat(1,1),pizda(1,1))
7722 vv(1)=pizda(1,1)-pizda(2,2)
7723 vv(2)=pizda(1,2)+pizda(2,1)
7724 g_corr5_loc(k-1)=g_corr5_loc(k-1)
7725 & +ekont*(scalar2(AEAb2derg(1,1,1,2),Ub2(1,l))
7726 & +0.5d0*scalar2(vv(1),Dtobr2(1,j)))
7727 call transpose2(EUgder(1,1,l),auxmat1(1,1))
7728 call matmat2(AEA(1,1,2),auxmat1(1,1),pizda(1,1))
7729 vv(1)=pizda(1,1)-pizda(2,2)
7730 vv(2)=pizda(1,2)+pizda(2,1)
7731 g_corr5_loc(l-1)=g_corr5_loc(l-1)
7732 & +ekont*(scalar2(AEAb2(1,1,2),Ub2der(1,l))
7733 & +0.5d0*scalar2(vv(1),Dtobr2(1,j)))
7734 C Cartesian gradient
7738 call matmat2(AEAderx(1,1,lll,kkk,iii,2),auxmat(1,1),
7740 vv(1)=pizda(1,1)-pizda(2,2)
7741 vv(2)=pizda(1,2)+pizda(2,1)
7742 derx(lll,kkk,iii)=derx(lll,kkk,iii)
7743 & +scalar2(AEAb2derx(1,lll,kkk,iii,1,2),Ub2(1,l))
7744 & +0.5d0*scalar2(vv(1),Dtobr2(1,j))
7749 C Contribution from graph IV
7751 call transpose2(EE(1,1,itl),auxmat(1,1))
7752 call matmat2(auxmat(1,1),AEA(1,1,2),pizda(1,1))
7753 vv(1)=pizda(1,1)+pizda(2,2)
7754 vv(2)=pizda(2,1)-pizda(1,2)
7755 eello5_4=scalar2(AEAb1(1,2,2),b1(1,itl))
7756 & -0.5d0*scalar2(vv(1),Ctobr(1,l))
7757 C Explicit gradient in virtual-dihedral angles.
7758 g_corr5_loc(l-1)=g_corr5_loc(l-1)
7759 & -0.5d0*ekont*scalar2(vv(1),Ctobrder(1,l))
7760 call matmat2(auxmat(1,1),AEAderg(1,1,2),pizda(1,1))
7761 vv(1)=pizda(1,1)+pizda(2,2)
7762 vv(2)=pizda(2,1)-pizda(1,2)
7763 g_corr5_loc(k-1)=g_corr5_loc(k-1)
7764 & +ekont*(scalar2(AEAb1derg(1,2,2),b1(1,itl))
7765 & -0.5d0*scalar2(vv(1),Ctobr(1,l)))
7766 C Cartesian gradient
7770 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,2),
7772 vv(1)=pizda(1,1)+pizda(2,2)
7773 vv(2)=pizda(2,1)-pizda(1,2)
7774 derx(lll,kkk,iii)=derx(lll,kkk,iii)
7775 & +scalar2(AEAb1derx(1,lll,kkk,iii,2,2),b1(1,itl))
7776 & -0.5d0*scalar2(vv(1),Ctobr(1,l))
7781 C Antiparallel orientation
7782 C Contribution from graph III
7784 call transpose2(EUg(1,1,j),auxmat(1,1))
7785 call matmat2(AEA(1,1,2),auxmat(1,1),pizda(1,1))
7786 vv(1)=pizda(1,1)-pizda(2,2)
7787 vv(2)=pizda(1,2)+pizda(2,1)
7788 eello5_3=scalar2(AEAb2(1,1,2),Ub2(1,j))
7789 & +0.5d0*scalar2(vv(1),Dtobr2(1,l))
7790 C Explicit gradient in virtual-dihedral angles.
7791 g_corr5_loc(l-1)=g_corr5_loc(l-1)
7792 & +ekont*(scalar2(AEAb2derg(1,2,1,2),Ub2(1,j))
7793 & +0.5d0*scalar2(vv(1),Dtobr2der(1,l)))
7794 call matmat2(AEAderg(1,1,2),auxmat(1,1),pizda(1,1))
7795 vv(1)=pizda(1,1)-pizda(2,2)
7796 vv(2)=pizda(1,2)+pizda(2,1)
7797 g_corr5_loc(k-1)=g_corr5_loc(k-1)
7798 & +ekont*(scalar2(AEAb2derg(1,1,1,2),Ub2(1,j))
7799 & +0.5d0*scalar2(vv(1),Dtobr2(1,l)))
7800 call transpose2(EUgder(1,1,j),auxmat1(1,1))
7801 call matmat2(AEA(1,1,2),auxmat1(1,1),pizda(1,1))
7802 vv(1)=pizda(1,1)-pizda(2,2)
7803 vv(2)=pizda(1,2)+pizda(2,1)
7804 g_corr5_loc(j-1)=g_corr5_loc(j-1)
7805 & +ekont*(scalar2(AEAb2(1,1,2),Ub2der(1,j))
7806 & +0.5d0*scalar2(vv(1),Dtobr2(1,l)))
7807 C Cartesian gradient
7811 call matmat2(AEAderx(1,1,lll,kkk,iii,2),auxmat(1,1),
7813 vv(1)=pizda(1,1)-pizda(2,2)
7814 vv(2)=pizda(1,2)+pizda(2,1)
7815 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)
7816 & +scalar2(AEAb2derx(1,lll,kkk,iii,1,2),Ub2(1,j))
7817 & +0.5d0*scalar2(vv(1),Dtobr2(1,l))
7822 C Contribution from graph IV
7824 call transpose2(EE(1,1,itj),auxmat(1,1))
7825 call matmat2(auxmat(1,1),AEA(1,1,2),pizda(1,1))
7826 vv(1)=pizda(1,1)+pizda(2,2)
7827 vv(2)=pizda(2,1)-pizda(1,2)
7828 eello5_4=scalar2(AEAb1(1,2,2),b1(1,itj))
7829 & -0.5d0*scalar2(vv(1),Ctobr(1,j))
7830 C Explicit gradient in virtual-dihedral angles.
7831 g_corr5_loc(j-1)=g_corr5_loc(j-1)
7832 & -0.5d0*ekont*scalar2(vv(1),Ctobrder(1,j))
7833 call matmat2(auxmat(1,1),AEAderg(1,1,2),pizda(1,1))
7834 vv(1)=pizda(1,1)+pizda(2,2)
7835 vv(2)=pizda(2,1)-pizda(1,2)
7836 g_corr5_loc(k-1)=g_corr5_loc(k-1)
7837 & +ekont*(scalar2(AEAb1derg(1,2,2),b1(1,itj))
7838 & -0.5d0*scalar2(vv(1),Ctobr(1,j)))
7839 C Cartesian gradient
7843 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,2),
7845 vv(1)=pizda(1,1)+pizda(2,2)
7846 vv(2)=pizda(2,1)-pizda(1,2)
7847 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)
7848 & +scalar2(AEAb1derx(1,lll,kkk,iii,2,2),b1(1,itj))
7849 & -0.5d0*scalar2(vv(1),Ctobr(1,j))
7855 eel5=eello5_1+eello5_2+eello5_3+eello5_4
7856 cd if (i.eq.2 .and. j.eq.8 .and. k.eq.3 .and. l.eq.7) then
7857 cd write (2,*) 'ijkl',i,j,k,l
7858 cd write (2,*) 'eello5_1',eello5_1,' eello5_2',eello5_2,
7859 cd & ' eello5_3',eello5_3,' eello5_4',eello5_4
7861 cd write(iout,*) 'eello5_1',eello5_1,' eel5_1_num',16*eel5_1_num
7862 cd write(iout,*) 'eello5_2',eello5_2,' eel5_2_num',16*eel5_2_num
7863 cd write(iout,*) 'eello5_3',eello5_3,' eel5_3_num',16*eel5_3_num
7864 cd write(iout,*) 'eello5_4',eello5_4,' eel5_4_num',16*eel5_4_num
7865 if (j.lt.nres-1) then
7872 if (l.lt.nres-1) then
7882 cd write (2,*) 'eij',eij,' ekl',ekl,' ekont',ekont
7883 C 2/11/08 AL Gradients over DC's connecting interacting sites will be
7884 C summed up outside the subrouine as for the other subroutines
7885 C handling long-range interactions. The old code is commented out
7886 C with "cgrad" to keep track of changes.
7888 cgrad ggg1(ll)=eel5*g_contij(ll,1)
7889 cgrad ggg2(ll)=eel5*g_contij(ll,2)
7890 gradcorr5ij=eel5*g_contij(ll,1)+ekont*derx(ll,1,1)
7891 gradcorr5kl=eel5*g_contij(ll,2)+ekont*derx(ll,1,2)
7892 c write (iout,'(a,3i3,a,5f8.3,2i3,a,5f8.3,a,f8.3)')
7893 c & "ecorr5",ll,i,j," derx",derx(ll,2,1),derx(ll,3,1),derx(ll,4,1),
7894 c & derx(ll,5,1),k,l," derx",derx(ll,2,2),derx(ll,3,2),
7895 c & derx(ll,4,2),derx(ll,5,2)," ekont",ekont
7896 c write (iout,'(a,3i3,a,3f8.3,2i3,a,3f8.3)')
7897 c & "ecorr5",ll,i,j," gradcorr5",g_contij(ll,1),derx(ll,1,1),
7899 c & k,l," gradcorr5",g_contij(ll,2),derx(ll,1,2),gradcorr5kl
7900 cold ghalf=0.5d0*eel5*ekl*gacont_hbr(ll,jj,i)
7901 cgrad ghalf=0.5d0*ggg1(ll)
7903 gradcorr5(ll,i)=gradcorr5(ll,i)+ekont*derx(ll,2,1)
7904 gradcorr5(ll,i+1)=gradcorr5(ll,i+1)+ekont*derx(ll,3,1)
7905 gradcorr5(ll,j)=gradcorr5(ll,j)+ekont*derx(ll,4,1)
7906 gradcorr5(ll,j1)=gradcorr5(ll,j1)+ekont*derx(ll,5,1)
7907 gradcorr5_long(ll,j)=gradcorr5_long(ll,j)+gradcorr5ij
7908 gradcorr5_long(ll,i)=gradcorr5_long(ll,i)-gradcorr5ij
7909 cold ghalf=0.5d0*eel5*eij*gacont_hbr(ll,kk,k)
7910 cgrad ghalf=0.5d0*ggg2(ll)
7912 gradcorr5(ll,k)=gradcorr5(ll,k)+ghalf+ekont*derx(ll,2,2)
7913 gradcorr5(ll,k+1)=gradcorr5(ll,k+1)+ekont*derx(ll,3,2)
7914 gradcorr5(ll,l)=gradcorr5(ll,l)+ghalf+ekont*derx(ll,4,2)
7915 gradcorr5(ll,l1)=gradcorr5(ll,l1)+ekont*derx(ll,5,2)
7916 gradcorr5_long(ll,l)=gradcorr5_long(ll,l)+gradcorr5kl
7917 gradcorr5_long(ll,k)=gradcorr5_long(ll,k)-gradcorr5kl
7922 cold gradcorr5(ll,m)=gradcorr5(ll,m)+eel5*ekl*gacont_hbr(ll,jj,i)
7923 cgrad gradcorr5(ll,m)=gradcorr5(ll,m)+ggg1(ll)
7928 cold gradcorr5(ll,m)=gradcorr5(ll,m)+eel5*eij*gacont_hbr(ll,kk,k)
7929 cgrad gradcorr5(ll,m)=gradcorr5(ll,m)+ggg2(ll)
7935 cgrad gradcorr5(ll,m)=gradcorr5(ll,m)+ekont*derx(ll,1,1)
7940 cgrad gradcorr5(ll,m)=gradcorr5(ll,m)+ekont*derx(ll,1,2)
7944 cd write (2,*) iii,g_corr5_loc(iii)
7947 cd write (2,*) 'ekont',ekont
7948 cd write (iout,*) 'eello5',ekont*eel5
7951 c--------------------------------------------------------------------------
7952 double precision function eello6(i,j,k,l,jj,kk)
7953 implicit real*8 (a-h,o-z)
7954 include 'DIMENSIONS'
7955 include 'COMMON.IOUNITS'
7956 include 'COMMON.CHAIN'
7957 include 'COMMON.DERIV'
7958 include 'COMMON.INTERACT'
7959 include 'COMMON.CONTACTS'
7960 include 'COMMON.TORSION'
7961 include 'COMMON.VAR'
7962 include 'COMMON.GEO'
7963 include 'COMMON.FFIELD'
7964 double precision ggg1(3),ggg2(3)
7965 cd if (i.ne.1 .or. j.ne.3 .or. k.ne.2 .or. l.ne.4) then
7970 cd & 'EELLO6: Contacts have occurred for peptide groups',i,j,
7978 cd call checkint6(i,j,k,l,jj,kk,eel6_1_num,eel6_2_num,
7979 cd & eel6_3_num,eel6_4_num,eel6_5_num,eel6_6_num)
7983 derx(lll,kkk,iii)=0.0d0
7987 cd eij=facont_hb(jj,i)
7988 cd ekl=facont_hb(kk,k)
7994 eello6_1=eello6_graph1(i,j,k,l,1,.false.)
7995 eello6_2=eello6_graph1(j,i,l,k,2,.false.)
7996 eello6_3=eello6_graph2(i,j,k,l,jj,kk,.false.)
7997 eello6_4=eello6_graph4(i,j,k,l,jj,kk,1,.false.)
7998 eello6_5=eello6_graph4(j,i,l,k,jj,kk,2,.false.)
7999 eello6_6=eello6_graph3(i,j,k,l,jj,kk,.false.)
8001 eello6_1=eello6_graph1(i,j,k,l,1,.false.)
8002 eello6_2=eello6_graph1(l,k,j,i,2,.true.)
8003 eello6_3=eello6_graph2(i,l,k,j,jj,kk,.true.)
8004 eello6_4=eello6_graph4(i,j,k,l,jj,kk,1,.false.)
8005 if (wturn6.eq.0.0d0 .or. j.ne.i+4) then
8006 eello6_5=eello6_graph4(l,k,j,i,kk,jj,2,.true.)
8010 eello6_6=eello6_graph3(i,l,k,j,jj,kk,.true.)
8012 C If turn contributions are considered, they will be handled separately.
8013 eel6=eello6_1+eello6_2+eello6_3+eello6_4+eello6_5+eello6_6
8014 cd write(iout,*) 'eello6_1',eello6_1!,' eel6_1_num',16*eel6_1_num
8015 cd write(iout,*) 'eello6_2',eello6_2!,' eel6_2_num',16*eel6_2_num
8016 cd write(iout,*) 'eello6_3',eello6_3!,' eel6_3_num',16*eel6_3_num
8017 cd write(iout,*) 'eello6_4',eello6_4!,' eel6_4_num',16*eel6_4_num
8018 cd write(iout,*) 'eello6_5',eello6_5!,' eel6_5_num',16*eel6_5_num
8019 cd write(iout,*) 'eello6_6',eello6_6!,' eel6_6_num',16*eel6_6_num
8021 if (j.lt.nres-1) then
8028 if (l.lt.nres-1) then
8036 cgrad ggg1(ll)=eel6*g_contij(ll,1)
8037 cgrad ggg2(ll)=eel6*g_contij(ll,2)
8038 cold ghalf=0.5d0*eel6*ekl*gacont_hbr(ll,jj,i)
8039 cgrad ghalf=0.5d0*ggg1(ll)
8041 gradcorr6ij=eel6*g_contij(ll,1)+ekont*derx(ll,1,1)
8042 gradcorr6kl=eel6*g_contij(ll,2)+ekont*derx(ll,1,2)
8043 gradcorr6(ll,i)=gradcorr6(ll,i)+ekont*derx(ll,2,1)
8044 gradcorr6(ll,i+1)=gradcorr6(ll,i+1)+ekont*derx(ll,3,1)
8045 gradcorr6(ll,j)=gradcorr6(ll,j)+ekont*derx(ll,4,1)
8046 gradcorr6(ll,j1)=gradcorr6(ll,j1)+ekont*derx(ll,5,1)
8047 gradcorr6_long(ll,j)=gradcorr6_long(ll,j)+gradcorr6ij
8048 gradcorr6_long(ll,i)=gradcorr6_long(ll,i)-gradcorr6ij
8049 cgrad ghalf=0.5d0*ggg2(ll)
8050 cold ghalf=0.5d0*eel6*eij*gacont_hbr(ll,kk,k)
8052 gradcorr6(ll,k)=gradcorr6(ll,k)+ekont*derx(ll,2,2)
8053 gradcorr6(ll,k+1)=gradcorr6(ll,k+1)+ekont*derx(ll,3,2)
8054 gradcorr6(ll,l)=gradcorr6(ll,l)+ekont*derx(ll,4,2)
8055 gradcorr6(ll,l1)=gradcorr6(ll,l1)+ekont*derx(ll,5,2)
8056 gradcorr6_long(ll,l)=gradcorr6_long(ll,l)+gradcorr6kl
8057 gradcorr6_long(ll,k)=gradcorr6_long(ll,k)-gradcorr6kl
8062 cold gradcorr6(ll,m)=gradcorr6(ll,m)+eel6*ekl*gacont_hbr(ll,jj,i)
8063 cgrad gradcorr6(ll,m)=gradcorr6(ll,m)+ggg1(ll)
8068 cold gradcorr6(ll,m)=gradcorr6(ll,m)+eel6*eij*gacont_hbr(ll,kk,k)
8069 cgrad gradcorr6(ll,m)=gradcorr6(ll,m)+ggg2(ll)
8075 cgrad gradcorr6(ll,m)=gradcorr6(ll,m)+ekont*derx(ll,1,1)
8080 cgrad gradcorr6(ll,m)=gradcorr6(ll,m)+ekont*derx(ll,1,2)
8084 cd write (2,*) iii,g_corr6_loc(iii)
8087 cd write (2,*) 'ekont',ekont
8088 cd write (iout,*) 'eello6',ekont*eel6
8091 c--------------------------------------------------------------------------
8092 double precision function eello6_graph1(i,j,k,l,imat,swap)
8093 implicit real*8 (a-h,o-z)
8094 include 'DIMENSIONS'
8095 include 'COMMON.IOUNITS'
8096 include 'COMMON.CHAIN'
8097 include 'COMMON.DERIV'
8098 include 'COMMON.INTERACT'
8099 include 'COMMON.CONTACTS'
8100 include 'COMMON.TORSION'
8101 include 'COMMON.VAR'
8102 include 'COMMON.GEO'
8103 double precision vv(2),vv1(2),pizda(2,2),auxmat(2,2),pizda1(2,2)
8107 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
8109 C Parallel Antiparallel
8115 C \ j|/k\| / \ |/k\|l /
8120 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
8121 itk=itortyp(itype(k))
8122 s1= scalar2(AEAb1(1,2,imat),CUgb2(1,i))
8123 s2=-scalar2(AEAb2(1,1,imat),Ug2Db1t(1,k))
8124 s3= scalar2(AEAb2(1,1,imat),CUgb2(1,k))
8125 call transpose2(EUgC(1,1,k),auxmat(1,1))
8126 call matmat2(AEA(1,1,imat),auxmat(1,1),pizda1(1,1))
8127 vv1(1)=pizda1(1,1)-pizda1(2,2)
8128 vv1(2)=pizda1(1,2)+pizda1(2,1)
8129 s4=0.5d0*scalar2(vv1(1),Dtobr2(1,i))
8130 vv(1)=AEAb1(1,2,imat)*b1(1,itk)-AEAb1(2,2,imat)*b1(2,itk)
8131 vv(2)=AEAb1(1,2,imat)*b1(2,itk)+AEAb1(2,2,imat)*b1(1,itk)
8132 s5=scalar2(vv(1),Dtobr2(1,i))
8133 cd write (2,*) 's1',s1,' s2',s2,' s3',s3,' s4', s4,' s5',s5
8134 eello6_graph1=-0.5d0*(s1+s2+s3+s4+s5)
8135 if (i.gt.1) g_corr6_loc(i-1)=g_corr6_loc(i-1)
8136 & -0.5d0*ekont*(scalar2(AEAb1(1,2,imat),CUgb2der(1,i))
8137 & -scalar2(AEAb2derg(1,2,1,imat),Ug2Db1t(1,k))
8138 & +scalar2(AEAb2derg(1,2,1,imat),CUgb2(1,k))
8139 & +0.5d0*scalar2(vv1(1),Dtobr2der(1,i))
8140 & +scalar2(vv(1),Dtobr2der(1,i)))
8141 call matmat2(AEAderg(1,1,imat),auxmat(1,1),pizda1(1,1))
8142 vv1(1)=pizda1(1,1)-pizda1(2,2)
8143 vv1(2)=pizda1(1,2)+pizda1(2,1)
8144 vv(1)=AEAb1derg(1,2,imat)*b1(1,itk)-AEAb1derg(2,2,imat)*b1(2,itk)
8145 vv(2)=AEAb1derg(1,2,imat)*b1(2,itk)+AEAb1derg(2,2,imat)*b1(1,itk)
8147 g_corr6_loc(l-1)=g_corr6_loc(l-1)
8148 & +ekont*(-0.5d0*(scalar2(AEAb1derg(1,2,imat),CUgb2(1,i))
8149 & -scalar2(AEAb2derg(1,1,1,imat),Ug2Db1t(1,k))
8150 & +scalar2(AEAb2derg(1,1,1,imat),CUgb2(1,k))
8151 & +0.5d0*scalar2(vv1(1),Dtobr2(1,i))+scalar2(vv(1),Dtobr2(1,i))))
8153 g_corr6_loc(j-1)=g_corr6_loc(j-1)
8154 & +ekont*(-0.5d0*(scalar2(AEAb1derg(1,2,imat),CUgb2(1,i))
8155 & -scalar2(AEAb2derg(1,1,1,imat),Ug2Db1t(1,k))
8156 & +scalar2(AEAb2derg(1,1,1,imat),CUgb2(1,k))
8157 & +0.5d0*scalar2(vv1(1),Dtobr2(1,i))+scalar2(vv(1),Dtobr2(1,i))))
8159 call transpose2(EUgCder(1,1,k),auxmat(1,1))
8160 call matmat2(AEA(1,1,imat),auxmat(1,1),pizda1(1,1))
8161 vv1(1)=pizda1(1,1)-pizda1(2,2)
8162 vv1(2)=pizda1(1,2)+pizda1(2,1)
8163 if (k.gt.1) g_corr6_loc(k-1)=g_corr6_loc(k-1)
8164 & +ekont*(-0.5d0*(-scalar2(AEAb2(1,1,imat),Ug2Db1tder(1,k))
8165 & +scalar2(AEAb2(1,1,imat),CUgb2der(1,k))
8166 & +0.5d0*scalar2(vv1(1),Dtobr2(1,i))))
8175 s1= scalar2(AEAb1derx(1,lll,kkk,iii,2,imat),CUgb2(1,i))
8176 s2=-scalar2(AEAb2derx(1,lll,kkk,iii,1,imat),Ug2Db1t(1,k))
8177 s3= scalar2(AEAb2derx(1,lll,kkk,iii,1,imat),CUgb2(1,k))
8178 call transpose2(EUgC(1,1,k),auxmat(1,1))
8179 call matmat2(AEAderx(1,1,lll,kkk,iii,imat),auxmat(1,1),
8181 vv1(1)=pizda1(1,1)-pizda1(2,2)
8182 vv1(2)=pizda1(1,2)+pizda1(2,1)
8183 s4=0.5d0*scalar2(vv1(1),Dtobr2(1,i))
8184 vv(1)=AEAb1derx(1,lll,kkk,iii,2,imat)*b1(1,itk)
8185 & -AEAb1derx(2,lll,kkk,iii,2,imat)*b1(2,itk)
8186 vv(2)=AEAb1derx(1,lll,kkk,iii,2,imat)*b1(2,itk)
8187 & +AEAb1derx(2,lll,kkk,iii,2,imat)*b1(1,itk)
8188 s5=scalar2(vv(1),Dtobr2(1,i))
8189 derx(lll,kkk,ind)=derx(lll,kkk,ind)-0.5d0*(s1+s2+s3+s4+s5)
8195 c----------------------------------------------------------------------------
8196 double precision function eello6_graph2(i,j,k,l,jj,kk,swap)
8197 implicit real*8 (a-h,o-z)
8198 include 'DIMENSIONS'
8199 include 'COMMON.IOUNITS'
8200 include 'COMMON.CHAIN'
8201 include 'COMMON.DERIV'
8202 include 'COMMON.INTERACT'
8203 include 'COMMON.CONTACTS'
8204 include 'COMMON.TORSION'
8205 include 'COMMON.VAR'
8206 include 'COMMON.GEO'
8208 double precision vv(2),pizda(2,2),auxmat(2,2),auxvec(2),
8209 & auxvec1(2),auxvec2(2),auxmat1(2,2)
8212 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
8214 C Parallel Antiparallel C
8220 C \ j|/k\| \ |/k\|l C
8225 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
8226 cd write (2,*) 'eello6_graph2: i,',i,' j',j,' k',k,' l',l
8227 C AL 7/4/01 s1 would occur in the sixth-order moment,
8228 C but not in a cluster cumulant
8230 s1=dip(1,jj,i)*dip(1,kk,k)
8232 call matvec2(ADtEA1(1,1,1),Ub2(1,k),auxvec(1))
8233 s2=-0.5d0*scalar2(Ub2(1,i),auxvec(1))
8234 call matvec2(ADtEA(1,1,2),Ub2(1,l),auxvec1(1))
8235 s3=-0.5d0*scalar2(Ub2(1,j),auxvec1(1))
8236 call transpose2(EUg(1,1,k),auxmat(1,1))
8237 call matmat2(ADtEA1(1,1,1),auxmat(1,1),pizda(1,1))
8238 vv(1)=pizda(1,1)-pizda(2,2)
8239 vv(2)=pizda(1,2)+pizda(2,1)
8240 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
8241 cd write (2,*) 'eello6_graph2:','s1',s1,' s2',s2,' s3',s3,' s4',s4
8243 eello6_graph2=-(s1+s2+s3+s4)
8245 eello6_graph2=-(s2+s3+s4)
8248 C Derivatives in gamma(i-1)
8251 s1=dipderg(1,jj,i)*dip(1,kk,k)
8253 s2=-0.5d0*scalar2(Ub2der(1,i),auxvec(1))
8254 call matvec2(ADtEAderg(1,1,1,2),Ub2(1,l),auxvec2(1))
8255 s3=-0.5d0*scalar2(Ub2(1,j),auxvec2(1))
8256 s4=-0.25d0*scalar2(vv(1),Dtobr2der(1,i))
8258 g_corr6_loc(i-1)=g_corr6_loc(i-1)-ekont*(s1+s2+s3+s4)
8260 g_corr6_loc(i-1)=g_corr6_loc(i-1)-ekont*(s2+s3+s4)
8262 c g_corr6_loc(i-1)=g_corr6_loc(i-1)-s3
8264 C Derivatives in gamma(k-1)
8266 s1=dip(1,jj,i)*dipderg(1,kk,k)
8268 call matvec2(ADtEA1(1,1,1),Ub2der(1,k),auxvec2(1))
8269 s2=-0.5d0*scalar2(Ub2(1,i),auxvec2(1))
8270 call matvec2(ADtEAderg(1,1,2,2),Ub2(1,l),auxvec2(1))
8271 s3=-0.5d0*scalar2(Ub2(1,j),auxvec2(1))
8272 call transpose2(EUgder(1,1,k),auxmat1(1,1))
8273 call matmat2(ADtEA1(1,1,1),auxmat1(1,1),pizda(1,1))
8274 vv(1)=pizda(1,1)-pizda(2,2)
8275 vv(2)=pizda(1,2)+pizda(2,1)
8276 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
8278 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s1+s2+s3+s4)
8280 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s2+s3+s4)
8282 c g_corr6_loc(k-1)=g_corr6_loc(k-1)-s3
8283 C Derivatives in gamma(j-1) or gamma(l-1)
8286 s1=dipderg(3,jj,i)*dip(1,kk,k)
8288 call matvec2(ADtEA1derg(1,1,1,1),Ub2(1,k),auxvec2(1))
8289 s2=-0.5d0*scalar2(Ub2(1,i),auxvec2(1))
8290 s3=-0.5d0*scalar2(Ub2der(1,j),auxvec1(1))
8291 call matmat2(ADtEA1derg(1,1,1,1),auxmat(1,1),pizda(1,1))
8292 vv(1)=pizda(1,1)-pizda(2,2)
8293 vv(2)=pizda(1,2)+pizda(2,1)
8294 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
8297 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*s1
8299 g_corr6_loc(j-1)=g_corr6_loc(j-1)-ekont*s1
8302 g_corr6_loc(j-1)=g_corr6_loc(j-1)-ekont*(s2+s3+s4)
8303 c g_corr6_loc(j-1)=g_corr6_loc(j-1)-s3
8305 C Derivatives in gamma(l-1) or gamma(j-1)
8308 s1=dip(1,jj,i)*dipderg(3,kk,k)
8310 call matvec2(ADtEA1derg(1,1,2,1),Ub2(1,k),auxvec2(1))
8311 s2=-0.5d0*scalar2(Ub2(1,i),auxvec2(1))
8312 call matvec2(ADtEA(1,1,2),Ub2der(1,l),auxvec2(1))
8313 s3=-0.5d0*scalar2(Ub2(1,j),auxvec2(1))
8314 call matmat2(ADtEA1derg(1,1,2,1),auxmat(1,1),pizda(1,1))
8315 vv(1)=pizda(1,1)-pizda(2,2)
8316 vv(2)=pizda(1,2)+pizda(2,1)
8317 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
8320 g_corr6_loc(j-1)=g_corr6_loc(j-1)-ekont*s1
8322 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*s1
8325 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*(s2+s3+s4)
8326 c g_corr6_loc(l-1)=g_corr6_loc(l-1)-s3
8328 C Cartesian derivatives.
8330 write (2,*) 'In eello6_graph2'
8332 write (2,*) 'iii=',iii
8334 write (2,*) 'kkk=',kkk
8336 write (2,'(3(2f10.5),5x)')
8337 & ((ADtEA1derx(jjj,mmm,lll,kkk,iii,1),mmm=1,2),lll=1,3)
8347 s1=dipderx(lll,kkk,1,jj,i)*dip(1,kk,k)
8349 s1=dip(1,jj,i)*dipderx(lll,kkk,1,kk,k)
8352 call matvec2(ADtEA1derx(1,1,lll,kkk,iii,1),Ub2(1,k),
8354 s2=-0.5d0*scalar2(Ub2(1,i),auxvec(1))
8355 call matvec2(ADtEAderx(1,1,lll,kkk,iii,2),Ub2(1,l),
8357 s3=-0.5d0*scalar2(Ub2(1,j),auxvec(1))
8358 call transpose2(EUg(1,1,k),auxmat(1,1))
8359 call matmat2(ADtEA1derx(1,1,lll,kkk,iii,1),auxmat(1,1),
8361 vv(1)=pizda(1,1)-pizda(2,2)
8362 vv(2)=pizda(1,2)+pizda(2,1)
8363 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
8364 cd write (2,*) 's1',s1,' s2',s2,' s3',s3,' s4',s4
8366 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s1+s2+s4)
8368 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s2+s4)
8371 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-s3
8373 derx(lll,kkk,iii)=derx(lll,kkk,iii)-s3
8380 c----------------------------------------------------------------------------
8381 double precision function eello6_graph3(i,j,k,l,jj,kk,swap)
8382 implicit real*8 (a-h,o-z)
8383 include 'DIMENSIONS'
8384 include 'COMMON.IOUNITS'
8385 include 'COMMON.CHAIN'
8386 include 'COMMON.DERIV'
8387 include 'COMMON.INTERACT'
8388 include 'COMMON.CONTACTS'
8389 include 'COMMON.TORSION'
8390 include 'COMMON.VAR'
8391 include 'COMMON.GEO'
8392 double precision vv(2),pizda(2,2),auxmat(2,2),auxvec(2)
8394 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
8396 C Parallel Antiparallel C
8402 C j|/k\| / |/k\|l / C
8407 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
8409 C 4/7/01 AL Component s1 was removed, because it pertains to the respective
8410 C energy moment and not to the cluster cumulant.
8411 iti=itortyp(itype(i))
8412 if (j.lt.nres-1) then
8413 itj1=itortyp(itype(j+1))
8417 itk=itortyp(itype(k))
8418 itk1=itortyp(itype(k+1))
8419 if (l.lt.nres-1) then
8420 itl1=itortyp(itype(l+1))
8425 s1=dip(4,jj,i)*dip(4,kk,k)
8427 call matvec2(AECA(1,1,1),b1(1,itk1),auxvec(1))
8428 s2=0.5d0*scalar2(b1(1,itk),auxvec(1))
8429 call matvec2(AECA(1,1,2),b1(1,itl1),auxvec(1))
8430 s3=0.5d0*scalar2(b1(1,itj1),auxvec(1))
8431 call transpose2(EE(1,1,itk),auxmat(1,1))
8432 call matmat2(auxmat(1,1),AECA(1,1,1),pizda(1,1))
8433 vv(1)=pizda(1,1)+pizda(2,2)
8434 vv(2)=pizda(2,1)-pizda(1,2)
8435 s4=-0.25d0*scalar2(vv(1),Ctobr(1,k))
8436 cd write (2,*) 'eello6_graph3:','s1',s1,' s2',s2,' s3',s3,' s4',s4,
8437 cd & "sum",-(s2+s3+s4)
8439 eello6_graph3=-(s1+s2+s3+s4)
8441 eello6_graph3=-(s2+s3+s4)
8444 C Derivatives in gamma(k-1)
8445 call matvec2(AECAderg(1,1,2),b1(1,itl1),auxvec(1))
8446 s3=0.5d0*scalar2(b1(1,itj1),auxvec(1))
8447 s4=-0.25d0*scalar2(vv(1),Ctobrder(1,k))
8448 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s3+s4)
8449 C Derivatives in gamma(l-1)
8450 call matvec2(AECAderg(1,1,1),b1(1,itk1),auxvec(1))
8451 s2=0.5d0*scalar2(b1(1,itk),auxvec(1))
8452 call matmat2(auxmat(1,1),AECAderg(1,1,1),pizda(1,1))
8453 vv(1)=pizda(1,1)+pizda(2,2)
8454 vv(2)=pizda(2,1)-pizda(1,2)
8455 s4=-0.25d0*scalar2(vv(1),Ctobr(1,k))
8456 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*(s2+s4)
8457 C Cartesian derivatives.
8463 s1=dipderx(lll,kkk,4,jj,i)*dip(4,kk,k)
8465 s1=dip(4,jj,i)*dipderx(lll,kkk,4,kk,k)
8468 call matvec2(AECAderx(1,1,lll,kkk,iii,1),b1(1,itk1),
8470 s2=0.5d0*scalar2(b1(1,itk),auxvec(1))
8471 call matvec2(AECAderx(1,1,lll,kkk,iii,2),b1(1,itl1),
8473 s3=0.5d0*scalar2(b1(1,itj1),auxvec(1))
8474 call matmat2(auxmat(1,1),AECAderx(1,1,lll,kkk,iii,1),
8476 vv(1)=pizda(1,1)+pizda(2,2)
8477 vv(2)=pizda(2,1)-pizda(1,2)
8478 s4=-0.25d0*scalar2(vv(1),Ctobr(1,k))
8480 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s1+s2+s4)
8482 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s2+s4)
8485 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-s3
8487 derx(lll,kkk,iii)=derx(lll,kkk,iii)-s3
8489 c derx(lll,kkk,iii)=derx(lll,kkk,iii)-s4
8495 c----------------------------------------------------------------------------
8496 double precision function eello6_graph4(i,j,k,l,jj,kk,imat,swap)
8497 implicit real*8 (a-h,o-z)
8498 include 'DIMENSIONS'
8499 include 'COMMON.IOUNITS'
8500 include 'COMMON.CHAIN'
8501 include 'COMMON.DERIV'
8502 include 'COMMON.INTERACT'
8503 include 'COMMON.CONTACTS'
8504 include 'COMMON.TORSION'
8505 include 'COMMON.VAR'
8506 include 'COMMON.GEO'
8507 include 'COMMON.FFIELD'
8508 double precision vv(2),pizda(2,2),auxmat(2,2),auxvec(2),
8509 & auxvec1(2),auxmat1(2,2)
8511 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
8513 C Parallel Antiparallel C
8519 C \ j|/k\| \ |/k\|l C
8524 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
8526 C 4/7/01 AL Component s1 was removed, because it pertains to the respective
8527 C energy moment and not to the cluster cumulant.
8528 cd write (2,*) 'eello_graph4: wturn6',wturn6
8529 iti=itortyp(itype(i))
8530 itj=itortyp(itype(j))
8531 if (j.lt.nres-1) then
8532 itj1=itortyp(itype(j+1))
8536 itk=itortyp(itype(k))
8537 if (k.lt.nres-1) then
8538 itk1=itortyp(itype(k+1))
8542 itl=itortyp(itype(l))
8543 if (l.lt.nres-1) then
8544 itl1=itortyp(itype(l+1))
8548 cd write (2,*) 'eello6_graph4:','i',i,' j',j,' k',k,' l',l
8549 cd write (2,*) 'iti',iti,' itj',itj,' itj1',itj1,' itk',itk,
8550 cd & ' itl',itl,' itl1',itl1
8553 s1=dip(3,jj,i)*dip(3,kk,k)
8555 s1=dip(2,jj,j)*dip(2,kk,l)
8558 call matvec2(AECA(1,1,imat),Ub2(1,k),auxvec(1))
8559 s2=0.5d0*scalar2(Ub2(1,i),auxvec(1))
8561 call matvec2(ADtEA1(1,1,3-imat),b1(1,itj1),auxvec1(1))
8562 s3=-0.5d0*scalar2(b1(1,itj),auxvec1(1))
8564 call matvec2(ADtEA1(1,1,3-imat),b1(1,itl1),auxvec1(1))
8565 s3=-0.5d0*scalar2(b1(1,itl),auxvec1(1))
8567 call transpose2(EUg(1,1,k),auxmat(1,1))
8568 call matmat2(AECA(1,1,imat),auxmat(1,1),pizda(1,1))
8569 vv(1)=pizda(1,1)-pizda(2,2)
8570 vv(2)=pizda(2,1)+pizda(1,2)
8571 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
8572 cd write (2,*) 'eello6_graph4:','s1',s1,' s2',s2,' s3',s3,' s4',s4
8574 eello6_graph4=-(s1+s2+s3+s4)
8576 eello6_graph4=-(s2+s3+s4)
8578 C Derivatives in gamma(i-1)
8582 s1=dipderg(2,jj,i)*dip(3,kk,k)
8584 s1=dipderg(4,jj,j)*dip(2,kk,l)
8587 s2=0.5d0*scalar2(Ub2der(1,i),auxvec(1))
8589 call matvec2(ADtEA1derg(1,1,1,3-imat),b1(1,itj1),auxvec1(1))
8590 s3=-0.5d0*scalar2(b1(1,itj),auxvec1(1))
8592 call matvec2(ADtEA1derg(1,1,1,3-imat),b1(1,itl1),auxvec1(1))
8593 s3=-0.5d0*scalar2(b1(1,itl),auxvec1(1))
8595 s4=0.25d0*scalar2(vv(1),Dtobr2der(1,i))
8596 if (wturn6.gt.0.0d0 .and. k.eq.l+4 .and. i.eq.j+2) then
8597 cd write (2,*) 'turn6 derivatives'
8599 gel_loc_turn6(i-1)=gel_loc_turn6(i-1)-ekont*(s1+s2+s3+s4)
8601 gel_loc_turn6(i-1)=gel_loc_turn6(i-1)-ekont*(s2+s3+s4)
8605 g_corr6_loc(i-1)=g_corr6_loc(i-1)-ekont*(s1+s2+s3+s4)
8607 g_corr6_loc(i-1)=g_corr6_loc(i-1)-ekont*(s2+s3+s4)
8611 C Derivatives in gamma(k-1)
8614 s1=dip(3,jj,i)*dipderg(2,kk,k)
8616 s1=dip(2,jj,j)*dipderg(4,kk,l)
8619 call matvec2(AECA(1,1,imat),Ub2der(1,k),auxvec1(1))
8620 s2=0.5d0*scalar2(Ub2(1,i),auxvec1(1))
8622 call matvec2(ADtEA1derg(1,1,2,3-imat),b1(1,itj1),auxvec1(1))
8623 s3=-0.5d0*scalar2(b1(1,itj),auxvec1(1))
8625 call matvec2(ADtEA1derg(1,1,2,3-imat),b1(1,itl1),auxvec1(1))
8626 s3=-0.5d0*scalar2(b1(1,itl),auxvec1(1))
8628 call transpose2(EUgder(1,1,k),auxmat1(1,1))
8629 call matmat2(AECA(1,1,imat),auxmat1(1,1),pizda(1,1))
8630 vv(1)=pizda(1,1)-pizda(2,2)
8631 vv(2)=pizda(2,1)+pizda(1,2)
8632 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
8633 if (wturn6.gt.0.0d0 .and. k.eq.l+4 .and. i.eq.j+2) then
8635 gel_loc_turn6(k-1)=gel_loc_turn6(k-1)-ekont*(s1+s2+s3+s4)
8637 gel_loc_turn6(k-1)=gel_loc_turn6(k-1)-ekont*(s2+s3+s4)
8641 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s1+s2+s3+s4)
8643 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s2+s3+s4)
8646 C Derivatives in gamma(j-1) or gamma(l-1)
8647 if (l.eq.j+1 .and. l.gt.1) then
8648 call matvec2(AECAderg(1,1,imat),Ub2(1,k),auxvec(1))
8649 s2=0.5d0*scalar2(Ub2(1,i),auxvec(1))
8650 call matmat2(AECAderg(1,1,imat),auxmat(1,1),pizda(1,1))
8651 vv(1)=pizda(1,1)-pizda(2,2)
8652 vv(2)=pizda(2,1)+pizda(1,2)
8653 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
8654 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*(s2+s4)
8655 else if (j.gt.1) then
8656 call matvec2(AECAderg(1,1,imat),Ub2(1,k),auxvec(1))
8657 s2=0.5d0*scalar2(Ub2(1,i),auxvec(1))
8658 call matmat2(AECAderg(1,1,imat),auxmat(1,1),pizda(1,1))
8659 vv(1)=pizda(1,1)-pizda(2,2)
8660 vv(2)=pizda(2,1)+pizda(1,2)
8661 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
8662 if (wturn6.gt.0.0d0 .and. k.eq.l+4 .and. i.eq.j+2) then
8663 gel_loc_turn6(j-1)=gel_loc_turn6(j-1)-ekont*(s2+s4)
8665 g_corr6_loc(j-1)=g_corr6_loc(j-1)-ekont*(s2+s4)
8668 C Cartesian derivatives.
8675 s1=dipderx(lll,kkk,3,jj,i)*dip(3,kk,k)
8677 s1=dipderx(lll,kkk,2,jj,j)*dip(2,kk,l)
8681 s1=dip(3,jj,i)*dipderx(lll,kkk,3,kk,k)
8683 s1=dip(2,jj,j)*dipderx(lll,kkk,2,kk,l)
8687 call matvec2(AECAderx(1,1,lll,kkk,iii,imat),Ub2(1,k),
8689 s2=0.5d0*scalar2(Ub2(1,i),auxvec(1))
8691 call matvec2(ADtEA1derx(1,1,lll,kkk,iii,3-imat),
8692 & b1(1,itj1),auxvec(1))
8693 s3=-0.5d0*scalar2(b1(1,itj),auxvec(1))
8695 call matvec2(ADtEA1derx(1,1,lll,kkk,iii,3-imat),
8696 & b1(1,itl1),auxvec(1))
8697 s3=-0.5d0*scalar2(b1(1,itl),auxvec(1))
8699 call matmat2(AECAderx(1,1,lll,kkk,iii,imat),auxmat(1,1),
8701 vv(1)=pizda(1,1)-pizda(2,2)
8702 vv(2)=pizda(2,1)+pizda(1,2)
8703 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
8705 if (wturn6.gt.0.0d0 .and. k.eq.l+4 .and. i.eq.j+2) then
8707 derx_turn(lll,kkk,3-iii)=derx_turn(lll,kkk,3-iii)
8710 derx_turn(lll,kkk,3-iii)=derx_turn(lll,kkk,3-iii)
8713 derx_turn(lll,kkk,iii)=derx_turn(lll,kkk,iii)-s3
8716 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-(s1+s2+s4)
8718 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-(s2+s4)
8720 derx(lll,kkk,iii)=derx(lll,kkk,iii)-s3
8724 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s1+s2+s4)
8726 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s2+s4)
8729 derx(lll,kkk,iii)=derx(lll,kkk,iii)-s3
8731 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-s3
8739 c----------------------------------------------------------------------------
8740 double precision function eello_turn6(i,jj,kk)
8741 implicit real*8 (a-h,o-z)
8742 include 'DIMENSIONS'
8743 include 'COMMON.IOUNITS'
8744 include 'COMMON.CHAIN'
8745 include 'COMMON.DERIV'
8746 include 'COMMON.INTERACT'
8747 include 'COMMON.CONTACTS'
8748 include 'COMMON.TORSION'
8749 include 'COMMON.VAR'
8750 include 'COMMON.GEO'
8751 double precision vtemp1(2),vtemp2(2),vtemp3(2),vtemp4(2),
8752 & atemp(2,2),auxmat(2,2),achuj_temp(2,2),gtemp(2,2),gvec(2),
8754 double precision vtemp1d(2),vtemp2d(2),vtemp3d(2),vtemp4d(2),
8755 & atempd(2,2),auxmatd(2,2),achuj_tempd(2,2),gtempd(2,2),gvecd(2)
8756 C 4/7/01 AL Components s1, s8, and s13 were removed, because they pertain to
8757 C the respective energy moment and not to the cluster cumulant.
8766 iti=itortyp(itype(i))
8767 itk=itortyp(itype(k))
8768 itk1=itortyp(itype(k+1))
8769 itl=itortyp(itype(l))
8770 itj=itortyp(itype(j))
8771 cd write (2,*) 'itk',itk,' itk1',itk1,' itl',itl,' itj',itj
8772 cd write (2,*) 'i',i,' k',k,' j',j,' l',l
8773 cd if (i.ne.1 .or. j.ne.3 .or. k.ne.2 .or. l.ne.4) then
8778 cd & 'EELLO6: Contacts have occurred for peptide groups',i,j,
8780 cd call checkint_turn6(i,jj,kk,eel_turn6_num)
8784 derx_turn(lll,kkk,iii)=0.0d0
8791 eello6_5=eello6_graph4(l,k,j,i,kk,jj,2,.true.)
8793 cd write (2,*) 'eello6_5',eello6_5
8795 call transpose2(AEA(1,1,1),auxmat(1,1))
8796 call matmat2(EUg(1,1,i+1),auxmat(1,1),auxmat(1,1))
8797 ss1=scalar2(Ub2(1,i+2),b1(1,itl))
8798 s1 = (auxmat(1,1)+auxmat(2,2))*ss1
8800 call matvec2(EUg(1,1,i+2),b1(1,itl),vtemp1(1))
8801 call matvec2(AEA(1,1,1),vtemp1(1),vtemp1(1))
8802 s2 = scalar2(b1(1,itk),vtemp1(1))
8804 call transpose2(AEA(1,1,2),atemp(1,1))
8805 call matmat2(atemp(1,1),EUg(1,1,i+4),atemp(1,1))
8806 call matvec2(Ug2(1,1,i+2),dd(1,1,itk1),vtemp2(1))
8807 s8 = -(atemp(1,1)+atemp(2,2))*scalar2(cc(1,1,itl),vtemp2(1))
8809 call matmat2(EUg(1,1,i+3),AEA(1,1,2),auxmat(1,1))
8810 call matvec2(auxmat(1,1),Ub2(1,i+4),vtemp3(1))
8811 s12 = scalar2(Ub2(1,i+2),vtemp3(1))
8813 call transpose2(a_chuj(1,1,kk,i+1),achuj_temp(1,1))
8814 call matmat2(achuj_temp(1,1),EUg(1,1,i+2),gtemp(1,1))
8815 call matmat2(gtemp(1,1),EUg(1,1,i+3),gtemp(1,1))
8816 call matvec2(a_chuj(1,1,jj,i),Ub2(1,i+4),vtemp4(1))
8817 ss13 = scalar2(b1(1,itk),vtemp4(1))
8818 s13 = (gtemp(1,1)+gtemp(2,2))*ss13
8820 c write (2,*) 's1,s2,s8,s12,s13',s1,s2,s8,s12,s13
8826 eel_turn6 = eello6_5 - 0.5d0*(s1+s2+s12+s8+s13)
8827 C Derivatives in gamma(i+2)
8831 call transpose2(AEA(1,1,1),auxmatd(1,1))
8832 call matmat2(EUgder(1,1,i+1),auxmatd(1,1),auxmatd(1,1))
8833 s1d = (auxmatd(1,1)+auxmatd(2,2))*ss1
8834 call transpose2(AEAderg(1,1,2),atempd(1,1))
8835 call matmat2(atempd(1,1),EUg(1,1,i+4),atempd(1,1))
8836 s8d = -(atempd(1,1)+atempd(2,2))*scalar2(cc(1,1,itl),vtemp2(1))
8838 call matmat2(EUg(1,1,i+3),AEAderg(1,1,2),auxmatd(1,1))
8839 call matvec2(auxmatd(1,1),Ub2(1,i+4),vtemp3d(1))
8840 s12d = scalar2(Ub2(1,i+2),vtemp3d(1))
8846 gel_loc_turn6(i)=gel_loc_turn6(i)-0.5d0*ekont*(s1d+s8d+s12d)
8847 C Derivatives in gamma(i+3)
8849 call transpose2(AEA(1,1,1),auxmatd(1,1))
8850 call matmat2(EUg(1,1,i+1),auxmatd(1,1),auxmatd(1,1))
8851 ss1d=scalar2(Ub2der(1,i+2),b1(1,itl))
8852 s1d = (auxmatd(1,1)+auxmatd(2,2))*ss1d
8854 call matvec2(EUgder(1,1,i+2),b1(1,itl),vtemp1d(1))
8855 call matvec2(AEA(1,1,1),vtemp1d(1),vtemp1d(1))
8856 s2d = scalar2(b1(1,itk),vtemp1d(1))
8858 call matvec2(Ug2der(1,1,i+2),dd(1,1,itk1),vtemp2d(1))
8859 s8d = -(atemp(1,1)+atemp(2,2))*scalar2(cc(1,1,itl),vtemp2d(1))
8861 s12d = scalar2(Ub2der(1,i+2),vtemp3(1))
8863 call matmat2(achuj_temp(1,1),EUgder(1,1,i+2),gtempd(1,1))
8864 call matmat2(gtempd(1,1),EUg(1,1,i+3),gtempd(1,1))
8865 s13d = (gtempd(1,1)+gtempd(2,2))*ss13
8873 gel_loc_turn6(i+1)=gel_loc_turn6(i+1)
8874 & -0.5d0*ekont*(s1d+s2d+s8d+s12d+s13d)
8876 gel_loc_turn6(i+1)=gel_loc_turn6(i+1)
8877 & -0.5d0*ekont*(s2d+s12d)
8879 C Derivatives in gamma(i+4)
8880 call matmat2(EUgder(1,1,i+3),AEA(1,1,2),auxmatd(1,1))
8881 call matvec2(auxmatd(1,1),Ub2(1,i+4),vtemp3d(1))
8882 s12d = scalar2(Ub2(1,i+2),vtemp3d(1))
8884 call matmat2(achuj_temp(1,1),EUg(1,1,i+2),gtempd(1,1))
8885 call matmat2(gtempd(1,1),EUgder(1,1,i+3),gtempd(1,1))
8886 s13d = (gtempd(1,1)+gtempd(2,2))*ss13
8894 gel_loc_turn6(i+2)=gel_loc_turn6(i+2)-0.5d0*ekont*(s12d+s13d)
8896 gel_loc_turn6(i+2)=gel_loc_turn6(i+2)-0.5d0*ekont*(s12d)
8898 C Derivatives in gamma(i+5)
8900 call transpose2(AEAderg(1,1,1),auxmatd(1,1))
8901 call matmat2(EUg(1,1,i+1),auxmatd(1,1),auxmatd(1,1))
8902 s1d = (auxmatd(1,1)+auxmatd(2,2))*ss1
8904 call matvec2(EUg(1,1,i+2),b1(1,itl),vtemp1d(1))
8905 call matvec2(AEAderg(1,1,1),vtemp1d(1),vtemp1d(1))
8906 s2d = scalar2(b1(1,itk),vtemp1d(1))
8908 call transpose2(AEA(1,1,2),atempd(1,1))
8909 call matmat2(atempd(1,1),EUgder(1,1,i+4),atempd(1,1))
8910 s8d = -(atempd(1,1)+atempd(2,2))*scalar2(cc(1,1,itl),vtemp2(1))
8912 call matvec2(auxmat(1,1),Ub2der(1,i+4),vtemp3d(1))
8913 s12d = scalar2(Ub2(1,i+2),vtemp3d(1))
8915 call matvec2(a_chuj(1,1,jj,i),Ub2der(1,i+4),vtemp4d(1))
8916 ss13d = scalar2(b1(1,itk),vtemp4d(1))
8917 s13d = (gtemp(1,1)+gtemp(2,2))*ss13d
8925 gel_loc_turn6(i+3)=gel_loc_turn6(i+3)
8926 & -0.5d0*ekont*(s1d+s2d+s8d+s12d+s13d)
8928 gel_loc_turn6(i+3)=gel_loc_turn6(i+3)
8929 & -0.5d0*ekont*(s2d+s12d)
8931 C Cartesian derivatives
8936 call transpose2(AEAderx(1,1,lll,kkk,iii,1),auxmatd(1,1))
8937 call matmat2(EUg(1,1,i+1),auxmatd(1,1),auxmatd(1,1))
8938 s1d = (auxmatd(1,1)+auxmatd(2,2))*ss1
8940 call matvec2(EUg(1,1,i+2),b1(1,itl),vtemp1(1))
8941 call matvec2(AEAderx(1,1,lll,kkk,iii,1),vtemp1(1),
8943 s2d = scalar2(b1(1,itk),vtemp1d(1))
8945 call transpose2(AEAderx(1,1,lll,kkk,iii,2),atempd(1,1))
8946 call matmat2(atempd(1,1),EUg(1,1,i+4),atempd(1,1))
8947 s8d = -(atempd(1,1)+atempd(2,2))*
8948 & scalar2(cc(1,1,itl),vtemp2(1))
8950 call matmat2(EUg(1,1,i+3),AEAderx(1,1,lll,kkk,iii,2),
8952 call matvec2(auxmatd(1,1),Ub2(1,i+4),vtemp3d(1))
8953 s12d = scalar2(Ub2(1,i+2),vtemp3d(1))
8960 derx_turn(lll,kkk,iii) = derx_turn(lll,kkk,iii)
8963 derx_turn(lll,kkk,iii) = derx_turn(lll,kkk,iii)
8967 derx_turn(lll,kkk,3-iii) = derx_turn(lll,kkk,3-iii)
8968 & - 0.5d0*(s8d+s12d)
8970 derx_turn(lll,kkk,3-iii) = derx_turn(lll,kkk,3-iii)
8979 call transpose2(a_chuj_der(1,1,lll,kkk,kk,i+1),
8981 call matmat2(achuj_tempd(1,1),EUg(1,1,i+2),gtempd(1,1))
8982 call matmat2(gtempd(1,1),EUg(1,1,i+3),gtempd(1,1))
8983 s13d=(gtempd(1,1)+gtempd(2,2))*ss13
8984 derx_turn(lll,kkk,2) = derx_turn(lll,kkk,2)-0.5d0*s13d
8985 call matvec2(a_chuj_der(1,1,lll,kkk,jj,i),Ub2(1,i+4),
8987 ss13d = scalar2(b1(1,itk),vtemp4d(1))
8988 s13d = (gtemp(1,1)+gtemp(2,2))*ss13d
8989 derx_turn(lll,kkk,1) = derx_turn(lll,kkk,1)-0.5d0*s13d
8993 cd write(iout,*) 'eel6_turn6',eel_turn6,' eel_turn6_num',
8994 cd & 16*eel_turn6_num
8996 if (j.lt.nres-1) then
9003 if (l.lt.nres-1) then
9011 cgrad ggg1(ll)=eel_turn6*g_contij(ll,1)
9012 cgrad ggg2(ll)=eel_turn6*g_contij(ll,2)
9013 cgrad ghalf=0.5d0*ggg1(ll)
9015 gturn6ij=eel_turn6*g_contij(ll,1)+ekont*derx_turn(ll,1,1)
9016 gturn6kl=eel_turn6*g_contij(ll,2)+ekont*derx_turn(ll,1,2)
9017 gcorr6_turn(ll,i)=gcorr6_turn(ll,i)!+ghalf
9018 & +ekont*derx_turn(ll,2,1)
9019 gcorr6_turn(ll,i+1)=gcorr6_turn(ll,i+1)+ekont*derx_turn(ll,3,1)
9020 gcorr6_turn(ll,j)=gcorr6_turn(ll,j)!+ghalf
9021 & +ekont*derx_turn(ll,4,1)
9022 gcorr6_turn(ll,j1)=gcorr6_turn(ll,j1)+ekont*derx_turn(ll,5,1)
9023 gcorr6_turn_long(ll,j)=gcorr6_turn_long(ll,j)+gturn6ij
9024 gcorr6_turn_long(ll,i)=gcorr6_turn_long(ll,i)-gturn6ij
9025 cgrad ghalf=0.5d0*ggg2(ll)
9027 gcorr6_turn(ll,k)=gcorr6_turn(ll,k)!+ghalf
9028 & +ekont*derx_turn(ll,2,2)
9029 gcorr6_turn(ll,k+1)=gcorr6_turn(ll,k+1)+ekont*derx_turn(ll,3,2)
9030 gcorr6_turn(ll,l)=gcorr6_turn(ll,l)!+ghalf
9031 & +ekont*derx_turn(ll,4,2)
9032 gcorr6_turn(ll,l1)=gcorr6_turn(ll,l1)+ekont*derx_turn(ll,5,2)
9033 gcorr6_turn_long(ll,l)=gcorr6_turn_long(ll,l)+gturn6kl
9034 gcorr6_turn_long(ll,k)=gcorr6_turn_long(ll,k)-gturn6kl
9039 cgrad gcorr6_turn(ll,m)=gcorr6_turn(ll,m)+ggg1(ll)
9044 cgrad gcorr6_turn(ll,m)=gcorr6_turn(ll,m)+ggg2(ll)
9050 cgrad gcorr6_turn(ll,m)=gcorr6_turn(ll,m)+ekont*derx_turn(ll,1,1)
9055 cgrad gcorr6_turn(ll,m)=gcorr6_turn(ll,m)+ekont*derx_turn(ll,1,2)
9059 cd write (2,*) iii,g_corr6_loc(iii)
9061 eello_turn6=ekont*eel_turn6
9062 cd write (2,*) 'ekont',ekont
9063 cd write (2,*) 'eel_turn6',ekont*eel_turn6
9067 C-----------------------------------------------------------------------------
9068 double precision function scalar(u,v)
9069 !DIR$ INLINEALWAYS scalar
9071 cDEC$ ATTRIBUTES FORCEINLINE::scalar
9074 double precision u(3),v(3)
9075 cd double precision sc
9083 scalar=u(1)*v(1)+u(2)*v(2)+u(3)*v(3)
9086 crc-------------------------------------------------
9087 SUBROUTINE MATVEC2(A1,V1,V2)
9088 !DIR$ INLINEALWAYS MATVEC2
9090 cDEC$ ATTRIBUTES FORCEINLINE::MATVEC2
9092 implicit real*8 (a-h,o-z)
9093 include 'DIMENSIONS'
9094 DIMENSION A1(2,2),V1(2),V2(2)
9098 c 3 VI=VI+A1(I,K)*V1(K)
9102 vaux1=a1(1,1)*v1(1)+a1(1,2)*v1(2)
9103 vaux2=a1(2,1)*v1(1)+a1(2,2)*v1(2)
9108 C---------------------------------------
9109 SUBROUTINE MATMAT2(A1,A2,A3)
9111 cDEC$ ATTRIBUTES FORCEINLINE::MATMAT2
9113 implicit real*8 (a-h,o-z)
9114 include 'DIMENSIONS'
9115 DIMENSION A1(2,2),A2(2,2),A3(2,2)
9116 c DIMENSION AI3(2,2)
9120 c A3IJ=A3IJ+A1(I,K)*A2(K,J)
9126 ai3_11=a1(1,1)*a2(1,1)+a1(1,2)*a2(2,1)
9127 ai3_12=a1(1,1)*a2(1,2)+a1(1,2)*a2(2,2)
9128 ai3_21=a1(2,1)*a2(1,1)+a1(2,2)*a2(2,1)
9129 ai3_22=a1(2,1)*a2(1,2)+a1(2,2)*a2(2,2)
9137 c-------------------------------------------------------------------------
9138 double precision function scalar2(u,v)
9139 !DIR$ INLINEALWAYS scalar2
9141 double precision u(2),v(2)
9144 scalar2=u(1)*v(1)+u(2)*v(2)
9148 C-----------------------------------------------------------------------------
9150 subroutine transpose2(a,at)
9151 !DIR$ INLINEALWAYS transpose2
9153 cDEC$ ATTRIBUTES FORCEINLINE::transpose2
9156 double precision a(2,2),at(2,2)
9163 c--------------------------------------------------------------------------
9164 subroutine transpose(n,a,at)
9167 double precision a(n,n),at(n,n)
9175 C---------------------------------------------------------------------------
9176 subroutine prodmat3(a1,a2,kk,transp,prod)
9177 !DIR$ INLINEALWAYS prodmat3
9179 cDEC$ ATTRIBUTES FORCEINLINE::prodmat3
9183 double precision a1(2,2),a2(2,2),a2t(2,2),kk(2,2),prod(2,2)
9185 crc double precision auxmat(2,2),prod_(2,2)
9188 crc call transpose2(kk(1,1),auxmat(1,1))
9189 crc call matmat2(a1(1,1),auxmat(1,1),auxmat(1,1))
9190 crc call matmat2(auxmat(1,1),a2(1,1),prod_(1,1))
9192 prod(1,1)=(a1(1,1)*kk(1,1)+a1(1,2)*kk(1,2))*a2(1,1)
9193 & +(a1(1,1)*kk(2,1)+a1(1,2)*kk(2,2))*a2(2,1)
9194 prod(1,2)=(a1(1,1)*kk(1,1)+a1(1,2)*kk(1,2))*a2(1,2)
9195 & +(a1(1,1)*kk(2,1)+a1(1,2)*kk(2,2))*a2(2,2)
9196 prod(2,1)=(a1(2,1)*kk(1,1)+a1(2,2)*kk(1,2))*a2(1,1)
9197 & +(a1(2,1)*kk(2,1)+a1(2,2)*kk(2,2))*a2(2,1)
9198 prod(2,2)=(a1(2,1)*kk(1,1)+a1(2,2)*kk(1,2))*a2(1,2)
9199 & +(a1(2,1)*kk(2,1)+a1(2,2)*kk(2,2))*a2(2,2)
9202 crc call matmat2(a1(1,1),kk(1,1),auxmat(1,1))
9203 crc call matmat2(auxmat(1,1),a2(1,1),prod_(1,1))
9205 prod(1,1)=(a1(1,1)*kk(1,1)+a1(1,2)*kk(2,1))*a2(1,1)
9206 & +(a1(1,1)*kk(1,2)+a1(1,2)*kk(2,2))*a2(2,1)
9207 prod(1,2)=(a1(1,1)*kk(1,1)+a1(1,2)*kk(2,1))*a2(1,2)
9208 & +(a1(1,1)*kk(1,2)+a1(1,2)*kk(2,2))*a2(2,2)
9209 prod(2,1)=(a1(2,1)*kk(1,1)+a1(2,2)*kk(2,1))*a2(1,1)
9210 & +(a1(2,1)*kk(1,2)+a1(2,2)*kk(2,2))*a2(2,1)
9211 prod(2,2)=(a1(2,1)*kk(1,1)+a1(2,2)*kk(2,1))*a2(1,2)
9212 & +(a1(2,1)*kk(1,2)+a1(2,2)*kk(2,2))*a2(2,2)
9215 c call transpose2(a2(1,1),a2t(1,1))
9218 crc print *,((prod_(i,j),i=1,2),j=1,2)
9219 crc print *,((prod(i,j),i=1,2),j=1,2)