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 Here are the energies showed per procesor if the are more processors
300 c per molecule then we sum it up in sum_energy subroutine
301 c print *," Processor",myrank," calls SUM_ENERGY"
302 call sum_energy(energia,.true.)
303 c print *," Processor",myrank," left SUM_ENERGY"
305 time_sumene=time_sumene+MPI_Wtime()-time00
309 c-------------------------------------------------------------------------------
310 subroutine sum_energy(energia,reduce)
311 implicit real*8 (a-h,o-z)
316 cMS$ATTRIBUTES C :: proc_proc
322 include 'COMMON.SETUP'
323 include 'COMMON.IOUNITS'
324 double precision energia(0:n_ene),enebuff(0:n_ene+1)
325 include 'COMMON.FFIELD'
326 include 'COMMON.DERIV'
327 include 'COMMON.INTERACT'
328 include 'COMMON.SBRIDGE'
329 include 'COMMON.CHAIN'
331 include 'COMMON.CONTROL'
332 include 'COMMON.TIME1'
335 if (nfgtasks.gt.1 .and. reduce) then
337 write (iout,*) "energies before REDUCE"
338 call enerprint(energia)
342 enebuff(i)=energia(i)
345 call MPI_Barrier(FG_COMM,IERR)
346 time_barrier_e=time_barrier_e+MPI_Wtime()-time00
348 call MPI_Reduce(enebuff(0),energia(0),n_ene+1,
349 & MPI_DOUBLE_PRECISION,MPI_SUM,king,FG_COMM,IERR)
351 write (iout,*) "energies after REDUCE"
352 call enerprint(energia)
355 time_Reduce=time_Reduce+MPI_Wtime()-time00
357 if (fg_rank.eq.0) then
361 evdw2=energia(2)+energia(18)
377 eello_turn3=energia(8)
378 eello_turn4=energia(9)
385 edihcnstr=energia(19)
390 etot=wsc*evdw+wscp*evdw2+welec*ees+wvdwpp*evdw1
391 & +wang*ebe+wtor*etors+wscloc*escloc
392 & +wstrain*ehpb+wcorr*ecorr+wcorr5*ecorr5
393 & +wcorr6*ecorr6+wturn4*eello_turn4+wturn3*eello_turn3
394 & +wturn6*eturn6+wel_loc*eel_loc+edihcnstr+wtor_d*etors_d
395 & +wbond*estr+Uconst+wsccor*esccor
397 etot=wsc*evdw+wscp*evdw2+welec*(ees+evdw1)
398 & +wang*ebe+wtor*etors+wscloc*escloc
399 & +wstrain*ehpb+wcorr*ecorr+wcorr5*ecorr5
400 & +wcorr6*ecorr6+wturn4*eello_turn4+wturn3*eello_turn3
401 & +wturn6*eturn6+wel_loc*eel_loc+edihcnstr+wtor_d*etors_d
402 & +wbond*estr+Uconst+wsccor*esccor
408 if (isnan(etot).ne.0) energia(0)=1.0d+99
410 if (isnan(etot)) energia(0)=1.0d+99
415 idumm=proc_proc(etot,i)
417 call proc_proc(etot,i)
419 if(i.eq.1)energia(0)=1.0d+99
426 c-------------------------------------------------------------------------------
427 subroutine sum_gradient
428 implicit real*8 (a-h,o-z)
433 cMS$ATTRIBUTES C :: proc_proc
438 double precision gradbufc(3,maxres),gradbufx(3,maxres),
439 & glocbuf(4*maxres),gradbufc_sum(3,maxres),gloc_scbuf(3,maxres)
441 include 'COMMON.SETUP'
442 include 'COMMON.IOUNITS'
443 include 'COMMON.FFIELD'
444 include 'COMMON.DERIV'
445 include 'COMMON.INTERACT'
446 include 'COMMON.SBRIDGE'
447 include 'COMMON.CHAIN'
449 include 'COMMON.CONTROL'
450 include 'COMMON.TIME1'
451 include 'COMMON.MAXGRAD'
452 include 'COMMON.SCCOR'
457 write (iout,*) "sum_gradient gvdwc, gvdwx"
459 write (iout,'(i3,3f10.5,5x,3f10.5,5x,f10.5)')
460 & i,(gvdwx(j,i),j=1,3),(gvdwc(j,i),j=1,3)
465 C FG slaves call the following matching MPI_Bcast in ERGASTULUM
466 if (nfgtasks.gt.1 .and. fg_rank.eq.0)
467 & call MPI_Bcast(1,1,MPI_INTEGER,king,FG_COMM,IERROR)
470 C 9/29/08 AL Transform parts of gradients in site coordinates to the gradient
471 C in virtual-bond-vector coordinates
474 c write (iout,*) "gel_loc gel_loc_long and gel_loc_loc"
476 c write (iout,'(i5,3f10.5,2x,3f10.5,2x,f10.5)')
477 c & i,(gel_loc(j,i),j=1,3),(gel_loc_long(j,i),j=1,3),gel_loc_loc(i)
479 c write (iout,*) "gel_loc_tur3 gel_loc_turn4"
481 c write (iout,'(i5,3f10.5,2x,f10.5)')
482 c & i,(gcorr4_turn(j,i),j=1,3),gel_loc_turn4(i)
484 write (iout,*) "gradcorr5 gradcorr5_long gradcorr5_loc"
486 write (iout,'(i3,3f10.5,5x,3f10.5,5x,f10.5)')
487 & i,(gradcorr5(j,i),j=1,3),(gradcorr5_long(j,i),j=1,3),
495 gradbufc(j,i)=wsc*gvdwc(j,i)+
496 & wscp*(gvdwc_scp(j,i)+gvdwc_scpp(j,i))+
497 & welec*gelc_long(j,i)+wvdwpp*gvdwpp(j,i)+
498 & wel_loc*gel_loc_long(j,i)+
499 & wcorr*gradcorr_long(j,i)+
500 & wcorr5*gradcorr5_long(j,i)+
501 & wcorr6*gradcorr6_long(j,i)+
502 & wturn6*gcorr6_turn_long(j,i)+
509 gradbufc(j,i)=wsc*gvdwc(j,i)+
510 & wscp*(gvdwc_scp(j,i)+gvdwc_scpp(j,i))+
511 & welec*gelc_long(j,i)+
513 & wel_loc*gel_loc_long(j,i)+
514 & wcorr*gradcorr_long(j,i)+
515 & wcorr5*gradcorr5_long(j,i)+
516 & wcorr6*gradcorr6_long(j,i)+
517 & wturn6*gcorr6_turn_long(j,i)+
523 if (nfgtasks.gt.1) then
526 write (iout,*) "gradbufc before allreduce"
528 write (iout,'(i3,3f10.5)') i,(gradbufc(j,i),j=1,3)
534 gradbufc_sum(j,i)=gradbufc(j,i)
537 c call MPI_AllReduce(gradbufc(1,1),gradbufc_sum(1,1),3*nres,
538 c & MPI_DOUBLE_PRECISION,MPI_SUM,FG_COMM,IERR)
539 c time_reduce=time_reduce+MPI_Wtime()-time00
541 c write (iout,*) "gradbufc_sum after allreduce"
543 c write (iout,'(i3,3f10.5)') i,(gradbufc_sum(j,i),j=1,3)
548 c time_allreduce=time_allreduce+MPI_Wtime()-time00
556 write (iout,*) "igrad_start",igrad_start," igrad_end",igrad_end
557 write (iout,*) (i," jgrad_start",jgrad_start(i),
558 & " jgrad_end ",jgrad_end(i),
559 & i=igrad_start,igrad_end)
562 c Obsolete and inefficient code; we can make the effort O(n) and, therefore,
563 c do not parallelize this part.
565 c do i=igrad_start,igrad_end
566 c do j=jgrad_start(i),jgrad_end(i)
568 c gradbufc(k,i)=gradbufc(k,i)+gradbufc_sum(k,j)
573 gradbufc(j,nres-1)=gradbufc_sum(j,nres)
577 gradbufc(j,i)=gradbufc(j,i+1)+gradbufc_sum(j,i+1)
581 write (iout,*) "gradbufc after summing"
583 write (iout,'(i3,3f10.5)') i,(gradbufc(j,i),j=1,3)
590 write (iout,*) "gradbufc"
592 write (iout,'(i3,3f10.5)') i,(gradbufc(j,i),j=1,3)
598 gradbufc_sum(j,i)=gradbufc(j,i)
603 gradbufc(j,nres-1)=gradbufc_sum(j,nres)
607 gradbufc(j,i)=gradbufc(j,i+1)+gradbufc_sum(j,i+1)
612 c gradbufc(k,i)=0.0d0
616 c gradbufc(k,i)=gradbufc(k,i)+gradbufc(k,j)
621 write (iout,*) "gradbufc after summing"
623 write (iout,'(i3,3f10.5)') i,(gradbufc(j,i),j=1,3)
631 gradbufc(k,nres)=0.0d0
636 gradc(j,i,icg)=gradbufc(j,i)+welec*gelc(j,i)+
637 & wel_loc*gel_loc(j,i)+
638 & 0.5d0*(wscp*gvdwc_scpp(j,i)+
639 & welec*gelc_long(j,i)+wvdwpp*gvdwpp(j,i)+
640 & wel_loc*gel_loc_long(j,i)+
641 & wcorr*gradcorr_long(j,i)+
642 & wcorr5*gradcorr5_long(j,i)+
643 & wcorr6*gradcorr6_long(j,i)+
644 & wturn6*gcorr6_turn_long(j,i))+
646 & wcorr*gradcorr(j,i)+
647 & wturn3*gcorr3_turn(j,i)+
648 & wturn4*gcorr4_turn(j,i)+
649 & wcorr5*gradcorr5(j,i)+
650 & wcorr6*gradcorr6(j,i)+
651 & wturn6*gcorr6_turn(j,i)+
652 & wsccor*gsccorc(j,i)
653 & +wscloc*gscloc(j,i)
655 gradc(j,i,icg)=gradbufc(j,i)+welec*gelc(j,i)+
656 & wel_loc*gel_loc(j,i)+
657 & 0.5d0*(wscp*gvdwc_scpp(j,i)+
658 & welec*gelc_long(j,i)
659 & wel_loc*gel_loc_long(j,i)+
660 & wcorr*gcorr_long(j,i)+
661 & wcorr5*gradcorr5_long(j,i)+
662 & wcorr6*gradcorr6_long(j,i)+
663 & wturn6*gcorr6_turn_long(j,i))+
665 & wcorr*gradcorr(j,i)+
666 & wturn3*gcorr3_turn(j,i)+
667 & wturn4*gcorr4_turn(j,i)+
668 & wcorr5*gradcorr5(j,i)+
669 & wcorr6*gradcorr6(j,i)+
670 & wturn6*gcorr6_turn(j,i)+
671 & wsccor*gsccorc(j,i)
672 & +wscloc*gscloc(j,i)
674 gradx(j,i,icg)=wsc*gvdwx(j,i)+wscp*gradx_scp(j,i)+
676 & wstrain*ghpbx(j,i)+wcorr*gradxorr(j,i)+
677 & wsccor*gsccorx(j,i)
678 & +wscloc*gsclocx(j,i)
682 write (iout,*) "gloc before adding corr"
684 write (iout,*) i,gloc(i,icg)
688 gloc(i,icg)=gloc(i,icg)+wcorr*gcorr_loc(i)
689 & +wcorr5*g_corr5_loc(i)
690 & +wcorr6*g_corr6_loc(i)
691 & +wturn4*gel_loc_turn4(i)
692 & +wturn3*gel_loc_turn3(i)
693 & +wturn6*gel_loc_turn6(i)
694 & +wel_loc*gel_loc_loc(i)
697 write (iout,*) "gloc after adding corr"
699 write (iout,*) i,gloc(i,icg)
703 if (nfgtasks.gt.1) then
706 gradbufc(j,i)=gradc(j,i,icg)
707 gradbufx(j,i)=gradx(j,i,icg)
711 glocbuf(i)=gloc(i,icg)
715 write (iout,*) "gloc_sc before reduce"
718 write (iout,*) i,j,gloc_sc(j,i,icg)
725 gloc_scbuf(j,i)=gloc_sc(j,i,icg)
729 call MPI_Barrier(FG_COMM,IERR)
730 time_barrier_g=time_barrier_g+MPI_Wtime()-time00
732 call MPI_Reduce(gradbufc(1,1),gradc(1,1,icg),3*nres,
733 & MPI_DOUBLE_PRECISION,MPI_SUM,king,FG_COMM,IERR)
734 call MPI_Reduce(gradbufx(1,1),gradx(1,1,icg),3*nres,
735 & MPI_DOUBLE_PRECISION,MPI_SUM,king,FG_COMM,IERR)
736 call MPI_Reduce(glocbuf(1),gloc(1,icg),4*nres,
737 & MPI_DOUBLE_PRECISION,MPI_SUM,king,FG_COMM,IERR)
738 time_reduce=time_reduce+MPI_Wtime()-time00
739 call MPI_Reduce(gloc_scbuf(1,1),gloc_sc(1,1,icg),3*nres,
740 & MPI_DOUBLE_PRECISION,MPI_SUM,king,FG_COMM,IERR)
741 time_reduce=time_reduce+MPI_Wtime()-time00
744 write (iout,*) "gloc_sc after reduce"
747 write (iout,*) i,j,gloc_sc(j,i,icg)
753 write (iout,*) "gloc after reduce"
755 write (iout,*) i,gloc(i,icg)
760 if (gnorm_check) then
762 c Compute the maximum elements of the gradient
772 gcorr3_turn_max=0.0d0
773 gcorr4_turn_max=0.0d0
776 gcorr6_turn_max=0.0d0
786 gvdwc_norm=dsqrt(scalar(gvdwc(1,i),gvdwc(1,i)))
787 if (gvdwc_norm.gt.gvdwc_max) gvdwc_max=gvdwc_norm
788 gvdwc_scp_norm=dsqrt(scalar(gvdwc_scp(1,i),gvdwc_scp(1,i)))
789 if (gvdwc_scp_norm.gt.gvdwc_scp_max)
790 & gvdwc_scp_max=gvdwc_scp_norm
791 gelc_norm=dsqrt(scalar(gelc(1,i),gelc(1,i)))
792 if (gelc_norm.gt.gelc_max) gelc_max=gelc_norm
793 gvdwpp_norm=dsqrt(scalar(gvdwpp(1,i),gvdwpp(1,i)))
794 if (gvdwpp_norm.gt.gvdwpp_max) gvdwpp_max=gvdwpp_norm
795 gradb_norm=dsqrt(scalar(gradb(1,i),gradb(1,i)))
796 if (gradb_norm.gt.gradb_max) gradb_max=gradb_norm
797 ghpbc_norm=dsqrt(scalar(ghpbc(1,i),ghpbc(1,i)))
798 if (ghpbc_norm.gt.ghpbc_max) ghpbc_max=ghpbc_norm
799 gradcorr_norm=dsqrt(scalar(gradcorr(1,i),gradcorr(1,i)))
800 if (gradcorr_norm.gt.gradcorr_max) gradcorr_max=gradcorr_norm
801 gel_loc_norm=dsqrt(scalar(gel_loc(1,i),gel_loc(1,i)))
802 if (gel_loc_norm.gt.gel_loc_max) gel_loc_max=gel_loc_norm
803 gcorr3_turn_norm=dsqrt(scalar(gcorr3_turn(1,i),
805 if (gcorr3_turn_norm.gt.gcorr3_turn_max)
806 & gcorr3_turn_max=gcorr3_turn_norm
807 gcorr4_turn_norm=dsqrt(scalar(gcorr4_turn(1,i),
809 if (gcorr4_turn_norm.gt.gcorr4_turn_max)
810 & gcorr4_turn_max=gcorr4_turn_norm
811 gradcorr5_norm=dsqrt(scalar(gradcorr5(1,i),gradcorr5(1,i)))
812 if (gradcorr5_norm.gt.gradcorr5_max)
813 & gradcorr5_max=gradcorr5_norm
814 gradcorr6_norm=dsqrt(scalar(gradcorr6(1,i),gradcorr6(1,i)))
815 if (gradcorr6_norm.gt.gradcorr6_max) gcorr6_max=gradcorr6_norm
816 gcorr6_turn_norm=dsqrt(scalar(gcorr6_turn(1,i),
818 if (gcorr6_turn_norm.gt.gcorr6_turn_max)
819 & gcorr6_turn_max=gcorr6_turn_norm
820 gsccorr_norm=dsqrt(scalar(gsccorc(1,i),gsccorc(1,i)))
821 if (gsccorr_norm.gt.gsccorr_max) gsccorr_max=gsccorr_norm
822 gscloc_norm=dsqrt(scalar(gscloc(1,i),gscloc(1,i)))
823 if (gscloc_norm.gt.gscloc_max) gscloc_max=gscloc_norm
824 gvdwx_norm=dsqrt(scalar(gvdwx(1,i),gvdwx(1,i)))
825 if (gvdwx_norm.gt.gvdwx_max) gvdwx_max=gvdwx_norm
826 gradx_scp_norm=dsqrt(scalar(gradx_scp(1,i),gradx_scp(1,i)))
827 if (gradx_scp_norm.gt.gradx_scp_max)
828 & gradx_scp_max=gradx_scp_norm
829 ghpbx_norm=dsqrt(scalar(ghpbx(1,i),ghpbx(1,i)))
830 if (ghpbx_norm.gt.ghpbx_max) ghpbx_max=ghpbx_norm
831 gradxorr_norm=dsqrt(scalar(gradxorr(1,i),gradxorr(1,i)))
832 if (gradxorr_norm.gt.gradxorr_max) gradxorr_max=gradxorr_norm
833 gsccorrx_norm=dsqrt(scalar(gsccorx(1,i),gsccorx(1,i)))
834 if (gsccorrx_norm.gt.gsccorrx_max) gsccorrx_max=gsccorrx_norm
835 gsclocx_norm=dsqrt(scalar(gsclocx(1,i),gsclocx(1,i)))
836 if (gsclocx_norm.gt.gsclocx_max) gsclocx_max=gsclocx_norm
840 open(istat,file=statname,position="append")
842 open(istat,file=statname,access="append")
844 write (istat,'(1h#,21f10.2)') gvdwc_max,gvdwc_scp_max,
845 & gelc_max,gvdwpp_max,gradb_max,ghpbc_max,
846 & gradcorr_max,gel_loc_max,gcorr3_turn_max,gcorr4_turn_max,
847 & gradcorr5_max,gradcorr6_max,gcorr6_turn_max,gsccorc_max,
848 & gscloc_max,gvdwx_max,gradx_scp_max,ghpbx_max,gradxorr_max,
849 & gsccorx_max,gsclocx_max
851 if (gvdwc_max.gt.1.0d4) then
852 write (iout,*) "gvdwc gvdwx gradb gradbx"
854 write(iout,'(i5,4(3f10.2,5x))') i,(gvdwc(j,i),gvdwx(j,i),
855 & gradb(j,i),gradbx(j,i),j=1,3)
857 call pdbout(0.0d0,'cipiszcze',iout)
863 write (iout,*) "gradc gradx gloc"
865 write (iout,'(i5,3f10.5,5x,3f10.5,5x,f10.5)')
866 & i,(gradc(j,i,icg),j=1,3),(gradx(j,i,icg),j=1,3),gloc(i,icg)
870 time_sumgradient=time_sumgradient+MPI_Wtime()-time01
874 c-------------------------------------------------------------------------------
875 subroutine rescale_weights(t_bath)
876 implicit real*8 (a-h,o-z)
878 include 'COMMON.IOUNITS'
879 include 'COMMON.FFIELD'
880 include 'COMMON.SBRIDGE'
881 double precision kfac /2.4d0/
882 double precision x,x2,x3,x4,x5,licznik /1.12692801104297249644/
884 c facT=2*temp0/(t_bath+temp0)
885 if (rescale_mode.eq.0) then
891 else if (rescale_mode.eq.1) then
892 facT=kfac/(kfac-1.0d0+t_bath/temp0)
893 facT2=kfac**2/(kfac**2-1.0d0+(t_bath/temp0)**2)
894 facT3=kfac**3/(kfac**3-1.0d0+(t_bath/temp0)**3)
895 facT4=kfac**4/(kfac**4-1.0d0+(t_bath/temp0)**4)
896 facT5=kfac**5/(kfac**5-1.0d0+(t_bath/temp0)**5)
897 else if (rescale_mode.eq.2) then
903 facT=licznik/dlog(dexp(x)+dexp(-x))
904 facT2=licznik/dlog(dexp(x2)+dexp(-x2))
905 facT3=licznik/dlog(dexp(x3)+dexp(-x3))
906 facT4=licznik/dlog(dexp(x4)+dexp(-x4))
907 facT5=licznik/dlog(dexp(x5)+dexp(-x5))
909 write (iout,*) "Wrong RESCALE_MODE",rescale_mode
910 write (*,*) "Wrong RESCALE_MODE",rescale_mode
912 call MPI_Finalize(MPI_COMM_WORLD,IERROR)
916 welec=weights(3)*fact
917 wcorr=weights(4)*fact3
918 wcorr5=weights(5)*fact4
919 wcorr6=weights(6)*fact5
920 wel_loc=weights(7)*fact2
921 wturn3=weights(8)*fact2
922 wturn4=weights(9)*fact3
923 wturn6=weights(10)*fact5
924 wtor=weights(13)*fact
925 wtor_d=weights(14)*fact2
926 wsccor=weights(21)*fact
930 C------------------------------------------------------------------------
931 subroutine enerprint(energia)
932 implicit real*8 (a-h,o-z)
934 include 'COMMON.IOUNITS'
935 include 'COMMON.FFIELD'
936 include 'COMMON.SBRIDGE'
938 double precision energia(0:n_ene)
943 evdw2=energia(2)+energia(18)
955 eello_turn3=energia(8)
956 eello_turn4=energia(9)
957 eello_turn6=energia(10)
963 edihcnstr=energia(19)
968 write (iout,10) evdw,wsc,evdw2,wscp,ees,welec,evdw1,wvdwpp,
969 & estr,wbond,ebe,wang,
970 & escloc,wscloc,etors,wtor,etors_d,wtor_d,ehpb,wstrain,
972 & ecorr5,wcorr5,ecorr6,wcorr6,eel_loc,wel_loc,eello_turn3,wturn3,
973 & eello_turn4,wturn4,eello_turn6,wturn6,esccor,wsccor,
976 10 format (/'Virtual-chain energies:'//
977 & 'EVDW= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC-SC)'/
978 & 'EVDW2= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC-p)'/
979 & 'EES= ',1pE16.6,' WEIGHT=',1pD16.6,' (p-p)'/
980 & 'EVDWPP=',1pE16.6,' WEIGHT=',1pD16.6,' (p-p VDW)'/
981 & 'ESTR= ',1pE16.6,' WEIGHT=',1pD16.6,' (stretching)'/
982 & 'EBE= ',1pE16.6,' WEIGHT=',1pD16.6,' (bending)'/
983 & 'ESC= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC local)'/
984 & 'ETORS= ',1pE16.6,' WEIGHT=',1pD16.6,' (torsional)'/
985 & 'ETORSD=',1pE16.6,' WEIGHT=',1pD16.6,' (double torsional)'/
986 & 'EHBP= ',1pE16.6,' WEIGHT=',1pD16.6,
987 & ' (SS bridges & dist. cnstr.)'/
988 & 'ECORR4=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
989 & 'ECORR5=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
990 & 'ECORR6=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
991 & 'EELLO= ',1pE16.6,' WEIGHT=',1pD16.6,' (electrostatic-local)'/
992 & 'ETURN3=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 3rd order)'/
993 & 'ETURN4=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 4th order)'/
994 & 'ETURN6=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 6th order)'/
995 & 'ESCCOR=',1pE16.6,' WEIGHT=',1pD16.6,' (backbone-rotamer corr)'/
996 & 'EDIHC= ',1pE16.6,' (dihedral angle constraints)'/
997 & 'ESS= ',1pE16.6,' (disulfide-bridge intrinsic energy)'/
998 & 'UCONST= ',1pE16.6,' (Constraint energy)'/
999 & 'ETOT= ',1pE16.6,' (total)')
1001 write (iout,10) evdw,wsc,evdw2,wscp,ees,welec,
1002 & estr,wbond,ebe,wang,
1003 & escloc,wscloc,etors,wtor,etors_d,wtor_d,ehpb,wstrain,
1005 & ecorr5,wcorr5,ecorr6,wcorr6,eel_loc,wel_loc,eello_turn3,wturn3,
1006 & eello_turn4,wturn4,eello_turn6,wturn6,esccor,wsccro,edihcnstr,
1007 & ebr*nss,Uconst,etot
1008 10 format (/'Virtual-chain energies:'//
1009 & 'EVDW= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC-SC)'/
1010 & 'EVDW2= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC-p)'/
1011 & 'EES= ',1pE16.6,' WEIGHT=',1pD16.6,' (p-p)'/
1012 & 'ESTR= ',1pE16.6,' WEIGHT=',1pD16.6,' (stretching)'/
1013 & 'EBE= ',1pE16.6,' WEIGHT=',1pD16.6,' (bending)'/
1014 & 'ESC= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC local)'/
1015 & 'ETORS= ',1pE16.6,' WEIGHT=',1pD16.6,' (torsional)'/
1016 & 'ETORSD=',1pE16.6,' WEIGHT=',1pD16.6,' (double torsional)'/
1017 & 'EHBP= ',1pE16.6,' WEIGHT=',1pD16.6,
1018 & ' (SS bridges & dist. cnstr.)'/
1019 & 'ECORR4=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
1020 & 'ECORR5=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
1021 & 'ECORR6=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
1022 & 'EELLO= ',1pE16.6,' WEIGHT=',1pD16.6,' (electrostatic-local)'/
1023 & 'ETURN3=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 3rd order)'/
1024 & 'ETURN4=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 4th order)'/
1025 & 'ETURN6=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 6th order)'/
1026 & 'ESCCOR=',1pE16.6,' WEIGHT=',1pD16.6,' (backbone-rotamer corr)'/
1027 & 'EDIHC= ',1pE16.6,' (dihedral angle constraints)'/
1028 & 'ESS= ',1pE16.6,' (disulfide-bridge intrinsic energy)'/
1029 & 'UCONST=',1pE16.6,' (Constraint energy)'/
1030 & 'ETOT= ',1pE16.6,' (total)')
1034 C-----------------------------------------------------------------------
1035 subroutine elj(evdw)
1037 C This subroutine calculates the interaction energy of nonbonded side chains
1038 C assuming the LJ potential of interaction.
1040 implicit real*8 (a-h,o-z)
1041 include 'DIMENSIONS'
1042 parameter (accur=1.0d-10)
1043 include 'COMMON.GEO'
1044 include 'COMMON.VAR'
1045 include 'COMMON.LOCAL'
1046 include 'COMMON.CHAIN'
1047 include 'COMMON.DERIV'
1048 include 'COMMON.INTERACT'
1049 include 'COMMON.TORSION'
1050 include 'COMMON.SBRIDGE'
1051 include 'COMMON.NAMES'
1052 include 'COMMON.IOUNITS'
1053 include 'COMMON.CONTACTS'
1055 c write(iout,*)'Entering ELJ nnt=',nnt,' nct=',nct,' expon=',expon
1057 do i=iatsc_s,iatsc_e
1058 itypi=iabs(itype(i))
1059 if (itypi.eq.ntyp1) cycle
1060 itypi1=iabs(itype(i+1))
1067 C Calculate SC interaction energy.
1069 do iint=1,nint_gr(i)
1070 cd write (iout,*) 'i=',i,' iint=',iint,' istart=',istart(i,iint),
1071 cd & 'iend=',iend(i,iint)
1072 do j=istart(i,iint),iend(i,iint)
1073 itypj=iabs(itype(j))
1074 if (itypj.eq.ntyp1) cycle
1078 C Change 12/1/95 to calculate four-body interactions
1079 rij=xj*xj+yj*yj+zj*zj
1081 c write (iout,*)'i=',i,' j=',j,' itypi=',itypi,' itypj=',itypj
1082 eps0ij=eps(itypi,itypj)
1084 e1=fac*fac*aa(itypi,itypj)
1085 e2=fac*bb(itypi,itypj)
1087 cd sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
1088 cd epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
1089 cd write (iout,'(2(a3,i3,2x),6(1pd12.4)/2(3(1pd12.4),5x)/)')
1090 cd & restyp(itypi),i,restyp(itypj),j,aa(itypi,itypj),
1091 cd & bb(itypi,itypj),1.0D0/dsqrt(rrij),evdwij,epsi,sigm,
1092 cd & (c(k,i),k=1,3),(c(k,j),k=1,3)
1095 C Calculate the components of the gradient in DC and X
1097 fac=-rrij*(e1+evdwij)
1102 gvdwx(k,i)=gvdwx(k,i)-gg(k)
1103 gvdwx(k,j)=gvdwx(k,j)+gg(k)
1104 gvdwc(k,i)=gvdwc(k,i)-gg(k)
1105 gvdwc(k,j)=gvdwc(k,j)+gg(k)
1109 cgrad gvdwc(l,k)=gvdwc(l,k)+gg(l)
1113 C 12/1/95, revised on 5/20/97
1115 C Calculate the contact function. The ith column of the array JCONT will
1116 C contain the numbers of atoms that make contacts with the atom I (of numbers
1117 C greater than I). The arrays FACONT and GACONT will contain the values of
1118 C the contact function and its derivative.
1120 C Uncomment next line, if the correlation interactions include EVDW explicitly.
1121 c if (j.gt.i+1 .and. evdwij.le.0.0D0) then
1122 C Uncomment next line, if the correlation interactions are contact function only
1123 if (j.gt.i+1.and. eps0ij.gt.0.0D0) then
1125 sigij=sigma(itypi,itypj)
1126 r0ij=rs0(itypi,itypj)
1128 C Check whether the SC's are not too far to make a contact.
1131 call gcont(rij,rcut,1.0d0,0.2d0*rcut,fcont,fprimcont)
1132 C Add a new contact, if the SC's are close enough, but not too close (r<sigma).
1134 if (fcont.gt.0.0D0) then
1135 C If the SC-SC distance if close to sigma, apply spline.
1136 cAdam call gcont(-rij,-1.03d0*sigij,2.0d0*sigij,1.0d0,
1137 cAdam & fcont1,fprimcont1)
1138 cAdam fcont1=1.0d0-fcont1
1139 cAdam if (fcont1.gt.0.0d0) then
1140 cAdam fprimcont=fprimcont*fcont1+fcont*fprimcont1
1141 cAdam fcont=fcont*fcont1
1143 C Uncomment following 4 lines to have the geometric average of the epsilon0's
1144 cga eps0ij=1.0d0/dsqrt(eps0ij)
1146 cga gg(k)=gg(k)*eps0ij
1148 cga eps0ij=-evdwij*eps0ij
1149 C Uncomment for AL's type of SC correlation interactions.
1150 cadam eps0ij=-evdwij
1151 num_conti=num_conti+1
1152 jcont(num_conti,i)=j
1153 facont(num_conti,i)=fcont*eps0ij
1154 fprimcont=eps0ij*fprimcont/rij
1156 cAdam gacont(1,num_conti,i)=-fprimcont*xj+fcont*gg(1)
1157 cAdam gacont(2,num_conti,i)=-fprimcont*yj+fcont*gg(2)
1158 cAdam gacont(3,num_conti,i)=-fprimcont*zj+fcont*gg(3)
1159 C Uncomment following 3 lines for Skolnick's type of SC correlation.
1160 gacont(1,num_conti,i)=-fprimcont*xj
1161 gacont(2,num_conti,i)=-fprimcont*yj
1162 gacont(3,num_conti,i)=-fprimcont*zj
1163 cd write (iout,'(2i5,2f10.5)') i,j,rij,facont(num_conti,i)
1164 cd write (iout,'(2i3,3f10.5)')
1165 cd & i,j,(gacont(kk,num_conti,i),kk=1,3)
1171 num_cont(i)=num_conti
1175 gvdwc(j,i)=expon*gvdwc(j,i)
1176 gvdwx(j,i)=expon*gvdwx(j,i)
1179 C******************************************************************************
1183 C To save time, the factor of EXPON has been extracted from ALL components
1184 C of GVDWC and GRADX. Remember to multiply them by this factor before further
1187 C******************************************************************************
1190 C-----------------------------------------------------------------------------
1191 subroutine eljk(evdw)
1193 C This subroutine calculates the interaction energy of nonbonded side chains
1194 C assuming the LJK potential of interaction.
1196 implicit real*8 (a-h,o-z)
1197 include 'DIMENSIONS'
1198 include 'COMMON.GEO'
1199 include 'COMMON.VAR'
1200 include 'COMMON.LOCAL'
1201 include 'COMMON.CHAIN'
1202 include 'COMMON.DERIV'
1203 include 'COMMON.INTERACT'
1204 include 'COMMON.IOUNITS'
1205 include 'COMMON.NAMES'
1208 c print *,'Entering ELJK nnt=',nnt,' nct=',nct,' expon=',expon
1210 do i=iatsc_s,iatsc_e
1211 itypi=iabs(itype(i))
1212 if (itypi.eq.ntyp1) cycle
1213 itypi1=iabs(itype(i+1))
1218 C Calculate SC interaction energy.
1220 do iint=1,nint_gr(i)
1221 do j=istart(i,iint),iend(i,iint)
1222 itypj=iabs(itype(j))
1223 if (itypj.eq.ntyp1) cycle
1227 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
1228 fac_augm=rrij**expon
1229 e_augm=augm(itypi,itypj)*fac_augm
1230 r_inv_ij=dsqrt(rrij)
1232 r_shift_inv=1.0D0/(rij+r0(itypi,itypj)-sigma(itypi,itypj))
1233 fac=r_shift_inv**expon
1234 e1=fac*fac*aa(itypi,itypj)
1235 e2=fac*bb(itypi,itypj)
1237 cd sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
1238 cd epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
1239 cd write (iout,'(2(a3,i3,2x),8(1pd12.4)/2(3(1pd12.4),5x)/)')
1240 cd & restyp(itypi),i,restyp(itypj),j,aa(itypi,itypj),
1241 cd & bb(itypi,itypj),augm(itypi,itypj),epsi,sigm,
1242 cd & sigma(itypi,itypj),1.0D0/dsqrt(rrij),evdwij,
1243 cd & (c(k,i),k=1,3),(c(k,j),k=1,3)
1246 C Calculate the components of the gradient in DC and X
1248 fac=-2.0D0*rrij*e_augm-r_inv_ij*r_shift_inv*(e1+e1+e2)
1253 gvdwx(k,i)=gvdwx(k,i)-gg(k)
1254 gvdwx(k,j)=gvdwx(k,j)+gg(k)
1255 gvdwc(k,i)=gvdwc(k,i)-gg(k)
1256 gvdwc(k,j)=gvdwc(k,j)+gg(k)
1260 cgrad gvdwc(l,k)=gvdwc(l,k)+gg(l)
1268 gvdwc(j,i)=expon*gvdwc(j,i)
1269 gvdwx(j,i)=expon*gvdwx(j,i)
1274 C-----------------------------------------------------------------------------
1275 subroutine ebp(evdw)
1277 C This subroutine calculates the interaction energy of nonbonded side chains
1278 C assuming the Berne-Pechukas potential of interaction.
1280 implicit real*8 (a-h,o-z)
1281 include 'DIMENSIONS'
1282 include 'COMMON.GEO'
1283 include 'COMMON.VAR'
1284 include 'COMMON.LOCAL'
1285 include 'COMMON.CHAIN'
1286 include 'COMMON.DERIV'
1287 include 'COMMON.NAMES'
1288 include 'COMMON.INTERACT'
1289 include 'COMMON.IOUNITS'
1290 include 'COMMON.CALC'
1291 common /srutu/ icall
1292 c double precision rrsave(maxdim)
1295 c print *,'Entering EBP nnt=',nnt,' nct=',nct,' expon=',expon
1297 c if (icall.eq.0) then
1303 do i=iatsc_s,iatsc_e
1304 itypi=iabs(itype(i))
1305 if (itypi.eq.ntyp1) cycle
1306 itypi1=iabs(itype(i+1))
1310 dxi=dc_norm(1,nres+i)
1311 dyi=dc_norm(2,nres+i)
1312 dzi=dc_norm(3,nres+i)
1313 c dsci_inv=dsc_inv(itypi)
1314 dsci_inv=vbld_inv(i+nres)
1316 C Calculate SC interaction energy.
1318 do iint=1,nint_gr(i)
1319 do j=istart(i,iint),iend(i,iint)
1321 itypj=iabs(itype(j))
1322 if (itypj.eq.ntyp1) cycle
1323 c dscj_inv=dsc_inv(itypj)
1324 dscj_inv=vbld_inv(j+nres)
1325 chi1=chi(itypi,itypj)
1326 chi2=chi(itypj,itypi)
1333 alf12=0.5D0*(alf1+alf2)
1334 C For diagnostics only!!!
1347 dxj=dc_norm(1,nres+j)
1348 dyj=dc_norm(2,nres+j)
1349 dzj=dc_norm(3,nres+j)
1350 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
1351 cd if (icall.eq.0) then
1357 C Calculate the angle-dependent terms of energy & contributions to derivatives.
1359 C Calculate whole angle-dependent part of epsilon and contributions
1360 C to its derivatives
1361 fac=(rrij*sigsq)**expon2
1362 e1=fac*fac*aa(itypi,itypj)
1363 e2=fac*bb(itypi,itypj)
1364 evdwij=eps1*eps2rt*eps3rt*(e1+e2)
1365 eps2der=evdwij*eps3rt
1366 eps3der=evdwij*eps2rt
1367 evdwij=evdwij*eps2rt*eps3rt
1370 sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
1371 epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
1372 cd write (iout,'(2(a3,i3,2x),15(0pf7.3))')
1373 cd & restyp(itypi),i,restyp(itypj),j,
1374 cd & epsi,sigm,chi1,chi2,chip1,chip2,
1375 cd & eps1,eps2rt**2,eps3rt**2,1.0D0/dsqrt(sigsq),
1376 cd & om1,om2,om12,1.0D0/dsqrt(rrij),
1379 C Calculate gradient components.
1380 e1=e1*eps1*eps2rt**2*eps3rt**2
1381 fac=-expon*(e1+evdwij)
1384 C Calculate radial part of the gradient
1388 C Calculate the angular part of the gradient and sum add the contributions
1389 C to the appropriate components of the Cartesian gradient.
1397 C-----------------------------------------------------------------------------
1398 subroutine egb(evdw)
1400 C This subroutine calculates the interaction energy of nonbonded side chains
1401 C assuming the Gay-Berne potential of interaction.
1403 implicit real*8 (a-h,o-z)
1404 include 'DIMENSIONS'
1405 include 'COMMON.GEO'
1406 include 'COMMON.VAR'
1407 include 'COMMON.LOCAL'
1408 include 'COMMON.CHAIN'
1409 include 'COMMON.DERIV'
1410 include 'COMMON.NAMES'
1411 include 'COMMON.INTERACT'
1412 include 'COMMON.IOUNITS'
1413 include 'COMMON.CALC'
1414 include 'COMMON.CONTROL'
1417 ccccc energy_dec=.false.
1418 c print *,'Entering EGB nnt=',nnt,' nct=',nct,' expon=',expon
1421 c if (icall.eq.0) lprn=.false.
1423 do i=iatsc_s,iatsc_e
1424 itypi=iabs(itype(i))
1425 if (itypi.eq.ntyp1) cycle
1426 itypi1=iabs(itype(i+1))
1430 dxi=dc_norm(1,nres+i)
1431 dyi=dc_norm(2,nres+i)
1432 dzi=dc_norm(3,nres+i)
1433 c dsci_inv=dsc_inv(itypi)
1434 dsci_inv=vbld_inv(i+nres)
1435 c write (iout,*) "i",i,dsc_inv(itypi),dsci_inv,1.0d0/vbld(i+nres)
1436 c write (iout,*) "dcnori",dxi*dxi+dyi*dyi+dzi*dzi
1438 C Calculate SC interaction energy.
1440 do iint=1,nint_gr(i)
1441 do j=istart(i,iint),iend(i,iint)
1443 itypj=iabs(itype(j))
1444 if (itypj.eq.ntyp1) cycle
1445 c dscj_inv=dsc_inv(itypj)
1446 dscj_inv=vbld_inv(j+nres)
1447 c write (iout,*) "j",j,dsc_inv(itypj),dscj_inv,
1448 c & 1.0d0/vbld(j+nres)
1449 c write (iout,*) "i",i," j", j," itype",itype(i),itype(j)
1450 sig0ij=sigma(itypi,itypj)
1451 chi1=chi(itypi,itypj)
1452 chi2=chi(itypj,itypi)
1459 alf12=0.5D0*(alf1+alf2)
1460 C For diagnostics only!!!
1473 dxj=dc_norm(1,nres+j)
1474 dyj=dc_norm(2,nres+j)
1475 dzj=dc_norm(3,nres+j)
1476 c write (iout,*) "dcnorj",dxi*dxi+dyi*dyi+dzi*dzi
1477 c write (iout,*) "j",j," dc_norm",
1478 c & dc_norm(1,nres+j),dc_norm(2,nres+j),dc_norm(3,nres+j)
1479 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
1481 C Calculate angle-dependent terms of energy and contributions to their
1485 sig=sig0ij*dsqrt(sigsq)
1486 rij_shift=1.0D0/rij-sig+sig0ij
1487 c for diagnostics; uncomment
1488 c rij_shift=1.2*sig0ij
1489 C I hate to put IF's in the loops, but here don't have another choice!!!!
1490 if (rij_shift.le.0.0D0) then
1492 cd write (iout,'(2(a3,i3,2x),17(0pf7.3))')
1493 cd & restyp(itypi),i,restyp(itypj),j,
1494 cd & rij_shift,1.0D0/rij,sig,sig0ij,sigsq,1-dsqrt(sigsq)
1498 c---------------------------------------------------------------
1499 rij_shift=1.0D0/rij_shift
1500 fac=rij_shift**expon
1501 e1=fac*fac*aa(itypi,itypj)
1502 e2=fac*bb(itypi,itypj)
1503 evdwij=eps1*eps2rt*eps3rt*(e1+e2)
1504 eps2der=evdwij*eps3rt
1505 eps3der=evdwij*eps2rt
1506 c write (iout,*) "sigsq",sigsq," sig",sig," eps2rt",eps2rt,
1507 c & " eps3rt",eps3rt," eps1",eps1," e1",e1," e2",e2
1508 evdwij=evdwij*eps2rt*eps3rt
1511 sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
1512 epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
1513 write (iout,'(2(a3,i3,2x),17(0pf7.3))')
1514 & restyp(itypi),i,restyp(itypj),j,
1515 & epsi,sigm,chi1,chi2,chip1,chip2,
1516 & eps1,eps2rt**2,eps3rt**2,sig,sig0ij,
1517 & om1,om2,om12,1.0D0/rij,1.0D0/rij_shift,
1521 if (energy_dec) write (iout,'(a6,2i5,0pf7.3)')
1524 C Calculate gradient components.
1525 e1=e1*eps1*eps2rt**2*eps3rt**2
1526 fac=-expon*(e1+evdwij)*rij_shift
1530 C Calculate the radial part of the gradient
1534 C Calculate angular part of the gradient.
1539 c write (iout,*) "Number of loop steps in EGB:",ind
1540 cccc energy_dec=.false.
1543 C-----------------------------------------------------------------------------
1544 subroutine egbv(evdw)
1546 C This subroutine calculates the interaction energy of nonbonded side chains
1547 C assuming the Gay-Berne-Vorobjev potential of interaction.
1549 implicit real*8 (a-h,o-z)
1550 include 'DIMENSIONS'
1551 include 'COMMON.GEO'
1552 include 'COMMON.VAR'
1553 include 'COMMON.LOCAL'
1554 include 'COMMON.CHAIN'
1555 include 'COMMON.DERIV'
1556 include 'COMMON.NAMES'
1557 include 'COMMON.INTERACT'
1558 include 'COMMON.IOUNITS'
1559 include 'COMMON.CALC'
1560 common /srutu/ icall
1563 c print *,'Entering EGB nnt=',nnt,' nct=',nct,' expon=',expon
1566 c if (icall.eq.0) lprn=.true.
1568 do i=iatsc_s,iatsc_e
1569 itypi=iabs(itype(i))
1570 if (itypi.eq.ntyp1) cycle
1571 itypi1=iabs(itype(i+1))
1575 dxi=dc_norm(1,nres+i)
1576 dyi=dc_norm(2,nres+i)
1577 dzi=dc_norm(3,nres+i)
1578 c dsci_inv=dsc_inv(itypi)
1579 dsci_inv=vbld_inv(i+nres)
1581 C Calculate SC interaction energy.
1583 do iint=1,nint_gr(i)
1584 do j=istart(i,iint),iend(i,iint)
1586 itypj=iabs(itype(j))
1587 if (itypj.eq.ntyp1) cycle
1588 c dscj_inv=dsc_inv(itypj)
1589 dscj_inv=vbld_inv(j+nres)
1590 sig0ij=sigma(itypi,itypj)
1591 r0ij=r0(itypi,itypj)
1592 chi1=chi(itypi,itypj)
1593 chi2=chi(itypj,itypi)
1600 alf12=0.5D0*(alf1+alf2)
1601 C For diagnostics only!!!
1614 dxj=dc_norm(1,nres+j)
1615 dyj=dc_norm(2,nres+j)
1616 dzj=dc_norm(3,nres+j)
1617 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
1619 C Calculate angle-dependent terms of energy and contributions to their
1623 sig=sig0ij*dsqrt(sigsq)
1624 rij_shift=1.0D0/rij-sig+r0ij
1625 C I hate to put IF's in the loops, but here don't have another choice!!!!
1626 if (rij_shift.le.0.0D0) then
1631 c---------------------------------------------------------------
1632 rij_shift=1.0D0/rij_shift
1633 fac=rij_shift**expon
1634 e1=fac*fac*aa(itypi,itypj)
1635 e2=fac*bb(itypi,itypj)
1636 evdwij=eps1*eps2rt*eps3rt*(e1+e2)
1637 eps2der=evdwij*eps3rt
1638 eps3der=evdwij*eps2rt
1639 fac_augm=rrij**expon
1640 e_augm=augm(itypi,itypj)*fac_augm
1641 evdwij=evdwij*eps2rt*eps3rt
1642 evdw=evdw+evdwij+e_augm
1644 sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
1645 epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
1646 write (iout,'(2(a3,i3,2x),17(0pf7.3))')
1647 & restyp(itypi),i,restyp(itypj),j,
1648 & epsi,sigm,sig,(augm(itypi,itypj)/epsi)**(1.0D0/12.0D0),
1649 & chi1,chi2,chip1,chip2,
1650 & eps1,eps2rt**2,eps3rt**2,
1651 & om1,om2,om12,1.0D0/rij,1.0D0/rij_shift,
1654 C Calculate gradient components.
1655 e1=e1*eps1*eps2rt**2*eps3rt**2
1656 fac=-expon*(e1+evdwij)*rij_shift
1658 fac=rij*fac-2*expon*rrij*e_augm
1659 C Calculate the radial part of the gradient
1663 C Calculate angular part of the gradient.
1669 C-----------------------------------------------------------------------------
1670 subroutine sc_angular
1671 C Calculate eps1,eps2,eps3,sigma, and parts of their derivatives in om1,om2,
1672 C om12. Called by ebp, egb, and egbv.
1674 include 'COMMON.CALC'
1675 include 'COMMON.IOUNITS'
1679 om1=dxi*erij(1)+dyi*erij(2)+dzi*erij(3)
1680 om2=dxj*erij(1)+dyj*erij(2)+dzj*erij(3)
1681 om12=dxi*dxj+dyi*dyj+dzi*dzj
1683 C Calculate eps1(om12) and its derivative in om12
1684 faceps1=1.0D0-om12*chiom12
1685 faceps1_inv=1.0D0/faceps1
1686 eps1=dsqrt(faceps1_inv)
1687 C Following variable is eps1*deps1/dom12
1688 eps1_om12=faceps1_inv*chiom12
1693 c write (iout,*) "om12",om12," eps1",eps1
1694 C Calculate sigma(om1,om2,om12) and the derivatives of sigma**2 in om1,om2,
1699 facsig=om1*chiom1+om2*chiom2-2.0D0*om1om2*chiom12
1700 sigsq=1.0D0-facsig*faceps1_inv
1701 sigsq_om1=(chiom1-chiom12*om2)*faceps1_inv
1702 sigsq_om2=(chiom2-chiom12*om1)*faceps1_inv
1703 sigsq_om12=-chi12*(om1om2*faceps1-om12*facsig)*faceps1_inv**2
1709 c write (iout,*) "chiom1",chiom1," chiom2",chiom2," chiom12",chiom12
1710 c write (iout,*) "faceps1",faceps1," faceps1_inv",faceps1_inv,
1712 C Calculate eps2 and its derivatives in om1, om2, and om12.
1715 chipom12=chip12*om12
1716 facp=1.0D0-om12*chipom12
1718 facp1=om1*chipom1+om2*chipom2-2.0D0*om1om2*chipom12
1719 c write (iout,*) "chipom1",chipom1," chipom2",chipom2,
1720 c & " chipom12",chipom12," facp",facp," facp_inv",facp_inv
1721 C Following variable is the square root of eps2
1722 eps2rt=1.0D0-facp1*facp_inv
1723 C Following three variables are the derivatives of the square root of eps
1724 C in om1, om2, and om12.
1725 eps2rt_om1=-4.0D0*(chipom1-chipom12*om2)*facp_inv
1726 eps2rt_om2=-4.0D0*(chipom2-chipom12*om1)*facp_inv
1727 eps2rt_om12=4.0D0*chip12*(om1om2*facp-om12*facp1)*facp_inv**2
1728 C Evaluate the "asymmetric" factor in the VDW constant, eps3
1729 eps3rt=1.0D0-alf1*om1+alf2*om2-alf12*om12
1730 c write (iout,*) "eps2rt",eps2rt," eps3rt",eps3rt
1731 c write (iout,*) "eps2rt_om1",eps2rt_om1," eps2rt_om2",eps2rt_om2,
1732 c & " eps2rt_om12",eps2rt_om12
1733 C Calculate whole angle-dependent part of epsilon and contributions
1734 C to its derivatives
1737 C----------------------------------------------------------------------------
1739 implicit real*8 (a-h,o-z)
1740 include 'DIMENSIONS'
1741 include 'COMMON.CHAIN'
1742 include 'COMMON.DERIV'
1743 include 'COMMON.CALC'
1744 include 'COMMON.IOUNITS'
1745 double precision dcosom1(3),dcosom2(3)
1746 eom1=eps2der*eps2rt_om1-2.0D0*alf1*eps3der+sigder*sigsq_om1
1747 eom2=eps2der*eps2rt_om2+2.0D0*alf2*eps3der+sigder*sigsq_om2
1748 eom12=evdwij*eps1_om12+eps2der*eps2rt_om12
1749 & -2.0D0*alf12*eps3der+sigder*sigsq_om12
1753 c eom12=evdwij*eps1_om12
1755 c write (iout,*) "eps2der",eps2der," eps3der",eps3der,
1756 c & " sigder",sigder
1757 c write (iout,*) "eps1_om12",eps1_om12," eps2rt_om12",eps2rt_om12
1758 c write (iout,*) "eom1",eom1," eom2",eom2," eom12",eom12
1760 dcosom1(k)=rij*(dc_norm(k,nres+i)-om1*erij(k))
1761 dcosom2(k)=rij*(dc_norm(k,nres+j)-om2*erij(k))
1764 gg(k)=gg(k)+eom1*dcosom1(k)+eom2*dcosom2(k)
1766 c write (iout,*) "gg",(gg(k),k=1,3)
1768 gvdwx(k,i)=gvdwx(k,i)-gg(k)
1769 & +(eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,nres+i))
1770 & +eom1*(erij(k)-om1*dc_norm(k,nres+i)))*dsci_inv
1771 gvdwx(k,j)=gvdwx(k,j)+gg(k)
1772 & +(eom12*(dc_norm(k,nres+i)-om12*dc_norm(k,nres+j))
1773 & +eom2*(erij(k)-om2*dc_norm(k,nres+j)))*dscj_inv
1774 c write (iout,*)(eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,nres+i))
1775 c & +eom1*(erij(k)-om1*dc_norm(k,nres+i)))*dsci_inv
1776 c write (iout,*)(eom12*(dc_norm(k,nres+i)-om12*dc_norm(k,nres+j))
1777 c & +eom2*(erij(k)-om2*dc_norm(k,nres+j)))*dscj_inv
1780 C Calculate the components of the gradient in DC and X
1784 cgrad gvdwc(l,k)=gvdwc(l,k)+gg(l)
1788 gvdwc(l,i)=gvdwc(l,i)-gg(l)
1789 gvdwc(l,j)=gvdwc(l,j)+gg(l)
1793 C-----------------------------------------------------------------------
1794 subroutine e_softsphere(evdw)
1796 C This subroutine calculates the interaction energy of nonbonded side chains
1797 C assuming the LJ potential of interaction.
1799 implicit real*8 (a-h,o-z)
1800 include 'DIMENSIONS'
1801 parameter (accur=1.0d-10)
1802 include 'COMMON.GEO'
1803 include 'COMMON.VAR'
1804 include 'COMMON.LOCAL'
1805 include 'COMMON.CHAIN'
1806 include 'COMMON.DERIV'
1807 include 'COMMON.INTERACT'
1808 include 'COMMON.TORSION'
1809 include 'COMMON.SBRIDGE'
1810 include 'COMMON.NAMES'
1811 include 'COMMON.IOUNITS'
1812 include 'COMMON.CONTACTS'
1814 cd print *,'Entering Esoft_sphere nnt=',nnt,' nct=',nct
1816 do i=iatsc_s,iatsc_e
1817 itypi=iabs(itype(i))
1818 if (itypi.eq.ntyp1) cycle
1819 itypi1=iabs(itype(i+1))
1824 C Calculate SC interaction energy.
1826 do iint=1,nint_gr(i)
1827 cd write (iout,*) 'i=',i,' iint=',iint,' istart=',istart(i,iint),
1828 cd & 'iend=',iend(i,iint)
1829 do j=istart(i,iint),iend(i,iint)
1830 itypj=iabs(itype(j))
1831 if (itypj.eq.ntyp1) cycle
1835 rij=xj*xj+yj*yj+zj*zj
1836 c write (iout,*)'i=',i,' j=',j,' itypi=',itypi,' itypj=',itypj
1837 r0ij=r0(itypi,itypj)
1839 c print *,i,j,r0ij,dsqrt(rij)
1840 if (rij.lt.r0ijsq) then
1841 evdwij=0.25d0*(rij-r0ijsq)**2
1849 C Calculate the components of the gradient in DC and X
1855 gvdwx(k,i)=gvdwx(k,i)-gg(k)
1856 gvdwx(k,j)=gvdwx(k,j)+gg(k)
1857 gvdwc(k,i)=gvdwc(k,i)-gg(k)
1858 gvdwc(k,j)=gvdwc(k,j)+gg(k)
1862 cgrad gvdwc(l,k)=gvdwc(l,k)+gg(l)
1870 C--------------------------------------------------------------------------
1871 subroutine eelec_soft_sphere(ees,evdw1,eel_loc,eello_turn3,
1874 C Soft-sphere potential of p-p interaction
1876 implicit real*8 (a-h,o-z)
1877 include 'DIMENSIONS'
1878 include 'COMMON.CONTROL'
1879 include 'COMMON.IOUNITS'
1880 include 'COMMON.GEO'
1881 include 'COMMON.VAR'
1882 include 'COMMON.LOCAL'
1883 include 'COMMON.CHAIN'
1884 include 'COMMON.DERIV'
1885 include 'COMMON.INTERACT'
1886 include 'COMMON.CONTACTS'
1887 include 'COMMON.TORSION'
1888 include 'COMMON.VECTORS'
1889 include 'COMMON.FFIELD'
1891 cd write(iout,*) 'In EELEC_soft_sphere'
1898 do i=iatel_s,iatel_e
1899 if (itype(i).eq.ntyp1 .or. itype(i+1).eq.ntyp1) cycle
1903 xmedi=c(1,i)+0.5d0*dxi
1904 ymedi=c(2,i)+0.5d0*dyi
1905 zmedi=c(3,i)+0.5d0*dzi
1907 c write (iout,*) 'i',i,' ielstart',ielstart(i),' ielend',ielend(i)
1908 do j=ielstart(i),ielend(i)
1909 if (itype(j).eq.ntyp1 .or. itype(j+1).eq.ntyp1) cycle
1913 if (j.eq.i+2 .and. itelj.eq.2) iteli=2
1914 r0ij=rpp(iteli,itelj)
1919 xj=c(1,j)+0.5D0*dxj-xmedi
1920 yj=c(2,j)+0.5D0*dyj-ymedi
1921 zj=c(3,j)+0.5D0*dzj-zmedi
1922 rij=xj*xj+yj*yj+zj*zj
1923 if (rij.lt.r0ijsq) then
1924 evdw1ij=0.25d0*(rij-r0ijsq)**2
1932 C Calculate contributions to the Cartesian gradient.
1938 gvdwpp(k,i)=gvdwpp(k,i)-ggg(k)
1939 gvdwpp(k,j)=gvdwpp(k,j)+ggg(k)
1942 * Loop over residues i+1 thru j-1.
1946 cgrad gelc(l,k)=gelc(l,k)+ggg(l)
1951 cgrad do i=nnt,nct-1
1953 cgrad gelc(k,i)=gelc(k,i)+0.5d0*gelc(k,i)
1955 cgrad do j=i+1,nct-1
1957 cgrad gelc(k,i)=gelc(k,i)+gelc(k,j)
1963 c------------------------------------------------------------------------------
1964 subroutine vec_and_deriv
1965 implicit real*8 (a-h,o-z)
1966 include 'DIMENSIONS'
1970 include 'COMMON.IOUNITS'
1971 include 'COMMON.GEO'
1972 include 'COMMON.VAR'
1973 include 'COMMON.LOCAL'
1974 include 'COMMON.CHAIN'
1975 include 'COMMON.VECTORS'
1976 include 'COMMON.SETUP'
1977 include 'COMMON.TIME1'
1978 dimension uyder(3,3,2),uzder(3,3,2),vbld_inv_temp(2)
1979 C Compute the local reference systems. For reference system (i), the
1980 C X-axis points from CA(i) to CA(i+1), the Y axis is in the
1981 C CA(i)-CA(i+1)-CA(i+2) plane, and the Z axis is perpendicular to this plane.
1983 do i=ivec_start,ivec_end
1987 if (i.eq.nres-1) then
1988 C Case of the last full residue
1989 C Compute the Z-axis
1990 call vecpr(dc_norm(1,i),dc_norm(1,i-1),uz(1,i))
1991 costh=dcos(pi-theta(nres))
1992 fac=1.0d0/dsqrt(1.0d0-costh*costh)
1996 C Compute the derivatives of uz
1998 uzder(2,1,1)=-dc_norm(3,i-1)
1999 uzder(3,1,1)= dc_norm(2,i-1)
2000 uzder(1,2,1)= dc_norm(3,i-1)
2002 uzder(3,2,1)=-dc_norm(1,i-1)
2003 uzder(1,3,1)=-dc_norm(2,i-1)
2004 uzder(2,3,1)= dc_norm(1,i-1)
2007 uzder(2,1,2)= dc_norm(3,i)
2008 uzder(3,1,2)=-dc_norm(2,i)
2009 uzder(1,2,2)=-dc_norm(3,i)
2011 uzder(3,2,2)= dc_norm(1,i)
2012 uzder(1,3,2)= dc_norm(2,i)
2013 uzder(2,3,2)=-dc_norm(1,i)
2015 C Compute the Y-axis
2018 uy(k,i)=fac*(dc_norm(k,i-1)-costh*dc_norm(k,i))
2020 C Compute the derivatives of uy
2023 uyder(k,j,1)=2*dc_norm(k,i-1)*dc_norm(j,i)
2024 & -dc_norm(k,i)*dc_norm(j,i-1)
2025 uyder(k,j,2)=-dc_norm(j,i)*dc_norm(k,i)
2027 uyder(j,j,1)=uyder(j,j,1)-costh
2028 uyder(j,j,2)=1.0d0+uyder(j,j,2)
2033 uygrad(l,k,j,i)=uyder(l,k,j)
2034 uzgrad(l,k,j,i)=uzder(l,k,j)
2038 call unormderiv(uy(1,i),uyder(1,1,1),facy,uygrad(1,1,1,i))
2039 call unormderiv(uy(1,i),uyder(1,1,2),facy,uygrad(1,1,2,i))
2040 call unormderiv(uz(1,i),uzder(1,1,1),fac,uzgrad(1,1,1,i))
2041 call unormderiv(uz(1,i),uzder(1,1,2),fac,uzgrad(1,1,2,i))
2044 C Compute the Z-axis
2045 call vecpr(dc_norm(1,i),dc_norm(1,i+1),uz(1,i))
2046 costh=dcos(pi-theta(i+2))
2047 fac=1.0d0/dsqrt(1.0d0-costh*costh)
2051 C Compute the derivatives of uz
2053 uzder(2,1,1)=-dc_norm(3,i+1)
2054 uzder(3,1,1)= dc_norm(2,i+1)
2055 uzder(1,2,1)= dc_norm(3,i+1)
2057 uzder(3,2,1)=-dc_norm(1,i+1)
2058 uzder(1,3,1)=-dc_norm(2,i+1)
2059 uzder(2,3,1)= dc_norm(1,i+1)
2062 uzder(2,1,2)= dc_norm(3,i)
2063 uzder(3,1,2)=-dc_norm(2,i)
2064 uzder(1,2,2)=-dc_norm(3,i)
2066 uzder(3,2,2)= dc_norm(1,i)
2067 uzder(1,3,2)= dc_norm(2,i)
2068 uzder(2,3,2)=-dc_norm(1,i)
2070 C Compute the Y-axis
2073 uy(k,i)=facy*(dc_norm(k,i+1)-costh*dc_norm(k,i))
2075 C Compute the derivatives of uy
2078 uyder(k,j,1)=2*dc_norm(k,i+1)*dc_norm(j,i)
2079 & -dc_norm(k,i)*dc_norm(j,i+1)
2080 uyder(k,j,2)=-dc_norm(j,i)*dc_norm(k,i)
2082 uyder(j,j,1)=uyder(j,j,1)-costh
2083 uyder(j,j,2)=1.0d0+uyder(j,j,2)
2088 uygrad(l,k,j,i)=uyder(l,k,j)
2089 uzgrad(l,k,j,i)=uzder(l,k,j)
2093 call unormderiv(uy(1,i),uyder(1,1,1),facy,uygrad(1,1,1,i))
2094 call unormderiv(uy(1,i),uyder(1,1,2),facy,uygrad(1,1,2,i))
2095 call unormderiv(uz(1,i),uzder(1,1,1),fac,uzgrad(1,1,1,i))
2096 call unormderiv(uz(1,i),uzder(1,1,2),fac,uzgrad(1,1,2,i))
2100 vbld_inv_temp(1)=vbld_inv(i+1)
2101 if (i.lt.nres-1) then
2102 vbld_inv_temp(2)=vbld_inv(i+2)
2104 vbld_inv_temp(2)=vbld_inv(i)
2109 uygrad(l,k,j,i)=vbld_inv_temp(j)*uygrad(l,k,j,i)
2110 uzgrad(l,k,j,i)=vbld_inv_temp(j)*uzgrad(l,k,j,i)
2115 #if defined(PARVEC) && defined(MPI)
2116 if (nfgtasks1.gt.1) then
2118 c print *,"Processor",fg_rank1,kolor1," ivec_start",ivec_start,
2119 c & " ivec_displ",(ivec_displ(i),i=0,nfgtasks1-1),
2120 c & " ivec_count",(ivec_count(i),i=0,nfgtasks1-1)
2121 call MPI_Allgatherv(uy(1,ivec_start),ivec_count(fg_rank1),
2122 & MPI_UYZ,uy(1,1),ivec_count(0),ivec_displ(0),MPI_UYZ,
2124 call MPI_Allgatherv(uz(1,ivec_start),ivec_count(fg_rank1),
2125 & MPI_UYZ,uz(1,1),ivec_count(0),ivec_displ(0),MPI_UYZ,
2127 call MPI_Allgatherv(uygrad(1,1,1,ivec_start),
2128 & ivec_count(fg_rank1),MPI_UYZGRAD,uygrad(1,1,1,1),ivec_count(0),
2129 & ivec_displ(0),MPI_UYZGRAD,FG_COMM1,IERR)
2130 call MPI_Allgatherv(uzgrad(1,1,1,ivec_start),
2131 & ivec_count(fg_rank1),MPI_UYZGRAD,uzgrad(1,1,1,1),ivec_count(0),
2132 & ivec_displ(0),MPI_UYZGRAD,FG_COMM1,IERR)
2133 time_gather=time_gather+MPI_Wtime()-time00
2135 c if (fg_rank.eq.0) then
2136 c write (iout,*) "Arrays UY and UZ"
2138 c write (iout,'(i5,3f10.5,5x,3f10.5)') i,(uy(k,i),k=1,3),
2145 C-----------------------------------------------------------------------------
2146 subroutine check_vecgrad
2147 implicit real*8 (a-h,o-z)
2148 include 'DIMENSIONS'
2149 include 'COMMON.IOUNITS'
2150 include 'COMMON.GEO'
2151 include 'COMMON.VAR'
2152 include 'COMMON.LOCAL'
2153 include 'COMMON.CHAIN'
2154 include 'COMMON.VECTORS'
2155 dimension uygradt(3,3,2,maxres),uzgradt(3,3,2,maxres)
2156 dimension uyt(3,maxres),uzt(3,maxres)
2157 dimension uygradn(3,3,2),uzgradn(3,3,2),erij(3)
2158 double precision delta /1.0d-7/
2161 crc write(iout,'(2i5,2(3f10.5,5x))') i,1,dc_norm(:,i)
2162 crc write(iout,'(2i5,2(3f10.5,5x))') i,2,uy(:,i)
2163 crc write(iout,'(2i5,2(3f10.5,5x)/)')i,3,uz(:,i)
2164 cd write(iout,'(2i5,2(3f10.5,5x))') i,1,
2165 cd & (dc_norm(if90,i),if90=1,3)
2166 cd write(iout,'(2i5,2(3f10.5,5x))') i,2,(uy(if90,i),if90=1,3)
2167 cd write(iout,'(2i5,2(3f10.5,5x)/)')i,3,(uz(if90,i),if90=1,3)
2168 cd write(iout,'(a)')
2174 uygradt(l,k,j,i)=uygrad(l,k,j,i)
2175 uzgradt(l,k,j,i)=uzgrad(l,k,j,i)
2188 cd write (iout,*) 'i=',i
2190 erij(k)=dc_norm(k,i)
2194 dc_norm(k,i)=erij(k)
2196 dc_norm(j,i)=dc_norm(j,i)+delta
2197 c fac=dsqrt(scalar(dc_norm(1,i),dc_norm(1,i)))
2199 c dc_norm(k,i)=dc_norm(k,i)/fac
2201 c write (iout,*) (dc_norm(k,i),k=1,3)
2202 c write (iout,*) (erij(k),k=1,3)
2205 uygradn(k,j,1)=(uy(k,i)-uyt(k,i))/delta
2206 uygradn(k,j,2)=(uy(k,i-1)-uyt(k,i-1))/delta
2207 uzgradn(k,j,1)=(uz(k,i)-uzt(k,i))/delta
2208 uzgradn(k,j,2)=(uz(k,i-1)-uzt(k,i-1))/delta
2210 c write (iout,'(i5,3f8.5,3x,3f8.5,5x,3f8.5,3x,3f8.5)')
2211 c & j,(uzgradt(k,j,1,i),k=1,3),(uzgradn(k,j,1),k=1,3),
2212 c & (uzgradt(k,j,2,i-1),k=1,3),(uzgradn(k,j,2),k=1,3)
2215 dc_norm(k,i)=erij(k)
2218 cd write (iout,'(i5,3f8.5,3x,3f8.5,5x,3f8.5,3x,3f8.5)')
2219 cd & k,(uygradt(k,l,1,i),l=1,3),(uygradn(k,l,1),l=1,3),
2220 cd & (uygradt(k,l,2,i-1),l=1,3),(uygradn(k,l,2),l=1,3)
2221 cd write (iout,'(i5,3f8.5,3x,3f8.5,5x,3f8.5,3x,3f8.5)')
2222 cd & k,(uzgradt(k,l,1,i),l=1,3),(uzgradn(k,l,1),l=1,3),
2223 cd & (uzgradt(k,l,2,i-1),l=1,3),(uzgradn(k,l,2),l=1,3)
2224 cd write (iout,'(a)')
2229 C--------------------------------------------------------------------------
2230 subroutine set_matrices
2231 implicit real*8 (a-h,o-z)
2232 include 'DIMENSIONS'
2235 include "COMMON.SETUP"
2237 integer status(MPI_STATUS_SIZE)
2239 include 'COMMON.IOUNITS'
2240 include 'COMMON.GEO'
2241 include 'COMMON.VAR'
2242 include 'COMMON.LOCAL'
2243 include 'COMMON.CHAIN'
2244 include 'COMMON.DERIV'
2245 include 'COMMON.INTERACT'
2246 include 'COMMON.CONTACTS'
2247 include 'COMMON.TORSION'
2248 include 'COMMON.VECTORS'
2249 include 'COMMON.FFIELD'
2250 double precision auxvec(2),auxmat(2,2)
2252 C Compute the virtual-bond-torsional-angle dependent quantities needed
2253 C to calculate the el-loc multibody terms of various order.
2255 c write(iout,*) 'nphi=',nphi,nres
2257 do i=ivec_start+2,ivec_end+2
2262 if (i.gt. nnt+2 .and. i.lt.nct+2) then
2263 iti = itortyp(itype(i-2))
2267 c if (i.gt. iatel_s+1 .and. i.lt.iatel_e+4) then
2268 if (i.gt. nnt+1 .and. i.lt.nct+1) then
2269 iti1 = itortyp(itype(i-1))
2274 b1(1,i-2)=bnew1(1,1,iti)*dsin(theta(i-1)/2.0d0)
2275 & +bnew1(2,1,iti)*dsin(theta(i-1))
2276 & +bnew1(3,1,iti)*dcos(theta(i-1)/2.0d0)
2277 gtb1(1,i-2)=bnew1(1,1,iti)*dcos(theta(i-1)/2.0d0)/2.0d0
2278 & +bnew1(2,1,iti)*dcos(theta(i-1))
2279 & -bnew1(3,1,iti)*dsin(theta(i-1)/2.0d0)/2.0d0
2280 c & +bnew1(3,1,iti)*dsin(alpha(i))*cos(beta(i))
2281 c &*(cos(theta(i)/2.0)
2282 b2(1,i-2)=bnew2(1,1,iti)*dsin(theta(i-1)/2.0d0)
2283 & +bnew2(2,1,iti)*dsin(theta(i-1))
2284 & +bnew2(3,1,iti)*dcos(theta(i-1)/2.0d0)
2285 c & +bnew2(3,1,iti)*dsin(alpha(i))*dcos(beta(i))
2286 c &*(cos(theta(i)/2.0)
2287 gtb2(1,i-2)=bnew2(1,1,iti)*dcos(theta(i-1)/2.0d0)/2.0d0
2288 & +bnew2(2,1,iti)*dcos(theta(i-1))
2289 & -bnew2(3,1,iti)*dsin(theta(i-1)/2.0d0)/2.0d0
2290 c if (ggb1(1,i).eq.0.0d0) then
2291 c write(iout,*) 'i=',i,ggb1(1,i),
2292 c &bnew1(1,1,iti)*dcos(theta(i)/2.0d0)/2.0d0,
2293 c &bnew1(2,1,iti)*dcos(theta(i)),
2294 c &bnew1(3,1,iti)*dsin(theta(i)/2.0d0)/2.0d0
2296 b1(2,i-2)=bnew1(1,2,iti)
2298 b2(2,i-2)=bnew2(1,2,iti)
2300 EE(1,1,i-2)=eenew(1,iti)*dcos(theta(i-1))
2301 EE(1,2,i-2)=eeold(1,2,iti)
2302 EE(2,1,i-2)=eeold(2,1,iti)
2303 EE(2,2,i-2)=eeold(2,2,iti)
2304 gtEE(1,1,i-2)=-eenew(1,iti)*dsin(theta(i-1))
2309 c EE(1,2,iti)=0.5d0*eenew(1,iti)
2310 c EE(2,1,iti)=0.5d0*eenew(1,iti)
2311 c b1(2,iti)=bnew1(1,2,iti)*dsin(alpha(i))*dsin(beta(i))
2312 c b2(2,iti)=bnew2(1,2,iti)*dsin(alpha(i))*dsin(beta(i))
2313 b1tilde(1,i-2)=b1(1,i-2)
2314 b1tilde(2,i-2)=-b1(2,i-2)
2315 b2tilde(1,i-2)=b2(1,i-2)
2316 b2tilde(2,i-2)=-b2(2,i-2)
2317 c write (iout,*) 'i=',i-2,gtb1(2,i-2),gtb1(1,i-2)
2318 c write (iout,*) 'theta=', theta(i-1)
2321 do i=ivec_start+2,ivec_end+2
2326 if (i.gt. nnt+2 .and. i.lt.nct+2) then
2327 iti = itortyp(itype(i-2))
2331 c if (i.gt. iatel_s+1 .and. i.lt.iatel_e+4) then
2332 if (i.gt. nnt+1 .and. i.lt.nct+1) then
2333 iti1 = itortyp(itype(i-1))
2337 if (i .lt. nres+1) then
2374 if (i .gt. 3 .and. i .lt. nres+1) then
2375 obrot_der(1,i-2)=-sin1
2376 obrot_der(2,i-2)= cos1
2377 Ugder(1,1,i-2)= sin1
2378 Ugder(1,2,i-2)=-cos1
2379 Ugder(2,1,i-2)=-cos1
2380 Ugder(2,2,i-2)=-sin1
2383 obrot2_der(1,i-2)=-dwasin2
2384 obrot2_der(2,i-2)= dwacos2
2385 Ug2der(1,1,i-2)= dwasin2
2386 Ug2der(1,2,i-2)=-dwacos2
2387 Ug2der(2,1,i-2)=-dwacos2
2388 Ug2der(2,2,i-2)=-dwasin2
2390 obrot_der(1,i-2)=0.0d0
2391 obrot_der(2,i-2)=0.0d0
2392 Ugder(1,1,i-2)=0.0d0
2393 Ugder(1,2,i-2)=0.0d0
2394 Ugder(2,1,i-2)=0.0d0
2395 Ugder(2,2,i-2)=0.0d0
2396 obrot2_der(1,i-2)=0.0d0
2397 obrot2_der(2,i-2)=0.0d0
2398 Ug2der(1,1,i-2)=0.0d0
2399 Ug2der(1,2,i-2)=0.0d0
2400 Ug2der(2,1,i-2)=0.0d0
2401 Ug2der(2,2,i-2)=0.0d0
2403 c if (i.gt. iatel_s+2 .and. i.lt.iatel_e+5) then
2404 if (i.gt. nnt+2 .and. i.lt.nct+2) then
2405 iti = itortyp(itype(i-2))
2409 c if (i.gt. iatel_s+1 .and. i.lt.iatel_e+4) then
2410 if (i.gt. nnt+1 .and. i.lt.nct+1) then
2411 iti1 = itortyp(itype(i-1))
2415 cd write (iout,*) '*******i',i,' iti1',iti
2416 cd write (iout,*) 'b1',b1(:,iti)
2417 cd write (iout,*) 'b2',b2(:,iti)
2418 cd write (iout,*) 'Ug',Ug(:,:,i-2)
2419 c if (i .gt. iatel_s+2) then
2420 if (i .gt. nnt+2) then
2421 call matvec2(Ug(1,1,i-2),b2(1,i-2),Ub2(1,i-2))
2423 call matvec2(Ug(1,1,i-2),gtb2(1,i-2),gUb2(1,i-2))
2424 c write (iout,*) Ug(1,1,i-2),gtb2(1,i-2),gUb2(1,i-2),"chuj"
2426 c write(iout,*) "co jest kurwa", iti, EE(1,1,iti),EE(2,1,iti),
2427 c & EE(1,2,iti),EE(2,2,iti)
2428 call matmat2(EE(1,1,i-2),Ug(1,1,i-2),EUg(1,1,i-2))
2429 call matmat2(gtEE(1,1,i-2),Ug(1,1,i-2),gtEUg(1,1,i-2))
2430 c write(iout,*) "Macierz EUG",
2431 c & eug(1,1,i-2),eug(1,2,i-2),eug(2,1,i-2),
2433 if (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0)
2435 call matmat2(CC(1,1,iti),Ug(1,1,i-2),CUg(1,1,i-2))
2436 call matmat2(DD(1,1,iti),Ug(1,1,i-2),DUg(1,1,i-2))
2437 call matmat2(Dtilde(1,1,iti),Ug2(1,1,i-2),DtUg2(1,1,i-2))
2438 call matvec2(Ctilde(1,1,iti1),obrot(1,i-2),Ctobr(1,i-2))
2439 call matvec2(Dtilde(1,1,iti),obrot2(1,i-2),Dtobr2(1,i-2))
2450 DtUg2(l,k,i-2)=0.0d0
2454 call matvec2(Ugder(1,1,i-2),b2(1,i-2),Ub2der(1,i-2))
2455 call matmat2(EE(1,1,i-2),Ugder(1,1,i-2),EUgder(1,1,i-2))
2457 muder(k,i-2)=Ub2der(k,i-2)
2459 c if (i.gt. iatel_s+1 .and. i.lt.iatel_e+4) then
2460 if (i.gt. nnt+1 .and. i.lt.nct+1) then
2461 if (itype(i-1).le.ntyp) then
2462 iti1 = itortyp(itype(i-1))
2470 mu(k,i-2)=Ub2(k,i-2)+b1(k,i-1)
2473 write (iout,'(2hmu,i3,3f8.1,12f10.5)') i-2,rad2deg*theta(i-1),
2474 & rad2deg*theta(i),rad2deg*phi(i),mu(1,i-2),mu(2,i-2),
2475 & -b2(1,i-2),b2(2,i-2),b1(1,i-2),b1(2,i-2),
2476 & dsqrt(b2(1,i-1)**2+b2(2,i-1)**2)
2477 & +dsqrt(b1(1,i-1)**2+b1(2,i-1)**2),
2478 & ((ee(l,k,i-2),l=1,2),k=1,2),eenew(1,itortyp(iti))
2480 cd write (iout,*) 'mu ',mu(:,i-2)
2481 cd write (iout,*) 'mu1',mu1(:,i-2)
2482 cd write (iout,*) 'mu2',mu2(:,i-2)
2483 if (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or.wcorr6.gt.0.0d0)
2485 call matmat2(CC(1,1,iti1),Ugder(1,1,i-2),CUgder(1,1,i-2))
2486 call matmat2(DD(1,1,iti),Ugder(1,1,i-2),DUgder(1,1,i-2))
2487 call matmat2(Dtilde(1,1,iti),Ug2der(1,1,i-2),DtUg2der(1,1,i-2))
2488 call matvec2(Ctilde(1,1,iti1),obrot_der(1,i-2),Ctobrder(1,i-2))
2489 call matvec2(Dtilde(1,1,iti),obrot2_der(1,i-2),Dtobr2der(1,i-2))
2490 C Vectors and matrices dependent on a single virtual-bond dihedral.
2491 call matvec2(DD(1,1,iti),b1tilde(1,i-1),auxvec(1))
2492 call matvec2(Ug2(1,1,i-2),auxvec(1),Ug2Db1t(1,i-2))
2493 call matvec2(Ug2der(1,1,i-2),auxvec(1),Ug2Db1tder(1,i-2))
2494 call matvec2(CC(1,1,iti1),Ub2(1,i-2),CUgb2(1,i-2))
2495 call matvec2(CC(1,1,iti1),Ub2der(1,i-2),CUgb2der(1,i-2))
2496 call matmat2(EUg(1,1,i-2),CC(1,1,iti1),EUgC(1,1,i-2))
2497 call matmat2(EUgder(1,1,i-2),CC(1,1,iti1),EUgCder(1,1,i-2))
2498 call matmat2(EUg(1,1,i-2),DD(1,1,iti1),EUgD(1,1,i-2))
2499 call matmat2(EUgder(1,1,i-2),DD(1,1,iti1),EUgDder(1,1,i-2))
2502 C Matrices dependent on two consecutive virtual-bond dihedrals.
2503 C The order of matrices is from left to right.
2504 if (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or.wcorr6.gt.0.0d0)
2506 c do i=max0(ivec_start,2),ivec_end
2508 call matmat2(DtUg2(1,1,i-1),EUg(1,1,i),DtUg2EUg(1,1,i))
2509 call matmat2(DtUg2der(1,1,i-1),EUg(1,1,i),DtUg2EUgder(1,1,1,i))
2510 call matmat2(DtUg2(1,1,i-1),EUgder(1,1,i),DtUg2EUgder(1,1,2,i))
2511 call transpose2(DtUg2(1,1,i-1),auxmat(1,1))
2512 call matmat2(auxmat(1,1),EUg(1,1,i),Ug2DtEUg(1,1,i))
2513 call matmat2(auxmat(1,1),EUgder(1,1,i),Ug2DtEUgder(1,1,2,i))
2514 call transpose2(DtUg2der(1,1,i-1),auxmat(1,1))
2515 call matmat2(auxmat(1,1),EUg(1,1,i),Ug2DtEUgder(1,1,1,i))
2518 #if defined(MPI) && defined(PARMAT)
2520 c if (fg_rank.eq.0) then
2521 write (iout,*) "Arrays UG and UGDER before GATHER"
2523 write (iout,'(i5,4f10.5,5x,4f10.5)') i,
2524 & ((ug(l,k,i),l=1,2),k=1,2),
2525 & ((ugder(l,k,i),l=1,2),k=1,2)
2527 write (iout,*) "Arrays UG2 and UG2DER"
2529 write (iout,'(i5,4f10.5,5x,4f10.5)') i,
2530 & ((ug2(l,k,i),l=1,2),k=1,2),
2531 & ((ug2der(l,k,i),l=1,2),k=1,2)
2533 write (iout,*) "Arrays OBROT OBROT2 OBROTDER and OBROT2DER"
2535 write (iout,'(i5,4f10.5,5x,4f10.5)') i,
2536 & (obrot(k,i),k=1,2),(obrot2(k,i),k=1,2),
2537 & (obrot_der(k,i),k=1,2),(obrot2_der(k,i),k=1,2)
2539 write (iout,*) "Arrays COSTAB SINTAB COSTAB2 and SINTAB2"
2541 write (iout,'(i5,4f10.5,5x,4f10.5)') i,
2542 & costab(i),sintab(i),costab2(i),sintab2(i)
2544 write (iout,*) "Array MUDER"
2546 write (iout,'(i5,2f10.5)') i,muder(1,i),muder(2,i)
2550 if (nfgtasks.gt.1) then
2552 c write(iout,*)"Processor",fg_rank,kolor," ivec_start",ivec_start,
2553 c & " ivec_displ",(ivec_displ(i),i=0,nfgtasks-1),
2554 c & " ivec_count",(ivec_count(i),i=0,nfgtasks-1)
2556 call MPI_Allgatherv(Ub2(1,ivec_start),ivec_count(fg_rank1),
2557 & MPI_MU,Ub2(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2559 call MPI_Allgatherv(Ub2der(1,ivec_start),ivec_count(fg_rank1),
2560 & MPI_MU,Ub2der(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2562 call MPI_Allgatherv(mu(1,ivec_start),ivec_count(fg_rank1),
2563 & MPI_MU,mu(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2565 call MPI_Allgatherv(muder(1,ivec_start),ivec_count(fg_rank1),
2566 & MPI_MU,muder(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2568 call MPI_Allgatherv(Eug(1,1,ivec_start),ivec_count(fg_rank1),
2569 & MPI_MAT1,Eug(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2571 call MPI_Allgatherv(Eugder(1,1,ivec_start),ivec_count(fg_rank1),
2572 & MPI_MAT1,Eugder(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2574 call MPI_Allgatherv(costab(ivec_start),ivec_count(fg_rank1),
2575 & MPI_DOUBLE_PRECISION,costab(1),ivec_count(0),ivec_displ(0),
2576 & MPI_DOUBLE_PRECISION,FG_COMM1,IERR)
2577 call MPI_Allgatherv(sintab(ivec_start),ivec_count(fg_rank1),
2578 & MPI_DOUBLE_PRECISION,sintab(1),ivec_count(0),ivec_displ(0),
2579 & MPI_DOUBLE_PRECISION,FG_COMM1,IERR)
2580 call MPI_Allgatherv(costab2(ivec_start),ivec_count(fg_rank1),
2581 & MPI_DOUBLE_PRECISION,costab2(1),ivec_count(0),ivec_displ(0),
2582 & MPI_DOUBLE_PRECISION,FG_COMM1,IERR)
2583 call MPI_Allgatherv(sintab2(ivec_start),ivec_count(fg_rank1),
2584 & MPI_DOUBLE_PRECISION,sintab2(1),ivec_count(0),ivec_displ(0),
2585 & MPI_DOUBLE_PRECISION,FG_COMM1,IERR)
2586 if (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0)
2588 call MPI_Allgatherv(Ctobr(1,ivec_start),ivec_count(fg_rank1),
2589 & MPI_MU,Ctobr(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2591 call MPI_Allgatherv(Ctobrder(1,ivec_start),ivec_count(fg_rank1),
2592 & MPI_MU,Ctobrder(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2594 call MPI_Allgatherv(Dtobr2(1,ivec_start),ivec_count(fg_rank1),
2595 & MPI_MU,Dtobr2(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2597 call MPI_Allgatherv(Dtobr2der(1,ivec_start),ivec_count(fg_rank1),
2598 & MPI_MU,Dtobr2der(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2600 call MPI_Allgatherv(Ug2Db1t(1,ivec_start),ivec_count(fg_rank1),
2601 & MPI_MU,Ug2Db1t(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2603 call MPI_Allgatherv(Ug2Db1tder(1,ivec_start),
2604 & ivec_count(fg_rank1),
2605 & MPI_MU,Ug2Db1tder(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2607 call MPI_Allgatherv(CUgb2(1,ivec_start),ivec_count(fg_rank1),
2608 & MPI_MU,CUgb2(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2610 call MPI_Allgatherv(CUgb2der(1,ivec_start),ivec_count(fg_rank1),
2611 & MPI_MU,CUgb2der(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2613 call MPI_Allgatherv(Cug(1,1,ivec_start),ivec_count(fg_rank1),
2614 & MPI_MAT1,Cug(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2616 call MPI_Allgatherv(Cugder(1,1,ivec_start),ivec_count(fg_rank1),
2617 & MPI_MAT1,Cugder(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2619 call MPI_Allgatherv(Dug(1,1,ivec_start),ivec_count(fg_rank1),
2620 & MPI_MAT1,Dug(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2622 call MPI_Allgatherv(Dugder(1,1,ivec_start),ivec_count(fg_rank1),
2623 & MPI_MAT1,Dugder(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2625 call MPI_Allgatherv(Dtug2(1,1,ivec_start),ivec_count(fg_rank1),
2626 & MPI_MAT1,Dtug2(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2628 call MPI_Allgatherv(Dtug2der(1,1,ivec_start),
2629 & ivec_count(fg_rank1),
2630 & MPI_MAT1,Dtug2der(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2632 call MPI_Allgatherv(EugC(1,1,ivec_start),ivec_count(fg_rank1),
2633 & MPI_MAT1,EugC(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2635 call MPI_Allgatherv(EugCder(1,1,ivec_start),ivec_count(fg_rank1),
2636 & MPI_MAT1,EugCder(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2638 call MPI_Allgatherv(EugD(1,1,ivec_start),ivec_count(fg_rank1),
2639 & MPI_MAT1,EugD(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2641 call MPI_Allgatherv(EugDder(1,1,ivec_start),ivec_count(fg_rank1),
2642 & MPI_MAT1,EugDder(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2644 call MPI_Allgatherv(DtUg2EUg(1,1,ivec_start),
2645 & ivec_count(fg_rank1),
2646 & MPI_MAT1,DtUg2EUg(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2648 call MPI_Allgatherv(Ug2DtEUg(1,1,ivec_start),
2649 & ivec_count(fg_rank1),
2650 & MPI_MAT1,Ug2DtEUg(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2652 call MPI_Allgatherv(DtUg2EUgder(1,1,1,ivec_start),
2653 & ivec_count(fg_rank1),
2654 & MPI_MAT2,DtUg2EUgder(1,1,1,1),ivec_count(0),ivec_displ(0),
2655 & MPI_MAT2,FG_COMM1,IERR)
2656 call MPI_Allgatherv(Ug2DtEUgder(1,1,1,ivec_start),
2657 & ivec_count(fg_rank1),
2658 & MPI_MAT2,Ug2DtEUgder(1,1,1,1),ivec_count(0),ivec_displ(0),
2659 & MPI_MAT2,FG_COMM1,IERR)
2662 c Passes matrix info through the ring
2665 if (irecv.lt.0) irecv=nfgtasks1-1
2668 if (inext.ge.nfgtasks1) inext=0
2670 c write (iout,*) "isend",isend," irecv",irecv
2672 lensend=lentyp(isend)
2673 lenrecv=lentyp(irecv)
2674 c write (iout,*) "lensend",lensend," lenrecv",lenrecv
2675 c call MPI_SENDRECV(ug(1,1,ivec_displ(isend)+1),1,
2676 c & MPI_ROTAT1(lensend),inext,2200+isend,
2677 c & ug(1,1,ivec_displ(irecv)+1),1,MPI_ROTAT1(lenrecv),
2678 c & iprev,2200+irecv,FG_COMM,status,IERR)
2679 c write (iout,*) "Gather ROTAT1"
2681 c call MPI_SENDRECV(obrot(1,ivec_displ(isend)+1),1,
2682 c & MPI_ROTAT2(lensend),inext,3300+isend,
2683 c & obrot(1,ivec_displ(irecv)+1),1,MPI_ROTAT2(lenrecv),
2684 c & iprev,3300+irecv,FG_COMM,status,IERR)
2685 c write (iout,*) "Gather ROTAT2"
2687 call MPI_SENDRECV(costab(ivec_displ(isend)+1),1,
2688 & MPI_ROTAT_OLD(lensend),inext,4400+isend,
2689 & costab(ivec_displ(irecv)+1),1,MPI_ROTAT_OLD(lenrecv),
2690 & iprev,4400+irecv,FG_COMM,status,IERR)
2691 c write (iout,*) "Gather ROTAT_OLD"
2693 call MPI_SENDRECV(mu(1,ivec_displ(isend)+1),1,
2694 & MPI_PRECOMP11(lensend),inext,5500+isend,
2695 & mu(1,ivec_displ(irecv)+1),1,MPI_PRECOMP11(lenrecv),
2696 & iprev,5500+irecv,FG_COMM,status,IERR)
2697 c write (iout,*) "Gather PRECOMP11"
2699 call MPI_SENDRECV(Eug(1,1,ivec_displ(isend)+1),1,
2700 & MPI_PRECOMP12(lensend),inext,6600+isend,
2701 & Eug(1,1,ivec_displ(irecv)+1),1,MPI_PRECOMP12(lenrecv),
2702 & iprev,6600+irecv,FG_COMM,status,IERR)
2703 c write (iout,*) "Gather PRECOMP12"
2705 if (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0)
2707 call MPI_SENDRECV(ug2db1t(1,ivec_displ(isend)+1),1,
2708 & MPI_ROTAT2(lensend),inext,7700+isend,
2709 & ug2db1t(1,ivec_displ(irecv)+1),1,MPI_ROTAT2(lenrecv),
2710 & iprev,7700+irecv,FG_COMM,status,IERR)
2711 c write (iout,*) "Gather PRECOMP21"
2713 call MPI_SENDRECV(EUgC(1,1,ivec_displ(isend)+1),1,
2714 & MPI_PRECOMP22(lensend),inext,8800+isend,
2715 & EUgC(1,1,ivec_displ(irecv)+1),1,MPI_PRECOMP22(lenrecv),
2716 & iprev,8800+irecv,FG_COMM,status,IERR)
2717 c write (iout,*) "Gather PRECOMP22"
2719 call MPI_SENDRECV(Ug2DtEUgder(1,1,1,ivec_displ(isend)+1),1,
2720 & MPI_PRECOMP23(lensend),inext,9900+isend,
2721 & Ug2DtEUgder(1,1,1,ivec_displ(irecv)+1),1,
2722 & MPI_PRECOMP23(lenrecv),
2723 & iprev,9900+irecv,FG_COMM,status,IERR)
2724 c write (iout,*) "Gather PRECOMP23"
2729 if (irecv.lt.0) irecv=nfgtasks1-1
2732 time_gather=time_gather+MPI_Wtime()-time00
2735 c if (fg_rank.eq.0) then
2736 write (iout,*) "Arrays UG and UGDER"
2738 write (iout,'(i5,4f10.5,5x,4f10.5)') i,
2739 & ((ug(l,k,i),l=1,2),k=1,2),
2740 & ((ugder(l,k,i),l=1,2),k=1,2)
2742 write (iout,*) "Arrays UG2 and UG2DER"
2744 write (iout,'(i5,4f10.5,5x,4f10.5)') i,
2745 & ((ug2(l,k,i),l=1,2),k=1,2),
2746 & ((ug2der(l,k,i),l=1,2),k=1,2)
2748 write (iout,*) "Arrays OBROT OBROT2 OBROTDER and OBROT2DER"
2750 write (iout,'(i5,4f10.5,5x,4f10.5)') i,
2751 & (obrot(k,i),k=1,2),(obrot2(k,i),k=1,2),
2752 & (obrot_der(k,i),k=1,2),(obrot2_der(k,i),k=1,2)
2754 write (iout,*) "Arrays COSTAB SINTAB COSTAB2 and SINTAB2"
2756 write (iout,'(i5,4f10.5,5x,4f10.5)') i,
2757 & costab(i),sintab(i),costab2(i),sintab2(i)
2759 write (iout,*) "Array MUDER"
2761 write (iout,'(i5,2f10.5)') i,muder(1,i),muder(2,i)
2767 cd iti = itortyp(itype(i))
2770 cd write (iout,'(2f10.5,5x,2f10.5,5x,2f10.5)')
2771 cd & (EE(j,k,iti),k=1,2),(Ug(j,k,i),k=1,2),(EUg(j,k,i),k=1,2)
2776 C--------------------------------------------------------------------------
2777 subroutine eelec(ees,evdw1,eel_loc,eello_turn3,eello_turn4)
2779 C This subroutine calculates the average interaction energy and its gradient
2780 C in the virtual-bond vectors between non-adjacent peptide groups, based on
2781 C the potential described in Liwo et al., Protein Sci., 1993, 2, 1715.
2782 C The potential depends both on the distance of peptide-group centers and on
2783 C the orientation of the CA-CA virtual bonds.
2785 implicit real*8 (a-h,o-z)
2789 include 'DIMENSIONS'
2790 include 'COMMON.CONTROL'
2791 include 'COMMON.SETUP'
2792 include 'COMMON.IOUNITS'
2793 include 'COMMON.GEO'
2794 include 'COMMON.VAR'
2795 include 'COMMON.LOCAL'
2796 include 'COMMON.CHAIN'
2797 include 'COMMON.DERIV'
2798 include 'COMMON.INTERACT'
2799 include 'COMMON.CONTACTS'
2800 include 'COMMON.TORSION'
2801 include 'COMMON.VECTORS'
2802 include 'COMMON.FFIELD'
2803 include 'COMMON.TIME1'
2804 dimension ggg(3),gggp(3),gggm(3),erij(3),dcosb(3),dcosg(3),
2805 & erder(3,3),uryg(3,3),urzg(3,3),vryg(3,3),vrzg(3,3)
2806 double precision acipa(2,2),agg(3,4),aggi(3,4),aggi1(3,4),
2807 & aggj(3,4),aggj1(3,4),a_temp(2,2),muij(4),gmuij(4)
2808 common /locel/ a_temp,agg,aggi,aggi1,aggj,aggj1,a22,a23,a32,a33,
2809 & dxi,dyi,dzi,dx_normi,dy_normi,dz_normi,xmedi,ymedi,zmedi,
2811 c 4/26/02 - AL scaling factor for 1,4 repulsive VDW interactions
2813 double precision scal_el /1.0d0/
2815 double precision scal_el /0.5d0/
2818 C 13-go grudnia roku pamietnego...
2819 double precision unmat(3,3) /1.0d0,0.0d0,0.0d0,
2820 & 0.0d0,1.0d0,0.0d0,
2821 & 0.0d0,0.0d0,1.0d0/
2822 cd write(iout,*) 'In EELEC'
2824 cd write(iout,*) 'Type',i
2825 cd write(iout,*) 'B1',B1(:,i)
2826 cd write(iout,*) 'B2',B2(:,i)
2827 cd write(iout,*) 'CC',CC(:,:,i)
2828 cd write(iout,*) 'DD',DD(:,:,i)
2829 cd write(iout,*) 'EE',EE(:,:,i)
2831 cd call check_vecgrad
2833 if (icheckgrad.eq.1) then
2835 fac=1.0d0/dsqrt(scalar(dc(1,i),dc(1,i)))
2837 dc_norm(k,i)=dc(k,i)*fac
2839 c write (iout,*) 'i',i,' fac',fac
2842 if (wel_loc.gt.0.0d0 .or. wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0
2843 & .or. wcorr6.gt.0.0d0 .or. wturn3.gt.0.0d0 .or.
2844 & wturn4.gt.0.0d0 .or. wturn6.gt.0.0d0) then
2845 c call vec_and_deriv
2851 time_mat=time_mat+MPI_Wtime()-time01
2855 cd write (iout,*) 'i=',i
2857 cd write (iout,'(i5,2f10.5)') k,uy(k,i),uz(k,i)
2860 cd write (iout,'(f10.5,2x,3f10.5,2x,3f10.5)')
2861 cd & uz(k,i),(uzgrad(k,l,1,i),l=1,3),(uzgrad(k,l,2,i),l=1,3)
2874 cd print '(a)','Enter EELEC'
2875 cd write (iout,*) 'iatel_s=',iatel_s,' iatel_e=',iatel_e
2877 gel_loc_loc(i)=0.0d0
2882 c 9/27/08 AL Split the interaction loop to ensure load balancing of turn terms
2884 C Loop over i,i+2 and i,i+3 pairs of the peptide groups
2886 do i=iturn3_start,iturn3_end
2887 if (itype(i).eq.ntyp1 .or. itype(i+1).eq.ntyp1
2888 & .or. itype(i+2).eq.ntyp1 .or. itype(i+3).eq.ntyp1) cycle
2892 dx_normi=dc_norm(1,i)
2893 dy_normi=dc_norm(2,i)
2894 dz_normi=dc_norm(3,i)
2895 xmedi=c(1,i)+0.5d0*dxi
2896 ymedi=c(2,i)+0.5d0*dyi
2897 zmedi=c(3,i)+0.5d0*dzi
2899 call eelecij(i,i+2,ees,evdw1,eel_loc)
2900 if (wturn3.gt.0.0d0) call eturn3(i,eello_turn3)
2901 num_cont_hb(i)=num_conti
2903 do i=iturn4_start,iturn4_end
2904 if (itype(i).eq.ntyp1 .or. itype(i+1).eq.ntyp1
2905 & .or. itype(i+3).eq.ntyp1
2906 & .or. itype(i+4).eq.ntyp1) cycle
2910 dx_normi=dc_norm(1,i)
2911 dy_normi=dc_norm(2,i)
2912 dz_normi=dc_norm(3,i)
2913 xmedi=c(1,i)+0.5d0*dxi
2914 ymedi=c(2,i)+0.5d0*dyi
2915 zmedi=c(3,i)+0.5d0*dzi
2916 num_conti=num_cont_hb(i)
2917 c write(iout,*) "JESTEM W PETLI"
2918 call eelecij(i,i+3,ees,evdw1,eel_loc)
2919 if (wturn4.gt.0.0d0 .and. itype(i+2).ne.ntyp1)
2920 & call eturn4(i,eello_turn4)
2921 num_cont_hb(i)=num_conti
2924 c Loop over all pairs of interacting peptide groups except i,i+2 and i,i+3
2926 do i=iatel_s,iatel_e
2928 if (itype(i).eq.ntyp1 .or. itype(i+1).eq.ntyp1) cycle
2932 dx_normi=dc_norm(1,i)
2933 dy_normi=dc_norm(2,i)
2934 dz_normi=dc_norm(3,i)
2935 xmedi=c(1,i)+0.5d0*dxi
2936 ymedi=c(2,i)+0.5d0*dyi
2937 zmedi=c(3,i)+0.5d0*dzi
2938 c write (iout,*) 'i',i,' ielstart',ielstart(i),' ielend',ielend(i)
2939 num_conti=num_cont_hb(i)
2940 do j=ielstart(i),ielend(i)
2942 c write (iout,*) 'tu wchodze',i,j,itype(i),itype(j)
2943 if (itype(j).eq.ntyp1.or. itype(j+1).eq.ntyp1) cycle
2944 call eelecij(i,j,ees,evdw1,eel_loc)
2946 num_cont_hb(i)=num_conti
2948 c write (iout,*) "Number of loop steps in EELEC:",ind
2950 cd write (iout,'(i3,3f10.5,5x,3f10.5)')
2951 cd & i,(gel_loc(k,i),k=1,3),gel_loc_loc(i)
2953 c 12/7/99 Adam eello_turn3 will be considered as a separate energy term
2954 ccc eel_loc=eel_loc+eello_turn3
2955 cd print *,"Processor",fg_rank," t_eelecij",t_eelecij
2958 C-------------------------------------------------------------------------------
2959 subroutine eelecij(i,j,ees,evdw1,eel_loc)
2960 implicit real*8 (a-h,o-z)
2961 include 'DIMENSIONS'
2965 include 'COMMON.CONTROL'
2966 include 'COMMON.IOUNITS'
2967 include 'COMMON.GEO'
2968 include 'COMMON.VAR'
2969 include 'COMMON.LOCAL'
2970 include 'COMMON.CHAIN'
2971 include 'COMMON.DERIV'
2972 include 'COMMON.INTERACT'
2973 include 'COMMON.CONTACTS'
2974 include 'COMMON.TORSION'
2975 include 'COMMON.VECTORS'
2976 include 'COMMON.FFIELD'
2977 include 'COMMON.TIME1'
2978 dimension ggg(3),gggp(3),gggm(3),erij(3),dcosb(3),dcosg(3),
2979 & erder(3,3),uryg(3,3),urzg(3,3),vryg(3,3),vrzg(3,3)
2980 double precision acipa(2,2),agg(3,4),aggi(3,4),aggi1(3,4),
2981 & aggj(3,4),aggj1(3,4),a_temp(2,2),muij(4),gmuij1(4),gmuji1(4),
2982 & gmuij2(4),gmuji2(4)
2983 common /locel/ a_temp,agg,aggi,aggi1,aggj,aggj1,a22,a23,a32,a33,
2984 & dxi,dyi,dzi,dx_normi,dy_normi,dz_normi,xmedi,ymedi,zmedi,
2986 c 4/26/02 - AL scaling factor for 1,4 repulsive VDW interactions
2988 double precision scal_el /1.0d0/
2990 double precision scal_el /0.5d0/
2993 C 13-go grudnia roku pamietnego...
2994 double precision unmat(3,3) /1.0d0,0.0d0,0.0d0,
2995 & 0.0d0,1.0d0,0.0d0,
2996 & 0.0d0,0.0d0,1.0d0/
2997 c time00=MPI_Wtime()
2998 cd write (iout,*) "eelecij",i,j
3002 if (j.eq.i+2 .and. itelj.eq.2) iteli=2
3003 aaa=app(iteli,itelj)
3004 bbb=bpp(iteli,itelj)
3005 ael6i=ael6(iteli,itelj)
3006 ael3i=ael3(iteli,itelj)
3010 dx_normj=dc_norm(1,j)
3011 dy_normj=dc_norm(2,j)
3012 dz_normj=dc_norm(3,j)
3013 xj=c(1,j)+0.5D0*dxj-xmedi
3014 yj=c(2,j)+0.5D0*dyj-ymedi
3015 zj=c(3,j)+0.5D0*dzj-zmedi
3016 rij=xj*xj+yj*yj+zj*zj
3022 cosa=dx_normi*dx_normj+dy_normi*dy_normj+dz_normi*dz_normj
3023 cosb=(xj*dx_normi+yj*dy_normi+zj*dz_normi)*rmij
3024 cosg=(xj*dx_normj+yj*dy_normj+zj*dz_normj)*rmij
3025 fac=cosa-3.0D0*cosb*cosg
3027 c 4/26/02 - AL scaling down 1,4 repulsive VDW interactions
3028 if (j.eq.i+2) ev1=scal_el*ev1
3033 el1=fac3*(4.0D0+fac*fac-3.0D0*(cosb*cosb+cosg*cosg))
3036 C 12/26/95 - for the evaluation of multi-body H-bonding interactions
3037 ees0ij=4.0D0+fac*fac-3.0D0*(cosb*cosb+cosg*cosg)
3040 cd write(iout,'(2(2i3,2x),7(1pd12.4)/2(3(1pd12.4),5x)/)')
3041 cd & iteli,i,itelj,j,aaa,bbb,ael6i,ael3i,
3042 cd & 1.0D0/dsqrt(rrmij),evdwij,eesij,
3043 cd & xmedi,ymedi,zmedi,xj,yj,zj
3045 if (energy_dec) then
3046 write (iout,'(a6,2i5,0pf7.3,2i5,2e11.3)')
3048 &,iteli,itelj,aaa,evdw1
3049 write (iout,'(a6,2i5,0pf7.3)') 'ees',i,j,eesij
3053 C Calculate contributions to the Cartesian gradient.
3056 facvdw=-6*rrmij*(ev1+evdwij)
3057 facel=-3*rrmij*(el1+eesij)
3063 * Radial derivatives. First process both termini of the fragment (i,j)
3069 c ghalf=0.5D0*ggg(k)
3070 c gelc(k,i)=gelc(k,i)+ghalf
3071 c gelc(k,j)=gelc(k,j)+ghalf
3073 c 9/28/08 AL Gradient compotents will be summed only at the end
3075 gelc_long(k,j)=gelc_long(k,j)+ggg(k)
3076 gelc_long(k,i)=gelc_long(k,i)-ggg(k)
3079 * Loop over residues i+1 thru j-1.
3083 cgrad gelc(l,k)=gelc(l,k)+ggg(l)
3090 c ghalf=0.5D0*ggg(k)
3091 c gvdwpp(k,i)=gvdwpp(k,i)+ghalf
3092 c gvdwpp(k,j)=gvdwpp(k,j)+ghalf
3094 c 9/28/08 AL Gradient compotents will be summed only at the end
3096 gvdwpp(k,j)=gvdwpp(k,j)+ggg(k)
3097 gvdwpp(k,i)=gvdwpp(k,i)-ggg(k)
3100 * Loop over residues i+1 thru j-1.
3104 cgrad gvdwpp(l,k)=gvdwpp(l,k)+ggg(l)
3111 fac=-3*rrmij*(facvdw+facvdw+facel)
3116 * Radial derivatives. First process both termini of the fragment (i,j)
3122 c ghalf=0.5D0*ggg(k)
3123 c gelc(k,i)=gelc(k,i)+ghalf
3124 c gelc(k,j)=gelc(k,j)+ghalf
3126 c 9/28/08 AL Gradient compotents will be summed only at the end
3128 gelc_long(k,j)=gelc(k,j)+ggg(k)
3129 gelc_long(k,i)=gelc(k,i)-ggg(k)
3132 * Loop over residues i+1 thru j-1.
3136 cgrad gelc(l,k)=gelc(l,k)+ggg(l)
3139 c 9/28/08 AL Gradient compotents will be summed only at the end
3144 gvdwpp(k,j)=gvdwpp(k,j)+ggg(k)
3145 gvdwpp(k,i)=gvdwpp(k,i)-ggg(k)
3151 ecosa=2.0D0*fac3*fac1+fac4
3154 ecosb=(fac3*(fac1*cosg+cosb)+cosg*fac4)
3155 ecosg=(fac3*(fac1*cosb+cosg)+cosb*fac4)
3157 dcosb(k)=rmij*(dc_norm(k,i)-erij(k)*cosb)
3158 dcosg(k)=rmij*(dc_norm(k,j)-erij(k)*cosg)
3160 cd print '(2i3,2(3(1pd14.5),3x))',i,j,(dcosb(k),k=1,3),
3161 cd & (dcosg(k),k=1,3)
3163 ggg(k)=ecosb*dcosb(k)+ecosg*dcosg(k)
3166 c ghalf=0.5D0*ggg(k)
3167 c gelc(k,i)=gelc(k,i)+ghalf
3168 c & +(ecosa*(dc_norm(k,j)-cosa*dc_norm(k,i))
3169 c & + ecosb*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1)
3170 c gelc(k,j)=gelc(k,j)+ghalf
3171 c & +(ecosa*(dc_norm(k,i)-cosa*dc_norm(k,j))
3172 c & + ecosg*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1)
3176 cgrad gelc(l,k)=gelc(l,k)+ggg(l)
3181 & +(ecosa*(dc_norm(k,j)-cosa*dc_norm(k,i))
3182 & + ecosb*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1)
3184 & +(ecosa*(dc_norm(k,i)-cosa*dc_norm(k,j))
3185 & + ecosg*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1)
3186 gelc_long(k,j)=gelc_long(k,j)+ggg(k)
3187 gelc_long(k,i)=gelc_long(k,i)-ggg(k)
3189 IF (wel_loc.gt.0.0d0 .or. wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0
3190 & .or. wcorr6.gt.0.0d0 .or. wturn3.gt.0.0d0
3191 & .or. wturn4.gt.0.0d0 .or. wturn6.gt.0.0d0) THEN
3193 C 9/25/99 Mixed third-order local-electrostatic terms. The local-interaction
3194 C energy of a peptide unit is assumed in the form of a second-order
3195 C Fourier series in the angles lambda1 and lambda2 (see Nishikawa et al.
3196 C Macromolecules, 1974, 7, 797-806 for definition). This correlation terms
3197 C are computed for EVERY pair of non-contiguous peptide groups.
3200 if (j.lt.nres-1) then
3212 muij(kkk)=mu(k,i)*mu(l,j)
3214 gmuij1(kkk)=gtb1(k,i+1)*mu(l,j)
3215 c write(iout,*) 'kkk=', gtb1(k,i)*mu(l,j),gtb1(k,i),k,i
3216 gmuij2(kkk)=gUb2(k,i)*mu(l,j)
3217 gmuji1(kkk)=mu(k,i)*gtb1(l,j+1)
3218 c write(iout,*) 'kkk=', gtb1(k,i)*mu(l,j),gtb1(l,j),l,j
3219 gmuji2(kkk)=mu(k,i)*gUb2(l,j)
3223 cd write (iout,*) 'EELEC: i',i,' j',j
3224 cd write (iout,*) 'j',j,' j1',j1,' j2',j2
3225 cd write(iout,*) 'muij',muij
3226 ury=scalar(uy(1,i),erij)
3227 urz=scalar(uz(1,i),erij)
3228 vry=scalar(uy(1,j),erij)
3229 vrz=scalar(uz(1,j),erij)
3230 a22=scalar(uy(1,i),uy(1,j))-3*ury*vry
3231 a23=scalar(uy(1,i),uz(1,j))-3*ury*vrz
3232 a32=scalar(uz(1,i),uy(1,j))-3*urz*vry
3233 a33=scalar(uz(1,i),uz(1,j))-3*urz*vrz
3234 fac=dsqrt(-ael6i)*r3ij
3239 cd write (iout,'(4i5,4f10.5)')
3240 cd & i,itortyp(itype(i)),j,itortyp(itype(j)),a22,a23,a32,a33
3241 cd write (iout,'(6f10.5)') (muij(k),k=1,4),fac,eel_loc_ij
3242 cd write (iout,'(2(3f10.5,5x)/2(3f10.5,5x))') uy(:,i),uz(:,i),
3243 cd & uy(:,j),uz(:,j)
3244 cd write (iout,'(4f10.5)')
3245 cd & scalar(uy(1,i),uy(1,j)),scalar(uy(1,i),uz(1,j)),
3246 cd & scalar(uz(1,i),uy(1,j)),scalar(uz(1,i),uz(1,j))
3247 cd write (iout,'(4f10.5)') ury,urz,vry,vrz
3248 cd write (iout,'(9f10.5/)')
3249 cd & fac22,a22,fac23,a23,fac32,a32,fac33,a33,eel_loc_ij
3250 C Derivatives of the elements of A in virtual-bond vectors
3251 call unormderiv(erij(1),unmat(1,1),rmij,erder(1,1))
3253 uryg(k,1)=scalar(erder(1,k),uy(1,i))
3254 uryg(k,2)=scalar(uygrad(1,k,1,i),erij(1))
3255 uryg(k,3)=scalar(uygrad(1,k,2,i),erij(1))
3256 urzg(k,1)=scalar(erder(1,k),uz(1,i))
3257 urzg(k,2)=scalar(uzgrad(1,k,1,i),erij(1))
3258 urzg(k,3)=scalar(uzgrad(1,k,2,i),erij(1))
3259 vryg(k,1)=scalar(erder(1,k),uy(1,j))
3260 vryg(k,2)=scalar(uygrad(1,k,1,j),erij(1))
3261 vryg(k,3)=scalar(uygrad(1,k,2,j),erij(1))
3262 vrzg(k,1)=scalar(erder(1,k),uz(1,j))
3263 vrzg(k,2)=scalar(uzgrad(1,k,1,j),erij(1))
3264 vrzg(k,3)=scalar(uzgrad(1,k,2,j),erij(1))
3266 C Compute radial contributions to the gradient
3284 C Add the contributions coming from er
3287 agg(k,1)=agg(k,1)+fac3*(uryg(k,1)*vry+vryg(k,1)*ury)
3288 agg(k,2)=agg(k,2)+fac3*(uryg(k,1)*vrz+vrzg(k,1)*ury)
3289 agg(k,3)=agg(k,3)+fac3*(urzg(k,1)*vry+vryg(k,1)*urz)
3290 agg(k,4)=agg(k,4)+fac3*(urzg(k,1)*vrz+vrzg(k,1)*urz)
3293 C Derivatives in DC(i)
3294 cgrad ghalf1=0.5d0*agg(k,1)
3295 cgrad ghalf2=0.5d0*agg(k,2)
3296 cgrad ghalf3=0.5d0*agg(k,3)
3297 cgrad ghalf4=0.5d0*agg(k,4)
3298 aggi(k,1)=fac*(scalar(uygrad(1,k,1,i),uy(1,j))
3299 & -3.0d0*uryg(k,2)*vry)!+ghalf1
3300 aggi(k,2)=fac*(scalar(uygrad(1,k,1,i),uz(1,j))
3301 & -3.0d0*uryg(k,2)*vrz)!+ghalf2
3302 aggi(k,3)=fac*(scalar(uzgrad(1,k,1,i),uy(1,j))
3303 & -3.0d0*urzg(k,2)*vry)!+ghalf3
3304 aggi(k,4)=fac*(scalar(uzgrad(1,k,1,i),uz(1,j))
3305 & -3.0d0*urzg(k,2)*vrz)!+ghalf4
3306 C Derivatives in DC(i+1)
3307 aggi1(k,1)=fac*(scalar(uygrad(1,k,2,i),uy(1,j))
3308 & -3.0d0*uryg(k,3)*vry)!+agg(k,1)
3309 aggi1(k,2)=fac*(scalar(uygrad(1,k,2,i),uz(1,j))
3310 & -3.0d0*uryg(k,3)*vrz)!+agg(k,2)
3311 aggi1(k,3)=fac*(scalar(uzgrad(1,k,2,i),uy(1,j))
3312 & -3.0d0*urzg(k,3)*vry)!+agg(k,3)
3313 aggi1(k,4)=fac*(scalar(uzgrad(1,k,2,i),uz(1,j))
3314 & -3.0d0*urzg(k,3)*vrz)!+agg(k,4)
3315 C Derivatives in DC(j)
3316 aggj(k,1)=fac*(scalar(uygrad(1,k,1,j),uy(1,i))
3317 & -3.0d0*vryg(k,2)*ury)!+ghalf1
3318 aggj(k,2)=fac*(scalar(uzgrad(1,k,1,j),uy(1,i))
3319 & -3.0d0*vrzg(k,2)*ury)!+ghalf2
3320 aggj(k,3)=fac*(scalar(uygrad(1,k,1,j),uz(1,i))
3321 & -3.0d0*vryg(k,2)*urz)!+ghalf3
3322 aggj(k,4)=fac*(scalar(uzgrad(1,k,1,j),uz(1,i))
3323 & -3.0d0*vrzg(k,2)*urz)!+ghalf4
3324 C Derivatives in DC(j+1) or DC(nres-1)
3325 aggj1(k,1)=fac*(scalar(uygrad(1,k,2,j),uy(1,i))
3326 & -3.0d0*vryg(k,3)*ury)
3327 aggj1(k,2)=fac*(scalar(uzgrad(1,k,2,j),uy(1,i))
3328 & -3.0d0*vrzg(k,3)*ury)
3329 aggj1(k,3)=fac*(scalar(uygrad(1,k,2,j),uz(1,i))
3330 & -3.0d0*vryg(k,3)*urz)
3331 aggj1(k,4)=fac*(scalar(uzgrad(1,k,2,j),uz(1,i))
3332 & -3.0d0*vrzg(k,3)*urz)
3333 cgrad if (j.eq.nres-1 .and. i.lt.j-2) then
3335 cgrad aggj1(k,l)=aggj1(k,l)+agg(k,l)
3348 aggi(k,l)=-aggi(k,l)
3349 aggi1(k,l)=-aggi1(k,l)
3350 aggj(k,l)=-aggj(k,l)
3351 aggj1(k,l)=-aggj1(k,l)
3354 if (j.lt.nres-1) then
3360 aggi(k,l)=-aggi(k,l)
3361 aggi1(k,l)=-aggi1(k,l)
3362 aggj(k,l)=-aggj(k,l)
3363 aggj1(k,l)=-aggj1(k,l)
3374 aggi(k,l)=-aggi(k,l)
3375 aggi1(k,l)=-aggi1(k,l)
3376 aggj(k,l)=-aggj(k,l)
3377 aggj1(k,l)=-aggj1(k,l)
3382 IF (wel_loc.gt.0.0d0) THEN
3383 c if ((i.eq.8).and.(j.eq.14)) then
3384 C Contribution to the local-electrostatic energy coming from the i-j pair
3385 eel_loc_ij=a22*muij(1)+a23*muij(2)+a32*muij(3)
3387 C Calculate patrial derivative for theta angle
3389 geel_loc_ij=a22*gmuij1(1)
3393 c write(iout,*) "derivative over thatai"
3394 c write(iout,*) a22*gmuij1(1), a23*gmuij1(2) ,a32*gmuij1(3),
3396 gloc(nphi+i,icg)=gloc(nphi+i,icg)+
3397 & geel_loc_ij*wel_loc
3398 c write(iout,*) "derivative over thatai-1"
3399 c write(iout,*) a22*gmuij2(1), a23*gmuij2(2) ,a32*gmuij2(3),
3401 geel_loc_ij=a22*gmuij2(1)+a23*gmuij2(2)+a32*gmuij2(3)
3403 gloc(nphi+i-1,icg)=gloc(nphi+i-1,icg)+
3404 & geel_loc_ij*wel_loc
3405 geel_loc_ji=a22*gmuji1(1)+a23*gmuji1(2)+a32*gmuji1(3)
3407 c write(iout,*) "derivative over thataj"
3408 c write(iout,*) a22*gmuji1(1), a23*gmuji1(2) ,a32*gmuji1(3),
3411 gloc(nphi+j,icg)=gloc(nphi+j,icg)+
3412 & geel_loc_ji*wel_loc
3413 geel_loc_ji=a22*gmuji2(1)+a23*gmuji2(2)+a32*gmuji2(3)
3415 c write(iout,*) "derivative over thataj-1"
3416 c write(iout,*) a22*gmuji2(1), a23*gmuji2(2) ,a32*gmuji2(3),
3418 gloc(nphi+j-1,icg)=gloc(nphi+j-1,icg)+
3419 & geel_loc_ji*wel_loc
3421 cd write (iout,*) 'i',i,' j',j,' eel_loc_ij',eel_loc_ij
3423 if (energy_dec) write (iout,'(a6,2i5,0pf7.3)')
3424 & 'eelloc',i,j,eel_loc_ij
3425 c write (iout,*) a22,muij(1),a23,muij(2),a32,muij(3)
3427 eel_loc=eel_loc+eel_loc_ij
3428 C Partial derivatives in virtual-bond dihedral angles gamma
3430 & gel_loc_loc(i-1)=gel_loc_loc(i-1)+
3431 & a22*muder(1,i)*mu(1,j)+a23*muder(1,i)*mu(2,j)
3432 & +a32*muder(2,i)*mu(1,j)+a33*muder(2,i)*mu(2,j)
3433 gel_loc_loc(j-1)=gel_loc_loc(j-1)+
3434 & a22*mu(1,i)*muder(1,j)+a23*mu(1,i)*muder(2,j)
3435 & +a32*mu(2,i)*muder(1,j)+a33*mu(2,i)*muder(2,j)
3436 C Derivatives of eello in DC(i+1) thru DC(j-1) or DC(nres-2)
3438 ggg(l)=agg(l,1)*muij(1)+
3439 & agg(l,2)*muij(2)+agg(l,3)*muij(3)+agg(l,4)*muij(4)
3440 gel_loc_long(l,j)=gel_loc_long(l,j)+ggg(l)
3441 gel_loc_long(l,i)=gel_loc_long(l,i)-ggg(l)
3442 cgrad ghalf=0.5d0*ggg(l)
3443 cgrad gel_loc(l,i)=gel_loc(l,i)+ghalf
3444 cgrad gel_loc(l,j)=gel_loc(l,j)+ghalf
3448 cgrad gel_loc(l,k)=gel_loc(l,k)+ggg(l)
3451 C Remaining derivatives of eello
3453 gel_loc(l,i)=gel_loc(l,i)+aggi(l,1)*muij(1)+
3454 & aggi(l,2)*muij(2)+aggi(l,3)*muij(3)+aggi(l,4)*muij(4)
3455 gel_loc(l,i+1)=gel_loc(l,i+1)+aggi1(l,1)*muij(1)+
3456 & aggi1(l,2)*muij(2)+aggi1(l,3)*muij(3)+aggi1(l,4)*muij(4)
3457 gel_loc(l,j)=gel_loc(l,j)+aggj(l,1)*muij(1)+
3458 & aggj(l,2)*muij(2)+aggj(l,3)*muij(3)+aggj(l,4)*muij(4)
3459 gel_loc(l,j1)=gel_loc(l,j1)+aggj1(l,1)*muij(1)+
3460 & aggj1(l,2)*muij(2)+aggj1(l,3)*muij(3)+aggj1(l,4)*muij(4)
3464 C Change 12/26/95 to calculate four-body contributions to H-bonding energy
3465 c if (j.gt.i+1 .and. num_conti.le.maxconts) then
3466 if (wcorr+wcorr4+wcorr5+wcorr6.gt.0.0d0
3467 & .and. num_conti.le.maxconts) then
3468 c write (iout,*) i,j," entered corr"
3470 C Calculate the contact function. The ith column of the array JCONT will
3471 C contain the numbers of atoms that make contacts with the atom I (of numbers
3472 C greater than I). The arrays FACONT and GACONT will contain the values of
3473 C the contact function and its derivative.
3474 c r0ij=1.02D0*rpp(iteli,itelj)
3475 c r0ij=1.11D0*rpp(iteli,itelj)
3476 r0ij=2.20D0*rpp(iteli,itelj)
3477 c r0ij=1.55D0*rpp(iteli,itelj)
3478 call gcont(rij,r0ij,1.0D0,0.2d0*r0ij,fcont,fprimcont)
3479 if (fcont.gt.0.0D0) then
3480 num_conti=num_conti+1
3481 if (num_conti.gt.maxconts) then
3482 write (iout,*) 'WARNING - max. # of contacts exceeded;',
3483 & ' will skip next contacts for this conf.'
3485 jcont_hb(num_conti,i)=j
3486 cd write (iout,*) "i",i," j",j," num_conti",num_conti,
3487 cd & " jcont_hb",jcont_hb(num_conti,i)
3488 IF (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or.
3489 & wcorr6.gt.0.0d0 .or. wturn6.gt.0.0d0) THEN
3490 C 9/30/99 (AL) - store components necessary to evaluate higher-order loc-el
3492 d_cont(num_conti,i)=rij
3493 cd write (2,'(3e15.5)') rij,r0ij+0.2d0*r0ij,rij
3494 C --- Electrostatic-interaction matrix ---
3495 a_chuj(1,1,num_conti,i)=a22
3496 a_chuj(1,2,num_conti,i)=a23
3497 a_chuj(2,1,num_conti,i)=a32
3498 a_chuj(2,2,num_conti,i)=a33
3499 C --- Gradient of rij
3501 grij_hb_cont(kkk,num_conti,i)=erij(kkk)
3508 a_chuj_der(k,l,m,1,num_conti,i)=agg(m,kkll)
3509 a_chuj_der(k,l,m,2,num_conti,i)=aggi(m,kkll)
3510 a_chuj_der(k,l,m,3,num_conti,i)=aggi1(m,kkll)
3511 a_chuj_der(k,l,m,4,num_conti,i)=aggj(m,kkll)
3512 a_chuj_der(k,l,m,5,num_conti,i)=aggj1(m,kkll)
3517 IF (wcorr4.eq.0.0d0 .and. wcorr.gt.0.0d0) THEN
3518 C Calculate contact energies
3520 wij=cosa-3.0D0*cosb*cosg
3523 c fac3=dsqrt(-ael6i)/r0ij**3
3524 fac3=dsqrt(-ael6i)*r3ij
3525 c ees0pij=dsqrt(4.0D0+cosa4+wij*wij-3.0D0*cosbg1*cosbg1)
3526 ees0tmp=4.0D0+cosa4+wij*wij-3.0D0*cosbg1*cosbg1
3527 if (ees0tmp.gt.0) then
3528 ees0pij=dsqrt(ees0tmp)
3532 c ees0mij=dsqrt(4.0D0-cosa4+wij*wij-3.0D0*cosbg2*cosbg2)
3533 ees0tmp=4.0D0-cosa4+wij*wij-3.0D0*cosbg2*cosbg2
3534 if (ees0tmp.gt.0) then
3535 ees0mij=dsqrt(ees0tmp)
3540 ees0p(num_conti,i)=0.5D0*fac3*(ees0pij+ees0mij)
3541 ees0m(num_conti,i)=0.5D0*fac3*(ees0pij-ees0mij)
3542 C Diagnostics. Comment out or remove after debugging!
3543 c ees0p(num_conti,i)=0.5D0*fac3*ees0pij
3544 c ees0m(num_conti,i)=0.5D0*fac3*ees0mij
3545 c ees0m(num_conti,i)=0.0D0
3547 c write (iout,*) 'i=',i,' j=',j,' rij=',rij,' r0ij=',r0ij,
3548 c & ' ees0ij=',ees0p(num_conti,i),ees0m(num_conti,i),' fcont=',fcont
3549 C Angular derivatives of the contact function
3550 ees0pij1=fac3/ees0pij
3551 ees0mij1=fac3/ees0mij
3552 fac3p=-3.0D0*fac3*rrmij
3553 ees0pijp=0.5D0*fac3p*(ees0pij+ees0mij)
3554 ees0mijp=0.5D0*fac3p*(ees0pij-ees0mij)
3556 ecosa1= ees0pij1*( 1.0D0+0.5D0*wij)
3557 ecosb1=-1.5D0*ees0pij1*(wij*cosg+cosbg1)
3558 ecosg1=-1.5D0*ees0pij1*(wij*cosb+cosbg1)
3559 ecosa2= ees0mij1*(-1.0D0+0.5D0*wij)
3560 ecosb2=-1.5D0*ees0mij1*(wij*cosg+cosbg2)
3561 ecosg2=-1.5D0*ees0mij1*(wij*cosb-cosbg2)
3562 ecosap=ecosa1+ecosa2
3563 ecosbp=ecosb1+ecosb2
3564 ecosgp=ecosg1+ecosg2
3565 ecosam=ecosa1-ecosa2
3566 ecosbm=ecosb1-ecosb2
3567 ecosgm=ecosg1-ecosg2
3576 facont_hb(num_conti,i)=fcont
3577 fprimcont=fprimcont/rij
3578 cd facont_hb(num_conti,i)=1.0D0
3579 C Following line is for diagnostics.
3582 dcosb(k)=rmij*(dc_norm(k,i)-erij(k)*cosb)
3583 dcosg(k)=rmij*(dc_norm(k,j)-erij(k)*cosg)
3586 gggp(k)=ecosbp*dcosb(k)+ecosgp*dcosg(k)
3587 gggm(k)=ecosbm*dcosb(k)+ecosgm*dcosg(k)
3589 gggp(1)=gggp(1)+ees0pijp*xj
3590 gggp(2)=gggp(2)+ees0pijp*yj
3591 gggp(3)=gggp(3)+ees0pijp*zj
3592 gggm(1)=gggm(1)+ees0mijp*xj
3593 gggm(2)=gggm(2)+ees0mijp*yj
3594 gggm(3)=gggm(3)+ees0mijp*zj
3595 C Derivatives due to the contact function
3596 gacont_hbr(1,num_conti,i)=fprimcont*xj
3597 gacont_hbr(2,num_conti,i)=fprimcont*yj
3598 gacont_hbr(3,num_conti,i)=fprimcont*zj
3601 c 10/24/08 cgrad and ! comments indicate the parts of the code removed
3602 c following the change of gradient-summation algorithm.
3604 cgrad ghalfp=0.5D0*gggp(k)
3605 cgrad ghalfm=0.5D0*gggm(k)
3606 gacontp_hb1(k,num_conti,i)=!ghalfp
3607 & +(ecosap*(dc_norm(k,j)-cosa*dc_norm(k,i))
3608 & + ecosbp*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1)
3609 gacontp_hb2(k,num_conti,i)=!ghalfp
3610 & +(ecosap*(dc_norm(k,i)-cosa*dc_norm(k,j))
3611 & + ecosgp*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1)
3612 gacontp_hb3(k,num_conti,i)=gggp(k)
3613 gacontm_hb1(k,num_conti,i)=!ghalfm
3614 & +(ecosam*(dc_norm(k,j)-cosa*dc_norm(k,i))
3615 & + ecosbm*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1)
3616 gacontm_hb2(k,num_conti,i)=!ghalfm
3617 & +(ecosam*(dc_norm(k,i)-cosa*dc_norm(k,j))
3618 & + ecosgm*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1)
3619 gacontm_hb3(k,num_conti,i)=gggm(k)
3621 C Diagnostics. Comment out or remove after debugging!
3623 cdiag gacontp_hb1(k,num_conti,i)=0.0D0
3624 cdiag gacontp_hb2(k,num_conti,i)=0.0D0
3625 cdiag gacontp_hb3(k,num_conti,i)=0.0D0
3626 cdiag gacontm_hb1(k,num_conti,i)=0.0D0
3627 cdiag gacontm_hb2(k,num_conti,i)=0.0D0
3628 cdiag gacontm_hb3(k,num_conti,i)=0.0D0
3631 endif ! num_conti.le.maxconts
3634 if (wturn3.gt.0.0d0 .or. wturn4.gt.0.0d0) then
3637 ghalf=0.5d0*agg(l,k)
3638 aggi(l,k)=aggi(l,k)+ghalf
3639 aggi1(l,k)=aggi1(l,k)+agg(l,k)
3640 aggj(l,k)=aggj(l,k)+ghalf
3643 if (j.eq.nres-1 .and. i.lt.j-2) then
3646 aggj1(l,k)=aggj1(l,k)+agg(l,k)
3651 c t_eelecij=t_eelecij+MPI_Wtime()-time00
3654 C-----------------------------------------------------------------------------
3655 subroutine eturn3(i,eello_turn3)
3656 C Third- and fourth-order contributions from turns
3657 implicit real*8 (a-h,o-z)
3658 include 'DIMENSIONS'
3659 include 'COMMON.IOUNITS'
3660 include 'COMMON.GEO'
3661 include 'COMMON.VAR'
3662 include 'COMMON.LOCAL'
3663 include 'COMMON.CHAIN'
3664 include 'COMMON.DERIV'
3665 include 'COMMON.INTERACT'
3666 include 'COMMON.CONTACTS'
3667 include 'COMMON.TORSION'
3668 include 'COMMON.VECTORS'
3669 include 'COMMON.FFIELD'
3670 include 'COMMON.CONTROL'
3672 double precision auxmat(2,2),auxmat1(2,2),auxmat2(2,2),pizda(2,2),
3673 & e1t(2,2),e2t(2,2),e3t(2,2),e1tder(2,2),e2tder(2,2),e3tder(2,2),
3674 & e1a(2,2),ae3(2,2),ae3e2(2,2),auxvec(2),auxvec1(2),gpizda1(2,2),
3675 & gpizda2(2,2),auxgmat1(2,2),auxgmatt1(2,2),
3676 & auxgmat2(2,2),auxgmatt2(2,2)
3677 double precision agg(3,4),aggi(3,4),aggi1(3,4),
3678 & aggj(3,4),aggj1(3,4),a_temp(2,2),auxmat3(2,2)
3679 common /locel/ a_temp,agg,aggi,aggi1,aggj,aggj1,a22,a23,a32,a33,
3680 & dxi,dyi,dzi,dx_normi,dy_normi,dz_normi,xmedi,ymedi,zmedi,
3683 c write (iout,*) "eturn3",i,j,j1,j2
3688 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
3690 C Third-order contributions
3697 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
3698 cd call checkint_turn3(i,a_temp,eello_turn3_num)
3699 call matmat2(EUg(1,1,i+1),EUg(1,1,i+2),auxmat(1,1))
3700 c auxalary matices for theta gradient
3701 c auxalary matrix for i+1 and constant i+2
3702 call matmat2(gtEUg(1,1,i+1),EUg(1,1,i+2),auxgmat1(1,1))
3703 c auxalary matrix for i+2 and constant i+1
3704 call matmat2(EUg(1,1,i+1),gtEUg(1,1,i+2),auxgmat2(1,1))
3705 call transpose2(auxmat(1,1),auxmat1(1,1))
3706 call transpose2(auxgmat1(1,1),auxgmatt1(1,1))
3707 call transpose2(auxgmat2(1,1),auxgmatt2(1,1))
3708 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
3709 call matmat2(a_temp(1,1),auxgmatt1(1,1),gpizda1(1,1))
3710 call matmat2(a_temp(1,1),auxgmatt2(1,1),gpizda2(1,1))
3711 eello_turn3=eello_turn3+0.5d0*(pizda(1,1)+pizda(2,2))
3712 C Derivatives in theta
3713 gloc(nphi+i,icg)=gloc(nphi+i,icg)
3714 & +0.5d0*(gpizda1(1,1)+gpizda1(2,2))*wturn3
3715 gloc(nphi+i+1,icg)=gloc(nphi+i+1,icg)
3716 & +0.5d0*(gpizda2(1,1)+gpizda2(2,2))*wturn3
3718 if (energy_dec) write (iout,'(a6,2i5,0pf7.3)')
3719 & 'eturn3',i,j,0.5d0*(pizda(1,1)+pizda(2,2))
3720 cd write (2,*) 'i,',i,' j',j,'eello_turn3',
3721 cd & 0.5d0*(pizda(1,1)+pizda(2,2)),
3722 cd & ' eello_turn3_num',4*eello_turn3_num
3723 C Derivatives in gamma(i)
3724 call matmat2(EUgder(1,1,i+1),EUg(1,1,i+2),auxmat2(1,1))
3725 call transpose2(auxmat2(1,1),auxmat3(1,1))
3726 call matmat2(a_temp(1,1),auxmat3(1,1),pizda(1,1))
3727 gel_loc_turn3(i)=gel_loc_turn3(i)+0.5d0*(pizda(1,1)+pizda(2,2))
3728 C Derivatives in gamma(i+1)
3729 call matmat2(EUg(1,1,i+1),EUgder(1,1,i+2),auxmat2(1,1))
3730 call transpose2(auxmat2(1,1),auxmat3(1,1))
3731 call matmat2(a_temp(1,1),auxmat3(1,1),pizda(1,1))
3732 gel_loc_turn3(i+1)=gel_loc_turn3(i+1)
3733 & +0.5d0*(pizda(1,1)+pizda(2,2))
3734 C Cartesian derivatives
3736 c ghalf1=0.5d0*agg(l,1)
3737 c ghalf2=0.5d0*agg(l,2)
3738 c ghalf3=0.5d0*agg(l,3)
3739 c ghalf4=0.5d0*agg(l,4)
3740 a_temp(1,1)=aggi(l,1)!+ghalf1
3741 a_temp(1,2)=aggi(l,2)!+ghalf2
3742 a_temp(2,1)=aggi(l,3)!+ghalf3
3743 a_temp(2,2)=aggi(l,4)!+ghalf4
3744 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
3745 gcorr3_turn(l,i)=gcorr3_turn(l,i)
3746 & +0.5d0*(pizda(1,1)+pizda(2,2))
3747 a_temp(1,1)=aggi1(l,1)!+agg(l,1)
3748 a_temp(1,2)=aggi1(l,2)!+agg(l,2)
3749 a_temp(2,1)=aggi1(l,3)!+agg(l,3)
3750 a_temp(2,2)=aggi1(l,4)!+agg(l,4)
3751 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
3752 gcorr3_turn(l,i+1)=gcorr3_turn(l,i+1)
3753 & +0.5d0*(pizda(1,1)+pizda(2,2))
3754 a_temp(1,1)=aggj(l,1)!+ghalf1
3755 a_temp(1,2)=aggj(l,2)!+ghalf2
3756 a_temp(2,1)=aggj(l,3)!+ghalf3
3757 a_temp(2,2)=aggj(l,4)!+ghalf4
3758 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
3759 gcorr3_turn(l,j)=gcorr3_turn(l,j)
3760 & +0.5d0*(pizda(1,1)+pizda(2,2))
3761 a_temp(1,1)=aggj1(l,1)
3762 a_temp(1,2)=aggj1(l,2)
3763 a_temp(2,1)=aggj1(l,3)
3764 a_temp(2,2)=aggj1(l,4)
3765 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
3766 gcorr3_turn(l,j1)=gcorr3_turn(l,j1)
3767 & +0.5d0*(pizda(1,1)+pizda(2,2))
3771 C-------------------------------------------------------------------------------
3772 subroutine eturn4(i,eello_turn4)
3773 C Third- and fourth-order contributions from turns
3774 implicit real*8 (a-h,o-z)
3775 include 'DIMENSIONS'
3776 include 'COMMON.IOUNITS'
3777 include 'COMMON.GEO'
3778 include 'COMMON.VAR'
3779 include 'COMMON.LOCAL'
3780 include 'COMMON.CHAIN'
3781 include 'COMMON.DERIV'
3782 include 'COMMON.INTERACT'
3783 include 'COMMON.CONTACTS'
3784 include 'COMMON.TORSION'
3785 include 'COMMON.VECTORS'
3786 include 'COMMON.FFIELD'
3787 include 'COMMON.CONTROL'
3789 double precision auxmat(2,2),auxmat1(2,2),auxmat2(2,2),pizda(2,2),
3790 & e1t(2,2),e2t(2,2),e3t(2,2),e1tder(2,2),e2tder(2,2),e3tder(2,2),
3791 & e1a(2,2),ae3(2,2),ae3e2(2,2),auxvec(2),auxvec1(2),auxgvec(2),
3792 & auxgEvec1(2),auxgEvec2(2),auxgEvec3(2),
3793 & gte1t(2,2),gte2t(2,2),gte3t(2,2),
3794 & gte1a(2,2),gtae3(2,2),gtae3e2(2,2), ae3gte2(2,2),
3795 & gtEpizda1(2,2),gtEpizda2(2,2),gtEpizda3(2,2)
3796 double precision agg(3,4),aggi(3,4),aggi1(3,4),
3797 & aggj(3,4),aggj1(3,4),a_temp(2,2),auxmat3(2,2)
3798 common /locel/ a_temp,agg,aggi,aggi1,aggj,aggj1,a22,a23,a32,a33,
3799 & dxi,dyi,dzi,dx_normi,dy_normi,dz_normi,xmedi,ymedi,zmedi,
3802 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
3804 C Fourth-order contributions
3812 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
3813 cd call checkint_turn4(i,a_temp,eello_turn4_num)
3814 c write (iout,*) "eturn4 i",i," j",j," j1",j1," j2",j2
3815 c write(iout,*)"WCHODZE W PROGRAM"
3820 iti1=itortyp(itype(i+1))
3821 iti2=itortyp(itype(i+2))
3822 iti3=itortyp(itype(i+3))
3823 c write(iout,*) "iti1",iti1," iti2",iti2," iti3",iti3
3824 call transpose2(EUg(1,1,i+1),e1t(1,1))
3825 call transpose2(Eug(1,1,i+2),e2t(1,1))
3826 call transpose2(Eug(1,1,i+3),e3t(1,1))
3827 C Ematrix derivative in theta
3828 call transpose2(gtEUg(1,1,i+1),gte1t(1,1))
3829 call transpose2(gtEug(1,1,i+2),gte2t(1,1))
3830 call transpose2(gtEug(1,1,i+3),gte3t(1,1))
3831 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
3832 c eta1 in derivative theta
3833 call matmat2(gte1t(1,1),a_temp(1,1),gte1a(1,1))
3834 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
3835 c auxgvec is derivative of Ub2 so i+3 theta
3836 call matvec2(e1a(1,1),gUb2(1,i+3),auxgvec(1))
3837 c auxalary matrix of E i+1
3838 call matvec2(gte1a(1,1),Ub2(1,i+3),auxgEvec1(1))
3841 s1=scalar2(b1(1,i+2),auxvec(1))
3842 c derivative of theta i+2 with constant i+3
3843 gs23=scalar2(gtb1(1,i+2),auxvec(1))
3844 c derivative of theta i+2 with constant i+2
3845 gs32=scalar2(b1(1,i+2),auxgvec(1))
3846 c derivative of E matix in theta of i+1
3847 gsE13=scalar2(b1(1,i+2),auxgEvec1(1))
3849 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
3850 c ea31 in derivative theta
3851 call matmat2(a_temp(1,1),gte3t(1,1),gtae3(1,1))
3852 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
3853 c auxilary matrix auxgvec of Ub2 with constant E matirx
3854 call matvec2(ae3(1,1),gUb2(1,i+2),auxgvec(1))
3855 c auxilary matrix auxgEvec1 of E matix with Ub2 constant
3856 call matvec2(gtae3(1,1),Ub2(1,i+2),auxgEvec3(1))
3860 s2=scalar2(b1(1,i+1),auxvec(1))
3861 c derivative of theta i+1 with constant i+3
3862 gs13=scalar2(gtb1(1,i+1),auxvec(1))
3863 c derivative of theta i+2 with constant i+1
3864 gs21=scalar2(b1(1,i+1),auxgvec(1))
3865 c derivative of theta i+3 with constant i+1
3866 gsE31=scalar2(b1(1,i+1),auxgEvec3(1))
3867 c write(iout,*) gs1,gs2,'i=',i,auxgvec(1),gUb2(1,i+2),gtb1(1,i+2),
3869 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
3870 c two derivatives over diffetent matrices
3871 c gtae3e2 is derivative over i+3
3872 call matmat2(gtae3(1,1),e2t(1,1),gtae3e2(1,1))
3873 c ae3gte2 is derivative over i+2
3874 call matmat2(ae3(1,1),gte2t(1,1),ae3gte2(1,1))
3875 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
3876 c three possible derivative over theta E matices
3878 call matmat2(ae3e2(1,1),gte1t(1,1),gtEpizda1(1,1))
3880 call matmat2(ae3gte2(1,1),e1t(1,1),gtEpizda2(1,1))
3882 call matmat2(gtae3e2(1,1),e1t(1,1),gtEpizda3(1,1))
3883 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3885 gsEE1=0.5d0*(gtEpizda1(1,1)+gtEpizda1(2,2))
3886 gsEE2=0.5d0*(gtEpizda2(1,1)+gtEpizda2(2,2))
3887 gsEE3=0.5d0*(gtEpizda3(1,1)+gtEpizda3(2,2))
3889 eello_turn4=eello_turn4-(s1+s2+s3)
3891 gloc(nphi+i,icg)=gloc(nphi+i,icg)
3892 & -(gs13+gsE13+gsEE1)*wturn4
3893 gloc(nphi+i+1,icg)= gloc(nphi+i+1,icg)
3894 & -(gs23+gs21+gsEE2)*wturn4
3895 gloc(nphi+i+2,icg)= gloc(nphi+i+2,icg)
3896 & -(gs32+gsE31+gsEE3)*wturn4
3897 c gloc(nphi+i+1,icg)=gloc(nphi+i+1,icg)-
3900 if (energy_dec) write (iout,'(a6,2i5,0pf7.3)')
3901 & 'eturn4',i,j,-(s1+s2+s3)
3902 c write (iout,*) 'i,',i,' j',j,'eello_turn4',-(s1+s2+s3),
3903 c & ' eello_turn4_num',8*eello_turn4_num
3904 C Derivatives in gamma(i)
3905 call transpose2(EUgder(1,1,i+1),e1tder(1,1))
3906 call matmat2(e1tder(1,1),a_temp(1,1),auxmat(1,1))
3907 call matvec2(auxmat(1,1),Ub2(1,i+3),auxvec(1))
3908 s1=scalar2(b1(1,i+2),auxvec(1))
3909 call matmat2(ae3e2(1,1),e1tder(1,1),pizda(1,1))
3910 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3911 gel_loc_turn4(i)=gel_loc_turn4(i)-(s1+s3)
3912 C Derivatives in gamma(i+1)
3913 call transpose2(EUgder(1,1,i+2),e2tder(1,1))
3914 call matvec2(ae3(1,1),Ub2der(1,i+2),auxvec(1))
3915 s2=scalar2(b1(1,i+1),auxvec(1))
3916 call matmat2(ae3(1,1),e2tder(1,1),auxmat(1,1))
3917 call matmat2(auxmat(1,1),e1t(1,1),pizda(1,1))
3918 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3919 gel_loc_turn4(i+1)=gel_loc_turn4(i+1)-(s2+s3)
3920 C Derivatives in gamma(i+2)
3921 call transpose2(EUgder(1,1,i+3),e3tder(1,1))
3922 call matvec2(e1a(1,1),Ub2der(1,i+3),auxvec(1))
3923 s1=scalar2(b1(1,i+2),auxvec(1))
3924 call matmat2(a_temp(1,1),e3tder(1,1),auxmat(1,1))
3925 call matvec2(auxmat(1,1),Ub2(1,i+2),auxvec(1))
3926 s2=scalar2(b1(1,i+1),auxvec(1))
3927 call matmat2(auxmat(1,1),e2t(1,1),auxmat3(1,1))
3928 call matmat2(auxmat3(1,1),e1t(1,1),pizda(1,1))
3929 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3930 gel_loc_turn4(i+2)=gel_loc_turn4(i+2)-(s1+s2+s3)
3931 C Cartesian derivatives
3932 C Derivatives of this turn contributions in DC(i+2)
3933 if (j.lt.nres-1) then
3935 a_temp(1,1)=agg(l,1)
3936 a_temp(1,2)=agg(l,2)
3937 a_temp(2,1)=agg(l,3)
3938 a_temp(2,2)=agg(l,4)
3939 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
3940 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
3941 s1=scalar2(b1(1,i+2),auxvec(1))
3942 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
3943 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
3944 s2=scalar2(b1(1,i+1),auxvec(1))
3945 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
3946 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
3947 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3949 gcorr4_turn(l,i+2)=gcorr4_turn(l,i+2)-(s1+s2+s3)
3952 C Remaining derivatives of this turn contribution
3954 a_temp(1,1)=aggi(l,1)
3955 a_temp(1,2)=aggi(l,2)
3956 a_temp(2,1)=aggi(l,3)
3957 a_temp(2,2)=aggi(l,4)
3958 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
3959 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
3960 s1=scalar2(b1(1,i+2),auxvec(1))
3961 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
3962 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
3963 s2=scalar2(b1(1,i+1),auxvec(1))
3964 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
3965 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
3966 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3967 gcorr4_turn(l,i)=gcorr4_turn(l,i)-(s1+s2+s3)
3968 a_temp(1,1)=aggi1(l,1)
3969 a_temp(1,2)=aggi1(l,2)
3970 a_temp(2,1)=aggi1(l,3)
3971 a_temp(2,2)=aggi1(l,4)
3972 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
3973 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
3974 s1=scalar2(b1(1,i+2),auxvec(1))
3975 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
3976 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
3977 s2=scalar2(b1(1,i+1),auxvec(1))
3978 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
3979 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
3980 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3981 gcorr4_turn(l,i+1)=gcorr4_turn(l,i+1)-(s1+s2+s3)
3982 a_temp(1,1)=aggj(l,1)
3983 a_temp(1,2)=aggj(l,2)
3984 a_temp(2,1)=aggj(l,3)
3985 a_temp(2,2)=aggj(l,4)
3986 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
3987 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
3988 s1=scalar2(b1(1,i+2),auxvec(1))
3989 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
3990 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
3991 s2=scalar2(b1(1,i+1),auxvec(1))
3992 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
3993 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
3994 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3995 gcorr4_turn(l,j)=gcorr4_turn(l,j)-(s1+s2+s3)
3996 a_temp(1,1)=aggj1(l,1)
3997 a_temp(1,2)=aggj1(l,2)
3998 a_temp(2,1)=aggj1(l,3)
3999 a_temp(2,2)=aggj1(l,4)
4000 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
4001 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
4002 s1=scalar2(b1(1,i+2),auxvec(1))
4003 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
4004 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
4005 s2=scalar2(b1(1,i+1),auxvec(1))
4006 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
4007 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
4008 s3=0.5d0*(pizda(1,1)+pizda(2,2))
4009 c write (iout,*) "s1",s1," s2",s2," s3",s3," s1+s2+s3",s1+s2+s3
4010 gcorr4_turn(l,j1)=gcorr4_turn(l,j1)-(s1+s2+s3)
4014 C-----------------------------------------------------------------------------
4015 subroutine vecpr(u,v,w)
4016 implicit real*8(a-h,o-z)
4017 dimension u(3),v(3),w(3)
4018 w(1)=u(2)*v(3)-u(3)*v(2)
4019 w(2)=-u(1)*v(3)+u(3)*v(1)
4020 w(3)=u(1)*v(2)-u(2)*v(1)
4023 C-----------------------------------------------------------------------------
4024 subroutine unormderiv(u,ugrad,unorm,ungrad)
4025 C This subroutine computes the derivatives of a normalized vector u, given
4026 C the derivatives computed without normalization conditions, ugrad. Returns
4029 double precision u(3),ugrad(3,3),unorm,ungrad(3,3)
4030 double precision vec(3)
4031 double precision scalar
4033 c write (2,*) 'ugrad',ugrad
4036 vec(i)=scalar(ugrad(1,i),u(1))
4038 c write (2,*) 'vec',vec
4041 ungrad(j,i)=(ugrad(j,i)-u(j)*vec(i))*unorm
4044 c write (2,*) 'ungrad',ungrad
4047 C-----------------------------------------------------------------------------
4048 subroutine escp_soft_sphere(evdw2,evdw2_14)
4050 C This subroutine calculates the excluded-volume interaction energy between
4051 C peptide-group centers and side chains and its gradient in virtual-bond and
4052 C side-chain vectors.
4054 implicit real*8 (a-h,o-z)
4055 include 'DIMENSIONS'
4056 include 'COMMON.GEO'
4057 include 'COMMON.VAR'
4058 include 'COMMON.LOCAL'
4059 include 'COMMON.CHAIN'
4060 include 'COMMON.DERIV'
4061 include 'COMMON.INTERACT'
4062 include 'COMMON.FFIELD'
4063 include 'COMMON.IOUNITS'
4064 include 'COMMON.CONTROL'
4069 cd print '(a)','Enter ESCP'
4070 cd write (iout,*) 'iatscp_s=',iatscp_s,' iatscp_e=',iatscp_e
4071 do i=iatscp_s,iatscp_e
4072 if (itype(i).eq.ntyp1 .or. itype(i+1).eq.ntyp1) cycle
4074 xi=0.5D0*(c(1,i)+c(1,i+1))
4075 yi=0.5D0*(c(2,i)+c(2,i+1))
4076 zi=0.5D0*(c(3,i)+c(3,i+1))
4078 do iint=1,nscp_gr(i)
4080 do j=iscpstart(i,iint),iscpend(i,iint)
4081 if (itype(j).eq.ntyp1) cycle
4082 itypj=iabs(itype(j))
4083 C Uncomment following three lines for SC-p interactions
4087 C Uncomment following three lines for Ca-p interactions
4091 rij=xj*xj+yj*yj+zj*zj
4094 if (rij.lt.r0ijsq) then
4095 evdwij=0.25d0*(rij-r0ijsq)**2
4103 C Calculate contributions to the gradient in the virtual-bond and SC vectors.
4108 cgrad if (j.lt.i) then
4109 cd write (iout,*) 'j<i'
4110 C Uncomment following three lines for SC-p interactions
4112 c gradx_scp(k,j)=gradx_scp(k,j)+ggg(k)
4115 cd write (iout,*) 'j>i'
4117 cgrad ggg(k)=-ggg(k)
4118 C Uncomment following line for SC-p interactions
4119 c gradx_scp(k,j)=gradx_scp(k,j)-ggg(k)
4123 cgrad gvdwc_scp(k,i)=gvdwc_scp(k,i)-0.5D0*ggg(k)
4125 cgrad kstart=min0(i+1,j)
4126 cgrad kend=max0(i-1,j-1)
4127 cd write (iout,*) 'i=',i,' j=',j,' kstart=',kstart,' kend=',kend
4128 cd write (iout,*) ggg(1),ggg(2),ggg(3)
4129 cgrad do k=kstart,kend
4131 cgrad gvdwc_scp(l,k)=gvdwc_scp(l,k)-ggg(l)
4135 gvdwc_scpp(k,i)=gvdwc_scpp(k,i)-ggg(k)
4136 gvdwc_scp(k,j)=gvdwc_scp(k,j)+ggg(k)
4144 C-----------------------------------------------------------------------------
4145 subroutine escp(evdw2,evdw2_14)
4147 C This subroutine calculates the excluded-volume interaction energy between
4148 C peptide-group centers and side chains and its gradient in virtual-bond and
4149 C side-chain vectors.
4151 implicit real*8 (a-h,o-z)
4152 include 'DIMENSIONS'
4153 include 'COMMON.GEO'
4154 include 'COMMON.VAR'
4155 include 'COMMON.LOCAL'
4156 include 'COMMON.CHAIN'
4157 include 'COMMON.DERIV'
4158 include 'COMMON.INTERACT'
4159 include 'COMMON.FFIELD'
4160 include 'COMMON.IOUNITS'
4161 include 'COMMON.CONTROL'
4165 cd print '(a)','Enter ESCP'
4166 cd write (iout,*) 'iatscp_s=',iatscp_s,' iatscp_e=',iatscp_e
4167 do i=iatscp_s,iatscp_e
4168 if (itype(i).eq.ntyp1 .or. itype(i+1).eq.ntyp1) cycle
4170 xi=0.5D0*(c(1,i)+c(1,i+1))
4171 yi=0.5D0*(c(2,i)+c(2,i+1))
4172 zi=0.5D0*(c(3,i)+c(3,i+1))
4174 do iint=1,nscp_gr(i)
4176 do j=iscpstart(i,iint),iscpend(i,iint)
4177 itypj=iabs(itype(j))
4178 if (itypj.eq.ntyp1) cycle
4179 C Uncomment following three lines for SC-p interactions
4183 C Uncomment following three lines for Ca-p interactions
4187 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
4189 e1=fac*fac*aad(itypj,iteli)
4190 e2=fac*bad(itypj,iteli)
4191 if (iabs(j-i) .le. 2) then
4194 evdw2_14=evdw2_14+e1+e2
4198 if (energy_dec) write (iout,'(a6,2i5,0pf7.3,2i3,3e11.3)')
4199 & 'evdw2',i,j,evdwij,iteli,itypj,fac,aad(itypj,iteli),
4202 C Calculate contributions to the gradient in the virtual-bond and SC vectors.
4204 fac=-(evdwij+e1)*rrij
4208 cgrad if (j.lt.i) then
4209 cd write (iout,*) 'j<i'
4210 C Uncomment following three lines for SC-p interactions
4212 c gradx_scp(k,j)=gradx_scp(k,j)+ggg(k)
4215 cd write (iout,*) 'j>i'
4217 cgrad ggg(k)=-ggg(k)
4218 C Uncomment following line for SC-p interactions
4219 ccgrad gradx_scp(k,j)=gradx_scp(k,j)-ggg(k)
4220 c gradx_scp(k,j)=gradx_scp(k,j)+ggg(k)
4224 cgrad gvdwc_scp(k,i)=gvdwc_scp(k,i)-0.5D0*ggg(k)
4226 cgrad kstart=min0(i+1,j)
4227 cgrad kend=max0(i-1,j-1)
4228 cd write (iout,*) 'i=',i,' j=',j,' kstart=',kstart,' kend=',kend
4229 cd write (iout,*) ggg(1),ggg(2),ggg(3)
4230 cgrad do k=kstart,kend
4232 cgrad gvdwc_scp(l,k)=gvdwc_scp(l,k)-ggg(l)
4236 gvdwc_scpp(k,i)=gvdwc_scpp(k,i)-ggg(k)
4237 gvdwc_scp(k,j)=gvdwc_scp(k,j)+ggg(k)
4245 gvdwc_scp(j,i)=expon*gvdwc_scp(j,i)
4246 gvdwc_scpp(j,i)=expon*gvdwc_scpp(j,i)
4247 gradx_scp(j,i)=expon*gradx_scp(j,i)
4250 C******************************************************************************
4254 C To save time the factor EXPON has been extracted from ALL components
4255 C of GVDWC and GRADX. Remember to multiply them by this factor before further
4258 C******************************************************************************
4261 C--------------------------------------------------------------------------
4262 subroutine edis(ehpb)
4264 C Evaluate bridge-strain energy and its gradient in virtual-bond and SC vectors.
4266 implicit real*8 (a-h,o-z)
4267 include 'DIMENSIONS'
4268 include 'COMMON.SBRIDGE'
4269 include 'COMMON.CHAIN'
4270 include 'COMMON.DERIV'
4271 include 'COMMON.VAR'
4272 include 'COMMON.INTERACT'
4273 include 'COMMON.IOUNITS'
4276 cd write(iout,*)'edis: nhpb=',nhpb,' fbr=',fbr
4277 cd write(iout,*)'link_start=',link_start,' link_end=',link_end
4278 if (link_end.eq.0) return
4279 do i=link_start,link_end
4280 C If ihpb(i) and jhpb(i) > NRES, this is a SC-SC distance, otherwise a
4281 C CA-CA distance used in regularization of structure.
4284 C iii and jjj point to the residues for which the distance is assigned.
4285 if (ii.gt.nres) then
4292 cd write (iout,*) "i",i," ii",ii," iii",iii," jj",jj," jjj",jjj
4293 C 24/11/03 AL: SS bridges handled separately because of introducing a specific
4294 C distance and angle dependent SS bond potential.
4295 if (ii.gt.nres .and. iabs(itype(iii)).eq.1 .and.
4296 & iabs(itype(jjj)).eq.1) then
4297 call ssbond_ene(iii,jjj,eij)
4299 cd write (iout,*) "eij",eij
4301 C Calculate the distance between the two points and its difference from the
4305 C Get the force constant corresponding to this distance.
4307 C Calculate the contribution to energy.
4308 ehpb=ehpb+waga*rdis*rdis
4310 C Evaluate gradient.
4313 cd print *,'i=',i,' ii=',ii,' jj=',jj,' dhpb=',dhpb(i),' dd=',dd,
4314 cd & ' waga=',waga,' fac=',fac
4316 ggg(j)=fac*(c(j,jj)-c(j,ii))
4318 cd print '(i3,3(1pe14.5))',i,(ggg(j),j=1,3)
4319 C If this is a SC-SC distance, we need to calculate the contributions to the
4320 C Cartesian gradient in the SC vectors (ghpbx).
4323 ghpbx(j,iii)=ghpbx(j,iii)-ggg(j)
4324 ghpbx(j,jjj)=ghpbx(j,jjj)+ggg(j)
4327 cgrad do j=iii,jjj-1
4329 cgrad ghpbc(k,j)=ghpbc(k,j)+ggg(k)
4333 ghpbc(k,jjj)=ghpbc(k,jjj)+ggg(k)
4334 ghpbc(k,iii)=ghpbc(k,iii)-ggg(k)
4341 C--------------------------------------------------------------------------
4342 subroutine ssbond_ene(i,j,eij)
4344 C Calculate the distance and angle dependent SS-bond potential energy
4345 C using a free-energy function derived based on RHF/6-31G** ab initio
4346 C calculations of diethyl disulfide.
4348 C A. Liwo and U. Kozlowska, 11/24/03
4350 implicit real*8 (a-h,o-z)
4351 include 'DIMENSIONS'
4352 include 'COMMON.SBRIDGE'
4353 include 'COMMON.CHAIN'
4354 include 'COMMON.DERIV'
4355 include 'COMMON.LOCAL'
4356 include 'COMMON.INTERACT'
4357 include 'COMMON.VAR'
4358 include 'COMMON.IOUNITS'
4359 double precision erij(3),dcosom1(3),dcosom2(3),gg(3)
4360 itypi=iabs(itype(i))
4364 dxi=dc_norm(1,nres+i)
4365 dyi=dc_norm(2,nres+i)
4366 dzi=dc_norm(3,nres+i)
4367 c dsci_inv=dsc_inv(itypi)
4368 dsci_inv=vbld_inv(nres+i)
4369 itypj=iabs(itype(j))
4370 c dscj_inv=dsc_inv(itypj)
4371 dscj_inv=vbld_inv(nres+j)
4375 dxj=dc_norm(1,nres+j)
4376 dyj=dc_norm(2,nres+j)
4377 dzj=dc_norm(3,nres+j)
4378 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
4383 om1=dxi*erij(1)+dyi*erij(2)+dzi*erij(3)
4384 om2=dxj*erij(1)+dyj*erij(2)+dzj*erij(3)
4385 om12=dxi*dxj+dyi*dyj+dzi*dzj
4387 dcosom1(k)=rij*(dc_norm(k,nres+i)-om1*erij(k))
4388 dcosom2(k)=rij*(dc_norm(k,nres+j)-om2*erij(k))
4394 deltat12=om2-om1+2.0d0
4396 eij=akcm*deltad*deltad+akth*(deltat1*deltat1+deltat2*deltat2)
4397 & +akct*deltad*deltat12
4398 & +v1ss*cosphi+v2ss*cosphi*cosphi+v3ss*cosphi*cosphi*cosphi+ebr
4399 c write(iout,*) i,j,"rij",rij,"d0cm",d0cm," akcm",akcm," akth",akth,
4400 c & " akct",akct," deltad",deltad," deltat",deltat1,deltat2,
4401 c & " deltat12",deltat12," eij",eij
4402 ed=2*akcm*deltad+akct*deltat12
4404 pom2=v1ss+2*v2ss*cosphi+3*v3ss*cosphi*cosphi
4405 eom1=-2*akth*deltat1-pom1-om2*pom2
4406 eom2= 2*akth*deltat2+pom1-om1*pom2
4409 ggk=ed*erij(k)+eom1*dcosom1(k)+eom2*dcosom2(k)
4410 ghpbx(k,i)=ghpbx(k,i)-ggk
4411 & +(eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,nres+i))
4412 & +eom1*(erij(k)-om1*dc_norm(k,nres+i)))*dsci_inv
4413 ghpbx(k,j)=ghpbx(k,j)+ggk
4414 & +(eom12*(dc_norm(k,nres+i)-om12*dc_norm(k,nres+j))
4415 & +eom2*(erij(k)-om2*dc_norm(k,nres+j)))*dscj_inv
4416 ghpbc(k,i)=ghpbc(k,i)-ggk
4417 ghpbc(k,j)=ghpbc(k,j)+ggk
4420 C Calculate the components of the gradient in DC and X
4424 cgrad ghpbc(l,k)=ghpbc(l,k)+gg(l)
4429 C--------------------------------------------------------------------------
4430 subroutine ebond(estr)
4432 c Evaluate the energy of stretching of the CA-CA and CA-SC virtual bonds
4434 implicit real*8 (a-h,o-z)
4435 include 'DIMENSIONS'
4436 include 'COMMON.LOCAL'
4437 include 'COMMON.GEO'
4438 include 'COMMON.INTERACT'
4439 include 'COMMON.DERIV'
4440 include 'COMMON.VAR'
4441 include 'COMMON.CHAIN'
4442 include 'COMMON.IOUNITS'
4443 include 'COMMON.NAMES'
4444 include 'COMMON.FFIELD'
4445 include 'COMMON.CONTROL'
4446 include 'COMMON.SETUP'
4447 double precision u(3),ud(3)
4450 do i=ibondp_start,ibondp_end
4451 if (itype(i-1).eq.ntyp1 .or. itype(i).eq.ntyp1) then
4452 estr1=estr1+gnmr1(vbld(i),-1.0d0,distchainmax)
4454 gradb(j,i-1)=gnmr1prim(vbld(i),-1.0d0,distchainmax)
4455 & *dc(j,i-1)/vbld(i)
4457 if (energy_dec) write(iout,*)
4458 & "estr1",i,gnmr1(vbld(i),-1.0d0,distchainmax)
4460 diff = vbld(i)-vbldp0
4461 if (energy_dec) write (iout,*)
4462 & "estr bb",i,vbld(i),vbldp0,diff,AKP*diff*diff
4465 gradb(j,i-1)=AKP*diff*dc(j,i-1)/vbld(i)
4467 c write (iout,'(i5,3f10.5)') i,(gradb(j,i-1),j=1,3)
4470 estr=0.5d0*AKP*estr+estr1
4472 c 09/18/07 AL: multimodal bond potential based on AM1 CA-SC PMF's included
4474 do i=ibond_start,ibond_end
4476 if (iti.ne.10 .and. iti.ne.ntyp1) then
4479 diff=vbld(i+nres)-vbldsc0(1,iti)
4480 if (energy_dec) write (iout,*)
4481 & "estr sc",i,iti,vbld(i+nres),vbldsc0(1,iti),diff,
4482 & AKSC(1,iti),AKSC(1,iti)*diff*diff
4483 estr=estr+0.5d0*AKSC(1,iti)*diff*diff
4485 gradbx(j,i)=AKSC(1,iti)*diff*dc(j,i+nres)/vbld(i+nres)
4489 diff=vbld(i+nres)-vbldsc0(j,iti)
4490 ud(j)=aksc(j,iti)*diff
4491 u(j)=abond0(j,iti)+0.5d0*ud(j)*diff
4505 uprod2=uprod2*u(k)*u(k)
4509 usumsqder=usumsqder+ud(j)*uprod2
4511 estr=estr+uprod/usum
4513 gradbx(j,i)=usumsqder/(usum*usum)*dc(j,i+nres)/vbld(i+nres)
4521 C--------------------------------------------------------------------------
4522 subroutine ebend(etheta)
4524 C Evaluate the virtual-bond-angle energy given the virtual-bond dihedral
4525 C angles gamma and its derivatives in consecutive thetas and gammas.
4527 implicit real*8 (a-h,o-z)
4528 include 'DIMENSIONS'
4529 include 'COMMON.LOCAL'
4530 include 'COMMON.GEO'
4531 include 'COMMON.INTERACT'
4532 include 'COMMON.DERIV'
4533 include 'COMMON.VAR'
4534 include 'COMMON.CHAIN'
4535 include 'COMMON.IOUNITS'
4536 include 'COMMON.NAMES'
4537 include 'COMMON.FFIELD'
4538 include 'COMMON.CONTROL'
4539 common /calcthet/ term1,term2,termm,diffak,ratak,
4540 & ak,aktc,termpre,termexp,sigc,sig0i,time11,time12,sigcsq,
4541 & delthe0,sig0inv,sigtc,sigsqtc,delthec,it
4542 double precision y(2),z(2)
4544 c time11=dexp(-2*time)
4547 c write (*,'(a,i2)') 'EBEND ICG=',icg
4548 do i=ithet_start,ithet_end
4549 if (itype(i-1).eq.ntyp1) cycle
4550 C Zero the energy function and its derivative at 0 or pi.
4551 call splinthet(theta(i),0.5d0*delta,ss,ssd)
4553 ichir1=isign(1,itype(i-2))
4554 ichir2=isign(1,itype(i))
4555 if (itype(i-2).eq.10) ichir1=isign(1,itype(i-1))
4556 if (itype(i).eq.10) ichir2=isign(1,itype(i-1))
4557 if (itype(i-1).eq.10) then
4558 itype1=isign(10,itype(i-2))
4559 ichir11=isign(1,itype(i-2))
4560 ichir12=isign(1,itype(i-2))
4561 itype2=isign(10,itype(i))
4562 ichir21=isign(1,itype(i))
4563 ichir22=isign(1,itype(i))
4566 if (i.gt.3 .and. itype(i-2).ne.ntyp1) then
4569 if (phii.ne.phii) phii=150.0
4579 if (i.lt.nres .and. itype(i).ne.ntyp1) then
4582 if (phii1.ne.phii1) phii1=150.0
4594 C Calculate the "mean" value of theta from the part of the distribution
4595 C dependent on the adjacent virtual-bond-valence angles (gamma1 & gamma2).
4596 C In following comments this theta will be referred to as t_c.
4597 thet_pred_mean=0.0d0
4599 athetk=athet(k,it,ichir1,ichir2)
4600 bthetk=bthet(k,it,ichir1,ichir2)
4602 athetk=athet(k,itype1,ichir11,ichir12)
4603 bthetk=bthet(k,itype2,ichir21,ichir22)
4605 thet_pred_mean=thet_pred_mean+athetk*y(k)+bthetk*z(k)
4607 dthett=thet_pred_mean*ssd
4608 thet_pred_mean=thet_pred_mean*ss+a0thet(it)
4609 C Derivatives of the "mean" values in gamma1 and gamma2.
4610 dthetg1=(-athet(1,it,ichir1,ichir2)*y(2)
4611 &+athet(2,it,ichir1,ichir2)*y(1))*ss
4612 dthetg2=(-bthet(1,it,ichir1,ichir2)*z(2)
4613 & +bthet(2,it,ichir1,ichir2)*z(1))*ss
4615 dthetg1=(-athet(1,itype1,ichir11,ichir12)*y(2)
4616 &+athet(2,itype1,ichir11,ichir12)*y(1))*ss
4617 dthetg2=(-bthet(1,itype2,ichir21,ichir22)*z(2)
4618 & +bthet(2,itype2,ichir21,ichir22)*z(1))*ss
4620 if (theta(i).gt.pi-delta) then
4621 call theteng(pi-delta,thet_pred_mean,theta0(it),f0,fprim0,
4623 call mixder(pi-delta,thet_pred_mean,theta0(it),fprim_tc0)
4624 call theteng(pi,thet_pred_mean,theta0(it),f1,fprim1,E_tc1)
4625 call spline1(theta(i),pi-delta,delta,f0,f1,fprim0,ethetai,
4627 call spline2(theta(i),pi-delta,delta,E_tc0,E_tc1,fprim_tc0,
4629 else if (theta(i).lt.delta) then
4630 call theteng(delta,thet_pred_mean,theta0(it),f0,fprim0,E_tc0)
4631 call theteng(0.0d0,thet_pred_mean,theta0(it),f1,fprim1,E_tc1)
4632 call spline1(theta(i),delta,-delta,f0,f1,fprim0,ethetai,
4634 call mixder(delta,thet_pred_mean,theta0(it),fprim_tc0)
4635 call spline2(theta(i),delta,-delta,E_tc0,E_tc1,fprim_tc0,
4638 call theteng(theta(i),thet_pred_mean,theta0(it),ethetai,
4641 etheta=etheta+ethetai
4642 if (energy_dec) write (iout,'(a6,i5,0pf7.3)')
4644 if (i.gt.3) gloc(i-3,icg)=gloc(i-3,icg)+wang*E_tc*dthetg1
4645 if (i.lt.nres) gloc(i-2,icg)=gloc(i-2,icg)+wang*E_tc*dthetg2
4646 gloc(nphi+i-2,icg)=wang*(E_theta+E_tc*dthett)+gloc(nphi+i-2,icg)
4648 C Ufff.... We've done all this!!!
4651 C---------------------------------------------------------------------------
4652 subroutine theteng(thetai,thet_pred_mean,theta0i,ethetai,E_theta,
4654 implicit real*8 (a-h,o-z)
4655 include 'DIMENSIONS'
4656 include 'COMMON.LOCAL'
4657 include 'COMMON.IOUNITS'
4658 common /calcthet/ term1,term2,termm,diffak,ratak,
4659 & ak,aktc,termpre,termexp,sigc,sig0i,time11,time12,sigcsq,
4660 & delthe0,sig0inv,sigtc,sigsqtc,delthec,it
4661 C Calculate the contributions to both Gaussian lobes.
4662 C 6/6/97 - Deform the Gaussians using the factor of 1/(1+time)
4663 C The "polynomial part" of the "standard deviation" of this part of
4667 sig=sig*thet_pred_mean+polthet(j,it)
4669 C Derivative of the "interior part" of the "standard deviation of the"
4670 C gamma-dependent Gaussian lobe in t_c.
4671 sigtc=3*polthet(3,it)
4673 sigtc=sigtc*thet_pred_mean+j*polthet(j,it)
4676 C Set the parameters of both Gaussian lobes of the distribution.
4677 C "Standard deviation" of the gamma-dependent Gaussian lobe (sigtc)
4678 fac=sig*sig+sigc0(it)
4681 C Following variable (sigsqtc) is -(1/2)d[sigma(t_c)**(-2))]/dt_c
4682 sigsqtc=-4.0D0*sigcsq*sigtc
4683 c print *,i,sig,sigtc,sigsqtc
4684 C Following variable (sigtc) is d[sigma(t_c)]/dt_c
4685 sigtc=-sigtc/(fac*fac)
4686 C Following variable is sigma(t_c)**(-2)
4687 sigcsq=sigcsq*sigcsq
4689 sig0inv=1.0D0/sig0i**2
4690 delthec=thetai-thet_pred_mean
4691 delthe0=thetai-theta0i
4692 term1=-0.5D0*sigcsq*delthec*delthec
4693 term2=-0.5D0*sig0inv*delthe0*delthe0
4694 C Following fuzzy logic is to avoid underflows in dexp and subsequent INFs and
4695 C NaNs in taking the logarithm. We extract the largest exponent which is added
4696 C to the energy (this being the log of the distribution) at the end of energy
4697 C term evaluation for this virtual-bond angle.
4698 if (term1.gt.term2) then
4700 term2=dexp(term2-termm)
4704 term1=dexp(term1-termm)
4707 C The ratio between the gamma-independent and gamma-dependent lobes of
4708 C the distribution is a Gaussian function of thet_pred_mean too.
4709 diffak=gthet(2,it)-thet_pred_mean
4710 ratak=diffak/gthet(3,it)**2
4711 ak=dexp(gthet(1,it)-0.5D0*diffak*ratak)
4712 C Let's differentiate it in thet_pred_mean NOW.
4714 C Now put together the distribution terms to make complete distribution.
4715 termexp=term1+ak*term2
4716 termpre=sigc+ak*sig0i
4717 C Contribution of the bending energy from this theta is just the -log of
4718 C the sum of the contributions from the two lobes and the pre-exponential
4719 C factor. Simple enough, isn't it?
4720 ethetai=(-dlog(termexp)-termm+dlog(termpre))
4721 C NOW the derivatives!!!
4722 C 6/6/97 Take into account the deformation.
4723 E_theta=(delthec*sigcsq*term1
4724 & +ak*delthe0*sig0inv*term2)/termexp
4725 E_tc=((sigtc+aktc*sig0i)/termpre
4726 & -((delthec*sigcsq+delthec*delthec*sigsqtc)*term1+
4727 & aktc*term2)/termexp)
4730 c-----------------------------------------------------------------------------
4731 subroutine mixder(thetai,thet_pred_mean,theta0i,E_tc_t)
4732 implicit real*8 (a-h,o-z)
4733 include 'DIMENSIONS'
4734 include 'COMMON.LOCAL'
4735 include 'COMMON.IOUNITS'
4736 common /calcthet/ term1,term2,termm,diffak,ratak,
4737 & ak,aktc,termpre,termexp,sigc,sig0i,time11,time12,sigcsq,
4738 & delthe0,sig0inv,sigtc,sigsqtc,delthec,it
4739 delthec=thetai-thet_pred_mean
4740 delthe0=thetai-theta0i
4741 C "Thank you" to MAPLE (probably spared one day of hand-differentiation).
4742 t3 = thetai-thet_pred_mean
4746 t14 = t12+t6*sigsqtc
4748 t21 = thetai-theta0i
4754 E_tc_t = -((sigcsq+2.D0*t3*sigsqtc)*t9-t14*sigcsq*t3*t16*t9
4755 & -aktc*sig0inv*t27)/t32+(t14*t9+aktc*t26)/t40
4756 & *(-t12*t9-ak*sig0inv*t27)
4760 C--------------------------------------------------------------------------
4761 subroutine ebend(etheta)
4763 C Evaluate the virtual-bond-angle energy given the virtual-bond dihedral
4764 C angles gamma and its derivatives in consecutive thetas and gammas.
4765 C ab initio-derived potentials from
4766 c Kozlowska et al., J. Phys.: Condens. Matter 19 (2007) 285203
4768 implicit real*8 (a-h,o-z)
4769 include 'DIMENSIONS'
4770 include 'COMMON.LOCAL'
4771 include 'COMMON.GEO'
4772 include 'COMMON.INTERACT'
4773 include 'COMMON.DERIV'
4774 include 'COMMON.VAR'
4775 include 'COMMON.CHAIN'
4776 include 'COMMON.IOUNITS'
4777 include 'COMMON.NAMES'
4778 include 'COMMON.FFIELD'
4779 include 'COMMON.CONTROL'
4780 double precision coskt(mmaxtheterm),sinkt(mmaxtheterm),
4781 & cosph1(maxsingle),sinph1(maxsingle),cosph2(maxsingle),
4782 & sinph2(maxsingle),cosph1ph2(maxdouble,maxdouble),
4783 & sinph1ph2(maxdouble,maxdouble)
4784 logical lprn /.false./, lprn1 /.false./
4786 do i=ithet_start,ithet_end
4787 if (itype(i-1).eq.ntyp1) cycle
4788 if (iabs(itype(i+1)).eq.20) iblock=2
4789 if (iabs(itype(i+1)).ne.20) iblock=1
4793 theti2=0.5d0*theta(i)
4794 ityp2=ithetyp((itype(i-1)))
4796 coskt(k)=dcos(k*theti2)
4797 sinkt(k)=dsin(k*theti2)
4799 if (i.gt.3 .and. itype(i-2).ne.ntyp1) then
4802 if (phii.ne.phii) phii=150.0
4806 ityp1=ithetyp((itype(i-2)))
4807 C propagation of chirality for glycine type
4809 cosph1(k)=dcos(k*phii)
4810 sinph1(k)=dsin(k*phii)
4820 if (i.lt.nres .and. itype(i).ne.ntyp1) then
4823 if (phii1.ne.phii1) phii1=150.0
4828 ityp3=ithetyp((itype(i)))
4830 cosph2(k)=dcos(k*phii1)
4831 sinph2(k)=dsin(k*phii1)
4841 ethetai=aa0thet(ityp1,ityp2,ityp3,iblock)
4844 ccl=cosph1(l)*cosph2(k-l)
4845 ssl=sinph1(l)*sinph2(k-l)
4846 scl=sinph1(l)*cosph2(k-l)
4847 csl=cosph1(l)*sinph2(k-l)
4848 cosph1ph2(l,k)=ccl-ssl
4849 cosph1ph2(k,l)=ccl+ssl
4850 sinph1ph2(l,k)=scl+csl
4851 sinph1ph2(k,l)=scl-csl
4855 write (iout,*) "i",i," ityp1",ityp1," ityp2",ityp2,
4856 & " ityp3",ityp3," theti2",theti2," phii",phii," phii1",phii1
4857 write (iout,*) "coskt and sinkt"
4859 write (iout,*) k,coskt(k),sinkt(k)
4863 ethetai=ethetai+aathet(k,ityp1,ityp2,ityp3,iblock)*sinkt(k)
4864 dethetai=dethetai+0.5d0*k*aathet(k,ityp1,ityp2,ityp3,iblock)
4867 & write (iout,*) "k",k,"
4868 & aathet",aathet(k,ityp1,ityp2,ityp3,iblock),
4869 & " ethetai",ethetai
4872 write (iout,*) "cosph and sinph"
4874 write (iout,*) k,cosph1(k),sinph1(k),cosph2(k),sinph2(k)
4876 write (iout,*) "cosph1ph2 and sinph2ph2"
4879 write (iout,*) l,k,cosph1ph2(l,k),cosph1ph2(k,l),
4880 & sinph1ph2(l,k),sinph1ph2(k,l)
4883 write(iout,*) "ethetai",ethetai
4887 aux=bbthet(k,m,ityp1,ityp2,ityp3,iblock)*cosph1(k)
4888 & +ccthet(k,m,ityp1,ityp2,ityp3,iblock)*sinph1(k)
4889 & +ddthet(k,m,ityp1,ityp2,ityp3,iblock)*cosph2(k)
4890 & +eethet(k,m,ityp1,ityp2,ityp3,iblock)*sinph2(k)
4891 ethetai=ethetai+sinkt(m)*aux
4892 dethetai=dethetai+0.5d0*m*aux*coskt(m)
4893 dephii=dephii+k*sinkt(m)*(
4894 & ccthet(k,m,ityp1,ityp2,ityp3,iblock)*cosph1(k)-
4895 & bbthet(k,m,ityp1,ityp2,ityp3,iblock)*sinph1(k))
4896 dephii1=dephii1+k*sinkt(m)*(
4897 & eethet(k,m,ityp1,ityp2,ityp3,iblock)*cosph2(k)-
4898 & ddthet(k,m,ityp1,ityp2,ityp3,iblock)*sinph2(k))
4900 & write (iout,*) "m",m," k",k," bbthet",
4901 & bbthet(k,m,ityp1,ityp2,ityp3,iblock)," ccthet",
4902 & ccthet(k,m,ityp1,ityp2,ityp3,iblock)," ddthet",
4903 & ddthet(k,m,ityp1,ityp2,ityp3,iblock)," eethet",
4904 & eethet(k,m,ityp1,ityp2,ityp3,iblock)," ethetai",ethetai
4908 & write(iout,*) "ethetai",ethetai
4912 aux=ffthet(l,k,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(l,k)+
4913 & ffthet(k,l,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(k,l)+
4914 & ggthet(l,k,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(l,k)+
4915 & ggthet(k,l,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(k,l)
4916 ethetai=ethetai+sinkt(m)*aux
4917 dethetai=dethetai+0.5d0*m*coskt(m)*aux
4918 dephii=dephii+l*sinkt(m)*(
4919 & -ffthet(l,k,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(l,k)-
4920 & ffthet(k,l,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(k,l)+
4921 & ggthet(l,k,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(l,k)+
4922 & ggthet(k,l,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(k,l))
4923 dephii1=dephii1+(k-l)*sinkt(m)*(
4924 & -ffthet(l,k,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(l,k)+
4925 & ffthet(k,l,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(k,l)+
4926 & ggthet(l,k,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(l,k)-
4927 & ggthet(k,l,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(k,l))
4929 write (iout,*) "m",m," k",k," l",l," ffthet",
4930 & ffthet(l,k,m,ityp1,ityp2,ityp3,iblock),
4931 & ffthet(k,l,m,ityp1,ityp2,ityp3,iblock)," ggthet",
4932 & ggthet(l,k,m,ityp1,ityp2,ityp3,iblock),
4933 & ggthet(k,l,m,ityp1,ityp2,ityp3,iblock),
4934 & " ethetai",ethetai
4935 write (iout,*) cosph1ph2(l,k)*sinkt(m),
4936 & cosph1ph2(k,l)*sinkt(m),
4937 & sinph1ph2(l,k)*sinkt(m),sinph1ph2(k,l)*sinkt(m)
4945 & write (iout,'(i2,3f8.1,9h ethetai ,f10.5)')
4946 & i,theta(i)*rad2deg,phii*rad2deg,
4947 & phii1*rad2deg,ethetai
4949 etheta=etheta+ethetai
4950 if (i.gt.3) gloc(i-3,icg)=gloc(i-3,icg)+wang*dephii
4951 if (i.lt.nres) gloc(i-2,icg)=gloc(i-2,icg)+wang*dephii1
4952 gloc(nphi+i-2,icg)=wang*dethetai+gloc(nphi+i-2,icg)
4958 c-----------------------------------------------------------------------------
4959 subroutine esc(escloc)
4960 C Calculate the local energy of a side chain and its derivatives in the
4961 C corresponding virtual-bond valence angles THETA and the spherical angles
4963 implicit real*8 (a-h,o-z)
4964 include 'DIMENSIONS'
4965 include 'COMMON.GEO'
4966 include 'COMMON.LOCAL'
4967 include 'COMMON.VAR'
4968 include 'COMMON.INTERACT'
4969 include 'COMMON.DERIV'
4970 include 'COMMON.CHAIN'
4971 include 'COMMON.IOUNITS'
4972 include 'COMMON.NAMES'
4973 include 'COMMON.FFIELD'
4974 include 'COMMON.CONTROL'
4975 double precision x(3),dersc(3),xemp(3),dersc0(3),dersc1(3),
4976 & ddersc0(3),ddummy(3),xtemp(3),temp(3)
4977 common /sccalc/ time11,time12,time112,theti,it,nlobit
4980 c write (iout,'(a)') 'ESC'
4981 do i=loc_start,loc_end
4983 if (it.eq.ntyp1) cycle
4984 if (it.eq.10) goto 1
4985 nlobit=nlob(iabs(it))
4986 c print *,'i=',i,' it=',it,' nlobit=',nlobit
4987 c write (iout,*) 'i=',i,' ssa=',ssa,' ssad=',ssad
4988 theti=theta(i+1)-pipol
4993 if (x(2).gt.pi-delta) then
4997 call enesc(xtemp,escloci0,dersc0,ddersc0,.true.)
4999 call enesc(xtemp,escloci1,dersc1,ddummy,.false.)
5000 call spline1(x(2),pi-delta,delta,escloci0,escloci1,dersc0(2),
5002 call spline2(x(2),pi-delta,delta,dersc0(1),dersc1(1),
5003 & ddersc0(1),dersc(1))
5004 call spline2(x(2),pi-delta,delta,dersc0(3),dersc1(3),
5005 & ddersc0(3),dersc(3))
5007 call enesc_bound(xtemp,esclocbi0,dersc0,dersc12,.true.)
5009 call enesc_bound(xtemp,esclocbi1,dersc1,chuju,.false.)
5010 call spline1(x(2),pi-delta,delta,esclocbi0,esclocbi1,
5011 & dersc0(2),esclocbi,dersc02)
5012 call spline2(x(2),pi-delta,delta,dersc0(1),dersc1(1),
5014 call splinthet(x(2),0.5d0*delta,ss,ssd)
5019 dersc(k)=ss*dersc(k)+(1.0d0-ss)*dersc0(k)
5021 dersc(2)=dersc(2)+ssd*(escloci-esclocbi)
5022 c write (iout,*) 'i=',i,x(2)*rad2deg,escloci0,escloci,
5024 escloci=ss*escloci+(1.0d0-ss)*esclocbi
5026 c write (iout,*) escloci
5027 else if (x(2).lt.delta) then
5031 call enesc(xtemp,escloci0,dersc0,ddersc0,.true.)
5033 call enesc(xtemp,escloci1,dersc1,ddummy,.false.)
5034 call spline1(x(2),delta,-delta,escloci0,escloci1,dersc0(2),
5036 call spline2(x(2),delta,-delta,dersc0(1),dersc1(1),
5037 & ddersc0(1),dersc(1))
5038 call spline2(x(2),delta,-delta,dersc0(3),dersc1(3),
5039 & ddersc0(3),dersc(3))
5041 call enesc_bound(xtemp,esclocbi0,dersc0,dersc12,.true.)
5043 call enesc_bound(xtemp,esclocbi1,dersc1,chuju,.false.)
5044 call spline1(x(2),delta,-delta,esclocbi0,esclocbi1,
5045 & dersc0(2),esclocbi,dersc02)
5046 call spline2(x(2),delta,-delta,dersc0(1),dersc1(1),
5051 call splinthet(x(2),0.5d0*delta,ss,ssd)
5053 dersc(k)=ss*dersc(k)+(1.0d0-ss)*dersc0(k)
5055 dersc(2)=dersc(2)+ssd*(escloci-esclocbi)
5056 c write (iout,*) 'i=',i,x(2)*rad2deg,escloci0,escloci,
5058 escloci=ss*escloci+(1.0d0-ss)*esclocbi
5059 c write (iout,*) escloci
5061 call enesc(x,escloci,dersc,ddummy,.false.)
5064 escloc=escloc+escloci
5065 if (energy_dec) write (iout,'(a6,i5,0pf7.3)')
5066 & 'escloc',i,escloci
5067 c write (iout,*) 'i=',i,' escloci=',escloci,' dersc=',dersc
5069 gloc(nphi+i-1,icg)=gloc(nphi+i-1,icg)+
5071 gloc(ialph(i,1),icg)=wscloc*dersc(2)
5072 gloc(ialph(i,1)+nside,icg)=wscloc*dersc(3)
5077 C---------------------------------------------------------------------------
5078 subroutine enesc(x,escloci,dersc,ddersc,mixed)
5079 implicit real*8 (a-h,o-z)
5080 include 'DIMENSIONS'
5081 include 'COMMON.GEO'
5082 include 'COMMON.LOCAL'
5083 include 'COMMON.IOUNITS'
5084 common /sccalc/ time11,time12,time112,theti,it,nlobit
5085 double precision x(3),z(3),Ax(3,maxlob,-1:1),dersc(3),ddersc(3)
5086 double precision contr(maxlob,-1:1)
5088 c write (iout,*) 'it=',it,' nlobit=',nlobit
5092 if (mixed) ddersc(j)=0.0d0
5096 C Because of periodicity of the dependence of the SC energy in omega we have
5097 C to add up the contributions from x(3)-2*pi, x(3), and x(3+2*pi).
5098 C To avoid underflows, first compute & store the exponents.
5106 z(k)=x(k)-censc(k,j,it)
5111 Axk=Axk+gaussc(l,k,j,it)*z(l)
5117 expfac=expfac+Ax(k,j,iii)*z(k)
5125 C As in the case of ebend, we want to avoid underflows in exponentiation and
5126 C subsequent NaNs and INFs in energy calculation.
5127 C Find the largest exponent
5131 if (emin.gt.contr(j,iii)) emin=contr(j,iii)
5135 cd print *,'it=',it,' emin=',emin
5137 C Compute the contribution to SC energy and derivatives
5142 adexp=bsc(j,iabs(it))-0.5D0*contr(j,iii)+emin
5143 if(adexp.ne.adexp) adexp=1.0
5146 expfac=dexp(bsc(j,iabs(it))-0.5D0*contr(j,iii)+emin)
5148 cd print *,'j=',j,' expfac=',expfac
5149 escloc_i=escloc_i+expfac
5151 dersc(k)=dersc(k)+Ax(k,j,iii)*expfac
5155 ddersc(k)=ddersc(k)+(-Ax(2,j,iii)*Ax(k,j,iii)
5156 & +gaussc(k,2,j,it))*expfac
5163 dersc(1)=dersc(1)/cos(theti)**2
5164 ddersc(1)=ddersc(1)/cos(theti)**2
5167 escloci=-(dlog(escloc_i)-emin)
5169 dersc(j)=dersc(j)/escloc_i
5173 ddersc(j)=(ddersc(j)/escloc_i+dersc(2)*dersc(j))
5178 C------------------------------------------------------------------------------
5179 subroutine enesc_bound(x,escloci,dersc,dersc12,mixed)
5180 implicit real*8 (a-h,o-z)
5181 include 'DIMENSIONS'
5182 include 'COMMON.GEO'
5183 include 'COMMON.LOCAL'
5184 include 'COMMON.IOUNITS'
5185 common /sccalc/ time11,time12,time112,theti,it,nlobit
5186 double precision x(3),z(3),Ax(3,maxlob),dersc(3)
5187 double precision contr(maxlob)
5198 z(k)=x(k)-censc(k,j,it)
5204 Axk=Axk+gaussc(l,k,j,it)*z(l)
5210 expfac=expfac+Ax(k,j)*z(k)
5215 C As in the case of ebend, we want to avoid underflows in exponentiation and
5216 C subsequent NaNs and INFs in energy calculation.
5217 C Find the largest exponent
5220 if (emin.gt.contr(j)) emin=contr(j)
5224 C Compute the contribution to SC energy and derivatives
5228 expfac=dexp(bsc(j,iabs(it))-0.5D0*contr(j)+emin)
5229 escloc_i=escloc_i+expfac
5231 dersc(k)=dersc(k)+Ax(k,j)*expfac
5233 if (mixed) dersc12=dersc12+(-Ax(2,j)*Ax(1,j)
5234 & +gaussc(1,2,j,it))*expfac
5238 dersc(1)=dersc(1)/cos(theti)**2
5239 dersc12=dersc12/cos(theti)**2
5240 escloci=-(dlog(escloc_i)-emin)
5242 dersc(j)=dersc(j)/escloc_i
5244 if (mixed) dersc12=(dersc12/escloc_i+dersc(2)*dersc(1))
5248 c----------------------------------------------------------------------------------
5249 subroutine esc(escloc)
5250 C Calculate the local energy of a side chain and its derivatives in the
5251 C corresponding virtual-bond valence angles THETA and the spherical angles
5252 C ALPHA and OMEGA derived from AM1 all-atom calculations.
5253 C added by Urszula Kozlowska. 07/11/2007
5255 implicit real*8 (a-h,o-z)
5256 include 'DIMENSIONS'
5257 include 'COMMON.GEO'
5258 include 'COMMON.LOCAL'
5259 include 'COMMON.VAR'
5260 include 'COMMON.SCROT'
5261 include 'COMMON.INTERACT'
5262 include 'COMMON.DERIV'
5263 include 'COMMON.CHAIN'
5264 include 'COMMON.IOUNITS'
5265 include 'COMMON.NAMES'
5266 include 'COMMON.FFIELD'
5267 include 'COMMON.CONTROL'
5268 include 'COMMON.VECTORS'
5269 double precision x_prime(3),y_prime(3),z_prime(3)
5270 & , sumene,dsc_i,dp2_i,x(65),
5271 & xx,yy,zz,sumene1,sumene2,sumene3,sumene4,s1,s1_6,s2,s2_6,
5272 & de_dxx,de_dyy,de_dzz,de_dt
5273 double precision s1_t,s1_6_t,s2_t,s2_6_t
5275 & dXX_Ci1(3),dYY_Ci1(3),dZZ_Ci1(3),dXX_Ci(3),
5276 & dYY_Ci(3),dZZ_Ci(3),dXX_XYZ(3),dYY_XYZ(3),dZZ_XYZ(3),
5277 & dt_dCi(3),dt_dCi1(3)
5278 common /sccalc/ time11,time12,time112,theti,it,nlobit
5281 do i=loc_start,loc_end
5282 if (itype(i).eq.ntyp1) cycle
5283 costtab(i+1) =dcos(theta(i+1))
5284 sinttab(i+1) =dsqrt(1-costtab(i+1)*costtab(i+1))
5285 cost2tab(i+1)=dsqrt(0.5d0*(1.0d0+costtab(i+1)))
5286 sint2tab(i+1)=dsqrt(0.5d0*(1.0d0-costtab(i+1)))
5287 cosfac2=0.5d0/(1.0d0+costtab(i+1))
5288 cosfac=dsqrt(cosfac2)
5289 sinfac2=0.5d0/(1.0d0-costtab(i+1))
5290 sinfac=dsqrt(sinfac2)
5292 if (it.eq.10) goto 1
5294 C Compute the axes of tghe local cartesian coordinates system; store in
5295 c x_prime, y_prime and z_prime
5302 C write(2,*) "dc_norm", dc_norm(1,i+nres),dc_norm(2,i+nres),
5303 C & dc_norm(3,i+nres)
5305 x_prime(j) = (dc_norm(j,i) - dc_norm(j,i-1))*cosfac
5306 y_prime(j) = (dc_norm(j,i) + dc_norm(j,i-1))*sinfac
5309 z_prime(j) = -uz(j,i-1)*dsign(1.0d0,dfloat(itype(i)))
5312 c write (2,*) "x_prime",(x_prime(j),j=1,3)
5313 c write (2,*) "y_prime",(y_prime(j),j=1,3)
5314 c write (2,*) "z_prime",(z_prime(j),j=1,3)
5315 c write (2,*) "xx",scalar(x_prime(1),x_prime(1)),
5316 c & " xy",scalar(x_prime(1),y_prime(1)),
5317 c & " xz",scalar(x_prime(1),z_prime(1)),
5318 c & " yy",scalar(y_prime(1),y_prime(1)),
5319 c & " yz",scalar(y_prime(1),z_prime(1)),
5320 c & " zz",scalar(z_prime(1),z_prime(1))
5322 C Transform the unit vector of the ith side-chain centroid, dC_norm(*,i),
5323 C to local coordinate system. Store in xx, yy, zz.
5329 xx = xx + x_prime(j)*dc_norm(j,i+nres)
5330 yy = yy + y_prime(j)*dc_norm(j,i+nres)
5331 zz = zz + z_prime(j)*dc_norm(j,i+nres)
5338 C Compute the energy of the ith side cbain
5340 c write (2,*) "xx",xx," yy",yy," zz",zz
5343 x(j) = sc_parmin(j,it)
5346 Cc diagnostics - remove later
5348 yy1 = dsin(alph(2))*dcos(omeg(2))
5349 zz1 = -dsign(1.0,dfloat(itype(i)))*dsin(alph(2))*dsin(omeg(2))
5350 write(2,'(3f8.1,3f9.3,1x,3f9.3)')
5351 & alph(2)*rad2deg,omeg(2)*rad2deg,theta(3)*rad2deg,xx,yy,zz,
5353 C," --- ", xx_w,yy_w,zz_w
5356 sumene1= x(1)+ x(2)*xx+ x(3)*yy+ x(4)*zz+ x(5)*xx**2
5357 & + x(6)*yy**2+ x(7)*zz**2+ x(8)*xx*zz+ x(9)*xx*yy
5359 sumene2= x(11) + x(12)*xx + x(13)*yy + x(14)*zz + x(15)*xx**2
5360 & + x(16)*yy**2 + x(17)*zz**2 + x(18)*xx*zz + x(19)*xx*yy
5362 sumene3= x(21) +x(22)*xx +x(23)*yy +x(24)*zz +x(25)*xx**2
5363 & +x(26)*yy**2 +x(27)*zz**2 +x(28)*xx*zz +x(29)*xx*yy
5364 & +x(30)*yy*zz +x(31)*xx**3 +x(32)*yy**3 +x(33)*zz**3
5365 & +x(34)*(xx**2)*yy +x(35)*(xx**2)*zz +x(36)*(yy**2)*xx
5366 & +x(37)*(yy**2)*zz +x(38)*(zz**2)*xx +x(39)*(zz**2)*yy
5368 sumene4= x(41) +x(42)*xx +x(43)*yy +x(44)*zz +x(45)*xx**2
5369 & +x(46)*yy**2 +x(47)*zz**2 +x(48)*xx*zz +x(49)*xx*yy
5370 & +x(50)*yy*zz +x(51)*xx**3 +x(52)*yy**3 +x(53)*zz**3
5371 & +x(54)*(xx**2)*yy +x(55)*(xx**2)*zz +x(56)*(yy**2)*xx
5372 & +x(57)*(yy**2)*zz +x(58)*(zz**2)*xx +x(59)*(zz**2)*yy
5374 dsc_i = 0.743d0+x(61)
5376 dscp1=dsqrt(dsc_i**2+dp2_i**2-2*dsc_i*dp2_i
5377 & *(xx*cost2tab(i+1)+yy*sint2tab(i+1)))
5378 dscp2=dsqrt(dsc_i**2+dp2_i**2-2*dsc_i*dp2_i
5379 & *(xx*cost2tab(i+1)-yy*sint2tab(i+1)))
5380 s1=(1+x(63))/(0.1d0 + dscp1)
5381 s1_6=(1+x(64))/(0.1d0 + dscp1**6)
5382 s2=(1+x(65))/(0.1d0 + dscp2)
5383 s2_6=(1+x(65))/(0.1d0 + dscp2**6)
5384 sumene = ( sumene3*sint2tab(i+1) + sumene1)*(s1+s1_6)
5385 & + (sumene4*cost2tab(i+1) +sumene2)*(s2+s2_6)
5386 c write(2,'(i2," sumene",7f9.3)') i,sumene1,sumene2,sumene3,
5388 c & dscp1,dscp2,sumene
5389 c sumene = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
5390 escloc = escloc + sumene
5391 c write (2,*) "i",i," escloc",sumene,escloc,it,itype(i)
5396 C This section to check the numerical derivatives of the energy of ith side
5397 C chain in xx, yy, zz, and theta. Use the -DDEBUG compiler option or insert
5398 C #define DEBUG in the code to turn it on.
5400 write (2,*) "sumene =",sumene
5404 write (2,*) xx,yy,zz
5405 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
5406 de_dxx_num=(sumenep-sumene)/aincr
5408 write (2,*) "xx+ sumene from enesc=",sumenep
5411 write (2,*) xx,yy,zz
5412 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
5413 de_dyy_num=(sumenep-sumene)/aincr
5415 write (2,*) "yy+ sumene from enesc=",sumenep
5418 write (2,*) xx,yy,zz
5419 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
5420 de_dzz_num=(sumenep-sumene)/aincr
5422 write (2,*) "zz+ sumene from enesc=",sumenep
5423 costsave=cost2tab(i+1)
5424 sintsave=sint2tab(i+1)
5425 cost2tab(i+1)=dcos(0.5d0*(theta(i+1)+aincr))
5426 sint2tab(i+1)=dsin(0.5d0*(theta(i+1)+aincr))
5427 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
5428 de_dt_num=(sumenep-sumene)/aincr
5429 write (2,*) " t+ sumene from enesc=",sumenep
5430 cost2tab(i+1)=costsave
5431 sint2tab(i+1)=sintsave
5432 C End of diagnostics section.
5435 C Compute the gradient of esc
5437 c zz=zz*dsign(1.0,dfloat(itype(i)))
5438 pom_s1=(1.0d0+x(63))/(0.1d0 + dscp1)**2
5439 pom_s16=6*(1.0d0+x(64))/(0.1d0 + dscp1**6)**2
5440 pom_s2=(1.0d0+x(65))/(0.1d0 + dscp2)**2
5441 pom_s26=6*(1.0d0+x(65))/(0.1d0 + dscp2**6)**2
5442 pom_dx=dsc_i*dp2_i*cost2tab(i+1)
5443 pom_dy=dsc_i*dp2_i*sint2tab(i+1)
5444 pom_dt1=-0.5d0*dsc_i*dp2_i*(xx*sint2tab(i+1)-yy*cost2tab(i+1))
5445 pom_dt2=-0.5d0*dsc_i*dp2_i*(xx*sint2tab(i+1)+yy*cost2tab(i+1))
5446 pom1=(sumene3*sint2tab(i+1)+sumene1)
5447 & *(pom_s1/dscp1+pom_s16*dscp1**4)
5448 pom2=(sumene4*cost2tab(i+1)+sumene2)
5449 & *(pom_s2/dscp2+pom_s26*dscp2**4)
5450 sumene1x=x(2)+2*x(5)*xx+x(8)*zz+ x(9)*yy
5451 sumene3x=x(22)+2*x(25)*xx+x(28)*zz+x(29)*yy+3*x(31)*xx**2
5452 & +2*x(34)*xx*yy +2*x(35)*xx*zz +x(36)*(yy**2) +x(38)*(zz**2)
5454 sumene2x=x(12)+2*x(15)*xx+x(18)*zz+ x(19)*yy
5455 sumene4x=x(42)+2*x(45)*xx +x(48)*zz +x(49)*yy +3*x(51)*xx**2
5456 & +2*x(54)*xx*yy+2*x(55)*xx*zz+x(56)*(yy**2)+x(58)*(zz**2)
5458 de_dxx =(sumene1x+sumene3x*sint2tab(i+1))*(s1+s1_6)
5459 & +(sumene2x+sumene4x*cost2tab(i+1))*(s2+s2_6)
5460 & +(pom1+pom2)*pom_dx
5462 write(2,*), "de_dxx = ", de_dxx,de_dxx_num,itype(i)
5465 sumene1y=x(3) + 2*x(6)*yy + x(9)*xx + x(10)*zz
5466 sumene3y=x(23) +2*x(26)*yy +x(29)*xx +x(30)*zz +3*x(32)*yy**2
5467 & +x(34)*(xx**2) +2*x(36)*yy*xx +2*x(37)*yy*zz +x(39)*(zz**2)
5469 sumene2y=x(13) + 2*x(16)*yy + x(19)*xx + x(20)*zz
5470 sumene4y=x(43)+2*x(46)*yy+x(49)*xx +x(50)*zz
5471 & +3*x(52)*yy**2+x(54)*xx**2+2*x(56)*yy*xx +2*x(57)*yy*zz
5472 & +x(59)*zz**2 +x(60)*xx*zz
5473 de_dyy =(sumene1y+sumene3y*sint2tab(i+1))*(s1+s1_6)
5474 & +(sumene2y+sumene4y*cost2tab(i+1))*(s2+s2_6)
5475 & +(pom1-pom2)*pom_dy
5477 write(2,*), "de_dyy = ", de_dyy,de_dyy_num,itype(i)
5480 de_dzz =(x(24) +2*x(27)*zz +x(28)*xx +x(30)*yy
5481 & +3*x(33)*zz**2 +x(35)*xx**2 +x(37)*yy**2 +2*x(38)*zz*xx
5482 & +2*x(39)*zz*yy +x(40)*xx*yy)*sint2tab(i+1)*(s1+s1_6)
5483 & +(x(4) + 2*x(7)*zz+ x(8)*xx + x(10)*yy)*(s1+s1_6)
5484 & +(x(44)+2*x(47)*zz +x(48)*xx +x(50)*yy +3*x(53)*zz**2
5485 & +x(55)*xx**2 +x(57)*(yy**2)+2*x(58)*zz*xx +2*x(59)*zz*yy
5486 & +x(60)*xx*yy)*cost2tab(i+1)*(s2+s2_6)
5487 & + ( x(14) + 2*x(17)*zz+ x(18)*xx + x(20)*yy)*(s2+s2_6)
5489 write(2,*), "de_dzz = ", de_dzz,de_dzz_num,itype(i)
5492 de_dt = 0.5d0*sumene3*cost2tab(i+1)*(s1+s1_6)
5493 & -0.5d0*sumene4*sint2tab(i+1)*(s2+s2_6)
5494 & +pom1*pom_dt1+pom2*pom_dt2
5496 write(2,*), "de_dt = ", de_dt,de_dt_num,itype(i)
5501 cossc=scalar(dc_norm(1,i),dc_norm(1,i+nres))
5502 cossc1=scalar(dc_norm(1,i-1),dc_norm(1,i+nres))
5503 cosfac2xx=cosfac2*xx
5504 sinfac2yy=sinfac2*yy
5506 dt_dCi(k) = -(dc_norm(k,i-1)+costtab(i+1)*dc_norm(k,i))*
5508 dt_dCi1(k)= -(dc_norm(k,i)+costtab(i+1)*dc_norm(k,i-1))*
5510 pom=(dC_norm(k,i+nres)-cossc*dC_norm(k,i))*vbld_inv(i+1)
5511 pom1=(dC_norm(k,i+nres)-cossc1*dC_norm(k,i-1))*vbld_inv(i)
5512 c write (iout,*) "i",i," k",k," pom",pom," pom1",pom1,
5513 c & " dt_dCi",dt_dCi(k)," dt_dCi1",dt_dCi1(k)
5514 c write (iout,*) "dC_norm",(dC_norm(j,i),j=1,3),
5515 c & (dC_norm(j,i-1),j=1,3)," vbld_inv",vbld_inv(i+1),vbld_inv(i)
5516 dXX_Ci(k)=pom*cosfac-dt_dCi(k)*cosfac2xx
5517 dXX_Ci1(k)=-pom1*cosfac-dt_dCi1(k)*cosfac2xx
5518 dYY_Ci(k)=pom*sinfac+dt_dCi(k)*sinfac2yy
5519 dYY_Ci1(k)=pom1*sinfac+dt_dCi1(k)*sinfac2yy
5523 dZZ_Ci(k)=dZZ_Ci(k)-uzgrad(j,k,2,i-1)
5524 & *dsign(1.0d0,dfloat(itype(i)))*dC_norm(j,i+nres)
5525 dZZ_Ci1(k)=dZZ_Ci1(k)-uzgrad(j,k,1,i-1)
5526 & *dsign(1.0d0,dfloat(itype(i)))*dC_norm(j,i+nres)
5529 dXX_XYZ(k)=vbld_inv(i+nres)*(x_prime(k)-xx*dC_norm(k,i+nres))
5530 dYY_XYZ(k)=vbld_inv(i+nres)*(y_prime(k)-yy*dC_norm(k,i+nres))
5531 dZZ_XYZ(k)=vbld_inv(i+nres)*
5532 & (z_prime(k)-zz*dC_norm(k,i+nres))
5534 dt_dCi(k) = -dt_dCi(k)/sinttab(i+1)
5535 dt_dCi1(k)= -dt_dCi1(k)/sinttab(i+1)
5539 dXX_Ctab(k,i)=dXX_Ci(k)
5540 dXX_C1tab(k,i)=dXX_Ci1(k)
5541 dYY_Ctab(k,i)=dYY_Ci(k)
5542 dYY_C1tab(k,i)=dYY_Ci1(k)
5543 dZZ_Ctab(k,i)=dZZ_Ci(k)
5544 dZZ_C1tab(k,i)=dZZ_Ci1(k)
5545 dXX_XYZtab(k,i)=dXX_XYZ(k)
5546 dYY_XYZtab(k,i)=dYY_XYZ(k)
5547 dZZ_XYZtab(k,i)=dZZ_XYZ(k)
5551 c write (iout,*) "k",k," dxx_ci1",dxx_ci1(k)," dyy_ci1",
5552 c & dyy_ci1(k)," dzz_ci1",dzz_ci1(k)
5553 c write (iout,*) "k",k," dxx_ci",dxx_ci(k)," dyy_ci",
5554 c & dyy_ci(k)," dzz_ci",dzz_ci(k)
5555 c write (iout,*) "k",k," dt_dci",dt_dci(k)," dt_dci",
5557 c write (iout,*) "k",k," dxx_XYZ",dxx_XYZ(k)," dyy_XYZ",
5558 c & dyy_XYZ(k)," dzz_XYZ",dzz_XYZ(k)
5559 gscloc(k,i-1)=gscloc(k,i-1)+de_dxx*dxx_ci1(k)
5560 & +de_dyy*dyy_ci1(k)+de_dzz*dzz_ci1(k)+de_dt*dt_dCi1(k)
5561 gscloc(k,i)=gscloc(k,i)+de_dxx*dxx_Ci(k)
5562 & +de_dyy*dyy_Ci(k)+de_dzz*dzz_Ci(k)+de_dt*dt_dCi(k)
5563 gsclocx(k,i)= de_dxx*dxx_XYZ(k)
5564 & +de_dyy*dyy_XYZ(k)+de_dzz*dzz_XYZ(k)
5566 c write(iout,*) "ENERGY GRAD = ", (gscloc(k,i-1),k=1,3),
5567 c & (gscloc(k,i),k=1,3),(gsclocx(k,i),k=1,3)
5569 C to check gradient call subroutine check_grad
5575 c------------------------------------------------------------------------------
5576 double precision function enesc(x,xx,yy,zz,cost2,sint2)
5578 double precision x(65),xx,yy,zz,cost2,sint2,sumene1,sumene2,
5579 & sumene3,sumene4,sumene,dsc_i,dp2_i,dscp1,dscp2,s1,s1_6,s2,s2_6
5580 sumene1= x(1)+ x(2)*xx+ x(3)*yy+ x(4)*zz+ x(5)*xx**2
5581 & + x(6)*yy**2+ x(7)*zz**2+ x(8)*xx*zz+ x(9)*xx*yy
5583 sumene2= x(11) + x(12)*xx + x(13)*yy + x(14)*zz + x(15)*xx**2
5584 & + x(16)*yy**2 + x(17)*zz**2 + x(18)*xx*zz + x(19)*xx*yy
5586 sumene3= x(21) +x(22)*xx +x(23)*yy +x(24)*zz +x(25)*xx**2
5587 & +x(26)*yy**2 +x(27)*zz**2 +x(28)*xx*zz +x(29)*xx*yy
5588 & +x(30)*yy*zz +x(31)*xx**3 +x(32)*yy**3 +x(33)*zz**3
5589 & +x(34)*(xx**2)*yy +x(35)*(xx**2)*zz +x(36)*(yy**2)*xx
5590 & +x(37)*(yy**2)*zz +x(38)*(zz**2)*xx +x(39)*(zz**2)*yy
5592 sumene4= x(41) +x(42)*xx +x(43)*yy +x(44)*zz +x(45)*xx**2
5593 & +x(46)*yy**2 +x(47)*zz**2 +x(48)*xx*zz +x(49)*xx*yy
5594 & +x(50)*yy*zz +x(51)*xx**3 +x(52)*yy**3 +x(53)*zz**3
5595 & +x(54)*(xx**2)*yy +x(55)*(xx**2)*zz +x(56)*(yy**2)*xx
5596 & +x(57)*(yy**2)*zz +x(58)*(zz**2)*xx +x(59)*(zz**2)*yy
5598 dsc_i = 0.743d0+x(61)
5600 dscp1=dsqrt(dsc_i**2+dp2_i**2-2*dsc_i*dp2_i
5601 & *(xx*cost2+yy*sint2))
5602 dscp2=dsqrt(dsc_i**2+dp2_i**2-2*dsc_i*dp2_i
5603 & *(xx*cost2-yy*sint2))
5604 s1=(1+x(63))/(0.1d0 + dscp1)
5605 s1_6=(1+x(64))/(0.1d0 + dscp1**6)
5606 s2=(1+x(65))/(0.1d0 + dscp2)
5607 s2_6=(1+x(65))/(0.1d0 + dscp2**6)
5608 sumene = ( sumene3*sint2 + sumene1)*(s1+s1_6)
5609 & + (sumene4*cost2 +sumene2)*(s2+s2_6)
5614 c------------------------------------------------------------------------------
5615 subroutine gcont(rij,r0ij,eps0ij,delta,fcont,fprimcont)
5617 C This procedure calculates two-body contact function g(rij) and its derivative:
5620 C g(rij) = esp0ij*(-0.9375*x+0.625*x**3-0.1875*x**5) ! -1 =< x =< 1
5623 C where x=(rij-r0ij)/delta
5625 C rij - interbody distance, r0ij - contact distance, eps0ij - contact energy
5628 double precision rij,r0ij,eps0ij,fcont,fprimcont
5629 double precision x,x2,x4,delta
5633 if (x.lt.-1.0D0) then
5636 else if (x.le.1.0D0) then
5639 fcont=eps0ij*(x*(-0.9375D0+0.6250D0*x2-0.1875D0*x4)+0.5D0)
5640 fprimcont=eps0ij * (-0.9375D0+1.8750D0*x2-0.9375D0*x4)/delta
5647 c------------------------------------------------------------------------------
5648 subroutine splinthet(theti,delta,ss,ssder)
5649 implicit real*8 (a-h,o-z)
5650 include 'DIMENSIONS'
5651 include 'COMMON.VAR'
5652 include 'COMMON.GEO'
5655 if (theti.gt.pipol) then
5656 call gcont(theti,thetup,1.0d0,delta,ss,ssder)
5658 call gcont(-theti,-thetlow,1.0d0,delta,ss,ssder)
5663 c------------------------------------------------------------------------------
5664 subroutine spline1(x,x0,delta,f0,f1,fprim0,f,fprim)
5666 double precision x,x0,delta,f0,f1,fprim0,f,fprim
5667 double precision ksi,ksi2,ksi3,a1,a2,a3
5668 a1=fprim0*delta/(f1-f0)
5674 f=f0+(f1-f0)*ksi*(a1+ksi*(a2+a3*ksi))
5675 fprim=(f1-f0)/delta*(a1+ksi*(2*a2+3*ksi*a3))
5678 c------------------------------------------------------------------------------
5679 subroutine spline2(x,x0,delta,f0x,f1x,fprim0x,fx)
5681 double precision x,x0,delta,f0x,f1x,fprim0x,fx
5682 double precision ksi,ksi2,ksi3,a1,a2,a3
5687 a2=3*(f1x-f0x)-2*fprim0x*delta
5688 a3=fprim0x*delta-2*(f1x-f0x)
5689 fx=f0x+a1*ksi+a2*ksi2+a3*ksi3
5692 C-----------------------------------------------------------------------------
5694 C-----------------------------------------------------------------------------
5695 subroutine etor(etors,edihcnstr)
5696 implicit real*8 (a-h,o-z)
5697 include 'DIMENSIONS'
5698 include 'COMMON.VAR'
5699 include 'COMMON.GEO'
5700 include 'COMMON.LOCAL'
5701 include 'COMMON.TORSION'
5702 include 'COMMON.INTERACT'
5703 include 'COMMON.DERIV'
5704 include 'COMMON.CHAIN'
5705 include 'COMMON.NAMES'
5706 include 'COMMON.IOUNITS'
5707 include 'COMMON.FFIELD'
5708 include 'COMMON.TORCNSTR'
5709 include 'COMMON.CONTROL'
5711 C Set lprn=.true. for debugging
5715 do i=iphi_start,iphi_end
5717 if (itype(i-2).eq.ntyp1.or. itype(i-1).eq.ntyp1
5718 & .or. itype(i).eq.ntyp1) cycle
5719 itori=itortyp(itype(i-2))
5720 itori1=itortyp(itype(i-1))
5723 C Proline-Proline pair is a special case...
5724 if (itori.eq.3 .and. itori1.eq.3) then
5725 if (phii.gt.-dwapi3) then
5727 fac=1.0D0/(1.0D0-cosphi)
5728 etorsi=v1(1,3,3)*fac
5729 etorsi=etorsi+etorsi
5730 etors=etors+etorsi-v1(1,3,3)
5731 if (energy_dec) etors_ii=etors_ii+etorsi-v1(1,3,3)
5732 gloci=gloci-3*fac*etorsi*dsin(3*phii)
5735 v1ij=v1(j+1,itori,itori1)
5736 v2ij=v2(j+1,itori,itori1)
5739 etors=etors+v1ij*cosphi+v2ij*sinphi+dabs(v1ij)+dabs(v2ij)
5740 if (energy_dec) etors_ii=etors_ii+
5741 & v2ij*sinphi+dabs(v1ij)+dabs(v2ij)
5742 gloci=gloci+j*(v2ij*cosphi-v1ij*sinphi)
5746 v1ij=v1(j,itori,itori1)
5747 v2ij=v2(j,itori,itori1)
5750 etors=etors+v1ij*cosphi+v2ij*sinphi+dabs(v1ij)+dabs(v2ij)
5751 if (energy_dec) etors_ii=etors_ii+
5752 & v1ij*cosphi+v2ij*sinphi+dabs(v1ij)+dabs(v2ij)
5753 gloci=gloci+j*(v2ij*cosphi-v1ij*sinphi)
5756 if (energy_dec) write (iout,'(a6,i5,0pf7.3)')
5759 & write (iout,'(2(a3,2x,i3,2x),2i3,6f8.3/26x,6f8.3/)')
5760 & restyp(itype(i-2)),i-2,restyp(itype(i-1)),i-1,itori,itori1,
5761 & (v1(j,itori,itori1),j=1,6),(v2(j,itori,itori1),j=1,6)
5762 gloc(i-3,icg)=gloc(i-3,icg)+wtor*gloci
5763 c write (iout,*) 'i=',i,' gloc=',gloc(i-3,icg)
5765 ! 6/20/98 - dihedral angle constraints
5768 itori=idih_constr(i)
5771 if (difi.gt.drange(i)) then
5773 edihcnstr=edihcnstr+0.25d0*ftors*difi**4
5774 gloc(itori-3,icg)=gloc(itori-3,icg)+ftors*difi**3
5775 else if (difi.lt.-drange(i)) then
5777 edihcnstr=edihcnstr+0.25d0*ftors*difi**4
5778 gloc(itori-3,icg)=gloc(itori-3,icg)+ftors*difi**3
5780 ! write (iout,'(2i5,2f8.3,2e14.5)') i,itori,rad2deg*phii,
5781 ! & rad2deg*difi,0.25d0*ftors*difi**4,gloc(itori-3,icg)
5783 ! write (iout,*) 'edihcnstr',edihcnstr
5786 c------------------------------------------------------------------------------
5787 subroutine etor_d(etors_d)
5791 c----------------------------------------------------------------------------
5793 subroutine etor(etors,edihcnstr)
5794 implicit real*8 (a-h,o-z)
5795 include 'DIMENSIONS'
5796 include 'COMMON.VAR'
5797 include 'COMMON.GEO'
5798 include 'COMMON.LOCAL'
5799 include 'COMMON.TORSION'
5800 include 'COMMON.INTERACT'
5801 include 'COMMON.DERIV'
5802 include 'COMMON.CHAIN'
5803 include 'COMMON.NAMES'
5804 include 'COMMON.IOUNITS'
5805 include 'COMMON.FFIELD'
5806 include 'COMMON.TORCNSTR'
5807 include 'COMMON.CONTROL'
5809 C Set lprn=.true. for debugging
5813 do i=iphi_start,iphi_end
5814 if (itype(i-2).eq.ntyp1 .or. itype(i-1).eq.ntyp1
5815 & .or. itype(i).eq.ntyp1) cycle
5817 if (iabs(itype(i)).eq.20) then
5822 itori=itortyp(itype(i-2))
5823 itori1=itortyp(itype(i-1))
5826 C Regular cosine and sine terms
5827 do j=1,nterm(itori,itori1,iblock)
5828 v1ij=v1(j,itori,itori1,iblock)
5829 v2ij=v2(j,itori,itori1,iblock)
5832 etors=etors+v1ij*cosphi+v2ij*sinphi
5833 if (energy_dec) etors_ii=etors_ii+
5834 & v1ij*cosphi+v2ij*sinphi
5835 gloci=gloci+j*(v2ij*cosphi-v1ij*sinphi)
5839 C E = SUM ----------------------------------- - v1
5840 C [v2 cos(phi/2)+v3 sin(phi/2)]^2 + 1
5842 cosphi=dcos(0.5d0*phii)
5843 sinphi=dsin(0.5d0*phii)
5844 do j=1,nlor(itori,itori1,iblock)
5845 vl1ij=vlor1(j,itori,itori1)
5846 vl2ij=vlor2(j,itori,itori1)
5847 vl3ij=vlor3(j,itori,itori1)
5848 pom=vl2ij*cosphi+vl3ij*sinphi
5849 pom1=1.0d0/(pom*pom+1.0d0)
5850 etors=etors+vl1ij*pom1
5851 if (energy_dec) etors_ii=etors_ii+
5854 gloci=gloci+vl1ij*(vl3ij*cosphi-vl2ij*sinphi)*pom
5856 C Subtract the constant term
5857 etors=etors-v0(itori,itori1,iblock)
5858 if (energy_dec) write (iout,'(a6,i5,0pf7.3)')
5859 & 'etor',i,etors_ii-v0(itori,itori1,iblock)
5861 & write (iout,'(2(a3,2x,i3,2x),2i3,6f8.3/26x,6f8.3/)')
5862 & restyp(itype(i-2)),i-2,restyp(itype(i-1)),i-1,itori,itori1,
5863 & (v1(j,itori,itori1,iblock),j=1,6),
5864 & (v2(j,itori,itori1,iblock),j=1,6)
5865 gloc(i-3,icg)=gloc(i-3,icg)+wtor*gloci
5866 c write (iout,*) 'i=',i,' gloc=',gloc(i-3,icg)
5868 ! 6/20/98 - dihedral angle constraints
5870 c do i=1,ndih_constr
5871 do i=idihconstr_start,idihconstr_end
5872 itori=idih_constr(i)
5874 difi=pinorm(phii-phi0(i))
5875 if (difi.gt.drange(i)) then
5877 edihcnstr=edihcnstr+0.25d0*ftors*difi**4
5878 gloc(itori-3,icg)=gloc(itori-3,icg)+ftors*difi**3
5879 else if (difi.lt.-drange(i)) then
5881 edihcnstr=edihcnstr+0.25d0*ftors*difi**4
5882 gloc(itori-3,icg)=gloc(itori-3,icg)+ftors*difi**3
5886 cd write (iout,'(2i5,4f8.3,2e14.5)') i,itori,rad2deg*phii,
5887 cd & rad2deg*phi0(i), rad2deg*drange(i),
5888 cd & rad2deg*difi,0.25d0*ftors*difi**4,gloc(itori-3,icg)
5890 cd write (iout,*) 'edihcnstr',edihcnstr
5893 c----------------------------------------------------------------------------
5894 subroutine etor_d(etors_d)
5895 C 6/23/01 Compute double torsional energy
5896 implicit real*8 (a-h,o-z)
5897 include 'DIMENSIONS'
5898 include 'COMMON.VAR'
5899 include 'COMMON.GEO'
5900 include 'COMMON.LOCAL'
5901 include 'COMMON.TORSION'
5902 include 'COMMON.INTERACT'
5903 include 'COMMON.DERIV'
5904 include 'COMMON.CHAIN'
5905 include 'COMMON.NAMES'
5906 include 'COMMON.IOUNITS'
5907 include 'COMMON.FFIELD'
5908 include 'COMMON.TORCNSTR'
5910 C Set lprn=.true. for debugging
5914 c write(iout,*) "a tu??"
5915 do i=iphid_start,iphid_end
5916 if (itype(i-2).eq.ntyp1 .or. itype(i-1).eq.ntyp1
5917 & .or. itype(i).eq.ntyp1 .or. itype(i+1).eq.ntyp1) cycle
5918 itori=itortyp(itype(i-2))
5919 itori1=itortyp(itype(i-1))
5920 itori2=itortyp(itype(i))
5926 if (iabs(itype(i+1)).eq.20) iblock=2
5928 C Regular cosine and sine terms
5929 do j=1,ntermd_1(itori,itori1,itori2,iblock)
5930 v1cij=v1c(1,j,itori,itori1,itori2,iblock)
5931 v1sij=v1s(1,j,itori,itori1,itori2,iblock)
5932 v2cij=v1c(2,j,itori,itori1,itori2,iblock)
5933 v2sij=v1s(2,j,itori,itori1,itori2,iblock)
5934 cosphi1=dcos(j*phii)
5935 sinphi1=dsin(j*phii)
5936 cosphi2=dcos(j*phii1)
5937 sinphi2=dsin(j*phii1)
5938 etors_d=etors_d+v1cij*cosphi1+v1sij*sinphi1+
5939 & v2cij*cosphi2+v2sij*sinphi2
5940 gloci1=gloci1+j*(v1sij*cosphi1-v1cij*sinphi1)
5941 gloci2=gloci2+j*(v2sij*cosphi2-v2cij*sinphi2)
5943 do k=2,ntermd_2(itori,itori1,itori2,iblock)
5945 v1cdij = v2c(k,l,itori,itori1,itori2,iblock)
5946 v2cdij = v2c(l,k,itori,itori1,itori2,iblock)
5947 v1sdij = v2s(k,l,itori,itori1,itori2,iblock)
5948 v2sdij = v2s(l,k,itori,itori1,itori2,iblock)
5949 cosphi1p2=dcos(l*phii+(k-l)*phii1)
5950 cosphi1m2=dcos(l*phii-(k-l)*phii1)
5951 sinphi1p2=dsin(l*phii+(k-l)*phii1)
5952 sinphi1m2=dsin(l*phii-(k-l)*phii1)
5953 etors_d=etors_d+v1cdij*cosphi1p2+v2cdij*cosphi1m2+
5954 & v1sdij*sinphi1p2+v2sdij*sinphi1m2
5955 gloci1=gloci1+l*(v1sdij*cosphi1p2+v2sdij*cosphi1m2
5956 & -v1cdij*sinphi1p2-v2cdij*sinphi1m2)
5957 gloci2=gloci2+(k-l)*(v1sdij*cosphi1p2-v2sdij*cosphi1m2
5958 & -v1cdij*sinphi1p2+v2cdij*sinphi1m2)
5961 gloc(i-3,icg)=gloc(i-3,icg)+wtor_d*gloci1
5962 gloc(i-2,icg)=gloc(i-2,icg)+wtor_d*gloci2
5967 c------------------------------------------------------------------------------
5968 subroutine eback_sc_corr(esccor)
5969 c 7/21/2007 Correlations between the backbone-local and side-chain-local
5970 c conformational states; temporarily implemented as differences
5971 c between UNRES torsional potentials (dependent on three types of
5972 c residues) and the torsional potentials dependent on all 20 types
5973 c of residues computed from AM1 energy surfaces of terminally-blocked
5974 c amino-acid residues.
5975 implicit real*8 (a-h,o-z)
5976 include 'DIMENSIONS'
5977 include 'COMMON.VAR'
5978 include 'COMMON.GEO'
5979 include 'COMMON.LOCAL'
5980 include 'COMMON.TORSION'
5981 include 'COMMON.SCCOR'
5982 include 'COMMON.INTERACT'
5983 include 'COMMON.DERIV'
5984 include 'COMMON.CHAIN'
5985 include 'COMMON.NAMES'
5986 include 'COMMON.IOUNITS'
5987 include 'COMMON.FFIELD'
5988 include 'COMMON.CONTROL'
5990 C Set lprn=.true. for debugging
5993 c write (iout,*) "EBACK_SC_COR",itau_start,itau_end
5995 do i=itau_start,itau_end
5996 if ((itype(i-2).eq.ntyp1).or.(itype(i-1).eq.ntyp1)) cycle
5998 isccori=isccortyp(itype(i-2))
5999 isccori1=isccortyp(itype(i-1))
6000 c write (iout,*) "EBACK_SC_COR",i,nterm_sccor(isccori,isccori1)
6002 do intertyp=1,3 !intertyp
6003 cc Added 09 May 2012 (Adasko)
6004 cc Intertyp means interaction type of backbone mainchain correlation:
6005 c 1 = SC...Ca...Ca...Ca
6006 c 2 = Ca...Ca...Ca...SC
6007 c 3 = SC...Ca...Ca...SCi
6009 if (((intertyp.eq.3).and.((itype(i-2).eq.10).or.
6010 & (itype(i-1).eq.10).or.(itype(i-2).eq.ntyp1).or.
6011 & (itype(i-1).eq.ntyp1)))
6012 & .or. ((intertyp.eq.1).and.((itype(i-2).eq.10)
6013 & .or.(itype(i-2).eq.ntyp1).or.(itype(i-1).eq.ntyp1)
6014 & .or.(itype(i).eq.ntyp1)))
6015 & .or.((intertyp.eq.2).and.((itype(i-1).eq.10).or.
6016 & (itype(i-1).eq.ntyp1).or.(itype(i-2).eq.ntyp1).or.
6017 & (itype(i-3).eq.ntyp1)))) cycle
6018 if ((intertyp.eq.2).and.(i.eq.4).and.(itype(1).eq.ntyp1)) cycle
6019 if ((intertyp.eq.1).and.(i.eq.nres).and.(itype(nres).eq.ntyp1))
6021 do j=1,nterm_sccor(isccori,isccori1)
6022 v1ij=v1sccor(j,intertyp,isccori,isccori1)
6023 v2ij=v2sccor(j,intertyp,isccori,isccori1)
6024 cosphi=dcos(j*tauangle(intertyp,i))
6025 sinphi=dsin(j*tauangle(intertyp,i))
6026 esccor=esccor+v1ij*cosphi+v2ij*sinphi
6027 gloci=gloci+j*(v2ij*cosphi-v1ij*sinphi)
6029 c write (iout,*) "EBACK_SC_COR",i,v1ij*cosphi+v2ij*sinphi,intertyp
6030 gloc_sc(intertyp,i-3,icg)=gloc_sc(intertyp,i-3,icg)+wsccor*gloci
6032 & write (iout,'(2(a3,2x,i3,2x),2i3,6f8.3/26x,6f8.3/)')
6033 & restyp(itype(i-2)),i-2,restyp(itype(i-1)),i-1,isccori,isccori1,
6034 & (v1sccor(j,intertyp,isccori,isccori1),j=1,6)
6035 & ,(v2sccor(j,intertyp,isccori,isccori1),j=1,6)
6036 gsccor_loc(i-3)=gsccor_loc(i-3)+gloci
6042 c----------------------------------------------------------------------------
6043 subroutine multibody(ecorr)
6044 C This subroutine calculates multi-body contributions to energy following
6045 C the idea of Skolnick et al. If side chains I and J make a contact and
6046 C at the same time side chains I+1 and J+1 make a contact, an extra
6047 C contribution equal to sqrt(eps(i,j)*eps(i+1,j+1)) is added.
6048 implicit real*8 (a-h,o-z)
6049 include 'DIMENSIONS'
6050 include 'COMMON.IOUNITS'
6051 include 'COMMON.DERIV'
6052 include 'COMMON.INTERACT'
6053 include 'COMMON.CONTACTS'
6054 double precision gx(3),gx1(3)
6057 C Set lprn=.true. for debugging
6061 write (iout,'(a)') 'Contact function values:'
6063 write (iout,'(i2,20(1x,i2,f10.5))')
6064 & i,(jcont(j,i),facont(j,i),j=1,num_cont(i))
6079 num_conti=num_cont(i)
6080 num_conti1=num_cont(i1)
6085 if (j1.eq.j+ishift .or. j1.eq.j-ishift) then
6086 cd write(iout,*)'i=',i,' j=',j,' i1=',i1,' j1=',j1,
6087 cd & ' ishift=',ishift
6088 C Contacts I--J and I+ISHIFT--J+-ISHIFT1 occur simultaneously.
6089 C The system gains extra energy.
6090 ecorr=ecorr+esccorr(i,j,i1,j1,jj,kk)
6091 endif ! j1==j+-ishift
6100 c------------------------------------------------------------------------------
6101 double precision function esccorr(i,j,k,l,jj,kk)
6102 implicit real*8 (a-h,o-z)
6103 include 'DIMENSIONS'
6104 include 'COMMON.IOUNITS'
6105 include 'COMMON.DERIV'
6106 include 'COMMON.INTERACT'
6107 include 'COMMON.CONTACTS'
6108 double precision gx(3),gx1(3)
6113 cd write (iout,'(4i5,3f10.5)') i,j,k,l,eij,ekl,-eij*ekl
6114 C Calculate the multi-body contribution to energy.
6115 C Calculate multi-body contributions to the gradient.
6116 cd write (iout,'(2(2i3,3f10.5))')i,j,(gacont(m,jj,i),m=1,3),
6117 cd & k,l,(gacont(m,kk,k),m=1,3)
6119 gx(m) =ekl*gacont(m,jj,i)
6120 gx1(m)=eij*gacont(m,kk,k)
6121 gradxorr(m,i)=gradxorr(m,i)-gx(m)
6122 gradxorr(m,j)=gradxorr(m,j)+gx(m)
6123 gradxorr(m,k)=gradxorr(m,k)-gx1(m)
6124 gradxorr(m,l)=gradxorr(m,l)+gx1(m)
6128 gradcorr(ll,m)=gradcorr(ll,m)+gx(ll)
6133 gradcorr(ll,m)=gradcorr(ll,m)+gx1(ll)
6139 c------------------------------------------------------------------------------
6140 subroutine multibody_hb(ecorr,ecorr5,ecorr6,n_corr,n_corr1)
6141 C This subroutine calculates multi-body contributions to hydrogen-bonding
6142 implicit real*8 (a-h,o-z)
6143 include 'DIMENSIONS'
6144 include 'COMMON.IOUNITS'
6147 parameter (max_cont=maxconts)
6148 parameter (max_dim=26)
6149 integer source,CorrelType,CorrelID,CorrelType1,CorrelID1,Error
6150 double precision zapas(max_dim,maxconts,max_fg_procs),
6151 & zapas_recv(max_dim,maxconts,max_fg_procs)
6152 common /przechowalnia/ zapas
6153 integer status(MPI_STATUS_SIZE),req(maxconts*2),
6154 & status_array(MPI_STATUS_SIZE,maxconts*2)
6156 include 'COMMON.SETUP'
6157 include 'COMMON.FFIELD'
6158 include 'COMMON.DERIV'
6159 include 'COMMON.INTERACT'
6160 include 'COMMON.CONTACTS'
6161 include 'COMMON.CONTROL'
6162 include 'COMMON.LOCAL'
6163 double precision gx(3),gx1(3),time00
6166 C Set lprn=.true. for debugging
6171 if (nfgtasks.le.1) goto 30
6173 write (iout,'(a)') 'Contact function values before RECEIVE:'
6175 write (iout,'(2i3,50(1x,i2,f5.2))')
6176 & i,num_cont_hb(i),(jcont_hb(j,i),facont_hb(j,i),
6177 & j=1,num_cont_hb(i))
6181 do i=1,ntask_cont_from
6184 do i=1,ntask_cont_to
6187 c write (iout,*) "ntask_cont_from",ntask_cont_from," ntask_cont_to",
6189 C Make the list of contacts to send to send to other procesors
6190 c write (iout,*) "limits",max0(iturn4_end-1,iatel_s),iturn3_end
6192 do i=iturn3_start,iturn3_end
6193 c write (iout,*) "make contact list turn3",i," num_cont",
6195 call add_hb_contact(i,i+2,iturn3_sent_local(1,i))
6197 do i=iturn4_start,iturn4_end
6198 c write (iout,*) "make contact list turn4",i," num_cont",
6200 call add_hb_contact(i,i+3,iturn4_sent_local(1,i))
6204 c write (iout,*) "make contact list longrange",i,ii," num_cont",
6206 do j=1,num_cont_hb(i)
6209 iproc=iint_sent_local(k,jjc,ii)
6210 c write (iout,*) "i",i," j",j," k",k," jjc",jjc," iproc",iproc
6211 if (iproc.gt.0) then
6212 ncont_sent(iproc)=ncont_sent(iproc)+1
6213 nn=ncont_sent(iproc)
6215 zapas(2,nn,iproc)=jjc
6216 zapas(3,nn,iproc)=facont_hb(j,i)
6217 zapas(4,nn,iproc)=ees0p(j,i)
6218 zapas(5,nn,iproc)=ees0m(j,i)
6219 zapas(6,nn,iproc)=gacont_hbr(1,j,i)
6220 zapas(7,nn,iproc)=gacont_hbr(2,j,i)
6221 zapas(8,nn,iproc)=gacont_hbr(3,j,i)
6222 zapas(9,nn,iproc)=gacontm_hb1(1,j,i)
6223 zapas(10,nn,iproc)=gacontm_hb1(2,j,i)
6224 zapas(11,nn,iproc)=gacontm_hb1(3,j,i)
6225 zapas(12,nn,iproc)=gacontp_hb1(1,j,i)
6226 zapas(13,nn,iproc)=gacontp_hb1(2,j,i)
6227 zapas(14,nn,iproc)=gacontp_hb1(3,j,i)
6228 zapas(15,nn,iproc)=gacontm_hb2(1,j,i)
6229 zapas(16,nn,iproc)=gacontm_hb2(2,j,i)
6230 zapas(17,nn,iproc)=gacontm_hb2(3,j,i)
6231 zapas(18,nn,iproc)=gacontp_hb2(1,j,i)
6232 zapas(19,nn,iproc)=gacontp_hb2(2,j,i)
6233 zapas(20,nn,iproc)=gacontp_hb2(3,j,i)
6234 zapas(21,nn,iproc)=gacontm_hb3(1,j,i)
6235 zapas(22,nn,iproc)=gacontm_hb3(2,j,i)
6236 zapas(23,nn,iproc)=gacontm_hb3(3,j,i)
6237 zapas(24,nn,iproc)=gacontp_hb3(1,j,i)
6238 zapas(25,nn,iproc)=gacontp_hb3(2,j,i)
6239 zapas(26,nn,iproc)=gacontp_hb3(3,j,i)
6246 & "Numbers of contacts to be sent to other processors",
6247 & (ncont_sent(i),i=1,ntask_cont_to)
6248 write (iout,*) "Contacts sent"
6249 do ii=1,ntask_cont_to
6251 iproc=itask_cont_to(ii)
6252 write (iout,*) nn," contacts to processor",iproc,
6253 & " of CONT_TO_COMM group"
6255 write(iout,'(2f5.0,4f10.5)')(zapas(j,i,ii),j=1,5)
6263 CorrelID1=nfgtasks+fg_rank+1
6265 C Receive the numbers of needed contacts from other processors
6266 do ii=1,ntask_cont_from
6267 iproc=itask_cont_from(ii)
6269 call MPI_Irecv(ncont_recv(ii),1,MPI_INTEGER,iproc,CorrelType,
6270 & FG_COMM,req(ireq),IERR)
6272 c write (iout,*) "IRECV ended"
6274 C Send the number of contacts needed by other processors
6275 do ii=1,ntask_cont_to
6276 iproc=itask_cont_to(ii)
6278 call MPI_Isend(ncont_sent(ii),1,MPI_INTEGER,iproc,CorrelType,
6279 & FG_COMM,req(ireq),IERR)
6281 c write (iout,*) "ISEND ended"
6282 c write (iout,*) "number of requests (nn)",ireq
6285 & call MPI_Waitall(ireq,req,status_array,ierr)
6287 c & "Numbers of contacts to be received from other processors",
6288 c & (ncont_recv(i),i=1,ntask_cont_from)
6292 do ii=1,ntask_cont_from
6293 iproc=itask_cont_from(ii)
6295 c write (iout,*) "Receiving",nn," contacts from processor",iproc,
6296 c & " of CONT_TO_COMM group"
6300 call MPI_Irecv(zapas_recv(1,1,ii),nn*max_dim,
6301 & MPI_DOUBLE_PRECISION,iproc,CorrelType1,FG_COMM,req(ireq),IERR)
6302 c write (iout,*) "ireq,req",ireq,req(ireq)
6305 C Send the contacts to processors that need them
6306 do ii=1,ntask_cont_to
6307 iproc=itask_cont_to(ii)
6309 c write (iout,*) nn," contacts to processor",iproc,
6310 c & " of CONT_TO_COMM group"
6313 call MPI_Isend(zapas(1,1,ii),nn*max_dim,MPI_DOUBLE_PRECISION,
6314 & iproc,CorrelType1,FG_COMM,req(ireq),IERR)
6315 c write (iout,*) "ireq,req",ireq,req(ireq)
6317 c write(iout,'(2f5.0,4f10.5)')(zapas(j,i,ii),j=1,5)
6321 c write (iout,*) "number of requests (contacts)",ireq
6322 c write (iout,*) "req",(req(i),i=1,4)
6325 & call MPI_Waitall(ireq,req,status_array,ierr)
6326 do iii=1,ntask_cont_from
6327 iproc=itask_cont_from(iii)
6330 write (iout,*) "Received",nn," contacts from processor",iproc,
6331 & " of CONT_FROM_COMM group"
6334 write(iout,'(2f5.0,4f10.5)')(zapas_recv(j,i,iii),j=1,5)
6339 ii=zapas_recv(1,i,iii)
6340 c Flag the received contacts to prevent double-counting
6341 jj=-zapas_recv(2,i,iii)
6342 c write (iout,*) "iii",iii," i",i," ii",ii," jj",jj
6344 nnn=num_cont_hb(ii)+1
6347 facont_hb(nnn,ii)=zapas_recv(3,i,iii)
6348 ees0p(nnn,ii)=zapas_recv(4,i,iii)
6349 ees0m(nnn,ii)=zapas_recv(5,i,iii)
6350 gacont_hbr(1,nnn,ii)=zapas_recv(6,i,iii)
6351 gacont_hbr(2,nnn,ii)=zapas_recv(7,i,iii)
6352 gacont_hbr(3,nnn,ii)=zapas_recv(8,i,iii)
6353 gacontm_hb1(1,nnn,ii)=zapas_recv(9,i,iii)
6354 gacontm_hb1(2,nnn,ii)=zapas_recv(10,i,iii)
6355 gacontm_hb1(3,nnn,ii)=zapas_recv(11,i,iii)
6356 gacontp_hb1(1,nnn,ii)=zapas_recv(12,i,iii)
6357 gacontp_hb1(2,nnn,ii)=zapas_recv(13,i,iii)
6358 gacontp_hb1(3,nnn,ii)=zapas_recv(14,i,iii)
6359 gacontm_hb2(1,nnn,ii)=zapas_recv(15,i,iii)
6360 gacontm_hb2(2,nnn,ii)=zapas_recv(16,i,iii)
6361 gacontm_hb2(3,nnn,ii)=zapas_recv(17,i,iii)
6362 gacontp_hb2(1,nnn,ii)=zapas_recv(18,i,iii)
6363 gacontp_hb2(2,nnn,ii)=zapas_recv(19,i,iii)
6364 gacontp_hb2(3,nnn,ii)=zapas_recv(20,i,iii)
6365 gacontm_hb3(1,nnn,ii)=zapas_recv(21,i,iii)
6366 gacontm_hb3(2,nnn,ii)=zapas_recv(22,i,iii)
6367 gacontm_hb3(3,nnn,ii)=zapas_recv(23,i,iii)
6368 gacontp_hb3(1,nnn,ii)=zapas_recv(24,i,iii)
6369 gacontp_hb3(2,nnn,ii)=zapas_recv(25,i,iii)
6370 gacontp_hb3(3,nnn,ii)=zapas_recv(26,i,iii)
6375 write (iout,'(a)') 'Contact function values after receive:'
6377 write (iout,'(2i3,50(1x,i3,f5.2))')
6378 & i,num_cont_hb(i),(jcont_hb(j,i),facont_hb(j,i),
6379 & j=1,num_cont_hb(i))
6386 write (iout,'(a)') 'Contact function values:'
6388 write (iout,'(2i3,50(1x,i3,f5.2))')
6389 & i,num_cont_hb(i),(jcont_hb(j,i),facont_hb(j,i),
6390 & j=1,num_cont_hb(i))
6394 C Remove the loop below after debugging !!!
6401 C Calculate the local-electrostatic correlation terms
6402 do i=min0(iatel_s,iturn4_start),max0(iatel_e,iturn3_end)
6404 num_conti=num_cont_hb(i)
6405 num_conti1=num_cont_hb(i+1)
6412 c write (iout,*) 'i=',i,' j=',j,' i1=',i1,' j1=',j1,
6413 c & ' jj=',jj,' kk=',kk
6414 if ((j.gt.0 .and. j1.gt.0 .or. j.gt.0 .and. j1.lt.0
6415 & .or. j.lt.0 .and. j1.gt.0) .and.
6416 & (jp1.eq.jp+1 .or. jp1.eq.jp-1)) then
6417 C Contacts I-J and (I+1)-(J+1) or (I+1)-(J-1) occur simultaneously.
6418 C The system gains extra energy.
6419 ecorr=ecorr+ehbcorr(i,jp,i+1,jp1,jj,kk,0.72D0,0.32D0)
6420 if (energy_dec) write (iout,'(a6,2i5,0pf7.3)')
6421 & 'ecorrh',i,j,ehbcorr(i,j,i+1,j1,jj,kk,0.72D0,0.32D0)
6423 else if (j1.eq.j) then
6424 C Contacts I-J and I-(J+1) occur simultaneously.
6425 C The system loses extra energy.
6426 c ecorr=ecorr+ehbcorr(i,j,i+1,j,jj,kk,0.60D0,-0.40D0)
6431 c write (iout,*) 'i=',i,' j=',j,' i1=',i1,' j1=',j1,
6432 c & ' jj=',jj,' kk=',kk
6434 C Contacts I-J and (I+1)-J occur simultaneously.
6435 C The system loses extra energy.
6436 c ecorr=ecorr+ehbcorr(i,j,i,j+1,jj,kk,0.60D0,-0.40D0)
6443 c------------------------------------------------------------------------------
6444 subroutine add_hb_contact(ii,jj,itask)
6445 implicit real*8 (a-h,o-z)
6446 include "DIMENSIONS"
6447 include "COMMON.IOUNITS"
6450 parameter (max_cont=maxconts)
6451 parameter (max_dim=26)
6452 include "COMMON.CONTACTS"
6453 double precision zapas(max_dim,maxconts,max_fg_procs),
6454 & zapas_recv(max_dim,maxconts,max_fg_procs)
6455 common /przechowalnia/ zapas
6456 integer i,j,ii,jj,iproc,itask(4),nn
6457 c write (iout,*) "itask",itask
6460 if (iproc.gt.0) then
6461 do j=1,num_cont_hb(ii)
6463 c write (iout,*) "i",ii," j",jj," jjc",jjc
6465 ncont_sent(iproc)=ncont_sent(iproc)+1
6466 nn=ncont_sent(iproc)
6467 zapas(1,nn,iproc)=ii
6468 zapas(2,nn,iproc)=jjc
6469 zapas(3,nn,iproc)=facont_hb(j,ii)
6470 zapas(4,nn,iproc)=ees0p(j,ii)
6471 zapas(5,nn,iproc)=ees0m(j,ii)
6472 zapas(6,nn,iproc)=gacont_hbr(1,j,ii)
6473 zapas(7,nn,iproc)=gacont_hbr(2,j,ii)
6474 zapas(8,nn,iproc)=gacont_hbr(3,j,ii)
6475 zapas(9,nn,iproc)=gacontm_hb1(1,j,ii)
6476 zapas(10,nn,iproc)=gacontm_hb1(2,j,ii)
6477 zapas(11,nn,iproc)=gacontm_hb1(3,j,ii)
6478 zapas(12,nn,iproc)=gacontp_hb1(1,j,ii)
6479 zapas(13,nn,iproc)=gacontp_hb1(2,j,ii)
6480 zapas(14,nn,iproc)=gacontp_hb1(3,j,ii)
6481 zapas(15,nn,iproc)=gacontm_hb2(1,j,ii)
6482 zapas(16,nn,iproc)=gacontm_hb2(2,j,ii)
6483 zapas(17,nn,iproc)=gacontm_hb2(3,j,ii)
6484 zapas(18,nn,iproc)=gacontp_hb2(1,j,ii)
6485 zapas(19,nn,iproc)=gacontp_hb2(2,j,ii)
6486 zapas(20,nn,iproc)=gacontp_hb2(3,j,ii)
6487 zapas(21,nn,iproc)=gacontm_hb3(1,j,ii)
6488 zapas(22,nn,iproc)=gacontm_hb3(2,j,ii)
6489 zapas(23,nn,iproc)=gacontm_hb3(3,j,ii)
6490 zapas(24,nn,iproc)=gacontp_hb3(1,j,ii)
6491 zapas(25,nn,iproc)=gacontp_hb3(2,j,ii)
6492 zapas(26,nn,iproc)=gacontp_hb3(3,j,ii)
6500 c------------------------------------------------------------------------------
6501 subroutine multibody_eello(ecorr,ecorr5,ecorr6,eturn6,n_corr,
6503 C This subroutine calculates multi-body contributions to hydrogen-bonding
6504 implicit real*8 (a-h,o-z)
6505 include 'DIMENSIONS'
6506 include 'COMMON.IOUNITS'
6509 parameter (max_cont=maxconts)
6510 parameter (max_dim=70)
6511 integer source,CorrelType,CorrelID,CorrelType1,CorrelID1,Error
6512 double precision zapas(max_dim,maxconts,max_fg_procs),
6513 & zapas_recv(max_dim,maxconts,max_fg_procs)
6514 common /przechowalnia/ zapas
6515 integer status(MPI_STATUS_SIZE),req(maxconts*2),
6516 & status_array(MPI_STATUS_SIZE,maxconts*2)
6518 include 'COMMON.SETUP'
6519 include 'COMMON.FFIELD'
6520 include 'COMMON.DERIV'
6521 include 'COMMON.LOCAL'
6522 include 'COMMON.INTERACT'
6523 include 'COMMON.CONTACTS'
6524 include 'COMMON.CHAIN'
6525 include 'COMMON.CONTROL'
6526 double precision gx(3),gx1(3)
6527 integer num_cont_hb_old(maxres)
6529 double precision eello4,eello5,eelo6,eello_turn6
6530 external eello4,eello5,eello6,eello_turn6
6531 C Set lprn=.true. for debugging
6536 num_cont_hb_old(i)=num_cont_hb(i)
6540 if (nfgtasks.le.1) goto 30
6542 write (iout,'(a)') 'Contact function values before RECEIVE:'
6544 write (iout,'(2i3,50(1x,i2,f5.2))')
6545 & i,num_cont_hb(i),(jcont_hb(j,i),facont_hb(j,i),
6546 & j=1,num_cont_hb(i))
6550 do i=1,ntask_cont_from
6553 do i=1,ntask_cont_to
6556 c write (iout,*) "ntask_cont_from",ntask_cont_from," ntask_cont_to",
6558 C Make the list of contacts to send to send to other procesors
6559 do i=iturn3_start,iturn3_end
6560 c write (iout,*) "make contact list turn3",i," num_cont",
6562 call add_hb_contact_eello(i,i+2,iturn3_sent_local(1,i))
6564 do i=iturn4_start,iturn4_end
6565 c write (iout,*) "make contact list turn4",i," num_cont",
6567 call add_hb_contact_eello(i,i+3,iturn4_sent_local(1,i))
6571 c write (iout,*) "make contact list longrange",i,ii," num_cont",
6573 do j=1,num_cont_hb(i)
6576 iproc=iint_sent_local(k,jjc,ii)
6577 c write (iout,*) "i",i," j",j," k",k," jjc",jjc," iproc",iproc
6578 if (iproc.ne.0) then
6579 ncont_sent(iproc)=ncont_sent(iproc)+1
6580 nn=ncont_sent(iproc)
6582 zapas(2,nn,iproc)=jjc
6583 zapas(3,nn,iproc)=d_cont(j,i)
6587 zapas(ind,nn,iproc)=grij_hb_cont(kk,j,i)
6592 zapas(ind,nn,iproc)=a_chuj(ll,kk,j,i)
6600 zapas(ind,nn,iproc)=a_chuj_der(mm,ll,kk,jj,j,i)
6611 & "Numbers of contacts to be sent to other processors",
6612 & (ncont_sent(i),i=1,ntask_cont_to)
6613 write (iout,*) "Contacts sent"
6614 do ii=1,ntask_cont_to
6616 iproc=itask_cont_to(ii)
6617 write (iout,*) nn," contacts to processor",iproc,
6618 & " of CONT_TO_COMM group"
6620 write(iout,'(2f5.0,10f10.5)')(zapas(j,i,ii),j=1,10)
6628 CorrelID1=nfgtasks+fg_rank+1
6630 C Receive the numbers of needed contacts from other processors
6631 do ii=1,ntask_cont_from
6632 iproc=itask_cont_from(ii)
6634 call MPI_Irecv(ncont_recv(ii),1,MPI_INTEGER,iproc,CorrelType,
6635 & FG_COMM,req(ireq),IERR)
6637 c write (iout,*) "IRECV ended"
6639 C Send the number of contacts needed by other processors
6640 do ii=1,ntask_cont_to
6641 iproc=itask_cont_to(ii)
6643 call MPI_Isend(ncont_sent(ii),1,MPI_INTEGER,iproc,CorrelType,
6644 & FG_COMM,req(ireq),IERR)
6646 c write (iout,*) "ISEND ended"
6647 c write (iout,*) "number of requests (nn)",ireq
6650 & call MPI_Waitall(ireq,req,status_array,ierr)
6652 c & "Numbers of contacts to be received from other processors",
6653 c & (ncont_recv(i),i=1,ntask_cont_from)
6657 do ii=1,ntask_cont_from
6658 iproc=itask_cont_from(ii)
6660 c write (iout,*) "Receiving",nn," contacts from processor",iproc,
6661 c & " of CONT_TO_COMM group"
6665 call MPI_Irecv(zapas_recv(1,1,ii),nn*max_dim,
6666 & MPI_DOUBLE_PRECISION,iproc,CorrelType1,FG_COMM,req(ireq),IERR)
6667 c write (iout,*) "ireq,req",ireq,req(ireq)
6670 C Send the contacts to processors that need them
6671 do ii=1,ntask_cont_to
6672 iproc=itask_cont_to(ii)
6674 c write (iout,*) nn," contacts to processor",iproc,
6675 c & " of CONT_TO_COMM group"
6678 call MPI_Isend(zapas(1,1,ii),nn*max_dim,MPI_DOUBLE_PRECISION,
6679 & iproc,CorrelType1,FG_COMM,req(ireq),IERR)
6680 c write (iout,*) "ireq,req",ireq,req(ireq)
6682 c write(iout,'(2f5.0,4f10.5)')(zapas(j,i,ii),j=1,5)
6686 c write (iout,*) "number of requests (contacts)",ireq
6687 c write (iout,*) "req",(req(i),i=1,4)
6690 & call MPI_Waitall(ireq,req,status_array,ierr)
6691 do iii=1,ntask_cont_from
6692 iproc=itask_cont_from(iii)
6695 write (iout,*) "Received",nn," contacts from processor",iproc,
6696 & " of CONT_FROM_COMM group"
6699 write(iout,'(2f5.0,10f10.5)')(zapas_recv(j,i,iii),j=1,10)
6704 ii=zapas_recv(1,i,iii)
6705 c Flag the received contacts to prevent double-counting
6706 jj=-zapas_recv(2,i,iii)
6707 c write (iout,*) "iii",iii," i",i," ii",ii," jj",jj
6709 nnn=num_cont_hb(ii)+1
6712 d_cont(nnn,ii)=zapas_recv(3,i,iii)
6716 grij_hb_cont(kk,nnn,ii)=zapas_recv(ind,i,iii)
6721 a_chuj(ll,kk,nnn,ii)=zapas_recv(ind,i,iii)
6729 a_chuj_der(mm,ll,kk,jj,nnn,ii)=zapas_recv(ind,i,iii)
6738 write (iout,'(a)') 'Contact function values after receive:'
6740 write (iout,'(2i3,50(1x,i3,5f6.3))')
6741 & i,num_cont_hb(i),(jcont_hb(j,i),d_cont(j,i),
6742 & ((a_chuj(ll,kk,j,i),ll=1,2),kk=1,2),j=1,num_cont_hb(i))
6749 write (iout,'(a)') 'Contact function values:'
6751 write (iout,'(2i3,50(1x,i2,5f6.3))')
6752 & i,num_cont_hb(i),(jcont_hb(j,i),d_cont(j,i),
6753 & ((a_chuj(ll,kk,j,i),ll=1,2),kk=1,2),j=1,num_cont_hb(i))
6759 C Remove the loop below after debugging !!!
6766 C Calculate the dipole-dipole interaction energies
6767 if (wcorr6.gt.0.0d0 .or. wturn6.gt.0.0d0) then
6768 do i=iatel_s,iatel_e+1
6769 num_conti=num_cont_hb(i)
6778 C Calculate the local-electrostatic correlation terms
6779 c write (iout,*) "gradcorr5 in eello5 before loop"
6781 c write (iout,'(i5,3f10.5)')
6782 c & iii,(gradcorr5(jjj,iii),jjj=1,3)
6784 do i=min0(iatel_s,iturn4_start),max0(iatel_e+1,iturn3_end+1)
6785 c write (iout,*) "corr loop i",i
6787 num_conti=num_cont_hb(i)
6788 num_conti1=num_cont_hb(i+1)
6795 c write (iout,*) 'i=',i,' j=',j,' i1=',i1,' j1=',j1,
6796 c & ' jj=',jj,' kk=',kk
6797 c if (j1.eq.j+1 .or. j1.eq.j-1) then
6798 if ((j.gt.0 .and. j1.gt.0 .or. j.gt.0 .and. j1.lt.0
6799 & .or. j.lt.0 .and. j1.gt.0) .and.
6800 & (jp1.eq.jp+1 .or. jp1.eq.jp-1)) then
6801 C Contacts I-J and (I+1)-(J+1) or (I+1)-(J-1) occur simultaneously.
6802 C The system gains extra energy.
6804 sqd1=dsqrt(d_cont(jj,i))
6805 sqd2=dsqrt(d_cont(kk,i1))
6806 sred_geom = sqd1*sqd2
6807 IF (sred_geom.lt.cutoff_corr) THEN
6808 call gcont(sred_geom,r0_corr,1.0D0,delt_corr,
6810 cd write (iout,*) 'i=',i,' j=',jp,' i1=',i1,' j1=',jp1,
6811 cd & ' jj=',jj,' kk=',kk
6812 fac_prim1=0.5d0*sqd2/sqd1*fprimcont
6813 fac_prim2=0.5d0*sqd1/sqd2*fprimcont
6815 g_contij(l,1)=fac_prim1*grij_hb_cont(l,jj,i)
6816 g_contij(l,2)=fac_prim2*grij_hb_cont(l,kk,i1)
6819 cd write (iout,*) 'sred_geom=',sred_geom,
6820 cd & ' ekont=',ekont,' fprim=',fprimcont,
6821 cd & ' fac_prim1',fac_prim1,' fac_prim2',fac_prim2
6822 cd write (iout,*) "g_contij",g_contij
6823 cd write (iout,*) "grij_hb_cont i",grij_hb_cont(:,jj,i)
6824 cd write (iout,*) "grij_hb_cont i1",grij_hb_cont(:,jj,i1)
6825 call calc_eello(i,jp,i+1,jp1,jj,kk)
6826 if (wcorr4.gt.0.0d0)
6827 & ecorr=ecorr+eello4(i,jp,i+1,jp1,jj,kk)
6828 if (energy_dec.and.wcorr4.gt.0.0d0)
6829 1 write (iout,'(a6,4i5,0pf7.3)')
6830 2 'ecorr4',i,j,i+1,j1,eello4(i,jp,i+1,jp1,jj,kk)
6831 c write (iout,*) "gradcorr5 before eello5"
6833 c write (iout,'(i5,3f10.5)')
6834 c & iii,(gradcorr5(jjj,iii),jjj=1,3)
6836 if (wcorr5.gt.0.0d0)
6837 & ecorr5=ecorr5+eello5(i,jp,i+1,jp1,jj,kk)
6838 c write (iout,*) "gradcorr5 after eello5"
6840 c write (iout,'(i5,3f10.5)')
6841 c & iii,(gradcorr5(jjj,iii),jjj=1,3)
6843 if (energy_dec.and.wcorr5.gt.0.0d0)
6844 1 write (iout,'(a6,4i5,0pf7.3)')
6845 2 'ecorr5',i,j,i+1,j1,eello5(i,jp,i+1,jp1,jj,kk)
6846 cd write(2,*)'wcorr6',wcorr6,' wturn6',wturn6
6847 cd write(2,*)'ijkl',i,jp,i+1,jp1
6848 if (wcorr6.gt.0.0d0 .and. (jp.ne.i+4 .or. jp1.ne.i+3
6849 & .or. wturn6.eq.0.0d0))then
6850 cd write (iout,*) '******ecorr6: i,j,i+1,j1',i,j,i+1,j1
6851 ecorr6=ecorr6+eello6(i,jp,i+1,jp1,jj,kk)
6852 if (energy_dec) write (iout,'(a6,4i5,0pf7.3)')
6853 1 'ecorr6',i,j,i+1,j1,eello6(i,jp,i+1,jp1,jj,kk)
6854 cd write (iout,*) 'ecorr',ecorr,' ecorr5=',ecorr5,
6855 cd & 'ecorr6=',ecorr6
6856 cd write (iout,'(4e15.5)') sred_geom,
6857 cd & dabs(eello4(i,jp,i+1,jp1,jj,kk)),
6858 cd & dabs(eello5(i,jp,i+1,jp1,jj,kk)),
6859 cd & dabs(eello6(i,jp,i+1,jp1,jj,kk))
6860 else if (wturn6.gt.0.0d0
6861 & .and. (jp.eq.i+4 .and. jp1.eq.i+3)) then
6862 cd write (iout,*) '******eturn6: i,j,i+1,j1',i,jip,i+1,jp1
6863 eturn6=eturn6+eello_turn6(i,jj,kk)
6864 if (energy_dec) write (iout,'(a6,4i5,0pf7.3)')
6865 1 'eturn6',i,j,i+1,j1,eello_turn6(i,jj,kk)
6866 cd write (2,*) 'multibody_eello:eturn6',eturn6
6875 num_cont_hb(i)=num_cont_hb_old(i)
6877 c write (iout,*) "gradcorr5 in eello5"
6879 c write (iout,'(i5,3f10.5)')
6880 c & iii,(gradcorr5(jjj,iii),jjj=1,3)
6884 c------------------------------------------------------------------------------
6885 subroutine add_hb_contact_eello(ii,jj,itask)
6886 implicit real*8 (a-h,o-z)
6887 include "DIMENSIONS"
6888 include "COMMON.IOUNITS"
6891 parameter (max_cont=maxconts)
6892 parameter (max_dim=70)
6893 include "COMMON.CONTACTS"
6894 double precision zapas(max_dim,maxconts,max_fg_procs),
6895 & zapas_recv(max_dim,maxconts,max_fg_procs)
6896 common /przechowalnia/ zapas
6897 integer i,j,ii,jj,iproc,itask(4),nn
6898 c write (iout,*) "itask",itask
6901 if (iproc.gt.0) then
6902 do j=1,num_cont_hb(ii)
6904 c write (iout,*) "send turns i",ii," j",jj," jjc",jjc
6906 ncont_sent(iproc)=ncont_sent(iproc)+1
6907 nn=ncont_sent(iproc)
6908 zapas(1,nn,iproc)=ii
6909 zapas(2,nn,iproc)=jjc
6910 zapas(3,nn,iproc)=d_cont(j,ii)
6914 zapas(ind,nn,iproc)=grij_hb_cont(kk,j,ii)
6919 zapas(ind,nn,iproc)=a_chuj(ll,kk,j,ii)
6927 zapas(ind,nn,iproc)=a_chuj_der(mm,ll,kk,jj,j,ii)
6939 c------------------------------------------------------------------------------
6940 double precision function ehbcorr(i,j,k,l,jj,kk,coeffp,coeffm)
6941 implicit real*8 (a-h,o-z)
6942 include 'DIMENSIONS'
6943 include 'COMMON.IOUNITS'
6944 include 'COMMON.DERIV'
6945 include 'COMMON.INTERACT'
6946 include 'COMMON.CONTACTS'
6947 double precision gx(3),gx1(3)
6957 ees=-(coeffp*ees0pij*ees0pkl+coeffm*ees0mij*ees0mkl)
6958 cd ees=-(coeffp*ees0pkl+coeffm*ees0mkl)
6959 C Following 4 lines for diagnostics.
6964 c write (iout,'(2(a,2i3,a,f10.5,a,2f10.5),a,f10.5,a,$)')
6965 c & 'Contacts ',i,j,
6966 c & ' eij',eij,' eesij',ees0pij,ees0mij,' and ',k,l
6967 c & ,' fcont ',ekl,' eeskl',ees0pkl,ees0mkl,' energy=',ekont*ees,
6969 C Calculate the multi-body contribution to energy.
6970 c ecorr=ecorr+ekont*ees
6971 C Calculate multi-body contributions to the gradient.
6972 coeffpees0pij=coeffp*ees0pij
6973 coeffmees0mij=coeffm*ees0mij
6974 coeffpees0pkl=coeffp*ees0pkl
6975 coeffmees0mkl=coeffm*ees0mkl
6977 cgrad ghalfi=ees*ekl*gacont_hbr(ll,jj,i)
6978 gradcorr(ll,i)=gradcorr(ll,i)!+0.5d0*ghalfi
6979 & -ekont*(coeffpees0pkl*gacontp_hb1(ll,jj,i)+
6980 & coeffmees0mkl*gacontm_hb1(ll,jj,i))
6981 gradcorr(ll,j)=gradcorr(ll,j)!+0.5d0*ghalfi
6982 & -ekont*(coeffpees0pkl*gacontp_hb2(ll,jj,i)+
6983 & coeffmees0mkl*gacontm_hb2(ll,jj,i))
6984 cgrad ghalfk=ees*eij*gacont_hbr(ll,kk,k)
6985 gradcorr(ll,k)=gradcorr(ll,k)!+0.5d0*ghalfk
6986 & -ekont*(coeffpees0pij*gacontp_hb1(ll,kk,k)+
6987 & coeffmees0mij*gacontm_hb1(ll,kk,k))
6988 gradcorr(ll,l)=gradcorr(ll,l)!+0.5d0*ghalfk
6989 & -ekont*(coeffpees0pij*gacontp_hb2(ll,kk,k)+
6990 & coeffmees0mij*gacontm_hb2(ll,kk,k))
6991 gradlongij=ees*ekl*gacont_hbr(ll,jj,i)-
6992 & ekont*(coeffpees0pkl*gacontp_hb3(ll,jj,i)+
6993 & coeffmees0mkl*gacontm_hb3(ll,jj,i))
6994 gradcorr_long(ll,j)=gradcorr_long(ll,j)+gradlongij
6995 gradcorr_long(ll,i)=gradcorr_long(ll,i)-gradlongij
6996 gradlongkl=ees*eij*gacont_hbr(ll,kk,k)-
6997 & ekont*(coeffpees0pij*gacontp_hb3(ll,kk,k)+
6998 & coeffmees0mij*gacontm_hb3(ll,kk,k))
6999 gradcorr_long(ll,l)=gradcorr_long(ll,l)+gradlongkl
7000 gradcorr_long(ll,k)=gradcorr_long(ll,k)-gradlongkl
7001 c write (iout,'(2f10.5,2x,$)') gradlongij,gradlongkl
7006 cgrad gradcorr(ll,m)=gradcorr(ll,m)+
7007 cgrad & ees*ekl*gacont_hbr(ll,jj,i)-
7008 cgrad & ekont*(coeffp*ees0pkl*gacontp_hb3(ll,jj,i)+
7009 cgrad & coeffm*ees0mkl*gacontm_hb3(ll,jj,i))
7014 cgrad gradcorr(ll,m)=gradcorr(ll,m)+
7015 cgrad & ees*eij*gacont_hbr(ll,kk,k)-
7016 cgrad & ekont*(coeffp*ees0pij*gacontp_hb3(ll,kk,k)+
7017 cgrad & coeffm*ees0mij*gacontm_hb3(ll,kk,k))
7020 c write (iout,*) "ehbcorr",ekont*ees
7025 C---------------------------------------------------------------------------
7026 subroutine dipole(i,j,jj)
7027 implicit real*8 (a-h,o-z)
7028 include 'DIMENSIONS'
7029 include 'COMMON.IOUNITS'
7030 include 'COMMON.CHAIN'
7031 include 'COMMON.FFIELD'
7032 include 'COMMON.DERIV'
7033 include 'COMMON.INTERACT'
7034 include 'COMMON.CONTACTS'
7035 include 'COMMON.TORSION'
7036 include 'COMMON.VAR'
7037 include 'COMMON.GEO'
7038 dimension dipi(2,2),dipj(2,2),dipderi(2),dipderj(2),auxvec(2),
7040 iti1 = itortyp(itype(i+1))
7041 if (j.lt.nres-1) then
7042 itj1 = itortyp(itype(j+1))
7047 dipi(iii,1)=Ub2(iii,i)
7048 dipderi(iii)=Ub2der(iii,i)
7049 dipi(iii,2)=b1(iii,i+1)
7050 dipj(iii,1)=Ub2(iii,j)
7051 dipderj(iii)=Ub2der(iii,j)
7052 dipj(iii,2)=b1(iii,j+1)
7056 call matvec2(a_chuj(1,1,jj,i),dipj(1,iii),auxvec(1))
7059 dip(kkk,jj,i)=scalar2(dipi(1,jjj),auxvec(1))
7066 call matvec2(a_chuj_der(1,1,lll,kkk,jj,i),dipj(1,iii),
7070 dipderx(lll,kkk,mmm,jj,i)=scalar2(dipi(1,jjj),auxvec(1))
7075 call transpose2(a_chuj(1,1,jj,i),auxmat(1,1))
7076 call matvec2(auxmat(1,1),dipderi(1),auxvec(1))
7078 dipderg(iii,jj,i)=scalar2(auxvec(1),dipj(1,iii))
7080 call matvec2(a_chuj(1,1,jj,i),dipderj(1),auxvec(1))
7082 dipderg(iii+2,jj,i)=scalar2(auxvec(1),dipi(1,iii))
7087 C---------------------------------------------------------------------------
7088 subroutine calc_eello(i,j,k,l,jj,kk)
7090 C This subroutine computes matrices and vectors needed to calculate
7091 C the fourth-, fifth-, and sixth-order local-electrostatic terms.
7093 implicit real*8 (a-h,o-z)
7094 include 'DIMENSIONS'
7095 include 'COMMON.IOUNITS'
7096 include 'COMMON.CHAIN'
7097 include 'COMMON.DERIV'
7098 include 'COMMON.INTERACT'
7099 include 'COMMON.CONTACTS'
7100 include 'COMMON.TORSION'
7101 include 'COMMON.VAR'
7102 include 'COMMON.GEO'
7103 include 'COMMON.FFIELD'
7104 double precision aa1(2,2),aa2(2,2),aa1t(2,2),aa2t(2,2),
7105 & aa1tder(2,2,3,5),aa2tder(2,2,3,5),auxmat(2,2)
7108 cd write (iout,*) 'calc_eello: i=',i,' j=',j,' k=',k,' l=',l,
7109 cd & ' jj=',jj,' kk=',kk
7110 cd if (i.ne.2 .or. j.ne.4 .or. k.ne.3 .or. l.ne.5) return
7111 cd write (iout,*) "a_chujij",((a_chuj(iii,jjj,jj,i),iii=1,2),jjj=1,2)
7112 cd write (iout,*) "a_chujkl",((a_chuj(iii,jjj,kk,k),iii=1,2),jjj=1,2)
7115 aa1(iii,jjj)=a_chuj(iii,jjj,jj,i)
7116 aa2(iii,jjj)=a_chuj(iii,jjj,kk,k)
7119 call transpose2(aa1(1,1),aa1t(1,1))
7120 call transpose2(aa2(1,1),aa2t(1,1))
7123 call transpose2(a_chuj_der(1,1,lll,kkk,jj,i),
7124 & aa1tder(1,1,lll,kkk))
7125 call transpose2(a_chuj_der(1,1,lll,kkk,kk,k),
7126 & aa2tder(1,1,lll,kkk))
7130 C parallel orientation of the two CA-CA-CA frames.
7132 iti=itortyp(itype(i))
7136 itk1=itortyp(itype(k+1))
7137 itj=itortyp(itype(j))
7138 if (l.lt.nres-1) then
7139 itl1=itortyp(itype(l+1))
7143 C A1 kernel(j+1) A2T
7145 cd write (iout,'(3f10.5,5x,3f10.5)')
7146 cd & (EUg(iii,jjj,k),jjj=1,2),(EUg(iii,jjj,l),jjj=1,2)
7148 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
7149 & aa2tder(1,1,1,1),1,.false.,EUg(1,1,l),EUgder(1,1,l),
7150 & AEA(1,1,1),AEAderg(1,1,1),AEAderx(1,1,1,1,1,1))
7151 C Following matrices are needed only for 6-th order cumulants
7152 IF (wcorr6.gt.0.0d0) THEN
7153 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
7154 & aa2tder(1,1,1,1),1,.false.,EUgC(1,1,l),EUgCder(1,1,l),
7155 & AECA(1,1,1),AECAderg(1,1,1),AECAderx(1,1,1,1,1,1))
7156 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
7157 & aa2tder(1,1,1,1),2,.false.,Ug2DtEUg(1,1,l),
7158 & Ug2DtEUgder(1,1,1,l),ADtEA(1,1,1),ADtEAderg(1,1,1,1),
7159 & ADtEAderx(1,1,1,1,1,1))
7161 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
7162 & aa2tder(1,1,1,1),2,.false.,DtUg2EUg(1,1,l),
7163 & DtUg2EUgder(1,1,1,l),ADtEA1(1,1,1),ADtEA1derg(1,1,1,1),
7164 & ADtEA1derx(1,1,1,1,1,1))
7166 C End 6-th order cumulants
7169 cd write (2,*) 'In calc_eello6'
7171 cd write (2,*) 'iii=',iii
7173 cd write (2,*) 'kkk=',kkk
7175 cd write (2,'(3(2f10.5),5x)')
7176 cd & ((ADtEA1derx(jjj,mmm,lll,kkk,iii,1),mmm=1,2),lll=1,3)
7181 call transpose2(EUgder(1,1,k),auxmat(1,1))
7182 call matmat2(auxmat(1,1),AEA(1,1,1),EAEAderg(1,1,1,1))
7183 call transpose2(EUg(1,1,k),auxmat(1,1))
7184 call matmat2(auxmat(1,1),AEA(1,1,1),EAEA(1,1,1))
7185 call matmat2(auxmat(1,1),AEAderg(1,1,1),EAEAderg(1,1,2,1))
7189 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,1),
7190 & EAEAderx(1,1,lll,kkk,iii,1))
7194 C A1T kernel(i+1) A2
7195 call kernel(aa1t(1,1),aa2(1,1),aa1tder(1,1,1,1),
7196 & a_chuj_der(1,1,1,1,kk,k),1,.false.,EUg(1,1,k),EUgder(1,1,k),
7197 & AEA(1,1,2),AEAderg(1,1,2),AEAderx(1,1,1,1,1,2))
7198 C Following matrices are needed only for 6-th order cumulants
7199 IF (wcorr6.gt.0.0d0) THEN
7200 call kernel(aa1t(1,1),aa2(1,1),aa1tder(1,1,1,1),
7201 & a_chuj_der(1,1,1,1,kk,k),1,.false.,EUgC(1,1,k),EUgCder(1,1,k),
7202 & AECA(1,1,2),AECAderg(1,1,2),AECAderx(1,1,1,1,1,2))
7203 call kernel(aa1t(1,1),aa2(1,1),aa1tder(1,1,1,1),
7204 & a_chuj_der(1,1,1,1,kk,k),2,.false.,Ug2DtEUg(1,1,k),
7205 & Ug2DtEUgder(1,1,1,k),ADtEA(1,1,2),ADtEAderg(1,1,1,2),
7206 & ADtEAderx(1,1,1,1,1,2))
7207 call kernel(aa1t(1,1),aa2(1,1),aa1tder(1,1,1,1),
7208 & a_chuj_der(1,1,1,1,kk,k),2,.false.,DtUg2EUg(1,1,k),
7209 & DtUg2EUgder(1,1,1,k),ADtEA1(1,1,2),ADtEA1derg(1,1,1,2),
7210 & ADtEA1derx(1,1,1,1,1,2))
7212 C End 6-th order cumulants
7213 call transpose2(EUgder(1,1,l),auxmat(1,1))
7214 call matmat2(auxmat(1,1),AEA(1,1,2),EAEAderg(1,1,1,2))
7215 call transpose2(EUg(1,1,l),auxmat(1,1))
7216 call matmat2(auxmat(1,1),AEA(1,1,2),EAEA(1,1,2))
7217 call matmat2(auxmat(1,1),AEAderg(1,1,2),EAEAderg(1,1,2,2))
7221 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,2),
7222 & EAEAderx(1,1,lll,kkk,iii,2))
7227 C Calculate the vectors and their derivatives in virtual-bond dihedral angles.
7228 C They are needed only when the fifth- or the sixth-order cumulants are
7230 IF (wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0) THEN
7231 call transpose2(AEA(1,1,1),auxmat(1,1))
7232 call matvec2(auxmat(1,1),b1(1,i),AEAb1(1,1,1))
7233 call matvec2(auxmat(1,1),Ub2(1,i),AEAb2(1,1,1))
7234 call matvec2(auxmat(1,1),Ub2der(1,i),AEAb2derg(1,2,1,1))
7235 call transpose2(AEAderg(1,1,1),auxmat(1,1))
7236 call matvec2(auxmat(1,1),b1(1,i),AEAb1derg(1,1,1))
7237 call matvec2(auxmat(1,1),Ub2(1,i),AEAb2derg(1,1,1,1))
7238 call matvec2(AEA(1,1,1),b1(1,k+1),AEAb1(1,2,1))
7239 call matvec2(AEAderg(1,1,1),b1(1,k+1),AEAb1derg(1,2,1))
7240 call matvec2(AEA(1,1,1),Ub2(1,k+1),AEAb2(1,2,1))
7241 call matvec2(AEAderg(1,1,1),Ub2(1,k+1),AEAb2derg(1,1,2,1))
7242 call matvec2(AEA(1,1,1),Ub2der(1,k+1),AEAb2derg(1,2,2,1))
7243 call transpose2(AEA(1,1,2),auxmat(1,1))
7244 call matvec2(auxmat(1,1),b1(1,j),AEAb1(1,1,2))
7245 call matvec2(auxmat(1,1),Ub2(1,j),AEAb2(1,1,2))
7246 call matvec2(auxmat(1,1),Ub2der(1,j),AEAb2derg(1,2,1,2))
7247 call transpose2(AEAderg(1,1,2),auxmat(1,1))
7248 call matvec2(auxmat(1,1),b1(1,j),AEAb1derg(1,1,2))
7249 call matvec2(auxmat(1,1),Ub2(1,j),AEAb2derg(1,1,1,2))
7250 call matvec2(AEA(1,1,2),b1(1,l+1),AEAb1(1,2,2))
7251 call matvec2(AEAderg(1,1,2),b1(1,l+1),AEAb1derg(1,2,2))
7252 call matvec2(AEA(1,1,2),Ub2(1,l+1),AEAb2(1,2,2))
7253 call matvec2(AEAderg(1,1,2),Ub2(1,l+1),AEAb2derg(1,1,2,2))
7254 call matvec2(AEA(1,1,2),Ub2der(1,l+1),AEAb2derg(1,2,2,2))
7255 C Calculate the Cartesian derivatives of the vectors.
7259 call transpose2(AEAderx(1,1,lll,kkk,iii,1),auxmat(1,1))
7260 call matvec2(auxmat(1,1),b1(1,i),
7261 & AEAb1derx(1,lll,kkk,iii,1,1))
7262 call matvec2(auxmat(1,1),Ub2(1,i),
7263 & AEAb2derx(1,lll,kkk,iii,1,1))
7264 call matvec2(AEAderx(1,1,lll,kkk,iii,1),b1(1,k+1),
7265 & AEAb1derx(1,lll,kkk,iii,2,1))
7266 call matvec2(AEAderx(1,1,lll,kkk,iii,1),Ub2(1,k+1),
7267 & AEAb2derx(1,lll,kkk,iii,2,1))
7268 call transpose2(AEAderx(1,1,lll,kkk,iii,2),auxmat(1,1))
7269 call matvec2(auxmat(1,1),b1(1,j),
7270 & AEAb1derx(1,lll,kkk,iii,1,2))
7271 call matvec2(auxmat(1,1),Ub2(1,j),
7272 & AEAb2derx(1,lll,kkk,iii,1,2))
7273 call matvec2(AEAderx(1,1,lll,kkk,iii,2),b1(1,l+1),
7274 & AEAb1derx(1,lll,kkk,iii,2,2))
7275 call matvec2(AEAderx(1,1,lll,kkk,iii,2),Ub2(1,l+1),
7276 & AEAb2derx(1,lll,kkk,iii,2,2))
7283 C Antiparallel orientation of the two CA-CA-CA frames.
7285 iti=itortyp(itype(i))
7289 itk1=itortyp(itype(k+1))
7290 itl=itortyp(itype(l))
7291 itj=itortyp(itype(j))
7292 if (j.lt.nres-1) then
7293 itj1=itortyp(itype(j+1))
7297 C A2 kernel(j-1)T A1T
7298 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
7299 & aa2tder(1,1,1,1),1,.true.,EUg(1,1,j),EUgder(1,1,j),
7300 & AEA(1,1,1),AEAderg(1,1,1),AEAderx(1,1,1,1,1,1))
7301 C Following matrices are needed only for 6-th order cumulants
7302 IF (wcorr6.gt.0.0d0 .or. (wturn6.gt.0.0d0 .and.
7303 & j.eq.i+4 .and. l.eq.i+3)) THEN
7304 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
7305 & aa2tder(1,1,1,1),1,.true.,EUgC(1,1,j),EUgCder(1,1,j),
7306 & AECA(1,1,1),AECAderg(1,1,1),AECAderx(1,1,1,1,1,1))
7307 call kernel(aa2(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
7308 & aa2tder(1,1,1,1),2,.true.,Ug2DtEUg(1,1,j),
7309 & Ug2DtEUgder(1,1,1,j),ADtEA(1,1,1),ADtEAderg(1,1,1,1),
7310 & ADtEAderx(1,1,1,1,1,1))
7311 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
7312 & aa2tder(1,1,1,1),2,.true.,DtUg2EUg(1,1,j),
7313 & DtUg2EUgder(1,1,1,j),ADtEA1(1,1,1),ADtEA1derg(1,1,1,1),
7314 & ADtEA1derx(1,1,1,1,1,1))
7316 C End 6-th order cumulants
7317 call transpose2(EUgder(1,1,k),auxmat(1,1))
7318 call matmat2(auxmat(1,1),AEA(1,1,1),EAEAderg(1,1,1,1))
7319 call transpose2(EUg(1,1,k),auxmat(1,1))
7320 call matmat2(auxmat(1,1),AEA(1,1,1),EAEA(1,1,1))
7321 call matmat2(auxmat(1,1),AEAderg(1,1,1),EAEAderg(1,1,2,1))
7325 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,1),
7326 & EAEAderx(1,1,lll,kkk,iii,1))
7330 C A2T kernel(i+1)T A1
7331 call kernel(aa2t(1,1),aa1(1,1),aa2tder(1,1,1,1),
7332 & a_chuj_der(1,1,1,1,jj,i),1,.true.,EUg(1,1,k),EUgder(1,1,k),
7333 & AEA(1,1,2),AEAderg(1,1,2),AEAderx(1,1,1,1,1,2))
7334 C Following matrices are needed only for 6-th order cumulants
7335 IF (wcorr6.gt.0.0d0 .or. (wturn6.gt.0.0d0 .and.
7336 & j.eq.i+4 .and. l.eq.i+3)) THEN
7337 call kernel(aa2t(1,1),aa1(1,1),aa2tder(1,1,1,1),
7338 & a_chuj_der(1,1,1,1,jj,i),1,.true.,EUgC(1,1,k),EUgCder(1,1,k),
7339 & AECA(1,1,2),AECAderg(1,1,2),AECAderx(1,1,1,1,1,2))
7340 call kernel(aa2t(1,1),aa1(1,1),aa2tder(1,1,1,1),
7341 & a_chuj_der(1,1,1,1,jj,i),2,.true.,Ug2DtEUg(1,1,k),
7342 & Ug2DtEUgder(1,1,1,k),ADtEA(1,1,2),ADtEAderg(1,1,1,2),
7343 & ADtEAderx(1,1,1,1,1,2))
7344 call kernel(aa2t(1,1),aa1(1,1),aa2tder(1,1,1,1),
7345 & a_chuj_der(1,1,1,1,jj,i),2,.true.,DtUg2EUg(1,1,k),
7346 & DtUg2EUgder(1,1,1,k),ADtEA1(1,1,2),ADtEA1derg(1,1,1,2),
7347 & ADtEA1derx(1,1,1,1,1,2))
7349 C End 6-th order cumulants
7350 call transpose2(EUgder(1,1,j),auxmat(1,1))
7351 call matmat2(auxmat(1,1),AEA(1,1,1),EAEAderg(1,1,2,2))
7352 call transpose2(EUg(1,1,j),auxmat(1,1))
7353 call matmat2(auxmat(1,1),AEA(1,1,2),EAEA(1,1,2))
7354 call matmat2(auxmat(1,1),AEAderg(1,1,2),EAEAderg(1,1,2,2))
7358 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,2),
7359 & EAEAderx(1,1,lll,kkk,iii,2))
7364 C Calculate the vectors and their derivatives in virtual-bond dihedral angles.
7365 C They are needed only when the fifth- or the sixth-order cumulants are
7367 IF (wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0 .or.
7368 & (wturn6.gt.0.0d0 .and. j.eq.i+4 .and. l.eq.i+3)) THEN
7369 call transpose2(AEA(1,1,1),auxmat(1,1))
7370 call matvec2(auxmat(1,1),b1(1,i),AEAb1(1,1,1))
7371 call matvec2(auxmat(1,1),Ub2(1,i),AEAb2(1,1,1))
7372 call matvec2(auxmat(1,1),Ub2der(1,i),AEAb2derg(1,2,1,1))
7373 call transpose2(AEAderg(1,1,1),auxmat(1,1))
7374 call matvec2(auxmat(1,1),b1(1,i),AEAb1derg(1,1,1))
7375 call matvec2(auxmat(1,1),Ub2(1,i),AEAb2derg(1,1,1,1))
7376 call matvec2(AEA(1,1,1),b1(1,k+1),AEAb1(1,2,1))
7377 call matvec2(AEAderg(1,1,1),b1(1,k+1),AEAb1derg(1,2,1))
7378 call matvec2(AEA(1,1,1),Ub2(1,k+1),AEAb2(1,2,1))
7379 call matvec2(AEAderg(1,1,1),Ub2(1,k+1),AEAb2derg(1,1,2,1))
7380 call matvec2(AEA(1,1,1),Ub2der(1,k+1),AEAb2derg(1,2,2,1))
7381 call transpose2(AEA(1,1,2),auxmat(1,1))
7382 call matvec2(auxmat(1,1),b1(1,j+1),AEAb1(1,1,2))
7383 call matvec2(auxmat(1,1),Ub2(1,l),AEAb2(1,1,2))
7384 call matvec2(auxmat(1,1),Ub2der(1,l),AEAb2derg(1,2,1,2))
7385 call transpose2(AEAderg(1,1,2),auxmat(1,1))
7386 call matvec2(auxmat(1,1),b1(1,l),AEAb1(1,1,2))
7387 call matvec2(auxmat(1,1),Ub2(1,l),AEAb2derg(1,1,1,2))
7388 call matvec2(AEA(1,1,2),b1(1,j+1),AEAb1(1,2,2))
7389 call matvec2(AEAderg(1,1,2),b1(1,j+1),AEAb1derg(1,2,2))
7390 call matvec2(AEA(1,1,2),Ub2(1,j),AEAb2(1,2,2))
7391 call matvec2(AEAderg(1,1,2),Ub2(1,j),AEAb2derg(1,1,2,2))
7392 call matvec2(AEA(1,1,2),Ub2der(1,j),AEAb2derg(1,2,2,2))
7393 C Calculate the Cartesian derivatives of the vectors.
7397 call transpose2(AEAderx(1,1,lll,kkk,iii,1),auxmat(1,1))
7398 call matvec2(auxmat(1,1),b1(1,i),
7399 & AEAb1derx(1,lll,kkk,iii,1,1))
7400 call matvec2(auxmat(1,1),Ub2(1,i),
7401 & AEAb2derx(1,lll,kkk,iii,1,1))
7402 call matvec2(AEAderx(1,1,lll,kkk,iii,1),b1(1,k+1),
7403 & AEAb1derx(1,lll,kkk,iii,2,1))
7404 call matvec2(AEAderx(1,1,lll,kkk,iii,1),Ub2(1,k+1),
7405 & AEAb2derx(1,lll,kkk,iii,2,1))
7406 call transpose2(AEAderx(1,1,lll,kkk,iii,2),auxmat(1,1))
7407 call matvec2(auxmat(1,1),b1(1,l),
7408 & AEAb1derx(1,lll,kkk,iii,1,2))
7409 call matvec2(auxmat(1,1),Ub2(1,l),
7410 & AEAb2derx(1,lll,kkk,iii,1,2))
7411 call matvec2(AEAderx(1,1,lll,kkk,iii,2),b1(1,j+1),
7412 & AEAb1derx(1,lll,kkk,iii,2,2))
7413 call matvec2(AEAderx(1,1,lll,kkk,iii,2),Ub2(1,j),
7414 & AEAb2derx(1,lll,kkk,iii,2,2))
7423 C---------------------------------------------------------------------------
7424 subroutine kernel(aa1,aa2t,aa1derx,aa2tderx,nderg,transp,
7425 & KK,KKderg,AKA,AKAderg,AKAderx)
7429 double precision aa1(2,2),aa2t(2,2),aa1derx(2,2,3,5),
7430 & aa2tderx(2,2,3,5),KK(2,2),KKderg(2,2,nderg),AKA(2,2),
7431 & AKAderg(2,2,nderg),AKAderx(2,2,3,5,2)
7436 call prodmat3(aa1(1,1),aa2t(1,1),KK(1,1),transp,AKA(1,1))
7438 call prodmat3(aa1(1,1),aa2t(1,1),KKderg(1,1,iii),transp,
7441 cd if (lprn) write (2,*) 'In kernel'
7443 cd if (lprn) write (2,*) 'kkk=',kkk
7445 call prodmat3(aa1derx(1,1,lll,kkk),aa2t(1,1),
7446 & KK(1,1),transp,AKAderx(1,1,lll,kkk,1))
7448 cd write (2,*) 'lll=',lll
7449 cd write (2,*) 'iii=1'
7451 cd write (2,'(3(2f10.5),5x)')
7452 cd & (AKAderx(jjj,mmm,lll,kkk,1),mmm=1,2)
7455 call prodmat3(aa1(1,1),aa2tderx(1,1,lll,kkk),
7456 & KK(1,1),transp,AKAderx(1,1,lll,kkk,2))
7458 cd write (2,*) 'lll=',lll
7459 cd write (2,*) 'iii=2'
7461 cd write (2,'(3(2f10.5),5x)')
7462 cd & (AKAderx(jjj,mmm,lll,kkk,2),mmm=1,2)
7469 C---------------------------------------------------------------------------
7470 double precision function eello4(i,j,k,l,jj,kk)
7471 implicit real*8 (a-h,o-z)
7472 include 'DIMENSIONS'
7473 include 'COMMON.IOUNITS'
7474 include 'COMMON.CHAIN'
7475 include 'COMMON.DERIV'
7476 include 'COMMON.INTERACT'
7477 include 'COMMON.CONTACTS'
7478 include 'COMMON.TORSION'
7479 include 'COMMON.VAR'
7480 include 'COMMON.GEO'
7481 double precision pizda(2,2),ggg1(3),ggg2(3)
7482 cd if (i.ne.1 .or. j.ne.5 .or. k.ne.2 .or.l.ne.4) then
7486 cd print *,'eello4:',i,j,k,l,jj,kk
7487 cd write (2,*) 'i',i,' j',j,' k',k,' l',l
7488 cd call checkint4(i,j,k,l,jj,kk,eel4_num)
7489 cold eij=facont_hb(jj,i)
7490 cold ekl=facont_hb(kk,k)
7492 eel4=-EAEA(1,1,1)-EAEA(2,2,1)
7493 cd eel41=-EAEA(1,1,2)-EAEA(2,2,2)
7494 gcorr_loc(k-1)=gcorr_loc(k-1)
7495 & -ekont*(EAEAderg(1,1,1,1)+EAEAderg(2,2,1,1))
7497 gcorr_loc(l-1)=gcorr_loc(l-1)
7498 & -ekont*(EAEAderg(1,1,2,1)+EAEAderg(2,2,2,1))
7500 gcorr_loc(j-1)=gcorr_loc(j-1)
7501 & -ekont*(EAEAderg(1,1,2,1)+EAEAderg(2,2,2,1))
7506 derx(lll,kkk,iii)=-EAEAderx(1,1,lll,kkk,iii,1)
7507 & -EAEAderx(2,2,lll,kkk,iii,1)
7508 cd derx(lll,kkk,iii)=0.0d0
7512 cd gcorr_loc(l-1)=0.0d0
7513 cd gcorr_loc(j-1)=0.0d0
7514 cd gcorr_loc(k-1)=0.0d0
7516 cd write (iout,*)'Contacts have occurred for peptide groups',
7517 cd & i,j,' fcont:',eij,' eij',' and ',k,l,
7518 cd & ' fcont ',ekl,' eel4=',eel4,' eel4_num',16*eel4_num
7519 if (j.lt.nres-1) then
7526 if (l.lt.nres-1) then
7534 cgrad ggg1(ll)=eel4*g_contij(ll,1)
7535 cgrad ggg2(ll)=eel4*g_contij(ll,2)
7536 glongij=eel4*g_contij(ll,1)+ekont*derx(ll,1,1)
7537 glongkl=eel4*g_contij(ll,2)+ekont*derx(ll,1,2)
7538 cgrad ghalf=0.5d0*ggg1(ll)
7539 gradcorr(ll,i)=gradcorr(ll,i)+ekont*derx(ll,2,1)
7540 gradcorr(ll,i+1)=gradcorr(ll,i+1)+ekont*derx(ll,3,1)
7541 gradcorr(ll,j)=gradcorr(ll,j)+ekont*derx(ll,4,1)
7542 gradcorr(ll,j1)=gradcorr(ll,j1)+ekont*derx(ll,5,1)
7543 gradcorr_long(ll,j)=gradcorr_long(ll,j)+glongij
7544 gradcorr_long(ll,i)=gradcorr_long(ll,i)-glongij
7545 cgrad ghalf=0.5d0*ggg2(ll)
7546 gradcorr(ll,k)=gradcorr(ll,k)+ekont*derx(ll,2,2)
7547 gradcorr(ll,k+1)=gradcorr(ll,k+1)+ekont*derx(ll,3,2)
7548 gradcorr(ll,l)=gradcorr(ll,l)+ekont*derx(ll,4,2)
7549 gradcorr(ll,l1)=gradcorr(ll,l1)+ekont*derx(ll,5,2)
7550 gradcorr_long(ll,l)=gradcorr_long(ll,l)+glongkl
7551 gradcorr_long(ll,k)=gradcorr_long(ll,k)-glongkl
7555 cgrad gradcorr(ll,m)=gradcorr(ll,m)+ggg1(ll)
7560 cgrad gradcorr(ll,m)=gradcorr(ll,m)+ggg2(ll)
7565 cgrad gradcorr(ll,m)=gradcorr(ll,m)+ekont*derx(ll,1,1)
7570 cgrad gradcorr(ll,m)=gradcorr(ll,m)+ekont*derx(ll,1,2)
7574 cd write (2,*) iii,gcorr_loc(iii)
7577 cd write (2,*) 'ekont',ekont
7578 cd write (iout,*) 'eello4',ekont*eel4
7581 C---------------------------------------------------------------------------
7582 double precision function eello5(i,j,k,l,jj,kk)
7583 implicit real*8 (a-h,o-z)
7584 include 'DIMENSIONS'
7585 include 'COMMON.IOUNITS'
7586 include 'COMMON.CHAIN'
7587 include 'COMMON.DERIV'
7588 include 'COMMON.INTERACT'
7589 include 'COMMON.CONTACTS'
7590 include 'COMMON.TORSION'
7591 include 'COMMON.VAR'
7592 include 'COMMON.GEO'
7593 double precision pizda(2,2),auxmat(2,2),auxmat1(2,2),vv(2)
7594 double precision ggg1(3),ggg2(3)
7595 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
7600 C /l\ / \ \ / \ / \ / C
7601 C / \ / \ \ / \ / \ / C
7602 C j| o |l1 | o | o| o | | o |o C
7603 C \ |/k\| |/ \| / |/ \| |/ \| C
7604 C \i/ \ / \ / / \ / \ C
7606 C (I) (II) (III) (IV) C
7608 C eello5_1 eello5_2 eello5_3 eello5_4 C
7610 C Antiparallel chains C
7613 C /j\ / \ \ / \ / \ / C
7614 C / \ / \ \ / \ / \ / C
7615 C j1| o |l | o | o| o | | o |o C
7616 C \ |/k\| |/ \| / |/ \| |/ \| C
7617 C \i/ \ / \ / / \ / \ C
7619 C (I) (II) (III) (IV) C
7621 C eello5_1 eello5_2 eello5_3 eello5_4 C
7623 C o denotes a local interaction, vertical lines an electrostatic interaction. C
7625 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
7626 cd if (i.ne.2 .or. j.ne.6 .or. k.ne.3 .or. l.ne.5) then
7631 cd & 'EELLO5: Contacts have occurred for peptide groups',i,j,
7633 itk=itortyp(itype(k))
7634 itl=itortyp(itype(l))
7635 itj=itortyp(itype(j))
7640 cd call checkint5(i,j,k,l,jj,kk,eel5_1_num,eel5_2_num,
7641 cd & eel5_3_num,eel5_4_num)
7645 derx(lll,kkk,iii)=0.0d0
7649 cd eij=facont_hb(jj,i)
7650 cd ekl=facont_hb(kk,k)
7652 cd write (iout,*)'Contacts have occurred for peptide groups',
7653 cd & i,j,' fcont:',eij,' eij',' and ',k,l
7655 C Contribution from the graph I.
7656 cd write (2,*) 'AEA ',AEA(1,1,1),AEA(2,1,1),AEA(1,2,1),AEA(2,2,1)
7657 cd write (2,*) 'AEAb2',AEAb2(1,1,1),AEAb2(2,1,1)
7658 call transpose2(EUg(1,1,k),auxmat(1,1))
7659 call matmat2(AEA(1,1,1),auxmat(1,1),pizda(1,1))
7660 vv(1)=pizda(1,1)-pizda(2,2)
7661 vv(2)=pizda(1,2)+pizda(2,1)
7662 eello5_1=scalar2(AEAb2(1,1,1),Ub2(1,k))
7663 & +0.5d0*scalar2(vv(1),Dtobr2(1,i))
7664 C Explicit gradient in virtual-dihedral angles.
7665 if (i.gt.1) g_corr5_loc(i-1)=g_corr5_loc(i-1)
7666 & +ekont*(scalar2(AEAb2derg(1,2,1,1),Ub2(1,k))
7667 & +0.5d0*scalar2(vv(1),Dtobr2der(1,i)))
7668 call transpose2(EUgder(1,1,k),auxmat1(1,1))
7669 call matmat2(AEA(1,1,1),auxmat1(1,1),pizda(1,1))
7670 vv(1)=pizda(1,1)-pizda(2,2)
7671 vv(2)=pizda(1,2)+pizda(2,1)
7672 g_corr5_loc(k-1)=g_corr5_loc(k-1)
7673 & +ekont*(scalar2(AEAb2(1,1,1),Ub2der(1,k))
7674 & +0.5d0*scalar2(vv(1),Dtobr2(1,i)))
7675 call matmat2(AEAderg(1,1,1),auxmat(1,1),pizda(1,1))
7676 vv(1)=pizda(1,1)-pizda(2,2)
7677 vv(2)=pizda(1,2)+pizda(2,1)
7679 if (l.lt.nres-1) g_corr5_loc(l-1)=g_corr5_loc(l-1)
7680 & +ekont*(scalar2(AEAb2derg(1,1,1,1),Ub2(1,k))
7681 & +0.5d0*scalar2(vv(1),Dtobr2(1,i)))
7683 if (j.lt.nres-1) g_corr5_loc(j-1)=g_corr5_loc(j-1)
7684 & +ekont*(scalar2(AEAb2derg(1,1,1,1),Ub2(1,k))
7685 & +0.5d0*scalar2(vv(1),Dtobr2(1,i)))
7687 C Cartesian gradient
7691 call matmat2(AEAderx(1,1,lll,kkk,iii,1),auxmat(1,1),
7693 vv(1)=pizda(1,1)-pizda(2,2)
7694 vv(2)=pizda(1,2)+pizda(2,1)
7695 derx(lll,kkk,iii)=derx(lll,kkk,iii)
7696 & +scalar2(AEAb2derx(1,lll,kkk,iii,1,1),Ub2(1,k))
7697 & +0.5d0*scalar2(vv(1),Dtobr2(1,i))
7703 C Contribution from graph II
7704 call transpose2(EE(1,1,itk),auxmat(1,1))
7705 call matmat2(auxmat(1,1),AEA(1,1,1),pizda(1,1))
7706 vv(1)=pizda(1,1)+pizda(2,2)
7707 vv(2)=pizda(2,1)-pizda(1,2)
7708 eello5_2=scalar2(AEAb1(1,2,1),b1(1,k))
7709 & -0.5d0*scalar2(vv(1),Ctobr(1,k))
7710 C Explicit gradient in virtual-dihedral angles.
7711 g_corr5_loc(k-1)=g_corr5_loc(k-1)
7712 & -0.5d0*ekont*scalar2(vv(1),Ctobrder(1,k))
7713 call matmat2(auxmat(1,1),AEAderg(1,1,1),pizda(1,1))
7714 vv(1)=pizda(1,1)+pizda(2,2)
7715 vv(2)=pizda(2,1)-pizda(1,2)
7717 g_corr5_loc(l-1)=g_corr5_loc(l-1)
7718 & +ekont*(scalar2(AEAb1derg(1,2,1),b1(1,k))
7719 & -0.5d0*scalar2(vv(1),Ctobr(1,k)))
7721 g_corr5_loc(j-1)=g_corr5_loc(j-1)
7722 & +ekont*(scalar2(AEAb1derg(1,2,1),b1(1,k))
7723 & -0.5d0*scalar2(vv(1),Ctobr(1,k)))
7725 C Cartesian gradient
7729 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,1),
7731 vv(1)=pizda(1,1)+pizda(2,2)
7732 vv(2)=pizda(2,1)-pizda(1,2)
7733 derx(lll,kkk,iii)=derx(lll,kkk,iii)
7734 & +scalar2(AEAb1derx(1,lll,kkk,iii,2,1),b1(1,k))
7735 & -0.5d0*scalar2(vv(1),Ctobr(1,k))
7743 C Parallel orientation
7744 C Contribution from graph III
7745 call transpose2(EUg(1,1,l),auxmat(1,1))
7746 call matmat2(AEA(1,1,2),auxmat(1,1),pizda(1,1))
7747 vv(1)=pizda(1,1)-pizda(2,2)
7748 vv(2)=pizda(1,2)+pizda(2,1)
7749 eello5_3=scalar2(AEAb2(1,1,2),Ub2(1,l))
7750 & +0.5d0*scalar2(vv(1),Dtobr2(1,j))
7751 C Explicit gradient in virtual-dihedral angles.
7752 g_corr5_loc(j-1)=g_corr5_loc(j-1)
7753 & +ekont*(scalar2(AEAb2derg(1,2,1,2),Ub2(1,l))
7754 & +0.5d0*scalar2(vv(1),Dtobr2der(1,j)))
7755 call matmat2(AEAderg(1,1,2),auxmat(1,1),pizda(1,1))
7756 vv(1)=pizda(1,1)-pizda(2,2)
7757 vv(2)=pizda(1,2)+pizda(2,1)
7758 g_corr5_loc(k-1)=g_corr5_loc(k-1)
7759 & +ekont*(scalar2(AEAb2derg(1,1,1,2),Ub2(1,l))
7760 & +0.5d0*scalar2(vv(1),Dtobr2(1,j)))
7761 call transpose2(EUgder(1,1,l),auxmat1(1,1))
7762 call matmat2(AEA(1,1,2),auxmat1(1,1),pizda(1,1))
7763 vv(1)=pizda(1,1)-pizda(2,2)
7764 vv(2)=pizda(1,2)+pizda(2,1)
7765 g_corr5_loc(l-1)=g_corr5_loc(l-1)
7766 & +ekont*(scalar2(AEAb2(1,1,2),Ub2der(1,l))
7767 & +0.5d0*scalar2(vv(1),Dtobr2(1,j)))
7768 C Cartesian gradient
7772 call matmat2(AEAderx(1,1,lll,kkk,iii,2),auxmat(1,1),
7774 vv(1)=pizda(1,1)-pizda(2,2)
7775 vv(2)=pizda(1,2)+pizda(2,1)
7776 derx(lll,kkk,iii)=derx(lll,kkk,iii)
7777 & +scalar2(AEAb2derx(1,lll,kkk,iii,1,2),Ub2(1,l))
7778 & +0.5d0*scalar2(vv(1),Dtobr2(1,j))
7783 C Contribution from graph IV
7785 call transpose2(EE(1,1,itl),auxmat(1,1))
7786 call matmat2(auxmat(1,1),AEA(1,1,2),pizda(1,1))
7787 vv(1)=pizda(1,1)+pizda(2,2)
7788 vv(2)=pizda(2,1)-pizda(1,2)
7789 eello5_4=scalar2(AEAb1(1,2,2),b1(1,l))
7790 & -0.5d0*scalar2(vv(1),Ctobr(1,l))
7791 C Explicit gradient in virtual-dihedral angles.
7792 g_corr5_loc(l-1)=g_corr5_loc(l-1)
7793 & -0.5d0*ekont*scalar2(vv(1),Ctobrder(1,l))
7794 call matmat2(auxmat(1,1),AEAderg(1,1,2),pizda(1,1))
7795 vv(1)=pizda(1,1)+pizda(2,2)
7796 vv(2)=pizda(2,1)-pizda(1,2)
7797 g_corr5_loc(k-1)=g_corr5_loc(k-1)
7798 & +ekont*(scalar2(AEAb1derg(1,2,2),b1(1,l))
7799 & -0.5d0*scalar2(vv(1),Ctobr(1,l)))
7800 C Cartesian gradient
7804 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,2),
7806 vv(1)=pizda(1,1)+pizda(2,2)
7807 vv(2)=pizda(2,1)-pizda(1,2)
7808 derx(lll,kkk,iii)=derx(lll,kkk,iii)
7809 & +scalar2(AEAb1derx(1,lll,kkk,iii,2,2),b1(1,l))
7810 & -0.5d0*scalar2(vv(1),Ctobr(1,l))
7815 C Antiparallel orientation
7816 C Contribution from graph III
7818 call transpose2(EUg(1,1,j),auxmat(1,1))
7819 call matmat2(AEA(1,1,2),auxmat(1,1),pizda(1,1))
7820 vv(1)=pizda(1,1)-pizda(2,2)
7821 vv(2)=pizda(1,2)+pizda(2,1)
7822 eello5_3=scalar2(AEAb2(1,1,2),Ub2(1,j))
7823 & +0.5d0*scalar2(vv(1),Dtobr2(1,l))
7824 C Explicit gradient in virtual-dihedral angles.
7825 g_corr5_loc(l-1)=g_corr5_loc(l-1)
7826 & +ekont*(scalar2(AEAb2derg(1,2,1,2),Ub2(1,j))
7827 & +0.5d0*scalar2(vv(1),Dtobr2der(1,l)))
7828 call matmat2(AEAderg(1,1,2),auxmat(1,1),pizda(1,1))
7829 vv(1)=pizda(1,1)-pizda(2,2)
7830 vv(2)=pizda(1,2)+pizda(2,1)
7831 g_corr5_loc(k-1)=g_corr5_loc(k-1)
7832 & +ekont*(scalar2(AEAb2derg(1,1,1,2),Ub2(1,j))
7833 & +0.5d0*scalar2(vv(1),Dtobr2(1,l)))
7834 call transpose2(EUgder(1,1,j),auxmat1(1,1))
7835 call matmat2(AEA(1,1,2),auxmat1(1,1),pizda(1,1))
7836 vv(1)=pizda(1,1)-pizda(2,2)
7837 vv(2)=pizda(1,2)+pizda(2,1)
7838 g_corr5_loc(j-1)=g_corr5_loc(j-1)
7839 & +ekont*(scalar2(AEAb2(1,1,2),Ub2der(1,j))
7840 & +0.5d0*scalar2(vv(1),Dtobr2(1,l)))
7841 C Cartesian gradient
7845 call matmat2(AEAderx(1,1,lll,kkk,iii,2),auxmat(1,1),
7847 vv(1)=pizda(1,1)-pizda(2,2)
7848 vv(2)=pizda(1,2)+pizda(2,1)
7849 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)
7850 & +scalar2(AEAb2derx(1,lll,kkk,iii,1,2),Ub2(1,j))
7851 & +0.5d0*scalar2(vv(1),Dtobr2(1,l))
7856 C Contribution from graph IV
7858 call transpose2(EE(1,1,itj),auxmat(1,1))
7859 call matmat2(auxmat(1,1),AEA(1,1,2),pizda(1,1))
7860 vv(1)=pizda(1,1)+pizda(2,2)
7861 vv(2)=pizda(2,1)-pizda(1,2)
7862 eello5_4=scalar2(AEAb1(1,2,2),b1(1,j))
7863 & -0.5d0*scalar2(vv(1),Ctobr(1,j))
7864 C Explicit gradient in virtual-dihedral angles.
7865 g_corr5_loc(j-1)=g_corr5_loc(j-1)
7866 & -0.5d0*ekont*scalar2(vv(1),Ctobrder(1,j))
7867 call matmat2(auxmat(1,1),AEAderg(1,1,2),pizda(1,1))
7868 vv(1)=pizda(1,1)+pizda(2,2)
7869 vv(2)=pizda(2,1)-pizda(1,2)
7870 g_corr5_loc(k-1)=g_corr5_loc(k-1)
7871 & +ekont*(scalar2(AEAb1derg(1,2,2),b1(1,j))
7872 & -0.5d0*scalar2(vv(1),Ctobr(1,j)))
7873 C Cartesian gradient
7877 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,2),
7879 vv(1)=pizda(1,1)+pizda(2,2)
7880 vv(2)=pizda(2,1)-pizda(1,2)
7881 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)
7882 & +scalar2(AEAb1derx(1,lll,kkk,iii,2,2),b1(1,j))
7883 & -0.5d0*scalar2(vv(1),Ctobr(1,j))
7889 eel5=eello5_1+eello5_2+eello5_3+eello5_4
7890 cd if (i.eq.2 .and. j.eq.8 .and. k.eq.3 .and. l.eq.7) then
7891 cd write (2,*) 'ijkl',i,j,k,l
7892 cd write (2,*) 'eello5_1',eello5_1,' eello5_2',eello5_2,
7893 cd & ' eello5_3',eello5_3,' eello5_4',eello5_4
7895 cd write(iout,*) 'eello5_1',eello5_1,' eel5_1_num',16*eel5_1_num
7896 cd write(iout,*) 'eello5_2',eello5_2,' eel5_2_num',16*eel5_2_num
7897 cd write(iout,*) 'eello5_3',eello5_3,' eel5_3_num',16*eel5_3_num
7898 cd write(iout,*) 'eello5_4',eello5_4,' eel5_4_num',16*eel5_4_num
7899 if (j.lt.nres-1) then
7906 if (l.lt.nres-1) then
7916 cd write (2,*) 'eij',eij,' ekl',ekl,' ekont',ekont
7917 C 2/11/08 AL Gradients over DC's connecting interacting sites will be
7918 C summed up outside the subrouine as for the other subroutines
7919 C handling long-range interactions. The old code is commented out
7920 C with "cgrad" to keep track of changes.
7922 cgrad ggg1(ll)=eel5*g_contij(ll,1)
7923 cgrad ggg2(ll)=eel5*g_contij(ll,2)
7924 gradcorr5ij=eel5*g_contij(ll,1)+ekont*derx(ll,1,1)
7925 gradcorr5kl=eel5*g_contij(ll,2)+ekont*derx(ll,1,2)
7926 c write (iout,'(a,3i3,a,5f8.3,2i3,a,5f8.3,a,f8.3)')
7927 c & "ecorr5",ll,i,j," derx",derx(ll,2,1),derx(ll,3,1),derx(ll,4,1),
7928 c & derx(ll,5,1),k,l," derx",derx(ll,2,2),derx(ll,3,2),
7929 c & derx(ll,4,2),derx(ll,5,2)," ekont",ekont
7930 c write (iout,'(a,3i3,a,3f8.3,2i3,a,3f8.3)')
7931 c & "ecorr5",ll,i,j," gradcorr5",g_contij(ll,1),derx(ll,1,1),
7933 c & k,l," gradcorr5",g_contij(ll,2),derx(ll,1,2),gradcorr5kl
7934 cold ghalf=0.5d0*eel5*ekl*gacont_hbr(ll,jj,i)
7935 cgrad ghalf=0.5d0*ggg1(ll)
7937 gradcorr5(ll,i)=gradcorr5(ll,i)+ekont*derx(ll,2,1)
7938 gradcorr5(ll,i+1)=gradcorr5(ll,i+1)+ekont*derx(ll,3,1)
7939 gradcorr5(ll,j)=gradcorr5(ll,j)+ekont*derx(ll,4,1)
7940 gradcorr5(ll,j1)=gradcorr5(ll,j1)+ekont*derx(ll,5,1)
7941 gradcorr5_long(ll,j)=gradcorr5_long(ll,j)+gradcorr5ij
7942 gradcorr5_long(ll,i)=gradcorr5_long(ll,i)-gradcorr5ij
7943 cold ghalf=0.5d0*eel5*eij*gacont_hbr(ll,kk,k)
7944 cgrad ghalf=0.5d0*ggg2(ll)
7946 gradcorr5(ll,k)=gradcorr5(ll,k)+ghalf+ekont*derx(ll,2,2)
7947 gradcorr5(ll,k+1)=gradcorr5(ll,k+1)+ekont*derx(ll,3,2)
7948 gradcorr5(ll,l)=gradcorr5(ll,l)+ghalf+ekont*derx(ll,4,2)
7949 gradcorr5(ll,l1)=gradcorr5(ll,l1)+ekont*derx(ll,5,2)
7950 gradcorr5_long(ll,l)=gradcorr5_long(ll,l)+gradcorr5kl
7951 gradcorr5_long(ll,k)=gradcorr5_long(ll,k)-gradcorr5kl
7956 cold gradcorr5(ll,m)=gradcorr5(ll,m)+eel5*ekl*gacont_hbr(ll,jj,i)
7957 cgrad gradcorr5(ll,m)=gradcorr5(ll,m)+ggg1(ll)
7962 cold gradcorr5(ll,m)=gradcorr5(ll,m)+eel5*eij*gacont_hbr(ll,kk,k)
7963 cgrad gradcorr5(ll,m)=gradcorr5(ll,m)+ggg2(ll)
7969 cgrad gradcorr5(ll,m)=gradcorr5(ll,m)+ekont*derx(ll,1,1)
7974 cgrad gradcorr5(ll,m)=gradcorr5(ll,m)+ekont*derx(ll,1,2)
7978 cd write (2,*) iii,g_corr5_loc(iii)
7981 cd write (2,*) 'ekont',ekont
7982 cd write (iout,*) 'eello5',ekont*eel5
7985 c--------------------------------------------------------------------------
7986 double precision function eello6(i,j,k,l,jj,kk)
7987 implicit real*8 (a-h,o-z)
7988 include 'DIMENSIONS'
7989 include 'COMMON.IOUNITS'
7990 include 'COMMON.CHAIN'
7991 include 'COMMON.DERIV'
7992 include 'COMMON.INTERACT'
7993 include 'COMMON.CONTACTS'
7994 include 'COMMON.TORSION'
7995 include 'COMMON.VAR'
7996 include 'COMMON.GEO'
7997 include 'COMMON.FFIELD'
7998 double precision ggg1(3),ggg2(3)
7999 cd if (i.ne.1 .or. j.ne.3 .or. k.ne.2 .or. l.ne.4) then
8004 cd & 'EELLO6: Contacts have occurred for peptide groups',i,j,
8012 cd call checkint6(i,j,k,l,jj,kk,eel6_1_num,eel6_2_num,
8013 cd & eel6_3_num,eel6_4_num,eel6_5_num,eel6_6_num)
8017 derx(lll,kkk,iii)=0.0d0
8021 cd eij=facont_hb(jj,i)
8022 cd ekl=facont_hb(kk,k)
8028 eello6_1=eello6_graph1(i,j,k,l,1,.false.)
8029 eello6_2=eello6_graph1(j,i,l,k,2,.false.)
8030 eello6_3=eello6_graph2(i,j,k,l,jj,kk,.false.)
8031 eello6_4=eello6_graph4(i,j,k,l,jj,kk,1,.false.)
8032 eello6_5=eello6_graph4(j,i,l,k,jj,kk,2,.false.)
8033 eello6_6=eello6_graph3(i,j,k,l,jj,kk,.false.)
8035 eello6_1=eello6_graph1(i,j,k,l,1,.false.)
8036 eello6_2=eello6_graph1(l,k,j,i,2,.true.)
8037 eello6_3=eello6_graph2(i,l,k,j,jj,kk,.true.)
8038 eello6_4=eello6_graph4(i,j,k,l,jj,kk,1,.false.)
8039 if (wturn6.eq.0.0d0 .or. j.ne.i+4) then
8040 eello6_5=eello6_graph4(l,k,j,i,kk,jj,2,.true.)
8044 eello6_6=eello6_graph3(i,l,k,j,jj,kk,.true.)
8046 C If turn contributions are considered, they will be handled separately.
8047 eel6=eello6_1+eello6_2+eello6_3+eello6_4+eello6_5+eello6_6
8048 cd write(iout,*) 'eello6_1',eello6_1!,' eel6_1_num',16*eel6_1_num
8049 cd write(iout,*) 'eello6_2',eello6_2!,' eel6_2_num',16*eel6_2_num
8050 cd write(iout,*) 'eello6_3',eello6_3!,' eel6_3_num',16*eel6_3_num
8051 cd write(iout,*) 'eello6_4',eello6_4!,' eel6_4_num',16*eel6_4_num
8052 cd write(iout,*) 'eello6_5',eello6_5!,' eel6_5_num',16*eel6_5_num
8053 cd write(iout,*) 'eello6_6',eello6_6!,' eel6_6_num',16*eel6_6_num
8055 if (j.lt.nres-1) then
8062 if (l.lt.nres-1) then
8070 cgrad ggg1(ll)=eel6*g_contij(ll,1)
8071 cgrad ggg2(ll)=eel6*g_contij(ll,2)
8072 cold ghalf=0.5d0*eel6*ekl*gacont_hbr(ll,jj,i)
8073 cgrad ghalf=0.5d0*ggg1(ll)
8075 gradcorr6ij=eel6*g_contij(ll,1)+ekont*derx(ll,1,1)
8076 gradcorr6kl=eel6*g_contij(ll,2)+ekont*derx(ll,1,2)
8077 gradcorr6(ll,i)=gradcorr6(ll,i)+ekont*derx(ll,2,1)
8078 gradcorr6(ll,i+1)=gradcorr6(ll,i+1)+ekont*derx(ll,3,1)
8079 gradcorr6(ll,j)=gradcorr6(ll,j)+ekont*derx(ll,4,1)
8080 gradcorr6(ll,j1)=gradcorr6(ll,j1)+ekont*derx(ll,5,1)
8081 gradcorr6_long(ll,j)=gradcorr6_long(ll,j)+gradcorr6ij
8082 gradcorr6_long(ll,i)=gradcorr6_long(ll,i)-gradcorr6ij
8083 cgrad ghalf=0.5d0*ggg2(ll)
8084 cold ghalf=0.5d0*eel6*eij*gacont_hbr(ll,kk,k)
8086 gradcorr6(ll,k)=gradcorr6(ll,k)+ekont*derx(ll,2,2)
8087 gradcorr6(ll,k+1)=gradcorr6(ll,k+1)+ekont*derx(ll,3,2)
8088 gradcorr6(ll,l)=gradcorr6(ll,l)+ekont*derx(ll,4,2)
8089 gradcorr6(ll,l1)=gradcorr6(ll,l1)+ekont*derx(ll,5,2)
8090 gradcorr6_long(ll,l)=gradcorr6_long(ll,l)+gradcorr6kl
8091 gradcorr6_long(ll,k)=gradcorr6_long(ll,k)-gradcorr6kl
8096 cold gradcorr6(ll,m)=gradcorr6(ll,m)+eel6*ekl*gacont_hbr(ll,jj,i)
8097 cgrad gradcorr6(ll,m)=gradcorr6(ll,m)+ggg1(ll)
8102 cold gradcorr6(ll,m)=gradcorr6(ll,m)+eel6*eij*gacont_hbr(ll,kk,k)
8103 cgrad gradcorr6(ll,m)=gradcorr6(ll,m)+ggg2(ll)
8109 cgrad gradcorr6(ll,m)=gradcorr6(ll,m)+ekont*derx(ll,1,1)
8114 cgrad gradcorr6(ll,m)=gradcorr6(ll,m)+ekont*derx(ll,1,2)
8118 cd write (2,*) iii,g_corr6_loc(iii)
8121 cd write (2,*) 'ekont',ekont
8122 cd write (iout,*) 'eello6',ekont*eel6
8125 c--------------------------------------------------------------------------
8126 double precision function eello6_graph1(i,j,k,l,imat,swap)
8127 implicit real*8 (a-h,o-z)
8128 include 'DIMENSIONS'
8129 include 'COMMON.IOUNITS'
8130 include 'COMMON.CHAIN'
8131 include 'COMMON.DERIV'
8132 include 'COMMON.INTERACT'
8133 include 'COMMON.CONTACTS'
8134 include 'COMMON.TORSION'
8135 include 'COMMON.VAR'
8136 include 'COMMON.GEO'
8137 double precision vv(2),vv1(2),pizda(2,2),auxmat(2,2),pizda1(2,2)
8141 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
8143 C Parallel Antiparallel C
8149 C \ j|/k\| / \ |/k\|l / C
8154 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
8155 itk=itortyp(itype(k))
8156 s1= scalar2(AEAb1(1,2,imat),CUgb2(1,i))
8157 s2=-scalar2(AEAb2(1,1,imat),Ug2Db1t(1,k))
8158 s3= scalar2(AEAb2(1,1,imat),CUgb2(1,k))
8159 call transpose2(EUgC(1,1,k),auxmat(1,1))
8160 call matmat2(AEA(1,1,imat),auxmat(1,1),pizda1(1,1))
8161 vv1(1)=pizda1(1,1)-pizda1(2,2)
8162 vv1(2)=pizda1(1,2)+pizda1(2,1)
8163 s4=0.5d0*scalar2(vv1(1),Dtobr2(1,i))
8164 vv(1)=AEAb1(1,2,imat)*b1(1,k)-AEAb1(2,2,imat)*b1(2,k)
8165 vv(2)=AEAb1(1,2,imat)*b1(2,k)+AEAb1(2,2,imat)*b1(1,k)
8166 s5=scalar2(vv(1),Dtobr2(1,i))
8167 cd write (2,*) 's1',s1,' s2',s2,' s3',s3,' s4', s4,' s5',s5
8168 eello6_graph1=-0.5d0*(s1+s2+s3+s4+s5)
8169 if (i.gt.1) g_corr6_loc(i-1)=g_corr6_loc(i-1)
8170 & -0.5d0*ekont*(scalar2(AEAb1(1,2,imat),CUgb2der(1,i))
8171 & -scalar2(AEAb2derg(1,2,1,imat),Ug2Db1t(1,k))
8172 & +scalar2(AEAb2derg(1,2,1,imat),CUgb2(1,k))
8173 & +0.5d0*scalar2(vv1(1),Dtobr2der(1,i))
8174 & +scalar2(vv(1),Dtobr2der(1,i)))
8175 call matmat2(AEAderg(1,1,imat),auxmat(1,1),pizda1(1,1))
8176 vv1(1)=pizda1(1,1)-pizda1(2,2)
8177 vv1(2)=pizda1(1,2)+pizda1(2,1)
8178 vv(1)=AEAb1derg(1,2,imat)*b1(1,k)-AEAb1derg(2,2,imat)*b1(2,k)
8179 vv(2)=AEAb1derg(1,2,imat)*b1(2,k)+AEAb1derg(2,2,imat)*b1(1,k)
8181 g_corr6_loc(l-1)=g_corr6_loc(l-1)
8182 & +ekont*(-0.5d0*(scalar2(AEAb1derg(1,2,imat),CUgb2(1,i))
8183 & -scalar2(AEAb2derg(1,1,1,imat),Ug2Db1t(1,k))
8184 & +scalar2(AEAb2derg(1,1,1,imat),CUgb2(1,k))
8185 & +0.5d0*scalar2(vv1(1),Dtobr2(1,i))+scalar2(vv(1),Dtobr2(1,i))))
8187 g_corr6_loc(j-1)=g_corr6_loc(j-1)
8188 & +ekont*(-0.5d0*(scalar2(AEAb1derg(1,2,imat),CUgb2(1,i))
8189 & -scalar2(AEAb2derg(1,1,1,imat),Ug2Db1t(1,k))
8190 & +scalar2(AEAb2derg(1,1,1,imat),CUgb2(1,k))
8191 & +0.5d0*scalar2(vv1(1),Dtobr2(1,i))+scalar2(vv(1),Dtobr2(1,i))))
8193 call transpose2(EUgCder(1,1,k),auxmat(1,1))
8194 call matmat2(AEA(1,1,imat),auxmat(1,1),pizda1(1,1))
8195 vv1(1)=pizda1(1,1)-pizda1(2,2)
8196 vv1(2)=pizda1(1,2)+pizda1(2,1)
8197 if (k.gt.1) g_corr6_loc(k-1)=g_corr6_loc(k-1)
8198 & +ekont*(-0.5d0*(-scalar2(AEAb2(1,1,imat),Ug2Db1tder(1,k))
8199 & +scalar2(AEAb2(1,1,imat),CUgb2der(1,k))
8200 & +0.5d0*scalar2(vv1(1),Dtobr2(1,i))))
8209 s1= scalar2(AEAb1derx(1,lll,kkk,iii,2,imat),CUgb2(1,i))
8210 s2=-scalar2(AEAb2derx(1,lll,kkk,iii,1,imat),Ug2Db1t(1,k))
8211 s3= scalar2(AEAb2derx(1,lll,kkk,iii,1,imat),CUgb2(1,k))
8212 call transpose2(EUgC(1,1,k),auxmat(1,1))
8213 call matmat2(AEAderx(1,1,lll,kkk,iii,imat),auxmat(1,1),
8215 vv1(1)=pizda1(1,1)-pizda1(2,2)
8216 vv1(2)=pizda1(1,2)+pizda1(2,1)
8217 s4=0.5d0*scalar2(vv1(1),Dtobr2(1,i))
8218 vv(1)=AEAb1derx(1,lll,kkk,iii,2,imat)*b1(1,k)
8219 & -AEAb1derx(2,lll,kkk,iii,2,imat)*b1(2,k)
8220 vv(2)=AEAb1derx(1,lll,kkk,iii,2,imat)*b1(2,k)
8221 & +AEAb1derx(2,lll,kkk,iii,2,imat)*b1(1,k)
8222 s5=scalar2(vv(1),Dtobr2(1,i))
8223 derx(lll,kkk,ind)=derx(lll,kkk,ind)-0.5d0*(s1+s2+s3+s4+s5)
8229 c----------------------------------------------------------------------------
8230 double precision function eello6_graph2(i,j,k,l,jj,kk,swap)
8231 implicit real*8 (a-h,o-z)
8232 include 'DIMENSIONS'
8233 include 'COMMON.IOUNITS'
8234 include 'COMMON.CHAIN'
8235 include 'COMMON.DERIV'
8236 include 'COMMON.INTERACT'
8237 include 'COMMON.CONTACTS'
8238 include 'COMMON.TORSION'
8239 include 'COMMON.VAR'
8240 include 'COMMON.GEO'
8242 double precision vv(2),pizda(2,2),auxmat(2,2),auxvec(2),
8243 & auxvec1(2),auxvec2(2),auxmat1(2,2)
8246 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
8248 C Parallel Antiparallel C
8254 C \ j|/k\| \ |/k\|l C
8259 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
8260 cd write (2,*) 'eello6_graph2: i,',i,' j',j,' k',k,' l',l
8261 C AL 7/4/01 s1 would occur in the sixth-order moment,
8262 C but not in a cluster cumulant
8264 s1=dip(1,jj,i)*dip(1,kk,k)
8266 call matvec2(ADtEA1(1,1,1),Ub2(1,k),auxvec(1))
8267 s2=-0.5d0*scalar2(Ub2(1,i),auxvec(1))
8268 call matvec2(ADtEA(1,1,2),Ub2(1,l),auxvec1(1))
8269 s3=-0.5d0*scalar2(Ub2(1,j),auxvec1(1))
8270 call transpose2(EUg(1,1,k),auxmat(1,1))
8271 call matmat2(ADtEA1(1,1,1),auxmat(1,1),pizda(1,1))
8272 vv(1)=pizda(1,1)-pizda(2,2)
8273 vv(2)=pizda(1,2)+pizda(2,1)
8274 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
8275 cd write (2,*) 'eello6_graph2:','s1',s1,' s2',s2,' s3',s3,' s4',s4
8277 eello6_graph2=-(s1+s2+s3+s4)
8279 eello6_graph2=-(s2+s3+s4)
8282 C Derivatives in gamma(i-1)
8285 s1=dipderg(1,jj,i)*dip(1,kk,k)
8287 s2=-0.5d0*scalar2(Ub2der(1,i),auxvec(1))
8288 call matvec2(ADtEAderg(1,1,1,2),Ub2(1,l),auxvec2(1))
8289 s3=-0.5d0*scalar2(Ub2(1,j),auxvec2(1))
8290 s4=-0.25d0*scalar2(vv(1),Dtobr2der(1,i))
8292 g_corr6_loc(i-1)=g_corr6_loc(i-1)-ekont*(s1+s2+s3+s4)
8294 g_corr6_loc(i-1)=g_corr6_loc(i-1)-ekont*(s2+s3+s4)
8296 c g_corr6_loc(i-1)=g_corr6_loc(i-1)-s3
8298 C Derivatives in gamma(k-1)
8300 s1=dip(1,jj,i)*dipderg(1,kk,k)
8302 call matvec2(ADtEA1(1,1,1),Ub2der(1,k),auxvec2(1))
8303 s2=-0.5d0*scalar2(Ub2(1,i),auxvec2(1))
8304 call matvec2(ADtEAderg(1,1,2,2),Ub2(1,l),auxvec2(1))
8305 s3=-0.5d0*scalar2(Ub2(1,j),auxvec2(1))
8306 call transpose2(EUgder(1,1,k),auxmat1(1,1))
8307 call matmat2(ADtEA1(1,1,1),auxmat1(1,1),pizda(1,1))
8308 vv(1)=pizda(1,1)-pizda(2,2)
8309 vv(2)=pizda(1,2)+pizda(2,1)
8310 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
8312 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s1+s2+s3+s4)
8314 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s2+s3+s4)
8316 c g_corr6_loc(k-1)=g_corr6_loc(k-1)-s3
8317 C Derivatives in gamma(j-1) or gamma(l-1)
8320 s1=dipderg(3,jj,i)*dip(1,kk,k)
8322 call matvec2(ADtEA1derg(1,1,1,1),Ub2(1,k),auxvec2(1))
8323 s2=-0.5d0*scalar2(Ub2(1,i),auxvec2(1))
8324 s3=-0.5d0*scalar2(Ub2der(1,j),auxvec1(1))
8325 call matmat2(ADtEA1derg(1,1,1,1),auxmat(1,1),pizda(1,1))
8326 vv(1)=pizda(1,1)-pizda(2,2)
8327 vv(2)=pizda(1,2)+pizda(2,1)
8328 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
8331 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*s1
8333 g_corr6_loc(j-1)=g_corr6_loc(j-1)-ekont*s1
8336 g_corr6_loc(j-1)=g_corr6_loc(j-1)-ekont*(s2+s3+s4)
8337 c g_corr6_loc(j-1)=g_corr6_loc(j-1)-s3
8339 C Derivatives in gamma(l-1) or gamma(j-1)
8342 s1=dip(1,jj,i)*dipderg(3,kk,k)
8344 call matvec2(ADtEA1derg(1,1,2,1),Ub2(1,k),auxvec2(1))
8345 s2=-0.5d0*scalar2(Ub2(1,i),auxvec2(1))
8346 call matvec2(ADtEA(1,1,2),Ub2der(1,l),auxvec2(1))
8347 s3=-0.5d0*scalar2(Ub2(1,j),auxvec2(1))
8348 call matmat2(ADtEA1derg(1,1,2,1),auxmat(1,1),pizda(1,1))
8349 vv(1)=pizda(1,1)-pizda(2,2)
8350 vv(2)=pizda(1,2)+pizda(2,1)
8351 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
8354 g_corr6_loc(j-1)=g_corr6_loc(j-1)-ekont*s1
8356 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*s1
8359 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*(s2+s3+s4)
8360 c g_corr6_loc(l-1)=g_corr6_loc(l-1)-s3
8362 C Cartesian derivatives.
8364 write (2,*) 'In eello6_graph2'
8366 write (2,*) 'iii=',iii
8368 write (2,*) 'kkk=',kkk
8370 write (2,'(3(2f10.5),5x)')
8371 & ((ADtEA1derx(jjj,mmm,lll,kkk,iii,1),mmm=1,2),lll=1,3)
8381 s1=dipderx(lll,kkk,1,jj,i)*dip(1,kk,k)
8383 s1=dip(1,jj,i)*dipderx(lll,kkk,1,kk,k)
8386 call matvec2(ADtEA1derx(1,1,lll,kkk,iii,1),Ub2(1,k),
8388 s2=-0.5d0*scalar2(Ub2(1,i),auxvec(1))
8389 call matvec2(ADtEAderx(1,1,lll,kkk,iii,2),Ub2(1,l),
8391 s3=-0.5d0*scalar2(Ub2(1,j),auxvec(1))
8392 call transpose2(EUg(1,1,k),auxmat(1,1))
8393 call matmat2(ADtEA1derx(1,1,lll,kkk,iii,1),auxmat(1,1),
8395 vv(1)=pizda(1,1)-pizda(2,2)
8396 vv(2)=pizda(1,2)+pizda(2,1)
8397 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
8398 cd write (2,*) 's1',s1,' s2',s2,' s3',s3,' s4',s4
8400 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s1+s2+s4)
8402 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s2+s4)
8405 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-s3
8407 derx(lll,kkk,iii)=derx(lll,kkk,iii)-s3
8414 c----------------------------------------------------------------------------
8415 double precision function eello6_graph3(i,j,k,l,jj,kk,swap)
8416 implicit real*8 (a-h,o-z)
8417 include 'DIMENSIONS'
8418 include 'COMMON.IOUNITS'
8419 include 'COMMON.CHAIN'
8420 include 'COMMON.DERIV'
8421 include 'COMMON.INTERACT'
8422 include 'COMMON.CONTACTS'
8423 include 'COMMON.TORSION'
8424 include 'COMMON.VAR'
8425 include 'COMMON.GEO'
8426 double precision vv(2),pizda(2,2),auxmat(2,2),auxvec(2)
8428 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
8430 C Parallel Antiparallel C
8436 C j|/k\| / |/k\|l / C
8441 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
8443 C 4/7/01 AL Component s1 was removed, because it pertains to the respective
8444 C energy moment and not to the cluster cumulant.
8445 iti=itortyp(itype(i))
8446 if (j.lt.nres-1) then
8447 itj1=itortyp(itype(j+1))
8451 itk=itortyp(itype(k))
8452 itk1=itortyp(itype(k+1))
8453 if (l.lt.nres-1) then
8454 itl1=itortyp(itype(l+1))
8459 s1=dip(4,jj,i)*dip(4,kk,k)
8461 call matvec2(AECA(1,1,1),b1(1,k+1),auxvec(1))
8462 s2=0.5d0*scalar2(b1(1,k),auxvec(1))
8463 call matvec2(AECA(1,1,2),b1(1,l+1),auxvec(1))
8464 s3=0.5d0*scalar2(b1(1,j+1),auxvec(1))
8465 call transpose2(EE(1,1,itk),auxmat(1,1))
8466 call matmat2(auxmat(1,1),AECA(1,1,1),pizda(1,1))
8467 vv(1)=pizda(1,1)+pizda(2,2)
8468 vv(2)=pizda(2,1)-pizda(1,2)
8469 s4=-0.25d0*scalar2(vv(1),Ctobr(1,k))
8470 cd write (2,*) 'eello6_graph3:','s1',s1,' s2',s2,' s3',s3,' s4',s4,
8471 cd & "sum",-(s2+s3+s4)
8473 eello6_graph3=-(s1+s2+s3+s4)
8475 eello6_graph3=-(s2+s3+s4)
8478 C Derivatives in gamma(k-1)
8479 call matvec2(AECAderg(1,1,2),b1(1,l+1),auxvec(1))
8480 s3=0.5d0*scalar2(b1(1,j+1),auxvec(1))
8481 s4=-0.25d0*scalar2(vv(1),Ctobrder(1,k))
8482 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s3+s4)
8483 C Derivatives in gamma(l-1)
8484 call matvec2(AECAderg(1,1,1),b1(1,k+1),auxvec(1))
8485 s2=0.5d0*scalar2(b1(1,k),auxvec(1))
8486 call matmat2(auxmat(1,1),AECAderg(1,1,1),pizda(1,1))
8487 vv(1)=pizda(1,1)+pizda(2,2)
8488 vv(2)=pizda(2,1)-pizda(1,2)
8489 s4=-0.25d0*scalar2(vv(1),Ctobr(1,k))
8490 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*(s2+s4)
8491 C Cartesian derivatives.
8497 s1=dipderx(lll,kkk,4,jj,i)*dip(4,kk,k)
8499 s1=dip(4,jj,i)*dipderx(lll,kkk,4,kk,k)
8502 call matvec2(AECAderx(1,1,lll,kkk,iii,1),b1(1,k+1),
8504 s2=0.5d0*scalar2(b1(1,k),auxvec(1))
8505 call matvec2(AECAderx(1,1,lll,kkk,iii,2),b1(1,l+1),
8507 s3=0.5d0*scalar2(b1(1,j+1),auxvec(1))
8508 call matmat2(auxmat(1,1),AECAderx(1,1,lll,kkk,iii,1),
8510 vv(1)=pizda(1,1)+pizda(2,2)
8511 vv(2)=pizda(2,1)-pizda(1,2)
8512 s4=-0.25d0*scalar2(vv(1),Ctobr(1,k))
8514 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s1+s2+s4)
8516 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s2+s4)
8519 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-s3
8521 derx(lll,kkk,iii)=derx(lll,kkk,iii)-s3
8523 c derx(lll,kkk,iii)=derx(lll,kkk,iii)-s4
8529 c----------------------------------------------------------------------------
8530 double precision function eello6_graph4(i,j,k,l,jj,kk,imat,swap)
8531 implicit real*8 (a-h,o-z)
8532 include 'DIMENSIONS'
8533 include 'COMMON.IOUNITS'
8534 include 'COMMON.CHAIN'
8535 include 'COMMON.DERIV'
8536 include 'COMMON.INTERACT'
8537 include 'COMMON.CONTACTS'
8538 include 'COMMON.TORSION'
8539 include 'COMMON.VAR'
8540 include 'COMMON.GEO'
8541 include 'COMMON.FFIELD'
8542 double precision vv(2),pizda(2,2),auxmat(2,2),auxvec(2),
8543 & auxvec1(2),auxmat1(2,2)
8545 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
8547 C Parallel Antiparallel C
8553 C \ j|/k\| \ |/k\|l C
8558 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
8560 C 4/7/01 AL Component s1 was removed, because it pertains to the respective
8561 C energy moment and not to the cluster cumulant.
8562 cd write (2,*) 'eello_graph4: wturn6',wturn6
8563 iti=itortyp(itype(i))
8564 itj=itortyp(itype(j))
8565 if (j.lt.nres-1) then
8566 itj1=itortyp(itype(j+1))
8570 itk=itortyp(itype(k))
8571 if (k.lt.nres-1) then
8572 itk1=itortyp(itype(k+1))
8576 itl=itortyp(itype(l))
8577 if (l.lt.nres-1) then
8578 itl1=itortyp(itype(l+1))
8582 cd write (2,*) 'eello6_graph4:','i',i,' j',j,' k',k,' l',l
8583 cd write (2,*) 'iti',iti,' itj',itj,' itj1',itj1,' itk',itk,
8584 cd & ' itl',itl,' itl1',itl1
8587 s1=dip(3,jj,i)*dip(3,kk,k)
8589 s1=dip(2,jj,j)*dip(2,kk,l)
8592 call matvec2(AECA(1,1,imat),Ub2(1,k),auxvec(1))
8593 s2=0.5d0*scalar2(Ub2(1,i),auxvec(1))
8595 call matvec2(ADtEA1(1,1,3-imat),b1(1,j+1),auxvec1(1))
8596 s3=-0.5d0*scalar2(b1(1,j),auxvec1(1))
8598 call matvec2(ADtEA1(1,1,3-imat),b1(1,l+1),auxvec1(1))
8599 s3=-0.5d0*scalar2(b1(1,l),auxvec1(1))
8601 call transpose2(EUg(1,1,k),auxmat(1,1))
8602 call matmat2(AECA(1,1,imat),auxmat(1,1),pizda(1,1))
8603 vv(1)=pizda(1,1)-pizda(2,2)
8604 vv(2)=pizda(2,1)+pizda(1,2)
8605 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
8606 cd write (2,*) 'eello6_graph4:','s1',s1,' s2',s2,' s3',s3,' s4',s4
8608 eello6_graph4=-(s1+s2+s3+s4)
8610 eello6_graph4=-(s2+s3+s4)
8612 C Derivatives in gamma(i-1)
8616 s1=dipderg(2,jj,i)*dip(3,kk,k)
8618 s1=dipderg(4,jj,j)*dip(2,kk,l)
8621 s2=0.5d0*scalar2(Ub2der(1,i),auxvec(1))
8623 call matvec2(ADtEA1derg(1,1,1,3-imat),b1(1,j+1),auxvec1(1))
8624 s3=-0.5d0*scalar2(b1(1,j),auxvec1(1))
8626 call matvec2(ADtEA1derg(1,1,1,3-imat),b1(1,l+1),auxvec1(1))
8627 s3=-0.5d0*scalar2(b1(1,l),auxvec1(1))
8629 s4=0.25d0*scalar2(vv(1),Dtobr2der(1,i))
8630 if (wturn6.gt.0.0d0 .and. k.eq.l+4 .and. i.eq.j+2) then
8631 cd write (2,*) 'turn6 derivatives'
8633 gel_loc_turn6(i-1)=gel_loc_turn6(i-1)-ekont*(s1+s2+s3+s4)
8635 gel_loc_turn6(i-1)=gel_loc_turn6(i-1)-ekont*(s2+s3+s4)
8639 g_corr6_loc(i-1)=g_corr6_loc(i-1)-ekont*(s1+s2+s3+s4)
8641 g_corr6_loc(i-1)=g_corr6_loc(i-1)-ekont*(s2+s3+s4)
8645 C Derivatives in gamma(k-1)
8648 s1=dip(3,jj,i)*dipderg(2,kk,k)
8650 s1=dip(2,jj,j)*dipderg(4,kk,l)
8653 call matvec2(AECA(1,1,imat),Ub2der(1,k),auxvec1(1))
8654 s2=0.5d0*scalar2(Ub2(1,i),auxvec1(1))
8656 call matvec2(ADtEA1derg(1,1,2,3-imat),b1(1,j+1),auxvec1(1))
8657 s3=-0.5d0*scalar2(b1(1,j),auxvec1(1))
8659 call matvec2(ADtEA1derg(1,1,2,3-imat),b1(1,l+1),auxvec1(1))
8660 s3=-0.5d0*scalar2(b1(1,l),auxvec1(1))
8662 call transpose2(EUgder(1,1,k),auxmat1(1,1))
8663 call matmat2(AECA(1,1,imat),auxmat1(1,1),pizda(1,1))
8664 vv(1)=pizda(1,1)-pizda(2,2)
8665 vv(2)=pizda(2,1)+pizda(1,2)
8666 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
8667 if (wturn6.gt.0.0d0 .and. k.eq.l+4 .and. i.eq.j+2) then
8669 gel_loc_turn6(k-1)=gel_loc_turn6(k-1)-ekont*(s1+s2+s3+s4)
8671 gel_loc_turn6(k-1)=gel_loc_turn6(k-1)-ekont*(s2+s3+s4)
8675 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s1+s2+s3+s4)
8677 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s2+s3+s4)
8680 C Derivatives in gamma(j-1) or gamma(l-1)
8681 if (l.eq.j+1 .and. l.gt.1) then
8682 call matvec2(AECAderg(1,1,imat),Ub2(1,k),auxvec(1))
8683 s2=0.5d0*scalar2(Ub2(1,i),auxvec(1))
8684 call matmat2(AECAderg(1,1,imat),auxmat(1,1),pizda(1,1))
8685 vv(1)=pizda(1,1)-pizda(2,2)
8686 vv(2)=pizda(2,1)+pizda(1,2)
8687 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
8688 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*(s2+s4)
8689 else if (j.gt.1) then
8690 call matvec2(AECAderg(1,1,imat),Ub2(1,k),auxvec(1))
8691 s2=0.5d0*scalar2(Ub2(1,i),auxvec(1))
8692 call matmat2(AECAderg(1,1,imat),auxmat(1,1),pizda(1,1))
8693 vv(1)=pizda(1,1)-pizda(2,2)
8694 vv(2)=pizda(2,1)+pizda(1,2)
8695 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
8696 if (wturn6.gt.0.0d0 .and. k.eq.l+4 .and. i.eq.j+2) then
8697 gel_loc_turn6(j-1)=gel_loc_turn6(j-1)-ekont*(s2+s4)
8699 g_corr6_loc(j-1)=g_corr6_loc(j-1)-ekont*(s2+s4)
8702 C Cartesian derivatives.
8709 s1=dipderx(lll,kkk,3,jj,i)*dip(3,kk,k)
8711 s1=dipderx(lll,kkk,2,jj,j)*dip(2,kk,l)
8715 s1=dip(3,jj,i)*dipderx(lll,kkk,3,kk,k)
8717 s1=dip(2,jj,j)*dipderx(lll,kkk,2,kk,l)
8721 call matvec2(AECAderx(1,1,lll,kkk,iii,imat),Ub2(1,k),
8723 s2=0.5d0*scalar2(Ub2(1,i),auxvec(1))
8725 call matvec2(ADtEA1derx(1,1,lll,kkk,iii,3-imat),
8726 & b1(1,j+1),auxvec(1))
8727 s3=-0.5d0*scalar2(b1(1,j),auxvec(1))
8729 call matvec2(ADtEA1derx(1,1,lll,kkk,iii,3-imat),
8730 & b1(1,l+1),auxvec(1))
8731 s3=-0.5d0*scalar2(b1(1,l),auxvec(1))
8733 call matmat2(AECAderx(1,1,lll,kkk,iii,imat),auxmat(1,1),
8735 vv(1)=pizda(1,1)-pizda(2,2)
8736 vv(2)=pizda(2,1)+pizda(1,2)
8737 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
8739 if (wturn6.gt.0.0d0 .and. k.eq.l+4 .and. i.eq.j+2) then
8741 derx_turn(lll,kkk,3-iii)=derx_turn(lll,kkk,3-iii)
8744 derx_turn(lll,kkk,3-iii)=derx_turn(lll,kkk,3-iii)
8747 derx_turn(lll,kkk,iii)=derx_turn(lll,kkk,iii)-s3
8750 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-(s1+s2+s4)
8752 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-(s2+s4)
8754 derx(lll,kkk,iii)=derx(lll,kkk,iii)-s3
8758 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s1+s2+s4)
8760 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s2+s4)
8763 derx(lll,kkk,iii)=derx(lll,kkk,iii)-s3
8765 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-s3
8773 c----------------------------------------------------------------------------
8774 double precision function eello_turn6(i,jj,kk)
8775 implicit real*8 (a-h,o-z)
8776 include 'DIMENSIONS'
8777 include 'COMMON.IOUNITS'
8778 include 'COMMON.CHAIN'
8779 include 'COMMON.DERIV'
8780 include 'COMMON.INTERACT'
8781 include 'COMMON.CONTACTS'
8782 include 'COMMON.TORSION'
8783 include 'COMMON.VAR'
8784 include 'COMMON.GEO'
8785 double precision vtemp1(2),vtemp2(2),vtemp3(2),vtemp4(2),
8786 & atemp(2,2),auxmat(2,2),achuj_temp(2,2),gtemp(2,2),gvec(2),
8788 double precision vtemp1d(2),vtemp2d(2),vtemp3d(2),vtemp4d(2),
8789 & atempd(2,2),auxmatd(2,2),achuj_tempd(2,2),gtempd(2,2),gvecd(2)
8790 C 4/7/01 AL Components s1, s8, and s13 were removed, because they pertain to
8791 C the respective energy moment and not to the cluster cumulant.
8800 iti=itortyp(itype(i))
8801 itk=itortyp(itype(k))
8802 itk1=itortyp(itype(k+1))
8803 itl=itortyp(itype(l))
8804 itj=itortyp(itype(j))
8805 cd write (2,*) 'itk',itk,' itk1',itk1,' itl',itl,' itj',itj
8806 cd write (2,*) 'i',i,' k',k,' j',j,' l',l
8807 cd if (i.ne.1 .or. j.ne.3 .or. k.ne.2 .or. l.ne.4) then
8812 cd & 'EELLO6: Contacts have occurred for peptide groups',i,j,
8814 cd call checkint_turn6(i,jj,kk,eel_turn6_num)
8818 derx_turn(lll,kkk,iii)=0.0d0
8825 eello6_5=eello6_graph4(l,k,j,i,kk,jj,2,.true.)
8827 cd write (2,*) 'eello6_5',eello6_5
8829 call transpose2(AEA(1,1,1),auxmat(1,1))
8830 call matmat2(EUg(1,1,i+1),auxmat(1,1),auxmat(1,1))
8831 ss1=scalar2(Ub2(1,i+2),b1(1,l))
8832 s1 = (auxmat(1,1)+auxmat(2,2))*ss1
8834 call matvec2(EUg(1,1,i+2),b1(1,l),vtemp1(1))
8835 call matvec2(AEA(1,1,1),vtemp1(1),vtemp1(1))
8836 s2 = scalar2(b1(1,k),vtemp1(1))
8838 call transpose2(AEA(1,1,2),atemp(1,1))
8839 call matmat2(atemp(1,1),EUg(1,1,i+4),atemp(1,1))
8840 call matvec2(Ug2(1,1,i+2),dd(1,1,itk1),vtemp2(1))
8841 s8 = -(atemp(1,1)+atemp(2,2))*scalar2(cc(1,1,itl),vtemp2(1))
8843 call matmat2(EUg(1,1,i+3),AEA(1,1,2),auxmat(1,1))
8844 call matvec2(auxmat(1,1),Ub2(1,i+4),vtemp3(1))
8845 s12 = scalar2(Ub2(1,i+2),vtemp3(1))
8847 call transpose2(a_chuj(1,1,kk,i+1),achuj_temp(1,1))
8848 call matmat2(achuj_temp(1,1),EUg(1,1,i+2),gtemp(1,1))
8849 call matmat2(gtemp(1,1),EUg(1,1,i+3),gtemp(1,1))
8850 call matvec2(a_chuj(1,1,jj,i),Ub2(1,i+4),vtemp4(1))
8851 ss13 = scalar2(b1(1,k),vtemp4(1))
8852 s13 = (gtemp(1,1)+gtemp(2,2))*ss13
8854 c write (2,*) 's1,s2,s8,s12,s13',s1,s2,s8,s12,s13
8860 eel_turn6 = eello6_5 - 0.5d0*(s1+s2+s12+s8+s13)
8861 C Derivatives in gamma(i+2)
8865 call transpose2(AEA(1,1,1),auxmatd(1,1))
8866 call matmat2(EUgder(1,1,i+1),auxmatd(1,1),auxmatd(1,1))
8867 s1d = (auxmatd(1,1)+auxmatd(2,2))*ss1
8868 call transpose2(AEAderg(1,1,2),atempd(1,1))
8869 call matmat2(atempd(1,1),EUg(1,1,i+4),atempd(1,1))
8870 s8d = -(atempd(1,1)+atempd(2,2))*scalar2(cc(1,1,itl),vtemp2(1))
8872 call matmat2(EUg(1,1,i+3),AEAderg(1,1,2),auxmatd(1,1))
8873 call matvec2(auxmatd(1,1),Ub2(1,i+4),vtemp3d(1))
8874 s12d = scalar2(Ub2(1,i+2),vtemp3d(1))
8880 gel_loc_turn6(i)=gel_loc_turn6(i)-0.5d0*ekont*(s1d+s8d+s12d)
8881 C Derivatives in gamma(i+3)
8883 call transpose2(AEA(1,1,1),auxmatd(1,1))
8884 call matmat2(EUg(1,1,i+1),auxmatd(1,1),auxmatd(1,1))
8885 ss1d=scalar2(Ub2der(1,i+2),b1(1,l))
8886 s1d = (auxmatd(1,1)+auxmatd(2,2))*ss1d
8888 call matvec2(EUgder(1,1,i+2),b1(1,l),vtemp1d(1))
8889 call matvec2(AEA(1,1,1),vtemp1d(1),vtemp1d(1))
8890 s2d = scalar2(b1(1,k),vtemp1d(1))
8892 call matvec2(Ug2der(1,1,i+2),dd(1,1,itk1),vtemp2d(1))
8893 s8d = -(atemp(1,1)+atemp(2,2))*scalar2(cc(1,1,itl),vtemp2d(1))
8895 s12d = scalar2(Ub2der(1,i+2),vtemp3(1))
8897 call matmat2(achuj_temp(1,1),EUgder(1,1,i+2),gtempd(1,1))
8898 call matmat2(gtempd(1,1),EUg(1,1,i+3),gtempd(1,1))
8899 s13d = (gtempd(1,1)+gtempd(2,2))*ss13
8907 gel_loc_turn6(i+1)=gel_loc_turn6(i+1)
8908 & -0.5d0*ekont*(s1d+s2d+s8d+s12d+s13d)
8910 gel_loc_turn6(i+1)=gel_loc_turn6(i+1)
8911 & -0.5d0*ekont*(s2d+s12d)
8913 C Derivatives in gamma(i+4)
8914 call matmat2(EUgder(1,1,i+3),AEA(1,1,2),auxmatd(1,1))
8915 call matvec2(auxmatd(1,1),Ub2(1,i+4),vtemp3d(1))
8916 s12d = scalar2(Ub2(1,i+2),vtemp3d(1))
8918 call matmat2(achuj_temp(1,1),EUg(1,1,i+2),gtempd(1,1))
8919 call matmat2(gtempd(1,1),EUgder(1,1,i+3),gtempd(1,1))
8920 s13d = (gtempd(1,1)+gtempd(2,2))*ss13
8928 gel_loc_turn6(i+2)=gel_loc_turn6(i+2)-0.5d0*ekont*(s12d+s13d)
8930 gel_loc_turn6(i+2)=gel_loc_turn6(i+2)-0.5d0*ekont*(s12d)
8932 C Derivatives in gamma(i+5)
8934 call transpose2(AEAderg(1,1,1),auxmatd(1,1))
8935 call matmat2(EUg(1,1,i+1),auxmatd(1,1),auxmatd(1,1))
8936 s1d = (auxmatd(1,1)+auxmatd(2,2))*ss1
8938 call matvec2(EUg(1,1,i+2),b1(1,l),vtemp1d(1))
8939 call matvec2(AEAderg(1,1,1),vtemp1d(1),vtemp1d(1))
8940 s2d = scalar2(b1(1,k),vtemp1d(1))
8942 call transpose2(AEA(1,1,2),atempd(1,1))
8943 call matmat2(atempd(1,1),EUgder(1,1,i+4),atempd(1,1))
8944 s8d = -(atempd(1,1)+atempd(2,2))*scalar2(cc(1,1,itl),vtemp2(1))
8946 call matvec2(auxmat(1,1),Ub2der(1,i+4),vtemp3d(1))
8947 s12d = scalar2(Ub2(1,i+2),vtemp3d(1))
8949 call matvec2(a_chuj(1,1,jj,i),Ub2der(1,i+4),vtemp4d(1))
8950 ss13d = scalar2(b1(1,k),vtemp4d(1))
8951 s13d = (gtemp(1,1)+gtemp(2,2))*ss13d
8959 gel_loc_turn6(i+3)=gel_loc_turn6(i+3)
8960 & -0.5d0*ekont*(s1d+s2d+s8d+s12d+s13d)
8962 gel_loc_turn6(i+3)=gel_loc_turn6(i+3)
8963 & -0.5d0*ekont*(s2d+s12d)
8965 C Cartesian derivatives
8970 call transpose2(AEAderx(1,1,lll,kkk,iii,1),auxmatd(1,1))
8971 call matmat2(EUg(1,1,i+1),auxmatd(1,1),auxmatd(1,1))
8972 s1d = (auxmatd(1,1)+auxmatd(2,2))*ss1
8974 call matvec2(EUg(1,1,i+2),b1(1,l),vtemp1(1))
8975 call matvec2(AEAderx(1,1,lll,kkk,iii,1),vtemp1(1),
8977 s2d = scalar2(b1(1,k),vtemp1d(1))
8979 call transpose2(AEAderx(1,1,lll,kkk,iii,2),atempd(1,1))
8980 call matmat2(atempd(1,1),EUg(1,1,i+4),atempd(1,1))
8981 s8d = -(atempd(1,1)+atempd(2,2))*
8982 & scalar2(cc(1,1,itl),vtemp2(1))
8984 call matmat2(EUg(1,1,i+3),AEAderx(1,1,lll,kkk,iii,2),
8986 call matvec2(auxmatd(1,1),Ub2(1,i+4),vtemp3d(1))
8987 s12d = scalar2(Ub2(1,i+2),vtemp3d(1))
8994 derx_turn(lll,kkk,iii) = derx_turn(lll,kkk,iii)
8997 derx_turn(lll,kkk,iii) = derx_turn(lll,kkk,iii)
9001 derx_turn(lll,kkk,3-iii) = derx_turn(lll,kkk,3-iii)
9002 & - 0.5d0*(s8d+s12d)
9004 derx_turn(lll,kkk,3-iii) = derx_turn(lll,kkk,3-iii)
9013 call transpose2(a_chuj_der(1,1,lll,kkk,kk,i+1),
9015 call matmat2(achuj_tempd(1,1),EUg(1,1,i+2),gtempd(1,1))
9016 call matmat2(gtempd(1,1),EUg(1,1,i+3),gtempd(1,1))
9017 s13d=(gtempd(1,1)+gtempd(2,2))*ss13
9018 derx_turn(lll,kkk,2) = derx_turn(lll,kkk,2)-0.5d0*s13d
9019 call matvec2(a_chuj_der(1,1,lll,kkk,jj,i),Ub2(1,i+4),
9021 ss13d = scalar2(b1(1,k),vtemp4d(1))
9022 s13d = (gtemp(1,1)+gtemp(2,2))*ss13d
9023 derx_turn(lll,kkk,1) = derx_turn(lll,kkk,1)-0.5d0*s13d
9027 cd write(iout,*) 'eel6_turn6',eel_turn6,' eel_turn6_num',
9028 cd & 16*eel_turn6_num
9030 if (j.lt.nres-1) then
9037 if (l.lt.nres-1) then
9045 cgrad ggg1(ll)=eel_turn6*g_contij(ll,1)
9046 cgrad ggg2(ll)=eel_turn6*g_contij(ll,2)
9047 cgrad ghalf=0.5d0*ggg1(ll)
9049 gturn6ij=eel_turn6*g_contij(ll,1)+ekont*derx_turn(ll,1,1)
9050 gturn6kl=eel_turn6*g_contij(ll,2)+ekont*derx_turn(ll,1,2)
9051 gcorr6_turn(ll,i)=gcorr6_turn(ll,i)!+ghalf
9052 & +ekont*derx_turn(ll,2,1)
9053 gcorr6_turn(ll,i+1)=gcorr6_turn(ll,i+1)+ekont*derx_turn(ll,3,1)
9054 gcorr6_turn(ll,j)=gcorr6_turn(ll,j)!+ghalf
9055 & +ekont*derx_turn(ll,4,1)
9056 gcorr6_turn(ll,j1)=gcorr6_turn(ll,j1)+ekont*derx_turn(ll,5,1)
9057 gcorr6_turn_long(ll,j)=gcorr6_turn_long(ll,j)+gturn6ij
9058 gcorr6_turn_long(ll,i)=gcorr6_turn_long(ll,i)-gturn6ij
9059 cgrad ghalf=0.5d0*ggg2(ll)
9061 gcorr6_turn(ll,k)=gcorr6_turn(ll,k)!+ghalf
9062 & +ekont*derx_turn(ll,2,2)
9063 gcorr6_turn(ll,k+1)=gcorr6_turn(ll,k+1)+ekont*derx_turn(ll,3,2)
9064 gcorr6_turn(ll,l)=gcorr6_turn(ll,l)!+ghalf
9065 & +ekont*derx_turn(ll,4,2)
9066 gcorr6_turn(ll,l1)=gcorr6_turn(ll,l1)+ekont*derx_turn(ll,5,2)
9067 gcorr6_turn_long(ll,l)=gcorr6_turn_long(ll,l)+gturn6kl
9068 gcorr6_turn_long(ll,k)=gcorr6_turn_long(ll,k)-gturn6kl
9073 cgrad gcorr6_turn(ll,m)=gcorr6_turn(ll,m)+ggg1(ll)
9078 cgrad gcorr6_turn(ll,m)=gcorr6_turn(ll,m)+ggg2(ll)
9084 cgrad gcorr6_turn(ll,m)=gcorr6_turn(ll,m)+ekont*derx_turn(ll,1,1)
9089 cgrad gcorr6_turn(ll,m)=gcorr6_turn(ll,m)+ekont*derx_turn(ll,1,2)
9093 cd write (2,*) iii,g_corr6_loc(iii)
9095 eello_turn6=ekont*eel_turn6
9096 cd write (2,*) 'ekont',ekont
9097 cd write (2,*) 'eel_turn6',ekont*eel_turn6
9101 C-----------------------------------------------------------------------------
9102 double precision function scalar(u,v)
9103 !DIR$ INLINEALWAYS scalar
9105 cDEC$ ATTRIBUTES FORCEINLINE::scalar
9108 double precision u(3),v(3)
9109 cd double precision sc
9117 scalar=u(1)*v(1)+u(2)*v(2)+u(3)*v(3)
9120 crc-------------------------------------------------
9121 SUBROUTINE MATVEC2(A1,V1,V2)
9122 !DIR$ INLINEALWAYS MATVEC2
9124 cDEC$ ATTRIBUTES FORCEINLINE::MATVEC2
9126 implicit real*8 (a-h,o-z)
9127 include 'DIMENSIONS'
9128 DIMENSION A1(2,2),V1(2),V2(2)
9132 c 3 VI=VI+A1(I,K)*V1(K)
9136 vaux1=a1(1,1)*v1(1)+a1(1,2)*v1(2)
9137 vaux2=a1(2,1)*v1(1)+a1(2,2)*v1(2)
9142 C---------------------------------------
9143 SUBROUTINE MATMAT2(A1,A2,A3)
9145 cDEC$ ATTRIBUTES FORCEINLINE::MATMAT2
9147 implicit real*8 (a-h,o-z)
9148 include 'DIMENSIONS'
9149 DIMENSION A1(2,2),A2(2,2),A3(2,2)
9150 c DIMENSION AI3(2,2)
9154 c A3IJ=A3IJ+A1(I,K)*A2(K,J)
9160 ai3_11=a1(1,1)*a2(1,1)+a1(1,2)*a2(2,1)
9161 ai3_12=a1(1,1)*a2(1,2)+a1(1,2)*a2(2,2)
9162 ai3_21=a1(2,1)*a2(1,1)+a1(2,2)*a2(2,1)
9163 ai3_22=a1(2,1)*a2(1,2)+a1(2,2)*a2(2,2)
9171 c-------------------------------------------------------------------------
9172 double precision function scalar2(u,v)
9173 !DIR$ INLINEALWAYS scalar2
9175 double precision u(2),v(2)
9178 scalar2=u(1)*v(1)+u(2)*v(2)
9182 C-----------------------------------------------------------------------------
9184 subroutine transpose2(a,at)
9185 !DIR$ INLINEALWAYS transpose2
9187 cDEC$ ATTRIBUTES FORCEINLINE::transpose2
9190 double precision a(2,2),at(2,2)
9197 c--------------------------------------------------------------------------
9198 subroutine transpose(n,a,at)
9201 double precision a(n,n),at(n,n)
9209 C---------------------------------------------------------------------------
9210 subroutine prodmat3(a1,a2,kk,transp,prod)
9211 !DIR$ INLINEALWAYS prodmat3
9213 cDEC$ ATTRIBUTES FORCEINLINE::prodmat3
9217 double precision a1(2,2),a2(2,2),a2t(2,2),kk(2,2),prod(2,2)
9219 crc double precision auxmat(2,2),prod_(2,2)
9222 crc call transpose2(kk(1,1),auxmat(1,1))
9223 crc call matmat2(a1(1,1),auxmat(1,1),auxmat(1,1))
9224 crc call matmat2(auxmat(1,1),a2(1,1),prod_(1,1))
9226 prod(1,1)=(a1(1,1)*kk(1,1)+a1(1,2)*kk(1,2))*a2(1,1)
9227 & +(a1(1,1)*kk(2,1)+a1(1,2)*kk(2,2))*a2(2,1)
9228 prod(1,2)=(a1(1,1)*kk(1,1)+a1(1,2)*kk(1,2))*a2(1,2)
9229 & +(a1(1,1)*kk(2,1)+a1(1,2)*kk(2,2))*a2(2,2)
9230 prod(2,1)=(a1(2,1)*kk(1,1)+a1(2,2)*kk(1,2))*a2(1,1)
9231 & +(a1(2,1)*kk(2,1)+a1(2,2)*kk(2,2))*a2(2,1)
9232 prod(2,2)=(a1(2,1)*kk(1,1)+a1(2,2)*kk(1,2))*a2(1,2)
9233 & +(a1(2,1)*kk(2,1)+a1(2,2)*kk(2,2))*a2(2,2)
9236 crc call matmat2(a1(1,1),kk(1,1),auxmat(1,1))
9237 crc call matmat2(auxmat(1,1),a2(1,1),prod_(1,1))
9239 prod(1,1)=(a1(1,1)*kk(1,1)+a1(1,2)*kk(2,1))*a2(1,1)
9240 & +(a1(1,1)*kk(1,2)+a1(1,2)*kk(2,2))*a2(2,1)
9241 prod(1,2)=(a1(1,1)*kk(1,1)+a1(1,2)*kk(2,1))*a2(1,2)
9242 & +(a1(1,1)*kk(1,2)+a1(1,2)*kk(2,2))*a2(2,2)
9243 prod(2,1)=(a1(2,1)*kk(1,1)+a1(2,2)*kk(2,1))*a2(1,1)
9244 & +(a1(2,1)*kk(1,2)+a1(2,2)*kk(2,2))*a2(2,1)
9245 prod(2,2)=(a1(2,1)*kk(1,1)+a1(2,2)*kk(2,1))*a2(1,2)
9246 & +(a1(2,1)*kk(1,2)+a1(2,2)*kk(2,2))*a2(2,2)
9249 c call transpose2(a2(1,1),a2t(1,1))
9252 crc print *,((prod_(i,j),i=1,2),j=1,2)
9253 crc print *,((prod(i,j),i=1,2),j=1,2)