1 subroutine etotal(energia)
2 implicit real*8 (a-h,o-z)
7 cMS$ATTRIBUTES C :: proc_proc
12 double precision weights_(n_ene)
14 include 'COMMON.SETUP'
15 include 'COMMON.IOUNITS'
16 double precision energia(0:n_ene)
17 include 'COMMON.LOCAL'
18 include 'COMMON.FFIELD'
19 include 'COMMON.DERIV'
20 include 'COMMON.INTERACT'
21 include 'COMMON.SBRIDGE'
22 include 'COMMON.CHAIN'
25 include 'COMMON.CONTROL'
26 include 'COMMON.TIME1'
28 c print*,"ETOTAL Processor",fg_rank," absolute rank",myrank,
29 c & " nfgtasks",nfgtasks
30 if (nfgtasks.gt.1) then
32 C FG slaves call the following matching MPI_Bcast in ERGASTULUM
33 if (fg_rank.eq.0) then
34 call MPI_Bcast(0,1,MPI_INTEGER,king,FG_COMM,IERROR)
35 c print *,"Processor",myrank," BROADCAST iorder"
36 C FG master sets up the WEIGHTS_ array which will be broadcast to the
37 C FG slaves as WEIGHTS array.
57 C FG Master broadcasts the WEIGHTS_ array
58 call MPI_Bcast(weights_(1),n_ene,
59 & MPI_DOUBLE_PRECISION,king,FG_COMM,IERROR)
61 C FG slaves receive the WEIGHTS array
62 call MPI_Bcast(weights(1),n_ene,
63 & MPI_DOUBLE_PRECISION,king,FG_COMM,IERROR)
84 time_Bcast=time_Bcast+MPI_Wtime()-time00
85 time_Bcastw=time_Bcastw+MPI_Wtime()-time00
86 c call chainbuild_cart
88 c print *,'Processor',myrank,' calling etotal ipot=',ipot
89 c print *,'Processor',myrank,' nnt=',nnt,' nct=',nct
91 c if (modecalc.eq.12.or.modecalc.eq.14) then
92 c call int_from_cart1(.false.)
99 C Compute the side-chain and electrostatic interaction energy
101 goto (101,102,103,104,105,106) ipot
102 C Lennard-Jones potential.
104 cd print '(a)','Exit ELJ'
106 C Lennard-Jones-Kihara potential (shifted).
109 C Berne-Pechukas potential (dilated LJ, angular dependence).
112 C Gay-Berne potential (shifted LJ, angular dependence).
115 C Gay-Berne-Vorobjev potential (shifted LJ, angular dependence).
118 C Soft-sphere potential
119 106 call e_softsphere(evdw)
121 C Calculate electrostatic (H-bonding) energy of the main chain.
125 cmc Sep-06: egb takes care of dynamic ss bonds too
127 c if (dyn_ss) call dyn_set_nss
129 c print *,"Processor",myrank," computed USCSC"
135 time_vec=time_vec+MPI_Wtime()-time01
137 c print *,"Processor",myrank," left VEC_AND_DERIV"
140 if (welec.gt.0d0.or.wvdwpp.gt.0d0.or.wel_loc.gt.0d0.or.
141 & wturn3.gt.0d0.or.wturn4.gt.0d0 .or. wcorr.gt.0.0d0
142 & .or. wcorr4.gt.0.0d0 .or. wcorr5.gt.0.d0
143 & .or. wcorr6.gt.0.0d0 .or. wturn6.gt.0.0d0 ) then
145 if (welec.gt.0d0.or.wel_loc.gt.0d0.or.
146 & wturn3.gt.0d0.or.wturn4.gt.0d0 .or. wcorr.gt.0.0d0
147 & .or. wcorr4.gt.0.0d0 .or. wcorr5.gt.0.d0
148 & .or. wcorr6.gt.0.0d0 .or. wturn6.gt.0.0d0 ) then
150 call eelec(ees,evdw1,eel_loc,eello_turn3,eello_turn4)
159 c write (iout,*) "Soft-spheer ELEC potential"
160 call eelec_soft_sphere(ees,evdw1,eel_loc,eello_turn3,
163 c print *,"Processor",myrank," computed UELEC"
165 C Calculate excluded-volume interaction energy between peptide groups
170 call escp(evdw2,evdw2_14)
176 c write (iout,*) "Soft-sphere SCP potential"
177 call escp_soft_sphere(evdw2,evdw2_14)
180 c Calculate the bond-stretching energy
184 C Calculate the disulfide-bridge and other energy and the contributions
185 C from other distance constraints.
186 cd print *,'Calling EHPB'
188 cd print *,'EHPB exitted succesfully.'
190 C Calculate the virtual-bond-angle energy.
192 if (wang.gt.0d0) then
193 call ebend(ebe,ethetacnstr)
198 c print *,"Processor",myrank," computed UB"
200 C Calculate the SC local energy.
203 c print *,"Processor",myrank," computed USC"
205 C Calculate the virtual-bond torsional energy.
207 cd print *,'nterm=',nterm
209 call etor(etors,edihcnstr)
214 c print *,"Processor",myrank," computed Utor"
216 C 6/23/01 Calculate double-torsional energy
218 if (wtor_d.gt.0) then
223 c print *,"Processor",myrank," computed Utord"
225 C 21/5/07 Calculate local sicdechain correlation energy
227 if (wsccor.gt.0.0d0) then
228 call eback_sc_corr(esccor)
232 c print *,"Processor",myrank," computed Usccorr"
234 C 12/1/95 Multi-body terms
238 if ((wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0
239 & .or. wturn6.gt.0.0d0) .and. ipot.lt.6) then
240 call multibody_eello(ecorr,ecorr5,ecorr6,eturn6,n_corr,n_corr1)
241 cd write(2,*)'multibody_eello n_corr=',n_corr,' n_corr1=',n_corr1,
242 cd &" ecorr",ecorr," ecorr5",ecorr5," ecorr6",ecorr6," eturn6",eturn6
249 if ((wcorr4.eq.0.0d0 .and. wcorr.gt.0.0d0) .and. ipot.lt.6) then
250 call multibody_hb(ecorr,ecorr5,ecorr6,n_corr,n_corr1)
251 cd write (iout,*) "multibody_hb ecorr",ecorr
253 c print *,"Processor",myrank," computed Ucorr"
255 C If performing constraint dynamics, call the constraint energy
256 C after the equilibration time
257 if(usampl.and.totT.gt.eq_time) then
265 time_enecalc=time_enecalc+MPI_Wtime()-time00
267 c print *,"Processor",myrank," computed Uconstr"
276 energia(2)=evdw2-evdw2_14
293 energia(8)=eello_turn3
294 energia(9)=eello_turn4
301 energia(19)=edihcnstr
303 energia(20)=Uconst+Uconst_back
305 C energia(22)=eliptrans (the energy for lipid transfere implemented in lipid branch)
306 C energia(23)= ... (energy for AFM, steered molecular dynamics)
307 energia(24)=ethetacnstr
308 c Here are the energies showed per procesor if the are more processors
309 c per molecule then we sum it up in sum_energy subroutine
310 c print *," Processor",myrank," calls SUM_ENERGY"
311 call sum_energy(energia,.true.)
312 if (dyn_ss) call dyn_set_nss
313 c print *," Processor",myrank," left SUM_ENERGY"
315 time_sumene=time_sumene+MPI_Wtime()-time00
319 c-------------------------------------------------------------------------------
320 subroutine sum_energy(energia,reduce)
321 implicit real*8 (a-h,o-z)
326 cMS$ATTRIBUTES C :: proc_proc
332 include 'COMMON.SETUP'
333 include 'COMMON.IOUNITS'
334 double precision energia(0:n_ene),enebuff(0:n_ene+1)
335 include 'COMMON.FFIELD'
336 include 'COMMON.DERIV'
337 include 'COMMON.INTERACT'
338 include 'COMMON.SBRIDGE'
339 include 'COMMON.CHAIN'
341 include 'COMMON.CONTROL'
342 include 'COMMON.TIME1'
345 if (nfgtasks.gt.1 .and. reduce) then
347 write (iout,*) "energies before REDUCE"
348 call enerprint(energia)
352 enebuff(i)=energia(i)
355 call MPI_Barrier(FG_COMM,IERR)
356 time_barrier_e=time_barrier_e+MPI_Wtime()-time00
358 call MPI_Reduce(enebuff(0),energia(0),n_ene+1,
359 & MPI_DOUBLE_PRECISION,MPI_SUM,king,FG_COMM,IERR)
361 write (iout,*) "energies after REDUCE"
362 call enerprint(energia)
365 time_Reduce=time_Reduce+MPI_Wtime()-time00
367 if (fg_rank.eq.0) then
371 evdw2=energia(2)+energia(18)
387 eello_turn3=energia(8)
388 eello_turn4=energia(9)
395 edihcnstr=energia(19)
399 ethetacnstr=energia(24)
402 etot=wsc*evdw+wscp*evdw2+welec*ees+wvdwpp*evdw1
403 & +wang*ebe+wtor*etors+wscloc*escloc
404 & +wstrain*ehpb+wcorr*ecorr+wcorr5*ecorr5
405 & +wcorr6*ecorr6+wturn4*eello_turn4+wturn3*eello_turn3
406 & +wturn6*eturn6+wel_loc*eel_loc+edihcnstr+wtor_d*etors_d
407 & +wbond*estr+Uconst+wsccor*esccor+ethetacnstr
409 etot=wsc*evdw+wscp*evdw2+welec*(ees+evdw1)
410 & +wang*ebe+wtor*etors+wscloc*escloc
411 & +wstrain*ehpb+wcorr*ecorr+wcorr5*ecorr5
412 & +wcorr6*ecorr6+wturn4*eello_turn4+wturn3*eello_turn3
413 & +wturn6*eturn6+wel_loc*eel_loc+edihcnstr+wtor_d*etors_d
414 & +wbond*estr+Uconst+wsccor*esccor+ethetacnstr
420 if (isnan(etot).ne.0) energia(0)=1.0d+99
422 if (isnan(etot)) energia(0)=1.0d+99
427 idumm=proc_proc(etot,i)
429 call proc_proc(etot,i)
431 if(i.eq.1)energia(0)=1.0d+99
438 c-------------------------------------------------------------------------------
439 subroutine sum_gradient
440 implicit real*8 (a-h,o-z)
445 cMS$ATTRIBUTES C :: proc_proc
450 double precision gradbufc(3,maxres),gradbufx(3,maxres),
451 & glocbuf(4*maxres),gradbufc_sum(3,maxres),gloc_scbuf(3,maxres)
453 include 'COMMON.SETUP'
454 include 'COMMON.IOUNITS'
455 include 'COMMON.FFIELD'
456 include 'COMMON.DERIV'
457 include 'COMMON.INTERACT'
458 include 'COMMON.SBRIDGE'
459 include 'COMMON.CHAIN'
461 include 'COMMON.CONTROL'
462 include 'COMMON.TIME1'
463 include 'COMMON.MAXGRAD'
464 include 'COMMON.SCCOR'
469 write (iout,*) "sum_gradient gvdwc, gvdwx"
471 write (iout,'(i3,3f10.5,5x,3f10.5,5x,f10.5)')
472 & i,(gvdwx(j,i),j=1,3),(gvdwc(j,i),j=1,3)
477 C FG slaves call the following matching MPI_Bcast in ERGASTULUM
478 if (nfgtasks.gt.1 .and. fg_rank.eq.0)
479 & call MPI_Bcast(1,1,MPI_INTEGER,king,FG_COMM,IERROR)
482 C 9/29/08 AL Transform parts of gradients in site coordinates to the gradient
483 C in virtual-bond-vector coordinates
486 c write (iout,*) "gel_loc gel_loc_long and gel_loc_loc"
488 c write (iout,'(i5,3f10.5,2x,3f10.5,2x,f10.5)')
489 c & i,(gel_loc(j,i),j=1,3),(gel_loc_long(j,i),j=1,3),gel_loc_loc(i)
491 c write (iout,*) "gel_loc_tur3 gel_loc_turn4"
493 c write (iout,'(i5,3f10.5,2x,f10.5)')
494 c & i,(gcorr4_turn(j,i),j=1,3),gel_loc_turn4(i)
496 write (iout,*) "gradcorr5 gradcorr5_long gradcorr5_loc"
498 write (iout,'(i3,3f10.5,5x,3f10.5,5x,f10.5)')
499 & i,(gradcorr5(j,i),j=1,3),(gradcorr5_long(j,i),j=1,3),
507 gradbufc(j,i)=wsc*gvdwc(j,i)+
508 & wscp*(gvdwc_scp(j,i)+gvdwc_scpp(j,i))+
509 & welec*gelc_long(j,i)+wvdwpp*gvdwpp(j,i)+
510 & wel_loc*gel_loc_long(j,i)+
511 & wcorr*gradcorr_long(j,i)+
512 & wcorr5*gradcorr5_long(j,i)+
513 & wcorr6*gradcorr6_long(j,i)+
514 & wturn6*gcorr6_turn_long(j,i)+
521 gradbufc(j,i)=wsc*gvdwc(j,i)+
522 & wscp*(gvdwc_scp(j,i)+gvdwc_scpp(j,i))+
523 & welec*gelc_long(j,i)+
525 & wel_loc*gel_loc_long(j,i)+
526 & wcorr*gradcorr_long(j,i)+
527 & wcorr5*gradcorr5_long(j,i)+
528 & wcorr6*gradcorr6_long(j,i)+
529 & wturn6*gcorr6_turn_long(j,i)+
535 if (nfgtasks.gt.1) then
538 write (iout,*) "gradbufc before allreduce"
540 write (iout,'(i3,3f10.5)') i,(gradbufc(j,i),j=1,3)
546 gradbufc_sum(j,i)=gradbufc(j,i)
549 c call MPI_AllReduce(gradbufc(1,1),gradbufc_sum(1,1),3*nres,
550 c & MPI_DOUBLE_PRECISION,MPI_SUM,FG_COMM,IERR)
551 c time_reduce=time_reduce+MPI_Wtime()-time00
553 c write (iout,*) "gradbufc_sum after allreduce"
555 c write (iout,'(i3,3f10.5)') i,(gradbufc_sum(j,i),j=1,3)
560 c time_allreduce=time_allreduce+MPI_Wtime()-time00
568 write (iout,*) "igrad_start",igrad_start," igrad_end",igrad_end
569 write (iout,*) (i," jgrad_start",jgrad_start(i),
570 & " jgrad_end ",jgrad_end(i),
571 & i=igrad_start,igrad_end)
574 c Obsolete and inefficient code; we can make the effort O(n) and, therefore,
575 c do not parallelize this part.
577 c do i=igrad_start,igrad_end
578 c do j=jgrad_start(i),jgrad_end(i)
580 c gradbufc(k,i)=gradbufc(k,i)+gradbufc_sum(k,j)
585 gradbufc(j,nres-1)=gradbufc_sum(j,nres)
589 gradbufc(j,i)=gradbufc(j,i+1)+gradbufc_sum(j,i+1)
593 write (iout,*) "gradbufc after summing"
595 write (iout,'(i3,3f10.5)') i,(gradbufc(j,i),j=1,3)
602 write (iout,*) "gradbufc"
604 write (iout,'(i3,3f10.5)') i,(gradbufc(j,i),j=1,3)
610 gradbufc_sum(j,i)=gradbufc(j,i)
615 gradbufc(j,nres-1)=gradbufc_sum(j,nres)
619 gradbufc(j,i)=gradbufc(j,i+1)+gradbufc_sum(j,i+1)
624 c gradbufc(k,i)=0.0d0
628 c gradbufc(k,i)=gradbufc(k,i)+gradbufc(k,j)
633 write (iout,*) "gradbufc after summing"
635 write (iout,'(i3,3f10.5)') i,(gradbufc(j,i),j=1,3)
643 gradbufc(k,nres)=0.0d0
648 gradc(j,i,icg)=gradbufc(j,i)+welec*gelc(j,i)+
649 & wel_loc*gel_loc(j,i)+
650 & 0.5d0*(wscp*gvdwc_scpp(j,i)+
651 & welec*gelc_long(j,i)+wvdwpp*gvdwpp(j,i)+
652 & wel_loc*gel_loc_long(j,i)+
653 & wcorr*gradcorr_long(j,i)+
654 & wcorr5*gradcorr5_long(j,i)+
655 & wcorr6*gradcorr6_long(j,i)+
656 & wturn6*gcorr6_turn_long(j,i))+
658 & wcorr*gradcorr(j,i)+
659 & wturn3*gcorr3_turn(j,i)+
660 & wturn4*gcorr4_turn(j,i)+
661 & wcorr5*gradcorr5(j,i)+
662 & wcorr6*gradcorr6(j,i)+
663 & wturn6*gcorr6_turn(j,i)+
664 & wsccor*gsccorc(j,i)
665 & +wscloc*gscloc(j,i)
667 gradc(j,i,icg)=gradbufc(j,i)+welec*gelc(j,i)+
668 & wel_loc*gel_loc(j,i)+
669 & 0.5d0*(wscp*gvdwc_scpp(j,i)+
670 & welec*gelc_long(j,i)
671 & wel_loc*gel_loc_long(j,i)+
672 & wcorr*gcorr_long(j,i)+
673 & wcorr5*gradcorr5_long(j,i)+
674 & wcorr6*gradcorr6_long(j,i)+
675 & wturn6*gcorr6_turn_long(j,i))+
677 & wcorr*gradcorr(j,i)+
678 & wturn3*gcorr3_turn(j,i)+
679 & wturn4*gcorr4_turn(j,i)+
680 & wcorr5*gradcorr5(j,i)+
681 & wcorr6*gradcorr6(j,i)+
682 & wturn6*gcorr6_turn(j,i)+
683 & wsccor*gsccorc(j,i)
684 & +wscloc*gscloc(j,i)
686 gradx(j,i,icg)=wsc*gvdwx(j,i)+wscp*gradx_scp(j,i)+
688 & wstrain*ghpbx(j,i)+wcorr*gradxorr(j,i)+
689 & wsccor*gsccorx(j,i)
690 & +wscloc*gsclocx(j,i)
694 write (iout,*) "gloc before adding corr"
696 write (iout,*) i,gloc(i,icg)
700 gloc(i,icg)=gloc(i,icg)+wcorr*gcorr_loc(i)
701 & +wcorr5*g_corr5_loc(i)
702 & +wcorr6*g_corr6_loc(i)
703 & +wturn4*gel_loc_turn4(i)
704 & +wturn3*gel_loc_turn3(i)
705 & +wturn6*gel_loc_turn6(i)
706 & +wel_loc*gel_loc_loc(i)
709 write (iout,*) "gloc after adding corr"
711 write (iout,*) i,gloc(i,icg)
715 if (nfgtasks.gt.1) then
718 gradbufc(j,i)=gradc(j,i,icg)
719 gradbufx(j,i)=gradx(j,i,icg)
723 glocbuf(i)=gloc(i,icg)
727 write (iout,*) "gloc_sc before reduce"
730 write (iout,*) i,j,gloc_sc(j,i,icg)
737 gloc_scbuf(j,i)=gloc_sc(j,i,icg)
741 call MPI_Barrier(FG_COMM,IERR)
742 time_barrier_g=time_barrier_g+MPI_Wtime()-time00
744 call MPI_Reduce(gradbufc(1,1),gradc(1,1,icg),3*nres,
745 & MPI_DOUBLE_PRECISION,MPI_SUM,king,FG_COMM,IERR)
746 call MPI_Reduce(gradbufx(1,1),gradx(1,1,icg),3*nres,
747 & MPI_DOUBLE_PRECISION,MPI_SUM,king,FG_COMM,IERR)
748 call MPI_Reduce(glocbuf(1),gloc(1,icg),4*nres,
749 & MPI_DOUBLE_PRECISION,MPI_SUM,king,FG_COMM,IERR)
750 time_reduce=time_reduce+MPI_Wtime()-time00
751 call MPI_Reduce(gloc_scbuf(1,1),gloc_sc(1,1,icg),3*nres,
752 & MPI_DOUBLE_PRECISION,MPI_SUM,king,FG_COMM,IERR)
753 time_reduce=time_reduce+MPI_Wtime()-time00
756 write (iout,*) "gloc_sc after reduce"
759 write (iout,*) i,j,gloc_sc(j,i,icg)
765 write (iout,*) "gloc after reduce"
767 write (iout,*) i,gloc(i,icg)
772 if (gnorm_check) then
774 c Compute the maximum elements of the gradient
784 gcorr3_turn_max=0.0d0
785 gcorr4_turn_max=0.0d0
788 gcorr6_turn_max=0.0d0
798 gvdwc_norm=dsqrt(scalar(gvdwc(1,i),gvdwc(1,i)))
799 if (gvdwc_norm.gt.gvdwc_max) gvdwc_max=gvdwc_norm
800 gvdwc_scp_norm=dsqrt(scalar(gvdwc_scp(1,i),gvdwc_scp(1,i)))
801 if (gvdwc_scp_norm.gt.gvdwc_scp_max)
802 & gvdwc_scp_max=gvdwc_scp_norm
803 gelc_norm=dsqrt(scalar(gelc(1,i),gelc(1,i)))
804 if (gelc_norm.gt.gelc_max) gelc_max=gelc_norm
805 gvdwpp_norm=dsqrt(scalar(gvdwpp(1,i),gvdwpp(1,i)))
806 if (gvdwpp_norm.gt.gvdwpp_max) gvdwpp_max=gvdwpp_norm
807 gradb_norm=dsqrt(scalar(gradb(1,i),gradb(1,i)))
808 if (gradb_norm.gt.gradb_max) gradb_max=gradb_norm
809 ghpbc_norm=dsqrt(scalar(ghpbc(1,i),ghpbc(1,i)))
810 if (ghpbc_norm.gt.ghpbc_max) ghpbc_max=ghpbc_norm
811 gradcorr_norm=dsqrt(scalar(gradcorr(1,i),gradcorr(1,i)))
812 if (gradcorr_norm.gt.gradcorr_max) gradcorr_max=gradcorr_norm
813 gel_loc_norm=dsqrt(scalar(gel_loc(1,i),gel_loc(1,i)))
814 if (gel_loc_norm.gt.gel_loc_max) gel_loc_max=gel_loc_norm
815 gcorr3_turn_norm=dsqrt(scalar(gcorr3_turn(1,i),
817 if (gcorr3_turn_norm.gt.gcorr3_turn_max)
818 & gcorr3_turn_max=gcorr3_turn_norm
819 gcorr4_turn_norm=dsqrt(scalar(gcorr4_turn(1,i),
821 if (gcorr4_turn_norm.gt.gcorr4_turn_max)
822 & gcorr4_turn_max=gcorr4_turn_norm
823 gradcorr5_norm=dsqrt(scalar(gradcorr5(1,i),gradcorr5(1,i)))
824 if (gradcorr5_norm.gt.gradcorr5_max)
825 & gradcorr5_max=gradcorr5_norm
826 gradcorr6_norm=dsqrt(scalar(gradcorr6(1,i),gradcorr6(1,i)))
827 if (gradcorr6_norm.gt.gradcorr6_max) gcorr6_max=gradcorr6_norm
828 gcorr6_turn_norm=dsqrt(scalar(gcorr6_turn(1,i),
830 if (gcorr6_turn_norm.gt.gcorr6_turn_max)
831 & gcorr6_turn_max=gcorr6_turn_norm
832 gsccorr_norm=dsqrt(scalar(gsccorc(1,i),gsccorc(1,i)))
833 if (gsccorr_norm.gt.gsccorr_max) gsccorr_max=gsccorr_norm
834 gscloc_norm=dsqrt(scalar(gscloc(1,i),gscloc(1,i)))
835 if (gscloc_norm.gt.gscloc_max) gscloc_max=gscloc_norm
836 gvdwx_norm=dsqrt(scalar(gvdwx(1,i),gvdwx(1,i)))
837 if (gvdwx_norm.gt.gvdwx_max) gvdwx_max=gvdwx_norm
838 gradx_scp_norm=dsqrt(scalar(gradx_scp(1,i),gradx_scp(1,i)))
839 if (gradx_scp_norm.gt.gradx_scp_max)
840 & gradx_scp_max=gradx_scp_norm
841 ghpbx_norm=dsqrt(scalar(ghpbx(1,i),ghpbx(1,i)))
842 if (ghpbx_norm.gt.ghpbx_max) ghpbx_max=ghpbx_norm
843 gradxorr_norm=dsqrt(scalar(gradxorr(1,i),gradxorr(1,i)))
844 if (gradxorr_norm.gt.gradxorr_max) gradxorr_max=gradxorr_norm
845 gsccorrx_norm=dsqrt(scalar(gsccorx(1,i),gsccorx(1,i)))
846 if (gsccorrx_norm.gt.gsccorrx_max) gsccorrx_max=gsccorrx_norm
847 gsclocx_norm=dsqrt(scalar(gsclocx(1,i),gsclocx(1,i)))
848 if (gsclocx_norm.gt.gsclocx_max) gsclocx_max=gsclocx_norm
852 open(istat,file=statname,position="append")
854 open(istat,file=statname,access="append")
856 write (istat,'(1h#,21f10.2)') gvdwc_max,gvdwc_scp_max,
857 & gelc_max,gvdwpp_max,gradb_max,ghpbc_max,
858 & gradcorr_max,gel_loc_max,gcorr3_turn_max,gcorr4_turn_max,
859 & gradcorr5_max,gradcorr6_max,gcorr6_turn_max,gsccorc_max,
860 & gscloc_max,gvdwx_max,gradx_scp_max,ghpbx_max,gradxorr_max,
861 & gsccorx_max,gsclocx_max
863 if (gvdwc_max.gt.1.0d4) then
864 write (iout,*) "gvdwc gvdwx gradb gradbx"
866 write(iout,'(i5,4(3f10.2,5x))') i,(gvdwc(j,i),gvdwx(j,i),
867 & gradb(j,i),gradbx(j,i),j=1,3)
869 call pdbout(0.0d0,'cipiszcze',iout)
875 write (iout,*) "gradc gradx gloc"
877 write (iout,'(i5,3f10.5,5x,3f10.5,5x,f10.5)')
878 & i,(gradc(j,i,icg),j=1,3),(gradx(j,i,icg),j=1,3),gloc(i,icg)
882 time_sumgradient=time_sumgradient+MPI_Wtime()-time01
886 c-------------------------------------------------------------------------------
887 subroutine rescale_weights(t_bath)
888 implicit real*8 (a-h,o-z)
890 include 'COMMON.IOUNITS'
891 include 'COMMON.FFIELD'
892 include 'COMMON.SBRIDGE'
893 double precision kfac /2.4d0/
894 double precision x,x2,x3,x4,x5,licznik /1.12692801104297249644/
896 c facT=2*temp0/(t_bath+temp0)
897 if (rescale_mode.eq.0) then
903 else if (rescale_mode.eq.1) then
904 facT=kfac/(kfac-1.0d0+t_bath/temp0)
905 facT2=kfac**2/(kfac**2-1.0d0+(t_bath/temp0)**2)
906 facT3=kfac**3/(kfac**3-1.0d0+(t_bath/temp0)**3)
907 facT4=kfac**4/(kfac**4-1.0d0+(t_bath/temp0)**4)
908 facT5=kfac**5/(kfac**5-1.0d0+(t_bath/temp0)**5)
909 else if (rescale_mode.eq.2) then
915 facT=licznik/dlog(dexp(x)+dexp(-x))
916 facT2=licznik/dlog(dexp(x2)+dexp(-x2))
917 facT3=licznik/dlog(dexp(x3)+dexp(-x3))
918 facT4=licznik/dlog(dexp(x4)+dexp(-x4))
919 facT5=licznik/dlog(dexp(x5)+dexp(-x5))
921 write (iout,*) "Wrong RESCALE_MODE",rescale_mode
922 write (*,*) "Wrong RESCALE_MODE",rescale_mode
924 call MPI_Finalize(MPI_COMM_WORLD,IERROR)
928 welec=weights(3)*fact
929 wcorr=weights(4)*fact3
930 wcorr5=weights(5)*fact4
931 wcorr6=weights(6)*fact5
932 wel_loc=weights(7)*fact2
933 wturn3=weights(8)*fact2
934 wturn4=weights(9)*fact3
935 wturn6=weights(10)*fact5
936 wtor=weights(13)*fact
937 wtor_d=weights(14)*fact2
938 wsccor=weights(21)*fact
942 C------------------------------------------------------------------------
943 subroutine enerprint(energia)
944 implicit real*8 (a-h,o-z)
946 include 'COMMON.IOUNITS'
947 include 'COMMON.FFIELD'
948 include 'COMMON.SBRIDGE'
950 double precision energia(0:n_ene)
955 evdw2=energia(2)+energia(18)
967 eello_turn3=energia(8)
968 eello_turn4=energia(9)
969 eello_turn6=energia(10)
975 edihcnstr=energia(19)
979 ethetacnstr=energia(24)
981 write (iout,10) evdw,wsc,evdw2,wscp,ees,welec,evdw1,wvdwpp,
982 & estr,wbond,ebe,wang,
983 & escloc,wscloc,etors,wtor,etors_d,wtor_d,ehpb,wstrain,
985 & ecorr5,wcorr5,ecorr6,wcorr6,eel_loc,wel_loc,eello_turn3,wturn3,
986 & eello_turn4,wturn4,eello_turn6,wturn6,esccor,wsccor,
988 & ethetacnstr,ebr*nss,
990 10 format (/'Virtual-chain energies:'//
991 & 'EVDW= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC-SC)'/
992 & 'EVDW2= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC-p)'/
993 & 'EES= ',1pE16.6,' WEIGHT=',1pD16.6,' (p-p)'/
994 & 'EVDWPP=',1pE16.6,' WEIGHT=',1pD16.6,' (p-p VDW)'/
995 & 'ESTR= ',1pE16.6,' WEIGHT=',1pD16.6,' (stretching)'/
996 & 'EBE= ',1pE16.6,' WEIGHT=',1pD16.6,' (bending)'/
997 & 'ESC= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC local)'/
998 & 'ETORS= ',1pE16.6,' WEIGHT=',1pD16.6,' (torsional)'/
999 & 'ETORSD=',1pE16.6,' WEIGHT=',1pD16.6,' (double torsional)'/
1000 & 'EHBP= ',1pE16.6,' WEIGHT=',1pD16.6,
1001 & ' (SS bridges & dist. cnstr.)'/
1002 & 'ECORR4=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
1003 & 'ECORR5=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
1004 & 'ECORR6=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
1005 & 'EELLO= ',1pE16.6,' WEIGHT=',1pD16.6,' (electrostatic-local)'/
1006 & 'ETURN3=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 3rd order)'/
1007 & 'ETURN4=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 4th order)'/
1008 & 'ETURN6=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 6th order)'/
1009 & 'ESCCOR=',1pE16.6,' WEIGHT=',1pD16.6,' (backbone-rotamer corr)'/
1010 & 'EDIHC= ',1pE16.6,' (dihedral angle constraints)'/
1011 & 'ETHETC= ',1pE16.6,' (valence angle constraints)'/
1012 & 'ESS= ',1pE16.6,' (disulfide-bridge intrinsic energy)'/
1013 & 'UCONST= ',1pE16.6,' (Constraint energy)'/
1014 & 'ETOT= ',1pE16.6,' (total)')
1016 write (iout,10) evdw,wsc,evdw2,wscp,ees,welec,
1017 & estr,wbond,ebe,wang,
1018 & escloc,wscloc,etors,wtor,etors_d,wtor_d,ehpb,wstrain,
1020 & ecorr5,wcorr5,ecorr6,wcorr6,eel_loc,wel_loc,eello_turn3,wturn3,
1021 & eello_turn4,wturn4,eello_turn6,wturn6,esccor,wsccro,edihcnstr,
1023 & ebr*nss,Uconst,etot
1024 10 format (/'Virtual-chain energies:'//
1025 & 'EVDW= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC-SC)'/
1026 & 'EVDW2= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC-p)'/
1027 & 'EES= ',1pE16.6,' WEIGHT=',1pD16.6,' (p-p)'/
1028 & 'ESTR= ',1pE16.6,' WEIGHT=',1pD16.6,' (stretching)'/
1029 & 'EBE= ',1pE16.6,' WEIGHT=',1pD16.6,' (bending)'/
1030 & 'ESC= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC local)'/
1031 & 'ETORS= ',1pE16.6,' WEIGHT=',1pD16.6,' (torsional)'/
1032 & 'ETORSD=',1pE16.6,' WEIGHT=',1pD16.6,' (double torsional)'/
1033 & 'EHBP= ',1pE16.6,' WEIGHT=',1pD16.6,
1034 & ' (SS bridges & dist. cnstr.)'/
1035 & 'ECORR4=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
1036 & 'ECORR5=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
1037 & 'ECORR6=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
1038 & 'EELLO= ',1pE16.6,' WEIGHT=',1pD16.6,' (electrostatic-local)'/
1039 & 'ETURN3=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 3rd order)'/
1040 & 'ETURN4=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 4th order)'/
1041 & 'ETURN6=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 6th order)'/
1042 & 'ESCCOR=',1pE16.6,' WEIGHT=',1pD16.6,' (backbone-rotamer corr)'/
1043 & 'EDIHC= ',1pE16.6,' (dihedral angle constraints)'/
1044 & 'ETHETC= ',1pE16.6,' (valence angle constraints)'/
1045 & 'ESS= ',1pE16.6,' (disulfide-bridge intrinsic energy)'/
1046 & 'UCONST=',1pE16.6,' (Constraint energy)'/
1047 & 'ETOT= ',1pE16.6,' (total)')
1051 C-----------------------------------------------------------------------
1052 subroutine elj(evdw)
1054 C This subroutine calculates the interaction energy of nonbonded side chains
1055 C assuming the LJ potential of interaction.
1057 implicit real*8 (a-h,o-z)
1058 include 'DIMENSIONS'
1059 parameter (accur=1.0d-10)
1060 include 'COMMON.GEO'
1061 include 'COMMON.VAR'
1062 include 'COMMON.LOCAL'
1063 include 'COMMON.CHAIN'
1064 include 'COMMON.DERIV'
1065 include 'COMMON.INTERACT'
1066 include 'COMMON.TORSION'
1067 include 'COMMON.SBRIDGE'
1068 include 'COMMON.NAMES'
1069 include 'COMMON.IOUNITS'
1070 include 'COMMON.CONTACTS'
1072 c write(iout,*)'Entering ELJ nnt=',nnt,' nct=',nct,' expon=',expon
1074 do i=iatsc_s,iatsc_e
1075 itypi=iabs(itype(i))
1076 if (itypi.eq.ntyp1) cycle
1077 itypi1=iabs(itype(i+1))
1084 C Calculate SC interaction energy.
1086 do iint=1,nint_gr(i)
1087 cd write (iout,*) 'i=',i,' iint=',iint,' istart=',istart(i,iint),
1088 cd & 'iend=',iend(i,iint)
1089 do j=istart(i,iint),iend(i,iint)
1090 itypj=iabs(itype(j))
1091 if (itypj.eq.ntyp1) cycle
1095 C Change 12/1/95 to calculate four-body interactions
1096 rij=xj*xj+yj*yj+zj*zj
1098 c write (iout,*)'i=',i,' j=',j,' itypi=',itypi,' itypj=',itypj
1099 eps0ij=eps(itypi,itypj)
1101 e1=fac*fac*aa(itypi,itypj)
1102 e2=fac*bb(itypi,itypj)
1104 cd sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
1105 cd epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
1106 cd write (iout,'(2(a3,i3,2x),6(1pd12.4)/2(3(1pd12.4),5x)/)')
1107 cd & restyp(itypi),i,restyp(itypj),j,aa(itypi,itypj),
1108 cd & bb(itypi,itypj),1.0D0/dsqrt(rrij),evdwij,epsi,sigm,
1109 cd & (c(k,i),k=1,3),(c(k,j),k=1,3)
1112 C Calculate the components of the gradient in DC and X
1114 fac=-rrij*(e1+evdwij)
1119 gvdwx(k,i)=gvdwx(k,i)-gg(k)
1120 gvdwx(k,j)=gvdwx(k,j)+gg(k)
1121 gvdwc(k,i)=gvdwc(k,i)-gg(k)
1122 gvdwc(k,j)=gvdwc(k,j)+gg(k)
1126 cgrad gvdwc(l,k)=gvdwc(l,k)+gg(l)
1130 C 12/1/95, revised on 5/20/97
1132 C Calculate the contact function. The ith column of the array JCONT will
1133 C contain the numbers of atoms that make contacts with the atom I (of numbers
1134 C greater than I). The arrays FACONT and GACONT will contain the values of
1135 C the contact function and its derivative.
1137 C Uncomment next line, if the correlation interactions include EVDW explicitly.
1138 c if (j.gt.i+1 .and. evdwij.le.0.0D0) then
1139 C Uncomment next line, if the correlation interactions are contact function only
1140 if (j.gt.i+1.and. eps0ij.gt.0.0D0) then
1142 sigij=sigma(itypi,itypj)
1143 r0ij=rs0(itypi,itypj)
1145 C Check whether the SC's are not too far to make a contact.
1148 call gcont(rij,rcut,1.0d0,0.2d0*rcut,fcont,fprimcont)
1149 C Add a new contact, if the SC's are close enough, but not too close (r<sigma).
1151 if (fcont.gt.0.0D0) then
1152 C If the SC-SC distance if close to sigma, apply spline.
1153 cAdam call gcont(-rij,-1.03d0*sigij,2.0d0*sigij,1.0d0,
1154 cAdam & fcont1,fprimcont1)
1155 cAdam fcont1=1.0d0-fcont1
1156 cAdam if (fcont1.gt.0.0d0) then
1157 cAdam fprimcont=fprimcont*fcont1+fcont*fprimcont1
1158 cAdam fcont=fcont*fcont1
1160 C Uncomment following 4 lines to have the geometric average of the epsilon0's
1161 cga eps0ij=1.0d0/dsqrt(eps0ij)
1163 cga gg(k)=gg(k)*eps0ij
1165 cga eps0ij=-evdwij*eps0ij
1166 C Uncomment for AL's type of SC correlation interactions.
1167 cadam eps0ij=-evdwij
1168 num_conti=num_conti+1
1169 jcont(num_conti,i)=j
1170 facont(num_conti,i)=fcont*eps0ij
1171 fprimcont=eps0ij*fprimcont/rij
1173 cAdam gacont(1,num_conti,i)=-fprimcont*xj+fcont*gg(1)
1174 cAdam gacont(2,num_conti,i)=-fprimcont*yj+fcont*gg(2)
1175 cAdam gacont(3,num_conti,i)=-fprimcont*zj+fcont*gg(3)
1176 C Uncomment following 3 lines for Skolnick's type of SC correlation.
1177 gacont(1,num_conti,i)=-fprimcont*xj
1178 gacont(2,num_conti,i)=-fprimcont*yj
1179 gacont(3,num_conti,i)=-fprimcont*zj
1180 cd write (iout,'(2i5,2f10.5)') i,j,rij,facont(num_conti,i)
1181 cd write (iout,'(2i3,3f10.5)')
1182 cd & i,j,(gacont(kk,num_conti,i),kk=1,3)
1188 num_cont(i)=num_conti
1192 gvdwc(j,i)=expon*gvdwc(j,i)
1193 gvdwx(j,i)=expon*gvdwx(j,i)
1196 C******************************************************************************
1200 C To save time, the factor of EXPON has been extracted from ALL components
1201 C of GVDWC and GRADX. Remember to multiply them by this factor before further
1204 C******************************************************************************
1207 C-----------------------------------------------------------------------------
1208 subroutine eljk(evdw)
1210 C This subroutine calculates the interaction energy of nonbonded side chains
1211 C assuming the LJK potential of interaction.
1213 implicit real*8 (a-h,o-z)
1214 include 'DIMENSIONS'
1215 include 'COMMON.GEO'
1216 include 'COMMON.VAR'
1217 include 'COMMON.LOCAL'
1218 include 'COMMON.CHAIN'
1219 include 'COMMON.DERIV'
1220 include 'COMMON.INTERACT'
1221 include 'COMMON.IOUNITS'
1222 include 'COMMON.NAMES'
1225 c print *,'Entering ELJK nnt=',nnt,' nct=',nct,' expon=',expon
1227 do i=iatsc_s,iatsc_e
1228 itypi=iabs(itype(i))
1229 if (itypi.eq.ntyp1) cycle
1230 itypi1=iabs(itype(i+1))
1235 C Calculate SC interaction energy.
1237 do iint=1,nint_gr(i)
1238 do j=istart(i,iint),iend(i,iint)
1239 itypj=iabs(itype(j))
1240 if (itypj.eq.ntyp1) cycle
1244 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
1245 fac_augm=rrij**expon
1246 e_augm=augm(itypi,itypj)*fac_augm
1247 r_inv_ij=dsqrt(rrij)
1249 r_shift_inv=1.0D0/(rij+r0(itypi,itypj)-sigma(itypi,itypj))
1250 fac=r_shift_inv**expon
1251 e1=fac*fac*aa(itypi,itypj)
1252 e2=fac*bb(itypi,itypj)
1254 cd sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
1255 cd epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
1256 cd write (iout,'(2(a3,i3,2x),8(1pd12.4)/2(3(1pd12.4),5x)/)')
1257 cd & restyp(itypi),i,restyp(itypj),j,aa(itypi,itypj),
1258 cd & bb(itypi,itypj),augm(itypi,itypj),epsi,sigm,
1259 cd & sigma(itypi,itypj),1.0D0/dsqrt(rrij),evdwij,
1260 cd & (c(k,i),k=1,3),(c(k,j),k=1,3)
1263 C Calculate the components of the gradient in DC and X
1265 fac=-2.0D0*rrij*e_augm-r_inv_ij*r_shift_inv*(e1+e1+e2)
1270 gvdwx(k,i)=gvdwx(k,i)-gg(k)
1271 gvdwx(k,j)=gvdwx(k,j)+gg(k)
1272 gvdwc(k,i)=gvdwc(k,i)-gg(k)
1273 gvdwc(k,j)=gvdwc(k,j)+gg(k)
1277 cgrad gvdwc(l,k)=gvdwc(l,k)+gg(l)
1285 gvdwc(j,i)=expon*gvdwc(j,i)
1286 gvdwx(j,i)=expon*gvdwx(j,i)
1291 C-----------------------------------------------------------------------------
1292 subroutine ebp(evdw)
1294 C This subroutine calculates the interaction energy of nonbonded side chains
1295 C assuming the Berne-Pechukas potential of interaction.
1297 implicit real*8 (a-h,o-z)
1298 include 'DIMENSIONS'
1299 include 'COMMON.GEO'
1300 include 'COMMON.VAR'
1301 include 'COMMON.LOCAL'
1302 include 'COMMON.CHAIN'
1303 include 'COMMON.DERIV'
1304 include 'COMMON.NAMES'
1305 include 'COMMON.INTERACT'
1306 include 'COMMON.IOUNITS'
1307 include 'COMMON.CALC'
1308 common /srutu/ icall
1309 c double precision rrsave(maxdim)
1312 c print *,'Entering EBP nnt=',nnt,' nct=',nct,' expon=',expon
1314 c if (icall.eq.0) then
1320 do i=iatsc_s,iatsc_e
1321 itypi=iabs(itype(i))
1322 if (itypi.eq.ntyp1) cycle
1323 itypi1=iabs(itype(i+1))
1327 dxi=dc_norm(1,nres+i)
1328 dyi=dc_norm(2,nres+i)
1329 dzi=dc_norm(3,nres+i)
1330 c dsci_inv=dsc_inv(itypi)
1331 dsci_inv=vbld_inv(i+nres)
1333 C Calculate SC interaction energy.
1335 do iint=1,nint_gr(i)
1336 do j=istart(i,iint),iend(i,iint)
1338 itypj=iabs(itype(j))
1339 if (itypj.eq.ntyp1) cycle
1340 c dscj_inv=dsc_inv(itypj)
1341 dscj_inv=vbld_inv(j+nres)
1342 chi1=chi(itypi,itypj)
1343 chi2=chi(itypj,itypi)
1350 alf12=0.5D0*(alf1+alf2)
1351 C For diagnostics only!!!
1364 dxj=dc_norm(1,nres+j)
1365 dyj=dc_norm(2,nres+j)
1366 dzj=dc_norm(3,nres+j)
1367 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
1368 cd if (icall.eq.0) then
1374 C Calculate the angle-dependent terms of energy & contributions to derivatives.
1376 C Calculate whole angle-dependent part of epsilon and contributions
1377 C to its derivatives
1378 fac=(rrij*sigsq)**expon2
1379 e1=fac*fac*aa(itypi,itypj)
1380 e2=fac*bb(itypi,itypj)
1381 evdwij=eps1*eps2rt*eps3rt*(e1+e2)
1382 eps2der=evdwij*eps3rt
1383 eps3der=evdwij*eps2rt
1384 evdwij=evdwij*eps2rt*eps3rt
1387 sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
1388 epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
1389 cd write (iout,'(2(a3,i3,2x),15(0pf7.3))')
1390 cd & restyp(itypi),i,restyp(itypj),j,
1391 cd & epsi,sigm,chi1,chi2,chip1,chip2,
1392 cd & eps1,eps2rt**2,eps3rt**2,1.0D0/dsqrt(sigsq),
1393 cd & om1,om2,om12,1.0D0/dsqrt(rrij),
1396 C Calculate gradient components.
1397 e1=e1*eps1*eps2rt**2*eps3rt**2
1398 fac=-expon*(e1+evdwij)
1401 C Calculate radial part of the gradient
1405 C Calculate the angular part of the gradient and sum add the contributions
1406 C to the appropriate components of the Cartesian gradient.
1414 C-----------------------------------------------------------------------------
1415 subroutine egb(evdw)
1417 C This subroutine calculates the interaction energy of nonbonded side chains
1418 C assuming the Gay-Berne potential of interaction.
1420 implicit real*8 (a-h,o-z)
1421 include 'DIMENSIONS'
1422 include 'COMMON.GEO'
1423 include 'COMMON.VAR'
1424 include 'COMMON.LOCAL'
1425 include 'COMMON.CHAIN'
1426 include 'COMMON.DERIV'
1427 include 'COMMON.NAMES'
1428 include 'COMMON.INTERACT'
1429 include 'COMMON.IOUNITS'
1430 include 'COMMON.CALC'
1431 include 'COMMON.CONTROL'
1432 include 'COMMON.SBRIDGE'
1435 c write(iout,*) "Jestem w egb(evdw)"
1438 ccccc energy_dec=.false.
1439 c print *,'Entering EGB nnt=',nnt,' nct=',nct,' expon=',expon
1442 c if (icall.eq.0) lprn=.false.
1444 do i=iatsc_s,iatsc_e
1445 itypi=iabs(itype(i))
1446 if (itypi.eq.ntyp1) cycle
1447 itypi1=iabs(itype(i+1))
1451 dxi=dc_norm(1,nres+i)
1452 dyi=dc_norm(2,nres+i)
1453 dzi=dc_norm(3,nres+i)
1454 c dsci_inv=dsc_inv(itypi)
1455 dsci_inv=vbld_inv(i+nres)
1456 c write (iout,*) "i",i,dsc_inv(itypi),dsci_inv,1.0d0/vbld(i+nres)
1457 c write (iout,*) "dcnori",dxi*dxi+dyi*dyi+dzi*dzi
1459 C Calculate SC interaction energy.
1461 do iint=1,nint_gr(i)
1462 do j=istart(i,iint),iend(i,iint)
1463 IF (dyn_ss_mask(i).and.dyn_ss_mask(j)) THEN
1465 c write(iout,*) "PRZED ZWYKLE", evdwij
1466 call dyn_ssbond_ene(i,j,evdwij)
1467 c write(iout,*) "PO ZWYKLE", evdwij
1470 if (energy_dec) write (iout,'(a6,2i5,0pf7.3,a3)')
1471 & 'evdw',i,j,evdwij,' ss'
1472 C triple bond artifac removal
1473 do k=j+1,iend(i,iint)
1474 C search over all next residues
1475 if (dyn_ss_mask(k)) then
1476 C check if they are cysteins
1477 C write(iout,*) 'k=',k
1479 c write(iout,*) "PRZED TRI", evdwij
1480 evdwij_przed_tri=evdwij
1481 call triple_ssbond_ene(i,j,k,evdwij)
1482 c if(evdwij_przed_tri.ne.evdwij) then
1483 c write (iout,*) "TRI:", evdwij, evdwij_przed_tri
1486 c write(iout,*) "PO TRI", evdwij
1487 C call the energy function that removes the artifical triple disulfide
1488 C bond the soubroutine is located in ssMD.F
1490 if (energy_dec) write (iout,'(a6,2i5,0pf7.3,a3)')
1491 & 'evdw',i,j,evdwij,'tss'
1492 endif!dyn_ss_mask(k)
1496 itypj=iabs(itype(j))
1497 if (itypj.eq.ntyp1) cycle
1498 c dscj_inv=dsc_inv(itypj)
1499 dscj_inv=vbld_inv(j+nres)
1500 c write (iout,*) "j",j,dsc_inv(itypj),dscj_inv,
1501 c & 1.0d0/vbld(j+nres)
1502 c write (iout,*) "i",i," j", j," itype",itype(i),itype(j)
1503 sig0ij=sigma(itypi,itypj)
1504 chi1=chi(itypi,itypj)
1505 chi2=chi(itypj,itypi)
1512 alf12=0.5D0*(alf1+alf2)
1513 C For diagnostics only!!!
1526 dxj=dc_norm(1,nres+j)
1527 dyj=dc_norm(2,nres+j)
1528 dzj=dc_norm(3,nres+j)
1529 c write (iout,*) "dcnorj",dxi*dxi+dyi*dyi+dzi*dzi
1530 c write (iout,*) "j",j," dc_norm",
1531 c & dc_norm(1,nres+j),dc_norm(2,nres+j),dc_norm(3,nres+j)
1532 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
1534 C Calculate angle-dependent terms of energy and contributions to their
1538 sig=sig0ij*dsqrt(sigsq)
1539 rij_shift=1.0D0/rij-sig+sig0ij
1540 c for diagnostics; uncomment
1541 c rij_shift=1.2*sig0ij
1542 C I hate to put IF's in the loops, but here don't have another choice!!!!
1543 if (rij_shift.le.0.0D0) then
1545 cd write (iout,'(2(a3,i3,2x),17(0pf7.3))')
1546 cd & restyp(itypi),i,restyp(itypj),j,
1547 cd & rij_shift,1.0D0/rij,sig,sig0ij,sigsq,1-dsqrt(sigsq)
1551 c---------------------------------------------------------------
1552 rij_shift=1.0D0/rij_shift
1553 fac=rij_shift**expon
1554 e1=fac*fac*aa(itypi,itypj)
1555 e2=fac*bb(itypi,itypj)
1556 evdwij=eps1*eps2rt*eps3rt*(e1+e2)
1557 eps2der=evdwij*eps3rt
1558 eps3der=evdwij*eps2rt
1559 c write (iout,*) "sigsq",sigsq," sig",sig," eps2rt",eps2rt,
1560 c & " eps3rt",eps3rt," eps1",eps1," e1",e1," e2",e2
1561 evdwij=evdwij*eps2rt*eps3rt
1564 sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
1565 epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
1566 write (iout,'(2(a3,i3,2x),17(0pf7.3))')
1567 & restyp(itypi),i,restyp(itypj),j,
1568 & epsi,sigm,chi1,chi2,chip1,chip2,
1569 & eps1,eps2rt**2,eps3rt**2,sig,sig0ij,
1570 & om1,om2,om12,1.0D0/rij,1.0D0/rij_shift,
1574 if (energy_dec) write (iout,'(a6,2i5,0pf7.3)')
1577 C Calculate gradient components.
1578 e1=e1*eps1*eps2rt**2*eps3rt**2
1579 fac=-expon*(e1+evdwij)*rij_shift
1583 C Calculate the radial part of the gradient
1587 C Calculate angular part of the gradient.
1593 c write (iout,*) "Number of loop steps in EGB:",ind
1594 cccc energy_dec=.false.
1597 C-----------------------------------------------------------------------------
1598 subroutine egbv(evdw)
1600 C This subroutine calculates the interaction energy of nonbonded side chains
1601 C assuming the Gay-Berne-Vorobjev potential of interaction.
1603 implicit real*8 (a-h,o-z)
1604 include 'DIMENSIONS'
1605 include 'COMMON.GEO'
1606 include 'COMMON.VAR'
1607 include 'COMMON.LOCAL'
1608 include 'COMMON.CHAIN'
1609 include 'COMMON.DERIV'
1610 include 'COMMON.NAMES'
1611 include 'COMMON.INTERACT'
1612 include 'COMMON.IOUNITS'
1613 include 'COMMON.CALC'
1614 common /srutu/ icall
1617 c print *,'Entering EGB nnt=',nnt,' nct=',nct,' expon=',expon
1620 c if (icall.eq.0) lprn=.true.
1622 do i=iatsc_s,iatsc_e
1623 itypi=iabs(itype(i))
1624 if (itypi.eq.ntyp1) cycle
1625 itypi1=iabs(itype(i+1))
1629 dxi=dc_norm(1,nres+i)
1630 dyi=dc_norm(2,nres+i)
1631 dzi=dc_norm(3,nres+i)
1632 c dsci_inv=dsc_inv(itypi)
1633 dsci_inv=vbld_inv(i+nres)
1635 C Calculate SC interaction energy.
1637 do iint=1,nint_gr(i)
1638 do j=istart(i,iint),iend(i,iint)
1640 itypj=iabs(itype(j))
1641 if (itypj.eq.ntyp1) cycle
1642 c dscj_inv=dsc_inv(itypj)
1643 dscj_inv=vbld_inv(j+nres)
1644 sig0ij=sigma(itypi,itypj)
1645 r0ij=r0(itypi,itypj)
1646 chi1=chi(itypi,itypj)
1647 chi2=chi(itypj,itypi)
1654 alf12=0.5D0*(alf1+alf2)
1655 C For diagnostics only!!!
1668 dxj=dc_norm(1,nres+j)
1669 dyj=dc_norm(2,nres+j)
1670 dzj=dc_norm(3,nres+j)
1671 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
1673 C Calculate angle-dependent terms of energy and contributions to their
1677 sig=sig0ij*dsqrt(sigsq)
1678 rij_shift=1.0D0/rij-sig+r0ij
1679 C I hate to put IF's in the loops, but here don't have another choice!!!!
1680 if (rij_shift.le.0.0D0) then
1685 c---------------------------------------------------------------
1686 rij_shift=1.0D0/rij_shift
1687 fac=rij_shift**expon
1688 e1=fac*fac*aa(itypi,itypj)
1689 e2=fac*bb(itypi,itypj)
1690 evdwij=eps1*eps2rt*eps3rt*(e1+e2)
1691 eps2der=evdwij*eps3rt
1692 eps3der=evdwij*eps2rt
1693 fac_augm=rrij**expon
1694 e_augm=augm(itypi,itypj)*fac_augm
1695 evdwij=evdwij*eps2rt*eps3rt
1696 evdw=evdw+evdwij+e_augm
1698 sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
1699 epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
1700 write (iout,'(2(a3,i3,2x),17(0pf7.3))')
1701 & restyp(itypi),i,restyp(itypj),j,
1702 & epsi,sigm,sig,(augm(itypi,itypj)/epsi)**(1.0D0/12.0D0),
1703 & chi1,chi2,chip1,chip2,
1704 & eps1,eps2rt**2,eps3rt**2,
1705 & om1,om2,om12,1.0D0/rij,1.0D0/rij_shift,
1708 C Calculate gradient components.
1709 e1=e1*eps1*eps2rt**2*eps3rt**2
1710 fac=-expon*(e1+evdwij)*rij_shift
1712 fac=rij*fac-2*expon*rrij*e_augm
1713 C Calculate the radial part of the gradient
1717 C Calculate angular part of the gradient.
1723 C-----------------------------------------------------------------------------
1724 subroutine sc_angular
1725 C Calculate eps1,eps2,eps3,sigma, and parts of their derivatives in om1,om2,
1726 C om12. Called by ebp, egb, and egbv.
1728 include 'COMMON.CALC'
1729 include 'COMMON.IOUNITS'
1733 om1=dxi*erij(1)+dyi*erij(2)+dzi*erij(3)
1734 om2=dxj*erij(1)+dyj*erij(2)+dzj*erij(3)
1735 om12=dxi*dxj+dyi*dyj+dzi*dzj
1737 C Calculate eps1(om12) and its derivative in om12
1738 faceps1=1.0D0-om12*chiom12
1739 faceps1_inv=1.0D0/faceps1
1740 eps1=dsqrt(faceps1_inv)
1741 C Following variable is eps1*deps1/dom12
1742 eps1_om12=faceps1_inv*chiom12
1747 c write (iout,*) "om12",om12," eps1",eps1
1748 C Calculate sigma(om1,om2,om12) and the derivatives of sigma**2 in om1,om2,
1753 facsig=om1*chiom1+om2*chiom2-2.0D0*om1om2*chiom12
1754 sigsq=1.0D0-facsig*faceps1_inv
1755 sigsq_om1=(chiom1-chiom12*om2)*faceps1_inv
1756 sigsq_om2=(chiom2-chiom12*om1)*faceps1_inv
1757 sigsq_om12=-chi12*(om1om2*faceps1-om12*facsig)*faceps1_inv**2
1763 c write (iout,*) "chiom1",chiom1," chiom2",chiom2," chiom12",chiom12
1764 c write (iout,*) "faceps1",faceps1," faceps1_inv",faceps1_inv,
1766 C Calculate eps2 and its derivatives in om1, om2, and om12.
1769 chipom12=chip12*om12
1770 facp=1.0D0-om12*chipom12
1772 facp1=om1*chipom1+om2*chipom2-2.0D0*om1om2*chipom12
1773 c write (iout,*) "chipom1",chipom1," chipom2",chipom2,
1774 c & " chipom12",chipom12," facp",facp," facp_inv",facp_inv
1775 C Following variable is the square root of eps2
1776 eps2rt=1.0D0-facp1*facp_inv
1777 C Following three variables are the derivatives of the square root of eps
1778 C in om1, om2, and om12.
1779 eps2rt_om1=-4.0D0*(chipom1-chipom12*om2)*facp_inv
1780 eps2rt_om2=-4.0D0*(chipom2-chipom12*om1)*facp_inv
1781 eps2rt_om12=4.0D0*chip12*(om1om2*facp-om12*facp1)*facp_inv**2
1782 C Evaluate the "asymmetric" factor in the VDW constant, eps3
1783 eps3rt=1.0D0-alf1*om1+alf2*om2-alf12*om12
1784 c write (iout,*) "eps2rt",eps2rt," eps3rt",eps3rt
1785 c write (iout,*) "eps2rt_om1",eps2rt_om1," eps2rt_om2",eps2rt_om2,
1786 c & " eps2rt_om12",eps2rt_om12
1787 C Calculate whole angle-dependent part of epsilon and contributions
1788 C to its derivatives
1791 C----------------------------------------------------------------------------
1793 implicit real*8 (a-h,o-z)
1794 include 'DIMENSIONS'
1795 include 'COMMON.CHAIN'
1796 include 'COMMON.DERIV'
1797 include 'COMMON.CALC'
1798 include 'COMMON.IOUNITS'
1799 double precision dcosom1(3),dcosom2(3)
1800 eom1=eps2der*eps2rt_om1-2.0D0*alf1*eps3der+sigder*sigsq_om1
1801 eom2=eps2der*eps2rt_om2+2.0D0*alf2*eps3der+sigder*sigsq_om2
1802 eom12=evdwij*eps1_om12+eps2der*eps2rt_om12
1803 & -2.0D0*alf12*eps3der+sigder*sigsq_om12
1807 c eom12=evdwij*eps1_om12
1809 c write (iout,*) "eps2der",eps2der," eps3der",eps3der,
1810 c & " sigder",sigder
1811 c write (iout,*) "eps1_om12",eps1_om12," eps2rt_om12",eps2rt_om12
1812 c write (iout,*) "eom1",eom1," eom2",eom2," eom12",eom12
1814 dcosom1(k)=rij*(dc_norm(k,nres+i)-om1*erij(k))
1815 dcosom2(k)=rij*(dc_norm(k,nres+j)-om2*erij(k))
1818 gg(k)=gg(k)+eom1*dcosom1(k)+eom2*dcosom2(k)
1820 c write (iout,*) "gg",(gg(k),k=1,3)
1822 gvdwx(k,i)=gvdwx(k,i)-gg(k)
1823 & +(eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,nres+i))
1824 & +eom1*(erij(k)-om1*dc_norm(k,nres+i)))*dsci_inv
1825 gvdwx(k,j)=gvdwx(k,j)+gg(k)
1826 & +(eom12*(dc_norm(k,nres+i)-om12*dc_norm(k,nres+j))
1827 & +eom2*(erij(k)-om2*dc_norm(k,nres+j)))*dscj_inv
1828 c write (iout,*)(eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,nres+i))
1829 c & +eom1*(erij(k)-om1*dc_norm(k,nres+i)))*dsci_inv
1830 c write (iout,*)(eom12*(dc_norm(k,nres+i)-om12*dc_norm(k,nres+j))
1831 c & +eom2*(erij(k)-om2*dc_norm(k,nres+j)))*dscj_inv
1834 C Calculate the components of the gradient in DC and X
1838 cgrad gvdwc(l,k)=gvdwc(l,k)+gg(l)
1842 gvdwc(l,i)=gvdwc(l,i)-gg(l)
1843 gvdwc(l,j)=gvdwc(l,j)+gg(l)
1847 C-----------------------------------------------------------------------
1848 subroutine e_softsphere(evdw)
1850 C This subroutine calculates the interaction energy of nonbonded side chains
1851 C assuming the LJ potential of interaction.
1853 implicit real*8 (a-h,o-z)
1854 include 'DIMENSIONS'
1855 parameter (accur=1.0d-10)
1856 include 'COMMON.GEO'
1857 include 'COMMON.VAR'
1858 include 'COMMON.LOCAL'
1859 include 'COMMON.CHAIN'
1860 include 'COMMON.DERIV'
1861 include 'COMMON.INTERACT'
1862 include 'COMMON.TORSION'
1863 include 'COMMON.SBRIDGE'
1864 include 'COMMON.NAMES'
1865 include 'COMMON.IOUNITS'
1866 include 'COMMON.CONTACTS'
1868 cd print *,'Entering Esoft_sphere nnt=',nnt,' nct=',nct
1870 do i=iatsc_s,iatsc_e
1871 itypi=iabs(itype(i))
1872 if (itypi.eq.ntyp1) cycle
1873 itypi1=iabs(itype(i+1))
1878 C Calculate SC interaction energy.
1880 do iint=1,nint_gr(i)
1881 cd write (iout,*) 'i=',i,' iint=',iint,' istart=',istart(i,iint),
1882 cd & 'iend=',iend(i,iint)
1883 do j=istart(i,iint),iend(i,iint)
1884 itypj=iabs(itype(j))
1885 if (itypj.eq.ntyp1) cycle
1889 rij=xj*xj+yj*yj+zj*zj
1890 c write (iout,*)'i=',i,' j=',j,' itypi=',itypi,' itypj=',itypj
1891 r0ij=r0(itypi,itypj)
1893 c print *,i,j,r0ij,dsqrt(rij)
1894 if (rij.lt.r0ijsq) then
1895 evdwij=0.25d0*(rij-r0ijsq)**2
1903 C Calculate the components of the gradient in DC and X
1909 gvdwx(k,i)=gvdwx(k,i)-gg(k)
1910 gvdwx(k,j)=gvdwx(k,j)+gg(k)
1911 gvdwc(k,i)=gvdwc(k,i)-gg(k)
1912 gvdwc(k,j)=gvdwc(k,j)+gg(k)
1916 cgrad gvdwc(l,k)=gvdwc(l,k)+gg(l)
1924 C--------------------------------------------------------------------------
1925 subroutine eelec_soft_sphere(ees,evdw1,eel_loc,eello_turn3,
1928 C Soft-sphere potential of p-p interaction
1930 implicit real*8 (a-h,o-z)
1931 include 'DIMENSIONS'
1932 include 'COMMON.CONTROL'
1933 include 'COMMON.IOUNITS'
1934 include 'COMMON.GEO'
1935 include 'COMMON.VAR'
1936 include 'COMMON.LOCAL'
1937 include 'COMMON.CHAIN'
1938 include 'COMMON.DERIV'
1939 include 'COMMON.INTERACT'
1940 include 'COMMON.CONTACTS'
1941 include 'COMMON.TORSION'
1942 include 'COMMON.VECTORS'
1943 include 'COMMON.FFIELD'
1945 cd write(iout,*) 'In EELEC_soft_sphere'
1952 do i=iatel_s,iatel_e
1953 if (itype(i).eq.ntyp1 .or. itype(i+1).eq.ntyp1) cycle
1957 xmedi=c(1,i)+0.5d0*dxi
1958 ymedi=c(2,i)+0.5d0*dyi
1959 zmedi=c(3,i)+0.5d0*dzi
1961 c write (iout,*) 'i',i,' ielstart',ielstart(i),' ielend',ielend(i)
1962 do j=ielstart(i),ielend(i)
1963 if (itype(j).eq.ntyp1 .or. itype(j+1).eq.ntyp1) cycle
1967 if (j.eq.i+2 .and. itelj.eq.2) iteli=2
1968 r0ij=rpp(iteli,itelj)
1973 xj=c(1,j)+0.5D0*dxj-xmedi
1974 yj=c(2,j)+0.5D0*dyj-ymedi
1975 zj=c(3,j)+0.5D0*dzj-zmedi
1976 rij=xj*xj+yj*yj+zj*zj
1977 if (rij.lt.r0ijsq) then
1978 evdw1ij=0.25d0*(rij-r0ijsq)**2
1986 C Calculate contributions to the Cartesian gradient.
1992 gvdwpp(k,i)=gvdwpp(k,i)-ggg(k)
1993 gvdwpp(k,j)=gvdwpp(k,j)+ggg(k)
1996 * Loop over residues i+1 thru j-1.
2000 cgrad gelc(l,k)=gelc(l,k)+ggg(l)
2005 cgrad do i=nnt,nct-1
2007 cgrad gelc(k,i)=gelc(k,i)+0.5d0*gelc(k,i)
2009 cgrad do j=i+1,nct-1
2011 cgrad gelc(k,i)=gelc(k,i)+gelc(k,j)
2017 c------------------------------------------------------------------------------
2018 subroutine vec_and_deriv
2019 implicit real*8 (a-h,o-z)
2020 include 'DIMENSIONS'
2024 include 'COMMON.IOUNITS'
2025 include 'COMMON.GEO'
2026 include 'COMMON.VAR'
2027 include 'COMMON.LOCAL'
2028 include 'COMMON.CHAIN'
2029 include 'COMMON.VECTORS'
2030 include 'COMMON.SETUP'
2031 include 'COMMON.TIME1'
2032 dimension uyder(3,3,2),uzder(3,3,2),vbld_inv_temp(2)
2033 C Compute the local reference systems. For reference system (i), the
2034 C X-axis points from CA(i) to CA(i+1), the Y axis is in the
2035 C CA(i)-CA(i+1)-CA(i+2) plane, and the Z axis is perpendicular to this plane.
2037 do i=ivec_start,ivec_end
2041 if (i.eq.nres-1) then
2042 C Case of the last full residue
2043 C Compute the Z-axis
2044 call vecpr(dc_norm(1,i),dc_norm(1,i-1),uz(1,i))
2045 costh=dcos(pi-theta(nres))
2046 fac=1.0d0/dsqrt(1.0d0-costh*costh)
2050 C Compute the derivatives of uz
2052 uzder(2,1,1)=-dc_norm(3,i-1)
2053 uzder(3,1,1)= dc_norm(2,i-1)
2054 uzder(1,2,1)= dc_norm(3,i-1)
2056 uzder(3,2,1)=-dc_norm(1,i-1)
2057 uzder(1,3,1)=-dc_norm(2,i-1)
2058 uzder(2,3,1)= dc_norm(1,i-1)
2061 uzder(2,1,2)= dc_norm(3,i)
2062 uzder(3,1,2)=-dc_norm(2,i)
2063 uzder(1,2,2)=-dc_norm(3,i)
2065 uzder(3,2,2)= dc_norm(1,i)
2066 uzder(1,3,2)= dc_norm(2,i)
2067 uzder(2,3,2)=-dc_norm(1,i)
2069 C Compute the Y-axis
2072 uy(k,i)=fac*(dc_norm(k,i-1)-costh*dc_norm(k,i))
2074 C Compute the derivatives of uy
2077 uyder(k,j,1)=2*dc_norm(k,i-1)*dc_norm(j,i)
2078 & -dc_norm(k,i)*dc_norm(j,i-1)
2079 uyder(k,j,2)=-dc_norm(j,i)*dc_norm(k,i)
2081 uyder(j,j,1)=uyder(j,j,1)-costh
2082 uyder(j,j,2)=1.0d0+uyder(j,j,2)
2087 uygrad(l,k,j,i)=uyder(l,k,j)
2088 uzgrad(l,k,j,i)=uzder(l,k,j)
2092 call unormderiv(uy(1,i),uyder(1,1,1),facy,uygrad(1,1,1,i))
2093 call unormderiv(uy(1,i),uyder(1,1,2),facy,uygrad(1,1,2,i))
2094 call unormderiv(uz(1,i),uzder(1,1,1),fac,uzgrad(1,1,1,i))
2095 call unormderiv(uz(1,i),uzder(1,1,2),fac,uzgrad(1,1,2,i))
2098 C Compute the Z-axis
2099 call vecpr(dc_norm(1,i),dc_norm(1,i+1),uz(1,i))
2100 costh=dcos(pi-theta(i+2))
2101 fac=1.0d0/dsqrt(1.0d0-costh*costh)
2105 C Compute the derivatives of uz
2107 uzder(2,1,1)=-dc_norm(3,i+1)
2108 uzder(3,1,1)= dc_norm(2,i+1)
2109 uzder(1,2,1)= dc_norm(3,i+1)
2111 uzder(3,2,1)=-dc_norm(1,i+1)
2112 uzder(1,3,1)=-dc_norm(2,i+1)
2113 uzder(2,3,1)= dc_norm(1,i+1)
2116 uzder(2,1,2)= dc_norm(3,i)
2117 uzder(3,1,2)=-dc_norm(2,i)
2118 uzder(1,2,2)=-dc_norm(3,i)
2120 uzder(3,2,2)= dc_norm(1,i)
2121 uzder(1,3,2)= dc_norm(2,i)
2122 uzder(2,3,2)=-dc_norm(1,i)
2124 C Compute the Y-axis
2127 uy(k,i)=facy*(dc_norm(k,i+1)-costh*dc_norm(k,i))
2129 C Compute the derivatives of uy
2132 uyder(k,j,1)=2*dc_norm(k,i+1)*dc_norm(j,i)
2133 & -dc_norm(k,i)*dc_norm(j,i+1)
2134 uyder(k,j,2)=-dc_norm(j,i)*dc_norm(k,i)
2136 uyder(j,j,1)=uyder(j,j,1)-costh
2137 uyder(j,j,2)=1.0d0+uyder(j,j,2)
2142 uygrad(l,k,j,i)=uyder(l,k,j)
2143 uzgrad(l,k,j,i)=uzder(l,k,j)
2147 call unormderiv(uy(1,i),uyder(1,1,1),facy,uygrad(1,1,1,i))
2148 call unormderiv(uy(1,i),uyder(1,1,2),facy,uygrad(1,1,2,i))
2149 call unormderiv(uz(1,i),uzder(1,1,1),fac,uzgrad(1,1,1,i))
2150 call unormderiv(uz(1,i),uzder(1,1,2),fac,uzgrad(1,1,2,i))
2154 vbld_inv_temp(1)=vbld_inv(i+1)
2155 if (i.lt.nres-1) then
2156 vbld_inv_temp(2)=vbld_inv(i+2)
2158 vbld_inv_temp(2)=vbld_inv(i)
2163 uygrad(l,k,j,i)=vbld_inv_temp(j)*uygrad(l,k,j,i)
2164 uzgrad(l,k,j,i)=vbld_inv_temp(j)*uzgrad(l,k,j,i)
2169 #if defined(PARVEC) && defined(MPI)
2170 if (nfgtasks1.gt.1) then
2172 c print *,"Processor",fg_rank1,kolor1," ivec_start",ivec_start,
2173 c & " ivec_displ",(ivec_displ(i),i=0,nfgtasks1-1),
2174 c & " ivec_count",(ivec_count(i),i=0,nfgtasks1-1)
2175 call MPI_Allgatherv(uy(1,ivec_start),ivec_count(fg_rank1),
2176 & MPI_UYZ,uy(1,1),ivec_count(0),ivec_displ(0),MPI_UYZ,
2178 call MPI_Allgatherv(uz(1,ivec_start),ivec_count(fg_rank1),
2179 & MPI_UYZ,uz(1,1),ivec_count(0),ivec_displ(0),MPI_UYZ,
2181 call MPI_Allgatherv(uygrad(1,1,1,ivec_start),
2182 & ivec_count(fg_rank1),MPI_UYZGRAD,uygrad(1,1,1,1),ivec_count(0),
2183 & ivec_displ(0),MPI_UYZGRAD,FG_COMM1,IERR)
2184 call MPI_Allgatherv(uzgrad(1,1,1,ivec_start),
2185 & ivec_count(fg_rank1),MPI_UYZGRAD,uzgrad(1,1,1,1),ivec_count(0),
2186 & ivec_displ(0),MPI_UYZGRAD,FG_COMM1,IERR)
2187 time_gather=time_gather+MPI_Wtime()-time00
2189 c if (fg_rank.eq.0) then
2190 c write (iout,*) "Arrays UY and UZ"
2192 c write (iout,'(i5,3f10.5,5x,3f10.5)') i,(uy(k,i),k=1,3),
2199 C-----------------------------------------------------------------------------
2200 subroutine check_vecgrad
2201 implicit real*8 (a-h,o-z)
2202 include 'DIMENSIONS'
2203 include 'COMMON.IOUNITS'
2204 include 'COMMON.GEO'
2205 include 'COMMON.VAR'
2206 include 'COMMON.LOCAL'
2207 include 'COMMON.CHAIN'
2208 include 'COMMON.VECTORS'
2209 dimension uygradt(3,3,2,maxres),uzgradt(3,3,2,maxres)
2210 dimension uyt(3,maxres),uzt(3,maxres)
2211 dimension uygradn(3,3,2),uzgradn(3,3,2),erij(3)
2212 double precision delta /1.0d-7/
2215 crc write(iout,'(2i5,2(3f10.5,5x))') i,1,dc_norm(:,i)
2216 crc write(iout,'(2i5,2(3f10.5,5x))') i,2,uy(:,i)
2217 crc write(iout,'(2i5,2(3f10.5,5x)/)')i,3,uz(:,i)
2218 cd write(iout,'(2i5,2(3f10.5,5x))') i,1,
2219 cd & (dc_norm(if90,i),if90=1,3)
2220 cd write(iout,'(2i5,2(3f10.5,5x))') i,2,(uy(if90,i),if90=1,3)
2221 cd write(iout,'(2i5,2(3f10.5,5x)/)')i,3,(uz(if90,i),if90=1,3)
2222 cd write(iout,'(a)')
2228 uygradt(l,k,j,i)=uygrad(l,k,j,i)
2229 uzgradt(l,k,j,i)=uzgrad(l,k,j,i)
2242 cd write (iout,*) 'i=',i
2244 erij(k)=dc_norm(k,i)
2248 dc_norm(k,i)=erij(k)
2250 dc_norm(j,i)=dc_norm(j,i)+delta
2251 c fac=dsqrt(scalar(dc_norm(1,i),dc_norm(1,i)))
2253 c dc_norm(k,i)=dc_norm(k,i)/fac
2255 c write (iout,*) (dc_norm(k,i),k=1,3)
2256 c write (iout,*) (erij(k),k=1,3)
2259 uygradn(k,j,1)=(uy(k,i)-uyt(k,i))/delta
2260 uygradn(k,j,2)=(uy(k,i-1)-uyt(k,i-1))/delta
2261 uzgradn(k,j,1)=(uz(k,i)-uzt(k,i))/delta
2262 uzgradn(k,j,2)=(uz(k,i-1)-uzt(k,i-1))/delta
2264 c write (iout,'(i5,3f8.5,3x,3f8.5,5x,3f8.5,3x,3f8.5)')
2265 c & j,(uzgradt(k,j,1,i),k=1,3),(uzgradn(k,j,1),k=1,3),
2266 c & (uzgradt(k,j,2,i-1),k=1,3),(uzgradn(k,j,2),k=1,3)
2269 dc_norm(k,i)=erij(k)
2272 cd write (iout,'(i5,3f8.5,3x,3f8.5,5x,3f8.5,3x,3f8.5)')
2273 cd & k,(uygradt(k,l,1,i),l=1,3),(uygradn(k,l,1),l=1,3),
2274 cd & (uygradt(k,l,2,i-1),l=1,3),(uygradn(k,l,2),l=1,3)
2275 cd write (iout,'(i5,3f8.5,3x,3f8.5,5x,3f8.5,3x,3f8.5)')
2276 cd & k,(uzgradt(k,l,1,i),l=1,3),(uzgradn(k,l,1),l=1,3),
2277 cd & (uzgradt(k,l,2,i-1),l=1,3),(uzgradn(k,l,2),l=1,3)
2278 cd write (iout,'(a)')
2283 C--------------------------------------------------------------------------
2284 subroutine set_matrices
2285 implicit real*8 (a-h,o-z)
2286 include 'DIMENSIONS'
2289 include "COMMON.SETUP"
2291 integer status(MPI_STATUS_SIZE)
2293 include 'COMMON.IOUNITS'
2294 include 'COMMON.GEO'
2295 include 'COMMON.VAR'
2296 include 'COMMON.LOCAL'
2297 include 'COMMON.CHAIN'
2298 include 'COMMON.DERIV'
2299 include 'COMMON.INTERACT'
2300 include 'COMMON.CONTACTS'
2301 include 'COMMON.TORSION'
2302 include 'COMMON.VECTORS'
2303 include 'COMMON.FFIELD'
2304 double precision auxvec(2),auxmat(2,2)
2306 C Compute the virtual-bond-torsional-angle dependent quantities needed
2307 C to calculate the el-loc multibody terms of various order.
2310 do i=ivec_start+2,ivec_end+2
2314 if (i .lt. nres+1) then
2351 if (i .gt. 3 .and. i .lt. nres+1) then
2352 obrot_der(1,i-2)=-sin1
2353 obrot_der(2,i-2)= cos1
2354 Ugder(1,1,i-2)= sin1
2355 Ugder(1,2,i-2)=-cos1
2356 Ugder(2,1,i-2)=-cos1
2357 Ugder(2,2,i-2)=-sin1
2360 obrot2_der(1,i-2)=-dwasin2
2361 obrot2_der(2,i-2)= dwacos2
2362 Ug2der(1,1,i-2)= dwasin2
2363 Ug2der(1,2,i-2)=-dwacos2
2364 Ug2der(2,1,i-2)=-dwacos2
2365 Ug2der(2,2,i-2)=-dwasin2
2367 obrot_der(1,i-2)=0.0d0
2368 obrot_der(2,i-2)=0.0d0
2369 Ugder(1,1,i-2)=0.0d0
2370 Ugder(1,2,i-2)=0.0d0
2371 Ugder(2,1,i-2)=0.0d0
2372 Ugder(2,2,i-2)=0.0d0
2373 obrot2_der(1,i-2)=0.0d0
2374 obrot2_der(2,i-2)=0.0d0
2375 Ug2der(1,1,i-2)=0.0d0
2376 Ug2der(1,2,i-2)=0.0d0
2377 Ug2der(2,1,i-2)=0.0d0
2378 Ug2der(2,2,i-2)=0.0d0
2380 c if (i.gt. iatel_s+2 .and. i.lt.iatel_e+5) then
2381 if (i.gt. nnt+2 .and. i.lt.nct+2) then
2382 iti = itortyp(itype(i-2))
2386 c if (i.gt. iatel_s+1 .and. i.lt.iatel_e+4) then
2387 if (i.gt. nnt+1 .and. i.lt.nct+1) then
2388 iti1 = itortyp(itype(i-1))
2392 cd write (iout,*) '*******i',i,' iti1',iti
2393 cd write (iout,*) 'b1',b1(:,iti)
2394 cd write (iout,*) 'b2',b2(:,iti)
2395 cd write (iout,*) 'Ug',Ug(:,:,i-2)
2396 c if (i .gt. iatel_s+2) then
2397 if (i .gt. nnt+2) then
2398 call matvec2(Ug(1,1,i-2),b2(1,iti),Ub2(1,i-2))
2399 call matmat2(EE(1,1,iti),Ug(1,1,i-2),EUg(1,1,i-2))
2400 if (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0)
2402 call matmat2(CC(1,1,iti),Ug(1,1,i-2),CUg(1,1,i-2))
2403 call matmat2(DD(1,1,iti),Ug(1,1,i-2),DUg(1,1,i-2))
2404 call matmat2(Dtilde(1,1,iti),Ug2(1,1,i-2),DtUg2(1,1,i-2))
2405 call matvec2(Ctilde(1,1,iti1),obrot(1,i-2),Ctobr(1,i-2))
2406 call matvec2(Dtilde(1,1,iti),obrot2(1,i-2),Dtobr2(1,i-2))
2417 DtUg2(l,k,i-2)=0.0d0
2421 call matvec2(Ugder(1,1,i-2),b2(1,iti),Ub2der(1,i-2))
2422 call matmat2(EE(1,1,iti),Ugder(1,1,i-2),EUgder(1,1,i-2))
2424 muder(k,i-2)=Ub2der(k,i-2)
2426 c if (i.gt. iatel_s+1 .and. i.lt.iatel_e+4) then
2427 if (i.gt. nnt+1 .and. i.lt.nct+1) then
2428 if (itype(i-1).le.ntyp) then
2429 iti1 = itortyp(itype(i-1))
2437 mu(k,i-2)=Ub2(k,i-2)+b1(k,iti1)
2439 cd write (iout,*) 'mu ',mu(:,i-2)
2440 cd write (iout,*) 'mu1',mu1(:,i-2)
2441 cd write (iout,*) 'mu2',mu2(:,i-2)
2442 if (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or.wcorr6.gt.0.0d0)
2444 call matmat2(CC(1,1,iti1),Ugder(1,1,i-2),CUgder(1,1,i-2))
2445 call matmat2(DD(1,1,iti),Ugder(1,1,i-2),DUgder(1,1,i-2))
2446 call matmat2(Dtilde(1,1,iti),Ug2der(1,1,i-2),DtUg2der(1,1,i-2))
2447 call matvec2(Ctilde(1,1,iti1),obrot_der(1,i-2),Ctobrder(1,i-2))
2448 call matvec2(Dtilde(1,1,iti),obrot2_der(1,i-2),Dtobr2der(1,i-2))
2449 C Vectors and matrices dependent on a single virtual-bond dihedral.
2450 call matvec2(DD(1,1,iti),b1tilde(1,iti1),auxvec(1))
2451 call matvec2(Ug2(1,1,i-2),auxvec(1),Ug2Db1t(1,i-2))
2452 call matvec2(Ug2der(1,1,i-2),auxvec(1),Ug2Db1tder(1,i-2))
2453 call matvec2(CC(1,1,iti1),Ub2(1,i-2),CUgb2(1,i-2))
2454 call matvec2(CC(1,1,iti1),Ub2der(1,i-2),CUgb2der(1,i-2))
2455 call matmat2(EUg(1,1,i-2),CC(1,1,iti1),EUgC(1,1,i-2))
2456 call matmat2(EUgder(1,1,i-2),CC(1,1,iti1),EUgCder(1,1,i-2))
2457 call matmat2(EUg(1,1,i-2),DD(1,1,iti1),EUgD(1,1,i-2))
2458 call matmat2(EUgder(1,1,i-2),DD(1,1,iti1),EUgDder(1,1,i-2))
2461 C Matrices dependent on two consecutive virtual-bond dihedrals.
2462 C The order of matrices is from left to right.
2463 if (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or.wcorr6.gt.0.0d0)
2465 c do i=max0(ivec_start,2),ivec_end
2467 call matmat2(DtUg2(1,1,i-1),EUg(1,1,i),DtUg2EUg(1,1,i))
2468 call matmat2(DtUg2der(1,1,i-1),EUg(1,1,i),DtUg2EUgder(1,1,1,i))
2469 call matmat2(DtUg2(1,1,i-1),EUgder(1,1,i),DtUg2EUgder(1,1,2,i))
2470 call transpose2(DtUg2(1,1,i-1),auxmat(1,1))
2471 call matmat2(auxmat(1,1),EUg(1,1,i),Ug2DtEUg(1,1,i))
2472 call matmat2(auxmat(1,1),EUgder(1,1,i),Ug2DtEUgder(1,1,2,i))
2473 call transpose2(DtUg2der(1,1,i-1),auxmat(1,1))
2474 call matmat2(auxmat(1,1),EUg(1,1,i),Ug2DtEUgder(1,1,1,i))
2477 #if defined(MPI) && defined(PARMAT)
2479 c if (fg_rank.eq.0) then
2480 write (iout,*) "Arrays UG and UGDER before GATHER"
2482 write (iout,'(i5,4f10.5,5x,4f10.5)') i,
2483 & ((ug(l,k,i),l=1,2),k=1,2),
2484 & ((ugder(l,k,i),l=1,2),k=1,2)
2486 write (iout,*) "Arrays UG2 and UG2DER"
2488 write (iout,'(i5,4f10.5,5x,4f10.5)') i,
2489 & ((ug2(l,k,i),l=1,2),k=1,2),
2490 & ((ug2der(l,k,i),l=1,2),k=1,2)
2492 write (iout,*) "Arrays OBROT OBROT2 OBROTDER and OBROT2DER"
2494 write (iout,'(i5,4f10.5,5x,4f10.5)') i,
2495 & (obrot(k,i),k=1,2),(obrot2(k,i),k=1,2),
2496 & (obrot_der(k,i),k=1,2),(obrot2_der(k,i),k=1,2)
2498 write (iout,*) "Arrays COSTAB SINTAB COSTAB2 and SINTAB2"
2500 write (iout,'(i5,4f10.5,5x,4f10.5)') i,
2501 & costab(i),sintab(i),costab2(i),sintab2(i)
2503 write (iout,*) "Array MUDER"
2505 write (iout,'(i5,2f10.5)') i,muder(1,i),muder(2,i)
2509 if (nfgtasks.gt.1) then
2511 c write(iout,*)"Processor",fg_rank,kolor," ivec_start",ivec_start,
2512 c & " ivec_displ",(ivec_displ(i),i=0,nfgtasks-1),
2513 c & " ivec_count",(ivec_count(i),i=0,nfgtasks-1)
2515 call MPI_Allgatherv(Ub2(1,ivec_start),ivec_count(fg_rank1),
2516 & MPI_MU,Ub2(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2518 call MPI_Allgatherv(Ub2der(1,ivec_start),ivec_count(fg_rank1),
2519 & MPI_MU,Ub2der(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2521 call MPI_Allgatherv(mu(1,ivec_start),ivec_count(fg_rank1),
2522 & MPI_MU,mu(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2524 call MPI_Allgatherv(muder(1,ivec_start),ivec_count(fg_rank1),
2525 & MPI_MU,muder(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2527 call MPI_Allgatherv(Eug(1,1,ivec_start),ivec_count(fg_rank1),
2528 & MPI_MAT1,Eug(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2530 call MPI_Allgatherv(Eugder(1,1,ivec_start),ivec_count(fg_rank1),
2531 & MPI_MAT1,Eugder(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2533 call MPI_Allgatherv(costab(ivec_start),ivec_count(fg_rank1),
2534 & MPI_DOUBLE_PRECISION,costab(1),ivec_count(0),ivec_displ(0),
2535 & MPI_DOUBLE_PRECISION,FG_COMM1,IERR)
2536 call MPI_Allgatherv(sintab(ivec_start),ivec_count(fg_rank1),
2537 & MPI_DOUBLE_PRECISION,sintab(1),ivec_count(0),ivec_displ(0),
2538 & MPI_DOUBLE_PRECISION,FG_COMM1,IERR)
2539 call MPI_Allgatherv(costab2(ivec_start),ivec_count(fg_rank1),
2540 & MPI_DOUBLE_PRECISION,costab2(1),ivec_count(0),ivec_displ(0),
2541 & MPI_DOUBLE_PRECISION,FG_COMM1,IERR)
2542 call MPI_Allgatherv(sintab2(ivec_start),ivec_count(fg_rank1),
2543 & MPI_DOUBLE_PRECISION,sintab2(1),ivec_count(0),ivec_displ(0),
2544 & MPI_DOUBLE_PRECISION,FG_COMM1,IERR)
2545 if (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0)
2547 call MPI_Allgatherv(Ctobr(1,ivec_start),ivec_count(fg_rank1),
2548 & MPI_MU,Ctobr(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2550 call MPI_Allgatherv(Ctobrder(1,ivec_start),ivec_count(fg_rank1),
2551 & MPI_MU,Ctobrder(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2553 call MPI_Allgatherv(Dtobr2(1,ivec_start),ivec_count(fg_rank1),
2554 & MPI_MU,Dtobr2(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2556 call MPI_Allgatherv(Dtobr2der(1,ivec_start),ivec_count(fg_rank1),
2557 & MPI_MU,Dtobr2der(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2559 call MPI_Allgatherv(Ug2Db1t(1,ivec_start),ivec_count(fg_rank1),
2560 & MPI_MU,Ug2Db1t(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2562 call MPI_Allgatherv(Ug2Db1tder(1,ivec_start),
2563 & ivec_count(fg_rank1),
2564 & MPI_MU,Ug2Db1tder(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2566 call MPI_Allgatherv(CUgb2(1,ivec_start),ivec_count(fg_rank1),
2567 & MPI_MU,CUgb2(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2569 call MPI_Allgatherv(CUgb2der(1,ivec_start),ivec_count(fg_rank1),
2570 & MPI_MU,CUgb2der(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
2572 call MPI_Allgatherv(Cug(1,1,ivec_start),ivec_count(fg_rank1),
2573 & MPI_MAT1,Cug(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2575 call MPI_Allgatherv(Cugder(1,1,ivec_start),ivec_count(fg_rank1),
2576 & MPI_MAT1,Cugder(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2578 call MPI_Allgatherv(Dug(1,1,ivec_start),ivec_count(fg_rank1),
2579 & MPI_MAT1,Dug(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2581 call MPI_Allgatherv(Dugder(1,1,ivec_start),ivec_count(fg_rank1),
2582 & MPI_MAT1,Dugder(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2584 call MPI_Allgatherv(Dtug2(1,1,ivec_start),ivec_count(fg_rank1),
2585 & MPI_MAT1,Dtug2(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2587 call MPI_Allgatherv(Dtug2der(1,1,ivec_start),
2588 & ivec_count(fg_rank1),
2589 & MPI_MAT1,Dtug2der(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2591 call MPI_Allgatherv(EugC(1,1,ivec_start),ivec_count(fg_rank1),
2592 & MPI_MAT1,EugC(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2594 call MPI_Allgatherv(EugCder(1,1,ivec_start),ivec_count(fg_rank1),
2595 & MPI_MAT1,EugCder(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2597 call MPI_Allgatherv(EugD(1,1,ivec_start),ivec_count(fg_rank1),
2598 & MPI_MAT1,EugD(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2600 call MPI_Allgatherv(EugDder(1,1,ivec_start),ivec_count(fg_rank1),
2601 & MPI_MAT1,EugDder(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2603 call MPI_Allgatherv(DtUg2EUg(1,1,ivec_start),
2604 & ivec_count(fg_rank1),
2605 & MPI_MAT1,DtUg2EUg(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2607 call MPI_Allgatherv(Ug2DtEUg(1,1,ivec_start),
2608 & ivec_count(fg_rank1),
2609 & MPI_MAT1,Ug2DtEUg(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
2611 call MPI_Allgatherv(DtUg2EUgder(1,1,1,ivec_start),
2612 & ivec_count(fg_rank1),
2613 & MPI_MAT2,DtUg2EUgder(1,1,1,1),ivec_count(0),ivec_displ(0),
2614 & MPI_MAT2,FG_COMM1,IERR)
2615 call MPI_Allgatherv(Ug2DtEUgder(1,1,1,ivec_start),
2616 & ivec_count(fg_rank1),
2617 & MPI_MAT2,Ug2DtEUgder(1,1,1,1),ivec_count(0),ivec_displ(0),
2618 & MPI_MAT2,FG_COMM1,IERR)
2621 c Passes matrix info through the ring
2624 if (irecv.lt.0) irecv=nfgtasks1-1
2627 if (inext.ge.nfgtasks1) inext=0
2629 c write (iout,*) "isend",isend," irecv",irecv
2631 lensend=lentyp(isend)
2632 lenrecv=lentyp(irecv)
2633 c write (iout,*) "lensend",lensend," lenrecv",lenrecv
2634 c call MPI_SENDRECV(ug(1,1,ivec_displ(isend)+1),1,
2635 c & MPI_ROTAT1(lensend),inext,2200+isend,
2636 c & ug(1,1,ivec_displ(irecv)+1),1,MPI_ROTAT1(lenrecv),
2637 c & iprev,2200+irecv,FG_COMM,status,IERR)
2638 c write (iout,*) "Gather ROTAT1"
2640 c call MPI_SENDRECV(obrot(1,ivec_displ(isend)+1),1,
2641 c & MPI_ROTAT2(lensend),inext,3300+isend,
2642 c & obrot(1,ivec_displ(irecv)+1),1,MPI_ROTAT2(lenrecv),
2643 c & iprev,3300+irecv,FG_COMM,status,IERR)
2644 c write (iout,*) "Gather ROTAT2"
2646 call MPI_SENDRECV(costab(ivec_displ(isend)+1),1,
2647 & MPI_ROTAT_OLD(lensend),inext,4400+isend,
2648 & costab(ivec_displ(irecv)+1),1,MPI_ROTAT_OLD(lenrecv),
2649 & iprev,4400+irecv,FG_COMM,status,IERR)
2650 c write (iout,*) "Gather ROTAT_OLD"
2652 call MPI_SENDRECV(mu(1,ivec_displ(isend)+1),1,
2653 & MPI_PRECOMP11(lensend),inext,5500+isend,
2654 & mu(1,ivec_displ(irecv)+1),1,MPI_PRECOMP11(lenrecv),
2655 & iprev,5500+irecv,FG_COMM,status,IERR)
2656 c write (iout,*) "Gather PRECOMP11"
2658 call MPI_SENDRECV(Eug(1,1,ivec_displ(isend)+1),1,
2659 & MPI_PRECOMP12(lensend),inext,6600+isend,
2660 & Eug(1,1,ivec_displ(irecv)+1),1,MPI_PRECOMP12(lenrecv),
2661 & iprev,6600+irecv,FG_COMM,status,IERR)
2662 c write (iout,*) "Gather PRECOMP12"
2664 if (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0)
2666 call MPI_SENDRECV(ug2db1t(1,ivec_displ(isend)+1),1,
2667 & MPI_ROTAT2(lensend),inext,7700+isend,
2668 & ug2db1t(1,ivec_displ(irecv)+1),1,MPI_ROTAT2(lenrecv),
2669 & iprev,7700+irecv,FG_COMM,status,IERR)
2670 c write (iout,*) "Gather PRECOMP21"
2672 call MPI_SENDRECV(EUgC(1,1,ivec_displ(isend)+1),1,
2673 & MPI_PRECOMP22(lensend),inext,8800+isend,
2674 & EUgC(1,1,ivec_displ(irecv)+1),1,MPI_PRECOMP22(lenrecv),
2675 & iprev,8800+irecv,FG_COMM,status,IERR)
2676 c write (iout,*) "Gather PRECOMP22"
2678 call MPI_SENDRECV(Ug2DtEUgder(1,1,1,ivec_displ(isend)+1),1,
2679 & MPI_PRECOMP23(lensend),inext,9900+isend,
2680 & Ug2DtEUgder(1,1,1,ivec_displ(irecv)+1),1,
2681 & MPI_PRECOMP23(lenrecv),
2682 & iprev,9900+irecv,FG_COMM,status,IERR)
2683 c write (iout,*) "Gather PRECOMP23"
2688 if (irecv.lt.0) irecv=nfgtasks1-1
2691 time_gather=time_gather+MPI_Wtime()-time00
2694 c if (fg_rank.eq.0) then
2695 write (iout,*) "Arrays UG and UGDER"
2697 write (iout,'(i5,4f10.5,5x,4f10.5)') i,
2698 & ((ug(l,k,i),l=1,2),k=1,2),
2699 & ((ugder(l,k,i),l=1,2),k=1,2)
2701 write (iout,*) "Arrays UG2 and UG2DER"
2703 write (iout,'(i5,4f10.5,5x,4f10.5)') i,
2704 & ((ug2(l,k,i),l=1,2),k=1,2),
2705 & ((ug2der(l,k,i),l=1,2),k=1,2)
2707 write (iout,*) "Arrays OBROT OBROT2 OBROTDER and OBROT2DER"
2709 write (iout,'(i5,4f10.5,5x,4f10.5)') i,
2710 & (obrot(k,i),k=1,2),(obrot2(k,i),k=1,2),
2711 & (obrot_der(k,i),k=1,2),(obrot2_der(k,i),k=1,2)
2713 write (iout,*) "Arrays COSTAB SINTAB COSTAB2 and SINTAB2"
2715 write (iout,'(i5,4f10.5,5x,4f10.5)') i,
2716 & costab(i),sintab(i),costab2(i),sintab2(i)
2718 write (iout,*) "Array MUDER"
2720 write (iout,'(i5,2f10.5)') i,muder(1,i),muder(2,i)
2726 cd iti = itortyp(itype(i))
2729 cd write (iout,'(2f10.5,5x,2f10.5,5x,2f10.5)')
2730 cd & (EE(j,k,iti),k=1,2),(Ug(j,k,i),k=1,2),(EUg(j,k,i),k=1,2)
2735 C--------------------------------------------------------------------------
2736 subroutine eelec(ees,evdw1,eel_loc,eello_turn3,eello_turn4)
2738 C This subroutine calculates the average interaction energy and its gradient
2739 C in the virtual-bond vectors between non-adjacent peptide groups, based on
2740 C the potential described in Liwo et al., Protein Sci., 1993, 2, 1715.
2741 C The potential depends both on the distance of peptide-group centers and on
2742 C the orientation of the CA-CA virtual bonds.
2744 implicit real*8 (a-h,o-z)
2748 include 'DIMENSIONS'
2749 include 'COMMON.CONTROL'
2750 include 'COMMON.SETUP'
2751 include 'COMMON.IOUNITS'
2752 include 'COMMON.GEO'
2753 include 'COMMON.VAR'
2754 include 'COMMON.LOCAL'
2755 include 'COMMON.CHAIN'
2756 include 'COMMON.DERIV'
2757 include 'COMMON.INTERACT'
2758 include 'COMMON.CONTACTS'
2759 include 'COMMON.TORSION'
2760 include 'COMMON.VECTORS'
2761 include 'COMMON.FFIELD'
2762 include 'COMMON.TIME1'
2763 dimension ggg(3),gggp(3),gggm(3),erij(3),dcosb(3),dcosg(3),
2764 & erder(3,3),uryg(3,3),urzg(3,3),vryg(3,3),vrzg(3,3)
2765 double precision acipa(2,2),agg(3,4),aggi(3,4),aggi1(3,4),
2766 & aggj(3,4),aggj1(3,4),a_temp(2,2),muij(4)
2767 common /locel/ a_temp,agg,aggi,aggi1,aggj,aggj1,a22,a23,a32,a33,
2768 & dxi,dyi,dzi,dx_normi,dy_normi,dz_normi,xmedi,ymedi,zmedi,
2770 c 4/26/02 - AL scaling factor for 1,4 repulsive VDW interactions
2772 double precision scal_el /1.0d0/
2774 double precision scal_el /0.5d0/
2777 C 13-go grudnia roku pamietnego...
2778 double precision unmat(3,3) /1.0d0,0.0d0,0.0d0,
2779 & 0.0d0,1.0d0,0.0d0,
2780 & 0.0d0,0.0d0,1.0d0/
2781 cd write(iout,*) 'In EELEC'
2783 cd write(iout,*) 'Type',i
2784 cd write(iout,*) 'B1',B1(:,i)
2785 cd write(iout,*) 'B2',B2(:,i)
2786 cd write(iout,*) 'CC',CC(:,:,i)
2787 cd write(iout,*) 'DD',DD(:,:,i)
2788 cd write(iout,*) 'EE',EE(:,:,i)
2790 cd call check_vecgrad
2792 if (icheckgrad.eq.1) then
2794 fac=1.0d0/dsqrt(scalar(dc(1,i),dc(1,i)))
2796 dc_norm(k,i)=dc(k,i)*fac
2798 c write (iout,*) 'i',i,' fac',fac
2801 if (wel_loc.gt.0.0d0 .or. wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0
2802 & .or. wcorr6.gt.0.0d0 .or. wturn3.gt.0.0d0 .or.
2803 & wturn4.gt.0.0d0 .or. wturn6.gt.0.0d0) then
2804 c call vec_and_deriv
2810 time_mat=time_mat+MPI_Wtime()-time01
2814 cd write (iout,*) 'i=',i
2816 cd write (iout,'(i5,2f10.5)') k,uy(k,i),uz(k,i)
2819 cd write (iout,'(f10.5,2x,3f10.5,2x,3f10.5)')
2820 cd & uz(k,i),(uzgrad(k,l,1,i),l=1,3),(uzgrad(k,l,2,i),l=1,3)
2833 cd print '(a)','Enter EELEC'
2834 cd write (iout,*) 'iatel_s=',iatel_s,' iatel_e=',iatel_e
2836 gel_loc_loc(i)=0.0d0
2841 c 9/27/08 AL Split the interaction loop to ensure load balancing of turn terms
2843 C Loop over i,i+2 and i,i+3 pairs of the peptide groups
2845 do i=iturn3_start,iturn3_end
2846 if (itype(i).eq.ntyp1 .or. itype(i+1).eq.ntyp1
2847 & .or. itype(i+2).eq.ntyp1 .or. itype(i+3).eq.ntyp1) cycle
2851 dx_normi=dc_norm(1,i)
2852 dy_normi=dc_norm(2,i)
2853 dz_normi=dc_norm(3,i)
2854 xmedi=c(1,i)+0.5d0*dxi
2855 ymedi=c(2,i)+0.5d0*dyi
2856 zmedi=c(3,i)+0.5d0*dzi
2858 call eelecij(i,i+2,ees,evdw1,eel_loc)
2859 if (wturn3.gt.0.0d0) call eturn3(i,eello_turn3)
2860 num_cont_hb(i)=num_conti
2862 do i=iturn4_start,iturn4_end
2863 if (itype(i).eq.ntyp1 .or. itype(i+1).eq.ntyp1
2864 & .or. itype(i+3).eq.ntyp1
2865 & .or. itype(i+4).eq.ntyp1) cycle
2869 dx_normi=dc_norm(1,i)
2870 dy_normi=dc_norm(2,i)
2871 dz_normi=dc_norm(3,i)
2872 xmedi=c(1,i)+0.5d0*dxi
2873 ymedi=c(2,i)+0.5d0*dyi
2874 zmedi=c(3,i)+0.5d0*dzi
2875 num_conti=num_cont_hb(i)
2876 call eelecij(i,i+3,ees,evdw1,eel_loc)
2877 if (wturn4.gt.0.0d0 .and. itype(i+2).ne.ntyp1)
2878 & call eturn4(i,eello_turn4)
2879 num_cont_hb(i)=num_conti
2882 c Loop over all pairs of interacting peptide groups except i,i+2 and i,i+3
2884 do i=iatel_s,iatel_e
2885 if (itype(i).eq.ntyp1 .or. itype(i+1).eq.ntyp1) cycle
2889 dx_normi=dc_norm(1,i)
2890 dy_normi=dc_norm(2,i)
2891 dz_normi=dc_norm(3,i)
2892 xmedi=c(1,i)+0.5d0*dxi
2893 ymedi=c(2,i)+0.5d0*dyi
2894 zmedi=c(3,i)+0.5d0*dzi
2895 c write (iout,*) 'i',i,' ielstart',ielstart(i),' ielend',ielend(i)
2896 num_conti=num_cont_hb(i)
2897 do j=ielstart(i),ielend(i)
2898 c write (iout,*) i,j,itype(i),itype(j)
2899 if (itype(j).eq.ntyp1.or. itype(j+1).eq.ntyp1) cycle
2900 call eelecij(i,j,ees,evdw1,eel_loc)
2902 num_cont_hb(i)=num_conti
2904 c write (iout,*) "Number of loop steps in EELEC:",ind
2906 cd write (iout,'(i3,3f10.5,5x,3f10.5)')
2907 cd & i,(gel_loc(k,i),k=1,3),gel_loc_loc(i)
2909 c 12/7/99 Adam eello_turn3 will be considered as a separate energy term
2910 ccc eel_loc=eel_loc+eello_turn3
2911 cd print *,"Processor",fg_rank," t_eelecij",t_eelecij
2914 C-------------------------------------------------------------------------------
2915 subroutine eelecij(i,j,ees,evdw1,eel_loc)
2916 implicit real*8 (a-h,o-z)
2917 include 'DIMENSIONS'
2921 include 'COMMON.CONTROL'
2922 include 'COMMON.IOUNITS'
2923 include 'COMMON.GEO'
2924 include 'COMMON.VAR'
2925 include 'COMMON.LOCAL'
2926 include 'COMMON.CHAIN'
2927 include 'COMMON.DERIV'
2928 include 'COMMON.INTERACT'
2929 include 'COMMON.CONTACTS'
2930 include 'COMMON.TORSION'
2931 include 'COMMON.VECTORS'
2932 include 'COMMON.FFIELD'
2933 include 'COMMON.TIME1'
2934 dimension ggg(3),gggp(3),gggm(3),erij(3),dcosb(3),dcosg(3),
2935 & erder(3,3),uryg(3,3),urzg(3,3),vryg(3,3),vrzg(3,3)
2936 double precision acipa(2,2),agg(3,4),aggi(3,4),aggi1(3,4),
2937 & aggj(3,4),aggj1(3,4),a_temp(2,2),muij(4)
2938 common /locel/ a_temp,agg,aggi,aggi1,aggj,aggj1,a22,a23,a32,a33,
2939 & dxi,dyi,dzi,dx_normi,dy_normi,dz_normi,xmedi,ymedi,zmedi,
2941 c 4/26/02 - AL scaling factor for 1,4 repulsive VDW interactions
2943 double precision scal_el /1.0d0/
2945 double precision scal_el /0.5d0/
2948 C 13-go grudnia roku pamietnego...
2949 double precision unmat(3,3) /1.0d0,0.0d0,0.0d0,
2950 & 0.0d0,1.0d0,0.0d0,
2951 & 0.0d0,0.0d0,1.0d0/
2952 c time00=MPI_Wtime()
2953 cd write (iout,*) "eelecij",i,j
2957 if (j.eq.i+2 .and. itelj.eq.2) iteli=2
2958 aaa=app(iteli,itelj)
2959 bbb=bpp(iteli,itelj)
2960 ael6i=ael6(iteli,itelj)
2961 ael3i=ael3(iteli,itelj)
2965 dx_normj=dc_norm(1,j)
2966 dy_normj=dc_norm(2,j)
2967 dz_normj=dc_norm(3,j)
2968 xj=c(1,j)+0.5D0*dxj-xmedi
2969 yj=c(2,j)+0.5D0*dyj-ymedi
2970 zj=c(3,j)+0.5D0*dzj-zmedi
2971 rij=xj*xj+yj*yj+zj*zj
2977 cosa=dx_normi*dx_normj+dy_normi*dy_normj+dz_normi*dz_normj
2978 cosb=(xj*dx_normi+yj*dy_normi+zj*dz_normi)*rmij
2979 cosg=(xj*dx_normj+yj*dy_normj+zj*dz_normj)*rmij
2980 fac=cosa-3.0D0*cosb*cosg
2982 c 4/26/02 - AL scaling down 1,4 repulsive VDW interactions
2983 if (j.eq.i+2) ev1=scal_el*ev1
2988 el1=fac3*(4.0D0+fac*fac-3.0D0*(cosb*cosb+cosg*cosg))
2991 C 12/26/95 - for the evaluation of multi-body H-bonding interactions
2992 ees0ij=4.0D0+fac*fac-3.0D0*(cosb*cosb+cosg*cosg)
2995 cd write(iout,'(2(2i3,2x),7(1pd12.4)/2(3(1pd12.4),5x)/)')
2996 cd & iteli,i,itelj,j,aaa,bbb,ael6i,ael3i,
2997 cd & 1.0D0/dsqrt(rrmij),evdwij,eesij,
2998 cd & xmedi,ymedi,zmedi,xj,yj,zj
3000 if (energy_dec) then
3001 write (iout,'(a6,2i5,0pf7.3,2i5,2e11.3)')
3003 &,iteli,itelj,aaa,evdw1
3004 write (iout,'(a6,2i5,0pf7.3)') 'ees',i,j,eesij
3008 C Calculate contributions to the Cartesian gradient.
3011 facvdw=-6*rrmij*(ev1+evdwij)
3012 facel=-3*rrmij*(el1+eesij)
3018 * Radial derivatives. First process both termini of the fragment (i,j)
3024 c ghalf=0.5D0*ggg(k)
3025 c gelc(k,i)=gelc(k,i)+ghalf
3026 c gelc(k,j)=gelc(k,j)+ghalf
3028 c 9/28/08 AL Gradient compotents will be summed only at the end
3030 gelc_long(k,j)=gelc_long(k,j)+ggg(k)
3031 gelc_long(k,i)=gelc_long(k,i)-ggg(k)
3034 * Loop over residues i+1 thru j-1.
3038 cgrad gelc(l,k)=gelc(l,k)+ggg(l)
3045 c ghalf=0.5D0*ggg(k)
3046 c gvdwpp(k,i)=gvdwpp(k,i)+ghalf
3047 c gvdwpp(k,j)=gvdwpp(k,j)+ghalf
3049 c 9/28/08 AL Gradient compotents will be summed only at the end
3051 gvdwpp(k,j)=gvdwpp(k,j)+ggg(k)
3052 gvdwpp(k,i)=gvdwpp(k,i)-ggg(k)
3055 * Loop over residues i+1 thru j-1.
3059 cgrad gvdwpp(l,k)=gvdwpp(l,k)+ggg(l)
3066 fac=-3*rrmij*(facvdw+facvdw+facel)
3071 * Radial derivatives. First process both termini of the fragment (i,j)
3077 c ghalf=0.5D0*ggg(k)
3078 c gelc(k,i)=gelc(k,i)+ghalf
3079 c gelc(k,j)=gelc(k,j)+ghalf
3081 c 9/28/08 AL Gradient compotents will be summed only at the end
3083 gelc_long(k,j)=gelc(k,j)+ggg(k)
3084 gelc_long(k,i)=gelc(k,i)-ggg(k)
3087 * Loop over residues i+1 thru j-1.
3091 cgrad gelc(l,k)=gelc(l,k)+ggg(l)
3094 c 9/28/08 AL Gradient compotents will be summed only at the end
3099 gvdwpp(k,j)=gvdwpp(k,j)+ggg(k)
3100 gvdwpp(k,i)=gvdwpp(k,i)-ggg(k)
3106 ecosa=2.0D0*fac3*fac1+fac4
3109 ecosb=(fac3*(fac1*cosg+cosb)+cosg*fac4)
3110 ecosg=(fac3*(fac1*cosb+cosg)+cosb*fac4)
3112 dcosb(k)=rmij*(dc_norm(k,i)-erij(k)*cosb)
3113 dcosg(k)=rmij*(dc_norm(k,j)-erij(k)*cosg)
3115 cd print '(2i3,2(3(1pd14.5),3x))',i,j,(dcosb(k),k=1,3),
3116 cd & (dcosg(k),k=1,3)
3118 ggg(k)=ecosb*dcosb(k)+ecosg*dcosg(k)
3121 c ghalf=0.5D0*ggg(k)
3122 c gelc(k,i)=gelc(k,i)+ghalf
3123 c & +(ecosa*(dc_norm(k,j)-cosa*dc_norm(k,i))
3124 c & + ecosb*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1)
3125 c gelc(k,j)=gelc(k,j)+ghalf
3126 c & +(ecosa*(dc_norm(k,i)-cosa*dc_norm(k,j))
3127 c & + ecosg*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1)
3131 cgrad gelc(l,k)=gelc(l,k)+ggg(l)
3136 & +(ecosa*(dc_norm(k,j)-cosa*dc_norm(k,i))
3137 & + ecosb*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1)
3139 & +(ecosa*(dc_norm(k,i)-cosa*dc_norm(k,j))
3140 & + ecosg*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1)
3141 gelc_long(k,j)=gelc_long(k,j)+ggg(k)
3142 gelc_long(k,i)=gelc_long(k,i)-ggg(k)
3144 IF (wel_loc.gt.0.0d0 .or. wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0
3145 & .or. wcorr6.gt.0.0d0 .or. wturn3.gt.0.0d0
3146 & .or. wturn4.gt.0.0d0 .or. wturn6.gt.0.0d0) THEN
3148 C 9/25/99 Mixed third-order local-electrostatic terms. The local-interaction
3149 C energy of a peptide unit is assumed in the form of a second-order
3150 C Fourier series in the angles lambda1 and lambda2 (see Nishikawa et al.
3151 C Macromolecules, 1974, 7, 797-806 for definition). This correlation terms
3152 C are computed for EVERY pair of non-contiguous peptide groups.
3154 if (j.lt.nres-1) then
3165 muij(kkk)=mu(k,i)*mu(l,j)
3168 cd write (iout,*) 'EELEC: i',i,' j',j
3169 cd write (iout,*) 'j',j,' j1',j1,' j2',j2
3170 cd write(iout,*) 'muij',muij
3171 ury=scalar(uy(1,i),erij)
3172 urz=scalar(uz(1,i),erij)
3173 vry=scalar(uy(1,j),erij)
3174 vrz=scalar(uz(1,j),erij)
3175 a22=scalar(uy(1,i),uy(1,j))-3*ury*vry
3176 a23=scalar(uy(1,i),uz(1,j))-3*ury*vrz
3177 a32=scalar(uz(1,i),uy(1,j))-3*urz*vry
3178 a33=scalar(uz(1,i),uz(1,j))-3*urz*vrz
3179 fac=dsqrt(-ael6i)*r3ij
3184 cd write (iout,'(4i5,4f10.5)')
3185 cd & i,itortyp(itype(i)),j,itortyp(itype(j)),a22,a23,a32,a33
3186 cd write (iout,'(6f10.5)') (muij(k),k=1,4),fac,eel_loc_ij
3187 cd write (iout,'(2(3f10.5,5x)/2(3f10.5,5x))') uy(:,i),uz(:,i),
3188 cd & uy(:,j),uz(:,j)
3189 cd write (iout,'(4f10.5)')
3190 cd & scalar(uy(1,i),uy(1,j)),scalar(uy(1,i),uz(1,j)),
3191 cd & scalar(uz(1,i),uy(1,j)),scalar(uz(1,i),uz(1,j))
3192 cd write (iout,'(4f10.5)') ury,urz,vry,vrz
3193 cd write (iout,'(9f10.5/)')
3194 cd & fac22,a22,fac23,a23,fac32,a32,fac33,a33,eel_loc_ij
3195 C Derivatives of the elements of A in virtual-bond vectors
3196 call unormderiv(erij(1),unmat(1,1),rmij,erder(1,1))
3198 uryg(k,1)=scalar(erder(1,k),uy(1,i))
3199 uryg(k,2)=scalar(uygrad(1,k,1,i),erij(1))
3200 uryg(k,3)=scalar(uygrad(1,k,2,i),erij(1))
3201 urzg(k,1)=scalar(erder(1,k),uz(1,i))
3202 urzg(k,2)=scalar(uzgrad(1,k,1,i),erij(1))
3203 urzg(k,3)=scalar(uzgrad(1,k,2,i),erij(1))
3204 vryg(k,1)=scalar(erder(1,k),uy(1,j))
3205 vryg(k,2)=scalar(uygrad(1,k,1,j),erij(1))
3206 vryg(k,3)=scalar(uygrad(1,k,2,j),erij(1))
3207 vrzg(k,1)=scalar(erder(1,k),uz(1,j))
3208 vrzg(k,2)=scalar(uzgrad(1,k,1,j),erij(1))
3209 vrzg(k,3)=scalar(uzgrad(1,k,2,j),erij(1))
3211 C Compute radial contributions to the gradient
3229 C Add the contributions coming from er
3232 agg(k,1)=agg(k,1)+fac3*(uryg(k,1)*vry+vryg(k,1)*ury)
3233 agg(k,2)=agg(k,2)+fac3*(uryg(k,1)*vrz+vrzg(k,1)*ury)
3234 agg(k,3)=agg(k,3)+fac3*(urzg(k,1)*vry+vryg(k,1)*urz)
3235 agg(k,4)=agg(k,4)+fac3*(urzg(k,1)*vrz+vrzg(k,1)*urz)
3238 C Derivatives in DC(i)
3239 cgrad ghalf1=0.5d0*agg(k,1)
3240 cgrad ghalf2=0.5d0*agg(k,2)
3241 cgrad ghalf3=0.5d0*agg(k,3)
3242 cgrad ghalf4=0.5d0*agg(k,4)
3243 aggi(k,1)=fac*(scalar(uygrad(1,k,1,i),uy(1,j))
3244 & -3.0d0*uryg(k,2)*vry)!+ghalf1
3245 aggi(k,2)=fac*(scalar(uygrad(1,k,1,i),uz(1,j))
3246 & -3.0d0*uryg(k,2)*vrz)!+ghalf2
3247 aggi(k,3)=fac*(scalar(uzgrad(1,k,1,i),uy(1,j))
3248 & -3.0d0*urzg(k,2)*vry)!+ghalf3
3249 aggi(k,4)=fac*(scalar(uzgrad(1,k,1,i),uz(1,j))
3250 & -3.0d0*urzg(k,2)*vrz)!+ghalf4
3251 C Derivatives in DC(i+1)
3252 aggi1(k,1)=fac*(scalar(uygrad(1,k,2,i),uy(1,j))
3253 & -3.0d0*uryg(k,3)*vry)!+agg(k,1)
3254 aggi1(k,2)=fac*(scalar(uygrad(1,k,2,i),uz(1,j))
3255 & -3.0d0*uryg(k,3)*vrz)!+agg(k,2)
3256 aggi1(k,3)=fac*(scalar(uzgrad(1,k,2,i),uy(1,j))
3257 & -3.0d0*urzg(k,3)*vry)!+agg(k,3)
3258 aggi1(k,4)=fac*(scalar(uzgrad(1,k,2,i),uz(1,j))
3259 & -3.0d0*urzg(k,3)*vrz)!+agg(k,4)
3260 C Derivatives in DC(j)
3261 aggj(k,1)=fac*(scalar(uygrad(1,k,1,j),uy(1,i))
3262 & -3.0d0*vryg(k,2)*ury)!+ghalf1
3263 aggj(k,2)=fac*(scalar(uzgrad(1,k,1,j),uy(1,i))
3264 & -3.0d0*vrzg(k,2)*ury)!+ghalf2
3265 aggj(k,3)=fac*(scalar(uygrad(1,k,1,j),uz(1,i))
3266 & -3.0d0*vryg(k,2)*urz)!+ghalf3
3267 aggj(k,4)=fac*(scalar(uzgrad(1,k,1,j),uz(1,i))
3268 & -3.0d0*vrzg(k,2)*urz)!+ghalf4
3269 C Derivatives in DC(j+1) or DC(nres-1)
3270 aggj1(k,1)=fac*(scalar(uygrad(1,k,2,j),uy(1,i))
3271 & -3.0d0*vryg(k,3)*ury)
3272 aggj1(k,2)=fac*(scalar(uzgrad(1,k,2,j),uy(1,i))
3273 & -3.0d0*vrzg(k,3)*ury)
3274 aggj1(k,3)=fac*(scalar(uygrad(1,k,2,j),uz(1,i))
3275 & -3.0d0*vryg(k,3)*urz)
3276 aggj1(k,4)=fac*(scalar(uzgrad(1,k,2,j),uz(1,i))
3277 & -3.0d0*vrzg(k,3)*urz)
3278 cgrad if (j.eq.nres-1 .and. i.lt.j-2) then
3280 cgrad aggj1(k,l)=aggj1(k,l)+agg(k,l)
3293 aggi(k,l)=-aggi(k,l)
3294 aggi1(k,l)=-aggi1(k,l)
3295 aggj(k,l)=-aggj(k,l)
3296 aggj1(k,l)=-aggj1(k,l)
3299 if (j.lt.nres-1) then
3305 aggi(k,l)=-aggi(k,l)
3306 aggi1(k,l)=-aggi1(k,l)
3307 aggj(k,l)=-aggj(k,l)
3308 aggj1(k,l)=-aggj1(k,l)
3319 aggi(k,l)=-aggi(k,l)
3320 aggi1(k,l)=-aggi1(k,l)
3321 aggj(k,l)=-aggj(k,l)
3322 aggj1(k,l)=-aggj1(k,l)
3327 IF (wel_loc.gt.0.0d0) THEN
3328 C Contribution to the local-electrostatic energy coming from the i-j pair
3329 eel_loc_ij=a22*muij(1)+a23*muij(2)+a32*muij(3)
3331 cd write (iout,*) 'i',i,' j',j,' eel_loc_ij',eel_loc_ij
3333 if (energy_dec) write (iout,'(a6,2i5,0pf7.3)')
3334 & 'eelloc',i,j,eel_loc_ij
3335 c write (iout,*) a22,muij(1),a23,muij(2),a32,muij(3)
3337 eel_loc=eel_loc+eel_loc_ij
3338 C Partial derivatives in virtual-bond dihedral angles gamma
3340 & gel_loc_loc(i-1)=gel_loc_loc(i-1)+
3341 & a22*muder(1,i)*mu(1,j)+a23*muder(1,i)*mu(2,j)
3342 & +a32*muder(2,i)*mu(1,j)+a33*muder(2,i)*mu(2,j)
3343 gel_loc_loc(j-1)=gel_loc_loc(j-1)+
3344 & a22*mu(1,i)*muder(1,j)+a23*mu(1,i)*muder(2,j)
3345 & +a32*mu(2,i)*muder(1,j)+a33*mu(2,i)*muder(2,j)
3346 C Derivatives of eello in DC(i+1) thru DC(j-1) or DC(nres-2)
3348 ggg(l)=agg(l,1)*muij(1)+
3349 & agg(l,2)*muij(2)+agg(l,3)*muij(3)+agg(l,4)*muij(4)
3350 gel_loc_long(l,j)=gel_loc_long(l,j)+ggg(l)
3351 gel_loc_long(l,i)=gel_loc_long(l,i)-ggg(l)
3352 cgrad ghalf=0.5d0*ggg(l)
3353 cgrad gel_loc(l,i)=gel_loc(l,i)+ghalf
3354 cgrad gel_loc(l,j)=gel_loc(l,j)+ghalf
3358 cgrad gel_loc(l,k)=gel_loc(l,k)+ggg(l)
3361 C Remaining derivatives of eello
3363 gel_loc(l,i)=gel_loc(l,i)+aggi(l,1)*muij(1)+
3364 & aggi(l,2)*muij(2)+aggi(l,3)*muij(3)+aggi(l,4)*muij(4)
3365 gel_loc(l,i+1)=gel_loc(l,i+1)+aggi1(l,1)*muij(1)+
3366 & aggi1(l,2)*muij(2)+aggi1(l,3)*muij(3)+aggi1(l,4)*muij(4)
3367 gel_loc(l,j)=gel_loc(l,j)+aggj(l,1)*muij(1)+
3368 & aggj(l,2)*muij(2)+aggj(l,3)*muij(3)+aggj(l,4)*muij(4)
3369 gel_loc(l,j1)=gel_loc(l,j1)+aggj1(l,1)*muij(1)+
3370 & aggj1(l,2)*muij(2)+aggj1(l,3)*muij(3)+aggj1(l,4)*muij(4)
3373 C Change 12/26/95 to calculate four-body contributions to H-bonding energy
3374 c if (j.gt.i+1 .and. num_conti.le.maxconts) then
3375 if (wcorr+wcorr4+wcorr5+wcorr6.gt.0.0d0
3376 & .and. num_conti.le.maxconts) then
3377 c write (iout,*) i,j," entered corr"
3379 C Calculate the contact function. The ith column of the array JCONT will
3380 C contain the numbers of atoms that make contacts with the atom I (of numbers
3381 C greater than I). The arrays FACONT and GACONT will contain the values of
3382 C the contact function and its derivative.
3383 c r0ij=1.02D0*rpp(iteli,itelj)
3384 c r0ij=1.11D0*rpp(iteli,itelj)
3385 r0ij=2.20D0*rpp(iteli,itelj)
3386 c r0ij=1.55D0*rpp(iteli,itelj)
3387 call gcont(rij,r0ij,1.0D0,0.2d0*r0ij,fcont,fprimcont)
3388 if (fcont.gt.0.0D0) then
3389 num_conti=num_conti+1
3390 if (num_conti.gt.maxconts) then
3391 write (iout,*) 'WARNING - max. # of contacts exceeded;',
3392 & ' will skip next contacts for this conf.'
3394 jcont_hb(num_conti,i)=j
3395 cd write (iout,*) "i",i," j",j," num_conti",num_conti,
3396 cd & " jcont_hb",jcont_hb(num_conti,i)
3397 IF (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or.
3398 & wcorr6.gt.0.0d0 .or. wturn6.gt.0.0d0) THEN
3399 C 9/30/99 (AL) - store components necessary to evaluate higher-order loc-el
3401 d_cont(num_conti,i)=rij
3402 cd write (2,'(3e15.5)') rij,r0ij+0.2d0*r0ij,rij
3403 C --- Electrostatic-interaction matrix ---
3404 a_chuj(1,1,num_conti,i)=a22
3405 a_chuj(1,2,num_conti,i)=a23
3406 a_chuj(2,1,num_conti,i)=a32
3407 a_chuj(2,2,num_conti,i)=a33
3408 C --- Gradient of rij
3410 grij_hb_cont(kkk,num_conti,i)=erij(kkk)
3417 a_chuj_der(k,l,m,1,num_conti,i)=agg(m,kkll)
3418 a_chuj_der(k,l,m,2,num_conti,i)=aggi(m,kkll)
3419 a_chuj_der(k,l,m,3,num_conti,i)=aggi1(m,kkll)
3420 a_chuj_der(k,l,m,4,num_conti,i)=aggj(m,kkll)
3421 a_chuj_der(k,l,m,5,num_conti,i)=aggj1(m,kkll)
3426 IF (wcorr4.eq.0.0d0 .and. wcorr.gt.0.0d0) THEN
3427 C Calculate contact energies
3429 wij=cosa-3.0D0*cosb*cosg
3432 c fac3=dsqrt(-ael6i)/r0ij**3
3433 fac3=dsqrt(-ael6i)*r3ij
3434 c ees0pij=dsqrt(4.0D0+cosa4+wij*wij-3.0D0*cosbg1*cosbg1)
3435 ees0tmp=4.0D0+cosa4+wij*wij-3.0D0*cosbg1*cosbg1
3436 if (ees0tmp.gt.0) then
3437 ees0pij=dsqrt(ees0tmp)
3441 c ees0mij=dsqrt(4.0D0-cosa4+wij*wij-3.0D0*cosbg2*cosbg2)
3442 ees0tmp=4.0D0-cosa4+wij*wij-3.0D0*cosbg2*cosbg2
3443 if (ees0tmp.gt.0) then
3444 ees0mij=dsqrt(ees0tmp)
3449 ees0p(num_conti,i)=0.5D0*fac3*(ees0pij+ees0mij)
3450 ees0m(num_conti,i)=0.5D0*fac3*(ees0pij-ees0mij)
3451 C Diagnostics. Comment out or remove after debugging!
3452 c ees0p(num_conti,i)=0.5D0*fac3*ees0pij
3453 c ees0m(num_conti,i)=0.5D0*fac3*ees0mij
3454 c ees0m(num_conti,i)=0.0D0
3456 c write (iout,*) 'i=',i,' j=',j,' rij=',rij,' r0ij=',r0ij,
3457 c & ' ees0ij=',ees0p(num_conti,i),ees0m(num_conti,i),' fcont=',fcont
3458 C Angular derivatives of the contact function
3459 ees0pij1=fac3/ees0pij
3460 ees0mij1=fac3/ees0mij
3461 fac3p=-3.0D0*fac3*rrmij
3462 ees0pijp=0.5D0*fac3p*(ees0pij+ees0mij)
3463 ees0mijp=0.5D0*fac3p*(ees0pij-ees0mij)
3465 ecosa1= ees0pij1*( 1.0D0+0.5D0*wij)
3466 ecosb1=-1.5D0*ees0pij1*(wij*cosg+cosbg1)
3467 ecosg1=-1.5D0*ees0pij1*(wij*cosb+cosbg1)
3468 ecosa2= ees0mij1*(-1.0D0+0.5D0*wij)
3469 ecosb2=-1.5D0*ees0mij1*(wij*cosg+cosbg2)
3470 ecosg2=-1.5D0*ees0mij1*(wij*cosb-cosbg2)
3471 ecosap=ecosa1+ecosa2
3472 ecosbp=ecosb1+ecosb2
3473 ecosgp=ecosg1+ecosg2
3474 ecosam=ecosa1-ecosa2
3475 ecosbm=ecosb1-ecosb2
3476 ecosgm=ecosg1-ecosg2
3485 facont_hb(num_conti,i)=fcont
3486 fprimcont=fprimcont/rij
3487 cd facont_hb(num_conti,i)=1.0D0
3488 C Following line is for diagnostics.
3491 dcosb(k)=rmij*(dc_norm(k,i)-erij(k)*cosb)
3492 dcosg(k)=rmij*(dc_norm(k,j)-erij(k)*cosg)
3495 gggp(k)=ecosbp*dcosb(k)+ecosgp*dcosg(k)
3496 gggm(k)=ecosbm*dcosb(k)+ecosgm*dcosg(k)
3498 gggp(1)=gggp(1)+ees0pijp*xj
3499 gggp(2)=gggp(2)+ees0pijp*yj
3500 gggp(3)=gggp(3)+ees0pijp*zj
3501 gggm(1)=gggm(1)+ees0mijp*xj
3502 gggm(2)=gggm(2)+ees0mijp*yj
3503 gggm(3)=gggm(3)+ees0mijp*zj
3504 C Derivatives due to the contact function
3505 gacont_hbr(1,num_conti,i)=fprimcont*xj
3506 gacont_hbr(2,num_conti,i)=fprimcont*yj
3507 gacont_hbr(3,num_conti,i)=fprimcont*zj
3510 c 10/24/08 cgrad and ! comments indicate the parts of the code removed
3511 c following the change of gradient-summation algorithm.
3513 cgrad ghalfp=0.5D0*gggp(k)
3514 cgrad ghalfm=0.5D0*gggm(k)
3515 gacontp_hb1(k,num_conti,i)=!ghalfp
3516 & +(ecosap*(dc_norm(k,j)-cosa*dc_norm(k,i))
3517 & + ecosbp*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1)
3518 gacontp_hb2(k,num_conti,i)=!ghalfp
3519 & +(ecosap*(dc_norm(k,i)-cosa*dc_norm(k,j))
3520 & + ecosgp*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1)
3521 gacontp_hb3(k,num_conti,i)=gggp(k)
3522 gacontm_hb1(k,num_conti,i)=!ghalfm
3523 & +(ecosam*(dc_norm(k,j)-cosa*dc_norm(k,i))
3524 & + ecosbm*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1)
3525 gacontm_hb2(k,num_conti,i)=!ghalfm
3526 & +(ecosam*(dc_norm(k,i)-cosa*dc_norm(k,j))
3527 & + ecosgm*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1)
3528 gacontm_hb3(k,num_conti,i)=gggm(k)
3530 C Diagnostics. Comment out or remove after debugging!
3532 cdiag gacontp_hb1(k,num_conti,i)=0.0D0
3533 cdiag gacontp_hb2(k,num_conti,i)=0.0D0
3534 cdiag gacontp_hb3(k,num_conti,i)=0.0D0
3535 cdiag gacontm_hb1(k,num_conti,i)=0.0D0
3536 cdiag gacontm_hb2(k,num_conti,i)=0.0D0
3537 cdiag gacontm_hb3(k,num_conti,i)=0.0D0
3540 endif ! num_conti.le.maxconts
3543 if (wturn3.gt.0.0d0 .or. wturn4.gt.0.0d0) then
3546 ghalf=0.5d0*agg(l,k)
3547 aggi(l,k)=aggi(l,k)+ghalf
3548 aggi1(l,k)=aggi1(l,k)+agg(l,k)
3549 aggj(l,k)=aggj(l,k)+ghalf
3552 if (j.eq.nres-1 .and. i.lt.j-2) then
3555 aggj1(l,k)=aggj1(l,k)+agg(l,k)
3560 c t_eelecij=t_eelecij+MPI_Wtime()-time00
3563 C-----------------------------------------------------------------------------
3564 subroutine eturn3(i,eello_turn3)
3565 C Third- and fourth-order contributions from turns
3566 implicit real*8 (a-h,o-z)
3567 include 'DIMENSIONS'
3568 include 'COMMON.IOUNITS'
3569 include 'COMMON.GEO'
3570 include 'COMMON.VAR'
3571 include 'COMMON.LOCAL'
3572 include 'COMMON.CHAIN'
3573 include 'COMMON.DERIV'
3574 include 'COMMON.INTERACT'
3575 include 'COMMON.CONTACTS'
3576 include 'COMMON.TORSION'
3577 include 'COMMON.VECTORS'
3578 include 'COMMON.FFIELD'
3579 include 'COMMON.CONTROL'
3581 double precision auxmat(2,2),auxmat1(2,2),auxmat2(2,2),pizda(2,2),
3582 & e1t(2,2),e2t(2,2),e3t(2,2),e1tder(2,2),e2tder(2,2),e3tder(2,2),
3583 & e1a(2,2),ae3(2,2),ae3e2(2,2),auxvec(2),auxvec1(2)
3584 double precision agg(3,4),aggi(3,4),aggi1(3,4),
3585 & aggj(3,4),aggj1(3,4),a_temp(2,2),auxmat3(2,2)
3586 common /locel/ a_temp,agg,aggi,aggi1,aggj,aggj1,a22,a23,a32,a33,
3587 & dxi,dyi,dzi,dx_normi,dy_normi,dz_normi,xmedi,ymedi,zmedi,
3590 c write (iout,*) "eturn3",i,j,j1,j2
3595 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
3597 C Third-order contributions
3604 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
3605 cd call checkint_turn3(i,a_temp,eello_turn3_num)
3606 call matmat2(EUg(1,1,i+1),EUg(1,1,i+2),auxmat(1,1))
3607 call transpose2(auxmat(1,1),auxmat1(1,1))
3608 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
3609 eello_turn3=eello_turn3+0.5d0*(pizda(1,1)+pizda(2,2))
3610 if (energy_dec) write (iout,'(a6,2i5,0pf7.3)')
3611 & 'eturn3',i,j,0.5d0*(pizda(1,1)+pizda(2,2))
3612 cd write (2,*) 'i,',i,' j',j,'eello_turn3',
3613 cd & 0.5d0*(pizda(1,1)+pizda(2,2)),
3614 cd & ' eello_turn3_num',4*eello_turn3_num
3615 C Derivatives in gamma(i)
3616 call matmat2(EUgder(1,1,i+1),EUg(1,1,i+2),auxmat2(1,1))
3617 call transpose2(auxmat2(1,1),auxmat3(1,1))
3618 call matmat2(a_temp(1,1),auxmat3(1,1),pizda(1,1))
3619 gel_loc_turn3(i)=gel_loc_turn3(i)+0.5d0*(pizda(1,1)+pizda(2,2))
3620 C Derivatives in gamma(i+1)
3621 call matmat2(EUg(1,1,i+1),EUgder(1,1,i+2),auxmat2(1,1))
3622 call transpose2(auxmat2(1,1),auxmat3(1,1))
3623 call matmat2(a_temp(1,1),auxmat3(1,1),pizda(1,1))
3624 gel_loc_turn3(i+1)=gel_loc_turn3(i+1)
3625 & +0.5d0*(pizda(1,1)+pizda(2,2))
3626 C Cartesian derivatives
3628 c ghalf1=0.5d0*agg(l,1)
3629 c ghalf2=0.5d0*agg(l,2)
3630 c ghalf3=0.5d0*agg(l,3)
3631 c ghalf4=0.5d0*agg(l,4)
3632 a_temp(1,1)=aggi(l,1)!+ghalf1
3633 a_temp(1,2)=aggi(l,2)!+ghalf2
3634 a_temp(2,1)=aggi(l,3)!+ghalf3
3635 a_temp(2,2)=aggi(l,4)!+ghalf4
3636 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
3637 gcorr3_turn(l,i)=gcorr3_turn(l,i)
3638 & +0.5d0*(pizda(1,1)+pizda(2,2))
3639 a_temp(1,1)=aggi1(l,1)!+agg(l,1)
3640 a_temp(1,2)=aggi1(l,2)!+agg(l,2)
3641 a_temp(2,1)=aggi1(l,3)!+agg(l,3)
3642 a_temp(2,2)=aggi1(l,4)!+agg(l,4)
3643 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
3644 gcorr3_turn(l,i+1)=gcorr3_turn(l,i+1)
3645 & +0.5d0*(pizda(1,1)+pizda(2,2))
3646 a_temp(1,1)=aggj(l,1)!+ghalf1
3647 a_temp(1,2)=aggj(l,2)!+ghalf2
3648 a_temp(2,1)=aggj(l,3)!+ghalf3
3649 a_temp(2,2)=aggj(l,4)!+ghalf4
3650 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
3651 gcorr3_turn(l,j)=gcorr3_turn(l,j)
3652 & +0.5d0*(pizda(1,1)+pizda(2,2))
3653 a_temp(1,1)=aggj1(l,1)
3654 a_temp(1,2)=aggj1(l,2)
3655 a_temp(2,1)=aggj1(l,3)
3656 a_temp(2,2)=aggj1(l,4)
3657 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
3658 gcorr3_turn(l,j1)=gcorr3_turn(l,j1)
3659 & +0.5d0*(pizda(1,1)+pizda(2,2))
3663 C-------------------------------------------------------------------------------
3664 subroutine eturn4(i,eello_turn4)
3665 C Third- and fourth-order contributions from turns
3666 implicit real*8 (a-h,o-z)
3667 include 'DIMENSIONS'
3668 include 'COMMON.IOUNITS'
3669 include 'COMMON.GEO'
3670 include 'COMMON.VAR'
3671 include 'COMMON.LOCAL'
3672 include 'COMMON.CHAIN'
3673 include 'COMMON.DERIV'
3674 include 'COMMON.INTERACT'
3675 include 'COMMON.CONTACTS'
3676 include 'COMMON.TORSION'
3677 include 'COMMON.VECTORS'
3678 include 'COMMON.FFIELD'
3679 include 'COMMON.CONTROL'
3681 double precision auxmat(2,2),auxmat1(2,2),auxmat2(2,2),pizda(2,2),
3682 & e1t(2,2),e2t(2,2),e3t(2,2),e1tder(2,2),e2tder(2,2),e3tder(2,2),
3683 & e1a(2,2),ae3(2,2),ae3e2(2,2),auxvec(2),auxvec1(2)
3684 double precision agg(3,4),aggi(3,4),aggi1(3,4),
3685 & aggj(3,4),aggj1(3,4),a_temp(2,2),auxmat3(2,2)
3686 common /locel/ a_temp,agg,aggi,aggi1,aggj,aggj1,a22,a23,a32,a33,
3687 & dxi,dyi,dzi,dx_normi,dy_normi,dz_normi,xmedi,ymedi,zmedi,
3690 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
3692 C Fourth-order contributions
3700 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
3701 cd call checkint_turn4(i,a_temp,eello_turn4_num)
3702 c write (iout,*) "eturn4 i",i," j",j," j1",j1," j2",j2
3707 iti1=itortyp(itype(i+1))
3708 iti2=itortyp(itype(i+2))
3709 iti3=itortyp(itype(i+3))
3710 c write(iout,*) "iti1",iti1," iti2",iti2," iti3",iti3
3711 call transpose2(EUg(1,1,i+1),e1t(1,1))
3712 call transpose2(Eug(1,1,i+2),e2t(1,1))
3713 call transpose2(Eug(1,1,i+3),e3t(1,1))
3714 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
3715 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
3716 s1=scalar2(b1(1,iti2),auxvec(1))
3717 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
3718 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
3719 s2=scalar2(b1(1,iti1),auxvec(1))
3720 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
3721 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
3722 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3723 eello_turn4=eello_turn4-(s1+s2+s3)
3724 if (energy_dec) write (iout,'(a6,2i5,0pf7.3)')
3725 & 'eturn4',i,j,-(s1+s2+s3)
3726 cd write (2,*) 'i,',i,' j',j,'eello_turn4',-(s1+s2+s3),
3727 cd & ' eello_turn4_num',8*eello_turn4_num
3728 C Derivatives in gamma(i)
3729 call transpose2(EUgder(1,1,i+1),e1tder(1,1))
3730 call matmat2(e1tder(1,1),a_temp(1,1),auxmat(1,1))
3731 call matvec2(auxmat(1,1),Ub2(1,i+3),auxvec(1))
3732 s1=scalar2(b1(1,iti2),auxvec(1))
3733 call matmat2(ae3e2(1,1),e1tder(1,1),pizda(1,1))
3734 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3735 gel_loc_turn4(i)=gel_loc_turn4(i)-(s1+s3)
3736 C Derivatives in gamma(i+1)
3737 call transpose2(EUgder(1,1,i+2),e2tder(1,1))
3738 call matvec2(ae3(1,1),Ub2der(1,i+2),auxvec(1))
3739 s2=scalar2(b1(1,iti1),auxvec(1))
3740 call matmat2(ae3(1,1),e2tder(1,1),auxmat(1,1))
3741 call matmat2(auxmat(1,1),e1t(1,1),pizda(1,1))
3742 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3743 gel_loc_turn4(i+1)=gel_loc_turn4(i+1)-(s2+s3)
3744 C Derivatives in gamma(i+2)
3745 call transpose2(EUgder(1,1,i+3),e3tder(1,1))
3746 call matvec2(e1a(1,1),Ub2der(1,i+3),auxvec(1))
3747 s1=scalar2(b1(1,iti2),auxvec(1))
3748 call matmat2(a_temp(1,1),e3tder(1,1),auxmat(1,1))
3749 call matvec2(auxmat(1,1),Ub2(1,i+2),auxvec(1))
3750 s2=scalar2(b1(1,iti1),auxvec(1))
3751 call matmat2(auxmat(1,1),e2t(1,1),auxmat3(1,1))
3752 call matmat2(auxmat3(1,1),e1t(1,1),pizda(1,1))
3753 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3754 gel_loc_turn4(i+2)=gel_loc_turn4(i+2)-(s1+s2+s3)
3755 C Cartesian derivatives
3756 C Derivatives of this turn contributions in DC(i+2)
3757 if (j.lt.nres-1) then
3759 a_temp(1,1)=agg(l,1)
3760 a_temp(1,2)=agg(l,2)
3761 a_temp(2,1)=agg(l,3)
3762 a_temp(2,2)=agg(l,4)
3763 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
3764 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
3765 s1=scalar2(b1(1,iti2),auxvec(1))
3766 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
3767 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
3768 s2=scalar2(b1(1,iti1),auxvec(1))
3769 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
3770 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
3771 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3773 gcorr4_turn(l,i+2)=gcorr4_turn(l,i+2)-(s1+s2+s3)
3776 C Remaining derivatives of this turn contribution
3778 a_temp(1,1)=aggi(l,1)
3779 a_temp(1,2)=aggi(l,2)
3780 a_temp(2,1)=aggi(l,3)
3781 a_temp(2,2)=aggi(l,4)
3782 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
3783 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
3784 s1=scalar2(b1(1,iti2),auxvec(1))
3785 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
3786 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
3787 s2=scalar2(b1(1,iti1),auxvec(1))
3788 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
3789 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
3790 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3791 gcorr4_turn(l,i)=gcorr4_turn(l,i)-(s1+s2+s3)
3792 a_temp(1,1)=aggi1(l,1)
3793 a_temp(1,2)=aggi1(l,2)
3794 a_temp(2,1)=aggi1(l,3)
3795 a_temp(2,2)=aggi1(l,4)
3796 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
3797 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
3798 s1=scalar2(b1(1,iti2),auxvec(1))
3799 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
3800 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
3801 s2=scalar2(b1(1,iti1),auxvec(1))
3802 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
3803 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
3804 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3805 gcorr4_turn(l,i+1)=gcorr4_turn(l,i+1)-(s1+s2+s3)
3806 a_temp(1,1)=aggj(l,1)
3807 a_temp(1,2)=aggj(l,2)
3808 a_temp(2,1)=aggj(l,3)
3809 a_temp(2,2)=aggj(l,4)
3810 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
3811 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
3812 s1=scalar2(b1(1,iti2),auxvec(1))
3813 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
3814 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
3815 s2=scalar2(b1(1,iti1),auxvec(1))
3816 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
3817 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
3818 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3819 gcorr4_turn(l,j)=gcorr4_turn(l,j)-(s1+s2+s3)
3820 a_temp(1,1)=aggj1(l,1)
3821 a_temp(1,2)=aggj1(l,2)
3822 a_temp(2,1)=aggj1(l,3)
3823 a_temp(2,2)=aggj1(l,4)
3824 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
3825 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
3826 s1=scalar2(b1(1,iti2),auxvec(1))
3827 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
3828 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
3829 s2=scalar2(b1(1,iti1),auxvec(1))
3830 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
3831 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
3832 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3833 c write (iout,*) "s1",s1," s2",s2," s3",s3," s1+s2+s3",s1+s2+s3
3834 gcorr4_turn(l,j1)=gcorr4_turn(l,j1)-(s1+s2+s3)
3838 C-----------------------------------------------------------------------------
3839 subroutine vecpr(u,v,w)
3840 implicit real*8(a-h,o-z)
3841 dimension u(3),v(3),w(3)
3842 w(1)=u(2)*v(3)-u(3)*v(2)
3843 w(2)=-u(1)*v(3)+u(3)*v(1)
3844 w(3)=u(1)*v(2)-u(2)*v(1)
3847 C-----------------------------------------------------------------------------
3848 subroutine unormderiv(u,ugrad,unorm,ungrad)
3849 C This subroutine computes the derivatives of a normalized vector u, given
3850 C the derivatives computed without normalization conditions, ugrad. Returns
3853 double precision u(3),ugrad(3,3),unorm,ungrad(3,3)
3854 double precision vec(3)
3855 double precision scalar
3857 c write (2,*) 'ugrad',ugrad
3860 vec(i)=scalar(ugrad(1,i),u(1))
3862 c write (2,*) 'vec',vec
3865 ungrad(j,i)=(ugrad(j,i)-u(j)*vec(i))*unorm
3868 c write (2,*) 'ungrad',ungrad
3871 C-----------------------------------------------------------------------------
3872 subroutine escp_soft_sphere(evdw2,evdw2_14)
3874 C This subroutine calculates the excluded-volume interaction energy between
3875 C peptide-group centers and side chains and its gradient in virtual-bond and
3876 C side-chain vectors.
3878 implicit real*8 (a-h,o-z)
3879 include 'DIMENSIONS'
3880 include 'COMMON.GEO'
3881 include 'COMMON.VAR'
3882 include 'COMMON.LOCAL'
3883 include 'COMMON.CHAIN'
3884 include 'COMMON.DERIV'
3885 include 'COMMON.INTERACT'
3886 include 'COMMON.FFIELD'
3887 include 'COMMON.IOUNITS'
3888 include 'COMMON.CONTROL'
3893 cd print '(a)','Enter ESCP'
3894 cd write (iout,*) 'iatscp_s=',iatscp_s,' iatscp_e=',iatscp_e
3895 do i=iatscp_s,iatscp_e
3896 if (itype(i).eq.ntyp1 .or. itype(i+1).eq.ntyp1) cycle
3898 xi=0.5D0*(c(1,i)+c(1,i+1))
3899 yi=0.5D0*(c(2,i)+c(2,i+1))
3900 zi=0.5D0*(c(3,i)+c(3,i+1))
3902 do iint=1,nscp_gr(i)
3904 do j=iscpstart(i,iint),iscpend(i,iint)
3905 if (itype(j).eq.ntyp1) cycle
3906 itypj=iabs(itype(j))
3907 C Uncomment following three lines for SC-p interactions
3911 C Uncomment following three lines for Ca-p interactions
3915 rij=xj*xj+yj*yj+zj*zj
3918 if (rij.lt.r0ijsq) then
3919 evdwij=0.25d0*(rij-r0ijsq)**2
3927 C Calculate contributions to the gradient in the virtual-bond and SC vectors.
3932 cgrad if (j.lt.i) then
3933 cd write (iout,*) 'j<i'
3934 C Uncomment following three lines for SC-p interactions
3936 c gradx_scp(k,j)=gradx_scp(k,j)+ggg(k)
3939 cd write (iout,*) 'j>i'
3941 cgrad ggg(k)=-ggg(k)
3942 C Uncomment following line for SC-p interactions
3943 c gradx_scp(k,j)=gradx_scp(k,j)-ggg(k)
3947 cgrad gvdwc_scp(k,i)=gvdwc_scp(k,i)-0.5D0*ggg(k)
3949 cgrad kstart=min0(i+1,j)
3950 cgrad kend=max0(i-1,j-1)
3951 cd write (iout,*) 'i=',i,' j=',j,' kstart=',kstart,' kend=',kend
3952 cd write (iout,*) ggg(1),ggg(2),ggg(3)
3953 cgrad do k=kstart,kend
3955 cgrad gvdwc_scp(l,k)=gvdwc_scp(l,k)-ggg(l)
3959 gvdwc_scpp(k,i)=gvdwc_scpp(k,i)-ggg(k)
3960 gvdwc_scp(k,j)=gvdwc_scp(k,j)+ggg(k)
3968 C-----------------------------------------------------------------------------
3969 subroutine escp(evdw2,evdw2_14)
3971 C This subroutine calculates the excluded-volume interaction energy between
3972 C peptide-group centers and side chains and its gradient in virtual-bond and
3973 C side-chain vectors.
3975 implicit real*8 (a-h,o-z)
3976 include 'DIMENSIONS'
3977 include 'COMMON.GEO'
3978 include 'COMMON.VAR'
3979 include 'COMMON.LOCAL'
3980 include 'COMMON.CHAIN'
3981 include 'COMMON.DERIV'
3982 include 'COMMON.INTERACT'
3983 include 'COMMON.FFIELD'
3984 include 'COMMON.IOUNITS'
3985 include 'COMMON.CONTROL'
3989 cd print '(a)','Enter ESCP'
3990 cd write (iout,*) 'iatscp_s=',iatscp_s,' iatscp_e=',iatscp_e
3991 do i=iatscp_s,iatscp_e
3992 if (itype(i).eq.ntyp1 .or. itype(i+1).eq.ntyp1) cycle
3994 xi=0.5D0*(c(1,i)+c(1,i+1))
3995 yi=0.5D0*(c(2,i)+c(2,i+1))
3996 zi=0.5D0*(c(3,i)+c(3,i+1))
3998 do iint=1,nscp_gr(i)
4000 do j=iscpstart(i,iint),iscpend(i,iint)
4001 itypj=iabs(itype(j))
4002 if (itypj.eq.ntyp1) cycle
4003 C Uncomment following three lines for SC-p interactions
4007 C Uncomment following three lines for Ca-p interactions
4011 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
4013 e1=fac*fac*aad(itypj,iteli)
4014 e2=fac*bad(itypj,iteli)
4015 if (iabs(j-i) .le. 2) then
4018 evdw2_14=evdw2_14+e1+e2
4022 if (energy_dec) write (iout,'(a6,2i5,0pf7.3,2i3,3e11.3)')
4023 & 'evdw2',i,j,evdwij,iteli,itypj,fac,aad(itypj,iteli),
4026 C Calculate contributions to the gradient in the virtual-bond and SC vectors.
4028 fac=-(evdwij+e1)*rrij
4032 cgrad if (j.lt.i) then
4033 cd write (iout,*) 'j<i'
4034 C Uncomment following three lines for SC-p interactions
4036 c gradx_scp(k,j)=gradx_scp(k,j)+ggg(k)
4039 cd write (iout,*) 'j>i'
4041 cgrad ggg(k)=-ggg(k)
4042 C Uncomment following line for SC-p interactions
4043 ccgrad gradx_scp(k,j)=gradx_scp(k,j)-ggg(k)
4044 c gradx_scp(k,j)=gradx_scp(k,j)+ggg(k)
4048 cgrad gvdwc_scp(k,i)=gvdwc_scp(k,i)-0.5D0*ggg(k)
4050 cgrad kstart=min0(i+1,j)
4051 cgrad kend=max0(i-1,j-1)
4052 cd write (iout,*) 'i=',i,' j=',j,' kstart=',kstart,' kend=',kend
4053 cd write (iout,*) ggg(1),ggg(2),ggg(3)
4054 cgrad do k=kstart,kend
4056 cgrad gvdwc_scp(l,k)=gvdwc_scp(l,k)-ggg(l)
4060 gvdwc_scpp(k,i)=gvdwc_scpp(k,i)-ggg(k)
4061 gvdwc_scp(k,j)=gvdwc_scp(k,j)+ggg(k)
4069 gvdwc_scp(j,i)=expon*gvdwc_scp(j,i)
4070 gvdwc_scpp(j,i)=expon*gvdwc_scpp(j,i)
4071 gradx_scp(j,i)=expon*gradx_scp(j,i)
4074 C******************************************************************************
4078 C To save time the factor EXPON has been extracted from ALL components
4079 C of GVDWC and GRADX. Remember to multiply them by this factor before further
4082 C******************************************************************************
4085 C--------------------------------------------------------------------------
4086 subroutine edis(ehpb)
4088 C Evaluate bridge-strain energy and its gradient in virtual-bond and SC vectors.
4090 implicit real*8 (a-h,o-z)
4091 include 'DIMENSIONS'
4092 include 'COMMON.SBRIDGE'
4093 include 'COMMON.CHAIN'
4094 include 'COMMON.DERIV'
4095 include 'COMMON.VAR'
4096 include 'COMMON.INTERACT'
4097 include 'COMMON.IOUNITS'
4098 include 'COMMON.CONTROL'
4104 C write (iout,*) ,"link_end",link_end,constr_dist
4105 cd write(iout,*)'edis: nhpb=',nhpb,' fbr=',fbr
4106 cd write(iout,*)'link_start=',link_start,' link_end=',link_end
4107 if (link_end.eq.0) return
4108 do i=link_start,link_end
4109 C If ihpb(i) and jhpb(i) > NRES, this is a SC-SC distance, otherwise a
4110 C CA-CA distance used in regularization of structure.
4113 C iii and jjj point to the residues for which the distance is assigned.
4114 if (ii.gt.nres) then
4121 c write (iout,*) "i",i," ii",ii," iii",iii," jj",jj," jjj",jjj,
4122 c & dhpb(i),dhpb1(i),forcon(i)
4123 C 24/11/03 AL: SS bridges handled separately because of introducing a specific
4124 C distance and angle dependent SS bond potential.
4125 cmc if (ii.gt.nres .and. itype(iii).eq.1 .and. itype(jjj).eq.1) then
4126 C 18/07/06 MC: Use the convention that the first nss pairs are SS bonds
4127 if (.not.dyn_ss .and. i.le.nss) then
4128 C 15/02/13 CC dynamic SSbond - additional check
4129 if (ii.gt.nres .and. iabs(itype(iii)).eq.1 .and.
4130 & iabs(itype(jjj)).eq.1) then
4131 call ssbond_ene(iii,jjj,eij)
4134 cd write (iout,*) "eij",eij
4135 cd & ' waga=',waga,' fac=',fac
4136 else if (ii.gt.nres .and. jj.gt.nres) then
4137 c Restraints from contact prediction
4139 if (constr_dist.eq.11) then
4140 ehpb=ehpb+fordepth(i)**4.0d0
4141 & *rlornmr1(dd,dhpb(i),dhpb1(i),forcon(i))
4142 fac=fordepth(i)**4.0d0
4143 & *rlornmr1prim(dd,dhpb(i),dhpb1(i),forcon(i))/dd
4144 if (energy_dec) write (iout,'(a6,2i5,3f8.3)') "edisl",ii,jj,
4145 & ehpb,fordepth(i),dd
4147 if (dhpb1(i).gt.0.0d0) then
4148 ehpb=ehpb+2*forcon(i)*gnmr1(dd,dhpb(i),dhpb1(i))
4149 fac=forcon(i)*gnmr1prim(dd,dhpb(i),dhpb1(i))/dd
4150 c write (iout,*) "beta nmr",
4151 c & dd,2*forcon(i)*gnmr1(dd,dhpb(i),dhpb1(i))
4155 C Get the force constant corresponding to this distance.
4157 C Calculate the contribution to energy.
4158 ehpb=ehpb+waga*rdis*rdis
4159 c write (iout,*) "beta reg",dd,waga*rdis*rdis
4161 C Evaluate gradient.
4167 ggg(j)=fac*(c(j,jj)-c(j,ii))
4170 ghpbx(j,iii)=ghpbx(j,iii)-ggg(j)
4171 ghpbx(j,jjj)=ghpbx(j,jjj)+ggg(j)
4174 ghpbc(k,jjj)=ghpbc(k,jjj)+ggg(k)
4175 ghpbc(k,iii)=ghpbc(k,iii)-ggg(k)
4178 C Calculate the distance between the two points and its difference from the
4181 if (constr_dist.eq.11) then
4182 ehpb=ehpb+fordepth(i)**4.0d0
4183 & *rlornmr1(dd,dhpb(i),dhpb1(i),forcon(i))
4184 fac=fordepth(i)**4.0d0
4185 & *rlornmr1prim(dd,dhpb(i),dhpb1(i),forcon(i))/dd
4186 if (energy_dec) write (iout,'(a6,2i5,3f8.3)') "edisl",ii,jj,
4187 & ehpb,fordepth(i),dd
4189 if (dhpb1(i).gt.0.0d0) then
4190 ehpb=ehpb+2*forcon(i)*gnmr1(dd,dhpb(i),dhpb1(i))
4191 fac=forcon(i)*gnmr1prim(dd,dhpb(i),dhpb1(i))/dd
4192 c write (iout,*) "alph nmr",
4193 c & dd,2*forcon(i)*gnmr1(dd,dhpb(i),dhpb1(i))
4196 C Get the force constant corresponding to this distance.
4198 C Calculate the contribution to energy.
4199 ehpb=ehpb+waga*rdis*rdis
4200 c write (iout,*) "alpha reg",dd,waga*rdis*rdis
4202 C Evaluate gradient.
4208 ggg(j)=fac*(c(j,jj)-c(j,ii))
4210 cd print '(i3,3(1pe14.5))',i,(ggg(j),j=1,3)
4211 C If this is a SC-SC distance, we need to calculate the contributions to the
4212 C Cartesian gradient in the SC vectors (ghpbx).
4215 ghpbx(j,iii)=ghpbx(j,iii)-ggg(j)
4216 ghpbx(j,jjj)=ghpbx(j,jjj)+ggg(j)
4219 cgrad do j=iii,jjj-1
4221 cgrad ghpbc(k,j)=ghpbc(k,j)+ggg(k)
4225 ghpbc(k,jjj)=ghpbc(k,jjj)+ggg(k)
4226 ghpbc(k,iii)=ghpbc(k,iii)-ggg(k)
4230 if (constr_dist.ne.11) ehpb=0.5D0*ehpb
4233 C--------------------------------------------------------------------------
4234 subroutine ssbond_ene(i,j,eij)
4236 C Calculate the distance and angle dependent SS-bond potential energy
4237 C using a free-energy function derived based on RHF/6-31G** ab initio
4238 C calculations of diethyl disulfide.
4240 C A. Liwo and U. Kozlowska, 11/24/03
4242 implicit real*8 (a-h,o-z)
4243 include 'DIMENSIONS'
4244 include 'COMMON.SBRIDGE'
4245 include 'COMMON.CHAIN'
4246 include 'COMMON.DERIV'
4247 include 'COMMON.LOCAL'
4248 include 'COMMON.INTERACT'
4249 include 'COMMON.VAR'
4250 include 'COMMON.IOUNITS'
4251 double precision erij(3),dcosom1(3),dcosom2(3),gg(3)
4252 itypi=iabs(itype(i))
4256 dxi=dc_norm(1,nres+i)
4257 dyi=dc_norm(2,nres+i)
4258 dzi=dc_norm(3,nres+i)
4259 c dsci_inv=dsc_inv(itypi)
4260 dsci_inv=vbld_inv(nres+i)
4261 itypj=iabs(itype(j))
4262 c dscj_inv=dsc_inv(itypj)
4263 dscj_inv=vbld_inv(nres+j)
4267 dxj=dc_norm(1,nres+j)
4268 dyj=dc_norm(2,nres+j)
4269 dzj=dc_norm(3,nres+j)
4270 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
4275 om1=dxi*erij(1)+dyi*erij(2)+dzi*erij(3)
4276 om2=dxj*erij(1)+dyj*erij(2)+dzj*erij(3)
4277 om12=dxi*dxj+dyi*dyj+dzi*dzj
4279 dcosom1(k)=rij*(dc_norm(k,nres+i)-om1*erij(k))
4280 dcosom2(k)=rij*(dc_norm(k,nres+j)-om2*erij(k))
4286 deltat12=om2-om1+2.0d0
4288 eij=akcm*deltad*deltad+akth*(deltat1*deltat1+deltat2*deltat2)
4289 & +akct*deltad*deltat12
4290 & +v1ss*cosphi+v2ss*cosphi*cosphi+v3ss*cosphi*cosphi*cosphi+ebr
4291 c write(iout,*) i,j,"rij",rij,"d0cm",d0cm," akcm",akcm," akth",akth,
4292 c & " akct",akct," deltad",deltad," deltat",deltat1,deltat2,
4293 c & " deltat12",deltat12," eij",eij
4294 ed=2*akcm*deltad+akct*deltat12
4296 pom2=v1ss+2*v2ss*cosphi+3*v3ss*cosphi*cosphi
4297 eom1=-2*akth*deltat1-pom1-om2*pom2
4298 eom2= 2*akth*deltat2+pom1-om1*pom2
4301 ggk=ed*erij(k)+eom1*dcosom1(k)+eom2*dcosom2(k)
4302 ghpbx(k,i)=ghpbx(k,i)-ggk
4303 & +(eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,nres+i))
4304 & +eom1*(erij(k)-om1*dc_norm(k,nres+i)))*dsci_inv
4305 ghpbx(k,j)=ghpbx(k,j)+ggk
4306 & +(eom12*(dc_norm(k,nres+i)-om12*dc_norm(k,nres+j))
4307 & +eom2*(erij(k)-om2*dc_norm(k,nres+j)))*dscj_inv
4308 ghpbc(k,i)=ghpbc(k,i)-ggk
4309 ghpbc(k,j)=ghpbc(k,j)+ggk
4312 C Calculate the components of the gradient in DC and X
4316 cgrad ghpbc(l,k)=ghpbc(l,k)+gg(l)
4321 C--------------------------------------------------------------------------
4322 subroutine ebond(estr)
4324 c Evaluate the energy of stretching of the CA-CA and CA-SC virtual bonds
4326 implicit real*8 (a-h,o-z)
4327 include 'DIMENSIONS'
4328 include 'COMMON.LOCAL'
4329 include 'COMMON.GEO'
4330 include 'COMMON.INTERACT'
4331 include 'COMMON.DERIV'
4332 include 'COMMON.VAR'
4333 include 'COMMON.CHAIN'
4334 include 'COMMON.IOUNITS'
4335 include 'COMMON.NAMES'
4336 include 'COMMON.FFIELD'
4337 include 'COMMON.CONTROL'
4338 include 'COMMON.SETUP'
4339 double precision u(3),ud(3)
4342 do i=ibondp_start,ibondp_end
4343 if (itype(i-1).eq.ntyp1 .or. itype(i).eq.ntyp1) then
4344 estr1=estr1+gnmr1(vbld(i),-1.0d0,distchainmax)
4346 gradb(j,i-1)=gnmr1prim(vbld(i),-1.0d0,distchainmax)
4347 & *dc(j,i-1)/vbld(i)
4349 if (energy_dec) write(iout,*)
4350 & "estr1",i,gnmr1(vbld(i),-1.0d0,distchainmax)
4352 diff = vbld(i)-vbldp0
4353 if (energy_dec) write (iout,*)
4354 & "estr bb",i,vbld(i),vbldp0,diff,AKP*diff*diff
4357 gradb(j,i-1)=AKP*diff*dc(j,i-1)/vbld(i)
4359 c write (iout,'(i5,3f10.5)') i,(gradb(j,i-1),j=1,3)
4362 estr=0.5d0*AKP*estr+estr1
4364 c 09/18/07 AL: multimodal bond potential based on AM1 CA-SC PMF's included
4366 do i=ibond_start,ibond_end
4368 if (iti.ne.10 .and. iti.ne.ntyp1) then
4371 diff=vbld(i+nres)-vbldsc0(1,iti)
4372 if (energy_dec) write (iout,*)
4373 & "estr sc",i,iti,vbld(i+nres),vbldsc0(1,iti),diff,
4374 & AKSC(1,iti),AKSC(1,iti)*diff*diff
4375 estr=estr+0.5d0*AKSC(1,iti)*diff*diff
4377 gradbx(j,i)=AKSC(1,iti)*diff*dc(j,i+nres)/vbld(i+nres)
4381 diff=vbld(i+nres)-vbldsc0(j,iti)
4382 ud(j)=aksc(j,iti)*diff
4383 u(j)=abond0(j,iti)+0.5d0*ud(j)*diff
4397 uprod2=uprod2*u(k)*u(k)
4401 usumsqder=usumsqder+ud(j)*uprod2
4403 estr=estr+uprod/usum
4405 gradbx(j,i)=usumsqder/(usum*usum)*dc(j,i+nres)/vbld(i+nres)
4413 C--------------------------------------------------------------------------
4414 subroutine ebend(etheta,ethetacnstr)
4416 C Evaluate the virtual-bond-angle energy given the virtual-bond dihedral
4417 C angles gamma and its derivatives in consecutive thetas and gammas.
4419 implicit real*8 (a-h,o-z)
4420 include 'DIMENSIONS'
4421 include 'COMMON.LOCAL'
4422 include 'COMMON.GEO'
4423 include 'COMMON.INTERACT'
4424 include 'COMMON.DERIV'
4425 include 'COMMON.VAR'
4426 include 'COMMON.CHAIN'
4427 include 'COMMON.IOUNITS'
4428 include 'COMMON.NAMES'
4429 include 'COMMON.FFIELD'
4430 include 'COMMON.CONTROL'
4431 include 'COMMON.TORCNSTR'
4432 common /calcthet/ term1,term2,termm,diffak,ratak,
4433 & ak,aktc,termpre,termexp,sigc,sig0i,time11,time12,sigcsq,
4434 & delthe0,sig0inv,sigtc,sigsqtc,delthec,it
4435 double precision y(2),z(2)
4437 c time11=dexp(-2*time)
4440 c write (*,'(a,i2)') 'EBEND ICG=',icg
4441 do i=ithet_start,ithet_end
4442 if (itype(i-1).eq.ntyp1) cycle
4443 C Zero the energy function and its derivative at 0 or pi.
4444 call splinthet(theta(i),0.5d0*delta,ss,ssd)
4446 ichir1=isign(1,itype(i-2))
4447 ichir2=isign(1,itype(i))
4448 if (itype(i-2).eq.10) ichir1=isign(1,itype(i-1))
4449 if (itype(i).eq.10) ichir2=isign(1,itype(i-1))
4450 if (itype(i-1).eq.10) then
4451 itype1=isign(10,itype(i-2))
4452 ichir11=isign(1,itype(i-2))
4453 ichir12=isign(1,itype(i-2))
4454 itype2=isign(10,itype(i))
4455 ichir21=isign(1,itype(i))
4456 ichir22=isign(1,itype(i))
4459 if (i.gt.3 .and. itype(i-2).ne.ntyp1) then
4462 if (phii.ne.phii) phii=150.0
4472 if (i.lt.nres .and. itype(i).ne.ntyp1) then
4475 if (phii1.ne.phii1) phii1=150.0
4487 C Calculate the "mean" value of theta from the part of the distribution
4488 C dependent on the adjacent virtual-bond-valence angles (gamma1 & gamma2).
4489 C In following comments this theta will be referred to as t_c.
4490 thet_pred_mean=0.0d0
4492 athetk=athet(k,it,ichir1,ichir2)
4493 bthetk=bthet(k,it,ichir1,ichir2)
4495 athetk=athet(k,itype1,ichir11,ichir12)
4496 bthetk=bthet(k,itype2,ichir21,ichir22)
4498 thet_pred_mean=thet_pred_mean+athetk*y(k)+bthetk*z(k)
4500 dthett=thet_pred_mean*ssd
4501 thet_pred_mean=thet_pred_mean*ss+a0thet(it)
4502 C Derivatives of the "mean" values in gamma1 and gamma2.
4503 dthetg1=(-athet(1,it,ichir1,ichir2)*y(2)
4504 &+athet(2,it,ichir1,ichir2)*y(1))*ss
4505 dthetg2=(-bthet(1,it,ichir1,ichir2)*z(2)
4506 & +bthet(2,it,ichir1,ichir2)*z(1))*ss
4508 dthetg1=(-athet(1,itype1,ichir11,ichir12)*y(2)
4509 &+athet(2,itype1,ichir11,ichir12)*y(1))*ss
4510 dthetg2=(-bthet(1,itype2,ichir21,ichir22)*z(2)
4511 & +bthet(2,itype2,ichir21,ichir22)*z(1))*ss
4513 if (theta(i).gt.pi-delta) then
4514 call theteng(pi-delta,thet_pred_mean,theta0(it),f0,fprim0,
4516 call mixder(pi-delta,thet_pred_mean,theta0(it),fprim_tc0)
4517 call theteng(pi,thet_pred_mean,theta0(it),f1,fprim1,E_tc1)
4518 call spline1(theta(i),pi-delta,delta,f0,f1,fprim0,ethetai,
4520 call spline2(theta(i),pi-delta,delta,E_tc0,E_tc1,fprim_tc0,
4522 else if (theta(i).lt.delta) then
4523 call theteng(delta,thet_pred_mean,theta0(it),f0,fprim0,E_tc0)
4524 call theteng(0.0d0,thet_pred_mean,theta0(it),f1,fprim1,E_tc1)
4525 call spline1(theta(i),delta,-delta,f0,f1,fprim0,ethetai,
4527 call mixder(delta,thet_pred_mean,theta0(it),fprim_tc0)
4528 call spline2(theta(i),delta,-delta,E_tc0,E_tc1,fprim_tc0,
4531 call theteng(theta(i),thet_pred_mean,theta0(it),ethetai,
4534 etheta=etheta+ethetai
4535 if (energy_dec) write (iout,'(a6,i5,0pf7.3)')
4537 if (i.gt.3) gloc(i-3,icg)=gloc(i-3,icg)+wang*E_tc*dthetg1
4538 if (i.lt.nres) gloc(i-2,icg)=gloc(i-2,icg)+wang*E_tc*dthetg2
4539 gloc(nphi+i-2,icg)=wang*(E_theta+E_tc*dthett)
4542 C print *,ithetaconstr_start,ithetaconstr_end,"TU"
4543 do i=ithetaconstr_start,ithetaconstr_end
4544 itheta=itheta_constr(i)
4545 thetiii=theta(itheta)
4546 difi=pinorm(thetiii-theta_constr0(i))
4547 if (difi.gt.theta_drange(i)) then
4548 difi=difi-theta_drange(i)
4549 ethetacnstr=ethetcnstr+0.25d0*for_thet_constr(i)*difi**4
4550 gloc(itheta+nphi-2,icg)=gloc(itheta+nphi-2,icg)
4551 & +for_thet_constr(i)*difi**3
4552 else if (difi.lt.-drange(i)) then
4554 ethetacnstr=ethetcnstr+0.25d0*for_thet_constr(i)*difi**4
4555 gloc(itheta+nphi-2,icg)=gloc(itheta+nphi-2,icg)
4556 & +for_thet_constr(i)*difi**3
4560 if (energy_dec) then
4561 write (iout,'(a6,2i5,4f8.3,2e14.5)') "ethetc",
4562 & i,itheta,rad2deg*thetiii,
4563 & rad2deg*theta_constr0(i), rad2deg*theta_drange(i),
4564 & rad2deg*difi,0.25d0*for_thet_constr(i)*difi**4,
4565 & gloc(itheta+nphi-2,icg)
4569 C Ufff.... We've done all this!!!
4572 C---------------------------------------------------------------------------
4573 subroutine theteng(thetai,thet_pred_mean,theta0i,ethetai,E_theta,
4575 implicit real*8 (a-h,o-z)
4576 include 'DIMENSIONS'
4577 include 'COMMON.LOCAL'
4578 include 'COMMON.IOUNITS'
4579 common /calcthet/ term1,term2,termm,diffak,ratak,
4580 & ak,aktc,termpre,termexp,sigc,sig0i,time11,time12,sigcsq,
4581 & delthe0,sig0inv,sigtc,sigsqtc,delthec,it
4582 C Calculate the contributions to both Gaussian lobes.
4583 C 6/6/97 - Deform the Gaussians using the factor of 1/(1+time)
4584 C The "polynomial part" of the "standard deviation" of this part of
4588 sig=sig*thet_pred_mean+polthet(j,it)
4590 C Derivative of the "interior part" of the "standard deviation of the"
4591 C gamma-dependent Gaussian lobe in t_c.
4592 sigtc=3*polthet(3,it)
4594 sigtc=sigtc*thet_pred_mean+j*polthet(j,it)
4597 C Set the parameters of both Gaussian lobes of the distribution.
4598 C "Standard deviation" of the gamma-dependent Gaussian lobe (sigtc)
4599 fac=sig*sig+sigc0(it)
4602 C Following variable (sigsqtc) is -(1/2)d[sigma(t_c)**(-2))]/dt_c
4603 sigsqtc=-4.0D0*sigcsq*sigtc
4604 c print *,i,sig,sigtc,sigsqtc
4605 C Following variable (sigtc) is d[sigma(t_c)]/dt_c
4606 sigtc=-sigtc/(fac*fac)
4607 C Following variable is sigma(t_c)**(-2)
4608 sigcsq=sigcsq*sigcsq
4610 sig0inv=1.0D0/sig0i**2
4611 delthec=thetai-thet_pred_mean
4612 delthe0=thetai-theta0i
4613 term1=-0.5D0*sigcsq*delthec*delthec
4614 term2=-0.5D0*sig0inv*delthe0*delthe0
4615 C Following fuzzy logic is to avoid underflows in dexp and subsequent INFs and
4616 C NaNs in taking the logarithm. We extract the largest exponent which is added
4617 C to the energy (this being the log of the distribution) at the end of energy
4618 C term evaluation for this virtual-bond angle.
4619 if (term1.gt.term2) then
4621 term2=dexp(term2-termm)
4625 term1=dexp(term1-termm)
4628 C The ratio between the gamma-independent and gamma-dependent lobes of
4629 C the distribution is a Gaussian function of thet_pred_mean too.
4630 diffak=gthet(2,it)-thet_pred_mean
4631 ratak=diffak/gthet(3,it)**2
4632 ak=dexp(gthet(1,it)-0.5D0*diffak*ratak)
4633 C Let's differentiate it in thet_pred_mean NOW.
4635 C Now put together the distribution terms to make complete distribution.
4636 termexp=term1+ak*term2
4637 termpre=sigc+ak*sig0i
4638 C Contribution of the bending energy from this theta is just the -log of
4639 C the sum of the contributions from the two lobes and the pre-exponential
4640 C factor. Simple enough, isn't it?
4641 ethetai=(-dlog(termexp)-termm+dlog(termpre))
4642 C NOW the derivatives!!!
4643 C 6/6/97 Take into account the deformation.
4644 E_theta=(delthec*sigcsq*term1
4645 & +ak*delthe0*sig0inv*term2)/termexp
4646 E_tc=((sigtc+aktc*sig0i)/termpre
4647 & -((delthec*sigcsq+delthec*delthec*sigsqtc)*term1+
4648 & aktc*term2)/termexp)
4651 c-----------------------------------------------------------------------------
4652 subroutine mixder(thetai,thet_pred_mean,theta0i,E_tc_t)
4653 implicit real*8 (a-h,o-z)
4654 include 'DIMENSIONS'
4655 include 'COMMON.LOCAL'
4656 include 'COMMON.IOUNITS'
4657 common /calcthet/ term1,term2,termm,diffak,ratak,
4658 & ak,aktc,termpre,termexp,sigc,sig0i,time11,time12,sigcsq,
4659 & delthe0,sig0inv,sigtc,sigsqtc,delthec,it
4660 delthec=thetai-thet_pred_mean
4661 delthe0=thetai-theta0i
4662 C "Thank you" to MAPLE (probably spared one day of hand-differentiation).
4663 t3 = thetai-thet_pred_mean
4667 t14 = t12+t6*sigsqtc
4669 t21 = thetai-theta0i
4675 E_tc_t = -((sigcsq+2.D0*t3*sigsqtc)*t9-t14*sigcsq*t3*t16*t9
4676 & -aktc*sig0inv*t27)/t32+(t14*t9+aktc*t26)/t40
4677 & *(-t12*t9-ak*sig0inv*t27)
4681 C--------------------------------------------------------------------------
4682 subroutine ebend(etheta,ethetacnstr)
4684 C Evaluate the virtual-bond-angle energy given the virtual-bond dihedral
4685 C angles gamma and its derivatives in consecutive thetas and gammas.
4686 C ab initio-derived potentials from
4687 c Kozlowska et al., J. Phys.: Condens. Matter 19 (2007) 285203
4689 implicit real*8 (a-h,o-z)
4690 include 'DIMENSIONS'
4691 include 'COMMON.LOCAL'
4692 include 'COMMON.GEO'
4693 include 'COMMON.INTERACT'
4694 include 'COMMON.DERIV'
4695 include 'COMMON.VAR'
4696 include 'COMMON.CHAIN'
4697 include 'COMMON.IOUNITS'
4698 include 'COMMON.NAMES'
4699 include 'COMMON.FFIELD'
4700 include 'COMMON.CONTROL'
4701 include 'COMMON.TORCNSTR'
4702 double precision coskt(mmaxtheterm),sinkt(mmaxtheterm),
4703 & cosph1(maxsingle),sinph1(maxsingle),cosph2(maxsingle),
4704 & sinph2(maxsingle),cosph1ph2(maxdouble,maxdouble),
4705 & sinph1ph2(maxdouble,maxdouble)
4706 logical lprn /.false./, lprn1 /.false./
4708 do i=ithet_start,ithet_end
4709 if ((itype(i-1).eq.ntyp1).or.(itype(i-2).eq.ntyp1).or.
4710 &(itype(i).eq.ntyp1)) cycle
4711 C print *,i,theta(i)
4712 if (iabs(itype(i+1)).eq.20) iblock=2
4713 if (iabs(itype(i+1)).ne.20) iblock=1
4717 theti2=0.5d0*theta(i)
4718 ityp2=ithetyp((itype(i-1)))
4720 coskt(k)=dcos(k*theti2)
4721 sinkt(k)=dsin(k*theti2)
4725 if (i.gt.3 .and. itype(i-3).ne.ntyp1) then
4728 if (phii.ne.phii) phii=150.0
4732 ityp1=ithetyp((itype(i-2)))
4733 C propagation of chirality for glycine type
4735 cosph1(k)=dcos(k*phii)
4736 sinph1(k)=dsin(k*phii)
4741 ityp1=ithetyp((itype(i-2)))
4746 if (i.lt.nres .and. itype(i+1).ne.ntyp1) then
4749 if (phii1.ne.phii1) phii1=150.0
4754 ityp3=ithetyp((itype(i)))
4756 cosph2(k)=dcos(k*phii1)
4757 sinph2(k)=dsin(k*phii1)
4761 ityp3=ithetyp((itype(i)))
4767 ethetai=aa0thet(ityp1,ityp2,ityp3,iblock)
4770 ccl=cosph1(l)*cosph2(k-l)
4771 ssl=sinph1(l)*sinph2(k-l)
4772 scl=sinph1(l)*cosph2(k-l)
4773 csl=cosph1(l)*sinph2(k-l)
4774 cosph1ph2(l,k)=ccl-ssl
4775 cosph1ph2(k,l)=ccl+ssl
4776 sinph1ph2(l,k)=scl+csl
4777 sinph1ph2(k,l)=scl-csl
4781 write (iout,*) "i",i," ityp1",ityp1," ityp2",ityp2,
4782 & " ityp3",ityp3," theti2",theti2," phii",phii," phii1",phii1
4783 write (iout,*) "coskt and sinkt"
4785 write (iout,*) k,coskt(k),sinkt(k)
4789 ethetai=ethetai+aathet(k,ityp1,ityp2,ityp3,iblock)*sinkt(k)
4790 dethetai=dethetai+0.5d0*k*aathet(k,ityp1,ityp2,ityp3,iblock)
4793 & write (iout,*) "k",k,"
4794 & aathet",aathet(k,ityp1,ityp2,ityp3,iblock),
4795 & " ethetai",ethetai
4798 write (iout,*) "cosph and sinph"
4800 write (iout,*) k,cosph1(k),sinph1(k),cosph2(k),sinph2(k)
4802 write (iout,*) "cosph1ph2 and sinph2ph2"
4805 write (iout,*) l,k,cosph1ph2(l,k),cosph1ph2(k,l),
4806 & sinph1ph2(l,k),sinph1ph2(k,l)
4809 write(iout,*) "ethetai",ethetai
4814 aux=bbthet(k,m,ityp1,ityp2,ityp3,iblock)*cosph1(k)
4815 & +ccthet(k,m,ityp1,ityp2,ityp3,iblock)*sinph1(k)
4816 & +ddthet(k,m,ityp1,ityp2,ityp3,iblock)*cosph2(k)
4817 & +eethet(k,m,ityp1,ityp2,ityp3,iblock)*sinph2(k)
4818 ethetai=ethetai+sinkt(m)*aux
4819 dethetai=dethetai+0.5d0*m*aux*coskt(m)
4820 dephii=dephii+k*sinkt(m)*(
4821 & ccthet(k,m,ityp1,ityp2,ityp3,iblock)*cosph1(k)-
4822 & bbthet(k,m,ityp1,ityp2,ityp3,iblock)*sinph1(k))
4823 dephii1=dephii1+k*sinkt(m)*(
4824 & eethet(k,m,ityp1,ityp2,ityp3,iblock)*cosph2(k)-
4825 & ddthet(k,m,ityp1,ityp2,ityp3,iblock)*sinph2(k))
4827 & write (iout,*) "m",m," k",k," bbthet",
4828 & bbthet(k,m,ityp1,ityp2,ityp3,iblock)," ccthet",
4829 & ccthet(k,m,ityp1,ityp2,ityp3,iblock)," ddthet",
4830 & ddthet(k,m,ityp1,ityp2,ityp3,iblock)," eethet",
4831 & eethet(k,m,ityp1,ityp2,ityp3,iblock)," ethetai",ethetai
4832 C print *,"tu",cosph1(k),sinph1(k),cosph2(k),sinph2(k)
4835 C print *,"cosph1", (cosph1(k), k=1,nsingle)
4836 C print *,"cosph2", (cosph2(k), k=1,nsingle)
4837 C print *,"sinph1", (sinph1(k), k=1,nsingle)
4838 C print *,"sinph2", (sinph2(k), k=1,nsingle)
4840 & write(iout,*) "ethetai",ethetai
4841 C print *,"tu",cosph1(k),sinph1(k),cosph2(k),sinph2(k)
4845 aux=ffthet(l,k,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(l,k)+
4846 & ffthet(k,l,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(k,l)+
4847 & ggthet(l,k,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(l,k)+
4848 & ggthet(k,l,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(k,l)
4849 ethetai=ethetai+sinkt(m)*aux
4850 dethetai=dethetai+0.5d0*m*coskt(m)*aux
4851 dephii=dephii+l*sinkt(m)*(
4852 & -ffthet(l,k,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(l,k)-
4853 & ffthet(k,l,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(k,l)+
4854 & ggthet(l,k,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(l,k)+
4855 & ggthet(k,l,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(k,l))
4856 dephii1=dephii1+(k-l)*sinkt(m)*(
4857 & -ffthet(l,k,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(l,k)+
4858 & ffthet(k,l,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(k,l)+
4859 & ggthet(l,k,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(l,k)-
4860 & ggthet(k,l,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(k,l))
4862 write (iout,*) "m",m," k",k," l",l," ffthet",
4863 & ffthet(l,k,m,ityp1,ityp2,ityp3,iblock),
4864 & ffthet(k,l,m,ityp1,ityp2,ityp3,iblock)," ggthet",
4865 & ggthet(l,k,m,ityp1,ityp2,ityp3,iblock),
4866 & ggthet(k,l,m,ityp1,ityp2,ityp3,iblock),
4867 & " ethetai",ethetai
4868 write (iout,*) cosph1ph2(l,k)*sinkt(m),
4869 & cosph1ph2(k,l)*sinkt(m),
4870 & sinph1ph2(l,k)*sinkt(m),sinph1ph2(k,l)*sinkt(m)
4879 & write (iout,'(i2,3f8.1,9h ethetai ,f10.5)')
4880 & i,theta(i)*rad2deg,phii*rad2deg,
4881 & phii1*rad2deg,ethetai
4883 etheta=etheta+ethetai
4884 if (i.gt.3) gloc(i-3,icg)=gloc(i-3,icg)+wang*dephii
4885 if (i.lt.nres) gloc(i-2,icg)=gloc(i-2,icg)+wang*dephii1
4886 gloc(nphi+i-2,icg)=gloc(nphi+i-2,icg)+wang*dethetai
4890 C print *,ithetaconstr_start,ithetaconstr_end,"TU"
4891 do i=ithetaconstr_start,ithetaconstr_end
4892 itheta=itheta_constr(i)
4893 thetiii=theta(itheta)
4894 difi=pinorm(thetiii-theta_constr0(i))
4895 if (difi.gt.theta_drange(i)) then
4896 difi=difi-theta_drange(i)
4897 ethetacnstr=ethetacnstr+0.25d0*for_thet_constr(i)*difi**4
4898 gloc(itheta+nphi-2,icg)=gloc(itheta+nphi-2,icg)
4899 & +for_thet_constr(i)*difi**3
4900 else if (difi.lt.-drange(i)) then
4902 ethetacnstr=ethetacnstr+0.25d0*for_thet_constr(i)*difi**4
4903 gloc(itheta+nphi-2,icg)=gloc(itheta+nphi-2,icg)
4904 & +for_thet_constr(i)*difi**3
4908 if (energy_dec) then
4909 write (iout,'(a6,2i5,4f8.3,2e14.5)') "ethetc",
4910 & i,itheta,rad2deg*thetiii,
4911 & rad2deg*theta_constr0(i), rad2deg*theta_drange(i),
4912 & rad2deg*difi,0.25d0*for_thet_constr(i)*difi**4,
4913 & gloc(itheta+nphi-2,icg)
4921 c-----------------------------------------------------------------------------
4922 subroutine esc(escloc)
4923 C Calculate the local energy of a side chain and its derivatives in the
4924 C corresponding virtual-bond valence angles THETA and the spherical angles
4926 implicit real*8 (a-h,o-z)
4927 include 'DIMENSIONS'
4928 include 'COMMON.GEO'
4929 include 'COMMON.LOCAL'
4930 include 'COMMON.VAR'
4931 include 'COMMON.INTERACT'
4932 include 'COMMON.DERIV'
4933 include 'COMMON.CHAIN'
4934 include 'COMMON.IOUNITS'
4935 include 'COMMON.NAMES'
4936 include 'COMMON.FFIELD'
4937 include 'COMMON.CONTROL'
4938 double precision x(3),dersc(3),xemp(3),dersc0(3),dersc1(3),
4939 & ddersc0(3),ddummy(3),xtemp(3),temp(3)
4940 common /sccalc/ time11,time12,time112,theti,it,nlobit
4943 c write (iout,'(a)') 'ESC'
4944 do i=loc_start,loc_end
4946 if (it.eq.ntyp1) cycle
4947 if (it.eq.10) goto 1
4948 nlobit=nlob(iabs(it))
4949 c print *,'i=',i,' it=',it,' nlobit=',nlobit
4950 c write (iout,*) 'i=',i,' ssa=',ssa,' ssad=',ssad
4951 theti=theta(i+1)-pipol
4956 if (x(2).gt.pi-delta) then
4960 call enesc(xtemp,escloci0,dersc0,ddersc0,.true.)
4962 call enesc(xtemp,escloci1,dersc1,ddummy,.false.)
4963 call spline1(x(2),pi-delta,delta,escloci0,escloci1,dersc0(2),
4965 call spline2(x(2),pi-delta,delta,dersc0(1),dersc1(1),
4966 & ddersc0(1),dersc(1))
4967 call spline2(x(2),pi-delta,delta,dersc0(3),dersc1(3),
4968 & ddersc0(3),dersc(3))
4970 call enesc_bound(xtemp,esclocbi0,dersc0,dersc12,.true.)
4972 call enesc_bound(xtemp,esclocbi1,dersc1,chuju,.false.)
4973 call spline1(x(2),pi-delta,delta,esclocbi0,esclocbi1,
4974 & dersc0(2),esclocbi,dersc02)
4975 call spline2(x(2),pi-delta,delta,dersc0(1),dersc1(1),
4977 call splinthet(x(2),0.5d0*delta,ss,ssd)
4982 dersc(k)=ss*dersc(k)+(1.0d0-ss)*dersc0(k)
4984 dersc(2)=dersc(2)+ssd*(escloci-esclocbi)
4985 c write (iout,*) 'i=',i,x(2)*rad2deg,escloci0,escloci,
4987 escloci=ss*escloci+(1.0d0-ss)*esclocbi
4989 c write (iout,*) escloci
4990 else if (x(2).lt.delta) then
4994 call enesc(xtemp,escloci0,dersc0,ddersc0,.true.)
4996 call enesc(xtemp,escloci1,dersc1,ddummy,.false.)
4997 call spline1(x(2),delta,-delta,escloci0,escloci1,dersc0(2),
4999 call spline2(x(2),delta,-delta,dersc0(1),dersc1(1),
5000 & ddersc0(1),dersc(1))
5001 call spline2(x(2),delta,-delta,dersc0(3),dersc1(3),
5002 & ddersc0(3),dersc(3))
5004 call enesc_bound(xtemp,esclocbi0,dersc0,dersc12,.true.)
5006 call enesc_bound(xtemp,esclocbi1,dersc1,chuju,.false.)
5007 call spline1(x(2),delta,-delta,esclocbi0,esclocbi1,
5008 & dersc0(2),esclocbi,dersc02)
5009 call spline2(x(2),delta,-delta,dersc0(1),dersc1(1),
5014 call splinthet(x(2),0.5d0*delta,ss,ssd)
5016 dersc(k)=ss*dersc(k)+(1.0d0-ss)*dersc0(k)
5018 dersc(2)=dersc(2)+ssd*(escloci-esclocbi)
5019 c write (iout,*) 'i=',i,x(2)*rad2deg,escloci0,escloci,
5021 escloci=ss*escloci+(1.0d0-ss)*esclocbi
5022 c write (iout,*) escloci
5024 call enesc(x,escloci,dersc,ddummy,.false.)
5027 escloc=escloc+escloci
5028 if (energy_dec) write (iout,'(a6,i5,0pf7.3)')
5029 & 'escloc',i,escloci
5030 c write (iout,*) 'i=',i,' escloci=',escloci,' dersc=',dersc
5032 gloc(nphi+i-1,icg)=gloc(nphi+i-1,icg)+
5034 gloc(ialph(i,1),icg)=wscloc*dersc(2)
5035 gloc(ialph(i,1)+nside,icg)=wscloc*dersc(3)
5040 C---------------------------------------------------------------------------
5041 subroutine enesc(x,escloci,dersc,ddersc,mixed)
5042 implicit real*8 (a-h,o-z)
5043 include 'DIMENSIONS'
5044 include 'COMMON.GEO'
5045 include 'COMMON.LOCAL'
5046 include 'COMMON.IOUNITS'
5047 common /sccalc/ time11,time12,time112,theti,it,nlobit
5048 double precision x(3),z(3),Ax(3,maxlob,-1:1),dersc(3),ddersc(3)
5049 double precision contr(maxlob,-1:1)
5051 c write (iout,*) 'it=',it,' nlobit=',nlobit
5055 if (mixed) ddersc(j)=0.0d0
5059 C Because of periodicity of the dependence of the SC energy in omega we have
5060 C to add up the contributions from x(3)-2*pi, x(3), and x(3+2*pi).
5061 C To avoid underflows, first compute & store the exponents.
5069 z(k)=x(k)-censc(k,j,it)
5074 Axk=Axk+gaussc(l,k,j,it)*z(l)
5080 expfac=expfac+Ax(k,j,iii)*z(k)
5088 C As in the case of ebend, we want to avoid underflows in exponentiation and
5089 C subsequent NaNs and INFs in energy calculation.
5090 C Find the largest exponent
5094 if (emin.gt.contr(j,iii)) emin=contr(j,iii)
5098 cd print *,'it=',it,' emin=',emin
5100 C Compute the contribution to SC energy and derivatives
5105 adexp=bsc(j,iabs(it))-0.5D0*contr(j,iii)+emin
5106 if(adexp.ne.adexp) adexp=1.0
5109 expfac=dexp(bsc(j,iabs(it))-0.5D0*contr(j,iii)+emin)
5111 cd print *,'j=',j,' expfac=',expfac
5112 escloc_i=escloc_i+expfac
5114 dersc(k)=dersc(k)+Ax(k,j,iii)*expfac
5118 ddersc(k)=ddersc(k)+(-Ax(2,j,iii)*Ax(k,j,iii)
5119 & +gaussc(k,2,j,it))*expfac
5126 dersc(1)=dersc(1)/cos(theti)**2
5127 ddersc(1)=ddersc(1)/cos(theti)**2
5130 escloci=-(dlog(escloc_i)-emin)
5132 dersc(j)=dersc(j)/escloc_i
5136 ddersc(j)=(ddersc(j)/escloc_i+dersc(2)*dersc(j))
5141 C------------------------------------------------------------------------------
5142 subroutine enesc_bound(x,escloci,dersc,dersc12,mixed)
5143 implicit real*8 (a-h,o-z)
5144 include 'DIMENSIONS'
5145 include 'COMMON.GEO'
5146 include 'COMMON.LOCAL'
5147 include 'COMMON.IOUNITS'
5148 common /sccalc/ time11,time12,time112,theti,it,nlobit
5149 double precision x(3),z(3),Ax(3,maxlob),dersc(3)
5150 double precision contr(maxlob)
5161 z(k)=x(k)-censc(k,j,it)
5167 Axk=Axk+gaussc(l,k,j,it)*z(l)
5173 expfac=expfac+Ax(k,j)*z(k)
5178 C As in the case of ebend, we want to avoid underflows in exponentiation and
5179 C subsequent NaNs and INFs in energy calculation.
5180 C Find the largest exponent
5183 if (emin.gt.contr(j)) emin=contr(j)
5187 C Compute the contribution to SC energy and derivatives
5191 expfac=dexp(bsc(j,iabs(it))-0.5D0*contr(j)+emin)
5192 escloc_i=escloc_i+expfac
5194 dersc(k)=dersc(k)+Ax(k,j)*expfac
5196 if (mixed) dersc12=dersc12+(-Ax(2,j)*Ax(1,j)
5197 & +gaussc(1,2,j,it))*expfac
5201 dersc(1)=dersc(1)/cos(theti)**2
5202 dersc12=dersc12/cos(theti)**2
5203 escloci=-(dlog(escloc_i)-emin)
5205 dersc(j)=dersc(j)/escloc_i
5207 if (mixed) dersc12=(dersc12/escloc_i+dersc(2)*dersc(1))
5211 c----------------------------------------------------------------------------------
5212 subroutine esc(escloc)
5213 C Calculate the local energy of a side chain and its derivatives in the
5214 C corresponding virtual-bond valence angles THETA and the spherical angles
5215 C ALPHA and OMEGA derived from AM1 all-atom calculations.
5216 C added by Urszula Kozlowska. 07/11/2007
5218 implicit real*8 (a-h,o-z)
5219 include 'DIMENSIONS'
5220 include 'COMMON.GEO'
5221 include 'COMMON.LOCAL'
5222 include 'COMMON.VAR'
5223 include 'COMMON.SCROT'
5224 include 'COMMON.INTERACT'
5225 include 'COMMON.DERIV'
5226 include 'COMMON.CHAIN'
5227 include 'COMMON.IOUNITS'
5228 include 'COMMON.NAMES'
5229 include 'COMMON.FFIELD'
5230 include 'COMMON.CONTROL'
5231 include 'COMMON.VECTORS'
5232 double precision x_prime(3),y_prime(3),z_prime(3)
5233 & , sumene,dsc_i,dp2_i,x(65),
5234 & xx,yy,zz,sumene1,sumene2,sumene3,sumene4,s1,s1_6,s2,s2_6,
5235 & de_dxx,de_dyy,de_dzz,de_dt
5236 double precision s1_t,s1_6_t,s2_t,s2_6_t
5238 & dXX_Ci1(3),dYY_Ci1(3),dZZ_Ci1(3),dXX_Ci(3),
5239 & dYY_Ci(3),dZZ_Ci(3),dXX_XYZ(3),dYY_XYZ(3),dZZ_XYZ(3),
5240 & dt_dCi(3),dt_dCi1(3)
5241 common /sccalc/ time11,time12,time112,theti,it,nlobit
5244 do i=loc_start,loc_end
5245 if (itype(i).eq.ntyp1) cycle
5246 costtab(i+1) =dcos(theta(i+1))
5247 sinttab(i+1) =dsqrt(1-costtab(i+1)*costtab(i+1))
5248 cost2tab(i+1)=dsqrt(0.5d0*(1.0d0+costtab(i+1)))
5249 sint2tab(i+1)=dsqrt(0.5d0*(1.0d0-costtab(i+1)))
5250 cosfac2=0.5d0/(1.0d0+costtab(i+1))
5251 cosfac=dsqrt(cosfac2)
5252 sinfac2=0.5d0/(1.0d0-costtab(i+1))
5253 sinfac=dsqrt(sinfac2)
5255 if (it.eq.10) goto 1
5257 C Compute the axes of tghe local cartesian coordinates system; store in
5258 c x_prime, y_prime and z_prime
5265 C write(2,*) "dc_norm", dc_norm(1,i+nres),dc_norm(2,i+nres),
5266 C & dc_norm(3,i+nres)
5268 x_prime(j) = (dc_norm(j,i) - dc_norm(j,i-1))*cosfac
5269 y_prime(j) = (dc_norm(j,i) + dc_norm(j,i-1))*sinfac
5272 z_prime(j) = -uz(j,i-1)*dsign(1.0d0,dfloat(itype(i)))
5275 c write (2,*) "x_prime",(x_prime(j),j=1,3)
5276 c write (2,*) "y_prime",(y_prime(j),j=1,3)
5277 c write (2,*) "z_prime",(z_prime(j),j=1,3)
5278 c write (2,*) "xx",scalar(x_prime(1),x_prime(1)),
5279 c & " xy",scalar(x_prime(1),y_prime(1)),
5280 c & " xz",scalar(x_prime(1),z_prime(1)),
5281 c & " yy",scalar(y_prime(1),y_prime(1)),
5282 c & " yz",scalar(y_prime(1),z_prime(1)),
5283 c & " zz",scalar(z_prime(1),z_prime(1))
5285 C Transform the unit vector of the ith side-chain centroid, dC_norm(*,i),
5286 C to local coordinate system. Store in xx, yy, zz.
5292 xx = xx + x_prime(j)*dc_norm(j,i+nres)
5293 yy = yy + y_prime(j)*dc_norm(j,i+nres)
5294 zz = zz + z_prime(j)*dc_norm(j,i+nres)
5301 C Compute the energy of the ith side cbain
5303 c write (2,*) "xx",xx," yy",yy," zz",zz
5306 x(j) = sc_parmin(j,it)
5309 Cc diagnostics - remove later
5311 yy1 = dsin(alph(2))*dcos(omeg(2))
5312 zz1 = -dsign(1.0,dfloat(itype(i)))*dsin(alph(2))*dsin(omeg(2))
5313 write(2,'(3f8.1,3f9.3,1x,3f9.3)')
5314 & alph(2)*rad2deg,omeg(2)*rad2deg,theta(3)*rad2deg,xx,yy,zz,
5316 C," --- ", xx_w,yy_w,zz_w
5319 sumene1= x(1)+ x(2)*xx+ x(3)*yy+ x(4)*zz+ x(5)*xx**2
5320 & + x(6)*yy**2+ x(7)*zz**2+ x(8)*xx*zz+ x(9)*xx*yy
5322 sumene2= x(11) + x(12)*xx + x(13)*yy + x(14)*zz + x(15)*xx**2
5323 & + x(16)*yy**2 + x(17)*zz**2 + x(18)*xx*zz + x(19)*xx*yy
5325 sumene3= x(21) +x(22)*xx +x(23)*yy +x(24)*zz +x(25)*xx**2
5326 & +x(26)*yy**2 +x(27)*zz**2 +x(28)*xx*zz +x(29)*xx*yy
5327 & +x(30)*yy*zz +x(31)*xx**3 +x(32)*yy**3 +x(33)*zz**3
5328 & +x(34)*(xx**2)*yy +x(35)*(xx**2)*zz +x(36)*(yy**2)*xx
5329 & +x(37)*(yy**2)*zz +x(38)*(zz**2)*xx +x(39)*(zz**2)*yy
5331 sumene4= x(41) +x(42)*xx +x(43)*yy +x(44)*zz +x(45)*xx**2
5332 & +x(46)*yy**2 +x(47)*zz**2 +x(48)*xx*zz +x(49)*xx*yy
5333 & +x(50)*yy*zz +x(51)*xx**3 +x(52)*yy**3 +x(53)*zz**3
5334 & +x(54)*(xx**2)*yy +x(55)*(xx**2)*zz +x(56)*(yy**2)*xx
5335 & +x(57)*(yy**2)*zz +x(58)*(zz**2)*xx +x(59)*(zz**2)*yy
5337 dsc_i = 0.743d0+x(61)
5339 dscp1=dsqrt(dsc_i**2+dp2_i**2-2*dsc_i*dp2_i
5340 & *(xx*cost2tab(i+1)+yy*sint2tab(i+1)))
5341 dscp2=dsqrt(dsc_i**2+dp2_i**2-2*dsc_i*dp2_i
5342 & *(xx*cost2tab(i+1)-yy*sint2tab(i+1)))
5343 s1=(1+x(63))/(0.1d0 + dscp1)
5344 s1_6=(1+x(64))/(0.1d0 + dscp1**6)
5345 s2=(1+x(65))/(0.1d0 + dscp2)
5346 s2_6=(1+x(65))/(0.1d0 + dscp2**6)
5347 sumene = ( sumene3*sint2tab(i+1) + sumene1)*(s1+s1_6)
5348 & + (sumene4*cost2tab(i+1) +sumene2)*(s2+s2_6)
5349 c write(2,'(i2," sumene",7f9.3)') i,sumene1,sumene2,sumene3,
5351 c & dscp1,dscp2,sumene
5352 c sumene = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
5353 escloc = escloc + sumene
5354 c write (2,*) "i",i," escloc",sumene,escloc,it,itype(i)
5359 C This section to check the numerical derivatives of the energy of ith side
5360 C chain in xx, yy, zz, and theta. Use the -DDEBUG compiler option or insert
5361 C #define DEBUG in the code to turn it on.
5363 write (2,*) "sumene =",sumene
5367 write (2,*) xx,yy,zz
5368 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
5369 de_dxx_num=(sumenep-sumene)/aincr
5371 write (2,*) "xx+ sumene from enesc=",sumenep
5374 write (2,*) xx,yy,zz
5375 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
5376 de_dyy_num=(sumenep-sumene)/aincr
5378 write (2,*) "yy+ sumene from enesc=",sumenep
5381 write (2,*) xx,yy,zz
5382 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
5383 de_dzz_num=(sumenep-sumene)/aincr
5385 write (2,*) "zz+ sumene from enesc=",sumenep
5386 costsave=cost2tab(i+1)
5387 sintsave=sint2tab(i+1)
5388 cost2tab(i+1)=dcos(0.5d0*(theta(i+1)+aincr))
5389 sint2tab(i+1)=dsin(0.5d0*(theta(i+1)+aincr))
5390 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
5391 de_dt_num=(sumenep-sumene)/aincr
5392 write (2,*) " t+ sumene from enesc=",sumenep
5393 cost2tab(i+1)=costsave
5394 sint2tab(i+1)=sintsave
5395 C End of diagnostics section.
5398 C Compute the gradient of esc
5400 c zz=zz*dsign(1.0,dfloat(itype(i)))
5401 pom_s1=(1.0d0+x(63))/(0.1d0 + dscp1)**2
5402 pom_s16=6*(1.0d0+x(64))/(0.1d0 + dscp1**6)**2
5403 pom_s2=(1.0d0+x(65))/(0.1d0 + dscp2)**2
5404 pom_s26=6*(1.0d0+x(65))/(0.1d0 + dscp2**6)**2
5405 pom_dx=dsc_i*dp2_i*cost2tab(i+1)
5406 pom_dy=dsc_i*dp2_i*sint2tab(i+1)
5407 pom_dt1=-0.5d0*dsc_i*dp2_i*(xx*sint2tab(i+1)-yy*cost2tab(i+1))
5408 pom_dt2=-0.5d0*dsc_i*dp2_i*(xx*sint2tab(i+1)+yy*cost2tab(i+1))
5409 pom1=(sumene3*sint2tab(i+1)+sumene1)
5410 & *(pom_s1/dscp1+pom_s16*dscp1**4)
5411 pom2=(sumene4*cost2tab(i+1)+sumene2)
5412 & *(pom_s2/dscp2+pom_s26*dscp2**4)
5413 sumene1x=x(2)+2*x(5)*xx+x(8)*zz+ x(9)*yy
5414 sumene3x=x(22)+2*x(25)*xx+x(28)*zz+x(29)*yy+3*x(31)*xx**2
5415 & +2*x(34)*xx*yy +2*x(35)*xx*zz +x(36)*(yy**2) +x(38)*(zz**2)
5417 sumene2x=x(12)+2*x(15)*xx+x(18)*zz+ x(19)*yy
5418 sumene4x=x(42)+2*x(45)*xx +x(48)*zz +x(49)*yy +3*x(51)*xx**2
5419 & +2*x(54)*xx*yy+2*x(55)*xx*zz+x(56)*(yy**2)+x(58)*(zz**2)
5421 de_dxx =(sumene1x+sumene3x*sint2tab(i+1))*(s1+s1_6)
5422 & +(sumene2x+sumene4x*cost2tab(i+1))*(s2+s2_6)
5423 & +(pom1+pom2)*pom_dx
5425 write(2,*), "de_dxx = ", de_dxx,de_dxx_num,itype(i)
5428 sumene1y=x(3) + 2*x(6)*yy + x(9)*xx + x(10)*zz
5429 sumene3y=x(23) +2*x(26)*yy +x(29)*xx +x(30)*zz +3*x(32)*yy**2
5430 & +x(34)*(xx**2) +2*x(36)*yy*xx +2*x(37)*yy*zz +x(39)*(zz**2)
5432 sumene2y=x(13) + 2*x(16)*yy + x(19)*xx + x(20)*zz
5433 sumene4y=x(43)+2*x(46)*yy+x(49)*xx +x(50)*zz
5434 & +3*x(52)*yy**2+x(54)*xx**2+2*x(56)*yy*xx +2*x(57)*yy*zz
5435 & +x(59)*zz**2 +x(60)*xx*zz
5436 de_dyy =(sumene1y+sumene3y*sint2tab(i+1))*(s1+s1_6)
5437 & +(sumene2y+sumene4y*cost2tab(i+1))*(s2+s2_6)
5438 & +(pom1-pom2)*pom_dy
5440 write(2,*), "de_dyy = ", de_dyy,de_dyy_num,itype(i)
5443 de_dzz =(x(24) +2*x(27)*zz +x(28)*xx +x(30)*yy
5444 & +3*x(33)*zz**2 +x(35)*xx**2 +x(37)*yy**2 +2*x(38)*zz*xx
5445 & +2*x(39)*zz*yy +x(40)*xx*yy)*sint2tab(i+1)*(s1+s1_6)
5446 & +(x(4) + 2*x(7)*zz+ x(8)*xx + x(10)*yy)*(s1+s1_6)
5447 & +(x(44)+2*x(47)*zz +x(48)*xx +x(50)*yy +3*x(53)*zz**2
5448 & +x(55)*xx**2 +x(57)*(yy**2)+2*x(58)*zz*xx +2*x(59)*zz*yy
5449 & +x(60)*xx*yy)*cost2tab(i+1)*(s2+s2_6)
5450 & + ( x(14) + 2*x(17)*zz+ x(18)*xx + x(20)*yy)*(s2+s2_6)
5452 write(2,*), "de_dzz = ", de_dzz,de_dzz_num,itype(i)
5455 de_dt = 0.5d0*sumene3*cost2tab(i+1)*(s1+s1_6)
5456 & -0.5d0*sumene4*sint2tab(i+1)*(s2+s2_6)
5457 & +pom1*pom_dt1+pom2*pom_dt2
5459 write(2,*), "de_dt = ", de_dt,de_dt_num,itype(i)
5464 cossc=scalar(dc_norm(1,i),dc_norm(1,i+nres))
5465 cossc1=scalar(dc_norm(1,i-1),dc_norm(1,i+nres))
5466 cosfac2xx=cosfac2*xx
5467 sinfac2yy=sinfac2*yy
5469 dt_dCi(k) = -(dc_norm(k,i-1)+costtab(i+1)*dc_norm(k,i))*
5471 dt_dCi1(k)= -(dc_norm(k,i)+costtab(i+1)*dc_norm(k,i-1))*
5473 pom=(dC_norm(k,i+nres)-cossc*dC_norm(k,i))*vbld_inv(i+1)
5474 pom1=(dC_norm(k,i+nres)-cossc1*dC_norm(k,i-1))*vbld_inv(i)
5475 c write (iout,*) "i",i," k",k," pom",pom," pom1",pom1,
5476 c & " dt_dCi",dt_dCi(k)," dt_dCi1",dt_dCi1(k)
5477 c write (iout,*) "dC_norm",(dC_norm(j,i),j=1,3),
5478 c & (dC_norm(j,i-1),j=1,3)," vbld_inv",vbld_inv(i+1),vbld_inv(i)
5479 dXX_Ci(k)=pom*cosfac-dt_dCi(k)*cosfac2xx
5480 dXX_Ci1(k)=-pom1*cosfac-dt_dCi1(k)*cosfac2xx
5481 dYY_Ci(k)=pom*sinfac+dt_dCi(k)*sinfac2yy
5482 dYY_Ci1(k)=pom1*sinfac+dt_dCi1(k)*sinfac2yy
5486 dZZ_Ci(k)=dZZ_Ci(k)-uzgrad(j,k,2,i-1)
5487 & *dsign(1.0d0,dfloat(itype(i)))*dC_norm(j,i+nres)
5488 dZZ_Ci1(k)=dZZ_Ci1(k)-uzgrad(j,k,1,i-1)
5489 & *dsign(1.0d0,dfloat(itype(i)))*dC_norm(j,i+nres)
5492 dXX_XYZ(k)=vbld_inv(i+nres)*(x_prime(k)-xx*dC_norm(k,i+nres))
5493 dYY_XYZ(k)=vbld_inv(i+nres)*(y_prime(k)-yy*dC_norm(k,i+nres))
5494 dZZ_XYZ(k)=vbld_inv(i+nres)*
5495 & (z_prime(k)-zz*dC_norm(k,i+nres))
5497 dt_dCi(k) = -dt_dCi(k)/sinttab(i+1)
5498 dt_dCi1(k)= -dt_dCi1(k)/sinttab(i+1)
5502 dXX_Ctab(k,i)=dXX_Ci(k)
5503 dXX_C1tab(k,i)=dXX_Ci1(k)
5504 dYY_Ctab(k,i)=dYY_Ci(k)
5505 dYY_C1tab(k,i)=dYY_Ci1(k)
5506 dZZ_Ctab(k,i)=dZZ_Ci(k)
5507 dZZ_C1tab(k,i)=dZZ_Ci1(k)
5508 dXX_XYZtab(k,i)=dXX_XYZ(k)
5509 dYY_XYZtab(k,i)=dYY_XYZ(k)
5510 dZZ_XYZtab(k,i)=dZZ_XYZ(k)
5514 c write (iout,*) "k",k," dxx_ci1",dxx_ci1(k)," dyy_ci1",
5515 c & dyy_ci1(k)," dzz_ci1",dzz_ci1(k)
5516 c write (iout,*) "k",k," dxx_ci",dxx_ci(k)," dyy_ci",
5517 c & dyy_ci(k)," dzz_ci",dzz_ci(k)
5518 c write (iout,*) "k",k," dt_dci",dt_dci(k)," dt_dci",
5520 c write (iout,*) "k",k," dxx_XYZ",dxx_XYZ(k)," dyy_XYZ",
5521 c & dyy_XYZ(k)," dzz_XYZ",dzz_XYZ(k)
5522 gscloc(k,i-1)=gscloc(k,i-1)+de_dxx*dxx_ci1(k)
5523 & +de_dyy*dyy_ci1(k)+de_dzz*dzz_ci1(k)+de_dt*dt_dCi1(k)
5524 gscloc(k,i)=gscloc(k,i)+de_dxx*dxx_Ci(k)
5525 & +de_dyy*dyy_Ci(k)+de_dzz*dzz_Ci(k)+de_dt*dt_dCi(k)
5526 gsclocx(k,i)= de_dxx*dxx_XYZ(k)
5527 & +de_dyy*dyy_XYZ(k)+de_dzz*dzz_XYZ(k)
5529 c write(iout,*) "ENERGY GRAD = ", (gscloc(k,i-1),k=1,3),
5530 c & (gscloc(k,i),k=1,3),(gsclocx(k,i),k=1,3)
5532 C to check gradient call subroutine check_grad
5538 c------------------------------------------------------------------------------
5539 double precision function enesc(x,xx,yy,zz,cost2,sint2)
5541 double precision x(65),xx,yy,zz,cost2,sint2,sumene1,sumene2,
5542 & sumene3,sumene4,sumene,dsc_i,dp2_i,dscp1,dscp2,s1,s1_6,s2,s2_6
5543 sumene1= x(1)+ x(2)*xx+ x(3)*yy+ x(4)*zz+ x(5)*xx**2
5544 & + x(6)*yy**2+ x(7)*zz**2+ x(8)*xx*zz+ x(9)*xx*yy
5546 sumene2= x(11) + x(12)*xx + x(13)*yy + x(14)*zz + x(15)*xx**2
5547 & + x(16)*yy**2 + x(17)*zz**2 + x(18)*xx*zz + x(19)*xx*yy
5549 sumene3= x(21) +x(22)*xx +x(23)*yy +x(24)*zz +x(25)*xx**2
5550 & +x(26)*yy**2 +x(27)*zz**2 +x(28)*xx*zz +x(29)*xx*yy
5551 & +x(30)*yy*zz +x(31)*xx**3 +x(32)*yy**3 +x(33)*zz**3
5552 & +x(34)*(xx**2)*yy +x(35)*(xx**2)*zz +x(36)*(yy**2)*xx
5553 & +x(37)*(yy**2)*zz +x(38)*(zz**2)*xx +x(39)*(zz**2)*yy
5555 sumene4= x(41) +x(42)*xx +x(43)*yy +x(44)*zz +x(45)*xx**2
5556 & +x(46)*yy**2 +x(47)*zz**2 +x(48)*xx*zz +x(49)*xx*yy
5557 & +x(50)*yy*zz +x(51)*xx**3 +x(52)*yy**3 +x(53)*zz**3
5558 & +x(54)*(xx**2)*yy +x(55)*(xx**2)*zz +x(56)*(yy**2)*xx
5559 & +x(57)*(yy**2)*zz +x(58)*(zz**2)*xx +x(59)*(zz**2)*yy
5561 dsc_i = 0.743d0+x(61)
5563 dscp1=dsqrt(dsc_i**2+dp2_i**2-2*dsc_i*dp2_i
5564 & *(xx*cost2+yy*sint2))
5565 dscp2=dsqrt(dsc_i**2+dp2_i**2-2*dsc_i*dp2_i
5566 & *(xx*cost2-yy*sint2))
5567 s1=(1+x(63))/(0.1d0 + dscp1)
5568 s1_6=(1+x(64))/(0.1d0 + dscp1**6)
5569 s2=(1+x(65))/(0.1d0 + dscp2)
5570 s2_6=(1+x(65))/(0.1d0 + dscp2**6)
5571 sumene = ( sumene3*sint2 + sumene1)*(s1+s1_6)
5572 & + (sumene4*cost2 +sumene2)*(s2+s2_6)
5577 c------------------------------------------------------------------------------
5578 subroutine gcont(rij,r0ij,eps0ij,delta,fcont,fprimcont)
5580 C This procedure calculates two-body contact function g(rij) and its derivative:
5583 C g(rij) = esp0ij*(-0.9375*x+0.625*x**3-0.1875*x**5) ! -1 =< x =< 1
5586 C where x=(rij-r0ij)/delta
5588 C rij - interbody distance, r0ij - contact distance, eps0ij - contact energy
5591 double precision rij,r0ij,eps0ij,fcont,fprimcont
5592 double precision x,x2,x4,delta
5596 if (x.lt.-1.0D0) then
5599 else if (x.le.1.0D0) then
5602 fcont=eps0ij*(x*(-0.9375D0+0.6250D0*x2-0.1875D0*x4)+0.5D0)
5603 fprimcont=eps0ij * (-0.9375D0+1.8750D0*x2-0.9375D0*x4)/delta
5610 c------------------------------------------------------------------------------
5611 subroutine splinthet(theti,delta,ss,ssder)
5612 implicit real*8 (a-h,o-z)
5613 include 'DIMENSIONS'
5614 include 'COMMON.VAR'
5615 include 'COMMON.GEO'
5618 if (theti.gt.pipol) then
5619 call gcont(theti,thetup,1.0d0,delta,ss,ssder)
5621 call gcont(-theti,-thetlow,1.0d0,delta,ss,ssder)
5626 c------------------------------------------------------------------------------
5627 subroutine spline1(x,x0,delta,f0,f1,fprim0,f,fprim)
5629 double precision x,x0,delta,f0,f1,fprim0,f,fprim
5630 double precision ksi,ksi2,ksi3,a1,a2,a3
5631 a1=fprim0*delta/(f1-f0)
5637 f=f0+(f1-f0)*ksi*(a1+ksi*(a2+a3*ksi))
5638 fprim=(f1-f0)/delta*(a1+ksi*(2*a2+3*ksi*a3))
5641 c------------------------------------------------------------------------------
5642 subroutine spline2(x,x0,delta,f0x,f1x,fprim0x,fx)
5644 double precision x,x0,delta,f0x,f1x,fprim0x,fx
5645 double precision ksi,ksi2,ksi3,a1,a2,a3
5650 a2=3*(f1x-f0x)-2*fprim0x*delta
5651 a3=fprim0x*delta-2*(f1x-f0x)
5652 fx=f0x+a1*ksi+a2*ksi2+a3*ksi3
5655 C-----------------------------------------------------------------------------
5657 C-----------------------------------------------------------------------------
5658 subroutine etor(etors,edihcnstr)
5659 implicit real*8 (a-h,o-z)
5660 include 'DIMENSIONS'
5661 include 'COMMON.VAR'
5662 include 'COMMON.GEO'
5663 include 'COMMON.LOCAL'
5664 include 'COMMON.TORSION'
5665 include 'COMMON.INTERACT'
5666 include 'COMMON.DERIV'
5667 include 'COMMON.CHAIN'
5668 include 'COMMON.NAMES'
5669 include 'COMMON.IOUNITS'
5670 include 'COMMON.FFIELD'
5671 include 'COMMON.TORCNSTR'
5672 include 'COMMON.CONTROL'
5674 C Set lprn=.true. for debugging
5678 do i=iphi_start,iphi_end
5680 if (itype(i-2).eq.ntyp1.or. itype(i-1).eq.ntyp1
5681 & .or. itype(i).eq.ntyp1) cycle
5682 itori=itortyp(itype(i-2))
5683 itori1=itortyp(itype(i-1))
5686 C Proline-Proline pair is a special case...
5687 if (itori.eq.3 .and. itori1.eq.3) then
5688 if (phii.gt.-dwapi3) then
5690 fac=1.0D0/(1.0D0-cosphi)
5691 etorsi=v1(1,3,3)*fac
5692 etorsi=etorsi+etorsi
5693 etors=etors+etorsi-v1(1,3,3)
5694 if (energy_dec) etors_ii=etors_ii+etorsi-v1(1,3,3)
5695 gloci=gloci-3*fac*etorsi*dsin(3*phii)
5698 v1ij=v1(j+1,itori,itori1)
5699 v2ij=v2(j+1,itori,itori1)
5702 etors=etors+v1ij*cosphi+v2ij*sinphi+dabs(v1ij)+dabs(v2ij)
5703 if (energy_dec) etors_ii=etors_ii+
5704 & v2ij*sinphi+dabs(v1ij)+dabs(v2ij)
5705 gloci=gloci+j*(v2ij*cosphi-v1ij*sinphi)
5709 v1ij=v1(j,itori,itori1)
5710 v2ij=v2(j,itori,itori1)
5713 etors=etors+v1ij*cosphi+v2ij*sinphi+dabs(v1ij)+dabs(v2ij)
5714 if (energy_dec) etors_ii=etors_ii+
5715 & v1ij*cosphi+v2ij*sinphi+dabs(v1ij)+dabs(v2ij)
5716 gloci=gloci+j*(v2ij*cosphi-v1ij*sinphi)
5719 if (energy_dec) write (iout,'(a6,i5,0pf7.3)')
5722 & write (iout,'(2(a3,2x,i3,2x),2i3,6f8.3/26x,6f8.3/)')
5723 & restyp(itype(i-2)),i-2,restyp(itype(i-1)),i-1,itori,itori1,
5724 & (v1(j,itori,itori1),j=1,6),(v2(j,itori,itori1),j=1,6)
5725 gloc(i-3,icg)=gloc(i-3,icg)+wtor*gloci
5726 c write (iout,*) 'i=',i,' gloc=',gloc(i-3,icg)
5728 ! 6/20/98 - dihedral angle constraints
5731 itori=idih_constr(i)
5734 if (difi.gt.drange(i)) then
5736 edihcnstr=edihcnstr+0.25d0*ftors(i)*difi**4
5737 gloc(itori-3,icg)=gloc(itori-3,icg)+ftors(i)*difi**3
5738 else if (difi.lt.-drange(i)) then
5740 edihcnstr=edihcnstr+0.25d0*ftors(i)**difi**4
5741 gloc(itori-3,icg)=gloc(itori-3,icg)+ftors(i)*difi**3
5743 ! write (iout,'(2i5,2f8.3,2e14.5)') i,itori,rad2deg*phii,
5744 ! & rad2deg*difi,0.25d0*ftors*difi**4,gloc(itori-3,icg)
5746 ! write (iout,*) 'edihcnstr',edihcnstr
5749 c------------------------------------------------------------------------------
5750 subroutine etor_d(etors_d)
5754 c----------------------------------------------------------------------------
5756 subroutine etor(etors,edihcnstr)
5757 implicit real*8 (a-h,o-z)
5758 include 'DIMENSIONS'
5759 include 'COMMON.VAR'
5760 include 'COMMON.GEO'
5761 include 'COMMON.LOCAL'
5762 include 'COMMON.TORSION'
5763 include 'COMMON.INTERACT'
5764 include 'COMMON.DERIV'
5765 include 'COMMON.CHAIN'
5766 include 'COMMON.NAMES'
5767 include 'COMMON.IOUNITS'
5768 include 'COMMON.FFIELD'
5769 include 'COMMON.TORCNSTR'
5770 include 'COMMON.CONTROL'
5772 C Set lprn=.true. for debugging
5776 do i=iphi_start,iphi_end
5777 if (itype(i-2).eq.ntyp1 .or. itype(i-1).eq.ntyp1
5778 & .or. itype(i).eq.ntyp1) cycle
5780 if (iabs(itype(i)).eq.20) then
5785 itori=itortyp(itype(i-2))
5786 itori1=itortyp(itype(i-1))
5789 C Regular cosine and sine terms
5790 do j=1,nterm(itori,itori1,iblock)
5791 v1ij=v1(j,itori,itori1,iblock)
5792 v2ij=v2(j,itori,itori1,iblock)
5795 etors=etors+v1ij*cosphi+v2ij*sinphi
5796 if (energy_dec) etors_ii=etors_ii+
5797 & v1ij*cosphi+v2ij*sinphi
5798 gloci=gloci+j*(v2ij*cosphi-v1ij*sinphi)
5802 C E = SUM ----------------------------------- - v1
5803 C [v2 cos(phi/2)+v3 sin(phi/2)]^2 + 1
5805 cosphi=dcos(0.5d0*phii)
5806 sinphi=dsin(0.5d0*phii)
5807 do j=1,nlor(itori,itori1,iblock)
5808 vl1ij=vlor1(j,itori,itori1)
5809 vl2ij=vlor2(j,itori,itori1)
5810 vl3ij=vlor3(j,itori,itori1)
5811 pom=vl2ij*cosphi+vl3ij*sinphi
5812 pom1=1.0d0/(pom*pom+1.0d0)
5813 etors=etors+vl1ij*pom1
5814 if (energy_dec) etors_ii=etors_ii+
5817 gloci=gloci+vl1ij*(vl3ij*cosphi-vl2ij*sinphi)*pom
5819 C Subtract the constant term
5820 etors=etors-v0(itori,itori1,iblock)
5821 if (energy_dec) write (iout,'(a6,i5,0pf7.3)')
5822 & 'etor',i,etors_ii-v0(itori,itori1,iblock)
5824 & write (iout,'(2(a3,2x,i3,2x),2i3,6f8.3/26x,6f8.3/)')
5825 & restyp(itype(i-2)),i-2,restyp(itype(i-1)),i-1,itori,itori1,
5826 & (v1(j,itori,itori1,iblock),j=1,6),
5827 & (v2(j,itori,itori1,iblock),j=1,6)
5828 gloc(i-3,icg)=gloc(i-3,icg)+wtor*gloci
5829 c write (iout,*) 'i=',i,' gloc=',gloc(i-3,icg)
5831 ! 6/20/98 - dihedral angle constraints
5833 c do i=1,ndih_constr
5834 do i=idihconstr_start,idihconstr_end
5835 itori=idih_constr(i)
5837 difi=pinorm(phii-phi0(i))
5838 if (difi.gt.drange(i)) then
5840 edihcnstr=edihcnstr+0.25d0*ftors(i)*difi**4
5841 gloc(itori-3,icg)=gloc(itori-3,icg)+ftors(i)*difi**3
5842 else if (difi.lt.-drange(i)) then
5844 edihcnstr=edihcnstr+0.25d0*ftors(i)*difi**4
5845 gloc(itori-3,icg)=gloc(itori-3,icg)+ftors(i)*difi**3
5849 if (energy_dec) then
5850 write (iout,'(a6,2i5,4f8.3,2e14.5)') "edihc",
5851 & i,itori,rad2deg*phii,
5852 & rad2deg*phi0(i), rad2deg*drange(i),
5853 & rad2deg*difi,0.25d0*ftors(i)*difi**4,gloc(itori-3,icg)
5856 cd write (iout,*) 'edihcnstr',edihcnstr
5859 c----------------------------------------------------------------------------
5860 subroutine etor_d(etors_d)
5861 C 6/23/01 Compute double torsional energy
5862 implicit real*8 (a-h,o-z)
5863 include 'DIMENSIONS'
5864 include 'COMMON.VAR'
5865 include 'COMMON.GEO'
5866 include 'COMMON.LOCAL'
5867 include 'COMMON.TORSION'
5868 include 'COMMON.INTERACT'
5869 include 'COMMON.DERIV'
5870 include 'COMMON.CHAIN'
5871 include 'COMMON.NAMES'
5872 include 'COMMON.IOUNITS'
5873 include 'COMMON.FFIELD'
5874 include 'COMMON.TORCNSTR'
5876 C Set lprn=.true. for debugging
5880 c write(iout,*) "a tu??"
5881 do i=iphid_start,iphid_end
5882 if (itype(i-2).eq.ntyp1 .or. itype(i-1).eq.ntyp1
5883 & .or. itype(i).eq.ntyp1 .or. itype(i+1).eq.ntyp1) cycle
5884 itori=itortyp(itype(i-2))
5885 itori1=itortyp(itype(i-1))
5886 itori2=itortyp(itype(i))
5892 if (iabs(itype(i+1)).eq.20) iblock=2
5894 C Regular cosine and sine terms
5895 do j=1,ntermd_1(itori,itori1,itori2,iblock)
5896 v1cij=v1c(1,j,itori,itori1,itori2,iblock)
5897 v1sij=v1s(1,j,itori,itori1,itori2,iblock)
5898 v2cij=v1c(2,j,itori,itori1,itori2,iblock)
5899 v2sij=v1s(2,j,itori,itori1,itori2,iblock)
5900 cosphi1=dcos(j*phii)
5901 sinphi1=dsin(j*phii)
5902 cosphi2=dcos(j*phii1)
5903 sinphi2=dsin(j*phii1)
5904 etors_d=etors_d+v1cij*cosphi1+v1sij*sinphi1+
5905 & v2cij*cosphi2+v2sij*sinphi2
5906 gloci1=gloci1+j*(v1sij*cosphi1-v1cij*sinphi1)
5907 gloci2=gloci2+j*(v2sij*cosphi2-v2cij*sinphi2)
5909 do k=2,ntermd_2(itori,itori1,itori2,iblock)
5911 v1cdij = v2c(k,l,itori,itori1,itori2,iblock)
5912 v2cdij = v2c(l,k,itori,itori1,itori2,iblock)
5913 v1sdij = v2s(k,l,itori,itori1,itori2,iblock)
5914 v2sdij = v2s(l,k,itori,itori1,itori2,iblock)
5915 cosphi1p2=dcos(l*phii+(k-l)*phii1)
5916 cosphi1m2=dcos(l*phii-(k-l)*phii1)
5917 sinphi1p2=dsin(l*phii+(k-l)*phii1)
5918 sinphi1m2=dsin(l*phii-(k-l)*phii1)
5919 etors_d=etors_d+v1cdij*cosphi1p2+v2cdij*cosphi1m2+
5920 & v1sdij*sinphi1p2+v2sdij*sinphi1m2
5921 gloci1=gloci1+l*(v1sdij*cosphi1p2+v2sdij*cosphi1m2
5922 & -v1cdij*sinphi1p2-v2cdij*sinphi1m2)
5923 gloci2=gloci2+(k-l)*(v1sdij*cosphi1p2-v2sdij*cosphi1m2
5924 & -v1cdij*sinphi1p2+v2cdij*sinphi1m2)
5927 gloc(i-3,icg)=gloc(i-3,icg)+wtor_d*gloci1
5928 gloc(i-2,icg)=gloc(i-2,icg)+wtor_d*gloci2
5933 c------------------------------------------------------------------------------
5934 subroutine eback_sc_corr(esccor)
5935 c 7/21/2007 Correlations between the backbone-local and side-chain-local
5936 c conformational states; temporarily implemented as differences
5937 c between UNRES torsional potentials (dependent on three types of
5938 c residues) and the torsional potentials dependent on all 20 types
5939 c of residues computed from AM1 energy surfaces of terminally-blocked
5940 c amino-acid residues.
5941 implicit real*8 (a-h,o-z)
5942 include 'DIMENSIONS'
5943 include 'COMMON.VAR'
5944 include 'COMMON.GEO'
5945 include 'COMMON.LOCAL'
5946 include 'COMMON.TORSION'
5947 include 'COMMON.SCCOR'
5948 include 'COMMON.INTERACT'
5949 include 'COMMON.DERIV'
5950 include 'COMMON.CHAIN'
5951 include 'COMMON.NAMES'
5952 include 'COMMON.IOUNITS'
5953 include 'COMMON.FFIELD'
5954 include 'COMMON.CONTROL'
5956 C Set lprn=.true. for debugging
5959 c write (iout,*) "EBACK_SC_COR",itau_start,itau_end
5961 do i=itau_start,itau_end
5962 if ((itype(i-2).eq.ntyp1).or.(itype(i-1).eq.ntyp1)) cycle
5964 isccori=isccortyp(itype(i-2))
5965 isccori1=isccortyp(itype(i-1))
5966 c write (iout,*) "EBACK_SC_COR",i,nterm_sccor(isccori,isccori1)
5968 do intertyp=1,3 !intertyp
5969 cc Added 09 May 2012 (Adasko)
5970 cc Intertyp means interaction type of backbone mainchain correlation:
5971 c 1 = SC...Ca...Ca...Ca
5972 c 2 = Ca...Ca...Ca...SC
5973 c 3 = SC...Ca...Ca...SCi
5975 if (((intertyp.eq.3).and.((itype(i-2).eq.10).or.
5976 & (itype(i-1).eq.10).or.(itype(i-2).eq.ntyp1).or.
5977 & (itype(i-1).eq.ntyp1)))
5978 & .or. ((intertyp.eq.1).and.((itype(i-2).eq.10)
5979 & .or.(itype(i-2).eq.ntyp1).or.(itype(i-1).eq.ntyp1)
5980 & .or.(itype(i).eq.ntyp1)))
5981 & .or.((intertyp.eq.2).and.((itype(i-1).eq.10).or.
5982 & (itype(i-1).eq.ntyp1).or.(itype(i-2).eq.ntyp1).or.
5983 & (itype(i-3).eq.ntyp1)))) cycle
5984 if ((intertyp.eq.2).and.(i.eq.4).and.(itype(1).eq.ntyp1)) cycle
5985 if ((intertyp.eq.1).and.(i.eq.nres).and.(itype(nres).eq.ntyp1))
5987 do j=1,nterm_sccor(isccori,isccori1)
5988 v1ij=v1sccor(j,intertyp,isccori,isccori1)
5989 v2ij=v2sccor(j,intertyp,isccori,isccori1)
5990 cosphi=dcos(j*tauangle(intertyp,i))
5991 sinphi=dsin(j*tauangle(intertyp,i))
5992 esccor=esccor+v1ij*cosphi+v2ij*sinphi
5993 gloci=gloci+j*(v2ij*cosphi-v1ij*sinphi)
5995 c write (iout,*) "EBACK_SC_COR",i,v1ij*cosphi+v2ij*sinphi,intertyp
5996 gloc_sc(intertyp,i-3,icg)=gloc_sc(intertyp,i-3,icg)+wsccor*gloci
5998 & write (iout,'(2(a3,2x,i3,2x),2i3,6f8.3/26x,6f8.3/)')
5999 & restyp(itype(i-2)),i-2,restyp(itype(i-1)),i-1,isccori,isccori1,
6000 & (v1sccor(j,intertyp,isccori,isccori1),j=1,6)
6001 & ,(v2sccor(j,intertyp,isccori,isccori1),j=1,6)
6002 gsccor_loc(i-3)=gsccor_loc(i-3)+gloci
6008 c----------------------------------------------------------------------------
6009 subroutine multibody(ecorr)
6010 C This subroutine calculates multi-body contributions to energy following
6011 C the idea of Skolnick et al. If side chains I and J make a contact and
6012 C at the same time side chains I+1 and J+1 make a contact, an extra
6013 C contribution equal to sqrt(eps(i,j)*eps(i+1,j+1)) is added.
6014 implicit real*8 (a-h,o-z)
6015 include 'DIMENSIONS'
6016 include 'COMMON.IOUNITS'
6017 include 'COMMON.DERIV'
6018 include 'COMMON.INTERACT'
6019 include 'COMMON.CONTACTS'
6020 double precision gx(3),gx1(3)
6023 C Set lprn=.true. for debugging
6027 write (iout,'(a)') 'Contact function values:'
6029 write (iout,'(i2,20(1x,i2,f10.5))')
6030 & i,(jcont(j,i),facont(j,i),j=1,num_cont(i))
6045 num_conti=num_cont(i)
6046 num_conti1=num_cont(i1)
6051 if (j1.eq.j+ishift .or. j1.eq.j-ishift) then
6052 cd write(iout,*)'i=',i,' j=',j,' i1=',i1,' j1=',j1,
6053 cd & ' ishift=',ishift
6054 C Contacts I--J and I+ISHIFT--J+-ISHIFT1 occur simultaneously.
6055 C The system gains extra energy.
6056 ecorr=ecorr+esccorr(i,j,i1,j1,jj,kk)
6057 endif ! j1==j+-ishift
6066 c------------------------------------------------------------------------------
6067 double precision function esccorr(i,j,k,l,jj,kk)
6068 implicit real*8 (a-h,o-z)
6069 include 'DIMENSIONS'
6070 include 'COMMON.IOUNITS'
6071 include 'COMMON.DERIV'
6072 include 'COMMON.INTERACT'
6073 include 'COMMON.CONTACTS'
6074 double precision gx(3),gx1(3)
6079 cd write (iout,'(4i5,3f10.5)') i,j,k,l,eij,ekl,-eij*ekl
6080 C Calculate the multi-body contribution to energy.
6081 C Calculate multi-body contributions to the gradient.
6082 cd write (iout,'(2(2i3,3f10.5))')i,j,(gacont(m,jj,i),m=1,3),
6083 cd & k,l,(gacont(m,kk,k),m=1,3)
6085 gx(m) =ekl*gacont(m,jj,i)
6086 gx1(m)=eij*gacont(m,kk,k)
6087 gradxorr(m,i)=gradxorr(m,i)-gx(m)
6088 gradxorr(m,j)=gradxorr(m,j)+gx(m)
6089 gradxorr(m,k)=gradxorr(m,k)-gx1(m)
6090 gradxorr(m,l)=gradxorr(m,l)+gx1(m)
6094 gradcorr(ll,m)=gradcorr(ll,m)+gx(ll)
6099 gradcorr(ll,m)=gradcorr(ll,m)+gx1(ll)
6105 c------------------------------------------------------------------------------
6106 subroutine multibody_hb(ecorr,ecorr5,ecorr6,n_corr,n_corr1)
6107 C This subroutine calculates multi-body contributions to hydrogen-bonding
6108 implicit real*8 (a-h,o-z)
6109 include 'DIMENSIONS'
6110 include 'COMMON.IOUNITS'
6113 parameter (max_cont=maxconts)
6114 parameter (max_dim=26)
6115 integer source,CorrelType,CorrelID,CorrelType1,CorrelID1,Error
6116 double precision zapas(max_dim,maxconts,max_fg_procs),
6117 & zapas_recv(max_dim,maxconts,max_fg_procs)
6118 common /przechowalnia/ zapas
6119 integer status(MPI_STATUS_SIZE),req(maxconts*2),
6120 & status_array(MPI_STATUS_SIZE,maxconts*2)
6122 include 'COMMON.SETUP'
6123 include 'COMMON.FFIELD'
6124 include 'COMMON.DERIV'
6125 include 'COMMON.INTERACT'
6126 include 'COMMON.CONTACTS'
6127 include 'COMMON.CONTROL'
6128 include 'COMMON.LOCAL'
6129 double precision gx(3),gx1(3),time00
6132 C Set lprn=.true. for debugging
6137 if (nfgtasks.le.1) goto 30
6139 write (iout,'(a)') 'Contact function values before RECEIVE:'
6141 write (iout,'(2i3,50(1x,i2,f5.2))')
6142 & i,num_cont_hb(i),(jcont_hb(j,i),facont_hb(j,i),
6143 & j=1,num_cont_hb(i))
6147 do i=1,ntask_cont_from
6150 do i=1,ntask_cont_to
6153 c write (iout,*) "ntask_cont_from",ntask_cont_from," ntask_cont_to",
6155 C Make the list of contacts to send to send to other procesors
6156 c write (iout,*) "limits",max0(iturn4_end-1,iatel_s),iturn3_end
6158 do i=iturn3_start,iturn3_end
6159 c write (iout,*) "make contact list turn3",i," num_cont",
6161 call add_hb_contact(i,i+2,iturn3_sent_local(1,i))
6163 do i=iturn4_start,iturn4_end
6164 c write (iout,*) "make contact list turn4",i," num_cont",
6166 call add_hb_contact(i,i+3,iturn4_sent_local(1,i))
6170 c write (iout,*) "make contact list longrange",i,ii," num_cont",
6172 do j=1,num_cont_hb(i)
6175 iproc=iint_sent_local(k,jjc,ii)
6176 c write (iout,*) "i",i," j",j," k",k," jjc",jjc," iproc",iproc
6177 if (iproc.gt.0) then
6178 ncont_sent(iproc)=ncont_sent(iproc)+1
6179 nn=ncont_sent(iproc)
6181 zapas(2,nn,iproc)=jjc
6182 zapas(3,nn,iproc)=facont_hb(j,i)
6183 zapas(4,nn,iproc)=ees0p(j,i)
6184 zapas(5,nn,iproc)=ees0m(j,i)
6185 zapas(6,nn,iproc)=gacont_hbr(1,j,i)
6186 zapas(7,nn,iproc)=gacont_hbr(2,j,i)
6187 zapas(8,nn,iproc)=gacont_hbr(3,j,i)
6188 zapas(9,nn,iproc)=gacontm_hb1(1,j,i)
6189 zapas(10,nn,iproc)=gacontm_hb1(2,j,i)
6190 zapas(11,nn,iproc)=gacontm_hb1(3,j,i)
6191 zapas(12,nn,iproc)=gacontp_hb1(1,j,i)
6192 zapas(13,nn,iproc)=gacontp_hb1(2,j,i)
6193 zapas(14,nn,iproc)=gacontp_hb1(3,j,i)
6194 zapas(15,nn,iproc)=gacontm_hb2(1,j,i)
6195 zapas(16,nn,iproc)=gacontm_hb2(2,j,i)
6196 zapas(17,nn,iproc)=gacontm_hb2(3,j,i)
6197 zapas(18,nn,iproc)=gacontp_hb2(1,j,i)
6198 zapas(19,nn,iproc)=gacontp_hb2(2,j,i)
6199 zapas(20,nn,iproc)=gacontp_hb2(3,j,i)
6200 zapas(21,nn,iproc)=gacontm_hb3(1,j,i)
6201 zapas(22,nn,iproc)=gacontm_hb3(2,j,i)
6202 zapas(23,nn,iproc)=gacontm_hb3(3,j,i)
6203 zapas(24,nn,iproc)=gacontp_hb3(1,j,i)
6204 zapas(25,nn,iproc)=gacontp_hb3(2,j,i)
6205 zapas(26,nn,iproc)=gacontp_hb3(3,j,i)
6212 & "Numbers of contacts to be sent to other processors",
6213 & (ncont_sent(i),i=1,ntask_cont_to)
6214 write (iout,*) "Contacts sent"
6215 do ii=1,ntask_cont_to
6217 iproc=itask_cont_to(ii)
6218 write (iout,*) nn," contacts to processor",iproc,
6219 & " of CONT_TO_COMM group"
6221 write(iout,'(2f5.0,4f10.5)')(zapas(j,i,ii),j=1,5)
6229 CorrelID1=nfgtasks+fg_rank+1
6231 C Receive the numbers of needed contacts from other processors
6232 do ii=1,ntask_cont_from
6233 iproc=itask_cont_from(ii)
6235 call MPI_Irecv(ncont_recv(ii),1,MPI_INTEGER,iproc,CorrelType,
6236 & FG_COMM,req(ireq),IERR)
6238 c write (iout,*) "IRECV ended"
6240 C Send the number of contacts needed by other processors
6241 do ii=1,ntask_cont_to
6242 iproc=itask_cont_to(ii)
6244 call MPI_Isend(ncont_sent(ii),1,MPI_INTEGER,iproc,CorrelType,
6245 & FG_COMM,req(ireq),IERR)
6247 c write (iout,*) "ISEND ended"
6248 c write (iout,*) "number of requests (nn)",ireq
6251 & call MPI_Waitall(ireq,req,status_array,ierr)
6253 c & "Numbers of contacts to be received from other processors",
6254 c & (ncont_recv(i),i=1,ntask_cont_from)
6258 do ii=1,ntask_cont_from
6259 iproc=itask_cont_from(ii)
6261 c write (iout,*) "Receiving",nn," contacts from processor",iproc,
6262 c & " of CONT_TO_COMM group"
6266 call MPI_Irecv(zapas_recv(1,1,ii),nn*max_dim,
6267 & MPI_DOUBLE_PRECISION,iproc,CorrelType1,FG_COMM,req(ireq),IERR)
6268 c write (iout,*) "ireq,req",ireq,req(ireq)
6271 C Send the contacts to processors that need them
6272 do ii=1,ntask_cont_to
6273 iproc=itask_cont_to(ii)
6275 c write (iout,*) nn," contacts to processor",iproc,
6276 c & " of CONT_TO_COMM group"
6279 call MPI_Isend(zapas(1,1,ii),nn*max_dim,MPI_DOUBLE_PRECISION,
6280 & iproc,CorrelType1,FG_COMM,req(ireq),IERR)
6281 c write (iout,*) "ireq,req",ireq,req(ireq)
6283 c write(iout,'(2f5.0,4f10.5)')(zapas(j,i,ii),j=1,5)
6287 c write (iout,*) "number of requests (contacts)",ireq
6288 c write (iout,*) "req",(req(i),i=1,4)
6291 & call MPI_Waitall(ireq,req,status_array,ierr)
6292 do iii=1,ntask_cont_from
6293 iproc=itask_cont_from(iii)
6296 write (iout,*) "Received",nn," contacts from processor",iproc,
6297 & " of CONT_FROM_COMM group"
6300 write(iout,'(2f5.0,4f10.5)')(zapas_recv(j,i,iii),j=1,5)
6305 ii=zapas_recv(1,i,iii)
6306 c Flag the received contacts to prevent double-counting
6307 jj=-zapas_recv(2,i,iii)
6308 c write (iout,*) "iii",iii," i",i," ii",ii," jj",jj
6310 nnn=num_cont_hb(ii)+1
6313 facont_hb(nnn,ii)=zapas_recv(3,i,iii)
6314 ees0p(nnn,ii)=zapas_recv(4,i,iii)
6315 ees0m(nnn,ii)=zapas_recv(5,i,iii)
6316 gacont_hbr(1,nnn,ii)=zapas_recv(6,i,iii)
6317 gacont_hbr(2,nnn,ii)=zapas_recv(7,i,iii)
6318 gacont_hbr(3,nnn,ii)=zapas_recv(8,i,iii)
6319 gacontm_hb1(1,nnn,ii)=zapas_recv(9,i,iii)
6320 gacontm_hb1(2,nnn,ii)=zapas_recv(10,i,iii)
6321 gacontm_hb1(3,nnn,ii)=zapas_recv(11,i,iii)
6322 gacontp_hb1(1,nnn,ii)=zapas_recv(12,i,iii)
6323 gacontp_hb1(2,nnn,ii)=zapas_recv(13,i,iii)
6324 gacontp_hb1(3,nnn,ii)=zapas_recv(14,i,iii)
6325 gacontm_hb2(1,nnn,ii)=zapas_recv(15,i,iii)
6326 gacontm_hb2(2,nnn,ii)=zapas_recv(16,i,iii)
6327 gacontm_hb2(3,nnn,ii)=zapas_recv(17,i,iii)
6328 gacontp_hb2(1,nnn,ii)=zapas_recv(18,i,iii)
6329 gacontp_hb2(2,nnn,ii)=zapas_recv(19,i,iii)
6330 gacontp_hb2(3,nnn,ii)=zapas_recv(20,i,iii)
6331 gacontm_hb3(1,nnn,ii)=zapas_recv(21,i,iii)
6332 gacontm_hb3(2,nnn,ii)=zapas_recv(22,i,iii)
6333 gacontm_hb3(3,nnn,ii)=zapas_recv(23,i,iii)
6334 gacontp_hb3(1,nnn,ii)=zapas_recv(24,i,iii)
6335 gacontp_hb3(2,nnn,ii)=zapas_recv(25,i,iii)
6336 gacontp_hb3(3,nnn,ii)=zapas_recv(26,i,iii)
6341 write (iout,'(a)') 'Contact function values after receive:'
6343 write (iout,'(2i3,50(1x,i3,f5.2))')
6344 & i,num_cont_hb(i),(jcont_hb(j,i),facont_hb(j,i),
6345 & j=1,num_cont_hb(i))
6352 write (iout,'(a)') 'Contact function values:'
6354 write (iout,'(2i3,50(1x,i3,f5.2))')
6355 & i,num_cont_hb(i),(jcont_hb(j,i),facont_hb(j,i),
6356 & j=1,num_cont_hb(i))
6360 C Remove the loop below after debugging !!!
6367 C Calculate the local-electrostatic correlation terms
6368 do i=min0(iatel_s,iturn4_start),max0(iatel_e,iturn3_end)
6370 num_conti=num_cont_hb(i)
6371 num_conti1=num_cont_hb(i+1)
6378 c write (iout,*) 'i=',i,' j=',j,' i1=',i1,' j1=',j1,
6379 c & ' jj=',jj,' kk=',kk
6380 if ((j.gt.0 .and. j1.gt.0 .or. j.gt.0 .and. j1.lt.0
6381 & .or. j.lt.0 .and. j1.gt.0) .and.
6382 & (jp1.eq.jp+1 .or. jp1.eq.jp-1)) then
6383 C Contacts I-J and (I+1)-(J+1) or (I+1)-(J-1) occur simultaneously.
6384 C The system gains extra energy.
6385 ecorr=ecorr+ehbcorr(i,jp,i+1,jp1,jj,kk,0.72D0,0.32D0)
6386 if (energy_dec) write (iout,'(a6,2i5,0pf7.3)')
6387 & 'ecorrh',i,j,ehbcorr(i,j,i+1,j1,jj,kk,0.72D0,0.32D0)
6389 else if (j1.eq.j) then
6390 C Contacts I-J and I-(J+1) occur simultaneously.
6391 C The system loses extra energy.
6392 c ecorr=ecorr+ehbcorr(i,j,i+1,j,jj,kk,0.60D0,-0.40D0)
6397 c write (iout,*) 'i=',i,' j=',j,' i1=',i1,' j1=',j1,
6398 c & ' jj=',jj,' kk=',kk
6400 C Contacts I-J and (I+1)-J occur simultaneously.
6401 C The system loses extra energy.
6402 c ecorr=ecorr+ehbcorr(i,j,i,j+1,jj,kk,0.60D0,-0.40D0)
6409 c------------------------------------------------------------------------------
6410 subroutine add_hb_contact(ii,jj,itask)
6411 implicit real*8 (a-h,o-z)
6412 include "DIMENSIONS"
6413 include "COMMON.IOUNITS"
6416 parameter (max_cont=maxconts)
6417 parameter (max_dim=26)
6418 include "COMMON.CONTACTS"
6419 double precision zapas(max_dim,maxconts,max_fg_procs),
6420 & zapas_recv(max_dim,maxconts,max_fg_procs)
6421 common /przechowalnia/ zapas
6422 integer i,j,ii,jj,iproc,itask(4),nn
6423 c write (iout,*) "itask",itask
6426 if (iproc.gt.0) then
6427 do j=1,num_cont_hb(ii)
6429 c write (iout,*) "i",ii," j",jj," jjc",jjc
6431 ncont_sent(iproc)=ncont_sent(iproc)+1
6432 nn=ncont_sent(iproc)
6433 zapas(1,nn,iproc)=ii
6434 zapas(2,nn,iproc)=jjc
6435 zapas(3,nn,iproc)=facont_hb(j,ii)
6436 zapas(4,nn,iproc)=ees0p(j,ii)
6437 zapas(5,nn,iproc)=ees0m(j,ii)
6438 zapas(6,nn,iproc)=gacont_hbr(1,j,ii)
6439 zapas(7,nn,iproc)=gacont_hbr(2,j,ii)
6440 zapas(8,nn,iproc)=gacont_hbr(3,j,ii)
6441 zapas(9,nn,iproc)=gacontm_hb1(1,j,ii)
6442 zapas(10,nn,iproc)=gacontm_hb1(2,j,ii)
6443 zapas(11,nn,iproc)=gacontm_hb1(3,j,ii)
6444 zapas(12,nn,iproc)=gacontp_hb1(1,j,ii)
6445 zapas(13,nn,iproc)=gacontp_hb1(2,j,ii)
6446 zapas(14,nn,iproc)=gacontp_hb1(3,j,ii)
6447 zapas(15,nn,iproc)=gacontm_hb2(1,j,ii)
6448 zapas(16,nn,iproc)=gacontm_hb2(2,j,ii)
6449 zapas(17,nn,iproc)=gacontm_hb2(3,j,ii)
6450 zapas(18,nn,iproc)=gacontp_hb2(1,j,ii)
6451 zapas(19,nn,iproc)=gacontp_hb2(2,j,ii)
6452 zapas(20,nn,iproc)=gacontp_hb2(3,j,ii)
6453 zapas(21,nn,iproc)=gacontm_hb3(1,j,ii)
6454 zapas(22,nn,iproc)=gacontm_hb3(2,j,ii)
6455 zapas(23,nn,iproc)=gacontm_hb3(3,j,ii)
6456 zapas(24,nn,iproc)=gacontp_hb3(1,j,ii)
6457 zapas(25,nn,iproc)=gacontp_hb3(2,j,ii)
6458 zapas(26,nn,iproc)=gacontp_hb3(3,j,ii)
6466 c------------------------------------------------------------------------------
6467 subroutine multibody_eello(ecorr,ecorr5,ecorr6,eturn6,n_corr,
6469 C This subroutine calculates multi-body contributions to hydrogen-bonding
6470 implicit real*8 (a-h,o-z)
6471 include 'DIMENSIONS'
6472 include 'COMMON.IOUNITS'
6475 parameter (max_cont=maxconts)
6476 parameter (max_dim=70)
6477 integer source,CorrelType,CorrelID,CorrelType1,CorrelID1,Error
6478 double precision zapas(max_dim,maxconts,max_fg_procs),
6479 & zapas_recv(max_dim,maxconts,max_fg_procs)
6480 common /przechowalnia/ zapas
6481 integer status(MPI_STATUS_SIZE),req(maxconts*2),
6482 & status_array(MPI_STATUS_SIZE,maxconts*2)
6484 include 'COMMON.SETUP'
6485 include 'COMMON.FFIELD'
6486 include 'COMMON.DERIV'
6487 include 'COMMON.LOCAL'
6488 include 'COMMON.INTERACT'
6489 include 'COMMON.CONTACTS'
6490 include 'COMMON.CHAIN'
6491 include 'COMMON.CONTROL'
6492 double precision gx(3),gx1(3)
6493 integer num_cont_hb_old(maxres)
6495 double precision eello4,eello5,eelo6,eello_turn6
6496 external eello4,eello5,eello6,eello_turn6
6497 C Set lprn=.true. for debugging
6502 num_cont_hb_old(i)=num_cont_hb(i)
6506 if (nfgtasks.le.1) goto 30
6508 write (iout,'(a)') 'Contact function values before RECEIVE:'
6510 write (iout,'(2i3,50(1x,i2,f5.2))')
6511 & i,num_cont_hb(i),(jcont_hb(j,i),facont_hb(j,i),
6512 & j=1,num_cont_hb(i))
6516 do i=1,ntask_cont_from
6519 do i=1,ntask_cont_to
6522 c write (iout,*) "ntask_cont_from",ntask_cont_from," ntask_cont_to",
6524 C Make the list of contacts to send to send to other procesors
6525 do i=iturn3_start,iturn3_end
6526 c write (iout,*) "make contact list turn3",i," num_cont",
6528 call add_hb_contact_eello(i,i+2,iturn3_sent_local(1,i))
6530 do i=iturn4_start,iturn4_end
6531 c write (iout,*) "make contact list turn4",i," num_cont",
6533 call add_hb_contact_eello(i,i+3,iturn4_sent_local(1,i))
6537 c write (iout,*) "make contact list longrange",i,ii," num_cont",
6539 do j=1,num_cont_hb(i)
6542 iproc=iint_sent_local(k,jjc,ii)
6543 c write (iout,*) "i",i," j",j," k",k," jjc",jjc," iproc",iproc
6544 if (iproc.ne.0) then
6545 ncont_sent(iproc)=ncont_sent(iproc)+1
6546 nn=ncont_sent(iproc)
6548 zapas(2,nn,iproc)=jjc
6549 zapas(3,nn,iproc)=d_cont(j,i)
6553 zapas(ind,nn,iproc)=grij_hb_cont(kk,j,i)
6558 zapas(ind,nn,iproc)=a_chuj(ll,kk,j,i)
6566 zapas(ind,nn,iproc)=a_chuj_der(mm,ll,kk,jj,j,i)
6577 & "Numbers of contacts to be sent to other processors",
6578 & (ncont_sent(i),i=1,ntask_cont_to)
6579 write (iout,*) "Contacts sent"
6580 do ii=1,ntask_cont_to
6582 iproc=itask_cont_to(ii)
6583 write (iout,*) nn," contacts to processor",iproc,
6584 & " of CONT_TO_COMM group"
6586 write(iout,'(2f5.0,10f10.5)')(zapas(j,i,ii),j=1,10)
6594 CorrelID1=nfgtasks+fg_rank+1
6596 C Receive the numbers of needed contacts from other processors
6597 do ii=1,ntask_cont_from
6598 iproc=itask_cont_from(ii)
6600 call MPI_Irecv(ncont_recv(ii),1,MPI_INTEGER,iproc,CorrelType,
6601 & FG_COMM,req(ireq),IERR)
6603 c write (iout,*) "IRECV ended"
6605 C Send the number of contacts needed by other processors
6606 do ii=1,ntask_cont_to
6607 iproc=itask_cont_to(ii)
6609 call MPI_Isend(ncont_sent(ii),1,MPI_INTEGER,iproc,CorrelType,
6610 & FG_COMM,req(ireq),IERR)
6612 c write (iout,*) "ISEND ended"
6613 c write (iout,*) "number of requests (nn)",ireq
6616 & call MPI_Waitall(ireq,req,status_array,ierr)
6618 c & "Numbers of contacts to be received from other processors",
6619 c & (ncont_recv(i),i=1,ntask_cont_from)
6623 do ii=1,ntask_cont_from
6624 iproc=itask_cont_from(ii)
6626 c write (iout,*) "Receiving",nn," contacts from processor",iproc,
6627 c & " of CONT_TO_COMM group"
6631 call MPI_Irecv(zapas_recv(1,1,ii),nn*max_dim,
6632 & MPI_DOUBLE_PRECISION,iproc,CorrelType1,FG_COMM,req(ireq),IERR)
6633 c write (iout,*) "ireq,req",ireq,req(ireq)
6636 C Send the contacts to processors that need them
6637 do ii=1,ntask_cont_to
6638 iproc=itask_cont_to(ii)
6640 c write (iout,*) nn," contacts to processor",iproc,
6641 c & " of CONT_TO_COMM group"
6644 call MPI_Isend(zapas(1,1,ii),nn*max_dim,MPI_DOUBLE_PRECISION,
6645 & iproc,CorrelType1,FG_COMM,req(ireq),IERR)
6646 c write (iout,*) "ireq,req",ireq,req(ireq)
6648 c write(iout,'(2f5.0,4f10.5)')(zapas(j,i,ii),j=1,5)
6652 c write (iout,*) "number of requests (contacts)",ireq
6653 c write (iout,*) "req",(req(i),i=1,4)
6656 & call MPI_Waitall(ireq,req,status_array,ierr)
6657 do iii=1,ntask_cont_from
6658 iproc=itask_cont_from(iii)
6661 write (iout,*) "Received",nn," contacts from processor",iproc,
6662 & " of CONT_FROM_COMM group"
6665 write(iout,'(2f5.0,10f10.5)')(zapas_recv(j,i,iii),j=1,10)
6670 ii=zapas_recv(1,i,iii)
6671 c Flag the received contacts to prevent double-counting
6672 jj=-zapas_recv(2,i,iii)
6673 c write (iout,*) "iii",iii," i",i," ii",ii," jj",jj
6675 nnn=num_cont_hb(ii)+1
6678 d_cont(nnn,ii)=zapas_recv(3,i,iii)
6682 grij_hb_cont(kk,nnn,ii)=zapas_recv(ind,i,iii)
6687 a_chuj(ll,kk,nnn,ii)=zapas_recv(ind,i,iii)
6695 a_chuj_der(mm,ll,kk,jj,nnn,ii)=zapas_recv(ind,i,iii)
6704 write (iout,'(a)') 'Contact function values after receive:'
6706 write (iout,'(2i3,50(1x,i3,5f6.3))')
6707 & i,num_cont_hb(i),(jcont_hb(j,i),d_cont(j,i),
6708 & ((a_chuj(ll,kk,j,i),ll=1,2),kk=1,2),j=1,num_cont_hb(i))
6715 write (iout,'(a)') 'Contact function values:'
6717 write (iout,'(2i3,50(1x,i2,5f6.3))')
6718 & i,num_cont_hb(i),(jcont_hb(j,i),d_cont(j,i),
6719 & ((a_chuj(ll,kk,j,i),ll=1,2),kk=1,2),j=1,num_cont_hb(i))
6725 C Remove the loop below after debugging !!!
6732 C Calculate the dipole-dipole interaction energies
6733 if (wcorr6.gt.0.0d0 .or. wturn6.gt.0.0d0) then
6734 do i=iatel_s,iatel_e+1
6735 num_conti=num_cont_hb(i)
6744 C Calculate the local-electrostatic correlation terms
6745 c write (iout,*) "gradcorr5 in eello5 before loop"
6747 c write (iout,'(i5,3f10.5)')
6748 c & iii,(gradcorr5(jjj,iii),jjj=1,3)
6750 do i=min0(iatel_s,iturn4_start),max0(iatel_e+1,iturn3_end+1)
6751 c write (iout,*) "corr loop i",i
6753 num_conti=num_cont_hb(i)
6754 num_conti1=num_cont_hb(i+1)
6761 c write (iout,*) 'i=',i,' j=',j,' i1=',i1,' j1=',j1,
6762 c & ' jj=',jj,' kk=',kk
6763 c if (j1.eq.j+1 .or. j1.eq.j-1) then
6764 if ((j.gt.0 .and. j1.gt.0 .or. j.gt.0 .and. j1.lt.0
6765 & .or. j.lt.0 .and. j1.gt.0) .and.
6766 & (jp1.eq.jp+1 .or. jp1.eq.jp-1)) then
6767 C Contacts I-J and (I+1)-(J+1) or (I+1)-(J-1) occur simultaneously.
6768 C The system gains extra energy.
6770 sqd1=dsqrt(d_cont(jj,i))
6771 sqd2=dsqrt(d_cont(kk,i1))
6772 sred_geom = sqd1*sqd2
6773 IF (sred_geom.lt.cutoff_corr) THEN
6774 call gcont(sred_geom,r0_corr,1.0D0,delt_corr,
6776 cd write (iout,*) 'i=',i,' j=',jp,' i1=',i1,' j1=',jp1,
6777 cd & ' jj=',jj,' kk=',kk
6778 fac_prim1=0.5d0*sqd2/sqd1*fprimcont
6779 fac_prim2=0.5d0*sqd1/sqd2*fprimcont
6781 g_contij(l,1)=fac_prim1*grij_hb_cont(l,jj,i)
6782 g_contij(l,2)=fac_prim2*grij_hb_cont(l,kk,i1)
6785 cd write (iout,*) 'sred_geom=',sred_geom,
6786 cd & ' ekont=',ekont,' fprim=',fprimcont,
6787 cd & ' fac_prim1',fac_prim1,' fac_prim2',fac_prim2
6788 cd write (iout,*) "g_contij",g_contij
6789 cd write (iout,*) "grij_hb_cont i",grij_hb_cont(:,jj,i)
6790 cd write (iout,*) "grij_hb_cont i1",grij_hb_cont(:,jj,i1)
6791 call calc_eello(i,jp,i+1,jp1,jj,kk)
6792 if (wcorr4.gt.0.0d0)
6793 & ecorr=ecorr+eello4(i,jp,i+1,jp1,jj,kk)
6794 if (energy_dec.and.wcorr4.gt.0.0d0)
6795 1 write (iout,'(a6,4i5,0pf7.3)')
6796 2 'ecorr4',i,j,i+1,j1,eello4(i,jp,i+1,jp1,jj,kk)
6797 c write (iout,*) "gradcorr5 before eello5"
6799 c write (iout,'(i5,3f10.5)')
6800 c & iii,(gradcorr5(jjj,iii),jjj=1,3)
6802 if (wcorr5.gt.0.0d0)
6803 & ecorr5=ecorr5+eello5(i,jp,i+1,jp1,jj,kk)
6804 c write (iout,*) "gradcorr5 after eello5"
6806 c write (iout,'(i5,3f10.5)')
6807 c & iii,(gradcorr5(jjj,iii),jjj=1,3)
6809 if (energy_dec.and.wcorr5.gt.0.0d0)
6810 1 write (iout,'(a6,4i5,0pf7.3)')
6811 2 'ecorr5',i,j,i+1,j1,eello5(i,jp,i+1,jp1,jj,kk)
6812 cd write(2,*)'wcorr6',wcorr6,' wturn6',wturn6
6813 cd write(2,*)'ijkl',i,jp,i+1,jp1
6814 if (wcorr6.gt.0.0d0 .and. (jp.ne.i+4 .or. jp1.ne.i+3
6815 & .or. wturn6.eq.0.0d0))then
6816 cd write (iout,*) '******ecorr6: i,j,i+1,j1',i,j,i+1,j1
6817 ecorr6=ecorr6+eello6(i,jp,i+1,jp1,jj,kk)
6818 if (energy_dec) write (iout,'(a6,4i5,0pf7.3)')
6819 1 'ecorr6',i,j,i+1,j1,eello6(i,jp,i+1,jp1,jj,kk)
6820 cd write (iout,*) 'ecorr',ecorr,' ecorr5=',ecorr5,
6821 cd & 'ecorr6=',ecorr6
6822 cd write (iout,'(4e15.5)') sred_geom,
6823 cd & dabs(eello4(i,jp,i+1,jp1,jj,kk)),
6824 cd & dabs(eello5(i,jp,i+1,jp1,jj,kk)),
6825 cd & dabs(eello6(i,jp,i+1,jp1,jj,kk))
6826 else if (wturn6.gt.0.0d0
6827 & .and. (jp.eq.i+4 .and. jp1.eq.i+3)) then
6828 cd write (iout,*) '******eturn6: i,j,i+1,j1',i,jip,i+1,jp1
6829 eturn6=eturn6+eello_turn6(i,jj,kk)
6830 if (energy_dec) write (iout,'(a6,4i5,0pf7.3)')
6831 1 'eturn6',i,j,i+1,j1,eello_turn6(i,jj,kk)
6832 cd write (2,*) 'multibody_eello:eturn6',eturn6
6841 num_cont_hb(i)=num_cont_hb_old(i)
6843 c write (iout,*) "gradcorr5 in eello5"
6845 c write (iout,'(i5,3f10.5)')
6846 c & iii,(gradcorr5(jjj,iii),jjj=1,3)
6850 c------------------------------------------------------------------------------
6851 subroutine add_hb_contact_eello(ii,jj,itask)
6852 implicit real*8 (a-h,o-z)
6853 include "DIMENSIONS"
6854 include "COMMON.IOUNITS"
6857 parameter (max_cont=maxconts)
6858 parameter (max_dim=70)
6859 include "COMMON.CONTACTS"
6860 double precision zapas(max_dim,maxconts,max_fg_procs),
6861 & zapas_recv(max_dim,maxconts,max_fg_procs)
6862 common /przechowalnia/ zapas
6863 integer i,j,ii,jj,iproc,itask(4),nn
6864 c write (iout,*) "itask",itask
6867 if (iproc.gt.0) then
6868 do j=1,num_cont_hb(ii)
6870 c write (iout,*) "send turns i",ii," j",jj," jjc",jjc
6872 ncont_sent(iproc)=ncont_sent(iproc)+1
6873 nn=ncont_sent(iproc)
6874 zapas(1,nn,iproc)=ii
6875 zapas(2,nn,iproc)=jjc
6876 zapas(3,nn,iproc)=d_cont(j,ii)
6880 zapas(ind,nn,iproc)=grij_hb_cont(kk,j,ii)
6885 zapas(ind,nn,iproc)=a_chuj(ll,kk,j,ii)
6893 zapas(ind,nn,iproc)=a_chuj_der(mm,ll,kk,jj,j,ii)
6905 c------------------------------------------------------------------------------
6906 double precision function ehbcorr(i,j,k,l,jj,kk,coeffp,coeffm)
6907 implicit real*8 (a-h,o-z)
6908 include 'DIMENSIONS'
6909 include 'COMMON.IOUNITS'
6910 include 'COMMON.DERIV'
6911 include 'COMMON.INTERACT'
6912 include 'COMMON.CONTACTS'
6913 double precision gx(3),gx1(3)
6923 ees=-(coeffp*ees0pij*ees0pkl+coeffm*ees0mij*ees0mkl)
6924 cd ees=-(coeffp*ees0pkl+coeffm*ees0mkl)
6925 C Following 4 lines for diagnostics.
6930 c write (iout,'(2(a,2i3,a,f10.5,a,2f10.5),a,f10.5,a,$)')
6931 c & 'Contacts ',i,j,
6932 c & ' eij',eij,' eesij',ees0pij,ees0mij,' and ',k,l
6933 c & ,' fcont ',ekl,' eeskl',ees0pkl,ees0mkl,' energy=',ekont*ees,
6935 C Calculate the multi-body contribution to energy.
6936 c ecorr=ecorr+ekont*ees
6937 C Calculate multi-body contributions to the gradient.
6938 coeffpees0pij=coeffp*ees0pij
6939 coeffmees0mij=coeffm*ees0mij
6940 coeffpees0pkl=coeffp*ees0pkl
6941 coeffmees0mkl=coeffm*ees0mkl
6943 cgrad ghalfi=ees*ekl*gacont_hbr(ll,jj,i)
6944 gradcorr(ll,i)=gradcorr(ll,i)!+0.5d0*ghalfi
6945 & -ekont*(coeffpees0pkl*gacontp_hb1(ll,jj,i)+
6946 & coeffmees0mkl*gacontm_hb1(ll,jj,i))
6947 gradcorr(ll,j)=gradcorr(ll,j)!+0.5d0*ghalfi
6948 & -ekont*(coeffpees0pkl*gacontp_hb2(ll,jj,i)+
6949 & coeffmees0mkl*gacontm_hb2(ll,jj,i))
6950 cgrad ghalfk=ees*eij*gacont_hbr(ll,kk,k)
6951 gradcorr(ll,k)=gradcorr(ll,k)!+0.5d0*ghalfk
6952 & -ekont*(coeffpees0pij*gacontp_hb1(ll,kk,k)+
6953 & coeffmees0mij*gacontm_hb1(ll,kk,k))
6954 gradcorr(ll,l)=gradcorr(ll,l)!+0.5d0*ghalfk
6955 & -ekont*(coeffpees0pij*gacontp_hb2(ll,kk,k)+
6956 & coeffmees0mij*gacontm_hb2(ll,kk,k))
6957 gradlongij=ees*ekl*gacont_hbr(ll,jj,i)-
6958 & ekont*(coeffpees0pkl*gacontp_hb3(ll,jj,i)+
6959 & coeffmees0mkl*gacontm_hb3(ll,jj,i))
6960 gradcorr_long(ll,j)=gradcorr_long(ll,j)+gradlongij
6961 gradcorr_long(ll,i)=gradcorr_long(ll,i)-gradlongij
6962 gradlongkl=ees*eij*gacont_hbr(ll,kk,k)-
6963 & ekont*(coeffpees0pij*gacontp_hb3(ll,kk,k)+
6964 & coeffmees0mij*gacontm_hb3(ll,kk,k))
6965 gradcorr_long(ll,l)=gradcorr_long(ll,l)+gradlongkl
6966 gradcorr_long(ll,k)=gradcorr_long(ll,k)-gradlongkl
6967 c write (iout,'(2f10.5,2x,$)') gradlongij,gradlongkl
6972 cgrad gradcorr(ll,m)=gradcorr(ll,m)+
6973 cgrad & ees*ekl*gacont_hbr(ll,jj,i)-
6974 cgrad & ekont*(coeffp*ees0pkl*gacontp_hb3(ll,jj,i)+
6975 cgrad & coeffm*ees0mkl*gacontm_hb3(ll,jj,i))
6980 cgrad gradcorr(ll,m)=gradcorr(ll,m)+
6981 cgrad & ees*eij*gacont_hbr(ll,kk,k)-
6982 cgrad & ekont*(coeffp*ees0pij*gacontp_hb3(ll,kk,k)+
6983 cgrad & coeffm*ees0mij*gacontm_hb3(ll,kk,k))
6986 c write (iout,*) "ehbcorr",ekont*ees
6991 C---------------------------------------------------------------------------
6992 subroutine dipole(i,j,jj)
6993 implicit real*8 (a-h,o-z)
6994 include 'DIMENSIONS'
6995 include 'COMMON.IOUNITS'
6996 include 'COMMON.CHAIN'
6997 include 'COMMON.FFIELD'
6998 include 'COMMON.DERIV'
6999 include 'COMMON.INTERACT'
7000 include 'COMMON.CONTACTS'
7001 include 'COMMON.TORSION'
7002 include 'COMMON.VAR'
7003 include 'COMMON.GEO'
7004 dimension dipi(2,2),dipj(2,2),dipderi(2),dipderj(2),auxvec(2),
7006 iti1 = itortyp(itype(i+1))
7007 if (j.lt.nres-1) then
7008 itj1 = itortyp(itype(j+1))
7013 dipi(iii,1)=Ub2(iii,i)
7014 dipderi(iii)=Ub2der(iii,i)
7015 dipi(iii,2)=b1(iii,iti1)
7016 dipj(iii,1)=Ub2(iii,j)
7017 dipderj(iii)=Ub2der(iii,j)
7018 dipj(iii,2)=b1(iii,itj1)
7022 call matvec2(a_chuj(1,1,jj,i),dipj(1,iii),auxvec(1))
7025 dip(kkk,jj,i)=scalar2(dipi(1,jjj),auxvec(1))
7032 call matvec2(a_chuj_der(1,1,lll,kkk,jj,i),dipj(1,iii),
7036 dipderx(lll,kkk,mmm,jj,i)=scalar2(dipi(1,jjj),auxvec(1))
7041 call transpose2(a_chuj(1,1,jj,i),auxmat(1,1))
7042 call matvec2(auxmat(1,1),dipderi(1),auxvec(1))
7044 dipderg(iii,jj,i)=scalar2(auxvec(1),dipj(1,iii))
7046 call matvec2(a_chuj(1,1,jj,i),dipderj(1),auxvec(1))
7048 dipderg(iii+2,jj,i)=scalar2(auxvec(1),dipi(1,iii))
7053 C---------------------------------------------------------------------------
7054 subroutine calc_eello(i,j,k,l,jj,kk)
7056 C This subroutine computes matrices and vectors needed to calculate
7057 C the fourth-, fifth-, and sixth-order local-electrostatic terms.
7059 implicit real*8 (a-h,o-z)
7060 include 'DIMENSIONS'
7061 include 'COMMON.IOUNITS'
7062 include 'COMMON.CHAIN'
7063 include 'COMMON.DERIV'
7064 include 'COMMON.INTERACT'
7065 include 'COMMON.CONTACTS'
7066 include 'COMMON.TORSION'
7067 include 'COMMON.VAR'
7068 include 'COMMON.GEO'
7069 include 'COMMON.FFIELD'
7070 double precision aa1(2,2),aa2(2,2),aa1t(2,2),aa2t(2,2),
7071 & aa1tder(2,2,3,5),aa2tder(2,2,3,5),auxmat(2,2)
7074 cd write (iout,*) 'calc_eello: i=',i,' j=',j,' k=',k,' l=',l,
7075 cd & ' jj=',jj,' kk=',kk
7076 cd if (i.ne.2 .or. j.ne.4 .or. k.ne.3 .or. l.ne.5) return
7077 cd write (iout,*) "a_chujij",((a_chuj(iii,jjj,jj,i),iii=1,2),jjj=1,2)
7078 cd write (iout,*) "a_chujkl",((a_chuj(iii,jjj,kk,k),iii=1,2),jjj=1,2)
7081 aa1(iii,jjj)=a_chuj(iii,jjj,jj,i)
7082 aa2(iii,jjj)=a_chuj(iii,jjj,kk,k)
7085 call transpose2(aa1(1,1),aa1t(1,1))
7086 call transpose2(aa2(1,1),aa2t(1,1))
7089 call transpose2(a_chuj_der(1,1,lll,kkk,jj,i),
7090 & aa1tder(1,1,lll,kkk))
7091 call transpose2(a_chuj_der(1,1,lll,kkk,kk,k),
7092 & aa2tder(1,1,lll,kkk))
7096 C parallel orientation of the two CA-CA-CA frames.
7098 iti=itortyp(itype(i))
7102 itk1=itortyp(itype(k+1))
7103 itj=itortyp(itype(j))
7104 if (l.lt.nres-1) then
7105 itl1=itortyp(itype(l+1))
7109 C A1 kernel(j+1) A2T
7111 cd write (iout,'(3f10.5,5x,3f10.5)')
7112 cd & (EUg(iii,jjj,k),jjj=1,2),(EUg(iii,jjj,l),jjj=1,2)
7114 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
7115 & aa2tder(1,1,1,1),1,.false.,EUg(1,1,l),EUgder(1,1,l),
7116 & AEA(1,1,1),AEAderg(1,1,1),AEAderx(1,1,1,1,1,1))
7117 C Following matrices are needed only for 6-th order cumulants
7118 IF (wcorr6.gt.0.0d0) THEN
7119 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
7120 & aa2tder(1,1,1,1),1,.false.,EUgC(1,1,l),EUgCder(1,1,l),
7121 & AECA(1,1,1),AECAderg(1,1,1),AECAderx(1,1,1,1,1,1))
7122 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
7123 & aa2tder(1,1,1,1),2,.false.,Ug2DtEUg(1,1,l),
7124 & Ug2DtEUgder(1,1,1,l),ADtEA(1,1,1),ADtEAderg(1,1,1,1),
7125 & ADtEAderx(1,1,1,1,1,1))
7127 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
7128 & aa2tder(1,1,1,1),2,.false.,DtUg2EUg(1,1,l),
7129 & DtUg2EUgder(1,1,1,l),ADtEA1(1,1,1),ADtEA1derg(1,1,1,1),
7130 & ADtEA1derx(1,1,1,1,1,1))
7132 C End 6-th order cumulants
7135 cd write (2,*) 'In calc_eello6'
7137 cd write (2,*) 'iii=',iii
7139 cd write (2,*) 'kkk=',kkk
7141 cd write (2,'(3(2f10.5),5x)')
7142 cd & ((ADtEA1derx(jjj,mmm,lll,kkk,iii,1),mmm=1,2),lll=1,3)
7147 call transpose2(EUgder(1,1,k),auxmat(1,1))
7148 call matmat2(auxmat(1,1),AEA(1,1,1),EAEAderg(1,1,1,1))
7149 call transpose2(EUg(1,1,k),auxmat(1,1))
7150 call matmat2(auxmat(1,1),AEA(1,1,1),EAEA(1,1,1))
7151 call matmat2(auxmat(1,1),AEAderg(1,1,1),EAEAderg(1,1,2,1))
7155 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,1),
7156 & EAEAderx(1,1,lll,kkk,iii,1))
7160 C A1T kernel(i+1) A2
7161 call kernel(aa1t(1,1),aa2(1,1),aa1tder(1,1,1,1),
7162 & a_chuj_der(1,1,1,1,kk,k),1,.false.,EUg(1,1,k),EUgder(1,1,k),
7163 & AEA(1,1,2),AEAderg(1,1,2),AEAderx(1,1,1,1,1,2))
7164 C Following matrices are needed only for 6-th order cumulants
7165 IF (wcorr6.gt.0.0d0) THEN
7166 call kernel(aa1t(1,1),aa2(1,1),aa1tder(1,1,1,1),
7167 & a_chuj_der(1,1,1,1,kk,k),1,.false.,EUgC(1,1,k),EUgCder(1,1,k),
7168 & AECA(1,1,2),AECAderg(1,1,2),AECAderx(1,1,1,1,1,2))
7169 call kernel(aa1t(1,1),aa2(1,1),aa1tder(1,1,1,1),
7170 & a_chuj_der(1,1,1,1,kk,k),2,.false.,Ug2DtEUg(1,1,k),
7171 & Ug2DtEUgder(1,1,1,k),ADtEA(1,1,2),ADtEAderg(1,1,1,2),
7172 & ADtEAderx(1,1,1,1,1,2))
7173 call kernel(aa1t(1,1),aa2(1,1),aa1tder(1,1,1,1),
7174 & a_chuj_der(1,1,1,1,kk,k),2,.false.,DtUg2EUg(1,1,k),
7175 & DtUg2EUgder(1,1,1,k),ADtEA1(1,1,2),ADtEA1derg(1,1,1,2),
7176 & ADtEA1derx(1,1,1,1,1,2))
7178 C End 6-th order cumulants
7179 call transpose2(EUgder(1,1,l),auxmat(1,1))
7180 call matmat2(auxmat(1,1),AEA(1,1,2),EAEAderg(1,1,1,2))
7181 call transpose2(EUg(1,1,l),auxmat(1,1))
7182 call matmat2(auxmat(1,1),AEA(1,1,2),EAEA(1,1,2))
7183 call matmat2(auxmat(1,1),AEAderg(1,1,2),EAEAderg(1,1,2,2))
7187 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,2),
7188 & EAEAderx(1,1,lll,kkk,iii,2))
7193 C Calculate the vectors and their derivatives in virtual-bond dihedral angles.
7194 C They are needed only when the fifth- or the sixth-order cumulants are
7196 IF (wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0) THEN
7197 call transpose2(AEA(1,1,1),auxmat(1,1))
7198 call matvec2(auxmat(1,1),b1(1,iti),AEAb1(1,1,1))
7199 call matvec2(auxmat(1,1),Ub2(1,i),AEAb2(1,1,1))
7200 call matvec2(auxmat(1,1),Ub2der(1,i),AEAb2derg(1,2,1,1))
7201 call transpose2(AEAderg(1,1,1),auxmat(1,1))
7202 call matvec2(auxmat(1,1),b1(1,iti),AEAb1derg(1,1,1))
7203 call matvec2(auxmat(1,1),Ub2(1,i),AEAb2derg(1,1,1,1))
7204 call matvec2(AEA(1,1,1),b1(1,itk1),AEAb1(1,2,1))
7205 call matvec2(AEAderg(1,1,1),b1(1,itk1),AEAb1derg(1,2,1))
7206 call matvec2(AEA(1,1,1),Ub2(1,k+1),AEAb2(1,2,1))
7207 call matvec2(AEAderg(1,1,1),Ub2(1,k+1),AEAb2derg(1,1,2,1))
7208 call matvec2(AEA(1,1,1),Ub2der(1,k+1),AEAb2derg(1,2,2,1))
7209 call transpose2(AEA(1,1,2),auxmat(1,1))
7210 call matvec2(auxmat(1,1),b1(1,itj),AEAb1(1,1,2))
7211 call matvec2(auxmat(1,1),Ub2(1,j),AEAb2(1,1,2))
7212 call matvec2(auxmat(1,1),Ub2der(1,j),AEAb2derg(1,2,1,2))
7213 call transpose2(AEAderg(1,1,2),auxmat(1,1))
7214 call matvec2(auxmat(1,1),b1(1,itj),AEAb1derg(1,1,2))
7215 call matvec2(auxmat(1,1),Ub2(1,j),AEAb2derg(1,1,1,2))
7216 call matvec2(AEA(1,1,2),b1(1,itl1),AEAb1(1,2,2))
7217 call matvec2(AEAderg(1,1,2),b1(1,itl1),AEAb1derg(1,2,2))
7218 call matvec2(AEA(1,1,2),Ub2(1,l+1),AEAb2(1,2,2))
7219 call matvec2(AEAderg(1,1,2),Ub2(1,l+1),AEAb2derg(1,1,2,2))
7220 call matvec2(AEA(1,1,2),Ub2der(1,l+1),AEAb2derg(1,2,2,2))
7221 C Calculate the Cartesian derivatives of the vectors.
7225 call transpose2(AEAderx(1,1,lll,kkk,iii,1),auxmat(1,1))
7226 call matvec2(auxmat(1,1),b1(1,iti),
7227 & AEAb1derx(1,lll,kkk,iii,1,1))
7228 call matvec2(auxmat(1,1),Ub2(1,i),
7229 & AEAb2derx(1,lll,kkk,iii,1,1))
7230 call matvec2(AEAderx(1,1,lll,kkk,iii,1),b1(1,itk1),
7231 & AEAb1derx(1,lll,kkk,iii,2,1))
7232 call matvec2(AEAderx(1,1,lll,kkk,iii,1),Ub2(1,k+1),
7233 & AEAb2derx(1,lll,kkk,iii,2,1))
7234 call transpose2(AEAderx(1,1,lll,kkk,iii,2),auxmat(1,1))
7235 call matvec2(auxmat(1,1),b1(1,itj),
7236 & AEAb1derx(1,lll,kkk,iii,1,2))
7237 call matvec2(auxmat(1,1),Ub2(1,j),
7238 & AEAb2derx(1,lll,kkk,iii,1,2))
7239 call matvec2(AEAderx(1,1,lll,kkk,iii,2),b1(1,itl1),
7240 & AEAb1derx(1,lll,kkk,iii,2,2))
7241 call matvec2(AEAderx(1,1,lll,kkk,iii,2),Ub2(1,l+1),
7242 & AEAb2derx(1,lll,kkk,iii,2,2))
7249 C Antiparallel orientation of the two CA-CA-CA frames.
7251 iti=itortyp(itype(i))
7255 itk1=itortyp(itype(k+1))
7256 itl=itortyp(itype(l))
7257 itj=itortyp(itype(j))
7258 if (j.lt.nres-1) then
7259 itj1=itortyp(itype(j+1))
7263 C A2 kernel(j-1)T A1T
7264 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
7265 & aa2tder(1,1,1,1),1,.true.,EUg(1,1,j),EUgder(1,1,j),
7266 & AEA(1,1,1),AEAderg(1,1,1),AEAderx(1,1,1,1,1,1))
7267 C Following matrices are needed only for 6-th order cumulants
7268 IF (wcorr6.gt.0.0d0 .or. (wturn6.gt.0.0d0 .and.
7269 & j.eq.i+4 .and. l.eq.i+3)) THEN
7270 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
7271 & aa2tder(1,1,1,1),1,.true.,EUgC(1,1,j),EUgCder(1,1,j),
7272 & AECA(1,1,1),AECAderg(1,1,1),AECAderx(1,1,1,1,1,1))
7273 call kernel(aa2(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
7274 & aa2tder(1,1,1,1),2,.true.,Ug2DtEUg(1,1,j),
7275 & Ug2DtEUgder(1,1,1,j),ADtEA(1,1,1),ADtEAderg(1,1,1,1),
7276 & ADtEAderx(1,1,1,1,1,1))
7277 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
7278 & aa2tder(1,1,1,1),2,.true.,DtUg2EUg(1,1,j),
7279 & DtUg2EUgder(1,1,1,j),ADtEA1(1,1,1),ADtEA1derg(1,1,1,1),
7280 & ADtEA1derx(1,1,1,1,1,1))
7282 C End 6-th order cumulants
7283 call transpose2(EUgder(1,1,k),auxmat(1,1))
7284 call matmat2(auxmat(1,1),AEA(1,1,1),EAEAderg(1,1,1,1))
7285 call transpose2(EUg(1,1,k),auxmat(1,1))
7286 call matmat2(auxmat(1,1),AEA(1,1,1),EAEA(1,1,1))
7287 call matmat2(auxmat(1,1),AEAderg(1,1,1),EAEAderg(1,1,2,1))
7291 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,1),
7292 & EAEAderx(1,1,lll,kkk,iii,1))
7296 C A2T kernel(i+1)T A1
7297 call kernel(aa2t(1,1),aa1(1,1),aa2tder(1,1,1,1),
7298 & a_chuj_der(1,1,1,1,jj,i),1,.true.,EUg(1,1,k),EUgder(1,1,k),
7299 & AEA(1,1,2),AEAderg(1,1,2),AEAderx(1,1,1,1,1,2))
7300 C Following matrices are needed only for 6-th order cumulants
7301 IF (wcorr6.gt.0.0d0 .or. (wturn6.gt.0.0d0 .and.
7302 & j.eq.i+4 .and. l.eq.i+3)) THEN
7303 call kernel(aa2t(1,1),aa1(1,1),aa2tder(1,1,1,1),
7304 & a_chuj_der(1,1,1,1,jj,i),1,.true.,EUgC(1,1,k),EUgCder(1,1,k),
7305 & AECA(1,1,2),AECAderg(1,1,2),AECAderx(1,1,1,1,1,2))
7306 call kernel(aa2t(1,1),aa1(1,1),aa2tder(1,1,1,1),
7307 & a_chuj_der(1,1,1,1,jj,i),2,.true.,Ug2DtEUg(1,1,k),
7308 & Ug2DtEUgder(1,1,1,k),ADtEA(1,1,2),ADtEAderg(1,1,1,2),
7309 & ADtEAderx(1,1,1,1,1,2))
7310 call kernel(aa2t(1,1),aa1(1,1),aa2tder(1,1,1,1),
7311 & a_chuj_der(1,1,1,1,jj,i),2,.true.,DtUg2EUg(1,1,k),
7312 & DtUg2EUgder(1,1,1,k),ADtEA1(1,1,2),ADtEA1derg(1,1,1,2),
7313 & ADtEA1derx(1,1,1,1,1,2))
7315 C End 6-th order cumulants
7316 call transpose2(EUgder(1,1,j),auxmat(1,1))
7317 call matmat2(auxmat(1,1),AEA(1,1,1),EAEAderg(1,1,2,2))
7318 call transpose2(EUg(1,1,j),auxmat(1,1))
7319 call matmat2(auxmat(1,1),AEA(1,1,2),EAEA(1,1,2))
7320 call matmat2(auxmat(1,1),AEAderg(1,1,2),EAEAderg(1,1,2,2))
7324 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,2),
7325 & EAEAderx(1,1,lll,kkk,iii,2))
7330 C Calculate the vectors and their derivatives in virtual-bond dihedral angles.
7331 C They are needed only when the fifth- or the sixth-order cumulants are
7333 IF (wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0 .or.
7334 & (wturn6.gt.0.0d0 .and. j.eq.i+4 .and. l.eq.i+3)) THEN
7335 call transpose2(AEA(1,1,1),auxmat(1,1))
7336 call matvec2(auxmat(1,1),b1(1,iti),AEAb1(1,1,1))
7337 call matvec2(auxmat(1,1),Ub2(1,i),AEAb2(1,1,1))
7338 call matvec2(auxmat(1,1),Ub2der(1,i),AEAb2derg(1,2,1,1))
7339 call transpose2(AEAderg(1,1,1),auxmat(1,1))
7340 call matvec2(auxmat(1,1),b1(1,iti),AEAb1derg(1,1,1))
7341 call matvec2(auxmat(1,1),Ub2(1,i),AEAb2derg(1,1,1,1))
7342 call matvec2(AEA(1,1,1),b1(1,itk1),AEAb1(1,2,1))
7343 call matvec2(AEAderg(1,1,1),b1(1,itk1),AEAb1derg(1,2,1))
7344 call matvec2(AEA(1,1,1),Ub2(1,k+1),AEAb2(1,2,1))
7345 call matvec2(AEAderg(1,1,1),Ub2(1,k+1),AEAb2derg(1,1,2,1))
7346 call matvec2(AEA(1,1,1),Ub2der(1,k+1),AEAb2derg(1,2,2,1))
7347 call transpose2(AEA(1,1,2),auxmat(1,1))
7348 call matvec2(auxmat(1,1),b1(1,itj1),AEAb1(1,1,2))
7349 call matvec2(auxmat(1,1),Ub2(1,l),AEAb2(1,1,2))
7350 call matvec2(auxmat(1,1),Ub2der(1,l),AEAb2derg(1,2,1,2))
7351 call transpose2(AEAderg(1,1,2),auxmat(1,1))
7352 call matvec2(auxmat(1,1),b1(1,itl),AEAb1(1,1,2))
7353 call matvec2(auxmat(1,1),Ub2(1,l),AEAb2derg(1,1,1,2))
7354 call matvec2(AEA(1,1,2),b1(1,itj1),AEAb1(1,2,2))
7355 call matvec2(AEAderg(1,1,2),b1(1,itj1),AEAb1derg(1,2,2))
7356 call matvec2(AEA(1,1,2),Ub2(1,j),AEAb2(1,2,2))
7357 call matvec2(AEAderg(1,1,2),Ub2(1,j),AEAb2derg(1,1,2,2))
7358 call matvec2(AEA(1,1,2),Ub2der(1,j),AEAb2derg(1,2,2,2))
7359 C Calculate the Cartesian derivatives of the vectors.
7363 call transpose2(AEAderx(1,1,lll,kkk,iii,1),auxmat(1,1))
7364 call matvec2(auxmat(1,1),b1(1,iti),
7365 & AEAb1derx(1,lll,kkk,iii,1,1))
7366 call matvec2(auxmat(1,1),Ub2(1,i),
7367 & AEAb2derx(1,lll,kkk,iii,1,1))
7368 call matvec2(AEAderx(1,1,lll,kkk,iii,1),b1(1,itk1),
7369 & AEAb1derx(1,lll,kkk,iii,2,1))
7370 call matvec2(AEAderx(1,1,lll,kkk,iii,1),Ub2(1,k+1),
7371 & AEAb2derx(1,lll,kkk,iii,2,1))
7372 call transpose2(AEAderx(1,1,lll,kkk,iii,2),auxmat(1,1))
7373 call matvec2(auxmat(1,1),b1(1,itl),
7374 & AEAb1derx(1,lll,kkk,iii,1,2))
7375 call matvec2(auxmat(1,1),Ub2(1,l),
7376 & AEAb2derx(1,lll,kkk,iii,1,2))
7377 call matvec2(AEAderx(1,1,lll,kkk,iii,2),b1(1,itj1),
7378 & AEAb1derx(1,lll,kkk,iii,2,2))
7379 call matvec2(AEAderx(1,1,lll,kkk,iii,2),Ub2(1,j),
7380 & AEAb2derx(1,lll,kkk,iii,2,2))
7389 C---------------------------------------------------------------------------
7390 subroutine kernel(aa1,aa2t,aa1derx,aa2tderx,nderg,transp,
7391 & KK,KKderg,AKA,AKAderg,AKAderx)
7395 double precision aa1(2,2),aa2t(2,2),aa1derx(2,2,3,5),
7396 & aa2tderx(2,2,3,5),KK(2,2),KKderg(2,2,nderg),AKA(2,2),
7397 & AKAderg(2,2,nderg),AKAderx(2,2,3,5,2)
7402 call prodmat3(aa1(1,1),aa2t(1,1),KK(1,1),transp,AKA(1,1))
7404 call prodmat3(aa1(1,1),aa2t(1,1),KKderg(1,1,iii),transp,
7407 cd if (lprn) write (2,*) 'In kernel'
7409 cd if (lprn) write (2,*) 'kkk=',kkk
7411 call prodmat3(aa1derx(1,1,lll,kkk),aa2t(1,1),
7412 & KK(1,1),transp,AKAderx(1,1,lll,kkk,1))
7414 cd write (2,*) 'lll=',lll
7415 cd write (2,*) 'iii=1'
7417 cd write (2,'(3(2f10.5),5x)')
7418 cd & (AKAderx(jjj,mmm,lll,kkk,1),mmm=1,2)
7421 call prodmat3(aa1(1,1),aa2tderx(1,1,lll,kkk),
7422 & KK(1,1),transp,AKAderx(1,1,lll,kkk,2))
7424 cd write (2,*) 'lll=',lll
7425 cd write (2,*) 'iii=2'
7427 cd write (2,'(3(2f10.5),5x)')
7428 cd & (AKAderx(jjj,mmm,lll,kkk,2),mmm=1,2)
7435 C---------------------------------------------------------------------------
7436 double precision function eello4(i,j,k,l,jj,kk)
7437 implicit real*8 (a-h,o-z)
7438 include 'DIMENSIONS'
7439 include 'COMMON.IOUNITS'
7440 include 'COMMON.CHAIN'
7441 include 'COMMON.DERIV'
7442 include 'COMMON.INTERACT'
7443 include 'COMMON.CONTACTS'
7444 include 'COMMON.TORSION'
7445 include 'COMMON.VAR'
7446 include 'COMMON.GEO'
7447 double precision pizda(2,2),ggg1(3),ggg2(3)
7448 cd if (i.ne.1 .or. j.ne.5 .or. k.ne.2 .or.l.ne.4) then
7452 cd print *,'eello4:',i,j,k,l,jj,kk
7453 cd write (2,*) 'i',i,' j',j,' k',k,' l',l
7454 cd call checkint4(i,j,k,l,jj,kk,eel4_num)
7455 cold eij=facont_hb(jj,i)
7456 cold ekl=facont_hb(kk,k)
7458 eel4=-EAEA(1,1,1)-EAEA(2,2,1)
7459 cd eel41=-EAEA(1,1,2)-EAEA(2,2,2)
7460 gcorr_loc(k-1)=gcorr_loc(k-1)
7461 & -ekont*(EAEAderg(1,1,1,1)+EAEAderg(2,2,1,1))
7463 gcorr_loc(l-1)=gcorr_loc(l-1)
7464 & -ekont*(EAEAderg(1,1,2,1)+EAEAderg(2,2,2,1))
7466 gcorr_loc(j-1)=gcorr_loc(j-1)
7467 & -ekont*(EAEAderg(1,1,2,1)+EAEAderg(2,2,2,1))
7472 derx(lll,kkk,iii)=-EAEAderx(1,1,lll,kkk,iii,1)
7473 & -EAEAderx(2,2,lll,kkk,iii,1)
7474 cd derx(lll,kkk,iii)=0.0d0
7478 cd gcorr_loc(l-1)=0.0d0
7479 cd gcorr_loc(j-1)=0.0d0
7480 cd gcorr_loc(k-1)=0.0d0
7482 cd write (iout,*)'Contacts have occurred for peptide groups',
7483 cd & i,j,' fcont:',eij,' eij',' and ',k,l,
7484 cd & ' fcont ',ekl,' eel4=',eel4,' eel4_num',16*eel4_num
7485 if (j.lt.nres-1) then
7492 if (l.lt.nres-1) then
7500 cgrad ggg1(ll)=eel4*g_contij(ll,1)
7501 cgrad ggg2(ll)=eel4*g_contij(ll,2)
7502 glongij=eel4*g_contij(ll,1)+ekont*derx(ll,1,1)
7503 glongkl=eel4*g_contij(ll,2)+ekont*derx(ll,1,2)
7504 cgrad ghalf=0.5d0*ggg1(ll)
7505 gradcorr(ll,i)=gradcorr(ll,i)+ekont*derx(ll,2,1)
7506 gradcorr(ll,i+1)=gradcorr(ll,i+1)+ekont*derx(ll,3,1)
7507 gradcorr(ll,j)=gradcorr(ll,j)+ekont*derx(ll,4,1)
7508 gradcorr(ll,j1)=gradcorr(ll,j1)+ekont*derx(ll,5,1)
7509 gradcorr_long(ll,j)=gradcorr_long(ll,j)+glongij
7510 gradcorr_long(ll,i)=gradcorr_long(ll,i)-glongij
7511 cgrad ghalf=0.5d0*ggg2(ll)
7512 gradcorr(ll,k)=gradcorr(ll,k)+ekont*derx(ll,2,2)
7513 gradcorr(ll,k+1)=gradcorr(ll,k+1)+ekont*derx(ll,3,2)
7514 gradcorr(ll,l)=gradcorr(ll,l)+ekont*derx(ll,4,2)
7515 gradcorr(ll,l1)=gradcorr(ll,l1)+ekont*derx(ll,5,2)
7516 gradcorr_long(ll,l)=gradcorr_long(ll,l)+glongkl
7517 gradcorr_long(ll,k)=gradcorr_long(ll,k)-glongkl
7521 cgrad gradcorr(ll,m)=gradcorr(ll,m)+ggg1(ll)
7526 cgrad gradcorr(ll,m)=gradcorr(ll,m)+ggg2(ll)
7531 cgrad gradcorr(ll,m)=gradcorr(ll,m)+ekont*derx(ll,1,1)
7536 cgrad gradcorr(ll,m)=gradcorr(ll,m)+ekont*derx(ll,1,2)
7540 cd write (2,*) iii,gcorr_loc(iii)
7543 cd write (2,*) 'ekont',ekont
7544 cd write (iout,*) 'eello4',ekont*eel4
7547 C---------------------------------------------------------------------------
7548 double precision function eello5(i,j,k,l,jj,kk)
7549 implicit real*8 (a-h,o-z)
7550 include 'DIMENSIONS'
7551 include 'COMMON.IOUNITS'
7552 include 'COMMON.CHAIN'
7553 include 'COMMON.DERIV'
7554 include 'COMMON.INTERACT'
7555 include 'COMMON.CONTACTS'
7556 include 'COMMON.TORSION'
7557 include 'COMMON.VAR'
7558 include 'COMMON.GEO'
7559 double precision pizda(2,2),auxmat(2,2),auxmat1(2,2),vv(2)
7560 double precision ggg1(3),ggg2(3)
7561 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
7566 C /l\ / \ \ / \ / \ / C
7567 C / \ / \ \ / \ / \ / C
7568 C j| o |l1 | o | o| o | | o |o C
7569 C \ |/k\| |/ \| / |/ \| |/ \| C
7570 C \i/ \ / \ / / \ / \ C
7572 C (I) (II) (III) (IV) C
7574 C eello5_1 eello5_2 eello5_3 eello5_4 C
7576 C Antiparallel chains C
7579 C /j\ / \ \ / \ / \ / C
7580 C / \ / \ \ / \ / \ / C
7581 C j1| o |l | o | o| o | | o |o C
7582 C \ |/k\| |/ \| / |/ \| |/ \| C
7583 C \i/ \ / \ / / \ / \ C
7585 C (I) (II) (III) (IV) C
7587 C eello5_1 eello5_2 eello5_3 eello5_4 C
7589 C o denotes a local interaction, vertical lines an electrostatic interaction. C
7591 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
7592 cd if (i.ne.2 .or. j.ne.6 .or. k.ne.3 .or. l.ne.5) then
7597 cd & 'EELLO5: Contacts have occurred for peptide groups',i,j,
7599 itk=itortyp(itype(k))
7600 itl=itortyp(itype(l))
7601 itj=itortyp(itype(j))
7606 cd call checkint5(i,j,k,l,jj,kk,eel5_1_num,eel5_2_num,
7607 cd & eel5_3_num,eel5_4_num)
7611 derx(lll,kkk,iii)=0.0d0
7615 cd eij=facont_hb(jj,i)
7616 cd ekl=facont_hb(kk,k)
7618 cd write (iout,*)'Contacts have occurred for peptide groups',
7619 cd & i,j,' fcont:',eij,' eij',' and ',k,l
7621 C Contribution from the graph I.
7622 cd write (2,*) 'AEA ',AEA(1,1,1),AEA(2,1,1),AEA(1,2,1),AEA(2,2,1)
7623 cd write (2,*) 'AEAb2',AEAb2(1,1,1),AEAb2(2,1,1)
7624 call transpose2(EUg(1,1,k),auxmat(1,1))
7625 call matmat2(AEA(1,1,1),auxmat(1,1),pizda(1,1))
7626 vv(1)=pizda(1,1)-pizda(2,2)
7627 vv(2)=pizda(1,2)+pizda(2,1)
7628 eello5_1=scalar2(AEAb2(1,1,1),Ub2(1,k))
7629 & +0.5d0*scalar2(vv(1),Dtobr2(1,i))
7630 C Explicit gradient in virtual-dihedral angles.
7631 if (i.gt.1) g_corr5_loc(i-1)=g_corr5_loc(i-1)
7632 & +ekont*(scalar2(AEAb2derg(1,2,1,1),Ub2(1,k))
7633 & +0.5d0*scalar2(vv(1),Dtobr2der(1,i)))
7634 call transpose2(EUgder(1,1,k),auxmat1(1,1))
7635 call matmat2(AEA(1,1,1),auxmat1(1,1),pizda(1,1))
7636 vv(1)=pizda(1,1)-pizda(2,2)
7637 vv(2)=pizda(1,2)+pizda(2,1)
7638 g_corr5_loc(k-1)=g_corr5_loc(k-1)
7639 & +ekont*(scalar2(AEAb2(1,1,1),Ub2der(1,k))
7640 & +0.5d0*scalar2(vv(1),Dtobr2(1,i)))
7641 call matmat2(AEAderg(1,1,1),auxmat(1,1),pizda(1,1))
7642 vv(1)=pizda(1,1)-pizda(2,2)
7643 vv(2)=pizda(1,2)+pizda(2,1)
7645 if (l.lt.nres-1) g_corr5_loc(l-1)=g_corr5_loc(l-1)
7646 & +ekont*(scalar2(AEAb2derg(1,1,1,1),Ub2(1,k))
7647 & +0.5d0*scalar2(vv(1),Dtobr2(1,i)))
7649 if (j.lt.nres-1) g_corr5_loc(j-1)=g_corr5_loc(j-1)
7650 & +ekont*(scalar2(AEAb2derg(1,1,1,1),Ub2(1,k))
7651 & +0.5d0*scalar2(vv(1),Dtobr2(1,i)))
7653 C Cartesian gradient
7657 call matmat2(AEAderx(1,1,lll,kkk,iii,1),auxmat(1,1),
7659 vv(1)=pizda(1,1)-pizda(2,2)
7660 vv(2)=pizda(1,2)+pizda(2,1)
7661 derx(lll,kkk,iii)=derx(lll,kkk,iii)
7662 & +scalar2(AEAb2derx(1,lll,kkk,iii,1,1),Ub2(1,k))
7663 & +0.5d0*scalar2(vv(1),Dtobr2(1,i))
7669 C Contribution from graph II
7670 call transpose2(EE(1,1,itk),auxmat(1,1))
7671 call matmat2(auxmat(1,1),AEA(1,1,1),pizda(1,1))
7672 vv(1)=pizda(1,1)+pizda(2,2)
7673 vv(2)=pizda(2,1)-pizda(1,2)
7674 eello5_2=scalar2(AEAb1(1,2,1),b1(1,itk))
7675 & -0.5d0*scalar2(vv(1),Ctobr(1,k))
7676 C Explicit gradient in virtual-dihedral angles.
7677 g_corr5_loc(k-1)=g_corr5_loc(k-1)
7678 & -0.5d0*ekont*scalar2(vv(1),Ctobrder(1,k))
7679 call matmat2(auxmat(1,1),AEAderg(1,1,1),pizda(1,1))
7680 vv(1)=pizda(1,1)+pizda(2,2)
7681 vv(2)=pizda(2,1)-pizda(1,2)
7683 g_corr5_loc(l-1)=g_corr5_loc(l-1)
7684 & +ekont*(scalar2(AEAb1derg(1,2,1),b1(1,itk))
7685 & -0.5d0*scalar2(vv(1),Ctobr(1,k)))
7687 g_corr5_loc(j-1)=g_corr5_loc(j-1)
7688 & +ekont*(scalar2(AEAb1derg(1,2,1),b1(1,itk))
7689 & -0.5d0*scalar2(vv(1),Ctobr(1,k)))
7691 C Cartesian gradient
7695 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,1),
7697 vv(1)=pizda(1,1)+pizda(2,2)
7698 vv(2)=pizda(2,1)-pizda(1,2)
7699 derx(lll,kkk,iii)=derx(lll,kkk,iii)
7700 & +scalar2(AEAb1derx(1,lll,kkk,iii,2,1),b1(1,itk))
7701 & -0.5d0*scalar2(vv(1),Ctobr(1,k))
7709 C Parallel orientation
7710 C Contribution from graph III
7711 call transpose2(EUg(1,1,l),auxmat(1,1))
7712 call matmat2(AEA(1,1,2),auxmat(1,1),pizda(1,1))
7713 vv(1)=pizda(1,1)-pizda(2,2)
7714 vv(2)=pizda(1,2)+pizda(2,1)
7715 eello5_3=scalar2(AEAb2(1,1,2),Ub2(1,l))
7716 & +0.5d0*scalar2(vv(1),Dtobr2(1,j))
7717 C Explicit gradient in virtual-dihedral angles.
7718 g_corr5_loc(j-1)=g_corr5_loc(j-1)
7719 & +ekont*(scalar2(AEAb2derg(1,2,1,2),Ub2(1,l))
7720 & +0.5d0*scalar2(vv(1),Dtobr2der(1,j)))
7721 call matmat2(AEAderg(1,1,2),auxmat(1,1),pizda(1,1))
7722 vv(1)=pizda(1,1)-pizda(2,2)
7723 vv(2)=pizda(1,2)+pizda(2,1)
7724 g_corr5_loc(k-1)=g_corr5_loc(k-1)
7725 & +ekont*(scalar2(AEAb2derg(1,1,1,2),Ub2(1,l))
7726 & +0.5d0*scalar2(vv(1),Dtobr2(1,j)))
7727 call transpose2(EUgder(1,1,l),auxmat1(1,1))
7728 call matmat2(AEA(1,1,2),auxmat1(1,1),pizda(1,1))
7729 vv(1)=pizda(1,1)-pizda(2,2)
7730 vv(2)=pizda(1,2)+pizda(2,1)
7731 g_corr5_loc(l-1)=g_corr5_loc(l-1)
7732 & +ekont*(scalar2(AEAb2(1,1,2),Ub2der(1,l))
7733 & +0.5d0*scalar2(vv(1),Dtobr2(1,j)))
7734 C Cartesian gradient
7738 call matmat2(AEAderx(1,1,lll,kkk,iii,2),auxmat(1,1),
7740 vv(1)=pizda(1,1)-pizda(2,2)
7741 vv(2)=pizda(1,2)+pizda(2,1)
7742 derx(lll,kkk,iii)=derx(lll,kkk,iii)
7743 & +scalar2(AEAb2derx(1,lll,kkk,iii,1,2),Ub2(1,l))
7744 & +0.5d0*scalar2(vv(1),Dtobr2(1,j))
7749 C Contribution from graph IV
7751 call transpose2(EE(1,1,itl),auxmat(1,1))
7752 call matmat2(auxmat(1,1),AEA(1,1,2),pizda(1,1))
7753 vv(1)=pizda(1,1)+pizda(2,2)
7754 vv(2)=pizda(2,1)-pizda(1,2)
7755 eello5_4=scalar2(AEAb1(1,2,2),b1(1,itl))
7756 & -0.5d0*scalar2(vv(1),Ctobr(1,l))
7757 C Explicit gradient in virtual-dihedral angles.
7758 g_corr5_loc(l-1)=g_corr5_loc(l-1)
7759 & -0.5d0*ekont*scalar2(vv(1),Ctobrder(1,l))
7760 call matmat2(auxmat(1,1),AEAderg(1,1,2),pizda(1,1))
7761 vv(1)=pizda(1,1)+pizda(2,2)
7762 vv(2)=pizda(2,1)-pizda(1,2)
7763 g_corr5_loc(k-1)=g_corr5_loc(k-1)
7764 & +ekont*(scalar2(AEAb1derg(1,2,2),b1(1,itl))
7765 & -0.5d0*scalar2(vv(1),Ctobr(1,l)))
7766 C Cartesian gradient
7770 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,2),
7772 vv(1)=pizda(1,1)+pizda(2,2)
7773 vv(2)=pizda(2,1)-pizda(1,2)
7774 derx(lll,kkk,iii)=derx(lll,kkk,iii)
7775 & +scalar2(AEAb1derx(1,lll,kkk,iii,2,2),b1(1,itl))
7776 & -0.5d0*scalar2(vv(1),Ctobr(1,l))
7781 C Antiparallel orientation
7782 C Contribution from graph III
7784 call transpose2(EUg(1,1,j),auxmat(1,1))
7785 call matmat2(AEA(1,1,2),auxmat(1,1),pizda(1,1))
7786 vv(1)=pizda(1,1)-pizda(2,2)
7787 vv(2)=pizda(1,2)+pizda(2,1)
7788 eello5_3=scalar2(AEAb2(1,1,2),Ub2(1,j))
7789 & +0.5d0*scalar2(vv(1),Dtobr2(1,l))
7790 C Explicit gradient in virtual-dihedral angles.
7791 g_corr5_loc(l-1)=g_corr5_loc(l-1)
7792 & +ekont*(scalar2(AEAb2derg(1,2,1,2),Ub2(1,j))
7793 & +0.5d0*scalar2(vv(1),Dtobr2der(1,l)))
7794 call matmat2(AEAderg(1,1,2),auxmat(1,1),pizda(1,1))
7795 vv(1)=pizda(1,1)-pizda(2,2)
7796 vv(2)=pizda(1,2)+pizda(2,1)
7797 g_corr5_loc(k-1)=g_corr5_loc(k-1)
7798 & +ekont*(scalar2(AEAb2derg(1,1,1,2),Ub2(1,j))
7799 & +0.5d0*scalar2(vv(1),Dtobr2(1,l)))
7800 call transpose2(EUgder(1,1,j),auxmat1(1,1))
7801 call matmat2(AEA(1,1,2),auxmat1(1,1),pizda(1,1))
7802 vv(1)=pizda(1,1)-pizda(2,2)
7803 vv(2)=pizda(1,2)+pizda(2,1)
7804 g_corr5_loc(j-1)=g_corr5_loc(j-1)
7805 & +ekont*(scalar2(AEAb2(1,1,2),Ub2der(1,j))
7806 & +0.5d0*scalar2(vv(1),Dtobr2(1,l)))
7807 C Cartesian gradient
7811 call matmat2(AEAderx(1,1,lll,kkk,iii,2),auxmat(1,1),
7813 vv(1)=pizda(1,1)-pizda(2,2)
7814 vv(2)=pizda(1,2)+pizda(2,1)
7815 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)
7816 & +scalar2(AEAb2derx(1,lll,kkk,iii,1,2),Ub2(1,j))
7817 & +0.5d0*scalar2(vv(1),Dtobr2(1,l))
7822 C Contribution from graph IV
7824 call transpose2(EE(1,1,itj),auxmat(1,1))
7825 call matmat2(auxmat(1,1),AEA(1,1,2),pizda(1,1))
7826 vv(1)=pizda(1,1)+pizda(2,2)
7827 vv(2)=pizda(2,1)-pizda(1,2)
7828 eello5_4=scalar2(AEAb1(1,2,2),b1(1,itj))
7829 & -0.5d0*scalar2(vv(1),Ctobr(1,j))
7830 C Explicit gradient in virtual-dihedral angles.
7831 g_corr5_loc(j-1)=g_corr5_loc(j-1)
7832 & -0.5d0*ekont*scalar2(vv(1),Ctobrder(1,j))
7833 call matmat2(auxmat(1,1),AEAderg(1,1,2),pizda(1,1))
7834 vv(1)=pizda(1,1)+pizda(2,2)
7835 vv(2)=pizda(2,1)-pizda(1,2)
7836 g_corr5_loc(k-1)=g_corr5_loc(k-1)
7837 & +ekont*(scalar2(AEAb1derg(1,2,2),b1(1,itj))
7838 & -0.5d0*scalar2(vv(1),Ctobr(1,j)))
7839 C Cartesian gradient
7843 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,2),
7845 vv(1)=pizda(1,1)+pizda(2,2)
7846 vv(2)=pizda(2,1)-pizda(1,2)
7847 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)
7848 & +scalar2(AEAb1derx(1,lll,kkk,iii,2,2),b1(1,itj))
7849 & -0.5d0*scalar2(vv(1),Ctobr(1,j))
7855 eel5=eello5_1+eello5_2+eello5_3+eello5_4
7856 cd if (i.eq.2 .and. j.eq.8 .and. k.eq.3 .and. l.eq.7) then
7857 cd write (2,*) 'ijkl',i,j,k,l
7858 cd write (2,*) 'eello5_1',eello5_1,' eello5_2',eello5_2,
7859 cd & ' eello5_3',eello5_3,' eello5_4',eello5_4
7861 cd write(iout,*) 'eello5_1',eello5_1,' eel5_1_num',16*eel5_1_num
7862 cd write(iout,*) 'eello5_2',eello5_2,' eel5_2_num',16*eel5_2_num
7863 cd write(iout,*) 'eello5_3',eello5_3,' eel5_3_num',16*eel5_3_num
7864 cd write(iout,*) 'eello5_4',eello5_4,' eel5_4_num',16*eel5_4_num
7865 if (j.lt.nres-1) then
7872 if (l.lt.nres-1) then
7882 cd write (2,*) 'eij',eij,' ekl',ekl,' ekont',ekont
7883 C 2/11/08 AL Gradients over DC's connecting interacting sites will be
7884 C summed up outside the subrouine as for the other subroutines
7885 C handling long-range interactions. The old code is commented out
7886 C with "cgrad" to keep track of changes.
7888 cgrad ggg1(ll)=eel5*g_contij(ll,1)
7889 cgrad ggg2(ll)=eel5*g_contij(ll,2)
7890 gradcorr5ij=eel5*g_contij(ll,1)+ekont*derx(ll,1,1)
7891 gradcorr5kl=eel5*g_contij(ll,2)+ekont*derx(ll,1,2)
7892 c write (iout,'(a,3i3,a,5f8.3,2i3,a,5f8.3,a,f8.3)')
7893 c & "ecorr5",ll,i,j," derx",derx(ll,2,1),derx(ll,3,1),derx(ll,4,1),
7894 c & derx(ll,5,1),k,l," derx",derx(ll,2,2),derx(ll,3,2),
7895 c & derx(ll,4,2),derx(ll,5,2)," ekont",ekont
7896 c write (iout,'(a,3i3,a,3f8.3,2i3,a,3f8.3)')
7897 c & "ecorr5",ll,i,j," gradcorr5",g_contij(ll,1),derx(ll,1,1),
7899 c & k,l," gradcorr5",g_contij(ll,2),derx(ll,1,2),gradcorr5kl
7900 cold ghalf=0.5d0*eel5*ekl*gacont_hbr(ll,jj,i)
7901 cgrad ghalf=0.5d0*ggg1(ll)
7903 gradcorr5(ll,i)=gradcorr5(ll,i)+ekont*derx(ll,2,1)
7904 gradcorr5(ll,i+1)=gradcorr5(ll,i+1)+ekont*derx(ll,3,1)
7905 gradcorr5(ll,j)=gradcorr5(ll,j)+ekont*derx(ll,4,1)
7906 gradcorr5(ll,j1)=gradcorr5(ll,j1)+ekont*derx(ll,5,1)
7907 gradcorr5_long(ll,j)=gradcorr5_long(ll,j)+gradcorr5ij
7908 gradcorr5_long(ll,i)=gradcorr5_long(ll,i)-gradcorr5ij
7909 cold ghalf=0.5d0*eel5*eij*gacont_hbr(ll,kk,k)
7910 cgrad ghalf=0.5d0*ggg2(ll)
7912 gradcorr5(ll,k)=gradcorr5(ll,k)+ekont*derx(ll,2,2)
7913 gradcorr5(ll,k+1)=gradcorr5(ll,k+1)+ekont*derx(ll,3,2)
7914 gradcorr5(ll,l)=gradcorr5(ll,l)+ekont*derx(ll,4,2)
7915 gradcorr5(ll,l1)=gradcorr5(ll,l1)+ekont*derx(ll,5,2)
7916 gradcorr5_long(ll,l)=gradcorr5_long(ll,l)+gradcorr5kl
7917 gradcorr5_long(ll,k)=gradcorr5_long(ll,k)-gradcorr5kl
7922 cold gradcorr5(ll,m)=gradcorr5(ll,m)+eel5*ekl*gacont_hbr(ll,jj,i)
7923 cgrad gradcorr5(ll,m)=gradcorr5(ll,m)+ggg1(ll)
7928 cold gradcorr5(ll,m)=gradcorr5(ll,m)+eel5*eij*gacont_hbr(ll,kk,k)
7929 cgrad gradcorr5(ll,m)=gradcorr5(ll,m)+ggg2(ll)
7935 cgrad gradcorr5(ll,m)=gradcorr5(ll,m)+ekont*derx(ll,1,1)
7940 cgrad gradcorr5(ll,m)=gradcorr5(ll,m)+ekont*derx(ll,1,2)
7944 cd write (2,*) iii,g_corr5_loc(iii)
7947 cd write (2,*) 'ekont',ekont
7948 cd write (iout,*) 'eello5',ekont*eel5
7951 c--------------------------------------------------------------------------
7952 double precision function eello6(i,j,k,l,jj,kk)
7953 implicit real*8 (a-h,o-z)
7954 include 'DIMENSIONS'
7955 include 'COMMON.IOUNITS'
7956 include 'COMMON.CHAIN'
7957 include 'COMMON.DERIV'
7958 include 'COMMON.INTERACT'
7959 include 'COMMON.CONTACTS'
7960 include 'COMMON.TORSION'
7961 include 'COMMON.VAR'
7962 include 'COMMON.GEO'
7963 include 'COMMON.FFIELD'
7964 double precision ggg1(3),ggg2(3)
7965 cd if (i.ne.1 .or. j.ne.3 .or. k.ne.2 .or. l.ne.4) then
7970 cd & 'EELLO6: Contacts have occurred for peptide groups',i,j,
7978 cd call checkint6(i,j,k,l,jj,kk,eel6_1_num,eel6_2_num,
7979 cd & eel6_3_num,eel6_4_num,eel6_5_num,eel6_6_num)
7983 derx(lll,kkk,iii)=0.0d0
7987 cd eij=facont_hb(jj,i)
7988 cd ekl=facont_hb(kk,k)
7994 eello6_1=eello6_graph1(i,j,k,l,1,.false.)
7995 eello6_2=eello6_graph1(j,i,l,k,2,.false.)
7996 eello6_3=eello6_graph2(i,j,k,l,jj,kk,.false.)
7997 eello6_4=eello6_graph4(i,j,k,l,jj,kk,1,.false.)
7998 eello6_5=eello6_graph4(j,i,l,k,jj,kk,2,.false.)
7999 eello6_6=eello6_graph3(i,j,k,l,jj,kk,.false.)
8001 eello6_1=eello6_graph1(i,j,k,l,1,.false.)
8002 eello6_2=eello6_graph1(l,k,j,i,2,.true.)
8003 eello6_3=eello6_graph2(i,l,k,j,jj,kk,.true.)
8004 eello6_4=eello6_graph4(i,j,k,l,jj,kk,1,.false.)
8005 if (wturn6.eq.0.0d0 .or. j.ne.i+4) then
8006 eello6_5=eello6_graph4(l,k,j,i,kk,jj,2,.true.)
8010 eello6_6=eello6_graph3(i,l,k,j,jj,kk,.true.)
8012 C If turn contributions are considered, they will be handled separately.
8013 eel6=eello6_1+eello6_2+eello6_3+eello6_4+eello6_5+eello6_6
8014 cd write(iout,*) 'eello6_1',eello6_1!,' eel6_1_num',16*eel6_1_num
8015 cd write(iout,*) 'eello6_2',eello6_2!,' eel6_2_num',16*eel6_2_num
8016 cd write(iout,*) 'eello6_3',eello6_3!,' eel6_3_num',16*eel6_3_num
8017 cd write(iout,*) 'eello6_4',eello6_4!,' eel6_4_num',16*eel6_4_num
8018 cd write(iout,*) 'eello6_5',eello6_5!,' eel6_5_num',16*eel6_5_num
8019 cd write(iout,*) 'eello6_6',eello6_6!,' eel6_6_num',16*eel6_6_num
8021 if (j.lt.nres-1) then
8028 if (l.lt.nres-1) then
8036 cgrad ggg1(ll)=eel6*g_contij(ll,1)
8037 cgrad ggg2(ll)=eel6*g_contij(ll,2)
8038 cold ghalf=0.5d0*eel6*ekl*gacont_hbr(ll,jj,i)
8039 cgrad ghalf=0.5d0*ggg1(ll)
8041 gradcorr6ij=eel6*g_contij(ll,1)+ekont*derx(ll,1,1)
8042 gradcorr6kl=eel6*g_contij(ll,2)+ekont*derx(ll,1,2)
8043 gradcorr6(ll,i)=gradcorr6(ll,i)+ekont*derx(ll,2,1)
8044 gradcorr6(ll,i+1)=gradcorr6(ll,i+1)+ekont*derx(ll,3,1)
8045 gradcorr6(ll,j)=gradcorr6(ll,j)+ekont*derx(ll,4,1)
8046 gradcorr6(ll,j1)=gradcorr6(ll,j1)+ekont*derx(ll,5,1)
8047 gradcorr6_long(ll,j)=gradcorr6_long(ll,j)+gradcorr6ij
8048 gradcorr6_long(ll,i)=gradcorr6_long(ll,i)-gradcorr6ij
8049 cgrad ghalf=0.5d0*ggg2(ll)
8050 cold ghalf=0.5d0*eel6*eij*gacont_hbr(ll,kk,k)
8052 gradcorr6(ll,k)=gradcorr6(ll,k)+ekont*derx(ll,2,2)
8053 gradcorr6(ll,k+1)=gradcorr6(ll,k+1)+ekont*derx(ll,3,2)
8054 gradcorr6(ll,l)=gradcorr6(ll,l)+ekont*derx(ll,4,2)
8055 gradcorr6(ll,l1)=gradcorr6(ll,l1)+ekont*derx(ll,5,2)
8056 gradcorr6_long(ll,l)=gradcorr6_long(ll,l)+gradcorr6kl
8057 gradcorr6_long(ll,k)=gradcorr6_long(ll,k)-gradcorr6kl
8062 cold gradcorr6(ll,m)=gradcorr6(ll,m)+eel6*ekl*gacont_hbr(ll,jj,i)
8063 cgrad gradcorr6(ll,m)=gradcorr6(ll,m)+ggg1(ll)
8068 cold gradcorr6(ll,m)=gradcorr6(ll,m)+eel6*eij*gacont_hbr(ll,kk,k)
8069 cgrad gradcorr6(ll,m)=gradcorr6(ll,m)+ggg2(ll)
8075 cgrad gradcorr6(ll,m)=gradcorr6(ll,m)+ekont*derx(ll,1,1)
8080 cgrad gradcorr6(ll,m)=gradcorr6(ll,m)+ekont*derx(ll,1,2)
8084 cd write (2,*) iii,g_corr6_loc(iii)
8087 cd write (2,*) 'ekont',ekont
8088 cd write (iout,*) 'eello6',ekont*eel6
8091 c--------------------------------------------------------------------------
8092 double precision function eello6_graph1(i,j,k,l,imat,swap)
8093 implicit real*8 (a-h,o-z)
8094 include 'DIMENSIONS'
8095 include 'COMMON.IOUNITS'
8096 include 'COMMON.CHAIN'
8097 include 'COMMON.DERIV'
8098 include 'COMMON.INTERACT'
8099 include 'COMMON.CONTACTS'
8100 include 'COMMON.TORSION'
8101 include 'COMMON.VAR'
8102 include 'COMMON.GEO'
8103 double precision vv(2),vv1(2),pizda(2,2),auxmat(2,2),pizda1(2,2)
8107 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
8109 C Parallel Antiparallel C
8115 C \ j|/k\| / \ |/k\|l / C
8120 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
8121 itk=itortyp(itype(k))
8122 s1= scalar2(AEAb1(1,2,imat),CUgb2(1,i))
8123 s2=-scalar2(AEAb2(1,1,imat),Ug2Db1t(1,k))
8124 s3= scalar2(AEAb2(1,1,imat),CUgb2(1,k))
8125 call transpose2(EUgC(1,1,k),auxmat(1,1))
8126 call matmat2(AEA(1,1,imat),auxmat(1,1),pizda1(1,1))
8127 vv1(1)=pizda1(1,1)-pizda1(2,2)
8128 vv1(2)=pizda1(1,2)+pizda1(2,1)
8129 s4=0.5d0*scalar2(vv1(1),Dtobr2(1,i))
8130 vv(1)=AEAb1(1,2,imat)*b1(1,itk)-AEAb1(2,2,imat)*b1(2,itk)
8131 vv(2)=AEAb1(1,2,imat)*b1(2,itk)+AEAb1(2,2,imat)*b1(1,itk)
8132 s5=scalar2(vv(1),Dtobr2(1,i))
8133 cd write (2,*) 's1',s1,' s2',s2,' s3',s3,' s4', s4,' s5',s5
8134 eello6_graph1=-0.5d0*(s1+s2+s3+s4+s5)
8135 if (i.gt.1) g_corr6_loc(i-1)=g_corr6_loc(i-1)
8136 & -0.5d0*ekont*(scalar2(AEAb1(1,2,imat),CUgb2der(1,i))
8137 & -scalar2(AEAb2derg(1,2,1,imat),Ug2Db1t(1,k))
8138 & +scalar2(AEAb2derg(1,2,1,imat),CUgb2(1,k))
8139 & +0.5d0*scalar2(vv1(1),Dtobr2der(1,i))
8140 & +scalar2(vv(1),Dtobr2der(1,i)))
8141 call matmat2(AEAderg(1,1,imat),auxmat(1,1),pizda1(1,1))
8142 vv1(1)=pizda1(1,1)-pizda1(2,2)
8143 vv1(2)=pizda1(1,2)+pizda1(2,1)
8144 vv(1)=AEAb1derg(1,2,imat)*b1(1,itk)-AEAb1derg(2,2,imat)*b1(2,itk)
8145 vv(2)=AEAb1derg(1,2,imat)*b1(2,itk)+AEAb1derg(2,2,imat)*b1(1,itk)
8147 g_corr6_loc(l-1)=g_corr6_loc(l-1)
8148 & +ekont*(-0.5d0*(scalar2(AEAb1derg(1,2,imat),CUgb2(1,i))
8149 & -scalar2(AEAb2derg(1,1,1,imat),Ug2Db1t(1,k))
8150 & +scalar2(AEAb2derg(1,1,1,imat),CUgb2(1,k))
8151 & +0.5d0*scalar2(vv1(1),Dtobr2(1,i))+scalar2(vv(1),Dtobr2(1,i))))
8153 g_corr6_loc(j-1)=g_corr6_loc(j-1)
8154 & +ekont*(-0.5d0*(scalar2(AEAb1derg(1,2,imat),CUgb2(1,i))
8155 & -scalar2(AEAb2derg(1,1,1,imat),Ug2Db1t(1,k))
8156 & +scalar2(AEAb2derg(1,1,1,imat),CUgb2(1,k))
8157 & +0.5d0*scalar2(vv1(1),Dtobr2(1,i))+scalar2(vv(1),Dtobr2(1,i))))
8159 call transpose2(EUgCder(1,1,k),auxmat(1,1))
8160 call matmat2(AEA(1,1,imat),auxmat(1,1),pizda1(1,1))
8161 vv1(1)=pizda1(1,1)-pizda1(2,2)
8162 vv1(2)=pizda1(1,2)+pizda1(2,1)
8163 if (k.gt.1) g_corr6_loc(k-1)=g_corr6_loc(k-1)
8164 & +ekont*(-0.5d0*(-scalar2(AEAb2(1,1,imat),Ug2Db1tder(1,k))
8165 & +scalar2(AEAb2(1,1,imat),CUgb2der(1,k))
8166 & +0.5d0*scalar2(vv1(1),Dtobr2(1,i))))
8175 s1= scalar2(AEAb1derx(1,lll,kkk,iii,2,imat),CUgb2(1,i))
8176 s2=-scalar2(AEAb2derx(1,lll,kkk,iii,1,imat),Ug2Db1t(1,k))
8177 s3= scalar2(AEAb2derx(1,lll,kkk,iii,1,imat),CUgb2(1,k))
8178 call transpose2(EUgC(1,1,k),auxmat(1,1))
8179 call matmat2(AEAderx(1,1,lll,kkk,iii,imat),auxmat(1,1),
8181 vv1(1)=pizda1(1,1)-pizda1(2,2)
8182 vv1(2)=pizda1(1,2)+pizda1(2,1)
8183 s4=0.5d0*scalar2(vv1(1),Dtobr2(1,i))
8184 vv(1)=AEAb1derx(1,lll,kkk,iii,2,imat)*b1(1,itk)
8185 & -AEAb1derx(2,lll,kkk,iii,2,imat)*b1(2,itk)
8186 vv(2)=AEAb1derx(1,lll,kkk,iii,2,imat)*b1(2,itk)
8187 & +AEAb1derx(2,lll,kkk,iii,2,imat)*b1(1,itk)
8188 s5=scalar2(vv(1),Dtobr2(1,i))
8189 derx(lll,kkk,ind)=derx(lll,kkk,ind)-0.5d0*(s1+s2+s3+s4+s5)
8195 c----------------------------------------------------------------------------
8196 double precision function eello6_graph2(i,j,k,l,jj,kk,swap)
8197 implicit real*8 (a-h,o-z)
8198 include 'DIMENSIONS'
8199 include 'COMMON.IOUNITS'
8200 include 'COMMON.CHAIN'
8201 include 'COMMON.DERIV'
8202 include 'COMMON.INTERACT'
8203 include 'COMMON.CONTACTS'
8204 include 'COMMON.TORSION'
8205 include 'COMMON.VAR'
8206 include 'COMMON.GEO'
8208 double precision vv(2),pizda(2,2),auxmat(2,2),auxvec(2),
8209 & auxvec1(2),auxvec2(2),auxmat1(2,2)
8212 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
8214 C Parallel Antiparallel C
8220 C \ j|/k\| \ |/k\|l C
8225 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
8226 cd write (2,*) 'eello6_graph2: i,',i,' j',j,' k',k,' l',l
8227 C AL 7/4/01 s1 would occur in the sixth-order moment,
8228 C but not in a cluster cumulant
8230 s1=dip(1,jj,i)*dip(1,kk,k)
8232 call matvec2(ADtEA1(1,1,1),Ub2(1,k),auxvec(1))
8233 s2=-0.5d0*scalar2(Ub2(1,i),auxvec(1))
8234 call matvec2(ADtEA(1,1,2),Ub2(1,l),auxvec1(1))
8235 s3=-0.5d0*scalar2(Ub2(1,j),auxvec1(1))
8236 call transpose2(EUg(1,1,k),auxmat(1,1))
8237 call matmat2(ADtEA1(1,1,1),auxmat(1,1),pizda(1,1))
8238 vv(1)=pizda(1,1)-pizda(2,2)
8239 vv(2)=pizda(1,2)+pizda(2,1)
8240 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
8241 cd write (2,*) 'eello6_graph2:','s1',s1,' s2',s2,' s3',s3,' s4',s4
8243 eello6_graph2=-(s1+s2+s3+s4)
8245 eello6_graph2=-(s2+s3+s4)
8248 C Derivatives in gamma(i-1)
8251 s1=dipderg(1,jj,i)*dip(1,kk,k)
8253 s2=-0.5d0*scalar2(Ub2der(1,i),auxvec(1))
8254 call matvec2(ADtEAderg(1,1,1,2),Ub2(1,l),auxvec2(1))
8255 s3=-0.5d0*scalar2(Ub2(1,j),auxvec2(1))
8256 s4=-0.25d0*scalar2(vv(1),Dtobr2der(1,i))
8258 g_corr6_loc(i-1)=g_corr6_loc(i-1)-ekont*(s1+s2+s3+s4)
8260 g_corr6_loc(i-1)=g_corr6_loc(i-1)-ekont*(s2+s3+s4)
8262 c g_corr6_loc(i-1)=g_corr6_loc(i-1)-s3
8264 C Derivatives in gamma(k-1)
8266 s1=dip(1,jj,i)*dipderg(1,kk,k)
8268 call matvec2(ADtEA1(1,1,1),Ub2der(1,k),auxvec2(1))
8269 s2=-0.5d0*scalar2(Ub2(1,i),auxvec2(1))
8270 call matvec2(ADtEAderg(1,1,2,2),Ub2(1,l),auxvec2(1))
8271 s3=-0.5d0*scalar2(Ub2(1,j),auxvec2(1))
8272 call transpose2(EUgder(1,1,k),auxmat1(1,1))
8273 call matmat2(ADtEA1(1,1,1),auxmat1(1,1),pizda(1,1))
8274 vv(1)=pizda(1,1)-pizda(2,2)
8275 vv(2)=pizda(1,2)+pizda(2,1)
8276 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
8278 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s1+s2+s3+s4)
8280 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s2+s3+s4)
8282 c g_corr6_loc(k-1)=g_corr6_loc(k-1)-s3
8283 C Derivatives in gamma(j-1) or gamma(l-1)
8286 s1=dipderg(3,jj,i)*dip(1,kk,k)
8288 call matvec2(ADtEA1derg(1,1,1,1),Ub2(1,k),auxvec2(1))
8289 s2=-0.5d0*scalar2(Ub2(1,i),auxvec2(1))
8290 s3=-0.5d0*scalar2(Ub2der(1,j),auxvec1(1))
8291 call matmat2(ADtEA1derg(1,1,1,1),auxmat(1,1),pizda(1,1))
8292 vv(1)=pizda(1,1)-pizda(2,2)
8293 vv(2)=pizda(1,2)+pizda(2,1)
8294 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
8297 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*s1
8299 g_corr6_loc(j-1)=g_corr6_loc(j-1)-ekont*s1
8302 g_corr6_loc(j-1)=g_corr6_loc(j-1)-ekont*(s2+s3+s4)
8303 c g_corr6_loc(j-1)=g_corr6_loc(j-1)-s3
8305 C Derivatives in gamma(l-1) or gamma(j-1)
8308 s1=dip(1,jj,i)*dipderg(3,kk,k)
8310 call matvec2(ADtEA1derg(1,1,2,1),Ub2(1,k),auxvec2(1))
8311 s2=-0.5d0*scalar2(Ub2(1,i),auxvec2(1))
8312 call matvec2(ADtEA(1,1,2),Ub2der(1,l),auxvec2(1))
8313 s3=-0.5d0*scalar2(Ub2(1,j),auxvec2(1))
8314 call matmat2(ADtEA1derg(1,1,2,1),auxmat(1,1),pizda(1,1))
8315 vv(1)=pizda(1,1)-pizda(2,2)
8316 vv(2)=pizda(1,2)+pizda(2,1)
8317 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
8320 g_corr6_loc(j-1)=g_corr6_loc(j-1)-ekont*s1
8322 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*s1
8325 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*(s2+s3+s4)
8326 c g_corr6_loc(l-1)=g_corr6_loc(l-1)-s3
8328 C Cartesian derivatives.
8330 write (2,*) 'In eello6_graph2'
8332 write (2,*) 'iii=',iii
8334 write (2,*) 'kkk=',kkk
8336 write (2,'(3(2f10.5),5x)')
8337 & ((ADtEA1derx(jjj,mmm,lll,kkk,iii,1),mmm=1,2),lll=1,3)
8347 s1=dipderx(lll,kkk,1,jj,i)*dip(1,kk,k)
8349 s1=dip(1,jj,i)*dipderx(lll,kkk,1,kk,k)
8352 call matvec2(ADtEA1derx(1,1,lll,kkk,iii,1),Ub2(1,k),
8354 s2=-0.5d0*scalar2(Ub2(1,i),auxvec(1))
8355 call matvec2(ADtEAderx(1,1,lll,kkk,iii,2),Ub2(1,l),
8357 s3=-0.5d0*scalar2(Ub2(1,j),auxvec(1))
8358 call transpose2(EUg(1,1,k),auxmat(1,1))
8359 call matmat2(ADtEA1derx(1,1,lll,kkk,iii,1),auxmat(1,1),
8361 vv(1)=pizda(1,1)-pizda(2,2)
8362 vv(2)=pizda(1,2)+pizda(2,1)
8363 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
8364 cd write (2,*) 's1',s1,' s2',s2,' s3',s3,' s4',s4
8366 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s1+s2+s4)
8368 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s2+s4)
8371 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-s3
8373 derx(lll,kkk,iii)=derx(lll,kkk,iii)-s3
8380 c----------------------------------------------------------------------------
8381 double precision function eello6_graph3(i,j,k,l,jj,kk,swap)
8382 implicit real*8 (a-h,o-z)
8383 include 'DIMENSIONS'
8384 include 'COMMON.IOUNITS'
8385 include 'COMMON.CHAIN'
8386 include 'COMMON.DERIV'
8387 include 'COMMON.INTERACT'
8388 include 'COMMON.CONTACTS'
8389 include 'COMMON.TORSION'
8390 include 'COMMON.VAR'
8391 include 'COMMON.GEO'
8392 double precision vv(2),pizda(2,2),auxmat(2,2),auxvec(2)
8394 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
8396 C Parallel Antiparallel C
8402 C j|/k\| / |/k\|l / C
8407 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
8409 C 4/7/01 AL Component s1 was removed, because it pertains to the respective
8410 C energy moment and not to the cluster cumulant.
8411 iti=itortyp(itype(i))
8412 if (j.lt.nres-1) then
8413 itj1=itortyp(itype(j+1))
8417 itk=itortyp(itype(k))
8418 itk1=itortyp(itype(k+1))
8419 if (l.lt.nres-1) then
8420 itl1=itortyp(itype(l+1))
8425 s1=dip(4,jj,i)*dip(4,kk,k)
8427 call matvec2(AECA(1,1,1),b1(1,itk1),auxvec(1))
8428 s2=0.5d0*scalar2(b1(1,itk),auxvec(1))
8429 call matvec2(AECA(1,1,2),b1(1,itl1),auxvec(1))
8430 s3=0.5d0*scalar2(b1(1,itj1),auxvec(1))
8431 call transpose2(EE(1,1,itk),auxmat(1,1))
8432 call matmat2(auxmat(1,1),AECA(1,1,1),pizda(1,1))
8433 vv(1)=pizda(1,1)+pizda(2,2)
8434 vv(2)=pizda(2,1)-pizda(1,2)
8435 s4=-0.25d0*scalar2(vv(1),Ctobr(1,k))
8436 cd write (2,*) 'eello6_graph3:','s1',s1,' s2',s2,' s3',s3,' s4',s4,
8437 cd & "sum",-(s2+s3+s4)
8439 eello6_graph3=-(s1+s2+s3+s4)
8441 eello6_graph3=-(s2+s3+s4)
8444 C Derivatives in gamma(k-1)
8445 call matvec2(AECAderg(1,1,2),b1(1,itl1),auxvec(1))
8446 s3=0.5d0*scalar2(b1(1,itj1),auxvec(1))
8447 s4=-0.25d0*scalar2(vv(1),Ctobrder(1,k))
8448 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s3+s4)
8449 C Derivatives in gamma(l-1)
8450 call matvec2(AECAderg(1,1,1),b1(1,itk1),auxvec(1))
8451 s2=0.5d0*scalar2(b1(1,itk),auxvec(1))
8452 call matmat2(auxmat(1,1),AECAderg(1,1,1),pizda(1,1))
8453 vv(1)=pizda(1,1)+pizda(2,2)
8454 vv(2)=pizda(2,1)-pizda(1,2)
8455 s4=-0.25d0*scalar2(vv(1),Ctobr(1,k))
8456 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*(s2+s4)
8457 C Cartesian derivatives.
8463 s1=dipderx(lll,kkk,4,jj,i)*dip(4,kk,k)
8465 s1=dip(4,jj,i)*dipderx(lll,kkk,4,kk,k)
8468 call matvec2(AECAderx(1,1,lll,kkk,iii,1),b1(1,itk1),
8470 s2=0.5d0*scalar2(b1(1,itk),auxvec(1))
8471 call matvec2(AECAderx(1,1,lll,kkk,iii,2),b1(1,itl1),
8473 s3=0.5d0*scalar2(b1(1,itj1),auxvec(1))
8474 call matmat2(auxmat(1,1),AECAderx(1,1,lll,kkk,iii,1),
8476 vv(1)=pizda(1,1)+pizda(2,2)
8477 vv(2)=pizda(2,1)-pizda(1,2)
8478 s4=-0.25d0*scalar2(vv(1),Ctobr(1,k))
8480 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s1+s2+s4)
8482 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s2+s4)
8485 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-s3
8487 derx(lll,kkk,iii)=derx(lll,kkk,iii)-s3
8489 c derx(lll,kkk,iii)=derx(lll,kkk,iii)-s4
8495 c----------------------------------------------------------------------------
8496 double precision function eello6_graph4(i,j,k,l,jj,kk,imat,swap)
8497 implicit real*8 (a-h,o-z)
8498 include 'DIMENSIONS'
8499 include 'COMMON.IOUNITS'
8500 include 'COMMON.CHAIN'
8501 include 'COMMON.DERIV'
8502 include 'COMMON.INTERACT'
8503 include 'COMMON.CONTACTS'
8504 include 'COMMON.TORSION'
8505 include 'COMMON.VAR'
8506 include 'COMMON.GEO'
8507 include 'COMMON.FFIELD'
8508 double precision vv(2),pizda(2,2),auxmat(2,2),auxvec(2),
8509 & auxvec1(2),auxmat1(2,2)
8511 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
8513 C Parallel Antiparallel C
8519 C \ j|/k\| \ |/k\|l C
8524 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
8526 C 4/7/01 AL Component s1 was removed, because it pertains to the respective
8527 C energy moment and not to the cluster cumulant.
8528 cd write (2,*) 'eello_graph4: wturn6',wturn6
8529 iti=itortyp(itype(i))
8530 itj=itortyp(itype(j))
8531 if (j.lt.nres-1) then
8532 itj1=itortyp(itype(j+1))
8536 itk=itortyp(itype(k))
8537 if (k.lt.nres-1) then
8538 itk1=itortyp(itype(k+1))
8542 itl=itortyp(itype(l))
8543 if (l.lt.nres-1) then
8544 itl1=itortyp(itype(l+1))
8548 cd write (2,*) 'eello6_graph4:','i',i,' j',j,' k',k,' l',l
8549 cd write (2,*) 'iti',iti,' itj',itj,' itj1',itj1,' itk',itk,
8550 cd & ' itl',itl,' itl1',itl1
8553 s1=dip(3,jj,i)*dip(3,kk,k)
8555 s1=dip(2,jj,j)*dip(2,kk,l)
8558 call matvec2(AECA(1,1,imat),Ub2(1,k),auxvec(1))
8559 s2=0.5d0*scalar2(Ub2(1,i),auxvec(1))
8561 call matvec2(ADtEA1(1,1,3-imat),b1(1,itj1),auxvec1(1))
8562 s3=-0.5d0*scalar2(b1(1,itj),auxvec1(1))
8564 call matvec2(ADtEA1(1,1,3-imat),b1(1,itl1),auxvec1(1))
8565 s3=-0.5d0*scalar2(b1(1,itl),auxvec1(1))
8567 call transpose2(EUg(1,1,k),auxmat(1,1))
8568 call matmat2(AECA(1,1,imat),auxmat(1,1),pizda(1,1))
8569 vv(1)=pizda(1,1)-pizda(2,2)
8570 vv(2)=pizda(2,1)+pizda(1,2)
8571 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
8572 cd write (2,*) 'eello6_graph4:','s1',s1,' s2',s2,' s3',s3,' s4',s4
8574 eello6_graph4=-(s1+s2+s3+s4)
8576 eello6_graph4=-(s2+s3+s4)
8578 C Derivatives in gamma(i-1)
8582 s1=dipderg(2,jj,i)*dip(3,kk,k)
8584 s1=dipderg(4,jj,j)*dip(2,kk,l)
8587 s2=0.5d0*scalar2(Ub2der(1,i),auxvec(1))
8589 call matvec2(ADtEA1derg(1,1,1,3-imat),b1(1,itj1),auxvec1(1))
8590 s3=-0.5d0*scalar2(b1(1,itj),auxvec1(1))
8592 call matvec2(ADtEA1derg(1,1,1,3-imat),b1(1,itl1),auxvec1(1))
8593 s3=-0.5d0*scalar2(b1(1,itl),auxvec1(1))
8595 s4=0.25d0*scalar2(vv(1),Dtobr2der(1,i))
8596 if (wturn6.gt.0.0d0 .and. k.eq.l+4 .and. i.eq.j+2) then
8597 cd write (2,*) 'turn6 derivatives'
8599 gel_loc_turn6(i-1)=gel_loc_turn6(i-1)-ekont*(s1+s2+s3+s4)
8601 gel_loc_turn6(i-1)=gel_loc_turn6(i-1)-ekont*(s2+s3+s4)
8605 g_corr6_loc(i-1)=g_corr6_loc(i-1)-ekont*(s1+s2+s3+s4)
8607 g_corr6_loc(i-1)=g_corr6_loc(i-1)-ekont*(s2+s3+s4)
8611 C Derivatives in gamma(k-1)
8614 s1=dip(3,jj,i)*dipderg(2,kk,k)
8616 s1=dip(2,jj,j)*dipderg(4,kk,l)
8619 call matvec2(AECA(1,1,imat),Ub2der(1,k),auxvec1(1))
8620 s2=0.5d0*scalar2(Ub2(1,i),auxvec1(1))
8622 call matvec2(ADtEA1derg(1,1,2,3-imat),b1(1,itj1),auxvec1(1))
8623 s3=-0.5d0*scalar2(b1(1,itj),auxvec1(1))
8625 call matvec2(ADtEA1derg(1,1,2,3-imat),b1(1,itl1),auxvec1(1))
8626 s3=-0.5d0*scalar2(b1(1,itl),auxvec1(1))
8628 call transpose2(EUgder(1,1,k),auxmat1(1,1))
8629 call matmat2(AECA(1,1,imat),auxmat1(1,1),pizda(1,1))
8630 vv(1)=pizda(1,1)-pizda(2,2)
8631 vv(2)=pizda(2,1)+pizda(1,2)
8632 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
8633 if (wturn6.gt.0.0d0 .and. k.eq.l+4 .and. i.eq.j+2) then
8635 gel_loc_turn6(k-1)=gel_loc_turn6(k-1)-ekont*(s1+s2+s3+s4)
8637 gel_loc_turn6(k-1)=gel_loc_turn6(k-1)-ekont*(s2+s3+s4)
8641 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s1+s2+s3+s4)
8643 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s2+s3+s4)
8646 C Derivatives in gamma(j-1) or gamma(l-1)
8647 if (l.eq.j+1 .and. l.gt.1) then
8648 call matvec2(AECAderg(1,1,imat),Ub2(1,k),auxvec(1))
8649 s2=0.5d0*scalar2(Ub2(1,i),auxvec(1))
8650 call matmat2(AECAderg(1,1,imat),auxmat(1,1),pizda(1,1))
8651 vv(1)=pizda(1,1)-pizda(2,2)
8652 vv(2)=pizda(2,1)+pizda(1,2)
8653 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
8654 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*(s2+s4)
8655 else if (j.gt.1) then
8656 call matvec2(AECAderg(1,1,imat),Ub2(1,k),auxvec(1))
8657 s2=0.5d0*scalar2(Ub2(1,i),auxvec(1))
8658 call matmat2(AECAderg(1,1,imat),auxmat(1,1),pizda(1,1))
8659 vv(1)=pizda(1,1)-pizda(2,2)
8660 vv(2)=pizda(2,1)+pizda(1,2)
8661 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
8662 if (wturn6.gt.0.0d0 .and. k.eq.l+4 .and. i.eq.j+2) then
8663 gel_loc_turn6(j-1)=gel_loc_turn6(j-1)-ekont*(s2+s4)
8665 g_corr6_loc(j-1)=g_corr6_loc(j-1)-ekont*(s2+s4)
8668 C Cartesian derivatives.
8675 s1=dipderx(lll,kkk,3,jj,i)*dip(3,kk,k)
8677 s1=dipderx(lll,kkk,2,jj,j)*dip(2,kk,l)
8681 s1=dip(3,jj,i)*dipderx(lll,kkk,3,kk,k)
8683 s1=dip(2,jj,j)*dipderx(lll,kkk,2,kk,l)
8687 call matvec2(AECAderx(1,1,lll,kkk,iii,imat),Ub2(1,k),
8689 s2=0.5d0*scalar2(Ub2(1,i),auxvec(1))
8691 call matvec2(ADtEA1derx(1,1,lll,kkk,iii,3-imat),
8692 & b1(1,itj1),auxvec(1))
8693 s3=-0.5d0*scalar2(b1(1,itj),auxvec(1))
8695 call matvec2(ADtEA1derx(1,1,lll,kkk,iii,3-imat),
8696 & b1(1,itl1),auxvec(1))
8697 s3=-0.5d0*scalar2(b1(1,itl),auxvec(1))
8699 call matmat2(AECAderx(1,1,lll,kkk,iii,imat),auxmat(1,1),
8701 vv(1)=pizda(1,1)-pizda(2,2)
8702 vv(2)=pizda(2,1)+pizda(1,2)
8703 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
8705 if (wturn6.gt.0.0d0 .and. k.eq.l+4 .and. i.eq.j+2) then
8707 derx_turn(lll,kkk,3-iii)=derx_turn(lll,kkk,3-iii)
8710 derx_turn(lll,kkk,3-iii)=derx_turn(lll,kkk,3-iii)
8713 derx_turn(lll,kkk,iii)=derx_turn(lll,kkk,iii)-s3
8716 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-(s1+s2+s4)
8718 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-(s2+s4)
8720 derx(lll,kkk,iii)=derx(lll,kkk,iii)-s3
8724 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s1+s2+s4)
8726 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s2+s4)
8729 derx(lll,kkk,iii)=derx(lll,kkk,iii)-s3
8731 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-s3
8739 c----------------------------------------------------------------------------
8740 double precision function eello_turn6(i,jj,kk)
8741 implicit real*8 (a-h,o-z)
8742 include 'DIMENSIONS'
8743 include 'COMMON.IOUNITS'
8744 include 'COMMON.CHAIN'
8745 include 'COMMON.DERIV'
8746 include 'COMMON.INTERACT'
8747 include 'COMMON.CONTACTS'
8748 include 'COMMON.TORSION'
8749 include 'COMMON.VAR'
8750 include 'COMMON.GEO'
8751 double precision vtemp1(2),vtemp2(2),vtemp3(2),vtemp4(2),
8752 & atemp(2,2),auxmat(2,2),achuj_temp(2,2),gtemp(2,2),gvec(2),
8754 double precision vtemp1d(2),vtemp2d(2),vtemp3d(2),vtemp4d(2),
8755 & atempd(2,2),auxmatd(2,2),achuj_tempd(2,2),gtempd(2,2),gvecd(2)
8756 C 4/7/01 AL Components s1, s8, and s13 were removed, because they pertain to
8757 C the respective energy moment and not to the cluster cumulant.
8766 iti=itortyp(itype(i))
8767 itk=itortyp(itype(k))
8768 itk1=itortyp(itype(k+1))
8769 itl=itortyp(itype(l))
8770 itj=itortyp(itype(j))
8771 cd write (2,*) 'itk',itk,' itk1',itk1,' itl',itl,' itj',itj
8772 cd write (2,*) 'i',i,' k',k,' j',j,' l',l
8773 cd if (i.ne.1 .or. j.ne.3 .or. k.ne.2 .or. l.ne.4) then
8778 cd & 'EELLO6: Contacts have occurred for peptide groups',i,j,
8780 cd call checkint_turn6(i,jj,kk,eel_turn6_num)
8784 derx_turn(lll,kkk,iii)=0.0d0
8791 eello6_5=eello6_graph4(l,k,j,i,kk,jj,2,.true.)
8793 cd write (2,*) 'eello6_5',eello6_5
8795 call transpose2(AEA(1,1,1),auxmat(1,1))
8796 call matmat2(EUg(1,1,i+1),auxmat(1,1),auxmat(1,1))
8797 ss1=scalar2(Ub2(1,i+2),b1(1,itl))
8798 s1 = (auxmat(1,1)+auxmat(2,2))*ss1
8800 call matvec2(EUg(1,1,i+2),b1(1,itl),vtemp1(1))
8801 call matvec2(AEA(1,1,1),vtemp1(1),vtemp1(1))
8802 s2 = scalar2(b1(1,itk),vtemp1(1))
8804 call transpose2(AEA(1,1,2),atemp(1,1))
8805 call matmat2(atemp(1,1),EUg(1,1,i+4),atemp(1,1))
8806 call matvec2(Ug2(1,1,i+2),dd(1,1,itk1),vtemp2(1))
8807 s8 = -(atemp(1,1)+atemp(2,2))*scalar2(cc(1,1,itl),vtemp2(1))
8809 call matmat2(EUg(1,1,i+3),AEA(1,1,2),auxmat(1,1))
8810 call matvec2(auxmat(1,1),Ub2(1,i+4),vtemp3(1))
8811 s12 = scalar2(Ub2(1,i+2),vtemp3(1))
8813 call transpose2(a_chuj(1,1,kk,i+1),achuj_temp(1,1))
8814 call matmat2(achuj_temp(1,1),EUg(1,1,i+2),gtemp(1,1))
8815 call matmat2(gtemp(1,1),EUg(1,1,i+3),gtemp(1,1))
8816 call matvec2(a_chuj(1,1,jj,i),Ub2(1,i+4),vtemp4(1))
8817 ss13 = scalar2(b1(1,itk),vtemp4(1))
8818 s13 = (gtemp(1,1)+gtemp(2,2))*ss13
8820 c write (2,*) 's1,s2,s8,s12,s13',s1,s2,s8,s12,s13
8826 eel_turn6 = eello6_5 - 0.5d0*(s1+s2+s12+s8+s13)
8827 C Derivatives in gamma(i+2)
8831 call transpose2(AEA(1,1,1),auxmatd(1,1))
8832 call matmat2(EUgder(1,1,i+1),auxmatd(1,1),auxmatd(1,1))
8833 s1d = (auxmatd(1,1)+auxmatd(2,2))*ss1
8834 call transpose2(AEAderg(1,1,2),atempd(1,1))
8835 call matmat2(atempd(1,1),EUg(1,1,i+4),atempd(1,1))
8836 s8d = -(atempd(1,1)+atempd(2,2))*scalar2(cc(1,1,itl),vtemp2(1))
8838 call matmat2(EUg(1,1,i+3),AEAderg(1,1,2),auxmatd(1,1))
8839 call matvec2(auxmatd(1,1),Ub2(1,i+4),vtemp3d(1))
8840 s12d = scalar2(Ub2(1,i+2),vtemp3d(1))
8846 gel_loc_turn6(i)=gel_loc_turn6(i)-0.5d0*ekont*(s1d+s8d+s12d)
8847 C Derivatives in gamma(i+3)
8849 call transpose2(AEA(1,1,1),auxmatd(1,1))
8850 call matmat2(EUg(1,1,i+1),auxmatd(1,1),auxmatd(1,1))
8851 ss1d=scalar2(Ub2der(1,i+2),b1(1,itl))
8852 s1d = (auxmatd(1,1)+auxmatd(2,2))*ss1d
8854 call matvec2(EUgder(1,1,i+2),b1(1,itl),vtemp1d(1))
8855 call matvec2(AEA(1,1,1),vtemp1d(1),vtemp1d(1))
8856 s2d = scalar2(b1(1,itk),vtemp1d(1))
8858 call matvec2(Ug2der(1,1,i+2),dd(1,1,itk1),vtemp2d(1))
8859 s8d = -(atemp(1,1)+atemp(2,2))*scalar2(cc(1,1,itl),vtemp2d(1))
8861 s12d = scalar2(Ub2der(1,i+2),vtemp3(1))
8863 call matmat2(achuj_temp(1,1),EUgder(1,1,i+2),gtempd(1,1))
8864 call matmat2(gtempd(1,1),EUg(1,1,i+3),gtempd(1,1))
8865 s13d = (gtempd(1,1)+gtempd(2,2))*ss13
8873 gel_loc_turn6(i+1)=gel_loc_turn6(i+1)
8874 & -0.5d0*ekont*(s1d+s2d+s8d+s12d+s13d)
8876 gel_loc_turn6(i+1)=gel_loc_turn6(i+1)
8877 & -0.5d0*ekont*(s2d+s12d)
8879 C Derivatives in gamma(i+4)
8880 call matmat2(EUgder(1,1,i+3),AEA(1,1,2),auxmatd(1,1))
8881 call matvec2(auxmatd(1,1),Ub2(1,i+4),vtemp3d(1))
8882 s12d = scalar2(Ub2(1,i+2),vtemp3d(1))
8884 call matmat2(achuj_temp(1,1),EUg(1,1,i+2),gtempd(1,1))
8885 call matmat2(gtempd(1,1),EUgder(1,1,i+3),gtempd(1,1))
8886 s13d = (gtempd(1,1)+gtempd(2,2))*ss13
8894 gel_loc_turn6(i+2)=gel_loc_turn6(i+2)-0.5d0*ekont*(s12d+s13d)
8896 gel_loc_turn6(i+2)=gel_loc_turn6(i+2)-0.5d0*ekont*(s12d)
8898 C Derivatives in gamma(i+5)
8900 call transpose2(AEAderg(1,1,1),auxmatd(1,1))
8901 call matmat2(EUg(1,1,i+1),auxmatd(1,1),auxmatd(1,1))
8902 s1d = (auxmatd(1,1)+auxmatd(2,2))*ss1
8904 call matvec2(EUg(1,1,i+2),b1(1,itl),vtemp1d(1))
8905 call matvec2(AEAderg(1,1,1),vtemp1d(1),vtemp1d(1))
8906 s2d = scalar2(b1(1,itk),vtemp1d(1))
8908 call transpose2(AEA(1,1,2),atempd(1,1))
8909 call matmat2(atempd(1,1),EUgder(1,1,i+4),atempd(1,1))
8910 s8d = -(atempd(1,1)+atempd(2,2))*scalar2(cc(1,1,itl),vtemp2(1))
8912 call matvec2(auxmat(1,1),Ub2der(1,i+4),vtemp3d(1))
8913 s12d = scalar2(Ub2(1,i+2),vtemp3d(1))
8915 call matvec2(a_chuj(1,1,jj,i),Ub2der(1,i+4),vtemp4d(1))
8916 ss13d = scalar2(b1(1,itk),vtemp4d(1))
8917 s13d = (gtemp(1,1)+gtemp(2,2))*ss13d
8925 gel_loc_turn6(i+3)=gel_loc_turn6(i+3)
8926 & -0.5d0*ekont*(s1d+s2d+s8d+s12d+s13d)
8928 gel_loc_turn6(i+3)=gel_loc_turn6(i+3)
8929 & -0.5d0*ekont*(s2d+s12d)
8931 C Cartesian derivatives
8936 call transpose2(AEAderx(1,1,lll,kkk,iii,1),auxmatd(1,1))
8937 call matmat2(EUg(1,1,i+1),auxmatd(1,1),auxmatd(1,1))
8938 s1d = (auxmatd(1,1)+auxmatd(2,2))*ss1
8940 call matvec2(EUg(1,1,i+2),b1(1,itl),vtemp1(1))
8941 call matvec2(AEAderx(1,1,lll,kkk,iii,1),vtemp1(1),
8943 s2d = scalar2(b1(1,itk),vtemp1d(1))
8945 call transpose2(AEAderx(1,1,lll,kkk,iii,2),atempd(1,1))
8946 call matmat2(atempd(1,1),EUg(1,1,i+4),atempd(1,1))
8947 s8d = -(atempd(1,1)+atempd(2,2))*
8948 & scalar2(cc(1,1,itl),vtemp2(1))
8950 call matmat2(EUg(1,1,i+3),AEAderx(1,1,lll,kkk,iii,2),
8952 call matvec2(auxmatd(1,1),Ub2(1,i+4),vtemp3d(1))
8953 s12d = scalar2(Ub2(1,i+2),vtemp3d(1))
8960 derx_turn(lll,kkk,iii) = derx_turn(lll,kkk,iii)
8963 derx_turn(lll,kkk,iii) = derx_turn(lll,kkk,iii)
8967 derx_turn(lll,kkk,3-iii) = derx_turn(lll,kkk,3-iii)
8968 & - 0.5d0*(s8d+s12d)
8970 derx_turn(lll,kkk,3-iii) = derx_turn(lll,kkk,3-iii)
8979 call transpose2(a_chuj_der(1,1,lll,kkk,kk,i+1),
8981 call matmat2(achuj_tempd(1,1),EUg(1,1,i+2),gtempd(1,1))
8982 call matmat2(gtempd(1,1),EUg(1,1,i+3),gtempd(1,1))
8983 s13d=(gtempd(1,1)+gtempd(2,2))*ss13
8984 derx_turn(lll,kkk,2) = derx_turn(lll,kkk,2)-0.5d0*s13d
8985 call matvec2(a_chuj_der(1,1,lll,kkk,jj,i),Ub2(1,i+4),
8987 ss13d = scalar2(b1(1,itk),vtemp4d(1))
8988 s13d = (gtemp(1,1)+gtemp(2,2))*ss13d
8989 derx_turn(lll,kkk,1) = derx_turn(lll,kkk,1)-0.5d0*s13d
8993 cd write(iout,*) 'eel6_turn6',eel_turn6,' eel_turn6_num',
8994 cd & 16*eel_turn6_num
8996 if (j.lt.nres-1) then
9003 if (l.lt.nres-1) then
9011 cgrad ggg1(ll)=eel_turn6*g_contij(ll,1)
9012 cgrad ggg2(ll)=eel_turn6*g_contij(ll,2)
9013 cgrad ghalf=0.5d0*ggg1(ll)
9015 gturn6ij=eel_turn6*g_contij(ll,1)+ekont*derx_turn(ll,1,1)
9016 gturn6kl=eel_turn6*g_contij(ll,2)+ekont*derx_turn(ll,1,2)
9017 gcorr6_turn(ll,i)=gcorr6_turn(ll,i)!+ghalf
9018 & +ekont*derx_turn(ll,2,1)
9019 gcorr6_turn(ll,i+1)=gcorr6_turn(ll,i+1)+ekont*derx_turn(ll,3,1)
9020 gcorr6_turn(ll,j)=gcorr6_turn(ll,j)!+ghalf
9021 & +ekont*derx_turn(ll,4,1)
9022 gcorr6_turn(ll,j1)=gcorr6_turn(ll,j1)+ekont*derx_turn(ll,5,1)
9023 gcorr6_turn_long(ll,j)=gcorr6_turn_long(ll,j)+gturn6ij
9024 gcorr6_turn_long(ll,i)=gcorr6_turn_long(ll,i)-gturn6ij
9025 cgrad ghalf=0.5d0*ggg2(ll)
9027 gcorr6_turn(ll,k)=gcorr6_turn(ll,k)!+ghalf
9028 & +ekont*derx_turn(ll,2,2)
9029 gcorr6_turn(ll,k+1)=gcorr6_turn(ll,k+1)+ekont*derx_turn(ll,3,2)
9030 gcorr6_turn(ll,l)=gcorr6_turn(ll,l)!+ghalf
9031 & +ekont*derx_turn(ll,4,2)
9032 gcorr6_turn(ll,l1)=gcorr6_turn(ll,l1)+ekont*derx_turn(ll,5,2)
9033 gcorr6_turn_long(ll,l)=gcorr6_turn_long(ll,l)+gturn6kl
9034 gcorr6_turn_long(ll,k)=gcorr6_turn_long(ll,k)-gturn6kl
9039 cgrad gcorr6_turn(ll,m)=gcorr6_turn(ll,m)+ggg1(ll)
9044 cgrad gcorr6_turn(ll,m)=gcorr6_turn(ll,m)+ggg2(ll)
9050 cgrad gcorr6_turn(ll,m)=gcorr6_turn(ll,m)+ekont*derx_turn(ll,1,1)
9055 cgrad gcorr6_turn(ll,m)=gcorr6_turn(ll,m)+ekont*derx_turn(ll,1,2)
9059 cd write (2,*) iii,g_corr6_loc(iii)
9061 eello_turn6=ekont*eel_turn6
9062 cd write (2,*) 'ekont',ekont
9063 cd write (2,*) 'eel_turn6',ekont*eel_turn6
9067 C-----------------------------------------------------------------------------
9068 double precision function scalar(u,v)
9069 !DIR$ INLINEALWAYS scalar
9071 cDEC$ ATTRIBUTES FORCEINLINE::scalar
9074 double precision u(3),v(3)
9075 cd double precision sc
9083 scalar=u(1)*v(1)+u(2)*v(2)+u(3)*v(3)
9086 crc-------------------------------------------------
9087 SUBROUTINE MATVEC2(A1,V1,V2)
9088 !DIR$ INLINEALWAYS MATVEC2
9090 cDEC$ ATTRIBUTES FORCEINLINE::MATVEC2
9092 implicit real*8 (a-h,o-z)
9093 include 'DIMENSIONS'
9094 DIMENSION A1(2,2),V1(2),V2(2)
9098 c 3 VI=VI+A1(I,K)*V1(K)
9102 vaux1=a1(1,1)*v1(1)+a1(1,2)*v1(2)
9103 vaux2=a1(2,1)*v1(1)+a1(2,2)*v1(2)
9108 C---------------------------------------
9109 SUBROUTINE MATMAT2(A1,A2,A3)
9111 cDEC$ ATTRIBUTES FORCEINLINE::MATMAT2
9113 implicit real*8 (a-h,o-z)
9114 include 'DIMENSIONS'
9115 DIMENSION A1(2,2),A2(2,2),A3(2,2)
9116 c DIMENSION AI3(2,2)
9120 c A3IJ=A3IJ+A1(I,K)*A2(K,J)
9126 ai3_11=a1(1,1)*a2(1,1)+a1(1,2)*a2(2,1)
9127 ai3_12=a1(1,1)*a2(1,2)+a1(1,2)*a2(2,2)
9128 ai3_21=a1(2,1)*a2(1,1)+a1(2,2)*a2(2,1)
9129 ai3_22=a1(2,1)*a2(1,2)+a1(2,2)*a2(2,2)
9137 c-------------------------------------------------------------------------
9138 double precision function scalar2(u,v)
9139 !DIR$ INLINEALWAYS scalar2
9141 double precision u(2),v(2)
9144 scalar2=u(1)*v(1)+u(2)*v(2)
9148 C-----------------------------------------------------------------------------
9150 subroutine transpose2(a,at)
9151 !DIR$ INLINEALWAYS transpose2
9153 cDEC$ ATTRIBUTES FORCEINLINE::transpose2
9156 double precision a(2,2),at(2,2)
9163 c--------------------------------------------------------------------------
9164 subroutine transpose(n,a,at)
9167 double precision a(n,n),at(n,n)
9175 C---------------------------------------------------------------------------
9176 subroutine prodmat3(a1,a2,kk,transp,prod)
9177 !DIR$ INLINEALWAYS prodmat3
9179 cDEC$ ATTRIBUTES FORCEINLINE::prodmat3
9183 double precision a1(2,2),a2(2,2),a2t(2,2),kk(2,2),prod(2,2)
9185 crc double precision auxmat(2,2),prod_(2,2)
9188 crc call transpose2(kk(1,1),auxmat(1,1))
9189 crc call matmat2(a1(1,1),auxmat(1,1),auxmat(1,1))
9190 crc call matmat2(auxmat(1,1),a2(1,1),prod_(1,1))
9192 prod(1,1)=(a1(1,1)*kk(1,1)+a1(1,2)*kk(1,2))*a2(1,1)
9193 & +(a1(1,1)*kk(2,1)+a1(1,2)*kk(2,2))*a2(2,1)
9194 prod(1,2)=(a1(1,1)*kk(1,1)+a1(1,2)*kk(1,2))*a2(1,2)
9195 & +(a1(1,1)*kk(2,1)+a1(1,2)*kk(2,2))*a2(2,2)
9196 prod(2,1)=(a1(2,1)*kk(1,1)+a1(2,2)*kk(1,2))*a2(1,1)
9197 & +(a1(2,1)*kk(2,1)+a1(2,2)*kk(2,2))*a2(2,1)
9198 prod(2,2)=(a1(2,1)*kk(1,1)+a1(2,2)*kk(1,2))*a2(1,2)
9199 & +(a1(2,1)*kk(2,1)+a1(2,2)*kk(2,2))*a2(2,2)
9202 crc call matmat2(a1(1,1),kk(1,1),auxmat(1,1))
9203 crc call matmat2(auxmat(1,1),a2(1,1),prod_(1,1))
9205 prod(1,1)=(a1(1,1)*kk(1,1)+a1(1,2)*kk(2,1))*a2(1,1)
9206 & +(a1(1,1)*kk(1,2)+a1(1,2)*kk(2,2))*a2(2,1)
9207 prod(1,2)=(a1(1,1)*kk(1,1)+a1(1,2)*kk(2,1))*a2(1,2)
9208 & +(a1(1,1)*kk(1,2)+a1(1,2)*kk(2,2))*a2(2,2)
9209 prod(2,1)=(a1(2,1)*kk(1,1)+a1(2,2)*kk(2,1))*a2(1,1)
9210 & +(a1(2,1)*kk(1,2)+a1(2,2)*kk(2,2))*a2(2,1)
9211 prod(2,2)=(a1(2,1)*kk(1,1)+a1(2,2)*kk(2,1))*a2(1,2)
9212 & +(a1(2,1)*kk(1,2)+a1(2,2)*kk(2,2))*a2(2,2)
9215 c call transpose2(a2(1,1),a2t(1,1))
9218 crc print *,((prod_(i,j),i=1,2),j=1,2)
9219 crc print *,((prod(i,j),i=1,2),j=1,2)