1 subroutine etotal(energia)
2 implicit real*8 (a-h,o-z)
7 cMS$ATTRIBUTES C :: proc_proc
12 double precision weights_(n_ene)
14 include 'COMMON.SETUP'
15 include 'COMMON.IOUNITS'
16 double precision energia(0:n_ene)
17 include 'COMMON.LOCAL'
18 include 'COMMON.FFIELD'
19 include 'COMMON.DERIV'
20 include 'COMMON.INTERACT'
21 include 'COMMON.SBRIDGE'
22 include 'COMMON.CHAIN'
25 include 'COMMON.CONTROL'
26 include 'COMMON.TIME1'
28 c print*,"ETOTAL Processor",fg_rank," absolute rank",myrank,
29 c & " nfgtasks",nfgtasks
30 if (nfgtasks.gt.1) then
32 C FG slaves call the following matching MPI_Bcast in ERGASTULUM
33 if (fg_rank.eq.0) then
34 call MPI_Bcast(0,1,MPI_INTEGER,king,FG_COMM,IERROR)
35 c print *,"Processor",myrank," BROADCAST iorder"
36 C FG master sets up the WEIGHTS_ array which will be broadcast to the
37 C FG slaves as WEIGHTS array.
57 C FG Master broadcasts the WEIGHTS_ array
58 call MPI_Bcast(weights_(1),n_ene,
59 & MPI_DOUBLE_PRECISION,king,FG_COMM,IERROR)
61 C FG slaves receive the WEIGHTS array
62 call MPI_Bcast(weights(1),n_ene,
63 & MPI_DOUBLE_PRECISION,king,FG_COMM,IERROR)
84 time_Bcast=time_Bcast+MPI_Wtime()-time00
85 time_Bcastw=time_Bcastw+MPI_Wtime()-time00
86 c call chainbuild_cart
88 c print *,'Processor',myrank,' calling etotal ipot=',ipot
89 c print *,'Processor',myrank,' nnt=',nnt,' nct=',nct
91 c if (modecalc.eq.12.or.modecalc.eq.14) then
92 c call int_from_cart1(.false.)
99 C Compute the side-chain and electrostatic interaction energy
101 goto (101,102,103,104,105,106) ipot
102 C Lennard-Jones potential.
104 cd print '(a)','Exit ELJ'
106 C Lennard-Jones-Kihara potential (shifted).
109 C Berne-Pechukas potential (dilated LJ, angular dependence).
112 C Gay-Berne potential (shifted LJ, angular dependence).
115 C Gay-Berne-Vorobjev potential (shifted LJ, angular dependence).
118 C Soft-sphere potential
119 106 call e_softsphere(evdw)
121 C Calculate electrostatic (H-bonding) energy of the main chain.
124 c print *,"Processor",myrank," computed USCSC"
130 time_vec=time_vec+MPI_Wtime()-time01
132 c print *,"Processor",myrank," left VEC_AND_DERIV"
135 if (welec.gt.0d0.or.wvdwpp.gt.0d0.or.wel_loc.gt.0d0.or.
136 & wturn3.gt.0d0.or.wturn4.gt.0d0 .or. wcorr.gt.0.0d0
137 & .or. wcorr4.gt.0.0d0 .or. wcorr5.gt.0.d0
138 & .or. wcorr6.gt.0.0d0 .or. wturn6.gt.0.0d0 ) then
140 if (welec.gt.0d0.or.wel_loc.gt.0d0.or.
141 & wturn3.gt.0d0.or.wturn4.gt.0d0 .or. wcorr.gt.0.0d0
142 & .or. wcorr4.gt.0.0d0 .or. wcorr5.gt.0.d0
143 & .or. wcorr6.gt.0.0d0 .or. wturn6.gt.0.0d0 ) then
145 call eelec(ees,evdw1,eel_loc,eello_turn3,eello_turn4)
154 c write (iout,*) "Soft-spheer ELEC potential"
155 call eelec_soft_sphere(ees,evdw1,eel_loc,eello_turn3,
158 c print *,"Processor",myrank," computed UELEC"
160 C Calculate excluded-volume interaction energy between peptide groups
165 call escp(evdw2,evdw2_14)
171 c write (iout,*) "Soft-sphere SCP potential"
172 call escp_soft_sphere(evdw2,evdw2_14)
175 c Calculate the bond-stretching energy
179 C Calculate the disulfide-bridge and other energy and the contributions
180 C from other distance constraints.
181 cd print *,'Calling EHPB'
183 cd print *,'EHPB exitted succesfully.'
185 C Calculate the virtual-bond-angle energy.
187 if (wang.gt.0d0) then
192 c print *,"Processor",myrank," computed UB"
194 C Calculate the SC local energy.
197 c print *,"Processor",myrank," computed USC"
199 C Calculate the virtual-bond torsional energy.
201 cd print *,'nterm=',nterm
203 call etor(etors,edihcnstr)
208 c print *,"Processor",myrank," computed Utor"
210 C 6/23/01 Calculate double-torsional energy
212 if (wtor_d.gt.0) then
217 c print *,"Processor",myrank," computed Utord"
219 C 21/5/07 Calculate local sicdechain correlation energy
221 if (wsccor.gt.0.0d0) then
222 call eback_sc_corr(esccor)
226 c print *,"Processor",myrank," computed Usccorr"
228 C 12/1/95 Multi-body terms
232 if ((wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0
233 & .or. wturn6.gt.0.0d0) .and. ipot.lt.6) then
234 call multibody_eello(ecorr,ecorr5,ecorr6,eturn6,n_corr,n_corr1)
235 cd write(2,*)'multibody_eello n_corr=',n_corr,' n_corr1=',n_corr1,
236 cd &" ecorr",ecorr," ecorr5",ecorr5," ecorr6",ecorr6," eturn6",eturn6
243 if ((wcorr4.eq.0.0d0 .and. wcorr.gt.0.0d0) .and. ipot.lt.6) then
244 call multibody_hb(ecorr,ecorr5,ecorr6,n_corr,n_corr1)
245 cd write (iout,*) "multibody_hb ecorr",ecorr
247 c print *,"Processor",myrank," computed Ucorr"
249 C If performing constraint dynamics, call the constraint energy
250 C after the equilibration time
251 if(usampl.and.totT.gt.eq_time) then
259 time_enecalc=time_enecalc+MPI_Wtime()-time00
261 c print *,"Processor",myrank," computed Uconstr"
270 energia(2)=evdw2-evdw2_14
287 energia(8)=eello_turn3
288 energia(9)=eello_turn4
295 energia(19)=edihcnstr
297 energia(20)=Uconst+Uconst_back
299 c print *," Processor",myrank," calls SUM_ENERGY"
300 call sum_energy(energia,.true.)
301 c print *," Processor",myrank," left SUM_ENERGY"
303 time_sumene=time_sumene+MPI_Wtime()-time00
307 c-------------------------------------------------------------------------------
308 subroutine sum_energy(energia,reduce)
309 implicit real*8 (a-h,o-z)
314 cMS$ATTRIBUTES C :: proc_proc
320 include 'COMMON.SETUP'
321 include 'COMMON.IOUNITS'
322 double precision energia(0:n_ene),enebuff(0:n_ene+1)
323 include 'COMMON.FFIELD'
324 include 'COMMON.DERIV'
325 include 'COMMON.INTERACT'
326 include 'COMMON.SBRIDGE'
327 include 'COMMON.CHAIN'
329 include 'COMMON.CONTROL'
330 include 'COMMON.TIME1'
333 if (nfgtasks.gt.1 .and. reduce) then
335 write (iout,*) "energies before REDUCE"
336 call enerprint(energia)
340 enebuff(i)=energia(i)
343 call MPI_Barrier(FG_COMM,IERR)
344 time_barrier_e=time_barrier_e+MPI_Wtime()-time00
346 call MPI_Reduce(enebuff(0),energia(0),n_ene+1,
347 & MPI_DOUBLE_PRECISION,MPI_SUM,king,FG_COMM,IERR)
349 write (iout,*) "energies after REDUCE"
350 call enerprint(energia)
353 time_Reduce=time_Reduce+MPI_Wtime()-time00
355 if (fg_rank.eq.0) then
359 evdw2=energia(2)+energia(18)
375 eello_turn3=energia(8)
376 eello_turn4=energia(9)
383 edihcnstr=energia(19)
388 etot=wsc*evdw+wscp*evdw2+welec*ees+wvdwpp*evdw1
389 & +wang*ebe+wtor*etors+wscloc*escloc
390 & +wstrain*ehpb+nss*ebr+wcorr*ecorr+wcorr5*ecorr5
391 & +wcorr6*ecorr6+wturn4*eello_turn4+wturn3*eello_turn3
392 & +wturn6*eturn6+wel_loc*eel_loc+edihcnstr+wtor_d*etors_d
393 & +wbond*estr+Uconst+wsccor*esccor
395 etot=wsc*evdw+wscp*evdw2+welec*(ees+evdw1)
396 & +wang*ebe+wtor*etors+wscloc*escloc
397 & +wstrain*ehpb+nss*ebr+wcorr*ecorr+wcorr5*ecorr5
398 & +wcorr6*ecorr6+wturn4*eello_turn4+wturn3*eello_turn3
399 & +wturn6*eturn6+wel_loc*eel_loc+edihcnstr+wtor_d*etors_d
400 & +wbond*estr+Uconst+wsccor*esccor
406 if (isnan(etot).ne.0) energia(0)=1.0d+99
408 if (isnan(etot)) energia(0)=1.0d+99
413 idumm=proc_proc(etot,i)
415 call proc_proc(etot,i)
417 if(i.eq.1)energia(0)=1.0d+99
424 c-------------------------------------------------------------------------------
425 subroutine sum_gradient
426 implicit real*8 (a-h,o-z)
431 cMS$ATTRIBUTES C :: proc_proc
436 double precision gradbufc(3,maxres),gradbufx(3,maxres),
437 & glocbuf(4*maxres),gradbufc_sum(3,maxres)
439 include 'COMMON.SETUP'
440 include 'COMMON.IOUNITS'
441 include 'COMMON.FFIELD'
442 include 'COMMON.DERIV'
443 include 'COMMON.INTERACT'
444 include 'COMMON.SBRIDGE'
445 include 'COMMON.CHAIN'
447 include 'COMMON.CONTROL'
448 include 'COMMON.TIME1'
449 include 'COMMON.MAXGRAD'
454 write (iout,*) "sum_gradient gvdwc, gvdwx"
456 write (iout,'(i3,3f10.5,5x,3f10.5,5x,f10.5)')
457 & i,(gvdwx(j,i),j=1,3),(gvdwc(j,i),j=1,3)
462 C FG slaves call the following matching MPI_Bcast in ERGASTULUM
463 if (nfgtasks.gt.1 .and. fg_rank.eq.0)
464 & call MPI_Bcast(1,1,MPI_INTEGER,king,FG_COMM,IERROR)
467 C 9/29/08 AL Transform parts of gradients in site coordinates to the gradient
468 C in virtual-bond-vector coordinates
471 c write (iout,*) "gel_loc gel_loc_long and gel_loc_loc"
473 c write (iout,'(i5,3f10.5,2x,3f10.5,2x,f10.5)')
474 c & i,(gel_loc(j,i),j=1,3),(gel_loc_long(j,i),j=1,3),gel_loc_loc(i)
476 c write (iout,*) "gel_loc_tur3 gel_loc_turn4"
478 c write (iout,'(i5,3f10.5,2x,f10.5)')
479 c & i,(gcorr4_turn(j,i),j=1,3),gel_loc_turn4(i)
481 write (iout,*) "gradcorr5 gradcorr5_long gradcorr5_loc"
483 write (iout,'(i3,3f10.5,5x,3f10.5,5x,f10.5)')
484 & i,(gradcorr5(j,i),j=1,3),(gradcorr5_long(j,i),j=1,3),
492 gradbufc(j,i)=wsc*gvdwc(j,i)+
493 & wscp*(gvdwc_scp(j,i)+gvdwc_scpp(j,i))+
494 & welec*gelc_long(j,i)+wvdwpp*gvdwpp(j,i)+
495 & wel_loc*gel_loc_long(j,i)+
496 & wcorr*gradcorr_long(j,i)+
497 & wcorr5*gradcorr5_long(j,i)+
498 & wcorr6*gradcorr6_long(j,i)+
499 & wturn6*gcorr6_turn_long(j,i)+
506 gradbufc(j,i)=wsc*gvdwc(j,i)+
507 & wscp*(gvdwc_scp(j,i)+gvdwc_scpp(j,i))+
508 & welec*gelc_long(j,i)+
510 & wel_loc*gel_loc_long(j,i)+
511 & wcorr*gradcorr_long(j,i)+
512 & wcorr5*gradcorr5_long(j,i)+
513 & wcorr6*gradcorr6_long(j,i)+
514 & wturn6*gcorr6_turn_long(j,i)+
520 if (nfgtasks.gt.1) then
523 write (iout,*) "gradbufc before allreduce"
525 write (iout,'(i3,3f10.5)') i,(gradbufc(j,i),j=1,3)
529 call MPI_AllReduce(gradbufc(1,1),gradbufc_sum(1,1),3*nres,
530 & MPI_DOUBLE_PRECISION,MPI_SUM,FG_COMM,IERR)
531 time_reduce=time_reduce+MPI_Wtime()-time00
533 write (iout,*) "gradbufc_sum after allreduce"
535 write (iout,'(i3,3f10.5)') i,(gradbufc_sum(j,i),j=1,3)
540 time_allreduce=time_allreduce+MPI_Wtime()-time00
548 write (iout,*) "igrad_start",igrad_start," igrad_end",igrad_end
549 write (iout,*) (i," jgrad_start",jgrad_start(i),
550 & " jgrad_end ",jgrad_end(i),
551 & i=igrad_start,igrad_end)
554 c Obsolete and inefficient code; we can make the effort O(n) and, therefore,
555 c do not parallelize this part.
557 c do i=igrad_start,igrad_end
558 c do j=jgrad_start(i),jgrad_end(i)
560 c gradbufc(k,i)=gradbufc(k,i)+gradbufc_sum(k,j)
565 gradbufc(j,nres-1)=gradbufc_sum(j,nres)
569 gradbufc(j,i)=gradbufc(j,i+1)+gradbufc_sum(j,i+1)
573 write (iout,*) "gradbufc after summing"
575 write (iout,'(i3,3f10.5)') i,(gradbufc(j,i),j=1,3)
582 write (iout,*) "gradbufc"
584 write (iout,'(i3,3f10.5)') i,(gradbufc(j,i),j=1,3)
590 gradbufc_sum(j,i)=gradbufc(j,i)
595 gradbufc(j,nres-1)=gradbufc_sum(j,nres)
599 gradbufc(j,i)=gradbufc(j,i+1)+gradbufc_sum(j,i+1)
604 c gradbufc(k,i)=0.0d0
608 c gradbufc(k,i)=gradbufc(k,i)+gradbufc(k,j)
613 write (iout,*) "gradbufc after summing"
615 write (iout,'(i3,3f10.5)') i,(gradbufc(j,i),j=1,3)
623 gradbufc(k,nres)=0.0d0
628 c gradc(j,i,icg)=gradbufc(j,i)+welec*gelc(j,i)+
629 gradc(j,i,icg)=welec*gelc(j,i)+
630 & wel_loc*gel_loc(j,i)+
631 & 0.5d0*(wscp*gvdwc_scpp(j,i)+
632 & welec*gelc_long(j,i)+wvdwpp*gvdwpp(j,i)+
633 & wel_loc*gel_loc_long(j,i)+
634 & wcorr*gradcorr_long(j,i)+
635 & wcorr5*gradcorr5_long(j,i)+
636 & wcorr6*gradcorr6_long(j,i)+
637 & wturn6*gcorr6_turn_long(j,i))+
639 & wcorr*gradcorr(j,i)+
640 & wturn3*gcorr3_turn(j,i)+
641 & wturn4*gcorr4_turn(j,i)+
642 & wcorr5*gradcorr5(j,i)+
643 & wcorr6*gradcorr6(j,i)+
644 & wturn6*gcorr6_turn(j,i)+
645 & wsccor*gsccorc(j,i)
646 & +wscloc*gscloc(j,i)
648 c gradc(j,i,icg)=gradbufc(j,i)+welec*gelc(j,i)+
649 gradc(j,i,icg)=welec*gelc(j,i)+
650 & wel_loc*gel_loc(j,i)+
651 & 0.5d0*(wscp*gvdwc_scpp(j,i)+
652 & welec*gelc_long(j,i)
653 & wel_loc*gel_loc_long(j,i)+
654 & wcorr*gcorr_long(j,i)+
655 & wcorr5*gradcorr5_long(j,i)+
656 & wcorr6*gradcorr6_long(j,i)+
657 & wturn6*gcorr6_turn_long(j,i))+
659 & wcorr*gradcorr(j,i)+
660 & wturn3*gcorr3_turn(j,i)+
661 & wturn4*gcorr4_turn(j,i)+
662 & wcorr5*gradcorr5(j,i)+
663 & wcorr6*gradcorr6(j,i)+
664 & wturn6*gcorr6_turn(j,i)+
665 & wsccor*gsccorc(j,i)
666 & +wscloc*gscloc(j,i)
668 gradx(j,i,icg)=wsc*gvdwx(j,i)+wscp*gradx_scp(j,i)+
670 & wstrain*ghpbx(j,i)+wcorr*gradxorr(j,i)+
671 & wsccor*gsccorx(j,i)
672 & +wscloc*gsclocx(j,i)
676 write (iout,*) "gloc before adding corr"
678 write (iout,*) i,gloc(i,icg)
682 gloc(i,icg)=gloc(i,icg)+wcorr*gcorr_loc(i)
683 & +wcorr5*g_corr5_loc(i)
684 & +wcorr6*g_corr6_loc(i)
685 & +wturn4*gel_loc_turn4(i)
686 & +wturn3*gel_loc_turn3(i)
687 & +wturn6*gel_loc_turn6(i)
688 & +wel_loc*gel_loc_loc(i)
689 & +wsccor*gsccor_loc(i)
692 write (iout,*) "gloc after adding corr"
694 write (iout,*) i,gloc(i,icg)
698 if (nfgtasks.gt.1) then
701 gradbufc_sum(j,i)=gradc(j,i,icg)
702 gradbufx(j,i)=gradx(j,i,icg)
706 glocbuf(i)=gloc(i,icg)
709 call MPI_Barrier(FG_COMM,IERR)
710 time_barrier_g=time_barrier_g+MPI_Wtime()-time00
712 call MPI_Reduce(gradbufc_sum(1,1),gradc(1,1,icg),3*nres,
713 & MPI_DOUBLE_PRECISION,MPI_SUM,king,FG_COMM,IERR)
714 call MPI_Reduce(gradbufx(1,1),gradx(1,1,icg),3*nres,
715 & MPI_DOUBLE_PRECISION,MPI_SUM,king,FG_COMM,IERR)
716 call MPI_Reduce(glocbuf(1),gloc(1,icg),4*nres,
717 & MPI_DOUBLE_PRECISION,MPI_SUM,king,FG_COMM,IERR)
718 time_reduce=time_reduce+MPI_Wtime()-time00
720 write (iout,*) "gloc after reduce"
722 write (iout,*) i,gloc(i,icg)
729 gradc(j,i,icg)=gradc(j,i,icg)+gradbufc(j,i)
732 if (gnorm_check) then
734 c Compute the maximum elements of the gradient
744 gcorr3_turn_max=0.0d0
745 gcorr4_turn_max=0.0d0
748 gcorr6_turn_max=0.0d0
758 gvdwc_norm=dsqrt(scalar(gvdwc(1,i),gvdwc(1,i)))
759 if (gvdwc_norm.gt.gvdwc_max) gvdwc_max=gvdwc_norm
760 gvdwc_scp_norm=dsqrt(scalar(gvdwc_scp(1,i),gvdwc_scp(1,i)))
761 if (gvdwc_scp_norm.gt.gvdwc_scp_max)
762 & gvdwc_scp_max=gvdwc_scp_norm
763 gelc_norm=dsqrt(scalar(gelc(1,i),gelc(1,i)))
764 if (gelc_norm.gt.gelc_max) gelc_max=gelc_norm
765 gvdwpp_norm=dsqrt(scalar(gvdwpp(1,i),gvdwpp(1,i)))
766 if (gvdwpp_norm.gt.gvdwpp_max) gvdwpp_max=gvdwpp_norm
767 gradb_norm=dsqrt(scalar(gradb(1,i),gradb(1,i)))
768 if (gradb_norm.gt.gradb_max) gradb_max=gradb_norm
769 ghpbc_norm=dsqrt(scalar(ghpbc(1,i),ghpbc(1,i)))
770 if (ghpbc_norm.gt.ghpbc_max) ghpbc_max=ghpbc_norm
771 gradcorr_norm=dsqrt(scalar(gradcorr(1,i),gradcorr(1,i)))
772 if (gradcorr_norm.gt.gradcorr_max) gradcorr_max=gradcorr_norm
773 gel_loc_norm=dsqrt(scalar(gel_loc(1,i),gel_loc(1,i)))
774 if (gel_loc_norm.gt.gel_loc_max) gel_loc_max=gel_loc_norm
775 gcorr3_turn_norm=dsqrt(scalar(gcorr3_turn(1,i),
777 if (gcorr3_turn_norm.gt.gcorr3_turn_max)
778 & gcorr3_turn_max=gcorr3_turn_norm
779 gcorr4_turn_norm=dsqrt(scalar(gcorr4_turn(1,i),
781 if (gcorr4_turn_norm.gt.gcorr4_turn_max)
782 & gcorr4_turn_max=gcorr4_turn_norm
783 gradcorr5_norm=dsqrt(scalar(gradcorr5(1,i),gradcorr5(1,i)))
784 if (gradcorr5_norm.gt.gradcorr5_max)
785 & gradcorr5_max=gradcorr5_norm
786 gradcorr6_norm=dsqrt(scalar(gradcorr6(1,i),gradcorr6(1,i)))
787 if (gradcorr6_norm.gt.gradcorr6_max) gcorr6_max=gradcorr6_norm
788 gcorr6_turn_norm=dsqrt(scalar(gcorr6_turn(1,i),
790 if (gcorr6_turn_norm.gt.gcorr6_turn_max)
791 & gcorr6_turn_max=gcorr6_turn_norm
792 gsccorr_norm=dsqrt(scalar(gsccorc(1,i),gsccorc(1,i)))
793 if (gsccorr_norm.gt.gsccorr_max) gsccorr_max=gsccorr_norm
794 gscloc_norm=dsqrt(scalar(gscloc(1,i),gscloc(1,i)))
795 if (gscloc_norm.gt.gscloc_max) gscloc_max=gscloc_norm
796 gvdwx_norm=dsqrt(scalar(gvdwx(1,i),gvdwx(1,i)))
797 if (gvdwx_norm.gt.gvdwx_max) gvdwx_max=gvdwx_norm
798 gradx_scp_norm=dsqrt(scalar(gradx_scp(1,i),gradx_scp(1,i)))
799 if (gradx_scp_norm.gt.gradx_scp_max)
800 & gradx_scp_max=gradx_scp_norm
801 ghpbx_norm=dsqrt(scalar(ghpbx(1,i),ghpbx(1,i)))
802 if (ghpbx_norm.gt.ghpbx_max) ghpbx_max=ghpbx_norm
803 gradxorr_norm=dsqrt(scalar(gradxorr(1,i),gradxorr(1,i)))
804 if (gradxorr_norm.gt.gradxorr_max) gradxorr_max=gradxorr_norm
805 gsccorrx_norm=dsqrt(scalar(gsccorx(1,i),gsccorx(1,i)))
806 if (gsccorrx_norm.gt.gsccorrx_max) gsccorrx_max=gsccorrx_norm
807 gsclocx_norm=dsqrt(scalar(gsclocx(1,i),gsclocx(1,i)))
808 if (gsclocx_norm.gt.gsclocx_max) gsclocx_max=gsclocx_norm
812 open(istat,file=statname,position="append")
814 open(istat,file=statname,access="append")
816 write (istat,'(1h#,21f10.2)') gvdwc_max,gvdwc_scp_max,
817 & gelc_max,gvdwpp_max,gradb_max,ghpbc_max,
818 & gradcorr_max,gel_loc_max,gcorr3_turn_max,gcorr4_turn_max,
819 & gradcorr5_max,gradcorr6_max,gcorr6_turn_max,gsccorc_max,
820 & gscloc_max,gvdwx_max,gradx_scp_max,ghpbx_max,gradxorr_max,
821 & gsccorx_max,gsclocx_max
823 if (gvdwc_max.gt.1.0d4) then
824 write (iout,*) "gvdwc gvdwx gradb gradbx"
826 write(iout,'(i5,4(3f10.2,5x))') i,(gvdwc(j,i),gvdwx(j,i),
827 & gradb(j,i),gradbx(j,i),j=1,3)
829 call pdbout(0.0d0,'cipiszcze',iout)
835 write (iout,*) "gradc gradx gloc"
837 write (iout,'(i5,3f10.5,5x,3f10.5,5x,f10.5)')
838 & i,(gradc(j,i,icg),j=1,3),(gradx(j,i,icg),j=1,3),gloc(i,icg)
842 time_sumgradient=time_sumgradient+MPI_Wtime()-time01
846 c-------------------------------------------------------------------------------
847 subroutine rescale_weights(t_bath)
848 implicit real*8 (a-h,o-z)
850 include 'COMMON.IOUNITS'
851 include 'COMMON.FFIELD'
852 include 'COMMON.SBRIDGE'
853 double precision kfac /2.4d0/
854 double precision x,x2,x3,x4,x5,licznik /1.12692801104297249644/
856 c facT=2*temp0/(t_bath+temp0)
857 if (rescale_mode.eq.0) then
863 else if (rescale_mode.eq.1) then
864 facT=kfac/(kfac-1.0d0+t_bath/temp0)
865 facT2=kfac**2/(kfac**2-1.0d0+(t_bath/temp0)**2)
866 facT3=kfac**3/(kfac**3-1.0d0+(t_bath/temp0)**3)
867 facT4=kfac**4/(kfac**4-1.0d0+(t_bath/temp0)**4)
868 facT5=kfac**5/(kfac**5-1.0d0+(t_bath/temp0)**5)
869 else if (rescale_mode.eq.2) then
875 facT=licznik/dlog(dexp(x)+dexp(-x))
876 facT2=licznik/dlog(dexp(x2)+dexp(-x2))
877 facT3=licznik/dlog(dexp(x3)+dexp(-x3))
878 facT4=licznik/dlog(dexp(x4)+dexp(-x4))
879 facT5=licznik/dlog(dexp(x5)+dexp(-x5))
881 write (iout,*) "Wrong RESCALE_MODE",rescale_mode
882 write (*,*) "Wrong RESCALE_MODE",rescale_mode
884 call MPI_Finalize(MPI_COMM_WORLD,IERROR)
888 welec=weights(3)*fact
889 wcorr=weights(4)*fact3
890 wcorr5=weights(5)*fact4
891 wcorr6=weights(6)*fact5
892 wel_loc=weights(7)*fact2
893 wturn3=weights(8)*fact2
894 wturn4=weights(9)*fact3
895 wturn6=weights(10)*fact5
896 wtor=weights(13)*fact
897 wtor_d=weights(14)*fact2
898 wsccor=weights(21)*fact
902 C------------------------------------------------------------------------
903 subroutine enerprint(energia)
904 implicit real*8 (a-h,o-z)
906 include 'COMMON.IOUNITS'
907 include 'COMMON.FFIELD'
908 include 'COMMON.SBRIDGE'
910 double precision energia(0:n_ene)
915 evdw2=energia(2)+energia(18)
927 eello_turn3=energia(8)
928 eello_turn4=energia(9)
929 eello_turn6=energia(10)
935 edihcnstr=energia(19)
940 write (iout,10) evdw,wsc,evdw2,wscp,ees,welec,evdw1,wvdwpp,
941 & estr,wbond,ebe,wang,
942 & escloc,wscloc,etors,wtor,etors_d,wtor_d,ehpb,wstrain,
944 & ecorr5,wcorr5,ecorr6,wcorr6,eel_loc,wel_loc,eello_turn3,wturn3,
945 & eello_turn4,wturn4,eello_turn6,wturn6,esccor,wsccor,
948 10 format (/'Virtual-chain energies:'//
949 & 'EVDW= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC-SC)'/
950 & 'EVDW2= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC-p)'/
951 & 'EES= ',1pE16.6,' WEIGHT=',1pD16.6,' (p-p)'/
952 & 'EVDWPP=',1pE16.6,' WEIGHT=',1pD16.6,' (p-p VDW)'/
953 & 'ESTR= ',1pE16.6,' WEIGHT=',1pD16.6,' (stretching)'/
954 & 'EBE= ',1pE16.6,' WEIGHT=',1pD16.6,' (bending)'/
955 & 'ESC= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC local)'/
956 & 'ETORS= ',1pE16.6,' WEIGHT=',1pD16.6,' (torsional)'/
957 & 'ETORSD=',1pE16.6,' WEIGHT=',1pD16.6,' (double torsional)'/
958 & 'EHBP= ',1pE16.6,' WEIGHT=',1pD16.6,
959 & ' (SS bridges & dist. cnstr.)'/
960 & 'ECORR4=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
961 & 'ECORR5=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
962 & 'ECORR6=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
963 & 'EELLO= ',1pE16.6,' WEIGHT=',1pD16.6,' (electrostatic-local)'/
964 & 'ETURN3=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 3rd order)'/
965 & 'ETURN4=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 4th order)'/
966 & 'ETURN6=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 6th order)'/
967 & 'ESCCOR=',1pE16.6,' WEIGHT=',1pD16.6,' (backbone-rotamer corr)'/
968 & 'EDIHC= ',1pE16.6,' (dihedral angle constraints)'/
969 & 'ESS= ',1pE16.6,' (disulfide-bridge intrinsic energy)'/
970 & 'UCONST= ',1pE16.6,' (Constraint energy)'/
971 & 'ETOT= ',1pE16.6,' (total)')
973 write (iout,10) evdw,wsc,evdw2,wscp,ees,welec,
974 & estr,wbond,ebe,wang,
975 & escloc,wscloc,etors,wtor,etors_d,wtor_d,ehpb,wstrain,
977 & ecorr5,wcorr5,ecorr6,wcorr6,eel_loc,wel_loc,eello_turn3,wturn3,
978 & eello_turn4,wturn4,eello_turn6,wturn6,esccor,wsccro,edihcnstr,
979 & ebr*nss,Uconst,etot
980 10 format (/'Virtual-chain energies:'//
981 & 'EVDW= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC-SC)'/
982 & 'EVDW2= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC-p)'/
983 & 'EES= ',1pE16.6,' WEIGHT=',1pD16.6,' (p-p)'/
984 & 'ESTR= ',1pE16.6,' WEIGHT=',1pD16.6,' (stretching)'/
985 & 'EBE= ',1pE16.6,' WEIGHT=',1pD16.6,' (bending)'/
986 & 'ESC= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC local)'/
987 & 'ETORS= ',1pE16.6,' WEIGHT=',1pD16.6,' (torsional)'/
988 & 'ETORSD=',1pE16.6,' WEIGHT=',1pD16.6,' (double torsional)'/
989 & 'EHBP= ',1pE16.6,' WEIGHT=',1pD16.6,
990 & ' (SS bridges & dist. cnstr.)'/
991 & 'ECORR4=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
992 & 'ECORR5=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
993 & 'ECORR6=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
994 & 'EELLO= ',1pE16.6,' WEIGHT=',1pD16.6,' (electrostatic-local)'/
995 & 'ETURN3=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 3rd order)'/
996 & 'ETURN4=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 4th order)'/
997 & 'ETURN6=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 6th order)'/
998 & 'ESCCOR=',1pE16.6,' WEIGHT=',1pD16.6,' (backbone-rotamer corr)'/
999 & 'EDIHC= ',1pE16.6,' (dihedral angle constraints)'/
1000 & 'ESS= ',1pE16.6,' (disulfide-bridge intrinsic energy)'/
1001 & 'UCONST=',1pE16.6,' (Constraint energy)'/
1002 & 'ETOT= ',1pE16.6,' (total)')
1006 C-----------------------------------------------------------------------
1007 subroutine elj(evdw)
1009 C This subroutine calculates the interaction energy of nonbonded side chains
1010 C assuming the LJ potential of interaction.
1012 implicit real*8 (a-h,o-z)
1013 include 'DIMENSIONS'
1014 parameter (accur=1.0d-10)
1015 include 'COMMON.GEO'
1016 include 'COMMON.VAR'
1017 include 'COMMON.LOCAL'
1018 include 'COMMON.CHAIN'
1019 include 'COMMON.DERIV'
1020 include 'COMMON.INTERACT'
1021 include 'COMMON.TORSION'
1022 include 'COMMON.SBRIDGE'
1023 include 'COMMON.NAMES'
1024 include 'COMMON.IOUNITS'
1025 include 'COMMON.CONTACTS'
1027 c write(iout,*)'Entering ELJ nnt=',nnt,' nct=',nct,' expon=',expon
1029 do i=iatsc_s,iatsc_e
1031 if (itypi.eq.21) cycle
1039 C Calculate SC interaction energy.
1041 do iint=1,nint_gr(i)
1042 cd write (iout,*) 'i=',i,' iint=',iint,' istart=',istart(i,iint),
1043 cd & 'iend=',iend(i,iint)
1044 do j=istart(i,iint),iend(i,iint)
1046 if (itypj.eq.21) cycle
1050 C Change 12/1/95 to calculate four-body interactions
1051 rij=xj*xj+yj*yj+zj*zj
1053 c write (iout,*)'i=',i,' j=',j,' itypi=',itypi,' itypj=',itypj
1054 eps0ij=eps(itypi,itypj)
1056 e1=fac*fac*aa(itypi,itypj)
1057 e2=fac*bb(itypi,itypj)
1059 cd sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
1060 cd epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
1061 cd write (iout,'(2(a3,i3,2x),6(1pd12.4)/2(3(1pd12.4),5x)/)')
1062 cd & restyp(itypi),i,restyp(itypj),j,aa(itypi,itypj),
1063 cd & bb(itypi,itypj),1.0D0/dsqrt(rrij),evdwij,epsi,sigm,
1064 cd & (c(k,i),k=1,3),(c(k,j),k=1,3)
1067 C Calculate the components of the gradient in DC and X
1069 fac=-rrij*(e1+evdwij)
1074 gvdwx(k,i)=gvdwx(k,i)-gg(k)
1075 gvdwx(k,j)=gvdwx(k,j)+gg(k)
1076 gvdwc(k,i)=gvdwc(k,i)-gg(k)
1077 gvdwc(k,j)=gvdwc(k,j)+gg(k)
1081 cgrad gvdwc(l,k)=gvdwc(l,k)+gg(l)
1085 C 12/1/95, revised on 5/20/97
1087 C Calculate the contact function. The ith column of the array JCONT will
1088 C contain the numbers of atoms that make contacts with the atom I (of numbers
1089 C greater than I). The arrays FACONT and GACONT will contain the values of
1090 C the contact function and its derivative.
1092 C Uncomment next line, if the correlation interactions include EVDW explicitly.
1093 c if (j.gt.i+1 .and. evdwij.le.0.0D0) then
1094 C Uncomment next line, if the correlation interactions are contact function only
1095 if (j.gt.i+1.and. eps0ij.gt.0.0D0) then
1097 sigij=sigma(itypi,itypj)
1098 r0ij=rs0(itypi,itypj)
1100 C Check whether the SC's are not too far to make a contact.
1103 call gcont(rij,rcut,1.0d0,0.2d0*rcut,fcont,fprimcont)
1104 C Add a new contact, if the SC's are close enough, but not too close (r<sigma).
1106 if (fcont.gt.0.0D0) then
1107 C If the SC-SC distance if close to sigma, apply spline.
1108 cAdam call gcont(-rij,-1.03d0*sigij,2.0d0*sigij,1.0d0,
1109 cAdam & fcont1,fprimcont1)
1110 cAdam fcont1=1.0d0-fcont1
1111 cAdam if (fcont1.gt.0.0d0) then
1112 cAdam fprimcont=fprimcont*fcont1+fcont*fprimcont1
1113 cAdam fcont=fcont*fcont1
1115 C Uncomment following 4 lines to have the geometric average of the epsilon0's
1116 cga eps0ij=1.0d0/dsqrt(eps0ij)
1118 cga gg(k)=gg(k)*eps0ij
1120 cga eps0ij=-evdwij*eps0ij
1121 C Uncomment for AL's type of SC correlation interactions.
1122 cadam eps0ij=-evdwij
1123 num_conti=num_conti+1
1124 jcont(num_conti,i)=j
1125 facont(num_conti,i)=fcont*eps0ij
1126 fprimcont=eps0ij*fprimcont/rij
1128 cAdam gacont(1,num_conti,i)=-fprimcont*xj+fcont*gg(1)
1129 cAdam gacont(2,num_conti,i)=-fprimcont*yj+fcont*gg(2)
1130 cAdam gacont(3,num_conti,i)=-fprimcont*zj+fcont*gg(3)
1131 C Uncomment following 3 lines for Skolnick's type of SC correlation.
1132 gacont(1,num_conti,i)=-fprimcont*xj
1133 gacont(2,num_conti,i)=-fprimcont*yj
1134 gacont(3,num_conti,i)=-fprimcont*zj
1135 cd write (iout,'(2i5,2f10.5)') i,j,rij,facont(num_conti,i)
1136 cd write (iout,'(2i3,3f10.5)')
1137 cd & i,j,(gacont(kk,num_conti,i),kk=1,3)
1143 num_cont(i)=num_conti
1147 gvdwc(j,i)=expon*gvdwc(j,i)
1148 gvdwx(j,i)=expon*gvdwx(j,i)
1151 C******************************************************************************
1155 C To save time, the factor of EXPON has been extracted from ALL components
1156 C of GVDWC and GRADX. Remember to multiply them by this factor before further
1159 C******************************************************************************
1162 C-----------------------------------------------------------------------------
1163 subroutine eljk(evdw)
1165 C This subroutine calculates the interaction energy of nonbonded side chains
1166 C assuming the LJK potential of interaction.
1168 implicit real*8 (a-h,o-z)
1169 include 'DIMENSIONS'
1170 include 'COMMON.GEO'
1171 include 'COMMON.VAR'
1172 include 'COMMON.LOCAL'
1173 include 'COMMON.CHAIN'
1174 include 'COMMON.DERIV'
1175 include 'COMMON.INTERACT'
1176 include 'COMMON.IOUNITS'
1177 include 'COMMON.NAMES'
1180 c print *,'Entering ELJK nnt=',nnt,' nct=',nct,' expon=',expon
1182 do i=iatsc_s,iatsc_e
1184 if (itypi.eq.21) cycle
1190 C Calculate SC interaction energy.
1192 do iint=1,nint_gr(i)
1193 do j=istart(i,iint),iend(i,iint)
1195 if (itypj.eq.21) cycle
1199 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
1200 fac_augm=rrij**expon
1201 e_augm=augm(itypi,itypj)*fac_augm
1202 r_inv_ij=dsqrt(rrij)
1204 r_shift_inv=1.0D0/(rij+r0(itypi,itypj)-sigma(itypi,itypj))
1205 fac=r_shift_inv**expon
1206 e1=fac*fac*aa(itypi,itypj)
1207 e2=fac*bb(itypi,itypj)
1209 cd sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
1210 cd epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
1211 cd write (iout,'(2(a3,i3,2x),8(1pd12.4)/2(3(1pd12.4),5x)/)')
1212 cd & restyp(itypi),i,restyp(itypj),j,aa(itypi,itypj),
1213 cd & bb(itypi,itypj),augm(itypi,itypj),epsi,sigm,
1214 cd & sigma(itypi,itypj),1.0D0/dsqrt(rrij),evdwij,
1215 cd & (c(k,i),k=1,3),(c(k,j),k=1,3)
1218 C Calculate the components of the gradient in DC and X
1220 fac=-2.0D0*rrij*e_augm-r_inv_ij*r_shift_inv*(e1+e1+e2)
1225 gvdwx(k,i)=gvdwx(k,i)-gg(k)
1226 gvdwx(k,j)=gvdwx(k,j)+gg(k)
1227 gvdwc(k,i)=gvdwc(k,i)-gg(k)
1228 gvdwc(k,j)=gvdwc(k,j)+gg(k)
1232 cgrad gvdwc(l,k)=gvdwc(l,k)+gg(l)
1240 gvdwc(j,i)=expon*gvdwc(j,i)
1241 gvdwx(j,i)=expon*gvdwx(j,i)
1246 C-----------------------------------------------------------------------------
1247 subroutine ebp(evdw)
1249 C This subroutine calculates the interaction energy of nonbonded side chains
1250 C assuming the Berne-Pechukas potential of interaction.
1252 implicit real*8 (a-h,o-z)
1253 include 'DIMENSIONS'
1254 include 'COMMON.GEO'
1255 include 'COMMON.VAR'
1256 include 'COMMON.LOCAL'
1257 include 'COMMON.CHAIN'
1258 include 'COMMON.DERIV'
1259 include 'COMMON.NAMES'
1260 include 'COMMON.INTERACT'
1261 include 'COMMON.IOUNITS'
1262 include 'COMMON.CALC'
1263 common /srutu/ icall
1264 c double precision rrsave(maxdim)
1267 c print *,'Entering EBP nnt=',nnt,' nct=',nct,' expon=',expon
1269 c if (icall.eq.0) then
1275 do i=iatsc_s,iatsc_e
1277 if (itypi.eq.21) cycle
1282 dxi=dc_norm(1,nres+i)
1283 dyi=dc_norm(2,nres+i)
1284 dzi=dc_norm(3,nres+i)
1285 c dsci_inv=dsc_inv(itypi)
1286 dsci_inv=vbld_inv(i+nres)
1288 C Calculate SC interaction energy.
1290 do iint=1,nint_gr(i)
1291 do j=istart(i,iint),iend(i,iint)
1294 if (itypj.eq.21) cycle
1295 c dscj_inv=dsc_inv(itypj)
1296 dscj_inv=vbld_inv(j+nres)
1297 chi1=chi(itypi,itypj)
1298 chi2=chi(itypj,itypi)
1305 alf12=0.5D0*(alf1+alf2)
1306 C For diagnostics only!!!
1319 dxj=dc_norm(1,nres+j)
1320 dyj=dc_norm(2,nres+j)
1321 dzj=dc_norm(3,nres+j)
1322 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
1323 cd if (icall.eq.0) then
1329 C Calculate the angle-dependent terms of energy & contributions to derivatives.
1331 C Calculate whole angle-dependent part of epsilon and contributions
1332 C to its derivatives
1333 fac=(rrij*sigsq)**expon2
1334 e1=fac*fac*aa(itypi,itypj)
1335 e2=fac*bb(itypi,itypj)
1336 evdwij=eps1*eps2rt*eps3rt*(e1+e2)
1337 eps2der=evdwij*eps3rt
1338 eps3der=evdwij*eps2rt
1339 evdwij=evdwij*eps2rt*eps3rt
1342 sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
1343 epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
1344 cd write (iout,'(2(a3,i3,2x),15(0pf7.3))')
1345 cd & restyp(itypi),i,restyp(itypj),j,
1346 cd & epsi,sigm,chi1,chi2,chip1,chip2,
1347 cd & eps1,eps2rt**2,eps3rt**2,1.0D0/dsqrt(sigsq),
1348 cd & om1,om2,om12,1.0D0/dsqrt(rrij),
1351 C Calculate gradient components.
1352 e1=e1*eps1*eps2rt**2*eps3rt**2
1353 fac=-expon*(e1+evdwij)
1356 C Calculate radial part of the gradient
1360 C Calculate the angular part of the gradient and sum add the contributions
1361 C to the appropriate components of the Cartesian gradient.
1369 C-----------------------------------------------------------------------------
1370 subroutine egb(evdw)
1372 C This subroutine calculates the interaction energy of nonbonded side chains
1373 C assuming the Gay-Berne potential of interaction.
1375 implicit real*8 (a-h,o-z)
1376 include 'DIMENSIONS'
1377 include 'COMMON.GEO'
1378 include 'COMMON.VAR'
1379 include 'COMMON.LOCAL'
1380 include 'COMMON.CHAIN'
1381 include 'COMMON.DERIV'
1382 include 'COMMON.NAMES'
1383 include 'COMMON.INTERACT'
1384 include 'COMMON.IOUNITS'
1385 include 'COMMON.CALC'
1386 include 'COMMON.CONTROL'
1389 ccccc energy_dec=.false.
1390 c print *,'Entering EGB nnt=',nnt,' nct=',nct,' expon=',expon
1393 c if (icall.eq.0) lprn=.false.
1395 do i=iatsc_s,iatsc_e
1397 if (itypi.eq.21) cycle
1402 dxi=dc_norm(1,nres+i)
1403 dyi=dc_norm(2,nres+i)
1404 dzi=dc_norm(3,nres+i)
1405 c dsci_inv=dsc_inv(itypi)
1406 dsci_inv=vbld_inv(i+nres)
1407 c write (iout,*) "i",i,dsc_inv(itypi),dsci_inv,1.0d0/vbld(i+nres)
1408 c write (iout,*) "dcnori",dxi*dxi+dyi*dyi+dzi*dzi
1410 C Calculate SC interaction energy.
1412 do iint=1,nint_gr(i)
1413 do j=istart(i,iint),iend(i,iint)
1416 if (itypj.eq.21) cycle
1417 c dscj_inv=dsc_inv(itypj)
1418 dscj_inv=vbld_inv(j+nres)
1419 c write (iout,*) "j",j,dsc_inv(itypj),dscj_inv,
1420 c & 1.0d0/vbld(j+nres)
1421 c write (iout,*) "i",i," j", j," itype",itype(i),itype(j)
1422 sig0ij=sigma(itypi,itypj)
1423 chi1=chi(itypi,itypj)
1424 chi2=chi(itypj,itypi)
1431 alf12=0.5D0*(alf1+alf2)
1432 C For diagnostics only!!!
1445 dxj=dc_norm(1,nres+j)
1446 dyj=dc_norm(2,nres+j)
1447 dzj=dc_norm(3,nres+j)
1448 c write (iout,*) "dcnorj",dxi*dxi+dyi*dyi+dzi*dzi
1449 c write (iout,*) "j",j," dc_norm",
1450 c & dc_norm(1,nres+j),dc_norm(2,nres+j),dc_norm(3,nres+j)
1451 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
1453 C Calculate angle-dependent terms of energy and contributions to their
1457 sig=sig0ij*dsqrt(sigsq)
1458 rij_shift=1.0D0/rij-sig+sig0ij
1459 c for diagnostics; uncomment
1460 c rij_shift=1.2*sig0ij
1461 C I hate to put IF's in the loops, but here don't have another choice!!!!
1462 if (rij_shift.le.0.0D0) then
1464 cd write (iout,'(2(a3,i3,2x),17(0pf7.3))')
1465 cd & restyp(itypi),i,restyp(itypj),j,
1466 cd & rij_shift,1.0D0/rij,sig,sig0ij,sigsq,1-dsqrt(sigsq)
1470 c---------------------------------------------------------------
1471 rij_shift=1.0D0/rij_shift
1472 fac=rij_shift**expon
1473 e1=fac*fac*aa(itypi,itypj)
1474 e2=fac*bb(itypi,itypj)
1475 evdwij=eps1*eps2rt*eps3rt*(e1+e2)
1476 eps2der=evdwij*eps3rt
1477 eps3der=evdwij*eps2rt
1478 c write (iout,*) "sigsq",sigsq," sig",sig," eps2rt",eps2rt,
1479 c & " eps3rt",eps3rt," eps1",eps1," e1",e1," e2",e2
1480 evdwij=evdwij*eps2rt*eps3rt
1483 sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
1484 epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
1485 write (iout,'(2(a3,i3,2x),17(0pf7.3))')
1486 & restyp(itypi),i,restyp(itypj),j,
1487 & epsi,sigm,chi1,chi2,chip1,chip2,
1488 & eps1,eps2rt**2,eps3rt**2,sig,sig0ij,
1489 & om1,om2,om12,1.0D0/rij,1.0D0/rij_shift,
1493 if (energy_dec) write (iout,'(a6,2i5,0pf7.3)')
1496 C Calculate gradient components.
1497 e1=e1*eps1*eps2rt**2*eps3rt**2
1498 fac=-expon*(e1+evdwij)*rij_shift
1502 C Calculate the radial part of the gradient
1506 C Calculate angular part of the gradient.
1511 c write (iout,*) "Number of loop steps in EGB:",ind
1512 cccc energy_dec=.false.
1515 C-----------------------------------------------------------------------------
1516 subroutine egbv(evdw)
1518 C This subroutine calculates the interaction energy of nonbonded side chains
1519 C assuming the Gay-Berne-Vorobjev potential of interaction.
1521 implicit real*8 (a-h,o-z)
1522 include 'DIMENSIONS'
1523 include 'COMMON.GEO'
1524 include 'COMMON.VAR'
1525 include 'COMMON.LOCAL'
1526 include 'COMMON.CHAIN'
1527 include 'COMMON.DERIV'
1528 include 'COMMON.NAMES'
1529 include 'COMMON.INTERACT'
1530 include 'COMMON.IOUNITS'
1531 include 'COMMON.CALC'
1532 common /srutu/ icall
1535 c print *,'Entering EGB nnt=',nnt,' nct=',nct,' expon=',expon
1538 c if (icall.eq.0) lprn=.true.
1540 do i=iatsc_s,iatsc_e
1542 if (itypi.eq.21) cycle
1547 dxi=dc_norm(1,nres+i)
1548 dyi=dc_norm(2,nres+i)
1549 dzi=dc_norm(3,nres+i)
1550 c dsci_inv=dsc_inv(itypi)
1551 dsci_inv=vbld_inv(i+nres)
1553 C Calculate SC interaction energy.
1555 do iint=1,nint_gr(i)
1556 do j=istart(i,iint),iend(i,iint)
1559 if (itypj.eq.21) cycle
1560 c dscj_inv=dsc_inv(itypj)
1561 dscj_inv=vbld_inv(j+nres)
1562 sig0ij=sigma(itypi,itypj)
1563 r0ij=r0(itypi,itypj)
1564 chi1=chi(itypi,itypj)
1565 chi2=chi(itypj,itypi)
1572 alf12=0.5D0*(alf1+alf2)
1573 C For diagnostics only!!!
1586 dxj=dc_norm(1,nres+j)
1587 dyj=dc_norm(2,nres+j)
1588 dzj=dc_norm(3,nres+j)
1589 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
1591 C Calculate angle-dependent terms of energy and contributions to their
1595 sig=sig0ij*dsqrt(sigsq)
1596 rij_shift=1.0D0/rij-sig+r0ij
1597 C I hate to put IF's in the loops, but here don't have another choice!!!!
1598 if (rij_shift.le.0.0D0) then
1603 c---------------------------------------------------------------
1604 rij_shift=1.0D0/rij_shift
1605 fac=rij_shift**expon
1606 e1=fac*fac*aa(itypi,itypj)
1607 e2=fac*bb(itypi,itypj)
1608 evdwij=eps1*eps2rt*eps3rt*(e1+e2)
1609 eps2der=evdwij*eps3rt
1610 eps3der=evdwij*eps2rt
1611 fac_augm=rrij**expon
1612 e_augm=augm(itypi,itypj)*fac_augm
1613 evdwij=evdwij*eps2rt*eps3rt
1614 evdw=evdw+evdwij+e_augm
1616 sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
1617 epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
1618 write (iout,'(2(a3,i3,2x),17(0pf7.3))')
1619 & restyp(itypi),i,restyp(itypj),j,
1620 & epsi,sigm,sig,(augm(itypi,itypj)/epsi)**(1.0D0/12.0D0),
1621 & chi1,chi2,chip1,chip2,
1622 & eps1,eps2rt**2,eps3rt**2,
1623 & om1,om2,om12,1.0D0/rij,1.0D0/rij_shift,
1626 C Calculate gradient components.
1627 e1=e1*eps1*eps2rt**2*eps3rt**2
1628 fac=-expon*(e1+evdwij)*rij_shift
1630 fac=rij*fac-2*expon*rrij*e_augm
1631 C Calculate the radial part of the gradient
1635 C Calculate angular part of the gradient.
1641 C-----------------------------------------------------------------------------
1642 subroutine sc_angular
1643 C Calculate eps1,eps2,eps3,sigma, and parts of their derivatives in om1,om2,
1644 C om12. Called by ebp, egb, and egbv.
1646 include 'COMMON.CALC'
1647 include 'COMMON.IOUNITS'
1651 om1=dxi*erij(1)+dyi*erij(2)+dzi*erij(3)
1652 om2=dxj*erij(1)+dyj*erij(2)+dzj*erij(3)
1653 om12=dxi*dxj+dyi*dyj+dzi*dzj
1655 C Calculate eps1(om12) and its derivative in om12
1656 faceps1=1.0D0-om12*chiom12
1657 faceps1_inv=1.0D0/faceps1
1658 eps1=dsqrt(faceps1_inv)
1659 C Following variable is eps1*deps1/dom12
1660 eps1_om12=faceps1_inv*chiom12
1665 c write (iout,*) "om12",om12," eps1",eps1
1666 C Calculate sigma(om1,om2,om12) and the derivatives of sigma**2 in om1,om2,
1671 facsig=om1*chiom1+om2*chiom2-2.0D0*om1om2*chiom12
1672 sigsq=1.0D0-facsig*faceps1_inv
1673 sigsq_om1=(chiom1-chiom12*om2)*faceps1_inv
1674 sigsq_om2=(chiom2-chiom12*om1)*faceps1_inv
1675 sigsq_om12=-chi12*(om1om2*faceps1-om12*facsig)*faceps1_inv**2
1681 c write (iout,*) "chiom1",chiom1," chiom2",chiom2," chiom12",chiom12
1682 c write (iout,*) "faceps1",faceps1," faceps1_inv",faceps1_inv,
1684 C Calculate eps2 and its derivatives in om1, om2, and om12.
1687 chipom12=chip12*om12
1688 facp=1.0D0-om12*chipom12
1690 facp1=om1*chipom1+om2*chipom2-2.0D0*om1om2*chipom12
1691 c write (iout,*) "chipom1",chipom1," chipom2",chipom2,
1692 c & " chipom12",chipom12," facp",facp," facp_inv",facp_inv
1693 C Following variable is the square root of eps2
1694 eps2rt=1.0D0-facp1*facp_inv
1695 C Following three variables are the derivatives of the square root of eps
1696 C in om1, om2, and om12.
1697 eps2rt_om1=-4.0D0*(chipom1-chipom12*om2)*facp_inv
1698 eps2rt_om2=-4.0D0*(chipom2-chipom12*om1)*facp_inv
1699 eps2rt_om12=4.0D0*chip12*(om1om2*facp-om12*facp1)*facp_inv**2
1700 C Evaluate the "asymmetric" factor in the VDW constant, eps3
1701 eps3rt=1.0D0-alf1*om1+alf2*om2-alf12*om12
1702 c write (iout,*) "eps2rt",eps2rt," eps3rt",eps3rt
1703 c write (iout,*) "eps2rt_om1",eps2rt_om1," eps2rt_om2",eps2rt_om2,
1704 c & " eps2rt_om12",eps2rt_om12
1705 C Calculate whole angle-dependent part of epsilon and contributions
1706 C to its derivatives
1709 C----------------------------------------------------------------------------
1711 implicit real*8 (a-h,o-z)
1712 include 'DIMENSIONS'
1713 include 'COMMON.CHAIN'
1714 include 'COMMON.DERIV'
1715 include 'COMMON.CALC'
1716 include 'COMMON.IOUNITS'
1717 double precision dcosom1(3),dcosom2(3)
1718 eom1=eps2der*eps2rt_om1-2.0D0*alf1*eps3der+sigder*sigsq_om1
1719 eom2=eps2der*eps2rt_om2+2.0D0*alf2*eps3der+sigder*sigsq_om2
1720 eom12=evdwij*eps1_om12+eps2der*eps2rt_om12
1721 & -2.0D0*alf12*eps3der+sigder*sigsq_om12
1725 c eom12=evdwij*eps1_om12
1727 c write (iout,*) "eps2der",eps2der," eps3der",eps3der,
1728 c & " sigder",sigder
1729 c write (iout,*) "eps1_om12",eps1_om12," eps2rt_om12",eps2rt_om12
1730 c write (iout,*) "eom1",eom1," eom2",eom2," eom12",eom12
1732 dcosom1(k)=rij*(dc_norm(k,nres+i)-om1*erij(k))
1733 dcosom2(k)=rij*(dc_norm(k,nres+j)-om2*erij(k))
1736 gg(k)=gg(k)+eom1*dcosom1(k)+eom2*dcosom2(k)
1738 c write (iout,*) "gg",(gg(k),k=1,3)
1740 gvdwx(k,i)=gvdwx(k,i)-gg(k)
1741 & +(eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,nres+i))
1742 & +eom1*(erij(k)-om1*dc_norm(k,nres+i)))*dsci_inv
1743 gvdwx(k,j)=gvdwx(k,j)+gg(k)
1744 & +(eom12*(dc_norm(k,nres+i)-om12*dc_norm(k,nres+j))
1745 & +eom2*(erij(k)-om2*dc_norm(k,nres+j)))*dscj_inv
1746 c write (iout,*)(eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,nres+i))
1747 c & +eom1*(erij(k)-om1*dc_norm(k,nres+i)))*dsci_inv
1748 c write (iout,*)(eom12*(dc_norm(k,nres+i)-om12*dc_norm(k,nres+j))
1749 c & +eom2*(erij(k)-om2*dc_norm(k,nres+j)))*dscj_inv
1752 C Calculate the components of the gradient in DC and X
1756 cgrad gvdwc(l,k)=gvdwc(l,k)+gg(l)
1760 gvdwc(l,i)=gvdwc(l,i)-gg(l)
1761 gvdwc(l,j)=gvdwc(l,j)+gg(l)
1765 C-----------------------------------------------------------------------
1766 subroutine e_softsphere(evdw)
1768 C This subroutine calculates the interaction energy of nonbonded side chains
1769 C assuming the LJ potential of interaction.
1771 implicit real*8 (a-h,o-z)
1772 include 'DIMENSIONS'
1773 parameter (accur=1.0d-10)
1774 include 'COMMON.GEO'
1775 include 'COMMON.VAR'
1776 include 'COMMON.LOCAL'
1777 include 'COMMON.CHAIN'
1778 include 'COMMON.DERIV'
1779 include 'COMMON.INTERACT'
1780 include 'COMMON.TORSION'
1781 include 'COMMON.SBRIDGE'
1782 include 'COMMON.NAMES'
1783 include 'COMMON.IOUNITS'
1784 include 'COMMON.CONTACTS'
1786 cd print *,'Entering Esoft_sphere nnt=',nnt,' nct=',nct
1788 do i=iatsc_s,iatsc_e
1790 if (itypi.eq.21) cycle
1796 C Calculate SC interaction energy.
1798 do iint=1,nint_gr(i)
1799 cd write (iout,*) 'i=',i,' iint=',iint,' istart=',istart(i,iint),
1800 cd & 'iend=',iend(i,iint)
1801 do j=istart(i,iint),iend(i,iint)
1803 if (itypj.eq.21) cycle
1807 rij=xj*xj+yj*yj+zj*zj
1808 c write (iout,*)'i=',i,' j=',j,' itypi=',itypi,' itypj=',itypj
1809 r0ij=r0(itypi,itypj)
1811 c print *,i,j,r0ij,dsqrt(rij)
1812 if (rij.lt.r0ijsq) then
1813 evdwij=0.25d0*(rij-r0ijsq)**2
1821 C Calculate the components of the gradient in DC and X
1827 gvdwx(k,i)=gvdwx(k,i)-gg(k)
1828 gvdwx(k,j)=gvdwx(k,j)+gg(k)
1829 gvdwc(k,i)=gvdwc(k,i)-gg(k)
1830 gvdwc(k,j)=gvdwc(k,j)+gg(k)
1834 cgrad gvdwc(l,k)=gvdwc(l,k)+gg(l)
1842 C--------------------------------------------------------------------------
1843 subroutine eelec_soft_sphere(ees,evdw1,eel_loc,eello_turn3,
1846 C Soft-sphere potential of p-p interaction
1848 implicit real*8 (a-h,o-z)
1849 include 'DIMENSIONS'
1850 include 'COMMON.CONTROL'
1851 include 'COMMON.IOUNITS'
1852 include 'COMMON.GEO'
1853 include 'COMMON.VAR'
1854 include 'COMMON.LOCAL'
1855 include 'COMMON.CHAIN'
1856 include 'COMMON.DERIV'
1857 include 'COMMON.INTERACT'
1858 include 'COMMON.CONTACTS'
1859 include 'COMMON.TORSION'
1860 include 'COMMON.VECTORS'
1861 include 'COMMON.FFIELD'
1863 cd write(iout,*) 'In EELEC_soft_sphere'
1870 do i=iatel_s,iatel_e
1871 if (itype(i).eq.21 .or. itype(i+1).eq.21) cycle
1875 xmedi=c(1,i)+0.5d0*dxi
1876 ymedi=c(2,i)+0.5d0*dyi
1877 zmedi=c(3,i)+0.5d0*dzi
1879 c write (iout,*) 'i',i,' ielstart',ielstart(i),' ielend',ielend(i)
1880 do j=ielstart(i),ielend(i)
1881 if (itype(j).eq.21 .or. itype(j+1).eq.21) cycle
1885 if (j.eq.i+2 .and. itelj.eq.2) iteli=2
1886 r0ij=rpp(iteli,itelj)
1891 xj=c(1,j)+0.5D0*dxj-xmedi
1892 yj=c(2,j)+0.5D0*dyj-ymedi
1893 zj=c(3,j)+0.5D0*dzj-zmedi
1894 rij=xj*xj+yj*yj+zj*zj
1895 if (rij.lt.r0ijsq) then
1896 evdw1ij=0.25d0*(rij-r0ijsq)**2
1904 C Calculate contributions to the Cartesian gradient.
1910 gvdwpp(k,i)=gvdwpp(k,i)-ggg(k)
1911 gvdwpp(k,j)=gvdwpp(k,j)+ggg(k)
1914 * Loop over residues i+1 thru j-1.
1918 cgrad gelc(l,k)=gelc(l,k)+ggg(l)
1923 cgrad do i=nnt,nct-1
1925 cgrad gelc(k,i)=gelc(k,i)+0.5d0*gelc(k,i)
1927 cgrad do j=i+1,nct-1
1929 cgrad gelc(k,i)=gelc(k,i)+gelc(k,j)
1935 c------------------------------------------------------------------------------
1936 subroutine vec_and_deriv
1937 implicit real*8 (a-h,o-z)
1938 include 'DIMENSIONS'
1942 include 'COMMON.IOUNITS'
1943 include 'COMMON.GEO'
1944 include 'COMMON.VAR'
1945 include 'COMMON.LOCAL'
1946 include 'COMMON.CHAIN'
1947 include 'COMMON.VECTORS'
1948 include 'COMMON.SETUP'
1949 include 'COMMON.TIME1'
1950 dimension uyder(3,3,2),uzder(3,3,2),vbld_inv_temp(2)
1951 C Compute the local reference systems. For reference system (i), the
1952 C X-axis points from CA(i) to CA(i+1), the Y axis is in the
1953 C CA(i)-CA(i+1)-CA(i+2) plane, and the Z axis is perpendicular to this plane.
1955 do i=ivec_start,ivec_end
1959 if (i.eq.nres-1) then
1960 C Case of the last full residue
1961 C Compute the Z-axis
1962 call vecpr(dc_norm(1,i),dc_norm(1,i-1),uz(1,i))
1963 costh=dcos(pi-theta(nres))
1964 fac=1.0d0/dsqrt(1.0d0-costh*costh)
1968 C Compute the derivatives of uz
1970 uzder(2,1,1)=-dc_norm(3,i-1)
1971 uzder(3,1,1)= dc_norm(2,i-1)
1972 uzder(1,2,1)= dc_norm(3,i-1)
1974 uzder(3,2,1)=-dc_norm(1,i-1)
1975 uzder(1,3,1)=-dc_norm(2,i-1)
1976 uzder(2,3,1)= dc_norm(1,i-1)
1979 uzder(2,1,2)= dc_norm(3,i)
1980 uzder(3,1,2)=-dc_norm(2,i)
1981 uzder(1,2,2)=-dc_norm(3,i)
1983 uzder(3,2,2)= dc_norm(1,i)
1984 uzder(1,3,2)= dc_norm(2,i)
1985 uzder(2,3,2)=-dc_norm(1,i)
1987 C Compute the Y-axis
1990 uy(k,i)=fac*(dc_norm(k,i-1)-costh*dc_norm(k,i))
1992 C Compute the derivatives of uy
1995 uyder(k,j,1)=2*dc_norm(k,i-1)*dc_norm(j,i)
1996 & -dc_norm(k,i)*dc_norm(j,i-1)
1997 uyder(k,j,2)=-dc_norm(j,i)*dc_norm(k,i)
1999 uyder(j,j,1)=uyder(j,j,1)-costh
2000 uyder(j,j,2)=1.0d0+uyder(j,j,2)
2005 uygrad(l,k,j,i)=uyder(l,k,j)
2006 uzgrad(l,k,j,i)=uzder(l,k,j)
2010 call unormderiv(uy(1,i),uyder(1,1,1),facy,uygrad(1,1,1,i))
2011 call unormderiv(uy(1,i),uyder(1,1,2),facy,uygrad(1,1,2,i))
2012 call unormderiv(uz(1,i),uzder(1,1,1),fac,uzgrad(1,1,1,i))
2013 call unormderiv(uz(1,i),uzder(1,1,2),fac,uzgrad(1,1,2,i))
2016 C Compute the Z-axis
2017 call vecpr(dc_norm(1,i),dc_norm(1,i+1),uz(1,i))
2018 costh=dcos(pi-theta(i+2))
2019 fac=1.0d0/dsqrt(1.0d0-costh*costh)
2023 C Compute the derivatives of uz
2025 uzder(2,1,1)=-dc_norm(3,i+1)
2026 uzder(3,1,1)= dc_norm(2,i+1)
2027 uzder(1,2,1)= dc_norm(3,i+1)
2029 uzder(3,2,1)=-dc_norm(1,i+1)
2030 uzder(1,3,1)=-dc_norm(2,i+1)
2031 uzder(2,3,1)= dc_norm(1,i+1)
2034 uzder(2,1,2)= dc_norm(3,i)
2035 uzder(3,1,2)=-dc_norm(2,i)
2036 uzder(1,2,2)=-dc_norm(3,i)
2038 uzder(3,2,2)= dc_norm(1,i)
2039 uzder(1,3,2)= dc_norm(2,i)
2040 uzder(2,3,2)=-dc_norm(1,i)
2042 C Compute the Y-axis
2045 uy(k,i)=facy*(dc_norm(k,i+1)-costh*dc_norm(k,i))
2047 C Compute the derivatives of uy
2050 uyder(k,j,1)=2*dc_norm(k,i+1)*dc_norm(j,i)
2051 & -dc_norm(k,i)*dc_norm(j,i+1)
2052 uyder(k,j,2)=-dc_norm(j,i)*dc_norm(k,i)
2054 uyder(j,j,1)=uyder(j,j,1)-costh
2055 uyder(j,j,2)=1.0d0+uyder(j,j,2)
2060 uygrad(l,k,j,i)=uyder(l,k,j)
2061 uzgrad(l,k,j,i)=uzder(l,k,j)
2065 call unormderiv(uy(1,i),uyder(1,1,1),facy,uygrad(1,1,1,i))
2066 call unormderiv(uy(1,i),uyder(1,1,2),facy,uygrad(1,1,2,i))
2067 call unormderiv(uz(1,i),uzder(1,1,1),fac,uzgrad(1,1,1,i))
2068 call unormderiv(uz(1,i),uzder(1,1,2),fac,uzgrad(1,1,2,i))
2072 vbld_inv_temp(1)=vbld_inv(i+1)
2073 if (i.lt.nres-1) then
2074 vbld_inv_temp(2)=vbld_inv(i+2)
2076 vbld_inv_temp(2)=vbld_inv(i)
2081 uygrad(l,k,j,i)=vbld_inv_temp(j)*uygrad(l,k,j,i)
2082 uzgrad(l,k,j,i)=vbld_inv_temp(j)*uzgrad(l,k,j,i)
2087 #if defined(PARVEC) && defined(MPI)
2088 if (nfgtasks1.gt.1) then
2090 c print *,"Processor",fg_rank1,kolor1," ivec_start",ivec_start,
2091 c & " ivec_displ",(ivec_displ(i),i=0,nfgtasks1-1),
2092 c & " ivec_count",(ivec_count(i),i=0,nfgtasks1-1)
2093 call MPI_Allgatherv(uy(1,ivec_start),ivec_count(fg_rank1),
2094 & MPI_UYZ,uy(1,1),ivec_count(0),ivec_displ(0),MPI_UYZ,
2096 call MPI_Allgatherv(uz(1,ivec_start),ivec_count(fg_rank1),
2097 & MPI_UYZ,uz(1,1),ivec_count(0),ivec_displ(0),MPI_UYZ,
2099 call MPI_Allgatherv(uygrad(1,1,1,ivec_start),
2100 & ivec_count(fg_rank1),MPI_UYZGRAD,uygrad(1,1,1,1),ivec_count(0),
2101 & ivec_displ(0),MPI_UYZGRAD,FG_COMM1,IERR)
2102 call MPI_Allgatherv(uzgrad(1,1,1,ivec_start),
2103 & ivec_count(fg_rank1),MPI_UYZGRAD,uzgrad(1,1,1,1),ivec_count(0),
2104 & ivec_displ(0),MPI_UYZGRAD,FG_COMM1,IERR)
2105 time_gather=time_gather+MPI_Wtime()-time00
2107 c if (fg_rank.eq.0) then
2108 c write (iout,*) "Arrays UY and UZ"
2110 c write (iout,'(i5,3f10.5,5x,3f10.5)') i,(uy(k,i),k=1,3),
2117 C-----------------------------------------------------------------------------
2118 subroutine check_vecgrad
2119 implicit real*8 (a-h,o-z)
2120 include 'DIMENSIONS'
2121 include 'COMMON.IOUNITS'
2122 include 'COMMON.GEO'
2123 include 'COMMON.VAR'
2124 include 'COMMON.LOCAL'
2125 include 'COMMON.CHAIN'
2126 include 'COMMON.VECTORS'
2127 dimension uygradt(3,3,2,maxres),uzgradt(3,3,2,maxres)
2128 dimension uyt(3,maxres),uzt(3,maxres)
2129 dimension uygradn(3,3,2),uzgradn(3,3,2),erij(3)
2130 double precision delta /1.0d-7/
2133 crc write(iout,'(2i5,2(3f10.5,5x))') i,1,dc_norm(:,i)
2134 crc write(iout,'(2i5,2(3f10.5,5x))') i,2,uy(:,i)
2135 crc write(iout,'(2i5,2(3f10.5,5x)/)')i,3,uz(:,i)
2136 cd write(iout,'(2i5,2(3f10.5,5x))') i,1,
2137 cd & (dc_norm(if90,i),if90=1,3)
2138 cd write(iout,'(2i5,2(3f10.5,5x))') i,2,(uy(if90,i),if90=1,3)
2139 cd write(iout,'(2i5,2(3f10.5,5x)/)')i,3,(uz(if90,i),if90=1,3)
2140 cd write(iout,'(a)')
2146 uygradt(l,k,j,i)=uygrad(l,k,j,i)
2147 uzgradt(l,k,j,i)=uzgrad(l,k,j,i)
2160 cd write (iout,*) 'i=',i
2162 erij(k)=dc_norm(k,i)
2166 dc_norm(k,i)=erij(k)
2168 dc_norm(j,i)=dc_norm(j,i)+delta
2169 c fac=dsqrt(scalar(dc_norm(1,i),dc_norm(1,i)))
2171 c dc_norm(k,i)=dc_norm(k,i)/fac
2173 c write (iout,*) (dc_norm(k,i),k=1,3)
2174 c write (iout,*) (erij(k),k=1,3)
2177 uygradn(k,j,1)=(uy(k,i)-uyt(k,i))/delta
2178 uygradn(k,j,2)=(uy(k,i-1)-uyt(k,i-1))/delta
2179 uzgradn(k,j,1)=(uz(k,i)-uzt(k,i))/delta
2180 uzgradn(k,j,2)=(uz(k,i-1)-uzt(k,i-1))/delta
2182 c write (iout,'(i5,3f8.5,3x,3f8.5,5x,3f8.5,3x,3f8.5)')
2183 c & j,(uzgradt(k,j,1,i),k=1,3),(uzgradn(k,j,1),k=1,3),
2184 c & (uzgradt(k,j,2,i-1),k=1,3),(uzgradn(k,j,2),k=1,3)
2187 dc_norm(k,i)=erij(k)
2190 cd write (iout,'(i5,3f8.5,3x,3f8.5,5x,3f8.5,3x,3f8.5)')
2191 cd & k,(uygradt(k,l,1,i),l=1,3),(uygradn(k,l,1),l=1,3),
2192 cd & (uygradt(k,l,2,i-1),l=1,3),(uygradn(k,l,2),l=1,3)
2193 cd write (iout,'(i5,3f8.5,3x,3f8.5,5x,3f8.5,3x,3f8.5)')
2194 cd & k,(uzgradt(k,l,1,i),l=1,3),(uzgradn(k,l,1),l=1,3),
2195 cd & (uzgradt(k,l,2,i-1),l=1,3),(uzgradn(k,l,2),l=1,3)
2196 cd write (iout,'(a)')
2201 C--------------------------------------------------------------------------
2202 subroutine set_matrices
2203 implicit real*8 (a-h,o-z)
2204 include 'DIMENSIONS'
2207 include "COMMON.SETUP"
2209 integer status(MPI_STATUS_SIZE)
2211 include 'COMMON.IOUNITS'
2212 include 'COMMON.GEO'
2213 include 'COMMON.VAR'
2214 include 'COMMON.LOCAL'
2215 include 'COMMON.CHAIN'
2216 include 'COMMON.DERIV'
2217 include 'COMMON.INTERACT'
2218 include 'COMMON.CONTACTS'
2219 include 'COMMON.TORSION'
2220 include 'COMMON.VECTORS'
2221 include 'COMMON.FFIELD'
2222 double precision auxvec(2),auxmat(2,2)
2224 C Compute the virtual-bond-torsional-angle dependent quantities needed
2225 C to calculate the el-loc multibody terms of various order.
2228 do i=ivec_start+2,ivec_end+2
2232 if (i .lt. nres+1) then
2269 if (i .gt. 3 .and. i .lt. nres+1) then
2270 obrot_der(1,i-2)=-sin1
2271 obrot_der(2,i-2)= cos1
2272 Ugder(1,1,i-2)= sin1
2273 Ugder(1,2,i-2)=-cos1
2274 Ugder(2,1,i-2)=-cos1
2275 Ugder(2,2,i-2)=-sin1
2278 obrot2_der(1,i-2)=-dwasin2
2279 obrot2_der(2,i-2)= dwacos2
2280 Ug2der(1,1,i-2)= dwasin2
2281 Ug2der(1,2,i-2)=-dwacos2
2282 Ug2der(2,1,i-2)=-dwacos2
2283 Ug2der(2,2,i-2)=-dwasin2
2285 obrot_der(1,i-2)=0.0d0
2286 obrot_der(2,i-2)=0.0d0
2287 Ugder(1,1,i-2)=0.0d0
2288 Ugder(1,2,i-2)=0.0d0
2289 Ugder(2,1,i-2)=0.0d0
2290 Ugder(2,2,i-2)=0.0d0
2291 obrot2_der(1,i-2)=0.0d0
2292 obrot2_der(2,i-2)=0.0d0
2293 Ug2der(1,1,i-2)=0.0d0
2294 Ug2der(1,2,i-2)=0.0d0
2295 Ug2der(2,1,i-2)=0.0d0
2296 Ug2der(2,2,i-2)=0.0d0
2298 c if (i.gt. iatel_s+2 .and. i.lt.iatel_e+5) then
2299 if (i.gt. nnt+2 .and. i.lt.nct+2) then
2300 iti = itortyp(itype(i-2))
2304 c if (i.gt. iatel_s+1 .and. i.lt.iatel_e+4) then
2305 if (i.gt. nnt+1 .and. i.lt.nct+1) then
2306 iti1 = itortyp(itype(i-1))
2310 cd write (iout,*) '*******i',i,' iti1',iti
2311 cd write (iout,*) 'b1',b1(:,iti)
2312 cd write (iout,*) 'b2',b2(:,iti)
2313 cd write (iout,*) 'Ug',Ug(:,:,i-2)
2314 c if (i .gt. iatel_s+2) then
2315 if (i .gt. nnt+2) then
2316 call matvec2(Ug(1,1,i-2),b2(1,iti),Ub2(1,i-2))
2317 call matmat2(EE(1,1,iti),Ug(1,1,i-2),EUg(1,1,i-2))
2318 if (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0)
2320 call matmat2(CC(1,1,iti),Ug(1,1,i-2),CUg(1,1,i-2))
2321 call matmat2(DD(1,1,iti),Ug(1,1,i-2),DUg(1,1,i-2))
2322 call matmat2(Dtilde(1,1,iti),Ug2(1,1,i-2),DtUg2(1,1,i-2))
2323 call matvec2(Ctilde(1,1,iti1),obrot(1,i-2),Ctobr(1,i-2))
2324 call matvec2(Dtilde(1,1,iti),obrot2(1,i-2),Dtobr2(1,i-2))
2335 DtUg2(l,k,i-2)=0.0d0
2339 call matvec2(Ugder(1,1,i-2),b2(1,iti),Ub2der(1,i-2))
2340 call matmat2(EE(1,1,iti),Ugder(1,1,i-2),EUgder(1,1,i-2))
2342 muder(k,i-2)=Ub2der(k,i-2)
2344 c if (i.gt. iatel_s+1 .and. i.lt.iatel_e+4) then
2345 if (i.gt. nnt+1 .and. i.lt.nct+1) then
2346 iti1 = itortyp(itype(i-1))
2351 mu(k,i-2)=Ub2(k,i-2)+b1(k,iti1)
2353 cd write (iout,*) 'mu ',mu(:,i-2)
2354 cd write (iout,*) 'mu1',mu1(:,i-2)
2355 cd write (iout,*) 'mu2',mu2(:,i-2)
2356 if (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or.wcorr6.gt.0.0d0)
2358 call matmat2(CC(1,1,iti1),Ugder(1,1,i-2),CUgder(1,1,i-2))
2359 call matmat2(DD(1,1,iti),Ugder(1,1,i-2),DUgder(1,1,i-2))
2360 call matmat2(Dtilde(1,1,iti),Ug2der(1,1,i-2),DtUg2der(1,1,i-2))
2361 call matvec2(Ctilde(1,1,iti1),obrot_der(1,i-2),Ctobrder(1,i-2))
2362 call matvec2(Dtilde(1,1,iti),obrot2_der(1,i-2),Dtobr2der(1,i-2))
2363 C Vectors and matrices dependent on a single virtual-bond dihedral.
2364 call matvec2(DD(1,1,iti),b1tilde(1,iti1),auxvec(1))
2365 call matvec2(Ug2(1,1,i-2),auxvec(1),Ug2Db1t(1,i-2))
2366 call matvec2(Ug2der(1,1,i-2),auxvec(1),Ug2Db1tder(1,i-2))
2367 call matvec2(CC(1,1,iti1),Ub2(1,i-2),CUgb2(1,i-2))
2368 call matvec2(CC(1,1,iti1),Ub2der(1,i-2),CUgb2der(1,i-2))
2369 call matmat2(EUg(1,1,i-2),CC(1,1,iti1),EUgC(1,1,i-2))
2370 call matmat2(EUgder(1,1,i-2),CC(1,1,iti1),EUgCder(1,1,i-2))
2371 call matmat2(EUg(1,1,i-2),DD(1,1,iti1),EUgD(1,1,i-2))
2372 call matmat2(EUgder(1,1,i-2),DD(1,1,iti1),EUgDder(1,1,i-2))
2375 C Matrices dependent on two consecutive virtual-bond dihedrals.
2376 C The order of matrices is from left to right.
2377 if (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or.wcorr6.gt.0.0d0)
2379 c do i=max0(ivec_start,2),ivec_end
2381 call matmat2(DtUg2(1,1,i-1),EUg(1,1,i),DtUg2EUg(1,1,i))
2382 call matmat2(DtUg2der(1,1,i-1),EUg(1,1,i),DtUg2EUgder(1,1,1,i))
2383 call matmat2(DtUg2(1,1,i-1),EUgder(1,1,i),DtUg2EUgder(1,1,2,i))
2384 call transpose2(DtUg2(1,1,i-1),auxmat(1,1))
2385 call matmat2(auxmat(1,1),EUg(1,1,i),Ug2DtEUg(1,1,i))
2386 call matmat2(auxmat(1,1),EUgder(1,1,i),Ug2DtEUgder(1,1,2,i))
2387 call transpose2(DtUg2der(1,1,i-1),auxmat(1,1))
2388 call matmat2(auxmat(1,1),EUg(1,1,i),Ug2DtEUgder(1,1,1,i))
2391 #if defined(MPI) && defined(PARMAT)
2393 c if (fg_rank.eq.0) then
2394 write (iout,*) "Arrays UG and UGDER before GATHER"
2396 write (iout,'(i5,4f10.5,5x,4f10.5)') i,
2397 & ((ug(l,k,i),l=1,2),k=1,2),
2398 & ((ugder(l,k,i),l=1,2),k=1,2)
2400 write (iout,*) "Arrays UG2 and UG2DER"
2402 write (iout,'(i5,4f10.5,5x,4f10.5)') i,
2403 & ((ug2(l,k,i),l=1,2),k=1,2),
2404 & ((ug2der(l,k,i),l=1,2),k=1,2)
2406 write (iout,*) "Arrays OBROT OBROT2 OBROTDER and OBROT2DER"
2408 write (iout,'(i5,4f10.5,5x,4f10.5)') i,
2409 & (obrot(k,i),k=1,2),(obrot2(k,i),k=1,2),
2410 & (obrot_der(k,i),k=1,2),(obrot2_der(k,i),k=1,2)
2412 write (iout,*) "Arrays COSTAB SINTAB COSTAB2 and SINTAB2"
2414 write (iout,'(i5,4f10.5,5x,4f10.5)') i,
2415 & costab(i),sintab(i),costab2(i),sintab2(i)
2417 write (iout,*) "Array MUDER"
2419 write (iout,'(i5,2f10.5)') i,muder(1,i),muder(2,i)
2423 if (nfgtasks.gt.1) then
2425 c write(iout,*)"Processor",fg_rank,kolor," ivec_start",ivec_start,
2426 c & " ivec_displ",(ivec_displ(i),i=0,nfgtasks-1),
2427 c & " ivec_count",(ivec_count(i),i=0,nfgtasks-1)
2429 call MPI_Allgatherv(Ub2(1,ivec_start),ivec_count(fg_rank1),
2430 & MPI_MU,Ub2(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2432 call MPI_Allgatherv(Ub2der(1,ivec_start),ivec_count(fg_rank1),
2433 & MPI_MU,Ub2der(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2435 call MPI_Allgatherv(mu(1,ivec_start),ivec_count(fg_rank1),
2436 & MPI_MU,mu(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2438 call MPI_Allgatherv(muder(1,ivec_start),ivec_count(fg_rank1),
2439 & MPI_MU,muder(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2441 call MPI_Allgatherv(Eug(1,1,ivec_start),ivec_count(fg_rank1),
2442 & MPI_MAT1,Eug(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2444 call MPI_Allgatherv(Eugder(1,1,ivec_start),ivec_count(fg_rank1),
2445 & MPI_MAT1,Eugder(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2447 call MPI_Allgatherv(costab(ivec_start),ivec_count(fg_rank1),
2448 & MPI_DOUBLE_PRECISION,costab(1),ivec_count(0),ivec_displ(0),
2449 & MPI_DOUBLE_PRECISION,FG_COMM1,IERR)
2450 call MPI_Allgatherv(sintab(ivec_start),ivec_count(fg_rank1),
2451 & MPI_DOUBLE_PRECISION,sintab(1),ivec_count(0),ivec_displ(0),
2452 & MPI_DOUBLE_PRECISION,FG_COMM1,IERR)
2453 call MPI_Allgatherv(costab2(ivec_start),ivec_count(fg_rank1),
2454 & MPI_DOUBLE_PRECISION,costab2(1),ivec_count(0),ivec_displ(0),
2455 & MPI_DOUBLE_PRECISION,FG_COMM1,IERR)
2456 call MPI_Allgatherv(sintab2(ivec_start),ivec_count(fg_rank1),
2457 & MPI_DOUBLE_PRECISION,sintab2(1),ivec_count(0),ivec_displ(0),
2458 & MPI_DOUBLE_PRECISION,FG_COMM1,IERR)
2459 if (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0)
2461 call MPI_Allgatherv(Ctobr(1,ivec_start),ivec_count(fg_rank1),
2462 & MPI_MU,Ctobr(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2464 call MPI_Allgatherv(Ctobrder(1,ivec_start),ivec_count(fg_rank1),
2465 & MPI_MU,Ctobrder(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2467 call MPI_Allgatherv(Dtobr2(1,ivec_start),ivec_count(fg_rank1),
2468 & MPI_MU,Dtobr2(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2470 call MPI_Allgatherv(Dtobr2der(1,ivec_start),ivec_count(fg_rank1),
2471 & MPI_MU,Dtobr2der(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2473 call MPI_Allgatherv(Ug2Db1t(1,ivec_start),ivec_count(fg_rank1),
2474 & MPI_MU,Ug2Db1t(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2476 call MPI_Allgatherv(Ug2Db1tder(1,ivec_start),
2477 & ivec_count(fg_rank1),
2478 & MPI_MU,Ug2Db1tder(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2480 call MPI_Allgatherv(CUgb2(1,ivec_start),ivec_count(fg_rank1),
2481 & MPI_MU,CUgb2(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2483 call MPI_Allgatherv(CUgb2der(1,ivec_start),ivec_count(fg_rank1),
2484 & MPI_MU,CUgb2der(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2486 call MPI_Allgatherv(Cug(1,1,ivec_start),ivec_count(fg_rank1),
2487 & MPI_MAT1,Cug(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2489 call MPI_Allgatherv(Cugder(1,1,ivec_start),ivec_count(fg_rank1),
2490 & MPI_MAT1,Cugder(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2492 call MPI_Allgatherv(Dug(1,1,ivec_start),ivec_count(fg_rank1),
2493 & MPI_MAT1,Dug(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2495 call MPI_Allgatherv(Dugder(1,1,ivec_start),ivec_count(fg_rank1),
2496 & MPI_MAT1,Dugder(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2498 call MPI_Allgatherv(Dtug2(1,1,ivec_start),ivec_count(fg_rank1),
2499 & MPI_MAT1,Dtug2(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2501 call MPI_Allgatherv(Dtug2der(1,1,ivec_start),
2502 & ivec_count(fg_rank1),
2503 & MPI_MAT1,Dtug2der(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2505 call MPI_Allgatherv(EugC(1,1,ivec_start),ivec_count(fg_rank1),
2506 & MPI_MAT1,EugC(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2508 call MPI_Allgatherv(EugCder(1,1,ivec_start),ivec_count(fg_rank1),
2509 & MPI_MAT1,EugCder(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2511 call MPI_Allgatherv(EugD(1,1,ivec_start),ivec_count(fg_rank1),
2512 & MPI_MAT1,EugD(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2514 call MPI_Allgatherv(EugDder(1,1,ivec_start),ivec_count(fg_rank1),
2515 & MPI_MAT1,EugDder(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2517 call MPI_Allgatherv(DtUg2EUg(1,1,ivec_start),
2518 & ivec_count(fg_rank1),
2519 & MPI_MAT1,DtUg2EUg(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2521 call MPI_Allgatherv(Ug2DtEUg(1,1,ivec_start),
2522 & ivec_count(fg_rank1),
2523 & MPI_MAT1,Ug2DtEUg(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2525 call MPI_Allgatherv(DtUg2EUgder(1,1,1,ivec_start),
2526 & ivec_count(fg_rank1),
2527 & MPI_MAT2,DtUg2EUgder(1,1,1,1),ivec_count(0),ivec_displ(0),
2528 & MPI_MAT2,FG_COMM1,IERR)
2529 call MPI_Allgatherv(Ug2DtEUgder(1,1,1,ivec_start),
2530 & ivec_count(fg_rank1),
2531 & MPI_MAT2,Ug2DtEUgder(1,1,1,1),ivec_count(0),ivec_displ(0),
2532 & MPI_MAT2,FG_COMM1,IERR)
2535 c Passes matrix info through the ring
2538 if (irecv.lt.0) irecv=nfgtasks1-1
2541 if (inext.ge.nfgtasks1) inext=0
2543 c write (iout,*) "isend",isend," irecv",irecv
2545 lensend=lentyp(isend)
2546 lenrecv=lentyp(irecv)
2547 c write (iout,*) "lensend",lensend," lenrecv",lenrecv
2548 c call MPI_SENDRECV(ug(1,1,ivec_displ(isend)+1),1,
2549 c & MPI_ROTAT1(lensend),inext,2200+isend,
2550 c & ug(1,1,ivec_displ(irecv)+1),1,MPI_ROTAT1(lenrecv),
2551 c & iprev,2200+irecv,FG_COMM,status,IERR)
2552 c write (iout,*) "Gather ROTAT1"
2554 c call MPI_SENDRECV(obrot(1,ivec_displ(isend)+1),1,
2555 c & MPI_ROTAT2(lensend),inext,3300+isend,
2556 c & obrot(1,ivec_displ(irecv)+1),1,MPI_ROTAT2(lenrecv),
2557 c & iprev,3300+irecv,FG_COMM,status,IERR)
2558 c write (iout,*) "Gather ROTAT2"
2560 call MPI_SENDRECV(costab(ivec_displ(isend)+1),1,
2561 & MPI_ROTAT_OLD(lensend),inext,4400+isend,
2562 & costab(ivec_displ(irecv)+1),1,MPI_ROTAT_OLD(lenrecv),
2563 & iprev,4400+irecv,FG_COMM,status,IERR)
2564 c write (iout,*) "Gather ROTAT_OLD"
2566 call MPI_SENDRECV(mu(1,ivec_displ(isend)+1),1,
2567 & MPI_PRECOMP11(lensend),inext,5500+isend,
2568 & mu(1,ivec_displ(irecv)+1),1,MPI_PRECOMP11(lenrecv),
2569 & iprev,5500+irecv,FG_COMM,status,IERR)
2570 c write (iout,*) "Gather PRECOMP11"
2572 call MPI_SENDRECV(Eug(1,1,ivec_displ(isend)+1),1,
2573 & MPI_PRECOMP12(lensend),inext,6600+isend,
2574 & Eug(1,1,ivec_displ(irecv)+1),1,MPI_PRECOMP12(lenrecv),
2575 & iprev,6600+irecv,FG_COMM,status,IERR)
2576 c write (iout,*) "Gather PRECOMP12"
2578 if (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0)
2580 call MPI_SENDRECV(ug2db1t(1,ivec_displ(isend)+1),1,
2581 & MPI_ROTAT2(lensend),inext,7700+isend,
2582 & ug2db1t(1,ivec_displ(irecv)+1),1,MPI_ROTAT2(lenrecv),
2583 & iprev,7700+irecv,FG_COMM,status,IERR)
2584 c write (iout,*) "Gather PRECOMP21"
2586 call MPI_SENDRECV(EUgC(1,1,ivec_displ(isend)+1),1,
2587 & MPI_PRECOMP22(lensend),inext,8800+isend,
2588 & EUgC(1,1,ivec_displ(irecv)+1),1,MPI_PRECOMP22(lenrecv),
2589 & iprev,8800+irecv,FG_COMM,status,IERR)
2590 c write (iout,*) "Gather PRECOMP22"
2592 call MPI_SENDRECV(Ug2DtEUgder(1,1,1,ivec_displ(isend)+1),1,
2593 & MPI_PRECOMP23(lensend),inext,9900+isend,
2594 & Ug2DtEUgder(1,1,1,ivec_displ(irecv)+1),1,
2595 & MPI_PRECOMP23(lenrecv),
2596 & iprev,9900+irecv,FG_COMM,status,IERR)
2597 c write (iout,*) "Gather PRECOMP23"
2602 if (irecv.lt.0) irecv=nfgtasks1-1
2605 time_gather=time_gather+MPI_Wtime()-time00
2608 c if (fg_rank.eq.0) then
2609 write (iout,*) "Arrays UG and UGDER"
2611 write (iout,'(i5,4f10.5,5x,4f10.5)') i,
2612 & ((ug(l,k,i),l=1,2),k=1,2),
2613 & ((ugder(l,k,i),l=1,2),k=1,2)
2615 write (iout,*) "Arrays UG2 and UG2DER"
2617 write (iout,'(i5,4f10.5,5x,4f10.5)') i,
2618 & ((ug2(l,k,i),l=1,2),k=1,2),
2619 & ((ug2der(l,k,i),l=1,2),k=1,2)
2621 write (iout,*) "Arrays OBROT OBROT2 OBROTDER and OBROT2DER"
2623 write (iout,'(i5,4f10.5,5x,4f10.5)') i,
2624 & (obrot(k,i),k=1,2),(obrot2(k,i),k=1,2),
2625 & (obrot_der(k,i),k=1,2),(obrot2_der(k,i),k=1,2)
2627 write (iout,*) "Arrays COSTAB SINTAB COSTAB2 and SINTAB2"
2629 write (iout,'(i5,4f10.5,5x,4f10.5)') i,
2630 & costab(i),sintab(i),costab2(i),sintab2(i)
2632 write (iout,*) "Array MUDER"
2634 write (iout,'(i5,2f10.5)') i,muder(1,i),muder(2,i)
2640 cd iti = itortyp(itype(i))
2643 cd write (iout,'(2f10.5,5x,2f10.5,5x,2f10.5)')
2644 cd & (EE(j,k,iti),k=1,2),(Ug(j,k,i),k=1,2),(EUg(j,k,i),k=1,2)
2649 C--------------------------------------------------------------------------
2650 subroutine eelec(ees,evdw1,eel_loc,eello_turn3,eello_turn4)
2652 C This subroutine calculates the average interaction energy and its gradient
2653 C in the virtual-bond vectors between non-adjacent peptide groups, based on
2654 C the potential described in Liwo et al., Protein Sci., 1993, 2, 1715.
2655 C The potential depends both on the distance of peptide-group centers and on
2656 C the orientation of the CA-CA virtual bonds.
2658 implicit real*8 (a-h,o-z)
2662 include 'DIMENSIONS'
2663 include 'COMMON.CONTROL'
2664 include 'COMMON.SETUP'
2665 include 'COMMON.IOUNITS'
2666 include 'COMMON.GEO'
2667 include 'COMMON.VAR'
2668 include 'COMMON.LOCAL'
2669 include 'COMMON.CHAIN'
2670 include 'COMMON.DERIV'
2671 include 'COMMON.INTERACT'
2672 include 'COMMON.CONTACTS'
2673 include 'COMMON.TORSION'
2674 include 'COMMON.VECTORS'
2675 include 'COMMON.FFIELD'
2676 include 'COMMON.TIME1'
2677 dimension ggg(3),gggp(3),gggm(3),erij(3),dcosb(3),dcosg(3),
2678 & erder(3,3),uryg(3,3),urzg(3,3),vryg(3,3),vrzg(3,3)
2679 double precision acipa(2,2),agg(3,4),aggi(3,4),aggi1(3,4),
2680 & aggj(3,4),aggj1(3,4),a_temp(2,2),muij(4)
2681 common /locel/ a_temp,agg,aggi,aggi1,aggj,aggj1,a22,a23,a32,a33,
2682 & dxi,dyi,dzi,dx_normi,dy_normi,dz_normi,xmedi,ymedi,zmedi,
2684 c 4/26/02 - AL scaling factor for 1,4 repulsive VDW interactions
2686 double precision scal_el /1.0d0/
2688 double precision scal_el /0.5d0/
2691 C 13-go grudnia roku pamietnego...
2692 double precision unmat(3,3) /1.0d0,0.0d0,0.0d0,
2693 & 0.0d0,1.0d0,0.0d0,
2694 & 0.0d0,0.0d0,1.0d0/
2695 cd write(iout,*) 'In EELEC'
2697 cd write(iout,*) 'Type',i
2698 cd write(iout,*) 'B1',B1(:,i)
2699 cd write(iout,*) 'B2',B2(:,i)
2700 cd write(iout,*) 'CC',CC(:,:,i)
2701 cd write(iout,*) 'DD',DD(:,:,i)
2702 cd write(iout,*) 'EE',EE(:,:,i)
2704 cd call check_vecgrad
2706 if (icheckgrad.eq.1) then
2708 fac=1.0d0/dsqrt(scalar(dc(1,i),dc(1,i)))
2710 dc_norm(k,i)=dc(k,i)*fac
2712 c write (iout,*) 'i',i,' fac',fac
2715 if (wel_loc.gt.0.0d0 .or. wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0
2716 & .or. wcorr6.gt.0.0d0 .or. wturn3.gt.0.0d0 .or.
2717 & wturn4.gt.0.0d0 .or. wturn6.gt.0.0d0) then
2718 c call vec_and_deriv
2724 time_mat=time_mat+MPI_Wtime()-time01
2728 cd write (iout,*) 'i=',i
2730 cd write (iout,'(i5,2f10.5)') k,uy(k,i),uz(k,i)
2733 cd write (iout,'(f10.5,2x,3f10.5,2x,3f10.5)')
2734 cd & uz(k,i),(uzgrad(k,l,1,i),l=1,3),(uzgrad(k,l,2,i),l=1,3)
2747 cd print '(a)','Enter EELEC'
2748 cd write (iout,*) 'iatel_s=',iatel_s,' iatel_e=',iatel_e
2750 gel_loc_loc(i)=0.0d0
2755 c 9/27/08 AL Split the interaction loop to ensure load balancing of turn terms
2757 C Loop over i,i+2 and i,i+3 pairs of the peptide groups
2759 do i=iturn3_start,iturn3_end
2760 if (itype(i).eq.21 .or. itype(i+1).eq.21
2761 & .or. itype(i+2).eq.21 .or. itype(i+3).eq.21) cycle
2765 dx_normi=dc_norm(1,i)
2766 dy_normi=dc_norm(2,i)
2767 dz_normi=dc_norm(3,i)
2768 xmedi=c(1,i)+0.5d0*dxi
2769 ymedi=c(2,i)+0.5d0*dyi
2770 zmedi=c(3,i)+0.5d0*dzi
2772 call eelecij(i,i+2,ees,evdw1,eel_loc)
2773 if (wturn3.gt.0.0d0) call eturn3(i,eello_turn3)
2774 num_cont_hb(i)=num_conti
2776 do i=iturn4_start,iturn4_end
2777 if (itype(i).eq.21 .or. itype(i+1).eq.21
2778 & .or. itype(i+3).eq.21
2779 & .or. itype(i+4).eq.21) cycle
2783 dx_normi=dc_norm(1,i)
2784 dy_normi=dc_norm(2,i)
2785 dz_normi=dc_norm(3,i)
2786 xmedi=c(1,i)+0.5d0*dxi
2787 ymedi=c(2,i)+0.5d0*dyi
2788 zmedi=c(3,i)+0.5d0*dzi
2789 num_conti=num_cont_hb(i)
2790 call eelecij(i,i+3,ees,evdw1,eel_loc)
2791 if (wturn4.gt.0.0d0 .and. itype(i+2).ne.21)
2792 & call eturn4(i,eello_turn4)
2793 num_cont_hb(i)=num_conti
2796 c Loop over all pairs of interacting peptide groups except i,i+2 and i,i+3
2798 do i=iatel_s,iatel_e
2799 if (itype(i).eq.21 .or. itype(i+1).eq.21) cycle
2803 dx_normi=dc_norm(1,i)
2804 dy_normi=dc_norm(2,i)
2805 dz_normi=dc_norm(3,i)
2806 xmedi=c(1,i)+0.5d0*dxi
2807 ymedi=c(2,i)+0.5d0*dyi
2808 zmedi=c(3,i)+0.5d0*dzi
2809 c write (iout,*) 'i',i,' ielstart',ielstart(i),' ielend',ielend(i)
2810 num_conti=num_cont_hb(i)
2811 do j=ielstart(i),ielend(i)
2812 c write (iout,*) i,j,itype(i),itype(j)
2813 if (itype(j).eq.21 .or. itype(j+1).eq.21) cycle
2814 call eelecij(i,j,ees,evdw1,eel_loc)
2816 num_cont_hb(i)=num_conti
2818 c write (iout,*) "Number of loop steps in EELEC:",ind
2820 cd write (iout,'(i3,3f10.5,5x,3f10.5)')
2821 cd & i,(gel_loc(k,i),k=1,3),gel_loc_loc(i)
2823 c 12/7/99 Adam eello_turn3 will be considered as a separate energy term
2824 ccc eel_loc=eel_loc+eello_turn3
2825 cd print *,"Processor",fg_rank," t_eelecij",t_eelecij
2828 C-------------------------------------------------------------------------------
2829 subroutine eelecij(i,j,ees,evdw1,eel_loc)
2830 implicit real*8 (a-h,o-z)
2831 include 'DIMENSIONS'
2835 include 'COMMON.CONTROL'
2836 include 'COMMON.IOUNITS'
2837 include 'COMMON.GEO'
2838 include 'COMMON.VAR'
2839 include 'COMMON.LOCAL'
2840 include 'COMMON.CHAIN'
2841 include 'COMMON.DERIV'
2842 include 'COMMON.INTERACT'
2843 include 'COMMON.CONTACTS'
2844 include 'COMMON.TORSION'
2845 include 'COMMON.VECTORS'
2846 include 'COMMON.FFIELD'
2847 include 'COMMON.TIME1'
2848 dimension ggg(3),gggp(3),gggm(3),erij(3),dcosb(3),dcosg(3),
2849 & erder(3,3),uryg(3,3),urzg(3,3),vryg(3,3),vrzg(3,3)
2850 double precision acipa(2,2),agg(3,4),aggi(3,4),aggi1(3,4),
2851 & aggj(3,4),aggj1(3,4),a_temp(2,2),muij(4)
2852 common /locel/ a_temp,agg,aggi,aggi1,aggj,aggj1,a22,a23,a32,a33,
2853 & dxi,dyi,dzi,dx_normi,dy_normi,dz_normi,xmedi,ymedi,zmedi,
2855 c 4/26/02 - AL scaling factor for 1,4 repulsive VDW interactions
2857 double precision scal_el /1.0d0/
2859 double precision scal_el /0.5d0/
2862 C 13-go grudnia roku pamietnego...
2863 double precision unmat(3,3) /1.0d0,0.0d0,0.0d0,
2864 & 0.0d0,1.0d0,0.0d0,
2865 & 0.0d0,0.0d0,1.0d0/
2866 c time00=MPI_Wtime()
2867 cd write (iout,*) "eelecij",i,j
2871 if (j.eq.i+2 .and. itelj.eq.2) iteli=2
2872 aaa=app(iteli,itelj)
2873 bbb=bpp(iteli,itelj)
2874 ael6i=ael6(iteli,itelj)
2875 ael3i=ael3(iteli,itelj)
2879 dx_normj=dc_norm(1,j)
2880 dy_normj=dc_norm(2,j)
2881 dz_normj=dc_norm(3,j)
2882 xj=c(1,j)+0.5D0*dxj-xmedi
2883 yj=c(2,j)+0.5D0*dyj-ymedi
2884 zj=c(3,j)+0.5D0*dzj-zmedi
2885 rij=xj*xj+yj*yj+zj*zj
2891 cosa=dx_normi*dx_normj+dy_normi*dy_normj+dz_normi*dz_normj
2892 cosb=(xj*dx_normi+yj*dy_normi+zj*dz_normi)*rmij
2893 cosg=(xj*dx_normj+yj*dy_normj+zj*dz_normj)*rmij
2894 fac=cosa-3.0D0*cosb*cosg
2896 c 4/26/02 - AL scaling down 1,4 repulsive VDW interactions
2897 if (j.eq.i+2) ev1=scal_el*ev1
2902 el1=fac3*(4.0D0+fac*fac-3.0D0*(cosb*cosb+cosg*cosg))
2905 C 12/26/95 - for the evaluation of multi-body H-bonding interactions
2906 ees0ij=4.0D0+fac*fac-3.0D0*(cosb*cosb+cosg*cosg)
2909 cd write(iout,'(2(2i3,2x),7(1pd12.4)/2(3(1pd12.4),5x)/)')
2910 cd & iteli,i,itelj,j,aaa,bbb,ael6i,ael3i,
2911 cd & 1.0D0/dsqrt(rrmij),evdwij,eesij,
2912 cd & xmedi,ymedi,zmedi,xj,yj,zj
2914 if (energy_dec) then
2915 write (iout,'(a6,2i5,0pf7.3)') 'evdw1',i,j,evdwij
2916 write (iout,'(a6,2i5,0pf7.3)') 'ees',i,j,eesij
2920 C Calculate contributions to the Cartesian gradient.
2923 facvdw=-6*rrmij*(ev1+evdwij)
2924 facel=-3*rrmij*(el1+eesij)
2930 * Radial derivatives. First process both termini of the fragment (i,j)
2936 c ghalf=0.5D0*ggg(k)
2937 c gelc(k,i)=gelc(k,i)+ghalf
2938 c gelc(k,j)=gelc(k,j)+ghalf
2940 c 9/28/08 AL Gradient compotents will be summed only at the end
2942 gelc_long(k,j)=gelc_long(k,j)+ggg(k)
2943 gelc_long(k,i)=gelc_long(k,i)-ggg(k)
2946 * Loop over residues i+1 thru j-1.
2950 cgrad gelc(l,k)=gelc(l,k)+ggg(l)
2957 c ghalf=0.5D0*ggg(k)
2958 c gvdwpp(k,i)=gvdwpp(k,i)+ghalf
2959 c gvdwpp(k,j)=gvdwpp(k,j)+ghalf
2961 c 9/28/08 AL Gradient compotents will be summed only at the end
2963 gvdwpp(k,j)=gvdwpp(k,j)+ggg(k)
2964 gvdwpp(k,i)=gvdwpp(k,i)-ggg(k)
2967 * Loop over residues i+1 thru j-1.
2971 cgrad gvdwpp(l,k)=gvdwpp(l,k)+ggg(l)
2978 fac=-3*rrmij*(facvdw+facvdw+facel)
2983 * Radial derivatives. First process both termini of the fragment (i,j)
2989 c ghalf=0.5D0*ggg(k)
2990 c gelc(k,i)=gelc(k,i)+ghalf
2991 c gelc(k,j)=gelc(k,j)+ghalf
2993 c 9/28/08 AL Gradient compotents will be summed only at the end
2995 gelc_long(k,j)=gelc(k,j)+ggg(k)
2996 gelc_long(k,i)=gelc(k,i)-ggg(k)
2999 * Loop over residues i+1 thru j-1.
3003 cgrad gelc(l,k)=gelc(l,k)+ggg(l)
3006 c 9/28/08 AL Gradient compotents will be summed only at the end
3011 gvdwpp(k,j)=gvdwpp(k,j)+ggg(k)
3012 gvdwpp(k,i)=gvdwpp(k,i)-ggg(k)
3018 ecosa=2.0D0*fac3*fac1+fac4
3021 ecosb=(fac3*(fac1*cosg+cosb)+cosg*fac4)
3022 ecosg=(fac3*(fac1*cosb+cosg)+cosb*fac4)
3024 dcosb(k)=rmij*(dc_norm(k,i)-erij(k)*cosb)
3025 dcosg(k)=rmij*(dc_norm(k,j)-erij(k)*cosg)
3027 cd print '(2i3,2(3(1pd14.5),3x))',i,j,(dcosb(k),k=1,3),
3028 cd & (dcosg(k),k=1,3)
3030 ggg(k)=ecosb*dcosb(k)+ecosg*dcosg(k)
3033 c ghalf=0.5D0*ggg(k)
3034 c gelc(k,i)=gelc(k,i)+ghalf
3035 c & +(ecosa*(dc_norm(k,j)-cosa*dc_norm(k,i))
3036 c & + ecosb*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1)
3037 c gelc(k,j)=gelc(k,j)+ghalf
3038 c & +(ecosa*(dc_norm(k,i)-cosa*dc_norm(k,j))
3039 c & + ecosg*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1)
3043 cgrad gelc(l,k)=gelc(l,k)+ggg(l)
3048 & +(ecosa*(dc_norm(k,j)-cosa*dc_norm(k,i))
3049 & + ecosb*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1)
3051 & +(ecosa*(dc_norm(k,i)-cosa*dc_norm(k,j))
3052 & + ecosg*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1)
3053 gelc_long(k,j)=gelc_long(k,j)+ggg(k)
3054 gelc_long(k,i)=gelc_long(k,i)-ggg(k)
3056 IF (wel_loc.gt.0.0d0 .or. wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0
3057 & .or. wcorr6.gt.0.0d0 .or. wturn3.gt.0.0d0
3058 & .or. wturn4.gt.0.0d0 .or. wturn6.gt.0.0d0) THEN
3060 C 9/25/99 Mixed third-order local-electrostatic terms. The local-interaction
3061 C energy of a peptide unit is assumed in the form of a second-order
3062 C Fourier series in the angles lambda1 and lambda2 (see Nishikawa et al.
3063 C Macromolecules, 1974, 7, 797-806 for definition). This correlation terms
3064 C are computed for EVERY pair of non-contiguous peptide groups.
3066 if (j.lt.nres-1) then
3077 muij(kkk)=mu(k,i)*mu(l,j)
3080 cd write (iout,*) 'EELEC: i',i,' j',j
3081 cd write (iout,*) 'j',j,' j1',j1,' j2',j2
3082 cd write(iout,*) 'muij',muij
3083 ury=scalar(uy(1,i),erij)
3084 urz=scalar(uz(1,i),erij)
3085 vry=scalar(uy(1,j),erij)
3086 vrz=scalar(uz(1,j),erij)
3087 a22=scalar(uy(1,i),uy(1,j))-3*ury*vry
3088 a23=scalar(uy(1,i),uz(1,j))-3*ury*vrz
3089 a32=scalar(uz(1,i),uy(1,j))-3*urz*vry
3090 a33=scalar(uz(1,i),uz(1,j))-3*urz*vrz
3091 fac=dsqrt(-ael6i)*r3ij
3096 cd write (iout,'(4i5,4f10.5)')
3097 cd & i,itortyp(itype(i)),j,itortyp(itype(j)),a22,a23,a32,a33
3098 cd write (iout,'(6f10.5)') (muij(k),k=1,4),fac,eel_loc_ij
3099 cd write (iout,'(2(3f10.5,5x)/2(3f10.5,5x))') uy(:,i),uz(:,i),
3100 cd & uy(:,j),uz(:,j)
3101 cd write (iout,'(4f10.5)')
3102 cd & scalar(uy(1,i),uy(1,j)),scalar(uy(1,i),uz(1,j)),
3103 cd & scalar(uz(1,i),uy(1,j)),scalar(uz(1,i),uz(1,j))
3104 cd write (iout,'(4f10.5)') ury,urz,vry,vrz
3105 cd write (iout,'(9f10.5/)')
3106 cd & fac22,a22,fac23,a23,fac32,a32,fac33,a33,eel_loc_ij
3107 C Derivatives of the elements of A in virtual-bond vectors
3108 call unormderiv(erij(1),unmat(1,1),rmij,erder(1,1))
3110 uryg(k,1)=scalar(erder(1,k),uy(1,i))
3111 uryg(k,2)=scalar(uygrad(1,k,1,i),erij(1))
3112 uryg(k,3)=scalar(uygrad(1,k,2,i),erij(1))
3113 urzg(k,1)=scalar(erder(1,k),uz(1,i))
3114 urzg(k,2)=scalar(uzgrad(1,k,1,i),erij(1))
3115 urzg(k,3)=scalar(uzgrad(1,k,2,i),erij(1))
3116 vryg(k,1)=scalar(erder(1,k),uy(1,j))
3117 vryg(k,2)=scalar(uygrad(1,k,1,j),erij(1))
3118 vryg(k,3)=scalar(uygrad(1,k,2,j),erij(1))
3119 vrzg(k,1)=scalar(erder(1,k),uz(1,j))
3120 vrzg(k,2)=scalar(uzgrad(1,k,1,j),erij(1))
3121 vrzg(k,3)=scalar(uzgrad(1,k,2,j),erij(1))
3123 C Compute radial contributions to the gradient
3141 C Add the contributions coming from er
3144 agg(k,1)=agg(k,1)+fac3*(uryg(k,1)*vry+vryg(k,1)*ury)
3145 agg(k,2)=agg(k,2)+fac3*(uryg(k,1)*vrz+vrzg(k,1)*ury)
3146 agg(k,3)=agg(k,3)+fac3*(urzg(k,1)*vry+vryg(k,1)*urz)
3147 agg(k,4)=agg(k,4)+fac3*(urzg(k,1)*vrz+vrzg(k,1)*urz)
3150 C Derivatives in DC(i)
3151 cgrad ghalf1=0.5d0*agg(k,1)
3152 cgrad ghalf2=0.5d0*agg(k,2)
3153 cgrad ghalf3=0.5d0*agg(k,3)
3154 cgrad ghalf4=0.5d0*agg(k,4)
3155 aggi(k,1)=fac*(scalar(uygrad(1,k,1,i),uy(1,j))
3156 & -3.0d0*uryg(k,2)*vry)!+ghalf1
3157 aggi(k,2)=fac*(scalar(uygrad(1,k,1,i),uz(1,j))
3158 & -3.0d0*uryg(k,2)*vrz)!+ghalf2
3159 aggi(k,3)=fac*(scalar(uzgrad(1,k,1,i),uy(1,j))
3160 & -3.0d0*urzg(k,2)*vry)!+ghalf3
3161 aggi(k,4)=fac*(scalar(uzgrad(1,k,1,i),uz(1,j))
3162 & -3.0d0*urzg(k,2)*vrz)!+ghalf4
3163 C Derivatives in DC(i+1)
3164 aggi1(k,1)=fac*(scalar(uygrad(1,k,2,i),uy(1,j))
3165 & -3.0d0*uryg(k,3)*vry)!+agg(k,1)
3166 aggi1(k,2)=fac*(scalar(uygrad(1,k,2,i),uz(1,j))
3167 & -3.0d0*uryg(k,3)*vrz)!+agg(k,2)
3168 aggi1(k,3)=fac*(scalar(uzgrad(1,k,2,i),uy(1,j))
3169 & -3.0d0*urzg(k,3)*vry)!+agg(k,3)
3170 aggi1(k,4)=fac*(scalar(uzgrad(1,k,2,i),uz(1,j))
3171 & -3.0d0*urzg(k,3)*vrz)!+agg(k,4)
3172 C Derivatives in DC(j)
3173 aggj(k,1)=fac*(scalar(uygrad(1,k,1,j),uy(1,i))
3174 & -3.0d0*vryg(k,2)*ury)!+ghalf1
3175 aggj(k,2)=fac*(scalar(uzgrad(1,k,1,j),uy(1,i))
3176 & -3.0d0*vrzg(k,2)*ury)!+ghalf2
3177 aggj(k,3)=fac*(scalar(uygrad(1,k,1,j),uz(1,i))
3178 & -3.0d0*vryg(k,2)*urz)!+ghalf3
3179 aggj(k,4)=fac*(scalar(uzgrad(1,k,1,j),uz(1,i))
3180 & -3.0d0*vrzg(k,2)*urz)!+ghalf4
3181 C Derivatives in DC(j+1) or DC(nres-1)
3182 aggj1(k,1)=fac*(scalar(uygrad(1,k,2,j),uy(1,i))
3183 & -3.0d0*vryg(k,3)*ury)
3184 aggj1(k,2)=fac*(scalar(uzgrad(1,k,2,j),uy(1,i))
3185 & -3.0d0*vrzg(k,3)*ury)
3186 aggj1(k,3)=fac*(scalar(uygrad(1,k,2,j),uz(1,i))
3187 & -3.0d0*vryg(k,3)*urz)
3188 aggj1(k,4)=fac*(scalar(uzgrad(1,k,2,j),uz(1,i))
3189 & -3.0d0*vrzg(k,3)*urz)
3190 cgrad if (j.eq.nres-1 .and. i.lt.j-2) then
3192 cgrad aggj1(k,l)=aggj1(k,l)+agg(k,l)
3205 aggi(k,l)=-aggi(k,l)
3206 aggi1(k,l)=-aggi1(k,l)
3207 aggj(k,l)=-aggj(k,l)
3208 aggj1(k,l)=-aggj1(k,l)
3211 if (j.lt.nres-1) then
3217 aggi(k,l)=-aggi(k,l)
3218 aggi1(k,l)=-aggi1(k,l)
3219 aggj(k,l)=-aggj(k,l)
3220 aggj1(k,l)=-aggj1(k,l)
3231 aggi(k,l)=-aggi(k,l)
3232 aggi1(k,l)=-aggi1(k,l)
3233 aggj(k,l)=-aggj(k,l)
3234 aggj1(k,l)=-aggj1(k,l)
3239 IF (wel_loc.gt.0.0d0) THEN
3240 C Contribution to the local-electrostatic energy coming from the i-j pair
3241 eel_loc_ij=a22*muij(1)+a23*muij(2)+a32*muij(3)
3243 cd write (iout,*) 'i',i,' j',j,' eel_loc_ij',eel_loc_ij
3245 if (energy_dec) write (iout,'(a6,2i5,0pf7.3)')
3246 & 'eelloc',i,j,eel_loc_ij
3248 eel_loc=eel_loc+eel_loc_ij
3249 C Partial derivatives in virtual-bond dihedral angles gamma
3251 & gel_loc_loc(i-1)=gel_loc_loc(i-1)+
3252 & a22*muder(1,i)*mu(1,j)+a23*muder(1,i)*mu(2,j)
3253 & +a32*muder(2,i)*mu(1,j)+a33*muder(2,i)*mu(2,j)
3254 gel_loc_loc(j-1)=gel_loc_loc(j-1)+
3255 & a22*mu(1,i)*muder(1,j)+a23*mu(1,i)*muder(2,j)
3256 & +a32*mu(2,i)*muder(1,j)+a33*mu(2,i)*muder(2,j)
3257 C Derivatives of eello in DC(i+1) thru DC(j-1) or DC(nres-2)
3259 ggg(l)=agg(l,1)*muij(1)+
3260 & agg(l,2)*muij(2)+agg(l,3)*muij(3)+agg(l,4)*muij(4)
3261 gel_loc_long(l,j)=gel_loc_long(l,j)+ggg(l)
3262 gel_loc_long(l,i)=gel_loc_long(l,i)-ggg(l)
3263 cgrad ghalf=0.5d0*ggg(l)
3264 cgrad gel_loc(l,i)=gel_loc(l,i)+ghalf
3265 cgrad gel_loc(l,j)=gel_loc(l,j)+ghalf
3269 cgrad gel_loc(l,k)=gel_loc(l,k)+ggg(l)
3272 C Remaining derivatives of eello
3274 gel_loc(l,i)=gel_loc(l,i)+aggi(l,1)*muij(1)+
3275 & aggi(l,2)*muij(2)+aggi(l,3)*muij(3)+aggi(l,4)*muij(4)
3276 gel_loc(l,i+1)=gel_loc(l,i+1)+aggi1(l,1)*muij(1)+
3277 & aggi1(l,2)*muij(2)+aggi1(l,3)*muij(3)+aggi1(l,4)*muij(4)
3278 gel_loc(l,j)=gel_loc(l,j)+aggj(l,1)*muij(1)+
3279 & aggj(l,2)*muij(2)+aggj(l,3)*muij(3)+aggj(l,4)*muij(4)
3280 gel_loc(l,j1)=gel_loc(l,j1)+aggj1(l,1)*muij(1)+
3281 & aggj1(l,2)*muij(2)+aggj1(l,3)*muij(3)+aggj1(l,4)*muij(4)
3284 C Change 12/26/95 to calculate four-body contributions to H-bonding energy
3285 c if (j.gt.i+1 .and. num_conti.le.maxconts) then
3286 if (wcorr+wcorr4+wcorr5+wcorr6.gt.0.0d0
3287 & .and. num_conti.le.maxconts) then
3288 c write (iout,*) i,j," entered corr"
3290 C Calculate the contact function. The ith column of the array JCONT will
3291 C contain the numbers of atoms that make contacts with the atom I (of numbers
3292 C greater than I). The arrays FACONT and GACONT will contain the values of
3293 C the contact function and its derivative.
3294 c r0ij=1.02D0*rpp(iteli,itelj)
3295 c r0ij=1.11D0*rpp(iteli,itelj)
3296 r0ij=2.20D0*rpp(iteli,itelj)
3297 c r0ij=1.55D0*rpp(iteli,itelj)
3298 call gcont(rij,r0ij,1.0D0,0.2d0*r0ij,fcont,fprimcont)
3299 if (fcont.gt.0.0D0) then
3300 num_conti=num_conti+1
3301 if (num_conti.gt.maxconts) then
3302 write (iout,*) 'WARNING - max. # of contacts exceeded;',
3303 & ' will skip next contacts for this conf.'
3305 jcont_hb(num_conti,i)=j
3306 cd write (iout,*) "i",i," j",j," num_conti",num_conti,
3307 cd & " jcont_hb",jcont_hb(num_conti,i)
3308 IF (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or.
3309 & wcorr6.gt.0.0d0 .or. wturn6.gt.0.0d0) THEN
3310 C 9/30/99 (AL) - store components necessary to evaluate higher-order loc-el
3312 d_cont(num_conti,i)=rij
3313 cd write (2,'(3e15.5)') rij,r0ij+0.2d0*r0ij,rij
3314 C --- Electrostatic-interaction matrix ---
3315 a_chuj(1,1,num_conti,i)=a22
3316 a_chuj(1,2,num_conti,i)=a23
3317 a_chuj(2,1,num_conti,i)=a32
3318 a_chuj(2,2,num_conti,i)=a33
3319 C --- Gradient of rij
3321 grij_hb_cont(kkk,num_conti,i)=erij(kkk)
3328 a_chuj_der(k,l,m,1,num_conti,i)=agg(m,kkll)
3329 a_chuj_der(k,l,m,2,num_conti,i)=aggi(m,kkll)
3330 a_chuj_der(k,l,m,3,num_conti,i)=aggi1(m,kkll)
3331 a_chuj_der(k,l,m,4,num_conti,i)=aggj(m,kkll)
3332 a_chuj_der(k,l,m,5,num_conti,i)=aggj1(m,kkll)
3337 IF (wcorr4.eq.0.0d0 .and. wcorr.gt.0.0d0) THEN
3338 C Calculate contact energies
3340 wij=cosa-3.0D0*cosb*cosg
3343 c fac3=dsqrt(-ael6i)/r0ij**3
3344 fac3=dsqrt(-ael6i)*r3ij
3345 c ees0pij=dsqrt(4.0D0+cosa4+wij*wij-3.0D0*cosbg1*cosbg1)
3346 ees0tmp=4.0D0+cosa4+wij*wij-3.0D0*cosbg1*cosbg1
3347 if (ees0tmp.gt.0) then
3348 ees0pij=dsqrt(ees0tmp)
3352 c ees0mij=dsqrt(4.0D0-cosa4+wij*wij-3.0D0*cosbg2*cosbg2)
3353 ees0tmp=4.0D0-cosa4+wij*wij-3.0D0*cosbg2*cosbg2
3354 if (ees0tmp.gt.0) then
3355 ees0mij=dsqrt(ees0tmp)
3360 ees0p(num_conti,i)=0.5D0*fac3*(ees0pij+ees0mij)
3361 ees0m(num_conti,i)=0.5D0*fac3*(ees0pij-ees0mij)
3362 C Diagnostics. Comment out or remove after debugging!
3363 c ees0p(num_conti,i)=0.5D0*fac3*ees0pij
3364 c ees0m(num_conti,i)=0.5D0*fac3*ees0mij
3365 c ees0m(num_conti,i)=0.0D0
3367 c write (iout,*) 'i=',i,' j=',j,' rij=',rij,' r0ij=',r0ij,
3368 c & ' ees0ij=',ees0p(num_conti,i),ees0m(num_conti,i),' fcont=',fcont
3369 C Angular derivatives of the contact function
3370 ees0pij1=fac3/ees0pij
3371 ees0mij1=fac3/ees0mij
3372 fac3p=-3.0D0*fac3*rrmij
3373 ees0pijp=0.5D0*fac3p*(ees0pij+ees0mij)
3374 ees0mijp=0.5D0*fac3p*(ees0pij-ees0mij)
3376 ecosa1= ees0pij1*( 1.0D0+0.5D0*wij)
3377 ecosb1=-1.5D0*ees0pij1*(wij*cosg+cosbg1)
3378 ecosg1=-1.5D0*ees0pij1*(wij*cosb+cosbg1)
3379 ecosa2= ees0mij1*(-1.0D0+0.5D0*wij)
3380 ecosb2=-1.5D0*ees0mij1*(wij*cosg+cosbg2)
3381 ecosg2=-1.5D0*ees0mij1*(wij*cosb-cosbg2)
3382 ecosap=ecosa1+ecosa2
3383 ecosbp=ecosb1+ecosb2
3384 ecosgp=ecosg1+ecosg2
3385 ecosam=ecosa1-ecosa2
3386 ecosbm=ecosb1-ecosb2
3387 ecosgm=ecosg1-ecosg2
3396 facont_hb(num_conti,i)=fcont
3397 fprimcont=fprimcont/rij
3398 cd facont_hb(num_conti,i)=1.0D0
3399 C Following line is for diagnostics.
3402 dcosb(k)=rmij*(dc_norm(k,i)-erij(k)*cosb)
3403 dcosg(k)=rmij*(dc_norm(k,j)-erij(k)*cosg)
3406 gggp(k)=ecosbp*dcosb(k)+ecosgp*dcosg(k)
3407 gggm(k)=ecosbm*dcosb(k)+ecosgm*dcosg(k)
3409 gggp(1)=gggp(1)+ees0pijp*xj
3410 gggp(2)=gggp(2)+ees0pijp*yj
3411 gggp(3)=gggp(3)+ees0pijp*zj
3412 gggm(1)=gggm(1)+ees0mijp*xj
3413 gggm(2)=gggm(2)+ees0mijp*yj
3414 gggm(3)=gggm(3)+ees0mijp*zj
3415 C Derivatives due to the contact function
3416 gacont_hbr(1,num_conti,i)=fprimcont*xj
3417 gacont_hbr(2,num_conti,i)=fprimcont*yj
3418 gacont_hbr(3,num_conti,i)=fprimcont*zj
3421 c 10/24/08 cgrad and ! comments indicate the parts of the code removed
3422 c following the change of gradient-summation algorithm.
3424 cgrad ghalfp=0.5D0*gggp(k)
3425 cgrad ghalfm=0.5D0*gggm(k)
3426 gacontp_hb1(k,num_conti,i)=!ghalfp
3427 & +(ecosap*(dc_norm(k,j)-cosa*dc_norm(k,i))
3428 & + ecosbp*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1)
3429 gacontp_hb2(k,num_conti,i)=!ghalfp
3430 & +(ecosap*(dc_norm(k,i)-cosa*dc_norm(k,j))
3431 & + ecosgp*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1)
3432 gacontp_hb3(k,num_conti,i)=gggp(k)
3433 gacontm_hb1(k,num_conti,i)=!ghalfm
3434 & +(ecosam*(dc_norm(k,j)-cosa*dc_norm(k,i))
3435 & + ecosbm*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1)
3436 gacontm_hb2(k,num_conti,i)=!ghalfm
3437 & +(ecosam*(dc_norm(k,i)-cosa*dc_norm(k,j))
3438 & + ecosgm*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1)
3439 gacontm_hb3(k,num_conti,i)=gggm(k)
3441 C Diagnostics. Comment out or remove after debugging!
3443 cdiag gacontp_hb1(k,num_conti,i)=0.0D0
3444 cdiag gacontp_hb2(k,num_conti,i)=0.0D0
3445 cdiag gacontp_hb3(k,num_conti,i)=0.0D0
3446 cdiag gacontm_hb1(k,num_conti,i)=0.0D0
3447 cdiag gacontm_hb2(k,num_conti,i)=0.0D0
3448 cdiag gacontm_hb3(k,num_conti,i)=0.0D0
3451 endif ! num_conti.le.maxconts
3454 if (wturn3.gt.0.0d0 .or. wturn4.gt.0.0d0) then
3457 ghalf=0.5d0*agg(l,k)
3458 aggi(l,k)=aggi(l,k)+ghalf
3459 aggi1(l,k)=aggi1(l,k)+agg(l,k)
3460 aggj(l,k)=aggj(l,k)+ghalf
3463 if (j.eq.nres-1 .and. i.lt.j-2) then
3466 aggj1(l,k)=aggj1(l,k)+agg(l,k)
3471 c t_eelecij=t_eelecij+MPI_Wtime()-time00
3474 C-----------------------------------------------------------------------------
3475 subroutine eturn3(i,eello_turn3)
3476 C Third- and fourth-order contributions from turns
3477 implicit real*8 (a-h,o-z)
3478 include 'DIMENSIONS'
3479 include 'COMMON.IOUNITS'
3480 include 'COMMON.GEO'
3481 include 'COMMON.VAR'
3482 include 'COMMON.LOCAL'
3483 include 'COMMON.CHAIN'
3484 include 'COMMON.DERIV'
3485 include 'COMMON.INTERACT'
3486 include 'COMMON.CONTACTS'
3487 include 'COMMON.TORSION'
3488 include 'COMMON.VECTORS'
3489 include 'COMMON.FFIELD'
3490 include 'COMMON.CONTROL'
3492 double precision auxmat(2,2),auxmat1(2,2),auxmat2(2,2),pizda(2,2),
3493 & e1t(2,2),e2t(2,2),e3t(2,2),e1tder(2,2),e2tder(2,2),e3tder(2,2),
3494 & e1a(2,2),ae3(2,2),ae3e2(2,2),auxvec(2),auxvec1(2)
3495 double precision agg(3,4),aggi(3,4),aggi1(3,4),
3496 & aggj(3,4),aggj1(3,4),a_temp(2,2),auxmat3(2,2)
3497 common /locel/ a_temp,agg,aggi,aggi1,aggj,aggj1,a22,a23,a32,a33,
3498 & dxi,dyi,dzi,dx_normi,dy_normi,dz_normi,xmedi,ymedi,zmedi,
3501 c write (iout,*) "eturn3",i,j,j1,j2
3506 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
3508 C Third-order contributions
3515 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
3516 cd call checkint_turn3(i,a_temp,eello_turn3_num)
3517 call matmat2(EUg(1,1,i+1),EUg(1,1,i+2),auxmat(1,1))
3518 call transpose2(auxmat(1,1),auxmat1(1,1))
3519 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
3520 eello_turn3=eello_turn3+0.5d0*(pizda(1,1)+pizda(2,2))
3521 if (energy_dec) write (iout,'(a6,2i5,0pf7.3)')
3522 & 'eturn3',i,j,0.5d0*(pizda(1,1)+pizda(2,2))
3523 cd write (2,*) 'i,',i,' j',j,'eello_turn3',
3524 cd & 0.5d0*(pizda(1,1)+pizda(2,2)),
3525 cd & ' eello_turn3_num',4*eello_turn3_num
3526 C Derivatives in gamma(i)
3527 call matmat2(EUgder(1,1,i+1),EUg(1,1,i+2),auxmat2(1,1))
3528 call transpose2(auxmat2(1,1),auxmat3(1,1))
3529 call matmat2(a_temp(1,1),auxmat3(1,1),pizda(1,1))
3530 gel_loc_turn3(i)=gel_loc_turn3(i)+0.5d0*(pizda(1,1)+pizda(2,2))
3531 C Derivatives in gamma(i+1)
3532 call matmat2(EUg(1,1,i+1),EUgder(1,1,i+2),auxmat2(1,1))
3533 call transpose2(auxmat2(1,1),auxmat3(1,1))
3534 call matmat2(a_temp(1,1),auxmat3(1,1),pizda(1,1))
3535 gel_loc_turn3(i+1)=gel_loc_turn3(i+1)
3536 & +0.5d0*(pizda(1,1)+pizda(2,2))
3537 C Cartesian derivatives
3539 c ghalf1=0.5d0*agg(l,1)
3540 c ghalf2=0.5d0*agg(l,2)
3541 c ghalf3=0.5d0*agg(l,3)
3542 c ghalf4=0.5d0*agg(l,4)
3543 a_temp(1,1)=aggi(l,1)!+ghalf1
3544 a_temp(1,2)=aggi(l,2)!+ghalf2
3545 a_temp(2,1)=aggi(l,3)!+ghalf3
3546 a_temp(2,2)=aggi(l,4)!+ghalf4
3547 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
3548 gcorr3_turn(l,i)=gcorr3_turn(l,i)
3549 & +0.5d0*(pizda(1,1)+pizda(2,2))
3550 a_temp(1,1)=aggi1(l,1)!+agg(l,1)
3551 a_temp(1,2)=aggi1(l,2)!+agg(l,2)
3552 a_temp(2,1)=aggi1(l,3)!+agg(l,3)
3553 a_temp(2,2)=aggi1(l,4)!+agg(l,4)
3554 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
3555 gcorr3_turn(l,i+1)=gcorr3_turn(l,i+1)
3556 & +0.5d0*(pizda(1,1)+pizda(2,2))
3557 a_temp(1,1)=aggj(l,1)!+ghalf1
3558 a_temp(1,2)=aggj(l,2)!+ghalf2
3559 a_temp(2,1)=aggj(l,3)!+ghalf3
3560 a_temp(2,2)=aggj(l,4)!+ghalf4
3561 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
3562 gcorr3_turn(l,j)=gcorr3_turn(l,j)
3563 & +0.5d0*(pizda(1,1)+pizda(2,2))
3564 a_temp(1,1)=aggj1(l,1)
3565 a_temp(1,2)=aggj1(l,2)
3566 a_temp(2,1)=aggj1(l,3)
3567 a_temp(2,2)=aggj1(l,4)
3568 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
3569 gcorr3_turn(l,j1)=gcorr3_turn(l,j1)
3570 & +0.5d0*(pizda(1,1)+pizda(2,2))
3574 C-------------------------------------------------------------------------------
3575 subroutine eturn4(i,eello_turn4)
3576 C Third- and fourth-order contributions from turns
3577 implicit real*8 (a-h,o-z)
3578 include 'DIMENSIONS'
3579 include 'COMMON.IOUNITS'
3580 include 'COMMON.GEO'
3581 include 'COMMON.VAR'
3582 include 'COMMON.LOCAL'
3583 include 'COMMON.CHAIN'
3584 include 'COMMON.DERIV'
3585 include 'COMMON.INTERACT'
3586 include 'COMMON.CONTACTS'
3587 include 'COMMON.TORSION'
3588 include 'COMMON.VECTORS'
3589 include 'COMMON.FFIELD'
3590 include 'COMMON.CONTROL'
3592 double precision auxmat(2,2),auxmat1(2,2),auxmat2(2,2),pizda(2,2),
3593 & e1t(2,2),e2t(2,2),e3t(2,2),e1tder(2,2),e2tder(2,2),e3tder(2,2),
3594 & e1a(2,2),ae3(2,2),ae3e2(2,2),auxvec(2),auxvec1(2)
3595 double precision agg(3,4),aggi(3,4),aggi1(3,4),
3596 & aggj(3,4),aggj1(3,4),a_temp(2,2),auxmat3(2,2)
3597 common /locel/ a_temp,agg,aggi,aggi1,aggj,aggj1,a22,a23,a32,a33,
3598 & dxi,dyi,dzi,dx_normi,dy_normi,dz_normi,xmedi,ymedi,zmedi,
3601 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
3603 C Fourth-order contributions
3611 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
3612 cd call checkint_turn4(i,a_temp,eello_turn4_num)
3613 c write (iout,*) "eturn4 i",i," j",j," j1",j1," j2",j2
3618 iti1=itortyp(itype(i+1))
3619 iti2=itortyp(itype(i+2))
3620 iti3=itortyp(itype(i+3))
3621 c write(iout,*) "iti1",iti1," iti2",iti2," iti3",iti3
3622 call transpose2(EUg(1,1,i+1),e1t(1,1))
3623 call transpose2(Eug(1,1,i+2),e2t(1,1))
3624 call transpose2(Eug(1,1,i+3),e3t(1,1))
3625 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
3626 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
3627 s1=scalar2(b1(1,iti2),auxvec(1))
3628 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
3629 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
3630 s2=scalar2(b1(1,iti1),auxvec(1))
3631 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
3632 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
3633 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3634 eello_turn4=eello_turn4-(s1+s2+s3)
3635 if (energy_dec) write (iout,'(a6,2i5,0pf7.3)')
3636 & 'eturn4',i,j,-(s1+s2+s3)
3637 cd write (2,*) 'i,',i,' j',j,'eello_turn4',-(s1+s2+s3),
3638 cd & ' eello_turn4_num',8*eello_turn4_num
3639 C Derivatives in gamma(i)
3640 call transpose2(EUgder(1,1,i+1),e1tder(1,1))
3641 call matmat2(e1tder(1,1),a_temp(1,1),auxmat(1,1))
3642 call matvec2(auxmat(1,1),Ub2(1,i+3),auxvec(1))
3643 s1=scalar2(b1(1,iti2),auxvec(1))
3644 call matmat2(ae3e2(1,1),e1tder(1,1),pizda(1,1))
3645 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3646 gel_loc_turn4(i)=gel_loc_turn4(i)-(s1+s3)
3647 C Derivatives in gamma(i+1)
3648 call transpose2(EUgder(1,1,i+2),e2tder(1,1))
3649 call matvec2(ae3(1,1),Ub2der(1,i+2),auxvec(1))
3650 s2=scalar2(b1(1,iti1),auxvec(1))
3651 call matmat2(ae3(1,1),e2tder(1,1),auxmat(1,1))
3652 call matmat2(auxmat(1,1),e1t(1,1),pizda(1,1))
3653 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3654 gel_loc_turn4(i+1)=gel_loc_turn4(i+1)-(s2+s3)
3655 C Derivatives in gamma(i+2)
3656 call transpose2(EUgder(1,1,i+3),e3tder(1,1))
3657 call matvec2(e1a(1,1),Ub2der(1,i+3),auxvec(1))
3658 s1=scalar2(b1(1,iti2),auxvec(1))
3659 call matmat2(a_temp(1,1),e3tder(1,1),auxmat(1,1))
3660 call matvec2(auxmat(1,1),Ub2(1,i+2),auxvec(1))
3661 s2=scalar2(b1(1,iti1),auxvec(1))
3662 call matmat2(auxmat(1,1),e2t(1,1),auxmat3(1,1))
3663 call matmat2(auxmat3(1,1),e1t(1,1),pizda(1,1))
3664 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3665 gel_loc_turn4(i+2)=gel_loc_turn4(i+2)-(s1+s2+s3)
3666 C Cartesian derivatives
3667 C Derivatives of this turn contributions in DC(i+2)
3668 if (j.lt.nres-1) then
3670 a_temp(1,1)=agg(l,1)
3671 a_temp(1,2)=agg(l,2)
3672 a_temp(2,1)=agg(l,3)
3673 a_temp(2,2)=agg(l,4)
3674 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
3675 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
3676 s1=scalar2(b1(1,iti2),auxvec(1))
3677 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
3678 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
3679 s2=scalar2(b1(1,iti1),auxvec(1))
3680 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
3681 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
3682 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3684 gcorr4_turn(l,i+2)=gcorr4_turn(l,i+2)-(s1+s2+s3)
3687 C Remaining derivatives of this turn contribution
3689 a_temp(1,1)=aggi(l,1)
3690 a_temp(1,2)=aggi(l,2)
3691 a_temp(2,1)=aggi(l,3)
3692 a_temp(2,2)=aggi(l,4)
3693 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
3694 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
3695 s1=scalar2(b1(1,iti2),auxvec(1))
3696 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
3697 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
3698 s2=scalar2(b1(1,iti1),auxvec(1))
3699 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
3700 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
3701 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3702 gcorr4_turn(l,i)=gcorr4_turn(l,i)-(s1+s2+s3)
3703 a_temp(1,1)=aggi1(l,1)
3704 a_temp(1,2)=aggi1(l,2)
3705 a_temp(2,1)=aggi1(l,3)
3706 a_temp(2,2)=aggi1(l,4)
3707 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
3708 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
3709 s1=scalar2(b1(1,iti2),auxvec(1))
3710 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
3711 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
3712 s2=scalar2(b1(1,iti1),auxvec(1))
3713 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
3714 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
3715 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3716 gcorr4_turn(l,i+1)=gcorr4_turn(l,i+1)-(s1+s2+s3)
3717 a_temp(1,1)=aggj(l,1)
3718 a_temp(1,2)=aggj(l,2)
3719 a_temp(2,1)=aggj(l,3)
3720 a_temp(2,2)=aggj(l,4)
3721 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
3722 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
3723 s1=scalar2(b1(1,iti2),auxvec(1))
3724 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
3725 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
3726 s2=scalar2(b1(1,iti1),auxvec(1))
3727 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
3728 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
3729 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3730 gcorr4_turn(l,j)=gcorr4_turn(l,j)-(s1+s2+s3)
3731 a_temp(1,1)=aggj1(l,1)
3732 a_temp(1,2)=aggj1(l,2)
3733 a_temp(2,1)=aggj1(l,3)
3734 a_temp(2,2)=aggj1(l,4)
3735 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
3736 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
3737 s1=scalar2(b1(1,iti2),auxvec(1))
3738 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
3739 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
3740 s2=scalar2(b1(1,iti1),auxvec(1))
3741 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
3742 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
3743 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3744 c write (iout,*) "s1",s1," s2",s2," s3",s3," s1+s2+s3",s1+s2+s3
3745 gcorr4_turn(l,j1)=gcorr4_turn(l,j1)-(s1+s2+s3)
3749 C-----------------------------------------------------------------------------
3750 subroutine vecpr(u,v,w)
3751 implicit real*8(a-h,o-z)
3752 dimension u(3),v(3),w(3)
3753 w(1)=u(2)*v(3)-u(3)*v(2)
3754 w(2)=-u(1)*v(3)+u(3)*v(1)
3755 w(3)=u(1)*v(2)-u(2)*v(1)
3758 C-----------------------------------------------------------------------------
3759 subroutine unormderiv(u,ugrad,unorm,ungrad)
3760 C This subroutine computes the derivatives of a normalized vector u, given
3761 C the derivatives computed without normalization conditions, ugrad. Returns
3764 double precision u(3),ugrad(3,3),unorm,ungrad(3,3)
3765 double precision vec(3)
3766 double precision scalar
3768 c write (2,*) 'ugrad',ugrad
3771 vec(i)=scalar(ugrad(1,i),u(1))
3773 c write (2,*) 'vec',vec
3776 ungrad(j,i)=(ugrad(j,i)-u(j)*vec(i))*unorm
3779 c write (2,*) 'ungrad',ungrad
3782 C-----------------------------------------------------------------------------
3783 subroutine escp_soft_sphere(evdw2,evdw2_14)
3785 C This subroutine calculates the excluded-volume interaction energy between
3786 C peptide-group centers and side chains and its gradient in virtual-bond and
3787 C side-chain vectors.
3789 implicit real*8 (a-h,o-z)
3790 include 'DIMENSIONS'
3791 include 'COMMON.GEO'
3792 include 'COMMON.VAR'
3793 include 'COMMON.LOCAL'
3794 include 'COMMON.CHAIN'
3795 include 'COMMON.DERIV'
3796 include 'COMMON.INTERACT'
3797 include 'COMMON.FFIELD'
3798 include 'COMMON.IOUNITS'
3799 include 'COMMON.CONTROL'
3804 cd print '(a)','Enter ESCP'
3805 cd write (iout,*) 'iatscp_s=',iatscp_s,' iatscp_e=',iatscp_e
3806 do i=iatscp_s,iatscp_e
3807 if (itype(i).eq.21 .or. itype(i+1).eq.21) cycle
3809 xi=0.5D0*(c(1,i)+c(1,i+1))
3810 yi=0.5D0*(c(2,i)+c(2,i+1))
3811 zi=0.5D0*(c(3,i)+c(3,i+1))
3813 do iint=1,nscp_gr(i)
3815 do j=iscpstart(i,iint),iscpend(i,iint)
3816 if (itype(j).eq.21) cycle
3818 C Uncomment following three lines for SC-p interactions
3822 C Uncomment following three lines for Ca-p interactions
3826 rij=xj*xj+yj*yj+zj*zj
3829 if (rij.lt.r0ijsq) then
3830 evdwij=0.25d0*(rij-r0ijsq)**2
3838 C Calculate contributions to the gradient in the virtual-bond and SC vectors.
3843 cgrad if (j.lt.i) then
3844 cd write (iout,*) 'j<i'
3845 C Uncomment following three lines for SC-p interactions
3847 c gradx_scp(k,j)=gradx_scp(k,j)+ggg(k)
3850 cd write (iout,*) 'j>i'
3852 cgrad ggg(k)=-ggg(k)
3853 C Uncomment following line for SC-p interactions
3854 c gradx_scp(k,j)=gradx_scp(k,j)-ggg(k)
3858 cgrad gvdwc_scp(k,i)=gvdwc_scp(k,i)-0.5D0*ggg(k)
3860 cgrad kstart=min0(i+1,j)
3861 cgrad kend=max0(i-1,j-1)
3862 cd write (iout,*) 'i=',i,' j=',j,' kstart=',kstart,' kend=',kend
3863 cd write (iout,*) ggg(1),ggg(2),ggg(3)
3864 cgrad do k=kstart,kend
3866 cgrad gvdwc_scp(l,k)=gvdwc_scp(l,k)-ggg(l)
3870 gvdwc_scpp(k,i)=gvdwc_scpp(k,i)-ggg(k)
3871 gvdwc_scp(k,j)=gvdwc_scp(k,j)+ggg(k)
3879 C-----------------------------------------------------------------------------
3880 subroutine escp(evdw2,evdw2_14)
3882 C This subroutine calculates the excluded-volume interaction energy between
3883 C peptide-group centers and side chains and its gradient in virtual-bond and
3884 C side-chain vectors.
3886 implicit real*8 (a-h,o-z)
3887 include 'DIMENSIONS'
3888 include 'COMMON.GEO'
3889 include 'COMMON.VAR'
3890 include 'COMMON.LOCAL'
3891 include 'COMMON.CHAIN'
3892 include 'COMMON.DERIV'
3893 include 'COMMON.INTERACT'
3894 include 'COMMON.FFIELD'
3895 include 'COMMON.IOUNITS'
3896 include 'COMMON.CONTROL'
3900 cd print '(a)','Enter ESCP'
3901 cd write (iout,*) 'iatscp_s=',iatscp_s,' iatscp_e=',iatscp_e
3902 do i=iatscp_s,iatscp_e
3903 if (itype(i).eq.21 .or. itype(i+1).eq.21) cycle
3905 xi=0.5D0*(c(1,i)+c(1,i+1))
3906 yi=0.5D0*(c(2,i)+c(2,i+1))
3907 zi=0.5D0*(c(3,i)+c(3,i+1))
3909 do iint=1,nscp_gr(i)
3911 do j=iscpstart(i,iint),iscpend(i,iint)
3913 if (itypj.eq.21) cycle
3914 C Uncomment following three lines for SC-p interactions
3918 C Uncomment following three lines for Ca-p interactions
3922 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
3924 e1=fac*fac*aad(itypj,iteli)
3925 e2=fac*bad(itypj,iteli)
3926 if (iabs(j-i) .le. 2) then
3929 evdw2_14=evdw2_14+e1+e2
3933 if (energy_dec) write (iout,'(a6,2i5,0pf7.3)')
3934 & 'evdw2',i,j,evdwij
3936 C Calculate contributions to the gradient in the virtual-bond and SC vectors.
3938 fac=-(evdwij+e1)*rrij
3942 cgrad if (j.lt.i) then
3943 cd write (iout,*) 'j<i'
3944 C Uncomment following three lines for SC-p interactions
3946 c gradx_scp(k,j)=gradx_scp(k,j)+ggg(k)
3949 cd write (iout,*) 'j>i'
3951 cgrad ggg(k)=-ggg(k)
3952 C Uncomment following line for SC-p interactions
3953 ccgrad gradx_scp(k,j)=gradx_scp(k,j)-ggg(k)
3954 c gradx_scp(k,j)=gradx_scp(k,j)+ggg(k)
3958 cgrad gvdwc_scp(k,i)=gvdwc_scp(k,i)-0.5D0*ggg(k)
3960 cgrad kstart=min0(i+1,j)
3961 cgrad kend=max0(i-1,j-1)
3962 cd write (iout,*) 'i=',i,' j=',j,' kstart=',kstart,' kend=',kend
3963 cd write (iout,*) ggg(1),ggg(2),ggg(3)
3964 cgrad do k=kstart,kend
3966 cgrad gvdwc_scp(l,k)=gvdwc_scp(l,k)-ggg(l)
3970 gvdwc_scpp(k,i)=gvdwc_scpp(k,i)-ggg(k)
3971 gvdwc_scp(k,j)=gvdwc_scp(k,j)+ggg(k)
3979 gvdwc_scp(j,i)=expon*gvdwc_scp(j,i)
3980 gvdwc_scpp(j,i)=expon*gvdwc_scpp(j,i)
3981 gradx_scp(j,i)=expon*gradx_scp(j,i)
3984 C******************************************************************************
3988 C To save time the factor EXPON has been extracted from ALL components
3989 C of GVDWC and GRADX. Remember to multiply them by this factor before further
3992 C******************************************************************************
3995 C--------------------------------------------------------------------------
3996 subroutine edis(ehpb)
3998 C Evaluate bridge-strain energy and its gradient in virtual-bond and SC vectors.
4000 implicit real*8 (a-h,o-z)
4001 include 'DIMENSIONS'
4002 include 'COMMON.SBRIDGE'
4003 include 'COMMON.CHAIN'
4004 include 'COMMON.DERIV'
4005 include 'COMMON.VAR'
4006 include 'COMMON.INTERACT'
4007 include 'COMMON.IOUNITS'
4010 cd write(iout,*)'edis: nhpb=',nhpb,' fbr=',fbr
4011 cd write(iout,*)'link_start=',link_start,' link_end=',link_end
4012 if (link_end.eq.0) return
4013 do i=link_start,link_end
4014 C If ihpb(i) and jhpb(i) > NRES, this is a SC-SC distance, otherwise a
4015 C CA-CA distance used in regularization of structure.
4018 C iii and jjj point to the residues for which the distance is assigned.
4019 if (ii.gt.nres) then
4026 cd write (iout,*) "i",i," ii",ii," iii",iii," jj",jj," jjj",jjj
4027 C 24/11/03 AL: SS bridges handled separately because of introducing a specific
4028 C distance and angle dependent SS bond potential.
4029 if (ii.gt.nres .and. itype(iii).eq.1 .and. itype(jjj).eq.1) then
4030 call ssbond_ene(iii,jjj,eij)
4032 cd write (iout,*) "eij",eij
4034 C Calculate the distance between the two points and its difference from the
4038 C Get the force constant corresponding to this distance.
4040 C Calculate the contribution to energy.
4041 ehpb=ehpb+waga*rdis*rdis
4043 C Evaluate gradient.
4046 cd print *,'i=',i,' ii=',ii,' jj=',jj,' dhpb=',dhpb(i),' dd=',dd,
4047 cd & ' waga=',waga,' fac=',fac
4049 ggg(j)=fac*(c(j,jj)-c(j,ii))
4051 cd print '(i3,3(1pe14.5))',i,(ggg(j),j=1,3)
4052 C If this is a SC-SC distance, we need to calculate the contributions to the
4053 C Cartesian gradient in the SC vectors (ghpbx).
4056 ghpbx(j,iii)=ghpbx(j,iii)-ggg(j)
4057 ghpbx(j,jjj)=ghpbx(j,jjj)+ggg(j)
4060 cgrad do j=iii,jjj-1
4062 cgrad ghpbc(k,j)=ghpbc(k,j)+ggg(k)
4066 ghpbc(k,jjj)=ghpbc(k,jjj)+ggg(k)
4067 ghpbc(k,iii)=ghpbc(k,iii)-ggg(k)
4074 C--------------------------------------------------------------------------
4075 subroutine ssbond_ene(i,j,eij)
4077 C Calculate the distance and angle dependent SS-bond potential energy
4078 C using a free-energy function derived based on RHF/6-31G** ab initio
4079 C calculations of diethyl disulfide.
4081 C A. Liwo and U. Kozlowska, 11/24/03
4083 implicit real*8 (a-h,o-z)
4084 include 'DIMENSIONS'
4085 include 'COMMON.SBRIDGE'
4086 include 'COMMON.CHAIN'
4087 include 'COMMON.DERIV'
4088 include 'COMMON.LOCAL'
4089 include 'COMMON.INTERACT'
4090 include 'COMMON.VAR'
4091 include 'COMMON.IOUNITS'
4092 double precision erij(3),dcosom1(3),dcosom2(3),gg(3)
4097 dxi=dc_norm(1,nres+i)
4098 dyi=dc_norm(2,nres+i)
4099 dzi=dc_norm(3,nres+i)
4100 c dsci_inv=dsc_inv(itypi)
4101 dsci_inv=vbld_inv(nres+i)
4103 c dscj_inv=dsc_inv(itypj)
4104 dscj_inv=vbld_inv(nres+j)
4108 dxj=dc_norm(1,nres+j)
4109 dyj=dc_norm(2,nres+j)
4110 dzj=dc_norm(3,nres+j)
4111 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
4116 om1=dxi*erij(1)+dyi*erij(2)+dzi*erij(3)
4117 om2=dxj*erij(1)+dyj*erij(2)+dzj*erij(3)
4118 om12=dxi*dxj+dyi*dyj+dzi*dzj
4120 dcosom1(k)=rij*(dc_norm(k,nres+i)-om1*erij(k))
4121 dcosom2(k)=rij*(dc_norm(k,nres+j)-om2*erij(k))
4127 deltat12=om2-om1+2.0d0
4129 eij=akcm*deltad*deltad+akth*(deltat1*deltat1+deltat2*deltat2)
4130 & +akct*deltad*deltat12
4131 & +v1ss*cosphi+v2ss*cosphi*cosphi+v3ss*cosphi*cosphi*cosphi
4132 c write(iout,*) i,j,"rij",rij,"d0cm",d0cm," akcm",akcm," akth",akth,
4133 c & " akct",akct," deltad",deltad," deltat",deltat1,deltat2,
4134 c & " deltat12",deltat12," eij",eij
4135 ed=2*akcm*deltad+akct*deltat12
4137 pom2=v1ss+2*v2ss*cosphi+3*v3ss*cosphi*cosphi
4138 eom1=-2*akth*deltat1-pom1-om2*pom2
4139 eom2= 2*akth*deltat2+pom1-om1*pom2
4142 ggk=ed*erij(k)+eom1*dcosom1(k)+eom2*dcosom2(k)
4143 ghpbx(k,i)=ghpbx(k,i)-ggk
4144 & +(eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,nres+i))
4145 & +eom1*(erij(k)-om1*dc_norm(k,nres+i)))*dsci_inv
4146 ghpbx(k,j)=ghpbx(k,j)+ggk
4147 & +(eom12*(dc_norm(k,nres+i)-om12*dc_norm(k,nres+j))
4148 & +eom2*(erij(k)-om2*dc_norm(k,nres+j)))*dscj_inv
4149 ghpbc(k,i)=ghpbc(k,i)-ggk
4150 ghpbc(k,j)=ghpbc(k,j)+ggk
4153 C Calculate the components of the gradient in DC and X
4157 cgrad ghpbc(l,k)=ghpbc(l,k)+gg(l)
4162 C--------------------------------------------------------------------------
4163 subroutine ebond(estr)
4165 c Evaluate the energy of stretching of the CA-CA and CA-SC virtual bonds
4167 implicit real*8 (a-h,o-z)
4168 include 'DIMENSIONS'
4169 include 'COMMON.LOCAL'
4170 include 'COMMON.GEO'
4171 include 'COMMON.INTERACT'
4172 include 'COMMON.DERIV'
4173 include 'COMMON.VAR'
4174 include 'COMMON.CHAIN'
4175 include 'COMMON.IOUNITS'
4176 include 'COMMON.NAMES'
4177 include 'COMMON.FFIELD'
4178 include 'COMMON.CONTROL'
4179 include 'COMMON.SETUP'
4180 double precision u(3),ud(3)
4183 do i=ibondp_start,ibondp_end
4184 if (itype(i-1).eq.21 .or. itype(i).eq.21) then
4185 estr1=estr1+gnmr1(vbld(i),-1.0d0,distchainmax)
4187 gradb(j,i-1)=gnmr1prim(vbld(i),-1.0d0,distchainmax)
4188 & *dc(j,i-1)/vbld(i)
4190 if (energy_dec) write(iout,*)
4191 & "estr1",i,gnmr1(vbld(i),-1.0d0,distchainmax)
4193 diff = vbld(i)-vbldp0
4194 if (energy_dec) write (iout,*)
4195 & "estr bb",i,vbld(i),vbldp0,diff,AKP*diff*diff
4198 gradb(j,i-1)=AKP*diff*dc(j,i-1)/vbld(i)
4200 c write (iout,'(i5,3f10.5)') i,(gradb(j,i-1),j=1,3)
4203 estr=0.5d0*AKP*estr+estr1
4205 c 09/18/07 AL: multimodal bond potential based on AM1 CA-SC PMF's included
4207 do i=ibond_start,ibond_end
4209 if (iti.ne.10 .and. iti.ne.21) then
4212 diff=vbld(i+nres)-vbldsc0(1,iti)
4213 if (energy_dec) write (iout,*)
4214 & "estr sc",i,iti,vbld(i+nres),vbldsc0(1,iti),diff,
4215 & AKSC(1,iti),AKSC(1,iti)*diff*diff
4216 estr=estr+0.5d0*AKSC(1,iti)*diff*diff
4218 gradbx(j,i)=AKSC(1,iti)*diff*dc(j,i+nres)/vbld(i+nres)
4222 diff=vbld(i+nres)-vbldsc0(j,iti)
4223 ud(j)=aksc(j,iti)*diff
4224 u(j)=abond0(j,iti)+0.5d0*ud(j)*diff
4238 uprod2=uprod2*u(k)*u(k)
4242 usumsqder=usumsqder+ud(j)*uprod2
4244 estr=estr+uprod/usum
4246 gradbx(j,i)=usumsqder/(usum*usum)*dc(j,i+nres)/vbld(i+nres)
4254 C--------------------------------------------------------------------------
4255 subroutine ebend(etheta)
4257 C Evaluate the virtual-bond-angle energy given the virtual-bond dihedral
4258 C angles gamma and its derivatives in consecutive thetas and gammas.
4260 implicit real*8 (a-h,o-z)
4261 include 'DIMENSIONS'
4262 include 'COMMON.LOCAL'
4263 include 'COMMON.GEO'
4264 include 'COMMON.INTERACT'
4265 include 'COMMON.DERIV'
4266 include 'COMMON.VAR'
4267 include 'COMMON.CHAIN'
4268 include 'COMMON.IOUNITS'
4269 include 'COMMON.NAMES'
4270 include 'COMMON.FFIELD'
4271 include 'COMMON.CONTROL'
4272 common /calcthet/ term1,term2,termm,diffak,ratak,
4273 & ak,aktc,termpre,termexp,sigc,sig0i,time11,time12,sigcsq,
4274 & delthe0,sig0inv,sigtc,sigsqtc,delthec,it
4275 double precision y(2),z(2)
4277 c time11=dexp(-2*time)
4280 c write (*,'(a,i2)') 'EBEND ICG=',icg
4281 do i=ithet_start,ithet_end
4282 if (itype(i-1).eq.21) cycle
4283 C Zero the energy function and its derivative at 0 or pi.
4284 call splinthet(theta(i),0.5d0*delta,ss,ssd)
4286 if (i.gt.3 .and. itype(i-2).ne.21) then
4289 if (phii.ne.phii) phii=150.0
4299 if (i.lt.nres .and. itype(i).ne.21) then
4302 if (phii1.ne.phii1) phii1=150.0
4314 C Calculate the "mean" value of theta from the part of the distribution
4315 C dependent on the adjacent virtual-bond-valence angles (gamma1 & gamma2).
4316 C In following comments this theta will be referred to as t_c.
4317 thet_pred_mean=0.0d0
4321 thet_pred_mean=thet_pred_mean+athetk*y(k)+bthetk*z(k)
4323 dthett=thet_pred_mean*ssd
4324 thet_pred_mean=thet_pred_mean*ss+a0thet(it)
4325 C Derivatives of the "mean" values in gamma1 and gamma2.
4326 dthetg1=(-athet(1,it)*y(2)+athet(2,it)*y(1))*ss
4327 dthetg2=(-bthet(1,it)*z(2)+bthet(2,it)*z(1))*ss
4328 if (theta(i).gt.pi-delta) then
4329 call theteng(pi-delta,thet_pred_mean,theta0(it),f0,fprim0,
4331 call mixder(pi-delta,thet_pred_mean,theta0(it),fprim_tc0)
4332 call theteng(pi,thet_pred_mean,theta0(it),f1,fprim1,E_tc1)
4333 call spline1(theta(i),pi-delta,delta,f0,f1,fprim0,ethetai,
4335 call spline2(theta(i),pi-delta,delta,E_tc0,E_tc1,fprim_tc0,
4337 else if (theta(i).lt.delta) then
4338 call theteng(delta,thet_pred_mean,theta0(it),f0,fprim0,E_tc0)
4339 call theteng(0.0d0,thet_pred_mean,theta0(it),f1,fprim1,E_tc1)
4340 call spline1(theta(i),delta,-delta,f0,f1,fprim0,ethetai,
4342 call mixder(delta,thet_pred_mean,theta0(it),fprim_tc0)
4343 call spline2(theta(i),delta,-delta,E_tc0,E_tc1,fprim_tc0,
4346 call theteng(theta(i),thet_pred_mean,theta0(it),ethetai,
4349 etheta=etheta+ethetai
4350 if (energy_dec) write (iout,'(a6,i5,0pf7.3)')
4352 if (i.gt.3) gloc(i-3,icg)=gloc(i-3,icg)+wang*E_tc*dthetg1
4353 if (i.lt.nres) gloc(i-2,icg)=gloc(i-2,icg)+wang*E_tc*dthetg2
4354 gloc(nphi+i-2,icg)=wang*(E_theta+E_tc*dthett)
4356 C Ufff.... We've done all this!!!
4359 C---------------------------------------------------------------------------
4360 subroutine theteng(thetai,thet_pred_mean,theta0i,ethetai,E_theta,
4362 implicit real*8 (a-h,o-z)
4363 include 'DIMENSIONS'
4364 include 'COMMON.LOCAL'
4365 include 'COMMON.IOUNITS'
4366 common /calcthet/ term1,term2,termm,diffak,ratak,
4367 & ak,aktc,termpre,termexp,sigc,sig0i,time11,time12,sigcsq,
4368 & delthe0,sig0inv,sigtc,sigsqtc,delthec,it
4369 C Calculate the contributions to both Gaussian lobes.
4370 C 6/6/97 - Deform the Gaussians using the factor of 1/(1+time)
4371 C The "polynomial part" of the "standard deviation" of this part of
4375 sig=sig*thet_pred_mean+polthet(j,it)
4377 C Derivative of the "interior part" of the "standard deviation of the"
4378 C gamma-dependent Gaussian lobe in t_c.
4379 sigtc=3*polthet(3,it)
4381 sigtc=sigtc*thet_pred_mean+j*polthet(j,it)
4384 C Set the parameters of both Gaussian lobes of the distribution.
4385 C "Standard deviation" of the gamma-dependent Gaussian lobe (sigtc)
4386 fac=sig*sig+sigc0(it)
4389 C Following variable (sigsqtc) is -(1/2)d[sigma(t_c)**(-2))]/dt_c
4390 sigsqtc=-4.0D0*sigcsq*sigtc
4391 c print *,i,sig,sigtc,sigsqtc
4392 C Following variable (sigtc) is d[sigma(t_c)]/dt_c
4393 sigtc=-sigtc/(fac*fac)
4394 C Following variable is sigma(t_c)**(-2)
4395 sigcsq=sigcsq*sigcsq
4397 sig0inv=1.0D0/sig0i**2
4398 delthec=thetai-thet_pred_mean
4399 delthe0=thetai-theta0i
4400 term1=-0.5D0*sigcsq*delthec*delthec
4401 term2=-0.5D0*sig0inv*delthe0*delthe0
4402 C Following fuzzy logic is to avoid underflows in dexp and subsequent INFs and
4403 C NaNs in taking the logarithm. We extract the largest exponent which is added
4404 C to the energy (this being the log of the distribution) at the end of energy
4405 C term evaluation for this virtual-bond angle.
4406 if (term1.gt.term2) then
4408 term2=dexp(term2-termm)
4412 term1=dexp(term1-termm)
4415 C The ratio between the gamma-independent and gamma-dependent lobes of
4416 C the distribution is a Gaussian function of thet_pred_mean too.
4417 diffak=gthet(2,it)-thet_pred_mean
4418 ratak=diffak/gthet(3,it)**2
4419 ak=dexp(gthet(1,it)-0.5D0*diffak*ratak)
4420 C Let's differentiate it in thet_pred_mean NOW.
4422 C Now put together the distribution terms to make complete distribution.
4423 termexp=term1+ak*term2
4424 termpre=sigc+ak*sig0i
4425 C Contribution of the bending energy from this theta is just the -log of
4426 C the sum of the contributions from the two lobes and the pre-exponential
4427 C factor. Simple enough, isn't it?
4428 ethetai=(-dlog(termexp)-termm+dlog(termpre))
4429 C NOW the derivatives!!!
4430 C 6/6/97 Take into account the deformation.
4431 E_theta=(delthec*sigcsq*term1
4432 & +ak*delthe0*sig0inv*term2)/termexp
4433 E_tc=((sigtc+aktc*sig0i)/termpre
4434 & -((delthec*sigcsq+delthec*delthec*sigsqtc)*term1+
4435 & aktc*term2)/termexp)
4438 c-----------------------------------------------------------------------------
4439 subroutine mixder(thetai,thet_pred_mean,theta0i,E_tc_t)
4440 implicit real*8 (a-h,o-z)
4441 include 'DIMENSIONS'
4442 include 'COMMON.LOCAL'
4443 include 'COMMON.IOUNITS'
4444 common /calcthet/ term1,term2,termm,diffak,ratak,
4445 & ak,aktc,termpre,termexp,sigc,sig0i,time11,time12,sigcsq,
4446 & delthe0,sig0inv,sigtc,sigsqtc,delthec,it
4447 delthec=thetai-thet_pred_mean
4448 delthe0=thetai-theta0i
4449 C "Thank you" to MAPLE (probably spared one day of hand-differentiation).
4450 t3 = thetai-thet_pred_mean
4454 t14 = t12+t6*sigsqtc
4456 t21 = thetai-theta0i
4462 E_tc_t = -((sigcsq+2.D0*t3*sigsqtc)*t9-t14*sigcsq*t3*t16*t9
4463 & -aktc*sig0inv*t27)/t32+(t14*t9+aktc*t26)/t40
4464 & *(-t12*t9-ak*sig0inv*t27)
4468 C--------------------------------------------------------------------------
4469 subroutine ebend(etheta)
4471 C Evaluate the virtual-bond-angle energy given the virtual-bond dihedral
4472 C angles gamma and its derivatives in consecutive thetas and gammas.
4473 C ab initio-derived potentials from
4474 c Kozlowska et al., J. Phys.: Condens. Matter 19 (2007) 285203
4476 implicit real*8 (a-h,o-z)
4477 include 'DIMENSIONS'
4478 include 'COMMON.LOCAL'
4479 include 'COMMON.GEO'
4480 include 'COMMON.INTERACT'
4481 include 'COMMON.DERIV'
4482 include 'COMMON.VAR'
4483 include 'COMMON.CHAIN'
4484 include 'COMMON.IOUNITS'
4485 include 'COMMON.NAMES'
4486 include 'COMMON.FFIELD'
4487 include 'COMMON.CONTROL'
4488 double precision coskt(mmaxtheterm),sinkt(mmaxtheterm),
4489 & cosph1(maxsingle),sinph1(maxsingle),cosph2(maxsingle),
4490 & sinph2(maxsingle),cosph1ph2(maxdouble,maxdouble),
4491 & sinph1ph2(maxdouble,maxdouble)
4492 logical lprn /.false./, lprn1 /.false./
4494 do i=ithet_start,ithet_end
4495 if (itype(i-1).eq.21) cycle
4499 theti2=0.5d0*theta(i)
4500 ityp2=ithetyp(itype(i-1))
4502 coskt(k)=dcos(k*theti2)
4503 sinkt(k)=dsin(k*theti2)
4508 if (phii.ne.phii) phii=150.0
4512 ityp1=ithetyp(itype(i-2))
4514 cosph1(k)=dcos(k*phii)
4515 sinph1(k)=dsin(k*phii)
4528 if (phii1.ne.phii1) phii1=150.0
4533 ityp3=ithetyp(itype(i))
4535 cosph2(k)=dcos(k*phii1)
4536 sinph2(k)=dsin(k*phii1)
4546 ethetai=aa0thet(ityp1,ityp2,ityp3)
4549 ccl=cosph1(l)*cosph2(k-l)
4550 ssl=sinph1(l)*sinph2(k-l)
4551 scl=sinph1(l)*cosph2(k-l)
4552 csl=cosph1(l)*sinph2(k-l)
4553 cosph1ph2(l,k)=ccl-ssl
4554 cosph1ph2(k,l)=ccl+ssl
4555 sinph1ph2(l,k)=scl+csl
4556 sinph1ph2(k,l)=scl-csl
4560 write (iout,*) "i",i," ityp1",ityp1," ityp2",ityp2,
4561 & " ityp3",ityp3," theti2",theti2," phii",phii," phii1",phii1
4562 write (iout,*) "coskt and sinkt"
4564 write (iout,*) k,coskt(k),sinkt(k)
4568 ethetai=ethetai+aathet(k,ityp1,ityp2,ityp3)*sinkt(k)
4569 dethetai=dethetai+0.5d0*k*aathet(k,ityp1,ityp2,ityp3)
4572 & write (iout,*) "k",k," aathet",aathet(k,ityp1,ityp2,ityp3),
4573 & " ethetai",ethetai
4576 write (iout,*) "cosph and sinph"
4578 write (iout,*) k,cosph1(k),sinph1(k),cosph2(k),sinph2(k)
4580 write (iout,*) "cosph1ph2 and sinph2ph2"
4583 write (iout,*) l,k,cosph1ph2(l,k),cosph1ph2(k,l),
4584 & sinph1ph2(l,k),sinph1ph2(k,l)
4587 write(iout,*) "ethetai",ethetai
4591 aux=bbthet(k,m,ityp1,ityp2,ityp3)*cosph1(k)
4592 & +ccthet(k,m,ityp1,ityp2,ityp3)*sinph1(k)
4593 & +ddthet(k,m,ityp1,ityp2,ityp3)*cosph2(k)
4594 & +eethet(k,m,ityp1,ityp2,ityp3)*sinph2(k)
4595 ethetai=ethetai+sinkt(m)*aux
4596 dethetai=dethetai+0.5d0*m*aux*coskt(m)
4597 dephii=dephii+k*sinkt(m)*(
4598 & ccthet(k,m,ityp1,ityp2,ityp3)*cosph1(k)-
4599 & bbthet(k,m,ityp1,ityp2,ityp3)*sinph1(k))
4600 dephii1=dephii1+k*sinkt(m)*(
4601 & eethet(k,m,ityp1,ityp2,ityp3)*cosph2(k)-
4602 & ddthet(k,m,ityp1,ityp2,ityp3)*sinph2(k))
4604 & write (iout,*) "m",m," k",k," bbthet",
4605 & bbthet(k,m,ityp1,ityp2,ityp3)," ccthet",
4606 & ccthet(k,m,ityp1,ityp2,ityp3)," ddthet",
4607 & ddthet(k,m,ityp1,ityp2,ityp3)," eethet",
4608 & eethet(k,m,ityp1,ityp2,ityp3)," ethetai",ethetai
4612 & write(iout,*) "ethetai",ethetai
4616 aux=ffthet(l,k,m,ityp1,ityp2,ityp3)*cosph1ph2(l,k)+
4617 & ffthet(k,l,m,ityp1,ityp2,ityp3)*cosph1ph2(k,l)+
4618 & ggthet(l,k,m,ityp1,ityp2,ityp3)*sinph1ph2(l,k)+
4619 & ggthet(k,l,m,ityp1,ityp2,ityp3)*sinph1ph2(k,l)
4620 ethetai=ethetai+sinkt(m)*aux
4621 dethetai=dethetai+0.5d0*m*coskt(m)*aux
4622 dephii=dephii+l*sinkt(m)*(
4623 & -ffthet(l,k,m,ityp1,ityp2,ityp3)*sinph1ph2(l,k)-
4624 & ffthet(k,l,m,ityp1,ityp2,ityp3)*sinph1ph2(k,l)+
4625 & ggthet(l,k,m,ityp1,ityp2,ityp3)*cosph1ph2(l,k)+
4626 & ggthet(k,l,m,ityp1,ityp2,ityp3)*cosph1ph2(k,l))
4627 dephii1=dephii1+(k-l)*sinkt(m)*(
4628 & -ffthet(l,k,m,ityp1,ityp2,ityp3)*sinph1ph2(l,k)+
4629 & ffthet(k,l,m,ityp1,ityp2,ityp3)*sinph1ph2(k,l)+
4630 & ggthet(l,k,m,ityp1,ityp2,ityp3)*cosph1ph2(l,k)-
4631 & ggthet(k,l,m,ityp1,ityp2,ityp3)*cosph1ph2(k,l))
4633 write (iout,*) "m",m," k",k," l",l," ffthet",
4634 & ffthet(l,k,m,ityp1,ityp2,ityp3),
4635 & ffthet(k,l,m,ityp1,ityp2,ityp3)," ggthet",
4636 & ggthet(l,k,m,ityp1,ityp2,ityp3),
4637 & ggthet(k,l,m,ityp1,ityp2,ityp3)," ethetai",ethetai
4638 write (iout,*) cosph1ph2(l,k)*sinkt(m),
4639 & cosph1ph2(k,l)*sinkt(m),
4640 & sinph1ph2(l,k)*sinkt(m),sinph1ph2(k,l)*sinkt(m)
4646 if (lprn1) write (iout,'(i2,3f8.1,9h ethetai ,f10.5)')
4647 & i,theta(i)*rad2deg,phii*rad2deg,
4648 & phii1*rad2deg,ethetai
4649 etheta=etheta+ethetai
4650 if (i.gt.3) gloc(i-3,icg)=gloc(i-3,icg)+wang*dephii
4651 if (i.lt.nres) gloc(i-2,icg)=gloc(i-2,icg)+wang*dephii1
4652 gloc(nphi+i-2,icg)=wang*dethetai
4658 c-----------------------------------------------------------------------------
4659 subroutine esc(escloc)
4660 C Calculate the local energy of a side chain and its derivatives in the
4661 C corresponding virtual-bond valence angles THETA and the spherical angles
4663 implicit real*8 (a-h,o-z)
4664 include 'DIMENSIONS'
4665 include 'COMMON.GEO'
4666 include 'COMMON.LOCAL'
4667 include 'COMMON.VAR'
4668 include 'COMMON.INTERACT'
4669 include 'COMMON.DERIV'
4670 include 'COMMON.CHAIN'
4671 include 'COMMON.IOUNITS'
4672 include 'COMMON.NAMES'
4673 include 'COMMON.FFIELD'
4674 include 'COMMON.CONTROL'
4675 double precision x(3),dersc(3),xemp(3),dersc0(3),dersc1(3),
4676 & ddersc0(3),ddummy(3),xtemp(3),temp(3)
4677 common /sccalc/ time11,time12,time112,theti,it,nlobit
4680 c write (iout,'(a)') 'ESC'
4681 do i=loc_start,loc_end
4684 if (it.eq.10) goto 1
4686 c print *,'i=',i,' it=',it,' nlobit=',nlobit
4687 c write (iout,*) 'i=',i,' ssa=',ssa,' ssad=',ssad
4688 theti=theta(i+1)-pipol
4693 if (x(2).gt.pi-delta) then
4697 call enesc(xtemp,escloci0,dersc0,ddersc0,.true.)
4699 call enesc(xtemp,escloci1,dersc1,ddummy,.false.)
4700 call spline1(x(2),pi-delta,delta,escloci0,escloci1,dersc0(2),
4702 call spline2(x(2),pi-delta,delta,dersc0(1),dersc1(1),
4703 & ddersc0(1),dersc(1))
4704 call spline2(x(2),pi-delta,delta,dersc0(3),dersc1(3),
4705 & ddersc0(3),dersc(3))
4707 call enesc_bound(xtemp,esclocbi0,dersc0,dersc12,.true.)
4709 call enesc_bound(xtemp,esclocbi1,dersc1,chuju,.false.)
4710 call spline1(x(2),pi-delta,delta,esclocbi0,esclocbi1,
4711 & dersc0(2),esclocbi,dersc02)
4712 call spline2(x(2),pi-delta,delta,dersc0(1),dersc1(1),
4714 call splinthet(x(2),0.5d0*delta,ss,ssd)
4719 dersc(k)=ss*dersc(k)+(1.0d0-ss)*dersc0(k)
4721 dersc(2)=dersc(2)+ssd*(escloci-esclocbi)
4722 c write (iout,*) 'i=',i,x(2)*rad2deg,escloci0,escloci,
4724 escloci=ss*escloci+(1.0d0-ss)*esclocbi
4726 c write (iout,*) escloci
4727 else if (x(2).lt.delta) then
4731 call enesc(xtemp,escloci0,dersc0,ddersc0,.true.)
4733 call enesc(xtemp,escloci1,dersc1,ddummy,.false.)
4734 call spline1(x(2),delta,-delta,escloci0,escloci1,dersc0(2),
4736 call spline2(x(2),delta,-delta,dersc0(1),dersc1(1),
4737 & ddersc0(1),dersc(1))
4738 call spline2(x(2),delta,-delta,dersc0(3),dersc1(3),
4739 & ddersc0(3),dersc(3))
4741 call enesc_bound(xtemp,esclocbi0,dersc0,dersc12,.true.)
4743 call enesc_bound(xtemp,esclocbi1,dersc1,chuju,.false.)
4744 call spline1(x(2),delta,-delta,esclocbi0,esclocbi1,
4745 & dersc0(2),esclocbi,dersc02)
4746 call spline2(x(2),delta,-delta,dersc0(1),dersc1(1),
4751 call splinthet(x(2),0.5d0*delta,ss,ssd)
4753 dersc(k)=ss*dersc(k)+(1.0d0-ss)*dersc0(k)
4755 dersc(2)=dersc(2)+ssd*(escloci-esclocbi)
4756 c write (iout,*) 'i=',i,x(2)*rad2deg,escloci0,escloci,
4758 escloci=ss*escloci+(1.0d0-ss)*esclocbi
4759 c write (iout,*) escloci
4761 call enesc(x,escloci,dersc,ddummy,.false.)
4764 escloc=escloc+escloci
4765 if (energy_dec) write (iout,'(a6,i5,0pf7.3)')
4766 & 'escloc',i,escloci
4767 c write (iout,*) 'i=',i,' escloci=',escloci,' dersc=',dersc
4769 gloc(nphi+i-1,icg)=gloc(nphi+i-1,icg)+
4771 gloc(ialph(i,1),icg)=wscloc*dersc(2)
4772 gloc(ialph(i,1)+nside,icg)=wscloc*dersc(3)
4777 C---------------------------------------------------------------------------
4778 subroutine enesc(x,escloci,dersc,ddersc,mixed)
4779 implicit real*8 (a-h,o-z)
4780 include 'DIMENSIONS'
4781 include 'COMMON.GEO'
4782 include 'COMMON.LOCAL'
4783 include 'COMMON.IOUNITS'
4784 common /sccalc/ time11,time12,time112,theti,it,nlobit
4785 double precision x(3),z(3),Ax(3,maxlob,-1:1),dersc(3),ddersc(3)
4786 double precision contr(maxlob,-1:1)
4788 c write (iout,*) 'it=',it,' nlobit=',nlobit
4792 if (mixed) ddersc(j)=0.0d0
4796 C Because of periodicity of the dependence of the SC energy in omega we have
4797 C to add up the contributions from x(3)-2*pi, x(3), and x(3+2*pi).
4798 C To avoid underflows, first compute & store the exponents.
4806 z(k)=x(k)-censc(k,j,it)
4811 Axk=Axk+gaussc(l,k,j,it)*z(l)
4817 expfac=expfac+Ax(k,j,iii)*z(k)
4825 C As in the case of ebend, we want to avoid underflows in exponentiation and
4826 C subsequent NaNs and INFs in energy calculation.
4827 C Find the largest exponent
4831 if (emin.gt.contr(j,iii)) emin=contr(j,iii)
4835 cd print *,'it=',it,' emin=',emin
4837 C Compute the contribution to SC energy and derivatives
4842 adexp=bsc(j,it)-0.5D0*contr(j,iii)+emin
4843 if(adexp.ne.adexp) adexp=1.0
4846 expfac=dexp(bsc(j,it)-0.5D0*contr(j,iii)+emin)
4848 cd print *,'j=',j,' expfac=',expfac
4849 escloc_i=escloc_i+expfac
4851 dersc(k)=dersc(k)+Ax(k,j,iii)*expfac
4855 ddersc(k)=ddersc(k)+(-Ax(2,j,iii)*Ax(k,j,iii)
4856 & +gaussc(k,2,j,it))*expfac
4863 dersc(1)=dersc(1)/cos(theti)**2
4864 ddersc(1)=ddersc(1)/cos(theti)**2
4867 escloci=-(dlog(escloc_i)-emin)
4869 dersc(j)=dersc(j)/escloc_i
4873 ddersc(j)=(ddersc(j)/escloc_i+dersc(2)*dersc(j))
4878 C------------------------------------------------------------------------------
4879 subroutine enesc_bound(x,escloci,dersc,dersc12,mixed)
4880 implicit real*8 (a-h,o-z)
4881 include 'DIMENSIONS'
4882 include 'COMMON.GEO'
4883 include 'COMMON.LOCAL'
4884 include 'COMMON.IOUNITS'
4885 common /sccalc/ time11,time12,time112,theti,it,nlobit
4886 double precision x(3),z(3),Ax(3,maxlob),dersc(3)
4887 double precision contr(maxlob)
4898 z(k)=x(k)-censc(k,j,it)
4904 Axk=Axk+gaussc(l,k,j,it)*z(l)
4910 expfac=expfac+Ax(k,j)*z(k)
4915 C As in the case of ebend, we want to avoid underflows in exponentiation and
4916 C subsequent NaNs and INFs in energy calculation.
4917 C Find the largest exponent
4920 if (emin.gt.contr(j)) emin=contr(j)
4924 C Compute the contribution to SC energy and derivatives
4928 expfac=dexp(bsc(j,it)-0.5D0*contr(j)+emin)
4929 escloc_i=escloc_i+expfac
4931 dersc(k)=dersc(k)+Ax(k,j)*expfac
4933 if (mixed) dersc12=dersc12+(-Ax(2,j)*Ax(1,j)
4934 & +gaussc(1,2,j,it))*expfac
4938 dersc(1)=dersc(1)/cos(theti)**2
4939 dersc12=dersc12/cos(theti)**2
4940 escloci=-(dlog(escloc_i)-emin)
4942 dersc(j)=dersc(j)/escloc_i
4944 if (mixed) dersc12=(dersc12/escloc_i+dersc(2)*dersc(1))
4948 c----------------------------------------------------------------------------------
4949 subroutine esc(escloc)
4950 C Calculate the local energy of a side chain and its derivatives in the
4951 C corresponding virtual-bond valence angles THETA and the spherical angles
4952 C ALPHA and OMEGA derived from AM1 all-atom calculations.
4953 C added by Urszula Kozlowska. 07/11/2007
4955 implicit real*8 (a-h,o-z)
4956 include 'DIMENSIONS'
4957 include 'COMMON.GEO'
4958 include 'COMMON.LOCAL'
4959 include 'COMMON.VAR'
4960 include 'COMMON.SCROT'
4961 include 'COMMON.INTERACT'
4962 include 'COMMON.DERIV'
4963 include 'COMMON.CHAIN'
4964 include 'COMMON.IOUNITS'
4965 include 'COMMON.NAMES'
4966 include 'COMMON.FFIELD'
4967 include 'COMMON.CONTROL'
4968 include 'COMMON.VECTORS'
4969 double precision x_prime(3),y_prime(3),z_prime(3)
4970 & , sumene,dsc_i,dp2_i,x(65),
4971 & xx,yy,zz,sumene1,sumene2,sumene3,sumene4,s1,s1_6,s2,s2_6,
4972 & de_dxx,de_dyy,de_dzz,de_dt
4973 double precision s1_t,s1_6_t,s2_t,s2_6_t
4975 & dXX_Ci1(3),dYY_Ci1(3),dZZ_Ci1(3),dXX_Ci(3),
4976 & dYY_Ci(3),dZZ_Ci(3),dXX_XYZ(3),dYY_XYZ(3),dZZ_XYZ(3),
4977 & dt_dCi(3),dt_dCi1(3)
4978 common /sccalc/ time11,time12,time112,theti,it,nlobit
4981 do i=loc_start,loc_end
4982 if (itype(i).eq.21) cycle
4983 costtab(i+1) =dcos(theta(i+1))
4984 sinttab(i+1) =dsqrt(1-costtab(i+1)*costtab(i+1))
4985 cost2tab(i+1)=dsqrt(0.5d0*(1.0d0+costtab(i+1)))
4986 sint2tab(i+1)=dsqrt(0.5d0*(1.0d0-costtab(i+1)))
4987 cosfac2=0.5d0/(1.0d0+costtab(i+1))
4988 cosfac=dsqrt(cosfac2)
4989 sinfac2=0.5d0/(1.0d0-costtab(i+1))
4990 sinfac=dsqrt(sinfac2)
4992 if (it.eq.10) goto 1
4994 C Compute the axes of tghe local cartesian coordinates system; store in
4995 c x_prime, y_prime and z_prime
5002 C write(2,*) "dc_norm", dc_norm(1,i+nres),dc_norm(2,i+nres),
5003 C & dc_norm(3,i+nres)
5005 x_prime(j) = (dc_norm(j,i) - dc_norm(j,i-1))*cosfac
5006 y_prime(j) = (dc_norm(j,i) + dc_norm(j,i-1))*sinfac
5009 z_prime(j) = -uz(j,i-1)
5012 c write (2,*) "x_prime",(x_prime(j),j=1,3)
5013 c write (2,*) "y_prime",(y_prime(j),j=1,3)
5014 c write (2,*) "z_prime",(z_prime(j),j=1,3)
5015 c write (2,*) "xx",scalar(x_prime(1),x_prime(1)),
5016 c & " xy",scalar(x_prime(1),y_prime(1)),
5017 c & " xz",scalar(x_prime(1),z_prime(1)),
5018 c & " yy",scalar(y_prime(1),y_prime(1)),
5019 c & " yz",scalar(y_prime(1),z_prime(1)),
5020 c & " zz",scalar(z_prime(1),z_prime(1))
5022 C Transform the unit vector of the ith side-chain centroid, dC_norm(*,i),
5023 C to local coordinate system. Store in xx, yy, zz.
5029 xx = xx + x_prime(j)*dc_norm(j,i+nres)
5030 yy = yy + y_prime(j)*dc_norm(j,i+nres)
5031 zz = zz + z_prime(j)*dc_norm(j,i+nres)
5038 C Compute the energy of the ith side cbain
5040 c write (2,*) "xx",xx," yy",yy," zz",zz
5043 x(j) = sc_parmin(j,it)
5046 Cc diagnostics - remove later
5048 yy1 = dsin(alph(2))*dcos(omeg(2))
5049 zz1 = -dsin(alph(2))*dsin(omeg(2))
5050 write(2,'(3f8.1,3f9.3,1x,3f9.3)')
5051 & alph(2)*rad2deg,omeg(2)*rad2deg,theta(3)*rad2deg,xx,yy,zz,
5053 C," --- ", xx_w,yy_w,zz_w
5056 sumene1= x(1)+ x(2)*xx+ x(3)*yy+ x(4)*zz+ x(5)*xx**2
5057 & + x(6)*yy**2+ x(7)*zz**2+ x(8)*xx*zz+ x(9)*xx*yy
5059 sumene2= x(11) + x(12)*xx + x(13)*yy + x(14)*zz + x(15)*xx**2
5060 & + x(16)*yy**2 + x(17)*zz**2 + x(18)*xx*zz + x(19)*xx*yy
5062 sumene3= x(21) +x(22)*xx +x(23)*yy +x(24)*zz +x(25)*xx**2
5063 & +x(26)*yy**2 +x(27)*zz**2 +x(28)*xx*zz +x(29)*xx*yy
5064 & +x(30)*yy*zz +x(31)*xx**3 +x(32)*yy**3 +x(33)*zz**3
5065 & +x(34)*(xx**2)*yy +x(35)*(xx**2)*zz +x(36)*(yy**2)*xx
5066 & +x(37)*(yy**2)*zz +x(38)*(zz**2)*xx +x(39)*(zz**2)*yy
5068 sumene4= x(41) +x(42)*xx +x(43)*yy +x(44)*zz +x(45)*xx**2
5069 & +x(46)*yy**2 +x(47)*zz**2 +x(48)*xx*zz +x(49)*xx*yy
5070 & +x(50)*yy*zz +x(51)*xx**3 +x(52)*yy**3 +x(53)*zz**3
5071 & +x(54)*(xx**2)*yy +x(55)*(xx**2)*zz +x(56)*(yy**2)*xx
5072 & +x(57)*(yy**2)*zz +x(58)*(zz**2)*xx +x(59)*(zz**2)*yy
5074 dsc_i = 0.743d0+x(61)
5076 dscp1=dsqrt(dsc_i**2+dp2_i**2-2*dsc_i*dp2_i
5077 & *(xx*cost2tab(i+1)+yy*sint2tab(i+1)))
5078 dscp2=dsqrt(dsc_i**2+dp2_i**2-2*dsc_i*dp2_i
5079 & *(xx*cost2tab(i+1)-yy*sint2tab(i+1)))
5080 s1=(1+x(63))/(0.1d0 + dscp1)
5081 s1_6=(1+x(64))/(0.1d0 + dscp1**6)
5082 s2=(1+x(65))/(0.1d0 + dscp2)
5083 s2_6=(1+x(65))/(0.1d0 + dscp2**6)
5084 sumene = ( sumene3*sint2tab(i+1) + sumene1)*(s1+s1_6)
5085 & + (sumene4*cost2tab(i+1) +sumene2)*(s2+s2_6)
5086 c write(2,'(i2," sumene",7f9.3)') i,sumene1,sumene2,sumene3,
5088 c & dscp1,dscp2,sumene
5089 c sumene = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
5090 escloc = escloc + sumene
5091 c write (2,*) "i",i," escloc",sumene,escloc
5094 C This section to check the numerical derivatives of the energy of ith side
5095 C chain in xx, yy, zz, and theta. Use the -DDEBUG compiler option or insert
5096 C #define DEBUG in the code to turn it on.
5098 write (2,*) "sumene =",sumene
5102 write (2,*) xx,yy,zz
5103 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
5104 de_dxx_num=(sumenep-sumene)/aincr
5106 write (2,*) "xx+ sumene from enesc=",sumenep
5109 write (2,*) xx,yy,zz
5110 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
5111 de_dyy_num=(sumenep-sumene)/aincr
5113 write (2,*) "yy+ sumene from enesc=",sumenep
5116 write (2,*) xx,yy,zz
5117 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
5118 de_dzz_num=(sumenep-sumene)/aincr
5120 write (2,*) "zz+ sumene from enesc=",sumenep
5121 costsave=cost2tab(i+1)
5122 sintsave=sint2tab(i+1)
5123 cost2tab(i+1)=dcos(0.5d0*(theta(i+1)+aincr))
5124 sint2tab(i+1)=dsin(0.5d0*(theta(i+1)+aincr))
5125 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
5126 de_dt_num=(sumenep-sumene)/aincr
5127 write (2,*) " t+ sumene from enesc=",sumenep
5128 cost2tab(i+1)=costsave
5129 sint2tab(i+1)=sintsave
5130 C End of diagnostics section.
5133 C Compute the gradient of esc
5135 pom_s1=(1.0d0+x(63))/(0.1d0 + dscp1)**2
5136 pom_s16=6*(1.0d0+x(64))/(0.1d0 + dscp1**6)**2
5137 pom_s2=(1.0d0+x(65))/(0.1d0 + dscp2)**2
5138 pom_s26=6*(1.0d0+x(65))/(0.1d0 + dscp2**6)**2
5139 pom_dx=dsc_i*dp2_i*cost2tab(i+1)
5140 pom_dy=dsc_i*dp2_i*sint2tab(i+1)
5141 pom_dt1=-0.5d0*dsc_i*dp2_i*(xx*sint2tab(i+1)-yy*cost2tab(i+1))
5142 pom_dt2=-0.5d0*dsc_i*dp2_i*(xx*sint2tab(i+1)+yy*cost2tab(i+1))
5143 pom1=(sumene3*sint2tab(i+1)+sumene1)
5144 & *(pom_s1/dscp1+pom_s16*dscp1**4)
5145 pom2=(sumene4*cost2tab(i+1)+sumene2)
5146 & *(pom_s2/dscp2+pom_s26*dscp2**4)
5147 sumene1x=x(2)+2*x(5)*xx+x(8)*zz+ x(9)*yy
5148 sumene3x=x(22)+2*x(25)*xx+x(28)*zz+x(29)*yy+3*x(31)*xx**2
5149 & +2*x(34)*xx*yy +2*x(35)*xx*zz +x(36)*(yy**2) +x(38)*(zz**2)
5151 sumene2x=x(12)+2*x(15)*xx+x(18)*zz+ x(19)*yy
5152 sumene4x=x(42)+2*x(45)*xx +x(48)*zz +x(49)*yy +3*x(51)*xx**2
5153 & +2*x(54)*xx*yy+2*x(55)*xx*zz+x(56)*(yy**2)+x(58)*(zz**2)
5155 de_dxx =(sumene1x+sumene3x*sint2tab(i+1))*(s1+s1_6)
5156 & +(sumene2x+sumene4x*cost2tab(i+1))*(s2+s2_6)
5157 & +(pom1+pom2)*pom_dx
5159 write(2,*), "de_dxx = ", de_dxx,de_dxx_num
5162 sumene1y=x(3) + 2*x(6)*yy + x(9)*xx + x(10)*zz
5163 sumene3y=x(23) +2*x(26)*yy +x(29)*xx +x(30)*zz +3*x(32)*yy**2
5164 & +x(34)*(xx**2) +2*x(36)*yy*xx +2*x(37)*yy*zz +x(39)*(zz**2)
5166 sumene2y=x(13) + 2*x(16)*yy + x(19)*xx + x(20)*zz
5167 sumene4y=x(43)+2*x(46)*yy+x(49)*xx +x(50)*zz
5168 & +3*x(52)*yy**2+x(54)*xx**2+2*x(56)*yy*xx +2*x(57)*yy*zz
5169 & +x(59)*zz**2 +x(60)*xx*zz
5170 de_dyy =(sumene1y+sumene3y*sint2tab(i+1))*(s1+s1_6)
5171 & +(sumene2y+sumene4y*cost2tab(i+1))*(s2+s2_6)
5172 & +(pom1-pom2)*pom_dy
5174 write(2,*), "de_dyy = ", de_dyy,de_dyy_num
5177 de_dzz =(x(24) +2*x(27)*zz +x(28)*xx +x(30)*yy
5178 & +3*x(33)*zz**2 +x(35)*xx**2 +x(37)*yy**2 +2*x(38)*zz*xx
5179 & +2*x(39)*zz*yy +x(40)*xx*yy)*sint2tab(i+1)*(s1+s1_6)
5180 & +(x(4) + 2*x(7)*zz+ x(8)*xx + x(10)*yy)*(s1+s1_6)
5181 & +(x(44)+2*x(47)*zz +x(48)*xx +x(50)*yy +3*x(53)*zz**2
5182 & +x(55)*xx**2 +x(57)*(yy**2)+2*x(58)*zz*xx +2*x(59)*zz*yy
5183 & +x(60)*xx*yy)*cost2tab(i+1)*(s2+s2_6)
5184 & + ( x(14) + 2*x(17)*zz+ x(18)*xx + x(20)*yy)*(s2+s2_6)
5186 write(2,*), "de_dzz = ", de_dzz,de_dzz_num
5189 de_dt = 0.5d0*sumene3*cost2tab(i+1)*(s1+s1_6)
5190 & -0.5d0*sumene4*sint2tab(i+1)*(s2+s2_6)
5191 & +pom1*pom_dt1+pom2*pom_dt2
5193 write(2,*), "de_dt = ", de_dt,de_dt_num
5197 cossc=scalar(dc_norm(1,i),dc_norm(1,i+nres))
5198 cossc1=scalar(dc_norm(1,i-1),dc_norm(1,i+nres))
5199 cosfac2xx=cosfac2*xx
5200 sinfac2yy=sinfac2*yy
5202 dt_dCi(k) = -(dc_norm(k,i-1)+costtab(i+1)*dc_norm(k,i))*
5204 dt_dCi1(k)= -(dc_norm(k,i)+costtab(i+1)*dc_norm(k,i-1))*
5206 pom=(dC_norm(k,i+nres)-cossc*dC_norm(k,i))*vbld_inv(i+1)
5207 pom1=(dC_norm(k,i+nres)-cossc1*dC_norm(k,i-1))*vbld_inv(i)
5208 c write (iout,*) "i",i," k",k," pom",pom," pom1",pom1,
5209 c & " dt_dCi",dt_dCi(k)," dt_dCi1",dt_dCi1(k)
5210 c write (iout,*) "dC_norm",(dC_norm(j,i),j=1,3),
5211 c & (dC_norm(j,i-1),j=1,3)," vbld_inv",vbld_inv(i+1),vbld_inv(i)
5212 dXX_Ci(k)=pom*cosfac-dt_dCi(k)*cosfac2xx
5213 dXX_Ci1(k)=-pom1*cosfac-dt_dCi1(k)*cosfac2xx
5214 dYY_Ci(k)=pom*sinfac+dt_dCi(k)*sinfac2yy
5215 dYY_Ci1(k)=pom1*sinfac+dt_dCi1(k)*sinfac2yy
5219 dZZ_Ci(k)=dZZ_Ci(k)-uzgrad(j,k,2,i-1)*dC_norm(j,i+nres)
5220 dZZ_Ci1(k)=dZZ_Ci1(k)-uzgrad(j,k,1,i-1)*dC_norm(j,i+nres)
5223 dXX_XYZ(k)=vbld_inv(i+nres)*(x_prime(k)-xx*dC_norm(k,i+nres))
5224 dYY_XYZ(k)=vbld_inv(i+nres)*(y_prime(k)-yy*dC_norm(k,i+nres))
5225 dZZ_XYZ(k)=vbld_inv(i+nres)*(z_prime(k)-zz*dC_norm(k,i+nres))
5227 dt_dCi(k) = -dt_dCi(k)/sinttab(i+1)
5228 dt_dCi1(k)= -dt_dCi1(k)/sinttab(i+1)
5232 dXX_Ctab(k,i)=dXX_Ci(k)
5233 dXX_C1tab(k,i)=dXX_Ci1(k)
5234 dYY_Ctab(k,i)=dYY_Ci(k)
5235 dYY_C1tab(k,i)=dYY_Ci1(k)
5236 dZZ_Ctab(k,i)=dZZ_Ci(k)
5237 dZZ_C1tab(k,i)=dZZ_Ci1(k)
5238 dXX_XYZtab(k,i)=dXX_XYZ(k)
5239 dYY_XYZtab(k,i)=dYY_XYZ(k)
5240 dZZ_XYZtab(k,i)=dZZ_XYZ(k)
5244 c write (iout,*) "k",k," dxx_ci1",dxx_ci1(k)," dyy_ci1",
5245 c & dyy_ci1(k)," dzz_ci1",dzz_ci1(k)
5246 c write (iout,*) "k",k," dxx_ci",dxx_ci(k)," dyy_ci",
5247 c & dyy_ci(k)," dzz_ci",dzz_ci(k)
5248 c write (iout,*) "k",k," dt_dci",dt_dci(k)," dt_dci",
5250 c write (iout,*) "k",k," dxx_XYZ",dxx_XYZ(k)," dyy_XYZ",
5251 c & dyy_XYZ(k)," dzz_XYZ",dzz_XYZ(k)
5252 gscloc(k,i-1)=gscloc(k,i-1)+de_dxx*dxx_ci1(k)
5253 & +de_dyy*dyy_ci1(k)+de_dzz*dzz_ci1(k)+de_dt*dt_dCi1(k)
5254 gscloc(k,i)=gscloc(k,i)+de_dxx*dxx_Ci(k)
5255 & +de_dyy*dyy_Ci(k)+de_dzz*dzz_Ci(k)+de_dt*dt_dCi(k)
5256 gsclocx(k,i)= de_dxx*dxx_XYZ(k)
5257 & +de_dyy*dyy_XYZ(k)+de_dzz*dzz_XYZ(k)
5259 c write(iout,*) "ENERGY GRAD = ", (gscloc(k,i-1),k=1,3),
5260 c & (gscloc(k,i),k=1,3),(gsclocx(k,i),k=1,3)
5262 C to check gradient call subroutine check_grad
5268 c------------------------------------------------------------------------------
5269 double precision function enesc(x,xx,yy,zz,cost2,sint2)
5271 double precision x(65),xx,yy,zz,cost2,sint2,sumene1,sumene2,
5272 & sumene3,sumene4,sumene,dsc_i,dp2_i,dscp1,dscp2,s1,s1_6,s2,s2_6
5273 sumene1= x(1)+ x(2)*xx+ x(3)*yy+ x(4)*zz+ x(5)*xx**2
5274 & + x(6)*yy**2+ x(7)*zz**2+ x(8)*xx*zz+ x(9)*xx*yy
5276 sumene2= x(11) + x(12)*xx + x(13)*yy + x(14)*zz + x(15)*xx**2
5277 & + x(16)*yy**2 + x(17)*zz**2 + x(18)*xx*zz + x(19)*xx*yy
5279 sumene3= x(21) +x(22)*xx +x(23)*yy +x(24)*zz +x(25)*xx**2
5280 & +x(26)*yy**2 +x(27)*zz**2 +x(28)*xx*zz +x(29)*xx*yy
5281 & +x(30)*yy*zz +x(31)*xx**3 +x(32)*yy**3 +x(33)*zz**3
5282 & +x(34)*(xx**2)*yy +x(35)*(xx**2)*zz +x(36)*(yy**2)*xx
5283 & +x(37)*(yy**2)*zz +x(38)*(zz**2)*xx +x(39)*(zz**2)*yy
5285 sumene4= x(41) +x(42)*xx +x(43)*yy +x(44)*zz +x(45)*xx**2
5286 & +x(46)*yy**2 +x(47)*zz**2 +x(48)*xx*zz +x(49)*xx*yy
5287 & +x(50)*yy*zz +x(51)*xx**3 +x(52)*yy**3 +x(53)*zz**3
5288 & +x(54)*(xx**2)*yy +x(55)*(xx**2)*zz +x(56)*(yy**2)*xx
5289 & +x(57)*(yy**2)*zz +x(58)*(zz**2)*xx +x(59)*(zz**2)*yy
5291 dsc_i = 0.743d0+x(61)
5293 dscp1=dsqrt(dsc_i**2+dp2_i**2-2*dsc_i*dp2_i
5294 & *(xx*cost2+yy*sint2))
5295 dscp2=dsqrt(dsc_i**2+dp2_i**2-2*dsc_i*dp2_i
5296 & *(xx*cost2-yy*sint2))
5297 s1=(1+x(63))/(0.1d0 + dscp1)
5298 s1_6=(1+x(64))/(0.1d0 + dscp1**6)
5299 s2=(1+x(65))/(0.1d0 + dscp2)
5300 s2_6=(1+x(65))/(0.1d0 + dscp2**6)
5301 sumene = ( sumene3*sint2 + sumene1)*(s1+s1_6)
5302 & + (sumene4*cost2 +sumene2)*(s2+s2_6)
5307 c------------------------------------------------------------------------------
5308 subroutine gcont(rij,r0ij,eps0ij,delta,fcont,fprimcont)
5310 C This procedure calculates two-body contact function g(rij) and its derivative:
5313 C g(rij) = esp0ij*(-0.9375*x+0.625*x**3-0.1875*x**5) ! -1 =< x =< 1
5316 C where x=(rij-r0ij)/delta
5318 C rij - interbody distance, r0ij - contact distance, eps0ij - contact energy
5321 double precision rij,r0ij,eps0ij,fcont,fprimcont
5322 double precision x,x2,x4,delta
5326 if (x.lt.-1.0D0) then
5329 else if (x.le.1.0D0) then
5332 fcont=eps0ij*(x*(-0.9375D0+0.6250D0*x2-0.1875D0*x4)+0.5D0)
5333 fprimcont=eps0ij * (-0.9375D0+1.8750D0*x2-0.9375D0*x4)/delta
5340 c------------------------------------------------------------------------------
5341 subroutine splinthet(theti,delta,ss,ssder)
5342 implicit real*8 (a-h,o-z)
5343 include 'DIMENSIONS'
5344 include 'COMMON.VAR'
5345 include 'COMMON.GEO'
5348 if (theti.gt.pipol) then
5349 call gcont(theti,thetup,1.0d0,delta,ss,ssder)
5351 call gcont(-theti,-thetlow,1.0d0,delta,ss,ssder)
5356 c------------------------------------------------------------------------------
5357 subroutine spline1(x,x0,delta,f0,f1,fprim0,f,fprim)
5359 double precision x,x0,delta,f0,f1,fprim0,f,fprim
5360 double precision ksi,ksi2,ksi3,a1,a2,a3
5361 a1=fprim0*delta/(f1-f0)
5367 f=f0+(f1-f0)*ksi*(a1+ksi*(a2+a3*ksi))
5368 fprim=(f1-f0)/delta*(a1+ksi*(2*a2+3*ksi*a3))
5371 c------------------------------------------------------------------------------
5372 subroutine spline2(x,x0,delta,f0x,f1x,fprim0x,fx)
5374 double precision x,x0,delta,f0x,f1x,fprim0x,fx
5375 double precision ksi,ksi2,ksi3,a1,a2,a3
5380 a2=3*(f1x-f0x)-2*fprim0x*delta
5381 a3=fprim0x*delta-2*(f1x-f0x)
5382 fx=f0x+a1*ksi+a2*ksi2+a3*ksi3
5385 C-----------------------------------------------------------------------------
5387 C-----------------------------------------------------------------------------
5388 subroutine etor(etors,edihcnstr)
5389 implicit real*8 (a-h,o-z)
5390 include 'DIMENSIONS'
5391 include 'COMMON.VAR'
5392 include 'COMMON.GEO'
5393 include 'COMMON.LOCAL'
5394 include 'COMMON.TORSION'
5395 include 'COMMON.INTERACT'
5396 include 'COMMON.DERIV'
5397 include 'COMMON.CHAIN'
5398 include 'COMMON.NAMES'
5399 include 'COMMON.IOUNITS'
5400 include 'COMMON.FFIELD'
5401 include 'COMMON.TORCNSTR'
5402 include 'COMMON.CONTROL'
5404 C Set lprn=.true. for debugging
5408 do i=iphi_start,iphi_end
5410 if (itype(i-2).eq.21 .or. itype(i-1).eq.21
5411 & .or. itype(i).eq.21) cycle
5412 itori=itortyp(itype(i-2))
5413 itori1=itortyp(itype(i-1))
5416 C Proline-Proline pair is a special case...
5417 if (itori.eq.3 .and. itori1.eq.3) then
5418 if (phii.gt.-dwapi3) then
5420 fac=1.0D0/(1.0D0-cosphi)
5421 etorsi=v1(1,3,3)*fac
5422 etorsi=etorsi+etorsi
5423 etors=etors+etorsi-v1(1,3,3)
5424 if (energy_dec) etors_ii=etors_ii+etorsi-v1(1,3,3)
5425 gloci=gloci-3*fac*etorsi*dsin(3*phii)
5428 v1ij=v1(j+1,itori,itori1)
5429 v2ij=v2(j+1,itori,itori1)
5432 etors=etors+v1ij*cosphi+v2ij*sinphi+dabs(v1ij)+dabs(v2ij)
5433 if (energy_dec) etors_ii=etors_ii+
5434 & v2ij*sinphi+dabs(v1ij)+dabs(v2ij)
5435 gloci=gloci+j*(v2ij*cosphi-v1ij*sinphi)
5439 v1ij=v1(j,itori,itori1)
5440 v2ij=v2(j,itori,itori1)
5443 etors=etors+v1ij*cosphi+v2ij*sinphi+dabs(v1ij)+dabs(v2ij)
5444 if (energy_dec) etors_ii=etors_ii+
5445 & v1ij*cosphi+v2ij*sinphi+dabs(v1ij)+dabs(v2ij)
5446 gloci=gloci+j*(v2ij*cosphi-v1ij*sinphi)
5449 if (energy_dec) write (iout,'(a6,i5,0pf7.3)')
5452 & write (iout,'(2(a3,2x,i3,2x),2i3,6f8.3/26x,6f8.3/)')
5453 & restyp(itype(i-2)),i-2,restyp(itype(i-1)),i-1,itori,itori1,
5454 & (v1(j,itori,itori1),j=1,6),(v2(j,itori,itori1),j=1,6)
5455 gloc(i-3,icg)=gloc(i-3,icg)+wtor*gloci
5456 c write (iout,*) 'i=',i,' gloc=',gloc(i-3,icg)
5458 ! 6/20/98 - dihedral angle constraints
5461 itori=idih_constr(i)
5464 if (difi.gt.drange(i)) then
5466 edihcnstr=edihcnstr+0.25d0*ftors*difi**4
5467 gloc(itori-3,icg)=gloc(itori-3,icg)+ftors*difi**3
5468 else if (difi.lt.-drange(i)) then
5470 edihcnstr=edihcnstr+0.25d0*ftors*difi**4
5471 gloc(itori-3,icg)=gloc(itori-3,icg)+ftors*difi**3
5473 ! write (iout,'(2i5,2f8.3,2e14.5)') i,itori,rad2deg*phii,
5474 ! & rad2deg*difi,0.25d0*ftors*difi**4,gloc(itori-3,icg)
5476 ! write (iout,*) 'edihcnstr',edihcnstr
5479 c------------------------------------------------------------------------------
5480 subroutine etor_d(etors_d)
5484 c----------------------------------------------------------------------------
5486 subroutine etor(etors,edihcnstr)
5487 implicit real*8 (a-h,o-z)
5488 include 'DIMENSIONS'
5489 include 'COMMON.VAR'
5490 include 'COMMON.GEO'
5491 include 'COMMON.LOCAL'
5492 include 'COMMON.TORSION'
5493 include 'COMMON.INTERACT'
5494 include 'COMMON.DERIV'
5495 include 'COMMON.CHAIN'
5496 include 'COMMON.NAMES'
5497 include 'COMMON.IOUNITS'
5498 include 'COMMON.FFIELD'
5499 include 'COMMON.TORCNSTR'
5500 include 'COMMON.CONTROL'
5502 C Set lprn=.true. for debugging
5506 do i=iphi_start,iphi_end
5507 if (itype(i-2).eq.21 .or. itype(i-1).eq.21
5508 & .or. itype(i).eq.21) cycle
5510 itori=itortyp(itype(i-2))
5511 itori1=itortyp(itype(i-1))
5514 C Regular cosine and sine terms
5515 do j=1,nterm(itori,itori1)
5516 v1ij=v1(j,itori,itori1)
5517 v2ij=v2(j,itori,itori1)
5520 etors=etors+v1ij*cosphi+v2ij*sinphi
5521 if (energy_dec) etors_ii=etors_ii+
5522 & v1ij*cosphi+v2ij*sinphi
5523 gloci=gloci+j*(v2ij*cosphi-v1ij*sinphi)
5527 C E = SUM ----------------------------------- - v1
5528 C [v2 cos(phi/2)+v3 sin(phi/2)]^2 + 1
5530 cosphi=dcos(0.5d0*phii)
5531 sinphi=dsin(0.5d0*phii)
5532 do j=1,nlor(itori,itori1)
5533 vl1ij=vlor1(j,itori,itori1)
5534 vl2ij=vlor2(j,itori,itori1)
5535 vl3ij=vlor3(j,itori,itori1)
5536 pom=vl2ij*cosphi+vl3ij*sinphi
5537 pom1=1.0d0/(pom*pom+1.0d0)
5538 etors=etors+vl1ij*pom1
5539 if (energy_dec) etors_ii=etors_ii+
5542 gloci=gloci+vl1ij*(vl3ij*cosphi-vl2ij*sinphi)*pom
5544 C Subtract the constant term
5545 etors=etors-v0(itori,itori1)
5546 if (energy_dec) write (iout,'(a6,i5,0pf7.3)')
5547 & 'etor',i,etors_ii-v0(itori,itori1)
5549 & write (iout,'(2(a3,2x,i3,2x),2i3,6f8.3/26x,6f8.3/)')
5550 & restyp(itype(i-2)),i-2,restyp(itype(i-1)),i-1,itori,itori1,
5551 & (v1(j,itori,itori1),j=1,6),(v2(j,itori,itori1),j=1,6)
5552 gloc(i-3,icg)=gloc(i-3,icg)+wtor*gloci
5553 c write (iout,*) 'i=',i,' gloc=',gloc(i-3,icg)
5555 ! 6/20/98 - dihedral angle constraints
5557 c do i=1,ndih_constr
5558 do i=idihconstr_start,idihconstr_end
5559 itori=idih_constr(i)
5561 difi=pinorm(phii-phi0(i))
5562 if (difi.gt.drange(i)) then
5564 edihcnstr=edihcnstr+0.25d0*ftors*difi**4
5565 gloc(itori-3,icg)=gloc(itori-3,icg)+ftors*difi**3
5566 else if (difi.lt.-drange(i)) then
5568 edihcnstr=edihcnstr+0.25d0*ftors*difi**4
5569 gloc(itori-3,icg)=gloc(itori-3,icg)+ftors*difi**3
5573 cd write (iout,'(2i5,4f8.3,2e14.5)') i,itori,rad2deg*phii,
5574 cd & rad2deg*phi0(i), rad2deg*drange(i),
5575 cd & rad2deg*difi,0.25d0*ftors*difi**4,gloc(itori-3,icg)
5577 cd write (iout,*) 'edihcnstr',edihcnstr
5580 c----------------------------------------------------------------------------
5581 subroutine etor_d(etors_d)
5582 C 6/23/01 Compute double torsional energy
5583 implicit real*8 (a-h,o-z)
5584 include 'DIMENSIONS'
5585 include 'COMMON.VAR'
5586 include 'COMMON.GEO'
5587 include 'COMMON.LOCAL'
5588 include 'COMMON.TORSION'
5589 include 'COMMON.INTERACT'
5590 include 'COMMON.DERIV'
5591 include 'COMMON.CHAIN'
5592 include 'COMMON.NAMES'
5593 include 'COMMON.IOUNITS'
5594 include 'COMMON.FFIELD'
5595 include 'COMMON.TORCNSTR'
5597 C Set lprn=.true. for debugging
5601 do i=iphid_start,iphid_end
5602 if (itype(i-2).eq.21 .or. itype(i-1).eq.21
5603 & .or. itype(i).eq.21 .or. itype(i+1).eq.21) cycle
5604 itori=itortyp(itype(i-2))
5605 itori1=itortyp(itype(i-1))
5606 itori2=itortyp(itype(i))
5611 C Regular cosine and sine terms
5612 do j=1,ntermd_1(itori,itori1,itori2)
5613 v1cij=v1c(1,j,itori,itori1,itori2)
5614 v1sij=v1s(1,j,itori,itori1,itori2)
5615 v2cij=v1c(2,j,itori,itori1,itori2)
5616 v2sij=v1s(2,j,itori,itori1,itori2)
5617 cosphi1=dcos(j*phii)
5618 sinphi1=dsin(j*phii)
5619 cosphi2=dcos(j*phii1)
5620 sinphi2=dsin(j*phii1)
5621 etors_d=etors_d+v1cij*cosphi1+v1sij*sinphi1+
5622 & v2cij*cosphi2+v2sij*sinphi2
5623 gloci1=gloci1+j*(v1sij*cosphi1-v1cij*sinphi1)
5624 gloci2=gloci2+j*(v2sij*cosphi2-v2cij*sinphi2)
5626 do k=2,ntermd_2(itori,itori1,itori2)
5628 v1cdij = v2c(k,l,itori,itori1,itori2)
5629 v2cdij = v2c(l,k,itori,itori1,itori2)
5630 v1sdij = v2s(k,l,itori,itori1,itori2)
5631 v2sdij = v2s(l,k,itori,itori1,itori2)
5632 cosphi1p2=dcos(l*phii+(k-l)*phii1)
5633 cosphi1m2=dcos(l*phii-(k-l)*phii1)
5634 sinphi1p2=dsin(l*phii+(k-l)*phii1)
5635 sinphi1m2=dsin(l*phii-(k-l)*phii1)
5636 etors_d=etors_d+v1cdij*cosphi1p2+v2cdij*cosphi1m2+
5637 & v1sdij*sinphi1p2+v2sdij*sinphi1m2
5638 gloci1=gloci1+l*(v1sdij*cosphi1p2+v2sdij*cosphi1m2
5639 & -v1cdij*sinphi1p2-v2cdij*sinphi1m2)
5640 gloci2=gloci2+(k-l)*(v1sdij*cosphi1p2-v2sdij*cosphi1m2
5641 & -v1cdij*sinphi1p2+v2cdij*sinphi1m2)
5644 gloc(i-3,icg)=gloc(i-3,icg)+wtor_d*gloci1
5645 gloc(i-2,icg)=gloc(i-2,icg)+wtor_d*gloci2
5650 c------------------------------------------------------------------------------
5651 subroutine eback_sc_corr(esccor)
5652 c 7/21/2007 Correlations between the backbone-local and side-chain-local
5653 c conformational states; temporarily implemented as differences
5654 c between UNRES torsional potentials (dependent on three types of
5655 c residues) and the torsional potentials dependent on all 20 types
5656 c of residues computed from AM1 energy surfaces of terminally-blocked
5657 c amino-acid residues.
5658 implicit real*8 (a-h,o-z)
5659 include 'DIMENSIONS'
5660 include 'COMMON.VAR'
5661 include 'COMMON.GEO'
5662 include 'COMMON.LOCAL'
5663 include 'COMMON.TORSION'
5664 include 'COMMON.SCCOR'
5665 include 'COMMON.INTERACT'
5666 include 'COMMON.DERIV'
5667 include 'COMMON.CHAIN'
5668 include 'COMMON.NAMES'
5669 include 'COMMON.IOUNITS'
5670 include 'COMMON.FFIELD'
5671 include 'COMMON.CONTROL'
5673 C Set lprn=.true. for debugging
5676 c write (iout,*) "EBACK_SC_COR",iphi_start,iphi_end,nterm_sccor
5678 do i=iphi_start,iphi_end
5679 if (itype(i-2).eq.21 .or. itype(i-1).eq.21) cycle
5686 v1ij=v1sccor(j,itori,itori1)
5687 v2ij=v2sccor(j,itori,itori1)
5690 esccor=esccor+v1ij*cosphi+v2ij*sinphi
5691 gloci=gloci+j*(v2ij*cosphi-v1ij*sinphi)
5694 & write (iout,'(2(a3,2x,i3,2x),2i3,6f8.3/26x,6f8.3/)')
5695 & restyp(itype(i-2)),i-2,restyp(itype(i-1)),i-1,itori,itori1,
5696 & (v1sccor(j,itori,itori1),j=1,6),(v2sccor(j,itori,itori1),j=1,6)
5697 gsccor_loc(i-3)=gsccor_loc(i-3)+gloci
5701 c----------------------------------------------------------------------------
5702 subroutine multibody(ecorr)
5703 C This subroutine calculates multi-body contributions to energy following
5704 C the idea of Skolnick et al. If side chains I and J make a contact and
5705 C at the same time side chains I+1 and J+1 make a contact, an extra
5706 C contribution equal to sqrt(eps(i,j)*eps(i+1,j+1)) is added.
5707 implicit real*8 (a-h,o-z)
5708 include 'DIMENSIONS'
5709 include 'COMMON.IOUNITS'
5710 include 'COMMON.DERIV'
5711 include 'COMMON.INTERACT'
5712 include 'COMMON.CONTACTS'
5713 double precision gx(3),gx1(3)
5716 C Set lprn=.true. for debugging
5720 write (iout,'(a)') 'Contact function values:'
5722 write (iout,'(i2,20(1x,i2,f10.5))')
5723 & i,(jcont(j,i),facont(j,i),j=1,num_cont(i))
5738 num_conti=num_cont(i)
5739 num_conti1=num_cont(i1)
5744 if (j1.eq.j+ishift .or. j1.eq.j-ishift) then
5745 cd write(iout,*)'i=',i,' j=',j,' i1=',i1,' j1=',j1,
5746 cd & ' ishift=',ishift
5747 C Contacts I--J and I+ISHIFT--J+-ISHIFT1 occur simultaneously.
5748 C The system gains extra energy.
5749 ecorr=ecorr+esccorr(i,j,i1,j1,jj,kk)
5750 endif ! j1==j+-ishift
5759 c------------------------------------------------------------------------------
5760 double precision function esccorr(i,j,k,l,jj,kk)
5761 implicit real*8 (a-h,o-z)
5762 include 'DIMENSIONS'
5763 include 'COMMON.IOUNITS'
5764 include 'COMMON.DERIV'
5765 include 'COMMON.INTERACT'
5766 include 'COMMON.CONTACTS'
5767 double precision gx(3),gx1(3)
5772 cd write (iout,'(4i5,3f10.5)') i,j,k,l,eij,ekl,-eij*ekl
5773 C Calculate the multi-body contribution to energy.
5774 C Calculate multi-body contributions to the gradient.
5775 cd write (iout,'(2(2i3,3f10.5))')i,j,(gacont(m,jj,i),m=1,3),
5776 cd & k,l,(gacont(m,kk,k),m=1,3)
5778 gx(m) =ekl*gacont(m,jj,i)
5779 gx1(m)=eij*gacont(m,kk,k)
5780 gradxorr(m,i)=gradxorr(m,i)-gx(m)
5781 gradxorr(m,j)=gradxorr(m,j)+gx(m)
5782 gradxorr(m,k)=gradxorr(m,k)-gx1(m)
5783 gradxorr(m,l)=gradxorr(m,l)+gx1(m)
5787 gradcorr(ll,m)=gradcorr(ll,m)+gx(ll)
5792 gradcorr(ll,m)=gradcorr(ll,m)+gx1(ll)
5798 c------------------------------------------------------------------------------
5799 subroutine multibody_hb(ecorr,ecorr5,ecorr6,n_corr,n_corr1)
5800 C This subroutine calculates multi-body contributions to hydrogen-bonding
5801 implicit real*8 (a-h,o-z)
5802 include 'DIMENSIONS'
5803 include 'COMMON.IOUNITS'
5806 parameter (max_cont=maxconts)
5807 parameter (max_dim=26)
5808 integer source,CorrelType,CorrelID,CorrelType1,CorrelID1,Error
5809 double precision zapas(max_dim,maxconts,max_fg_procs),
5810 & zapas_recv(max_dim,maxconts,max_fg_procs)
5811 common /przechowalnia/ zapas
5812 integer status(MPI_STATUS_SIZE),req(maxconts*2),
5813 & status_array(MPI_STATUS_SIZE,maxconts*2)
5815 include 'COMMON.SETUP'
5816 include 'COMMON.FFIELD'
5817 include 'COMMON.DERIV'
5818 include 'COMMON.INTERACT'
5819 include 'COMMON.CONTACTS'
5820 include 'COMMON.CONTROL'
5821 include 'COMMON.LOCAL'
5822 double precision gx(3),gx1(3),time00
5825 C Set lprn=.true. for debugging
5830 if (nfgtasks.le.1) goto 30
5832 write (iout,'(a)') 'Contact function values before RECEIVE:'
5834 write (iout,'(2i3,50(1x,i2,f5.2))')
5835 & i,num_cont_hb(i),(jcont_hb(j,i),facont_hb(j,i),
5836 & j=1,num_cont_hb(i))
5840 do i=1,ntask_cont_from
5843 do i=1,ntask_cont_to
5846 c write (iout,*) "ntask_cont_from",ntask_cont_from," ntask_cont_to",
5848 C Make the list of contacts to send to send to other procesors
5849 c write (iout,*) "limits",max0(iturn4_end-1,iatel_s),iturn3_end
5851 do i=iturn3_start,iturn3_end
5852 c write (iout,*) "make contact list turn3",i," num_cont",
5854 call add_hb_contact(i,i+2,iturn3_sent_local(1,i))
5856 do i=iturn4_start,iturn4_end
5857 c write (iout,*) "make contact list turn4",i," num_cont",
5859 call add_hb_contact(i,i+3,iturn4_sent_local(1,i))
5863 c write (iout,*) "make contact list longrange",i,ii," num_cont",
5865 do j=1,num_cont_hb(i)
5868 iproc=iint_sent_local(k,jjc,ii)
5869 c write (iout,*) "i",i," j",j," k",k," jjc",jjc," iproc",iproc
5870 if (iproc.gt.0) then
5871 ncont_sent(iproc)=ncont_sent(iproc)+1
5872 nn=ncont_sent(iproc)
5874 zapas(2,nn,iproc)=jjc
5875 zapas(3,nn,iproc)=facont_hb(j,i)
5876 zapas(4,nn,iproc)=ees0p(j,i)
5877 zapas(5,nn,iproc)=ees0m(j,i)
5878 zapas(6,nn,iproc)=gacont_hbr(1,j,i)
5879 zapas(7,nn,iproc)=gacont_hbr(2,j,i)
5880 zapas(8,nn,iproc)=gacont_hbr(3,j,i)
5881 zapas(9,nn,iproc)=gacontm_hb1(1,j,i)
5882 zapas(10,nn,iproc)=gacontm_hb1(2,j,i)
5883 zapas(11,nn,iproc)=gacontm_hb1(3,j,i)
5884 zapas(12,nn,iproc)=gacontp_hb1(1,j,i)
5885 zapas(13,nn,iproc)=gacontp_hb1(2,j,i)
5886 zapas(14,nn,iproc)=gacontp_hb1(3,j,i)
5887 zapas(15,nn,iproc)=gacontm_hb2(1,j,i)
5888 zapas(16,nn,iproc)=gacontm_hb2(2,j,i)
5889 zapas(17,nn,iproc)=gacontm_hb2(3,j,i)
5890 zapas(18,nn,iproc)=gacontp_hb2(1,j,i)
5891 zapas(19,nn,iproc)=gacontp_hb2(2,j,i)
5892 zapas(20,nn,iproc)=gacontp_hb2(3,j,i)
5893 zapas(21,nn,iproc)=gacontm_hb3(1,j,i)
5894 zapas(22,nn,iproc)=gacontm_hb3(2,j,i)
5895 zapas(23,nn,iproc)=gacontm_hb3(3,j,i)
5896 zapas(24,nn,iproc)=gacontp_hb3(1,j,i)
5897 zapas(25,nn,iproc)=gacontp_hb3(2,j,i)
5898 zapas(26,nn,iproc)=gacontp_hb3(3,j,i)
5905 & "Numbers of contacts to be sent to other processors",
5906 & (ncont_sent(i),i=1,ntask_cont_to)
5907 write (iout,*) "Contacts sent"
5908 do ii=1,ntask_cont_to
5910 iproc=itask_cont_to(ii)
5911 write (iout,*) nn," contacts to processor",iproc,
5912 & " of CONT_TO_COMM group"
5914 write(iout,'(2f5.0,4f10.5)')(zapas(j,i,ii),j=1,5)
5922 CorrelID1=nfgtasks+fg_rank+1
5924 C Receive the numbers of needed contacts from other processors
5925 do ii=1,ntask_cont_from
5926 iproc=itask_cont_from(ii)
5928 call MPI_Irecv(ncont_recv(ii),1,MPI_INTEGER,iproc,CorrelType,
5929 & FG_COMM,req(ireq),IERR)
5931 c write (iout,*) "IRECV ended"
5933 C Send the number of contacts needed by other processors
5934 do ii=1,ntask_cont_to
5935 iproc=itask_cont_to(ii)
5937 call MPI_Isend(ncont_sent(ii),1,MPI_INTEGER,iproc,CorrelType,
5938 & FG_COMM,req(ireq),IERR)
5940 c write (iout,*) "ISEND ended"
5941 c write (iout,*) "number of requests (nn)",ireq
5944 & call MPI_Waitall(ireq,req,status_array,ierr)
5946 c & "Numbers of contacts to be received from other processors",
5947 c & (ncont_recv(i),i=1,ntask_cont_from)
5951 do ii=1,ntask_cont_from
5952 iproc=itask_cont_from(ii)
5954 c write (iout,*) "Receiving",nn," contacts from processor",iproc,
5955 c & " of CONT_TO_COMM group"
5959 call MPI_Irecv(zapas_recv(1,1,ii),nn*max_dim,
5960 & MPI_DOUBLE_PRECISION,iproc,CorrelType1,FG_COMM,req(ireq),IERR)
5961 c write (iout,*) "ireq,req",ireq,req(ireq)
5964 C Send the contacts to processors that need them
5965 do ii=1,ntask_cont_to
5966 iproc=itask_cont_to(ii)
5968 c write (iout,*) nn," contacts to processor",iproc,
5969 c & " of CONT_TO_COMM group"
5972 call MPI_Isend(zapas(1,1,ii),nn*max_dim,MPI_DOUBLE_PRECISION,
5973 & iproc,CorrelType1,FG_COMM,req(ireq),IERR)
5974 c write (iout,*) "ireq,req",ireq,req(ireq)
5976 c write(iout,'(2f5.0,4f10.5)')(zapas(j,i,ii),j=1,5)
5980 c write (iout,*) "number of requests (contacts)",ireq
5981 c write (iout,*) "req",(req(i),i=1,4)
5984 & call MPI_Waitall(ireq,req,status_array,ierr)
5985 do iii=1,ntask_cont_from
5986 iproc=itask_cont_from(iii)
5989 write (iout,*) "Received",nn," contacts from processor",iproc,
5990 & " of CONT_FROM_COMM group"
5993 write(iout,'(2f5.0,4f10.5)')(zapas_recv(j,i,iii),j=1,5)
5998 ii=zapas_recv(1,i,iii)
5999 c Flag the received contacts to prevent double-counting
6000 jj=-zapas_recv(2,i,iii)
6001 c write (iout,*) "iii",iii," i",i," ii",ii," jj",jj
6003 nnn=num_cont_hb(ii)+1
6006 facont_hb(nnn,ii)=zapas_recv(3,i,iii)
6007 ees0p(nnn,ii)=zapas_recv(4,i,iii)
6008 ees0m(nnn,ii)=zapas_recv(5,i,iii)
6009 gacont_hbr(1,nnn,ii)=zapas_recv(6,i,iii)
6010 gacont_hbr(2,nnn,ii)=zapas_recv(7,i,iii)
6011 gacont_hbr(3,nnn,ii)=zapas_recv(8,i,iii)
6012 gacontm_hb1(1,nnn,ii)=zapas_recv(9,i,iii)
6013 gacontm_hb1(2,nnn,ii)=zapas_recv(10,i,iii)
6014 gacontm_hb1(3,nnn,ii)=zapas_recv(11,i,iii)
6015 gacontp_hb1(1,nnn,ii)=zapas_recv(12,i,iii)
6016 gacontp_hb1(2,nnn,ii)=zapas_recv(13,i,iii)
6017 gacontp_hb1(3,nnn,ii)=zapas_recv(14,i,iii)
6018 gacontm_hb2(1,nnn,ii)=zapas_recv(15,i,iii)
6019 gacontm_hb2(2,nnn,ii)=zapas_recv(16,i,iii)
6020 gacontm_hb2(3,nnn,ii)=zapas_recv(17,i,iii)
6021 gacontp_hb2(1,nnn,ii)=zapas_recv(18,i,iii)
6022 gacontp_hb2(2,nnn,ii)=zapas_recv(19,i,iii)
6023 gacontp_hb2(3,nnn,ii)=zapas_recv(20,i,iii)
6024 gacontm_hb3(1,nnn,ii)=zapas_recv(21,i,iii)
6025 gacontm_hb3(2,nnn,ii)=zapas_recv(22,i,iii)
6026 gacontm_hb3(3,nnn,ii)=zapas_recv(23,i,iii)
6027 gacontp_hb3(1,nnn,ii)=zapas_recv(24,i,iii)
6028 gacontp_hb3(2,nnn,ii)=zapas_recv(25,i,iii)
6029 gacontp_hb3(3,nnn,ii)=zapas_recv(26,i,iii)
6034 write (iout,'(a)') 'Contact function values after receive:'
6036 write (iout,'(2i3,50(1x,i3,f5.2))')
6037 & i,num_cont_hb(i),(jcont_hb(j,i),facont_hb(j,i),
6038 & j=1,num_cont_hb(i))
6045 write (iout,'(a)') 'Contact function values:'
6047 write (iout,'(2i3,50(1x,i3,f5.2))')
6048 & i,num_cont_hb(i),(jcont_hb(j,i),facont_hb(j,i),
6049 & j=1,num_cont_hb(i))
6053 C Remove the loop below after debugging !!!
6060 C Calculate the local-electrostatic correlation terms
6061 do i=min0(iatel_s,iturn4_start),max0(iatel_e,iturn3_end)
6063 num_conti=num_cont_hb(i)
6064 num_conti1=num_cont_hb(i+1)
6071 c write (iout,*) 'i=',i,' j=',j,' i1=',i1,' j1=',j1,
6072 c & ' jj=',jj,' kk=',kk
6073 if ((j.gt.0 .and. j1.gt.0 .or. j.gt.0 .and. j1.lt.0
6074 & .or. j.lt.0 .and. j1.gt.0) .and.
6075 & (jp1.eq.jp+1 .or. jp1.eq.jp-1)) then
6076 C Contacts I-J and (I+1)-(J+1) or (I+1)-(J-1) occur simultaneously.
6077 C The system gains extra energy.
6078 ecorr=ecorr+ehbcorr(i,jp,i+1,jp1,jj,kk,0.72D0,0.32D0)
6079 if (energy_dec) write (iout,'(a6,2i5,0pf7.3)')
6080 & 'ecorrh',i,j,ehbcorr(i,j,i+1,j1,jj,kk,0.72D0,0.32D0)
6082 else if (j1.eq.j) then
6083 C Contacts I-J and I-(J+1) occur simultaneously.
6084 C The system loses extra energy.
6085 c ecorr=ecorr+ehbcorr(i,j,i+1,j,jj,kk,0.60D0,-0.40D0)
6090 c write (iout,*) 'i=',i,' j=',j,' i1=',i1,' j1=',j1,
6091 c & ' jj=',jj,' kk=',kk
6093 C Contacts I-J and (I+1)-J occur simultaneously.
6094 C The system loses extra energy.
6095 c ecorr=ecorr+ehbcorr(i,j,i,j+1,jj,kk,0.60D0,-0.40D0)
6102 c------------------------------------------------------------------------------
6103 subroutine add_hb_contact(ii,jj,itask)
6104 implicit real*8 (a-h,o-z)
6105 include "DIMENSIONS"
6106 include "COMMON.IOUNITS"
6109 parameter (max_cont=maxconts)
6110 parameter (max_dim=26)
6111 include "COMMON.CONTACTS"
6112 double precision zapas(max_dim,maxconts,max_fg_procs),
6113 & zapas_recv(max_dim,maxconts,max_fg_procs)
6114 common /przechowalnia/ zapas
6115 integer i,j,ii,jj,iproc,itask(4),nn
6116 c write (iout,*) "itask",itask
6119 if (iproc.gt.0) then
6120 do j=1,num_cont_hb(ii)
6122 c write (iout,*) "i",ii," j",jj," jjc",jjc
6124 ncont_sent(iproc)=ncont_sent(iproc)+1
6125 nn=ncont_sent(iproc)
6126 zapas(1,nn,iproc)=ii
6127 zapas(2,nn,iproc)=jjc
6128 zapas(3,nn,iproc)=facont_hb(j,ii)
6129 zapas(4,nn,iproc)=ees0p(j,ii)
6130 zapas(5,nn,iproc)=ees0m(j,ii)
6131 zapas(6,nn,iproc)=gacont_hbr(1,j,ii)
6132 zapas(7,nn,iproc)=gacont_hbr(2,j,ii)
6133 zapas(8,nn,iproc)=gacont_hbr(3,j,ii)
6134 zapas(9,nn,iproc)=gacontm_hb1(1,j,ii)
6135 zapas(10,nn,iproc)=gacontm_hb1(2,j,ii)
6136 zapas(11,nn,iproc)=gacontm_hb1(3,j,ii)
6137 zapas(12,nn,iproc)=gacontp_hb1(1,j,ii)
6138 zapas(13,nn,iproc)=gacontp_hb1(2,j,ii)
6139 zapas(14,nn,iproc)=gacontp_hb1(3,j,ii)
6140 zapas(15,nn,iproc)=gacontm_hb2(1,j,ii)
6141 zapas(16,nn,iproc)=gacontm_hb2(2,j,ii)
6142 zapas(17,nn,iproc)=gacontm_hb2(3,j,ii)
6143 zapas(18,nn,iproc)=gacontp_hb2(1,j,ii)
6144 zapas(19,nn,iproc)=gacontp_hb2(2,j,ii)
6145 zapas(20,nn,iproc)=gacontp_hb2(3,j,ii)
6146 zapas(21,nn,iproc)=gacontm_hb3(1,j,ii)
6147 zapas(22,nn,iproc)=gacontm_hb3(2,j,ii)
6148 zapas(23,nn,iproc)=gacontm_hb3(3,j,ii)
6149 zapas(24,nn,iproc)=gacontp_hb3(1,j,ii)
6150 zapas(25,nn,iproc)=gacontp_hb3(2,j,ii)
6151 zapas(26,nn,iproc)=gacontp_hb3(3,j,ii)
6159 c------------------------------------------------------------------------------
6160 subroutine multibody_eello(ecorr,ecorr5,ecorr6,eturn6,n_corr,
6162 C This subroutine calculates multi-body contributions to hydrogen-bonding
6163 implicit real*8 (a-h,o-z)
6164 include 'DIMENSIONS'
6165 include 'COMMON.IOUNITS'
6168 parameter (max_cont=maxconts)
6169 parameter (max_dim=70)
6170 integer source,CorrelType,CorrelID,CorrelType1,CorrelID1,Error
6171 double precision zapas(max_dim,maxconts,max_fg_procs),
6172 & zapas_recv(max_dim,maxconts,max_fg_procs)
6173 common /przechowalnia/ zapas
6174 integer status(MPI_STATUS_SIZE),req(maxconts*2),
6175 & status_array(MPI_STATUS_SIZE,maxconts*2)
6177 include 'COMMON.SETUP'
6178 include 'COMMON.FFIELD'
6179 include 'COMMON.DERIV'
6180 include 'COMMON.LOCAL'
6181 include 'COMMON.INTERACT'
6182 include 'COMMON.CONTACTS'
6183 include 'COMMON.CHAIN'
6184 include 'COMMON.CONTROL'
6185 double precision gx(3),gx1(3)
6186 integer num_cont_hb_old(maxres)
6188 double precision eello4,eello5,eelo6,eello_turn6
6189 external eello4,eello5,eello6,eello_turn6
6190 C Set lprn=.true. for debugging
6195 num_cont_hb_old(i)=num_cont_hb(i)
6199 if (nfgtasks.le.1) goto 30
6201 write (iout,'(a)') 'Contact function values before RECEIVE:'
6203 write (iout,'(2i3,50(1x,i2,f5.2))')
6204 & i,num_cont_hb(i),(jcont_hb(j,i),facont_hb(j,i),
6205 & j=1,num_cont_hb(i))
6209 do i=1,ntask_cont_from
6212 do i=1,ntask_cont_to
6215 c write (iout,*) "ntask_cont_from",ntask_cont_from," ntask_cont_to",
6217 C Make the list of contacts to send to send to other procesors
6218 do i=iturn3_start,iturn3_end
6219 c write (iout,*) "make contact list turn3",i," num_cont",
6221 call add_hb_contact_eello(i,i+2,iturn3_sent_local(1,i))
6223 do i=iturn4_start,iturn4_end
6224 c write (iout,*) "make contact list turn4",i," num_cont",
6226 call add_hb_contact_eello(i,i+3,iturn4_sent_local(1,i))
6230 c write (iout,*) "make contact list longrange",i,ii," num_cont",
6232 do j=1,num_cont_hb(i)
6235 iproc=iint_sent_local(k,jjc,ii)
6236 c write (iout,*) "i",i," j",j," k",k," jjc",jjc," iproc",iproc
6237 if (iproc.ne.0) then
6238 ncont_sent(iproc)=ncont_sent(iproc)+1
6239 nn=ncont_sent(iproc)
6241 zapas(2,nn,iproc)=jjc
6242 zapas(3,nn,iproc)=d_cont(j,i)
6246 zapas(ind,nn,iproc)=grij_hb_cont(kk,j,i)
6251 zapas(ind,nn,iproc)=a_chuj(ll,kk,j,i)
6259 zapas(ind,nn,iproc)=a_chuj_der(mm,ll,kk,jj,j,i)
6270 & "Numbers of contacts to be sent to other processors",
6271 & (ncont_sent(i),i=1,ntask_cont_to)
6272 write (iout,*) "Contacts sent"
6273 do ii=1,ntask_cont_to
6275 iproc=itask_cont_to(ii)
6276 write (iout,*) nn," contacts to processor",iproc,
6277 & " of CONT_TO_COMM group"
6279 write(iout,'(2f5.0,10f10.5)')(zapas(j,i,ii),j=1,10)
6287 CorrelID1=nfgtasks+fg_rank+1
6289 C Receive the numbers of needed contacts from other processors
6290 do ii=1,ntask_cont_from
6291 iproc=itask_cont_from(ii)
6293 call MPI_Irecv(ncont_recv(ii),1,MPI_INTEGER,iproc,CorrelType,
6294 & FG_COMM,req(ireq),IERR)
6296 c write (iout,*) "IRECV ended"
6298 C Send the number of contacts needed by other processors
6299 do ii=1,ntask_cont_to
6300 iproc=itask_cont_to(ii)
6302 call MPI_Isend(ncont_sent(ii),1,MPI_INTEGER,iproc,CorrelType,
6303 & FG_COMM,req(ireq),IERR)
6305 c write (iout,*) "ISEND ended"
6306 c write (iout,*) "number of requests (nn)",ireq
6309 & call MPI_Waitall(ireq,req,status_array,ierr)
6311 c & "Numbers of contacts to be received from other processors",
6312 c & (ncont_recv(i),i=1,ntask_cont_from)
6316 do ii=1,ntask_cont_from
6317 iproc=itask_cont_from(ii)
6319 c write (iout,*) "Receiving",nn," contacts from processor",iproc,
6320 c & " of CONT_TO_COMM group"
6324 call MPI_Irecv(zapas_recv(1,1,ii),nn*max_dim,
6325 & MPI_DOUBLE_PRECISION,iproc,CorrelType1,FG_COMM,req(ireq),IERR)
6326 c write (iout,*) "ireq,req",ireq,req(ireq)
6329 C Send the contacts to processors that need them
6330 do ii=1,ntask_cont_to
6331 iproc=itask_cont_to(ii)
6333 c write (iout,*) nn," contacts to processor",iproc,
6334 c & " of CONT_TO_COMM group"
6337 call MPI_Isend(zapas(1,1,ii),nn*max_dim,MPI_DOUBLE_PRECISION,
6338 & iproc,CorrelType1,FG_COMM,req(ireq),IERR)
6339 c write (iout,*) "ireq,req",ireq,req(ireq)
6341 c write(iout,'(2f5.0,4f10.5)')(zapas(j,i,ii),j=1,5)
6345 c write (iout,*) "number of requests (contacts)",ireq
6346 c write (iout,*) "req",(req(i),i=1,4)
6349 & call MPI_Waitall(ireq,req,status_array,ierr)
6350 do iii=1,ntask_cont_from
6351 iproc=itask_cont_from(iii)
6354 write (iout,*) "Received",nn," contacts from processor",iproc,
6355 & " of CONT_FROM_COMM group"
6358 write(iout,'(2f5.0,10f10.5)')(zapas_recv(j,i,iii),j=1,10)
6363 ii=zapas_recv(1,i,iii)
6364 c Flag the received contacts to prevent double-counting
6365 jj=-zapas_recv(2,i,iii)
6366 c write (iout,*) "iii",iii," i",i," ii",ii," jj",jj
6368 nnn=num_cont_hb(ii)+1
6371 d_cont(nnn,ii)=zapas_recv(3,i,iii)
6375 grij_hb_cont(kk,nnn,ii)=zapas_recv(ind,i,iii)
6380 a_chuj(ll,kk,nnn,ii)=zapas_recv(ind,i,iii)
6388 a_chuj_der(mm,ll,kk,jj,nnn,ii)=zapas_recv(ind,i,iii)
6397 write (iout,'(a)') 'Contact function values after receive:'
6399 write (iout,'(2i3,50(1x,i3,5f6.3))')
6400 & i,num_cont_hb(i),(jcont_hb(j,i),d_cont(j,i),
6401 & ((a_chuj(ll,kk,j,i),ll=1,2),kk=1,2),j=1,num_cont_hb(i))
6408 write (iout,'(a)') 'Contact function values:'
6410 write (iout,'(2i3,50(1x,i2,5f6.3))')
6411 & i,num_cont_hb(i),(jcont_hb(j,i),d_cont(j,i),
6412 & ((a_chuj(ll,kk,j,i),ll=1,2),kk=1,2),j=1,num_cont_hb(i))
6418 C Remove the loop below after debugging !!!
6425 C Calculate the dipole-dipole interaction energies
6426 if (wcorr6.gt.0.0d0 .or. wturn6.gt.0.0d0) then
6427 do i=iatel_s,iatel_e+1
6428 num_conti=num_cont_hb(i)
6437 C Calculate the local-electrostatic correlation terms
6438 c write (iout,*) "gradcorr5 in eello5 before loop"
6440 c write (iout,'(i5,3f10.5)')
6441 c & iii,(gradcorr5(jjj,iii),jjj=1,3)
6443 do i=min0(iatel_s,iturn4_start),max0(iatel_e+1,iturn3_end+1)
6444 c write (iout,*) "corr loop i",i
6446 num_conti=num_cont_hb(i)
6447 num_conti1=num_cont_hb(i+1)
6454 c write (iout,*) 'i=',i,' j=',j,' i1=',i1,' j1=',j1,
6455 c & ' jj=',jj,' kk=',kk
6456 c if (j1.eq.j+1 .or. j1.eq.j-1) then
6457 if ((j.gt.0 .and. j1.gt.0 .or. j.gt.0 .and. j1.lt.0
6458 & .or. j.lt.0 .and. j1.gt.0) .and.
6459 & (jp1.eq.jp+1 .or. jp1.eq.jp-1)) then
6460 C Contacts I-J and (I+1)-(J+1) or (I+1)-(J-1) occur simultaneously.
6461 C The system gains extra energy.
6463 sqd1=dsqrt(d_cont(jj,i))
6464 sqd2=dsqrt(d_cont(kk,i1))
6465 sred_geom = sqd1*sqd2
6466 IF (sred_geom.lt.cutoff_corr) THEN
6467 call gcont(sred_geom,r0_corr,1.0D0,delt_corr,
6469 cd write (iout,*) 'i=',i,' j=',jp,' i1=',i1,' j1=',jp1,
6470 cd & ' jj=',jj,' kk=',kk
6471 fac_prim1=0.5d0*sqd2/sqd1*fprimcont
6472 fac_prim2=0.5d0*sqd1/sqd2*fprimcont
6474 g_contij(l,1)=fac_prim1*grij_hb_cont(l,jj,i)
6475 g_contij(l,2)=fac_prim2*grij_hb_cont(l,kk,i1)
6478 cd write (iout,*) 'sred_geom=',sred_geom,
6479 cd & ' ekont=',ekont,' fprim=',fprimcont,
6480 cd & ' fac_prim1',fac_prim1,' fac_prim2',fac_prim2
6481 cd write (iout,*) "g_contij",g_contij
6482 cd write (iout,*) "grij_hb_cont i",grij_hb_cont(:,jj,i)
6483 cd write (iout,*) "grij_hb_cont i1",grij_hb_cont(:,jj,i1)
6484 call calc_eello(i,jp,i+1,jp1,jj,kk)
6485 if (wcorr4.gt.0.0d0)
6486 & ecorr=ecorr+eello4(i,jp,i+1,jp1,jj,kk)
6487 if (energy_dec.and.wcorr4.gt.0.0d0)
6488 1 write (iout,'(a6,4i5,0pf7.3)')
6489 2 'ecorr4',i,j,i+1,j1,eello4(i,jp,i+1,jp1,jj,kk)
6490 c write (iout,*) "gradcorr5 before eello5"
6492 c write (iout,'(i5,3f10.5)')
6493 c & iii,(gradcorr5(jjj,iii),jjj=1,3)
6495 if (wcorr5.gt.0.0d0)
6496 & ecorr5=ecorr5+eello5(i,jp,i+1,jp1,jj,kk)
6497 c write (iout,*) "gradcorr5 after eello5"
6499 c write (iout,'(i5,3f10.5)')
6500 c & iii,(gradcorr5(jjj,iii),jjj=1,3)
6502 if (energy_dec.and.wcorr5.gt.0.0d0)
6503 1 write (iout,'(a6,4i5,0pf7.3)')
6504 2 'ecorr5',i,j,i+1,j1,eello5(i,jp,i+1,jp1,jj,kk)
6505 cd write(2,*)'wcorr6',wcorr6,' wturn6',wturn6
6506 cd write(2,*)'ijkl',i,jp,i+1,jp1
6507 if (wcorr6.gt.0.0d0 .and. (jp.ne.i+4 .or. jp1.ne.i+3
6508 & .or. wturn6.eq.0.0d0))then
6509 cd write (iout,*) '******ecorr6: i,j,i+1,j1',i,j,i+1,j1
6510 ecorr6=ecorr6+eello6(i,jp,i+1,jp1,jj,kk)
6511 if (energy_dec) write (iout,'(a6,4i5,0pf7.3)')
6512 1 'ecorr6',i,j,i+1,j1,eello6(i,jp,i+1,jp1,jj,kk)
6513 cd write (iout,*) 'ecorr',ecorr,' ecorr5=',ecorr5,
6514 cd & 'ecorr6=',ecorr6
6515 cd write (iout,'(4e15.5)') sred_geom,
6516 cd & dabs(eello4(i,jp,i+1,jp1,jj,kk)),
6517 cd & dabs(eello5(i,jp,i+1,jp1,jj,kk)),
6518 cd & dabs(eello6(i,jp,i+1,jp1,jj,kk))
6519 else if (wturn6.gt.0.0d0
6520 & .and. (jp.eq.i+4 .and. jp1.eq.i+3)) then
6521 cd write (iout,*) '******eturn6: i,j,i+1,j1',i,jip,i+1,jp1
6522 eturn6=eturn6+eello_turn6(i,jj,kk)
6523 if (energy_dec) write (iout,'(a6,4i5,0pf7.3)')
6524 1 'eturn6',i,j,i+1,j1,eello_turn6(i,jj,kk)
6525 cd write (2,*) 'multibody_eello:eturn6',eturn6
6534 num_cont_hb(i)=num_cont_hb_old(i)
6536 c write (iout,*) "gradcorr5 in eello5"
6538 c write (iout,'(i5,3f10.5)')
6539 c & iii,(gradcorr5(jjj,iii),jjj=1,3)
6543 c------------------------------------------------------------------------------
6544 subroutine add_hb_contact_eello(ii,jj,itask)
6545 implicit real*8 (a-h,o-z)
6546 include "DIMENSIONS"
6547 include "COMMON.IOUNITS"
6550 parameter (max_cont=maxconts)
6551 parameter (max_dim=70)
6552 include "COMMON.CONTACTS"
6553 double precision zapas(max_dim,maxconts,max_fg_procs),
6554 & zapas_recv(max_dim,maxconts,max_fg_procs)
6555 common /przechowalnia/ zapas
6556 integer i,j,ii,jj,iproc,itask(4),nn
6557 c write (iout,*) "itask",itask
6560 if (iproc.gt.0) then
6561 do j=1,num_cont_hb(ii)
6563 c write (iout,*) "send turns i",ii," j",jj," jjc",jjc
6565 ncont_sent(iproc)=ncont_sent(iproc)+1
6566 nn=ncont_sent(iproc)
6567 zapas(1,nn,iproc)=ii
6568 zapas(2,nn,iproc)=jjc
6569 zapas(3,nn,iproc)=d_cont(j,ii)
6573 zapas(ind,nn,iproc)=grij_hb_cont(kk,j,ii)
6578 zapas(ind,nn,iproc)=a_chuj(ll,kk,j,ii)
6586 zapas(ind,nn,iproc)=a_chuj_der(mm,ll,kk,jj,j,ii)
6598 c------------------------------------------------------------------------------
6599 double precision function ehbcorr(i,j,k,l,jj,kk,coeffp,coeffm)
6600 implicit real*8 (a-h,o-z)
6601 include 'DIMENSIONS'
6602 include 'COMMON.IOUNITS'
6603 include 'COMMON.DERIV'
6604 include 'COMMON.INTERACT'
6605 include 'COMMON.CONTACTS'
6606 double precision gx(3),gx1(3)
6616 ees=-(coeffp*ees0pij*ees0pkl+coeffm*ees0mij*ees0mkl)
6617 cd ees=-(coeffp*ees0pkl+coeffm*ees0mkl)
6618 C Following 4 lines for diagnostics.
6623 c write (iout,'(2(a,2i3,a,f10.5,a,2f10.5),a,f10.5,a,$)')
6624 c & 'Contacts ',i,j,
6625 c & ' eij',eij,' eesij',ees0pij,ees0mij,' and ',k,l
6626 c & ,' fcont ',ekl,' eeskl',ees0pkl,ees0mkl,' energy=',ekont*ees,
6628 C Calculate the multi-body contribution to energy.
6629 c ecorr=ecorr+ekont*ees
6630 C Calculate multi-body contributions to the gradient.
6631 coeffpees0pij=coeffp*ees0pij
6632 coeffmees0mij=coeffm*ees0mij
6633 coeffpees0pkl=coeffp*ees0pkl
6634 coeffmees0mkl=coeffm*ees0mkl
6636 cgrad ghalfi=ees*ekl*gacont_hbr(ll,jj,i)
6637 gradcorr(ll,i)=gradcorr(ll,i)!+0.5d0*ghalfi
6638 & -ekont*(coeffpees0pkl*gacontp_hb1(ll,jj,i)+
6639 & coeffmees0mkl*gacontm_hb1(ll,jj,i))
6640 gradcorr(ll,j)=gradcorr(ll,j)!+0.5d0*ghalfi
6641 & -ekont*(coeffpees0pkl*gacontp_hb2(ll,jj,i)+
6642 & coeffmees0mkl*gacontm_hb2(ll,jj,i))
6643 cgrad ghalfk=ees*eij*gacont_hbr(ll,kk,k)
6644 gradcorr(ll,k)=gradcorr(ll,k)!+0.5d0*ghalfk
6645 & -ekont*(coeffpees0pij*gacontp_hb1(ll,kk,k)+
6646 & coeffmees0mij*gacontm_hb1(ll,kk,k))
6647 gradcorr(ll,l)=gradcorr(ll,l)!+0.5d0*ghalfk
6648 & -ekont*(coeffpees0pij*gacontp_hb2(ll,kk,k)+
6649 & coeffmees0mij*gacontm_hb2(ll,kk,k))
6650 gradlongij=ees*ekl*gacont_hbr(ll,jj,i)-
6651 & ekont*(coeffpees0pkl*gacontp_hb3(ll,jj,i)+
6652 & coeffmees0mkl*gacontm_hb3(ll,jj,i))
6653 gradcorr_long(ll,j)=gradcorr_long(ll,j)+gradlongij
6654 gradcorr_long(ll,i)=gradcorr_long(ll,i)-gradlongij
6655 gradlongkl=ees*eij*gacont_hbr(ll,kk,k)-
6656 & ekont*(coeffpees0pij*gacontp_hb3(ll,kk,k)+
6657 & coeffmees0mij*gacontm_hb3(ll,kk,k))
6658 gradcorr_long(ll,l)=gradcorr_long(ll,l)+gradlongkl
6659 gradcorr_long(ll,k)=gradcorr_long(ll,k)-gradlongkl
6660 c write (iout,'(2f10.5,2x,$)') gradlongij,gradlongkl
6665 cgrad gradcorr(ll,m)=gradcorr(ll,m)+
6666 cgrad & ees*ekl*gacont_hbr(ll,jj,i)-
6667 cgrad & ekont*(coeffp*ees0pkl*gacontp_hb3(ll,jj,i)+
6668 cgrad & coeffm*ees0mkl*gacontm_hb3(ll,jj,i))
6673 cgrad gradcorr(ll,m)=gradcorr(ll,m)+
6674 cgrad & ees*eij*gacont_hbr(ll,kk,k)-
6675 cgrad & ekont*(coeffp*ees0pij*gacontp_hb3(ll,kk,k)+
6676 cgrad & coeffm*ees0mij*gacontm_hb3(ll,kk,k))
6679 c write (iout,*) "ehbcorr",ekont*ees
6684 C---------------------------------------------------------------------------
6685 subroutine dipole(i,j,jj)
6686 implicit real*8 (a-h,o-z)
6687 include 'DIMENSIONS'
6688 include 'COMMON.IOUNITS'
6689 include 'COMMON.CHAIN'
6690 include 'COMMON.FFIELD'
6691 include 'COMMON.DERIV'
6692 include 'COMMON.INTERACT'
6693 include 'COMMON.CONTACTS'
6694 include 'COMMON.TORSION'
6695 include 'COMMON.VAR'
6696 include 'COMMON.GEO'
6697 dimension dipi(2,2),dipj(2,2),dipderi(2),dipderj(2),auxvec(2),
6699 iti1 = itortyp(itype(i+1))
6700 if (j.lt.nres-1) then
6701 itj1 = itortyp(itype(j+1))
6706 dipi(iii,1)=Ub2(iii,i)
6707 dipderi(iii)=Ub2der(iii,i)
6708 dipi(iii,2)=b1(iii,iti1)
6709 dipj(iii,1)=Ub2(iii,j)
6710 dipderj(iii)=Ub2der(iii,j)
6711 dipj(iii,2)=b1(iii,itj1)
6715 call matvec2(a_chuj(1,1,jj,i),dipj(1,iii),auxvec(1))
6718 dip(kkk,jj,i)=scalar2(dipi(1,jjj),auxvec(1))
6725 call matvec2(a_chuj_der(1,1,lll,kkk,jj,i),dipj(1,iii),
6729 dipderx(lll,kkk,mmm,jj,i)=scalar2(dipi(1,jjj),auxvec(1))
6734 call transpose2(a_chuj(1,1,jj,i),auxmat(1,1))
6735 call matvec2(auxmat(1,1),dipderi(1),auxvec(1))
6737 dipderg(iii,jj,i)=scalar2(auxvec(1),dipj(1,iii))
6739 call matvec2(a_chuj(1,1,jj,i),dipderj(1),auxvec(1))
6741 dipderg(iii+2,jj,i)=scalar2(auxvec(1),dipi(1,iii))
6746 C---------------------------------------------------------------------------
6747 subroutine calc_eello(i,j,k,l,jj,kk)
6749 C This subroutine computes matrices and vectors needed to calculate
6750 C the fourth-, fifth-, and sixth-order local-electrostatic terms.
6752 implicit real*8 (a-h,o-z)
6753 include 'DIMENSIONS'
6754 include 'COMMON.IOUNITS'
6755 include 'COMMON.CHAIN'
6756 include 'COMMON.DERIV'
6757 include 'COMMON.INTERACT'
6758 include 'COMMON.CONTACTS'
6759 include 'COMMON.TORSION'
6760 include 'COMMON.VAR'
6761 include 'COMMON.GEO'
6762 include 'COMMON.FFIELD'
6763 double precision aa1(2,2),aa2(2,2),aa1t(2,2),aa2t(2,2),
6764 & aa1tder(2,2,3,5),aa2tder(2,2,3,5),auxmat(2,2)
6767 cd write (iout,*) 'calc_eello: i=',i,' j=',j,' k=',k,' l=',l,
6768 cd & ' jj=',jj,' kk=',kk
6769 cd if (i.ne.2 .or. j.ne.4 .or. k.ne.3 .or. l.ne.5) return
6770 cd write (iout,*) "a_chujij",((a_chuj(iii,jjj,jj,i),iii=1,2),jjj=1,2)
6771 cd write (iout,*) "a_chujkl",((a_chuj(iii,jjj,kk,k),iii=1,2),jjj=1,2)
6774 aa1(iii,jjj)=a_chuj(iii,jjj,jj,i)
6775 aa2(iii,jjj)=a_chuj(iii,jjj,kk,k)
6778 call transpose2(aa1(1,1),aa1t(1,1))
6779 call transpose2(aa2(1,1),aa2t(1,1))
6782 call transpose2(a_chuj_der(1,1,lll,kkk,jj,i),
6783 & aa1tder(1,1,lll,kkk))
6784 call transpose2(a_chuj_der(1,1,lll,kkk,kk,k),
6785 & aa2tder(1,1,lll,kkk))
6789 C parallel orientation of the two CA-CA-CA frames.
6791 iti=itortyp(itype(i))
6795 itk1=itortyp(itype(k+1))
6796 itj=itortyp(itype(j))
6797 if (l.lt.nres-1) then
6798 itl1=itortyp(itype(l+1))
6802 C A1 kernel(j+1) A2T
6804 cd write (iout,'(3f10.5,5x,3f10.5)')
6805 cd & (EUg(iii,jjj,k),jjj=1,2),(EUg(iii,jjj,l),jjj=1,2)
6807 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
6808 & aa2tder(1,1,1,1),1,.false.,EUg(1,1,l),EUgder(1,1,l),
6809 & AEA(1,1,1),AEAderg(1,1,1),AEAderx(1,1,1,1,1,1))
6810 C Following matrices are needed only for 6-th order cumulants
6811 IF (wcorr6.gt.0.0d0) THEN
6812 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
6813 & aa2tder(1,1,1,1),1,.false.,EUgC(1,1,l),EUgCder(1,1,l),
6814 & AECA(1,1,1),AECAderg(1,1,1),AECAderx(1,1,1,1,1,1))
6815 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
6816 & aa2tder(1,1,1,1),2,.false.,Ug2DtEUg(1,1,l),
6817 & Ug2DtEUgder(1,1,1,l),ADtEA(1,1,1),ADtEAderg(1,1,1,1),
6818 & ADtEAderx(1,1,1,1,1,1))
6820 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
6821 & aa2tder(1,1,1,1),2,.false.,DtUg2EUg(1,1,l),
6822 & DtUg2EUgder(1,1,1,l),ADtEA1(1,1,1),ADtEA1derg(1,1,1,1),
6823 & ADtEA1derx(1,1,1,1,1,1))
6825 C End 6-th order cumulants
6828 cd write (2,*) 'In calc_eello6'
6830 cd write (2,*) 'iii=',iii
6832 cd write (2,*) 'kkk=',kkk
6834 cd write (2,'(3(2f10.5),5x)')
6835 cd & ((ADtEA1derx(jjj,mmm,lll,kkk,iii,1),mmm=1,2),lll=1,3)
6840 call transpose2(EUgder(1,1,k),auxmat(1,1))
6841 call matmat2(auxmat(1,1),AEA(1,1,1),EAEAderg(1,1,1,1))
6842 call transpose2(EUg(1,1,k),auxmat(1,1))
6843 call matmat2(auxmat(1,1),AEA(1,1,1),EAEA(1,1,1))
6844 call matmat2(auxmat(1,1),AEAderg(1,1,1),EAEAderg(1,1,2,1))
6848 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,1),
6849 & EAEAderx(1,1,lll,kkk,iii,1))
6853 C A1T kernel(i+1) A2
6854 call kernel(aa1t(1,1),aa2(1,1),aa1tder(1,1,1,1),
6855 & a_chuj_der(1,1,1,1,kk,k),1,.false.,EUg(1,1,k),EUgder(1,1,k),
6856 & AEA(1,1,2),AEAderg(1,1,2),AEAderx(1,1,1,1,1,2))
6857 C Following matrices are needed only for 6-th order cumulants
6858 IF (wcorr6.gt.0.0d0) THEN
6859 call kernel(aa1t(1,1),aa2(1,1),aa1tder(1,1,1,1),
6860 & a_chuj_der(1,1,1,1,kk,k),1,.false.,EUgC(1,1,k),EUgCder(1,1,k),
6861 & AECA(1,1,2),AECAderg(1,1,2),AECAderx(1,1,1,1,1,2))
6862 call kernel(aa1t(1,1),aa2(1,1),aa1tder(1,1,1,1),
6863 & a_chuj_der(1,1,1,1,kk,k),2,.false.,Ug2DtEUg(1,1,k),
6864 & Ug2DtEUgder(1,1,1,k),ADtEA(1,1,2),ADtEAderg(1,1,1,2),
6865 & ADtEAderx(1,1,1,1,1,2))
6866 call kernel(aa1t(1,1),aa2(1,1),aa1tder(1,1,1,1),
6867 & a_chuj_der(1,1,1,1,kk,k),2,.false.,DtUg2EUg(1,1,k),
6868 & DtUg2EUgder(1,1,1,k),ADtEA1(1,1,2),ADtEA1derg(1,1,1,2),
6869 & ADtEA1derx(1,1,1,1,1,2))
6871 C End 6-th order cumulants
6872 call transpose2(EUgder(1,1,l),auxmat(1,1))
6873 call matmat2(auxmat(1,1),AEA(1,1,2),EAEAderg(1,1,1,2))
6874 call transpose2(EUg(1,1,l),auxmat(1,1))
6875 call matmat2(auxmat(1,1),AEA(1,1,2),EAEA(1,1,2))
6876 call matmat2(auxmat(1,1),AEAderg(1,1,2),EAEAderg(1,1,2,2))
6880 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,2),
6881 & EAEAderx(1,1,lll,kkk,iii,2))
6886 C Calculate the vectors and their derivatives in virtual-bond dihedral angles.
6887 C They are needed only when the fifth- or the sixth-order cumulants are
6889 IF (wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0) THEN
6890 call transpose2(AEA(1,1,1),auxmat(1,1))
6891 call matvec2(auxmat(1,1),b1(1,iti),AEAb1(1,1,1))
6892 call matvec2(auxmat(1,1),Ub2(1,i),AEAb2(1,1,1))
6893 call matvec2(auxmat(1,1),Ub2der(1,i),AEAb2derg(1,2,1,1))
6894 call transpose2(AEAderg(1,1,1),auxmat(1,1))
6895 call matvec2(auxmat(1,1),b1(1,iti),AEAb1derg(1,1,1))
6896 call matvec2(auxmat(1,1),Ub2(1,i),AEAb2derg(1,1,1,1))
6897 call matvec2(AEA(1,1,1),b1(1,itk1),AEAb1(1,2,1))
6898 call matvec2(AEAderg(1,1,1),b1(1,itk1),AEAb1derg(1,2,1))
6899 call matvec2(AEA(1,1,1),Ub2(1,k+1),AEAb2(1,2,1))
6900 call matvec2(AEAderg(1,1,1),Ub2(1,k+1),AEAb2derg(1,1,2,1))
6901 call matvec2(AEA(1,1,1),Ub2der(1,k+1),AEAb2derg(1,2,2,1))
6902 call transpose2(AEA(1,1,2),auxmat(1,1))
6903 call matvec2(auxmat(1,1),b1(1,itj),AEAb1(1,1,2))
6904 call matvec2(auxmat(1,1),Ub2(1,j),AEAb2(1,1,2))
6905 call matvec2(auxmat(1,1),Ub2der(1,j),AEAb2derg(1,2,1,2))
6906 call transpose2(AEAderg(1,1,2),auxmat(1,1))
6907 call matvec2(auxmat(1,1),b1(1,itj),AEAb1derg(1,1,2))
6908 call matvec2(auxmat(1,1),Ub2(1,j),AEAb2derg(1,1,1,2))
6909 call matvec2(AEA(1,1,2),b1(1,itl1),AEAb1(1,2,2))
6910 call matvec2(AEAderg(1,1,2),b1(1,itl1),AEAb1derg(1,2,2))
6911 call matvec2(AEA(1,1,2),Ub2(1,l+1),AEAb2(1,2,2))
6912 call matvec2(AEAderg(1,1,2),Ub2(1,l+1),AEAb2derg(1,1,2,2))
6913 call matvec2(AEA(1,1,2),Ub2der(1,l+1),AEAb2derg(1,2,2,2))
6914 C Calculate the Cartesian derivatives of the vectors.
6918 call transpose2(AEAderx(1,1,lll,kkk,iii,1),auxmat(1,1))
6919 call matvec2(auxmat(1,1),b1(1,iti),
6920 & AEAb1derx(1,lll,kkk,iii,1,1))
6921 call matvec2(auxmat(1,1),Ub2(1,i),
6922 & AEAb2derx(1,lll,kkk,iii,1,1))
6923 call matvec2(AEAderx(1,1,lll,kkk,iii,1),b1(1,itk1),
6924 & AEAb1derx(1,lll,kkk,iii,2,1))
6925 call matvec2(AEAderx(1,1,lll,kkk,iii,1),Ub2(1,k+1),
6926 & AEAb2derx(1,lll,kkk,iii,2,1))
6927 call transpose2(AEAderx(1,1,lll,kkk,iii,2),auxmat(1,1))
6928 call matvec2(auxmat(1,1),b1(1,itj),
6929 & AEAb1derx(1,lll,kkk,iii,1,2))
6930 call matvec2(auxmat(1,1),Ub2(1,j),
6931 & AEAb2derx(1,lll,kkk,iii,1,2))
6932 call matvec2(AEAderx(1,1,lll,kkk,iii,2),b1(1,itl1),
6933 & AEAb1derx(1,lll,kkk,iii,2,2))
6934 call matvec2(AEAderx(1,1,lll,kkk,iii,2),Ub2(1,l+1),
6935 & AEAb2derx(1,lll,kkk,iii,2,2))
6942 C Antiparallel orientation of the two CA-CA-CA frames.
6944 iti=itortyp(itype(i))
6948 itk1=itortyp(itype(k+1))
6949 itl=itortyp(itype(l))
6950 itj=itortyp(itype(j))
6951 if (j.lt.nres-1) then
6952 itj1=itortyp(itype(j+1))
6956 C A2 kernel(j-1)T A1T
6957 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
6958 & aa2tder(1,1,1,1),1,.true.,EUg(1,1,j),EUgder(1,1,j),
6959 & AEA(1,1,1),AEAderg(1,1,1),AEAderx(1,1,1,1,1,1))
6960 C Following matrices are needed only for 6-th order cumulants
6961 IF (wcorr6.gt.0.0d0 .or. (wturn6.gt.0.0d0 .and.
6962 & j.eq.i+4 .and. l.eq.i+3)) THEN
6963 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
6964 & aa2tder(1,1,1,1),1,.true.,EUgC(1,1,j),EUgCder(1,1,j),
6965 & AECA(1,1,1),AECAderg(1,1,1),AECAderx(1,1,1,1,1,1))
6966 call kernel(aa2(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
6967 & aa2tder(1,1,1,1),2,.true.,Ug2DtEUg(1,1,j),
6968 & Ug2DtEUgder(1,1,1,j),ADtEA(1,1,1),ADtEAderg(1,1,1,1),
6969 & ADtEAderx(1,1,1,1,1,1))
6970 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
6971 & aa2tder(1,1,1,1),2,.true.,DtUg2EUg(1,1,j),
6972 & DtUg2EUgder(1,1,1,j),ADtEA1(1,1,1),ADtEA1derg(1,1,1,1),
6973 & ADtEA1derx(1,1,1,1,1,1))
6975 C End 6-th order cumulants
6976 call transpose2(EUgder(1,1,k),auxmat(1,1))
6977 call matmat2(auxmat(1,1),AEA(1,1,1),EAEAderg(1,1,1,1))
6978 call transpose2(EUg(1,1,k),auxmat(1,1))
6979 call matmat2(auxmat(1,1),AEA(1,1,1),EAEA(1,1,1))
6980 call matmat2(auxmat(1,1),AEAderg(1,1,1),EAEAderg(1,1,2,1))
6984 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,1),
6985 & EAEAderx(1,1,lll,kkk,iii,1))
6989 C A2T kernel(i+1)T A1
6990 call kernel(aa2t(1,1),aa1(1,1),aa2tder(1,1,1,1),
6991 & a_chuj_der(1,1,1,1,jj,i),1,.true.,EUg(1,1,k),EUgder(1,1,k),
6992 & AEA(1,1,2),AEAderg(1,1,2),AEAderx(1,1,1,1,1,2))
6993 C Following matrices are needed only for 6-th order cumulants
6994 IF (wcorr6.gt.0.0d0 .or. (wturn6.gt.0.0d0 .and.
6995 & j.eq.i+4 .and. l.eq.i+3)) THEN
6996 call kernel(aa2t(1,1),aa1(1,1),aa2tder(1,1,1,1),
6997 & a_chuj_der(1,1,1,1,jj,i),1,.true.,EUgC(1,1,k),EUgCder(1,1,k),
6998 & AECA(1,1,2),AECAderg(1,1,2),AECAderx(1,1,1,1,1,2))
6999 call kernel(aa2t(1,1),aa1(1,1),aa2tder(1,1,1,1),
7000 & a_chuj_der(1,1,1,1,jj,i),2,.true.,Ug2DtEUg(1,1,k),
7001 & Ug2DtEUgder(1,1,1,k),ADtEA(1,1,2),ADtEAderg(1,1,1,2),
7002 & ADtEAderx(1,1,1,1,1,2))
7003 call kernel(aa2t(1,1),aa1(1,1),aa2tder(1,1,1,1),
7004 & a_chuj_der(1,1,1,1,jj,i),2,.true.,DtUg2EUg(1,1,k),
7005 & DtUg2EUgder(1,1,1,k),ADtEA1(1,1,2),ADtEA1derg(1,1,1,2),
7006 & ADtEA1derx(1,1,1,1,1,2))
7008 C End 6-th order cumulants
7009 call transpose2(EUgder(1,1,j),auxmat(1,1))
7010 call matmat2(auxmat(1,1),AEA(1,1,1),EAEAderg(1,1,2,2))
7011 call transpose2(EUg(1,1,j),auxmat(1,1))
7012 call matmat2(auxmat(1,1),AEA(1,1,2),EAEA(1,1,2))
7013 call matmat2(auxmat(1,1),AEAderg(1,1,2),EAEAderg(1,1,2,2))
7017 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,2),
7018 & EAEAderx(1,1,lll,kkk,iii,2))
7023 C Calculate the vectors and their derivatives in virtual-bond dihedral angles.
7024 C They are needed only when the fifth- or the sixth-order cumulants are
7026 IF (wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0 .or.
7027 & (wturn6.gt.0.0d0 .and. j.eq.i+4 .and. l.eq.i+3)) THEN
7028 call transpose2(AEA(1,1,1),auxmat(1,1))
7029 call matvec2(auxmat(1,1),b1(1,iti),AEAb1(1,1,1))
7030 call matvec2(auxmat(1,1),Ub2(1,i),AEAb2(1,1,1))
7031 call matvec2(auxmat(1,1),Ub2der(1,i),AEAb2derg(1,2,1,1))
7032 call transpose2(AEAderg(1,1,1),auxmat(1,1))
7033 call matvec2(auxmat(1,1),b1(1,iti),AEAb1derg(1,1,1))
7034 call matvec2(auxmat(1,1),Ub2(1,i),AEAb2derg(1,1,1,1))
7035 call matvec2(AEA(1,1,1),b1(1,itk1),AEAb1(1,2,1))
7036 call matvec2(AEAderg(1,1,1),b1(1,itk1),AEAb1derg(1,2,1))
7037 call matvec2(AEA(1,1,1),Ub2(1,k+1),AEAb2(1,2,1))
7038 call matvec2(AEAderg(1,1,1),Ub2(1,k+1),AEAb2derg(1,1,2,1))
7039 call matvec2(AEA(1,1,1),Ub2der(1,k+1),AEAb2derg(1,2,2,1))
7040 call transpose2(AEA(1,1,2),auxmat(1,1))
7041 call matvec2(auxmat(1,1),b1(1,itj1),AEAb1(1,1,2))
7042 call matvec2(auxmat(1,1),Ub2(1,l),AEAb2(1,1,2))
7043 call matvec2(auxmat(1,1),Ub2der(1,l),AEAb2derg(1,2,1,2))
7044 call transpose2(AEAderg(1,1,2),auxmat(1,1))
7045 call matvec2(auxmat(1,1),b1(1,itl),AEAb1(1,1,2))
7046 call matvec2(auxmat(1,1),Ub2(1,l),AEAb2derg(1,1,1,2))
7047 call matvec2(AEA(1,1,2),b1(1,itj1),AEAb1(1,2,2))
7048 call matvec2(AEAderg(1,1,2),b1(1,itj1),AEAb1derg(1,2,2))
7049 call matvec2(AEA(1,1,2),Ub2(1,j),AEAb2(1,2,2))
7050 call matvec2(AEAderg(1,1,2),Ub2(1,j),AEAb2derg(1,1,2,2))
7051 call matvec2(AEA(1,1,2),Ub2der(1,j),AEAb2derg(1,2,2,2))
7052 C Calculate the Cartesian derivatives of the vectors.
7056 call transpose2(AEAderx(1,1,lll,kkk,iii,1),auxmat(1,1))
7057 call matvec2(auxmat(1,1),b1(1,iti),
7058 & AEAb1derx(1,lll,kkk,iii,1,1))
7059 call matvec2(auxmat(1,1),Ub2(1,i),
7060 & AEAb2derx(1,lll,kkk,iii,1,1))
7061 call matvec2(AEAderx(1,1,lll,kkk,iii,1),b1(1,itk1),
7062 & AEAb1derx(1,lll,kkk,iii,2,1))
7063 call matvec2(AEAderx(1,1,lll,kkk,iii,1),Ub2(1,k+1),
7064 & AEAb2derx(1,lll,kkk,iii,2,1))
7065 call transpose2(AEAderx(1,1,lll,kkk,iii,2),auxmat(1,1))
7066 call matvec2(auxmat(1,1),b1(1,itl),
7067 & AEAb1derx(1,lll,kkk,iii,1,2))
7068 call matvec2(auxmat(1,1),Ub2(1,l),
7069 & AEAb2derx(1,lll,kkk,iii,1,2))
7070 call matvec2(AEAderx(1,1,lll,kkk,iii,2),b1(1,itj1),
7071 & AEAb1derx(1,lll,kkk,iii,2,2))
7072 call matvec2(AEAderx(1,1,lll,kkk,iii,2),Ub2(1,j),
7073 & AEAb2derx(1,lll,kkk,iii,2,2))
7082 C---------------------------------------------------------------------------
7083 subroutine kernel(aa1,aa2t,aa1derx,aa2tderx,nderg,transp,
7084 & KK,KKderg,AKA,AKAderg,AKAderx)
7088 double precision aa1(2,2),aa2t(2,2),aa1derx(2,2,3,5),
7089 & aa2tderx(2,2,3,5),KK(2,2),KKderg(2,2,nderg),AKA(2,2),
7090 & AKAderg(2,2,nderg),AKAderx(2,2,3,5,2)
7095 call prodmat3(aa1(1,1),aa2t(1,1),KK(1,1),transp,AKA(1,1))
7097 call prodmat3(aa1(1,1),aa2t(1,1),KKderg(1,1,iii),transp,
7100 cd if (lprn) write (2,*) 'In kernel'
7102 cd if (lprn) write (2,*) 'kkk=',kkk
7104 call prodmat3(aa1derx(1,1,lll,kkk),aa2t(1,1),
7105 & KK(1,1),transp,AKAderx(1,1,lll,kkk,1))
7107 cd write (2,*) 'lll=',lll
7108 cd write (2,*) 'iii=1'
7110 cd write (2,'(3(2f10.5),5x)')
7111 cd & (AKAderx(jjj,mmm,lll,kkk,1),mmm=1,2)
7114 call prodmat3(aa1(1,1),aa2tderx(1,1,lll,kkk),
7115 & KK(1,1),transp,AKAderx(1,1,lll,kkk,2))
7117 cd write (2,*) 'lll=',lll
7118 cd write (2,*) 'iii=2'
7120 cd write (2,'(3(2f10.5),5x)')
7121 cd & (AKAderx(jjj,mmm,lll,kkk,2),mmm=1,2)
7128 C---------------------------------------------------------------------------
7129 double precision function eello4(i,j,k,l,jj,kk)
7130 implicit real*8 (a-h,o-z)
7131 include 'DIMENSIONS'
7132 include 'COMMON.IOUNITS'
7133 include 'COMMON.CHAIN'
7134 include 'COMMON.DERIV'
7135 include 'COMMON.INTERACT'
7136 include 'COMMON.CONTACTS'
7137 include 'COMMON.TORSION'
7138 include 'COMMON.VAR'
7139 include 'COMMON.GEO'
7140 double precision pizda(2,2),ggg1(3),ggg2(3)
7141 cd if (i.ne.1 .or. j.ne.5 .or. k.ne.2 .or.l.ne.4) then
7145 cd print *,'eello4:',i,j,k,l,jj,kk
7146 cd write (2,*) 'i',i,' j',j,' k',k,' l',l
7147 cd call checkint4(i,j,k,l,jj,kk,eel4_num)
7148 cold eij=facont_hb(jj,i)
7149 cold ekl=facont_hb(kk,k)
7151 eel4=-EAEA(1,1,1)-EAEA(2,2,1)
7152 cd eel41=-EAEA(1,1,2)-EAEA(2,2,2)
7153 gcorr_loc(k-1)=gcorr_loc(k-1)
7154 & -ekont*(EAEAderg(1,1,1,1)+EAEAderg(2,2,1,1))
7156 gcorr_loc(l-1)=gcorr_loc(l-1)
7157 & -ekont*(EAEAderg(1,1,2,1)+EAEAderg(2,2,2,1))
7159 gcorr_loc(j-1)=gcorr_loc(j-1)
7160 & -ekont*(EAEAderg(1,1,2,1)+EAEAderg(2,2,2,1))
7165 derx(lll,kkk,iii)=-EAEAderx(1,1,lll,kkk,iii,1)
7166 & -EAEAderx(2,2,lll,kkk,iii,1)
7167 cd derx(lll,kkk,iii)=0.0d0
7171 cd gcorr_loc(l-1)=0.0d0
7172 cd gcorr_loc(j-1)=0.0d0
7173 cd gcorr_loc(k-1)=0.0d0
7175 cd write (iout,*)'Contacts have occurred for peptide groups',
7176 cd & i,j,' fcont:',eij,' eij',' and ',k,l,
7177 cd & ' fcont ',ekl,' eel4=',eel4,' eel4_num',16*eel4_num
7178 if (j.lt.nres-1) then
7185 if (l.lt.nres-1) then
7193 cgrad ggg1(ll)=eel4*g_contij(ll,1)
7194 cgrad ggg2(ll)=eel4*g_contij(ll,2)
7195 glongij=eel4*g_contij(ll,1)+ekont*derx(ll,1,1)
7196 glongkl=eel4*g_contij(ll,2)+ekont*derx(ll,1,2)
7197 cgrad ghalf=0.5d0*ggg1(ll)
7198 gradcorr(ll,i)=gradcorr(ll,i)+ekont*derx(ll,2,1)
7199 gradcorr(ll,i+1)=gradcorr(ll,i+1)+ekont*derx(ll,3,1)
7200 gradcorr(ll,j)=gradcorr(ll,j)+ekont*derx(ll,4,1)
7201 gradcorr(ll,j1)=gradcorr(ll,j1)+ekont*derx(ll,5,1)
7202 gradcorr_long(ll,j)=gradcorr_long(ll,j)+glongij
7203 gradcorr_long(ll,i)=gradcorr_long(ll,i)-glongij
7204 cgrad ghalf=0.5d0*ggg2(ll)
7205 gradcorr(ll,k)=gradcorr(ll,k)+ekont*derx(ll,2,2)
7206 gradcorr(ll,k+1)=gradcorr(ll,k+1)+ekont*derx(ll,3,2)
7207 gradcorr(ll,l)=gradcorr(ll,l)+ekont*derx(ll,4,2)
7208 gradcorr(ll,l1)=gradcorr(ll,l1)+ekont*derx(ll,5,2)
7209 gradcorr_long(ll,l)=gradcorr_long(ll,l)+glongkl
7210 gradcorr_long(ll,k)=gradcorr_long(ll,k)-glongkl
7214 cgrad gradcorr(ll,m)=gradcorr(ll,m)+ggg1(ll)
7219 cgrad gradcorr(ll,m)=gradcorr(ll,m)+ggg2(ll)
7224 cgrad gradcorr(ll,m)=gradcorr(ll,m)+ekont*derx(ll,1,1)
7229 cgrad gradcorr(ll,m)=gradcorr(ll,m)+ekont*derx(ll,1,2)
7233 cd write (2,*) iii,gcorr_loc(iii)
7236 cd write (2,*) 'ekont',ekont
7237 cd write (iout,*) 'eello4',ekont*eel4
7240 C---------------------------------------------------------------------------
7241 double precision function eello5(i,j,k,l,jj,kk)
7242 implicit real*8 (a-h,o-z)
7243 include 'DIMENSIONS'
7244 include 'COMMON.IOUNITS'
7245 include 'COMMON.CHAIN'
7246 include 'COMMON.DERIV'
7247 include 'COMMON.INTERACT'
7248 include 'COMMON.CONTACTS'
7249 include 'COMMON.TORSION'
7250 include 'COMMON.VAR'
7251 include 'COMMON.GEO'
7252 double precision pizda(2,2),auxmat(2,2),auxmat1(2,2),vv(2)
7253 double precision ggg1(3),ggg2(3)
7254 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
7259 C /l\ / \ \ / \ / \ / C
7260 C / \ / \ \ / \ / \ / C
7261 C j| o |l1 | o | o| o | | o |o C
7262 C \ |/k\| |/ \| / |/ \| |/ \| C
7263 C \i/ \ / \ / / \ / \ C
7265 C (I) (II) (III) (IV) C
7267 C eello5_1 eello5_2 eello5_3 eello5_4 C
7269 C Antiparallel chains C
7272 C /j\ / \ \ / \ / \ / C
7273 C / \ / \ \ / \ / \ / C
7274 C j1| o |l | o | o| o | | o |o C
7275 C \ |/k\| |/ \| / |/ \| |/ \| C
7276 C \i/ \ / \ / / \ / \ C
7278 C (I) (II) (III) (IV) C
7280 C eello5_1 eello5_2 eello5_3 eello5_4 C
7282 C o denotes a local interaction, vertical lines an electrostatic interaction. C
7284 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
7285 cd if (i.ne.2 .or. j.ne.6 .or. k.ne.3 .or. l.ne.5) then
7290 cd & 'EELLO5: Contacts have occurred for peptide groups',i,j,
7292 itk=itortyp(itype(k))
7293 itl=itortyp(itype(l))
7294 itj=itortyp(itype(j))
7299 cd call checkint5(i,j,k,l,jj,kk,eel5_1_num,eel5_2_num,
7300 cd & eel5_3_num,eel5_4_num)
7304 derx(lll,kkk,iii)=0.0d0
7308 cd eij=facont_hb(jj,i)
7309 cd ekl=facont_hb(kk,k)
7311 cd write (iout,*)'Contacts have occurred for peptide groups',
7312 cd & i,j,' fcont:',eij,' eij',' and ',k,l
7314 C Contribution from the graph I.
7315 cd write (2,*) 'AEA ',AEA(1,1,1),AEA(2,1,1),AEA(1,2,1),AEA(2,2,1)
7316 cd write (2,*) 'AEAb2',AEAb2(1,1,1),AEAb2(2,1,1)
7317 call transpose2(EUg(1,1,k),auxmat(1,1))
7318 call matmat2(AEA(1,1,1),auxmat(1,1),pizda(1,1))
7319 vv(1)=pizda(1,1)-pizda(2,2)
7320 vv(2)=pizda(1,2)+pizda(2,1)
7321 eello5_1=scalar2(AEAb2(1,1,1),Ub2(1,k))
7322 & +0.5d0*scalar2(vv(1),Dtobr2(1,i))
7323 C Explicit gradient in virtual-dihedral angles.
7324 if (i.gt.1) g_corr5_loc(i-1)=g_corr5_loc(i-1)
7325 & +ekont*(scalar2(AEAb2derg(1,2,1,1),Ub2(1,k))
7326 & +0.5d0*scalar2(vv(1),Dtobr2der(1,i)))
7327 call transpose2(EUgder(1,1,k),auxmat1(1,1))
7328 call matmat2(AEA(1,1,1),auxmat1(1,1),pizda(1,1))
7329 vv(1)=pizda(1,1)-pizda(2,2)
7330 vv(2)=pizda(1,2)+pizda(2,1)
7331 g_corr5_loc(k-1)=g_corr5_loc(k-1)
7332 & +ekont*(scalar2(AEAb2(1,1,1),Ub2der(1,k))
7333 & +0.5d0*scalar2(vv(1),Dtobr2(1,i)))
7334 call matmat2(AEAderg(1,1,1),auxmat(1,1),pizda(1,1))
7335 vv(1)=pizda(1,1)-pizda(2,2)
7336 vv(2)=pizda(1,2)+pizda(2,1)
7338 if (l.lt.nres-1) g_corr5_loc(l-1)=g_corr5_loc(l-1)
7339 & +ekont*(scalar2(AEAb2derg(1,1,1,1),Ub2(1,k))
7340 & +0.5d0*scalar2(vv(1),Dtobr2(1,i)))
7342 if (j.lt.nres-1) g_corr5_loc(j-1)=g_corr5_loc(j-1)
7343 & +ekont*(scalar2(AEAb2derg(1,1,1,1),Ub2(1,k))
7344 & +0.5d0*scalar2(vv(1),Dtobr2(1,i)))
7346 C Cartesian gradient
7350 call matmat2(AEAderx(1,1,lll,kkk,iii,1),auxmat(1,1),
7352 vv(1)=pizda(1,1)-pizda(2,2)
7353 vv(2)=pizda(1,2)+pizda(2,1)
7354 derx(lll,kkk,iii)=derx(lll,kkk,iii)
7355 & +scalar2(AEAb2derx(1,lll,kkk,iii,1,1),Ub2(1,k))
7356 & +0.5d0*scalar2(vv(1),Dtobr2(1,i))
7362 C Contribution from graph II
7363 call transpose2(EE(1,1,itk),auxmat(1,1))
7364 call matmat2(auxmat(1,1),AEA(1,1,1),pizda(1,1))
7365 vv(1)=pizda(1,1)+pizda(2,2)
7366 vv(2)=pizda(2,1)-pizda(1,2)
7367 eello5_2=scalar2(AEAb1(1,2,1),b1(1,itk))
7368 & -0.5d0*scalar2(vv(1),Ctobr(1,k))
7369 C Explicit gradient in virtual-dihedral angles.
7370 g_corr5_loc(k-1)=g_corr5_loc(k-1)
7371 & -0.5d0*ekont*scalar2(vv(1),Ctobrder(1,k))
7372 call matmat2(auxmat(1,1),AEAderg(1,1,1),pizda(1,1))
7373 vv(1)=pizda(1,1)+pizda(2,2)
7374 vv(2)=pizda(2,1)-pizda(1,2)
7376 g_corr5_loc(l-1)=g_corr5_loc(l-1)
7377 & +ekont*(scalar2(AEAb1derg(1,2,1),b1(1,itk))
7378 & -0.5d0*scalar2(vv(1),Ctobr(1,k)))
7380 g_corr5_loc(j-1)=g_corr5_loc(j-1)
7381 & +ekont*(scalar2(AEAb1derg(1,2,1),b1(1,itk))
7382 & -0.5d0*scalar2(vv(1),Ctobr(1,k)))
7384 C Cartesian gradient
7388 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,1),
7390 vv(1)=pizda(1,1)+pizda(2,2)
7391 vv(2)=pizda(2,1)-pizda(1,2)
7392 derx(lll,kkk,iii)=derx(lll,kkk,iii)
7393 & +scalar2(AEAb1derx(1,lll,kkk,iii,2,1),b1(1,itk))
7394 & -0.5d0*scalar2(vv(1),Ctobr(1,k))
7402 C Parallel orientation
7403 C Contribution from graph III
7404 call transpose2(EUg(1,1,l),auxmat(1,1))
7405 call matmat2(AEA(1,1,2),auxmat(1,1),pizda(1,1))
7406 vv(1)=pizda(1,1)-pizda(2,2)
7407 vv(2)=pizda(1,2)+pizda(2,1)
7408 eello5_3=scalar2(AEAb2(1,1,2),Ub2(1,l))
7409 & +0.5d0*scalar2(vv(1),Dtobr2(1,j))
7410 C Explicit gradient in virtual-dihedral angles.
7411 g_corr5_loc(j-1)=g_corr5_loc(j-1)
7412 & +ekont*(scalar2(AEAb2derg(1,2,1,2),Ub2(1,l))
7413 & +0.5d0*scalar2(vv(1),Dtobr2der(1,j)))
7414 call matmat2(AEAderg(1,1,2),auxmat(1,1),pizda(1,1))
7415 vv(1)=pizda(1,1)-pizda(2,2)
7416 vv(2)=pizda(1,2)+pizda(2,1)
7417 g_corr5_loc(k-1)=g_corr5_loc(k-1)
7418 & +ekont*(scalar2(AEAb2derg(1,1,1,2),Ub2(1,l))
7419 & +0.5d0*scalar2(vv(1),Dtobr2(1,j)))
7420 call transpose2(EUgder(1,1,l),auxmat1(1,1))
7421 call matmat2(AEA(1,1,2),auxmat1(1,1),pizda(1,1))
7422 vv(1)=pizda(1,1)-pizda(2,2)
7423 vv(2)=pizda(1,2)+pizda(2,1)
7424 g_corr5_loc(l-1)=g_corr5_loc(l-1)
7425 & +ekont*(scalar2(AEAb2(1,1,2),Ub2der(1,l))
7426 & +0.5d0*scalar2(vv(1),Dtobr2(1,j)))
7427 C Cartesian gradient
7431 call matmat2(AEAderx(1,1,lll,kkk,iii,2),auxmat(1,1),
7433 vv(1)=pizda(1,1)-pizda(2,2)
7434 vv(2)=pizda(1,2)+pizda(2,1)
7435 derx(lll,kkk,iii)=derx(lll,kkk,iii)
7436 & +scalar2(AEAb2derx(1,lll,kkk,iii,1,2),Ub2(1,l))
7437 & +0.5d0*scalar2(vv(1),Dtobr2(1,j))
7442 C Contribution from graph IV
7444 call transpose2(EE(1,1,itl),auxmat(1,1))
7445 call matmat2(auxmat(1,1),AEA(1,1,2),pizda(1,1))
7446 vv(1)=pizda(1,1)+pizda(2,2)
7447 vv(2)=pizda(2,1)-pizda(1,2)
7448 eello5_4=scalar2(AEAb1(1,2,2),b1(1,itl))
7449 & -0.5d0*scalar2(vv(1),Ctobr(1,l))
7450 C Explicit gradient in virtual-dihedral angles.
7451 g_corr5_loc(l-1)=g_corr5_loc(l-1)
7452 & -0.5d0*ekont*scalar2(vv(1),Ctobrder(1,l))
7453 call matmat2(auxmat(1,1),AEAderg(1,1,2),pizda(1,1))
7454 vv(1)=pizda(1,1)+pizda(2,2)
7455 vv(2)=pizda(2,1)-pizda(1,2)
7456 g_corr5_loc(k-1)=g_corr5_loc(k-1)
7457 & +ekont*(scalar2(AEAb1derg(1,2,2),b1(1,itl))
7458 & -0.5d0*scalar2(vv(1),Ctobr(1,l)))
7459 C Cartesian gradient
7463 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,2),
7465 vv(1)=pizda(1,1)+pizda(2,2)
7466 vv(2)=pizda(2,1)-pizda(1,2)
7467 derx(lll,kkk,iii)=derx(lll,kkk,iii)
7468 & +scalar2(AEAb1derx(1,lll,kkk,iii,2,2),b1(1,itl))
7469 & -0.5d0*scalar2(vv(1),Ctobr(1,l))
7474 C Antiparallel orientation
7475 C Contribution from graph III
7477 call transpose2(EUg(1,1,j),auxmat(1,1))
7478 call matmat2(AEA(1,1,2),auxmat(1,1),pizda(1,1))
7479 vv(1)=pizda(1,1)-pizda(2,2)
7480 vv(2)=pizda(1,2)+pizda(2,1)
7481 eello5_3=scalar2(AEAb2(1,1,2),Ub2(1,j))
7482 & +0.5d0*scalar2(vv(1),Dtobr2(1,l))
7483 C Explicit gradient in virtual-dihedral angles.
7484 g_corr5_loc(l-1)=g_corr5_loc(l-1)
7485 & +ekont*(scalar2(AEAb2derg(1,2,1,2),Ub2(1,j))
7486 & +0.5d0*scalar2(vv(1),Dtobr2der(1,l)))
7487 call matmat2(AEAderg(1,1,2),auxmat(1,1),pizda(1,1))
7488 vv(1)=pizda(1,1)-pizda(2,2)
7489 vv(2)=pizda(1,2)+pizda(2,1)
7490 g_corr5_loc(k-1)=g_corr5_loc(k-1)
7491 & +ekont*(scalar2(AEAb2derg(1,1,1,2),Ub2(1,j))
7492 & +0.5d0*scalar2(vv(1),Dtobr2(1,l)))
7493 call transpose2(EUgder(1,1,j),auxmat1(1,1))
7494 call matmat2(AEA(1,1,2),auxmat1(1,1),pizda(1,1))
7495 vv(1)=pizda(1,1)-pizda(2,2)
7496 vv(2)=pizda(1,2)+pizda(2,1)
7497 g_corr5_loc(j-1)=g_corr5_loc(j-1)
7498 & +ekont*(scalar2(AEAb2(1,1,2),Ub2der(1,j))
7499 & +0.5d0*scalar2(vv(1),Dtobr2(1,l)))
7500 C Cartesian gradient
7504 call matmat2(AEAderx(1,1,lll,kkk,iii,2),auxmat(1,1),
7506 vv(1)=pizda(1,1)-pizda(2,2)
7507 vv(2)=pizda(1,2)+pizda(2,1)
7508 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)
7509 & +scalar2(AEAb2derx(1,lll,kkk,iii,1,2),Ub2(1,j))
7510 & +0.5d0*scalar2(vv(1),Dtobr2(1,l))
7515 C Contribution from graph IV
7517 call transpose2(EE(1,1,itj),auxmat(1,1))
7518 call matmat2(auxmat(1,1),AEA(1,1,2),pizda(1,1))
7519 vv(1)=pizda(1,1)+pizda(2,2)
7520 vv(2)=pizda(2,1)-pizda(1,2)
7521 eello5_4=scalar2(AEAb1(1,2,2),b1(1,itj))
7522 & -0.5d0*scalar2(vv(1),Ctobr(1,j))
7523 C Explicit gradient in virtual-dihedral angles.
7524 g_corr5_loc(j-1)=g_corr5_loc(j-1)
7525 & -0.5d0*ekont*scalar2(vv(1),Ctobrder(1,j))
7526 call matmat2(auxmat(1,1),AEAderg(1,1,2),pizda(1,1))
7527 vv(1)=pizda(1,1)+pizda(2,2)
7528 vv(2)=pizda(2,1)-pizda(1,2)
7529 g_corr5_loc(k-1)=g_corr5_loc(k-1)
7530 & +ekont*(scalar2(AEAb1derg(1,2,2),b1(1,itj))
7531 & -0.5d0*scalar2(vv(1),Ctobr(1,j)))
7532 C Cartesian gradient
7536 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,2),
7538 vv(1)=pizda(1,1)+pizda(2,2)
7539 vv(2)=pizda(2,1)-pizda(1,2)
7540 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)
7541 & +scalar2(AEAb1derx(1,lll,kkk,iii,2,2),b1(1,itj))
7542 & -0.5d0*scalar2(vv(1),Ctobr(1,j))
7548 eel5=eello5_1+eello5_2+eello5_3+eello5_4
7549 cd if (i.eq.2 .and. j.eq.8 .and. k.eq.3 .and. l.eq.7) then
7550 cd write (2,*) 'ijkl',i,j,k,l
7551 cd write (2,*) 'eello5_1',eello5_1,' eello5_2',eello5_2,
7552 cd & ' eello5_3',eello5_3,' eello5_4',eello5_4
7554 cd write(iout,*) 'eello5_1',eello5_1,' eel5_1_num',16*eel5_1_num
7555 cd write(iout,*) 'eello5_2',eello5_2,' eel5_2_num',16*eel5_2_num
7556 cd write(iout,*) 'eello5_3',eello5_3,' eel5_3_num',16*eel5_3_num
7557 cd write(iout,*) 'eello5_4',eello5_4,' eel5_4_num',16*eel5_4_num
7558 if (j.lt.nres-1) then
7565 if (l.lt.nres-1) then
7575 cd write (2,*) 'eij',eij,' ekl',ekl,' ekont',ekont
7576 C 2/11/08 AL Gradients over DC's connecting interacting sites will be
7577 C summed up outside the subrouine as for the other subroutines
7578 C handling long-range interactions. The old code is commented out
7579 C with "cgrad" to keep track of changes.
7581 cgrad ggg1(ll)=eel5*g_contij(ll,1)
7582 cgrad ggg2(ll)=eel5*g_contij(ll,2)
7583 gradcorr5ij=eel5*g_contij(ll,1)+ekont*derx(ll,1,1)
7584 gradcorr5kl=eel5*g_contij(ll,2)+ekont*derx(ll,1,2)
7585 c write (iout,'(a,3i3,a,5f8.3,2i3,a,5f8.3,a,f8.3)')
7586 c & "ecorr5",ll,i,j," derx",derx(ll,2,1),derx(ll,3,1),derx(ll,4,1),
7587 c & derx(ll,5,1),k,l," derx",derx(ll,2,2),derx(ll,3,2),
7588 c & derx(ll,4,2),derx(ll,5,2)," ekont",ekont
7589 c write (iout,'(a,3i3,a,3f8.3,2i3,a,3f8.3)')
7590 c & "ecorr5",ll,i,j," gradcorr5",g_contij(ll,1),derx(ll,1,1),
7592 c & k,l," gradcorr5",g_contij(ll,2),derx(ll,1,2),gradcorr5kl
7593 cold ghalf=0.5d0*eel5*ekl*gacont_hbr(ll,jj,i)
7594 cgrad ghalf=0.5d0*ggg1(ll)
7596 gradcorr5(ll,i)=gradcorr5(ll,i)+ekont*derx(ll,2,1)
7597 gradcorr5(ll,i+1)=gradcorr5(ll,i+1)+ekont*derx(ll,3,1)
7598 gradcorr5(ll,j)=gradcorr5(ll,j)+ekont*derx(ll,4,1)
7599 gradcorr5(ll,j1)=gradcorr5(ll,j1)+ekont*derx(ll,5,1)
7600 gradcorr5_long(ll,j)=gradcorr5_long(ll,j)+gradcorr5ij
7601 gradcorr5_long(ll,i)=gradcorr5_long(ll,i)-gradcorr5ij
7602 cold ghalf=0.5d0*eel5*eij*gacont_hbr(ll,kk,k)
7603 cgrad ghalf=0.5d0*ggg2(ll)
7605 gradcorr5(ll,k)=gradcorr5(ll,k)+ghalf+ekont*derx(ll,2,2)
7606 gradcorr5(ll,k+1)=gradcorr5(ll,k+1)+ekont*derx(ll,3,2)
7607 gradcorr5(ll,l)=gradcorr5(ll,l)+ghalf+ekont*derx(ll,4,2)
7608 gradcorr5(ll,l1)=gradcorr5(ll,l1)+ekont*derx(ll,5,2)
7609 gradcorr5_long(ll,l)=gradcorr5_long(ll,l)+gradcorr5kl
7610 gradcorr5_long(ll,k)=gradcorr5_long(ll,k)-gradcorr5kl
7615 cold gradcorr5(ll,m)=gradcorr5(ll,m)+eel5*ekl*gacont_hbr(ll,jj,i)
7616 cgrad gradcorr5(ll,m)=gradcorr5(ll,m)+ggg1(ll)
7621 cold gradcorr5(ll,m)=gradcorr5(ll,m)+eel5*eij*gacont_hbr(ll,kk,k)
7622 cgrad gradcorr5(ll,m)=gradcorr5(ll,m)+ggg2(ll)
7628 cgrad gradcorr5(ll,m)=gradcorr5(ll,m)+ekont*derx(ll,1,1)
7633 cgrad gradcorr5(ll,m)=gradcorr5(ll,m)+ekont*derx(ll,1,2)
7637 cd write (2,*) iii,g_corr5_loc(iii)
7640 cd write (2,*) 'ekont',ekont
7641 cd write (iout,*) 'eello5',ekont*eel5
7644 c--------------------------------------------------------------------------
7645 double precision function eello6(i,j,k,l,jj,kk)
7646 implicit real*8 (a-h,o-z)
7647 include 'DIMENSIONS'
7648 include 'COMMON.IOUNITS'
7649 include 'COMMON.CHAIN'
7650 include 'COMMON.DERIV'
7651 include 'COMMON.INTERACT'
7652 include 'COMMON.CONTACTS'
7653 include 'COMMON.TORSION'
7654 include 'COMMON.VAR'
7655 include 'COMMON.GEO'
7656 include 'COMMON.FFIELD'
7657 double precision ggg1(3),ggg2(3)
7658 cd if (i.ne.1 .or. j.ne.3 .or. k.ne.2 .or. l.ne.4) then
7663 cd & 'EELLO6: Contacts have occurred for peptide groups',i,j,
7671 cd call checkint6(i,j,k,l,jj,kk,eel6_1_num,eel6_2_num,
7672 cd & eel6_3_num,eel6_4_num,eel6_5_num,eel6_6_num)
7676 derx(lll,kkk,iii)=0.0d0
7680 cd eij=facont_hb(jj,i)
7681 cd ekl=facont_hb(kk,k)
7687 eello6_1=eello6_graph1(i,j,k,l,1,.false.)
7688 eello6_2=eello6_graph1(j,i,l,k,2,.false.)
7689 eello6_3=eello6_graph2(i,j,k,l,jj,kk,.false.)
7690 eello6_4=eello6_graph4(i,j,k,l,jj,kk,1,.false.)
7691 eello6_5=eello6_graph4(j,i,l,k,jj,kk,2,.false.)
7692 eello6_6=eello6_graph3(i,j,k,l,jj,kk,.false.)
7694 eello6_1=eello6_graph1(i,j,k,l,1,.false.)
7695 eello6_2=eello6_graph1(l,k,j,i,2,.true.)
7696 eello6_3=eello6_graph2(i,l,k,j,jj,kk,.true.)
7697 eello6_4=eello6_graph4(i,j,k,l,jj,kk,1,.false.)
7698 if (wturn6.eq.0.0d0 .or. j.ne.i+4) then
7699 eello6_5=eello6_graph4(l,k,j,i,kk,jj,2,.true.)
7703 eello6_6=eello6_graph3(i,l,k,j,jj,kk,.true.)
7705 C If turn contributions are considered, they will be handled separately.
7706 eel6=eello6_1+eello6_2+eello6_3+eello6_4+eello6_5+eello6_6
7707 cd write(iout,*) 'eello6_1',eello6_1!,' eel6_1_num',16*eel6_1_num
7708 cd write(iout,*) 'eello6_2',eello6_2!,' eel6_2_num',16*eel6_2_num
7709 cd write(iout,*) 'eello6_3',eello6_3!,' eel6_3_num',16*eel6_3_num
7710 cd write(iout,*) 'eello6_4',eello6_4!,' eel6_4_num',16*eel6_4_num
7711 cd write(iout,*) 'eello6_5',eello6_5!,' eel6_5_num',16*eel6_5_num
7712 cd write(iout,*) 'eello6_6',eello6_6!,' eel6_6_num',16*eel6_6_num
7714 if (j.lt.nres-1) then
7721 if (l.lt.nres-1) then
7729 cgrad ggg1(ll)=eel6*g_contij(ll,1)
7730 cgrad ggg2(ll)=eel6*g_contij(ll,2)
7731 cold ghalf=0.5d0*eel6*ekl*gacont_hbr(ll,jj,i)
7732 cgrad ghalf=0.5d0*ggg1(ll)
7734 gradcorr6ij=eel6*g_contij(ll,1)+ekont*derx(ll,1,1)
7735 gradcorr6kl=eel6*g_contij(ll,2)+ekont*derx(ll,1,2)
7736 gradcorr6(ll,i)=gradcorr6(ll,i)+ekont*derx(ll,2,1)
7737 gradcorr6(ll,i+1)=gradcorr6(ll,i+1)+ekont*derx(ll,3,1)
7738 gradcorr6(ll,j)=gradcorr6(ll,j)+ekont*derx(ll,4,1)
7739 gradcorr6(ll,j1)=gradcorr6(ll,j1)+ekont*derx(ll,5,1)
7740 gradcorr6_long(ll,j)=gradcorr6_long(ll,j)+gradcorr6ij
7741 gradcorr6_long(ll,i)=gradcorr6_long(ll,i)-gradcorr6ij
7742 cgrad ghalf=0.5d0*ggg2(ll)
7743 cold ghalf=0.5d0*eel6*eij*gacont_hbr(ll,kk,k)
7745 gradcorr6(ll,k)=gradcorr6(ll,k)+ekont*derx(ll,2,2)
7746 gradcorr6(ll,k+1)=gradcorr6(ll,k+1)+ekont*derx(ll,3,2)
7747 gradcorr6(ll,l)=gradcorr6(ll,l)+ekont*derx(ll,4,2)
7748 gradcorr6(ll,l1)=gradcorr6(ll,l1)+ekont*derx(ll,5,2)
7749 gradcorr6_long(ll,l)=gradcorr6_long(ll,l)+gradcorr6kl
7750 gradcorr6_long(ll,k)=gradcorr6_long(ll,k)-gradcorr6kl
7755 cold gradcorr6(ll,m)=gradcorr6(ll,m)+eel6*ekl*gacont_hbr(ll,jj,i)
7756 cgrad gradcorr6(ll,m)=gradcorr6(ll,m)+ggg1(ll)
7761 cold gradcorr6(ll,m)=gradcorr6(ll,m)+eel6*eij*gacont_hbr(ll,kk,k)
7762 cgrad gradcorr6(ll,m)=gradcorr6(ll,m)+ggg2(ll)
7768 cgrad gradcorr6(ll,m)=gradcorr6(ll,m)+ekont*derx(ll,1,1)
7773 cgrad gradcorr6(ll,m)=gradcorr6(ll,m)+ekont*derx(ll,1,2)
7777 cd write (2,*) iii,g_corr6_loc(iii)
7780 cd write (2,*) 'ekont',ekont
7781 cd write (iout,*) 'eello6',ekont*eel6
7784 c--------------------------------------------------------------------------
7785 double precision function eello6_graph1(i,j,k,l,imat,swap)
7786 implicit real*8 (a-h,o-z)
7787 include 'DIMENSIONS'
7788 include 'COMMON.IOUNITS'
7789 include 'COMMON.CHAIN'
7790 include 'COMMON.DERIV'
7791 include 'COMMON.INTERACT'
7792 include 'COMMON.CONTACTS'
7793 include 'COMMON.TORSION'
7794 include 'COMMON.VAR'
7795 include 'COMMON.GEO'
7796 double precision vv(2),vv1(2),pizda(2,2),auxmat(2,2),pizda1(2,2)
7800 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
7802 C Parallel Antiparallel
7808 C \ j|/k\| / \ |/k\|l /
7813 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
7814 itk=itortyp(itype(k))
7815 s1= scalar2(AEAb1(1,2,imat),CUgb2(1,i))
7816 s2=-scalar2(AEAb2(1,1,imat),Ug2Db1t(1,k))
7817 s3= scalar2(AEAb2(1,1,imat),CUgb2(1,k))
7818 call transpose2(EUgC(1,1,k),auxmat(1,1))
7819 call matmat2(AEA(1,1,imat),auxmat(1,1),pizda1(1,1))
7820 vv1(1)=pizda1(1,1)-pizda1(2,2)
7821 vv1(2)=pizda1(1,2)+pizda1(2,1)
7822 s4=0.5d0*scalar2(vv1(1),Dtobr2(1,i))
7823 vv(1)=AEAb1(1,2,imat)*b1(1,itk)-AEAb1(2,2,imat)*b1(2,itk)
7824 vv(2)=AEAb1(1,2,imat)*b1(2,itk)+AEAb1(2,2,imat)*b1(1,itk)
7825 s5=scalar2(vv(1),Dtobr2(1,i))
7826 cd write (2,*) 's1',s1,' s2',s2,' s3',s3,' s4', s4,' s5',s5
7827 eello6_graph1=-0.5d0*(s1+s2+s3+s4+s5)
7828 if (i.gt.1) g_corr6_loc(i-1)=g_corr6_loc(i-1)
7829 & -0.5d0*ekont*(scalar2(AEAb1(1,2,imat),CUgb2der(1,i))
7830 & -scalar2(AEAb2derg(1,2,1,imat),Ug2Db1t(1,k))
7831 & +scalar2(AEAb2derg(1,2,1,imat),CUgb2(1,k))
7832 & +0.5d0*scalar2(vv1(1),Dtobr2der(1,i))
7833 & +scalar2(vv(1),Dtobr2der(1,i)))
7834 call matmat2(AEAderg(1,1,imat),auxmat(1,1),pizda1(1,1))
7835 vv1(1)=pizda1(1,1)-pizda1(2,2)
7836 vv1(2)=pizda1(1,2)+pizda1(2,1)
7837 vv(1)=AEAb1derg(1,2,imat)*b1(1,itk)-AEAb1derg(2,2,imat)*b1(2,itk)
7838 vv(2)=AEAb1derg(1,2,imat)*b1(2,itk)+AEAb1derg(2,2,imat)*b1(1,itk)
7840 g_corr6_loc(l-1)=g_corr6_loc(l-1)
7841 & +ekont*(-0.5d0*(scalar2(AEAb1derg(1,2,imat),CUgb2(1,i))
7842 & -scalar2(AEAb2derg(1,1,1,imat),Ug2Db1t(1,k))
7843 & +scalar2(AEAb2derg(1,1,1,imat),CUgb2(1,k))
7844 & +0.5d0*scalar2(vv1(1),Dtobr2(1,i))+scalar2(vv(1),Dtobr2(1,i))))
7846 g_corr6_loc(j-1)=g_corr6_loc(j-1)
7847 & +ekont*(-0.5d0*(scalar2(AEAb1derg(1,2,imat),CUgb2(1,i))
7848 & -scalar2(AEAb2derg(1,1,1,imat),Ug2Db1t(1,k))
7849 & +scalar2(AEAb2derg(1,1,1,imat),CUgb2(1,k))
7850 & +0.5d0*scalar2(vv1(1),Dtobr2(1,i))+scalar2(vv(1),Dtobr2(1,i))))
7852 call transpose2(EUgCder(1,1,k),auxmat(1,1))
7853 call matmat2(AEA(1,1,imat),auxmat(1,1),pizda1(1,1))
7854 vv1(1)=pizda1(1,1)-pizda1(2,2)
7855 vv1(2)=pizda1(1,2)+pizda1(2,1)
7856 if (k.gt.1) g_corr6_loc(k-1)=g_corr6_loc(k-1)
7857 & +ekont*(-0.5d0*(-scalar2(AEAb2(1,1,imat),Ug2Db1tder(1,k))
7858 & +scalar2(AEAb2(1,1,imat),CUgb2der(1,k))
7859 & +0.5d0*scalar2(vv1(1),Dtobr2(1,i))))
7868 s1= scalar2(AEAb1derx(1,lll,kkk,iii,2,imat),CUgb2(1,i))
7869 s2=-scalar2(AEAb2derx(1,lll,kkk,iii,1,imat),Ug2Db1t(1,k))
7870 s3= scalar2(AEAb2derx(1,lll,kkk,iii,1,imat),CUgb2(1,k))
7871 call transpose2(EUgC(1,1,k),auxmat(1,1))
7872 call matmat2(AEAderx(1,1,lll,kkk,iii,imat),auxmat(1,1),
7874 vv1(1)=pizda1(1,1)-pizda1(2,2)
7875 vv1(2)=pizda1(1,2)+pizda1(2,1)
7876 s4=0.5d0*scalar2(vv1(1),Dtobr2(1,i))
7877 vv(1)=AEAb1derx(1,lll,kkk,iii,2,imat)*b1(1,itk)
7878 & -AEAb1derx(2,lll,kkk,iii,2,imat)*b1(2,itk)
7879 vv(2)=AEAb1derx(1,lll,kkk,iii,2,imat)*b1(2,itk)
7880 & +AEAb1derx(2,lll,kkk,iii,2,imat)*b1(1,itk)
7881 s5=scalar2(vv(1),Dtobr2(1,i))
7882 derx(lll,kkk,ind)=derx(lll,kkk,ind)-0.5d0*(s1+s2+s3+s4+s5)
7888 c----------------------------------------------------------------------------
7889 double precision function eello6_graph2(i,j,k,l,jj,kk,swap)
7890 implicit real*8 (a-h,o-z)
7891 include 'DIMENSIONS'
7892 include 'COMMON.IOUNITS'
7893 include 'COMMON.CHAIN'
7894 include 'COMMON.DERIV'
7895 include 'COMMON.INTERACT'
7896 include 'COMMON.CONTACTS'
7897 include 'COMMON.TORSION'
7898 include 'COMMON.VAR'
7899 include 'COMMON.GEO'
7901 double precision vv(2),pizda(2,2),auxmat(2,2),auxvec(2),
7902 & auxvec1(2),auxvec2(1),auxmat1(2,2)
7905 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
7907 C Parallel Antiparallel
7918 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
7919 cd write (2,*) 'eello6_graph2: i,',i,' j',j,' k',k,' l',l
7920 C AL 7/4/01 s1 would occur in the sixth-order moment,
7921 C but not in a cluster cumulant
7923 s1=dip(1,jj,i)*dip(1,kk,k)
7925 call matvec2(ADtEA1(1,1,1),Ub2(1,k),auxvec(1))
7926 s2=-0.5d0*scalar2(Ub2(1,i),auxvec(1))
7927 call matvec2(ADtEA(1,1,2),Ub2(1,l),auxvec1(1))
7928 s3=-0.5d0*scalar2(Ub2(1,j),auxvec1(1))
7929 call transpose2(EUg(1,1,k),auxmat(1,1))
7930 call matmat2(ADtEA1(1,1,1),auxmat(1,1),pizda(1,1))
7931 vv(1)=pizda(1,1)-pizda(2,2)
7932 vv(2)=pizda(1,2)+pizda(2,1)
7933 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
7934 cd write (2,*) 'eello6_graph2:','s1',s1,' s2',s2,' s3',s3,' s4',s4
7936 eello6_graph2=-(s1+s2+s3+s4)
7938 eello6_graph2=-(s2+s3+s4)
7941 C Derivatives in gamma(i-1)
7944 s1=dipderg(1,jj,i)*dip(1,kk,k)
7946 s2=-0.5d0*scalar2(Ub2der(1,i),auxvec(1))
7947 call matvec2(ADtEAderg(1,1,1,2),Ub2(1,l),auxvec2(1))
7948 s3=-0.5d0*scalar2(Ub2(1,j),auxvec2(1))
7949 s4=-0.25d0*scalar2(vv(1),Dtobr2der(1,i))
7951 g_corr6_loc(i-1)=g_corr6_loc(i-1)-ekont*(s1+s2+s3+s4)
7953 g_corr6_loc(i-1)=g_corr6_loc(i-1)-ekont*(s2+s3+s4)
7955 c g_corr6_loc(i-1)=g_corr6_loc(i-1)-s3
7957 C Derivatives in gamma(k-1)
7959 s1=dip(1,jj,i)*dipderg(1,kk,k)
7961 call matvec2(ADtEA1(1,1,1),Ub2der(1,k),auxvec2(1))
7962 s2=-0.5d0*scalar2(Ub2(1,i),auxvec2(1))
7963 call matvec2(ADtEAderg(1,1,2,2),Ub2(1,l),auxvec2(1))
7964 s3=-0.5d0*scalar2(Ub2(1,j),auxvec2(1))
7965 call transpose2(EUgder(1,1,k),auxmat1(1,1))
7966 call matmat2(ADtEA1(1,1,1),auxmat1(1,1),pizda(1,1))
7967 vv(1)=pizda(1,1)-pizda(2,2)
7968 vv(2)=pizda(1,2)+pizda(2,1)
7969 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
7971 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s1+s2+s3+s4)
7973 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s2+s3+s4)
7975 c g_corr6_loc(k-1)=g_corr6_loc(k-1)-s3
7976 C Derivatives in gamma(j-1) or gamma(l-1)
7979 s1=dipderg(3,jj,i)*dip(1,kk,k)
7981 call matvec2(ADtEA1derg(1,1,1,1),Ub2(1,k),auxvec2(1))
7982 s2=-0.5d0*scalar2(Ub2(1,i),auxvec2(1))
7983 s3=-0.5d0*scalar2(Ub2der(1,j),auxvec1(1))
7984 call matmat2(ADtEA1derg(1,1,1,1),auxmat(1,1),pizda(1,1))
7985 vv(1)=pizda(1,1)-pizda(2,2)
7986 vv(2)=pizda(1,2)+pizda(2,1)
7987 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
7990 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*s1
7992 g_corr6_loc(j-1)=g_corr6_loc(j-1)-ekont*s1
7995 g_corr6_loc(j-1)=g_corr6_loc(j-1)-ekont*(s2+s3+s4)
7996 c g_corr6_loc(j-1)=g_corr6_loc(j-1)-s3
7998 C Derivatives in gamma(l-1) or gamma(j-1)
8001 s1=dip(1,jj,i)*dipderg(3,kk,k)
8003 call matvec2(ADtEA1derg(1,1,2,1),Ub2(1,k),auxvec2(1))
8004 s2=-0.5d0*scalar2(Ub2(1,i),auxvec2(1))
8005 call matvec2(ADtEA(1,1,2),Ub2der(1,l),auxvec2(1))
8006 s3=-0.5d0*scalar2(Ub2(1,j),auxvec2(1))
8007 call matmat2(ADtEA1derg(1,1,2,1),auxmat(1,1),pizda(1,1))
8008 vv(1)=pizda(1,1)-pizda(2,2)
8009 vv(2)=pizda(1,2)+pizda(2,1)
8010 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
8013 g_corr6_loc(j-1)=g_corr6_loc(j-1)-ekont*s1
8015 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*s1
8018 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*(s2+s3+s4)
8019 c g_corr6_loc(l-1)=g_corr6_loc(l-1)-s3
8021 C Cartesian derivatives.
8023 write (2,*) 'In eello6_graph2'
8025 write (2,*) 'iii=',iii
8027 write (2,*) 'kkk=',kkk
8029 write (2,'(3(2f10.5),5x)')
8030 & ((ADtEA1derx(jjj,mmm,lll,kkk,iii,1),mmm=1,2),lll=1,3)
8040 s1=dipderx(lll,kkk,1,jj,i)*dip(1,kk,k)
8042 s1=dip(1,jj,i)*dipderx(lll,kkk,1,kk,k)
8045 call matvec2(ADtEA1derx(1,1,lll,kkk,iii,1),Ub2(1,k),
8047 s2=-0.5d0*scalar2(Ub2(1,i),auxvec(1))
8048 call matvec2(ADtEAderx(1,1,lll,kkk,iii,2),Ub2(1,l),
8050 s3=-0.5d0*scalar2(Ub2(1,j),auxvec(1))
8051 call transpose2(EUg(1,1,k),auxmat(1,1))
8052 call matmat2(ADtEA1derx(1,1,lll,kkk,iii,1),auxmat(1,1),
8054 vv(1)=pizda(1,1)-pizda(2,2)
8055 vv(2)=pizda(1,2)+pizda(2,1)
8056 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
8057 cd write (2,*) 's1',s1,' s2',s2,' s3',s3,' s4',s4
8059 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s1+s2+s4)
8061 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s2+s4)
8064 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-s3
8066 derx(lll,kkk,iii)=derx(lll,kkk,iii)-s3
8073 c----------------------------------------------------------------------------
8074 double precision function eello6_graph3(i,j,k,l,jj,kk,swap)
8075 implicit real*8 (a-h,o-z)
8076 include 'DIMENSIONS'
8077 include 'COMMON.IOUNITS'
8078 include 'COMMON.CHAIN'
8079 include 'COMMON.DERIV'
8080 include 'COMMON.INTERACT'
8081 include 'COMMON.CONTACTS'
8082 include 'COMMON.TORSION'
8083 include 'COMMON.VAR'
8084 include 'COMMON.GEO'
8085 double precision vv(2),pizda(2,2),auxmat(2,2),auxvec(2)
8087 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
8089 C Parallel Antiparallel
8100 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
8102 C 4/7/01 AL Component s1 was removed, because it pertains to the respective
8103 C energy moment and not to the cluster cumulant.
8104 iti=itortyp(itype(i))
8105 if (j.lt.nres-1) then
8106 itj1=itortyp(itype(j+1))
8110 itk=itortyp(itype(k))
8111 itk1=itortyp(itype(k+1))
8112 if (l.lt.nres-1) then
8113 itl1=itortyp(itype(l+1))
8118 s1=dip(4,jj,i)*dip(4,kk,k)
8120 call matvec2(AECA(1,1,1),b1(1,itk1),auxvec(1))
8121 s2=0.5d0*scalar2(b1(1,itk),auxvec(1))
8122 call matvec2(AECA(1,1,2),b1(1,itl1),auxvec(1))
8123 s3=0.5d0*scalar2(b1(1,itj1),auxvec(1))
8124 call transpose2(EE(1,1,itk),auxmat(1,1))
8125 call matmat2(auxmat(1,1),AECA(1,1,1),pizda(1,1))
8126 vv(1)=pizda(1,1)+pizda(2,2)
8127 vv(2)=pizda(2,1)-pizda(1,2)
8128 s4=-0.25d0*scalar2(vv(1),Ctobr(1,k))
8129 cd write (2,*) 'eello6_graph3:','s1',s1,' s2',s2,' s3',s3,' s4',s4,
8130 cd & "sum",-(s2+s3+s4)
8132 eello6_graph3=-(s1+s2+s3+s4)
8134 eello6_graph3=-(s2+s3+s4)
8137 C Derivatives in gamma(k-1)
8138 call matvec2(AECAderg(1,1,2),b1(1,itl1),auxvec(1))
8139 s3=0.5d0*scalar2(b1(1,itj1),auxvec(1))
8140 s4=-0.25d0*scalar2(vv(1),Ctobrder(1,k))
8141 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s3+s4)
8142 C Derivatives in gamma(l-1)
8143 call matvec2(AECAderg(1,1,1),b1(1,itk1),auxvec(1))
8144 s2=0.5d0*scalar2(b1(1,itk),auxvec(1))
8145 call matmat2(auxmat(1,1),AECAderg(1,1,1),pizda(1,1))
8146 vv(1)=pizda(1,1)+pizda(2,2)
8147 vv(2)=pizda(2,1)-pizda(1,2)
8148 s4=-0.25d0*scalar2(vv(1),Ctobr(1,k))
8149 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*(s2+s4)
8150 C Cartesian derivatives.
8156 s1=dipderx(lll,kkk,4,jj,i)*dip(4,kk,k)
8158 s1=dip(4,jj,i)*dipderx(lll,kkk,4,kk,k)
8161 call matvec2(AECAderx(1,1,lll,kkk,iii,1),b1(1,itk1),
8163 s2=0.5d0*scalar2(b1(1,itk),auxvec(1))
8164 call matvec2(AECAderx(1,1,lll,kkk,iii,2),b1(1,itl1),
8166 s3=0.5d0*scalar2(b1(1,itj1),auxvec(1))
8167 call matmat2(auxmat(1,1),AECAderx(1,1,lll,kkk,iii,1),
8169 vv(1)=pizda(1,1)+pizda(2,2)
8170 vv(2)=pizda(2,1)-pizda(1,2)
8171 s4=-0.25d0*scalar2(vv(1),Ctobr(1,k))
8173 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s1+s2+s4)
8175 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s2+s4)
8178 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-s3
8180 derx(lll,kkk,iii)=derx(lll,kkk,iii)-s3
8182 c derx(lll,kkk,iii)=derx(lll,kkk,iii)-s4
8188 c----------------------------------------------------------------------------
8189 double precision function eello6_graph4(i,j,k,l,jj,kk,imat,swap)
8190 implicit real*8 (a-h,o-z)
8191 include 'DIMENSIONS'
8192 include 'COMMON.IOUNITS'
8193 include 'COMMON.CHAIN'
8194 include 'COMMON.DERIV'
8195 include 'COMMON.INTERACT'
8196 include 'COMMON.CONTACTS'
8197 include 'COMMON.TORSION'
8198 include 'COMMON.VAR'
8199 include 'COMMON.GEO'
8200 include 'COMMON.FFIELD'
8201 double precision vv(2),pizda(2,2),auxmat(2,2),auxvec(2),
8202 & auxvec1(2),auxmat1(2,2)
8204 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
8206 C Parallel Antiparallel
8217 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
8219 C 4/7/01 AL Component s1 was removed, because it pertains to the respective
8220 C energy moment and not to the cluster cumulant.
8221 cd write (2,*) 'eello_graph4: wturn6',wturn6
8222 iti=itortyp(itype(i))
8223 itj=itortyp(itype(j))
8224 if (j.lt.nres-1) then
8225 itj1=itortyp(itype(j+1))
8229 itk=itortyp(itype(k))
8230 if (k.lt.nres-1) then
8231 itk1=itortyp(itype(k+1))
8235 itl=itortyp(itype(l))
8236 if (l.lt.nres-1) then
8237 itl1=itortyp(itype(l+1))
8241 cd write (2,*) 'eello6_graph4:','i',i,' j',j,' k',k,' l',l
8242 cd write (2,*) 'iti',iti,' itj',itj,' itj1',itj1,' itk',itk,
8243 cd & ' itl',itl,' itl1',itl1
8246 s1=dip(3,jj,i)*dip(3,kk,k)
8248 s1=dip(2,jj,j)*dip(2,kk,l)
8251 call matvec2(AECA(1,1,imat),Ub2(1,k),auxvec(1))
8252 s2=0.5d0*scalar2(Ub2(1,i),auxvec(1))
8254 call matvec2(ADtEA1(1,1,3-imat),b1(1,itj1),auxvec1(1))
8255 s3=-0.5d0*scalar2(b1(1,itj),auxvec1(1))
8257 call matvec2(ADtEA1(1,1,3-imat),b1(1,itl1),auxvec1(1))
8258 s3=-0.5d0*scalar2(b1(1,itl),auxvec1(1))
8260 call transpose2(EUg(1,1,k),auxmat(1,1))
8261 call matmat2(AECA(1,1,imat),auxmat(1,1),pizda(1,1))
8262 vv(1)=pizda(1,1)-pizda(2,2)
8263 vv(2)=pizda(2,1)+pizda(1,2)
8264 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
8265 cd write (2,*) 'eello6_graph4:','s1',s1,' s2',s2,' s3',s3,' s4',s4
8267 eello6_graph4=-(s1+s2+s3+s4)
8269 eello6_graph4=-(s2+s3+s4)
8271 C Derivatives in gamma(i-1)
8275 s1=dipderg(2,jj,i)*dip(3,kk,k)
8277 s1=dipderg(4,jj,j)*dip(2,kk,l)
8280 s2=0.5d0*scalar2(Ub2der(1,i),auxvec(1))
8282 call matvec2(ADtEA1derg(1,1,1,3-imat),b1(1,itj1),auxvec1(1))
8283 s3=-0.5d0*scalar2(b1(1,itj),auxvec1(1))
8285 call matvec2(ADtEA1derg(1,1,1,3-imat),b1(1,itl1),auxvec1(1))
8286 s3=-0.5d0*scalar2(b1(1,itl),auxvec1(1))
8288 s4=0.25d0*scalar2(vv(1),Dtobr2der(1,i))
8289 if (wturn6.gt.0.0d0 .and. k.eq.l+4 .and. i.eq.j+2) then
8290 cd write (2,*) 'turn6 derivatives'
8292 gel_loc_turn6(i-1)=gel_loc_turn6(i-1)-ekont*(s1+s2+s3+s4)
8294 gel_loc_turn6(i-1)=gel_loc_turn6(i-1)-ekont*(s2+s3+s4)
8298 g_corr6_loc(i-1)=g_corr6_loc(i-1)-ekont*(s1+s2+s3+s4)
8300 g_corr6_loc(i-1)=g_corr6_loc(i-1)-ekont*(s2+s3+s4)
8304 C Derivatives in gamma(k-1)
8307 s1=dip(3,jj,i)*dipderg(2,kk,k)
8309 s1=dip(2,jj,j)*dipderg(4,kk,l)
8312 call matvec2(AECA(1,1,imat),Ub2der(1,k),auxvec1(1))
8313 s2=0.5d0*scalar2(Ub2(1,i),auxvec1(1))
8315 call matvec2(ADtEA1derg(1,1,2,3-imat),b1(1,itj1),auxvec1(1))
8316 s3=-0.5d0*scalar2(b1(1,itj),auxvec1(1))
8318 call matvec2(ADtEA1derg(1,1,2,3-imat),b1(1,itl1),auxvec1(1))
8319 s3=-0.5d0*scalar2(b1(1,itl),auxvec1(1))
8321 call transpose2(EUgder(1,1,k),auxmat1(1,1))
8322 call matmat2(AECA(1,1,imat),auxmat1(1,1),pizda(1,1))
8323 vv(1)=pizda(1,1)-pizda(2,2)
8324 vv(2)=pizda(2,1)+pizda(1,2)
8325 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
8326 if (wturn6.gt.0.0d0 .and. k.eq.l+4 .and. i.eq.j+2) then
8328 gel_loc_turn6(k-1)=gel_loc_turn6(k-1)-ekont*(s1+s2+s3+s4)
8330 gel_loc_turn6(k-1)=gel_loc_turn6(k-1)-ekont*(s2+s3+s4)
8334 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s1+s2+s3+s4)
8336 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s2+s3+s4)
8339 C Derivatives in gamma(j-1) or gamma(l-1)
8340 if (l.eq.j+1 .and. l.gt.1) then
8341 call matvec2(AECAderg(1,1,imat),Ub2(1,k),auxvec(1))
8342 s2=0.5d0*scalar2(Ub2(1,i),auxvec(1))
8343 call matmat2(AECAderg(1,1,imat),auxmat(1,1),pizda(1,1))
8344 vv(1)=pizda(1,1)-pizda(2,2)
8345 vv(2)=pizda(2,1)+pizda(1,2)
8346 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
8347 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*(s2+s4)
8348 else if (j.gt.1) then
8349 call matvec2(AECAderg(1,1,imat),Ub2(1,k),auxvec(1))
8350 s2=0.5d0*scalar2(Ub2(1,i),auxvec(1))
8351 call matmat2(AECAderg(1,1,imat),auxmat(1,1),pizda(1,1))
8352 vv(1)=pizda(1,1)-pizda(2,2)
8353 vv(2)=pizda(2,1)+pizda(1,2)
8354 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
8355 if (wturn6.gt.0.0d0 .and. k.eq.l+4 .and. i.eq.j+2) then
8356 gel_loc_turn6(j-1)=gel_loc_turn6(j-1)-ekont*(s2+s4)
8358 g_corr6_loc(j-1)=g_corr6_loc(j-1)-ekont*(s2+s4)
8361 C Cartesian derivatives.
8368 s1=dipderx(lll,kkk,3,jj,i)*dip(3,kk,k)
8370 s1=dipderx(lll,kkk,2,jj,j)*dip(2,kk,l)
8374 s1=dip(3,jj,i)*dipderx(lll,kkk,3,kk,k)
8376 s1=dip(2,jj,j)*dipderx(lll,kkk,2,kk,l)
8380 call matvec2(AECAderx(1,1,lll,kkk,iii,imat),Ub2(1,k),
8382 s2=0.5d0*scalar2(Ub2(1,i),auxvec(1))
8384 call matvec2(ADtEA1derx(1,1,lll,kkk,iii,3-imat),
8385 & b1(1,itj1),auxvec(1))
8386 s3=-0.5d0*scalar2(b1(1,itj),auxvec(1))
8388 call matvec2(ADtEA1derx(1,1,lll,kkk,iii,3-imat),
8389 & b1(1,itl1),auxvec(1))
8390 s3=-0.5d0*scalar2(b1(1,itl),auxvec(1))
8392 call matmat2(AECAderx(1,1,lll,kkk,iii,imat),auxmat(1,1),
8394 vv(1)=pizda(1,1)-pizda(2,2)
8395 vv(2)=pizda(2,1)+pizda(1,2)
8396 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
8398 if (wturn6.gt.0.0d0 .and. k.eq.l+4 .and. i.eq.j+2) then
8400 derx_turn(lll,kkk,3-iii)=derx_turn(lll,kkk,3-iii)
8403 derx_turn(lll,kkk,3-iii)=derx_turn(lll,kkk,3-iii)
8406 derx_turn(lll,kkk,iii)=derx_turn(lll,kkk,iii)-s3
8409 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-(s1+s2+s4)
8411 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-(s2+s4)
8413 derx(lll,kkk,iii)=derx(lll,kkk,iii)-s3
8417 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s1+s2+s4)
8419 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s2+s4)
8422 derx(lll,kkk,iii)=derx(lll,kkk,iii)-s3
8424 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-s3
8432 c----------------------------------------------------------------------------
8433 double precision function eello_turn6(i,jj,kk)
8434 implicit real*8 (a-h,o-z)
8435 include 'DIMENSIONS'
8436 include 'COMMON.IOUNITS'
8437 include 'COMMON.CHAIN'
8438 include 'COMMON.DERIV'
8439 include 'COMMON.INTERACT'
8440 include 'COMMON.CONTACTS'
8441 include 'COMMON.TORSION'
8442 include 'COMMON.VAR'
8443 include 'COMMON.GEO'
8444 double precision vtemp1(2),vtemp2(2),vtemp3(2),vtemp4(2),
8445 & atemp(2,2),auxmat(2,2),achuj_temp(2,2),gtemp(2,2),gvec(2),
8447 double precision vtemp1d(2),vtemp2d(2),vtemp3d(2),vtemp4d(2),
8448 & atempd(2,2),auxmatd(2,2),achuj_tempd(2,2),gtempd(2,2),gvecd(2)
8449 C 4/7/01 AL Components s1, s8, and s13 were removed, because they pertain to
8450 C the respective energy moment and not to the cluster cumulant.
8459 iti=itortyp(itype(i))
8460 itk=itortyp(itype(k))
8461 itk1=itortyp(itype(k+1))
8462 itl=itortyp(itype(l))
8463 itj=itortyp(itype(j))
8464 cd write (2,*) 'itk',itk,' itk1',itk1,' itl',itl,' itj',itj
8465 cd write (2,*) 'i',i,' k',k,' j',j,' l',l
8466 cd if (i.ne.1 .or. j.ne.3 .or. k.ne.2 .or. l.ne.4) then
8471 cd & 'EELLO6: Contacts have occurred for peptide groups',i,j,
8473 cd call checkint_turn6(i,jj,kk,eel_turn6_num)
8477 derx_turn(lll,kkk,iii)=0.0d0
8484 eello6_5=eello6_graph4(l,k,j,i,kk,jj,2,.true.)
8486 cd write (2,*) 'eello6_5',eello6_5
8488 call transpose2(AEA(1,1,1),auxmat(1,1))
8489 call matmat2(EUg(1,1,i+1),auxmat(1,1),auxmat(1,1))
8490 ss1=scalar2(Ub2(1,i+2),b1(1,itl))
8491 s1 = (auxmat(1,1)+auxmat(2,2))*ss1
8493 call matvec2(EUg(1,1,i+2),b1(1,itl),vtemp1(1))
8494 call matvec2(AEA(1,1,1),vtemp1(1),vtemp1(1))
8495 s2 = scalar2(b1(1,itk),vtemp1(1))
8497 call transpose2(AEA(1,1,2),atemp(1,1))
8498 call matmat2(atemp(1,1),EUg(1,1,i+4),atemp(1,1))
8499 call matvec2(Ug2(1,1,i+2),dd(1,1,itk1),vtemp2(1))
8500 s8 = -(atemp(1,1)+atemp(2,2))*scalar2(cc(1,1,itl),vtemp2(1))
8502 call matmat2(EUg(1,1,i+3),AEA(1,1,2),auxmat(1,1))
8503 call matvec2(auxmat(1,1),Ub2(1,i+4),vtemp3(1))
8504 s12 = scalar2(Ub2(1,i+2),vtemp3(1))
8506 call transpose2(a_chuj(1,1,kk,i+1),achuj_temp(1,1))
8507 call matmat2(achuj_temp(1,1),EUg(1,1,i+2),gtemp(1,1))
8508 call matmat2(gtemp(1,1),EUg(1,1,i+3),gtemp(1,1))
8509 call matvec2(a_chuj(1,1,jj,i),Ub2(1,i+4),vtemp4(1))
8510 ss13 = scalar2(b1(1,itk),vtemp4(1))
8511 s13 = (gtemp(1,1)+gtemp(2,2))*ss13
8513 c write (2,*) 's1,s2,s8,s12,s13',s1,s2,s8,s12,s13
8519 eel_turn6 = eello6_5 - 0.5d0*(s1+s2+s12+s8+s13)
8520 C Derivatives in gamma(i+2)
8524 call transpose2(AEA(1,1,1),auxmatd(1,1))
8525 call matmat2(EUgder(1,1,i+1),auxmatd(1,1),auxmatd(1,1))
8526 s1d = (auxmatd(1,1)+auxmatd(2,2))*ss1
8527 call transpose2(AEAderg(1,1,2),atempd(1,1))
8528 call matmat2(atempd(1,1),EUg(1,1,i+4),atempd(1,1))
8529 s8d = -(atempd(1,1)+atempd(2,2))*scalar2(cc(1,1,itl),vtemp2(1))
8531 call matmat2(EUg(1,1,i+3),AEAderg(1,1,2),auxmatd(1,1))
8532 call matvec2(auxmatd(1,1),Ub2(1,i+4),vtemp3d(1))
8533 s12d = scalar2(Ub2(1,i+2),vtemp3d(1))
8539 gel_loc_turn6(i)=gel_loc_turn6(i)-0.5d0*ekont*(s1d+s8d+s12d)
8540 C Derivatives in gamma(i+3)
8542 call transpose2(AEA(1,1,1),auxmatd(1,1))
8543 call matmat2(EUg(1,1,i+1),auxmatd(1,1),auxmatd(1,1))
8544 ss1d=scalar2(Ub2der(1,i+2),b1(1,itl))
8545 s1d = (auxmatd(1,1)+auxmatd(2,2))*ss1d
8547 call matvec2(EUgder(1,1,i+2),b1(1,itl),vtemp1d(1))
8548 call matvec2(AEA(1,1,1),vtemp1d(1),vtemp1d(1))
8549 s2d = scalar2(b1(1,itk),vtemp1d(1))
8551 call matvec2(Ug2der(1,1,i+2),dd(1,1,itk1),vtemp2d(1))
8552 s8d = -(atemp(1,1)+atemp(2,2))*scalar2(cc(1,1,itl),vtemp2d(1))
8554 s12d = scalar2(Ub2der(1,i+2),vtemp3(1))
8556 call matmat2(achuj_temp(1,1),EUgder(1,1,i+2),gtempd(1,1))
8557 call matmat2(gtempd(1,1),EUg(1,1,i+3),gtempd(1,1))
8558 s13d = (gtempd(1,1)+gtempd(2,2))*ss13
8566 gel_loc_turn6(i+1)=gel_loc_turn6(i+1)
8567 & -0.5d0*ekont*(s1d+s2d+s8d+s12d+s13d)
8569 gel_loc_turn6(i+1)=gel_loc_turn6(i+1)
8570 & -0.5d0*ekont*(s2d+s12d)
8572 C Derivatives in gamma(i+4)
8573 call matmat2(EUgder(1,1,i+3),AEA(1,1,2),auxmatd(1,1))
8574 call matvec2(auxmatd(1,1),Ub2(1,i+4),vtemp3d(1))
8575 s12d = scalar2(Ub2(1,i+2),vtemp3d(1))
8577 call matmat2(achuj_temp(1,1),EUg(1,1,i+2),gtempd(1,1))
8578 call matmat2(gtempd(1,1),EUgder(1,1,i+3),gtempd(1,1))
8579 s13d = (gtempd(1,1)+gtempd(2,2))*ss13
8587 gel_loc_turn6(i+2)=gel_loc_turn6(i+2)-0.5d0*ekont*(s12d+s13d)
8589 gel_loc_turn6(i+2)=gel_loc_turn6(i+2)-0.5d0*ekont*(s12d)
8591 C Derivatives in gamma(i+5)
8593 call transpose2(AEAderg(1,1,1),auxmatd(1,1))
8594 call matmat2(EUg(1,1,i+1),auxmatd(1,1),auxmatd(1,1))
8595 s1d = (auxmatd(1,1)+auxmatd(2,2))*ss1
8597 call matvec2(EUg(1,1,i+2),b1(1,itl),vtemp1d(1))
8598 call matvec2(AEAderg(1,1,1),vtemp1d(1),vtemp1d(1))
8599 s2d = scalar2(b1(1,itk),vtemp1d(1))
8601 call transpose2(AEA(1,1,2),atempd(1,1))
8602 call matmat2(atempd(1,1),EUgder(1,1,i+4),atempd(1,1))
8603 s8d = -(atempd(1,1)+atempd(2,2))*scalar2(cc(1,1,itl),vtemp2(1))
8605 call matvec2(auxmat(1,1),Ub2der(1,i+4),vtemp3d(1))
8606 s12d = scalar2(Ub2(1,i+2),vtemp3d(1))
8608 call matvec2(a_chuj(1,1,jj,i),Ub2der(1,i+4),vtemp4d(1))
8609 ss13d = scalar2(b1(1,itk),vtemp4d(1))
8610 s13d = (gtemp(1,1)+gtemp(2,2))*ss13d
8618 gel_loc_turn6(i+3)=gel_loc_turn6(i+3)
8619 & -0.5d0*ekont*(s1d+s2d+s8d+s12d+s13d)
8621 gel_loc_turn6(i+3)=gel_loc_turn6(i+3)
8622 & -0.5d0*ekont*(s2d+s12d)
8624 C Cartesian derivatives
8629 call transpose2(AEAderx(1,1,lll,kkk,iii,1),auxmatd(1,1))
8630 call matmat2(EUg(1,1,i+1),auxmatd(1,1),auxmatd(1,1))
8631 s1d = (auxmatd(1,1)+auxmatd(2,2))*ss1
8633 call matvec2(EUg(1,1,i+2),b1(1,itl),vtemp1(1))
8634 call matvec2(AEAderx(1,1,lll,kkk,iii,1),vtemp1(1),
8636 s2d = scalar2(b1(1,itk),vtemp1d(1))
8638 call transpose2(AEAderx(1,1,lll,kkk,iii,2),atempd(1,1))
8639 call matmat2(atempd(1,1),EUg(1,1,i+4),atempd(1,1))
8640 s8d = -(atempd(1,1)+atempd(2,2))*
8641 & scalar2(cc(1,1,itl),vtemp2(1))
8643 call matmat2(EUg(1,1,i+3),AEAderx(1,1,lll,kkk,iii,2),
8645 call matvec2(auxmatd(1,1),Ub2(1,i+4),vtemp3d(1))
8646 s12d = scalar2(Ub2(1,i+2),vtemp3d(1))
8653 derx_turn(lll,kkk,iii) = derx_turn(lll,kkk,iii)
8656 derx_turn(lll,kkk,iii) = derx_turn(lll,kkk,iii)
8660 derx_turn(lll,kkk,3-iii) = derx_turn(lll,kkk,3-iii)
8661 & - 0.5d0*(s8d+s12d)
8663 derx_turn(lll,kkk,3-iii) = derx_turn(lll,kkk,3-iii)
8672 call transpose2(a_chuj_der(1,1,lll,kkk,kk,i+1),
8674 call matmat2(achuj_tempd(1,1),EUg(1,1,i+2),gtempd(1,1))
8675 call matmat2(gtempd(1,1),EUg(1,1,i+3),gtempd(1,1))
8676 s13d=(gtempd(1,1)+gtempd(2,2))*ss13
8677 derx_turn(lll,kkk,2) = derx_turn(lll,kkk,2)-0.5d0*s13d
8678 call matvec2(a_chuj_der(1,1,lll,kkk,jj,i),Ub2(1,i+4),
8680 ss13d = scalar2(b1(1,itk),vtemp4d(1))
8681 s13d = (gtemp(1,1)+gtemp(2,2))*ss13d
8682 derx_turn(lll,kkk,1) = derx_turn(lll,kkk,1)-0.5d0*s13d
8686 cd write(iout,*) 'eel6_turn6',eel_turn6,' eel_turn6_num',
8687 cd & 16*eel_turn6_num
8689 if (j.lt.nres-1) then
8696 if (l.lt.nres-1) then
8704 cgrad ggg1(ll)=eel_turn6*g_contij(ll,1)
8705 cgrad ggg2(ll)=eel_turn6*g_contij(ll,2)
8706 cgrad ghalf=0.5d0*ggg1(ll)
8708 gturn6ij=eel_turn6*g_contij(ll,1)+ekont*derx_turn(ll,1,1)
8709 gturn6kl=eel_turn6*g_contij(ll,2)+ekont*derx_turn(ll,1,2)
8710 gcorr6_turn(ll,i)=gcorr6_turn(ll,i)!+ghalf
8711 & +ekont*derx_turn(ll,2,1)
8712 gcorr6_turn(ll,i+1)=gcorr6_turn(ll,i+1)+ekont*derx_turn(ll,3,1)
8713 gcorr6_turn(ll,j)=gcorr6_turn(ll,j)!+ghalf
8714 & +ekont*derx_turn(ll,4,1)
8715 gcorr6_turn(ll,j1)=gcorr6_turn(ll,j1)+ekont*derx_turn(ll,5,1)
8716 gcorr6_turn_long(ll,j)=gcorr6_turn_long(ll,j)+gturn6ij
8717 gcorr6_turn_long(ll,i)=gcorr6_turn_long(ll,i)-gturn6ij
8718 cgrad ghalf=0.5d0*ggg2(ll)
8720 gcorr6_turn(ll,k)=gcorr6_turn(ll,k)!+ghalf
8721 & +ekont*derx_turn(ll,2,2)
8722 gcorr6_turn(ll,k+1)=gcorr6_turn(ll,k+1)+ekont*derx_turn(ll,3,2)
8723 gcorr6_turn(ll,l)=gcorr6_turn(ll,l)!+ghalf
8724 & +ekont*derx_turn(ll,4,2)
8725 gcorr6_turn(ll,l1)=gcorr6_turn(ll,l1)+ekont*derx_turn(ll,5,2)
8726 gcorr6_turn_long(ll,l)=gcorr6_turn_long(ll,l)+gturn6kl
8727 gcorr6_turn_long(ll,k)=gcorr6_turn_long(ll,k)-gturn6kl
8732 cgrad gcorr6_turn(ll,m)=gcorr6_turn(ll,m)+ggg1(ll)
8737 cgrad gcorr6_turn(ll,m)=gcorr6_turn(ll,m)+ggg2(ll)
8743 cgrad gcorr6_turn(ll,m)=gcorr6_turn(ll,m)+ekont*derx_turn(ll,1,1)
8748 cgrad gcorr6_turn(ll,m)=gcorr6_turn(ll,m)+ekont*derx_turn(ll,1,2)
8752 cd write (2,*) iii,g_corr6_loc(iii)
8754 eello_turn6=ekont*eel_turn6
8755 cd write (2,*) 'ekont',ekont
8756 cd write (2,*) 'eel_turn6',ekont*eel_turn6
8760 C-----------------------------------------------------------------------------
8761 double precision function scalar(u,v)
8762 !DIR$ INLINEALWAYS scalar
8764 cDEC$ ATTRIBUTES FORCEINLINE::scalar
8767 double precision u(3),v(3)
8768 cd double precision sc
8776 scalar=u(1)*v(1)+u(2)*v(2)+u(3)*v(3)
8779 crc-------------------------------------------------
8780 SUBROUTINE MATVEC2(A1,V1,V2)
8781 !DIR$ INLINEALWAYS MATVEC2
8783 cDEC$ ATTRIBUTES FORCEINLINE::MATVEC2
8785 implicit real*8 (a-h,o-z)
8786 include 'DIMENSIONS'
8787 DIMENSION A1(2,2),V1(2),V2(2)
8791 c 3 VI=VI+A1(I,K)*V1(K)
8795 vaux1=a1(1,1)*v1(1)+a1(1,2)*v1(2)
8796 vaux2=a1(2,1)*v1(1)+a1(2,2)*v1(2)
8801 C---------------------------------------
8802 SUBROUTINE MATMAT2(A1,A2,A3)
8804 cDEC$ ATTRIBUTES FORCEINLINE::MATMAT2
8806 implicit real*8 (a-h,o-z)
8807 include 'DIMENSIONS'
8808 DIMENSION A1(2,2),A2(2,2),A3(2,2)
8809 c DIMENSION AI3(2,2)
8813 c A3IJ=A3IJ+A1(I,K)*A2(K,J)
8819 ai3_11=a1(1,1)*a2(1,1)+a1(1,2)*a2(2,1)
8820 ai3_12=a1(1,1)*a2(1,2)+a1(1,2)*a2(2,2)
8821 ai3_21=a1(2,1)*a2(1,1)+a1(2,2)*a2(2,1)
8822 ai3_22=a1(2,1)*a2(1,2)+a1(2,2)*a2(2,2)
8830 c-------------------------------------------------------------------------
8831 double precision function scalar2(u,v)
8832 !DIR$ INLINEALWAYS scalar2
8834 double precision u(2),v(2)
8837 scalar2=u(1)*v(1)+u(2)*v(2)
8841 C-----------------------------------------------------------------------------
8843 subroutine transpose2(a,at)
8844 !DIR$ INLINEALWAYS transpose2
8846 cDEC$ ATTRIBUTES FORCEINLINE::transpose2
8849 double precision a(2,2),at(2,2)
8856 c--------------------------------------------------------------------------
8857 subroutine transpose(n,a,at)
8860 double precision a(n,n),at(n,n)
8868 C---------------------------------------------------------------------------
8869 subroutine prodmat3(a1,a2,kk,transp,prod)
8870 !DIR$ INLINEALWAYS prodmat3
8872 cDEC$ ATTRIBUTES FORCEINLINE::prodmat3
8876 double precision a1(2,2),a2(2,2),a2t(2,2),kk(2,2),prod(2,2)
8878 crc double precision auxmat(2,2),prod_(2,2)
8881 crc call transpose2(kk(1,1),auxmat(1,1))
8882 crc call matmat2(a1(1,1),auxmat(1,1),auxmat(1,1))
8883 crc call matmat2(auxmat(1,1),a2(1,1),prod_(1,1))
8885 prod(1,1)=(a1(1,1)*kk(1,1)+a1(1,2)*kk(1,2))*a2(1,1)
8886 & +(a1(1,1)*kk(2,1)+a1(1,2)*kk(2,2))*a2(2,1)
8887 prod(1,2)=(a1(1,1)*kk(1,1)+a1(1,2)*kk(1,2))*a2(1,2)
8888 & +(a1(1,1)*kk(2,1)+a1(1,2)*kk(2,2))*a2(2,2)
8889 prod(2,1)=(a1(2,1)*kk(1,1)+a1(2,2)*kk(1,2))*a2(1,1)
8890 & +(a1(2,1)*kk(2,1)+a1(2,2)*kk(2,2))*a2(2,1)
8891 prod(2,2)=(a1(2,1)*kk(1,1)+a1(2,2)*kk(1,2))*a2(1,2)
8892 & +(a1(2,1)*kk(2,1)+a1(2,2)*kk(2,2))*a2(2,2)
8895 crc call matmat2(a1(1,1),kk(1,1),auxmat(1,1))
8896 crc call matmat2(auxmat(1,1),a2(1,1),prod_(1,1))
8898 prod(1,1)=(a1(1,1)*kk(1,1)+a1(1,2)*kk(2,1))*a2(1,1)
8899 & +(a1(1,1)*kk(1,2)+a1(1,2)*kk(2,2))*a2(2,1)
8900 prod(1,2)=(a1(1,1)*kk(1,1)+a1(1,2)*kk(2,1))*a2(1,2)
8901 & +(a1(1,1)*kk(1,2)+a1(1,2)*kk(2,2))*a2(2,2)
8902 prod(2,1)=(a1(2,1)*kk(1,1)+a1(2,2)*kk(2,1))*a2(1,1)
8903 & +(a1(2,1)*kk(1,2)+a1(2,2)*kk(2,2))*a2(2,1)
8904 prod(2,2)=(a1(2,1)*kk(1,1)+a1(2,2)*kk(2,1))*a2(1,2)
8905 & +(a1(2,1)*kk(1,2)+a1(2,2)*kk(2,2))*a2(2,2)
8908 c call transpose2(a2(1,1),a2t(1,1))
8911 crc print *,((prod_(i,j),i=1,2),j=1,2)
8912 crc print *,((prod(i,j),i=1,2),j=1,2)