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'
27 include 'COMMON.SPLITELE'
29 c print*,"ETOTAL Processor",fg_rank," absolute rank",myrank,
30 c & " nfgtasks",nfgtasks
31 if (nfgtasks.gt.1) then
33 C FG slaves call the following matching MPI_Bcast in ERGASTULUM
34 if (fg_rank.eq.0) then
35 call MPI_Bcast(0,1,MPI_INTEGER,king,FG_COMM,IERROR)
36 c print *,"Processor",myrank," BROADCAST iorder"
37 C FG master sets up the WEIGHTS_ array which will be broadcast to the
38 C FG slaves as WEIGHTS array.
58 C FG Master broadcasts the WEIGHTS_ array
59 call MPI_Bcast(weights_(1),n_ene,
60 & MPI_DOUBLE_PRECISION,king,FG_COMM,IERROR)
62 C FG slaves receive the WEIGHTS array
63 call MPI_Bcast(weights(1),n_ene,
64 & MPI_DOUBLE_PRECISION,king,FG_COMM,IERROR)
85 time_Bcast=time_Bcast+MPI_Wtime()-time00
86 time_Bcastw=time_Bcastw+MPI_Wtime()-time00
87 c call chainbuild_cart
89 c print *,'Processor',myrank,' calling etotal ipot=',ipot
90 c print *,'Processor',myrank,' nnt=',nnt,' nct=',nct
92 c if (modecalc.eq.12.or.modecalc.eq.14) then
93 c call int_from_cart1(.false.)
100 C Compute the side-chain and electrostatic interaction energy
103 goto (101,102,103,104,105,106) ipot
104 C Lennard-Jones potential.
106 cd print '(a)','Exit ELJ'
108 C Lennard-Jones-Kihara potential (shifted).
111 C Berne-Pechukas potential (dilated LJ, angular dependence).
114 C Gay-Berne potential (shifted LJ, angular dependence).
116 C print *,"bylem w egb"
118 C Gay-Berne-Vorobjev potential (shifted LJ, angular dependence).
121 C Soft-sphere potential
122 106 call e_softsphere(evdw)
124 C Calculate electrostatic (H-bonding) energy of the main chain.
128 cmc Sep-06: egb takes care of dynamic ss bonds too
130 c if (dyn_ss) call dyn_set_nss
132 c print *,"Processor",myrank," computed USCSC"
138 time_vec=time_vec+MPI_Wtime()-time01
140 C Introduction of shielding effect first for each peptide group
141 C the shielding factor is set this factor is describing how each
142 C peptide group is shielded by side-chains
143 C the matrix - shield_fac(i) the i index describe the ith between i and i+1
144 C write (iout,*) "shield_mode",shield_mode
145 if (shield_mode.eq.1) then
147 else if (shield_mode.eq.2) then
150 c print *,"Processor",myrank," left VEC_AND_DERIV"
153 if (welec.gt.0d0.or.wvdwpp.gt.0d0.or.wel_loc.gt.0d0.or.
154 & wturn3.gt.0d0.or.wturn4.gt.0d0 .or. wcorr.gt.0.0d0
155 & .or. wcorr4.gt.0.0d0 .or. wcorr5.gt.0.d0
156 & .or. wcorr6.gt.0.0d0 .or. wturn6.gt.0.0d0 ) then
158 if (welec.gt.0d0.or.wel_loc.gt.0d0.or.
159 & wturn3.gt.0d0.or.wturn4.gt.0d0 .or. wcorr.gt.0.0d0
160 & .or. wcorr4.gt.0.0d0 .or. wcorr5.gt.0.d0
161 & .or. wcorr6.gt.0.0d0 .or. wturn6.gt.0.0d0 ) then
163 call eelec(ees,evdw1,eel_loc,eello_turn3,eello_turn4)
172 write (iout,*) "Soft-spheer ELEC potential"
173 c call eelec_soft_sphere(ees,evdw1,eel_loc,eello_turn3,
176 c print *,"Processor",myrank," computed UELEC"
178 C Calculate excluded-volume interaction energy between peptide groups
183 call escp(evdw2,evdw2_14)
189 c write (iout,*) "Soft-sphere SCP potential"
190 call escp_soft_sphere(evdw2,evdw2_14)
193 c Calculate the bond-stretching energy
197 C Calculate the disulfide-bridge and other energy and the contributions
198 C from other distance constraints.
199 cd print *,'Calling EHPB'
201 cd print *,'EHPB exitted succesfully.'
203 C Calculate the virtual-bond-angle energy.
205 if (wang.gt.0d0) then
206 if ((tor_mode.eq.0).or.(tor_mode.eq.2)) then
207 call ebend(ebe,ethetacnstr)
209 C ebend kcc is Kubo cumulant clustered rigorous attemp to derive the
211 if ((tor_mode.eq.1).or.(tor_mode.eq.2)) then
212 call ebend_kcc(ebe,ethetacnstr)
218 c print *,"Processor",myrank," computed UB"
220 C Calculate the SC local energy.
222 C print *,"TU DOCHODZE?"
224 c print *,"Processor",myrank," computed USC"
226 C Calculate the virtual-bond torsional energy.
228 cd print *,'nterm=',nterm
229 C print *,"tor",tor_mode
231 if ((tor_mode.eq.0).or.(tor_mode.eq.2)) then
232 call etor(etors,edihcnstr)
234 C etor kcc is Kubo cumulant clustered rigorous attemp to derive the
236 if ((tor_mode.eq.1).or.(tor_mode.eq.2)) then
237 call etor_kcc(etors,edihcnstr)
243 c print *,"Processor",myrank," computed Utor"
245 C 6/23/01 Calculate double-torsional energy
247 if ((wtor_d.gt.0).and.((tor_mode.eq.0).or.(tor_mode.eq.2))) then
252 c print *,"Processor",myrank," computed Utord"
254 C 21/5/07 Calculate local sicdechain correlation energy
256 if (wsccor.gt.0.0d0) then
257 call eback_sc_corr(esccor)
261 C print *,"PRZED MULIt"
262 c print *,"Processor",myrank," computed Usccorr"
264 C 12/1/95 Multi-body terms
268 if ((wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0
269 & .or. wturn6.gt.0.0d0) .and. ipot.lt.6) then
270 call multibody_eello(ecorr,ecorr5,ecorr6,eturn6,n_corr,n_corr1)
271 cd write(2,*)'multibody_eello n_corr=',n_corr,' n_corr1=',n_corr1,
272 cd &" ecorr",ecorr," ecorr5",ecorr5," ecorr6",ecorr6," eturn6",eturn6
279 if ((wcorr4.eq.0.0d0 .and. wcorr.gt.0.0d0) .and. ipot.lt.6) then
280 call multibody_hb(ecorr,ecorr5,ecorr6,n_corr,n_corr1)
281 cd write (iout,*) "multibody_hb ecorr",ecorr
283 c print *,"Processor",myrank," computed Ucorr"
285 C If performing constraint dynamics, call the constraint energy
286 C after the equilibration time
287 if(usampl.and.totT.gt.eq_time) then
294 C 01/27/2015 added by adasko
295 C the energy component below is energy transfer into lipid environment
296 C based on partition function
297 C print *,"przed lipidami"
298 if (wliptran.gt.0) then
299 call Eliptransfer(eliptran)
301 C print *,"za lipidami"
302 if (AFMlog.gt.0) then
303 call AFMforce(Eafmforce)
304 else if (selfguide.gt.0) then
305 call AFMvel(Eafmforce)
308 time_enecalc=time_enecalc+MPI_Wtime()-time00
310 c print *,"Processor",myrank," computed Uconstr"
319 energia(2)=evdw2-evdw2_14
336 energia(8)=eello_turn3
337 energia(9)=eello_turn4
344 energia(19)=edihcnstr
346 energia(20)=Uconst+Uconst_back
349 energia(23)=Eafmforce
350 energia(24)=ethetacnstr
351 c Here are the energies showed per procesor if the are more processors
352 c per molecule then we sum it up in sum_energy subroutine
353 c print *," Processor",myrank," calls SUM_ENERGY"
354 call sum_energy(energia,.true.)
355 if (dyn_ss) call dyn_set_nss
356 c print *," Processor",myrank," left SUM_ENERGY"
358 time_sumene=time_sumene+MPI_Wtime()-time00
362 c-------------------------------------------------------------------------------
363 subroutine sum_energy(energia,reduce)
364 implicit real*8 (a-h,o-z)
369 cMS$ATTRIBUTES C :: proc_proc
375 include 'COMMON.SETUP'
376 include 'COMMON.IOUNITS'
377 double precision energia(0:n_ene),enebuff(0:n_ene+1)
378 include 'COMMON.FFIELD'
379 include 'COMMON.DERIV'
380 include 'COMMON.INTERACT'
381 include 'COMMON.SBRIDGE'
382 include 'COMMON.CHAIN'
384 include 'COMMON.CONTROL'
385 include 'COMMON.TIME1'
388 if (nfgtasks.gt.1 .and. reduce) then
390 write (iout,*) "energies before REDUCE"
391 call enerprint(energia)
395 enebuff(i)=energia(i)
398 call MPI_Barrier(FG_COMM,IERR)
399 time_barrier_e=time_barrier_e+MPI_Wtime()-time00
401 call MPI_Reduce(enebuff(0),energia(0),n_ene+1,
402 & MPI_DOUBLE_PRECISION,MPI_SUM,king,FG_COMM,IERR)
404 write (iout,*) "energies after REDUCE"
405 call enerprint(energia)
408 time_Reduce=time_Reduce+MPI_Wtime()-time00
410 if (fg_rank.eq.0) then
414 evdw2=energia(2)+energia(18)
430 eello_turn3=energia(8)
431 eello_turn4=energia(9)
438 edihcnstr=energia(19)
443 Eafmforce=energia(23)
444 ethetacnstr=energia(24)
446 etot=wsc*evdw+wscp*evdw2+welec*ees+wvdwpp*evdw1
447 & +wang*ebe+wtor*etors+wscloc*escloc
448 & +wstrain*ehpb+wcorr*ecorr+wcorr5*ecorr5
449 & +wcorr6*ecorr6+wturn4*eello_turn4+wturn3*eello_turn3
450 & +wturn6*eturn6+wel_loc*eel_loc+edihcnstr+wtor_d*etors_d
451 & +wbond*estr+Uconst+wsccor*esccor+wliptran*eliptran+Eafmforce
454 etot=wsc*evdw+wscp*evdw2+welec*(ees+evdw1)
455 & +wang*ebe+wtor*etors+wscloc*escloc
456 & +wstrain*ehpb+wcorr*ecorr+wcorr5*ecorr5
457 & +wcorr6*ecorr6+wturn4*eello_turn4+wturn3*eello_turn3
458 & +wturn6*eturn6+wel_loc*eel_loc+edihcnstr+wtor_d*etors_d
459 & +wbond*estr+Uconst+wsccor*esccor+wliptran*eliptran
467 if (isnan(etot).ne.0) energia(0)=1.0d+99
469 if (isnan(etot)) energia(0)=1.0d+99
474 idumm=proc_proc(etot,i)
476 call proc_proc(etot,i)
478 if(i.eq.1)energia(0)=1.0d+99
485 c-------------------------------------------------------------------------------
486 subroutine sum_gradient
487 implicit real*8 (a-h,o-z)
492 cMS$ATTRIBUTES C :: proc_proc
498 double precision gradbufc(3,-1:maxres),gradbufx(3,-1:maxres),
499 & glocbuf(4*maxres),gradbufc_sum(3,-1:maxres)
500 & ,gloc_scbuf(3,-1:maxres)
501 include 'COMMON.SETUP'
502 include 'COMMON.IOUNITS'
503 include 'COMMON.FFIELD'
504 include 'COMMON.DERIV'
505 include 'COMMON.INTERACT'
506 include 'COMMON.SBRIDGE'
507 include 'COMMON.CHAIN'
509 include 'COMMON.CONTROL'
510 include 'COMMON.TIME1'
511 include 'COMMON.MAXGRAD'
512 include 'COMMON.SCCOR'
517 write (iout,*) "sum_gradient gvdwc, gvdwx"
519 write (iout,'(i3,3f10.5,5x,3f10.5,5x,f10.5)')
520 & i,(gvdwx(j,i),j=1,3),(gvdwc(j,i),j=1,3)
525 C FG slaves call the following matching MPI_Bcast in ERGASTULUM
526 if (nfgtasks.gt.1 .and. fg_rank.eq.0)
527 & call MPI_Bcast(1,1,MPI_INTEGER,king,FG_COMM,IERROR)
530 C 9/29/08 AL Transform parts of gradients in site coordinates to the gradient
531 C in virtual-bond-vector coordinates
534 c write (iout,*) "gel_loc gel_loc_long and gel_loc_loc"
536 c write (iout,'(i5,3f10.5,2x,3f10.5,2x,f10.5)')
537 c & i,(gel_loc(j,i),j=1,3),(gel_loc_long(j,i),j=1,3),gel_loc_loc(i)
539 c write (iout,*) "gel_loc_tur3 gel_loc_turn4"
541 c write (iout,'(i5,3f10.5,2x,f10.5)')
542 c & i,(gcorr4_turn(j,i),j=1,3),gel_loc_turn4(i)
544 write (iout,*) "gradcorr5 gradcorr5_long gradcorr5_loc"
546 write (iout,'(i3,3f10.5,5x,3f10.5,5x,f10.5)')
547 & i,(gradcorr5(j,i),j=1,3),(gradcorr5_long(j,i),j=1,3),
555 gradbufc(j,i)=wsc*gvdwc(j,i)+
556 & wscp*(gvdwc_scp(j,i)+gvdwc_scpp(j,i))+
557 & welec*gelc_long(j,i)+wvdwpp*gvdwpp(j,i)+
558 & wel_loc*gel_loc_long(j,i)+
559 & wcorr*gradcorr_long(j,i)+
560 & wcorr5*gradcorr5_long(j,i)+
561 & wcorr6*gradcorr6_long(j,i)+
562 & wturn6*gcorr6_turn_long(j,i)+
564 & +wliptran*gliptranc(j,i)
566 & +welec*gshieldc(j,i)
567 & +wcorr*gshieldc_ec(j,i)
568 & +wturn3*gshieldc_t3(j,i)
569 & +wturn4*gshieldc_t4(j,i)
570 & +wel_loc*gshieldc_ll(j,i)
578 gradbufc(j,i)=wsc*gvdwc(j,i)+
579 & wscp*(gvdwc_scp(j,i)+gvdwc_scpp(j,i))+
580 & welec*gelc_long(j,i)+
582 & wel_loc*gel_loc_long(j,i)+
583 & wcorr*gradcorr_long(j,i)+
584 & wcorr5*gradcorr5_long(j,i)+
585 & wcorr6*gradcorr6_long(j,i)+
586 & wturn6*gcorr6_turn_long(j,i)+
588 & +wliptran*gliptranc(j,i)
590 & +welec*gshieldc(j,i)
591 & +wcorr*gshieldc_ec(j,i)
592 & +wturn4*gshieldc_t4(j,i)
593 & +wel_loc*gshieldc_ll(j,i)
600 if (nfgtasks.gt.1) then
603 write (iout,*) "gradbufc before allreduce"
605 write (iout,'(i3,3f10.5)') i,(gradbufc(j,i),j=1,3)
611 gradbufc_sum(j,i)=gradbufc(j,i)
614 c call MPI_AllReduce(gradbufc(1,1),gradbufc_sum(1,1),3*nres,
615 c & MPI_DOUBLE_PRECISION,MPI_SUM,FG_COMM,IERR)
616 c time_reduce=time_reduce+MPI_Wtime()-time00
618 c write (iout,*) "gradbufc_sum after allreduce"
620 c write (iout,'(i3,3f10.5)') i,(gradbufc_sum(j,i),j=1,3)
625 c time_allreduce=time_allreduce+MPI_Wtime()-time00
633 write (iout,*) "igrad_start",igrad_start," igrad_end",igrad_end
634 write (iout,*) (i," jgrad_start",jgrad_start(i),
635 & " jgrad_end ",jgrad_end(i),
636 & i=igrad_start,igrad_end)
639 c Obsolete and inefficient code; we can make the effort O(n) and, therefore,
640 c do not parallelize this part.
642 c do i=igrad_start,igrad_end
643 c do j=jgrad_start(i),jgrad_end(i)
645 c gradbufc(k,i)=gradbufc(k,i)+gradbufc_sum(k,j)
650 gradbufc(j,nres-1)=gradbufc_sum(j,nres)
654 gradbufc(j,i)=gradbufc(j,i+1)+gradbufc_sum(j,i+1)
658 write (iout,*) "gradbufc after summing"
660 write (iout,'(i3,3f10.5)') i,(gradbufc(j,i),j=1,3)
667 write (iout,*) "gradbufc"
669 write (iout,'(i3,3f10.5)') i,(gradbufc(j,i),j=1,3)
675 gradbufc_sum(j,i)=gradbufc(j,i)
680 gradbufc(j,nres-1)=gradbufc_sum(j,nres)
684 gradbufc(j,i)=gradbufc(j,i+1)+gradbufc_sum(j,i+1)
689 c gradbufc(k,i)=0.0d0
693 c gradbufc(k,i)=gradbufc(k,i)+gradbufc(k,j)
698 write (iout,*) "gradbufc after summing"
700 write (iout,'(i3,3f10.5)') i,(gradbufc(j,i),j=1,3)
708 gradbufc(k,nres)=0.0d0
713 C print *,gradbufc(1,13)
714 C print *,welec*gelc(1,13)
715 C print *,wel_loc*gel_loc(1,13)
716 C print *,0.5d0*(wscp*gvdwc_scpp(1,13))
717 C print *,welec*gelc_long(1,13)+wvdwpp*gvdwpp(1,13)
718 C print *,wel_loc*gel_loc_long(1,13)
719 C print *,gradafm(1,13),"AFM"
720 gradc(j,i,icg)=gradbufc(j,i)+welec*gelc(j,i)+
721 & wel_loc*gel_loc(j,i)+
722 & 0.5d0*(wscp*gvdwc_scpp(j,i)+
723 & welec*gelc_long(j,i)+wvdwpp*gvdwpp(j,i)+
724 & wel_loc*gel_loc_long(j,i)+
725 & wcorr*gradcorr_long(j,i)+
726 & wcorr5*gradcorr5_long(j,i)+
727 & wcorr6*gradcorr6_long(j,i)+
728 & wturn6*gcorr6_turn_long(j,i))+
730 & wcorr*gradcorr(j,i)+
731 & wturn3*gcorr3_turn(j,i)+
732 & wturn4*gcorr4_turn(j,i)+
733 & wcorr5*gradcorr5(j,i)+
734 & wcorr6*gradcorr6(j,i)+
735 & wturn6*gcorr6_turn(j,i)+
736 & wsccor*gsccorc(j,i)
737 & +wscloc*gscloc(j,i)
738 & +wliptran*gliptranc(j,i)
740 & +welec*gshieldc(j,i)
741 & +welec*gshieldc_loc(j,i)
742 & +wcorr*gshieldc_ec(j,i)
743 & +wcorr*gshieldc_loc_ec(j,i)
744 & +wturn3*gshieldc_t3(j,i)
745 & +wturn3*gshieldc_loc_t3(j,i)
746 & +wturn4*gshieldc_t4(j,i)
747 & +wturn4*gshieldc_loc_t4(j,i)
748 & +wel_loc*gshieldc_ll(j,i)
749 & +wel_loc*gshieldc_loc_ll(j,i)
757 gradc(j,i,icg)=gradbufc(j,i)+welec*gelc(j,i)+
758 & wel_loc*gel_loc(j,i)+
759 & 0.5d0*(wscp*gvdwc_scpp(j,i)+
760 & welec*gelc_long(j,i)+
761 & wel_loc*gel_loc_long(j,i)+
762 & wcorr*gcorr_long(j,i)+
763 & wcorr5*gradcorr5_long(j,i)+
764 & wcorr6*gradcorr6_long(j,i)+
765 & wturn6*gcorr6_turn_long(j,i))+
767 & wcorr*gradcorr(j,i)+
768 & wturn3*gcorr3_turn(j,i)+
769 & wturn4*gcorr4_turn(j,i)+
770 & wcorr5*gradcorr5(j,i)+
771 & wcorr6*gradcorr6(j,i)+
772 & wturn6*gcorr6_turn(j,i)+
773 & wsccor*gsccorc(j,i)
774 & +wscloc*gscloc(j,i)
775 & +wliptran*gliptranc(j,i)
777 & +welec*gshieldc(j,i)
778 & +welec*gshieldc_loc(j,i)
779 & +wcorr*gshieldc_ec(j,i)
780 & +wcorr*gshieldc_loc_ec(j,i)
781 & +wturn3*gshieldc_t3(j,i)
782 & +wturn3*gshieldc_loc_t3(j,i)
783 & +wturn4*gshieldc_t4(j,i)
784 & +wturn4*gshieldc_loc_t4(j,i)
785 & +wel_loc*gshieldc_ll(j,i)
786 & +wel_loc*gshieldc_loc_ll(j,i)
793 gradx(j,i,icg)=wsc*gvdwx(j,i)+wscp*gradx_scp(j,i)+
795 & wstrain*ghpbx(j,i)+wcorr*gradxorr(j,i)+
796 & wsccor*gsccorx(j,i)
797 & +wscloc*gsclocx(j,i)
798 & +wliptran*gliptranx(j,i)
799 & +welec*gshieldx(j,i)
800 & +wcorr*gshieldx_ec(j,i)
801 & +wturn3*gshieldx_t3(j,i)
802 & +wturn4*gshieldx_t4(j,i)
803 & +wel_loc*gshieldx_ll(j,i)
810 write (iout,*) "gloc before adding corr"
812 write (iout,*) i,gloc(i,icg)
816 gloc(i,icg)=gloc(i,icg)+wcorr*gcorr_loc(i)
817 & +wcorr5*g_corr5_loc(i)
818 & +wcorr6*g_corr6_loc(i)
819 & +wturn4*gel_loc_turn4(i)
820 & +wturn3*gel_loc_turn3(i)
821 & +wturn6*gel_loc_turn6(i)
822 & +wel_loc*gel_loc_loc(i)
825 write (iout,*) "gloc after adding corr"
827 write (iout,*) i,gloc(i,icg)
831 if (nfgtasks.gt.1) then
834 gradbufc(j,i)=gradc(j,i,icg)
835 gradbufx(j,i)=gradx(j,i,icg)
839 glocbuf(i)=gloc(i,icg)
843 write (iout,*) "gloc_sc before reduce"
846 write (iout,*) i,j,gloc_sc(j,i,icg)
853 gloc_scbuf(j,i)=gloc_sc(j,i,icg)
857 call MPI_Barrier(FG_COMM,IERR)
858 time_barrier_g=time_barrier_g+MPI_Wtime()-time00
860 call MPI_Reduce(gradbufc(1,1),gradc(1,1,icg),3*nres,
861 & MPI_DOUBLE_PRECISION,MPI_SUM,king,FG_COMM,IERR)
862 call MPI_Reduce(gradbufx(1,1),gradx(1,1,icg),3*nres,
863 & MPI_DOUBLE_PRECISION,MPI_SUM,king,FG_COMM,IERR)
864 call MPI_Reduce(glocbuf(1),gloc(1,icg),4*nres,
865 & MPI_DOUBLE_PRECISION,MPI_SUM,king,FG_COMM,IERR)
866 time_reduce=time_reduce+MPI_Wtime()-time00
867 call MPI_Reduce(gloc_scbuf(1,1),gloc_sc(1,1,icg),3*nres,
868 & MPI_DOUBLE_PRECISION,MPI_SUM,king,FG_COMM,IERR)
869 time_reduce=time_reduce+MPI_Wtime()-time00
872 write (iout,*) "gloc_sc after reduce"
875 write (iout,*) i,j,gloc_sc(j,i,icg)
881 write (iout,*) "gloc after reduce"
883 write (iout,*) i,gloc(i,icg)
888 if (gnorm_check) then
890 c Compute the maximum elements of the gradient
900 gcorr3_turn_max=0.0d0
901 gcorr4_turn_max=0.0d0
904 gcorr6_turn_max=0.0d0
914 gvdwc_norm=dsqrt(scalar(gvdwc(1,i),gvdwc(1,i)))
915 if (gvdwc_norm.gt.gvdwc_max) gvdwc_max=gvdwc_norm
916 gvdwc_scp_norm=dsqrt(scalar(gvdwc_scp(1,i),gvdwc_scp(1,i)))
917 if (gvdwc_scp_norm.gt.gvdwc_scp_max)
918 & gvdwc_scp_max=gvdwc_scp_norm
919 gelc_norm=dsqrt(scalar(gelc(1,i),gelc(1,i)))
920 if (gelc_norm.gt.gelc_max) gelc_max=gelc_norm
921 gvdwpp_norm=dsqrt(scalar(gvdwpp(1,i),gvdwpp(1,i)))
922 if (gvdwpp_norm.gt.gvdwpp_max) gvdwpp_max=gvdwpp_norm
923 gradb_norm=dsqrt(scalar(gradb(1,i),gradb(1,i)))
924 if (gradb_norm.gt.gradb_max) gradb_max=gradb_norm
925 ghpbc_norm=dsqrt(scalar(ghpbc(1,i),ghpbc(1,i)))
926 if (ghpbc_norm.gt.ghpbc_max) ghpbc_max=ghpbc_norm
927 gradcorr_norm=dsqrt(scalar(gradcorr(1,i),gradcorr(1,i)))
928 if (gradcorr_norm.gt.gradcorr_max) gradcorr_max=gradcorr_norm
929 gel_loc_norm=dsqrt(scalar(gel_loc(1,i),gel_loc(1,i)))
930 if (gel_loc_norm.gt.gel_loc_max) gel_loc_max=gel_loc_norm
931 gcorr3_turn_norm=dsqrt(scalar(gcorr3_turn(1,i),
933 if (gcorr3_turn_norm.gt.gcorr3_turn_max)
934 & gcorr3_turn_max=gcorr3_turn_norm
935 gcorr4_turn_norm=dsqrt(scalar(gcorr4_turn(1,i),
937 if (gcorr4_turn_norm.gt.gcorr4_turn_max)
938 & gcorr4_turn_max=gcorr4_turn_norm
939 gradcorr5_norm=dsqrt(scalar(gradcorr5(1,i),gradcorr5(1,i)))
940 if (gradcorr5_norm.gt.gradcorr5_max)
941 & gradcorr5_max=gradcorr5_norm
942 gradcorr6_norm=dsqrt(scalar(gradcorr6(1,i),gradcorr6(1,i)))
943 if (gradcorr6_norm.gt.gradcorr6_max) gcorr6_max=gradcorr6_norm
944 gcorr6_turn_norm=dsqrt(scalar(gcorr6_turn(1,i),
946 if (gcorr6_turn_norm.gt.gcorr6_turn_max)
947 & gcorr6_turn_max=gcorr6_turn_norm
948 gsccorr_norm=dsqrt(scalar(gsccorc(1,i),gsccorc(1,i)))
949 if (gsccorr_norm.gt.gsccorr_max) gsccorr_max=gsccorr_norm
950 gscloc_norm=dsqrt(scalar(gscloc(1,i),gscloc(1,i)))
951 if (gscloc_norm.gt.gscloc_max) gscloc_max=gscloc_norm
952 gvdwx_norm=dsqrt(scalar(gvdwx(1,i),gvdwx(1,i)))
953 if (gvdwx_norm.gt.gvdwx_max) gvdwx_max=gvdwx_norm
954 gradx_scp_norm=dsqrt(scalar(gradx_scp(1,i),gradx_scp(1,i)))
955 if (gradx_scp_norm.gt.gradx_scp_max)
956 & gradx_scp_max=gradx_scp_norm
957 ghpbx_norm=dsqrt(scalar(ghpbx(1,i),ghpbx(1,i)))
958 if (ghpbx_norm.gt.ghpbx_max) ghpbx_max=ghpbx_norm
959 gradxorr_norm=dsqrt(scalar(gradxorr(1,i),gradxorr(1,i)))
960 if (gradxorr_norm.gt.gradxorr_max) gradxorr_max=gradxorr_norm
961 gsccorrx_norm=dsqrt(scalar(gsccorx(1,i),gsccorx(1,i)))
962 if (gsccorrx_norm.gt.gsccorrx_max) gsccorrx_max=gsccorrx_norm
963 gsclocx_norm=dsqrt(scalar(gsclocx(1,i),gsclocx(1,i)))
964 if (gsclocx_norm.gt.gsclocx_max) gsclocx_max=gsclocx_norm
968 open(istat,file=statname,position="append")
970 open(istat,file=statname,access="append")
972 write (istat,'(1h#,21f10.2)') gvdwc_max,gvdwc_scp_max,
973 & gelc_max,gvdwpp_max,gradb_max,ghpbc_max,
974 & gradcorr_max,gel_loc_max,gcorr3_turn_max,gcorr4_turn_max,
975 & gradcorr5_max,gradcorr6_max,gcorr6_turn_max,gsccorc_max,
976 & gscloc_max,gvdwx_max,gradx_scp_max,ghpbx_max,gradxorr_max,
977 & gsccorx_max,gsclocx_max
979 if (gvdwc_max.gt.1.0d4) then
980 write (iout,*) "gvdwc gvdwx gradb gradbx"
982 write(iout,'(i5,4(3f10.2,5x))') i,(gvdwc(j,i),gvdwx(j,i),
983 & gradb(j,i),gradbx(j,i),j=1,3)
985 call pdbout(0.0d0,'cipiszcze',iout)
991 write (iout,*) "gradc gradx gloc"
993 write (iout,'(i5,3f10.5,5x,3f10.5,5x,f10.5)')
994 & i,(gradc(j,i,icg),j=1,3),(gradx(j,i,icg),j=1,3),gloc(i,icg)
998 time_sumgradient=time_sumgradient+MPI_Wtime()-time01
1002 c-------------------------------------------------------------------------------
1003 subroutine rescale_weights(t_bath)
1004 implicit real*8 (a-h,o-z)
1005 include 'DIMENSIONS'
1006 include 'COMMON.IOUNITS'
1007 include 'COMMON.FFIELD'
1008 include 'COMMON.SBRIDGE'
1009 include 'COMMON.CONTROL'
1010 double precision kfac /2.4d0/
1011 double precision x,x2,x3,x4,x5,licznik /1.12692801104297249644/
1013 c facT=2*temp0/(t_bath+temp0)
1014 if (rescale_mode.eq.0) then
1020 else if (rescale_mode.eq.1) then
1021 facT=kfac/(kfac-1.0d0+t_bath/temp0)
1022 facT2=kfac**2/(kfac**2-1.0d0+(t_bath/temp0)**2)
1023 facT3=kfac**3/(kfac**3-1.0d0+(t_bath/temp0)**3)
1024 facT4=kfac**4/(kfac**4-1.0d0+(t_bath/temp0)**4)
1025 facT5=kfac**5/(kfac**5-1.0d0+(t_bath/temp0)**5)
1026 else if (rescale_mode.eq.2) then
1032 facT=licznik/dlog(dexp(x)+dexp(-x))
1033 facT2=licznik/dlog(dexp(x2)+dexp(-x2))
1034 facT3=licznik/dlog(dexp(x3)+dexp(-x3))
1035 facT4=licznik/dlog(dexp(x4)+dexp(-x4))
1036 facT5=licznik/dlog(dexp(x5)+dexp(-x5))
1038 write (iout,*) "Wrong RESCALE_MODE",rescale_mode
1039 write (*,*) "Wrong RESCALE_MODE",rescale_mode
1041 call MPI_Finalize(MPI_COMM_WORLD,IERROR)
1045 if (shield_mode.gt.0) then
1046 wscp=weights(2)*fact
1048 wvdwpp=weights(16)*fact
1050 welec=weights(3)*fact
1051 wcorr=weights(4)*fact3
1052 wcorr5=weights(5)*fact4
1053 wcorr6=weights(6)*fact5
1054 wel_loc=weights(7)*fact2
1055 wturn3=weights(8)*fact2
1056 wturn4=weights(9)*fact3
1057 wturn6=weights(10)*fact5
1058 wtor=weights(13)*fact
1059 wtor_d=weights(14)*fact2
1060 wsccor=weights(21)*fact
1064 C------------------------------------------------------------------------
1065 subroutine enerprint(energia)
1066 implicit real*8 (a-h,o-z)
1067 include 'DIMENSIONS'
1068 include 'COMMON.IOUNITS'
1069 include 'COMMON.FFIELD'
1070 include 'COMMON.SBRIDGE'
1072 double precision energia(0:n_ene)
1077 evdw2=energia(2)+energia(18)
1089 eello_turn3=energia(8)
1090 eello_turn4=energia(9)
1091 eello_turn6=energia(10)
1097 edihcnstr=energia(19)
1101 eliptran=energia(22)
1102 Eafmforce=energia(23)
1103 ethetacnstr=energia(24)
1105 write (iout,10) evdw,wsc,evdw2,wscp,ees,welec,evdw1,wvdwpp,
1106 & estr,wbond,ebe,wang,
1107 & escloc,wscloc,etors,wtor,etors_d,wtor_d,ehpb,wstrain,
1109 & ecorr5,wcorr5,ecorr6,wcorr6,eel_loc,wel_loc,eello_turn3,wturn3,
1110 & eello_turn4,wturn4,eello_turn6,wturn6,esccor,wsccor,edihcnstr,
1111 & ethetacnstr,ebr*nss,Uconst,eliptran,wliptran,Eafmforc,
1113 10 format (/'Virtual-chain energies:'//
1114 & 'EVDW= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC-SC)'/
1115 & 'EVDW2= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC-p)'/
1116 & 'EES= ',1pE16.6,' WEIGHT=',1pD16.6,' (p-p)'/
1117 & 'EVDWPP=',1pE16.6,' WEIGHT=',1pD16.6,' (p-p VDW)'/
1118 & 'ESTR= ',1pE16.6,' WEIGHT=',1pD16.6,' (stretching)'/
1119 & 'EBE= ',1pE16.6,' WEIGHT=',1pD16.6,' (bending)'/
1120 & 'ESC= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC local)'/
1121 & 'ETORS= ',1pE16.6,' WEIGHT=',1pD16.6,' (torsional)'/
1122 & 'ETORSD=',1pE16.6,' WEIGHT=',1pD16.6,' (double torsional)'/
1123 & 'EHBP= ',1pE16.6,' WEIGHT=',1pD16.6,
1124 & ' (SS bridges & dist. cnstr.)'/
1125 & 'ECORR4=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
1126 & 'ECORR5=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
1127 & 'ECORR6=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
1128 & 'EELLO= ',1pE16.6,' WEIGHT=',1pD16.6,' (electrostatic-local)'/
1129 & 'ETURN3=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 3rd order)'/
1130 & 'ETURN4=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 4th order)'/
1131 & 'ETURN6=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 6th order)'/
1132 & 'ESCCOR=',1pE16.6,' WEIGHT=',1pD16.6,' (backbone-rotamer corr)'/
1133 & 'EDIHC= ',1pE16.6,' (dihedral angle constraints)'/
1134 & 'ETHETC= ',1pE16.6,' (valence angle constraints)'/
1135 & 'ESS= ',1pE16.6,' (disulfide-bridge intrinsic energy)'/
1136 & 'UCONST= ',1pE16.6,' (Constraint energy)'/
1137 & 'ELT=',1pE16.6, ' WEIGHT=',1pD16.6,' (Lipid transfer energy)'/
1138 & 'EAFM= ',1pE16.6,' (atomic-force microscopy)'/
1139 & 'ETOT= ',1pE16.6,' (total)')
1142 write (iout,10) evdw,wsc,evdw2,wscp,ees,welec,
1143 & estr,wbond,ebe,wang,
1144 & escloc,wscloc,etors,wtor,etors_d,wtor_d,ehpb,wstrain,
1146 & ecorr5,wcorr5,ecorr6,wcorr6,eel_loc,wel_loc,eello_turn3,wturn3,
1147 & eello_turn4,wturn4,eello_turn6,wturn6,esccor,wsccro,edihcnstr,
1148 & ethetacnstr,ebr*nss,Uconst,eliptran,wliptran,Eafmforc,
1150 10 format (/'Virtual-chain energies:'//
1151 & 'EVDW= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC-SC)'/
1152 & 'EVDW2= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC-p)'/
1153 & 'EES= ',1pE16.6,' WEIGHT=',1pD16.6,' (p-p)'/
1154 & 'ESTR= ',1pE16.6,' WEIGHT=',1pD16.6,' (stretching)'/
1155 & 'EBE= ',1pE16.6,' WEIGHT=',1pD16.6,' (bending)'/
1156 & 'ESC= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC local)'/
1157 & 'ETORS= ',1pE16.6,' WEIGHT=',1pD16.6,' (torsional)'/
1158 & 'ETORSD=',1pE16.6,' WEIGHT=',1pD16.6,' (double torsional)'/
1159 & 'EHBP= ',1pE16.6,' WEIGHT=',1pD16.6,
1160 & ' (SS bridges & dist. cnstr.)'/
1161 & 'ECORR4=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
1162 & 'ECORR5=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
1163 & 'ECORR6=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
1164 & 'EELLO= ',1pE16.6,' WEIGHT=',1pD16.6,' (electrostatic-local)'/
1165 & 'ETURN3=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 3rd order)'/
1166 & 'ETURN4=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 4th order)'/
1167 & 'ETURN6=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 6th order)'/
1168 & 'ESCCOR=',1pE16.6,' WEIGHT=',1pD16.6,' (backbone-rotamer corr)'/
1169 & 'EDIHC= ',1pE16.6,' (dihedral angle constraints)'/
1170 & 'ETHETC= ',1pE16.6,' (valence angle constraints)'/
1171 & 'ESS= ',1pE16.6,' (disulfide-bridge intrinsic energy)'/
1172 & 'UCONST=',1pE16.6,' (Constraint energy)'/
1173 & 'ELT=',1pE16.6, ' WEIGHT=',1pD16.6,' (Lipid transfer energy)'/
1174 & 'EAFM= ',1pE16.6,' (atomic-force microscopy)'/
1175 & 'ETOT= ',1pE16.6,' (total)')
1179 C-----------------------------------------------------------------------
1180 subroutine elj(evdw)
1182 C This subroutine calculates the interaction energy of nonbonded side chains
1183 C assuming the LJ potential of interaction.
1185 implicit real*8 (a-h,o-z)
1186 include 'DIMENSIONS'
1187 parameter (accur=1.0d-10)
1188 include 'COMMON.GEO'
1189 include 'COMMON.VAR'
1190 include 'COMMON.LOCAL'
1191 include 'COMMON.CHAIN'
1192 include 'COMMON.DERIV'
1193 include 'COMMON.INTERACT'
1194 include 'COMMON.TORSION'
1195 include 'COMMON.SBRIDGE'
1196 include 'COMMON.NAMES'
1197 include 'COMMON.IOUNITS'
1198 include 'COMMON.CONTACTS'
1200 c write(iout,*)'Entering ELJ nnt=',nnt,' nct=',nct,' expon=',expon
1202 do i=iatsc_s,iatsc_e
1203 itypi=iabs(itype(i))
1204 if (itypi.eq.ntyp1) cycle
1205 itypi1=iabs(itype(i+1))
1212 C Calculate SC interaction energy.
1214 do iint=1,nint_gr(i)
1215 cd write (iout,*) 'i=',i,' iint=',iint,' istart=',istart(i,iint),
1216 cd & 'iend=',iend(i,iint)
1217 do j=istart(i,iint),iend(i,iint)
1218 itypj=iabs(itype(j))
1219 if (itypj.eq.ntyp1) cycle
1223 C Change 12/1/95 to calculate four-body interactions
1224 rij=xj*xj+yj*yj+zj*zj
1226 c write (iout,*)'i=',i,' j=',j,' itypi=',itypi,' itypj=',itypj
1227 eps0ij=eps(itypi,itypj)
1229 C have you changed here?
1233 cd sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
1234 cd epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
1235 cd write (iout,'(2(a3,i3,2x),6(1pd12.4)/2(3(1pd12.4),5x)/)')
1236 cd & restyp(itypi),i,restyp(itypj),j,a(itypi,itypj),
1237 cd & bb(itypi,itypj),1.0D0/dsqrt(rrij),evdwij,epsi,sigm,
1238 cd & (c(k,i),k=1,3),(c(k,j),k=1,3)
1241 C Calculate the components of the gradient in DC and X
1243 fac=-rrij*(e1+evdwij)
1248 gvdwx(k,i)=gvdwx(k,i)-gg(k)
1249 gvdwx(k,j)=gvdwx(k,j)+gg(k)
1250 gvdwc(k,i)=gvdwc(k,i)-gg(k)
1251 gvdwc(k,j)=gvdwc(k,j)+gg(k)
1255 cgrad gvdwc(l,k)=gvdwc(l,k)+gg(l)
1259 C 12/1/95, revised on 5/20/97
1261 C Calculate the contact function. The ith column of the array JCONT will
1262 C contain the numbers of atoms that make contacts with the atom I (of numbers
1263 C greater than I). The arrays FACONT and GACONT will contain the values of
1264 C the contact function and its derivative.
1266 C Uncomment next line, if the correlation interactions include EVDW explicitly.
1267 c if (j.gt.i+1 .and. evdwij.le.0.0D0) then
1268 C Uncomment next line, if the correlation interactions are contact function only
1269 if (j.gt.i+1.and. eps0ij.gt.0.0D0) then
1271 sigij=sigma(itypi,itypj)
1272 r0ij=rs0(itypi,itypj)
1274 C Check whether the SC's are not too far to make a contact.
1277 call gcont(rij,rcut,1.0d0,0.2d0*rcut,fcont,fprimcont)
1278 C Add a new contact, if the SC's are close enough, but not too close (r<sigma).
1280 if (fcont.gt.0.0D0) then
1281 C If the SC-SC distance if close to sigma, apply spline.
1282 cAdam call gcont(-rij,-1.03d0*sigij,2.0d0*sigij,1.0d0,
1283 cAdam & fcont1,fprimcont1)
1284 cAdam fcont1=1.0d0-fcont1
1285 cAdam if (fcont1.gt.0.0d0) then
1286 cAdam fprimcont=fprimcont*fcont1+fcont*fprimcont1
1287 cAdam fcont=fcont*fcont1
1289 C Uncomment following 4 lines to have the geometric average of the epsilon0's
1290 cga eps0ij=1.0d0/dsqrt(eps0ij)
1292 cga gg(k)=gg(k)*eps0ij
1294 cga eps0ij=-evdwij*eps0ij
1295 C Uncomment for AL's type of SC correlation interactions.
1296 cadam eps0ij=-evdwij
1297 num_conti=num_conti+1
1298 jcont(num_conti,i)=j
1299 facont(num_conti,i)=fcont*eps0ij
1300 fprimcont=eps0ij*fprimcont/rij
1302 cAdam gacont(1,num_conti,i)=-fprimcont*xj+fcont*gg(1)
1303 cAdam gacont(2,num_conti,i)=-fprimcont*yj+fcont*gg(2)
1304 cAdam gacont(3,num_conti,i)=-fprimcont*zj+fcont*gg(3)
1305 C Uncomment following 3 lines for Skolnick's type of SC correlation.
1306 gacont(1,num_conti,i)=-fprimcont*xj
1307 gacont(2,num_conti,i)=-fprimcont*yj
1308 gacont(3,num_conti,i)=-fprimcont*zj
1309 cd write (iout,'(2i5,2f10.5)') i,j,rij,facont(num_conti,i)
1310 cd write (iout,'(2i3,3f10.5)')
1311 cd & i,j,(gacont(kk,num_conti,i),kk=1,3)
1317 num_cont(i)=num_conti
1321 gvdwc(j,i)=expon*gvdwc(j,i)
1322 gvdwx(j,i)=expon*gvdwx(j,i)
1325 C******************************************************************************
1329 C To save time, the factor of EXPON has been extracted from ALL components
1330 C of GVDWC and GRADX. Remember to multiply them by this factor before further
1333 C******************************************************************************
1336 C-----------------------------------------------------------------------------
1337 subroutine eljk(evdw)
1339 C This subroutine calculates the interaction energy of nonbonded side chains
1340 C assuming the LJK potential of interaction.
1342 implicit real*8 (a-h,o-z)
1343 include 'DIMENSIONS'
1344 include 'COMMON.GEO'
1345 include 'COMMON.VAR'
1346 include 'COMMON.LOCAL'
1347 include 'COMMON.CHAIN'
1348 include 'COMMON.DERIV'
1349 include 'COMMON.INTERACT'
1350 include 'COMMON.IOUNITS'
1351 include 'COMMON.NAMES'
1354 c print *,'Entering ELJK nnt=',nnt,' nct=',nct,' expon=',expon
1356 do i=iatsc_s,iatsc_e
1357 itypi=iabs(itype(i))
1358 if (itypi.eq.ntyp1) cycle
1359 itypi1=iabs(itype(i+1))
1364 C Calculate SC interaction energy.
1366 do iint=1,nint_gr(i)
1367 do j=istart(i,iint),iend(i,iint)
1368 itypj=iabs(itype(j))
1369 if (itypj.eq.ntyp1) cycle
1373 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
1374 fac_augm=rrij**expon
1375 e_augm=augm(itypi,itypj)*fac_augm
1376 r_inv_ij=dsqrt(rrij)
1378 r_shift_inv=1.0D0/(rij+r0(itypi,itypj)-sigma(itypi,itypj))
1379 fac=r_shift_inv**expon
1380 C have you changed here?
1384 cd sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
1385 cd epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
1386 cd write (iout,'(2(a3,i3,2x),8(1pd12.4)/2(3(1pd12.4),5x)/)')
1387 cd & restyp(itypi),i,restyp(itypj),j,aa(itypi,itypj),
1388 cd & bb(itypi,itypj),augm(itypi,itypj),epsi,sigm,
1389 cd & sigma(itypi,itypj),1.0D0/dsqrt(rrij),evdwij,
1390 cd & (c(k,i),k=1,3),(c(k,j),k=1,3)
1393 C Calculate the components of the gradient in DC and X
1395 fac=-2.0D0*rrij*e_augm-r_inv_ij*r_shift_inv*(e1+e1+e2)
1400 gvdwx(k,i)=gvdwx(k,i)-gg(k)
1401 gvdwx(k,j)=gvdwx(k,j)+gg(k)
1402 gvdwc(k,i)=gvdwc(k,i)-gg(k)
1403 gvdwc(k,j)=gvdwc(k,j)+gg(k)
1407 cgrad gvdwc(l,k)=gvdwc(l,k)+gg(l)
1415 gvdwc(j,i)=expon*gvdwc(j,i)
1416 gvdwx(j,i)=expon*gvdwx(j,i)
1421 C-----------------------------------------------------------------------------
1422 subroutine ebp(evdw)
1424 C This subroutine calculates the interaction energy of nonbonded side chains
1425 C assuming the Berne-Pechukas potential of interaction.
1427 implicit real*8 (a-h,o-z)
1428 include 'DIMENSIONS'
1429 include 'COMMON.GEO'
1430 include 'COMMON.VAR'
1431 include 'COMMON.LOCAL'
1432 include 'COMMON.CHAIN'
1433 include 'COMMON.DERIV'
1434 include 'COMMON.NAMES'
1435 include 'COMMON.INTERACT'
1436 include 'COMMON.IOUNITS'
1437 include 'COMMON.CALC'
1438 common /srutu/ icall
1439 c double precision rrsave(maxdim)
1442 c print *,'Entering EBP nnt=',nnt,' nct=',nct,' expon=',expon
1444 c if (icall.eq.0) then
1450 do i=iatsc_s,iatsc_e
1451 itypi=iabs(itype(i))
1452 if (itypi.eq.ntyp1) cycle
1453 itypi1=iabs(itype(i+1))
1457 dxi=dc_norm(1,nres+i)
1458 dyi=dc_norm(2,nres+i)
1459 dzi=dc_norm(3,nres+i)
1460 c dsci_inv=dsc_inv(itypi)
1461 dsci_inv=vbld_inv(i+nres)
1463 C Calculate SC interaction energy.
1465 do iint=1,nint_gr(i)
1466 do j=istart(i,iint),iend(i,iint)
1468 itypj=iabs(itype(j))
1469 if (itypj.eq.ntyp1) cycle
1470 c dscj_inv=dsc_inv(itypj)
1471 dscj_inv=vbld_inv(j+nres)
1472 chi1=chi(itypi,itypj)
1473 chi2=chi(itypj,itypi)
1480 alf12=0.5D0*(alf1+alf2)
1481 C For diagnostics only!!!
1494 dxj=dc_norm(1,nres+j)
1495 dyj=dc_norm(2,nres+j)
1496 dzj=dc_norm(3,nres+j)
1497 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
1498 cd if (icall.eq.0) then
1504 C Calculate the angle-dependent terms of energy & contributions to derivatives.
1506 C Calculate whole angle-dependent part of epsilon and contributions
1507 C to its derivatives
1508 C have you changed here?
1509 fac=(rrij*sigsq)**expon2
1512 evdwij=eps1*eps2rt*eps3rt*(e1+e2)
1513 eps2der=evdwij*eps3rt
1514 eps3der=evdwij*eps2rt
1515 evdwij=evdwij*eps2rt*eps3rt
1518 sigm=dabs(aa/bb)**(1.0D0/6.0D0)
1520 cd write (iout,'(2(a3,i3,2x),15(0pf7.3))')
1521 cd & restyp(itypi),i,restyp(itypj),j,
1522 cd & epsi,sigm,chi1,chi2,chip1,chip2,
1523 cd & eps1,eps2rt**2,eps3rt**2,1.0D0/dsqrt(sigsq),
1524 cd & om1,om2,om12,1.0D0/dsqrt(rrij),
1527 C Calculate gradient components.
1528 e1=e1*eps1*eps2rt**2*eps3rt**2
1529 fac=-expon*(e1+evdwij)
1532 C Calculate radial part of the gradient
1536 C Calculate the angular part of the gradient and sum add the contributions
1537 C to the appropriate components of the Cartesian gradient.
1545 C-----------------------------------------------------------------------------
1546 subroutine egb(evdw)
1548 C This subroutine calculates the interaction energy of nonbonded side chains
1549 C assuming the Gay-Berne potential of interaction.
1551 implicit real*8 (a-h,o-z)
1552 include 'DIMENSIONS'
1553 include 'COMMON.GEO'
1554 include 'COMMON.VAR'
1555 include 'COMMON.LOCAL'
1556 include 'COMMON.CHAIN'
1557 include 'COMMON.DERIV'
1558 include 'COMMON.NAMES'
1559 include 'COMMON.INTERACT'
1560 include 'COMMON.IOUNITS'
1561 include 'COMMON.CALC'
1562 include 'COMMON.CONTROL'
1563 include 'COMMON.SPLITELE'
1564 include 'COMMON.SBRIDGE'
1566 integer xshift,yshift,zshift
1569 ccccc energy_dec=.false.
1570 C print *,'Entering EGB nnt=',nnt,' nct=',nct,' expon=',expon
1573 c if (icall.eq.0) lprn=.false.
1575 C the loop over all 27 posible neigbours (for xshift=0,yshift=0,zshift=0
1576 C we have the original box)
1580 do i=iatsc_s,iatsc_e
1581 itypi=iabs(itype(i))
1582 if (itypi.eq.ntyp1) cycle
1583 itypi1=iabs(itype(i+1))
1587 C Return atom into box, boxxsize is size of box in x dimension
1589 c if (xi.gt.((xshift+0.5d0)*boxxsize)) xi=xi-boxxsize
1590 c if (xi.lt.((xshift-0.5d0)*boxxsize)) xi=xi+boxxsize
1591 C Condition for being inside the proper box
1592 c if ((xi.gt.((xshift+0.5d0)*boxxsize)).or.
1593 c & (xi.lt.((xshift-0.5d0)*boxxsize))) then
1597 c if (yi.gt.((yshift+0.5d0)*boxysize)) yi=yi-boxysize
1598 c if (yi.lt.((yshift-0.5d0)*boxysize)) yi=yi+boxysize
1599 C Condition for being inside the proper box
1600 c if ((yi.gt.((yshift+0.5d0)*boxysize)).or.
1601 c & (yi.lt.((yshift-0.5d0)*boxysize))) then
1605 c if (zi.gt.((zshift+0.5d0)*boxzsize)) zi=zi-boxzsize
1606 c if (zi.lt.((zshift-0.5d0)*boxzsize)) zi=zi+boxzsize
1607 C Condition for being inside the proper box
1608 c if ((zi.gt.((zshift+0.5d0)*boxzsize)).or.
1609 c & (zi.lt.((zshift-0.5d0)*boxzsize))) then
1613 if (xi.lt.0) xi=xi+boxxsize
1615 if (yi.lt.0) yi=yi+boxysize
1617 if (zi.lt.0) zi=zi+boxzsize
1618 C define scaling factor for lipids
1620 C if (positi.le.0) positi=positi+boxzsize
1622 C first for peptide groups
1623 c for each residue check if it is in lipid or lipid water border area
1624 if ((zi.gt.bordlipbot)
1625 &.and.(zi.lt.bordliptop)) then
1626 C the energy transfer exist
1627 if (zi.lt.buflipbot) then
1628 C what fraction I am in
1630 & ((zi-bordlipbot)/lipbufthick)
1631 C lipbufthick is thickenes of lipid buffore
1632 sslipi=sscalelip(fracinbuf)
1633 ssgradlipi=-sscagradlip(fracinbuf)/lipbufthick
1634 elseif (zi.gt.bufliptop) then
1635 fracinbuf=1.0d0-((bordliptop-zi)/lipbufthick)
1636 sslipi=sscalelip(fracinbuf)
1637 ssgradlipi=sscagradlip(fracinbuf)/lipbufthick
1647 C xi=xi+xshift*boxxsize
1648 C yi=yi+yshift*boxysize
1649 C zi=zi+zshift*boxzsize
1651 dxi=dc_norm(1,nres+i)
1652 dyi=dc_norm(2,nres+i)
1653 dzi=dc_norm(3,nres+i)
1654 c dsci_inv=dsc_inv(itypi)
1655 dsci_inv=vbld_inv(i+nres)
1656 c write (iout,*) "i",i,dsc_inv(itypi),dsci_inv,1.0d0/vbld(i+nres)
1657 c write (iout,*) "dcnori",dxi*dxi+dyi*dyi+dzi*dzi
1659 C Calculate SC interaction energy.
1661 do iint=1,nint_gr(i)
1662 do j=istart(i,iint),iend(i,iint)
1663 IF (dyn_ss_mask(i).and.dyn_ss_mask(j)) THEN
1665 c write(iout,*) "PRZED ZWYKLE", evdwij
1666 call dyn_ssbond_ene(i,j,evdwij)
1667 c write(iout,*) "PO ZWYKLE", evdwij
1670 if (energy_dec) write (iout,'(a6,2i5,0pf7.3,a3)')
1671 & 'evdw',i,j,evdwij,' ss'
1672 C triple bond artifac removal
1673 do k=j+1,iend(i,iint)
1674 C search over all next residues
1675 if (dyn_ss_mask(k)) then
1676 C check if they are cysteins
1677 C write(iout,*) 'k=',k
1679 c write(iout,*) "PRZED TRI", evdwij
1680 evdwij_przed_tri=evdwij
1681 call triple_ssbond_ene(i,j,k,evdwij)
1682 c if(evdwij_przed_tri.ne.evdwij) then
1683 c write (iout,*) "TRI:", evdwij, evdwij_przed_tri
1686 c write(iout,*) "PO TRI", evdwij
1687 C call the energy function that removes the artifical triple disulfide
1688 C bond the soubroutine is located in ssMD.F
1690 if (energy_dec) write (iout,'(a6,2i5,0pf7.3,a3)')
1691 & 'evdw',i,j,evdwij,'tss'
1692 endif!dyn_ss_mask(k)
1696 itypj=iabs(itype(j))
1697 if (itypj.eq.ntyp1) cycle
1698 c dscj_inv=dsc_inv(itypj)
1699 dscj_inv=vbld_inv(j+nres)
1700 c write (iout,*) "j",j,dsc_inv(itypj),dscj_inv,
1701 c & 1.0d0/vbld(j+nres)
1702 c write (iout,*) "i",i," j", j," itype",itype(i),itype(j)
1703 sig0ij=sigma(itypi,itypj)
1704 chi1=chi(itypi,itypj)
1705 chi2=chi(itypj,itypi)
1712 alf12=0.5D0*(alf1+alf2)
1713 C For diagnostics only!!!
1726 C Return atom J into box the original box
1728 c if (xj.gt.((0.5d0)*boxxsize)) xj=xj-boxxsize
1729 c if (xj.lt.((-0.5d0)*boxxsize)) xj=xj+boxxsize
1730 C Condition for being inside the proper box
1731 c if ((xj.gt.((0.5d0)*boxxsize)).or.
1732 c & (xj.lt.((-0.5d0)*boxxsize))) then
1736 c if (yj.gt.((0.5d0)*boxysize)) yj=yj-boxysize
1737 c if (yj.lt.((-0.5d0)*boxysize)) yj=yj+boxysize
1738 C Condition for being inside the proper box
1739 c if ((yj.gt.((0.5d0)*boxysize)).or.
1740 c & (yj.lt.((-0.5d0)*boxysize))) then
1744 c if (zj.gt.((0.5d0)*boxzsize)) zj=zj-boxzsize
1745 c if (zj.lt.((-0.5d0)*boxzsize)) zj=zj+boxzsize
1746 C Condition for being inside the proper box
1747 c if ((zj.gt.((0.5d0)*boxzsize)).or.
1748 c & (zj.lt.((-0.5d0)*boxzsize))) then
1752 if (xj.lt.0) xj=xj+boxxsize
1754 if (yj.lt.0) yj=yj+boxysize
1756 if (zj.lt.0) zj=zj+boxzsize
1757 if ((zj.gt.bordlipbot)
1758 &.and.(zj.lt.bordliptop)) then
1759 C the energy transfer exist
1760 if (zj.lt.buflipbot) then
1761 C what fraction I am in
1763 & ((zj-bordlipbot)/lipbufthick)
1764 C lipbufthick is thickenes of lipid buffore
1765 sslipj=sscalelip(fracinbuf)
1766 ssgradlipj=-sscagradlip(fracinbuf)/lipbufthick
1767 elseif (zj.gt.bufliptop) then
1768 fracinbuf=1.0d0-((bordliptop-zj)/lipbufthick)
1769 sslipj=sscalelip(fracinbuf)
1770 ssgradlipj=sscagradlip(fracinbuf)/lipbufthick
1779 aa=aa_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0
1780 & +aa_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
1781 bb=bb_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0
1782 & +bb_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
1783 C write(iout,*) "tu,", i,j,aa_lip(itypi,itypj),bb_lip(itypi,itypj)
1784 C if (aa.ne.aa_aq(itypi,itypj)) write(63,'(2e10.5)')
1785 C &(aa-aa_aq(itypi,itypj)),(bb-bb_aq(itypi,itypj))
1786 C if (ssgradlipj.gt.0.0d0) print *,"??WTF??"
1787 C print *,sslipi,sslipj,bordlipbot,zi,zj
1788 dist_init=(xj-xi)**2+(yj-yi)**2+(zj-zi)**2
1796 xj=xj_safe+xshift*boxxsize
1797 yj=yj_safe+yshift*boxysize
1798 zj=zj_safe+zshift*boxzsize
1799 dist_temp=(xj-xi)**2+(yj-yi)**2+(zj-zi)**2
1800 if(dist_temp.lt.dist_init) then
1810 if (subchap.eq.1) then
1819 dxj=dc_norm(1,nres+j)
1820 dyj=dc_norm(2,nres+j)
1821 dzj=dc_norm(3,nres+j)
1825 c write (iout,*) "dcnorj",dxi*dxi+dyi*dyi+dzi*dzi
1826 c write (iout,*) "j",j," dc_norm",
1827 c & dc_norm(1,nres+j),dc_norm(2,nres+j),dc_norm(3,nres+j)
1828 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
1830 sss=sscale((1.0d0/rij)/sigma(itypi,itypj))
1831 sssgrad=sscagrad((1.0d0/rij)/sigma(itypi,itypj))
1833 c write (iout,'(a7,4f8.3)')
1834 c & "ssscale",sss,((1.0d0/rij)/sigma(itypi,itypj)),r_cut,rlamb
1835 if (sss.gt.0.0d0) then
1836 C Calculate angle-dependent terms of energy and contributions to their
1840 sig=sig0ij*dsqrt(sigsq)
1841 rij_shift=1.0D0/rij-sig+sig0ij
1842 c for diagnostics; uncomment
1843 c rij_shift=1.2*sig0ij
1844 C I hate to put IF's in the loops, but here don't have another choice!!!!
1845 if (rij_shift.le.0.0D0) then
1847 cd write (iout,'(2(a3,i3,2x),17(0pf7.3))')
1848 cd & restyp(itypi),i,restyp(itypj),j,
1849 cd & rij_shift,1.0D0/rij,sig,sig0ij,sigsq,1-dsqrt(sigsq)
1853 c---------------------------------------------------------------
1854 rij_shift=1.0D0/rij_shift
1855 fac=rij_shift**expon
1856 C here to start with
1861 evdwij=eps1*eps2rt*eps3rt*(e1+e2)
1862 eps2der=evdwij*eps3rt
1863 eps3der=evdwij*eps2rt
1864 C write(63,'(2i3,2e10.3,2f10.5)') i,j,aa,bb, evdwij,
1865 C &((sslipi+sslipj)/2.0d0+
1866 C &(2.0d0-sslipi-sslipj)/2.0d0)
1867 c write (iout,*) "sigsq",sigsq," sig",sig," eps2rt",eps2rt,
1868 c & " eps3rt",eps3rt," eps1",eps1," e1",e1," e2",e2
1869 evdwij=evdwij*eps2rt*eps3rt
1870 evdw=evdw+evdwij*sss
1872 sigm=dabs(aa/bb)**(1.0D0/6.0D0)
1874 write (iout,'(2(a3,i3,2x),17(0pf7.3))')
1875 & restyp(itypi),i,restyp(itypj),j,
1876 & epsi,sigm,chi1,chi2,chip1,chip2,
1877 & eps1,eps2rt**2,eps3rt**2,sig,sig0ij,
1878 & om1,om2,om12,1.0D0/rij,1.0D0/rij_shift,
1882 if (energy_dec) write (iout,'(a6,2i5,0pf7.3)')
1885 C Calculate gradient components.
1886 e1=e1*eps1*eps2rt**2*eps3rt**2
1887 fac=-expon*(e1+evdwij)*rij_shift
1890 c print '(2i4,6f8.4)',i,j,sss,sssgrad*
1891 c & evdwij,fac,sigma(itypi,itypj),expon
1892 fac=fac+evdwij/sss*sssgrad/sigma(itypi,itypj)*rij
1894 C Calculate the radial part of the gradient
1895 gg_lipi(3)=eps1*(eps2rt*eps2rt)
1896 &*(eps3rt*eps3rt)*sss/2.0d0*(faclip*faclip*
1897 & (aa_lip(itypi,itypj)-aa_aq(itypi,itypj))
1898 &+faclip*(bb_lip(itypi,itypj)-bb_aq(itypi,itypj)))
1899 gg_lipj(3)=ssgradlipj*gg_lipi(3)
1900 gg_lipi(3)=gg_lipi(3)*ssgradlipi
1906 C Calculate angular part of the gradient.
1916 c write (iout,*) "Number of loop steps in EGB:",ind
1917 cccc energy_dec=.false.
1920 C-----------------------------------------------------------------------------
1921 subroutine egbv(evdw)
1923 C This subroutine calculates the interaction energy of nonbonded side chains
1924 C assuming the Gay-Berne-Vorobjev potential of interaction.
1926 implicit real*8 (a-h,o-z)
1927 include 'DIMENSIONS'
1928 include 'COMMON.GEO'
1929 include 'COMMON.VAR'
1930 include 'COMMON.LOCAL'
1931 include 'COMMON.CHAIN'
1932 include 'COMMON.DERIV'
1933 include 'COMMON.NAMES'
1934 include 'COMMON.INTERACT'
1935 include 'COMMON.IOUNITS'
1936 include 'COMMON.CALC'
1937 common /srutu/ icall
1940 c print *,'Entering EGB nnt=',nnt,' nct=',nct,' expon=',expon
1943 c if (icall.eq.0) lprn=.true.
1945 do i=iatsc_s,iatsc_e
1946 itypi=iabs(itype(i))
1947 if (itypi.eq.ntyp1) cycle
1948 itypi1=iabs(itype(i+1))
1953 if (xi.lt.0) xi=xi+boxxsize
1955 if (yi.lt.0) yi=yi+boxysize
1957 if (zi.lt.0) zi=zi+boxzsize
1958 C define scaling factor for lipids
1960 C if (positi.le.0) positi=positi+boxzsize
1962 C first for peptide groups
1963 c for each residue check if it is in lipid or lipid water border area
1964 if ((zi.gt.bordlipbot)
1965 &.and.(zi.lt.bordliptop)) then
1966 C the energy transfer exist
1967 if (zi.lt.buflipbot) then
1968 C what fraction I am in
1970 & ((zi-bordlipbot)/lipbufthick)
1971 C lipbufthick is thickenes of lipid buffore
1972 sslipi=sscalelip(fracinbuf)
1973 ssgradlipi=-sscagradlip(fracinbuf)/lipbufthick
1974 elseif (zi.gt.bufliptop) then
1975 fracinbuf=1.0d0-((bordliptop-zi)/lipbufthick)
1976 sslipi=sscalelip(fracinbuf)
1977 ssgradlipi=sscagradlip(fracinbuf)/lipbufthick
1987 dxi=dc_norm(1,nres+i)
1988 dyi=dc_norm(2,nres+i)
1989 dzi=dc_norm(3,nres+i)
1990 c dsci_inv=dsc_inv(itypi)
1991 dsci_inv=vbld_inv(i+nres)
1993 C Calculate SC interaction energy.
1995 do iint=1,nint_gr(i)
1996 do j=istart(i,iint),iend(i,iint)
1998 itypj=iabs(itype(j))
1999 if (itypj.eq.ntyp1) cycle
2000 c dscj_inv=dsc_inv(itypj)
2001 dscj_inv=vbld_inv(j+nres)
2002 sig0ij=sigma(itypi,itypj)
2003 r0ij=r0(itypi,itypj)
2004 chi1=chi(itypi,itypj)
2005 chi2=chi(itypj,itypi)
2012 alf12=0.5D0*(alf1+alf2)
2013 C For diagnostics only!!!
2027 if (xj.lt.0) xj=xj+boxxsize
2029 if (yj.lt.0) yj=yj+boxysize
2031 if (zj.lt.0) zj=zj+boxzsize
2032 if ((zj.gt.bordlipbot)
2033 &.and.(zj.lt.bordliptop)) then
2034 C the energy transfer exist
2035 if (zj.lt.buflipbot) then
2036 C what fraction I am in
2038 & ((zj-bordlipbot)/lipbufthick)
2039 C lipbufthick is thickenes of lipid buffore
2040 sslipj=sscalelip(fracinbuf)
2041 ssgradlipj=-sscagradlip(fracinbuf)/lipbufthick
2042 elseif (zj.gt.bufliptop) then
2043 fracinbuf=1.0d0-((bordliptop-zj)/lipbufthick)
2044 sslipj=sscalelip(fracinbuf)
2045 ssgradlipj=sscagradlip(fracinbuf)/lipbufthick
2054 aa=aa_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0
2055 & +aa_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
2056 bb=bb_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0
2057 & +bb_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
2058 C if (aa.ne.aa_aq(itypi,itypj)) write(63,'2e10.5')
2059 C &(aa-aa_aq(itypi,itypj)),(bb-bb_aq(itypi,itypj))
2060 C write(iout,*) "tu,", i,j,aa,bb,aa_lip(itypi,itypj),sslipi,sslipj
2061 dist_init=(xj-xi)**2+(yj-yi)**2+(zj-zi)**2
2069 xj=xj_safe+xshift*boxxsize
2070 yj=yj_safe+yshift*boxysize
2071 zj=zj_safe+zshift*boxzsize
2072 dist_temp=(xj-xi)**2+(yj-yi)**2+(zj-zi)**2
2073 if(dist_temp.lt.dist_init) then
2083 if (subchap.eq.1) then
2092 dxj=dc_norm(1,nres+j)
2093 dyj=dc_norm(2,nres+j)
2094 dzj=dc_norm(3,nres+j)
2095 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
2097 C Calculate angle-dependent terms of energy and contributions to their
2101 sig=sig0ij*dsqrt(sigsq)
2102 rij_shift=1.0D0/rij-sig+r0ij
2103 C I hate to put IF's in the loops, but here don't have another choice!!!!
2104 if (rij_shift.le.0.0D0) then
2109 c---------------------------------------------------------------
2110 rij_shift=1.0D0/rij_shift
2111 fac=rij_shift**expon
2114 evdwij=eps1*eps2rt*eps3rt*(e1+e2)
2115 eps2der=evdwij*eps3rt
2116 eps3der=evdwij*eps2rt
2117 fac_augm=rrij**expon
2118 e_augm=augm(itypi,itypj)*fac_augm
2119 evdwij=evdwij*eps2rt*eps3rt
2120 evdw=evdw+evdwij+e_augm
2122 sigm=dabs(aa/bb)**(1.0D0/6.0D0)
2124 write (iout,'(2(a3,i3,2x),17(0pf7.3))')
2125 & restyp(itypi),i,restyp(itypj),j,
2126 & epsi,sigm,sig,(augm(itypi,itypj)/epsi)**(1.0D0/12.0D0),
2127 & chi1,chi2,chip1,chip2,
2128 & eps1,eps2rt**2,eps3rt**2,
2129 & om1,om2,om12,1.0D0/rij,1.0D0/rij_shift,
2132 C Calculate gradient components.
2133 e1=e1*eps1*eps2rt**2*eps3rt**2
2134 fac=-expon*(e1+evdwij)*rij_shift
2136 fac=rij*fac-2*expon*rrij*e_augm
2137 fac=fac+evdwij/sss*sssgrad/sigma(itypi,itypj)*rij
2138 C Calculate the radial part of the gradient
2142 C Calculate angular part of the gradient.
2148 C-----------------------------------------------------------------------------
2149 subroutine sc_angular
2150 C Calculate eps1,eps2,eps3,sigma, and parts of their derivatives in om1,om2,
2151 C om12. Called by ebp, egb, and egbv.
2153 include 'COMMON.CALC'
2154 include 'COMMON.IOUNITS'
2158 om1=dxi*erij(1)+dyi*erij(2)+dzi*erij(3)
2159 om2=dxj*erij(1)+dyj*erij(2)+dzj*erij(3)
2160 om12=dxi*dxj+dyi*dyj+dzi*dzj
2162 C Calculate eps1(om12) and its derivative in om12
2163 faceps1=1.0D0-om12*chiom12
2164 faceps1_inv=1.0D0/faceps1
2165 eps1=dsqrt(faceps1_inv)
2166 C Following variable is eps1*deps1/dom12
2167 eps1_om12=faceps1_inv*chiom12
2172 c write (iout,*) "om12",om12," eps1",eps1
2173 C Calculate sigma(om1,om2,om12) and the derivatives of sigma**2 in om1,om2,
2178 facsig=om1*chiom1+om2*chiom2-2.0D0*om1om2*chiom12
2179 sigsq=1.0D0-facsig*faceps1_inv
2180 sigsq_om1=(chiom1-chiom12*om2)*faceps1_inv
2181 sigsq_om2=(chiom2-chiom12*om1)*faceps1_inv
2182 sigsq_om12=-chi12*(om1om2*faceps1-om12*facsig)*faceps1_inv**2
2188 c write (iout,*) "chiom1",chiom1," chiom2",chiom2," chiom12",chiom12
2189 c write (iout,*) "faceps1",faceps1," faceps1_inv",faceps1_inv,
2191 C Calculate eps2 and its derivatives in om1, om2, and om12.
2194 chipom12=chip12*om12
2195 facp=1.0D0-om12*chipom12
2197 facp1=om1*chipom1+om2*chipom2-2.0D0*om1om2*chipom12
2198 c write (iout,*) "chipom1",chipom1," chipom2",chipom2,
2199 c & " chipom12",chipom12," facp",facp," facp_inv",facp_inv
2200 C Following variable is the square root of eps2
2201 eps2rt=1.0D0-facp1*facp_inv
2202 C Following three variables are the derivatives of the square root of eps
2203 C in om1, om2, and om12.
2204 eps2rt_om1=-4.0D0*(chipom1-chipom12*om2)*facp_inv
2205 eps2rt_om2=-4.0D0*(chipom2-chipom12*om1)*facp_inv
2206 eps2rt_om12=4.0D0*chip12*(om1om2*facp-om12*facp1)*facp_inv**2
2207 C Evaluate the "asymmetric" factor in the VDW constant, eps3
2208 eps3rt=1.0D0-alf1*om1+alf2*om2-alf12*om12
2209 c write (iout,*) "eps2rt",eps2rt," eps3rt",eps3rt
2210 c write (iout,*) "eps2rt_om1",eps2rt_om1," eps2rt_om2",eps2rt_om2,
2211 c & " eps2rt_om12",eps2rt_om12
2212 C Calculate whole angle-dependent part of epsilon and contributions
2213 C to its derivatives
2216 C----------------------------------------------------------------------------
2218 implicit real*8 (a-h,o-z)
2219 include 'DIMENSIONS'
2220 include 'COMMON.CHAIN'
2221 include 'COMMON.DERIV'
2222 include 'COMMON.CALC'
2223 include 'COMMON.IOUNITS'
2224 double precision dcosom1(3),dcosom2(3)
2225 cc print *,'sss=',sss
2226 eom1=eps2der*eps2rt_om1-2.0D0*alf1*eps3der+sigder*sigsq_om1
2227 eom2=eps2der*eps2rt_om2+2.0D0*alf2*eps3der+sigder*sigsq_om2
2228 eom12=evdwij*eps1_om12+eps2der*eps2rt_om12
2229 & -2.0D0*alf12*eps3der+sigder*sigsq_om12
2233 c eom12=evdwij*eps1_om12
2235 c write (iout,*) "eps2der",eps2der," eps3der",eps3der,
2236 c & " sigder",sigder
2237 c write (iout,*) "eps1_om12",eps1_om12," eps2rt_om12",eps2rt_om12
2238 c write (iout,*) "eom1",eom1," eom2",eom2," eom12",eom12
2240 dcosom1(k)=rij*(dc_norm(k,nres+i)-om1*erij(k))
2241 dcosom2(k)=rij*(dc_norm(k,nres+j)-om2*erij(k))
2244 gg(k)=(gg(k)+eom1*dcosom1(k)+eom2*dcosom2(k))*sss
2246 c write (iout,*) "gg",(gg(k),k=1,3)
2248 gvdwx(k,i)=gvdwx(k,i)-gg(k)+gg_lipi(k)
2249 & +(eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,nres+i))
2250 & +eom1*(erij(k)-om1*dc_norm(k,nres+i)))*dsci_inv*sss
2251 gvdwx(k,j)=gvdwx(k,j)+gg(k)+gg_lipj(k)
2252 & +(eom12*(dc_norm(k,nres+i)-om12*dc_norm(k,nres+j))
2253 & +eom2*(erij(k)-om2*dc_norm(k,nres+j)))*dscj_inv*sss
2254 c write (iout,*)(eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,nres+i))
2255 c & +eom1*(erij(k)-om1*dc_norm(k,nres+i)))*dsci_inv
2256 c write (iout,*)(eom12*(dc_norm(k,nres+i)-om12*dc_norm(k,nres+j))
2257 c & +eom2*(erij(k)-om2*dc_norm(k,nres+j)))*dscj_inv
2260 C Calculate the components of the gradient in DC and X
2264 cgrad gvdwc(l,k)=gvdwc(l,k)+gg(l)
2268 gvdwc(l,i)=gvdwc(l,i)-gg(l)+gg_lipi(l)
2269 gvdwc(l,j)=gvdwc(l,j)+gg(l)+gg_lipj(l)
2273 C-----------------------------------------------------------------------
2274 subroutine e_softsphere(evdw)
2276 C This subroutine calculates the interaction energy of nonbonded side chains
2277 C assuming the LJ potential of interaction.
2279 implicit real*8 (a-h,o-z)
2280 include 'DIMENSIONS'
2281 parameter (accur=1.0d-10)
2282 include 'COMMON.GEO'
2283 include 'COMMON.VAR'
2284 include 'COMMON.LOCAL'
2285 include 'COMMON.CHAIN'
2286 include 'COMMON.DERIV'
2287 include 'COMMON.INTERACT'
2288 include 'COMMON.TORSION'
2289 include 'COMMON.SBRIDGE'
2290 include 'COMMON.NAMES'
2291 include 'COMMON.IOUNITS'
2292 include 'COMMON.CONTACTS'
2294 cd print *,'Entering Esoft_sphere nnt=',nnt,' nct=',nct
2296 do i=iatsc_s,iatsc_e
2297 itypi=iabs(itype(i))
2298 if (itypi.eq.ntyp1) cycle
2299 itypi1=iabs(itype(i+1))
2304 C Calculate SC interaction energy.
2306 do iint=1,nint_gr(i)
2307 cd write (iout,*) 'i=',i,' iint=',iint,' istart=',istart(i,iint),
2308 cd & 'iend=',iend(i,iint)
2309 do j=istart(i,iint),iend(i,iint)
2310 itypj=iabs(itype(j))
2311 if (itypj.eq.ntyp1) cycle
2315 rij=xj*xj+yj*yj+zj*zj
2316 c write (iout,*)'i=',i,' j=',j,' itypi=',itypi,' itypj=',itypj
2317 r0ij=r0(itypi,itypj)
2319 c print *,i,j,r0ij,dsqrt(rij)
2320 if (rij.lt.r0ijsq) then
2321 evdwij=0.25d0*(rij-r0ijsq)**2
2329 C Calculate the components of the gradient in DC and X
2335 gvdwx(k,i)=gvdwx(k,i)-gg(k)
2336 gvdwx(k,j)=gvdwx(k,j)+gg(k)
2337 gvdwc(k,i)=gvdwc(k,i)-gg(k)
2338 gvdwc(k,j)=gvdwc(k,j)+gg(k)
2342 cgrad gvdwc(l,k)=gvdwc(l,k)+gg(l)
2350 C--------------------------------------------------------------------------
2351 subroutine eelec_soft_sphere(ees,evdw1,eel_loc,eello_turn3,
2354 C Soft-sphere potential of p-p interaction
2356 implicit real*8 (a-h,o-z)
2357 include 'DIMENSIONS'
2358 include 'COMMON.CONTROL'
2359 include 'COMMON.IOUNITS'
2360 include 'COMMON.GEO'
2361 include 'COMMON.VAR'
2362 include 'COMMON.LOCAL'
2363 include 'COMMON.CHAIN'
2364 include 'COMMON.DERIV'
2365 include 'COMMON.INTERACT'
2366 include 'COMMON.CONTACTS'
2367 include 'COMMON.TORSION'
2368 include 'COMMON.VECTORS'
2369 include 'COMMON.FFIELD'
2371 C write(iout,*) 'In EELEC_soft_sphere'
2378 do i=iatel_s,iatel_e
2379 if (itype(i).eq.ntyp1 .or. itype(i+1).eq.ntyp1) cycle
2383 xmedi=c(1,i)+0.5d0*dxi
2384 ymedi=c(2,i)+0.5d0*dyi
2385 zmedi=c(3,i)+0.5d0*dzi
2386 xmedi=mod(xmedi,boxxsize)
2387 if (xmedi.lt.0) xmedi=xmedi+boxxsize
2388 ymedi=mod(ymedi,boxysize)
2389 if (ymedi.lt.0) ymedi=ymedi+boxysize
2390 zmedi=mod(zmedi,boxzsize)
2391 if (zmedi.lt.0) zmedi=zmedi+boxzsize
2393 c write (iout,*) 'i',i,' ielstart',ielstart(i),' ielend',ielend(i)
2394 do j=ielstart(i),ielend(i)
2395 if (itype(j).eq.ntyp1 .or. itype(j+1).eq.ntyp1) cycle
2399 if (j.eq.i+2 .and. itelj.eq.2) iteli=2
2400 r0ij=rpp(iteli,itelj)
2409 if (xj.lt.0) xj=xj+boxxsize
2411 if (yj.lt.0) yj=yj+boxysize
2413 if (zj.lt.0) zj=zj+boxzsize
2414 dist_init=(xj-xmedi)**2+(yj-ymedi)**2+(zj-zmedi)**2
2422 xj=xj_safe+xshift*boxxsize
2423 yj=yj_safe+yshift*boxysize
2424 zj=zj_safe+zshift*boxzsize
2425 dist_temp=(xj-xi)**2+(yj-yi)**2+(zj-zi)**2
2426 if(dist_temp.lt.dist_init) then
2436 if (isubchap.eq.1) then
2445 rij=xj*xj+yj*yj+zj*zj
2446 sss=sscale(sqrt(rij))
2447 sssgrad=sscagrad(sqrt(rij))
2448 if (rij.lt.r0ijsq) then
2449 evdw1ij=0.25d0*(rij-r0ijsq)**2
2455 evdw1=evdw1+evdw1ij*sss
2457 C Calculate contributions to the Cartesian gradient.
2459 ggg(1)=fac*xj*sssgrad
2460 ggg(2)=fac*yj*sssgrad
2461 ggg(3)=fac*zj*sssgrad
2463 gvdwpp(k,i)=gvdwpp(k,i)-ggg(k)
2464 gvdwpp(k,j)=gvdwpp(k,j)+ggg(k)
2467 * Loop over residues i+1 thru j-1.
2471 cgrad gelc(l,k)=gelc(l,k)+ggg(l)
2476 cgrad do i=nnt,nct-1
2478 cgrad gelc(k,i)=gelc(k,i)+0.5d0*gelc(k,i)
2480 cgrad do j=i+1,nct-1
2482 cgrad gelc(k,i)=gelc(k,i)+gelc(k,j)
2488 c------------------------------------------------------------------------------
2489 subroutine vec_and_deriv
2490 implicit real*8 (a-h,o-z)
2491 include 'DIMENSIONS'
2495 include 'COMMON.IOUNITS'
2496 include 'COMMON.GEO'
2497 include 'COMMON.VAR'
2498 include 'COMMON.LOCAL'
2499 include 'COMMON.CHAIN'
2500 include 'COMMON.VECTORS'
2501 include 'COMMON.SETUP'
2502 include 'COMMON.TIME1'
2503 dimension uyder(3,3,2),uzder(3,3,2),vbld_inv_temp(2)
2504 C Compute the local reference systems. For reference system (i), the
2505 C X-axis points from CA(i) to CA(i+1), the Y axis is in the
2506 C CA(i)-CA(i+1)-CA(i+2) plane, and the Z axis is perpendicular to this plane.
2508 do i=ivec_start,ivec_end
2512 if (i.eq.nres-1) then
2513 C Case of the last full residue
2514 C Compute the Z-axis
2515 call vecpr(dc_norm(1,i),dc_norm(1,i-1),uz(1,i))
2516 costh=dcos(pi-theta(nres))
2517 fac=1.0d0/dsqrt(1.0d0-costh*costh)
2521 C Compute the derivatives of uz
2523 uzder(2,1,1)=-dc_norm(3,i-1)
2524 uzder(3,1,1)= dc_norm(2,i-1)
2525 uzder(1,2,1)= dc_norm(3,i-1)
2527 uzder(3,2,1)=-dc_norm(1,i-1)
2528 uzder(1,3,1)=-dc_norm(2,i-1)
2529 uzder(2,3,1)= dc_norm(1,i-1)
2532 uzder(2,1,2)= dc_norm(3,i)
2533 uzder(3,1,2)=-dc_norm(2,i)
2534 uzder(1,2,2)=-dc_norm(3,i)
2536 uzder(3,2,2)= dc_norm(1,i)
2537 uzder(1,3,2)= dc_norm(2,i)
2538 uzder(2,3,2)=-dc_norm(1,i)
2540 C Compute the Y-axis
2543 uy(k,i)=fac*(dc_norm(k,i-1)-costh*dc_norm(k,i))
2545 C Compute the derivatives of uy
2548 uyder(k,j,1)=2*dc_norm(k,i-1)*dc_norm(j,i)
2549 & -dc_norm(k,i)*dc_norm(j,i-1)
2550 uyder(k,j,2)=-dc_norm(j,i)*dc_norm(k,i)
2552 uyder(j,j,1)=uyder(j,j,1)-costh
2553 uyder(j,j,2)=1.0d0+uyder(j,j,2)
2558 uygrad(l,k,j,i)=uyder(l,k,j)
2559 uzgrad(l,k,j,i)=uzder(l,k,j)
2563 call unormderiv(uy(1,i),uyder(1,1,1),facy,uygrad(1,1,1,i))
2564 call unormderiv(uy(1,i),uyder(1,1,2),facy,uygrad(1,1,2,i))
2565 call unormderiv(uz(1,i),uzder(1,1,1),fac,uzgrad(1,1,1,i))
2566 call unormderiv(uz(1,i),uzder(1,1,2),fac,uzgrad(1,1,2,i))
2569 C Compute the Z-axis
2570 call vecpr(dc_norm(1,i),dc_norm(1,i+1),uz(1,i))
2571 costh=dcos(pi-theta(i+2))
2572 fac=1.0d0/dsqrt(1.0d0-costh*costh)
2576 C Compute the derivatives of uz
2578 uzder(2,1,1)=-dc_norm(3,i+1)
2579 uzder(3,1,1)= dc_norm(2,i+1)
2580 uzder(1,2,1)= dc_norm(3,i+1)
2582 uzder(3,2,1)=-dc_norm(1,i+1)
2583 uzder(1,3,1)=-dc_norm(2,i+1)
2584 uzder(2,3,1)= dc_norm(1,i+1)
2587 uzder(2,1,2)= dc_norm(3,i)
2588 uzder(3,1,2)=-dc_norm(2,i)
2589 uzder(1,2,2)=-dc_norm(3,i)
2591 uzder(3,2,2)= dc_norm(1,i)
2592 uzder(1,3,2)= dc_norm(2,i)
2593 uzder(2,3,2)=-dc_norm(1,i)
2595 C Compute the Y-axis
2598 uy(k,i)=facy*(dc_norm(k,i+1)-costh*dc_norm(k,i))
2600 C Compute the derivatives of uy
2603 uyder(k,j,1)=2*dc_norm(k,i+1)*dc_norm(j,i)
2604 & -dc_norm(k,i)*dc_norm(j,i+1)
2605 uyder(k,j,2)=-dc_norm(j,i)*dc_norm(k,i)
2607 uyder(j,j,1)=uyder(j,j,1)-costh
2608 uyder(j,j,2)=1.0d0+uyder(j,j,2)
2613 uygrad(l,k,j,i)=uyder(l,k,j)
2614 uzgrad(l,k,j,i)=uzder(l,k,j)
2618 call unormderiv(uy(1,i),uyder(1,1,1),facy,uygrad(1,1,1,i))
2619 call unormderiv(uy(1,i),uyder(1,1,2),facy,uygrad(1,1,2,i))
2620 call unormderiv(uz(1,i),uzder(1,1,1),fac,uzgrad(1,1,1,i))
2621 call unormderiv(uz(1,i),uzder(1,1,2),fac,uzgrad(1,1,2,i))
2625 vbld_inv_temp(1)=vbld_inv(i+1)
2626 if (i.lt.nres-1) then
2627 vbld_inv_temp(2)=vbld_inv(i+2)
2629 vbld_inv_temp(2)=vbld_inv(i)
2634 uygrad(l,k,j,i)=vbld_inv_temp(j)*uygrad(l,k,j,i)
2635 uzgrad(l,k,j,i)=vbld_inv_temp(j)*uzgrad(l,k,j,i)
2640 #if defined(PARVEC) && defined(MPI)
2641 if (nfgtasks1.gt.1) then
2643 c print *,"Processor",fg_rank1,kolor1," ivec_start",ivec_start,
2644 c & " ivec_displ",(ivec_displ(i),i=0,nfgtasks1-1),
2645 c & " ivec_count",(ivec_count(i),i=0,nfgtasks1-1)
2646 call MPI_Allgatherv(uy(1,ivec_start),ivec_count(fg_rank1),
2647 & MPI_UYZ,uy(1,1),ivec_count(0),ivec_displ(0),MPI_UYZ,
2649 call MPI_Allgatherv(uz(1,ivec_start),ivec_count(fg_rank1),
2650 & MPI_UYZ,uz(1,1),ivec_count(0),ivec_displ(0),MPI_UYZ,
2652 call MPI_Allgatherv(uygrad(1,1,1,ivec_start),
2653 & ivec_count(fg_rank1),MPI_UYZGRAD,uygrad(1,1,1,1),ivec_count(0),
2654 & ivec_displ(0),MPI_UYZGRAD,FG_COMM1,IERR)
2655 call MPI_Allgatherv(uzgrad(1,1,1,ivec_start),
2656 & ivec_count(fg_rank1),MPI_UYZGRAD,uzgrad(1,1,1,1),ivec_count(0),
2657 & ivec_displ(0),MPI_UYZGRAD,FG_COMM1,IERR)
2658 time_gather=time_gather+MPI_Wtime()-time00
2660 c if (fg_rank.eq.0) then
2661 c write (iout,*) "Arrays UY and UZ"
2663 c write (iout,'(i5,3f10.5,5x,3f10.5)') i,(uy(k,i),k=1,3),
2670 C-----------------------------------------------------------------------------
2671 subroutine check_vecgrad
2672 implicit real*8 (a-h,o-z)
2673 include 'DIMENSIONS'
2674 include 'COMMON.IOUNITS'
2675 include 'COMMON.GEO'
2676 include 'COMMON.VAR'
2677 include 'COMMON.LOCAL'
2678 include 'COMMON.CHAIN'
2679 include 'COMMON.VECTORS'
2680 dimension uygradt(3,3,2,maxres),uzgradt(3,3,2,maxres)
2681 dimension uyt(3,maxres),uzt(3,maxres)
2682 dimension uygradn(3,3,2),uzgradn(3,3,2),erij(3)
2683 double precision delta /1.0d-7/
2686 crc write(iout,'(2i5,2(3f10.5,5x))') i,1,dc_norm(:,i)
2687 crc write(iout,'(2i5,2(3f10.5,5x))') i,2,uy(:,i)
2688 crc write(iout,'(2i5,2(3f10.5,5x)/)')i,3,uz(:,i)
2689 cd write(iout,'(2i5,2(3f10.5,5x))') i,1,
2690 cd & (dc_norm(if90,i),if90=1,3)
2691 cd write(iout,'(2i5,2(3f10.5,5x))') i,2,(uy(if90,i),if90=1,3)
2692 cd write(iout,'(2i5,2(3f10.5,5x)/)')i,3,(uz(if90,i),if90=1,3)
2693 cd write(iout,'(a)')
2699 uygradt(l,k,j,i)=uygrad(l,k,j,i)
2700 uzgradt(l,k,j,i)=uzgrad(l,k,j,i)
2713 cd write (iout,*) 'i=',i
2715 erij(k)=dc_norm(k,i)
2719 dc_norm(k,i)=erij(k)
2721 dc_norm(j,i)=dc_norm(j,i)+delta
2722 c fac=dsqrt(scalar(dc_norm(1,i),dc_norm(1,i)))
2724 c dc_norm(k,i)=dc_norm(k,i)/fac
2726 c write (iout,*) (dc_norm(k,i),k=1,3)
2727 c write (iout,*) (erij(k),k=1,3)
2730 uygradn(k,j,1)=(uy(k,i)-uyt(k,i))/delta
2731 uygradn(k,j,2)=(uy(k,i-1)-uyt(k,i-1))/delta
2732 uzgradn(k,j,1)=(uz(k,i)-uzt(k,i))/delta
2733 uzgradn(k,j,2)=(uz(k,i-1)-uzt(k,i-1))/delta
2735 c write (iout,'(i5,3f8.5,3x,3f8.5,5x,3f8.5,3x,3f8.5)')
2736 c & j,(uzgradt(k,j,1,i),k=1,3),(uzgradn(k,j,1),k=1,3),
2737 c & (uzgradt(k,j,2,i-1),k=1,3),(uzgradn(k,j,2),k=1,3)
2740 dc_norm(k,i)=erij(k)
2743 cd write (iout,'(i5,3f8.5,3x,3f8.5,5x,3f8.5,3x,3f8.5)')
2744 cd & k,(uygradt(k,l,1,i),l=1,3),(uygradn(k,l,1),l=1,3),
2745 cd & (uygradt(k,l,2,i-1),l=1,3),(uygradn(k,l,2),l=1,3)
2746 cd write (iout,'(i5,3f8.5,3x,3f8.5,5x,3f8.5,3x,3f8.5)')
2747 cd & k,(uzgradt(k,l,1,i),l=1,3),(uzgradn(k,l,1),l=1,3),
2748 cd & (uzgradt(k,l,2,i-1),l=1,3),(uzgradn(k,l,2),l=1,3)
2749 cd write (iout,'(a)')
2754 C--------------------------------------------------------------------------
2755 subroutine set_matrices
2756 implicit real*8 (a-h,o-z)
2757 include 'DIMENSIONS'
2760 include "COMMON.SETUP"
2762 integer status(MPI_STATUS_SIZE)
2764 include 'COMMON.IOUNITS'
2765 include 'COMMON.GEO'
2766 include 'COMMON.VAR'
2767 include 'COMMON.LOCAL'
2768 include 'COMMON.CHAIN'
2769 include 'COMMON.DERIV'
2770 include 'COMMON.INTERACT'
2771 include 'COMMON.CONTACTS'
2772 include 'COMMON.TORSION'
2773 include 'COMMON.VECTORS'
2774 include 'COMMON.FFIELD'
2775 double precision auxvec(2),auxmat(2,2)
2777 C Compute the virtual-bond-torsional-angle dependent quantities needed
2778 C to calculate the el-loc multibody terms of various order.
2780 c write(iout,*) 'nphi=',nphi,nres
2782 do i=ivec_start+2,ivec_end+2
2787 if (i.gt. nnt+2 .and. i.lt.nct+2) then
2788 iti = itype2loc(itype(i-2))
2792 c if (i.gt. iatel_s+1 .and. i.lt.iatel_e+4) then
2793 if (i.gt. nnt+1 .and. i.lt.nct+1) then
2794 iti1 = itype2loc(itype(i-1))
2799 b1(1,i-2)=bnew1(1,1,iti)*dsin(theta(i-1)/2.0d0)
2800 & +bnew1(2,1,iti)*dsin(theta(i-1))
2801 & +bnew1(3,1,iti)*dcos(theta(i-1)/2.0d0)
2802 gtb1(1,i-2)=bnew1(1,1,iti)*dcos(theta(i-1)/2.0d0)/2.0d0
2803 & +bnew1(2,1,iti)*dcos(theta(i-1))
2804 & -bnew1(3,1,iti)*dsin(theta(i-1)/2.0d0)/2.0d0
2805 c & +bnew1(3,1,iti)*sin(alpha(i))*cos(beta(i))
2806 c &*(cos(theta(i)/2.0)
2807 b2(1,i-2)=bnew2(1,1,iti)*dsin(theta(i-1)/2.0d0)
2808 & +bnew2(2,1,iti)*dsin(theta(i-1))
2809 & +bnew2(3,1,iti)*dcos(theta(i-1)/2.0d0)
2810 c & +bnew2(3,1,iti)*sin(alpha(i))*cos(beta(i))
2811 c &*(cos(theta(i)/2.0)
2812 gtb2(1,i-2)=bnew2(1,1,iti)*dcos(theta(i-1)/2.0d0)/2.0d0
2813 & +bnew2(2,1,iti)*dcos(theta(i-1))
2814 & -bnew2(3,1,iti)*dsin(theta(i-1)/2.0d0)/2.0d0
2815 c if (ggb1(1,i).eq.0.0d0) then
2816 c write(iout,*) 'i=',i,ggb1(1,i),
2817 c &bnew1(1,1,iti)*cos(theta(i)/2.0)/2.0,
2818 c &bnew1(2,1,iti)*cos(theta(i)),
2819 c &bnew1(3,1,iti)*sin(theta(i)/2.0)/2.0
2821 b1(2,i-2)=bnew1(1,2,iti)
2823 b2(2,i-2)=bnew2(1,2,iti)
2825 EE(1,1,i-2)=eenew(1,iti)*dcos(theta(i-1))
2826 EE(1,2,i-2)=eeold(1,2,iti)
2827 EE(2,1,i-2)=eeold(2,1,iti)
2828 EE(2,2,i-2)=eeold(2,2,iti)
2829 gtEE(1,1,i-2)=-eenew(1,iti)*dsin(theta(i-1))
2834 c EE(1,2,iti)=0.5d0*eenew(1,iti)
2835 c EE(2,1,iti)=0.5d0*eenew(1,iti)
2836 c b1(2,iti)=bnew1(1,2,iti)*sin(alpha(i))*sin(beta(i))
2837 c b2(2,iti)=bnew2(1,2,iti)*sin(alpha(i))*sin(beta(i))
2838 b1tilde(1,i-2)=b1(1,i-2)
2839 b1tilde(2,i-2)=-b1(2,i-2)
2840 b2tilde(1,i-2)=b2(1,i-2)
2841 b2tilde(2,i-2)=-b2(2,i-2)
2842 c write (iout,*) 'i=',i-2,gtb1(2,i-2),gtb1(1,i-2)
2843 c write(iout,*) 'b1=',b1(1,i-2)
2844 c write (iout,*) 'theta=', theta(i-1)
2847 if (i.gt. nnt+2 .and. i.lt.nct+2) then
2848 iti = itype2loc(itype(i-2))
2852 c if (i.gt. iatel_s+1 .and. i.lt.iatel_e+4) then
2853 if (i.gt. nnt+1 .and. i.lt.nct+1) then
2854 iti1 = itype2loc(itype(i-1))
2862 b1tilde(1,i-2)=b1(1,i-2)
2863 b1tilde(2,i-2)=-b1(2,i-2)
2864 b2tilde(1,i-2)=b2(1,i-2)
2865 b2tilde(2,i-2)=-b2(2,i-2)
2866 EE(1,2,i-2)=eeold(1,2,iti)
2867 EE(2,1,i-2)=eeold(2,1,iti)
2868 EE(2,2,i-2)=eeold(2,2,iti)
2869 EE(1,1,i-2)=eeold(1,1,iti)
2873 do i=ivec_start+2,ivec_end+2
2877 if (i .lt. nres+1) then
2914 if (i .gt. 3 .and. i .lt. nres+1) then
2915 obrot_der(1,i-2)=-sin1
2916 obrot_der(2,i-2)= cos1
2917 Ugder(1,1,i-2)= sin1
2918 Ugder(1,2,i-2)=-cos1
2919 Ugder(2,1,i-2)=-cos1
2920 Ugder(2,2,i-2)=-sin1
2923 obrot2_der(1,i-2)=-dwasin2
2924 obrot2_der(2,i-2)= dwacos2
2925 Ug2der(1,1,i-2)= dwasin2
2926 Ug2der(1,2,i-2)=-dwacos2
2927 Ug2der(2,1,i-2)=-dwacos2
2928 Ug2der(2,2,i-2)=-dwasin2
2930 obrot_der(1,i-2)=0.0d0
2931 obrot_der(2,i-2)=0.0d0
2932 Ugder(1,1,i-2)=0.0d0
2933 Ugder(1,2,i-2)=0.0d0
2934 Ugder(2,1,i-2)=0.0d0
2935 Ugder(2,2,i-2)=0.0d0
2936 obrot2_der(1,i-2)=0.0d0
2937 obrot2_der(2,i-2)=0.0d0
2938 Ug2der(1,1,i-2)=0.0d0
2939 Ug2der(1,2,i-2)=0.0d0
2940 Ug2der(2,1,i-2)=0.0d0
2941 Ug2der(2,2,i-2)=0.0d0
2943 c if (i.gt. iatel_s+2 .and. i.lt.iatel_e+5) then
2944 if (i.gt. nnt+2 .and. i.lt.nct+2) then
2945 iti = itype2loc(itype(i-2))
2949 c if (i.gt. iatel_s+1 .and. i.lt.iatel_e+4) then
2950 if (i.gt. nnt+1 .and. i.lt.nct+1) then
2951 iti1 = itype2loc(itype(i-1))
2955 cd write (iout,*) '*******i',i,' iti1',iti
2956 cd write (iout,*) 'b1',b1(:,iti)
2957 cd write (iout,*) 'b2',b2(:,iti)
2958 cd write (iout,*) 'Ug',Ug(:,:,i-2)
2959 c if (i .gt. iatel_s+2) then
2960 if (i .gt. nnt+2) then
2961 call matvec2(Ug(1,1,i-2),b2(1,i-2),Ub2(1,i-2))
2963 call matvec2(Ug(1,1,i-2),gtb2(1,i-2),gUb2(1,i-2))
2964 c write (iout,*) Ug(1,1,i-2),gtb2(1,i-2),gUb2(1,i-2),"chuj"
2966 c write(iout,*) "co jest kurwa", iti, EE(1,1,i),EE(2,1,i),
2967 c & EE(1,2,iti),EE(2,2,i)
2968 call matmat2(EE(1,1,i-2),Ug(1,1,i-2),EUg(1,1,i-2))
2969 call matmat2(gtEE(1,1,i-2),Ug(1,1,i-2),gtEUg(1,1,i-2))
2970 c write(iout,*) "Macierz EUG",
2971 c & eug(1,1,i-2),eug(1,2,i-2),eug(2,1,i-2),
2973 if (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0)
2975 call matmat2(CC(1,1,iti),Ug(1,1,i-2),CUg(1,1,i-2))
2976 call matmat2(DD(1,1,iti),Ug(1,1,i-2),DUg(1,1,i-2))
2977 call matmat2(Dtilde(1,1,iti),Ug2(1,1,i-2),DtUg2(1,1,i-2))
2978 call matvec2(Ctilde(1,1,iti1),obrot(1,i-2),Ctobr(1,i-2))
2979 call matvec2(Dtilde(1,1,iti),obrot2(1,i-2),Dtobr2(1,i-2))
2990 DtUg2(l,k,i-2)=0.0d0
2994 call matvec2(Ugder(1,1,i-2),b2(1,i-2),Ub2der(1,i-2))
2995 call matmat2(EE(1,1,i-2),Ugder(1,1,i-2),EUgder(1,1,i-2))
2997 muder(k,i-2)=Ub2der(k,i-2)
2999 c if (i.gt. iatel_s+1 .and. i.lt.iatel_e+4) then
3000 if (i.gt. nnt+1 .and. i.lt.nct+1) then
3001 if (itype(i-1).le.ntyp) then
3002 iti1 = itype2loc(itype(i-1))
3010 mu(k,i-2)=Ub2(k,i-2)+b1(k,i-1)
3013 write (iout,'(2hmu,i3,3f8.1,12f10.5)') i-2,rad2deg*theta(i-1),
3014 & rad2deg*theta(i),rad2deg*phi(i),mu(1,i-2),mu(2,i-2),
3015 & -b2(1,i-2),b2(2,i-2),b1(1,i-2),b1(2,i-2),
3016 & dsqrt(b2(1,i-1)**2+b2(2,i-1)**2)
3017 & +dsqrt(b1(1,i-1)**2+b1(2,i-1)**2),
3018 & ((ee(l,k,i-2),l=1,2),k=1,2),eenew(1,itype2loc(iti))
3020 cd write (iout,*) 'mu1',mu1(:,i-2)
3021 cd write (iout,*) 'mu2',mu2(:,i-2)
3022 if (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or.wcorr6.gt.0.0d0)
3024 call matmat2(CC(1,1,iti1),Ugder(1,1,i-2),CUgder(1,1,i-2))
3025 call matmat2(DD(1,1,iti),Ugder(1,1,i-2),DUgder(1,1,i-2))
3026 call matmat2(Dtilde(1,1,iti),Ug2der(1,1,i-2),DtUg2der(1,1,i-2))
3027 call matvec2(Ctilde(1,1,iti1),obrot_der(1,i-2),Ctobrder(1,i-2))
3028 call matvec2(Dtilde(1,1,iti),obrot2_der(1,i-2),Dtobr2der(1,i-2))
3029 C Vectors and matrices dependent on a single virtual-bond dihedral.
3030 call matvec2(DD(1,1,iti),b1tilde(1,i-1),auxvec(1))
3031 call matvec2(Ug2(1,1,i-2),auxvec(1),Ug2Db1t(1,i-2))
3032 call matvec2(Ug2der(1,1,i-2),auxvec(1),Ug2Db1tder(1,i-2))
3033 call matvec2(CC(1,1,iti1),Ub2(1,i-2),CUgb2(1,i-2))
3034 call matvec2(CC(1,1,iti1),Ub2der(1,i-2),CUgb2der(1,i-2))
3035 call matmat2(EUg(1,1,i-2),CC(1,1,iti1),EUgC(1,1,i-2))
3036 call matmat2(EUgder(1,1,i-2),CC(1,1,iti1),EUgCder(1,1,i-2))
3037 call matmat2(EUg(1,1,i-2),DD(1,1,iti1),EUgD(1,1,i-2))
3038 call matmat2(EUgder(1,1,i-2),DD(1,1,iti1),EUgDder(1,1,i-2))
3041 C Matrices dependent on two consecutive virtual-bond dihedrals.
3042 C The order of matrices is from left to right.
3043 if (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or.wcorr6.gt.0.0d0)
3045 c do i=max0(ivec_start,2),ivec_end
3047 call matmat2(DtUg2(1,1,i-1),EUg(1,1,i),DtUg2EUg(1,1,i))
3048 call matmat2(DtUg2der(1,1,i-1),EUg(1,1,i),DtUg2EUgder(1,1,1,i))
3049 call matmat2(DtUg2(1,1,i-1),EUgder(1,1,i),DtUg2EUgder(1,1,2,i))
3050 call transpose2(DtUg2(1,1,i-1),auxmat(1,1))
3051 call matmat2(auxmat(1,1),EUg(1,1,i),Ug2DtEUg(1,1,i))
3052 call matmat2(auxmat(1,1),EUgder(1,1,i),Ug2DtEUgder(1,1,2,i))
3053 call transpose2(DtUg2der(1,1,i-1),auxmat(1,1))
3054 call matmat2(auxmat(1,1),EUg(1,1,i),Ug2DtEUgder(1,1,1,i))
3057 #if defined(MPI) && defined(PARMAT)
3059 c if (fg_rank.eq.0) then
3060 write (iout,*) "Arrays UG and UGDER before GATHER"
3062 write (iout,'(i5,4f10.5,5x,4f10.5)') i,
3063 & ((ug(l,k,i),l=1,2),k=1,2),
3064 & ((ugder(l,k,i),l=1,2),k=1,2)
3066 write (iout,*) "Arrays UG2 and UG2DER"
3068 write (iout,'(i5,4f10.5,5x,4f10.5)') i,
3069 & ((ug2(l,k,i),l=1,2),k=1,2),
3070 & ((ug2der(l,k,i),l=1,2),k=1,2)
3072 write (iout,*) "Arrays OBROT OBROT2 OBROTDER and OBROT2DER"
3074 write (iout,'(i5,4f10.5,5x,4f10.5)') i,
3075 & (obrot(k,i),k=1,2),(obrot2(k,i),k=1,2),
3076 & (obrot_der(k,i),k=1,2),(obrot2_der(k,i),k=1,2)
3078 write (iout,*) "Arrays COSTAB SINTAB COSTAB2 and SINTAB2"
3080 write (iout,'(i5,4f10.5,5x,4f10.5)') i,
3081 & costab(i),sintab(i),costab2(i),sintab2(i)
3083 write (iout,*) "Array MUDER"
3085 write (iout,'(i5,2f10.5)') i,muder(1,i),muder(2,i)
3089 if (nfgtasks.gt.1) then
3091 c write(iout,*)"Processor",fg_rank,kolor," ivec_start",ivec_start,
3092 c & " ivec_displ",(ivec_displ(i),i=0,nfgtasks-1),
3093 c & " ivec_count",(ivec_count(i),i=0,nfgtasks-1)
3095 call MPI_Allgatherv(Ub2(1,ivec_start),ivec_count(fg_rank1),
3096 & MPI_MU,Ub2(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
3098 call MPI_Allgatherv(Ub2der(1,ivec_start),ivec_count(fg_rank1),
3099 & MPI_MU,Ub2der(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
3101 call MPI_Allgatherv(mu(1,ivec_start),ivec_count(fg_rank1),
3102 & MPI_MU,mu(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
3104 call MPI_Allgatherv(muder(1,ivec_start),ivec_count(fg_rank1),
3105 & MPI_MU,muder(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
3107 call MPI_Allgatherv(Eug(1,1,ivec_start),ivec_count(fg_rank1),
3108 & MPI_MAT1,Eug(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
3110 call MPI_Allgatherv(Eugder(1,1,ivec_start),ivec_count(fg_rank1),
3111 & MPI_MAT1,Eugder(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
3113 call MPI_Allgatherv(costab(ivec_start),ivec_count(fg_rank1),
3114 & MPI_DOUBLE_PRECISION,costab(1),ivec_count(0),ivec_displ(0),
3115 & MPI_DOUBLE_PRECISION,FG_COMM1,IERR)
3116 call MPI_Allgatherv(sintab(ivec_start),ivec_count(fg_rank1),
3117 & MPI_DOUBLE_PRECISION,sintab(1),ivec_count(0),ivec_displ(0),
3118 & MPI_DOUBLE_PRECISION,FG_COMM1,IERR)
3119 call MPI_Allgatherv(costab2(ivec_start),ivec_count(fg_rank1),
3120 & MPI_DOUBLE_PRECISION,costab2(1),ivec_count(0),ivec_displ(0),
3121 & MPI_DOUBLE_PRECISION,FG_COMM1,IERR)
3122 call MPI_Allgatherv(sintab2(ivec_start),ivec_count(fg_rank1),
3123 & MPI_DOUBLE_PRECISION,sintab2(1),ivec_count(0),ivec_displ(0),
3124 & MPI_DOUBLE_PRECISION,FG_COMM1,IERR)
3125 if (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0)
3127 call MPI_Allgatherv(Ctobr(1,ivec_start),ivec_count(fg_rank1),
3128 & MPI_MU,Ctobr(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
3130 call MPI_Allgatherv(Ctobrder(1,ivec_start),ivec_count(fg_rank1),
3131 & MPI_MU,Ctobrder(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
3133 call MPI_Allgatherv(Dtobr2(1,ivec_start),ivec_count(fg_rank1),
3134 & MPI_MU,Dtobr2(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
3136 call MPI_Allgatherv(Dtobr2der(1,ivec_start),ivec_count(fg_rank1),
3137 & MPI_MU,Dtobr2der(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
3139 call MPI_Allgatherv(Ug2Db1t(1,ivec_start),ivec_count(fg_rank1),
3140 & MPI_MU,Ug2Db1t(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
3142 call MPI_Allgatherv(Ug2Db1tder(1,ivec_start),
3143 & ivec_count(fg_rank1),
3144 & MPI_MU,Ug2Db1tder(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
3146 call MPI_Allgatherv(CUgb2(1,ivec_start),ivec_count(fg_rank1),
3147 & MPI_MU,CUgb2(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
3149 call MPI_Allgatherv(CUgb2der(1,ivec_start),ivec_count(fg_rank1),
3150 & MPI_MU,CUgb2der(1,1),ivec_count(0),ivec_displ(0),MPI_MU,
3152 call MPI_Allgatherv(Cug(1,1,ivec_start),ivec_count(fg_rank1),
3153 & MPI_MAT1,Cug(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
3155 call MPI_Allgatherv(Cugder(1,1,ivec_start),ivec_count(fg_rank1),
3156 & MPI_MAT1,Cugder(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
3158 call MPI_Allgatherv(Dug(1,1,ivec_start),ivec_count(fg_rank1),
3159 & MPI_MAT1,Dug(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
3161 call MPI_Allgatherv(Dugder(1,1,ivec_start),ivec_count(fg_rank1),
3162 & MPI_MAT1,Dugder(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
3164 call MPI_Allgatherv(Dtug2(1,1,ivec_start),ivec_count(fg_rank1),
3165 & MPI_MAT1,Dtug2(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
3167 call MPI_Allgatherv(Dtug2der(1,1,ivec_start),
3168 & ivec_count(fg_rank1),
3169 & MPI_MAT1,Dtug2der(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
3171 call MPI_Allgatherv(EugC(1,1,ivec_start),ivec_count(fg_rank1),
3172 & MPI_MAT1,EugC(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
3174 call MPI_Allgatherv(EugCder(1,1,ivec_start),ivec_count(fg_rank1),
3175 & MPI_MAT1,EugCder(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
3177 call MPI_Allgatherv(EugD(1,1,ivec_start),ivec_count(fg_rank1),
3178 & MPI_MAT1,EugD(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
3180 call MPI_Allgatherv(EugDder(1,1,ivec_start),ivec_count(fg_rank1),
3181 & MPI_MAT1,EugDder(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
3183 call MPI_Allgatherv(DtUg2EUg(1,1,ivec_start),
3184 & ivec_count(fg_rank1),
3185 & MPI_MAT1,DtUg2EUg(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
3187 call MPI_Allgatherv(Ug2DtEUg(1,1,ivec_start),
3188 & ivec_count(fg_rank1),
3189 & MPI_MAT1,Ug2DtEUg(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,
3191 call MPI_Allgatherv(DtUg2EUgder(1,1,1,ivec_start),
3192 & ivec_count(fg_rank1),
3193 & MPI_MAT2,DtUg2EUgder(1,1,1,1),ivec_count(0),ivec_displ(0),
3194 & MPI_MAT2,FG_COMM1,IERR)
3195 call MPI_Allgatherv(Ug2DtEUgder(1,1,1,ivec_start),
3196 & ivec_count(fg_rank1),
3197 & MPI_MAT2,Ug2DtEUgder(1,1,1,1),ivec_count(0),ivec_displ(0),
3198 & MPI_MAT2,FG_COMM1,IERR)
3201 c Passes matrix info through the ring
3204 if (irecv.lt.0) irecv=nfgtasks1-1
3207 if (inext.ge.nfgtasks1) inext=0
3209 c write (iout,*) "isend",isend," irecv",irecv
3211 lensend=lentyp(isend)
3212 lenrecv=lentyp(irecv)
3213 c write (iout,*) "lensend",lensend," lenrecv",lenrecv
3214 c call MPI_SENDRECV(ug(1,1,ivec_displ(isend)+1),1,
3215 c & MPI_ROTAT1(lensend),inext,2200+isend,
3216 c & ug(1,1,ivec_displ(irecv)+1),1,MPI_ROTAT1(lenrecv),
3217 c & iprev,2200+irecv,FG_COMM,status,IERR)
3218 c write (iout,*) "Gather ROTAT1"
3220 c call MPI_SENDRECV(obrot(1,ivec_displ(isend)+1),1,
3221 c & MPI_ROTAT2(lensend),inext,3300+isend,
3222 c & obrot(1,ivec_displ(irecv)+1),1,MPI_ROTAT2(lenrecv),
3223 c & iprev,3300+irecv,FG_COMM,status,IERR)
3224 c write (iout,*) "Gather ROTAT2"
3226 call MPI_SENDRECV(costab(ivec_displ(isend)+1),1,
3227 & MPI_ROTAT_OLD(lensend),inext,4400+isend,
3228 & costab(ivec_displ(irecv)+1),1,MPI_ROTAT_OLD(lenrecv),
3229 & iprev,4400+irecv,FG_COMM,status,IERR)
3230 c write (iout,*) "Gather ROTAT_OLD"
3232 call MPI_SENDRECV(mu(1,ivec_displ(isend)+1),1,
3233 & MPI_PRECOMP11(lensend),inext,5500+isend,
3234 & mu(1,ivec_displ(irecv)+1),1,MPI_PRECOMP11(lenrecv),
3235 & iprev,5500+irecv,FG_COMM,status,IERR)
3236 c write (iout,*) "Gather PRECOMP11"
3238 call MPI_SENDRECV(Eug(1,1,ivec_displ(isend)+1),1,
3239 & MPI_PRECOMP12(lensend),inext,6600+isend,
3240 & Eug(1,1,ivec_displ(irecv)+1),1,MPI_PRECOMP12(lenrecv),
3241 & iprev,6600+irecv,FG_COMM,status,IERR)
3242 c write (iout,*) "Gather PRECOMP12"
3244 if (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0)
3246 call MPI_SENDRECV(ug2db1t(1,ivec_displ(isend)+1),1,
3247 & MPI_ROTAT2(lensend),inext,7700+isend,
3248 & ug2db1t(1,ivec_displ(irecv)+1),1,MPI_ROTAT2(lenrecv),
3249 & iprev,7700+irecv,FG_COMM,status,IERR)
3250 c write (iout,*) "Gather PRECOMP21"
3252 call MPI_SENDRECV(EUgC(1,1,ivec_displ(isend)+1),1,
3253 & MPI_PRECOMP22(lensend),inext,8800+isend,
3254 & EUgC(1,1,ivec_displ(irecv)+1),1,MPI_PRECOMP22(lenrecv),
3255 & iprev,8800+irecv,FG_COMM,status,IERR)
3256 c write (iout,*) "Gather PRECOMP22"
3258 call MPI_SENDRECV(Ug2DtEUgder(1,1,1,ivec_displ(isend)+1),1,
3259 & MPI_PRECOMP23(lensend),inext,9900+isend,
3260 & Ug2DtEUgder(1,1,1,ivec_displ(irecv)+1),1,
3261 & MPI_PRECOMP23(lenrecv),
3262 & iprev,9900+irecv,FG_COMM,status,IERR)
3263 c write (iout,*) "Gather PRECOMP23"
3268 if (irecv.lt.0) irecv=nfgtasks1-1
3271 time_gather=time_gather+MPI_Wtime()-time00
3274 c if (fg_rank.eq.0) then
3275 write (iout,*) "Arrays UG and UGDER"
3277 write (iout,'(i5,4f10.5,5x,4f10.5)') i,
3278 & ((ug(l,k,i),l=1,2),k=1,2),
3279 & ((ugder(l,k,i),l=1,2),k=1,2)
3281 write (iout,*) "Arrays UG2 and UG2DER"
3283 write (iout,'(i5,4f10.5,5x,4f10.5)') i,
3284 & ((ug2(l,k,i),l=1,2),k=1,2),
3285 & ((ug2der(l,k,i),l=1,2),k=1,2)
3287 write (iout,*) "Arrays OBROT OBROT2 OBROTDER and OBROT2DER"
3289 write (iout,'(i5,4f10.5,5x,4f10.5)') i,
3290 & (obrot(k,i),k=1,2),(obrot2(k,i),k=1,2),
3291 & (obrot_der(k,i),k=1,2),(obrot2_der(k,i),k=1,2)
3293 write (iout,*) "Arrays COSTAB SINTAB COSTAB2 and SINTAB2"
3295 write (iout,'(i5,4f10.5,5x,4f10.5)') i,
3296 & costab(i),sintab(i),costab2(i),sintab2(i)
3298 write (iout,*) "Array MUDER"
3300 write (iout,'(i5,2f10.5)') i,muder(1,i),muder(2,i)
3306 cd iti = itype2loc(itype(i))
3309 cd write (iout,'(2f10.5,5x,2f10.5,5x,2f10.5)')
3310 cd & (EE(j,k,i),k=1,2),(Ug(j,k,i),k=1,2),(EUg(j,k,i),k=1,2)
3315 C--------------------------------------------------------------------------
3316 subroutine eelec(ees,evdw1,eel_loc,eello_turn3,eello_turn4)
3318 C This subroutine calculates the average interaction energy and its gradient
3319 C in the virtual-bond vectors between non-adjacent peptide groups, based on
3320 C the potential described in Liwo et al., Protein Sci., 1993, 2, 1715.
3321 C The potential depends both on the distance of peptide-group centers and on
3322 C the orientation of the CA-CA virtual bonds.
3324 implicit real*8 (a-h,o-z)
3328 include 'DIMENSIONS'
3329 include 'COMMON.CONTROL'
3330 include 'COMMON.SETUP'
3331 include 'COMMON.IOUNITS'
3332 include 'COMMON.GEO'
3333 include 'COMMON.VAR'
3334 include 'COMMON.LOCAL'
3335 include 'COMMON.CHAIN'
3336 include 'COMMON.DERIV'
3337 include 'COMMON.INTERACT'
3338 include 'COMMON.CONTACTS'
3339 include 'COMMON.TORSION'
3340 include 'COMMON.VECTORS'
3341 include 'COMMON.FFIELD'
3342 include 'COMMON.TIME1'
3343 include 'COMMON.SPLITELE'
3344 dimension ggg(3),gggp(3),gggm(3),erij(3),dcosb(3),dcosg(3),
3345 & erder(3,3),uryg(3,3),urzg(3,3),vryg(3,3),vrzg(3,3)
3346 double precision acipa(2,2),agg(3,4),aggi(3,4),aggi1(3,4),
3347 & aggj(3,4),aggj1(3,4),a_temp(2,2),muij(4),gmuij(4)
3348 common /locel/ a_temp,agg,aggi,aggi1,aggj,aggj1,a22,a23,a32,a33,
3349 & dxi,dyi,dzi,dx_normi,dy_normi,dz_normi,xmedi,ymedi,zmedi,
3351 c 4/26/02 - AL scaling factor for 1,4 repulsive VDW interactions
3353 double precision scal_el /1.0d0/
3355 double precision scal_el /0.5d0/
3358 C 13-go grudnia roku pamietnego...
3359 double precision unmat(3,3) /1.0d0,0.0d0,0.0d0,
3360 & 0.0d0,1.0d0,0.0d0,
3361 & 0.0d0,0.0d0,1.0d0/
3362 cd write(iout,*) 'In EELEC'
3364 cd write(iout,*) 'Type',i
3365 cd write(iout,*) 'B1',B1(:,i)
3366 cd write(iout,*) 'B2',B2(:,i)
3367 cd write(iout,*) 'CC',CC(:,:,i)
3368 cd write(iout,*) 'DD',DD(:,:,i)
3369 cd write(iout,*) 'EE',EE(:,:,i)
3371 cd call check_vecgrad
3373 if (icheckgrad.eq.1) then
3375 fac=1.0d0/dsqrt(scalar(dc(1,i),dc(1,i)))
3377 dc_norm(k,i)=dc(k,i)*fac
3379 c write (iout,*) 'i',i,' fac',fac
3382 if (wel_loc.gt.0.0d0 .or. wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0
3383 & .or. wcorr6.gt.0.0d0 .or. wturn3.gt.0.0d0 .or.
3384 & wturn4.gt.0.0d0 .or. wturn6.gt.0.0d0) then
3385 c call vec_and_deriv
3391 time_mat=time_mat+MPI_Wtime()-time01
3395 cd write (iout,*) 'i=',i
3397 cd write (iout,'(i5,2f10.5)') k,uy(k,i),uz(k,i)
3400 cd write (iout,'(f10.5,2x,3f10.5,2x,3f10.5)')
3401 cd & uz(k,i),(uzgrad(k,l,1,i),l=1,3),(uzgrad(k,l,2,i),l=1,3)
3414 cd print '(a)','Enter EELEC'
3415 cd write (iout,*) 'iatel_s=',iatel_s,' iatel_e=',iatel_e
3417 gel_loc_loc(i)=0.0d0
3422 c 9/27/08 AL Split the interaction loop to ensure load balancing of turn terms
3424 C Loop over i,i+2 and i,i+3 pairs of the peptide groups
3426 C 14/01/2014 TURN3,TUNR4 does no go under periodic boundry condition
3427 do i=iturn3_start,iturn3_end
3429 C write(iout,*) "tu jest i",i
3430 if (itype(i).eq.ntyp1 .or. itype(i+1).eq.ntyp1
3431 C changes suggested by Ana to avoid out of bounds
3432 C Adam: Unnecessary: handled by iturn3_end and iturn3_start
3433 c & .or.((i+4).gt.nres)
3434 c & .or.((i-1).le.0)
3435 C end of changes by Ana
3436 & .or. itype(i+2).eq.ntyp1
3437 & .or. itype(i+3).eq.ntyp1) cycle
3438 C Adam: Instructions below will switch off existing interactions
3440 c if(itype(i-1).eq.ntyp1)cycle
3442 c if(i.LT.nres-3)then
3443 c if (itype(i+4).eq.ntyp1) cycle
3448 dx_normi=dc_norm(1,i)
3449 dy_normi=dc_norm(2,i)
3450 dz_normi=dc_norm(3,i)
3451 xmedi=c(1,i)+0.5d0*dxi
3452 ymedi=c(2,i)+0.5d0*dyi
3453 zmedi=c(3,i)+0.5d0*dzi
3454 xmedi=mod(xmedi,boxxsize)
3455 if (xmedi.lt.0) xmedi=xmedi+boxxsize
3456 ymedi=mod(ymedi,boxysize)
3457 if (ymedi.lt.0) ymedi=ymedi+boxysize
3458 zmedi=mod(zmedi,boxzsize)
3459 if (zmedi.lt.0) zmedi=zmedi+boxzsize
3461 call eelecij(i,i+2,ees,evdw1,eel_loc)
3462 if (wturn3.gt.0.0d0) call eturn3(i,eello_turn3)
3463 num_cont_hb(i)=num_conti
3465 do i=iturn4_start,iturn4_end
3467 if (itype(i).eq.ntyp1 .or. itype(i+1).eq.ntyp1
3468 C changes suggested by Ana to avoid out of bounds
3469 c & .or.((i+5).gt.nres)
3470 c & .or.((i-1).le.0)
3471 C end of changes suggested by Ana
3472 & .or. itype(i+3).eq.ntyp1
3473 & .or. itype(i+4).eq.ntyp1
3474 c & .or. itype(i+5).eq.ntyp1
3475 c & .or. itype(i).eq.ntyp1
3476 c & .or. itype(i-1).eq.ntyp1
3481 dx_normi=dc_norm(1,i)
3482 dy_normi=dc_norm(2,i)
3483 dz_normi=dc_norm(3,i)
3484 xmedi=c(1,i)+0.5d0*dxi
3485 ymedi=c(2,i)+0.5d0*dyi
3486 zmedi=c(3,i)+0.5d0*dzi
3487 C Return atom into box, boxxsize is size of box in x dimension
3489 c if (xmedi.gt.((0.5d0)*boxxsize)) xmedi=xmedi-boxxsize
3490 c if (xmedi.lt.((-0.5d0)*boxxsize)) xmedi=xmedi+boxxsize
3491 C Condition for being inside the proper box
3492 c if ((xmedi.gt.((0.5d0)*boxxsize)).or.
3493 c & (xmedi.lt.((-0.5d0)*boxxsize))) then
3497 c if (ymedi.gt.((0.5d0)*boxysize)) ymedi=ymedi-boxysize
3498 c if (ymedi.lt.((-0.5d0)*boxysize)) ymedi=ymedi+boxysize
3499 C Condition for being inside the proper box
3500 c if ((ymedi.gt.((0.5d0)*boxysize)).or.
3501 c & (ymedi.lt.((-0.5d0)*boxysize))) then
3505 c if (zmedi.gt.((0.5d0)*boxzsize)) zmedi=zmedi-boxzsize
3506 c if (zmedi.lt.((-0.5d0)*boxzsize)) zmedi=zmedi+boxzsize
3507 C Condition for being inside the proper box
3508 c if ((zmedi.gt.((0.5d0)*boxzsize)).or.
3509 c & (zmedi.lt.((-0.5d0)*boxzsize))) then
3512 xmedi=mod(xmedi,boxxsize)
3513 if (xmedi.lt.0) xmedi=xmedi+boxxsize
3514 ymedi=mod(ymedi,boxysize)
3515 if (ymedi.lt.0) ymedi=ymedi+boxysize
3516 zmedi=mod(zmedi,boxzsize)
3517 if (zmedi.lt.0) zmedi=zmedi+boxzsize
3519 num_conti=num_cont_hb(i)
3520 c write(iout,*) "JESTEM W PETLI"
3521 call eelecij(i,i+3,ees,evdw1,eel_loc)
3522 if (wturn4.gt.0.0d0 .and. itype(i+2).ne.ntyp1)
3523 & call eturn4(i,eello_turn4)
3524 num_cont_hb(i)=num_conti
3526 C Loop over all neighbouring boxes
3531 c Loop over all pairs of interacting peptide groups except i,i+2 and i,i+3
3534 do i=iatel_s,iatel_e
3537 if (itype(i).eq.ntyp1 .or. itype(i+1).eq.ntyp1
3538 C changes suggested by Ana to avoid out of bounds
3539 c & .or.((i+2).gt.nres)
3540 c & .or.((i-1).le.0)
3541 C end of changes by Ana
3542 c & .or. itype(i+2).eq.ntyp1
3543 c & .or. itype(i-1).eq.ntyp1
3548 dx_normi=dc_norm(1,i)
3549 dy_normi=dc_norm(2,i)
3550 dz_normi=dc_norm(3,i)
3551 xmedi=c(1,i)+0.5d0*dxi
3552 ymedi=c(2,i)+0.5d0*dyi
3553 zmedi=c(3,i)+0.5d0*dzi
3554 xmedi=mod(xmedi,boxxsize)
3555 if (xmedi.lt.0) xmedi=xmedi+boxxsize
3556 ymedi=mod(ymedi,boxysize)
3557 if (ymedi.lt.0) ymedi=ymedi+boxysize
3558 zmedi=mod(zmedi,boxzsize)
3559 if (zmedi.lt.0) zmedi=zmedi+boxzsize
3560 C xmedi=xmedi+xshift*boxxsize
3561 C ymedi=ymedi+yshift*boxysize
3562 C zmedi=zmedi+zshift*boxzsize
3564 C Return tom into box, boxxsize is size of box in x dimension
3566 c if (xmedi.gt.((xshift+0.5d0)*boxxsize)) xmedi=xmedi-boxxsize
3567 c if (xmedi.lt.((xshift-0.5d0)*boxxsize)) xmedi=xmedi+boxxsize
3568 C Condition for being inside the proper box
3569 c if ((xmedi.gt.((xshift+0.5d0)*boxxsize)).or.
3570 c & (xmedi.lt.((xshift-0.5d0)*boxxsize))) then
3574 c if (ymedi.gt.((yshift+0.5d0)*boxysize)) ymedi=ymedi-boxysize
3575 c if (ymedi.lt.((yshift-0.5d0)*boxysize)) ymedi=ymedi+boxysize
3576 C Condition for being inside the proper box
3577 c if ((ymedi.gt.((yshift+0.5d0)*boxysize)).or.
3578 c & (ymedi.lt.((yshift-0.5d0)*boxysize))) then
3582 c if (zmedi.gt.((zshift+0.5d0)*boxzsize)) zmedi=zmedi-boxzsize
3583 c if (zmedi.lt.((zshift-0.5d0)*boxzsize)) zmedi=zmedi+boxzsize
3584 cC Condition for being inside the proper box
3585 c if ((zmedi.gt.((zshift+0.5d0)*boxzsize)).or.
3586 c & (zmedi.lt.((zshift-0.5d0)*boxzsize))) then
3590 c write (iout,*) 'i',i,' ielstart',ielstart(i),' ielend',ielend(i)
3591 num_conti=num_cont_hb(i)
3593 do j=ielstart(i),ielend(i)
3595 C write (iout,*) i,j
3597 if (itype(j).eq.ntyp1.or. itype(j+1).eq.ntyp1
3598 C changes suggested by Ana to avoid out of bounds
3599 c & .or.((j+2).gt.nres)
3600 c & .or.((j-1).le.0)
3601 C end of changes by Ana
3602 c & .or.itype(j+2).eq.ntyp1
3603 c & .or.itype(j-1).eq.ntyp1
3605 call eelecij(i,j,ees,evdw1,eel_loc)
3607 num_cont_hb(i)=num_conti
3613 c write (iout,*) "Number of loop steps in EELEC:",ind
3615 cd write (iout,'(i3,3f10.5,5x,3f10.5)')
3616 cd & i,(gel_loc(k,i),k=1,3),gel_loc_loc(i)
3618 c 12/7/99 Adam eello_turn3 will be considered as a separate energy term
3619 ccc eel_loc=eel_loc+eello_turn3
3620 cd print *,"Processor",fg_rank," t_eelecij",t_eelecij
3623 C-------------------------------------------------------------------------------
3624 subroutine eelecij(i,j,ees,evdw1,eel_loc)
3625 implicit real*8 (a-h,o-z)
3626 include 'DIMENSIONS'
3630 include 'COMMON.CONTROL'
3631 include 'COMMON.IOUNITS'
3632 include 'COMMON.GEO'
3633 include 'COMMON.VAR'
3634 include 'COMMON.LOCAL'
3635 include 'COMMON.CHAIN'
3636 include 'COMMON.DERIV'
3637 include 'COMMON.INTERACT'
3638 include 'COMMON.CONTACTS'
3639 include 'COMMON.TORSION'
3640 include 'COMMON.VECTORS'
3641 include 'COMMON.FFIELD'
3642 include 'COMMON.TIME1'
3643 include 'COMMON.SPLITELE'
3644 include 'COMMON.SHIELD'
3645 dimension ggg(3),gggp(3),gggm(3),erij(3),dcosb(3),dcosg(3),
3646 & erder(3,3),uryg(3,3),urzg(3,3),vryg(3,3),vrzg(3,3)
3647 double precision acipa(2,2),agg(3,4),aggi(3,4),aggi1(3,4),
3648 & aggj(3,4),aggj1(3,4),a_temp(2,2),muij(4),gmuij1(4),gmuji1(4),
3649 & gmuij2(4),gmuji2(4)
3650 common /locel/ a_temp,agg,aggi,aggi1,aggj,aggj1,a22,a23,a32,a33,
3651 & dxi,dyi,dzi,dx_normi,dy_normi,dz_normi,xmedi,ymedi,zmedi,
3653 c 4/26/02 - AL scaling factor for 1,4 repulsive VDW interactions
3655 double precision scal_el /1.0d0/
3657 double precision scal_el /0.5d0/
3660 C 13-go grudnia roku pamietnego...
3661 double precision unmat(3,3) /1.0d0,0.0d0,0.0d0,
3662 & 0.0d0,1.0d0,0.0d0,
3663 & 0.0d0,0.0d0,1.0d0/
3664 c time00=MPI_Wtime()
3665 cd write (iout,*) "eelecij",i,j
3669 if (j.eq.i+2 .and. itelj.eq.2) iteli=2
3670 aaa=app(iteli,itelj)
3671 bbb=bpp(iteli,itelj)
3672 ael6i=ael6(iteli,itelj)
3673 ael3i=ael3(iteli,itelj)
3677 dx_normj=dc_norm(1,j)
3678 dy_normj=dc_norm(2,j)
3679 dz_normj=dc_norm(3,j)
3680 C xj=c(1,j)+0.5D0*dxj-xmedi
3681 C yj=c(2,j)+0.5D0*dyj-ymedi
3682 C zj=c(3,j)+0.5D0*dzj-zmedi
3687 if (xj.lt.0) xj=xj+boxxsize
3689 if (yj.lt.0) yj=yj+boxysize
3691 if (zj.lt.0) zj=zj+boxzsize
3692 if ((zj.lt.0).or.(xj.lt.0).or.(yj.lt.0)) write (*,*) "CHUJ"
3693 dist_init=(xj-xmedi)**2+(yj-ymedi)**2+(zj-zmedi)**2
3701 xj=xj_safe+xshift*boxxsize
3702 yj=yj_safe+yshift*boxysize
3703 zj=zj_safe+zshift*boxzsize
3704 dist_temp=(xj-xmedi)**2+(yj-ymedi)**2+(zj-zmedi)**2
3705 if(dist_temp.lt.dist_init) then
3715 if (isubchap.eq.1) then
3724 C if ((i+3).lt.j) then !this condition keeps for turn3 and turn4 not subject to PBC
3726 c if (xj.gt.((0.5d0)*boxxsize)) xj=xj-boxxsize
3727 c if (xj.lt.((-0.5d0)*boxxsize)) xj=xj+boxxsize
3728 C Condition for being inside the proper box
3729 c if ((xj.gt.((0.5d0)*boxxsize)).or.
3730 c & (xj.lt.((-0.5d0)*boxxsize))) then
3734 c if (yj.gt.((0.5d0)*boxysize)) yj=yj-boxysize
3735 c if (yj.lt.((-0.5d0)*boxysize)) yj=yj+boxysize
3736 C Condition for being inside the proper box
3737 c if ((yj.gt.((0.5d0)*boxysize)).or.
3738 c & (yj.lt.((-0.5d0)*boxysize))) then
3742 c if (zj.gt.((0.5d0)*boxzsize)) zj=zj-boxzsize
3743 c if (zj.lt.((-0.5d0)*boxzsize)) zj=zj+boxzsize
3744 C Condition for being inside the proper box
3745 c if ((zj.gt.((0.5d0)*boxzsize)).or.
3746 c & (zj.lt.((-0.5d0)*boxzsize))) then
3749 C endif !endPBC condintion
3753 rij=xj*xj+yj*yj+zj*zj
3755 sss=sscale(sqrt(rij))
3756 sssgrad=sscagrad(sqrt(rij))
3757 c if (sss.gt.0.0d0) then
3763 cosa=dx_normi*dx_normj+dy_normi*dy_normj+dz_normi*dz_normj
3764 cosb=(xj*dx_normi+yj*dy_normi+zj*dz_normi)*rmij
3765 cosg=(xj*dx_normj+yj*dy_normj+zj*dz_normj)*rmij
3766 fac=cosa-3.0D0*cosb*cosg
3768 c 4/26/02 - AL scaling down 1,4 repulsive VDW interactions
3769 if (j.eq.i+2) ev1=scal_el*ev1
3774 el1=fac3*(4.0D0+fac*fac-3.0D0*(cosb*cosb+cosg*cosg))
3778 C 12/26/95 - for the evaluation of multi-body H-bonding interactions
3779 ees0ij=4.0D0+fac*fac-3.0D0*(cosb*cosb+cosg*cosg)
3780 if (shield_mode.gt.0) then
3783 el1=el1*fac_shield(i)**2*fac_shield(j)**2
3784 el2=el2*fac_shield(i)**2*fac_shield(j)**2
3793 evdw1=evdw1+evdwij*sss
3794 cd write(iout,'(2(2i3,2x),7(1pd12.4)/2(3(1pd12.4),5x)/)')
3795 cd & iteli,i,itelj,j,aaa,bbb,ael6i,ael3i,
3796 cd & 1.0D0/dsqrt(rrmij),evdwij,eesij,
3797 cd & xmedi,ymedi,zmedi,xj,yj,zj
3799 if (energy_dec) then
3800 write (iout,'(a6,2i5,0pf7.3,2i5,2e11.3)')
3802 &,iteli,itelj,aaa,evdw1
3803 write (iout,'(a6,2i5,0pf7.3,2f8.3)') 'ees',i,j,eesij,
3804 &fac_shield(i),fac_shield(j)
3808 C Calculate contributions to the Cartesian gradient.
3811 facvdw=-6*rrmij*(ev1+evdwij)*sss
3812 facel=-3*rrmij*(el1+eesij)
3819 * Radial derivatives. First process both termini of the fragment (i,j)
3824 if ((fac_shield(i).gt.0).and.(fac_shield(j).gt.0).and.
3825 & (shield_mode.gt.0)) then
3827 do ilist=1,ishield_list(i)
3828 iresshield=shield_list(ilist,i)
3830 rlocshield=grad_shield_side(k,ilist,i)*eesij/fac_shield(i)
3832 gshieldx(k,iresshield)=gshieldx(k,iresshield)+
3834 & +grad_shield_loc(k,ilist,i)*eesij/fac_shield(i)*2.0
3835 gshieldc(k,iresshield-1)=gshieldc(k,iresshield-1)+rlocshield
3836 C gshieldc_loc(k,iresshield)=gshieldc_loc(k,iresshield)
3837 C & +grad_shield_loc(k,ilist,i)*eesij/fac_shield(i)
3838 C if (iresshield.gt.i) then
3839 C do ishi=i+1,iresshield-1
3840 C gshieldc(k,ishi)=gshieldc(k,ishi)+rlocshield
3841 C & +grad_shield_loc(k,ilist,i)*eesij/fac_shield(i)
3845 C do ishi=iresshield,i
3846 C gshieldc(k,ishi)=gshieldc(k,ishi)-rlocshield
3847 C & -grad_shield_loc(k,ilist,i)*eesij/fac_shield(i)
3853 do ilist=1,ishield_list(j)
3854 iresshield=shield_list(ilist,j)
3856 rlocshield=grad_shield_side(k,ilist,j)*eesij/fac_shield(j)
3858 gshieldx(k,iresshield)=gshieldx(k,iresshield)+
3860 & +grad_shield_loc(k,ilist,j)*eesij/fac_shield(j)*2.0
3861 gshieldc(k,iresshield-1)=gshieldc(k,iresshield-1)+rlocshield
3863 C & +grad_shield_loc(k,ilist,j)*eesij/fac_shield(j)
3864 C gshieldc_loc(k,iresshield)=gshieldc_loc(k,iresshield)
3865 C & +grad_shield_loc(k,ilist,j)*eesij/fac_shield(j)
3866 C if (iresshield.gt.j) then
3867 C do ishi=j+1,iresshield-1
3868 C gshieldc(k,ishi)=gshieldc(k,ishi)+rlocshield
3869 C & +grad_shield_loc(k,ilist,j)*eesij/fac_shield(j)
3873 C do ishi=iresshield,j
3874 C gshieldc(k,ishi)=gshieldc(k,ishi)-rlocshield
3875 C & -grad_shield_loc(k,ilist,j)*eesij/fac_shield(j)
3882 gshieldc(k,i)=gshieldc(k,i)+
3883 & grad_shield(k,i)*eesij/fac_shield(i)*2.0
3884 gshieldc(k,j)=gshieldc(k,j)+
3885 & grad_shield(k,j)*eesij/fac_shield(j)*2.0
3886 gshieldc(k,i-1)=gshieldc(k,i-1)+
3887 & grad_shield(k,i)*eesij/fac_shield(i)*2.0
3888 gshieldc(k,j-1)=gshieldc(k,j-1)+
3889 & grad_shield(k,j)*eesij/fac_shield(j)*2.0
3894 c ghalf=0.5D0*ggg(k)
3895 c gelc(k,i)=gelc(k,i)+ghalf
3896 c gelc(k,j)=gelc(k,j)+ghalf
3898 c 9/28/08 AL Gradient compotents will be summed only at the end
3899 C print *,"before", gelc_long(1,i), gelc_long(1,j)
3901 gelc_long(k,j)=gelc_long(k,j)+ggg(k)
3902 C & +grad_shield(k,j)*eesij/fac_shield(j)
3903 gelc_long(k,i)=gelc_long(k,i)-ggg(k)
3904 C & +grad_shield(k,i)*eesij/fac_shield(i)
3905 C gelc_long(k,i-1)=gelc_long(k,i-1)
3906 C & +grad_shield(k,i)*eesij/fac_shield(i)
3907 C gelc_long(k,j-1)=gelc_long(k,j-1)
3908 C & +grad_shield(k,j)*eesij/fac_shield(j)
3910 C print *,"bafter", gelc_long(1,i), gelc_long(1,j)
3913 * Loop over residues i+1 thru j-1.
3917 cgrad gelc(l,k)=gelc(l,k)+ggg(l)
3920 if (sss.gt.0.0) then
3921 ggg(1)=facvdw*xj+sssgrad*rmij*evdwij*xj
3922 ggg(2)=facvdw*yj+sssgrad*rmij*evdwij*yj
3923 ggg(3)=facvdw*zj+sssgrad*rmij*evdwij*zj
3930 c ghalf=0.5D0*ggg(k)
3931 c gvdwpp(k,i)=gvdwpp(k,i)+ghalf
3932 c gvdwpp(k,j)=gvdwpp(k,j)+ghalf
3934 c 9/28/08 AL Gradient compotents will be summed only at the end
3936 gvdwpp(k,j)=gvdwpp(k,j)+ggg(k)
3937 gvdwpp(k,i)=gvdwpp(k,i)-ggg(k)
3940 * Loop over residues i+1 thru j-1.
3944 cgrad gvdwpp(l,k)=gvdwpp(l,k)+ggg(l)
3949 facvdw=(ev1+evdwij)*sss
3952 fac=-3*rrmij*(facvdw+facvdw+facel)
3957 * Radial derivatives. First process both termini of the fragment (i,j)
3960 C+eesij*grad_shield(1,i)+eesij*grad_shield(1,j)
3962 C+eesij*grad_shield(2,i)+eesij*grad_shield(2,j)
3964 C+eesij*grad_shield(3,i)+eesij*grad_shield(3,j)
3966 c ghalf=0.5D0*ggg(k)
3967 c gelc(k,i)=gelc(k,i)+ghalf
3968 c gelc(k,j)=gelc(k,j)+ghalf
3970 c 9/28/08 AL Gradient compotents will be summed only at the end
3972 gelc_long(k,j)=gelc(k,j)+ggg(k)
3973 gelc_long(k,i)=gelc(k,i)-ggg(k)
3976 * Loop over residues i+1 thru j-1.
3980 cgrad gelc(l,k)=gelc(l,k)+ggg(l)
3983 c 9/28/08 AL Gradient compotents will be summed only at the end
3984 ggg(1)=facvdw*xj+sssgrad*rmij*evdwij*xj
3985 ggg(2)=facvdw*yj+sssgrad*rmij*evdwij*yj
3986 ggg(3)=facvdw*zj+sssgrad*rmij*evdwij*zj
3988 gvdwpp(k,j)=gvdwpp(k,j)+ggg(k)
3989 gvdwpp(k,i)=gvdwpp(k,i)-ggg(k)
3995 ecosa=2.0D0*fac3*fac1+fac4
3998 ecosb=(fac3*(fac1*cosg+cosb)+cosg*fac4)
3999 ecosg=(fac3*(fac1*cosb+cosg)+cosb*fac4)
4001 dcosb(k)=rmij*(dc_norm(k,i)-erij(k)*cosb)
4002 dcosg(k)=rmij*(dc_norm(k,j)-erij(k)*cosg)
4004 cd print '(2i3,2(3(1pd14.5),3x))',i,j,(dcosb(k),k=1,3),
4005 cd & (dcosg(k),k=1,3)
4007 ggg(k)=(ecosb*dcosb(k)+ecosg*dcosg(k))*
4008 & fac_shield(i)**2*fac_shield(j)**2
4011 c ghalf=0.5D0*ggg(k)
4012 c gelc(k,i)=gelc(k,i)+ghalf
4013 c & +(ecosa*(dc_norm(k,j)-cosa*dc_norm(k,i))
4014 c & + ecosb*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1)
4015 c gelc(k,j)=gelc(k,j)+ghalf
4016 c & +(ecosa*(dc_norm(k,i)-cosa*dc_norm(k,j))
4017 c & + ecosg*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1)
4021 cgrad gelc(l,k)=gelc(l,k)+ggg(l)
4024 C print *,"before22", gelc_long(1,i), gelc_long(1,j)
4027 & +((ecosa*(dc_norm(k,j)-cosa*dc_norm(k,i))
4028 & + ecosb*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1))
4029 & *fac_shield(i)**2*fac_shield(j)**2
4031 & +((ecosa*(dc_norm(k,i)-cosa*dc_norm(k,j))
4032 & + ecosg*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1))
4033 & *fac_shield(i)**2*fac_shield(j)**2
4034 gelc_long(k,j)=gelc_long(k,j)+ggg(k)
4035 gelc_long(k,i)=gelc_long(k,i)-ggg(k)
4037 C print *,"before33", gelc_long(1,i), gelc_long(1,j)
4041 IF (wel_loc.gt.0.0d0 .or. wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0
4042 & .or. wcorr6.gt.0.0d0 .or. wturn3.gt.0.0d0
4043 & .or. wturn4.gt.0.0d0 .or. wturn6.gt.0.0d0) THEN
4045 C 9/25/99 Mixed third-order local-electrostatic terms. The local-interaction
4046 C energy of a peptide unit is assumed in the form of a second-order
4047 C Fourier series in the angles lambda1 and lambda2 (see Nishikawa et al.
4048 C Macromolecules, 1974, 7, 797-806 for definition). This correlation terms
4049 C are computed for EVERY pair of non-contiguous peptide groups.
4052 if (j.lt.nres-1) then
4064 muij(kkk)=mu(k,i)*mu(l,j)
4065 c write(iout,*) 'mumu=', mu(k,i),mu(l,j),i,j,k,l
4067 gmuij1(kkk)=gtb1(k,i+1)*mu(l,j)
4068 c write(iout,*) 'k=',k,i,gtb1(k,i+1),gtb1(k,i+1)*mu(l,j)
4069 gmuij2(kkk)=gUb2(k,i)*mu(l,j)
4070 gmuji1(kkk)=mu(k,i)*gtb1(l,j+1)
4071 c write(iout,*) 'l=',l,j,gtb1(l,j+1),gtb1(l,j+1)*mu(k,i)
4072 gmuji2(kkk)=mu(k,i)*gUb2(l,j)
4076 cd write (iout,*) 'EELEC: i',i,' j',j
4077 cd write (iout,*) 'j',j,' j1',j1,' j2',j2
4078 cd write(iout,*) 'muij',muij
4079 ury=scalar(uy(1,i),erij)
4080 urz=scalar(uz(1,i),erij)
4081 vry=scalar(uy(1,j),erij)
4082 vrz=scalar(uz(1,j),erij)
4083 a22=scalar(uy(1,i),uy(1,j))-3*ury*vry
4084 a23=scalar(uy(1,i),uz(1,j))-3*ury*vrz
4085 a32=scalar(uz(1,i),uy(1,j))-3*urz*vry
4086 a33=scalar(uz(1,i),uz(1,j))-3*urz*vrz
4087 fac=dsqrt(-ael6i)*r3ij
4092 cd write (iout,'(4i5,4f10.5)')
4093 cd & i,itortyp(itype(i)),j,itortyp(itype(j)),a22,a23,a32,a33
4094 cd write (iout,'(6f10.5)') (muij(k),k=1,4),fac,eel_loc_ij
4095 cd write (iout,'(2(3f10.5,5x)/2(3f10.5,5x))') uy(:,i),uz(:,i),
4096 cd & uy(:,j),uz(:,j)
4097 cd write (iout,'(4f10.5)')
4098 cd & scalar(uy(1,i),uy(1,j)),scalar(uy(1,i),uz(1,j)),
4099 cd & scalar(uz(1,i),uy(1,j)),scalar(uz(1,i),uz(1,j))
4100 cd write (iout,'(4f10.5)') ury,urz,vry,vrz
4101 cd write (iout,'(9f10.5/)')
4102 cd & fac22,a22,fac23,a23,fac32,a32,fac33,a33,eel_loc_ij
4103 C Derivatives of the elements of A in virtual-bond vectors
4104 call unormderiv(erij(1),unmat(1,1),rmij,erder(1,1))
4106 uryg(k,1)=scalar(erder(1,k),uy(1,i))
4107 uryg(k,2)=scalar(uygrad(1,k,1,i),erij(1))
4108 uryg(k,3)=scalar(uygrad(1,k,2,i),erij(1))
4109 urzg(k,1)=scalar(erder(1,k),uz(1,i))
4110 urzg(k,2)=scalar(uzgrad(1,k,1,i),erij(1))
4111 urzg(k,3)=scalar(uzgrad(1,k,2,i),erij(1))
4112 vryg(k,1)=scalar(erder(1,k),uy(1,j))
4113 vryg(k,2)=scalar(uygrad(1,k,1,j),erij(1))
4114 vryg(k,3)=scalar(uygrad(1,k,2,j),erij(1))
4115 vrzg(k,1)=scalar(erder(1,k),uz(1,j))
4116 vrzg(k,2)=scalar(uzgrad(1,k,1,j),erij(1))
4117 vrzg(k,3)=scalar(uzgrad(1,k,2,j),erij(1))
4119 C Compute radial contributions to the gradient
4137 C Add the contributions coming from er
4140 agg(k,1)=agg(k,1)+fac3*(uryg(k,1)*vry+vryg(k,1)*ury)
4141 agg(k,2)=agg(k,2)+fac3*(uryg(k,1)*vrz+vrzg(k,1)*ury)
4142 agg(k,3)=agg(k,3)+fac3*(urzg(k,1)*vry+vryg(k,1)*urz)
4143 agg(k,4)=agg(k,4)+fac3*(urzg(k,1)*vrz+vrzg(k,1)*urz)
4146 C Derivatives in DC(i)
4147 cgrad ghalf1=0.5d0*agg(k,1)
4148 cgrad ghalf2=0.5d0*agg(k,2)
4149 cgrad ghalf3=0.5d0*agg(k,3)
4150 cgrad ghalf4=0.5d0*agg(k,4)
4151 aggi(k,1)=fac*(scalar(uygrad(1,k,1,i),uy(1,j))
4152 & -3.0d0*uryg(k,2)*vry)!+ghalf1
4153 aggi(k,2)=fac*(scalar(uygrad(1,k,1,i),uz(1,j))
4154 & -3.0d0*uryg(k,2)*vrz)!+ghalf2
4155 aggi(k,3)=fac*(scalar(uzgrad(1,k,1,i),uy(1,j))
4156 & -3.0d0*urzg(k,2)*vry)!+ghalf3
4157 aggi(k,4)=fac*(scalar(uzgrad(1,k,1,i),uz(1,j))
4158 & -3.0d0*urzg(k,2)*vrz)!+ghalf4
4159 C Derivatives in DC(i+1)
4160 aggi1(k,1)=fac*(scalar(uygrad(1,k,2,i),uy(1,j))
4161 & -3.0d0*uryg(k,3)*vry)!+agg(k,1)
4162 aggi1(k,2)=fac*(scalar(uygrad(1,k,2,i),uz(1,j))
4163 & -3.0d0*uryg(k,3)*vrz)!+agg(k,2)
4164 aggi1(k,3)=fac*(scalar(uzgrad(1,k,2,i),uy(1,j))
4165 & -3.0d0*urzg(k,3)*vry)!+agg(k,3)
4166 aggi1(k,4)=fac*(scalar(uzgrad(1,k,2,i),uz(1,j))
4167 & -3.0d0*urzg(k,3)*vrz)!+agg(k,4)
4168 C Derivatives in DC(j)
4169 aggj(k,1)=fac*(scalar(uygrad(1,k,1,j),uy(1,i))
4170 & -3.0d0*vryg(k,2)*ury)!+ghalf1
4171 aggj(k,2)=fac*(scalar(uzgrad(1,k,1,j),uy(1,i))
4172 & -3.0d0*vrzg(k,2)*ury)!+ghalf2
4173 aggj(k,3)=fac*(scalar(uygrad(1,k,1,j),uz(1,i))
4174 & -3.0d0*vryg(k,2)*urz)!+ghalf3
4175 aggj(k,4)=fac*(scalar(uzgrad(1,k,1,j),uz(1,i))
4176 & -3.0d0*vrzg(k,2)*urz)!+ghalf4
4177 C Derivatives in DC(j+1) or DC(nres-1)
4178 aggj1(k,1)=fac*(scalar(uygrad(1,k,2,j),uy(1,i))
4179 & -3.0d0*vryg(k,3)*ury)
4180 aggj1(k,2)=fac*(scalar(uzgrad(1,k,2,j),uy(1,i))
4181 & -3.0d0*vrzg(k,3)*ury)
4182 aggj1(k,3)=fac*(scalar(uygrad(1,k,2,j),uz(1,i))
4183 & -3.0d0*vryg(k,3)*urz)
4184 aggj1(k,4)=fac*(scalar(uzgrad(1,k,2,j),uz(1,i))
4185 & -3.0d0*vrzg(k,3)*urz)
4186 cgrad if (j.eq.nres-1 .and. i.lt.j-2) then
4188 cgrad aggj1(k,l)=aggj1(k,l)+agg(k,l)
4201 aggi(k,l)=-aggi(k,l)
4202 aggi1(k,l)=-aggi1(k,l)
4203 aggj(k,l)=-aggj(k,l)
4204 aggj1(k,l)=-aggj1(k,l)
4207 if (j.lt.nres-1) then
4213 aggi(k,l)=-aggi(k,l)
4214 aggi1(k,l)=-aggi1(k,l)
4215 aggj(k,l)=-aggj(k,l)
4216 aggj1(k,l)=-aggj1(k,l)
4227 aggi(k,l)=-aggi(k,l)
4228 aggi1(k,l)=-aggi1(k,l)
4229 aggj(k,l)=-aggj(k,l)
4230 aggj1(k,l)=-aggj1(k,l)
4235 IF (wel_loc.gt.0.0d0) THEN
4236 C Contribution to the local-electrostatic energy coming from the i-j pair
4237 eel_loc_ij=a22*muij(1)+a23*muij(2)+a32*muij(3)
4239 if (shield_mode.eq.0) then
4246 eel_loc_ij=eel_loc_ij
4247 & *fac_shield(i)*fac_shield(j)
4248 C Now derivative over eel_loc
4249 if ((fac_shield(i).gt.0).and.(fac_shield(j).gt.0).and.
4250 & (shield_mode.gt.0)) then
4253 do ilist=1,ishield_list(i)
4254 iresshield=shield_list(ilist,i)
4256 rlocshield=grad_shield_side(k,ilist,i)*eel_loc_ij
4259 gshieldx_ll(k,iresshield)=gshieldx_ll(k,iresshield)+
4261 & +grad_shield_loc(k,ilist,i)*eel_loc_ij/fac_shield(i)
4262 gshieldc_ll(k,iresshield-1)=gshieldc_ll(k,iresshield-1)
4266 do ilist=1,ishield_list(j)
4267 iresshield=shield_list(ilist,j)
4269 rlocshield=grad_shield_side(k,ilist,j)*eel_loc_ij
4272 gshieldx_ll(k,iresshield)=gshieldx_ll(k,iresshield)+
4274 & +grad_shield_loc(k,ilist,j)*eel_loc_ij/fac_shield(j)
4275 gshieldc_ll(k,iresshield-1)=gshieldc_ll(k,iresshield-1)
4282 gshieldc_ll(k,i)=gshieldc_ll(k,i)+
4283 & grad_shield(k,i)*eel_loc_ij/fac_shield(i)
4284 gshieldc_ll(k,j)=gshieldc_ll(k,j)+
4285 & grad_shield(k,j)*eel_loc_ij/fac_shield(j)
4286 gshieldc_ll(k,i-1)=gshieldc_ll(k,i-1)+
4287 & grad_shield(k,i)*eel_loc_ij/fac_shield(i)
4288 gshieldc_ll(k,j-1)=gshieldc_ll(k,j-1)+
4289 & grad_shield(k,j)*eel_loc_ij/fac_shield(j)
4294 c write (iout,*) 'i',i,' j',j,itype(i),itype(j),
4295 c & ' eel_loc_ij',eel_loc_ij
4296 C write(iout,*) 'muije=',i,j,muij(1),muij(2),muij(3),muij(4)
4297 C Calculate patrial derivative for theta angle
4299 geel_loc_ij=(a22*gmuij1(1)
4303 & *fac_shield(i)*fac_shield(j)
4304 c write(iout,*) "derivative over thatai"
4305 c write(iout,*) a22*gmuij1(1), a23*gmuij1(2) ,a32*gmuij1(3),
4307 gloc(nphi+i,icg)=gloc(nphi+i,icg)+
4308 & geel_loc_ij*wel_loc
4309 c write(iout,*) "derivative over thatai-1"
4310 c write(iout,*) a22*gmuij2(1), a23*gmuij2(2) ,a32*gmuij2(3),
4317 gloc(nphi+i-1,icg)=gloc(nphi+i-1,icg)+
4318 & geel_loc_ij*wel_loc
4319 & *fac_shield(i)*fac_shield(j)
4321 c Derivative over j residue
4322 geel_loc_ji=a22*gmuji1(1)
4326 c write(iout,*) "derivative over thataj"
4327 c write(iout,*) a22*gmuji1(1), a23*gmuji1(2) ,a32*gmuji1(3),
4330 gloc(nphi+j,icg)=gloc(nphi+j,icg)+
4331 & geel_loc_ji*wel_loc
4332 & *fac_shield(i)*fac_shield(j)
4339 c write(iout,*) "derivative over thataj-1"
4340 c write(iout,*) a22*gmuji2(1), a23*gmuji2(2) ,a32*gmuji2(3),
4342 gloc(nphi+j-1,icg)=gloc(nphi+j-1,icg)+
4343 & geel_loc_ji*wel_loc
4344 & *fac_shield(i)*fac_shield(j)
4346 cd write (iout,*) 'i',i,' j',j,' eel_loc_ij',eel_loc_ij
4348 if (energy_dec) write (iout,'(a6,2i5,0pf7.3)')
4349 & 'eelloc',i,j,eel_loc_ij
4350 c if (eel_loc_ij.ne.0)
4351 c & write (iout,'(a4,2i4,8f9.5)')'chuj',
4352 c & i,j,a22,muij(1),a23,muij(2),a32,muij(3),a33,muij(4)
4354 eel_loc=eel_loc+eel_loc_ij
4355 C Partial derivatives in virtual-bond dihedral angles gamma
4357 & gel_loc_loc(i-1)=gel_loc_loc(i-1)+
4358 & (a22*muder(1,i)*mu(1,j)+a23*muder(1,i)*mu(2,j)
4359 & +a32*muder(2,i)*mu(1,j)+a33*muder(2,i)*mu(2,j))
4360 & *fac_shield(i)*fac_shield(j)
4362 gel_loc_loc(j-1)=gel_loc_loc(j-1)+
4363 & (a22*mu(1,i)*muder(1,j)+a23*mu(1,i)*muder(2,j)
4364 & +a32*mu(2,i)*muder(1,j)+a33*mu(2,i)*muder(2,j))
4365 & *fac_shield(i)*fac_shield(j)
4366 C Derivatives of eello in DC(i+1) thru DC(j-1) or DC(nres-2)
4368 ggg(l)=(agg(l,1)*muij(1)+
4369 & agg(l,2)*muij(2)+agg(l,3)*muij(3)+agg(l,4)*muij(4))
4370 & *fac_shield(i)*fac_shield(j)
4371 gel_loc_long(l,j)=gel_loc_long(l,j)+ggg(l)
4372 gel_loc_long(l,i)=gel_loc_long(l,i)-ggg(l)
4373 cgrad ghalf=0.5d0*ggg(l)
4374 cgrad gel_loc(l,i)=gel_loc(l,i)+ghalf
4375 cgrad gel_loc(l,j)=gel_loc(l,j)+ghalf
4379 cgrad gel_loc(l,k)=gel_loc(l,k)+ggg(l)
4382 C Remaining derivatives of eello
4384 gel_loc(l,i)=gel_loc(l,i)+(aggi(l,1)*muij(1)+
4385 & aggi(l,2)*muij(2)+aggi(l,3)*muij(3)+aggi(l,4)*muij(4))
4386 & *fac_shield(i)*fac_shield(j)
4388 gel_loc(l,i+1)=gel_loc(l,i+1)+(aggi1(l,1)*muij(1)+
4389 & aggi1(l,2)*muij(2)+aggi1(l,3)*muij(3)+aggi1(l,4)*muij(4))
4390 & *fac_shield(i)*fac_shield(j)
4392 gel_loc(l,j)=gel_loc(l,j)+(aggj(l,1)*muij(1)+
4393 & aggj(l,2)*muij(2)+aggj(l,3)*muij(3)+aggj(l,4)*muij(4))
4394 & *fac_shield(i)*fac_shield(j)
4396 gel_loc(l,j1)=gel_loc(l,j1)+(aggj1(l,1)*muij(1)+
4397 & aggj1(l,2)*muij(2)+aggj1(l,3)*muij(3)+aggj1(l,4)*muij(4))
4398 & *fac_shield(i)*fac_shield(j)
4402 C Change 12/26/95 to calculate four-body contributions to H-bonding energy
4403 c if (j.gt.i+1 .and. num_conti.le.maxconts) then
4404 if (wcorr+wcorr4+wcorr5+wcorr6.gt.0.0d0
4405 & .and. num_conti.le.maxconts) then
4406 c write (iout,*) i,j," entered corr"
4408 C Calculate the contact function. The ith column of the array JCONT will
4409 C contain the numbers of atoms that make contacts with the atom I (of numbers
4410 C greater than I). The arrays FACONT and GACONT will contain the values of
4411 C the contact function and its derivative.
4412 c r0ij=1.02D0*rpp(iteli,itelj)
4413 c r0ij=1.11D0*rpp(iteli,itelj)
4414 r0ij=2.20D0*rpp(iteli,itelj)
4415 c r0ij=1.55D0*rpp(iteli,itelj)
4416 call gcont(rij,r0ij,1.0D0,0.2d0*r0ij,fcont,fprimcont)
4417 if (fcont.gt.0.0D0) then
4418 num_conti=num_conti+1
4419 if (num_conti.gt.maxconts) then
4420 write (iout,*) 'WARNING - max. # of contacts exceeded;',
4421 & ' will skip next contacts for this conf.'
4423 jcont_hb(num_conti,i)=j
4424 cd write (iout,*) "i",i," j",j," num_conti",num_conti,
4425 cd & " jcont_hb",jcont_hb(num_conti,i)
4426 IF (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or.
4427 & wcorr6.gt.0.0d0 .or. wturn6.gt.0.0d0) THEN
4428 C 9/30/99 (AL) - store components necessary to evaluate higher-order loc-el
4430 d_cont(num_conti,i)=rij
4431 cd write (2,'(3e15.5)') rij,r0ij+0.2d0*r0ij,rij
4432 C --- Electrostatic-interaction matrix ---
4433 a_chuj(1,1,num_conti,i)=a22
4434 a_chuj(1,2,num_conti,i)=a23
4435 a_chuj(2,1,num_conti,i)=a32
4436 a_chuj(2,2,num_conti,i)=a33
4437 C --- Gradient of rij
4439 grij_hb_cont(kkk,num_conti,i)=erij(kkk)
4446 a_chuj_der(k,l,m,1,num_conti,i)=agg(m,kkll)
4447 a_chuj_der(k,l,m,2,num_conti,i)=aggi(m,kkll)
4448 a_chuj_der(k,l,m,3,num_conti,i)=aggi1(m,kkll)
4449 a_chuj_der(k,l,m,4,num_conti,i)=aggj(m,kkll)
4450 a_chuj_der(k,l,m,5,num_conti,i)=aggj1(m,kkll)
4455 IF (wcorr4.eq.0.0d0 .and. wcorr.gt.0.0d0) THEN
4456 C Calculate contact energies
4458 wij=cosa-3.0D0*cosb*cosg
4461 c fac3=dsqrt(-ael6i)/r0ij**3
4462 fac3=dsqrt(-ael6i)*r3ij
4463 c ees0pij=dsqrt(4.0D0+cosa4+wij*wij-3.0D0*cosbg1*cosbg1)
4464 ees0tmp=4.0D0+cosa4+wij*wij-3.0D0*cosbg1*cosbg1
4465 if (ees0tmp.gt.0) then
4466 ees0pij=dsqrt(ees0tmp)
4470 c ees0mij=dsqrt(4.0D0-cosa4+wij*wij-3.0D0*cosbg2*cosbg2)
4471 ees0tmp=4.0D0-cosa4+wij*wij-3.0D0*cosbg2*cosbg2
4472 if (ees0tmp.gt.0) then
4473 ees0mij=dsqrt(ees0tmp)
4478 if (shield_mode.eq.0) then
4482 ees0plist(num_conti,i)=j
4483 C fac_shield(i)=0.4d0
4484 C fac_shield(j)=0.6d0
4486 ees0p(num_conti,i)=0.5D0*fac3*(ees0pij+ees0mij)
4487 & *fac_shield(i)*fac_shield(j)
4488 ees0m(num_conti,i)=0.5D0*fac3*(ees0pij-ees0mij)
4489 & *fac_shield(i)*fac_shield(j)
4490 C Diagnostics. Comment out or remove after debugging!
4491 c ees0p(num_conti,i)=0.5D0*fac3*ees0pij
4492 c ees0m(num_conti,i)=0.5D0*fac3*ees0mij
4493 c ees0m(num_conti,i)=0.0D0
4495 c write (iout,*) 'i=',i,' j=',j,' rij=',rij,' r0ij=',r0ij,
4496 c & ' ees0ij=',ees0p(num_conti,i),ees0m(num_conti,i),' fcont=',fcont
4497 C Angular derivatives of the contact function
4498 ees0pij1=fac3/ees0pij
4499 ees0mij1=fac3/ees0mij
4500 fac3p=-3.0D0*fac3*rrmij
4501 ees0pijp=0.5D0*fac3p*(ees0pij+ees0mij)
4502 ees0mijp=0.5D0*fac3p*(ees0pij-ees0mij)
4504 ecosa1= ees0pij1*( 1.0D0+0.5D0*wij)
4505 ecosb1=-1.5D0*ees0pij1*(wij*cosg+cosbg1)
4506 ecosg1=-1.5D0*ees0pij1*(wij*cosb+cosbg1)
4507 ecosa2= ees0mij1*(-1.0D0+0.5D0*wij)
4508 ecosb2=-1.5D0*ees0mij1*(wij*cosg+cosbg2)
4509 ecosg2=-1.5D0*ees0mij1*(wij*cosb-cosbg2)
4510 ecosap=ecosa1+ecosa2
4511 ecosbp=ecosb1+ecosb2
4512 ecosgp=ecosg1+ecosg2
4513 ecosam=ecosa1-ecosa2
4514 ecosbm=ecosb1-ecosb2
4515 ecosgm=ecosg1-ecosg2
4524 facont_hb(num_conti,i)=fcont
4525 fprimcont=fprimcont/rij
4526 cd facont_hb(num_conti,i)=1.0D0
4527 C Following line is for diagnostics.
4530 dcosb(k)=rmij*(dc_norm(k,i)-erij(k)*cosb)
4531 dcosg(k)=rmij*(dc_norm(k,j)-erij(k)*cosg)
4534 gggp(k)=ecosbp*dcosb(k)+ecosgp*dcosg(k)
4535 gggm(k)=ecosbm*dcosb(k)+ecosgm*dcosg(k)
4537 gggp(1)=gggp(1)+ees0pijp*xj
4538 gggp(2)=gggp(2)+ees0pijp*yj
4539 gggp(3)=gggp(3)+ees0pijp*zj
4540 gggm(1)=gggm(1)+ees0mijp*xj
4541 gggm(2)=gggm(2)+ees0mijp*yj
4542 gggm(3)=gggm(3)+ees0mijp*zj
4543 C Derivatives due to the contact function
4544 gacont_hbr(1,num_conti,i)=fprimcont*xj
4545 gacont_hbr(2,num_conti,i)=fprimcont*yj
4546 gacont_hbr(3,num_conti,i)=fprimcont*zj
4549 c 10/24/08 cgrad and ! comments indicate the parts of the code removed
4550 c following the change of gradient-summation algorithm.
4552 cgrad ghalfp=0.5D0*gggp(k)
4553 cgrad ghalfm=0.5D0*gggm(k)
4554 gacontp_hb1(k,num_conti,i)=!ghalfp
4555 & +(ecosap*(dc_norm(k,j)-cosa*dc_norm(k,i))
4556 & + ecosbp*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1)
4557 & *fac_shield(i)*fac_shield(j)
4559 gacontp_hb2(k,num_conti,i)=!ghalfp
4560 & +(ecosap*(dc_norm(k,i)-cosa*dc_norm(k,j))
4561 & + ecosgp*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1)
4562 & *fac_shield(i)*fac_shield(j)
4564 gacontp_hb3(k,num_conti,i)=gggp(k)
4565 & *fac_shield(i)*fac_shield(j)
4567 gacontm_hb1(k,num_conti,i)=!ghalfm
4568 & +(ecosam*(dc_norm(k,j)-cosa*dc_norm(k,i))
4569 & + ecosbm*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1)
4570 & *fac_shield(i)*fac_shield(j)
4572 gacontm_hb2(k,num_conti,i)=!ghalfm
4573 & +(ecosam*(dc_norm(k,i)-cosa*dc_norm(k,j))
4574 & + ecosgm*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1)
4575 & *fac_shield(i)*fac_shield(j)
4577 gacontm_hb3(k,num_conti,i)=gggm(k)
4578 & *fac_shield(i)*fac_shield(j)
4581 C Diagnostics. Comment out or remove after debugging!
4583 cdiag gacontp_hb1(k,num_conti,i)=0.0D0
4584 cdiag gacontp_hb2(k,num_conti,i)=0.0D0
4585 cdiag gacontp_hb3(k,num_conti,i)=0.0D0
4586 cdiag gacontm_hb1(k,num_conti,i)=0.0D0
4587 cdiag gacontm_hb2(k,num_conti,i)=0.0D0
4588 cdiag gacontm_hb3(k,num_conti,i)=0.0D0
4591 endif ! num_conti.le.maxconts
4594 if (wturn3.gt.0.0d0 .or. wturn4.gt.0.0d0) then
4597 ghalf=0.5d0*agg(l,k)
4598 aggi(l,k)=aggi(l,k)+ghalf
4599 aggi1(l,k)=aggi1(l,k)+agg(l,k)
4600 aggj(l,k)=aggj(l,k)+ghalf
4603 if (j.eq.nres-1 .and. i.lt.j-2) then
4606 aggj1(l,k)=aggj1(l,k)+agg(l,k)
4611 c t_eelecij=t_eelecij+MPI_Wtime()-time00
4614 C-----------------------------------------------------------------------------
4615 subroutine eturn3(i,eello_turn3)
4616 C Third- and fourth-order contributions from turns
4617 implicit real*8 (a-h,o-z)
4618 include 'DIMENSIONS'
4619 include 'COMMON.IOUNITS'
4620 include 'COMMON.GEO'
4621 include 'COMMON.VAR'
4622 include 'COMMON.LOCAL'
4623 include 'COMMON.CHAIN'
4624 include 'COMMON.DERIV'
4625 include 'COMMON.INTERACT'
4626 include 'COMMON.CONTACTS'
4627 include 'COMMON.TORSION'
4628 include 'COMMON.VECTORS'
4629 include 'COMMON.FFIELD'
4630 include 'COMMON.CONTROL'
4631 include 'COMMON.SHIELD'
4633 double precision auxmat(2,2),auxmat1(2,2),auxmat2(2,2),pizda(2,2),
4634 & e1t(2,2),e2t(2,2),e3t(2,2),e1tder(2,2),e2tder(2,2),e3tder(2,2),
4635 & e1a(2,2),ae3(2,2),ae3e2(2,2),auxvec(2),auxvec1(2),gpizda1(2,2),
4636 & gpizda2(2,2),auxgmat1(2,2),auxgmatt1(2,2),
4637 & auxgmat2(2,2),auxgmatt2(2,2)
4638 double precision agg(3,4),aggi(3,4),aggi1(3,4),
4639 & aggj(3,4),aggj1(3,4),a_temp(2,2),auxmat3(2,2)
4640 common /locel/ a_temp,agg,aggi,aggi1,aggj,aggj1,a22,a23,a32,a33,
4641 & dxi,dyi,dzi,dx_normi,dy_normi,dz_normi,xmedi,ymedi,zmedi,
4644 c write (iout,*) "eturn3",i,j,j1,j2
4649 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
4651 C Third-order contributions
4658 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
4659 cd call checkint_turn3(i,a_temp,eello_turn3_num)
4660 call matmat2(EUg(1,1,i+1),EUg(1,1,i+2),auxmat(1,1))
4661 c auxalary matices for theta gradient
4662 c auxalary matrix for i+1 and constant i+2
4663 call matmat2(gtEUg(1,1,i+1),EUg(1,1,i+2),auxgmat1(1,1))
4664 c auxalary matrix for i+2 and constant i+1
4665 call matmat2(EUg(1,1,i+1),gtEUg(1,1,i+2),auxgmat2(1,1))
4666 call transpose2(auxmat(1,1),auxmat1(1,1))
4667 call transpose2(auxgmat1(1,1),auxgmatt1(1,1))
4668 call transpose2(auxgmat2(1,1),auxgmatt2(1,1))
4669 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
4670 call matmat2(a_temp(1,1),auxgmatt1(1,1),gpizda1(1,1))
4671 call matmat2(a_temp(1,1),auxgmatt2(1,1),gpizda2(1,1))
4672 if (shield_mode.eq.0) then
4679 eello_turn3=eello_turn3+0.5d0*(pizda(1,1)+pizda(2,2))
4680 & *fac_shield(i)*fac_shield(j)
4681 eello_t3=0.5d0*(pizda(1,1)+pizda(2,2))
4682 & *fac_shield(i)*fac_shield(j)
4683 C Derivatives in theta
4684 gloc(nphi+i,icg)=gloc(nphi+i,icg)
4685 & +0.5d0*(gpizda1(1,1)+gpizda1(2,2))*wturn3
4686 & *fac_shield(i)*fac_shield(j)
4687 gloc(nphi+i+1,icg)=gloc(nphi+i+1,icg)
4688 & +0.5d0*(gpizda2(1,1)+gpizda2(2,2))*wturn3
4689 & *fac_shield(i)*fac_shield(j)
4692 C if (energy_dec) write (iout,'(a6,2i5,0pf7.3)')
4693 C Derivatives in shield mode
4694 if ((fac_shield(i).gt.0).and.(fac_shield(j).gt.0).and.
4695 & (shield_mode.gt.0)) then
4698 do ilist=1,ishield_list(i)
4699 iresshield=shield_list(ilist,i)
4701 rlocshield=grad_shield_side(k,ilist,i)*eello_t3/fac_shield(i)
4703 gshieldx_t3(k,iresshield)=gshieldx_t3(k,iresshield)+
4705 & +grad_shield_loc(k,ilist,i)*eello_t3/fac_shield(i)
4706 gshieldc_t3(k,iresshield-1)=gshieldc_t3(k,iresshield-1)
4710 do ilist=1,ishield_list(j)
4711 iresshield=shield_list(ilist,j)
4713 rlocshield=grad_shield_side(k,ilist,j)*eello_t3/fac_shield(j)
4715 gshieldx_t3(k,iresshield)=gshieldx_t3(k,iresshield)+
4717 & +grad_shield_loc(k,ilist,j)*eello_t3/fac_shield(j)
4718 gshieldc_t3(k,iresshield-1)=gshieldc_t3(k,iresshield-1)
4725 gshieldc_t3(k,i)=gshieldc_t3(k,i)+
4726 & grad_shield(k,i)*eello_t3/fac_shield(i)
4727 gshieldc_t3(k,j)=gshieldc_t3(k,j)+
4728 & grad_shield(k,j)*eello_t3/fac_shield(j)
4729 gshieldc_t3(k,i-1)=gshieldc_t3(k,i-1)+
4730 & grad_shield(k,i)*eello_t3/fac_shield(i)
4731 gshieldc_t3(k,j-1)=gshieldc_t3(k,j-1)+
4732 & grad_shield(k,j)*eello_t3/fac_shield(j)
4736 C if (energy_dec) write (iout,'(a6,2i5,0pf7.3)')
4737 cd write (2,*) 'i,',i,' j',j,'eello_turn3',
4738 cd & 0.5d0*(pizda(1,1)+pizda(2,2)),
4739 cd & ' eello_turn3_num',4*eello_turn3_num
4740 C Derivatives in gamma(i)
4741 call matmat2(EUgder(1,1,i+1),EUg(1,1,i+2),auxmat2(1,1))
4742 call transpose2(auxmat2(1,1),auxmat3(1,1))
4743 call matmat2(a_temp(1,1),auxmat3(1,1),pizda(1,1))
4744 gel_loc_turn3(i)=gel_loc_turn3(i)+0.5d0*(pizda(1,1)+pizda(2,2))
4745 & *fac_shield(i)*fac_shield(j)
4746 C Derivatives in gamma(i+1)
4747 call matmat2(EUg(1,1,i+1),EUgder(1,1,i+2),auxmat2(1,1))
4748 call transpose2(auxmat2(1,1),auxmat3(1,1))
4749 call matmat2(a_temp(1,1),auxmat3(1,1),pizda(1,1))
4750 gel_loc_turn3(i+1)=gel_loc_turn3(i+1)
4751 & +0.5d0*(pizda(1,1)+pizda(2,2))
4752 & *fac_shield(i)*fac_shield(j)
4753 C Cartesian derivatives
4755 c ghalf1=0.5d0*agg(l,1)
4756 c ghalf2=0.5d0*agg(l,2)
4757 c ghalf3=0.5d0*agg(l,3)
4758 c ghalf4=0.5d0*agg(l,4)
4759 a_temp(1,1)=aggi(l,1)!+ghalf1
4760 a_temp(1,2)=aggi(l,2)!+ghalf2
4761 a_temp(2,1)=aggi(l,3)!+ghalf3
4762 a_temp(2,2)=aggi(l,4)!+ghalf4
4763 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
4764 gcorr3_turn(l,i)=gcorr3_turn(l,i)
4765 & +0.5d0*(pizda(1,1)+pizda(2,2))
4766 & *fac_shield(i)*fac_shield(j)
4768 a_temp(1,1)=aggi1(l,1)!+agg(l,1)
4769 a_temp(1,2)=aggi1(l,2)!+agg(l,2)
4770 a_temp(2,1)=aggi1(l,3)!+agg(l,3)
4771 a_temp(2,2)=aggi1(l,4)!+agg(l,4)
4772 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
4773 gcorr3_turn(l,i+1)=gcorr3_turn(l,i+1)
4774 & +0.5d0*(pizda(1,1)+pizda(2,2))
4775 & *fac_shield(i)*fac_shield(j)
4776 a_temp(1,1)=aggj(l,1)!+ghalf1
4777 a_temp(1,2)=aggj(l,2)!+ghalf2
4778 a_temp(2,1)=aggj(l,3)!+ghalf3
4779 a_temp(2,2)=aggj(l,4)!+ghalf4
4780 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
4781 gcorr3_turn(l,j)=gcorr3_turn(l,j)
4782 & +0.5d0*(pizda(1,1)+pizda(2,2))
4783 & *fac_shield(i)*fac_shield(j)
4784 a_temp(1,1)=aggj1(l,1)
4785 a_temp(1,2)=aggj1(l,2)
4786 a_temp(2,1)=aggj1(l,3)
4787 a_temp(2,2)=aggj1(l,4)
4788 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
4789 gcorr3_turn(l,j1)=gcorr3_turn(l,j1)
4790 & +0.5d0*(pizda(1,1)+pizda(2,2))
4791 & *fac_shield(i)*fac_shield(j)
4795 C-------------------------------------------------------------------------------
4796 subroutine eturn4(i,eello_turn4)
4797 C Third- and fourth-order contributions from turns
4798 implicit real*8 (a-h,o-z)
4799 include 'DIMENSIONS'
4800 include 'COMMON.IOUNITS'
4801 include 'COMMON.GEO'
4802 include 'COMMON.VAR'
4803 include 'COMMON.LOCAL'
4804 include 'COMMON.CHAIN'
4805 include 'COMMON.DERIV'
4806 include 'COMMON.INTERACT'
4807 include 'COMMON.CONTACTS'
4808 include 'COMMON.TORSION'
4809 include 'COMMON.VECTORS'
4810 include 'COMMON.FFIELD'
4811 include 'COMMON.CONTROL'
4812 include 'COMMON.SHIELD'
4814 double precision auxmat(2,2),auxmat1(2,2),auxmat2(2,2),pizda(2,2),
4815 & e1t(2,2),e2t(2,2),e3t(2,2),e1tder(2,2),e2tder(2,2),e3tder(2,2),
4816 & e1a(2,2),ae3(2,2),ae3e2(2,2),auxvec(2),auxvec1(2),auxgvec(2),
4817 & auxgEvec1(2),auxgEvec2(2),auxgEvec3(2),
4818 & gte1t(2,2),gte2t(2,2),gte3t(2,2),
4819 & gte1a(2,2),gtae3(2,2),gtae3e2(2,2), ae3gte2(2,2),
4820 & gtEpizda1(2,2),gtEpizda2(2,2),gtEpizda3(2,2)
4821 double precision agg(3,4),aggi(3,4),aggi1(3,4),
4822 & aggj(3,4),aggj1(3,4),a_temp(2,2),auxmat3(2,2)
4823 common /locel/ a_temp,agg,aggi,aggi1,aggj,aggj1,a22,a23,a32,a33,
4824 & dxi,dyi,dzi,dx_normi,dy_normi,dz_normi,xmedi,ymedi,zmedi,
4827 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
4829 C Fourth-order contributions
4837 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
4838 cd call checkint_turn4(i,a_temp,eello_turn4_num)
4839 c write (iout,*) "eturn4 i",i," j",j," j1",j1," j2",j2
4840 c write(iout,*)"WCHODZE W PROGRAM"
4845 iti1=itype2loc(itype(i+1))
4846 iti2=itype2loc(itype(i+2))
4847 iti3=itype2loc(itype(i+3))
4848 c write(iout,*) "iti1",iti1," iti2",iti2," iti3",iti3
4849 call transpose2(EUg(1,1,i+1),e1t(1,1))
4850 call transpose2(Eug(1,1,i+2),e2t(1,1))
4851 call transpose2(Eug(1,1,i+3),e3t(1,1))
4852 C Ematrix derivative in theta
4853 call transpose2(gtEUg(1,1,i+1),gte1t(1,1))
4854 call transpose2(gtEug(1,1,i+2),gte2t(1,1))
4855 call transpose2(gtEug(1,1,i+3),gte3t(1,1))
4856 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
4857 c eta1 in derivative theta
4858 call matmat2(gte1t(1,1),a_temp(1,1),gte1a(1,1))
4859 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
4860 c auxgvec is derivative of Ub2 so i+3 theta
4861 call matvec2(e1a(1,1),gUb2(1,i+3),auxgvec(1))
4862 c auxalary matrix of E i+1
4863 call matvec2(gte1a(1,1),Ub2(1,i+3),auxgEvec1(1))
4866 s1=scalar2(b1(1,i+2),auxvec(1))
4867 c derivative of theta i+2 with constant i+3
4868 gs23=scalar2(gtb1(1,i+2),auxvec(1))
4869 c derivative of theta i+2 with constant i+2
4870 gs32=scalar2(b1(1,i+2),auxgvec(1))
4871 c derivative of E matix in theta of i+1
4872 gsE13=scalar2(b1(1,i+2),auxgEvec1(1))
4874 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
4875 c ea31 in derivative theta
4876 call matmat2(a_temp(1,1),gte3t(1,1),gtae3(1,1))
4877 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
4878 c auxilary matrix auxgvec of Ub2 with constant E matirx
4879 call matvec2(ae3(1,1),gUb2(1,i+2),auxgvec(1))
4880 c auxilary matrix auxgEvec1 of E matix with Ub2 constant
4881 call matvec2(gtae3(1,1),Ub2(1,i+2),auxgEvec3(1))
4885 s2=scalar2(b1(1,i+1),auxvec(1))
4886 c derivative of theta i+1 with constant i+3
4887 gs13=scalar2(gtb1(1,i+1),auxvec(1))
4888 c derivative of theta i+2 with constant i+1
4889 gs21=scalar2(b1(1,i+1),auxgvec(1))
4890 c derivative of theta i+3 with constant i+1
4891 gsE31=scalar2(b1(1,i+1),auxgEvec3(1))
4892 c write(iout,*) gs1,gs2,'i=',i,auxgvec(1),gUb2(1,i+2),gtb1(1,i+2),
4894 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
4895 c two derivatives over diffetent matrices
4896 c gtae3e2 is derivative over i+3
4897 call matmat2(gtae3(1,1),e2t(1,1),gtae3e2(1,1))
4898 c ae3gte2 is derivative over i+2
4899 call matmat2(ae3(1,1),gte2t(1,1),ae3gte2(1,1))
4900 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
4901 c three possible derivative over theta E matices
4903 call matmat2(ae3e2(1,1),gte1t(1,1),gtEpizda1(1,1))
4905 call matmat2(ae3gte2(1,1),e1t(1,1),gtEpizda2(1,1))
4907 call matmat2(gtae3e2(1,1),e1t(1,1),gtEpizda3(1,1))
4908 s3=0.5d0*(pizda(1,1)+pizda(2,2))
4910 gsEE1=0.5d0*(gtEpizda1(1,1)+gtEpizda1(2,2))
4911 gsEE2=0.5d0*(gtEpizda2(1,1)+gtEpizda2(2,2))
4912 gsEE3=0.5d0*(gtEpizda3(1,1)+gtEpizda3(2,2))
4913 if (shield_mode.eq.0) then
4920 eello_turn4=eello_turn4-(s1+s2+s3)
4921 & *fac_shield(i)*fac_shield(j)
4922 eello_t4=-(s1+s2+s3)
4923 & *fac_shield(i)*fac_shield(j)
4924 c write(iout,*)'chujOWO', auxvec(1),b1(1,iti2)
4925 if (energy_dec) write (iout,'(a6,2i5,0pf7.3,3f7.3)')
4926 & 'eturn4',i,j,-(s1+s2+s3),s1,s2,s3
4927 C Now derivative over shield:
4928 if ((fac_shield(i).gt.0).and.(fac_shield(j).gt.0).and.
4929 & (shield_mode.gt.0)) then
4932 do ilist=1,ishield_list(i)
4933 iresshield=shield_list(ilist,i)
4935 rlocshield=grad_shield_side(k,ilist,i)*eello_t4/fac_shield(i)
4937 gshieldx_t4(k,iresshield)=gshieldx_t4(k,iresshield)+
4939 & +grad_shield_loc(k,ilist,i)*eello_t4/fac_shield(i)
4940 gshieldc_t4(k,iresshield-1)=gshieldc_t4(k,iresshield-1)
4944 do ilist=1,ishield_list(j)
4945 iresshield=shield_list(ilist,j)
4947 rlocshield=grad_shield_side(k,ilist,j)*eello_t4/fac_shield(j)
4949 gshieldx_t4(k,iresshield)=gshieldx_t4(k,iresshield)+
4951 & +grad_shield_loc(k,ilist,j)*eello_t4/fac_shield(j)
4952 gshieldc_t4(k,iresshield-1)=gshieldc_t4(k,iresshield-1)
4959 gshieldc_t4(k,i)=gshieldc_t4(k,i)+
4960 & grad_shield(k,i)*eello_t4/fac_shield(i)
4961 gshieldc_t4(k,j)=gshieldc_t4(k,j)+
4962 & grad_shield(k,j)*eello_t4/fac_shield(j)
4963 gshieldc_t4(k,i-1)=gshieldc_t4(k,i-1)+
4964 & grad_shield(k,i)*eello_t4/fac_shield(i)
4965 gshieldc_t4(k,j-1)=gshieldc_t4(k,j-1)+
4966 & grad_shield(k,j)*eello_t4/fac_shield(j)
4975 cd write (2,*) 'i,',i,' j',j,'eello_turn4',-(s1+s2+s3),
4976 cd & ' eello_turn4_num',8*eello_turn4_num
4978 gloc(nphi+i,icg)=gloc(nphi+i,icg)
4979 & -(gs13+gsE13+gsEE1)*wturn4
4980 & *fac_shield(i)*fac_shield(j)
4981 gloc(nphi+i+1,icg)= gloc(nphi+i+1,icg)
4982 & -(gs23+gs21+gsEE2)*wturn4
4983 & *fac_shield(i)*fac_shield(j)
4985 gloc(nphi+i+2,icg)= gloc(nphi+i+2,icg)
4986 & -(gs32+gsE31+gsEE3)*wturn4
4987 & *fac_shield(i)*fac_shield(j)
4989 c gloc(nphi+i+1,icg)=gloc(nphi+i+1,icg)-
4992 if (energy_dec) write (iout,'(a6,2i5,0pf7.3)')
4993 & 'eturn4',i,j,-(s1+s2+s3)
4994 c write (iout,*) 'i,',i,' j',j,'eello_turn4',-(s1+s2+s3),
4995 c & ' eello_turn4_num',8*eello_turn4_num
4996 C Derivatives in gamma(i)
4997 call transpose2(EUgder(1,1,i+1),e1tder(1,1))
4998 call matmat2(e1tder(1,1),a_temp(1,1),auxmat(1,1))
4999 call matvec2(auxmat(1,1),Ub2(1,i+3),auxvec(1))
5000 s1=scalar2(b1(1,i+2),auxvec(1))
5001 call matmat2(ae3e2(1,1),e1tder(1,1),pizda(1,1))
5002 s3=0.5d0*(pizda(1,1)+pizda(2,2))
5003 gel_loc_turn4(i)=gel_loc_turn4(i)-(s1+s3)
5004 & *fac_shield(i)*fac_shield(j)
5005 C Derivatives in gamma(i+1)
5006 call transpose2(EUgder(1,1,i+2),e2tder(1,1))
5007 call matvec2(ae3(1,1),Ub2der(1,i+2),auxvec(1))
5008 s2=scalar2(b1(1,i+1),auxvec(1))
5009 call matmat2(ae3(1,1),e2tder(1,1),auxmat(1,1))
5010 call matmat2(auxmat(1,1),e1t(1,1),pizda(1,1))
5011 s3=0.5d0*(pizda(1,1)+pizda(2,2))
5012 gel_loc_turn4(i+1)=gel_loc_turn4(i+1)-(s2+s3)
5013 & *fac_shield(i)*fac_shield(j)
5014 C Derivatives in gamma(i+2)
5015 call transpose2(EUgder(1,1,i+3),e3tder(1,1))
5016 call matvec2(e1a(1,1),Ub2der(1,i+3),auxvec(1))
5017 s1=scalar2(b1(1,i+2),auxvec(1))
5018 call matmat2(a_temp(1,1),e3tder(1,1),auxmat(1,1))
5019 call matvec2(auxmat(1,1),Ub2(1,i+2),auxvec(1))
5020 s2=scalar2(b1(1,i+1),auxvec(1))
5021 call matmat2(auxmat(1,1),e2t(1,1),auxmat3(1,1))
5022 call matmat2(auxmat3(1,1),e1t(1,1),pizda(1,1))
5023 s3=0.5d0*(pizda(1,1)+pizda(2,2))
5024 gel_loc_turn4(i+2)=gel_loc_turn4(i+2)-(s1+s2+s3)
5025 & *fac_shield(i)*fac_shield(j)
5026 C Cartesian derivatives
5027 C Derivatives of this turn contributions in DC(i+2)
5028 if (j.lt.nres-1) then
5030 a_temp(1,1)=agg(l,1)
5031 a_temp(1,2)=agg(l,2)
5032 a_temp(2,1)=agg(l,3)
5033 a_temp(2,2)=agg(l,4)
5034 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
5035 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
5036 s1=scalar2(b1(1,i+2),auxvec(1))
5037 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
5038 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
5039 s2=scalar2(b1(1,i+1),auxvec(1))
5040 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
5041 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
5042 s3=0.5d0*(pizda(1,1)+pizda(2,2))
5044 gcorr4_turn(l,i+2)=gcorr4_turn(l,i+2)-(s1+s2+s3)
5045 & *fac_shield(i)*fac_shield(j)
5048 C Remaining derivatives of this turn contribution
5050 a_temp(1,1)=aggi(l,1)
5051 a_temp(1,2)=aggi(l,2)
5052 a_temp(2,1)=aggi(l,3)
5053 a_temp(2,2)=aggi(l,4)
5054 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
5055 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
5056 s1=scalar2(b1(1,i+2),auxvec(1))
5057 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
5058 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
5059 s2=scalar2(b1(1,i+1),auxvec(1))
5060 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
5061 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
5062 s3=0.5d0*(pizda(1,1)+pizda(2,2))
5063 gcorr4_turn(l,i)=gcorr4_turn(l,i)-(s1+s2+s3)
5064 & *fac_shield(i)*fac_shield(j)
5065 a_temp(1,1)=aggi1(l,1)
5066 a_temp(1,2)=aggi1(l,2)
5067 a_temp(2,1)=aggi1(l,3)
5068 a_temp(2,2)=aggi1(l,4)
5069 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
5070 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
5071 s1=scalar2(b1(1,i+2),auxvec(1))
5072 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
5073 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
5074 s2=scalar2(b1(1,i+1),auxvec(1))
5075 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
5076 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
5077 s3=0.5d0*(pizda(1,1)+pizda(2,2))
5078 gcorr4_turn(l,i+1)=gcorr4_turn(l,i+1)-(s1+s2+s3)
5079 & *fac_shield(i)*fac_shield(j)
5080 a_temp(1,1)=aggj(l,1)
5081 a_temp(1,2)=aggj(l,2)
5082 a_temp(2,1)=aggj(l,3)
5083 a_temp(2,2)=aggj(l,4)
5084 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
5085 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
5086 s1=scalar2(b1(1,i+2),auxvec(1))
5087 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
5088 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
5089 s2=scalar2(b1(1,i+1),auxvec(1))
5090 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
5091 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
5092 s3=0.5d0*(pizda(1,1)+pizda(2,2))
5093 gcorr4_turn(l,j)=gcorr4_turn(l,j)-(s1+s2+s3)
5094 & *fac_shield(i)*fac_shield(j)
5095 a_temp(1,1)=aggj1(l,1)
5096 a_temp(1,2)=aggj1(l,2)
5097 a_temp(2,1)=aggj1(l,3)
5098 a_temp(2,2)=aggj1(l,4)
5099 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
5100 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
5101 s1=scalar2(b1(1,i+2),auxvec(1))
5102 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
5103 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
5104 s2=scalar2(b1(1,i+1),auxvec(1))
5105 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
5106 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
5107 s3=0.5d0*(pizda(1,1)+pizda(2,2))
5108 c write (iout,*) "s1",s1," s2",s2," s3",s3," s1+s2+s3",s1+s2+s3
5109 gcorr4_turn(l,j1)=gcorr4_turn(l,j1)-(s1+s2+s3)
5110 & *fac_shield(i)*fac_shield(j)
5114 C-----------------------------------------------------------------------------
5115 subroutine vecpr(u,v,w)
5116 implicit real*8(a-h,o-z)
5117 dimension u(3),v(3),w(3)
5118 w(1)=u(2)*v(3)-u(3)*v(2)
5119 w(2)=-u(1)*v(3)+u(3)*v(1)
5120 w(3)=u(1)*v(2)-u(2)*v(1)
5123 C-----------------------------------------------------------------------------
5124 subroutine unormderiv(u,ugrad,unorm,ungrad)
5125 C This subroutine computes the derivatives of a normalized vector u, given
5126 C the derivatives computed without normalization conditions, ugrad. Returns
5129 double precision u(3),ugrad(3,3),unorm,ungrad(3,3)
5130 double precision vec(3)
5131 double precision scalar
5133 c write (2,*) 'ugrad',ugrad
5136 vec(i)=scalar(ugrad(1,i),u(1))
5138 c write (2,*) 'vec',vec
5141 ungrad(j,i)=(ugrad(j,i)-u(j)*vec(i))*unorm
5144 c write (2,*) 'ungrad',ungrad
5147 C-----------------------------------------------------------------------------
5148 subroutine escp_soft_sphere(evdw2,evdw2_14)
5150 C This subroutine calculates the excluded-volume interaction energy between
5151 C peptide-group centers and side chains and its gradient in virtual-bond and
5152 C side-chain vectors.
5154 implicit real*8 (a-h,o-z)
5155 include 'DIMENSIONS'
5156 include 'COMMON.GEO'
5157 include 'COMMON.VAR'
5158 include 'COMMON.LOCAL'
5159 include 'COMMON.CHAIN'
5160 include 'COMMON.DERIV'
5161 include 'COMMON.INTERACT'
5162 include 'COMMON.FFIELD'
5163 include 'COMMON.IOUNITS'
5164 include 'COMMON.CONTROL'
5169 cd print '(a)','Enter ESCP'
5170 cd write (iout,*) 'iatscp_s=',iatscp_s,' iatscp_e=',iatscp_e
5174 do i=iatscp_s,iatscp_e
5175 if (itype(i).eq.ntyp1 .or. itype(i+1).eq.ntyp1) cycle
5177 xi=0.5D0*(c(1,i)+c(1,i+1))
5178 yi=0.5D0*(c(2,i)+c(2,i+1))
5179 zi=0.5D0*(c(3,i)+c(3,i+1))
5180 C Return atom into box, boxxsize is size of box in x dimension
5182 c if (xi.gt.((xshift+0.5d0)*boxxsize)) xi=xi-boxxsize
5183 c if (xi.lt.((xshift-0.5d0)*boxxsize)) xi=xi+boxxsize
5184 C Condition for being inside the proper box
5185 c if ((xi.gt.((xshift+0.5d0)*boxxsize)).or.
5186 c & (xi.lt.((xshift-0.5d0)*boxxsize))) then
5190 c if (yi.gt.((yshift+0.5d0)*boxysize)) yi=yi-boxysize
5191 c if (yi.lt.((yshift-0.5d0)*boxysize)) yi=yi+boxysize
5192 C Condition for being inside the proper box
5193 c if ((yi.gt.((yshift+0.5d0)*boxysize)).or.
5194 c & (yi.lt.((yshift-0.5d0)*boxysize))) then
5198 c if (zi.gt.((zshift+0.5d0)*boxzsize)) zi=zi-boxzsize
5199 c if (zi.lt.((zshift-0.5d0)*boxzsize)) zi=zi+boxzsize
5200 cC Condition for being inside the proper box
5201 c if ((zi.gt.((zshift+0.5d0)*boxzsize)).or.
5202 c & (zi.lt.((zshift-0.5d0)*boxzsize))) then
5206 if (xi.lt.0) xi=xi+boxxsize
5208 if (yi.lt.0) yi=yi+boxysize
5210 if (zi.lt.0) zi=zi+boxzsize
5211 C xi=xi+xshift*boxxsize
5212 C yi=yi+yshift*boxysize
5213 C zi=zi+zshift*boxzsize
5214 do iint=1,nscp_gr(i)
5216 do j=iscpstart(i,iint),iscpend(i,iint)
5217 if (itype(j).eq.ntyp1) cycle
5218 itypj=iabs(itype(j))
5219 C Uncomment following three lines for SC-p interactions
5223 C Uncomment following three lines for Ca-p interactions
5228 c if (xj.gt.((0.5d0)*boxxsize)) xj=xj-boxxsize
5229 c if (xj.lt.((-0.5d0)*boxxsize)) xj=xj+boxxsize
5230 C Condition for being inside the proper box
5231 c if ((xj.gt.((0.5d0)*boxxsize)).or.
5232 c & (xj.lt.((-0.5d0)*boxxsize))) then
5236 c if (yj.gt.((0.5d0)*boxysize)) yj=yj-boxysize
5237 c if (yj.lt.((-0.5d0)*boxysize)) yj=yj+boxysize
5238 cC Condition for being inside the proper box
5239 c if ((yj.gt.((0.5d0)*boxysize)).or.
5240 c & (yj.lt.((-0.5d0)*boxysize))) then
5244 c if (zj.gt.((0.5d0)*boxzsize)) zj=zj-boxzsize
5245 c if (zj.lt.((-0.5d0)*boxzsize)) zj=zj+boxzsize
5246 C Condition for being inside the proper box
5247 c if ((zj.gt.((0.5d0)*boxzsize)).or.
5248 c & (zj.lt.((-0.5d0)*boxzsize))) then
5251 if (xj.lt.0) xj=xj+boxxsize
5253 if (yj.lt.0) yj=yj+boxysize
5255 if (zj.lt.0) zj=zj+boxzsize
5256 dist_init=(xj-xi)**2+(yj-yi)**2+(zj-zi)**2
5264 xj=xj_safe+xshift*boxxsize
5265 yj=yj_safe+yshift*boxysize
5266 zj=zj_safe+zshift*boxzsize
5267 dist_temp=(xj-xi)**2+(yj-yi)**2+(zj-zi)**2
5268 if(dist_temp.lt.dist_init) then
5278 if (subchap.eq.1) then
5291 rij=xj*xj+yj*yj+zj*zj
5295 if (rij.lt.r0ijsq) then
5296 evdwij=0.25d0*(rij-r0ijsq)**2
5304 C Calculate contributions to the gradient in the virtual-bond and SC vectors.
5309 cgrad if (j.lt.i) then
5310 cd write (iout,*) 'j<i'
5311 C Uncomment following three lines for SC-p interactions
5313 c gradx_scp(k,j)=gradx_scp(k,j)+ggg(k)
5316 cd write (iout,*) 'j>i'
5318 cgrad ggg(k)=-ggg(k)
5319 C Uncomment following line for SC-p interactions
5320 c gradx_scp(k,j)=gradx_scp(k,j)-ggg(k)
5324 cgrad gvdwc_scp(k,i)=gvdwc_scp(k,i)-0.5D0*ggg(k)
5326 cgrad kstart=min0(i+1,j)
5327 cgrad kend=max0(i-1,j-1)
5328 cd write (iout,*) 'i=',i,' j=',j,' kstart=',kstart,' kend=',kend
5329 cd write (iout,*) ggg(1),ggg(2),ggg(3)
5330 cgrad do k=kstart,kend
5332 cgrad gvdwc_scp(l,k)=gvdwc_scp(l,k)-ggg(l)
5336 gvdwc_scpp(k,i)=gvdwc_scpp(k,i)-ggg(k)
5337 gvdwc_scp(k,j)=gvdwc_scp(k,j)+ggg(k)
5348 C-----------------------------------------------------------------------------
5349 subroutine escp(evdw2,evdw2_14)
5351 C This subroutine calculates the excluded-volume interaction energy between
5352 C peptide-group centers and side chains and its gradient in virtual-bond and
5353 C side-chain vectors.
5355 implicit real*8 (a-h,o-z)
5356 include 'DIMENSIONS'
5357 include 'COMMON.GEO'
5358 include 'COMMON.VAR'
5359 include 'COMMON.LOCAL'
5360 include 'COMMON.CHAIN'
5361 include 'COMMON.DERIV'
5362 include 'COMMON.INTERACT'
5363 include 'COMMON.FFIELD'
5364 include 'COMMON.IOUNITS'
5365 include 'COMMON.CONTROL'
5366 include 'COMMON.SPLITELE'
5370 c print *,boxxsize,boxysize,boxzsize,'wymiary pudla'
5371 cd print '(a)','Enter ESCP'
5372 cd write (iout,*) 'iatscp_s=',iatscp_s,' iatscp_e=',iatscp_e
5376 do i=iatscp_s,iatscp_e
5377 if (itype(i).eq.ntyp1 .or. itype(i+1).eq.ntyp1) cycle
5379 xi=0.5D0*(c(1,i)+c(1,i+1))
5380 yi=0.5D0*(c(2,i)+c(2,i+1))
5381 zi=0.5D0*(c(3,i)+c(3,i+1))
5383 if (xi.lt.0) xi=xi+boxxsize
5385 if (yi.lt.0) yi=yi+boxysize
5387 if (zi.lt.0) zi=zi+boxzsize
5388 c xi=xi+xshift*boxxsize
5389 c yi=yi+yshift*boxysize
5390 c zi=zi+zshift*boxzsize
5391 c print *,xi,yi,zi,'polozenie i'
5392 C Return atom into box, boxxsize is size of box in x dimension
5394 c if (xi.gt.((xshift+0.5d0)*boxxsize)) xi=xi-boxxsize
5395 c if (xi.lt.((xshift-0.5d0)*boxxsize)) xi=xi+boxxsize
5396 C Condition for being inside the proper box
5397 c if ((xi.gt.((xshift+0.5d0)*boxxsize)).or.
5398 c & (xi.lt.((xshift-0.5d0)*boxxsize))) then
5402 c print *,xi,boxxsize,"pierwszy"
5404 c if (yi.gt.((yshift+0.5d0)*boxysize)) yi=yi-boxysize
5405 c if (yi.lt.((yshift-0.5d0)*boxysize)) yi=yi+boxysize
5406 C Condition for being inside the proper box
5407 c if ((yi.gt.((yshift+0.5d0)*boxysize)).or.
5408 c & (yi.lt.((yshift-0.5d0)*boxysize))) then
5412 c if (zi.gt.((zshift+0.5d0)*boxzsize)) zi=zi-boxzsize
5413 c if (zi.lt.((zshift-0.5d0)*boxzsize)) zi=zi+boxzsize
5414 C Condition for being inside the proper box
5415 c if ((zi.gt.((zshift+0.5d0)*boxzsize)).or.
5416 c & (zi.lt.((zshift-0.5d0)*boxzsize))) then
5419 do iint=1,nscp_gr(i)
5421 do j=iscpstart(i,iint),iscpend(i,iint)
5422 itypj=iabs(itype(j))
5423 if (itypj.eq.ntyp1) cycle
5424 C Uncomment following three lines for SC-p interactions
5428 C Uncomment following three lines for Ca-p interactions
5433 if (xj.lt.0) xj=xj+boxxsize
5435 if (yj.lt.0) yj=yj+boxysize
5437 if (zj.lt.0) zj=zj+boxzsize
5439 c if (xj.gt.((0.5d0)*boxxsize)) xj=xj-boxxsize
5440 c if (xj.lt.((-0.5d0)*boxxsize)) xj=xj+boxxsize
5441 C Condition for being inside the proper box
5442 c if ((xj.gt.((0.5d0)*boxxsize)).or.
5443 c & (xj.lt.((-0.5d0)*boxxsize))) then
5447 c if (yj.gt.((0.5d0)*boxysize)) yj=yj-boxysize
5448 c if (yj.lt.((-0.5d0)*boxysize)) yj=yj+boxysize
5449 cC Condition for being inside the proper box
5450 c if ((yj.gt.((0.5d0)*boxysize)).or.
5451 c & (yj.lt.((-0.5d0)*boxysize))) then
5455 c if (zj.gt.((0.5d0)*boxzsize)) zj=zj-boxzsize
5456 c if (zj.lt.((-0.5d0)*boxzsize)) zj=zj+boxzsize
5457 C Condition for being inside the proper box
5458 c if ((zj.gt.((0.5d0)*boxzsize)).or.
5459 c & (zj.lt.((-0.5d0)*boxzsize))) then
5462 CHERE IS THE CALCULATION WHICH MIRROR IMAGE IS THE CLOSEST ONE
5463 dist_init=(xj-xi)**2+(yj-yi)**2+(zj-zi)**2
5471 xj=xj_safe+xshift*boxxsize
5472 yj=yj_safe+yshift*boxysize
5473 zj=zj_safe+zshift*boxzsize
5474 dist_temp=(xj-xi)**2+(yj-yi)**2+(zj-zi)**2
5475 if(dist_temp.lt.dist_init) then
5485 if (subchap.eq.1) then
5494 c print *,xj,yj,zj,'polozenie j'
5495 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
5497 sss=sscale(1.0d0/(dsqrt(rrij)))
5498 c print *,r_cut,1.0d0/dsqrt(rrij),sss,'tu patrz'
5499 c if (sss.eq.0) print *,'czasem jest OK'
5500 if (sss.le.0.0d0) cycle
5501 sssgrad=sscagrad(1.0d0/(dsqrt(rrij)))
5503 e1=fac*fac*aad(itypj,iteli)
5504 e2=fac*bad(itypj,iteli)
5505 if (iabs(j-i) .le. 2) then
5508 evdw2_14=evdw2_14+(e1+e2)*sss
5511 evdw2=evdw2+evdwij*sss
5512 if (energy_dec) write (iout,'(a6,2i5,0pf7.3,2i3,3e11.3)')
5513 & 'evdw2',i,j,evdwij,iteli,itypj,fac,aad(itypj,iteli),
5516 C Calculate contributions to the gradient in the virtual-bond and SC vectors.
5518 fac=-(evdwij+e1)*rrij*sss
5519 fac=fac+(evdwij)*sssgrad*dsqrt(rrij)/expon
5523 cgrad if (j.lt.i) then
5524 cd write (iout,*) 'j<i'
5525 C Uncomment following three lines for SC-p interactions
5527 c gradx_scp(k,j)=gradx_scp(k,j)+ggg(k)
5530 cd write (iout,*) 'j>i'
5532 cgrad ggg(k)=-ggg(k)
5533 C Uncomment following line for SC-p interactions
5534 ccgrad gradx_scp(k,j)=gradx_scp(k,j)-ggg(k)
5535 c gradx_scp(k,j)=gradx_scp(k,j)+ggg(k)
5539 cgrad gvdwc_scp(k,i)=gvdwc_scp(k,i)-0.5D0*ggg(k)
5541 cgrad kstart=min0(i+1,j)
5542 cgrad kend=max0(i-1,j-1)
5543 cd write (iout,*) 'i=',i,' j=',j,' kstart=',kstart,' kend=',kend
5544 cd write (iout,*) ggg(1),ggg(2),ggg(3)
5545 cgrad do k=kstart,kend
5547 cgrad gvdwc_scp(l,k)=gvdwc_scp(l,k)-ggg(l)
5551 gvdwc_scpp(k,i)=gvdwc_scpp(k,i)-ggg(k)
5552 gvdwc_scp(k,j)=gvdwc_scp(k,j)+ggg(k)
5554 c endif !endif for sscale cutoff
5564 gvdwc_scp(j,i)=expon*gvdwc_scp(j,i)
5565 gvdwc_scpp(j,i)=expon*gvdwc_scpp(j,i)
5566 gradx_scp(j,i)=expon*gradx_scp(j,i)
5569 C******************************************************************************
5573 C To save time the factor EXPON has been extracted from ALL components
5574 C of GVDWC and GRADX. Remember to multiply them by this factor before further
5577 C******************************************************************************
5580 C--------------------------------------------------------------------------
5581 subroutine edis(ehpb)
5583 C Evaluate bridge-strain energy and its gradient in virtual-bond and SC vectors.
5585 implicit real*8 (a-h,o-z)
5586 include 'DIMENSIONS'
5587 include 'COMMON.SBRIDGE'
5588 include 'COMMON.CHAIN'
5589 include 'COMMON.DERIV'
5590 include 'COMMON.VAR'
5591 include 'COMMON.INTERACT'
5592 include 'COMMON.IOUNITS'
5593 include 'COMMON.CONTROL'
5599 C write (iout,*) ,"link_end",link_end,constr_dist
5600 cd write(iout,*)'edis: nhpb=',nhpb,' fbr=',fbr
5601 cd write(iout,*)'link_start=',link_start,' link_end=',link_end
5602 if (link_end.eq.0) return
5603 do i=link_start,link_end
5604 C If ihpb(i) and jhpb(i) > NRES, this is a SC-SC distance, otherwise a
5605 C CA-CA distance used in regularization of structure.
5608 C iii and jjj point to the residues for which the distance is assigned.
5609 if (ii.gt.nres) then
5616 c write (iout,*) "i",i," ii",ii," iii",iii," jj",jj," jjj",jjj,
5617 c & dhpb(i),dhpb1(i),forcon(i)
5618 C 24/11/03 AL: SS bridges handled separately because of introducing a specific
5619 C distance and angle dependent SS bond potential.
5620 C if (ii.gt.nres .and. iabs(itype(iii)).eq.1 .and.
5621 C & iabs(itype(jjj)).eq.1) then
5622 cmc if (ii.gt.nres .and. itype(iii).eq.1 .and. itype(jjj).eq.1) then
5623 C 18/07/06 MC: Use the convention that the first nss pairs are SS bonds
5624 if (.not.dyn_ss .and. i.le.nss) then
5625 C 15/02/13 CC dynamic SSbond - additional check
5626 if (ii.gt.nres .and. iabs(itype(iii)).eq.1 .and.
5627 & iabs(itype(jjj)).eq.1) then
5628 call ssbond_ene(iii,jjj,eij)
5631 cd write (iout,*) "eij",eij
5632 cd & ' waga=',waga,' fac=',fac
5633 else if (ii.gt.nres .and. jj.gt.nres) then
5634 c Restraints from contact prediction
5636 if (constr_dist.eq.11) then
5637 ehpb=ehpb+fordepth(i)**4.0d0
5638 & *rlornmr1(dd,dhpb(i),dhpb1(i),forcon(i))
5639 fac=fordepth(i)**4.0d0
5640 & *rlornmr1prim(dd,dhpb(i),dhpb1(i),forcon(i))/dd
5641 if (energy_dec) write (iout,'(a6,2i5,3f8.3)') "edisl",ii,jj,
5642 & ehpb,fordepth(i),dd
5644 if (dhpb1(i).gt.0.0d0) then
5645 ehpb=ehpb+2*forcon(i)*gnmr1(dd,dhpb(i),dhpb1(i))
5646 fac=forcon(i)*gnmr1prim(dd,dhpb(i),dhpb1(i))/dd
5647 c write (iout,*) "beta nmr",
5648 c & dd,2*forcon(i)*gnmr1(dd,dhpb(i),dhpb1(i))
5652 C Get the force constant corresponding to this distance.
5654 C Calculate the contribution to energy.
5655 ehpb=ehpb+waga*rdis*rdis
5656 c write (iout,*) "beta reg",dd,waga*rdis*rdis
5658 C Evaluate gradient.
5664 ggg(j)=fac*(c(j,jj)-c(j,ii))
5667 ghpbx(j,iii)=ghpbx(j,iii)-ggg(j)
5668 ghpbx(j,jjj)=ghpbx(j,jjj)+ggg(j)
5671 ghpbc(k,jjj)=ghpbc(k,jjj)+ggg(k)
5672 ghpbc(k,iii)=ghpbc(k,iii)-ggg(k)
5675 C Calculate the distance between the two points and its difference from the
5678 if (constr_dist.eq.11) then
5679 ehpb=ehpb+fordepth(i)**4.0d0
5680 & *rlornmr1(dd,dhpb(i),dhpb1(i),forcon(i))
5681 fac=fordepth(i)**4.0d0
5682 & *rlornmr1prim(dd,dhpb(i),dhpb1(i),forcon(i))/dd
5683 if (energy_dec) write (iout,'(a6,2i5,3f8.3)') "edisl",ii,jj,
5684 & ehpb,fordepth(i),dd
5686 if (dhpb1(i).gt.0.0d0) then
5687 ehpb=ehpb+2*forcon(i)*gnmr1(dd,dhpb(i),dhpb1(i))
5688 fac=forcon(i)*gnmr1prim(dd,dhpb(i),dhpb1(i))/dd
5689 c write (iout,*) "alph nmr",
5690 c & dd,2*forcon(i)*gnmr1(dd,dhpb(i),dhpb1(i))
5693 C Get the force constant corresponding to this distance.
5695 C Calculate the contribution to energy.
5696 ehpb=ehpb+waga*rdis*rdis
5697 c write (iout,*) "alpha reg",dd,waga*rdis*rdis
5699 C Evaluate gradient.
5705 ggg(j)=fac*(c(j,jj)-c(j,ii))
5707 cd print '(i3,3(1pe14.5))',i,(ggg(j),j=1,3)
5708 C If this is a SC-SC distance, we need to calculate the contributions to the
5709 C Cartesian gradient in the SC vectors (ghpbx).
5712 ghpbx(j,iii)=ghpbx(j,iii)-ggg(j)
5713 ghpbx(j,jjj)=ghpbx(j,jjj)+ggg(j)
5716 cgrad do j=iii,jjj-1
5718 cgrad ghpbc(k,j)=ghpbc(k,j)+ggg(k)
5722 ghpbc(k,jjj)=ghpbc(k,jjj)+ggg(k)
5723 ghpbc(k,iii)=ghpbc(k,iii)-ggg(k)
5727 if (constr_dist.ne.11) ehpb=0.5D0*ehpb
5730 C--------------------------------------------------------------------------
5731 subroutine ssbond_ene(i,j,eij)
5733 C Calculate the distance and angle dependent SS-bond potential energy
5734 C using a free-energy function derived based on RHF/6-31G** ab initio
5735 C calculations of diethyl disulfide.
5737 C A. Liwo and U. Kozlowska, 11/24/03
5739 implicit real*8 (a-h,o-z)
5740 include 'DIMENSIONS'
5741 include 'COMMON.SBRIDGE'
5742 include 'COMMON.CHAIN'
5743 include 'COMMON.DERIV'
5744 include 'COMMON.LOCAL'
5745 include 'COMMON.INTERACT'
5746 include 'COMMON.VAR'
5747 include 'COMMON.IOUNITS'
5748 double precision erij(3),dcosom1(3),dcosom2(3),gg(3)
5749 itypi=iabs(itype(i))
5753 dxi=dc_norm(1,nres+i)
5754 dyi=dc_norm(2,nres+i)
5755 dzi=dc_norm(3,nres+i)
5756 c dsci_inv=dsc_inv(itypi)
5757 dsci_inv=vbld_inv(nres+i)
5758 itypj=iabs(itype(j))
5759 c dscj_inv=dsc_inv(itypj)
5760 dscj_inv=vbld_inv(nres+j)
5764 dxj=dc_norm(1,nres+j)
5765 dyj=dc_norm(2,nres+j)
5766 dzj=dc_norm(3,nres+j)
5767 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
5772 om1=dxi*erij(1)+dyi*erij(2)+dzi*erij(3)
5773 om2=dxj*erij(1)+dyj*erij(2)+dzj*erij(3)
5774 om12=dxi*dxj+dyi*dyj+dzi*dzj
5776 dcosom1(k)=rij*(dc_norm(k,nres+i)-om1*erij(k))
5777 dcosom2(k)=rij*(dc_norm(k,nres+j)-om2*erij(k))
5783 deltat12=om2-om1+2.0d0
5785 eij=akcm*deltad*deltad+akth*(deltat1*deltat1+deltat2*deltat2)
5786 & +akct*deltad*deltat12
5787 & +v1ss*cosphi+v2ss*cosphi*cosphi+v3ss*cosphi*cosphi*cosphi+ebr
5788 c write(iout,*) i,j,"rij",rij,"d0cm",d0cm," akcm",akcm," akth",akth,
5789 c & " akct",akct," deltad",deltad," deltat",deltat1,deltat2,
5790 c & " deltat12",deltat12," eij",eij
5791 ed=2*akcm*deltad+akct*deltat12
5793 pom2=v1ss+2*v2ss*cosphi+3*v3ss*cosphi*cosphi
5794 eom1=-2*akth*deltat1-pom1-om2*pom2
5795 eom2= 2*akth*deltat2+pom1-om1*pom2
5798 ggk=ed*erij(k)+eom1*dcosom1(k)+eom2*dcosom2(k)
5799 ghpbx(k,i)=ghpbx(k,i)-ggk
5800 & +(eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,nres+i))
5801 & +eom1*(erij(k)-om1*dc_norm(k,nres+i)))*dsci_inv
5802 ghpbx(k,j)=ghpbx(k,j)+ggk
5803 & +(eom12*(dc_norm(k,nres+i)-om12*dc_norm(k,nres+j))
5804 & +eom2*(erij(k)-om2*dc_norm(k,nres+j)))*dscj_inv
5805 ghpbc(k,i)=ghpbc(k,i)-ggk
5806 ghpbc(k,j)=ghpbc(k,j)+ggk
5809 C Calculate the components of the gradient in DC and X
5813 cgrad ghpbc(l,k)=ghpbc(l,k)+gg(l)
5818 C--------------------------------------------------------------------------
5819 subroutine ebond(estr)
5821 c Evaluate the energy of stretching of the CA-CA and CA-SC virtual bonds
5823 implicit real*8 (a-h,o-z)
5824 include 'DIMENSIONS'
5825 include 'COMMON.LOCAL'
5826 include 'COMMON.GEO'
5827 include 'COMMON.INTERACT'
5828 include 'COMMON.DERIV'
5829 include 'COMMON.VAR'
5830 include 'COMMON.CHAIN'
5831 include 'COMMON.IOUNITS'
5832 include 'COMMON.NAMES'
5833 include 'COMMON.FFIELD'
5834 include 'COMMON.CONTROL'
5835 include 'COMMON.SETUP'
5836 double precision u(3),ud(3)
5839 do i=ibondp_start,ibondp_end
5840 if (itype(i-1).eq.ntyp1 .and. itype(i).eq.ntyp1) cycle
5841 c estr1=estr1+gnmr1(vbld(i),-1.0d0,distchainmax)
5843 c gradb(j,i-1)=gnmr1prim(vbld(i),-1.0d0,distchainmax)
5844 c & *dc(j,i-1)/vbld(i)
5846 c if (energy_dec) write(iout,*)
5847 c & "estr1",i,gnmr1(vbld(i),-1.0d0,distchainmax)
5849 C Checking if it involves dummy (NH3+ or COO-) group
5850 if (itype(i-1).eq.ntyp1 .or. itype(i).eq.ntyp1) then
5851 C YES vbldpDUM is the equlibrium length of spring for Dummy atom
5852 diff = vbld(i)-vbldpDUM
5853 if (energy_dec) write(iout,*) "dum_bond",i,diff
5855 C NO vbldp0 is the equlibrium lenght of spring for peptide group
5856 diff = vbld(i)-vbldp0
5858 if (energy_dec) write (iout,'(a7,i5,4f7.3)')
5859 & "estr bb",i,vbld(i),vbldp0,diff,AKP*diff*diff
5862 gradb(j,i-1)=AKP*diff*dc(j,i-1)/vbld(i)
5864 c write (iout,'(i5,3f10.5)') i,(gradb(j,i-1),j=1,3)
5868 estr=0.5d0*AKP*estr+estr1
5870 c 09/18/07 AL: multimodal bond potential based on AM1 CA-SC PMF's included
5872 do i=ibond_start,ibond_end
5874 if (iti.ne.10 .and. iti.ne.ntyp1) then
5877 diff=vbld(i+nres)-vbldsc0(1,iti)
5878 if (energy_dec) write (iout,*)
5879 & "estr sc",i,iti,vbld(i+nres),vbldsc0(1,iti),diff,
5880 & AKSC(1,iti),AKSC(1,iti)*diff*diff
5881 estr=estr+0.5d0*AKSC(1,iti)*diff*diff
5883 gradbx(j,i)=AKSC(1,iti)*diff*dc(j,i+nres)/vbld(i+nres)
5887 diff=vbld(i+nres)-vbldsc0(j,iti)
5888 ud(j)=aksc(j,iti)*diff
5889 u(j)=abond0(j,iti)+0.5d0*ud(j)*diff
5903 uprod2=uprod2*u(k)*u(k)
5907 usumsqder=usumsqder+ud(j)*uprod2
5909 estr=estr+uprod/usum
5911 gradbx(j,i)=usumsqder/(usum*usum)*dc(j,i+nres)/vbld(i+nres)
5919 C--------------------------------------------------------------------------
5920 subroutine ebend(etheta,ethetacnstr)
5922 C Evaluate the virtual-bond-angle energy given the virtual-bond dihedral
5923 C angles gamma and its derivatives in consecutive thetas and gammas.
5925 implicit real*8 (a-h,o-z)
5926 include 'DIMENSIONS'
5927 include 'COMMON.LOCAL'
5928 include 'COMMON.GEO'
5929 include 'COMMON.INTERACT'
5930 include 'COMMON.DERIV'
5931 include 'COMMON.VAR'
5932 include 'COMMON.CHAIN'
5933 include 'COMMON.IOUNITS'
5934 include 'COMMON.NAMES'
5935 include 'COMMON.FFIELD'
5936 include 'COMMON.CONTROL'
5937 include 'COMMON.TORCNSTR'
5938 common /calcthet/ term1,term2,termm,diffak,ratak,
5939 & ak,aktc,termpre,termexp,sigc,sig0i,time11,time12,sigcsq,
5940 & delthe0,sig0inv,sigtc,sigsqtc,delthec,it
5941 double precision y(2),z(2)
5943 c time11=dexp(-2*time)
5946 c write (*,'(a,i2)') 'EBEND ICG=',icg
5947 do i=ithet_start,ithet_end
5948 if ((itype(i-1).eq.ntyp1).or.itype(i-2).eq.ntyp1
5949 & .or.itype(i).eq.ntyp1) cycle
5950 C Zero the energy function and its derivative at 0 or pi.
5951 call splinthet(theta(i),0.5d0*delta,ss,ssd)
5953 ichir1=isign(1,itype(i-2))
5954 ichir2=isign(1,itype(i))
5955 if (itype(i-2).eq.10) ichir1=isign(1,itype(i-1))
5956 if (itype(i).eq.10) ichir2=isign(1,itype(i-1))
5957 if (itype(i-1).eq.10) then
5958 itype1=isign(10,itype(i-2))
5959 ichir11=isign(1,itype(i-2))
5960 ichir12=isign(1,itype(i-2))
5961 itype2=isign(10,itype(i))
5962 ichir21=isign(1,itype(i))
5963 ichir22=isign(1,itype(i))
5966 if (i.gt.3 .and. itype(i-3).ne.ntyp1) then
5969 if (phii.ne.phii) phii=150.0
5979 if (i.lt.nres .and. itype(i+1).ne.ntyp1) then
5982 if (phii1.ne.phii1) phii1=150.0
5994 C Calculate the "mean" value of theta from the part of the distribution
5995 C dependent on the adjacent virtual-bond-valence angles (gamma1 & gamma2).
5996 C In following comments this theta will be referred to as t_c.
5997 thet_pred_mean=0.0d0
5999 athetk=athet(k,it,ichir1,ichir2)
6000 bthetk=bthet(k,it,ichir1,ichir2)
6002 athetk=athet(k,itype1,ichir11,ichir12)
6003 bthetk=bthet(k,itype2,ichir21,ichir22)
6005 thet_pred_mean=thet_pred_mean+athetk*y(k)+bthetk*z(k)
6006 c write(iout,*) 'chuj tu', y(k),z(k)
6008 dthett=thet_pred_mean*ssd
6009 thet_pred_mean=thet_pred_mean*ss+a0thet(it)
6010 C Derivatives of the "mean" values in gamma1 and gamma2.
6011 dthetg1=(-athet(1,it,ichir1,ichir2)*y(2)
6012 &+athet(2,it,ichir1,ichir2)*y(1))*ss
6013 dthetg2=(-bthet(1,it,ichir1,ichir2)*z(2)
6014 & +bthet(2,it,ichir1,ichir2)*z(1))*ss
6016 dthetg1=(-athet(1,itype1,ichir11,ichir12)*y(2)
6017 &+athet(2,itype1,ichir11,ichir12)*y(1))*ss
6018 dthetg2=(-bthet(1,itype2,ichir21,ichir22)*z(2)
6019 & +bthet(2,itype2,ichir21,ichir22)*z(1))*ss
6021 if (theta(i).gt.pi-delta) then
6022 call theteng(pi-delta,thet_pred_mean,theta0(it),f0,fprim0,
6024 call mixder(pi-delta,thet_pred_mean,theta0(it),fprim_tc0)
6025 call theteng(pi,thet_pred_mean,theta0(it),f1,fprim1,E_tc1)
6026 call spline1(theta(i),pi-delta,delta,f0,f1,fprim0,ethetai,
6028 call spline2(theta(i),pi-delta,delta,E_tc0,E_tc1,fprim_tc0,
6030 else if (theta(i).lt.delta) then
6031 call theteng(delta,thet_pred_mean,theta0(it),f0,fprim0,E_tc0)
6032 call theteng(0.0d0,thet_pred_mean,theta0(it),f1,fprim1,E_tc1)
6033 call spline1(theta(i),delta,-delta,f0,f1,fprim0,ethetai,
6035 call mixder(delta,thet_pred_mean,theta0(it),fprim_tc0)
6036 call spline2(theta(i),delta,-delta,E_tc0,E_tc1,fprim_tc0,
6039 call theteng(theta(i),thet_pred_mean,theta0(it),ethetai,
6042 etheta=etheta+ethetai
6043 if (energy_dec) write (iout,'(a6,i5,0pf7.3,f7.3,i5)')
6044 & 'ebend',i,ethetai,theta(i),itype(i)
6045 if (i.gt.3) gloc(i-3,icg)=gloc(i-3,icg)+wang*E_tc*dthetg1
6046 if (i.lt.nres) gloc(i-2,icg)=gloc(i-2,icg)+wang*E_tc*dthetg2
6047 gloc(nphi+i-2,icg)=wang*(E_theta+E_tc*dthett)+gloc(nphi+i-2,icg)
6050 C print *,ithetaconstr_start,ithetaconstr_end,"TU"
6051 do i=ithetaconstr_start,ithetaconstr_end
6052 itheta=itheta_constr(i)
6053 thetiii=theta(itheta)
6054 difi=pinorm(thetiii-theta_constr0(i))
6055 if (difi.gt.theta_drange(i)) then
6056 difi=difi-theta_drange(i)
6057 ethetacnstr=ethetcnstr+0.25d0*for_thet_constr(i)*difi**4
6058 gloc(itheta+nphi-2,icg)=gloc(itheta+nphi-2,icg)
6059 & +for_thet_constr(i)*difi**3
6060 else if (difi.lt.-drange(i)) then
6062 ethetacnstr=ethetcnstr+0.25d0*for_thet_constr(i)*difi**4
6063 gloc(itheta+nphi-2,icg)=gloc(itheta+nphi-2,icg)
6064 & +for_thet_constr(i)*difi**3
6068 if (energy_dec) then
6069 write (iout,'(a6,2i5,4f8.3,2e14.5)') "ethetc",
6070 & i,itheta,rad2deg*thetiii,
6071 & rad2deg*theta_constr0(i), rad2deg*theta_drange(i),
6072 & rad2deg*difi,0.25d0*for_thet_constr(i)*difi**4,
6073 & gloc(itheta+nphi-2,icg)
6077 C Ufff.... We've done all this!!!
6080 C---------------------------------------------------------------------------
6081 subroutine theteng(thetai,thet_pred_mean,theta0i,ethetai,E_theta,
6083 implicit real*8 (a-h,o-z)
6084 include 'DIMENSIONS'
6085 include 'COMMON.LOCAL'
6086 include 'COMMON.IOUNITS'
6087 common /calcthet/ term1,term2,termm,diffak,ratak,
6088 & ak,aktc,termpre,termexp,sigc,sig0i,time11,time12,sigcsq,
6089 & delthe0,sig0inv,sigtc,sigsqtc,delthec,it
6090 C Calculate the contributions to both Gaussian lobes.
6091 C 6/6/97 - Deform the Gaussians using the factor of 1/(1+time)
6092 C The "polynomial part" of the "standard deviation" of this part of
6093 C the distributioni.
6094 ccc write (iout,*) thetai,thet_pred_mean
6097 sig=sig*thet_pred_mean+polthet(j,it)
6099 C Derivative of the "interior part" of the "standard deviation of the"
6100 C gamma-dependent Gaussian lobe in t_c.
6101 sigtc=3*polthet(3,it)
6103 sigtc=sigtc*thet_pred_mean+j*polthet(j,it)
6106 C Set the parameters of both Gaussian lobes of the distribution.
6107 C "Standard deviation" of the gamma-dependent Gaussian lobe (sigtc)
6108 fac=sig*sig+sigc0(it)
6111 C Following variable (sigsqtc) is -(1/2)d[sigma(t_c)**(-2))]/dt_c
6112 sigsqtc=-4.0D0*sigcsq*sigtc
6113 c print *,i,sig,sigtc,sigsqtc
6114 C Following variable (sigtc) is d[sigma(t_c)]/dt_c
6115 sigtc=-sigtc/(fac*fac)
6116 C Following variable is sigma(t_c)**(-2)
6117 sigcsq=sigcsq*sigcsq
6119 sig0inv=1.0D0/sig0i**2
6120 delthec=thetai-thet_pred_mean
6121 delthe0=thetai-theta0i
6122 term1=-0.5D0*sigcsq*delthec*delthec
6123 term2=-0.5D0*sig0inv*delthe0*delthe0
6124 C write (iout,*)'term1',term1,term2,sigcsq,delthec,sig0inv,delthe0
6125 C Following fuzzy logic is to avoid underflows in dexp and subsequent INFs and
6126 C NaNs in taking the logarithm. We extract the largest exponent which is added
6127 C to the energy (this being the log of the distribution) at the end of energy
6128 C term evaluation for this virtual-bond angle.
6129 if (term1.gt.term2) then
6131 term2=dexp(term2-termm)
6135 term1=dexp(term1-termm)
6138 C The ratio between the gamma-independent and gamma-dependent lobes of
6139 C the distribution is a Gaussian function of thet_pred_mean too.
6140 diffak=gthet(2,it)-thet_pred_mean
6141 ratak=diffak/gthet(3,it)**2
6142 ak=dexp(gthet(1,it)-0.5D0*diffak*ratak)
6143 C Let's differentiate it in thet_pred_mean NOW.
6145 C Now put together the distribution terms to make complete distribution.
6146 termexp=term1+ak*term2
6147 termpre=sigc+ak*sig0i
6148 C Contribution of the bending energy from this theta is just the -log of
6149 C the sum of the contributions from the two lobes and the pre-exponential
6150 C factor. Simple enough, isn't it?
6151 ethetai=(-dlog(termexp)-termm+dlog(termpre))
6152 C write (iout,*) 'termexp',termexp,termm,termpre,i
6153 C NOW the derivatives!!!
6154 C 6/6/97 Take into account the deformation.
6155 E_theta=(delthec*sigcsq*term1
6156 & +ak*delthe0*sig0inv*term2)/termexp
6157 E_tc=((sigtc+aktc*sig0i)/termpre
6158 & -((delthec*sigcsq+delthec*delthec*sigsqtc)*term1+
6159 & aktc*term2)/termexp)
6162 c-----------------------------------------------------------------------------
6163 subroutine mixder(thetai,thet_pred_mean,theta0i,E_tc_t)
6164 implicit real*8 (a-h,o-z)
6165 include 'DIMENSIONS'
6166 include 'COMMON.LOCAL'
6167 include 'COMMON.IOUNITS'
6168 common /calcthet/ term1,term2,termm,diffak,ratak,
6169 & ak,aktc,termpre,termexp,sigc,sig0i,time11,time12,sigcsq,
6170 & delthe0,sig0inv,sigtc,sigsqtc,delthec,it
6171 delthec=thetai-thet_pred_mean
6172 delthe0=thetai-theta0i
6173 C "Thank you" to MAPLE (probably spared one day of hand-differentiation).
6174 t3 = thetai-thet_pred_mean
6178 t14 = t12+t6*sigsqtc
6180 t21 = thetai-theta0i
6186 E_tc_t = -((sigcsq+2.D0*t3*sigsqtc)*t9-t14*sigcsq*t3*t16*t9
6187 & -aktc*sig0inv*t27)/t32+(t14*t9+aktc*t26)/t40
6188 & *(-t12*t9-ak*sig0inv*t27)
6192 C--------------------------------------------------------------------------
6193 subroutine ebend(etheta,ethetacnstr)
6195 C Evaluate the virtual-bond-angle energy given the virtual-bond dihedral
6196 C angles gamma and its derivatives in consecutive thetas and gammas.
6197 C ab initio-derived potentials from
6198 c Kozlowska et al., J. Phys.: Condens. Matter 19 (2007) 285203
6200 implicit real*8 (a-h,o-z)
6201 include 'DIMENSIONS'
6202 include 'COMMON.LOCAL'
6203 include 'COMMON.GEO'
6204 include 'COMMON.INTERACT'
6205 include 'COMMON.DERIV'
6206 include 'COMMON.VAR'
6207 include 'COMMON.CHAIN'
6208 include 'COMMON.IOUNITS'
6209 include 'COMMON.NAMES'
6210 include 'COMMON.FFIELD'
6211 include 'COMMON.CONTROL'
6212 include 'COMMON.TORCNSTR'
6213 double precision coskt(mmaxtheterm),sinkt(mmaxtheterm),
6214 & cosph1(maxsingle),sinph1(maxsingle),cosph2(maxsingle),
6215 & sinph2(maxsingle),cosph1ph2(maxdouble,maxdouble),
6216 & sinph1ph2(maxdouble,maxdouble)
6217 logical lprn /.false./, lprn1 /.false./
6219 do i=ithet_start,ithet_end
6220 c print *,i,itype(i-1),itype(i),itype(i-2)
6221 if ((itype(i-1).eq.ntyp1).or.itype(i-2).eq.ntyp1
6222 & .or.itype(i).eq.ntyp1) cycle
6223 C print *,i,theta(i)
6224 if (iabs(itype(i+1)).eq.20) iblock=2
6225 if (iabs(itype(i+1)).ne.20) iblock=1
6229 theti2=0.5d0*theta(i)
6230 ityp2=ithetyp((itype(i-1)))
6232 coskt(k)=dcos(k*theti2)
6233 sinkt(k)=dsin(k*theti2)
6236 if (i.gt.3 .and. itype(i-3).ne.ntyp1) then
6239 if (phii.ne.phii) phii=150.0
6243 ityp1=ithetyp((itype(i-2)))
6244 C propagation of chirality for glycine type
6246 cosph1(k)=dcos(k*phii)
6247 sinph1(k)=dsin(k*phii)
6252 ityp1=ithetyp((itype(i-2)))
6257 if (i.lt.nres .and. itype(i+1).ne.ntyp1) then
6260 if (phii1.ne.phii1) phii1=150.0
6265 ityp3=ithetyp((itype(i)))
6267 cosph2(k)=dcos(k*phii1)
6268 sinph2(k)=dsin(k*phii1)
6272 ityp3=ithetyp((itype(i)))
6278 ethetai=aa0thet(ityp1,ityp2,ityp3,iblock)
6281 ccl=cosph1(l)*cosph2(k-l)
6282 ssl=sinph1(l)*sinph2(k-l)
6283 scl=sinph1(l)*cosph2(k-l)
6284 csl=cosph1(l)*sinph2(k-l)
6285 cosph1ph2(l,k)=ccl-ssl
6286 cosph1ph2(k,l)=ccl+ssl
6287 sinph1ph2(l,k)=scl+csl
6288 sinph1ph2(k,l)=scl-csl
6292 write (iout,*) "i",i," ityp1",ityp1," ityp2",ityp2,
6293 & " ityp3",ityp3," theti2",theti2," phii",phii," phii1",phii1
6294 write (iout,*) "coskt and sinkt"
6296 write (iout,*) k,coskt(k),sinkt(k)
6300 ethetai=ethetai+aathet(k,ityp1,ityp2,ityp3,iblock)*sinkt(k)
6301 dethetai=dethetai+0.5d0*k*aathet(k,ityp1,ityp2,ityp3,iblock)
6304 & write (iout,*) "k",k,"
6305 & aathet",aathet(k,ityp1,ityp2,ityp3,iblock),
6306 & " ethetai",ethetai
6309 write (iout,*) "cosph and sinph"
6311 write (iout,*) k,cosph1(k),sinph1(k),cosph2(k),sinph2(k)
6313 write (iout,*) "cosph1ph2 and sinph2ph2"
6316 write (iout,*) l,k,cosph1ph2(l,k),cosph1ph2(k,l),
6317 & sinph1ph2(l,k),sinph1ph2(k,l)
6320 write(iout,*) "ethetai",ethetai
6325 aux=bbthet(k,m,ityp1,ityp2,ityp3,iblock)*cosph1(k)
6326 & +ccthet(k,m,ityp1,ityp2,ityp3,iblock)*sinph1(k)
6327 & +ddthet(k,m,ityp1,ityp2,ityp3,iblock)*cosph2(k)
6328 & +eethet(k,m,ityp1,ityp2,ityp3,iblock)*sinph2(k)
6329 ethetai=ethetai+sinkt(m)*aux
6330 dethetai=dethetai+0.5d0*m*aux*coskt(m)
6331 dephii=dephii+k*sinkt(m)*(
6332 & ccthet(k,m,ityp1,ityp2,ityp3,iblock)*cosph1(k)-
6333 & bbthet(k,m,ityp1,ityp2,ityp3,iblock)*sinph1(k))
6334 dephii1=dephii1+k*sinkt(m)*(
6335 & eethet(k,m,ityp1,ityp2,ityp3,iblock)*cosph2(k)-
6336 & ddthet(k,m,ityp1,ityp2,ityp3,iblock)*sinph2(k))
6338 & write (iout,*) "m",m," k",k," bbthet",
6339 & bbthet(k,m,ityp1,ityp2,ityp3,iblock)," ccthet",
6340 & ccthet(k,m,ityp1,ityp2,ityp3,iblock)," ddthet",
6341 & ddthet(k,m,ityp1,ityp2,ityp3,iblock)," eethet",
6342 & eethet(k,m,ityp1,ityp2,ityp3,iblock)," ethetai",ethetai
6343 C print *,"tu",cosph1(k),sinph1(k),cosph2(k),sinph2(k)
6346 C print *,"cosph1", (cosph1(k), k=1,nsingle)
6347 C print *,"cosph2", (cosph2(k), k=1,nsingle)
6348 C print *,"sinph1", (sinph1(k), k=1,nsingle)
6349 C print *,"sinph2", (sinph2(k), k=1,nsingle)
6351 & write(iout,*) "ethetai",ethetai
6352 C print *,"tu",cosph1(k),sinph1(k),cosph2(k),sinph2(k)
6356 aux=ffthet(l,k,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(l,k)+
6357 & ffthet(k,l,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(k,l)+
6358 & ggthet(l,k,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(l,k)+
6359 & ggthet(k,l,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(k,l)
6360 ethetai=ethetai+sinkt(m)*aux
6361 dethetai=dethetai+0.5d0*m*coskt(m)*aux
6362 dephii=dephii+l*sinkt(m)*(
6363 & -ffthet(l,k,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(l,k)-
6364 & ffthet(k,l,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(k,l)+
6365 & ggthet(l,k,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(l,k)+
6366 & ggthet(k,l,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(k,l))
6367 dephii1=dephii1+(k-l)*sinkt(m)*(
6368 & -ffthet(l,k,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(l,k)+
6369 & ffthet(k,l,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(k,l)+
6370 & ggthet(l,k,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(l,k)-
6371 & ggthet(k,l,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(k,l))
6373 write (iout,*) "m",m," k",k," l",l," ffthet",
6374 & ffthet(l,k,m,ityp1,ityp2,ityp3,iblock),
6375 & ffthet(k,l,m,ityp1,ityp2,ityp3,iblock)," ggthet",
6376 & ggthet(l,k,m,ityp1,ityp2,ityp3,iblock),
6377 & ggthet(k,l,m,ityp1,ityp2,ityp3,iblock),
6378 & " ethetai",ethetai
6379 write (iout,*) cosph1ph2(l,k)*sinkt(m),
6380 & cosph1ph2(k,l)*sinkt(m),
6381 & sinph1ph2(l,k)*sinkt(m),sinph1ph2(k,l)*sinkt(m)
6390 & write (iout,'(i2,3f8.1,9h ethetai ,f10.5)')
6391 & i,theta(i)*rad2deg,phii*rad2deg,
6392 & phii1*rad2deg,ethetai
6394 etheta=etheta+ethetai
6395 if (i.gt.3) gloc(i-3,icg)=gloc(i-3,icg)+wang*dephii
6396 if (i.lt.nres) gloc(i-2,icg)=gloc(i-2,icg)+wang*dephii1
6397 gloc(nphi+i-2,icg)=gloc(nphi+i-2,icg)+wang*dethetai
6401 C print *,ithetaconstr_start,ithetaconstr_end,"TU"
6402 do i=ithetaconstr_start,ithetaconstr_end
6403 itheta=itheta_constr(i)
6404 thetiii=theta(itheta)
6405 difi=pinorm(thetiii-theta_constr0(i))
6406 if (difi.gt.theta_drange(i)) then
6407 difi=difi-theta_drange(i)
6408 ethetacnstr=ethetacnstr+0.25d0*for_thet_constr(i)*difi**4
6409 gloc(itheta+nphi-2,icg)=gloc(itheta+nphi-2,icg)
6410 & +for_thet_constr(i)*difi**3
6411 else if (difi.lt.-drange(i)) then
6413 ethetacnstr=ethetacnstr+0.25d0*for_thet_constr(i)*difi**4
6414 gloc(itheta+nphi-2,icg)=gloc(itheta+nphi-2,icg)
6415 & +for_thet_constr(i)*difi**3
6419 if (energy_dec) then
6420 write (iout,'(a6,2i5,4f8.3,2e14.5)') "ethetc",
6421 & i,itheta,rad2deg*thetiii,
6422 & rad2deg*theta_constr0(i), rad2deg*theta_drange(i),
6423 & rad2deg*difi,0.25d0*for_thet_constr(i)*difi**4,
6424 & gloc(itheta+nphi-2,icg)
6432 c-----------------------------------------------------------------------------
6433 subroutine esc(escloc)
6434 C Calculate the local energy of a side chain and its derivatives in the
6435 C corresponding virtual-bond valence angles THETA and the spherical angles
6437 implicit real*8 (a-h,o-z)
6438 include 'DIMENSIONS'
6439 include 'COMMON.GEO'
6440 include 'COMMON.LOCAL'
6441 include 'COMMON.VAR'
6442 include 'COMMON.INTERACT'
6443 include 'COMMON.DERIV'
6444 include 'COMMON.CHAIN'
6445 include 'COMMON.IOUNITS'
6446 include 'COMMON.NAMES'
6447 include 'COMMON.FFIELD'
6448 include 'COMMON.CONTROL'
6449 double precision x(3),dersc(3),xemp(3),dersc0(3),dersc1(3),
6450 & ddersc0(3),ddummy(3),xtemp(3),temp(3)
6451 common /sccalc/ time11,time12,time112,theti,it,nlobit
6454 c write (iout,'(a)') 'ESC'
6455 do i=loc_start,loc_end
6457 if (it.eq.ntyp1) cycle
6458 if (it.eq.10) goto 1
6459 nlobit=nlob(iabs(it))
6460 c print *,'i=',i,' it=',it,' nlobit=',nlobit
6461 c write (iout,*) 'i=',i,' ssa=',ssa,' ssad=',ssad
6462 theti=theta(i+1)-pipol
6467 if (x(2).gt.pi-delta) then
6471 call enesc(xtemp,escloci0,dersc0,ddersc0,.true.)
6473 call enesc(xtemp,escloci1,dersc1,ddummy,.false.)
6474 call spline1(x(2),pi-delta,delta,escloci0,escloci1,dersc0(2),
6476 call spline2(x(2),pi-delta,delta,dersc0(1),dersc1(1),
6477 & ddersc0(1),dersc(1))
6478 call spline2(x(2),pi-delta,delta,dersc0(3),dersc1(3),
6479 & ddersc0(3),dersc(3))
6481 call enesc_bound(xtemp,esclocbi0,dersc0,dersc12,.true.)
6483 call enesc_bound(xtemp,esclocbi1,dersc1,chuju,.false.)
6484 call spline1(x(2),pi-delta,delta,esclocbi0,esclocbi1,
6485 & dersc0(2),esclocbi,dersc02)
6486 call spline2(x(2),pi-delta,delta,dersc0(1),dersc1(1),
6488 call splinthet(x(2),0.5d0*delta,ss,ssd)
6493 dersc(k)=ss*dersc(k)+(1.0d0-ss)*dersc0(k)
6495 dersc(2)=dersc(2)+ssd*(escloci-esclocbi)
6496 c write (iout,*) 'i=',i,x(2)*rad2deg,escloci0,escloci,
6498 escloci=ss*escloci+(1.0d0-ss)*esclocbi
6500 c write (iout,*) escloci
6501 else if (x(2).lt.delta) then
6505 call enesc(xtemp,escloci0,dersc0,ddersc0,.true.)
6507 call enesc(xtemp,escloci1,dersc1,ddummy,.false.)
6508 call spline1(x(2),delta,-delta,escloci0,escloci1,dersc0(2),
6510 call spline2(x(2),delta,-delta,dersc0(1),dersc1(1),
6511 & ddersc0(1),dersc(1))
6512 call spline2(x(2),delta,-delta,dersc0(3),dersc1(3),
6513 & ddersc0(3),dersc(3))
6515 call enesc_bound(xtemp,esclocbi0,dersc0,dersc12,.true.)
6517 call enesc_bound(xtemp,esclocbi1,dersc1,chuju,.false.)
6518 call spline1(x(2),delta,-delta,esclocbi0,esclocbi1,
6519 & dersc0(2),esclocbi,dersc02)
6520 call spline2(x(2),delta,-delta,dersc0(1),dersc1(1),
6525 call splinthet(x(2),0.5d0*delta,ss,ssd)
6527 dersc(k)=ss*dersc(k)+(1.0d0-ss)*dersc0(k)
6529 dersc(2)=dersc(2)+ssd*(escloci-esclocbi)
6530 c write (iout,*) 'i=',i,x(2)*rad2deg,escloci0,escloci,
6532 escloci=ss*escloci+(1.0d0-ss)*esclocbi
6533 c write (iout,*) escloci
6535 call enesc(x,escloci,dersc,ddummy,.false.)
6538 escloc=escloc+escloci
6539 if (energy_dec) write (iout,'(a6,i5,0pf7.3)')
6540 & 'escloc',i,escloci
6541 c write (iout,*) 'i=',i,' escloci=',escloci,' dersc=',dersc
6543 gloc(nphi+i-1,icg)=gloc(nphi+i-1,icg)+
6545 gloc(ialph(i,1),icg)=wscloc*dersc(2)
6546 gloc(ialph(i,1)+nside,icg)=wscloc*dersc(3)
6551 C---------------------------------------------------------------------------
6552 subroutine enesc(x,escloci,dersc,ddersc,mixed)
6553 implicit real*8 (a-h,o-z)
6554 include 'DIMENSIONS'
6555 include 'COMMON.GEO'
6556 include 'COMMON.LOCAL'
6557 include 'COMMON.IOUNITS'
6558 common /sccalc/ time11,time12,time112,theti,it,nlobit
6559 double precision x(3),z(3),Ax(3,maxlob,-1:1),dersc(3),ddersc(3)
6560 double precision contr(maxlob,-1:1)
6562 c write (iout,*) 'it=',it,' nlobit=',nlobit
6566 if (mixed) ddersc(j)=0.0d0
6570 C Because of periodicity of the dependence of the SC energy in omega we have
6571 C to add up the contributions from x(3)-2*pi, x(3), and x(3+2*pi).
6572 C To avoid underflows, first compute & store the exponents.
6580 z(k)=x(k)-censc(k,j,it)
6585 Axk=Axk+gaussc(l,k,j,it)*z(l)
6591 expfac=expfac+Ax(k,j,iii)*z(k)
6599 C As in the case of ebend, we want to avoid underflows in exponentiation and
6600 C subsequent NaNs and INFs in energy calculation.
6601 C Find the largest exponent
6605 if (emin.gt.contr(j,iii)) emin=contr(j,iii)
6609 cd print *,'it=',it,' emin=',emin
6611 C Compute the contribution to SC energy and derivatives
6616 adexp=bsc(j,iabs(it))-0.5D0*contr(j,iii)+emin
6617 if(adexp.ne.adexp) adexp=1.0
6620 expfac=dexp(bsc(j,iabs(it))-0.5D0*contr(j,iii)+emin)
6622 cd print *,'j=',j,' expfac=',expfac
6623 escloc_i=escloc_i+expfac
6625 dersc(k)=dersc(k)+Ax(k,j,iii)*expfac
6629 ddersc(k)=ddersc(k)+(-Ax(2,j,iii)*Ax(k,j,iii)
6630 & +gaussc(k,2,j,it))*expfac
6637 dersc(1)=dersc(1)/cos(theti)**2
6638 ddersc(1)=ddersc(1)/cos(theti)**2
6641 escloci=-(dlog(escloc_i)-emin)
6643 dersc(j)=dersc(j)/escloc_i
6647 ddersc(j)=(ddersc(j)/escloc_i+dersc(2)*dersc(j))
6652 C------------------------------------------------------------------------------
6653 subroutine enesc_bound(x,escloci,dersc,dersc12,mixed)
6654 implicit real*8 (a-h,o-z)
6655 include 'DIMENSIONS'
6656 include 'COMMON.GEO'
6657 include 'COMMON.LOCAL'
6658 include 'COMMON.IOUNITS'
6659 common /sccalc/ time11,time12,time112,theti,it,nlobit
6660 double precision x(3),z(3),Ax(3,maxlob),dersc(3)
6661 double precision contr(maxlob)
6672 z(k)=x(k)-censc(k,j,it)
6678 Axk=Axk+gaussc(l,k,j,it)*z(l)
6684 expfac=expfac+Ax(k,j)*z(k)
6689 C As in the case of ebend, we want to avoid underflows in exponentiation and
6690 C subsequent NaNs and INFs in energy calculation.
6691 C Find the largest exponent
6694 if (emin.gt.contr(j)) emin=contr(j)
6698 C Compute the contribution to SC energy and derivatives
6702 expfac=dexp(bsc(j,iabs(it))-0.5D0*contr(j)+emin)
6703 escloc_i=escloc_i+expfac
6705 dersc(k)=dersc(k)+Ax(k,j)*expfac
6707 if (mixed) dersc12=dersc12+(-Ax(2,j)*Ax(1,j)
6708 & +gaussc(1,2,j,it))*expfac
6712 dersc(1)=dersc(1)/cos(theti)**2
6713 dersc12=dersc12/cos(theti)**2
6714 escloci=-(dlog(escloc_i)-emin)
6716 dersc(j)=dersc(j)/escloc_i
6718 if (mixed) dersc12=(dersc12/escloc_i+dersc(2)*dersc(1))
6722 c----------------------------------------------------------------------------------
6723 subroutine esc(escloc)
6724 C Calculate the local energy of a side chain and its derivatives in the
6725 C corresponding virtual-bond valence angles THETA and the spherical angles
6726 C ALPHA and OMEGA derived from AM1 all-atom calculations.
6727 C added by Urszula Kozlowska. 07/11/2007
6729 implicit real*8 (a-h,o-z)
6730 include 'DIMENSIONS'
6731 include 'COMMON.GEO'
6732 include 'COMMON.LOCAL'
6733 include 'COMMON.VAR'
6734 include 'COMMON.SCROT'
6735 include 'COMMON.INTERACT'
6736 include 'COMMON.DERIV'
6737 include 'COMMON.CHAIN'
6738 include 'COMMON.IOUNITS'
6739 include 'COMMON.NAMES'
6740 include 'COMMON.FFIELD'
6741 include 'COMMON.CONTROL'
6742 include 'COMMON.VECTORS'
6743 double precision x_prime(3),y_prime(3),z_prime(3)
6744 & , sumene,dsc_i,dp2_i,x(65),
6745 & xx,yy,zz,sumene1,sumene2,sumene3,sumene4,s1,s1_6,s2,s2_6,
6746 & de_dxx,de_dyy,de_dzz,de_dt
6747 double precision s1_t,s1_6_t,s2_t,s2_6_t
6749 & dXX_Ci1(3),dYY_Ci1(3),dZZ_Ci1(3),dXX_Ci(3),
6750 & dYY_Ci(3),dZZ_Ci(3),dXX_XYZ(3),dYY_XYZ(3),dZZ_XYZ(3),
6751 & dt_dCi(3),dt_dCi1(3)
6752 common /sccalc/ time11,time12,time112,theti,it,nlobit
6755 do i=loc_start,loc_end
6756 if (itype(i).eq.ntyp1) cycle
6757 costtab(i+1) =dcos(theta(i+1))
6758 sinttab(i+1) =dsqrt(1-costtab(i+1)*costtab(i+1))
6759 cost2tab(i+1)=dsqrt(0.5d0*(1.0d0+costtab(i+1)))
6760 sint2tab(i+1)=dsqrt(0.5d0*(1.0d0-costtab(i+1)))
6761 cosfac2=0.5d0/(1.0d0+costtab(i+1))
6762 cosfac=dsqrt(cosfac2)
6763 sinfac2=0.5d0/(1.0d0-costtab(i+1))
6764 sinfac=dsqrt(sinfac2)
6766 if (it.eq.10) goto 1
6768 C Compute the axes of tghe local cartesian coordinates system; store in
6769 c x_prime, y_prime and z_prime
6776 C write(2,*) "dc_norm", dc_norm(1,i+nres),dc_norm(2,i+nres),
6777 C & dc_norm(3,i+nres)
6779 x_prime(j) = (dc_norm(j,i) - dc_norm(j,i-1))*cosfac
6780 y_prime(j) = (dc_norm(j,i) + dc_norm(j,i-1))*sinfac
6783 z_prime(j) = -uz(j,i-1)*dsign(1.0d0,dfloat(itype(i)))
6786 c write (2,*) "x_prime",(x_prime(j),j=1,3)
6787 c write (2,*) "y_prime",(y_prime(j),j=1,3)
6788 c write (2,*) "z_prime",(z_prime(j),j=1,3)
6789 c write (2,*) "xx",scalar(x_prime(1),x_prime(1)),
6790 c & " xy",scalar(x_prime(1),y_prime(1)),
6791 c & " xz",scalar(x_prime(1),z_prime(1)),
6792 c & " yy",scalar(y_prime(1),y_prime(1)),
6793 c & " yz",scalar(y_prime(1),z_prime(1)),
6794 c & " zz",scalar(z_prime(1),z_prime(1))
6796 C Transform the unit vector of the ith side-chain centroid, dC_norm(*,i),
6797 C to local coordinate system. Store in xx, yy, zz.
6803 xx = xx + x_prime(j)*dc_norm(j,i+nres)
6804 yy = yy + y_prime(j)*dc_norm(j,i+nres)
6805 zz = zz + z_prime(j)*dc_norm(j,i+nres)
6812 C Compute the energy of the ith side cbain
6814 c write (2,*) "xx",xx," yy",yy," zz",zz
6817 x(j) = sc_parmin(j,it)
6820 Cc diagnostics - remove later
6822 yy1 = dsin(alph(2))*dcos(omeg(2))
6823 zz1 = -dsign(1.0,dfloat(itype(i)))*dsin(alph(2))*dsin(omeg(2))
6824 write(2,'(3f8.1,3f9.3,1x,3f9.3)')
6825 & alph(2)*rad2deg,omeg(2)*rad2deg,theta(3)*rad2deg,xx,yy,zz,
6827 C," --- ", xx_w,yy_w,zz_w
6830 sumene1= x(1)+ x(2)*xx+ x(3)*yy+ x(4)*zz+ x(5)*xx**2
6831 & + x(6)*yy**2+ x(7)*zz**2+ x(8)*xx*zz+ x(9)*xx*yy
6833 sumene2= x(11) + x(12)*xx + x(13)*yy + x(14)*zz + x(15)*xx**2
6834 & + x(16)*yy**2 + x(17)*zz**2 + x(18)*xx*zz + x(19)*xx*yy
6836 sumene3= x(21) +x(22)*xx +x(23)*yy +x(24)*zz +x(25)*xx**2
6837 & +x(26)*yy**2 +x(27)*zz**2 +x(28)*xx*zz +x(29)*xx*yy
6838 & +x(30)*yy*zz +x(31)*xx**3 +x(32)*yy**3 +x(33)*zz**3
6839 & +x(34)*(xx**2)*yy +x(35)*(xx**2)*zz +x(36)*(yy**2)*xx
6840 & +x(37)*(yy**2)*zz +x(38)*(zz**2)*xx +x(39)*(zz**2)*yy
6842 sumene4= x(41) +x(42)*xx +x(43)*yy +x(44)*zz +x(45)*xx**2
6843 & +x(46)*yy**2 +x(47)*zz**2 +x(48)*xx*zz +x(49)*xx*yy
6844 & +x(50)*yy*zz +x(51)*xx**3 +x(52)*yy**3 +x(53)*zz**3
6845 & +x(54)*(xx**2)*yy +x(55)*(xx**2)*zz +x(56)*(yy**2)*xx
6846 & +x(57)*(yy**2)*zz +x(58)*(zz**2)*xx +x(59)*(zz**2)*yy
6848 dsc_i = 0.743d0+x(61)
6850 dscp1=dsqrt(dsc_i**2+dp2_i**2-2*dsc_i*dp2_i
6851 & *(xx*cost2tab(i+1)+yy*sint2tab(i+1)))
6852 dscp2=dsqrt(dsc_i**2+dp2_i**2-2*dsc_i*dp2_i
6853 & *(xx*cost2tab(i+1)-yy*sint2tab(i+1)))
6854 s1=(1+x(63))/(0.1d0 + dscp1)
6855 s1_6=(1+x(64))/(0.1d0 + dscp1**6)
6856 s2=(1+x(65))/(0.1d0 + dscp2)
6857 s2_6=(1+x(65))/(0.1d0 + dscp2**6)
6858 sumene = ( sumene3*sint2tab(i+1) + sumene1)*(s1+s1_6)
6859 & + (sumene4*cost2tab(i+1) +sumene2)*(s2+s2_6)
6860 c write(2,'(i2," sumene",7f9.3)') i,sumene1,sumene2,sumene3,
6862 c & dscp1,dscp2,sumene
6863 c sumene = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
6864 escloc = escloc + sumene
6865 c write (2,*) "i",i," escloc",sumene,escloc,it,itype(i)
6870 C This section to check the numerical derivatives of the energy of ith side
6871 C chain in xx, yy, zz, and theta. Use the -DDEBUG compiler option or insert
6872 C #define DEBUG in the code to turn it on.
6874 write (2,*) "sumene =",sumene
6878 write (2,*) xx,yy,zz
6879 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
6880 de_dxx_num=(sumenep-sumene)/aincr
6882 write (2,*) "xx+ sumene from enesc=",sumenep
6885 write (2,*) xx,yy,zz
6886 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
6887 de_dyy_num=(sumenep-sumene)/aincr
6889 write (2,*) "yy+ sumene from enesc=",sumenep
6892 write (2,*) xx,yy,zz
6893 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
6894 de_dzz_num=(sumenep-sumene)/aincr
6896 write (2,*) "zz+ sumene from enesc=",sumenep
6897 costsave=cost2tab(i+1)
6898 sintsave=sint2tab(i+1)
6899 cost2tab(i+1)=dcos(0.5d0*(theta(i+1)+aincr))
6900 sint2tab(i+1)=dsin(0.5d0*(theta(i+1)+aincr))
6901 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
6902 de_dt_num=(sumenep-sumene)/aincr
6903 write (2,*) " t+ sumene from enesc=",sumenep
6904 cost2tab(i+1)=costsave
6905 sint2tab(i+1)=sintsave
6906 C End of diagnostics section.
6909 C Compute the gradient of esc
6911 c zz=zz*dsign(1.0,dfloat(itype(i)))
6912 pom_s1=(1.0d0+x(63))/(0.1d0 + dscp1)**2
6913 pom_s16=6*(1.0d0+x(64))/(0.1d0 + dscp1**6)**2
6914 pom_s2=(1.0d0+x(65))/(0.1d0 + dscp2)**2
6915 pom_s26=6*(1.0d0+x(65))/(0.1d0 + dscp2**6)**2
6916 pom_dx=dsc_i*dp2_i*cost2tab(i+1)
6917 pom_dy=dsc_i*dp2_i*sint2tab(i+1)
6918 pom_dt1=-0.5d0*dsc_i*dp2_i*(xx*sint2tab(i+1)-yy*cost2tab(i+1))
6919 pom_dt2=-0.5d0*dsc_i*dp2_i*(xx*sint2tab(i+1)+yy*cost2tab(i+1))
6920 pom1=(sumene3*sint2tab(i+1)+sumene1)
6921 & *(pom_s1/dscp1+pom_s16*dscp1**4)
6922 pom2=(sumene4*cost2tab(i+1)+sumene2)
6923 & *(pom_s2/dscp2+pom_s26*dscp2**4)
6924 sumene1x=x(2)+2*x(5)*xx+x(8)*zz+ x(9)*yy
6925 sumene3x=x(22)+2*x(25)*xx+x(28)*zz+x(29)*yy+3*x(31)*xx**2
6926 & +2*x(34)*xx*yy +2*x(35)*xx*zz +x(36)*(yy**2) +x(38)*(zz**2)
6928 sumene2x=x(12)+2*x(15)*xx+x(18)*zz+ x(19)*yy
6929 sumene4x=x(42)+2*x(45)*xx +x(48)*zz +x(49)*yy +3*x(51)*xx**2
6930 & +2*x(54)*xx*yy+2*x(55)*xx*zz+x(56)*(yy**2)+x(58)*(zz**2)
6932 de_dxx =(sumene1x+sumene3x*sint2tab(i+1))*(s1+s1_6)
6933 & +(sumene2x+sumene4x*cost2tab(i+1))*(s2+s2_6)
6934 & +(pom1+pom2)*pom_dx
6936 write(2,*), "de_dxx = ", de_dxx,de_dxx_num,itype(i)
6939 sumene1y=x(3) + 2*x(6)*yy + x(9)*xx + x(10)*zz
6940 sumene3y=x(23) +2*x(26)*yy +x(29)*xx +x(30)*zz +3*x(32)*yy**2
6941 & +x(34)*(xx**2) +2*x(36)*yy*xx +2*x(37)*yy*zz +x(39)*(zz**2)
6943 sumene2y=x(13) + 2*x(16)*yy + x(19)*xx + x(20)*zz
6944 sumene4y=x(43)+2*x(46)*yy+x(49)*xx +x(50)*zz
6945 & +3*x(52)*yy**2+x(54)*xx**2+2*x(56)*yy*xx +2*x(57)*yy*zz
6946 & +x(59)*zz**2 +x(60)*xx*zz
6947 de_dyy =(sumene1y+sumene3y*sint2tab(i+1))*(s1+s1_6)
6948 & +(sumene2y+sumene4y*cost2tab(i+1))*(s2+s2_6)
6949 & +(pom1-pom2)*pom_dy
6951 write(2,*), "de_dyy = ", de_dyy,de_dyy_num,itype(i)
6954 de_dzz =(x(24) +2*x(27)*zz +x(28)*xx +x(30)*yy
6955 & +3*x(33)*zz**2 +x(35)*xx**2 +x(37)*yy**2 +2*x(38)*zz*xx
6956 & +2*x(39)*zz*yy +x(40)*xx*yy)*sint2tab(i+1)*(s1+s1_6)
6957 & +(x(4) + 2*x(7)*zz+ x(8)*xx + x(10)*yy)*(s1+s1_6)
6958 & +(x(44)+2*x(47)*zz +x(48)*xx +x(50)*yy +3*x(53)*zz**2
6959 & +x(55)*xx**2 +x(57)*(yy**2)+2*x(58)*zz*xx +2*x(59)*zz*yy
6960 & +x(60)*xx*yy)*cost2tab(i+1)*(s2+s2_6)
6961 & + ( x(14) + 2*x(17)*zz+ x(18)*xx + x(20)*yy)*(s2+s2_6)
6963 write(2,*), "de_dzz = ", de_dzz,de_dzz_num,itype(i)
6966 de_dt = 0.5d0*sumene3*cost2tab(i+1)*(s1+s1_6)
6967 & -0.5d0*sumene4*sint2tab(i+1)*(s2+s2_6)
6968 & +pom1*pom_dt1+pom2*pom_dt2
6970 write(2,*), "de_dt = ", de_dt,de_dt_num,itype(i)
6975 cossc=scalar(dc_norm(1,i),dc_norm(1,i+nres))
6976 cossc1=scalar(dc_norm(1,i-1),dc_norm(1,i+nres))
6977 cosfac2xx=cosfac2*xx
6978 sinfac2yy=sinfac2*yy
6980 dt_dCi(k) = -(dc_norm(k,i-1)+costtab(i+1)*dc_norm(k,i))*
6982 dt_dCi1(k)= -(dc_norm(k,i)+costtab(i+1)*dc_norm(k,i-1))*
6984 pom=(dC_norm(k,i+nres)-cossc*dC_norm(k,i))*vbld_inv(i+1)
6985 pom1=(dC_norm(k,i+nres)-cossc1*dC_norm(k,i-1))*vbld_inv(i)
6986 c write (iout,*) "i",i," k",k," pom",pom," pom1",pom1,
6987 c & " dt_dCi",dt_dCi(k)," dt_dCi1",dt_dCi1(k)
6988 c write (iout,*) "dC_norm",(dC_norm(j,i),j=1,3),
6989 c & (dC_norm(j,i-1),j=1,3)," vbld_inv",vbld_inv(i+1),vbld_inv(i)
6990 dXX_Ci(k)=pom*cosfac-dt_dCi(k)*cosfac2xx
6991 dXX_Ci1(k)=-pom1*cosfac-dt_dCi1(k)*cosfac2xx
6992 dYY_Ci(k)=pom*sinfac+dt_dCi(k)*sinfac2yy
6993 dYY_Ci1(k)=pom1*sinfac+dt_dCi1(k)*sinfac2yy
6997 dZZ_Ci(k)=dZZ_Ci(k)-uzgrad(j,k,2,i-1)
6998 & *dsign(1.0d0,dfloat(itype(i)))*dC_norm(j,i+nres)
6999 dZZ_Ci1(k)=dZZ_Ci1(k)-uzgrad(j,k,1,i-1)
7000 & *dsign(1.0d0,dfloat(itype(i)))*dC_norm(j,i+nres)
7003 dXX_XYZ(k)=vbld_inv(i+nres)*(x_prime(k)-xx*dC_norm(k,i+nres))
7004 dYY_XYZ(k)=vbld_inv(i+nres)*(y_prime(k)-yy*dC_norm(k,i+nres))
7005 dZZ_XYZ(k)=vbld_inv(i+nres)*
7006 & (z_prime(k)-zz*dC_norm(k,i+nres))
7008 dt_dCi(k) = -dt_dCi(k)/sinttab(i+1)
7009 dt_dCi1(k)= -dt_dCi1(k)/sinttab(i+1)
7013 dXX_Ctab(k,i)=dXX_Ci(k)
7014 dXX_C1tab(k,i)=dXX_Ci1(k)
7015 dYY_Ctab(k,i)=dYY_Ci(k)
7016 dYY_C1tab(k,i)=dYY_Ci1(k)
7017 dZZ_Ctab(k,i)=dZZ_Ci(k)
7018 dZZ_C1tab(k,i)=dZZ_Ci1(k)
7019 dXX_XYZtab(k,i)=dXX_XYZ(k)
7020 dYY_XYZtab(k,i)=dYY_XYZ(k)
7021 dZZ_XYZtab(k,i)=dZZ_XYZ(k)
7025 c write (iout,*) "k",k," dxx_ci1",dxx_ci1(k)," dyy_ci1",
7026 c & dyy_ci1(k)," dzz_ci1",dzz_ci1(k)
7027 c write (iout,*) "k",k," dxx_ci",dxx_ci(k)," dyy_ci",
7028 c & dyy_ci(k)," dzz_ci",dzz_ci(k)
7029 c write (iout,*) "k",k," dt_dci",dt_dci(k)," dt_dci",
7031 c write (iout,*) "k",k," dxx_XYZ",dxx_XYZ(k)," dyy_XYZ",
7032 c & dyy_XYZ(k)," dzz_XYZ",dzz_XYZ(k)
7033 gscloc(k,i-1)=gscloc(k,i-1)+de_dxx*dxx_ci1(k)
7034 & +de_dyy*dyy_ci1(k)+de_dzz*dzz_ci1(k)+de_dt*dt_dCi1(k)
7035 gscloc(k,i)=gscloc(k,i)+de_dxx*dxx_Ci(k)
7036 & +de_dyy*dyy_Ci(k)+de_dzz*dzz_Ci(k)+de_dt*dt_dCi(k)
7037 gsclocx(k,i)= de_dxx*dxx_XYZ(k)
7038 & +de_dyy*dyy_XYZ(k)+de_dzz*dzz_XYZ(k)
7040 c write(iout,*) "ENERGY GRAD = ", (gscloc(k,i-1),k=1,3),
7041 c & (gscloc(k,i),k=1,3),(gsclocx(k,i),k=1,3)
7043 C to check gradient call subroutine check_grad
7049 c------------------------------------------------------------------------------
7050 double precision function enesc(x,xx,yy,zz,cost2,sint2)
7052 double precision x(65),xx,yy,zz,cost2,sint2,sumene1,sumene2,
7053 & sumene3,sumene4,sumene,dsc_i,dp2_i,dscp1,dscp2,s1,s1_6,s2,s2_6
7054 sumene1= x(1)+ x(2)*xx+ x(3)*yy+ x(4)*zz+ x(5)*xx**2
7055 & + x(6)*yy**2+ x(7)*zz**2+ x(8)*xx*zz+ x(9)*xx*yy
7057 sumene2= x(11) + x(12)*xx + x(13)*yy + x(14)*zz + x(15)*xx**2
7058 & + x(16)*yy**2 + x(17)*zz**2 + x(18)*xx*zz + x(19)*xx*yy
7060 sumene3= x(21) +x(22)*xx +x(23)*yy +x(24)*zz +x(25)*xx**2
7061 & +x(26)*yy**2 +x(27)*zz**2 +x(28)*xx*zz +x(29)*xx*yy
7062 & +x(30)*yy*zz +x(31)*xx**3 +x(32)*yy**3 +x(33)*zz**3
7063 & +x(34)*(xx**2)*yy +x(35)*(xx**2)*zz +x(36)*(yy**2)*xx
7064 & +x(37)*(yy**2)*zz +x(38)*(zz**2)*xx +x(39)*(zz**2)*yy
7066 sumene4= x(41) +x(42)*xx +x(43)*yy +x(44)*zz +x(45)*xx**2
7067 & +x(46)*yy**2 +x(47)*zz**2 +x(48)*xx*zz +x(49)*xx*yy
7068 & +x(50)*yy*zz +x(51)*xx**3 +x(52)*yy**3 +x(53)*zz**3
7069 & +x(54)*(xx**2)*yy +x(55)*(xx**2)*zz +x(56)*(yy**2)*xx
7070 & +x(57)*(yy**2)*zz +x(58)*(zz**2)*xx +x(59)*(zz**2)*yy
7072 dsc_i = 0.743d0+x(61)
7074 dscp1=dsqrt(dsc_i**2+dp2_i**2-2*dsc_i*dp2_i
7075 & *(xx*cost2+yy*sint2))
7076 dscp2=dsqrt(dsc_i**2+dp2_i**2-2*dsc_i*dp2_i
7077 & *(xx*cost2-yy*sint2))
7078 s1=(1+x(63))/(0.1d0 + dscp1)
7079 s1_6=(1+x(64))/(0.1d0 + dscp1**6)
7080 s2=(1+x(65))/(0.1d0 + dscp2)
7081 s2_6=(1+x(65))/(0.1d0 + dscp2**6)
7082 sumene = ( sumene3*sint2 + sumene1)*(s1+s1_6)
7083 & + (sumene4*cost2 +sumene2)*(s2+s2_6)
7088 c------------------------------------------------------------------------------
7089 subroutine gcont(rij,r0ij,eps0ij,delta,fcont,fprimcont)
7091 C This procedure calculates two-body contact function g(rij) and its derivative:
7094 C g(rij) = esp0ij*(-0.9375*x+0.625*x**3-0.1875*x**5) ! -1 =< x =< 1
7097 C where x=(rij-r0ij)/delta
7099 C rij - interbody distance, r0ij - contact distance, eps0ij - contact energy
7102 double precision rij,r0ij,eps0ij,fcont,fprimcont
7103 double precision x,x2,x4,delta
7107 if (x.lt.-1.0D0) then
7110 else if (x.le.1.0D0) then
7113 fcont=eps0ij*(x*(-0.9375D0+0.6250D0*x2-0.1875D0*x4)+0.5D0)
7114 fprimcont=eps0ij * (-0.9375D0+1.8750D0*x2-0.9375D0*x4)/delta
7121 c------------------------------------------------------------------------------
7122 subroutine splinthet(theti,delta,ss,ssder)
7123 implicit real*8 (a-h,o-z)
7124 include 'DIMENSIONS'
7125 include 'COMMON.VAR'
7126 include 'COMMON.GEO'
7129 if (theti.gt.pipol) then
7130 call gcont(theti,thetup,1.0d0,delta,ss,ssder)
7132 call gcont(-theti,-thetlow,1.0d0,delta,ss,ssder)
7137 c------------------------------------------------------------------------------
7138 subroutine spline1(x,x0,delta,f0,f1,fprim0,f,fprim)
7140 double precision x,x0,delta,f0,f1,fprim0,f,fprim
7141 double precision ksi,ksi2,ksi3,a1,a2,a3
7142 a1=fprim0*delta/(f1-f0)
7148 f=f0+(f1-f0)*ksi*(a1+ksi*(a2+a3*ksi))
7149 fprim=(f1-f0)/delta*(a1+ksi*(2*a2+3*ksi*a3))
7152 c------------------------------------------------------------------------------
7153 subroutine spline2(x,x0,delta,f0x,f1x,fprim0x,fx)
7155 double precision x,x0,delta,f0x,f1x,fprim0x,fx
7156 double precision ksi,ksi2,ksi3,a1,a2,a3
7161 a2=3*(f1x-f0x)-2*fprim0x*delta
7162 a3=fprim0x*delta-2*(f1x-f0x)
7163 fx=f0x+a1*ksi+a2*ksi2+a3*ksi3
7166 C-----------------------------------------------------------------------------
7168 C-----------------------------------------------------------------------------
7169 subroutine etor(etors,edihcnstr)
7170 implicit real*8 (a-h,o-z)
7171 include 'DIMENSIONS'
7172 include 'COMMON.VAR'
7173 include 'COMMON.GEO'
7174 include 'COMMON.LOCAL'
7175 include 'COMMON.TORSION'
7176 include 'COMMON.INTERACT'
7177 include 'COMMON.DERIV'
7178 include 'COMMON.CHAIN'
7179 include 'COMMON.NAMES'
7180 include 'COMMON.IOUNITS'
7181 include 'COMMON.FFIELD'
7182 include 'COMMON.TORCNSTR'
7183 include 'COMMON.CONTROL'
7185 C Set lprn=.true. for debugging
7189 do i=iphi_start,iphi_end
7191 if (itype(i-2).eq.ntyp1.or. itype(i-1).eq.ntyp1
7192 & .or. itype(i).eq.ntyp1 .or. itype(i-3).eq.ntyp1) cycle
7193 itori=itortyp(itype(i-2))
7194 itori1=itortyp(itype(i-1))
7197 C Proline-Proline pair is a special case...
7198 if (itori.eq.3 .and. itori1.eq.3) then
7199 if (phii.gt.-dwapi3) then
7201 fac=1.0D0/(1.0D0-cosphi)
7202 etorsi=v1(1,3,3)*fac
7203 etorsi=etorsi+etorsi
7204 etors=etors+etorsi-v1(1,3,3)
7205 if (energy_dec) etors_ii=etors_ii+etorsi-v1(1,3,3)
7206 gloci=gloci-3*fac*etorsi*dsin(3*phii)
7209 v1ij=v1(j+1,itori,itori1)
7210 v2ij=v2(j+1,itori,itori1)
7213 etors=etors+v1ij*cosphi+v2ij*sinphi+dabs(v1ij)+dabs(v2ij)
7214 if (energy_dec) etors_ii=etors_ii+
7215 & v2ij*sinphi+dabs(v1ij)+dabs(v2ij)
7216 gloci=gloci+j*(v2ij*cosphi-v1ij*sinphi)
7220 v1ij=v1(j,itori,itori1)
7221 v2ij=v2(j,itori,itori1)
7224 etors=etors+v1ij*cosphi+v2ij*sinphi+dabs(v1ij)+dabs(v2ij)
7225 if (energy_dec) etors_ii=etors_ii+
7226 & v1ij*cosphi+v2ij*sinphi+dabs(v1ij)+dabs(v2ij)
7227 gloci=gloci+j*(v2ij*cosphi-v1ij*sinphi)
7230 if (energy_dec) write (iout,'(a6,i5,0pf7.3)')
7233 & write (iout,'(2(a3,2x,i3,2x),2i3,6f8.3/26x,6f8.3/)')
7234 & restyp(itype(i-2)),i-2,restyp(itype(i-1)),i-1,itori,itori1,
7235 & (v1(j,itori,itori1),j=1,6),(v2(j,itori,itori1),j=1,6)
7236 gloc(i-3,icg)=gloc(i-3,icg)+wtor*gloci
7237 c write (iout,*) 'i=',i,' gloc=',gloc(i-3,icg)
7239 ! 6/20/98 - dihedral angle constraints
7242 itori=idih_constr(i)
7245 if (difi.gt.drange(i)) then
7247 edihcnstr=edihcnstr+0.25d0*ftors(i)*difi**4
7248 gloc(itori-3,icg)=gloc(itori-3,icg)+ftors(i)*difi**3
7249 else if (difi.lt.-drange(i)) then
7251 edihcnstr=edihcnstr+0.25d0*ftors(i)**difi**4
7252 gloc(itori-3,icg)=gloc(itori-3,icg)+ftors(i)*difi**3
7254 ! write (iout,'(2i5,2f8.3,2e14.5)') i,itori,rad2deg*phii,
7255 ! & rad2deg*difi,0.25d0*ftors*difi**4,gloc(itori-3,icg)
7257 ! write (iout,*) 'edihcnstr',edihcnstr
7260 c------------------------------------------------------------------------------
7261 subroutine etor_d(etors_d)
7265 c----------------------------------------------------------------------------
7267 subroutine etor(etors,edihcnstr)
7268 implicit real*8 (a-h,o-z)
7269 include 'DIMENSIONS'
7270 include 'COMMON.VAR'
7271 include 'COMMON.GEO'
7272 include 'COMMON.LOCAL'
7273 include 'COMMON.TORSION'
7274 include 'COMMON.INTERACT'
7275 include 'COMMON.DERIV'
7276 include 'COMMON.CHAIN'
7277 include 'COMMON.NAMES'
7278 include 'COMMON.IOUNITS'
7279 include 'COMMON.FFIELD'
7280 include 'COMMON.TORCNSTR'
7281 include 'COMMON.CONTROL'
7283 C Set lprn=.true. for debugging
7287 do i=iphi_start,iphi_end
7288 C ANY TWO ARE DUMMY ATOMS in row CYCLE
7289 c if (((itype(i-3).eq.ntyp1).and.(itype(i-2).eq.ntyp1)).or.
7290 c & ((itype(i-2).eq.ntyp1).and.(itype(i-1).eq.ntyp1)) .or.
7291 c & ((itype(i-1).eq.ntyp1).and.(itype(i).eq.ntyp1))) cycle
7292 if (itype(i-2).eq.ntyp1.or. itype(i-1).eq.ntyp1
7293 & .or. itype(i).eq.ntyp1 .or. itype(i-3).eq.ntyp1) cycle
7294 C In current verion the ALL DUMMY ATOM POTENTIALS ARE OFF
7295 C For introducing the NH3+ and COO- group please check the etor_d for reference
7298 if (iabs(itype(i)).eq.20) then
7303 itori=itortyp(itype(i-2))
7304 itori1=itortyp(itype(i-1))
7307 C Regular cosine and sine terms
7308 do j=1,nterm(itori,itori1,iblock)
7309 v1ij=v1(j,itori,itori1,iblock)
7310 v2ij=v2(j,itori,itori1,iblock)
7313 etors=etors+v1ij*cosphi+v2ij*sinphi
7314 if (energy_dec) etors_ii=etors_ii+
7315 & v1ij*cosphi+v2ij*sinphi
7316 gloci=gloci+j*(v2ij*cosphi-v1ij*sinphi)
7320 C E = SUM ----------------------------------- - v1
7321 C [v2 cos(phi/2)+v3 sin(phi/2)]^2 + 1
7323 cosphi=dcos(0.5d0*phii)
7324 sinphi=dsin(0.5d0*phii)
7325 do j=1,nlor(itori,itori1,iblock)
7326 vl1ij=vlor1(j,itori,itori1)
7327 vl2ij=vlor2(j,itori,itori1)
7328 vl3ij=vlor3(j,itori,itori1)
7329 pom=vl2ij*cosphi+vl3ij*sinphi
7330 pom1=1.0d0/(pom*pom+1.0d0)
7331 etors=etors+vl1ij*pom1
7332 if (energy_dec) etors_ii=etors_ii+
7335 gloci=gloci+vl1ij*(vl3ij*cosphi-vl2ij*sinphi)*pom
7337 C Subtract the constant term
7338 etors=etors-v0(itori,itori1,iblock)
7339 if (energy_dec) write (iout,'(a6,i5,0pf7.3)')
7340 & 'etor',i,etors_ii-v0(itori,itori1,iblock)
7342 & write (iout,'(2(a3,2x,i3,2x),2i3,6f8.3/26x,6f8.3/)')
7343 & restyp(itype(i-2)),i-2,restyp(itype(i-1)),i-1,itori,itori1,
7344 & (v1(j,itori,itori1,iblock),j=1,6),
7345 & (v2(j,itori,itori1,iblock),j=1,6)
7346 gloc(i-3,icg)=gloc(i-3,icg)+wtor*gloci
7347 c write (iout,*) 'i=',i,' gloc=',gloc(i-3,icg)
7349 ! 6/20/98 - dihedral angle constraints
7351 c do i=1,ndih_constr
7352 do i=idihconstr_start,idihconstr_end
7353 itori=idih_constr(i)
7355 difi=pinorm(phii-phi0(i))
7356 if (difi.gt.drange(i)) then
7358 edihcnstr=edihcnstr+0.25d0*ftors(i)*difi**4
7359 gloc(itori-3,icg)=gloc(itori-3,icg)+ftors(i)*difi**3
7360 else if (difi.lt.-drange(i)) then
7362 edihcnstr=edihcnstr+0.25d0*ftors(i)*difi**4
7363 gloc(itori-3,icg)=gloc(itori-3,icg)+ftors(i)*difi**3
7367 if (energy_dec) then
7368 write (iout,'(a6,2i5,4f8.3,2e14.5)') "edihc",
7369 & i,itori,rad2deg*phii,
7370 & rad2deg*phi0(i), rad2deg*drange(i),
7371 & rad2deg*difi,0.25d0*ftors(i)*difi**4,gloc(itori-3,icg)
7374 cd write (iout,*) 'edihcnstr',edihcnstr
7377 c----------------------------------------------------------------------------
7378 subroutine etor_d(etors_d)
7379 C 6/23/01 Compute double torsional energy
7380 implicit real*8 (a-h,o-z)
7381 include 'DIMENSIONS'
7382 include 'COMMON.VAR'
7383 include 'COMMON.GEO'
7384 include 'COMMON.LOCAL'
7385 include 'COMMON.TORSION'
7386 include 'COMMON.INTERACT'
7387 include 'COMMON.DERIV'
7388 include 'COMMON.CHAIN'
7389 include 'COMMON.NAMES'
7390 include 'COMMON.IOUNITS'
7391 include 'COMMON.FFIELD'
7392 include 'COMMON.TORCNSTR'
7394 C Set lprn=.true. for debugging
7398 c write(iout,*) "a tu??"
7399 do i=iphid_start,iphid_end
7400 C ANY TWO ARE DUMMY ATOMS in row CYCLE
7401 C if (((itype(i-3).eq.ntyp1).and.(itype(i-2).eq.ntyp1)).or.
7402 C & ((itype(i-2).eq.ntyp1).and.(itype(i-1).eq.ntyp1)).or.
7403 C & ((itype(i-1).eq.ntyp1).and.(itype(i).eq.ntyp1)) .or.
7404 C & ((itype(i).eq.ntyp1).and.(itype(i+1).eq.ntyp1))) cycle
7405 if ((itype(i-2).eq.ntyp1).or.itype(i-3).eq.ntyp1.or.
7406 & (itype(i-1).eq.ntyp1).or.(itype(i).eq.ntyp1).or.
7407 & (itype(i+1).eq.ntyp1)) cycle
7408 C In current verion the ALL DUMMY ATOM POTENTIALS ARE OFF
7409 itori=itortyp(itype(i-2))
7410 itori1=itortyp(itype(i-1))
7411 itori2=itortyp(itype(i))
7417 if (iabs(itype(i+1)).eq.20) iblock=2
7418 C Iblock=2 Proline type
7419 C ADASKO: WHEN PARAMETERS FOR THIS TYPE OF BLOCKING GROUP IS READY UNCOMMENT
7420 C CHECK WEATHER THERE IS NECCESITY FOR iblock=3 for COO-
7421 C if (itype(i+1).eq.ntyp1) iblock=3
7422 C The problem of NH3+ group can be resolved by adding new parameters please note if there
7423 C IS or IS NOT need for this
7424 C IF Yes uncomment below and add to parmread.F appropriate changes and to v1cij and so on
7425 C is (itype(i-3).eq.ntyp1) ntblock=2
7426 C ntblock is N-terminal blocking group
7428 C Regular cosine and sine terms
7429 do j=1,ntermd_1(itori,itori1,itori2,iblock)
7430 C Example of changes for NH3+ blocking group
7431 C do j=1,ntermd_1(itori,itori1,itori2,iblock,ntblock)
7432 C v1cij=v1c(1,j,itori,itori1,itori2,iblock,ntblock)
7433 v1cij=v1c(1,j,itori,itori1,itori2,iblock)
7434 v1sij=v1s(1,j,itori,itori1,itori2,iblock)
7435 v2cij=v1c(2,j,itori,itori1,itori2,iblock)
7436 v2sij=v1s(2,j,itori,itori1,itori2,iblock)
7437 cosphi1=dcos(j*phii)
7438 sinphi1=dsin(j*phii)
7439 cosphi2=dcos(j*phii1)
7440 sinphi2=dsin(j*phii1)
7441 etors_d=etors_d+v1cij*cosphi1+v1sij*sinphi1+
7442 & v2cij*cosphi2+v2sij*sinphi2
7443 gloci1=gloci1+j*(v1sij*cosphi1-v1cij*sinphi1)
7444 gloci2=gloci2+j*(v2sij*cosphi2-v2cij*sinphi2)
7446 do k=2,ntermd_2(itori,itori1,itori2,iblock)
7448 v1cdij = v2c(k,l,itori,itori1,itori2,iblock)
7449 v2cdij = v2c(l,k,itori,itori1,itori2,iblock)
7450 v1sdij = v2s(k,l,itori,itori1,itori2,iblock)
7451 v2sdij = v2s(l,k,itori,itori1,itori2,iblock)
7452 cosphi1p2=dcos(l*phii+(k-l)*phii1)
7453 cosphi1m2=dcos(l*phii-(k-l)*phii1)
7454 sinphi1p2=dsin(l*phii+(k-l)*phii1)
7455 sinphi1m2=dsin(l*phii-(k-l)*phii1)
7456 etors_d=etors_d+v1cdij*cosphi1p2+v2cdij*cosphi1m2+
7457 & v1sdij*sinphi1p2+v2sdij*sinphi1m2
7458 gloci1=gloci1+l*(v1sdij*cosphi1p2+v2sdij*cosphi1m2
7459 & -v1cdij*sinphi1p2-v2cdij*sinphi1m2)
7460 gloci2=gloci2+(k-l)*(v1sdij*cosphi1p2-v2sdij*cosphi1m2
7461 & -v1cdij*sinphi1p2+v2cdij*sinphi1m2)
7464 gloc(i-3,icg)=gloc(i-3,icg)+wtor_d*gloci1
7465 gloc(i-2,icg)=gloc(i-2,icg)+wtor_d*gloci2
7470 C----------------------------------------------------------------------------------
7471 C The rigorous attempt to derive energy function
7472 subroutine etor_kcc(etors,edihcnstr)
7473 implicit real*8 (a-h,o-z)
7474 include 'DIMENSIONS'
7475 include 'COMMON.VAR'
7476 include 'COMMON.GEO'
7477 include 'COMMON.LOCAL'
7478 include 'COMMON.TORSION'
7479 include 'COMMON.INTERACT'
7480 include 'COMMON.DERIV'
7481 include 'COMMON.CHAIN'
7482 include 'COMMON.NAMES'
7483 include 'COMMON.IOUNITS'
7484 include 'COMMON.FFIELD'
7485 include 'COMMON.TORCNSTR'
7486 include 'COMMON.CONTROL'
7488 c double precision thybt1(maxtermkcc),thybt2(maxtermkcc)
7489 C Set lprn=.true. for debugging
7492 C print *,"wchodze kcc"
7493 if (lprn) write (iout,*) "etor_kcc tor_mode",tor_mode
7494 if (tor_mode.ne.2) then
7497 do i=iphi_start,iphi_end
7498 C ANY TWO ARE DUMMY ATOMS in row CYCLE
7499 c if (((itype(i-3).eq.ntyp1).and.(itype(i-2).eq.ntyp1)).or.
7500 c & ((itype(i-2).eq.ntyp1).and.(itype(i-1).eq.ntyp1)) .or.
7501 c & ((itype(i-1).eq.ntyp1).and.(itype(i).eq.ntyp1))) cycle
7502 if (itype(i-2).eq.ntyp1.or. itype(i-1).eq.ntyp1
7503 & .or. itype(i).eq.ntyp1 .or. itype(i-3).eq.ntyp1) cycle
7504 itori=itortyp_kcc(itype(i-2))
7505 itori1=itortyp_kcc(itype(i-1))
7510 sumnonchebyshev=0.0d0
7512 C to avoid multiple devision by 2
7513 c theti22=0.5d0*theta(i)
7514 C theta 12 is the theta_1 /2
7515 C theta 22 is theta_2 /2
7516 c theti12=0.5d0*theta(i-1)
7517 C and appropriate sinus function
7518 sinthet1=dsin(theta(i-1))
7519 sinthet2=dsin(theta(i))
7520 costhet1=dcos(theta(i-1))
7521 costhet2=dcos(theta(i))
7522 c Cosines of halves thetas
7523 costheti12=0.5d0*(1.0d0+costhet1)
7524 costheti22=0.5d0*(1.0d0+costhet2)
7525 C to speed up lets store its mutliplication
7526 sint1t2=sinthet2*sinthet1
7528 C \sum_{i=1}^n (sin(theta_1) * sin(theta_2))^n * (c_n* cos(n*gamma)
7529 C +d_n*sin(n*gamma)) *
7530 C \sum_{i=1}^m (1+a_m*Tb_m(cos(theta_1 /2))+b_m*Tb_m(cos(theta_2 /2)))
7531 C we have two sum 1) Non-Chebyshev which is with n and gamma
7533 do j=1,nterm_kcc(itori,itori1)
7535 nval=nterm_kcc_Tb(itori,itori1)
7536 v1ij=v1_kcc(j,itori,itori1)
7537 v2ij=v2_kcc(j,itori,itori1)
7538 c write (iout,*) "i",i," j",j," v1",v1ij," v2",v2ij
7539 C v1ij is c_n and d_n in euation above
7543 sint1t2n=sint1t2n*sint1t2
7544 sumth1tyb1=tschebyshev(1,nval,v11_chyb(1,j,itori,itori1),
7546 gradth1tyb1=-0.5d0*sinthet1*gradtschebyshev(0,nval-1,
7547 & v11_chyb(1,j,itori,itori1),costheti12)
7548 c write (iout,*) "v11",(v11_chyb(k,j,itori,itori1),k=1,nval),
7549 c & " sumth1tyb1",sumth1tyb1," gradth1tyb1",gradth1tyb1
7550 sumth2tyb1=tschebyshev(1,nval,v21_chyb(1,j,itori,itori1),
7552 gradth2tyb1=-0.5d0*sinthet2*gradtschebyshev(0,nval-1,
7553 & v21_chyb(1,j,itori,itori1),costheti22)
7554 c write (iout,*) "v21",(v21_chyb(k,j,itori,itori1),k=1,nval),
7555 c & " sumth2tyb1",sumth2tyb1," gradth2tyb1",gradth2tyb1
7556 sumth1tyb2=tschebyshev(1,nval,v12_chyb(1,j,itori,itori1),
7558 gradth1tyb2=-0.5d0*sinthet1*gradtschebyshev(0,nval-1,
7559 & v12_chyb(1,j,itori,itori1),costheti12)
7560 c write (iout,*) "v12",(v12_chyb(k,j,itori,itori1),k=1,nval),
7561 c & " sumth1tyb2",sumth1tyb2," gradth1tyb2",gradth1tyb2
7562 sumth2tyb2=tschebyshev(1,nval,v22_chyb(1,j,itori,itori1),
7564 gradth2tyb2=-0.5d0*sinthet2*gradtschebyshev(0,nval-1,
7565 & v22_chyb(1,j,itori,itori1),costheti22)
7566 c write (iout,*) "v22",(v22_chyb(k,j,itori,itori1),k=1,nval),
7567 c & " sumth2tyb2",sumth2tyb2," gradth2tyb2",gradth2tyb2
7568 C etors=etors+sint1t2n*(v1ij*cosphi+v2ij*sinphi)
7569 C if (energy_dec) etors_ii=etors_ii+
7570 C & v1ij*cosphi+v2ij*sinphi
7571 C glocig is the gradient local i site in gamma
7572 actval1=v1ij*cosphi*(1.0d0+sumth1tyb1+sumth2tyb1)
7573 actval2=v2ij*sinphi*(1.0d0+sumth1tyb2+sumth2tyb2)
7574 etori=etori+sint1t2n*(actval1+actval2)
7576 & j*sint1t2n*(v2ij*cosphi*(1.0d0+sumth1tyb2+sumth2tyb2)
7577 & -v1ij*sinphi*(1.0d0+sumth1tyb1+sumth2tyb1))
7578 C now gradient over theta_1
7580 & j*sint1t2n1*costhet1*sinthet2*(actval1+actval2)+
7581 & sint1t2n*(v1ij*cosphi*gradth1tyb1+v2ij*sinphi*gradth1tyb2)
7583 & j*sint1t2n1*sinthet1*costhet2*(actval1+actval2)+
7584 & sint1t2n*(v1ij*cosphi*gradth2tyb1+v2ij*sinphi*gradth2tyb2)
7586 C now the Czebyshev polinominal sum
7587 c do k=1,nterm_kcc_Tb(itori,itori1)
7588 c thybt1(k)=v1_chyb(k,j,itori,itori1)
7589 c thybt2(k)=v2_chyb(k,j,itori,itori1)
7593 C print *, sumth1thyb, gradthybt1, sumth2thyb, gradthybt2,
7595 C & (0,nterm_kcc_Tb(itori,itori1)-1,thybt2(1),
7596 C & dcos(theti22)**2),
7599 C now overal sumation
7600 C print *,"sumnon", sumnonchebyshev,sumth1thyb+sumth2thyb
7603 C derivative over gamma
7604 gloc(i-3,icg)=gloc(i-3,icg)+wtor*glocig
7605 C derivative over theta1
7606 gloc(nphi+i-3,icg)=gloc(nphi+i-3,icg)+wtor*glocit1
7607 C now derivative over theta2
7608 gloc(nphi+i-2,icg)=gloc(nphi+i-2,icg)+wtor*glocit2
7610 & write (iout,*) i-2,i-1,itype(i-2),itype(i-1),itori,itori1,
7611 & theta(i-1)*rad2deg,theta(i)*rad2deg,phii*rad2deg,etori
7613 C gloc(i-3,icg)=gloc(i-3,icg)+wtor*gloci
7614 ! 6/20/98 - dihedral angle constraints
7615 if (tor_mode.ne.2) then
7617 c do i=1,ndih_constr
7618 do i=idihconstr_start,idihconstr_end
7619 itori=idih_constr(i)
7621 difi=pinorm(phii-phi0(i))
7622 if (difi.gt.drange(i)) then
7624 edihcnstr=edihcnstr+0.25d0*ftors(i)*difi**4
7625 gloc(itori-3,icg)=gloc(itori-3,icg)+ftors(i)*difi**3
7626 else if (difi.lt.-drange(i)) then
7628 edihcnstr=edihcnstr+0.25d0*ftors(i)*difi**4
7629 gloc(itori-3,icg)=gloc(itori-3,icg)+ftors(i)*difi**3
7638 C The rigorous attempt to derive energy function
7639 subroutine ebend_kcc(etheta,ethetacnstr)
7641 implicit real*8 (a-h,o-z)
7642 include 'DIMENSIONS'
7643 include 'COMMON.VAR'
7644 include 'COMMON.GEO'
7645 include 'COMMON.LOCAL'
7646 include 'COMMON.TORSION'
7647 include 'COMMON.INTERACT'
7648 include 'COMMON.DERIV'
7649 include 'COMMON.CHAIN'
7650 include 'COMMON.NAMES'
7651 include 'COMMON.IOUNITS'
7652 include 'COMMON.FFIELD'
7653 include 'COMMON.TORCNSTR'
7654 include 'COMMON.CONTROL'
7656 double precision thybt1(maxtermkcc)
7657 C Set lprn=.true. for debugging
7660 C print *,"wchodze kcc"
7661 if (lprn) write (iout,*) "ebend_kcc tor_mode",tor_mode
7662 if (tor_mode.ne.2) etheta=0.0D0
7663 do i=ithet_start,ithet_end
7664 c print *,i,itype(i-1),itype(i),itype(i-2)
7665 if ((itype(i-1).eq.ntyp1).or.itype(i-2).eq.ntyp1
7666 & .or.itype(i).eq.ntyp1) cycle
7667 iti=itortyp_kcc(itype(i-1))
7668 sinthet=dsin(theta(i)/2.0d0)
7669 costhet=dcos(theta(i)/2.0d0)
7670 do j=1,nbend_kcc_Tb(iti)
7671 thybt1(j)=v1bend_chyb(j,iti)
7673 sumth1thyb=tschebyshev
7674 & (1,nbend_kcc_Tb(iti),thybt1(1),costhet)
7675 if (lprn) write (iout,*) i-1,itype(i-1),iti,theta(i)*rad2deg,
7677 ihelp=nbend_kcc_Tb(iti)-1
7678 gradthybt1=gradtschebyshev
7679 & (0,ihelp,thybt1(1),costhet)
7680 etheta=etheta+sumth1thyb
7681 C print *,sumth1thyb,gradthybt1,sinthet*(-0.5d0)
7682 gloc(nphi+i-2,icg)=gloc(nphi+i-2,icg)+wang*
7683 & gradthybt1*sinthet*(-0.5d0)
7685 if (tor_mode.ne.2) then
7687 C print *,ithetaconstr_start,ithetaconstr_end,"TU"
7688 do i=ithetaconstr_start,ithetaconstr_end
7689 itheta=itheta_constr(i)
7690 thetiii=theta(itheta)
7691 difi=pinorm(thetiii-theta_constr0(i))
7692 if (difi.gt.theta_drange(i)) then
7693 difi=difi-theta_drange(i)
7694 ethetacnstr=ethetacnstr+0.25d0*for_thet_constr(i)*difi**4
7695 gloc(itheta+nphi-2,icg)=gloc(itheta+nphi-2,icg)
7696 & +for_thet_constr(i)*difi**3
7697 else if (difi.lt.-drange(i)) then
7699 ethetacnstr=ethetacnstr+0.25d0*for_thet_constr(i)*difi**4
7700 gloc(itheta+nphi-2,icg)=gloc(itheta+nphi-2,icg)
7701 & +for_thet_constr(i)*difi**3
7705 if (energy_dec) then
7706 write (iout,'(a6,2i5,4f8.3,2e14.5)') "ethetc",
7707 & i,itheta,rad2deg*thetiii,
7708 & rad2deg*theta_constr0(i), rad2deg*theta_drange(i),
7709 & rad2deg*difi,0.25d0*for_thet_constr(i)*difi**4,
7710 & gloc(itheta+nphi-2,icg)
7716 c------------------------------------------------------------------------------
7717 subroutine eback_sc_corr(esccor)
7718 c 7/21/2007 Correlations between the backbone-local and side-chain-local
7719 c conformational states; temporarily implemented as differences
7720 c between UNRES torsional potentials (dependent on three types of
7721 c residues) and the torsional potentials dependent on all 20 types
7722 c of residues computed from AM1 energy surfaces of terminally-blocked
7723 c amino-acid residues.
7724 implicit real*8 (a-h,o-z)
7725 include 'DIMENSIONS'
7726 include 'COMMON.VAR'
7727 include 'COMMON.GEO'
7728 include 'COMMON.LOCAL'
7729 include 'COMMON.TORSION'
7730 include 'COMMON.SCCOR'
7731 include 'COMMON.INTERACT'
7732 include 'COMMON.DERIV'
7733 include 'COMMON.CHAIN'
7734 include 'COMMON.NAMES'
7735 include 'COMMON.IOUNITS'
7736 include 'COMMON.FFIELD'
7737 include 'COMMON.CONTROL'
7739 C Set lprn=.true. for debugging
7742 c write (iout,*) "EBACK_SC_COR",itau_start,itau_end
7744 do i=itau_start,itau_end
7745 if ((itype(i-2).eq.ntyp1).or.(itype(i-1).eq.ntyp1)) cycle
7747 isccori=isccortyp(itype(i-2))
7748 isccori1=isccortyp(itype(i-1))
7749 c write (iout,*) "EBACK_SC_COR",i,nterm_sccor(isccori,isccori1)
7751 do intertyp=1,3 !intertyp
7752 cc Added 09 May 2012 (Adasko)
7753 cc Intertyp means interaction type of backbone mainchain correlation:
7754 c 1 = SC...Ca...Ca...Ca
7755 c 2 = Ca...Ca...Ca...SC
7756 c 3 = SC...Ca...Ca...SCi
7758 if (((intertyp.eq.3).and.((itype(i-2).eq.10).or.
7759 & (itype(i-1).eq.10).or.(itype(i-2).eq.ntyp1).or.
7760 & (itype(i-1).eq.ntyp1)))
7761 & .or. ((intertyp.eq.1).and.((itype(i-2).eq.10)
7762 & .or.(itype(i-2).eq.ntyp1).or.(itype(i-1).eq.ntyp1)
7763 & .or.(itype(i).eq.ntyp1)))
7764 & .or.((intertyp.eq.2).and.((itype(i-1).eq.10).or.
7765 & (itype(i-1).eq.ntyp1).or.(itype(i-2).eq.ntyp1).or.
7766 & (itype(i-3).eq.ntyp1)))) cycle
7767 if ((intertyp.eq.2).and.(i.eq.4).and.(itype(1).eq.ntyp1)) cycle
7768 if ((intertyp.eq.1).and.(i.eq.nres).and.(itype(nres).eq.ntyp1))
7770 do j=1,nterm_sccor(isccori,isccori1)
7771 v1ij=v1sccor(j,intertyp,isccori,isccori1)
7772 v2ij=v2sccor(j,intertyp,isccori,isccori1)
7773 cosphi=dcos(j*tauangle(intertyp,i))
7774 sinphi=dsin(j*tauangle(intertyp,i))
7775 esccor=esccor+v1ij*cosphi+v2ij*sinphi
7776 gloci=gloci+j*(v2ij*cosphi-v1ij*sinphi)
7778 c write (iout,*) "EBACK_SC_COR",i,v1ij*cosphi+v2ij*sinphi,intertyp
7779 gloc_sc(intertyp,i-3,icg)=gloc_sc(intertyp,i-3,icg)+wsccor*gloci
7781 & write (iout,'(2(a3,2x,i3,2x),2i3,6f8.3/26x,6f8.3/)')
7782 & restyp(itype(i-2)),i-2,restyp(itype(i-1)),i-1,isccori,isccori1,
7783 & (v1sccor(j,intertyp,isccori,isccori1),j=1,6)
7784 & ,(v2sccor(j,intertyp,isccori,isccori1),j=1,6)
7785 gsccor_loc(i-3)=gsccor_loc(i-3)+gloci
7791 c----------------------------------------------------------------------------
7792 subroutine multibody(ecorr)
7793 C This subroutine calculates multi-body contributions to energy following
7794 C the idea of Skolnick et al. If side chains I and J make a contact and
7795 C at the same time side chains I+1 and J+1 make a contact, an extra
7796 C contribution equal to sqrt(eps(i,j)*eps(i+1,j+1)) is added.
7797 implicit real*8 (a-h,o-z)
7798 include 'DIMENSIONS'
7799 include 'COMMON.IOUNITS'
7800 include 'COMMON.DERIV'
7801 include 'COMMON.INTERACT'
7802 include 'COMMON.CONTACTS'
7803 double precision gx(3),gx1(3)
7806 C Set lprn=.true. for debugging
7810 write (iout,'(a)') 'Contact function values:'
7812 write (iout,'(i2,20(1x,i2,f10.5))')
7813 & i,(jcont(j,i),facont(j,i),j=1,num_cont(i))
7828 num_conti=num_cont(i)
7829 num_conti1=num_cont(i1)
7834 if (j1.eq.j+ishift .or. j1.eq.j-ishift) then
7835 cd write(iout,*)'i=',i,' j=',j,' i1=',i1,' j1=',j1,
7836 cd & ' ishift=',ishift
7837 C Contacts I--J and I+ISHIFT--J+-ISHIFT1 occur simultaneously.
7838 C The system gains extra energy.
7839 ecorr=ecorr+esccorr(i,j,i1,j1,jj,kk)
7840 endif ! j1==j+-ishift
7849 c------------------------------------------------------------------------------
7850 double precision function esccorr(i,j,k,l,jj,kk)
7851 implicit real*8 (a-h,o-z)
7852 include 'DIMENSIONS'
7853 include 'COMMON.IOUNITS'
7854 include 'COMMON.DERIV'
7855 include 'COMMON.INTERACT'
7856 include 'COMMON.CONTACTS'
7857 include 'COMMON.SHIELD'
7858 double precision gx(3),gx1(3)
7863 cd write (iout,'(4i5,3f10.5)') i,j,k,l,eij,ekl,-eij*ekl
7864 C Calculate the multi-body contribution to energy.
7865 C Calculate multi-body contributions to the gradient.
7866 cd write (iout,'(2(2i3,3f10.5))')i,j,(gacont(m,jj,i),m=1,3),
7867 cd & k,l,(gacont(m,kk,k),m=1,3)
7869 gx(m) =ekl*gacont(m,jj,i)
7870 gx1(m)=eij*gacont(m,kk,k)
7871 gradxorr(m,i)=gradxorr(m,i)-gx(m)
7872 gradxorr(m,j)=gradxorr(m,j)+gx(m)
7873 gradxorr(m,k)=gradxorr(m,k)-gx1(m)
7874 gradxorr(m,l)=gradxorr(m,l)+gx1(m)
7878 gradcorr(ll,m)=gradcorr(ll,m)+gx(ll)
7883 gradcorr(ll,m)=gradcorr(ll,m)+gx1(ll)
7889 c------------------------------------------------------------------------------
7890 subroutine multibody_hb(ecorr,ecorr5,ecorr6,n_corr,n_corr1)
7891 C This subroutine calculates multi-body contributions to hydrogen-bonding
7892 implicit real*8 (a-h,o-z)
7893 include 'DIMENSIONS'
7894 include 'COMMON.IOUNITS'
7897 parameter (max_cont=maxconts)
7898 parameter (max_dim=26)
7899 integer source,CorrelType,CorrelID,CorrelType1,CorrelID1,Error
7900 double precision zapas(max_dim,maxconts,max_fg_procs),
7901 & zapas_recv(max_dim,maxconts,max_fg_procs)
7902 common /przechowalnia/ zapas
7903 integer status(MPI_STATUS_SIZE),req(maxconts*2),
7904 & status_array(MPI_STATUS_SIZE,maxconts*2)
7906 include 'COMMON.SETUP'
7907 include 'COMMON.FFIELD'
7908 include 'COMMON.DERIV'
7909 include 'COMMON.INTERACT'
7910 include 'COMMON.CONTACTS'
7911 include 'COMMON.CONTROL'
7912 include 'COMMON.LOCAL'
7913 double precision gx(3),gx1(3),time00
7916 C Set lprn=.true. for debugging
7921 if (nfgtasks.le.1) goto 30
7923 write (iout,'(a)') 'Contact function values before RECEIVE:'
7925 write (iout,'(2i3,50(1x,i2,f5.2))')
7926 & i,num_cont_hb(i),(jcont_hb(j,i),facont_hb(j,i),
7927 & j=1,num_cont_hb(i))
7931 do i=1,ntask_cont_from
7934 do i=1,ntask_cont_to
7937 c write (iout,*) "ntask_cont_from",ntask_cont_from," ntask_cont_to",
7939 C Make the list of contacts to send to send to other procesors
7940 c write (iout,*) "limits",max0(iturn4_end-1,iatel_s),iturn3_end
7942 do i=iturn3_start,iturn3_end
7943 c write (iout,*) "make contact list turn3",i," num_cont",
7945 call add_hb_contact(i,i+2,iturn3_sent_local(1,i))
7947 do i=iturn4_start,iturn4_end
7948 c write (iout,*) "make contact list turn4",i," num_cont",
7950 call add_hb_contact(i,i+3,iturn4_sent_local(1,i))
7954 c write (iout,*) "make contact list longrange",i,ii," num_cont",
7956 do j=1,num_cont_hb(i)
7959 iproc=iint_sent_local(k,jjc,ii)
7960 c write (iout,*) "i",i," j",j," k",k," jjc",jjc," iproc",iproc
7961 if (iproc.gt.0) then
7962 ncont_sent(iproc)=ncont_sent(iproc)+1
7963 nn=ncont_sent(iproc)
7965 zapas(2,nn,iproc)=jjc
7966 zapas(3,nn,iproc)=facont_hb(j,i)
7967 zapas(4,nn,iproc)=ees0p(j,i)
7968 zapas(5,nn,iproc)=ees0m(j,i)
7969 zapas(6,nn,iproc)=gacont_hbr(1,j,i)
7970 zapas(7,nn,iproc)=gacont_hbr(2,j,i)
7971 zapas(8,nn,iproc)=gacont_hbr(3,j,i)
7972 zapas(9,nn,iproc)=gacontm_hb1(1,j,i)
7973 zapas(10,nn,iproc)=gacontm_hb1(2,j,i)
7974 zapas(11,nn,iproc)=gacontm_hb1(3,j,i)
7975 zapas(12,nn,iproc)=gacontp_hb1(1,j,i)
7976 zapas(13,nn,iproc)=gacontp_hb1(2,j,i)
7977 zapas(14,nn,iproc)=gacontp_hb1(3,j,i)
7978 zapas(15,nn,iproc)=gacontm_hb2(1,j,i)
7979 zapas(16,nn,iproc)=gacontm_hb2(2,j,i)
7980 zapas(17,nn,iproc)=gacontm_hb2(3,j,i)
7981 zapas(18,nn,iproc)=gacontp_hb2(1,j,i)
7982 zapas(19,nn,iproc)=gacontp_hb2(2,j,i)
7983 zapas(20,nn,iproc)=gacontp_hb2(3,j,i)
7984 zapas(21,nn,iproc)=gacontm_hb3(1,j,i)
7985 zapas(22,nn,iproc)=gacontm_hb3(2,j,i)
7986 zapas(23,nn,iproc)=gacontm_hb3(3,j,i)
7987 zapas(24,nn,iproc)=gacontp_hb3(1,j,i)
7988 zapas(25,nn,iproc)=gacontp_hb3(2,j,i)
7989 zapas(26,nn,iproc)=gacontp_hb3(3,j,i)
7996 & "Numbers of contacts to be sent to other processors",
7997 & (ncont_sent(i),i=1,ntask_cont_to)
7998 write (iout,*) "Contacts sent"
7999 do ii=1,ntask_cont_to
8001 iproc=itask_cont_to(ii)
8002 write (iout,*) nn," contacts to processor",iproc,
8003 & " of CONT_TO_COMM group"
8005 write(iout,'(2f5.0,4f10.5)')(zapas(j,i,ii),j=1,5)
8013 CorrelID1=nfgtasks+fg_rank+1
8015 C Receive the numbers of needed contacts from other processors
8016 do ii=1,ntask_cont_from
8017 iproc=itask_cont_from(ii)
8019 call MPI_Irecv(ncont_recv(ii),1,MPI_INTEGER,iproc,CorrelType,
8020 & FG_COMM,req(ireq),IERR)
8022 c write (iout,*) "IRECV ended"
8024 C Send the number of contacts needed by other processors
8025 do ii=1,ntask_cont_to
8026 iproc=itask_cont_to(ii)
8028 call MPI_Isend(ncont_sent(ii),1,MPI_INTEGER,iproc,CorrelType,
8029 & FG_COMM,req(ireq),IERR)
8031 c write (iout,*) "ISEND ended"
8032 c write (iout,*) "number of requests (nn)",ireq
8035 & call MPI_Waitall(ireq,req,status_array,ierr)
8037 c & "Numbers of contacts to be received from other processors",
8038 c & (ncont_recv(i),i=1,ntask_cont_from)
8042 do ii=1,ntask_cont_from
8043 iproc=itask_cont_from(ii)
8045 c write (iout,*) "Receiving",nn," contacts from processor",iproc,
8046 c & " of CONT_TO_COMM group"
8050 call MPI_Irecv(zapas_recv(1,1,ii),nn*max_dim,
8051 & MPI_DOUBLE_PRECISION,iproc,CorrelType1,FG_COMM,req(ireq),IERR)
8052 c write (iout,*) "ireq,req",ireq,req(ireq)
8055 C Send the contacts to processors that need them
8056 do ii=1,ntask_cont_to
8057 iproc=itask_cont_to(ii)
8059 c write (iout,*) nn," contacts to processor",iproc,
8060 c & " of CONT_TO_COMM group"
8063 call MPI_Isend(zapas(1,1,ii),nn*max_dim,MPI_DOUBLE_PRECISION,
8064 & iproc,CorrelType1,FG_COMM,req(ireq),IERR)
8065 c write (iout,*) "ireq,req",ireq,req(ireq)
8067 c write(iout,'(2f5.0,4f10.5)')(zapas(j,i,ii),j=1,5)
8071 c write (iout,*) "number of requests (contacts)",ireq
8072 c write (iout,*) "req",(req(i),i=1,4)
8075 & call MPI_Waitall(ireq,req,status_array,ierr)
8076 do iii=1,ntask_cont_from
8077 iproc=itask_cont_from(iii)
8080 write (iout,*) "Received",nn," contacts from processor",iproc,
8081 & " of CONT_FROM_COMM group"
8084 write(iout,'(2f5.0,4f10.5)')(zapas_recv(j,i,iii),j=1,5)
8089 ii=zapas_recv(1,i,iii)
8090 c Flag the received contacts to prevent double-counting
8091 jj=-zapas_recv(2,i,iii)
8092 c write (iout,*) "iii",iii," i",i," ii",ii," jj",jj
8094 nnn=num_cont_hb(ii)+1
8097 facont_hb(nnn,ii)=zapas_recv(3,i,iii)
8098 ees0p(nnn,ii)=zapas_recv(4,i,iii)
8099 ees0m(nnn,ii)=zapas_recv(5,i,iii)
8100 gacont_hbr(1,nnn,ii)=zapas_recv(6,i,iii)
8101 gacont_hbr(2,nnn,ii)=zapas_recv(7,i,iii)
8102 gacont_hbr(3,nnn,ii)=zapas_recv(8,i,iii)
8103 gacontm_hb1(1,nnn,ii)=zapas_recv(9,i,iii)
8104 gacontm_hb1(2,nnn,ii)=zapas_recv(10,i,iii)
8105 gacontm_hb1(3,nnn,ii)=zapas_recv(11,i,iii)
8106 gacontp_hb1(1,nnn,ii)=zapas_recv(12,i,iii)
8107 gacontp_hb1(2,nnn,ii)=zapas_recv(13,i,iii)
8108 gacontp_hb1(3,nnn,ii)=zapas_recv(14,i,iii)
8109 gacontm_hb2(1,nnn,ii)=zapas_recv(15,i,iii)
8110 gacontm_hb2(2,nnn,ii)=zapas_recv(16,i,iii)
8111 gacontm_hb2(3,nnn,ii)=zapas_recv(17,i,iii)
8112 gacontp_hb2(1,nnn,ii)=zapas_recv(18,i,iii)
8113 gacontp_hb2(2,nnn,ii)=zapas_recv(19,i,iii)
8114 gacontp_hb2(3,nnn,ii)=zapas_recv(20,i,iii)
8115 gacontm_hb3(1,nnn,ii)=zapas_recv(21,i,iii)
8116 gacontm_hb3(2,nnn,ii)=zapas_recv(22,i,iii)
8117 gacontm_hb3(3,nnn,ii)=zapas_recv(23,i,iii)
8118 gacontp_hb3(1,nnn,ii)=zapas_recv(24,i,iii)
8119 gacontp_hb3(2,nnn,ii)=zapas_recv(25,i,iii)
8120 gacontp_hb3(3,nnn,ii)=zapas_recv(26,i,iii)
8125 write (iout,'(a)') 'Contact function values after receive:'
8127 write (iout,'(2i3,50(1x,i3,f5.2))')
8128 & i,num_cont_hb(i),(jcont_hb(j,i),facont_hb(j,i),
8129 & j=1,num_cont_hb(i))
8136 write (iout,'(a)') 'Contact function values:'
8138 write (iout,'(2i3,50(1x,i3,f5.2))')
8139 & i,num_cont_hb(i),(jcont_hb(j,i),facont_hb(j,i),
8140 & j=1,num_cont_hb(i))
8144 C Remove the loop below after debugging !!!
8151 C Calculate the local-electrostatic correlation terms
8152 do i=min0(iatel_s,iturn4_start),max0(iatel_e,iturn3_end)
8154 num_conti=num_cont_hb(i)
8155 num_conti1=num_cont_hb(i+1)
8162 c write (iout,*) 'i=',i,' j=',j,' i1=',i1,' j1=',j1,
8163 c & ' jj=',jj,' kk=',kk
8164 if ((j.gt.0 .and. j1.gt.0 .or. j.gt.0 .and. j1.lt.0
8165 & .or. j.lt.0 .and. j1.gt.0) .and.
8166 & (jp1.eq.jp+1 .or. jp1.eq.jp-1)) then
8167 C Contacts I-J and (I+1)-(J+1) or (I+1)-(J-1) occur simultaneously.
8168 C The system gains extra energy.
8169 ecorr=ecorr+ehbcorr(i,jp,i+1,jp1,jj,kk,0.72D0,0.32D0)
8170 if (energy_dec) write (iout,'(a6,2i5,0pf7.3)')
8171 & 'ecorrh',i,j,ehbcorr(i,j,i+1,j1,jj,kk,0.72D0,0.32D0)
8173 else if (j1.eq.j) then
8174 C Contacts I-J and I-(J+1) occur simultaneously.
8175 C The system loses extra energy.
8176 c ecorr=ecorr+ehbcorr(i,j,i+1,j,jj,kk,0.60D0,-0.40D0)
8181 c write (iout,*) 'i=',i,' j=',j,' i1=',i1,' j1=',j1,
8182 c & ' jj=',jj,' kk=',kk
8184 C Contacts I-J and (I+1)-J occur simultaneously.
8185 C The system loses extra energy.
8186 c ecorr=ecorr+ehbcorr(i,j,i,j+1,jj,kk,0.60D0,-0.40D0)
8193 c------------------------------------------------------------------------------
8194 subroutine add_hb_contact(ii,jj,itask)
8195 implicit real*8 (a-h,o-z)
8196 include "DIMENSIONS"
8197 include "COMMON.IOUNITS"
8200 parameter (max_cont=maxconts)
8201 parameter (max_dim=26)
8202 include "COMMON.CONTACTS"
8203 double precision zapas(max_dim,maxconts,max_fg_procs),
8204 & zapas_recv(max_dim,maxconts,max_fg_procs)
8205 common /przechowalnia/ zapas
8206 integer i,j,ii,jj,iproc,itask(4),nn
8207 c write (iout,*) "itask",itask
8210 if (iproc.gt.0) then
8211 do j=1,num_cont_hb(ii)
8213 c write (iout,*) "i",ii," j",jj," jjc",jjc
8215 ncont_sent(iproc)=ncont_sent(iproc)+1
8216 nn=ncont_sent(iproc)
8217 zapas(1,nn,iproc)=ii
8218 zapas(2,nn,iproc)=jjc
8219 zapas(3,nn,iproc)=facont_hb(j,ii)
8220 zapas(4,nn,iproc)=ees0p(j,ii)
8221 zapas(5,nn,iproc)=ees0m(j,ii)
8222 zapas(6,nn,iproc)=gacont_hbr(1,j,ii)
8223 zapas(7,nn,iproc)=gacont_hbr(2,j,ii)
8224 zapas(8,nn,iproc)=gacont_hbr(3,j,ii)
8225 zapas(9,nn,iproc)=gacontm_hb1(1,j,ii)
8226 zapas(10,nn,iproc)=gacontm_hb1(2,j,ii)
8227 zapas(11,nn,iproc)=gacontm_hb1(3,j,ii)
8228 zapas(12,nn,iproc)=gacontp_hb1(1,j,ii)
8229 zapas(13,nn,iproc)=gacontp_hb1(2,j,ii)
8230 zapas(14,nn,iproc)=gacontp_hb1(3,j,ii)
8231 zapas(15,nn,iproc)=gacontm_hb2(1,j,ii)
8232 zapas(16,nn,iproc)=gacontm_hb2(2,j,ii)
8233 zapas(17,nn,iproc)=gacontm_hb2(3,j,ii)
8234 zapas(18,nn,iproc)=gacontp_hb2(1,j,ii)
8235 zapas(19,nn,iproc)=gacontp_hb2(2,j,ii)
8236 zapas(20,nn,iproc)=gacontp_hb2(3,j,ii)
8237 zapas(21,nn,iproc)=gacontm_hb3(1,j,ii)
8238 zapas(22,nn,iproc)=gacontm_hb3(2,j,ii)
8239 zapas(23,nn,iproc)=gacontm_hb3(3,j,ii)
8240 zapas(24,nn,iproc)=gacontp_hb3(1,j,ii)
8241 zapas(25,nn,iproc)=gacontp_hb3(2,j,ii)
8242 zapas(26,nn,iproc)=gacontp_hb3(3,j,ii)
8250 c------------------------------------------------------------------------------
8251 subroutine multibody_eello(ecorr,ecorr5,ecorr6,eturn6,n_corr,
8253 C This subroutine calculates multi-body contributions to hydrogen-bonding
8254 implicit real*8 (a-h,o-z)
8255 include 'DIMENSIONS'
8256 include 'COMMON.IOUNITS'
8259 parameter (max_cont=maxconts)
8260 parameter (max_dim=70)
8261 integer source,CorrelType,CorrelID,CorrelType1,CorrelID1,Error
8262 double precision zapas(max_dim,maxconts,max_fg_procs),
8263 & zapas_recv(max_dim,maxconts,max_fg_procs)
8264 common /przechowalnia/ zapas
8265 integer status(MPI_STATUS_SIZE),req(maxconts*2),
8266 & status_array(MPI_STATUS_SIZE,maxconts*2)
8268 include 'COMMON.SETUP'
8269 include 'COMMON.FFIELD'
8270 include 'COMMON.DERIV'
8271 include 'COMMON.LOCAL'
8272 include 'COMMON.INTERACT'
8273 include 'COMMON.CONTACTS'
8274 include 'COMMON.CHAIN'
8275 include 'COMMON.CONTROL'
8276 include 'COMMON.SHIELD'
8277 double precision gx(3),gx1(3)
8278 integer num_cont_hb_old(maxres)
8280 double precision eello4,eello5,eelo6,eello_turn6
8281 external eello4,eello5,eello6,eello_turn6
8282 C Set lprn=.true. for debugging
8287 num_cont_hb_old(i)=num_cont_hb(i)
8291 if (nfgtasks.le.1) goto 30
8293 write (iout,'(a)') 'Contact function values before RECEIVE:'
8295 write (iout,'(2i3,50(1x,i2,f5.2))')
8296 & i,num_cont_hb(i),(jcont_hb(j,i),facont_hb(j,i),
8297 & j=1,num_cont_hb(i))
8301 do i=1,ntask_cont_from
8304 do i=1,ntask_cont_to
8307 c write (iout,*) "ntask_cont_from",ntask_cont_from," ntask_cont_to",
8309 C Make the list of contacts to send to send to other procesors
8310 do i=iturn3_start,iturn3_end
8311 c write (iout,*) "make contact list turn3",i," num_cont",
8313 call add_hb_contact_eello(i,i+2,iturn3_sent_local(1,i))
8315 do i=iturn4_start,iturn4_end
8316 c write (iout,*) "make contact list turn4",i," num_cont",
8318 call add_hb_contact_eello(i,i+3,iturn4_sent_local(1,i))
8322 c write (iout,*) "make contact list longrange",i,ii," num_cont",
8324 do j=1,num_cont_hb(i)
8327 iproc=iint_sent_local(k,jjc,ii)
8328 c write (iout,*) "i",i," j",j," k",k," jjc",jjc," iproc",iproc
8329 if (iproc.ne.0) then
8330 ncont_sent(iproc)=ncont_sent(iproc)+1
8331 nn=ncont_sent(iproc)
8333 zapas(2,nn,iproc)=jjc
8334 zapas(3,nn,iproc)=d_cont(j,i)
8338 zapas(ind,nn,iproc)=grij_hb_cont(kk,j,i)
8343 zapas(ind,nn,iproc)=a_chuj(ll,kk,j,i)
8351 zapas(ind,nn,iproc)=a_chuj_der(mm,ll,kk,jj,j,i)
8362 & "Numbers of contacts to be sent to other processors",
8363 & (ncont_sent(i),i=1,ntask_cont_to)
8364 write (iout,*) "Contacts sent"
8365 do ii=1,ntask_cont_to
8367 iproc=itask_cont_to(ii)
8368 write (iout,*) nn," contacts to processor",iproc,
8369 & " of CONT_TO_COMM group"
8371 write(iout,'(2f5.0,10f10.5)')(zapas(j,i,ii),j=1,10)
8379 CorrelID1=nfgtasks+fg_rank+1
8381 C Receive the numbers of needed contacts from other processors
8382 do ii=1,ntask_cont_from
8383 iproc=itask_cont_from(ii)
8385 call MPI_Irecv(ncont_recv(ii),1,MPI_INTEGER,iproc,CorrelType,
8386 & FG_COMM,req(ireq),IERR)
8388 c write (iout,*) "IRECV ended"
8390 C Send the number of contacts needed by other processors
8391 do ii=1,ntask_cont_to
8392 iproc=itask_cont_to(ii)
8394 call MPI_Isend(ncont_sent(ii),1,MPI_INTEGER,iproc,CorrelType,
8395 & FG_COMM,req(ireq),IERR)
8397 c write (iout,*) "ISEND ended"
8398 c write (iout,*) "number of requests (nn)",ireq
8401 & call MPI_Waitall(ireq,req,status_array,ierr)
8403 c & "Numbers of contacts to be received from other processors",
8404 c & (ncont_recv(i),i=1,ntask_cont_from)
8408 do ii=1,ntask_cont_from
8409 iproc=itask_cont_from(ii)
8411 c write (iout,*) "Receiving",nn," contacts from processor",iproc,
8412 c & " of CONT_TO_COMM group"
8416 call MPI_Irecv(zapas_recv(1,1,ii),nn*max_dim,
8417 & MPI_DOUBLE_PRECISION,iproc,CorrelType1,FG_COMM,req(ireq),IERR)
8418 c write (iout,*) "ireq,req",ireq,req(ireq)
8421 C Send the contacts to processors that need them
8422 do ii=1,ntask_cont_to
8423 iproc=itask_cont_to(ii)
8425 c write (iout,*) nn," contacts to processor",iproc,
8426 c & " of CONT_TO_COMM group"
8429 call MPI_Isend(zapas(1,1,ii),nn*max_dim,MPI_DOUBLE_PRECISION,
8430 & iproc,CorrelType1,FG_COMM,req(ireq),IERR)
8431 c write (iout,*) "ireq,req",ireq,req(ireq)
8433 c write(iout,'(2f5.0,4f10.5)')(zapas(j,i,ii),j=1,5)
8437 c write (iout,*) "number of requests (contacts)",ireq
8438 c write (iout,*) "req",(req(i),i=1,4)
8441 & call MPI_Waitall(ireq,req,status_array,ierr)
8442 do iii=1,ntask_cont_from
8443 iproc=itask_cont_from(iii)
8446 write (iout,*) "Received",nn," contacts from processor",iproc,
8447 & " of CONT_FROM_COMM group"
8450 write(iout,'(2f5.0,10f10.5)')(zapas_recv(j,i,iii),j=1,10)
8455 ii=zapas_recv(1,i,iii)
8456 c Flag the received contacts to prevent double-counting
8457 jj=-zapas_recv(2,i,iii)
8458 c write (iout,*) "iii",iii," i",i," ii",ii," jj",jj
8460 nnn=num_cont_hb(ii)+1
8463 d_cont(nnn,ii)=zapas_recv(3,i,iii)
8467 grij_hb_cont(kk,nnn,ii)=zapas_recv(ind,i,iii)
8472 a_chuj(ll,kk,nnn,ii)=zapas_recv(ind,i,iii)
8480 a_chuj_der(mm,ll,kk,jj,nnn,ii)=zapas_recv(ind,i,iii)
8489 write (iout,'(a)') 'Contact function values after receive:'
8491 write (iout,'(2i3,50(1x,i3,5f6.3))')
8492 & i,num_cont_hb(i),(jcont_hb(j,i),d_cont(j,i),
8493 & ((a_chuj(ll,kk,j,i),ll=1,2),kk=1,2),j=1,num_cont_hb(i))
8500 write (iout,'(a)') 'Contact function values:'
8502 write (iout,'(2i3,50(1x,i2,5f6.3))')
8503 & i,num_cont_hb(i),(jcont_hb(j,i),d_cont(j,i),
8504 & ((a_chuj(ll,kk,j,i),ll=1,2),kk=1,2),j=1,num_cont_hb(i))
8510 C Remove the loop below after debugging !!!
8517 C Calculate the dipole-dipole interaction energies
8518 if (wcorr6.gt.0.0d0 .or. wturn6.gt.0.0d0) then
8519 do i=iatel_s,iatel_e+1
8520 num_conti=num_cont_hb(i)
8529 C Calculate the local-electrostatic correlation terms
8530 c write (iout,*) "gradcorr5 in eello5 before loop"
8532 c write (iout,'(i5,3f10.5)')
8533 c & iii,(gradcorr5(jjj,iii),jjj=1,3)
8535 do i=min0(iatel_s,iturn4_start),max0(iatel_e+1,iturn3_end+1)
8536 c write (iout,*) "corr loop i",i
8538 num_conti=num_cont_hb(i)
8539 num_conti1=num_cont_hb(i+1)
8546 c write (iout,*) 'i=',i,' j=',j,' i1=',i1,' j1=',j1,
8547 c & ' jj=',jj,' kk=',kk
8548 c if (j1.eq.j+1 .or. j1.eq.j-1) then
8549 if ((j.gt.0 .and. j1.gt.0 .or. j.gt.0 .and. j1.lt.0
8550 & .or. j.lt.0 .and. j1.gt.0) .and.
8551 & (jp1.eq.jp+1 .or. jp1.eq.jp-1)) then
8552 C Contacts I-J and (I+1)-(J+1) or (I+1)-(J-1) occur simultaneously.
8553 C The system gains extra energy.
8555 sqd1=dsqrt(d_cont(jj,i))
8556 sqd2=dsqrt(d_cont(kk,i1))
8557 sred_geom = sqd1*sqd2
8558 IF (sred_geom.lt.cutoff_corr) THEN
8559 call gcont(sred_geom,r0_corr,1.0D0,delt_corr,
8561 cd write (iout,*) 'i=',i,' j=',jp,' i1=',i1,' j1=',jp1,
8562 cd & ' jj=',jj,' kk=',kk
8563 fac_prim1=0.5d0*sqd2/sqd1*fprimcont
8564 fac_prim2=0.5d0*sqd1/sqd2*fprimcont
8566 g_contij(l,1)=fac_prim1*grij_hb_cont(l,jj,i)
8567 g_contij(l,2)=fac_prim2*grij_hb_cont(l,kk,i1)
8570 cd write (iout,*) 'sred_geom=',sred_geom,
8571 cd & ' ekont=',ekont,' fprim=',fprimcont,
8572 cd & ' fac_prim1',fac_prim1,' fac_prim2',fac_prim2
8573 cd write (iout,*) "g_contij",g_contij
8574 cd write (iout,*) "grij_hb_cont i",grij_hb_cont(:,jj,i)
8575 cd write (iout,*) "grij_hb_cont i1",grij_hb_cont(:,jj,i1)
8576 call calc_eello(i,jp,i+1,jp1,jj,kk)
8577 if (wcorr4.gt.0.0d0)
8578 & ecorr=ecorr+eello4(i,jp,i+1,jp1,jj,kk)
8579 CC & *fac_shield(i)**2*fac_shield(j)**2
8580 if (energy_dec.and.wcorr4.gt.0.0d0)
8581 1 write (iout,'(a6,4i5,0pf7.3)')
8582 2 'ecorr4',i,j,i+1,j1,eello4(i,jp,i+1,jp1,jj,kk)
8583 c write (iout,*) "gradcorr5 before eello5"
8585 c write (iout,'(i5,3f10.5)')
8586 c & iii,(gradcorr5(jjj,iii),jjj=1,3)
8588 if (wcorr5.gt.0.0d0)
8589 & ecorr5=ecorr5+eello5(i,jp,i+1,jp1,jj,kk)
8590 c write (iout,*) "gradcorr5 after eello5"
8592 c write (iout,'(i5,3f10.5)')
8593 c & iii,(gradcorr5(jjj,iii),jjj=1,3)
8595 if (energy_dec.and.wcorr5.gt.0.0d0)
8596 1 write (iout,'(a6,4i5,0pf7.3)')
8597 2 'ecorr5',i,j,i+1,j1,eello5(i,jp,i+1,jp1,jj,kk)
8598 cd write(2,*)'wcorr6',wcorr6,' wturn6',wturn6
8599 cd write(2,*)'ijkl',i,jp,i+1,jp1
8600 if (wcorr6.gt.0.0d0 .and. (jp.ne.i+4 .or. jp1.ne.i+3
8601 & .or. wturn6.eq.0.0d0))then
8602 cd write (iout,*) '******ecorr6: i,j,i+1,j1',i,j,i+1,j1
8603 ecorr6=ecorr6+eello6(i,jp,i+1,jp1,jj,kk)
8604 if (energy_dec) write (iout,'(a6,4i5,0pf7.3)')
8605 1 'ecorr6',i,j,i+1,j1,eello6(i,jp,i+1,jp1,jj,kk)
8606 cd write (iout,*) 'ecorr',ecorr,' ecorr5=',ecorr5,
8607 cd & 'ecorr6=',ecorr6
8608 cd write (iout,'(4e15.5)') sred_geom,
8609 cd & dabs(eello4(i,jp,i+1,jp1,jj,kk)),
8610 cd & dabs(eello5(i,jp,i+1,jp1,jj,kk)),
8611 cd & dabs(eello6(i,jp,i+1,jp1,jj,kk))
8612 else if (wturn6.gt.0.0d0
8613 & .and. (jp.eq.i+4 .and. jp1.eq.i+3)) then
8614 cd write (iout,*) '******eturn6: i,j,i+1,j1',i,jip,i+1,jp1
8615 eturn6=eturn6+eello_turn6(i,jj,kk)
8616 if (energy_dec) write (iout,'(a6,4i5,0pf7.3)')
8617 1 'eturn6',i,j,i+1,j1,eello_turn6(i,jj,kk)
8618 cd write (2,*) 'multibody_eello:eturn6',eturn6
8627 num_cont_hb(i)=num_cont_hb_old(i)
8629 c write (iout,*) "gradcorr5 in eello5"
8631 c write (iout,'(i5,3f10.5)')
8632 c & iii,(gradcorr5(jjj,iii),jjj=1,3)
8636 c------------------------------------------------------------------------------
8637 subroutine add_hb_contact_eello(ii,jj,itask)
8638 implicit real*8 (a-h,o-z)
8639 include "DIMENSIONS"
8640 include "COMMON.IOUNITS"
8643 parameter (max_cont=maxconts)
8644 parameter (max_dim=70)
8645 include "COMMON.CONTACTS"
8646 double precision zapas(max_dim,maxconts,max_fg_procs),
8647 & zapas_recv(max_dim,maxconts,max_fg_procs)
8648 common /przechowalnia/ zapas
8649 integer i,j,ii,jj,iproc,itask(4),nn
8650 c write (iout,*) "itask",itask
8653 if (iproc.gt.0) then
8654 do j=1,num_cont_hb(ii)
8656 c write (iout,*) "send turns i",ii," j",jj," jjc",jjc
8658 ncont_sent(iproc)=ncont_sent(iproc)+1
8659 nn=ncont_sent(iproc)
8660 zapas(1,nn,iproc)=ii
8661 zapas(2,nn,iproc)=jjc
8662 zapas(3,nn,iproc)=d_cont(j,ii)
8666 zapas(ind,nn,iproc)=grij_hb_cont(kk,j,ii)
8671 zapas(ind,nn,iproc)=a_chuj(ll,kk,j,ii)
8679 zapas(ind,nn,iproc)=a_chuj_der(mm,ll,kk,jj,j,ii)
8691 c------------------------------------------------------------------------------
8692 double precision function ehbcorr(i,j,k,l,jj,kk,coeffp,coeffm)
8693 implicit real*8 (a-h,o-z)
8694 include 'DIMENSIONS'
8695 include 'COMMON.IOUNITS'
8696 include 'COMMON.DERIV'
8697 include 'COMMON.INTERACT'
8698 include 'COMMON.CONTACTS'
8699 include 'COMMON.SHIELD'
8700 include 'COMMON.CONTROL'
8701 double precision gx(3),gx1(3)
8704 C print *,"wchodze",fac_shield(i),shield_mode
8712 ees=-(coeffp*ees0pij*ees0pkl+coeffm*ees0mij*ees0mkl)
8714 C & fac_shield(i)**2*fac_shield(j)**2
8715 cd ees=-(coeffp*ees0pkl+coeffm*ees0mkl)
8716 C Following 4 lines for diagnostics.
8721 c write (iout,'(2(a,2i3,a,f10.5,a,2f10.5),a,f10.5,a,$)')
8722 c & 'Contacts ',i,j,
8723 c & ' eij',eij,' eesij',ees0pij,ees0mij,' and ',k,l
8724 c & ,' fcont ',ekl,' eeskl',ees0pkl,ees0mkl,' energy=',ekont*ees,
8726 C Calculate the multi-body contribution to energy.
8727 C ecorr=ecorr+ekont*ees
8728 C Calculate multi-body contributions to the gradient.
8729 coeffpees0pij=coeffp*ees0pij
8730 coeffmees0mij=coeffm*ees0mij
8731 coeffpees0pkl=coeffp*ees0pkl
8732 coeffmees0mkl=coeffm*ees0mkl
8734 cgrad ghalfi=ees*ekl*gacont_hbr(ll,jj,i)
8735 gradcorr(ll,i)=gradcorr(ll,i)!+0.5d0*ghalfi
8736 & -ekont*(coeffpees0pkl*gacontp_hb1(ll,jj,i)+
8737 & coeffmees0mkl*gacontm_hb1(ll,jj,i))
8738 gradcorr(ll,j)=gradcorr(ll,j)!+0.5d0*ghalfi
8739 & -ekont*(coeffpees0pkl*gacontp_hb2(ll,jj,i)+
8740 & coeffmees0mkl*gacontm_hb2(ll,jj,i))
8741 cgrad ghalfk=ees*eij*gacont_hbr(ll,kk,k)
8742 gradcorr(ll,k)=gradcorr(ll,k)!+0.5d0*ghalfk
8743 & -ekont*(coeffpees0pij*gacontp_hb1(ll,kk,k)+
8744 & coeffmees0mij*gacontm_hb1(ll,kk,k))
8745 gradcorr(ll,l)=gradcorr(ll,l)!+0.5d0*ghalfk
8746 & -ekont*(coeffpees0pij*gacontp_hb2(ll,kk,k)+
8747 & coeffmees0mij*gacontm_hb2(ll,kk,k))
8748 gradlongij=ees*ekl*gacont_hbr(ll,jj,i)-
8749 & ekont*(coeffpees0pkl*gacontp_hb3(ll,jj,i)+
8750 & coeffmees0mkl*gacontm_hb3(ll,jj,i))
8751 gradcorr_long(ll,j)=gradcorr_long(ll,j)+gradlongij
8752 gradcorr_long(ll,i)=gradcorr_long(ll,i)-gradlongij
8753 gradlongkl=ees*eij*gacont_hbr(ll,kk,k)-
8754 & ekont*(coeffpees0pij*gacontp_hb3(ll,kk,k)+
8755 & coeffmees0mij*gacontm_hb3(ll,kk,k))
8756 gradcorr_long(ll,l)=gradcorr_long(ll,l)+gradlongkl
8757 gradcorr_long(ll,k)=gradcorr_long(ll,k)-gradlongkl
8758 c write (iout,'(2f10.5,2x,$)') gradlongij,gradlongkl
8763 cgrad gradcorr(ll,m)=gradcorr(ll,m)+
8764 cgrad & ees*ekl*gacont_hbr(ll,jj,i)-
8765 cgrad & ekont*(coeffp*ees0pkl*gacontp_hb3(ll,jj,i)+
8766 cgrad & coeffm*ees0mkl*gacontm_hb3(ll,jj,i))
8771 cgrad gradcorr(ll,m)=gradcorr(ll,m)+
8772 cgrad & ees*eij*gacont_hbr(ll,kk,k)-
8773 cgrad & ekont*(coeffp*ees0pij*gacontp_hb3(ll,kk,k)+
8774 cgrad & coeffm*ees0mij*gacontm_hb3(ll,kk,k))
8777 c write (iout,*) "ehbcorr",ekont*ees
8778 C print *,ekont,ees,i,k
8780 C now gradient over shielding
8782 if (shield_mode.gt.0) then
8785 C print *,i,j,fac_shield(i),fac_shield(j),
8786 C &fac_shield(k),fac_shield(l)
8787 if ((fac_shield(i).gt.0).and.(fac_shield(j).gt.0).and.
8788 & (fac_shield(k).gt.0).and.(fac_shield(l).gt.0)) then
8789 do ilist=1,ishield_list(i)
8790 iresshield=shield_list(ilist,i)
8792 rlocshield=grad_shield_side(m,ilist,i)*ehbcorr/fac_shield(i)
8794 gshieldx_ec(m,iresshield)=gshieldx_ec(m,iresshield)+
8796 & +grad_shield_loc(m,ilist,i)*ehbcorr/fac_shield(i)
8797 gshieldc_ec(m,iresshield-1)=gshieldc_ec(m,iresshield-1)
8801 do ilist=1,ishield_list(j)
8802 iresshield=shield_list(ilist,j)
8804 rlocshield=grad_shield_side(m,ilist,j)*ehbcorr/fac_shield(j)
8806 gshieldx_ec(m,iresshield)=gshieldx_ec(m,iresshield)+
8808 & +grad_shield_loc(m,ilist,j)*ehbcorr/fac_shield(j)
8809 gshieldc_ec(m,iresshield-1)=gshieldc_ec(m,iresshield-1)
8814 do ilist=1,ishield_list(k)
8815 iresshield=shield_list(ilist,k)
8817 rlocshield=grad_shield_side(m,ilist,k)*ehbcorr/fac_shield(k)
8819 gshieldx_ec(m,iresshield)=gshieldx_ec(m,iresshield)+
8821 & +grad_shield_loc(m,ilist,k)*ehbcorr/fac_shield(k)
8822 gshieldc_ec(m,iresshield-1)=gshieldc_ec(m,iresshield-1)
8826 do ilist=1,ishield_list(l)
8827 iresshield=shield_list(ilist,l)
8829 rlocshield=grad_shield_side(m,ilist,l)*ehbcorr/fac_shield(l)
8831 gshieldx_ec(m,iresshield)=gshieldx_ec(m,iresshield)+
8833 & +grad_shield_loc(m,ilist,l)*ehbcorr/fac_shield(l)
8834 gshieldc_ec(m,iresshield-1)=gshieldc_ec(m,iresshield-1)
8838 C print *,gshieldx(m,iresshield)
8840 gshieldc_ec(m,i)=gshieldc_ec(m,i)+
8841 & grad_shield(m,i)*ehbcorr/fac_shield(i)
8842 gshieldc_ec(m,j)=gshieldc_ec(m,j)+
8843 & grad_shield(m,j)*ehbcorr/fac_shield(j)
8844 gshieldc_ec(m,i-1)=gshieldc_ec(m,i-1)+
8845 & grad_shield(m,i)*ehbcorr/fac_shield(i)
8846 gshieldc_ec(m,j-1)=gshieldc_ec(m,j-1)+
8847 & grad_shield(m,j)*ehbcorr/fac_shield(j)
8849 gshieldc_ec(m,k)=gshieldc_ec(m,k)+
8850 & grad_shield(m,k)*ehbcorr/fac_shield(k)
8851 gshieldc_ec(m,l)=gshieldc_ec(m,l)+
8852 & grad_shield(m,l)*ehbcorr/fac_shield(l)
8853 gshieldc_ec(m,k-1)=gshieldc_ec(m,k-1)+
8854 & grad_shield(m,k)*ehbcorr/fac_shield(k)
8855 gshieldc_ec(m,l-1)=gshieldc_ec(m,l-1)+
8856 & grad_shield(m,l)*ehbcorr/fac_shield(l)
8864 C---------------------------------------------------------------------------
8865 subroutine dipole(i,j,jj)
8866 implicit real*8 (a-h,o-z)
8867 include 'DIMENSIONS'
8868 include 'COMMON.IOUNITS'
8869 include 'COMMON.CHAIN'
8870 include 'COMMON.FFIELD'
8871 include 'COMMON.DERIV'
8872 include 'COMMON.INTERACT'
8873 include 'COMMON.CONTACTS'
8874 include 'COMMON.TORSION'
8875 include 'COMMON.VAR'
8876 include 'COMMON.GEO'
8877 dimension dipi(2,2),dipj(2,2),dipderi(2),dipderj(2),auxvec(2),
8879 iti1 = itortyp(itype(i+1))
8880 if (j.lt.nres-1) then
8881 itj1 = itype2loc(itype(j+1))
8886 dipi(iii,1)=Ub2(iii,i)
8887 dipderi(iii)=Ub2der(iii,i)
8888 dipi(iii,2)=b1(iii,i+1)
8889 dipj(iii,1)=Ub2(iii,j)
8890 dipderj(iii)=Ub2der(iii,j)
8891 dipj(iii,2)=b1(iii,j+1)
8895 call matvec2(a_chuj(1,1,jj,i),dipj(1,iii),auxvec(1))
8898 dip(kkk,jj,i)=scalar2(dipi(1,jjj),auxvec(1))
8905 call matvec2(a_chuj_der(1,1,lll,kkk,jj,i),dipj(1,iii),
8909 dipderx(lll,kkk,mmm,jj,i)=scalar2(dipi(1,jjj),auxvec(1))
8914 call transpose2(a_chuj(1,1,jj,i),auxmat(1,1))
8915 call matvec2(auxmat(1,1),dipderi(1),auxvec(1))
8917 dipderg(iii,jj,i)=scalar2(auxvec(1),dipj(1,iii))
8919 call matvec2(a_chuj(1,1,jj,i),dipderj(1),auxvec(1))
8921 dipderg(iii+2,jj,i)=scalar2(auxvec(1),dipi(1,iii))
8926 C---------------------------------------------------------------------------
8927 subroutine calc_eello(i,j,k,l,jj,kk)
8929 C This subroutine computes matrices and vectors needed to calculate
8930 C the fourth-, fifth-, and sixth-order local-electrostatic terms.
8932 implicit real*8 (a-h,o-z)
8933 include 'DIMENSIONS'
8934 include 'COMMON.IOUNITS'
8935 include 'COMMON.CHAIN'
8936 include 'COMMON.DERIV'
8937 include 'COMMON.INTERACT'
8938 include 'COMMON.CONTACTS'
8939 include 'COMMON.TORSION'
8940 include 'COMMON.VAR'
8941 include 'COMMON.GEO'
8942 include 'COMMON.FFIELD'
8943 double precision aa1(2,2),aa2(2,2),aa1t(2,2),aa2t(2,2),
8944 & aa1tder(2,2,3,5),aa2tder(2,2,3,5),auxmat(2,2)
8947 cd write (iout,*) 'calc_eello: i=',i,' j=',j,' k=',k,' l=',l,
8948 cd & ' jj=',jj,' kk=',kk
8949 cd if (i.ne.2 .or. j.ne.4 .or. k.ne.3 .or. l.ne.5) return
8950 cd write (iout,*) "a_chujij",((a_chuj(iii,jjj,jj,i),iii=1,2),jjj=1,2)
8951 cd write (iout,*) "a_chujkl",((a_chuj(iii,jjj,kk,k),iii=1,2),jjj=1,2)
8954 aa1(iii,jjj)=a_chuj(iii,jjj,jj,i)
8955 aa2(iii,jjj)=a_chuj(iii,jjj,kk,k)
8958 call transpose2(aa1(1,1),aa1t(1,1))
8959 call transpose2(aa2(1,1),aa2t(1,1))
8962 call transpose2(a_chuj_der(1,1,lll,kkk,jj,i),
8963 & aa1tder(1,1,lll,kkk))
8964 call transpose2(a_chuj_der(1,1,lll,kkk,kk,k),
8965 & aa2tder(1,1,lll,kkk))
8969 C parallel orientation of the two CA-CA-CA frames.
8971 iti=itype2loc(itype(i))
8975 itk1=itype2loc(itype(k+1))
8976 itj=itype2loc(itype(j))
8977 if (l.lt.nres-1) then
8978 itl1=itype2loc(itype(l+1))
8982 C A1 kernel(j+1) A2T
8984 cd write (iout,'(3f10.5,5x,3f10.5)')
8985 cd & (EUg(iii,jjj,k),jjj=1,2),(EUg(iii,jjj,l),jjj=1,2)
8987 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
8988 & aa2tder(1,1,1,1),1,.false.,EUg(1,1,l),EUgder(1,1,l),
8989 & AEA(1,1,1),AEAderg(1,1,1),AEAderx(1,1,1,1,1,1))
8990 C Following matrices are needed only for 6-th order cumulants
8991 IF (wcorr6.gt.0.0d0) THEN
8992 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
8993 & aa2tder(1,1,1,1),1,.false.,EUgC(1,1,l),EUgCder(1,1,l),
8994 & AECA(1,1,1),AECAderg(1,1,1),AECAderx(1,1,1,1,1,1))
8995 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
8996 & aa2tder(1,1,1,1),2,.false.,Ug2DtEUg(1,1,l),
8997 & Ug2DtEUgder(1,1,1,l),ADtEA(1,1,1),ADtEAderg(1,1,1,1),
8998 & ADtEAderx(1,1,1,1,1,1))
9000 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
9001 & aa2tder(1,1,1,1),2,.false.,DtUg2EUg(1,1,l),
9002 & DtUg2EUgder(1,1,1,l),ADtEA1(1,1,1),ADtEA1derg(1,1,1,1),
9003 & ADtEA1derx(1,1,1,1,1,1))
9005 C End 6-th order cumulants
9008 cd write (2,*) 'In calc_eello6'
9010 cd write (2,*) 'iii=',iii
9012 cd write (2,*) 'kkk=',kkk
9014 cd write (2,'(3(2f10.5),5x)')
9015 cd & ((ADtEA1derx(jjj,mmm,lll,kkk,iii,1),mmm=1,2),lll=1,3)
9020 call transpose2(EUgder(1,1,k),auxmat(1,1))
9021 call matmat2(auxmat(1,1),AEA(1,1,1),EAEAderg(1,1,1,1))
9022 call transpose2(EUg(1,1,k),auxmat(1,1))
9023 call matmat2(auxmat(1,1),AEA(1,1,1),EAEA(1,1,1))
9024 call matmat2(auxmat(1,1),AEAderg(1,1,1),EAEAderg(1,1,2,1))
9028 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,1),
9029 & EAEAderx(1,1,lll,kkk,iii,1))
9033 C A1T kernel(i+1) A2
9034 call kernel(aa1t(1,1),aa2(1,1),aa1tder(1,1,1,1),
9035 & a_chuj_der(1,1,1,1,kk,k),1,.false.,EUg(1,1,k),EUgder(1,1,k),
9036 & AEA(1,1,2),AEAderg(1,1,2),AEAderx(1,1,1,1,1,2))
9037 C Following matrices are needed only for 6-th order cumulants
9038 IF (wcorr6.gt.0.0d0) THEN
9039 call kernel(aa1t(1,1),aa2(1,1),aa1tder(1,1,1,1),
9040 & a_chuj_der(1,1,1,1,kk,k),1,.false.,EUgC(1,1,k),EUgCder(1,1,k),
9041 & AECA(1,1,2),AECAderg(1,1,2),AECAderx(1,1,1,1,1,2))
9042 call kernel(aa1t(1,1),aa2(1,1),aa1tder(1,1,1,1),
9043 & a_chuj_der(1,1,1,1,kk,k),2,.false.,Ug2DtEUg(1,1,k),
9044 & Ug2DtEUgder(1,1,1,k),ADtEA(1,1,2),ADtEAderg(1,1,1,2),
9045 & ADtEAderx(1,1,1,1,1,2))
9046 call kernel(aa1t(1,1),aa2(1,1),aa1tder(1,1,1,1),
9047 & a_chuj_der(1,1,1,1,kk,k),2,.false.,DtUg2EUg(1,1,k),
9048 & DtUg2EUgder(1,1,1,k),ADtEA1(1,1,2),ADtEA1derg(1,1,1,2),
9049 & ADtEA1derx(1,1,1,1,1,2))
9051 C End 6-th order cumulants
9052 call transpose2(EUgder(1,1,l),auxmat(1,1))
9053 call matmat2(auxmat(1,1),AEA(1,1,2),EAEAderg(1,1,1,2))
9054 call transpose2(EUg(1,1,l),auxmat(1,1))
9055 call matmat2(auxmat(1,1),AEA(1,1,2),EAEA(1,1,2))
9056 call matmat2(auxmat(1,1),AEAderg(1,1,2),EAEAderg(1,1,2,2))
9060 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,2),
9061 & EAEAderx(1,1,lll,kkk,iii,2))
9066 C Calculate the vectors and their derivatives in virtual-bond dihedral angles.
9067 C They are needed only when the fifth- or the sixth-order cumulants are
9069 IF (wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0) THEN
9070 call transpose2(AEA(1,1,1),auxmat(1,1))
9071 call matvec2(auxmat(1,1),b1(1,i),AEAb1(1,1,1))
9072 call matvec2(auxmat(1,1),Ub2(1,i),AEAb2(1,1,1))
9073 call matvec2(auxmat(1,1),Ub2der(1,i),AEAb2derg(1,2,1,1))
9074 call transpose2(AEAderg(1,1,1),auxmat(1,1))
9075 call matvec2(auxmat(1,1),b1(1,i),AEAb1derg(1,1,1))
9076 call matvec2(auxmat(1,1),Ub2(1,i),AEAb2derg(1,1,1,1))
9077 call matvec2(AEA(1,1,1),b1(1,k+1),AEAb1(1,2,1))
9078 call matvec2(AEAderg(1,1,1),b1(1,k+1),AEAb1derg(1,2,1))
9079 call matvec2(AEA(1,1,1),Ub2(1,k+1),AEAb2(1,2,1))
9080 call matvec2(AEAderg(1,1,1),Ub2(1,k+1),AEAb2derg(1,1,2,1))
9081 call matvec2(AEA(1,1,1),Ub2der(1,k+1),AEAb2derg(1,2,2,1))
9082 call transpose2(AEA(1,1,2),auxmat(1,1))
9083 call matvec2(auxmat(1,1),b1(1,j),AEAb1(1,1,2))
9084 call matvec2(auxmat(1,1),Ub2(1,j),AEAb2(1,1,2))
9085 call matvec2(auxmat(1,1),Ub2der(1,j),AEAb2derg(1,2,1,2))
9086 call transpose2(AEAderg(1,1,2),auxmat(1,1))
9087 call matvec2(auxmat(1,1),b1(1,j),AEAb1derg(1,1,2))
9088 call matvec2(auxmat(1,1),Ub2(1,j),AEAb2derg(1,1,1,2))
9089 call matvec2(AEA(1,1,2),b1(1,l+1),AEAb1(1,2,2))
9090 call matvec2(AEAderg(1,1,2),b1(1,l+1),AEAb1derg(1,2,2))
9091 call matvec2(AEA(1,1,2),Ub2(1,l+1),AEAb2(1,2,2))
9092 call matvec2(AEAderg(1,1,2),Ub2(1,l+1),AEAb2derg(1,1,2,2))
9093 call matvec2(AEA(1,1,2),Ub2der(1,l+1),AEAb2derg(1,2,2,2))
9094 C Calculate the Cartesian derivatives of the vectors.
9098 call transpose2(AEAderx(1,1,lll,kkk,iii,1),auxmat(1,1))
9099 call matvec2(auxmat(1,1),b1(1,i),
9100 & AEAb1derx(1,lll,kkk,iii,1,1))
9101 call matvec2(auxmat(1,1),Ub2(1,i),
9102 & AEAb2derx(1,lll,kkk,iii,1,1))
9103 call matvec2(AEAderx(1,1,lll,kkk,iii,1),b1(1,k+1),
9104 & AEAb1derx(1,lll,kkk,iii,2,1))
9105 call matvec2(AEAderx(1,1,lll,kkk,iii,1),Ub2(1,k+1),
9106 & AEAb2derx(1,lll,kkk,iii,2,1))
9107 call transpose2(AEAderx(1,1,lll,kkk,iii,2),auxmat(1,1))
9108 call matvec2(auxmat(1,1),b1(1,j),
9109 & AEAb1derx(1,lll,kkk,iii,1,2))
9110 call matvec2(auxmat(1,1),Ub2(1,j),
9111 & AEAb2derx(1,lll,kkk,iii,1,2))
9112 call matvec2(AEAderx(1,1,lll,kkk,iii,2),b1(1,l+1),
9113 & AEAb1derx(1,lll,kkk,iii,2,2))
9114 call matvec2(AEAderx(1,1,lll,kkk,iii,2),Ub2(1,l+1),
9115 & AEAb2derx(1,lll,kkk,iii,2,2))
9122 C Antiparallel orientation of the two CA-CA-CA frames.
9124 iti=itype2loc(itype(i))
9128 itk1=itype2loc(itype(k+1))
9129 itl=itype2loc(itype(l))
9130 itj=itype2loc(itype(j))
9131 if (j.lt.nres-1) then
9132 itj1=itype2loc(itype(j+1))
9136 C A2 kernel(j-1)T A1T
9137 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
9138 & aa2tder(1,1,1,1),1,.true.,EUg(1,1,j),EUgder(1,1,j),
9139 & AEA(1,1,1),AEAderg(1,1,1),AEAderx(1,1,1,1,1,1))
9140 C Following matrices are needed only for 6-th order cumulants
9141 IF (wcorr6.gt.0.0d0 .or. (wturn6.gt.0.0d0 .and.
9142 & j.eq.i+4 .and. l.eq.i+3)) THEN
9143 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
9144 & aa2tder(1,1,1,1),1,.true.,EUgC(1,1,j),EUgCder(1,1,j),
9145 & AECA(1,1,1),AECAderg(1,1,1),AECAderx(1,1,1,1,1,1))
9146 call kernel(aa2(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
9147 & aa2tder(1,1,1,1),2,.true.,Ug2DtEUg(1,1,j),
9148 & Ug2DtEUgder(1,1,1,j),ADtEA(1,1,1),ADtEAderg(1,1,1,1),
9149 & ADtEAderx(1,1,1,1,1,1))
9150 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
9151 & aa2tder(1,1,1,1),2,.true.,DtUg2EUg(1,1,j),
9152 & DtUg2EUgder(1,1,1,j),ADtEA1(1,1,1),ADtEA1derg(1,1,1,1),
9153 & ADtEA1derx(1,1,1,1,1,1))
9155 C End 6-th order cumulants
9156 call transpose2(EUgder(1,1,k),auxmat(1,1))
9157 call matmat2(auxmat(1,1),AEA(1,1,1),EAEAderg(1,1,1,1))
9158 call transpose2(EUg(1,1,k),auxmat(1,1))
9159 call matmat2(auxmat(1,1),AEA(1,1,1),EAEA(1,1,1))
9160 call matmat2(auxmat(1,1),AEAderg(1,1,1),EAEAderg(1,1,2,1))
9164 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,1),
9165 & EAEAderx(1,1,lll,kkk,iii,1))
9169 C A2T kernel(i+1)T A1
9170 call kernel(aa2t(1,1),aa1(1,1),aa2tder(1,1,1,1),
9171 & a_chuj_der(1,1,1,1,jj,i),1,.true.,EUg(1,1,k),EUgder(1,1,k),
9172 & AEA(1,1,2),AEAderg(1,1,2),AEAderx(1,1,1,1,1,2))
9173 C Following matrices are needed only for 6-th order cumulants
9174 IF (wcorr6.gt.0.0d0 .or. (wturn6.gt.0.0d0 .and.
9175 & j.eq.i+4 .and. l.eq.i+3)) THEN
9176 call kernel(aa2t(1,1),aa1(1,1),aa2tder(1,1,1,1),
9177 & a_chuj_der(1,1,1,1,jj,i),1,.true.,EUgC(1,1,k),EUgCder(1,1,k),
9178 & AECA(1,1,2),AECAderg(1,1,2),AECAderx(1,1,1,1,1,2))
9179 call kernel(aa2t(1,1),aa1(1,1),aa2tder(1,1,1,1),
9180 & a_chuj_der(1,1,1,1,jj,i),2,.true.,Ug2DtEUg(1,1,k),
9181 & Ug2DtEUgder(1,1,1,k),ADtEA(1,1,2),ADtEAderg(1,1,1,2),
9182 & ADtEAderx(1,1,1,1,1,2))
9183 call kernel(aa2t(1,1),aa1(1,1),aa2tder(1,1,1,1),
9184 & a_chuj_der(1,1,1,1,jj,i),2,.true.,DtUg2EUg(1,1,k),
9185 & DtUg2EUgder(1,1,1,k),ADtEA1(1,1,2),ADtEA1derg(1,1,1,2),
9186 & ADtEA1derx(1,1,1,1,1,2))
9188 C End 6-th order cumulants
9189 call transpose2(EUgder(1,1,j),auxmat(1,1))
9190 call matmat2(auxmat(1,1),AEA(1,1,1),EAEAderg(1,1,2,2))
9191 call transpose2(EUg(1,1,j),auxmat(1,1))
9192 call matmat2(auxmat(1,1),AEA(1,1,2),EAEA(1,1,2))
9193 call matmat2(auxmat(1,1),AEAderg(1,1,2),EAEAderg(1,1,2,2))
9197 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,2),
9198 & EAEAderx(1,1,lll,kkk,iii,2))
9203 C Calculate the vectors and their derivatives in virtual-bond dihedral angles.
9204 C They are needed only when the fifth- or the sixth-order cumulants are
9206 IF (wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0 .or.
9207 & (wturn6.gt.0.0d0 .and. j.eq.i+4 .and. l.eq.i+3)) THEN
9208 call transpose2(AEA(1,1,1),auxmat(1,1))
9209 call matvec2(auxmat(1,1),b1(1,i),AEAb1(1,1,1))
9210 call matvec2(auxmat(1,1),Ub2(1,i),AEAb2(1,1,1))
9211 call matvec2(auxmat(1,1),Ub2der(1,i),AEAb2derg(1,2,1,1))
9212 call transpose2(AEAderg(1,1,1),auxmat(1,1))
9213 call matvec2(auxmat(1,1),b1(1,i),AEAb1derg(1,1,1))
9214 call matvec2(auxmat(1,1),Ub2(1,i),AEAb2derg(1,1,1,1))
9215 call matvec2(AEA(1,1,1),b1(1,k+1),AEAb1(1,2,1))
9216 call matvec2(AEAderg(1,1,1),b1(1,k+1),AEAb1derg(1,2,1))
9217 call matvec2(AEA(1,1,1),Ub2(1,k+1),AEAb2(1,2,1))
9218 call matvec2(AEAderg(1,1,1),Ub2(1,k+1),AEAb2derg(1,1,2,1))
9219 call matvec2(AEA(1,1,1),Ub2der(1,k+1),AEAb2derg(1,2,2,1))
9220 call transpose2(AEA(1,1,2),auxmat(1,1))
9221 call matvec2(auxmat(1,1),b1(1,j+1),AEAb1(1,1,2))
9222 call matvec2(auxmat(1,1),Ub2(1,l),AEAb2(1,1,2))
9223 call matvec2(auxmat(1,1),Ub2der(1,l),AEAb2derg(1,2,1,2))
9224 call transpose2(AEAderg(1,1,2),auxmat(1,1))
9225 call matvec2(auxmat(1,1),b1(1,l),AEAb1(1,1,2))
9226 call matvec2(auxmat(1,1),Ub2(1,l),AEAb2derg(1,1,1,2))
9227 call matvec2(AEA(1,1,2),b1(1,j+1),AEAb1(1,2,2))
9228 call matvec2(AEAderg(1,1,2),b1(1,j+1),AEAb1derg(1,2,2))
9229 call matvec2(AEA(1,1,2),Ub2(1,j),AEAb2(1,2,2))
9230 call matvec2(AEAderg(1,1,2),Ub2(1,j),AEAb2derg(1,1,2,2))
9231 call matvec2(AEA(1,1,2),Ub2der(1,j),AEAb2derg(1,2,2,2))
9232 C Calculate the Cartesian derivatives of the vectors.
9236 call transpose2(AEAderx(1,1,lll,kkk,iii,1),auxmat(1,1))
9237 call matvec2(auxmat(1,1),b1(1,i),
9238 & AEAb1derx(1,lll,kkk,iii,1,1))
9239 call matvec2(auxmat(1,1),Ub2(1,i),
9240 & AEAb2derx(1,lll,kkk,iii,1,1))
9241 call matvec2(AEAderx(1,1,lll,kkk,iii,1),b1(1,k+1),
9242 & AEAb1derx(1,lll,kkk,iii,2,1))
9243 call matvec2(AEAderx(1,1,lll,kkk,iii,1),Ub2(1,k+1),
9244 & AEAb2derx(1,lll,kkk,iii,2,1))
9245 call transpose2(AEAderx(1,1,lll,kkk,iii,2),auxmat(1,1))
9246 call matvec2(auxmat(1,1),b1(1,l),
9247 & AEAb1derx(1,lll,kkk,iii,1,2))
9248 call matvec2(auxmat(1,1),Ub2(1,l),
9249 & AEAb2derx(1,lll,kkk,iii,1,2))
9250 call matvec2(AEAderx(1,1,lll,kkk,iii,2),b1(1,j+1),
9251 & AEAb1derx(1,lll,kkk,iii,2,2))
9252 call matvec2(AEAderx(1,1,lll,kkk,iii,2),Ub2(1,j),
9253 & AEAb2derx(1,lll,kkk,iii,2,2))
9262 C---------------------------------------------------------------------------
9263 subroutine kernel(aa1,aa2t,aa1derx,aa2tderx,nderg,transp,
9264 & KK,KKderg,AKA,AKAderg,AKAderx)
9268 double precision aa1(2,2),aa2t(2,2),aa1derx(2,2,3,5),
9269 & aa2tderx(2,2,3,5),KK(2,2),KKderg(2,2,nderg),AKA(2,2),
9270 & AKAderg(2,2,nderg),AKAderx(2,2,3,5,2)
9275 call prodmat3(aa1(1,1),aa2t(1,1),KK(1,1),transp,AKA(1,1))
9277 call prodmat3(aa1(1,1),aa2t(1,1),KKderg(1,1,iii),transp,
9280 cd if (lprn) write (2,*) 'In kernel'
9282 cd if (lprn) write (2,*) 'kkk=',kkk
9284 call prodmat3(aa1derx(1,1,lll,kkk),aa2t(1,1),
9285 & KK(1,1),transp,AKAderx(1,1,lll,kkk,1))
9287 cd write (2,*) 'lll=',lll
9288 cd write (2,*) 'iii=1'
9290 cd write (2,'(3(2f10.5),5x)')
9291 cd & (AKAderx(jjj,mmm,lll,kkk,1),mmm=1,2)
9294 call prodmat3(aa1(1,1),aa2tderx(1,1,lll,kkk),
9295 & KK(1,1),transp,AKAderx(1,1,lll,kkk,2))
9297 cd write (2,*) 'lll=',lll
9298 cd write (2,*) 'iii=2'
9300 cd write (2,'(3(2f10.5),5x)')
9301 cd & (AKAderx(jjj,mmm,lll,kkk,2),mmm=1,2)
9308 C---------------------------------------------------------------------------
9309 double precision function eello4(i,j,k,l,jj,kk)
9310 implicit real*8 (a-h,o-z)
9311 include 'DIMENSIONS'
9312 include 'COMMON.IOUNITS'
9313 include 'COMMON.CHAIN'
9314 include 'COMMON.DERIV'
9315 include 'COMMON.INTERACT'
9316 include 'COMMON.CONTACTS'
9317 include 'COMMON.TORSION'
9318 include 'COMMON.VAR'
9319 include 'COMMON.GEO'
9320 double precision pizda(2,2),ggg1(3),ggg2(3)
9321 cd if (i.ne.1 .or. j.ne.5 .or. k.ne.2 .or.l.ne.4) then
9325 cd print *,'eello4:',i,j,k,l,jj,kk
9326 cd write (2,*) 'i',i,' j',j,' k',k,' l',l
9327 cd call checkint4(i,j,k,l,jj,kk,eel4_num)
9328 cold eij=facont_hb(jj,i)
9329 cold ekl=facont_hb(kk,k)
9331 eel4=-EAEA(1,1,1)-EAEA(2,2,1)
9332 cd eel41=-EAEA(1,1,2)-EAEA(2,2,2)
9333 gcorr_loc(k-1)=gcorr_loc(k-1)
9334 & -ekont*(EAEAderg(1,1,1,1)+EAEAderg(2,2,1,1))
9336 gcorr_loc(l-1)=gcorr_loc(l-1)
9337 & -ekont*(EAEAderg(1,1,2,1)+EAEAderg(2,2,2,1))
9339 gcorr_loc(j-1)=gcorr_loc(j-1)
9340 & -ekont*(EAEAderg(1,1,2,1)+EAEAderg(2,2,2,1))
9345 derx(lll,kkk,iii)=-EAEAderx(1,1,lll,kkk,iii,1)
9346 & -EAEAderx(2,2,lll,kkk,iii,1)
9347 cd derx(lll,kkk,iii)=0.0d0
9351 cd gcorr_loc(l-1)=0.0d0
9352 cd gcorr_loc(j-1)=0.0d0
9353 cd gcorr_loc(k-1)=0.0d0
9355 cd write (iout,*)'Contacts have occurred for peptide groups',
9356 cd & i,j,' fcont:',eij,' eij',' and ',k,l,
9357 cd & ' fcont ',ekl,' eel4=',eel4,' eel4_num',16*eel4_num
9358 if (j.lt.nres-1) then
9365 if (l.lt.nres-1) then
9373 cgrad ggg1(ll)=eel4*g_contij(ll,1)
9374 cgrad ggg2(ll)=eel4*g_contij(ll,2)
9375 glongij=eel4*g_contij(ll,1)+ekont*derx(ll,1,1)
9376 glongkl=eel4*g_contij(ll,2)+ekont*derx(ll,1,2)
9377 cgrad ghalf=0.5d0*ggg1(ll)
9378 gradcorr(ll,i)=gradcorr(ll,i)+ekont*derx(ll,2,1)
9379 gradcorr(ll,i+1)=gradcorr(ll,i+1)+ekont*derx(ll,3,1)
9380 gradcorr(ll,j)=gradcorr(ll,j)+ekont*derx(ll,4,1)
9381 gradcorr(ll,j1)=gradcorr(ll,j1)+ekont*derx(ll,5,1)
9382 gradcorr_long(ll,j)=gradcorr_long(ll,j)+glongij
9383 gradcorr_long(ll,i)=gradcorr_long(ll,i)-glongij
9384 cgrad ghalf=0.5d0*ggg2(ll)
9385 gradcorr(ll,k)=gradcorr(ll,k)+ekont*derx(ll,2,2)
9386 gradcorr(ll,k+1)=gradcorr(ll,k+1)+ekont*derx(ll,3,2)
9387 gradcorr(ll,l)=gradcorr(ll,l)+ekont*derx(ll,4,2)
9388 gradcorr(ll,l1)=gradcorr(ll,l1)+ekont*derx(ll,5,2)
9389 gradcorr_long(ll,l)=gradcorr_long(ll,l)+glongkl
9390 gradcorr_long(ll,k)=gradcorr_long(ll,k)-glongkl
9394 cgrad gradcorr(ll,m)=gradcorr(ll,m)+ggg1(ll)
9399 cgrad gradcorr(ll,m)=gradcorr(ll,m)+ggg2(ll)
9404 cgrad gradcorr(ll,m)=gradcorr(ll,m)+ekont*derx(ll,1,1)
9409 cgrad gradcorr(ll,m)=gradcorr(ll,m)+ekont*derx(ll,1,2)
9413 cd write (2,*) iii,gcorr_loc(iii)
9416 cd write (2,*) 'ekont',ekont
9417 cd write (iout,*) 'eello4',ekont*eel4
9420 C---------------------------------------------------------------------------
9421 double precision function eello5(i,j,k,l,jj,kk)
9422 implicit real*8 (a-h,o-z)
9423 include 'DIMENSIONS'
9424 include 'COMMON.IOUNITS'
9425 include 'COMMON.CHAIN'
9426 include 'COMMON.DERIV'
9427 include 'COMMON.INTERACT'
9428 include 'COMMON.CONTACTS'
9429 include 'COMMON.TORSION'
9430 include 'COMMON.VAR'
9431 include 'COMMON.GEO'
9432 double precision pizda(2,2),auxmat(2,2),auxmat1(2,2),vv(2)
9433 double precision ggg1(3),ggg2(3)
9434 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
9439 C /l\ / \ \ / \ / \ / C
9440 C / \ / \ \ / \ / \ / C
9441 C j| o |l1 | o | o| o | | o |o C
9442 C \ |/k\| |/ \| / |/ \| |/ \| C
9443 C \i/ \ / \ / / \ / \ C
9445 C (I) (II) (III) (IV) C
9447 C eello5_1 eello5_2 eello5_3 eello5_4 C
9449 C Antiparallel chains C
9452 C /j\ / \ \ / \ / \ / C
9453 C / \ / \ \ / \ / \ / C
9454 C j1| o |l | o | o| o | | o |o C
9455 C \ |/k\| |/ \| / |/ \| |/ \| C
9456 C \i/ \ / \ / / \ / \ C
9458 C (I) (II) (III) (IV) C
9460 C eello5_1 eello5_2 eello5_3 eello5_4 C
9462 C o denotes a local interaction, vertical lines an electrostatic interaction. C
9464 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
9465 cd if (i.ne.2 .or. j.ne.6 .or. k.ne.3 .or. l.ne.5) then
9470 cd & 'EELLO5: Contacts have occurred for peptide groups',i,j,
9472 itk=itype2loc(itype(k))
9473 itl=itype2loc(itype(l))
9474 itj=itype2loc(itype(j))
9479 cd call checkint5(i,j,k,l,jj,kk,eel5_1_num,eel5_2_num,
9480 cd & eel5_3_num,eel5_4_num)
9484 derx(lll,kkk,iii)=0.0d0
9488 cd eij=facont_hb(jj,i)
9489 cd ekl=facont_hb(kk,k)
9491 cd write (iout,*)'Contacts have occurred for peptide groups',
9492 cd & i,j,' fcont:',eij,' eij',' and ',k,l
9494 C Contribution from the graph I.
9495 cd write (2,*) 'AEA ',AEA(1,1,1),AEA(2,1,1),AEA(1,2,1),AEA(2,2,1)
9496 cd write (2,*) 'AEAb2',AEAb2(1,1,1),AEAb2(2,1,1)
9497 call transpose2(EUg(1,1,k),auxmat(1,1))
9498 call matmat2(AEA(1,1,1),auxmat(1,1),pizda(1,1))
9499 vv(1)=pizda(1,1)-pizda(2,2)
9500 vv(2)=pizda(1,2)+pizda(2,1)
9501 eello5_1=scalar2(AEAb2(1,1,1),Ub2(1,k))
9502 & +0.5d0*scalar2(vv(1),Dtobr2(1,i))
9503 C Explicit gradient in virtual-dihedral angles.
9504 if (i.gt.1) g_corr5_loc(i-1)=g_corr5_loc(i-1)
9505 & +ekont*(scalar2(AEAb2derg(1,2,1,1),Ub2(1,k))
9506 & +0.5d0*scalar2(vv(1),Dtobr2der(1,i)))
9507 call transpose2(EUgder(1,1,k),auxmat1(1,1))
9508 call matmat2(AEA(1,1,1),auxmat1(1,1),pizda(1,1))
9509 vv(1)=pizda(1,1)-pizda(2,2)
9510 vv(2)=pizda(1,2)+pizda(2,1)
9511 g_corr5_loc(k-1)=g_corr5_loc(k-1)
9512 & +ekont*(scalar2(AEAb2(1,1,1),Ub2der(1,k))
9513 & +0.5d0*scalar2(vv(1),Dtobr2(1,i)))
9514 call matmat2(AEAderg(1,1,1),auxmat(1,1),pizda(1,1))
9515 vv(1)=pizda(1,1)-pizda(2,2)
9516 vv(2)=pizda(1,2)+pizda(2,1)
9518 if (l.lt.nres-1) g_corr5_loc(l-1)=g_corr5_loc(l-1)
9519 & +ekont*(scalar2(AEAb2derg(1,1,1,1),Ub2(1,k))
9520 & +0.5d0*scalar2(vv(1),Dtobr2(1,i)))
9522 if (j.lt.nres-1) g_corr5_loc(j-1)=g_corr5_loc(j-1)
9523 & +ekont*(scalar2(AEAb2derg(1,1,1,1),Ub2(1,k))
9524 & +0.5d0*scalar2(vv(1),Dtobr2(1,i)))
9526 C Cartesian gradient
9530 call matmat2(AEAderx(1,1,lll,kkk,iii,1),auxmat(1,1),
9532 vv(1)=pizda(1,1)-pizda(2,2)
9533 vv(2)=pizda(1,2)+pizda(2,1)
9534 derx(lll,kkk,iii)=derx(lll,kkk,iii)
9535 & +scalar2(AEAb2derx(1,lll,kkk,iii,1,1),Ub2(1,k))
9536 & +0.5d0*scalar2(vv(1),Dtobr2(1,i))
9542 C Contribution from graph II
9543 call transpose2(EE(1,1,k),auxmat(1,1))
9544 call matmat2(auxmat(1,1),AEA(1,1,1),pizda(1,1))
9545 vv(1)=pizda(1,1)+pizda(2,2)
9546 vv(2)=pizda(2,1)-pizda(1,2)
9547 eello5_2=scalar2(AEAb1(1,2,1),b1(1,k))
9548 & -0.5d0*scalar2(vv(1),Ctobr(1,k))
9549 C Explicit gradient in virtual-dihedral angles.
9550 g_corr5_loc(k-1)=g_corr5_loc(k-1)
9551 & -0.5d0*ekont*scalar2(vv(1),Ctobrder(1,k))
9552 call matmat2(auxmat(1,1),AEAderg(1,1,1),pizda(1,1))
9553 vv(1)=pizda(1,1)+pizda(2,2)
9554 vv(2)=pizda(2,1)-pizda(1,2)
9556 g_corr5_loc(l-1)=g_corr5_loc(l-1)
9557 & +ekont*(scalar2(AEAb1derg(1,2,1),b1(1,k))
9558 & -0.5d0*scalar2(vv(1),Ctobr(1,k)))
9560 g_corr5_loc(j-1)=g_corr5_loc(j-1)
9561 & +ekont*(scalar2(AEAb1derg(1,2,1),b1(1,k))
9562 & -0.5d0*scalar2(vv(1),Ctobr(1,k)))
9564 C Cartesian gradient
9568 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,1),
9570 vv(1)=pizda(1,1)+pizda(2,2)
9571 vv(2)=pizda(2,1)-pizda(1,2)
9572 derx(lll,kkk,iii)=derx(lll,kkk,iii)
9573 & +scalar2(AEAb1derx(1,lll,kkk,iii,2,1),b1(1,k))
9574 & -0.5d0*scalar2(vv(1),Ctobr(1,k))
9582 C Parallel orientation
9583 C Contribution from graph III
9584 call transpose2(EUg(1,1,l),auxmat(1,1))
9585 call matmat2(AEA(1,1,2),auxmat(1,1),pizda(1,1))
9586 vv(1)=pizda(1,1)-pizda(2,2)
9587 vv(2)=pizda(1,2)+pizda(2,1)
9588 eello5_3=scalar2(AEAb2(1,1,2),Ub2(1,l))
9589 & +0.5d0*scalar2(vv(1),Dtobr2(1,j))
9590 C Explicit gradient in virtual-dihedral angles.
9591 g_corr5_loc(j-1)=g_corr5_loc(j-1)
9592 & +ekont*(scalar2(AEAb2derg(1,2,1,2),Ub2(1,l))
9593 & +0.5d0*scalar2(vv(1),Dtobr2der(1,j)))
9594 call matmat2(AEAderg(1,1,2),auxmat(1,1),pizda(1,1))
9595 vv(1)=pizda(1,1)-pizda(2,2)
9596 vv(2)=pizda(1,2)+pizda(2,1)
9597 g_corr5_loc(k-1)=g_corr5_loc(k-1)
9598 & +ekont*(scalar2(AEAb2derg(1,1,1,2),Ub2(1,l))
9599 & +0.5d0*scalar2(vv(1),Dtobr2(1,j)))
9600 call transpose2(EUgder(1,1,l),auxmat1(1,1))
9601 call matmat2(AEA(1,1,2),auxmat1(1,1),pizda(1,1))
9602 vv(1)=pizda(1,1)-pizda(2,2)
9603 vv(2)=pizda(1,2)+pizda(2,1)
9604 g_corr5_loc(l-1)=g_corr5_loc(l-1)
9605 & +ekont*(scalar2(AEAb2(1,1,2),Ub2der(1,l))
9606 & +0.5d0*scalar2(vv(1),Dtobr2(1,j)))
9607 C Cartesian gradient
9611 call matmat2(AEAderx(1,1,lll,kkk,iii,2),auxmat(1,1),
9613 vv(1)=pizda(1,1)-pizda(2,2)
9614 vv(2)=pizda(1,2)+pizda(2,1)
9615 derx(lll,kkk,iii)=derx(lll,kkk,iii)
9616 & +scalar2(AEAb2derx(1,lll,kkk,iii,1,2),Ub2(1,l))
9617 & +0.5d0*scalar2(vv(1),Dtobr2(1,j))
9622 C Contribution from graph IV
9624 call transpose2(EE(1,1,l),auxmat(1,1))
9625 call matmat2(auxmat(1,1),AEA(1,1,2),pizda(1,1))
9626 vv(1)=pizda(1,1)+pizda(2,2)
9627 vv(2)=pizda(2,1)-pizda(1,2)
9628 eello5_4=scalar2(AEAb1(1,2,2),b1(1,l))
9629 & -0.5d0*scalar2(vv(1),Ctobr(1,l))
9630 C Explicit gradient in virtual-dihedral angles.
9631 g_corr5_loc(l-1)=g_corr5_loc(l-1)
9632 & -0.5d0*ekont*scalar2(vv(1),Ctobrder(1,l))
9633 call matmat2(auxmat(1,1),AEAderg(1,1,2),pizda(1,1))
9634 vv(1)=pizda(1,1)+pizda(2,2)
9635 vv(2)=pizda(2,1)-pizda(1,2)
9636 g_corr5_loc(k-1)=g_corr5_loc(k-1)
9637 & +ekont*(scalar2(AEAb1derg(1,2,2),b1(1,l))
9638 & -0.5d0*scalar2(vv(1),Ctobr(1,l)))
9639 C Cartesian gradient
9643 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,2),
9645 vv(1)=pizda(1,1)+pizda(2,2)
9646 vv(2)=pizda(2,1)-pizda(1,2)
9647 derx(lll,kkk,iii)=derx(lll,kkk,iii)
9648 & +scalar2(AEAb1derx(1,lll,kkk,iii,2,2),b1(1,l))
9649 & -0.5d0*scalar2(vv(1),Ctobr(1,l))
9654 C Antiparallel orientation
9655 C Contribution from graph III
9657 call transpose2(EUg(1,1,j),auxmat(1,1))
9658 call matmat2(AEA(1,1,2),auxmat(1,1),pizda(1,1))
9659 vv(1)=pizda(1,1)-pizda(2,2)
9660 vv(2)=pizda(1,2)+pizda(2,1)
9661 eello5_3=scalar2(AEAb2(1,1,2),Ub2(1,j))
9662 & +0.5d0*scalar2(vv(1),Dtobr2(1,l))
9663 C Explicit gradient in virtual-dihedral angles.
9664 g_corr5_loc(l-1)=g_corr5_loc(l-1)
9665 & +ekont*(scalar2(AEAb2derg(1,2,1,2),Ub2(1,j))
9666 & +0.5d0*scalar2(vv(1),Dtobr2der(1,l)))
9667 call matmat2(AEAderg(1,1,2),auxmat(1,1),pizda(1,1))
9668 vv(1)=pizda(1,1)-pizda(2,2)
9669 vv(2)=pizda(1,2)+pizda(2,1)
9670 g_corr5_loc(k-1)=g_corr5_loc(k-1)
9671 & +ekont*(scalar2(AEAb2derg(1,1,1,2),Ub2(1,j))
9672 & +0.5d0*scalar2(vv(1),Dtobr2(1,l)))
9673 call transpose2(EUgder(1,1,j),auxmat1(1,1))
9674 call matmat2(AEA(1,1,2),auxmat1(1,1),pizda(1,1))
9675 vv(1)=pizda(1,1)-pizda(2,2)
9676 vv(2)=pizda(1,2)+pizda(2,1)
9677 g_corr5_loc(j-1)=g_corr5_loc(j-1)
9678 & +ekont*(scalar2(AEAb2(1,1,2),Ub2der(1,j))
9679 & +0.5d0*scalar2(vv(1),Dtobr2(1,l)))
9680 C Cartesian gradient
9684 call matmat2(AEAderx(1,1,lll,kkk,iii,2),auxmat(1,1),
9686 vv(1)=pizda(1,1)-pizda(2,2)
9687 vv(2)=pizda(1,2)+pizda(2,1)
9688 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)
9689 & +scalar2(AEAb2derx(1,lll,kkk,iii,1,2),Ub2(1,j))
9690 & +0.5d0*scalar2(vv(1),Dtobr2(1,l))
9695 C Contribution from graph IV
9697 call transpose2(EE(1,1,j),auxmat(1,1))
9698 call matmat2(auxmat(1,1),AEA(1,1,2),pizda(1,1))
9699 vv(1)=pizda(1,1)+pizda(2,2)
9700 vv(2)=pizda(2,1)-pizda(1,2)
9701 eello5_4=scalar2(AEAb1(1,2,2),b1(1,j))
9702 & -0.5d0*scalar2(vv(1),Ctobr(1,j))
9703 C Explicit gradient in virtual-dihedral angles.
9704 g_corr5_loc(j-1)=g_corr5_loc(j-1)
9705 & -0.5d0*ekont*scalar2(vv(1),Ctobrder(1,j))
9706 call matmat2(auxmat(1,1),AEAderg(1,1,2),pizda(1,1))
9707 vv(1)=pizda(1,1)+pizda(2,2)
9708 vv(2)=pizda(2,1)-pizda(1,2)
9709 g_corr5_loc(k-1)=g_corr5_loc(k-1)
9710 & +ekont*(scalar2(AEAb1derg(1,2,2),b1(1,j))
9711 & -0.5d0*scalar2(vv(1),Ctobr(1,j)))
9712 C Cartesian gradient
9716 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,2),
9718 vv(1)=pizda(1,1)+pizda(2,2)
9719 vv(2)=pizda(2,1)-pizda(1,2)
9720 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)
9721 & +scalar2(AEAb1derx(1,lll,kkk,iii,2,2),b1(1,j))
9722 & -0.5d0*scalar2(vv(1),Ctobr(1,j))
9728 eel5=eello5_1+eello5_2+eello5_3+eello5_4
9729 cd if (i.eq.2 .and. j.eq.8 .and. k.eq.3 .and. l.eq.7) then
9730 cd write (2,*) 'ijkl',i,j,k,l
9731 cd write (2,*) 'eello5_1',eello5_1,' eello5_2',eello5_2,
9732 cd & ' eello5_3',eello5_3,' eello5_4',eello5_4
9734 cd write(iout,*) 'eello5_1',eello5_1,' eel5_1_num',16*eel5_1_num
9735 cd write(iout,*) 'eello5_2',eello5_2,' eel5_2_num',16*eel5_2_num
9736 cd write(iout,*) 'eello5_3',eello5_3,' eel5_3_num',16*eel5_3_num
9737 cd write(iout,*) 'eello5_4',eello5_4,' eel5_4_num',16*eel5_4_num
9738 if (j.lt.nres-1) then
9745 if (l.lt.nres-1) then
9755 cd write (2,*) 'eij',eij,' ekl',ekl,' ekont',ekont
9756 C 2/11/08 AL Gradients over DC's connecting interacting sites will be
9757 C summed up outside the subrouine as for the other subroutines
9758 C handling long-range interactions. The old code is commented out
9759 C with "cgrad" to keep track of changes.
9761 cgrad ggg1(ll)=eel5*g_contij(ll,1)
9762 cgrad ggg2(ll)=eel5*g_contij(ll,2)
9763 gradcorr5ij=eel5*g_contij(ll,1)+ekont*derx(ll,1,1)
9764 gradcorr5kl=eel5*g_contij(ll,2)+ekont*derx(ll,1,2)
9765 c write (iout,'(a,3i3,a,5f8.3,2i3,a,5f8.3,a,f8.3)')
9766 c & "ecorr5",ll,i,j," derx",derx(ll,2,1),derx(ll,3,1),derx(ll,4,1),
9767 c & derx(ll,5,1),k,l," derx",derx(ll,2,2),derx(ll,3,2),
9768 c & derx(ll,4,2),derx(ll,5,2)," ekont",ekont
9769 c write (iout,'(a,3i3,a,3f8.3,2i3,a,3f8.3)')
9770 c & "ecorr5",ll,i,j," gradcorr5",g_contij(ll,1),derx(ll,1,1),
9772 c & k,l," gradcorr5",g_contij(ll,2),derx(ll,1,2),gradcorr5kl
9773 cold ghalf=0.5d0*eel5*ekl*gacont_hbr(ll,jj,i)
9774 cgrad ghalf=0.5d0*ggg1(ll)
9776 gradcorr5(ll,i)=gradcorr5(ll,i)+ekont*derx(ll,2,1)
9777 gradcorr5(ll,i+1)=gradcorr5(ll,i+1)+ekont*derx(ll,3,1)
9778 gradcorr5(ll,j)=gradcorr5(ll,j)+ekont*derx(ll,4,1)
9779 gradcorr5(ll,j1)=gradcorr5(ll,j1)+ekont*derx(ll,5,1)
9780 gradcorr5_long(ll,j)=gradcorr5_long(ll,j)+gradcorr5ij
9781 gradcorr5_long(ll,i)=gradcorr5_long(ll,i)-gradcorr5ij
9782 cold ghalf=0.5d0*eel5*eij*gacont_hbr(ll,kk,k)
9783 cgrad ghalf=0.5d0*ggg2(ll)
9785 gradcorr5(ll,k)=gradcorr5(ll,k)+ekont*derx(ll,2,2)
9786 gradcorr5(ll,k+1)=gradcorr5(ll,k+1)+ekont*derx(ll,3,2)
9787 gradcorr5(ll,l)=gradcorr5(ll,l)+ekont*derx(ll,4,2)
9788 gradcorr5(ll,l1)=gradcorr5(ll,l1)+ekont*derx(ll,5,2)
9789 gradcorr5_long(ll,l)=gradcorr5_long(ll,l)+gradcorr5kl
9790 gradcorr5_long(ll,k)=gradcorr5_long(ll,k)-gradcorr5kl
9795 cold gradcorr5(ll,m)=gradcorr5(ll,m)+eel5*ekl*gacont_hbr(ll,jj,i)
9796 cgrad gradcorr5(ll,m)=gradcorr5(ll,m)+ggg1(ll)
9801 cold gradcorr5(ll,m)=gradcorr5(ll,m)+eel5*eij*gacont_hbr(ll,kk,k)
9802 cgrad gradcorr5(ll,m)=gradcorr5(ll,m)+ggg2(ll)
9808 cgrad gradcorr5(ll,m)=gradcorr5(ll,m)+ekont*derx(ll,1,1)
9813 cgrad gradcorr5(ll,m)=gradcorr5(ll,m)+ekont*derx(ll,1,2)
9817 cd write (2,*) iii,g_corr5_loc(iii)
9820 cd write (2,*) 'ekont',ekont
9821 cd write (iout,*) 'eello5',ekont*eel5
9824 c--------------------------------------------------------------------------
9825 double precision function eello6(i,j,k,l,jj,kk)
9826 implicit real*8 (a-h,o-z)
9827 include 'DIMENSIONS'
9828 include 'COMMON.IOUNITS'
9829 include 'COMMON.CHAIN'
9830 include 'COMMON.DERIV'
9831 include 'COMMON.INTERACT'
9832 include 'COMMON.CONTACTS'
9833 include 'COMMON.TORSION'
9834 include 'COMMON.VAR'
9835 include 'COMMON.GEO'
9836 include 'COMMON.FFIELD'
9837 double precision ggg1(3),ggg2(3)
9838 cd if (i.ne.1 .or. j.ne.3 .or. k.ne.2 .or. l.ne.4) then
9843 cd & 'EELLO6: Contacts have occurred for peptide groups',i,j,
9851 cd call checkint6(i,j,k,l,jj,kk,eel6_1_num,eel6_2_num,
9852 cd & eel6_3_num,eel6_4_num,eel6_5_num,eel6_6_num)
9856 derx(lll,kkk,iii)=0.0d0
9860 cd eij=facont_hb(jj,i)
9861 cd ekl=facont_hb(kk,k)
9867 eello6_1=eello6_graph1(i,j,k,l,1,.false.)
9868 eello6_2=eello6_graph1(j,i,l,k,2,.false.)
9869 eello6_3=eello6_graph2(i,j,k,l,jj,kk,.false.)
9870 eello6_4=eello6_graph4(i,j,k,l,jj,kk,1,.false.)
9871 eello6_5=eello6_graph4(j,i,l,k,jj,kk,2,.false.)
9872 eello6_6=eello6_graph3(i,j,k,l,jj,kk,.false.)
9874 eello6_1=eello6_graph1(i,j,k,l,1,.false.)
9875 eello6_2=eello6_graph1(l,k,j,i,2,.true.)
9876 eello6_3=eello6_graph2(i,l,k,j,jj,kk,.true.)
9877 eello6_4=eello6_graph4(i,j,k,l,jj,kk,1,.false.)
9878 if (wturn6.eq.0.0d0 .or. j.ne.i+4) then
9879 eello6_5=eello6_graph4(l,k,j,i,kk,jj,2,.true.)
9883 eello6_6=eello6_graph3(i,l,k,j,jj,kk,.true.)
9885 C If turn contributions are considered, they will be handled separately.
9886 eel6=eello6_1+eello6_2+eello6_3+eello6_4+eello6_5+eello6_6
9887 cd write(iout,*) 'eello6_1',eello6_1!,' eel6_1_num',16*eel6_1_num
9888 cd write(iout,*) 'eello6_2',eello6_2!,' eel6_2_num',16*eel6_2_num
9889 cd write(iout,*) 'eello6_3',eello6_3!,' eel6_3_num',16*eel6_3_num
9890 cd write(iout,*) 'eello6_4',eello6_4!,' eel6_4_num',16*eel6_4_num
9891 cd write(iout,*) 'eello6_5',eello6_5!,' eel6_5_num',16*eel6_5_num
9892 cd write(iout,*) 'eello6_6',eello6_6!,' eel6_6_num',16*eel6_6_num
9894 if (j.lt.nres-1) then
9901 if (l.lt.nres-1) then
9909 cgrad ggg1(ll)=eel6*g_contij(ll,1)
9910 cgrad ggg2(ll)=eel6*g_contij(ll,2)
9911 cold ghalf=0.5d0*eel6*ekl*gacont_hbr(ll,jj,i)
9912 cgrad ghalf=0.5d0*ggg1(ll)
9914 gradcorr6ij=eel6*g_contij(ll,1)+ekont*derx(ll,1,1)
9915 gradcorr6kl=eel6*g_contij(ll,2)+ekont*derx(ll,1,2)
9916 gradcorr6(ll,i)=gradcorr6(ll,i)+ekont*derx(ll,2,1)
9917 gradcorr6(ll,i+1)=gradcorr6(ll,i+1)+ekont*derx(ll,3,1)
9918 gradcorr6(ll,j)=gradcorr6(ll,j)+ekont*derx(ll,4,1)
9919 gradcorr6(ll,j1)=gradcorr6(ll,j1)+ekont*derx(ll,5,1)
9920 gradcorr6_long(ll,j)=gradcorr6_long(ll,j)+gradcorr6ij
9921 gradcorr6_long(ll,i)=gradcorr6_long(ll,i)-gradcorr6ij
9922 cgrad ghalf=0.5d0*ggg2(ll)
9923 cold ghalf=0.5d0*eel6*eij*gacont_hbr(ll,kk,k)
9925 gradcorr6(ll,k)=gradcorr6(ll,k)+ekont*derx(ll,2,2)
9926 gradcorr6(ll,k+1)=gradcorr6(ll,k+1)+ekont*derx(ll,3,2)
9927 gradcorr6(ll,l)=gradcorr6(ll,l)+ekont*derx(ll,4,2)
9928 gradcorr6(ll,l1)=gradcorr6(ll,l1)+ekont*derx(ll,5,2)
9929 gradcorr6_long(ll,l)=gradcorr6_long(ll,l)+gradcorr6kl
9930 gradcorr6_long(ll,k)=gradcorr6_long(ll,k)-gradcorr6kl
9935 cold gradcorr6(ll,m)=gradcorr6(ll,m)+eel6*ekl*gacont_hbr(ll,jj,i)
9936 cgrad gradcorr6(ll,m)=gradcorr6(ll,m)+ggg1(ll)
9941 cold gradcorr6(ll,m)=gradcorr6(ll,m)+eel6*eij*gacont_hbr(ll,kk,k)
9942 cgrad gradcorr6(ll,m)=gradcorr6(ll,m)+ggg2(ll)
9948 cgrad gradcorr6(ll,m)=gradcorr6(ll,m)+ekont*derx(ll,1,1)
9953 cgrad gradcorr6(ll,m)=gradcorr6(ll,m)+ekont*derx(ll,1,2)
9957 cd write (2,*) iii,g_corr6_loc(iii)
9960 cd write (2,*) 'ekont',ekont
9961 cd write (iout,*) 'eello6',ekont*eel6
9964 c--------------------------------------------------------------------------
9965 double precision function eello6_graph1(i,j,k,l,imat,swap)
9966 implicit real*8 (a-h,o-z)
9967 include 'DIMENSIONS'
9968 include 'COMMON.IOUNITS'
9969 include 'COMMON.CHAIN'
9970 include 'COMMON.DERIV'
9971 include 'COMMON.INTERACT'
9972 include 'COMMON.CONTACTS'
9973 include 'COMMON.TORSION'
9974 include 'COMMON.VAR'
9975 include 'COMMON.GEO'
9976 double precision vv(2),vv1(2),pizda(2,2),auxmat(2,2),pizda1(2,2)
9980 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
9982 C Parallel Antiparallel C
9988 C \ j|/k\| / \ |/k\|l / C
9993 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
9994 itk=itype2loc(itype(k))
9995 s1= scalar2(AEAb1(1,2,imat),CUgb2(1,i))
9996 s2=-scalar2(AEAb2(1,1,imat),Ug2Db1t(1,k))
9997 s3= scalar2(AEAb2(1,1,imat),CUgb2(1,k))
9998 call transpose2(EUgC(1,1,k),auxmat(1,1))
9999 call matmat2(AEA(1,1,imat),auxmat(1,1),pizda1(1,1))
10000 vv1(1)=pizda1(1,1)-pizda1(2,2)
10001 vv1(2)=pizda1(1,2)+pizda1(2,1)
10002 s4=0.5d0*scalar2(vv1(1),Dtobr2(1,i))
10003 vv(1)=AEAb1(1,2,imat)*b1(1,k)-AEAb1(2,2,imat)*b1(2,k)
10004 vv(2)=AEAb1(1,2,imat)*b1(2,k)+AEAb1(2,2,imat)*b1(1,k)
10005 s5=scalar2(vv(1),Dtobr2(1,i))
10006 cd write (2,*) 's1',s1,' s2',s2,' s3',s3,' s4', s4,' s5',s5
10007 eello6_graph1=-0.5d0*(s1+s2+s3+s4+s5)
10008 if (i.gt.1) g_corr6_loc(i-1)=g_corr6_loc(i-1)
10009 & -0.5d0*ekont*(scalar2(AEAb1(1,2,imat),CUgb2der(1,i))
10010 & -scalar2(AEAb2derg(1,2,1,imat),Ug2Db1t(1,k))
10011 & +scalar2(AEAb2derg(1,2,1,imat),CUgb2(1,k))
10012 & +0.5d0*scalar2(vv1(1),Dtobr2der(1,i))
10013 & +scalar2(vv(1),Dtobr2der(1,i)))
10014 call matmat2(AEAderg(1,1,imat),auxmat(1,1),pizda1(1,1))
10015 vv1(1)=pizda1(1,1)-pizda1(2,2)
10016 vv1(2)=pizda1(1,2)+pizda1(2,1)
10017 vv(1)=AEAb1derg(1,2,imat)*b1(1,k)-AEAb1derg(2,2,imat)*b1(2,k)
10018 vv(2)=AEAb1derg(1,2,imat)*b1(2,k)+AEAb1derg(2,2,imat)*b1(1,k)
10020 g_corr6_loc(l-1)=g_corr6_loc(l-1)
10021 & +ekont*(-0.5d0*(scalar2(AEAb1derg(1,2,imat),CUgb2(1,i))
10022 & -scalar2(AEAb2derg(1,1,1,imat),Ug2Db1t(1,k))
10023 & +scalar2(AEAb2derg(1,1,1,imat),CUgb2(1,k))
10024 & +0.5d0*scalar2(vv1(1),Dtobr2(1,i))+scalar2(vv(1),Dtobr2(1,i))))
10026 g_corr6_loc(j-1)=g_corr6_loc(j-1)
10027 & +ekont*(-0.5d0*(scalar2(AEAb1derg(1,2,imat),CUgb2(1,i))
10028 & -scalar2(AEAb2derg(1,1,1,imat),Ug2Db1t(1,k))
10029 & +scalar2(AEAb2derg(1,1,1,imat),CUgb2(1,k))
10030 & +0.5d0*scalar2(vv1(1),Dtobr2(1,i))+scalar2(vv(1),Dtobr2(1,i))))
10032 call transpose2(EUgCder(1,1,k),auxmat(1,1))
10033 call matmat2(AEA(1,1,imat),auxmat(1,1),pizda1(1,1))
10034 vv1(1)=pizda1(1,1)-pizda1(2,2)
10035 vv1(2)=pizda1(1,2)+pizda1(2,1)
10036 if (k.gt.1) g_corr6_loc(k-1)=g_corr6_loc(k-1)
10037 & +ekont*(-0.5d0*(-scalar2(AEAb2(1,1,imat),Ug2Db1tder(1,k))
10038 & +scalar2(AEAb2(1,1,imat),CUgb2der(1,k))
10039 & +0.5d0*scalar2(vv1(1),Dtobr2(1,i))))
10048 s1= scalar2(AEAb1derx(1,lll,kkk,iii,2,imat),CUgb2(1,i))
10049 s2=-scalar2(AEAb2derx(1,lll,kkk,iii,1,imat),Ug2Db1t(1,k))
10050 s3= scalar2(AEAb2derx(1,lll,kkk,iii,1,imat),CUgb2(1,k))
10051 call transpose2(EUgC(1,1,k),auxmat(1,1))
10052 call matmat2(AEAderx(1,1,lll,kkk,iii,imat),auxmat(1,1),
10054 vv1(1)=pizda1(1,1)-pizda1(2,2)
10055 vv1(2)=pizda1(1,2)+pizda1(2,1)
10056 s4=0.5d0*scalar2(vv1(1),Dtobr2(1,i))
10057 vv(1)=AEAb1derx(1,lll,kkk,iii,2,imat)*b1(1,k)
10058 & -AEAb1derx(2,lll,kkk,iii,2,imat)*b1(2,k)
10059 vv(2)=AEAb1derx(1,lll,kkk,iii,2,imat)*b1(2,k)
10060 & +AEAb1derx(2,lll,kkk,iii,2,imat)*b1(1,k)
10061 s5=scalar2(vv(1),Dtobr2(1,i))
10062 derx(lll,kkk,ind)=derx(lll,kkk,ind)-0.5d0*(s1+s2+s3+s4+s5)
10068 c----------------------------------------------------------------------------
10069 double precision function eello6_graph2(i,j,k,l,jj,kk,swap)
10070 implicit real*8 (a-h,o-z)
10071 include 'DIMENSIONS'
10072 include 'COMMON.IOUNITS'
10073 include 'COMMON.CHAIN'
10074 include 'COMMON.DERIV'
10075 include 'COMMON.INTERACT'
10076 include 'COMMON.CONTACTS'
10077 include 'COMMON.TORSION'
10078 include 'COMMON.VAR'
10079 include 'COMMON.GEO'
10081 double precision vv(2),pizda(2,2),auxmat(2,2),auxvec(2),
10082 & auxvec1(2),auxvec2(2),auxmat1(2,2)
10084 common /kutas/ lprn
10085 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
10087 C Parallel Antiparallel C
10093 C \ j|/k\| \ |/k\|l C
10098 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
10099 cd write (2,*) 'eello6_graph2: i,',i,' j',j,' k',k,' l',l
10100 C AL 7/4/01 s1 would occur in the sixth-order moment,
10101 C but not in a cluster cumulant
10103 s1=dip(1,jj,i)*dip(1,kk,k)
10105 call matvec2(ADtEA1(1,1,1),Ub2(1,k),auxvec(1))
10106 s2=-0.5d0*scalar2(Ub2(1,i),auxvec(1))
10107 call matvec2(ADtEA(1,1,2),Ub2(1,l),auxvec1(1))
10108 s3=-0.5d0*scalar2(Ub2(1,j),auxvec1(1))
10109 call transpose2(EUg(1,1,k),auxmat(1,1))
10110 call matmat2(ADtEA1(1,1,1),auxmat(1,1),pizda(1,1))
10111 vv(1)=pizda(1,1)-pizda(2,2)
10112 vv(2)=pizda(1,2)+pizda(2,1)
10113 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
10114 cd write (2,*) 'eello6_graph2:','s1',s1,' s2',s2,' s3',s3,' s4',s4
10116 eello6_graph2=-(s1+s2+s3+s4)
10118 eello6_graph2=-(s2+s3+s4)
10120 c eello6_graph2=-s3
10121 C Derivatives in gamma(i-1)
10124 s1=dipderg(1,jj,i)*dip(1,kk,k)
10126 s2=-0.5d0*scalar2(Ub2der(1,i),auxvec(1))
10127 call matvec2(ADtEAderg(1,1,1,2),Ub2(1,l),auxvec2(1))
10128 s3=-0.5d0*scalar2(Ub2(1,j),auxvec2(1))
10129 s4=-0.25d0*scalar2(vv(1),Dtobr2der(1,i))
10131 g_corr6_loc(i-1)=g_corr6_loc(i-1)-ekont*(s1+s2+s3+s4)
10133 g_corr6_loc(i-1)=g_corr6_loc(i-1)-ekont*(s2+s3+s4)
10135 c g_corr6_loc(i-1)=g_corr6_loc(i-1)-s3
10137 C Derivatives in gamma(k-1)
10139 s1=dip(1,jj,i)*dipderg(1,kk,k)
10141 call matvec2(ADtEA1(1,1,1),Ub2der(1,k),auxvec2(1))
10142 s2=-0.5d0*scalar2(Ub2(1,i),auxvec2(1))
10143 call matvec2(ADtEAderg(1,1,2,2),Ub2(1,l),auxvec2(1))
10144 s3=-0.5d0*scalar2(Ub2(1,j),auxvec2(1))
10145 call transpose2(EUgder(1,1,k),auxmat1(1,1))
10146 call matmat2(ADtEA1(1,1,1),auxmat1(1,1),pizda(1,1))
10147 vv(1)=pizda(1,1)-pizda(2,2)
10148 vv(2)=pizda(1,2)+pizda(2,1)
10149 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
10151 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s1+s2+s3+s4)
10153 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s2+s3+s4)
10155 c g_corr6_loc(k-1)=g_corr6_loc(k-1)-s3
10156 C Derivatives in gamma(j-1) or gamma(l-1)
10159 s1=dipderg(3,jj,i)*dip(1,kk,k)
10161 call matvec2(ADtEA1derg(1,1,1,1),Ub2(1,k),auxvec2(1))
10162 s2=-0.5d0*scalar2(Ub2(1,i),auxvec2(1))
10163 s3=-0.5d0*scalar2(Ub2der(1,j),auxvec1(1))
10164 call matmat2(ADtEA1derg(1,1,1,1),auxmat(1,1),pizda(1,1))
10165 vv(1)=pizda(1,1)-pizda(2,2)
10166 vv(2)=pizda(1,2)+pizda(2,1)
10167 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
10170 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*s1
10172 g_corr6_loc(j-1)=g_corr6_loc(j-1)-ekont*s1
10175 g_corr6_loc(j-1)=g_corr6_loc(j-1)-ekont*(s2+s3+s4)
10176 c g_corr6_loc(j-1)=g_corr6_loc(j-1)-s3
10178 C Derivatives in gamma(l-1) or gamma(j-1)
10181 s1=dip(1,jj,i)*dipderg(3,kk,k)
10183 call matvec2(ADtEA1derg(1,1,2,1),Ub2(1,k),auxvec2(1))
10184 s2=-0.5d0*scalar2(Ub2(1,i),auxvec2(1))
10185 call matvec2(ADtEA(1,1,2),Ub2der(1,l),auxvec2(1))
10186 s3=-0.5d0*scalar2(Ub2(1,j),auxvec2(1))
10187 call matmat2(ADtEA1derg(1,1,2,1),auxmat(1,1),pizda(1,1))
10188 vv(1)=pizda(1,1)-pizda(2,2)
10189 vv(2)=pizda(1,2)+pizda(2,1)
10190 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
10193 g_corr6_loc(j-1)=g_corr6_loc(j-1)-ekont*s1
10195 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*s1
10198 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*(s2+s3+s4)
10199 c g_corr6_loc(l-1)=g_corr6_loc(l-1)-s3
10201 C Cartesian derivatives.
10203 write (2,*) 'In eello6_graph2'
10205 write (2,*) 'iii=',iii
10207 write (2,*) 'kkk=',kkk
10209 write (2,'(3(2f10.5),5x)')
10210 & ((ADtEA1derx(jjj,mmm,lll,kkk,iii,1),mmm=1,2),lll=1,3)
10220 s1=dipderx(lll,kkk,1,jj,i)*dip(1,kk,k)
10222 s1=dip(1,jj,i)*dipderx(lll,kkk,1,kk,k)
10225 call matvec2(ADtEA1derx(1,1,lll,kkk,iii,1),Ub2(1,k),
10227 s2=-0.5d0*scalar2(Ub2(1,i),auxvec(1))
10228 call matvec2(ADtEAderx(1,1,lll,kkk,iii,2),Ub2(1,l),
10230 s3=-0.5d0*scalar2(Ub2(1,j),auxvec(1))
10231 call transpose2(EUg(1,1,k),auxmat(1,1))
10232 call matmat2(ADtEA1derx(1,1,lll,kkk,iii,1),auxmat(1,1),
10234 vv(1)=pizda(1,1)-pizda(2,2)
10235 vv(2)=pizda(1,2)+pizda(2,1)
10236 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
10237 cd write (2,*) 's1',s1,' s2',s2,' s3',s3,' s4',s4
10239 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s1+s2+s4)
10241 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s2+s4)
10244 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-s3
10246 derx(lll,kkk,iii)=derx(lll,kkk,iii)-s3
10253 c----------------------------------------------------------------------------
10254 double precision function eello6_graph3(i,j,k,l,jj,kk,swap)
10255 implicit real*8 (a-h,o-z)
10256 include 'DIMENSIONS'
10257 include 'COMMON.IOUNITS'
10258 include 'COMMON.CHAIN'
10259 include 'COMMON.DERIV'
10260 include 'COMMON.INTERACT'
10261 include 'COMMON.CONTACTS'
10262 include 'COMMON.TORSION'
10263 include 'COMMON.VAR'
10264 include 'COMMON.GEO'
10265 double precision vv(2),pizda(2,2),auxmat(2,2),auxvec(2)
10267 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
10269 C Parallel Antiparallel C
10274 C /| o |o o| o |\ C
10275 C j|/k\| / |/k\|l / C
10280 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
10282 C 4/7/01 AL Component s1 was removed, because it pertains to the respective
10283 C energy moment and not to the cluster cumulant.
10284 iti=itortyp(itype(i))
10285 if (j.lt.nres-1) then
10286 itj1=itype2loc(itype(j+1))
10290 itk=itype2loc(itype(k))
10291 itk1=itype2loc(itype(k+1))
10292 if (l.lt.nres-1) then
10293 itl1=itype2loc(itype(l+1))
10298 s1=dip(4,jj,i)*dip(4,kk,k)
10300 call matvec2(AECA(1,1,1),b1(1,k+1),auxvec(1))
10301 s2=0.5d0*scalar2(b1(1,k),auxvec(1))
10302 call matvec2(AECA(1,1,2),b1(1,l+1),auxvec(1))
10303 s3=0.5d0*scalar2(b1(1,j+1),auxvec(1))
10304 call transpose2(EE(1,1,k),auxmat(1,1))
10305 call matmat2(auxmat(1,1),AECA(1,1,1),pizda(1,1))
10306 vv(1)=pizda(1,1)+pizda(2,2)
10307 vv(2)=pizda(2,1)-pizda(1,2)
10308 s4=-0.25d0*scalar2(vv(1),Ctobr(1,k))
10309 cd write (2,*) 'eello6_graph3:','s1',s1,' s2',s2,' s3',s3,' s4',s4,
10310 cd & "sum",-(s2+s3+s4)
10312 eello6_graph3=-(s1+s2+s3+s4)
10314 eello6_graph3=-(s2+s3+s4)
10316 c eello6_graph3=-s4
10317 C Derivatives in gamma(k-1)
10318 call matvec2(AECAderg(1,1,2),b1(1,l+1),auxvec(1))
10319 s3=0.5d0*scalar2(b1(1,j+1),auxvec(1))
10320 s4=-0.25d0*scalar2(vv(1),Ctobrder(1,k))
10321 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s3+s4)
10322 C Derivatives in gamma(l-1)
10323 call matvec2(AECAderg(1,1,1),b1(1,k+1),auxvec(1))
10324 s2=0.5d0*scalar2(b1(1,k),auxvec(1))
10325 call matmat2(auxmat(1,1),AECAderg(1,1,1),pizda(1,1))
10326 vv(1)=pizda(1,1)+pizda(2,2)
10327 vv(2)=pizda(2,1)-pizda(1,2)
10328 s4=-0.25d0*scalar2(vv(1),Ctobr(1,k))
10329 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*(s2+s4)
10330 C Cartesian derivatives.
10336 s1=dipderx(lll,kkk,4,jj,i)*dip(4,kk,k)
10338 s1=dip(4,jj,i)*dipderx(lll,kkk,4,kk,k)
10341 call matvec2(AECAderx(1,1,lll,kkk,iii,1),b1(1,k+1),
10343 s2=0.5d0*scalar2(b1(1,k),auxvec(1))
10344 call matvec2(AECAderx(1,1,lll,kkk,iii,2),b1(1,l+1),
10346 s3=0.5d0*scalar2(b1(1,j+1),auxvec(1))
10347 call matmat2(auxmat(1,1),AECAderx(1,1,lll,kkk,iii,1),
10349 vv(1)=pizda(1,1)+pizda(2,2)
10350 vv(2)=pizda(2,1)-pizda(1,2)
10351 s4=-0.25d0*scalar2(vv(1),Ctobr(1,k))
10353 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s1+s2+s4)
10355 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s2+s4)
10358 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-s3
10360 derx(lll,kkk,iii)=derx(lll,kkk,iii)-s3
10362 c derx(lll,kkk,iii)=derx(lll,kkk,iii)-s4
10368 c----------------------------------------------------------------------------
10369 double precision function eello6_graph4(i,j,k,l,jj,kk,imat,swap)
10370 implicit real*8 (a-h,o-z)
10371 include 'DIMENSIONS'
10372 include 'COMMON.IOUNITS'
10373 include 'COMMON.CHAIN'
10374 include 'COMMON.DERIV'
10375 include 'COMMON.INTERACT'
10376 include 'COMMON.CONTACTS'
10377 include 'COMMON.TORSION'
10378 include 'COMMON.VAR'
10379 include 'COMMON.GEO'
10380 include 'COMMON.FFIELD'
10381 double precision vv(2),pizda(2,2),auxmat(2,2),auxvec(2),
10382 & auxvec1(2),auxmat1(2,2)
10384 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
10386 C Parallel Antiparallel C
10391 C /| o |o o| o |\ C
10392 C \ j|/k\| \ |/k\|l C
10397 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
10399 C 4/7/01 AL Component s1 was removed, because it pertains to the respective
10400 C energy moment and not to the cluster cumulant.
10401 cd write (2,*) 'eello_graph4: wturn6',wturn6
10402 iti=itype2loc(itype(i))
10403 itj=itype2loc(itype(j))
10404 if (j.lt.nres-1) then
10405 itj1=itype2loc(itype(j+1))
10409 itk=itype2loc(itype(k))
10410 if (k.lt.nres-1) then
10411 itk1=itype2loc(itype(k+1))
10415 itl=itype2loc(itype(l))
10416 if (l.lt.nres-1) then
10417 itl1=itype2loc(itype(l+1))
10421 cd write (2,*) 'eello6_graph4:','i',i,' j',j,' k',k,' l',l
10422 cd write (2,*) 'iti',iti,' itj',itj,' itj1',itj1,' itk',itk,
10423 cd & ' itl',itl,' itl1',itl1
10425 if (imat.eq.1) then
10426 s1=dip(3,jj,i)*dip(3,kk,k)
10428 s1=dip(2,jj,j)*dip(2,kk,l)
10431 call matvec2(AECA(1,1,imat),Ub2(1,k),auxvec(1))
10432 s2=0.5d0*scalar2(Ub2(1,i),auxvec(1))
10434 call matvec2(ADtEA1(1,1,3-imat),b1(1,j+1),auxvec1(1))
10435 s3=-0.5d0*scalar2(b1(1,j),auxvec1(1))
10437 call matvec2(ADtEA1(1,1,3-imat),b1(1,l+1),auxvec1(1))
10438 s3=-0.5d0*scalar2(b1(1,l),auxvec1(1))
10440 call transpose2(EUg(1,1,k),auxmat(1,1))
10441 call matmat2(AECA(1,1,imat),auxmat(1,1),pizda(1,1))
10442 vv(1)=pizda(1,1)-pizda(2,2)
10443 vv(2)=pizda(2,1)+pizda(1,2)
10444 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
10445 cd write (2,*) 'eello6_graph4:','s1',s1,' s2',s2,' s3',s3,' s4',s4
10447 eello6_graph4=-(s1+s2+s3+s4)
10449 eello6_graph4=-(s2+s3+s4)
10451 C Derivatives in gamma(i-1)
10454 if (imat.eq.1) then
10455 s1=dipderg(2,jj,i)*dip(3,kk,k)
10457 s1=dipderg(4,jj,j)*dip(2,kk,l)
10460 s2=0.5d0*scalar2(Ub2der(1,i),auxvec(1))
10462 call matvec2(ADtEA1derg(1,1,1,3-imat),b1(1,j+1),auxvec1(1))
10463 s3=-0.5d0*scalar2(b1(1,j),auxvec1(1))
10465 call matvec2(ADtEA1derg(1,1,1,3-imat),b1(1,l+1),auxvec1(1))
10466 s3=-0.5d0*scalar2(b1(1,l),auxvec1(1))
10468 s4=0.25d0*scalar2(vv(1),Dtobr2der(1,i))
10469 if (wturn6.gt.0.0d0 .and. k.eq.l+4 .and. i.eq.j+2) then
10470 cd write (2,*) 'turn6 derivatives'
10472 gel_loc_turn6(i-1)=gel_loc_turn6(i-1)-ekont*(s1+s2+s3+s4)
10474 gel_loc_turn6(i-1)=gel_loc_turn6(i-1)-ekont*(s2+s3+s4)
10478 g_corr6_loc(i-1)=g_corr6_loc(i-1)-ekont*(s1+s2+s3+s4)
10480 g_corr6_loc(i-1)=g_corr6_loc(i-1)-ekont*(s2+s3+s4)
10484 C Derivatives in gamma(k-1)
10486 if (imat.eq.1) then
10487 s1=dip(3,jj,i)*dipderg(2,kk,k)
10489 s1=dip(2,jj,j)*dipderg(4,kk,l)
10492 call matvec2(AECA(1,1,imat),Ub2der(1,k),auxvec1(1))
10493 s2=0.5d0*scalar2(Ub2(1,i),auxvec1(1))
10495 call matvec2(ADtEA1derg(1,1,2,3-imat),b1(1,j+1),auxvec1(1))
10496 s3=-0.5d0*scalar2(b1(1,j),auxvec1(1))
10498 call matvec2(ADtEA1derg(1,1,2,3-imat),b1(1,l+1),auxvec1(1))
10499 s3=-0.5d0*scalar2(b1(1,l),auxvec1(1))
10501 call transpose2(EUgder(1,1,k),auxmat1(1,1))
10502 call matmat2(AECA(1,1,imat),auxmat1(1,1),pizda(1,1))
10503 vv(1)=pizda(1,1)-pizda(2,2)
10504 vv(2)=pizda(2,1)+pizda(1,2)
10505 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
10506 if (wturn6.gt.0.0d0 .and. k.eq.l+4 .and. i.eq.j+2) then
10508 gel_loc_turn6(k-1)=gel_loc_turn6(k-1)-ekont*(s1+s2+s3+s4)
10510 gel_loc_turn6(k-1)=gel_loc_turn6(k-1)-ekont*(s2+s3+s4)
10514 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s1+s2+s3+s4)
10516 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s2+s3+s4)
10519 C Derivatives in gamma(j-1) or gamma(l-1)
10520 if (l.eq.j+1 .and. l.gt.1) then
10521 call matvec2(AECAderg(1,1,imat),Ub2(1,k),auxvec(1))
10522 s2=0.5d0*scalar2(Ub2(1,i),auxvec(1))
10523 call matmat2(AECAderg(1,1,imat),auxmat(1,1),pizda(1,1))
10524 vv(1)=pizda(1,1)-pizda(2,2)
10525 vv(2)=pizda(2,1)+pizda(1,2)
10526 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
10527 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*(s2+s4)
10528 else if (j.gt.1) then
10529 call matvec2(AECAderg(1,1,imat),Ub2(1,k),auxvec(1))
10530 s2=0.5d0*scalar2(Ub2(1,i),auxvec(1))
10531 call matmat2(AECAderg(1,1,imat),auxmat(1,1),pizda(1,1))
10532 vv(1)=pizda(1,1)-pizda(2,2)
10533 vv(2)=pizda(2,1)+pizda(1,2)
10534 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
10535 if (wturn6.gt.0.0d0 .and. k.eq.l+4 .and. i.eq.j+2) then
10536 gel_loc_turn6(j-1)=gel_loc_turn6(j-1)-ekont*(s2+s4)
10538 g_corr6_loc(j-1)=g_corr6_loc(j-1)-ekont*(s2+s4)
10541 C Cartesian derivatives.
10547 if (imat.eq.1) then
10548 s1=dipderx(lll,kkk,3,jj,i)*dip(3,kk,k)
10550 s1=dipderx(lll,kkk,2,jj,j)*dip(2,kk,l)
10553 if (imat.eq.1) then
10554 s1=dip(3,jj,i)*dipderx(lll,kkk,3,kk,k)
10556 s1=dip(2,jj,j)*dipderx(lll,kkk,2,kk,l)
10560 call matvec2(AECAderx(1,1,lll,kkk,iii,imat),Ub2(1,k),
10562 s2=0.5d0*scalar2(Ub2(1,i),auxvec(1))
10564 call matvec2(ADtEA1derx(1,1,lll,kkk,iii,3-imat),
10565 & b1(1,j+1),auxvec(1))
10566 s3=-0.5d0*scalar2(b1(1,j),auxvec(1))
10568 call matvec2(ADtEA1derx(1,1,lll,kkk,iii,3-imat),
10569 & b1(1,l+1),auxvec(1))
10570 s3=-0.5d0*scalar2(b1(1,l),auxvec(1))
10572 call matmat2(AECAderx(1,1,lll,kkk,iii,imat),auxmat(1,1),
10574 vv(1)=pizda(1,1)-pizda(2,2)
10575 vv(2)=pizda(2,1)+pizda(1,2)
10576 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
10578 if (wturn6.gt.0.0d0 .and. k.eq.l+4 .and. i.eq.j+2) then
10580 derx_turn(lll,kkk,3-iii)=derx_turn(lll,kkk,3-iii)
10583 derx_turn(lll,kkk,3-iii)=derx_turn(lll,kkk,3-iii)
10586 derx_turn(lll,kkk,iii)=derx_turn(lll,kkk,iii)-s3
10589 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-(s1+s2+s4)
10591 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-(s2+s4)
10593 derx(lll,kkk,iii)=derx(lll,kkk,iii)-s3
10597 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s1+s2+s4)
10599 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s2+s4)
10602 derx(lll,kkk,iii)=derx(lll,kkk,iii)-s3
10604 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-s3
10612 c----------------------------------------------------------------------------
10613 double precision function eello_turn6(i,jj,kk)
10614 implicit real*8 (a-h,o-z)
10615 include 'DIMENSIONS'
10616 include 'COMMON.IOUNITS'
10617 include 'COMMON.CHAIN'
10618 include 'COMMON.DERIV'
10619 include 'COMMON.INTERACT'
10620 include 'COMMON.CONTACTS'
10621 include 'COMMON.TORSION'
10622 include 'COMMON.VAR'
10623 include 'COMMON.GEO'
10624 double precision vtemp1(2),vtemp2(2),vtemp3(2),vtemp4(2),
10625 & atemp(2,2),auxmat(2,2),achuj_temp(2,2),gtemp(2,2),gvec(2),
10627 double precision vtemp1d(2),vtemp2d(2),vtemp3d(2),vtemp4d(2),
10628 & atempd(2,2),auxmatd(2,2),achuj_tempd(2,2),gtempd(2,2),gvecd(2)
10629 C 4/7/01 AL Components s1, s8, and s13 were removed, because they pertain to
10630 C the respective energy moment and not to the cluster cumulant.
10639 iti=itype2loc(itype(i))
10640 itk=itype2loc(itype(k))
10641 itk1=itype2loc(itype(k+1))
10642 itl=itype2loc(itype(l))
10643 itj=itype2loc(itype(j))
10644 cd write (2,*) 'itk',itk,' itk1',itk1,' itl',itl,' itj',itj
10645 cd write (2,*) 'i',i,' k',k,' j',j,' l',l
10646 cd if (i.ne.1 .or. j.ne.3 .or. k.ne.2 .or. l.ne.4) then
10651 cd & 'EELLO6: Contacts have occurred for peptide groups',i,j,
10653 cd call checkint_turn6(i,jj,kk,eel_turn6_num)
10657 derx_turn(lll,kkk,iii)=0.0d0
10664 eello6_5=eello6_graph4(l,k,j,i,kk,jj,2,.true.)
10666 cd write (2,*) 'eello6_5',eello6_5
10668 call transpose2(AEA(1,1,1),auxmat(1,1))
10669 call matmat2(EUg(1,1,i+1),auxmat(1,1),auxmat(1,1))
10670 ss1=scalar2(Ub2(1,i+2),b1(1,l))
10671 s1 = (auxmat(1,1)+auxmat(2,2))*ss1
10673 call matvec2(EUg(1,1,i+2),b1(1,l),vtemp1(1))
10674 call matvec2(AEA(1,1,1),vtemp1(1),vtemp1(1))
10675 s2 = scalar2(b1(1,k),vtemp1(1))
10677 call transpose2(AEA(1,1,2),atemp(1,1))
10678 call matmat2(atemp(1,1),EUg(1,1,i+4),atemp(1,1))
10679 call matvec2(Ug2(1,1,i+2),dd(1,1,itk1),vtemp2(1))
10680 s8 = -(atemp(1,1)+atemp(2,2))*scalar2(cc(1,1,itl),vtemp2(1))
10682 call matmat2(EUg(1,1,i+3),AEA(1,1,2),auxmat(1,1))
10683 call matvec2(auxmat(1,1),Ub2(1,i+4),vtemp3(1))
10684 s12 = scalar2(Ub2(1,i+2),vtemp3(1))
10686 call transpose2(a_chuj(1,1,kk,i+1),achuj_temp(1,1))
10687 call matmat2(achuj_temp(1,1),EUg(1,1,i+2),gtemp(1,1))
10688 call matmat2(gtemp(1,1),EUg(1,1,i+3),gtemp(1,1))
10689 call matvec2(a_chuj(1,1,jj,i),Ub2(1,i+4),vtemp4(1))
10690 ss13 = scalar2(b1(1,k),vtemp4(1))
10691 s13 = (gtemp(1,1)+gtemp(2,2))*ss13
10693 c write (2,*) 's1,s2,s8,s12,s13',s1,s2,s8,s12,s13
10699 eel_turn6 = eello6_5 - 0.5d0*(s1+s2+s12+s8+s13)
10700 C Derivatives in gamma(i+2)
10704 call transpose2(AEA(1,1,1),auxmatd(1,1))
10705 call matmat2(EUgder(1,1,i+1),auxmatd(1,1),auxmatd(1,1))
10706 s1d = (auxmatd(1,1)+auxmatd(2,2))*ss1
10707 call transpose2(AEAderg(1,1,2),atempd(1,1))
10708 call matmat2(atempd(1,1),EUg(1,1,i+4),atempd(1,1))
10709 s8d = -(atempd(1,1)+atempd(2,2))*scalar2(cc(1,1,itl),vtemp2(1))
10711 call matmat2(EUg(1,1,i+3),AEAderg(1,1,2),auxmatd(1,1))
10712 call matvec2(auxmatd(1,1),Ub2(1,i+4),vtemp3d(1))
10713 s12d = scalar2(Ub2(1,i+2),vtemp3d(1))
10719 gel_loc_turn6(i)=gel_loc_turn6(i)-0.5d0*ekont*(s1d+s8d+s12d)
10720 C Derivatives in gamma(i+3)
10722 call transpose2(AEA(1,1,1),auxmatd(1,1))
10723 call matmat2(EUg(1,1,i+1),auxmatd(1,1),auxmatd(1,1))
10724 ss1d=scalar2(Ub2der(1,i+2),b1(1,l))
10725 s1d = (auxmatd(1,1)+auxmatd(2,2))*ss1d
10727 call matvec2(EUgder(1,1,i+2),b1(1,l),vtemp1d(1))
10728 call matvec2(AEA(1,1,1),vtemp1d(1),vtemp1d(1))
10729 s2d = scalar2(b1(1,k),vtemp1d(1))
10731 call matvec2(Ug2der(1,1,i+2),dd(1,1,itk1),vtemp2d(1))
10732 s8d = -(atemp(1,1)+atemp(2,2))*scalar2(cc(1,1,itl),vtemp2d(1))
10734 s12d = scalar2(Ub2der(1,i+2),vtemp3(1))
10736 call matmat2(achuj_temp(1,1),EUgder(1,1,i+2),gtempd(1,1))
10737 call matmat2(gtempd(1,1),EUg(1,1,i+3),gtempd(1,1))
10738 s13d = (gtempd(1,1)+gtempd(2,2))*ss13
10746 gel_loc_turn6(i+1)=gel_loc_turn6(i+1)
10747 & -0.5d0*ekont*(s1d+s2d+s8d+s12d+s13d)
10749 gel_loc_turn6(i+1)=gel_loc_turn6(i+1)
10750 & -0.5d0*ekont*(s2d+s12d)
10752 C Derivatives in gamma(i+4)
10753 call matmat2(EUgder(1,1,i+3),AEA(1,1,2),auxmatd(1,1))
10754 call matvec2(auxmatd(1,1),Ub2(1,i+4),vtemp3d(1))
10755 s12d = scalar2(Ub2(1,i+2),vtemp3d(1))
10757 call matmat2(achuj_temp(1,1),EUg(1,1,i+2),gtempd(1,1))
10758 call matmat2(gtempd(1,1),EUgder(1,1,i+3),gtempd(1,1))
10759 s13d = (gtempd(1,1)+gtempd(2,2))*ss13
10767 gel_loc_turn6(i+2)=gel_loc_turn6(i+2)-0.5d0*ekont*(s12d+s13d)
10769 gel_loc_turn6(i+2)=gel_loc_turn6(i+2)-0.5d0*ekont*(s12d)
10771 C Derivatives in gamma(i+5)
10773 call transpose2(AEAderg(1,1,1),auxmatd(1,1))
10774 call matmat2(EUg(1,1,i+1),auxmatd(1,1),auxmatd(1,1))
10775 s1d = (auxmatd(1,1)+auxmatd(2,2))*ss1
10777 call matvec2(EUg(1,1,i+2),b1(1,l),vtemp1d(1))
10778 call matvec2(AEAderg(1,1,1),vtemp1d(1),vtemp1d(1))
10779 s2d = scalar2(b1(1,k),vtemp1d(1))
10781 call transpose2(AEA(1,1,2),atempd(1,1))
10782 call matmat2(atempd(1,1),EUgder(1,1,i+4),atempd(1,1))
10783 s8d = -(atempd(1,1)+atempd(2,2))*scalar2(cc(1,1,itl),vtemp2(1))
10785 call matvec2(auxmat(1,1),Ub2der(1,i+4),vtemp3d(1))
10786 s12d = scalar2(Ub2(1,i+2),vtemp3d(1))
10788 call matvec2(a_chuj(1,1,jj,i),Ub2der(1,i+4),vtemp4d(1))
10789 ss13d = scalar2(b1(1,k),vtemp4d(1))
10790 s13d = (gtemp(1,1)+gtemp(2,2))*ss13d
10798 gel_loc_turn6(i+3)=gel_loc_turn6(i+3)
10799 & -0.5d0*ekont*(s1d+s2d+s8d+s12d+s13d)
10801 gel_loc_turn6(i+3)=gel_loc_turn6(i+3)
10802 & -0.5d0*ekont*(s2d+s12d)
10804 C Cartesian derivatives
10809 call transpose2(AEAderx(1,1,lll,kkk,iii,1),auxmatd(1,1))
10810 call matmat2(EUg(1,1,i+1),auxmatd(1,1),auxmatd(1,1))
10811 s1d = (auxmatd(1,1)+auxmatd(2,2))*ss1
10813 call matvec2(EUg(1,1,i+2),b1(1,l),vtemp1(1))
10814 call matvec2(AEAderx(1,1,lll,kkk,iii,1),vtemp1(1),
10816 s2d = scalar2(b1(1,k),vtemp1d(1))
10818 call transpose2(AEAderx(1,1,lll,kkk,iii,2),atempd(1,1))
10819 call matmat2(atempd(1,1),EUg(1,1,i+4),atempd(1,1))
10820 s8d = -(atempd(1,1)+atempd(2,2))*
10821 & scalar2(cc(1,1,itl),vtemp2(1))
10823 call matmat2(EUg(1,1,i+3),AEAderx(1,1,lll,kkk,iii,2),
10825 call matvec2(auxmatd(1,1),Ub2(1,i+4),vtemp3d(1))
10826 s12d = scalar2(Ub2(1,i+2),vtemp3d(1))
10833 derx_turn(lll,kkk,iii) = derx_turn(lll,kkk,iii)
10834 & - 0.5d0*(s1d+s2d)
10836 derx_turn(lll,kkk,iii) = derx_turn(lll,kkk,iii)
10840 derx_turn(lll,kkk,3-iii) = derx_turn(lll,kkk,3-iii)
10841 & - 0.5d0*(s8d+s12d)
10843 derx_turn(lll,kkk,3-iii) = derx_turn(lll,kkk,3-iii)
10852 call transpose2(a_chuj_der(1,1,lll,kkk,kk,i+1),
10853 & achuj_tempd(1,1))
10854 call matmat2(achuj_tempd(1,1),EUg(1,1,i+2),gtempd(1,1))
10855 call matmat2(gtempd(1,1),EUg(1,1,i+3),gtempd(1,1))
10856 s13d=(gtempd(1,1)+gtempd(2,2))*ss13
10857 derx_turn(lll,kkk,2) = derx_turn(lll,kkk,2)-0.5d0*s13d
10858 call matvec2(a_chuj_der(1,1,lll,kkk,jj,i),Ub2(1,i+4),
10860 ss13d = scalar2(b1(1,k),vtemp4d(1))
10861 s13d = (gtemp(1,1)+gtemp(2,2))*ss13d
10862 derx_turn(lll,kkk,1) = derx_turn(lll,kkk,1)-0.5d0*s13d
10866 cd write(iout,*) 'eel6_turn6',eel_turn6,' eel_turn6_num',
10867 cd & 16*eel_turn6_num
10869 if (j.lt.nres-1) then
10876 if (l.lt.nres-1) then
10884 cgrad ggg1(ll)=eel_turn6*g_contij(ll,1)
10885 cgrad ggg2(ll)=eel_turn6*g_contij(ll,2)
10886 cgrad ghalf=0.5d0*ggg1(ll)
10888 gturn6ij=eel_turn6*g_contij(ll,1)+ekont*derx_turn(ll,1,1)
10889 gturn6kl=eel_turn6*g_contij(ll,2)+ekont*derx_turn(ll,1,2)
10890 gcorr6_turn(ll,i)=gcorr6_turn(ll,i)!+ghalf
10891 & +ekont*derx_turn(ll,2,1)
10892 gcorr6_turn(ll,i+1)=gcorr6_turn(ll,i+1)+ekont*derx_turn(ll,3,1)
10893 gcorr6_turn(ll,j)=gcorr6_turn(ll,j)!+ghalf
10894 & +ekont*derx_turn(ll,4,1)
10895 gcorr6_turn(ll,j1)=gcorr6_turn(ll,j1)+ekont*derx_turn(ll,5,1)
10896 gcorr6_turn_long(ll,j)=gcorr6_turn_long(ll,j)+gturn6ij
10897 gcorr6_turn_long(ll,i)=gcorr6_turn_long(ll,i)-gturn6ij
10898 cgrad ghalf=0.5d0*ggg2(ll)
10900 gcorr6_turn(ll,k)=gcorr6_turn(ll,k)!+ghalf
10901 & +ekont*derx_turn(ll,2,2)
10902 gcorr6_turn(ll,k+1)=gcorr6_turn(ll,k+1)+ekont*derx_turn(ll,3,2)
10903 gcorr6_turn(ll,l)=gcorr6_turn(ll,l)!+ghalf
10904 & +ekont*derx_turn(ll,4,2)
10905 gcorr6_turn(ll,l1)=gcorr6_turn(ll,l1)+ekont*derx_turn(ll,5,2)
10906 gcorr6_turn_long(ll,l)=gcorr6_turn_long(ll,l)+gturn6kl
10907 gcorr6_turn_long(ll,k)=gcorr6_turn_long(ll,k)-gturn6kl
10912 cgrad gcorr6_turn(ll,m)=gcorr6_turn(ll,m)+ggg1(ll)
10917 cgrad gcorr6_turn(ll,m)=gcorr6_turn(ll,m)+ggg2(ll)
10923 cgrad gcorr6_turn(ll,m)=gcorr6_turn(ll,m)+ekont*derx_turn(ll,1,1)
10928 cgrad gcorr6_turn(ll,m)=gcorr6_turn(ll,m)+ekont*derx_turn(ll,1,2)
10932 cd write (2,*) iii,g_corr6_loc(iii)
10934 eello_turn6=ekont*eel_turn6
10935 cd write (2,*) 'ekont',ekont
10936 cd write (2,*) 'eel_turn6',ekont*eel_turn6
10940 C-----------------------------------------------------------------------------
10941 double precision function scalar(u,v)
10942 !DIR$ INLINEALWAYS scalar
10944 cDEC$ ATTRIBUTES FORCEINLINE::scalar
10947 double precision u(3),v(3)
10948 cd double precision sc
10956 scalar=u(1)*v(1)+u(2)*v(2)+u(3)*v(3)
10959 crc-------------------------------------------------
10960 SUBROUTINE MATVEC2(A1,V1,V2)
10961 !DIR$ INLINEALWAYS MATVEC2
10963 cDEC$ ATTRIBUTES FORCEINLINE::MATVEC2
10965 implicit real*8 (a-h,o-z)
10966 include 'DIMENSIONS'
10967 DIMENSION A1(2,2),V1(2),V2(2)
10971 c 3 VI=VI+A1(I,K)*V1(K)
10975 vaux1=a1(1,1)*v1(1)+a1(1,2)*v1(2)
10976 vaux2=a1(2,1)*v1(1)+a1(2,2)*v1(2)
10981 C---------------------------------------
10982 SUBROUTINE MATMAT2(A1,A2,A3)
10984 cDEC$ ATTRIBUTES FORCEINLINE::MATMAT2
10986 implicit real*8 (a-h,o-z)
10987 include 'DIMENSIONS'
10988 DIMENSION A1(2,2),A2(2,2),A3(2,2)
10989 c DIMENSION AI3(2,2)
10993 c A3IJ=A3IJ+A1(I,K)*A2(K,J)
10999 ai3_11=a1(1,1)*a2(1,1)+a1(1,2)*a2(2,1)
11000 ai3_12=a1(1,1)*a2(1,2)+a1(1,2)*a2(2,2)
11001 ai3_21=a1(2,1)*a2(1,1)+a1(2,2)*a2(2,1)
11002 ai3_22=a1(2,1)*a2(1,2)+a1(2,2)*a2(2,2)
11010 c-------------------------------------------------------------------------
11011 double precision function scalar2(u,v)
11012 !DIR$ INLINEALWAYS scalar2
11014 double precision u(2),v(2)
11015 double precision sc
11017 scalar2=u(1)*v(1)+u(2)*v(2)
11021 C-----------------------------------------------------------------------------
11023 subroutine transpose2(a,at)
11024 !DIR$ INLINEALWAYS transpose2
11026 cDEC$ ATTRIBUTES FORCEINLINE::transpose2
11029 double precision a(2,2),at(2,2)
11036 c--------------------------------------------------------------------------
11037 subroutine transpose(n,a,at)
11040 double precision a(n,n),at(n,n)
11048 C---------------------------------------------------------------------------
11049 subroutine prodmat3(a1,a2,kk,transp,prod)
11050 !DIR$ INLINEALWAYS prodmat3
11052 cDEC$ ATTRIBUTES FORCEINLINE::prodmat3
11056 double precision a1(2,2),a2(2,2),a2t(2,2),kk(2,2),prod(2,2)
11058 crc double precision auxmat(2,2),prod_(2,2)
11061 crc call transpose2(kk(1,1),auxmat(1,1))
11062 crc call matmat2(a1(1,1),auxmat(1,1),auxmat(1,1))
11063 crc call matmat2(auxmat(1,1),a2(1,1),prod_(1,1))
11065 prod(1,1)=(a1(1,1)*kk(1,1)+a1(1,2)*kk(1,2))*a2(1,1)
11066 & +(a1(1,1)*kk(2,1)+a1(1,2)*kk(2,2))*a2(2,1)
11067 prod(1,2)=(a1(1,1)*kk(1,1)+a1(1,2)*kk(1,2))*a2(1,2)
11068 & +(a1(1,1)*kk(2,1)+a1(1,2)*kk(2,2))*a2(2,2)
11069 prod(2,1)=(a1(2,1)*kk(1,1)+a1(2,2)*kk(1,2))*a2(1,1)
11070 & +(a1(2,1)*kk(2,1)+a1(2,2)*kk(2,2))*a2(2,1)
11071 prod(2,2)=(a1(2,1)*kk(1,1)+a1(2,2)*kk(1,2))*a2(1,2)
11072 & +(a1(2,1)*kk(2,1)+a1(2,2)*kk(2,2))*a2(2,2)
11075 crc call matmat2(a1(1,1),kk(1,1),auxmat(1,1))
11076 crc call matmat2(auxmat(1,1),a2(1,1),prod_(1,1))
11078 prod(1,1)=(a1(1,1)*kk(1,1)+a1(1,2)*kk(2,1))*a2(1,1)
11079 & +(a1(1,1)*kk(1,2)+a1(1,2)*kk(2,2))*a2(2,1)
11080 prod(1,2)=(a1(1,1)*kk(1,1)+a1(1,2)*kk(2,1))*a2(1,2)
11081 & +(a1(1,1)*kk(1,2)+a1(1,2)*kk(2,2))*a2(2,2)
11082 prod(2,1)=(a1(2,1)*kk(1,1)+a1(2,2)*kk(2,1))*a2(1,1)
11083 & +(a1(2,1)*kk(1,2)+a1(2,2)*kk(2,2))*a2(2,1)
11084 prod(2,2)=(a1(2,1)*kk(1,1)+a1(2,2)*kk(2,1))*a2(1,2)
11085 & +(a1(2,1)*kk(1,2)+a1(2,2)*kk(2,2))*a2(2,2)
11088 c call transpose2(a2(1,1),a2t(1,1))
11091 crc print *,((prod_(i,j),i=1,2),j=1,2)
11092 crc print *,((prod(i,j),i=1,2),j=1,2)
11096 CCC----------------------------------------------
11097 subroutine Eliptransfer(eliptran)
11098 implicit real*8 (a-h,o-z)
11099 include 'DIMENSIONS'
11100 include 'COMMON.GEO'
11101 include 'COMMON.VAR'
11102 include 'COMMON.LOCAL'
11103 include 'COMMON.CHAIN'
11104 include 'COMMON.DERIV'
11105 include 'COMMON.NAMES'
11106 include 'COMMON.INTERACT'
11107 include 'COMMON.IOUNITS'
11108 include 'COMMON.CALC'
11109 include 'COMMON.CONTROL'
11110 include 'COMMON.SPLITELE'
11111 include 'COMMON.SBRIDGE'
11112 C this is done by Adasko
11113 C print *,"wchodze"
11114 C structure of box:
11116 C--bordliptop-- buffore starts
11117 C--bufliptop--- here true lipid starts
11119 C--buflipbot--- lipid ends buffore starts
11120 C--bordlipbot--buffore ends
11122 do i=ilip_start,ilip_end
11124 if (itype(i).eq.ntyp1) cycle
11126 positi=(mod(((c(3,i)+c(3,i+1))/2.0d0),boxzsize))
11127 if (positi.le.0.0) positi=positi+boxzsize
11129 C first for peptide groups
11130 c for each residue check if it is in lipid or lipid water border area
11131 if ((positi.gt.bordlipbot)
11132 &.and.(positi.lt.bordliptop)) then
11133 C the energy transfer exist
11134 if (positi.lt.buflipbot) then
11135 C what fraction I am in
11137 & ((positi-bordlipbot)/lipbufthick)
11138 C lipbufthick is thickenes of lipid buffore
11139 sslip=sscalelip(fracinbuf)
11140 ssgradlip=-sscagradlip(fracinbuf)/lipbufthick
11141 eliptran=eliptran+sslip*pepliptran
11142 gliptranc(3,i)=gliptranc(3,i)+ssgradlip*pepliptran/2.0d0
11143 gliptranc(3,i-1)=gliptranc(3,i-1)+ssgradlip*pepliptran/2.0d0
11144 C gliptranc(3,i-2)=gliptranc(3,i)+ssgradlip*pepliptran
11146 C print *,"doing sccale for lower part"
11147 C print *,i,sslip,fracinbuf,ssgradlip
11148 elseif (positi.gt.bufliptop) then
11149 fracinbuf=1.0d0-((bordliptop-positi)/lipbufthick)
11150 sslip=sscalelip(fracinbuf)
11151 ssgradlip=sscagradlip(fracinbuf)/lipbufthick
11152 eliptran=eliptran+sslip*pepliptran
11153 gliptranc(3,i)=gliptranc(3,i)+ssgradlip*pepliptran/2.0d0
11154 gliptranc(3,i-1)=gliptranc(3,i-1)+ssgradlip*pepliptran/2.0d0
11155 C gliptranc(3,i-2)=gliptranc(3,i)+ssgradlip*pepliptran
11156 C print *, "doing sscalefor top part"
11157 C print *,i,sslip,fracinbuf,ssgradlip
11159 eliptran=eliptran+pepliptran
11160 C print *,"I am in true lipid"
11163 C eliptran=elpitran+0.0 ! I am in water
11166 C print *, "nic nie bylo w lipidzie?"
11167 C now multiply all by the peptide group transfer factor
11168 C eliptran=eliptran*pepliptran
11169 C now the same for side chains
11171 do i=ilip_start,ilip_end
11172 if (itype(i).eq.ntyp1) cycle
11173 positi=(mod(c(3,i+nres),boxzsize))
11174 if (positi.le.0) positi=positi+boxzsize
11175 C print *,mod(c(3,i+nres),boxzsize),bordlipbot,bordliptop
11176 c for each residue check if it is in lipid or lipid water border area
11177 C respos=mod(c(3,i+nres),boxzsize)
11178 C print *,positi,bordlipbot,buflipbot
11179 if ((positi.gt.bordlipbot)
11180 & .and.(positi.lt.bordliptop)) then
11181 C the energy transfer exist
11182 if (positi.lt.buflipbot) then
11184 & ((positi-bordlipbot)/lipbufthick)
11185 C lipbufthick is thickenes of lipid buffore
11186 sslip=sscalelip(fracinbuf)
11187 ssgradlip=-sscagradlip(fracinbuf)/lipbufthick
11188 eliptran=eliptran+sslip*liptranene(itype(i))
11189 gliptranx(3,i)=gliptranx(3,i)
11190 &+ssgradlip*liptranene(itype(i))
11191 gliptranc(3,i-1)= gliptranc(3,i-1)
11192 &+ssgradlip*liptranene(itype(i))
11193 C print *,"doing sccale for lower part"
11194 elseif (positi.gt.bufliptop) then
11196 &((bordliptop-positi)/lipbufthick)
11197 sslip=sscalelip(fracinbuf)
11198 ssgradlip=sscagradlip(fracinbuf)/lipbufthick
11199 eliptran=eliptran+sslip*liptranene(itype(i))
11200 gliptranx(3,i)=gliptranx(3,i)
11201 &+ssgradlip*liptranene(itype(i))
11202 gliptranc(3,i-1)= gliptranc(3,i-1)
11203 &+ssgradlip*liptranene(itype(i))
11204 C print *, "doing sscalefor top part",sslip,fracinbuf
11206 eliptran=eliptran+liptranene(itype(i))
11207 C print *,"I am in true lipid"
11209 endif ! if in lipid or buffor
11211 C eliptran=elpitran+0.0 ! I am in water
11215 C---------------------------------------------------------
11216 C AFM soubroutine for constant force
11217 subroutine AFMforce(Eafmforce)
11218 implicit real*8 (a-h,o-z)
11219 include 'DIMENSIONS'
11220 include 'COMMON.GEO'
11221 include 'COMMON.VAR'
11222 include 'COMMON.LOCAL'
11223 include 'COMMON.CHAIN'
11224 include 'COMMON.DERIV'
11225 include 'COMMON.NAMES'
11226 include 'COMMON.INTERACT'
11227 include 'COMMON.IOUNITS'
11228 include 'COMMON.CALC'
11229 include 'COMMON.CONTROL'
11230 include 'COMMON.SPLITELE'
11231 include 'COMMON.SBRIDGE'
11236 diffafm(i)=c(i,afmend)-c(i,afmbeg)
11237 dist=dist+diffafm(i)**2
11240 Eafmforce=-forceAFMconst*(dist-distafminit)
11242 gradafm(i,afmend-1)=-forceAFMconst*diffafm(i)/dist
11243 gradafm(i,afmbeg-1)=forceAFMconst*diffafm(i)/dist
11245 C print *,'AFM',Eafmforce
11248 C---------------------------------------------------------
11249 C AFM subroutine with pseudoconstant velocity
11250 subroutine AFMvel(Eafmforce)
11251 implicit real*8 (a-h,o-z)
11252 include 'DIMENSIONS'
11253 include 'COMMON.GEO'
11254 include 'COMMON.VAR'
11255 include 'COMMON.LOCAL'
11256 include 'COMMON.CHAIN'
11257 include 'COMMON.DERIV'
11258 include 'COMMON.NAMES'
11259 include 'COMMON.INTERACT'
11260 include 'COMMON.IOUNITS'
11261 include 'COMMON.CALC'
11262 include 'COMMON.CONTROL'
11263 include 'COMMON.SPLITELE'
11264 include 'COMMON.SBRIDGE'
11266 C Only for check grad COMMENT if not used for checkgrad
11268 C--------------------------------------------------------
11269 C print *,"wchodze"
11273 diffafm(i)=c(i,afmend)-c(i,afmbeg)
11274 dist=dist+diffafm(i)**2
11277 Eafmforce=0.5d0*forceAFMconst
11278 & *(distafminit+totTafm*velAFMconst-dist)**2
11279 C Eafmforce=-forceAFMconst*(dist-distafminit)
11281 gradafm(i,afmend-1)=-forceAFMconst*
11282 &(distafminit+totTafm*velAFMconst-dist)
11284 gradafm(i,afmbeg-1)=forceAFMconst*
11285 &(distafminit+totTafm*velAFMconst-dist)
11288 C print *,'AFM',Eafmforce,totTafm*velAFMconst,dist
11291 C-----------------------------------------------------------
11292 C first for shielding is setting of function of side-chains
11293 subroutine set_shield_fac
11294 implicit real*8 (a-h,o-z)
11295 include 'DIMENSIONS'
11296 include 'COMMON.CHAIN'
11297 include 'COMMON.DERIV'
11298 include 'COMMON.IOUNITS'
11299 include 'COMMON.SHIELD'
11300 include 'COMMON.INTERACT'
11301 C this is the squar root 77 devided by 81 the epislion in lipid (in protein)
11302 double precision div77_81/0.974996043d0/,
11303 &div4_81/0.2222222222d0/,sh_frac_dist_grad(3)
11305 C the vector between center of side_chain and peptide group
11306 double precision pep_side(3),long,side_calf(3),
11307 &pept_group(3),costhet_grad(3),cosphi_grad_long(3),
11308 &cosphi_grad_loc(3),pep_side_norm(3),side_calf_norm(3)
11309 C the line belowe needs to be changed for FGPROC>1
11311 if ((itype(i).eq.ntyp1).and.itype(i+1).eq.ntyp1) cycle
11313 Cif there two consequtive dummy atoms there is no peptide group between them
11314 C the line below has to be changed for FGPROC>1
11317 if ((itype(k).eq.ntyp1).or.(itype(k).eq.10)) cycle
11321 C first lets set vector conecting the ithe side-chain with kth side-chain
11322 pep_side(j)=c(j,k+nres)-(c(j,i)+c(j,i+1))/2.0d0
11323 C pep_side(j)=2.0d0
11324 C and vector conecting the side-chain with its proper calfa
11325 side_calf(j)=c(j,k+nres)-c(j,k)
11326 C side_calf(j)=2.0d0
11327 pept_group(j)=c(j,i)-c(j,i+1)
11328 C lets have their lenght
11329 dist_pep_side=pep_side(j)**2+dist_pep_side
11330 dist_side_calf=dist_side_calf+side_calf(j)**2
11331 dist_pept_group=dist_pept_group+pept_group(j)**2
11333 dist_pep_side=dsqrt(dist_pep_side)
11334 dist_pept_group=dsqrt(dist_pept_group)
11335 dist_side_calf=dsqrt(dist_side_calf)
11337 pep_side_norm(j)=pep_side(j)/dist_pep_side
11338 side_calf_norm(j)=dist_side_calf
11340 C now sscale fraction
11341 sh_frac_dist=-(dist_pep_side-rpp(1,1)-buff_shield)/buff_shield
11342 C print *,buff_shield,"buff"
11344 if (sh_frac_dist.le.0.0) cycle
11345 C If we reach here it means that this side chain reaches the shielding sphere
11346 C Lets add him to the list for gradient
11347 ishield_list(i)=ishield_list(i)+1
11348 C ishield_list is a list of non 0 side-chain that contribute to factor gradient
11349 C this list is essential otherwise problem would be O3
11350 shield_list(ishield_list(i),i)=k
11351 C Lets have the sscale value
11352 if (sh_frac_dist.gt.1.0) then
11353 scale_fac_dist=1.0d0
11355 sh_frac_dist_grad(j)=0.0d0
11358 scale_fac_dist=-sh_frac_dist*sh_frac_dist
11359 & *(2.0*sh_frac_dist-3.0d0)
11360 fac_help_scale=6.0*(sh_frac_dist-sh_frac_dist**2)
11361 & /dist_pep_side/buff_shield*0.5
11362 C remember for the final gradient multiply sh_frac_dist_grad(j)
11363 C for side_chain by factor -2 !
11365 sh_frac_dist_grad(j)=fac_help_scale*pep_side(j)
11366 C print *,"jestem",scale_fac_dist,fac_help_scale,
11367 C & sh_frac_dist_grad(j)
11370 C if ((i.eq.3).and.(k.eq.2)) then
11371 C print *,i,sh_frac_dist,dist_pep,fac_help_scale,scale_fac_dist
11375 C this is what is now we have the distance scaling now volume...
11376 short=short_r_sidechain(itype(k))
11377 long=long_r_sidechain(itype(k))
11378 costhet=1.0d0/dsqrt(1.0+short**2/dist_pep_side**2)
11381 costhet_fac=costhet**3*short**2*(-0.5)/dist_pep_side**4
11382 C costhet_fac=0.0d0
11384 costhet_grad(j)=costhet_fac*pep_side(j)
11386 C remember for the final gradient multiply costhet_grad(j)
11387 C for side_chain by factor -2 !
11388 C fac alfa is angle between CB_k,CA_k, CA_i,CA_i+1
11389 C pep_side0pept_group is vector multiplication
11390 pep_side0pept_group=0.0
11392 pep_side0pept_group=pep_side0pept_group+pep_side(j)*side_calf(j)
11394 cosalfa=(pep_side0pept_group/
11395 & (dist_pep_side*dist_side_calf))
11396 fac_alfa_sin=1.0-cosalfa**2
11397 fac_alfa_sin=dsqrt(fac_alfa_sin)
11398 rkprim=fac_alfa_sin*(long-short)+short
11400 cosphi=1.0d0/dsqrt(1.0+rkprim**2/dist_pep_side**2)
11401 cosphi_fac=cosphi**3*rkprim**2*(-0.5)/dist_pep_side**4
11404 cosphi_grad_long(j)=cosphi_fac*pep_side(j)
11405 &+cosphi**3*0.5/dist_pep_side**2*(-rkprim)
11406 &*(long-short)/fac_alfa_sin*cosalfa/
11407 &((dist_pep_side*dist_side_calf))*
11408 &((side_calf(j))-cosalfa*
11409 &((pep_side(j)/dist_pep_side)*dist_side_calf))
11411 cosphi_grad_loc(j)=cosphi**3*0.5/dist_pep_side**2*(-rkprim)
11412 &*(long-short)/fac_alfa_sin*cosalfa
11413 &/((dist_pep_side*dist_side_calf))*
11415 &cosalfa*side_calf(j)/dist_side_calf*dist_pep_side)
11418 VofOverlap=VSolvSphere/2.0d0*(1.0-costhet)*(1.0-cosphi)
11421 C now the gradient...
11422 C grad_shield is gradient of Calfa for peptide groups
11423 C write(iout,*) "shield_compon",i,k,VSolvSphere,scale_fac_dist,
11425 C write(iout,*) "cosphi_compon",i,k,pep_side0pept_group,
11426 C & dist_pep_side,dist_side_calf,c(1,k+nres),c(1,k),itype(k)
11428 grad_shield(j,i)=grad_shield(j,i)
11429 C gradient po skalowaniu
11430 & +(sh_frac_dist_grad(j)
11431 C gradient po costhet
11432 &-scale_fac_dist*costhet_grad(j)/(1.0-costhet)
11433 &-scale_fac_dist*(cosphi_grad_long(j))
11434 &/(1.0-cosphi) )*div77_81
11436 C grad_shield_side is Cbeta sidechain gradient
11437 grad_shield_side(j,ishield_list(i),i)=
11438 & (sh_frac_dist_grad(j)*-2.0d0
11439 & +scale_fac_dist*costhet_grad(j)*2.0d0/(1.0-costhet)
11440 & +scale_fac_dist*(cosphi_grad_long(j))
11441 & *2.0d0/(1.0-cosphi))
11442 & *div77_81*VofOverlap
11444 grad_shield_loc(j,ishield_list(i),i)=
11445 & scale_fac_dist*cosphi_grad_loc(j)
11446 & *2.0d0/(1.0-cosphi)
11447 & *div77_81*VofOverlap
11449 VolumeTotal=VolumeTotal+VofOverlap*scale_fac_dist
11451 fac_shield(i)=VolumeTotal*div77_81+div4_81
11452 C write(2,*) "TOTAL VOLUME",i,VolumeTotal,fac_shield(i)
11456 C--------------------------------------------------------------------------
11457 double precision function tschebyshev(m,n,x,y)
11459 include "DIMENSIONS"
11461 double precision x(n),y,yy(0:maxvar),aux
11462 c Tschebyshev polynomial. Note that the first term is omitted
11463 c m=0: the constant term is included
11464 c m=1: the constant term is not included
11468 yy(i)=2*yy(1)*yy(i-1)-yy(i-2)
11477 C--------------------------------------------------------------------------
11478 double precision function gradtschebyshev(m,n,x,y)
11480 include "DIMENSIONS"
11482 double precision x(n+1),y,yy(0:maxvar),aux
11483 c Tschebyshev polynomial. Note that the first term is omitted
11484 c m=0: the constant term is included
11485 c m=1: the constant term is not included
11489 yy(i)=2*y*yy(i-1)-yy(i-2)
11493 aux=aux+x(i+1)*yy(i)*(i+1)
11494 C print *, x(i+1),yy(i),i
11496 gradtschebyshev=aux
11499 C------------------------------------------------------------------------
11500 C first for shielding is setting of function of side-chains
11501 subroutine set_shield_fac2
11502 implicit real*8 (a-h,o-z)
11503 include 'DIMENSIONS'
11504 include 'COMMON.CHAIN'
11505 include 'COMMON.DERIV'
11506 include 'COMMON.IOUNITS'
11507 include 'COMMON.SHIELD'
11508 include 'COMMON.INTERACT'
11509 C this is the squar root 77 devided by 81 the epislion in lipid (in protein)
11510 double precision div77_81/0.974996043d0/,
11511 &div4_81/0.2222222222d0/,sh_frac_dist_grad(3)
11513 C the vector between center of side_chain and peptide group
11514 double precision pep_side(3),long,side_calf(3),
11515 &pept_group(3),costhet_grad(3),cosphi_grad_long(3),
11516 &cosphi_grad_loc(3),pep_side_norm(3),side_calf_norm(3)
11517 C the line belowe needs to be changed for FGPROC>1
11519 if ((itype(i).eq.ntyp1).and.itype(i+1).eq.ntyp1) cycle
11521 Cif there two consequtive dummy atoms there is no peptide group between them
11522 C the line below has to be changed for FGPROC>1
11525 if ((itype(k).eq.ntyp1).or.(itype(k).eq.10)) cycle
11529 C first lets set vector conecting the ithe side-chain with kth side-chain
11530 pep_side(j)=c(j,k+nres)-(c(j,i)+c(j,i+1))/2.0d0
11531 C pep_side(j)=2.0d0
11532 C and vector conecting the side-chain with its proper calfa
11533 side_calf(j)=c(j,k+nres)-c(j,k)
11534 C side_calf(j)=2.0d0
11535 pept_group(j)=c(j,i)-c(j,i+1)
11536 C lets have their lenght
11537 dist_pep_side=pep_side(j)**2+dist_pep_side
11538 dist_side_calf=dist_side_calf+side_calf(j)**2
11539 dist_pept_group=dist_pept_group+pept_group(j)**2
11541 dist_pep_side=dsqrt(dist_pep_side)
11542 dist_pept_group=dsqrt(dist_pept_group)
11543 dist_side_calf=dsqrt(dist_side_calf)
11545 pep_side_norm(j)=pep_side(j)/dist_pep_side
11546 side_calf_norm(j)=dist_side_calf
11548 C now sscale fraction
11549 sh_frac_dist=-(dist_pep_side-rpp(1,1)-buff_shield)/buff_shield
11550 C print *,buff_shield,"buff"
11552 if (sh_frac_dist.le.0.0) cycle
11553 C If we reach here it means that this side chain reaches the shielding sphere
11554 C Lets add him to the list for gradient
11555 ishield_list(i)=ishield_list(i)+1
11556 C ishield_list is a list of non 0 side-chain that contribute to factor gradient
11557 C this list is essential otherwise problem would be O3
11558 shield_list(ishield_list(i),i)=k
11559 C Lets have the sscale value
11560 if (sh_frac_dist.gt.1.0) then
11561 scale_fac_dist=1.0d0
11563 sh_frac_dist_grad(j)=0.0d0
11566 scale_fac_dist=-sh_frac_dist*sh_frac_dist
11567 & *(2.0d0*sh_frac_dist-3.0d0)
11568 fac_help_scale=6.0d0*(sh_frac_dist-sh_frac_dist**2)
11569 & /dist_pep_side/buff_shield*0.5d0
11570 C remember for the final gradient multiply sh_frac_dist_grad(j)
11571 C for side_chain by factor -2 !
11573 sh_frac_dist_grad(j)=fac_help_scale*pep_side(j)
11574 C sh_frac_dist_grad(j)=0.0d0
11575 C scale_fac_dist=1.0d0
11576 C print *,"jestem",scale_fac_dist,fac_help_scale,
11577 C & sh_frac_dist_grad(j)
11580 C this is what is now we have the distance scaling now volume...
11581 short=short_r_sidechain(itype(k))
11582 long=long_r_sidechain(itype(k))
11583 costhet=1.0d0/dsqrt(1.0d0+short**2/dist_pep_side**2)
11584 sinthet=short/dist_pep_side*costhet
11588 costhet_fac=costhet**3*short**2*(-0.5d0)/dist_pep_side**4
11589 C sinthet_fac=costhet**2*0.5d0*(short**3/dist_pep_side**4*costhet
11590 C & -short/dist_pep_side**2/costhet)
11591 C costhet_fac=0.0d0
11593 costhet_grad(j)=costhet_fac*pep_side(j)
11595 C remember for the final gradient multiply costhet_grad(j)
11596 C for side_chain by factor -2 !
11597 C fac alfa is angle between CB_k,CA_k, CA_i,CA_i+1
11598 C pep_side0pept_group is vector multiplication
11599 pep_side0pept_group=0.0d0
11601 pep_side0pept_group=pep_side0pept_group+pep_side(j)*side_calf(j)
11603 cosalfa=(pep_side0pept_group/
11604 & (dist_pep_side*dist_side_calf))
11605 fac_alfa_sin=1.0d0-cosalfa**2
11606 fac_alfa_sin=dsqrt(fac_alfa_sin)
11607 rkprim=fac_alfa_sin*(long-short)+short
11611 cosphi=1.0d0/dsqrt(1.0d0+rkprim**2/dist_pep_side**2)
11613 cosphi_fac=cosphi**3*rkprim**2*(-0.5d0)/dist_pep_side**4
11614 sinphi=rkprim/dist_pep_side/dsqrt(1.0d0+rkprim**2/
11615 & dist_pep_side**2)
11618 cosphi_grad_long(j)=cosphi_fac*pep_side(j)
11619 &+cosphi**3*0.5d0/dist_pep_side**2*(-rkprim)
11620 &*(long-short)/fac_alfa_sin*cosalfa/
11621 &((dist_pep_side*dist_side_calf))*
11622 &((side_calf(j))-cosalfa*
11623 &((pep_side(j)/dist_pep_side)*dist_side_calf))
11624 C cosphi_grad_long(j)=0.0d0
11625 cosphi_grad_loc(j)=cosphi**3*0.5d0/dist_pep_side**2*(-rkprim)
11626 &*(long-short)/fac_alfa_sin*cosalfa
11627 &/((dist_pep_side*dist_side_calf))*
11629 &cosalfa*side_calf(j)/dist_side_calf*dist_pep_side)
11630 C cosphi_grad_loc(j)=0.0d0
11632 C print *,sinphi,sinthet
11633 VofOverlap=VSolvSphere/2.0d0*(1.0d0-dsqrt(1.0d0-sinphi*sinthet))
11636 C now the gradient...
11638 grad_shield(j,i)=grad_shield(j,i)
11639 C gradient po skalowaniu
11640 & +(sh_frac_dist_grad(j)*VofOverlap
11641 C gradient po costhet
11642 & +scale_fac_dist*VSolvSphere/VSolvSphere_div/4.0d0*
11643 &(1.0d0/(-dsqrt(1.0d0-sinphi*sinthet))*(
11644 & sinphi/sinthet*costhet*costhet_grad(j)
11645 & +sinthet/sinphi*cosphi*cosphi_grad_long(j)))
11647 C grad_shield_side is Cbeta sidechain gradient
11648 grad_shield_side(j,ishield_list(i),i)=
11649 & (sh_frac_dist_grad(j)*-2.0d0
11651 & -scale_fac_dist*VSolvSphere/VSolvSphere_div/2.0d0*
11652 &(1.0d0/(-dsqrt(1.0d0-sinphi*sinthet))*(
11653 & sinphi/sinthet*costhet*costhet_grad(j)
11654 & +sinthet/sinphi*cosphi*cosphi_grad_long(j)))
11657 grad_shield_loc(j,ishield_list(i),i)=
11658 & scale_fac_dist*VSolvSphere/VSolvSphere_div/2.0d0*
11659 &(1.0d0/(dsqrt(1.0d0-sinphi*sinthet))*(
11660 & sinthet/sinphi*cosphi*cosphi_grad_loc(j)
11664 VolumeTotal=VolumeTotal+VofOverlap*scale_fac_dist
11666 fac_shield(i)=VolumeTotal*wshield+(1.0d0-wshield)
11667 C write(2,*) "TOTAL VOLUME",i,VolumeTotal,fac_shield(i)