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
32 C FG slaves call the following matching MPI_Bcast in ERGASTULUM
33 if (fg_rank.eq.0) then
34 call MPI_Bcast(0,1,MPI_INTEGER,king,FG_COMM,IERROR)
35 c print *,"Processor",myrank," BROADCAST iorder"
36 C FG master sets up the WEIGHTS_ array which will be broadcast to the
37 C FG slaves as WEIGHTS array.
57 C FG Master broadcasts the WEIGHTS_ array
58 call MPI_Bcast(weights_(1),n_ene,
59 & MPI_DOUBLE_PRECISION,king,FG_COMM,IERROR)
61 C FG slaves receive the WEIGHTS array
62 call MPI_Bcast(weights(1),n_ene,
63 & MPI_DOUBLE_PRECISION,king,FG_COMM,IERROR)
84 time_Bcast=time_Bcast+MPI_Wtime()-time00
85 time_Bcastw=time_Bcastw+MPI_Wtime()-time00
86 c call chainbuild_cart
88 c print *,'Processor',myrank,' calling etotal ipot=',ipot
89 c print *,'Processor',myrank,' nnt=',nnt,' nct=',nct
91 c if (modecalc.eq.12.or.modecalc.eq.14) then
92 c call int_from_cart1(.false.)
99 C Compute the side-chain and electrostatic interaction energy
101 goto (101,102,103,104,105,106) ipot
102 C Lennard-Jones potential.
104 cd print '(a)','Exit ELJ'
106 C Lennard-Jones-Kihara potential (shifted).
109 C Berne-Pechukas potential (dilated LJ, angular dependence).
112 C Gay-Berne potential (shifted LJ, angular dependence).
115 C Gay-Berne-Vorobjev potential (shifted LJ, angular dependence).
118 C Soft-sphere potential
119 106 call e_softsphere(evdw)
121 C Calculate electrostatic (H-bonding) energy of the main chain.
125 cmc Sep-06: egb takes care of dynamic ss bonds too
127 c if (dyn_ss) call dyn_set_nss
129 c print *,"Processor",myrank," computed USCSC"
135 time_vec=time_vec+MPI_Wtime()-time01
137 c print *,"Processor",myrank," left VEC_AND_DERIV"
140 if (welec.gt.0d0.or.wvdwpp.gt.0d0.or.wel_loc.gt.0d0.or.
141 & wturn3.gt.0d0.or.wturn4.gt.0d0 .or. wcorr.gt.0.0d0
142 & .or. wcorr4.gt.0.0d0 .or. wcorr5.gt.0.d0
143 & .or. wcorr6.gt.0.0d0 .or. wturn6.gt.0.0d0 ) then
145 if (welec.gt.0d0.or.wel_loc.gt.0d0.or.
146 & wturn3.gt.0d0.or.wturn4.gt.0d0 .or. wcorr.gt.0.0d0
147 & .or. wcorr4.gt.0.0d0 .or. wcorr5.gt.0.d0
148 & .or. wcorr6.gt.0.0d0 .or. wturn6.gt.0.0d0 ) then
150 call eelec(ees,evdw1,eel_loc,eello_turn3,eello_turn4)
159 c write (iout,*) "Soft-spheer ELEC potential"
160 call eelec_soft_sphere(ees,evdw1,eel_loc,eello_turn3,
163 c print *,"Processor",myrank," computed UELEC"
165 C Calculate excluded-volume interaction energy between peptide groups
170 call escp(evdw2,evdw2_14)
176 c write (iout,*) "Soft-sphere SCP potential"
177 call escp_soft_sphere(evdw2,evdw2_14)
180 c Calculate the bond-stretching energy
184 C Calculate the disulfide-bridge and other energy and the contributions
185 C from other distance constraints.
186 cd print *,'Calling EHPB'
188 cd print *,'EHPB exitted succesfully.'
190 C Calculate the virtual-bond-angle energy.
192 if (wang.gt.0d0) then
197 c print *,"Processor",myrank," computed UB"
199 C Calculate the SC local energy.
202 c print *,"Processor",myrank," computed USC"
204 C Calculate the virtual-bond torsional energy.
206 cd print *,'nterm=',nterm
208 call etor(etors,edihcnstr)
213 c print *,"Processor",myrank," computed Utor"
215 C 6/23/01 Calculate double-torsional energy
217 if (wtor_d.gt.0) then
222 c print *,"Processor",myrank," computed Utord"
224 C 21/5/07 Calculate local sicdechain correlation energy
226 if (wsccor.gt.0.0d0) then
227 call eback_sc_corr(esccor)
231 c print *,"Processor",myrank," computed Usccorr"
233 C 12/1/95 Multi-body terms
237 if ((wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0
238 & .or. wturn6.gt.0.0d0) .and. ipot.lt.6) then
239 call multibody_eello(ecorr,ecorr5,ecorr6,eturn6,n_corr,n_corr1)
240 cd write(2,*)'multibody_eello n_corr=',n_corr,' n_corr1=',n_corr1,
241 cd &" ecorr",ecorr," ecorr5",ecorr5," ecorr6",ecorr6," eturn6",eturn6
248 if ((wcorr4.eq.0.0d0 .and. wcorr.gt.0.0d0) .and. ipot.lt.6) then
249 call multibody_hb(ecorr,ecorr5,ecorr6,n_corr,n_corr1)
250 cd write (iout,*) "multibody_hb ecorr",ecorr
252 c print *,"Processor",myrank," computed Ucorr"
254 C If performing constraint dynamics, call the constraint energy
255 C after the equilibration time
256 if(usampl.and.totT.gt.eq_time) then
264 time_enecalc=time_enecalc+MPI_Wtime()-time00
266 c print *,"Processor",myrank," computed Uconstr"
275 energia(2)=evdw2-evdw2_14
292 energia(8)=eello_turn3
293 energia(9)=eello_turn4
300 energia(19)=edihcnstr
302 energia(20)=Uconst+Uconst_back
304 c print *," Processor",myrank," calls SUM_ENERGY"
305 call sum_energy(energia,.true.)
306 if (dyn_ss) call dyn_set_nss
307 c print *," Processor",myrank," left SUM_ENERGY"
309 time_sumene=time_sumene+MPI_Wtime()-time00
313 c-------------------------------------------------------------------------------
314 subroutine sum_energy(energia,reduce)
315 implicit real*8 (a-h,o-z)
320 cMS$ATTRIBUTES C :: proc_proc
326 include 'COMMON.SETUP'
327 include 'COMMON.IOUNITS'
328 double precision energia(0:n_ene),enebuff(0:n_ene+1)
329 include 'COMMON.FFIELD'
330 include 'COMMON.DERIV'
331 include 'COMMON.INTERACT'
332 include 'COMMON.SBRIDGE'
333 include 'COMMON.CHAIN'
335 include 'COMMON.CONTROL'
336 include 'COMMON.TIME1'
339 if (nfgtasks.gt.1 .and. reduce) then
341 write (iout,*) "energies before REDUCE"
342 call enerprint(energia)
346 enebuff(i)=energia(i)
349 call MPI_Barrier(FG_COMM,IERR)
350 time_barrier_e=time_barrier_e+MPI_Wtime()-time00
352 call MPI_Reduce(enebuff(0),energia(0),n_ene+1,
353 & MPI_DOUBLE_PRECISION,MPI_SUM,king,FG_COMM,IERR)
355 write (iout,*) "energies after REDUCE"
356 call enerprint(energia)
359 time_Reduce=time_Reduce+MPI_Wtime()-time00
361 if (fg_rank.eq.0) then
365 evdw2=energia(2)+energia(18)
381 eello_turn3=energia(8)
382 eello_turn4=energia(9)
389 edihcnstr=energia(19)
394 etot=wsc*evdw+wscp*evdw2+welec*ees+wvdwpp*evdw1
395 & +wang*ebe+wtor*etors+wscloc*escloc
396 & +wstrain*ehpb+wcorr*ecorr+wcorr5*ecorr5
397 & +wcorr6*ecorr6+wturn4*eello_turn4+wturn3*eello_turn3
398 & +wturn6*eturn6+wel_loc*eel_loc+edihcnstr+wtor_d*etors_d
399 & +wbond*estr+Uconst+wsccor*esccor
401 etot=wsc*evdw+wscp*evdw2+welec*(ees+evdw1)
402 & +wang*ebe+wtor*etors+wscloc*escloc
403 & +wstrain*ehpb+wcorr*ecorr+wcorr5*ecorr5
404 & +wcorr6*ecorr6+wturn4*eello_turn4+wturn3*eello_turn3
405 & +wturn6*eturn6+wel_loc*eel_loc+edihcnstr+wtor_d*etors_d
406 & +wbond*estr+Uconst+wsccor*esccor
412 if (isnan(etot).ne.0) energia(0)=1.0d+99
414 if (isnan(etot)) energia(0)=1.0d+99
419 idumm=proc_proc(etot,i)
421 call proc_proc(etot,i)
423 if(i.eq.1)energia(0)=1.0d+99
430 c-------------------------------------------------------------------------------
431 subroutine sum_gradient
432 implicit real*8 (a-h,o-z)
437 cMS$ATTRIBUTES C :: proc_proc
443 double precision gradbufc(3,maxres),gradbufx(3,maxres),
444 & glocbuf(4*maxres),gradbufc_sum(3,maxres),gloc_scbuf(3,maxres)
446 include 'COMMON.SETUP'
447 include 'COMMON.IOUNITS'
448 include 'COMMON.FFIELD'
449 include 'COMMON.DERIV'
450 include 'COMMON.INTERACT'
451 include 'COMMON.SBRIDGE'
452 include 'COMMON.CHAIN'
454 include 'COMMON.CONTROL'
455 include 'COMMON.TIME1'
456 include 'COMMON.MAXGRAD'
457 include 'COMMON.SCCOR'
462 write (iout,*) "sum_gradient gvdwc, gvdwx"
464 write (iout,'(i3,3f10.5,5x,3f10.5,5x,f10.5)')
465 & i,(gvdwx(j,i),j=1,3),(gvdwc(j,i),j=1,3)
470 C FG slaves call the following matching MPI_Bcast in ERGASTULUM
471 if (nfgtasks.gt.1 .and. fg_rank.eq.0)
472 & call MPI_Bcast(1,1,MPI_INTEGER,king,FG_COMM,IERROR)
475 C 9/29/08 AL Transform parts of gradients in site coordinates to the gradient
476 C in virtual-bond-vector coordinates
479 c write (iout,*) "gel_loc gel_loc_long and gel_loc_loc"
481 c write (iout,'(i5,3f10.5,2x,3f10.5,2x,f10.5)')
482 c & i,(gel_loc(j,i),j=1,3),(gel_loc_long(j,i),j=1,3),gel_loc_loc(i)
484 c write (iout,*) "gel_loc_tur3 gel_loc_turn4"
486 c write (iout,'(i5,3f10.5,2x,f10.5)')
487 c & i,(gcorr4_turn(j,i),j=1,3),gel_loc_turn4(i)
489 write (iout,*) "gradcorr5 gradcorr5_long gradcorr5_loc"
491 write (iout,'(i3,3f10.5,5x,3f10.5,5x,f10.5)')
492 & i,(gradcorr5(j,i),j=1,3),(gradcorr5_long(j,i),j=1,3),
500 gradbufc(j,i)=wsc*gvdwc(j,i)+
501 & wscp*(gvdwc_scp(j,i)+gvdwc_scpp(j,i))+
502 & welec*gelc_long(j,i)+wvdwpp*gvdwpp(j,i)+
503 & wel_loc*gel_loc_long(j,i)+
504 & wcorr*gradcorr_long(j,i)+
505 & wcorr5*gradcorr5_long(j,i)+
506 & wcorr6*gradcorr6_long(j,i)+
507 & wturn6*gcorr6_turn_long(j,i)+
514 gradbufc(j,i)=wsc*gvdwc(j,i)+
515 & wscp*(gvdwc_scp(j,i)+gvdwc_scpp(j,i))+
516 & welec*gelc_long(j,i)+
518 & wel_loc*gel_loc_long(j,i)+
519 & wcorr*gradcorr_long(j,i)+
520 & wcorr5*gradcorr5_long(j,i)+
521 & wcorr6*gradcorr6_long(j,i)+
522 & wturn6*gcorr6_turn_long(j,i)+
528 if (nfgtasks.gt.1) then
531 write (iout,*) "gradbufc before allreduce"
533 write (iout,'(i3,3f10.5)') i,(gradbufc(j,i),j=1,3)
539 gradbufc_sum(j,i)=gradbufc(j,i)
542 c call MPI_AllReduce(gradbufc(1,1),gradbufc_sum(1,1),3*nres,
543 c & MPI_DOUBLE_PRECISION,MPI_SUM,FG_COMM,IERR)
544 c time_reduce=time_reduce+MPI_Wtime()-time00
546 c write (iout,*) "gradbufc_sum after allreduce"
548 c write (iout,'(i3,3f10.5)') i,(gradbufc_sum(j,i),j=1,3)
553 c time_allreduce=time_allreduce+MPI_Wtime()-time00
561 write (iout,*) "igrad_start",igrad_start," igrad_end",igrad_end
562 write (iout,*) (i," jgrad_start",jgrad_start(i),
563 & " jgrad_end ",jgrad_end(i),
564 & i=igrad_start,igrad_end)
567 c Obsolete and inefficient code; we can make the effort O(n) and, therefore,
568 c do not parallelize this part.
570 c do i=igrad_start,igrad_end
571 c do j=jgrad_start(i),jgrad_end(i)
573 c gradbufc(k,i)=gradbufc(k,i)+gradbufc_sum(k,j)
578 gradbufc(j,nres-1)=gradbufc_sum(j,nres)
582 gradbufc(j,i)=gradbufc(j,i+1)+gradbufc_sum(j,i+1)
586 write (iout,*) "gradbufc after summing"
588 write (iout,'(i3,3f10.5)') i,(gradbufc(j,i),j=1,3)
595 write (iout,*) "gradbufc"
597 write (iout,'(i3,3f10.5)') i,(gradbufc(j,i),j=1,3)
603 gradbufc_sum(j,i)=gradbufc(j,i)
608 gradbufc(j,nres-1)=gradbufc_sum(j,nres)
612 gradbufc(j,i)=gradbufc(j,i+1)+gradbufc_sum(j,i+1)
617 c gradbufc(k,i)=0.0d0
621 c gradbufc(k,i)=gradbufc(k,i)+gradbufc(k,j)
626 write (iout,*) "gradbufc after summing"
628 write (iout,'(i3,3f10.5)') i,(gradbufc(j,i),j=1,3)
636 gradbufc(k,nres)=0.0d0
641 gradc(j,i,icg)=gradbufc(j,i)+welec*gelc(j,i)+
642 & wel_loc*gel_loc(j,i)+
643 & 0.5d0*(wscp*gvdwc_scpp(j,i)+
644 & welec*gelc_long(j,i)+wvdwpp*gvdwpp(j,i)+
645 & wel_loc*gel_loc_long(j,i)+
646 & wcorr*gradcorr_long(j,i)+
647 & wcorr5*gradcorr5_long(j,i)+
648 & wcorr6*gradcorr6_long(j,i)+
649 & wturn6*gcorr6_turn_long(j,i))+
651 & wcorr*gradcorr(j,i)+
652 & wturn3*gcorr3_turn(j,i)+
653 & wturn4*gcorr4_turn(j,i)+
654 & wcorr5*gradcorr5(j,i)+
655 & wcorr6*gradcorr6(j,i)+
656 & wturn6*gcorr6_turn(j,i)+
657 & wsccor*gsccorc(j,i)
658 & +wscloc*gscloc(j,i)
660 gradc(j,i,icg)=gradbufc(j,i)+welec*gelc(j,i)+
661 & wel_loc*gel_loc(j,i)+
662 & 0.5d0*(wscp*gvdwc_scpp(j,i)+
663 & welec*gelc_long(j,i)
664 & wel_loc*gel_loc_long(j,i)+
665 & wcorr*gcorr_long(j,i)+
666 & wcorr5*gradcorr5_long(j,i)+
667 & wcorr6*gradcorr6_long(j,i)+
668 & wturn6*gcorr6_turn_long(j,i))+
670 & wcorr*gradcorr(j,i)+
671 & wturn3*gcorr3_turn(j,i)+
672 & wturn4*gcorr4_turn(j,i)+
673 & wcorr5*gradcorr5(j,i)+
674 & wcorr6*gradcorr6(j,i)+
675 & wturn6*gcorr6_turn(j,i)+
676 & wsccor*gsccorc(j,i)
677 & +wscloc*gscloc(j,i)
679 gradx(j,i,icg)=wsc*gvdwx(j,i)+wscp*gradx_scp(j,i)+
681 & wstrain*ghpbx(j,i)+wcorr*gradxorr(j,i)+
682 & wsccor*gsccorx(j,i)
683 & +wscloc*gsclocx(j,i)
687 write (iout,*) "gloc before adding corr"
689 write (iout,*) i,gloc(i,icg)
693 gloc(i,icg)=gloc(i,icg)+wcorr*gcorr_loc(i)
694 & +wcorr5*g_corr5_loc(i)
695 & +wcorr6*g_corr6_loc(i)
696 & +wturn4*gel_loc_turn4(i)
697 & +wturn3*gel_loc_turn3(i)
698 & +wturn6*gel_loc_turn6(i)
699 & +wel_loc*gel_loc_loc(i)
702 write (iout,*) "gloc after adding corr"
704 write (iout,*) i,gloc(i,icg)
708 if (nfgtasks.gt.1) then
711 gradbufc(j,i)=gradc(j,i,icg)
712 gradbufx(j,i)=gradx(j,i,icg)
716 glocbuf(i)=gloc(i,icg)
720 write (iout,*) "gloc_sc before reduce"
723 write (iout,*) i,j,gloc_sc(j,i,icg)
730 gloc_scbuf(j,i)=gloc_sc(j,i,icg)
734 call MPI_Barrier(FG_COMM,IERR)
735 time_barrier_g=time_barrier_g+MPI_Wtime()-time00
737 call MPI_Reduce(gradbufc(1,1),gradc(1,1,icg),3*nres,
738 & MPI_DOUBLE_PRECISION,MPI_SUM,king,FG_COMM,IERR)
739 call MPI_Reduce(gradbufx(1,1),gradx(1,1,icg),3*nres,
740 & MPI_DOUBLE_PRECISION,MPI_SUM,king,FG_COMM,IERR)
741 call MPI_Reduce(glocbuf(1),gloc(1,icg),4*nres,
742 & MPI_DOUBLE_PRECISION,MPI_SUM,king,FG_COMM,IERR)
743 time_reduce=time_reduce+MPI_Wtime()-time00
744 call MPI_Reduce(gloc_scbuf(1,1),gloc_sc(1,1,icg),3*nres,
745 & MPI_DOUBLE_PRECISION,MPI_SUM,king,FG_COMM,IERR)
746 time_reduce=time_reduce+MPI_Wtime()-time00
749 write (iout,*) "gloc_sc after reduce"
752 write (iout,*) i,j,gloc_sc(j,i,icg)
758 write (iout,*) "gloc after reduce"
760 write (iout,*) i,gloc(i,icg)
765 if (gnorm_check) then
767 c Compute the maximum elements of the gradient
777 gcorr3_turn_max=0.0d0
778 gcorr4_turn_max=0.0d0
781 gcorr6_turn_max=0.0d0
791 gvdwc_norm=dsqrt(scalar(gvdwc(1,i),gvdwc(1,i)))
792 if (gvdwc_norm.gt.gvdwc_max) gvdwc_max=gvdwc_norm
793 gvdwc_scp_norm=dsqrt(scalar(gvdwc_scp(1,i),gvdwc_scp(1,i)))
794 if (gvdwc_scp_norm.gt.gvdwc_scp_max)
795 & gvdwc_scp_max=gvdwc_scp_norm
796 gelc_norm=dsqrt(scalar(gelc(1,i),gelc(1,i)))
797 if (gelc_norm.gt.gelc_max) gelc_max=gelc_norm
798 gvdwpp_norm=dsqrt(scalar(gvdwpp(1,i),gvdwpp(1,i)))
799 if (gvdwpp_norm.gt.gvdwpp_max) gvdwpp_max=gvdwpp_norm
800 gradb_norm=dsqrt(scalar(gradb(1,i),gradb(1,i)))
801 if (gradb_norm.gt.gradb_max) gradb_max=gradb_norm
802 ghpbc_norm=dsqrt(scalar(ghpbc(1,i),ghpbc(1,i)))
803 if (ghpbc_norm.gt.ghpbc_max) ghpbc_max=ghpbc_norm
804 gradcorr_norm=dsqrt(scalar(gradcorr(1,i),gradcorr(1,i)))
805 if (gradcorr_norm.gt.gradcorr_max) gradcorr_max=gradcorr_norm
806 gel_loc_norm=dsqrt(scalar(gel_loc(1,i),gel_loc(1,i)))
807 if (gel_loc_norm.gt.gel_loc_max) gel_loc_max=gel_loc_norm
808 gcorr3_turn_norm=dsqrt(scalar(gcorr3_turn(1,i),
810 if (gcorr3_turn_norm.gt.gcorr3_turn_max)
811 & gcorr3_turn_max=gcorr3_turn_norm
812 gcorr4_turn_norm=dsqrt(scalar(gcorr4_turn(1,i),
814 if (gcorr4_turn_norm.gt.gcorr4_turn_max)
815 & gcorr4_turn_max=gcorr4_turn_norm
816 gradcorr5_norm=dsqrt(scalar(gradcorr5(1,i),gradcorr5(1,i)))
817 if (gradcorr5_norm.gt.gradcorr5_max)
818 & gradcorr5_max=gradcorr5_norm
819 gradcorr6_norm=dsqrt(scalar(gradcorr6(1,i),gradcorr6(1,i)))
820 if (gradcorr6_norm.gt.gradcorr6_max) gcorr6_max=gradcorr6_norm
821 gcorr6_turn_norm=dsqrt(scalar(gcorr6_turn(1,i),
823 if (gcorr6_turn_norm.gt.gcorr6_turn_max)
824 & gcorr6_turn_max=gcorr6_turn_norm
825 gsccorr_norm=dsqrt(scalar(gsccorc(1,i),gsccorc(1,i)))
826 if (gsccorr_norm.gt.gsccorr_max) gsccorr_max=gsccorr_norm
827 gscloc_norm=dsqrt(scalar(gscloc(1,i),gscloc(1,i)))
828 if (gscloc_norm.gt.gscloc_max) gscloc_max=gscloc_norm
829 gvdwx_norm=dsqrt(scalar(gvdwx(1,i),gvdwx(1,i)))
830 if (gvdwx_norm.gt.gvdwx_max) gvdwx_max=gvdwx_norm
831 gradx_scp_norm=dsqrt(scalar(gradx_scp(1,i),gradx_scp(1,i)))
832 if (gradx_scp_norm.gt.gradx_scp_max)
833 & gradx_scp_max=gradx_scp_norm
834 ghpbx_norm=dsqrt(scalar(ghpbx(1,i),ghpbx(1,i)))
835 if (ghpbx_norm.gt.ghpbx_max) ghpbx_max=ghpbx_norm
836 gradxorr_norm=dsqrt(scalar(gradxorr(1,i),gradxorr(1,i)))
837 if (gradxorr_norm.gt.gradxorr_max) gradxorr_max=gradxorr_norm
838 gsccorrx_norm=dsqrt(scalar(gsccorx(1,i),gsccorx(1,i)))
839 if (gsccorrx_norm.gt.gsccorrx_max) gsccorrx_max=gsccorrx_norm
840 gsclocx_norm=dsqrt(scalar(gsclocx(1,i),gsclocx(1,i)))
841 if (gsclocx_norm.gt.gsclocx_max) gsclocx_max=gsclocx_norm
845 open(istat,file=statname,position="append")
847 open(istat,file=statname,access="append")
849 write (istat,'(1h#,21f10.2)') gvdwc_max,gvdwc_scp_max,
850 & gelc_max,gvdwpp_max,gradb_max,ghpbc_max,
851 & gradcorr_max,gel_loc_max,gcorr3_turn_max,gcorr4_turn_max,
852 & gradcorr5_max,gradcorr6_max,gcorr6_turn_max,gsccorc_max,
853 & gscloc_max,gvdwx_max,gradx_scp_max,ghpbx_max,gradxorr_max,
854 & gsccorx_max,gsclocx_max
856 if (gvdwc_max.gt.1.0d4) then
857 write (iout,*) "gvdwc gvdwx gradb gradbx"
859 write(iout,'(i5,4(3f10.2,5x))') i,(gvdwc(j,i),gvdwx(j,i),
860 & gradb(j,i),gradbx(j,i),j=1,3)
862 call pdbout(0.0d0,'cipiszcze',iout)
868 write (iout,*) "gradc gradx gloc"
870 write (iout,'(i5,3f10.5,5x,3f10.5,5x,f10.5)')
871 & i,(gradc(j,i,icg),j=1,3),(gradx(j,i,icg),j=1,3),gloc(i,icg)
875 time_sumgradient=time_sumgradient+MPI_Wtime()-time01
879 c-------------------------------------------------------------------------------
880 subroutine rescale_weights(t_bath)
881 implicit real*8 (a-h,o-z)
883 include 'COMMON.IOUNITS'
884 include 'COMMON.FFIELD'
885 include 'COMMON.SBRIDGE'
886 double precision kfac /2.4d0/
887 double precision x,x2,x3,x4,x5,licznik /1.12692801104297249644/
889 c facT=2*temp0/(t_bath+temp0)
890 if (rescale_mode.eq.0) then
896 else if (rescale_mode.eq.1) then
897 facT=kfac/(kfac-1.0d0+t_bath/temp0)
898 facT2=kfac**2/(kfac**2-1.0d0+(t_bath/temp0)**2)
899 facT3=kfac**3/(kfac**3-1.0d0+(t_bath/temp0)**3)
900 facT4=kfac**4/(kfac**4-1.0d0+(t_bath/temp0)**4)
901 facT5=kfac**5/(kfac**5-1.0d0+(t_bath/temp0)**5)
902 else if (rescale_mode.eq.2) then
908 facT=licznik/dlog(dexp(x)+dexp(-x))
909 facT2=licznik/dlog(dexp(x2)+dexp(-x2))
910 facT3=licznik/dlog(dexp(x3)+dexp(-x3))
911 facT4=licznik/dlog(dexp(x4)+dexp(-x4))
912 facT5=licznik/dlog(dexp(x5)+dexp(-x5))
914 write (iout,*) "Wrong RESCALE_MODE",rescale_mode
915 write (*,*) "Wrong RESCALE_MODE",rescale_mode
917 call MPI_Finalize(MPI_COMM_WORLD,IERROR)
921 welec=weights(3)*fact
922 wcorr=weights(4)*fact3
923 wcorr5=weights(5)*fact4
924 wcorr6=weights(6)*fact5
925 wel_loc=weights(7)*fact2
926 wturn3=weights(8)*fact2
927 wturn4=weights(9)*fact3
928 wturn6=weights(10)*fact5
929 wtor=weights(13)*fact
930 wtor_d=weights(14)*fact2
931 wsccor=weights(21)*fact
935 C------------------------------------------------------------------------
936 subroutine enerprint(energia)
937 implicit real*8 (a-h,o-z)
939 include 'COMMON.IOUNITS'
940 include 'COMMON.FFIELD'
941 include 'COMMON.SBRIDGE'
943 double precision energia(0:n_ene)
948 evdw2=energia(2)+energia(18)
960 eello_turn3=energia(8)
961 eello_turn4=energia(9)
962 eello_turn6=energia(10)
968 edihcnstr=energia(19)
973 write (iout,10) evdw,wsc,evdw2,wscp,ees,welec,evdw1,wvdwpp,
974 & estr,wbond,ebe,wang,
975 & escloc,wscloc,etors,wtor,etors_d,wtor_d,ehpb,wstrain,
977 & ecorr5,wcorr5,ecorr6,wcorr6,eel_loc,wel_loc,eello_turn3,wturn3,
978 & eello_turn4,wturn4,eello_turn6,wturn6,esccor,wsccor,
981 10 format (/'Virtual-chain energies:'//
982 & 'EVDW= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC-SC)'/
983 & 'EVDW2= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC-p)'/
984 & 'EES= ',1pE16.6,' WEIGHT=',1pD16.6,' (p-p)'/
985 & 'EVDWPP=',1pE16.6,' WEIGHT=',1pD16.6,' (p-p VDW)'/
986 & 'ESTR= ',1pE16.6,' WEIGHT=',1pD16.6,' (stretching)'/
987 & 'EBE= ',1pE16.6,' WEIGHT=',1pD16.6,' (bending)'/
988 & 'ESC= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC local)'/
989 & 'ETORS= ',1pE16.6,' WEIGHT=',1pD16.6,' (torsional)'/
990 & 'ETORSD=',1pE16.6,' WEIGHT=',1pD16.6,' (double torsional)'/
991 & 'EHBP= ',1pE16.6,' WEIGHT=',1pD16.6,
992 & ' (SS bridges & dist. cnstr.)'/
993 & 'ECORR4=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
994 & 'ECORR5=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
995 & 'ECORR6=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
996 & 'EELLO= ',1pE16.6,' WEIGHT=',1pD16.6,' (electrostatic-local)'/
997 & 'ETURN3=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 3rd order)'/
998 & 'ETURN4=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 4th order)'/
999 & 'ETURN6=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 6th order)'/
1000 & 'ESCCOR=',1pE16.6,' WEIGHT=',1pD16.6,' (backbone-rotamer corr)'/
1001 & 'EDIHC= ',1pE16.6,' (dihedral angle constraints)'/
1002 & 'ESS= ',1pE16.6,' (disulfide-bridge intrinsic energy)'/
1003 & 'UCONST= ',1pE16.6,' (Constraint energy)'/
1004 & 'ETOT= ',1pE16.6,' (total)')
1006 write (iout,10) evdw,wsc,evdw2,wscp,ees,welec,
1007 & estr,wbond,ebe,wang,
1008 & escloc,wscloc,etors,wtor,etors_d,wtor_d,ehpb,wstrain,
1010 & ecorr5,wcorr5,ecorr6,wcorr6,eel_loc,wel_loc,eello_turn3,wturn3,
1011 & eello_turn4,wturn4,eello_turn6,wturn6,esccor,wsccro,edihcnstr,
1012 & ebr*nss,Uconst,etot
1013 10 format (/'Virtual-chain energies:'//
1014 & 'EVDW= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC-SC)'/
1015 & 'EVDW2= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC-p)'/
1016 & 'EES= ',1pE16.6,' WEIGHT=',1pD16.6,' (p-p)'/
1017 & 'ESTR= ',1pE16.6,' WEIGHT=',1pD16.6,' (stretching)'/
1018 & 'EBE= ',1pE16.6,' WEIGHT=',1pD16.6,' (bending)'/
1019 & 'ESC= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC local)'/
1020 & 'ETORS= ',1pE16.6,' WEIGHT=',1pD16.6,' (torsional)'/
1021 & 'ETORSD=',1pE16.6,' WEIGHT=',1pD16.6,' (double torsional)'/
1022 & 'EHBP= ',1pE16.6,' WEIGHT=',1pD16.6,
1023 & ' (SS bridges & dist. cnstr.)'/
1024 & 'ECORR4=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
1025 & 'ECORR5=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
1026 & 'ECORR6=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
1027 & 'EELLO= ',1pE16.6,' WEIGHT=',1pD16.6,' (electrostatic-local)'/
1028 & 'ETURN3=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 3rd order)'/
1029 & 'ETURN4=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 4th order)'/
1030 & 'ETURN6=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 6th order)'/
1031 & 'ESCCOR=',1pE16.6,' WEIGHT=',1pD16.6,' (backbone-rotamer corr)'/
1032 & 'EDIHC= ',1pE16.6,' (dihedral angle constraints)'/
1033 & 'ESS= ',1pE16.6,' (disulfide-bridge intrinsic energy)'/
1034 & 'UCONST=',1pE16.6,' (Constraint energy)'/
1035 & 'ETOT= ',1pE16.6,' (total)')
1039 C-----------------------------------------------------------------------
1040 subroutine elj(evdw)
1042 C This subroutine calculates the interaction energy of nonbonded side chains
1043 C assuming the LJ potential of interaction.
1045 implicit real*8 (a-h,o-z)
1046 include 'DIMENSIONS'
1047 parameter (accur=1.0d-10)
1048 include 'COMMON.GEO'
1049 include 'COMMON.VAR'
1050 include 'COMMON.LOCAL'
1051 include 'COMMON.CHAIN'
1052 include 'COMMON.DERIV'
1053 include 'COMMON.INTERACT'
1054 include 'COMMON.TORSION'
1055 include 'COMMON.SBRIDGE'
1056 include 'COMMON.NAMES'
1057 include 'COMMON.IOUNITS'
1058 include 'COMMON.CONTACTS'
1060 c write(iout,*)'Entering ELJ nnt=',nnt,' nct=',nct,' expon=',expon
1062 do i=iatsc_s,iatsc_e
1064 if (itypi.eq.21) cycle
1072 C Calculate SC interaction energy.
1074 do iint=1,nint_gr(i)
1075 cd write (iout,*) 'i=',i,' iint=',iint,' istart=',istart(i,iint),
1076 cd & 'iend=',iend(i,iint)
1077 do j=istart(i,iint),iend(i,iint)
1079 if (itypj.eq.21) cycle
1083 C Change 12/1/95 to calculate four-body interactions
1084 rij=xj*xj+yj*yj+zj*zj
1086 c write (iout,*)'i=',i,' j=',j,' itypi=',itypi,' itypj=',itypj
1087 eps0ij=eps(itypi,itypj)
1089 e1=fac*fac*aa(itypi,itypj)
1090 e2=fac*bb(itypi,itypj)
1092 cd sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
1093 cd epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
1094 cd write (iout,'(2(a3,i3,2x),6(1pd12.4)/2(3(1pd12.4),5x)/)')
1095 cd & restyp(itypi),i,restyp(itypj),j,aa(itypi,itypj),
1096 cd & bb(itypi,itypj),1.0D0/dsqrt(rrij),evdwij,epsi,sigm,
1097 cd & (c(k,i),k=1,3),(c(k,j),k=1,3)
1100 C Calculate the components of the gradient in DC and X
1102 fac=-rrij*(e1+evdwij)
1107 gvdwx(k,i)=gvdwx(k,i)-gg(k)
1108 gvdwx(k,j)=gvdwx(k,j)+gg(k)
1109 gvdwc(k,i)=gvdwc(k,i)-gg(k)
1110 gvdwc(k,j)=gvdwc(k,j)+gg(k)
1114 cgrad gvdwc(l,k)=gvdwc(l,k)+gg(l)
1118 C 12/1/95, revised on 5/20/97
1120 C Calculate the contact function. The ith column of the array JCONT will
1121 C contain the numbers of atoms that make contacts with the atom I (of numbers
1122 C greater than I). The arrays FACONT and GACONT will contain the values of
1123 C the contact function and its derivative.
1125 C Uncomment next line, if the correlation interactions include EVDW explicitly.
1126 c if (j.gt.i+1 .and. evdwij.le.0.0D0) then
1127 C Uncomment next line, if the correlation interactions are contact function only
1128 if (j.gt.i+1.and. eps0ij.gt.0.0D0) then
1130 sigij=sigma(itypi,itypj)
1131 r0ij=rs0(itypi,itypj)
1133 C Check whether the SC's are not too far to make a contact.
1136 call gcont(rij,rcut,1.0d0,0.2d0*rcut,fcont,fprimcont)
1137 C Add a new contact, if the SC's are close enough, but not too close (r<sigma).
1139 if (fcont.gt.0.0D0) then
1140 C If the SC-SC distance if close to sigma, apply spline.
1141 cAdam call gcont(-rij,-1.03d0*sigij,2.0d0*sigij,1.0d0,
1142 cAdam & fcont1,fprimcont1)
1143 cAdam fcont1=1.0d0-fcont1
1144 cAdam if (fcont1.gt.0.0d0) then
1145 cAdam fprimcont=fprimcont*fcont1+fcont*fprimcont1
1146 cAdam fcont=fcont*fcont1
1148 C Uncomment following 4 lines to have the geometric average of the epsilon0's
1149 cga eps0ij=1.0d0/dsqrt(eps0ij)
1151 cga gg(k)=gg(k)*eps0ij
1153 cga eps0ij=-evdwij*eps0ij
1154 C Uncomment for AL's type of SC correlation interactions.
1155 cadam eps0ij=-evdwij
1156 num_conti=num_conti+1
1157 jcont(num_conti,i)=j
1158 facont(num_conti,i)=fcont*eps0ij
1159 fprimcont=eps0ij*fprimcont/rij
1161 cAdam gacont(1,num_conti,i)=-fprimcont*xj+fcont*gg(1)
1162 cAdam gacont(2,num_conti,i)=-fprimcont*yj+fcont*gg(2)
1163 cAdam gacont(3,num_conti,i)=-fprimcont*zj+fcont*gg(3)
1164 C Uncomment following 3 lines for Skolnick's type of SC correlation.
1165 gacont(1,num_conti,i)=-fprimcont*xj
1166 gacont(2,num_conti,i)=-fprimcont*yj
1167 gacont(3,num_conti,i)=-fprimcont*zj
1168 cd write (iout,'(2i5,2f10.5)') i,j,rij,facont(num_conti,i)
1169 cd write (iout,'(2i3,3f10.5)')
1170 cd & i,j,(gacont(kk,num_conti,i),kk=1,3)
1176 num_cont(i)=num_conti
1180 gvdwc(j,i)=expon*gvdwc(j,i)
1181 gvdwx(j,i)=expon*gvdwx(j,i)
1184 C******************************************************************************
1188 C To save time, the factor of EXPON has been extracted from ALL components
1189 C of GVDWC and GRADX. Remember to multiply them by this factor before further
1192 C******************************************************************************
1195 C-----------------------------------------------------------------------------
1196 subroutine eljk(evdw)
1198 C This subroutine calculates the interaction energy of nonbonded side chains
1199 C assuming the LJK potential of interaction.
1201 implicit real*8 (a-h,o-z)
1202 include 'DIMENSIONS'
1203 include 'COMMON.GEO'
1204 include 'COMMON.VAR'
1205 include 'COMMON.LOCAL'
1206 include 'COMMON.CHAIN'
1207 include 'COMMON.DERIV'
1208 include 'COMMON.INTERACT'
1209 include 'COMMON.IOUNITS'
1210 include 'COMMON.NAMES'
1213 c print *,'Entering ELJK nnt=',nnt,' nct=',nct,' expon=',expon
1215 do i=iatsc_s,iatsc_e
1217 if (itypi.eq.21) cycle
1223 C Calculate SC interaction energy.
1225 do iint=1,nint_gr(i)
1226 do j=istart(i,iint),iend(i,iint)
1228 if (itypj.eq.21) cycle
1232 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
1233 fac_augm=rrij**expon
1234 e_augm=augm(itypi,itypj)*fac_augm
1235 r_inv_ij=dsqrt(rrij)
1237 r_shift_inv=1.0D0/(rij+r0(itypi,itypj)-sigma(itypi,itypj))
1238 fac=r_shift_inv**expon
1239 e1=fac*fac*aa(itypi,itypj)
1240 e2=fac*bb(itypi,itypj)
1242 cd sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
1243 cd epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
1244 cd write (iout,'(2(a3,i3,2x),8(1pd12.4)/2(3(1pd12.4),5x)/)')
1245 cd & restyp(itypi),i,restyp(itypj),j,aa(itypi,itypj),
1246 cd & bb(itypi,itypj),augm(itypi,itypj),epsi,sigm,
1247 cd & sigma(itypi,itypj),1.0D0/dsqrt(rrij),evdwij,
1248 cd & (c(k,i),k=1,3),(c(k,j),k=1,3)
1251 C Calculate the components of the gradient in DC and X
1253 fac=-2.0D0*rrij*e_augm-r_inv_ij*r_shift_inv*(e1+e1+e2)
1258 gvdwx(k,i)=gvdwx(k,i)-gg(k)
1259 gvdwx(k,j)=gvdwx(k,j)+gg(k)
1260 gvdwc(k,i)=gvdwc(k,i)-gg(k)
1261 gvdwc(k,j)=gvdwc(k,j)+gg(k)
1265 cgrad gvdwc(l,k)=gvdwc(l,k)+gg(l)
1273 gvdwc(j,i)=expon*gvdwc(j,i)
1274 gvdwx(j,i)=expon*gvdwx(j,i)
1279 C-----------------------------------------------------------------------------
1280 subroutine ebp(evdw)
1282 C This subroutine calculates the interaction energy of nonbonded side chains
1283 C assuming the Berne-Pechukas potential of interaction.
1285 implicit real*8 (a-h,o-z)
1286 include 'DIMENSIONS'
1287 include 'COMMON.GEO'
1288 include 'COMMON.VAR'
1289 include 'COMMON.LOCAL'
1290 include 'COMMON.CHAIN'
1291 include 'COMMON.DERIV'
1292 include 'COMMON.NAMES'
1293 include 'COMMON.INTERACT'
1294 include 'COMMON.IOUNITS'
1295 include 'COMMON.CALC'
1296 common /srutu/ icall
1297 c double precision rrsave(maxdim)
1300 c print *,'Entering EBP nnt=',nnt,' nct=',nct,' expon=',expon
1302 c if (icall.eq.0) then
1308 do i=iatsc_s,iatsc_e
1310 if (itypi.eq.21) cycle
1315 dxi=dc_norm(1,nres+i)
1316 dyi=dc_norm(2,nres+i)
1317 dzi=dc_norm(3,nres+i)
1318 c dsci_inv=dsc_inv(itypi)
1319 dsci_inv=vbld_inv(i+nres)
1321 C Calculate SC interaction energy.
1323 do iint=1,nint_gr(i)
1324 do j=istart(i,iint),iend(i,iint)
1327 if (itypj.eq.21) cycle
1328 c dscj_inv=dsc_inv(itypj)
1329 dscj_inv=vbld_inv(j+nres)
1330 chi1=chi(itypi,itypj)
1331 chi2=chi(itypj,itypi)
1338 alf12=0.5D0*(alf1+alf2)
1339 C For diagnostics only!!!
1352 dxj=dc_norm(1,nres+j)
1353 dyj=dc_norm(2,nres+j)
1354 dzj=dc_norm(3,nres+j)
1355 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
1356 cd if (icall.eq.0) then
1362 C Calculate the angle-dependent terms of energy & contributions to derivatives.
1364 C Calculate whole angle-dependent part of epsilon and contributions
1365 C to its derivatives
1366 fac=(rrij*sigsq)**expon2
1367 e1=fac*fac*aa(itypi,itypj)
1368 e2=fac*bb(itypi,itypj)
1369 evdwij=eps1*eps2rt*eps3rt*(e1+e2)
1370 eps2der=evdwij*eps3rt
1371 eps3der=evdwij*eps2rt
1372 evdwij=evdwij*eps2rt*eps3rt
1375 sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
1376 epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
1377 cd write (iout,'(2(a3,i3,2x),15(0pf7.3))')
1378 cd & restyp(itypi),i,restyp(itypj),j,
1379 cd & epsi,sigm,chi1,chi2,chip1,chip2,
1380 cd & eps1,eps2rt**2,eps3rt**2,1.0D0/dsqrt(sigsq),
1381 cd & om1,om2,om12,1.0D0/dsqrt(rrij),
1384 C Calculate gradient components.
1385 e1=e1*eps1*eps2rt**2*eps3rt**2
1386 fac=-expon*(e1+evdwij)
1389 C Calculate radial part of the gradient
1393 C Calculate the angular part of the gradient and sum add the contributions
1394 C to the appropriate components of the Cartesian gradient.
1402 C-----------------------------------------------------------------------------
1403 subroutine egb(evdw)
1405 C This subroutine calculates the interaction energy of nonbonded side chains
1406 C assuming the Gay-Berne potential of interaction.
1408 implicit real*8 (a-h,o-z)
1409 include 'DIMENSIONS'
1410 include 'COMMON.GEO'
1411 include 'COMMON.VAR'
1412 include 'COMMON.LOCAL'
1413 include 'COMMON.CHAIN'
1414 include 'COMMON.DERIV'
1415 include 'COMMON.NAMES'
1416 include 'COMMON.INTERACT'
1417 include 'COMMON.IOUNITS'
1418 include 'COMMON.CALC'
1419 include 'COMMON.CONTROL'
1420 include 'COMMON.SBRIDGE'
1423 ccccc energy_dec=.false.
1424 c print *,'Entering EGB nnt=',nnt,' nct=',nct,' expon=',expon
1427 c if (icall.eq.0) lprn=.false.
1429 do i=iatsc_s,iatsc_e
1431 if (itypi.eq.21) cycle
1436 dxi=dc_norm(1,nres+i)
1437 dyi=dc_norm(2,nres+i)
1438 dzi=dc_norm(3,nres+i)
1439 c dsci_inv=dsc_inv(itypi)
1440 dsci_inv=vbld_inv(i+nres)
1441 c write (iout,*) "i",i,dsc_inv(itypi),dsci_inv,1.0d0/vbld(i+nres)
1442 c write (iout,*) "dcnori",dxi*dxi+dyi*dyi+dzi*dzi
1444 C Calculate SC interaction energy.
1446 do iint=1,nint_gr(i)
1447 do j=istart(i,iint),iend(i,iint)
1448 IF (dyn_ss_mask(i).and.dyn_ss_mask(j)) THEN
1449 call dyn_ssbond_ene(i,j,evdwij)
1451 if (energy_dec) write (iout,'(a6,2i5,0pf7.3,a3)')
1452 & 'evdw',i,j,evdwij,' ss'
1456 if (itypj.eq.21) cycle
1457 c dscj_inv=dsc_inv(itypj)
1458 dscj_inv=vbld_inv(j+nres)
1459 c write (iout,*) "j",j,dsc_inv(itypj),dscj_inv,
1460 c & 1.0d0/vbld(j+nres)
1461 c write (iout,*) "i",i," j", j," itype",itype(i),itype(j)
1462 sig0ij=sigma(itypi,itypj)
1463 chi1=chi(itypi,itypj)
1464 chi2=chi(itypj,itypi)
1471 alf12=0.5D0*(alf1+alf2)
1472 C For diagnostics only!!!
1485 dxj=dc_norm(1,nres+j)
1486 dyj=dc_norm(2,nres+j)
1487 dzj=dc_norm(3,nres+j)
1488 c write (iout,*) "dcnorj",dxi*dxi+dyi*dyi+dzi*dzi
1489 c write (iout,*) "j",j," dc_norm",
1490 c & dc_norm(1,nres+j),dc_norm(2,nres+j),dc_norm(3,nres+j)
1491 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
1493 C Calculate angle-dependent terms of energy and contributions to their
1497 sig=sig0ij*dsqrt(sigsq)
1498 rij_shift=1.0D0/rij-sig+sig0ij
1499 c for diagnostics; uncomment
1500 c rij_shift=1.2*sig0ij
1501 C I hate to put IF's in the loops, but here don't have another choice!!!!
1502 if (rij_shift.le.0.0D0) then
1504 cd write (iout,'(2(a3,i3,2x),17(0pf7.3))')
1505 cd & restyp(itypi),i,restyp(itypj),j,
1506 cd & rij_shift,1.0D0/rij,sig,sig0ij,sigsq,1-dsqrt(sigsq)
1510 c---------------------------------------------------------------
1511 rij_shift=1.0D0/rij_shift
1512 fac=rij_shift**expon
1513 e1=fac*fac*aa(itypi,itypj)
1514 e2=fac*bb(itypi,itypj)
1515 evdwij=eps1*eps2rt*eps3rt*(e1+e2)
1516 eps2der=evdwij*eps3rt
1517 eps3der=evdwij*eps2rt
1518 c write (iout,*) "sigsq",sigsq," sig",sig," eps2rt",eps2rt,
1519 c & " eps3rt",eps3rt," eps1",eps1," e1",e1," e2",e2
1520 evdwij=evdwij*eps2rt*eps3rt
1523 sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
1524 epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
1525 write (iout,'(2(a3,i3,2x),17(0pf7.3))')
1526 & restyp(itypi),i,restyp(itypj),j,
1527 & epsi,sigm,chi1,chi2,chip1,chip2,
1528 & eps1,eps2rt**2,eps3rt**2,sig,sig0ij,
1529 & om1,om2,om12,1.0D0/rij,1.0D0/rij_shift,
1533 if (energy_dec) write (iout,'(a6,2i5,0pf7.3)')
1536 C Calculate gradient components.
1537 e1=e1*eps1*eps2rt**2*eps3rt**2
1538 fac=-expon*(e1+evdwij)*rij_shift
1542 C Calculate the radial part of the gradient
1546 C Calculate angular part of the gradient.
1552 c write (iout,*) "Number of loop steps in EGB:",ind
1553 cccc energy_dec=.false.
1556 C-----------------------------------------------------------------------------
1557 subroutine egbv(evdw)
1559 C This subroutine calculates the interaction energy of nonbonded side chains
1560 C assuming the Gay-Berne-Vorobjev potential of interaction.
1562 implicit real*8 (a-h,o-z)
1563 include 'DIMENSIONS'
1564 include 'COMMON.GEO'
1565 include 'COMMON.VAR'
1566 include 'COMMON.LOCAL'
1567 include 'COMMON.CHAIN'
1568 include 'COMMON.DERIV'
1569 include 'COMMON.NAMES'
1570 include 'COMMON.INTERACT'
1571 include 'COMMON.IOUNITS'
1572 include 'COMMON.CALC'
1573 common /srutu/ icall
1576 c print *,'Entering EGB nnt=',nnt,' nct=',nct,' expon=',expon
1579 c if (icall.eq.0) lprn=.true.
1581 do i=iatsc_s,iatsc_e
1583 if (itypi.eq.21) cycle
1588 dxi=dc_norm(1,nres+i)
1589 dyi=dc_norm(2,nres+i)
1590 dzi=dc_norm(3,nres+i)
1591 c dsci_inv=dsc_inv(itypi)
1592 dsci_inv=vbld_inv(i+nres)
1594 C Calculate SC interaction energy.
1596 do iint=1,nint_gr(i)
1597 do j=istart(i,iint),iend(i,iint)
1600 if (itypj.eq.21) cycle
1601 c dscj_inv=dsc_inv(itypj)
1602 dscj_inv=vbld_inv(j+nres)
1603 sig0ij=sigma(itypi,itypj)
1604 r0ij=r0(itypi,itypj)
1605 chi1=chi(itypi,itypj)
1606 chi2=chi(itypj,itypi)
1613 alf12=0.5D0*(alf1+alf2)
1614 C For diagnostics only!!!
1627 dxj=dc_norm(1,nres+j)
1628 dyj=dc_norm(2,nres+j)
1629 dzj=dc_norm(3,nres+j)
1630 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
1632 C Calculate angle-dependent terms of energy and contributions to their
1636 sig=sig0ij*dsqrt(sigsq)
1637 rij_shift=1.0D0/rij-sig+r0ij
1638 C I hate to put IF's in the loops, but here don't have another choice!!!!
1639 if (rij_shift.le.0.0D0) then
1644 c---------------------------------------------------------------
1645 rij_shift=1.0D0/rij_shift
1646 fac=rij_shift**expon
1647 e1=fac*fac*aa(itypi,itypj)
1648 e2=fac*bb(itypi,itypj)
1649 evdwij=eps1*eps2rt*eps3rt*(e1+e2)
1650 eps2der=evdwij*eps3rt
1651 eps3der=evdwij*eps2rt
1652 fac_augm=rrij**expon
1653 e_augm=augm(itypi,itypj)*fac_augm
1654 evdwij=evdwij*eps2rt*eps3rt
1655 evdw=evdw+evdwij+e_augm
1657 sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
1658 epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
1659 write (iout,'(2(a3,i3,2x),17(0pf7.3))')
1660 & restyp(itypi),i,restyp(itypj),j,
1661 & epsi,sigm,sig,(augm(itypi,itypj)/epsi)**(1.0D0/12.0D0),
1662 & chi1,chi2,chip1,chip2,
1663 & eps1,eps2rt**2,eps3rt**2,
1664 & om1,om2,om12,1.0D0/rij,1.0D0/rij_shift,
1667 C Calculate gradient components.
1668 e1=e1*eps1*eps2rt**2*eps3rt**2
1669 fac=-expon*(e1+evdwij)*rij_shift
1671 fac=rij*fac-2*expon*rrij*e_augm
1672 C Calculate the radial part of the gradient
1676 C Calculate angular part of the gradient.
1682 C-----------------------------------------------------------------------------
1683 subroutine sc_angular
1684 C Calculate eps1,eps2,eps3,sigma, and parts of their derivatives in om1,om2,
1685 C om12. Called by ebp, egb, and egbv.
1687 include 'COMMON.CALC'
1688 include 'COMMON.IOUNITS'
1692 om1=dxi*erij(1)+dyi*erij(2)+dzi*erij(3)
1693 om2=dxj*erij(1)+dyj*erij(2)+dzj*erij(3)
1694 om12=dxi*dxj+dyi*dyj+dzi*dzj
1696 C Calculate eps1(om12) and its derivative in om12
1697 faceps1=1.0D0-om12*chiom12
1698 faceps1_inv=1.0D0/faceps1
1699 eps1=dsqrt(faceps1_inv)
1700 C Following variable is eps1*deps1/dom12
1701 eps1_om12=faceps1_inv*chiom12
1706 c write (iout,*) "om12",om12," eps1",eps1
1707 C Calculate sigma(om1,om2,om12) and the derivatives of sigma**2 in om1,om2,
1712 facsig=om1*chiom1+om2*chiom2-2.0D0*om1om2*chiom12
1713 sigsq=1.0D0-facsig*faceps1_inv
1714 sigsq_om1=(chiom1-chiom12*om2)*faceps1_inv
1715 sigsq_om2=(chiom2-chiom12*om1)*faceps1_inv
1716 sigsq_om12=-chi12*(om1om2*faceps1-om12*facsig)*faceps1_inv**2
1722 c write (iout,*) "chiom1",chiom1," chiom2",chiom2," chiom12",chiom12
1723 c write (iout,*) "faceps1",faceps1," faceps1_inv",faceps1_inv,
1725 C Calculate eps2 and its derivatives in om1, om2, and om12.
1728 chipom12=chip12*om12
1729 facp=1.0D0-om12*chipom12
1731 facp1=om1*chipom1+om2*chipom2-2.0D0*om1om2*chipom12
1732 c write (iout,*) "chipom1",chipom1," chipom2",chipom2,
1733 c & " chipom12",chipom12," facp",facp," facp_inv",facp_inv
1734 C Following variable is the square root of eps2
1735 eps2rt=1.0D0-facp1*facp_inv
1736 C Following three variables are the derivatives of the square root of eps
1737 C in om1, om2, and om12.
1738 eps2rt_om1=-4.0D0*(chipom1-chipom12*om2)*facp_inv
1739 eps2rt_om2=-4.0D0*(chipom2-chipom12*om1)*facp_inv
1740 eps2rt_om12=4.0D0*chip12*(om1om2*facp-om12*facp1)*facp_inv**2
1741 C Evaluate the "asymmetric" factor in the VDW constant, eps3
1742 eps3rt=1.0D0-alf1*om1+alf2*om2-alf12*om12
1743 c write (iout,*) "eps2rt",eps2rt," eps3rt",eps3rt
1744 c write (iout,*) "eps2rt_om1",eps2rt_om1," eps2rt_om2",eps2rt_om2,
1745 c & " eps2rt_om12",eps2rt_om12
1746 C Calculate whole angle-dependent part of epsilon and contributions
1747 C to its derivatives
1750 C----------------------------------------------------------------------------
1752 implicit real*8 (a-h,o-z)
1753 include 'DIMENSIONS'
1754 include 'COMMON.CHAIN'
1755 include 'COMMON.DERIV'
1756 include 'COMMON.CALC'
1757 include 'COMMON.IOUNITS'
1758 double precision dcosom1(3),dcosom2(3)
1759 eom1=eps2der*eps2rt_om1-2.0D0*alf1*eps3der+sigder*sigsq_om1
1760 eom2=eps2der*eps2rt_om2+2.0D0*alf2*eps3der+sigder*sigsq_om2
1761 eom12=evdwij*eps1_om12+eps2der*eps2rt_om12
1762 & -2.0D0*alf12*eps3der+sigder*sigsq_om12
1766 c eom12=evdwij*eps1_om12
1768 c write (iout,*) "eps2der",eps2der," eps3der",eps3der,
1769 c & " sigder",sigder
1770 c write (iout,*) "eps1_om12",eps1_om12," eps2rt_om12",eps2rt_om12
1771 c write (iout,*) "eom1",eom1," eom2",eom2," eom12",eom12
1773 dcosom1(k)=rij*(dc_norm(k,nres+i)-om1*erij(k))
1774 dcosom2(k)=rij*(dc_norm(k,nres+j)-om2*erij(k))
1777 gg(k)=gg(k)+eom1*dcosom1(k)+eom2*dcosom2(k)
1779 c write (iout,*) "gg",(gg(k),k=1,3)
1781 gvdwx(k,i)=gvdwx(k,i)-gg(k)
1782 & +(eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,nres+i))
1783 & +eom1*(erij(k)-om1*dc_norm(k,nres+i)))*dsci_inv
1784 gvdwx(k,j)=gvdwx(k,j)+gg(k)
1785 & +(eom12*(dc_norm(k,nres+i)-om12*dc_norm(k,nres+j))
1786 & +eom2*(erij(k)-om2*dc_norm(k,nres+j)))*dscj_inv
1787 c write (iout,*)(eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,nres+i))
1788 c & +eom1*(erij(k)-om1*dc_norm(k,nres+i)))*dsci_inv
1789 c write (iout,*)(eom12*(dc_norm(k,nres+i)-om12*dc_norm(k,nres+j))
1790 c & +eom2*(erij(k)-om2*dc_norm(k,nres+j)))*dscj_inv
1793 C Calculate the components of the gradient in DC and X
1797 cgrad gvdwc(l,k)=gvdwc(l,k)+gg(l)
1801 gvdwc(l,i)=gvdwc(l,i)-gg(l)
1802 gvdwc(l,j)=gvdwc(l,j)+gg(l)
1806 C-----------------------------------------------------------------------
1807 subroutine e_softsphere(evdw)
1809 C This subroutine calculates the interaction energy of nonbonded side chains
1810 C assuming the LJ potential of interaction.
1812 implicit real*8 (a-h,o-z)
1813 include 'DIMENSIONS'
1814 parameter (accur=1.0d-10)
1815 include 'COMMON.GEO'
1816 include 'COMMON.VAR'
1817 include 'COMMON.LOCAL'
1818 include 'COMMON.CHAIN'
1819 include 'COMMON.DERIV'
1820 include 'COMMON.INTERACT'
1821 include 'COMMON.TORSION'
1822 include 'COMMON.SBRIDGE'
1823 include 'COMMON.NAMES'
1824 include 'COMMON.IOUNITS'
1825 include 'COMMON.CONTACTS'
1827 cd print *,'Entering Esoft_sphere nnt=',nnt,' nct=',nct
1829 do i=iatsc_s,iatsc_e
1831 if (itypi.eq.21) cycle
1837 C Calculate SC interaction energy.
1839 do iint=1,nint_gr(i)
1840 cd write (iout,*) 'i=',i,' iint=',iint,' istart=',istart(i,iint),
1841 cd & 'iend=',iend(i,iint)
1842 do j=istart(i,iint),iend(i,iint)
1844 if (itypj.eq.21) cycle
1848 rij=xj*xj+yj*yj+zj*zj
1849 c write (iout,*)'i=',i,' j=',j,' itypi=',itypi,' itypj=',itypj
1850 r0ij=r0(itypi,itypj)
1852 c print *,i,j,r0ij,dsqrt(rij)
1853 if (rij.lt.r0ijsq) then
1854 evdwij=0.25d0*(rij-r0ijsq)**2
1862 C Calculate the components of the gradient in DC and X
1868 gvdwx(k,i)=gvdwx(k,i)-gg(k)
1869 gvdwx(k,j)=gvdwx(k,j)+gg(k)
1870 gvdwc(k,i)=gvdwc(k,i)-gg(k)
1871 gvdwc(k,j)=gvdwc(k,j)+gg(k)
1875 cgrad gvdwc(l,k)=gvdwc(l,k)+gg(l)
1883 C--------------------------------------------------------------------------
1884 subroutine eelec_soft_sphere(ees,evdw1,eel_loc,eello_turn3,
1887 C Soft-sphere potential of p-p interaction
1889 implicit real*8 (a-h,o-z)
1890 include 'DIMENSIONS'
1891 include 'COMMON.CONTROL'
1892 include 'COMMON.IOUNITS'
1893 include 'COMMON.GEO'
1894 include 'COMMON.VAR'
1895 include 'COMMON.LOCAL'
1896 include 'COMMON.CHAIN'
1897 include 'COMMON.DERIV'
1898 include 'COMMON.INTERACT'
1899 include 'COMMON.CONTACTS'
1900 include 'COMMON.TORSION'
1901 include 'COMMON.VECTORS'
1902 include 'COMMON.FFIELD'
1904 cd write(iout,*) 'In EELEC_soft_sphere'
1911 do i=iatel_s,iatel_e
1912 if (itype(i).eq.21 .or. itype(i+1).eq.21) cycle
1916 xmedi=c(1,i)+0.5d0*dxi
1917 ymedi=c(2,i)+0.5d0*dyi
1918 zmedi=c(3,i)+0.5d0*dzi
1920 c write (iout,*) 'i',i,' ielstart',ielstart(i),' ielend',ielend(i)
1921 do j=ielstart(i),ielend(i)
1922 if (itype(j).eq.21 .or. itype(j+1).eq.21) cycle
1926 if (j.eq.i+2 .and. itelj.eq.2) iteli=2
1927 r0ij=rpp(iteli,itelj)
1932 xj=c(1,j)+0.5D0*dxj-xmedi
1933 yj=c(2,j)+0.5D0*dyj-ymedi
1934 zj=c(3,j)+0.5D0*dzj-zmedi
1935 rij=xj*xj+yj*yj+zj*zj
1936 if (rij.lt.r0ijsq) then
1937 evdw1ij=0.25d0*(rij-r0ijsq)**2
1945 C Calculate contributions to the Cartesian gradient.
1951 gvdwpp(k,i)=gvdwpp(k,i)-ggg(k)
1952 gvdwpp(k,j)=gvdwpp(k,j)+ggg(k)
1955 * Loop over residues i+1 thru j-1.
1959 cgrad gelc(l,k)=gelc(l,k)+ggg(l)
1964 cgrad do i=nnt,nct-1
1966 cgrad gelc(k,i)=gelc(k,i)+0.5d0*gelc(k,i)
1968 cgrad do j=i+1,nct-1
1970 cgrad gelc(k,i)=gelc(k,i)+gelc(k,j)
1976 c------------------------------------------------------------------------------
1977 subroutine vec_and_deriv
1978 implicit real*8 (a-h,o-z)
1979 include 'DIMENSIONS'
1983 include 'COMMON.IOUNITS'
1984 include 'COMMON.GEO'
1985 include 'COMMON.VAR'
1986 include 'COMMON.LOCAL'
1987 include 'COMMON.CHAIN'
1988 include 'COMMON.VECTORS'
1989 include 'COMMON.SETUP'
1990 include 'COMMON.TIME1'
1991 dimension uyder(3,3,2),uzder(3,3,2),vbld_inv_temp(2)
1992 C Compute the local reference systems. For reference system (i), the
1993 C X-axis points from CA(i) to CA(i+1), the Y axis is in the
1994 C CA(i)-CA(i+1)-CA(i+2) plane, and the Z axis is perpendicular to this plane.
1996 do i=ivec_start,ivec_end
2000 if (i.eq.nres-1) then
2001 C Case of the last full residue
2002 C Compute the Z-axis
2003 call vecpr(dc_norm(1,i),dc_norm(1,i-1),uz(1,i))
2004 costh=dcos(pi-theta(nres))
2005 fac=1.0d0/dsqrt(1.0d0-costh*costh)
2009 C Compute the derivatives of uz
2011 uzder(2,1,1)=-dc_norm(3,i-1)
2012 uzder(3,1,1)= dc_norm(2,i-1)
2013 uzder(1,2,1)= dc_norm(3,i-1)
2015 uzder(3,2,1)=-dc_norm(1,i-1)
2016 uzder(1,3,1)=-dc_norm(2,i-1)
2017 uzder(2,3,1)= dc_norm(1,i-1)
2020 uzder(2,1,2)= dc_norm(3,i)
2021 uzder(3,1,2)=-dc_norm(2,i)
2022 uzder(1,2,2)=-dc_norm(3,i)
2024 uzder(3,2,2)= dc_norm(1,i)
2025 uzder(1,3,2)= dc_norm(2,i)
2026 uzder(2,3,2)=-dc_norm(1,i)
2028 C Compute the Y-axis
2031 uy(k,i)=fac*(dc_norm(k,i-1)-costh*dc_norm(k,i))
2033 C Compute the derivatives of uy
2036 uyder(k,j,1)=2*dc_norm(k,i-1)*dc_norm(j,i)
2037 & -dc_norm(k,i)*dc_norm(j,i-1)
2038 uyder(k,j,2)=-dc_norm(j,i)*dc_norm(k,i)
2040 uyder(j,j,1)=uyder(j,j,1)-costh
2041 uyder(j,j,2)=1.0d0+uyder(j,j,2)
2046 uygrad(l,k,j,i)=uyder(l,k,j)
2047 uzgrad(l,k,j,i)=uzder(l,k,j)
2051 call unormderiv(uy(1,i),uyder(1,1,1),facy,uygrad(1,1,1,i))
2052 call unormderiv(uy(1,i),uyder(1,1,2),facy,uygrad(1,1,2,i))
2053 call unormderiv(uz(1,i),uzder(1,1,1),fac,uzgrad(1,1,1,i))
2054 call unormderiv(uz(1,i),uzder(1,1,2),fac,uzgrad(1,1,2,i))
2057 C Compute the Z-axis
2058 call vecpr(dc_norm(1,i),dc_norm(1,i+1),uz(1,i))
2059 costh=dcos(pi-theta(i+2))
2060 fac=1.0d0/dsqrt(1.0d0-costh*costh)
2064 C Compute the derivatives of uz
2066 uzder(2,1,1)=-dc_norm(3,i+1)
2067 uzder(3,1,1)= dc_norm(2,i+1)
2068 uzder(1,2,1)= dc_norm(3,i+1)
2070 uzder(3,2,1)=-dc_norm(1,i+1)
2071 uzder(1,3,1)=-dc_norm(2,i+1)
2072 uzder(2,3,1)= dc_norm(1,i+1)
2075 uzder(2,1,2)= dc_norm(3,i)
2076 uzder(3,1,2)=-dc_norm(2,i)
2077 uzder(1,2,2)=-dc_norm(3,i)
2079 uzder(3,2,2)= dc_norm(1,i)
2080 uzder(1,3,2)= dc_norm(2,i)
2081 uzder(2,3,2)=-dc_norm(1,i)
2083 C Compute the Y-axis
2086 uy(k,i)=facy*(dc_norm(k,i+1)-costh*dc_norm(k,i))
2088 C Compute the derivatives of uy
2091 uyder(k,j,1)=2*dc_norm(k,i+1)*dc_norm(j,i)
2092 & -dc_norm(k,i)*dc_norm(j,i+1)
2093 uyder(k,j,2)=-dc_norm(j,i)*dc_norm(k,i)
2095 uyder(j,j,1)=uyder(j,j,1)-costh
2096 uyder(j,j,2)=1.0d0+uyder(j,j,2)
2101 uygrad(l,k,j,i)=uyder(l,k,j)
2102 uzgrad(l,k,j,i)=uzder(l,k,j)
2106 call unormderiv(uy(1,i),uyder(1,1,1),facy,uygrad(1,1,1,i))
2107 call unormderiv(uy(1,i),uyder(1,1,2),facy,uygrad(1,1,2,i))
2108 call unormderiv(uz(1,i),uzder(1,1,1),fac,uzgrad(1,1,1,i))
2109 call unormderiv(uz(1,i),uzder(1,1,2),fac,uzgrad(1,1,2,i))
2113 vbld_inv_temp(1)=vbld_inv(i+1)
2114 if (i.lt.nres-1) then
2115 vbld_inv_temp(2)=vbld_inv(i+2)
2117 vbld_inv_temp(2)=vbld_inv(i)
2122 uygrad(l,k,j,i)=vbld_inv_temp(j)*uygrad(l,k,j,i)
2123 uzgrad(l,k,j,i)=vbld_inv_temp(j)*uzgrad(l,k,j,i)
2128 #if defined(PARVEC) && defined(MPI)
2129 if (nfgtasks1.gt.1) then
2131 c print *,"Processor",fg_rank1,kolor1," ivec_start",ivec_start,
2132 c & " ivec_displ",(ivec_displ(i),i=0,nfgtasks1-1),
2133 c & " ivec_count",(ivec_count(i),i=0,nfgtasks1-1)
2134 call MPI_Allgatherv(uy(1,ivec_start),ivec_count(fg_rank1),
2135 & MPI_UYZ,uy(1,1),ivec_count(0),ivec_displ(0),MPI_UYZ,
2137 call MPI_Allgatherv(uz(1,ivec_start),ivec_count(fg_rank1),
2138 & MPI_UYZ,uz(1,1),ivec_count(0),ivec_displ(0),MPI_UYZ,
2140 call MPI_Allgatherv(uygrad(1,1,1,ivec_start),
2141 & ivec_count(fg_rank1),MPI_UYZGRAD,uygrad(1,1,1,1),ivec_count(0),
2142 & ivec_displ(0),MPI_UYZGRAD,FG_COMM1,IERR)
2143 call MPI_Allgatherv(uzgrad(1,1,1,ivec_start),
2144 & ivec_count(fg_rank1),MPI_UYZGRAD,uzgrad(1,1,1,1),ivec_count(0),
2145 & ivec_displ(0),MPI_UYZGRAD,FG_COMM1,IERR)
2146 time_gather=time_gather+MPI_Wtime()-time00
2148 c if (fg_rank.eq.0) then
2149 c write (iout,*) "Arrays UY and UZ"
2151 c write (iout,'(i5,3f10.5,5x,3f10.5)') i,(uy(k,i),k=1,3),
2158 C-----------------------------------------------------------------------------
2159 subroutine check_vecgrad
2160 implicit real*8 (a-h,o-z)
2161 include 'DIMENSIONS'
2162 include 'COMMON.IOUNITS'
2163 include 'COMMON.GEO'
2164 include 'COMMON.VAR'
2165 include 'COMMON.LOCAL'
2166 include 'COMMON.CHAIN'
2167 include 'COMMON.VECTORS'
2168 dimension uygradt(3,3,2,maxres),uzgradt(3,3,2,maxres)
2169 dimension uyt(3,maxres),uzt(3,maxres)
2170 dimension uygradn(3,3,2),uzgradn(3,3,2),erij(3)
2171 double precision delta /1.0d-7/
2174 crc write(iout,'(2i5,2(3f10.5,5x))') i,1,dc_norm(:,i)
2175 crc write(iout,'(2i5,2(3f10.5,5x))') i,2,uy(:,i)
2176 crc write(iout,'(2i5,2(3f10.5,5x)/)')i,3,uz(:,i)
2177 cd write(iout,'(2i5,2(3f10.5,5x))') i,1,
2178 cd & (dc_norm(if90,i),if90=1,3)
2179 cd write(iout,'(2i5,2(3f10.5,5x))') i,2,(uy(if90,i),if90=1,3)
2180 cd write(iout,'(2i5,2(3f10.5,5x)/)')i,3,(uz(if90,i),if90=1,3)
2181 cd write(iout,'(a)')
2187 uygradt(l,k,j,i)=uygrad(l,k,j,i)
2188 uzgradt(l,k,j,i)=uzgrad(l,k,j,i)
2201 cd write (iout,*) 'i=',i
2203 erij(k)=dc_norm(k,i)
2207 dc_norm(k,i)=erij(k)
2209 dc_norm(j,i)=dc_norm(j,i)+delta
2210 c fac=dsqrt(scalar(dc_norm(1,i),dc_norm(1,i)))
2212 c dc_norm(k,i)=dc_norm(k,i)/fac
2214 c write (iout,*) (dc_norm(k,i),k=1,3)
2215 c write (iout,*) (erij(k),k=1,3)
2218 uygradn(k,j,1)=(uy(k,i)-uyt(k,i))/delta
2219 uygradn(k,j,2)=(uy(k,i-1)-uyt(k,i-1))/delta
2220 uzgradn(k,j,1)=(uz(k,i)-uzt(k,i))/delta
2221 uzgradn(k,j,2)=(uz(k,i-1)-uzt(k,i-1))/delta
2223 c write (iout,'(i5,3f8.5,3x,3f8.5,5x,3f8.5,3x,3f8.5)')
2224 c & j,(uzgradt(k,j,1,i),k=1,3),(uzgradn(k,j,1),k=1,3),
2225 c & (uzgradt(k,j,2,i-1),k=1,3),(uzgradn(k,j,2),k=1,3)
2228 dc_norm(k,i)=erij(k)
2231 cd write (iout,'(i5,3f8.5,3x,3f8.5,5x,3f8.5,3x,3f8.5)')
2232 cd & k,(uygradt(k,l,1,i),l=1,3),(uygradn(k,l,1),l=1,3),
2233 cd & (uygradt(k,l,2,i-1),l=1,3),(uygradn(k,l,2),l=1,3)
2234 cd write (iout,'(i5,3f8.5,3x,3f8.5,5x,3f8.5,3x,3f8.5)')
2235 cd & k,(uzgradt(k,l,1,i),l=1,3),(uzgradn(k,l,1),l=1,3),
2236 cd & (uzgradt(k,l,2,i-1),l=1,3),(uzgradn(k,l,2),l=1,3)
2237 cd write (iout,'(a)')
2242 C--------------------------------------------------------------------------
2243 subroutine set_matrices
2244 implicit real*8 (a-h,o-z)
2245 include 'DIMENSIONS'
2248 include "COMMON.SETUP"
2250 integer status(MPI_STATUS_SIZE)
2252 include 'COMMON.IOUNITS'
2253 include 'COMMON.GEO'
2254 include 'COMMON.VAR'
2255 include 'COMMON.LOCAL'
2256 include 'COMMON.CHAIN'
2257 include 'COMMON.DERIV'
2258 include 'COMMON.INTERACT'
2259 include 'COMMON.CONTACTS'
2260 include 'COMMON.TORSION'
2261 include 'COMMON.VECTORS'
2262 include 'COMMON.FFIELD'
2263 double precision auxvec(2),auxmat(2,2)
2265 C Compute the virtual-bond-torsional-angle dependent quantities needed
2266 C to calculate the el-loc multibody terms of various order.
2269 do i=ivec_start+2,ivec_end+2
2273 if (i .lt. nres+1) then
2310 if (i .gt. 3 .and. i .lt. nres+1) then
2311 obrot_der(1,i-2)=-sin1
2312 obrot_der(2,i-2)= cos1
2313 Ugder(1,1,i-2)= sin1
2314 Ugder(1,2,i-2)=-cos1
2315 Ugder(2,1,i-2)=-cos1
2316 Ugder(2,2,i-2)=-sin1
2319 obrot2_der(1,i-2)=-dwasin2
2320 obrot2_der(2,i-2)= dwacos2
2321 Ug2der(1,1,i-2)= dwasin2
2322 Ug2der(1,2,i-2)=-dwacos2
2323 Ug2der(2,1,i-2)=-dwacos2
2324 Ug2der(2,2,i-2)=-dwasin2
2326 obrot_der(1,i-2)=0.0d0
2327 obrot_der(2,i-2)=0.0d0
2328 Ugder(1,1,i-2)=0.0d0
2329 Ugder(1,2,i-2)=0.0d0
2330 Ugder(2,1,i-2)=0.0d0
2331 Ugder(2,2,i-2)=0.0d0
2332 obrot2_der(1,i-2)=0.0d0
2333 obrot2_der(2,i-2)=0.0d0
2334 Ug2der(1,1,i-2)=0.0d0
2335 Ug2der(1,2,i-2)=0.0d0
2336 Ug2der(2,1,i-2)=0.0d0
2337 Ug2der(2,2,i-2)=0.0d0
2339 c if (i.gt. iatel_s+2 .and. i.lt.iatel_e+5) then
2340 if (i.gt. nnt+2 .and. i.lt.nct+2) then
2341 iti = itortyp(itype(i-2))
2345 c if (i.gt. iatel_s+1 .and. i.lt.iatel_e+4) then
2346 if (i.gt. nnt+1 .and. i.lt.nct+1) then
2347 iti1 = itortyp(itype(i-1))
2351 cd write (iout,*) '*******i',i,' iti1',iti
2352 cd write (iout,*) 'b1',b1(:,iti)
2353 cd write (iout,*) 'b2',b2(:,iti)
2354 cd write (iout,*) 'Ug',Ug(:,:,i-2)
2355 c if (i .gt. iatel_s+2) then
2356 if (i .gt. nnt+2) then
2357 call matvec2(Ug(1,1,i-2),b2(1,iti),Ub2(1,i-2))
2358 call matmat2(EE(1,1,iti),Ug(1,1,i-2),EUg(1,1,i-2))
2359 if (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0)
2361 call matmat2(CC(1,1,iti),Ug(1,1,i-2),CUg(1,1,i-2))
2362 call matmat2(DD(1,1,iti),Ug(1,1,i-2),DUg(1,1,i-2))
2363 call matmat2(Dtilde(1,1,iti),Ug2(1,1,i-2),DtUg2(1,1,i-2))
2364 call matvec2(Ctilde(1,1,iti1),obrot(1,i-2),Ctobr(1,i-2))
2365 call matvec2(Dtilde(1,1,iti),obrot2(1,i-2),Dtobr2(1,i-2))
2376 DtUg2(l,k,i-2)=0.0d0
2380 call matvec2(Ugder(1,1,i-2),b2(1,iti),Ub2der(1,i-2))
2381 call matmat2(EE(1,1,iti),Ugder(1,1,i-2),EUgder(1,1,i-2))
2383 muder(k,i-2)=Ub2der(k,i-2)
2385 c if (i.gt. iatel_s+1 .and. i.lt.iatel_e+4) then
2386 if (i.gt. nnt+1 .and. i.lt.nct+1) then
2387 iti1 = itortyp(itype(i-1))
2392 mu(k,i-2)=Ub2(k,i-2)+b1(k,iti1)
2394 cd write (iout,*) 'mu ',mu(:,i-2)
2395 cd write (iout,*) 'mu1',mu1(:,i-2)
2396 cd write (iout,*) 'mu2',mu2(:,i-2)
2397 if (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or.wcorr6.gt.0.0d0)
2399 call matmat2(CC(1,1,iti1),Ugder(1,1,i-2),CUgder(1,1,i-2))
2400 call matmat2(DD(1,1,iti),Ugder(1,1,i-2),DUgder(1,1,i-2))
2401 call matmat2(Dtilde(1,1,iti),Ug2der(1,1,i-2),DtUg2der(1,1,i-2))
2402 call matvec2(Ctilde(1,1,iti1),obrot_der(1,i-2),Ctobrder(1,i-2))
2403 call matvec2(Dtilde(1,1,iti),obrot2_der(1,i-2),Dtobr2der(1,i-2))
2404 C Vectors and matrices dependent on a single virtual-bond dihedral.
2405 call matvec2(DD(1,1,iti),b1tilde(1,iti1),auxvec(1))
2406 call matvec2(Ug2(1,1,i-2),auxvec(1),Ug2Db1t(1,i-2))
2407 call matvec2(Ug2der(1,1,i-2),auxvec(1),Ug2Db1tder(1,i-2))
2408 call matvec2(CC(1,1,iti1),Ub2(1,i-2),CUgb2(1,i-2))
2409 call matvec2(CC(1,1,iti1),Ub2der(1,i-2),CUgb2der(1,i-2))
2410 call matmat2(EUg(1,1,i-2),CC(1,1,iti1),EUgC(1,1,i-2))
2411 call matmat2(EUgder(1,1,i-2),CC(1,1,iti1),EUgCder(1,1,i-2))
2412 call matmat2(EUg(1,1,i-2),DD(1,1,iti1),EUgD(1,1,i-2))
2413 call matmat2(EUgder(1,1,i-2),DD(1,1,iti1),EUgDder(1,1,i-2))
2416 C Matrices dependent on two consecutive virtual-bond dihedrals.
2417 C The order of matrices is from left to right.
2418 if (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or.wcorr6.gt.0.0d0)
2420 c do i=max0(ivec_start,2),ivec_end
2422 call matmat2(DtUg2(1,1,i-1),EUg(1,1,i),DtUg2EUg(1,1,i))
2423 call matmat2(DtUg2der(1,1,i-1),EUg(1,1,i),DtUg2EUgder(1,1,1,i))
2424 call matmat2(DtUg2(1,1,i-1),EUgder(1,1,i),DtUg2EUgder(1,1,2,i))
2425 call transpose2(DtUg2(1,1,i-1),auxmat(1,1))
2426 call matmat2(auxmat(1,1),EUg(1,1,i),Ug2DtEUg(1,1,i))
2427 call matmat2(auxmat(1,1),EUgder(1,1,i),Ug2DtEUgder(1,1,2,i))
2428 call transpose2(DtUg2der(1,1,i-1),auxmat(1,1))
2429 call matmat2(auxmat(1,1),EUg(1,1,i),Ug2DtEUgder(1,1,1,i))
2432 #if defined(MPI) && defined(PARMAT)
2434 c if (fg_rank.eq.0) then
2435 write (iout,*) "Arrays UG and UGDER before GATHER"
2437 write (iout,'(i5,4f10.5,5x,4f10.5)') i,
2438 & ((ug(l,k,i),l=1,2),k=1,2),
2439 & ((ugder(l,k,i),l=1,2),k=1,2)
2441 write (iout,*) "Arrays UG2 and UG2DER"
2443 write (iout,'(i5,4f10.5,5x,4f10.5)') i,
2444 & ((ug2(l,k,i),l=1,2),k=1,2),
2445 & ((ug2der(l,k,i),l=1,2),k=1,2)
2447 write (iout,*) "Arrays OBROT OBROT2 OBROTDER and OBROT2DER"
2449 write (iout,'(i5,4f10.5,5x,4f10.5)') i,
2450 & (obrot(k,i),k=1,2),(obrot2(k,i),k=1,2),
2451 & (obrot_der(k,i),k=1,2),(obrot2_der(k,i),k=1,2)
2453 write (iout,*) "Arrays COSTAB SINTAB COSTAB2 and SINTAB2"
2455 write (iout,'(i5,4f10.5,5x,4f10.5)') i,
2456 & costab(i),sintab(i),costab2(i),sintab2(i)
2458 write (iout,*) "Array MUDER"
2460 write (iout,'(i5,2f10.5)') i,muder(1,i),muder(2,i)
2464 if (nfgtasks.gt.1) then
2466 c write(iout,*)"Processor",fg_rank,kolor," ivec_start",ivec_start,
2467 c & " ivec_displ",(ivec_displ(i),i=0,nfgtasks-1),
2468 c & " ivec_count",(ivec_count(i),i=0,nfgtasks-1)
2470 call MPI_Allgatherv(Ub2(1,ivec_start),ivec_count(fg_rank1),
2471 & MPI_MU,Ub2(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2473 call MPI_Allgatherv(Ub2der(1,ivec_start),ivec_count(fg_rank1),
2474 & MPI_MU,Ub2der(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2476 call MPI_Allgatherv(mu(1,ivec_start),ivec_count(fg_rank1),
2477 & MPI_MU,mu(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2479 call MPI_Allgatherv(muder(1,ivec_start),ivec_count(fg_rank1),
2480 & MPI_MU,muder(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2482 call MPI_Allgatherv(Eug(1,1,ivec_start),ivec_count(fg_rank1),
2483 & MPI_MAT1,Eug(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2485 call MPI_Allgatherv(Eugder(1,1,ivec_start),ivec_count(fg_rank1),
2486 & MPI_MAT1,Eugder(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2488 call MPI_Allgatherv(costab(ivec_start),ivec_count(fg_rank1),
2489 & MPI_DOUBLE_PRECISION,costab(1),ivec_count(0),ivec_displ(0),
2490 & MPI_DOUBLE_PRECISION,FG_COMM1,IERR)
2491 call MPI_Allgatherv(sintab(ivec_start),ivec_count(fg_rank1),
2492 & MPI_DOUBLE_PRECISION,sintab(1),ivec_count(0),ivec_displ(0),
2493 & MPI_DOUBLE_PRECISION,FG_COMM1,IERR)
2494 call MPI_Allgatherv(costab2(ivec_start),ivec_count(fg_rank1),
2495 & MPI_DOUBLE_PRECISION,costab2(1),ivec_count(0),ivec_displ(0),
2496 & MPI_DOUBLE_PRECISION,FG_COMM1,IERR)
2497 call MPI_Allgatherv(sintab2(ivec_start),ivec_count(fg_rank1),
2498 & MPI_DOUBLE_PRECISION,sintab2(1),ivec_count(0),ivec_displ(0),
2499 & MPI_DOUBLE_PRECISION,FG_COMM1,IERR)
2500 if (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0)
2502 call MPI_Allgatherv(Ctobr(1,ivec_start),ivec_count(fg_rank1),
2503 & MPI_MU,Ctobr(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2505 call MPI_Allgatherv(Ctobrder(1,ivec_start),ivec_count(fg_rank1),
2506 & MPI_MU,Ctobrder(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2508 call MPI_Allgatherv(Dtobr2(1,ivec_start),ivec_count(fg_rank1),
2509 & MPI_MU,Dtobr2(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2511 call MPI_Allgatherv(Dtobr2der(1,ivec_start),ivec_count(fg_rank1),
2512 & MPI_MU,Dtobr2der(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2514 call MPI_Allgatherv(Ug2Db1t(1,ivec_start),ivec_count(fg_rank1),
2515 & MPI_MU,Ug2Db1t(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2517 call MPI_Allgatherv(Ug2Db1tder(1,ivec_start),
2518 & ivec_count(fg_rank1),
2519 & MPI_MU,Ug2Db1tder(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2521 call MPI_Allgatherv(CUgb2(1,ivec_start),ivec_count(fg_rank1),
2522 & MPI_MU,CUgb2(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2524 call MPI_Allgatherv(CUgb2der(1,ivec_start),ivec_count(fg_rank1),
2525 & MPI_MU,CUgb2der(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2527 call MPI_Allgatherv(Cug(1,1,ivec_start),ivec_count(fg_rank1),
2528 & MPI_MAT1,Cug(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2530 call MPI_Allgatherv(Cugder(1,1,ivec_start),ivec_count(fg_rank1),
2531 & MPI_MAT1,Cugder(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2533 call MPI_Allgatherv(Dug(1,1,ivec_start),ivec_count(fg_rank1),
2534 & MPI_MAT1,Dug(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2536 call MPI_Allgatherv(Dugder(1,1,ivec_start),ivec_count(fg_rank1),
2537 & MPI_MAT1,Dugder(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2539 call MPI_Allgatherv(Dtug2(1,1,ivec_start),ivec_count(fg_rank1),
2540 & MPI_MAT1,Dtug2(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2542 call MPI_Allgatherv(Dtug2der(1,1,ivec_start),
2543 & ivec_count(fg_rank1),
2544 & MPI_MAT1,Dtug2der(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2546 call MPI_Allgatherv(EugC(1,1,ivec_start),ivec_count(fg_rank1),
2547 & MPI_MAT1,EugC(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2549 call MPI_Allgatherv(EugCder(1,1,ivec_start),ivec_count(fg_rank1),
2550 & MPI_MAT1,EugCder(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2552 call MPI_Allgatherv(EugD(1,1,ivec_start),ivec_count(fg_rank1),
2553 & MPI_MAT1,EugD(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2555 call MPI_Allgatherv(EugDder(1,1,ivec_start),ivec_count(fg_rank1),
2556 & MPI_MAT1,EugDder(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2558 call MPI_Allgatherv(DtUg2EUg(1,1,ivec_start),
2559 & ivec_count(fg_rank1),
2560 & MPI_MAT1,DtUg2EUg(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2562 call MPI_Allgatherv(Ug2DtEUg(1,1,ivec_start),
2563 & ivec_count(fg_rank1),
2564 & MPI_MAT1,Ug2DtEUg(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2566 call MPI_Allgatherv(DtUg2EUgder(1,1,1,ivec_start),
2567 & ivec_count(fg_rank1),
2568 & MPI_MAT2,DtUg2EUgder(1,1,1,1),ivec_count(0),ivec_displ(0),
2569 & MPI_MAT2,FG_COMM1,IERR)
2570 call MPI_Allgatherv(Ug2DtEUgder(1,1,1,ivec_start),
2571 & ivec_count(fg_rank1),
2572 & MPI_MAT2,Ug2DtEUgder(1,1,1,1),ivec_count(0),ivec_displ(0),
2573 & MPI_MAT2,FG_COMM1,IERR)
2576 c Passes matrix info through the ring
2579 if (irecv.lt.0) irecv=nfgtasks1-1
2582 if (inext.ge.nfgtasks1) inext=0
2584 c write (iout,*) "isend",isend," irecv",irecv
2586 lensend=lentyp(isend)
2587 lenrecv=lentyp(irecv)
2588 c write (iout,*) "lensend",lensend," lenrecv",lenrecv
2589 c call MPI_SENDRECV(ug(1,1,ivec_displ(isend)+1),1,
2590 c & MPI_ROTAT1(lensend),inext,2200+isend,
2591 c & ug(1,1,ivec_displ(irecv)+1),1,MPI_ROTAT1(lenrecv),
2592 c & iprev,2200+irecv,FG_COMM,status,IERR)
2593 c write (iout,*) "Gather ROTAT1"
2595 c call MPI_SENDRECV(obrot(1,ivec_displ(isend)+1),1,
2596 c & MPI_ROTAT2(lensend),inext,3300+isend,
2597 c & obrot(1,ivec_displ(irecv)+1),1,MPI_ROTAT2(lenrecv),
2598 c & iprev,3300+irecv,FG_COMM,status,IERR)
2599 c write (iout,*) "Gather ROTAT2"
2601 call MPI_SENDRECV(costab(ivec_displ(isend)+1),1,
2602 & MPI_ROTAT_OLD(lensend),inext,4400+isend,
2603 & costab(ivec_displ(irecv)+1),1,MPI_ROTAT_OLD(lenrecv),
2604 & iprev,4400+irecv,FG_COMM,status,IERR)
2605 c write (iout,*) "Gather ROTAT_OLD"
2607 call MPI_SENDRECV(mu(1,ivec_displ(isend)+1),1,
2608 & MPI_PRECOMP11(lensend),inext,5500+isend,
2609 & mu(1,ivec_displ(irecv)+1),1,MPI_PRECOMP11(lenrecv),
2610 & iprev,5500+irecv,FG_COMM,status,IERR)
2611 c write (iout,*) "Gather PRECOMP11"
2613 call MPI_SENDRECV(Eug(1,1,ivec_displ(isend)+1),1,
2614 & MPI_PRECOMP12(lensend),inext,6600+isend,
2615 & Eug(1,1,ivec_displ(irecv)+1),1,MPI_PRECOMP12(lenrecv),
2616 & iprev,6600+irecv,FG_COMM,status,IERR)
2617 c write (iout,*) "Gather PRECOMP12"
2619 if (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0)
2621 call MPI_SENDRECV(ug2db1t(1,ivec_displ(isend)+1),1,
2622 & MPI_ROTAT2(lensend),inext,7700+isend,
2623 & ug2db1t(1,ivec_displ(irecv)+1),1,MPI_ROTAT2(lenrecv),
2624 & iprev,7700+irecv,FG_COMM,status,IERR)
2625 c write (iout,*) "Gather PRECOMP21"
2627 call MPI_SENDRECV(EUgC(1,1,ivec_displ(isend)+1),1,
2628 & MPI_PRECOMP22(lensend),inext,8800+isend,
2629 & EUgC(1,1,ivec_displ(irecv)+1),1,MPI_PRECOMP22(lenrecv),
2630 & iprev,8800+irecv,FG_COMM,status,IERR)
2631 c write (iout,*) "Gather PRECOMP22"
2633 call MPI_SENDRECV(Ug2DtEUgder(1,1,1,ivec_displ(isend)+1),1,
2634 & MPI_PRECOMP23(lensend),inext,9900+isend,
2635 & Ug2DtEUgder(1,1,1,ivec_displ(irecv)+1),1,
2636 & MPI_PRECOMP23(lenrecv),
2637 & iprev,9900+irecv,FG_COMM,status,IERR)
2638 c write (iout,*) "Gather PRECOMP23"
2643 if (irecv.lt.0) irecv=nfgtasks1-1
2646 time_gather=time_gather+MPI_Wtime()-time00
2649 c if (fg_rank.eq.0) then
2650 write (iout,*) "Arrays UG and UGDER"
2652 write (iout,'(i5,4f10.5,5x,4f10.5)') i,
2653 & ((ug(l,k,i),l=1,2),k=1,2),
2654 & ((ugder(l,k,i),l=1,2),k=1,2)
2656 write (iout,*) "Arrays UG2 and UG2DER"
2658 write (iout,'(i5,4f10.5,5x,4f10.5)') i,
2659 & ((ug2(l,k,i),l=1,2),k=1,2),
2660 & ((ug2der(l,k,i),l=1,2),k=1,2)
2662 write (iout,*) "Arrays OBROT OBROT2 OBROTDER and OBROT2DER"
2664 write (iout,'(i5,4f10.5,5x,4f10.5)') i,
2665 & (obrot(k,i),k=1,2),(obrot2(k,i),k=1,2),
2666 & (obrot_der(k,i),k=1,2),(obrot2_der(k,i),k=1,2)
2668 write (iout,*) "Arrays COSTAB SINTAB COSTAB2 and SINTAB2"
2670 write (iout,'(i5,4f10.5,5x,4f10.5)') i,
2671 & costab(i),sintab(i),costab2(i),sintab2(i)
2673 write (iout,*) "Array MUDER"
2675 write (iout,'(i5,2f10.5)') i,muder(1,i),muder(2,i)
2681 cd iti = itortyp(itype(i))
2684 cd write (iout,'(2f10.5,5x,2f10.5,5x,2f10.5)')
2685 cd & (EE(j,k,iti),k=1,2),(Ug(j,k,i),k=1,2),(EUg(j,k,i),k=1,2)
2690 C--------------------------------------------------------------------------
2691 subroutine eelec(ees,evdw1,eel_loc,eello_turn3,eello_turn4)
2693 C This subroutine calculates the average interaction energy and its gradient
2694 C in the virtual-bond vectors between non-adjacent peptide groups, based on
2695 C the potential described in Liwo et al., Protein Sci., 1993, 2, 1715.
2696 C The potential depends both on the distance of peptide-group centers and on
2697 C the orientation of the CA-CA virtual bonds.
2699 implicit real*8 (a-h,o-z)
2703 include 'DIMENSIONS'
2704 include 'COMMON.CONTROL'
2705 include 'COMMON.SETUP'
2706 include 'COMMON.IOUNITS'
2707 include 'COMMON.GEO'
2708 include 'COMMON.VAR'
2709 include 'COMMON.LOCAL'
2710 include 'COMMON.CHAIN'
2711 include 'COMMON.DERIV'
2712 include 'COMMON.INTERACT'
2713 include 'COMMON.CONTACTS'
2714 include 'COMMON.TORSION'
2715 include 'COMMON.VECTORS'
2716 include 'COMMON.FFIELD'
2717 include 'COMMON.TIME1'
2718 dimension ggg(3),gggp(3),gggm(3),erij(3),dcosb(3),dcosg(3),
2719 & erder(3,3),uryg(3,3),urzg(3,3),vryg(3,3),vrzg(3,3)
2720 double precision acipa(2,2),agg(3,4),aggi(3,4),aggi1(3,4),
2721 & aggj(3,4),aggj1(3,4),a_temp(2,2),muij(4)
2722 common /locel/ a_temp,agg,aggi,aggi1,aggj,aggj1,a22,a23,a32,a33,
2723 & dxi,dyi,dzi,dx_normi,dy_normi,dz_normi,xmedi,ymedi,zmedi,
2725 c 4/26/02 - AL scaling factor for 1,4 repulsive VDW interactions
2727 double precision scal_el /1.0d0/
2729 double precision scal_el /0.5d0/
2732 C 13-go grudnia roku pamietnego...
2733 double precision unmat(3,3) /1.0d0,0.0d0,0.0d0,
2734 & 0.0d0,1.0d0,0.0d0,
2735 & 0.0d0,0.0d0,1.0d0/
2736 cd write(iout,*) 'In EELEC'
2738 cd write(iout,*) 'Type',i
2739 cd write(iout,*) 'B1',B1(:,i)
2740 cd write(iout,*) 'B2',B2(:,i)
2741 cd write(iout,*) 'CC',CC(:,:,i)
2742 cd write(iout,*) 'DD',DD(:,:,i)
2743 cd write(iout,*) 'EE',EE(:,:,i)
2745 cd call check_vecgrad
2747 if (icheckgrad.eq.1) then
2749 fac=1.0d0/dsqrt(scalar(dc(1,i),dc(1,i)))
2751 dc_norm(k,i)=dc(k,i)*fac
2753 c write (iout,*) 'i',i,' fac',fac
2756 if (wel_loc.gt.0.0d0 .or. wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0
2757 & .or. wcorr6.gt.0.0d0 .or. wturn3.gt.0.0d0 .or.
2758 & wturn4.gt.0.0d0 .or. wturn6.gt.0.0d0) then
2759 c call vec_and_deriv
2765 time_mat=time_mat+MPI_Wtime()-time01
2769 cd write (iout,*) 'i=',i
2771 cd write (iout,'(i5,2f10.5)') k,uy(k,i),uz(k,i)
2774 cd write (iout,'(f10.5,2x,3f10.5,2x,3f10.5)')
2775 cd & uz(k,i),(uzgrad(k,l,1,i),l=1,3),(uzgrad(k,l,2,i),l=1,3)
2788 cd print '(a)','Enter EELEC'
2789 cd write (iout,*) 'iatel_s=',iatel_s,' iatel_e=',iatel_e
2791 gel_loc_loc(i)=0.0d0
2796 c 9/27/08 AL Split the interaction loop to ensure load balancing of turn terms
2798 C Loop over i,i+2 and i,i+3 pairs of the peptide groups
2800 do i=iturn3_start,iturn3_end
2801 if (itype(i).eq.21 .or. itype(i+1).eq.21
2802 & .or. itype(i+2).eq.21 .or. itype(i+3).eq.21) cycle
2806 dx_normi=dc_norm(1,i)
2807 dy_normi=dc_norm(2,i)
2808 dz_normi=dc_norm(3,i)
2809 xmedi=c(1,i)+0.5d0*dxi
2810 ymedi=c(2,i)+0.5d0*dyi
2811 zmedi=c(3,i)+0.5d0*dzi
2813 call eelecij(i,i+2,ees,evdw1,eel_loc)
2814 if (wturn3.gt.0.0d0) call eturn3(i,eello_turn3)
2815 num_cont_hb(i)=num_conti
2817 do i=iturn4_start,iturn4_end
2818 if (itype(i).eq.21 .or. itype(i+1).eq.21
2819 & .or. itype(i+3).eq.21
2820 & .or. itype(i+4).eq.21) cycle
2824 dx_normi=dc_norm(1,i)
2825 dy_normi=dc_norm(2,i)
2826 dz_normi=dc_norm(3,i)
2827 xmedi=c(1,i)+0.5d0*dxi
2828 ymedi=c(2,i)+0.5d0*dyi
2829 zmedi=c(3,i)+0.5d0*dzi
2830 num_conti=num_cont_hb(i)
2831 call eelecij(i,i+3,ees,evdw1,eel_loc)
2832 if (wturn4.gt.0.0d0 .and. itype(i+2).ne.21)
2833 & call eturn4(i,eello_turn4)
2834 num_cont_hb(i)=num_conti
2837 c Loop over all pairs of interacting peptide groups except i,i+2 and i,i+3
2839 do i=iatel_s,iatel_e
2840 if (itype(i).eq.21 .or. itype(i+1).eq.21) cycle
2844 dx_normi=dc_norm(1,i)
2845 dy_normi=dc_norm(2,i)
2846 dz_normi=dc_norm(3,i)
2847 xmedi=c(1,i)+0.5d0*dxi
2848 ymedi=c(2,i)+0.5d0*dyi
2849 zmedi=c(3,i)+0.5d0*dzi
2850 c write (iout,*) 'i',i,' ielstart',ielstart(i),' ielend',ielend(i)
2851 num_conti=num_cont_hb(i)
2852 do j=ielstart(i),ielend(i)
2853 c write (iout,*) i,j,itype(i),itype(j)
2854 if (itype(j).eq.21 .or. itype(j+1).eq.21) cycle
2855 call eelecij(i,j,ees,evdw1,eel_loc)
2857 num_cont_hb(i)=num_conti
2859 c write (iout,*) "Number of loop steps in EELEC:",ind
2861 cd write (iout,'(i3,3f10.5,5x,3f10.5)')
2862 cd & i,(gel_loc(k,i),k=1,3),gel_loc_loc(i)
2864 c 12/7/99 Adam eello_turn3 will be considered as a separate energy term
2865 ccc eel_loc=eel_loc+eello_turn3
2866 cd print *,"Processor",fg_rank," t_eelecij",t_eelecij
2869 C-------------------------------------------------------------------------------
2870 subroutine eelecij(i,j,ees,evdw1,eel_loc)
2871 implicit real*8 (a-h,o-z)
2872 include 'DIMENSIONS'
2876 include 'COMMON.CONTROL'
2877 include 'COMMON.IOUNITS'
2878 include 'COMMON.GEO'
2879 include 'COMMON.VAR'
2880 include 'COMMON.LOCAL'
2881 include 'COMMON.CHAIN'
2882 include 'COMMON.DERIV'
2883 include 'COMMON.INTERACT'
2884 include 'COMMON.CONTACTS'
2885 include 'COMMON.TORSION'
2886 include 'COMMON.VECTORS'
2887 include 'COMMON.FFIELD'
2888 include 'COMMON.TIME1'
2889 dimension ggg(3),gggp(3),gggm(3),erij(3),dcosb(3),dcosg(3),
2890 & erder(3,3),uryg(3,3),urzg(3,3),vryg(3,3),vrzg(3,3)
2891 double precision acipa(2,2),agg(3,4),aggi(3,4),aggi1(3,4),
2892 & aggj(3,4),aggj1(3,4),a_temp(2,2),muij(4)
2893 common /locel/ a_temp,agg,aggi,aggi1,aggj,aggj1,a22,a23,a32,a33,
2894 & dxi,dyi,dzi,dx_normi,dy_normi,dz_normi,xmedi,ymedi,zmedi,
2896 c 4/26/02 - AL scaling factor for 1,4 repulsive VDW interactions
2898 double precision scal_el /1.0d0/
2900 double precision scal_el /0.5d0/
2903 C 13-go grudnia roku pamietnego...
2904 double precision unmat(3,3) /1.0d0,0.0d0,0.0d0,
2905 & 0.0d0,1.0d0,0.0d0,
2906 & 0.0d0,0.0d0,1.0d0/
2907 c time00=MPI_Wtime()
2908 cd write (iout,*) "eelecij",i,j
2912 if (j.eq.i+2 .and. itelj.eq.2) iteli=2
2913 aaa=app(iteli,itelj)
2914 bbb=bpp(iteli,itelj)
2915 ael6i=ael6(iteli,itelj)
2916 ael3i=ael3(iteli,itelj)
2920 dx_normj=dc_norm(1,j)
2921 dy_normj=dc_norm(2,j)
2922 dz_normj=dc_norm(3,j)
2923 xj=c(1,j)+0.5D0*dxj-xmedi
2924 yj=c(2,j)+0.5D0*dyj-ymedi
2925 zj=c(3,j)+0.5D0*dzj-zmedi
2926 rij=xj*xj+yj*yj+zj*zj
2932 cosa=dx_normi*dx_normj+dy_normi*dy_normj+dz_normi*dz_normj
2933 cosb=(xj*dx_normi+yj*dy_normi+zj*dz_normi)*rmij
2934 cosg=(xj*dx_normj+yj*dy_normj+zj*dz_normj)*rmij
2935 fac=cosa-3.0D0*cosb*cosg
2937 c 4/26/02 - AL scaling down 1,4 repulsive VDW interactions
2938 if (j.eq.i+2) ev1=scal_el*ev1
2943 el1=fac3*(4.0D0+fac*fac-3.0D0*(cosb*cosb+cosg*cosg))
2946 C 12/26/95 - for the evaluation of multi-body H-bonding interactions
2947 ees0ij=4.0D0+fac*fac-3.0D0*(cosb*cosb+cosg*cosg)
2950 cd write(iout,'(2(2i3,2x),7(1pd12.4)/2(3(1pd12.4),5x)/)')
2951 cd & iteli,i,itelj,j,aaa,bbb,ael6i,ael3i,
2952 cd & 1.0D0/dsqrt(rrmij),evdwij,eesij,
2953 cd & xmedi,ymedi,zmedi,xj,yj,zj
2955 if (energy_dec) then
2956 write (iout,'(a6,2i5,0pf7.3)') 'evdw1',i,j,evdwij
2957 write (iout,'(a6,2i5,0pf7.3)') 'ees',i,j,eesij
2961 C Calculate contributions to the Cartesian gradient.
2964 facvdw=-6*rrmij*(ev1+evdwij)
2965 facel=-3*rrmij*(el1+eesij)
2971 * Radial derivatives. First process both termini of the fragment (i,j)
2977 c ghalf=0.5D0*ggg(k)
2978 c gelc(k,i)=gelc(k,i)+ghalf
2979 c gelc(k,j)=gelc(k,j)+ghalf
2981 c 9/28/08 AL Gradient compotents will be summed only at the end
2983 gelc_long(k,j)=gelc_long(k,j)+ggg(k)
2984 gelc_long(k,i)=gelc_long(k,i)-ggg(k)
2987 * Loop over residues i+1 thru j-1.
2991 cgrad gelc(l,k)=gelc(l,k)+ggg(l)
2998 c ghalf=0.5D0*ggg(k)
2999 c gvdwpp(k,i)=gvdwpp(k,i)+ghalf
3000 c gvdwpp(k,j)=gvdwpp(k,j)+ghalf
3002 c 9/28/08 AL Gradient compotents will be summed only at the end
3004 gvdwpp(k,j)=gvdwpp(k,j)+ggg(k)
3005 gvdwpp(k,i)=gvdwpp(k,i)-ggg(k)
3008 * Loop over residues i+1 thru j-1.
3012 cgrad gvdwpp(l,k)=gvdwpp(l,k)+ggg(l)
3019 fac=-3*rrmij*(facvdw+facvdw+facel)
3024 * Radial derivatives. First process both termini of the fragment (i,j)
3030 c ghalf=0.5D0*ggg(k)
3031 c gelc(k,i)=gelc(k,i)+ghalf
3032 c gelc(k,j)=gelc(k,j)+ghalf
3034 c 9/28/08 AL Gradient compotents will be summed only at the end
3036 gelc_long(k,j)=gelc(k,j)+ggg(k)
3037 gelc_long(k,i)=gelc(k,i)-ggg(k)
3040 * Loop over residues i+1 thru j-1.
3044 cgrad gelc(l,k)=gelc(l,k)+ggg(l)
3047 c 9/28/08 AL Gradient compotents will be summed only at the end
3052 gvdwpp(k,j)=gvdwpp(k,j)+ggg(k)
3053 gvdwpp(k,i)=gvdwpp(k,i)-ggg(k)
3059 ecosa=2.0D0*fac3*fac1+fac4
3062 ecosb=(fac3*(fac1*cosg+cosb)+cosg*fac4)
3063 ecosg=(fac3*(fac1*cosb+cosg)+cosb*fac4)
3065 dcosb(k)=rmij*(dc_norm(k,i)-erij(k)*cosb)
3066 dcosg(k)=rmij*(dc_norm(k,j)-erij(k)*cosg)
3068 cd print '(2i3,2(3(1pd14.5),3x))',i,j,(dcosb(k),k=1,3),
3069 cd & (dcosg(k),k=1,3)
3071 ggg(k)=ecosb*dcosb(k)+ecosg*dcosg(k)
3074 c ghalf=0.5D0*ggg(k)
3075 c gelc(k,i)=gelc(k,i)+ghalf
3076 c & +(ecosa*(dc_norm(k,j)-cosa*dc_norm(k,i))
3077 c & + ecosb*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1)
3078 c gelc(k,j)=gelc(k,j)+ghalf
3079 c & +(ecosa*(dc_norm(k,i)-cosa*dc_norm(k,j))
3080 c & + ecosg*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1)
3084 cgrad gelc(l,k)=gelc(l,k)+ggg(l)
3089 & +(ecosa*(dc_norm(k,j)-cosa*dc_norm(k,i))
3090 & + ecosb*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1)
3092 & +(ecosa*(dc_norm(k,i)-cosa*dc_norm(k,j))
3093 & + ecosg*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1)
3094 gelc_long(k,j)=gelc_long(k,j)+ggg(k)
3095 gelc_long(k,i)=gelc_long(k,i)-ggg(k)
3097 IF (wel_loc.gt.0.0d0 .or. wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0
3098 & .or. wcorr6.gt.0.0d0 .or. wturn3.gt.0.0d0
3099 & .or. wturn4.gt.0.0d0 .or. wturn6.gt.0.0d0) THEN
3101 C 9/25/99 Mixed third-order local-electrostatic terms. The local-interaction
3102 C energy of a peptide unit is assumed in the form of a second-order
3103 C Fourier series in the angles lambda1 and lambda2 (see Nishikawa et al.
3104 C Macromolecules, 1974, 7, 797-806 for definition). This correlation terms
3105 C are computed for EVERY pair of non-contiguous peptide groups.
3107 if (j.lt.nres-1) then
3118 muij(kkk)=mu(k,i)*mu(l,j)
3121 cd write (iout,*) 'EELEC: i',i,' j',j
3122 cd write (iout,*) 'j',j,' j1',j1,' j2',j2
3123 cd write(iout,*) 'muij',muij
3124 ury=scalar(uy(1,i),erij)
3125 urz=scalar(uz(1,i),erij)
3126 vry=scalar(uy(1,j),erij)
3127 vrz=scalar(uz(1,j),erij)
3128 a22=scalar(uy(1,i),uy(1,j))-3*ury*vry
3129 a23=scalar(uy(1,i),uz(1,j))-3*ury*vrz
3130 a32=scalar(uz(1,i),uy(1,j))-3*urz*vry
3131 a33=scalar(uz(1,i),uz(1,j))-3*urz*vrz
3132 fac=dsqrt(-ael6i)*r3ij
3137 cd write (iout,'(4i5,4f10.5)')
3138 cd & i,itortyp(itype(i)),j,itortyp(itype(j)),a22,a23,a32,a33
3139 cd write (iout,'(6f10.5)') (muij(k),k=1,4),fac,eel_loc_ij
3140 cd write (iout,'(2(3f10.5,5x)/2(3f10.5,5x))') uy(:,i),uz(:,i),
3141 cd & uy(:,j),uz(:,j)
3142 cd write (iout,'(4f10.5)')
3143 cd & scalar(uy(1,i),uy(1,j)),scalar(uy(1,i),uz(1,j)),
3144 cd & scalar(uz(1,i),uy(1,j)),scalar(uz(1,i),uz(1,j))
3145 cd write (iout,'(4f10.5)') ury,urz,vry,vrz
3146 cd write (iout,'(9f10.5/)')
3147 cd & fac22,a22,fac23,a23,fac32,a32,fac33,a33,eel_loc_ij
3148 C Derivatives of the elements of A in virtual-bond vectors
3149 call unormderiv(erij(1),unmat(1,1),rmij,erder(1,1))
3151 uryg(k,1)=scalar(erder(1,k),uy(1,i))
3152 uryg(k,2)=scalar(uygrad(1,k,1,i),erij(1))
3153 uryg(k,3)=scalar(uygrad(1,k,2,i),erij(1))
3154 urzg(k,1)=scalar(erder(1,k),uz(1,i))
3155 urzg(k,2)=scalar(uzgrad(1,k,1,i),erij(1))
3156 urzg(k,3)=scalar(uzgrad(1,k,2,i),erij(1))
3157 vryg(k,1)=scalar(erder(1,k),uy(1,j))
3158 vryg(k,2)=scalar(uygrad(1,k,1,j),erij(1))
3159 vryg(k,3)=scalar(uygrad(1,k,2,j),erij(1))
3160 vrzg(k,1)=scalar(erder(1,k),uz(1,j))
3161 vrzg(k,2)=scalar(uzgrad(1,k,1,j),erij(1))
3162 vrzg(k,3)=scalar(uzgrad(1,k,2,j),erij(1))
3164 C Compute radial contributions to the gradient
3182 C Add the contributions coming from er
3185 agg(k,1)=agg(k,1)+fac3*(uryg(k,1)*vry+vryg(k,1)*ury)
3186 agg(k,2)=agg(k,2)+fac3*(uryg(k,1)*vrz+vrzg(k,1)*ury)
3187 agg(k,3)=agg(k,3)+fac3*(urzg(k,1)*vry+vryg(k,1)*urz)
3188 agg(k,4)=agg(k,4)+fac3*(urzg(k,1)*vrz+vrzg(k,1)*urz)
3191 C Derivatives in DC(i)
3192 cgrad ghalf1=0.5d0*agg(k,1)
3193 cgrad ghalf2=0.5d0*agg(k,2)
3194 cgrad ghalf3=0.5d0*agg(k,3)
3195 cgrad ghalf4=0.5d0*agg(k,4)
3196 aggi(k,1)=fac*(scalar(uygrad(1,k,1,i),uy(1,j))
3197 & -3.0d0*uryg(k,2)*vry)!+ghalf1
3198 aggi(k,2)=fac*(scalar(uygrad(1,k,1,i),uz(1,j))
3199 & -3.0d0*uryg(k,2)*vrz)!+ghalf2
3200 aggi(k,3)=fac*(scalar(uzgrad(1,k,1,i),uy(1,j))
3201 & -3.0d0*urzg(k,2)*vry)!+ghalf3
3202 aggi(k,4)=fac*(scalar(uzgrad(1,k,1,i),uz(1,j))
3203 & -3.0d0*urzg(k,2)*vrz)!+ghalf4
3204 C Derivatives in DC(i+1)
3205 aggi1(k,1)=fac*(scalar(uygrad(1,k,2,i),uy(1,j))
3206 & -3.0d0*uryg(k,3)*vry)!+agg(k,1)
3207 aggi1(k,2)=fac*(scalar(uygrad(1,k,2,i),uz(1,j))
3208 & -3.0d0*uryg(k,3)*vrz)!+agg(k,2)
3209 aggi1(k,3)=fac*(scalar(uzgrad(1,k,2,i),uy(1,j))
3210 & -3.0d0*urzg(k,3)*vry)!+agg(k,3)
3211 aggi1(k,4)=fac*(scalar(uzgrad(1,k,2,i),uz(1,j))
3212 & -3.0d0*urzg(k,3)*vrz)!+agg(k,4)
3213 C Derivatives in DC(j)
3214 aggj(k,1)=fac*(scalar(uygrad(1,k,1,j),uy(1,i))
3215 & -3.0d0*vryg(k,2)*ury)!+ghalf1
3216 aggj(k,2)=fac*(scalar(uzgrad(1,k,1,j),uy(1,i))
3217 & -3.0d0*vrzg(k,2)*ury)!+ghalf2
3218 aggj(k,3)=fac*(scalar(uygrad(1,k,1,j),uz(1,i))
3219 & -3.0d0*vryg(k,2)*urz)!+ghalf3
3220 aggj(k,4)=fac*(scalar(uzgrad(1,k,1,j),uz(1,i))
3221 & -3.0d0*vrzg(k,2)*urz)!+ghalf4
3222 C Derivatives in DC(j+1) or DC(nres-1)
3223 aggj1(k,1)=fac*(scalar(uygrad(1,k,2,j),uy(1,i))
3224 & -3.0d0*vryg(k,3)*ury)
3225 aggj1(k,2)=fac*(scalar(uzgrad(1,k,2,j),uy(1,i))
3226 & -3.0d0*vrzg(k,3)*ury)
3227 aggj1(k,3)=fac*(scalar(uygrad(1,k,2,j),uz(1,i))
3228 & -3.0d0*vryg(k,3)*urz)
3229 aggj1(k,4)=fac*(scalar(uzgrad(1,k,2,j),uz(1,i))
3230 & -3.0d0*vrzg(k,3)*urz)
3231 cgrad if (j.eq.nres-1 .and. i.lt.j-2) then
3233 cgrad aggj1(k,l)=aggj1(k,l)+agg(k,l)
3246 aggi(k,l)=-aggi(k,l)
3247 aggi1(k,l)=-aggi1(k,l)
3248 aggj(k,l)=-aggj(k,l)
3249 aggj1(k,l)=-aggj1(k,l)
3252 if (j.lt.nres-1) then
3258 aggi(k,l)=-aggi(k,l)
3259 aggi1(k,l)=-aggi1(k,l)
3260 aggj(k,l)=-aggj(k,l)
3261 aggj1(k,l)=-aggj1(k,l)
3272 aggi(k,l)=-aggi(k,l)
3273 aggi1(k,l)=-aggi1(k,l)
3274 aggj(k,l)=-aggj(k,l)
3275 aggj1(k,l)=-aggj1(k,l)
3280 IF (wel_loc.gt.0.0d0) THEN
3281 C Contribution to the local-electrostatic energy coming from the i-j pair
3282 eel_loc_ij=a22*muij(1)+a23*muij(2)+a32*muij(3)
3284 cd write (iout,*) 'i',i,' j',j,' eel_loc_ij',eel_loc_ij
3286 if (energy_dec) write (iout,'(a6,2i5,0pf7.3)')
3287 & 'eelloc',i,j,eel_loc_ij
3289 eel_loc=eel_loc+eel_loc_ij
3290 C Partial derivatives in virtual-bond dihedral angles gamma
3292 & gel_loc_loc(i-1)=gel_loc_loc(i-1)+
3293 & a22*muder(1,i)*mu(1,j)+a23*muder(1,i)*mu(2,j)
3294 & +a32*muder(2,i)*mu(1,j)+a33*muder(2,i)*mu(2,j)
3295 gel_loc_loc(j-1)=gel_loc_loc(j-1)+
3296 & a22*mu(1,i)*muder(1,j)+a23*mu(1,i)*muder(2,j)
3297 & +a32*mu(2,i)*muder(1,j)+a33*mu(2,i)*muder(2,j)
3298 C Derivatives of eello in DC(i+1) thru DC(j-1) or DC(nres-2)
3300 ggg(l)=agg(l,1)*muij(1)+
3301 & agg(l,2)*muij(2)+agg(l,3)*muij(3)+agg(l,4)*muij(4)
3302 gel_loc_long(l,j)=gel_loc_long(l,j)+ggg(l)
3303 gel_loc_long(l,i)=gel_loc_long(l,i)-ggg(l)
3304 cgrad ghalf=0.5d0*ggg(l)
3305 cgrad gel_loc(l,i)=gel_loc(l,i)+ghalf
3306 cgrad gel_loc(l,j)=gel_loc(l,j)+ghalf
3310 cgrad gel_loc(l,k)=gel_loc(l,k)+ggg(l)
3313 C Remaining derivatives of eello
3315 gel_loc(l,i)=gel_loc(l,i)+aggi(l,1)*muij(1)+
3316 & aggi(l,2)*muij(2)+aggi(l,3)*muij(3)+aggi(l,4)*muij(4)
3317 gel_loc(l,i+1)=gel_loc(l,i+1)+aggi1(l,1)*muij(1)+
3318 & aggi1(l,2)*muij(2)+aggi1(l,3)*muij(3)+aggi1(l,4)*muij(4)
3319 gel_loc(l,j)=gel_loc(l,j)+aggj(l,1)*muij(1)+
3320 & aggj(l,2)*muij(2)+aggj(l,3)*muij(3)+aggj(l,4)*muij(4)
3321 gel_loc(l,j1)=gel_loc(l,j1)+aggj1(l,1)*muij(1)+
3322 & aggj1(l,2)*muij(2)+aggj1(l,3)*muij(3)+aggj1(l,4)*muij(4)
3325 C Change 12/26/95 to calculate four-body contributions to H-bonding energy
3326 c if (j.gt.i+1 .and. num_conti.le.maxconts) then
3327 if (wcorr+wcorr4+wcorr5+wcorr6.gt.0.0d0
3328 & .and. num_conti.le.maxconts) then
3329 c write (iout,*) i,j," entered corr"
3331 C Calculate the contact function. The ith column of the array JCONT will
3332 C contain the numbers of atoms that make contacts with the atom I (of numbers
3333 C greater than I). The arrays FACONT and GACONT will contain the values of
3334 C the contact function and its derivative.
3335 c r0ij=1.02D0*rpp(iteli,itelj)
3336 c r0ij=1.11D0*rpp(iteli,itelj)
3337 r0ij=2.20D0*rpp(iteli,itelj)
3338 c r0ij=1.55D0*rpp(iteli,itelj)
3339 call gcont(rij,r0ij,1.0D0,0.2d0*r0ij,fcont,fprimcont)
3340 if (fcont.gt.0.0D0) then
3341 num_conti=num_conti+1
3342 if (num_conti.gt.maxconts) then
3343 write (iout,*) 'WARNING - max. # of contacts exceeded;',
3344 & ' will skip next contacts for this conf.'
3346 jcont_hb(num_conti,i)=j
3347 cd write (iout,*) "i",i," j",j," num_conti",num_conti,
3348 cd & " jcont_hb",jcont_hb(num_conti,i)
3349 IF (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or.
3350 & wcorr6.gt.0.0d0 .or. wturn6.gt.0.0d0) THEN
3351 C 9/30/99 (AL) - store components necessary to evaluate higher-order loc-el
3353 d_cont(num_conti,i)=rij
3354 cd write (2,'(3e15.5)') rij,r0ij+0.2d0*r0ij,rij
3355 C --- Electrostatic-interaction matrix ---
3356 a_chuj(1,1,num_conti,i)=a22
3357 a_chuj(1,2,num_conti,i)=a23
3358 a_chuj(2,1,num_conti,i)=a32
3359 a_chuj(2,2,num_conti,i)=a33
3360 C --- Gradient of rij
3362 grij_hb_cont(kkk,num_conti,i)=erij(kkk)
3369 a_chuj_der(k,l,m,1,num_conti,i)=agg(m,kkll)
3370 a_chuj_der(k,l,m,2,num_conti,i)=aggi(m,kkll)
3371 a_chuj_der(k,l,m,3,num_conti,i)=aggi1(m,kkll)
3372 a_chuj_der(k,l,m,4,num_conti,i)=aggj(m,kkll)
3373 a_chuj_der(k,l,m,5,num_conti,i)=aggj1(m,kkll)
3378 IF (wcorr4.eq.0.0d0 .and. wcorr.gt.0.0d0) THEN
3379 C Calculate contact energies
3381 wij=cosa-3.0D0*cosb*cosg
3384 c fac3=dsqrt(-ael6i)/r0ij**3
3385 fac3=dsqrt(-ael6i)*r3ij
3386 c ees0pij=dsqrt(4.0D0+cosa4+wij*wij-3.0D0*cosbg1*cosbg1)
3387 ees0tmp=4.0D0+cosa4+wij*wij-3.0D0*cosbg1*cosbg1
3388 if (ees0tmp.gt.0) then
3389 ees0pij=dsqrt(ees0tmp)
3393 c ees0mij=dsqrt(4.0D0-cosa4+wij*wij-3.0D0*cosbg2*cosbg2)
3394 ees0tmp=4.0D0-cosa4+wij*wij-3.0D0*cosbg2*cosbg2
3395 if (ees0tmp.gt.0) then
3396 ees0mij=dsqrt(ees0tmp)
3401 ees0p(num_conti,i)=0.5D0*fac3*(ees0pij+ees0mij)
3402 ees0m(num_conti,i)=0.5D0*fac3*(ees0pij-ees0mij)
3403 C Diagnostics. Comment out or remove after debugging!
3404 c ees0p(num_conti,i)=0.5D0*fac3*ees0pij
3405 c ees0m(num_conti,i)=0.5D0*fac3*ees0mij
3406 c ees0m(num_conti,i)=0.0D0
3408 c write (iout,*) 'i=',i,' j=',j,' rij=',rij,' r0ij=',r0ij,
3409 c & ' ees0ij=',ees0p(num_conti,i),ees0m(num_conti,i),' fcont=',fcont
3410 C Angular derivatives of the contact function
3411 ees0pij1=fac3/ees0pij
3412 ees0mij1=fac3/ees0mij
3413 fac3p=-3.0D0*fac3*rrmij
3414 ees0pijp=0.5D0*fac3p*(ees0pij+ees0mij)
3415 ees0mijp=0.5D0*fac3p*(ees0pij-ees0mij)
3417 ecosa1= ees0pij1*( 1.0D0+0.5D0*wij)
3418 ecosb1=-1.5D0*ees0pij1*(wij*cosg+cosbg1)
3419 ecosg1=-1.5D0*ees0pij1*(wij*cosb+cosbg1)
3420 ecosa2= ees0mij1*(-1.0D0+0.5D0*wij)
3421 ecosb2=-1.5D0*ees0mij1*(wij*cosg+cosbg2)
3422 ecosg2=-1.5D0*ees0mij1*(wij*cosb-cosbg2)
3423 ecosap=ecosa1+ecosa2
3424 ecosbp=ecosb1+ecosb2
3425 ecosgp=ecosg1+ecosg2
3426 ecosam=ecosa1-ecosa2
3427 ecosbm=ecosb1-ecosb2
3428 ecosgm=ecosg1-ecosg2
3437 facont_hb(num_conti,i)=fcont
3438 fprimcont=fprimcont/rij
3439 cd facont_hb(num_conti,i)=1.0D0
3440 C Following line is for diagnostics.
3443 dcosb(k)=rmij*(dc_norm(k,i)-erij(k)*cosb)
3444 dcosg(k)=rmij*(dc_norm(k,j)-erij(k)*cosg)
3447 gggp(k)=ecosbp*dcosb(k)+ecosgp*dcosg(k)
3448 gggm(k)=ecosbm*dcosb(k)+ecosgm*dcosg(k)
3450 gggp(1)=gggp(1)+ees0pijp*xj
3451 gggp(2)=gggp(2)+ees0pijp*yj
3452 gggp(3)=gggp(3)+ees0pijp*zj
3453 gggm(1)=gggm(1)+ees0mijp*xj
3454 gggm(2)=gggm(2)+ees0mijp*yj
3455 gggm(3)=gggm(3)+ees0mijp*zj
3456 C Derivatives due to the contact function
3457 gacont_hbr(1,num_conti,i)=fprimcont*xj
3458 gacont_hbr(2,num_conti,i)=fprimcont*yj
3459 gacont_hbr(3,num_conti,i)=fprimcont*zj
3462 c 10/24/08 cgrad and ! comments indicate the parts of the code removed
3463 c following the change of gradient-summation algorithm.
3465 cgrad ghalfp=0.5D0*gggp(k)
3466 cgrad ghalfm=0.5D0*gggm(k)
3467 gacontp_hb1(k,num_conti,i)=!ghalfp
3468 & +(ecosap*(dc_norm(k,j)-cosa*dc_norm(k,i))
3469 & + ecosbp*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1)
3470 gacontp_hb2(k,num_conti,i)=!ghalfp
3471 & +(ecosap*(dc_norm(k,i)-cosa*dc_norm(k,j))
3472 & + ecosgp*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1)
3473 gacontp_hb3(k,num_conti,i)=gggp(k)
3474 gacontm_hb1(k,num_conti,i)=!ghalfm
3475 & +(ecosam*(dc_norm(k,j)-cosa*dc_norm(k,i))
3476 & + ecosbm*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1)
3477 gacontm_hb2(k,num_conti,i)=!ghalfm
3478 & +(ecosam*(dc_norm(k,i)-cosa*dc_norm(k,j))
3479 & + ecosgm*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1)
3480 gacontm_hb3(k,num_conti,i)=gggm(k)
3482 C Diagnostics. Comment out or remove after debugging!
3484 cdiag gacontp_hb1(k,num_conti,i)=0.0D0
3485 cdiag gacontp_hb2(k,num_conti,i)=0.0D0
3486 cdiag gacontp_hb3(k,num_conti,i)=0.0D0
3487 cdiag gacontm_hb1(k,num_conti,i)=0.0D0
3488 cdiag gacontm_hb2(k,num_conti,i)=0.0D0
3489 cdiag gacontm_hb3(k,num_conti,i)=0.0D0
3492 endif ! num_conti.le.maxconts
3495 if (wturn3.gt.0.0d0 .or. wturn4.gt.0.0d0) then
3498 ghalf=0.5d0*agg(l,k)
3499 aggi(l,k)=aggi(l,k)+ghalf
3500 aggi1(l,k)=aggi1(l,k)+agg(l,k)
3501 aggj(l,k)=aggj(l,k)+ghalf
3504 if (j.eq.nres-1 .and. i.lt.j-2) then
3507 aggj1(l,k)=aggj1(l,k)+agg(l,k)
3512 c t_eelecij=t_eelecij+MPI_Wtime()-time00
3515 C-----------------------------------------------------------------------------
3516 subroutine eturn3(i,eello_turn3)
3517 C Third- and fourth-order contributions from turns
3518 implicit real*8 (a-h,o-z)
3519 include 'DIMENSIONS'
3520 include 'COMMON.IOUNITS'
3521 include 'COMMON.GEO'
3522 include 'COMMON.VAR'
3523 include 'COMMON.LOCAL'
3524 include 'COMMON.CHAIN'
3525 include 'COMMON.DERIV'
3526 include 'COMMON.INTERACT'
3527 include 'COMMON.CONTACTS'
3528 include 'COMMON.TORSION'
3529 include 'COMMON.VECTORS'
3530 include 'COMMON.FFIELD'
3531 include 'COMMON.CONTROL'
3533 double precision auxmat(2,2),auxmat1(2,2),auxmat2(2,2),pizda(2,2),
3534 & e1t(2,2),e2t(2,2),e3t(2,2),e1tder(2,2),e2tder(2,2),e3tder(2,2),
3535 & e1a(2,2),ae3(2,2),ae3e2(2,2),auxvec(2),auxvec1(2)
3536 double precision agg(3,4),aggi(3,4),aggi1(3,4),
3537 & aggj(3,4),aggj1(3,4),a_temp(2,2),auxmat3(2,2)
3538 common /locel/ a_temp,agg,aggi,aggi1,aggj,aggj1,a22,a23,a32,a33,
3539 & dxi,dyi,dzi,dx_normi,dy_normi,dz_normi,xmedi,ymedi,zmedi,
3542 c write (iout,*) "eturn3",i,j,j1,j2
3547 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
3549 C Third-order contributions
3556 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
3557 cd call checkint_turn3(i,a_temp,eello_turn3_num)
3558 call matmat2(EUg(1,1,i+1),EUg(1,1,i+2),auxmat(1,1))
3559 call transpose2(auxmat(1,1),auxmat1(1,1))
3560 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
3561 eello_turn3=eello_turn3+0.5d0*(pizda(1,1)+pizda(2,2))
3562 if (energy_dec) write (iout,'(a6,2i5,0pf7.3)')
3563 & 'eturn3',i,j,0.5d0*(pizda(1,1)+pizda(2,2))
3564 cd write (2,*) 'i,',i,' j',j,'eello_turn3',
3565 cd & 0.5d0*(pizda(1,1)+pizda(2,2)),
3566 cd & ' eello_turn3_num',4*eello_turn3_num
3567 C Derivatives in gamma(i)
3568 call matmat2(EUgder(1,1,i+1),EUg(1,1,i+2),auxmat2(1,1))
3569 call transpose2(auxmat2(1,1),auxmat3(1,1))
3570 call matmat2(a_temp(1,1),auxmat3(1,1),pizda(1,1))
3571 gel_loc_turn3(i)=gel_loc_turn3(i)+0.5d0*(pizda(1,1)+pizda(2,2))
3572 C Derivatives in gamma(i+1)
3573 call matmat2(EUg(1,1,i+1),EUgder(1,1,i+2),auxmat2(1,1))
3574 call transpose2(auxmat2(1,1),auxmat3(1,1))
3575 call matmat2(a_temp(1,1),auxmat3(1,1),pizda(1,1))
3576 gel_loc_turn3(i+1)=gel_loc_turn3(i+1)
3577 & +0.5d0*(pizda(1,1)+pizda(2,2))
3578 C Cartesian derivatives
3580 c ghalf1=0.5d0*agg(l,1)
3581 c ghalf2=0.5d0*agg(l,2)
3582 c ghalf3=0.5d0*agg(l,3)
3583 c ghalf4=0.5d0*agg(l,4)
3584 a_temp(1,1)=aggi(l,1)!+ghalf1
3585 a_temp(1,2)=aggi(l,2)!+ghalf2
3586 a_temp(2,1)=aggi(l,3)!+ghalf3
3587 a_temp(2,2)=aggi(l,4)!+ghalf4
3588 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
3589 gcorr3_turn(l,i)=gcorr3_turn(l,i)
3590 & +0.5d0*(pizda(1,1)+pizda(2,2))
3591 a_temp(1,1)=aggi1(l,1)!+agg(l,1)
3592 a_temp(1,2)=aggi1(l,2)!+agg(l,2)
3593 a_temp(2,1)=aggi1(l,3)!+agg(l,3)
3594 a_temp(2,2)=aggi1(l,4)!+agg(l,4)
3595 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
3596 gcorr3_turn(l,i+1)=gcorr3_turn(l,i+1)
3597 & +0.5d0*(pizda(1,1)+pizda(2,2))
3598 a_temp(1,1)=aggj(l,1)!+ghalf1
3599 a_temp(1,2)=aggj(l,2)!+ghalf2
3600 a_temp(2,1)=aggj(l,3)!+ghalf3
3601 a_temp(2,2)=aggj(l,4)!+ghalf4
3602 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
3603 gcorr3_turn(l,j)=gcorr3_turn(l,j)
3604 & +0.5d0*(pizda(1,1)+pizda(2,2))
3605 a_temp(1,1)=aggj1(l,1)
3606 a_temp(1,2)=aggj1(l,2)
3607 a_temp(2,1)=aggj1(l,3)
3608 a_temp(2,2)=aggj1(l,4)
3609 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
3610 gcorr3_turn(l,j1)=gcorr3_turn(l,j1)
3611 & +0.5d0*(pizda(1,1)+pizda(2,2))
3615 C-------------------------------------------------------------------------------
3616 subroutine eturn4(i,eello_turn4)
3617 C Third- and fourth-order contributions from turns
3618 implicit real*8 (a-h,o-z)
3619 include 'DIMENSIONS'
3620 include 'COMMON.IOUNITS'
3621 include 'COMMON.GEO'
3622 include 'COMMON.VAR'
3623 include 'COMMON.LOCAL'
3624 include 'COMMON.CHAIN'
3625 include 'COMMON.DERIV'
3626 include 'COMMON.INTERACT'
3627 include 'COMMON.CONTACTS'
3628 include 'COMMON.TORSION'
3629 include 'COMMON.VECTORS'
3630 include 'COMMON.FFIELD'
3631 include 'COMMON.CONTROL'
3633 double precision auxmat(2,2),auxmat1(2,2),auxmat2(2,2),pizda(2,2),
3634 & e1t(2,2),e2t(2,2),e3t(2,2),e1tder(2,2),e2tder(2,2),e3tder(2,2),
3635 & e1a(2,2),ae3(2,2),ae3e2(2,2),auxvec(2),auxvec1(2)
3636 double precision agg(3,4),aggi(3,4),aggi1(3,4),
3637 & aggj(3,4),aggj1(3,4),a_temp(2,2),auxmat3(2,2)
3638 common /locel/ a_temp,agg,aggi,aggi1,aggj,aggj1,a22,a23,a32,a33,
3639 & dxi,dyi,dzi,dx_normi,dy_normi,dz_normi,xmedi,ymedi,zmedi,
3642 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
3644 C Fourth-order contributions
3652 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
3653 cd call checkint_turn4(i,a_temp,eello_turn4_num)
3654 c write (iout,*) "eturn4 i",i," j",j," j1",j1," j2",j2
3659 iti1=itortyp(itype(i+1))
3660 iti2=itortyp(itype(i+2))
3661 iti3=itortyp(itype(i+3))
3662 c write(iout,*) "iti1",iti1," iti2",iti2," iti3",iti3
3663 call transpose2(EUg(1,1,i+1),e1t(1,1))
3664 call transpose2(Eug(1,1,i+2),e2t(1,1))
3665 call transpose2(Eug(1,1,i+3),e3t(1,1))
3666 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
3667 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
3668 s1=scalar2(b1(1,iti2),auxvec(1))
3669 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
3670 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
3671 s2=scalar2(b1(1,iti1),auxvec(1))
3672 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
3673 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
3674 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3675 eello_turn4=eello_turn4-(s1+s2+s3)
3676 if (energy_dec) write (iout,'(a6,2i5,0pf7.3)')
3677 & 'eturn4',i,j,-(s1+s2+s3)
3678 cd write (2,*) 'i,',i,' j',j,'eello_turn4',-(s1+s2+s3),
3679 cd & ' eello_turn4_num',8*eello_turn4_num
3680 C Derivatives in gamma(i)
3681 call transpose2(EUgder(1,1,i+1),e1tder(1,1))
3682 call matmat2(e1tder(1,1),a_temp(1,1),auxmat(1,1))
3683 call matvec2(auxmat(1,1),Ub2(1,i+3),auxvec(1))
3684 s1=scalar2(b1(1,iti2),auxvec(1))
3685 call matmat2(ae3e2(1,1),e1tder(1,1),pizda(1,1))
3686 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3687 gel_loc_turn4(i)=gel_loc_turn4(i)-(s1+s3)
3688 C Derivatives in gamma(i+1)
3689 call transpose2(EUgder(1,1,i+2),e2tder(1,1))
3690 call matvec2(ae3(1,1),Ub2der(1,i+2),auxvec(1))
3691 s2=scalar2(b1(1,iti1),auxvec(1))
3692 call matmat2(ae3(1,1),e2tder(1,1),auxmat(1,1))
3693 call matmat2(auxmat(1,1),e1t(1,1),pizda(1,1))
3694 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3695 gel_loc_turn4(i+1)=gel_loc_turn4(i+1)-(s2+s3)
3696 C Derivatives in gamma(i+2)
3697 call transpose2(EUgder(1,1,i+3),e3tder(1,1))
3698 call matvec2(e1a(1,1),Ub2der(1,i+3),auxvec(1))
3699 s1=scalar2(b1(1,iti2),auxvec(1))
3700 call matmat2(a_temp(1,1),e3tder(1,1),auxmat(1,1))
3701 call matvec2(auxmat(1,1),Ub2(1,i+2),auxvec(1))
3702 s2=scalar2(b1(1,iti1),auxvec(1))
3703 call matmat2(auxmat(1,1),e2t(1,1),auxmat3(1,1))
3704 call matmat2(auxmat3(1,1),e1t(1,1),pizda(1,1))
3705 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3706 gel_loc_turn4(i+2)=gel_loc_turn4(i+2)-(s1+s2+s3)
3707 C Cartesian derivatives
3708 C Derivatives of this turn contributions in DC(i+2)
3709 if (j.lt.nres-1) then
3711 a_temp(1,1)=agg(l,1)
3712 a_temp(1,2)=agg(l,2)
3713 a_temp(2,1)=agg(l,3)
3714 a_temp(2,2)=agg(l,4)
3715 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
3716 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
3717 s1=scalar2(b1(1,iti2),auxvec(1))
3718 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
3719 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
3720 s2=scalar2(b1(1,iti1),auxvec(1))
3721 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
3722 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
3723 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3725 gcorr4_turn(l,i+2)=gcorr4_turn(l,i+2)-(s1+s2+s3)
3728 C Remaining derivatives of this turn contribution
3730 a_temp(1,1)=aggi(l,1)
3731 a_temp(1,2)=aggi(l,2)
3732 a_temp(2,1)=aggi(l,3)
3733 a_temp(2,2)=aggi(l,4)
3734 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
3735 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
3736 s1=scalar2(b1(1,iti2),auxvec(1))
3737 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
3738 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
3739 s2=scalar2(b1(1,iti1),auxvec(1))
3740 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
3741 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
3742 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3743 gcorr4_turn(l,i)=gcorr4_turn(l,i)-(s1+s2+s3)
3744 a_temp(1,1)=aggi1(l,1)
3745 a_temp(1,2)=aggi1(l,2)
3746 a_temp(2,1)=aggi1(l,3)
3747 a_temp(2,2)=aggi1(l,4)
3748 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
3749 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
3750 s1=scalar2(b1(1,iti2),auxvec(1))
3751 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
3752 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
3753 s2=scalar2(b1(1,iti1),auxvec(1))
3754 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
3755 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
3756 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3757 gcorr4_turn(l,i+1)=gcorr4_turn(l,i+1)-(s1+s2+s3)
3758 a_temp(1,1)=aggj(l,1)
3759 a_temp(1,2)=aggj(l,2)
3760 a_temp(2,1)=aggj(l,3)
3761 a_temp(2,2)=aggj(l,4)
3762 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
3763 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
3764 s1=scalar2(b1(1,iti2),auxvec(1))
3765 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
3766 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
3767 s2=scalar2(b1(1,iti1),auxvec(1))
3768 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
3769 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
3770 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3771 gcorr4_turn(l,j)=gcorr4_turn(l,j)-(s1+s2+s3)
3772 a_temp(1,1)=aggj1(l,1)
3773 a_temp(1,2)=aggj1(l,2)
3774 a_temp(2,1)=aggj1(l,3)
3775 a_temp(2,2)=aggj1(l,4)
3776 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
3777 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
3778 s1=scalar2(b1(1,iti2),auxvec(1))
3779 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
3780 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
3781 s2=scalar2(b1(1,iti1),auxvec(1))
3782 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
3783 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
3784 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3785 c write (iout,*) "s1",s1," s2",s2," s3",s3," s1+s2+s3",s1+s2+s3
3786 gcorr4_turn(l,j1)=gcorr4_turn(l,j1)-(s1+s2+s3)
3790 C-----------------------------------------------------------------------------
3791 subroutine vecpr(u,v,w)
3792 implicit real*8(a-h,o-z)
3793 dimension u(3),v(3),w(3)
3794 w(1)=u(2)*v(3)-u(3)*v(2)
3795 w(2)=-u(1)*v(3)+u(3)*v(1)
3796 w(3)=u(1)*v(2)-u(2)*v(1)
3799 C-----------------------------------------------------------------------------
3800 subroutine unormderiv(u,ugrad,unorm,ungrad)
3801 C This subroutine computes the derivatives of a normalized vector u, given
3802 C the derivatives computed without normalization conditions, ugrad. Returns
3805 double precision u(3),ugrad(3,3),unorm,ungrad(3,3)
3806 double precision vec(3)
3807 double precision scalar
3809 c write (2,*) 'ugrad',ugrad
3812 vec(i)=scalar(ugrad(1,i),u(1))
3814 c write (2,*) 'vec',vec
3817 ungrad(j,i)=(ugrad(j,i)-u(j)*vec(i))*unorm
3820 c write (2,*) 'ungrad',ungrad
3823 C-----------------------------------------------------------------------------
3824 subroutine escp_soft_sphere(evdw2,evdw2_14)
3826 C This subroutine calculates the excluded-volume interaction energy between
3827 C peptide-group centers and side chains and its gradient in virtual-bond and
3828 C side-chain vectors.
3830 implicit real*8 (a-h,o-z)
3831 include 'DIMENSIONS'
3832 include 'COMMON.GEO'
3833 include 'COMMON.VAR'
3834 include 'COMMON.LOCAL'
3835 include 'COMMON.CHAIN'
3836 include 'COMMON.DERIV'
3837 include 'COMMON.INTERACT'
3838 include 'COMMON.FFIELD'
3839 include 'COMMON.IOUNITS'
3840 include 'COMMON.CONTROL'
3845 cd print '(a)','Enter ESCP'
3846 cd write (iout,*) 'iatscp_s=',iatscp_s,' iatscp_e=',iatscp_e
3847 do i=iatscp_s,iatscp_e
3848 if (itype(i).eq.21 .or. itype(i+1).eq.21) cycle
3850 xi=0.5D0*(c(1,i)+c(1,i+1))
3851 yi=0.5D0*(c(2,i)+c(2,i+1))
3852 zi=0.5D0*(c(3,i)+c(3,i+1))
3854 do iint=1,nscp_gr(i)
3856 do j=iscpstart(i,iint),iscpend(i,iint)
3857 if (itype(j).eq.21) cycle
3859 C Uncomment following three lines for SC-p interactions
3863 C Uncomment following three lines for Ca-p interactions
3867 rij=xj*xj+yj*yj+zj*zj
3870 if (rij.lt.r0ijsq) then
3871 evdwij=0.25d0*(rij-r0ijsq)**2
3879 C Calculate contributions to the gradient in the virtual-bond and SC vectors.
3884 cgrad if (j.lt.i) then
3885 cd write (iout,*) 'j<i'
3886 C Uncomment following three lines for SC-p interactions
3888 c gradx_scp(k,j)=gradx_scp(k,j)+ggg(k)
3891 cd write (iout,*) 'j>i'
3893 cgrad ggg(k)=-ggg(k)
3894 C Uncomment following line for SC-p interactions
3895 c gradx_scp(k,j)=gradx_scp(k,j)-ggg(k)
3899 cgrad gvdwc_scp(k,i)=gvdwc_scp(k,i)-0.5D0*ggg(k)
3901 cgrad kstart=min0(i+1,j)
3902 cgrad kend=max0(i-1,j-1)
3903 cd write (iout,*) 'i=',i,' j=',j,' kstart=',kstart,' kend=',kend
3904 cd write (iout,*) ggg(1),ggg(2),ggg(3)
3905 cgrad do k=kstart,kend
3907 cgrad gvdwc_scp(l,k)=gvdwc_scp(l,k)-ggg(l)
3911 gvdwc_scpp(k,i)=gvdwc_scpp(k,i)-ggg(k)
3912 gvdwc_scp(k,j)=gvdwc_scp(k,j)+ggg(k)
3920 C-----------------------------------------------------------------------------
3921 subroutine escp(evdw2,evdw2_14)
3923 C This subroutine calculates the excluded-volume interaction energy between
3924 C peptide-group centers and side chains and its gradient in virtual-bond and
3925 C side-chain vectors.
3927 implicit real*8 (a-h,o-z)
3928 include 'DIMENSIONS'
3929 include 'COMMON.GEO'
3930 include 'COMMON.VAR'
3931 include 'COMMON.LOCAL'
3932 include 'COMMON.CHAIN'
3933 include 'COMMON.DERIV'
3934 include 'COMMON.INTERACT'
3935 include 'COMMON.FFIELD'
3936 include 'COMMON.IOUNITS'
3937 include 'COMMON.CONTROL'
3941 cd print '(a)','Enter ESCP'
3942 cd write (iout,*) 'iatscp_s=',iatscp_s,' iatscp_e=',iatscp_e
3943 do i=iatscp_s,iatscp_e
3944 if (itype(i).eq.21 .or. itype(i+1).eq.21) cycle
3946 xi=0.5D0*(c(1,i)+c(1,i+1))
3947 yi=0.5D0*(c(2,i)+c(2,i+1))
3948 zi=0.5D0*(c(3,i)+c(3,i+1))
3950 do iint=1,nscp_gr(i)
3952 do j=iscpstart(i,iint),iscpend(i,iint)
3954 if (itypj.eq.21) cycle
3955 C Uncomment following three lines for SC-p interactions
3959 C Uncomment following three lines for Ca-p interactions
3963 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
3965 e1=fac*fac*aad(itypj,iteli)
3966 e2=fac*bad(itypj,iteli)
3967 if (iabs(j-i) .le. 2) then
3970 evdw2_14=evdw2_14+e1+e2
3974 if (energy_dec) write (iout,'(a6,2i5,0pf7.3)')
3975 & 'evdw2',i,j,evdwij
3977 C Calculate contributions to the gradient in the virtual-bond and SC vectors.
3979 fac=-(evdwij+e1)*rrij
3983 cgrad if (j.lt.i) then
3984 cd write (iout,*) 'j<i'
3985 C Uncomment following three lines for SC-p interactions
3987 c gradx_scp(k,j)=gradx_scp(k,j)+ggg(k)
3990 cd write (iout,*) 'j>i'
3992 cgrad ggg(k)=-ggg(k)
3993 C Uncomment following line for SC-p interactions
3994 ccgrad gradx_scp(k,j)=gradx_scp(k,j)-ggg(k)
3995 c gradx_scp(k,j)=gradx_scp(k,j)+ggg(k)
3999 cgrad gvdwc_scp(k,i)=gvdwc_scp(k,i)-0.5D0*ggg(k)
4001 cgrad kstart=min0(i+1,j)
4002 cgrad kend=max0(i-1,j-1)
4003 cd write (iout,*) 'i=',i,' j=',j,' kstart=',kstart,' kend=',kend
4004 cd write (iout,*) ggg(1),ggg(2),ggg(3)
4005 cgrad do k=kstart,kend
4007 cgrad gvdwc_scp(l,k)=gvdwc_scp(l,k)-ggg(l)
4011 gvdwc_scpp(k,i)=gvdwc_scpp(k,i)-ggg(k)
4012 gvdwc_scp(k,j)=gvdwc_scp(k,j)+ggg(k)
4020 gvdwc_scp(j,i)=expon*gvdwc_scp(j,i)
4021 gvdwc_scpp(j,i)=expon*gvdwc_scpp(j,i)
4022 gradx_scp(j,i)=expon*gradx_scp(j,i)
4025 C******************************************************************************
4029 C To save time the factor EXPON has been extracted from ALL components
4030 C of GVDWC and GRADX. Remember to multiply them by this factor before further
4033 C******************************************************************************
4036 C--------------------------------------------------------------------------
4037 subroutine edis(ehpb)
4039 C Evaluate bridge-strain energy and its gradient in virtual-bond and SC vectors.
4041 implicit real*8 (a-h,o-z)
4042 include 'DIMENSIONS'
4043 include 'COMMON.SBRIDGE'
4044 include 'COMMON.CHAIN'
4045 include 'COMMON.DERIV'
4046 include 'COMMON.VAR'
4047 include 'COMMON.INTERACT'
4048 include 'COMMON.IOUNITS'
4051 cd write(iout,*)'edis: nhpb=',nhpb,' fbr=',fbr
4052 cd write(iout,*)'link_start=',link_start,' link_end=',link_end
4053 if (link_end.eq.0) return
4054 do i=link_start,link_end
4055 C If ihpb(i) and jhpb(i) > NRES, this is a SC-SC distance, otherwise a
4056 C CA-CA distance used in regularization of structure.
4059 C iii and jjj point to the residues for which the distance is assigned.
4060 if (ii.gt.nres) then
4067 c write (iout,*) "i",i," ii",ii," iii",iii," jj",jj," jjj",jjj,
4068 c & dhpb(i),dhpb1(i),forcon(i)
4069 C 24/11/03 AL: SS bridges handled separately because of introducing a specific
4070 C distance and angle dependent SS bond potential.
4071 cmc if (ii.gt.nres .and. itype(iii).eq.1 .and. itype(jjj).eq.1) then
4072 C 18/07/06 MC: Use the convention that the first nss pairs are SS bonds
4073 if (.not.dyn_ss .and. i.le.nss) then
4074 C 15/02/13 CC dynamic SSbond - additional check
4076 & .and. itype(iii).eq.1 .and. itype(jjj).eq.1) then
4077 call ssbond_ene(iii,jjj,eij)
4080 cd write (iout,*) "eij",eij
4082 C Calculate the distance between the two points and its difference from the
4086 C Get the force constant corresponding to this distance.
4088 C Calculate the contribution to energy.
4089 ehpb=ehpb+waga*rdis*rdis
4091 C Evaluate gradient.
4094 cd print *,'i=',i,' ii=',ii,' jj=',jj,' dhpb=',dhpb(i),' dd=',dd,
4095 cd & ' waga=',waga,' fac=',fac
4097 ggg(j)=fac*(c(j,jj)-c(j,ii))
4099 cd print '(i3,3(1pe14.5))',i,(ggg(j),j=1,3)
4100 C If this is a SC-SC distance, we need to calculate the contributions to the
4101 C Cartesian gradient in the SC vectors (ghpbx).
4104 ghpbx(j,iii)=ghpbx(j,iii)-ggg(j)
4105 ghpbx(j,jjj)=ghpbx(j,jjj)+ggg(j)
4108 cgrad do j=iii,jjj-1
4110 cgrad ghpbc(k,j)=ghpbc(k,j)+ggg(k)
4114 ghpbc(k,jjj)=ghpbc(k,jjj)+ggg(k)
4115 ghpbc(k,iii)=ghpbc(k,iii)-ggg(k)
4122 C--------------------------------------------------------------------------
4123 subroutine ssbond_ene(i,j,eij)
4125 C Calculate the distance and angle dependent SS-bond potential energy
4126 C using a free-energy function derived based on RHF/6-31G** ab initio
4127 C calculations of diethyl disulfide.
4129 C A. Liwo and U. Kozlowska, 11/24/03
4131 implicit real*8 (a-h,o-z)
4132 include 'DIMENSIONS'
4133 include 'COMMON.SBRIDGE'
4134 include 'COMMON.CHAIN'
4135 include 'COMMON.DERIV'
4136 include 'COMMON.LOCAL'
4137 include 'COMMON.INTERACT'
4138 include 'COMMON.VAR'
4139 include 'COMMON.IOUNITS'
4140 double precision erij(3),dcosom1(3),dcosom2(3),gg(3)
4145 dxi=dc_norm(1,nres+i)
4146 dyi=dc_norm(2,nres+i)
4147 dzi=dc_norm(3,nres+i)
4148 c dsci_inv=dsc_inv(itypi)
4149 dsci_inv=vbld_inv(nres+i)
4151 c dscj_inv=dsc_inv(itypj)
4152 dscj_inv=vbld_inv(nres+j)
4156 dxj=dc_norm(1,nres+j)
4157 dyj=dc_norm(2,nres+j)
4158 dzj=dc_norm(3,nres+j)
4159 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
4164 om1=dxi*erij(1)+dyi*erij(2)+dzi*erij(3)
4165 om2=dxj*erij(1)+dyj*erij(2)+dzj*erij(3)
4166 om12=dxi*dxj+dyi*dyj+dzi*dzj
4168 dcosom1(k)=rij*(dc_norm(k,nres+i)-om1*erij(k))
4169 dcosom2(k)=rij*(dc_norm(k,nres+j)-om2*erij(k))
4175 deltat12=om2-om1+2.0d0
4177 eij=akcm*deltad*deltad+akth*(deltat1*deltat1+deltat2*deltat2)
4178 & +akct*deltad*deltat12
4179 & +v1ss*cosphi+v2ss*cosphi*cosphi+v3ss*cosphi*cosphi*cosphi+ebr
4180 c write(iout,*) i,j,"rij",rij,"d0cm",d0cm," akcm",akcm," akth",akth,
4181 c & " akct",akct," deltad",deltad," deltat",deltat1,deltat2,
4182 c & " deltat12",deltat12," eij",eij
4183 ed=2*akcm*deltad+akct*deltat12
4185 pom2=v1ss+2*v2ss*cosphi+3*v3ss*cosphi*cosphi
4186 eom1=-2*akth*deltat1-pom1-om2*pom2
4187 eom2= 2*akth*deltat2+pom1-om1*pom2
4190 ggk=ed*erij(k)+eom1*dcosom1(k)+eom2*dcosom2(k)
4191 ghpbx(k,i)=ghpbx(k,i)-ggk
4192 & +(eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,nres+i))
4193 & +eom1*(erij(k)-om1*dc_norm(k,nres+i)))*dsci_inv
4194 ghpbx(k,j)=ghpbx(k,j)+ggk
4195 & +(eom12*(dc_norm(k,nres+i)-om12*dc_norm(k,nres+j))
4196 & +eom2*(erij(k)-om2*dc_norm(k,nres+j)))*dscj_inv
4197 ghpbc(k,i)=ghpbc(k,i)-ggk
4198 ghpbc(k,j)=ghpbc(k,j)+ggk
4201 C Calculate the components of the gradient in DC and X
4205 cgrad ghpbc(l,k)=ghpbc(l,k)+gg(l)
4210 C--------------------------------------------------------------------------
4211 subroutine ebond(estr)
4213 c Evaluate the energy of stretching of the CA-CA and CA-SC virtual bonds
4215 implicit real*8 (a-h,o-z)
4216 include 'DIMENSIONS'
4217 include 'COMMON.LOCAL'
4218 include 'COMMON.GEO'
4219 include 'COMMON.INTERACT'
4220 include 'COMMON.DERIV'
4221 include 'COMMON.VAR'
4222 include 'COMMON.CHAIN'
4223 include 'COMMON.IOUNITS'
4224 include 'COMMON.NAMES'
4225 include 'COMMON.FFIELD'
4226 include 'COMMON.CONTROL'
4227 include 'COMMON.SETUP'
4228 double precision u(3),ud(3)
4231 do i=ibondp_start,ibondp_end
4232 if (itype(i-1).eq.21 .or. itype(i).eq.21) then
4233 estr1=estr1+gnmr1(vbld(i),-1.0d0,distchainmax)
4235 gradb(j,i-1)=gnmr1prim(vbld(i),-1.0d0,distchainmax)
4236 & *dc(j,i-1)/vbld(i)
4238 if (energy_dec) write(iout,*)
4239 & "estr1",i,gnmr1(vbld(i),-1.0d0,distchainmax)
4241 diff = vbld(i)-vbldp0
4242 if (energy_dec) write (iout,*)
4243 & "estr bb",i,vbld(i),vbldp0,diff,AKP*diff*diff
4246 gradb(j,i-1)=AKP*diff*dc(j,i-1)/vbld(i)
4248 c write (iout,'(i5,3f10.5)') i,(gradb(j,i-1),j=1,3)
4251 estr=0.5d0*AKP*estr+estr1
4253 c 09/18/07 AL: multimodal bond potential based on AM1 CA-SC PMF's included
4255 do i=ibond_start,ibond_end
4257 if (iti.ne.10 .and. iti.ne.21) then
4260 diff=vbld(i+nres)-vbldsc0(1,iti)
4261 if (energy_dec) write (iout,*)
4262 & "estr sc",i,iti,vbld(i+nres),vbldsc0(1,iti),diff,
4263 & AKSC(1,iti),AKSC(1,iti)*diff*diff
4264 estr=estr+0.5d0*AKSC(1,iti)*diff*diff
4266 gradbx(j,i)=AKSC(1,iti)*diff*dc(j,i+nres)/vbld(i+nres)
4270 diff=vbld(i+nres)-vbldsc0(j,iti)
4271 ud(j)=aksc(j,iti)*diff
4272 u(j)=abond0(j,iti)+0.5d0*ud(j)*diff
4286 uprod2=uprod2*u(k)*u(k)
4290 usumsqder=usumsqder+ud(j)*uprod2
4292 estr=estr+uprod/usum
4294 gradbx(j,i)=usumsqder/(usum*usum)*dc(j,i+nres)/vbld(i+nres)
4302 C--------------------------------------------------------------------------
4303 subroutine ebend(etheta)
4305 C Evaluate the virtual-bond-angle energy given the virtual-bond dihedral
4306 C angles gamma and its derivatives in consecutive thetas and gammas.
4308 implicit real*8 (a-h,o-z)
4309 include 'DIMENSIONS'
4310 include 'COMMON.LOCAL'
4311 include 'COMMON.GEO'
4312 include 'COMMON.INTERACT'
4313 include 'COMMON.DERIV'
4314 include 'COMMON.VAR'
4315 include 'COMMON.CHAIN'
4316 include 'COMMON.IOUNITS'
4317 include 'COMMON.NAMES'
4318 include 'COMMON.FFIELD'
4319 include 'COMMON.CONTROL'
4320 common /calcthet/ term1,term2,termm,diffak,ratak,
4321 & ak,aktc,termpre,termexp,sigc,sig0i,time11,time12,sigcsq,
4322 & delthe0,sig0inv,sigtc,sigsqtc,delthec,it
4323 double precision y(2),z(2)
4325 c time11=dexp(-2*time)
4328 c write (*,'(a,i2)') 'EBEND ICG=',icg
4329 do i=ithet_start,ithet_end
4330 if (itype(i-1).eq.21) cycle
4331 C Zero the energy function and its derivative at 0 or pi.
4332 call splinthet(theta(i),0.5d0*delta,ss,ssd)
4334 if (i.gt.3 .and. itype(i-2).ne.21) then
4337 if (phii.ne.phii) phii=150.0
4347 if (i.lt.nres .and. itype(i).ne.21) then
4350 if (phii1.ne.phii1) phii1=150.0
4362 C Calculate the "mean" value of theta from the part of the distribution
4363 C dependent on the adjacent virtual-bond-valence angles (gamma1 & gamma2).
4364 C In following comments this theta will be referred to as t_c.
4365 thet_pred_mean=0.0d0
4369 thet_pred_mean=thet_pred_mean+athetk*y(k)+bthetk*z(k)
4371 dthett=thet_pred_mean*ssd
4372 thet_pred_mean=thet_pred_mean*ss+a0thet(it)
4373 C Derivatives of the "mean" values in gamma1 and gamma2.
4374 dthetg1=(-athet(1,it)*y(2)+athet(2,it)*y(1))*ss
4375 dthetg2=(-bthet(1,it)*z(2)+bthet(2,it)*z(1))*ss
4376 if (theta(i).gt.pi-delta) then
4377 call theteng(pi-delta,thet_pred_mean,theta0(it),f0,fprim0,
4379 call mixder(pi-delta,thet_pred_mean,theta0(it),fprim_tc0)
4380 call theteng(pi,thet_pred_mean,theta0(it),f1,fprim1,E_tc1)
4381 call spline1(theta(i),pi-delta,delta,f0,f1,fprim0,ethetai,
4383 call spline2(theta(i),pi-delta,delta,E_tc0,E_tc1,fprim_tc0,
4385 else if (theta(i).lt.delta) then
4386 call theteng(delta,thet_pred_mean,theta0(it),f0,fprim0,E_tc0)
4387 call theteng(0.0d0,thet_pred_mean,theta0(it),f1,fprim1,E_tc1)
4388 call spline1(theta(i),delta,-delta,f0,f1,fprim0,ethetai,
4390 call mixder(delta,thet_pred_mean,theta0(it),fprim_tc0)
4391 call spline2(theta(i),delta,-delta,E_tc0,E_tc1,fprim_tc0,
4394 call theteng(theta(i),thet_pred_mean,theta0(it),ethetai,
4397 etheta=etheta+ethetai
4398 if (energy_dec) write (iout,'(a6,i5,0pf7.3)')
4400 if (i.gt.3) gloc(i-3,icg)=gloc(i-3,icg)+wang*E_tc*dthetg1
4401 if (i.lt.nres) gloc(i-2,icg)=gloc(i-2,icg)+wang*E_tc*dthetg2
4402 gloc(nphi+i-2,icg)=wang*(E_theta+E_tc*dthett)
4404 C Ufff.... We've done all this!!!
4407 C---------------------------------------------------------------------------
4408 subroutine theteng(thetai,thet_pred_mean,theta0i,ethetai,E_theta,
4410 implicit real*8 (a-h,o-z)
4411 include 'DIMENSIONS'
4412 include 'COMMON.LOCAL'
4413 include 'COMMON.IOUNITS'
4414 common /calcthet/ term1,term2,termm,diffak,ratak,
4415 & ak,aktc,termpre,termexp,sigc,sig0i,time11,time12,sigcsq,
4416 & delthe0,sig0inv,sigtc,sigsqtc,delthec,it
4417 C Calculate the contributions to both Gaussian lobes.
4418 C 6/6/97 - Deform the Gaussians using the factor of 1/(1+time)
4419 C The "polynomial part" of the "standard deviation" of this part of
4423 sig=sig*thet_pred_mean+polthet(j,it)
4425 C Derivative of the "interior part" of the "standard deviation of the"
4426 C gamma-dependent Gaussian lobe in t_c.
4427 sigtc=3*polthet(3,it)
4429 sigtc=sigtc*thet_pred_mean+j*polthet(j,it)
4432 C Set the parameters of both Gaussian lobes of the distribution.
4433 C "Standard deviation" of the gamma-dependent Gaussian lobe (sigtc)
4434 fac=sig*sig+sigc0(it)
4437 C Following variable (sigsqtc) is -(1/2)d[sigma(t_c)**(-2))]/dt_c
4438 sigsqtc=-4.0D0*sigcsq*sigtc
4439 c print *,i,sig,sigtc,sigsqtc
4440 C Following variable (sigtc) is d[sigma(t_c)]/dt_c
4441 sigtc=-sigtc/(fac*fac)
4442 C Following variable is sigma(t_c)**(-2)
4443 sigcsq=sigcsq*sigcsq
4445 sig0inv=1.0D0/sig0i**2
4446 delthec=thetai-thet_pred_mean
4447 delthe0=thetai-theta0i
4448 term1=-0.5D0*sigcsq*delthec*delthec
4449 term2=-0.5D0*sig0inv*delthe0*delthe0
4450 C Following fuzzy logic is to avoid underflows in dexp and subsequent INFs and
4451 C NaNs in taking the logarithm. We extract the largest exponent which is added
4452 C to the energy (this being the log of the distribution) at the end of energy
4453 C term evaluation for this virtual-bond angle.
4454 if (term1.gt.term2) then
4456 term2=dexp(term2-termm)
4460 term1=dexp(term1-termm)
4463 C The ratio between the gamma-independent and gamma-dependent lobes of
4464 C the distribution is a Gaussian function of thet_pred_mean too.
4465 diffak=gthet(2,it)-thet_pred_mean
4466 ratak=diffak/gthet(3,it)**2
4467 ak=dexp(gthet(1,it)-0.5D0*diffak*ratak)
4468 C Let's differentiate it in thet_pred_mean NOW.
4470 C Now put together the distribution terms to make complete distribution.
4471 termexp=term1+ak*term2
4472 termpre=sigc+ak*sig0i
4473 C Contribution of the bending energy from this theta is just the -log of
4474 C the sum of the contributions from the two lobes and the pre-exponential
4475 C factor. Simple enough, isn't it?
4476 ethetai=(-dlog(termexp)-termm+dlog(termpre))
4477 C NOW the derivatives!!!
4478 C 6/6/97 Take into account the deformation.
4479 E_theta=(delthec*sigcsq*term1
4480 & +ak*delthe0*sig0inv*term2)/termexp
4481 E_tc=((sigtc+aktc*sig0i)/termpre
4482 & -((delthec*sigcsq+delthec*delthec*sigsqtc)*term1+
4483 & aktc*term2)/termexp)
4486 c-----------------------------------------------------------------------------
4487 subroutine mixder(thetai,thet_pred_mean,theta0i,E_tc_t)
4488 implicit real*8 (a-h,o-z)
4489 include 'DIMENSIONS'
4490 include 'COMMON.LOCAL'
4491 include 'COMMON.IOUNITS'
4492 common /calcthet/ term1,term2,termm,diffak,ratak,
4493 & ak,aktc,termpre,termexp,sigc,sig0i,time11,time12,sigcsq,
4494 & delthe0,sig0inv,sigtc,sigsqtc,delthec,it
4495 delthec=thetai-thet_pred_mean
4496 delthe0=thetai-theta0i
4497 C "Thank you" to MAPLE (probably spared one day of hand-differentiation).
4498 t3 = thetai-thet_pred_mean
4502 t14 = t12+t6*sigsqtc
4504 t21 = thetai-theta0i
4510 E_tc_t = -((sigcsq+2.D0*t3*sigsqtc)*t9-t14*sigcsq*t3*t16*t9
4511 & -aktc*sig0inv*t27)/t32+(t14*t9+aktc*t26)/t40
4512 & *(-t12*t9-ak*sig0inv*t27)
4516 C--------------------------------------------------------------------------
4517 subroutine ebend(etheta)
4519 C Evaluate the virtual-bond-angle energy given the virtual-bond dihedral
4520 C angles gamma and its derivatives in consecutive thetas and gammas.
4521 C ab initio-derived potentials from
4522 c Kozlowska et al., J. Phys.: Condens. Matter 19 (2007) 285203
4524 implicit real*8 (a-h,o-z)
4525 include 'DIMENSIONS'
4526 include 'COMMON.LOCAL'
4527 include 'COMMON.GEO'
4528 include 'COMMON.INTERACT'
4529 include 'COMMON.DERIV'
4530 include 'COMMON.VAR'
4531 include 'COMMON.CHAIN'
4532 include 'COMMON.IOUNITS'
4533 include 'COMMON.NAMES'
4534 include 'COMMON.FFIELD'
4535 include 'COMMON.CONTROL'
4536 double precision coskt(mmaxtheterm),sinkt(mmaxtheterm),
4537 & cosph1(maxsingle),sinph1(maxsingle),cosph2(maxsingle),
4538 & sinph2(maxsingle),cosph1ph2(maxdouble,maxdouble),
4539 & sinph1ph2(maxdouble,maxdouble)
4540 logical lprn /.false./, lprn1 /.false./
4542 do i=ithet_start,ithet_end
4543 if (itype(i-1).eq.21) cycle
4547 theti2=0.5d0*theta(i)
4548 ityp2=ithetyp(itype(i-1))
4550 coskt(k)=dcos(k*theti2)
4551 sinkt(k)=dsin(k*theti2)
4553 if (i.gt.3 .and. itype(i-2).ne.21) then
4556 if (phii.ne.phii) phii=150.0
4560 ityp1=ithetyp(itype(i-2))
4562 cosph1(k)=dcos(k*phii)
4563 sinph1(k)=dsin(k*phii)
4573 if (i.lt.nres .and. itype(i).ne.21) then
4576 if (phii1.ne.phii1) phii1=150.0
4581 ityp3=ithetyp(itype(i))
4583 cosph2(k)=dcos(k*phii1)
4584 sinph2(k)=dsin(k*phii1)
4594 ethetai=aa0thet(ityp1,ityp2,ityp3)
4597 ccl=cosph1(l)*cosph2(k-l)
4598 ssl=sinph1(l)*sinph2(k-l)
4599 scl=sinph1(l)*cosph2(k-l)
4600 csl=cosph1(l)*sinph2(k-l)
4601 cosph1ph2(l,k)=ccl-ssl
4602 cosph1ph2(k,l)=ccl+ssl
4603 sinph1ph2(l,k)=scl+csl
4604 sinph1ph2(k,l)=scl-csl
4608 write (iout,*) "i",i," ityp1",ityp1," ityp2",ityp2,
4609 & " ityp3",ityp3," theti2",theti2," phii",phii," phii1",phii1
4610 write (iout,*) "coskt and sinkt"
4612 write (iout,*) k,coskt(k),sinkt(k)
4616 ethetai=ethetai+aathet(k,ityp1,ityp2,ityp3)*sinkt(k)
4617 dethetai=dethetai+0.5d0*k*aathet(k,ityp1,ityp2,ityp3)
4620 & write (iout,*) "k",k," aathet",aathet(k,ityp1,ityp2,ityp3),
4621 & " ethetai",ethetai
4624 write (iout,*) "cosph and sinph"
4626 write (iout,*) k,cosph1(k),sinph1(k),cosph2(k),sinph2(k)
4628 write (iout,*) "cosph1ph2 and sinph2ph2"
4631 write (iout,*) l,k,cosph1ph2(l,k),cosph1ph2(k,l),
4632 & sinph1ph2(l,k),sinph1ph2(k,l)
4635 write(iout,*) "ethetai",ethetai
4639 aux=bbthet(k,m,ityp1,ityp2,ityp3)*cosph1(k)
4640 & +ccthet(k,m,ityp1,ityp2,ityp3)*sinph1(k)
4641 & +ddthet(k,m,ityp1,ityp2,ityp3)*cosph2(k)
4642 & +eethet(k,m,ityp1,ityp2,ityp3)*sinph2(k)
4643 ethetai=ethetai+sinkt(m)*aux
4644 dethetai=dethetai+0.5d0*m*aux*coskt(m)
4645 dephii=dephii+k*sinkt(m)*(
4646 & ccthet(k,m,ityp1,ityp2,ityp3)*cosph1(k)-
4647 & bbthet(k,m,ityp1,ityp2,ityp3)*sinph1(k))
4648 dephii1=dephii1+k*sinkt(m)*(
4649 & eethet(k,m,ityp1,ityp2,ityp3)*cosph2(k)-
4650 & ddthet(k,m,ityp1,ityp2,ityp3)*sinph2(k))
4652 & write (iout,*) "m",m," k",k," bbthet",
4653 & bbthet(k,m,ityp1,ityp2,ityp3)," ccthet",
4654 & ccthet(k,m,ityp1,ityp2,ityp3)," ddthet",
4655 & ddthet(k,m,ityp1,ityp2,ityp3)," eethet",
4656 & eethet(k,m,ityp1,ityp2,ityp3)," ethetai",ethetai
4660 & write(iout,*) "ethetai",ethetai
4664 aux=ffthet(l,k,m,ityp1,ityp2,ityp3)*cosph1ph2(l,k)+
4665 & ffthet(k,l,m,ityp1,ityp2,ityp3)*cosph1ph2(k,l)+
4666 & ggthet(l,k,m,ityp1,ityp2,ityp3)*sinph1ph2(l,k)+
4667 & ggthet(k,l,m,ityp1,ityp2,ityp3)*sinph1ph2(k,l)
4668 ethetai=ethetai+sinkt(m)*aux
4669 dethetai=dethetai+0.5d0*m*coskt(m)*aux
4670 dephii=dephii+l*sinkt(m)*(
4671 & -ffthet(l,k,m,ityp1,ityp2,ityp3)*sinph1ph2(l,k)-
4672 & ffthet(k,l,m,ityp1,ityp2,ityp3)*sinph1ph2(k,l)+
4673 & ggthet(l,k,m,ityp1,ityp2,ityp3)*cosph1ph2(l,k)+
4674 & ggthet(k,l,m,ityp1,ityp2,ityp3)*cosph1ph2(k,l))
4675 dephii1=dephii1+(k-l)*sinkt(m)*(
4676 & -ffthet(l,k,m,ityp1,ityp2,ityp3)*sinph1ph2(l,k)+
4677 & ffthet(k,l,m,ityp1,ityp2,ityp3)*sinph1ph2(k,l)+
4678 & ggthet(l,k,m,ityp1,ityp2,ityp3)*cosph1ph2(l,k)-
4679 & ggthet(k,l,m,ityp1,ityp2,ityp3)*cosph1ph2(k,l))
4681 write (iout,*) "m",m," k",k," l",l," ffthet",
4682 & ffthet(l,k,m,ityp1,ityp2,ityp3),
4683 & ffthet(k,l,m,ityp1,ityp2,ityp3)," ggthet",
4684 & ggthet(l,k,m,ityp1,ityp2,ityp3),
4685 & ggthet(k,l,m,ityp1,ityp2,ityp3)," ethetai",ethetai
4686 write (iout,*) cosph1ph2(l,k)*sinkt(m),
4687 & cosph1ph2(k,l)*sinkt(m),
4688 & sinph1ph2(l,k)*sinkt(m),sinph1ph2(k,l)*sinkt(m)
4694 if (lprn1) write (iout,'(i2,3f8.1,9h ethetai ,f10.5)')
4695 & i,theta(i)*rad2deg,phii*rad2deg,
4696 & phii1*rad2deg,ethetai
4697 etheta=etheta+ethetai
4698 if (i.gt.3) gloc(i-3,icg)=gloc(i-3,icg)+wang*dephii
4699 if (i.lt.nres) gloc(i-2,icg)=gloc(i-2,icg)+wang*dephii1
4700 gloc(nphi+i-2,icg)=wang*dethetai
4706 c-----------------------------------------------------------------------------
4707 subroutine esc(escloc)
4708 C Calculate the local energy of a side chain and its derivatives in the
4709 C corresponding virtual-bond valence angles THETA and the spherical angles
4711 implicit real*8 (a-h,o-z)
4712 include 'DIMENSIONS'
4713 include 'COMMON.GEO'
4714 include 'COMMON.LOCAL'
4715 include 'COMMON.VAR'
4716 include 'COMMON.INTERACT'
4717 include 'COMMON.DERIV'
4718 include 'COMMON.CHAIN'
4719 include 'COMMON.IOUNITS'
4720 include 'COMMON.NAMES'
4721 include 'COMMON.FFIELD'
4722 include 'COMMON.CONTROL'
4723 double precision x(3),dersc(3),xemp(3),dersc0(3),dersc1(3),
4724 & ddersc0(3),ddummy(3),xtemp(3),temp(3)
4725 common /sccalc/ time11,time12,time112,theti,it,nlobit
4728 c write (iout,'(a)') 'ESC'
4729 do i=loc_start,loc_end
4732 if (it.eq.10) goto 1
4734 c print *,'i=',i,' it=',it,' nlobit=',nlobit
4735 c write (iout,*) 'i=',i,' ssa=',ssa,' ssad=',ssad
4736 theti=theta(i+1)-pipol
4741 if (x(2).gt.pi-delta) then
4745 call enesc(xtemp,escloci0,dersc0,ddersc0,.true.)
4747 call enesc(xtemp,escloci1,dersc1,ddummy,.false.)
4748 call spline1(x(2),pi-delta,delta,escloci0,escloci1,dersc0(2),
4750 call spline2(x(2),pi-delta,delta,dersc0(1),dersc1(1),
4751 & ddersc0(1),dersc(1))
4752 call spline2(x(2),pi-delta,delta,dersc0(3),dersc1(3),
4753 & ddersc0(3),dersc(3))
4755 call enesc_bound(xtemp,esclocbi0,dersc0,dersc12,.true.)
4757 call enesc_bound(xtemp,esclocbi1,dersc1,chuju,.false.)
4758 call spline1(x(2),pi-delta,delta,esclocbi0,esclocbi1,
4759 & dersc0(2),esclocbi,dersc02)
4760 call spline2(x(2),pi-delta,delta,dersc0(1),dersc1(1),
4762 call splinthet(x(2),0.5d0*delta,ss,ssd)
4767 dersc(k)=ss*dersc(k)+(1.0d0-ss)*dersc0(k)
4769 dersc(2)=dersc(2)+ssd*(escloci-esclocbi)
4770 c write (iout,*) 'i=',i,x(2)*rad2deg,escloci0,escloci,
4772 escloci=ss*escloci+(1.0d0-ss)*esclocbi
4774 c write (iout,*) escloci
4775 else if (x(2).lt.delta) then
4779 call enesc(xtemp,escloci0,dersc0,ddersc0,.true.)
4781 call enesc(xtemp,escloci1,dersc1,ddummy,.false.)
4782 call spline1(x(2),delta,-delta,escloci0,escloci1,dersc0(2),
4784 call spline2(x(2),delta,-delta,dersc0(1),dersc1(1),
4785 & ddersc0(1),dersc(1))
4786 call spline2(x(2),delta,-delta,dersc0(3),dersc1(3),
4787 & ddersc0(3),dersc(3))
4789 call enesc_bound(xtemp,esclocbi0,dersc0,dersc12,.true.)
4791 call enesc_bound(xtemp,esclocbi1,dersc1,chuju,.false.)
4792 call spline1(x(2),delta,-delta,esclocbi0,esclocbi1,
4793 & dersc0(2),esclocbi,dersc02)
4794 call spline2(x(2),delta,-delta,dersc0(1),dersc1(1),
4799 call splinthet(x(2),0.5d0*delta,ss,ssd)
4801 dersc(k)=ss*dersc(k)+(1.0d0-ss)*dersc0(k)
4803 dersc(2)=dersc(2)+ssd*(escloci-esclocbi)
4804 c write (iout,*) 'i=',i,x(2)*rad2deg,escloci0,escloci,
4806 escloci=ss*escloci+(1.0d0-ss)*esclocbi
4807 c write (iout,*) escloci
4809 call enesc(x,escloci,dersc,ddummy,.false.)
4812 escloc=escloc+escloci
4813 if (energy_dec) write (iout,'(a6,i5,0pf7.3)')
4814 & 'escloc',i,escloci
4815 c write (iout,*) 'i=',i,' escloci=',escloci,' dersc=',dersc
4817 gloc(nphi+i-1,icg)=gloc(nphi+i-1,icg)+
4819 gloc(ialph(i,1),icg)=wscloc*dersc(2)
4820 gloc(ialph(i,1)+nside,icg)=wscloc*dersc(3)
4825 C---------------------------------------------------------------------------
4826 subroutine enesc(x,escloci,dersc,ddersc,mixed)
4827 implicit real*8 (a-h,o-z)
4828 include 'DIMENSIONS'
4829 include 'COMMON.GEO'
4830 include 'COMMON.LOCAL'
4831 include 'COMMON.IOUNITS'
4832 common /sccalc/ time11,time12,time112,theti,it,nlobit
4833 double precision x(3),z(3),Ax(3,maxlob,-1:1),dersc(3),ddersc(3)
4834 double precision contr(maxlob,-1:1)
4836 c write (iout,*) 'it=',it,' nlobit=',nlobit
4840 if (mixed) ddersc(j)=0.0d0
4844 C Because of periodicity of the dependence of the SC energy in omega we have
4845 C to add up the contributions from x(3)-2*pi, x(3), and x(3+2*pi).
4846 C To avoid underflows, first compute & store the exponents.
4854 z(k)=x(k)-censc(k,j,it)
4859 Axk=Axk+gaussc(l,k,j,it)*z(l)
4865 expfac=expfac+Ax(k,j,iii)*z(k)
4873 C As in the case of ebend, we want to avoid underflows in exponentiation and
4874 C subsequent NaNs and INFs in energy calculation.
4875 C Find the largest exponent
4879 if (emin.gt.contr(j,iii)) emin=contr(j,iii)
4883 cd print *,'it=',it,' emin=',emin
4885 C Compute the contribution to SC energy and derivatives
4890 adexp=bsc(j,it)-0.5D0*contr(j,iii)+emin
4891 if(adexp.ne.adexp) adexp=1.0
4894 expfac=dexp(bsc(j,it)-0.5D0*contr(j,iii)+emin)
4896 cd print *,'j=',j,' expfac=',expfac
4897 escloc_i=escloc_i+expfac
4899 dersc(k)=dersc(k)+Ax(k,j,iii)*expfac
4903 ddersc(k)=ddersc(k)+(-Ax(2,j,iii)*Ax(k,j,iii)
4904 & +gaussc(k,2,j,it))*expfac
4911 dersc(1)=dersc(1)/cos(theti)**2
4912 ddersc(1)=ddersc(1)/cos(theti)**2
4915 escloci=-(dlog(escloc_i)-emin)
4917 dersc(j)=dersc(j)/escloc_i
4921 ddersc(j)=(ddersc(j)/escloc_i+dersc(2)*dersc(j))
4926 C------------------------------------------------------------------------------
4927 subroutine enesc_bound(x,escloci,dersc,dersc12,mixed)
4928 implicit real*8 (a-h,o-z)
4929 include 'DIMENSIONS'
4930 include 'COMMON.GEO'
4931 include 'COMMON.LOCAL'
4932 include 'COMMON.IOUNITS'
4933 common /sccalc/ time11,time12,time112,theti,it,nlobit
4934 double precision x(3),z(3),Ax(3,maxlob),dersc(3)
4935 double precision contr(maxlob)
4946 z(k)=x(k)-censc(k,j,it)
4952 Axk=Axk+gaussc(l,k,j,it)*z(l)
4958 expfac=expfac+Ax(k,j)*z(k)
4963 C As in the case of ebend, we want to avoid underflows in exponentiation and
4964 C subsequent NaNs and INFs in energy calculation.
4965 C Find the largest exponent
4968 if (emin.gt.contr(j)) emin=contr(j)
4972 C Compute the contribution to SC energy and derivatives
4976 expfac=dexp(bsc(j,it)-0.5D0*contr(j)+emin)
4977 escloc_i=escloc_i+expfac
4979 dersc(k)=dersc(k)+Ax(k,j)*expfac
4981 if (mixed) dersc12=dersc12+(-Ax(2,j)*Ax(1,j)
4982 & +gaussc(1,2,j,it))*expfac
4986 dersc(1)=dersc(1)/cos(theti)**2
4987 dersc12=dersc12/cos(theti)**2
4988 escloci=-(dlog(escloc_i)-emin)
4990 dersc(j)=dersc(j)/escloc_i
4992 if (mixed) dersc12=(dersc12/escloc_i+dersc(2)*dersc(1))
4996 c----------------------------------------------------------------------------------
4997 subroutine esc(escloc)
4998 C Calculate the local energy of a side chain and its derivatives in the
4999 C corresponding virtual-bond valence angles THETA and the spherical angles
5000 C ALPHA and OMEGA derived from AM1 all-atom calculations.
5001 C added by Urszula Kozlowska. 07/11/2007
5003 implicit real*8 (a-h,o-z)
5004 include 'DIMENSIONS'
5005 include 'COMMON.GEO'
5006 include 'COMMON.LOCAL'
5007 include 'COMMON.VAR'
5008 include 'COMMON.SCROT'
5009 include 'COMMON.INTERACT'
5010 include 'COMMON.DERIV'
5011 include 'COMMON.CHAIN'
5012 include 'COMMON.IOUNITS'
5013 include 'COMMON.NAMES'
5014 include 'COMMON.FFIELD'
5015 include 'COMMON.CONTROL'
5016 include 'COMMON.VECTORS'
5017 double precision x_prime(3),y_prime(3),z_prime(3)
5018 & , sumene,dsc_i,dp2_i,x(65),
5019 & xx,yy,zz,sumene1,sumene2,sumene3,sumene4,s1,s1_6,s2,s2_6,
5020 & de_dxx,de_dyy,de_dzz,de_dt
5021 double precision s1_t,s1_6_t,s2_t,s2_6_t
5023 & dXX_Ci1(3),dYY_Ci1(3),dZZ_Ci1(3),dXX_Ci(3),
5024 & dYY_Ci(3),dZZ_Ci(3),dXX_XYZ(3),dYY_XYZ(3),dZZ_XYZ(3),
5025 & dt_dCi(3),dt_dCi1(3)
5026 common /sccalc/ time11,time12,time112,theti,it,nlobit
5029 do i=loc_start,loc_end
5030 if (itype(i).eq.21) cycle
5031 costtab(i+1) =dcos(theta(i+1))
5032 sinttab(i+1) =dsqrt(1-costtab(i+1)*costtab(i+1))
5033 cost2tab(i+1)=dsqrt(0.5d0*(1.0d0+costtab(i+1)))
5034 sint2tab(i+1)=dsqrt(0.5d0*(1.0d0-costtab(i+1)))
5035 cosfac2=0.5d0/(1.0d0+costtab(i+1))
5036 cosfac=dsqrt(cosfac2)
5037 sinfac2=0.5d0/(1.0d0-costtab(i+1))
5038 sinfac=dsqrt(sinfac2)
5040 if (it.eq.10) goto 1
5042 C Compute the axes of tghe local cartesian coordinates system; store in
5043 c x_prime, y_prime and z_prime
5050 C write(2,*) "dc_norm", dc_norm(1,i+nres),dc_norm(2,i+nres),
5051 C & dc_norm(3,i+nres)
5053 x_prime(j) = (dc_norm(j,i) - dc_norm(j,i-1))*cosfac
5054 y_prime(j) = (dc_norm(j,i) + dc_norm(j,i-1))*sinfac
5057 z_prime(j) = -uz(j,i-1)
5060 c write (2,*) "x_prime",(x_prime(j),j=1,3)
5061 c write (2,*) "y_prime",(y_prime(j),j=1,3)
5062 c write (2,*) "z_prime",(z_prime(j),j=1,3)
5063 c write (2,*) "xx",scalar(x_prime(1),x_prime(1)),
5064 c & " xy",scalar(x_prime(1),y_prime(1)),
5065 c & " xz",scalar(x_prime(1),z_prime(1)),
5066 c & " yy",scalar(y_prime(1),y_prime(1)),
5067 c & " yz",scalar(y_prime(1),z_prime(1)),
5068 c & " zz",scalar(z_prime(1),z_prime(1))
5070 C Transform the unit vector of the ith side-chain centroid, dC_norm(*,i),
5071 C to local coordinate system. Store in xx, yy, zz.
5077 xx = xx + x_prime(j)*dc_norm(j,i+nres)
5078 yy = yy + y_prime(j)*dc_norm(j,i+nres)
5079 zz = zz + z_prime(j)*dc_norm(j,i+nres)
5086 C Compute the energy of the ith side cbain
5088 c write (2,*) "xx",xx," yy",yy," zz",zz
5091 x(j) = sc_parmin(j,it)
5094 Cc diagnostics - remove later
5096 yy1 = dsin(alph(2))*dcos(omeg(2))
5097 zz1 = -dsin(alph(2))*dsin(omeg(2))
5098 write(2,'(3f8.1,3f9.3,1x,3f9.3)')
5099 & alph(2)*rad2deg,omeg(2)*rad2deg,theta(3)*rad2deg,xx,yy,zz,
5101 C," --- ", xx_w,yy_w,zz_w
5104 sumene1= x(1)+ x(2)*xx+ x(3)*yy+ x(4)*zz+ x(5)*xx**2
5105 & + x(6)*yy**2+ x(7)*zz**2+ x(8)*xx*zz+ x(9)*xx*yy
5107 sumene2= x(11) + x(12)*xx + x(13)*yy + x(14)*zz + x(15)*xx**2
5108 & + x(16)*yy**2 + x(17)*zz**2 + x(18)*xx*zz + x(19)*xx*yy
5110 sumene3= x(21) +x(22)*xx +x(23)*yy +x(24)*zz +x(25)*xx**2
5111 & +x(26)*yy**2 +x(27)*zz**2 +x(28)*xx*zz +x(29)*xx*yy
5112 & +x(30)*yy*zz +x(31)*xx**3 +x(32)*yy**3 +x(33)*zz**3
5113 & +x(34)*(xx**2)*yy +x(35)*(xx**2)*zz +x(36)*(yy**2)*xx
5114 & +x(37)*(yy**2)*zz +x(38)*(zz**2)*xx +x(39)*(zz**2)*yy
5116 sumene4= x(41) +x(42)*xx +x(43)*yy +x(44)*zz +x(45)*xx**2
5117 & +x(46)*yy**2 +x(47)*zz**2 +x(48)*xx*zz +x(49)*xx*yy
5118 & +x(50)*yy*zz +x(51)*xx**3 +x(52)*yy**3 +x(53)*zz**3
5119 & +x(54)*(xx**2)*yy +x(55)*(xx**2)*zz +x(56)*(yy**2)*xx
5120 & +x(57)*(yy**2)*zz +x(58)*(zz**2)*xx +x(59)*(zz**2)*yy
5122 dsc_i = 0.743d0+x(61)
5124 dscp1=dsqrt(dsc_i**2+dp2_i**2-2*dsc_i*dp2_i
5125 & *(xx*cost2tab(i+1)+yy*sint2tab(i+1)))
5126 dscp2=dsqrt(dsc_i**2+dp2_i**2-2*dsc_i*dp2_i
5127 & *(xx*cost2tab(i+1)-yy*sint2tab(i+1)))
5128 s1=(1+x(63))/(0.1d0 + dscp1)
5129 s1_6=(1+x(64))/(0.1d0 + dscp1**6)
5130 s2=(1+x(65))/(0.1d0 + dscp2)
5131 s2_6=(1+x(65))/(0.1d0 + dscp2**6)
5132 sumene = ( sumene3*sint2tab(i+1) + sumene1)*(s1+s1_6)
5133 & + (sumene4*cost2tab(i+1) +sumene2)*(s2+s2_6)
5134 c write(2,'(i2," sumene",7f9.3)') i,sumene1,sumene2,sumene3,
5136 c & dscp1,dscp2,sumene
5137 c sumene = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
5138 escloc = escloc + sumene
5139 c write (2,*) "i",i," escloc",sumene,escloc
5142 C This section to check the numerical derivatives of the energy of ith side
5143 C chain in xx, yy, zz, and theta. Use the -DDEBUG compiler option or insert
5144 C #define DEBUG in the code to turn it on.
5146 write (2,*) "sumene =",sumene
5150 write (2,*) xx,yy,zz
5151 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
5152 de_dxx_num=(sumenep-sumene)/aincr
5154 write (2,*) "xx+ sumene from enesc=",sumenep
5157 write (2,*) xx,yy,zz
5158 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
5159 de_dyy_num=(sumenep-sumene)/aincr
5161 write (2,*) "yy+ sumene from enesc=",sumenep
5164 write (2,*) xx,yy,zz
5165 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
5166 de_dzz_num=(sumenep-sumene)/aincr
5168 write (2,*) "zz+ sumene from enesc=",sumenep
5169 costsave=cost2tab(i+1)
5170 sintsave=sint2tab(i+1)
5171 cost2tab(i+1)=dcos(0.5d0*(theta(i+1)+aincr))
5172 sint2tab(i+1)=dsin(0.5d0*(theta(i+1)+aincr))
5173 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
5174 de_dt_num=(sumenep-sumene)/aincr
5175 write (2,*) " t+ sumene from enesc=",sumenep
5176 cost2tab(i+1)=costsave
5177 sint2tab(i+1)=sintsave
5178 C End of diagnostics section.
5181 C Compute the gradient of esc
5183 pom_s1=(1.0d0+x(63))/(0.1d0 + dscp1)**2
5184 pom_s16=6*(1.0d0+x(64))/(0.1d0 + dscp1**6)**2
5185 pom_s2=(1.0d0+x(65))/(0.1d0 + dscp2)**2
5186 pom_s26=6*(1.0d0+x(65))/(0.1d0 + dscp2**6)**2
5187 pom_dx=dsc_i*dp2_i*cost2tab(i+1)
5188 pom_dy=dsc_i*dp2_i*sint2tab(i+1)
5189 pom_dt1=-0.5d0*dsc_i*dp2_i*(xx*sint2tab(i+1)-yy*cost2tab(i+1))
5190 pom_dt2=-0.5d0*dsc_i*dp2_i*(xx*sint2tab(i+1)+yy*cost2tab(i+1))
5191 pom1=(sumene3*sint2tab(i+1)+sumene1)
5192 & *(pom_s1/dscp1+pom_s16*dscp1**4)
5193 pom2=(sumene4*cost2tab(i+1)+sumene2)
5194 & *(pom_s2/dscp2+pom_s26*dscp2**4)
5195 sumene1x=x(2)+2*x(5)*xx+x(8)*zz+ x(9)*yy
5196 sumene3x=x(22)+2*x(25)*xx+x(28)*zz+x(29)*yy+3*x(31)*xx**2
5197 & +2*x(34)*xx*yy +2*x(35)*xx*zz +x(36)*(yy**2) +x(38)*(zz**2)
5199 sumene2x=x(12)+2*x(15)*xx+x(18)*zz+ x(19)*yy
5200 sumene4x=x(42)+2*x(45)*xx +x(48)*zz +x(49)*yy +3*x(51)*xx**2
5201 & +2*x(54)*xx*yy+2*x(55)*xx*zz+x(56)*(yy**2)+x(58)*(zz**2)
5203 de_dxx =(sumene1x+sumene3x*sint2tab(i+1))*(s1+s1_6)
5204 & +(sumene2x+sumene4x*cost2tab(i+1))*(s2+s2_6)
5205 & +(pom1+pom2)*pom_dx
5207 write(2,*), "de_dxx = ", de_dxx,de_dxx_num
5210 sumene1y=x(3) + 2*x(6)*yy + x(9)*xx + x(10)*zz
5211 sumene3y=x(23) +2*x(26)*yy +x(29)*xx +x(30)*zz +3*x(32)*yy**2
5212 & +x(34)*(xx**2) +2*x(36)*yy*xx +2*x(37)*yy*zz +x(39)*(zz**2)
5214 sumene2y=x(13) + 2*x(16)*yy + x(19)*xx + x(20)*zz
5215 sumene4y=x(43)+2*x(46)*yy+x(49)*xx +x(50)*zz
5216 & +3*x(52)*yy**2+x(54)*xx**2+2*x(56)*yy*xx +2*x(57)*yy*zz
5217 & +x(59)*zz**2 +x(60)*xx*zz
5218 de_dyy =(sumene1y+sumene3y*sint2tab(i+1))*(s1+s1_6)
5219 & +(sumene2y+sumene4y*cost2tab(i+1))*(s2+s2_6)
5220 & +(pom1-pom2)*pom_dy
5222 write(2,*), "de_dyy = ", de_dyy,de_dyy_num
5225 de_dzz =(x(24) +2*x(27)*zz +x(28)*xx +x(30)*yy
5226 & +3*x(33)*zz**2 +x(35)*xx**2 +x(37)*yy**2 +2*x(38)*zz*xx
5227 & +2*x(39)*zz*yy +x(40)*xx*yy)*sint2tab(i+1)*(s1+s1_6)
5228 & +(x(4) + 2*x(7)*zz+ x(8)*xx + x(10)*yy)*(s1+s1_6)
5229 & +(x(44)+2*x(47)*zz +x(48)*xx +x(50)*yy +3*x(53)*zz**2
5230 & +x(55)*xx**2 +x(57)*(yy**2)+2*x(58)*zz*xx +2*x(59)*zz*yy
5231 & +x(60)*xx*yy)*cost2tab(i+1)*(s2+s2_6)
5232 & + ( x(14) + 2*x(17)*zz+ x(18)*xx + x(20)*yy)*(s2+s2_6)
5234 write(2,*), "de_dzz = ", de_dzz,de_dzz_num
5237 de_dt = 0.5d0*sumene3*cost2tab(i+1)*(s1+s1_6)
5238 & -0.5d0*sumene4*sint2tab(i+1)*(s2+s2_6)
5239 & +pom1*pom_dt1+pom2*pom_dt2
5241 write(2,*), "de_dt = ", de_dt,de_dt_num
5245 cossc=scalar(dc_norm(1,i),dc_norm(1,i+nres))
5246 cossc1=scalar(dc_norm(1,i-1),dc_norm(1,i+nres))
5247 cosfac2xx=cosfac2*xx
5248 sinfac2yy=sinfac2*yy
5250 dt_dCi(k) = -(dc_norm(k,i-1)+costtab(i+1)*dc_norm(k,i))*
5252 dt_dCi1(k)= -(dc_norm(k,i)+costtab(i+1)*dc_norm(k,i-1))*
5254 pom=(dC_norm(k,i+nres)-cossc*dC_norm(k,i))*vbld_inv(i+1)
5255 pom1=(dC_norm(k,i+nres)-cossc1*dC_norm(k,i-1))*vbld_inv(i)
5256 c write (iout,*) "i",i," k",k," pom",pom," pom1",pom1,
5257 c & " dt_dCi",dt_dCi(k)," dt_dCi1",dt_dCi1(k)
5258 c write (iout,*) "dC_norm",(dC_norm(j,i),j=1,3),
5259 c & (dC_norm(j,i-1),j=1,3)," vbld_inv",vbld_inv(i+1),vbld_inv(i)
5260 dXX_Ci(k)=pom*cosfac-dt_dCi(k)*cosfac2xx
5261 dXX_Ci1(k)=-pom1*cosfac-dt_dCi1(k)*cosfac2xx
5262 dYY_Ci(k)=pom*sinfac+dt_dCi(k)*sinfac2yy
5263 dYY_Ci1(k)=pom1*sinfac+dt_dCi1(k)*sinfac2yy
5267 dZZ_Ci(k)=dZZ_Ci(k)-uzgrad(j,k,2,i-1)*dC_norm(j,i+nres)
5268 dZZ_Ci1(k)=dZZ_Ci1(k)-uzgrad(j,k,1,i-1)*dC_norm(j,i+nres)
5271 dXX_XYZ(k)=vbld_inv(i+nres)*(x_prime(k)-xx*dC_norm(k,i+nres))
5272 dYY_XYZ(k)=vbld_inv(i+nres)*(y_prime(k)-yy*dC_norm(k,i+nres))
5273 dZZ_XYZ(k)=vbld_inv(i+nres)*(z_prime(k)-zz*dC_norm(k,i+nres))
5275 dt_dCi(k) = -dt_dCi(k)/sinttab(i+1)
5276 dt_dCi1(k)= -dt_dCi1(k)/sinttab(i+1)
5280 dXX_Ctab(k,i)=dXX_Ci(k)
5281 dXX_C1tab(k,i)=dXX_Ci1(k)
5282 dYY_Ctab(k,i)=dYY_Ci(k)
5283 dYY_C1tab(k,i)=dYY_Ci1(k)
5284 dZZ_Ctab(k,i)=dZZ_Ci(k)
5285 dZZ_C1tab(k,i)=dZZ_Ci1(k)
5286 dXX_XYZtab(k,i)=dXX_XYZ(k)
5287 dYY_XYZtab(k,i)=dYY_XYZ(k)
5288 dZZ_XYZtab(k,i)=dZZ_XYZ(k)
5292 c write (iout,*) "k",k," dxx_ci1",dxx_ci1(k)," dyy_ci1",
5293 c & dyy_ci1(k)," dzz_ci1",dzz_ci1(k)
5294 c write (iout,*) "k",k," dxx_ci",dxx_ci(k)," dyy_ci",
5295 c & dyy_ci(k)," dzz_ci",dzz_ci(k)
5296 c write (iout,*) "k",k," dt_dci",dt_dci(k)," dt_dci",
5298 c write (iout,*) "k",k," dxx_XYZ",dxx_XYZ(k)," dyy_XYZ",
5299 c & dyy_XYZ(k)," dzz_XYZ",dzz_XYZ(k)
5300 gscloc(k,i-1)=gscloc(k,i-1)+de_dxx*dxx_ci1(k)
5301 & +de_dyy*dyy_ci1(k)+de_dzz*dzz_ci1(k)+de_dt*dt_dCi1(k)
5302 gscloc(k,i)=gscloc(k,i)+de_dxx*dxx_Ci(k)
5303 & +de_dyy*dyy_Ci(k)+de_dzz*dzz_Ci(k)+de_dt*dt_dCi(k)
5304 gsclocx(k,i)= de_dxx*dxx_XYZ(k)
5305 & +de_dyy*dyy_XYZ(k)+de_dzz*dzz_XYZ(k)
5307 c write(iout,*) "ENERGY GRAD = ", (gscloc(k,i-1),k=1,3),
5308 c & (gscloc(k,i),k=1,3),(gsclocx(k,i),k=1,3)
5310 C to check gradient call subroutine check_grad
5316 c------------------------------------------------------------------------------
5317 double precision function enesc(x,xx,yy,zz,cost2,sint2)
5319 double precision x(65),xx,yy,zz,cost2,sint2,sumene1,sumene2,
5320 & sumene3,sumene4,sumene,dsc_i,dp2_i,dscp1,dscp2,s1,s1_6,s2,s2_6
5321 sumene1= x(1)+ x(2)*xx+ x(3)*yy+ x(4)*zz+ x(5)*xx**2
5322 & + x(6)*yy**2+ x(7)*zz**2+ x(8)*xx*zz+ x(9)*xx*yy
5324 sumene2= x(11) + x(12)*xx + x(13)*yy + x(14)*zz + x(15)*xx**2
5325 & + x(16)*yy**2 + x(17)*zz**2 + x(18)*xx*zz + x(19)*xx*yy
5327 sumene3= x(21) +x(22)*xx +x(23)*yy +x(24)*zz +x(25)*xx**2
5328 & +x(26)*yy**2 +x(27)*zz**2 +x(28)*xx*zz +x(29)*xx*yy
5329 & +x(30)*yy*zz +x(31)*xx**3 +x(32)*yy**3 +x(33)*zz**3
5330 & +x(34)*(xx**2)*yy +x(35)*(xx**2)*zz +x(36)*(yy**2)*xx
5331 & +x(37)*(yy**2)*zz +x(38)*(zz**2)*xx +x(39)*(zz**2)*yy
5333 sumene4= x(41) +x(42)*xx +x(43)*yy +x(44)*zz +x(45)*xx**2
5334 & +x(46)*yy**2 +x(47)*zz**2 +x(48)*xx*zz +x(49)*xx*yy
5335 & +x(50)*yy*zz +x(51)*xx**3 +x(52)*yy**3 +x(53)*zz**3
5336 & +x(54)*(xx**2)*yy +x(55)*(xx**2)*zz +x(56)*(yy**2)*xx
5337 & +x(57)*(yy**2)*zz +x(58)*(zz**2)*xx +x(59)*(zz**2)*yy
5339 dsc_i = 0.743d0+x(61)
5341 dscp1=dsqrt(dsc_i**2+dp2_i**2-2*dsc_i*dp2_i
5342 & *(xx*cost2+yy*sint2))
5343 dscp2=dsqrt(dsc_i**2+dp2_i**2-2*dsc_i*dp2_i
5344 & *(xx*cost2-yy*sint2))
5345 s1=(1+x(63))/(0.1d0 + dscp1)
5346 s1_6=(1+x(64))/(0.1d0 + dscp1**6)
5347 s2=(1+x(65))/(0.1d0 + dscp2)
5348 s2_6=(1+x(65))/(0.1d0 + dscp2**6)
5349 sumene = ( sumene3*sint2 + sumene1)*(s1+s1_6)
5350 & + (sumene4*cost2 +sumene2)*(s2+s2_6)
5355 c------------------------------------------------------------------------------
5356 subroutine gcont(rij,r0ij,eps0ij,delta,fcont,fprimcont)
5358 C This procedure calculates two-body contact function g(rij) and its derivative:
5361 C g(rij) = esp0ij*(-0.9375*x+0.625*x**3-0.1875*x**5) ! -1 =< x =< 1
5364 C where x=(rij-r0ij)/delta
5366 C rij - interbody distance, r0ij - contact distance, eps0ij - contact energy
5369 double precision rij,r0ij,eps0ij,fcont,fprimcont
5370 double precision x,x2,x4,delta
5374 if (x.lt.-1.0D0) then
5377 else if (x.le.1.0D0) then
5380 fcont=eps0ij*(x*(-0.9375D0+0.6250D0*x2-0.1875D0*x4)+0.5D0)
5381 fprimcont=eps0ij * (-0.9375D0+1.8750D0*x2-0.9375D0*x4)/delta
5388 c------------------------------------------------------------------------------
5389 subroutine splinthet(theti,delta,ss,ssder)
5390 implicit real*8 (a-h,o-z)
5391 include 'DIMENSIONS'
5392 include 'COMMON.VAR'
5393 include 'COMMON.GEO'
5396 if (theti.gt.pipol) then
5397 call gcont(theti,thetup,1.0d0,delta,ss,ssder)
5399 call gcont(-theti,-thetlow,1.0d0,delta,ss,ssder)
5404 c------------------------------------------------------------------------------
5405 subroutine spline1(x,x0,delta,f0,f1,fprim0,f,fprim)
5407 double precision x,x0,delta,f0,f1,fprim0,f,fprim
5408 double precision ksi,ksi2,ksi3,a1,a2,a3
5409 a1=fprim0*delta/(f1-f0)
5415 f=f0+(f1-f0)*ksi*(a1+ksi*(a2+a3*ksi))
5416 fprim=(f1-f0)/delta*(a1+ksi*(2*a2+3*ksi*a3))
5419 c------------------------------------------------------------------------------
5420 subroutine spline2(x,x0,delta,f0x,f1x,fprim0x,fx)
5422 double precision x,x0,delta,f0x,f1x,fprim0x,fx
5423 double precision ksi,ksi2,ksi3,a1,a2,a3
5428 a2=3*(f1x-f0x)-2*fprim0x*delta
5429 a3=fprim0x*delta-2*(f1x-f0x)
5430 fx=f0x+a1*ksi+a2*ksi2+a3*ksi3
5433 C-----------------------------------------------------------------------------
5435 C-----------------------------------------------------------------------------
5436 subroutine etor(etors,edihcnstr)
5437 implicit real*8 (a-h,o-z)
5438 include 'DIMENSIONS'
5439 include 'COMMON.VAR'
5440 include 'COMMON.GEO'
5441 include 'COMMON.LOCAL'
5442 include 'COMMON.TORSION'
5443 include 'COMMON.INTERACT'
5444 include 'COMMON.DERIV'
5445 include 'COMMON.CHAIN'
5446 include 'COMMON.NAMES'
5447 include 'COMMON.IOUNITS'
5448 include 'COMMON.FFIELD'
5449 include 'COMMON.TORCNSTR'
5450 include 'COMMON.CONTROL'
5452 C Set lprn=.true. for debugging
5456 do i=iphi_start,iphi_end
5458 if (itype(i-2).eq.21 .or. itype(i-1).eq.21
5459 & .or. itype(i).eq.21) cycle
5460 itori=itortyp(itype(i-2))
5461 itori1=itortyp(itype(i-1))
5464 C Proline-Proline pair is a special case...
5465 if (itori.eq.3 .and. itori1.eq.3) then
5466 if (phii.gt.-dwapi3) then
5468 fac=1.0D0/(1.0D0-cosphi)
5469 etorsi=v1(1,3,3)*fac
5470 etorsi=etorsi+etorsi
5471 etors=etors+etorsi-v1(1,3,3)
5472 if (energy_dec) etors_ii=etors_ii+etorsi-v1(1,3,3)
5473 gloci=gloci-3*fac*etorsi*dsin(3*phii)
5476 v1ij=v1(j+1,itori,itori1)
5477 v2ij=v2(j+1,itori,itori1)
5480 etors=etors+v1ij*cosphi+v2ij*sinphi+dabs(v1ij)+dabs(v2ij)
5481 if (energy_dec) etors_ii=etors_ii+
5482 & v2ij*sinphi+dabs(v1ij)+dabs(v2ij)
5483 gloci=gloci+j*(v2ij*cosphi-v1ij*sinphi)
5487 v1ij=v1(j,itori,itori1)
5488 v2ij=v2(j,itori,itori1)
5491 etors=etors+v1ij*cosphi+v2ij*sinphi+dabs(v1ij)+dabs(v2ij)
5492 if (energy_dec) etors_ii=etors_ii+
5493 & v1ij*cosphi+v2ij*sinphi+dabs(v1ij)+dabs(v2ij)
5494 gloci=gloci+j*(v2ij*cosphi-v1ij*sinphi)
5497 if (energy_dec) write (iout,'(a6,i5,0pf7.3)')
5500 & write (iout,'(2(a3,2x,i3,2x),2i3,6f8.3/26x,6f8.3/)')
5501 & restyp(itype(i-2)),i-2,restyp(itype(i-1)),i-1,itori,itori1,
5502 & (v1(j,itori,itori1),j=1,6),(v2(j,itori,itori1),j=1,6)
5503 gloc(i-3,icg)=gloc(i-3,icg)+wtor*gloci
5504 c write (iout,*) 'i=',i,' gloc=',gloc(i-3,icg)
5506 ! 6/20/98 - dihedral angle constraints
5509 itori=idih_constr(i)
5512 if (difi.gt.drange(i)) then
5514 edihcnstr=edihcnstr+0.25d0*ftors*difi**4
5515 gloc(itori-3,icg)=gloc(itori-3,icg)+ftors*difi**3
5516 else if (difi.lt.-drange(i)) then
5518 edihcnstr=edihcnstr+0.25d0*ftors*difi**4
5519 gloc(itori-3,icg)=gloc(itori-3,icg)+ftors*difi**3
5521 ! write (iout,'(2i5,2f8.3,2e14.5)') i,itori,rad2deg*phii,
5522 ! & rad2deg*difi,0.25d0*ftors*difi**4,gloc(itori-3,icg)
5524 ! write (iout,*) 'edihcnstr',edihcnstr
5527 c------------------------------------------------------------------------------
5528 subroutine etor_d(etors_d)
5532 c----------------------------------------------------------------------------
5534 subroutine etor(etors,edihcnstr)
5535 implicit real*8 (a-h,o-z)
5536 include 'DIMENSIONS'
5537 include 'COMMON.VAR'
5538 include 'COMMON.GEO'
5539 include 'COMMON.LOCAL'
5540 include 'COMMON.TORSION'
5541 include 'COMMON.INTERACT'
5542 include 'COMMON.DERIV'
5543 include 'COMMON.CHAIN'
5544 include 'COMMON.NAMES'
5545 include 'COMMON.IOUNITS'
5546 include 'COMMON.FFIELD'
5547 include 'COMMON.TORCNSTR'
5548 include 'COMMON.CONTROL'
5550 C Set lprn=.true. for debugging
5554 do i=iphi_start,iphi_end
5555 if (itype(i-2).eq.21 .or. itype(i-1).eq.21
5556 & .or. itype(i).eq.21) cycle
5558 itori=itortyp(itype(i-2))
5559 itori1=itortyp(itype(i-1))
5562 C Regular cosine and sine terms
5563 do j=1,nterm(itori,itori1)
5564 v1ij=v1(j,itori,itori1)
5565 v2ij=v2(j,itori,itori1)
5568 etors=etors+v1ij*cosphi+v2ij*sinphi
5569 if (energy_dec) etors_ii=etors_ii+
5570 & v1ij*cosphi+v2ij*sinphi
5571 gloci=gloci+j*(v2ij*cosphi-v1ij*sinphi)
5575 C E = SUM ----------------------------------- - v1
5576 C [v2 cos(phi/2)+v3 sin(phi/2)]^2 + 1
5578 cosphi=dcos(0.5d0*phii)
5579 sinphi=dsin(0.5d0*phii)
5580 do j=1,nlor(itori,itori1)
5581 vl1ij=vlor1(j,itori,itori1)
5582 vl2ij=vlor2(j,itori,itori1)
5583 vl3ij=vlor3(j,itori,itori1)
5584 pom=vl2ij*cosphi+vl3ij*sinphi
5585 pom1=1.0d0/(pom*pom+1.0d0)
5586 etors=etors+vl1ij*pom1
5587 if (energy_dec) etors_ii=etors_ii+
5590 gloci=gloci+vl1ij*(vl3ij*cosphi-vl2ij*sinphi)*pom
5592 C Subtract the constant term
5593 etors=etors-v0(itori,itori1)
5594 if (energy_dec) write (iout,'(a6,i5,0pf7.3)')
5595 & 'etor',i,etors_ii-v0(itori,itori1)
5597 & write (iout,'(2(a3,2x,i3,2x),2i3,6f8.3/26x,6f8.3/)')
5598 & restyp(itype(i-2)),i-2,restyp(itype(i-1)),i-1,itori,itori1,
5599 & (v1(j,itori,itori1),j=1,6),(v2(j,itori,itori1),j=1,6)
5600 gloc(i-3,icg)=gloc(i-3,icg)+wtor*gloci
5601 c write (iout,*) 'i=',i,' gloc=',gloc(i-3,icg)
5603 ! 6/20/98 - dihedral angle constraints
5605 c do i=1,ndih_constr
5606 do i=idihconstr_start,idihconstr_end
5607 itori=idih_constr(i)
5609 difi=pinorm(phii-phi0(i))
5610 if (difi.gt.drange(i)) then
5612 edihcnstr=edihcnstr+0.25d0*ftors*difi**4
5613 gloc(itori-3,icg)=gloc(itori-3,icg)+ftors*difi**3
5614 else if (difi.lt.-drange(i)) then
5616 edihcnstr=edihcnstr+0.25d0*ftors*difi**4
5617 gloc(itori-3,icg)=gloc(itori-3,icg)+ftors*difi**3
5621 cd write (iout,'(2i5,4f8.3,2e14.5)') i,itori,rad2deg*phii,
5622 cd & rad2deg*phi0(i), rad2deg*drange(i),
5623 cd & rad2deg*difi,0.25d0*ftors*difi**4,gloc(itori-3,icg)
5625 cd write (iout,*) 'edihcnstr',edihcnstr
5628 c----------------------------------------------------------------------------
5629 subroutine etor_d(etors_d)
5630 C 6/23/01 Compute double torsional energy
5631 implicit real*8 (a-h,o-z)
5632 include 'DIMENSIONS'
5633 include 'COMMON.VAR'
5634 include 'COMMON.GEO'
5635 include 'COMMON.LOCAL'
5636 include 'COMMON.TORSION'
5637 include 'COMMON.INTERACT'
5638 include 'COMMON.DERIV'
5639 include 'COMMON.CHAIN'
5640 include 'COMMON.NAMES'
5641 include 'COMMON.IOUNITS'
5642 include 'COMMON.FFIELD'
5643 include 'COMMON.TORCNSTR'
5645 C Set lprn=.true. for debugging
5649 c write(iout,*) "a tu??"
5650 do i=iphid_start,iphid_end
5651 if (itype(i-2).eq.21 .or. itype(i-1).eq.21
5652 & .or. itype(i).eq.21 .or. itype(i+1).eq.21) cycle
5653 itori=itortyp(itype(i-2))
5654 itori1=itortyp(itype(i-1))
5655 itori2=itortyp(itype(i))
5660 C Regular cosine and sine terms
5661 do j=1,ntermd_1(itori,itori1,itori2)
5662 v1cij=v1c(1,j,itori,itori1,itori2)
5663 v1sij=v1s(1,j,itori,itori1,itori2)
5664 v2cij=v1c(2,j,itori,itori1,itori2)
5665 v2sij=v1s(2,j,itori,itori1,itori2)
5666 cosphi1=dcos(j*phii)
5667 sinphi1=dsin(j*phii)
5668 cosphi2=dcos(j*phii1)
5669 sinphi2=dsin(j*phii1)
5670 etors_d=etors_d+v1cij*cosphi1+v1sij*sinphi1+
5671 & v2cij*cosphi2+v2sij*sinphi2
5672 gloci1=gloci1+j*(v1sij*cosphi1-v1cij*sinphi1)
5673 gloci2=gloci2+j*(v2sij*cosphi2-v2cij*sinphi2)
5675 do k=2,ntermd_2(itori,itori1,itori2)
5677 v1cdij = v2c(k,l,itori,itori1,itori2)
5678 v2cdij = v2c(l,k,itori,itori1,itori2)
5679 v1sdij = v2s(k,l,itori,itori1,itori2)
5680 v2sdij = v2s(l,k,itori,itori1,itori2)
5681 cosphi1p2=dcos(l*phii+(k-l)*phii1)
5682 cosphi1m2=dcos(l*phii-(k-l)*phii1)
5683 sinphi1p2=dsin(l*phii+(k-l)*phii1)
5684 sinphi1m2=dsin(l*phii-(k-l)*phii1)
5685 etors_d=etors_d+v1cdij*cosphi1p2+v2cdij*cosphi1m2+
5686 & v1sdij*sinphi1p2+v2sdij*sinphi1m2
5687 gloci1=gloci1+l*(v1sdij*cosphi1p2+v2sdij*cosphi1m2
5688 & -v1cdij*sinphi1p2-v2cdij*sinphi1m2)
5689 gloci2=gloci2+(k-l)*(v1sdij*cosphi1p2-v2sdij*cosphi1m2
5690 & -v1cdij*sinphi1p2+v2cdij*sinphi1m2)
5693 gloc(i-3,icg)=gloc(i-3,icg)+wtor_d*gloci1
5694 gloc(i-2,icg)=gloc(i-2,icg)+wtor_d*gloci2
5699 c------------------------------------------------------------------------------
5700 subroutine eback_sc_corr(esccor)
5701 c 7/21/2007 Correlations between the backbone-local and side-chain-local
5702 c conformational states; temporarily implemented as differences
5703 c between UNRES torsional potentials (dependent on three types of
5704 c residues) and the torsional potentials dependent on all 20 types
5705 c of residues computed from AM1 energy surfaces of terminally-blocked
5706 c amino-acid residues.
5707 implicit real*8 (a-h,o-z)
5708 include 'DIMENSIONS'
5709 include 'COMMON.VAR'
5710 include 'COMMON.GEO'
5711 include 'COMMON.LOCAL'
5712 include 'COMMON.TORSION'
5713 include 'COMMON.SCCOR'
5714 include 'COMMON.INTERACT'
5715 include 'COMMON.DERIV'
5716 include 'COMMON.CHAIN'
5717 include 'COMMON.NAMES'
5718 include 'COMMON.IOUNITS'
5719 include 'COMMON.FFIELD'
5720 include 'COMMON.CONTROL'
5722 C Set lprn=.true. for debugging
5725 c write (iout,*) "EBACK_SC_COR",itau_start,itau_end
5727 do i=itau_start,itau_end
5728 if ((itype(i-2).eq.ntyp1).or.(itype(i-1).eq.ntyp1)) cycle
5730 isccori=isccortyp(itype(i-2))
5731 isccori1=isccortyp(itype(i-1))
5732 c write (iout,*) "EBACK_SC_COR",i,nterm_sccor(isccori,isccori1)
5734 do intertyp=1,3 !intertyp
5735 cc Added 09 May 2012 (Adasko)
5736 cc Intertyp means interaction type of backbone mainchain correlation:
5737 c 1 = SC...Ca...Ca...Ca
5738 c 2 = Ca...Ca...Ca...SC
5739 c 3 = SC...Ca...Ca...SCi
5741 if (((intertyp.eq.3).and.((itype(i-2).eq.10).or.
5742 & (itype(i-1).eq.10).or.(itype(i-2).eq.ntyp1).or.
5743 & (itype(i-1).eq.ntyp1)))
5744 & .or. ((intertyp.eq.1).and.((itype(i-2).eq.10)
5745 & .or.(itype(i-2).eq.ntyp1).or.(itype(i-1).eq.ntyp1)
5746 & .or.(itype(i).eq.ntyp1)))
5747 & .or.((intertyp.eq.2).and.((itype(i-1).eq.10).or.
5748 & (itype(i-1).eq.ntyp1).or.(itype(i-2).eq.ntyp1).or.
5749 & (itype(i-3).eq.ntyp1)))) cycle
5750 if ((intertyp.eq.2).and.(i.eq.4).and.(itype(1).eq.ntyp1)) cycle
5751 if ((intertyp.eq.1).and.(i.eq.nres).and.(itype(nres).eq.ntyp1))
5753 do j=1,nterm_sccor(isccori,isccori1)
5754 v1ij=v1sccor(j,intertyp,isccori,isccori1)
5755 v2ij=v2sccor(j,intertyp,isccori,isccori1)
5756 cosphi=dcos(j*tauangle(intertyp,i))
5757 sinphi=dsin(j*tauangle(intertyp,i))
5758 esccor=esccor+v1ij*cosphi+v2ij*sinphi
5759 gloci=gloci+j*(v2ij*cosphi-v1ij*sinphi)
5761 c write (iout,*) "EBACK_SC_COR",i,v1ij*cosphi+v2ij*sinphi,intertyp
5762 gloc_sc(intertyp,i-3,icg)=gloc_sc(intertyp,i-3,icg)+wsccor*gloci
5764 & write (iout,'(2(a3,2x,i3,2x),2i3,6f8.3/26x,6f8.3/)')
5765 & restyp(itype(i-2)),i-2,restyp(itype(i-1)),i-1,isccori,isccori1,
5766 & (v1sccor(j,intertyp,isccori,isccori1),j=1,6)
5767 & ,(v2sccor(j,intertyp,isccori,isccori1),j=1,6)
5768 gsccor_loc(i-3)=gsccor_loc(i-3)+gloci
5774 c----------------------------------------------------------------------------
5775 subroutine multibody(ecorr)
5776 C This subroutine calculates multi-body contributions to energy following
5777 C the idea of Skolnick et al. If side chains I and J make a contact and
5778 C at the same time side chains I+1 and J+1 make a contact, an extra
5779 C contribution equal to sqrt(eps(i,j)*eps(i+1,j+1)) is added.
5780 implicit real*8 (a-h,o-z)
5781 include 'DIMENSIONS'
5782 include 'COMMON.IOUNITS'
5783 include 'COMMON.DERIV'
5784 include 'COMMON.INTERACT'
5785 include 'COMMON.CONTACTS'
5786 double precision gx(3),gx1(3)
5789 C Set lprn=.true. for debugging
5793 write (iout,'(a)') 'Contact function values:'
5795 write (iout,'(i2,20(1x,i2,f10.5))')
5796 & i,(jcont(j,i),facont(j,i),j=1,num_cont(i))
5811 num_conti=num_cont(i)
5812 num_conti1=num_cont(i1)
5817 if (j1.eq.j+ishift .or. j1.eq.j-ishift) then
5818 cd write(iout,*)'i=',i,' j=',j,' i1=',i1,' j1=',j1,
5819 cd & ' ishift=',ishift
5820 C Contacts I--J and I+ISHIFT--J+-ISHIFT1 occur simultaneously.
5821 C The system gains extra energy.
5822 ecorr=ecorr+esccorr(i,j,i1,j1,jj,kk)
5823 endif ! j1==j+-ishift
5832 c------------------------------------------------------------------------------
5833 double precision function esccorr(i,j,k,l,jj,kk)
5834 implicit real*8 (a-h,o-z)
5835 include 'DIMENSIONS'
5836 include 'COMMON.IOUNITS'
5837 include 'COMMON.DERIV'
5838 include 'COMMON.INTERACT'
5839 include 'COMMON.CONTACTS'
5840 double precision gx(3),gx1(3)
5845 cd write (iout,'(4i5,3f10.5)') i,j,k,l,eij,ekl,-eij*ekl
5846 C Calculate the multi-body contribution to energy.
5847 C Calculate multi-body contributions to the gradient.
5848 cd write (iout,'(2(2i3,3f10.5))')i,j,(gacont(m,jj,i),m=1,3),
5849 cd & k,l,(gacont(m,kk,k),m=1,3)
5851 gx(m) =ekl*gacont(m,jj,i)
5852 gx1(m)=eij*gacont(m,kk,k)
5853 gradxorr(m,i)=gradxorr(m,i)-gx(m)
5854 gradxorr(m,j)=gradxorr(m,j)+gx(m)
5855 gradxorr(m,k)=gradxorr(m,k)-gx1(m)
5856 gradxorr(m,l)=gradxorr(m,l)+gx1(m)
5860 gradcorr(ll,m)=gradcorr(ll,m)+gx(ll)
5865 gradcorr(ll,m)=gradcorr(ll,m)+gx1(ll)
5871 c------------------------------------------------------------------------------
5872 subroutine multibody_hb(ecorr,ecorr5,ecorr6,n_corr,n_corr1)
5873 C This subroutine calculates multi-body contributions to hydrogen-bonding
5874 implicit real*8 (a-h,o-z)
5875 include 'DIMENSIONS'
5876 include 'COMMON.IOUNITS'
5879 parameter (max_cont=maxconts)
5880 parameter (max_dim=26)
5881 integer source,CorrelType,CorrelID,CorrelType1,CorrelID1,Error
5882 double precision zapas(max_dim,maxconts,max_fg_procs),
5883 & zapas_recv(max_dim,maxconts,max_fg_procs)
5884 common /przechowalnia/ zapas
5885 integer status(MPI_STATUS_SIZE),req(maxconts*2),
5886 & status_array(MPI_STATUS_SIZE,maxconts*2)
5888 include 'COMMON.SETUP'
5889 include 'COMMON.FFIELD'
5890 include 'COMMON.DERIV'
5891 include 'COMMON.INTERACT'
5892 include 'COMMON.CONTACTS'
5893 include 'COMMON.CONTROL'
5894 include 'COMMON.LOCAL'
5895 double precision gx(3),gx1(3),time00
5898 C Set lprn=.true. for debugging
5903 if (nfgtasks.le.1) goto 30
5905 write (iout,'(a)') 'Contact function values before RECEIVE:'
5907 write (iout,'(2i3,50(1x,i2,f5.2))')
5908 & i,num_cont_hb(i),(jcont_hb(j,i),facont_hb(j,i),
5909 & j=1,num_cont_hb(i))
5913 do i=1,ntask_cont_from
5916 do i=1,ntask_cont_to
5919 c write (iout,*) "ntask_cont_from",ntask_cont_from," ntask_cont_to",
5921 C Make the list of contacts to send to send to other procesors
5922 c write (iout,*) "limits",max0(iturn4_end-1,iatel_s),iturn3_end
5924 do i=iturn3_start,iturn3_end
5925 c write (iout,*) "make contact list turn3",i," num_cont",
5927 call add_hb_contact(i,i+2,iturn3_sent_local(1,i))
5929 do i=iturn4_start,iturn4_end
5930 c write (iout,*) "make contact list turn4",i," num_cont",
5932 call add_hb_contact(i,i+3,iturn4_sent_local(1,i))
5936 c write (iout,*) "make contact list longrange",i,ii," num_cont",
5938 do j=1,num_cont_hb(i)
5941 iproc=iint_sent_local(k,jjc,ii)
5942 c write (iout,*) "i",i," j",j," k",k," jjc",jjc," iproc",iproc
5943 if (iproc.gt.0) then
5944 ncont_sent(iproc)=ncont_sent(iproc)+1
5945 nn=ncont_sent(iproc)
5947 zapas(2,nn,iproc)=jjc
5948 zapas(3,nn,iproc)=facont_hb(j,i)
5949 zapas(4,nn,iproc)=ees0p(j,i)
5950 zapas(5,nn,iproc)=ees0m(j,i)
5951 zapas(6,nn,iproc)=gacont_hbr(1,j,i)
5952 zapas(7,nn,iproc)=gacont_hbr(2,j,i)
5953 zapas(8,nn,iproc)=gacont_hbr(3,j,i)
5954 zapas(9,nn,iproc)=gacontm_hb1(1,j,i)
5955 zapas(10,nn,iproc)=gacontm_hb1(2,j,i)
5956 zapas(11,nn,iproc)=gacontm_hb1(3,j,i)
5957 zapas(12,nn,iproc)=gacontp_hb1(1,j,i)
5958 zapas(13,nn,iproc)=gacontp_hb1(2,j,i)
5959 zapas(14,nn,iproc)=gacontp_hb1(3,j,i)
5960 zapas(15,nn,iproc)=gacontm_hb2(1,j,i)
5961 zapas(16,nn,iproc)=gacontm_hb2(2,j,i)
5962 zapas(17,nn,iproc)=gacontm_hb2(3,j,i)
5963 zapas(18,nn,iproc)=gacontp_hb2(1,j,i)
5964 zapas(19,nn,iproc)=gacontp_hb2(2,j,i)
5965 zapas(20,nn,iproc)=gacontp_hb2(3,j,i)
5966 zapas(21,nn,iproc)=gacontm_hb3(1,j,i)
5967 zapas(22,nn,iproc)=gacontm_hb3(2,j,i)
5968 zapas(23,nn,iproc)=gacontm_hb3(3,j,i)
5969 zapas(24,nn,iproc)=gacontp_hb3(1,j,i)
5970 zapas(25,nn,iproc)=gacontp_hb3(2,j,i)
5971 zapas(26,nn,iproc)=gacontp_hb3(3,j,i)
5978 & "Numbers of contacts to be sent to other processors",
5979 & (ncont_sent(i),i=1,ntask_cont_to)
5980 write (iout,*) "Contacts sent"
5981 do ii=1,ntask_cont_to
5983 iproc=itask_cont_to(ii)
5984 write (iout,*) nn," contacts to processor",iproc,
5985 & " of CONT_TO_COMM group"
5987 write(iout,'(2f5.0,4f10.5)')(zapas(j,i,ii),j=1,5)
5995 CorrelID1=nfgtasks+fg_rank+1
5997 C Receive the numbers of needed contacts from other processors
5998 do ii=1,ntask_cont_from
5999 iproc=itask_cont_from(ii)
6001 call MPI_Irecv(ncont_recv(ii),1,MPI_INTEGER,iproc,CorrelType,
6002 & FG_COMM,req(ireq),IERR)
6004 c write (iout,*) "IRECV ended"
6006 C Send the number of contacts needed by other processors
6007 do ii=1,ntask_cont_to
6008 iproc=itask_cont_to(ii)
6010 call MPI_Isend(ncont_sent(ii),1,MPI_INTEGER,iproc,CorrelType,
6011 & FG_COMM,req(ireq),IERR)
6013 c write (iout,*) "ISEND ended"
6014 c write (iout,*) "number of requests (nn)",ireq
6017 & call MPI_Waitall(ireq,req,status_array,ierr)
6019 c & "Numbers of contacts to be received from other processors",
6020 c & (ncont_recv(i),i=1,ntask_cont_from)
6024 do ii=1,ntask_cont_from
6025 iproc=itask_cont_from(ii)
6027 c write (iout,*) "Receiving",nn," contacts from processor",iproc,
6028 c & " of CONT_TO_COMM group"
6032 call MPI_Irecv(zapas_recv(1,1,ii),nn*max_dim,
6033 & MPI_DOUBLE_PRECISION,iproc,CorrelType1,FG_COMM,req(ireq),IERR)
6034 c write (iout,*) "ireq,req",ireq,req(ireq)
6037 C Send the contacts to processors that need them
6038 do ii=1,ntask_cont_to
6039 iproc=itask_cont_to(ii)
6041 c write (iout,*) nn," contacts to processor",iproc,
6042 c & " of CONT_TO_COMM group"
6045 call MPI_Isend(zapas(1,1,ii),nn*max_dim,MPI_DOUBLE_PRECISION,
6046 & iproc,CorrelType1,FG_COMM,req(ireq),IERR)
6047 c write (iout,*) "ireq,req",ireq,req(ireq)
6049 c write(iout,'(2f5.0,4f10.5)')(zapas(j,i,ii),j=1,5)
6053 c write (iout,*) "number of requests (contacts)",ireq
6054 c write (iout,*) "req",(req(i),i=1,4)
6057 & call MPI_Waitall(ireq,req,status_array,ierr)
6058 do iii=1,ntask_cont_from
6059 iproc=itask_cont_from(iii)
6062 write (iout,*) "Received",nn," contacts from processor",iproc,
6063 & " of CONT_FROM_COMM group"
6066 write(iout,'(2f5.0,4f10.5)')(zapas_recv(j,i,iii),j=1,5)
6071 ii=zapas_recv(1,i,iii)
6072 c Flag the received contacts to prevent double-counting
6073 jj=-zapas_recv(2,i,iii)
6074 c write (iout,*) "iii",iii," i",i," ii",ii," jj",jj
6076 nnn=num_cont_hb(ii)+1
6079 facont_hb(nnn,ii)=zapas_recv(3,i,iii)
6080 ees0p(nnn,ii)=zapas_recv(4,i,iii)
6081 ees0m(nnn,ii)=zapas_recv(5,i,iii)
6082 gacont_hbr(1,nnn,ii)=zapas_recv(6,i,iii)
6083 gacont_hbr(2,nnn,ii)=zapas_recv(7,i,iii)
6084 gacont_hbr(3,nnn,ii)=zapas_recv(8,i,iii)
6085 gacontm_hb1(1,nnn,ii)=zapas_recv(9,i,iii)
6086 gacontm_hb1(2,nnn,ii)=zapas_recv(10,i,iii)
6087 gacontm_hb1(3,nnn,ii)=zapas_recv(11,i,iii)
6088 gacontp_hb1(1,nnn,ii)=zapas_recv(12,i,iii)
6089 gacontp_hb1(2,nnn,ii)=zapas_recv(13,i,iii)
6090 gacontp_hb1(3,nnn,ii)=zapas_recv(14,i,iii)
6091 gacontm_hb2(1,nnn,ii)=zapas_recv(15,i,iii)
6092 gacontm_hb2(2,nnn,ii)=zapas_recv(16,i,iii)
6093 gacontm_hb2(3,nnn,ii)=zapas_recv(17,i,iii)
6094 gacontp_hb2(1,nnn,ii)=zapas_recv(18,i,iii)
6095 gacontp_hb2(2,nnn,ii)=zapas_recv(19,i,iii)
6096 gacontp_hb2(3,nnn,ii)=zapas_recv(20,i,iii)
6097 gacontm_hb3(1,nnn,ii)=zapas_recv(21,i,iii)
6098 gacontm_hb3(2,nnn,ii)=zapas_recv(22,i,iii)
6099 gacontm_hb3(3,nnn,ii)=zapas_recv(23,i,iii)
6100 gacontp_hb3(1,nnn,ii)=zapas_recv(24,i,iii)
6101 gacontp_hb3(2,nnn,ii)=zapas_recv(25,i,iii)
6102 gacontp_hb3(3,nnn,ii)=zapas_recv(26,i,iii)
6107 write (iout,'(a)') 'Contact function values after receive:'
6109 write (iout,'(2i3,50(1x,i3,f5.2))')
6110 & i,num_cont_hb(i),(jcont_hb(j,i),facont_hb(j,i),
6111 & j=1,num_cont_hb(i))
6118 write (iout,'(a)') 'Contact function values:'
6120 write (iout,'(2i3,50(1x,i3,f5.2))')
6121 & i,num_cont_hb(i),(jcont_hb(j,i),facont_hb(j,i),
6122 & j=1,num_cont_hb(i))
6126 C Remove the loop below after debugging !!!
6133 C Calculate the local-electrostatic correlation terms
6134 do i=min0(iatel_s,iturn4_start),max0(iatel_e,iturn3_end)
6136 num_conti=num_cont_hb(i)
6137 num_conti1=num_cont_hb(i+1)
6144 c write (iout,*) 'i=',i,' j=',j,' i1=',i1,' j1=',j1,
6145 c & ' jj=',jj,' kk=',kk
6146 if ((j.gt.0 .and. j1.gt.0 .or. j.gt.0 .and. j1.lt.0
6147 & .or. j.lt.0 .and. j1.gt.0) .and.
6148 & (jp1.eq.jp+1 .or. jp1.eq.jp-1)) then
6149 C Contacts I-J and (I+1)-(J+1) or (I+1)-(J-1) occur simultaneously.
6150 C The system gains extra energy.
6151 ecorr=ecorr+ehbcorr(i,jp,i+1,jp1,jj,kk,0.72D0,0.32D0)
6152 if (energy_dec) write (iout,'(a6,2i5,0pf7.3)')
6153 & 'ecorrh',i,j,ehbcorr(i,j,i+1,j1,jj,kk,0.72D0,0.32D0)
6155 else if (j1.eq.j) then
6156 C Contacts I-J and I-(J+1) occur simultaneously.
6157 C The system loses extra energy.
6158 c ecorr=ecorr+ehbcorr(i,j,i+1,j,jj,kk,0.60D0,-0.40D0)
6163 c write (iout,*) 'i=',i,' j=',j,' i1=',i1,' j1=',j1,
6164 c & ' jj=',jj,' kk=',kk
6166 C Contacts I-J and (I+1)-J occur simultaneously.
6167 C The system loses extra energy.
6168 c ecorr=ecorr+ehbcorr(i,j,i,j+1,jj,kk,0.60D0,-0.40D0)
6175 c------------------------------------------------------------------------------
6176 subroutine add_hb_contact(ii,jj,itask)
6177 implicit real*8 (a-h,o-z)
6178 include "DIMENSIONS"
6179 include "COMMON.IOUNITS"
6182 parameter (max_cont=maxconts)
6183 parameter (max_dim=26)
6184 include "COMMON.CONTACTS"
6185 double precision zapas(max_dim,maxconts,max_fg_procs),
6186 & zapas_recv(max_dim,maxconts,max_fg_procs)
6187 common /przechowalnia/ zapas
6188 integer i,j,ii,jj,iproc,itask(4),nn
6189 c write (iout,*) "itask",itask
6192 if (iproc.gt.0) then
6193 do j=1,num_cont_hb(ii)
6195 c write (iout,*) "i",ii," j",jj," jjc",jjc
6197 ncont_sent(iproc)=ncont_sent(iproc)+1
6198 nn=ncont_sent(iproc)
6199 zapas(1,nn,iproc)=ii
6200 zapas(2,nn,iproc)=jjc
6201 zapas(3,nn,iproc)=facont_hb(j,ii)
6202 zapas(4,nn,iproc)=ees0p(j,ii)
6203 zapas(5,nn,iproc)=ees0m(j,ii)
6204 zapas(6,nn,iproc)=gacont_hbr(1,j,ii)
6205 zapas(7,nn,iproc)=gacont_hbr(2,j,ii)
6206 zapas(8,nn,iproc)=gacont_hbr(3,j,ii)
6207 zapas(9,nn,iproc)=gacontm_hb1(1,j,ii)
6208 zapas(10,nn,iproc)=gacontm_hb1(2,j,ii)
6209 zapas(11,nn,iproc)=gacontm_hb1(3,j,ii)
6210 zapas(12,nn,iproc)=gacontp_hb1(1,j,ii)
6211 zapas(13,nn,iproc)=gacontp_hb1(2,j,ii)
6212 zapas(14,nn,iproc)=gacontp_hb1(3,j,ii)
6213 zapas(15,nn,iproc)=gacontm_hb2(1,j,ii)
6214 zapas(16,nn,iproc)=gacontm_hb2(2,j,ii)
6215 zapas(17,nn,iproc)=gacontm_hb2(3,j,ii)
6216 zapas(18,nn,iproc)=gacontp_hb2(1,j,ii)
6217 zapas(19,nn,iproc)=gacontp_hb2(2,j,ii)
6218 zapas(20,nn,iproc)=gacontp_hb2(3,j,ii)
6219 zapas(21,nn,iproc)=gacontm_hb3(1,j,ii)
6220 zapas(22,nn,iproc)=gacontm_hb3(2,j,ii)
6221 zapas(23,nn,iproc)=gacontm_hb3(3,j,ii)
6222 zapas(24,nn,iproc)=gacontp_hb3(1,j,ii)
6223 zapas(25,nn,iproc)=gacontp_hb3(2,j,ii)
6224 zapas(26,nn,iproc)=gacontp_hb3(3,j,ii)
6232 c------------------------------------------------------------------------------
6233 subroutine multibody_eello(ecorr,ecorr5,ecorr6,eturn6,n_corr,
6235 C This subroutine calculates multi-body contributions to hydrogen-bonding
6236 implicit real*8 (a-h,o-z)
6237 include 'DIMENSIONS'
6238 include 'COMMON.IOUNITS'
6241 parameter (max_cont=maxconts)
6242 parameter (max_dim=70)
6243 integer source,CorrelType,CorrelID,CorrelType1,CorrelID1,Error
6244 double precision zapas(max_dim,maxconts,max_fg_procs),
6245 & zapas_recv(max_dim,maxconts,max_fg_procs)
6246 common /przechowalnia/ zapas
6247 integer status(MPI_STATUS_SIZE),req(maxconts*2),
6248 & status_array(MPI_STATUS_SIZE,maxconts*2)
6250 include 'COMMON.SETUP'
6251 include 'COMMON.FFIELD'
6252 include 'COMMON.DERIV'
6253 include 'COMMON.LOCAL'
6254 include 'COMMON.INTERACT'
6255 include 'COMMON.CONTACTS'
6256 include 'COMMON.CHAIN'
6257 include 'COMMON.CONTROL'
6258 double precision gx(3),gx1(3)
6259 integer num_cont_hb_old(maxres)
6261 double precision eello4,eello5,eelo6,eello_turn6
6262 external eello4,eello5,eello6,eello_turn6
6263 C Set lprn=.true. for debugging
6268 num_cont_hb_old(i)=num_cont_hb(i)
6272 if (nfgtasks.le.1) goto 30
6274 write (iout,'(a)') 'Contact function values before RECEIVE:'
6276 write (iout,'(2i3,50(1x,i2,f5.2))')
6277 & i,num_cont_hb(i),(jcont_hb(j,i),facont_hb(j,i),
6278 & j=1,num_cont_hb(i))
6282 do i=1,ntask_cont_from
6285 do i=1,ntask_cont_to
6288 c write (iout,*) "ntask_cont_from",ntask_cont_from," ntask_cont_to",
6290 C Make the list of contacts to send to send to other procesors
6291 do i=iturn3_start,iturn3_end
6292 c write (iout,*) "make contact list turn3",i," num_cont",
6294 call add_hb_contact_eello(i,i+2,iturn3_sent_local(1,i))
6296 do i=iturn4_start,iturn4_end
6297 c write (iout,*) "make contact list turn4",i," num_cont",
6299 call add_hb_contact_eello(i,i+3,iturn4_sent_local(1,i))
6303 c write (iout,*) "make contact list longrange",i,ii," num_cont",
6305 do j=1,num_cont_hb(i)
6308 iproc=iint_sent_local(k,jjc,ii)
6309 c write (iout,*) "i",i," j",j," k",k," jjc",jjc," iproc",iproc
6310 if (iproc.ne.0) then
6311 ncont_sent(iproc)=ncont_sent(iproc)+1
6312 nn=ncont_sent(iproc)
6314 zapas(2,nn,iproc)=jjc
6315 zapas(3,nn,iproc)=d_cont(j,i)
6319 zapas(ind,nn,iproc)=grij_hb_cont(kk,j,i)
6324 zapas(ind,nn,iproc)=a_chuj(ll,kk,j,i)
6332 zapas(ind,nn,iproc)=a_chuj_der(mm,ll,kk,jj,j,i)
6343 & "Numbers of contacts to be sent to other processors",
6344 & (ncont_sent(i),i=1,ntask_cont_to)
6345 write (iout,*) "Contacts sent"
6346 do ii=1,ntask_cont_to
6348 iproc=itask_cont_to(ii)
6349 write (iout,*) nn," contacts to processor",iproc,
6350 & " of CONT_TO_COMM group"
6352 write(iout,'(2f5.0,10f10.5)')(zapas(j,i,ii),j=1,10)
6360 CorrelID1=nfgtasks+fg_rank+1
6362 C Receive the numbers of needed contacts from other processors
6363 do ii=1,ntask_cont_from
6364 iproc=itask_cont_from(ii)
6366 call MPI_Irecv(ncont_recv(ii),1,MPI_INTEGER,iproc,CorrelType,
6367 & FG_COMM,req(ireq),IERR)
6369 c write (iout,*) "IRECV ended"
6371 C Send the number of contacts needed by other processors
6372 do ii=1,ntask_cont_to
6373 iproc=itask_cont_to(ii)
6375 call MPI_Isend(ncont_sent(ii),1,MPI_INTEGER,iproc,CorrelType,
6376 & FG_COMM,req(ireq),IERR)
6378 c write (iout,*) "ISEND ended"
6379 c write (iout,*) "number of requests (nn)",ireq
6382 & call MPI_Waitall(ireq,req,status_array,ierr)
6384 c & "Numbers of contacts to be received from other processors",
6385 c & (ncont_recv(i),i=1,ntask_cont_from)
6389 do ii=1,ntask_cont_from
6390 iproc=itask_cont_from(ii)
6392 c write (iout,*) "Receiving",nn," contacts from processor",iproc,
6393 c & " of CONT_TO_COMM group"
6397 call MPI_Irecv(zapas_recv(1,1,ii),nn*max_dim,
6398 & MPI_DOUBLE_PRECISION,iproc,CorrelType1,FG_COMM,req(ireq),IERR)
6399 c write (iout,*) "ireq,req",ireq,req(ireq)
6402 C Send the contacts to processors that need them
6403 do ii=1,ntask_cont_to
6404 iproc=itask_cont_to(ii)
6406 c write (iout,*) nn," contacts to processor",iproc,
6407 c & " of CONT_TO_COMM group"
6410 call MPI_Isend(zapas(1,1,ii),nn*max_dim,MPI_DOUBLE_PRECISION,
6411 & iproc,CorrelType1,FG_COMM,req(ireq),IERR)
6412 c write (iout,*) "ireq,req",ireq,req(ireq)
6414 c write(iout,'(2f5.0,4f10.5)')(zapas(j,i,ii),j=1,5)
6418 c write (iout,*) "number of requests (contacts)",ireq
6419 c write (iout,*) "req",(req(i),i=1,4)
6422 & call MPI_Waitall(ireq,req,status_array,ierr)
6423 do iii=1,ntask_cont_from
6424 iproc=itask_cont_from(iii)
6427 write (iout,*) "Received",nn," contacts from processor",iproc,
6428 & " of CONT_FROM_COMM group"
6431 write(iout,'(2f5.0,10f10.5)')(zapas_recv(j,i,iii),j=1,10)
6436 ii=zapas_recv(1,i,iii)
6437 c Flag the received contacts to prevent double-counting
6438 jj=-zapas_recv(2,i,iii)
6439 c write (iout,*) "iii",iii," i",i," ii",ii," jj",jj
6441 nnn=num_cont_hb(ii)+1
6444 d_cont(nnn,ii)=zapas_recv(3,i,iii)
6448 grij_hb_cont(kk,nnn,ii)=zapas_recv(ind,i,iii)
6453 a_chuj(ll,kk,nnn,ii)=zapas_recv(ind,i,iii)
6461 a_chuj_der(mm,ll,kk,jj,nnn,ii)=zapas_recv(ind,i,iii)
6470 write (iout,'(a)') 'Contact function values after receive:'
6472 write (iout,'(2i3,50(1x,i3,5f6.3))')
6473 & i,num_cont_hb(i),(jcont_hb(j,i),d_cont(j,i),
6474 & ((a_chuj(ll,kk,j,i),ll=1,2),kk=1,2),j=1,num_cont_hb(i))
6481 write (iout,'(a)') 'Contact function values:'
6483 write (iout,'(2i3,50(1x,i2,5f6.3))')
6484 & i,num_cont_hb(i),(jcont_hb(j,i),d_cont(j,i),
6485 & ((a_chuj(ll,kk,j,i),ll=1,2),kk=1,2),j=1,num_cont_hb(i))
6491 C Remove the loop below after debugging !!!
6498 C Calculate the dipole-dipole interaction energies
6499 if (wcorr6.gt.0.0d0 .or. wturn6.gt.0.0d0) then
6500 do i=iatel_s,iatel_e+1
6501 num_conti=num_cont_hb(i)
6510 C Calculate the local-electrostatic correlation terms
6511 c write (iout,*) "gradcorr5 in eello5 before loop"
6513 c write (iout,'(i5,3f10.5)')
6514 c & iii,(gradcorr5(jjj,iii),jjj=1,3)
6516 do i=min0(iatel_s,iturn4_start),max0(iatel_e+1,iturn3_end+1)
6517 c write (iout,*) "corr loop i",i
6519 num_conti=num_cont_hb(i)
6520 num_conti1=num_cont_hb(i+1)
6527 c write (iout,*) 'i=',i,' j=',j,' i1=',i1,' j1=',j1,
6528 c & ' jj=',jj,' kk=',kk
6529 c if (j1.eq.j+1 .or. j1.eq.j-1) then
6530 if ((j.gt.0 .and. j1.gt.0 .or. j.gt.0 .and. j1.lt.0
6531 & .or. j.lt.0 .and. j1.gt.0) .and.
6532 & (jp1.eq.jp+1 .or. jp1.eq.jp-1)) then
6533 C Contacts I-J and (I+1)-(J+1) or (I+1)-(J-1) occur simultaneously.
6534 C The system gains extra energy.
6536 sqd1=dsqrt(d_cont(jj,i))
6537 sqd2=dsqrt(d_cont(kk,i1))
6538 sred_geom = sqd1*sqd2
6539 IF (sred_geom.lt.cutoff_corr) THEN
6540 call gcont(sred_geom,r0_corr,1.0D0,delt_corr,
6542 cd write (iout,*) 'i=',i,' j=',jp,' i1=',i1,' j1=',jp1,
6543 cd & ' jj=',jj,' kk=',kk
6544 fac_prim1=0.5d0*sqd2/sqd1*fprimcont
6545 fac_prim2=0.5d0*sqd1/sqd2*fprimcont
6547 g_contij(l,1)=fac_prim1*grij_hb_cont(l,jj,i)
6548 g_contij(l,2)=fac_prim2*grij_hb_cont(l,kk,i1)
6551 cd write (iout,*) 'sred_geom=',sred_geom,
6552 cd & ' ekont=',ekont,' fprim=',fprimcont,
6553 cd & ' fac_prim1',fac_prim1,' fac_prim2',fac_prim2
6554 cd write (iout,*) "g_contij",g_contij
6555 cd write (iout,*) "grij_hb_cont i",grij_hb_cont(:,jj,i)
6556 cd write (iout,*) "grij_hb_cont i1",grij_hb_cont(:,jj,i1)
6557 call calc_eello(i,jp,i+1,jp1,jj,kk)
6558 if (wcorr4.gt.0.0d0)
6559 & ecorr=ecorr+eello4(i,jp,i+1,jp1,jj,kk)
6560 if (energy_dec.and.wcorr4.gt.0.0d0)
6561 1 write (iout,'(a6,4i5,0pf7.3)')
6562 2 'ecorr4',i,j,i+1,j1,eello4(i,jp,i+1,jp1,jj,kk)
6563 c write (iout,*) "gradcorr5 before eello5"
6565 c write (iout,'(i5,3f10.5)')
6566 c & iii,(gradcorr5(jjj,iii),jjj=1,3)
6568 if (wcorr5.gt.0.0d0)
6569 & ecorr5=ecorr5+eello5(i,jp,i+1,jp1,jj,kk)
6570 c write (iout,*) "gradcorr5 after eello5"
6572 c write (iout,'(i5,3f10.5)')
6573 c & iii,(gradcorr5(jjj,iii),jjj=1,3)
6575 if (energy_dec.and.wcorr5.gt.0.0d0)
6576 1 write (iout,'(a6,4i5,0pf7.3)')
6577 2 'ecorr5',i,j,i+1,j1,eello5(i,jp,i+1,jp1,jj,kk)
6578 cd write(2,*)'wcorr6',wcorr6,' wturn6',wturn6
6579 cd write(2,*)'ijkl',i,jp,i+1,jp1
6580 if (wcorr6.gt.0.0d0 .and. (jp.ne.i+4 .or. jp1.ne.i+3
6581 & .or. wturn6.eq.0.0d0))then
6582 cd write (iout,*) '******ecorr6: i,j,i+1,j1',i,j,i+1,j1
6583 ecorr6=ecorr6+eello6(i,jp,i+1,jp1,jj,kk)
6584 if (energy_dec) write (iout,'(a6,4i5,0pf7.3)')
6585 1 'ecorr6',i,j,i+1,j1,eello6(i,jp,i+1,jp1,jj,kk)
6586 cd write (iout,*) 'ecorr',ecorr,' ecorr5=',ecorr5,
6587 cd & 'ecorr6=',ecorr6
6588 cd write (iout,'(4e15.5)') sred_geom,
6589 cd & dabs(eello4(i,jp,i+1,jp1,jj,kk)),
6590 cd & dabs(eello5(i,jp,i+1,jp1,jj,kk)),
6591 cd & dabs(eello6(i,jp,i+1,jp1,jj,kk))
6592 else if (wturn6.gt.0.0d0
6593 & .and. (jp.eq.i+4 .and. jp1.eq.i+3)) then
6594 cd write (iout,*) '******eturn6: i,j,i+1,j1',i,jip,i+1,jp1
6595 eturn6=eturn6+eello_turn6(i,jj,kk)
6596 if (energy_dec) write (iout,'(a6,4i5,0pf7.3)')
6597 1 'eturn6',i,j,i+1,j1,eello_turn6(i,jj,kk)
6598 cd write (2,*) 'multibody_eello:eturn6',eturn6
6607 num_cont_hb(i)=num_cont_hb_old(i)
6609 c write (iout,*) "gradcorr5 in eello5"
6611 c write (iout,'(i5,3f10.5)')
6612 c & iii,(gradcorr5(jjj,iii),jjj=1,3)
6616 c------------------------------------------------------------------------------
6617 subroutine add_hb_contact_eello(ii,jj,itask)
6618 implicit real*8 (a-h,o-z)
6619 include "DIMENSIONS"
6620 include "COMMON.IOUNITS"
6623 parameter (max_cont=maxconts)
6624 parameter (max_dim=70)
6625 include "COMMON.CONTACTS"
6626 double precision zapas(max_dim,maxconts,max_fg_procs),
6627 & zapas_recv(max_dim,maxconts,max_fg_procs)
6628 common /przechowalnia/ zapas
6629 integer i,j,ii,jj,iproc,itask(4),nn
6630 c write (iout,*) "itask",itask
6633 if (iproc.gt.0) then
6634 do j=1,num_cont_hb(ii)
6636 c write (iout,*) "send turns i",ii," j",jj," jjc",jjc
6638 ncont_sent(iproc)=ncont_sent(iproc)+1
6639 nn=ncont_sent(iproc)
6640 zapas(1,nn,iproc)=ii
6641 zapas(2,nn,iproc)=jjc
6642 zapas(3,nn,iproc)=d_cont(j,ii)
6646 zapas(ind,nn,iproc)=grij_hb_cont(kk,j,ii)
6651 zapas(ind,nn,iproc)=a_chuj(ll,kk,j,ii)
6659 zapas(ind,nn,iproc)=a_chuj_der(mm,ll,kk,jj,j,ii)
6671 c------------------------------------------------------------------------------
6672 double precision function ehbcorr(i,j,k,l,jj,kk,coeffp,coeffm)
6673 implicit real*8 (a-h,o-z)
6674 include 'DIMENSIONS'
6675 include 'COMMON.IOUNITS'
6676 include 'COMMON.DERIV'
6677 include 'COMMON.INTERACT'
6678 include 'COMMON.CONTACTS'
6679 double precision gx(3),gx1(3)
6689 ees=-(coeffp*ees0pij*ees0pkl+coeffm*ees0mij*ees0mkl)
6690 cd ees=-(coeffp*ees0pkl+coeffm*ees0mkl)
6691 C Following 4 lines for diagnostics.
6696 c write (iout,'(2(a,2i3,a,f10.5,a,2f10.5),a,f10.5,a,$)')
6697 c & 'Contacts ',i,j,
6698 c & ' eij',eij,' eesij',ees0pij,ees0mij,' and ',k,l
6699 c & ,' fcont ',ekl,' eeskl',ees0pkl,ees0mkl,' energy=',ekont*ees,
6701 C Calculate the multi-body contribution to energy.
6702 c ecorr=ecorr+ekont*ees
6703 C Calculate multi-body contributions to the gradient.
6704 coeffpees0pij=coeffp*ees0pij
6705 coeffmees0mij=coeffm*ees0mij
6706 coeffpees0pkl=coeffp*ees0pkl
6707 coeffmees0mkl=coeffm*ees0mkl
6709 cgrad ghalfi=ees*ekl*gacont_hbr(ll,jj,i)
6710 gradcorr(ll,i)=gradcorr(ll,i)!+0.5d0*ghalfi
6711 & -ekont*(coeffpees0pkl*gacontp_hb1(ll,jj,i)+
6712 & coeffmees0mkl*gacontm_hb1(ll,jj,i))
6713 gradcorr(ll,j)=gradcorr(ll,j)!+0.5d0*ghalfi
6714 & -ekont*(coeffpees0pkl*gacontp_hb2(ll,jj,i)+
6715 & coeffmees0mkl*gacontm_hb2(ll,jj,i))
6716 cgrad ghalfk=ees*eij*gacont_hbr(ll,kk,k)
6717 gradcorr(ll,k)=gradcorr(ll,k)!+0.5d0*ghalfk
6718 & -ekont*(coeffpees0pij*gacontp_hb1(ll,kk,k)+
6719 & coeffmees0mij*gacontm_hb1(ll,kk,k))
6720 gradcorr(ll,l)=gradcorr(ll,l)!+0.5d0*ghalfk
6721 & -ekont*(coeffpees0pij*gacontp_hb2(ll,kk,k)+
6722 & coeffmees0mij*gacontm_hb2(ll,kk,k))
6723 gradlongij=ees*ekl*gacont_hbr(ll,jj,i)-
6724 & ekont*(coeffpees0pkl*gacontp_hb3(ll,jj,i)+
6725 & coeffmees0mkl*gacontm_hb3(ll,jj,i))
6726 gradcorr_long(ll,j)=gradcorr_long(ll,j)+gradlongij
6727 gradcorr_long(ll,i)=gradcorr_long(ll,i)-gradlongij
6728 gradlongkl=ees*eij*gacont_hbr(ll,kk,k)-
6729 & ekont*(coeffpees0pij*gacontp_hb3(ll,kk,k)+
6730 & coeffmees0mij*gacontm_hb3(ll,kk,k))
6731 gradcorr_long(ll,l)=gradcorr_long(ll,l)+gradlongkl
6732 gradcorr_long(ll,k)=gradcorr_long(ll,k)-gradlongkl
6733 c write (iout,'(2f10.5,2x,$)') gradlongij,gradlongkl
6738 cgrad gradcorr(ll,m)=gradcorr(ll,m)+
6739 cgrad & ees*ekl*gacont_hbr(ll,jj,i)-
6740 cgrad & ekont*(coeffp*ees0pkl*gacontp_hb3(ll,jj,i)+
6741 cgrad & coeffm*ees0mkl*gacontm_hb3(ll,jj,i))
6746 cgrad gradcorr(ll,m)=gradcorr(ll,m)+
6747 cgrad & ees*eij*gacont_hbr(ll,kk,k)-
6748 cgrad & ekont*(coeffp*ees0pij*gacontp_hb3(ll,kk,k)+
6749 cgrad & coeffm*ees0mij*gacontm_hb3(ll,kk,k))
6752 c write (iout,*) "ehbcorr",ekont*ees
6757 C---------------------------------------------------------------------------
6758 subroutine dipole(i,j,jj)
6759 implicit real*8 (a-h,o-z)
6760 include 'DIMENSIONS'
6761 include 'COMMON.IOUNITS'
6762 include 'COMMON.CHAIN'
6763 include 'COMMON.FFIELD'
6764 include 'COMMON.DERIV'
6765 include 'COMMON.INTERACT'
6766 include 'COMMON.CONTACTS'
6767 include 'COMMON.TORSION'
6768 include 'COMMON.VAR'
6769 include 'COMMON.GEO'
6770 dimension dipi(2,2),dipj(2,2),dipderi(2),dipderj(2),auxvec(2),
6772 iti1 = itortyp(itype(i+1))
6773 if (j.lt.nres-1) then
6774 itj1 = itortyp(itype(j+1))
6779 dipi(iii,1)=Ub2(iii,i)
6780 dipderi(iii)=Ub2der(iii,i)
6781 dipi(iii,2)=b1(iii,iti1)
6782 dipj(iii,1)=Ub2(iii,j)
6783 dipderj(iii)=Ub2der(iii,j)
6784 dipj(iii,2)=b1(iii,itj1)
6788 call matvec2(a_chuj(1,1,jj,i),dipj(1,iii),auxvec(1))
6791 dip(kkk,jj,i)=scalar2(dipi(1,jjj),auxvec(1))
6798 call matvec2(a_chuj_der(1,1,lll,kkk,jj,i),dipj(1,iii),
6802 dipderx(lll,kkk,mmm,jj,i)=scalar2(dipi(1,jjj),auxvec(1))
6807 call transpose2(a_chuj(1,1,jj,i),auxmat(1,1))
6808 call matvec2(auxmat(1,1),dipderi(1),auxvec(1))
6810 dipderg(iii,jj,i)=scalar2(auxvec(1),dipj(1,iii))
6812 call matvec2(a_chuj(1,1,jj,i),dipderj(1),auxvec(1))
6814 dipderg(iii+2,jj,i)=scalar2(auxvec(1),dipi(1,iii))
6819 C---------------------------------------------------------------------------
6820 subroutine calc_eello(i,j,k,l,jj,kk)
6822 C This subroutine computes matrices and vectors needed to calculate
6823 C the fourth-, fifth-, and sixth-order local-electrostatic terms.
6825 implicit real*8 (a-h,o-z)
6826 include 'DIMENSIONS'
6827 include 'COMMON.IOUNITS'
6828 include 'COMMON.CHAIN'
6829 include 'COMMON.DERIV'
6830 include 'COMMON.INTERACT'
6831 include 'COMMON.CONTACTS'
6832 include 'COMMON.TORSION'
6833 include 'COMMON.VAR'
6834 include 'COMMON.GEO'
6835 include 'COMMON.FFIELD'
6836 double precision aa1(2,2),aa2(2,2),aa1t(2,2),aa2t(2,2),
6837 & aa1tder(2,2,3,5),aa2tder(2,2,3,5),auxmat(2,2)
6840 cd write (iout,*) 'calc_eello: i=',i,' j=',j,' k=',k,' l=',l,
6841 cd & ' jj=',jj,' kk=',kk
6842 cd if (i.ne.2 .or. j.ne.4 .or. k.ne.3 .or. l.ne.5) return
6843 cd write (iout,*) "a_chujij",((a_chuj(iii,jjj,jj,i),iii=1,2),jjj=1,2)
6844 cd write (iout,*) "a_chujkl",((a_chuj(iii,jjj,kk,k),iii=1,2),jjj=1,2)
6847 aa1(iii,jjj)=a_chuj(iii,jjj,jj,i)
6848 aa2(iii,jjj)=a_chuj(iii,jjj,kk,k)
6851 call transpose2(aa1(1,1),aa1t(1,1))
6852 call transpose2(aa2(1,1),aa2t(1,1))
6855 call transpose2(a_chuj_der(1,1,lll,kkk,jj,i),
6856 & aa1tder(1,1,lll,kkk))
6857 call transpose2(a_chuj_der(1,1,lll,kkk,kk,k),
6858 & aa2tder(1,1,lll,kkk))
6862 C parallel orientation of the two CA-CA-CA frames.
6864 iti=itortyp(itype(i))
6868 itk1=itortyp(itype(k+1))
6869 itj=itortyp(itype(j))
6870 if (l.lt.nres-1) then
6871 itl1=itortyp(itype(l+1))
6875 C A1 kernel(j+1) A2T
6877 cd write (iout,'(3f10.5,5x,3f10.5)')
6878 cd & (EUg(iii,jjj,k),jjj=1,2),(EUg(iii,jjj,l),jjj=1,2)
6880 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
6881 & aa2tder(1,1,1,1),1,.false.,EUg(1,1,l),EUgder(1,1,l),
6882 & AEA(1,1,1),AEAderg(1,1,1),AEAderx(1,1,1,1,1,1))
6883 C Following matrices are needed only for 6-th order cumulants
6884 IF (wcorr6.gt.0.0d0) THEN
6885 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
6886 & aa2tder(1,1,1,1),1,.false.,EUgC(1,1,l),EUgCder(1,1,l),
6887 & AECA(1,1,1),AECAderg(1,1,1),AECAderx(1,1,1,1,1,1))
6888 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
6889 & aa2tder(1,1,1,1),2,.false.,Ug2DtEUg(1,1,l),
6890 & Ug2DtEUgder(1,1,1,l),ADtEA(1,1,1),ADtEAderg(1,1,1,1),
6891 & ADtEAderx(1,1,1,1,1,1))
6893 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
6894 & aa2tder(1,1,1,1),2,.false.,DtUg2EUg(1,1,l),
6895 & DtUg2EUgder(1,1,1,l),ADtEA1(1,1,1),ADtEA1derg(1,1,1,1),
6896 & ADtEA1derx(1,1,1,1,1,1))
6898 C End 6-th order cumulants
6901 cd write (2,*) 'In calc_eello6'
6903 cd write (2,*) 'iii=',iii
6905 cd write (2,*) 'kkk=',kkk
6907 cd write (2,'(3(2f10.5),5x)')
6908 cd & ((ADtEA1derx(jjj,mmm,lll,kkk,iii,1),mmm=1,2),lll=1,3)
6913 call transpose2(EUgder(1,1,k),auxmat(1,1))
6914 call matmat2(auxmat(1,1),AEA(1,1,1),EAEAderg(1,1,1,1))
6915 call transpose2(EUg(1,1,k),auxmat(1,1))
6916 call matmat2(auxmat(1,1),AEA(1,1,1),EAEA(1,1,1))
6917 call matmat2(auxmat(1,1),AEAderg(1,1,1),EAEAderg(1,1,2,1))
6921 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,1),
6922 & EAEAderx(1,1,lll,kkk,iii,1))
6926 C A1T kernel(i+1) A2
6927 call kernel(aa1t(1,1),aa2(1,1),aa1tder(1,1,1,1),
6928 & a_chuj_der(1,1,1,1,kk,k),1,.false.,EUg(1,1,k),EUgder(1,1,k),
6929 & AEA(1,1,2),AEAderg(1,1,2),AEAderx(1,1,1,1,1,2))
6930 C Following matrices are needed only for 6-th order cumulants
6931 IF (wcorr6.gt.0.0d0) THEN
6932 call kernel(aa1t(1,1),aa2(1,1),aa1tder(1,1,1,1),
6933 & a_chuj_der(1,1,1,1,kk,k),1,.false.,EUgC(1,1,k),EUgCder(1,1,k),
6934 & AECA(1,1,2),AECAderg(1,1,2),AECAderx(1,1,1,1,1,2))
6935 call kernel(aa1t(1,1),aa2(1,1),aa1tder(1,1,1,1),
6936 & a_chuj_der(1,1,1,1,kk,k),2,.false.,Ug2DtEUg(1,1,k),
6937 & Ug2DtEUgder(1,1,1,k),ADtEA(1,1,2),ADtEAderg(1,1,1,2),
6938 & ADtEAderx(1,1,1,1,1,2))
6939 call kernel(aa1t(1,1),aa2(1,1),aa1tder(1,1,1,1),
6940 & a_chuj_der(1,1,1,1,kk,k),2,.false.,DtUg2EUg(1,1,k),
6941 & DtUg2EUgder(1,1,1,k),ADtEA1(1,1,2),ADtEA1derg(1,1,1,2),
6942 & ADtEA1derx(1,1,1,1,1,2))
6944 C End 6-th order cumulants
6945 call transpose2(EUgder(1,1,l),auxmat(1,1))
6946 call matmat2(auxmat(1,1),AEA(1,1,2),EAEAderg(1,1,1,2))
6947 call transpose2(EUg(1,1,l),auxmat(1,1))
6948 call matmat2(auxmat(1,1),AEA(1,1,2),EAEA(1,1,2))
6949 call matmat2(auxmat(1,1),AEAderg(1,1,2),EAEAderg(1,1,2,2))
6953 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,2),
6954 & EAEAderx(1,1,lll,kkk,iii,2))
6959 C Calculate the vectors and their derivatives in virtual-bond dihedral angles.
6960 C They are needed only when the fifth- or the sixth-order cumulants are
6962 IF (wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0) THEN
6963 call transpose2(AEA(1,1,1),auxmat(1,1))
6964 call matvec2(auxmat(1,1),b1(1,iti),AEAb1(1,1,1))
6965 call matvec2(auxmat(1,1),Ub2(1,i),AEAb2(1,1,1))
6966 call matvec2(auxmat(1,1),Ub2der(1,i),AEAb2derg(1,2,1,1))
6967 call transpose2(AEAderg(1,1,1),auxmat(1,1))
6968 call matvec2(auxmat(1,1),b1(1,iti),AEAb1derg(1,1,1))
6969 call matvec2(auxmat(1,1),Ub2(1,i),AEAb2derg(1,1,1,1))
6970 call matvec2(AEA(1,1,1),b1(1,itk1),AEAb1(1,2,1))
6971 call matvec2(AEAderg(1,1,1),b1(1,itk1),AEAb1derg(1,2,1))
6972 call matvec2(AEA(1,1,1),Ub2(1,k+1),AEAb2(1,2,1))
6973 call matvec2(AEAderg(1,1,1),Ub2(1,k+1),AEAb2derg(1,1,2,1))
6974 call matvec2(AEA(1,1,1),Ub2der(1,k+1),AEAb2derg(1,2,2,1))
6975 call transpose2(AEA(1,1,2),auxmat(1,1))
6976 call matvec2(auxmat(1,1),b1(1,itj),AEAb1(1,1,2))
6977 call matvec2(auxmat(1,1),Ub2(1,j),AEAb2(1,1,2))
6978 call matvec2(auxmat(1,1),Ub2der(1,j),AEAb2derg(1,2,1,2))
6979 call transpose2(AEAderg(1,1,2),auxmat(1,1))
6980 call matvec2(auxmat(1,1),b1(1,itj),AEAb1derg(1,1,2))
6981 call matvec2(auxmat(1,1),Ub2(1,j),AEAb2derg(1,1,1,2))
6982 call matvec2(AEA(1,1,2),b1(1,itl1),AEAb1(1,2,2))
6983 call matvec2(AEAderg(1,1,2),b1(1,itl1),AEAb1derg(1,2,2))
6984 call matvec2(AEA(1,1,2),Ub2(1,l+1),AEAb2(1,2,2))
6985 call matvec2(AEAderg(1,1,2),Ub2(1,l+1),AEAb2derg(1,1,2,2))
6986 call matvec2(AEA(1,1,2),Ub2der(1,l+1),AEAb2derg(1,2,2,2))
6987 C Calculate the Cartesian derivatives of the vectors.
6991 call transpose2(AEAderx(1,1,lll,kkk,iii,1),auxmat(1,1))
6992 call matvec2(auxmat(1,1),b1(1,iti),
6993 & AEAb1derx(1,lll,kkk,iii,1,1))
6994 call matvec2(auxmat(1,1),Ub2(1,i),
6995 & AEAb2derx(1,lll,kkk,iii,1,1))
6996 call matvec2(AEAderx(1,1,lll,kkk,iii,1),b1(1,itk1),
6997 & AEAb1derx(1,lll,kkk,iii,2,1))
6998 call matvec2(AEAderx(1,1,lll,kkk,iii,1),Ub2(1,k+1),
6999 & AEAb2derx(1,lll,kkk,iii,2,1))
7000 call transpose2(AEAderx(1,1,lll,kkk,iii,2),auxmat(1,1))
7001 call matvec2(auxmat(1,1),b1(1,itj),
7002 & AEAb1derx(1,lll,kkk,iii,1,2))
7003 call matvec2(auxmat(1,1),Ub2(1,j),
7004 & AEAb2derx(1,lll,kkk,iii,1,2))
7005 call matvec2(AEAderx(1,1,lll,kkk,iii,2),b1(1,itl1),
7006 & AEAb1derx(1,lll,kkk,iii,2,2))
7007 call matvec2(AEAderx(1,1,lll,kkk,iii,2),Ub2(1,l+1),
7008 & AEAb2derx(1,lll,kkk,iii,2,2))
7015 C Antiparallel orientation of the two CA-CA-CA frames.
7017 iti=itortyp(itype(i))
7021 itk1=itortyp(itype(k+1))
7022 itl=itortyp(itype(l))
7023 itj=itortyp(itype(j))
7024 if (j.lt.nres-1) then
7025 itj1=itortyp(itype(j+1))
7029 C A2 kernel(j-1)T A1T
7030 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
7031 & aa2tder(1,1,1,1),1,.true.,EUg(1,1,j),EUgder(1,1,j),
7032 & AEA(1,1,1),AEAderg(1,1,1),AEAderx(1,1,1,1,1,1))
7033 C Following matrices are needed only for 6-th order cumulants
7034 IF (wcorr6.gt.0.0d0 .or. (wturn6.gt.0.0d0 .and.
7035 & j.eq.i+4 .and. l.eq.i+3)) THEN
7036 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
7037 & aa2tder(1,1,1,1),1,.true.,EUgC(1,1,j),EUgCder(1,1,j),
7038 & AECA(1,1,1),AECAderg(1,1,1),AECAderx(1,1,1,1,1,1))
7039 call kernel(aa2(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
7040 & aa2tder(1,1,1,1),2,.true.,Ug2DtEUg(1,1,j),
7041 & Ug2DtEUgder(1,1,1,j),ADtEA(1,1,1),ADtEAderg(1,1,1,1),
7042 & ADtEAderx(1,1,1,1,1,1))
7043 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
7044 & aa2tder(1,1,1,1),2,.true.,DtUg2EUg(1,1,j),
7045 & DtUg2EUgder(1,1,1,j),ADtEA1(1,1,1),ADtEA1derg(1,1,1,1),
7046 & ADtEA1derx(1,1,1,1,1,1))
7048 C End 6-th order cumulants
7049 call transpose2(EUgder(1,1,k),auxmat(1,1))
7050 call matmat2(auxmat(1,1),AEA(1,1,1),EAEAderg(1,1,1,1))
7051 call transpose2(EUg(1,1,k),auxmat(1,1))
7052 call matmat2(auxmat(1,1),AEA(1,1,1),EAEA(1,1,1))
7053 call matmat2(auxmat(1,1),AEAderg(1,1,1),EAEAderg(1,1,2,1))
7057 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,1),
7058 & EAEAderx(1,1,lll,kkk,iii,1))
7062 C A2T kernel(i+1)T A1
7063 call kernel(aa2t(1,1),aa1(1,1),aa2tder(1,1,1,1),
7064 & a_chuj_der(1,1,1,1,jj,i),1,.true.,EUg(1,1,k),EUgder(1,1,k),
7065 & AEA(1,1,2),AEAderg(1,1,2),AEAderx(1,1,1,1,1,2))
7066 C Following matrices are needed only for 6-th order cumulants
7067 IF (wcorr6.gt.0.0d0 .or. (wturn6.gt.0.0d0 .and.
7068 & j.eq.i+4 .and. l.eq.i+3)) THEN
7069 call kernel(aa2t(1,1),aa1(1,1),aa2tder(1,1,1,1),
7070 & a_chuj_der(1,1,1,1,jj,i),1,.true.,EUgC(1,1,k),EUgCder(1,1,k),
7071 & AECA(1,1,2),AECAderg(1,1,2),AECAderx(1,1,1,1,1,2))
7072 call kernel(aa2t(1,1),aa1(1,1),aa2tder(1,1,1,1),
7073 & a_chuj_der(1,1,1,1,jj,i),2,.true.,Ug2DtEUg(1,1,k),
7074 & Ug2DtEUgder(1,1,1,k),ADtEA(1,1,2),ADtEAderg(1,1,1,2),
7075 & ADtEAderx(1,1,1,1,1,2))
7076 call kernel(aa2t(1,1),aa1(1,1),aa2tder(1,1,1,1),
7077 & a_chuj_der(1,1,1,1,jj,i),2,.true.,DtUg2EUg(1,1,k),
7078 & DtUg2EUgder(1,1,1,k),ADtEA1(1,1,2),ADtEA1derg(1,1,1,2),
7079 & ADtEA1derx(1,1,1,1,1,2))
7081 C End 6-th order cumulants
7082 call transpose2(EUgder(1,1,j),auxmat(1,1))
7083 call matmat2(auxmat(1,1),AEA(1,1,1),EAEAderg(1,1,2,2))
7084 call transpose2(EUg(1,1,j),auxmat(1,1))
7085 call matmat2(auxmat(1,1),AEA(1,1,2),EAEA(1,1,2))
7086 call matmat2(auxmat(1,1),AEAderg(1,1,2),EAEAderg(1,1,2,2))
7090 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,2),
7091 & EAEAderx(1,1,lll,kkk,iii,2))
7096 C Calculate the vectors and their derivatives in virtual-bond dihedral angles.
7097 C They are needed only when the fifth- or the sixth-order cumulants are
7099 IF (wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0 .or.
7100 & (wturn6.gt.0.0d0 .and. j.eq.i+4 .and. l.eq.i+3)) THEN
7101 call transpose2(AEA(1,1,1),auxmat(1,1))
7102 call matvec2(auxmat(1,1),b1(1,iti),AEAb1(1,1,1))
7103 call matvec2(auxmat(1,1),Ub2(1,i),AEAb2(1,1,1))
7104 call matvec2(auxmat(1,1),Ub2der(1,i),AEAb2derg(1,2,1,1))
7105 call transpose2(AEAderg(1,1,1),auxmat(1,1))
7106 call matvec2(auxmat(1,1),b1(1,iti),AEAb1derg(1,1,1))
7107 call matvec2(auxmat(1,1),Ub2(1,i),AEAb2derg(1,1,1,1))
7108 call matvec2(AEA(1,1,1),b1(1,itk1),AEAb1(1,2,1))
7109 call matvec2(AEAderg(1,1,1),b1(1,itk1),AEAb1derg(1,2,1))
7110 call matvec2(AEA(1,1,1),Ub2(1,k+1),AEAb2(1,2,1))
7111 call matvec2(AEAderg(1,1,1),Ub2(1,k+1),AEAb2derg(1,1,2,1))
7112 call matvec2(AEA(1,1,1),Ub2der(1,k+1),AEAb2derg(1,2,2,1))
7113 call transpose2(AEA(1,1,2),auxmat(1,1))
7114 call matvec2(auxmat(1,1),b1(1,itj1),AEAb1(1,1,2))
7115 call matvec2(auxmat(1,1),Ub2(1,l),AEAb2(1,1,2))
7116 call matvec2(auxmat(1,1),Ub2der(1,l),AEAb2derg(1,2,1,2))
7117 call transpose2(AEAderg(1,1,2),auxmat(1,1))
7118 call matvec2(auxmat(1,1),b1(1,itl),AEAb1(1,1,2))
7119 call matvec2(auxmat(1,1),Ub2(1,l),AEAb2derg(1,1,1,2))
7120 call matvec2(AEA(1,1,2),b1(1,itj1),AEAb1(1,2,2))
7121 call matvec2(AEAderg(1,1,2),b1(1,itj1),AEAb1derg(1,2,2))
7122 call matvec2(AEA(1,1,2),Ub2(1,j),AEAb2(1,2,2))
7123 call matvec2(AEAderg(1,1,2),Ub2(1,j),AEAb2derg(1,1,2,2))
7124 call matvec2(AEA(1,1,2),Ub2der(1,j),AEAb2derg(1,2,2,2))
7125 C Calculate the Cartesian derivatives of the vectors.
7129 call transpose2(AEAderx(1,1,lll,kkk,iii,1),auxmat(1,1))
7130 call matvec2(auxmat(1,1),b1(1,iti),
7131 & AEAb1derx(1,lll,kkk,iii,1,1))
7132 call matvec2(auxmat(1,1),Ub2(1,i),
7133 & AEAb2derx(1,lll,kkk,iii,1,1))
7134 call matvec2(AEAderx(1,1,lll,kkk,iii,1),b1(1,itk1),
7135 & AEAb1derx(1,lll,kkk,iii,2,1))
7136 call matvec2(AEAderx(1,1,lll,kkk,iii,1),Ub2(1,k+1),
7137 & AEAb2derx(1,lll,kkk,iii,2,1))
7138 call transpose2(AEAderx(1,1,lll,kkk,iii,2),auxmat(1,1))
7139 call matvec2(auxmat(1,1),b1(1,itl),
7140 & AEAb1derx(1,lll,kkk,iii,1,2))
7141 call matvec2(auxmat(1,1),Ub2(1,l),
7142 & AEAb2derx(1,lll,kkk,iii,1,2))
7143 call matvec2(AEAderx(1,1,lll,kkk,iii,2),b1(1,itj1),
7144 & AEAb1derx(1,lll,kkk,iii,2,2))
7145 call matvec2(AEAderx(1,1,lll,kkk,iii,2),Ub2(1,j),
7146 & AEAb2derx(1,lll,kkk,iii,2,2))
7155 C---------------------------------------------------------------------------
7156 subroutine kernel(aa1,aa2t,aa1derx,aa2tderx,nderg,transp,
7157 & KK,KKderg,AKA,AKAderg,AKAderx)
7161 double precision aa1(2,2),aa2t(2,2),aa1derx(2,2,3,5),
7162 & aa2tderx(2,2,3,5),KK(2,2),KKderg(2,2,nderg),AKA(2,2),
7163 & AKAderg(2,2,nderg),AKAderx(2,2,3,5,2)
7168 call prodmat3(aa1(1,1),aa2t(1,1),KK(1,1),transp,AKA(1,1))
7170 call prodmat3(aa1(1,1),aa2t(1,1),KKderg(1,1,iii),transp,
7173 cd if (lprn) write (2,*) 'In kernel'
7175 cd if (lprn) write (2,*) 'kkk=',kkk
7177 call prodmat3(aa1derx(1,1,lll,kkk),aa2t(1,1),
7178 & KK(1,1),transp,AKAderx(1,1,lll,kkk,1))
7180 cd write (2,*) 'lll=',lll
7181 cd write (2,*) 'iii=1'
7183 cd write (2,'(3(2f10.5),5x)')
7184 cd & (AKAderx(jjj,mmm,lll,kkk,1),mmm=1,2)
7187 call prodmat3(aa1(1,1),aa2tderx(1,1,lll,kkk),
7188 & KK(1,1),transp,AKAderx(1,1,lll,kkk,2))
7190 cd write (2,*) 'lll=',lll
7191 cd write (2,*) 'iii=2'
7193 cd write (2,'(3(2f10.5),5x)')
7194 cd & (AKAderx(jjj,mmm,lll,kkk,2),mmm=1,2)
7201 C---------------------------------------------------------------------------
7202 double precision function eello4(i,j,k,l,jj,kk)
7203 implicit real*8 (a-h,o-z)
7204 include 'DIMENSIONS'
7205 include 'COMMON.IOUNITS'
7206 include 'COMMON.CHAIN'
7207 include 'COMMON.DERIV'
7208 include 'COMMON.INTERACT'
7209 include 'COMMON.CONTACTS'
7210 include 'COMMON.TORSION'
7211 include 'COMMON.VAR'
7212 include 'COMMON.GEO'
7213 double precision pizda(2,2),ggg1(3),ggg2(3)
7214 cd if (i.ne.1 .or. j.ne.5 .or. k.ne.2 .or.l.ne.4) then
7218 cd print *,'eello4:',i,j,k,l,jj,kk
7219 cd write (2,*) 'i',i,' j',j,' k',k,' l',l
7220 cd call checkint4(i,j,k,l,jj,kk,eel4_num)
7221 cold eij=facont_hb(jj,i)
7222 cold ekl=facont_hb(kk,k)
7224 eel4=-EAEA(1,1,1)-EAEA(2,2,1)
7225 cd eel41=-EAEA(1,1,2)-EAEA(2,2,2)
7226 gcorr_loc(k-1)=gcorr_loc(k-1)
7227 & -ekont*(EAEAderg(1,1,1,1)+EAEAderg(2,2,1,1))
7229 gcorr_loc(l-1)=gcorr_loc(l-1)
7230 & -ekont*(EAEAderg(1,1,2,1)+EAEAderg(2,2,2,1))
7232 gcorr_loc(j-1)=gcorr_loc(j-1)
7233 & -ekont*(EAEAderg(1,1,2,1)+EAEAderg(2,2,2,1))
7238 derx(lll,kkk,iii)=-EAEAderx(1,1,lll,kkk,iii,1)
7239 & -EAEAderx(2,2,lll,kkk,iii,1)
7240 cd derx(lll,kkk,iii)=0.0d0
7244 cd gcorr_loc(l-1)=0.0d0
7245 cd gcorr_loc(j-1)=0.0d0
7246 cd gcorr_loc(k-1)=0.0d0
7248 cd write (iout,*)'Contacts have occurred for peptide groups',
7249 cd & i,j,' fcont:',eij,' eij',' and ',k,l,
7250 cd & ' fcont ',ekl,' eel4=',eel4,' eel4_num',16*eel4_num
7251 if (j.lt.nres-1) then
7258 if (l.lt.nres-1) then
7266 cgrad ggg1(ll)=eel4*g_contij(ll,1)
7267 cgrad ggg2(ll)=eel4*g_contij(ll,2)
7268 glongij=eel4*g_contij(ll,1)+ekont*derx(ll,1,1)
7269 glongkl=eel4*g_contij(ll,2)+ekont*derx(ll,1,2)
7270 cgrad ghalf=0.5d0*ggg1(ll)
7271 gradcorr(ll,i)=gradcorr(ll,i)+ekont*derx(ll,2,1)
7272 gradcorr(ll,i+1)=gradcorr(ll,i+1)+ekont*derx(ll,3,1)
7273 gradcorr(ll,j)=gradcorr(ll,j)+ekont*derx(ll,4,1)
7274 gradcorr(ll,j1)=gradcorr(ll,j1)+ekont*derx(ll,5,1)
7275 gradcorr_long(ll,j)=gradcorr_long(ll,j)+glongij
7276 gradcorr_long(ll,i)=gradcorr_long(ll,i)-glongij
7277 cgrad ghalf=0.5d0*ggg2(ll)
7278 gradcorr(ll,k)=gradcorr(ll,k)+ekont*derx(ll,2,2)
7279 gradcorr(ll,k+1)=gradcorr(ll,k+1)+ekont*derx(ll,3,2)
7280 gradcorr(ll,l)=gradcorr(ll,l)+ekont*derx(ll,4,2)
7281 gradcorr(ll,l1)=gradcorr(ll,l1)+ekont*derx(ll,5,2)
7282 gradcorr_long(ll,l)=gradcorr_long(ll,l)+glongkl
7283 gradcorr_long(ll,k)=gradcorr_long(ll,k)-glongkl
7287 cgrad gradcorr(ll,m)=gradcorr(ll,m)+ggg1(ll)
7292 cgrad gradcorr(ll,m)=gradcorr(ll,m)+ggg2(ll)
7297 cgrad gradcorr(ll,m)=gradcorr(ll,m)+ekont*derx(ll,1,1)
7302 cgrad gradcorr(ll,m)=gradcorr(ll,m)+ekont*derx(ll,1,2)
7306 cd write (2,*) iii,gcorr_loc(iii)
7309 cd write (2,*) 'ekont',ekont
7310 cd write (iout,*) 'eello4',ekont*eel4
7313 C---------------------------------------------------------------------------
7314 double precision function eello5(i,j,k,l,jj,kk)
7315 implicit real*8 (a-h,o-z)
7316 include 'DIMENSIONS'
7317 include 'COMMON.IOUNITS'
7318 include 'COMMON.CHAIN'
7319 include 'COMMON.DERIV'
7320 include 'COMMON.INTERACT'
7321 include 'COMMON.CONTACTS'
7322 include 'COMMON.TORSION'
7323 include 'COMMON.VAR'
7324 include 'COMMON.GEO'
7325 double precision pizda(2,2),auxmat(2,2),auxmat1(2,2),vv(2)
7326 double precision ggg1(3),ggg2(3)
7327 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
7332 C /l\ / \ \ / \ / \ / C
7333 C / \ / \ \ / \ / \ / C
7334 C j| o |l1 | o | o| o | | o |o C
7335 C \ |/k\| |/ \| / |/ \| |/ \| C
7336 C \i/ \ / \ / / \ / \ C
7338 C (I) (II) (III) (IV) C
7340 C eello5_1 eello5_2 eello5_3 eello5_4 C
7342 C Antiparallel chains C
7345 C /j\ / \ \ / \ / \ / C
7346 C / \ / \ \ / \ / \ / C
7347 C j1| o |l | o | o| o | | o |o C
7348 C \ |/k\| |/ \| / |/ \| |/ \| C
7349 C \i/ \ / \ / / \ / \ C
7351 C (I) (II) (III) (IV) C
7353 C eello5_1 eello5_2 eello5_3 eello5_4 C
7355 C o denotes a local interaction, vertical lines an electrostatic interaction. C
7357 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
7358 cd if (i.ne.2 .or. j.ne.6 .or. k.ne.3 .or. l.ne.5) then
7363 cd & 'EELLO5: Contacts have occurred for peptide groups',i,j,
7365 itk=itortyp(itype(k))
7366 itl=itortyp(itype(l))
7367 itj=itortyp(itype(j))
7372 cd call checkint5(i,j,k,l,jj,kk,eel5_1_num,eel5_2_num,
7373 cd & eel5_3_num,eel5_4_num)
7377 derx(lll,kkk,iii)=0.0d0
7381 cd eij=facont_hb(jj,i)
7382 cd ekl=facont_hb(kk,k)
7384 cd write (iout,*)'Contacts have occurred for peptide groups',
7385 cd & i,j,' fcont:',eij,' eij',' and ',k,l
7387 C Contribution from the graph I.
7388 cd write (2,*) 'AEA ',AEA(1,1,1),AEA(2,1,1),AEA(1,2,1),AEA(2,2,1)
7389 cd write (2,*) 'AEAb2',AEAb2(1,1,1),AEAb2(2,1,1)
7390 call transpose2(EUg(1,1,k),auxmat(1,1))
7391 call matmat2(AEA(1,1,1),auxmat(1,1),pizda(1,1))
7392 vv(1)=pizda(1,1)-pizda(2,2)
7393 vv(2)=pizda(1,2)+pizda(2,1)
7394 eello5_1=scalar2(AEAb2(1,1,1),Ub2(1,k))
7395 & +0.5d0*scalar2(vv(1),Dtobr2(1,i))
7396 C Explicit gradient in virtual-dihedral angles.
7397 if (i.gt.1) g_corr5_loc(i-1)=g_corr5_loc(i-1)
7398 & +ekont*(scalar2(AEAb2derg(1,2,1,1),Ub2(1,k))
7399 & +0.5d0*scalar2(vv(1),Dtobr2der(1,i)))
7400 call transpose2(EUgder(1,1,k),auxmat1(1,1))
7401 call matmat2(AEA(1,1,1),auxmat1(1,1),pizda(1,1))
7402 vv(1)=pizda(1,1)-pizda(2,2)
7403 vv(2)=pizda(1,2)+pizda(2,1)
7404 g_corr5_loc(k-1)=g_corr5_loc(k-1)
7405 & +ekont*(scalar2(AEAb2(1,1,1),Ub2der(1,k))
7406 & +0.5d0*scalar2(vv(1),Dtobr2(1,i)))
7407 call matmat2(AEAderg(1,1,1),auxmat(1,1),pizda(1,1))
7408 vv(1)=pizda(1,1)-pizda(2,2)
7409 vv(2)=pizda(1,2)+pizda(2,1)
7411 if (l.lt.nres-1) g_corr5_loc(l-1)=g_corr5_loc(l-1)
7412 & +ekont*(scalar2(AEAb2derg(1,1,1,1),Ub2(1,k))
7413 & +0.5d0*scalar2(vv(1),Dtobr2(1,i)))
7415 if (j.lt.nres-1) g_corr5_loc(j-1)=g_corr5_loc(j-1)
7416 & +ekont*(scalar2(AEAb2derg(1,1,1,1),Ub2(1,k))
7417 & +0.5d0*scalar2(vv(1),Dtobr2(1,i)))
7419 C Cartesian gradient
7423 call matmat2(AEAderx(1,1,lll,kkk,iii,1),auxmat(1,1),
7425 vv(1)=pizda(1,1)-pizda(2,2)
7426 vv(2)=pizda(1,2)+pizda(2,1)
7427 derx(lll,kkk,iii)=derx(lll,kkk,iii)
7428 & +scalar2(AEAb2derx(1,lll,kkk,iii,1,1),Ub2(1,k))
7429 & +0.5d0*scalar2(vv(1),Dtobr2(1,i))
7435 C Contribution from graph II
7436 call transpose2(EE(1,1,itk),auxmat(1,1))
7437 call matmat2(auxmat(1,1),AEA(1,1,1),pizda(1,1))
7438 vv(1)=pizda(1,1)+pizda(2,2)
7439 vv(2)=pizda(2,1)-pizda(1,2)
7440 eello5_2=scalar2(AEAb1(1,2,1),b1(1,itk))
7441 & -0.5d0*scalar2(vv(1),Ctobr(1,k))
7442 C Explicit gradient in virtual-dihedral angles.
7443 g_corr5_loc(k-1)=g_corr5_loc(k-1)
7444 & -0.5d0*ekont*scalar2(vv(1),Ctobrder(1,k))
7445 call matmat2(auxmat(1,1),AEAderg(1,1,1),pizda(1,1))
7446 vv(1)=pizda(1,1)+pizda(2,2)
7447 vv(2)=pizda(2,1)-pizda(1,2)
7449 g_corr5_loc(l-1)=g_corr5_loc(l-1)
7450 & +ekont*(scalar2(AEAb1derg(1,2,1),b1(1,itk))
7451 & -0.5d0*scalar2(vv(1),Ctobr(1,k)))
7453 g_corr5_loc(j-1)=g_corr5_loc(j-1)
7454 & +ekont*(scalar2(AEAb1derg(1,2,1),b1(1,itk))
7455 & -0.5d0*scalar2(vv(1),Ctobr(1,k)))
7457 C Cartesian gradient
7461 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,1),
7463 vv(1)=pizda(1,1)+pizda(2,2)
7464 vv(2)=pizda(2,1)-pizda(1,2)
7465 derx(lll,kkk,iii)=derx(lll,kkk,iii)
7466 & +scalar2(AEAb1derx(1,lll,kkk,iii,2,1),b1(1,itk))
7467 & -0.5d0*scalar2(vv(1),Ctobr(1,k))
7475 C Parallel orientation
7476 C Contribution from graph III
7477 call transpose2(EUg(1,1,l),auxmat(1,1))
7478 call matmat2(AEA(1,1,2),auxmat(1,1),pizda(1,1))
7479 vv(1)=pizda(1,1)-pizda(2,2)
7480 vv(2)=pizda(1,2)+pizda(2,1)
7481 eello5_3=scalar2(AEAb2(1,1,2),Ub2(1,l))
7482 & +0.5d0*scalar2(vv(1),Dtobr2(1,j))
7483 C Explicit gradient in virtual-dihedral angles.
7484 g_corr5_loc(j-1)=g_corr5_loc(j-1)
7485 & +ekont*(scalar2(AEAb2derg(1,2,1,2),Ub2(1,l))
7486 & +0.5d0*scalar2(vv(1),Dtobr2der(1,j)))
7487 call matmat2(AEAderg(1,1,2),auxmat(1,1),pizda(1,1))
7488 vv(1)=pizda(1,1)-pizda(2,2)
7489 vv(2)=pizda(1,2)+pizda(2,1)
7490 g_corr5_loc(k-1)=g_corr5_loc(k-1)
7491 & +ekont*(scalar2(AEAb2derg(1,1,1,2),Ub2(1,l))
7492 & +0.5d0*scalar2(vv(1),Dtobr2(1,j)))
7493 call transpose2(EUgder(1,1,l),auxmat1(1,1))
7494 call matmat2(AEA(1,1,2),auxmat1(1,1),pizda(1,1))
7495 vv(1)=pizda(1,1)-pizda(2,2)
7496 vv(2)=pizda(1,2)+pizda(2,1)
7497 g_corr5_loc(l-1)=g_corr5_loc(l-1)
7498 & +ekont*(scalar2(AEAb2(1,1,2),Ub2der(1,l))
7499 & +0.5d0*scalar2(vv(1),Dtobr2(1,j)))
7500 C Cartesian gradient
7504 call matmat2(AEAderx(1,1,lll,kkk,iii,2),auxmat(1,1),
7506 vv(1)=pizda(1,1)-pizda(2,2)
7507 vv(2)=pizda(1,2)+pizda(2,1)
7508 derx(lll,kkk,iii)=derx(lll,kkk,iii)
7509 & +scalar2(AEAb2derx(1,lll,kkk,iii,1,2),Ub2(1,l))
7510 & +0.5d0*scalar2(vv(1),Dtobr2(1,j))
7515 C Contribution from graph IV
7517 call transpose2(EE(1,1,itl),auxmat(1,1))
7518 call matmat2(auxmat(1,1),AEA(1,1,2),pizda(1,1))
7519 vv(1)=pizda(1,1)+pizda(2,2)
7520 vv(2)=pizda(2,1)-pizda(1,2)
7521 eello5_4=scalar2(AEAb1(1,2,2),b1(1,itl))
7522 & -0.5d0*scalar2(vv(1),Ctobr(1,l))
7523 C Explicit gradient in virtual-dihedral angles.
7524 g_corr5_loc(l-1)=g_corr5_loc(l-1)
7525 & -0.5d0*ekont*scalar2(vv(1),Ctobrder(1,l))
7526 call matmat2(auxmat(1,1),AEAderg(1,1,2),pizda(1,1))
7527 vv(1)=pizda(1,1)+pizda(2,2)
7528 vv(2)=pizda(2,1)-pizda(1,2)
7529 g_corr5_loc(k-1)=g_corr5_loc(k-1)
7530 & +ekont*(scalar2(AEAb1derg(1,2,2),b1(1,itl))
7531 & -0.5d0*scalar2(vv(1),Ctobr(1,l)))
7532 C Cartesian gradient
7536 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,2),
7538 vv(1)=pizda(1,1)+pizda(2,2)
7539 vv(2)=pizda(2,1)-pizda(1,2)
7540 derx(lll,kkk,iii)=derx(lll,kkk,iii)
7541 & +scalar2(AEAb1derx(1,lll,kkk,iii,2,2),b1(1,itl))
7542 & -0.5d0*scalar2(vv(1),Ctobr(1,l))
7547 C Antiparallel orientation
7548 C Contribution from graph III
7550 call transpose2(EUg(1,1,j),auxmat(1,1))
7551 call matmat2(AEA(1,1,2),auxmat(1,1),pizda(1,1))
7552 vv(1)=pizda(1,1)-pizda(2,2)
7553 vv(2)=pizda(1,2)+pizda(2,1)
7554 eello5_3=scalar2(AEAb2(1,1,2),Ub2(1,j))
7555 & +0.5d0*scalar2(vv(1),Dtobr2(1,l))
7556 C Explicit gradient in virtual-dihedral angles.
7557 g_corr5_loc(l-1)=g_corr5_loc(l-1)
7558 & +ekont*(scalar2(AEAb2derg(1,2,1,2),Ub2(1,j))
7559 & +0.5d0*scalar2(vv(1),Dtobr2der(1,l)))
7560 call matmat2(AEAderg(1,1,2),auxmat(1,1),pizda(1,1))
7561 vv(1)=pizda(1,1)-pizda(2,2)
7562 vv(2)=pizda(1,2)+pizda(2,1)
7563 g_corr5_loc(k-1)=g_corr5_loc(k-1)
7564 & +ekont*(scalar2(AEAb2derg(1,1,1,2),Ub2(1,j))
7565 & +0.5d0*scalar2(vv(1),Dtobr2(1,l)))
7566 call transpose2(EUgder(1,1,j),auxmat1(1,1))
7567 call matmat2(AEA(1,1,2),auxmat1(1,1),pizda(1,1))
7568 vv(1)=pizda(1,1)-pizda(2,2)
7569 vv(2)=pizda(1,2)+pizda(2,1)
7570 g_corr5_loc(j-1)=g_corr5_loc(j-1)
7571 & +ekont*(scalar2(AEAb2(1,1,2),Ub2der(1,j))
7572 & +0.5d0*scalar2(vv(1),Dtobr2(1,l)))
7573 C Cartesian gradient
7577 call matmat2(AEAderx(1,1,lll,kkk,iii,2),auxmat(1,1),
7579 vv(1)=pizda(1,1)-pizda(2,2)
7580 vv(2)=pizda(1,2)+pizda(2,1)
7581 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)
7582 & +scalar2(AEAb2derx(1,lll,kkk,iii,1,2),Ub2(1,j))
7583 & +0.5d0*scalar2(vv(1),Dtobr2(1,l))
7588 C Contribution from graph IV
7590 call transpose2(EE(1,1,itj),auxmat(1,1))
7591 call matmat2(auxmat(1,1),AEA(1,1,2),pizda(1,1))
7592 vv(1)=pizda(1,1)+pizda(2,2)
7593 vv(2)=pizda(2,1)-pizda(1,2)
7594 eello5_4=scalar2(AEAb1(1,2,2),b1(1,itj))
7595 & -0.5d0*scalar2(vv(1),Ctobr(1,j))
7596 C Explicit gradient in virtual-dihedral angles.
7597 g_corr5_loc(j-1)=g_corr5_loc(j-1)
7598 & -0.5d0*ekont*scalar2(vv(1),Ctobrder(1,j))
7599 call matmat2(auxmat(1,1),AEAderg(1,1,2),pizda(1,1))
7600 vv(1)=pizda(1,1)+pizda(2,2)
7601 vv(2)=pizda(2,1)-pizda(1,2)
7602 g_corr5_loc(k-1)=g_corr5_loc(k-1)
7603 & +ekont*(scalar2(AEAb1derg(1,2,2),b1(1,itj))
7604 & -0.5d0*scalar2(vv(1),Ctobr(1,j)))
7605 C Cartesian gradient
7609 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,2),
7611 vv(1)=pizda(1,1)+pizda(2,2)
7612 vv(2)=pizda(2,1)-pizda(1,2)
7613 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)
7614 & +scalar2(AEAb1derx(1,lll,kkk,iii,2,2),b1(1,itj))
7615 & -0.5d0*scalar2(vv(1),Ctobr(1,j))
7621 eel5=eello5_1+eello5_2+eello5_3+eello5_4
7622 cd if (i.eq.2 .and. j.eq.8 .and. k.eq.3 .and. l.eq.7) then
7623 cd write (2,*) 'ijkl',i,j,k,l
7624 cd write (2,*) 'eello5_1',eello5_1,' eello5_2',eello5_2,
7625 cd & ' eello5_3',eello5_3,' eello5_4',eello5_4
7627 cd write(iout,*) 'eello5_1',eello5_1,' eel5_1_num',16*eel5_1_num
7628 cd write(iout,*) 'eello5_2',eello5_2,' eel5_2_num',16*eel5_2_num
7629 cd write(iout,*) 'eello5_3',eello5_3,' eel5_3_num',16*eel5_3_num
7630 cd write(iout,*) 'eello5_4',eello5_4,' eel5_4_num',16*eel5_4_num
7631 if (j.lt.nres-1) then
7638 if (l.lt.nres-1) then
7648 cd write (2,*) 'eij',eij,' ekl',ekl,' ekont',ekont
7649 C 2/11/08 AL Gradients over DC's connecting interacting sites will be
7650 C summed up outside the subrouine as for the other subroutines
7651 C handling long-range interactions. The old code is commented out
7652 C with "cgrad" to keep track of changes.
7654 cgrad ggg1(ll)=eel5*g_contij(ll,1)
7655 cgrad ggg2(ll)=eel5*g_contij(ll,2)
7656 gradcorr5ij=eel5*g_contij(ll,1)+ekont*derx(ll,1,1)
7657 gradcorr5kl=eel5*g_contij(ll,2)+ekont*derx(ll,1,2)
7658 c write (iout,'(a,3i3,a,5f8.3,2i3,a,5f8.3,a,f8.3)')
7659 c & "ecorr5",ll,i,j," derx",derx(ll,2,1),derx(ll,3,1),derx(ll,4,1),
7660 c & derx(ll,5,1),k,l," derx",derx(ll,2,2),derx(ll,3,2),
7661 c & derx(ll,4,2),derx(ll,5,2)," ekont",ekont
7662 c write (iout,'(a,3i3,a,3f8.3,2i3,a,3f8.3)')
7663 c & "ecorr5",ll,i,j," gradcorr5",g_contij(ll,1),derx(ll,1,1),
7665 c & k,l," gradcorr5",g_contij(ll,2),derx(ll,1,2),gradcorr5kl
7666 cold ghalf=0.5d0*eel5*ekl*gacont_hbr(ll,jj,i)
7667 cgrad ghalf=0.5d0*ggg1(ll)
7669 gradcorr5(ll,i)=gradcorr5(ll,i)+ekont*derx(ll,2,1)
7670 gradcorr5(ll,i+1)=gradcorr5(ll,i+1)+ekont*derx(ll,3,1)
7671 gradcorr5(ll,j)=gradcorr5(ll,j)+ekont*derx(ll,4,1)
7672 gradcorr5(ll,j1)=gradcorr5(ll,j1)+ekont*derx(ll,5,1)
7673 gradcorr5_long(ll,j)=gradcorr5_long(ll,j)+gradcorr5ij
7674 gradcorr5_long(ll,i)=gradcorr5_long(ll,i)-gradcorr5ij
7675 cold ghalf=0.5d0*eel5*eij*gacont_hbr(ll,kk,k)
7676 cgrad ghalf=0.5d0*ggg2(ll)
7678 gradcorr5(ll,k)=gradcorr5(ll,k)+ghalf+ekont*derx(ll,2,2)
7679 gradcorr5(ll,k+1)=gradcorr5(ll,k+1)+ekont*derx(ll,3,2)
7680 gradcorr5(ll,l)=gradcorr5(ll,l)+ghalf+ekont*derx(ll,4,2)
7681 gradcorr5(ll,l1)=gradcorr5(ll,l1)+ekont*derx(ll,5,2)
7682 gradcorr5_long(ll,l)=gradcorr5_long(ll,l)+gradcorr5kl
7683 gradcorr5_long(ll,k)=gradcorr5_long(ll,k)-gradcorr5kl
7688 cold gradcorr5(ll,m)=gradcorr5(ll,m)+eel5*ekl*gacont_hbr(ll,jj,i)
7689 cgrad gradcorr5(ll,m)=gradcorr5(ll,m)+ggg1(ll)
7694 cold gradcorr5(ll,m)=gradcorr5(ll,m)+eel5*eij*gacont_hbr(ll,kk,k)
7695 cgrad gradcorr5(ll,m)=gradcorr5(ll,m)+ggg2(ll)
7701 cgrad gradcorr5(ll,m)=gradcorr5(ll,m)+ekont*derx(ll,1,1)
7706 cgrad gradcorr5(ll,m)=gradcorr5(ll,m)+ekont*derx(ll,1,2)
7710 cd write (2,*) iii,g_corr5_loc(iii)
7713 cd write (2,*) 'ekont',ekont
7714 cd write (iout,*) 'eello5',ekont*eel5
7717 c--------------------------------------------------------------------------
7718 double precision function eello6(i,j,k,l,jj,kk)
7719 implicit real*8 (a-h,o-z)
7720 include 'DIMENSIONS'
7721 include 'COMMON.IOUNITS'
7722 include 'COMMON.CHAIN'
7723 include 'COMMON.DERIV'
7724 include 'COMMON.INTERACT'
7725 include 'COMMON.CONTACTS'
7726 include 'COMMON.TORSION'
7727 include 'COMMON.VAR'
7728 include 'COMMON.GEO'
7729 include 'COMMON.FFIELD'
7730 double precision ggg1(3),ggg2(3)
7731 cd if (i.ne.1 .or. j.ne.3 .or. k.ne.2 .or. l.ne.4) then
7736 cd & 'EELLO6: Contacts have occurred for peptide groups',i,j,
7744 cd call checkint6(i,j,k,l,jj,kk,eel6_1_num,eel6_2_num,
7745 cd & eel6_3_num,eel6_4_num,eel6_5_num,eel6_6_num)
7749 derx(lll,kkk,iii)=0.0d0
7753 cd eij=facont_hb(jj,i)
7754 cd ekl=facont_hb(kk,k)
7760 eello6_1=eello6_graph1(i,j,k,l,1,.false.)
7761 eello6_2=eello6_graph1(j,i,l,k,2,.false.)
7762 eello6_3=eello6_graph2(i,j,k,l,jj,kk,.false.)
7763 eello6_4=eello6_graph4(i,j,k,l,jj,kk,1,.false.)
7764 eello6_5=eello6_graph4(j,i,l,k,jj,kk,2,.false.)
7765 eello6_6=eello6_graph3(i,j,k,l,jj,kk,.false.)
7767 eello6_1=eello6_graph1(i,j,k,l,1,.false.)
7768 eello6_2=eello6_graph1(l,k,j,i,2,.true.)
7769 eello6_3=eello6_graph2(i,l,k,j,jj,kk,.true.)
7770 eello6_4=eello6_graph4(i,j,k,l,jj,kk,1,.false.)
7771 if (wturn6.eq.0.0d0 .or. j.ne.i+4) then
7772 eello6_5=eello6_graph4(l,k,j,i,kk,jj,2,.true.)
7776 eello6_6=eello6_graph3(i,l,k,j,jj,kk,.true.)
7778 C If turn contributions are considered, they will be handled separately.
7779 eel6=eello6_1+eello6_2+eello6_3+eello6_4+eello6_5+eello6_6
7780 cd write(iout,*) 'eello6_1',eello6_1!,' eel6_1_num',16*eel6_1_num
7781 cd write(iout,*) 'eello6_2',eello6_2!,' eel6_2_num',16*eel6_2_num
7782 cd write(iout,*) 'eello6_3',eello6_3!,' eel6_3_num',16*eel6_3_num
7783 cd write(iout,*) 'eello6_4',eello6_4!,' eel6_4_num',16*eel6_4_num
7784 cd write(iout,*) 'eello6_5',eello6_5!,' eel6_5_num',16*eel6_5_num
7785 cd write(iout,*) 'eello6_6',eello6_6!,' eel6_6_num',16*eel6_6_num
7787 if (j.lt.nres-1) then
7794 if (l.lt.nres-1) then
7802 cgrad ggg1(ll)=eel6*g_contij(ll,1)
7803 cgrad ggg2(ll)=eel6*g_contij(ll,2)
7804 cold ghalf=0.5d0*eel6*ekl*gacont_hbr(ll,jj,i)
7805 cgrad ghalf=0.5d0*ggg1(ll)
7807 gradcorr6ij=eel6*g_contij(ll,1)+ekont*derx(ll,1,1)
7808 gradcorr6kl=eel6*g_contij(ll,2)+ekont*derx(ll,1,2)
7809 gradcorr6(ll,i)=gradcorr6(ll,i)+ekont*derx(ll,2,1)
7810 gradcorr6(ll,i+1)=gradcorr6(ll,i+1)+ekont*derx(ll,3,1)
7811 gradcorr6(ll,j)=gradcorr6(ll,j)+ekont*derx(ll,4,1)
7812 gradcorr6(ll,j1)=gradcorr6(ll,j1)+ekont*derx(ll,5,1)
7813 gradcorr6_long(ll,j)=gradcorr6_long(ll,j)+gradcorr6ij
7814 gradcorr6_long(ll,i)=gradcorr6_long(ll,i)-gradcorr6ij
7815 cgrad ghalf=0.5d0*ggg2(ll)
7816 cold ghalf=0.5d0*eel6*eij*gacont_hbr(ll,kk,k)
7818 gradcorr6(ll,k)=gradcorr6(ll,k)+ekont*derx(ll,2,2)
7819 gradcorr6(ll,k+1)=gradcorr6(ll,k+1)+ekont*derx(ll,3,2)
7820 gradcorr6(ll,l)=gradcorr6(ll,l)+ekont*derx(ll,4,2)
7821 gradcorr6(ll,l1)=gradcorr6(ll,l1)+ekont*derx(ll,5,2)
7822 gradcorr6_long(ll,l)=gradcorr6_long(ll,l)+gradcorr6kl
7823 gradcorr6_long(ll,k)=gradcorr6_long(ll,k)-gradcorr6kl
7828 cold gradcorr6(ll,m)=gradcorr6(ll,m)+eel6*ekl*gacont_hbr(ll,jj,i)
7829 cgrad gradcorr6(ll,m)=gradcorr6(ll,m)+ggg1(ll)
7834 cold gradcorr6(ll,m)=gradcorr6(ll,m)+eel6*eij*gacont_hbr(ll,kk,k)
7835 cgrad gradcorr6(ll,m)=gradcorr6(ll,m)+ggg2(ll)
7841 cgrad gradcorr6(ll,m)=gradcorr6(ll,m)+ekont*derx(ll,1,1)
7846 cgrad gradcorr6(ll,m)=gradcorr6(ll,m)+ekont*derx(ll,1,2)
7850 cd write (2,*) iii,g_corr6_loc(iii)
7853 cd write (2,*) 'ekont',ekont
7854 cd write (iout,*) 'eello6',ekont*eel6
7857 c--------------------------------------------------------------------------
7858 double precision function eello6_graph1(i,j,k,l,imat,swap)
7859 implicit real*8 (a-h,o-z)
7860 include 'DIMENSIONS'
7861 include 'COMMON.IOUNITS'
7862 include 'COMMON.CHAIN'
7863 include 'COMMON.DERIV'
7864 include 'COMMON.INTERACT'
7865 include 'COMMON.CONTACTS'
7866 include 'COMMON.TORSION'
7867 include 'COMMON.VAR'
7868 include 'COMMON.GEO'
7869 double precision vv(2),vv1(2),pizda(2,2),auxmat(2,2),pizda1(2,2)
7873 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
7875 C Parallel Antiparallel C
7881 C \ j|/k\| / \ |/k\|l / C
7886 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
7887 itk=itortyp(itype(k))
7888 s1= scalar2(AEAb1(1,2,imat),CUgb2(1,i))
7889 s2=-scalar2(AEAb2(1,1,imat),Ug2Db1t(1,k))
7890 s3= scalar2(AEAb2(1,1,imat),CUgb2(1,k))
7891 call transpose2(EUgC(1,1,k),auxmat(1,1))
7892 call matmat2(AEA(1,1,imat),auxmat(1,1),pizda1(1,1))
7893 vv1(1)=pizda1(1,1)-pizda1(2,2)
7894 vv1(2)=pizda1(1,2)+pizda1(2,1)
7895 s4=0.5d0*scalar2(vv1(1),Dtobr2(1,i))
7896 vv(1)=AEAb1(1,2,imat)*b1(1,itk)-AEAb1(2,2,imat)*b1(2,itk)
7897 vv(2)=AEAb1(1,2,imat)*b1(2,itk)+AEAb1(2,2,imat)*b1(1,itk)
7898 s5=scalar2(vv(1),Dtobr2(1,i))
7899 cd write (2,*) 's1',s1,' s2',s2,' s3',s3,' s4', s4,' s5',s5
7900 eello6_graph1=-0.5d0*(s1+s2+s3+s4+s5)
7901 if (i.gt.1) g_corr6_loc(i-1)=g_corr6_loc(i-1)
7902 & -0.5d0*ekont*(scalar2(AEAb1(1,2,imat),CUgb2der(1,i))
7903 & -scalar2(AEAb2derg(1,2,1,imat),Ug2Db1t(1,k))
7904 & +scalar2(AEAb2derg(1,2,1,imat),CUgb2(1,k))
7905 & +0.5d0*scalar2(vv1(1),Dtobr2der(1,i))
7906 & +scalar2(vv(1),Dtobr2der(1,i)))
7907 call matmat2(AEAderg(1,1,imat),auxmat(1,1),pizda1(1,1))
7908 vv1(1)=pizda1(1,1)-pizda1(2,2)
7909 vv1(2)=pizda1(1,2)+pizda1(2,1)
7910 vv(1)=AEAb1derg(1,2,imat)*b1(1,itk)-AEAb1derg(2,2,imat)*b1(2,itk)
7911 vv(2)=AEAb1derg(1,2,imat)*b1(2,itk)+AEAb1derg(2,2,imat)*b1(1,itk)
7913 g_corr6_loc(l-1)=g_corr6_loc(l-1)
7914 & +ekont*(-0.5d0*(scalar2(AEAb1derg(1,2,imat),CUgb2(1,i))
7915 & -scalar2(AEAb2derg(1,1,1,imat),Ug2Db1t(1,k))
7916 & +scalar2(AEAb2derg(1,1,1,imat),CUgb2(1,k))
7917 & +0.5d0*scalar2(vv1(1),Dtobr2(1,i))+scalar2(vv(1),Dtobr2(1,i))))
7919 g_corr6_loc(j-1)=g_corr6_loc(j-1)
7920 & +ekont*(-0.5d0*(scalar2(AEAb1derg(1,2,imat),CUgb2(1,i))
7921 & -scalar2(AEAb2derg(1,1,1,imat),Ug2Db1t(1,k))
7922 & +scalar2(AEAb2derg(1,1,1,imat),CUgb2(1,k))
7923 & +0.5d0*scalar2(vv1(1),Dtobr2(1,i))+scalar2(vv(1),Dtobr2(1,i))))
7925 call transpose2(EUgCder(1,1,k),auxmat(1,1))
7926 call matmat2(AEA(1,1,imat),auxmat(1,1),pizda1(1,1))
7927 vv1(1)=pizda1(1,1)-pizda1(2,2)
7928 vv1(2)=pizda1(1,2)+pizda1(2,1)
7929 if (k.gt.1) g_corr6_loc(k-1)=g_corr6_loc(k-1)
7930 & +ekont*(-0.5d0*(-scalar2(AEAb2(1,1,imat),Ug2Db1tder(1,k))
7931 & +scalar2(AEAb2(1,1,imat),CUgb2der(1,k))
7932 & +0.5d0*scalar2(vv1(1),Dtobr2(1,i))))
7941 s1= scalar2(AEAb1derx(1,lll,kkk,iii,2,imat),CUgb2(1,i))
7942 s2=-scalar2(AEAb2derx(1,lll,kkk,iii,1,imat),Ug2Db1t(1,k))
7943 s3= scalar2(AEAb2derx(1,lll,kkk,iii,1,imat),CUgb2(1,k))
7944 call transpose2(EUgC(1,1,k),auxmat(1,1))
7945 call matmat2(AEAderx(1,1,lll,kkk,iii,imat),auxmat(1,1),
7947 vv1(1)=pizda1(1,1)-pizda1(2,2)
7948 vv1(2)=pizda1(1,2)+pizda1(2,1)
7949 s4=0.5d0*scalar2(vv1(1),Dtobr2(1,i))
7950 vv(1)=AEAb1derx(1,lll,kkk,iii,2,imat)*b1(1,itk)
7951 & -AEAb1derx(2,lll,kkk,iii,2,imat)*b1(2,itk)
7952 vv(2)=AEAb1derx(1,lll,kkk,iii,2,imat)*b1(2,itk)
7953 & +AEAb1derx(2,lll,kkk,iii,2,imat)*b1(1,itk)
7954 s5=scalar2(vv(1),Dtobr2(1,i))
7955 derx(lll,kkk,ind)=derx(lll,kkk,ind)-0.5d0*(s1+s2+s3+s4+s5)
7961 c----------------------------------------------------------------------------
7962 double precision function eello6_graph2(i,j,k,l,jj,kk,swap)
7963 implicit real*8 (a-h,o-z)
7964 include 'DIMENSIONS'
7965 include 'COMMON.IOUNITS'
7966 include 'COMMON.CHAIN'
7967 include 'COMMON.DERIV'
7968 include 'COMMON.INTERACT'
7969 include 'COMMON.CONTACTS'
7970 include 'COMMON.TORSION'
7971 include 'COMMON.VAR'
7972 include 'COMMON.GEO'
7974 double precision vv(2),pizda(2,2),auxmat(2,2),auxvec(2),
7975 & auxvec1(2),auxvec2(2),auxmat1(2,2)
7978 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
7980 C Parallel Antiparallel C
7986 C \ j|/k\| \ |/k\|l C
7991 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
7992 cd write (2,*) 'eello6_graph2: i,',i,' j',j,' k',k,' l',l
7993 C AL 7/4/01 s1 would occur in the sixth-order moment,
7994 C but not in a cluster cumulant
7996 s1=dip(1,jj,i)*dip(1,kk,k)
7998 call matvec2(ADtEA1(1,1,1),Ub2(1,k),auxvec(1))
7999 s2=-0.5d0*scalar2(Ub2(1,i),auxvec(1))
8000 call matvec2(ADtEA(1,1,2),Ub2(1,l),auxvec1(1))
8001 s3=-0.5d0*scalar2(Ub2(1,j),auxvec1(1))
8002 call transpose2(EUg(1,1,k),auxmat(1,1))
8003 call matmat2(ADtEA1(1,1,1),auxmat(1,1),pizda(1,1))
8004 vv(1)=pizda(1,1)-pizda(2,2)
8005 vv(2)=pizda(1,2)+pizda(2,1)
8006 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
8007 cd write (2,*) 'eello6_graph2:','s1',s1,' s2',s2,' s3',s3,' s4',s4
8009 eello6_graph2=-(s1+s2+s3+s4)
8011 eello6_graph2=-(s2+s3+s4)
8014 C Derivatives in gamma(i-1)
8017 s1=dipderg(1,jj,i)*dip(1,kk,k)
8019 s2=-0.5d0*scalar2(Ub2der(1,i),auxvec(1))
8020 call matvec2(ADtEAderg(1,1,1,2),Ub2(1,l),auxvec2(1))
8021 s3=-0.5d0*scalar2(Ub2(1,j),auxvec2(1))
8022 s4=-0.25d0*scalar2(vv(1),Dtobr2der(1,i))
8024 g_corr6_loc(i-1)=g_corr6_loc(i-1)-ekont*(s1+s2+s3+s4)
8026 g_corr6_loc(i-1)=g_corr6_loc(i-1)-ekont*(s2+s3+s4)
8028 c g_corr6_loc(i-1)=g_corr6_loc(i-1)-s3
8030 C Derivatives in gamma(k-1)
8032 s1=dip(1,jj,i)*dipderg(1,kk,k)
8034 call matvec2(ADtEA1(1,1,1),Ub2der(1,k),auxvec2(1))
8035 s2=-0.5d0*scalar2(Ub2(1,i),auxvec2(1))
8036 call matvec2(ADtEAderg(1,1,2,2),Ub2(1,l),auxvec2(1))
8037 s3=-0.5d0*scalar2(Ub2(1,j),auxvec2(1))
8038 call transpose2(EUgder(1,1,k),auxmat1(1,1))
8039 call matmat2(ADtEA1(1,1,1),auxmat1(1,1),pizda(1,1))
8040 vv(1)=pizda(1,1)-pizda(2,2)
8041 vv(2)=pizda(1,2)+pizda(2,1)
8042 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
8044 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s1+s2+s3+s4)
8046 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s2+s3+s4)
8048 c g_corr6_loc(k-1)=g_corr6_loc(k-1)-s3
8049 C Derivatives in gamma(j-1) or gamma(l-1)
8052 s1=dipderg(3,jj,i)*dip(1,kk,k)
8054 call matvec2(ADtEA1derg(1,1,1,1),Ub2(1,k),auxvec2(1))
8055 s2=-0.5d0*scalar2(Ub2(1,i),auxvec2(1))
8056 s3=-0.5d0*scalar2(Ub2der(1,j),auxvec1(1))
8057 call matmat2(ADtEA1derg(1,1,1,1),auxmat(1,1),pizda(1,1))
8058 vv(1)=pizda(1,1)-pizda(2,2)
8059 vv(2)=pizda(1,2)+pizda(2,1)
8060 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
8063 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*s1
8065 g_corr6_loc(j-1)=g_corr6_loc(j-1)-ekont*s1
8068 g_corr6_loc(j-1)=g_corr6_loc(j-1)-ekont*(s2+s3+s4)
8069 c g_corr6_loc(j-1)=g_corr6_loc(j-1)-s3
8071 C Derivatives in gamma(l-1) or gamma(j-1)
8074 s1=dip(1,jj,i)*dipderg(3,kk,k)
8076 call matvec2(ADtEA1derg(1,1,2,1),Ub2(1,k),auxvec2(1))
8077 s2=-0.5d0*scalar2(Ub2(1,i),auxvec2(1))
8078 call matvec2(ADtEA(1,1,2),Ub2der(1,l),auxvec2(1))
8079 s3=-0.5d0*scalar2(Ub2(1,j),auxvec2(1))
8080 call matmat2(ADtEA1derg(1,1,2,1),auxmat(1,1),pizda(1,1))
8081 vv(1)=pizda(1,1)-pizda(2,2)
8082 vv(2)=pizda(1,2)+pizda(2,1)
8083 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
8086 g_corr6_loc(j-1)=g_corr6_loc(j-1)-ekont*s1
8088 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*s1
8091 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*(s2+s3+s4)
8092 c g_corr6_loc(l-1)=g_corr6_loc(l-1)-s3
8094 C Cartesian derivatives.
8096 write (2,*) 'In eello6_graph2'
8098 write (2,*) 'iii=',iii
8100 write (2,*) 'kkk=',kkk
8102 write (2,'(3(2f10.5),5x)')
8103 & ((ADtEA1derx(jjj,mmm,lll,kkk,iii,1),mmm=1,2),lll=1,3)
8113 s1=dipderx(lll,kkk,1,jj,i)*dip(1,kk,k)
8115 s1=dip(1,jj,i)*dipderx(lll,kkk,1,kk,k)
8118 call matvec2(ADtEA1derx(1,1,lll,kkk,iii,1),Ub2(1,k),
8120 s2=-0.5d0*scalar2(Ub2(1,i),auxvec(1))
8121 call matvec2(ADtEAderx(1,1,lll,kkk,iii,2),Ub2(1,l),
8123 s3=-0.5d0*scalar2(Ub2(1,j),auxvec(1))
8124 call transpose2(EUg(1,1,k),auxmat(1,1))
8125 call matmat2(ADtEA1derx(1,1,lll,kkk,iii,1),auxmat(1,1),
8127 vv(1)=pizda(1,1)-pizda(2,2)
8128 vv(2)=pizda(1,2)+pizda(2,1)
8129 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
8130 cd write (2,*) 's1',s1,' s2',s2,' s3',s3,' s4',s4
8132 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s1+s2+s4)
8134 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s2+s4)
8137 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-s3
8139 derx(lll,kkk,iii)=derx(lll,kkk,iii)-s3
8146 c----------------------------------------------------------------------------
8147 double precision function eello6_graph3(i,j,k,l,jj,kk,swap)
8148 implicit real*8 (a-h,o-z)
8149 include 'DIMENSIONS'
8150 include 'COMMON.IOUNITS'
8151 include 'COMMON.CHAIN'
8152 include 'COMMON.DERIV'
8153 include 'COMMON.INTERACT'
8154 include 'COMMON.CONTACTS'
8155 include 'COMMON.TORSION'
8156 include 'COMMON.VAR'
8157 include 'COMMON.GEO'
8158 double precision vv(2),pizda(2,2),auxmat(2,2),auxvec(2)
8160 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
8162 C Parallel Antiparallel C
8168 C j|/k\| / |/k\|l / C
8173 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
8175 C 4/7/01 AL Component s1 was removed, because it pertains to the respective
8176 C energy moment and not to the cluster cumulant.
8177 iti=itortyp(itype(i))
8178 if (j.lt.nres-1) then
8179 itj1=itortyp(itype(j+1))
8183 itk=itortyp(itype(k))
8184 itk1=itortyp(itype(k+1))
8185 if (l.lt.nres-1) then
8186 itl1=itortyp(itype(l+1))
8191 s1=dip(4,jj,i)*dip(4,kk,k)
8193 call matvec2(AECA(1,1,1),b1(1,itk1),auxvec(1))
8194 s2=0.5d0*scalar2(b1(1,itk),auxvec(1))
8195 call matvec2(AECA(1,1,2),b1(1,itl1),auxvec(1))
8196 s3=0.5d0*scalar2(b1(1,itj1),auxvec(1))
8197 call transpose2(EE(1,1,itk),auxmat(1,1))
8198 call matmat2(auxmat(1,1),AECA(1,1,1),pizda(1,1))
8199 vv(1)=pizda(1,1)+pizda(2,2)
8200 vv(2)=pizda(2,1)-pizda(1,2)
8201 s4=-0.25d0*scalar2(vv(1),Ctobr(1,k))
8202 cd write (2,*) 'eello6_graph3:','s1',s1,' s2',s2,' s3',s3,' s4',s4,
8203 cd & "sum",-(s2+s3+s4)
8205 eello6_graph3=-(s1+s2+s3+s4)
8207 eello6_graph3=-(s2+s3+s4)
8210 C Derivatives in gamma(k-1)
8211 call matvec2(AECAderg(1,1,2),b1(1,itl1),auxvec(1))
8212 s3=0.5d0*scalar2(b1(1,itj1),auxvec(1))
8213 s4=-0.25d0*scalar2(vv(1),Ctobrder(1,k))
8214 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s3+s4)
8215 C Derivatives in gamma(l-1)
8216 call matvec2(AECAderg(1,1,1),b1(1,itk1),auxvec(1))
8217 s2=0.5d0*scalar2(b1(1,itk),auxvec(1))
8218 call matmat2(auxmat(1,1),AECAderg(1,1,1),pizda(1,1))
8219 vv(1)=pizda(1,1)+pizda(2,2)
8220 vv(2)=pizda(2,1)-pizda(1,2)
8221 s4=-0.25d0*scalar2(vv(1),Ctobr(1,k))
8222 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*(s2+s4)
8223 C Cartesian derivatives.
8229 s1=dipderx(lll,kkk,4,jj,i)*dip(4,kk,k)
8231 s1=dip(4,jj,i)*dipderx(lll,kkk,4,kk,k)
8234 call matvec2(AECAderx(1,1,lll,kkk,iii,1),b1(1,itk1),
8236 s2=0.5d0*scalar2(b1(1,itk),auxvec(1))
8237 call matvec2(AECAderx(1,1,lll,kkk,iii,2),b1(1,itl1),
8239 s3=0.5d0*scalar2(b1(1,itj1),auxvec(1))
8240 call matmat2(auxmat(1,1),AECAderx(1,1,lll,kkk,iii,1),
8242 vv(1)=pizda(1,1)+pizda(2,2)
8243 vv(2)=pizda(2,1)-pizda(1,2)
8244 s4=-0.25d0*scalar2(vv(1),Ctobr(1,k))
8246 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s1+s2+s4)
8248 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s2+s4)
8251 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-s3
8253 derx(lll,kkk,iii)=derx(lll,kkk,iii)-s3
8255 c derx(lll,kkk,iii)=derx(lll,kkk,iii)-s4
8261 c----------------------------------------------------------------------------
8262 double precision function eello6_graph4(i,j,k,l,jj,kk,imat,swap)
8263 implicit real*8 (a-h,o-z)
8264 include 'DIMENSIONS'
8265 include 'COMMON.IOUNITS'
8266 include 'COMMON.CHAIN'
8267 include 'COMMON.DERIV'
8268 include 'COMMON.INTERACT'
8269 include 'COMMON.CONTACTS'
8270 include 'COMMON.TORSION'
8271 include 'COMMON.VAR'
8272 include 'COMMON.GEO'
8273 include 'COMMON.FFIELD'
8274 double precision vv(2),pizda(2,2),auxmat(2,2),auxvec(2),
8275 & auxvec1(2),auxmat1(2,2)
8277 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
8279 C Parallel Antiparallel C
8285 C \ j|/k\| \ |/k\|l C
8290 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
8292 C 4/7/01 AL Component s1 was removed, because it pertains to the respective
8293 C energy moment and not to the cluster cumulant.
8294 cd write (2,*) 'eello_graph4: wturn6',wturn6
8295 iti=itortyp(itype(i))
8296 itj=itortyp(itype(j))
8297 if (j.lt.nres-1) then
8298 itj1=itortyp(itype(j+1))
8302 itk=itortyp(itype(k))
8303 if (k.lt.nres-1) then
8304 itk1=itortyp(itype(k+1))
8308 itl=itortyp(itype(l))
8309 if (l.lt.nres-1) then
8310 itl1=itortyp(itype(l+1))
8314 cd write (2,*) 'eello6_graph4:','i',i,' j',j,' k',k,' l',l
8315 cd write (2,*) 'iti',iti,' itj',itj,' itj1',itj1,' itk',itk,
8316 cd & ' itl',itl,' itl1',itl1
8319 s1=dip(3,jj,i)*dip(3,kk,k)
8321 s1=dip(2,jj,j)*dip(2,kk,l)
8324 call matvec2(AECA(1,1,imat),Ub2(1,k),auxvec(1))
8325 s2=0.5d0*scalar2(Ub2(1,i),auxvec(1))
8327 call matvec2(ADtEA1(1,1,3-imat),b1(1,itj1),auxvec1(1))
8328 s3=-0.5d0*scalar2(b1(1,itj),auxvec1(1))
8330 call matvec2(ADtEA1(1,1,3-imat),b1(1,itl1),auxvec1(1))
8331 s3=-0.5d0*scalar2(b1(1,itl),auxvec1(1))
8333 call transpose2(EUg(1,1,k),auxmat(1,1))
8334 call matmat2(AECA(1,1,imat),auxmat(1,1),pizda(1,1))
8335 vv(1)=pizda(1,1)-pizda(2,2)
8336 vv(2)=pizda(2,1)+pizda(1,2)
8337 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
8338 cd write (2,*) 'eello6_graph4:','s1',s1,' s2',s2,' s3',s3,' s4',s4
8340 eello6_graph4=-(s1+s2+s3+s4)
8342 eello6_graph4=-(s2+s3+s4)
8344 C Derivatives in gamma(i-1)
8348 s1=dipderg(2,jj,i)*dip(3,kk,k)
8350 s1=dipderg(4,jj,j)*dip(2,kk,l)
8353 s2=0.5d0*scalar2(Ub2der(1,i),auxvec(1))
8355 call matvec2(ADtEA1derg(1,1,1,3-imat),b1(1,itj1),auxvec1(1))
8356 s3=-0.5d0*scalar2(b1(1,itj),auxvec1(1))
8358 call matvec2(ADtEA1derg(1,1,1,3-imat),b1(1,itl1),auxvec1(1))
8359 s3=-0.5d0*scalar2(b1(1,itl),auxvec1(1))
8361 s4=0.25d0*scalar2(vv(1),Dtobr2der(1,i))
8362 if (wturn6.gt.0.0d0 .and. k.eq.l+4 .and. i.eq.j+2) then
8363 cd write (2,*) 'turn6 derivatives'
8365 gel_loc_turn6(i-1)=gel_loc_turn6(i-1)-ekont*(s1+s2+s3+s4)
8367 gel_loc_turn6(i-1)=gel_loc_turn6(i-1)-ekont*(s2+s3+s4)
8371 g_corr6_loc(i-1)=g_corr6_loc(i-1)-ekont*(s1+s2+s3+s4)
8373 g_corr6_loc(i-1)=g_corr6_loc(i-1)-ekont*(s2+s3+s4)
8377 C Derivatives in gamma(k-1)
8380 s1=dip(3,jj,i)*dipderg(2,kk,k)
8382 s1=dip(2,jj,j)*dipderg(4,kk,l)
8385 call matvec2(AECA(1,1,imat),Ub2der(1,k),auxvec1(1))
8386 s2=0.5d0*scalar2(Ub2(1,i),auxvec1(1))
8388 call matvec2(ADtEA1derg(1,1,2,3-imat),b1(1,itj1),auxvec1(1))
8389 s3=-0.5d0*scalar2(b1(1,itj),auxvec1(1))
8391 call matvec2(ADtEA1derg(1,1,2,3-imat),b1(1,itl1),auxvec1(1))
8392 s3=-0.5d0*scalar2(b1(1,itl),auxvec1(1))
8394 call transpose2(EUgder(1,1,k),auxmat1(1,1))
8395 call matmat2(AECA(1,1,imat),auxmat1(1,1),pizda(1,1))
8396 vv(1)=pizda(1,1)-pizda(2,2)
8397 vv(2)=pizda(2,1)+pizda(1,2)
8398 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
8399 if (wturn6.gt.0.0d0 .and. k.eq.l+4 .and. i.eq.j+2) then
8401 gel_loc_turn6(k-1)=gel_loc_turn6(k-1)-ekont*(s1+s2+s3+s4)
8403 gel_loc_turn6(k-1)=gel_loc_turn6(k-1)-ekont*(s2+s3+s4)
8407 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s1+s2+s3+s4)
8409 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s2+s3+s4)
8412 C Derivatives in gamma(j-1) or gamma(l-1)
8413 if (l.eq.j+1 .and. l.gt.1) then
8414 call matvec2(AECAderg(1,1,imat),Ub2(1,k),auxvec(1))
8415 s2=0.5d0*scalar2(Ub2(1,i),auxvec(1))
8416 call matmat2(AECAderg(1,1,imat),auxmat(1,1),pizda(1,1))
8417 vv(1)=pizda(1,1)-pizda(2,2)
8418 vv(2)=pizda(2,1)+pizda(1,2)
8419 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
8420 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*(s2+s4)
8421 else if (j.gt.1) then
8422 call matvec2(AECAderg(1,1,imat),Ub2(1,k),auxvec(1))
8423 s2=0.5d0*scalar2(Ub2(1,i),auxvec(1))
8424 call matmat2(AECAderg(1,1,imat),auxmat(1,1),pizda(1,1))
8425 vv(1)=pizda(1,1)-pizda(2,2)
8426 vv(2)=pizda(2,1)+pizda(1,2)
8427 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
8428 if (wturn6.gt.0.0d0 .and. k.eq.l+4 .and. i.eq.j+2) then
8429 gel_loc_turn6(j-1)=gel_loc_turn6(j-1)-ekont*(s2+s4)
8431 g_corr6_loc(j-1)=g_corr6_loc(j-1)-ekont*(s2+s4)
8434 C Cartesian derivatives.
8441 s1=dipderx(lll,kkk,3,jj,i)*dip(3,kk,k)
8443 s1=dipderx(lll,kkk,2,jj,j)*dip(2,kk,l)
8447 s1=dip(3,jj,i)*dipderx(lll,kkk,3,kk,k)
8449 s1=dip(2,jj,j)*dipderx(lll,kkk,2,kk,l)
8453 call matvec2(AECAderx(1,1,lll,kkk,iii,imat),Ub2(1,k),
8455 s2=0.5d0*scalar2(Ub2(1,i),auxvec(1))
8457 call matvec2(ADtEA1derx(1,1,lll,kkk,iii,3-imat),
8458 & b1(1,itj1),auxvec(1))
8459 s3=-0.5d0*scalar2(b1(1,itj),auxvec(1))
8461 call matvec2(ADtEA1derx(1,1,lll,kkk,iii,3-imat),
8462 & b1(1,itl1),auxvec(1))
8463 s3=-0.5d0*scalar2(b1(1,itl),auxvec(1))
8465 call matmat2(AECAderx(1,1,lll,kkk,iii,imat),auxmat(1,1),
8467 vv(1)=pizda(1,1)-pizda(2,2)
8468 vv(2)=pizda(2,1)+pizda(1,2)
8469 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
8471 if (wturn6.gt.0.0d0 .and. k.eq.l+4 .and. i.eq.j+2) then
8473 derx_turn(lll,kkk,3-iii)=derx_turn(lll,kkk,3-iii)
8476 derx_turn(lll,kkk,3-iii)=derx_turn(lll,kkk,3-iii)
8479 derx_turn(lll,kkk,iii)=derx_turn(lll,kkk,iii)-s3
8482 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-(s1+s2+s4)
8484 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-(s2+s4)
8486 derx(lll,kkk,iii)=derx(lll,kkk,iii)-s3
8490 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s1+s2+s4)
8492 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s2+s4)
8495 derx(lll,kkk,iii)=derx(lll,kkk,iii)-s3
8497 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-s3
8505 c----------------------------------------------------------------------------
8506 double precision function eello_turn6(i,jj,kk)
8507 implicit real*8 (a-h,o-z)
8508 include 'DIMENSIONS'
8509 include 'COMMON.IOUNITS'
8510 include 'COMMON.CHAIN'
8511 include 'COMMON.DERIV'
8512 include 'COMMON.INTERACT'
8513 include 'COMMON.CONTACTS'
8514 include 'COMMON.TORSION'
8515 include 'COMMON.VAR'
8516 include 'COMMON.GEO'
8517 double precision vtemp1(2),vtemp2(2),vtemp3(2),vtemp4(2),
8518 & atemp(2,2),auxmat(2,2),achuj_temp(2,2),gtemp(2,2),gvec(2),
8520 double precision vtemp1d(2),vtemp2d(2),vtemp3d(2),vtemp4d(2),
8521 & atempd(2,2),auxmatd(2,2),achuj_tempd(2,2),gtempd(2,2),gvecd(2)
8522 C 4/7/01 AL Components s1, s8, and s13 were removed, because they pertain to
8523 C the respective energy moment and not to the cluster cumulant.
8532 iti=itortyp(itype(i))
8533 itk=itortyp(itype(k))
8534 itk1=itortyp(itype(k+1))
8535 itl=itortyp(itype(l))
8536 itj=itortyp(itype(j))
8537 cd write (2,*) 'itk',itk,' itk1',itk1,' itl',itl,' itj',itj
8538 cd write (2,*) 'i',i,' k',k,' j',j,' l',l
8539 cd if (i.ne.1 .or. j.ne.3 .or. k.ne.2 .or. l.ne.4) then
8544 cd & 'EELLO6: Contacts have occurred for peptide groups',i,j,
8546 cd call checkint_turn6(i,jj,kk,eel_turn6_num)
8550 derx_turn(lll,kkk,iii)=0.0d0
8557 eello6_5=eello6_graph4(l,k,j,i,kk,jj,2,.true.)
8559 cd write (2,*) 'eello6_5',eello6_5
8561 call transpose2(AEA(1,1,1),auxmat(1,1))
8562 call matmat2(EUg(1,1,i+1),auxmat(1,1),auxmat(1,1))
8563 ss1=scalar2(Ub2(1,i+2),b1(1,itl))
8564 s1 = (auxmat(1,1)+auxmat(2,2))*ss1
8566 call matvec2(EUg(1,1,i+2),b1(1,itl),vtemp1(1))
8567 call matvec2(AEA(1,1,1),vtemp1(1),vtemp1(1))
8568 s2 = scalar2(b1(1,itk),vtemp1(1))
8570 call transpose2(AEA(1,1,2),atemp(1,1))
8571 call matmat2(atemp(1,1),EUg(1,1,i+4),atemp(1,1))
8572 call matvec2(Ug2(1,1,i+2),dd(1,1,itk1),vtemp2(1))
8573 s8 = -(atemp(1,1)+atemp(2,2))*scalar2(cc(1,1,itl),vtemp2(1))
8575 call matmat2(EUg(1,1,i+3),AEA(1,1,2),auxmat(1,1))
8576 call matvec2(auxmat(1,1),Ub2(1,i+4),vtemp3(1))
8577 s12 = scalar2(Ub2(1,i+2),vtemp3(1))
8579 call transpose2(a_chuj(1,1,kk,i+1),achuj_temp(1,1))
8580 call matmat2(achuj_temp(1,1),EUg(1,1,i+2),gtemp(1,1))
8581 call matmat2(gtemp(1,1),EUg(1,1,i+3),gtemp(1,1))
8582 call matvec2(a_chuj(1,1,jj,i),Ub2(1,i+4),vtemp4(1))
8583 ss13 = scalar2(b1(1,itk),vtemp4(1))
8584 s13 = (gtemp(1,1)+gtemp(2,2))*ss13
8586 c write (2,*) 's1,s2,s8,s12,s13',s1,s2,s8,s12,s13
8592 eel_turn6 = eello6_5 - 0.5d0*(s1+s2+s12+s8+s13)
8593 C Derivatives in gamma(i+2)
8597 call transpose2(AEA(1,1,1),auxmatd(1,1))
8598 call matmat2(EUgder(1,1,i+1),auxmatd(1,1),auxmatd(1,1))
8599 s1d = (auxmatd(1,1)+auxmatd(2,2))*ss1
8600 call transpose2(AEAderg(1,1,2),atempd(1,1))
8601 call matmat2(atempd(1,1),EUg(1,1,i+4),atempd(1,1))
8602 s8d = -(atempd(1,1)+atempd(2,2))*scalar2(cc(1,1,itl),vtemp2(1))
8604 call matmat2(EUg(1,1,i+3),AEAderg(1,1,2),auxmatd(1,1))
8605 call matvec2(auxmatd(1,1),Ub2(1,i+4),vtemp3d(1))
8606 s12d = scalar2(Ub2(1,i+2),vtemp3d(1))
8612 gel_loc_turn6(i)=gel_loc_turn6(i)-0.5d0*ekont*(s1d+s8d+s12d)
8613 C Derivatives in gamma(i+3)
8615 call transpose2(AEA(1,1,1),auxmatd(1,1))
8616 call matmat2(EUg(1,1,i+1),auxmatd(1,1),auxmatd(1,1))
8617 ss1d=scalar2(Ub2der(1,i+2),b1(1,itl))
8618 s1d = (auxmatd(1,1)+auxmatd(2,2))*ss1d
8620 call matvec2(EUgder(1,1,i+2),b1(1,itl),vtemp1d(1))
8621 call matvec2(AEA(1,1,1),vtemp1d(1),vtemp1d(1))
8622 s2d = scalar2(b1(1,itk),vtemp1d(1))
8624 call matvec2(Ug2der(1,1,i+2),dd(1,1,itk1),vtemp2d(1))
8625 s8d = -(atemp(1,1)+atemp(2,2))*scalar2(cc(1,1,itl),vtemp2d(1))
8627 s12d = scalar2(Ub2der(1,i+2),vtemp3(1))
8629 call matmat2(achuj_temp(1,1),EUgder(1,1,i+2),gtempd(1,1))
8630 call matmat2(gtempd(1,1),EUg(1,1,i+3),gtempd(1,1))
8631 s13d = (gtempd(1,1)+gtempd(2,2))*ss13
8639 gel_loc_turn6(i+1)=gel_loc_turn6(i+1)
8640 & -0.5d0*ekont*(s1d+s2d+s8d+s12d+s13d)
8642 gel_loc_turn6(i+1)=gel_loc_turn6(i+1)
8643 & -0.5d0*ekont*(s2d+s12d)
8645 C Derivatives in gamma(i+4)
8646 call matmat2(EUgder(1,1,i+3),AEA(1,1,2),auxmatd(1,1))
8647 call matvec2(auxmatd(1,1),Ub2(1,i+4),vtemp3d(1))
8648 s12d = scalar2(Ub2(1,i+2),vtemp3d(1))
8650 call matmat2(achuj_temp(1,1),EUg(1,1,i+2),gtempd(1,1))
8651 call matmat2(gtempd(1,1),EUgder(1,1,i+3),gtempd(1,1))
8652 s13d = (gtempd(1,1)+gtempd(2,2))*ss13
8660 gel_loc_turn6(i+2)=gel_loc_turn6(i+2)-0.5d0*ekont*(s12d+s13d)
8662 gel_loc_turn6(i+2)=gel_loc_turn6(i+2)-0.5d0*ekont*(s12d)
8664 C Derivatives in gamma(i+5)
8666 call transpose2(AEAderg(1,1,1),auxmatd(1,1))
8667 call matmat2(EUg(1,1,i+1),auxmatd(1,1),auxmatd(1,1))
8668 s1d = (auxmatd(1,1)+auxmatd(2,2))*ss1
8670 call matvec2(EUg(1,1,i+2),b1(1,itl),vtemp1d(1))
8671 call matvec2(AEAderg(1,1,1),vtemp1d(1),vtemp1d(1))
8672 s2d = scalar2(b1(1,itk),vtemp1d(1))
8674 call transpose2(AEA(1,1,2),atempd(1,1))
8675 call matmat2(atempd(1,1),EUgder(1,1,i+4),atempd(1,1))
8676 s8d = -(atempd(1,1)+atempd(2,2))*scalar2(cc(1,1,itl),vtemp2(1))
8678 call matvec2(auxmat(1,1),Ub2der(1,i+4),vtemp3d(1))
8679 s12d = scalar2(Ub2(1,i+2),vtemp3d(1))
8681 call matvec2(a_chuj(1,1,jj,i),Ub2der(1,i+4),vtemp4d(1))
8682 ss13d = scalar2(b1(1,itk),vtemp4d(1))
8683 s13d = (gtemp(1,1)+gtemp(2,2))*ss13d
8691 gel_loc_turn6(i+3)=gel_loc_turn6(i+3)
8692 & -0.5d0*ekont*(s1d+s2d+s8d+s12d+s13d)
8694 gel_loc_turn6(i+3)=gel_loc_turn6(i+3)
8695 & -0.5d0*ekont*(s2d+s12d)
8697 C Cartesian derivatives
8702 call transpose2(AEAderx(1,1,lll,kkk,iii,1),auxmatd(1,1))
8703 call matmat2(EUg(1,1,i+1),auxmatd(1,1),auxmatd(1,1))
8704 s1d = (auxmatd(1,1)+auxmatd(2,2))*ss1
8706 call matvec2(EUg(1,1,i+2),b1(1,itl),vtemp1(1))
8707 call matvec2(AEAderx(1,1,lll,kkk,iii,1),vtemp1(1),
8709 s2d = scalar2(b1(1,itk),vtemp1d(1))
8711 call transpose2(AEAderx(1,1,lll,kkk,iii,2),atempd(1,1))
8712 call matmat2(atempd(1,1),EUg(1,1,i+4),atempd(1,1))
8713 s8d = -(atempd(1,1)+atempd(2,2))*
8714 & scalar2(cc(1,1,itl),vtemp2(1))
8716 call matmat2(EUg(1,1,i+3),AEAderx(1,1,lll,kkk,iii,2),
8718 call matvec2(auxmatd(1,1),Ub2(1,i+4),vtemp3d(1))
8719 s12d = scalar2(Ub2(1,i+2),vtemp3d(1))
8726 derx_turn(lll,kkk,iii) = derx_turn(lll,kkk,iii)
8729 derx_turn(lll,kkk,iii) = derx_turn(lll,kkk,iii)
8733 derx_turn(lll,kkk,3-iii) = derx_turn(lll,kkk,3-iii)
8734 & - 0.5d0*(s8d+s12d)
8736 derx_turn(lll,kkk,3-iii) = derx_turn(lll,kkk,3-iii)
8745 call transpose2(a_chuj_der(1,1,lll,kkk,kk,i+1),
8747 call matmat2(achuj_tempd(1,1),EUg(1,1,i+2),gtempd(1,1))
8748 call matmat2(gtempd(1,1),EUg(1,1,i+3),gtempd(1,1))
8749 s13d=(gtempd(1,1)+gtempd(2,2))*ss13
8750 derx_turn(lll,kkk,2) = derx_turn(lll,kkk,2)-0.5d0*s13d
8751 call matvec2(a_chuj_der(1,1,lll,kkk,jj,i),Ub2(1,i+4),
8753 ss13d = scalar2(b1(1,itk),vtemp4d(1))
8754 s13d = (gtemp(1,1)+gtemp(2,2))*ss13d
8755 derx_turn(lll,kkk,1) = derx_turn(lll,kkk,1)-0.5d0*s13d
8759 cd write(iout,*) 'eel6_turn6',eel_turn6,' eel_turn6_num',
8760 cd & 16*eel_turn6_num
8762 if (j.lt.nres-1) then
8769 if (l.lt.nres-1) then
8777 cgrad ggg1(ll)=eel_turn6*g_contij(ll,1)
8778 cgrad ggg2(ll)=eel_turn6*g_contij(ll,2)
8779 cgrad ghalf=0.5d0*ggg1(ll)
8781 gturn6ij=eel_turn6*g_contij(ll,1)+ekont*derx_turn(ll,1,1)
8782 gturn6kl=eel_turn6*g_contij(ll,2)+ekont*derx_turn(ll,1,2)
8783 gcorr6_turn(ll,i)=gcorr6_turn(ll,i)!+ghalf
8784 & +ekont*derx_turn(ll,2,1)
8785 gcorr6_turn(ll,i+1)=gcorr6_turn(ll,i+1)+ekont*derx_turn(ll,3,1)
8786 gcorr6_turn(ll,j)=gcorr6_turn(ll,j)!+ghalf
8787 & +ekont*derx_turn(ll,4,1)
8788 gcorr6_turn(ll,j1)=gcorr6_turn(ll,j1)+ekont*derx_turn(ll,5,1)
8789 gcorr6_turn_long(ll,j)=gcorr6_turn_long(ll,j)+gturn6ij
8790 gcorr6_turn_long(ll,i)=gcorr6_turn_long(ll,i)-gturn6ij
8791 cgrad ghalf=0.5d0*ggg2(ll)
8793 gcorr6_turn(ll,k)=gcorr6_turn(ll,k)!+ghalf
8794 & +ekont*derx_turn(ll,2,2)
8795 gcorr6_turn(ll,k+1)=gcorr6_turn(ll,k+1)+ekont*derx_turn(ll,3,2)
8796 gcorr6_turn(ll,l)=gcorr6_turn(ll,l)!+ghalf
8797 & +ekont*derx_turn(ll,4,2)
8798 gcorr6_turn(ll,l1)=gcorr6_turn(ll,l1)+ekont*derx_turn(ll,5,2)
8799 gcorr6_turn_long(ll,l)=gcorr6_turn_long(ll,l)+gturn6kl
8800 gcorr6_turn_long(ll,k)=gcorr6_turn_long(ll,k)-gturn6kl
8805 cgrad gcorr6_turn(ll,m)=gcorr6_turn(ll,m)+ggg1(ll)
8810 cgrad gcorr6_turn(ll,m)=gcorr6_turn(ll,m)+ggg2(ll)
8816 cgrad gcorr6_turn(ll,m)=gcorr6_turn(ll,m)+ekont*derx_turn(ll,1,1)
8821 cgrad gcorr6_turn(ll,m)=gcorr6_turn(ll,m)+ekont*derx_turn(ll,1,2)
8825 cd write (2,*) iii,g_corr6_loc(iii)
8827 eello_turn6=ekont*eel_turn6
8828 cd write (2,*) 'ekont',ekont
8829 cd write (2,*) 'eel_turn6',ekont*eel_turn6
8833 C-----------------------------------------------------------------------------
8834 double precision function scalar(u,v)
8835 !DIR$ INLINEALWAYS scalar
8837 cDEC$ ATTRIBUTES FORCEINLINE::scalar
8840 double precision u(3),v(3)
8841 cd double precision sc
8849 scalar=u(1)*v(1)+u(2)*v(2)+u(3)*v(3)
8852 crc-------------------------------------------------
8853 SUBROUTINE MATVEC2(A1,V1,V2)
8854 !DIR$ INLINEALWAYS MATVEC2
8856 cDEC$ ATTRIBUTES FORCEINLINE::MATVEC2
8858 implicit real*8 (a-h,o-z)
8859 include 'DIMENSIONS'
8860 DIMENSION A1(2,2),V1(2),V2(2)
8864 c 3 VI=VI+A1(I,K)*V1(K)
8868 vaux1=a1(1,1)*v1(1)+a1(1,2)*v1(2)
8869 vaux2=a1(2,1)*v1(1)+a1(2,2)*v1(2)
8874 C---------------------------------------
8875 SUBROUTINE MATMAT2(A1,A2,A3)
8877 cDEC$ ATTRIBUTES FORCEINLINE::MATMAT2
8879 implicit real*8 (a-h,o-z)
8880 include 'DIMENSIONS'
8881 DIMENSION A1(2,2),A2(2,2),A3(2,2)
8882 c DIMENSION AI3(2,2)
8886 c A3IJ=A3IJ+A1(I,K)*A2(K,J)
8892 ai3_11=a1(1,1)*a2(1,1)+a1(1,2)*a2(2,1)
8893 ai3_12=a1(1,1)*a2(1,2)+a1(1,2)*a2(2,2)
8894 ai3_21=a1(2,1)*a2(1,1)+a1(2,2)*a2(2,1)
8895 ai3_22=a1(2,1)*a2(1,2)+a1(2,2)*a2(2,2)
8903 c-------------------------------------------------------------------------
8904 double precision function scalar2(u,v)
8905 !DIR$ INLINEALWAYS scalar2
8907 double precision u(2),v(2)
8910 scalar2=u(1)*v(1)+u(2)*v(2)
8914 C-----------------------------------------------------------------------------
8916 subroutine transpose2(a,at)
8917 !DIR$ INLINEALWAYS transpose2
8919 cDEC$ ATTRIBUTES FORCEINLINE::transpose2
8922 double precision a(2,2),at(2,2)
8929 c--------------------------------------------------------------------------
8930 subroutine transpose(n,a,at)
8933 double precision a(n,n),at(n,n)
8941 C---------------------------------------------------------------------------
8942 subroutine prodmat3(a1,a2,kk,transp,prod)
8943 !DIR$ INLINEALWAYS prodmat3
8945 cDEC$ ATTRIBUTES FORCEINLINE::prodmat3
8949 double precision a1(2,2),a2(2,2),a2t(2,2),kk(2,2),prod(2,2)
8951 crc double precision auxmat(2,2),prod_(2,2)
8954 crc call transpose2(kk(1,1),auxmat(1,1))
8955 crc call matmat2(a1(1,1),auxmat(1,1),auxmat(1,1))
8956 crc call matmat2(auxmat(1,1),a2(1,1),prod_(1,1))
8958 prod(1,1)=(a1(1,1)*kk(1,1)+a1(1,2)*kk(1,2))*a2(1,1)
8959 & +(a1(1,1)*kk(2,1)+a1(1,2)*kk(2,2))*a2(2,1)
8960 prod(1,2)=(a1(1,1)*kk(1,1)+a1(1,2)*kk(1,2))*a2(1,2)
8961 & +(a1(1,1)*kk(2,1)+a1(1,2)*kk(2,2))*a2(2,2)
8962 prod(2,1)=(a1(2,1)*kk(1,1)+a1(2,2)*kk(1,2))*a2(1,1)
8963 & +(a1(2,1)*kk(2,1)+a1(2,2)*kk(2,2))*a2(2,1)
8964 prod(2,2)=(a1(2,1)*kk(1,1)+a1(2,2)*kk(1,2))*a2(1,2)
8965 & +(a1(2,1)*kk(2,1)+a1(2,2)*kk(2,2))*a2(2,2)
8968 crc call matmat2(a1(1,1),kk(1,1),auxmat(1,1))
8969 crc call matmat2(auxmat(1,1),a2(1,1),prod_(1,1))
8971 prod(1,1)=(a1(1,1)*kk(1,1)+a1(1,2)*kk(2,1))*a2(1,1)
8972 & +(a1(1,1)*kk(1,2)+a1(1,2)*kk(2,2))*a2(2,1)
8973 prod(1,2)=(a1(1,1)*kk(1,1)+a1(1,2)*kk(2,1))*a2(1,2)
8974 & +(a1(1,1)*kk(1,2)+a1(1,2)*kk(2,2))*a2(2,2)
8975 prod(2,1)=(a1(2,1)*kk(1,1)+a1(2,2)*kk(2,1))*a2(1,1)
8976 & +(a1(2,1)*kk(1,2)+a1(2,2)*kk(2,2))*a2(2,1)
8977 prod(2,2)=(a1(2,1)*kk(1,1)+a1(2,2)*kk(2,1))*a2(1,2)
8978 & +(a1(2,1)*kk(1,2)+a1(2,2)*kk(2,2))*a2(2,2)
8981 c call transpose2(a2(1,1),a2t(1,1))
8984 crc print *,((prod_(i,j),i=1,2),j=1,2)
8985 crc print *,((prod(i,j),i=1,2),j=1,2)