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 C write(iout,*) "zaczynam liczyc energie"
102 goto (101,102,103,104,105,106) ipot
103 C Lennard-Jones potential.
105 cd print '(a)','Exit ELJ'
107 C Lennard-Jones-Kihara potential (shifted).
110 C Berne-Pechukas potential (dilated LJ, angular dependence).
113 C Gay-Berne potential (shifted LJ, angular dependence).
116 C Gay-Berne-Vorobjev potential (shifted LJ, angular dependence).
119 C Soft-sphere potential
120 106 call e_softsphere(evdw)
121 C write(iout,*) "skonczylem ipoty"
124 C Calculate electrostatic (H-bonding) energy of the main chain.
127 C write(iout,*) "skonczylem ipoty"
129 cmc Sep-06: egb takes care of dynamic ss bonds too
131 c if (dyn_ss) call dyn_set_nss
133 c print *,"Processor",myrank," computed USCSC"
139 time_vec=time_vec+MPI_Wtime()-time01
141 c print *,"Processor",myrank," left VEC_AND_DERIV"
144 if (welec.gt.0d0.or.wvdwpp.gt.0d0.or.wel_loc.gt.0d0.or.
145 & wturn3.gt.0d0.or.wturn4.gt.0d0 .or. wcorr.gt.0.0d0
146 & .or. wcorr4.gt.0.0d0 .or. wcorr5.gt.0.d0
147 & .or. wcorr6.gt.0.0d0 .or. wturn6.gt.0.0d0 ) then
149 if (welec.gt.0d0.or.wel_loc.gt.0d0.or.
150 & wturn3.gt.0d0.or.wturn4.gt.0d0 .or. wcorr.gt.0.0d0
151 & .or. wcorr4.gt.0.0d0 .or. wcorr5.gt.0.d0
152 & .or. wcorr6.gt.0.0d0 .or. wturn6.gt.0.0d0 ) then
154 call eelec(ees,evdw1,eel_loc,eello_turn3,eello_turn4)
163 c write (iout,*) "Soft-spheer ELEC potential"
164 call eelec_soft_sphere(ees,evdw1,eel_loc,eello_turn3,
167 c print *,"Processor",myrank," computed UELEC"
169 C Calculate excluded-volume interaction energy between peptide groups
174 call escp(evdw2,evdw2_14)
180 c write (iout,*) "Soft-sphere SCP potential"
181 call escp_soft_sphere(evdw2,evdw2_14)
184 c Calculate the bond-stretching energy
188 C Calculate the disulfide-bridge and other energy and the contributions
189 C from other distance constraints.
190 cd print *,'Calling EHPB'
192 cd print *,'EHPB exitted succesfully.'
194 C Calculate the virtual-bond-angle energy.
196 if (wang.gt.0d0) then
201 c print *,"Processor",myrank," computed UB"
203 C Calculate the SC local energy.
206 c print *,"Processor",myrank," computed USC"
208 C Calculate the virtual-bond torsional energy.
210 cd print *,'nterm=',nterm
212 call etor(etors,edihcnstr)
217 c print *,"Processor",myrank," computed Utor"
219 C 6/23/01 Calculate double-torsional energy
221 if (wtor_d.gt.0) then
226 c print *,"Processor",myrank," computed Utord"
228 C 21/5/07 Calculate local sicdechain correlation energy
230 if (wsccor.gt.0.0d0) then
231 call eback_sc_corr(esccor)
235 c print *,"Processor",myrank," computed Usccorr"
237 C 12/1/95 Multi-body terms
241 if ((wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0
242 & .or. wturn6.gt.0.0d0) .and. ipot.lt.6) then
243 call multibody_eello(ecorr,ecorr5,ecorr6,eturn6,n_corr,n_corr1)
244 cd write(2,*)'multibody_eello n_corr=',n_corr,' n_corr1=',n_corr1,
245 cd &" ecorr",ecorr," ecorr5",ecorr5," ecorr6",ecorr6," eturn6",eturn6
252 if ((wcorr4.eq.0.0d0 .and. wcorr.gt.0.0d0) .and. ipot.lt.6) then
253 call multibody_hb(ecorr,ecorr5,ecorr6,n_corr,n_corr1)
254 cd write (iout,*) "multibody_hb ecorr",ecorr
256 c print *,"Processor",myrank," computed Ucorr"
258 C If performing constraint dynamics, call the constraint energy
259 C after the equilibration time
260 if(usampl.and.totT.gt.eq_time) then
268 time_enecalc=time_enecalc+MPI_Wtime()-time00
270 c print *,"Processor",myrank," computed Uconstr"
279 energia(2)=evdw2-evdw2_14
296 energia(8)=eello_turn3
297 energia(9)=eello_turn4
304 energia(19)=edihcnstr
306 energia(20)=Uconst+Uconst_back
308 c print *," Processor",myrank," calls SUM_ENERGY"
309 call sum_energy(energia,.true.)
310 if (dyn_ss) call dyn_set_nss
311 c print *," Processor",myrank," left SUM_ENERGY"
313 time_sumene=time_sumene+MPI_Wtime()-time00
317 c-------------------------------------------------------------------------------
318 subroutine sum_energy(energia,reduce)
319 implicit real*8 (a-h,o-z)
324 cMS$ATTRIBUTES C :: proc_proc
330 include 'COMMON.SETUP'
331 include 'COMMON.IOUNITS'
332 double precision energia(0:n_ene),enebuff(0:n_ene+1)
333 include 'COMMON.FFIELD'
334 include 'COMMON.DERIV'
335 include 'COMMON.INTERACT'
336 include 'COMMON.SBRIDGE'
337 include 'COMMON.CHAIN'
339 include 'COMMON.CONTROL'
340 include 'COMMON.TIME1'
343 if (nfgtasks.gt.1 .and. reduce) then
345 write (iout,*) "energies before REDUCE"
346 call enerprint(energia)
350 enebuff(i)=energia(i)
353 call MPI_Barrier(FG_COMM,IERR)
354 time_barrier_e=time_barrier_e+MPI_Wtime()-time00
356 call MPI_Reduce(enebuff(0),energia(0),n_ene+1,
357 & MPI_DOUBLE_PRECISION,MPI_SUM,king,FG_COMM,IERR)
359 write (iout,*) "energies after REDUCE"
360 call enerprint(energia)
363 time_Reduce=time_Reduce+MPI_Wtime()-time00
365 if (fg_rank.eq.0) then
369 evdw2=energia(2)+energia(18)
385 eello_turn3=energia(8)
386 eello_turn4=energia(9)
393 edihcnstr=energia(19)
398 etot=wsc*evdw+wscp*evdw2+welec*ees+wvdwpp*evdw1
399 & +wang*ebe+wtor*etors+wscloc*escloc
400 & +wstrain*ehpb+wcorr*ecorr+wcorr5*ecorr5
401 & +wcorr6*ecorr6+wturn4*eello_turn4+wturn3*eello_turn3
402 & +wturn6*eturn6+wel_loc*eel_loc+edihcnstr+wtor_d*etors_d
403 & +wbond*estr+Uconst+wsccor*esccor
405 etot=wsc*evdw+wscp*evdw2+welec*(ees+evdw1)
406 & +wang*ebe+wtor*etors+wscloc*escloc
407 & +wstrain*ehpb+wcorr*ecorr+wcorr5*ecorr5
408 & +wcorr6*ecorr6+wturn4*eello_turn4+wturn3*eello_turn3
409 & +wturn6*eturn6+wel_loc*eel_loc+edihcnstr+wtor_d*etors_d
410 & +wbond*estr+Uconst+wsccor*esccor
416 if (isnan(etot).ne.0) energia(0)=1.0d+99
418 if (isnan(etot)) energia(0)=1.0d+99
423 idumm=proc_proc(etot,i)
425 call proc_proc(etot,i)
427 if(i.eq.1)energia(0)=1.0d+99
434 c-------------------------------------------------------------------------------
435 subroutine sum_gradient
436 implicit real*8 (a-h,o-z)
441 cMS$ATTRIBUTES C :: proc_proc
447 double precision gradbufc(3,maxres),gradbufx(3,maxres),
448 & glocbuf(4*maxres),gradbufc_sum(3,maxres),gloc_scbuf(3,maxres)
449 include 'COMMON.SETUP'
450 include 'COMMON.IOUNITS'
451 include 'COMMON.FFIELD'
452 include 'COMMON.DERIV'
453 include 'COMMON.INTERACT'
454 include 'COMMON.SBRIDGE'
455 include 'COMMON.CHAIN'
457 include 'COMMON.CONTROL'
458 include 'COMMON.TIME1'
459 include 'COMMON.MAXGRAD'
460 include 'COMMON.SCCOR'
465 write (iout,*) "sum_gradient gvdwc, gvdwx"
467 write (iout,'(i3,3f10.5,5x,3f10.5,5x,f10.5)')
468 & i,(gvdwx(j,i),j=1,3),(gvdwc(j,i),j=1,3)
473 C FG slaves call the following matching MPI_Bcast in ERGASTULUM
474 if (nfgtasks.gt.1 .and. fg_rank.eq.0)
475 & call MPI_Bcast(1,1,MPI_INTEGER,king,FG_COMM,IERROR)
478 C 9/29/08 AL Transform parts of gradients in site coordinates to the gradient
479 C in virtual-bond-vector coordinates
482 c write (iout,*) "gel_loc gel_loc_long and gel_loc_loc"
484 c write (iout,'(i5,3f10.5,2x,3f10.5,2x,f10.5)')
485 c & i,(gel_loc(j,i),j=1,3),(gel_loc_long(j,i),j=1,3),gel_loc_loc(i)
487 c write (iout,*) "gel_loc_tur3 gel_loc_turn4"
489 c write (iout,'(i5,3f10.5,2x,f10.5)')
490 c & i,(gcorr4_turn(j,i),j=1,3),gel_loc_turn4(i)
492 write (iout,*) "gradcorr5 gradcorr5_long gradcorr5_loc"
494 write (iout,'(i3,3f10.5,5x,3f10.5,5x,f10.5)')
495 & i,(gradcorr5(j,i),j=1,3),(gradcorr5_long(j,i),j=1,3),
503 gradbufc(j,i)=wsc*gvdwc(j,i)+
504 & wscp*(gvdwc_scp(j,i)+gvdwc_scpp(j,i))+
505 & welec*gelc_long(j,i)+wvdwpp*gvdwpp(j,i)+
506 & wel_loc*gel_loc_long(j,i)+
507 & wcorr*gradcorr_long(j,i)+
508 & wcorr5*gradcorr5_long(j,i)+
509 & wcorr6*gradcorr6_long(j,i)+
510 & wturn6*gcorr6_turn_long(j,i)+
517 gradbufc(j,i)=wsc*gvdwc(j,i)+
518 & wscp*(gvdwc_scp(j,i)+gvdwc_scpp(j,i))+
519 & welec*gelc_long(j,i)+
521 & wel_loc*gel_loc_long(j,i)+
522 & wcorr*gradcorr_long(j,i)+
523 & wcorr5*gradcorr5_long(j,i)+
524 & wcorr6*gradcorr6_long(j,i)+
525 & wturn6*gcorr6_turn_long(j,i)+
531 if (nfgtasks.gt.1) then
534 write (iout,*) "gradbufc before allreduce"
536 write (iout,'(i3,3f10.5)') i,(gradbufc(j,i),j=1,3)
542 gradbufc_sum(j,i)=gradbufc(j,i)
545 c call MPI_AllReduce(gradbufc(1,1),gradbufc_sum(1,1),3*nres,
546 c & MPI_DOUBLE_PRECISION,MPI_SUM,FG_COMM,IERR)
547 c time_reduce=time_reduce+MPI_Wtime()-time00
549 c write (iout,*) "gradbufc_sum after allreduce"
551 c write (iout,'(i3,3f10.5)') i,(gradbufc_sum(j,i),j=1,3)
556 c time_allreduce=time_allreduce+MPI_Wtime()-time00
564 write (iout,*) "igrad_start",igrad_start," igrad_end",igrad_end
565 write (iout,*) (i," jgrad_start",jgrad_start(i),
566 & " jgrad_end ",jgrad_end(i),
567 & i=igrad_start,igrad_end)
570 c Obsolete and inefficient code; we can make the effort O(n) and, therefore,
571 c do not parallelize this part.
573 c do i=igrad_start,igrad_end
574 c do j=jgrad_start(i),jgrad_end(i)
576 c gradbufc(k,i)=gradbufc(k,i)+gradbufc_sum(k,j)
581 gradbufc(j,nres-1)=gradbufc_sum(j,nres)
585 gradbufc(j,i)=gradbufc(j,i+1)+gradbufc_sum(j,i+1)
589 write (iout,*) "gradbufc after summing"
591 write (iout,'(i3,3f10.5)') i,(gradbufc(j,i),j=1,3)
598 write (iout,*) "gradbufc"
600 write (iout,'(i3,3f10.5)') i,(gradbufc(j,i),j=1,3)
606 gradbufc_sum(j,i)=gradbufc(j,i)
611 gradbufc(j,nres-1)=gradbufc_sum(j,nres)
615 gradbufc(j,i)=gradbufc(j,i+1)+gradbufc_sum(j,i+1)
620 c gradbufc(k,i)=0.0d0
624 c gradbufc(k,i)=gradbufc(k,i)+gradbufc(k,j)
629 write (iout,*) "gradbufc after summing"
631 write (iout,'(i3,3f10.5)') i,(gradbufc(j,i),j=1,3)
639 gradbufc(k,nres)=0.0d0
644 gradc(j,i,icg)=gradbufc(j,i)+welec*gelc(j,i)+
645 & wel_loc*gel_loc(j,i)+
646 & 0.5d0*(wscp*gvdwc_scpp(j,i)+
647 & welec*gelc_long(j,i)+wvdwpp*gvdwpp(j,i)+
648 & wel_loc*gel_loc_long(j,i)+
649 & wcorr*gradcorr_long(j,i)+
650 & wcorr5*gradcorr5_long(j,i)+
651 & wcorr6*gradcorr6_long(j,i)+
652 & wturn6*gcorr6_turn_long(j,i))+
654 & wcorr*gradcorr(j,i)+
655 & wturn3*gcorr3_turn(j,i)+
656 & wturn4*gcorr4_turn(j,i)+
657 & wcorr5*gradcorr5(j,i)+
658 & wcorr6*gradcorr6(j,i)+
659 & wturn6*gcorr6_turn(j,i)+
660 & wsccor*gsccorc(j,i)
661 & +wscloc*gscloc(j,i)
663 gradc(j,i,icg)=gradbufc(j,i)+welec*gelc(j,i)+
664 & wel_loc*gel_loc(j,i)+
665 & 0.5d0*(wscp*gvdwc_scpp(j,i)+
666 & welec*gelc_long(j,i)
667 & wel_loc*gel_loc_long(j,i)+
668 & wcorr*gcorr_long(j,i)+
669 & wcorr5*gradcorr5_long(j,i)+
670 & wcorr6*gradcorr6_long(j,i)+
671 & wturn6*gcorr6_turn_long(j,i))+
673 & wcorr*gradcorr(j,i)+
674 & wturn3*gcorr3_turn(j,i)+
675 & wturn4*gcorr4_turn(j,i)+
676 & wcorr5*gradcorr5(j,i)+
677 & wcorr6*gradcorr6(j,i)+
678 & wturn6*gcorr6_turn(j,i)+
679 & wsccor*gsccorc(j,i)
680 & +wscloc*gscloc(j,i)
682 gradx(j,i,icg)=wsc*gvdwx(j,i)+wscp*gradx_scp(j,i)+
684 & wstrain*ghpbx(j,i)+wcorr*gradxorr(j,i)+
685 & wsccor*gsccorx(j,i)
686 & +wscloc*gsclocx(j,i)
690 write (iout,*) "gloc before adding corr"
692 write (iout,*) i,gloc(i,icg)
696 gloc(i,icg)=gloc(i,icg)+wcorr*gcorr_loc(i)
697 & +wcorr5*g_corr5_loc(i)
698 & +wcorr6*g_corr6_loc(i)
699 & +wturn4*gel_loc_turn4(i)
700 & +wturn3*gel_loc_turn3(i)
701 & +wturn6*gel_loc_turn6(i)
702 & +wel_loc*gel_loc_loc(i)
705 write (iout,*) "gloc after adding corr"
707 write (iout,*) i,gloc(i,icg)
711 if (nfgtasks.gt.1) then
714 gradbufc(j,i)=gradc(j,i,icg)
715 gradbufx(j,i)=gradx(j,i,icg)
719 glocbuf(i)=gloc(i,icg)
723 write (iout,*) "gloc_sc before reduce"
726 write (iout,*) i,j,gloc_sc(j,i,icg)
733 gloc_scbuf(j,i)=gloc_sc(j,i,icg)
737 call MPI_Barrier(FG_COMM,IERR)
738 time_barrier_g=time_barrier_g+MPI_Wtime()-time00
740 call MPI_Reduce(gradbufc(1,1),gradc(1,1,icg),3*nres,
741 & MPI_DOUBLE_PRECISION,MPI_SUM,king,FG_COMM,IERR)
742 call MPI_Reduce(gradbufx(1,1),gradx(1,1,icg),3*nres,
743 & MPI_DOUBLE_PRECISION,MPI_SUM,king,FG_COMM,IERR)
744 call MPI_Reduce(glocbuf(1),gloc(1,icg),4*nres,
745 & MPI_DOUBLE_PRECISION,MPI_SUM,king,FG_COMM,IERR)
746 time_reduce=time_reduce+MPI_Wtime()-time00
747 call MPI_Reduce(gloc_scbuf(1,1),gloc_sc(1,1,icg),3*nres,
748 & MPI_DOUBLE_PRECISION,MPI_SUM,king,FG_COMM,IERR)
749 time_reduce=time_reduce+MPI_Wtime()-time00
752 write (iout,*) "gloc_sc after reduce"
755 write (iout,*) i,j,gloc_sc(j,i,icg)
761 write (iout,*) "gloc after reduce"
763 write (iout,*) i,gloc(i,icg)
768 if (gnorm_check) then
770 c Compute the maximum elements of the gradient
780 gcorr3_turn_max=0.0d0
781 gcorr4_turn_max=0.0d0
784 gcorr6_turn_max=0.0d0
794 gvdwc_norm=dsqrt(scalar(gvdwc(1,i),gvdwc(1,i)))
795 if (gvdwc_norm.gt.gvdwc_max) gvdwc_max=gvdwc_norm
796 gvdwc_scp_norm=dsqrt(scalar(gvdwc_scp(1,i),gvdwc_scp(1,i)))
797 if (gvdwc_scp_norm.gt.gvdwc_scp_max)
798 & gvdwc_scp_max=gvdwc_scp_norm
799 gelc_norm=dsqrt(scalar(gelc(1,i),gelc(1,i)))
800 if (gelc_norm.gt.gelc_max) gelc_max=gelc_norm
801 gvdwpp_norm=dsqrt(scalar(gvdwpp(1,i),gvdwpp(1,i)))
802 if (gvdwpp_norm.gt.gvdwpp_max) gvdwpp_max=gvdwpp_norm
803 gradb_norm=dsqrt(scalar(gradb(1,i),gradb(1,i)))
804 if (gradb_norm.gt.gradb_max) gradb_max=gradb_norm
805 ghpbc_norm=dsqrt(scalar(ghpbc(1,i),ghpbc(1,i)))
806 if (ghpbc_norm.gt.ghpbc_max) ghpbc_max=ghpbc_norm
807 gradcorr_norm=dsqrt(scalar(gradcorr(1,i),gradcorr(1,i)))
808 if (gradcorr_norm.gt.gradcorr_max) gradcorr_max=gradcorr_norm
809 gel_loc_norm=dsqrt(scalar(gel_loc(1,i),gel_loc(1,i)))
810 if (gel_loc_norm.gt.gel_loc_max) gel_loc_max=gel_loc_norm
811 gcorr3_turn_norm=dsqrt(scalar(gcorr3_turn(1,i),
813 if (gcorr3_turn_norm.gt.gcorr3_turn_max)
814 & gcorr3_turn_max=gcorr3_turn_norm
815 gcorr4_turn_norm=dsqrt(scalar(gcorr4_turn(1,i),
817 if (gcorr4_turn_norm.gt.gcorr4_turn_max)
818 & gcorr4_turn_max=gcorr4_turn_norm
819 gradcorr5_norm=dsqrt(scalar(gradcorr5(1,i),gradcorr5(1,i)))
820 if (gradcorr5_norm.gt.gradcorr5_max)
821 & gradcorr5_max=gradcorr5_norm
822 gradcorr6_norm=dsqrt(scalar(gradcorr6(1,i),gradcorr6(1,i)))
823 if (gradcorr6_norm.gt.gradcorr6_max) gcorr6_max=gradcorr6_norm
824 gcorr6_turn_norm=dsqrt(scalar(gcorr6_turn(1,i),
826 if (gcorr6_turn_norm.gt.gcorr6_turn_max)
827 & gcorr6_turn_max=gcorr6_turn_norm
828 gsccorr_norm=dsqrt(scalar(gsccorc(1,i),gsccorc(1,i)))
829 if (gsccorr_norm.gt.gsccorr_max) gsccorr_max=gsccorr_norm
830 gscloc_norm=dsqrt(scalar(gscloc(1,i),gscloc(1,i)))
831 if (gscloc_norm.gt.gscloc_max) gscloc_max=gscloc_norm
832 gvdwx_norm=dsqrt(scalar(gvdwx(1,i),gvdwx(1,i)))
833 if (gvdwx_norm.gt.gvdwx_max) gvdwx_max=gvdwx_norm
834 gradx_scp_norm=dsqrt(scalar(gradx_scp(1,i),gradx_scp(1,i)))
835 if (gradx_scp_norm.gt.gradx_scp_max)
836 & gradx_scp_max=gradx_scp_norm
837 ghpbx_norm=dsqrt(scalar(ghpbx(1,i),ghpbx(1,i)))
838 if (ghpbx_norm.gt.ghpbx_max) ghpbx_max=ghpbx_norm
839 gradxorr_norm=dsqrt(scalar(gradxorr(1,i),gradxorr(1,i)))
840 if (gradxorr_norm.gt.gradxorr_max) gradxorr_max=gradxorr_norm
841 gsccorrx_norm=dsqrt(scalar(gsccorx(1,i),gsccorx(1,i)))
842 if (gsccorrx_norm.gt.gsccorrx_max) gsccorrx_max=gsccorrx_norm
843 gsclocx_norm=dsqrt(scalar(gsclocx(1,i),gsclocx(1,i)))
844 if (gsclocx_norm.gt.gsclocx_max) gsclocx_max=gsclocx_norm
848 open(istat,file=statname,position="append")
850 open(istat,file=statname,access="append")
852 write (istat,'(1h#,21f10.2)') gvdwc_max,gvdwc_scp_max,
853 & gelc_max,gvdwpp_max,gradb_max,ghpbc_max,
854 & gradcorr_max,gel_loc_max,gcorr3_turn_max,gcorr4_turn_max,
855 & gradcorr5_max,gradcorr6_max,gcorr6_turn_max,gsccorc_max,
856 & gscloc_max,gvdwx_max,gradx_scp_max,ghpbx_max,gradxorr_max,
857 & gsccorx_max,gsclocx_max
859 if (gvdwc_max.gt.1.0d4) then
860 write (iout,*) "gvdwc gvdwx gradb gradbx"
862 write(iout,'(i5,4(3f10.2,5x))') i,(gvdwc(j,i),gvdwx(j,i),
863 & gradb(j,i),gradbx(j,i),j=1,3)
865 call pdbout(0.0d0,'cipiszcze',iout)
871 write (iout,*) "gradc gradx gloc"
873 write (iout,'(i5,3f10.5,5x,3f10.5,5x,f10.5)')
874 & i,(gradc(j,i,icg),j=1,3),(gradx(j,i,icg),j=1,3),gloc(i,icg)
878 time_sumgradient=time_sumgradient+MPI_Wtime()-time01
882 c-------------------------------------------------------------------------------
883 subroutine rescale_weights(t_bath)
884 implicit real*8 (a-h,o-z)
886 include 'COMMON.IOUNITS'
887 include 'COMMON.FFIELD'
888 include 'COMMON.SBRIDGE'
889 double precision kfac /2.4d0/
890 double precision x,x2,x3,x4,x5,licznik /1.12692801104297249644/
892 c facT=2*temp0/(t_bath+temp0)
893 if (rescale_mode.eq.0) then
899 else if (rescale_mode.eq.1) then
900 facT=kfac/(kfac-1.0d0+t_bath/temp0)
901 facT2=kfac**2/(kfac**2-1.0d0+(t_bath/temp0)**2)
902 facT3=kfac**3/(kfac**3-1.0d0+(t_bath/temp0)**3)
903 facT4=kfac**4/(kfac**4-1.0d0+(t_bath/temp0)**4)
904 facT5=kfac**5/(kfac**5-1.0d0+(t_bath/temp0)**5)
905 else if (rescale_mode.eq.2) then
911 facT=licznik/dlog(dexp(x)+dexp(-x))
912 facT2=licznik/dlog(dexp(x2)+dexp(-x2))
913 facT3=licznik/dlog(dexp(x3)+dexp(-x3))
914 facT4=licznik/dlog(dexp(x4)+dexp(-x4))
915 facT5=licznik/dlog(dexp(x5)+dexp(-x5))
917 write (iout,*) "Wrong RESCALE_MODE",rescale_mode
918 write (*,*) "Wrong RESCALE_MODE",rescale_mode
920 call MPI_Finalize(MPI_COMM_WORLD,IERROR)
924 welec=weights(3)*fact
925 wcorr=weights(4)*fact3
926 wcorr5=weights(5)*fact4
927 wcorr6=weights(6)*fact5
928 wel_loc=weights(7)*fact2
929 wturn3=weights(8)*fact2
930 wturn4=weights(9)*fact3
931 wturn6=weights(10)*fact5
932 wtor=weights(13)*fact
933 wtor_d=weights(14)*fact2
934 wsccor=weights(21)*fact
938 C------------------------------------------------------------------------
939 subroutine enerprint(energia)
940 implicit real*8 (a-h,o-z)
942 include 'COMMON.IOUNITS'
943 include 'COMMON.FFIELD'
944 include 'COMMON.SBRIDGE'
946 double precision energia(0:n_ene)
951 evdw2=energia(2)+energia(18)
963 eello_turn3=energia(8)
964 eello_turn4=energia(9)
965 eello_turn6=energia(10)
971 edihcnstr=energia(19)
976 write (iout,10) evdw,wsc,evdw2,wscp,ees,welec,evdw1,wvdwpp,
977 & estr,wbond,ebe,wang,
978 & escloc,wscloc,etors,wtor,etors_d,wtor_d,ehpb,wstrain,
980 & ecorr5,wcorr5,ecorr6,wcorr6,eel_loc,wel_loc,eello_turn3,wturn3,
981 & eello_turn4,wturn4,eello_turn6,wturn6,esccor,wsccor,
984 10 format (/'Virtual-chain energies:'//
985 & 'EVDW= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC-SC)'/
986 & 'EVDW2= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC-p)'/
987 & 'EES= ',1pE16.6,' WEIGHT=',1pD16.6,' (p-p)'/
988 & 'EVDWPP=',1pE16.6,' WEIGHT=',1pD16.6,' (p-p VDW)'/
989 & 'ESTR= ',1pE16.6,' WEIGHT=',1pD16.6,' (stretching)'/
990 & 'EBE= ',1pE16.6,' WEIGHT=',1pD16.6,' (bending)'/
991 & 'ESC= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC local)'/
992 & 'ETORS= ',1pE16.6,' WEIGHT=',1pD16.6,' (torsional)'/
993 & 'ETORSD=',1pE16.6,' WEIGHT=',1pD16.6,' (double torsional)'/
994 & 'EHBP= ',1pE16.6,' WEIGHT=',1pD16.6,
995 & ' (SS bridges & dist. cnstr.)'/
996 & 'ECORR4=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
997 & 'ECORR5=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
998 & 'ECORR6=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
999 & 'EELLO= ',1pE16.6,' WEIGHT=',1pD16.6,' (electrostatic-local)'/
1000 & 'ETURN3=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 3rd order)'/
1001 & 'ETURN4=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 4th order)'/
1002 & 'ETURN6=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 6th order)'/
1003 & 'ESCCOR=',1pE16.6,' WEIGHT=',1pD16.6,' (backbone-rotamer corr)'/
1004 & 'EDIHC= ',1pE16.6,' (dihedral angle constraints)'/
1005 & 'ESS= ',1pE16.6,' (disulfide-bridge intrinsic energy)'/
1006 & 'UCONST= ',1pE16.6,' (Constraint energy)'/
1007 & 'ETOT= ',1pE16.6,' (total)')
1009 write (iout,10) evdw,wsc,evdw2,wscp,ees,welec,
1010 & estr,wbond,ebe,wang,
1011 & escloc,wscloc,etors,wtor,etors_d,wtor_d,ehpb,wstrain,
1013 & ecorr5,wcorr5,ecorr6,wcorr6,eel_loc,wel_loc,eello_turn3,wturn3,
1014 & eello_turn4,wturn4,eello_turn6,wturn6,esccor,wsccro,edihcnstr,
1015 & ebr*nss,Uconst,etot
1016 10 format (/'Virtual-chain energies:'//
1017 & 'EVDW= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC-SC)'/
1018 & 'EVDW2= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC-p)'/
1019 & 'EES= ',1pE16.6,' WEIGHT=',1pD16.6,' (p-p)'/
1020 & 'ESTR= ',1pE16.6,' WEIGHT=',1pD16.6,' (stretching)'/
1021 & 'EBE= ',1pE16.6,' WEIGHT=',1pD16.6,' (bending)'/
1022 & 'ESC= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC local)'/
1023 & 'ETORS= ',1pE16.6,' WEIGHT=',1pD16.6,' (torsional)'/
1024 & 'ETORSD=',1pE16.6,' WEIGHT=',1pD16.6,' (double torsional)'/
1025 & 'EHBP= ',1pE16.6,' WEIGHT=',1pD16.6,
1026 & ' (SS bridges & dist. cnstr.)'/
1027 & 'ECORR4=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
1028 & 'ECORR5=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
1029 & 'ECORR6=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
1030 & 'EELLO= ',1pE16.6,' WEIGHT=',1pD16.6,' (electrostatic-local)'/
1031 & 'ETURN3=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 3rd order)'/
1032 & 'ETURN4=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 4th order)'/
1033 & 'ETURN6=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 6th order)'/
1034 & 'ESCCOR=',1pE16.6,' WEIGHT=',1pD16.6,' (backbone-rotamer corr)'/
1035 & 'EDIHC= ',1pE16.6,' (dihedral angle constraints)'/
1036 & 'ESS= ',1pE16.6,' (disulfide-bridge intrinsic energy)'/
1037 & 'UCONST=',1pE16.6,' (Constraint energy)'/
1038 & 'ETOT= ',1pE16.6,' (total)')
1042 C-----------------------------------------------------------------------
1043 subroutine elj(evdw)
1045 C This subroutine calculates the interaction energy of nonbonded side chains
1046 C assuming the LJ potential of interaction.
1048 implicit real*8 (a-h,o-z)
1049 include 'DIMENSIONS'
1050 parameter (accur=1.0d-10)
1051 include 'COMMON.GEO'
1052 include 'COMMON.VAR'
1053 include 'COMMON.LOCAL'
1054 include 'COMMON.CHAIN'
1055 include 'COMMON.DERIV'
1056 include 'COMMON.INTERACT'
1057 include 'COMMON.TORSION'
1058 include 'COMMON.SBRIDGE'
1059 include 'COMMON.NAMES'
1060 include 'COMMON.IOUNITS'
1061 include 'COMMON.CONTACTS'
1063 c write(iout,*)'Entering ELJ nnt=',nnt,' nct=',nct,' expon=',expon
1065 do i=iatsc_s,iatsc_e
1067 if (itypi.eq.21) cycle
1075 C Calculate SC interaction energy.
1077 do iint=1,nint_gr(i)
1078 cd write (iout,*) 'i=',i,' iint=',iint,' istart=',istart(i,iint),
1079 cd & 'iend=',iend(i,iint)
1080 do j=istart(i,iint),iend(i,iint)
1082 if (itypj.eq.21) cycle
1086 C Change 12/1/95 to calculate four-body interactions
1087 rij=xj*xj+yj*yj+zj*zj
1089 c write (iout,*)'i=',i,' j=',j,' itypi=',itypi,' itypj=',itypj
1090 eps0ij=eps(itypi,itypj)
1092 e1=fac*fac*aa(itypi,itypj)
1093 e2=fac*bb(itypi,itypj)
1095 cd sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
1096 cd epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
1097 cd write (iout,'(2(a3,i3,2x),6(1pd12.4)/2(3(1pd12.4),5x)/)')
1098 cd & restyp(itypi),i,restyp(itypj),j,aa(itypi,itypj),
1099 cd & bb(itypi,itypj),1.0D0/dsqrt(rrij),evdwij,epsi,sigm,
1100 cd & (c(k,i),k=1,3),(c(k,j),k=1,3)
1103 C Calculate the components of the gradient in DC and X
1105 fac=-rrij*(e1+evdwij)
1110 gvdwx(k,i)=gvdwx(k,i)-gg(k)
1111 gvdwx(k,j)=gvdwx(k,j)+gg(k)
1112 gvdwc(k,i)=gvdwc(k,i)-gg(k)
1113 gvdwc(k,j)=gvdwc(k,j)+gg(k)
1117 cgrad gvdwc(l,k)=gvdwc(l,k)+gg(l)
1121 C 12/1/95, revised on 5/20/97
1123 C Calculate the contact function. The ith column of the array JCONT will
1124 C contain the numbers of atoms that make contacts with the atom I (of numbers
1125 C greater than I). The arrays FACONT and GACONT will contain the values of
1126 C the contact function and its derivative.
1128 C Uncomment next line, if the correlation interactions include EVDW explicitly.
1129 c if (j.gt.i+1 .and. evdwij.le.0.0D0) then
1130 C Uncomment next line, if the correlation interactions are contact function only
1131 if (j.gt.i+1.and. eps0ij.gt.0.0D0) then
1133 sigij=sigma(itypi,itypj)
1134 r0ij=rs0(itypi,itypj)
1136 C Check whether the SC's are not too far to make a contact.
1139 call gcont(rij,rcut,1.0d0,0.2d0*rcut,fcont,fprimcont)
1140 C Add a new contact, if the SC's are close enough, but not too close (r<sigma).
1142 if (fcont.gt.0.0D0) then
1143 C If the SC-SC distance if close to sigma, apply spline.
1144 cAdam call gcont(-rij,-1.03d0*sigij,2.0d0*sigij,1.0d0,
1145 cAdam & fcont1,fprimcont1)
1146 cAdam fcont1=1.0d0-fcont1
1147 cAdam if (fcont1.gt.0.0d0) then
1148 cAdam fprimcont=fprimcont*fcont1+fcont*fprimcont1
1149 cAdam fcont=fcont*fcont1
1151 C Uncomment following 4 lines to have the geometric average of the epsilon0's
1152 cga eps0ij=1.0d0/dsqrt(eps0ij)
1154 cga gg(k)=gg(k)*eps0ij
1156 cga eps0ij=-evdwij*eps0ij
1157 C Uncomment for AL's type of SC correlation interactions.
1158 cadam eps0ij=-evdwij
1159 num_conti=num_conti+1
1160 jcont(num_conti,i)=j
1161 facont(num_conti,i)=fcont*eps0ij
1162 fprimcont=eps0ij*fprimcont/rij
1164 cAdam gacont(1,num_conti,i)=-fprimcont*xj+fcont*gg(1)
1165 cAdam gacont(2,num_conti,i)=-fprimcont*yj+fcont*gg(2)
1166 cAdam gacont(3,num_conti,i)=-fprimcont*zj+fcont*gg(3)
1167 C Uncomment following 3 lines for Skolnick's type of SC correlation.
1168 gacont(1,num_conti,i)=-fprimcont*xj
1169 gacont(2,num_conti,i)=-fprimcont*yj
1170 gacont(3,num_conti,i)=-fprimcont*zj
1171 cd write (iout,'(2i5,2f10.5)') i,j,rij,facont(num_conti,i)
1172 cd write (iout,'(2i3,3f10.5)')
1173 cd & i,j,(gacont(kk,num_conti,i),kk=1,3)
1179 num_cont(i)=num_conti
1183 gvdwc(j,i)=expon*gvdwc(j,i)
1184 gvdwx(j,i)=expon*gvdwx(j,i)
1187 C******************************************************************************
1191 C To save time, the factor of EXPON has been extracted from ALL components
1192 C of GVDWC and GRADX. Remember to multiply them by this factor before further
1195 C******************************************************************************
1198 C-----------------------------------------------------------------------------
1199 subroutine eljk(evdw)
1201 C This subroutine calculates the interaction energy of nonbonded side chains
1202 C assuming the LJK potential of interaction.
1204 implicit real*8 (a-h,o-z)
1205 include 'DIMENSIONS'
1206 include 'COMMON.GEO'
1207 include 'COMMON.VAR'
1208 include 'COMMON.LOCAL'
1209 include 'COMMON.CHAIN'
1210 include 'COMMON.DERIV'
1211 include 'COMMON.INTERACT'
1212 include 'COMMON.IOUNITS'
1213 include 'COMMON.NAMES'
1216 c print *,'Entering ELJK nnt=',nnt,' nct=',nct,' expon=',expon
1218 do i=iatsc_s,iatsc_e
1220 if (itypi.eq.21) cycle
1226 C Calculate SC interaction energy.
1228 do iint=1,nint_gr(i)
1229 do j=istart(i,iint),iend(i,iint)
1231 if (itypj.eq.21) cycle
1235 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
1236 fac_augm=rrij**expon
1237 e_augm=augm(itypi,itypj)*fac_augm
1238 r_inv_ij=dsqrt(rrij)
1240 r_shift_inv=1.0D0/(rij+r0(itypi,itypj)-sigma(itypi,itypj))
1241 fac=r_shift_inv**expon
1242 e1=fac*fac*aa(itypi,itypj)
1243 e2=fac*bb(itypi,itypj)
1245 cd sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
1246 cd epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
1247 cd write (iout,'(2(a3,i3,2x),8(1pd12.4)/2(3(1pd12.4),5x)/)')
1248 cd & restyp(itypi),i,restyp(itypj),j,aa(itypi,itypj),
1249 cd & bb(itypi,itypj),augm(itypi,itypj),epsi,sigm,
1250 cd & sigma(itypi,itypj),1.0D0/dsqrt(rrij),evdwij,
1251 cd & (c(k,i),k=1,3),(c(k,j),k=1,3)
1254 C Calculate the components of the gradient in DC and X
1256 fac=-2.0D0*rrij*e_augm-r_inv_ij*r_shift_inv*(e1+e1+e2)
1261 gvdwx(k,i)=gvdwx(k,i)-gg(k)
1262 gvdwx(k,j)=gvdwx(k,j)+gg(k)
1263 gvdwc(k,i)=gvdwc(k,i)-gg(k)
1264 gvdwc(k,j)=gvdwc(k,j)+gg(k)
1268 cgrad gvdwc(l,k)=gvdwc(l,k)+gg(l)
1276 gvdwc(j,i)=expon*gvdwc(j,i)
1277 gvdwx(j,i)=expon*gvdwx(j,i)
1282 C-----------------------------------------------------------------------------
1283 subroutine ebp(evdw)
1285 C This subroutine calculates the interaction energy of nonbonded side chains
1286 C assuming the Berne-Pechukas potential of interaction.
1288 implicit real*8 (a-h,o-z)
1289 include 'DIMENSIONS'
1290 include 'COMMON.GEO'
1291 include 'COMMON.VAR'
1292 include 'COMMON.LOCAL'
1293 include 'COMMON.CHAIN'
1294 include 'COMMON.DERIV'
1295 include 'COMMON.NAMES'
1296 include 'COMMON.INTERACT'
1297 include 'COMMON.IOUNITS'
1298 include 'COMMON.CALC'
1299 common /srutu/ icall
1300 c double precision rrsave(maxdim)
1303 c print *,'Entering EBP nnt=',nnt,' nct=',nct,' expon=',expon
1305 c if (icall.eq.0) then
1311 do i=iatsc_s,iatsc_e
1313 if (itypi.eq.21) cycle
1318 dxi=dc_norm(1,nres+i)
1319 dyi=dc_norm(2,nres+i)
1320 dzi=dc_norm(3,nres+i)
1321 c dsci_inv=dsc_inv(itypi)
1322 dsci_inv=vbld_inv(i+nres)
1324 C Calculate SC interaction energy.
1326 do iint=1,nint_gr(i)
1327 do j=istart(i,iint),iend(i,iint)
1330 if (itypj.eq.21) cycle
1331 c dscj_inv=dsc_inv(itypj)
1332 dscj_inv=vbld_inv(j+nres)
1333 chi1=chi(itypi,itypj)
1334 chi2=chi(itypj,itypi)
1341 alf12=0.5D0*(alf1+alf2)
1342 C For diagnostics only!!!
1355 dxj=dc_norm(1,nres+j)
1356 dyj=dc_norm(2,nres+j)
1357 dzj=dc_norm(3,nres+j)
1358 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
1359 cd if (icall.eq.0) then
1365 C Calculate the angle-dependent terms of energy & contributions to derivatives.
1367 C Calculate whole angle-dependent part of epsilon and contributions
1368 C to its derivatives
1369 fac=(rrij*sigsq)**expon2
1370 e1=fac*fac*aa(itypi,itypj)
1371 e2=fac*bb(itypi,itypj)
1372 evdwij=eps1*eps2rt*eps3rt*(e1+e2)
1373 eps2der=evdwij*eps3rt
1374 eps3der=evdwij*eps2rt
1375 evdwij=evdwij*eps2rt*eps3rt
1378 sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
1379 epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
1380 cd write (iout,'(2(a3,i3,2x),15(0pf7.3))')
1381 cd & restyp(itypi),i,restyp(itypj),j,
1382 cd & epsi,sigm,chi1,chi2,chip1,chip2,
1383 cd & eps1,eps2rt**2,eps3rt**2,1.0D0/dsqrt(sigsq),
1384 cd & om1,om2,om12,1.0D0/dsqrt(rrij),
1387 C Calculate gradient components.
1388 e1=e1*eps1*eps2rt**2*eps3rt**2
1389 fac=-expon*(e1+evdwij)
1392 C Calculate radial part of the gradient
1396 C Calculate the angular part of the gradient and sum add the contributions
1397 C to the appropriate components of the Cartesian gradient.
1405 C-----------------------------------------------------------------------------
1406 subroutine egb(evdw)
1408 C This subroutine calculates the interaction energy of nonbonded side chains
1409 C assuming the Gay-Berne potential of interaction.
1411 implicit real*8 (a-h,o-z)
1412 include 'DIMENSIONS'
1413 include 'COMMON.GEO'
1414 include 'COMMON.VAR'
1415 include 'COMMON.LOCAL'
1416 include 'COMMON.CHAIN'
1417 include 'COMMON.DERIV'
1418 include 'COMMON.NAMES'
1419 include 'COMMON.INTERACT'
1420 include 'COMMON.IOUNITS'
1421 include 'COMMON.CALC'
1422 include 'COMMON.CONTROL'
1423 include 'COMMON.SBRIDGE'
1426 ccccc energy_dec=.false.
1427 c print *,'Entering EGB nnt=',nnt,' nct=',nct,' expon=',expon
1430 c if (icall.eq.0) lprn=.false.
1432 do i=iatsc_s,iatsc_e
1434 if (itypi.eq.21) cycle
1439 dxi=dc_norm(1,nres+i)
1440 dyi=dc_norm(2,nres+i)
1441 dzi=dc_norm(3,nres+i)
1442 c dsci_inv=dsc_inv(itypi)
1443 dsci_inv=vbld_inv(i+nres)
1444 c write (iout,*) "i",i,dsc_inv(itypi),dsci_inv,1.0d0/vbld(i+nres)
1445 c write (iout,*) "dcnori",dxi*dxi+dyi*dyi+dzi*dzi
1447 C Calculate SC interaction energy.
1449 do iint=1,nint_gr(i)
1450 do j=istart(i,iint),iend(i,iint)
1451 IF (dyn_ss_mask(i).and.dyn_ss_mask(j)) THEN
1452 call dyn_ssbond_ene(i,j,evdwij)
1454 if (energy_dec) write (iout,'(a6,2i5,0pf7.3,a3)')
1455 & 'evdw',i,j,evdwij,' ss'
1459 if (itypj.eq.21) cycle
1460 c dscj_inv=dsc_inv(itypj)
1461 dscj_inv=vbld_inv(j+nres)
1462 c write (iout,*) "j",j,dsc_inv(itypj),dscj_inv,
1463 c & 1.0d0/vbld(j+nres)
1464 c write (iout,*) "i",i," j", j," itype",itype(i),itype(j)
1465 sig0ij=sigma(itypi,itypj)
1466 chi1=chi(itypi,itypj)
1467 chi2=chi(itypj,itypi)
1474 alf12=0.5D0*(alf1+alf2)
1475 C For diagnostics only!!!
1488 dxj=dc_norm(1,nres+j)
1489 dyj=dc_norm(2,nres+j)
1490 dzj=dc_norm(3,nres+j)
1491 c write (iout,*) "dcnorj",dxi*dxi+dyi*dyi+dzi*dzi
1492 c write (iout,*) "j",j," dc_norm",
1493 c & dc_norm(1,nres+j),dc_norm(2,nres+j),dc_norm(3,nres+j)
1494 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
1496 C Calculate angle-dependent terms of energy and contributions to their
1500 sig=sig0ij*dsqrt(sigsq)
1501 rij_shift=1.0D0/rij-sig+sig0ij
1502 c for diagnostics; uncomment
1503 c rij_shift=1.2*sig0ij
1504 C I hate to put IF's in the loops, but here don't have another choice!!!!
1505 if (rij_shift.le.0.0D0) then
1507 cd write (iout,'(2(a3,i3,2x),17(0pf7.3))')
1508 cd & restyp(itypi),i,restyp(itypj),j,
1509 cd & rij_shift,1.0D0/rij,sig,sig0ij,sigsq,1-dsqrt(sigsq)
1513 c---------------------------------------------------------------
1514 rij_shift=1.0D0/rij_shift
1515 fac=rij_shift**expon
1516 e1=fac*fac*aa(itypi,itypj)
1517 e2=fac*bb(itypi,itypj)
1518 evdwij=eps1*eps2rt*eps3rt*(e1+e2)
1519 eps2der=evdwij*eps3rt
1520 eps3der=evdwij*eps2rt
1521 c write (iout,*) "sigsq",sigsq," sig",sig," eps2rt",eps2rt,
1522 c & " eps3rt",eps3rt," eps1",eps1," e1",e1," e2",e2
1523 evdwij=evdwij*eps2rt*eps3rt
1526 sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
1527 epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
1528 write (iout,'(2(a3,i3,2x),17(0pf7.3))')
1529 & restyp(itypi),i,restyp(itypj),j,
1530 & epsi,sigm,chi1,chi2,chip1,chip2,
1531 & eps1,eps2rt**2,eps3rt**2,sig,sig0ij,
1532 & om1,om2,om12,1.0D0/rij,1.0D0/rij_shift,
1536 if (energy_dec) write (iout,'(a6,2i5,0pf7.3)')
1539 C Calculate gradient components.
1540 e1=e1*eps1*eps2rt**2*eps3rt**2
1541 fac=-expon*(e1+evdwij)*rij_shift
1545 C Calculate the radial part of the gradient
1549 C Calculate angular part of the gradient.
1555 c write (iout,*) "Number of loop steps in EGB:",ind
1556 cccc energy_dec=.false.
1559 C-----------------------------------------------------------------------------
1560 subroutine egbv(evdw)
1562 C This subroutine calculates the interaction energy of nonbonded side chains
1563 C assuming the Gay-Berne-Vorobjev potential of interaction.
1565 implicit real*8 (a-h,o-z)
1566 include 'DIMENSIONS'
1567 include 'COMMON.GEO'
1568 include 'COMMON.VAR'
1569 include 'COMMON.LOCAL'
1570 include 'COMMON.CHAIN'
1571 include 'COMMON.DERIV'
1572 include 'COMMON.NAMES'
1573 include 'COMMON.INTERACT'
1574 include 'COMMON.IOUNITS'
1575 include 'COMMON.CALC'
1576 common /srutu/ icall
1579 c print *,'Entering EGB nnt=',nnt,' nct=',nct,' expon=',expon
1582 c if (icall.eq.0) lprn=.true.
1584 do i=iatsc_s,iatsc_e
1586 if (itypi.eq.21) cycle
1591 dxi=dc_norm(1,nres+i)
1592 dyi=dc_norm(2,nres+i)
1593 dzi=dc_norm(3,nres+i)
1594 c dsci_inv=dsc_inv(itypi)
1595 dsci_inv=vbld_inv(i+nres)
1597 C Calculate SC interaction energy.
1599 do iint=1,nint_gr(i)
1600 do j=istart(i,iint),iend(i,iint)
1603 if (itypj.eq.21) cycle
1604 c dscj_inv=dsc_inv(itypj)
1605 dscj_inv=vbld_inv(j+nres)
1606 sig0ij=sigma(itypi,itypj)
1607 r0ij=r0(itypi,itypj)
1608 chi1=chi(itypi,itypj)
1609 chi2=chi(itypj,itypi)
1616 alf12=0.5D0*(alf1+alf2)
1617 C For diagnostics only!!!
1630 dxj=dc_norm(1,nres+j)
1631 dyj=dc_norm(2,nres+j)
1632 dzj=dc_norm(3,nres+j)
1633 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
1635 C Calculate angle-dependent terms of energy and contributions to their
1639 sig=sig0ij*dsqrt(sigsq)
1640 rij_shift=1.0D0/rij-sig+r0ij
1641 C I hate to put IF's in the loops, but here don't have another choice!!!!
1642 if (rij_shift.le.0.0D0) then
1647 c---------------------------------------------------------------
1648 rij_shift=1.0D0/rij_shift
1649 fac=rij_shift**expon
1650 e1=fac*fac*aa(itypi,itypj)
1651 e2=fac*bb(itypi,itypj)
1652 evdwij=eps1*eps2rt*eps3rt*(e1+e2)
1653 eps2der=evdwij*eps3rt
1654 eps3der=evdwij*eps2rt
1655 fac_augm=rrij**expon
1656 e_augm=augm(itypi,itypj)*fac_augm
1657 evdwij=evdwij*eps2rt*eps3rt
1658 evdw=evdw+evdwij+e_augm
1660 sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
1661 epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
1662 write (iout,'(2(a3,i3,2x),17(0pf7.3))')
1663 & restyp(itypi),i,restyp(itypj),j,
1664 & epsi,sigm,sig,(augm(itypi,itypj)/epsi)**(1.0D0/12.0D0),
1665 & chi1,chi2,chip1,chip2,
1666 & eps1,eps2rt**2,eps3rt**2,
1667 & om1,om2,om12,1.0D0/rij,1.0D0/rij_shift,
1670 C Calculate gradient components.
1671 e1=e1*eps1*eps2rt**2*eps3rt**2
1672 fac=-expon*(e1+evdwij)*rij_shift
1674 fac=rij*fac-2*expon*rrij*e_augm
1675 C Calculate the radial part of the gradient
1679 C Calculate angular part of the gradient.
1685 C-----------------------------------------------------------------------------
1686 subroutine sc_angular
1687 C Calculate eps1,eps2,eps3,sigma, and parts of their derivatives in om1,om2,
1688 C om12. Called by ebp, egb, and egbv.
1690 include 'COMMON.CALC'
1691 include 'COMMON.IOUNITS'
1695 om1=dxi*erij(1)+dyi*erij(2)+dzi*erij(3)
1696 om2=dxj*erij(1)+dyj*erij(2)+dzj*erij(3)
1697 om12=dxi*dxj+dyi*dyj+dzi*dzj
1699 C Calculate eps1(om12) and its derivative in om12
1700 faceps1=1.0D0-om12*chiom12
1701 faceps1_inv=1.0D0/faceps1
1702 eps1=dsqrt(faceps1_inv)
1703 C Following variable is eps1*deps1/dom12
1704 eps1_om12=faceps1_inv*chiom12
1709 c write (iout,*) "om12",om12," eps1",eps1
1710 C Calculate sigma(om1,om2,om12) and the derivatives of sigma**2 in om1,om2,
1715 facsig=om1*chiom1+om2*chiom2-2.0D0*om1om2*chiom12
1716 sigsq=1.0D0-facsig*faceps1_inv
1717 sigsq_om1=(chiom1-chiom12*om2)*faceps1_inv
1718 sigsq_om2=(chiom2-chiom12*om1)*faceps1_inv
1719 sigsq_om12=-chi12*(om1om2*faceps1-om12*facsig)*faceps1_inv**2
1725 c write (iout,*) "chiom1",chiom1," chiom2",chiom2," chiom12",chiom12
1726 c write (iout,*) "faceps1",faceps1," faceps1_inv",faceps1_inv,
1728 C Calculate eps2 and its derivatives in om1, om2, and om12.
1731 chipom12=chip12*om12
1732 facp=1.0D0-om12*chipom12
1734 facp1=om1*chipom1+om2*chipom2-2.0D0*om1om2*chipom12
1735 c write (iout,*) "chipom1",chipom1," chipom2",chipom2,
1736 c & " chipom12",chipom12," facp",facp," facp_inv",facp_inv
1737 C Following variable is the square root of eps2
1738 eps2rt=1.0D0-facp1*facp_inv
1739 C Following three variables are the derivatives of the square root of eps
1740 C in om1, om2, and om12.
1741 eps2rt_om1=-4.0D0*(chipom1-chipom12*om2)*facp_inv
1742 eps2rt_om2=-4.0D0*(chipom2-chipom12*om1)*facp_inv
1743 eps2rt_om12=4.0D0*chip12*(om1om2*facp-om12*facp1)*facp_inv**2
1744 C Evaluate the "asymmetric" factor in the VDW constant, eps3
1745 eps3rt=1.0D0-alf1*om1+alf2*om2-alf12*om12
1746 c write (iout,*) "eps2rt",eps2rt," eps3rt",eps3rt
1747 c write (iout,*) "eps2rt_om1",eps2rt_om1," eps2rt_om2",eps2rt_om2,
1748 c & " eps2rt_om12",eps2rt_om12
1749 C Calculate whole angle-dependent part of epsilon and contributions
1750 C to its derivatives
1753 C----------------------------------------------------------------------------
1755 implicit real*8 (a-h,o-z)
1756 include 'DIMENSIONS'
1757 include 'COMMON.CHAIN'
1758 include 'COMMON.DERIV'
1759 include 'COMMON.CALC'
1760 include 'COMMON.IOUNITS'
1761 double precision dcosom1(3),dcosom2(3)
1762 eom1=eps2der*eps2rt_om1-2.0D0*alf1*eps3der+sigder*sigsq_om1
1763 eom2=eps2der*eps2rt_om2+2.0D0*alf2*eps3der+sigder*sigsq_om2
1764 eom12=evdwij*eps1_om12+eps2der*eps2rt_om12
1765 & -2.0D0*alf12*eps3der+sigder*sigsq_om12
1769 c eom12=evdwij*eps1_om12
1771 c write (iout,*) "eps2der",eps2der," eps3der",eps3der,
1772 c & " sigder",sigder
1773 c write (iout,*) "eps1_om12",eps1_om12," eps2rt_om12",eps2rt_om12
1774 c write (iout,*) "eom1",eom1," eom2",eom2," eom12",eom12
1776 dcosom1(k)=rij*(dc_norm(k,nres+i)-om1*erij(k))
1777 dcosom2(k)=rij*(dc_norm(k,nres+j)-om2*erij(k))
1780 gg(k)=gg(k)+eom1*dcosom1(k)+eom2*dcosom2(k)
1782 c write (iout,*) "gg",(gg(k),k=1,3)
1784 gvdwx(k,i)=gvdwx(k,i)-gg(k)
1785 & +(eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,nres+i))
1786 & +eom1*(erij(k)-om1*dc_norm(k,nres+i)))*dsci_inv
1787 gvdwx(k,j)=gvdwx(k,j)+gg(k)
1788 & +(eom12*(dc_norm(k,nres+i)-om12*dc_norm(k,nres+j))
1789 & +eom2*(erij(k)-om2*dc_norm(k,nres+j)))*dscj_inv
1790 c write (iout,*)(eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,nres+i))
1791 c & +eom1*(erij(k)-om1*dc_norm(k,nres+i)))*dsci_inv
1792 c write (iout,*)(eom12*(dc_norm(k,nres+i)-om12*dc_norm(k,nres+j))
1793 c & +eom2*(erij(k)-om2*dc_norm(k,nres+j)))*dscj_inv
1796 C Calculate the components of the gradient in DC and X
1800 cgrad gvdwc(l,k)=gvdwc(l,k)+gg(l)
1804 gvdwc(l,i)=gvdwc(l,i)-gg(l)
1805 gvdwc(l,j)=gvdwc(l,j)+gg(l)
1809 C-----------------------------------------------------------------------
1810 subroutine e_softsphere(evdw)
1812 C This subroutine calculates the interaction energy of nonbonded side chains
1813 C assuming the LJ potential of interaction.
1815 implicit real*8 (a-h,o-z)
1816 include 'DIMENSIONS'
1817 parameter (accur=1.0d-10)
1818 include 'COMMON.GEO'
1819 include 'COMMON.VAR'
1820 include 'COMMON.LOCAL'
1821 include 'COMMON.CHAIN'
1822 include 'COMMON.DERIV'
1823 include 'COMMON.INTERACT'
1824 include 'COMMON.TORSION'
1825 include 'COMMON.SBRIDGE'
1826 include 'COMMON.NAMES'
1827 include 'COMMON.IOUNITS'
1828 include 'COMMON.CONTACTS'
1830 cd print *,'Entering Esoft_sphere nnt=',nnt,' nct=',nct
1832 do i=iatsc_s,iatsc_e
1834 if (itypi.eq.21) cycle
1840 C Calculate SC interaction energy.
1842 do iint=1,nint_gr(i)
1843 cd write (iout,*) 'i=',i,' iint=',iint,' istart=',istart(i,iint),
1844 cd & 'iend=',iend(i,iint)
1845 do j=istart(i,iint),iend(i,iint)
1847 if (itypj.eq.21) cycle
1851 rij=xj*xj+yj*yj+zj*zj
1852 c write (iout,*)'i=',i,' j=',j,' itypi=',itypi,' itypj=',itypj
1853 r0ij=r0(itypi,itypj)
1855 c print *,i,j,r0ij,dsqrt(rij)
1856 if (rij.lt.r0ijsq) then
1857 evdwij=0.25d0*(rij-r0ijsq)**2
1865 C Calculate the components of the gradient in DC and X
1871 gvdwx(k,i)=gvdwx(k,i)-gg(k)
1872 gvdwx(k,j)=gvdwx(k,j)+gg(k)
1873 gvdwc(k,i)=gvdwc(k,i)-gg(k)
1874 gvdwc(k,j)=gvdwc(k,j)+gg(k)
1878 cgrad gvdwc(l,k)=gvdwc(l,k)+gg(l)
1886 C--------------------------------------------------------------------------
1887 subroutine eelec_soft_sphere(ees,evdw1,eel_loc,eello_turn3,
1890 C Soft-sphere potential of p-p interaction
1892 implicit real*8 (a-h,o-z)
1893 include 'DIMENSIONS'
1894 include 'COMMON.CONTROL'
1895 include 'COMMON.IOUNITS'
1896 include 'COMMON.GEO'
1897 include 'COMMON.VAR'
1898 include 'COMMON.LOCAL'
1899 include 'COMMON.CHAIN'
1900 include 'COMMON.DERIV'
1901 include 'COMMON.INTERACT'
1902 include 'COMMON.CONTACTS'
1903 include 'COMMON.TORSION'
1904 include 'COMMON.VECTORS'
1905 include 'COMMON.FFIELD'
1907 cd write(iout,*) 'In EELEC_soft_sphere'
1914 do i=iatel_s,iatel_e
1915 if (itype(i).eq.21 .or. itype(i+1).eq.21) cycle
1919 xmedi=c(1,i)+0.5d0*dxi
1920 ymedi=c(2,i)+0.5d0*dyi
1921 zmedi=c(3,i)+0.5d0*dzi
1923 c write (iout,*) 'i',i,' ielstart',ielstart(i),' ielend',ielend(i)
1924 do j=ielstart(i),ielend(i)
1925 if (itype(j).eq.21 .or. itype(j+1).eq.21) cycle
1929 if (j.eq.i+2 .and. itelj.eq.2) iteli=2
1930 r0ij=rpp(iteli,itelj)
1935 xj=c(1,j)+0.5D0*dxj-xmedi
1936 yj=c(2,j)+0.5D0*dyj-ymedi
1937 zj=c(3,j)+0.5D0*dzj-zmedi
1938 rij=xj*xj+yj*yj+zj*zj
1939 if (rij.lt.r0ijsq) then
1940 evdw1ij=0.25d0*(rij-r0ijsq)**2
1948 C Calculate contributions to the Cartesian gradient.
1954 gvdwpp(k,i)=gvdwpp(k,i)-ggg(k)
1955 gvdwpp(k,j)=gvdwpp(k,j)+ggg(k)
1958 * Loop over residues i+1 thru j-1.
1962 cgrad gelc(l,k)=gelc(l,k)+ggg(l)
1967 cgrad do i=nnt,nct-1
1969 cgrad gelc(k,i)=gelc(k,i)+0.5d0*gelc(k,i)
1971 cgrad do j=i+1,nct-1
1973 cgrad gelc(k,i)=gelc(k,i)+gelc(k,j)
1979 c------------------------------------------------------------------------------
1980 subroutine vec_and_deriv
1981 implicit real*8 (a-h,o-z)
1982 include 'DIMENSIONS'
1986 include 'COMMON.IOUNITS'
1987 include 'COMMON.GEO'
1988 include 'COMMON.VAR'
1989 include 'COMMON.LOCAL'
1990 include 'COMMON.CHAIN'
1991 include 'COMMON.VECTORS'
1992 include 'COMMON.SETUP'
1993 include 'COMMON.TIME1'
1994 dimension uyder(3,3,2),uzder(3,3,2),vbld_inv_temp(2)
1995 C Compute the local reference systems. For reference system (i), the
1996 C X-axis points from CA(i) to CA(i+1), the Y axis is in the
1997 C CA(i)-CA(i+1)-CA(i+2) plane, and the Z axis is perpendicular to this plane.
1999 do i=ivec_start,ivec_end
2003 if (i.eq.nres-1) then
2004 C Case of the last full residue
2005 C Compute the Z-axis
2006 call vecpr(dc_norm(1,i),dc_norm(1,i-1),uz(1,i))
2007 costh=dcos(pi-theta(nres))
2008 fac=1.0d0/dsqrt(1.0d0-costh*costh)
2012 C Compute the derivatives of uz
2014 uzder(2,1,1)=-dc_norm(3,i-1)
2015 uzder(3,1,1)= dc_norm(2,i-1)
2016 uzder(1,2,1)= dc_norm(3,i-1)
2018 uzder(3,2,1)=-dc_norm(1,i-1)
2019 uzder(1,3,1)=-dc_norm(2,i-1)
2020 uzder(2,3,1)= dc_norm(1,i-1)
2023 uzder(2,1,2)= dc_norm(3,i)
2024 uzder(3,1,2)=-dc_norm(2,i)
2025 uzder(1,2,2)=-dc_norm(3,i)
2027 uzder(3,2,2)= dc_norm(1,i)
2028 uzder(1,3,2)= dc_norm(2,i)
2029 uzder(2,3,2)=-dc_norm(1,i)
2031 C Compute the Y-axis
2034 uy(k,i)=fac*(dc_norm(k,i-1)-costh*dc_norm(k,i))
2036 C Compute the derivatives of uy
2039 uyder(k,j,1)=2*dc_norm(k,i-1)*dc_norm(j,i)
2040 & -dc_norm(k,i)*dc_norm(j,i-1)
2041 uyder(k,j,2)=-dc_norm(j,i)*dc_norm(k,i)
2043 uyder(j,j,1)=uyder(j,j,1)-costh
2044 uyder(j,j,2)=1.0d0+uyder(j,j,2)
2049 uygrad(l,k,j,i)=uyder(l,k,j)
2050 uzgrad(l,k,j,i)=uzder(l,k,j)
2054 call unormderiv(uy(1,i),uyder(1,1,1),facy,uygrad(1,1,1,i))
2055 call unormderiv(uy(1,i),uyder(1,1,2),facy,uygrad(1,1,2,i))
2056 call unormderiv(uz(1,i),uzder(1,1,1),fac,uzgrad(1,1,1,i))
2057 call unormderiv(uz(1,i),uzder(1,1,2),fac,uzgrad(1,1,2,i))
2060 C Compute the Z-axis
2061 call vecpr(dc_norm(1,i),dc_norm(1,i+1),uz(1,i))
2062 costh=dcos(pi-theta(i+2))
2063 fac=1.0d0/dsqrt(1.0d0-costh*costh)
2067 C Compute the derivatives of uz
2069 uzder(2,1,1)=-dc_norm(3,i+1)
2070 uzder(3,1,1)= dc_norm(2,i+1)
2071 uzder(1,2,1)= dc_norm(3,i+1)
2073 uzder(3,2,1)=-dc_norm(1,i+1)
2074 uzder(1,3,1)=-dc_norm(2,i+1)
2075 uzder(2,3,1)= dc_norm(1,i+1)
2078 uzder(2,1,2)= dc_norm(3,i)
2079 uzder(3,1,2)=-dc_norm(2,i)
2080 uzder(1,2,2)=-dc_norm(3,i)
2082 uzder(3,2,2)= dc_norm(1,i)
2083 uzder(1,3,2)= dc_norm(2,i)
2084 uzder(2,3,2)=-dc_norm(1,i)
2086 C Compute the Y-axis
2089 uy(k,i)=facy*(dc_norm(k,i+1)-costh*dc_norm(k,i))
2091 C Compute the derivatives of uy
2094 uyder(k,j,1)=2*dc_norm(k,i+1)*dc_norm(j,i)
2095 & -dc_norm(k,i)*dc_norm(j,i+1)
2096 uyder(k,j,2)=-dc_norm(j,i)*dc_norm(k,i)
2098 uyder(j,j,1)=uyder(j,j,1)-costh
2099 uyder(j,j,2)=1.0d0+uyder(j,j,2)
2104 uygrad(l,k,j,i)=uyder(l,k,j)
2105 uzgrad(l,k,j,i)=uzder(l,k,j)
2109 call unormderiv(uy(1,i),uyder(1,1,1),facy,uygrad(1,1,1,i))
2110 call unormderiv(uy(1,i),uyder(1,1,2),facy,uygrad(1,1,2,i))
2111 call unormderiv(uz(1,i),uzder(1,1,1),fac,uzgrad(1,1,1,i))
2112 call unormderiv(uz(1,i),uzder(1,1,2),fac,uzgrad(1,1,2,i))
2116 vbld_inv_temp(1)=vbld_inv(i+1)
2117 if (i.lt.nres-1) then
2118 vbld_inv_temp(2)=vbld_inv(i+2)
2120 vbld_inv_temp(2)=vbld_inv(i)
2125 uygrad(l,k,j,i)=vbld_inv_temp(j)*uygrad(l,k,j,i)
2126 uzgrad(l,k,j,i)=vbld_inv_temp(j)*uzgrad(l,k,j,i)
2131 #if defined(PARVEC) && defined(MPI)
2132 if (nfgtasks1.gt.1) then
2134 c print *,"Processor",fg_rank1,kolor1," ivec_start",ivec_start,
2135 c & " ivec_displ",(ivec_displ(i),i=0,nfgtasks1-1),
2136 c & " ivec_count",(ivec_count(i),i=0,nfgtasks1-1)
2137 call MPI_Allgatherv(uy(1,ivec_start),ivec_count(fg_rank1),
2138 & MPI_UYZ,uy(1,1),ivec_count(0),ivec_displ(0),MPI_UYZ,
2140 call MPI_Allgatherv(uz(1,ivec_start),ivec_count(fg_rank1),
2141 & MPI_UYZ,uz(1,1),ivec_count(0),ivec_displ(0),MPI_UYZ,
2143 call MPI_Allgatherv(uygrad(1,1,1,ivec_start),
2144 & ivec_count(fg_rank1),MPI_UYZGRAD,uygrad(1,1,1,1),ivec_count(0),
2145 & ivec_displ(0),MPI_UYZGRAD,FG_COMM1,IERR)
2146 call MPI_Allgatherv(uzgrad(1,1,1,ivec_start),
2147 & ivec_count(fg_rank1),MPI_UYZGRAD,uzgrad(1,1,1,1),ivec_count(0),
2148 & ivec_displ(0),MPI_UYZGRAD,FG_COMM1,IERR)
2149 time_gather=time_gather+MPI_Wtime()-time00
2151 c if (fg_rank.eq.0) then
2152 c write (iout,*) "Arrays UY and UZ"
2154 c write (iout,'(i5,3f10.5,5x,3f10.5)') i,(uy(k,i),k=1,3),
2161 C-----------------------------------------------------------------------------
2162 subroutine check_vecgrad
2163 implicit real*8 (a-h,o-z)
2164 include 'DIMENSIONS'
2165 include 'COMMON.IOUNITS'
2166 include 'COMMON.GEO'
2167 include 'COMMON.VAR'
2168 include 'COMMON.LOCAL'
2169 include 'COMMON.CHAIN'
2170 include 'COMMON.VECTORS'
2171 dimension uygradt(3,3,2,maxres),uzgradt(3,3,2,maxres)
2172 dimension uyt(3,maxres),uzt(3,maxres)
2173 dimension uygradn(3,3,2),uzgradn(3,3,2),erij(3)
2174 double precision delta /1.0d-7/
2177 crc write(iout,'(2i5,2(3f10.5,5x))') i,1,dc_norm(:,i)
2178 crc write(iout,'(2i5,2(3f10.5,5x))') i,2,uy(:,i)
2179 crc write(iout,'(2i5,2(3f10.5,5x)/)')i,3,uz(:,i)
2180 cd write(iout,'(2i5,2(3f10.5,5x))') i,1,
2181 cd & (dc_norm(if90,i),if90=1,3)
2182 cd write(iout,'(2i5,2(3f10.5,5x))') i,2,(uy(if90,i),if90=1,3)
2183 cd write(iout,'(2i5,2(3f10.5,5x)/)')i,3,(uz(if90,i),if90=1,3)
2184 cd write(iout,'(a)')
2190 uygradt(l,k,j,i)=uygrad(l,k,j,i)
2191 uzgradt(l,k,j,i)=uzgrad(l,k,j,i)
2204 cd write (iout,*) 'i=',i
2206 erij(k)=dc_norm(k,i)
2210 dc_norm(k,i)=erij(k)
2212 dc_norm(j,i)=dc_norm(j,i)+delta
2213 c fac=dsqrt(scalar(dc_norm(1,i),dc_norm(1,i)))
2215 c dc_norm(k,i)=dc_norm(k,i)/fac
2217 c write (iout,*) (dc_norm(k,i),k=1,3)
2218 c write (iout,*) (erij(k),k=1,3)
2221 uygradn(k,j,1)=(uy(k,i)-uyt(k,i))/delta
2222 uygradn(k,j,2)=(uy(k,i-1)-uyt(k,i-1))/delta
2223 uzgradn(k,j,1)=(uz(k,i)-uzt(k,i))/delta
2224 uzgradn(k,j,2)=(uz(k,i-1)-uzt(k,i-1))/delta
2226 c write (iout,'(i5,3f8.5,3x,3f8.5,5x,3f8.5,3x,3f8.5)')
2227 c & j,(uzgradt(k,j,1,i),k=1,3),(uzgradn(k,j,1),k=1,3),
2228 c & (uzgradt(k,j,2,i-1),k=1,3),(uzgradn(k,j,2),k=1,3)
2231 dc_norm(k,i)=erij(k)
2234 cd write (iout,'(i5,3f8.5,3x,3f8.5,5x,3f8.5,3x,3f8.5)')
2235 cd & k,(uygradt(k,l,1,i),l=1,3),(uygradn(k,l,1),l=1,3),
2236 cd & (uygradt(k,l,2,i-1),l=1,3),(uygradn(k,l,2),l=1,3)
2237 cd write (iout,'(i5,3f8.5,3x,3f8.5,5x,3f8.5,3x,3f8.5)')
2238 cd & k,(uzgradt(k,l,1,i),l=1,3),(uzgradn(k,l,1),l=1,3),
2239 cd & (uzgradt(k,l,2,i-1),l=1,3),(uzgradn(k,l,2),l=1,3)
2240 cd write (iout,'(a)')
2245 C--------------------------------------------------------------------------
2246 subroutine set_matrices
2247 implicit real*8 (a-h,o-z)
2248 include 'DIMENSIONS'
2251 include "COMMON.SETUP"
2253 integer status(MPI_STATUS_SIZE)
2255 include 'COMMON.IOUNITS'
2256 include 'COMMON.GEO'
2257 include 'COMMON.VAR'
2258 include 'COMMON.LOCAL'
2259 include 'COMMON.CHAIN'
2260 include 'COMMON.DERIV'
2261 include 'COMMON.INTERACT'
2262 include 'COMMON.CONTACTS'
2263 include 'COMMON.TORSION'
2264 include 'COMMON.VECTORS'
2265 include 'COMMON.FFIELD'
2266 double precision auxvec(2),auxmat(2,2)
2268 C Compute the virtual-bond-torsional-angle dependent quantities needed
2269 C to calculate the el-loc multibody terms of various order.
2272 do i=ivec_start+2,ivec_end+2
2276 if (i .lt. nres+1) then
2313 if (i .gt. 3 .and. i .lt. nres+1) then
2314 obrot_der(1,i-2)=-sin1
2315 obrot_der(2,i-2)= cos1
2316 Ugder(1,1,i-2)= sin1
2317 Ugder(1,2,i-2)=-cos1
2318 Ugder(2,1,i-2)=-cos1
2319 Ugder(2,2,i-2)=-sin1
2322 obrot2_der(1,i-2)=-dwasin2
2323 obrot2_der(2,i-2)= dwacos2
2324 Ug2der(1,1,i-2)= dwasin2
2325 Ug2der(1,2,i-2)=-dwacos2
2326 Ug2der(2,1,i-2)=-dwacos2
2327 Ug2der(2,2,i-2)=-dwasin2
2329 obrot_der(1,i-2)=0.0d0
2330 obrot_der(2,i-2)=0.0d0
2331 Ugder(1,1,i-2)=0.0d0
2332 Ugder(1,2,i-2)=0.0d0
2333 Ugder(2,1,i-2)=0.0d0
2334 Ugder(2,2,i-2)=0.0d0
2335 obrot2_der(1,i-2)=0.0d0
2336 obrot2_der(2,i-2)=0.0d0
2337 Ug2der(1,1,i-2)=0.0d0
2338 Ug2der(1,2,i-2)=0.0d0
2339 Ug2der(2,1,i-2)=0.0d0
2340 Ug2der(2,2,i-2)=0.0d0
2342 c if (i.gt. iatel_s+2 .and. i.lt.iatel_e+5) then
2343 if (i.gt. nnt+2 .and. i.lt.nct+2) then
2344 c write(iout,*) (itype(i-2))
2345 iti = itortyp(itype(i-2))
2349 c if (i.gt. iatel_s+1 .and. i.lt.iatel_e+4) then
2350 if (i.gt. nnt+1 .and. i.lt.nct+1) then
2351 iti1 = itortyp(itype(i-1))
2355 cd write (iout,*) '*******i',i,' iti1',iti
2356 cd write (iout,*) 'b1',b1(:,iti)
2357 cd write (iout,*) 'b2',b2(:,iti)
2358 cd write (iout,*) 'Ug',Ug(:,:,i-2)
2359 c if (i .gt. iatel_s+2) then
2360 if (i .gt. nnt+2) then
2361 call matvec2(Ug(1,1,i-2),b2(1,iti),Ub2(1,i-2))
2362 call matmat2(EE(1,1,iti),Ug(1,1,i-2),EUg(1,1,i-2))
2363 if (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0)
2365 call matmat2(CC(1,1,iti),Ug(1,1,i-2),CUg(1,1,i-2))
2366 call matmat2(DD(1,1,iti),Ug(1,1,i-2),DUg(1,1,i-2))
2367 call matmat2(Dtilde(1,1,iti),Ug2(1,1,i-2),DtUg2(1,1,i-2))
2368 call matvec2(Ctilde(1,1,iti1),obrot(1,i-2),Ctobr(1,i-2))
2369 call matvec2(Dtilde(1,1,iti),obrot2(1,i-2),Dtobr2(1,i-2))
2380 DtUg2(l,k,i-2)=0.0d0
2384 call matvec2(Ugder(1,1,i-2),b2(1,iti),Ub2der(1,i-2))
2385 call matmat2(EE(1,1,iti),Ugder(1,1,i-2),EUgder(1,1,i-2))
2387 muder(k,i-2)=Ub2der(k,i-2)
2389 c if (i.gt. iatel_s+1 .and. i.lt.iatel_e+4) then
2390 if (i.gt. nnt+1 .and. i.lt.nct+1) then
2391 iti1 = itortyp(itype(i-1))
2396 mu(k,i-2)=Ub2(k,i-2)+b1(k,iti1)
2398 cd write (iout,*) 'mu ',mu(:,i-2),i-2
2399 cd write (iout,*) 'b1 ',b1(:,iti1),i-2
2400 cd write (iout,*) 'Ub2 ',Ub2(:,i-2),i-2
2401 cd write (iout,*) 'Ug ',Ug(:,:,i-2),i-2
2402 cd write (iout,*) 'b2 ',b2(:,itortyp(itype(i))),i-2
2403 cd write (iout,*) 'mu1',mu1(:,i-2)
2404 cd write (iout,*) 'mu2',mu2(:,i-2)
2405 if (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or.wcorr6.gt.0.0d0)
2407 call matmat2(CC(1,1,iti1),Ugder(1,1,i-2),CUgder(1,1,i-2))
2408 call matmat2(DD(1,1,iti),Ugder(1,1,i-2),DUgder(1,1,i-2))
2409 call matmat2(Dtilde(1,1,iti),Ug2der(1,1,i-2),DtUg2der(1,1,i-2))
2410 call matvec2(Ctilde(1,1,iti1),obrot_der(1,i-2),Ctobrder(1,i-2))
2411 call matvec2(Dtilde(1,1,iti),obrot2_der(1,i-2),Dtobr2der(1,i-2))
2412 C Vectors and matrices dependent on a single virtual-bond dihedral.
2413 call matvec2(DD(1,1,iti),b1tilde(1,iti1),auxvec(1))
2414 call matvec2(Ug2(1,1,i-2),auxvec(1),Ug2Db1t(1,i-2))
2415 call matvec2(Ug2der(1,1,i-2),auxvec(1),Ug2Db1tder(1,i-2))
2416 call matvec2(CC(1,1,iti1),Ub2(1,i-2),CUgb2(1,i-2))
2417 call matvec2(CC(1,1,iti1),Ub2der(1,i-2),CUgb2der(1,i-2))
2418 call matmat2(EUg(1,1,i-2),CC(1,1,iti1),EUgC(1,1,i-2))
2419 call matmat2(EUgder(1,1,i-2),CC(1,1,iti1),EUgCder(1,1,i-2))
2420 call matmat2(EUg(1,1,i-2),DD(1,1,iti1),EUgD(1,1,i-2))
2421 call matmat2(EUgder(1,1,i-2),DD(1,1,iti1),EUgDder(1,1,i-2))
2424 C Matrices dependent on two consecutive virtual-bond dihedrals.
2425 C The order of matrices is from left to right.
2426 if (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or.wcorr6.gt.0.0d0)
2428 c do i=max0(ivec_start,2),ivec_end
2430 call matmat2(DtUg2(1,1,i-1),EUg(1,1,i),DtUg2EUg(1,1,i))
2431 call matmat2(DtUg2der(1,1,i-1),EUg(1,1,i),DtUg2EUgder(1,1,1,i))
2432 call matmat2(DtUg2(1,1,i-1),EUgder(1,1,i),DtUg2EUgder(1,1,2,i))
2433 call transpose2(DtUg2(1,1,i-1),auxmat(1,1))
2434 call matmat2(auxmat(1,1),EUg(1,1,i),Ug2DtEUg(1,1,i))
2435 call matmat2(auxmat(1,1),EUgder(1,1,i),Ug2DtEUgder(1,1,2,i))
2436 call transpose2(DtUg2der(1,1,i-1),auxmat(1,1))
2437 call matmat2(auxmat(1,1),EUg(1,1,i),Ug2DtEUgder(1,1,1,i))
2440 #if defined(MPI) && defined(PARMAT)
2442 c if (fg_rank.eq.0) then
2443 write (iout,*) "Arrays UG and UGDER before GATHER"
2445 write (iout,'(i5,4f10.5,5x,4f10.5)') i,
2446 & ((ug(l,k,i),l=1,2),k=1,2),
2447 & ((ugder(l,k,i),l=1,2),k=1,2)
2449 write (iout,*) "Arrays UG2 and UG2DER"
2451 write (iout,'(i5,4f10.5,5x,4f10.5)') i,
2452 & ((ug2(l,k,i),l=1,2),k=1,2),
2453 & ((ug2der(l,k,i),l=1,2),k=1,2)
2455 write (iout,*) "Arrays OBROT OBROT2 OBROTDER and OBROT2DER"
2457 write (iout,'(i5,4f10.5,5x,4f10.5)') i,
2458 & (obrot(k,i),k=1,2),(obrot2(k,i),k=1,2),
2459 & (obrot_der(k,i),k=1,2),(obrot2_der(k,i),k=1,2)
2461 write (iout,*) "Arrays COSTAB SINTAB COSTAB2 and SINTAB2"
2463 write (iout,'(i5,4f10.5,5x,4f10.5)') i,
2464 & costab(i),sintab(i),costab2(i),sintab2(i)
2466 write (iout,*) "Array MUDER"
2468 write (iout,'(i5,2f10.5)') i,muder(1,i),muder(2,i)
2472 if (nfgtasks.gt.1) then
2474 c write(iout,*)"Processor",fg_rank,kolor," ivec_start",ivec_start,
2475 c & " ivec_displ",(ivec_displ(i),i=0,nfgtasks-1),
2476 c & " ivec_count",(ivec_count(i),i=0,nfgtasks-1)
2478 call MPI_Allgatherv(Ub2(1,ivec_start),ivec_count(fg_rank1),
2479 & MPI_MU,Ub2(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2481 call MPI_Allgatherv(Ub2der(1,ivec_start),ivec_count(fg_rank1),
2482 & MPI_MU,Ub2der(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2484 call MPI_Allgatherv(mu(1,ivec_start),ivec_count(fg_rank1),
2485 & MPI_MU,mu(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2487 call MPI_Allgatherv(muder(1,ivec_start),ivec_count(fg_rank1),
2488 & MPI_MU,muder(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2490 call MPI_Allgatherv(Eug(1,1,ivec_start),ivec_count(fg_rank1),
2491 & MPI_MAT1,Eug(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2493 call MPI_Allgatherv(Eugder(1,1,ivec_start),ivec_count(fg_rank1),
2494 & MPI_MAT1,Eugder(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2496 call MPI_Allgatherv(costab(ivec_start),ivec_count(fg_rank1),
2497 & MPI_DOUBLE_PRECISION,costab(1),ivec_count(0),ivec_displ(0),
2498 & MPI_DOUBLE_PRECISION,FG_COMM1,IERR)
2499 call MPI_Allgatherv(sintab(ivec_start),ivec_count(fg_rank1),
2500 & MPI_DOUBLE_PRECISION,sintab(1),ivec_count(0),ivec_displ(0),
2501 & MPI_DOUBLE_PRECISION,FG_COMM1,IERR)
2502 call MPI_Allgatherv(costab2(ivec_start),ivec_count(fg_rank1),
2503 & MPI_DOUBLE_PRECISION,costab2(1),ivec_count(0),ivec_displ(0),
2504 & MPI_DOUBLE_PRECISION,FG_COMM1,IERR)
2505 call MPI_Allgatherv(sintab2(ivec_start),ivec_count(fg_rank1),
2506 & MPI_DOUBLE_PRECISION,sintab2(1),ivec_count(0),ivec_displ(0),
2507 & MPI_DOUBLE_PRECISION,FG_COMM1,IERR)
2508 if (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0)
2510 call MPI_Allgatherv(Ctobr(1,ivec_start),ivec_count(fg_rank1),
2511 & MPI_MU,Ctobr(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2513 call MPI_Allgatherv(Ctobrder(1,ivec_start),ivec_count(fg_rank1),
2514 & MPI_MU,Ctobrder(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2516 call MPI_Allgatherv(Dtobr2(1,ivec_start),ivec_count(fg_rank1),
2517 & MPI_MU,Dtobr2(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2519 call MPI_Allgatherv(Dtobr2der(1,ivec_start),ivec_count(fg_rank1),
2520 & MPI_MU,Dtobr2der(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2522 call MPI_Allgatherv(Ug2Db1t(1,ivec_start),ivec_count(fg_rank1),
2523 & MPI_MU,Ug2Db1t(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2525 call MPI_Allgatherv(Ug2Db1tder(1,ivec_start),
2526 & ivec_count(fg_rank1),
2527 & MPI_MU,Ug2Db1tder(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2529 call MPI_Allgatherv(CUgb2(1,ivec_start),ivec_count(fg_rank1),
2530 & MPI_MU,CUgb2(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2532 call MPI_Allgatherv(CUgb2der(1,ivec_start),ivec_count(fg_rank1),
2533 & MPI_MU,CUgb2der(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2535 call MPI_Allgatherv(Cug(1,1,ivec_start),ivec_count(fg_rank1),
2536 & MPI_MAT1,Cug(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2538 call MPI_Allgatherv(Cugder(1,1,ivec_start),ivec_count(fg_rank1),
2539 & MPI_MAT1,Cugder(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2541 call MPI_Allgatherv(Dug(1,1,ivec_start),ivec_count(fg_rank1),
2542 & MPI_MAT1,Dug(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2544 call MPI_Allgatherv(Dugder(1,1,ivec_start),ivec_count(fg_rank1),
2545 & MPI_MAT1,Dugder(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2547 call MPI_Allgatherv(Dtug2(1,1,ivec_start),ivec_count(fg_rank1),
2548 & MPI_MAT1,Dtug2(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2550 call MPI_Allgatherv(Dtug2der(1,1,ivec_start),
2551 & ivec_count(fg_rank1),
2552 & MPI_MAT1,Dtug2der(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2554 call MPI_Allgatherv(EugC(1,1,ivec_start),ivec_count(fg_rank1),
2555 & MPI_MAT1,EugC(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2557 call MPI_Allgatherv(EugCder(1,1,ivec_start),ivec_count(fg_rank1),
2558 & MPI_MAT1,EugCder(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2560 call MPI_Allgatherv(EugD(1,1,ivec_start),ivec_count(fg_rank1),
2561 & MPI_MAT1,EugD(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2563 call MPI_Allgatherv(EugDder(1,1,ivec_start),ivec_count(fg_rank1),
2564 & MPI_MAT1,EugDder(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2566 call MPI_Allgatherv(DtUg2EUg(1,1,ivec_start),
2567 & ivec_count(fg_rank1),
2568 & MPI_MAT1,DtUg2EUg(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2570 call MPI_Allgatherv(Ug2DtEUg(1,1,ivec_start),
2571 & ivec_count(fg_rank1),
2572 & MPI_MAT1,Ug2DtEUg(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2574 call MPI_Allgatherv(DtUg2EUgder(1,1,1,ivec_start),
2575 & ivec_count(fg_rank1),
2576 & MPI_MAT2,DtUg2EUgder(1,1,1,1),ivec_count(0),ivec_displ(0),
2577 & MPI_MAT2,FG_COMM1,IERR)
2578 call MPI_Allgatherv(Ug2DtEUgder(1,1,1,ivec_start),
2579 & ivec_count(fg_rank1),
2580 & MPI_MAT2,Ug2DtEUgder(1,1,1,1),ivec_count(0),ivec_displ(0),
2581 & MPI_MAT2,FG_COMM1,IERR)
2584 c Passes matrix info through the ring
2587 if (irecv.lt.0) irecv=nfgtasks1-1
2590 if (inext.ge.nfgtasks1) inext=0
2592 c write (iout,*) "isend",isend," irecv",irecv
2594 lensend=lentyp(isend)
2595 lenrecv=lentyp(irecv)
2596 c write (iout,*) "lensend",lensend," lenrecv",lenrecv
2597 c call MPI_SENDRECV(ug(1,1,ivec_displ(isend)+1),1,
2598 c & MPI_ROTAT1(lensend),inext,2200+isend,
2599 c & ug(1,1,ivec_displ(irecv)+1),1,MPI_ROTAT1(lenrecv),
2600 c & iprev,2200+irecv,FG_COMM,status,IERR)
2601 c write (iout,*) "Gather ROTAT1"
2603 c call MPI_SENDRECV(obrot(1,ivec_displ(isend)+1),1,
2604 c & MPI_ROTAT2(lensend),inext,3300+isend,
2605 c & obrot(1,ivec_displ(irecv)+1),1,MPI_ROTAT2(lenrecv),
2606 c & iprev,3300+irecv,FG_COMM,status,IERR)
2607 c write (iout,*) "Gather ROTAT2"
2609 call MPI_SENDRECV(costab(ivec_displ(isend)+1),1,
2610 & MPI_ROTAT_OLD(lensend),inext,4400+isend,
2611 & costab(ivec_displ(irecv)+1),1,MPI_ROTAT_OLD(lenrecv),
2612 & iprev,4400+irecv,FG_COMM,status,IERR)
2613 c write (iout,*) "Gather ROTAT_OLD"
2615 call MPI_SENDRECV(mu(1,ivec_displ(isend)+1),1,
2616 & MPI_PRECOMP11(lensend),inext,5500+isend,
2617 & mu(1,ivec_displ(irecv)+1),1,MPI_PRECOMP11(lenrecv),
2618 & iprev,5500+irecv,FG_COMM,status,IERR)
2619 c write (iout,*) "Gather PRECOMP11"
2621 call MPI_SENDRECV(Eug(1,1,ivec_displ(isend)+1),1,
2622 & MPI_PRECOMP12(lensend),inext,6600+isend,
2623 & Eug(1,1,ivec_displ(irecv)+1),1,MPI_PRECOMP12(lenrecv),
2624 & iprev,6600+irecv,FG_COMM,status,IERR)
2625 c write (iout,*) "Gather PRECOMP12"
2627 if (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0)
2629 call MPI_SENDRECV(ug2db1t(1,ivec_displ(isend)+1),1,
2630 & MPI_ROTAT2(lensend),inext,7700+isend,
2631 & ug2db1t(1,ivec_displ(irecv)+1),1,MPI_ROTAT2(lenrecv),
2632 & iprev,7700+irecv,FG_COMM,status,IERR)
2633 c write (iout,*) "Gather PRECOMP21"
2635 call MPI_SENDRECV(EUgC(1,1,ivec_displ(isend)+1),1,
2636 & MPI_PRECOMP22(lensend),inext,8800+isend,
2637 & EUgC(1,1,ivec_displ(irecv)+1),1,MPI_PRECOMP22(lenrecv),
2638 & iprev,8800+irecv,FG_COMM,status,IERR)
2639 c write (iout,*) "Gather PRECOMP22"
2641 call MPI_SENDRECV(Ug2DtEUgder(1,1,1,ivec_displ(isend)+1),1,
2642 & MPI_PRECOMP23(lensend),inext,9900+isend,
2643 & Ug2DtEUgder(1,1,1,ivec_displ(irecv)+1),1,
2644 & MPI_PRECOMP23(lenrecv),
2645 & iprev,9900+irecv,FG_COMM,status,IERR)
2646 c write (iout,*) "Gather PRECOMP23"
2651 if (irecv.lt.0) irecv=nfgtasks1-1
2654 time_gather=time_gather+MPI_Wtime()-time00
2657 c if (fg_rank.eq.0) then
2658 write (iout,*) "Arrays UG and UGDER"
2660 write (iout,'(i5,4f10.5,5x,4f10.5)') i,
2661 & ((ug(l,k,i),l=1,2),k=1,2),
2662 & ((ugder(l,k,i),l=1,2),k=1,2)
2664 write (iout,*) "Arrays UG2 and UG2DER"
2666 write (iout,'(i5,4f10.5,5x,4f10.5)') i,
2667 & ((ug2(l,k,i),l=1,2),k=1,2),
2668 & ((ug2der(l,k,i),l=1,2),k=1,2)
2670 write (iout,*) "Arrays OBROT OBROT2 OBROTDER and OBROT2DER"
2672 write (iout,'(i5,4f10.5,5x,4f10.5)') i,
2673 & (obrot(k,i),k=1,2),(obrot2(k,i),k=1,2),
2674 & (obrot_der(k,i),k=1,2),(obrot2_der(k,i),k=1,2)
2676 write (iout,*) "Arrays COSTAB SINTAB COSTAB2 and SINTAB2"
2678 write (iout,'(i5,4f10.5,5x,4f10.5)') i,
2679 & costab(i),sintab(i),costab2(i),sintab2(i)
2681 write (iout,*) "Array MUDER"
2683 write (iout,'(i5,2f10.5)') i,muder(1,i),muder(2,i)
2689 cd iti = itortyp(itype(i))
2692 cd write (iout,'(2f10.5,5x,2f10.5,5x,2f10.5)')
2693 cd & (EE(j,k,iti),k=1,2),(Ug(j,k,i),k=1,2),(EUg(j,k,i),k=1,2)
2698 C--------------------------------------------------------------------------
2699 subroutine eelec(ees,evdw1,eel_loc,eello_turn3,eello_turn4)
2701 C This subroutine calculates the average interaction energy and its gradient
2702 C in the virtual-bond vectors between non-adjacent peptide groups, based on
2703 C the potential described in Liwo et al., Protein Sci., 1993, 2, 1715.
2704 C The potential depends both on the distance of peptide-group centers and on
2705 C the orientation of the CA-CA virtual bonds.
2707 implicit real*8 (a-h,o-z)
2711 include 'DIMENSIONS'
2712 include 'COMMON.CONTROL'
2713 include 'COMMON.SETUP'
2714 include 'COMMON.IOUNITS'
2715 include 'COMMON.GEO'
2716 include 'COMMON.VAR'
2717 include 'COMMON.LOCAL'
2718 include 'COMMON.CHAIN'
2719 include 'COMMON.DERIV'
2720 include 'COMMON.INTERACT'
2721 include 'COMMON.CONTACTS'
2722 include 'COMMON.TORSION'
2723 include 'COMMON.VECTORS'
2724 include 'COMMON.FFIELD'
2725 include 'COMMON.TIME1'
2726 dimension ggg(3),gggp(3),gggm(3),erij(3),dcosb(3),dcosg(3),
2727 & erder(3,3),uryg(3,3),urzg(3,3),vryg(3,3),vrzg(3,3)
2728 double precision acipa(2,2),agg(3,4),aggi(3,4),aggi1(3,4),
2729 & aggj(3,4),aggj1(3,4),a_temp(2,2),muij(4),eel_loc_ij
2730 common /locel/ a_temp,agg,aggi,aggi1,aggj,aggj1,a22,a23,a32,a33,
2731 & dxi,dyi,dzi,dx_normi,dy_normi,dz_normi,xmedi,ymedi,zmedi,
2733 c 4/26/02 - AL scaling factor for 1,4 repulsive VDW interactions
2735 double precision scal_el /1.0d0/
2737 double precision scal_el /0.5d0/
2740 C 13-go grudnia roku pamietnego...
2741 double precision unmat(3,3) /1.0d0,0.0d0,0.0d0,
2742 & 0.0d0,1.0d0,0.0d0,
2743 & 0.0d0,0.0d0,1.0d0/
2744 cd write(iout,*) 'In EELEC'
2746 cd write(iout,*) 'Type',i
2747 cd write(iout,*) 'B1',B1(:,i)
2748 cd write(iout,*) 'B2',B2(:,i)
2749 cd write(iout,*) 'CC',CC(:,:,i)
2750 cd write(iout,*) 'DD',DD(:,:,i)
2751 cd write(iout,*) 'EE',EE(:,:,i)
2753 cd call check_vecgrad
2755 if (icheckgrad.eq.1) then
2757 fac=1.0d0/dsqrt(scalar(dc(1,i),dc(1,i)))
2759 dc_norm(k,i)=dc(k,i)*fac
2761 c write (iout,*) 'i',i,' fac',fac
2764 if (wel_loc.gt.0.0d0 .or. wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0
2765 & .or. wcorr6.gt.0.0d0 .or. wturn3.gt.0.0d0 .or.
2766 & wturn4.gt.0.0d0 .or. wturn6.gt.0.0d0) then
2767 c call vec_and_deriv
2772 c write (iout,*) "after set matrices"
2774 time_mat=time_mat+MPI_Wtime()-time01
2778 cd write (iout,*) 'i=',i
2780 cd write (iout,'(i5,2f10.5)') k,uy(k,i),uz(k,i)
2783 cd write (iout,'(f10.5,2x,3f10.5,2x,3f10.5)')
2784 cd & uz(k,i),(uzgrad(k,l,1,i),l=1,3),(uzgrad(k,l,2,i),l=1,3)
2797 cd print '(a)','Enter EELEC'
2798 cd write (iout,*) 'iatel_s=',iatel_s,' iatel_e=',iatel_e
2800 gel_loc_loc(i)=0.0d0
2805 c 9/27/08 AL Split the interaction loop to ensure load balancing of turn terms
2807 C Loop over i,i+2 and i,i+3 pairs of the peptide groups
2809 c write(iout,*) "przed turnem3 loop"
2810 do i=iturn3_start,iturn3_end
2811 if (itype(i).eq.21 .or. itype(i+1).eq.21
2812 & .or. itype(i+2).eq.21 .or. itype(i+3).eq.21) cycle
2816 dx_normi=dc_norm(1,i)
2817 dy_normi=dc_norm(2,i)
2818 dz_normi=dc_norm(3,i)
2819 xmedi=c(1,i)+0.5d0*dxi
2820 ymedi=c(2,i)+0.5d0*dyi
2821 zmedi=c(3,i)+0.5d0*dzi
2823 call eelecij(i,i+2,ees,evdw1,eel_loc)
2824 if (wturn3.gt.0.0d0) call eturn3(i,eello_turn3)
2825 num_cont_hb(i)=num_conti
2827 do i=iturn4_start,iturn4_end
2828 if (itype(i).eq.21 .or. itype(i+1).eq.21
2829 & .or. itype(i+3).eq.21
2830 & .or. itype(i+4).eq.21) cycle
2834 dx_normi=dc_norm(1,i)
2835 dy_normi=dc_norm(2,i)
2836 dz_normi=dc_norm(3,i)
2837 xmedi=c(1,i)+0.5d0*dxi
2838 ymedi=c(2,i)+0.5d0*dyi
2839 zmedi=c(3,i)+0.5d0*dzi
2840 num_conti=num_cont_hb(i)
2841 call eelecij(i,i+3,ees,evdw1,eel_loc)
2842 if (wturn4.gt.0.0d0 .and. itype(i+2).ne.21)
2843 & call eturn4(i,eello_turn4)
2844 num_cont_hb(i)=num_conti
2847 c Loop over all pairs of interacting peptide groups except i,i+2 and i,i+3
2849 do i=iatel_s,iatel_e
2850 if (itype(i).eq.21 .or. itype(i+1).eq.21) cycle
2854 dx_normi=dc_norm(1,i)
2855 dy_normi=dc_norm(2,i)
2856 dz_normi=dc_norm(3,i)
2857 xmedi=c(1,i)+0.5d0*dxi
2858 ymedi=c(2,i)+0.5d0*dyi
2859 zmedi=c(3,i)+0.5d0*dzi
2860 c write (iout,*) 'i',i,' ielstart',ielstart(i),' ielend',ielend(i)
2861 num_conti=num_cont_hb(i)
2862 do j=ielstart(i),ielend(i)
2863 c write (iout,*) i,j,itype(i),itype(j)
2864 if (itype(j).eq.21 .or. itype(j+1).eq.21) cycle
2865 call eelecij(i,j,ees,evdw1,eel_loc)
2867 num_cont_hb(i)=num_conti
2869 c write (iout,*) "Number of loop steps in EELEC:",ind
2871 cd write (iout,'(i3,3f10.5,5x,3f10.5)')
2872 cd & i,(gel_loc(k,i),k=1,3),gel_loc_loc(i)
2874 c 12/7/99 Adam eello_turn3 will be considered as a separate energy term
2875 ccc eel_loc=eel_loc+eello_turn3
2876 cd print *,"Processor",fg_rank," t_eelecij",t_eelecij
2879 C-------------------------------------------------------------------------------
2880 subroutine eelecij(i,j,ees,evdw1,eel_loc)
2881 implicit real*8 (a-h,o-z)
2882 include 'DIMENSIONS'
2886 include 'COMMON.CONTROL'
2887 include 'COMMON.IOUNITS'
2888 include 'COMMON.GEO'
2889 include 'COMMON.VAR'
2890 include 'COMMON.LOCAL'
2891 include 'COMMON.CHAIN'
2892 include 'COMMON.DERIV'
2893 include 'COMMON.INTERACT'
2894 include 'COMMON.CONTACTS'
2895 include 'COMMON.TORSION'
2896 include 'COMMON.VECTORS'
2897 include 'COMMON.FFIELD'
2898 include 'COMMON.TIME1'
2899 dimension ggg(3),gggp(3),gggm(3),erij(3),dcosb(3),dcosg(3),
2900 & erder(3,3),uryg(3,3),urzg(3,3),vryg(3,3),vrzg(3,3)
2901 double precision acipa(2,2),agg(3,4),aggi(3,4),aggi1(3,4),
2902 & aggj(3,4),aggj1(3,4),a_temp(2,2),muij(4),a22,a23,a32,a33
2903 common /locel/ a_temp,agg,aggi,aggi1,aggj,aggj1,a22,a23,a32,a33,
2904 & dxi,dyi,dzi,dx_normi,dy_normi,dz_normi,xmedi,ymedi,zmedi,
2906 c 4/26/02 - AL scaling factor for 1,4 repulsive VDW interactions
2908 double precision scal_el /1.0d0/
2910 double precision scal_el /0.5d0/
2913 C 13-go grudnia roku pamietnego...
2914 double precision unmat(3,3) /1.0d0,0.0d0,0.0d0,
2915 & 0.0d0,1.0d0,0.0d0,
2916 & 0.0d0,0.0d0,1.0d0/
2917 c time00=MPI_Wtime()
2918 cd write (iout,*) "eelecij",i,j
2922 if (j.eq.i+2 .and. itelj.eq.2) iteli=2
2923 aaa=app(iteli,itelj)
2924 bbb=bpp(iteli,itelj)
2925 ael6i=ael6(iteli,itelj)
2926 ael3i=ael3(iteli,itelj)
2930 dx_normj=dc_norm(1,j)
2931 dy_normj=dc_norm(2,j)
2932 dz_normj=dc_norm(3,j)
2933 xj=c(1,j)+0.5D0*dxj-xmedi
2934 yj=c(2,j)+0.5D0*dyj-ymedi
2935 zj=c(3,j)+0.5D0*dzj-zmedi
2936 rij=xj*xj+yj*yj+zj*zj
2942 cosa=dx_normi*dx_normj+dy_normi*dy_normj+dz_normi*dz_normj
2943 cosb=(xj*dx_normi+yj*dy_normi+zj*dz_normi)*rmij
2944 cosg=(xj*dx_normj+yj*dy_normj+zj*dz_normj)*rmij
2945 fac=cosa-3.0D0*cosb*cosg
2947 c 4/26/02 - AL scaling down 1,4 repulsive VDW interactions
2948 if (j.eq.i+2) ev1=scal_el*ev1
2953 el1=fac3*(4.0D0+fac*fac-3.0D0*(cosb*cosb+cosg*cosg))
2956 C 12/26/95 - for the evaluation of multi-body H-bonding interactions
2957 ees0ij=4.0D0+fac*fac-3.0D0*(cosb*cosb+cosg*cosg)
2960 cd write(iout,'(2(2i3,2x),7(1pd12.4)/2(3(1pd12.4),5x)/)')
2961 cd & iteli,i,itelj,j,aaa,bbb,ael6i,ael3i,
2962 cd & 1.0D0/dsqrt(rrmij),evdwij,eesij,
2963 cd & xmedi,ymedi,zmedi,xj,yj,zj
2965 if (energy_dec) then
2966 write (iout,'(a6,2i5,0pf7.3)') 'evdw1',i,j,evdwij
2967 write (iout,'(a6,2i5,0pf7.3)') 'ees',i,j,eesij
2971 C Calculate contributions to the Cartesian gradient.
2974 facvdw=-6*rrmij*(ev1+evdwij)
2975 facel=-3*rrmij*(el1+eesij)
2981 * Radial derivatives. First process both termini of the fragment (i,j)
2987 c ghalf=0.5D0*ggg(k)
2988 c gelc(k,i)=gelc(k,i)+ghalf
2989 c gelc(k,j)=gelc(k,j)+ghalf
2991 c 9/28/08 AL Gradient compotents will be summed only at the end
2993 gelc_long(k,j)=gelc_long(k,j)+ggg(k)
2994 gelc_long(k,i)=gelc_long(k,i)-ggg(k)
2997 * Loop over residues i+1 thru j-1.
3001 cgrad gelc(l,k)=gelc(l,k)+ggg(l)
3008 c ghalf=0.5D0*ggg(k)
3009 c gvdwpp(k,i)=gvdwpp(k,i)+ghalf
3010 c gvdwpp(k,j)=gvdwpp(k,j)+ghalf
3012 c 9/28/08 AL Gradient compotents will be summed only at the end
3014 gvdwpp(k,j)=gvdwpp(k,j)+ggg(k)
3015 gvdwpp(k,i)=gvdwpp(k,i)-ggg(k)
3018 * Loop over residues i+1 thru j-1.
3022 cgrad gvdwpp(l,k)=gvdwpp(l,k)+ggg(l)
3029 fac=-3*rrmij*(facvdw+facvdw+facel)
3034 * Radial derivatives. First process both termini of the fragment (i,j)
3040 c ghalf=0.5D0*ggg(k)
3041 c gelc(k,i)=gelc(k,i)+ghalf
3042 c gelc(k,j)=gelc(k,j)+ghalf
3044 c 9/28/08 AL Gradient compotents will be summed only at the end
3046 gelc_long(k,j)=gelc(k,j)+ggg(k)
3047 gelc_long(k,i)=gelc(k,i)-ggg(k)
3050 * Loop over residues i+1 thru j-1.
3054 cgrad gelc(l,k)=gelc(l,k)+ggg(l)
3057 c 9/28/08 AL Gradient compotents will be summed only at the end
3062 gvdwpp(k,j)=gvdwpp(k,j)+ggg(k)
3063 gvdwpp(k,i)=gvdwpp(k,i)-ggg(k)
3069 ecosa=2.0D0*fac3*fac1+fac4
3072 ecosb=(fac3*(fac1*cosg+cosb)+cosg*fac4)
3073 ecosg=(fac3*(fac1*cosb+cosg)+cosb*fac4)
3075 dcosb(k)=rmij*(dc_norm(k,i)-erij(k)*cosb)
3076 dcosg(k)=rmij*(dc_norm(k,j)-erij(k)*cosg)
3078 cd print '(2i3,2(3(1pd14.5),3x))',i,j,(dcosb(k),k=1,3),
3079 cd & (dcosg(k),k=1,3)
3081 ggg(k)=ecosb*dcosb(k)+ecosg*dcosg(k)
3084 c ghalf=0.5D0*ggg(k)
3085 c gelc(k,i)=gelc(k,i)+ghalf
3086 c & +(ecosa*(dc_norm(k,j)-cosa*dc_norm(k,i))
3087 c & + ecosb*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1)
3088 c gelc(k,j)=gelc(k,j)+ghalf
3089 c & +(ecosa*(dc_norm(k,i)-cosa*dc_norm(k,j))
3090 c & + ecosg*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1)
3094 cgrad gelc(l,k)=gelc(l,k)+ggg(l)
3099 & +(ecosa*(dc_norm(k,j)-cosa*dc_norm(k,i))
3100 & + ecosb*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1)
3102 & +(ecosa*(dc_norm(k,i)-cosa*dc_norm(k,j))
3103 & + ecosg*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1)
3104 gelc_long(k,j)=gelc_long(k,j)+ggg(k)
3105 gelc_long(k,i)=gelc_long(k,i)-ggg(k)
3107 IF (wel_loc.gt.0.0d0 .or. wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0
3108 & .or. wcorr6.gt.0.0d0 .or. wturn3.gt.0.0d0
3109 & .or. wturn4.gt.0.0d0 .or. wturn6.gt.0.0d0) THEN
3111 C 9/25/99 Mixed third-order local-electrostatic terms. The local-interaction
3112 C energy of a peptide unit is assumed in the form of a second-order
3113 C Fourier series in the angles lambda1 and lambda2 (see Nishikawa et al.
3114 C Macromolecules, 1974, 7, 797-806 for definition). This correlation terms
3115 C are computed for EVERY pair of non-contiguous peptide groups.
3117 if (j.lt.nres-1) then
3128 muij(kkk)=mu(k,i)*mu(l,j)
3131 cd write (iout,*) 'EELEC: i',i,' j',j
3132 cd write (iout,*) 'j',j,' j1',j1,' j2',j2
3133 cd write(iout,*) 'muij',muij
3134 ury=scalar(uy(1,i),erij)
3135 urz=scalar(uz(1,i),erij)
3136 vry=scalar(uy(1,j),erij)
3137 vrz=scalar(uz(1,j),erij)
3138 a22=scalar(uy(1,i),uy(1,j))-3*ury*vry
3139 a23=scalar(uy(1,i),uz(1,j))-3*ury*vrz
3140 a32=scalar(uz(1,i),uy(1,j))-3*urz*vry
3141 a33=scalar(uz(1,i),uz(1,j))-3*urz*vrz
3142 fac=dsqrt(-ael6i)*r3ij
3147 cd write (iout,'(4i5,4f10.5)')
3148 cd & i,itortyp(itype(i)),j,itortyp(itype(j)),a22,a23,a32,a33
3149 cd write (iout,'(6f10.5)') (muij(k),k=1,4),fac,eel_loc_ij
3150 cd write (iout,'(2(3f10.5,5x)/2(3f10.5,5x))') uy(:,i),uz(:,i),
3151 cd & uy(:,j),uz(:,j)
3152 cd write (iout,'(4f10.5)')
3153 cd & scalar(uy(1,i),uy(1,j)),scalar(uy(1,i),uz(1,j)),
3154 cd & scalar(uz(1,i),uy(1,j)),scalar(uz(1,i),uz(1,j))
3155 cd write (iout,'(4f10.5)') ury,urz,vry,vrz
3156 cd write (iout,'(9f10.5/)')
3157 cd & fac22,a22,fac23,a23,fac32,a32,fac33,a33,eel_loc_ij
3158 C Derivatives of the elements of A in virtual-bond vectors
3159 call unormderiv(erij(1),unmat(1,1),rmij,erder(1,1))
3161 uryg(k,1)=scalar(erder(1,k),uy(1,i))
3162 uryg(k,2)=scalar(uygrad(1,k,1,i),erij(1))
3163 uryg(k,3)=scalar(uygrad(1,k,2,i),erij(1))
3164 urzg(k,1)=scalar(erder(1,k),uz(1,i))
3165 urzg(k,2)=scalar(uzgrad(1,k,1,i),erij(1))
3166 urzg(k,3)=scalar(uzgrad(1,k,2,i),erij(1))
3167 vryg(k,1)=scalar(erder(1,k),uy(1,j))
3168 vryg(k,2)=scalar(uygrad(1,k,1,j),erij(1))
3169 vryg(k,3)=scalar(uygrad(1,k,2,j),erij(1))
3170 vrzg(k,1)=scalar(erder(1,k),uz(1,j))
3171 vrzg(k,2)=scalar(uzgrad(1,k,1,j),erij(1))
3172 vrzg(k,3)=scalar(uzgrad(1,k,2,j),erij(1))
3174 C Compute radial contributions to the gradient
3192 C Add the contributions coming from er
3195 agg(k,1)=agg(k,1)+fac3*(uryg(k,1)*vry+vryg(k,1)*ury)
3196 agg(k,2)=agg(k,2)+fac3*(uryg(k,1)*vrz+vrzg(k,1)*ury)
3197 agg(k,3)=agg(k,3)+fac3*(urzg(k,1)*vry+vryg(k,1)*urz)
3198 agg(k,4)=agg(k,4)+fac3*(urzg(k,1)*vrz+vrzg(k,1)*urz)
3201 C Derivatives in DC(i)
3202 cgrad ghalf1=0.5d0*agg(k,1)
3203 cgrad ghalf2=0.5d0*agg(k,2)
3204 cgrad ghalf3=0.5d0*agg(k,3)
3205 cgrad ghalf4=0.5d0*agg(k,4)
3206 aggi(k,1)=fac*(scalar(uygrad(1,k,1,i),uy(1,j))
3207 & -3.0d0*uryg(k,2)*vry)!+ghalf1
3208 aggi(k,2)=fac*(scalar(uygrad(1,k,1,i),uz(1,j))
3209 & -3.0d0*uryg(k,2)*vrz)!+ghalf2
3210 aggi(k,3)=fac*(scalar(uzgrad(1,k,1,i),uy(1,j))
3211 & -3.0d0*urzg(k,2)*vry)!+ghalf3
3212 aggi(k,4)=fac*(scalar(uzgrad(1,k,1,i),uz(1,j))
3213 & -3.0d0*urzg(k,2)*vrz)!+ghalf4
3214 C Derivatives in DC(i+1)
3215 aggi1(k,1)=fac*(scalar(uygrad(1,k,2,i),uy(1,j))
3216 & -3.0d0*uryg(k,3)*vry)!+agg(k,1)
3217 aggi1(k,2)=fac*(scalar(uygrad(1,k,2,i),uz(1,j))
3218 & -3.0d0*uryg(k,3)*vrz)!+agg(k,2)
3219 aggi1(k,3)=fac*(scalar(uzgrad(1,k,2,i),uy(1,j))
3220 & -3.0d0*urzg(k,3)*vry)!+agg(k,3)
3221 aggi1(k,4)=fac*(scalar(uzgrad(1,k,2,i),uz(1,j))
3222 & -3.0d0*urzg(k,3)*vrz)!+agg(k,4)
3223 C Derivatives in DC(j)
3224 aggj(k,1)=fac*(scalar(uygrad(1,k,1,j),uy(1,i))
3225 & -3.0d0*vryg(k,2)*ury)!+ghalf1
3226 aggj(k,2)=fac*(scalar(uzgrad(1,k,1,j),uy(1,i))
3227 & -3.0d0*vrzg(k,2)*ury)!+ghalf2
3228 aggj(k,3)=fac*(scalar(uygrad(1,k,1,j),uz(1,i))
3229 & -3.0d0*vryg(k,2)*urz)!+ghalf3
3230 aggj(k,4)=fac*(scalar(uzgrad(1,k,1,j),uz(1,i))
3231 & -3.0d0*vrzg(k,2)*urz)!+ghalf4
3232 C Derivatives in DC(j+1) or DC(nres-1)
3233 aggj1(k,1)=fac*(scalar(uygrad(1,k,2,j),uy(1,i))
3234 & -3.0d0*vryg(k,3)*ury)
3235 aggj1(k,2)=fac*(scalar(uzgrad(1,k,2,j),uy(1,i))
3236 & -3.0d0*vrzg(k,3)*ury)
3237 aggj1(k,3)=fac*(scalar(uygrad(1,k,2,j),uz(1,i))
3238 & -3.0d0*vryg(k,3)*urz)
3239 aggj1(k,4)=fac*(scalar(uzgrad(1,k,2,j),uz(1,i))
3240 & -3.0d0*vrzg(k,3)*urz)
3241 cgrad if (j.eq.nres-1 .and. i.lt.j-2) then
3243 cgrad aggj1(k,l)=aggj1(k,l)+agg(k,l)
3256 aggi(k,l)=-aggi(k,l)
3257 aggi1(k,l)=-aggi1(k,l)
3258 aggj(k,l)=-aggj(k,l)
3259 aggj1(k,l)=-aggj1(k,l)
3262 if (j.lt.nres-1) then
3268 aggi(k,l)=-aggi(k,l)
3269 aggi1(k,l)=-aggi1(k,l)
3270 aggj(k,l)=-aggj(k,l)
3271 aggj1(k,l)=-aggj1(k,l)
3282 aggi(k,l)=-aggi(k,l)
3283 aggi1(k,l)=-aggi1(k,l)
3284 aggj(k,l)=-aggj(k,l)
3285 aggj1(k,l)=-aggj1(k,l)
3290 IF (wel_loc.gt.0.0d0) THEN
3291 C Contribution to the local-electrostatic energy coming from the i-j pair
3292 eel_loc_ij=a22*muij(1)+a23*muij(2)+a32*muij(3)
3294 cd write (iout,*) 'i',i,' j',j,' eel_loc_ij',eel_loc_ij
3296 if (energy_dec) write (iout,'(a6,2i5,0pf7.3)')
3297 & 'eelloc',i,j,eel_loc_ij
3299 eel_loc=eel_loc+eel_loc_ij
3300 C Partial derivatives in virtual-bond dihedral angles gamma
3302 & gel_loc_loc(i-1)=gel_loc_loc(i-1)+
3303 & a22*muder(1,i)*mu(1,j)+a23*muder(1,i)*mu(2,j)
3304 & +a32*muder(2,i)*mu(1,j)+a33*muder(2,i)*mu(2,j)
3305 gel_loc_loc(j-1)=gel_loc_loc(j-1)+
3306 & a22*mu(1,i)*muder(1,j)+a23*mu(1,i)*muder(2,j)
3307 & +a32*mu(2,i)*muder(1,j)+a33*mu(2,i)*muder(2,j)
3308 C Derivatives of eello in DC(i+1) thru DC(j-1) or DC(nres-2)
3310 ggg(l)=agg(l,1)*muij(1)+
3311 & agg(l,2)*muij(2)+agg(l,3)*muij(3)+agg(l,4)*muij(4)
3312 gel_loc_long(l,j)=gel_loc_long(l,j)+ggg(l)
3313 gel_loc_long(l,i)=gel_loc_long(l,i)-ggg(l)
3314 cgrad ghalf=0.5d0*ggg(l)
3315 cgrad gel_loc(l,i)=gel_loc(l,i)+ghalf
3316 cgrad gel_loc(l,j)=gel_loc(l,j)+ghalf
3320 cgrad gel_loc(l,k)=gel_loc(l,k)+ggg(l)
3323 C Remaining derivatives of eello
3325 gel_loc(l,i)=gel_loc(l,i)+aggi(l,1)*muij(1)+
3326 & aggi(l,2)*muij(2)+aggi(l,3)*muij(3)+aggi(l,4)*muij(4)
3327 gel_loc(l,i+1)=gel_loc(l,i+1)+aggi1(l,1)*muij(1)+
3328 & aggi1(l,2)*muij(2)+aggi1(l,3)*muij(3)+aggi1(l,4)*muij(4)
3329 gel_loc(l,j)=gel_loc(l,j)+aggj(l,1)*muij(1)+
3330 & aggj(l,2)*muij(2)+aggj(l,3)*muij(3)+aggj(l,4)*muij(4)
3331 gel_loc(l,j1)=gel_loc(l,j1)+aggj1(l,1)*muij(1)+
3332 & aggj1(l,2)*muij(2)+aggj1(l,3)*muij(3)+aggj1(l,4)*muij(4)
3335 C Change 12/26/95 to calculate four-body contributions to H-bonding energy
3336 c if (j.gt.i+1 .and. num_conti.le.maxconts) then
3337 if (wcorr+wcorr4+wcorr5+wcorr6.gt.0.0d0
3338 & .and. num_conti.le.maxconts) then
3339 c write (iout,*) i,j," entered corr"
3341 C Calculate the contact function. The ith column of the array JCONT will
3342 C contain the numbers of atoms that make contacts with the atom I (of numbers
3343 C greater than I). The arrays FACONT and GACONT will contain the values of
3344 C the contact function and its derivative.
3345 c r0ij=1.02D0*rpp(iteli,itelj)
3346 c r0ij=1.11D0*rpp(iteli,itelj)
3347 r0ij=2.20D0*rpp(iteli,itelj)
3348 c r0ij=1.55D0*rpp(iteli,itelj)
3349 call gcont(rij,r0ij,1.0D0,0.2d0*r0ij,fcont,fprimcont)
3350 if (fcont.gt.0.0D0) then
3351 num_conti=num_conti+1
3352 if (num_conti.gt.maxconts) then
3353 write (iout,*) 'WARNING - max. # of contacts exceeded;',
3354 & ' will skip next contacts for this conf.'
3356 jcont_hb(num_conti,i)=j
3357 cd write (iout,*) "i",i," j",j," num_conti",num_conti,
3358 cd & " jcont_hb",jcont_hb(num_conti,i)
3359 IF (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or.
3360 & wcorr6.gt.0.0d0 .or. wturn6.gt.0.0d0) THEN
3361 C 9/30/99 (AL) - store components necessary to evaluate higher-order loc-el
3363 d_cont(num_conti,i)=rij
3364 cd write (2,'(3e15.5)') rij,r0ij+0.2d0*r0ij,rij
3365 C --- Electrostatic-interaction matrix ---
3366 a_chuj(1,1,num_conti,i)=a22
3367 a_chuj(1,2,num_conti,i)=a23
3368 a_chuj(2,1,num_conti,i)=a32
3369 a_chuj(2,2,num_conti,i)=a33
3370 C --- Gradient of rij
3372 grij_hb_cont(kkk,num_conti,i)=erij(kkk)
3379 a_chuj_der(k,l,m,1,num_conti,i)=agg(m,kkll)
3380 a_chuj_der(k,l,m,2,num_conti,i)=aggi(m,kkll)
3381 a_chuj_der(k,l,m,3,num_conti,i)=aggi1(m,kkll)
3382 a_chuj_der(k,l,m,4,num_conti,i)=aggj(m,kkll)
3383 a_chuj_der(k,l,m,5,num_conti,i)=aggj1(m,kkll)
3388 IF (wcorr4.eq.0.0d0 .and. wcorr.gt.0.0d0) THEN
3389 C Calculate contact energies
3391 wij=cosa-3.0D0*cosb*cosg
3394 c fac3=dsqrt(-ael6i)/r0ij**3
3395 fac3=dsqrt(-ael6i)*r3ij
3396 c ees0pij=dsqrt(4.0D0+cosa4+wij*wij-3.0D0*cosbg1*cosbg1)
3397 ees0tmp=4.0D0+cosa4+wij*wij-3.0D0*cosbg1*cosbg1
3398 if (ees0tmp.gt.0) then
3399 ees0pij=dsqrt(ees0tmp)
3403 c ees0mij=dsqrt(4.0D0-cosa4+wij*wij-3.0D0*cosbg2*cosbg2)
3404 ees0tmp=4.0D0-cosa4+wij*wij-3.0D0*cosbg2*cosbg2
3405 if (ees0tmp.gt.0) then
3406 ees0mij=dsqrt(ees0tmp)
3411 ees0p(num_conti,i)=0.5D0*fac3*(ees0pij+ees0mij)
3412 ees0m(num_conti,i)=0.5D0*fac3*(ees0pij-ees0mij)
3413 C Diagnostics. Comment out or remove after debugging!
3414 c ees0p(num_conti,i)=0.5D0*fac3*ees0pij
3415 c ees0m(num_conti,i)=0.5D0*fac3*ees0mij
3416 c ees0m(num_conti,i)=0.0D0
3418 c write (iout,*) 'i=',i,' j=',j,' rij=',rij,' r0ij=',r0ij,
3419 c & ' ees0ij=',ees0p(num_conti,i),ees0m(num_conti,i),' fcont=',fcont
3420 C Angular derivatives of the contact function
3421 ees0pij1=fac3/ees0pij
3422 ees0mij1=fac3/ees0mij
3423 fac3p=-3.0D0*fac3*rrmij
3424 ees0pijp=0.5D0*fac3p*(ees0pij+ees0mij)
3425 ees0mijp=0.5D0*fac3p*(ees0pij-ees0mij)
3427 ecosa1= ees0pij1*( 1.0D0+0.5D0*wij)
3428 ecosb1=-1.5D0*ees0pij1*(wij*cosg+cosbg1)
3429 ecosg1=-1.5D0*ees0pij1*(wij*cosb+cosbg1)
3430 ecosa2= ees0mij1*(-1.0D0+0.5D0*wij)
3431 ecosb2=-1.5D0*ees0mij1*(wij*cosg+cosbg2)
3432 ecosg2=-1.5D0*ees0mij1*(wij*cosb-cosbg2)
3433 ecosap=ecosa1+ecosa2
3434 ecosbp=ecosb1+ecosb2
3435 ecosgp=ecosg1+ecosg2
3436 ecosam=ecosa1-ecosa2
3437 ecosbm=ecosb1-ecosb2
3438 ecosgm=ecosg1-ecosg2
3447 facont_hb(num_conti,i)=fcont
3448 fprimcont=fprimcont/rij
3449 cd facont_hb(num_conti,i)=1.0D0
3450 C Following line is for diagnostics.
3453 dcosb(k)=rmij*(dc_norm(k,i)-erij(k)*cosb)
3454 dcosg(k)=rmij*(dc_norm(k,j)-erij(k)*cosg)
3457 gggp(k)=ecosbp*dcosb(k)+ecosgp*dcosg(k)
3458 gggm(k)=ecosbm*dcosb(k)+ecosgm*dcosg(k)
3460 gggp(1)=gggp(1)+ees0pijp*xj
3461 gggp(2)=gggp(2)+ees0pijp*yj
3462 gggp(3)=gggp(3)+ees0pijp*zj
3463 gggm(1)=gggm(1)+ees0mijp*xj
3464 gggm(2)=gggm(2)+ees0mijp*yj
3465 gggm(3)=gggm(3)+ees0mijp*zj
3466 C Derivatives due to the contact function
3467 gacont_hbr(1,num_conti,i)=fprimcont*xj
3468 gacont_hbr(2,num_conti,i)=fprimcont*yj
3469 gacont_hbr(3,num_conti,i)=fprimcont*zj
3472 c 10/24/08 cgrad and ! comments indicate the parts of the code removed
3473 c following the change of gradient-summation algorithm.
3475 cgrad ghalfp=0.5D0*gggp(k)
3476 cgrad ghalfm=0.5D0*gggm(k)
3477 gacontp_hb1(k,num_conti,i)=!ghalfp
3478 & +(ecosap*(dc_norm(k,j)-cosa*dc_norm(k,i))
3479 & + ecosbp*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1)
3480 gacontp_hb2(k,num_conti,i)=!ghalfp
3481 & +(ecosap*(dc_norm(k,i)-cosa*dc_norm(k,j))
3482 & + ecosgp*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1)
3483 gacontp_hb3(k,num_conti,i)=gggp(k)
3484 gacontm_hb1(k,num_conti,i)=!ghalfm
3485 & +(ecosam*(dc_norm(k,j)-cosa*dc_norm(k,i))
3486 & + ecosbm*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1)
3487 gacontm_hb2(k,num_conti,i)=!ghalfm
3488 & +(ecosam*(dc_norm(k,i)-cosa*dc_norm(k,j))
3489 & + ecosgm*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1)
3490 gacontm_hb3(k,num_conti,i)=gggm(k)
3492 C Diagnostics. Comment out or remove after debugging!
3494 cdiag gacontp_hb1(k,num_conti,i)=0.0D0
3495 cdiag gacontp_hb2(k,num_conti,i)=0.0D0
3496 cdiag gacontp_hb3(k,num_conti,i)=0.0D0
3497 cdiag gacontm_hb1(k,num_conti,i)=0.0D0
3498 cdiag gacontm_hb2(k,num_conti,i)=0.0D0
3499 cdiag gacontm_hb3(k,num_conti,i)=0.0D0
3502 endif ! num_conti.le.maxconts
3505 if (wturn3.gt.0.0d0 .or. wturn4.gt.0.0d0) then
3508 ghalf=0.5d0*agg(l,k)
3509 aggi(l,k)=aggi(l,k)+ghalf
3510 aggi1(l,k)=aggi1(l,k)+agg(l,k)
3511 aggj(l,k)=aggj(l,k)+ghalf
3514 if (j.eq.nres-1 .and. i.lt.j-2) then
3517 aggj1(l,k)=aggj1(l,k)+agg(l,k)
3522 c t_eelecij=t_eelecij+MPI_Wtime()-time00
3525 C-----------------------------------------------------------------------------
3526 subroutine eturn3(i,eello_turn3)
3527 C Third- and fourth-order contributions from turns
3528 implicit real*8 (a-h,o-z)
3529 include 'DIMENSIONS'
3530 include 'COMMON.IOUNITS'
3531 include 'COMMON.GEO'
3532 include 'COMMON.VAR'
3533 include 'COMMON.LOCAL'
3534 include 'COMMON.CHAIN'
3535 include 'COMMON.DERIV'
3536 include 'COMMON.INTERACT'
3537 include 'COMMON.CONTACTS'
3538 include 'COMMON.TORSION'
3539 include 'COMMON.VECTORS'
3540 include 'COMMON.FFIELD'
3541 include 'COMMON.CONTROL'
3543 double precision auxmat(2,2),auxmat1(2,2),auxmat2(2,2),pizda(2,2),
3544 & e1t(2,2),e2t(2,2),e3t(2,2),e1tder(2,2),e2tder(2,2),e3tder(2,2),
3545 & e1a(2,2),ae3(2,2),ae3e2(2,2),auxvec(2),auxvec1(2)
3546 double precision agg(3,4),aggi(3,4),aggi1(3,4),
3547 & aggj(3,4),aggj1(3,4),a_temp(2,2),auxmat3(2,2)
3548 common /locel/ a_temp,agg,aggi,aggi1,aggj,aggj1,a22,a23,a32,a33,
3549 & dxi,dyi,dzi,dx_normi,dy_normi,dz_normi,xmedi,ymedi,zmedi,
3552 c write (iout,*) "eturn3",i,j,j1,j2
3557 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
3559 C Third-order contributions
3566 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
3567 cd call checkint_turn3(i,a_temp,eello_turn3_num)
3568 call matmat2(EUg(1,1,i+1),EUg(1,1,i+2),auxmat(1,1))
3569 call transpose2(auxmat(1,1),auxmat1(1,1))
3570 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
3571 eello_turn3=eello_turn3+0.5d0*(pizda(1,1)+pizda(2,2))
3572 if (energy_dec) write (iout,'(a6,2i5,0pf7.3)')
3573 & 'eturn3',i,j,0.5d0*(pizda(1,1)+pizda(2,2))
3574 cd write (2,*) 'i,',i,' j',j,'eello_turn3',
3575 cd & 0.5d0*(pizda(1,1)+pizda(2,2)),
3576 cd & ' eello_turn3_num',4*eello_turn3_num
3577 C Derivatives in gamma(i)
3578 call matmat2(EUgder(1,1,i+1),EUg(1,1,i+2),auxmat2(1,1))
3579 call transpose2(auxmat2(1,1),auxmat3(1,1))
3580 call matmat2(a_temp(1,1),auxmat3(1,1),pizda(1,1))
3581 gel_loc_turn3(i)=gel_loc_turn3(i)+0.5d0*(pizda(1,1)+pizda(2,2))
3582 C Derivatives in gamma(i+1)
3583 call matmat2(EUg(1,1,i+1),EUgder(1,1,i+2),auxmat2(1,1))
3584 call transpose2(auxmat2(1,1),auxmat3(1,1))
3585 call matmat2(a_temp(1,1),auxmat3(1,1),pizda(1,1))
3586 gel_loc_turn3(i+1)=gel_loc_turn3(i+1)
3587 & +0.5d0*(pizda(1,1)+pizda(2,2))
3588 C Cartesian derivatives
3590 c ghalf1=0.5d0*agg(l,1)
3591 c ghalf2=0.5d0*agg(l,2)
3592 c ghalf3=0.5d0*agg(l,3)
3593 c ghalf4=0.5d0*agg(l,4)
3594 a_temp(1,1)=aggi(l,1)!+ghalf1
3595 a_temp(1,2)=aggi(l,2)!+ghalf2
3596 a_temp(2,1)=aggi(l,3)!+ghalf3
3597 a_temp(2,2)=aggi(l,4)!+ghalf4
3598 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
3599 gcorr3_turn(l,i)=gcorr3_turn(l,i)
3600 & +0.5d0*(pizda(1,1)+pizda(2,2))
3601 a_temp(1,1)=aggi1(l,1)!+agg(l,1)
3602 a_temp(1,2)=aggi1(l,2)!+agg(l,2)
3603 a_temp(2,1)=aggi1(l,3)!+agg(l,3)
3604 a_temp(2,2)=aggi1(l,4)!+agg(l,4)
3605 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
3606 gcorr3_turn(l,i+1)=gcorr3_turn(l,i+1)
3607 & +0.5d0*(pizda(1,1)+pizda(2,2))
3608 a_temp(1,1)=aggj(l,1)!+ghalf1
3609 a_temp(1,2)=aggj(l,2)!+ghalf2
3610 a_temp(2,1)=aggj(l,3)!+ghalf3
3611 a_temp(2,2)=aggj(l,4)!+ghalf4
3612 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
3613 gcorr3_turn(l,j)=gcorr3_turn(l,j)
3614 & +0.5d0*(pizda(1,1)+pizda(2,2))
3615 a_temp(1,1)=aggj1(l,1)
3616 a_temp(1,2)=aggj1(l,2)
3617 a_temp(2,1)=aggj1(l,3)
3618 a_temp(2,2)=aggj1(l,4)
3619 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
3620 gcorr3_turn(l,j1)=gcorr3_turn(l,j1)
3621 & +0.5d0*(pizda(1,1)+pizda(2,2))
3625 C-------------------------------------------------------------------------------
3626 subroutine eturn4(i,eello_turn4)
3627 C Third- and fourth-order contributions from turns
3628 implicit real*8 (a-h,o-z)
3629 include 'DIMENSIONS'
3630 include 'COMMON.IOUNITS'
3631 include 'COMMON.GEO'
3632 include 'COMMON.VAR'
3633 include 'COMMON.LOCAL'
3634 include 'COMMON.CHAIN'
3635 include 'COMMON.DERIV'
3636 include 'COMMON.INTERACT'
3637 include 'COMMON.CONTACTS'
3638 include 'COMMON.TORSION'
3639 include 'COMMON.VECTORS'
3640 include 'COMMON.FFIELD'
3641 include 'COMMON.CONTROL'
3643 double precision auxmat(2,2),auxmat1(2,2),auxmat2(2,2),pizda(2,2),
3644 & e1t(2,2),e2t(2,2),e3t(2,2),e1tder(2,2),e2tder(2,2),e3tder(2,2),
3645 & e1a(2,2),ae3(2,2),ae3e2(2,2),auxvec(2),auxvec1(2)
3646 double precision agg(3,4),aggi(3,4),aggi1(3,4),
3647 & aggj(3,4),aggj1(3,4),a_temp(2,2),auxmat3(2,2)
3648 common /locel/ a_temp,agg,aggi,aggi1,aggj,aggj1,a22,a23,a32,a33,
3649 & dxi,dyi,dzi,dx_normi,dy_normi,dz_normi,xmedi,ymedi,zmedi,
3652 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
3654 C Fourth-order contributions
3662 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
3663 cd call checkint_turn4(i,a_temp,eello_turn4_num)
3664 c write (iout,*) "eturn4 i",i," j",j," j1",j1," j2",j2
3669 iti1=itortyp(itype(i+1))
3670 iti2=itortyp(itype(i+2))
3671 iti3=itortyp(itype(i+3))
3672 C write(iout,*) i,"iti1",iti1," iti2",iti2," iti3",iti3,itype(i+3)
3673 call transpose2(EUg(1,1,i+1),e1t(1,1))
3674 call transpose2(Eug(1,1,i+2),e2t(1,1))
3675 call transpose2(Eug(1,1,i+3),e3t(1,1))
3676 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
3677 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
3678 s1=scalar2(b1(1,iti2),auxvec(1))
3679 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
3680 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
3681 s2=scalar2(b1(1,iti1),auxvec(1))
3682 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
3683 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
3684 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3685 eello_turn4=eello_turn4-(s1+s2+s3)
3686 if (energy_dec) write (iout,'(a6,2i5,0pf7.3)')
3687 & 'eturn4',i,j,-(s1+s2+s3)
3688 cd write (2,*) 'i,',i,' j',j,'eello_turn4',-(s1+s2+s3),
3689 cd & ' eello_turn4_num',8*eello_turn4_num
3690 C Derivatives in gamma(i)
3691 call transpose2(EUgder(1,1,i+1),e1tder(1,1))
3692 call matmat2(e1tder(1,1),a_temp(1,1),auxmat(1,1))
3693 call matvec2(auxmat(1,1),Ub2(1,i+3),auxvec(1))
3694 s1=scalar2(b1(1,iti2),auxvec(1))
3695 call matmat2(ae3e2(1,1),e1tder(1,1),pizda(1,1))
3696 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3697 gel_loc_turn4(i)=gel_loc_turn4(i)-(s1+s3)
3698 C Derivatives in gamma(i+1)
3699 call transpose2(EUgder(1,1,i+2),e2tder(1,1))
3700 call matvec2(ae3(1,1),Ub2der(1,i+2),auxvec(1))
3701 s2=scalar2(b1(1,iti1),auxvec(1))
3702 call matmat2(ae3(1,1),e2tder(1,1),auxmat(1,1))
3703 call matmat2(auxmat(1,1),e1t(1,1),pizda(1,1))
3704 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3705 gel_loc_turn4(i+1)=gel_loc_turn4(i+1)-(s2+s3)
3706 C Derivatives in gamma(i+2)
3707 call transpose2(EUgder(1,1,i+3),e3tder(1,1))
3708 call matvec2(e1a(1,1),Ub2der(1,i+3),auxvec(1))
3709 s1=scalar2(b1(1,iti2),auxvec(1))
3710 call matmat2(a_temp(1,1),e3tder(1,1),auxmat(1,1))
3711 call matvec2(auxmat(1,1),Ub2(1,i+2),auxvec(1))
3712 s2=scalar2(b1(1,iti1),auxvec(1))
3713 call matmat2(auxmat(1,1),e2t(1,1),auxmat3(1,1))
3714 call matmat2(auxmat3(1,1),e1t(1,1),pizda(1,1))
3715 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3716 gel_loc_turn4(i+2)=gel_loc_turn4(i+2)-(s1+s2+s3)
3717 C Cartesian derivatives
3718 C Derivatives of this turn contributions in DC(i+2)
3719 if (j.lt.nres-1) then
3721 a_temp(1,1)=agg(l,1)
3722 a_temp(1,2)=agg(l,2)
3723 a_temp(2,1)=agg(l,3)
3724 a_temp(2,2)=agg(l,4)
3725 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
3726 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
3727 s1=scalar2(b1(1,iti2),auxvec(1))
3728 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
3729 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
3730 s2=scalar2(b1(1,iti1),auxvec(1))
3731 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
3732 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
3733 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3735 gcorr4_turn(l,i+2)=gcorr4_turn(l,i+2)-(s1+s2+s3)
3738 C Remaining derivatives of this turn contribution
3740 a_temp(1,1)=aggi(l,1)
3741 a_temp(1,2)=aggi(l,2)
3742 a_temp(2,1)=aggi(l,3)
3743 a_temp(2,2)=aggi(l,4)
3744 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
3745 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
3746 s1=scalar2(b1(1,iti2),auxvec(1))
3747 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
3748 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
3749 s2=scalar2(b1(1,iti1),auxvec(1))
3750 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
3751 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
3752 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3753 gcorr4_turn(l,i)=gcorr4_turn(l,i)-(s1+s2+s3)
3754 a_temp(1,1)=aggi1(l,1)
3755 a_temp(1,2)=aggi1(l,2)
3756 a_temp(2,1)=aggi1(l,3)
3757 a_temp(2,2)=aggi1(l,4)
3758 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
3759 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
3760 s1=scalar2(b1(1,iti2),auxvec(1))
3761 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
3762 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
3763 s2=scalar2(b1(1,iti1),auxvec(1))
3764 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
3765 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
3766 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3767 gcorr4_turn(l,i+1)=gcorr4_turn(l,i+1)-(s1+s2+s3)
3768 a_temp(1,1)=aggj(l,1)
3769 a_temp(1,2)=aggj(l,2)
3770 a_temp(2,1)=aggj(l,3)
3771 a_temp(2,2)=aggj(l,4)
3772 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
3773 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
3774 s1=scalar2(b1(1,iti2),auxvec(1))
3775 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
3776 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
3777 s2=scalar2(b1(1,iti1),auxvec(1))
3778 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
3779 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
3780 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3781 gcorr4_turn(l,j)=gcorr4_turn(l,j)-(s1+s2+s3)
3782 a_temp(1,1)=aggj1(l,1)
3783 a_temp(1,2)=aggj1(l,2)
3784 a_temp(2,1)=aggj1(l,3)
3785 a_temp(2,2)=aggj1(l,4)
3786 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
3787 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
3788 s1=scalar2(b1(1,iti2),auxvec(1))
3789 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
3790 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
3791 s2=scalar2(b1(1,iti1),auxvec(1))
3792 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
3793 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
3794 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3795 c write (iout,*) "s1",s1," s2",s2," s3",s3," s1+s2+s3",s1+s2+s3
3796 gcorr4_turn(l,j1)=gcorr4_turn(l,j1)-(s1+s2+s3)
3800 C-----------------------------------------------------------------------------
3801 subroutine vecpr(u,v,w)
3802 implicit real*8(a-h,o-z)
3803 dimension u(3),v(3),w(3)
3804 w(1)=u(2)*v(3)-u(3)*v(2)
3805 w(2)=-u(1)*v(3)+u(3)*v(1)
3806 w(3)=u(1)*v(2)-u(2)*v(1)
3809 C-----------------------------------------------------------------------------
3810 subroutine unormderiv(u,ugrad,unorm,ungrad)
3811 C This subroutine computes the derivatives of a normalized vector u, given
3812 C the derivatives computed without normalization conditions, ugrad. Returns
3815 double precision u(3),ugrad(3,3),unorm,ungrad(3,3)
3816 double precision vec(3)
3817 double precision scalar
3819 c write (2,*) 'ugrad',ugrad
3822 vec(i)=scalar(ugrad(1,i),u(1))
3824 c write (2,*) 'vec',vec
3827 ungrad(j,i)=(ugrad(j,i)-u(j)*vec(i))*unorm
3830 c write (2,*) 'ungrad',ungrad
3833 C-----------------------------------------------------------------------------
3834 subroutine escp_soft_sphere(evdw2,evdw2_14)
3836 C This subroutine calculates the excluded-volume interaction energy between
3837 C peptide-group centers and side chains and its gradient in virtual-bond and
3838 C side-chain vectors.
3840 implicit real*8 (a-h,o-z)
3841 include 'DIMENSIONS'
3842 include 'COMMON.GEO'
3843 include 'COMMON.VAR'
3844 include 'COMMON.LOCAL'
3845 include 'COMMON.CHAIN'
3846 include 'COMMON.DERIV'
3847 include 'COMMON.INTERACT'
3848 include 'COMMON.FFIELD'
3849 include 'COMMON.IOUNITS'
3850 include 'COMMON.CONTROL'
3855 cd print '(a)','Enter ESCP'
3856 cd write (iout,*) 'iatscp_s=',iatscp_s,' iatscp_e=',iatscp_e
3857 do i=iatscp_s,iatscp_e
3858 if (itype(i).eq.21 .or. itype(i+1).eq.21) cycle
3860 xi=0.5D0*(c(1,i)+c(1,i+1))
3861 yi=0.5D0*(c(2,i)+c(2,i+1))
3862 zi=0.5D0*(c(3,i)+c(3,i+1))
3864 do iint=1,nscp_gr(i)
3866 do j=iscpstart(i,iint),iscpend(i,iint)
3867 if (itype(j).eq.21) cycle
3869 C Uncomment following three lines for SC-p interactions
3873 C Uncomment following three lines for Ca-p interactions
3877 rij=xj*xj+yj*yj+zj*zj
3880 if (rij.lt.r0ijsq) then
3881 evdwij=0.25d0*(rij-r0ijsq)**2
3889 C Calculate contributions to the gradient in the virtual-bond and SC vectors.
3894 cgrad if (j.lt.i) then
3895 cd write (iout,*) 'j<i'
3896 C Uncomment following three lines for SC-p interactions
3898 c gradx_scp(k,j)=gradx_scp(k,j)+ggg(k)
3901 cd write (iout,*) 'j>i'
3903 cgrad ggg(k)=-ggg(k)
3904 C Uncomment following line for SC-p interactions
3905 c gradx_scp(k,j)=gradx_scp(k,j)-ggg(k)
3909 cgrad gvdwc_scp(k,i)=gvdwc_scp(k,i)-0.5D0*ggg(k)
3911 cgrad kstart=min0(i+1,j)
3912 cgrad kend=max0(i-1,j-1)
3913 cd write (iout,*) 'i=',i,' j=',j,' kstart=',kstart,' kend=',kend
3914 cd write (iout,*) ggg(1),ggg(2),ggg(3)
3915 cgrad do k=kstart,kend
3917 cgrad gvdwc_scp(l,k)=gvdwc_scp(l,k)-ggg(l)
3921 gvdwc_scpp(k,i)=gvdwc_scpp(k,i)-ggg(k)
3922 gvdwc_scp(k,j)=gvdwc_scp(k,j)+ggg(k)
3930 C-----------------------------------------------------------------------------
3931 subroutine escp(evdw2,evdw2_14)
3933 C This subroutine calculates the excluded-volume interaction energy between
3934 C peptide-group centers and side chains and its gradient in virtual-bond and
3935 C side-chain vectors.
3937 implicit real*8 (a-h,o-z)
3938 include 'DIMENSIONS'
3939 include 'COMMON.GEO'
3940 include 'COMMON.VAR'
3941 include 'COMMON.LOCAL'
3942 include 'COMMON.CHAIN'
3943 include 'COMMON.DERIV'
3944 include 'COMMON.INTERACT'
3945 include 'COMMON.FFIELD'
3946 include 'COMMON.IOUNITS'
3947 include 'COMMON.CONTROL'
3951 cd print '(a)','Enter ESCP'
3952 cd write (iout,*) 'iatscp_s=',iatscp_s,' iatscp_e=',iatscp_e
3953 do i=iatscp_s,iatscp_e
3954 if (itype(i).eq.21 .or. itype(i+1).eq.21) cycle
3956 xi=0.5D0*(c(1,i)+c(1,i+1))
3957 yi=0.5D0*(c(2,i)+c(2,i+1))
3958 zi=0.5D0*(c(3,i)+c(3,i+1))
3960 do iint=1,nscp_gr(i)
3962 do j=iscpstart(i,iint),iscpend(i,iint)
3964 if (itypj.eq.21) cycle
3965 C Uncomment following three lines for SC-p interactions
3969 C Uncomment following three lines for Ca-p interactions
3973 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
3975 e1=fac*fac*aad(itypj,iteli)
3976 e2=fac*bad(itypj,iteli)
3977 if (iabs(j-i) .le. 2) then
3980 evdw2_14=evdw2_14+e1+e2
3984 if (energy_dec) write (iout,'(a6,2i5,0pf7.3)')
3985 & 'evdw2',i,j,evdwij
3987 C Calculate contributions to the gradient in the virtual-bond and SC vectors.
3989 fac=-(evdwij+e1)*rrij
3993 cgrad if (j.lt.i) then
3994 cd write (iout,*) 'j<i'
3995 C Uncomment following three lines for SC-p interactions
3997 c gradx_scp(k,j)=gradx_scp(k,j)+ggg(k)
4000 cd write (iout,*) 'j>i'
4002 cgrad ggg(k)=-ggg(k)
4003 C Uncomment following line for SC-p interactions
4004 ccgrad gradx_scp(k,j)=gradx_scp(k,j)-ggg(k)
4005 c gradx_scp(k,j)=gradx_scp(k,j)+ggg(k)
4009 cgrad gvdwc_scp(k,i)=gvdwc_scp(k,i)-0.5D0*ggg(k)
4011 cgrad kstart=min0(i+1,j)
4012 cgrad kend=max0(i-1,j-1)
4013 cd write (iout,*) 'i=',i,' j=',j,' kstart=',kstart,' kend=',kend
4014 cd write (iout,*) ggg(1),ggg(2),ggg(3)
4015 cgrad do k=kstart,kend
4017 cgrad gvdwc_scp(l,k)=gvdwc_scp(l,k)-ggg(l)
4021 gvdwc_scpp(k,i)=gvdwc_scpp(k,i)-ggg(k)
4022 gvdwc_scp(k,j)=gvdwc_scp(k,j)+ggg(k)
4030 gvdwc_scp(j,i)=expon*gvdwc_scp(j,i)
4031 gvdwc_scpp(j,i)=expon*gvdwc_scpp(j,i)
4032 gradx_scp(j,i)=expon*gradx_scp(j,i)
4035 C******************************************************************************
4039 C To save time the factor EXPON has been extracted from ALL components
4040 C of GVDWC and GRADX. Remember to multiply them by this factor before further
4043 C******************************************************************************
4046 C--------------------------------------------------------------------------
4047 subroutine edis(ehpb)
4049 C Evaluate bridge-strain energy and its gradient in virtual-bond and SC vectors.
4051 implicit real*8 (a-h,o-z)
4052 include 'DIMENSIONS'
4053 include 'COMMON.SBRIDGE'
4054 include 'COMMON.CHAIN'
4055 include 'COMMON.DERIV'
4056 include 'COMMON.VAR'
4057 include 'COMMON.INTERACT'
4058 include 'COMMON.IOUNITS'
4061 cd write(iout,*)'edis: nhpb=',nhpb,' fbr=',fbr
4062 cd write(iout,*)'link_start=',link_start,' link_end=',link_end
4063 if (link_end.eq.0) return
4064 do i=link_start,link_end
4065 C If ihpb(i) and jhpb(i) > NRES, this is a SC-SC distance, otherwise a
4066 C CA-CA distance used in regularization of structure.
4069 C iii and jjj point to the residues for which the distance is assigned.
4070 if (ii.gt.nres) then
4077 c write (iout,*) "i",i," ii",ii," iii",iii," jj",jj," jjj",jjj,
4078 c & dhpb(i),dhpb1(i),forcon(i)
4079 C 24/11/03 AL: SS bridges handled separately because of introducing a specific
4080 C distance and angle dependent SS bond potential.
4081 cmc if (ii.gt.nres .and. itype(iii).eq.1 .and. itype(jjj).eq.1) then
4082 C 18/07/06 MC: Use the convention that the first nss pairs are SS bonds
4083 if (.not.dyn_ss .and. i.le.nss) then
4084 C 15/02/13 CC dynamic SSbond - additional check
4086 & .and. itype(iii).eq.1 .and. itype(jjj).eq.1) then
4087 call ssbond_ene(iii,jjj,eij)
4090 cd write (iout,*) "eij",eij
4092 C Calculate the distance between the two points and its difference from the
4096 C Get the force constant corresponding to this distance.
4098 C Calculate the contribution to energy.
4099 ehpb=ehpb+waga*rdis*rdis
4101 C Evaluate gradient.
4104 cd print *,'i=',i,' ii=',ii,' jj=',jj,' dhpb=',dhpb(i),' dd=',dd,
4105 cd & ' waga=',waga,' fac=',fac
4107 ggg(j)=fac*(c(j,jj)-c(j,ii))
4109 cd print '(i3,3(1pe14.5))',i,(ggg(j),j=1,3)
4110 C If this is a SC-SC distance, we need to calculate the contributions to the
4111 C Cartesian gradient in the SC vectors (ghpbx).
4114 ghpbx(j,iii)=ghpbx(j,iii)-ggg(j)
4115 ghpbx(j,jjj)=ghpbx(j,jjj)+ggg(j)
4118 cgrad do j=iii,jjj-1
4120 cgrad ghpbc(k,j)=ghpbc(k,j)+ggg(k)
4124 ghpbc(k,jjj)=ghpbc(k,jjj)+ggg(k)
4125 ghpbc(k,iii)=ghpbc(k,iii)-ggg(k)
4132 C--------------------------------------------------------------------------
4133 subroutine ssbond_ene(i,j,eij)
4135 C Calculate the distance and angle dependent SS-bond potential energy
4136 C using a free-energy function derived based on RHF/6-31G** ab initio
4137 C calculations of diethyl disulfide.
4139 C A. Liwo and U. Kozlowska, 11/24/03
4141 implicit real*8 (a-h,o-z)
4142 include 'DIMENSIONS'
4143 include 'COMMON.SBRIDGE'
4144 include 'COMMON.CHAIN'
4145 include 'COMMON.DERIV'
4146 include 'COMMON.LOCAL'
4147 include 'COMMON.INTERACT'
4148 include 'COMMON.VAR'
4149 include 'COMMON.IOUNITS'
4150 double precision erij(3),dcosom1(3),dcosom2(3),gg(3)
4155 dxi=dc_norm(1,nres+i)
4156 dyi=dc_norm(2,nres+i)
4157 dzi=dc_norm(3,nres+i)
4158 c dsci_inv=dsc_inv(itypi)
4159 dsci_inv=vbld_inv(nres+i)
4161 c dscj_inv=dsc_inv(itypj)
4162 dscj_inv=vbld_inv(nres+j)
4166 dxj=dc_norm(1,nres+j)
4167 dyj=dc_norm(2,nres+j)
4168 dzj=dc_norm(3,nres+j)
4169 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
4174 om1=dxi*erij(1)+dyi*erij(2)+dzi*erij(3)
4175 om2=dxj*erij(1)+dyj*erij(2)+dzj*erij(3)
4176 om12=dxi*dxj+dyi*dyj+dzi*dzj
4178 dcosom1(k)=rij*(dc_norm(k,nres+i)-om1*erij(k))
4179 dcosom2(k)=rij*(dc_norm(k,nres+j)-om2*erij(k))
4185 deltat12=om2-om1+2.0d0
4187 eij=akcm*deltad*deltad+akth*(deltat1*deltat1+deltat2*deltat2)
4188 & +akct*deltad*deltat12
4189 & +v1ss*cosphi+v2ss*cosphi*cosphi+v3ss*cosphi*cosphi*cosphi+ebr
4190 c write(iout,*) i,j,"rij",rij,"d0cm",d0cm," akcm",akcm," akth",akth,
4191 c & " akct",akct," deltad",deltad," deltat",deltat1,deltat2,
4192 c & " deltat12",deltat12," eij",eij
4193 ed=2*akcm*deltad+akct*deltat12
4195 pom2=v1ss+2*v2ss*cosphi+3*v3ss*cosphi*cosphi
4196 eom1=-2*akth*deltat1-pom1-om2*pom2
4197 eom2= 2*akth*deltat2+pom1-om1*pom2
4200 ggk=ed*erij(k)+eom1*dcosom1(k)+eom2*dcosom2(k)
4201 ghpbx(k,i)=ghpbx(k,i)-ggk
4202 & +(eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,nres+i))
4203 & +eom1*(erij(k)-om1*dc_norm(k,nres+i)))*dsci_inv
4204 ghpbx(k,j)=ghpbx(k,j)+ggk
4205 & +(eom12*(dc_norm(k,nres+i)-om12*dc_norm(k,nres+j))
4206 & +eom2*(erij(k)-om2*dc_norm(k,nres+j)))*dscj_inv
4207 ghpbc(k,i)=ghpbc(k,i)-ggk
4208 ghpbc(k,j)=ghpbc(k,j)+ggk
4211 C Calculate the components of the gradient in DC and X
4215 cgrad ghpbc(l,k)=ghpbc(l,k)+gg(l)
4220 C--------------------------------------------------------------------------
4221 subroutine ebond(estr)
4223 c Evaluate the energy of stretching of the CA-CA and CA-SC virtual bonds
4225 implicit real*8 (a-h,o-z)
4226 include 'DIMENSIONS'
4227 include 'COMMON.LOCAL'
4228 include 'COMMON.GEO'
4229 include 'COMMON.INTERACT'
4230 include 'COMMON.DERIV'
4231 include 'COMMON.VAR'
4232 include 'COMMON.CHAIN'
4233 include 'COMMON.IOUNITS'
4234 include 'COMMON.NAMES'
4235 include 'COMMON.FFIELD'
4236 include 'COMMON.CONTROL'
4237 include 'COMMON.SETUP'
4238 double precision u(3),ud(3)
4241 do i=ibondp_start,ibondp_end
4242 if (itype(i-1).eq.21 .or. itype(i).eq.21) then
4243 estr1=estr1+gnmr1(vbld(i),-1.0d0,distchainmax)
4245 gradb(j,i-1)=gnmr1prim(vbld(i),-1.0d0,distchainmax)
4246 & *dc(j,i-1)/vbld(i)
4248 if (energy_dec) write(iout,*)
4249 & "estr1",i,gnmr1(vbld(i),-1.0d0,distchainmax)
4251 diff = vbld(i)-vbldp0
4252 if (energy_dec) write (iout,'(a7,i5,4f7.3)')
4253 & "estr bb",i,vbld(i),vbldp0,diff,AKP*diff*diff
4256 gradb(j,i-1)=AKP*diff*dc(j,i-1)/vbld(i)
4258 c write (iout,'(i5,3f10.5)') i,(gradb(j,i-1),j=1,3)
4261 estr=0.5d0*AKP*estr+estr1
4263 c 09/18/07 AL: multimodal bond potential based on AM1 CA-SC PMF's included
4265 do i=ibond_start,ibond_end
4267 if (iti.ne.10 .and. iti.ne.21) then
4270 diff=vbld(i+nres)-vbldsc0(1,iti)
4271 if (energy_dec) write (iout,*)
4272 & "estr sc",i,iti,vbld(i+nres),vbldsc0(1,iti),diff,
4273 & AKSC(1,iti),AKSC(1,iti)*diff*diff
4274 estr=estr+0.5d0*AKSC(1,iti)*diff*diff
4276 gradbx(j,i)=AKSC(1,iti)*diff*dc(j,i+nres)/vbld(i+nres)
4280 diff=vbld(i+nres)-vbldsc0(j,iti)
4281 ud(j)=aksc(j,iti)*diff
4282 u(j)=abond0(j,iti)+0.5d0*ud(j)*diff
4296 uprod2=uprod2*u(k)*u(k)
4300 usumsqder=usumsqder+ud(j)*uprod2
4302 estr=estr+uprod/usum
4304 gradbx(j,i)=usumsqder/(usum*usum)*dc(j,i+nres)/vbld(i+nres)
4312 C--------------------------------------------------------------------------
4313 subroutine ebend(etheta)
4315 C Evaluate the virtual-bond-angle energy given the virtual-bond dihedral
4316 C angles gamma and its derivatives in consecutive thetas and gammas.
4318 implicit real*8 (a-h,o-z)
4319 include 'DIMENSIONS'
4320 include 'COMMON.LOCAL'
4321 include 'COMMON.GEO'
4322 include 'COMMON.INTERACT'
4323 include 'COMMON.DERIV'
4324 include 'COMMON.VAR'
4325 include 'COMMON.CHAIN'
4326 include 'COMMON.IOUNITS'
4327 include 'COMMON.NAMES'
4328 include 'COMMON.FFIELD'
4329 include 'COMMON.CONTROL'
4330 common /calcthet/ term1,term2,termm,diffak,ratak,
4331 & ak,aktc,termpre,termexp,sigc,sig0i,time11,time12,sigcsq,
4332 & delthe0,sig0inv,sigtc,sigsqtc,delthec,it
4333 double precision y(2),z(2)
4335 c time11=dexp(-2*time)
4338 c write (*,'(a,i2)') 'EBEND ICG=',icg
4339 do i=ithet_start,ithet_end
4340 if (itype(i-1).eq.21) cycle
4341 C Zero the energy function and its derivative at 0 or pi.
4342 call splinthet(theta(i),0.5d0*delta,ss,ssd)
4344 if (i.gt.3 .and. itype(i-2).ne.21) then
4347 if (phii.ne.phii) phii=150.0
4357 if (i.lt.nres .and. itype(i).ne.21) then
4360 if (phii1.ne.phii1) phii1=150.0
4372 C Calculate the "mean" value of theta from the part of the distribution
4373 C dependent on the adjacent virtual-bond-valence angles (gamma1 & gamma2).
4374 C In following comments this theta will be referred to as t_c.
4375 thet_pred_mean=0.0d0
4379 thet_pred_mean=thet_pred_mean+athetk*y(k)+bthetk*z(k)
4381 dthett=thet_pred_mean*ssd
4382 thet_pred_mean=thet_pred_mean*ss+a0thet(it)
4383 C Derivatives of the "mean" values in gamma1 and gamma2.
4384 dthetg1=(-athet(1,it)*y(2)+athet(2,it)*y(1))*ss
4385 dthetg2=(-bthet(1,it)*z(2)+bthet(2,it)*z(1))*ss
4386 if (theta(i).gt.pi-delta) then
4387 call theteng(pi-delta,thet_pred_mean,theta0(it),f0,fprim0,
4389 call mixder(pi-delta,thet_pred_mean,theta0(it),fprim_tc0)
4390 call theteng(pi,thet_pred_mean,theta0(it),f1,fprim1,E_tc1)
4391 call spline1(theta(i),pi-delta,delta,f0,f1,fprim0,ethetai,
4393 call spline2(theta(i),pi-delta,delta,E_tc0,E_tc1,fprim_tc0,
4395 else if (theta(i).lt.delta) then
4396 call theteng(delta,thet_pred_mean,theta0(it),f0,fprim0,E_tc0)
4397 call theteng(0.0d0,thet_pred_mean,theta0(it),f1,fprim1,E_tc1)
4398 call spline1(theta(i),delta,-delta,f0,f1,fprim0,ethetai,
4400 call mixder(delta,thet_pred_mean,theta0(it),fprim_tc0)
4401 call spline2(theta(i),delta,-delta,E_tc0,E_tc1,fprim_tc0,
4404 call theteng(theta(i),thet_pred_mean,theta0(it),ethetai,
4407 etheta=etheta+ethetai
4408 if (energy_dec) write (iout,'(a6,i5,0pf7.3)')
4410 if (i.gt.3) gloc(i-3,icg)=gloc(i-3,icg)+wang*E_tc*dthetg1
4411 if (i.lt.nres) gloc(i-2,icg)=gloc(i-2,icg)+wang*E_tc*dthetg2
4412 gloc(nphi+i-2,icg)=wang*(E_theta+E_tc*dthett)
4414 C Ufff.... We've done all this!!!
4417 C---------------------------------------------------------------------------
4418 subroutine theteng(thetai,thet_pred_mean,theta0i,ethetai,E_theta,
4420 implicit real*8 (a-h,o-z)
4421 include 'DIMENSIONS'
4422 include 'COMMON.LOCAL'
4423 include 'COMMON.IOUNITS'
4424 common /calcthet/ term1,term2,termm,diffak,ratak,
4425 & ak,aktc,termpre,termexp,sigc,sig0i,time11,time12,sigcsq,
4426 & delthe0,sig0inv,sigtc,sigsqtc,delthec,it
4427 C Calculate the contributions to both Gaussian lobes.
4428 C 6/6/97 - Deform the Gaussians using the factor of 1/(1+time)
4429 C The "polynomial part" of the "standard deviation" of this part of
4433 sig=sig*thet_pred_mean+polthet(j,it)
4435 C Derivative of the "interior part" of the "standard deviation of the"
4436 C gamma-dependent Gaussian lobe in t_c.
4437 sigtc=3*polthet(3,it)
4439 sigtc=sigtc*thet_pred_mean+j*polthet(j,it)
4442 C Set the parameters of both Gaussian lobes of the distribution.
4443 C "Standard deviation" of the gamma-dependent Gaussian lobe (sigtc)
4444 fac=sig*sig+sigc0(it)
4447 C Following variable (sigsqtc) is -(1/2)d[sigma(t_c)**(-2))]/dt_c
4448 sigsqtc=-4.0D0*sigcsq*sigtc
4449 c print *,i,sig,sigtc,sigsqtc
4450 C Following variable (sigtc) is d[sigma(t_c)]/dt_c
4451 sigtc=-sigtc/(fac*fac)
4452 C Following variable is sigma(t_c)**(-2)
4453 sigcsq=sigcsq*sigcsq
4455 sig0inv=1.0D0/sig0i**2
4456 delthec=thetai-thet_pred_mean
4457 delthe0=thetai-theta0i
4458 term1=-0.5D0*sigcsq*delthec*delthec
4459 term2=-0.5D0*sig0inv*delthe0*delthe0
4460 C Following fuzzy logic is to avoid underflows in dexp and subsequent INFs and
4461 C NaNs in taking the logarithm. We extract the largest exponent which is added
4462 C to the energy (this being the log of the distribution) at the end of energy
4463 C term evaluation for this virtual-bond angle.
4464 if (term1.gt.term2) then
4466 term2=dexp(term2-termm)
4470 term1=dexp(term1-termm)
4473 C The ratio between the gamma-independent and gamma-dependent lobes of
4474 C the distribution is a Gaussian function of thet_pred_mean too.
4475 diffak=gthet(2,it)-thet_pred_mean
4476 ratak=diffak/gthet(3,it)**2
4477 ak=dexp(gthet(1,it)-0.5D0*diffak*ratak)
4478 C Let's differentiate it in thet_pred_mean NOW.
4480 C Now put together the distribution terms to make complete distribution.
4481 termexp=term1+ak*term2
4482 termpre=sigc+ak*sig0i
4483 C Contribution of the bending energy from this theta is just the -log of
4484 C the sum of the contributions from the two lobes and the pre-exponential
4485 C factor. Simple enough, isn't it?
4486 ethetai=(-dlog(termexp)-termm+dlog(termpre))
4487 C NOW the derivatives!!!
4488 C 6/6/97 Take into account the deformation.
4489 E_theta=(delthec*sigcsq*term1
4490 & +ak*delthe0*sig0inv*term2)/termexp
4491 E_tc=((sigtc+aktc*sig0i)/termpre
4492 & -((delthec*sigcsq+delthec*delthec*sigsqtc)*term1+
4493 & aktc*term2)/termexp)
4496 c-----------------------------------------------------------------------------
4497 subroutine mixder(thetai,thet_pred_mean,theta0i,E_tc_t)
4498 implicit real*8 (a-h,o-z)
4499 include 'DIMENSIONS'
4500 include 'COMMON.LOCAL'
4501 include 'COMMON.IOUNITS'
4502 common /calcthet/ term1,term2,termm,diffak,ratak,
4503 & ak,aktc,termpre,termexp,sigc,sig0i,time11,time12,sigcsq,
4504 & delthe0,sig0inv,sigtc,sigsqtc,delthec,it
4505 delthec=thetai-thet_pred_mean
4506 delthe0=thetai-theta0i
4507 C "Thank you" to MAPLE (probably spared one day of hand-differentiation).
4508 t3 = thetai-thet_pred_mean
4512 t14 = t12+t6*sigsqtc
4514 t21 = thetai-theta0i
4520 E_tc_t = -((sigcsq+2.D0*t3*sigsqtc)*t9-t14*sigcsq*t3*t16*t9
4521 & -aktc*sig0inv*t27)/t32+(t14*t9+aktc*t26)/t40
4522 & *(-t12*t9-ak*sig0inv*t27)
4526 C--------------------------------------------------------------------------
4527 subroutine ebend(etheta)
4529 C Evaluate the virtual-bond-angle energy given the virtual-bond dihedral
4530 C angles gamma and its derivatives in consecutive thetas and gammas.
4531 C ab initio-derived potentials from
4532 c Kozlowska et al., J. Phys.: Condens. Matter 19 (2007) 285203
4534 implicit real*8 (a-h,o-z)
4535 include 'DIMENSIONS'
4536 include 'COMMON.LOCAL'
4537 include 'COMMON.GEO'
4538 include 'COMMON.INTERACT'
4539 include 'COMMON.DERIV'
4540 include 'COMMON.VAR'
4541 include 'COMMON.CHAIN'
4542 include 'COMMON.IOUNITS'
4543 include 'COMMON.NAMES'
4544 include 'COMMON.FFIELD'
4545 include 'COMMON.CONTROL'
4546 double precision coskt(mmaxtheterm),sinkt(mmaxtheterm),
4547 & cosph1(maxsingle),sinph1(maxsingle),cosph2(maxsingle),
4548 & sinph2(maxsingle),cosph1ph2(maxdouble,maxdouble),
4549 & sinph1ph2(maxdouble,maxdouble)
4550 logical lprn /.false./, lprn1 /.false./
4552 do i=ithet_start,ithet_end
4553 if ((itype(i-1).eq.ntyp1).or.(itype(i-2).eq.ntyp1).or.
4554 &(itype(i).eq.ntyp1)) cycle
4558 theti2=0.5d0*theta(i)
4559 ityp2=ithetyp(itype(i-1))
4561 coskt(k)=dcos(k*theti2)
4562 sinkt(k)=dsin(k*theti2)
4565 if (i.gt.3 .and. itype(max0(i-3,1)).ne.ntyp1) then
4568 if (phii.ne.phii) phii=150.0
4572 ityp1=ithetyp(itype(i-2))
4574 cosph1(k)=dcos(k*phii)
4575 sinph1(k)=dsin(k*phii)
4579 ityp1=ithetyp(itype(i-2))
4585 if ((i.lt.nres).and. itype(i+1).ne.ntyp1) then
4588 if (phii1.ne.phii1) phii1=150.0
4593 ityp3=ithetyp(itype(i))
4595 cosph2(k)=dcos(k*phii1)
4596 sinph2(k)=dsin(k*phii1)
4600 ityp3=ithetyp(itype(i))
4606 ethetai=aa0thet(ityp1,ityp2,ityp3)
4609 ccl=cosph1(l)*cosph2(k-l)
4610 ssl=sinph1(l)*sinph2(k-l)
4611 scl=sinph1(l)*cosph2(k-l)
4612 csl=cosph1(l)*sinph2(k-l)
4613 cosph1ph2(l,k)=ccl-ssl
4614 cosph1ph2(k,l)=ccl+ssl
4615 sinph1ph2(l,k)=scl+csl
4616 sinph1ph2(k,l)=scl-csl
4620 write (iout,*) "i",i," ityp1",ityp1," ityp2",ityp2,
4621 & " ityp3",ityp3," theti2",theti2," phii",phii," phii1",phii1
4622 write (iout,*) "coskt and sinkt"
4624 write (iout,*) k,coskt(k),sinkt(k)
4628 ethetai=ethetai+aathet(k,ityp1,ityp2,ityp3)*sinkt(k)
4629 dethetai=dethetai+0.5d0*k*aathet(k,ityp1,ityp2,ityp3)
4632 & write (iout,*) "k",k," aathet",aathet(k,ityp1,ityp2,ityp3),
4633 & " ethetai",ethetai
4636 write (iout,*) "cosph and sinph"
4638 write (iout,*) k,cosph1(k),sinph1(k),cosph2(k),sinph2(k)
4640 write (iout,*) "cosph1ph2 and sinph2ph2"
4643 write (iout,*) l,k,cosph1ph2(l,k),cosph1ph2(k,l),
4644 & sinph1ph2(l,k),sinph1ph2(k,l)
4647 write(iout,*) "ethetai",ethetai
4651 aux=bbthet(k,m,ityp1,ityp2,ityp3)*cosph1(k)
4652 & +ccthet(k,m,ityp1,ityp2,ityp3)*sinph1(k)
4653 & +ddthet(k,m,ityp1,ityp2,ityp3)*cosph2(k)
4654 & +eethet(k,m,ityp1,ityp2,ityp3)*sinph2(k)
4655 ethetai=ethetai+sinkt(m)*aux
4656 dethetai=dethetai+0.5d0*m*aux*coskt(m)
4657 dephii=dephii+k*sinkt(m)*(
4658 & ccthet(k,m,ityp1,ityp2,ityp3)*cosph1(k)-
4659 & bbthet(k,m,ityp1,ityp2,ityp3)*sinph1(k))
4660 dephii1=dephii1+k*sinkt(m)*(
4661 & eethet(k,m,ityp1,ityp2,ityp3)*cosph2(k)-
4662 & ddthet(k,m,ityp1,ityp2,ityp3)*sinph2(k))
4664 & write (iout,*) "m",m," k",k," bbthet",
4665 & bbthet(k,m,ityp1,ityp2,ityp3)," ccthet",
4666 & ccthet(k,m,ityp1,ityp2,ityp3)," ddthet",
4667 & ddthet(k,m,ityp1,ityp2,ityp3)," eethet",
4668 & eethet(k,m,ityp1,ityp2,ityp3)," ethetai",ethetai
4672 & write(iout,*) "ethetai",ethetai
4676 aux=ffthet(l,k,m,ityp1,ityp2,ityp3)*cosph1ph2(l,k)+
4677 & ffthet(k,l,m,ityp1,ityp2,ityp3)*cosph1ph2(k,l)+
4678 & ggthet(l,k,m,ityp1,ityp2,ityp3)*sinph1ph2(l,k)+
4679 & ggthet(k,l,m,ityp1,ityp2,ityp3)*sinph1ph2(k,l)
4680 ethetai=ethetai+sinkt(m)*aux
4681 dethetai=dethetai+0.5d0*m*coskt(m)*aux
4682 dephii=dephii+l*sinkt(m)*(
4683 & -ffthet(l,k,m,ityp1,ityp2,ityp3)*sinph1ph2(l,k)-
4684 & ffthet(k,l,m,ityp1,ityp2,ityp3)*sinph1ph2(k,l)+
4685 & ggthet(l,k,m,ityp1,ityp2,ityp3)*cosph1ph2(l,k)+
4686 & ggthet(k,l,m,ityp1,ityp2,ityp3)*cosph1ph2(k,l))
4687 dephii1=dephii1+(k-l)*sinkt(m)*(
4688 & -ffthet(l,k,m,ityp1,ityp2,ityp3)*sinph1ph2(l,k)+
4689 & ffthet(k,l,m,ityp1,ityp2,ityp3)*sinph1ph2(k,l)+
4690 & ggthet(l,k,m,ityp1,ityp2,ityp3)*cosph1ph2(l,k)-
4691 & ggthet(k,l,m,ityp1,ityp2,ityp3)*cosph1ph2(k,l))
4693 write (iout,*) "m",m," k",k," l",l," ffthet",
4694 & ffthet(l,k,m,ityp1,ityp2,ityp3),
4695 & ffthet(k,l,m,ityp1,ityp2,ityp3)," ggthet",
4696 & ggthet(l,k,m,ityp1,ityp2,ityp3),
4697 & ggthet(k,l,m,ityp1,ityp2,ityp3)," ethetai",ethetai
4698 write (iout,*) cosph1ph2(l,k)*sinkt(m),
4699 & cosph1ph2(k,l)*sinkt(m),
4700 & sinph1ph2(l,k)*sinkt(m),sinph1ph2(k,l)*sinkt(m)
4706 if (lprn1) write (iout,'(i2,3f8.1,9h ethetai ,f10.5)')
4707 & i,theta(i)*rad2deg,phii*rad2deg,
4708 & phii1*rad2deg,ethetai
4709 etheta=etheta+ethetai
4710 if (energy_dec) write (iout,'(a6,i5,0pf7.3)')
4712 if (i.gt.3) gloc(i-3,icg)=gloc(i-3,icg)+wang*dephii
4713 if (i.lt.nres) gloc(i-2,icg)=gloc(i-2,icg)+wang*dephii1
4714 gloc(nphi+i-2,icg)=wang*dethetai
4720 c-----------------------------------------------------------------------------
4721 subroutine esc(escloc)
4722 C Calculate the local energy of a side chain and its derivatives in the
4723 C corresponding virtual-bond valence angles THETA and the spherical angles
4725 implicit real*8 (a-h,o-z)
4726 include 'DIMENSIONS'
4727 include 'COMMON.GEO'
4728 include 'COMMON.LOCAL'
4729 include 'COMMON.VAR'
4730 include 'COMMON.INTERACT'
4731 include 'COMMON.DERIV'
4732 include 'COMMON.CHAIN'
4733 include 'COMMON.IOUNITS'
4734 include 'COMMON.NAMES'
4735 include 'COMMON.FFIELD'
4736 include 'COMMON.CONTROL'
4737 double precision x(3),dersc(3),xemp(3),dersc0(3),dersc1(3),
4738 & ddersc0(3),ddummy(3),xtemp(3),temp(3)
4739 common /sccalc/ time11,time12,time112,theti,it,nlobit
4742 c write (iout,'(a)') 'ESC'
4743 do i=loc_start,loc_end
4746 if (it.eq.10) goto 1
4748 c print *,'i=',i,' it=',it,' nlobit=',nlobit
4749 c write (iout,*) 'i=',i,' ssa=',ssa,' ssad=',ssad
4750 theti=theta(i+1)-pipol
4755 if (x(2).gt.pi-delta) then
4759 call enesc(xtemp,escloci0,dersc0,ddersc0,.true.)
4761 call enesc(xtemp,escloci1,dersc1,ddummy,.false.)
4762 call spline1(x(2),pi-delta,delta,escloci0,escloci1,dersc0(2),
4764 call spline2(x(2),pi-delta,delta,dersc0(1),dersc1(1),
4765 & ddersc0(1),dersc(1))
4766 call spline2(x(2),pi-delta,delta,dersc0(3),dersc1(3),
4767 & ddersc0(3),dersc(3))
4769 call enesc_bound(xtemp,esclocbi0,dersc0,dersc12,.true.)
4771 call enesc_bound(xtemp,esclocbi1,dersc1,chuju,.false.)
4772 call spline1(x(2),pi-delta,delta,esclocbi0,esclocbi1,
4773 & dersc0(2),esclocbi,dersc02)
4774 call spline2(x(2),pi-delta,delta,dersc0(1),dersc1(1),
4776 call splinthet(x(2),0.5d0*delta,ss,ssd)
4781 dersc(k)=ss*dersc(k)+(1.0d0-ss)*dersc0(k)
4783 dersc(2)=dersc(2)+ssd*(escloci-esclocbi)
4784 c write (iout,*) 'i=',i,x(2)*rad2deg,escloci0,escloci,
4786 escloci=ss*escloci+(1.0d0-ss)*esclocbi
4788 c write (iout,*) escloci
4789 else if (x(2).lt.delta) then
4793 call enesc(xtemp,escloci0,dersc0,ddersc0,.true.)
4795 call enesc(xtemp,escloci1,dersc1,ddummy,.false.)
4796 call spline1(x(2),delta,-delta,escloci0,escloci1,dersc0(2),
4798 call spline2(x(2),delta,-delta,dersc0(1),dersc1(1),
4799 & ddersc0(1),dersc(1))
4800 call spline2(x(2),delta,-delta,dersc0(3),dersc1(3),
4801 & ddersc0(3),dersc(3))
4803 call enesc_bound(xtemp,esclocbi0,dersc0,dersc12,.true.)
4805 call enesc_bound(xtemp,esclocbi1,dersc1,chuju,.false.)
4806 call spline1(x(2),delta,-delta,esclocbi0,esclocbi1,
4807 & dersc0(2),esclocbi,dersc02)
4808 call spline2(x(2),delta,-delta,dersc0(1),dersc1(1),
4813 call splinthet(x(2),0.5d0*delta,ss,ssd)
4815 dersc(k)=ss*dersc(k)+(1.0d0-ss)*dersc0(k)
4817 dersc(2)=dersc(2)+ssd*(escloci-esclocbi)
4818 c write (iout,*) 'i=',i,x(2)*rad2deg,escloci0,escloci,
4820 escloci=ss*escloci+(1.0d0-ss)*esclocbi
4821 c write (iout,*) escloci
4823 call enesc(x,escloci,dersc,ddummy,.false.)
4826 escloc=escloc+escloci
4827 if (energy_dec) write (iout,'(a6,i5,0pf7.3)')
4828 & 'escloc',i,escloci
4829 c write (iout,*) 'i=',i,' escloci=',escloci,' dersc=',dersc
4831 gloc(nphi+i-1,icg)=gloc(nphi+i-1,icg)+
4833 gloc(ialph(i,1),icg)=wscloc*dersc(2)
4834 gloc(ialph(i,1)+nside,icg)=wscloc*dersc(3)
4839 C---------------------------------------------------------------------------
4840 subroutine enesc(x,escloci,dersc,ddersc,mixed)
4841 implicit real*8 (a-h,o-z)
4842 include 'DIMENSIONS'
4843 include 'COMMON.GEO'
4844 include 'COMMON.LOCAL'
4845 include 'COMMON.IOUNITS'
4846 common /sccalc/ time11,time12,time112,theti,it,nlobit
4847 double precision x(3),z(3),Ax(3,maxlob,-1:1),dersc(3),ddersc(3)
4848 double precision contr(maxlob,-1:1)
4850 c write (iout,*) 'it=',it,' nlobit=',nlobit
4854 if (mixed) ddersc(j)=0.0d0
4858 C Because of periodicity of the dependence of the SC energy in omega we have
4859 C to add up the contributions from x(3)-2*pi, x(3), and x(3+2*pi).
4860 C To avoid underflows, first compute & store the exponents.
4868 z(k)=x(k)-censc(k,j,it)
4873 Axk=Axk+gaussc(l,k,j,it)*z(l)
4879 expfac=expfac+Ax(k,j,iii)*z(k)
4887 C As in the case of ebend, we want to avoid underflows in exponentiation and
4888 C subsequent NaNs and INFs in energy calculation.
4889 C Find the largest exponent
4893 if (emin.gt.contr(j,iii)) emin=contr(j,iii)
4897 cd print *,'it=',it,' emin=',emin
4899 C Compute the contribution to SC energy and derivatives
4904 adexp=bsc(j,it)-0.5D0*contr(j,iii)+emin
4905 if(adexp.ne.adexp) adexp=1.0
4908 expfac=dexp(bsc(j,it)-0.5D0*contr(j,iii)+emin)
4910 cd print *,'j=',j,' expfac=',expfac
4911 escloc_i=escloc_i+expfac
4913 dersc(k)=dersc(k)+Ax(k,j,iii)*expfac
4917 ddersc(k)=ddersc(k)+(-Ax(2,j,iii)*Ax(k,j,iii)
4918 & +gaussc(k,2,j,it))*expfac
4925 dersc(1)=dersc(1)/cos(theti)**2
4926 ddersc(1)=ddersc(1)/cos(theti)**2
4929 escloci=-(dlog(escloc_i)-emin)
4931 dersc(j)=dersc(j)/escloc_i
4935 ddersc(j)=(ddersc(j)/escloc_i+dersc(2)*dersc(j))
4940 C------------------------------------------------------------------------------
4941 subroutine enesc_bound(x,escloci,dersc,dersc12,mixed)
4942 implicit real*8 (a-h,o-z)
4943 include 'DIMENSIONS'
4944 include 'COMMON.GEO'
4945 include 'COMMON.LOCAL'
4946 include 'COMMON.IOUNITS'
4947 common /sccalc/ time11,time12,time112,theti,it,nlobit
4948 double precision x(3),z(3),Ax(3,maxlob),dersc(3)
4949 double precision contr(maxlob)
4960 z(k)=x(k)-censc(k,j,it)
4966 Axk=Axk+gaussc(l,k,j,it)*z(l)
4972 expfac=expfac+Ax(k,j)*z(k)
4977 C As in the case of ebend, we want to avoid underflows in exponentiation and
4978 C subsequent NaNs and INFs in energy calculation.
4979 C Find the largest exponent
4982 if (emin.gt.contr(j)) emin=contr(j)
4986 C Compute the contribution to SC energy and derivatives
4990 expfac=dexp(bsc(j,it)-0.5D0*contr(j)+emin)
4991 escloc_i=escloc_i+expfac
4993 dersc(k)=dersc(k)+Ax(k,j)*expfac
4995 if (mixed) dersc12=dersc12+(-Ax(2,j)*Ax(1,j)
4996 & +gaussc(1,2,j,it))*expfac
5000 dersc(1)=dersc(1)/cos(theti)**2
5001 dersc12=dersc12/cos(theti)**2
5002 escloci=-(dlog(escloc_i)-emin)
5004 dersc(j)=dersc(j)/escloc_i
5006 if (mixed) dersc12=(dersc12/escloc_i+dersc(2)*dersc(1))
5010 c----------------------------------------------------------------------------------
5011 subroutine esc(escloc)
5012 C Calculate the local energy of a side chain and its derivatives in the
5013 C corresponding virtual-bond valence angles THETA and the spherical angles
5014 C ALPHA and OMEGA derived from AM1 all-atom calculations.
5015 C added by Urszula Kozlowska. 07/11/2007
5017 implicit real*8 (a-h,o-z)
5018 include 'DIMENSIONS'
5019 include 'COMMON.GEO'
5020 include 'COMMON.LOCAL'
5021 include 'COMMON.VAR'
5022 include 'COMMON.SCROT'
5023 include 'COMMON.INTERACT'
5024 include 'COMMON.DERIV'
5025 include 'COMMON.CHAIN'
5026 include 'COMMON.IOUNITS'
5027 include 'COMMON.NAMES'
5028 include 'COMMON.FFIELD'
5029 include 'COMMON.CONTROL'
5030 include 'COMMON.VECTORS'
5031 double precision x_prime(3),y_prime(3),z_prime(3)
5032 & , sumene,dsc_i,dp2_i,x(65),
5033 & xx,yy,zz,sumene1,sumene2,sumene3,sumene4,s1,s1_6,s2,s2_6,
5034 & de_dxx,de_dyy,de_dzz,de_dt
5035 double precision s1_t,s1_6_t,s2_t,s2_6_t
5037 & dXX_Ci1(3),dYY_Ci1(3),dZZ_Ci1(3),dXX_Ci(3),
5038 & dYY_Ci(3),dZZ_Ci(3),dXX_XYZ(3),dYY_XYZ(3),dZZ_XYZ(3),
5039 & dt_dCi(3),dt_dCi1(3)
5040 common /sccalc/ time11,time12,time112,theti,it,nlobit
5043 do i=loc_start,loc_end
5044 if (itype(i).eq.21) cycle
5045 costtab(i+1) =dcos(theta(i+1))
5046 sinttab(i+1) =dsqrt(1-costtab(i+1)*costtab(i+1))
5047 cost2tab(i+1)=dsqrt(0.5d0*(1.0d0+costtab(i+1)))
5048 sint2tab(i+1)=dsqrt(0.5d0*(1.0d0-costtab(i+1)))
5049 cosfac2=0.5d0/(1.0d0+costtab(i+1))
5050 cosfac=dsqrt(cosfac2)
5051 sinfac2=0.5d0/(1.0d0-costtab(i+1))
5052 sinfac=dsqrt(sinfac2)
5054 if (it.eq.10) goto 1
5056 C Compute the axes of tghe local cartesian coordinates system; store in
5057 c x_prime, y_prime and z_prime
5064 C write(2,*) "dc_norm", dc_norm(1,i+nres),dc_norm(2,i+nres),
5065 C & dc_norm(3,i+nres)
5067 x_prime(j) = (dc_norm(j,i) - dc_norm(j,i-1))*cosfac
5068 y_prime(j) = (dc_norm(j,i) + dc_norm(j,i-1))*sinfac
5071 z_prime(j) = -uz(j,i-1)
5074 c write (2,*) "x_prime",(x_prime(j),j=1,3)
5075 c write (2,*) "y_prime",(y_prime(j),j=1,3)
5076 c write (2,*) "z_prime",(z_prime(j),j=1,3)
5077 c write (2,*) "xx",scalar(x_prime(1),x_prime(1)),
5078 c & " xy",scalar(x_prime(1),y_prime(1)),
5079 c & " xz",scalar(x_prime(1),z_prime(1)),
5080 c & " yy",scalar(y_prime(1),y_prime(1)),
5081 c & " yz",scalar(y_prime(1),z_prime(1)),
5082 c & " zz",scalar(z_prime(1),z_prime(1))
5084 C Transform the unit vector of the ith side-chain centroid, dC_norm(*,i),
5085 C to local coordinate system. Store in xx, yy, zz.
5091 xx = xx + x_prime(j)*dc_norm(j,i+nres)
5092 yy = yy + y_prime(j)*dc_norm(j,i+nres)
5093 zz = zz + z_prime(j)*dc_norm(j,i+nres)
5100 C Compute the energy of the ith side cbain
5102 c write (2,*) "xx",xx," yy",yy," zz",zz
5105 x(j) = sc_parmin(j,it)
5108 Cc diagnostics - remove later
5110 yy1 = dsin(alph(2))*dcos(omeg(2))
5111 zz1 = -dsin(alph(2))*dsin(omeg(2))
5112 write(2,'(3f8.1,3f9.3,1x,3f9.3)')
5113 & alph(2)*rad2deg,omeg(2)*rad2deg,theta(3)*rad2deg,xx,yy,zz,
5115 C," --- ", xx_w,yy_w,zz_w
5118 sumene1= x(1)+ x(2)*xx+ x(3)*yy+ x(4)*zz+ x(5)*xx**2
5119 & + x(6)*yy**2+ x(7)*zz**2+ x(8)*xx*zz+ x(9)*xx*yy
5121 sumene2= x(11) + x(12)*xx + x(13)*yy + x(14)*zz + x(15)*xx**2
5122 & + x(16)*yy**2 + x(17)*zz**2 + x(18)*xx*zz + x(19)*xx*yy
5124 sumene3= x(21) +x(22)*xx +x(23)*yy +x(24)*zz +x(25)*xx**2
5125 & +x(26)*yy**2 +x(27)*zz**2 +x(28)*xx*zz +x(29)*xx*yy
5126 & +x(30)*yy*zz +x(31)*xx**3 +x(32)*yy**3 +x(33)*zz**3
5127 & +x(34)*(xx**2)*yy +x(35)*(xx**2)*zz +x(36)*(yy**2)*xx
5128 & +x(37)*(yy**2)*zz +x(38)*(zz**2)*xx +x(39)*(zz**2)*yy
5130 sumene4= x(41) +x(42)*xx +x(43)*yy +x(44)*zz +x(45)*xx**2
5131 & +x(46)*yy**2 +x(47)*zz**2 +x(48)*xx*zz +x(49)*xx*yy
5132 & +x(50)*yy*zz +x(51)*xx**3 +x(52)*yy**3 +x(53)*zz**3
5133 & +x(54)*(xx**2)*yy +x(55)*(xx**2)*zz +x(56)*(yy**2)*xx
5134 & +x(57)*(yy**2)*zz +x(58)*(zz**2)*xx +x(59)*(zz**2)*yy
5136 dsc_i = 0.743d0+x(61)
5138 dscp1=dsqrt(dsc_i**2+dp2_i**2-2*dsc_i*dp2_i
5139 & *(xx*cost2tab(i+1)+yy*sint2tab(i+1)))
5140 dscp2=dsqrt(dsc_i**2+dp2_i**2-2*dsc_i*dp2_i
5141 & *(xx*cost2tab(i+1)-yy*sint2tab(i+1)))
5142 s1=(1+x(63))/(0.1d0 + dscp1)
5143 s1_6=(1+x(64))/(0.1d0 + dscp1**6)
5144 s2=(1+x(65))/(0.1d0 + dscp2)
5145 s2_6=(1+x(65))/(0.1d0 + dscp2**6)
5146 sumene = ( sumene3*sint2tab(i+1) + sumene1)*(s1+s1_6)
5147 & + (sumene4*cost2tab(i+1) +sumene2)*(s2+s2_6)
5148 c write(2,'(i2," sumene",7f9.3)') i,sumene1,sumene2,sumene3,
5150 c & dscp1,dscp2,sumene
5151 c sumene = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
5152 escloc = escloc + sumene
5153 if (energy_dec) write (iout,'(a6,i5,0pf7.3)')
5155 c write (2,*) "i",i," escloc",sumene,escloc
5158 C This section to check the numerical derivatives of the energy of ith side
5159 C chain in xx, yy, zz, and theta. Use the -DDEBUG compiler option or insert
5160 C #define DEBUG in the code to turn it on.
5162 write (2,*) "sumene =",sumene
5166 write (2,*) xx,yy,zz
5167 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
5168 de_dxx_num=(sumenep-sumene)/aincr
5170 write (2,*) "xx+ sumene from enesc=",sumenep
5173 write (2,*) xx,yy,zz
5174 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
5175 de_dyy_num=(sumenep-sumene)/aincr
5177 write (2,*) "yy+ sumene from enesc=",sumenep
5180 write (2,*) xx,yy,zz
5181 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
5182 de_dzz_num=(sumenep-sumene)/aincr
5184 write (2,*) "zz+ sumene from enesc=",sumenep
5185 costsave=cost2tab(i+1)
5186 sintsave=sint2tab(i+1)
5187 cost2tab(i+1)=dcos(0.5d0*(theta(i+1)+aincr))
5188 sint2tab(i+1)=dsin(0.5d0*(theta(i+1)+aincr))
5189 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
5190 de_dt_num=(sumenep-sumene)/aincr
5191 write (2,*) " t+ sumene from enesc=",sumenep
5192 cost2tab(i+1)=costsave
5193 sint2tab(i+1)=sintsave
5194 C End of diagnostics section.
5197 C Compute the gradient of esc
5199 pom_s1=(1.0d0+x(63))/(0.1d0 + dscp1)**2
5200 pom_s16=6*(1.0d0+x(64))/(0.1d0 + dscp1**6)**2
5201 pom_s2=(1.0d0+x(65))/(0.1d0 + dscp2)**2
5202 pom_s26=6*(1.0d0+x(65))/(0.1d0 + dscp2**6)**2
5203 pom_dx=dsc_i*dp2_i*cost2tab(i+1)
5204 pom_dy=dsc_i*dp2_i*sint2tab(i+1)
5205 pom_dt1=-0.5d0*dsc_i*dp2_i*(xx*sint2tab(i+1)-yy*cost2tab(i+1))
5206 pom_dt2=-0.5d0*dsc_i*dp2_i*(xx*sint2tab(i+1)+yy*cost2tab(i+1))
5207 pom1=(sumene3*sint2tab(i+1)+sumene1)
5208 & *(pom_s1/dscp1+pom_s16*dscp1**4)
5209 pom2=(sumene4*cost2tab(i+1)+sumene2)
5210 & *(pom_s2/dscp2+pom_s26*dscp2**4)
5211 sumene1x=x(2)+2*x(5)*xx+x(8)*zz+ x(9)*yy
5212 sumene3x=x(22)+2*x(25)*xx+x(28)*zz+x(29)*yy+3*x(31)*xx**2
5213 & +2*x(34)*xx*yy +2*x(35)*xx*zz +x(36)*(yy**2) +x(38)*(zz**2)
5215 sumene2x=x(12)+2*x(15)*xx+x(18)*zz+ x(19)*yy
5216 sumene4x=x(42)+2*x(45)*xx +x(48)*zz +x(49)*yy +3*x(51)*xx**2
5217 & +2*x(54)*xx*yy+2*x(55)*xx*zz+x(56)*(yy**2)+x(58)*(zz**2)
5219 de_dxx =(sumene1x+sumene3x*sint2tab(i+1))*(s1+s1_6)
5220 & +(sumene2x+sumene4x*cost2tab(i+1))*(s2+s2_6)
5221 & +(pom1+pom2)*pom_dx
5223 write(2,*), "de_dxx = ", de_dxx,de_dxx_num
5226 sumene1y=x(3) + 2*x(6)*yy + x(9)*xx + x(10)*zz
5227 sumene3y=x(23) +2*x(26)*yy +x(29)*xx +x(30)*zz +3*x(32)*yy**2
5228 & +x(34)*(xx**2) +2*x(36)*yy*xx +2*x(37)*yy*zz +x(39)*(zz**2)
5230 sumene2y=x(13) + 2*x(16)*yy + x(19)*xx + x(20)*zz
5231 sumene4y=x(43)+2*x(46)*yy+x(49)*xx +x(50)*zz
5232 & +3*x(52)*yy**2+x(54)*xx**2+2*x(56)*yy*xx +2*x(57)*yy*zz
5233 & +x(59)*zz**2 +x(60)*xx*zz
5234 de_dyy =(sumene1y+sumene3y*sint2tab(i+1))*(s1+s1_6)
5235 & +(sumene2y+sumene4y*cost2tab(i+1))*(s2+s2_6)
5236 & +(pom1-pom2)*pom_dy
5238 write(2,*), "de_dyy = ", de_dyy,de_dyy_num
5241 de_dzz =(x(24) +2*x(27)*zz +x(28)*xx +x(30)*yy
5242 & +3*x(33)*zz**2 +x(35)*xx**2 +x(37)*yy**2 +2*x(38)*zz*xx
5243 & +2*x(39)*zz*yy +x(40)*xx*yy)*sint2tab(i+1)*(s1+s1_6)
5244 & +(x(4) + 2*x(7)*zz+ x(8)*xx + x(10)*yy)*(s1+s1_6)
5245 & +(x(44)+2*x(47)*zz +x(48)*xx +x(50)*yy +3*x(53)*zz**2
5246 & +x(55)*xx**2 +x(57)*(yy**2)+2*x(58)*zz*xx +2*x(59)*zz*yy
5247 & +x(60)*xx*yy)*cost2tab(i+1)*(s2+s2_6)
5248 & + ( x(14) + 2*x(17)*zz+ x(18)*xx + x(20)*yy)*(s2+s2_6)
5250 write(2,*), "de_dzz = ", de_dzz,de_dzz_num
5253 de_dt = 0.5d0*sumene3*cost2tab(i+1)*(s1+s1_6)
5254 & -0.5d0*sumene4*sint2tab(i+1)*(s2+s2_6)
5255 & +pom1*pom_dt1+pom2*pom_dt2
5257 write(2,*), "de_dt = ", de_dt,de_dt_num
5261 cossc=scalar(dc_norm(1,i),dc_norm(1,i+nres))
5262 cossc1=scalar(dc_norm(1,i-1),dc_norm(1,i+nres))
5263 cosfac2xx=cosfac2*xx
5264 sinfac2yy=sinfac2*yy
5266 dt_dCi(k) = -(dc_norm(k,i-1)+costtab(i+1)*dc_norm(k,i))*
5268 dt_dCi1(k)= -(dc_norm(k,i)+costtab(i+1)*dc_norm(k,i-1))*
5270 pom=(dC_norm(k,i+nres)-cossc*dC_norm(k,i))*vbld_inv(i+1)
5271 pom1=(dC_norm(k,i+nres)-cossc1*dC_norm(k,i-1))*vbld_inv(i)
5272 c write (iout,*) "i",i," k",k," pom",pom," pom1",pom1,
5273 c & " dt_dCi",dt_dCi(k)," dt_dCi1",dt_dCi1(k)
5274 c write (iout,*) "dC_norm",(dC_norm(j,i),j=1,3),
5275 c & (dC_norm(j,i-1),j=1,3)," vbld_inv",vbld_inv(i+1),vbld_inv(i)
5276 dXX_Ci(k)=pom*cosfac-dt_dCi(k)*cosfac2xx
5277 dXX_Ci1(k)=-pom1*cosfac-dt_dCi1(k)*cosfac2xx
5278 dYY_Ci(k)=pom*sinfac+dt_dCi(k)*sinfac2yy
5279 dYY_Ci1(k)=pom1*sinfac+dt_dCi1(k)*sinfac2yy
5283 dZZ_Ci(k)=dZZ_Ci(k)-uzgrad(j,k,2,i-1)*dC_norm(j,i+nres)
5284 dZZ_Ci1(k)=dZZ_Ci1(k)-uzgrad(j,k,1,i-1)*dC_norm(j,i+nres)
5287 dXX_XYZ(k)=vbld_inv(i+nres)*(x_prime(k)-xx*dC_norm(k,i+nres))
5288 dYY_XYZ(k)=vbld_inv(i+nres)*(y_prime(k)-yy*dC_norm(k,i+nres))
5289 dZZ_XYZ(k)=vbld_inv(i+nres)*(z_prime(k)-zz*dC_norm(k,i+nres))
5291 dt_dCi(k) = -dt_dCi(k)/sinttab(i+1)
5292 dt_dCi1(k)= -dt_dCi1(k)/sinttab(i+1)
5296 dXX_Ctab(k,i)=dXX_Ci(k)
5297 dXX_C1tab(k,i)=dXX_Ci1(k)
5298 dYY_Ctab(k,i)=dYY_Ci(k)
5299 dYY_C1tab(k,i)=dYY_Ci1(k)
5300 dZZ_Ctab(k,i)=dZZ_Ci(k)
5301 dZZ_C1tab(k,i)=dZZ_Ci1(k)
5302 dXX_XYZtab(k,i)=dXX_XYZ(k)
5303 dYY_XYZtab(k,i)=dYY_XYZ(k)
5304 dZZ_XYZtab(k,i)=dZZ_XYZ(k)
5308 c write (iout,*) "k",k," dxx_ci1",dxx_ci1(k)," dyy_ci1",
5309 c & dyy_ci1(k)," dzz_ci1",dzz_ci1(k)
5310 c write (iout,*) "k",k," dxx_ci",dxx_ci(k)," dyy_ci",
5311 c & dyy_ci(k)," dzz_ci",dzz_ci(k)
5312 c write (iout,*) "k",k," dt_dci",dt_dci(k)," dt_dci",
5314 c write (iout,*) "k",k," dxx_XYZ",dxx_XYZ(k)," dyy_XYZ",
5315 c & dyy_XYZ(k)," dzz_XYZ",dzz_XYZ(k)
5316 gscloc(k,i-1)=gscloc(k,i-1)+de_dxx*dxx_ci1(k)
5317 & +de_dyy*dyy_ci1(k)+de_dzz*dzz_ci1(k)+de_dt*dt_dCi1(k)
5318 gscloc(k,i)=gscloc(k,i)+de_dxx*dxx_Ci(k)
5319 & +de_dyy*dyy_Ci(k)+de_dzz*dzz_Ci(k)+de_dt*dt_dCi(k)
5320 gsclocx(k,i)= de_dxx*dxx_XYZ(k)
5321 & +de_dyy*dyy_XYZ(k)+de_dzz*dzz_XYZ(k)
5323 c write(iout,*) "ENERGY GRAD = ", (gscloc(k,i-1),k=1,3),
5324 c & (gscloc(k,i),k=1,3),(gsclocx(k,i),k=1,3)
5326 C to check gradient call subroutine check_grad
5332 c------------------------------------------------------------------------------
5333 double precision function enesc(x,xx,yy,zz,cost2,sint2)
5335 double precision x(65),xx,yy,zz,cost2,sint2,sumene1,sumene2,
5336 & sumene3,sumene4,sumene,dsc_i,dp2_i,dscp1,dscp2,s1,s1_6,s2,s2_6
5337 sumene1= x(1)+ x(2)*xx+ x(3)*yy+ x(4)*zz+ x(5)*xx**2
5338 & + x(6)*yy**2+ x(7)*zz**2+ x(8)*xx*zz+ x(9)*xx*yy
5340 sumene2= x(11) + x(12)*xx + x(13)*yy + x(14)*zz + x(15)*xx**2
5341 & + x(16)*yy**2 + x(17)*zz**2 + x(18)*xx*zz + x(19)*xx*yy
5343 sumene3= x(21) +x(22)*xx +x(23)*yy +x(24)*zz +x(25)*xx**2
5344 & +x(26)*yy**2 +x(27)*zz**2 +x(28)*xx*zz +x(29)*xx*yy
5345 & +x(30)*yy*zz +x(31)*xx**3 +x(32)*yy**3 +x(33)*zz**3
5346 & +x(34)*(xx**2)*yy +x(35)*(xx**2)*zz +x(36)*(yy**2)*xx
5347 & +x(37)*(yy**2)*zz +x(38)*(zz**2)*xx +x(39)*(zz**2)*yy
5349 sumene4= x(41) +x(42)*xx +x(43)*yy +x(44)*zz +x(45)*xx**2
5350 & +x(46)*yy**2 +x(47)*zz**2 +x(48)*xx*zz +x(49)*xx*yy
5351 & +x(50)*yy*zz +x(51)*xx**3 +x(52)*yy**3 +x(53)*zz**3
5352 & +x(54)*(xx**2)*yy +x(55)*(xx**2)*zz +x(56)*(yy**2)*xx
5353 & +x(57)*(yy**2)*zz +x(58)*(zz**2)*xx +x(59)*(zz**2)*yy
5355 dsc_i = 0.743d0+x(61)
5357 dscp1=dsqrt(dsc_i**2+dp2_i**2-2*dsc_i*dp2_i
5358 & *(xx*cost2+yy*sint2))
5359 dscp2=dsqrt(dsc_i**2+dp2_i**2-2*dsc_i*dp2_i
5360 & *(xx*cost2-yy*sint2))
5361 s1=(1+x(63))/(0.1d0 + dscp1)
5362 s1_6=(1+x(64))/(0.1d0 + dscp1**6)
5363 s2=(1+x(65))/(0.1d0 + dscp2)
5364 s2_6=(1+x(65))/(0.1d0 + dscp2**6)
5365 sumene = ( sumene3*sint2 + sumene1)*(s1+s1_6)
5366 & + (sumene4*cost2 +sumene2)*(s2+s2_6)
5371 c------------------------------------------------------------------------------
5372 subroutine gcont(rij,r0ij,eps0ij,delta,fcont,fprimcont)
5374 C This procedure calculates two-body contact function g(rij) and its derivative:
5377 C g(rij) = esp0ij*(-0.9375*x+0.625*x**3-0.1875*x**5) ! -1 =< x =< 1
5380 C where x=(rij-r0ij)/delta
5382 C rij - interbody distance, r0ij - contact distance, eps0ij - contact energy
5385 double precision rij,r0ij,eps0ij,fcont,fprimcont
5386 double precision x,x2,x4,delta
5390 if (x.lt.-1.0D0) then
5393 else if (x.le.1.0D0) then
5396 fcont=eps0ij*(x*(-0.9375D0+0.6250D0*x2-0.1875D0*x4)+0.5D0)
5397 fprimcont=eps0ij * (-0.9375D0+1.8750D0*x2-0.9375D0*x4)/delta
5404 c------------------------------------------------------------------------------
5405 subroutine splinthet(theti,delta,ss,ssder)
5406 implicit real*8 (a-h,o-z)
5407 include 'DIMENSIONS'
5408 include 'COMMON.VAR'
5409 include 'COMMON.GEO'
5412 if (theti.gt.pipol) then
5413 call gcont(theti,thetup,1.0d0,delta,ss,ssder)
5415 call gcont(-theti,-thetlow,1.0d0,delta,ss,ssder)
5420 c------------------------------------------------------------------------------
5421 subroutine spline1(x,x0,delta,f0,f1,fprim0,f,fprim)
5423 double precision x,x0,delta,f0,f1,fprim0,f,fprim
5424 double precision ksi,ksi2,ksi3,a1,a2,a3
5425 a1=fprim0*delta/(f1-f0)
5431 f=f0+(f1-f0)*ksi*(a1+ksi*(a2+a3*ksi))
5432 fprim=(f1-f0)/delta*(a1+ksi*(2*a2+3*ksi*a3))
5435 c------------------------------------------------------------------------------
5436 subroutine spline2(x,x0,delta,f0x,f1x,fprim0x,fx)
5438 double precision x,x0,delta,f0x,f1x,fprim0x,fx
5439 double precision ksi,ksi2,ksi3,a1,a2,a3
5444 a2=3*(f1x-f0x)-2*fprim0x*delta
5445 a3=fprim0x*delta-2*(f1x-f0x)
5446 fx=f0x+a1*ksi+a2*ksi2+a3*ksi3
5449 C-----------------------------------------------------------------------------
5451 C-----------------------------------------------------------------------------
5452 subroutine etor(etors,edihcnstr)
5453 implicit real*8 (a-h,o-z)
5454 include 'DIMENSIONS'
5455 include 'COMMON.VAR'
5456 include 'COMMON.GEO'
5457 include 'COMMON.LOCAL'
5458 include 'COMMON.TORSION'
5459 include 'COMMON.INTERACT'
5460 include 'COMMON.DERIV'
5461 include 'COMMON.CHAIN'
5462 include 'COMMON.NAMES'
5463 include 'COMMON.IOUNITS'
5464 include 'COMMON.FFIELD'
5465 include 'COMMON.TORCNSTR'
5466 include 'COMMON.CONTROL'
5468 C Set lprn=.true. for debugging
5472 do i=iphi_start,iphi_end
5474 if (itype(i-2).eq.21 .or. itype(i-1).eq.21
5475 & .or. itype(i).eq.21) cycle
5476 itori=itortyp(itype(i-2))
5477 itori1=itortyp(itype(i-1))
5480 C Proline-Proline pair is a special case...
5481 if (itori.eq.3 .and. itori1.eq.3) then
5482 if (phii.gt.-dwapi3) then
5484 fac=1.0D0/(1.0D0-cosphi)
5485 etorsi=v1(1,3,3)*fac
5486 etorsi=etorsi+etorsi
5487 etors=etors+etorsi-v1(1,3,3)
5488 if (energy_dec) etors_ii=etors_ii+etorsi-v1(1,3,3)
5489 gloci=gloci-3*fac*etorsi*dsin(3*phii)
5492 v1ij=v1(j+1,itori,itori1)
5493 v2ij=v2(j+1,itori,itori1)
5496 etors=etors+v1ij*cosphi+v2ij*sinphi+dabs(v1ij)+dabs(v2ij)
5497 if (energy_dec) etors_ii=etors_ii+
5498 & v2ij*sinphi+dabs(v1ij)+dabs(v2ij)
5499 gloci=gloci+j*(v2ij*cosphi-v1ij*sinphi)
5503 v1ij=v1(j,itori,itori1)
5504 v2ij=v2(j,itori,itori1)
5507 etors=etors+v1ij*cosphi+v2ij*sinphi+dabs(v1ij)+dabs(v2ij)
5508 if (energy_dec) etors_ii=etors_ii+
5509 & v1ij*cosphi+v2ij*sinphi+dabs(v1ij)+dabs(v2ij)
5510 gloci=gloci+j*(v2ij*cosphi-v1ij*sinphi)
5513 if (energy_dec) write (iout,'(a6,i5,0pf7.3)')
5516 & write (iout,'(2(a3,2x,i3,2x),2i3,6f8.3/26x,6f8.3/)')
5517 & restyp(itype(i-2)),i-2,restyp(itype(i-1)),i-1,itori,itori1,
5518 & (v1(j,itori,itori1),j=1,6),(v2(j,itori,itori1),j=1,6)
5519 gloc(i-3,icg)=gloc(i-3,icg)+wtor*gloci
5520 c write (iout,*) 'i=',i,' gloc=',gloc(i-3,icg)
5522 ! 6/20/98 - dihedral angle constraints
5525 itori=idih_constr(i)
5528 if (difi.gt.drange(i)) then
5530 edihcnstr=edihcnstr+0.25d0*ftors*difi**4
5531 gloc(itori-3,icg)=gloc(itori-3,icg)+ftors*difi**3
5532 else if (difi.lt.-drange(i)) then
5534 edihcnstr=edihcnstr+0.25d0*ftors*difi**4
5535 gloc(itori-3,icg)=gloc(itori-3,icg)+ftors*difi**3
5537 ! write (iout,'(2i5,2f8.3,2e14.5)') i,itori,rad2deg*phii,
5538 ! & rad2deg*difi,0.25d0*ftors*difi**4,gloc(itori-3,icg)
5540 ! write (iout,*) 'edihcnstr',edihcnstr
5543 c------------------------------------------------------------------------------
5544 subroutine etor_d(etors_d)
5548 c----------------------------------------------------------------------------
5550 subroutine etor(etors,edihcnstr)
5551 implicit real*8 (a-h,o-z)
5552 include 'DIMENSIONS'
5553 include 'COMMON.VAR'
5554 include 'COMMON.GEO'
5555 include 'COMMON.LOCAL'
5556 include 'COMMON.TORSION'
5557 include 'COMMON.INTERACT'
5558 include 'COMMON.DERIV'
5559 include 'COMMON.CHAIN'
5560 include 'COMMON.NAMES'
5561 include 'COMMON.IOUNITS'
5562 include 'COMMON.FFIELD'
5563 include 'COMMON.TORCNSTR'
5564 include 'COMMON.CONTROL'
5566 C Set lprn=.true. for debugging
5570 do i=iphi_start,iphi_end
5571 if (itype(i-2).eq.21 .or. itype(i-1).eq.21
5572 & .or. itype(i).eq.21
5573 & .or. itype(i-3).eq.ntyp1) cycle
5575 itori=itortyp(itype(i-2))
5576 itori1=itortyp(itype(i-1))
5579 C Regular cosine and sine terms
5580 do j=1,nterm(itori,itori1)
5581 v1ij=v1(j,itori,itori1)
5582 v2ij=v2(j,itori,itori1)
5585 etors=etors+v1ij*cosphi+v2ij*sinphi
5586 if (energy_dec) etors_ii=etors_ii+
5587 & v1ij*cosphi+v2ij*sinphi
5588 gloci=gloci+j*(v2ij*cosphi-v1ij*sinphi)
5592 C E = SUM ----------------------------------- - v1
5593 C [v2 cos(phi/2)+v3 sin(phi/2)]^2 + 1
5595 cosphi=dcos(0.5d0*phii)
5596 sinphi=dsin(0.5d0*phii)
5597 do j=1,nlor(itori,itori1)
5598 vl1ij=vlor1(j,itori,itori1)
5599 vl2ij=vlor2(j,itori,itori1)
5600 vl3ij=vlor3(j,itori,itori1)
5601 pom=vl2ij*cosphi+vl3ij*sinphi
5602 pom1=1.0d0/(pom*pom+1.0d0)
5603 etors=etors+vl1ij*pom1
5604 if (energy_dec) etors_ii=etors_ii+
5607 gloci=gloci+vl1ij*(vl3ij*cosphi-vl2ij*sinphi)*pom
5609 C Subtract the constant term
5610 etors=etors-v0(itori,itori1)
5611 if (energy_dec) write (iout,'(a6,i5,0pf7.3)')
5612 & 'etor',i,etors_ii-v0(itori,itori1)
5614 & write (iout,'(2(a3,2x,i3,2x),2i3,6f8.3/26x,6f8.3/)')
5615 & restyp(itype(i-2)),i-2,restyp(itype(i-1)),i-1,itori,itori1,
5616 & (v1(j,itori,itori1),j=1,6),(v2(j,itori,itori1),j=1,6)
5617 gloc(i-3,icg)=gloc(i-3,icg)+wtor*gloci
5618 c write (iout,*) 'i=',i,' gloc=',gloc(i-3,icg)
5620 ! 6/20/98 - dihedral angle constraints
5622 c do i=1,ndih_constr
5623 do i=idihconstr_start,idihconstr_end
5624 itori=idih_constr(i)
5626 difi=pinorm(phii-phi0(i))
5627 if (difi.gt.drange(i)) then
5629 edihcnstr=edihcnstr+0.25d0*ftors*difi**4
5630 gloc(itori-3,icg)=gloc(itori-3,icg)+ftors*difi**3
5631 else if (difi.lt.-drange(i)) then
5633 edihcnstr=edihcnstr+0.25d0*ftors*difi**4
5634 gloc(itori-3,icg)=gloc(itori-3,icg)+ftors*difi**3
5638 cd write (iout,'(2i5,4f8.3,2e14.5)') i,itori,rad2deg*phii,
5639 cd & rad2deg*phi0(i), rad2deg*drange(i),
5640 cd & rad2deg*difi,0.25d0*ftors*difi**4,gloc(itori-3,icg)
5642 cd write (iout,*) 'edihcnstr',edihcnstr
5645 c----------------------------------------------------------------------------
5646 subroutine etor_d(etors_d)
5647 C 6/23/01 Compute double torsional energy
5648 implicit real*8 (a-h,o-z)
5649 include 'DIMENSIONS'
5650 include 'COMMON.VAR'
5651 include 'COMMON.GEO'
5652 include 'COMMON.LOCAL'
5653 include 'COMMON.TORSION'
5654 include 'COMMON.INTERACT'
5655 include 'COMMON.DERIV'
5656 include 'COMMON.CHAIN'
5657 include 'COMMON.NAMES'
5658 include 'COMMON.IOUNITS'
5659 include 'COMMON.FFIELD'
5660 include 'COMMON.TORCNSTR'
5661 include 'COMMON.CONTROL'
5663 C Set lprn=.true. for debugging
5667 C write(iout,*) "a tu??"
5668 do i=iphid_start,iphid_end
5669 if (itype(i-2).eq.21 .or. itype(i-1).eq.21
5670 & .or. itype(i).eq.21 .or. itype(i+1).eq.21
5671 & .or. itype(i-3).eq.ntyp1) cycle
5673 itori=itortyp(itype(i-2))
5674 itori1=itortyp(itype(i-1))
5675 itori2=itortyp(itype(i))
5680 C Regular cosine and sine terms
5681 do j=1,ntermd_1(itori,itori1,itori2)
5682 v1cij=v1c(1,j,itori,itori1,itori2)
5683 v1sij=v1s(1,j,itori,itori1,itori2)
5684 v2cij=v1c(2,j,itori,itori1,itori2)
5685 v2sij=v1s(2,j,itori,itori1,itori2)
5686 cosphi1=dcos(j*phii)
5687 sinphi1=dsin(j*phii)
5688 cosphi2=dcos(j*phii1)
5689 sinphi2=dsin(j*phii1)
5690 etors_d=etors_d+v1cij*cosphi1+v1sij*sinphi1+
5691 & v2cij*cosphi2+v2sij*sinphi2
5692 if (energy_dec) etors_d_ii=etors_d_ii+
5693 & v1cij*cosphi1+v1sij*sinphi1+v2cij*cosphi2+v2sij*sinphi2
5694 gloci1=gloci1+j*(v1sij*cosphi1-v1cij*sinphi1)
5695 gloci2=gloci2+j*(v2sij*cosphi2-v2cij*sinphi2)
5697 do k=2,ntermd_2(itori,itori1,itori2)
5699 v1cdij = v2c(k,l,itori,itori1,itori2)
5700 v2cdij = v2c(l,k,itori,itori1,itori2)
5701 v1sdij = v2s(k,l,itori,itori1,itori2)
5702 v2sdij = v2s(l,k,itori,itori1,itori2)
5703 cosphi1p2=dcos(l*phii+(k-l)*phii1)
5704 cosphi1m2=dcos(l*phii-(k-l)*phii1)
5705 sinphi1p2=dsin(l*phii+(k-l)*phii1)
5706 sinphi1m2=dsin(l*phii-(k-l)*phii1)
5707 etors_d=etors_d+v1cdij*cosphi1p2+v2cdij*cosphi1m2+
5708 & v1sdij*sinphi1p2+v2sdij*sinphi1m2
5709 if (energy_dec) etors_d_ii=etors_d_ii+
5710 & v1cdij*cosphi1p2+v2cdij*cosphi1m2+
5711 & v1sdij*sinphi1p2+v2sdij*sinphi1m2
5712 gloci1=gloci1+l*(v1sdij*cosphi1p2+v2sdij*cosphi1m2
5713 & -v1cdij*sinphi1p2-v2cdij*sinphi1m2)
5714 gloci2=gloci2+(k-l)*(v1sdij*cosphi1p2-v2sdij*cosphi1m2
5715 & -v1cdij*sinphi1p2+v2cdij*sinphi1m2)
5718 if (energy_dec) write (iout,'(a6,i5,0pf7.3)')
5719 & 'etor_d',i,etors_d_ii
5720 gloc(i-3,icg)=gloc(i-3,icg)+wtor_d*gloci1
5721 gloc(i-2,icg)=gloc(i-2,icg)+wtor_d*gloci2
5726 c------------------------------------------------------------------------------
5727 subroutine eback_sc_corr(esccor)
5728 c 7/21/2007 Correlations between the backbone-local and side-chain-local
5729 c conformational states; temporarily implemented as differences
5730 c between UNRES torsional potentials (dependent on three types of
5731 c residues) and the torsional potentials dependent on all 20 types
5732 c of residues computed from AM1 energy surfaces of terminally-blocked
5733 c amino-acid residues.
5734 implicit real*8 (a-h,o-z)
5735 include 'DIMENSIONS'
5736 include 'COMMON.VAR'
5737 include 'COMMON.GEO'
5738 include 'COMMON.LOCAL'
5739 include 'COMMON.TORSION'
5740 include 'COMMON.SCCOR'
5741 include 'COMMON.INTERACT'
5742 include 'COMMON.DERIV'
5743 include 'COMMON.CHAIN'
5744 include 'COMMON.NAMES'
5745 include 'COMMON.IOUNITS'
5746 include 'COMMON.FFIELD'
5747 include 'COMMON.CONTROL'
5749 C Set lprn=.true. for debugging
5752 c write (iout,*) "EBACK_SC_COR",itau_start,itau_end
5754 do i=itau_start,itau_end
5755 if ((itype(i-2).eq.ntyp1).or.(itype(i-1).eq.ntyp1)) cycle
5757 isccori=isccortyp(itype(i-2))
5758 isccori1=isccortyp(itype(i-1))
5759 c write (iout,*) "EBACK_SC_COR",i,nterm_sccor(isccori,isccori1)
5761 do intertyp=1,3 !intertyp
5763 cc Added 09 May 2012 (Adasko)
5764 cc Intertyp means interaction type of backbone mainchain correlation:
5765 c 1 = SC...Ca...Ca...Ca
5766 c 2 = Ca...Ca...Ca...SC
5767 c 3 = SC...Ca...Ca...SCi
5769 if (((intertyp.eq.3).and.((itype(i-2).eq.10).or.
5770 & (itype(i-1).eq.10).or.(itype(i-2).eq.ntyp1).or.
5771 & (itype(i-1).eq.ntyp1)))
5772 & .or. ((intertyp.eq.1).and.((itype(i-2).eq.10)
5773 & .or.(itype(i-2).eq.ntyp1).or.(itype(i-1).eq.ntyp1)
5774 & .or.(itype(i).eq.ntyp1)))
5775 & .or.((intertyp.eq.2).and.((itype(i-1).eq.10).or.
5776 & (itype(i-1).eq.ntyp1).or.(itype(i-2).eq.ntyp1).or.
5777 & (itype(i-3).eq.ntyp1)))) cycle
5778 if ((intertyp.eq.2).and.(i.eq.4).and.(itype(1).eq.ntyp1)) cycle
5779 if ((intertyp.eq.1).and.(i.eq.nres).and.(itype(nres).eq.ntyp1))
5781 do j=1,nterm_sccor(isccori,isccori1)
5782 v1ij=v1sccor(j,intertyp,isccori,isccori1)
5783 v2ij=v2sccor(j,intertyp,isccori,isccori1)
5784 cosphi=dcos(j*tauangle(intertyp,i))
5785 sinphi=dsin(j*tauangle(intertyp,i))
5786 if (energy_dec) esccor_ii=esccor_ii+v1ij*cosphi+v2ij*sinphi
5787 esccor=esccor+v1ij*cosphi+v2ij*sinphi
5788 gloci=gloci+j*(v2ij*cosphi-v1ij*sinphi)
5790 if (energy_dec) write (iout,'(a6,i5,i2,0pf7.3)')
5791 & 'esccor',i,intertyp,esccor_ii
5792 cd write (iout,*) "tau ",i,intertyp,tauangle(intertyp,i)*RAD2DEG
5793 c write (iout,*) "EBACK_SC_COR",i,v1ij*cosphi+v2ij*sinphi,intertyp
5794 gloc_sc(intertyp,i-3,icg)=gloc_sc(intertyp,i-3,icg)+wsccor*gloci
5796 & write (iout,'(2(a3,2x,i3,2x),2i3,6f8.3/26x,6f8.3/)')
5797 & restyp(itype(i-2)),i-2,restyp(itype(i-1)),i-1,isccori,isccori1,
5798 & (v1sccor(j,intertyp,isccori,isccori1),j=1,6)
5799 & ,(v2sccor(j,intertyp,isccori,isccori1),j=1,6)
5800 gsccor_loc(i-3)=gsccor_loc(i-3)+gloci
5806 c----------------------------------------------------------------------------
5807 subroutine multibody(ecorr)
5808 C This subroutine calculates multi-body contributions to energy following
5809 C the idea of Skolnick et al. If side chains I and J make a contact and
5810 C at the same time side chains I+1 and J+1 make a contact, an extra
5811 C contribution equal to sqrt(eps(i,j)*eps(i+1,j+1)) is added.
5812 implicit real*8 (a-h,o-z)
5813 include 'DIMENSIONS'
5814 include 'COMMON.IOUNITS'
5815 include 'COMMON.DERIV'
5816 include 'COMMON.INTERACT'
5817 include 'COMMON.CONTACTS'
5818 double precision gx(3),gx1(3)
5821 C Set lprn=.true. for debugging
5825 write (iout,'(a)') 'Contact function values:'
5827 write (iout,'(i2,20(1x,i2,f10.5))')
5828 & i,(jcont(j,i),facont(j,i),j=1,num_cont(i))
5843 num_conti=num_cont(i)
5844 num_conti1=num_cont(i1)
5849 if (j1.eq.j+ishift .or. j1.eq.j-ishift) then
5850 cd write(iout,*)'i=',i,' j=',j,' i1=',i1,' j1=',j1,
5851 cd & ' ishift=',ishift
5852 C Contacts I--J and I+ISHIFT--J+-ISHIFT1 occur simultaneously.
5853 C The system gains extra energy.
5854 ecorr=ecorr+esccorr(i,j,i1,j1,jj,kk)
5855 endif ! j1==j+-ishift
5864 c------------------------------------------------------------------------------
5865 double precision function esccorr(i,j,k,l,jj,kk)
5866 implicit real*8 (a-h,o-z)
5867 include 'DIMENSIONS'
5868 include 'COMMON.IOUNITS'
5869 include 'COMMON.DERIV'
5870 include 'COMMON.INTERACT'
5871 include 'COMMON.CONTACTS'
5872 double precision gx(3),gx1(3)
5877 cd write (iout,'(4i5,3f10.5)') i,j,k,l,eij,ekl,-eij*ekl
5878 C Calculate the multi-body contribution to energy.
5879 C Calculate multi-body contributions to the gradient.
5880 cd write (iout,'(2(2i3,3f10.5))')i,j,(gacont(m,jj,i),m=1,3),
5881 cd & k,l,(gacont(m,kk,k),m=1,3)
5883 gx(m) =ekl*gacont(m,jj,i)
5884 gx1(m)=eij*gacont(m,kk,k)
5885 gradxorr(m,i)=gradxorr(m,i)-gx(m)
5886 gradxorr(m,j)=gradxorr(m,j)+gx(m)
5887 gradxorr(m,k)=gradxorr(m,k)-gx1(m)
5888 gradxorr(m,l)=gradxorr(m,l)+gx1(m)
5892 gradcorr(ll,m)=gradcorr(ll,m)+gx(ll)
5897 gradcorr(ll,m)=gradcorr(ll,m)+gx1(ll)
5903 c------------------------------------------------------------------------------
5904 subroutine multibody_hb(ecorr,ecorr5,ecorr6,n_corr,n_corr1)
5905 C This subroutine calculates multi-body contributions to hydrogen-bonding
5906 implicit real*8 (a-h,o-z)
5907 include 'DIMENSIONS'
5908 include 'COMMON.IOUNITS'
5911 parameter (max_cont=maxconts)
5912 parameter (max_dim=26)
5913 integer source,CorrelType,CorrelID,CorrelType1,CorrelID1,Error
5914 double precision zapas(max_dim,maxconts,max_fg_procs),
5915 & zapas_recv(max_dim,maxconts,max_fg_procs)
5916 common /przechowalnia/ zapas
5917 integer status(MPI_STATUS_SIZE),req(maxconts*2),
5918 & status_array(MPI_STATUS_SIZE,maxconts*2)
5920 include 'COMMON.SETUP'
5921 include 'COMMON.FFIELD'
5922 include 'COMMON.DERIV'
5923 include 'COMMON.INTERACT'
5924 include 'COMMON.CONTACTS'
5925 include 'COMMON.CONTROL'
5926 include 'COMMON.LOCAL'
5927 double precision gx(3),gx1(3),time00
5930 C Set lprn=.true. for debugging
5935 if (nfgtasks.le.1) goto 30
5937 write (iout,'(a)') 'Contact function values before RECEIVE:'
5939 write (iout,'(2i3,50(1x,i2,f5.2))')
5940 & i,num_cont_hb(i),(jcont_hb(j,i),facont_hb(j,i),
5941 & j=1,num_cont_hb(i))
5945 do i=1,ntask_cont_from
5948 do i=1,ntask_cont_to
5951 c write (iout,*) "ntask_cont_from",ntask_cont_from," ntask_cont_to",
5953 C Make the list of contacts to send to send to other procesors
5954 c write (iout,*) "limits",max0(iturn4_end-1,iatel_s),iturn3_end
5956 do i=iturn3_start,iturn3_end
5957 c write (iout,*) "make contact list turn3",i," num_cont",
5959 call add_hb_contact(i,i+2,iturn3_sent_local(1,i))
5961 do i=iturn4_start,iturn4_end
5962 c write (iout,*) "make contact list turn4",i," num_cont",
5964 call add_hb_contact(i,i+3,iturn4_sent_local(1,i))
5968 c write (iout,*) "make contact list longrange",i,ii," num_cont",
5970 do j=1,num_cont_hb(i)
5973 iproc=iint_sent_local(k,jjc,ii)
5974 c write (iout,*) "i",i," j",j," k",k," jjc",jjc," iproc",iproc
5975 if (iproc.gt.0) then
5976 ncont_sent(iproc)=ncont_sent(iproc)+1
5977 nn=ncont_sent(iproc)
5979 zapas(2,nn,iproc)=jjc
5980 zapas(3,nn,iproc)=facont_hb(j,i)
5981 zapas(4,nn,iproc)=ees0p(j,i)
5982 zapas(5,nn,iproc)=ees0m(j,i)
5983 zapas(6,nn,iproc)=gacont_hbr(1,j,i)
5984 zapas(7,nn,iproc)=gacont_hbr(2,j,i)
5985 zapas(8,nn,iproc)=gacont_hbr(3,j,i)
5986 zapas(9,nn,iproc)=gacontm_hb1(1,j,i)
5987 zapas(10,nn,iproc)=gacontm_hb1(2,j,i)
5988 zapas(11,nn,iproc)=gacontm_hb1(3,j,i)
5989 zapas(12,nn,iproc)=gacontp_hb1(1,j,i)
5990 zapas(13,nn,iproc)=gacontp_hb1(2,j,i)
5991 zapas(14,nn,iproc)=gacontp_hb1(3,j,i)
5992 zapas(15,nn,iproc)=gacontm_hb2(1,j,i)
5993 zapas(16,nn,iproc)=gacontm_hb2(2,j,i)
5994 zapas(17,nn,iproc)=gacontm_hb2(3,j,i)
5995 zapas(18,nn,iproc)=gacontp_hb2(1,j,i)
5996 zapas(19,nn,iproc)=gacontp_hb2(2,j,i)
5997 zapas(20,nn,iproc)=gacontp_hb2(3,j,i)
5998 zapas(21,nn,iproc)=gacontm_hb3(1,j,i)
5999 zapas(22,nn,iproc)=gacontm_hb3(2,j,i)
6000 zapas(23,nn,iproc)=gacontm_hb3(3,j,i)
6001 zapas(24,nn,iproc)=gacontp_hb3(1,j,i)
6002 zapas(25,nn,iproc)=gacontp_hb3(2,j,i)
6003 zapas(26,nn,iproc)=gacontp_hb3(3,j,i)
6010 & "Numbers of contacts to be sent to other processors",
6011 & (ncont_sent(i),i=1,ntask_cont_to)
6012 write (iout,*) "Contacts sent"
6013 do ii=1,ntask_cont_to
6015 iproc=itask_cont_to(ii)
6016 write (iout,*) nn," contacts to processor",iproc,
6017 & " of CONT_TO_COMM group"
6019 write(iout,'(2f5.0,4f10.5)')(zapas(j,i,ii),j=1,5)
6027 CorrelID1=nfgtasks+fg_rank+1
6029 C Receive the numbers of needed contacts from other processors
6030 do ii=1,ntask_cont_from
6031 iproc=itask_cont_from(ii)
6033 call MPI_Irecv(ncont_recv(ii),1,MPI_INTEGER,iproc,CorrelType,
6034 & FG_COMM,req(ireq),IERR)
6036 c write (iout,*) "IRECV ended"
6038 C Send the number of contacts needed by other processors
6039 do ii=1,ntask_cont_to
6040 iproc=itask_cont_to(ii)
6042 call MPI_Isend(ncont_sent(ii),1,MPI_INTEGER,iproc,CorrelType,
6043 & FG_COMM,req(ireq),IERR)
6045 c write (iout,*) "ISEND ended"
6046 c write (iout,*) "number of requests (nn)",ireq
6049 & call MPI_Waitall(ireq,req,status_array,ierr)
6051 c & "Numbers of contacts to be received from other processors",
6052 c & (ncont_recv(i),i=1,ntask_cont_from)
6056 do ii=1,ntask_cont_from
6057 iproc=itask_cont_from(ii)
6059 c write (iout,*) "Receiving",nn," contacts from processor",iproc,
6060 c & " of CONT_TO_COMM group"
6064 call MPI_Irecv(zapas_recv(1,1,ii),nn*max_dim,
6065 & MPI_DOUBLE_PRECISION,iproc,CorrelType1,FG_COMM,req(ireq),IERR)
6066 c write (iout,*) "ireq,req",ireq,req(ireq)
6069 C Send the contacts to processors that need them
6070 do ii=1,ntask_cont_to
6071 iproc=itask_cont_to(ii)
6073 c write (iout,*) nn," contacts to processor",iproc,
6074 c & " of CONT_TO_COMM group"
6077 call MPI_Isend(zapas(1,1,ii),nn*max_dim,MPI_DOUBLE_PRECISION,
6078 & iproc,CorrelType1,FG_COMM,req(ireq),IERR)
6079 c write (iout,*) "ireq,req",ireq,req(ireq)
6081 c write(iout,'(2f5.0,4f10.5)')(zapas(j,i,ii),j=1,5)
6085 c write (iout,*) "number of requests (contacts)",ireq
6086 c write (iout,*) "req",(req(i),i=1,4)
6089 & call MPI_Waitall(ireq,req,status_array,ierr)
6090 do iii=1,ntask_cont_from
6091 iproc=itask_cont_from(iii)
6094 write (iout,*) "Received",nn," contacts from processor",iproc,
6095 & " of CONT_FROM_COMM group"
6098 write(iout,'(2f5.0,4f10.5)')(zapas_recv(j,i,iii),j=1,5)
6103 ii=zapas_recv(1,i,iii)
6104 c Flag the received contacts to prevent double-counting
6105 jj=-zapas_recv(2,i,iii)
6106 c write (iout,*) "iii",iii," i",i," ii",ii," jj",jj
6108 nnn=num_cont_hb(ii)+1
6111 facont_hb(nnn,ii)=zapas_recv(3,i,iii)
6112 ees0p(nnn,ii)=zapas_recv(4,i,iii)
6113 ees0m(nnn,ii)=zapas_recv(5,i,iii)
6114 gacont_hbr(1,nnn,ii)=zapas_recv(6,i,iii)
6115 gacont_hbr(2,nnn,ii)=zapas_recv(7,i,iii)
6116 gacont_hbr(3,nnn,ii)=zapas_recv(8,i,iii)
6117 gacontm_hb1(1,nnn,ii)=zapas_recv(9,i,iii)
6118 gacontm_hb1(2,nnn,ii)=zapas_recv(10,i,iii)
6119 gacontm_hb1(3,nnn,ii)=zapas_recv(11,i,iii)
6120 gacontp_hb1(1,nnn,ii)=zapas_recv(12,i,iii)
6121 gacontp_hb1(2,nnn,ii)=zapas_recv(13,i,iii)
6122 gacontp_hb1(3,nnn,ii)=zapas_recv(14,i,iii)
6123 gacontm_hb2(1,nnn,ii)=zapas_recv(15,i,iii)
6124 gacontm_hb2(2,nnn,ii)=zapas_recv(16,i,iii)
6125 gacontm_hb2(3,nnn,ii)=zapas_recv(17,i,iii)
6126 gacontp_hb2(1,nnn,ii)=zapas_recv(18,i,iii)
6127 gacontp_hb2(2,nnn,ii)=zapas_recv(19,i,iii)
6128 gacontp_hb2(3,nnn,ii)=zapas_recv(20,i,iii)
6129 gacontm_hb3(1,nnn,ii)=zapas_recv(21,i,iii)
6130 gacontm_hb3(2,nnn,ii)=zapas_recv(22,i,iii)
6131 gacontm_hb3(3,nnn,ii)=zapas_recv(23,i,iii)
6132 gacontp_hb3(1,nnn,ii)=zapas_recv(24,i,iii)
6133 gacontp_hb3(2,nnn,ii)=zapas_recv(25,i,iii)
6134 gacontp_hb3(3,nnn,ii)=zapas_recv(26,i,iii)
6139 write (iout,'(a)') 'Contact function values after receive:'
6141 write (iout,'(2i3,50(1x,i3,f5.2))')
6142 & i,num_cont_hb(i),(jcont_hb(j,i),facont_hb(j,i),
6143 & j=1,num_cont_hb(i))
6150 write (iout,'(a)') 'Contact function values:'
6152 write (iout,'(2i3,50(1x,i3,f5.2))')
6153 & i,num_cont_hb(i),(jcont_hb(j,i),facont_hb(j,i),
6154 & j=1,num_cont_hb(i))
6158 C Remove the loop below after debugging !!!
6165 C Calculate the local-electrostatic correlation terms
6166 do i=min0(iatel_s,iturn4_start),max0(iatel_e,iturn3_end)
6168 num_conti=num_cont_hb(i)
6169 num_conti1=num_cont_hb(i+1)
6176 c write (iout,*) 'i=',i,' j=',j,' i1=',i1,' j1=',j1,
6177 c & ' jj=',jj,' kk=',kk
6178 if ((j.gt.0 .and. j1.gt.0 .or. j.gt.0 .and. j1.lt.0
6179 & .or. j.lt.0 .and. j1.gt.0) .and.
6180 & (jp1.eq.jp+1 .or. jp1.eq.jp-1)) then
6181 C Contacts I-J and (I+1)-(J+1) or (I+1)-(J-1) occur simultaneously.
6182 C The system gains extra energy.
6183 ecorr=ecorr+ehbcorr(i,jp,i+1,jp1,jj,kk,0.72D0,0.32D0)
6184 if (energy_dec) write (iout,'(a6,2i5,0pf7.3)')
6185 & 'ecorrh',i,j,ehbcorr(i,j,i+1,j1,jj,kk,0.72D0,0.32D0)
6187 else if (j1.eq.j) then
6188 C Contacts I-J and I-(J+1) occur simultaneously.
6189 C The system loses extra energy.
6190 c ecorr=ecorr+ehbcorr(i,j,i+1,j,jj,kk,0.60D0,-0.40D0)
6195 c write (iout,*) 'i=',i,' j=',j,' i1=',i1,' j1=',j1,
6196 c & ' jj=',jj,' kk=',kk
6198 C Contacts I-J and (I+1)-J occur simultaneously.
6199 C The system loses extra energy.
6200 c ecorr=ecorr+ehbcorr(i,j,i,j+1,jj,kk,0.60D0,-0.40D0)
6207 c------------------------------------------------------------------------------
6208 subroutine add_hb_contact(ii,jj,itask)
6209 implicit real*8 (a-h,o-z)
6210 include "DIMENSIONS"
6211 include "COMMON.IOUNITS"
6214 parameter (max_cont=maxconts)
6215 parameter (max_dim=26)
6216 include "COMMON.CONTACTS"
6217 double precision zapas(max_dim,maxconts,max_fg_procs),
6218 & zapas_recv(max_dim,maxconts,max_fg_procs)
6219 common /przechowalnia/ zapas
6220 integer i,j,ii,jj,iproc,itask(4),nn
6221 c write (iout,*) "itask",itask
6224 if (iproc.gt.0) then
6225 do j=1,num_cont_hb(ii)
6227 c write (iout,*) "i",ii," j",jj," jjc",jjc
6229 ncont_sent(iproc)=ncont_sent(iproc)+1
6230 nn=ncont_sent(iproc)
6231 zapas(1,nn,iproc)=ii
6232 zapas(2,nn,iproc)=jjc
6233 zapas(3,nn,iproc)=facont_hb(j,ii)
6234 zapas(4,nn,iproc)=ees0p(j,ii)
6235 zapas(5,nn,iproc)=ees0m(j,ii)
6236 zapas(6,nn,iproc)=gacont_hbr(1,j,ii)
6237 zapas(7,nn,iproc)=gacont_hbr(2,j,ii)
6238 zapas(8,nn,iproc)=gacont_hbr(3,j,ii)
6239 zapas(9,nn,iproc)=gacontm_hb1(1,j,ii)
6240 zapas(10,nn,iproc)=gacontm_hb1(2,j,ii)
6241 zapas(11,nn,iproc)=gacontm_hb1(3,j,ii)
6242 zapas(12,nn,iproc)=gacontp_hb1(1,j,ii)
6243 zapas(13,nn,iproc)=gacontp_hb1(2,j,ii)
6244 zapas(14,nn,iproc)=gacontp_hb1(3,j,ii)
6245 zapas(15,nn,iproc)=gacontm_hb2(1,j,ii)
6246 zapas(16,nn,iproc)=gacontm_hb2(2,j,ii)
6247 zapas(17,nn,iproc)=gacontm_hb2(3,j,ii)
6248 zapas(18,nn,iproc)=gacontp_hb2(1,j,ii)
6249 zapas(19,nn,iproc)=gacontp_hb2(2,j,ii)
6250 zapas(20,nn,iproc)=gacontp_hb2(3,j,ii)
6251 zapas(21,nn,iproc)=gacontm_hb3(1,j,ii)
6252 zapas(22,nn,iproc)=gacontm_hb3(2,j,ii)
6253 zapas(23,nn,iproc)=gacontm_hb3(3,j,ii)
6254 zapas(24,nn,iproc)=gacontp_hb3(1,j,ii)
6255 zapas(25,nn,iproc)=gacontp_hb3(2,j,ii)
6256 zapas(26,nn,iproc)=gacontp_hb3(3,j,ii)
6264 c------------------------------------------------------------------------------
6265 subroutine multibody_eello(ecorr,ecorr5,ecorr6,eturn6,n_corr,
6267 C This subroutine calculates multi-body contributions to hydrogen-bonding
6268 implicit real*8 (a-h,o-z)
6269 include 'DIMENSIONS'
6270 include 'COMMON.IOUNITS'
6273 parameter (max_cont=maxconts)
6274 parameter (max_dim=70)
6275 integer source,CorrelType,CorrelID,CorrelType1,CorrelID1,Error
6276 double precision zapas(max_dim,maxconts,max_fg_procs),
6277 & zapas_recv(max_dim,maxconts,max_fg_procs)
6278 common /przechowalnia/ zapas
6279 integer status(MPI_STATUS_SIZE),req(maxconts*2),
6280 & status_array(MPI_STATUS_SIZE,maxconts*2)
6282 include 'COMMON.SETUP'
6283 include 'COMMON.FFIELD'
6284 include 'COMMON.DERIV'
6285 include 'COMMON.LOCAL'
6286 include 'COMMON.INTERACT'
6287 include 'COMMON.CONTACTS'
6288 include 'COMMON.CHAIN'
6289 include 'COMMON.CONTROL'
6290 double precision gx(3),gx1(3)
6291 integer num_cont_hb_old(maxres)
6293 double precision eello4,eello5,eelo6,eello_turn6
6294 external eello4,eello5,eello6,eello_turn6
6295 C Set lprn=.true. for debugging
6300 num_cont_hb_old(i)=num_cont_hb(i)
6304 if (nfgtasks.le.1) goto 30
6306 write (iout,'(a)') 'Contact function values before RECEIVE:'
6308 write (iout,'(2i3,50(1x,i2,f5.2))')
6309 & i,num_cont_hb(i),(jcont_hb(j,i),facont_hb(j,i),
6310 & j=1,num_cont_hb(i))
6314 do i=1,ntask_cont_from
6317 do i=1,ntask_cont_to
6320 c write (iout,*) "ntask_cont_from",ntask_cont_from," ntask_cont_to",
6322 C Make the list of contacts to send to send to other procesors
6323 do i=iturn3_start,iturn3_end
6324 c write (iout,*) "make contact list turn3",i," num_cont",
6326 call add_hb_contact_eello(i,i+2,iturn3_sent_local(1,i))
6328 do i=iturn4_start,iturn4_end
6329 c write (iout,*) "make contact list turn4",i," num_cont",
6331 call add_hb_contact_eello(i,i+3,iturn4_sent_local(1,i))
6335 c write (iout,*) "make contact list longrange",i,ii," num_cont",
6337 do j=1,num_cont_hb(i)
6340 iproc=iint_sent_local(k,jjc,ii)
6341 c write (iout,*) "i",i," j",j," k",k," jjc",jjc," iproc",iproc
6342 if (iproc.ne.0) then
6343 ncont_sent(iproc)=ncont_sent(iproc)+1
6344 nn=ncont_sent(iproc)
6346 zapas(2,nn,iproc)=jjc
6347 zapas(3,nn,iproc)=d_cont(j,i)
6351 zapas(ind,nn,iproc)=grij_hb_cont(kk,j,i)
6356 zapas(ind,nn,iproc)=a_chuj(ll,kk,j,i)
6364 zapas(ind,nn,iproc)=a_chuj_der(mm,ll,kk,jj,j,i)
6375 & "Numbers of contacts to be sent to other processors",
6376 & (ncont_sent(i),i=1,ntask_cont_to)
6377 write (iout,*) "Contacts sent"
6378 do ii=1,ntask_cont_to
6380 iproc=itask_cont_to(ii)
6381 write (iout,*) nn," contacts to processor",iproc,
6382 & " of CONT_TO_COMM group"
6384 write(iout,'(2f5.0,10f10.5)')(zapas(j,i,ii),j=1,10)
6392 CorrelID1=nfgtasks+fg_rank+1
6394 C Receive the numbers of needed contacts from other processors
6395 do ii=1,ntask_cont_from
6396 iproc=itask_cont_from(ii)
6398 call MPI_Irecv(ncont_recv(ii),1,MPI_INTEGER,iproc,CorrelType,
6399 & FG_COMM,req(ireq),IERR)
6401 c write (iout,*) "IRECV ended"
6403 C Send the number of contacts needed by other processors
6404 do ii=1,ntask_cont_to
6405 iproc=itask_cont_to(ii)
6407 call MPI_Isend(ncont_sent(ii),1,MPI_INTEGER,iproc,CorrelType,
6408 & FG_COMM,req(ireq),IERR)
6410 c write (iout,*) "ISEND ended"
6411 c write (iout,*) "number of requests (nn)",ireq
6414 & call MPI_Waitall(ireq,req,status_array,ierr)
6416 c & "Numbers of contacts to be received from other processors",
6417 c & (ncont_recv(i),i=1,ntask_cont_from)
6421 do ii=1,ntask_cont_from
6422 iproc=itask_cont_from(ii)
6424 c write (iout,*) "Receiving",nn," contacts from processor",iproc,
6425 c & " of CONT_TO_COMM group"
6429 call MPI_Irecv(zapas_recv(1,1,ii),nn*max_dim,
6430 & MPI_DOUBLE_PRECISION,iproc,CorrelType1,FG_COMM,req(ireq),IERR)
6431 c write (iout,*) "ireq,req",ireq,req(ireq)
6434 C Send the contacts to processors that need them
6435 do ii=1,ntask_cont_to
6436 iproc=itask_cont_to(ii)
6438 c write (iout,*) nn," contacts to processor",iproc,
6439 c & " of CONT_TO_COMM group"
6442 call MPI_Isend(zapas(1,1,ii),nn*max_dim,MPI_DOUBLE_PRECISION,
6443 & iproc,CorrelType1,FG_COMM,req(ireq),IERR)
6444 c write (iout,*) "ireq,req",ireq,req(ireq)
6446 c write(iout,'(2f5.0,4f10.5)')(zapas(j,i,ii),j=1,5)
6450 c write (iout,*) "number of requests (contacts)",ireq
6451 c write (iout,*) "req",(req(i),i=1,4)
6454 & call MPI_Waitall(ireq,req,status_array,ierr)
6455 do iii=1,ntask_cont_from
6456 iproc=itask_cont_from(iii)
6459 write (iout,*) "Received",nn," contacts from processor",iproc,
6460 & " of CONT_FROM_COMM group"
6463 write(iout,'(2f5.0,10f10.5)')(zapas_recv(j,i,iii),j=1,10)
6468 ii=zapas_recv(1,i,iii)
6469 c Flag the received contacts to prevent double-counting
6470 jj=-zapas_recv(2,i,iii)
6471 c write (iout,*) "iii",iii," i",i," ii",ii," jj",jj
6473 nnn=num_cont_hb(ii)+1
6476 d_cont(nnn,ii)=zapas_recv(3,i,iii)
6480 grij_hb_cont(kk,nnn,ii)=zapas_recv(ind,i,iii)
6485 a_chuj(ll,kk,nnn,ii)=zapas_recv(ind,i,iii)
6493 a_chuj_der(mm,ll,kk,jj,nnn,ii)=zapas_recv(ind,i,iii)
6502 write (iout,'(a)') 'Contact function values after receive:'
6504 write (iout,'(2i3,50(1x,i3,5f6.3))')
6505 & i,num_cont_hb(i),(jcont_hb(j,i),d_cont(j,i),
6506 & ((a_chuj(ll,kk,j,i),ll=1,2),kk=1,2),j=1,num_cont_hb(i))
6513 write (iout,'(a)') 'Contact function values:'
6515 write (iout,'(2i3,50(1x,i2,5f6.3))')
6516 & i,num_cont_hb(i),(jcont_hb(j,i),d_cont(j,i),
6517 & ((a_chuj(ll,kk,j,i),ll=1,2),kk=1,2),j=1,num_cont_hb(i))
6523 C Remove the loop below after debugging !!!
6530 C Calculate the dipole-dipole interaction energies
6531 if (wcorr6.gt.0.0d0 .or. wturn6.gt.0.0d0) then
6532 do i=iatel_s,iatel_e+1
6533 num_conti=num_cont_hb(i)
6542 C Calculate the local-electrostatic correlation terms
6543 c write (iout,*) "gradcorr5 in eello5 before loop"
6545 c write (iout,'(i5,3f10.5)')
6546 c & iii,(gradcorr5(jjj,iii),jjj=1,3)
6548 do i=min0(iatel_s,iturn4_start),max0(iatel_e+1,iturn3_end+1)
6549 c write (iout,*) "corr loop i",i
6551 num_conti=num_cont_hb(i)
6552 num_conti1=num_cont_hb(i+1)
6559 c write (iout,*) 'i=',i,' j=',j,' i1=',i1,' j1=',j1,
6560 c & ' jj=',jj,' kk=',kk
6561 c if (j1.eq.j+1 .or. j1.eq.j-1) then
6562 if ((j.gt.0 .and. j1.gt.0 .or. j.gt.0 .and. j1.lt.0
6563 & .or. j.lt.0 .and. j1.gt.0) .and.
6564 & (jp1.eq.jp+1 .or. jp1.eq.jp-1)) then
6565 C Contacts I-J and (I+1)-(J+1) or (I+1)-(J-1) occur simultaneously.
6566 C The system gains extra energy.
6568 sqd1=dsqrt(d_cont(jj,i))
6569 sqd2=dsqrt(d_cont(kk,i1))
6570 sred_geom = sqd1*sqd2
6571 IF (sred_geom.lt.cutoff_corr) THEN
6572 call gcont(sred_geom,r0_corr,1.0D0,delt_corr,
6574 cd write (iout,*) 'i=',i,' j=',jp,' i1=',i1,' j1=',jp1,
6575 cd & ' jj=',jj,' kk=',kk
6576 fac_prim1=0.5d0*sqd2/sqd1*fprimcont
6577 fac_prim2=0.5d0*sqd1/sqd2*fprimcont
6579 g_contij(l,1)=fac_prim1*grij_hb_cont(l,jj,i)
6580 g_contij(l,2)=fac_prim2*grij_hb_cont(l,kk,i1)
6583 cd write (iout,*) 'sred_geom=',sred_geom,
6584 cd & ' ekont=',ekont,' fprim=',fprimcont,
6585 cd & ' fac_prim1',fac_prim1,' fac_prim2',fac_prim2
6586 cd write (iout,*) "g_contij",g_contij
6587 cd write (iout,*) "grij_hb_cont i",grij_hb_cont(:,jj,i)
6588 cd write (iout,*) "grij_hb_cont i1",grij_hb_cont(:,jj,i1)
6589 call calc_eello(i,jp,i+1,jp1,jj,kk)
6590 if (wcorr4.gt.0.0d0)
6591 & ecorr=ecorr+eello4(i,jp,i+1,jp1,jj,kk)
6592 if (energy_dec.and.wcorr4.gt.0.0d0)
6593 1 write (iout,'(a6,4i5,0pf7.3)')
6594 2 'ecorr4',i,j,i+1,j1,eello4(i,jp,i+1,jp1,jj,kk)
6595 c write (iout,*) "gradcorr5 before eello5"
6597 c write (iout,'(i5,3f10.5)')
6598 c & iii,(gradcorr5(jjj,iii),jjj=1,3)
6600 if (wcorr5.gt.0.0d0)
6601 & ecorr5=ecorr5+eello5(i,jp,i+1,jp1,jj,kk)
6602 c write (iout,*) "gradcorr5 after eello5"
6604 c write (iout,'(i5,3f10.5)')
6605 c & iii,(gradcorr5(jjj,iii),jjj=1,3)
6607 if (energy_dec.and.wcorr5.gt.0.0d0)
6608 1 write (iout,'(a6,4i5,0pf7.3)')
6609 2 'ecorr5',i,j,i+1,j1,eello5(i,jp,i+1,jp1,jj,kk)
6610 cd write(2,*)'wcorr6',wcorr6,' wturn6',wturn6
6611 cd write(2,*)'ijkl',i,jp,i+1,jp1
6612 if (wcorr6.gt.0.0d0 .and. (jp.ne.i+4 .or. jp1.ne.i+3
6613 & .or. wturn6.eq.0.0d0))then
6614 cd write (iout,*) '******ecorr6: i,j,i+1,j1',i,j,i+1,j1
6615 ecorr6=ecorr6+eello6(i,jp,i+1,jp1,jj,kk)
6616 if (energy_dec) write (iout,'(a6,4i5,0pf7.3)')
6617 1 'ecorr6',i,j,i+1,j1,eello6(i,jp,i+1,jp1,jj,kk)
6618 cd write (iout,*) 'ecorr',ecorr,' ecorr5=',ecorr5,
6619 cd & 'ecorr6=',ecorr6
6620 cd write (iout,'(4e15.5)') sred_geom,
6621 cd & dabs(eello4(i,jp,i+1,jp1,jj,kk)),
6622 cd & dabs(eello5(i,jp,i+1,jp1,jj,kk)),
6623 cd & dabs(eello6(i,jp,i+1,jp1,jj,kk))
6624 else if (wturn6.gt.0.0d0
6625 & .and. (jp.eq.i+4 .and. jp1.eq.i+3)) then
6626 cd write (iout,*) '******eturn6: i,j,i+1,j1',i,jip,i+1,jp1
6627 eturn6=eturn6+eello_turn6(i,jj,kk)
6628 if (energy_dec) write (iout,'(a6,4i5,0pf7.3)')
6629 1 'eturn6',i,j,i+1,j1,eello_turn6(i,jj,kk)
6630 cd write (2,*) 'multibody_eello:eturn6',eturn6
6639 num_cont_hb(i)=num_cont_hb_old(i)
6641 c write (iout,*) "gradcorr5 in eello5"
6643 c write (iout,'(i5,3f10.5)')
6644 c & iii,(gradcorr5(jjj,iii),jjj=1,3)
6648 c------------------------------------------------------------------------------
6649 subroutine add_hb_contact_eello(ii,jj,itask)
6650 implicit real*8 (a-h,o-z)
6651 include "DIMENSIONS"
6652 include "COMMON.IOUNITS"
6655 parameter (max_cont=maxconts)
6656 parameter (max_dim=70)
6657 include "COMMON.CONTACTS"
6658 double precision zapas(max_dim,maxconts,max_fg_procs),
6659 & zapas_recv(max_dim,maxconts,max_fg_procs)
6660 common /przechowalnia/ zapas
6661 integer i,j,ii,jj,iproc,itask(4),nn
6662 c write (iout,*) "itask",itask
6665 if (iproc.gt.0) then
6666 do j=1,num_cont_hb(ii)
6668 c write (iout,*) "send turns i",ii," j",jj," jjc",jjc
6670 ncont_sent(iproc)=ncont_sent(iproc)+1
6671 nn=ncont_sent(iproc)
6672 zapas(1,nn,iproc)=ii
6673 zapas(2,nn,iproc)=jjc
6674 zapas(3,nn,iproc)=d_cont(j,ii)
6678 zapas(ind,nn,iproc)=grij_hb_cont(kk,j,ii)
6683 zapas(ind,nn,iproc)=a_chuj(ll,kk,j,ii)
6691 zapas(ind,nn,iproc)=a_chuj_der(mm,ll,kk,jj,j,ii)
6703 c------------------------------------------------------------------------------
6704 double precision function ehbcorr(i,j,k,l,jj,kk,coeffp,coeffm)
6705 implicit real*8 (a-h,o-z)
6706 include 'DIMENSIONS'
6707 include 'COMMON.IOUNITS'
6708 include 'COMMON.DERIV'
6709 include 'COMMON.INTERACT'
6710 include 'COMMON.CONTACTS'
6711 double precision gx(3),gx1(3)
6721 ees=-(coeffp*ees0pij*ees0pkl+coeffm*ees0mij*ees0mkl)
6722 cd ees=-(coeffp*ees0pkl+coeffm*ees0mkl)
6723 C Following 4 lines for diagnostics.
6728 c write (iout,'(2(a,2i3,a,f10.5,a,2f10.5),a,f10.5,a,$)')
6729 c & 'Contacts ',i,j,
6730 c & ' eij',eij,' eesij',ees0pij,ees0mij,' and ',k,l
6731 c & ,' fcont ',ekl,' eeskl',ees0pkl,ees0mkl,' energy=',ekont*ees,
6733 C Calculate the multi-body contribution to energy.
6734 c ecorr=ecorr+ekont*ees
6735 C Calculate multi-body contributions to the gradient.
6736 coeffpees0pij=coeffp*ees0pij
6737 coeffmees0mij=coeffm*ees0mij
6738 coeffpees0pkl=coeffp*ees0pkl
6739 coeffmees0mkl=coeffm*ees0mkl
6741 cgrad ghalfi=ees*ekl*gacont_hbr(ll,jj,i)
6742 gradcorr(ll,i)=gradcorr(ll,i)!+0.5d0*ghalfi
6743 & -ekont*(coeffpees0pkl*gacontp_hb1(ll,jj,i)+
6744 & coeffmees0mkl*gacontm_hb1(ll,jj,i))
6745 gradcorr(ll,j)=gradcorr(ll,j)!+0.5d0*ghalfi
6746 & -ekont*(coeffpees0pkl*gacontp_hb2(ll,jj,i)+
6747 & coeffmees0mkl*gacontm_hb2(ll,jj,i))
6748 cgrad ghalfk=ees*eij*gacont_hbr(ll,kk,k)
6749 gradcorr(ll,k)=gradcorr(ll,k)!+0.5d0*ghalfk
6750 & -ekont*(coeffpees0pij*gacontp_hb1(ll,kk,k)+
6751 & coeffmees0mij*gacontm_hb1(ll,kk,k))
6752 gradcorr(ll,l)=gradcorr(ll,l)!+0.5d0*ghalfk
6753 & -ekont*(coeffpees0pij*gacontp_hb2(ll,kk,k)+
6754 & coeffmees0mij*gacontm_hb2(ll,kk,k))
6755 gradlongij=ees*ekl*gacont_hbr(ll,jj,i)-
6756 & ekont*(coeffpees0pkl*gacontp_hb3(ll,jj,i)+
6757 & coeffmees0mkl*gacontm_hb3(ll,jj,i))
6758 gradcorr_long(ll,j)=gradcorr_long(ll,j)+gradlongij
6759 gradcorr_long(ll,i)=gradcorr_long(ll,i)-gradlongij
6760 gradlongkl=ees*eij*gacont_hbr(ll,kk,k)-
6761 & ekont*(coeffpees0pij*gacontp_hb3(ll,kk,k)+
6762 & coeffmees0mij*gacontm_hb3(ll,kk,k))
6763 gradcorr_long(ll,l)=gradcorr_long(ll,l)+gradlongkl
6764 gradcorr_long(ll,k)=gradcorr_long(ll,k)-gradlongkl
6765 c write (iout,'(2f10.5,2x,$)') gradlongij,gradlongkl
6770 cgrad gradcorr(ll,m)=gradcorr(ll,m)+
6771 cgrad & ees*ekl*gacont_hbr(ll,jj,i)-
6772 cgrad & ekont*(coeffp*ees0pkl*gacontp_hb3(ll,jj,i)+
6773 cgrad & coeffm*ees0mkl*gacontm_hb3(ll,jj,i))
6778 cgrad gradcorr(ll,m)=gradcorr(ll,m)+
6779 cgrad & ees*eij*gacont_hbr(ll,kk,k)-
6780 cgrad & ekont*(coeffp*ees0pij*gacontp_hb3(ll,kk,k)+
6781 cgrad & coeffm*ees0mij*gacontm_hb3(ll,kk,k))
6784 c write (iout,*) "ehbcorr",ekont*ees
6789 C---------------------------------------------------------------------------
6790 subroutine dipole(i,j,jj)
6791 implicit real*8 (a-h,o-z)
6792 include 'DIMENSIONS'
6793 include 'COMMON.IOUNITS'
6794 include 'COMMON.CHAIN'
6795 include 'COMMON.FFIELD'
6796 include 'COMMON.DERIV'
6797 include 'COMMON.INTERACT'
6798 include 'COMMON.CONTACTS'
6799 include 'COMMON.TORSION'
6800 include 'COMMON.VAR'
6801 include 'COMMON.GEO'
6802 dimension dipi(2,2),dipj(2,2),dipderi(2),dipderj(2),auxvec(2),
6804 iti1 = itortyp(itype(i+1))
6805 if (j.lt.nres-1) then
6806 itj1 = itortyp(itype(j+1))
6811 dipi(iii,1)=Ub2(iii,i)
6812 dipderi(iii)=Ub2der(iii,i)
6813 dipi(iii,2)=b1(iii,iti1)
6814 dipj(iii,1)=Ub2(iii,j)
6815 dipderj(iii)=Ub2der(iii,j)
6816 dipj(iii,2)=b1(iii,itj1)
6820 call matvec2(a_chuj(1,1,jj,i),dipj(1,iii),auxvec(1))
6823 dip(kkk,jj,i)=scalar2(dipi(1,jjj),auxvec(1))
6830 call matvec2(a_chuj_der(1,1,lll,kkk,jj,i),dipj(1,iii),
6834 dipderx(lll,kkk,mmm,jj,i)=scalar2(dipi(1,jjj),auxvec(1))
6839 call transpose2(a_chuj(1,1,jj,i),auxmat(1,1))
6840 call matvec2(auxmat(1,1),dipderi(1),auxvec(1))
6842 dipderg(iii,jj,i)=scalar2(auxvec(1),dipj(1,iii))
6844 call matvec2(a_chuj(1,1,jj,i),dipderj(1),auxvec(1))
6846 dipderg(iii+2,jj,i)=scalar2(auxvec(1),dipi(1,iii))
6851 C---------------------------------------------------------------------------
6852 subroutine calc_eello(i,j,k,l,jj,kk)
6854 C This subroutine computes matrices and vectors needed to calculate
6855 C the fourth-, fifth-, and sixth-order local-electrostatic terms.
6857 implicit real*8 (a-h,o-z)
6858 include 'DIMENSIONS'
6859 include 'COMMON.IOUNITS'
6860 include 'COMMON.CHAIN'
6861 include 'COMMON.DERIV'
6862 include 'COMMON.INTERACT'
6863 include 'COMMON.CONTACTS'
6864 include 'COMMON.TORSION'
6865 include 'COMMON.VAR'
6866 include 'COMMON.GEO'
6867 include 'COMMON.FFIELD'
6868 double precision aa1(2,2),aa2(2,2),aa1t(2,2),aa2t(2,2),
6869 & aa1tder(2,2,3,5),aa2tder(2,2,3,5),auxmat(2,2)
6872 cd write (iout,*) 'calc_eello: i=',i,' j=',j,' k=',k,' l=',l,
6873 cd & ' jj=',jj,' kk=',kk
6874 cd if (i.ne.2 .or. j.ne.4 .or. k.ne.3 .or. l.ne.5) return
6875 cd write (iout,*) "a_chujij",((a_chuj(iii,jjj,jj,i),iii=1,2),jjj=1,2)
6876 cd write (iout,*) "a_chujkl",((a_chuj(iii,jjj,kk,k),iii=1,2),jjj=1,2)
6879 aa1(iii,jjj)=a_chuj(iii,jjj,jj,i)
6880 aa2(iii,jjj)=a_chuj(iii,jjj,kk,k)
6883 call transpose2(aa1(1,1),aa1t(1,1))
6884 call transpose2(aa2(1,1),aa2t(1,1))
6887 call transpose2(a_chuj_der(1,1,lll,kkk,jj,i),
6888 & aa1tder(1,1,lll,kkk))
6889 call transpose2(a_chuj_der(1,1,lll,kkk,kk,k),
6890 & aa2tder(1,1,lll,kkk))
6894 C parallel orientation of the two CA-CA-CA frames.
6896 iti=itortyp(itype(i))
6900 itk1=itortyp(itype(k+1))
6901 itj=itortyp(itype(j))
6902 if (l.lt.nres-1) then
6903 itl1=itortyp(itype(l+1))
6907 C A1 kernel(j+1) A2T
6909 cd write (iout,'(3f10.5,5x,3f10.5)')
6910 cd & (EUg(iii,jjj,k),jjj=1,2),(EUg(iii,jjj,l),jjj=1,2)
6912 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
6913 & aa2tder(1,1,1,1),1,.false.,EUg(1,1,l),EUgder(1,1,l),
6914 & AEA(1,1,1),AEAderg(1,1,1),AEAderx(1,1,1,1,1,1))
6915 C Following matrices are needed only for 6-th order cumulants
6916 IF (wcorr6.gt.0.0d0) THEN
6917 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
6918 & aa2tder(1,1,1,1),1,.false.,EUgC(1,1,l),EUgCder(1,1,l),
6919 & AECA(1,1,1),AECAderg(1,1,1),AECAderx(1,1,1,1,1,1))
6920 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
6921 & aa2tder(1,1,1,1),2,.false.,Ug2DtEUg(1,1,l),
6922 & Ug2DtEUgder(1,1,1,l),ADtEA(1,1,1),ADtEAderg(1,1,1,1),
6923 & ADtEAderx(1,1,1,1,1,1))
6925 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
6926 & aa2tder(1,1,1,1),2,.false.,DtUg2EUg(1,1,l),
6927 & DtUg2EUgder(1,1,1,l),ADtEA1(1,1,1),ADtEA1derg(1,1,1,1),
6928 & ADtEA1derx(1,1,1,1,1,1))
6930 C End 6-th order cumulants
6933 cd write (2,*) 'In calc_eello6'
6935 cd write (2,*) 'iii=',iii
6937 cd write (2,*) 'kkk=',kkk
6939 cd write (2,'(3(2f10.5),5x)')
6940 cd & ((ADtEA1derx(jjj,mmm,lll,kkk,iii,1),mmm=1,2),lll=1,3)
6945 call transpose2(EUgder(1,1,k),auxmat(1,1))
6946 call matmat2(auxmat(1,1),AEA(1,1,1),EAEAderg(1,1,1,1))
6947 call transpose2(EUg(1,1,k),auxmat(1,1))
6948 call matmat2(auxmat(1,1),AEA(1,1,1),EAEA(1,1,1))
6949 call matmat2(auxmat(1,1),AEAderg(1,1,1),EAEAderg(1,1,2,1))
6953 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,1),
6954 & EAEAderx(1,1,lll,kkk,iii,1))
6958 C A1T kernel(i+1) A2
6959 call kernel(aa1t(1,1),aa2(1,1),aa1tder(1,1,1,1),
6960 & a_chuj_der(1,1,1,1,kk,k),1,.false.,EUg(1,1,k),EUgder(1,1,k),
6961 & AEA(1,1,2),AEAderg(1,1,2),AEAderx(1,1,1,1,1,2))
6962 C Following matrices are needed only for 6-th order cumulants
6963 IF (wcorr6.gt.0.0d0) THEN
6964 call kernel(aa1t(1,1),aa2(1,1),aa1tder(1,1,1,1),
6965 & a_chuj_der(1,1,1,1,kk,k),1,.false.,EUgC(1,1,k),EUgCder(1,1,k),
6966 & AECA(1,1,2),AECAderg(1,1,2),AECAderx(1,1,1,1,1,2))
6967 call kernel(aa1t(1,1),aa2(1,1),aa1tder(1,1,1,1),
6968 & a_chuj_der(1,1,1,1,kk,k),2,.false.,Ug2DtEUg(1,1,k),
6969 & Ug2DtEUgder(1,1,1,k),ADtEA(1,1,2),ADtEAderg(1,1,1,2),
6970 & ADtEAderx(1,1,1,1,1,2))
6971 call kernel(aa1t(1,1),aa2(1,1),aa1tder(1,1,1,1),
6972 & a_chuj_der(1,1,1,1,kk,k),2,.false.,DtUg2EUg(1,1,k),
6973 & DtUg2EUgder(1,1,1,k),ADtEA1(1,1,2),ADtEA1derg(1,1,1,2),
6974 & ADtEA1derx(1,1,1,1,1,2))
6976 C End 6-th order cumulants
6977 call transpose2(EUgder(1,1,l),auxmat(1,1))
6978 call matmat2(auxmat(1,1),AEA(1,1,2),EAEAderg(1,1,1,2))
6979 call transpose2(EUg(1,1,l),auxmat(1,1))
6980 call matmat2(auxmat(1,1),AEA(1,1,2),EAEA(1,1,2))
6981 call matmat2(auxmat(1,1),AEAderg(1,1,2),EAEAderg(1,1,2,2))
6985 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,2),
6986 & EAEAderx(1,1,lll,kkk,iii,2))
6991 C Calculate the vectors and their derivatives in virtual-bond dihedral angles.
6992 C They are needed only when the fifth- or the sixth-order cumulants are
6994 IF (wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0) THEN
6995 call transpose2(AEA(1,1,1),auxmat(1,1))
6996 call matvec2(auxmat(1,1),b1(1,iti),AEAb1(1,1,1))
6997 call matvec2(auxmat(1,1),Ub2(1,i),AEAb2(1,1,1))
6998 call matvec2(auxmat(1,1),Ub2der(1,i),AEAb2derg(1,2,1,1))
6999 call transpose2(AEAderg(1,1,1),auxmat(1,1))
7000 call matvec2(auxmat(1,1),b1(1,iti),AEAb1derg(1,1,1))
7001 call matvec2(auxmat(1,1),Ub2(1,i),AEAb2derg(1,1,1,1))
7002 call matvec2(AEA(1,1,1),b1(1,itk1),AEAb1(1,2,1))
7003 call matvec2(AEAderg(1,1,1),b1(1,itk1),AEAb1derg(1,2,1))
7004 call matvec2(AEA(1,1,1),Ub2(1,k+1),AEAb2(1,2,1))
7005 call matvec2(AEAderg(1,1,1),Ub2(1,k+1),AEAb2derg(1,1,2,1))
7006 call matvec2(AEA(1,1,1),Ub2der(1,k+1),AEAb2derg(1,2,2,1))
7007 call transpose2(AEA(1,1,2),auxmat(1,1))
7008 call matvec2(auxmat(1,1),b1(1,itj),AEAb1(1,1,2))
7009 call matvec2(auxmat(1,1),Ub2(1,j),AEAb2(1,1,2))
7010 call matvec2(auxmat(1,1),Ub2der(1,j),AEAb2derg(1,2,1,2))
7011 call transpose2(AEAderg(1,1,2),auxmat(1,1))
7012 call matvec2(auxmat(1,1),b1(1,itj),AEAb1derg(1,1,2))
7013 call matvec2(auxmat(1,1),Ub2(1,j),AEAb2derg(1,1,1,2))
7014 call matvec2(AEA(1,1,2),b1(1,itl1),AEAb1(1,2,2))
7015 call matvec2(AEAderg(1,1,2),b1(1,itl1),AEAb1derg(1,2,2))
7016 call matvec2(AEA(1,1,2),Ub2(1,l+1),AEAb2(1,2,2))
7017 call matvec2(AEAderg(1,1,2),Ub2(1,l+1),AEAb2derg(1,1,2,2))
7018 call matvec2(AEA(1,1,2),Ub2der(1,l+1),AEAb2derg(1,2,2,2))
7019 C Calculate the Cartesian derivatives of the vectors.
7023 call transpose2(AEAderx(1,1,lll,kkk,iii,1),auxmat(1,1))
7024 call matvec2(auxmat(1,1),b1(1,iti),
7025 & AEAb1derx(1,lll,kkk,iii,1,1))
7026 call matvec2(auxmat(1,1),Ub2(1,i),
7027 & AEAb2derx(1,lll,kkk,iii,1,1))
7028 call matvec2(AEAderx(1,1,lll,kkk,iii,1),b1(1,itk1),
7029 & AEAb1derx(1,lll,kkk,iii,2,1))
7030 call matvec2(AEAderx(1,1,lll,kkk,iii,1),Ub2(1,k+1),
7031 & AEAb2derx(1,lll,kkk,iii,2,1))
7032 call transpose2(AEAderx(1,1,lll,kkk,iii,2),auxmat(1,1))
7033 call matvec2(auxmat(1,1),b1(1,itj),
7034 & AEAb1derx(1,lll,kkk,iii,1,2))
7035 call matvec2(auxmat(1,1),Ub2(1,j),
7036 & AEAb2derx(1,lll,kkk,iii,1,2))
7037 call matvec2(AEAderx(1,1,lll,kkk,iii,2),b1(1,itl1),
7038 & AEAb1derx(1,lll,kkk,iii,2,2))
7039 call matvec2(AEAderx(1,1,lll,kkk,iii,2),Ub2(1,l+1),
7040 & AEAb2derx(1,lll,kkk,iii,2,2))
7047 C Antiparallel orientation of the two CA-CA-CA frames.
7049 iti=itortyp(itype(i))
7053 itk1=itortyp(itype(k+1))
7054 itl=itortyp(itype(l))
7055 itj=itortyp(itype(j))
7056 if (j.lt.nres-1) then
7057 itj1=itortyp(itype(j+1))
7061 C A2 kernel(j-1)T A1T
7062 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
7063 & aa2tder(1,1,1,1),1,.true.,EUg(1,1,j),EUgder(1,1,j),
7064 & AEA(1,1,1),AEAderg(1,1,1),AEAderx(1,1,1,1,1,1))
7065 C Following matrices are needed only for 6-th order cumulants
7066 IF (wcorr6.gt.0.0d0 .or. (wturn6.gt.0.0d0 .and.
7067 & j.eq.i+4 .and. l.eq.i+3)) THEN
7068 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
7069 & aa2tder(1,1,1,1),1,.true.,EUgC(1,1,j),EUgCder(1,1,j),
7070 & AECA(1,1,1),AECAderg(1,1,1),AECAderx(1,1,1,1,1,1))
7071 call kernel(aa2(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
7072 & aa2tder(1,1,1,1),2,.true.,Ug2DtEUg(1,1,j),
7073 & Ug2DtEUgder(1,1,1,j),ADtEA(1,1,1),ADtEAderg(1,1,1,1),
7074 & ADtEAderx(1,1,1,1,1,1))
7075 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
7076 & aa2tder(1,1,1,1),2,.true.,DtUg2EUg(1,1,j),
7077 & DtUg2EUgder(1,1,1,j),ADtEA1(1,1,1),ADtEA1derg(1,1,1,1),
7078 & ADtEA1derx(1,1,1,1,1,1))
7080 C End 6-th order cumulants
7081 call transpose2(EUgder(1,1,k),auxmat(1,1))
7082 call matmat2(auxmat(1,1),AEA(1,1,1),EAEAderg(1,1,1,1))
7083 call transpose2(EUg(1,1,k),auxmat(1,1))
7084 call matmat2(auxmat(1,1),AEA(1,1,1),EAEA(1,1,1))
7085 call matmat2(auxmat(1,1),AEAderg(1,1,1),EAEAderg(1,1,2,1))
7089 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,1),
7090 & EAEAderx(1,1,lll,kkk,iii,1))
7094 C A2T kernel(i+1)T A1
7095 call kernel(aa2t(1,1),aa1(1,1),aa2tder(1,1,1,1),
7096 & a_chuj_der(1,1,1,1,jj,i),1,.true.,EUg(1,1,k),EUgder(1,1,k),
7097 & AEA(1,1,2),AEAderg(1,1,2),AEAderx(1,1,1,1,1,2))
7098 C Following matrices are needed only for 6-th order cumulants
7099 IF (wcorr6.gt.0.0d0 .or. (wturn6.gt.0.0d0 .and.
7100 & j.eq.i+4 .and. l.eq.i+3)) THEN
7101 call kernel(aa2t(1,1),aa1(1,1),aa2tder(1,1,1,1),
7102 & a_chuj_der(1,1,1,1,jj,i),1,.true.,EUgC(1,1,k),EUgCder(1,1,k),
7103 & AECA(1,1,2),AECAderg(1,1,2),AECAderx(1,1,1,1,1,2))
7104 call kernel(aa2t(1,1),aa1(1,1),aa2tder(1,1,1,1),
7105 & a_chuj_der(1,1,1,1,jj,i),2,.true.,Ug2DtEUg(1,1,k),
7106 & Ug2DtEUgder(1,1,1,k),ADtEA(1,1,2),ADtEAderg(1,1,1,2),
7107 & ADtEAderx(1,1,1,1,1,2))
7108 call kernel(aa2t(1,1),aa1(1,1),aa2tder(1,1,1,1),
7109 & a_chuj_der(1,1,1,1,jj,i),2,.true.,DtUg2EUg(1,1,k),
7110 & DtUg2EUgder(1,1,1,k),ADtEA1(1,1,2),ADtEA1derg(1,1,1,2),
7111 & ADtEA1derx(1,1,1,1,1,2))
7113 C End 6-th order cumulants
7114 call transpose2(EUgder(1,1,j),auxmat(1,1))
7115 call matmat2(auxmat(1,1),AEA(1,1,1),EAEAderg(1,1,2,2))
7116 call transpose2(EUg(1,1,j),auxmat(1,1))
7117 call matmat2(auxmat(1,1),AEA(1,1,2),EAEA(1,1,2))
7118 call matmat2(auxmat(1,1),AEAderg(1,1,2),EAEAderg(1,1,2,2))
7122 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,2),
7123 & EAEAderx(1,1,lll,kkk,iii,2))
7128 C Calculate the vectors and their derivatives in virtual-bond dihedral angles.
7129 C They are needed only when the fifth- or the sixth-order cumulants are
7131 IF (wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0 .or.
7132 & (wturn6.gt.0.0d0 .and. j.eq.i+4 .and. l.eq.i+3)) THEN
7133 call transpose2(AEA(1,1,1),auxmat(1,1))
7134 call matvec2(auxmat(1,1),b1(1,iti),AEAb1(1,1,1))
7135 call matvec2(auxmat(1,1),Ub2(1,i),AEAb2(1,1,1))
7136 call matvec2(auxmat(1,1),Ub2der(1,i),AEAb2derg(1,2,1,1))
7137 call transpose2(AEAderg(1,1,1),auxmat(1,1))
7138 call matvec2(auxmat(1,1),b1(1,iti),AEAb1derg(1,1,1))
7139 call matvec2(auxmat(1,1),Ub2(1,i),AEAb2derg(1,1,1,1))
7140 call matvec2(AEA(1,1,1),b1(1,itk1),AEAb1(1,2,1))
7141 call matvec2(AEAderg(1,1,1),b1(1,itk1),AEAb1derg(1,2,1))
7142 call matvec2(AEA(1,1,1),Ub2(1,k+1),AEAb2(1,2,1))
7143 call matvec2(AEAderg(1,1,1),Ub2(1,k+1),AEAb2derg(1,1,2,1))
7144 call matvec2(AEA(1,1,1),Ub2der(1,k+1),AEAb2derg(1,2,2,1))
7145 call transpose2(AEA(1,1,2),auxmat(1,1))
7146 call matvec2(auxmat(1,1),b1(1,itj1),AEAb1(1,1,2))
7147 call matvec2(auxmat(1,1),Ub2(1,l),AEAb2(1,1,2))
7148 call matvec2(auxmat(1,1),Ub2der(1,l),AEAb2derg(1,2,1,2))
7149 call transpose2(AEAderg(1,1,2),auxmat(1,1))
7150 call matvec2(auxmat(1,1),b1(1,itl),AEAb1(1,1,2))
7151 call matvec2(auxmat(1,1),Ub2(1,l),AEAb2derg(1,1,1,2))
7152 call matvec2(AEA(1,1,2),b1(1,itj1),AEAb1(1,2,2))
7153 call matvec2(AEAderg(1,1,2),b1(1,itj1),AEAb1derg(1,2,2))
7154 call matvec2(AEA(1,1,2),Ub2(1,j),AEAb2(1,2,2))
7155 call matvec2(AEAderg(1,1,2),Ub2(1,j),AEAb2derg(1,1,2,2))
7156 call matvec2(AEA(1,1,2),Ub2der(1,j),AEAb2derg(1,2,2,2))
7157 C Calculate the Cartesian derivatives of the vectors.
7161 call transpose2(AEAderx(1,1,lll,kkk,iii,1),auxmat(1,1))
7162 call matvec2(auxmat(1,1),b1(1,iti),
7163 & AEAb1derx(1,lll,kkk,iii,1,1))
7164 call matvec2(auxmat(1,1),Ub2(1,i),
7165 & AEAb2derx(1,lll,kkk,iii,1,1))
7166 call matvec2(AEAderx(1,1,lll,kkk,iii,1),b1(1,itk1),
7167 & AEAb1derx(1,lll,kkk,iii,2,1))
7168 call matvec2(AEAderx(1,1,lll,kkk,iii,1),Ub2(1,k+1),
7169 & AEAb2derx(1,lll,kkk,iii,2,1))
7170 call transpose2(AEAderx(1,1,lll,kkk,iii,2),auxmat(1,1))
7171 call matvec2(auxmat(1,1),b1(1,itl),
7172 & AEAb1derx(1,lll,kkk,iii,1,2))
7173 call matvec2(auxmat(1,1),Ub2(1,l),
7174 & AEAb2derx(1,lll,kkk,iii,1,2))
7175 call matvec2(AEAderx(1,1,lll,kkk,iii,2),b1(1,itj1),
7176 & AEAb1derx(1,lll,kkk,iii,2,2))
7177 call matvec2(AEAderx(1,1,lll,kkk,iii,2),Ub2(1,j),
7178 & AEAb2derx(1,lll,kkk,iii,2,2))
7187 C---------------------------------------------------------------------------
7188 subroutine kernel(aa1,aa2t,aa1derx,aa2tderx,nderg,transp,
7189 & KK,KKderg,AKA,AKAderg,AKAderx)
7193 double precision aa1(2,2),aa2t(2,2),aa1derx(2,2,3,5),
7194 & aa2tderx(2,2,3,5),KK(2,2),KKderg(2,2,nderg),AKA(2,2),
7195 & AKAderg(2,2,nderg),AKAderx(2,2,3,5,2)
7200 call prodmat3(aa1(1,1),aa2t(1,1),KK(1,1),transp,AKA(1,1))
7202 call prodmat3(aa1(1,1),aa2t(1,1),KKderg(1,1,iii),transp,
7205 cd if (lprn) write (2,*) 'In kernel'
7207 cd if (lprn) write (2,*) 'kkk=',kkk
7209 call prodmat3(aa1derx(1,1,lll,kkk),aa2t(1,1),
7210 & KK(1,1),transp,AKAderx(1,1,lll,kkk,1))
7212 cd write (2,*) 'lll=',lll
7213 cd write (2,*) 'iii=1'
7215 cd write (2,'(3(2f10.5),5x)')
7216 cd & (AKAderx(jjj,mmm,lll,kkk,1),mmm=1,2)
7219 call prodmat3(aa1(1,1),aa2tderx(1,1,lll,kkk),
7220 & KK(1,1),transp,AKAderx(1,1,lll,kkk,2))
7222 cd write (2,*) 'lll=',lll
7223 cd write (2,*) 'iii=2'
7225 cd write (2,'(3(2f10.5),5x)')
7226 cd & (AKAderx(jjj,mmm,lll,kkk,2),mmm=1,2)
7233 C---------------------------------------------------------------------------
7234 double precision function eello4(i,j,k,l,jj,kk)
7235 implicit real*8 (a-h,o-z)
7236 include 'DIMENSIONS'
7237 include 'COMMON.IOUNITS'
7238 include 'COMMON.CHAIN'
7239 include 'COMMON.DERIV'
7240 include 'COMMON.INTERACT'
7241 include 'COMMON.CONTACTS'
7242 include 'COMMON.TORSION'
7243 include 'COMMON.VAR'
7244 include 'COMMON.GEO'
7245 double precision pizda(2,2),ggg1(3),ggg2(3)
7246 cd if (i.ne.1 .or. j.ne.5 .or. k.ne.2 .or.l.ne.4) then
7250 cd print *,'eello4:',i,j,k,l,jj,kk
7251 cd write (2,*) 'i',i,' j',j,' k',k,' l',l
7252 cd call checkint4(i,j,k,l,jj,kk,eel4_num)
7253 cold eij=facont_hb(jj,i)
7254 cold ekl=facont_hb(kk,k)
7256 eel4=-EAEA(1,1,1)-EAEA(2,2,1)
7257 cd eel41=-EAEA(1,1,2)-EAEA(2,2,2)
7258 gcorr_loc(k-1)=gcorr_loc(k-1)
7259 & -ekont*(EAEAderg(1,1,1,1)+EAEAderg(2,2,1,1))
7261 gcorr_loc(l-1)=gcorr_loc(l-1)
7262 & -ekont*(EAEAderg(1,1,2,1)+EAEAderg(2,2,2,1))
7264 gcorr_loc(j-1)=gcorr_loc(j-1)
7265 & -ekont*(EAEAderg(1,1,2,1)+EAEAderg(2,2,2,1))
7270 derx(lll,kkk,iii)=-EAEAderx(1,1,lll,kkk,iii,1)
7271 & -EAEAderx(2,2,lll,kkk,iii,1)
7272 cd derx(lll,kkk,iii)=0.0d0
7276 cd gcorr_loc(l-1)=0.0d0
7277 cd gcorr_loc(j-1)=0.0d0
7278 cd gcorr_loc(k-1)=0.0d0
7280 cd write (iout,*)'Contacts have occurred for peptide groups',
7281 cd & i,j,' fcont:',eij,' eij',' and ',k,l,
7282 cd & ' fcont ',ekl,' eel4=',eel4,' eel4_num',16*eel4_num
7283 if (j.lt.nres-1) then
7290 if (l.lt.nres-1) then
7298 cgrad ggg1(ll)=eel4*g_contij(ll,1)
7299 cgrad ggg2(ll)=eel4*g_contij(ll,2)
7300 glongij=eel4*g_contij(ll,1)+ekont*derx(ll,1,1)
7301 glongkl=eel4*g_contij(ll,2)+ekont*derx(ll,1,2)
7302 cgrad ghalf=0.5d0*ggg1(ll)
7303 gradcorr(ll,i)=gradcorr(ll,i)+ekont*derx(ll,2,1)
7304 gradcorr(ll,i+1)=gradcorr(ll,i+1)+ekont*derx(ll,3,1)
7305 gradcorr(ll,j)=gradcorr(ll,j)+ekont*derx(ll,4,1)
7306 gradcorr(ll,j1)=gradcorr(ll,j1)+ekont*derx(ll,5,1)
7307 gradcorr_long(ll,j)=gradcorr_long(ll,j)+glongij
7308 gradcorr_long(ll,i)=gradcorr_long(ll,i)-glongij
7309 cgrad ghalf=0.5d0*ggg2(ll)
7310 gradcorr(ll,k)=gradcorr(ll,k)+ekont*derx(ll,2,2)
7311 gradcorr(ll,k+1)=gradcorr(ll,k+1)+ekont*derx(ll,3,2)
7312 gradcorr(ll,l)=gradcorr(ll,l)+ekont*derx(ll,4,2)
7313 gradcorr(ll,l1)=gradcorr(ll,l1)+ekont*derx(ll,5,2)
7314 gradcorr_long(ll,l)=gradcorr_long(ll,l)+glongkl
7315 gradcorr_long(ll,k)=gradcorr_long(ll,k)-glongkl
7319 cgrad gradcorr(ll,m)=gradcorr(ll,m)+ggg1(ll)
7324 cgrad gradcorr(ll,m)=gradcorr(ll,m)+ggg2(ll)
7329 cgrad gradcorr(ll,m)=gradcorr(ll,m)+ekont*derx(ll,1,1)
7334 cgrad gradcorr(ll,m)=gradcorr(ll,m)+ekont*derx(ll,1,2)
7338 cd write (2,*) iii,gcorr_loc(iii)
7341 cd write (2,*) 'ekont',ekont
7342 cd write (iout,*) 'eello4',ekont*eel4
7345 C---------------------------------------------------------------------------
7346 double precision function eello5(i,j,k,l,jj,kk)
7347 implicit real*8 (a-h,o-z)
7348 include 'DIMENSIONS'
7349 include 'COMMON.IOUNITS'
7350 include 'COMMON.CHAIN'
7351 include 'COMMON.DERIV'
7352 include 'COMMON.INTERACT'
7353 include 'COMMON.CONTACTS'
7354 include 'COMMON.TORSION'
7355 include 'COMMON.VAR'
7356 include 'COMMON.GEO'
7357 double precision pizda(2,2),auxmat(2,2),auxmat1(2,2),vv(2)
7358 double precision ggg1(3),ggg2(3)
7359 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
7364 C /l\ / \ \ / \ / \ / C
7365 C / \ / \ \ / \ / \ / C
7366 C j| o |l1 | o | o| o | | o |o C
7367 C \ |/k\| |/ \| / |/ \| |/ \| C
7368 C \i/ \ / \ / / \ / \ C
7370 C (I) (II) (III) (IV) C
7372 C eello5_1 eello5_2 eello5_3 eello5_4 C
7374 C Antiparallel chains C
7377 C /j\ / \ \ / \ / \ / C
7378 C / \ / \ \ / \ / \ / C
7379 C j1| o |l | o | o| o | | o |o C
7380 C \ |/k\| |/ \| / |/ \| |/ \| C
7381 C \i/ \ / \ / / \ / \ C
7383 C (I) (II) (III) (IV) C
7385 C eello5_1 eello5_2 eello5_3 eello5_4 C
7387 C o denotes a local interaction, vertical lines an electrostatic interaction. C
7389 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
7390 cd if (i.ne.2 .or. j.ne.6 .or. k.ne.3 .or. l.ne.5) then
7395 cd & 'EELLO5: Contacts have occurred for peptide groups',i,j,
7397 itk=itortyp(itype(k))
7398 itl=itortyp(itype(l))
7399 itj=itortyp(itype(j))
7404 cd call checkint5(i,j,k,l,jj,kk,eel5_1_num,eel5_2_num,
7405 cd & eel5_3_num,eel5_4_num)
7409 derx(lll,kkk,iii)=0.0d0
7413 cd eij=facont_hb(jj,i)
7414 cd ekl=facont_hb(kk,k)
7416 cd write (iout,*)'Contacts have occurred for peptide groups',
7417 cd & i,j,' fcont:',eij,' eij',' and ',k,l
7419 C Contribution from the graph I.
7420 cd write (2,*) 'AEA ',AEA(1,1,1),AEA(2,1,1),AEA(1,2,1),AEA(2,2,1)
7421 cd write (2,*) 'AEAb2',AEAb2(1,1,1),AEAb2(2,1,1)
7422 call transpose2(EUg(1,1,k),auxmat(1,1))
7423 call matmat2(AEA(1,1,1),auxmat(1,1),pizda(1,1))
7424 vv(1)=pizda(1,1)-pizda(2,2)
7425 vv(2)=pizda(1,2)+pizda(2,1)
7426 eello5_1=scalar2(AEAb2(1,1,1),Ub2(1,k))
7427 & +0.5d0*scalar2(vv(1),Dtobr2(1,i))
7428 C Explicit gradient in virtual-dihedral angles.
7429 if (i.gt.1) g_corr5_loc(i-1)=g_corr5_loc(i-1)
7430 & +ekont*(scalar2(AEAb2derg(1,2,1,1),Ub2(1,k))
7431 & +0.5d0*scalar2(vv(1),Dtobr2der(1,i)))
7432 call transpose2(EUgder(1,1,k),auxmat1(1,1))
7433 call matmat2(AEA(1,1,1),auxmat1(1,1),pizda(1,1))
7434 vv(1)=pizda(1,1)-pizda(2,2)
7435 vv(2)=pizda(1,2)+pizda(2,1)
7436 g_corr5_loc(k-1)=g_corr5_loc(k-1)
7437 & +ekont*(scalar2(AEAb2(1,1,1),Ub2der(1,k))
7438 & +0.5d0*scalar2(vv(1),Dtobr2(1,i)))
7439 call matmat2(AEAderg(1,1,1),auxmat(1,1),pizda(1,1))
7440 vv(1)=pizda(1,1)-pizda(2,2)
7441 vv(2)=pizda(1,2)+pizda(2,1)
7443 if (l.lt.nres-1) g_corr5_loc(l-1)=g_corr5_loc(l-1)
7444 & +ekont*(scalar2(AEAb2derg(1,1,1,1),Ub2(1,k))
7445 & +0.5d0*scalar2(vv(1),Dtobr2(1,i)))
7447 if (j.lt.nres-1) g_corr5_loc(j-1)=g_corr5_loc(j-1)
7448 & +ekont*(scalar2(AEAb2derg(1,1,1,1),Ub2(1,k))
7449 & +0.5d0*scalar2(vv(1),Dtobr2(1,i)))
7451 C Cartesian gradient
7455 call matmat2(AEAderx(1,1,lll,kkk,iii,1),auxmat(1,1),
7457 vv(1)=pizda(1,1)-pizda(2,2)
7458 vv(2)=pizda(1,2)+pizda(2,1)
7459 derx(lll,kkk,iii)=derx(lll,kkk,iii)
7460 & +scalar2(AEAb2derx(1,lll,kkk,iii,1,1),Ub2(1,k))
7461 & +0.5d0*scalar2(vv(1),Dtobr2(1,i))
7467 C Contribution from graph II
7468 call transpose2(EE(1,1,itk),auxmat(1,1))
7469 call matmat2(auxmat(1,1),AEA(1,1,1),pizda(1,1))
7470 vv(1)=pizda(1,1)+pizda(2,2)
7471 vv(2)=pizda(2,1)-pizda(1,2)
7472 eello5_2=scalar2(AEAb1(1,2,1),b1(1,itk))
7473 & -0.5d0*scalar2(vv(1),Ctobr(1,k))
7474 C Explicit gradient in virtual-dihedral angles.
7475 g_corr5_loc(k-1)=g_corr5_loc(k-1)
7476 & -0.5d0*ekont*scalar2(vv(1),Ctobrder(1,k))
7477 call matmat2(auxmat(1,1),AEAderg(1,1,1),pizda(1,1))
7478 vv(1)=pizda(1,1)+pizda(2,2)
7479 vv(2)=pizda(2,1)-pizda(1,2)
7481 g_corr5_loc(l-1)=g_corr5_loc(l-1)
7482 & +ekont*(scalar2(AEAb1derg(1,2,1),b1(1,itk))
7483 & -0.5d0*scalar2(vv(1),Ctobr(1,k)))
7485 g_corr5_loc(j-1)=g_corr5_loc(j-1)
7486 & +ekont*(scalar2(AEAb1derg(1,2,1),b1(1,itk))
7487 & -0.5d0*scalar2(vv(1),Ctobr(1,k)))
7489 C Cartesian gradient
7493 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,1),
7495 vv(1)=pizda(1,1)+pizda(2,2)
7496 vv(2)=pizda(2,1)-pizda(1,2)
7497 derx(lll,kkk,iii)=derx(lll,kkk,iii)
7498 & +scalar2(AEAb1derx(1,lll,kkk,iii,2,1),b1(1,itk))
7499 & -0.5d0*scalar2(vv(1),Ctobr(1,k))
7507 C Parallel orientation
7508 C Contribution from graph III
7509 call transpose2(EUg(1,1,l),auxmat(1,1))
7510 call matmat2(AEA(1,1,2),auxmat(1,1),pizda(1,1))
7511 vv(1)=pizda(1,1)-pizda(2,2)
7512 vv(2)=pizda(1,2)+pizda(2,1)
7513 eello5_3=scalar2(AEAb2(1,1,2),Ub2(1,l))
7514 & +0.5d0*scalar2(vv(1),Dtobr2(1,j))
7515 C Explicit gradient in virtual-dihedral angles.
7516 g_corr5_loc(j-1)=g_corr5_loc(j-1)
7517 & +ekont*(scalar2(AEAb2derg(1,2,1,2),Ub2(1,l))
7518 & +0.5d0*scalar2(vv(1),Dtobr2der(1,j)))
7519 call matmat2(AEAderg(1,1,2),auxmat(1,1),pizda(1,1))
7520 vv(1)=pizda(1,1)-pizda(2,2)
7521 vv(2)=pizda(1,2)+pizda(2,1)
7522 g_corr5_loc(k-1)=g_corr5_loc(k-1)
7523 & +ekont*(scalar2(AEAb2derg(1,1,1,2),Ub2(1,l))
7524 & +0.5d0*scalar2(vv(1),Dtobr2(1,j)))
7525 call transpose2(EUgder(1,1,l),auxmat1(1,1))
7526 call matmat2(AEA(1,1,2),auxmat1(1,1),pizda(1,1))
7527 vv(1)=pizda(1,1)-pizda(2,2)
7528 vv(2)=pizda(1,2)+pizda(2,1)
7529 g_corr5_loc(l-1)=g_corr5_loc(l-1)
7530 & +ekont*(scalar2(AEAb2(1,1,2),Ub2der(1,l))
7531 & +0.5d0*scalar2(vv(1),Dtobr2(1,j)))
7532 C Cartesian gradient
7536 call matmat2(AEAderx(1,1,lll,kkk,iii,2),auxmat(1,1),
7538 vv(1)=pizda(1,1)-pizda(2,2)
7539 vv(2)=pizda(1,2)+pizda(2,1)
7540 derx(lll,kkk,iii)=derx(lll,kkk,iii)
7541 & +scalar2(AEAb2derx(1,lll,kkk,iii,1,2),Ub2(1,l))
7542 & +0.5d0*scalar2(vv(1),Dtobr2(1,j))
7547 C Contribution from graph IV
7549 call transpose2(EE(1,1,itl),auxmat(1,1))
7550 call matmat2(auxmat(1,1),AEA(1,1,2),pizda(1,1))
7551 vv(1)=pizda(1,1)+pizda(2,2)
7552 vv(2)=pizda(2,1)-pizda(1,2)
7553 eello5_4=scalar2(AEAb1(1,2,2),b1(1,itl))
7554 & -0.5d0*scalar2(vv(1),Ctobr(1,l))
7555 C Explicit gradient in virtual-dihedral angles.
7556 g_corr5_loc(l-1)=g_corr5_loc(l-1)
7557 & -0.5d0*ekont*scalar2(vv(1),Ctobrder(1,l))
7558 call matmat2(auxmat(1,1),AEAderg(1,1,2),pizda(1,1))
7559 vv(1)=pizda(1,1)+pizda(2,2)
7560 vv(2)=pizda(2,1)-pizda(1,2)
7561 g_corr5_loc(k-1)=g_corr5_loc(k-1)
7562 & +ekont*(scalar2(AEAb1derg(1,2,2),b1(1,itl))
7563 & -0.5d0*scalar2(vv(1),Ctobr(1,l)))
7564 C Cartesian gradient
7568 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,2),
7570 vv(1)=pizda(1,1)+pizda(2,2)
7571 vv(2)=pizda(2,1)-pizda(1,2)
7572 derx(lll,kkk,iii)=derx(lll,kkk,iii)
7573 & +scalar2(AEAb1derx(1,lll,kkk,iii,2,2),b1(1,itl))
7574 & -0.5d0*scalar2(vv(1),Ctobr(1,l))
7579 C Antiparallel orientation
7580 C Contribution from graph III
7582 call transpose2(EUg(1,1,j),auxmat(1,1))
7583 call matmat2(AEA(1,1,2),auxmat(1,1),pizda(1,1))
7584 vv(1)=pizda(1,1)-pizda(2,2)
7585 vv(2)=pizda(1,2)+pizda(2,1)
7586 eello5_3=scalar2(AEAb2(1,1,2),Ub2(1,j))
7587 & +0.5d0*scalar2(vv(1),Dtobr2(1,l))
7588 C Explicit gradient in virtual-dihedral angles.
7589 g_corr5_loc(l-1)=g_corr5_loc(l-1)
7590 & +ekont*(scalar2(AEAb2derg(1,2,1,2),Ub2(1,j))
7591 & +0.5d0*scalar2(vv(1),Dtobr2der(1,l)))
7592 call matmat2(AEAderg(1,1,2),auxmat(1,1),pizda(1,1))
7593 vv(1)=pizda(1,1)-pizda(2,2)
7594 vv(2)=pizda(1,2)+pizda(2,1)
7595 g_corr5_loc(k-1)=g_corr5_loc(k-1)
7596 & +ekont*(scalar2(AEAb2derg(1,1,1,2),Ub2(1,j))
7597 & +0.5d0*scalar2(vv(1),Dtobr2(1,l)))
7598 call transpose2(EUgder(1,1,j),auxmat1(1,1))
7599 call matmat2(AEA(1,1,2),auxmat1(1,1),pizda(1,1))
7600 vv(1)=pizda(1,1)-pizda(2,2)
7601 vv(2)=pizda(1,2)+pizda(2,1)
7602 g_corr5_loc(j-1)=g_corr5_loc(j-1)
7603 & +ekont*(scalar2(AEAb2(1,1,2),Ub2der(1,j))
7604 & +0.5d0*scalar2(vv(1),Dtobr2(1,l)))
7605 C Cartesian gradient
7609 call matmat2(AEAderx(1,1,lll,kkk,iii,2),auxmat(1,1),
7611 vv(1)=pizda(1,1)-pizda(2,2)
7612 vv(2)=pizda(1,2)+pizda(2,1)
7613 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)
7614 & +scalar2(AEAb2derx(1,lll,kkk,iii,1,2),Ub2(1,j))
7615 & +0.5d0*scalar2(vv(1),Dtobr2(1,l))
7620 C Contribution from graph IV
7622 call transpose2(EE(1,1,itj),auxmat(1,1))
7623 call matmat2(auxmat(1,1),AEA(1,1,2),pizda(1,1))
7624 vv(1)=pizda(1,1)+pizda(2,2)
7625 vv(2)=pizda(2,1)-pizda(1,2)
7626 eello5_4=scalar2(AEAb1(1,2,2),b1(1,itj))
7627 & -0.5d0*scalar2(vv(1),Ctobr(1,j))
7628 C Explicit gradient in virtual-dihedral angles.
7629 g_corr5_loc(j-1)=g_corr5_loc(j-1)
7630 & -0.5d0*ekont*scalar2(vv(1),Ctobrder(1,j))
7631 call matmat2(auxmat(1,1),AEAderg(1,1,2),pizda(1,1))
7632 vv(1)=pizda(1,1)+pizda(2,2)
7633 vv(2)=pizda(2,1)-pizda(1,2)
7634 g_corr5_loc(k-1)=g_corr5_loc(k-1)
7635 & +ekont*(scalar2(AEAb1derg(1,2,2),b1(1,itj))
7636 & -0.5d0*scalar2(vv(1),Ctobr(1,j)))
7637 C Cartesian gradient
7641 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,2),
7643 vv(1)=pizda(1,1)+pizda(2,2)
7644 vv(2)=pizda(2,1)-pizda(1,2)
7645 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)
7646 & +scalar2(AEAb1derx(1,lll,kkk,iii,2,2),b1(1,itj))
7647 & -0.5d0*scalar2(vv(1),Ctobr(1,j))
7653 eel5=eello5_1+eello5_2+eello5_3+eello5_4
7654 cd if (i.eq.2 .and. j.eq.8 .and. k.eq.3 .and. l.eq.7) then
7655 cd write (2,*) 'ijkl',i,j,k,l
7656 cd write (2,*) 'eello5_1',eello5_1,' eello5_2',eello5_2,
7657 cd & ' eello5_3',eello5_3,' eello5_4',eello5_4
7659 cd write(iout,*) 'eello5_1',eello5_1,' eel5_1_num',16*eel5_1_num
7660 cd write(iout,*) 'eello5_2',eello5_2,' eel5_2_num',16*eel5_2_num
7661 cd write(iout,*) 'eello5_3',eello5_3,' eel5_3_num',16*eel5_3_num
7662 cd write(iout,*) 'eello5_4',eello5_4,' eel5_4_num',16*eel5_4_num
7663 if (j.lt.nres-1) then
7670 if (l.lt.nres-1) then
7680 cd write (2,*) 'eij',eij,' ekl',ekl,' ekont',ekont
7681 C 2/11/08 AL Gradients over DC's connecting interacting sites will be
7682 C summed up outside the subrouine as for the other subroutines
7683 C handling long-range interactions. The old code is commented out
7684 C with "cgrad" to keep track of changes.
7686 cgrad ggg1(ll)=eel5*g_contij(ll,1)
7687 cgrad ggg2(ll)=eel5*g_contij(ll,2)
7688 gradcorr5ij=eel5*g_contij(ll,1)+ekont*derx(ll,1,1)
7689 gradcorr5kl=eel5*g_contij(ll,2)+ekont*derx(ll,1,2)
7690 c write (iout,'(a,3i3,a,5f8.3,2i3,a,5f8.3,a,f8.3)')
7691 c & "ecorr5",ll,i,j," derx",derx(ll,2,1),derx(ll,3,1),derx(ll,4,1),
7692 c & derx(ll,5,1),k,l," derx",derx(ll,2,2),derx(ll,3,2),
7693 c & derx(ll,4,2),derx(ll,5,2)," ekont",ekont
7694 c write (iout,'(a,3i3,a,3f8.3,2i3,a,3f8.3)')
7695 c & "ecorr5",ll,i,j," gradcorr5",g_contij(ll,1),derx(ll,1,1),
7697 c & k,l," gradcorr5",g_contij(ll,2),derx(ll,1,2),gradcorr5kl
7698 cold ghalf=0.5d0*eel5*ekl*gacont_hbr(ll,jj,i)
7699 cgrad ghalf=0.5d0*ggg1(ll)
7701 gradcorr5(ll,i)=gradcorr5(ll,i)+ekont*derx(ll,2,1)
7702 gradcorr5(ll,i+1)=gradcorr5(ll,i+1)+ekont*derx(ll,3,1)
7703 gradcorr5(ll,j)=gradcorr5(ll,j)+ekont*derx(ll,4,1)
7704 gradcorr5(ll,j1)=gradcorr5(ll,j1)+ekont*derx(ll,5,1)
7705 gradcorr5_long(ll,j)=gradcorr5_long(ll,j)+gradcorr5ij
7706 gradcorr5_long(ll,i)=gradcorr5_long(ll,i)-gradcorr5ij
7707 cold ghalf=0.5d0*eel5*eij*gacont_hbr(ll,kk,k)
7708 cgrad ghalf=0.5d0*ggg2(ll)
7710 gradcorr5(ll,k)=gradcorr5(ll,k)+ghalf+ekont*derx(ll,2,2)
7711 gradcorr5(ll,k+1)=gradcorr5(ll,k+1)+ekont*derx(ll,3,2)
7712 gradcorr5(ll,l)=gradcorr5(ll,l)+ghalf+ekont*derx(ll,4,2)
7713 gradcorr5(ll,l1)=gradcorr5(ll,l1)+ekont*derx(ll,5,2)
7714 gradcorr5_long(ll,l)=gradcorr5_long(ll,l)+gradcorr5kl
7715 gradcorr5_long(ll,k)=gradcorr5_long(ll,k)-gradcorr5kl
7720 cold gradcorr5(ll,m)=gradcorr5(ll,m)+eel5*ekl*gacont_hbr(ll,jj,i)
7721 cgrad gradcorr5(ll,m)=gradcorr5(ll,m)+ggg1(ll)
7726 cold gradcorr5(ll,m)=gradcorr5(ll,m)+eel5*eij*gacont_hbr(ll,kk,k)
7727 cgrad gradcorr5(ll,m)=gradcorr5(ll,m)+ggg2(ll)
7733 cgrad gradcorr5(ll,m)=gradcorr5(ll,m)+ekont*derx(ll,1,1)
7738 cgrad gradcorr5(ll,m)=gradcorr5(ll,m)+ekont*derx(ll,1,2)
7742 cd write (2,*) iii,g_corr5_loc(iii)
7745 cd write (2,*) 'ekont',ekont
7746 cd write (iout,*) 'eello5',ekont*eel5
7749 c--------------------------------------------------------------------------
7750 double precision function eello6(i,j,k,l,jj,kk)
7751 implicit real*8 (a-h,o-z)
7752 include 'DIMENSIONS'
7753 include 'COMMON.IOUNITS'
7754 include 'COMMON.CHAIN'
7755 include 'COMMON.DERIV'
7756 include 'COMMON.INTERACT'
7757 include 'COMMON.CONTACTS'
7758 include 'COMMON.TORSION'
7759 include 'COMMON.VAR'
7760 include 'COMMON.GEO'
7761 include 'COMMON.FFIELD'
7762 double precision ggg1(3),ggg2(3)
7763 cd if (i.ne.1 .or. j.ne.3 .or. k.ne.2 .or. l.ne.4) then
7768 cd & 'EELLO6: Contacts have occurred for peptide groups',i,j,
7776 cd call checkint6(i,j,k,l,jj,kk,eel6_1_num,eel6_2_num,
7777 cd & eel6_3_num,eel6_4_num,eel6_5_num,eel6_6_num)
7781 derx(lll,kkk,iii)=0.0d0
7785 cd eij=facont_hb(jj,i)
7786 cd ekl=facont_hb(kk,k)
7792 eello6_1=eello6_graph1(i,j,k,l,1,.false.)
7793 eello6_2=eello6_graph1(j,i,l,k,2,.false.)
7794 eello6_3=eello6_graph2(i,j,k,l,jj,kk,.false.)
7795 eello6_4=eello6_graph4(i,j,k,l,jj,kk,1,.false.)
7796 eello6_5=eello6_graph4(j,i,l,k,jj,kk,2,.false.)
7797 eello6_6=eello6_graph3(i,j,k,l,jj,kk,.false.)
7799 eello6_1=eello6_graph1(i,j,k,l,1,.false.)
7800 eello6_2=eello6_graph1(l,k,j,i,2,.true.)
7801 eello6_3=eello6_graph2(i,l,k,j,jj,kk,.true.)
7802 eello6_4=eello6_graph4(i,j,k,l,jj,kk,1,.false.)
7803 if (wturn6.eq.0.0d0 .or. j.ne.i+4) then
7804 eello6_5=eello6_graph4(l,k,j,i,kk,jj,2,.true.)
7808 eello6_6=eello6_graph3(i,l,k,j,jj,kk,.true.)
7810 C If turn contributions are considered, they will be handled separately.
7811 eel6=eello6_1+eello6_2+eello6_3+eello6_4+eello6_5+eello6_6
7812 cd write(iout,*) 'eello6_1',eello6_1!,' eel6_1_num',16*eel6_1_num
7813 cd write(iout,*) 'eello6_2',eello6_2!,' eel6_2_num',16*eel6_2_num
7814 cd write(iout,*) 'eello6_3',eello6_3!,' eel6_3_num',16*eel6_3_num
7815 cd write(iout,*) 'eello6_4',eello6_4!,' eel6_4_num',16*eel6_4_num
7816 cd write(iout,*) 'eello6_5',eello6_5!,' eel6_5_num',16*eel6_5_num
7817 cd write(iout,*) 'eello6_6',eello6_6!,' eel6_6_num',16*eel6_6_num
7819 if (j.lt.nres-1) then
7826 if (l.lt.nres-1) then
7834 cgrad ggg1(ll)=eel6*g_contij(ll,1)
7835 cgrad ggg2(ll)=eel6*g_contij(ll,2)
7836 cold ghalf=0.5d0*eel6*ekl*gacont_hbr(ll,jj,i)
7837 cgrad ghalf=0.5d0*ggg1(ll)
7839 gradcorr6ij=eel6*g_contij(ll,1)+ekont*derx(ll,1,1)
7840 gradcorr6kl=eel6*g_contij(ll,2)+ekont*derx(ll,1,2)
7841 gradcorr6(ll,i)=gradcorr6(ll,i)+ekont*derx(ll,2,1)
7842 gradcorr6(ll,i+1)=gradcorr6(ll,i+1)+ekont*derx(ll,3,1)
7843 gradcorr6(ll,j)=gradcorr6(ll,j)+ekont*derx(ll,4,1)
7844 gradcorr6(ll,j1)=gradcorr6(ll,j1)+ekont*derx(ll,5,1)
7845 gradcorr6_long(ll,j)=gradcorr6_long(ll,j)+gradcorr6ij
7846 gradcorr6_long(ll,i)=gradcorr6_long(ll,i)-gradcorr6ij
7847 cgrad ghalf=0.5d0*ggg2(ll)
7848 cold ghalf=0.5d0*eel6*eij*gacont_hbr(ll,kk,k)
7850 gradcorr6(ll,k)=gradcorr6(ll,k)+ekont*derx(ll,2,2)
7851 gradcorr6(ll,k+1)=gradcorr6(ll,k+1)+ekont*derx(ll,3,2)
7852 gradcorr6(ll,l)=gradcorr6(ll,l)+ekont*derx(ll,4,2)
7853 gradcorr6(ll,l1)=gradcorr6(ll,l1)+ekont*derx(ll,5,2)
7854 gradcorr6_long(ll,l)=gradcorr6_long(ll,l)+gradcorr6kl
7855 gradcorr6_long(ll,k)=gradcorr6_long(ll,k)-gradcorr6kl
7860 cold gradcorr6(ll,m)=gradcorr6(ll,m)+eel6*ekl*gacont_hbr(ll,jj,i)
7861 cgrad gradcorr6(ll,m)=gradcorr6(ll,m)+ggg1(ll)
7866 cold gradcorr6(ll,m)=gradcorr6(ll,m)+eel6*eij*gacont_hbr(ll,kk,k)
7867 cgrad gradcorr6(ll,m)=gradcorr6(ll,m)+ggg2(ll)
7873 cgrad gradcorr6(ll,m)=gradcorr6(ll,m)+ekont*derx(ll,1,1)
7878 cgrad gradcorr6(ll,m)=gradcorr6(ll,m)+ekont*derx(ll,1,2)
7882 cd write (2,*) iii,g_corr6_loc(iii)
7885 cd write (2,*) 'ekont',ekont
7886 cd write (iout,*) 'eello6',ekont*eel6
7889 c--------------------------------------------------------------------------
7890 double precision function eello6_graph1(i,j,k,l,imat,swap)
7891 implicit real*8 (a-h,o-z)
7892 include 'DIMENSIONS'
7893 include 'COMMON.IOUNITS'
7894 include 'COMMON.CHAIN'
7895 include 'COMMON.DERIV'
7896 include 'COMMON.INTERACT'
7897 include 'COMMON.CONTACTS'
7898 include 'COMMON.TORSION'
7899 include 'COMMON.VAR'
7900 include 'COMMON.GEO'
7901 double precision vv(2),vv1(2),pizda(2,2),auxmat(2,2),pizda1(2,2)
7905 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
7907 C Parallel Antiparallel C
7913 C \ j|/k\| / \ |/k\|l / C
7918 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
7919 itk=itortyp(itype(k))
7920 s1= scalar2(AEAb1(1,2,imat),CUgb2(1,i))
7921 s2=-scalar2(AEAb2(1,1,imat),Ug2Db1t(1,k))
7922 s3= scalar2(AEAb2(1,1,imat),CUgb2(1,k))
7923 call transpose2(EUgC(1,1,k),auxmat(1,1))
7924 call matmat2(AEA(1,1,imat),auxmat(1,1),pizda1(1,1))
7925 vv1(1)=pizda1(1,1)-pizda1(2,2)
7926 vv1(2)=pizda1(1,2)+pizda1(2,1)
7927 s4=0.5d0*scalar2(vv1(1),Dtobr2(1,i))
7928 vv(1)=AEAb1(1,2,imat)*b1(1,itk)-AEAb1(2,2,imat)*b1(2,itk)
7929 vv(2)=AEAb1(1,2,imat)*b1(2,itk)+AEAb1(2,2,imat)*b1(1,itk)
7930 s5=scalar2(vv(1),Dtobr2(1,i))
7931 cd write (2,*) 's1',s1,' s2',s2,' s3',s3,' s4', s4,' s5',s5
7932 eello6_graph1=-0.5d0*(s1+s2+s3+s4+s5)
7933 if (i.gt.1) g_corr6_loc(i-1)=g_corr6_loc(i-1)
7934 & -0.5d0*ekont*(scalar2(AEAb1(1,2,imat),CUgb2der(1,i))
7935 & -scalar2(AEAb2derg(1,2,1,imat),Ug2Db1t(1,k))
7936 & +scalar2(AEAb2derg(1,2,1,imat),CUgb2(1,k))
7937 & +0.5d0*scalar2(vv1(1),Dtobr2der(1,i))
7938 & +scalar2(vv(1),Dtobr2der(1,i)))
7939 call matmat2(AEAderg(1,1,imat),auxmat(1,1),pizda1(1,1))
7940 vv1(1)=pizda1(1,1)-pizda1(2,2)
7941 vv1(2)=pizda1(1,2)+pizda1(2,1)
7942 vv(1)=AEAb1derg(1,2,imat)*b1(1,itk)-AEAb1derg(2,2,imat)*b1(2,itk)
7943 vv(2)=AEAb1derg(1,2,imat)*b1(2,itk)+AEAb1derg(2,2,imat)*b1(1,itk)
7945 g_corr6_loc(l-1)=g_corr6_loc(l-1)
7946 & +ekont*(-0.5d0*(scalar2(AEAb1derg(1,2,imat),CUgb2(1,i))
7947 & -scalar2(AEAb2derg(1,1,1,imat),Ug2Db1t(1,k))
7948 & +scalar2(AEAb2derg(1,1,1,imat),CUgb2(1,k))
7949 & +0.5d0*scalar2(vv1(1),Dtobr2(1,i))+scalar2(vv(1),Dtobr2(1,i))))
7951 g_corr6_loc(j-1)=g_corr6_loc(j-1)
7952 & +ekont*(-0.5d0*(scalar2(AEAb1derg(1,2,imat),CUgb2(1,i))
7953 & -scalar2(AEAb2derg(1,1,1,imat),Ug2Db1t(1,k))
7954 & +scalar2(AEAb2derg(1,1,1,imat),CUgb2(1,k))
7955 & +0.5d0*scalar2(vv1(1),Dtobr2(1,i))+scalar2(vv(1),Dtobr2(1,i))))
7957 call transpose2(EUgCder(1,1,k),auxmat(1,1))
7958 call matmat2(AEA(1,1,imat),auxmat(1,1),pizda1(1,1))
7959 vv1(1)=pizda1(1,1)-pizda1(2,2)
7960 vv1(2)=pizda1(1,2)+pizda1(2,1)
7961 if (k.gt.1) g_corr6_loc(k-1)=g_corr6_loc(k-1)
7962 & +ekont*(-0.5d0*(-scalar2(AEAb2(1,1,imat),Ug2Db1tder(1,k))
7963 & +scalar2(AEAb2(1,1,imat),CUgb2der(1,k))
7964 & +0.5d0*scalar2(vv1(1),Dtobr2(1,i))))
7973 s1= scalar2(AEAb1derx(1,lll,kkk,iii,2,imat),CUgb2(1,i))
7974 s2=-scalar2(AEAb2derx(1,lll,kkk,iii,1,imat),Ug2Db1t(1,k))
7975 s3= scalar2(AEAb2derx(1,lll,kkk,iii,1,imat),CUgb2(1,k))
7976 call transpose2(EUgC(1,1,k),auxmat(1,1))
7977 call matmat2(AEAderx(1,1,lll,kkk,iii,imat),auxmat(1,1),
7979 vv1(1)=pizda1(1,1)-pizda1(2,2)
7980 vv1(2)=pizda1(1,2)+pizda1(2,1)
7981 s4=0.5d0*scalar2(vv1(1),Dtobr2(1,i))
7982 vv(1)=AEAb1derx(1,lll,kkk,iii,2,imat)*b1(1,itk)
7983 & -AEAb1derx(2,lll,kkk,iii,2,imat)*b1(2,itk)
7984 vv(2)=AEAb1derx(1,lll,kkk,iii,2,imat)*b1(2,itk)
7985 & +AEAb1derx(2,lll,kkk,iii,2,imat)*b1(1,itk)
7986 s5=scalar2(vv(1),Dtobr2(1,i))
7987 derx(lll,kkk,ind)=derx(lll,kkk,ind)-0.5d0*(s1+s2+s3+s4+s5)
7993 c----------------------------------------------------------------------------
7994 double precision function eello6_graph2(i,j,k,l,jj,kk,swap)
7995 implicit real*8 (a-h,o-z)
7996 include 'DIMENSIONS'
7997 include 'COMMON.IOUNITS'
7998 include 'COMMON.CHAIN'
7999 include 'COMMON.DERIV'
8000 include 'COMMON.INTERACT'
8001 include 'COMMON.CONTACTS'
8002 include 'COMMON.TORSION'
8003 include 'COMMON.VAR'
8004 include 'COMMON.GEO'
8006 double precision vv(2),pizda(2,2),auxmat(2,2),auxvec(2),
8007 & auxvec1(2),auxvec2(2),auxmat1(2,2)
8010 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
8012 C Parallel Antiparallel C
8018 C \ j|/k\| \ |/k\|l C
8023 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
8024 cd write (2,*) 'eello6_graph2: i,',i,' j',j,' k',k,' l',l
8025 C AL 7/4/01 s1 would occur in the sixth-order moment,
8026 C but not in a cluster cumulant
8028 s1=dip(1,jj,i)*dip(1,kk,k)
8030 call matvec2(ADtEA1(1,1,1),Ub2(1,k),auxvec(1))
8031 s2=-0.5d0*scalar2(Ub2(1,i),auxvec(1))
8032 call matvec2(ADtEA(1,1,2),Ub2(1,l),auxvec1(1))
8033 s3=-0.5d0*scalar2(Ub2(1,j),auxvec1(1))
8034 call transpose2(EUg(1,1,k),auxmat(1,1))
8035 call matmat2(ADtEA1(1,1,1),auxmat(1,1),pizda(1,1))
8036 vv(1)=pizda(1,1)-pizda(2,2)
8037 vv(2)=pizda(1,2)+pizda(2,1)
8038 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
8039 cd write (2,*) 'eello6_graph2:','s1',s1,' s2',s2,' s3',s3,' s4',s4
8041 eello6_graph2=-(s1+s2+s3+s4)
8043 eello6_graph2=-(s2+s3+s4)
8046 C Derivatives in gamma(i-1)
8049 s1=dipderg(1,jj,i)*dip(1,kk,k)
8051 s2=-0.5d0*scalar2(Ub2der(1,i),auxvec(1))
8052 call matvec2(ADtEAderg(1,1,1,2),Ub2(1,l),auxvec2(1))
8053 s3=-0.5d0*scalar2(Ub2(1,j),auxvec2(1))
8054 s4=-0.25d0*scalar2(vv(1),Dtobr2der(1,i))
8056 g_corr6_loc(i-1)=g_corr6_loc(i-1)-ekont*(s1+s2+s3+s4)
8058 g_corr6_loc(i-1)=g_corr6_loc(i-1)-ekont*(s2+s3+s4)
8060 c g_corr6_loc(i-1)=g_corr6_loc(i-1)-s3
8062 C Derivatives in gamma(k-1)
8064 s1=dip(1,jj,i)*dipderg(1,kk,k)
8066 call matvec2(ADtEA1(1,1,1),Ub2der(1,k),auxvec2(1))
8067 s2=-0.5d0*scalar2(Ub2(1,i),auxvec2(1))
8068 call matvec2(ADtEAderg(1,1,2,2),Ub2(1,l),auxvec2(1))
8069 s3=-0.5d0*scalar2(Ub2(1,j),auxvec2(1))
8070 call transpose2(EUgder(1,1,k),auxmat1(1,1))
8071 call matmat2(ADtEA1(1,1,1),auxmat1(1,1),pizda(1,1))
8072 vv(1)=pizda(1,1)-pizda(2,2)
8073 vv(2)=pizda(1,2)+pizda(2,1)
8074 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
8076 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s1+s2+s3+s4)
8078 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s2+s3+s4)
8080 c g_corr6_loc(k-1)=g_corr6_loc(k-1)-s3
8081 C Derivatives in gamma(j-1) or gamma(l-1)
8084 s1=dipderg(3,jj,i)*dip(1,kk,k)
8086 call matvec2(ADtEA1derg(1,1,1,1),Ub2(1,k),auxvec2(1))
8087 s2=-0.5d0*scalar2(Ub2(1,i),auxvec2(1))
8088 s3=-0.5d0*scalar2(Ub2der(1,j),auxvec1(1))
8089 call matmat2(ADtEA1derg(1,1,1,1),auxmat(1,1),pizda(1,1))
8090 vv(1)=pizda(1,1)-pizda(2,2)
8091 vv(2)=pizda(1,2)+pizda(2,1)
8092 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
8095 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*s1
8097 g_corr6_loc(j-1)=g_corr6_loc(j-1)-ekont*s1
8100 g_corr6_loc(j-1)=g_corr6_loc(j-1)-ekont*(s2+s3+s4)
8101 c g_corr6_loc(j-1)=g_corr6_loc(j-1)-s3
8103 C Derivatives in gamma(l-1) or gamma(j-1)
8106 s1=dip(1,jj,i)*dipderg(3,kk,k)
8108 call matvec2(ADtEA1derg(1,1,2,1),Ub2(1,k),auxvec2(1))
8109 s2=-0.5d0*scalar2(Ub2(1,i),auxvec2(1))
8110 call matvec2(ADtEA(1,1,2),Ub2der(1,l),auxvec2(1))
8111 s3=-0.5d0*scalar2(Ub2(1,j),auxvec2(1))
8112 call matmat2(ADtEA1derg(1,1,2,1),auxmat(1,1),pizda(1,1))
8113 vv(1)=pizda(1,1)-pizda(2,2)
8114 vv(2)=pizda(1,2)+pizda(2,1)
8115 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
8118 g_corr6_loc(j-1)=g_corr6_loc(j-1)-ekont*s1
8120 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*s1
8123 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*(s2+s3+s4)
8124 c g_corr6_loc(l-1)=g_corr6_loc(l-1)-s3
8126 C Cartesian derivatives.
8128 write (2,*) 'In eello6_graph2'
8130 write (2,*) 'iii=',iii
8132 write (2,*) 'kkk=',kkk
8134 write (2,'(3(2f10.5),5x)')
8135 & ((ADtEA1derx(jjj,mmm,lll,kkk,iii,1),mmm=1,2),lll=1,3)
8145 s1=dipderx(lll,kkk,1,jj,i)*dip(1,kk,k)
8147 s1=dip(1,jj,i)*dipderx(lll,kkk,1,kk,k)
8150 call matvec2(ADtEA1derx(1,1,lll,kkk,iii,1),Ub2(1,k),
8152 s2=-0.5d0*scalar2(Ub2(1,i),auxvec(1))
8153 call matvec2(ADtEAderx(1,1,lll,kkk,iii,2),Ub2(1,l),
8155 s3=-0.5d0*scalar2(Ub2(1,j),auxvec(1))
8156 call transpose2(EUg(1,1,k),auxmat(1,1))
8157 call matmat2(ADtEA1derx(1,1,lll,kkk,iii,1),auxmat(1,1),
8159 vv(1)=pizda(1,1)-pizda(2,2)
8160 vv(2)=pizda(1,2)+pizda(2,1)
8161 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
8162 cd write (2,*) 's1',s1,' s2',s2,' s3',s3,' s4',s4
8164 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s1+s2+s4)
8166 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s2+s4)
8169 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-s3
8171 derx(lll,kkk,iii)=derx(lll,kkk,iii)-s3
8178 c----------------------------------------------------------------------------
8179 double precision function eello6_graph3(i,j,k,l,jj,kk,swap)
8180 implicit real*8 (a-h,o-z)
8181 include 'DIMENSIONS'
8182 include 'COMMON.IOUNITS'
8183 include 'COMMON.CHAIN'
8184 include 'COMMON.DERIV'
8185 include 'COMMON.INTERACT'
8186 include 'COMMON.CONTACTS'
8187 include 'COMMON.TORSION'
8188 include 'COMMON.VAR'
8189 include 'COMMON.GEO'
8190 double precision vv(2),pizda(2,2),auxmat(2,2),auxvec(2)
8192 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
8194 C Parallel Antiparallel C
8200 C j|/k\| / |/k\|l / C
8205 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
8207 C 4/7/01 AL Component s1 was removed, because it pertains to the respective
8208 C energy moment and not to the cluster cumulant.
8209 iti=itortyp(itype(i))
8210 if (j.lt.nres-1) then
8211 itj1=itortyp(itype(j+1))
8215 itk=itortyp(itype(k))
8216 itk1=itortyp(itype(k+1))
8217 if (l.lt.nres-1) then
8218 itl1=itortyp(itype(l+1))
8223 s1=dip(4,jj,i)*dip(4,kk,k)
8225 call matvec2(AECA(1,1,1),b1(1,itk1),auxvec(1))
8226 s2=0.5d0*scalar2(b1(1,itk),auxvec(1))
8227 call matvec2(AECA(1,1,2),b1(1,itl1),auxvec(1))
8228 s3=0.5d0*scalar2(b1(1,itj1),auxvec(1))
8229 call transpose2(EE(1,1,itk),auxmat(1,1))
8230 call matmat2(auxmat(1,1),AECA(1,1,1),pizda(1,1))
8231 vv(1)=pizda(1,1)+pizda(2,2)
8232 vv(2)=pizda(2,1)-pizda(1,2)
8233 s4=-0.25d0*scalar2(vv(1),Ctobr(1,k))
8234 cd write (2,*) 'eello6_graph3:','s1',s1,' s2',s2,' s3',s3,' s4',s4,
8235 cd & "sum",-(s2+s3+s4)
8237 eello6_graph3=-(s1+s2+s3+s4)
8239 eello6_graph3=-(s2+s3+s4)
8242 C Derivatives in gamma(k-1)
8243 call matvec2(AECAderg(1,1,2),b1(1,itl1),auxvec(1))
8244 s3=0.5d0*scalar2(b1(1,itj1),auxvec(1))
8245 s4=-0.25d0*scalar2(vv(1),Ctobrder(1,k))
8246 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s3+s4)
8247 C Derivatives in gamma(l-1)
8248 call matvec2(AECAderg(1,1,1),b1(1,itk1),auxvec(1))
8249 s2=0.5d0*scalar2(b1(1,itk),auxvec(1))
8250 call matmat2(auxmat(1,1),AECAderg(1,1,1),pizda(1,1))
8251 vv(1)=pizda(1,1)+pizda(2,2)
8252 vv(2)=pizda(2,1)-pizda(1,2)
8253 s4=-0.25d0*scalar2(vv(1),Ctobr(1,k))
8254 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*(s2+s4)
8255 C Cartesian derivatives.
8261 s1=dipderx(lll,kkk,4,jj,i)*dip(4,kk,k)
8263 s1=dip(4,jj,i)*dipderx(lll,kkk,4,kk,k)
8266 call matvec2(AECAderx(1,1,lll,kkk,iii,1),b1(1,itk1),
8268 s2=0.5d0*scalar2(b1(1,itk),auxvec(1))
8269 call matvec2(AECAderx(1,1,lll,kkk,iii,2),b1(1,itl1),
8271 s3=0.5d0*scalar2(b1(1,itj1),auxvec(1))
8272 call matmat2(auxmat(1,1),AECAderx(1,1,lll,kkk,iii,1),
8274 vv(1)=pizda(1,1)+pizda(2,2)
8275 vv(2)=pizda(2,1)-pizda(1,2)
8276 s4=-0.25d0*scalar2(vv(1),Ctobr(1,k))
8278 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s1+s2+s4)
8280 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s2+s4)
8283 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-s3
8285 derx(lll,kkk,iii)=derx(lll,kkk,iii)-s3
8287 c derx(lll,kkk,iii)=derx(lll,kkk,iii)-s4
8293 c----------------------------------------------------------------------------
8294 double precision function eello6_graph4(i,j,k,l,jj,kk,imat,swap)
8295 implicit real*8 (a-h,o-z)
8296 include 'DIMENSIONS'
8297 include 'COMMON.IOUNITS'
8298 include 'COMMON.CHAIN'
8299 include 'COMMON.DERIV'
8300 include 'COMMON.INTERACT'
8301 include 'COMMON.CONTACTS'
8302 include 'COMMON.TORSION'
8303 include 'COMMON.VAR'
8304 include 'COMMON.GEO'
8305 include 'COMMON.FFIELD'
8306 double precision vv(2),pizda(2,2),auxmat(2,2),auxvec(2),
8307 & auxvec1(2),auxmat1(2,2)
8309 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
8311 C Parallel Antiparallel C
8317 C \ j|/k\| \ |/k\|l C
8322 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
8324 C 4/7/01 AL Component s1 was removed, because it pertains to the respective
8325 C energy moment and not to the cluster cumulant.
8326 cd write (2,*) 'eello_graph4: wturn6',wturn6
8327 iti=itortyp(itype(i))
8328 itj=itortyp(itype(j))
8329 if (j.lt.nres-1) then
8330 itj1=itortyp(itype(j+1))
8334 itk=itortyp(itype(k))
8335 if (k.lt.nres-1) then
8336 itk1=itortyp(itype(k+1))
8340 itl=itortyp(itype(l))
8341 if (l.lt.nres-1) then
8342 itl1=itortyp(itype(l+1))
8346 cd write (2,*) 'eello6_graph4:','i',i,' j',j,' k',k,' l',l
8347 cd write (2,*) 'iti',iti,' itj',itj,' itj1',itj1,' itk',itk,
8348 cd & ' itl',itl,' itl1',itl1
8351 s1=dip(3,jj,i)*dip(3,kk,k)
8353 s1=dip(2,jj,j)*dip(2,kk,l)
8356 call matvec2(AECA(1,1,imat),Ub2(1,k),auxvec(1))
8357 s2=0.5d0*scalar2(Ub2(1,i),auxvec(1))
8359 call matvec2(ADtEA1(1,1,3-imat),b1(1,itj1),auxvec1(1))
8360 s3=-0.5d0*scalar2(b1(1,itj),auxvec1(1))
8362 call matvec2(ADtEA1(1,1,3-imat),b1(1,itl1),auxvec1(1))
8363 s3=-0.5d0*scalar2(b1(1,itl),auxvec1(1))
8365 call transpose2(EUg(1,1,k),auxmat(1,1))
8366 call matmat2(AECA(1,1,imat),auxmat(1,1),pizda(1,1))
8367 vv(1)=pizda(1,1)-pizda(2,2)
8368 vv(2)=pizda(2,1)+pizda(1,2)
8369 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
8370 cd write (2,*) 'eello6_graph4:','s1',s1,' s2',s2,' s3',s3,' s4',s4
8372 eello6_graph4=-(s1+s2+s3+s4)
8374 eello6_graph4=-(s2+s3+s4)
8376 C Derivatives in gamma(i-1)
8380 s1=dipderg(2,jj,i)*dip(3,kk,k)
8382 s1=dipderg(4,jj,j)*dip(2,kk,l)
8385 s2=0.5d0*scalar2(Ub2der(1,i),auxvec(1))
8387 call matvec2(ADtEA1derg(1,1,1,3-imat),b1(1,itj1),auxvec1(1))
8388 s3=-0.5d0*scalar2(b1(1,itj),auxvec1(1))
8390 call matvec2(ADtEA1derg(1,1,1,3-imat),b1(1,itl1),auxvec1(1))
8391 s3=-0.5d0*scalar2(b1(1,itl),auxvec1(1))
8393 s4=0.25d0*scalar2(vv(1),Dtobr2der(1,i))
8394 if (wturn6.gt.0.0d0 .and. k.eq.l+4 .and. i.eq.j+2) then
8395 cd write (2,*) 'turn6 derivatives'
8397 gel_loc_turn6(i-1)=gel_loc_turn6(i-1)-ekont*(s1+s2+s3+s4)
8399 gel_loc_turn6(i-1)=gel_loc_turn6(i-1)-ekont*(s2+s3+s4)
8403 g_corr6_loc(i-1)=g_corr6_loc(i-1)-ekont*(s1+s2+s3+s4)
8405 g_corr6_loc(i-1)=g_corr6_loc(i-1)-ekont*(s2+s3+s4)
8409 C Derivatives in gamma(k-1)
8412 s1=dip(3,jj,i)*dipderg(2,kk,k)
8414 s1=dip(2,jj,j)*dipderg(4,kk,l)
8417 call matvec2(AECA(1,1,imat),Ub2der(1,k),auxvec1(1))
8418 s2=0.5d0*scalar2(Ub2(1,i),auxvec1(1))
8420 call matvec2(ADtEA1derg(1,1,2,3-imat),b1(1,itj1),auxvec1(1))
8421 s3=-0.5d0*scalar2(b1(1,itj),auxvec1(1))
8423 call matvec2(ADtEA1derg(1,1,2,3-imat),b1(1,itl1),auxvec1(1))
8424 s3=-0.5d0*scalar2(b1(1,itl),auxvec1(1))
8426 call transpose2(EUgder(1,1,k),auxmat1(1,1))
8427 call matmat2(AECA(1,1,imat),auxmat1(1,1),pizda(1,1))
8428 vv(1)=pizda(1,1)-pizda(2,2)
8429 vv(2)=pizda(2,1)+pizda(1,2)
8430 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
8431 if (wturn6.gt.0.0d0 .and. k.eq.l+4 .and. i.eq.j+2) then
8433 gel_loc_turn6(k-1)=gel_loc_turn6(k-1)-ekont*(s1+s2+s3+s4)
8435 gel_loc_turn6(k-1)=gel_loc_turn6(k-1)-ekont*(s2+s3+s4)
8439 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s1+s2+s3+s4)
8441 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s2+s3+s4)
8444 C Derivatives in gamma(j-1) or gamma(l-1)
8445 if (l.eq.j+1 .and. l.gt.1) then
8446 call matvec2(AECAderg(1,1,imat),Ub2(1,k),auxvec(1))
8447 s2=0.5d0*scalar2(Ub2(1,i),auxvec(1))
8448 call matmat2(AECAderg(1,1,imat),auxmat(1,1),pizda(1,1))
8449 vv(1)=pizda(1,1)-pizda(2,2)
8450 vv(2)=pizda(2,1)+pizda(1,2)
8451 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
8452 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*(s2+s4)
8453 else if (j.gt.1) then
8454 call matvec2(AECAderg(1,1,imat),Ub2(1,k),auxvec(1))
8455 s2=0.5d0*scalar2(Ub2(1,i),auxvec(1))
8456 call matmat2(AECAderg(1,1,imat),auxmat(1,1),pizda(1,1))
8457 vv(1)=pizda(1,1)-pizda(2,2)
8458 vv(2)=pizda(2,1)+pizda(1,2)
8459 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
8460 if (wturn6.gt.0.0d0 .and. k.eq.l+4 .and. i.eq.j+2) then
8461 gel_loc_turn6(j-1)=gel_loc_turn6(j-1)-ekont*(s2+s4)
8463 g_corr6_loc(j-1)=g_corr6_loc(j-1)-ekont*(s2+s4)
8466 C Cartesian derivatives.
8473 s1=dipderx(lll,kkk,3,jj,i)*dip(3,kk,k)
8475 s1=dipderx(lll,kkk,2,jj,j)*dip(2,kk,l)
8479 s1=dip(3,jj,i)*dipderx(lll,kkk,3,kk,k)
8481 s1=dip(2,jj,j)*dipderx(lll,kkk,2,kk,l)
8485 call matvec2(AECAderx(1,1,lll,kkk,iii,imat),Ub2(1,k),
8487 s2=0.5d0*scalar2(Ub2(1,i),auxvec(1))
8489 call matvec2(ADtEA1derx(1,1,lll,kkk,iii,3-imat),
8490 & b1(1,itj1),auxvec(1))
8491 s3=-0.5d0*scalar2(b1(1,itj),auxvec(1))
8493 call matvec2(ADtEA1derx(1,1,lll,kkk,iii,3-imat),
8494 & b1(1,itl1),auxvec(1))
8495 s3=-0.5d0*scalar2(b1(1,itl),auxvec(1))
8497 call matmat2(AECAderx(1,1,lll,kkk,iii,imat),auxmat(1,1),
8499 vv(1)=pizda(1,1)-pizda(2,2)
8500 vv(2)=pizda(2,1)+pizda(1,2)
8501 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
8503 if (wturn6.gt.0.0d0 .and. k.eq.l+4 .and. i.eq.j+2) then
8505 derx_turn(lll,kkk,3-iii)=derx_turn(lll,kkk,3-iii)
8508 derx_turn(lll,kkk,3-iii)=derx_turn(lll,kkk,3-iii)
8511 derx_turn(lll,kkk,iii)=derx_turn(lll,kkk,iii)-s3
8514 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-(s1+s2+s4)
8516 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-(s2+s4)
8518 derx(lll,kkk,iii)=derx(lll,kkk,iii)-s3
8522 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s1+s2+s4)
8524 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s2+s4)
8527 derx(lll,kkk,iii)=derx(lll,kkk,iii)-s3
8529 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-s3
8537 c----------------------------------------------------------------------------
8538 double precision function eello_turn6(i,jj,kk)
8539 implicit real*8 (a-h,o-z)
8540 include 'DIMENSIONS'
8541 include 'COMMON.IOUNITS'
8542 include 'COMMON.CHAIN'
8543 include 'COMMON.DERIV'
8544 include 'COMMON.INTERACT'
8545 include 'COMMON.CONTACTS'
8546 include 'COMMON.TORSION'
8547 include 'COMMON.VAR'
8548 include 'COMMON.GEO'
8549 double precision vtemp1(2),vtemp2(2),vtemp3(2),vtemp4(2),
8550 & atemp(2,2),auxmat(2,2),achuj_temp(2,2),gtemp(2,2),gvec(2),
8552 double precision vtemp1d(2),vtemp2d(2),vtemp3d(2),vtemp4d(2),
8553 & atempd(2,2),auxmatd(2,2),achuj_tempd(2,2),gtempd(2,2),gvecd(2)
8554 C 4/7/01 AL Components s1, s8, and s13 were removed, because they pertain to
8555 C the respective energy moment and not to the cluster cumulant.
8564 iti=itortyp(itype(i))
8565 itk=itortyp(itype(k))
8566 itk1=itortyp(itype(k+1))
8567 itl=itortyp(itype(l))
8568 itj=itortyp(itype(j))
8569 cd write (2,*) 'itk',itk,' itk1',itk1,' itl',itl,' itj',itj
8570 cd write (2,*) 'i',i,' k',k,' j',j,' l',l
8571 cd if (i.ne.1 .or. j.ne.3 .or. k.ne.2 .or. l.ne.4) then
8576 cd & 'EELLO6: Contacts have occurred for peptide groups',i,j,
8578 cd call checkint_turn6(i,jj,kk,eel_turn6_num)
8582 derx_turn(lll,kkk,iii)=0.0d0
8589 eello6_5=eello6_graph4(l,k,j,i,kk,jj,2,.true.)
8591 cd write (2,*) 'eello6_5',eello6_5
8593 call transpose2(AEA(1,1,1),auxmat(1,1))
8594 call matmat2(EUg(1,1,i+1),auxmat(1,1),auxmat(1,1))
8595 ss1=scalar2(Ub2(1,i+2),b1(1,itl))
8596 s1 = (auxmat(1,1)+auxmat(2,2))*ss1
8598 call matvec2(EUg(1,1,i+2),b1(1,itl),vtemp1(1))
8599 call matvec2(AEA(1,1,1),vtemp1(1),vtemp1(1))
8600 s2 = scalar2(b1(1,itk),vtemp1(1))
8602 call transpose2(AEA(1,1,2),atemp(1,1))
8603 call matmat2(atemp(1,1),EUg(1,1,i+4),atemp(1,1))
8604 call matvec2(Ug2(1,1,i+2),dd(1,1,itk1),vtemp2(1))
8605 s8 = -(atemp(1,1)+atemp(2,2))*scalar2(cc(1,1,itl),vtemp2(1))
8607 call matmat2(EUg(1,1,i+3),AEA(1,1,2),auxmat(1,1))
8608 call matvec2(auxmat(1,1),Ub2(1,i+4),vtemp3(1))
8609 s12 = scalar2(Ub2(1,i+2),vtemp3(1))
8611 call transpose2(a_chuj(1,1,kk,i+1),achuj_temp(1,1))
8612 call matmat2(achuj_temp(1,1),EUg(1,1,i+2),gtemp(1,1))
8613 call matmat2(gtemp(1,1),EUg(1,1,i+3),gtemp(1,1))
8614 call matvec2(a_chuj(1,1,jj,i),Ub2(1,i+4),vtemp4(1))
8615 ss13 = scalar2(b1(1,itk),vtemp4(1))
8616 s13 = (gtemp(1,1)+gtemp(2,2))*ss13
8618 c write (2,*) 's1,s2,s8,s12,s13',s1,s2,s8,s12,s13
8624 eel_turn6 = eello6_5 - 0.5d0*(s1+s2+s12+s8+s13)
8625 C Derivatives in gamma(i+2)
8629 call transpose2(AEA(1,1,1),auxmatd(1,1))
8630 call matmat2(EUgder(1,1,i+1),auxmatd(1,1),auxmatd(1,1))
8631 s1d = (auxmatd(1,1)+auxmatd(2,2))*ss1
8632 call transpose2(AEAderg(1,1,2),atempd(1,1))
8633 call matmat2(atempd(1,1),EUg(1,1,i+4),atempd(1,1))
8634 s8d = -(atempd(1,1)+atempd(2,2))*scalar2(cc(1,1,itl),vtemp2(1))
8636 call matmat2(EUg(1,1,i+3),AEAderg(1,1,2),auxmatd(1,1))
8637 call matvec2(auxmatd(1,1),Ub2(1,i+4),vtemp3d(1))
8638 s12d = scalar2(Ub2(1,i+2),vtemp3d(1))
8644 gel_loc_turn6(i)=gel_loc_turn6(i)-0.5d0*ekont*(s1d+s8d+s12d)
8645 C Derivatives in gamma(i+3)
8647 call transpose2(AEA(1,1,1),auxmatd(1,1))
8648 call matmat2(EUg(1,1,i+1),auxmatd(1,1),auxmatd(1,1))
8649 ss1d=scalar2(Ub2der(1,i+2),b1(1,itl))
8650 s1d = (auxmatd(1,1)+auxmatd(2,2))*ss1d
8652 call matvec2(EUgder(1,1,i+2),b1(1,itl),vtemp1d(1))
8653 call matvec2(AEA(1,1,1),vtemp1d(1),vtemp1d(1))
8654 s2d = scalar2(b1(1,itk),vtemp1d(1))
8656 call matvec2(Ug2der(1,1,i+2),dd(1,1,itk1),vtemp2d(1))
8657 s8d = -(atemp(1,1)+atemp(2,2))*scalar2(cc(1,1,itl),vtemp2d(1))
8659 s12d = scalar2(Ub2der(1,i+2),vtemp3(1))
8661 call matmat2(achuj_temp(1,1),EUgder(1,1,i+2),gtempd(1,1))
8662 call matmat2(gtempd(1,1),EUg(1,1,i+3),gtempd(1,1))
8663 s13d = (gtempd(1,1)+gtempd(2,2))*ss13
8671 gel_loc_turn6(i+1)=gel_loc_turn6(i+1)
8672 & -0.5d0*ekont*(s1d+s2d+s8d+s12d+s13d)
8674 gel_loc_turn6(i+1)=gel_loc_turn6(i+1)
8675 & -0.5d0*ekont*(s2d+s12d)
8677 C Derivatives in gamma(i+4)
8678 call matmat2(EUgder(1,1,i+3),AEA(1,1,2),auxmatd(1,1))
8679 call matvec2(auxmatd(1,1),Ub2(1,i+4),vtemp3d(1))
8680 s12d = scalar2(Ub2(1,i+2),vtemp3d(1))
8682 call matmat2(achuj_temp(1,1),EUg(1,1,i+2),gtempd(1,1))
8683 call matmat2(gtempd(1,1),EUgder(1,1,i+3),gtempd(1,1))
8684 s13d = (gtempd(1,1)+gtempd(2,2))*ss13
8692 gel_loc_turn6(i+2)=gel_loc_turn6(i+2)-0.5d0*ekont*(s12d+s13d)
8694 gel_loc_turn6(i+2)=gel_loc_turn6(i+2)-0.5d0*ekont*(s12d)
8696 C Derivatives in gamma(i+5)
8698 call transpose2(AEAderg(1,1,1),auxmatd(1,1))
8699 call matmat2(EUg(1,1,i+1),auxmatd(1,1),auxmatd(1,1))
8700 s1d = (auxmatd(1,1)+auxmatd(2,2))*ss1
8702 call matvec2(EUg(1,1,i+2),b1(1,itl),vtemp1d(1))
8703 call matvec2(AEAderg(1,1,1),vtemp1d(1),vtemp1d(1))
8704 s2d = scalar2(b1(1,itk),vtemp1d(1))
8706 call transpose2(AEA(1,1,2),atempd(1,1))
8707 call matmat2(atempd(1,1),EUgder(1,1,i+4),atempd(1,1))
8708 s8d = -(atempd(1,1)+atempd(2,2))*scalar2(cc(1,1,itl),vtemp2(1))
8710 call matvec2(auxmat(1,1),Ub2der(1,i+4),vtemp3d(1))
8711 s12d = scalar2(Ub2(1,i+2),vtemp3d(1))
8713 call matvec2(a_chuj(1,1,jj,i),Ub2der(1,i+4),vtemp4d(1))
8714 ss13d = scalar2(b1(1,itk),vtemp4d(1))
8715 s13d = (gtemp(1,1)+gtemp(2,2))*ss13d
8723 gel_loc_turn6(i+3)=gel_loc_turn6(i+3)
8724 & -0.5d0*ekont*(s1d+s2d+s8d+s12d+s13d)
8726 gel_loc_turn6(i+3)=gel_loc_turn6(i+3)
8727 & -0.5d0*ekont*(s2d+s12d)
8729 C Cartesian derivatives
8734 call transpose2(AEAderx(1,1,lll,kkk,iii,1),auxmatd(1,1))
8735 call matmat2(EUg(1,1,i+1),auxmatd(1,1),auxmatd(1,1))
8736 s1d = (auxmatd(1,1)+auxmatd(2,2))*ss1
8738 call matvec2(EUg(1,1,i+2),b1(1,itl),vtemp1(1))
8739 call matvec2(AEAderx(1,1,lll,kkk,iii,1),vtemp1(1),
8741 s2d = scalar2(b1(1,itk),vtemp1d(1))
8743 call transpose2(AEAderx(1,1,lll,kkk,iii,2),atempd(1,1))
8744 call matmat2(atempd(1,1),EUg(1,1,i+4),atempd(1,1))
8745 s8d = -(atempd(1,1)+atempd(2,2))*
8746 & scalar2(cc(1,1,itl),vtemp2(1))
8748 call matmat2(EUg(1,1,i+3),AEAderx(1,1,lll,kkk,iii,2),
8750 call matvec2(auxmatd(1,1),Ub2(1,i+4),vtemp3d(1))
8751 s12d = scalar2(Ub2(1,i+2),vtemp3d(1))
8758 derx_turn(lll,kkk,iii) = derx_turn(lll,kkk,iii)
8761 derx_turn(lll,kkk,iii) = derx_turn(lll,kkk,iii)
8765 derx_turn(lll,kkk,3-iii) = derx_turn(lll,kkk,3-iii)
8766 & - 0.5d0*(s8d+s12d)
8768 derx_turn(lll,kkk,3-iii) = derx_turn(lll,kkk,3-iii)
8777 call transpose2(a_chuj_der(1,1,lll,kkk,kk,i+1),
8779 call matmat2(achuj_tempd(1,1),EUg(1,1,i+2),gtempd(1,1))
8780 call matmat2(gtempd(1,1),EUg(1,1,i+3),gtempd(1,1))
8781 s13d=(gtempd(1,1)+gtempd(2,2))*ss13
8782 derx_turn(lll,kkk,2) = derx_turn(lll,kkk,2)-0.5d0*s13d
8783 call matvec2(a_chuj_der(1,1,lll,kkk,jj,i),Ub2(1,i+4),
8785 ss13d = scalar2(b1(1,itk),vtemp4d(1))
8786 s13d = (gtemp(1,1)+gtemp(2,2))*ss13d
8787 derx_turn(lll,kkk,1) = derx_turn(lll,kkk,1)-0.5d0*s13d
8791 cd write(iout,*) 'eel6_turn6',eel_turn6,' eel_turn6_num',
8792 cd & 16*eel_turn6_num
8794 if (j.lt.nres-1) then
8801 if (l.lt.nres-1) then
8809 cgrad ggg1(ll)=eel_turn6*g_contij(ll,1)
8810 cgrad ggg2(ll)=eel_turn6*g_contij(ll,2)
8811 cgrad ghalf=0.5d0*ggg1(ll)
8813 gturn6ij=eel_turn6*g_contij(ll,1)+ekont*derx_turn(ll,1,1)
8814 gturn6kl=eel_turn6*g_contij(ll,2)+ekont*derx_turn(ll,1,2)
8815 gcorr6_turn(ll,i)=gcorr6_turn(ll,i)!+ghalf
8816 & +ekont*derx_turn(ll,2,1)
8817 gcorr6_turn(ll,i+1)=gcorr6_turn(ll,i+1)+ekont*derx_turn(ll,3,1)
8818 gcorr6_turn(ll,j)=gcorr6_turn(ll,j)!+ghalf
8819 & +ekont*derx_turn(ll,4,1)
8820 gcorr6_turn(ll,j1)=gcorr6_turn(ll,j1)+ekont*derx_turn(ll,5,1)
8821 gcorr6_turn_long(ll,j)=gcorr6_turn_long(ll,j)+gturn6ij
8822 gcorr6_turn_long(ll,i)=gcorr6_turn_long(ll,i)-gturn6ij
8823 cgrad ghalf=0.5d0*ggg2(ll)
8825 gcorr6_turn(ll,k)=gcorr6_turn(ll,k)!+ghalf
8826 & +ekont*derx_turn(ll,2,2)
8827 gcorr6_turn(ll,k+1)=gcorr6_turn(ll,k+1)+ekont*derx_turn(ll,3,2)
8828 gcorr6_turn(ll,l)=gcorr6_turn(ll,l)!+ghalf
8829 & +ekont*derx_turn(ll,4,2)
8830 gcorr6_turn(ll,l1)=gcorr6_turn(ll,l1)+ekont*derx_turn(ll,5,2)
8831 gcorr6_turn_long(ll,l)=gcorr6_turn_long(ll,l)+gturn6kl
8832 gcorr6_turn_long(ll,k)=gcorr6_turn_long(ll,k)-gturn6kl
8837 cgrad gcorr6_turn(ll,m)=gcorr6_turn(ll,m)+ggg1(ll)
8842 cgrad gcorr6_turn(ll,m)=gcorr6_turn(ll,m)+ggg2(ll)
8848 cgrad gcorr6_turn(ll,m)=gcorr6_turn(ll,m)+ekont*derx_turn(ll,1,1)
8853 cgrad gcorr6_turn(ll,m)=gcorr6_turn(ll,m)+ekont*derx_turn(ll,1,2)
8857 cd write (2,*) iii,g_corr6_loc(iii)
8859 eello_turn6=ekont*eel_turn6
8860 cd write (2,*) 'ekont',ekont
8861 cd write (2,*) 'eel_turn6',ekont*eel_turn6
8865 C-----------------------------------------------------------------------------
8866 double precision function scalar(u,v)
8867 !DIR$ INLINEALWAYS scalar
8869 cDEC$ ATTRIBUTES FORCEINLINE::scalar
8872 double precision u(3),v(3)
8873 cd double precision sc
8881 scalar=u(1)*v(1)+u(2)*v(2)+u(3)*v(3)
8884 crc-------------------------------------------------
8885 SUBROUTINE MATVEC2(A1,V1,V2)
8886 !DIR$ INLINEALWAYS MATVEC2
8888 cDEC$ ATTRIBUTES FORCEINLINE::MATVEC2
8890 implicit real*8 (a-h,o-z)
8891 include 'DIMENSIONS'
8892 DIMENSION A1(2,2),V1(2),V2(2)
8896 c 3 VI=VI+A1(I,K)*V1(K)
8900 vaux1=a1(1,1)*v1(1)+a1(1,2)*v1(2)
8901 vaux2=a1(2,1)*v1(1)+a1(2,2)*v1(2)
8906 C---------------------------------------
8907 SUBROUTINE MATMAT2(A1,A2,A3)
8909 cDEC$ ATTRIBUTES FORCEINLINE::MATMAT2
8911 implicit real*8 (a-h,o-z)
8912 include 'DIMENSIONS'
8913 DIMENSION A1(2,2),A2(2,2),A3(2,2)
8914 c DIMENSION AI3(2,2)
8918 c A3IJ=A3IJ+A1(I,K)*A2(K,J)
8924 ai3_11=a1(1,1)*a2(1,1)+a1(1,2)*a2(2,1)
8925 ai3_12=a1(1,1)*a2(1,2)+a1(1,2)*a2(2,2)
8926 ai3_21=a1(2,1)*a2(1,1)+a1(2,2)*a2(2,1)
8927 ai3_22=a1(2,1)*a2(1,2)+a1(2,2)*a2(2,2)
8935 c-------------------------------------------------------------------------
8936 double precision function scalar2(u,v)
8937 !DIR$ INLINEALWAYS scalar2
8939 double precision u(2),v(2)
8942 scalar2=u(1)*v(1)+u(2)*v(2)
8946 C-----------------------------------------------------------------------------
8948 subroutine transpose2(a,at)
8949 !DIR$ INLINEALWAYS transpose2
8951 cDEC$ ATTRIBUTES FORCEINLINE::transpose2
8954 double precision a(2,2),at(2,2)
8961 c--------------------------------------------------------------------------
8962 subroutine transpose(n,a,at)
8965 double precision a(n,n),at(n,n)
8973 C---------------------------------------------------------------------------
8974 subroutine prodmat3(a1,a2,kk,transp,prod)
8975 !DIR$ INLINEALWAYS prodmat3
8977 cDEC$ ATTRIBUTES FORCEINLINE::prodmat3
8981 double precision a1(2,2),a2(2,2),a2t(2,2),kk(2,2),prod(2,2)
8983 crc double precision auxmat(2,2),prod_(2,2)
8986 crc call transpose2(kk(1,1),auxmat(1,1))
8987 crc call matmat2(a1(1,1),auxmat(1,1),auxmat(1,1))
8988 crc call matmat2(auxmat(1,1),a2(1,1),prod_(1,1))
8990 prod(1,1)=(a1(1,1)*kk(1,1)+a1(1,2)*kk(1,2))*a2(1,1)
8991 & +(a1(1,1)*kk(2,1)+a1(1,2)*kk(2,2))*a2(2,1)
8992 prod(1,2)=(a1(1,1)*kk(1,1)+a1(1,2)*kk(1,2))*a2(1,2)
8993 & +(a1(1,1)*kk(2,1)+a1(1,2)*kk(2,2))*a2(2,2)
8994 prod(2,1)=(a1(2,1)*kk(1,1)+a1(2,2)*kk(1,2))*a2(1,1)
8995 & +(a1(2,1)*kk(2,1)+a1(2,2)*kk(2,2))*a2(2,1)
8996 prod(2,2)=(a1(2,1)*kk(1,1)+a1(2,2)*kk(1,2))*a2(1,2)
8997 & +(a1(2,1)*kk(2,1)+a1(2,2)*kk(2,2))*a2(2,2)
9000 crc call matmat2(a1(1,1),kk(1,1),auxmat(1,1))
9001 crc call matmat2(auxmat(1,1),a2(1,1),prod_(1,1))
9003 prod(1,1)=(a1(1,1)*kk(1,1)+a1(1,2)*kk(2,1))*a2(1,1)
9004 & +(a1(1,1)*kk(1,2)+a1(1,2)*kk(2,2))*a2(2,1)
9005 prod(1,2)=(a1(1,1)*kk(1,1)+a1(1,2)*kk(2,1))*a2(1,2)
9006 & +(a1(1,1)*kk(1,2)+a1(1,2)*kk(2,2))*a2(2,2)
9007 prod(2,1)=(a1(2,1)*kk(1,1)+a1(2,2)*kk(2,1))*a2(1,1)
9008 & +(a1(2,1)*kk(1,2)+a1(2,2)*kk(2,2))*a2(2,1)
9009 prod(2,2)=(a1(2,1)*kk(1,1)+a1(2,2)*kk(2,1))*a2(1,2)
9010 & +(a1(2,1)*kk(1,2)+a1(2,2)*kk(2,2))*a2(2,2)
9013 c call transpose2(a2(1,1),a2t(1,1))
9016 crc print *,((prod_(i,j),i=1,2),j=1,2)
9017 crc print *,((prod(i,j),i=1,2),j=1,2)