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)
714 write (iout,*) "gloc_sc before reduce"
717 write (iout,*) i,j,gloc_sc(j,i,icg)
723 gloc_scbuf(j,i)=gloc_sc(j,i,icg)
727 call MPI_Barrier(FG_COMM,IERR)
728 time_barrier_g=time_barrier_g+MPI_Wtime()-time00
730 call MPI_Reduce(gradbufc(1,1),gradc(1,1,icg),3*nres,
731 & MPI_DOUBLE_PRECISION,MPI_SUM,king,FG_COMM,IERR)
732 call MPI_Reduce(gradbufx(1,1),gradx(1,1,icg),3*nres,
733 & MPI_DOUBLE_PRECISION,MPI_SUM,king,FG_COMM,IERR)
734 call MPI_Reduce(glocbuf(1),gloc(1,icg),4*nres,
735 & MPI_DOUBLE_PRECISION,MPI_SUM,king,FG_COMM,IERR)
736 time_reduce=time_reduce+MPI_Wtime()-time00
737 call MPI_Reduce(gloc_scbuf(1,1),gloc_sc(1,1,icg),3*nres,
738 & MPI_DOUBLE_PRECISION,MPI_SUM,king,FG_COMM,IERR)
739 time_reduce=time_reduce+MPI_Wtime()-time00
741 write (iout,*) "gloc_sc after reduce"
744 write (iout,*) i,j,gloc_sc(j,i,icg)
749 write (iout,*) "gloc after reduce"
751 write (iout,*) i,gloc(i,icg)
756 if (gnorm_check) then
758 c Compute the maximum elements of the gradient
768 gcorr3_turn_max=0.0d0
769 gcorr4_turn_max=0.0d0
772 gcorr6_turn_max=0.0d0
782 gvdwc_norm=dsqrt(scalar(gvdwc(1,i),gvdwc(1,i)))
783 if (gvdwc_norm.gt.gvdwc_max) gvdwc_max=gvdwc_norm
784 gvdwc_scp_norm=dsqrt(scalar(gvdwc_scp(1,i),gvdwc_scp(1,i)))
785 if (gvdwc_scp_norm.gt.gvdwc_scp_max)
786 & gvdwc_scp_max=gvdwc_scp_norm
787 gelc_norm=dsqrt(scalar(gelc(1,i),gelc(1,i)))
788 if (gelc_norm.gt.gelc_max) gelc_max=gelc_norm
789 gvdwpp_norm=dsqrt(scalar(gvdwpp(1,i),gvdwpp(1,i)))
790 if (gvdwpp_norm.gt.gvdwpp_max) gvdwpp_max=gvdwpp_norm
791 gradb_norm=dsqrt(scalar(gradb(1,i),gradb(1,i)))
792 if (gradb_norm.gt.gradb_max) gradb_max=gradb_norm
793 ghpbc_norm=dsqrt(scalar(ghpbc(1,i),ghpbc(1,i)))
794 if (ghpbc_norm.gt.ghpbc_max) ghpbc_max=ghpbc_norm
795 gradcorr_norm=dsqrt(scalar(gradcorr(1,i),gradcorr(1,i)))
796 if (gradcorr_norm.gt.gradcorr_max) gradcorr_max=gradcorr_norm
797 gel_loc_norm=dsqrt(scalar(gel_loc(1,i),gel_loc(1,i)))
798 if (gel_loc_norm.gt.gel_loc_max) gel_loc_max=gel_loc_norm
799 gcorr3_turn_norm=dsqrt(scalar(gcorr3_turn(1,i),
801 if (gcorr3_turn_norm.gt.gcorr3_turn_max)
802 & gcorr3_turn_max=gcorr3_turn_norm
803 gcorr4_turn_norm=dsqrt(scalar(gcorr4_turn(1,i),
805 if (gcorr4_turn_norm.gt.gcorr4_turn_max)
806 & gcorr4_turn_max=gcorr4_turn_norm
807 gradcorr5_norm=dsqrt(scalar(gradcorr5(1,i),gradcorr5(1,i)))
808 if (gradcorr5_norm.gt.gradcorr5_max)
809 & gradcorr5_max=gradcorr5_norm
810 gradcorr6_norm=dsqrt(scalar(gradcorr6(1,i),gradcorr6(1,i)))
811 if (gradcorr6_norm.gt.gradcorr6_max) gcorr6_max=gradcorr6_norm
812 gcorr6_turn_norm=dsqrt(scalar(gcorr6_turn(1,i),
814 if (gcorr6_turn_norm.gt.gcorr6_turn_max)
815 & gcorr6_turn_max=gcorr6_turn_norm
816 gsccorr_norm=dsqrt(scalar(gsccorc(1,i),gsccorc(1,i)))
817 if (gsccorr_norm.gt.gsccorr_max) gsccorr_max=gsccorr_norm
818 gscloc_norm=dsqrt(scalar(gscloc(1,i),gscloc(1,i)))
819 if (gscloc_norm.gt.gscloc_max) gscloc_max=gscloc_norm
820 gvdwx_norm=dsqrt(scalar(gvdwx(1,i),gvdwx(1,i)))
821 if (gvdwx_norm.gt.gvdwx_max) gvdwx_max=gvdwx_norm
822 gradx_scp_norm=dsqrt(scalar(gradx_scp(1,i),gradx_scp(1,i)))
823 if (gradx_scp_norm.gt.gradx_scp_max)
824 & gradx_scp_max=gradx_scp_norm
825 ghpbx_norm=dsqrt(scalar(ghpbx(1,i),ghpbx(1,i)))
826 if (ghpbx_norm.gt.ghpbx_max) ghpbx_max=ghpbx_norm
827 gradxorr_norm=dsqrt(scalar(gradxorr(1,i),gradxorr(1,i)))
828 if (gradxorr_norm.gt.gradxorr_max) gradxorr_max=gradxorr_norm
829 gsccorrx_norm=dsqrt(scalar(gsccorx(1,i),gsccorx(1,i)))
830 if (gsccorrx_norm.gt.gsccorrx_max) gsccorrx_max=gsccorrx_norm
831 gsclocx_norm=dsqrt(scalar(gsclocx(1,i),gsclocx(1,i)))
832 if (gsclocx_norm.gt.gsclocx_max) gsclocx_max=gsclocx_norm
836 open(istat,file=statname,position="append")
838 open(istat,file=statname,access="append")
840 write (istat,'(1h#,21f10.2)') gvdwc_max,gvdwc_scp_max,
841 & gelc_max,gvdwpp_max,gradb_max,ghpbc_max,
842 & gradcorr_max,gel_loc_max,gcorr3_turn_max,gcorr4_turn_max,
843 & gradcorr5_max,gradcorr6_max,gcorr6_turn_max,gsccorc_max,
844 & gscloc_max,gvdwx_max,gradx_scp_max,ghpbx_max,gradxorr_max,
845 & gsccorx_max,gsclocx_max
847 if (gvdwc_max.gt.1.0d4) then
848 write (iout,*) "gvdwc gvdwx gradb gradbx"
850 write(iout,'(i5,4(3f10.2,5x))') i,(gvdwc(j,i),gvdwx(j,i),
851 & gradb(j,i),gradbx(j,i),j=1,3)
853 call pdbout(0.0d0,'cipiszcze',iout)
859 write (iout,*) "gradc gradx gloc"
861 write (iout,'(i5,3f10.5,5x,3f10.5,5x,f10.5)')
862 & i,(gradc(j,i,icg),j=1,3),(gradx(j,i,icg),j=1,3),gloc(i,icg)
866 time_sumgradient=time_sumgradient+MPI_Wtime()-time01
870 c-------------------------------------------------------------------------------
871 subroutine rescale_weights(t_bath)
872 implicit real*8 (a-h,o-z)
874 include 'COMMON.IOUNITS'
875 include 'COMMON.FFIELD'
876 include 'COMMON.SBRIDGE'
877 double precision kfac /2.4d0/
878 double precision x,x2,x3,x4,x5,licznik /1.12692801104297249644/
880 c facT=2*temp0/(t_bath+temp0)
881 if (rescale_mode.eq.0) then
887 else if (rescale_mode.eq.1) then
888 facT=kfac/(kfac-1.0d0+t_bath/temp0)
889 facT2=kfac**2/(kfac**2-1.0d0+(t_bath/temp0)**2)
890 facT3=kfac**3/(kfac**3-1.0d0+(t_bath/temp0)**3)
891 facT4=kfac**4/(kfac**4-1.0d0+(t_bath/temp0)**4)
892 facT5=kfac**5/(kfac**5-1.0d0+(t_bath/temp0)**5)
893 else if (rescale_mode.eq.2) then
899 facT=licznik/dlog(dexp(x)+dexp(-x))
900 facT2=licznik/dlog(dexp(x2)+dexp(-x2))
901 facT3=licznik/dlog(dexp(x3)+dexp(-x3))
902 facT4=licznik/dlog(dexp(x4)+dexp(-x4))
903 facT5=licznik/dlog(dexp(x5)+dexp(-x5))
905 write (iout,*) "Wrong RESCALE_MODE",rescale_mode
906 write (*,*) "Wrong RESCALE_MODE",rescale_mode
908 call MPI_Finalize(MPI_COMM_WORLD,IERROR)
912 welec=weights(3)*fact
913 wcorr=weights(4)*fact3
914 wcorr5=weights(5)*fact4
915 wcorr6=weights(6)*fact5
916 wel_loc=weights(7)*fact2
917 wturn3=weights(8)*fact2
918 wturn4=weights(9)*fact3
919 wturn6=weights(10)*fact5
920 wtor=weights(13)*fact
921 wtor_d=weights(14)*fact2
922 wsccor=weights(21)*fact
926 C------------------------------------------------------------------------
927 subroutine enerprint(energia)
928 implicit real*8 (a-h,o-z)
930 include 'COMMON.IOUNITS'
931 include 'COMMON.FFIELD'
932 include 'COMMON.SBRIDGE'
934 double precision energia(0:n_ene)
939 evdw2=energia(2)+energia(18)
951 eello_turn3=energia(8)
952 eello_turn4=energia(9)
953 eello_turn6=energia(10)
959 edihcnstr=energia(19)
964 write (iout,10) evdw,wsc,evdw2,wscp,ees,welec,evdw1,wvdwpp,
965 & estr,wbond,ebe,wang,
966 & escloc,wscloc,etors,wtor,etors_d,wtor_d,ehpb,wstrain,
968 & ecorr5,wcorr5,ecorr6,wcorr6,eel_loc,wel_loc,eello_turn3,wturn3,
969 & eello_turn4,wturn4,eello_turn6,wturn6,esccor,wsccor,
972 10 format (/'Virtual-chain energies:'//
973 & 'EVDW= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC-SC)'/
974 & 'EVDW2= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC-p)'/
975 & 'EES= ',1pE16.6,' WEIGHT=',1pD16.6,' (p-p)'/
976 & 'EVDWPP=',1pE16.6,' WEIGHT=',1pD16.6,' (p-p VDW)'/
977 & 'ESTR= ',1pE16.6,' WEIGHT=',1pD16.6,' (stretching)'/
978 & 'EBE= ',1pE16.6,' WEIGHT=',1pD16.6,' (bending)'/
979 & 'ESC= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC local)'/
980 & 'ETORS= ',1pE16.6,' WEIGHT=',1pD16.6,' (torsional)'/
981 & 'ETORSD=',1pE16.6,' WEIGHT=',1pD16.6,' (double torsional)'/
982 & 'EHBP= ',1pE16.6,' WEIGHT=',1pD16.6,
983 & ' (SS bridges & dist. cnstr.)'/
984 & 'ECORR4=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
985 & 'ECORR5=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
986 & 'ECORR6=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
987 & 'EELLO= ',1pE16.6,' WEIGHT=',1pD16.6,' (electrostatic-local)'/
988 & 'ETURN3=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 3rd order)'/
989 & 'ETURN4=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 4th order)'/
990 & 'ETURN6=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 6th order)'/
991 & 'ESCCOR=',1pE16.6,' WEIGHT=',1pD16.6,' (backbone-rotamer corr)'/
992 & 'EDIHC= ',1pE16.6,' (dihedral angle constraints)'/
993 & 'ESS= ',1pE16.6,' (disulfide-bridge intrinsic energy)'/
994 & 'UCONST= ',1pE16.6,' (Constraint energy)'/
995 & 'ETOT= ',1pE16.6,' (total)')
997 write (iout,10) evdw,wsc,evdw2,wscp,ees,welec,
998 & estr,wbond,ebe,wang,
999 & escloc,wscloc,etors,wtor,etors_d,wtor_d,ehpb,wstrain,
1001 & ecorr5,wcorr5,ecorr6,wcorr6,eel_loc,wel_loc,eello_turn3,wturn3,
1002 & eello_turn4,wturn4,eello_turn6,wturn6,esccor,wsccro,edihcnstr,
1003 & ebr*nss,Uconst,etot
1004 10 format (/'Virtual-chain energies:'//
1005 & 'EVDW= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC-SC)'/
1006 & 'EVDW2= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC-p)'/
1007 & 'EES= ',1pE16.6,' WEIGHT=',1pD16.6,' (p-p)'/
1008 & 'ESTR= ',1pE16.6,' WEIGHT=',1pD16.6,' (stretching)'/
1009 & 'EBE= ',1pE16.6,' WEIGHT=',1pD16.6,' (bending)'/
1010 & 'ESC= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC local)'/
1011 & 'ETORS= ',1pE16.6,' WEIGHT=',1pD16.6,' (torsional)'/
1012 & 'ETORSD=',1pE16.6,' WEIGHT=',1pD16.6,' (double torsional)'/
1013 & 'EHBP= ',1pE16.6,' WEIGHT=',1pD16.6,
1014 & ' (SS bridges & dist. cnstr.)'/
1015 & 'ECORR4=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
1016 & 'ECORR5=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
1017 & 'ECORR6=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
1018 & 'EELLO= ',1pE16.6,' WEIGHT=',1pD16.6,' (electrostatic-local)'/
1019 & 'ETURN3=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 3rd order)'/
1020 & 'ETURN4=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 4th order)'/
1021 & 'ETURN6=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 6th order)'/
1022 & 'ESCCOR=',1pE16.6,' WEIGHT=',1pD16.6,' (backbone-rotamer corr)'/
1023 & 'EDIHC= ',1pE16.6,' (dihedral angle constraints)'/
1024 & 'ESS= ',1pE16.6,' (disulfide-bridge intrinsic energy)'/
1025 & 'UCONST=',1pE16.6,' (Constraint energy)'/
1026 & 'ETOT= ',1pE16.6,' (total)')
1030 C-----------------------------------------------------------------------
1031 subroutine elj(evdw)
1033 C This subroutine calculates the interaction energy of nonbonded side chains
1034 C assuming the LJ potential of interaction.
1036 implicit real*8 (a-h,o-z)
1037 include 'DIMENSIONS'
1038 parameter (accur=1.0d-10)
1039 include 'COMMON.GEO'
1040 include 'COMMON.VAR'
1041 include 'COMMON.LOCAL'
1042 include 'COMMON.CHAIN'
1043 include 'COMMON.DERIV'
1044 include 'COMMON.INTERACT'
1045 include 'COMMON.TORSION'
1046 include 'COMMON.SBRIDGE'
1047 include 'COMMON.NAMES'
1048 include 'COMMON.IOUNITS'
1049 include 'COMMON.CONTACTS'
1051 c write(iout,*)'Entering ELJ nnt=',nnt,' nct=',nct,' expon=',expon
1053 do i=iatsc_s,iatsc_e
1054 itypi=iabs(itype(i))
1055 if (itypi.eq.ntyp1) cycle
1056 itypi1=iabs(itype(i+1))
1063 C Calculate SC interaction energy.
1065 do iint=1,nint_gr(i)
1066 cd write (iout,*) 'i=',i,' iint=',iint,' istart=',istart(i,iint),
1067 cd & 'iend=',iend(i,iint)
1068 do j=istart(i,iint),iend(i,iint)
1069 itypj=iabs(itype(j))
1070 if (itypj.eq.ntyp1) cycle
1074 C Change 12/1/95 to calculate four-body interactions
1075 rij=xj*xj+yj*yj+zj*zj
1077 c write (iout,*)'i=',i,' j=',j,' itypi=',itypi,' itypj=',itypj
1078 eps0ij=eps(itypi,itypj)
1080 e1=fac*fac*aa(itypi,itypj)
1081 e2=fac*bb(itypi,itypj)
1083 cd sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
1084 cd epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
1085 cd write (iout,'(2(a3,i3,2x),6(1pd12.4)/2(3(1pd12.4),5x)/)')
1086 cd & restyp(itypi),i,restyp(itypj),j,aa(itypi,itypj),
1087 cd & bb(itypi,itypj),1.0D0/dsqrt(rrij),evdwij,epsi,sigm,
1088 cd & (c(k,i),k=1,3),(c(k,j),k=1,3)
1091 C Calculate the components of the gradient in DC and X
1093 fac=-rrij*(e1+evdwij)
1098 gvdwx(k,i)=gvdwx(k,i)-gg(k)
1099 gvdwx(k,j)=gvdwx(k,j)+gg(k)
1100 gvdwc(k,i)=gvdwc(k,i)-gg(k)
1101 gvdwc(k,j)=gvdwc(k,j)+gg(k)
1105 cgrad gvdwc(l,k)=gvdwc(l,k)+gg(l)
1109 C 12/1/95, revised on 5/20/97
1111 C Calculate the contact function. The ith column of the array JCONT will
1112 C contain the numbers of atoms that make contacts with the atom I (of numbers
1113 C greater than I). The arrays FACONT and GACONT will contain the values of
1114 C the contact function and its derivative.
1116 C Uncomment next line, if the correlation interactions include EVDW explicitly.
1117 c if (j.gt.i+1 .and. evdwij.le.0.0D0) then
1118 C Uncomment next line, if the correlation interactions are contact function only
1119 if (j.gt.i+1.and. eps0ij.gt.0.0D0) then
1121 sigij=sigma(itypi,itypj)
1122 r0ij=rs0(itypi,itypj)
1124 C Check whether the SC's are not too far to make a contact.
1127 call gcont(rij,rcut,1.0d0,0.2d0*rcut,fcont,fprimcont)
1128 C Add a new contact, if the SC's are close enough, but not too close (r<sigma).
1130 if (fcont.gt.0.0D0) then
1131 C If the SC-SC distance if close to sigma, apply spline.
1132 cAdam call gcont(-rij,-1.03d0*sigij,2.0d0*sigij,1.0d0,
1133 cAdam & fcont1,fprimcont1)
1134 cAdam fcont1=1.0d0-fcont1
1135 cAdam if (fcont1.gt.0.0d0) then
1136 cAdam fprimcont=fprimcont*fcont1+fcont*fprimcont1
1137 cAdam fcont=fcont*fcont1
1139 C Uncomment following 4 lines to have the geometric average of the epsilon0's
1140 cga eps0ij=1.0d0/dsqrt(eps0ij)
1142 cga gg(k)=gg(k)*eps0ij
1144 cga eps0ij=-evdwij*eps0ij
1145 C Uncomment for AL's type of SC correlation interactions.
1146 cadam eps0ij=-evdwij
1147 num_conti=num_conti+1
1148 jcont(num_conti,i)=j
1149 facont(num_conti,i)=fcont*eps0ij
1150 fprimcont=eps0ij*fprimcont/rij
1152 cAdam gacont(1,num_conti,i)=-fprimcont*xj+fcont*gg(1)
1153 cAdam gacont(2,num_conti,i)=-fprimcont*yj+fcont*gg(2)
1154 cAdam gacont(3,num_conti,i)=-fprimcont*zj+fcont*gg(3)
1155 C Uncomment following 3 lines for Skolnick's type of SC correlation.
1156 gacont(1,num_conti,i)=-fprimcont*xj
1157 gacont(2,num_conti,i)=-fprimcont*yj
1158 gacont(3,num_conti,i)=-fprimcont*zj
1159 cd write (iout,'(2i5,2f10.5)') i,j,rij,facont(num_conti,i)
1160 cd write (iout,'(2i3,3f10.5)')
1161 cd & i,j,(gacont(kk,num_conti,i),kk=1,3)
1167 num_cont(i)=num_conti
1171 gvdwc(j,i)=expon*gvdwc(j,i)
1172 gvdwx(j,i)=expon*gvdwx(j,i)
1175 C******************************************************************************
1179 C To save time, the factor of EXPON has been extracted from ALL components
1180 C of GVDWC and GRADX. Remember to multiply them by this factor before further
1183 C******************************************************************************
1186 C-----------------------------------------------------------------------------
1187 subroutine eljk(evdw)
1189 C This subroutine calculates the interaction energy of nonbonded side chains
1190 C assuming the LJK potential of interaction.
1192 implicit real*8 (a-h,o-z)
1193 include 'DIMENSIONS'
1194 include 'COMMON.GEO'
1195 include 'COMMON.VAR'
1196 include 'COMMON.LOCAL'
1197 include 'COMMON.CHAIN'
1198 include 'COMMON.DERIV'
1199 include 'COMMON.INTERACT'
1200 include 'COMMON.IOUNITS'
1201 include 'COMMON.NAMES'
1204 c print *,'Entering ELJK nnt=',nnt,' nct=',nct,' expon=',expon
1206 do i=iatsc_s,iatsc_e
1207 itypi=iabs(itype(i))
1208 if (itypi.eq.ntyp1) cycle
1209 itypi1=iabs(itype(i+1))
1214 C Calculate SC interaction energy.
1216 do iint=1,nint_gr(i)
1217 do j=istart(i,iint),iend(i,iint)
1218 itypj=iabs(itype(j))
1219 if (itypj.eq.ntyp1) cycle
1223 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
1224 fac_augm=rrij**expon
1225 e_augm=augm(itypi,itypj)*fac_augm
1226 r_inv_ij=dsqrt(rrij)
1228 r_shift_inv=1.0D0/(rij+r0(itypi,itypj)-sigma(itypi,itypj))
1229 fac=r_shift_inv**expon
1230 e1=fac*fac*aa(itypi,itypj)
1231 e2=fac*bb(itypi,itypj)
1233 cd sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
1234 cd epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
1235 cd write (iout,'(2(a3,i3,2x),8(1pd12.4)/2(3(1pd12.4),5x)/)')
1236 cd & restyp(itypi),i,restyp(itypj),j,aa(itypi,itypj),
1237 cd & bb(itypi,itypj),augm(itypi,itypj),epsi,sigm,
1238 cd & sigma(itypi,itypj),1.0D0/dsqrt(rrij),evdwij,
1239 cd & (c(k,i),k=1,3),(c(k,j),k=1,3)
1242 C Calculate the components of the gradient in DC and X
1244 fac=-2.0D0*rrij*e_augm-r_inv_ij*r_shift_inv*(e1+e1+e2)
1249 gvdwx(k,i)=gvdwx(k,i)-gg(k)
1250 gvdwx(k,j)=gvdwx(k,j)+gg(k)
1251 gvdwc(k,i)=gvdwc(k,i)-gg(k)
1252 gvdwc(k,j)=gvdwc(k,j)+gg(k)
1256 cgrad gvdwc(l,k)=gvdwc(l,k)+gg(l)
1264 gvdwc(j,i)=expon*gvdwc(j,i)
1265 gvdwx(j,i)=expon*gvdwx(j,i)
1270 C-----------------------------------------------------------------------------
1271 subroutine ebp(evdw)
1273 C This subroutine calculates the interaction energy of nonbonded side chains
1274 C assuming the Berne-Pechukas potential of interaction.
1276 implicit real*8 (a-h,o-z)
1277 include 'DIMENSIONS'
1278 include 'COMMON.GEO'
1279 include 'COMMON.VAR'
1280 include 'COMMON.LOCAL'
1281 include 'COMMON.CHAIN'
1282 include 'COMMON.DERIV'
1283 include 'COMMON.NAMES'
1284 include 'COMMON.INTERACT'
1285 include 'COMMON.IOUNITS'
1286 include 'COMMON.CALC'
1287 common /srutu/ icall
1288 c double precision rrsave(maxdim)
1291 c print *,'Entering EBP nnt=',nnt,' nct=',nct,' expon=',expon
1293 c if (icall.eq.0) then
1299 do i=iatsc_s,iatsc_e
1300 itypi=iabs(itype(i))
1301 if (itypi.eq.ntyp1) cycle
1302 itypi1=iabs(itype(i+1))
1306 dxi=dc_norm(1,nres+i)
1307 dyi=dc_norm(2,nres+i)
1308 dzi=dc_norm(3,nres+i)
1309 c dsci_inv=dsc_inv(itypi)
1310 dsci_inv=vbld_inv(i+nres)
1312 C Calculate SC interaction energy.
1314 do iint=1,nint_gr(i)
1315 do j=istart(i,iint),iend(i,iint)
1317 itypj=iabs(itype(j))
1318 if (itypj.eq.ntyp1) cycle
1319 c dscj_inv=dsc_inv(itypj)
1320 dscj_inv=vbld_inv(j+nres)
1321 chi1=chi(itypi,itypj)
1322 chi2=chi(itypj,itypi)
1329 alf12=0.5D0*(alf1+alf2)
1330 C For diagnostics only!!!
1343 dxj=dc_norm(1,nres+j)
1344 dyj=dc_norm(2,nres+j)
1345 dzj=dc_norm(3,nres+j)
1346 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
1347 cd if (icall.eq.0) then
1353 C Calculate the angle-dependent terms of energy & contributions to derivatives.
1355 C Calculate whole angle-dependent part of epsilon and contributions
1356 C to its derivatives
1357 fac=(rrij*sigsq)**expon2
1358 e1=fac*fac*aa(itypi,itypj)
1359 e2=fac*bb(itypi,itypj)
1360 evdwij=eps1*eps2rt*eps3rt*(e1+e2)
1361 eps2der=evdwij*eps3rt
1362 eps3der=evdwij*eps2rt
1363 evdwij=evdwij*eps2rt*eps3rt
1366 sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
1367 epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
1368 cd write (iout,'(2(a3,i3,2x),15(0pf7.3))')
1369 cd & restyp(itypi),i,restyp(itypj),j,
1370 cd & epsi,sigm,chi1,chi2,chip1,chip2,
1371 cd & eps1,eps2rt**2,eps3rt**2,1.0D0/dsqrt(sigsq),
1372 cd & om1,om2,om12,1.0D0/dsqrt(rrij),
1375 C Calculate gradient components.
1376 e1=e1*eps1*eps2rt**2*eps3rt**2
1377 fac=-expon*(e1+evdwij)
1380 C Calculate radial part of the gradient
1384 C Calculate the angular part of the gradient and sum add the contributions
1385 C to the appropriate components of the Cartesian gradient.
1393 C-----------------------------------------------------------------------------
1394 subroutine egb(evdw)
1396 C This subroutine calculates the interaction energy of nonbonded side chains
1397 C assuming the Gay-Berne potential of interaction.
1399 implicit real*8 (a-h,o-z)
1400 include 'DIMENSIONS'
1401 include 'COMMON.GEO'
1402 include 'COMMON.VAR'
1403 include 'COMMON.LOCAL'
1404 include 'COMMON.CHAIN'
1405 include 'COMMON.DERIV'
1406 include 'COMMON.NAMES'
1407 include 'COMMON.INTERACT'
1408 include 'COMMON.IOUNITS'
1409 include 'COMMON.CALC'
1410 include 'COMMON.CONTROL'
1413 ccccc energy_dec=.false.
1414 c print *,'Entering EGB nnt=',nnt,' nct=',nct,' expon=',expon
1417 c if (icall.eq.0) lprn=.false.
1419 do i=iatsc_s,iatsc_e
1420 itypi=iabs(itype(i))
1421 if (itypi.eq.ntyp1) cycle
1422 itypi1=iabs(itype(i+1))
1426 dxi=dc_norm(1,nres+i)
1427 dyi=dc_norm(2,nres+i)
1428 dzi=dc_norm(3,nres+i)
1429 c dsci_inv=dsc_inv(itypi)
1430 dsci_inv=vbld_inv(i+nres)
1431 c write (iout,*) "i",i,dsc_inv(itypi),dsci_inv,1.0d0/vbld(i+nres)
1432 c write (iout,*) "dcnori",dxi*dxi+dyi*dyi+dzi*dzi
1434 C Calculate SC interaction energy.
1436 do iint=1,nint_gr(i)
1437 do j=istart(i,iint),iend(i,iint)
1439 itypj=iabs(itype(j))
1440 if (itypj.eq.ntyp1) cycle
1441 c dscj_inv=dsc_inv(itypj)
1442 dscj_inv=vbld_inv(j+nres)
1443 c write (iout,*) "j",j,dsc_inv(itypj),dscj_inv,
1444 c & 1.0d0/vbld(j+nres)
1445 c write (iout,*) "i",i," j", j," itype",itype(i),itype(j)
1446 sig0ij=sigma(itypi,itypj)
1447 chi1=chi(itypi,itypj)
1448 chi2=chi(itypj,itypi)
1455 alf12=0.5D0*(alf1+alf2)
1456 C For diagnostics only!!!
1469 dxj=dc_norm(1,nres+j)
1470 dyj=dc_norm(2,nres+j)
1471 dzj=dc_norm(3,nres+j)
1472 c write (iout,*) "dcnorj",dxi*dxi+dyi*dyi+dzi*dzi
1473 c write (iout,*) "j",j," dc_norm",
1474 c & dc_norm(1,nres+j),dc_norm(2,nres+j),dc_norm(3,nres+j)
1475 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
1477 C Calculate angle-dependent terms of energy and contributions to their
1481 sig=sig0ij*dsqrt(sigsq)
1482 rij_shift=1.0D0/rij-sig+sig0ij
1483 c for diagnostics; uncomment
1484 c rij_shift=1.2*sig0ij
1485 C I hate to put IF's in the loops, but here don't have another choice!!!!
1486 if (rij_shift.le.0.0D0) then
1488 cd write (iout,'(2(a3,i3,2x),17(0pf7.3))')
1489 cd & restyp(itypi),i,restyp(itypj),j,
1490 cd & rij_shift,1.0D0/rij,sig,sig0ij,sigsq,1-dsqrt(sigsq)
1494 c---------------------------------------------------------------
1495 rij_shift=1.0D0/rij_shift
1496 fac=rij_shift**expon
1497 e1=fac*fac*aa(itypi,itypj)
1498 e2=fac*bb(itypi,itypj)
1499 evdwij=eps1*eps2rt*eps3rt*(e1+e2)
1500 eps2der=evdwij*eps3rt
1501 eps3der=evdwij*eps2rt
1502 c write (iout,*) "sigsq",sigsq," sig",sig," eps2rt",eps2rt,
1503 c & " eps3rt",eps3rt," eps1",eps1," e1",e1," e2",e2
1504 evdwij=evdwij*eps2rt*eps3rt
1507 sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
1508 epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
1509 write (iout,'(2(a3,i3,2x),17(0pf7.3))')
1510 & restyp(itypi),i,restyp(itypj),j,
1511 & epsi,sigm,chi1,chi2,chip1,chip2,
1512 & eps1,eps2rt**2,eps3rt**2,sig,sig0ij,
1513 & om1,om2,om12,1.0D0/rij,1.0D0/rij_shift,
1517 if (energy_dec) write (iout,'(a6,2i5,0pf7.3)')
1520 C Calculate gradient components.
1521 e1=e1*eps1*eps2rt**2*eps3rt**2
1522 fac=-expon*(e1+evdwij)*rij_shift
1526 C Calculate the radial part of the gradient
1530 C Calculate angular part of the gradient.
1535 c write (iout,*) "Number of loop steps in EGB:",ind
1536 cccc energy_dec=.false.
1539 C-----------------------------------------------------------------------------
1540 subroutine egbv(evdw)
1542 C This subroutine calculates the interaction energy of nonbonded side chains
1543 C assuming the Gay-Berne-Vorobjev potential of interaction.
1545 implicit real*8 (a-h,o-z)
1546 include 'DIMENSIONS'
1547 include 'COMMON.GEO'
1548 include 'COMMON.VAR'
1549 include 'COMMON.LOCAL'
1550 include 'COMMON.CHAIN'
1551 include 'COMMON.DERIV'
1552 include 'COMMON.NAMES'
1553 include 'COMMON.INTERACT'
1554 include 'COMMON.IOUNITS'
1555 include 'COMMON.CALC'
1556 common /srutu/ icall
1559 c print *,'Entering EGB nnt=',nnt,' nct=',nct,' expon=',expon
1562 c if (icall.eq.0) lprn=.true.
1564 do i=iatsc_s,iatsc_e
1565 itypi=iabs(itype(i))
1566 if (itypi.eq.ntyp1) cycle
1567 itypi1=iabs(itype(i+1))
1571 dxi=dc_norm(1,nres+i)
1572 dyi=dc_norm(2,nres+i)
1573 dzi=dc_norm(3,nres+i)
1574 c dsci_inv=dsc_inv(itypi)
1575 dsci_inv=vbld_inv(i+nres)
1577 C Calculate SC interaction energy.
1579 do iint=1,nint_gr(i)
1580 do j=istart(i,iint),iend(i,iint)
1582 itypj=iabs(itype(j))
1583 if (itypj.eq.ntyp1) cycle
1584 c dscj_inv=dsc_inv(itypj)
1585 dscj_inv=vbld_inv(j+nres)
1586 sig0ij=sigma(itypi,itypj)
1587 r0ij=r0(itypi,itypj)
1588 chi1=chi(itypi,itypj)
1589 chi2=chi(itypj,itypi)
1596 alf12=0.5D0*(alf1+alf2)
1597 C For diagnostics only!!!
1610 dxj=dc_norm(1,nres+j)
1611 dyj=dc_norm(2,nres+j)
1612 dzj=dc_norm(3,nres+j)
1613 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
1615 C Calculate angle-dependent terms of energy and contributions to their
1619 sig=sig0ij*dsqrt(sigsq)
1620 rij_shift=1.0D0/rij-sig+r0ij
1621 C I hate to put IF's in the loops, but here don't have another choice!!!!
1622 if (rij_shift.le.0.0D0) then
1627 c---------------------------------------------------------------
1628 rij_shift=1.0D0/rij_shift
1629 fac=rij_shift**expon
1630 e1=fac*fac*aa(itypi,itypj)
1631 e2=fac*bb(itypi,itypj)
1632 evdwij=eps1*eps2rt*eps3rt*(e1+e2)
1633 eps2der=evdwij*eps3rt
1634 eps3der=evdwij*eps2rt
1635 fac_augm=rrij**expon
1636 e_augm=augm(itypi,itypj)*fac_augm
1637 evdwij=evdwij*eps2rt*eps3rt
1638 evdw=evdw+evdwij+e_augm
1640 sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
1641 epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
1642 write (iout,'(2(a3,i3,2x),17(0pf7.3))')
1643 & restyp(itypi),i,restyp(itypj),j,
1644 & epsi,sigm,sig,(augm(itypi,itypj)/epsi)**(1.0D0/12.0D0),
1645 & chi1,chi2,chip1,chip2,
1646 & eps1,eps2rt**2,eps3rt**2,
1647 & om1,om2,om12,1.0D0/rij,1.0D0/rij_shift,
1650 C Calculate gradient components.
1651 e1=e1*eps1*eps2rt**2*eps3rt**2
1652 fac=-expon*(e1+evdwij)*rij_shift
1654 fac=rij*fac-2*expon*rrij*e_augm
1655 C Calculate the radial part of the gradient
1659 C Calculate angular part of the gradient.
1665 C-----------------------------------------------------------------------------
1666 subroutine sc_angular
1667 C Calculate eps1,eps2,eps3,sigma, and parts of their derivatives in om1,om2,
1668 C om12. Called by ebp, egb, and egbv.
1670 include 'COMMON.CALC'
1671 include 'COMMON.IOUNITS'
1675 om1=dxi*erij(1)+dyi*erij(2)+dzi*erij(3)
1676 om2=dxj*erij(1)+dyj*erij(2)+dzj*erij(3)
1677 om12=dxi*dxj+dyi*dyj+dzi*dzj
1679 C Calculate eps1(om12) and its derivative in om12
1680 faceps1=1.0D0-om12*chiom12
1681 faceps1_inv=1.0D0/faceps1
1682 eps1=dsqrt(faceps1_inv)
1683 C Following variable is eps1*deps1/dom12
1684 eps1_om12=faceps1_inv*chiom12
1689 c write (iout,*) "om12",om12," eps1",eps1
1690 C Calculate sigma(om1,om2,om12) and the derivatives of sigma**2 in om1,om2,
1695 facsig=om1*chiom1+om2*chiom2-2.0D0*om1om2*chiom12
1696 sigsq=1.0D0-facsig*faceps1_inv
1697 sigsq_om1=(chiom1-chiom12*om2)*faceps1_inv
1698 sigsq_om2=(chiom2-chiom12*om1)*faceps1_inv
1699 sigsq_om12=-chi12*(om1om2*faceps1-om12*facsig)*faceps1_inv**2
1705 c write (iout,*) "chiom1",chiom1," chiom2",chiom2," chiom12",chiom12
1706 c write (iout,*) "faceps1",faceps1," faceps1_inv",faceps1_inv,
1708 C Calculate eps2 and its derivatives in om1, om2, and om12.
1711 chipom12=chip12*om12
1712 facp=1.0D0-om12*chipom12
1714 facp1=om1*chipom1+om2*chipom2-2.0D0*om1om2*chipom12
1715 c write (iout,*) "chipom1",chipom1," chipom2",chipom2,
1716 c & " chipom12",chipom12," facp",facp," facp_inv",facp_inv
1717 C Following variable is the square root of eps2
1718 eps2rt=1.0D0-facp1*facp_inv
1719 C Following three variables are the derivatives of the square root of eps
1720 C in om1, om2, and om12.
1721 eps2rt_om1=-4.0D0*(chipom1-chipom12*om2)*facp_inv
1722 eps2rt_om2=-4.0D0*(chipom2-chipom12*om1)*facp_inv
1723 eps2rt_om12=4.0D0*chip12*(om1om2*facp-om12*facp1)*facp_inv**2
1724 C Evaluate the "asymmetric" factor in the VDW constant, eps3
1725 eps3rt=1.0D0-alf1*om1+alf2*om2-alf12*om12
1726 c write (iout,*) "eps2rt",eps2rt," eps3rt",eps3rt
1727 c write (iout,*) "eps2rt_om1",eps2rt_om1," eps2rt_om2",eps2rt_om2,
1728 c & " eps2rt_om12",eps2rt_om12
1729 C Calculate whole angle-dependent part of epsilon and contributions
1730 C to its derivatives
1733 C----------------------------------------------------------------------------
1735 implicit real*8 (a-h,o-z)
1736 include 'DIMENSIONS'
1737 include 'COMMON.CHAIN'
1738 include 'COMMON.DERIV'
1739 include 'COMMON.CALC'
1740 include 'COMMON.IOUNITS'
1741 double precision dcosom1(3),dcosom2(3)
1742 eom1=eps2der*eps2rt_om1-2.0D0*alf1*eps3der+sigder*sigsq_om1
1743 eom2=eps2der*eps2rt_om2+2.0D0*alf2*eps3der+sigder*sigsq_om2
1744 eom12=evdwij*eps1_om12+eps2der*eps2rt_om12
1745 & -2.0D0*alf12*eps3der+sigder*sigsq_om12
1749 c eom12=evdwij*eps1_om12
1751 c write (iout,*) "eps2der",eps2der," eps3der",eps3der,
1752 c & " sigder",sigder
1753 c write (iout,*) "eps1_om12",eps1_om12," eps2rt_om12",eps2rt_om12
1754 c write (iout,*) "eom1",eom1," eom2",eom2," eom12",eom12
1756 dcosom1(k)=rij*(dc_norm(k,nres+i)-om1*erij(k))
1757 dcosom2(k)=rij*(dc_norm(k,nres+j)-om2*erij(k))
1760 gg(k)=gg(k)+eom1*dcosom1(k)+eom2*dcosom2(k)
1762 c write (iout,*) "gg",(gg(k),k=1,3)
1764 gvdwx(k,i)=gvdwx(k,i)-gg(k)
1765 & +(eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,nres+i))
1766 & +eom1*(erij(k)-om1*dc_norm(k,nres+i)))*dsci_inv
1767 gvdwx(k,j)=gvdwx(k,j)+gg(k)
1768 & +(eom12*(dc_norm(k,nres+i)-om12*dc_norm(k,nres+j))
1769 & +eom2*(erij(k)-om2*dc_norm(k,nres+j)))*dscj_inv
1770 c write (iout,*)(eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,nres+i))
1771 c & +eom1*(erij(k)-om1*dc_norm(k,nres+i)))*dsci_inv
1772 c write (iout,*)(eom12*(dc_norm(k,nres+i)-om12*dc_norm(k,nres+j))
1773 c & +eom2*(erij(k)-om2*dc_norm(k,nres+j)))*dscj_inv
1776 C Calculate the components of the gradient in DC and X
1780 cgrad gvdwc(l,k)=gvdwc(l,k)+gg(l)
1784 gvdwc(l,i)=gvdwc(l,i)-gg(l)
1785 gvdwc(l,j)=gvdwc(l,j)+gg(l)
1789 C-----------------------------------------------------------------------
1790 subroutine e_softsphere(evdw)
1792 C This subroutine calculates the interaction energy of nonbonded side chains
1793 C assuming the LJ potential of interaction.
1795 implicit real*8 (a-h,o-z)
1796 include 'DIMENSIONS'
1797 parameter (accur=1.0d-10)
1798 include 'COMMON.GEO'
1799 include 'COMMON.VAR'
1800 include 'COMMON.LOCAL'
1801 include 'COMMON.CHAIN'
1802 include 'COMMON.DERIV'
1803 include 'COMMON.INTERACT'
1804 include 'COMMON.TORSION'
1805 include 'COMMON.SBRIDGE'
1806 include 'COMMON.NAMES'
1807 include 'COMMON.IOUNITS'
1808 include 'COMMON.CONTACTS'
1810 cd print *,'Entering Esoft_sphere nnt=',nnt,' nct=',nct
1812 do i=iatsc_s,iatsc_e
1813 itypi=iabs(itype(i))
1814 if (itypi.eq.ntyp1) cycle
1815 itypi1=iabs(itype(i+1))
1820 C Calculate SC interaction energy.
1822 do iint=1,nint_gr(i)
1823 cd write (iout,*) 'i=',i,' iint=',iint,' istart=',istart(i,iint),
1824 cd & 'iend=',iend(i,iint)
1825 do j=istart(i,iint),iend(i,iint)
1826 itypj=iabs(itype(j))
1827 if (itypj.eq.ntyp1) cycle
1831 rij=xj*xj+yj*yj+zj*zj
1832 c write (iout,*)'i=',i,' j=',j,' itypi=',itypi,' itypj=',itypj
1833 r0ij=r0(itypi,itypj)
1835 c print *,i,j,r0ij,dsqrt(rij)
1836 if (rij.lt.r0ijsq) then
1837 evdwij=0.25d0*(rij-r0ijsq)**2
1845 C Calculate the components of the gradient in DC and X
1851 gvdwx(k,i)=gvdwx(k,i)-gg(k)
1852 gvdwx(k,j)=gvdwx(k,j)+gg(k)
1853 gvdwc(k,i)=gvdwc(k,i)-gg(k)
1854 gvdwc(k,j)=gvdwc(k,j)+gg(k)
1858 cgrad gvdwc(l,k)=gvdwc(l,k)+gg(l)
1866 C--------------------------------------------------------------------------
1867 subroutine eelec_soft_sphere(ees,evdw1,eel_loc,eello_turn3,
1870 C Soft-sphere potential of p-p interaction
1872 implicit real*8 (a-h,o-z)
1873 include 'DIMENSIONS'
1874 include 'COMMON.CONTROL'
1875 include 'COMMON.IOUNITS'
1876 include 'COMMON.GEO'
1877 include 'COMMON.VAR'
1878 include 'COMMON.LOCAL'
1879 include 'COMMON.CHAIN'
1880 include 'COMMON.DERIV'
1881 include 'COMMON.INTERACT'
1882 include 'COMMON.CONTACTS'
1883 include 'COMMON.TORSION'
1884 include 'COMMON.VECTORS'
1885 include 'COMMON.FFIELD'
1887 cd write(iout,*) 'In EELEC_soft_sphere'
1894 do i=iatel_s,iatel_e
1895 if (itype(i).eq.ntyp1 .or. itype(i+1).eq.ntyp1) cycle
1899 xmedi=c(1,i)+0.5d0*dxi
1900 ymedi=c(2,i)+0.5d0*dyi
1901 zmedi=c(3,i)+0.5d0*dzi
1903 c write (iout,*) 'i',i,' ielstart',ielstart(i),' ielend',ielend(i)
1904 do j=ielstart(i),ielend(i)
1905 if (itype(j).eq.ntyp1 .or. itype(j+1).eq.ntyp1) cycle
1909 if (j.eq.i+2 .and. itelj.eq.2) iteli=2
1910 r0ij=rpp(iteli,itelj)
1915 xj=c(1,j)+0.5D0*dxj-xmedi
1916 yj=c(2,j)+0.5D0*dyj-ymedi
1917 zj=c(3,j)+0.5D0*dzj-zmedi
1918 rij=xj*xj+yj*yj+zj*zj
1919 if (rij.lt.r0ijsq) then
1920 evdw1ij=0.25d0*(rij-r0ijsq)**2
1928 C Calculate contributions to the Cartesian gradient.
1934 gvdwpp(k,i)=gvdwpp(k,i)-ggg(k)
1935 gvdwpp(k,j)=gvdwpp(k,j)+ggg(k)
1938 * Loop over residues i+1 thru j-1.
1942 cgrad gelc(l,k)=gelc(l,k)+ggg(l)
1947 cgrad do i=nnt,nct-1
1949 cgrad gelc(k,i)=gelc(k,i)+0.5d0*gelc(k,i)
1951 cgrad do j=i+1,nct-1
1953 cgrad gelc(k,i)=gelc(k,i)+gelc(k,j)
1959 c------------------------------------------------------------------------------
1960 subroutine vec_and_deriv
1961 implicit real*8 (a-h,o-z)
1962 include 'DIMENSIONS'
1966 include 'COMMON.IOUNITS'
1967 include 'COMMON.GEO'
1968 include 'COMMON.VAR'
1969 include 'COMMON.LOCAL'
1970 include 'COMMON.CHAIN'
1971 include 'COMMON.VECTORS'
1972 include 'COMMON.SETUP'
1973 include 'COMMON.TIME1'
1974 dimension uyder(3,3,2),uzder(3,3,2),vbld_inv_temp(2)
1975 C Compute the local reference systems. For reference system (i), the
1976 C X-axis points from CA(i) to CA(i+1), the Y axis is in the
1977 C CA(i)-CA(i+1)-CA(i+2) plane, and the Z axis is perpendicular to this plane.
1979 do i=ivec_start,ivec_end
1983 if (i.eq.nres-1) then
1984 C Case of the last full residue
1985 C Compute the Z-axis
1986 call vecpr(dc_norm(1,i),dc_norm(1,i-1),uz(1,i))
1987 costh=dcos(pi-theta(nres))
1988 fac=1.0d0/dsqrt(1.0d0-costh*costh)
1992 C Compute the derivatives of uz
1994 uzder(2,1,1)=-dc_norm(3,i-1)
1995 uzder(3,1,1)= dc_norm(2,i-1)
1996 uzder(1,2,1)= dc_norm(3,i-1)
1998 uzder(3,2,1)=-dc_norm(1,i-1)
1999 uzder(1,3,1)=-dc_norm(2,i-1)
2000 uzder(2,3,1)= dc_norm(1,i-1)
2003 uzder(2,1,2)= dc_norm(3,i)
2004 uzder(3,1,2)=-dc_norm(2,i)
2005 uzder(1,2,2)=-dc_norm(3,i)
2007 uzder(3,2,2)= dc_norm(1,i)
2008 uzder(1,3,2)= dc_norm(2,i)
2009 uzder(2,3,2)=-dc_norm(1,i)
2011 C Compute the Y-axis
2014 uy(k,i)=fac*(dc_norm(k,i-1)-costh*dc_norm(k,i))
2016 C Compute the derivatives of uy
2019 uyder(k,j,1)=2*dc_norm(k,i-1)*dc_norm(j,i)
2020 & -dc_norm(k,i)*dc_norm(j,i-1)
2021 uyder(k,j,2)=-dc_norm(j,i)*dc_norm(k,i)
2023 uyder(j,j,1)=uyder(j,j,1)-costh
2024 uyder(j,j,2)=1.0d0+uyder(j,j,2)
2029 uygrad(l,k,j,i)=uyder(l,k,j)
2030 uzgrad(l,k,j,i)=uzder(l,k,j)
2034 call unormderiv(uy(1,i),uyder(1,1,1),facy,uygrad(1,1,1,i))
2035 call unormderiv(uy(1,i),uyder(1,1,2),facy,uygrad(1,1,2,i))
2036 call unormderiv(uz(1,i),uzder(1,1,1),fac,uzgrad(1,1,1,i))
2037 call unormderiv(uz(1,i),uzder(1,1,2),fac,uzgrad(1,1,2,i))
2040 C Compute the Z-axis
2041 call vecpr(dc_norm(1,i),dc_norm(1,i+1),uz(1,i))
2042 costh=dcos(pi-theta(i+2))
2043 fac=1.0d0/dsqrt(1.0d0-costh*costh)
2047 C Compute the derivatives of uz
2049 uzder(2,1,1)=-dc_norm(3,i+1)
2050 uzder(3,1,1)= dc_norm(2,i+1)
2051 uzder(1,2,1)= dc_norm(3,i+1)
2053 uzder(3,2,1)=-dc_norm(1,i+1)
2054 uzder(1,3,1)=-dc_norm(2,i+1)
2055 uzder(2,3,1)= dc_norm(1,i+1)
2058 uzder(2,1,2)= dc_norm(3,i)
2059 uzder(3,1,2)=-dc_norm(2,i)
2060 uzder(1,2,2)=-dc_norm(3,i)
2062 uzder(3,2,2)= dc_norm(1,i)
2063 uzder(1,3,2)= dc_norm(2,i)
2064 uzder(2,3,2)=-dc_norm(1,i)
2066 C Compute the Y-axis
2069 uy(k,i)=facy*(dc_norm(k,i+1)-costh*dc_norm(k,i))
2071 C Compute the derivatives of uy
2074 uyder(k,j,1)=2*dc_norm(k,i+1)*dc_norm(j,i)
2075 & -dc_norm(k,i)*dc_norm(j,i+1)
2076 uyder(k,j,2)=-dc_norm(j,i)*dc_norm(k,i)
2078 uyder(j,j,1)=uyder(j,j,1)-costh
2079 uyder(j,j,2)=1.0d0+uyder(j,j,2)
2084 uygrad(l,k,j,i)=uyder(l,k,j)
2085 uzgrad(l,k,j,i)=uzder(l,k,j)
2089 call unormderiv(uy(1,i),uyder(1,1,1),facy,uygrad(1,1,1,i))
2090 call unormderiv(uy(1,i),uyder(1,1,2),facy,uygrad(1,1,2,i))
2091 call unormderiv(uz(1,i),uzder(1,1,1),fac,uzgrad(1,1,1,i))
2092 call unormderiv(uz(1,i),uzder(1,1,2),fac,uzgrad(1,1,2,i))
2096 vbld_inv_temp(1)=vbld_inv(i+1)
2097 if (i.lt.nres-1) then
2098 vbld_inv_temp(2)=vbld_inv(i+2)
2100 vbld_inv_temp(2)=vbld_inv(i)
2105 uygrad(l,k,j,i)=vbld_inv_temp(j)*uygrad(l,k,j,i)
2106 uzgrad(l,k,j,i)=vbld_inv_temp(j)*uzgrad(l,k,j,i)
2111 #if defined(PARVEC) && defined(MPI)
2112 if (nfgtasks1.gt.1) then
2114 c print *,"Processor",fg_rank1,kolor1," ivec_start",ivec_start,
2115 c & " ivec_displ",(ivec_displ(i),i=0,nfgtasks1-1),
2116 c & " ivec_count",(ivec_count(i),i=0,nfgtasks1-1)
2117 call MPI_Allgatherv(uy(1,ivec_start),ivec_count(fg_rank1),
2118 & MPI_UYZ,uy(1,1),ivec_count(0),ivec_displ(0),MPI_UYZ,
2120 call MPI_Allgatherv(uz(1,ivec_start),ivec_count(fg_rank1),
2121 & MPI_UYZ,uz(1,1),ivec_count(0),ivec_displ(0),MPI_UYZ,
2123 call MPI_Allgatherv(uygrad(1,1,1,ivec_start),
2124 & ivec_count(fg_rank1),MPI_UYZGRAD,uygrad(1,1,1,1),ivec_count(0),
2125 & ivec_displ(0),MPI_UYZGRAD,FG_COMM1,IERR)
2126 call MPI_Allgatherv(uzgrad(1,1,1,ivec_start),
2127 & ivec_count(fg_rank1),MPI_UYZGRAD,uzgrad(1,1,1,1),ivec_count(0),
2128 & ivec_displ(0),MPI_UYZGRAD,FG_COMM1,IERR)
2129 time_gather=time_gather+MPI_Wtime()-time00
2131 c if (fg_rank.eq.0) then
2132 c write (iout,*) "Arrays UY and UZ"
2134 c write (iout,'(i5,3f10.5,5x,3f10.5)') i,(uy(k,i),k=1,3),
2141 C-----------------------------------------------------------------------------
2142 subroutine check_vecgrad
2143 implicit real*8 (a-h,o-z)
2144 include 'DIMENSIONS'
2145 include 'COMMON.IOUNITS'
2146 include 'COMMON.GEO'
2147 include 'COMMON.VAR'
2148 include 'COMMON.LOCAL'
2149 include 'COMMON.CHAIN'
2150 include 'COMMON.VECTORS'
2151 dimension uygradt(3,3,2,maxres),uzgradt(3,3,2,maxres)
2152 dimension uyt(3,maxres),uzt(3,maxres)
2153 dimension uygradn(3,3,2),uzgradn(3,3,2),erij(3)
2154 double precision delta /1.0d-7/
2157 crc write(iout,'(2i5,2(3f10.5,5x))') i,1,dc_norm(:,i)
2158 crc write(iout,'(2i5,2(3f10.5,5x))') i,2,uy(:,i)
2159 crc write(iout,'(2i5,2(3f10.5,5x)/)')i,3,uz(:,i)
2160 cd write(iout,'(2i5,2(3f10.5,5x))') i,1,
2161 cd & (dc_norm(if90,i),if90=1,3)
2162 cd write(iout,'(2i5,2(3f10.5,5x))') i,2,(uy(if90,i),if90=1,3)
2163 cd write(iout,'(2i5,2(3f10.5,5x)/)')i,3,(uz(if90,i),if90=1,3)
2164 cd write(iout,'(a)')
2170 uygradt(l,k,j,i)=uygrad(l,k,j,i)
2171 uzgradt(l,k,j,i)=uzgrad(l,k,j,i)
2184 cd write (iout,*) 'i=',i
2186 erij(k)=dc_norm(k,i)
2190 dc_norm(k,i)=erij(k)
2192 dc_norm(j,i)=dc_norm(j,i)+delta
2193 c fac=dsqrt(scalar(dc_norm(1,i),dc_norm(1,i)))
2195 c dc_norm(k,i)=dc_norm(k,i)/fac
2197 c write (iout,*) (dc_norm(k,i),k=1,3)
2198 c write (iout,*) (erij(k),k=1,3)
2201 uygradn(k,j,1)=(uy(k,i)-uyt(k,i))/delta
2202 uygradn(k,j,2)=(uy(k,i-1)-uyt(k,i-1))/delta
2203 uzgradn(k,j,1)=(uz(k,i)-uzt(k,i))/delta
2204 uzgradn(k,j,2)=(uz(k,i-1)-uzt(k,i-1))/delta
2206 c write (iout,'(i5,3f8.5,3x,3f8.5,5x,3f8.5,3x,3f8.5)')
2207 c & j,(uzgradt(k,j,1,i),k=1,3),(uzgradn(k,j,1),k=1,3),
2208 c & (uzgradt(k,j,2,i-1),k=1,3),(uzgradn(k,j,2),k=1,3)
2211 dc_norm(k,i)=erij(k)
2214 cd write (iout,'(i5,3f8.5,3x,3f8.5,5x,3f8.5,3x,3f8.5)')
2215 cd & k,(uygradt(k,l,1,i),l=1,3),(uygradn(k,l,1),l=1,3),
2216 cd & (uygradt(k,l,2,i-1),l=1,3),(uygradn(k,l,2),l=1,3)
2217 cd write (iout,'(i5,3f8.5,3x,3f8.5,5x,3f8.5,3x,3f8.5)')
2218 cd & k,(uzgradt(k,l,1,i),l=1,3),(uzgradn(k,l,1),l=1,3),
2219 cd & (uzgradt(k,l,2,i-1),l=1,3),(uzgradn(k,l,2),l=1,3)
2220 cd write (iout,'(a)')
2225 C--------------------------------------------------------------------------
2226 subroutine set_matrices
2227 implicit real*8 (a-h,o-z)
2228 include 'DIMENSIONS'
2231 include "COMMON.SETUP"
2233 integer status(MPI_STATUS_SIZE)
2235 include 'COMMON.IOUNITS'
2236 include 'COMMON.GEO'
2237 include 'COMMON.VAR'
2238 include 'COMMON.LOCAL'
2239 include 'COMMON.CHAIN'
2240 include 'COMMON.DERIV'
2241 include 'COMMON.INTERACT'
2242 include 'COMMON.CONTACTS'
2243 include 'COMMON.TORSION'
2244 include 'COMMON.VECTORS'
2245 include 'COMMON.FFIELD'
2246 double precision auxvec(2),auxmat(2,2)
2248 C Compute the virtual-bond-torsional-angle dependent quantities needed
2249 C to calculate the el-loc multibody terms of various order.
2251 c write(iout,*) 'nphi=',nphi,nres
2253 do i=ivec_start+2,ivec_end+2
2258 if (i.gt. nnt+2 .and. i.lt.nct+2) then
2259 iti = itortyp(itype(i-2))
2263 c if (i.gt. iatel_s+1 .and. i.lt.iatel_e+4) then
2264 if (i.gt. nnt+1 .and. i.lt.nct+1) then
2265 iti1 = itortyp(itype(i-1))
2270 b1(1,i-2)=bnew1(1,1,iti)*dsin(theta(i-1)/2.0d0)
2271 & +bnew1(2,1,iti)*dsin(theta(i-1))
2272 & +bnew1(3,1,iti)*dcos(theta(i-1)/2.0d0)
2273 gtb1(1,i-2)=bnew1(1,1,iti)*dcos(theta(i-1)/2.0d0)/2.0d0
2274 & +bnew1(2,1,iti)*dcos(theta(i-1))
2275 & -bnew1(3,1,iti)*dsin(theta(i-1)/2.0d0)/2.0d0
2276 c & +bnew1(3,1,iti)*dsin(alpha(i))*cos(beta(i))
2277 c &*(cos(theta(i)/2.0)
2278 b2(1,i-2)=bnew2(1,1,iti)*dsin(theta(i-1)/2.0d0)
2279 & +bnew2(2,1,iti)*dsin(theta(i-1))
2280 & +bnew2(3,1,iti)*dcos(theta(i-1)/2.0d0)
2281 c & +bnew2(3,1,iti)*dsin(alpha(i))*dcos(beta(i))
2282 c &*(cos(theta(i)/2.0)
2283 gtb2(1,i-2)=bnew2(1,1,iti)*dcos(theta(i-1)/2.0d0)/2.0d0
2284 & +bnew2(2,1,iti)*dcos(theta(i-1))
2285 & -bnew2(3,1,iti)*dsin(theta(i-1)/2.0d0)/2.0d0
2286 c if (ggb1(1,i).eq.0.0d0) then
2287 c write(iout,*) 'i=',i,ggb1(1,i),
2288 c &bnew1(1,1,iti)*dcos(theta(i)/2.0d0)/2.0d0,
2289 c &bnew1(2,1,iti)*dcos(theta(i)),
2290 c &bnew1(3,1,iti)*dsin(theta(i)/2.0d0)/2.0d0
2292 b1(2,i-2)=bnew1(1,2,iti)
2294 b2(2,i-2)=bnew2(1,2,iti)
2296 EE(1,1,i-2)=eenew(1,iti)*dcos(theta(i-1))
2297 EE(1,2,i-2)=eeold(1,2,iti)
2298 EE(2,1,i-2)=eeold(2,1,iti)
2299 EE(2,2,i-2)=eeold(2,2,iti)
2300 gtEE(1,1,i-2)=-eenew(1,iti)*dsin(theta(i-1))
2305 c EE(1,2,iti)=0.5d0*eenew(1,iti)
2306 c EE(2,1,iti)=0.5d0*eenew(1,iti)
2307 c b1(2,iti)=bnew1(1,2,iti)*dsin(alpha(i))*dsin(beta(i))
2308 c b2(2,iti)=bnew2(1,2,iti)*dsin(alpha(i))*dsin(beta(i))
2309 b1tilde(1,i-2)=b1(1,i-2)
2310 b1tilde(2,i-2)=-b1(2,i-2)
2311 b2tilde(1,i-2)=b2(1,i-2)
2312 b2tilde(2,i-2)=-b2(2,i-2)
2313 c write (iout,*) 'i=',i-2,gtb1(2,i-2),gtb1(1,i-2)
2314 c write (iout,*) 'theta=', theta(i-1)
2317 do i=ivec_start+2,ivec_end+2
2322 if (i.gt. nnt+2 .and. i.lt.nct+2) then
2323 iti = itortyp(itype(i-2))
2327 c if (i.gt. iatel_s+1 .and. i.lt.iatel_e+4) then
2328 if (i.gt. nnt+1 .and. i.lt.nct+1) then
2329 iti1 = itortyp(itype(i-1))
2333 if (i .lt. nres+1) then
2370 if (i .gt. 3 .and. i .lt. nres+1) then
2371 obrot_der(1,i-2)=-sin1
2372 obrot_der(2,i-2)= cos1
2373 Ugder(1,1,i-2)= sin1
2374 Ugder(1,2,i-2)=-cos1
2375 Ugder(2,1,i-2)=-cos1
2376 Ugder(2,2,i-2)=-sin1
2379 obrot2_der(1,i-2)=-dwasin2
2380 obrot2_der(2,i-2)= dwacos2
2381 Ug2der(1,1,i-2)= dwasin2
2382 Ug2der(1,2,i-2)=-dwacos2
2383 Ug2der(2,1,i-2)=-dwacos2
2384 Ug2der(2,2,i-2)=-dwasin2
2386 obrot_der(1,i-2)=0.0d0
2387 obrot_der(2,i-2)=0.0d0
2388 Ugder(1,1,i-2)=0.0d0
2389 Ugder(1,2,i-2)=0.0d0
2390 Ugder(2,1,i-2)=0.0d0
2391 Ugder(2,2,i-2)=0.0d0
2392 obrot2_der(1,i-2)=0.0d0
2393 obrot2_der(2,i-2)=0.0d0
2394 Ug2der(1,1,i-2)=0.0d0
2395 Ug2der(1,2,i-2)=0.0d0
2396 Ug2der(2,1,i-2)=0.0d0
2397 Ug2der(2,2,i-2)=0.0d0
2399 c if (i.gt. iatel_s+2 .and. i.lt.iatel_e+5) then
2400 if (i.gt. nnt+2 .and. i.lt.nct+2) then
2401 iti = itortyp(itype(i-2))
2405 c if (i.gt. iatel_s+1 .and. i.lt.iatel_e+4) then
2406 if (i.gt. nnt+1 .and. i.lt.nct+1) then
2407 iti1 = itortyp(itype(i-1))
2411 cd write (iout,*) '*******i',i,' iti1',iti
2412 cd write (iout,*) 'b1',b1(:,iti)
2413 cd write (iout,*) 'b2',b2(:,iti)
2414 cd write (iout,*) 'Ug',Ug(:,:,i-2)
2415 c if (i .gt. iatel_s+2) then
2416 if (i .gt. nnt+2) then
2417 call matvec2(Ug(1,1,i-2),b2(1,i-2),Ub2(1,i-2))
2419 call matvec2(Ug(1,1,i-2),gtb2(1,i-2),gUb2(1,i-2))
2420 c write (iout,*) Ug(1,1,i-2),gtb2(1,i-2),gUb2(1,i-2),"chuj"
2422 c write(iout,*) "co jest kurwa", iti, EE(1,1,iti),EE(2,1,iti),
2423 c & EE(1,2,iti),EE(2,2,iti)
2424 call matmat2(EE(1,1,i-2),Ug(1,1,i-2),EUg(1,1,i-2))
2425 call matmat2(gtEE(1,1,i-2),Ug(1,1,i-2),gtEUg(1,1,i-2))
2426 c write(iout,*) "Macierz EUG",
2427 c & eug(1,1,i-2),eug(1,2,i-2),eug(2,1,i-2),
2429 if (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0)
2431 call matmat2(CC(1,1,iti),Ug(1,1,i-2),CUg(1,1,i-2))
2432 call matmat2(DD(1,1,iti),Ug(1,1,i-2),DUg(1,1,i-2))
2433 call matmat2(Dtilde(1,1,iti),Ug2(1,1,i-2),DtUg2(1,1,i-2))
2434 call matvec2(Ctilde(1,1,iti1),obrot(1,i-2),Ctobr(1,i-2))
2435 call matvec2(Dtilde(1,1,iti),obrot2(1,i-2),Dtobr2(1,i-2))
2446 DtUg2(l,k,i-2)=0.0d0
2450 call matvec2(Ugder(1,1,i-2),b2(1,i-2),Ub2der(1,i-2))
2451 call matmat2(EE(1,1,i-2),Ugder(1,1,i-2),EUgder(1,1,i-2))
2453 muder(k,i-2)=Ub2der(k,i-2)
2455 c if (i.gt. iatel_s+1 .and. i.lt.iatel_e+4) then
2456 if (i.gt. nnt+1 .and. i.lt.nct+1) then
2457 if (itype(i-1).le.ntyp) then
2458 iti1 = itortyp(itype(i-1))
2466 mu(k,i-2)=Ub2(k,i-2)+b1(k,i-1)
2469 write (iout,'(2hmu,i3,3f8.1,12f10.5)') i-2,rad2deg*theta(i-1),
2470 & rad2deg*theta(i),rad2deg*phi(i),mu(1,i-2),mu(2,i-2),
2471 & -b2(1,i-2),b2(2,i-2),b1(1,i-2),b1(2,i-2),
2472 & dsqrt(b2(1,i-1)**2+b2(2,i-1)**2)
2473 & +dsqrt(b1(1,i-1)**2+b1(2,i-1)**2),
2474 & ((ee(l,k,i-2),l=1,2),k=1,2),eenew(1,itortyp(iti))
2476 cd write (iout,*) 'mu ',mu(:,i-2)
2477 cd write (iout,*) 'mu1',mu1(:,i-2)
2478 cd write (iout,*) 'mu2',mu2(:,i-2)
2479 if (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or.wcorr6.gt.0.0d0)
2481 call matmat2(CC(1,1,iti1),Ugder(1,1,i-2),CUgder(1,1,i-2))
2482 call matmat2(DD(1,1,iti),Ugder(1,1,i-2),DUgder(1,1,i-2))
2483 call matmat2(Dtilde(1,1,iti),Ug2der(1,1,i-2),DtUg2der(1,1,i-2))
2484 call matvec2(Ctilde(1,1,iti1),obrot_der(1,i-2),Ctobrder(1,i-2))
2485 call matvec2(Dtilde(1,1,iti),obrot2_der(1,i-2),Dtobr2der(1,i-2))
2486 C Vectors and matrices dependent on a single virtual-bond dihedral.
2487 call matvec2(DD(1,1,iti),b1tilde(1,i-1),auxvec(1))
2488 call matvec2(Ug2(1,1,i-2),auxvec(1),Ug2Db1t(1,i-2))
2489 call matvec2(Ug2der(1,1,i-2),auxvec(1),Ug2Db1tder(1,i-2))
2490 call matvec2(CC(1,1,iti1),Ub2(1,i-2),CUgb2(1,i-2))
2491 call matvec2(CC(1,1,iti1),Ub2der(1,i-2),CUgb2der(1,i-2))
2492 call matmat2(EUg(1,1,i-2),CC(1,1,iti1),EUgC(1,1,i-2))
2493 call matmat2(EUgder(1,1,i-2),CC(1,1,iti1),EUgCder(1,1,i-2))
2494 call matmat2(EUg(1,1,i-2),DD(1,1,iti1),EUgD(1,1,i-2))
2495 call matmat2(EUgder(1,1,i-2),DD(1,1,iti1),EUgDder(1,1,i-2))
2498 C Matrices dependent on two consecutive virtual-bond dihedrals.
2499 C The order of matrices is from left to right.
2500 if (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or.wcorr6.gt.0.0d0)
2502 c do i=max0(ivec_start,2),ivec_end
2504 call matmat2(DtUg2(1,1,i-1),EUg(1,1,i),DtUg2EUg(1,1,i))
2505 call matmat2(DtUg2der(1,1,i-1),EUg(1,1,i),DtUg2EUgder(1,1,1,i))
2506 call matmat2(DtUg2(1,1,i-1),EUgder(1,1,i),DtUg2EUgder(1,1,2,i))
2507 call transpose2(DtUg2(1,1,i-1),auxmat(1,1))
2508 call matmat2(auxmat(1,1),EUg(1,1,i),Ug2DtEUg(1,1,i))
2509 call matmat2(auxmat(1,1),EUgder(1,1,i),Ug2DtEUgder(1,1,2,i))
2510 call transpose2(DtUg2der(1,1,i-1),auxmat(1,1))
2511 call matmat2(auxmat(1,1),EUg(1,1,i),Ug2DtEUgder(1,1,1,i))
2514 #if defined(MPI) && defined(PARMAT)
2516 c if (fg_rank.eq.0) then
2517 write (iout,*) "Arrays UG and UGDER before GATHER"
2519 write (iout,'(i5,4f10.5,5x,4f10.5)') i,
2520 & ((ug(l,k,i),l=1,2),k=1,2),
2521 & ((ugder(l,k,i),l=1,2),k=1,2)
2523 write (iout,*) "Arrays UG2 and UG2DER"
2525 write (iout,'(i5,4f10.5,5x,4f10.5)') i,
2526 & ((ug2(l,k,i),l=1,2),k=1,2),
2527 & ((ug2der(l,k,i),l=1,2),k=1,2)
2529 write (iout,*) "Arrays OBROT OBROT2 OBROTDER and OBROT2DER"
2531 write (iout,'(i5,4f10.5,5x,4f10.5)') i,
2532 & (obrot(k,i),k=1,2),(obrot2(k,i),k=1,2),
2533 & (obrot_der(k,i),k=1,2),(obrot2_der(k,i),k=1,2)
2535 write (iout,*) "Arrays COSTAB SINTAB COSTAB2 and SINTAB2"
2537 write (iout,'(i5,4f10.5,5x,4f10.5)') i,
2538 & costab(i),sintab(i),costab2(i),sintab2(i)
2540 write (iout,*) "Array MUDER"
2542 write (iout,'(i5,2f10.5)') i,muder(1,i),muder(2,i)
2546 if (nfgtasks.gt.1) then
2548 c write(iout,*)"Processor",fg_rank,kolor," ivec_start",ivec_start,
2549 c & " ivec_displ",(ivec_displ(i),i=0,nfgtasks-1),
2550 c & " ivec_count",(ivec_count(i),i=0,nfgtasks-1)
2552 call MPI_Allgatherv(Ub2(1,ivec_start),ivec_count(fg_rank1),
2553 & MPI_MU,Ub2(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2555 call MPI_Allgatherv(Ub2der(1,ivec_start),ivec_count(fg_rank1),
2556 & MPI_MU,Ub2der(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2558 call MPI_Allgatherv(mu(1,ivec_start),ivec_count(fg_rank1),
2559 & MPI_MU,mu(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2561 call MPI_Allgatherv(muder(1,ivec_start),ivec_count(fg_rank1),
2562 & MPI_MU,muder(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2564 call MPI_Allgatherv(Eug(1,1,ivec_start),ivec_count(fg_rank1),
2565 & MPI_MAT1,Eug(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2567 call MPI_Allgatherv(Eugder(1,1,ivec_start),ivec_count(fg_rank1),
2568 & MPI_MAT1,Eugder(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2570 call MPI_Allgatherv(costab(ivec_start),ivec_count(fg_rank1),
2571 & MPI_DOUBLE_PRECISION,costab(1),ivec_count(0),ivec_displ(0),
2572 & MPI_DOUBLE_PRECISION,FG_COMM1,IERR)
2573 call MPI_Allgatherv(sintab(ivec_start),ivec_count(fg_rank1),
2574 & MPI_DOUBLE_PRECISION,sintab(1),ivec_count(0),ivec_displ(0),
2575 & MPI_DOUBLE_PRECISION,FG_COMM1,IERR)
2576 call MPI_Allgatherv(costab2(ivec_start),ivec_count(fg_rank1),
2577 & MPI_DOUBLE_PRECISION,costab2(1),ivec_count(0),ivec_displ(0),
2578 & MPI_DOUBLE_PRECISION,FG_COMM1,IERR)
2579 call MPI_Allgatherv(sintab2(ivec_start),ivec_count(fg_rank1),
2580 & MPI_DOUBLE_PRECISION,sintab2(1),ivec_count(0),ivec_displ(0),
2581 & MPI_DOUBLE_PRECISION,FG_COMM1,IERR)
2582 if (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0)
2584 call MPI_Allgatherv(Ctobr(1,ivec_start),ivec_count(fg_rank1),
2585 & MPI_MU,Ctobr(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2587 call MPI_Allgatherv(Ctobrder(1,ivec_start),ivec_count(fg_rank1),
2588 & MPI_MU,Ctobrder(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2590 call MPI_Allgatherv(Dtobr2(1,ivec_start),ivec_count(fg_rank1),
2591 & MPI_MU,Dtobr2(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2593 call MPI_Allgatherv(Dtobr2der(1,ivec_start),ivec_count(fg_rank1),
2594 & MPI_MU,Dtobr2der(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2596 call MPI_Allgatherv(Ug2Db1t(1,ivec_start),ivec_count(fg_rank1),
2597 & MPI_MU,Ug2Db1t(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2599 call MPI_Allgatherv(Ug2Db1tder(1,ivec_start),
2600 & ivec_count(fg_rank1),
2601 & MPI_MU,Ug2Db1tder(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2603 call MPI_Allgatherv(CUgb2(1,ivec_start),ivec_count(fg_rank1),
2604 & MPI_MU,CUgb2(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2606 call MPI_Allgatherv(CUgb2der(1,ivec_start),ivec_count(fg_rank1),
2607 & MPI_MU,CUgb2der(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2609 call MPI_Allgatherv(Cug(1,1,ivec_start),ivec_count(fg_rank1),
2610 & MPI_MAT1,Cug(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2612 call MPI_Allgatherv(Cugder(1,1,ivec_start),ivec_count(fg_rank1),
2613 & MPI_MAT1,Cugder(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2615 call MPI_Allgatherv(Dug(1,1,ivec_start),ivec_count(fg_rank1),
2616 & MPI_MAT1,Dug(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2618 call MPI_Allgatherv(Dugder(1,1,ivec_start),ivec_count(fg_rank1),
2619 & MPI_MAT1,Dugder(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2621 call MPI_Allgatherv(Dtug2(1,1,ivec_start),ivec_count(fg_rank1),
2622 & MPI_MAT1,Dtug2(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2624 call MPI_Allgatherv(Dtug2der(1,1,ivec_start),
2625 & ivec_count(fg_rank1),
2626 & MPI_MAT1,Dtug2der(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2628 call MPI_Allgatherv(EugC(1,1,ivec_start),ivec_count(fg_rank1),
2629 & MPI_MAT1,EugC(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2631 call MPI_Allgatherv(EugCder(1,1,ivec_start),ivec_count(fg_rank1),
2632 & MPI_MAT1,EugCder(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2634 call MPI_Allgatherv(EugD(1,1,ivec_start),ivec_count(fg_rank1),
2635 & MPI_MAT1,EugD(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2637 call MPI_Allgatherv(EugDder(1,1,ivec_start),ivec_count(fg_rank1),
2638 & MPI_MAT1,EugDder(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2640 call MPI_Allgatherv(DtUg2EUg(1,1,ivec_start),
2641 & ivec_count(fg_rank1),
2642 & MPI_MAT1,DtUg2EUg(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2644 call MPI_Allgatherv(Ug2DtEUg(1,1,ivec_start),
2645 & ivec_count(fg_rank1),
2646 & MPI_MAT1,Ug2DtEUg(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2648 call MPI_Allgatherv(DtUg2EUgder(1,1,1,ivec_start),
2649 & ivec_count(fg_rank1),
2650 & MPI_MAT2,DtUg2EUgder(1,1,1,1),ivec_count(0),ivec_displ(0),
2651 & MPI_MAT2,FG_COMM1,IERR)
2652 call MPI_Allgatherv(Ug2DtEUgder(1,1,1,ivec_start),
2653 & ivec_count(fg_rank1),
2654 & MPI_MAT2,Ug2DtEUgder(1,1,1,1),ivec_count(0),ivec_displ(0),
2655 & MPI_MAT2,FG_COMM1,IERR)
2658 c Passes matrix info through the ring
2661 if (irecv.lt.0) irecv=nfgtasks1-1
2664 if (inext.ge.nfgtasks1) inext=0
2666 c write (iout,*) "isend",isend," irecv",irecv
2668 lensend=lentyp(isend)
2669 lenrecv=lentyp(irecv)
2670 c write (iout,*) "lensend",lensend," lenrecv",lenrecv
2671 c call MPI_SENDRECV(ug(1,1,ivec_displ(isend)+1),1,
2672 c & MPI_ROTAT1(lensend),inext,2200+isend,
2673 c & ug(1,1,ivec_displ(irecv)+1),1,MPI_ROTAT1(lenrecv),
2674 c & iprev,2200+irecv,FG_COMM,status,IERR)
2675 c write (iout,*) "Gather ROTAT1"
2677 c call MPI_SENDRECV(obrot(1,ivec_displ(isend)+1),1,
2678 c & MPI_ROTAT2(lensend),inext,3300+isend,
2679 c & obrot(1,ivec_displ(irecv)+1),1,MPI_ROTAT2(lenrecv),
2680 c & iprev,3300+irecv,FG_COMM,status,IERR)
2681 c write (iout,*) "Gather ROTAT2"
2683 call MPI_SENDRECV(costab(ivec_displ(isend)+1),1,
2684 & MPI_ROTAT_OLD(lensend),inext,4400+isend,
2685 & costab(ivec_displ(irecv)+1),1,MPI_ROTAT_OLD(lenrecv),
2686 & iprev,4400+irecv,FG_COMM,status,IERR)
2687 c write (iout,*) "Gather ROTAT_OLD"
2689 call MPI_SENDRECV(mu(1,ivec_displ(isend)+1),1,
2690 & MPI_PRECOMP11(lensend),inext,5500+isend,
2691 & mu(1,ivec_displ(irecv)+1),1,MPI_PRECOMP11(lenrecv),
2692 & iprev,5500+irecv,FG_COMM,status,IERR)
2693 c write (iout,*) "Gather PRECOMP11"
2695 call MPI_SENDRECV(Eug(1,1,ivec_displ(isend)+1),1,
2696 & MPI_PRECOMP12(lensend),inext,6600+isend,
2697 & Eug(1,1,ivec_displ(irecv)+1),1,MPI_PRECOMP12(lenrecv),
2698 & iprev,6600+irecv,FG_COMM,status,IERR)
2699 c write (iout,*) "Gather PRECOMP12"
2701 if (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0)
2703 call MPI_SENDRECV(ug2db1t(1,ivec_displ(isend)+1),1,
2704 & MPI_ROTAT2(lensend),inext,7700+isend,
2705 & ug2db1t(1,ivec_displ(irecv)+1),1,MPI_ROTAT2(lenrecv),
2706 & iprev,7700+irecv,FG_COMM,status,IERR)
2707 c write (iout,*) "Gather PRECOMP21"
2709 call MPI_SENDRECV(EUgC(1,1,ivec_displ(isend)+1),1,
2710 & MPI_PRECOMP22(lensend),inext,8800+isend,
2711 & EUgC(1,1,ivec_displ(irecv)+1),1,MPI_PRECOMP22(lenrecv),
2712 & iprev,8800+irecv,FG_COMM,status,IERR)
2713 c write (iout,*) "Gather PRECOMP22"
2715 call MPI_SENDRECV(Ug2DtEUgder(1,1,1,ivec_displ(isend)+1),1,
2716 & MPI_PRECOMP23(lensend),inext,9900+isend,
2717 & Ug2DtEUgder(1,1,1,ivec_displ(irecv)+1),1,
2718 & MPI_PRECOMP23(lenrecv),
2719 & iprev,9900+irecv,FG_COMM,status,IERR)
2720 c write (iout,*) "Gather PRECOMP23"
2725 if (irecv.lt.0) irecv=nfgtasks1-1
2728 time_gather=time_gather+MPI_Wtime()-time00
2731 c if (fg_rank.eq.0) then
2732 write (iout,*) "Arrays UG and UGDER"
2734 write (iout,'(i5,4f10.5,5x,4f10.5)') i,
2735 & ((ug(l,k,i),l=1,2),k=1,2),
2736 & ((ugder(l,k,i),l=1,2),k=1,2)
2738 write (iout,*) "Arrays UG2 and UG2DER"
2740 write (iout,'(i5,4f10.5,5x,4f10.5)') i,
2741 & ((ug2(l,k,i),l=1,2),k=1,2),
2742 & ((ug2der(l,k,i),l=1,2),k=1,2)
2744 write (iout,*) "Arrays OBROT OBROT2 OBROTDER and OBROT2DER"
2746 write (iout,'(i5,4f10.5,5x,4f10.5)') i,
2747 & (obrot(k,i),k=1,2),(obrot2(k,i),k=1,2),
2748 & (obrot_der(k,i),k=1,2),(obrot2_der(k,i),k=1,2)
2750 write (iout,*) "Arrays COSTAB SINTAB COSTAB2 and SINTAB2"
2752 write (iout,'(i5,4f10.5,5x,4f10.5)') i,
2753 & costab(i),sintab(i),costab2(i),sintab2(i)
2755 write (iout,*) "Array MUDER"
2757 write (iout,'(i5,2f10.5)') i,muder(1,i),muder(2,i)
2763 cd iti = itortyp(itype(i))
2766 cd write (iout,'(2f10.5,5x,2f10.5,5x,2f10.5)')
2767 cd & (EE(j,k,iti),k=1,2),(Ug(j,k,i),k=1,2),(EUg(j,k,i),k=1,2)
2772 C--------------------------------------------------------------------------
2773 subroutine eelec(ees,evdw1,eel_loc,eello_turn3,eello_turn4)
2775 C This subroutine calculates the average interaction energy and its gradient
2776 C in the virtual-bond vectors between non-adjacent peptide groups, based on
2777 C the potential described in Liwo et al., Protein Sci., 1993, 2, 1715.
2778 C The potential depends both on the distance of peptide-group centers and on
2779 C the orientation of the CA-CA virtual bonds.
2781 implicit real*8 (a-h,o-z)
2785 include 'DIMENSIONS'
2786 include 'COMMON.CONTROL'
2787 include 'COMMON.SETUP'
2788 include 'COMMON.IOUNITS'
2789 include 'COMMON.GEO'
2790 include 'COMMON.VAR'
2791 include 'COMMON.LOCAL'
2792 include 'COMMON.CHAIN'
2793 include 'COMMON.DERIV'
2794 include 'COMMON.INTERACT'
2795 include 'COMMON.CONTACTS'
2796 include 'COMMON.TORSION'
2797 include 'COMMON.VECTORS'
2798 include 'COMMON.FFIELD'
2799 include 'COMMON.TIME1'
2800 dimension ggg(3),gggp(3),gggm(3),erij(3),dcosb(3),dcosg(3),
2801 & erder(3,3),uryg(3,3),urzg(3,3),vryg(3,3),vrzg(3,3)
2802 double precision acipa(2,2),agg(3,4),aggi(3,4),aggi1(3,4),
2803 & aggj(3,4),aggj1(3,4),a_temp(2,2),muij(4),gmuij(4)
2804 common /locel/ a_temp,agg,aggi,aggi1,aggj,aggj1,a22,a23,a32,a33,
2805 & dxi,dyi,dzi,dx_normi,dy_normi,dz_normi,xmedi,ymedi,zmedi,
2807 c 4/26/02 - AL scaling factor for 1,4 repulsive VDW interactions
2809 double precision scal_el /1.0d0/
2811 double precision scal_el /0.5d0/
2814 C 13-go grudnia roku pamietnego...
2815 double precision unmat(3,3) /1.0d0,0.0d0,0.0d0,
2816 & 0.0d0,1.0d0,0.0d0,
2817 & 0.0d0,0.0d0,1.0d0/
2818 cd write(iout,*) 'In EELEC'
2820 cd write(iout,*) 'Type',i
2821 cd write(iout,*) 'B1',B1(:,i)
2822 cd write(iout,*) 'B2',B2(:,i)
2823 cd write(iout,*) 'CC',CC(:,:,i)
2824 cd write(iout,*) 'DD',DD(:,:,i)
2825 cd write(iout,*) 'EE',EE(:,:,i)
2827 cd call check_vecgrad
2829 if (icheckgrad.eq.1) then
2831 fac=1.0d0/dsqrt(scalar(dc(1,i),dc(1,i)))
2833 dc_norm(k,i)=dc(k,i)*fac
2835 c write (iout,*) 'i',i,' fac',fac
2838 if (wel_loc.gt.0.0d0 .or. wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0
2839 & .or. wcorr6.gt.0.0d0 .or. wturn3.gt.0.0d0 .or.
2840 & wturn4.gt.0.0d0 .or. wturn6.gt.0.0d0) then
2841 c call vec_and_deriv
2847 time_mat=time_mat+MPI_Wtime()-time01
2851 cd write (iout,*) 'i=',i
2853 cd write (iout,'(i5,2f10.5)') k,uy(k,i),uz(k,i)
2856 cd write (iout,'(f10.5,2x,3f10.5,2x,3f10.5)')
2857 cd & uz(k,i),(uzgrad(k,l,1,i),l=1,3),(uzgrad(k,l,2,i),l=1,3)
2870 cd print '(a)','Enter EELEC'
2871 cd write (iout,*) 'iatel_s=',iatel_s,' iatel_e=',iatel_e
2873 gel_loc_loc(i)=0.0d0
2878 c 9/27/08 AL Split the interaction loop to ensure load balancing of turn terms
2880 C Loop over i,i+2 and i,i+3 pairs of the peptide groups
2882 do i=iturn3_start,iturn3_end
2883 if (itype(i).eq.ntyp1 .or. itype(i+1).eq.ntyp1
2884 & .or. itype(i+2).eq.ntyp1 .or. itype(i+3).eq.ntyp1) cycle
2888 dx_normi=dc_norm(1,i)
2889 dy_normi=dc_norm(2,i)
2890 dz_normi=dc_norm(3,i)
2891 xmedi=c(1,i)+0.5d0*dxi
2892 ymedi=c(2,i)+0.5d0*dyi
2893 zmedi=c(3,i)+0.5d0*dzi
2895 call eelecij(i,i+2,ees,evdw1,eel_loc)
2896 if (wturn3.gt.0.0d0) call eturn3(i,eello_turn3)
2897 num_cont_hb(i)=num_conti
2899 do i=iturn4_start,iturn4_end
2900 if (itype(i).eq.ntyp1 .or. itype(i+1).eq.ntyp1
2901 & .or. itype(i+3).eq.ntyp1
2902 & .or. itype(i+4).eq.ntyp1) cycle
2906 dx_normi=dc_norm(1,i)
2907 dy_normi=dc_norm(2,i)
2908 dz_normi=dc_norm(3,i)
2909 xmedi=c(1,i)+0.5d0*dxi
2910 ymedi=c(2,i)+0.5d0*dyi
2911 zmedi=c(3,i)+0.5d0*dzi
2912 num_conti=num_cont_hb(i)
2913 c write(iout,*) "JESTEM W PETLI"
2914 call eelecij(i,i+3,ees,evdw1,eel_loc)
2915 if (wturn4.gt.0.0d0 .and. itype(i+2).ne.ntyp1)
2916 & call eturn4(i,eello_turn4)
2917 num_cont_hb(i)=num_conti
2920 c Loop over all pairs of interacting peptide groups except i,i+2 and i,i+3
2922 do i=iatel_s,iatel_e
2924 if (itype(i).eq.ntyp1 .or. itype(i+1).eq.ntyp1) cycle
2928 dx_normi=dc_norm(1,i)
2929 dy_normi=dc_norm(2,i)
2930 dz_normi=dc_norm(3,i)
2931 xmedi=c(1,i)+0.5d0*dxi
2932 ymedi=c(2,i)+0.5d0*dyi
2933 zmedi=c(3,i)+0.5d0*dzi
2934 c write (iout,*) 'i',i,' ielstart',ielstart(i),' ielend',ielend(i)
2935 num_conti=num_cont_hb(i)
2936 do j=ielstart(i),ielend(i)
2938 c write (iout,*) 'tu wchodze',i,j,itype(i),itype(j)
2939 if (itype(j).eq.ntyp1.or. itype(j+1).eq.ntyp1) cycle
2940 call eelecij(i,j,ees,evdw1,eel_loc)
2942 num_cont_hb(i)=num_conti
2944 c write (iout,*) "Number of loop steps in EELEC:",ind
2946 cd write (iout,'(i3,3f10.5,5x,3f10.5)')
2947 cd & i,(gel_loc(k,i),k=1,3),gel_loc_loc(i)
2949 c 12/7/99 Adam eello_turn3 will be considered as a separate energy term
2950 ccc eel_loc=eel_loc+eello_turn3
2951 cd print *,"Processor",fg_rank," t_eelecij",t_eelecij
2954 C-------------------------------------------------------------------------------
2955 subroutine eelecij(i,j,ees,evdw1,eel_loc)
2956 implicit real*8 (a-h,o-z)
2957 include 'DIMENSIONS'
2961 include 'COMMON.CONTROL'
2962 include 'COMMON.IOUNITS'
2963 include 'COMMON.GEO'
2964 include 'COMMON.VAR'
2965 include 'COMMON.LOCAL'
2966 include 'COMMON.CHAIN'
2967 include 'COMMON.DERIV'
2968 include 'COMMON.INTERACT'
2969 include 'COMMON.CONTACTS'
2970 include 'COMMON.TORSION'
2971 include 'COMMON.VECTORS'
2972 include 'COMMON.FFIELD'
2973 include 'COMMON.TIME1'
2974 dimension ggg(3),gggp(3),gggm(3),erij(3),dcosb(3),dcosg(3),
2975 & erder(3,3),uryg(3,3),urzg(3,3),vryg(3,3),vrzg(3,3)
2976 double precision acipa(2,2),agg(3,4),aggi(3,4),aggi1(3,4),
2977 & aggj(3,4),aggj1(3,4),a_temp(2,2),muij(4),gmuij1(4),gmuji1(4),
2978 & gmuij2(4),gmuji2(4)
2979 common /locel/ a_temp,agg,aggi,aggi1,aggj,aggj1,a22,a23,a32,a33,
2980 & dxi,dyi,dzi,dx_normi,dy_normi,dz_normi,xmedi,ymedi,zmedi,
2982 c 4/26/02 - AL scaling factor for 1,4 repulsive VDW interactions
2984 double precision scal_el /1.0d0/
2986 double precision scal_el /0.5d0/
2989 C 13-go grudnia roku pamietnego...
2990 double precision unmat(3,3) /1.0d0,0.0d0,0.0d0,
2991 & 0.0d0,1.0d0,0.0d0,
2992 & 0.0d0,0.0d0,1.0d0/
2993 c time00=MPI_Wtime()
2994 cd write (iout,*) "eelecij",i,j
2998 if (j.eq.i+2 .and. itelj.eq.2) iteli=2
2999 aaa=app(iteli,itelj)
3000 bbb=bpp(iteli,itelj)
3001 ael6i=ael6(iteli,itelj)
3002 ael3i=ael3(iteli,itelj)
3006 dx_normj=dc_norm(1,j)
3007 dy_normj=dc_norm(2,j)
3008 dz_normj=dc_norm(3,j)
3009 xj=c(1,j)+0.5D0*dxj-xmedi
3010 yj=c(2,j)+0.5D0*dyj-ymedi
3011 zj=c(3,j)+0.5D0*dzj-zmedi
3012 rij=xj*xj+yj*yj+zj*zj
3018 cosa=dx_normi*dx_normj+dy_normi*dy_normj+dz_normi*dz_normj
3019 cosb=(xj*dx_normi+yj*dy_normi+zj*dz_normi)*rmij
3020 cosg=(xj*dx_normj+yj*dy_normj+zj*dz_normj)*rmij
3021 fac=cosa-3.0D0*cosb*cosg
3023 c 4/26/02 - AL scaling down 1,4 repulsive VDW interactions
3024 if (j.eq.i+2) ev1=scal_el*ev1
3029 el1=fac3*(4.0D0+fac*fac-3.0D0*(cosb*cosb+cosg*cosg))
3032 C 12/26/95 - for the evaluation of multi-body H-bonding interactions
3033 ees0ij=4.0D0+fac*fac-3.0D0*(cosb*cosb+cosg*cosg)
3036 cd write(iout,'(2(2i3,2x),7(1pd12.4)/2(3(1pd12.4),5x)/)')
3037 cd & iteli,i,itelj,j,aaa,bbb,ael6i,ael3i,
3038 cd & 1.0D0/dsqrt(rrmij),evdwij,eesij,
3039 cd & xmedi,ymedi,zmedi,xj,yj,zj
3041 if (energy_dec) then
3042 write (iout,'(a6,2i5,0pf7.3,2i5,2e11.3)')
3044 &,iteli,itelj,aaa,evdw1
3045 write (iout,'(a6,2i5,0pf7.3)') 'ees',i,j,eesij
3049 C Calculate contributions to the Cartesian gradient.
3052 facvdw=-6*rrmij*(ev1+evdwij)
3053 facel=-3*rrmij*(el1+eesij)
3059 * Radial derivatives. First process both termini of the fragment (i,j)
3065 c ghalf=0.5D0*ggg(k)
3066 c gelc(k,i)=gelc(k,i)+ghalf
3067 c gelc(k,j)=gelc(k,j)+ghalf
3069 c 9/28/08 AL Gradient compotents will be summed only at the end
3071 gelc_long(k,j)=gelc_long(k,j)+ggg(k)
3072 gelc_long(k,i)=gelc_long(k,i)-ggg(k)
3075 * Loop over residues i+1 thru j-1.
3079 cgrad gelc(l,k)=gelc(l,k)+ggg(l)
3086 c ghalf=0.5D0*ggg(k)
3087 c gvdwpp(k,i)=gvdwpp(k,i)+ghalf
3088 c gvdwpp(k,j)=gvdwpp(k,j)+ghalf
3090 c 9/28/08 AL Gradient compotents will be summed only at the end
3092 gvdwpp(k,j)=gvdwpp(k,j)+ggg(k)
3093 gvdwpp(k,i)=gvdwpp(k,i)-ggg(k)
3096 * Loop over residues i+1 thru j-1.
3100 cgrad gvdwpp(l,k)=gvdwpp(l,k)+ggg(l)
3107 fac=-3*rrmij*(facvdw+facvdw+facel)
3112 * Radial derivatives. First process both termini of the fragment (i,j)
3118 c ghalf=0.5D0*ggg(k)
3119 c gelc(k,i)=gelc(k,i)+ghalf
3120 c gelc(k,j)=gelc(k,j)+ghalf
3122 c 9/28/08 AL Gradient compotents will be summed only at the end
3124 gelc_long(k,j)=gelc(k,j)+ggg(k)
3125 gelc_long(k,i)=gelc(k,i)-ggg(k)
3128 * Loop over residues i+1 thru j-1.
3132 cgrad gelc(l,k)=gelc(l,k)+ggg(l)
3135 c 9/28/08 AL Gradient compotents will be summed only at the end
3140 gvdwpp(k,j)=gvdwpp(k,j)+ggg(k)
3141 gvdwpp(k,i)=gvdwpp(k,i)-ggg(k)
3147 ecosa=2.0D0*fac3*fac1+fac4
3150 ecosb=(fac3*(fac1*cosg+cosb)+cosg*fac4)
3151 ecosg=(fac3*(fac1*cosb+cosg)+cosb*fac4)
3153 dcosb(k)=rmij*(dc_norm(k,i)-erij(k)*cosb)
3154 dcosg(k)=rmij*(dc_norm(k,j)-erij(k)*cosg)
3156 cd print '(2i3,2(3(1pd14.5),3x))',i,j,(dcosb(k),k=1,3),
3157 cd & (dcosg(k),k=1,3)
3159 ggg(k)=ecosb*dcosb(k)+ecosg*dcosg(k)
3162 c ghalf=0.5D0*ggg(k)
3163 c gelc(k,i)=gelc(k,i)+ghalf
3164 c & +(ecosa*(dc_norm(k,j)-cosa*dc_norm(k,i))
3165 c & + ecosb*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1)
3166 c gelc(k,j)=gelc(k,j)+ghalf
3167 c & +(ecosa*(dc_norm(k,i)-cosa*dc_norm(k,j))
3168 c & + ecosg*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1)
3172 cgrad gelc(l,k)=gelc(l,k)+ggg(l)
3177 & +(ecosa*(dc_norm(k,j)-cosa*dc_norm(k,i))
3178 & + ecosb*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1)
3180 & +(ecosa*(dc_norm(k,i)-cosa*dc_norm(k,j))
3181 & + ecosg*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1)
3182 gelc_long(k,j)=gelc_long(k,j)+ggg(k)
3183 gelc_long(k,i)=gelc_long(k,i)-ggg(k)
3185 IF (wel_loc.gt.0.0d0 .or. wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0
3186 & .or. wcorr6.gt.0.0d0 .or. wturn3.gt.0.0d0
3187 & .or. wturn4.gt.0.0d0 .or. wturn6.gt.0.0d0) THEN
3189 C 9/25/99 Mixed third-order local-electrostatic terms. The local-interaction
3190 C energy of a peptide unit is assumed in the form of a second-order
3191 C Fourier series in the angles lambda1 and lambda2 (see Nishikawa et al.
3192 C Macromolecules, 1974, 7, 797-806 for definition). This correlation terms
3193 C are computed for EVERY pair of non-contiguous peptide groups.
3196 if (j.lt.nres-1) then
3208 muij(kkk)=mu(k,i)*mu(l,j)
3210 gmuij1(kkk)=gtb1(k,i+1)*mu(l,j)
3211 c write(iout,*) 'kkk=', gtb1(k,i)*mu(l,j),gtb1(k,i),k,i
3212 gmuij2(kkk)=gUb2(k,i)*mu(l,j)
3213 gmuji1(kkk)=mu(k,i)*gtb1(l,j+1)
3214 c write(iout,*) 'kkk=', gtb1(k,i)*mu(l,j),gtb1(l,j),l,j
3215 gmuji2(kkk)=mu(k,i)*gUb2(l,j)
3219 cd write (iout,*) 'EELEC: i',i,' j',j
3220 cd write (iout,*) 'j',j,' j1',j1,' j2',j2
3221 cd write(iout,*) 'muij',muij
3222 ury=scalar(uy(1,i),erij)
3223 urz=scalar(uz(1,i),erij)
3224 vry=scalar(uy(1,j),erij)
3225 vrz=scalar(uz(1,j),erij)
3226 a22=scalar(uy(1,i),uy(1,j))-3*ury*vry
3227 a23=scalar(uy(1,i),uz(1,j))-3*ury*vrz
3228 a32=scalar(uz(1,i),uy(1,j))-3*urz*vry
3229 a33=scalar(uz(1,i),uz(1,j))-3*urz*vrz
3230 fac=dsqrt(-ael6i)*r3ij
3235 cd write (iout,'(4i5,4f10.5)')
3236 cd & i,itortyp(itype(i)),j,itortyp(itype(j)),a22,a23,a32,a33
3237 cd write (iout,'(6f10.5)') (muij(k),k=1,4),fac,eel_loc_ij
3238 cd write (iout,'(2(3f10.5,5x)/2(3f10.5,5x))') uy(:,i),uz(:,i),
3239 cd & uy(:,j),uz(:,j)
3240 cd write (iout,'(4f10.5)')
3241 cd & scalar(uy(1,i),uy(1,j)),scalar(uy(1,i),uz(1,j)),
3242 cd & scalar(uz(1,i),uy(1,j)),scalar(uz(1,i),uz(1,j))
3243 cd write (iout,'(4f10.5)') ury,urz,vry,vrz
3244 cd write (iout,'(9f10.5/)')
3245 cd & fac22,a22,fac23,a23,fac32,a32,fac33,a33,eel_loc_ij
3246 C Derivatives of the elements of A in virtual-bond vectors
3247 call unormderiv(erij(1),unmat(1,1),rmij,erder(1,1))
3249 uryg(k,1)=scalar(erder(1,k),uy(1,i))
3250 uryg(k,2)=scalar(uygrad(1,k,1,i),erij(1))
3251 uryg(k,3)=scalar(uygrad(1,k,2,i),erij(1))
3252 urzg(k,1)=scalar(erder(1,k),uz(1,i))
3253 urzg(k,2)=scalar(uzgrad(1,k,1,i),erij(1))
3254 urzg(k,3)=scalar(uzgrad(1,k,2,i),erij(1))
3255 vryg(k,1)=scalar(erder(1,k),uy(1,j))
3256 vryg(k,2)=scalar(uygrad(1,k,1,j),erij(1))
3257 vryg(k,3)=scalar(uygrad(1,k,2,j),erij(1))
3258 vrzg(k,1)=scalar(erder(1,k),uz(1,j))
3259 vrzg(k,2)=scalar(uzgrad(1,k,1,j),erij(1))
3260 vrzg(k,3)=scalar(uzgrad(1,k,2,j),erij(1))
3262 C Compute radial contributions to the gradient
3280 C Add the contributions coming from er
3283 agg(k,1)=agg(k,1)+fac3*(uryg(k,1)*vry+vryg(k,1)*ury)
3284 agg(k,2)=agg(k,2)+fac3*(uryg(k,1)*vrz+vrzg(k,1)*ury)
3285 agg(k,3)=agg(k,3)+fac3*(urzg(k,1)*vry+vryg(k,1)*urz)
3286 agg(k,4)=agg(k,4)+fac3*(urzg(k,1)*vrz+vrzg(k,1)*urz)
3289 C Derivatives in DC(i)
3290 cgrad ghalf1=0.5d0*agg(k,1)
3291 cgrad ghalf2=0.5d0*agg(k,2)
3292 cgrad ghalf3=0.5d0*agg(k,3)
3293 cgrad ghalf4=0.5d0*agg(k,4)
3294 aggi(k,1)=fac*(scalar(uygrad(1,k,1,i),uy(1,j))
3295 & -3.0d0*uryg(k,2)*vry)!+ghalf1
3296 aggi(k,2)=fac*(scalar(uygrad(1,k,1,i),uz(1,j))
3297 & -3.0d0*uryg(k,2)*vrz)!+ghalf2
3298 aggi(k,3)=fac*(scalar(uzgrad(1,k,1,i),uy(1,j))
3299 & -3.0d0*urzg(k,2)*vry)!+ghalf3
3300 aggi(k,4)=fac*(scalar(uzgrad(1,k,1,i),uz(1,j))
3301 & -3.0d0*urzg(k,2)*vrz)!+ghalf4
3302 C Derivatives in DC(i+1)
3303 aggi1(k,1)=fac*(scalar(uygrad(1,k,2,i),uy(1,j))
3304 & -3.0d0*uryg(k,3)*vry)!+agg(k,1)
3305 aggi1(k,2)=fac*(scalar(uygrad(1,k,2,i),uz(1,j))
3306 & -3.0d0*uryg(k,3)*vrz)!+agg(k,2)
3307 aggi1(k,3)=fac*(scalar(uzgrad(1,k,2,i),uy(1,j))
3308 & -3.0d0*urzg(k,3)*vry)!+agg(k,3)
3309 aggi1(k,4)=fac*(scalar(uzgrad(1,k,2,i),uz(1,j))
3310 & -3.0d0*urzg(k,3)*vrz)!+agg(k,4)
3311 C Derivatives in DC(j)
3312 aggj(k,1)=fac*(scalar(uygrad(1,k,1,j),uy(1,i))
3313 & -3.0d0*vryg(k,2)*ury)!+ghalf1
3314 aggj(k,2)=fac*(scalar(uzgrad(1,k,1,j),uy(1,i))
3315 & -3.0d0*vrzg(k,2)*ury)!+ghalf2
3316 aggj(k,3)=fac*(scalar(uygrad(1,k,1,j),uz(1,i))
3317 & -3.0d0*vryg(k,2)*urz)!+ghalf3
3318 aggj(k,4)=fac*(scalar(uzgrad(1,k,1,j),uz(1,i))
3319 & -3.0d0*vrzg(k,2)*urz)!+ghalf4
3320 C Derivatives in DC(j+1) or DC(nres-1)
3321 aggj1(k,1)=fac*(scalar(uygrad(1,k,2,j),uy(1,i))
3322 & -3.0d0*vryg(k,3)*ury)
3323 aggj1(k,2)=fac*(scalar(uzgrad(1,k,2,j),uy(1,i))
3324 & -3.0d0*vrzg(k,3)*ury)
3325 aggj1(k,3)=fac*(scalar(uygrad(1,k,2,j),uz(1,i))
3326 & -3.0d0*vryg(k,3)*urz)
3327 aggj1(k,4)=fac*(scalar(uzgrad(1,k,2,j),uz(1,i))
3328 & -3.0d0*vrzg(k,3)*urz)
3329 cgrad if (j.eq.nres-1 .and. i.lt.j-2) then
3331 cgrad aggj1(k,l)=aggj1(k,l)+agg(k,l)
3344 aggi(k,l)=-aggi(k,l)
3345 aggi1(k,l)=-aggi1(k,l)
3346 aggj(k,l)=-aggj(k,l)
3347 aggj1(k,l)=-aggj1(k,l)
3350 if (j.lt.nres-1) then
3356 aggi(k,l)=-aggi(k,l)
3357 aggi1(k,l)=-aggi1(k,l)
3358 aggj(k,l)=-aggj(k,l)
3359 aggj1(k,l)=-aggj1(k,l)
3370 aggi(k,l)=-aggi(k,l)
3371 aggi1(k,l)=-aggi1(k,l)
3372 aggj(k,l)=-aggj(k,l)
3373 aggj1(k,l)=-aggj1(k,l)
3378 IF (wel_loc.gt.0.0d0) THEN
3379 c if ((i.eq.8).and.(j.eq.14)) then
3380 C Contribution to the local-electrostatic energy coming from the i-j pair
3381 eel_loc_ij=a22*muij(1)+a23*muij(2)+a32*muij(3)
3383 C Calculate patrial derivative for theta angle
3385 geel_loc_ij=a22*gmuij1(1)
3389 c write(iout,*) "derivative over thatai"
3390 c write(iout,*) a22*gmuij1(1), a23*gmuij1(2) ,a32*gmuij1(3),
3392 gloc(nphi+i,icg)=gloc(nphi+i,icg)+
3393 & geel_loc_ij*wel_loc
3394 c write(iout,*) "derivative over thatai-1"
3395 c write(iout,*) a22*gmuij2(1), a23*gmuij2(2) ,a32*gmuij2(3),
3397 geel_loc_ij=a22*gmuij2(1)+a23*gmuij2(2)+a32*gmuij2(3)
3399 gloc(nphi+i-1,icg)=gloc(nphi+i-1,icg)+
3400 & geel_loc_ij*wel_loc
3401 geel_loc_ji=a22*gmuji1(1)+a23*gmuji1(2)+a32*gmuji1(3)
3403 c write(iout,*) "derivative over thataj"
3404 c write(iout,*) a22*gmuji1(1), a23*gmuji1(2) ,a32*gmuji1(3),
3407 gloc(nphi+j,icg)=gloc(nphi+j,icg)+
3408 & geel_loc_ji*wel_loc
3409 geel_loc_ji=a22*gmuji2(1)+a23*gmuji2(2)+a32*gmuji2(3)
3411 c write(iout,*) "derivative over thataj-1"
3412 c write(iout,*) a22*gmuji2(1), a23*gmuji2(2) ,a32*gmuji2(3),
3414 gloc(nphi+j-1,icg)=gloc(nphi+j-1,icg)+
3415 & geel_loc_ji*wel_loc
3417 cd write (iout,*) 'i',i,' j',j,' eel_loc_ij',eel_loc_ij
3419 if (energy_dec) write (iout,'(a6,2i5,0pf7.3)')
3420 & 'eelloc',i,j,eel_loc_ij
3421 c write (iout,*) a22,muij(1),a23,muij(2),a32,muij(3)
3423 eel_loc=eel_loc+eel_loc_ij
3424 C Partial derivatives in virtual-bond dihedral angles gamma
3426 & gel_loc_loc(i-1)=gel_loc_loc(i-1)+
3427 & a22*muder(1,i)*mu(1,j)+a23*muder(1,i)*mu(2,j)
3428 & +a32*muder(2,i)*mu(1,j)+a33*muder(2,i)*mu(2,j)
3429 gel_loc_loc(j-1)=gel_loc_loc(j-1)+
3430 & a22*mu(1,i)*muder(1,j)+a23*mu(1,i)*muder(2,j)
3431 & +a32*mu(2,i)*muder(1,j)+a33*mu(2,i)*muder(2,j)
3432 C Derivatives of eello in DC(i+1) thru DC(j-1) or DC(nres-2)
3434 ggg(l)=agg(l,1)*muij(1)+
3435 & agg(l,2)*muij(2)+agg(l,3)*muij(3)+agg(l,4)*muij(4)
3436 gel_loc_long(l,j)=gel_loc_long(l,j)+ggg(l)
3437 gel_loc_long(l,i)=gel_loc_long(l,i)-ggg(l)
3438 cgrad ghalf=0.5d0*ggg(l)
3439 cgrad gel_loc(l,i)=gel_loc(l,i)+ghalf
3440 cgrad gel_loc(l,j)=gel_loc(l,j)+ghalf
3444 cgrad gel_loc(l,k)=gel_loc(l,k)+ggg(l)
3447 C Remaining derivatives of eello
3449 gel_loc(l,i)=gel_loc(l,i)+aggi(l,1)*muij(1)+
3450 & aggi(l,2)*muij(2)+aggi(l,3)*muij(3)+aggi(l,4)*muij(4)
3451 gel_loc(l,i+1)=gel_loc(l,i+1)+aggi1(l,1)*muij(1)+
3452 & aggi1(l,2)*muij(2)+aggi1(l,3)*muij(3)+aggi1(l,4)*muij(4)
3453 gel_loc(l,j)=gel_loc(l,j)+aggj(l,1)*muij(1)+
3454 & aggj(l,2)*muij(2)+aggj(l,3)*muij(3)+aggj(l,4)*muij(4)
3455 gel_loc(l,j1)=gel_loc(l,j1)+aggj1(l,1)*muij(1)+
3456 & aggj1(l,2)*muij(2)+aggj1(l,3)*muij(3)+aggj1(l,4)*muij(4)
3460 C Change 12/26/95 to calculate four-body contributions to H-bonding energy
3461 c if (j.gt.i+1 .and. num_conti.le.maxconts) then
3462 if (wcorr+wcorr4+wcorr5+wcorr6.gt.0.0d0
3463 & .and. num_conti.le.maxconts) then
3464 c write (iout,*) i,j," entered corr"
3466 C Calculate the contact function. The ith column of the array JCONT will
3467 C contain the numbers of atoms that make contacts with the atom I (of numbers
3468 C greater than I). The arrays FACONT and GACONT will contain the values of
3469 C the contact function and its derivative.
3470 c r0ij=1.02D0*rpp(iteli,itelj)
3471 c r0ij=1.11D0*rpp(iteli,itelj)
3472 r0ij=2.20D0*rpp(iteli,itelj)
3473 c r0ij=1.55D0*rpp(iteli,itelj)
3474 call gcont(rij,r0ij,1.0D0,0.2d0*r0ij,fcont,fprimcont)
3475 if (fcont.gt.0.0D0) then
3476 num_conti=num_conti+1
3477 if (num_conti.gt.maxconts) then
3478 write (iout,*) 'WARNING - max. # of contacts exceeded;',
3479 & ' will skip next contacts for this conf.'
3481 jcont_hb(num_conti,i)=j
3482 cd write (iout,*) "i",i," j",j," num_conti",num_conti,
3483 cd & " jcont_hb",jcont_hb(num_conti,i)
3484 IF (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or.
3485 & wcorr6.gt.0.0d0 .or. wturn6.gt.0.0d0) THEN
3486 C 9/30/99 (AL) - store components necessary to evaluate higher-order loc-el
3488 d_cont(num_conti,i)=rij
3489 cd write (2,'(3e15.5)') rij,r0ij+0.2d0*r0ij,rij
3490 C --- Electrostatic-interaction matrix ---
3491 a_chuj(1,1,num_conti,i)=a22
3492 a_chuj(1,2,num_conti,i)=a23
3493 a_chuj(2,1,num_conti,i)=a32
3494 a_chuj(2,2,num_conti,i)=a33
3495 C --- Gradient of rij
3497 grij_hb_cont(kkk,num_conti,i)=erij(kkk)
3504 a_chuj_der(k,l,m,1,num_conti,i)=agg(m,kkll)
3505 a_chuj_der(k,l,m,2,num_conti,i)=aggi(m,kkll)
3506 a_chuj_der(k,l,m,3,num_conti,i)=aggi1(m,kkll)
3507 a_chuj_der(k,l,m,4,num_conti,i)=aggj(m,kkll)
3508 a_chuj_der(k,l,m,5,num_conti,i)=aggj1(m,kkll)
3513 IF (wcorr4.eq.0.0d0 .and. wcorr.gt.0.0d0) THEN
3514 C Calculate contact energies
3516 wij=cosa-3.0D0*cosb*cosg
3519 c fac3=dsqrt(-ael6i)/r0ij**3
3520 fac3=dsqrt(-ael6i)*r3ij
3521 c ees0pij=dsqrt(4.0D0+cosa4+wij*wij-3.0D0*cosbg1*cosbg1)
3522 ees0tmp=4.0D0+cosa4+wij*wij-3.0D0*cosbg1*cosbg1
3523 if (ees0tmp.gt.0) then
3524 ees0pij=dsqrt(ees0tmp)
3528 c ees0mij=dsqrt(4.0D0-cosa4+wij*wij-3.0D0*cosbg2*cosbg2)
3529 ees0tmp=4.0D0-cosa4+wij*wij-3.0D0*cosbg2*cosbg2
3530 if (ees0tmp.gt.0) then
3531 ees0mij=dsqrt(ees0tmp)
3536 ees0p(num_conti,i)=0.5D0*fac3*(ees0pij+ees0mij)
3537 ees0m(num_conti,i)=0.5D0*fac3*(ees0pij-ees0mij)
3538 C Diagnostics. Comment out or remove after debugging!
3539 c ees0p(num_conti,i)=0.5D0*fac3*ees0pij
3540 c ees0m(num_conti,i)=0.5D0*fac3*ees0mij
3541 c ees0m(num_conti,i)=0.0D0
3543 c write (iout,*) 'i=',i,' j=',j,' rij=',rij,' r0ij=',r0ij,
3544 c & ' ees0ij=',ees0p(num_conti,i),ees0m(num_conti,i),' fcont=',fcont
3545 C Angular derivatives of the contact function
3546 ees0pij1=fac3/ees0pij
3547 ees0mij1=fac3/ees0mij
3548 fac3p=-3.0D0*fac3*rrmij
3549 ees0pijp=0.5D0*fac3p*(ees0pij+ees0mij)
3550 ees0mijp=0.5D0*fac3p*(ees0pij-ees0mij)
3552 ecosa1= ees0pij1*( 1.0D0+0.5D0*wij)
3553 ecosb1=-1.5D0*ees0pij1*(wij*cosg+cosbg1)
3554 ecosg1=-1.5D0*ees0pij1*(wij*cosb+cosbg1)
3555 ecosa2= ees0mij1*(-1.0D0+0.5D0*wij)
3556 ecosb2=-1.5D0*ees0mij1*(wij*cosg+cosbg2)
3557 ecosg2=-1.5D0*ees0mij1*(wij*cosb-cosbg2)
3558 ecosap=ecosa1+ecosa2
3559 ecosbp=ecosb1+ecosb2
3560 ecosgp=ecosg1+ecosg2
3561 ecosam=ecosa1-ecosa2
3562 ecosbm=ecosb1-ecosb2
3563 ecosgm=ecosg1-ecosg2
3572 facont_hb(num_conti,i)=fcont
3573 fprimcont=fprimcont/rij
3574 cd facont_hb(num_conti,i)=1.0D0
3575 C Following line is for diagnostics.
3578 dcosb(k)=rmij*(dc_norm(k,i)-erij(k)*cosb)
3579 dcosg(k)=rmij*(dc_norm(k,j)-erij(k)*cosg)
3582 gggp(k)=ecosbp*dcosb(k)+ecosgp*dcosg(k)
3583 gggm(k)=ecosbm*dcosb(k)+ecosgm*dcosg(k)
3585 gggp(1)=gggp(1)+ees0pijp*xj
3586 gggp(2)=gggp(2)+ees0pijp*yj
3587 gggp(3)=gggp(3)+ees0pijp*zj
3588 gggm(1)=gggm(1)+ees0mijp*xj
3589 gggm(2)=gggm(2)+ees0mijp*yj
3590 gggm(3)=gggm(3)+ees0mijp*zj
3591 C Derivatives due to the contact function
3592 gacont_hbr(1,num_conti,i)=fprimcont*xj
3593 gacont_hbr(2,num_conti,i)=fprimcont*yj
3594 gacont_hbr(3,num_conti,i)=fprimcont*zj
3597 c 10/24/08 cgrad and ! comments indicate the parts of the code removed
3598 c following the change of gradient-summation algorithm.
3600 cgrad ghalfp=0.5D0*gggp(k)
3601 cgrad ghalfm=0.5D0*gggm(k)
3602 gacontp_hb1(k,num_conti,i)=!ghalfp
3603 & +(ecosap*(dc_norm(k,j)-cosa*dc_norm(k,i))
3604 & + ecosbp*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1)
3605 gacontp_hb2(k,num_conti,i)=!ghalfp
3606 & +(ecosap*(dc_norm(k,i)-cosa*dc_norm(k,j))
3607 & + ecosgp*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1)
3608 gacontp_hb3(k,num_conti,i)=gggp(k)
3609 gacontm_hb1(k,num_conti,i)=!ghalfm
3610 & +(ecosam*(dc_norm(k,j)-cosa*dc_norm(k,i))
3611 & + ecosbm*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1)
3612 gacontm_hb2(k,num_conti,i)=!ghalfm
3613 & +(ecosam*(dc_norm(k,i)-cosa*dc_norm(k,j))
3614 & + ecosgm*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1)
3615 gacontm_hb3(k,num_conti,i)=gggm(k)
3617 C Diagnostics. Comment out or remove after debugging!
3619 cdiag gacontp_hb1(k,num_conti,i)=0.0D0
3620 cdiag gacontp_hb2(k,num_conti,i)=0.0D0
3621 cdiag gacontp_hb3(k,num_conti,i)=0.0D0
3622 cdiag gacontm_hb1(k,num_conti,i)=0.0D0
3623 cdiag gacontm_hb2(k,num_conti,i)=0.0D0
3624 cdiag gacontm_hb3(k,num_conti,i)=0.0D0
3627 endif ! num_conti.le.maxconts
3630 if (wturn3.gt.0.0d0 .or. wturn4.gt.0.0d0) then
3633 ghalf=0.5d0*agg(l,k)
3634 aggi(l,k)=aggi(l,k)+ghalf
3635 aggi1(l,k)=aggi1(l,k)+agg(l,k)
3636 aggj(l,k)=aggj(l,k)+ghalf
3639 if (j.eq.nres-1 .and. i.lt.j-2) then
3642 aggj1(l,k)=aggj1(l,k)+agg(l,k)
3647 c t_eelecij=t_eelecij+MPI_Wtime()-time00
3650 C-----------------------------------------------------------------------------
3651 subroutine eturn3(i,eello_turn3)
3652 C Third- and fourth-order contributions from turns
3653 implicit real*8 (a-h,o-z)
3654 include 'DIMENSIONS'
3655 include 'COMMON.IOUNITS'
3656 include 'COMMON.GEO'
3657 include 'COMMON.VAR'
3658 include 'COMMON.LOCAL'
3659 include 'COMMON.CHAIN'
3660 include 'COMMON.DERIV'
3661 include 'COMMON.INTERACT'
3662 include 'COMMON.CONTACTS'
3663 include 'COMMON.TORSION'
3664 include 'COMMON.VECTORS'
3665 include 'COMMON.FFIELD'
3666 include 'COMMON.CONTROL'
3668 double precision auxmat(2,2),auxmat1(2,2),auxmat2(2,2),pizda(2,2),
3669 & e1t(2,2),e2t(2,2),e3t(2,2),e1tder(2,2),e2tder(2,2),e3tder(2,2),
3670 & e1a(2,2),ae3(2,2),ae3e2(2,2),auxvec(2),auxvec1(2),gpizda1(2,2),
3671 & gpizda2(2,2),auxgmat1(2,2),auxgmatt1(2,2),
3672 & auxgmat2(2,2),auxgmatt2(2,2)
3673 double precision agg(3,4),aggi(3,4),aggi1(3,4),
3674 & aggj(3,4),aggj1(3,4),a_temp(2,2),auxmat3(2,2)
3675 common /locel/ a_temp,agg,aggi,aggi1,aggj,aggj1,a22,a23,a32,a33,
3676 & dxi,dyi,dzi,dx_normi,dy_normi,dz_normi,xmedi,ymedi,zmedi,
3679 c write (iout,*) "eturn3",i,j,j1,j2
3684 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
3686 C Third-order contributions
3693 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
3694 cd call checkint_turn3(i,a_temp,eello_turn3_num)
3695 call matmat2(EUg(1,1,i+1),EUg(1,1,i+2),auxmat(1,1))
3696 c auxalary matices for theta gradient
3697 c auxalary matrix for i+1 and constant i+2
3698 call matmat2(gtEUg(1,1,i+1),EUg(1,1,i+2),auxgmat1(1,1))
3699 c auxalary matrix for i+2 and constant i+1
3700 call matmat2(EUg(1,1,i+1),gtEUg(1,1,i+2),auxgmat2(1,1))
3701 call transpose2(auxmat(1,1),auxmat1(1,1))
3702 call transpose2(auxgmat1(1,1),auxgmatt1(1,1))
3703 call transpose2(auxgmat2(1,1),auxgmatt2(1,1))
3704 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
3705 call matmat2(a_temp(1,1),auxgmatt1(1,1),gpizda1(1,1))
3706 call matmat2(a_temp(1,1),auxgmatt2(1,1),gpizda2(1,1))
3707 eello_turn3=eello_turn3+0.5d0*(pizda(1,1)+pizda(2,2))
3708 C Derivatives in theta
3709 gloc(nphi+i,icg)=gloc(nphi+i,icg)
3710 & +0.5d0*(gpizda1(1,1)+gpizda1(2,2))*wturn3
3711 gloc(nphi+i+1,icg)=gloc(nphi+i+1,icg)
3712 & +0.5d0*(gpizda2(1,1)+gpizda2(2,2))*wturn3
3714 if (energy_dec) write (iout,'(a6,2i5,0pf7.3)')
3715 & 'eturn3',i,j,0.5d0*(pizda(1,1)+pizda(2,2))
3716 cd write (2,*) 'i,',i,' j',j,'eello_turn3',
3717 cd & 0.5d0*(pizda(1,1)+pizda(2,2)),
3718 cd & ' eello_turn3_num',4*eello_turn3_num
3719 C Derivatives in gamma(i)
3720 call matmat2(EUgder(1,1,i+1),EUg(1,1,i+2),auxmat2(1,1))
3721 call transpose2(auxmat2(1,1),auxmat3(1,1))
3722 call matmat2(a_temp(1,1),auxmat3(1,1),pizda(1,1))
3723 gel_loc_turn3(i)=gel_loc_turn3(i)+0.5d0*(pizda(1,1)+pizda(2,2))
3724 C Derivatives in gamma(i+1)
3725 call matmat2(EUg(1,1,i+1),EUgder(1,1,i+2),auxmat2(1,1))
3726 call transpose2(auxmat2(1,1),auxmat3(1,1))
3727 call matmat2(a_temp(1,1),auxmat3(1,1),pizda(1,1))
3728 gel_loc_turn3(i+1)=gel_loc_turn3(i+1)
3729 & +0.5d0*(pizda(1,1)+pizda(2,2))
3730 C Cartesian derivatives
3732 c ghalf1=0.5d0*agg(l,1)
3733 c ghalf2=0.5d0*agg(l,2)
3734 c ghalf3=0.5d0*agg(l,3)
3735 c ghalf4=0.5d0*agg(l,4)
3736 a_temp(1,1)=aggi(l,1)!+ghalf1
3737 a_temp(1,2)=aggi(l,2)!+ghalf2
3738 a_temp(2,1)=aggi(l,3)!+ghalf3
3739 a_temp(2,2)=aggi(l,4)!+ghalf4
3740 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
3741 gcorr3_turn(l,i)=gcorr3_turn(l,i)
3742 & +0.5d0*(pizda(1,1)+pizda(2,2))
3743 a_temp(1,1)=aggi1(l,1)!+agg(l,1)
3744 a_temp(1,2)=aggi1(l,2)!+agg(l,2)
3745 a_temp(2,1)=aggi1(l,3)!+agg(l,3)
3746 a_temp(2,2)=aggi1(l,4)!+agg(l,4)
3747 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
3748 gcorr3_turn(l,i+1)=gcorr3_turn(l,i+1)
3749 & +0.5d0*(pizda(1,1)+pizda(2,2))
3750 a_temp(1,1)=aggj(l,1)!+ghalf1
3751 a_temp(1,2)=aggj(l,2)!+ghalf2
3752 a_temp(2,1)=aggj(l,3)!+ghalf3
3753 a_temp(2,2)=aggj(l,4)!+ghalf4
3754 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
3755 gcorr3_turn(l,j)=gcorr3_turn(l,j)
3756 & +0.5d0*(pizda(1,1)+pizda(2,2))
3757 a_temp(1,1)=aggj1(l,1)
3758 a_temp(1,2)=aggj1(l,2)
3759 a_temp(2,1)=aggj1(l,3)
3760 a_temp(2,2)=aggj1(l,4)
3761 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
3762 gcorr3_turn(l,j1)=gcorr3_turn(l,j1)
3763 & +0.5d0*(pizda(1,1)+pizda(2,2))
3767 C-------------------------------------------------------------------------------
3768 subroutine eturn4(i,eello_turn4)
3769 C Third- and fourth-order contributions from turns
3770 implicit real*8 (a-h,o-z)
3771 include 'DIMENSIONS'
3772 include 'COMMON.IOUNITS'
3773 include 'COMMON.GEO'
3774 include 'COMMON.VAR'
3775 include 'COMMON.LOCAL'
3776 include 'COMMON.CHAIN'
3777 include 'COMMON.DERIV'
3778 include 'COMMON.INTERACT'
3779 include 'COMMON.CONTACTS'
3780 include 'COMMON.TORSION'
3781 include 'COMMON.VECTORS'
3782 include 'COMMON.FFIELD'
3783 include 'COMMON.CONTROL'
3785 double precision auxmat(2,2),auxmat1(2,2),auxmat2(2,2),pizda(2,2),
3786 & e1t(2,2),e2t(2,2),e3t(2,2),e1tder(2,2),e2tder(2,2),e3tder(2,2),
3787 & e1a(2,2),ae3(2,2),ae3e2(2,2),auxvec(2),auxvec1(2),auxgvec(2),
3788 & auxgEvec1(2),auxgEvec2(2),auxgEvec3(2),
3789 & gte1t(2,2),gte2t(2,2),gte3t(2,2),
3790 & gte1a(2,2),gtae3(2,2),gtae3e2(2,2), ae3gte2(2,2),
3791 & gtEpizda1(2,2),gtEpizda2(2,2),gtEpizda3(2,2)
3792 double precision agg(3,4),aggi(3,4),aggi1(3,4),
3793 & aggj(3,4),aggj1(3,4),a_temp(2,2),auxmat3(2,2)
3794 common /locel/ a_temp,agg,aggi,aggi1,aggj,aggj1,a22,a23,a32,a33,
3795 & dxi,dyi,dzi,dx_normi,dy_normi,dz_normi,xmedi,ymedi,zmedi,
3798 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
3800 C Fourth-order contributions
3808 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
3809 cd call checkint_turn4(i,a_temp,eello_turn4_num)
3810 c write (iout,*) "eturn4 i",i," j",j," j1",j1," j2",j2
3811 c write(iout,*)"WCHODZE W PROGRAM"
3816 iti1=itortyp(itype(i+1))
3817 iti2=itortyp(itype(i+2))
3818 iti3=itortyp(itype(i+3))
3819 c write(iout,*) "iti1",iti1," iti2",iti2," iti3",iti3
3820 call transpose2(EUg(1,1,i+1),e1t(1,1))
3821 call transpose2(Eug(1,1,i+2),e2t(1,1))
3822 call transpose2(Eug(1,1,i+3),e3t(1,1))
3823 C Ematrix derivative in theta
3824 call transpose2(gtEUg(1,1,i+1),gte1t(1,1))
3825 call transpose2(gtEug(1,1,i+2),gte2t(1,1))
3826 call transpose2(gtEug(1,1,i+3),gte3t(1,1))
3827 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
3828 c eta1 in derivative theta
3829 call matmat2(gte1t(1,1),a_temp(1,1),gte1a(1,1))
3830 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
3831 c auxgvec is derivative of Ub2 so i+3 theta
3832 call matvec2(e1a(1,1),gUb2(1,i+3),auxgvec(1))
3833 c auxalary matrix of E i+1
3834 call matvec2(gte1a(1,1),Ub2(1,i+3),auxgEvec1(1))
3837 s1=scalar2(b1(1,i+2),auxvec(1))
3838 c derivative of theta i+2 with constant i+3
3839 gs23=scalar2(gtb1(1,i+2),auxvec(1))
3840 c derivative of theta i+2 with constant i+2
3841 gs32=scalar2(b1(1,i+2),auxgvec(1))
3842 c derivative of E matix in theta of i+1
3843 gsE13=scalar2(b1(1,i+2),auxgEvec1(1))
3845 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
3846 c ea31 in derivative theta
3847 call matmat2(a_temp(1,1),gte3t(1,1),gtae3(1,1))
3848 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
3849 c auxilary matrix auxgvec of Ub2 with constant E matirx
3850 call matvec2(ae3(1,1),gUb2(1,i+2),auxgvec(1))
3851 c auxilary matrix auxgEvec1 of E matix with Ub2 constant
3852 call matvec2(gtae3(1,1),Ub2(1,i+2),auxgEvec3(1))
3856 s2=scalar2(b1(1,i+1),auxvec(1))
3857 c derivative of theta i+1 with constant i+3
3858 gs13=scalar2(gtb1(1,i+1),auxvec(1))
3859 c derivative of theta i+2 with constant i+1
3860 gs21=scalar2(b1(1,i+1),auxgvec(1))
3861 c derivative of theta i+3 with constant i+1
3862 gsE31=scalar2(b1(1,i+1),auxgEvec3(1))
3863 c write(iout,*) gs1,gs2,'i=',i,auxgvec(1),gUb2(1,i+2),gtb1(1,i+2),
3865 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
3866 c two derivatives over diffetent matrices
3867 c gtae3e2 is derivative over i+3
3868 call matmat2(gtae3(1,1),e2t(1,1),gtae3e2(1,1))
3869 c ae3gte2 is derivative over i+2
3870 call matmat2(ae3(1,1),gte2t(1,1),ae3gte2(1,1))
3871 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
3872 c three possible derivative over theta E matices
3874 call matmat2(ae3e2(1,1),gte1t(1,1),gtEpizda1(1,1))
3876 call matmat2(ae3gte2(1,1),e1t(1,1),gtEpizda2(1,1))
3878 call matmat2(gtae3e2(1,1),e1t(1,1),gtEpizda3(1,1))
3879 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3881 gsEE1=0.5d0*(gtEpizda1(1,1)+gtEpizda1(2,2))
3882 gsEE2=0.5d0*(gtEpizda2(1,1)+gtEpizda2(2,2))
3883 gsEE3=0.5d0*(gtEpizda3(1,1)+gtEpizda3(2,2))
3885 eello_turn4=eello_turn4-(s1+s2+s3)
3887 gloc(nphi+i,icg)=gloc(nphi+i,icg)
3888 & -(gs13+gsE13+gsEE1)*wturn4
3889 gloc(nphi+i+1,icg)= gloc(nphi+i+1,icg)
3890 & -(gs23+gs21+gsEE2)*wturn4
3891 gloc(nphi+i+2,icg)= gloc(nphi+i+2,icg)
3892 & -(gs32+gsE31+gsEE3)*wturn4
3893 c gloc(nphi+i+1,icg)=gloc(nphi+i+1,icg)-
3896 if (energy_dec) write (iout,'(a6,2i5,0pf7.3)')
3897 & 'eturn4',i,j,-(s1+s2+s3)
3898 c write (iout,*) 'i,',i,' j',j,'eello_turn4',-(s1+s2+s3),
3899 c & ' eello_turn4_num',8*eello_turn4_num
3900 C Derivatives in gamma(i)
3901 call transpose2(EUgder(1,1,i+1),e1tder(1,1))
3902 call matmat2(e1tder(1,1),a_temp(1,1),auxmat(1,1))
3903 call matvec2(auxmat(1,1),Ub2(1,i+3),auxvec(1))
3904 s1=scalar2(b1(1,i+2),auxvec(1))
3905 call matmat2(ae3e2(1,1),e1tder(1,1),pizda(1,1))
3906 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3907 gel_loc_turn4(i)=gel_loc_turn4(i)-(s1+s3)
3908 C Derivatives in gamma(i+1)
3909 call transpose2(EUgder(1,1,i+2),e2tder(1,1))
3910 call matvec2(ae3(1,1),Ub2der(1,i+2),auxvec(1))
3911 s2=scalar2(b1(1,i+1),auxvec(1))
3912 call matmat2(ae3(1,1),e2tder(1,1),auxmat(1,1))
3913 call matmat2(auxmat(1,1),e1t(1,1),pizda(1,1))
3914 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3915 gel_loc_turn4(i+1)=gel_loc_turn4(i+1)-(s2+s3)
3916 C Derivatives in gamma(i+2)
3917 call transpose2(EUgder(1,1,i+3),e3tder(1,1))
3918 call matvec2(e1a(1,1),Ub2der(1,i+3),auxvec(1))
3919 s1=scalar2(b1(1,i+2),auxvec(1))
3920 call matmat2(a_temp(1,1),e3tder(1,1),auxmat(1,1))
3921 call matvec2(auxmat(1,1),Ub2(1,i+2),auxvec(1))
3922 s2=scalar2(b1(1,i+1),auxvec(1))
3923 call matmat2(auxmat(1,1),e2t(1,1),auxmat3(1,1))
3924 call matmat2(auxmat3(1,1),e1t(1,1),pizda(1,1))
3925 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3926 gel_loc_turn4(i+2)=gel_loc_turn4(i+2)-(s1+s2+s3)
3927 C Cartesian derivatives
3928 C Derivatives of this turn contributions in DC(i+2)
3929 if (j.lt.nres-1) then
3931 a_temp(1,1)=agg(l,1)
3932 a_temp(1,2)=agg(l,2)
3933 a_temp(2,1)=agg(l,3)
3934 a_temp(2,2)=agg(l,4)
3935 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
3936 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
3937 s1=scalar2(b1(1,i+2),auxvec(1))
3938 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
3939 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
3940 s2=scalar2(b1(1,i+1),auxvec(1))
3941 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
3942 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
3943 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3945 gcorr4_turn(l,i+2)=gcorr4_turn(l,i+2)-(s1+s2+s3)
3948 C Remaining derivatives of this turn contribution
3950 a_temp(1,1)=aggi(l,1)
3951 a_temp(1,2)=aggi(l,2)
3952 a_temp(2,1)=aggi(l,3)
3953 a_temp(2,2)=aggi(l,4)
3954 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
3955 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
3956 s1=scalar2(b1(1,i+2),auxvec(1))
3957 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
3958 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
3959 s2=scalar2(b1(1,i+1),auxvec(1))
3960 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
3961 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
3962 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3963 gcorr4_turn(l,i)=gcorr4_turn(l,i)-(s1+s2+s3)
3964 a_temp(1,1)=aggi1(l,1)
3965 a_temp(1,2)=aggi1(l,2)
3966 a_temp(2,1)=aggi1(l,3)
3967 a_temp(2,2)=aggi1(l,4)
3968 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
3969 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
3970 s1=scalar2(b1(1,i+2),auxvec(1))
3971 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
3972 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
3973 s2=scalar2(b1(1,i+1),auxvec(1))
3974 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
3975 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
3976 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3977 gcorr4_turn(l,i+1)=gcorr4_turn(l,i+1)-(s1+s2+s3)
3978 a_temp(1,1)=aggj(l,1)
3979 a_temp(1,2)=aggj(l,2)
3980 a_temp(2,1)=aggj(l,3)
3981 a_temp(2,2)=aggj(l,4)
3982 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
3983 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
3984 s1=scalar2(b1(1,i+2),auxvec(1))
3985 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
3986 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
3987 s2=scalar2(b1(1,i+1),auxvec(1))
3988 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
3989 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
3990 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3991 gcorr4_turn(l,j)=gcorr4_turn(l,j)-(s1+s2+s3)
3992 a_temp(1,1)=aggj1(l,1)
3993 a_temp(1,2)=aggj1(l,2)
3994 a_temp(2,1)=aggj1(l,3)
3995 a_temp(2,2)=aggj1(l,4)
3996 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
3997 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
3998 s1=scalar2(b1(1,i+2),auxvec(1))
3999 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
4000 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
4001 s2=scalar2(b1(1,i+1),auxvec(1))
4002 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
4003 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
4004 s3=0.5d0*(pizda(1,1)+pizda(2,2))
4005 c write (iout,*) "s1",s1," s2",s2," s3",s3," s1+s2+s3",s1+s2+s3
4006 gcorr4_turn(l,j1)=gcorr4_turn(l,j1)-(s1+s2+s3)
4010 C-----------------------------------------------------------------------------
4011 subroutine vecpr(u,v,w)
4012 implicit real*8(a-h,o-z)
4013 dimension u(3),v(3),w(3)
4014 w(1)=u(2)*v(3)-u(3)*v(2)
4015 w(2)=-u(1)*v(3)+u(3)*v(1)
4016 w(3)=u(1)*v(2)-u(2)*v(1)
4019 C-----------------------------------------------------------------------------
4020 subroutine unormderiv(u,ugrad,unorm,ungrad)
4021 C This subroutine computes the derivatives of a normalized vector u, given
4022 C the derivatives computed without normalization conditions, ugrad. Returns
4025 double precision u(3),ugrad(3,3),unorm,ungrad(3,3)
4026 double precision vec(3)
4027 double precision scalar
4029 c write (2,*) 'ugrad',ugrad
4032 vec(i)=scalar(ugrad(1,i),u(1))
4034 c write (2,*) 'vec',vec
4037 ungrad(j,i)=(ugrad(j,i)-u(j)*vec(i))*unorm
4040 c write (2,*) 'ungrad',ungrad
4043 C-----------------------------------------------------------------------------
4044 subroutine escp_soft_sphere(evdw2,evdw2_14)
4046 C This subroutine calculates the excluded-volume interaction energy between
4047 C peptide-group centers and side chains and its gradient in virtual-bond and
4048 C side-chain vectors.
4050 implicit real*8 (a-h,o-z)
4051 include 'DIMENSIONS'
4052 include 'COMMON.GEO'
4053 include 'COMMON.VAR'
4054 include 'COMMON.LOCAL'
4055 include 'COMMON.CHAIN'
4056 include 'COMMON.DERIV'
4057 include 'COMMON.INTERACT'
4058 include 'COMMON.FFIELD'
4059 include 'COMMON.IOUNITS'
4060 include 'COMMON.CONTROL'
4065 cd print '(a)','Enter ESCP'
4066 cd write (iout,*) 'iatscp_s=',iatscp_s,' iatscp_e=',iatscp_e
4067 do i=iatscp_s,iatscp_e
4068 if (itype(i).eq.ntyp1 .or. itype(i+1).eq.ntyp1) cycle
4070 xi=0.5D0*(c(1,i)+c(1,i+1))
4071 yi=0.5D0*(c(2,i)+c(2,i+1))
4072 zi=0.5D0*(c(3,i)+c(3,i+1))
4074 do iint=1,nscp_gr(i)
4076 do j=iscpstart(i,iint),iscpend(i,iint)
4077 if (itype(j).eq.ntyp1) cycle
4078 itypj=iabs(itype(j))
4079 C Uncomment following three lines for SC-p interactions
4083 C Uncomment following three lines for Ca-p interactions
4087 rij=xj*xj+yj*yj+zj*zj
4090 if (rij.lt.r0ijsq) then
4091 evdwij=0.25d0*(rij-r0ijsq)**2
4099 C Calculate contributions to the gradient in the virtual-bond and SC vectors.
4104 cgrad if (j.lt.i) then
4105 cd write (iout,*) 'j<i'
4106 C Uncomment following three lines for SC-p interactions
4108 c gradx_scp(k,j)=gradx_scp(k,j)+ggg(k)
4111 cd write (iout,*) 'j>i'
4113 cgrad ggg(k)=-ggg(k)
4114 C Uncomment following line for SC-p interactions
4115 c gradx_scp(k,j)=gradx_scp(k,j)-ggg(k)
4119 cgrad gvdwc_scp(k,i)=gvdwc_scp(k,i)-0.5D0*ggg(k)
4121 cgrad kstart=min0(i+1,j)
4122 cgrad kend=max0(i-1,j-1)
4123 cd write (iout,*) 'i=',i,' j=',j,' kstart=',kstart,' kend=',kend
4124 cd write (iout,*) ggg(1),ggg(2),ggg(3)
4125 cgrad do k=kstart,kend
4127 cgrad gvdwc_scp(l,k)=gvdwc_scp(l,k)-ggg(l)
4131 gvdwc_scpp(k,i)=gvdwc_scpp(k,i)-ggg(k)
4132 gvdwc_scp(k,j)=gvdwc_scp(k,j)+ggg(k)
4140 C-----------------------------------------------------------------------------
4141 subroutine escp(evdw2,evdw2_14)
4143 C This subroutine calculates the excluded-volume interaction energy between
4144 C peptide-group centers and side chains and its gradient in virtual-bond and
4145 C side-chain vectors.
4147 implicit real*8 (a-h,o-z)
4148 include 'DIMENSIONS'
4149 include 'COMMON.GEO'
4150 include 'COMMON.VAR'
4151 include 'COMMON.LOCAL'
4152 include 'COMMON.CHAIN'
4153 include 'COMMON.DERIV'
4154 include 'COMMON.INTERACT'
4155 include 'COMMON.FFIELD'
4156 include 'COMMON.IOUNITS'
4157 include 'COMMON.CONTROL'
4161 cd print '(a)','Enter ESCP'
4162 cd write (iout,*) 'iatscp_s=',iatscp_s,' iatscp_e=',iatscp_e
4163 do i=iatscp_s,iatscp_e
4164 if (itype(i).eq.ntyp1 .or. itype(i+1).eq.ntyp1) cycle
4166 xi=0.5D0*(c(1,i)+c(1,i+1))
4167 yi=0.5D0*(c(2,i)+c(2,i+1))
4168 zi=0.5D0*(c(3,i)+c(3,i+1))
4170 do iint=1,nscp_gr(i)
4172 do j=iscpstart(i,iint),iscpend(i,iint)
4173 itypj=iabs(itype(j))
4174 if (itypj.eq.ntyp1) cycle
4175 C Uncomment following three lines for SC-p interactions
4179 C Uncomment following three lines for Ca-p interactions
4183 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
4185 e1=fac*fac*aad(itypj,iteli)
4186 e2=fac*bad(itypj,iteli)
4187 if (iabs(j-i) .le. 2) then
4190 evdw2_14=evdw2_14+e1+e2
4194 if (energy_dec) write (iout,'(a6,2i5,0pf7.3,2i3,3e11.3)')
4195 & 'evdw2',i,j,evdwij,iteli,itypj,fac,aad(itypj,iteli),
4198 C Calculate contributions to the gradient in the virtual-bond and SC vectors.
4200 fac=-(evdwij+e1)*rrij
4204 cgrad if (j.lt.i) then
4205 cd write (iout,*) 'j<i'
4206 C Uncomment following three lines for SC-p interactions
4208 c gradx_scp(k,j)=gradx_scp(k,j)+ggg(k)
4211 cd write (iout,*) 'j>i'
4213 cgrad ggg(k)=-ggg(k)
4214 C Uncomment following line for SC-p interactions
4215 ccgrad gradx_scp(k,j)=gradx_scp(k,j)-ggg(k)
4216 c gradx_scp(k,j)=gradx_scp(k,j)+ggg(k)
4220 cgrad gvdwc_scp(k,i)=gvdwc_scp(k,i)-0.5D0*ggg(k)
4222 cgrad kstart=min0(i+1,j)
4223 cgrad kend=max0(i-1,j-1)
4224 cd write (iout,*) 'i=',i,' j=',j,' kstart=',kstart,' kend=',kend
4225 cd write (iout,*) ggg(1),ggg(2),ggg(3)
4226 cgrad do k=kstart,kend
4228 cgrad gvdwc_scp(l,k)=gvdwc_scp(l,k)-ggg(l)
4232 gvdwc_scpp(k,i)=gvdwc_scpp(k,i)-ggg(k)
4233 gvdwc_scp(k,j)=gvdwc_scp(k,j)+ggg(k)
4241 gvdwc_scp(j,i)=expon*gvdwc_scp(j,i)
4242 gvdwc_scpp(j,i)=expon*gvdwc_scpp(j,i)
4243 gradx_scp(j,i)=expon*gradx_scp(j,i)
4246 C******************************************************************************
4250 C To save time the factor EXPON has been extracted from ALL components
4251 C of GVDWC and GRADX. Remember to multiply them by this factor before further
4254 C******************************************************************************
4257 C--------------------------------------------------------------------------
4258 subroutine edis(ehpb)
4260 C Evaluate bridge-strain energy and its gradient in virtual-bond and SC vectors.
4262 implicit real*8 (a-h,o-z)
4263 include 'DIMENSIONS'
4264 include 'COMMON.SBRIDGE'
4265 include 'COMMON.CHAIN'
4266 include 'COMMON.DERIV'
4267 include 'COMMON.VAR'
4268 include 'COMMON.INTERACT'
4269 include 'COMMON.IOUNITS'
4272 cd write(iout,*)'edis: nhpb=',nhpb,' fbr=',fbr
4273 cd write(iout,*)'link_start=',link_start,' link_end=',link_end
4274 if (link_end.eq.0) return
4275 do i=link_start,link_end
4276 C If ihpb(i) and jhpb(i) > NRES, this is a SC-SC distance, otherwise a
4277 C CA-CA distance used in regularization of structure.
4280 C iii and jjj point to the residues for which the distance is assigned.
4281 if (ii.gt.nres) then
4288 cd write (iout,*) "i",i," ii",ii," iii",iii," jj",jj," jjj",jjj
4289 C 24/11/03 AL: SS bridges handled separately because of introducing a specific
4290 C distance and angle dependent SS bond potential.
4291 if (ii.gt.nres .and. iabs(itype(iii)).eq.1 .and.
4292 & iabs(itype(jjj)).eq.1) then
4293 call ssbond_ene(iii,jjj,eij)
4295 cd write (iout,*) "eij",eij
4297 C Calculate the distance between the two points and its difference from the
4301 C Get the force constant corresponding to this distance.
4303 C Calculate the contribution to energy.
4304 ehpb=ehpb+waga*rdis*rdis
4306 C Evaluate gradient.
4309 cd print *,'i=',i,' ii=',ii,' jj=',jj,' dhpb=',dhpb(i),' dd=',dd,
4310 cd & ' waga=',waga,' fac=',fac
4312 ggg(j)=fac*(c(j,jj)-c(j,ii))
4314 cd print '(i3,3(1pe14.5))',i,(ggg(j),j=1,3)
4315 C If this is a SC-SC distance, we need to calculate the contributions to the
4316 C Cartesian gradient in the SC vectors (ghpbx).
4319 ghpbx(j,iii)=ghpbx(j,iii)-ggg(j)
4320 ghpbx(j,jjj)=ghpbx(j,jjj)+ggg(j)
4323 cgrad do j=iii,jjj-1
4325 cgrad ghpbc(k,j)=ghpbc(k,j)+ggg(k)
4329 ghpbc(k,jjj)=ghpbc(k,jjj)+ggg(k)
4330 ghpbc(k,iii)=ghpbc(k,iii)-ggg(k)
4337 C--------------------------------------------------------------------------
4338 subroutine ssbond_ene(i,j,eij)
4340 C Calculate the distance and angle dependent SS-bond potential energy
4341 C using a free-energy function derived based on RHF/6-31G** ab initio
4342 C calculations of diethyl disulfide.
4344 C A. Liwo and U. Kozlowska, 11/24/03
4346 implicit real*8 (a-h,o-z)
4347 include 'DIMENSIONS'
4348 include 'COMMON.SBRIDGE'
4349 include 'COMMON.CHAIN'
4350 include 'COMMON.DERIV'
4351 include 'COMMON.LOCAL'
4352 include 'COMMON.INTERACT'
4353 include 'COMMON.VAR'
4354 include 'COMMON.IOUNITS'
4355 double precision erij(3),dcosom1(3),dcosom2(3),gg(3)
4356 itypi=iabs(itype(i))
4360 dxi=dc_norm(1,nres+i)
4361 dyi=dc_norm(2,nres+i)
4362 dzi=dc_norm(3,nres+i)
4363 c dsci_inv=dsc_inv(itypi)
4364 dsci_inv=vbld_inv(nres+i)
4365 itypj=iabs(itype(j))
4366 c dscj_inv=dsc_inv(itypj)
4367 dscj_inv=vbld_inv(nres+j)
4371 dxj=dc_norm(1,nres+j)
4372 dyj=dc_norm(2,nres+j)
4373 dzj=dc_norm(3,nres+j)
4374 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
4379 om1=dxi*erij(1)+dyi*erij(2)+dzi*erij(3)
4380 om2=dxj*erij(1)+dyj*erij(2)+dzj*erij(3)
4381 om12=dxi*dxj+dyi*dyj+dzi*dzj
4383 dcosom1(k)=rij*(dc_norm(k,nres+i)-om1*erij(k))
4384 dcosom2(k)=rij*(dc_norm(k,nres+j)-om2*erij(k))
4390 deltat12=om2-om1+2.0d0
4392 eij=akcm*deltad*deltad+akth*(deltat1*deltat1+deltat2*deltat2)
4393 & +akct*deltad*deltat12
4394 & +v1ss*cosphi+v2ss*cosphi*cosphi+v3ss*cosphi*cosphi*cosphi+ebr
4395 c write(iout,*) i,j,"rij",rij,"d0cm",d0cm," akcm",akcm," akth",akth,
4396 c & " akct",akct," deltad",deltad," deltat",deltat1,deltat2,
4397 c & " deltat12",deltat12," eij",eij
4398 ed=2*akcm*deltad+akct*deltat12
4400 pom2=v1ss+2*v2ss*cosphi+3*v3ss*cosphi*cosphi
4401 eom1=-2*akth*deltat1-pom1-om2*pom2
4402 eom2= 2*akth*deltat2+pom1-om1*pom2
4405 ggk=ed*erij(k)+eom1*dcosom1(k)+eom2*dcosom2(k)
4406 ghpbx(k,i)=ghpbx(k,i)-ggk
4407 & +(eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,nres+i))
4408 & +eom1*(erij(k)-om1*dc_norm(k,nres+i)))*dsci_inv
4409 ghpbx(k,j)=ghpbx(k,j)+ggk
4410 & +(eom12*(dc_norm(k,nres+i)-om12*dc_norm(k,nres+j))
4411 & +eom2*(erij(k)-om2*dc_norm(k,nres+j)))*dscj_inv
4412 ghpbc(k,i)=ghpbc(k,i)-ggk
4413 ghpbc(k,j)=ghpbc(k,j)+ggk
4416 C Calculate the components of the gradient in DC and X
4420 cgrad ghpbc(l,k)=ghpbc(l,k)+gg(l)
4425 C--------------------------------------------------------------------------
4426 subroutine ebond(estr)
4428 c Evaluate the energy of stretching of the CA-CA and CA-SC virtual bonds
4430 implicit real*8 (a-h,o-z)
4431 include 'DIMENSIONS'
4432 include 'COMMON.LOCAL'
4433 include 'COMMON.GEO'
4434 include 'COMMON.INTERACT'
4435 include 'COMMON.DERIV'
4436 include 'COMMON.VAR'
4437 include 'COMMON.CHAIN'
4438 include 'COMMON.IOUNITS'
4439 include 'COMMON.NAMES'
4440 include 'COMMON.FFIELD'
4441 include 'COMMON.CONTROL'
4442 include 'COMMON.SETUP'
4443 double precision u(3),ud(3)
4446 do i=ibondp_start,ibondp_end
4447 if (itype(i-1).eq.ntyp1 .or. itype(i).eq.ntyp1) then
4448 estr1=estr1+gnmr1(vbld(i),-1.0d0,distchainmax)
4450 gradb(j,i-1)=gnmr1prim(vbld(i),-1.0d0,distchainmax)
4451 & *dc(j,i-1)/vbld(i)
4453 if (energy_dec) write(iout,*)
4454 & "estr1",i,gnmr1(vbld(i),-1.0d0,distchainmax)
4456 diff = vbld(i)-vbldp0
4457 if (energy_dec) write (iout,*)
4458 & "estr bb",i,vbld(i),vbldp0,diff,AKP*diff*diff
4461 gradb(j,i-1)=AKP*diff*dc(j,i-1)/vbld(i)
4463 c write (iout,'(i5,3f10.5)') i,(gradb(j,i-1),j=1,3)
4466 estr=0.5d0*AKP*estr+estr1
4468 c 09/18/07 AL: multimodal bond potential based on AM1 CA-SC PMF's included
4470 do i=ibond_start,ibond_end
4472 if (iti.ne.10 .and. iti.ne.ntyp1) then
4475 diff=vbld(i+nres)-vbldsc0(1,iti)
4476 if (energy_dec) write (iout,*)
4477 & "estr sc",i,iti,vbld(i+nres),vbldsc0(1,iti),diff,
4478 & AKSC(1,iti),AKSC(1,iti)*diff*diff
4479 estr=estr+0.5d0*AKSC(1,iti)*diff*diff
4481 gradbx(j,i)=AKSC(1,iti)*diff*dc(j,i+nres)/vbld(i+nres)
4485 diff=vbld(i+nres)-vbldsc0(j,iti)
4486 ud(j)=aksc(j,iti)*diff
4487 u(j)=abond0(j,iti)+0.5d0*ud(j)*diff
4501 uprod2=uprod2*u(k)*u(k)
4505 usumsqder=usumsqder+ud(j)*uprod2
4507 estr=estr+uprod/usum
4509 gradbx(j,i)=usumsqder/(usum*usum)*dc(j,i+nres)/vbld(i+nres)
4517 C--------------------------------------------------------------------------
4518 subroutine ebend(etheta)
4520 C Evaluate the virtual-bond-angle energy given the virtual-bond dihedral
4521 C angles gamma and its derivatives in consecutive thetas and gammas.
4523 implicit real*8 (a-h,o-z)
4524 include 'DIMENSIONS'
4525 include 'COMMON.LOCAL'
4526 include 'COMMON.GEO'
4527 include 'COMMON.INTERACT'
4528 include 'COMMON.DERIV'
4529 include 'COMMON.VAR'
4530 include 'COMMON.CHAIN'
4531 include 'COMMON.IOUNITS'
4532 include 'COMMON.NAMES'
4533 include 'COMMON.FFIELD'
4534 include 'COMMON.CONTROL'
4535 common /calcthet/ term1,term2,termm,diffak,ratak,
4536 & ak,aktc,termpre,termexp,sigc,sig0i,time11,time12,sigcsq,
4537 & delthe0,sig0inv,sigtc,sigsqtc,delthec,it
4538 double precision y(2),z(2)
4540 c time11=dexp(-2*time)
4543 c write (*,'(a,i2)') 'EBEND ICG=',icg
4544 do i=ithet_start,ithet_end
4545 if (itype(i-1).eq.ntyp1) cycle
4546 C Zero the energy function and its derivative at 0 or pi.
4547 call splinthet(theta(i),0.5d0*delta,ss,ssd)
4549 ichir1=isign(1,itype(i-2))
4550 ichir2=isign(1,itype(i))
4551 if (itype(i-2).eq.10) ichir1=isign(1,itype(i-1))
4552 if (itype(i).eq.10) ichir2=isign(1,itype(i-1))
4553 if (itype(i-1).eq.10) then
4554 itype1=isign(10,itype(i-2))
4555 ichir11=isign(1,itype(i-2))
4556 ichir12=isign(1,itype(i-2))
4557 itype2=isign(10,itype(i))
4558 ichir21=isign(1,itype(i))
4559 ichir22=isign(1,itype(i))
4562 if (i.gt.3 .and. itype(i-2).ne.ntyp1) then
4565 if (phii.ne.phii) phii=150.0
4575 if (i.lt.nres .and. itype(i).ne.ntyp1) then
4578 if (phii1.ne.phii1) phii1=150.0
4590 C Calculate the "mean" value of theta from the part of the distribution
4591 C dependent on the adjacent virtual-bond-valence angles (gamma1 & gamma2).
4592 C In following comments this theta will be referred to as t_c.
4593 thet_pred_mean=0.0d0
4595 athetk=athet(k,it,ichir1,ichir2)
4596 bthetk=bthet(k,it,ichir1,ichir2)
4598 athetk=athet(k,itype1,ichir11,ichir12)
4599 bthetk=bthet(k,itype2,ichir21,ichir22)
4601 thet_pred_mean=thet_pred_mean+athetk*y(k)+bthetk*z(k)
4603 dthett=thet_pred_mean*ssd
4604 thet_pred_mean=thet_pred_mean*ss+a0thet(it)
4605 C Derivatives of the "mean" values in gamma1 and gamma2.
4606 dthetg1=(-athet(1,it,ichir1,ichir2)*y(2)
4607 &+athet(2,it,ichir1,ichir2)*y(1))*ss
4608 dthetg2=(-bthet(1,it,ichir1,ichir2)*z(2)
4609 & +bthet(2,it,ichir1,ichir2)*z(1))*ss
4611 dthetg1=(-athet(1,itype1,ichir11,ichir12)*y(2)
4612 &+athet(2,itype1,ichir11,ichir12)*y(1))*ss
4613 dthetg2=(-bthet(1,itype2,ichir21,ichir22)*z(2)
4614 & +bthet(2,itype2,ichir21,ichir22)*z(1))*ss
4616 if (theta(i).gt.pi-delta) then
4617 call theteng(pi-delta,thet_pred_mean,theta0(it),f0,fprim0,
4619 call mixder(pi-delta,thet_pred_mean,theta0(it),fprim_tc0)
4620 call theteng(pi,thet_pred_mean,theta0(it),f1,fprim1,E_tc1)
4621 call spline1(theta(i),pi-delta,delta,f0,f1,fprim0,ethetai,
4623 call spline2(theta(i),pi-delta,delta,E_tc0,E_tc1,fprim_tc0,
4625 else if (theta(i).lt.delta) then
4626 call theteng(delta,thet_pred_mean,theta0(it),f0,fprim0,E_tc0)
4627 call theteng(0.0d0,thet_pred_mean,theta0(it),f1,fprim1,E_tc1)
4628 call spline1(theta(i),delta,-delta,f0,f1,fprim0,ethetai,
4630 call mixder(delta,thet_pred_mean,theta0(it),fprim_tc0)
4631 call spline2(theta(i),delta,-delta,E_tc0,E_tc1,fprim_tc0,
4634 call theteng(theta(i),thet_pred_mean,theta0(it),ethetai,
4637 etheta=etheta+ethetai
4638 if (energy_dec) write (iout,'(a6,i5,0pf7.3)')
4640 if (i.gt.3) gloc(i-3,icg)=gloc(i-3,icg)+wang*E_tc*dthetg1
4641 if (i.lt.nres) gloc(i-2,icg)=gloc(i-2,icg)+wang*E_tc*dthetg2
4642 gloc(nphi+i-2,icg)=wang*(E_theta+E_tc*dthett)+gloc(nphi+i-2,icg)
4644 C Ufff.... We've done all this!!!
4647 C---------------------------------------------------------------------------
4648 subroutine theteng(thetai,thet_pred_mean,theta0i,ethetai,E_theta,
4650 implicit real*8 (a-h,o-z)
4651 include 'DIMENSIONS'
4652 include 'COMMON.LOCAL'
4653 include 'COMMON.IOUNITS'
4654 common /calcthet/ term1,term2,termm,diffak,ratak,
4655 & ak,aktc,termpre,termexp,sigc,sig0i,time11,time12,sigcsq,
4656 & delthe0,sig0inv,sigtc,sigsqtc,delthec,it
4657 C Calculate the contributions to both Gaussian lobes.
4658 C 6/6/97 - Deform the Gaussians using the factor of 1/(1+time)
4659 C The "polynomial part" of the "standard deviation" of this part of
4663 sig=sig*thet_pred_mean+polthet(j,it)
4665 C Derivative of the "interior part" of the "standard deviation of the"
4666 C gamma-dependent Gaussian lobe in t_c.
4667 sigtc=3*polthet(3,it)
4669 sigtc=sigtc*thet_pred_mean+j*polthet(j,it)
4672 C Set the parameters of both Gaussian lobes of the distribution.
4673 C "Standard deviation" of the gamma-dependent Gaussian lobe (sigtc)
4674 fac=sig*sig+sigc0(it)
4677 C Following variable (sigsqtc) is -(1/2)d[sigma(t_c)**(-2))]/dt_c
4678 sigsqtc=-4.0D0*sigcsq*sigtc
4679 c print *,i,sig,sigtc,sigsqtc
4680 C Following variable (sigtc) is d[sigma(t_c)]/dt_c
4681 sigtc=-sigtc/(fac*fac)
4682 C Following variable is sigma(t_c)**(-2)
4683 sigcsq=sigcsq*sigcsq
4685 sig0inv=1.0D0/sig0i**2
4686 delthec=thetai-thet_pred_mean
4687 delthe0=thetai-theta0i
4688 term1=-0.5D0*sigcsq*delthec*delthec
4689 term2=-0.5D0*sig0inv*delthe0*delthe0
4690 C Following fuzzy logic is to avoid underflows in dexp and subsequent INFs and
4691 C NaNs in taking the logarithm. We extract the largest exponent which is added
4692 C to the energy (this being the log of the distribution) at the end of energy
4693 C term evaluation for this virtual-bond angle.
4694 if (term1.gt.term2) then
4696 term2=dexp(term2-termm)
4700 term1=dexp(term1-termm)
4703 C The ratio between the gamma-independent and gamma-dependent lobes of
4704 C the distribution is a Gaussian function of thet_pred_mean too.
4705 diffak=gthet(2,it)-thet_pred_mean
4706 ratak=diffak/gthet(3,it)**2
4707 ak=dexp(gthet(1,it)-0.5D0*diffak*ratak)
4708 C Let's differentiate it in thet_pred_mean NOW.
4710 C Now put together the distribution terms to make complete distribution.
4711 termexp=term1+ak*term2
4712 termpre=sigc+ak*sig0i
4713 C Contribution of the bending energy from this theta is just the -log of
4714 C the sum of the contributions from the two lobes and the pre-exponential
4715 C factor. Simple enough, isn't it?
4716 ethetai=(-dlog(termexp)-termm+dlog(termpre))
4717 C NOW the derivatives!!!
4718 C 6/6/97 Take into account the deformation.
4719 E_theta=(delthec*sigcsq*term1
4720 & +ak*delthe0*sig0inv*term2)/termexp
4721 E_tc=((sigtc+aktc*sig0i)/termpre
4722 & -((delthec*sigcsq+delthec*delthec*sigsqtc)*term1+
4723 & aktc*term2)/termexp)
4726 c-----------------------------------------------------------------------------
4727 subroutine mixder(thetai,thet_pred_mean,theta0i,E_tc_t)
4728 implicit real*8 (a-h,o-z)
4729 include 'DIMENSIONS'
4730 include 'COMMON.LOCAL'
4731 include 'COMMON.IOUNITS'
4732 common /calcthet/ term1,term2,termm,diffak,ratak,
4733 & ak,aktc,termpre,termexp,sigc,sig0i,time11,time12,sigcsq,
4734 & delthe0,sig0inv,sigtc,sigsqtc,delthec,it
4735 delthec=thetai-thet_pred_mean
4736 delthe0=thetai-theta0i
4737 C "Thank you" to MAPLE (probably spared one day of hand-differentiation).
4738 t3 = thetai-thet_pred_mean
4742 t14 = t12+t6*sigsqtc
4744 t21 = thetai-theta0i
4750 E_tc_t = -((sigcsq+2.D0*t3*sigsqtc)*t9-t14*sigcsq*t3*t16*t9
4751 & -aktc*sig0inv*t27)/t32+(t14*t9+aktc*t26)/t40
4752 & *(-t12*t9-ak*sig0inv*t27)
4756 C--------------------------------------------------------------------------
4757 subroutine ebend(etheta)
4759 C Evaluate the virtual-bond-angle energy given the virtual-bond dihedral
4760 C angles gamma and its derivatives in consecutive thetas and gammas.
4761 C ab initio-derived potentials from
4762 c Kozlowska et al., J. Phys.: Condens. Matter 19 (2007) 285203
4764 implicit real*8 (a-h,o-z)
4765 include 'DIMENSIONS'
4766 include 'COMMON.LOCAL'
4767 include 'COMMON.GEO'
4768 include 'COMMON.INTERACT'
4769 include 'COMMON.DERIV'
4770 include 'COMMON.VAR'
4771 include 'COMMON.CHAIN'
4772 include 'COMMON.IOUNITS'
4773 include 'COMMON.NAMES'
4774 include 'COMMON.FFIELD'
4775 include 'COMMON.CONTROL'
4776 double precision coskt(mmaxtheterm),sinkt(mmaxtheterm),
4777 & cosph1(maxsingle),sinph1(maxsingle),cosph2(maxsingle),
4778 & sinph2(maxsingle),cosph1ph2(maxdouble,maxdouble),
4779 & sinph1ph2(maxdouble,maxdouble)
4780 logical lprn /.false./, lprn1 /.false./
4782 do i=ithet_start,ithet_end
4783 if (itype(i-1).eq.ntyp1) cycle
4784 if (iabs(itype(i+1)).eq.20) iblock=2
4785 if (iabs(itype(i+1)).ne.20) iblock=1
4789 theti2=0.5d0*theta(i)
4790 ityp2=ithetyp((itype(i-1)))
4792 coskt(k)=dcos(k*theti2)
4793 sinkt(k)=dsin(k*theti2)
4795 if (i.gt.3 .and. itype(i-2).ne.ntyp1) then
4798 if (phii.ne.phii) phii=150.0
4802 ityp1=ithetyp((itype(i-2)))
4803 C propagation of chirality for glycine type
4805 cosph1(k)=dcos(k*phii)
4806 sinph1(k)=dsin(k*phii)
4816 if (i.lt.nres .and. itype(i).ne.ntyp1) then
4819 if (phii1.ne.phii1) phii1=150.0
4824 ityp3=ithetyp((itype(i)))
4826 cosph2(k)=dcos(k*phii1)
4827 sinph2(k)=dsin(k*phii1)
4837 ethetai=aa0thet(ityp1,ityp2,ityp3,iblock)
4840 ccl=cosph1(l)*cosph2(k-l)
4841 ssl=sinph1(l)*sinph2(k-l)
4842 scl=sinph1(l)*cosph2(k-l)
4843 csl=cosph1(l)*sinph2(k-l)
4844 cosph1ph2(l,k)=ccl-ssl
4845 cosph1ph2(k,l)=ccl+ssl
4846 sinph1ph2(l,k)=scl+csl
4847 sinph1ph2(k,l)=scl-csl
4851 write (iout,*) "i",i," ityp1",ityp1," ityp2",ityp2,
4852 & " ityp3",ityp3," theti2",theti2," phii",phii," phii1",phii1
4853 write (iout,*) "coskt and sinkt"
4855 write (iout,*) k,coskt(k),sinkt(k)
4859 ethetai=ethetai+aathet(k,ityp1,ityp2,ityp3,iblock)*sinkt(k)
4860 dethetai=dethetai+0.5d0*k*aathet(k,ityp1,ityp2,ityp3,iblock)
4863 & write (iout,*) "k",k,"
4864 & aathet",aathet(k,ityp1,ityp2,ityp3,iblock),
4865 & " ethetai",ethetai
4868 write (iout,*) "cosph and sinph"
4870 write (iout,*) k,cosph1(k),sinph1(k),cosph2(k),sinph2(k)
4872 write (iout,*) "cosph1ph2 and sinph2ph2"
4875 write (iout,*) l,k,cosph1ph2(l,k),cosph1ph2(k,l),
4876 & sinph1ph2(l,k),sinph1ph2(k,l)
4879 write(iout,*) "ethetai",ethetai
4883 aux=bbthet(k,m,ityp1,ityp2,ityp3,iblock)*cosph1(k)
4884 & +ccthet(k,m,ityp1,ityp2,ityp3,iblock)*sinph1(k)
4885 & +ddthet(k,m,ityp1,ityp2,ityp3,iblock)*cosph2(k)
4886 & +eethet(k,m,ityp1,ityp2,ityp3,iblock)*sinph2(k)
4887 ethetai=ethetai+sinkt(m)*aux
4888 dethetai=dethetai+0.5d0*m*aux*coskt(m)
4889 dephii=dephii+k*sinkt(m)*(
4890 & ccthet(k,m,ityp1,ityp2,ityp3,iblock)*cosph1(k)-
4891 & bbthet(k,m,ityp1,ityp2,ityp3,iblock)*sinph1(k))
4892 dephii1=dephii1+k*sinkt(m)*(
4893 & eethet(k,m,ityp1,ityp2,ityp3,iblock)*cosph2(k)-
4894 & ddthet(k,m,ityp1,ityp2,ityp3,iblock)*sinph2(k))
4896 & write (iout,*) "m",m," k",k," bbthet",
4897 & bbthet(k,m,ityp1,ityp2,ityp3,iblock)," ccthet",
4898 & ccthet(k,m,ityp1,ityp2,ityp3,iblock)," ddthet",
4899 & ddthet(k,m,ityp1,ityp2,ityp3,iblock)," eethet",
4900 & eethet(k,m,ityp1,ityp2,ityp3,iblock)," ethetai",ethetai
4904 & write(iout,*) "ethetai",ethetai
4908 aux=ffthet(l,k,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(l,k)+
4909 & ffthet(k,l,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(k,l)+
4910 & ggthet(l,k,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(l,k)+
4911 & ggthet(k,l,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(k,l)
4912 ethetai=ethetai+sinkt(m)*aux
4913 dethetai=dethetai+0.5d0*m*coskt(m)*aux
4914 dephii=dephii+l*sinkt(m)*(
4915 & -ffthet(l,k,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(l,k)-
4916 & ffthet(k,l,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(k,l)+
4917 & ggthet(l,k,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(l,k)+
4918 & ggthet(k,l,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(k,l))
4919 dephii1=dephii1+(k-l)*sinkt(m)*(
4920 & -ffthet(l,k,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(l,k)+
4921 & ffthet(k,l,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(k,l)+
4922 & ggthet(l,k,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(l,k)-
4923 & ggthet(k,l,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(k,l))
4925 write (iout,*) "m",m," k",k," l",l," ffthet",
4926 & ffthet(l,k,m,ityp1,ityp2,ityp3,iblock),
4927 & ffthet(k,l,m,ityp1,ityp2,ityp3,iblock)," ggthet",
4928 & ggthet(l,k,m,ityp1,ityp2,ityp3,iblock),
4929 & ggthet(k,l,m,ityp1,ityp2,ityp3,iblock),
4930 & " ethetai",ethetai
4931 write (iout,*) cosph1ph2(l,k)*sinkt(m),
4932 & cosph1ph2(k,l)*sinkt(m),
4933 & sinph1ph2(l,k)*sinkt(m),sinph1ph2(k,l)*sinkt(m)
4941 & write (iout,'(i2,3f8.1,9h ethetai ,f10.5)')
4942 & i,theta(i)*rad2deg,phii*rad2deg,
4943 & phii1*rad2deg,ethetai
4945 etheta=etheta+ethetai
4946 if (i.gt.3) gloc(i-3,icg)=gloc(i-3,icg)+wang*dephii
4947 if (i.lt.nres) gloc(i-2,icg)=gloc(i-2,icg)+wang*dephii1
4948 gloc(nphi+i-2,icg)=wang*dethetai+gloc(nphi+i-2,icg)
4954 c-----------------------------------------------------------------------------
4955 subroutine esc(escloc)
4956 C Calculate the local energy of a side chain and its derivatives in the
4957 C corresponding virtual-bond valence angles THETA and the spherical angles
4959 implicit real*8 (a-h,o-z)
4960 include 'DIMENSIONS'
4961 include 'COMMON.GEO'
4962 include 'COMMON.LOCAL'
4963 include 'COMMON.VAR'
4964 include 'COMMON.INTERACT'
4965 include 'COMMON.DERIV'
4966 include 'COMMON.CHAIN'
4967 include 'COMMON.IOUNITS'
4968 include 'COMMON.NAMES'
4969 include 'COMMON.FFIELD'
4970 include 'COMMON.CONTROL'
4971 double precision x(3),dersc(3),xemp(3),dersc0(3),dersc1(3),
4972 & ddersc0(3),ddummy(3),xtemp(3),temp(3)
4973 common /sccalc/ time11,time12,time112,theti,it,nlobit
4976 c write (iout,'(a)') 'ESC'
4977 do i=loc_start,loc_end
4979 if (it.eq.ntyp1) cycle
4980 if (it.eq.10) goto 1
4981 nlobit=nlob(iabs(it))
4982 c print *,'i=',i,' it=',it,' nlobit=',nlobit
4983 c write (iout,*) 'i=',i,' ssa=',ssa,' ssad=',ssad
4984 theti=theta(i+1)-pipol
4989 if (x(2).gt.pi-delta) then
4993 call enesc(xtemp,escloci0,dersc0,ddersc0,.true.)
4995 call enesc(xtemp,escloci1,dersc1,ddummy,.false.)
4996 call spline1(x(2),pi-delta,delta,escloci0,escloci1,dersc0(2),
4998 call spline2(x(2),pi-delta,delta,dersc0(1),dersc1(1),
4999 & ddersc0(1),dersc(1))
5000 call spline2(x(2),pi-delta,delta,dersc0(3),dersc1(3),
5001 & ddersc0(3),dersc(3))
5003 call enesc_bound(xtemp,esclocbi0,dersc0,dersc12,.true.)
5005 call enesc_bound(xtemp,esclocbi1,dersc1,chuju,.false.)
5006 call spline1(x(2),pi-delta,delta,esclocbi0,esclocbi1,
5007 & dersc0(2),esclocbi,dersc02)
5008 call spline2(x(2),pi-delta,delta,dersc0(1),dersc1(1),
5010 call splinthet(x(2),0.5d0*delta,ss,ssd)
5015 dersc(k)=ss*dersc(k)+(1.0d0-ss)*dersc0(k)
5017 dersc(2)=dersc(2)+ssd*(escloci-esclocbi)
5018 c write (iout,*) 'i=',i,x(2)*rad2deg,escloci0,escloci,
5020 escloci=ss*escloci+(1.0d0-ss)*esclocbi
5022 c write (iout,*) escloci
5023 else if (x(2).lt.delta) then
5027 call enesc(xtemp,escloci0,dersc0,ddersc0,.true.)
5029 call enesc(xtemp,escloci1,dersc1,ddummy,.false.)
5030 call spline1(x(2),delta,-delta,escloci0,escloci1,dersc0(2),
5032 call spline2(x(2),delta,-delta,dersc0(1),dersc1(1),
5033 & ddersc0(1),dersc(1))
5034 call spline2(x(2),delta,-delta,dersc0(3),dersc1(3),
5035 & ddersc0(3),dersc(3))
5037 call enesc_bound(xtemp,esclocbi0,dersc0,dersc12,.true.)
5039 call enesc_bound(xtemp,esclocbi1,dersc1,chuju,.false.)
5040 call spline1(x(2),delta,-delta,esclocbi0,esclocbi1,
5041 & dersc0(2),esclocbi,dersc02)
5042 call spline2(x(2),delta,-delta,dersc0(1),dersc1(1),
5047 call splinthet(x(2),0.5d0*delta,ss,ssd)
5049 dersc(k)=ss*dersc(k)+(1.0d0-ss)*dersc0(k)
5051 dersc(2)=dersc(2)+ssd*(escloci-esclocbi)
5052 c write (iout,*) 'i=',i,x(2)*rad2deg,escloci0,escloci,
5054 escloci=ss*escloci+(1.0d0-ss)*esclocbi
5055 c write (iout,*) escloci
5057 call enesc(x,escloci,dersc,ddummy,.false.)
5060 escloc=escloc+escloci
5061 if (energy_dec) write (iout,'(a6,i5,0pf7.3)')
5062 & 'escloc',i,escloci
5063 c write (iout,*) 'i=',i,' escloci=',escloci,' dersc=',dersc
5065 gloc(nphi+i-1,icg)=gloc(nphi+i-1,icg)+
5067 gloc(ialph(i,1),icg)=wscloc*dersc(2)
5068 gloc(ialph(i,1)+nside,icg)=wscloc*dersc(3)
5073 C---------------------------------------------------------------------------
5074 subroutine enesc(x,escloci,dersc,ddersc,mixed)
5075 implicit real*8 (a-h,o-z)
5076 include 'DIMENSIONS'
5077 include 'COMMON.GEO'
5078 include 'COMMON.LOCAL'
5079 include 'COMMON.IOUNITS'
5080 common /sccalc/ time11,time12,time112,theti,it,nlobit
5081 double precision x(3),z(3),Ax(3,maxlob,-1:1),dersc(3),ddersc(3)
5082 double precision contr(maxlob,-1:1)
5084 c write (iout,*) 'it=',it,' nlobit=',nlobit
5088 if (mixed) ddersc(j)=0.0d0
5092 C Because of periodicity of the dependence of the SC energy in omega we have
5093 C to add up the contributions from x(3)-2*pi, x(3), and x(3+2*pi).
5094 C To avoid underflows, first compute & store the exponents.
5102 z(k)=x(k)-censc(k,j,it)
5107 Axk=Axk+gaussc(l,k,j,it)*z(l)
5113 expfac=expfac+Ax(k,j,iii)*z(k)
5121 C As in the case of ebend, we want to avoid underflows in exponentiation and
5122 C subsequent NaNs and INFs in energy calculation.
5123 C Find the largest exponent
5127 if (emin.gt.contr(j,iii)) emin=contr(j,iii)
5131 cd print *,'it=',it,' emin=',emin
5133 C Compute the contribution to SC energy and derivatives
5138 adexp=bsc(j,iabs(it))-0.5D0*contr(j,iii)+emin
5139 if(adexp.ne.adexp) adexp=1.0
5142 expfac=dexp(bsc(j,iabs(it))-0.5D0*contr(j,iii)+emin)
5144 cd print *,'j=',j,' expfac=',expfac
5145 escloc_i=escloc_i+expfac
5147 dersc(k)=dersc(k)+Ax(k,j,iii)*expfac
5151 ddersc(k)=ddersc(k)+(-Ax(2,j,iii)*Ax(k,j,iii)
5152 & +gaussc(k,2,j,it))*expfac
5159 dersc(1)=dersc(1)/cos(theti)**2
5160 ddersc(1)=ddersc(1)/cos(theti)**2
5163 escloci=-(dlog(escloc_i)-emin)
5165 dersc(j)=dersc(j)/escloc_i
5169 ddersc(j)=(ddersc(j)/escloc_i+dersc(2)*dersc(j))
5174 C------------------------------------------------------------------------------
5175 subroutine enesc_bound(x,escloci,dersc,dersc12,mixed)
5176 implicit real*8 (a-h,o-z)
5177 include 'DIMENSIONS'
5178 include 'COMMON.GEO'
5179 include 'COMMON.LOCAL'
5180 include 'COMMON.IOUNITS'
5181 common /sccalc/ time11,time12,time112,theti,it,nlobit
5182 double precision x(3),z(3),Ax(3,maxlob),dersc(3)
5183 double precision contr(maxlob)
5194 z(k)=x(k)-censc(k,j,it)
5200 Axk=Axk+gaussc(l,k,j,it)*z(l)
5206 expfac=expfac+Ax(k,j)*z(k)
5211 C As in the case of ebend, we want to avoid underflows in exponentiation and
5212 C subsequent NaNs and INFs in energy calculation.
5213 C Find the largest exponent
5216 if (emin.gt.contr(j)) emin=contr(j)
5220 C Compute the contribution to SC energy and derivatives
5224 expfac=dexp(bsc(j,iabs(it))-0.5D0*contr(j)+emin)
5225 escloc_i=escloc_i+expfac
5227 dersc(k)=dersc(k)+Ax(k,j)*expfac
5229 if (mixed) dersc12=dersc12+(-Ax(2,j)*Ax(1,j)
5230 & +gaussc(1,2,j,it))*expfac
5234 dersc(1)=dersc(1)/cos(theti)**2
5235 dersc12=dersc12/cos(theti)**2
5236 escloci=-(dlog(escloc_i)-emin)
5238 dersc(j)=dersc(j)/escloc_i
5240 if (mixed) dersc12=(dersc12/escloc_i+dersc(2)*dersc(1))
5244 c----------------------------------------------------------------------------------
5245 subroutine esc(escloc)
5246 C Calculate the local energy of a side chain and its derivatives in the
5247 C corresponding virtual-bond valence angles THETA and the spherical angles
5248 C ALPHA and OMEGA derived from AM1 all-atom calculations.
5249 C added by Urszula Kozlowska. 07/11/2007
5251 implicit real*8 (a-h,o-z)
5252 include 'DIMENSIONS'
5253 include 'COMMON.GEO'
5254 include 'COMMON.LOCAL'
5255 include 'COMMON.VAR'
5256 include 'COMMON.SCROT'
5257 include 'COMMON.INTERACT'
5258 include 'COMMON.DERIV'
5259 include 'COMMON.CHAIN'
5260 include 'COMMON.IOUNITS'
5261 include 'COMMON.NAMES'
5262 include 'COMMON.FFIELD'
5263 include 'COMMON.CONTROL'
5264 include 'COMMON.VECTORS'
5265 double precision x_prime(3),y_prime(3),z_prime(3)
5266 & , sumene,dsc_i,dp2_i,x(65),
5267 & xx,yy,zz,sumene1,sumene2,sumene3,sumene4,s1,s1_6,s2,s2_6,
5268 & de_dxx,de_dyy,de_dzz,de_dt
5269 double precision s1_t,s1_6_t,s2_t,s2_6_t
5271 & dXX_Ci1(3),dYY_Ci1(3),dZZ_Ci1(3),dXX_Ci(3),
5272 & dYY_Ci(3),dZZ_Ci(3),dXX_XYZ(3),dYY_XYZ(3),dZZ_XYZ(3),
5273 & dt_dCi(3),dt_dCi1(3)
5274 common /sccalc/ time11,time12,time112,theti,it,nlobit
5277 do i=loc_start,loc_end
5278 if (itype(i).eq.ntyp1) cycle
5279 costtab(i+1) =dcos(theta(i+1))
5280 sinttab(i+1) =dsqrt(1-costtab(i+1)*costtab(i+1))
5281 cost2tab(i+1)=dsqrt(0.5d0*(1.0d0+costtab(i+1)))
5282 sint2tab(i+1)=dsqrt(0.5d0*(1.0d0-costtab(i+1)))
5283 cosfac2=0.5d0/(1.0d0+costtab(i+1))
5284 cosfac=dsqrt(cosfac2)
5285 sinfac2=0.5d0/(1.0d0-costtab(i+1))
5286 sinfac=dsqrt(sinfac2)
5288 if (it.eq.10) goto 1
5290 C Compute the axes of tghe local cartesian coordinates system; store in
5291 c x_prime, y_prime and z_prime
5298 C write(2,*) "dc_norm", dc_norm(1,i+nres),dc_norm(2,i+nres),
5299 C & dc_norm(3,i+nres)
5301 x_prime(j) = (dc_norm(j,i) - dc_norm(j,i-1))*cosfac
5302 y_prime(j) = (dc_norm(j,i) + dc_norm(j,i-1))*sinfac
5305 z_prime(j) = -uz(j,i-1)*dsign(1.0d0,dfloat(itype(i)))
5308 c write (2,*) "x_prime",(x_prime(j),j=1,3)
5309 c write (2,*) "y_prime",(y_prime(j),j=1,3)
5310 c write (2,*) "z_prime",(z_prime(j),j=1,3)
5311 c write (2,*) "xx",scalar(x_prime(1),x_prime(1)),
5312 c & " xy",scalar(x_prime(1),y_prime(1)),
5313 c & " xz",scalar(x_prime(1),z_prime(1)),
5314 c & " yy",scalar(y_prime(1),y_prime(1)),
5315 c & " yz",scalar(y_prime(1),z_prime(1)),
5316 c & " zz",scalar(z_prime(1),z_prime(1))
5318 C Transform the unit vector of the ith side-chain centroid, dC_norm(*,i),
5319 C to local coordinate system. Store in xx, yy, zz.
5325 xx = xx + x_prime(j)*dc_norm(j,i+nres)
5326 yy = yy + y_prime(j)*dc_norm(j,i+nres)
5327 zz = zz + z_prime(j)*dc_norm(j,i+nres)
5334 C Compute the energy of the ith side cbain
5336 c write (2,*) "xx",xx," yy",yy," zz",zz
5339 x(j) = sc_parmin(j,it)
5342 Cc diagnostics - remove later
5344 yy1 = dsin(alph(2))*dcos(omeg(2))
5345 zz1 = -dsign(1.0,dfloat(itype(i)))*dsin(alph(2))*dsin(omeg(2))
5346 write(2,'(3f8.1,3f9.3,1x,3f9.3)')
5347 & alph(2)*rad2deg,omeg(2)*rad2deg,theta(3)*rad2deg,xx,yy,zz,
5349 C," --- ", xx_w,yy_w,zz_w
5352 sumene1= x(1)+ x(2)*xx+ x(3)*yy+ x(4)*zz+ x(5)*xx**2
5353 & + x(6)*yy**2+ x(7)*zz**2+ x(8)*xx*zz+ x(9)*xx*yy
5355 sumene2= x(11) + x(12)*xx + x(13)*yy + x(14)*zz + x(15)*xx**2
5356 & + x(16)*yy**2 + x(17)*zz**2 + x(18)*xx*zz + x(19)*xx*yy
5358 sumene3= x(21) +x(22)*xx +x(23)*yy +x(24)*zz +x(25)*xx**2
5359 & +x(26)*yy**2 +x(27)*zz**2 +x(28)*xx*zz +x(29)*xx*yy
5360 & +x(30)*yy*zz +x(31)*xx**3 +x(32)*yy**3 +x(33)*zz**3
5361 & +x(34)*(xx**2)*yy +x(35)*(xx**2)*zz +x(36)*(yy**2)*xx
5362 & +x(37)*(yy**2)*zz +x(38)*(zz**2)*xx +x(39)*(zz**2)*yy
5364 sumene4= x(41) +x(42)*xx +x(43)*yy +x(44)*zz +x(45)*xx**2
5365 & +x(46)*yy**2 +x(47)*zz**2 +x(48)*xx*zz +x(49)*xx*yy
5366 & +x(50)*yy*zz +x(51)*xx**3 +x(52)*yy**3 +x(53)*zz**3
5367 & +x(54)*(xx**2)*yy +x(55)*(xx**2)*zz +x(56)*(yy**2)*xx
5368 & +x(57)*(yy**2)*zz +x(58)*(zz**2)*xx +x(59)*(zz**2)*yy
5370 dsc_i = 0.743d0+x(61)
5372 dscp1=dsqrt(dsc_i**2+dp2_i**2-2*dsc_i*dp2_i
5373 & *(xx*cost2tab(i+1)+yy*sint2tab(i+1)))
5374 dscp2=dsqrt(dsc_i**2+dp2_i**2-2*dsc_i*dp2_i
5375 & *(xx*cost2tab(i+1)-yy*sint2tab(i+1)))
5376 s1=(1+x(63))/(0.1d0 + dscp1)
5377 s1_6=(1+x(64))/(0.1d0 + dscp1**6)
5378 s2=(1+x(65))/(0.1d0 + dscp2)
5379 s2_6=(1+x(65))/(0.1d0 + dscp2**6)
5380 sumene = ( sumene3*sint2tab(i+1) + sumene1)*(s1+s1_6)
5381 & + (sumene4*cost2tab(i+1) +sumene2)*(s2+s2_6)
5382 c write(2,'(i2," sumene",7f9.3)') i,sumene1,sumene2,sumene3,
5384 c & dscp1,dscp2,sumene
5385 c sumene = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
5386 escloc = escloc + sumene
5387 c write (2,*) "i",i," escloc",sumene,escloc,it,itype(i)
5392 C This section to check the numerical derivatives of the energy of ith side
5393 C chain in xx, yy, zz, and theta. Use the -DDEBUG compiler option or insert
5394 C #define DEBUG in the code to turn it on.
5396 write (2,*) "sumene =",sumene
5400 write (2,*) xx,yy,zz
5401 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
5402 de_dxx_num=(sumenep-sumene)/aincr
5404 write (2,*) "xx+ sumene from enesc=",sumenep
5407 write (2,*) xx,yy,zz
5408 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
5409 de_dyy_num=(sumenep-sumene)/aincr
5411 write (2,*) "yy+ sumene from enesc=",sumenep
5414 write (2,*) xx,yy,zz
5415 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
5416 de_dzz_num=(sumenep-sumene)/aincr
5418 write (2,*) "zz+ sumene from enesc=",sumenep
5419 costsave=cost2tab(i+1)
5420 sintsave=sint2tab(i+1)
5421 cost2tab(i+1)=dcos(0.5d0*(theta(i+1)+aincr))
5422 sint2tab(i+1)=dsin(0.5d0*(theta(i+1)+aincr))
5423 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
5424 de_dt_num=(sumenep-sumene)/aincr
5425 write (2,*) " t+ sumene from enesc=",sumenep
5426 cost2tab(i+1)=costsave
5427 sint2tab(i+1)=sintsave
5428 C End of diagnostics section.
5431 C Compute the gradient of esc
5433 c zz=zz*dsign(1.0,dfloat(itype(i)))
5434 pom_s1=(1.0d0+x(63))/(0.1d0 + dscp1)**2
5435 pom_s16=6*(1.0d0+x(64))/(0.1d0 + dscp1**6)**2
5436 pom_s2=(1.0d0+x(65))/(0.1d0 + dscp2)**2
5437 pom_s26=6*(1.0d0+x(65))/(0.1d0 + dscp2**6)**2
5438 pom_dx=dsc_i*dp2_i*cost2tab(i+1)
5439 pom_dy=dsc_i*dp2_i*sint2tab(i+1)
5440 pom_dt1=-0.5d0*dsc_i*dp2_i*(xx*sint2tab(i+1)-yy*cost2tab(i+1))
5441 pom_dt2=-0.5d0*dsc_i*dp2_i*(xx*sint2tab(i+1)+yy*cost2tab(i+1))
5442 pom1=(sumene3*sint2tab(i+1)+sumene1)
5443 & *(pom_s1/dscp1+pom_s16*dscp1**4)
5444 pom2=(sumene4*cost2tab(i+1)+sumene2)
5445 & *(pom_s2/dscp2+pom_s26*dscp2**4)
5446 sumene1x=x(2)+2*x(5)*xx+x(8)*zz+ x(9)*yy
5447 sumene3x=x(22)+2*x(25)*xx+x(28)*zz+x(29)*yy+3*x(31)*xx**2
5448 & +2*x(34)*xx*yy +2*x(35)*xx*zz +x(36)*(yy**2) +x(38)*(zz**2)
5450 sumene2x=x(12)+2*x(15)*xx+x(18)*zz+ x(19)*yy
5451 sumene4x=x(42)+2*x(45)*xx +x(48)*zz +x(49)*yy +3*x(51)*xx**2
5452 & +2*x(54)*xx*yy+2*x(55)*xx*zz+x(56)*(yy**2)+x(58)*(zz**2)
5454 de_dxx =(sumene1x+sumene3x*sint2tab(i+1))*(s1+s1_6)
5455 & +(sumene2x+sumene4x*cost2tab(i+1))*(s2+s2_6)
5456 & +(pom1+pom2)*pom_dx
5458 write(2,*), "de_dxx = ", de_dxx,de_dxx_num,itype(i)
5461 sumene1y=x(3) + 2*x(6)*yy + x(9)*xx + x(10)*zz
5462 sumene3y=x(23) +2*x(26)*yy +x(29)*xx +x(30)*zz +3*x(32)*yy**2
5463 & +x(34)*(xx**2) +2*x(36)*yy*xx +2*x(37)*yy*zz +x(39)*(zz**2)
5465 sumene2y=x(13) + 2*x(16)*yy + x(19)*xx + x(20)*zz
5466 sumene4y=x(43)+2*x(46)*yy+x(49)*xx +x(50)*zz
5467 & +3*x(52)*yy**2+x(54)*xx**2+2*x(56)*yy*xx +2*x(57)*yy*zz
5468 & +x(59)*zz**2 +x(60)*xx*zz
5469 de_dyy =(sumene1y+sumene3y*sint2tab(i+1))*(s1+s1_6)
5470 & +(sumene2y+sumene4y*cost2tab(i+1))*(s2+s2_6)
5471 & +(pom1-pom2)*pom_dy
5473 write(2,*), "de_dyy = ", de_dyy,de_dyy_num,itype(i)
5476 de_dzz =(x(24) +2*x(27)*zz +x(28)*xx +x(30)*yy
5477 & +3*x(33)*zz**2 +x(35)*xx**2 +x(37)*yy**2 +2*x(38)*zz*xx
5478 & +2*x(39)*zz*yy +x(40)*xx*yy)*sint2tab(i+1)*(s1+s1_6)
5479 & +(x(4) + 2*x(7)*zz+ x(8)*xx + x(10)*yy)*(s1+s1_6)
5480 & +(x(44)+2*x(47)*zz +x(48)*xx +x(50)*yy +3*x(53)*zz**2
5481 & +x(55)*xx**2 +x(57)*(yy**2)+2*x(58)*zz*xx +2*x(59)*zz*yy
5482 & +x(60)*xx*yy)*cost2tab(i+1)*(s2+s2_6)
5483 & + ( x(14) + 2*x(17)*zz+ x(18)*xx + x(20)*yy)*(s2+s2_6)
5485 write(2,*), "de_dzz = ", de_dzz,de_dzz_num,itype(i)
5488 de_dt = 0.5d0*sumene3*cost2tab(i+1)*(s1+s1_6)
5489 & -0.5d0*sumene4*sint2tab(i+1)*(s2+s2_6)
5490 & +pom1*pom_dt1+pom2*pom_dt2
5492 write(2,*), "de_dt = ", de_dt,de_dt_num,itype(i)
5497 cossc=scalar(dc_norm(1,i),dc_norm(1,i+nres))
5498 cossc1=scalar(dc_norm(1,i-1),dc_norm(1,i+nres))
5499 cosfac2xx=cosfac2*xx
5500 sinfac2yy=sinfac2*yy
5502 dt_dCi(k) = -(dc_norm(k,i-1)+costtab(i+1)*dc_norm(k,i))*
5504 dt_dCi1(k)= -(dc_norm(k,i)+costtab(i+1)*dc_norm(k,i-1))*
5506 pom=(dC_norm(k,i+nres)-cossc*dC_norm(k,i))*vbld_inv(i+1)
5507 pom1=(dC_norm(k,i+nres)-cossc1*dC_norm(k,i-1))*vbld_inv(i)
5508 c write (iout,*) "i",i," k",k," pom",pom," pom1",pom1,
5509 c & " dt_dCi",dt_dCi(k)," dt_dCi1",dt_dCi1(k)
5510 c write (iout,*) "dC_norm",(dC_norm(j,i),j=1,3),
5511 c & (dC_norm(j,i-1),j=1,3)," vbld_inv",vbld_inv(i+1),vbld_inv(i)
5512 dXX_Ci(k)=pom*cosfac-dt_dCi(k)*cosfac2xx
5513 dXX_Ci1(k)=-pom1*cosfac-dt_dCi1(k)*cosfac2xx
5514 dYY_Ci(k)=pom*sinfac+dt_dCi(k)*sinfac2yy
5515 dYY_Ci1(k)=pom1*sinfac+dt_dCi1(k)*sinfac2yy
5519 dZZ_Ci(k)=dZZ_Ci(k)-uzgrad(j,k,2,i-1)
5520 & *dsign(1.0d0,dfloat(itype(i)))*dC_norm(j,i+nres)
5521 dZZ_Ci1(k)=dZZ_Ci1(k)-uzgrad(j,k,1,i-1)
5522 & *dsign(1.0d0,dfloat(itype(i)))*dC_norm(j,i+nres)
5525 dXX_XYZ(k)=vbld_inv(i+nres)*(x_prime(k)-xx*dC_norm(k,i+nres))
5526 dYY_XYZ(k)=vbld_inv(i+nres)*(y_prime(k)-yy*dC_norm(k,i+nres))
5527 dZZ_XYZ(k)=vbld_inv(i+nres)*
5528 & (z_prime(k)-zz*dC_norm(k,i+nres))
5530 dt_dCi(k) = -dt_dCi(k)/sinttab(i+1)
5531 dt_dCi1(k)= -dt_dCi1(k)/sinttab(i+1)
5535 dXX_Ctab(k,i)=dXX_Ci(k)
5536 dXX_C1tab(k,i)=dXX_Ci1(k)
5537 dYY_Ctab(k,i)=dYY_Ci(k)
5538 dYY_C1tab(k,i)=dYY_Ci1(k)
5539 dZZ_Ctab(k,i)=dZZ_Ci(k)
5540 dZZ_C1tab(k,i)=dZZ_Ci1(k)
5541 dXX_XYZtab(k,i)=dXX_XYZ(k)
5542 dYY_XYZtab(k,i)=dYY_XYZ(k)
5543 dZZ_XYZtab(k,i)=dZZ_XYZ(k)
5547 c write (iout,*) "k",k," dxx_ci1",dxx_ci1(k)," dyy_ci1",
5548 c & dyy_ci1(k)," dzz_ci1",dzz_ci1(k)
5549 c write (iout,*) "k",k," dxx_ci",dxx_ci(k)," dyy_ci",
5550 c & dyy_ci(k)," dzz_ci",dzz_ci(k)
5551 c write (iout,*) "k",k," dt_dci",dt_dci(k)," dt_dci",
5553 c write (iout,*) "k",k," dxx_XYZ",dxx_XYZ(k)," dyy_XYZ",
5554 c & dyy_XYZ(k)," dzz_XYZ",dzz_XYZ(k)
5555 gscloc(k,i-1)=gscloc(k,i-1)+de_dxx*dxx_ci1(k)
5556 & +de_dyy*dyy_ci1(k)+de_dzz*dzz_ci1(k)+de_dt*dt_dCi1(k)
5557 gscloc(k,i)=gscloc(k,i)+de_dxx*dxx_Ci(k)
5558 & +de_dyy*dyy_Ci(k)+de_dzz*dzz_Ci(k)+de_dt*dt_dCi(k)
5559 gsclocx(k,i)= de_dxx*dxx_XYZ(k)
5560 & +de_dyy*dyy_XYZ(k)+de_dzz*dzz_XYZ(k)
5562 c write(iout,*) "ENERGY GRAD = ", (gscloc(k,i-1),k=1,3),
5563 c & (gscloc(k,i),k=1,3),(gsclocx(k,i),k=1,3)
5565 C to check gradient call subroutine check_grad
5571 c------------------------------------------------------------------------------
5572 double precision function enesc(x,xx,yy,zz,cost2,sint2)
5574 double precision x(65),xx,yy,zz,cost2,sint2,sumene1,sumene2,
5575 & sumene3,sumene4,sumene,dsc_i,dp2_i,dscp1,dscp2,s1,s1_6,s2,s2_6
5576 sumene1= x(1)+ x(2)*xx+ x(3)*yy+ x(4)*zz+ x(5)*xx**2
5577 & + x(6)*yy**2+ x(7)*zz**2+ x(8)*xx*zz+ x(9)*xx*yy
5579 sumene2= x(11) + x(12)*xx + x(13)*yy + x(14)*zz + x(15)*xx**2
5580 & + x(16)*yy**2 + x(17)*zz**2 + x(18)*xx*zz + x(19)*xx*yy
5582 sumene3= x(21) +x(22)*xx +x(23)*yy +x(24)*zz +x(25)*xx**2
5583 & +x(26)*yy**2 +x(27)*zz**2 +x(28)*xx*zz +x(29)*xx*yy
5584 & +x(30)*yy*zz +x(31)*xx**3 +x(32)*yy**3 +x(33)*zz**3
5585 & +x(34)*(xx**2)*yy +x(35)*(xx**2)*zz +x(36)*(yy**2)*xx
5586 & +x(37)*(yy**2)*zz +x(38)*(zz**2)*xx +x(39)*(zz**2)*yy
5588 sumene4= x(41) +x(42)*xx +x(43)*yy +x(44)*zz +x(45)*xx**2
5589 & +x(46)*yy**2 +x(47)*zz**2 +x(48)*xx*zz +x(49)*xx*yy
5590 & +x(50)*yy*zz +x(51)*xx**3 +x(52)*yy**3 +x(53)*zz**3
5591 & +x(54)*(xx**2)*yy +x(55)*(xx**2)*zz +x(56)*(yy**2)*xx
5592 & +x(57)*(yy**2)*zz +x(58)*(zz**2)*xx +x(59)*(zz**2)*yy
5594 dsc_i = 0.743d0+x(61)
5596 dscp1=dsqrt(dsc_i**2+dp2_i**2-2*dsc_i*dp2_i
5597 & *(xx*cost2+yy*sint2))
5598 dscp2=dsqrt(dsc_i**2+dp2_i**2-2*dsc_i*dp2_i
5599 & *(xx*cost2-yy*sint2))
5600 s1=(1+x(63))/(0.1d0 + dscp1)
5601 s1_6=(1+x(64))/(0.1d0 + dscp1**6)
5602 s2=(1+x(65))/(0.1d0 + dscp2)
5603 s2_6=(1+x(65))/(0.1d0 + dscp2**6)
5604 sumene = ( sumene3*sint2 + sumene1)*(s1+s1_6)
5605 & + (sumene4*cost2 +sumene2)*(s2+s2_6)
5610 c------------------------------------------------------------------------------
5611 subroutine gcont(rij,r0ij,eps0ij,delta,fcont,fprimcont)
5613 C This procedure calculates two-body contact function g(rij) and its derivative:
5616 C g(rij) = esp0ij*(-0.9375*x+0.625*x**3-0.1875*x**5) ! -1 =< x =< 1
5619 C where x=(rij-r0ij)/delta
5621 C rij - interbody distance, r0ij - contact distance, eps0ij - contact energy
5624 double precision rij,r0ij,eps0ij,fcont,fprimcont
5625 double precision x,x2,x4,delta
5629 if (x.lt.-1.0D0) then
5632 else if (x.le.1.0D0) then
5635 fcont=eps0ij*(x*(-0.9375D0+0.6250D0*x2-0.1875D0*x4)+0.5D0)
5636 fprimcont=eps0ij * (-0.9375D0+1.8750D0*x2-0.9375D0*x4)/delta
5643 c------------------------------------------------------------------------------
5644 subroutine splinthet(theti,delta,ss,ssder)
5645 implicit real*8 (a-h,o-z)
5646 include 'DIMENSIONS'
5647 include 'COMMON.VAR'
5648 include 'COMMON.GEO'
5651 if (theti.gt.pipol) then
5652 call gcont(theti,thetup,1.0d0,delta,ss,ssder)
5654 call gcont(-theti,-thetlow,1.0d0,delta,ss,ssder)
5659 c------------------------------------------------------------------------------
5660 subroutine spline1(x,x0,delta,f0,f1,fprim0,f,fprim)
5662 double precision x,x0,delta,f0,f1,fprim0,f,fprim
5663 double precision ksi,ksi2,ksi3,a1,a2,a3
5664 a1=fprim0*delta/(f1-f0)
5670 f=f0+(f1-f0)*ksi*(a1+ksi*(a2+a3*ksi))
5671 fprim=(f1-f0)/delta*(a1+ksi*(2*a2+3*ksi*a3))
5674 c------------------------------------------------------------------------------
5675 subroutine spline2(x,x0,delta,f0x,f1x,fprim0x,fx)
5677 double precision x,x0,delta,f0x,f1x,fprim0x,fx
5678 double precision ksi,ksi2,ksi3,a1,a2,a3
5683 a2=3*(f1x-f0x)-2*fprim0x*delta
5684 a3=fprim0x*delta-2*(f1x-f0x)
5685 fx=f0x+a1*ksi+a2*ksi2+a3*ksi3
5688 C-----------------------------------------------------------------------------
5690 C-----------------------------------------------------------------------------
5691 subroutine etor(etors,edihcnstr)
5692 implicit real*8 (a-h,o-z)
5693 include 'DIMENSIONS'
5694 include 'COMMON.VAR'
5695 include 'COMMON.GEO'
5696 include 'COMMON.LOCAL'
5697 include 'COMMON.TORSION'
5698 include 'COMMON.INTERACT'
5699 include 'COMMON.DERIV'
5700 include 'COMMON.CHAIN'
5701 include 'COMMON.NAMES'
5702 include 'COMMON.IOUNITS'
5703 include 'COMMON.FFIELD'
5704 include 'COMMON.TORCNSTR'
5705 include 'COMMON.CONTROL'
5707 C Set lprn=.true. for debugging
5711 do i=iphi_start,iphi_end
5713 if (itype(i-2).eq.ntyp1.or. itype(i-1).eq.ntyp1
5714 & .or. itype(i).eq.ntyp1) cycle
5715 itori=itortyp(itype(i-2))
5716 itori1=itortyp(itype(i-1))
5719 C Proline-Proline pair is a special case...
5720 if (itori.eq.3 .and. itori1.eq.3) then
5721 if (phii.gt.-dwapi3) then
5723 fac=1.0D0/(1.0D0-cosphi)
5724 etorsi=v1(1,3,3)*fac
5725 etorsi=etorsi+etorsi
5726 etors=etors+etorsi-v1(1,3,3)
5727 if (energy_dec) etors_ii=etors_ii+etorsi-v1(1,3,3)
5728 gloci=gloci-3*fac*etorsi*dsin(3*phii)
5731 v1ij=v1(j+1,itori,itori1)
5732 v2ij=v2(j+1,itori,itori1)
5735 etors=etors+v1ij*cosphi+v2ij*sinphi+dabs(v1ij)+dabs(v2ij)
5736 if (energy_dec) etors_ii=etors_ii+
5737 & v2ij*sinphi+dabs(v1ij)+dabs(v2ij)
5738 gloci=gloci+j*(v2ij*cosphi-v1ij*sinphi)
5742 v1ij=v1(j,itori,itori1)
5743 v2ij=v2(j,itori,itori1)
5746 etors=etors+v1ij*cosphi+v2ij*sinphi+dabs(v1ij)+dabs(v2ij)
5747 if (energy_dec) etors_ii=etors_ii+
5748 & v1ij*cosphi+v2ij*sinphi+dabs(v1ij)+dabs(v2ij)
5749 gloci=gloci+j*(v2ij*cosphi-v1ij*sinphi)
5752 if (energy_dec) write (iout,'(a6,i5,0pf7.3)')
5755 & write (iout,'(2(a3,2x,i3,2x),2i3,6f8.3/26x,6f8.3/)')
5756 & restyp(itype(i-2)),i-2,restyp(itype(i-1)),i-1,itori,itori1,
5757 & (v1(j,itori,itori1),j=1,6),(v2(j,itori,itori1),j=1,6)
5758 gloc(i-3,icg)=gloc(i-3,icg)+wtor*gloci
5759 c write (iout,*) 'i=',i,' gloc=',gloc(i-3,icg)
5761 ! 6/20/98 - dihedral angle constraints
5764 itori=idih_constr(i)
5767 if (difi.gt.drange(i)) then
5769 edihcnstr=edihcnstr+0.25d0*ftors*difi**4
5770 gloc(itori-3,icg)=gloc(itori-3,icg)+ftors*difi**3
5771 else if (difi.lt.-drange(i)) then
5773 edihcnstr=edihcnstr+0.25d0*ftors*difi**4
5774 gloc(itori-3,icg)=gloc(itori-3,icg)+ftors*difi**3
5776 ! write (iout,'(2i5,2f8.3,2e14.5)') i,itori,rad2deg*phii,
5777 ! & rad2deg*difi,0.25d0*ftors*difi**4,gloc(itori-3,icg)
5779 ! write (iout,*) 'edihcnstr',edihcnstr
5782 c------------------------------------------------------------------------------
5783 subroutine etor_d(etors_d)
5787 c----------------------------------------------------------------------------
5789 subroutine etor(etors,edihcnstr)
5790 implicit real*8 (a-h,o-z)
5791 include 'DIMENSIONS'
5792 include 'COMMON.VAR'
5793 include 'COMMON.GEO'
5794 include 'COMMON.LOCAL'
5795 include 'COMMON.TORSION'
5796 include 'COMMON.INTERACT'
5797 include 'COMMON.DERIV'
5798 include 'COMMON.CHAIN'
5799 include 'COMMON.NAMES'
5800 include 'COMMON.IOUNITS'
5801 include 'COMMON.FFIELD'
5802 include 'COMMON.TORCNSTR'
5803 include 'COMMON.CONTROL'
5805 C Set lprn=.true. for debugging
5809 do i=iphi_start,iphi_end
5810 if (itype(i-2).eq.ntyp1 .or. itype(i-1).eq.ntyp1
5811 & .or. itype(i).eq.ntyp1) cycle
5813 if (iabs(itype(i)).eq.20) then
5818 itori=itortyp(itype(i-2))
5819 itori1=itortyp(itype(i-1))
5822 C Regular cosine and sine terms
5823 do j=1,nterm(itori,itori1,iblock)
5824 v1ij=v1(j,itori,itori1,iblock)
5825 v2ij=v2(j,itori,itori1,iblock)
5828 etors=etors+v1ij*cosphi+v2ij*sinphi
5829 if (energy_dec) etors_ii=etors_ii+
5830 & v1ij*cosphi+v2ij*sinphi
5831 gloci=gloci+j*(v2ij*cosphi-v1ij*sinphi)
5835 C E = SUM ----------------------------------- - v1
5836 C [v2 cos(phi/2)+v3 sin(phi/2)]^2 + 1
5838 cosphi=dcos(0.5d0*phii)
5839 sinphi=dsin(0.5d0*phii)
5840 do j=1,nlor(itori,itori1,iblock)
5841 vl1ij=vlor1(j,itori,itori1)
5842 vl2ij=vlor2(j,itori,itori1)
5843 vl3ij=vlor3(j,itori,itori1)
5844 pom=vl2ij*cosphi+vl3ij*sinphi
5845 pom1=1.0d0/(pom*pom+1.0d0)
5846 etors=etors+vl1ij*pom1
5847 if (energy_dec) etors_ii=etors_ii+
5850 gloci=gloci+vl1ij*(vl3ij*cosphi-vl2ij*sinphi)*pom
5852 C Subtract the constant term
5853 etors=etors-v0(itori,itori1,iblock)
5854 if (energy_dec) write (iout,'(a6,i5,0pf7.3)')
5857 & write (iout,'(2(a3,2x,i3,2x),2i3,f10.2,6f8.3/36x,6f8.3/)')
5858 & restyp(itype(i-2)),i-2,restyp(itype(i-1)),i-1,itori,itori1,
5860 & (v1(j,itori,itori1,1),j=1,6),(v2(j,itori,itori1,1),j=1,6)
5861 gloc(i-3,icg)=gloc(i-3,icg)+wtor*gloci
5862 c write (iout,*) 'i=',i,' gloc=',gloc(i-3,icg)
5864 ! 6/20/98 - dihedral angle constraints
5866 c do i=1,ndih_constr
5867 do i=idihconstr_start,idihconstr_end
5868 itori=idih_constr(i)
5870 difi=pinorm(phii-phi0(i))
5871 if (difi.gt.drange(i)) then
5873 edihcnstr=edihcnstr+0.25d0*ftors*difi**4
5874 gloc(itori-3,icg)=gloc(itori-3,icg)+ftors*difi**3
5875 else if (difi.lt.-drange(i)) then
5877 edihcnstr=edihcnstr+0.25d0*ftors*difi**4
5878 gloc(itori-3,icg)=gloc(itori-3,icg)+ftors*difi**3
5882 cd write (iout,'(2i5,4f8.3,2e14.5)') i,itori,rad2deg*phii,
5883 cd & rad2deg*phi0(i), rad2deg*drange(i),
5884 cd & rad2deg*difi,0.25d0*ftors*difi**4,gloc(itori-3,icg)
5886 cd write (iout,*) 'edihcnstr',edihcnstr
5889 c----------------------------------------------------------------------------
5890 subroutine etor_d(etors_d)
5891 C 6/23/01 Compute double torsional energy
5892 implicit real*8 (a-h,o-z)
5893 include 'DIMENSIONS'
5894 include 'COMMON.VAR'
5895 include 'COMMON.GEO'
5896 include 'COMMON.LOCAL'
5897 include 'COMMON.TORSION'
5898 include 'COMMON.INTERACT'
5899 include 'COMMON.DERIV'
5900 include 'COMMON.CHAIN'
5901 include 'COMMON.NAMES'
5902 include 'COMMON.IOUNITS'
5903 include 'COMMON.FFIELD'
5904 include 'COMMON.TORCNSTR'
5906 C Set lprn=.true. for debugging
5910 c write(iout,*) "a tu??"
5911 do i=iphid_start,iphid_end
5912 if (itype(i-2).eq.ntyp1 .or. itype(i-1).eq.ntyp1
5913 & .or. itype(i).eq.ntyp1 .or. itype(i+1).eq.ntyp1) cycle
5914 itori=itortyp(itype(i-2))
5915 itori1=itortyp(itype(i-1))
5916 itori2=itortyp(itype(i))
5922 if (iabs(itype(i+1)).eq.20) iblock=2
5924 C Regular cosine and sine terms
5925 do j=1,ntermd_1(itori,itori1,itori2,iblock)
5926 v1cij=v1c(1,j,itori,itori1,itori2,iblock)
5927 v1sij=v1s(1,j,itori,itori1,itori2,iblock)
5928 v2cij=v1c(2,j,itori,itori1,itori2,iblock)
5929 v2sij=v1s(2,j,itori,itori1,itori2,iblock)
5930 cosphi1=dcos(j*phii)
5931 sinphi1=dsin(j*phii)
5932 cosphi2=dcos(j*phii1)
5933 sinphi2=dsin(j*phii1)
5934 etors_d=etors_d+v1cij*cosphi1+v1sij*sinphi1+
5935 & v2cij*cosphi2+v2sij*sinphi2
5936 gloci1=gloci1+j*(v1sij*cosphi1-v1cij*sinphi1)
5937 gloci2=gloci2+j*(v2sij*cosphi2-v2cij*sinphi2)
5939 do k=2,ntermd_2(itori,itori1,itori2,iblock)
5941 v1cdij = v2c(k,l,itori,itori1,itori2,iblock)
5942 v2cdij = v2c(l,k,itori,itori1,itori2,iblock)
5943 v1sdij = v2s(k,l,itori,itori1,itori2,iblock)
5944 v2sdij = v2s(l,k,itori,itori1,itori2,iblock)
5945 cosphi1p2=dcos(l*phii+(k-l)*phii1)
5946 cosphi1m2=dcos(l*phii-(k-l)*phii1)
5947 sinphi1p2=dsin(l*phii+(k-l)*phii1)
5948 sinphi1m2=dsin(l*phii-(k-l)*phii1)
5949 etors_d=etors_d+v1cdij*cosphi1p2+v2cdij*cosphi1m2+
5950 & v1sdij*sinphi1p2+v2sdij*sinphi1m2
5951 gloci1=gloci1+l*(v1sdij*cosphi1p2+v2sdij*cosphi1m2
5952 & -v1cdij*sinphi1p2-v2cdij*sinphi1m2)
5953 gloci2=gloci2+(k-l)*(v1sdij*cosphi1p2-v2sdij*cosphi1m2
5954 & -v1cdij*sinphi1p2+v2cdij*sinphi1m2)
5957 gloc(i-3,icg)=gloc(i-3,icg)+wtor_d*gloci1
5958 gloc(i-2,icg)=gloc(i-2,icg)+wtor_d*gloci2
5963 c------------------------------------------------------------------------------
5964 subroutine eback_sc_corr(esccor)
5965 c 7/21/2007 Correlations between the backbone-local and side-chain-local
5966 c conformational states; temporarily implemented as differences
5967 c between UNRES torsional potentials (dependent on three types of
5968 c residues) and the torsional potentials dependent on all 20 types
5969 c of residues computed from AM1 energy surfaces of terminally-blocked
5970 c amino-acid residues.
5971 implicit real*8 (a-h,o-z)
5972 include 'DIMENSIONS'
5973 include 'COMMON.VAR'
5974 include 'COMMON.GEO'
5975 include 'COMMON.LOCAL'
5976 include 'COMMON.TORSION'
5977 include 'COMMON.SCCOR'
5978 include 'COMMON.INTERACT'
5979 include 'COMMON.DERIV'
5980 include 'COMMON.CHAIN'
5981 include 'COMMON.NAMES'
5982 include 'COMMON.IOUNITS'
5983 include 'COMMON.FFIELD'
5984 include 'COMMON.CONTROL'
5986 C Set lprn=.true. for debugging
5989 c write (iout,*) "EBACK_SC_COR",itau_start,itau_end
5991 do i=itau_start,itau_end
5992 if ((itype(i-2).eq.ntyp1).or.(itype(i-1).eq.ntyp1)) cycle
5994 isccori=isccortyp(itype(i-2))
5995 isccori1=isccortyp(itype(i-1))
5996 c write (iout,*) "EBACK_SC_COR",i,nterm_sccor(isccori,isccori1)
5998 do intertyp=1,3 !intertyp
5999 cc Added 09 May 2012 (Adasko)
6000 cc Intertyp means interaction type of backbone mainchain correlation:
6001 c 1 = SC...Ca...Ca...Ca
6002 c 2 = Ca...Ca...Ca...SC
6003 c 3 = SC...Ca...Ca...SCi
6005 if (((intertyp.eq.3).and.((itype(i-2).eq.10).or.
6006 & (itype(i-1).eq.10).or.(itype(i-2).eq.ntyp1).or.
6007 & (itype(i-1).eq.ntyp1)))
6008 & .or. ((intertyp.eq.1).and.((itype(i-2).eq.10)
6009 & .or.(itype(i-2).eq.ntyp1).or.(itype(i-1).eq.ntyp1)
6010 & .or.(itype(i).eq.ntyp1)))
6011 & .or.((intertyp.eq.2).and.((itype(i-1).eq.10).or.
6012 & (itype(i-1).eq.ntyp1).or.(itype(i-2).eq.ntyp1).or.
6013 & (itype(i-3).eq.ntyp1)))) cycle
6014 if ((intertyp.eq.2).and.(i.eq.4).and.(itype(1).eq.ntyp1)) cycle
6015 if ((intertyp.eq.1).and.(i.eq.nres).and.(itype(nres).eq.ntyp1))
6017 do j=1,nterm_sccor(isccori,isccori1)
6018 v1ij=v1sccor(j,intertyp,isccori,isccori1)
6019 v2ij=v2sccor(j,intertyp,isccori,isccori1)
6020 cosphi=dcos(j*tauangle(intertyp,i))
6021 sinphi=dsin(j*tauangle(intertyp,i))
6022 esccor=esccor+v1ij*cosphi+v2ij*sinphi
6023 gloci=gloci+j*(v2ij*cosphi-v1ij*sinphi)
6025 c write (iout,*) "EBACK_SC_COR",i,v1ij*cosphi+v2ij*sinphi,intertyp
6026 gloc_sc(intertyp,i-3,icg)=gloc_sc(intertyp,i-3,icg)+wsccor*gloci
6028 & write (iout,'(2(a3,2x,i3,2x),2i3,6f8.3/26x,6f8.3/)')
6029 & restyp(itype(i-2)),i-2,restyp(itype(i-1)),i-1,isccori,isccori1,
6030 & (v1sccor(j,intertyp,isccori,isccori1),j=1,6)
6031 & ,(v2sccor(j,intertyp,isccori,isccori1),j=1,6)
6032 gsccor_loc(i-3)=gsccor_loc(i-3)+gloci
6038 c----------------------------------------------------------------------------
6039 subroutine multibody(ecorr)
6040 C This subroutine calculates multi-body contributions to energy following
6041 C the idea of Skolnick et al. If side chains I and J make a contact and
6042 C at the same time side chains I+1 and J+1 make a contact, an extra
6043 C contribution equal to sqrt(eps(i,j)*eps(i+1,j+1)) is added.
6044 implicit real*8 (a-h,o-z)
6045 include 'DIMENSIONS'
6046 include 'COMMON.IOUNITS'
6047 include 'COMMON.DERIV'
6048 include 'COMMON.INTERACT'
6049 include 'COMMON.CONTACTS'
6050 double precision gx(3),gx1(3)
6053 C Set lprn=.true. for debugging
6057 write (iout,'(a)') 'Contact function values:'
6059 write (iout,'(i2,20(1x,i2,f10.5))')
6060 & i,(jcont(j,i),facont(j,i),j=1,num_cont(i))
6075 num_conti=num_cont(i)
6076 num_conti1=num_cont(i1)
6081 if (j1.eq.j+ishift .or. j1.eq.j-ishift) then
6082 cd write(iout,*)'i=',i,' j=',j,' i1=',i1,' j1=',j1,
6083 cd & ' ishift=',ishift
6084 C Contacts I--J and I+ISHIFT--J+-ISHIFT1 occur simultaneously.
6085 C The system gains extra energy.
6086 ecorr=ecorr+esccorr(i,j,i1,j1,jj,kk)
6087 endif ! j1==j+-ishift
6096 c------------------------------------------------------------------------------
6097 double precision function esccorr(i,j,k,l,jj,kk)
6098 implicit real*8 (a-h,o-z)
6099 include 'DIMENSIONS'
6100 include 'COMMON.IOUNITS'
6101 include 'COMMON.DERIV'
6102 include 'COMMON.INTERACT'
6103 include 'COMMON.CONTACTS'
6104 double precision gx(3),gx1(3)
6109 cd write (iout,'(4i5,3f10.5)') i,j,k,l,eij,ekl,-eij*ekl
6110 C Calculate the multi-body contribution to energy.
6111 C Calculate multi-body contributions to the gradient.
6112 cd write (iout,'(2(2i3,3f10.5))')i,j,(gacont(m,jj,i),m=1,3),
6113 cd & k,l,(gacont(m,kk,k),m=1,3)
6115 gx(m) =ekl*gacont(m,jj,i)
6116 gx1(m)=eij*gacont(m,kk,k)
6117 gradxorr(m,i)=gradxorr(m,i)-gx(m)
6118 gradxorr(m,j)=gradxorr(m,j)+gx(m)
6119 gradxorr(m,k)=gradxorr(m,k)-gx1(m)
6120 gradxorr(m,l)=gradxorr(m,l)+gx1(m)
6124 gradcorr(ll,m)=gradcorr(ll,m)+gx(ll)
6129 gradcorr(ll,m)=gradcorr(ll,m)+gx1(ll)
6135 c------------------------------------------------------------------------------
6136 subroutine multibody_hb(ecorr,ecorr5,ecorr6,n_corr,n_corr1)
6137 C This subroutine calculates multi-body contributions to hydrogen-bonding
6138 implicit real*8 (a-h,o-z)
6139 include 'DIMENSIONS'
6140 include 'COMMON.IOUNITS'
6143 parameter (max_cont=maxconts)
6144 parameter (max_dim=26)
6145 integer source,CorrelType,CorrelID,CorrelType1,CorrelID1,Error
6146 double precision zapas(max_dim,maxconts,max_fg_procs),
6147 & zapas_recv(max_dim,maxconts,max_fg_procs)
6148 common /przechowalnia/ zapas
6149 integer status(MPI_STATUS_SIZE),req(maxconts*2),
6150 & status_array(MPI_STATUS_SIZE,maxconts*2)
6152 include 'COMMON.SETUP'
6153 include 'COMMON.FFIELD'
6154 include 'COMMON.DERIV'
6155 include 'COMMON.INTERACT'
6156 include 'COMMON.CONTACTS'
6157 include 'COMMON.CONTROL'
6158 include 'COMMON.LOCAL'
6159 double precision gx(3),gx1(3),time00
6162 C Set lprn=.true. for debugging
6167 if (nfgtasks.le.1) goto 30
6169 write (iout,'(a)') 'Contact function values before RECEIVE:'
6171 write (iout,'(2i3,50(1x,i2,f5.2))')
6172 & i,num_cont_hb(i),(jcont_hb(j,i),facont_hb(j,i),
6173 & j=1,num_cont_hb(i))
6177 do i=1,ntask_cont_from
6180 do i=1,ntask_cont_to
6183 c write (iout,*) "ntask_cont_from",ntask_cont_from," ntask_cont_to",
6185 C Make the list of contacts to send to send to other procesors
6186 c write (iout,*) "limits",max0(iturn4_end-1,iatel_s),iturn3_end
6188 do i=iturn3_start,iturn3_end
6189 c write (iout,*) "make contact list turn3",i," num_cont",
6191 call add_hb_contact(i,i+2,iturn3_sent_local(1,i))
6193 do i=iturn4_start,iturn4_end
6194 c write (iout,*) "make contact list turn4",i," num_cont",
6196 call add_hb_contact(i,i+3,iturn4_sent_local(1,i))
6200 c write (iout,*) "make contact list longrange",i,ii," num_cont",
6202 do j=1,num_cont_hb(i)
6205 iproc=iint_sent_local(k,jjc,ii)
6206 c write (iout,*) "i",i," j",j," k",k," jjc",jjc," iproc",iproc
6207 if (iproc.gt.0) then
6208 ncont_sent(iproc)=ncont_sent(iproc)+1
6209 nn=ncont_sent(iproc)
6211 zapas(2,nn,iproc)=jjc
6212 zapas(3,nn,iproc)=facont_hb(j,i)
6213 zapas(4,nn,iproc)=ees0p(j,i)
6214 zapas(5,nn,iproc)=ees0m(j,i)
6215 zapas(6,nn,iproc)=gacont_hbr(1,j,i)
6216 zapas(7,nn,iproc)=gacont_hbr(2,j,i)
6217 zapas(8,nn,iproc)=gacont_hbr(3,j,i)
6218 zapas(9,nn,iproc)=gacontm_hb1(1,j,i)
6219 zapas(10,nn,iproc)=gacontm_hb1(2,j,i)
6220 zapas(11,nn,iproc)=gacontm_hb1(3,j,i)
6221 zapas(12,nn,iproc)=gacontp_hb1(1,j,i)
6222 zapas(13,nn,iproc)=gacontp_hb1(2,j,i)
6223 zapas(14,nn,iproc)=gacontp_hb1(3,j,i)
6224 zapas(15,nn,iproc)=gacontm_hb2(1,j,i)
6225 zapas(16,nn,iproc)=gacontm_hb2(2,j,i)
6226 zapas(17,nn,iproc)=gacontm_hb2(3,j,i)
6227 zapas(18,nn,iproc)=gacontp_hb2(1,j,i)
6228 zapas(19,nn,iproc)=gacontp_hb2(2,j,i)
6229 zapas(20,nn,iproc)=gacontp_hb2(3,j,i)
6230 zapas(21,nn,iproc)=gacontm_hb3(1,j,i)
6231 zapas(22,nn,iproc)=gacontm_hb3(2,j,i)
6232 zapas(23,nn,iproc)=gacontm_hb3(3,j,i)
6233 zapas(24,nn,iproc)=gacontp_hb3(1,j,i)
6234 zapas(25,nn,iproc)=gacontp_hb3(2,j,i)
6235 zapas(26,nn,iproc)=gacontp_hb3(3,j,i)
6242 & "Numbers of contacts to be sent to other processors",
6243 & (ncont_sent(i),i=1,ntask_cont_to)
6244 write (iout,*) "Contacts sent"
6245 do ii=1,ntask_cont_to
6247 iproc=itask_cont_to(ii)
6248 write (iout,*) nn," contacts to processor",iproc,
6249 & " of CONT_TO_COMM group"
6251 write(iout,'(2f5.0,4f10.5)')(zapas(j,i,ii),j=1,5)
6259 CorrelID1=nfgtasks+fg_rank+1
6261 C Receive the numbers of needed contacts from other processors
6262 do ii=1,ntask_cont_from
6263 iproc=itask_cont_from(ii)
6265 call MPI_Irecv(ncont_recv(ii),1,MPI_INTEGER,iproc,CorrelType,
6266 & FG_COMM,req(ireq),IERR)
6268 c write (iout,*) "IRECV ended"
6270 C Send the number of contacts needed by other processors
6271 do ii=1,ntask_cont_to
6272 iproc=itask_cont_to(ii)
6274 call MPI_Isend(ncont_sent(ii),1,MPI_INTEGER,iproc,CorrelType,
6275 & FG_COMM,req(ireq),IERR)
6277 c write (iout,*) "ISEND ended"
6278 c write (iout,*) "number of requests (nn)",ireq
6281 & call MPI_Waitall(ireq,req,status_array,ierr)
6283 c & "Numbers of contacts to be received from other processors",
6284 c & (ncont_recv(i),i=1,ntask_cont_from)
6288 do ii=1,ntask_cont_from
6289 iproc=itask_cont_from(ii)
6291 c write (iout,*) "Receiving",nn," contacts from processor",iproc,
6292 c & " of CONT_TO_COMM group"
6296 call MPI_Irecv(zapas_recv(1,1,ii),nn*max_dim,
6297 & MPI_DOUBLE_PRECISION,iproc,CorrelType1,FG_COMM,req(ireq),IERR)
6298 c write (iout,*) "ireq,req",ireq,req(ireq)
6301 C Send the contacts to processors that need them
6302 do ii=1,ntask_cont_to
6303 iproc=itask_cont_to(ii)
6305 c write (iout,*) nn," contacts to processor",iproc,
6306 c & " of CONT_TO_COMM group"
6309 call MPI_Isend(zapas(1,1,ii),nn*max_dim,MPI_DOUBLE_PRECISION,
6310 & iproc,CorrelType1,FG_COMM,req(ireq),IERR)
6311 c write (iout,*) "ireq,req",ireq,req(ireq)
6313 c write(iout,'(2f5.0,4f10.5)')(zapas(j,i,ii),j=1,5)
6317 c write (iout,*) "number of requests (contacts)",ireq
6318 c write (iout,*) "req",(req(i),i=1,4)
6321 & call MPI_Waitall(ireq,req,status_array,ierr)
6322 do iii=1,ntask_cont_from
6323 iproc=itask_cont_from(iii)
6326 write (iout,*) "Received",nn," contacts from processor",iproc,
6327 & " of CONT_FROM_COMM group"
6330 write(iout,'(2f5.0,4f10.5)')(zapas_recv(j,i,iii),j=1,5)
6335 ii=zapas_recv(1,i,iii)
6336 c Flag the received contacts to prevent double-counting
6337 jj=-zapas_recv(2,i,iii)
6338 c write (iout,*) "iii",iii," i",i," ii",ii," jj",jj
6340 nnn=num_cont_hb(ii)+1
6343 facont_hb(nnn,ii)=zapas_recv(3,i,iii)
6344 ees0p(nnn,ii)=zapas_recv(4,i,iii)
6345 ees0m(nnn,ii)=zapas_recv(5,i,iii)
6346 gacont_hbr(1,nnn,ii)=zapas_recv(6,i,iii)
6347 gacont_hbr(2,nnn,ii)=zapas_recv(7,i,iii)
6348 gacont_hbr(3,nnn,ii)=zapas_recv(8,i,iii)
6349 gacontm_hb1(1,nnn,ii)=zapas_recv(9,i,iii)
6350 gacontm_hb1(2,nnn,ii)=zapas_recv(10,i,iii)
6351 gacontm_hb1(3,nnn,ii)=zapas_recv(11,i,iii)
6352 gacontp_hb1(1,nnn,ii)=zapas_recv(12,i,iii)
6353 gacontp_hb1(2,nnn,ii)=zapas_recv(13,i,iii)
6354 gacontp_hb1(3,nnn,ii)=zapas_recv(14,i,iii)
6355 gacontm_hb2(1,nnn,ii)=zapas_recv(15,i,iii)
6356 gacontm_hb2(2,nnn,ii)=zapas_recv(16,i,iii)
6357 gacontm_hb2(3,nnn,ii)=zapas_recv(17,i,iii)
6358 gacontp_hb2(1,nnn,ii)=zapas_recv(18,i,iii)
6359 gacontp_hb2(2,nnn,ii)=zapas_recv(19,i,iii)
6360 gacontp_hb2(3,nnn,ii)=zapas_recv(20,i,iii)
6361 gacontm_hb3(1,nnn,ii)=zapas_recv(21,i,iii)
6362 gacontm_hb3(2,nnn,ii)=zapas_recv(22,i,iii)
6363 gacontm_hb3(3,nnn,ii)=zapas_recv(23,i,iii)
6364 gacontp_hb3(1,nnn,ii)=zapas_recv(24,i,iii)
6365 gacontp_hb3(2,nnn,ii)=zapas_recv(25,i,iii)
6366 gacontp_hb3(3,nnn,ii)=zapas_recv(26,i,iii)
6371 write (iout,'(a)') 'Contact function values after receive:'
6373 write (iout,'(2i3,50(1x,i3,f5.2))')
6374 & i,num_cont_hb(i),(jcont_hb(j,i),facont_hb(j,i),
6375 & j=1,num_cont_hb(i))
6382 write (iout,'(a)') 'Contact function values:'
6384 write (iout,'(2i3,50(1x,i3,f5.2))')
6385 & i,num_cont_hb(i),(jcont_hb(j,i),facont_hb(j,i),
6386 & j=1,num_cont_hb(i))
6390 C Remove the loop below after debugging !!!
6397 C Calculate the local-electrostatic correlation terms
6398 do i=min0(iatel_s,iturn4_start),max0(iatel_e,iturn3_end)
6400 num_conti=num_cont_hb(i)
6401 num_conti1=num_cont_hb(i+1)
6408 c write (iout,*) 'i=',i,' j=',j,' i1=',i1,' j1=',j1,
6409 c & ' jj=',jj,' kk=',kk
6410 if ((j.gt.0 .and. j1.gt.0 .or. j.gt.0 .and. j1.lt.0
6411 & .or. j.lt.0 .and. j1.gt.0) .and.
6412 & (jp1.eq.jp+1 .or. jp1.eq.jp-1)) then
6413 C Contacts I-J and (I+1)-(J+1) or (I+1)-(J-1) occur simultaneously.
6414 C The system gains extra energy.
6415 ecorr=ecorr+ehbcorr(i,jp,i+1,jp1,jj,kk,0.72D0,0.32D0)
6416 if (energy_dec) write (iout,'(a6,2i5,0pf7.3)')
6417 & 'ecorrh',i,j,ehbcorr(i,j,i+1,j1,jj,kk,0.72D0,0.32D0)
6419 else if (j1.eq.j) then
6420 C Contacts I-J and I-(J+1) occur simultaneously.
6421 C The system loses extra energy.
6422 c ecorr=ecorr+ehbcorr(i,j,i+1,j,jj,kk,0.60D0,-0.40D0)
6427 c write (iout,*) 'i=',i,' j=',j,' i1=',i1,' j1=',j1,
6428 c & ' jj=',jj,' kk=',kk
6430 C Contacts I-J and (I+1)-J occur simultaneously.
6431 C The system loses extra energy.
6432 c ecorr=ecorr+ehbcorr(i,j,i,j+1,jj,kk,0.60D0,-0.40D0)
6439 c------------------------------------------------------------------------------
6440 subroutine add_hb_contact(ii,jj,itask)
6441 implicit real*8 (a-h,o-z)
6442 include "DIMENSIONS"
6443 include "COMMON.IOUNITS"
6446 parameter (max_cont=maxconts)
6447 parameter (max_dim=26)
6448 include "COMMON.CONTACTS"
6449 double precision zapas(max_dim,maxconts,max_fg_procs),
6450 & zapas_recv(max_dim,maxconts,max_fg_procs)
6451 common /przechowalnia/ zapas
6452 integer i,j,ii,jj,iproc,itask(4),nn
6453 c write (iout,*) "itask",itask
6456 if (iproc.gt.0) then
6457 do j=1,num_cont_hb(ii)
6459 c write (iout,*) "i",ii," j",jj," jjc",jjc
6461 ncont_sent(iproc)=ncont_sent(iproc)+1
6462 nn=ncont_sent(iproc)
6463 zapas(1,nn,iproc)=ii
6464 zapas(2,nn,iproc)=jjc
6465 zapas(3,nn,iproc)=facont_hb(j,ii)
6466 zapas(4,nn,iproc)=ees0p(j,ii)
6467 zapas(5,nn,iproc)=ees0m(j,ii)
6468 zapas(6,nn,iproc)=gacont_hbr(1,j,ii)
6469 zapas(7,nn,iproc)=gacont_hbr(2,j,ii)
6470 zapas(8,nn,iproc)=gacont_hbr(3,j,ii)
6471 zapas(9,nn,iproc)=gacontm_hb1(1,j,ii)
6472 zapas(10,nn,iproc)=gacontm_hb1(2,j,ii)
6473 zapas(11,nn,iproc)=gacontm_hb1(3,j,ii)
6474 zapas(12,nn,iproc)=gacontp_hb1(1,j,ii)
6475 zapas(13,nn,iproc)=gacontp_hb1(2,j,ii)
6476 zapas(14,nn,iproc)=gacontp_hb1(3,j,ii)
6477 zapas(15,nn,iproc)=gacontm_hb2(1,j,ii)
6478 zapas(16,nn,iproc)=gacontm_hb2(2,j,ii)
6479 zapas(17,nn,iproc)=gacontm_hb2(3,j,ii)
6480 zapas(18,nn,iproc)=gacontp_hb2(1,j,ii)
6481 zapas(19,nn,iproc)=gacontp_hb2(2,j,ii)
6482 zapas(20,nn,iproc)=gacontp_hb2(3,j,ii)
6483 zapas(21,nn,iproc)=gacontm_hb3(1,j,ii)
6484 zapas(22,nn,iproc)=gacontm_hb3(2,j,ii)
6485 zapas(23,nn,iproc)=gacontm_hb3(3,j,ii)
6486 zapas(24,nn,iproc)=gacontp_hb3(1,j,ii)
6487 zapas(25,nn,iproc)=gacontp_hb3(2,j,ii)
6488 zapas(26,nn,iproc)=gacontp_hb3(3,j,ii)
6496 c------------------------------------------------------------------------------
6497 subroutine multibody_eello(ecorr,ecorr5,ecorr6,eturn6,n_corr,
6499 C This subroutine calculates multi-body contributions to hydrogen-bonding
6500 implicit real*8 (a-h,o-z)
6501 include 'DIMENSIONS'
6502 include 'COMMON.IOUNITS'
6505 parameter (max_cont=maxconts)
6506 parameter (max_dim=70)
6507 integer source,CorrelType,CorrelID,CorrelType1,CorrelID1,Error
6508 double precision zapas(max_dim,maxconts,max_fg_procs),
6509 & zapas_recv(max_dim,maxconts,max_fg_procs)
6510 common /przechowalnia/ zapas
6511 integer status(MPI_STATUS_SIZE),req(maxconts*2),
6512 & status_array(MPI_STATUS_SIZE,maxconts*2)
6514 include 'COMMON.SETUP'
6515 include 'COMMON.FFIELD'
6516 include 'COMMON.DERIV'
6517 include 'COMMON.LOCAL'
6518 include 'COMMON.INTERACT'
6519 include 'COMMON.CONTACTS'
6520 include 'COMMON.CHAIN'
6521 include 'COMMON.CONTROL'
6522 double precision gx(3),gx1(3)
6523 integer num_cont_hb_old(maxres)
6525 double precision eello4,eello5,eelo6,eello_turn6
6526 external eello4,eello5,eello6,eello_turn6
6527 C Set lprn=.true. for debugging
6532 num_cont_hb_old(i)=num_cont_hb(i)
6536 if (nfgtasks.le.1) goto 30
6538 write (iout,'(a)') 'Contact function values before RECEIVE:'
6540 write (iout,'(2i3,50(1x,i2,f5.2))')
6541 & i,num_cont_hb(i),(jcont_hb(j,i),facont_hb(j,i),
6542 & j=1,num_cont_hb(i))
6546 do i=1,ntask_cont_from
6549 do i=1,ntask_cont_to
6552 c write (iout,*) "ntask_cont_from",ntask_cont_from," ntask_cont_to",
6554 C Make the list of contacts to send to send to other procesors
6555 do i=iturn3_start,iturn3_end
6556 c write (iout,*) "make contact list turn3",i," num_cont",
6558 call add_hb_contact_eello(i,i+2,iturn3_sent_local(1,i))
6560 do i=iturn4_start,iturn4_end
6561 c write (iout,*) "make contact list turn4",i," num_cont",
6563 call add_hb_contact_eello(i,i+3,iturn4_sent_local(1,i))
6567 c write (iout,*) "make contact list longrange",i,ii," num_cont",
6569 do j=1,num_cont_hb(i)
6572 iproc=iint_sent_local(k,jjc,ii)
6573 c write (iout,*) "i",i," j",j," k",k," jjc",jjc," iproc",iproc
6574 if (iproc.ne.0) then
6575 ncont_sent(iproc)=ncont_sent(iproc)+1
6576 nn=ncont_sent(iproc)
6578 zapas(2,nn,iproc)=jjc
6579 zapas(3,nn,iproc)=d_cont(j,i)
6583 zapas(ind,nn,iproc)=grij_hb_cont(kk,j,i)
6588 zapas(ind,nn,iproc)=a_chuj(ll,kk,j,i)
6596 zapas(ind,nn,iproc)=a_chuj_der(mm,ll,kk,jj,j,i)
6607 & "Numbers of contacts to be sent to other processors",
6608 & (ncont_sent(i),i=1,ntask_cont_to)
6609 write (iout,*) "Contacts sent"
6610 do ii=1,ntask_cont_to
6612 iproc=itask_cont_to(ii)
6613 write (iout,*) nn," contacts to processor",iproc,
6614 & " of CONT_TO_COMM group"
6616 write(iout,'(2f5.0,10f10.5)')(zapas(j,i,ii),j=1,10)
6624 CorrelID1=nfgtasks+fg_rank+1
6626 C Receive the numbers of needed contacts from other processors
6627 do ii=1,ntask_cont_from
6628 iproc=itask_cont_from(ii)
6630 call MPI_Irecv(ncont_recv(ii),1,MPI_INTEGER,iproc,CorrelType,
6631 & FG_COMM,req(ireq),IERR)
6633 c write (iout,*) "IRECV ended"
6635 C Send the number of contacts needed by other processors
6636 do ii=1,ntask_cont_to
6637 iproc=itask_cont_to(ii)
6639 call MPI_Isend(ncont_sent(ii),1,MPI_INTEGER,iproc,CorrelType,
6640 & FG_COMM,req(ireq),IERR)
6642 c write (iout,*) "ISEND ended"
6643 c write (iout,*) "number of requests (nn)",ireq
6646 & call MPI_Waitall(ireq,req,status_array,ierr)
6648 c & "Numbers of contacts to be received from other processors",
6649 c & (ncont_recv(i),i=1,ntask_cont_from)
6653 do ii=1,ntask_cont_from
6654 iproc=itask_cont_from(ii)
6656 c write (iout,*) "Receiving",nn," contacts from processor",iproc,
6657 c & " of CONT_TO_COMM group"
6661 call MPI_Irecv(zapas_recv(1,1,ii),nn*max_dim,
6662 & MPI_DOUBLE_PRECISION,iproc,CorrelType1,FG_COMM,req(ireq),IERR)
6663 c write (iout,*) "ireq,req",ireq,req(ireq)
6666 C Send the contacts to processors that need them
6667 do ii=1,ntask_cont_to
6668 iproc=itask_cont_to(ii)
6670 c write (iout,*) nn," contacts to processor",iproc,
6671 c & " of CONT_TO_COMM group"
6674 call MPI_Isend(zapas(1,1,ii),nn*max_dim,MPI_DOUBLE_PRECISION,
6675 & iproc,CorrelType1,FG_COMM,req(ireq),IERR)
6676 c write (iout,*) "ireq,req",ireq,req(ireq)
6678 c write(iout,'(2f5.0,4f10.5)')(zapas(j,i,ii),j=1,5)
6682 c write (iout,*) "number of requests (contacts)",ireq
6683 c write (iout,*) "req",(req(i),i=1,4)
6686 & call MPI_Waitall(ireq,req,status_array,ierr)
6687 do iii=1,ntask_cont_from
6688 iproc=itask_cont_from(iii)
6691 write (iout,*) "Received",nn," contacts from processor",iproc,
6692 & " of CONT_FROM_COMM group"
6695 write(iout,'(2f5.0,10f10.5)')(zapas_recv(j,i,iii),j=1,10)
6700 ii=zapas_recv(1,i,iii)
6701 c Flag the received contacts to prevent double-counting
6702 jj=-zapas_recv(2,i,iii)
6703 c write (iout,*) "iii",iii," i",i," ii",ii," jj",jj
6705 nnn=num_cont_hb(ii)+1
6708 d_cont(nnn,ii)=zapas_recv(3,i,iii)
6712 grij_hb_cont(kk,nnn,ii)=zapas_recv(ind,i,iii)
6717 a_chuj(ll,kk,nnn,ii)=zapas_recv(ind,i,iii)
6725 a_chuj_der(mm,ll,kk,jj,nnn,ii)=zapas_recv(ind,i,iii)
6734 write (iout,'(a)') 'Contact function values after receive:'
6736 write (iout,'(2i3,50(1x,i3,5f6.3))')
6737 & i,num_cont_hb(i),(jcont_hb(j,i),d_cont(j,i),
6738 & ((a_chuj(ll,kk,j,i),ll=1,2),kk=1,2),j=1,num_cont_hb(i))
6745 write (iout,'(a)') 'Contact function values:'
6747 write (iout,'(2i3,50(1x,i2,5f6.3))')
6748 & i,num_cont_hb(i),(jcont_hb(j,i),d_cont(j,i),
6749 & ((a_chuj(ll,kk,j,i),ll=1,2),kk=1,2),j=1,num_cont_hb(i))
6755 C Remove the loop below after debugging !!!
6762 C Calculate the dipole-dipole interaction energies
6763 if (wcorr6.gt.0.0d0 .or. wturn6.gt.0.0d0) then
6764 do i=iatel_s,iatel_e+1
6765 num_conti=num_cont_hb(i)
6774 C Calculate the local-electrostatic correlation terms
6775 c write (iout,*) "gradcorr5 in eello5 before loop"
6777 c write (iout,'(i5,3f10.5)')
6778 c & iii,(gradcorr5(jjj,iii),jjj=1,3)
6780 do i=min0(iatel_s,iturn4_start),max0(iatel_e+1,iturn3_end+1)
6781 c write (iout,*) "corr loop i",i
6783 num_conti=num_cont_hb(i)
6784 num_conti1=num_cont_hb(i+1)
6791 c write (iout,*) 'i=',i,' j=',j,' i1=',i1,' j1=',j1,
6792 c & ' jj=',jj,' kk=',kk
6793 c if (j1.eq.j+1 .or. j1.eq.j-1) then
6794 if ((j.gt.0 .and. j1.gt.0 .or. j.gt.0 .and. j1.lt.0
6795 & .or. j.lt.0 .and. j1.gt.0) .and.
6796 & (jp1.eq.jp+1 .or. jp1.eq.jp-1)) then
6797 C Contacts I-J and (I+1)-(J+1) or (I+1)-(J-1) occur simultaneously.
6798 C The system gains extra energy.
6800 sqd1=dsqrt(d_cont(jj,i))
6801 sqd2=dsqrt(d_cont(kk,i1))
6802 sred_geom = sqd1*sqd2
6803 IF (sred_geom.lt.cutoff_corr) THEN
6804 call gcont(sred_geom,r0_corr,1.0D0,delt_corr,
6806 cd write (iout,*) 'i=',i,' j=',jp,' i1=',i1,' j1=',jp1,
6807 cd & ' jj=',jj,' kk=',kk
6808 fac_prim1=0.5d0*sqd2/sqd1*fprimcont
6809 fac_prim2=0.5d0*sqd1/sqd2*fprimcont
6811 g_contij(l,1)=fac_prim1*grij_hb_cont(l,jj,i)
6812 g_contij(l,2)=fac_prim2*grij_hb_cont(l,kk,i1)
6815 cd write (iout,*) 'sred_geom=',sred_geom,
6816 cd & ' ekont=',ekont,' fprim=',fprimcont,
6817 cd & ' fac_prim1',fac_prim1,' fac_prim2',fac_prim2
6818 cd write (iout,*) "g_contij",g_contij
6819 cd write (iout,*) "grij_hb_cont i",grij_hb_cont(:,jj,i)
6820 cd write (iout,*) "grij_hb_cont i1",grij_hb_cont(:,jj,i1)
6821 call calc_eello(i,jp,i+1,jp1,jj,kk)
6822 if (wcorr4.gt.0.0d0)
6823 & ecorr=ecorr+eello4(i,jp,i+1,jp1,jj,kk)
6824 if (energy_dec.and.wcorr4.gt.0.0d0)
6825 1 write (iout,'(a6,4i5,0pf7.3)')
6826 2 'ecorr4',i,j,i+1,j1,eello4(i,jp,i+1,jp1,jj,kk)
6827 c write (iout,*) "gradcorr5 before eello5"
6829 c write (iout,'(i5,3f10.5)')
6830 c & iii,(gradcorr5(jjj,iii),jjj=1,3)
6832 if (wcorr5.gt.0.0d0)
6833 & ecorr5=ecorr5+eello5(i,jp,i+1,jp1,jj,kk)
6834 c write (iout,*) "gradcorr5 after eello5"
6836 c write (iout,'(i5,3f10.5)')
6837 c & iii,(gradcorr5(jjj,iii),jjj=1,3)
6839 if (energy_dec.and.wcorr5.gt.0.0d0)
6840 1 write (iout,'(a6,4i5,0pf7.3)')
6841 2 'ecorr5',i,j,i+1,j1,eello5(i,jp,i+1,jp1,jj,kk)
6842 cd write(2,*)'wcorr6',wcorr6,' wturn6',wturn6
6843 cd write(2,*)'ijkl',i,jp,i+1,jp1
6844 if (wcorr6.gt.0.0d0 .and. (jp.ne.i+4 .or. jp1.ne.i+3
6845 & .or. wturn6.eq.0.0d0))then
6846 cd write (iout,*) '******ecorr6: i,j,i+1,j1',i,j,i+1,j1
6847 ecorr6=ecorr6+eello6(i,jp,i+1,jp1,jj,kk)
6848 if (energy_dec) write (iout,'(a6,4i5,0pf7.3)')
6849 1 'ecorr6',i,j,i+1,j1,eello6(i,jp,i+1,jp1,jj,kk)
6850 cd write (iout,*) 'ecorr',ecorr,' ecorr5=',ecorr5,
6851 cd & 'ecorr6=',ecorr6
6852 cd write (iout,'(4e15.5)') sred_geom,
6853 cd & dabs(eello4(i,jp,i+1,jp1,jj,kk)),
6854 cd & dabs(eello5(i,jp,i+1,jp1,jj,kk)),
6855 cd & dabs(eello6(i,jp,i+1,jp1,jj,kk))
6856 else if (wturn6.gt.0.0d0
6857 & .and. (jp.eq.i+4 .and. jp1.eq.i+3)) then
6858 cd write (iout,*) '******eturn6: i,j,i+1,j1',i,jip,i+1,jp1
6859 eturn6=eturn6+eello_turn6(i,jj,kk)
6860 if (energy_dec) write (iout,'(a6,4i5,0pf7.3)')
6861 1 'eturn6',i,j,i+1,j1,eello_turn6(i,jj,kk)
6862 cd write (2,*) 'multibody_eello:eturn6',eturn6
6871 num_cont_hb(i)=num_cont_hb_old(i)
6873 c write (iout,*) "gradcorr5 in eello5"
6875 c write (iout,'(i5,3f10.5)')
6876 c & iii,(gradcorr5(jjj,iii),jjj=1,3)
6880 c------------------------------------------------------------------------------
6881 subroutine add_hb_contact_eello(ii,jj,itask)
6882 implicit real*8 (a-h,o-z)
6883 include "DIMENSIONS"
6884 include "COMMON.IOUNITS"
6887 parameter (max_cont=maxconts)
6888 parameter (max_dim=70)
6889 include "COMMON.CONTACTS"
6890 double precision zapas(max_dim,maxconts,max_fg_procs),
6891 & zapas_recv(max_dim,maxconts,max_fg_procs)
6892 common /przechowalnia/ zapas
6893 integer i,j,ii,jj,iproc,itask(4),nn
6894 c write (iout,*) "itask",itask
6897 if (iproc.gt.0) then
6898 do j=1,num_cont_hb(ii)
6900 c write (iout,*) "send turns i",ii," j",jj," jjc",jjc
6902 ncont_sent(iproc)=ncont_sent(iproc)+1
6903 nn=ncont_sent(iproc)
6904 zapas(1,nn,iproc)=ii
6905 zapas(2,nn,iproc)=jjc
6906 zapas(3,nn,iproc)=d_cont(j,ii)
6910 zapas(ind,nn,iproc)=grij_hb_cont(kk,j,ii)
6915 zapas(ind,nn,iproc)=a_chuj(ll,kk,j,ii)
6923 zapas(ind,nn,iproc)=a_chuj_der(mm,ll,kk,jj,j,ii)
6935 c------------------------------------------------------------------------------
6936 double precision function ehbcorr(i,j,k,l,jj,kk,coeffp,coeffm)
6937 implicit real*8 (a-h,o-z)
6938 include 'DIMENSIONS'
6939 include 'COMMON.IOUNITS'
6940 include 'COMMON.DERIV'
6941 include 'COMMON.INTERACT'
6942 include 'COMMON.CONTACTS'
6943 double precision gx(3),gx1(3)
6953 ees=-(coeffp*ees0pij*ees0pkl+coeffm*ees0mij*ees0mkl)
6954 cd ees=-(coeffp*ees0pkl+coeffm*ees0mkl)
6955 C Following 4 lines for diagnostics.
6960 c write (iout,'(2(a,2i3,a,f10.5,a,2f10.5),a,f10.5,a,$)')
6961 c & 'Contacts ',i,j,
6962 c & ' eij',eij,' eesij',ees0pij,ees0mij,' and ',k,l
6963 c & ,' fcont ',ekl,' eeskl',ees0pkl,ees0mkl,' energy=',ekont*ees,
6965 C Calculate the multi-body contribution to energy.
6966 c ecorr=ecorr+ekont*ees
6967 C Calculate multi-body contributions to the gradient.
6968 coeffpees0pij=coeffp*ees0pij
6969 coeffmees0mij=coeffm*ees0mij
6970 coeffpees0pkl=coeffp*ees0pkl
6971 coeffmees0mkl=coeffm*ees0mkl
6973 cgrad ghalfi=ees*ekl*gacont_hbr(ll,jj,i)
6974 gradcorr(ll,i)=gradcorr(ll,i)!+0.5d0*ghalfi
6975 & -ekont*(coeffpees0pkl*gacontp_hb1(ll,jj,i)+
6976 & coeffmees0mkl*gacontm_hb1(ll,jj,i))
6977 gradcorr(ll,j)=gradcorr(ll,j)!+0.5d0*ghalfi
6978 & -ekont*(coeffpees0pkl*gacontp_hb2(ll,jj,i)+
6979 & coeffmees0mkl*gacontm_hb2(ll,jj,i))
6980 cgrad ghalfk=ees*eij*gacont_hbr(ll,kk,k)
6981 gradcorr(ll,k)=gradcorr(ll,k)!+0.5d0*ghalfk
6982 & -ekont*(coeffpees0pij*gacontp_hb1(ll,kk,k)+
6983 & coeffmees0mij*gacontm_hb1(ll,kk,k))
6984 gradcorr(ll,l)=gradcorr(ll,l)!+0.5d0*ghalfk
6985 & -ekont*(coeffpees0pij*gacontp_hb2(ll,kk,k)+
6986 & coeffmees0mij*gacontm_hb2(ll,kk,k))
6987 gradlongij=ees*ekl*gacont_hbr(ll,jj,i)-
6988 & ekont*(coeffpees0pkl*gacontp_hb3(ll,jj,i)+
6989 & coeffmees0mkl*gacontm_hb3(ll,jj,i))
6990 gradcorr_long(ll,j)=gradcorr_long(ll,j)+gradlongij
6991 gradcorr_long(ll,i)=gradcorr_long(ll,i)-gradlongij
6992 gradlongkl=ees*eij*gacont_hbr(ll,kk,k)-
6993 & ekont*(coeffpees0pij*gacontp_hb3(ll,kk,k)+
6994 & coeffmees0mij*gacontm_hb3(ll,kk,k))
6995 gradcorr_long(ll,l)=gradcorr_long(ll,l)+gradlongkl
6996 gradcorr_long(ll,k)=gradcorr_long(ll,k)-gradlongkl
6997 c write (iout,'(2f10.5,2x,$)') gradlongij,gradlongkl
7002 cgrad gradcorr(ll,m)=gradcorr(ll,m)+
7003 cgrad & ees*ekl*gacont_hbr(ll,jj,i)-
7004 cgrad & ekont*(coeffp*ees0pkl*gacontp_hb3(ll,jj,i)+
7005 cgrad & coeffm*ees0mkl*gacontm_hb3(ll,jj,i))
7010 cgrad gradcorr(ll,m)=gradcorr(ll,m)+
7011 cgrad & ees*eij*gacont_hbr(ll,kk,k)-
7012 cgrad & ekont*(coeffp*ees0pij*gacontp_hb3(ll,kk,k)+
7013 cgrad & coeffm*ees0mij*gacontm_hb3(ll,kk,k))
7016 c write (iout,*) "ehbcorr",ekont*ees
7021 C---------------------------------------------------------------------------
7022 subroutine dipole(i,j,jj)
7023 implicit real*8 (a-h,o-z)
7024 include 'DIMENSIONS'
7025 include 'COMMON.IOUNITS'
7026 include 'COMMON.CHAIN'
7027 include 'COMMON.FFIELD'
7028 include 'COMMON.DERIV'
7029 include 'COMMON.INTERACT'
7030 include 'COMMON.CONTACTS'
7031 include 'COMMON.TORSION'
7032 include 'COMMON.VAR'
7033 include 'COMMON.GEO'
7034 dimension dipi(2,2),dipj(2,2),dipderi(2),dipderj(2),auxvec(2),
7036 iti1 = itortyp(itype(i+1))
7037 if (j.lt.nres-1) then
7038 itj1 = itortyp(itype(j+1))
7043 dipi(iii,1)=Ub2(iii,i)
7044 dipderi(iii)=Ub2der(iii,i)
7045 dipi(iii,2)=b1(iii,i+1)
7046 dipj(iii,1)=Ub2(iii,j)
7047 dipderj(iii)=Ub2der(iii,j)
7048 dipj(iii,2)=b1(iii,j+1)
7052 call matvec2(a_chuj(1,1,jj,i),dipj(1,iii),auxvec(1))
7055 dip(kkk,jj,i)=scalar2(dipi(1,jjj),auxvec(1))
7062 call matvec2(a_chuj_der(1,1,lll,kkk,jj,i),dipj(1,iii),
7066 dipderx(lll,kkk,mmm,jj,i)=scalar2(dipi(1,jjj),auxvec(1))
7071 call transpose2(a_chuj(1,1,jj,i),auxmat(1,1))
7072 call matvec2(auxmat(1,1),dipderi(1),auxvec(1))
7074 dipderg(iii,jj,i)=scalar2(auxvec(1),dipj(1,iii))
7076 call matvec2(a_chuj(1,1,jj,i),dipderj(1),auxvec(1))
7078 dipderg(iii+2,jj,i)=scalar2(auxvec(1),dipi(1,iii))
7083 C---------------------------------------------------------------------------
7084 subroutine calc_eello(i,j,k,l,jj,kk)
7086 C This subroutine computes matrices and vectors needed to calculate
7087 C the fourth-, fifth-, and sixth-order local-electrostatic terms.
7089 implicit real*8 (a-h,o-z)
7090 include 'DIMENSIONS'
7091 include 'COMMON.IOUNITS'
7092 include 'COMMON.CHAIN'
7093 include 'COMMON.DERIV'
7094 include 'COMMON.INTERACT'
7095 include 'COMMON.CONTACTS'
7096 include 'COMMON.TORSION'
7097 include 'COMMON.VAR'
7098 include 'COMMON.GEO'
7099 include 'COMMON.FFIELD'
7100 double precision aa1(2,2),aa2(2,2),aa1t(2,2),aa2t(2,2),
7101 & aa1tder(2,2,3,5),aa2tder(2,2,3,5),auxmat(2,2)
7104 cd write (iout,*) 'calc_eello: i=',i,' j=',j,' k=',k,' l=',l,
7105 cd & ' jj=',jj,' kk=',kk
7106 cd if (i.ne.2 .or. j.ne.4 .or. k.ne.3 .or. l.ne.5) return
7107 cd write (iout,*) "a_chujij",((a_chuj(iii,jjj,jj,i),iii=1,2),jjj=1,2)
7108 cd write (iout,*) "a_chujkl",((a_chuj(iii,jjj,kk,k),iii=1,2),jjj=1,2)
7111 aa1(iii,jjj)=a_chuj(iii,jjj,jj,i)
7112 aa2(iii,jjj)=a_chuj(iii,jjj,kk,k)
7115 call transpose2(aa1(1,1),aa1t(1,1))
7116 call transpose2(aa2(1,1),aa2t(1,1))
7119 call transpose2(a_chuj_der(1,1,lll,kkk,jj,i),
7120 & aa1tder(1,1,lll,kkk))
7121 call transpose2(a_chuj_der(1,1,lll,kkk,kk,k),
7122 & aa2tder(1,1,lll,kkk))
7126 C parallel orientation of the two CA-CA-CA frames.
7128 iti=itortyp(itype(i))
7132 itk1=itortyp(itype(k+1))
7133 itj=itortyp(itype(j))
7134 if (l.lt.nres-1) then
7135 itl1=itortyp(itype(l+1))
7139 C A1 kernel(j+1) A2T
7141 cd write (iout,'(3f10.5,5x,3f10.5)')
7142 cd & (EUg(iii,jjj,k),jjj=1,2),(EUg(iii,jjj,l),jjj=1,2)
7144 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
7145 & aa2tder(1,1,1,1),1,.false.,EUg(1,1,l),EUgder(1,1,l),
7146 & AEA(1,1,1),AEAderg(1,1,1),AEAderx(1,1,1,1,1,1))
7147 C Following matrices are needed only for 6-th order cumulants
7148 IF (wcorr6.gt.0.0d0) THEN
7149 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
7150 & aa2tder(1,1,1,1),1,.false.,EUgC(1,1,l),EUgCder(1,1,l),
7151 & AECA(1,1,1),AECAderg(1,1,1),AECAderx(1,1,1,1,1,1))
7152 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
7153 & aa2tder(1,1,1,1),2,.false.,Ug2DtEUg(1,1,l),
7154 & Ug2DtEUgder(1,1,1,l),ADtEA(1,1,1),ADtEAderg(1,1,1,1),
7155 & ADtEAderx(1,1,1,1,1,1))
7157 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
7158 & aa2tder(1,1,1,1),2,.false.,DtUg2EUg(1,1,l),
7159 & DtUg2EUgder(1,1,1,l),ADtEA1(1,1,1),ADtEA1derg(1,1,1,1),
7160 & ADtEA1derx(1,1,1,1,1,1))
7162 C End 6-th order cumulants
7165 cd write (2,*) 'In calc_eello6'
7167 cd write (2,*) 'iii=',iii
7169 cd write (2,*) 'kkk=',kkk
7171 cd write (2,'(3(2f10.5),5x)')
7172 cd & ((ADtEA1derx(jjj,mmm,lll,kkk,iii,1),mmm=1,2),lll=1,3)
7177 call transpose2(EUgder(1,1,k),auxmat(1,1))
7178 call matmat2(auxmat(1,1),AEA(1,1,1),EAEAderg(1,1,1,1))
7179 call transpose2(EUg(1,1,k),auxmat(1,1))
7180 call matmat2(auxmat(1,1),AEA(1,1,1),EAEA(1,1,1))
7181 call matmat2(auxmat(1,1),AEAderg(1,1,1),EAEAderg(1,1,2,1))
7185 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,1),
7186 & EAEAderx(1,1,lll,kkk,iii,1))
7190 C A1T kernel(i+1) A2
7191 call kernel(aa1t(1,1),aa2(1,1),aa1tder(1,1,1,1),
7192 & a_chuj_der(1,1,1,1,kk,k),1,.false.,EUg(1,1,k),EUgder(1,1,k),
7193 & AEA(1,1,2),AEAderg(1,1,2),AEAderx(1,1,1,1,1,2))
7194 C Following matrices are needed only for 6-th order cumulants
7195 IF (wcorr6.gt.0.0d0) THEN
7196 call kernel(aa1t(1,1),aa2(1,1),aa1tder(1,1,1,1),
7197 & a_chuj_der(1,1,1,1,kk,k),1,.false.,EUgC(1,1,k),EUgCder(1,1,k),
7198 & AECA(1,1,2),AECAderg(1,1,2),AECAderx(1,1,1,1,1,2))
7199 call kernel(aa1t(1,1),aa2(1,1),aa1tder(1,1,1,1),
7200 & a_chuj_der(1,1,1,1,kk,k),2,.false.,Ug2DtEUg(1,1,k),
7201 & Ug2DtEUgder(1,1,1,k),ADtEA(1,1,2),ADtEAderg(1,1,1,2),
7202 & ADtEAderx(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.,DtUg2EUg(1,1,k),
7205 & DtUg2EUgder(1,1,1,k),ADtEA1(1,1,2),ADtEA1derg(1,1,1,2),
7206 & ADtEA1derx(1,1,1,1,1,2))
7208 C End 6-th order cumulants
7209 call transpose2(EUgder(1,1,l),auxmat(1,1))
7210 call matmat2(auxmat(1,1),AEA(1,1,2),EAEAderg(1,1,1,2))
7211 call transpose2(EUg(1,1,l),auxmat(1,1))
7212 call matmat2(auxmat(1,1),AEA(1,1,2),EAEA(1,1,2))
7213 call matmat2(auxmat(1,1),AEAderg(1,1,2),EAEAderg(1,1,2,2))
7217 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,2),
7218 & EAEAderx(1,1,lll,kkk,iii,2))
7223 C Calculate the vectors and their derivatives in virtual-bond dihedral angles.
7224 C They are needed only when the fifth- or the sixth-order cumulants are
7226 IF (wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0) THEN
7227 call transpose2(AEA(1,1,1),auxmat(1,1))
7228 call matvec2(auxmat(1,1),b1(1,i),AEAb1(1,1,1))
7229 call matvec2(auxmat(1,1),Ub2(1,i),AEAb2(1,1,1))
7230 call matvec2(auxmat(1,1),Ub2der(1,i),AEAb2derg(1,2,1,1))
7231 call transpose2(AEAderg(1,1,1),auxmat(1,1))
7232 call matvec2(auxmat(1,1),b1(1,i),AEAb1derg(1,1,1))
7233 call matvec2(auxmat(1,1),Ub2(1,i),AEAb2derg(1,1,1,1))
7234 call matvec2(AEA(1,1,1),b1(1,k+1),AEAb1(1,2,1))
7235 call matvec2(AEAderg(1,1,1),b1(1,k+1),AEAb1derg(1,2,1))
7236 call matvec2(AEA(1,1,1),Ub2(1,k+1),AEAb2(1,2,1))
7237 call matvec2(AEAderg(1,1,1),Ub2(1,k+1),AEAb2derg(1,1,2,1))
7238 call matvec2(AEA(1,1,1),Ub2der(1,k+1),AEAb2derg(1,2,2,1))
7239 call transpose2(AEA(1,1,2),auxmat(1,1))
7240 call matvec2(auxmat(1,1),b1(1,j),AEAb1(1,1,2))
7241 call matvec2(auxmat(1,1),Ub2(1,j),AEAb2(1,1,2))
7242 call matvec2(auxmat(1,1),Ub2der(1,j),AEAb2derg(1,2,1,2))
7243 call transpose2(AEAderg(1,1,2),auxmat(1,1))
7244 call matvec2(auxmat(1,1),b1(1,j),AEAb1derg(1,1,2))
7245 call matvec2(auxmat(1,1),Ub2(1,j),AEAb2derg(1,1,1,2))
7246 call matvec2(AEA(1,1,2),b1(1,l+1),AEAb1(1,2,2))
7247 call matvec2(AEAderg(1,1,2),b1(1,l+1),AEAb1derg(1,2,2))
7248 call matvec2(AEA(1,1,2),Ub2(1,l+1),AEAb2(1,2,2))
7249 call matvec2(AEAderg(1,1,2),Ub2(1,l+1),AEAb2derg(1,1,2,2))
7250 call matvec2(AEA(1,1,2),Ub2der(1,l+1),AEAb2derg(1,2,2,2))
7251 C Calculate the Cartesian derivatives of the vectors.
7255 call transpose2(AEAderx(1,1,lll,kkk,iii,1),auxmat(1,1))
7256 call matvec2(auxmat(1,1),b1(1,i),
7257 & AEAb1derx(1,lll,kkk,iii,1,1))
7258 call matvec2(auxmat(1,1),Ub2(1,i),
7259 & AEAb2derx(1,lll,kkk,iii,1,1))
7260 call matvec2(AEAderx(1,1,lll,kkk,iii,1),b1(1,k+1),
7261 & AEAb1derx(1,lll,kkk,iii,2,1))
7262 call matvec2(AEAderx(1,1,lll,kkk,iii,1),Ub2(1,k+1),
7263 & AEAb2derx(1,lll,kkk,iii,2,1))
7264 call transpose2(AEAderx(1,1,lll,kkk,iii,2),auxmat(1,1))
7265 call matvec2(auxmat(1,1),b1(1,j),
7266 & AEAb1derx(1,lll,kkk,iii,1,2))
7267 call matvec2(auxmat(1,1),Ub2(1,j),
7268 & AEAb2derx(1,lll,kkk,iii,1,2))
7269 call matvec2(AEAderx(1,1,lll,kkk,iii,2),b1(1,l+1),
7270 & AEAb1derx(1,lll,kkk,iii,2,2))
7271 call matvec2(AEAderx(1,1,lll,kkk,iii,2),Ub2(1,l+1),
7272 & AEAb2derx(1,lll,kkk,iii,2,2))
7279 C Antiparallel orientation of the two CA-CA-CA frames.
7281 iti=itortyp(itype(i))
7285 itk1=itortyp(itype(k+1))
7286 itl=itortyp(itype(l))
7287 itj=itortyp(itype(j))
7288 if (j.lt.nres-1) then
7289 itj1=itortyp(itype(j+1))
7293 C A2 kernel(j-1)T A1T
7294 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
7295 & aa2tder(1,1,1,1),1,.true.,EUg(1,1,j),EUgder(1,1,j),
7296 & AEA(1,1,1),AEAderg(1,1,1),AEAderx(1,1,1,1,1,1))
7297 C Following matrices are needed only for 6-th order cumulants
7298 IF (wcorr6.gt.0.0d0 .or. (wturn6.gt.0.0d0 .and.
7299 & j.eq.i+4 .and. l.eq.i+3)) THEN
7300 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
7301 & aa2tder(1,1,1,1),1,.true.,EUgC(1,1,j),EUgCder(1,1,j),
7302 & AECA(1,1,1),AECAderg(1,1,1),AECAderx(1,1,1,1,1,1))
7303 call kernel(aa2(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
7304 & aa2tder(1,1,1,1),2,.true.,Ug2DtEUg(1,1,j),
7305 & Ug2DtEUgder(1,1,1,j),ADtEA(1,1,1),ADtEAderg(1,1,1,1),
7306 & ADtEAderx(1,1,1,1,1,1))
7307 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
7308 & aa2tder(1,1,1,1),2,.true.,DtUg2EUg(1,1,j),
7309 & DtUg2EUgder(1,1,1,j),ADtEA1(1,1,1),ADtEA1derg(1,1,1,1),
7310 & ADtEA1derx(1,1,1,1,1,1))
7312 C End 6-th order cumulants
7313 call transpose2(EUgder(1,1,k),auxmat(1,1))
7314 call matmat2(auxmat(1,1),AEA(1,1,1),EAEAderg(1,1,1,1))
7315 call transpose2(EUg(1,1,k),auxmat(1,1))
7316 call matmat2(auxmat(1,1),AEA(1,1,1),EAEA(1,1,1))
7317 call matmat2(auxmat(1,1),AEAderg(1,1,1),EAEAderg(1,1,2,1))
7321 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,1),
7322 & EAEAderx(1,1,lll,kkk,iii,1))
7326 C A2T kernel(i+1)T A1
7327 call kernel(aa2t(1,1),aa1(1,1),aa2tder(1,1,1,1),
7328 & a_chuj_der(1,1,1,1,jj,i),1,.true.,EUg(1,1,k),EUgder(1,1,k),
7329 & AEA(1,1,2),AEAderg(1,1,2),AEAderx(1,1,1,1,1,2))
7330 C Following matrices are needed only for 6-th order cumulants
7331 IF (wcorr6.gt.0.0d0 .or. (wturn6.gt.0.0d0 .and.
7332 & j.eq.i+4 .and. l.eq.i+3)) THEN
7333 call kernel(aa2t(1,1),aa1(1,1),aa2tder(1,1,1,1),
7334 & a_chuj_der(1,1,1,1,jj,i),1,.true.,EUgC(1,1,k),EUgCder(1,1,k),
7335 & AECA(1,1,2),AECAderg(1,1,2),AECAderx(1,1,1,1,1,2))
7336 call kernel(aa2t(1,1),aa1(1,1),aa2tder(1,1,1,1),
7337 & a_chuj_der(1,1,1,1,jj,i),2,.true.,Ug2DtEUg(1,1,k),
7338 & Ug2DtEUgder(1,1,1,k),ADtEA(1,1,2),ADtEAderg(1,1,1,2),
7339 & ADtEAderx(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.,DtUg2EUg(1,1,k),
7342 & DtUg2EUgder(1,1,1,k),ADtEA1(1,1,2),ADtEA1derg(1,1,1,2),
7343 & ADtEA1derx(1,1,1,1,1,2))
7345 C End 6-th order cumulants
7346 call transpose2(EUgder(1,1,j),auxmat(1,1))
7347 call matmat2(auxmat(1,1),AEA(1,1,1),EAEAderg(1,1,2,2))
7348 call transpose2(EUg(1,1,j),auxmat(1,1))
7349 call matmat2(auxmat(1,1),AEA(1,1,2),EAEA(1,1,2))
7350 call matmat2(auxmat(1,1),AEAderg(1,1,2),EAEAderg(1,1,2,2))
7354 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,2),
7355 & EAEAderx(1,1,lll,kkk,iii,2))
7360 C Calculate the vectors and their derivatives in virtual-bond dihedral angles.
7361 C They are needed only when the fifth- or the sixth-order cumulants are
7363 IF (wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0 .or.
7364 & (wturn6.gt.0.0d0 .and. j.eq.i+4 .and. l.eq.i+3)) THEN
7365 call transpose2(AEA(1,1,1),auxmat(1,1))
7366 call matvec2(auxmat(1,1),b1(1,i),AEAb1(1,1,1))
7367 call matvec2(auxmat(1,1),Ub2(1,i),AEAb2(1,1,1))
7368 call matvec2(auxmat(1,1),Ub2der(1,i),AEAb2derg(1,2,1,1))
7369 call transpose2(AEAderg(1,1,1),auxmat(1,1))
7370 call matvec2(auxmat(1,1),b1(1,i),AEAb1derg(1,1,1))
7371 call matvec2(auxmat(1,1),Ub2(1,i),AEAb2derg(1,1,1,1))
7372 call matvec2(AEA(1,1,1),b1(1,k+1),AEAb1(1,2,1))
7373 call matvec2(AEAderg(1,1,1),b1(1,k+1),AEAb1derg(1,2,1))
7374 call matvec2(AEA(1,1,1),Ub2(1,k+1),AEAb2(1,2,1))
7375 call matvec2(AEAderg(1,1,1),Ub2(1,k+1),AEAb2derg(1,1,2,1))
7376 call matvec2(AEA(1,1,1),Ub2der(1,k+1),AEAb2derg(1,2,2,1))
7377 call transpose2(AEA(1,1,2),auxmat(1,1))
7378 call matvec2(auxmat(1,1),b1(1,j+1),AEAb1(1,1,2))
7379 call matvec2(auxmat(1,1),Ub2(1,l),AEAb2(1,1,2))
7380 call matvec2(auxmat(1,1),Ub2der(1,l),AEAb2derg(1,2,1,2))
7381 call transpose2(AEAderg(1,1,2),auxmat(1,1))
7382 call matvec2(auxmat(1,1),b1(1,l),AEAb1(1,1,2))
7383 call matvec2(auxmat(1,1),Ub2(1,l),AEAb2derg(1,1,1,2))
7384 call matvec2(AEA(1,1,2),b1(1,j+1),AEAb1(1,2,2))
7385 call matvec2(AEAderg(1,1,2),b1(1,j+1),AEAb1derg(1,2,2))
7386 call matvec2(AEA(1,1,2),Ub2(1,j),AEAb2(1,2,2))
7387 call matvec2(AEAderg(1,1,2),Ub2(1,j),AEAb2derg(1,1,2,2))
7388 call matvec2(AEA(1,1,2),Ub2der(1,j),AEAb2derg(1,2,2,2))
7389 C Calculate the Cartesian derivatives of the vectors.
7393 call transpose2(AEAderx(1,1,lll,kkk,iii,1),auxmat(1,1))
7394 call matvec2(auxmat(1,1),b1(1,i),
7395 & AEAb1derx(1,lll,kkk,iii,1,1))
7396 call matvec2(auxmat(1,1),Ub2(1,i),
7397 & AEAb2derx(1,lll,kkk,iii,1,1))
7398 call matvec2(AEAderx(1,1,lll,kkk,iii,1),b1(1,k+1),
7399 & AEAb1derx(1,lll,kkk,iii,2,1))
7400 call matvec2(AEAderx(1,1,lll,kkk,iii,1),Ub2(1,k+1),
7401 & AEAb2derx(1,lll,kkk,iii,2,1))
7402 call transpose2(AEAderx(1,1,lll,kkk,iii,2),auxmat(1,1))
7403 call matvec2(auxmat(1,1),b1(1,l),
7404 & AEAb1derx(1,lll,kkk,iii,1,2))
7405 call matvec2(auxmat(1,1),Ub2(1,l),
7406 & AEAb2derx(1,lll,kkk,iii,1,2))
7407 call matvec2(AEAderx(1,1,lll,kkk,iii,2),b1(1,j+1),
7408 & AEAb1derx(1,lll,kkk,iii,2,2))
7409 call matvec2(AEAderx(1,1,lll,kkk,iii,2),Ub2(1,j),
7410 & AEAb2derx(1,lll,kkk,iii,2,2))
7419 C---------------------------------------------------------------------------
7420 subroutine kernel(aa1,aa2t,aa1derx,aa2tderx,nderg,transp,
7421 & KK,KKderg,AKA,AKAderg,AKAderx)
7425 double precision aa1(2,2),aa2t(2,2),aa1derx(2,2,3,5),
7426 & aa2tderx(2,2,3,5),KK(2,2),KKderg(2,2,nderg),AKA(2,2),
7427 & AKAderg(2,2,nderg),AKAderx(2,2,3,5,2)
7432 call prodmat3(aa1(1,1),aa2t(1,1),KK(1,1),transp,AKA(1,1))
7434 call prodmat3(aa1(1,1),aa2t(1,1),KKderg(1,1,iii),transp,
7437 cd if (lprn) write (2,*) 'In kernel'
7439 cd if (lprn) write (2,*) 'kkk=',kkk
7441 call prodmat3(aa1derx(1,1,lll,kkk),aa2t(1,1),
7442 & KK(1,1),transp,AKAderx(1,1,lll,kkk,1))
7444 cd write (2,*) 'lll=',lll
7445 cd write (2,*) 'iii=1'
7447 cd write (2,'(3(2f10.5),5x)')
7448 cd & (AKAderx(jjj,mmm,lll,kkk,1),mmm=1,2)
7451 call prodmat3(aa1(1,1),aa2tderx(1,1,lll,kkk),
7452 & KK(1,1),transp,AKAderx(1,1,lll,kkk,2))
7454 cd write (2,*) 'lll=',lll
7455 cd write (2,*) 'iii=2'
7457 cd write (2,'(3(2f10.5),5x)')
7458 cd & (AKAderx(jjj,mmm,lll,kkk,2),mmm=1,2)
7465 C---------------------------------------------------------------------------
7466 double precision function eello4(i,j,k,l,jj,kk)
7467 implicit real*8 (a-h,o-z)
7468 include 'DIMENSIONS'
7469 include 'COMMON.IOUNITS'
7470 include 'COMMON.CHAIN'
7471 include 'COMMON.DERIV'
7472 include 'COMMON.INTERACT'
7473 include 'COMMON.CONTACTS'
7474 include 'COMMON.TORSION'
7475 include 'COMMON.VAR'
7476 include 'COMMON.GEO'
7477 double precision pizda(2,2),ggg1(3),ggg2(3)
7478 cd if (i.ne.1 .or. j.ne.5 .or. k.ne.2 .or.l.ne.4) then
7482 cd print *,'eello4:',i,j,k,l,jj,kk
7483 cd write (2,*) 'i',i,' j',j,' k',k,' l',l
7484 cd call checkint4(i,j,k,l,jj,kk,eel4_num)
7485 cold eij=facont_hb(jj,i)
7486 cold ekl=facont_hb(kk,k)
7488 eel4=-EAEA(1,1,1)-EAEA(2,2,1)
7489 cd eel41=-EAEA(1,1,2)-EAEA(2,2,2)
7490 gcorr_loc(k-1)=gcorr_loc(k-1)
7491 & -ekont*(EAEAderg(1,1,1,1)+EAEAderg(2,2,1,1))
7493 gcorr_loc(l-1)=gcorr_loc(l-1)
7494 & -ekont*(EAEAderg(1,1,2,1)+EAEAderg(2,2,2,1))
7496 gcorr_loc(j-1)=gcorr_loc(j-1)
7497 & -ekont*(EAEAderg(1,1,2,1)+EAEAderg(2,2,2,1))
7502 derx(lll,kkk,iii)=-EAEAderx(1,1,lll,kkk,iii,1)
7503 & -EAEAderx(2,2,lll,kkk,iii,1)
7504 cd derx(lll,kkk,iii)=0.0d0
7508 cd gcorr_loc(l-1)=0.0d0
7509 cd gcorr_loc(j-1)=0.0d0
7510 cd gcorr_loc(k-1)=0.0d0
7512 cd write (iout,*)'Contacts have occurred for peptide groups',
7513 cd & i,j,' fcont:',eij,' eij',' and ',k,l,
7514 cd & ' fcont ',ekl,' eel4=',eel4,' eel4_num',16*eel4_num
7515 if (j.lt.nres-1) then
7522 if (l.lt.nres-1) then
7530 cgrad ggg1(ll)=eel4*g_contij(ll,1)
7531 cgrad ggg2(ll)=eel4*g_contij(ll,2)
7532 glongij=eel4*g_contij(ll,1)+ekont*derx(ll,1,1)
7533 glongkl=eel4*g_contij(ll,2)+ekont*derx(ll,1,2)
7534 cgrad ghalf=0.5d0*ggg1(ll)
7535 gradcorr(ll,i)=gradcorr(ll,i)+ekont*derx(ll,2,1)
7536 gradcorr(ll,i+1)=gradcorr(ll,i+1)+ekont*derx(ll,3,1)
7537 gradcorr(ll,j)=gradcorr(ll,j)+ekont*derx(ll,4,1)
7538 gradcorr(ll,j1)=gradcorr(ll,j1)+ekont*derx(ll,5,1)
7539 gradcorr_long(ll,j)=gradcorr_long(ll,j)+glongij
7540 gradcorr_long(ll,i)=gradcorr_long(ll,i)-glongij
7541 cgrad ghalf=0.5d0*ggg2(ll)
7542 gradcorr(ll,k)=gradcorr(ll,k)+ekont*derx(ll,2,2)
7543 gradcorr(ll,k+1)=gradcorr(ll,k+1)+ekont*derx(ll,3,2)
7544 gradcorr(ll,l)=gradcorr(ll,l)+ekont*derx(ll,4,2)
7545 gradcorr(ll,l1)=gradcorr(ll,l1)+ekont*derx(ll,5,2)
7546 gradcorr_long(ll,l)=gradcorr_long(ll,l)+glongkl
7547 gradcorr_long(ll,k)=gradcorr_long(ll,k)-glongkl
7551 cgrad gradcorr(ll,m)=gradcorr(ll,m)+ggg1(ll)
7556 cgrad gradcorr(ll,m)=gradcorr(ll,m)+ggg2(ll)
7561 cgrad gradcorr(ll,m)=gradcorr(ll,m)+ekont*derx(ll,1,1)
7566 cgrad gradcorr(ll,m)=gradcorr(ll,m)+ekont*derx(ll,1,2)
7570 cd write (2,*) iii,gcorr_loc(iii)
7573 cd write (2,*) 'ekont',ekont
7574 cd write (iout,*) 'eello4',ekont*eel4
7577 C---------------------------------------------------------------------------
7578 double precision function eello5(i,j,k,l,jj,kk)
7579 implicit real*8 (a-h,o-z)
7580 include 'DIMENSIONS'
7581 include 'COMMON.IOUNITS'
7582 include 'COMMON.CHAIN'
7583 include 'COMMON.DERIV'
7584 include 'COMMON.INTERACT'
7585 include 'COMMON.CONTACTS'
7586 include 'COMMON.TORSION'
7587 include 'COMMON.VAR'
7588 include 'COMMON.GEO'
7589 double precision pizda(2,2),auxmat(2,2),auxmat1(2,2),vv(2)
7590 double precision ggg1(3),ggg2(3)
7591 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
7596 C /l\ / \ \ / \ / \ / C
7597 C / \ / \ \ / \ / \ / C
7598 C j| o |l1 | o | o| o | | o |o C
7599 C \ |/k\| |/ \| / |/ \| |/ \| C
7600 C \i/ \ / \ / / \ / \ C
7602 C (I) (II) (III) (IV) C
7604 C eello5_1 eello5_2 eello5_3 eello5_4 C
7606 C Antiparallel chains C
7609 C /j\ / \ \ / \ / \ / C
7610 C / \ / \ \ / \ / \ / C
7611 C j1| o |l | o | o| o | | o |o C
7612 C \ |/k\| |/ \| / |/ \| |/ \| C
7613 C \i/ \ / \ / / \ / \ C
7615 C (I) (II) (III) (IV) C
7617 C eello5_1 eello5_2 eello5_3 eello5_4 C
7619 C o denotes a local interaction, vertical lines an electrostatic interaction. C
7621 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
7622 cd if (i.ne.2 .or. j.ne.6 .or. k.ne.3 .or. l.ne.5) then
7627 cd & 'EELLO5: Contacts have occurred for peptide groups',i,j,
7629 itk=itortyp(itype(k))
7630 itl=itortyp(itype(l))
7631 itj=itortyp(itype(j))
7636 cd call checkint5(i,j,k,l,jj,kk,eel5_1_num,eel5_2_num,
7637 cd & eel5_3_num,eel5_4_num)
7641 derx(lll,kkk,iii)=0.0d0
7645 cd eij=facont_hb(jj,i)
7646 cd ekl=facont_hb(kk,k)
7648 cd write (iout,*)'Contacts have occurred for peptide groups',
7649 cd & i,j,' fcont:',eij,' eij',' and ',k,l
7651 C Contribution from the graph I.
7652 cd write (2,*) 'AEA ',AEA(1,1,1),AEA(2,1,1),AEA(1,2,1),AEA(2,2,1)
7653 cd write (2,*) 'AEAb2',AEAb2(1,1,1),AEAb2(2,1,1)
7654 call transpose2(EUg(1,1,k),auxmat(1,1))
7655 call matmat2(AEA(1,1,1),auxmat(1,1),pizda(1,1))
7656 vv(1)=pizda(1,1)-pizda(2,2)
7657 vv(2)=pizda(1,2)+pizda(2,1)
7658 eello5_1=scalar2(AEAb2(1,1,1),Ub2(1,k))
7659 & +0.5d0*scalar2(vv(1),Dtobr2(1,i))
7660 C Explicit gradient in virtual-dihedral angles.
7661 if (i.gt.1) g_corr5_loc(i-1)=g_corr5_loc(i-1)
7662 & +ekont*(scalar2(AEAb2derg(1,2,1,1),Ub2(1,k))
7663 & +0.5d0*scalar2(vv(1),Dtobr2der(1,i)))
7664 call transpose2(EUgder(1,1,k),auxmat1(1,1))
7665 call matmat2(AEA(1,1,1),auxmat1(1,1),pizda(1,1))
7666 vv(1)=pizda(1,1)-pizda(2,2)
7667 vv(2)=pizda(1,2)+pizda(2,1)
7668 g_corr5_loc(k-1)=g_corr5_loc(k-1)
7669 & +ekont*(scalar2(AEAb2(1,1,1),Ub2der(1,k))
7670 & +0.5d0*scalar2(vv(1),Dtobr2(1,i)))
7671 call matmat2(AEAderg(1,1,1),auxmat(1,1),pizda(1,1))
7672 vv(1)=pizda(1,1)-pizda(2,2)
7673 vv(2)=pizda(1,2)+pizda(2,1)
7675 if (l.lt.nres-1) g_corr5_loc(l-1)=g_corr5_loc(l-1)
7676 & +ekont*(scalar2(AEAb2derg(1,1,1,1),Ub2(1,k))
7677 & +0.5d0*scalar2(vv(1),Dtobr2(1,i)))
7679 if (j.lt.nres-1) g_corr5_loc(j-1)=g_corr5_loc(j-1)
7680 & +ekont*(scalar2(AEAb2derg(1,1,1,1),Ub2(1,k))
7681 & +0.5d0*scalar2(vv(1),Dtobr2(1,i)))
7683 C Cartesian gradient
7687 call matmat2(AEAderx(1,1,lll,kkk,iii,1),auxmat(1,1),
7689 vv(1)=pizda(1,1)-pizda(2,2)
7690 vv(2)=pizda(1,2)+pizda(2,1)
7691 derx(lll,kkk,iii)=derx(lll,kkk,iii)
7692 & +scalar2(AEAb2derx(1,lll,kkk,iii,1,1),Ub2(1,k))
7693 & +0.5d0*scalar2(vv(1),Dtobr2(1,i))
7699 C Contribution from graph II
7700 call transpose2(EE(1,1,itk),auxmat(1,1))
7701 call matmat2(auxmat(1,1),AEA(1,1,1),pizda(1,1))
7702 vv(1)=pizda(1,1)+pizda(2,2)
7703 vv(2)=pizda(2,1)-pizda(1,2)
7704 eello5_2=scalar2(AEAb1(1,2,1),b1(1,k))
7705 & -0.5d0*scalar2(vv(1),Ctobr(1,k))
7706 C Explicit gradient in virtual-dihedral angles.
7707 g_corr5_loc(k-1)=g_corr5_loc(k-1)
7708 & -0.5d0*ekont*scalar2(vv(1),Ctobrder(1,k))
7709 call matmat2(auxmat(1,1),AEAderg(1,1,1),pizda(1,1))
7710 vv(1)=pizda(1,1)+pizda(2,2)
7711 vv(2)=pizda(2,1)-pizda(1,2)
7713 g_corr5_loc(l-1)=g_corr5_loc(l-1)
7714 & +ekont*(scalar2(AEAb1derg(1,2,1),b1(1,k))
7715 & -0.5d0*scalar2(vv(1),Ctobr(1,k)))
7717 g_corr5_loc(j-1)=g_corr5_loc(j-1)
7718 & +ekont*(scalar2(AEAb1derg(1,2,1),b1(1,k))
7719 & -0.5d0*scalar2(vv(1),Ctobr(1,k)))
7721 C Cartesian gradient
7725 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,1),
7727 vv(1)=pizda(1,1)+pizda(2,2)
7728 vv(2)=pizda(2,1)-pizda(1,2)
7729 derx(lll,kkk,iii)=derx(lll,kkk,iii)
7730 & +scalar2(AEAb1derx(1,lll,kkk,iii,2,1),b1(1,k))
7731 & -0.5d0*scalar2(vv(1),Ctobr(1,k))
7739 C Parallel orientation
7740 C Contribution from graph III
7741 call transpose2(EUg(1,1,l),auxmat(1,1))
7742 call matmat2(AEA(1,1,2),auxmat(1,1),pizda(1,1))
7743 vv(1)=pizda(1,1)-pizda(2,2)
7744 vv(2)=pizda(1,2)+pizda(2,1)
7745 eello5_3=scalar2(AEAb2(1,1,2),Ub2(1,l))
7746 & +0.5d0*scalar2(vv(1),Dtobr2(1,j))
7747 C Explicit gradient in virtual-dihedral angles.
7748 g_corr5_loc(j-1)=g_corr5_loc(j-1)
7749 & +ekont*(scalar2(AEAb2derg(1,2,1,2),Ub2(1,l))
7750 & +0.5d0*scalar2(vv(1),Dtobr2der(1,j)))
7751 call matmat2(AEAderg(1,1,2),auxmat(1,1),pizda(1,1))
7752 vv(1)=pizda(1,1)-pizda(2,2)
7753 vv(2)=pizda(1,2)+pizda(2,1)
7754 g_corr5_loc(k-1)=g_corr5_loc(k-1)
7755 & +ekont*(scalar2(AEAb2derg(1,1,1,2),Ub2(1,l))
7756 & +0.5d0*scalar2(vv(1),Dtobr2(1,j)))
7757 call transpose2(EUgder(1,1,l),auxmat1(1,1))
7758 call matmat2(AEA(1,1,2),auxmat1(1,1),pizda(1,1))
7759 vv(1)=pizda(1,1)-pizda(2,2)
7760 vv(2)=pizda(1,2)+pizda(2,1)
7761 g_corr5_loc(l-1)=g_corr5_loc(l-1)
7762 & +ekont*(scalar2(AEAb2(1,1,2),Ub2der(1,l))
7763 & +0.5d0*scalar2(vv(1),Dtobr2(1,j)))
7764 C Cartesian gradient
7768 call matmat2(AEAderx(1,1,lll,kkk,iii,2),auxmat(1,1),
7770 vv(1)=pizda(1,1)-pizda(2,2)
7771 vv(2)=pizda(1,2)+pizda(2,1)
7772 derx(lll,kkk,iii)=derx(lll,kkk,iii)
7773 & +scalar2(AEAb2derx(1,lll,kkk,iii,1,2),Ub2(1,l))
7774 & +0.5d0*scalar2(vv(1),Dtobr2(1,j))
7779 C Contribution from graph IV
7781 call transpose2(EE(1,1,itl),auxmat(1,1))
7782 call matmat2(auxmat(1,1),AEA(1,1,2),pizda(1,1))
7783 vv(1)=pizda(1,1)+pizda(2,2)
7784 vv(2)=pizda(2,1)-pizda(1,2)
7785 eello5_4=scalar2(AEAb1(1,2,2),b1(1,l))
7786 & -0.5d0*scalar2(vv(1),Ctobr(1,l))
7787 C Explicit gradient in virtual-dihedral angles.
7788 g_corr5_loc(l-1)=g_corr5_loc(l-1)
7789 & -0.5d0*ekont*scalar2(vv(1),Ctobrder(1,l))
7790 call matmat2(auxmat(1,1),AEAderg(1,1,2),pizda(1,1))
7791 vv(1)=pizda(1,1)+pizda(2,2)
7792 vv(2)=pizda(2,1)-pizda(1,2)
7793 g_corr5_loc(k-1)=g_corr5_loc(k-1)
7794 & +ekont*(scalar2(AEAb1derg(1,2,2),b1(1,l))
7795 & -0.5d0*scalar2(vv(1),Ctobr(1,l)))
7796 C Cartesian gradient
7800 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,2),
7802 vv(1)=pizda(1,1)+pizda(2,2)
7803 vv(2)=pizda(2,1)-pizda(1,2)
7804 derx(lll,kkk,iii)=derx(lll,kkk,iii)
7805 & +scalar2(AEAb1derx(1,lll,kkk,iii,2,2),b1(1,l))
7806 & -0.5d0*scalar2(vv(1),Ctobr(1,l))
7811 C Antiparallel orientation
7812 C Contribution from graph III
7814 call transpose2(EUg(1,1,j),auxmat(1,1))
7815 call matmat2(AEA(1,1,2),auxmat(1,1),pizda(1,1))
7816 vv(1)=pizda(1,1)-pizda(2,2)
7817 vv(2)=pizda(1,2)+pizda(2,1)
7818 eello5_3=scalar2(AEAb2(1,1,2),Ub2(1,j))
7819 & +0.5d0*scalar2(vv(1),Dtobr2(1,l))
7820 C Explicit gradient in virtual-dihedral angles.
7821 g_corr5_loc(l-1)=g_corr5_loc(l-1)
7822 & +ekont*(scalar2(AEAb2derg(1,2,1,2),Ub2(1,j))
7823 & +0.5d0*scalar2(vv(1),Dtobr2der(1,l)))
7824 call matmat2(AEAderg(1,1,2),auxmat(1,1),pizda(1,1))
7825 vv(1)=pizda(1,1)-pizda(2,2)
7826 vv(2)=pizda(1,2)+pizda(2,1)
7827 g_corr5_loc(k-1)=g_corr5_loc(k-1)
7828 & +ekont*(scalar2(AEAb2derg(1,1,1,2),Ub2(1,j))
7829 & +0.5d0*scalar2(vv(1),Dtobr2(1,l)))
7830 call transpose2(EUgder(1,1,j),auxmat1(1,1))
7831 call matmat2(AEA(1,1,2),auxmat1(1,1),pizda(1,1))
7832 vv(1)=pizda(1,1)-pizda(2,2)
7833 vv(2)=pizda(1,2)+pizda(2,1)
7834 g_corr5_loc(j-1)=g_corr5_loc(j-1)
7835 & +ekont*(scalar2(AEAb2(1,1,2),Ub2der(1,j))
7836 & +0.5d0*scalar2(vv(1),Dtobr2(1,l)))
7837 C Cartesian gradient
7841 call matmat2(AEAderx(1,1,lll,kkk,iii,2),auxmat(1,1),
7843 vv(1)=pizda(1,1)-pizda(2,2)
7844 vv(2)=pizda(1,2)+pizda(2,1)
7845 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)
7846 & +scalar2(AEAb2derx(1,lll,kkk,iii,1,2),Ub2(1,j))
7847 & +0.5d0*scalar2(vv(1),Dtobr2(1,l))
7852 C Contribution from graph IV
7854 call transpose2(EE(1,1,itj),auxmat(1,1))
7855 call matmat2(auxmat(1,1),AEA(1,1,2),pizda(1,1))
7856 vv(1)=pizda(1,1)+pizda(2,2)
7857 vv(2)=pizda(2,1)-pizda(1,2)
7858 eello5_4=scalar2(AEAb1(1,2,2),b1(1,j))
7859 & -0.5d0*scalar2(vv(1),Ctobr(1,j))
7860 C Explicit gradient in virtual-dihedral angles.
7861 g_corr5_loc(j-1)=g_corr5_loc(j-1)
7862 & -0.5d0*ekont*scalar2(vv(1),Ctobrder(1,j))
7863 call matmat2(auxmat(1,1),AEAderg(1,1,2),pizda(1,1))
7864 vv(1)=pizda(1,1)+pizda(2,2)
7865 vv(2)=pizda(2,1)-pizda(1,2)
7866 g_corr5_loc(k-1)=g_corr5_loc(k-1)
7867 & +ekont*(scalar2(AEAb1derg(1,2,2),b1(1,j))
7868 & -0.5d0*scalar2(vv(1),Ctobr(1,j)))
7869 C Cartesian gradient
7873 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,2),
7875 vv(1)=pizda(1,1)+pizda(2,2)
7876 vv(2)=pizda(2,1)-pizda(1,2)
7877 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)
7878 & +scalar2(AEAb1derx(1,lll,kkk,iii,2,2),b1(1,j))
7879 & -0.5d0*scalar2(vv(1),Ctobr(1,j))
7885 eel5=eello5_1+eello5_2+eello5_3+eello5_4
7886 cd if (i.eq.2 .and. j.eq.8 .and. k.eq.3 .and. l.eq.7) then
7887 cd write (2,*) 'ijkl',i,j,k,l
7888 cd write (2,*) 'eello5_1',eello5_1,' eello5_2',eello5_2,
7889 cd & ' eello5_3',eello5_3,' eello5_4',eello5_4
7891 cd write(iout,*) 'eello5_1',eello5_1,' eel5_1_num',16*eel5_1_num
7892 cd write(iout,*) 'eello5_2',eello5_2,' eel5_2_num',16*eel5_2_num
7893 cd write(iout,*) 'eello5_3',eello5_3,' eel5_3_num',16*eel5_3_num
7894 cd write(iout,*) 'eello5_4',eello5_4,' eel5_4_num',16*eel5_4_num
7895 if (j.lt.nres-1) then
7902 if (l.lt.nres-1) then
7912 cd write (2,*) 'eij',eij,' ekl',ekl,' ekont',ekont
7913 C 2/11/08 AL Gradients over DC's connecting interacting sites will be
7914 C summed up outside the subrouine as for the other subroutines
7915 C handling long-range interactions. The old code is commented out
7916 C with "cgrad" to keep track of changes.
7918 cgrad ggg1(ll)=eel5*g_contij(ll,1)
7919 cgrad ggg2(ll)=eel5*g_contij(ll,2)
7920 gradcorr5ij=eel5*g_contij(ll,1)+ekont*derx(ll,1,1)
7921 gradcorr5kl=eel5*g_contij(ll,2)+ekont*derx(ll,1,2)
7922 c write (iout,'(a,3i3,a,5f8.3,2i3,a,5f8.3,a,f8.3)')
7923 c & "ecorr5",ll,i,j," derx",derx(ll,2,1),derx(ll,3,1),derx(ll,4,1),
7924 c & derx(ll,5,1),k,l," derx",derx(ll,2,2),derx(ll,3,2),
7925 c & derx(ll,4,2),derx(ll,5,2)," ekont",ekont
7926 c write (iout,'(a,3i3,a,3f8.3,2i3,a,3f8.3)')
7927 c & "ecorr5",ll,i,j," gradcorr5",g_contij(ll,1),derx(ll,1,1),
7929 c & k,l," gradcorr5",g_contij(ll,2),derx(ll,1,2),gradcorr5kl
7930 cold ghalf=0.5d0*eel5*ekl*gacont_hbr(ll,jj,i)
7931 cgrad ghalf=0.5d0*ggg1(ll)
7933 gradcorr5(ll,i)=gradcorr5(ll,i)+ekont*derx(ll,2,1)
7934 gradcorr5(ll,i+1)=gradcorr5(ll,i+1)+ekont*derx(ll,3,1)
7935 gradcorr5(ll,j)=gradcorr5(ll,j)+ekont*derx(ll,4,1)
7936 gradcorr5(ll,j1)=gradcorr5(ll,j1)+ekont*derx(ll,5,1)
7937 gradcorr5_long(ll,j)=gradcorr5_long(ll,j)+gradcorr5ij
7938 gradcorr5_long(ll,i)=gradcorr5_long(ll,i)-gradcorr5ij
7939 cold ghalf=0.5d0*eel5*eij*gacont_hbr(ll,kk,k)
7940 cgrad ghalf=0.5d0*ggg2(ll)
7942 gradcorr5(ll,k)=gradcorr5(ll,k)+ghalf+ekont*derx(ll,2,2)
7943 gradcorr5(ll,k+1)=gradcorr5(ll,k+1)+ekont*derx(ll,3,2)
7944 gradcorr5(ll,l)=gradcorr5(ll,l)+ghalf+ekont*derx(ll,4,2)
7945 gradcorr5(ll,l1)=gradcorr5(ll,l1)+ekont*derx(ll,5,2)
7946 gradcorr5_long(ll,l)=gradcorr5_long(ll,l)+gradcorr5kl
7947 gradcorr5_long(ll,k)=gradcorr5_long(ll,k)-gradcorr5kl
7952 cold gradcorr5(ll,m)=gradcorr5(ll,m)+eel5*ekl*gacont_hbr(ll,jj,i)
7953 cgrad gradcorr5(ll,m)=gradcorr5(ll,m)+ggg1(ll)
7958 cold gradcorr5(ll,m)=gradcorr5(ll,m)+eel5*eij*gacont_hbr(ll,kk,k)
7959 cgrad gradcorr5(ll,m)=gradcorr5(ll,m)+ggg2(ll)
7965 cgrad gradcorr5(ll,m)=gradcorr5(ll,m)+ekont*derx(ll,1,1)
7970 cgrad gradcorr5(ll,m)=gradcorr5(ll,m)+ekont*derx(ll,1,2)
7974 cd write (2,*) iii,g_corr5_loc(iii)
7977 cd write (2,*) 'ekont',ekont
7978 cd write (iout,*) 'eello5',ekont*eel5
7981 c--------------------------------------------------------------------------
7982 double precision function eello6(i,j,k,l,jj,kk)
7983 implicit real*8 (a-h,o-z)
7984 include 'DIMENSIONS'
7985 include 'COMMON.IOUNITS'
7986 include 'COMMON.CHAIN'
7987 include 'COMMON.DERIV'
7988 include 'COMMON.INTERACT'
7989 include 'COMMON.CONTACTS'
7990 include 'COMMON.TORSION'
7991 include 'COMMON.VAR'
7992 include 'COMMON.GEO'
7993 include 'COMMON.FFIELD'
7994 double precision ggg1(3),ggg2(3)
7995 cd if (i.ne.1 .or. j.ne.3 .or. k.ne.2 .or. l.ne.4) then
8000 cd & 'EELLO6: Contacts have occurred for peptide groups',i,j,
8008 cd call checkint6(i,j,k,l,jj,kk,eel6_1_num,eel6_2_num,
8009 cd & eel6_3_num,eel6_4_num,eel6_5_num,eel6_6_num)
8013 derx(lll,kkk,iii)=0.0d0
8017 cd eij=facont_hb(jj,i)
8018 cd ekl=facont_hb(kk,k)
8024 eello6_1=eello6_graph1(i,j,k,l,1,.false.)
8025 eello6_2=eello6_graph1(j,i,l,k,2,.false.)
8026 eello6_3=eello6_graph2(i,j,k,l,jj,kk,.false.)
8027 eello6_4=eello6_graph4(i,j,k,l,jj,kk,1,.false.)
8028 eello6_5=eello6_graph4(j,i,l,k,jj,kk,2,.false.)
8029 eello6_6=eello6_graph3(i,j,k,l,jj,kk,.false.)
8031 eello6_1=eello6_graph1(i,j,k,l,1,.false.)
8032 eello6_2=eello6_graph1(l,k,j,i,2,.true.)
8033 eello6_3=eello6_graph2(i,l,k,j,jj,kk,.true.)
8034 eello6_4=eello6_graph4(i,j,k,l,jj,kk,1,.false.)
8035 if (wturn6.eq.0.0d0 .or. j.ne.i+4) then
8036 eello6_5=eello6_graph4(l,k,j,i,kk,jj,2,.true.)
8040 eello6_6=eello6_graph3(i,l,k,j,jj,kk,.true.)
8042 C If turn contributions are considered, they will be handled separately.
8043 eel6=eello6_1+eello6_2+eello6_3+eello6_4+eello6_5+eello6_6
8044 cd write(iout,*) 'eello6_1',eello6_1!,' eel6_1_num',16*eel6_1_num
8045 cd write(iout,*) 'eello6_2',eello6_2!,' eel6_2_num',16*eel6_2_num
8046 cd write(iout,*) 'eello6_3',eello6_3!,' eel6_3_num',16*eel6_3_num
8047 cd write(iout,*) 'eello6_4',eello6_4!,' eel6_4_num',16*eel6_4_num
8048 cd write(iout,*) 'eello6_5',eello6_5!,' eel6_5_num',16*eel6_5_num
8049 cd write(iout,*) 'eello6_6',eello6_6!,' eel6_6_num',16*eel6_6_num
8051 if (j.lt.nres-1) then
8058 if (l.lt.nres-1) then
8066 cgrad ggg1(ll)=eel6*g_contij(ll,1)
8067 cgrad ggg2(ll)=eel6*g_contij(ll,2)
8068 cold ghalf=0.5d0*eel6*ekl*gacont_hbr(ll,jj,i)
8069 cgrad ghalf=0.5d0*ggg1(ll)
8071 gradcorr6ij=eel6*g_contij(ll,1)+ekont*derx(ll,1,1)
8072 gradcorr6kl=eel6*g_contij(ll,2)+ekont*derx(ll,1,2)
8073 gradcorr6(ll,i)=gradcorr6(ll,i)+ekont*derx(ll,2,1)
8074 gradcorr6(ll,i+1)=gradcorr6(ll,i+1)+ekont*derx(ll,3,1)
8075 gradcorr6(ll,j)=gradcorr6(ll,j)+ekont*derx(ll,4,1)
8076 gradcorr6(ll,j1)=gradcorr6(ll,j1)+ekont*derx(ll,5,1)
8077 gradcorr6_long(ll,j)=gradcorr6_long(ll,j)+gradcorr6ij
8078 gradcorr6_long(ll,i)=gradcorr6_long(ll,i)-gradcorr6ij
8079 cgrad ghalf=0.5d0*ggg2(ll)
8080 cold ghalf=0.5d0*eel6*eij*gacont_hbr(ll,kk,k)
8082 gradcorr6(ll,k)=gradcorr6(ll,k)+ekont*derx(ll,2,2)
8083 gradcorr6(ll,k+1)=gradcorr6(ll,k+1)+ekont*derx(ll,3,2)
8084 gradcorr6(ll,l)=gradcorr6(ll,l)+ekont*derx(ll,4,2)
8085 gradcorr6(ll,l1)=gradcorr6(ll,l1)+ekont*derx(ll,5,2)
8086 gradcorr6_long(ll,l)=gradcorr6_long(ll,l)+gradcorr6kl
8087 gradcorr6_long(ll,k)=gradcorr6_long(ll,k)-gradcorr6kl
8092 cold gradcorr6(ll,m)=gradcorr6(ll,m)+eel6*ekl*gacont_hbr(ll,jj,i)
8093 cgrad gradcorr6(ll,m)=gradcorr6(ll,m)+ggg1(ll)
8098 cold gradcorr6(ll,m)=gradcorr6(ll,m)+eel6*eij*gacont_hbr(ll,kk,k)
8099 cgrad gradcorr6(ll,m)=gradcorr6(ll,m)+ggg2(ll)
8105 cgrad gradcorr6(ll,m)=gradcorr6(ll,m)+ekont*derx(ll,1,1)
8110 cgrad gradcorr6(ll,m)=gradcorr6(ll,m)+ekont*derx(ll,1,2)
8114 cd write (2,*) iii,g_corr6_loc(iii)
8117 cd write (2,*) 'ekont',ekont
8118 cd write (iout,*) 'eello6',ekont*eel6
8121 c--------------------------------------------------------------------------
8122 double precision function eello6_graph1(i,j,k,l,imat,swap)
8123 implicit real*8 (a-h,o-z)
8124 include 'DIMENSIONS'
8125 include 'COMMON.IOUNITS'
8126 include 'COMMON.CHAIN'
8127 include 'COMMON.DERIV'
8128 include 'COMMON.INTERACT'
8129 include 'COMMON.CONTACTS'
8130 include 'COMMON.TORSION'
8131 include 'COMMON.VAR'
8132 include 'COMMON.GEO'
8133 double precision vv(2),vv1(2),pizda(2,2),auxmat(2,2),pizda1(2,2)
8137 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
8139 C Parallel Antiparallel C
8145 C \ j|/k\| / \ |/k\|l / C
8150 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
8151 itk=itortyp(itype(k))
8152 s1= scalar2(AEAb1(1,2,imat),CUgb2(1,i))
8153 s2=-scalar2(AEAb2(1,1,imat),Ug2Db1t(1,k))
8154 s3= scalar2(AEAb2(1,1,imat),CUgb2(1,k))
8155 call transpose2(EUgC(1,1,k),auxmat(1,1))
8156 call matmat2(AEA(1,1,imat),auxmat(1,1),pizda1(1,1))
8157 vv1(1)=pizda1(1,1)-pizda1(2,2)
8158 vv1(2)=pizda1(1,2)+pizda1(2,1)
8159 s4=0.5d0*scalar2(vv1(1),Dtobr2(1,i))
8160 vv(1)=AEAb1(1,2,imat)*b1(1,k)-AEAb1(2,2,imat)*b1(2,k)
8161 vv(2)=AEAb1(1,2,imat)*b1(2,k)+AEAb1(2,2,imat)*b1(1,k)
8162 s5=scalar2(vv(1),Dtobr2(1,i))
8163 cd write (2,*) 's1',s1,' s2',s2,' s3',s3,' s4', s4,' s5',s5
8164 eello6_graph1=-0.5d0*(s1+s2+s3+s4+s5)
8165 if (i.gt.1) g_corr6_loc(i-1)=g_corr6_loc(i-1)
8166 & -0.5d0*ekont*(scalar2(AEAb1(1,2,imat),CUgb2der(1,i))
8167 & -scalar2(AEAb2derg(1,2,1,imat),Ug2Db1t(1,k))
8168 & +scalar2(AEAb2derg(1,2,1,imat),CUgb2(1,k))
8169 & +0.5d0*scalar2(vv1(1),Dtobr2der(1,i))
8170 & +scalar2(vv(1),Dtobr2der(1,i)))
8171 call matmat2(AEAderg(1,1,imat),auxmat(1,1),pizda1(1,1))
8172 vv1(1)=pizda1(1,1)-pizda1(2,2)
8173 vv1(2)=pizda1(1,2)+pizda1(2,1)
8174 vv(1)=AEAb1derg(1,2,imat)*b1(1,k)-AEAb1derg(2,2,imat)*b1(2,k)
8175 vv(2)=AEAb1derg(1,2,imat)*b1(2,k)+AEAb1derg(2,2,imat)*b1(1,k)
8177 g_corr6_loc(l-1)=g_corr6_loc(l-1)
8178 & +ekont*(-0.5d0*(scalar2(AEAb1derg(1,2,imat),CUgb2(1,i))
8179 & -scalar2(AEAb2derg(1,1,1,imat),Ug2Db1t(1,k))
8180 & +scalar2(AEAb2derg(1,1,1,imat),CUgb2(1,k))
8181 & +0.5d0*scalar2(vv1(1),Dtobr2(1,i))+scalar2(vv(1),Dtobr2(1,i))))
8183 g_corr6_loc(j-1)=g_corr6_loc(j-1)
8184 & +ekont*(-0.5d0*(scalar2(AEAb1derg(1,2,imat),CUgb2(1,i))
8185 & -scalar2(AEAb2derg(1,1,1,imat),Ug2Db1t(1,k))
8186 & +scalar2(AEAb2derg(1,1,1,imat),CUgb2(1,k))
8187 & +0.5d0*scalar2(vv1(1),Dtobr2(1,i))+scalar2(vv(1),Dtobr2(1,i))))
8189 call transpose2(EUgCder(1,1,k),auxmat(1,1))
8190 call matmat2(AEA(1,1,imat),auxmat(1,1),pizda1(1,1))
8191 vv1(1)=pizda1(1,1)-pizda1(2,2)
8192 vv1(2)=pizda1(1,2)+pizda1(2,1)
8193 if (k.gt.1) g_corr6_loc(k-1)=g_corr6_loc(k-1)
8194 & +ekont*(-0.5d0*(-scalar2(AEAb2(1,1,imat),Ug2Db1tder(1,k))
8195 & +scalar2(AEAb2(1,1,imat),CUgb2der(1,k))
8196 & +0.5d0*scalar2(vv1(1),Dtobr2(1,i))))
8205 s1= scalar2(AEAb1derx(1,lll,kkk,iii,2,imat),CUgb2(1,i))
8206 s2=-scalar2(AEAb2derx(1,lll,kkk,iii,1,imat),Ug2Db1t(1,k))
8207 s3= scalar2(AEAb2derx(1,lll,kkk,iii,1,imat),CUgb2(1,k))
8208 call transpose2(EUgC(1,1,k),auxmat(1,1))
8209 call matmat2(AEAderx(1,1,lll,kkk,iii,imat),auxmat(1,1),
8211 vv1(1)=pizda1(1,1)-pizda1(2,2)
8212 vv1(2)=pizda1(1,2)+pizda1(2,1)
8213 s4=0.5d0*scalar2(vv1(1),Dtobr2(1,i))
8214 vv(1)=AEAb1derx(1,lll,kkk,iii,2,imat)*b1(1,k)
8215 & -AEAb1derx(2,lll,kkk,iii,2,imat)*b1(2,k)
8216 vv(2)=AEAb1derx(1,lll,kkk,iii,2,imat)*b1(2,k)
8217 & +AEAb1derx(2,lll,kkk,iii,2,imat)*b1(1,k)
8218 s5=scalar2(vv(1),Dtobr2(1,i))
8219 derx(lll,kkk,ind)=derx(lll,kkk,ind)-0.5d0*(s1+s2+s3+s4+s5)
8225 c----------------------------------------------------------------------------
8226 double precision function eello6_graph2(i,j,k,l,jj,kk,swap)
8227 implicit real*8 (a-h,o-z)
8228 include 'DIMENSIONS'
8229 include 'COMMON.IOUNITS'
8230 include 'COMMON.CHAIN'
8231 include 'COMMON.DERIV'
8232 include 'COMMON.INTERACT'
8233 include 'COMMON.CONTACTS'
8234 include 'COMMON.TORSION'
8235 include 'COMMON.VAR'
8236 include 'COMMON.GEO'
8238 double precision vv(2),pizda(2,2),auxmat(2,2),auxvec(2),
8239 & auxvec1(2),auxvec2(2),auxmat1(2,2)
8242 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
8244 C Parallel Antiparallel C
8250 C \ j|/k\| \ |/k\|l C
8255 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
8256 cd write (2,*) 'eello6_graph2: i,',i,' j',j,' k',k,' l',l
8257 C AL 7/4/01 s1 would occur in the sixth-order moment,
8258 C but not in a cluster cumulant
8260 s1=dip(1,jj,i)*dip(1,kk,k)
8262 call matvec2(ADtEA1(1,1,1),Ub2(1,k),auxvec(1))
8263 s2=-0.5d0*scalar2(Ub2(1,i),auxvec(1))
8264 call matvec2(ADtEA(1,1,2),Ub2(1,l),auxvec1(1))
8265 s3=-0.5d0*scalar2(Ub2(1,j),auxvec1(1))
8266 call transpose2(EUg(1,1,k),auxmat(1,1))
8267 call matmat2(ADtEA1(1,1,1),auxmat(1,1),pizda(1,1))
8268 vv(1)=pizda(1,1)-pizda(2,2)
8269 vv(2)=pizda(1,2)+pizda(2,1)
8270 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
8271 cd write (2,*) 'eello6_graph2:','s1',s1,' s2',s2,' s3',s3,' s4',s4
8273 eello6_graph2=-(s1+s2+s3+s4)
8275 eello6_graph2=-(s2+s3+s4)
8278 C Derivatives in gamma(i-1)
8281 s1=dipderg(1,jj,i)*dip(1,kk,k)
8283 s2=-0.5d0*scalar2(Ub2der(1,i),auxvec(1))
8284 call matvec2(ADtEAderg(1,1,1,2),Ub2(1,l),auxvec2(1))
8285 s3=-0.5d0*scalar2(Ub2(1,j),auxvec2(1))
8286 s4=-0.25d0*scalar2(vv(1),Dtobr2der(1,i))
8288 g_corr6_loc(i-1)=g_corr6_loc(i-1)-ekont*(s1+s2+s3+s4)
8290 g_corr6_loc(i-1)=g_corr6_loc(i-1)-ekont*(s2+s3+s4)
8292 c g_corr6_loc(i-1)=g_corr6_loc(i-1)-s3
8294 C Derivatives in gamma(k-1)
8296 s1=dip(1,jj,i)*dipderg(1,kk,k)
8298 call matvec2(ADtEA1(1,1,1),Ub2der(1,k),auxvec2(1))
8299 s2=-0.5d0*scalar2(Ub2(1,i),auxvec2(1))
8300 call matvec2(ADtEAderg(1,1,2,2),Ub2(1,l),auxvec2(1))
8301 s3=-0.5d0*scalar2(Ub2(1,j),auxvec2(1))
8302 call transpose2(EUgder(1,1,k),auxmat1(1,1))
8303 call matmat2(ADtEA1(1,1,1),auxmat1(1,1),pizda(1,1))
8304 vv(1)=pizda(1,1)-pizda(2,2)
8305 vv(2)=pizda(1,2)+pizda(2,1)
8306 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
8308 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s1+s2+s3+s4)
8310 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s2+s3+s4)
8312 c g_corr6_loc(k-1)=g_corr6_loc(k-1)-s3
8313 C Derivatives in gamma(j-1) or gamma(l-1)
8316 s1=dipderg(3,jj,i)*dip(1,kk,k)
8318 call matvec2(ADtEA1derg(1,1,1,1),Ub2(1,k),auxvec2(1))
8319 s2=-0.5d0*scalar2(Ub2(1,i),auxvec2(1))
8320 s3=-0.5d0*scalar2(Ub2der(1,j),auxvec1(1))
8321 call matmat2(ADtEA1derg(1,1,1,1),auxmat(1,1),pizda(1,1))
8322 vv(1)=pizda(1,1)-pizda(2,2)
8323 vv(2)=pizda(1,2)+pizda(2,1)
8324 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
8327 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*s1
8329 g_corr6_loc(j-1)=g_corr6_loc(j-1)-ekont*s1
8332 g_corr6_loc(j-1)=g_corr6_loc(j-1)-ekont*(s2+s3+s4)
8333 c g_corr6_loc(j-1)=g_corr6_loc(j-1)-s3
8335 C Derivatives in gamma(l-1) or gamma(j-1)
8338 s1=dip(1,jj,i)*dipderg(3,kk,k)
8340 call matvec2(ADtEA1derg(1,1,2,1),Ub2(1,k),auxvec2(1))
8341 s2=-0.5d0*scalar2(Ub2(1,i),auxvec2(1))
8342 call matvec2(ADtEA(1,1,2),Ub2der(1,l),auxvec2(1))
8343 s3=-0.5d0*scalar2(Ub2(1,j),auxvec2(1))
8344 call matmat2(ADtEA1derg(1,1,2,1),auxmat(1,1),pizda(1,1))
8345 vv(1)=pizda(1,1)-pizda(2,2)
8346 vv(2)=pizda(1,2)+pizda(2,1)
8347 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
8350 g_corr6_loc(j-1)=g_corr6_loc(j-1)-ekont*s1
8352 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*s1
8355 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*(s2+s3+s4)
8356 c g_corr6_loc(l-1)=g_corr6_loc(l-1)-s3
8358 C Cartesian derivatives.
8360 write (2,*) 'In eello6_graph2'
8362 write (2,*) 'iii=',iii
8364 write (2,*) 'kkk=',kkk
8366 write (2,'(3(2f10.5),5x)')
8367 & ((ADtEA1derx(jjj,mmm,lll,kkk,iii,1),mmm=1,2),lll=1,3)
8377 s1=dipderx(lll,kkk,1,jj,i)*dip(1,kk,k)
8379 s1=dip(1,jj,i)*dipderx(lll,kkk,1,kk,k)
8382 call matvec2(ADtEA1derx(1,1,lll,kkk,iii,1),Ub2(1,k),
8384 s2=-0.5d0*scalar2(Ub2(1,i),auxvec(1))
8385 call matvec2(ADtEAderx(1,1,lll,kkk,iii,2),Ub2(1,l),
8387 s3=-0.5d0*scalar2(Ub2(1,j),auxvec(1))
8388 call transpose2(EUg(1,1,k),auxmat(1,1))
8389 call matmat2(ADtEA1derx(1,1,lll,kkk,iii,1),auxmat(1,1),
8391 vv(1)=pizda(1,1)-pizda(2,2)
8392 vv(2)=pizda(1,2)+pizda(2,1)
8393 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
8394 cd write (2,*) 's1',s1,' s2',s2,' s3',s3,' s4',s4
8396 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s1+s2+s4)
8398 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s2+s4)
8401 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-s3
8403 derx(lll,kkk,iii)=derx(lll,kkk,iii)-s3
8410 c----------------------------------------------------------------------------
8411 double precision function eello6_graph3(i,j,k,l,jj,kk,swap)
8412 implicit real*8 (a-h,o-z)
8413 include 'DIMENSIONS'
8414 include 'COMMON.IOUNITS'
8415 include 'COMMON.CHAIN'
8416 include 'COMMON.DERIV'
8417 include 'COMMON.INTERACT'
8418 include 'COMMON.CONTACTS'
8419 include 'COMMON.TORSION'
8420 include 'COMMON.VAR'
8421 include 'COMMON.GEO'
8422 double precision vv(2),pizda(2,2),auxmat(2,2),auxvec(2)
8424 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
8426 C Parallel Antiparallel C
8432 C j|/k\| / |/k\|l / C
8437 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
8439 C 4/7/01 AL Component s1 was removed, because it pertains to the respective
8440 C energy moment and not to the cluster cumulant.
8441 iti=itortyp(itype(i))
8442 if (j.lt.nres-1) then
8443 itj1=itortyp(itype(j+1))
8447 itk=itortyp(itype(k))
8448 itk1=itortyp(itype(k+1))
8449 if (l.lt.nres-1) then
8450 itl1=itortyp(itype(l+1))
8455 s1=dip(4,jj,i)*dip(4,kk,k)
8457 call matvec2(AECA(1,1,1),b1(1,k+1),auxvec(1))
8458 s2=0.5d0*scalar2(b1(1,k),auxvec(1))
8459 call matvec2(AECA(1,1,2),b1(1,l+1),auxvec(1))
8460 s3=0.5d0*scalar2(b1(1,j+1),auxvec(1))
8461 call transpose2(EE(1,1,itk),auxmat(1,1))
8462 call matmat2(auxmat(1,1),AECA(1,1,1),pizda(1,1))
8463 vv(1)=pizda(1,1)+pizda(2,2)
8464 vv(2)=pizda(2,1)-pizda(1,2)
8465 s4=-0.25d0*scalar2(vv(1),Ctobr(1,k))
8466 cd write (2,*) 'eello6_graph3:','s1',s1,' s2',s2,' s3',s3,' s4',s4,
8467 cd & "sum",-(s2+s3+s4)
8469 eello6_graph3=-(s1+s2+s3+s4)
8471 eello6_graph3=-(s2+s3+s4)
8474 C Derivatives in gamma(k-1)
8475 call matvec2(AECAderg(1,1,2),b1(1,l+1),auxvec(1))
8476 s3=0.5d0*scalar2(b1(1,j+1),auxvec(1))
8477 s4=-0.25d0*scalar2(vv(1),Ctobrder(1,k))
8478 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s3+s4)
8479 C Derivatives in gamma(l-1)
8480 call matvec2(AECAderg(1,1,1),b1(1,k+1),auxvec(1))
8481 s2=0.5d0*scalar2(b1(1,k),auxvec(1))
8482 call matmat2(auxmat(1,1),AECAderg(1,1,1),pizda(1,1))
8483 vv(1)=pizda(1,1)+pizda(2,2)
8484 vv(2)=pizda(2,1)-pizda(1,2)
8485 s4=-0.25d0*scalar2(vv(1),Ctobr(1,k))
8486 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*(s2+s4)
8487 C Cartesian derivatives.
8493 s1=dipderx(lll,kkk,4,jj,i)*dip(4,kk,k)
8495 s1=dip(4,jj,i)*dipderx(lll,kkk,4,kk,k)
8498 call matvec2(AECAderx(1,1,lll,kkk,iii,1),b1(1,k+1),
8500 s2=0.5d0*scalar2(b1(1,k),auxvec(1))
8501 call matvec2(AECAderx(1,1,lll,kkk,iii,2),b1(1,l+1),
8503 s3=0.5d0*scalar2(b1(1,j+1),auxvec(1))
8504 call matmat2(auxmat(1,1),AECAderx(1,1,lll,kkk,iii,1),
8506 vv(1)=pizda(1,1)+pizda(2,2)
8507 vv(2)=pizda(2,1)-pizda(1,2)
8508 s4=-0.25d0*scalar2(vv(1),Ctobr(1,k))
8510 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s1+s2+s4)
8512 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s2+s4)
8515 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-s3
8517 derx(lll,kkk,iii)=derx(lll,kkk,iii)-s3
8519 c derx(lll,kkk,iii)=derx(lll,kkk,iii)-s4
8525 c----------------------------------------------------------------------------
8526 double precision function eello6_graph4(i,j,k,l,jj,kk,imat,swap)
8527 implicit real*8 (a-h,o-z)
8528 include 'DIMENSIONS'
8529 include 'COMMON.IOUNITS'
8530 include 'COMMON.CHAIN'
8531 include 'COMMON.DERIV'
8532 include 'COMMON.INTERACT'
8533 include 'COMMON.CONTACTS'
8534 include 'COMMON.TORSION'
8535 include 'COMMON.VAR'
8536 include 'COMMON.GEO'
8537 include 'COMMON.FFIELD'
8538 double precision vv(2),pizda(2,2),auxmat(2,2),auxvec(2),
8539 & auxvec1(2),auxmat1(2,2)
8541 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
8543 C Parallel Antiparallel C
8549 C \ j|/k\| \ |/k\|l C
8554 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
8556 C 4/7/01 AL Component s1 was removed, because it pertains to the respective
8557 C energy moment and not to the cluster cumulant.
8558 cd write (2,*) 'eello_graph4: wturn6',wturn6
8559 iti=itortyp(itype(i))
8560 itj=itortyp(itype(j))
8561 if (j.lt.nres-1) then
8562 itj1=itortyp(itype(j+1))
8566 itk=itortyp(itype(k))
8567 if (k.lt.nres-1) then
8568 itk1=itortyp(itype(k+1))
8572 itl=itortyp(itype(l))
8573 if (l.lt.nres-1) then
8574 itl1=itortyp(itype(l+1))
8578 cd write (2,*) 'eello6_graph4:','i',i,' j',j,' k',k,' l',l
8579 cd write (2,*) 'iti',iti,' itj',itj,' itj1',itj1,' itk',itk,
8580 cd & ' itl',itl,' itl1',itl1
8583 s1=dip(3,jj,i)*dip(3,kk,k)
8585 s1=dip(2,jj,j)*dip(2,kk,l)
8588 call matvec2(AECA(1,1,imat),Ub2(1,k),auxvec(1))
8589 s2=0.5d0*scalar2(Ub2(1,i),auxvec(1))
8591 call matvec2(ADtEA1(1,1,3-imat),b1(1,j+1),auxvec1(1))
8592 s3=-0.5d0*scalar2(b1(1,j),auxvec1(1))
8594 call matvec2(ADtEA1(1,1,3-imat),b1(1,l+1),auxvec1(1))
8595 s3=-0.5d0*scalar2(b1(1,l),auxvec1(1))
8597 call transpose2(EUg(1,1,k),auxmat(1,1))
8598 call matmat2(AECA(1,1,imat),auxmat(1,1),pizda(1,1))
8599 vv(1)=pizda(1,1)-pizda(2,2)
8600 vv(2)=pizda(2,1)+pizda(1,2)
8601 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
8602 cd write (2,*) 'eello6_graph4:','s1',s1,' s2',s2,' s3',s3,' s4',s4
8604 eello6_graph4=-(s1+s2+s3+s4)
8606 eello6_graph4=-(s2+s3+s4)
8608 C Derivatives in gamma(i-1)
8612 s1=dipderg(2,jj,i)*dip(3,kk,k)
8614 s1=dipderg(4,jj,j)*dip(2,kk,l)
8617 s2=0.5d0*scalar2(Ub2der(1,i),auxvec(1))
8619 call matvec2(ADtEA1derg(1,1,1,3-imat),b1(1,j+1),auxvec1(1))
8620 s3=-0.5d0*scalar2(b1(1,j),auxvec1(1))
8622 call matvec2(ADtEA1derg(1,1,1,3-imat),b1(1,l+1),auxvec1(1))
8623 s3=-0.5d0*scalar2(b1(1,l),auxvec1(1))
8625 s4=0.25d0*scalar2(vv(1),Dtobr2der(1,i))
8626 if (wturn6.gt.0.0d0 .and. k.eq.l+4 .and. i.eq.j+2) then
8627 cd write (2,*) 'turn6 derivatives'
8629 gel_loc_turn6(i-1)=gel_loc_turn6(i-1)-ekont*(s1+s2+s3+s4)
8631 gel_loc_turn6(i-1)=gel_loc_turn6(i-1)-ekont*(s2+s3+s4)
8635 g_corr6_loc(i-1)=g_corr6_loc(i-1)-ekont*(s1+s2+s3+s4)
8637 g_corr6_loc(i-1)=g_corr6_loc(i-1)-ekont*(s2+s3+s4)
8641 C Derivatives in gamma(k-1)
8644 s1=dip(3,jj,i)*dipderg(2,kk,k)
8646 s1=dip(2,jj,j)*dipderg(4,kk,l)
8649 call matvec2(AECA(1,1,imat),Ub2der(1,k),auxvec1(1))
8650 s2=0.5d0*scalar2(Ub2(1,i),auxvec1(1))
8652 call matvec2(ADtEA1derg(1,1,2,3-imat),b1(1,j+1),auxvec1(1))
8653 s3=-0.5d0*scalar2(b1(1,j),auxvec1(1))
8655 call matvec2(ADtEA1derg(1,1,2,3-imat),b1(1,l+1),auxvec1(1))
8656 s3=-0.5d0*scalar2(b1(1,l),auxvec1(1))
8658 call transpose2(EUgder(1,1,k),auxmat1(1,1))
8659 call matmat2(AECA(1,1,imat),auxmat1(1,1),pizda(1,1))
8660 vv(1)=pizda(1,1)-pizda(2,2)
8661 vv(2)=pizda(2,1)+pizda(1,2)
8662 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
8663 if (wturn6.gt.0.0d0 .and. k.eq.l+4 .and. i.eq.j+2) then
8665 gel_loc_turn6(k-1)=gel_loc_turn6(k-1)-ekont*(s1+s2+s3+s4)
8667 gel_loc_turn6(k-1)=gel_loc_turn6(k-1)-ekont*(s2+s3+s4)
8671 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s1+s2+s3+s4)
8673 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s2+s3+s4)
8676 C Derivatives in gamma(j-1) or gamma(l-1)
8677 if (l.eq.j+1 .and. l.gt.1) then
8678 call matvec2(AECAderg(1,1,imat),Ub2(1,k),auxvec(1))
8679 s2=0.5d0*scalar2(Ub2(1,i),auxvec(1))
8680 call matmat2(AECAderg(1,1,imat),auxmat(1,1),pizda(1,1))
8681 vv(1)=pizda(1,1)-pizda(2,2)
8682 vv(2)=pizda(2,1)+pizda(1,2)
8683 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
8684 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*(s2+s4)
8685 else if (j.gt.1) then
8686 call matvec2(AECAderg(1,1,imat),Ub2(1,k),auxvec(1))
8687 s2=0.5d0*scalar2(Ub2(1,i),auxvec(1))
8688 call matmat2(AECAderg(1,1,imat),auxmat(1,1),pizda(1,1))
8689 vv(1)=pizda(1,1)-pizda(2,2)
8690 vv(2)=pizda(2,1)+pizda(1,2)
8691 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
8692 if (wturn6.gt.0.0d0 .and. k.eq.l+4 .and. i.eq.j+2) then
8693 gel_loc_turn6(j-1)=gel_loc_turn6(j-1)-ekont*(s2+s4)
8695 g_corr6_loc(j-1)=g_corr6_loc(j-1)-ekont*(s2+s4)
8698 C Cartesian derivatives.
8705 s1=dipderx(lll,kkk,3,jj,i)*dip(3,kk,k)
8707 s1=dipderx(lll,kkk,2,jj,j)*dip(2,kk,l)
8711 s1=dip(3,jj,i)*dipderx(lll,kkk,3,kk,k)
8713 s1=dip(2,jj,j)*dipderx(lll,kkk,2,kk,l)
8717 call matvec2(AECAderx(1,1,lll,kkk,iii,imat),Ub2(1,k),
8719 s2=0.5d0*scalar2(Ub2(1,i),auxvec(1))
8721 call matvec2(ADtEA1derx(1,1,lll,kkk,iii,3-imat),
8722 & b1(1,j+1),auxvec(1))
8723 s3=-0.5d0*scalar2(b1(1,j),auxvec(1))
8725 call matvec2(ADtEA1derx(1,1,lll,kkk,iii,3-imat),
8726 & b1(1,l+1),auxvec(1))
8727 s3=-0.5d0*scalar2(b1(1,l),auxvec(1))
8729 call matmat2(AECAderx(1,1,lll,kkk,iii,imat),auxmat(1,1),
8731 vv(1)=pizda(1,1)-pizda(2,2)
8732 vv(2)=pizda(2,1)+pizda(1,2)
8733 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
8735 if (wturn6.gt.0.0d0 .and. k.eq.l+4 .and. i.eq.j+2) then
8737 derx_turn(lll,kkk,3-iii)=derx_turn(lll,kkk,3-iii)
8740 derx_turn(lll,kkk,3-iii)=derx_turn(lll,kkk,3-iii)
8743 derx_turn(lll,kkk,iii)=derx_turn(lll,kkk,iii)-s3
8746 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-(s1+s2+s4)
8748 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-(s2+s4)
8750 derx(lll,kkk,iii)=derx(lll,kkk,iii)-s3
8754 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s1+s2+s4)
8756 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s2+s4)
8759 derx(lll,kkk,iii)=derx(lll,kkk,iii)-s3
8761 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-s3
8769 c----------------------------------------------------------------------------
8770 double precision function eello_turn6(i,jj,kk)
8771 implicit real*8 (a-h,o-z)
8772 include 'DIMENSIONS'
8773 include 'COMMON.IOUNITS'
8774 include 'COMMON.CHAIN'
8775 include 'COMMON.DERIV'
8776 include 'COMMON.INTERACT'
8777 include 'COMMON.CONTACTS'
8778 include 'COMMON.TORSION'
8779 include 'COMMON.VAR'
8780 include 'COMMON.GEO'
8781 double precision vtemp1(2),vtemp2(2),vtemp3(2),vtemp4(2),
8782 & atemp(2,2),auxmat(2,2),achuj_temp(2,2),gtemp(2,2),gvec(2),
8784 double precision vtemp1d(2),vtemp2d(2),vtemp3d(2),vtemp4d(2),
8785 & atempd(2,2),auxmatd(2,2),achuj_tempd(2,2),gtempd(2,2),gvecd(2)
8786 C 4/7/01 AL Components s1, s8, and s13 were removed, because they pertain to
8787 C the respective energy moment and not to the cluster cumulant.
8796 iti=itortyp(itype(i))
8797 itk=itortyp(itype(k))
8798 itk1=itortyp(itype(k+1))
8799 itl=itortyp(itype(l))
8800 itj=itortyp(itype(j))
8801 cd write (2,*) 'itk',itk,' itk1',itk1,' itl',itl,' itj',itj
8802 cd write (2,*) 'i',i,' k',k,' j',j,' l',l
8803 cd if (i.ne.1 .or. j.ne.3 .or. k.ne.2 .or. l.ne.4) then
8808 cd & 'EELLO6: Contacts have occurred for peptide groups',i,j,
8810 cd call checkint_turn6(i,jj,kk,eel_turn6_num)
8814 derx_turn(lll,kkk,iii)=0.0d0
8821 eello6_5=eello6_graph4(l,k,j,i,kk,jj,2,.true.)
8823 cd write (2,*) 'eello6_5',eello6_5
8825 call transpose2(AEA(1,1,1),auxmat(1,1))
8826 call matmat2(EUg(1,1,i+1),auxmat(1,1),auxmat(1,1))
8827 ss1=scalar2(Ub2(1,i+2),b1(1,l))
8828 s1 = (auxmat(1,1)+auxmat(2,2))*ss1
8830 call matvec2(EUg(1,1,i+2),b1(1,l),vtemp1(1))
8831 call matvec2(AEA(1,1,1),vtemp1(1),vtemp1(1))
8832 s2 = scalar2(b1(1,k),vtemp1(1))
8834 call transpose2(AEA(1,1,2),atemp(1,1))
8835 call matmat2(atemp(1,1),EUg(1,1,i+4),atemp(1,1))
8836 call matvec2(Ug2(1,1,i+2),dd(1,1,itk1),vtemp2(1))
8837 s8 = -(atemp(1,1)+atemp(2,2))*scalar2(cc(1,1,itl),vtemp2(1))
8839 call matmat2(EUg(1,1,i+3),AEA(1,1,2),auxmat(1,1))
8840 call matvec2(auxmat(1,1),Ub2(1,i+4),vtemp3(1))
8841 s12 = scalar2(Ub2(1,i+2),vtemp3(1))
8843 call transpose2(a_chuj(1,1,kk,i+1),achuj_temp(1,1))
8844 call matmat2(achuj_temp(1,1),EUg(1,1,i+2),gtemp(1,1))
8845 call matmat2(gtemp(1,1),EUg(1,1,i+3),gtemp(1,1))
8846 call matvec2(a_chuj(1,1,jj,i),Ub2(1,i+4),vtemp4(1))
8847 ss13 = scalar2(b1(1,k),vtemp4(1))
8848 s13 = (gtemp(1,1)+gtemp(2,2))*ss13
8850 c write (2,*) 's1,s2,s8,s12,s13',s1,s2,s8,s12,s13
8856 eel_turn6 = eello6_5 - 0.5d0*(s1+s2+s12+s8+s13)
8857 C Derivatives in gamma(i+2)
8861 call transpose2(AEA(1,1,1),auxmatd(1,1))
8862 call matmat2(EUgder(1,1,i+1),auxmatd(1,1),auxmatd(1,1))
8863 s1d = (auxmatd(1,1)+auxmatd(2,2))*ss1
8864 call transpose2(AEAderg(1,1,2),atempd(1,1))
8865 call matmat2(atempd(1,1),EUg(1,1,i+4),atempd(1,1))
8866 s8d = -(atempd(1,1)+atempd(2,2))*scalar2(cc(1,1,itl),vtemp2(1))
8868 call matmat2(EUg(1,1,i+3),AEAderg(1,1,2),auxmatd(1,1))
8869 call matvec2(auxmatd(1,1),Ub2(1,i+4),vtemp3d(1))
8870 s12d = scalar2(Ub2(1,i+2),vtemp3d(1))
8876 gel_loc_turn6(i)=gel_loc_turn6(i)-0.5d0*ekont*(s1d+s8d+s12d)
8877 C Derivatives in gamma(i+3)
8879 call transpose2(AEA(1,1,1),auxmatd(1,1))
8880 call matmat2(EUg(1,1,i+1),auxmatd(1,1),auxmatd(1,1))
8881 ss1d=scalar2(Ub2der(1,i+2),b1(1,l))
8882 s1d = (auxmatd(1,1)+auxmatd(2,2))*ss1d
8884 call matvec2(EUgder(1,1,i+2),b1(1,l),vtemp1d(1))
8885 call matvec2(AEA(1,1,1),vtemp1d(1),vtemp1d(1))
8886 s2d = scalar2(b1(1,k),vtemp1d(1))
8888 call matvec2(Ug2der(1,1,i+2),dd(1,1,itk1),vtemp2d(1))
8889 s8d = -(atemp(1,1)+atemp(2,2))*scalar2(cc(1,1,itl),vtemp2d(1))
8891 s12d = scalar2(Ub2der(1,i+2),vtemp3(1))
8893 call matmat2(achuj_temp(1,1),EUgder(1,1,i+2),gtempd(1,1))
8894 call matmat2(gtempd(1,1),EUg(1,1,i+3),gtempd(1,1))
8895 s13d = (gtempd(1,1)+gtempd(2,2))*ss13
8903 gel_loc_turn6(i+1)=gel_loc_turn6(i+1)
8904 & -0.5d0*ekont*(s1d+s2d+s8d+s12d+s13d)
8906 gel_loc_turn6(i+1)=gel_loc_turn6(i+1)
8907 & -0.5d0*ekont*(s2d+s12d)
8909 C Derivatives in gamma(i+4)
8910 call matmat2(EUgder(1,1,i+3),AEA(1,1,2),auxmatd(1,1))
8911 call matvec2(auxmatd(1,1),Ub2(1,i+4),vtemp3d(1))
8912 s12d = scalar2(Ub2(1,i+2),vtemp3d(1))
8914 call matmat2(achuj_temp(1,1),EUg(1,1,i+2),gtempd(1,1))
8915 call matmat2(gtempd(1,1),EUgder(1,1,i+3),gtempd(1,1))
8916 s13d = (gtempd(1,1)+gtempd(2,2))*ss13
8924 gel_loc_turn6(i+2)=gel_loc_turn6(i+2)-0.5d0*ekont*(s12d+s13d)
8926 gel_loc_turn6(i+2)=gel_loc_turn6(i+2)-0.5d0*ekont*(s12d)
8928 C Derivatives in gamma(i+5)
8930 call transpose2(AEAderg(1,1,1),auxmatd(1,1))
8931 call matmat2(EUg(1,1,i+1),auxmatd(1,1),auxmatd(1,1))
8932 s1d = (auxmatd(1,1)+auxmatd(2,2))*ss1
8934 call matvec2(EUg(1,1,i+2),b1(1,l),vtemp1d(1))
8935 call matvec2(AEAderg(1,1,1),vtemp1d(1),vtemp1d(1))
8936 s2d = scalar2(b1(1,k),vtemp1d(1))
8938 call transpose2(AEA(1,1,2),atempd(1,1))
8939 call matmat2(atempd(1,1),EUgder(1,1,i+4),atempd(1,1))
8940 s8d = -(atempd(1,1)+atempd(2,2))*scalar2(cc(1,1,itl),vtemp2(1))
8942 call matvec2(auxmat(1,1),Ub2der(1,i+4),vtemp3d(1))
8943 s12d = scalar2(Ub2(1,i+2),vtemp3d(1))
8945 call matvec2(a_chuj(1,1,jj,i),Ub2der(1,i+4),vtemp4d(1))
8946 ss13d = scalar2(b1(1,k),vtemp4d(1))
8947 s13d = (gtemp(1,1)+gtemp(2,2))*ss13d
8955 gel_loc_turn6(i+3)=gel_loc_turn6(i+3)
8956 & -0.5d0*ekont*(s1d+s2d+s8d+s12d+s13d)
8958 gel_loc_turn6(i+3)=gel_loc_turn6(i+3)
8959 & -0.5d0*ekont*(s2d+s12d)
8961 C Cartesian derivatives
8966 call transpose2(AEAderx(1,1,lll,kkk,iii,1),auxmatd(1,1))
8967 call matmat2(EUg(1,1,i+1),auxmatd(1,1),auxmatd(1,1))
8968 s1d = (auxmatd(1,1)+auxmatd(2,2))*ss1
8970 call matvec2(EUg(1,1,i+2),b1(1,l),vtemp1(1))
8971 call matvec2(AEAderx(1,1,lll,kkk,iii,1),vtemp1(1),
8973 s2d = scalar2(b1(1,k),vtemp1d(1))
8975 call transpose2(AEAderx(1,1,lll,kkk,iii,2),atempd(1,1))
8976 call matmat2(atempd(1,1),EUg(1,1,i+4),atempd(1,1))
8977 s8d = -(atempd(1,1)+atempd(2,2))*
8978 & scalar2(cc(1,1,itl),vtemp2(1))
8980 call matmat2(EUg(1,1,i+3),AEAderx(1,1,lll,kkk,iii,2),
8982 call matvec2(auxmatd(1,1),Ub2(1,i+4),vtemp3d(1))
8983 s12d = scalar2(Ub2(1,i+2),vtemp3d(1))
8990 derx_turn(lll,kkk,iii) = derx_turn(lll,kkk,iii)
8993 derx_turn(lll,kkk,iii) = derx_turn(lll,kkk,iii)
8997 derx_turn(lll,kkk,3-iii) = derx_turn(lll,kkk,3-iii)
8998 & - 0.5d0*(s8d+s12d)
9000 derx_turn(lll,kkk,3-iii) = derx_turn(lll,kkk,3-iii)
9009 call transpose2(a_chuj_der(1,1,lll,kkk,kk,i+1),
9011 call matmat2(achuj_tempd(1,1),EUg(1,1,i+2),gtempd(1,1))
9012 call matmat2(gtempd(1,1),EUg(1,1,i+3),gtempd(1,1))
9013 s13d=(gtempd(1,1)+gtempd(2,2))*ss13
9014 derx_turn(lll,kkk,2) = derx_turn(lll,kkk,2)-0.5d0*s13d
9015 call matvec2(a_chuj_der(1,1,lll,kkk,jj,i),Ub2(1,i+4),
9017 ss13d = scalar2(b1(1,k),vtemp4d(1))
9018 s13d = (gtemp(1,1)+gtemp(2,2))*ss13d
9019 derx_turn(lll,kkk,1) = derx_turn(lll,kkk,1)-0.5d0*s13d
9023 cd write(iout,*) 'eel6_turn6',eel_turn6,' eel_turn6_num',
9024 cd & 16*eel_turn6_num
9026 if (j.lt.nres-1) then
9033 if (l.lt.nres-1) then
9041 cgrad ggg1(ll)=eel_turn6*g_contij(ll,1)
9042 cgrad ggg2(ll)=eel_turn6*g_contij(ll,2)
9043 cgrad ghalf=0.5d0*ggg1(ll)
9045 gturn6ij=eel_turn6*g_contij(ll,1)+ekont*derx_turn(ll,1,1)
9046 gturn6kl=eel_turn6*g_contij(ll,2)+ekont*derx_turn(ll,1,2)
9047 gcorr6_turn(ll,i)=gcorr6_turn(ll,i)!+ghalf
9048 & +ekont*derx_turn(ll,2,1)
9049 gcorr6_turn(ll,i+1)=gcorr6_turn(ll,i+1)+ekont*derx_turn(ll,3,1)
9050 gcorr6_turn(ll,j)=gcorr6_turn(ll,j)!+ghalf
9051 & +ekont*derx_turn(ll,4,1)
9052 gcorr6_turn(ll,j1)=gcorr6_turn(ll,j1)+ekont*derx_turn(ll,5,1)
9053 gcorr6_turn_long(ll,j)=gcorr6_turn_long(ll,j)+gturn6ij
9054 gcorr6_turn_long(ll,i)=gcorr6_turn_long(ll,i)-gturn6ij
9055 cgrad ghalf=0.5d0*ggg2(ll)
9057 gcorr6_turn(ll,k)=gcorr6_turn(ll,k)!+ghalf
9058 & +ekont*derx_turn(ll,2,2)
9059 gcorr6_turn(ll,k+1)=gcorr6_turn(ll,k+1)+ekont*derx_turn(ll,3,2)
9060 gcorr6_turn(ll,l)=gcorr6_turn(ll,l)!+ghalf
9061 & +ekont*derx_turn(ll,4,2)
9062 gcorr6_turn(ll,l1)=gcorr6_turn(ll,l1)+ekont*derx_turn(ll,5,2)
9063 gcorr6_turn_long(ll,l)=gcorr6_turn_long(ll,l)+gturn6kl
9064 gcorr6_turn_long(ll,k)=gcorr6_turn_long(ll,k)-gturn6kl
9069 cgrad gcorr6_turn(ll,m)=gcorr6_turn(ll,m)+ggg1(ll)
9074 cgrad gcorr6_turn(ll,m)=gcorr6_turn(ll,m)+ggg2(ll)
9080 cgrad gcorr6_turn(ll,m)=gcorr6_turn(ll,m)+ekont*derx_turn(ll,1,1)
9085 cgrad gcorr6_turn(ll,m)=gcorr6_turn(ll,m)+ekont*derx_turn(ll,1,2)
9089 cd write (2,*) iii,g_corr6_loc(iii)
9091 eello_turn6=ekont*eel_turn6
9092 cd write (2,*) 'ekont',ekont
9093 cd write (2,*) 'eel_turn6',ekont*eel_turn6
9097 C-----------------------------------------------------------------------------
9098 double precision function scalar(u,v)
9099 !DIR$ INLINEALWAYS scalar
9101 cDEC$ ATTRIBUTES FORCEINLINE::scalar
9104 double precision u(3),v(3)
9105 cd double precision sc
9113 scalar=u(1)*v(1)+u(2)*v(2)+u(3)*v(3)
9116 crc-------------------------------------------------
9117 SUBROUTINE MATVEC2(A1,V1,V2)
9118 !DIR$ INLINEALWAYS MATVEC2
9120 cDEC$ ATTRIBUTES FORCEINLINE::MATVEC2
9122 implicit real*8 (a-h,o-z)
9123 include 'DIMENSIONS'
9124 DIMENSION A1(2,2),V1(2),V2(2)
9128 c 3 VI=VI+A1(I,K)*V1(K)
9132 vaux1=a1(1,1)*v1(1)+a1(1,2)*v1(2)
9133 vaux2=a1(2,1)*v1(1)+a1(2,2)*v1(2)
9138 C---------------------------------------
9139 SUBROUTINE MATMAT2(A1,A2,A3)
9141 cDEC$ ATTRIBUTES FORCEINLINE::MATMAT2
9143 implicit real*8 (a-h,o-z)
9144 include 'DIMENSIONS'
9145 DIMENSION A1(2,2),A2(2,2),A3(2,2)
9146 c DIMENSION AI3(2,2)
9150 c A3IJ=A3IJ+A1(I,K)*A2(K,J)
9156 ai3_11=a1(1,1)*a2(1,1)+a1(1,2)*a2(2,1)
9157 ai3_12=a1(1,1)*a2(1,2)+a1(1,2)*a2(2,2)
9158 ai3_21=a1(2,1)*a2(1,1)+a1(2,2)*a2(2,1)
9159 ai3_22=a1(2,1)*a2(1,2)+a1(2,2)*a2(2,2)
9167 c-------------------------------------------------------------------------
9168 double precision function scalar2(u,v)
9169 !DIR$ INLINEALWAYS scalar2
9171 double precision u(2),v(2)
9174 scalar2=u(1)*v(1)+u(2)*v(2)
9178 C-----------------------------------------------------------------------------
9180 subroutine transpose2(a,at)
9181 !DIR$ INLINEALWAYS transpose2
9183 cDEC$ ATTRIBUTES FORCEINLINE::transpose2
9186 double precision a(2,2),at(2,2)
9193 c--------------------------------------------------------------------------
9194 subroutine transpose(n,a,at)
9197 double precision a(n,n),at(n,n)
9205 C---------------------------------------------------------------------------
9206 subroutine prodmat3(a1,a2,kk,transp,prod)
9207 !DIR$ INLINEALWAYS prodmat3
9209 cDEC$ ATTRIBUTES FORCEINLINE::prodmat3
9213 double precision a1(2,2),a2(2,2),a2t(2,2),kk(2,2),prod(2,2)
9215 crc double precision auxmat(2,2),prod_(2,2)
9218 crc call transpose2(kk(1,1),auxmat(1,1))
9219 crc call matmat2(a1(1,1),auxmat(1,1),auxmat(1,1))
9220 crc call matmat2(auxmat(1,1),a2(1,1),prod_(1,1))
9222 prod(1,1)=(a1(1,1)*kk(1,1)+a1(1,2)*kk(1,2))*a2(1,1)
9223 & +(a1(1,1)*kk(2,1)+a1(1,2)*kk(2,2))*a2(2,1)
9224 prod(1,2)=(a1(1,1)*kk(1,1)+a1(1,2)*kk(1,2))*a2(1,2)
9225 & +(a1(1,1)*kk(2,1)+a1(1,2)*kk(2,2))*a2(2,2)
9226 prod(2,1)=(a1(2,1)*kk(1,1)+a1(2,2)*kk(1,2))*a2(1,1)
9227 & +(a1(2,1)*kk(2,1)+a1(2,2)*kk(2,2))*a2(2,1)
9228 prod(2,2)=(a1(2,1)*kk(1,1)+a1(2,2)*kk(1,2))*a2(1,2)
9229 & +(a1(2,1)*kk(2,1)+a1(2,2)*kk(2,2))*a2(2,2)
9232 crc call matmat2(a1(1,1),kk(1,1),auxmat(1,1))
9233 crc call matmat2(auxmat(1,1),a2(1,1),prod_(1,1))
9235 prod(1,1)=(a1(1,1)*kk(1,1)+a1(1,2)*kk(2,1))*a2(1,1)
9236 & +(a1(1,1)*kk(1,2)+a1(1,2)*kk(2,2))*a2(2,1)
9237 prod(1,2)=(a1(1,1)*kk(1,1)+a1(1,2)*kk(2,1))*a2(1,2)
9238 & +(a1(1,1)*kk(1,2)+a1(1,2)*kk(2,2))*a2(2,2)
9239 prod(2,1)=(a1(2,1)*kk(1,1)+a1(2,2)*kk(2,1))*a2(1,1)
9240 & +(a1(2,1)*kk(1,2)+a1(2,2)*kk(2,2))*a2(2,1)
9241 prod(2,2)=(a1(2,1)*kk(1,1)+a1(2,2)*kk(2,1))*a2(1,2)
9242 & +(a1(2,1)*kk(1,2)+a1(2,2)*kk(2,2))*a2(2,2)
9245 c call transpose2(a2(1,1),a2t(1,1))
9248 crc print *,((prod_(i,j),i=1,2),j=1,2)
9249 crc print *,((prod(i,j),i=1,2),j=1,2)