2 !-----------------------------------------------------------------------------
13 !-----------------------------------------------------------------------------
14 ! Max. number of contacts per residue
16 !-----------------------------------------------------------------------------
17 ! Max. number of derivatives of virtual-bond and side-chain vectors in theta
20 !-----------------------------------------------------------------------------
21 ! Max. number of SC contacts
23 !-----------------------------------------------------------------------------
24 ! Max. number of variables
26 !-----------------------------------------------------------------------------
27 ! Max number of torsional terms in SCCOR in control_data
28 ! integer,parameter :: maxterm_sccor=6
29 !-----------------------------------------------------------------------------
30 ! Maximum number of SC local term fitting function coefficiants
31 integer,parameter :: maxsccoef=65
32 ! Maximum number of local shielding effectors
33 ! integer,parameter :: maxcontsshi=50
34 !-----------------------------------------------------------------------------
35 ! commom.calc common/calc/
36 !-----------------------------------------------------------------------------
39 ! Change 12/1/95 - common block CONTACTS1 included.
42 integer,dimension(:),allocatable :: num_cont !(maxres)
43 integer,dimension(:,:),allocatable :: jcont !(maxconts,maxres)
44 real(kind=8),dimension(:,:),allocatable :: facont,ees0plist !(maxconts,maxres)
45 real(kind=8),dimension(:,:,:),allocatable :: gacont !(3,maxconts,maxres)
46 integer,dimension(:),allocatable :: ishield_list
47 integer,dimension(:,:),allocatable :: shield_list
48 real(kind=8),dimension(:),allocatable :: enetube,enecavtube
50 ! 12/26/95 - H-bonding contacts
51 ! common /contacts_hb/
52 real(kind=8),dimension(:,:,:),allocatable :: gacontp_hb1,gacontp_hb2,&
53 gacontp_hb3,gacontm_hb1,gacontm_hb2,gacontm_hb3,gacont_hbr,grij_hb_cont !(3,maxconts,maxres)
54 real(kind=8),dimension(:,:),allocatable :: facont_hb,ees0p,&
55 ees0m,d_cont !(maxconts,maxres)
56 integer,dimension(:),allocatable :: num_cont_hb !(maxres)
57 integer,dimension(:,:),allocatable :: jcont_hb !(maxconts,maxres)
58 ! 9/23/99 Added improper rotation matrices and matrices of dipole-dipole
60 ! 7/25/08 commented out; not needed when cumulants used
61 ! Interactions of pseudo-dipoles generated by loc-el interactions.
63 real(kind=8),dimension(:,:,:),allocatable :: dip,&
64 dipderg !(4,maxconts,maxres)
65 real(kind=8),dimension(:,:,:,:,:),allocatable :: dipderx !(3,5,4,maxconts,maxres)
66 ! 10/30/99 Added other pre-computed vectors and matrices needed
67 ! to calculate three - six-order el-loc correlation terms
69 real(kind=8),dimension(:,:,:),allocatable :: Ug,Ugder,Ug2,Ug2der !(2,2,maxres)
70 real(kind=8),dimension(:,:),allocatable :: obrot,obrot2,obrot_der,&
71 obrot2_der !(2,maxres)
73 ! This common block contains vectors and matrices dependent on a single
76 real(kind=8),dimension(:,:),allocatable :: mu,muder,Ub2,Ub2der,&
77 Ctobr,Ctobrder,Dtobr2,Dtobr2der,gUb2 !(2,maxres)
78 real(kind=8),dimension(:,:,:),allocatable :: EUg,EUgder,CUg,&
79 CUgder,DUg,Dugder,DtUg2,DtUg2der !(2,2,maxres)
80 ! This common block contains vectors and matrices dependent on two
81 ! consecutive amino-acid residues.
83 real(kind=8),dimension(:,:),allocatable :: Ug2Db1t,Ug2Db1tder,&
84 CUgb2,CUgb2der !(2,maxres)
85 real(kind=8),dimension(:,:,:),allocatable :: EUgC,EUgCder,&
86 EUgD,EUgDder,DtUg2EUg,Ug2DtEUg !(2,2,maxres)
87 real(kind=8),dimension(:,:,:,:),allocatable :: Ug2DtEUgder,&
88 DtUg2EUgder !(2,2,2,maxres)
90 real(kind=8),dimension(4) :: gmuij,gmuij1,gmuij2,gmuji1,gmuji2
91 real(kind=8),dimension(:),allocatable :: costab,sintab,&
92 costab2,sintab2 !(maxres)
93 ! This common block contains dipole-interaction matrices and their
94 ! Cartesian derivatives.
96 real(kind=8),dimension(:,:,:,:),allocatable :: a_chuj !(2,2,maxconts,maxres)
97 real(kind=8),dimension(:,:,:,:,:,:),allocatable :: a_chuj_der !(2,2,3,5,maxconts,maxres)
99 real(kind=8),dimension(2,2,2) :: AEA,AEAderg,EAEA,AECA,&
100 AECAderg,ADtEA,ADtEA1,AEAb1,AEAb1derg,AEAb2
101 real(kind=8),dimension(2,2,2,2) :: EAEAderg,ADtEAderg,&
103 real(kind=8),dimension(2,2,3,5,2,2) :: AEAderx,EAEAderx,&
104 AECAderx,ADtEAderx,ADtEA1derx
105 real(kind=8),dimension(2,3,5,2,2,2) :: AEAb1derx,AEAb2derx
106 real(kind=8),dimension(3,2) :: g_contij
107 real(kind=8) :: ekont
108 ! 12/13/2008 (again Poland-Jaruzel war anniversary)
109 ! RE: Parallelization of 4th and higher order loc-el correlations
110 ! common /contdistrib/
111 integer,dimension(:),allocatable :: ncont_sent,ncont_recv !(maxres)
112 ! ncont_sent,ncont_recv są w multibody_ello i multibody_hb
113 !-----------------------------------------------------------------------------
116 ! real(kind=8),dimension(:,:),allocatable :: dcdv,dxdv !(6,maxdim)
117 ! real(kind=8),dimension(:,:),allocatable :: dxds !(6,maxres)
118 ! real(kind=8),dimension(:,:,:),allocatable :: gradx,gradc !(3,maxres,2)
119 real(kind=8),dimension(:,:),allocatable :: gvdwc,gelc,gelc_long,&
120 gvdwpp,gvdwc_scpp,gradx_scp,gvdwc_scp,ghpbx,ghpbc,&
121 gradcorr,gradcorr_long,gradcorr5_long,gradcorr6_long,&
122 gcorr6_turn_long,gradxorr,gradcorr5,gradcorr6,gliptran,gliptranc,&
124 gshieldx,gshieldc,gshieldc_loc,gshieldx_ec,&
125 gshieldc_ec,gshieldc_loc_ec,gshieldx_t3, &
126 gshieldc_t3,gshieldc_loc_t3,gshieldx_t4,gshieldc_t4, &
127 gshieldc_loc_t4,gshieldx_ll,gshieldc_ll,gshieldc_loc_ll,&
128 grad_shield,gg_tube,gg_tube_sc,gradafm !(3,maxres)
129 !-----------------------------NUCLEIC GRADIENT
130 real(kind=8),dimension(:,:),allocatable ::gradb_nucl,gradbx_nucl, &
131 gvdwpsb1,gelpp,gvdwpsb,gelsbc,gelsbx,gvdwsbx,gvdwsbc,gsbloc,&
132 gsblocx,gradcorr_nucl,gradxorr_nucl,gradcorr3_nucl,gradxorr3_nucl,&
134 !-----------------------------NUCLEIC-PROTEIN GRADIENT
135 real(kind=8),dimension(:,:),allocatable :: gvdwx_scbase,gvdwc_scbase,&
136 gvdwx_pepbase,gvdwc_pepbase,gvdwx_scpho,gvdwc_scpho,&
138 !------------------------------IONS GRADIENT
139 real(kind=8),dimension(:,:),allocatable :: gradcatcat, &
140 gradpepcat,gradpepcatx,gradnuclcat,gradnuclcatx
141 ! real(kind=8),dimension(:,:),allocatable :: gloc,gloc_x !(maxvar,2)
144 real(kind=8),dimension(:,:),allocatable :: gel_loc,gel_loc_long,&
145 gcorr3_turn,gcorr4_turn,gcorr6_turn,gradb,gradbx !(3,maxres)
146 real(kind=8),dimension(:),allocatable :: gel_loc_loc,&
147 gel_loc_turn3,gel_loc_turn4,gel_loc_turn6,gcorr_loc,g_corr5_loc,&
148 g_corr6_loc !(maxvar)
149 real(kind=8),dimension(:,:),allocatable :: gsccorc,gsccorx !(3,maxres)
150 real(kind=8),dimension(:),allocatable :: gsccor_loc !(maxres)
151 ! real(kind=8),dimension(:,:,:),allocatable :: dtheta !(3,2,maxres)
152 real(kind=8),dimension(:,:),allocatable :: gscloc,gsclocx !(3,maxres)
153 ! real(kind=8),dimension(:,:,:),allocatable :: dphi,dalpha,domega !(3,3,maxres)
154 real(kind=8),dimension(:,:,:),allocatable :: grad_shield_side, &
155 grad_shield_loc ! (3,maxcontsshileding,maxnres)
158 real(kind=8), dimension(:),allocatable :: fac_shield
159 real(kind=8),dimension(3,5,2) :: derx,derx_turn
160 ! common /deriv_scloc/
161 real(kind=8),dimension(:,:),allocatable :: dXX_C1tab,dYY_C1tab,&
162 dZZ_C1tab,dXX_Ctab,dYY_Ctab,dZZ_Ctab,dXX_XYZtab,dYY_XYZtab,&
163 dZZ_XYZtab !(3,maxres)
164 !-----------------------------------------------------------------------------
167 real(kind=8) :: gvdwc_max,gvdwc_scp_max,gelc_max,gvdwpp_max,&
168 gradb_max,ghpbc_max,&
169 gradcorr_max,gel_loc_max,gcorr3_turn_max,gcorr4_turn_max,&
170 gradcorr5_max,gradcorr6_max,gcorr6_turn_max,gsccorc_max,&
171 gscloc_max,gvdwx_max,gradx_scp_max,ghpbx_max,gradxorr_max,&
172 gsccorx_max,gsclocx_max
173 !-----------------------------------------------------------------------------
175 ! common /back_constr/
176 real(kind=8),dimension(:),allocatable :: dutheta,dugamma !(maxres)
177 real(kind=8),dimension(:,:),allocatable :: duscdiff,duscdiffx !(3,maxres)
179 real(kind=8) :: Ucdfrag,Ucdpair
180 real(kind=8),dimension(:,:),allocatable :: dUdconst,dUdxconst,&
181 dqwol,dxqwol !(3,0:MAXRES)
182 !-----------------------------------------------------------------------------
184 ! common /dyn_ssbond/
185 real(kind=8),dimension(:,:),allocatable :: dyn_ssbond_ij !(maxres,maxres)
186 !-----------------------------------------------------------------------------
188 ! Parameters of the SCCOR term
190 real(kind=8),dimension(:,:,:,:),allocatable :: dcostau,dsintau,&
191 dcosomicron,domicron !(3,3,3,maxres2)
192 !-----------------------------------------------------------------------------
195 real(kind=8),dimension(:,:),allocatable :: uy,uz !(3,maxres)
196 real(kind=8),dimension(:,:,:,:),allocatable :: uygrad,uzgrad !(3,3,2,maxres)
197 !-----------------------------------------------------------------------------
198 ! common /przechowalnia/
199 real(kind=8),dimension(:,:,:),allocatable :: zapas
200 real(kind=8),dimension(:,:,:,:),allocatable ::zapas2 !(max_dim,maxconts,max_fg_procs)
201 real(kind=8),dimension(:,:,:),allocatable :: fromto !(3,3,maxdim)(maxdim=(maxres-1)*(maxres-2)/2)
202 !-----------------------------------------------------------------------------
203 !-----------------------------------------------------------------------------
206 !-----------------------------------------------------------------------------
208 !-----------------------------------------------------------------------------
209 ! energy_p_new_barrier.F
210 !-----------------------------------------------------------------------------
211 subroutine etotal(energia)
212 ! implicit real*8 (a-h,o-z)
213 ! include 'DIMENSIONS'
218 !MS$ATTRIBUTES C :: proc_proc
224 ! include 'COMMON.SETUP'
225 ! include 'COMMON.IOUNITS'
226 real(kind=8),dimension(0:n_ene) :: energia
227 ! include 'COMMON.LOCAL'
228 ! include 'COMMON.FFIELD'
229 ! include 'COMMON.DERIV'
230 ! include 'COMMON.INTERACT'
231 ! include 'COMMON.SBRIDGE'
232 ! include 'COMMON.CHAIN'
233 ! include 'COMMON.VAR'
234 ! include 'COMMON.MD'
235 ! include 'COMMON.CONTROL'
236 ! include 'COMMON.TIME1'
237 real(kind=8) :: time00
239 integer :: n_corr,n_corr1,ierror,imatupdate
240 real(kind=8) :: etors,edihcnstr,etors_d,esccor,ehpb
241 real(kind=8) :: evdw,evdw1,evdw2,evdw2_14,escloc,ees,eel_loc
242 real(kind=8) :: eello_turn3,eello_turn4,estr,ebe,eliptran,etube, &
243 Eafmforce,ethetacnstr
244 real(kind=8) :: ecorr,ecorr5,ecorr6,eturn6
245 ! now energies for nulceic alone parameters
246 real(kind=8) :: evdwpp,eespp,evdwpsb,eelpsb,evdwsb,eelsb,estr_nucl,&
247 ebe_nucl,esbloc,etors_nucl,etors_d_nucl,ecorr_nucl,&
250 real(kind=8) :: ecation_prot,ecationcation,ecations_prot_amber,&
252 ! energies for protein nucleic acid interaction
253 real(kind=8) :: escbase,epepbase,escpho,epeppho
256 real(kind=8) :: weights_(n_ene) !,time_Bcast,time_Bcastw
257 ! shielding effect varibles for MPI
258 real(kind=8) :: fac_shieldbuf(nres), &
259 grad_shield_locbuf1(3*maxcontsshi*nres), &
260 grad_shield_sidebuf1(3*maxcontsshi*nres), &
261 grad_shield_locbuf2(3*maxcontsshi*nres), &
262 grad_shield_sidebuf2(3*maxcontsshi*nres), &
263 grad_shieldbuf1(3*nres), &
264 grad_shieldbuf2(3*nres)
266 integer ishield_listbuf(-1:nres), &
267 shield_listbuf(maxcontsshi,-1:nres),k,j,i,iii,impishi,mojint,jjj
268 ! print *,"I START ENERGY"
270 ! if (mod(itime_mat,imatupdate).eq.0) call make_SCSC_inter_list
271 ! real(kind=8), dimension(:),allocatable:: fac_shieldbuf
272 ! real(kind=8), dimension(:,:,:),allocatable:: &
273 ! grad_shield_locbuf,grad_shield_sidebuf
274 ! real(kind=8), dimension(:,:),allocatable:: &
276 ! integer, dimension(:),allocatable:: &
278 ! integer, dimension(:,:),allocatable:: shield_listbuf
280 ! if (.not.allocated(fac_shieldbuf)) then
281 ! allocate(fac_shieldbuf(nres))
282 ! allocate(grad_shield_locbuf(3,maxcontsshi,-1:nres))
283 ! allocate(grad_shield_sidebuf(3,maxcontsshi,-1:nres))
284 ! allocate(grad_shieldbuf(3,-1:nres))
285 ! allocate(ishield_listbuf(nres))
286 ! allocate(shield_listbuf(maxcontsshi,nres))
289 ! print*,"ETOTAL Processor",fg_rank," absolute rank",myrank,
290 ! & " nfgtasks",nfgtasks
291 if (nfgtasks.gt.1) then
293 ! FG slaves call the following matching MPI_Bcast in ERGASTULUM
294 if (fg_rank.eq.0) then
295 call MPI_Bcast(0,1,MPI_INTEGER,king,FG_COMM,IERROR)
296 ! print *,"Processor",myrank," BROADCAST iorder"
297 ! FG master sets up the WEIGHTS_ array which will be broadcast to the
298 ! FG slaves as WEIGHTS array.
318 weights_(26)=wvdwpp_nucl
324 weights_(32)=wbond_nucl
325 weights_(33)=wang_nucl
327 weights_(35)=wtor_nucl
328 weights_(36)=wtor_d_nucl
329 weights_(37)=wcorr_nucl
330 weights_(38)=wcorr3_nucl
332 weights_(42)=wcatprot
334 weights_(47)=wpepbase
337 weights_(50)=wcatnucl
338 ! wcatcat= weights(41)
339 ! wcatprot=weights(42)
341 ! FG Master broadcasts the WEIGHTS_ array
342 call MPI_Bcast(weights_(1),n_ene,&
343 MPI_DOUBLE_PRECISION,king,FG_COMM,IERROR)
345 ! FG slaves receive the WEIGHTS array
346 call MPI_Bcast(weights(1),n_ene,&
347 MPI_DOUBLE_PRECISION,king,FG_COMM,IERROR)
367 wvdwpp_nucl =weights(26)
373 wbond_nucl =weights(32)
374 wang_nucl =weights(33)
376 wtor_nucl =weights(35)
377 wtor_d_nucl =weights(36)
378 wcorr_nucl =weights(37)
379 wcorr3_nucl =weights(38)
387 ! welpsb=weights(28)*fact(1)
389 ! wcorr_nucl= weights(37)*fact(1)
390 ! wcorr3_nucl=weights(38)*fact(2)
391 ! wtor_nucl= weights(35)*fact(1)
392 ! wtor_d_nucl=weights(36)*fact(2)
395 time_Bcast=time_Bcast+MPI_Wtime()-time00
396 time_Bcastw=time_Bcastw+MPI_Wtime()-time00
397 ! call chainbuild_cart
399 ! print *,"itime_mat",itime_mat,imatupdate
400 if (nfgtasks.gt.1) then
401 call MPI_Bcast(itime_mat,1,MPI_INT,king,FG_COMM,IERROR)
403 if (mod(itime_mat,imatupdate).eq.0) call make_SCp_inter_list
404 ! write (iout,*) "after make_SCp_inter_list"
405 if (mod(itime_mat,imatupdate).eq.0) call make_SCSC_inter_list
406 ! write (iout,*) "after make_SCSC_inter_list"
408 if (mod(itime_mat,imatupdate).eq.0) call make_pp_inter_list
409 ! write (iout,*) "after make_pp_inter_list"
411 ! print *,'Processor',myrank,' calling etotal ipot=',ipot
412 ! print *,'Processor',myrank,' nnt=',nnt,' nct=',nct
414 ! if (modecalc.eq.12.or.modecalc.eq.14) then
415 ! call int_from_cart1(.false.)
422 ! Compute the side-chain and electrostatic interaction energy
423 ! print *, "Before EVDW"
424 ! goto (101,102,103,104,105,106) ipot
426 ! Lennard-Jones potential.
430 !d print '(a)','Exit ELJcall el'
432 ! Lennard-Jones-Kihara potential (shifted).
433 ! 102 call eljk(evdw)
437 ! Berne-Pechukas potential (dilated LJ, angular dependence).
442 ! Gay-Berne potential (shifted LJ, angular dependence).
445 ! print *,"MOMO",scelemode
446 if (scelemode.eq.0) then
452 ! Gay-Berne-Vorobjev potential (shifted LJ, angular dependence).
453 ! 105 call egbv(evdw)
457 ! Soft-sphere potential
458 ! 106 call e_softsphere(evdw)
460 call e_softsphere(evdw)
462 ! Calculate electrostatic (H-bonding) energy of the main chain.
466 write(iout,*)"Wrong ipot"
471 ! print *,"after EGB"
473 if (shield_mode.eq.2) then
476 if (nfgtasks.gt.1) then
477 grad_shield_sidebuf1(:)=0.0d0
478 grad_shield_locbuf1(:)=0.0d0
479 grad_shield_sidebuf2(:)=0.0d0
480 grad_shield_locbuf2(:)=0.0d0
481 grad_shieldbuf1(:)=0.0d0
482 grad_shieldbuf2(:)=0.0d0
485 write(iout,*) "befor reduce fac_shield reduce"
487 write(2,*) "fac",itype(i,1),fac_shield(i),grad_shield(1,i)
488 write(2,*) "list", shield_list(1,i),ishield_list(i), &
489 grad_shield_side(1,1,i),grad_shield_loc(1,1,i)
498 grad_shieldbuf1(iii)=grad_shield(k,i)
505 grad_shield_sidebuf1(jjj)=grad_shield_side(k,j,i)
506 grad_shield_locbuf1(jjj)=grad_shield_loc(k,j,i)
510 call MPI_Allgatherv(fac_shield(ivec_start), &
511 ivec_count(fg_rank1), &
512 MPI_DOUBLE_PRECISION,fac_shieldbuf(1),ivec_count(0), &
514 MPI_DOUBLE_PRECISION,FG_COMM,IERROR)
515 call MPI_Allgatherv(shield_list(1,ivec_start), &
516 ivec_count(fg_rank1), &
517 MPI_I50,shield_listbuf(1,1),ivec_count(0), &
519 MPI_I50,FG_COMM,IERROR)
520 ! write(2,*) "After I50"
522 call MPI_Allgatherv(ishield_list(ivec_start), &
523 ivec_count(fg_rank1), &
524 MPI_INTEGER,ishield_listbuf(1),ivec_count(0), &
526 MPI_INTEGER,FG_COMM,IERROR)
527 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
529 ! write(2,*) ivec_count(fg_rank1)*3,ivec_count(0)*3,ivec_displ(0)*3,3*ivec_start-2
530 ! write (2,*) "before"
531 ! write(2,*) grad_shieldbuf1
532 ! call MPI_Allgatherv(grad_shieldbuf1(3*ivec_start-2), &
533 ! ivec_count(fg_rank1)*3, &
534 ! MPI_DOUBLE_PRECISION,grad_shieldbuf2(1),ivec_count(0), &
536 ! MPI_DOUBLE_PRECISION,FG_COMM,IERROR)
537 call MPI_Allreduce(grad_shieldbuf1(1),grad_shieldbuf2(1), &
539 MPI_DOUBLE_PRECISION, &
542 call MPI_Allreduce(grad_shield_sidebuf1(1),grad_shield_sidebuf2(1), &
543 nres*3*maxcontsshi, &
544 MPI_DOUBLE_PRECISION, &
548 call MPI_Allreduce(grad_shield_locbuf1(1),grad_shield_locbuf2(1), &
549 nres*3*maxcontsshi, &
550 MPI_DOUBLE_PRECISION, &
555 ! write(2,*) grad_shieldbuf2
557 ! call MPI_Allgatherv(grad_shield_sidebuf1(3*maxcontsshi*ivec_start-2), &
558 ! ivec_count(fg_rank1)*3*maxcontsshi, &
559 ! MPI_DOUBLE_PRECISION,grad_shield_sidebuf2(1),ivec_count(0)*3*maxcontsshi,&
560 ! ivec_displ(0)*3*maxcontsshi, &
561 ! MPI_DOUBLE_PRECISION,FG_COMM,IERROR)
562 ! write(2,*) "After grad_shield_side"
564 ! call MPI_Allgatherv(grad_shield_locbuf1(3*maxcontsshi*ivec_start-2), &
565 ! ivec_count(fg_rank1)*3*maxcontsshi, &
566 ! MPI_DOUBLE_PRECISION,grad_shield_locbuf2(1),ivec_count(0)*3*maxcontsshi, &
567 ! ivec_displ(0)*3*maxcontsshi, &
568 ! MPI_DOUBLE_PRECISION,FG_COMM,IERROR)
569 ! write(2,*) "After MPI_SHI"
574 fac_shield(i)=fac_shieldbuf(i)
575 ishield_list(i)=ishield_listbuf(i)
576 ! write(iout,*) i,fac_shield(i)
579 grad_shield(j,i)=grad_shieldbuf2(iii)
581 do j=1,ishield_list(i)
582 ! write (iout,*) "ishild", ishield_list(i),i
583 shield_list(j,i)=shield_listbuf(j,i)
588 grad_shield_loc(k,j,i)=grad_shield_locbuf2(jjj)
589 grad_shield_side(k,j,i)=grad_shield_sidebuf2(jjj)
595 write(iout,*) "after reduce fac_shield reduce"
597 write(2,*) "fac",itype(i,1),fac_shield(i),grad_shield(1,i)
598 write(2,*) "list", shield_list(1,i),ishield_list(i), &
599 grad_shield_side(1,1,i),grad_shield_loc(1,1,i)
607 ! print *,"AFTER EGB",ipot,evdw
609 !mc Sep-06: egb takes care of dynamic ss bonds too
611 ! if (dyn_ss) call dyn_set_nss
612 ! print *,"Processor",myrank," computed USCSC"
618 time_vec=time_vec+MPI_Wtime()-time01
624 ! print *,"Processor",myrank," left VEC_AND_DERIV"
627 ! print *,"after ipot if", ipot
628 if (welec.gt.0d0.or.wvdwpp.gt.0d0.or.wel_loc.gt.0d0.or. &
629 wturn3.gt.0d0.or.wturn4.gt.0d0 .or. wcorr.gt.0.0d0 &
630 .or. wcorr4.gt.0.0d0 .or. wcorr5.gt.0.d0 &
631 .or. wcorr6.gt.0.0d0 .or. wturn6.gt.0.0d0 ) then
633 if (welec.gt.0d0.or.wel_loc.gt.0d0.or. &
634 wturn3.gt.0d0.or.wturn4.gt.0d0 .or. wcorr.gt.0.0d0 &
635 .or. wcorr4.gt.0.0d0 .or. wcorr5.gt.0.d0 &
636 .or. wcorr6.gt.0.0d0 .or. wturn6.gt.0.0d0 ) then
638 ! print *,"just befor eelec call"
639 call eelec(ees,evdw1,eel_loc,eello_turn3,eello_turn4)
640 ! print *, "ELEC calc"
649 ! write (iout,*) "Soft-spheer ELEC potential"
650 call eelec_soft_sphere(ees,evdw1,eel_loc,eello_turn3,&
653 ! print *,"Processor",myrank," computed UELEC"
655 ! Calculate excluded-volume interaction energy between peptide groups
658 ! write(iout,*) "in etotal calc exc;luded",ipot
662 call escp(evdw2,evdw2_14)
668 ! write (iout,*) "Soft-sphere SCP potential"
669 call escp_soft_sphere(evdw2,evdw2_14)
671 ! write(iout,*) "in etotal before ebond",ipot
674 ! Calculate the bond-stretching energy
677 ! print *,"EBOND",estr
678 ! write(iout,*) "in etotal afer ebond",ipot
681 ! Calculate the disulfide-bridge and other energy and the contributions
682 ! from other distance constraints.
683 ! print *,'Calling EHPB'
685 !elwrite(iout,*) "in etotal afer edis",ipot
686 ! print *,'EHPB exitted succesfully.'
688 ! Calculate the virtual-bond-angle energy.
689 ! write(iout,*) "in etotal afer edis",ipot
691 ! if (wang.gt.0.0d0) then
692 ! call ebend(ebe,ethetacnstr)
697 if (wang.gt.0d0) then
698 if (tor_mode.eq.0) then
701 !C ebend kcc is Kubo cumulant clustered rigorous attemp to derive the
709 if (with_theta_constr) call etheta_constr(ethetacnstr)
711 ! write(iout,*) "in etotal afer ebe",ipot
713 ! print *,"Processor",myrank," computed UB"
715 ! Calculate the SC local energy.
718 !elwrite(iout,*) "in etotal afer esc",ipot
719 ! print *,"Processor",myrank," computed USC"
721 ! Calculate the virtual-bond torsional energy.
723 !d print *,'nterm=',nterm
724 ! if (wtor.gt.0) then
725 ! call etor(etors,edihcnstr)
730 if (wtor.gt.0.0d0) then
731 if (tor_mode.eq.0) then
734 !C etor kcc is Kubo cumulant clustered rigorous attemp to derive the
742 if (ndih_constr.gt.0) call etor_constr(edihcnstr)
743 !c print *,"Processor",myrank," computed Utor"
745 ! print *,"Processor",myrank," computed Utor"
748 ! 6/23/01 Calculate double-torsional energy
750 !elwrite(iout,*) "in etotal",ipot
751 if (wtor_d.gt.0) then
756 ! print *,"Processor",myrank," computed Utord"
758 ! 21/5/07 Calculate local sicdechain correlation energy
760 if (wsccor.gt.0.0d0) then
761 call eback_sc_corr(esccor)
766 ! write(iout,*) "before multibody"
768 ! print *,"Processor",myrank," computed Usccorr"
770 ! 12/1/95 Multi-body terms
775 if ((wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0 &
776 .or. wturn6.gt.0.0d0) .and. ipot.lt.6) then
777 call multibody_eello(ecorr,ecorr5,ecorr6,eturn6,n_corr,n_corr1)
778 !d write(2,*)'multibody_eello n_corr=',n_corr,' n_corr1=',n_corr1,
779 !d &" ecorr",ecorr," ecorr5",ecorr5," ecorr6",ecorr6," eturn6",eturn6
786 !elwrite(iout,*) "in etotal",ipot
787 if ((wcorr4.eq.0.0d0 .and. wcorr.gt.0.0d0) .and. ipot.lt.6) then
788 call multibody_hb(ecorr,ecorr5,ecorr6,n_corr,n_corr1)
789 !d write (iout,*) "multibody_hb ecorr",ecorr
791 ! write(iout,*) "afeter multibody hb"
793 ! print *,"Processor",myrank," computed Ucorr"
795 ! If performing constraint dynamics, call the constraint energy
796 ! after the equilibration time
797 if(usampl.and.totT.gt.eq_time) then
798 !elwrite(iout,*) "afeter multibody hb"
800 !elwrite(iout,*) "afeter multibody hb"
802 !elwrite(iout,*) "afeter multibody hb"
808 ! write(iout,*) "after Econstr"
810 if (wliptran.gt.0) then
811 ! print *,"PRZED WYWOLANIEM"
812 call Eliptransfer(eliptran)
816 if (fg_rank.eq.0) then
817 if (AFMlog.gt.0) then
818 call AFMforce(Eafmforce)
819 else if (selfguide.gt.0) then
820 call AFMvel(Eafmforce)
825 if (tubemode.eq.1) then
827 else if (tubemode.eq.2) then
828 call calctube2(etube)
829 elseif (tubemode.eq.3) then
834 !--------------------------------------------------------
835 ! write (iout,*) "NRES_MOLEC(2),",nres_molec(2)
836 ! print *,"before",ees,evdw1,ecorr
837 ! write(iout,*) ecorr_nucl,"ecorr_nucl",nres_molec(2)
838 if (nres_molec(2).gt.0) then
839 call ebond_nucl(estr_nucl)
840 call ebend_nucl(ebe_nucl)
841 call etor_nucl(etors_nucl)
842 call esb_gb(evdwsb,eelsb)
843 call epp_nucl_sub(evdwpp,eespp)
844 call epsb(evdwpsb,eelpsb)
846 call multibody_hb_nucl(ecorr_nucl,ecorr3_nucl,n_corr,n_corr1)
847 call ecat_nucl(ecation_nucl)
864 ! write(iout,*) ecorr_nucl,"ecorr_nucl",nres_molec(2)
865 ! print *,"before ecatcat",wcatcat
866 if (nres_molec(5).gt.0) then
867 if (nfgtasks.gt.1) then
868 if (fg_rank.eq.0) then
869 call ecatcat(ecationcation)
872 call ecatcat(ecationcation)
874 if (oldion.gt.0) then
875 call ecat_prot(ecation_prot)
877 call ecats_prot_amber(ecation_prot)
883 if ((nres_molec(2).gt.0).and.(nres_molec(1).gt.0)) then
884 call eprot_sc_base(escbase)
885 call epep_sc_base(epepbase)
886 call eprot_sc_phosphate(escpho)
887 call eprot_pep_phosphate(epeppho)
894 ! call ecatcat(ecationcation)
895 ! print *,"after ebend", wtor_nucl
897 time_enecalc=time_enecalc+MPI_Wtime()-time00
899 ! print *,"Processor",myrank," computed Uconstr"
908 energia(2)=evdw2-evdw2_14
925 energia(8)=eello_turn3
926 energia(9)=eello_turn4
933 energia(19)=edihcnstr
935 energia(20)=Uconst+Uconst_back
938 energia(23)=Eafmforce
939 energia(24)=ethetacnstr
941 !---------------------------------------------------------------
948 energia(32)=estr_nucl
951 energia(35)=etors_nucl
952 energia(36)=etors_d_nucl
953 energia(37)=ecorr_nucl
954 energia(38)=ecorr3_nucl
955 !----------------------------------------------------------------------
956 ! Here are the energies showed per procesor if the are more processors
957 ! per molecule then we sum it up in sum_energy subroutine
958 ! print *," Processor",myrank," calls SUM_ENERGY"
959 energia(42)=ecation_prot
960 energia(41)=ecationcation
965 ! energia(50)=ecations_prot_amber
966 energia(50)=ecation_nucl
967 call sum_energy(energia,.true.)
968 if (dyn_ss) call dyn_set_nss
969 ! print *," Processor",myrank," left SUM_ENERGY"
971 time_sumene=time_sumene+MPI_Wtime()-time00
973 ! call enerprint(energia)
974 !elwrite(iout,*)"finish etotal"
976 end subroutine etotal
977 !-----------------------------------------------------------------------------
978 subroutine sum_energy(energia,reduce)
979 ! implicit real*8 (a-h,o-z)
980 ! include 'DIMENSIONS'
984 !MS$ATTRIBUTES C :: proc_proc
990 ! include 'COMMON.SETUP'
991 ! include 'COMMON.IOUNITS'
992 real(kind=8) :: energia(0:n_ene),enebuff(0:n_ene+1)
993 ! include 'COMMON.FFIELD'
994 ! include 'COMMON.DERIV'
995 ! include 'COMMON.INTERACT'
996 ! include 'COMMON.SBRIDGE'
997 ! include 'COMMON.CHAIN'
998 ! include 'COMMON.VAR'
999 ! include 'COMMON.CONTROL'
1000 ! include 'COMMON.TIME1'
1002 real(kind=8) :: evdw,evdw2,evdw2_14,ees,evdw1,ecorr,ecorr5,ecorr6
1003 real(kind=8) :: eel_loc,eello_turn3,eello_turn4,eturn6,ebe,escloc
1004 real(kind=8) :: etors,etors_d,ehpb,edihcnstr,estr,esccor,etot, &
1005 eliptran,etube, Eafmforce,ethetacnstr
1006 real(kind=8) :: evdwpp,eespp,evdwpsb,eelpsb,evdwsb,eelsb,estr_nucl,&
1007 ebe_nucl,esbloc,etors_nucl,etors_d_nucl,ecorr_nucl,&
1009 real(kind=8) :: ecation_prot,ecationcation,ecations_prot_amber,&
1011 real(kind=8) :: escbase,epepbase,escpho,epeppho
1015 real(kind=8) :: time00
1016 if (nfgtasks.gt.1 .and. reduce) then
1019 write (iout,*) "energies before REDUCE"
1020 call enerprint(energia)
1024 enebuff(i)=energia(i)
1027 call MPI_Barrier(FG_COMM,IERR)
1028 time_barrier_e=time_barrier_e+MPI_Wtime()-time00
1030 call MPI_Reduce(enebuff(0),energia(0),n_ene+1,&
1031 MPI_DOUBLE_PRECISION,MPI_SUM,king,FG_COMM,IERR)
1033 write (iout,*) "energies after REDUCE"
1034 call enerprint(energia)
1037 time_Reduce=time_Reduce+MPI_Wtime()-time00
1039 if (fg_rank.eq.0) then
1043 evdw2=energia(2)+energia(18)
1044 evdw2_14=energia(18)
1059 eello_turn3=energia(8)
1060 eello_turn4=energia(9)
1067 edihcnstr=energia(19)
1071 eliptran=energia(22)
1072 Eafmforce=energia(23)
1073 ethetacnstr=energia(24)
1081 estr_nucl=energia(32)
1082 ebe_nucl=energia(33)
1084 etors_nucl=energia(35)
1085 etors_d_nucl=energia(36)
1086 ecorr_nucl=energia(37)
1087 ecorr3_nucl=energia(38)
1088 ecation_prot=energia(42)
1089 ecationcation=energia(41)
1091 epepbase=energia(47)
1094 ecation_nucl=energia(50)
1095 ! ecations_prot_amber=energia(50)
1097 ! energia(41)=ecation_prot
1098 ! energia(42)=ecationcation
1102 etot=wsc*evdw+wscp*evdw2+welec*ees+wvdwpp*evdw1 &
1103 +wang*ebe+wtor*etors+wscloc*escloc &
1104 +wstrain*ehpb+wcorr*ecorr+wcorr5*ecorr5 &
1105 +wcorr6*ecorr6+wturn4*eello_turn4+wturn3*eello_turn3 &
1106 +wturn6*eturn6+wel_loc*eel_loc+edihcnstr+wtor_d*etors_d &
1107 +wbond*estr+Uconst+wsccor*esccor+wliptran*eliptran+wtube*etube&
1108 +Eafmforce+ethetacnstr &
1109 +wbond_nucl*estr_nucl+wang_nucl*ebe_nucl&
1110 +wvdwpp_nucl*evdwpp+welpp*eespp+wvdwpsb*evdwpsb+welpsb*eelpsb&
1111 +wvdwsb*evdwsb+welsb*eelsb+wsbloc*esbloc+wtor_nucl*etors_nucl&
1112 +wtor_d_nucl*etors_d_nucl+wcorr_nucl*ecorr_nucl+wcorr3_nucl*ecorr3_nucl&
1113 +wcatprot*ecation_prot+wcatcat*ecationcation+wscbase*escbase&
1114 +wpepbase*epepbase+wscpho*escpho+wpeppho*epeppho+wcatnucl*ecation_nucl
1116 etot=wsc*evdw+wscp*evdw2+welec*(ees+evdw1) &
1117 +wang*ebe+wtor*etors+wscloc*escloc &
1118 +wstrain*ehpb+wcorr*ecorr+wcorr5*ecorr5 &
1119 +wcorr6*ecorr6+wturn4*eello_turn4+wturn3*eello_turn3 &
1120 +wturn6*eturn6+wel_loc*eel_loc+edihcnstr+wtor_d*etors_d &
1121 +wbond*estr+Uconst+wsccor*esccor+wliptran*eliptran+wtube*etube&
1122 +Eafmforce+ethetacnstr &
1123 +wbond_nucl*estr_nucl+wang_nucl*ebe_nucl&
1124 +wvdwpp_nucl*evdwpp+welpp*eespp+wvdwpsb*evdwpsb+welpsb*eelpsb&
1125 +wvdwsb*evdwsb+welsb*eelsb+wsbloc*esbloc+wtor_nucl*etors_nucl&
1126 +wtor_d_nucl*etors_d_nucl+wcorr_nucl*ecorr_nucl+wcorr3_nucl*ecorr3_nucl&
1127 +wcatprot*ecation_prot+wcatcat*ecationcation+wscbase*escbase&
1128 +wpepbase*epepbase+wscpho*escpho+wpeppho*epeppho+wcatnucl*ecation_nucl
1134 if (isnan(etot).ne.0) energia(0)=1.0d+99
1136 if (isnan(etot)) energia(0)=1.0d+99
1141 idumm=proc_proc(etot,i)
1143 call proc_proc(etot,i)
1145 if(i.eq.1)energia(0)=1.0d+99
1150 ! call enerprint(energia)
1153 end subroutine sum_energy
1154 !-----------------------------------------------------------------------------
1155 subroutine rescale_weights(t_bath)
1156 ! implicit real*8 (a-h,o-z)
1160 ! include 'DIMENSIONS'
1161 ! include 'COMMON.IOUNITS'
1162 ! include 'COMMON.FFIELD'
1163 ! include 'COMMON.SBRIDGE'
1164 real(kind=8) :: kfac=2.4d0
1165 real(kind=8) :: x,x2,x3,x4,x5,licznik=1.12692801104297249644
1167 real(kind=8) :: t_bath,facT(6) !,facT2,facT3,facT4,facT5,facT6
1168 real(kind=8) :: T0=3.0d2
1171 ! facT=2*temp0/(t_bath+temp0)
1172 if (rescale_mode.eq.0) then
1179 else if (rescale_mode.eq.1) then
1180 facT(1)=kfac/(kfac-1.0d0+t_bath/temp0)
1181 facT(2)=kfac**2/(kfac**2-1.0d0+(t_bath/temp0)**2)
1182 facT(3)=kfac**3/(kfac**3-1.0d0+(t_bath/temp0)**3)
1183 facT(4)=kfac**4/(kfac**4-1.0d0+(t_bath/temp0)**4)
1184 facT(5)=kfac**5/(kfac**5-1.0d0+(t_bath/temp0)**5)
1186 !#if defined(WHAM_RUN) || defined(CLUSTER)
1188 ! tt = 1.0d0/(beta_h(ib,ipar)*1.987D-3)
1189 facT(6)=(320.0+80.0*dtanh((t_bath-320.0)/80.0))/320.0
1190 #elif defined(FUNCT)
1196 else if (rescale_mode.eq.2) then
1202 facT(1)=licznik/dlog(dexp(x)+dexp(-x))
1203 facT(2)=licznik/dlog(dexp(x2)+dexp(-x2))
1204 facT(3)=licznik/dlog(dexp(x3)+dexp(-x3))
1205 facT(4)=licznik/dlog(dexp(x4)+dexp(-x4))
1206 facT(5)=licznik/dlog(dexp(x5)+dexp(-x5))
1208 !#if defined(WHAM_RUN) || defined(CLUSTER)
1210 facT(6)=(320.0+80.0*dtanh((t_bath-320.0)/80.0))/320.0
1211 #elif defined(FUNCT)
1218 write (iout,*) "Wrong RESCALE_MODE",rescale_mode
1219 write (*,*) "Wrong RESCALE_MODE",rescale_mode
1221 call MPI_Finalize(MPI_COMM_WORLD,IERROR)
1225 welec=weights(3)*fact(1)
1226 wcorr=weights(4)*fact(3)
1227 wcorr5=weights(5)*fact(4)
1228 wcorr6=weights(6)*fact(5)
1229 wel_loc=weights(7)*fact(2)
1230 wturn3=weights(8)*fact(2)
1231 wturn4=weights(9)*fact(3)
1232 wturn6=weights(10)*fact(5)
1233 wtor=weights(13)*fact(1)
1234 wtor_d=weights(14)*fact(2)
1235 wsccor=weights(21)*fact(1)
1236 welpsb=weights(28)*fact(1)
1237 wcorr_nucl= weights(37)*fact(1)
1238 wcorr3_nucl=weights(38)*fact(2)
1239 wtor_nucl= weights(35)*fact(1)
1240 wtor_d_nucl=weights(36)*fact(2)
1241 wpepbase=weights(47)*fact(1)
1243 end subroutine rescale_weights
1244 !-----------------------------------------------------------------------------
1245 subroutine enerprint(energia)
1246 ! implicit real*8 (a-h,o-z)
1247 ! include 'DIMENSIONS'
1248 ! include 'COMMON.IOUNITS'
1249 ! include 'COMMON.FFIELD'
1250 ! include 'COMMON.SBRIDGE'
1251 ! include 'COMMON.MD'
1252 real(kind=8) :: energia(0:n_ene)
1254 real(kind=8) :: etot,evdw,evdw2,ees,evdw1,ecorr,ecorr5,ecorr6,eel_loc
1255 real(kind=8) :: eello_turn6,eello_turn3,eello_turn4,ebe,escloc
1256 real(kind=8) :: etors,etors_d,ehpb,edihcnstr,estr,Uconst,esccor,eliptran,&
1257 etube,ethetacnstr,Eafmforce
1258 real(kind=8) :: evdwpp,eespp,evdwpsb,eelpsb,evdwsb,eelsb,estr_nucl,&
1259 ebe_nucl,esbloc,etors_nucl,etors_d_nucl,ecorr_nucl,&
1261 real(kind=8) :: ecation_prot,ecationcation,ecations_prot_amber,&
1263 real(kind=8) :: escbase,epepbase,escpho,epeppho
1269 evdw2=energia(2)+energia(18)
1281 eello_turn3=energia(8)
1282 eello_turn4=energia(9)
1283 eello_turn6=energia(10)
1289 edihcnstr=energia(19)
1293 eliptran=energia(22)
1294 Eafmforce=energia(23)
1295 ethetacnstr=energia(24)
1303 estr_nucl=energia(32)
1304 ebe_nucl=energia(33)
1306 etors_nucl=energia(35)
1307 etors_d_nucl=energia(36)
1308 ecorr_nucl=energia(37)
1309 ecorr3_nucl=energia(38)
1310 ecation_prot=energia(42)
1311 ecationcation=energia(41)
1313 epepbase=energia(47)
1316 ecation_nucl=energia(50)
1317 ! ecations_prot_amber=energia(50)
1319 write (iout,10) evdw,wsc,evdw2,wscp,ees,welec,evdw1,wvdwpp,&
1320 estr,wbond,ebe,wang,&
1321 escloc,wscloc,etors,wtor,etors_d,wtor_d,ehpb,wstrain,&
1323 ecorr5,wcorr5,ecorr6,wcorr6,eel_loc,wel_loc,eello_turn3,wturn3,&
1324 eello_turn4,wturn4,eello_turn6,wturn6,esccor,wsccor,&
1325 edihcnstr,ethetacnstr,ebr*nss,&
1326 Uconst,eliptran,wliptran,Eafmforce,etube,wtube, & ! till now protein
1327 estr_nucl,wbond_nucl,ebe_nucl,wang_nucl, &
1328 evdwpp,wvdwpp_nucl,eespp,welpp,evdwpsb,wvdwpsb,eelpsb,welpsb,&
1329 evdwsb,wvdwsb,eelsb,welsb,esbloc,wsbloc,etors_nucl,wtor_nucl,&
1330 etors_d_nucl,wtor_d_nucl,ecorr_nucl,wcorr_nucl,&
1331 ecorr3_nucl,wcorr3_nucl,ecation_prot,wcatprot,ecationcation,wcatcat, &
1332 escbase,wscbase,epepbase,wpepbase,escpho,wscpho,epeppho,wpeppho,&
1333 ecation_nucl,wcatnucl,etot
1334 10 format (/'Virtual-chain energies:'// &
1335 'EVDW= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC-SC)'/ &
1336 'EVDW2= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC-p)'/ &
1337 'EES= ',1pE16.6,' WEIGHT=',1pD16.6,' (p-p)'/ &
1338 'EVDWPP=',1pE16.6,' WEIGHT=',1pD16.6,' (p-p VDW)'/ &
1339 'ESTR= ',1pE16.6,' WEIGHT=',1pD16.6,' (stretching)'/ &
1340 'EBE= ',1pE16.6,' WEIGHT=',1pD16.6,' (bending)'/ &
1341 'ESC= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC local)'/ &
1342 'ETORS= ',1pE16.6,' WEIGHT=',1pD16.6,' (torsional)'/ &
1343 'ETORSD=',1pE16.6,' WEIGHT=',1pD16.6,' (double torsional)'/ &
1344 'EHBP= ',1pE16.6,' WEIGHT=',1pD16.6, &
1345 ' (SS bridges & dist. cnstr.)'/ &
1346 'ECORR4=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/ &
1347 'ECORR5=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/ &
1348 'ECORR6=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/ &
1349 'EELLO= ',1pE16.6,' WEIGHT=',1pD16.6,' (electrostatic-local)'/ &
1350 'ETURN3=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 3rd order)'/ &
1351 'ETURN4=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 4th order)'/ &
1352 'ETURN6=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 6th order)'/ &
1353 'ESCCOR=',1pE16.6,' WEIGHT=',1pD16.6,' (backbone-rotamer corr)'/ &
1354 'EDIHC= ',1pE16.6,' (dihedral angle constraints)'/ &
1355 'ETHETC= ',1pE16.6,' (valence angle constraints)'/ &
1356 'ESS= ',1pE16.6,' (disulfide-bridge intrinsic energy)'/ &
1357 'UCONST= ',1pE16.6,' (Constraint energy)'/ &
1358 'ELT=',1pE16.6, ' WEIGHT=',1pD16.6,' (Lipid transfer energy)'/&
1359 'EAFM= ',1pE16.6,' (atomic-force microscopy)'/ &
1360 'ETUBE=',1pE16.6, ' WEIGHT=',1pD16.6,' (cylindrical energy)'/ &
1361 'ESTR_nucl=',1pE16.6,' WEIGHT=',1pD16.6,' (stretching for nucleic)'/ &
1362 'EBE_nucl=',1pE16.6,' WEIGHT=',1pD16.6,' (bending for nucleic)'/ &
1363 'EVDW_nucl=',1pE16.6,' WEIGHT=',1pD16.6,'(phosphate-phosphate VDW)'/ &
1364 'EESPP_nucl=',1pE16.6,' WEIGHT=',1pD16.6,'(phosphate-phosphate elec)'/ &
1365 'EVDWPSB_nucl=',1pE16.6,' WEIGHT=',1pD16.6,'(phosphate-sugarbase VDW)'/ &
1366 'EESPSB_nucl=',1pE16.6,' WEIGHT=',1pD16.6,'(phosphate-sugarbase elec)'/ &
1367 'EVDWSB_nucl=',1pE16.6,' WEIGHT=',1pD16.6,'(sugarbase-sugarbase VDW)'/ &
1368 'EESSB_nucl=',1pE16.6,' WEIGHT=',1pD16.6,'(sugarbase-sugarbase elec)'/ &
1369 'ESBLOC_nucl=',1pE16.6,' WEIGHT=',1pD16.6,'(sugarbase rotamer)'/ &
1370 'ETORS_nucl=',1pE16.6,' WEIGHT=',1pD16.6,'(torsional)'/ &
1371 'ETORSD_nucl=',1pE16.6,' WEIGHT=',1pD16.6,'(double torsional)'/ &
1372 'ECORR_nucl=',1pE16.6,' WEIGHT=',1pD16.6,'(multibody 4th order)'/ &
1373 'ECORR3_nucl=',1pE16.6,' WEIGHT=',1pD16.6,'(multibody 3th order)'/ &
1374 'ECATPROT=',1pE16.6,' WEIGHT=',1pD16.6,'(cation prot)'/ &
1375 'ECATCAT=',1pE16.6,' WEIGHT=',1pD16.6,'(cation cation)'/ &
1376 'ESCBASE=',1pE16.6,' WEIGHT=',1pD16.6,'(sc-prot nucl-base)'/ &
1377 'EPEPBASE=',1pE16.6,' WEIGHT=',1pD16.6,'(pep-prot nucl-base)'/ &
1378 'ESCPHO=',1pE16.6,' WEIGHT=',1pD16.6,'(sc-prot nucl-phosphate)'/&
1379 'EPEPPHO=',1pE16.6,' WEIGHT=',1pD16.6,'(pep-prot nucl-phosphate)'/&
1380 'ECATBASE=',1pE16.6,' WEIGHT=',1pD16.6,'(cation nucl-base)'/&
1381 'ETOT= ',1pE16.6,' (total)')
1383 write (iout,10) evdw,wsc,evdw2,wscp,ees,welec,&
1384 estr,wbond,ebe,wang,&
1385 escloc,wscloc,etors,wtor,etors_d,wtor_d,ehpb,wstrain,&
1387 ecorr5,wcorr5,ecorr6,wcorr6,eel_loc,wel_loc,eello_turn3,wturn3,&
1388 eello_turn4,wturn4,eello_turn6,wturn6,esccor,wsccor,edihcnstr,&
1389 ethetacnstr,ebr*nss,Uconst,eliptran,wliptran,Eafmforce, &
1391 estr_nucl,wbond_nucl, ebe_nucl,wang_nucl,&
1392 evdwpp,wvdwpp_nucl,eespp,welpp,evdwpsb,wvdwpsb,eelpsb,welpsb,&
1393 evdwsb,wvdwsb,eelsb,welsb,esbloc,wsbloc,etors_nucl,wtor_nucl,&
1394 etors_d_nucl,wtor_d_nucl,ecorr_nucl,wcorr_nucl,&
1395 ecorr3_nucl,wcorr3_nucl,ecation_prot,wcatprot,ecationcation,wcatcat, &
1396 escbase,wscbase,epepbase,wpepbase,escpho,wscpho,epeppho,wpeppho,&
1397 ecation_nucl,wcatnucl,etot
1398 10 format (/'Virtual-chain energies:'// &
1399 'EVDW= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC-SC)'/ &
1400 'EVDW2= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC-p)'/ &
1401 'EES= ',1pE16.6,' WEIGHT=',1pD16.6,' (p-p)'/ &
1402 'ESTR= ',1pE16.6,' WEIGHT=',1pD16.6,' (stretching)'/ &
1403 'EBE= ',1pE16.6,' WEIGHT=',1pD16.6,' (bending)'/ &
1404 'ESC= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC local)'/ &
1405 'ETORS= ',1pE16.6,' WEIGHT=',1pD16.6,' (torsional)'/ &
1406 'ETORSD=',1pE16.6,' WEIGHT=',1pD16.6,' (double torsional)'/ &
1407 'EHBP= ',1pE16.6,' WEIGHT=',1pD16.6, &
1408 ' (SS bridges & dist. cnstr.)'/ &
1409 'ECORR4=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/ &
1410 'ECORR5=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/ &
1411 'ECORR6=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/ &
1412 'EELLO= ',1pE16.6,' WEIGHT=',1pD16.6,' (electrostatic-local)'/ &
1413 'ETURN3=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 3rd order)'/ &
1414 'ETURN4=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 4th order)'/ &
1415 'ETURN6=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 6th order)'/ &
1416 'ESCCOR=',1pE16.6,' WEIGHT=',1pD16.6,' (backbone-rotamer corr)'/ &
1417 'EDIHC= ',1pE16.6,' (dihedral angle constraints)'/ &
1418 'ETHETC= ',1pE16.6,' (valence angle constraints)'/ &
1419 'ESS= ',1pE16.6,' (disulfide-bridge intrinsic energy)'/ &
1420 'UCONST=',1pE16.6,' (Constraint energy)'/ &
1421 'ELT=',1pE16.6, ' WEIGHT=',1pD16.6,' (Lipid transfer energy)'/ &
1422 'EAFM= ',1pE16.6,' (atomic-force microscopy)'/ &
1423 'ETUBE=',1pE16.6, ' WEIGHT=',1pD16.6,' (cylindrical energy)'/ &
1424 'ESTR_nucl= ',1pE16.6,' WEIGHT=',1pD16.6,' (stretching for nucleic)'/ &
1425 'EBE_nucl=',1pE16.6,' WEIGHT=',1pD16.6,' (bending for nucleic)'/ &
1426 'EVDW_nucl=',1pE16.6,' WEIGHT=',1pD16.6,'(phosphate-phosphate VDW)'/ &
1427 'EESPP_nucl=',1pE16.6,' WEIGHT=',1pD16.6,'(phosphate-phosphate elec)'/ &
1428 'EVDWPSB_nucl=',1pE16.6,' WEIGHT=',1pD16.6,'(phosphate-sugarbase VDW)'/ &
1429 'EESPSB_nucl=',1pE16.6,' WEIGHT=',1pD16.6,'(phosphate-sugarbase elec)'/ &
1430 'EVDWSB_nucl=',1pE16.6,' WEIGHT=',1pD16.6,'(sugarbase-sugarbase VDW)'/ &
1431 'EESSB_nucl=',1pE16.6,' WEIGHT=',1pD16.6,'(sugarbase-sugarbase elec)'/ &
1432 'ESBLOC_nucl=',1pE16.6,' WEIGHT=',1pD16.6,'(sugarbase rotamer)'/ &
1433 'ETORS_nucl=',1pE16.6,' WEIGHT=',1pD16.6,'(torsional)'/ &
1434 'ETORSD_nucl=',1pE16.6,' WEIGHT=',1pD16.6,'(double torsional)'/ &
1435 'ECORR_nucl=',1pE16.6,' WEIGHT=',1pD16.6,'(multibody 4th order)'/ &
1436 'ECORR3_nucl=',1pE16.6,' WEIGHT=',1pD16.6,'(multibody 3th order)'/ &
1437 'ECATPROT=',1pE16.6,' WEIGHT=',1pD16.6,'(cation prot)'/ &
1438 'ECATCAT=',1pE16.6,' WEIGHT=',1pD16.6,'(cation cation)'/ &
1439 'ESCBASE=',1pE16.6,' WEIGHT=',1pD16.6,'(sc-prot nucl-base)'/ &
1440 'EPEPBASE=',1pE16.6,' WEIGHT=',1pD16.6,'(pep-prot nucl-base)'/ &
1441 'ESCPHO=',1pE16.6,' WEIGHT=',1pD16.6,'(sc-prot nucl-phosphate)'/&
1442 'EPEPPHO=',1pE16.6,' WEIGHT=',1pD16.6,'(pep-prot nucl-phosphate)'/&
1443 'ECATBASE=',1pE16.6,' WEIGHT=',1pD16.6,'(cation nucl-base)'/&
1444 'ETOT= ',1pE16.6,' (total)')
1447 end subroutine enerprint
1448 !-----------------------------------------------------------------------------
1449 subroutine elj(evdw)
1451 ! This subroutine calculates the interaction energy of nonbonded side chains
1452 ! assuming the LJ potential of interaction.
1454 ! implicit real*8 (a-h,o-z)
1455 ! include 'DIMENSIONS'
1456 real(kind=8),parameter :: accur=1.0d-10
1457 ! include 'COMMON.GEO'
1458 ! include 'COMMON.VAR'
1459 ! include 'COMMON.LOCAL'
1460 ! include 'COMMON.CHAIN'
1461 ! include 'COMMON.DERIV'
1462 ! include 'COMMON.INTERACT'
1463 ! include 'COMMON.TORSION'
1464 ! include 'COMMON.SBRIDGE'
1465 ! include 'COMMON.NAMES'
1466 ! include 'COMMON.IOUNITS'
1467 ! include 'COMMON.CONTACTS'
1468 real(kind=8),dimension(3) :: gg,gg_lipi,gg_lipj
1469 integer :: num_conti
1471 integer :: i,itypi,iint,j,itypi1,itypj,k
1472 real(kind=8) :: rij,rcut,fcont,fprimcont,rrij,sslipi,ssgradlipi,&
1473 aa,bb,sslipj,ssgradlipj
1474 real(kind=8) :: evdw,xi,yi,zi,xj,yj,zj
1475 real(kind=8) :: eps0ij,fac,e1,e2,evdwij,sigij,r0ij
1477 ! write(iout,*)'Entering ELJ nnt=',nnt,' nct=',nct,' expon=',expon
1479 ! allocate(num_cont(iatsc_s:iatsc_e)) !(maxres) nnt,nct-2
1480 ! allocate(jcont(nres/4,iatsc_s:iatsc_e)) !(maxconts,maxres) (maxconts=maxres/4)
1481 ! allocate(facont(nres/4,iatsc_s:iatsc_e)) !(maxconts,maxres)
1482 ! allocate(gacont(3,nres/4,iatsc_s:iatsc_e)) !(3,maxconts,maxres)
1484 do i=iatsc_s,iatsc_e
1485 itypi=iabs(itype(i,1))
1486 if (itypi.eq.ntyp1) cycle
1487 itypi1=iabs(itype(i+1,1))
1491 call to_box(xi,yi,zi)
1492 call lipid_layer(xi,yi,zi,sslipi,ssgradlipi)
1497 ! Calculate SC interaction energy.
1499 do iint=1,nint_gr(i)
1500 !d write (iout,*) 'i=',i,' iint=',iint,' istart=',istart(i,iint),
1501 !d & 'iend=',iend(i,iint)
1502 do j=istart(i,iint),iend(i,iint)
1503 itypj=iabs(itype(j,1))
1504 if (itypj.eq.ntyp1) cycle
1508 call to_box(xj,yj,zj)
1509 call lipid_layer(xj,yj,zj,sslipj,ssgradlipj)
1510 aa=aa_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0 &
1511 +aa_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
1512 bb=bb_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0 &
1513 +bb_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
1514 xj=boxshift(xj-xi,boxxsize)
1515 yj=boxshift(yj-yi,boxysize)
1516 zj=boxshift(zj-zi,boxzsize)
1517 ! Change 12/1/95 to calculate four-body interactions
1518 rij=xj*xj+yj*yj+zj*zj
1520 ! write (iout,*)'i=',i,' j=',j,' itypi=',itypi,' itypj=',itypj
1521 eps0ij=eps(itypi,itypj)
1523 e1=fac*fac*aa_aq(itypi,itypj)
1524 e2=fac*bb_aq(itypi,itypj)
1526 !d sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
1527 !d epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
1528 !d write (iout,'(2(a3,i3,2x),6(1pd12.4)/2(3(1pd12.4),5x)/)')
1529 !d & restyp(itypi,1),i,restyp(itypj,1),j,aa(itypi,itypj),
1530 !d & bb(itypi,itypj),1.0D0/dsqrt(rrij),evdwij,epsi,sigm,
1531 !d & (c(k,i),k=1,3),(c(k,j),k=1,3)
1534 ! Calculate the components of the gradient in DC and X
1536 fac=-rrij*(e1+evdwij)
1541 gvdwx(k,i)=gvdwx(k,i)-gg(k)
1542 gvdwx(k,j)=gvdwx(k,j)+gg(k)
1543 gvdwc(k,i)=gvdwc(k,i)-gg(k)
1544 gvdwc(k,j)=gvdwc(k,j)+gg(k)
1548 !grad gvdwc(l,k)=gvdwc(l,k)+gg(l)
1552 ! 12/1/95, revised on 5/20/97
1554 ! Calculate the contact function. The ith column of the array JCONT will
1555 ! contain the numbers of atoms that make contacts with the atom I (of numbers
1556 ! greater than I). The arrays FACONT and GACONT will contain the values of
1557 ! the contact function and its derivative.
1559 ! Uncomment next line, if the correlation interactions include EVDW explicitly.
1560 ! if (j.gt.i+1 .and. evdwij.le.0.0D0) then
1561 ! Uncomment next line, if the correlation interactions are contact function only
1562 if (j.gt.i+1.and. eps0ij.gt.0.0D0) then
1564 sigij=sigma(itypi,itypj)
1565 r0ij=rs0(itypi,itypj)
1567 ! Check whether the SC's are not too far to make a contact.
1570 call gcont(rij,rcut,1.0d0,0.2d0*rcut,fcont,fprimcont)
1571 ! Add a new contact, if the SC's are close enough, but not too close (r<sigma).
1573 if (fcont.gt.0.0D0) then
1574 ! If the SC-SC distance if close to sigma, apply spline.
1575 !Adam call gcont(-rij,-1.03d0*sigij,2.0d0*sigij,1.0d0,
1576 !Adam & fcont1,fprimcont1)
1577 !Adam fcont1=1.0d0-fcont1
1578 !Adam if (fcont1.gt.0.0d0) then
1579 !Adam fprimcont=fprimcont*fcont1+fcont*fprimcont1
1580 !Adam fcont=fcont*fcont1
1582 ! Uncomment following 4 lines to have the geometric average of the epsilon0's
1583 !ga eps0ij=1.0d0/dsqrt(eps0ij)
1585 !ga gg(k)=gg(k)*eps0ij
1587 !ga eps0ij=-evdwij*eps0ij
1588 ! Uncomment for AL's type of SC correlation interactions.
1589 !adam eps0ij=-evdwij
1590 num_conti=num_conti+1
1591 jcont(num_conti,i)=j
1592 facont(num_conti,i)=fcont*eps0ij
1593 fprimcont=eps0ij*fprimcont/rij
1595 !Adam gacont(1,num_conti,i)=-fprimcont*xj+fcont*gg(1)
1596 !Adam gacont(2,num_conti,i)=-fprimcont*yj+fcont*gg(2)
1597 !Adam gacont(3,num_conti,i)=-fprimcont*zj+fcont*gg(3)
1598 ! Uncomment following 3 lines for Skolnick's type of SC correlation.
1599 gacont(1,num_conti,i)=-fprimcont*xj
1600 gacont(2,num_conti,i)=-fprimcont*yj
1601 gacont(3,num_conti,i)=-fprimcont*zj
1602 !d write (iout,'(2i5,2f10.5)') i,j,rij,facont(num_conti,i)
1603 !d write (iout,'(2i3,3f10.5)')
1604 !d & i,j,(gacont(kk,num_conti,i),kk=1,3)
1610 num_cont(i)=num_conti
1614 gvdwc(j,i)=expon*gvdwc(j,i)
1615 gvdwx(j,i)=expon*gvdwx(j,i)
1618 !******************************************************************************
1622 ! To save time, the factor of EXPON has been extracted from ALL components
1623 ! of GVDWC and GRADX. Remember to multiply them by this factor before further
1626 !******************************************************************************
1629 !-----------------------------------------------------------------------------
1630 subroutine eljk(evdw)
1632 ! This subroutine calculates the interaction energy of nonbonded side chains
1633 ! assuming the LJK potential of interaction.
1635 ! implicit real*8 (a-h,o-z)
1636 ! include 'DIMENSIONS'
1637 ! include 'COMMON.GEO'
1638 ! include 'COMMON.VAR'
1639 ! include 'COMMON.LOCAL'
1640 ! include 'COMMON.CHAIN'
1641 ! include 'COMMON.DERIV'
1642 ! include 'COMMON.INTERACT'
1643 ! include 'COMMON.IOUNITS'
1644 ! include 'COMMON.NAMES'
1645 real(kind=8),dimension(3) :: gg,gg_lipi,gg_lipj
1648 integer :: i,iint,j,itypi,itypi1,k,itypj
1649 real(kind=8) :: rrij,xi,yi,zi,xj,yj,zj,fac_augm,e_augm,r_inv_ij, &
1650 sslipi,ssgradlipi, sslipj,ssgradlipj, aa, bb
1651 real(kind=8) :: evdw,rij,r_shift_inv,fac,e1,e2,evdwij
1653 ! print *,'Entering ELJK nnt=',nnt,' nct=',nct,' expon=',expon
1655 do i=iatsc_s,iatsc_e
1656 itypi=iabs(itype(i,1))
1657 if (itypi.eq.ntyp1) cycle
1658 itypi1=iabs(itype(i+1,1))
1662 call to_box(xi,yi,zi)
1663 call lipid_layer(xi,yi,zi,sslipi,ssgradlipi)
1666 ! Calculate SC interaction energy.
1668 do iint=1,nint_gr(i)
1669 do j=istart(i,iint),iend(i,iint)
1670 itypj=iabs(itype(j,1))
1671 if (itypj.eq.ntyp1) cycle
1675 call to_box(xj,yj,zj)
1676 call lipid_layer(xj,yj,zj,sslipj,ssgradlipj)
1677 aa=aa_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0 &
1678 +aa_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
1679 bb=bb_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0 &
1680 +bb_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
1681 xj=boxshift(xj-xi,boxxsize)
1682 yj=boxshift(yj-yi,boxysize)
1683 zj=boxshift(zj-zi,boxzsize)
1684 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
1685 fac_augm=rrij**expon
1686 e_augm=augm(itypi,itypj)*fac_augm
1687 r_inv_ij=dsqrt(rrij)
1689 r_shift_inv=1.0D0/(rij+r0(itypi,itypj)-sigma(itypi,itypj))
1690 fac=r_shift_inv**expon
1691 e1=fac*fac*aa_aq(itypi,itypj)
1692 e2=fac*bb_aq(itypi,itypj)
1694 !d sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
1695 !d epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
1696 !d write (iout,'(2(a3,i3,2x),8(1pd12.4)/2(3(1pd12.4),5x)/)')
1697 !d & restyp(itypi,1),i,restyp(itypj,1),j,aa(itypi,itypj),
1698 !d & bb(itypi,itypj),augm(itypi,itypj),epsi,sigm,
1699 !d & sigma(itypi,itypj),1.0D0/dsqrt(rrij),evdwij,
1700 !d & (c(k,i),k=1,3),(c(k,j),k=1,3)
1703 ! Calculate the components of the gradient in DC and X
1705 fac=-2.0D0*rrij*e_augm-r_inv_ij*r_shift_inv*(e1+e1+e2)
1710 gvdwx(k,i)=gvdwx(k,i)-gg(k)
1711 gvdwx(k,j)=gvdwx(k,j)+gg(k)
1712 gvdwc(k,i)=gvdwc(k,i)-gg(k)
1713 gvdwc(k,j)=gvdwc(k,j)+gg(k)
1717 !grad gvdwc(l,k)=gvdwc(l,k)+gg(l)
1725 gvdwc(j,i)=expon*gvdwc(j,i)
1726 gvdwx(j,i)=expon*gvdwx(j,i)
1731 !-----------------------------------------------------------------------------
1732 subroutine ebp(evdw)
1734 ! This subroutine calculates the interaction energy of nonbonded side chains
1735 ! assuming the Berne-Pechukas potential of interaction.
1739 ! implicit real*8 (a-h,o-z)
1740 ! include 'DIMENSIONS'
1741 ! include 'COMMON.GEO'
1742 ! include 'COMMON.VAR'
1743 ! include 'COMMON.LOCAL'
1744 ! include 'COMMON.CHAIN'
1745 ! include 'COMMON.DERIV'
1746 ! include 'COMMON.NAMES'
1747 ! include 'COMMON.INTERACT'
1748 ! include 'COMMON.IOUNITS'
1749 ! include 'COMMON.CALC'
1751 !el integer :: icall
1752 !el common /srutu/ icall
1753 ! double precision rrsave(maxdim)
1756 integer :: iint,itypi,itypi1,itypj
1757 real(kind=8) :: rrij,xi,yi,zi, sslipi,ssgradlipi, sslipj, &
1759 real(kind=8) :: evdw,fac,e1,e2,sigm,epsi
1761 ! print *,'Entering EBP nnt=',nnt,' nct=',nct,' expon=',expon
1763 ! if (icall.eq.0) then
1769 do i=iatsc_s,iatsc_e
1770 itypi=iabs(itype(i,1))
1771 if (itypi.eq.ntyp1) cycle
1772 itypi1=iabs(itype(i+1,1))
1776 call to_box(xi,yi,zi)
1777 call lipid_layer(xi,yi,zi,sslipi,ssgradlipi)
1778 dxi=dc_norm(1,nres+i)
1779 dyi=dc_norm(2,nres+i)
1780 dzi=dc_norm(3,nres+i)
1781 ! dsci_inv=dsc_inv(itypi)
1782 dsci_inv=vbld_inv(i+nres)
1784 ! Calculate SC interaction energy.
1786 do iint=1,nint_gr(i)
1787 do j=istart(i,iint),iend(i,iint)
1789 itypj=iabs(itype(j,1))
1790 if (itypj.eq.ntyp1) cycle
1791 ! dscj_inv=dsc_inv(itypj)
1792 dscj_inv=vbld_inv(j+nres)
1793 chi1=chi(itypi,itypj)
1794 chi2=chi(itypj,itypi)
1801 alf12=0.5D0*(alf1+alf2)
1802 ! For diagnostics only!!!
1815 call to_box(xj,yj,zj)
1816 call lipid_layer(xj,yj,zj,sslipj,ssgradlipj)
1817 aa=aa_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0 &
1818 +aa_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
1819 bb=bb_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0 &
1820 +bb_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
1821 xj=boxshift(xj-xi,boxxsize)
1822 yj=boxshift(yj-yi,boxysize)
1823 zj=boxshift(zj-zi,boxzsize)
1824 dxj=dc_norm(1,nres+j)
1825 dyj=dc_norm(2,nres+j)
1826 dzj=dc_norm(3,nres+j)
1827 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
1828 !d if (icall.eq.0) then
1834 ! Calculate the angle-dependent terms of energy & contributions to derivatives.
1836 ! Calculate whole angle-dependent part of epsilon and contributions
1837 ! to its derivatives
1838 fac=(rrij*sigsq)**expon2
1839 e1=fac*fac*aa_aq(itypi,itypj)
1840 e2=fac*bb_aq(itypi,itypj)
1841 evdwij=eps1*eps2rt*eps3rt*(e1+e2)
1842 eps2der=evdwij*eps3rt
1843 eps3der=evdwij*eps2rt
1844 evdwij=evdwij*eps2rt*eps3rt
1847 sigm=dabs(aa_aq(itypi,itypj)/bb_aq(itypi,itypj))**(1.0D0/6.0D0)
1848 epsi=bb_aq(itypi,itypj)**2/aa_aq(itypi,itypj)
1849 !d write (iout,'(2(a3,i3,2x),15(0pf7.3))')
1850 !d & restyp(itypi,1),i,restyp(itypj,1),j,
1851 !d & epsi,sigm,chi1,chi2,chip1,chip2,
1852 !d & eps1,eps2rt**2,eps3rt**2,1.0D0/dsqrt(sigsq),
1853 !d & om1,om2,om12,1.0D0/dsqrt(rrij),
1856 ! Calculate gradient components.
1857 e1=e1*eps1*eps2rt**2*eps3rt**2
1858 fac=-expon*(e1+evdwij)
1861 ! Calculate radial part of the gradient
1865 ! Calculate the angular part of the gradient and sum add the contributions
1866 ! to the appropriate components of the Cartesian gradient.
1874 !-----------------------------------------------------------------------------
1875 subroutine egb(evdw)
1877 ! This subroutine calculates the interaction energy of nonbonded side chains
1878 ! assuming the Gay-Berne potential of interaction.
1881 ! implicit real*8 (a-h,o-z)
1882 ! include 'DIMENSIONS'
1883 ! include 'COMMON.GEO'
1884 ! include 'COMMON.VAR'
1885 ! include 'COMMON.LOCAL'
1886 ! include 'COMMON.CHAIN'
1887 ! include 'COMMON.DERIV'
1888 ! include 'COMMON.NAMES'
1889 ! include 'COMMON.INTERACT'
1890 ! include 'COMMON.IOUNITS'
1891 ! include 'COMMON.CALC'
1892 ! include 'COMMON.CONTROL'
1893 ! include 'COMMON.SBRIDGE'
1896 integer :: iint,itypi,itypi1,itypj,subchap,icont
1897 real(kind=8) :: rrij,xi,yi,zi,sig,rij_shift,fac,e1,e2,sigm,epsi
1898 real(kind=8) :: evdw,sig0ij
1899 real(kind=8) :: xj_safe,yj_safe,zj_safe,xj_temp,yj_temp,zj_temp,&
1900 dist_temp, dist_init,aa,bb,ssgradlipi,ssgradlipj, &
1901 sslipi,sslipj,faclip
1903 real(kind=8) :: fracinbuf
1905 !cccc energy_dec=.false.
1906 ! print *,'Entering EGB nnt=',nnt,' nct=',nct,' expon=',expon
1909 ! if (icall.eq.0) lprn=.false.
1917 ! write (iout,*) "RWA", g_listscsc_start,g_listscsc_end,i,j
1919 do icont=g_listscsc_start,g_listscsc_end
1920 i=newcontlisti(icont)
1921 j=newcontlistj(icont)
1922 ! write (iout,*) "RWA", g_listscsc_start,g_listscsc_end,i,j
1923 ! do i=iatsc_s,iatsc_e
1924 !C print *,"I am in EVDW",i
1925 itypi=iabs(itype(i,1))
1926 ! if (i.ne.47) cycle
1927 if (itypi.eq.ntyp1) cycle
1928 itypi1=iabs(itype(i+1,1))
1932 call to_box(xi,yi,zi)
1933 call lipid_layer(xi,yi,zi,sslipi,ssgradlipi)
1935 dxi=dc_norm(1,nres+i)
1936 dyi=dc_norm(2,nres+i)
1937 dzi=dc_norm(3,nres+i)
1938 ! dsci_inv=dsc_inv(itypi)
1939 dsci_inv=vbld_inv(i+nres)
1940 ! write (iout,*) "i",i,dsc_inv(itypi),dsci_inv,1.0d0/vbld(i+nres)
1941 ! write (iout,*) "dcnori",dxi*dxi+dyi*dyi+dzi*dzi
1943 ! Calculate SC interaction energy.
1945 ! do iint=1,nint_gr(i)
1946 ! do j=istart(i,iint),iend(i,iint)
1947 IF (dyn_ss_mask(i).and.dyn_ss_mask(j)) THEN
1948 call dyn_ssbond_ene(i,j,evdwij)
1950 if (energy_dec) write (iout,'(a6,2i5,0pf7.3,a3)') &
1951 'evdw',i,j,evdwij,' ss'
1952 ! if (energy_dec) write (iout,*) &
1953 ! 'evdw',i,j,evdwij,' ss'
1954 do k=j+1,iend(i,iint)
1955 !C search over all next residues
1956 if (dyn_ss_mask(k)) then
1957 !C check if they are cysteins
1958 !C write(iout,*) 'k=',k
1960 !c write(iout,*) "PRZED TRI", evdwij
1961 ! evdwij_przed_tri=evdwij
1962 call triple_ssbond_ene(i,j,k,evdwij)
1963 !c if(evdwij_przed_tri.ne.evdwij) then
1964 !c write (iout,*) "TRI:", evdwij, evdwij_przed_tri
1967 !c write(iout,*) "PO TRI", evdwij
1968 !C call the energy function that removes the artifical triple disulfide
1969 !C bond the soubroutine is located in ssMD.F
1971 if (energy_dec) write (iout,'(a6,2i5,0pf7.3,a3)') &
1972 'evdw',i,j,evdwij,'tss'
1973 endif!dyn_ss_mask(k)
1977 itypj=iabs(itype(j,1))
1978 if (itypj.eq.ntyp1) cycle
1979 ! if (j.ne.78) cycle
1980 ! dscj_inv=dsc_inv(itypj)
1981 dscj_inv=vbld_inv(j+nres)
1982 ! write (iout,*) "j",j,dsc_inv(itypj),dscj_inv,&
1983 ! 1.0d0/vbld(j+nres) !d
1984 ! write (iout,*) "i",i," j", j," itype",itype(i,1),itype(j,1)
1985 sig0ij=sigma(itypi,itypj)
1986 chi1=chi(itypi,itypj)
1987 chi2=chi(itypj,itypi)
1994 alf12=0.5D0*(alf1+alf2)
1995 ! For diagnostics only!!!
2008 call to_box(xj,yj,zj)
2009 call lipid_layer(xj,yj,zj,sslipj,ssgradlipj)
2010 ! write (iout,*) "KWA2", itypi,itypj
2011 aa=aa_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0 &
2012 +aa_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
2013 bb=bb_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0 &
2014 +bb_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
2015 xj=boxshift(xj-xi,boxxsize)
2016 yj=boxshift(yj-yi,boxysize)
2017 zj=boxshift(zj-zi,boxzsize)
2018 dxj=dc_norm(1,nres+j)
2019 dyj=dc_norm(2,nres+j)
2020 dzj=dc_norm(3,nres+j)
2021 ! write (iout,*) "dcnorj",dxi*dxi+dyi*dyi+dzi*dzi
2022 ! write (iout,*) "j",j," dc_norm",& !d
2023 ! dc_norm(1,nres+j),dc_norm(2,nres+j),dc_norm(3,nres+j)
2024 ! write(iout,*)"rrij ",rrij
2025 ! write(iout,*)"xj yj zj ", xj, yj, zj
2026 ! write(iout,*)"xi yi zi ", xi, yi, zi
2027 ! write(iout,*)"c ", c(1,:), c(2,:), c(3,:)
2028 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
2030 sss_ele_cut=sscale_ele(1.0d0/(rij))
2031 sss_ele_grad=sscagrad_ele(1.0d0/(rij))
2032 ! print *,sss_ele_cut,sss_ele_grad,&
2033 ! 1.0d0/(rij),r_cut_ele,rlamb_ele
2034 if (sss_ele_cut.le.0.0) cycle
2035 ! Calculate angle-dependent terms of energy and contributions to their
2039 sig=sig0ij*dsqrt(sigsq)
2040 rij_shift=1.0D0/rij-sig+sig0ij
2041 ! write(iout,*)" rij_shift",rij_shift," rij",rij," sig",sig,&
2043 ! for diagnostics; uncomment
2044 ! rij_shift=1.2*sig0ij
2045 ! I hate to put IF's in the loops, but here don't have another choice!!!!
2046 if (rij_shift.le.0.0D0) then
2048 !d write (iout,'(2(a3,i3,2x),17(0pf7.3))')
2049 !d & restyp(itypi,1),i,restyp(itypj,1),j,
2050 !d & rij_shift,1.0D0/rij,sig,sig0ij,sigsq,1-dsqrt(sigsq)
2054 !---------------------------------------------------------------
2055 rij_shift=1.0D0/rij_shift
2056 fac=rij_shift**expon
2058 e1=fac*fac*aa!(itypi,itypj)
2059 e2=fac*bb!(itypi,itypj)
2060 evdwij=eps1*eps2rt*eps3rt*(e1+e2)
2061 eps2der=evdwij*eps3rt
2062 eps3der=evdwij*eps2rt
2063 ! write(iout,*)"aa, bb ",aa(:,:),bb(:,:)
2064 ! write (iout,*) "sigsq",sigsq," sig",sig," eps2rt",eps2rt,& !d
2065 ! " eps3rt",eps3rt," eps1",eps1," e1",e1," e2",e2," fac",fac !d
2066 evdwij=evdwij*eps2rt*eps3rt
2067 evdw=evdw+evdwij*sss_ele_cut
2069 sigm=dabs(aa/bb)**(1.0D0/6.0D0)
2070 epsi=bb**2/aa!(itypi,itypj)
2071 write (iout,'(2(a3,i3,2x),17(0pf7.3))') &
2072 restyp(itypi,1),i,restyp(itypj,1),j, &
2073 epsi,sigm,chi1,chi2,chip1,chip2, &
2074 eps1,eps2rt**2,eps3rt**2,sig,sig0ij, &
2075 om1,om2,om12,1.0D0/rij,1.0D0/rij_shift, &
2079 if (energy_dec) write (iout,'(a6,2i5,0pf7.3,2e10.2,e11.3)')&
2080 'evdw',i,j,evdwij,xi,xj,rij !,"egb"
2081 !C print *,i,j,c(1,i),c(1,j),c(2,i),c(2,j),c(3,i),c(3,j)
2082 ! if (energy_dec) write (iout,*) &
2084 ! print *,"ZALAMKA", evdw
2086 ! Calculate gradient components.
2087 e1=e1*eps1*eps2rt**2*eps3rt**2
2088 fac=-expon*(e1+evdwij)*rij_shift
2091 ! print *,'before fac',fac,rij,evdwij
2092 fac=fac+evdwij*sss_ele_grad/sss_ele_cut&
2094 ! print *,'grad part scale',fac, &
2095 ! evdwij*sss_ele_grad/sss_ele_cut &
2096 ! /sigma(itypi,itypj)*rij
2098 ! Calculate the radial part of the gradient
2102 !C Calculate the radial part of the gradient
2103 gg_lipi(3)=eps1*(eps2rt*eps2rt)&
2104 *(eps3rt*eps3rt)*sss_ele_cut/2.0d0*(faclip*faclip*&
2105 (aa_lip(itypi,itypj)-aa_aq(itypi,itypj))&
2106 +faclip*(bb_lip(itypi,itypj)-bb_aq(itypi,itypj)))
2107 gg_lipj(3)=ssgradlipj*gg_lipi(3)
2108 gg_lipi(3)=gg_lipi(3)*ssgradlipi
2110 ! print *,'before sc_grad', gg(1),gg(2),gg(3)
2111 ! Calculate angular part of the gradient.
2117 ! print *,"ZALAMKA", evdw
2118 ! write (iout,*) "Number of loop steps in EGB:",ind
2119 !ccc energy_dec=.false.
2122 !-----------------------------------------------------------------------------
2123 subroutine egbv(evdw)
2125 ! This subroutine calculates the interaction energy of nonbonded side chains
2126 ! assuming the Gay-Berne-Vorobjev potential of interaction.
2130 ! implicit real*8 (a-h,o-z)
2131 ! include 'DIMENSIONS'
2132 ! include 'COMMON.GEO'
2133 ! include 'COMMON.VAR'
2134 ! include 'COMMON.LOCAL'
2135 ! include 'COMMON.CHAIN'
2136 ! include 'COMMON.DERIV'
2137 ! include 'COMMON.NAMES'
2138 ! include 'COMMON.INTERACT'
2139 ! include 'COMMON.IOUNITS'
2140 ! include 'COMMON.CALC'
2142 !el integer :: icall
2143 !el common /srutu/ icall
2146 integer :: iint,itypi,itypi1,itypj
2147 real(kind=8) :: rrij,xi,yi,zi,r0ij,fac_augm,e_augm,fac,e1,e2, &
2148 sigm,sslipi,ssgradlipi, sslipj,ssgradlipj, aa, bb
2149 real(kind=8) :: evdw,sig0ij,sig,rij_shift,epsi
2151 ! print *,'Entering EGB nnt=',nnt,' nct=',nct,' expon=',expon
2154 ! if (icall.eq.0) lprn=.true.
2156 do i=iatsc_s,iatsc_e
2157 itypi=iabs(itype(i,1))
2158 if (itypi.eq.ntyp1) cycle
2159 itypi1=iabs(itype(i+1,1))
2163 call to_box(xi,yi,zi)
2164 call lipid_layer(xi,yi,zi,sslipi,ssgradlipi)
2165 dxi=dc_norm(1,nres+i)
2166 dyi=dc_norm(2,nres+i)
2167 dzi=dc_norm(3,nres+i)
2168 ! dsci_inv=dsc_inv(itypi)
2169 dsci_inv=vbld_inv(i+nres)
2171 ! Calculate SC interaction energy.
2173 do iint=1,nint_gr(i)
2174 do j=istart(i,iint),iend(i,iint)
2176 itypj=iabs(itype(j,1))
2177 if (itypj.eq.ntyp1) cycle
2178 ! dscj_inv=dsc_inv(itypj)
2179 dscj_inv=vbld_inv(j+nres)
2180 sig0ij=sigma(itypi,itypj)
2181 r0ij=r0(itypi,itypj)
2182 chi1=chi(itypi,itypj)
2183 chi2=chi(itypj,itypi)
2190 alf12=0.5D0*(alf1+alf2)
2191 ! For diagnostics only!!!
2204 call to_box(xj,yj,zj)
2205 call lipid_layer(xj,yj,zj,sslipj,ssgradlipj)
2206 aa=aa_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0 &
2207 +aa_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
2208 bb=bb_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0 &
2209 +bb_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
2210 xj=boxshift(xj-xi,boxxsize)
2211 yj=boxshift(yj-yi,boxysize)
2212 zj=boxshift(zj-zi,boxzsize)
2213 dxj=dc_norm(1,nres+j)
2214 dyj=dc_norm(2,nres+j)
2215 dzj=dc_norm(3,nres+j)
2216 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
2218 ! Calculate angle-dependent terms of energy and contributions to their
2222 sig=sig0ij*dsqrt(sigsq)
2223 rij_shift=1.0D0/rij-sig+r0ij
2224 ! I hate to put IF's in the loops, but here don't have another choice!!!!
2225 if (rij_shift.le.0.0D0) then
2230 !---------------------------------------------------------------
2231 rij_shift=1.0D0/rij_shift
2232 fac=rij_shift**expon
2233 e1=fac*fac*aa_aq(itypi,itypj)
2234 e2=fac*bb_aq(itypi,itypj)
2235 evdwij=eps1*eps2rt*eps3rt*(e1+e2)
2236 eps2der=evdwij*eps3rt
2237 eps3der=evdwij*eps2rt
2238 fac_augm=rrij**expon
2239 e_augm=augm(itypi,itypj)*fac_augm
2240 evdwij=evdwij*eps2rt*eps3rt
2241 evdw=evdw+evdwij+e_augm
2243 sigm=dabs(aa_aq(itypi,itypj)/&
2244 bb_aq(itypi,itypj))**(1.0D0/6.0D0)
2245 epsi=bb_aq(itypi,itypj)**2/aa_aq(itypi,itypj)
2246 write (iout,'(2(a3,i3,2x),17(0pf7.3))') &
2247 restyp(itypi,1),i,restyp(itypj,1),j,&
2248 epsi,sigm,sig,(augm(itypi,itypj)/epsi)**(1.0D0/12.0D0),&
2249 chi1,chi2,chip1,chip2,&
2250 eps1,eps2rt**2,eps3rt**2,&
2251 om1,om2,om12,1.0D0/rij,1.0D0/rij_shift,&
2254 ! Calculate gradient components.
2255 e1=e1*eps1*eps2rt**2*eps3rt**2
2256 fac=-expon*(e1+evdwij)*rij_shift
2258 fac=rij*fac-2*expon*rrij*e_augm
2259 ! Calculate the radial part of the gradient
2263 ! Calculate angular part of the gradient.
2269 !-----------------------------------------------------------------------------
2270 !el subroutine sc_angular in module geometry
2271 !-----------------------------------------------------------------------------
2272 subroutine e_softsphere(evdw)
2274 ! This subroutine calculates the interaction energy of nonbonded side chains
2275 ! assuming the LJ potential of interaction.
2277 ! implicit real*8 (a-h,o-z)
2278 ! include 'DIMENSIONS'
2279 real(kind=8),parameter :: accur=1.0d-10
2280 ! include 'COMMON.GEO'
2281 ! include 'COMMON.VAR'
2282 ! include 'COMMON.LOCAL'
2283 ! include 'COMMON.CHAIN'
2284 ! include 'COMMON.DERIV'
2285 ! include 'COMMON.INTERACT'
2286 ! include 'COMMON.TORSION'
2287 ! include 'COMMON.SBRIDGE'
2288 ! include 'COMMON.NAMES'
2289 ! include 'COMMON.IOUNITS'
2290 ! include 'COMMON.CONTACTS'
2291 real(kind=8),dimension(3) :: gg,gg_lipi,gg_lipj
2292 !d print *,'Entering Esoft_sphere nnt=',nnt,' nct=',nct
2294 integer :: i,iint,j,itypi,itypi1,itypj,k
2295 real(kind=8) :: evdw,xj,yj,zj,xi,yi,zi,rij,r0ij,r0ijsq,evdwij
2299 do i=iatsc_s,iatsc_e
2300 itypi=iabs(itype(i,1))
2301 if (itypi.eq.ntyp1) cycle
2302 itypi1=iabs(itype(i+1,1))
2306 call to_box(xi,yi,zi)
2309 ! Calculate SC interaction energy.
2311 do iint=1,nint_gr(i)
2312 !d write (iout,*) 'i=',i,' iint=',iint,' istart=',istart(i,iint),
2313 !d & 'iend=',iend(i,iint)
2314 do j=istart(i,iint),iend(i,iint)
2315 itypj=iabs(itype(j,1))
2316 if (itypj.eq.ntyp1) cycle
2317 xj=boxshift(c(1,nres+j)-xi,boxxsize)
2318 yj=boxshift(c(2,nres+j)-yi,boxysize)
2319 zj=boxshift(c(3,nres+j)-zi,boxzsize)
2320 rij=xj*xj+yj*yj+zj*zj
2321 ! write (iout,*)'i=',i,' j=',j,' itypi=',itypi,' itypj=',itypj
2322 r0ij=r0(itypi,itypj)
2324 ! print *,i,j,r0ij,dsqrt(rij)
2325 if (rij.lt.r0ijsq) then
2326 evdwij=0.25d0*(rij-r0ijsq)**2
2334 ! Calculate the components of the gradient in DC and X
2340 gvdwx(k,i)=gvdwx(k,i)-gg(k)
2341 gvdwx(k,j)=gvdwx(k,j)+gg(k)
2342 gvdwc(k,i)=gvdwc(k,i)-gg(k)
2343 gvdwc(k,j)=gvdwc(k,j)+gg(k)
2347 !grad gvdwc(l,k)=gvdwc(l,k)+gg(l)
2354 end subroutine e_softsphere
2355 !-----------------------------------------------------------------------------
2356 subroutine eelec_soft_sphere(ees,evdw1,eel_loc,eello_turn3,eello_turn4)
2358 ! Soft-sphere potential of p-p interaction
2360 ! implicit real*8 (a-h,o-z)
2361 ! include 'DIMENSIONS'
2362 ! include 'COMMON.CONTROL'
2363 ! include 'COMMON.IOUNITS'
2364 ! include 'COMMON.GEO'
2365 ! include 'COMMON.VAR'
2366 ! include 'COMMON.LOCAL'
2367 ! include 'COMMON.CHAIN'
2368 ! include 'COMMON.DERIV'
2369 ! include 'COMMON.INTERACT'
2370 ! include 'COMMON.CONTACTS'
2371 ! include 'COMMON.TORSION'
2372 ! include 'COMMON.VECTORS'
2373 ! include 'COMMON.FFIELD'
2374 real(kind=8),dimension(3) :: ggg
2375 !d write(iout,*) 'In EELEC_soft_sphere'
2377 integer :: i,j,k,num_conti,iteli,itelj
2378 real(kind=8) :: ees,evdw1,eel_loc,eello_turn3,eello_turn4
2379 real(kind=8) :: dxi,dyi,dzi,xmedi,ymedi,zmedi,r0ij,r0ijsq
2380 real(kind=8) :: dxj,dyj,dzj,xj,yj,zj,rij,evdw1ij,fac
2388 do i=iatel_s,iatel_e
2389 if (itype(i,1).eq.ntyp1 .or. itype(i+1,1).eq.ntyp1) cycle
2393 xmedi=c(1,i)+0.5d0*dxi
2394 ymedi=c(2,i)+0.5d0*dyi
2395 zmedi=c(3,i)+0.5d0*dzi
2396 call to_box(xmedi,ymedi,zmedi)
2398 ! write (iout,*) 'i',i,' ielstart',ielstart(i),' ielend',ielend(i)
2399 do j=ielstart(i),ielend(i)
2400 if (itype(j,1).eq.ntyp1 .or. itype(j+1,1).eq.ntyp1) cycle
2404 if (j.eq.i+2 .and. itelj.eq.2) iteli=2
2405 r0ij=rpp(iteli,itelj)
2410 xj=c(1,j)+0.5D0*dxj-xmedi
2411 yj=c(2,j)+0.5D0*dyj-ymedi
2412 zj=c(3,j)+0.5D0*dzj-zmedi
2413 call to_box(xj,yj,zj)
2414 xj=boxshift(xj-xmedi,boxxsize)
2415 yj=boxshift(yj-ymedi,boxysize)
2416 zj=boxshift(zj-zmedi,boxzsize)
2417 rij=xj*xj+yj*yj+zj*zj
2418 if (rij.lt.r0ijsq) then
2419 evdw1ij=0.25d0*(rij-r0ijsq)**2
2427 ! Calculate contributions to the Cartesian gradient.
2433 gvdwpp(k,i)=gvdwpp(k,i)-ggg(k)
2434 gvdwpp(k,j)=gvdwpp(k,j)+ggg(k)
2437 ! Loop over residues i+1 thru j-1.
2441 !grad gelc(l,k)=gelc(l,k)+ggg(l)
2446 !grad do i=nnt,nct-1
2448 !grad gelc(k,i)=gelc(k,i)+0.5d0*gelc(k,i)
2450 !grad do j=i+1,nct-1
2452 !grad gelc(k,i)=gelc(k,i)+gelc(k,j)
2457 end subroutine eelec_soft_sphere
2458 !-----------------------------------------------------------------------------
2459 subroutine vec_and_deriv
2460 ! implicit real*8 (a-h,o-z)
2461 ! include 'DIMENSIONS'
2465 ! include 'COMMON.IOUNITS'
2466 ! include 'COMMON.GEO'
2467 ! include 'COMMON.VAR'
2468 ! include 'COMMON.LOCAL'
2469 ! include 'COMMON.CHAIN'
2470 ! include 'COMMON.VECTORS'
2471 ! include 'COMMON.SETUP'
2472 ! include 'COMMON.TIME1'
2473 real(kind=8),dimension(3,3,2) :: uyder,uzder
2474 real(kind=8),dimension(2) :: vbld_inv_temp
2475 ! Compute the local reference systems. For reference system (i), the
2476 ! X-axis points from CA(i) to CA(i+1), the Y axis is in the
2477 ! CA(i)-CA(i+1)-CA(i+2) plane, and the Z axis is perpendicular to this plane.
2480 real(kind=8) :: facy,fac,costh
2483 do i=ivec_start,ivec_end
2487 if (i.eq.nres-1) then
2488 ! Case of the last full residue
2489 ! Compute the Z-axis
2490 call vecpr(dc_norm(1,i),dc_norm(1,i-1),uz(1,i))
2491 costh=dcos(pi-theta(nres))
2492 fac=1.0d0/dsqrt(1.0d0-costh*costh)
2496 ! Compute the derivatives of uz
2498 uzder(2,1,1)=-dc_norm(3,i-1)
2499 uzder(3,1,1)= dc_norm(2,i-1)
2500 uzder(1,2,1)= dc_norm(3,i-1)
2502 uzder(3,2,1)=-dc_norm(1,i-1)
2503 uzder(1,3,1)=-dc_norm(2,i-1)
2504 uzder(2,3,1)= dc_norm(1,i-1)
2507 uzder(2,1,2)= dc_norm(3,i)
2508 uzder(3,1,2)=-dc_norm(2,i)
2509 uzder(1,2,2)=-dc_norm(3,i)
2511 uzder(3,2,2)= dc_norm(1,i)
2512 uzder(1,3,2)= dc_norm(2,i)
2513 uzder(2,3,2)=-dc_norm(1,i)
2515 ! Compute the Y-axis
2518 uy(k,i)=fac*(dc_norm(k,i-1)-costh*dc_norm(k,i))
2520 ! Compute the derivatives of uy
2523 uyder(k,j,1)=2*dc_norm(k,i-1)*dc_norm(j,i) &
2524 -dc_norm(k,i)*dc_norm(j,i-1)
2525 uyder(k,j,2)=-dc_norm(j,i)*dc_norm(k,i)
2527 uyder(j,j,1)=uyder(j,j,1)-costh
2528 uyder(j,j,2)=1.0d0+uyder(j,j,2)
2533 uygrad(l,k,j,i)=uyder(l,k,j)
2534 uzgrad(l,k,j,i)=uzder(l,k,j)
2538 call unormderiv(uy(1,i),uyder(1,1,1),facy,uygrad(1,1,1,i))
2539 call unormderiv(uy(1,i),uyder(1,1,2),facy,uygrad(1,1,2,i))
2540 call unormderiv(uz(1,i),uzder(1,1,1),fac,uzgrad(1,1,1,i))
2541 call unormderiv(uz(1,i),uzder(1,1,2),fac,uzgrad(1,1,2,i))
2544 ! Compute the Z-axis
2545 call vecpr(dc_norm(1,i),dc_norm(1,i+1),uz(1,i))
2546 costh=dcos(pi-theta(i+2))
2547 fac=1.0d0/dsqrt(1.0d0-costh*costh)
2551 ! Compute the derivatives of uz
2553 uzder(2,1,1)=-dc_norm(3,i+1)
2554 uzder(3,1,1)= dc_norm(2,i+1)
2555 uzder(1,2,1)= dc_norm(3,i+1)
2557 uzder(3,2,1)=-dc_norm(1,i+1)
2558 uzder(1,3,1)=-dc_norm(2,i+1)
2559 uzder(2,3,1)= dc_norm(1,i+1)
2562 uzder(2,1,2)= dc_norm(3,i)
2563 uzder(3,1,2)=-dc_norm(2,i)
2564 uzder(1,2,2)=-dc_norm(3,i)
2566 uzder(3,2,2)= dc_norm(1,i)
2567 uzder(1,3,2)= dc_norm(2,i)
2568 uzder(2,3,2)=-dc_norm(1,i)
2570 ! Compute the Y-axis
2573 uy(k,i)=facy*(dc_norm(k,i+1)-costh*dc_norm(k,i))
2575 ! Compute the derivatives of uy
2578 uyder(k,j,1)=2*dc_norm(k,i+1)*dc_norm(j,i) &
2579 -dc_norm(k,i)*dc_norm(j,i+1)
2580 uyder(k,j,2)=-dc_norm(j,i)*dc_norm(k,i)
2582 uyder(j,j,1)=uyder(j,j,1)-costh
2583 uyder(j,j,2)=1.0d0+uyder(j,j,2)
2588 uygrad(l,k,j,i)=uyder(l,k,j)
2589 uzgrad(l,k,j,i)=uzder(l,k,j)
2593 call unormderiv(uy(1,i),uyder(1,1,1),facy,uygrad(1,1,1,i))
2594 call unormderiv(uy(1,i),uyder(1,1,2),facy,uygrad(1,1,2,i))
2595 call unormderiv(uz(1,i),uzder(1,1,1),fac,uzgrad(1,1,1,i))
2596 call unormderiv(uz(1,i),uzder(1,1,2),fac,uzgrad(1,1,2,i))
2600 vbld_inv_temp(1)=vbld_inv(i+1)
2601 if (i.lt.nres-1) then
2602 vbld_inv_temp(2)=vbld_inv(i+2)
2604 vbld_inv_temp(2)=vbld_inv(i)
2609 uygrad(l,k,j,i)=vbld_inv_temp(j)*uygrad(l,k,j,i)
2610 uzgrad(l,k,j,i)=vbld_inv_temp(j)*uzgrad(l,k,j,i)
2615 #if defined(PARVEC) && defined(MPI)
2616 if (nfgtasks1.gt.1) then
2618 ! print *,"Processor",fg_rank1,kolor1," ivec_start",ivec_start,
2619 ! & " ivec_displ",(ivec_displ(i),i=0,nfgtasks1-1),
2620 ! & " ivec_count",(ivec_count(i),i=0,nfgtasks1-1)
2621 call MPI_Allgatherv(uy(1,ivec_start),ivec_count(fg_rank1),&
2622 MPI_UYZ,uy(1,1),ivec_count(0),ivec_displ(0),MPI_UYZ,&
2624 call MPI_Allgatherv(uz(1,ivec_start),ivec_count(fg_rank1),&
2625 MPI_UYZ,uz(1,1),ivec_count(0),ivec_displ(0),MPI_UYZ,&
2627 call MPI_Allgatherv(uygrad(1,1,1,ivec_start),&
2628 ivec_count(fg_rank1),MPI_UYZGRAD,uygrad(1,1,1,1),ivec_count(0),&
2629 ivec_displ(0),MPI_UYZGRAD,FG_COMM1,IERR)
2630 call MPI_Allgatherv(uzgrad(1,1,1,ivec_start),&
2631 ivec_count(fg_rank1),MPI_UYZGRAD,uzgrad(1,1,1,1),ivec_count(0),&
2632 ivec_displ(0),MPI_UYZGRAD,FG_COMM1,IERR)
2633 time_gather=time_gather+MPI_Wtime()-time00
2635 ! if (fg_rank.eq.0) then
2636 ! write (iout,*) "Arrays UY and UZ"
2638 ! write (iout,'(i5,3f10.5,5x,3f10.5)') i,(uy(k,i),k=1,3),
2644 end subroutine vec_and_deriv
2645 !-----------------------------------------------------------------------------
2646 subroutine check_vecgrad
2647 ! implicit real*8 (a-h,o-z)
2648 ! include 'DIMENSIONS'
2649 ! include 'COMMON.IOUNITS'
2650 ! include 'COMMON.GEO'
2651 ! include 'COMMON.VAR'
2652 ! include 'COMMON.LOCAL'
2653 ! include 'COMMON.CHAIN'
2654 ! include 'COMMON.VECTORS'
2655 real(kind=8),dimension(3,3,2,nres) :: uygradt,uzgradt !(3,3,2,maxres)
2656 real(kind=8),dimension(3,nres) :: uyt,uzt !(3,maxres)
2657 real(kind=8),dimension(3,3,2) :: uygradn,uzgradn
2658 real(kind=8),dimension(3) :: erij
2659 real(kind=8) :: delta=1.0d-7
2665 !rc write(iout,'(2i5,2(3f10.5,5x))') i,1,dc_norm(:,i)
2666 !rc write(iout,'(2i5,2(3f10.5,5x))') i,2,uy(:,i)
2667 !rc write(iout,'(2i5,2(3f10.5,5x)/)')i,3,uz(:,i)
2668 !d write(iout,'(2i5,2(3f10.5,5x))') i,1,
2669 !d & (dc_norm(if90,i),if90=1,3)
2670 !d write(iout,'(2i5,2(3f10.5,5x))') i,2,(uy(if90,i),if90=1,3)
2671 !d write(iout,'(2i5,2(3f10.5,5x)/)')i,3,(uz(if90,i),if90=1,3)
2672 !d write(iout,'(a)')
2678 uygradt(l,k,j,i)=uygrad(l,k,j,i)
2679 uzgradt(l,k,j,i)=uzgrad(l,k,j,i)
2692 !d write (iout,*) 'i=',i
2694 erij(k)=dc_norm(k,i)
2698 dc_norm(k,i)=erij(k)
2700 dc_norm(j,i)=dc_norm(j,i)+delta
2701 ! fac=dsqrt(scalar(dc_norm(1,i),dc_norm(1,i)))
2703 ! dc_norm(k,i)=dc_norm(k,i)/fac
2705 ! write (iout,*) (dc_norm(k,i),k=1,3)
2706 ! write (iout,*) (erij(k),k=1,3)
2709 uygradn(k,j,1)=(uy(k,i)-uyt(k,i))/delta
2710 uygradn(k,j,2)=(uy(k,i-1)-uyt(k,i-1))/delta
2711 uzgradn(k,j,1)=(uz(k,i)-uzt(k,i))/delta
2712 uzgradn(k,j,2)=(uz(k,i-1)-uzt(k,i-1))/delta
2714 ! write (iout,'(i5,3f8.5,3x,3f8.5,5x,3f8.5,3x,3f8.5)')
2715 ! & j,(uzgradt(k,j,1,i),k=1,3),(uzgradn(k,j,1),k=1,3),
2716 ! & (uzgradt(k,j,2,i-1),k=1,3),(uzgradn(k,j,2),k=1,3)
2719 dc_norm(k,i)=erij(k)
2722 !d write (iout,'(i5,3f8.5,3x,3f8.5,5x,3f8.5,3x,3f8.5)')
2723 !d & k,(uygradt(k,l,1,i),l=1,3),(uygradn(k,l,1),l=1,3),
2724 !d & (uygradt(k,l,2,i-1),l=1,3),(uygradn(k,l,2),l=1,3)
2725 !d write (iout,'(i5,3f8.5,3x,3f8.5,5x,3f8.5,3x,3f8.5)')
2726 !d & k,(uzgradt(k,l,1,i),l=1,3),(uzgradn(k,l,1),l=1,3),
2727 !d & (uzgradt(k,l,2,i-1),l=1,3),(uzgradn(k,l,2),l=1,3)
2728 !d write (iout,'(a)')
2732 end subroutine check_vecgrad
2733 !-----------------------------------------------------------------------------
2734 subroutine set_matrices
2735 ! implicit real*8 (a-h,o-z)
2736 ! include 'DIMENSIONS'
2739 ! include "COMMON.SETUP"
2741 integer :: status(MPI_STATUS_SIZE)
2743 ! include 'COMMON.IOUNITS'
2744 ! include 'COMMON.GEO'
2745 ! include 'COMMON.VAR'
2746 ! include 'COMMON.LOCAL'
2747 ! include 'COMMON.CHAIN'
2748 ! include 'COMMON.DERIV'
2749 ! include 'COMMON.INTERACT'
2750 ! include 'COMMON.CONTACTS'
2751 ! include 'COMMON.TORSION'
2752 ! include 'COMMON.VECTORS'
2753 ! include 'COMMON.FFIELD'
2754 real(kind=8) :: auxvec(2),auxmat(2,2)
2755 integer :: i,iti1,iti,k,l
2756 real(kind=8) :: sin1,cos1,sin2,cos2,dwacos2,dwasin2,cost1,sint1,&
2757 sint1sq,sint1cub,sint1cost1,b1k,b2k,aux
2758 ! print *,"in set matrices"
2760 ! Compute the virtual-bond-torsional-angle dependent quantities needed
2761 ! to calculate the el-loc multibody terms of various order.
2766 do i=ivec_start+2,ivec_end+2
2770 if (i.gt. nnt+2 .and. i.lt.nct+2) then
2771 if (itype(i-2,1).eq.0) then
2774 iti = itype2loc(itype(i-2,1))
2779 !c if (i.gt. iatel_s+1 .and. i.lt.iatel_e+4) then
2780 if (i.gt. nnt+1 .and. i.lt.nct+1) then
2781 iti1 = itype2loc(itype(i-1,1))
2785 ! print *,i,itype(i-2,1),iti
2787 cost1=dcos(theta(i-1))
2788 sint1=dsin(theta(i-1))
2790 sint1cub=sint1sq*sint1
2791 sint1cost1=2*sint1*cost1
2792 ! print *,"cost1",cost1,theta(i-1)
2793 !c write (iout,*) "bnew1",i,iti
2794 !c write (iout,*) (bnew1(k,1,iti),k=1,3)
2795 !c write (iout,*) (bnew1(k,2,iti),k=1,3)
2796 !c write (iout,*) "bnew2",i,iti
2797 !c write (iout,*) (bnew2(k,1,iti),k=1,3)
2798 !c write (iout,*) (bnew2(k,2,iti),k=1,3)
2800 ! print *,bnew1(1,k,iti),"bnew1"
2802 b1k=bnew1(1,k,iti)+(bnew1(2,k,iti)+bnew1(3,k,iti)*cost1)*cost1
2804 ! write(*,*) shape(b1)
2805 ! if(.not.allocated(b1)) print *, "WTF?"
2810 gtb1(k,i-2)=cost1*b1k-sint1sq*&
2811 (bnew1(2,k,iti)+2*bnew1(3,k,iti)*cost1)
2812 ! print *,gtb1(k,i-2)
2814 b2k=bnew2(1,k,iti)+(bnew2(2,k,iti)+bnew2(3,k,iti)*cost1)*cost1
2818 gtb2(k,i-2)=cost1*b2k-sint1sq*&
2819 (bnew2(2,k,iti)+2*bnew2(3,k,iti)*cost1)
2820 ! print *,gtb2(k,i-2)
2825 aux=ccnew(1,k,iti)+(ccnew(2,k,iti)+ccnew(3,k,iti)*cost1)*cost1
2826 cc(1,k,i-2)=sint1sq*aux
2827 gtcc(1,k,i-2)=sint1cost1*aux-sint1cub*&
2828 (ccnew(2,k,iti)+2*ccnew(3,k,iti)*cost1)
2829 aux=ddnew(1,k,iti)+(ddnew(2,k,iti)+ddnew(3,k,iti)*cost1)*cost1
2830 dd(1,k,i-2)=sint1sq*aux
2831 gtdd(1,k,i-2)=sint1cost1*aux-sint1cub*&
2832 (ddnew(2,k,iti)+2*ddnew(3,k,iti)*cost1)
2834 ! print *,"after cc"
2835 cc(2,1,i-2)=cc(1,2,i-2)
2836 cc(2,2,i-2)=-cc(1,1,i-2)
2837 gtcc(2,1,i-2)=gtcc(1,2,i-2)
2838 gtcc(2,2,i-2)=-gtcc(1,1,i-2)
2839 dd(2,1,i-2)=dd(1,2,i-2)
2840 dd(2,2,i-2)=-dd(1,1,i-2)
2841 gtdd(2,1,i-2)=gtdd(1,2,i-2)
2842 gtdd(2,2,i-2)=-gtdd(1,1,i-2)
2843 ! print *,"after dd"
2847 aux=eenew(1,l,k,iti)+eenew(2,l,k,iti)*cost1
2848 EE(l,k,i-2)=sint1sq*aux
2849 gtEE(l,k,i-2)=sint1cost1*aux-sint1cub*eenew(2,l,k,iti)
2852 EE(1,1,i-2)=EE(1,1,i-2)+e0new(1,iti)*cost1
2853 EE(1,2,i-2)=EE(1,2,i-2)+e0new(2,iti)+e0new(3,iti)*cost1
2854 EE(2,1,i-2)=EE(2,1,i-2)+e0new(2,iti)*cost1+e0new(3,iti)
2855 EE(2,2,i-2)=EE(2,2,i-2)-e0new(1,iti)
2856 gtEE(1,1,i-2)=gtEE(1,1,i-2)-e0new(1,iti)*sint1
2857 gtEE(1,2,i-2)=gtEE(1,2,i-2)-e0new(3,iti)*sint1
2858 gtEE(2,1,i-2)=gtEE(2,1,i-2)-e0new(2,iti)*sint1
2859 ! print *,"after ee"
2861 !c b1tilde(1,i-2)=b1(1,i-2)
2862 !c b1tilde(2,i-2)=-b1(2,i-2)
2863 !c b2tilde(1,i-2)=b2(1,i-2)
2864 !c b2tilde(2,i-2)=-b2(2,i-2)
2866 write (iout,*) 'i=',i-2,gtb1(2,i-2),gtb1(1,i-2)
2867 write(iout,*) 'b1=',(b1(k,i-2),k=1,2)
2868 write(iout,*) 'b2=',(b2(k,i-2),k=1,2)
2869 write (iout,*) 'theta=', theta(i-1)
2872 if (i.gt. nnt+2 .and. i.lt.nct+2) then
2873 ! write(iout,*) "i,",molnum(i),nloctyp
2874 ! print *, "i,",molnum(i),i,itype(i-2,1)
2875 if (molnum(i).eq.1) then
2876 if (itype(i-2,1).eq.ntyp1) then
2879 iti = itype2loc(itype(i-2,1))
2887 !c write (iout,*) "i",i-1," itype",itype(i-2)," iti",iti
2888 !c if (i.gt. iatel_s+1 .and. i.lt.iatel_e+4) then
2889 if (i.gt. nnt+1 .and. i.lt.nct+1) then
2890 iti1 = itype2loc(itype(i-1,1))
2901 CC(k,l,i-2)=ccold(k,l,iti)
2902 DD(k,l,i-2)=ddold(k,l,iti)
2903 EE(k,l,i-2)=eeold(k,l,iti)
2907 b1tilde(1,i-2)= b1(1,i-2)
2908 b1tilde(2,i-2)=-b1(2,i-2)
2909 b2tilde(1,i-2)= b2(1,i-2)
2910 b2tilde(2,i-2)=-b2(2,i-2)
2912 Ctilde(1,1,i-2)= CC(1,1,i-2)
2913 Ctilde(1,2,i-2)= CC(1,2,i-2)
2914 Ctilde(2,1,i-2)=-CC(2,1,i-2)
2915 Ctilde(2,2,i-2)=-CC(2,2,i-2)
2917 Dtilde(1,1,i-2)= DD(1,1,i-2)
2918 Dtilde(1,2,i-2)= DD(1,2,i-2)
2919 Dtilde(2,1,i-2)=-DD(2,1,i-2)
2920 Dtilde(2,2,i-2)=-DD(2,2,i-2)
2923 do i=ivec_start+2,ivec_end+2
2929 if (i .lt. nres+1) then
2966 if (i .gt. 3 .and. i .lt. nres+1) then
2967 obrot_der(1,i-2)=-sin1
2968 obrot_der(2,i-2)= cos1
2969 Ugder(1,1,i-2)= sin1
2970 Ugder(1,2,i-2)=-cos1
2971 Ugder(2,1,i-2)=-cos1
2972 Ugder(2,2,i-2)=-sin1
2975 obrot2_der(1,i-2)=-dwasin2
2976 obrot2_der(2,i-2)= dwacos2
2977 Ug2der(1,1,i-2)= dwasin2
2978 Ug2der(1,2,i-2)=-dwacos2
2979 Ug2der(2,1,i-2)=-dwacos2
2980 Ug2der(2,2,i-2)=-dwasin2
2982 obrot_der(1,i-2)=0.0d0
2983 obrot_der(2,i-2)=0.0d0
2984 Ugder(1,1,i-2)=0.0d0
2985 Ugder(1,2,i-2)=0.0d0
2986 Ugder(2,1,i-2)=0.0d0
2987 Ugder(2,2,i-2)=0.0d0
2988 obrot2_der(1,i-2)=0.0d0
2989 obrot2_der(2,i-2)=0.0d0
2990 Ug2der(1,1,i-2)=0.0d0
2991 Ug2der(1,2,i-2)=0.0d0
2992 Ug2der(2,1,i-2)=0.0d0
2993 Ug2der(2,2,i-2)=0.0d0
2995 ! if (i.gt. iatel_s+2 .and. i.lt.iatel_e+5) then
2996 if (i.gt. nnt+2 .and. i.lt.nct+2) then
2997 if (itype(i-2,1).eq.0) then
3000 iti = itype2loc(itype(i-2,1))
3005 ! if (i.gt. iatel_s+1 .and. i.lt.iatel_e+4) then
3006 if (i.gt. nnt+1 .and. i.lt.nct+1) then
3007 if (itype(i-1,1).eq.0) then
3010 iti1 = itype2loc(itype(i-1,1))
3015 ! print *,iti,i,"iti",iti1,itype(i-1,1),itype(i-2,1)
3016 !d write (iout,*) '*******i',i,' iti1',iti
3017 ! write (iout,*) 'b1',b1(:,iti)
3018 ! write (iout,*) 'b2',b2(:,i-2)
3019 !d write (iout,*) 'Ug',Ug(:,:,i-2)
3020 ! if (i .gt. iatel_s+2) then
3021 if (i .gt. nnt+2) then
3022 call matvec2(Ug(1,1,i-2),b2(1,i-2),Ub2(1,i-2))
3024 call matvec2(Ug(1,1,i-2),gtb2(1,i-2),gUb2(1,i-2))
3025 !c write (iout,*) Ug(1,1,i-2),gtb2(1,i-2),gUb2(1,i-2),"chuj"
3028 call matmat2(EE(1,1,i-2),Ug(1,1,i-2),EUg(1,1,i-2))
3029 call matmat2(gtEE(1,1,i-2),Ug(1,1,i-2),gtEUg(1,1,i-2))
3030 if (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0) &
3032 call matmat2(CC(1,1,i-2),Ug(1,1,i-2),CUg(1,1,i-2))
3033 call matmat2(DD(1,1,i-2),Ug(1,1,i-2),DUg(1,1,i-2))
3034 call matmat2(Dtilde(1,1,i-2),Ug2(1,1,i-2),DtUg2(1,1,i-2))
3035 call matvec2(Ctilde(1,1,i-1),obrot(1,i-2),Ctobr(1,i-2))
3036 call matvec2(Dtilde(1,1,i-2),obrot2(1,i-2),Dtobr2(1,i-2))
3047 DtUg2(l,k,i-2)=0.0d0
3051 call matvec2(Ugder(1,1,i-2),b2(1,i-2),Ub2der(1,i-2))
3052 call matmat2(EE(1,1,i-2),Ugder(1,1,i-2),EUgder(1,1,i-2))
3054 muder(k,i-2)=Ub2der(k,i-2)
3056 ! if (i.gt. iatel_s+1 .and. i.lt.iatel_e+4) then
3057 if (i.gt. nnt+1 .and. i.lt.nct+1) then
3058 if (itype(i-1,1).eq.0) then
3060 elseif (itype(i-1,1).le.ntyp) then
3061 iti1 = itype2loc(itype(i-1,1))
3069 mu(k,i-2)=Ub2(k,i-2)+b1(k,i-1)
3071 if (energy_dec) write (iout,*) 'Ub2 ',i,Ub2(:,i-2)
3072 if (energy_dec) write (iout,*) 'b1 ',iti1,b1(:,i-1)
3073 if (energy_dec) write (iout,*) 'mu ',i,iti1,mu(:,i-2)
3074 !d write (iout,*) 'mu1',mu1(:,i-2)
3075 !d write (iout,*) 'mu2',mu2(:,i-2)
3076 if (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or.wcorr6.gt.0.0d0) &
3078 call matmat2(CC(1,1,i-1),Ugder(1,1,i-2),CUgder(1,1,i-2))
3079 call matmat2(DD(1,1,i-2),Ugder(1,1,i-2),DUgder(1,1,i-2))
3080 call matmat2(Dtilde(1,1,i-2),Ug2der(1,1,i-2),DtUg2der(1,1,i-2))
3081 call matvec2(Ctilde(1,1,i-1),obrot_der(1,i-2),Ctobrder(1,i-2))
3082 call matvec2(Dtilde(1,1,i-2),obrot2_der(1,i-2),Dtobr2der(1,i-2))
3083 ! Vectors and matrices dependent on a single virtual-bond dihedral.
3084 call matvec2(DD(1,1,i-2),b1tilde(1,i-1),auxvec(1))
3085 call matvec2(Ug2(1,1,i-2),auxvec(1),Ug2Db1t(1,i-2))
3086 call matvec2(Ug2der(1,1,i-2),auxvec(1),Ug2Db1tder(1,i-2))
3087 call matvec2(CC(1,1,i-1),Ub2(1,i-2),CUgb2(1,i-2))
3088 call matvec2(CC(1,1,i-1),Ub2der(1,i-2),CUgb2der(1,i-2))
3089 call matmat2(EUg(1,1,i-2),CC(1,1,iti1),EUgC(1,1,i-2))
3090 call matmat2(EUgder(1,1,i-2),CC(1,1,iti1),EUgCder(1,1,i-2))
3091 call matmat2(EUg(1,1,i-2),DD(1,1,iti1),EUgD(1,1,i-2))
3092 call matmat2(EUgder(1,1,i-2),DD(1,1,iti1),EUgDder(1,1,i-2))
3095 ! Matrices dependent on two consecutive virtual-bond dihedrals.
3096 ! The order of matrices is from left to right.
3097 if (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or.wcorr6.gt.0.0d0) &
3099 ! do i=max0(ivec_start,2),ivec_end
3101 call matmat2(DtUg2(1,1,i-1),EUg(1,1,i),DtUg2EUg(1,1,i))
3102 call matmat2(DtUg2der(1,1,i-1),EUg(1,1,i),DtUg2EUgder(1,1,1,i))
3103 call matmat2(DtUg2(1,1,i-1),EUgder(1,1,i),DtUg2EUgder(1,1,2,i))
3104 call transpose2(DtUg2(1,1,i-1),auxmat(1,1))
3105 call matmat2(auxmat(1,1),EUg(1,1,i),Ug2DtEUg(1,1,i))
3106 call matmat2(auxmat(1,1),EUgder(1,1,i),Ug2DtEUgder(1,1,2,i))
3107 call transpose2(DtUg2der(1,1,i-1),auxmat(1,1))
3108 call matmat2(auxmat(1,1),EUg(1,1,i),Ug2DtEUgder(1,1,1,i))
3111 #if defined(MPI) && defined(PARMAT)
3113 ! if (fg_rank.eq.0) then
3114 write (iout,*) "Arrays UG and UGDER before GATHER"
3116 write (iout,'(i5,4f10.5,5x,4f10.5)') i,&
3117 ((ug(l,k,i),l=1,2),k=1,2),&
3118 ((ugder(l,k,i),l=1,2),k=1,2)
3120 write (iout,*) "Arrays UG2 and UG2DER"
3122 write (iout,'(i5,4f10.5,5x,4f10.5)') i,&
3123 ((ug2(l,k,i),l=1,2),k=1,2),&
3124 ((ug2der(l,k,i),l=1,2),k=1,2)
3126 write (iout,*) "Arrays OBROT OBROT2 OBROTDER and OBROT2DER"
3128 write (iout,'(i5,4f10.5,5x,4f10.5)') i,&
3129 (obrot(k,i),k=1,2),(obrot2(k,i),k=1,2),&
3130 (obrot_der(k,i),k=1,2),(obrot2_der(k,i),k=1,2)
3132 write (iout,*) "Arrays COSTAB SINTAB COSTAB2 and SINTAB2"
3134 write (iout,'(i5,4f10.5,5x,4f10.5)') i,&
3135 costab(i),sintab(i),costab2(i),sintab2(i)
3137 write (iout,*) "Array MUDER"
3139 write (iout,'(i5,2f10.5)') i,muder(1,i),muder(2,i)
3143 if (nfgtasks.gt.1) then
3145 ! write(iout,*)"Processor",fg_rank,kolor," ivec_start",ivec_start,
3146 ! & " ivec_displ",(ivec_displ(i),i=0,nfgtasks-1),
3147 ! & " ivec_count",(ivec_count(i),i=0,nfgtasks-1)
3149 call MPI_Allgatherv(Ub2(1,ivec_start),ivec_count(fg_rank1),&
3150 MPI_MU,Ub2(1,1),ivec_count(0),ivec_displ(0),MPI_MU,&
3152 call MPI_Allgatherv(Ub2der(1,ivec_start),ivec_count(fg_rank1),&
3153 MPI_MU,Ub2der(1,1),ivec_count(0),ivec_displ(0),MPI_MU,&
3155 call MPI_Allgatherv(mu(1,ivec_start),ivec_count(fg_rank1),&
3156 MPI_MU,mu(1,1),ivec_count(0),ivec_displ(0),MPI_MU,&
3158 call MPI_Allgatherv(muder(1,ivec_start),ivec_count(fg_rank1),&
3159 MPI_MU,muder(1,1),ivec_count(0),ivec_displ(0),MPI_MU,&
3161 call MPI_Allgatherv(Eug(1,1,ivec_start),ivec_count(fg_rank1),&
3162 MPI_MAT1,Eug(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,&
3164 call MPI_Allgatherv(Eugder(1,1,ivec_start),ivec_count(fg_rank1),&
3165 MPI_MAT1,Eugder(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,&
3167 call MPI_Allgatherv(costab(ivec_start),ivec_count(fg_rank1),&
3168 MPI_DOUBLE_PRECISION,costab(1),ivec_count(0),ivec_displ(0),&
3169 MPI_DOUBLE_PRECISION,FG_COMM1,IERR)
3170 call MPI_Allgatherv(sintab(ivec_start),ivec_count(fg_rank1),&
3171 MPI_DOUBLE_PRECISION,sintab(1),ivec_count(0),ivec_displ(0),&
3172 MPI_DOUBLE_PRECISION,FG_COMM1,IERR)
3173 call MPI_Allgatherv(costab2(ivec_start),ivec_count(fg_rank1),&
3174 MPI_DOUBLE_PRECISION,costab2(1),ivec_count(0),ivec_displ(0),&
3175 MPI_DOUBLE_PRECISION,FG_COMM1,IERR)
3176 call MPI_Allgatherv(sintab2(ivec_start),ivec_count(fg_rank1),&
3177 MPI_DOUBLE_PRECISION,sintab2(1),ivec_count(0),ivec_displ(0),&
3178 MPI_DOUBLE_PRECISION,FG_COMM1,IERR)
3179 if (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0) &
3181 call MPI_Allgatherv(Ctobr(1,ivec_start),ivec_count(fg_rank1),&
3182 MPI_MU,Ctobr(1,1),ivec_count(0),ivec_displ(0),MPI_MU,&
3184 call MPI_Allgatherv(Ctobrder(1,ivec_start),ivec_count(fg_rank1),&
3185 MPI_MU,Ctobrder(1,1),ivec_count(0),ivec_displ(0),MPI_MU,&
3187 call MPI_Allgatherv(Dtobr2(1,ivec_start),ivec_count(fg_rank1),&
3188 MPI_MU,Dtobr2(1,1),ivec_count(0),ivec_displ(0),MPI_MU,&
3190 call MPI_Allgatherv(Dtobr2der(1,ivec_start),ivec_count(fg_rank1),&
3191 MPI_MU,Dtobr2der(1,1),ivec_count(0),ivec_displ(0),MPI_MU,&
3193 call MPI_Allgatherv(Ug2Db1t(1,ivec_start),ivec_count(fg_rank1),&
3194 MPI_MU,Ug2Db1t(1,1),ivec_count(0),ivec_displ(0),MPI_MU,&
3196 call MPI_Allgatherv(Ug2Db1tder(1,ivec_start),&
3197 ivec_count(fg_rank1),&
3198 MPI_MU,Ug2Db1tder(1,1),ivec_count(0),ivec_displ(0),MPI_MU,&
3200 call MPI_Allgatherv(CUgb2(1,ivec_start),ivec_count(fg_rank1),&
3201 MPI_MU,CUgb2(1,1),ivec_count(0),ivec_displ(0),MPI_MU,&
3203 call MPI_Allgatherv(CUgb2der(1,ivec_start),ivec_count(fg_rank1),&
3204 MPI_MU,CUgb2der(1,1),ivec_count(0),ivec_displ(0),MPI_MU,&
3206 call MPI_Allgatherv(Cug(1,1,ivec_start),ivec_count(fg_rank1),&
3207 MPI_MAT1,Cug(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,&
3209 call MPI_Allgatherv(Cugder(1,1,ivec_start),ivec_count(fg_rank1),&
3210 MPI_MAT1,Cugder(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,&
3212 call MPI_Allgatherv(Dug(1,1,ivec_start),ivec_count(fg_rank1),&
3213 MPI_MAT1,Dug(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,&
3215 call MPI_Allgatherv(Dugder(1,1,ivec_start),ivec_count(fg_rank1),&
3216 MPI_MAT1,Dugder(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,&
3218 call MPI_Allgatherv(Dtug2(1,1,ivec_start),ivec_count(fg_rank1),&
3219 MPI_MAT1,Dtug2(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,&
3221 call MPI_Allgatherv(Dtug2der(1,1,ivec_start),&
3222 ivec_count(fg_rank1),&
3223 MPI_MAT1,Dtug2der(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,&
3225 call MPI_Allgatherv(EugC(1,1,ivec_start),ivec_count(fg_rank1),&
3226 MPI_MAT1,EugC(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,&
3228 call MPI_Allgatherv(EugCder(1,1,ivec_start),ivec_count(fg_rank1),&
3229 MPI_MAT1,EugCder(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,&
3231 call MPI_Allgatherv(EugD(1,1,ivec_start),ivec_count(fg_rank1),&
3232 MPI_MAT1,EugD(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,&
3234 call MPI_Allgatherv(EugDder(1,1,ivec_start),ivec_count(fg_rank1),&
3235 MPI_MAT1,EugDder(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,&
3237 call MPI_Allgatherv(DtUg2EUg(1,1,ivec_start),&
3238 ivec_count(fg_rank1),&
3239 MPI_MAT1,DtUg2EUg(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,&
3241 call MPI_Allgatherv(Ug2DtEUg(1,1,ivec_start),&
3242 ivec_count(fg_rank1),&
3243 MPI_MAT1,Ug2DtEUg(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,&
3245 call MPI_Allgatherv(DtUg2EUgder(1,1,1,ivec_start),&
3246 ivec_count(fg_rank1),&
3247 MPI_MAT2,DtUg2EUgder(1,1,1,1),ivec_count(0),ivec_displ(0),&
3248 MPI_MAT2,FG_COMM1,IERR)
3249 call MPI_Allgatherv(Ug2DtEUgder(1,1,1,ivec_start),&
3250 ivec_count(fg_rank1),&
3251 MPI_MAT2,Ug2DtEUgder(1,1,1,1),ivec_count(0),ivec_displ(0),&
3252 MPI_MAT2,FG_COMM1,IERR)
3255 ! Passes matrix info through the ring
3258 if (irecv.lt.0) irecv=nfgtasks1-1
3261 if (inext.ge.nfgtasks1) inext=0
3263 ! write (iout,*) "isend",isend," irecv",irecv
3265 lensend=lentyp(isend)
3266 lenrecv=lentyp(irecv)
3267 ! write (iout,*) "lensend",lensend," lenrecv",lenrecv
3268 ! call MPI_SENDRECV(ug(1,1,ivec_displ(isend)+1),1,
3269 ! & MPI_ROTAT1(lensend),inext,2200+isend,
3270 ! & ug(1,1,ivec_displ(irecv)+1),1,MPI_ROTAT1(lenrecv),
3271 ! & iprev,2200+irecv,FG_COMM,status,IERR)
3272 ! write (iout,*) "Gather ROTAT1"
3274 ! call MPI_SENDRECV(obrot(1,ivec_displ(isend)+1),1,
3275 ! & MPI_ROTAT2(lensend),inext,3300+isend,
3276 ! & obrot(1,ivec_displ(irecv)+1),1,MPI_ROTAT2(lenrecv),
3277 ! & iprev,3300+irecv,FG_COMM,status,IERR)
3278 ! write (iout,*) "Gather ROTAT2"
3280 call MPI_SENDRECV(costab(ivec_displ(isend)+1),1,&
3281 MPI_ROTAT_OLD(lensend),inext,4400+isend,&
3282 costab(ivec_displ(irecv)+1),1,MPI_ROTAT_OLD(lenrecv),&
3283 iprev,4400+irecv,FG_COMM,status,IERR)
3284 ! write (iout,*) "Gather ROTAT_OLD"
3286 call MPI_SENDRECV(mu(1,ivec_displ(isend)+1),1,&
3287 MPI_PRECOMP11(lensend),inext,5500+isend,&
3288 mu(1,ivec_displ(irecv)+1),1,MPI_PRECOMP11(lenrecv),&
3289 iprev,5500+irecv,FG_COMM,status,IERR)
3290 ! write (iout,*) "Gather PRECOMP11"
3292 call MPI_SENDRECV(Eug(1,1,ivec_displ(isend)+1),1,&
3293 MPI_PRECOMP12(lensend),inext,6600+isend,&
3294 Eug(1,1,ivec_displ(irecv)+1),1,MPI_PRECOMP12(lenrecv),&
3295 iprev,6600+irecv,FG_COMM,status,IERR)
3296 ! write (iout,*) "Gather PRECOMP12"
3298 if (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0) &
3300 call MPI_SENDRECV(ug2db1t(1,ivec_displ(isend)+1),1,&
3301 MPI_ROTAT2(lensend),inext,7700+isend,&
3302 ug2db1t(1,ivec_displ(irecv)+1),1,MPI_ROTAT2(lenrecv),&
3303 iprev,7700+irecv,FG_COMM,status,IERR)
3304 ! write (iout,*) "Gather PRECOMP21"
3306 call MPI_SENDRECV(EUgC(1,1,ivec_displ(isend)+1),1,&
3307 MPI_PRECOMP22(lensend),inext,8800+isend,&
3308 EUgC(1,1,ivec_displ(irecv)+1),1,MPI_PRECOMP22(lenrecv),&
3309 iprev,8800+irecv,FG_COMM,status,IERR)
3310 ! write (iout,*) "Gather PRECOMP22"
3312 call MPI_SENDRECV(Ug2DtEUgder(1,1,1,ivec_displ(isend)+1),1,&
3313 MPI_PRECOMP23(lensend),inext,9900+isend,&
3314 Ug2DtEUgder(1,1,1,ivec_displ(irecv)+1),1,&
3315 MPI_PRECOMP23(lenrecv),&
3316 iprev,9900+irecv,FG_COMM,status,IERR)
3317 ! write (iout,*) "Gather PRECOMP23"
3322 if (irecv.lt.0) irecv=nfgtasks1-1
3325 time_gather=time_gather+MPI_Wtime()-time00
3328 ! if (fg_rank.eq.0) then
3329 write (iout,*) "Arrays UG and UGDER"
3331 write (iout,'(i5,4f10.5,5x,4f10.5)') i,&
3332 ((ug(l,k,i),l=1,2),k=1,2),&
3333 ((ugder(l,k,i),l=1,2),k=1,2)
3335 write (iout,*) "Arrays UG2 and UG2DER"
3337 write (iout,'(i5,4f10.5,5x,4f10.5)') i,&
3338 ((ug2(l,k,i),l=1,2),k=1,2),&
3339 ((ug2der(l,k,i),l=1,2),k=1,2)
3341 write (iout,*) "Arrays OBROT OBROT2 OBROTDER and OBROT2DER"
3343 write (iout,'(i5,4f10.5,5x,4f10.5)') i,&
3344 (obrot(k,i),k=1,2),(obrot2(k,i),k=1,2),&
3345 (obrot_der(k,i),k=1,2),(obrot2_der(k,i),k=1,2)
3347 write (iout,*) "Arrays COSTAB SINTAB COSTAB2 and SINTAB2"
3349 write (iout,'(i5,4f10.5,5x,4f10.5)') i,&
3350 costab(i),sintab(i),costab2(i),sintab2(i)
3352 write (iout,*) "Array MUDER"
3354 write (iout,'(i5,2f10.5)') i,muder(1,i),muder(2,i)
3360 !d iti = itortyp(itype(i,1))
3363 !d write (iout,'(2f10.5,5x,2f10.5,5x,2f10.5)')
3364 !d & (EE(j,k,iti),k=1,2),(Ug(j,k,i),k=1,2),(EUg(j,k,i),k=1,2)
3368 end subroutine set_matrices
3369 !-----------------------------------------------------------------------------
3370 subroutine eelec(ees,evdw1,eel_loc,eello_turn3,eello_turn4)
3372 ! This subroutine calculates the average interaction energy and its gradient
3373 ! in the virtual-bond vectors between non-adjacent peptide groups, based on
3374 ! the potential described in Liwo et al., Protein Sci., 1993, 2, 1715.
3375 ! The potential depends both on the distance of peptide-group centers and on
3376 ! the orientation of the CA-CA virtual bonds.
3379 ! implicit real*8 (a-h,o-z)
3383 ! include 'DIMENSIONS'
3384 ! include 'COMMON.CONTROL'
3385 ! include 'COMMON.SETUP'
3386 ! include 'COMMON.IOUNITS'
3387 ! include 'COMMON.GEO'
3388 ! include 'COMMON.VAR'
3389 ! include 'COMMON.LOCAL'
3390 ! include 'COMMON.CHAIN'
3391 ! include 'COMMON.DERIV'
3392 ! include 'COMMON.INTERACT'
3393 ! include 'COMMON.CONTACTS'
3394 ! include 'COMMON.TORSION'
3395 ! include 'COMMON.VECTORS'
3396 ! include 'COMMON.FFIELD'
3397 ! include 'COMMON.TIME1'
3398 real(kind=8),dimension(3) :: ggg,gggp,gggm,erij,dcosb,dcosg
3399 real(kind=8),dimension(3,3) :: erder,uryg,urzg,vryg,vrzg
3400 real(kind=8),dimension(2,2) :: acipa !el,a_temp
3401 !el real(kind=8),dimension(3,4) :: agg,aggi,aggi1,aggj,aggj1
3402 real(kind=8),dimension(4) :: muij
3403 !el integer :: num_conti,j1,j2
3404 !el real(kind=8) :: a22,a23,a32,a33,dxi,dyi,dzi,dx_normi,dy_normi,&
3405 !el dz_normi,xmedi,ymedi,zmedi
3407 !el common /locel/ a_temp,agg,aggi,aggi1,aggj,aggj1,a22,a23,a32,a33,&
3408 !el dxi,dyi,dzi,dx_normi,dy_normi,dz_normi,xmedi,ymedi,zmedi,&
3411 ! 4/26/02 - AL scaling factor for 1,4 repulsive VDW interactions
3413 real(kind=8) :: scal_el=1.0d0
3415 real(kind=8) :: scal_el=0.5d0
3418 ! 13-go grudnia roku pamietnego...
3419 real(kind=8),dimension(3,3) :: unmat=reshape((/1.0d0,0.0d0,0.0d0,&
3421 0.0d0,0.0d0,1.0d0/),shape(unmat))
3423 integer :: i,k,j,icont
3424 real(kind=8) :: ees,evdw1,eel_loc,eello_turn3,eello_turn4
3425 real(kind=8) :: fac,t_eelecij,fracinbuf
3428 !d write(iout,*) 'In EELEC'
3429 ! print *,"IN EELEC"
3431 !d write(iout,*) 'Type',i
3432 !d write(iout,*) 'B1',B1(:,i)
3433 !d write(iout,*) 'B2',B2(:,i)
3434 !d write(iout,*) 'CC',CC(:,:,i)
3435 !d write(iout,*) 'DD',DD(:,:,i)
3436 !d write(iout,*) 'EE',EE(:,:,i)
3438 !d call check_vecgrad
3453 if (icheckgrad.eq.1) then
3456 ! dc_norm(1,i)=0.0d0
3457 ! dc_norm(2,i)=0.0d0
3458 ! dc_norm(3,i)=0.0d0
3461 fac=1.0d0/dsqrt(scalar(dc(1,i),dc(1,i)))
3463 dc_norm(k,i)=dc(k,i)*fac
3465 ! write (iout,*) 'i',i,' fac',fac
3468 ! print *,wel_loc,"wel_loc",wcorr4,wcorr5,wcorr6,wturn3,wturn4, &
3470 if (wel_loc.gt.0.0d0 .or. wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 &
3471 .or. wcorr6.gt.0.0d0 .or. wturn3.gt.0.0d0 .or. &
3472 wturn4.gt.0.0d0 .or. wturn6.gt.0.0d0) then
3473 ! call vec_and_deriv
3477 ! print *, "before set matrices"
3479 ! print *, "after set matrices"
3482 time_mat=time_mat+MPI_Wtime()-time01
3485 ! print *, "after set matrices"
3487 !d write (iout,*) 'i=',i
3489 !d write (iout,'(i5,2f10.5)') k,uy(k,i),uz(k,i)
3492 !d write (iout,'(f10.5,2x,3f10.5,2x,3f10.5)')
3493 !d & uz(k,i),(uzgrad(k,l,1,i),l=1,3),(uzgrad(k,l,2,i),l=1,3)
3506 !d print '(a)','Enter EELEC'
3507 !d write (iout,*) 'iatel_s=',iatel_s,' iatel_e=',iatel_e
3508 ! if (.not.allocated(gel_loc_loc)) allocate(gel_loc_loc(nres)) !(maxvar)(maxvar=6*maxres)
3509 ! if (.not.allocated(gcorr_loc)) allocate(gcorr_loc(nres)) !(maxvar)(maxvar=6*maxres)
3511 gel_loc_loc(i)=0.0d0
3516 ! 9/27/08 AL Split the interaction loop to ensure load balancing of turn terms
3518 ! Loop over i,i+2 and i,i+3 pairs of the peptide groups
3522 ! print *,"before iturn3 loop"
3523 do i=iturn3_start,iturn3_end
3524 if (itype(i,1).eq.ntyp1 .or. itype(i+1,1).eq.ntyp1 &
3525 .or. itype(i+2,1).eq.ntyp1 .or. itype(i+3,1).eq.ntyp1) cycle
3529 dx_normi=dc_norm(1,i)
3530 dy_normi=dc_norm(2,i)
3531 dz_normi=dc_norm(3,i)
3532 xmedi=c(1,i)+0.5d0*dxi
3533 ymedi=c(2,i)+0.5d0*dyi
3534 zmedi=c(3,i)+0.5d0*dzi
3535 call to_box(xmedi,ymedi,zmedi)
3536 call lipid_layer(xmedi,ymedi,zmedi,sslipi,ssgradlipi)
3538 call eelecij(i,i+2,ees,evdw1,eel_loc)
3539 if (wturn3.gt.0.0d0) call eturn3(i,eello_turn3)
3540 num_cont_hb(i)=num_conti
3542 do i=iturn4_start,iturn4_end
3543 if (itype(i,1).eq.ntyp1 .or. itype(i+1,1).eq.ntyp1 &
3544 .or. itype(i+3,1).eq.ntyp1 &
3545 .or. itype(i+4,1).eq.ntyp1) cycle
3546 ! print *,"before2",i,i+3, gshieldc_t4(2,i+3),gshieldc_t4(2,i)
3550 dx_normi=dc_norm(1,i)
3551 dy_normi=dc_norm(2,i)
3552 dz_normi=dc_norm(3,i)
3553 xmedi=c(1,i)+0.5d0*dxi
3554 ymedi=c(2,i)+0.5d0*dyi
3555 zmedi=c(3,i)+0.5d0*dzi
3556 call to_box(xmedi,ymedi,zmedi)
3557 call lipid_layer(xmedi,ymedi,zmedi,sslipi,ssgradlipi)
3558 num_conti=num_cont_hb(i)
3559 call eelecij(i,i+3,ees,evdw1,eel_loc)
3560 if (wturn4.gt.0.0d0 .and. itype(i+2,1).ne.ntyp1) &
3561 call eturn4(i,eello_turn4)
3562 ! print *,"before",i,i+3, gshieldc_t4(2,i+3),gshieldc_t4(2,i)
3563 num_cont_hb(i)=num_conti
3566 ! Loop over all pairs of interacting peptide groups except i,i+2 and i,i+3
3568 ! print *,"iatel_s,iatel_e,",iatel_s,iatel_e
3569 ! do i=iatel_s,iatel_e
3571 do icont=g_listpp_start,g_listpp_end
3572 i=newcontlistppi(icont)
3573 j=newcontlistppj(icont)
3574 if (itype(i,1).eq.ntyp1 .or. itype(i+1,1).eq.ntyp1) cycle
3578 dx_normi=dc_norm(1,i)
3579 dy_normi=dc_norm(2,i)
3580 dz_normi=dc_norm(3,i)
3581 xmedi=c(1,i)+0.5d0*dxi
3582 ymedi=c(2,i)+0.5d0*dyi
3583 zmedi=c(3,i)+0.5d0*dzi
3584 call to_box(xmedi,ymedi,zmedi)
3585 call lipid_layer(xmedi,ymedi,zmedi,sslipi,ssgradlipi)
3587 ! write (iout,*) 'i',i,' ielstart',ielstart(i),' ielend',ielend(i)
3588 num_conti=num_cont_hb(i)
3589 ! do j=ielstart(i),ielend(i)
3590 ! write (iout,*) i,j,itype(i,1),itype(j,1)
3591 if (itype(j,1).eq.ntyp1.or. itype(j+1,1).eq.ntyp1) cycle
3592 call eelecij(i,j,ees,evdw1,eel_loc)
3594 num_cont_hb(i)=num_conti
3596 ! write (iout,*) "Number of loop steps in EELEC:",ind
3598 !d write (iout,'(i3,3f10.5,5x,3f10.5)')
3599 !d & i,(gel_loc(k,i),k=1,3),gel_loc_loc(i)
3601 ! 12/7/99 Adam eello_turn3 will be considered as a separate energy term
3602 !cc eel_loc=eel_loc+eello_turn3
3603 !d print *,"Processor",fg_rank," t_eelecij",t_eelecij
3605 end subroutine eelec
3606 !-----------------------------------------------------------------------------
3607 subroutine eelecij(i,j,ees,evdw1,eel_loc)
3610 ! implicit real*8 (a-h,o-z)
3611 ! include 'DIMENSIONS'
3615 ! include 'COMMON.CONTROL'
3616 ! include 'COMMON.IOUNITS'
3617 ! include 'COMMON.GEO'
3618 ! include 'COMMON.VAR'
3619 ! include 'COMMON.LOCAL'
3620 ! include 'COMMON.CHAIN'
3621 ! include 'COMMON.DERIV'
3622 ! include 'COMMON.INTERACT'
3623 ! include 'COMMON.CONTACTS'
3624 ! include 'COMMON.TORSION'
3625 ! include 'COMMON.VECTORS'
3626 ! include 'COMMON.FFIELD'
3627 ! include 'COMMON.TIME1'
3628 real(kind=8),dimension(3) :: ggg,gggp,gggm,erij,dcosb,dcosg,xtemp
3629 real(kind=8),dimension(3,3) :: erder,uryg,urzg,vryg,vrzg
3630 real(kind=8),dimension(2,2) :: acipa !el,a_temp
3631 !el real(kind=8),dimension(3,4) :: agg,aggi,aggi1,aggj,aggj1
3632 real(kind=8),dimension(4) :: muij
3633 real(kind=8) :: geel_loc_ij,geel_loc_ji
3634 real(kind=8) :: xj_safe,yj_safe,zj_safe,xj_temp,yj_temp,zj_temp,&
3635 dist_temp, dist_init,rlocshield,fracinbuf
3636 integer xshift,yshift,zshift,ilist,iresshield
3637 !el integer :: num_conti,j1,j2
3638 !el real(kind=8) :: a22,a23,a32,a33,dxi,dyi,dzi,dx_normi,dy_normi,&
3639 !el dz_normi,xmedi,ymedi,zmedi
3641 !el common /locel/ a_temp,agg,aggi,aggi1,aggj,aggj1,a22,a23,a32,a33,&
3642 !el dxi,dyi,dzi,dx_normi,dy_normi,dz_normi,xmedi,ymedi,zmedi,&
3645 ! 4/26/02 - AL scaling factor for 1,4 repulsive VDW interactions
3647 real(kind=8) :: scal_el=1.0d0
3649 real(kind=8) :: scal_el=0.5d0
3652 ! 13-go grudnia roku pamietnego...
3653 real(kind=8),dimension(3,3) :: unmat=reshape((/1.0d0,0.0d0,0.0d0,&
3655 0.0d0,0.0d0,1.0d0/),shape(unmat))
3656 ! integer :: maxconts=nres/4
3658 integer :: k,i,j,iteli,itelj,kkk,l,kkll,m,isubchap
3659 real(kind=8) :: ael6i,rrmij,rmij,r0ij,fcont,fprimcont,ees0tmp
3660 real(kind=8) :: faclipij2, faclipij
3661 real(kind=8) :: ees,evdw1,eel_loc,aaa,bbb,ael3i
3662 real(kind=8) :: dxj,dyj,dzj,dx_normj,dy_normj,dz_normj,xj,yj,zj,&
3663 rij,r3ij,r6ij,cosa,cosb,cosg,fac,ev1,ev2,fac3,fac4,&
3664 evdwij,el1,el2,eesij,ees0ij,facvdw,facel,fac1,ecosa,&
3665 ecosb,ecosg,ury,urz,vry,vrz,facr,a22der,a23der,a32der,&
3666 a33der,eel_loc_ij,cosa4,wij,cosbg1,cosbg2,ees0pij,&
3667 ees0pij1,ees0mij,ees0mij1,fac3p,ees0mijp,ees0pijp,&
3668 ecosa1,ecosb1,ecosg1,ecosa2,ecosb2,ecosg2,ecosap,ecosbp,&
3669 ecosgp,ecosam,ecosbm,ecosgm,ghalf
3671 ! allocate(a_chuj(2,2,maxconts,nres)) !(2,2,maxconts,maxres)
3672 ! allocate(a_chuj_der(2,2,3,5,maxconts,nres)) !(2,2,3,5,maxconts,maxres)
3674 ! time00=MPI_Wtime()
3675 !d write (iout,*) "eelecij",i,j
3679 if (j.eq.i+2 .and. itelj.eq.2) iteli=2
3680 aaa=app(iteli,itelj)
3681 bbb=bpp(iteli,itelj)
3682 ael6i=ael6(iteli,itelj)
3683 ael3i=ael3(iteli,itelj)
3687 dx_normj=dc_norm(1,j)
3688 dy_normj=dc_norm(2,j)
3689 dz_normj=dc_norm(3,j)
3690 ! xj=c(1,j)+0.5D0*dxj-xmedi
3691 ! yj=c(2,j)+0.5D0*dyj-ymedi
3692 ! zj=c(3,j)+0.5D0*dzj-zmedi
3697 call to_box(xj,yj,zj)
3698 call lipid_layer(xj,yj,zj,sslipj,ssgradlipj)
3699 faclipij=(sslipi+sslipj)/2.0d0*lipscale+1.0d0
3700 faclipij2=(sslipi+sslipj)/2.0d0*lipscale**2+1.0d0
3701 xj=boxshift(xj-xmedi,boxxsize)
3702 yj=boxshift(yj-ymedi,boxysize)
3703 zj=boxshift(zj-zmedi,boxzsize)
3705 rij=xj*xj+yj*yj+zj*zj
3708 !C print *,xmedi,ymedi,zmedi,xj,yj,zj,boxxsize,rij
3709 sss_ele_cut=sscale_ele(rij)
3710 sss_ele_grad=sscagrad_ele(rij)
3712 ! sss_ele_grad=0.0d0
3713 ! print *,sss_ele_cut,sss_ele_grad,&
3714 ! (rij),r_cut_ele,rlamb_ele
3715 if (sss_ele_cut.le.0.0) go to 128
3720 cosa=dx_normi*dx_normj+dy_normi*dy_normj+dz_normi*dz_normj
3721 cosb=(xj*dx_normi+yj*dy_normi+zj*dz_normi)*rmij
3722 cosg=(xj*dx_normj+yj*dy_normj+zj*dz_normj)*rmij
3723 fac=cosa-3.0D0*cosb*cosg
3725 ! 4/26/02 - AL scaling down 1,4 repulsive VDW interactions
3726 if (j.eq.i+2) ev1=scal_el*ev1
3731 el1=fac3*(4.0D0+fac*fac-3.0D0*(cosb*cosb+cosg*cosg))
3734 if (shield_mode.gt.0) then
3735 !C fac_shield(i)=0.4
3736 !C fac_shield(j)=0.6
3737 el1=el1*fac_shield(i)**2*fac_shield(j)**2
3738 el2=el2*fac_shield(i)**2*fac_shield(j)**2
3740 ees=ees+eesij*sss_ele_cut
3741 !C FOR NOW SHIELD IS NOT USED WITH LIPSCALE
3742 !C & *((sslipi+sslipj)/2.0d0*lipscale**2+1.0d0)
3748 *((sslipi+sslipj)/2.0d0*lipscale**2+1.0d0)*sss_ele_cut
3749 !C print *,"TUCC",(sslipi+sslipj)/2.0d0*lipscale**2+1.0d0
3752 ! 12/26/95 - for the evaluation of multi-body H-bonding interactions
3753 ees0ij=4.0D0+fac*fac-3.0D0*(cosb*cosb+cosg*cosg)
3754 ! ees=ees+eesij*sss_ele_cut
3755 evdw1=evdw1+evdwij*sss_ele_cut &
3756 *((sslipi+sslipj)/2.0d0*lipscale**2+1.0d0)
3757 !d write(iout,'(2(2i3,2x),7(1pd12.4)/2(3(1pd12.4),5x)/)')
3758 !d & iteli,i,itelj,j,aaa,bbb,ael6i,ael3i,
3759 !d & 1.0D0/dsqrt(rrmij),evdwij,eesij,
3760 !d & xmedi,ymedi,zmedi,xj,yj,zj
3762 if (energy_dec) then
3763 ! write (iout,'(a6,2i5,0pf7.3,2i5,2e11.3)') &
3764 ! 'evdw1',i,j,evdwij,&
3765 ! iteli,itelj,aaa,evdw1
3766 write (iout,'(a6,2i5,0pf7.3)') 'evdw1',i,j,evdwij
3767 write (iout,'(a6,2i5,0pf7.3)') 'ees',i,j,eesij
3770 ! Calculate contributions to the Cartesian gradient.
3773 facvdw=-6*rrmij*(ev1+evdwij)*sss_ele_cut &
3774 *((sslipi+sslipj)/2.0d0*lipscale**2+1.0d0)
3775 facel=-3*rrmij*(el1+eesij)*sss_ele_cut &
3776 *((sslipi+sslipj)/2.0d0*lipscale**2+1.0d0)
3782 ! Radial derivatives. First process both termini of the fragment (i,j)
3784 ggg(1)=facel*xj+sss_ele_grad*rmij*eesij*xj* &
3785 ((sslipi+sslipj)/2.0d0*lipscale**2+1.0d0)
3786 ggg(2)=facel*yj+sss_ele_grad*rmij*eesij*yj* &
3787 ((sslipi+sslipj)/2.0d0*lipscale**2+1.0d0)
3788 ggg(3)=facel*zj+sss_ele_grad*rmij*eesij*zj* &
3789 ((sslipi+sslipj)/2.0d0*lipscale**2+1.0d0)
3791 if ((fac_shield(i).gt.0).and.(fac_shield(j).gt.0).and. &
3792 (shield_mode.gt.0)) then
3794 do ilist=1,ishield_list(i)
3795 iresshield=shield_list(ilist,i)
3797 rlocshield=grad_shield_side(k,ilist,i)*eesij/fac_shield(i)&
3799 gshieldx(k,iresshield)=gshieldx(k,iresshield)+ &
3801 +grad_shield_loc(k,ilist,i)*eesij/fac_shield(i)*2.0 &
3803 gshieldc(k,iresshield-1)=gshieldc(k,iresshield-1)+rlocshield
3806 do ilist=1,ishield_list(j)
3807 iresshield=shield_list(ilist,j)
3809 rlocshield=grad_shield_side(k,ilist,j)*eesij/fac_shield(j) &
3811 gshieldx(k,iresshield)=gshieldx(k,iresshield)+ &
3813 +grad_shield_loc(k,ilist,j)*eesij/fac_shield(j)*2.0 &
3815 gshieldc(k,iresshield-1)=gshieldc(k,iresshield-1)+rlocshield
3819 gshieldc(k,i)=gshieldc(k,i)+ &
3820 grad_shield(k,i)*eesij/fac_shield(i)*2.0 &
3823 gshieldc(k,j)=gshieldc(k,j)+ &
3824 grad_shield(k,j)*eesij/fac_shield(j)*2.0 &
3827 gshieldc(k,i-1)=gshieldc(k,i-1)+ &
3828 grad_shield(k,i)*eesij/fac_shield(i)*2.0 &
3831 gshieldc(k,j-1)=gshieldc(k,j-1)+ &
3832 grad_shield(k,j)*eesij/fac_shield(j)*2.0 &
3840 ! ghalf=0.5D0*ggg(k)
3841 ! gelc(k,i)=gelc(k,i)+ghalf
3842 ! gelc(k,j)=gelc(k,j)+ghalf
3844 ! 9/28/08 AL Gradient compotents will be summed only at the end
3846 gelc_long(k,j)=gelc_long(k,j)+ggg(k)
3847 gelc_long(k,i)=gelc_long(k,i)-ggg(k)
3849 gelc_long(3,j)=gelc_long(3,j)+ &
3850 ssgradlipj*eesij/2.0d0*lipscale**2&
3853 gelc_long(3,i)=gelc_long(3,i)+ &
3854 ssgradlipi*eesij/2.0d0*lipscale**2&
3859 ! Loop over residues i+1 thru j-1.
3863 !grad gelc(l,k)=gelc(l,k)+ggg(l)
3866 ggg(1)=facvdw*xj+sss_ele_grad*rmij*evdwij*xj &
3867 *((sslipi+sslipj)/2.0d0*lipscale**2+1.0d0)
3868 ggg(2)=facvdw*yj+sss_ele_grad*rmij*evdwij*yj &
3869 *((sslipi+sslipj)/2.0d0*lipscale**2+1.0d0)
3870 ggg(3)=facvdw*zj+sss_ele_grad*rmij*evdwij*zj &
3871 *((sslipi+sslipj)/2.0d0*lipscale**2+1.0d0)
3874 ! ghalf=0.5D0*ggg(k)
3875 ! gvdwpp(k,i)=gvdwpp(k,i)+ghalf
3876 ! gvdwpp(k,j)=gvdwpp(k,j)+ghalf
3878 ! 9/28/08 AL Gradient compotents will be summed only at the end
3880 gvdwpp(k,j)=gvdwpp(k,j)+ggg(k)
3881 gvdwpp(k,i)=gvdwpp(k,i)-ggg(k)
3884 !C Lipidic part for scaling weight
3885 gvdwpp(3,j)=gvdwpp(3,j)+ &
3886 sss_ele_cut*ssgradlipj*evdwij/2.0d0*lipscale**2
3887 gvdwpp(3,i)=gvdwpp(3,i)+ &
3888 sss_ele_cut*ssgradlipi*evdwij/2.0d0*lipscale**2
3889 !! Loop over residues i+1 thru j-1.
3893 !grad gvdwpp(l,k)=gvdwpp(l,k)+ggg(l)
3897 facvdw=(ev1+evdwij)*sss_ele_cut &
3898 *((sslipi+sslipj)/2.0d0*lipscale**2+1.0d0)
3900 facel=(el1+eesij)*sss_ele_cut
3902 fac=-3*rrmij*(facvdw+facvdw+facel)
3907 ! Radial derivatives. First process both termini of the fragment (i,j)
3909 ggg(1)=fac*xj+sss_ele_grad*rmij*(eesij+evdwij)*xj
3910 ggg(2)=fac*yj+sss_ele_grad*rmij*(eesij+evdwij)*yj
3911 ggg(3)=fac*zj+sss_ele_grad*rmij*(eesij+evdwij)*zj
3913 ! ghalf=0.5D0*ggg(k)
3914 ! gelc(k,i)=gelc(k,i)+ghalf
3915 ! gelc(k,j)=gelc(k,j)+ghalf
3917 ! 9/28/08 AL Gradient compotents will be summed only at the end
3919 gelc_long(k,j)=gelc(k,j)+ggg(k)
3920 gelc_long(k,i)=gelc(k,i)-ggg(k)
3923 ! Loop over residues i+1 thru j-1.
3927 !grad gelc(l,k)=gelc(l,k)+ggg(l)
3930 ! 9/28/08 AL Gradient compotents will be summed only at the end
3931 ggg(1)=facvdw*xj+sss_ele_grad*rmij*evdwij*xj &
3932 *((sslipi+sslipj)/2.0d0*lipscale**2+1.0d0)
3933 ggg(2)=facvdw*yj+sss_ele_grad*rmij*evdwij*yj &
3934 *((sslipi+sslipj)/2.0d0*lipscale**2+1.0d0)
3935 ggg(3)=facvdw*zj+sss_ele_grad*rmij*evdwij*zj &
3936 *((sslipi+sslipj)/2.0d0*lipscale**2+1.0d0)
3939 gvdwpp(k,j)=gvdwpp(k,j)+ggg(k)
3940 gvdwpp(k,i)=gvdwpp(k,i)-ggg(k)
3942 gvdwpp(3,j)=gvdwpp(3,j)+ &
3943 sss_ele_cut*ssgradlipj*evdwij/2.0d0*lipscale**2
3944 gvdwpp(3,i)=gvdwpp(3,i)+ &
3945 sss_ele_cut*ssgradlipi*evdwij/2.0d0*lipscale**2
3951 ecosa=2.0D0*fac3*fac1+fac4
3954 ecosb=(fac3*(fac1*cosg+cosb)+cosg*fac4)
3955 ecosg=(fac3*(fac1*cosb+cosg)+cosb*fac4)
3957 dcosb(k)=rmij*(dc_norm(k,i)-erij(k)*cosb)
3958 dcosg(k)=rmij*(dc_norm(k,j)-erij(k)*cosg)
3960 !d print '(2i3,2(3(1pd14.5),3x))',i,j,(dcosb(k),k=1,3),
3961 !d & (dcosg(k),k=1,3)
3963 ggg(k)=(ecosb*dcosb(k)+ecosg*dcosg(k))*sss_ele_cut &
3964 *fac_shield(i)**2*fac_shield(j)**2 &
3965 *((sslipi+sslipj)/2.0d0*lipscale**2+1.0d0)
3969 ! ghalf=0.5D0*ggg(k)
3970 ! gelc(k,i)=gelc(k,i)+ghalf
3971 ! & +(ecosa*(dc_norm(k,j)-cosa*dc_norm(k,i))
3972 ! & + ecosb*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1)
3973 ! gelc(k,j)=gelc(k,j)+ghalf
3974 ! & +(ecosa*(dc_norm(k,i)-cosa*dc_norm(k,j))
3975 ! & + ecosg*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1)
3979 !grad gelc(l,k)=gelc(l,k)+ggg(l)
3983 gelc(k,i)=gelc(k,i) &
3984 +(ecosa*(dc_norm(k,j)-cosa*dc_norm(k,i)) &
3985 + ecosb*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1)&
3987 *fac_shield(i)**2*fac_shield(j)**2 &
3988 *((sslipi+sslipj)/2.0d0*lipscale**2+1.0d0)
3990 gelc(k,j)=gelc(k,j) &
3991 +(ecosa*(dc_norm(k,i)-cosa*dc_norm(k,j)) &
3992 + ecosg*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1)&
3994 *fac_shield(i)**2*fac_shield(j)**2 &
3995 *((sslipi+sslipj)/2.0d0*lipscale**2+1.0d0)
3997 gelc_long(k,j)=gelc_long(k,j)+ggg(k)
3998 gelc_long(k,i)=gelc_long(k,i)-ggg(k)
4001 IF (wel_loc.gt.0.0d0 .or. wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 &
4002 .or. wcorr6.gt.0.0d0 .or. wturn3.gt.0.0d0 &
4003 .or. wturn4.gt.0.0d0 .or. wturn6.gt.0.0d0) THEN
4005 ! 9/25/99 Mixed third-order local-electrostatic terms. The local-interaction
4006 ! energy of a peptide unit is assumed in the form of a second-order
4007 ! Fourier series in the angles lambda1 and lambda2 (see Nishikawa et al.
4008 ! Macromolecules, 1974, 7, 797-806 for definition). This correlation terms
4009 ! are computed for EVERY pair of non-contiguous peptide groups.
4011 if (j.lt.nres-1) then
4022 muij(kkk)=mu(k,i)*mu(l,j)
4024 gmuij1(kkk)=gtb1(k,i+1)*mu(l,j)
4025 !c write(iout,*) 'k=',k,i,gtb1(k,i+1),gtb1(k,i+1)*mu(l,j)
4026 gmuij2(kkk)=gUb2(k,i)*mu(l,j)
4027 gmuji1(kkk)=mu(k,i)*gtb1(l,j+1)
4028 !c write(iout,*) 'l=',l,j,gtb1(l,j+1),gtb1(l,j+1)*mu(k,i)
4029 gmuji2(kkk)=mu(k,i)*gUb2(l,j)
4034 !d write (iout,*) 'EELEC: i',i,' j',j
4035 !d write (iout,*) 'j',j,' j1',j1,' j2',j2
4036 !d write(iout,*) 'muij',muij
4037 ury=scalar(uy(1,i),erij)
4038 urz=scalar(uz(1,i),erij)
4039 vry=scalar(uy(1,j),erij)
4040 vrz=scalar(uz(1,j),erij)
4041 a22=scalar(uy(1,i),uy(1,j))-3*ury*vry
4042 a23=scalar(uy(1,i),uz(1,j))-3*ury*vrz
4043 a32=scalar(uz(1,i),uy(1,j))-3*urz*vry
4044 a33=scalar(uz(1,i),uz(1,j))-3*urz*vrz
4045 fac=dsqrt(-ael6i)*r3ij
4050 !d write (iout,'(4i5,4f10.5)')
4051 !d & i,itortyp(itype(i,1)),j,itortyp(itype(j,1)),a22,a23,a32,a33
4052 !d write (iout,'(6f10.5)') (muij(k),k=1,4),fac,eel_loc_ij
4053 !d write (iout,'(2(3f10.5,5x)/2(3f10.5,5x))') uy(:,i),uz(:,i),
4054 !d & uy(:,j),uz(:,j)
4055 !d write (iout,'(4f10.5)')
4056 !d & scalar(uy(1,i),uy(1,j)),scalar(uy(1,i),uz(1,j)),
4057 !d & scalar(uz(1,i),uy(1,j)),scalar(uz(1,i),uz(1,j))
4058 !d write (iout,'(4f10.5)') ury,urz,vry,vrz
4059 !d write (iout,'(9f10.5/)')
4060 !d & fac22,a22,fac23,a23,fac32,a32,fac33,a33,eel_loc_ij
4061 ! Derivatives of the elements of A in virtual-bond vectors
4062 call unormderiv(erij(1),unmat(1,1),rmij,erder(1,1))
4064 uryg(k,1)=scalar(erder(1,k),uy(1,i))
4065 uryg(k,2)=scalar(uygrad(1,k,1,i),erij(1))
4066 uryg(k,3)=scalar(uygrad(1,k,2,i),erij(1))
4067 urzg(k,1)=scalar(erder(1,k),uz(1,i))
4068 urzg(k,2)=scalar(uzgrad(1,k,1,i),erij(1))
4069 urzg(k,3)=scalar(uzgrad(1,k,2,i),erij(1))
4070 vryg(k,1)=scalar(erder(1,k),uy(1,j))
4071 vryg(k,2)=scalar(uygrad(1,k,1,j),erij(1))
4072 vryg(k,3)=scalar(uygrad(1,k,2,j),erij(1))
4073 vrzg(k,1)=scalar(erder(1,k),uz(1,j))
4074 vrzg(k,2)=scalar(uzgrad(1,k,1,j),erij(1))
4075 vrzg(k,3)=scalar(uzgrad(1,k,2,j),erij(1))
4077 ! Compute radial contributions to the gradient
4095 ! Add the contributions coming from er
4098 agg(k,1)=agg(k,1)+fac3*(uryg(k,1)*vry+vryg(k,1)*ury)
4099 agg(k,2)=agg(k,2)+fac3*(uryg(k,1)*vrz+vrzg(k,1)*ury)
4100 agg(k,3)=agg(k,3)+fac3*(urzg(k,1)*vry+vryg(k,1)*urz)
4101 agg(k,4)=agg(k,4)+fac3*(urzg(k,1)*vrz+vrzg(k,1)*urz)
4104 ! Derivatives in DC(i)
4105 !grad ghalf1=0.5d0*agg(k,1)
4106 !grad ghalf2=0.5d0*agg(k,2)
4107 !grad ghalf3=0.5d0*agg(k,3)
4108 !grad ghalf4=0.5d0*agg(k,4)
4109 aggi(k,1)=fac*(scalar(uygrad(1,k,1,i),uy(1,j)) &
4110 -3.0d0*uryg(k,2)*vry)!+ghalf1
4111 aggi(k,2)=fac*(scalar(uygrad(1,k,1,i),uz(1,j)) &
4112 -3.0d0*uryg(k,2)*vrz)!+ghalf2
4113 aggi(k,3)=fac*(scalar(uzgrad(1,k,1,i),uy(1,j)) &
4114 -3.0d0*urzg(k,2)*vry)!+ghalf3
4115 aggi(k,4)=fac*(scalar(uzgrad(1,k,1,i),uz(1,j)) &
4116 -3.0d0*urzg(k,2)*vrz)!+ghalf4
4117 ! Derivatives in DC(i+1)
4118 aggi1(k,1)=fac*(scalar(uygrad(1,k,2,i),uy(1,j)) &
4119 -3.0d0*uryg(k,3)*vry)!+agg(k,1)
4120 aggi1(k,2)=fac*(scalar(uygrad(1,k,2,i),uz(1,j)) &
4121 -3.0d0*uryg(k,3)*vrz)!+agg(k,2)
4122 aggi1(k,3)=fac*(scalar(uzgrad(1,k,2,i),uy(1,j)) &
4123 -3.0d0*urzg(k,3)*vry)!+agg(k,3)
4124 aggi1(k,4)=fac*(scalar(uzgrad(1,k,2,i),uz(1,j)) &
4125 -3.0d0*urzg(k,3)*vrz)!+agg(k,4)
4126 ! Derivatives in DC(j)
4127 aggj(k,1)=fac*(scalar(uygrad(1,k,1,j),uy(1,i)) &
4128 -3.0d0*vryg(k,2)*ury)!+ghalf1
4129 aggj(k,2)=fac*(scalar(uzgrad(1,k,1,j),uy(1,i)) &
4130 -3.0d0*vrzg(k,2)*ury)!+ghalf2
4131 aggj(k,3)=fac*(scalar(uygrad(1,k,1,j),uz(1,i)) &
4132 -3.0d0*vryg(k,2)*urz)!+ghalf3
4133 aggj(k,4)=fac*(scalar(uzgrad(1,k,1,j),uz(1,i)) &
4134 -3.0d0*vrzg(k,2)*urz)!+ghalf4
4135 ! Derivatives in DC(j+1) or DC(nres-1)
4136 aggj1(k,1)=fac*(scalar(uygrad(1,k,2,j),uy(1,i)) &
4137 -3.0d0*vryg(k,3)*ury)
4138 aggj1(k,2)=fac*(scalar(uzgrad(1,k,2,j),uy(1,i)) &
4139 -3.0d0*vrzg(k,3)*ury)
4140 aggj1(k,3)=fac*(scalar(uygrad(1,k,2,j),uz(1,i)) &
4141 -3.0d0*vryg(k,3)*urz)
4142 aggj1(k,4)=fac*(scalar(uzgrad(1,k,2,j),uz(1,i)) &
4143 -3.0d0*vrzg(k,3)*urz)
4144 !grad if (j.eq.nres-1 .and. i.lt.j-2) then
4146 !grad aggj1(k,l)=aggj1(k,l)+agg(k,l)
4159 aggi(k,l)=-aggi(k,l)
4160 aggi1(k,l)=-aggi1(k,l)
4161 aggj(k,l)=-aggj(k,l)
4162 aggj1(k,l)=-aggj1(k,l)
4165 if (j.lt.nres-1) then
4171 aggi(k,l)=-aggi(k,l)
4172 aggi1(k,l)=-aggi1(k,l)
4173 aggj(k,l)=-aggj(k,l)
4174 aggj1(k,l)=-aggj1(k,l)
4185 aggi(k,l)=-aggi(k,l)
4186 aggi1(k,l)=-aggi1(k,l)
4187 aggj(k,l)=-aggj(k,l)
4188 aggj1(k,l)=-aggj1(k,l)
4193 IF (wel_loc.gt.0.0d0) THEN
4194 ! Contribution to the local-electrostatic energy coming from the i-j pair
4195 eel_loc_ij=a22*muij(1)+a23*muij(2)+a32*muij(3) &
4197 if (shield_mode.eq.0) then
4201 eel_loc_ij=eel_loc_ij &
4202 *fac_shield(i)*fac_shield(j) &
4203 *((sslipi+sslipj)/2.0d0*lipscale+1.0d0)
4204 !C Now derivative over eel_loc
4205 if ((fac_shield(i).gt.0).and.(fac_shield(j).gt.0).and. &
4206 (shield_mode.gt.0)) then
4209 do ilist=1,ishield_list(i)
4210 iresshield=shield_list(ilist,i)
4212 rlocshield=grad_shield_side(k,ilist,i)*eel_loc_ij &
4215 gshieldx_ll(k,iresshield)=gshieldx_ll(k,iresshield)+ &
4217 +grad_shield_loc(k,ilist,i)*eel_loc_ij/fac_shield(i) &
4220 gshieldc_ll(k,iresshield-1)=gshieldc_ll(k,iresshield-1)&
4224 do ilist=1,ishield_list(j)
4225 iresshield=shield_list(ilist,j)
4227 rlocshield=grad_shield_side(k,ilist,j)*eel_loc_ij &
4230 gshieldx_ll(k,iresshield)=gshieldx_ll(k,iresshield)+ &
4232 +grad_shield_loc(k,ilist,j)*eel_loc_ij/fac_shield(j) &
4235 gshieldc_ll(k,iresshield-1)=gshieldc_ll(k,iresshield-1)&
4242 gshieldc_ll(k,i)=gshieldc_ll(k,i)+ &
4243 grad_shield(k,i)*eel_loc_ij/fac_shield(i) &
4245 gshieldc_ll(k,j)=gshieldc_ll(k,j)+ &
4246 grad_shield(k,j)*eel_loc_ij/fac_shield(j) &
4248 gshieldc_ll(k,i-1)=gshieldc_ll(k,i-1)+ &
4249 grad_shield(k,i)*eel_loc_ij/fac_shield(i) &
4251 gshieldc_ll(k,j-1)=gshieldc_ll(k,j-1)+ &
4252 grad_shield(k,j)*eel_loc_ij/fac_shield(j) &
4259 geel_loc_ij=(a22*gmuij1(1)&
4263 *fac_shield(i)*fac_shield(j)&
4265 *((sslipi+sslipj)/2.0d0*lipscale+1.0d0)
4268 !c write(iout,*) "derivative over thatai"
4269 !c write(iout,*) a22*gmuij1(1), a23*gmuij1(2) ,a32*gmuij1(3),
4271 gloc(nphi+i,icg)=gloc(nphi+i,icg)+&
4273 !c write(iout,*) "derivative over thatai-1"
4274 !c write(iout,*) a22*gmuij2(1), a23*gmuij2(2) ,a32*gmuij2(3),
4281 gloc(nphi+i-1,icg)=gloc(nphi+i-1,icg)+&
4282 geel_loc_ij*wel_loc&
4283 *fac_shield(i)*fac_shield(j)&
4285 *((sslipi+sslipj)/2.0d0*lipscale+1.0d0)
4288 !c Derivative over j residue
4289 geel_loc_ji=a22*gmuji1(1)&
4293 !c write(iout,*) "derivative over thataj"
4294 !c write(iout,*) a22*gmuji1(1), a23*gmuji1(2) ,a32*gmuji1(3),
4297 gloc(nphi+j,icg)=gloc(nphi+j,icg)+&
4298 geel_loc_ji*wel_loc&
4299 *fac_shield(i)*fac_shield(j)&
4301 *((sslipi+sslipj)/2.0d0*lipscale+1.0d0)
4309 !c write(iout,*) "derivative over thataj-1"
4310 !c write(iout,*) a22*gmuji2(1), a23*gmuji2(2) ,a32*gmuji2(3),
4312 gloc(nphi+j-1,icg)=gloc(nphi+j-1,icg)+&
4313 geel_loc_ji*wel_loc&
4314 *fac_shield(i)*fac_shield(j)&
4316 *((sslipi+sslipj)/2.0d0*lipscale+1.0d0)
4320 ! write (iout,*) 'i',i,' j',j,' eel_loc_ij',eel_loc_ij
4322 ! if (energy_dec) write (iout,'(a6,2i5,0pf7.3)') &
4323 ! 'eelloc',i,j,eel_loc_ij
4324 if (energy_dec) write (iout,'(a6,2i5,0pf7.3,8f8.3)') &
4325 'eelloc',i,j,eel_loc_ij,a22,muij(1),a23,muij(2),a32,muij(3),a33,muij(4)
4326 ! print *,"EELLOC",i,gel_loc_loc(i-1)
4328 ! if (energy_dec) write (iout,*) "a22",a22," a23",a23," a32",a32," a33",a33
4329 ! if (energy_dec) write (iout,*) "muij",muij
4330 ! write (iout,*) a22,muij(1),a23,muij(2),a32,muij(3)
4332 eel_loc=eel_loc+eel_loc_ij*sss_ele_cut
4333 ! Partial derivatives in virtual-bond dihedral angles gamma
4335 gel_loc_loc(i-1)=gel_loc_loc(i-1)+ &
4336 (a22*muder(1,i)*mu(1,j)+a23*muder(1,i)*mu(2,j) &
4337 +a32*muder(2,i)*mu(1,j)+a33*muder(2,i)*mu(2,j)) &
4339 *fac_shield(i)*fac_shield(j) &
4340 *((sslipi+sslipj)/2.0d0*lipscale+1.0d0)
4342 gel_loc_loc(j-1)=gel_loc_loc(j-1)+ &
4343 (a22*mu(1,i)*muder(1,j)+a23*mu(1,i)*muder(2,j) &
4344 +a32*mu(2,i)*muder(1,j)+a33*mu(2,i)*muder(2,j)) &
4346 *fac_shield(i)*fac_shield(j) &
4347 *((sslipi+sslipj)/2.0d0*lipscale+1.0d0)
4348 ! Derivatives of eello in DC(i+1) thru DC(j-1) or DC(nres-2)
4350 ! ggg(1)=(agg(1,1)*muij(1)+ &
4351 ! agg(1,2)*muij(2)+agg(1,3)*muij(3)+agg(1,4)*muij(4)) &
4353 ! +eel_loc_ij*sss_ele_grad*rmij*xj
4354 ! ggg(2)=(agg(2,1)*muij(1)+ &
4355 ! agg(2,2)*muij(2)+agg(2,3)*muij(3)+agg(2,4)*muij(4)) &
4357 ! +eel_loc_ij*sss_ele_grad*rmij*yj
4358 ! ggg(3)=(agg(3,1)*muij(1)+ &
4359 ! agg(3,2)*muij(2)+agg(3,3)*muij(3)+agg(3,4)*muij(4)) &
4361 ! +eel_loc_ij*sss_ele_grad*rmij*zj
4367 ggg(l)=(agg(l,1)*muij(1)+ &
4368 agg(l,2)*muij(2)+agg(l,3)*muij(3)+agg(l,4)*muij(4))&
4370 *fac_shield(i)*fac_shield(j) &
4371 *((sslipi+sslipj)/2.0d0*lipscale+1.0d0) &
4372 +eel_loc_ij*sss_ele_grad*rmij*xtemp(l)
4375 gel_loc_long(l,j)=gel_loc_long(l,j)+ggg(l)
4376 gel_loc_long(l,i)=gel_loc_long(l,i)-ggg(l)
4377 !grad ghalf=0.5d0*ggg(l)
4378 !grad gel_loc(l,i)=gel_loc(l,i)+ghalf
4379 !grad gel_loc(l,j)=gel_loc(l,j)+ghalf
4381 gel_loc_long(3,j)=gel_loc_long(3,j)+ &
4382 ssgradlipj*eel_loc_ij/2.0d0*lipscale/ &
4383 ((sslipi+sslipj)/2.0d0*lipscale+1.0d0)*sss_ele_cut
4385 gel_loc_long(3,i)=gel_loc_long(3,i)+ &
4386 ssgradlipi*eel_loc_ij/2.0d0*lipscale/ &
4387 ((sslipi+sslipj)/2.0d0*lipscale+1.0d0)*sss_ele_cut
4391 !grad gel_loc(l,k)=gel_loc(l,k)+ggg(l)
4394 ! Remaining derivatives of eello
4396 gel_loc(l,i)=gel_loc(l,i)+(aggi(l,1)*muij(1)+ &
4397 aggi(l,2)*muij(2)+aggi(l,3)*muij(3)+aggi(l,4)*muij(4))&
4399 *fac_shield(i)*fac_shield(j) &
4400 *((sslipi+sslipj)/2.0d0*lipscale+1.0d0)
4402 !+eel_loc_ij*sss_ele_grad*rmij*xtemp(l)
4403 gel_loc(l,i+1)=gel_loc(l,i+1)+(aggi1(l,1)*muij(1)+ &
4404 aggi1(l,2)*muij(2)+aggi1(l,3)*muij(3) &
4405 +aggi1(l,4)*muij(4))&
4407 *fac_shield(i)*fac_shield(j) &
4408 *((sslipi+sslipj)/2.0d0*lipscale+1.0d0)
4410 !+eel_loc_ij*sss_ele_grad*rmij*xtemp(l)
4411 gel_loc(l,j)=gel_loc(l,j)+(aggj(l,1)*muij(1)+ &
4412 aggj(l,2)*muij(2)+aggj(l,3)*muij(3)+aggj(l,4)*muij(4))&
4414 *fac_shield(i)*fac_shield(j) &
4415 *((sslipi+sslipj)/2.0d0*lipscale+1.0d0)
4417 !+eel_loc_ij*sss_ele_grad*rmij*xtemp(l)
4418 gel_loc(l,j1)=gel_loc(l,j1)+(aggj1(l,1)*muij(1)+ &
4419 aggj1(l,2)*muij(2)+aggj1(l,3)*muij(3) &
4420 +aggj1(l,4)*muij(4))&
4422 *fac_shield(i)*fac_shield(j) &
4423 *((sslipi+sslipj)/2.0d0*lipscale+1.0d0)
4425 !+eel_loc_ij*sss_ele_grad*rmij*xtemp(l)
4428 ! Change 12/26/95 to calculate four-body contributions to H-bonding energy
4429 ! if (j.gt.i+1 .and. num_conti.le.maxconts) then
4430 if (wcorr+wcorr4+wcorr5+wcorr6.gt.0.0d0 &
4431 .and. num_conti.le.maxconts) then
4432 ! write (iout,*) i,j," entered corr"
4434 ! Calculate the contact function. The ith column of the array JCONT will
4435 ! contain the numbers of atoms that make contacts with the atom I (of numbers
4436 ! greater than I). The arrays FACONT and GACONT will contain the values of
4437 ! the contact function and its derivative.
4438 ! r0ij=1.02D0*rpp(iteli,itelj)
4439 ! r0ij=1.11D0*rpp(iteli,itelj)
4440 r0ij=2.20D0*rpp(iteli,itelj)
4441 ! r0ij=1.55D0*rpp(iteli,itelj)
4442 call gcont(rij,r0ij,1.0D0,0.2d0*r0ij,fcont,fprimcont)
4443 !elwrite(iout,*) "num_conti",num_conti, "maxconts",maxconts
4444 if (fcont.gt.0.0D0) then
4445 num_conti=num_conti+1
4446 if (num_conti.gt.maxconts) then
4447 !el write (iout,*) "esrgresgdsrgdfsrgdswrgaresfgaerwgae"
4448 !el write (iout,*) "num_conti",num_conti, "maxconts",maxconts
4449 write (iout,*) 'WARNING - max. # of contacts exceeded;',&
4450 ' will skip next contacts for this conf.', num_conti
4452 jcont_hb(num_conti,i)=j
4453 !d write (iout,*) "i",i," j",j," num_conti",num_conti,
4454 !d & " jcont_hb",jcont_hb(num_conti,i)
4455 IF (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or. &
4456 wcorr6.gt.0.0d0 .or. wturn6.gt.0.0d0) THEN
4457 ! 9/30/99 (AL) - store components necessary to evaluate higher-order loc-el
4459 d_cont(num_conti,i)=rij
4460 !d write (2,'(3e15.5)') rij,r0ij+0.2d0*r0ij,rij
4461 ! --- Electrostatic-interaction matrix ---
4462 a_chuj(1,1,num_conti,i)=a22
4463 a_chuj(1,2,num_conti,i)=a23
4464 a_chuj(2,1,num_conti,i)=a32
4465 a_chuj(2,2,num_conti,i)=a33
4466 ! --- Gradient of rij
4468 grij_hb_cont(kkk,num_conti,i)=erij(kkk)
4475 a_chuj_der(k,l,m,1,num_conti,i)=agg(m,kkll)
4476 a_chuj_der(k,l,m,2,num_conti,i)=aggi(m,kkll)
4477 a_chuj_der(k,l,m,3,num_conti,i)=aggi1(m,kkll)
4478 a_chuj_der(k,l,m,4,num_conti,i)=aggj(m,kkll)
4479 a_chuj_der(k,l,m,5,num_conti,i)=aggj1(m,kkll)
4484 IF (wcorr4.eq.0.0d0 .and. wcorr.gt.0.0d0) THEN
4485 ! Calculate contact energies
4487 wij=cosa-3.0D0*cosb*cosg
4490 ! fac3=dsqrt(-ael6i)/r0ij**3
4491 fac3=dsqrt(-ael6i)*r3ij
4492 ! ees0pij=dsqrt(4.0D0+cosa4+wij*wij-3.0D0*cosbg1*cosbg1)
4493 ees0tmp=4.0D0+cosa4+wij*wij-3.0D0*cosbg1*cosbg1
4494 if (ees0tmp.gt.0) then
4495 ees0pij=dsqrt(ees0tmp)
4499 if (shield_mode.eq.0) then
4503 ees0plist(num_conti,i)=j
4505 ! ees0mij=dsqrt(4.0D0-cosa4+wij*wij-3.0D0*cosbg2*cosbg2)
4506 ees0tmp=4.0D0-cosa4+wij*wij-3.0D0*cosbg2*cosbg2
4507 if (ees0tmp.gt.0) then
4508 ees0mij=dsqrt(ees0tmp)
4513 ees0p(num_conti,i)=0.5D0*fac3*(ees0pij+ees0mij) &
4515 *fac_shield(i)*fac_shield(j)
4516 ! *((sslipi+sslipj)/2.0d0*lipscale+1.0d0)
4518 ees0m(num_conti,i)=0.5D0*fac3*(ees0pij-ees0mij) &
4520 *fac_shield(i)*fac_shield(j)
4521 ! *((sslipi+sslipj)/2.0d0*lipscale+1.0d0)
4523 ! Diagnostics. Comment out or remove after debugging!
4524 ! ees0p(num_conti,i)=0.5D0*fac3*ees0pij
4525 ! ees0m(num_conti,i)=0.5D0*fac3*ees0mij
4526 ! ees0m(num_conti,i)=0.0D0
4528 ! write (iout,*) 'i=',i,' j=',j,' rij=',rij,' r0ij=',r0ij,
4529 ! & ' ees0ij=',ees0p(num_conti,i),ees0m(num_conti,i),' fcont=',fcont
4530 ! Angular derivatives of the contact function
4531 ees0pij1=fac3/ees0pij
4532 ees0mij1=fac3/ees0mij
4533 fac3p=-3.0D0*fac3*rrmij
4534 ees0pijp=0.5D0*fac3p*(ees0pij+ees0mij)
4535 ees0mijp=0.5D0*fac3p*(ees0pij-ees0mij)
4537 ecosa1= ees0pij1*( 1.0D0+0.5D0*wij)
4538 ecosb1=-1.5D0*ees0pij1*(wij*cosg+cosbg1)
4539 ecosg1=-1.5D0*ees0pij1*(wij*cosb+cosbg1)
4540 ecosa2= ees0mij1*(-1.0D0+0.5D0*wij)
4541 ecosb2=-1.5D0*ees0mij1*(wij*cosg+cosbg2)
4542 ecosg2=-1.5D0*ees0mij1*(wij*cosb-cosbg2)
4543 ecosap=ecosa1+ecosa2
4544 ecosbp=ecosb1+ecosb2
4545 ecosgp=ecosg1+ecosg2
4546 ecosam=ecosa1-ecosa2
4547 ecosbm=ecosb1-ecosb2
4548 ecosgm=ecosg1-ecosg2
4557 facont_hb(num_conti,i)=fcont
4558 fprimcont=fprimcont/rij
4559 !d facont_hb(num_conti,i)=1.0D0
4560 ! Following line is for diagnostics.
4563 dcosb(k)=rmij*(dc_norm(k,i)-erij(k)*cosb)
4564 dcosg(k)=rmij*(dc_norm(k,j)-erij(k)*cosg)
4567 gggp(k)=ecosbp*dcosb(k)+ecosgp*dcosg(k)
4568 gggm(k)=ecosbm*dcosb(k)+ecosgm*dcosg(k)
4570 gggp(1)=gggp(1)+ees0pijp*xj &
4571 +ees0p(num_conti,i)/sss_ele_cut*rmij*xj*sss_ele_grad
4572 gggp(2)=gggp(2)+ees0pijp*yj &
4573 +ees0p(num_conti,i)/sss_ele_cut*rmij*yj*sss_ele_grad
4574 gggp(3)=gggp(3)+ees0pijp*zj &
4575 +ees0p(num_conti,i)/sss_ele_cut*rmij*zj*sss_ele_grad
4577 gggm(1)=gggm(1)+ees0mijp*xj &
4578 +ees0m(num_conti,i)/sss_ele_cut*rmij*xj*sss_ele_grad
4580 gggm(2)=gggm(2)+ees0mijp*yj &
4581 +ees0m(num_conti,i)/sss_ele_cut*rmij*yj*sss_ele_grad
4583 gggm(3)=gggm(3)+ees0mijp*zj &
4584 +ees0m(num_conti,i)/sss_ele_cut*rmij*zj*sss_ele_grad
4586 ! Derivatives due to the contact function
4587 gacont_hbr(1,num_conti,i)=fprimcont*xj
4588 gacont_hbr(2,num_conti,i)=fprimcont*yj
4589 gacont_hbr(3,num_conti,i)=fprimcont*zj
4592 ! 10/24/08 cgrad and ! comments indicate the parts of the code removed
4593 ! following the change of gradient-summation algorithm.
4595 !grad ghalfp=0.5D0*gggp(k)
4596 !grad ghalfm=0.5D0*gggm(k)
4597 gacontp_hb1(k,num_conti,i)= & !ghalfp+
4598 (ecosap*(dc_norm(k,j)-cosa*dc_norm(k,i)) &
4599 + ecosbp*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1) &
4600 *sss_ele_cut*fac_shield(i)*fac_shield(j) ! &
4601 ! *((sslipi+sslipj)/2.0d0*lipscale+1.0d0)
4604 gacontp_hb2(k,num_conti,i)= & !ghalfp+
4605 (ecosap*(dc_norm(k,i)-cosa*dc_norm(k,j)) &
4606 + ecosgp*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1)&
4607 *sss_ele_cut*fac_shield(i)*fac_shield(j)! &
4608 ! *((sslipi+sslipj)/2.0d0*lipscale+1.0d0)
4611 gacontp_hb3(k,num_conti,i)=gggp(k) &
4612 *sss_ele_cut*fac_shield(i)*fac_shield(j)
4613 ! *((sslipi+sslipj)/2.0d0*lipscale+1.0d0)
4615 gacontm_hb1(k,num_conti,i)= & !ghalfm+
4616 (ecosam*(dc_norm(k,j)-cosa*dc_norm(k,i)) &
4617 + ecosbm*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1) &
4618 *sss_ele_cut*fac_shield(i)*fac_shield(j)
4619 ! *((sslipi+sslipj)/2.0d0*lipscale+1.0d0)
4621 gacontm_hb2(k,num_conti,i)= & !ghalfm+
4622 (ecosam*(dc_norm(k,i)-cosa*dc_norm(k,j)) &
4623 + ecosgm*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1) &
4624 *sss_ele_cut*fac_shield(i)*fac_shield(j)
4625 ! *((sslipi+sslipj)/2.0d0*lipscale+1.0d0)
4627 gacontm_hb3(k,num_conti,i)=gggm(k) &
4628 *sss_ele_cut*fac_shield(i)*fac_shield(j)
4629 ! *((sslipi+sslipj)/2.0d0*lipscale+1.0d0)
4632 ! Diagnostics. Comment out or remove after debugging!
4634 !diag gacontp_hb1(k,num_conti,i)=0.0D0
4635 !diag gacontp_hb2(k,num_conti,i)=0.0D0
4636 !diag gacontp_hb3(k,num_conti,i)=0.0D0
4637 !diag gacontm_hb1(k,num_conti,i)=0.0D0
4638 !diag gacontm_hb2(k,num_conti,i)=0.0D0
4639 !diag gacontm_hb3(k,num_conti,i)=0.0D0
4642 endif ! num_conti.le.maxconts
4645 if (wturn3.gt.0.0d0 .or. wturn4.gt.0.0d0) then
4648 ghalf=0.5d0*agg(l,k)
4649 aggi(l,k)=aggi(l,k)+ghalf
4650 aggi1(l,k)=aggi1(l,k)+agg(l,k)
4651 aggj(l,k)=aggj(l,k)+ghalf
4654 if (j.eq.nres-1 .and. i.lt.j-2) then
4657 aggj1(l,k)=aggj1(l,k)+agg(l,k)
4663 ! t_eelecij=t_eelecij+MPI_Wtime()-time00
4665 end subroutine eelecij
4666 !-----------------------------------------------------------------------------
4667 subroutine eturn3(i,eello_turn3)
4668 ! Third- and fourth-order contributions from turns
4671 ! implicit real*8 (a-h,o-z)
4672 ! include 'DIMENSIONS'
4673 ! include 'COMMON.IOUNITS'
4674 ! include 'COMMON.GEO'
4675 ! include 'COMMON.VAR'
4676 ! include 'COMMON.LOCAL'
4677 ! include 'COMMON.CHAIN'
4678 ! include 'COMMON.DERIV'
4679 ! include 'COMMON.INTERACT'
4680 ! include 'COMMON.CONTACTS'
4681 ! include 'COMMON.TORSION'
4682 ! include 'COMMON.VECTORS'
4683 ! include 'COMMON.FFIELD'
4684 ! include 'COMMON.CONTROL'
4685 real(kind=8),dimension(3) :: ggg
4686 real(kind=8),dimension(2,2) :: auxmat,auxmat1,auxmat2,pizda,&
4687 e1t,e2t,e3t,e1tder,e2tder,e3tder,e1a,ae3,ae3e2,gpizda1,&
4688 gpizda2,auxgmat1,auxgmatt1,auxgmat2,auxgmatt2
4690 real(kind=8),dimension(2) :: auxvec,auxvec1
4691 !el real(kind=8),dimension(3,4) :: agg,aggi,aggi1,aggj,aggj1
4692 real(kind=8),dimension(2,2) :: auxmat3 !el, a_temp
4693 !el integer :: num_conti,j1,j2
4694 !el real(kind=8) :: a22,a23,a32,a33,dxi,dyi,dzi,dx_normi,dy_normi,&
4695 !el dz_normi,xmedi,ymedi,zmedi
4697 !el common /locel/ a_temp,agg,aggi,aggi1,aggj,aggj1,a22,a23,a32,a33,&
4698 !el dxi,dyi,dzi,dx_normi,dy_normi,dz_normi,xmedi,ymedi,zmedi,&
4701 integer :: i,j,l,k,ilist,iresshield
4702 real(kind=8) :: eello_turn3,zj,fracinbuf,eello_t3, rlocshield,xj,yj
4706 ! write (iout,*) "eturn3",i,j,j1,j2
4707 zj=(c(3,j)+c(3,j+1))/2.0d0
4708 call to_box(xj,yj,zj)
4709 call lipid_layer(xj,yj,zj,sslipj,ssgradlipj)
4715 !CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
4717 ! Third-order contributions
4724 !CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
4725 !d call checkint_turn3(i,a_temp,eello_turn3_num)
4726 call matmat2(EUg(1,1,i+1),EUg(1,1,i+2),auxmat(1,1))
4727 call matmat2(gtEUg(1,1,i+1),EUg(1,1,i+2),auxgmat1(1,1))
4728 call matmat2(EUg(1,1,i+1),gtEUg(1,1,i+2),auxgmat2(1,1))
4729 call transpose2(auxmat(1,1),auxmat1(1,1))
4730 call transpose2(auxgmat1(1,1),auxgmatt1(1,1))
4731 call transpose2(auxgmat2(1,1),auxgmatt2(1,1))
4732 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
4733 call matmat2(a_temp(1,1),auxgmatt1(1,1),gpizda1(1,1))
4734 call matmat2(a_temp(1,1),auxgmatt2(1,1),gpizda2(1,1))
4736 if (shield_mode.eq.0) then
4741 eello_turn3=eello_turn3+0.5d0*(pizda(1,1)+pizda(2,2)) &
4742 *fac_shield(i)*fac_shield(j) &
4743 *((sslipi+sslipj)/2.0d0*lipscale+1.0d0)
4745 0.5d0*(pizda(1,1)+pizda(2,2)) &
4746 *fac_shield(i)*fac_shield(j)
4748 if (energy_dec) write (iout,'(a6,2i5,0pf7.3)') &
4749 'eturn3',i,j,0.5d0*(pizda(1,1)+pizda(2,2))
4751 !C Derivatives in theta
4752 gloc(nphi+i,icg)=gloc(nphi+i,icg) &
4753 +0.5d0*(gpizda1(1,1)+gpizda1(2,2))*wturn3&
4754 *fac_shield(i)*fac_shield(j) &
4755 *((sslipi+sslipj)/2.0d0*lipscale+1.0d0)
4757 gloc(nphi+i+1,icg)=gloc(nphi+i+1,icg)&
4758 +0.5d0*(gpizda2(1,1)+gpizda2(2,2))*wturn3&
4759 *fac_shield(i)*fac_shield(j) &
4760 *((sslipi+sslipj)/2.0d0*lipscale+1.0d0)
4767 if ((fac_shield(i).gt.0).and.(fac_shield(j).gt.0).and. &
4768 (shield_mode.gt.0)) then
4771 do ilist=1,ishield_list(i)
4772 iresshield=shield_list(ilist,i)
4774 rlocshield=grad_shield_side(k,ilist,i)*eello_t3/fac_shield(i)
4775 gshieldx_t3(k,iresshield)=gshieldx_t3(k,iresshield)+ &
4777 +grad_shield_loc(k,ilist,i)*eello_t3/fac_shield(i)
4778 gshieldc_t3(k,iresshield-1)=gshieldc_t3(k,iresshield-1) &
4782 do ilist=1,ishield_list(j)
4783 iresshield=shield_list(ilist,j)
4785 rlocshield=grad_shield_side(k,ilist,j)*eello_t3/fac_shield(j)
4786 gshieldx_t3(k,iresshield)=gshieldx_t3(k,iresshield)+ &
4788 +grad_shield_loc(k,ilist,j)*eello_t3/fac_shield(j)
4789 gshieldc_t3(k,iresshield-1)=gshieldc_t3(k,iresshield-1) &
4796 gshieldc_t3(k,i)=gshieldc_t3(k,i)+ &
4797 grad_shield(k,i)*eello_t3/fac_shield(i)
4798 gshieldc_t3(k,j)=gshieldc_t3(k,j)+ &
4799 grad_shield(k,j)*eello_t3/fac_shield(j)
4800 gshieldc_t3(k,i-1)=gshieldc_t3(k,i-1)+ &
4801 grad_shield(k,i)*eello_t3/fac_shield(i)
4802 gshieldc_t3(k,j-1)=gshieldc_t3(k,j-1)+ &
4803 grad_shield(k,j)*eello_t3/fac_shield(j)
4807 !d write (2,*) 'i,',i,' j',j,'eello_turn3',
4808 !d & 0.5d0*(pizda(1,1)+pizda(2,2)),
4809 !d & ' eello_turn3_num',4*eello_turn3_num
4810 ! Derivatives in gamma(i)
4811 call matmat2(EUgder(1,1,i+1),EUg(1,1,i+2),auxmat2(1,1))
4812 call transpose2(auxmat2(1,1),auxmat3(1,1))
4813 call matmat2(a_temp(1,1),auxmat3(1,1),pizda(1,1))
4814 gel_loc_turn3(i)=gel_loc_turn3(i)+0.5d0*(pizda(1,1)+pizda(2,2))&
4815 *fac_shield(i)*fac_shield(j) &
4816 *((sslipi+sslipj)/2.0d0*lipscale+1.0d0)
4817 ! Derivatives in gamma(i+1)
4818 call matmat2(EUg(1,1,i+1),EUgder(1,1,i+2),auxmat2(1,1))
4819 call transpose2(auxmat2(1,1),auxmat3(1,1))
4820 call matmat2(a_temp(1,1),auxmat3(1,1),pizda(1,1))
4821 gel_loc_turn3(i+1)=gel_loc_turn3(i+1) &
4822 +0.5d0*(pizda(1,1)+pizda(2,2)) &
4823 *fac_shield(i)*fac_shield(j) &
4824 *((sslipi+sslipj)/2.0d0*lipscale+1.0d0)
4826 ! Cartesian derivatives
4828 ! ghalf1=0.5d0*agg(l,1)
4829 ! ghalf2=0.5d0*agg(l,2)
4830 ! ghalf3=0.5d0*agg(l,3)
4831 ! ghalf4=0.5d0*agg(l,4)
4832 a_temp(1,1)=aggi(l,1)!+ghalf1
4833 a_temp(1,2)=aggi(l,2)!+ghalf2
4834 a_temp(2,1)=aggi(l,3)!+ghalf3
4835 a_temp(2,2)=aggi(l,4)!+ghalf4
4836 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
4837 gcorr3_turn(l,i)=gcorr3_turn(l,i) &
4838 +0.5d0*(pizda(1,1)+pizda(2,2)) &
4839 *fac_shield(i)*fac_shield(j) &
4840 *((sslipi+sslipj)/2.0d0*lipscale+1.0d0)
4842 a_temp(1,1)=aggi1(l,1)!+agg(l,1)
4843 a_temp(1,2)=aggi1(l,2)!+agg(l,2)
4844 a_temp(2,1)=aggi1(l,3)!+agg(l,3)
4845 a_temp(2,2)=aggi1(l,4)!+agg(l,4)
4846 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
4847 gcorr3_turn(l,i+1)=gcorr3_turn(l,i+1) &
4848 +0.5d0*(pizda(1,1)+pizda(2,2)) &
4849 *fac_shield(i)*fac_shield(j) &
4850 *((sslipi+sslipj)/2.0d0*lipscale+1.0d0)
4852 a_temp(1,1)=aggj(l,1)!+ghalf1
4853 a_temp(1,2)=aggj(l,2)!+ghalf2
4854 a_temp(2,1)=aggj(l,3)!+ghalf3
4855 a_temp(2,2)=aggj(l,4)!+ghalf4
4856 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
4857 gcorr3_turn(l,j)=gcorr3_turn(l,j) &
4858 +0.5d0*(pizda(1,1)+pizda(2,2)) &
4859 *fac_shield(i)*fac_shield(j) &
4860 *((sslipi+sslipj)/2.0d0*lipscale+1.0d0)
4862 a_temp(1,1)=aggj1(l,1)
4863 a_temp(1,2)=aggj1(l,2)
4864 a_temp(2,1)=aggj1(l,3)
4865 a_temp(2,2)=aggj1(l,4)
4866 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
4867 gcorr3_turn(l,j1)=gcorr3_turn(l,j1) &
4868 +0.5d0*(pizda(1,1)+pizda(2,2)) &
4869 *fac_shield(i)*fac_shield(j) &
4870 *((sslipi+sslipj)/2.0d0*lipscale+1.0d0)
4872 gshieldc_t3(3,i)=gshieldc_t3(3,i)+ &
4873 ssgradlipi*eello_t3/4.0d0*lipscale
4874 gshieldc_t3(3,j)=gshieldc_t3(3,j)+ &
4875 ssgradlipj*eello_t3/4.0d0*lipscale
4876 gshieldc_t3(3,i-1)=gshieldc_t3(3,i-1)+ &
4877 ssgradlipi*eello_t3/4.0d0*lipscale
4878 gshieldc_t3(3,j-1)=gshieldc_t3(3,j-1)+ &
4879 ssgradlipj*eello_t3/4.0d0*lipscale
4882 end subroutine eturn3
4883 !-----------------------------------------------------------------------------
4884 subroutine eturn4(i,eello_turn4)
4885 ! Third- and fourth-order contributions from turns
4888 ! implicit real*8 (a-h,o-z)
4889 ! include 'DIMENSIONS'
4890 ! include 'COMMON.IOUNITS'
4891 ! include 'COMMON.GEO'
4892 ! include 'COMMON.VAR'
4893 ! include 'COMMON.LOCAL'
4894 ! include 'COMMON.CHAIN'
4895 ! include 'COMMON.DERIV'
4896 ! include 'COMMON.INTERACT'
4897 ! include 'COMMON.CONTACTS'
4898 ! include 'COMMON.TORSION'
4899 ! include 'COMMON.VECTORS'
4900 ! include 'COMMON.FFIELD'
4901 ! include 'COMMON.CONTROL'
4902 real(kind=8),dimension(3) :: ggg
4903 real(kind=8),dimension(2,2) :: auxmat,auxmat1,auxmat2,pizda,&
4904 e1t,e2t,e3t,e1tder,e2tder,e3tder,e1a,ae3,ae3e2,&
4906 gte1a,gtae3,gtae3e2, ae3gte2,&
4907 gtEpizda1,gtEpizda2,gtEpizda3
4909 real(kind=8),dimension(2) :: auxvec,auxvec1,auxgEvec1,auxgEvec2,&
4912 !el real(kind=8),dimension(3,4) :: agg,aggi,aggi1,aggj,aggj1
4913 real(kind=8),dimension(2,2) :: auxmat3 !el a_temp
4914 !el real(kind=8) :: a22,a23,a32,a33,dxi,dyi,dzi,dx_normi,dy_normi,&
4915 !el dz_normi,xmedi,ymedi,zmedi
4916 !el integer :: num_conti,j1,j2
4917 !el common /locel/ a_temp,agg,aggi,aggi1,aggj,aggj1,a22,a23,a32,a33,&
4918 !el dxi,dyi,dzi,dx_normi,dy_normi,dz_normi,xmedi,ymedi,zmedi,&
4921 integer :: i,j,iti1,iti2,iti3,l,k,ilist,iresshield
4922 real(kind=8) :: eello_turn4,s1,s2,s3,zj,fracinbuf,eello_t4,&
4923 rlocshield,gs23,gs32,gsE13,gs13,gs21,gsE31,gsEE1,gsEE2,gsEE3,xj,yj
4927 ! if (j.ne.20) return
4928 ! print *,i,j,gshieldc_t4(2,j),gshieldc_t4(2,j+1)
4929 !CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
4931 ! Fourth-order contributions
4939 !CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
4940 !d call checkint_turn4(i,a_temp,eello_turn4_num)
4941 ! write (iout,*) "eturn4 i",i," j",j," j1",j1," j2",j2
4942 zj=(c(3,j)+c(3,j+1))/2.0d0
4943 call to_box(xj,yj,zj)
4944 call lipid_layer(xj,yj,zj,sslipj,ssgradlipj)
4954 ! write(iout,*) "iti1",iti1," iti2",iti2," iti3",iti3
4955 call transpose2(EUg(1,1,i+1),e1t(1,1))
4956 call transpose2(Eug(1,1,i+2),e2t(1,1))
4957 call transpose2(Eug(1,1,i+3),e3t(1,1))
4958 !C Ematrix derivative in theta
4959 call transpose2(gtEUg(1,1,i+1),gte1t(1,1))
4960 call transpose2(gtEug(1,1,i+2),gte2t(1,1))
4961 call transpose2(gtEug(1,1,i+3),gte3t(1,1))
4963 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
4964 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
4965 call matmat2(gte1t(1,1),a_temp(1,1),gte1a(1,1))
4966 call matvec2(e1a(1,1),gUb2(1,i+3),auxgvec(1))
4967 !c auxalary matrix of E i+1
4968 call matvec2(gte1a(1,1),Ub2(1,i+3),auxgEvec1(1))
4969 s1=scalar2(b1(1,iti2),auxvec(1))
4970 !c derivative of theta i+2 with constant i+3
4971 gs23=scalar2(gtb1(1,i+2),auxvec(1))
4972 !c derivative of theta i+2 with constant i+2
4973 gs32=scalar2(b1(1,i+2),auxgvec(1))
4974 !c derivative of E matix in theta of i+1
4975 gsE13=scalar2(b1(1,i+2),auxgEvec1(1))
4977 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
4978 call matmat2(a_temp(1,1),gte3t(1,1),gtae3(1,1))
4979 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
4980 !c auxilary matrix auxgvec of Ub2 with constant E matirx
4981 call matvec2(ae3(1,1),gUb2(1,i+2),auxgvec(1))
4982 !c auxilary matrix auxgEvec1 of E matix with Ub2 constant
4983 call matvec2(gtae3(1,1),Ub2(1,i+2),auxgEvec3(1))
4984 s2=scalar2(b1(1,i+1),auxvec(1))
4985 !c derivative of theta i+1 with constant i+3
4986 gs13=scalar2(gtb1(1,i+1),auxvec(1))
4987 !c derivative of theta i+2 with constant i+1
4988 gs21=scalar2(b1(1,i+1),auxgvec(1))
4989 !c derivative of theta i+3 with constant i+1
4990 gsE31=scalar2(b1(1,i+1),auxgEvec3(1))
4992 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
4993 call matmat2(gtae3(1,1),e2t(1,1),gtae3e2(1,1))
4994 !c ae3gte2 is derivative over i+2
4995 call matmat2(ae3(1,1),gte2t(1,1),ae3gte2(1,1))
4997 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
4998 call matmat2(ae3e2(1,1),gte1t(1,1),gtEpizda1(1,1))
5000 call matmat2(ae3gte2(1,1),e1t(1,1),gtEpizda2(1,1))
5002 call matmat2(gtae3e2(1,1),e1t(1,1),gtEpizda3(1,1))
5004 s3=0.5d0*(pizda(1,1)+pizda(2,2))
5005 gsEE1=0.5d0*(gtEpizda1(1,1)+gtEpizda1(2,2))
5006 gsEE2=0.5d0*(gtEpizda2(1,1)+gtEpizda2(2,2))
5007 gsEE3=0.5d0*(gtEpizda3(1,1)+gtEpizda3(2,2))
5008 if (shield_mode.eq.0) then
5013 eello_turn4=eello_turn4-(s1+s2+s3) &
5014 *fac_shield(i)*fac_shield(j) &
5015 *((sslipi+sslipj)/2.0d0*lipscale+1.0d0)
5016 eello_t4=-(s1+s2+s3) &
5017 *fac_shield(i)*fac_shield(j)
5018 !C Now derivative over shield:
5019 if ((fac_shield(i).gt.0).and.(fac_shield(j).gt.0).and. &
5020 (shield_mode.gt.0)) then
5023 do ilist=1,ishield_list(i)
5024 iresshield=shield_list(ilist,i)
5026 rlocshield=grad_shield_side(k,ilist,i)*eello_t4/fac_shield(i)
5027 ! print *,"rlocshield",rlocshield,grad_shield_side(k,ilist,i),iresshield
5028 gshieldx_t4(k,iresshield)=gshieldx_t4(k,iresshield)+ &
5030 +grad_shield_loc(k,ilist,i)*eello_t4/fac_shield(i)
5031 gshieldc_t4(k,iresshield-1)=gshieldc_t4(k,iresshield-1) &
5035 do ilist=1,ishield_list(j)
5036 iresshield=shield_list(ilist,j)
5038 ! print *,"rlocshieldj",j,rlocshield,grad_shield_side(k,ilist,j),iresshield
5039 rlocshield=grad_shield_side(k,ilist,j)*eello_t4/fac_shield(j)
5040 gshieldx_t4(k,iresshield)=gshieldx_t4(k,iresshield)+ &
5042 +grad_shield_loc(k,ilist,j)*eello_t4/fac_shield(j)
5043 gshieldc_t4(k,iresshield-1)=gshieldc_t4(k,iresshield-1) &
5045 ! print *,"after", gshieldc_t4(k,iresshield-1),iresshield-1,gshieldc_t4(k,iresshield)
5050 gshieldc_t4(k,i)=gshieldc_t4(k,i)+ &
5051 grad_shield(k,i)*eello_t4/fac_shield(i)
5052 gshieldc_t4(k,j)=gshieldc_t4(k,j)+ &
5053 grad_shield(k,j)*eello_t4/fac_shield(j)
5054 gshieldc_t4(k,i-1)=gshieldc_t4(k,i-1)+ &
5055 grad_shield(k,i)*eello_t4/fac_shield(i)
5056 gshieldc_t4(k,j-1)=gshieldc_t4(k,j-1)+ &
5057 grad_shield(k,j)*eello_t4/fac_shield(j)
5058 ! print *,"gshieldc_t4(k,j+1)",j,gshieldc_t4(k,j+1)
5062 gloc(nphi+i,icg)=gloc(nphi+i,icg)&
5063 -(gs13+gsE13+gsEE1)*wturn4&
5064 *fac_shield(i)*fac_shield(j)
5065 gloc(nphi+i+1,icg)= gloc(nphi+i+1,icg)&
5066 -(gs23+gs21+gsEE2)*wturn4&
5067 *fac_shield(i)*fac_shield(j)
5069 gloc(nphi+i+2,icg)= gloc(nphi+i+2,icg)&
5070 -(gs32+gsE31+gsEE3)*wturn4&
5071 *fac_shield(i)*fac_shield(j)
5073 !c gloc(nphi+i+1,icg)=gloc(nphi+i+1,icg)-
5076 if (energy_dec) write (iout,'(a6,2i5,0pf7.3)') &
5077 'eturn4',i,j,-(s1+s2+s3)
5078 !d write (2,*) 'i,',i,' j',j,'eello_turn4',-(s1+s2+s3),
5079 !d & ' eello_turn4_num',8*eello_turn4_num
5080 ! Derivatives in gamma(i)
5081 call transpose2(EUgder(1,1,i+1),e1tder(1,1))
5082 call matmat2(e1tder(1,1),a_temp(1,1),auxmat(1,1))
5083 call matvec2(auxmat(1,1),Ub2(1,i+3),auxvec(1))
5084 s1=scalar2(b1(1,i+1),auxvec(1))
5085 call matmat2(ae3e2(1,1),e1tder(1,1),pizda(1,1))
5086 s3=0.5d0*(pizda(1,1)+pizda(2,2))
5087 gel_loc_turn4(i)=gel_loc_turn4(i)-(s1+s3) &
5088 *fac_shield(i)*fac_shield(j) &
5089 *((sslipi+sslipj)/2.0d0*lipscale+1.0d0)
5091 ! Derivatives in gamma(i+1)
5092 call transpose2(EUgder(1,1,i+2),e2tder(1,1))
5093 call matvec2(ae3(1,1),Ub2der(1,i+2),auxvec(1))
5094 s2=scalar2(b1(1,iti1),auxvec(1))
5095 call matmat2(ae3(1,1),e2tder(1,1),auxmat(1,1))
5096 call matmat2(auxmat(1,1),e1t(1,1),pizda(1,1))
5097 s3=0.5d0*(pizda(1,1)+pizda(2,2))
5098 gel_loc_turn4(i+1)=gel_loc_turn4(i+1)-(s2+s3) &
5099 *fac_shield(i)*fac_shield(j) &
5100 *((sslipi+sslipj)/2.0d0*lipscale+1.0d0)
5102 ! Derivatives in gamma(i+2)
5103 call transpose2(EUgder(1,1,i+3),e3tder(1,1))
5104 call matvec2(e1a(1,1),Ub2der(1,i+3),auxvec(1))
5105 s1=scalar2(b1(1,iti2),auxvec(1))
5106 call matmat2(a_temp(1,1),e3tder(1,1),auxmat(1,1))
5107 call matvec2(auxmat(1,1),Ub2(1,i+2),auxvec(1))
5108 s2=scalar2(b1(1,iti1),auxvec(1))
5109 call matmat2(auxmat(1,1),e2t(1,1),auxmat3(1,1))
5110 call matmat2(auxmat3(1,1),e1t(1,1),pizda(1,1))
5111 s3=0.5d0*(pizda(1,1)+pizda(2,2))
5112 gel_loc_turn4(i+2)=gel_loc_turn4(i+2)-(s1+s2+s3) &
5113 *fac_shield(i)*fac_shield(j) &
5114 *((sslipi+sslipj)/2.0d0*lipscale+1.0d0)
5116 ! Cartesian derivatives
5117 ! Derivatives of this turn contributions in DC(i+2)
5118 if (j.lt.nres-1) then
5120 a_temp(1,1)=agg(l,1)
5121 a_temp(1,2)=agg(l,2)
5122 a_temp(2,1)=agg(l,3)
5123 a_temp(2,2)=agg(l,4)
5124 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
5125 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
5126 s1=scalar2(b1(1,iti2),auxvec(1))
5127 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
5128 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
5129 s2=scalar2(b1(1,iti1),auxvec(1))
5130 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
5131 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
5132 s3=0.5d0*(pizda(1,1)+pizda(2,2))
5134 gcorr4_turn(l,i+2)=gcorr4_turn(l,i+2)-(s1+s2+s3)&
5135 *fac_shield(i)*fac_shield(j) &
5136 *((sslipi+sslipj)/2.0d0*lipscale+1.0d0)
5140 ! Remaining derivatives of this turn contribution
5142 a_temp(1,1)=aggi(l,1)
5143 a_temp(1,2)=aggi(l,2)
5144 a_temp(2,1)=aggi(l,3)
5145 a_temp(2,2)=aggi(l,4)
5146 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
5147 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
5148 s1=scalar2(b1(1,iti2),auxvec(1))
5149 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
5150 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
5151 s2=scalar2(b1(1,iti1),auxvec(1))
5152 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
5153 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
5154 s3=0.5d0*(pizda(1,1)+pizda(2,2))
5155 gcorr4_turn(l,i)=gcorr4_turn(l,i)-(s1+s2+s3) &
5156 *fac_shield(i)*fac_shield(j) &
5157 *((sslipi+sslipj)/2.0d0*lipscale+1.0d0)
5160 a_temp(1,1)=aggi1(l,1)
5161 a_temp(1,2)=aggi1(l,2)
5162 a_temp(2,1)=aggi1(l,3)
5163 a_temp(2,2)=aggi1(l,4)
5164 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
5165 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
5166 s1=scalar2(b1(1,iti2),auxvec(1))
5167 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
5168 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
5169 s2=scalar2(b1(1,iti1),auxvec(1))
5170 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
5171 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
5172 s3=0.5d0*(pizda(1,1)+pizda(2,2))
5173 gcorr4_turn(l,i+1)=gcorr4_turn(l,i+1)-(s1+s2+s3) &
5174 *fac_shield(i)*fac_shield(j) &
5175 *((sslipi+sslipj)/2.0d0*lipscale+1.0d0)
5178 a_temp(1,1)=aggj(l,1)
5179 a_temp(1,2)=aggj(l,2)
5180 a_temp(2,1)=aggj(l,3)
5181 a_temp(2,2)=aggj(l,4)
5182 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
5183 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
5184 s1=scalar2(b1(1,iti2),auxvec(1))
5185 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
5186 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
5187 s2=scalar2(b1(1,iti1),auxvec(1))
5188 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
5189 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
5190 s3=0.5d0*(pizda(1,1)+pizda(2,2))
5191 ! if (j.lt.nres-1) then
5192 gcorr4_turn(l,j)=gcorr4_turn(l,j)-(s1+s2+s3) &
5193 *fac_shield(i)*fac_shield(j) &
5194 *((sslipi+sslipj)/2.0d0*lipscale+1.0d0)
5197 a_temp(1,1)=aggj1(l,1)
5198 a_temp(1,2)=aggj1(l,2)
5199 a_temp(2,1)=aggj1(l,3)
5200 a_temp(2,2)=aggj1(l,4)
5201 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
5202 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
5203 s1=scalar2(b1(1,iti2),auxvec(1))
5204 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
5205 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
5206 s2=scalar2(b1(1,iti1),auxvec(1))
5207 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
5208 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
5209 s3=0.5d0*(pizda(1,1)+pizda(2,2))
5210 ! write (iout,*) "s1",s1," s2",s2," s3",s3," s1+s2+s3",s1+s2+s3
5211 ! if (j.lt.nres-1) then
5212 ! print *,"juest before",j1, gcorr4_turn(l,j1)
5213 gcorr4_turn(l,j1)=gcorr4_turn(l,j1)-(s1+s2+s3) &
5214 *fac_shield(i)*fac_shield(j) &
5215 *((sslipi+sslipj)/2.0d0*lipscale+1.0d0)
5216 ! if (shield_mode.gt.0) then
5217 ! print *,"juest after",j1, gcorr4_turn(l,j1),gshieldc_t4(k,j1),gshieldc_loc_t4(k,j1),gel_loc_turn4(i+2)
5219 ! print *,"juest after",j1, gcorr4_turn(l,j1),gel_loc_turn4(i+2)
5223 gshieldc_t4(3,i)=gshieldc_t4(3,i)+ &
5224 ssgradlipi*eello_t4/4.0d0*lipscale
5225 gshieldc_t4(3,j)=gshieldc_t4(3,j)+ &
5226 ssgradlipj*eello_t4/4.0d0*lipscale
5227 gshieldc_t4(3,i-1)=gshieldc_t4(3,i-1)+ &
5228 ssgradlipi*eello_t4/4.0d0*lipscale
5229 gshieldc_t4(3,j-1)=gshieldc_t4(3,j-1)+ &
5230 ssgradlipj*eello_t4/4.0d0*lipscale
5233 end subroutine eturn4
5234 !-----------------------------------------------------------------------------
5235 subroutine unormderiv(u,ugrad,unorm,ungrad)
5236 ! This subroutine computes the derivatives of a normalized vector u, given
5237 ! the derivatives computed without normalization conditions, ugrad. Returns
5240 real(kind=8),dimension(3) :: u,vec
5241 real(kind=8),dimension(3,3) ::ugrad,ungrad
5242 real(kind=8) :: unorm !,scalar
5244 ! write (2,*) 'ugrad',ugrad
5247 vec(i)=scalar(ugrad(1,i),u(1))
5249 ! write (2,*) 'vec',vec
5252 ungrad(j,i)=(ugrad(j,i)-u(j)*vec(i))*unorm
5255 ! write (2,*) 'ungrad',ungrad
5257 end subroutine unormderiv
5258 !-----------------------------------------------------------------------------
5259 subroutine escp_soft_sphere(evdw2,evdw2_14)
5261 ! This subroutine calculates the excluded-volume interaction energy between
5262 ! peptide-group centers and side chains and its gradient in virtual-bond and
5263 ! side-chain vectors.
5265 ! implicit real*8 (a-h,o-z)
5266 ! include 'DIMENSIONS'
5267 ! include 'COMMON.GEO'
5268 ! include 'COMMON.VAR'
5269 ! include 'COMMON.LOCAL'
5270 ! include 'COMMON.CHAIN'
5271 ! include 'COMMON.DERIV'
5272 ! include 'COMMON.INTERACT'
5273 ! include 'COMMON.FFIELD'
5274 ! include 'COMMON.IOUNITS'
5275 ! include 'COMMON.CONTROL'
5276 real(kind=8),dimension(3) :: ggg
5278 integer :: i,iint,j,k,iteli,itypj
5279 real(kind=8) :: evdw2,evdw2_14,r0_scp,xi,yi,zi,xj,yj,zj,&
5280 fac,rij,r0ij,r0ijsq,evdwij,e1,e2
5285 !d print '(a)','Enter ESCP'
5286 !d write (iout,*) 'iatscp_s=',iatscp_s,' iatscp_e=',iatscp_e
5287 do i=iatscp_s,iatscp_e
5288 if (itype(i,1).eq.ntyp1 .or. itype(i+1,1).eq.ntyp1) cycle
5290 xi=0.5D0*(c(1,i)+c(1,i+1))
5291 yi=0.5D0*(c(2,i)+c(2,i+1))
5292 zi=0.5D0*(c(3,i)+c(3,i+1))
5293 call to_box(xi,yi,zi)
5295 do iint=1,nscp_gr(i)
5297 do j=iscpstart(i,iint),iscpend(i,iint)
5298 if (itype(j,1).eq.ntyp1) cycle
5299 itypj=iabs(itype(j,1))
5300 ! Uncomment following three lines for SC-p interactions
5304 ! Uncomment following three lines for Ca-p interactions
5308 call to_box(xj,yj,zj)
5309 xj=boxshift(xj-xi,boxxsize)
5310 yj=boxshift(yj-yi,boxysize)
5311 zj=boxshift(zj-zi,boxzsize)
5312 rij=xj*xj+yj*yj+zj*zj
5315 if (rij.lt.r0ijsq) then
5316 evdwij=0.25d0*(rij-r0ijsq)**2
5324 ! Calculate contributions to the gradient in the virtual-bond and SC vectors.
5329 !grad if (j.lt.i) then
5330 !d write (iout,*) 'j<i'
5331 ! Uncomment following three lines for SC-p interactions
5333 ! gradx_scp(k,j)=gradx_scp(k,j)+ggg(k)
5336 !d write (iout,*) 'j>i'
5338 !grad ggg(k)=-ggg(k)
5339 ! Uncomment following line for SC-p interactions
5340 ! gradx_scp(k,j)=gradx_scp(k,j)-ggg(k)
5344 !grad gvdwc_scp(k,i)=gvdwc_scp(k,i)-0.5D0*ggg(k)
5346 !grad kstart=min0(i+1,j)
5347 !grad kend=max0(i-1,j-1)
5348 !d write (iout,*) 'i=',i,' j=',j,' kstart=',kstart,' kend=',kend
5349 !d write (iout,*) ggg(1),ggg(2),ggg(3)
5350 !grad do k=kstart,kend
5352 !grad gvdwc_scp(l,k)=gvdwc_scp(l,k)-ggg(l)
5356 gvdwc_scpp(k,i)=gvdwc_scpp(k,i)-ggg(k)
5357 gvdwc_scp(k,j)=gvdwc_scp(k,j)+ggg(k)
5364 end subroutine escp_soft_sphere
5365 !-----------------------------------------------------------------------------
5366 subroutine escp(evdw2,evdw2_14)
5368 ! This subroutine calculates the excluded-volume interaction energy between
5369 ! peptide-group centers and side chains and its gradient in virtual-bond and
5370 ! side-chain vectors.
5372 ! implicit real*8 (a-h,o-z)
5373 ! include 'DIMENSIONS'
5374 ! include 'COMMON.GEO'
5375 ! include 'COMMON.VAR'
5376 ! include 'COMMON.LOCAL'
5377 ! include 'COMMON.CHAIN'
5378 ! include 'COMMON.DERIV'
5379 ! include 'COMMON.INTERACT'
5380 ! include 'COMMON.FFIELD'
5381 ! include 'COMMON.IOUNITS'
5382 ! include 'COMMON.CONTROL'
5383 real(kind=8),dimension(3) :: ggg
5385 integer :: i,iint,j,k,iteli,itypj,subchap,icont
5386 real(kind=8) :: evdw2,evdw2_14,xi,yi,zi,xj,yj,zj,rrij,fac,&
5388 real(kind=8) :: xj_safe,yj_safe,zj_safe,xj_temp,yj_temp,zj_temp,&
5389 dist_temp, dist_init
5390 integer xshift,yshift,zshift
5394 !d print '(a)','Enter ESCP'
5395 !d write (iout,*) 'iatscp_s=',iatscp_s,' iatscp_e=',iatscp_e
5396 ! do i=iatscp_s,iatscp_e
5397 do icont=g_listscp_start,g_listscp_end
5398 i=newcontlistscpi(icont)
5399 j=newcontlistscpj(icont)
5400 if (itype(i,1).eq.ntyp1 .or. itype(i+1,1).eq.ntyp1) cycle
5402 xi=0.5D0*(c(1,i)+c(1,i+1))
5403 yi=0.5D0*(c(2,i)+c(2,i+1))
5404 zi=0.5D0*(c(3,i)+c(3,i+1))
5405 call to_box(xi,yi,zi)
5407 ! do iint=1,nscp_gr(i)
5409 ! do j=iscpstart(i,iint),iscpend(i,iint)
5410 itypj=iabs(itype(j,1))
5411 if (itypj.eq.ntyp1) cycle
5412 ! Uncomment following three lines for SC-p interactions
5416 ! Uncomment following three lines for Ca-p interactions
5424 call to_box(xj,yj,zj)
5425 xj=boxshift(xj-xi,boxxsize)
5426 yj=boxshift(yj-yi,boxysize)
5427 zj=boxshift(zj-zi,boxzsize)
5429 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
5430 rij=dsqrt(1.0d0/rrij)
5431 sss_ele_cut=sscale_ele(rij)
5432 sss_ele_grad=sscagrad_ele(rij)
5433 ! print *,sss_ele_cut,sss_ele_grad,&
5434 ! (rij),r_cut_ele,rlamb_ele
5435 if (sss_ele_cut.le.0.0) cycle
5437 e1=fac*fac*aad(itypj,iteli)
5438 e2=fac*bad(itypj,iteli)
5439 if (iabs(j-i) .le. 2) then
5442 evdw2_14=evdw2_14+(e1+e2)*sss_ele_cut
5445 evdw2=evdw2+evdwij*sss_ele_cut
5446 ! if (energy_dec) write (iout,'(a6,2i5,0pf7.3,2i3,3e11.3)') &
5447 ! 'evdw2',i,j,evdwij,iteli,itypj,fac,aad(itypj,iteli),&
5448 if (energy_dec) write (iout,'(a6,2i5,0pf7.3)') &
5451 ! Calculate contributions to the gradient in the virtual-bond and SC vectors.
5453 fac=-(evdwij+e1)*rrij*sss_ele_cut
5454 fac=fac+evdwij*sss_ele_grad/rij/expon
5458 !grad if (j.lt.i) then
5459 !d write (iout,*) 'j<i'
5460 ! Uncomment following three lines for SC-p interactions
5462 ! gradx_scp(k,j)=gradx_scp(k,j)+ggg(k)
5465 !d write (iout,*) 'j>i'
5467 !grad ggg(k)=-ggg(k)
5468 ! Uncomment following line for SC-p interactions
5469 !cgrad gradx_scp(k,j)=gradx_scp(k,j)-ggg(k)
5470 ! gradx_scp(k,j)=gradx_scp(k,j)+ggg(k)
5474 !grad gvdwc_scp(k,i)=gvdwc_scp(k,i)-0.5D0*ggg(k)
5476 !grad kstart=min0(i+1,j)
5477 !grad kend=max0(i-1,j-1)
5478 !d write (iout,*) 'i=',i,' j=',j,' kstart=',kstart,' kend=',kend
5479 !d write (iout,*) ggg(1),ggg(2),ggg(3)
5480 !grad do k=kstart,kend
5482 !grad gvdwc_scp(l,k)=gvdwc_scp(l,k)-ggg(l)
5486 gvdwc_scpp(k,i)=gvdwc_scpp(k,i)-ggg(k)
5487 gvdwc_scp(k,j)=gvdwc_scp(k,j)+ggg(k)
5495 gvdwc_scp(j,i)=expon*gvdwc_scp(j,i)
5496 gvdwc_scpp(j,i)=expon*gvdwc_scpp(j,i)
5497 gradx_scp(j,i)=expon*gradx_scp(j,i)
5500 !******************************************************************************
5504 ! To save time the factor EXPON has been extracted from ALL components
5505 ! of GVDWC and GRADX. Remember to multiply them by this factor before further
5508 !******************************************************************************
5511 !-----------------------------------------------------------------------------
5512 subroutine edis(ehpb)
5514 ! Evaluate bridge-strain energy and its gradient in virtual-bond and SC vectors.
5516 ! implicit real*8 (a-h,o-z)
5517 ! include 'DIMENSIONS'
5518 ! include 'COMMON.SBRIDGE'
5519 ! include 'COMMON.CHAIN'
5520 ! include 'COMMON.DERIV'
5521 ! include 'COMMON.VAR'
5522 ! include 'COMMON.INTERACT'
5523 ! include 'COMMON.IOUNITS'
5524 real(kind=8),dimension(3) :: ggg
5526 integer :: i,j,ii,jj,iii,jjj,k
5527 real(kind=8) :: fac,eij,rdis,ehpb,dd,waga
5530 !d write(iout,*)'edis: nhpb=',nhpb,' fbr=',fbr
5531 !d write(iout,*)'link_start=',link_start,' link_end=',link_end
5532 if (link_end.eq.0) return
5533 do i=link_start,link_end
5534 ! If ihpb(i) and jhpb(i) > NRES, this is a SC-SC distance, otherwise a
5535 ! CA-CA distance used in regularization of structure.
5538 ! iii and jjj point to the residues for which the distance is assigned.
5539 if (ii.gt.nres) then
5546 ! write (iout,*) "i",i," ii",ii," iii",iii," jj",jj," jjj",jjj,
5547 ! & dhpb(i),dhpb1(i),forcon(i)
5548 ! 24/11/03 AL: SS bridges handled separately because of introducing a specific
5549 ! distance and angle dependent SS bond potential.
5550 !mc if (ii.gt.nres .and. itype(iii).eq.1 .and. itype(jjj).eq.1) then
5551 ! 18/07/06 MC: Use the convention that the first nss pairs are SS bonds
5552 if (.not.dyn_ss .and. i.le.nss) then
5553 ! 15/02/13 CC dynamic SSbond - additional check
5554 if (ii.gt.nres .and. iabs(itype(iii,1)).eq.1 .and. &
5555 iabs(itype(jjj,1)).eq.1) then
5556 call ssbond_ene(iii,jjj,eij)
5558 ! write (iout,*) "eij",eij,iii,jjj
5560 else if (ii.gt.nres .and. jj.gt.nres) then
5561 !c Restraints from contact prediction
5563 if (constr_dist.eq.11) then
5564 ehpb=ehpb+fordepth(i)**4.0d0 &
5565 *rlornmr1(dd,dhpb(i),dhpb1(i),forcon(i))
5566 fac=fordepth(i)**4.0d0 &
5567 *rlornmr1prim(dd,dhpb(i),dhpb1(i),forcon(i))/dd
5568 if (energy_dec) write (iout,'(a6,2i5,3f8.3)') "edisl",ii,jj, &
5571 if (dhpb1(i).gt.0.0d0) then
5572 ehpb=ehpb+2*forcon(i)*gnmr1(dd,dhpb(i),dhpb1(i))
5573 fac=forcon(i)*gnmr1prim(dd,dhpb(i),dhpb1(i))/dd
5574 !c write (iout,*) "beta nmr",
5575 !c & dd,2*forcon(i)*gnmr1(dd,dhpb(i),dhpb1(i))
5579 !C Get the force constant corresponding to this distance.
5581 !C Calculate the contribution to energy.
5582 ehpb=ehpb+waga*rdis*rdis
5583 !c write (iout,*) "beta reg",dd,waga*rdis*rdis
5585 !C Evaluate gradient.
5591 ggg(j)=fac*(c(j,jj)-c(j,ii))
5594 ghpbx(j,iii)=ghpbx(j,iii)-ggg(j)
5595 ghpbx(j,jjj)=ghpbx(j,jjj)+ggg(j)
5598 ghpbc(k,jjj)=ghpbc(k,jjj)+ggg(k)
5599 ghpbc(k,iii)=ghpbc(k,iii)-ggg(k)
5603 if (constr_dist.eq.11) then
5604 ehpb=ehpb+fordepth(i)**4.0d0 &
5605 *rlornmr1(dd,dhpb(i),dhpb1(i),forcon(i))
5606 fac=fordepth(i)**4.0d0 &
5607 *rlornmr1prim(dd,dhpb(i),dhpb1(i),forcon(i))/dd
5608 if (energy_dec) write (iout,'(a6,2i5,3f8.3)') "edisl",ii,jj, &
5611 if (dhpb1(i).gt.0.0d0) then
5612 ehpb=ehpb+2*forcon(i)*gnmr1(dd,dhpb(i),dhpb1(i))
5613 fac=forcon(i)*gnmr1prim(dd,dhpb(i),dhpb1(i))/dd
5614 !c write (iout,*) "alph nmr",
5615 !c & dd,2*forcon(i)*gnmr1(dd,dhpb(i),dhpb1(i))
5618 !C Get the force constant corresponding to this distance.
5620 !C Calculate the contribution to energy.
5621 ehpb=ehpb+waga*rdis*rdis
5622 !c write (iout,*) "alpha reg",dd,waga*rdis*rdis
5624 !C Evaluate gradient.
5631 ggg(j)=fac*(c(j,jj)-c(j,ii))
5633 !cd print '(i3,3(1pe14.5))',i,(ggg(j),j=1,3)
5634 !C If this is a SC-SC distance, we need to calculate the contributions to the
5635 !C Cartesian gradient in the SC vectors (ghpbx).
5638 ghpbx(j,iii)=ghpbx(j,iii)-ggg(j)
5639 ghpbx(j,jjj)=ghpbx(j,jjj)+ggg(j)
5642 !cgrad do j=iii,jjj-1
5644 !cgrad ghpbc(k,j)=ghpbc(k,j)+ggg(k)
5648 ghpbc(k,jjj)=ghpbc(k,jjj)+ggg(k)
5649 ghpbc(k,iii)=ghpbc(k,iii)-ggg(k)
5653 if (constr_dist.ne.11) ehpb=0.5D0*ehpb
5657 !-----------------------------------------------------------------------------
5658 subroutine ssbond_ene(i,j,eij)
5660 ! Calculate the distance and angle dependent SS-bond potential energy
5661 ! using a free-energy function derived based on RHF/6-31G** ab initio
5662 ! calculations of diethyl disulfide.
5664 ! A. Liwo and U. Kozlowska, 11/24/03
5666 ! implicit real*8 (a-h,o-z)
5667 ! include 'DIMENSIONS'
5668 ! include 'COMMON.SBRIDGE'
5669 ! include 'COMMON.CHAIN'
5670 ! include 'COMMON.DERIV'
5671 ! include 'COMMON.LOCAL'
5672 ! include 'COMMON.INTERACT'
5673 ! include 'COMMON.VAR'
5674 ! include 'COMMON.IOUNITS'
5675 real(kind=8),dimension(3) :: erij,dcosom1,dcosom2,gg
5677 integer :: i,j,itypi,itypj,k
5678 real(kind=8) :: eij,rij,rrij,xi,yi,zi,dxi,dyi,dzi,dsci_inv,&
5679 xj,yj,zj,dxj,dyj,dzj,om1,om2,om12,deltad,dscj_inv,&
5680 deltat1,deltat2,deltat12,ed,pom1,pom2,eom1,eom2,eom12,&
5683 itypi=iabs(itype(i,1))
5687 call to_box(xi,yi,zi)
5689 dxi=dc_norm(1,nres+i)
5690 dyi=dc_norm(2,nres+i)
5691 dzi=dc_norm(3,nres+i)
5692 ! dsci_inv=dsc_inv(itypi)
5693 dsci_inv=vbld_inv(nres+i)
5694 itypj=iabs(itype(j,1))
5695 ! dscj_inv=dsc_inv(itypj)
5696 dscj_inv=vbld_inv(nres+j)
5700 call to_box(xj,yj,zj)
5701 xj=boxshift(xj-xi,boxxsize)
5702 yj=boxshift(yj-yi,boxysize)
5703 zj=boxshift(zj-zi,boxzsize)
5704 dxj=dc_norm(1,nres+j)
5705 dyj=dc_norm(2,nres+j)
5706 dzj=dc_norm(3,nres+j)
5707 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
5712 om1=dxi*erij(1)+dyi*erij(2)+dzi*erij(3)
5713 om2=dxj*erij(1)+dyj*erij(2)+dzj*erij(3)
5714 om12=dxi*dxj+dyi*dyj+dzi*dzj
5716 dcosom1(k)=rij*(dc_norm(k,nres+i)-om1*erij(k))
5717 dcosom2(k)=rij*(dc_norm(k,nres+j)-om2*erij(k))
5723 deltat12=om2-om1+2.0d0
5725 eij=akcm*deltad*deltad+akth*(deltat1*deltat1+deltat2*deltat2) &
5726 +akct*deltad*deltat12 &
5727 +v1ss*cosphi+v2ss*cosphi*cosphi+v3ss*cosphi*cosphi*cosphi+ebr
5728 ! write(iout,*) i,j,"rij",rij,"d0cm",d0cm," akcm",akcm," akth",akth, &
5729 ! " akct",akct," deltad",deltad," deltat",deltat1,deltat2, &
5730 ! " deltat12",deltat12," eij",eij
5731 ed=2*akcm*deltad+akct*deltat12
5733 pom2=v1ss+2*v2ss*cosphi+3*v3ss*cosphi*cosphi
5734 eom1=-2*akth*deltat1-pom1-om2*pom2
5735 eom2= 2*akth*deltat2+pom1-om1*pom2
5738 ggk=ed*erij(k)+eom1*dcosom1(k)+eom2*dcosom2(k)
5739 ghpbx(k,i)=ghpbx(k,i)-ggk &
5740 +(eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,nres+i)) &
5741 +eom1*(erij(k)-om1*dc_norm(k,nres+i)))*dsci_inv
5742 ghpbx(k,j)=ghpbx(k,j)+ggk &
5743 +(eom12*(dc_norm(k,nres+i)-om12*dc_norm(k,nres+j)) &
5744 +eom2*(erij(k)-om2*dc_norm(k,nres+j)))*dscj_inv
5745 ghpbc(k,i)=ghpbc(k,i)-ggk
5746 ghpbc(k,j)=ghpbc(k,j)+ggk
5749 ! Calculate the components of the gradient in DC and X
5753 !grad ghpbc(l,k)=ghpbc(l,k)+gg(l)
5757 end subroutine ssbond_ene
5758 !-----------------------------------------------------------------------------
5759 subroutine ebond(estr)
5761 ! Evaluate the energy of stretching of the CA-CA and CA-SC virtual bonds
5763 ! implicit real*8 (a-h,o-z)
5764 ! include 'DIMENSIONS'
5765 ! include 'COMMON.LOCAL'
5766 ! include 'COMMON.GEO'
5767 ! include 'COMMON.INTERACT'
5768 ! include 'COMMON.DERIV'
5769 ! include 'COMMON.VAR'
5770 ! include 'COMMON.CHAIN'
5771 ! include 'COMMON.IOUNITS'
5772 ! include 'COMMON.NAMES'
5773 ! include 'COMMON.FFIELD'
5774 ! include 'COMMON.CONTROL'
5775 ! include 'COMMON.SETUP'
5776 real(kind=8),dimension(3) :: u,ud
5778 integer :: i,j,iti,nbi,k
5779 real(kind=8) :: estr,estr1,diff,uprod,usum,usumsqder,&
5784 ! if (.not.allocated(gradb)) allocate(gradb(3,nres)) !(3,maxres)
5785 ! if (.not.allocated(gradbx)) allocate(gradbx(3,nres)) !(3,maxres)
5787 do i=ibondp_start,ibondp_end
5788 if (itype(i-1,1).eq.ntyp1 .and. itype(i,1).eq.ntyp1) cycle
5789 if (itype(i-1,1).eq.ntyp1 .or. itype(i,1).eq.ntyp1) then
5790 !C estr1=estr1+gnmr1(vbld(i),-1.0d0,distchainmax)
5792 !C gradb(j,i-1)=gnmr1prim(vbld(i),-1.0d0,distchainmax) &
5793 !C *dc(j,i-1)/vbld(i)
5795 !C if (energy_dec) write(iout,*) &
5796 !C "estr1",i,gnmr1(vbld(i),-1.0d0,distchainmax)
5797 diff = vbld(i)-vbldpDUM
5799 diff = vbld(i)-vbldp0
5801 if (energy_dec) write (iout,'(a7,i5,4f7.3)') &
5802 "estr bb",i,vbld(i),vbldp0,diff,AKP*diff*diff
5805 gradb(j,i-1)=AKP*diff*dc(j,i-1)/vbld(i)
5807 ! write (iout,'(i5,3f10.5)') i,(gradb(j,i-1),j=1,3)
5810 estr=0.5d0*AKP*estr+estr1
5811 ! print *,"estr_bb",estr,AKP
5813 ! 09/18/07 AL: multimodal bond potential based on AM1 CA-SC PMF's included
5815 do i=ibond_start,ibond_end
5816 iti=iabs(itype(i,1))
5817 if (iti.eq.0) print *,"WARNING WRONG SETTTING",i
5818 if (iti.ne.10 .and. iti.ne.ntyp1) then
5821 diff=vbld(i+nres)-vbldsc0(1,iti)
5822 if (energy_dec) write (iout,*) &
5823 "estr sc",i,iti,vbld(i+nres),vbldsc0(1,iti),diff,&
5824 AKSC(1,iti),AKSC(1,iti)*diff*diff
5825 estr=estr+0.5d0*AKSC(1,iti)*diff*diff
5826 ! print *,"estr_sc",estr
5828 gradbx(j,i)=AKSC(1,iti)*diff*dc(j,i+nres)/vbld(i+nres)
5832 diff=vbld(i+nres)-vbldsc0(j,iti)
5833 ud(j)=aksc(j,iti)*diff
5834 u(j)=abond0(j,iti)+0.5d0*ud(j)*diff
5848 uprod2=uprod2*u(k)*u(k)
5852 usumsqder=usumsqder+ud(j)*uprod2
5854 estr=estr+uprod/usum
5855 ! print *,"estr_sc",estr,i
5857 if (energy_dec) write (iout,*) &
5858 "estr sc",i,iti,vbld(i+nres),vbldsc0(1,iti),diff,&
5859 AKSC(1,iti),uprod/usum
5861 gradbx(j,i)=usumsqder/(usum*usum)*dc(j,i+nres)/vbld(i+nres)
5867 end subroutine ebond
5869 !-----------------------------------------------------------------------------
5870 subroutine ebend(etheta)
5872 ! Evaluate the virtual-bond-angle energy given the virtual-bond dihedral
5873 ! angles gamma and its derivatives in consecutive thetas and gammas.
5876 ! implicit real*8 (a-h,o-z)
5877 ! include 'DIMENSIONS'
5878 ! include 'COMMON.LOCAL'
5879 ! include 'COMMON.GEO'
5880 ! include 'COMMON.INTERACT'
5881 ! include 'COMMON.DERIV'
5882 ! include 'COMMON.VAR'
5883 ! include 'COMMON.CHAIN'
5884 ! include 'COMMON.IOUNITS'
5885 ! include 'COMMON.NAMES'
5886 ! include 'COMMON.FFIELD'
5887 ! include 'COMMON.CONTROL'
5888 !el real(kind=8) :: term1,term2,termm,diffak,ratak,&
5889 !el ak,aktc,termpre,termexp,sigc,sig0i,time11,time12,sigcsq,&
5890 !el delthe0,sig0inv,sigtc,sigsqtc,delthec
5892 !el common /calcthet/ term1,term2,termm,diffak,ratak,&
5893 !el ak,aktc,termpre,termexp,sigc,sig0i,time11,time12,sigcsq,&
5894 !el delthe0,sig0inv,sigtc,sigsqtc,delthec,it
5896 integer :: i,k,ichir1,ichir2,itype1,ichir11,ichir12,itype2,&
5898 real(kind=8) :: etheta,delta,ss,ssd,phii,phii1,thet_pred_mean,&
5899 athetk,bthetk,dthett,dthetg1,dthetg2,f0,fprim0,E_tc0,fprim_tc0,&
5900 f1,fprim1,E_tc1,ethetai,E_theta,E_tc
5901 real(kind=8),dimension(2) :: y,z
5904 ! time11=dexp(-2*time)
5907 ! write (*,'(a,i2)') 'EBEND ICG=',icg
5908 do i=ithet_start,ithet_end
5909 if (itype(i-1,1).eq.ntyp1) cycle
5910 ! Zero the energy function and its derivative at 0 or pi.
5911 call splinthet(theta(i),0.5d0*delta,ss,ssd)
5913 ichir1=isign(1,itype(i-2,1))
5914 ichir2=isign(1,itype(i,1))
5915 if (itype(i-2,1).eq.10) ichir1=isign(1,itype(i-1,1))
5916 if (itype(i,1).eq.10) ichir2=isign(1,itype(i-1,1))
5917 if (itype(i-1,1).eq.10) then
5918 itype1=isign(10,itype(i-2,1))
5919 ichir11=isign(1,itype(i-2,1))
5920 ichir12=isign(1,itype(i-2,1))
5921 itype2=isign(10,itype(i,1))
5922 ichir21=isign(1,itype(i,1))
5923 ichir22=isign(1,itype(i,1))
5926 if (i.gt.3 .and. itype(i-2,1).ne.ntyp1) then
5929 if (phii.ne.phii) phii=150.0
5939 if (i.lt.nres .and. itype(i,1).ne.ntyp1) then
5942 if (phii1.ne.phii1) phii1=150.0
5954 ! Calculate the "mean" value of theta from the part of the distribution
5955 ! dependent on the adjacent virtual-bond-valence angles (gamma1 & gamma2).
5956 ! In following comments this theta will be referred to as t_c.
5957 thet_pred_mean=0.0d0
5959 athetk=athet(k,it,ichir1,ichir2)
5960 bthetk=bthet(k,it,ichir1,ichir2)
5962 athetk=athet(k,itype1,ichir11,ichir12)
5963 bthetk=bthet(k,itype2,ichir21,ichir22)
5965 thet_pred_mean=thet_pred_mean+athetk*y(k)+bthetk*z(k)
5967 dthett=thet_pred_mean*ssd
5968 thet_pred_mean=thet_pred_mean*ss+a0thet(it)
5969 ! Derivatives of the "mean" values in gamma1 and gamma2.
5970 dthetg1=(-athet(1,it,ichir1,ichir2)*y(2) &
5971 +athet(2,it,ichir1,ichir2)*y(1))*ss
5972 dthetg2=(-bthet(1,it,ichir1,ichir2)*z(2) &
5973 +bthet(2,it,ichir1,ichir2)*z(1))*ss
5975 dthetg1=(-athet(1,itype1,ichir11,ichir12)*y(2) &
5976 +athet(2,itype1,ichir11,ichir12)*y(1))*ss
5977 dthetg2=(-bthet(1,itype2,ichir21,ichir22)*z(2) &
5978 +bthet(2,itype2,ichir21,ichir22)*z(1))*ss
5980 if (theta(i).gt.pi-delta) then
5981 call theteng(pi-delta,thet_pred_mean,theta0(it),f0,fprim0,&
5983 call mixder(pi-delta,thet_pred_mean,theta0(it),fprim_tc0)
5984 call theteng(pi,thet_pred_mean,theta0(it),f1,fprim1,E_tc1)
5985 call spline1(theta(i),pi-delta,delta,f0,f1,fprim0,ethetai,&
5987 call spline2(theta(i),pi-delta,delta,E_tc0,E_tc1,fprim_tc0,&
5989 else if (theta(i).lt.delta) then
5990 call theteng(delta,thet_pred_mean,theta0(it),f0,fprim0,E_tc0)
5991 call theteng(0.0d0,thet_pred_mean,theta0(it),f1,fprim1,E_tc1)
5992 call spline1(theta(i),delta,-delta,f0,f1,fprim0,ethetai,&
5994 call mixder(delta,thet_pred_mean,theta0(it),fprim_tc0)
5995 call spline2(theta(i),delta,-delta,E_tc0,E_tc1,fprim_tc0,&
5998 call theteng(theta(i),thet_pred_mean,theta0(it),ethetai,&
6001 etheta=etheta+ethetai
6002 if (energy_dec) write (iout,'(a6,i5,0pf7.3)') &
6004 if (i.gt.3) gloc(i-3,icg)=gloc(i-3,icg)+wang*E_tc*dthetg1
6005 if (i.lt.nres) gloc(i-2,icg)=gloc(i-2,icg)+wang*E_tc*dthetg2
6006 gloc(nphi+i-2,icg)=wang*(E_theta+E_tc*dthett)
6008 ! print *,ithetaconstr_start,ithetaconstr_end,"TU"
6010 ! Ufff.... We've done all this!!!
6012 end subroutine ebend
6013 !-----------------------------------------------------------------------------
6014 subroutine theteng(thetai,thet_pred_mean,theta0i,ethetai,E_theta,E_tc)
6017 ! implicit real*8 (a-h,o-z)
6018 ! include 'DIMENSIONS'
6019 ! include 'COMMON.LOCAL'
6020 ! include 'COMMON.IOUNITS'
6021 !el real(kind=8) :: term1,term2,termm,diffak,ratak,&
6022 !el ak,aktc,termpre,termexp,sigc,sig0i,time11,time12,sigcsq,&
6023 !el delthe0,sig0inv,sigtc,sigsqtc,delthec
6025 real(kind=8) :: thetai,thet_pred_mean,theta0i,ethetai,E_theta,E_tc
6027 !el common /calcthet/ term1,term2,termm,diffak,ratak,&
6028 !el ak,aktc,termpre,termexp,sigc,sig0i,time11,time12,sigcsq,&
6029 !el delthe0,sig0inv,sigtc,sigsqtc,delthec,it
6031 real(kind=8) :: sig,fac,escloci0,escloci1,esclocbi0,dersc12,&
6032 esclocbi1,chuju,esclocbi,dersc02,dersc01,ss,ssd
6034 ! Calculate the contributions to both Gaussian lobes.
6035 ! 6/6/97 - Deform the Gaussians using the factor of 1/(1+time)
6036 ! The "polynomial part" of the "standard deviation" of this part of
6040 sig=sig*thet_pred_mean+polthet(j,it)
6042 ! Derivative of the "interior part" of the "standard deviation of the"
6043 ! gamma-dependent Gaussian lobe in t_c.
6044 sigtc=3*polthet(3,it)
6046 sigtc=sigtc*thet_pred_mean+j*polthet(j,it)
6049 ! Set the parameters of both Gaussian lobes of the distribution.
6050 ! "Standard deviation" of the gamma-dependent Gaussian lobe (sigtc)
6051 fac=sig*sig+sigc0(it)
6054 ! Following variable (sigsqtc) is -(1/2)d[sigma(t_c)**(-2))]/dt_c
6055 sigsqtc=-4.0D0*sigcsq*sigtc
6056 ! print *,i,sig,sigtc,sigsqtc
6057 ! Following variable (sigtc) is d[sigma(t_c)]/dt_c
6058 sigtc=-sigtc/(fac*fac)
6059 ! Following variable is sigma(t_c)**(-2)
6060 sigcsq=sigcsq*sigcsq
6062 sig0inv=1.0D0/sig0i**2
6063 delthec=thetai-thet_pred_mean
6064 delthe0=thetai-theta0i
6065 term1=-0.5D0*sigcsq*delthec*delthec
6066 term2=-0.5D0*sig0inv*delthe0*delthe0
6067 ! Following fuzzy logic is to avoid underflows in dexp and subsequent INFs and
6068 ! NaNs in taking the logarithm. We extract the largest exponent which is added
6069 ! to the energy (this being the log of the distribution) at the end of energy
6070 ! term evaluation for this virtual-bond angle.
6071 if (term1.gt.term2) then
6073 term2=dexp(term2-termm)
6077 term1=dexp(term1-termm)
6080 ! The ratio between the gamma-independent and gamma-dependent lobes of
6081 ! the distribution is a Gaussian function of thet_pred_mean too.
6082 diffak=gthet(2,it)-thet_pred_mean
6083 ratak=diffak/gthet(3,it)**2
6084 ak=dexp(gthet(1,it)-0.5D0*diffak*ratak)
6085 ! Let's differentiate it in thet_pred_mean NOW.
6087 ! Now put together the distribution terms to make complete distribution.
6088 termexp=term1+ak*term2
6089 termpre=sigc+ak*sig0i
6090 ! Contribution of the bending energy from this theta is just the -log of
6091 ! the sum of the contributions from the two lobes and the pre-exponential
6092 ! factor. Simple enough, isn't it?
6093 ethetai=(-dlog(termexp)-termm+dlog(termpre))
6094 ! NOW the derivatives!!!
6095 ! 6/6/97 Take into account the deformation.
6096 E_theta=(delthec*sigcsq*term1 &
6097 +ak*delthe0*sig0inv*term2)/termexp
6098 E_tc=((sigtc+aktc*sig0i)/termpre &
6099 -((delthec*sigcsq+delthec*delthec*sigsqtc)*term1+ &
6100 aktc*term2)/termexp)
6102 end subroutine theteng
6104 !-----------------------------------------------------------------------------
6105 subroutine ebend(etheta)
6107 ! Evaluate the virtual-bond-angle energy given the virtual-bond dihedral
6108 ! angles gamma and its derivatives in consecutive thetas and gammas.
6109 ! ab initio-derived potentials from
6110 ! Kozlowska et al., J. Phys.: Condens. Matter 19 (2007) 285203
6112 ! implicit real*8 (a-h,o-z)
6113 ! include 'DIMENSIONS'
6114 ! include 'COMMON.LOCAL'
6115 ! include 'COMMON.GEO'
6116 ! include 'COMMON.INTERACT'
6117 ! include 'COMMON.DERIV'
6118 ! include 'COMMON.VAR'
6119 ! include 'COMMON.CHAIN'
6120 ! include 'COMMON.IOUNITS'
6121 ! include 'COMMON.NAMES'
6122 ! include 'COMMON.FFIELD'
6123 ! include 'COMMON.CONTROL'
6124 real(kind=8),dimension(nntheterm) :: coskt,sinkt !mmaxtheterm
6125 real(kind=8),dimension(nsingle) :: cosph1,sinph1,cosph2,sinph2 !maxsingle
6126 real(kind=8),dimension(ndouble,ndouble) :: cosph1ph2,sinph1ph2 !maxdouble,maxdouble
6127 logical :: lprn=.false., lprn1=.false.
6129 integer :: i,k,iblock,ityp1,ityp2,ityp3,l,m
6130 real(kind=8) :: dethetai,dephii,dephii1,theti2,phii,phii1,ethetai
6131 real(kind=8) :: aux,etheta,ccl,ssl,scl,csl,ethetacnstr
6132 ! local variables for constrains
6133 real(kind=8) :: difi,thetiii
6135 ! write(iout,*) "in ebend",ithet_start,ithet_end
6138 do i=ithet_start,ithet_end
6139 if (itype(i-1,1).eq.ntyp1) cycle
6140 if (itype(i-2,1).eq.ntyp1.or.itype(i,1).eq.ntyp1) cycle
6141 if (iabs(itype(i+1,1)).eq.20) iblock=2
6142 if (iabs(itype(i+1,1)).ne.20) iblock=1
6146 theti2=0.5d0*theta(i)
6147 ityp2=ithetyp((itype(i-1,1)))
6149 coskt(k)=dcos(k*theti2)
6150 sinkt(k)=dsin(k*theti2)
6152 if (i.gt.3 .and. itype(max0(i-3,1),1).ne.ntyp1) then
6155 if (phii.ne.phii) phii=150.0
6159 ityp1=ithetyp((itype(i-2,1)))
6160 ! propagation of chirality for glycine type
6162 cosph1(k)=dcos(k*phii)
6163 sinph1(k)=dsin(k*phii)
6167 ityp1=ithetyp(itype(i-2,1))
6173 if (i.lt.nres .and. itype(i+1,1).ne.ntyp1) then
6176 if (phii1.ne.phii1) phii1=150.0
6181 ityp3=ithetyp((itype(i,1)))
6183 cosph2(k)=dcos(k*phii1)
6184 sinph2(k)=dsin(k*phii1)
6188 ityp3=ithetyp(itype(i,1))
6194 ethetai=aa0thet(ityp1,ityp2,ityp3,iblock)
6197 ccl=cosph1(l)*cosph2(k-l)
6198 ssl=sinph1(l)*sinph2(k-l)
6199 scl=sinph1(l)*cosph2(k-l)
6200 csl=cosph1(l)*sinph2(k-l)
6201 cosph1ph2(l,k)=ccl-ssl
6202 cosph1ph2(k,l)=ccl+ssl
6203 sinph1ph2(l,k)=scl+csl
6204 sinph1ph2(k,l)=scl-csl
6208 write (iout,*) "i",i," ityp1",ityp1," ityp2",ityp2,&
6209 " ityp3",ityp3," theti2",theti2," phii",phii," phii1",phii1
6210 write (iout,*) "coskt and sinkt"
6212 write (iout,*) k,coskt(k),sinkt(k)
6216 ethetai=ethetai+aathet(k,ityp1,ityp2,ityp3,iblock)*sinkt(k)
6217 dethetai=dethetai+0.5d0*k*aathet(k,ityp1,ityp2,ityp3,iblock) &
6220 write (iout,*) "k",k,&
6221 "aathet",aathet(k,ityp1,ityp2,ityp3,iblock),&
6225 write (iout,*) "cosph and sinph"
6227 write (iout,*) k,cosph1(k),sinph1(k),cosph2(k),sinph2(k)
6229 write (iout,*) "cosph1ph2 and sinph2ph2"
6232 write (iout,*) l,k,cosph1ph2(l,k),cosph1ph2(k,l),&
6233 sinph1ph2(l,k),sinph1ph2(k,l)
6236 write(iout,*) "ethetai",ethetai
6240 aux=bbthet(k,m,ityp1,ityp2,ityp3,iblock)*cosph1(k) &
6241 +ccthet(k,m,ityp1,ityp2,ityp3,iblock)*sinph1(k) &
6242 +ddthet(k,m,ityp1,ityp2,ityp3,iblock)*cosph2(k) &
6243 +eethet(k,m,ityp1,ityp2,ityp3,iblock)*sinph2(k)
6244 ethetai=ethetai+sinkt(m)*aux
6245 dethetai=dethetai+0.5d0*m*aux*coskt(m)
6246 dephii=dephii+k*sinkt(m)* &
6247 (ccthet(k,m,ityp1,ityp2,ityp3,iblock)*cosph1(k)- &
6248 bbthet(k,m,ityp1,ityp2,ityp3,iblock)*sinph1(k))
6249 dephii1=dephii1+k*sinkt(m)* &
6250 (eethet(k,m,ityp1,ityp2,ityp3,iblock)*cosph2(k)- &
6251 ddthet(k,m,ityp1,ityp2,ityp3,iblock)*sinph2(k))
6253 write (iout,*) "m",m," k",k," bbthet", &
6254 bbthet(k,m,ityp1,ityp2,ityp3,iblock)," ccthet", &
6255 ccthet(k,m,ityp1,ityp2,ityp3,iblock)," ddthet", &
6256 ddthet(k,m,ityp1,ityp2,ityp3,iblock)," eethet", &
6257 eethet(k,m,ityp1,ityp2,ityp3,iblock)," ethetai",ethetai
6261 write(iout,*) "ethetai",ethetai
6265 aux=ffthet(l,k,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(l,k)+ &
6266 ffthet(k,l,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(k,l)+ &
6267 ggthet(l,k,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(l,k)+ &
6268 ggthet(k,l,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(k,l)
6269 ethetai=ethetai+sinkt(m)*aux
6270 dethetai=dethetai+0.5d0*m*coskt(m)*aux
6271 dephii=dephii+l*sinkt(m)* &
6272 (-ffthet(l,k,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(l,k)- &
6273 ffthet(k,l,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(k,l)+ &
6274 ggthet(l,k,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(l,k)+ &
6275 ggthet(k,l,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(k,l))
6276 dephii1=dephii1+(k-l)*sinkt(m)* &
6277 (-ffthet(l,k,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(l,k)+ &
6278 ffthet(k,l,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(k,l)+ &
6279 ggthet(l,k,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(l,k)- &
6280 ggthet(k,l,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(k,l))
6282 write (iout,*) "m",m," k",k," l",l," ffthet",&
6283 ffthet(l,k,m,ityp1,ityp2,ityp3,iblock),&
6284 ffthet(k,l,m,ityp1,ityp2,ityp3,iblock)," ggthet",&
6285 ggthet(l,k,m,ityp1,ityp2,ityp3,iblock),&
6286 ggthet(k,l,m,ityp1,ityp2,ityp3,iblock),&
6288 write (iout,*) cosph1ph2(l,k)*sinkt(m),&
6289 cosph1ph2(k,l)*sinkt(m),&
6290 sinph1ph2(l,k)*sinkt(m),sinph1ph2(k,l)*sinkt(m)
6298 write (iout,'(i2,3f8.1,9h ethetai ,f10.5)') &
6299 i,theta(i)*rad2deg,phii*rad2deg,&
6300 phii1*rad2deg,ethetai
6302 etheta=etheta+ethetai
6303 if (energy_dec) write (iout,'(a6,i5,0pf7.3)') &
6305 if (i.gt.3) gloc(i-3,icg)=gloc(i-3,icg)+wang*dephii
6306 if (i.lt.nres) gloc(i-2,icg)=gloc(i-2,icg)+wang*dephii1
6307 gloc(nphi+i-2,icg)=wang*dethetai
6309 !-----------thete constrains
6310 ! if (tor_mode.ne.2) then
6313 end subroutine ebend
6316 !-----------------------------------------------------------------------------
6317 subroutine esc(escloc)
6318 ! Calculate the local energy of a side chain and its derivatives in the
6319 ! corresponding virtual-bond valence angles THETA and the spherical angles
6323 ! implicit real*8 (a-h,o-z)
6324 ! include 'DIMENSIONS'
6325 ! include 'COMMON.GEO'
6326 ! include 'COMMON.LOCAL'
6327 ! include 'COMMON.VAR'
6328 ! include 'COMMON.INTERACT'
6329 ! include 'COMMON.DERIV'
6330 ! include 'COMMON.CHAIN'
6331 ! include 'COMMON.IOUNITS'
6332 ! include 'COMMON.NAMES'
6333 ! include 'COMMON.FFIELD'
6334 ! include 'COMMON.CONTROL'
6335 real(kind=8),dimension(3) :: x,dersc,xemp,dersc0,dersc1,&
6336 ddersc0,ddummy,xtemp,temp
6337 !el real(kind=8) :: time11,time12,time112,theti
6338 real(kind=8) :: escloc,delta
6339 !el integer :: it,nlobit
6340 !el common /sccalc/ time11,time12,time112,theti,it,nlobit
6343 real(kind=8) :: escloci0,escloci1,escloci,esclocbi0,&
6344 dersc12,esclocbi1,chuju,esclocbi,dersc02,dersc01,ss,ssd
6347 ! write (iout,'(a)') 'ESC'
6348 do i=loc_start,loc_end
6350 if (it.eq.ntyp1) cycle
6351 if (it.eq.10) goto 1
6352 nlobit=nlob(iabs(it))
6353 ! print *,'i=',i,' it=',it,' nlobit=',nlobit
6354 ! write (iout,*) 'i=',i,' ssa=',ssa,' ssad=',ssad
6355 theti=theta(i+1)-pipol
6360 if (x(2).gt.pi-delta) then
6364 call enesc(xtemp,escloci0,dersc0,ddersc0,.true.)
6366 call enesc(xtemp,escloci1,dersc1,ddummy,.false.)
6367 call spline1(x(2),pi-delta,delta,escloci0,escloci1,dersc0(2),&
6369 call spline2(x(2),pi-delta,delta,dersc0(1),dersc1(1),&
6370 ddersc0(1),dersc(1))
6371 call spline2(x(2),pi-delta,delta,dersc0(3),dersc1(3),&
6372 ddersc0(3),dersc(3))
6374 call enesc_bound(xtemp,esclocbi0,dersc0,dersc12,.true.)
6376 call enesc_bound(xtemp,esclocbi1,dersc1,chuju,.false.)
6377 call spline1(x(2),pi-delta,delta,esclocbi0,esclocbi1,&
6378 dersc0(2),esclocbi,dersc02)
6379 call spline2(x(2),pi-delta,delta,dersc0(1),dersc1(1),&
6381 call splinthet(x(2),0.5d0*delta,ss,ssd)
6386 dersc(k)=ss*dersc(k)+(1.0d0-ss)*dersc0(k)
6388 dersc(2)=dersc(2)+ssd*(escloci-esclocbi)
6389 ! write (iout,*) 'i=',i,x(2)*rad2deg,escloci0,escloci,
6391 escloci=ss*escloci+(1.0d0-ss)*esclocbi
6393 ! write (iout,*) escloci
6394 else if (x(2).lt.delta) then
6398 call enesc(xtemp,escloci0,dersc0,ddersc0,.true.)
6400 call enesc(xtemp,escloci1,dersc1,ddummy,.false.)
6401 call spline1(x(2),delta,-delta,escloci0,escloci1,dersc0(2),&
6403 call spline2(x(2),delta,-delta,dersc0(1),dersc1(1),&
6404 ddersc0(1),dersc(1))
6405 call spline2(x(2),delta,-delta,dersc0(3),dersc1(3),&
6406 ddersc0(3),dersc(3))
6408 call enesc_bound(xtemp,esclocbi0,dersc0,dersc12,.true.)
6410 call enesc_bound(xtemp,esclocbi1,dersc1,chuju,.false.)
6411 call spline1(x(2),delta,-delta,esclocbi0,esclocbi1,&
6412 dersc0(2),esclocbi,dersc02)
6413 call spline2(x(2),delta,-delta,dersc0(1),dersc1(1),&
6418 call splinthet(x(2),0.5d0*delta,ss,ssd)
6420 dersc(k)=ss*dersc(k)+(1.0d0-ss)*dersc0(k)
6422 dersc(2)=dersc(2)+ssd*(escloci-esclocbi)
6423 ! write (iout,*) 'i=',i,x(2)*rad2deg,escloci0,escloci,
6425 escloci=ss*escloci+(1.0d0-ss)*esclocbi
6426 ! write (iout,*) escloci
6428 call enesc(x,escloci,dersc,ddummy,.false.)
6431 escloc=escloc+escloci
6432 if (energy_dec) write (iout,'(a6,i5,0pf7.3)') &
6434 ! write (iout,*) 'i=',i,' escloci=',escloci,' dersc=',dersc
6436 gloc(nphi+i-1,icg)=gloc(nphi+i-1,icg)+ &
6438 gloc(ialph(i,1),icg)=wscloc*dersc(2)
6439 gloc(ialph(i,1)+nside,icg)=wscloc*dersc(3)
6444 !-----------------------------------------------------------------------------
6445 subroutine enesc(x,escloci,dersc,ddersc,mixed)
6448 ! implicit real*8 (a-h,o-z)
6449 ! include 'DIMENSIONS'
6450 ! include 'COMMON.GEO'
6451 ! include 'COMMON.LOCAL'
6452 ! include 'COMMON.IOUNITS'
6453 !el common /sccalc/ time11,time12,time112,theti,it,nlobit
6454 real(kind=8),dimension(3) :: x,z,dersc,ddersc
6455 real(kind=8),dimension(3,nlobit,-1:1) :: Ax !(3,maxlob,-1:1)
6456 real(kind=8),dimension(nlobit,-1:1) :: contr !(maxlob,-1:1)
6457 real(kind=8) :: escloci
6460 integer :: j,iii,l,k !el,it,nlobit
6461 real(kind=8) :: escloc_i,x3,Axk,expfac,emin !el,theti,&
6462 !el time11,time12,time112
6463 ! write (iout,*) 'it=',it,' nlobit=',nlobit
6467 if (mixed) ddersc(j)=0.0d0
6471 ! Because of periodicity of the dependence of the SC energy in omega we have
6472 ! to add up the contributions from x(3)-2*pi, x(3), and x(3+2*pi).
6473 ! To avoid underflows, first compute & store the exponents.
6481 z(k)=x(k)-censc(k,j,it)
6486 Axk=Axk+gaussc(l,k,j,it)*z(l)
6492 expfac=expfac+Ax(k,j,iii)*z(k)
6500 ! As in the case of ebend, we want to avoid underflows in exponentiation and
6501 ! subsequent NaNs and INFs in energy calculation.
6502 ! Find the largest exponent
6506 if (emin.gt.contr(j,iii)) emin=contr(j,iii)
6510 !d print *,'it=',it,' emin=',emin
6512 ! Compute the contribution to SC energy and derivatives
6517 adexp=bsc(j,iabs(it))-0.5D0*contr(j,iii)+emin
6518 if(adexp.ne.adexp) adexp=1.0
6521 expfac=dexp(bsc(j,iabs(it))-0.5D0*contr(j,iii)+emin)
6523 !d print *,'j=',j,' expfac=',expfac
6524 escloc_i=escloc_i+expfac
6526 dersc(k)=dersc(k)+Ax(k,j,iii)*expfac
6530 ddersc(k)=ddersc(k)+(-Ax(2,j,iii)*Ax(k,j,iii) &
6531 +gaussc(k,2,j,it))*expfac
6538 dersc(1)=dersc(1)/cos(theti)**2
6539 ddersc(1)=ddersc(1)/cos(theti)**2
6542 escloci=-(dlog(escloc_i)-emin)
6544 dersc(j)=dersc(j)/escloc_i
6548 ddersc(j)=(ddersc(j)/escloc_i+dersc(2)*dersc(j))
6552 end subroutine enesc
6553 !-----------------------------------------------------------------------------
6554 subroutine enesc_bound(x,escloci,dersc,dersc12,mixed)
6557 ! implicit real*8 (a-h,o-z)
6558 ! include 'DIMENSIONS'
6559 ! include 'COMMON.GEO'
6560 ! include 'COMMON.LOCAL'
6561 ! include 'COMMON.IOUNITS'
6562 !el common /sccalc/ time11,time12,time112,theti,it,nlobit
6563 real(kind=8),dimension(3) :: x,z,dersc
6564 real(kind=8),dimension(3,nlobit) :: Ax !(3,maxlob)
6565 real(kind=8),dimension(nlobit) :: contr !(maxlob)
6566 real(kind=8) :: escloci,dersc12,emin
6569 integer :: j,k,l !el,it,nlobit
6570 real(kind=8) :: escloc_i,Axk,expfac !el,time11,time12,time112,theti
6580 z(k)=x(k)-censc(k,j,it)
6586 Axk=Axk+gaussc(l,k,j,it)*z(l)
6592 expfac=expfac+Ax(k,j)*z(k)
6597 ! As in the case of ebend, we want to avoid underflows in exponentiation and
6598 ! subsequent NaNs and INFs in energy calculation.
6599 ! Find the largest exponent
6602 if (emin.gt.contr(j)) emin=contr(j)
6606 ! Compute the contribution to SC energy and derivatives
6610 expfac=dexp(bsc(j,iabs(it))-0.5D0*contr(j)+emin)
6611 escloc_i=escloc_i+expfac
6613 dersc(k)=dersc(k)+Ax(k,j)*expfac
6615 if (mixed) dersc12=dersc12+(-Ax(2,j)*Ax(1,j) &
6616 +gaussc(1,2,j,it))*expfac
6620 dersc(1)=dersc(1)/cos(theti)**2
6621 dersc12=dersc12/cos(theti)**2
6622 escloci=-(dlog(escloc_i)-emin)
6624 dersc(j)=dersc(j)/escloc_i
6626 if (mixed) dersc12=(dersc12/escloc_i+dersc(2)*dersc(1))
6628 end subroutine enesc_bound
6630 !-----------------------------------------------------------------------------
6631 subroutine esc(escloc)
6632 ! Calculate the local energy of a side chain and its derivatives in the
6633 ! corresponding virtual-bond valence angles THETA and the spherical angles
6634 ! ALPHA and OMEGA derived from AM1 all-atom calculations.
6635 ! added by Urszula Kozlowska. 07/11/2007
6638 ! implicit real*8 (a-h,o-z)
6639 ! include 'DIMENSIONS'
6640 ! include 'COMMON.GEO'
6641 ! include 'COMMON.LOCAL'
6642 ! include 'COMMON.VAR'
6643 ! include 'COMMON.SCROT'
6644 ! include 'COMMON.INTERACT'
6645 ! include 'COMMON.DERIV'
6646 ! include 'COMMON.CHAIN'
6647 ! include 'COMMON.IOUNITS'
6648 ! include 'COMMON.NAMES'
6649 ! include 'COMMON.FFIELD'
6650 ! include 'COMMON.CONTROL'
6651 ! include 'COMMON.VECTORS'
6652 real(kind=8),dimension(3) :: x_prime,y_prime,z_prime
6653 real(kind=8),dimension(65) :: x
6654 real(kind=8) :: sumene,dsc_i,dp2_i,xx,yy,zz,sumene1,sumene2,sumene3,&
6655 sumene4,s1,s1_6,s2,s2_6,de_dxx,de_dyy,de_dzz,de_dt
6656 real(kind=8) :: s1_t,s1_6_t,s2_t,s2_6_t
6657 real(kind=8),dimension(3) :: dXX_Ci1,dYY_Ci1,dZZ_Ci1,dXX_Ci,dYY_Ci,&
6658 dZZ_Ci,dXX_XYZ,dYY_XYZ,dZZ_XYZ,dt_dCi,dt_dCi1
6660 integer :: i,j,k !el,it,nlobit
6661 real(kind=8) :: cosfac2,sinfac2,cosfac,sinfac,escloc,delta
6662 !el real(kind=8) :: time11,time12,time112,theti
6663 !el common /sccalc/ time11,time12,time112,theti,it,nlobit
6664 real(kind=8) :: dscp1,dscp2,pom_s1,pom_s16,pom_s2,pom_s26,&
6665 pom,pom_dx,pom_dy,pom_dt1,pom_dt2,pom1,pom2,&
6666 sumene1x,sumene2x,sumene3x,sumene4x,&
6667 sumene1y,sumene2y,sumene3y,sumene4y,cossc,cossc1,&
6670 real(kind=8) :: aincr,xxsave,sumenep,de_dxx_num,yysave,&
6671 de_dyy_num,zzsave,de_dzz_num,costsave,sintsave,&
6674 ! if (.not.allocated(gsclocx)) allocate(gsclocx(3,nres)) !(3,maxres)
6678 do i=loc_start,loc_end
6679 if (itype(i,1).eq.ntyp1) cycle
6680 costtab(i+1) =dcos(theta(i+1))
6681 sinttab(i+1) =dsqrt(1-costtab(i+1)*costtab(i+1))
6682 cost2tab(i+1)=dsqrt(0.5d0*(1.0d0+costtab(i+1)))
6683 sint2tab(i+1)=dsqrt(0.5d0*(1.0d0-costtab(i+1)))
6684 cosfac2=0.5d0/(1.0d0+costtab(i+1))
6685 cosfac=dsqrt(cosfac2)
6686 sinfac2=0.5d0/(1.0d0-costtab(i+1))
6687 sinfac=dsqrt(sinfac2)
6689 if (it.eq.10) goto 1
6691 ! Compute the axes of tghe local cartesian coordinates system; store in
6692 ! x_prime, y_prime and z_prime
6699 ! write(2,*) "dc_norm", dc_norm(1,i+nres),dc_norm(2,i+nres),
6700 ! & dc_norm(3,i+nres)
6702 x_prime(j) = (dc_norm(j,i) - dc_norm(j,i-1))*cosfac
6703 y_prime(j) = (dc_norm(j,i) + dc_norm(j,i-1))*sinfac
6706 z_prime(j) = -uz(j,i-1)*dsign(1.0d0,dfloat(itype(i,1)))
6709 ! write (2,*) "x_prime",(x_prime(j),j=1,3)
6710 ! write (2,*) "y_prime",(y_prime(j),j=1,3)
6711 ! write (2,*) "z_prime",(z_prime(j),j=1,3)
6712 ! write (2,*) "xx",scalar(x_prime(1),x_prime(1)),
6713 ! & " xy",scalar(x_prime(1),y_prime(1)),
6714 ! & " xz",scalar(x_prime(1),z_prime(1)),
6715 ! & " yy",scalar(y_prime(1),y_prime(1)),
6716 ! & " yz",scalar(y_prime(1),z_prime(1)),
6717 ! & " zz",scalar(z_prime(1),z_prime(1))
6719 ! Transform the unit vector of the ith side-chain centroid, dC_norm(*,i),
6720 ! to local coordinate system. Store in xx, yy, zz.
6726 xx = xx + x_prime(j)*dc_norm(j,i+nres)
6727 yy = yy + y_prime(j)*dc_norm(j,i+nres)
6728 zz = zz + z_prime(j)*dc_norm(j,i+nres)
6735 ! Compute the energy of the ith side cbain
6737 ! write (2,*) "xx",xx," yy",yy," zz",zz
6740 x(j) = sc_parmin(j,it)
6743 !c diagnostics - remove later
6745 yy1 = dsin(alph(2))*dcos(omeg(2))
6746 zz1 = -dsign(1.0,dfloat(itype(i,1)))*dsin(alph(2))*dsin(omeg(2))
6747 write(2,'(3f8.1,3f9.3,1x,3f9.3)') &
6748 alph(2)*rad2deg,omeg(2)*rad2deg,theta(3)*rad2deg,xx,yy,zz,&
6750 !," --- ", xx_w,yy_w,zz_w
6753 sumene1= x(1)+ x(2)*xx+ x(3)*yy+ x(4)*zz+ x(5)*xx**2 &
6754 + x(6)*yy**2+ x(7)*zz**2+ x(8)*xx*zz+ x(9)*xx*yy &
6756 sumene2= x(11) + x(12)*xx + x(13)*yy + x(14)*zz + x(15)*xx**2 &
6757 + x(16)*yy**2 + x(17)*zz**2 + x(18)*xx*zz + x(19)*xx*yy &
6759 sumene3= x(21) +x(22)*xx +x(23)*yy +x(24)*zz +x(25)*xx**2 &
6760 +x(26)*yy**2 +x(27)*zz**2 +x(28)*xx*zz +x(29)*xx*yy &
6761 +x(30)*yy*zz +x(31)*xx**3 +x(32)*yy**3 +x(33)*zz**3 &
6762 +x(34)*(xx**2)*yy +x(35)*(xx**2)*zz +x(36)*(yy**2)*xx &
6763 +x(37)*(yy**2)*zz +x(38)*(zz**2)*xx +x(39)*(zz**2)*yy &
6765 sumene4= x(41) +x(42)*xx +x(43)*yy +x(44)*zz +x(45)*xx**2 &
6766 +x(46)*yy**2 +x(47)*zz**2 +x(48)*xx*zz +x(49)*xx*yy &
6767 +x(50)*yy*zz +x(51)*xx**3 +x(52)*yy**3 +x(53)*zz**3 &
6768 +x(54)*(xx**2)*yy +x(55)*(xx**2)*zz +x(56)*(yy**2)*xx &
6769 +x(57)*(yy**2)*zz +x(58)*(zz**2)*xx +x(59)*(zz**2)*yy &
6771 dsc_i = 0.743d0+x(61)
6773 dscp1=dsqrt(dsc_i**2+dp2_i**2-2*dsc_i*dp2_i &
6774 *(xx*cost2tab(i+1)+yy*sint2tab(i+1)))
6775 dscp2=dsqrt(dsc_i**2+dp2_i**2-2*dsc_i*dp2_i &
6776 *(xx*cost2tab(i+1)-yy*sint2tab(i+1)))
6777 s1=(1+x(63))/(0.1d0 + dscp1)
6778 s1_6=(1+x(64))/(0.1d0 + dscp1**6)
6779 s2=(1+x(65))/(0.1d0 + dscp2)
6780 s2_6=(1+x(65))/(0.1d0 + dscp2**6)
6781 sumene = ( sumene3*sint2tab(i+1) + sumene1)*(s1+s1_6) &
6782 + (sumene4*cost2tab(i+1) +sumene2)*(s2+s2_6)
6783 ! write(2,'(i2," sumene",7f9.3)') i,sumene1,sumene2,sumene3,
6785 ! & dscp1,dscp2,sumene
6786 ! sumene = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
6787 escloc = escloc + sumene
6788 if (energy_dec) write (2,*) "i",i," itype",itype(i,1)," it",it, &
6789 " escloc",sumene,escloc,it,itype(i,1)
6790 ! write (2,*) "i",i," escloc",sumene,escloc,it,itype(i,1)
6795 ! This section to check the numerical derivatives of the energy of ith side
6796 ! chain in xx, yy, zz, and theta. Use the -DDEBUG compiler option or insert
6797 ! #define DEBUG in the code to turn it on.
6799 write (2,*) "sumene =",sumene
6803 write (2,*) xx,yy,zz
6804 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
6805 de_dxx_num=(sumenep-sumene)/aincr
6807 write (2,*) "xx+ sumene from enesc=",sumenep
6810 write (2,*) xx,yy,zz
6811 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
6812 de_dyy_num=(sumenep-sumene)/aincr
6814 write (2,*) "yy+ sumene from enesc=",sumenep
6817 write (2,*) xx,yy,zz
6818 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
6819 de_dzz_num=(sumenep-sumene)/aincr
6821 write (2,*) "zz+ sumene from enesc=",sumenep
6822 costsave=cost2tab(i+1)
6823 sintsave=sint2tab(i+1)
6824 cost2tab(i+1)=dcos(0.5d0*(theta(i+1)+aincr))
6825 sint2tab(i+1)=dsin(0.5d0*(theta(i+1)+aincr))
6826 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
6827 de_dt_num=(sumenep-sumene)/aincr
6828 write (2,*) " t+ sumene from enesc=",sumenep
6829 cost2tab(i+1)=costsave
6830 sint2tab(i+1)=sintsave
6831 ! End of diagnostics section.
6834 ! Compute the gradient of esc
6836 ! zz=zz*dsign(1.0,dfloat(itype(i,1)))
6837 pom_s1=(1.0d0+x(63))/(0.1d0 + dscp1)**2
6838 pom_s16=6*(1.0d0+x(64))/(0.1d0 + dscp1**6)**2
6839 pom_s2=(1.0d0+x(65))/(0.1d0 + dscp2)**2
6840 pom_s26=6*(1.0d0+x(65))/(0.1d0 + dscp2**6)**2
6841 pom_dx=dsc_i*dp2_i*cost2tab(i+1)
6842 pom_dy=dsc_i*dp2_i*sint2tab(i+1)
6843 pom_dt1=-0.5d0*dsc_i*dp2_i*(xx*sint2tab(i+1)-yy*cost2tab(i+1))
6844 pom_dt2=-0.5d0*dsc_i*dp2_i*(xx*sint2tab(i+1)+yy*cost2tab(i+1))
6845 pom1=(sumene3*sint2tab(i+1)+sumene1) &
6846 *(pom_s1/dscp1+pom_s16*dscp1**4)
6847 pom2=(sumene4*cost2tab(i+1)+sumene2) &
6848 *(pom_s2/dscp2+pom_s26*dscp2**4)
6849 sumene1x=x(2)+2*x(5)*xx+x(8)*zz+ x(9)*yy
6850 sumene3x=x(22)+2*x(25)*xx+x(28)*zz+x(29)*yy+3*x(31)*xx**2 &
6851 +2*x(34)*xx*yy +2*x(35)*xx*zz +x(36)*(yy**2) +x(38)*(zz**2) &
6853 sumene2x=x(12)+2*x(15)*xx+x(18)*zz+ x(19)*yy
6854 sumene4x=x(42)+2*x(45)*xx +x(48)*zz +x(49)*yy +3*x(51)*xx**2 &
6855 +2*x(54)*xx*yy+2*x(55)*xx*zz+x(56)*(yy**2)+x(58)*(zz**2) &
6857 de_dxx =(sumene1x+sumene3x*sint2tab(i+1))*(s1+s1_6) &
6858 +(sumene2x+sumene4x*cost2tab(i+1))*(s2+s2_6) &
6861 write(2,*), "de_dxx = ", de_dxx,de_dxx_num,itype(i,1)
6864 sumene1y=x(3) + 2*x(6)*yy + x(9)*xx + x(10)*zz
6865 sumene3y=x(23) +2*x(26)*yy +x(29)*xx +x(30)*zz +3*x(32)*yy**2 &
6866 +x(34)*(xx**2) +2*x(36)*yy*xx +2*x(37)*yy*zz +x(39)*(zz**2) &
6868 sumene2y=x(13) + 2*x(16)*yy + x(19)*xx + x(20)*zz
6869 sumene4y=x(43)+2*x(46)*yy+x(49)*xx +x(50)*zz &
6870 +3*x(52)*yy**2+x(54)*xx**2+2*x(56)*yy*xx +2*x(57)*yy*zz &
6871 +x(59)*zz**2 +x(60)*xx*zz
6872 de_dyy =(sumene1y+sumene3y*sint2tab(i+1))*(s1+s1_6) &
6873 +(sumene2y+sumene4y*cost2tab(i+1))*(s2+s2_6) &
6876 write(2,*), "de_dyy = ", de_dyy,de_dyy_num,itype(i,1)
6879 de_dzz =(x(24) +2*x(27)*zz +x(28)*xx +x(30)*yy &
6880 +3*x(33)*zz**2 +x(35)*xx**2 +x(37)*yy**2 +2*x(38)*zz*xx &
6881 +2*x(39)*zz*yy +x(40)*xx*yy)*sint2tab(i+1)*(s1+s1_6) &
6882 +(x(4) + 2*x(7)*zz+ x(8)*xx + x(10)*yy)*(s1+s1_6) &
6883 +(x(44)+2*x(47)*zz +x(48)*xx +x(50)*yy +3*x(53)*zz**2 &
6884 +x(55)*xx**2 +x(57)*(yy**2)+2*x(58)*zz*xx +2*x(59)*zz*yy &
6885 +x(60)*xx*yy)*cost2tab(i+1)*(s2+s2_6) &
6886 + ( x(14) + 2*x(17)*zz+ x(18)*xx + x(20)*yy)*(s2+s2_6)
6888 write(2,*), "de_dzz = ", de_dzz,de_dzz_num,itype(i,1)
6891 de_dt = 0.5d0*sumene3*cost2tab(i+1)*(s1+s1_6) &
6892 -0.5d0*sumene4*sint2tab(i+1)*(s2+s2_6) &
6893 +pom1*pom_dt1+pom2*pom_dt2
6895 write(2,*), "de_dt = ", de_dt,de_dt_num,itype(i,1)
6899 cossc=scalar(dc_norm(1,i),dc_norm(1,i+nres))
6900 cossc1=scalar(dc_norm(1,i-1),dc_norm(1,i+nres))
6901 cosfac2xx=cosfac2*xx
6902 sinfac2yy=sinfac2*yy
6904 dt_dCi(k) = -(dc_norm(k,i-1)+costtab(i+1)*dc_norm(k,i))* &
6906 dt_dCi1(k)= -(dc_norm(k,i)+costtab(i+1)*dc_norm(k,i-1))* &
6908 pom=(dC_norm(k,i+nres)-cossc*dC_norm(k,i))*vbld_inv(i+1)
6909 pom1=(dC_norm(k,i+nres)-cossc1*dC_norm(k,i-1))*vbld_inv(i)
6910 ! write (iout,*) "i",i," k",k," pom",pom," pom1",pom1,
6911 ! & " dt_dCi",dt_dCi(k)," dt_dCi1",dt_dCi1(k)
6912 ! write (iout,*) "dC_norm",(dC_norm(j,i),j=1,3),
6913 ! & (dC_norm(j,i-1),j=1,3)," vbld_inv",vbld_inv(i+1),vbld_inv(i)
6914 dXX_Ci(k)=pom*cosfac-dt_dCi(k)*cosfac2xx
6915 dXX_Ci1(k)=-pom1*cosfac-dt_dCi1(k)*cosfac2xx
6916 dYY_Ci(k)=pom*sinfac+dt_dCi(k)*sinfac2yy
6917 dYY_Ci1(k)=pom1*sinfac+dt_dCi1(k)*sinfac2yy
6921 dZZ_Ci(k)=dZZ_Ci(k)-uzgrad(j,k,2,i-1) &
6922 *dsign(1.0d0,dfloat(itype(i,1)))*dC_norm(j,i+nres)
6923 dZZ_Ci1(k)=dZZ_Ci1(k)-uzgrad(j,k,1,i-1) &
6924 *dsign(1.0d0,dfloat(itype(i,1)))*dC_norm(j,i+nres)
6927 dXX_XYZ(k)=vbld_inv(i+nres)*(x_prime(k)-xx*dC_norm(k,i+nres))
6928 dYY_XYZ(k)=vbld_inv(i+nres)*(y_prime(k)-yy*dC_norm(k,i+nres))
6929 dZZ_XYZ(k)=vbld_inv(i+nres)* &
6930 (z_prime(k)-zz*dC_norm(k,i+nres))
6932 dt_dCi(k) = -dt_dCi(k)/sinttab(i+1)
6933 dt_dCi1(k)= -dt_dCi1(k)/sinttab(i+1)
6937 dXX_Ctab(k,i)=dXX_Ci(k)
6938 dXX_C1tab(k,i)=dXX_Ci1(k)
6939 dYY_Ctab(k,i)=dYY_Ci(k)
6940 dYY_C1tab(k,i)=dYY_Ci1(k)
6941 dZZ_Ctab(k,i)=dZZ_Ci(k)
6942 dZZ_C1tab(k,i)=dZZ_Ci1(k)
6943 dXX_XYZtab(k,i)=dXX_XYZ(k)
6944 dYY_XYZtab(k,i)=dYY_XYZ(k)
6945 dZZ_XYZtab(k,i)=dZZ_XYZ(k)
6949 ! write (iout,*) "k",k," dxx_ci1",dxx_ci1(k)," dyy_ci1",
6950 ! & dyy_ci1(k)," dzz_ci1",dzz_ci1(k)
6951 ! write (iout,*) "k",k," dxx_ci",dxx_ci(k)," dyy_ci",
6952 ! & dyy_ci(k)," dzz_ci",dzz_ci(k)
6953 ! write (iout,*) "k",k," dt_dci",dt_dci(k)," dt_dci",
6955 ! write (iout,*) "k",k," dxx_XYZ",dxx_XYZ(k)," dyy_XYZ",
6956 ! & dyy_XYZ(k)," dzz_XYZ",dzz_XYZ(k)
6957 gscloc(k,i-1)=gscloc(k,i-1)+de_dxx*dxx_ci1(k) &
6958 +de_dyy*dyy_ci1(k)+de_dzz*dzz_ci1(k)+de_dt*dt_dCi1(k)
6959 gscloc(k,i)=gscloc(k,i)+de_dxx*dxx_Ci(k) &
6960 +de_dyy*dyy_Ci(k)+de_dzz*dzz_Ci(k)+de_dt*dt_dCi(k)
6961 gsclocx(k,i)= de_dxx*dxx_XYZ(k) &
6962 +de_dyy*dyy_XYZ(k)+de_dzz*dzz_XYZ(k)
6964 ! write(iout,*) "ENERGY GRAD = ", (gscloc(k,i-1),k=1,3),
6965 ! & (gscloc(k,i),k=1,3),(gsclocx(k,i),k=1,3)
6967 ! to check gradient call subroutine check_grad
6973 !-----------------------------------------------------------------------------
6974 real(kind=8) function enesc(x,xx,yy,zz,cost2,sint2)
6976 real(kind=8),dimension(65) :: x
6977 real(kind=8) :: xx,yy,zz,cost2,sint2,sumene1,sumene2,sumene3,&
6978 sumene4,sumene,dsc_i,dp2_i,dscp1,dscp2,s1,s1_6,s2,s2_6
6980 sumene1= x(1)+ x(2)*xx+ x(3)*yy+ x(4)*zz+ x(5)*xx**2 &
6981 + x(6)*yy**2+ x(7)*zz**2+ x(8)*xx*zz+ x(9)*xx*yy &
6983 sumene2= x(11) + x(12)*xx + x(13)*yy + x(14)*zz + x(15)*xx**2 &
6984 + x(16)*yy**2 + x(17)*zz**2 + x(18)*xx*zz + x(19)*xx*yy &
6986 sumene3= x(21) +x(22)*xx +x(23)*yy +x(24)*zz +x(25)*xx**2 &
6987 +x(26)*yy**2 +x(27)*zz**2 +x(28)*xx*zz +x(29)*xx*yy &
6988 +x(30)*yy*zz +x(31)*xx**3 +x(32)*yy**3 +x(33)*zz**3 &
6989 +x(34)*(xx**2)*yy +x(35)*(xx**2)*zz +x(36)*(yy**2)*xx &
6990 +x(37)*(yy**2)*zz +x(38)*(zz**2)*xx +x(39)*(zz**2)*yy &
6992 sumene4= x(41) +x(42)*xx +x(43)*yy +x(44)*zz +x(45)*xx**2 &
6993 +x(46)*yy**2 +x(47)*zz**2 +x(48)*xx*zz +x(49)*xx*yy &
6994 +x(50)*yy*zz +x(51)*xx**3 +x(52)*yy**3 +x(53)*zz**3 &
6995 +x(54)*(xx**2)*yy +x(55)*(xx**2)*zz +x(56)*(yy**2)*xx &
6996 +x(57)*(yy**2)*zz +x(58)*(zz**2)*xx +x(59)*(zz**2)*yy &
6998 dsc_i = 0.743d0+x(61)
7000 dscp1=dsqrt(dsc_i**2+dp2_i**2-2*dsc_i*dp2_i &
7001 *(xx*cost2+yy*sint2))
7002 dscp2=dsqrt(dsc_i**2+dp2_i**2-2*dsc_i*dp2_i &
7003 *(xx*cost2-yy*sint2))
7004 s1=(1+x(63))/(0.1d0 + dscp1)
7005 s1_6=(1+x(64))/(0.1d0 + dscp1**6)
7006 s2=(1+x(65))/(0.1d0 + dscp2)
7007 s2_6=(1+x(65))/(0.1d0 + dscp2**6)
7008 sumene = ( sumene3*sint2 + sumene1)*(s1+s1_6) &
7009 + (sumene4*cost2 +sumene2)*(s2+s2_6)
7014 !-----------------------------------------------------------------------------
7015 subroutine gcont(rij,r0ij,eps0ij,delta,fcont,fprimcont)
7017 ! This procedure calculates two-body contact function g(rij) and its derivative:
7020 ! g(rij) = esp0ij*(-0.9375*x+0.625*x**3-0.1875*x**5) ! -1 =< x =< 1
7023 ! where x=(rij-r0ij)/delta
7025 ! rij - interbody distance, r0ij - contact distance, eps0ij - contact energy
7028 real(kind=8) :: rij,r0ij,eps0ij,fcont,fprimcont
7029 real(kind=8) :: x,x2,x4,delta
7033 if (x.lt.-1.0D0) then
7036 else if (x.le.1.0D0) then
7039 fcont=eps0ij*(x*(-0.9375D0+0.6250D0*x2-0.1875D0*x4)+0.5D0)
7040 fprimcont=eps0ij * (-0.9375D0+1.8750D0*x2-0.9375D0*x4)/delta
7046 end subroutine gcont
7047 !-----------------------------------------------------------------------------
7048 subroutine splinthet(theti,delta,ss,ssder)
7049 ! implicit real*8 (a-h,o-z)
7050 ! include 'DIMENSIONS'
7051 ! include 'COMMON.VAR'
7052 ! include 'COMMON.GEO'
7053 real(kind=8) :: theti,delta,ss,ssder
7054 real(kind=8) :: thetup,thetlow
7057 if (theti.gt.pipol) then
7058 call gcont(theti,thetup,1.0d0,delta,ss,ssder)
7060 call gcont(-theti,-thetlow,1.0d0,delta,ss,ssder)
7064 end subroutine splinthet
7065 !-----------------------------------------------------------------------------
7066 subroutine spline1(x,x0,delta,f0,f1,fprim0,f,fprim)
7068 real(kind=8) :: x,x0,delta,f0,f1,fprim0,f,fprim
7069 real(kind=8) :: ksi,ksi2,ksi3,a1,a2,a3
7070 a1=fprim0*delta/(f1-f0)
7076 f=f0+(f1-f0)*ksi*(a1+ksi*(a2+a3*ksi))
7077 fprim=(f1-f0)/delta*(a1+ksi*(2*a2+3*ksi*a3))
7079 end subroutine spline1
7080 !-----------------------------------------------------------------------------
7081 subroutine spline2(x,x0,delta,f0x,f1x,fprim0x,fx)
7083 real(kind=8) :: x,x0,delta,f0x,f1x,fprim0x,fx
7084 real(kind=8) :: ksi,ksi2,ksi3,a1,a2,a3
7089 a2=3*(f1x-f0x)-2*fprim0x*delta
7090 a3=fprim0x*delta-2*(f1x-f0x)
7091 fx=f0x+a1*ksi+a2*ksi2+a3*ksi3
7093 end subroutine spline2
7094 !-----------------------------------------------------------------------------
7096 !-----------------------------------------------------------------------------
7097 subroutine etor(etors,edihcnstr)
7098 ! implicit real*8 (a-h,o-z)
7099 ! include 'DIMENSIONS'
7100 ! include 'COMMON.VAR'
7101 ! include 'COMMON.GEO'
7102 ! include 'COMMON.LOCAL'
7103 ! include 'COMMON.TORSION'
7104 ! include 'COMMON.INTERACT'
7105 ! include 'COMMON.DERIV'
7106 ! include 'COMMON.CHAIN'
7107 ! include 'COMMON.NAMES'
7108 ! include 'COMMON.IOUNITS'
7109 ! include 'COMMON.FFIELD'
7110 ! include 'COMMON.TORCNSTR'
7111 ! include 'COMMON.CONTROL'
7112 real(kind=8) :: etors,edihcnstr
7116 real(kind=8) :: phii,fac,etors_ii
7118 ! Set lprn=.true. for debugging
7122 do i=iphi_start,iphi_end
7124 if (itype(i-2,1).eq.ntyp1.or. itype(i-1,1).eq.ntyp1 &
7125 .or. itype(i,1).eq.ntyp1) cycle
7126 itori=itortyp(itype(i-2,1))
7127 itori1=itortyp(itype(i-1,1))
7130 ! Proline-Proline pair is a special case...
7131 if (itori.eq.3 .and. itori1.eq.3) then
7132 if (phii.gt.-dwapi3) then
7134 fac=1.0D0/(1.0D0-cosphi)
7135 etorsi=v1(1,3,3)*fac
7136 etorsi=etorsi+etorsi
7137 etors=etors+etorsi-v1(1,3,3)
7138 if (energy_dec) etors_ii=etors_ii+etorsi-v1(1,3,3)
7139 gloci=gloci-3*fac*etorsi*dsin(3*phii)
7142 v1ij=v1(j+1,itori,itori1)
7143 v2ij=v2(j+1,itori,itori1)
7146 etors=etors+v1ij*cosphi+v2ij*sinphi+dabs(v1ij)+dabs(v2ij)
7147 if (energy_dec) etors_ii=etors_ii+ &
7148 v2ij*sinphi+dabs(v1ij)+dabs(v2ij)
7149 gloci=gloci+j*(v2ij*cosphi-v1ij*sinphi)
7153 v1ij=v1(j,itori,itori1)
7154 v2ij=v2(j,itori,itori1)
7157 etors=etors+v1ij*cosphi+v2ij*sinphi+dabs(v1ij)+dabs(v2ij)
7158 if (energy_dec) etors_ii=etors_ii+ &
7159 v1ij*cosphi+v2ij*sinphi+dabs(v1ij)+dabs(v2ij)
7160 gloci=gloci+j*(v2ij*cosphi-v1ij*sinphi)
7163 if (energy_dec) write (iout,'(a6,i5,0pf7.3)') &
7166 write (iout,'(2(a3,2x,i3,2x),2i3,6f8.3/26x,6f8.3/)') &
7167 restyp(itype(i-2,1),1),i-2,restyp(itype(i-1,1),1),i-1,itori,itori1,&
7168 (v1(j,itori,itori1),j=1,6),(v2(j,itori,itori1),j=1,6)
7169 gloc(i-3,icg)=gloc(i-3,icg)+wtor*gloci
7170 ! write (iout,*) 'i=',i,' gloc=',gloc(i-3,icg)
7172 ! 6/20/98 - dihedral angle constraints
7175 itori=idih_constr(i)
7178 if (difi.gt.drange(i)) then
7180 edihcnstr=edihcnstr+0.25d0*ftors(i)*difi**4
7181 gloc(itori-3,icg)=gloc(itori-3,icg)+ftors(i)*difi**3
7182 else if (difi.lt.-drange(i)) then
7184 edihcnstr=edihcnstr+0.25d0*ftors(i)*difi**4
7185 gloc(itori-3,icg)=gloc(itori-3,icg)+ftors(i)*difi**3
7187 ! write (iout,'(2i5,2f8.3,2e14.5)') i,itori,rad2deg*phii,
7188 ! & rad2deg*difi,0.25d0*ftors*difi**4,gloc(itori-3,icg)
7190 ! write (iout,*) 'edihcnstr',edihcnstr
7193 !-----------------------------------------------------------------------------
7194 subroutine etor_d(etors_d)
7195 real(kind=8) :: etors_d
7198 end subroutine etor_d
7200 !-----------------------------------------------------------------------------
7201 subroutine etor(etors)
7202 ! implicit real*8 (a-h,o-z)
7203 ! include 'DIMENSIONS'
7204 ! include 'COMMON.VAR'
7205 ! include 'COMMON.GEO'
7206 ! include 'COMMON.LOCAL'
7207 ! include 'COMMON.TORSION'
7208 ! include 'COMMON.INTERACT'
7209 ! include 'COMMON.DERIV'
7210 ! include 'COMMON.CHAIN'
7211 ! include 'COMMON.NAMES'
7212 ! include 'COMMON.IOUNITS'
7213 ! include 'COMMON.FFIELD'
7214 ! include 'COMMON.TORCNSTR'
7215 ! include 'COMMON.CONTROL'
7216 real(kind=8) :: etors,edihcnstr
7219 integer :: i,j,iblock,itori,itori1
7220 real(kind=8) :: phii,gloci,v1ij,v2ij,cosphi,sinphi,&
7221 vl1ij,vl2ij,vl3ij,pom1,difi,etors_ii,pom
7222 ! Set lprn=.true. for debugging
7226 do i=iphi_start,iphi_end
7227 if (itype(i-2,1).eq.ntyp1 .or. itype(i-1,1).eq.ntyp1 &
7228 .or. itype(i-3,1).eq.ntyp1 &
7229 .or. itype(i,1).eq.ntyp1) cycle
7231 if (iabs(itype(i,1)).eq.20) then
7236 itori=itortyp(itype(i-2,1))
7237 itori1=itortyp(itype(i-1,1))
7240 ! Regular cosine and sine terms
7241 do j=1,nterm(itori,itori1,iblock)
7242 v1ij=v1(j,itori,itori1,iblock)
7243 v2ij=v2(j,itori,itori1,iblock)
7246 etors=etors+v1ij*cosphi+v2ij*sinphi
7247 if (energy_dec) etors_ii=etors_ii+ &
7248 v1ij*cosphi+v2ij*sinphi
7249 gloci=gloci+j*(v2ij*cosphi-v1ij*sinphi)
7253 ! E = SUM ----------------------------------- - v1
7254 ! [v2 cos(phi/2)+v3 sin(phi/2)]^2 + 1
7256 cosphi=dcos(0.5d0*phii)
7257 sinphi=dsin(0.5d0*phii)
7258 do j=1,nlor(itori,itori1,iblock)
7259 vl1ij=vlor1(j,itori,itori1)
7260 vl2ij=vlor2(j,itori,itori1)
7261 vl3ij=vlor3(j,itori,itori1)
7262 pom=vl2ij*cosphi+vl3ij*sinphi
7263 pom1=1.0d0/(pom*pom+1.0d0)
7264 etors=etors+vl1ij*pom1
7265 if (energy_dec) etors_ii=etors_ii+ &
7268 gloci=gloci+vl1ij*(vl3ij*cosphi-vl2ij*sinphi)*pom
7270 ! Subtract the constant term
7271 etors=etors-v0(itori,itori1,iblock)
7272 if (energy_dec) write (iout,'(a6,i5,0pf7.3)') &
7273 'etor',i,etors_ii-v0(itori,itori1,iblock)
7275 write (iout,'(2(a3,2x,i3,2x),2i3,6f8.3/26x,6f8.3/)') &
7276 restyp(itype(i-2,1),1),i-2,restyp(itype(i-1,1),1),i-1,itori,itori1,&
7277 (v1(j,itori,itori1,iblock),j=1,6),&
7278 (v2(j,itori,itori1,iblock),j=1,6)
7279 gloc(i-3,icg)=gloc(i-3,icg)+wtor*gloci
7280 ! write (iout,*) 'i=',i,' gloc=',gloc(i-3,icg)
7282 ! 6/20/98 - dihedral angle constraints
7285 !C The rigorous attempt to derive energy function
7286 !-------------------------------------------------------------------------------------------
7287 subroutine etor_kcc(etors)
7288 double precision c1(0:maxval_kcc),c2(0:maxval_kcc)
7289 real(kind=8) :: etors,glocig,glocit1,glocit2,sinthet1,&
7290 sinthet2,costhet1,costhet2,sint1t2,sint1t2n,phii,sinphi,cosphi,&
7291 sint1t2n1,sumvalc,gradvalct1,gradvalct2,sumvals,gradvalst1,&
7294 integer :: i,j,itori,itori1,nval,k,l
7296 if (lprn) write (iout,*) "etor_kcc tor_mode",tor_mode
7298 do i=iphi_start,iphi_end
7299 !C ANY TWO ARE DUMMY ATOMS in row CYCLE
7300 !c if (((itype(i-3).eq.ntyp1).and.(itype(i-2).eq.ntyp1)).or.
7301 !c & ((itype(i-2).eq.ntyp1).and.(itype(i-1).eq.ntyp1)) .or.
7302 !c & ((itype(i-1).eq.ntyp1).and.(itype(i).eq.ntyp1))) cycle
7303 if (itype(i-2,1).eq.ntyp1.or. itype(i-1,1).eq.ntyp1 &
7304 .or. itype(i,1).eq.ntyp1 .or. itype(i-3,1).eq.ntyp1) cycle
7305 itori=itortyp(itype(i-2,1))
7306 itori1=itortyp(itype(i-1,1))
7311 !C to avoid multiple devision by 2
7312 !c theti22=0.5d0*theta(i)
7313 !C theta 12 is the theta_1 /2
7314 !C theta 22 is theta_2 /2
7315 !c theti12=0.5d0*theta(i-1)
7316 !C and appropriate sinus function
7317 sinthet1=dsin(theta(i-1))
7318 sinthet2=dsin(theta(i))
7319 costhet1=dcos(theta(i-1))
7320 costhet2=dcos(theta(i))
7321 !C to speed up lets store its mutliplication
7322 sint1t2=sinthet2*sinthet1
7324 !C \sum_{i=1}^n (sin(theta_1) * sin(theta_2))^n * (c_n* cos(n*gamma)
7325 !C +d_n*sin(n*gamma)) *
7326 !C \sum_{i=1}^m (1+a_m*Tb_m(cos(theta_1 /2))+b_m*Tb_m(cos(theta_2 /2)))
7327 !C we have two sum 1) Non-Chebyshev which is with n and gamma
7328 nval=nterm_kcc_Tb(itori,itori1)
7334 c1(j)=c1(j-1)*costhet1
7335 c2(j)=c2(j-1)*costhet2
7339 do j=1,nterm_kcc(itori,itori1)
7343 sint1t2n=sint1t2n*sint1t2
7349 sumvalc=sumvalc+v1_kcc(l,k,j,itori1,itori)*c1(k)*c2(l)
7350 gradvalct1=gradvalct1+ &
7351 (k-1)*v1_kcc(l,k,j,itori1,itori)*c1(k-1)*c2(l)
7352 gradvalct2=gradvalct2+ &
7353 (l-1)*v1_kcc(l,k,j,itori1,itori)*c1(k)*c2(l-1)
7356 gradvalct1=-gradvalct1*sinthet1
7357 gradvalct2=-gradvalct2*sinthet2
7363 sumvals=sumvals+v2_kcc(l,k,j,itori1,itori)*c1(k)*c2(l)
7364 gradvalst1=gradvalst1+ &
7365 (k-1)*v2_kcc(l,k,j,itori1,itori)*c1(k-1)*c2(l)
7366 gradvalst2=gradvalst2+ &
7367 (l-1)*v2_kcc(l,k,j,itori1,itori)*c1(k)*c2(l-1)
7370 gradvalst1=-gradvalst1*sinthet1
7371 gradvalst2=-gradvalst2*sinthet2
7372 if (lprn) write (iout,*)j,"sumvalc",sumvalc," sumvals",sumvals
7373 etori=etori+sint1t2n*(sumvalc*cosphi+sumvals*sinphi)
7374 !C glocig is the gradient local i site in gamma
7375 glocig=glocig+j*sint1t2n*(sumvals*cosphi-sumvalc*sinphi)
7376 !C now gradient over theta_1
7377 glocit1=glocit1+sint1t2n*(gradvalct1*cosphi+gradvalst1*sinphi)&
7378 +j*sint1t2n1*costhet1*sinthet2*(sumvalc*cosphi+sumvals*sinphi)
7379 glocit2=glocit2+sint1t2n*(gradvalct2*cosphi+gradvalst2*sinphi)&
7380 +j*sint1t2n1*sinthet1*costhet2*(sumvalc*cosphi+sumvals*sinphi)
7383 gloc(i-3,icg)=gloc(i-3,icg)+wtor*glocig
7384 !C derivative over theta1
7385 gloc(nphi+i-3,icg)=gloc(nphi+i-3,icg)+wtor*glocit1
7386 !C now derivative over theta2
7387 gloc(nphi+i-2,icg)=gloc(nphi+i-2,icg)+wtor*glocit2
7389 write (iout,*) i-2,i-1,itype(i-2,1),itype(i-1,1),itori,itori1,&
7390 theta(i-1)*rad2deg,theta(i)*rad2deg,phii*rad2deg,etori
7391 write (iout,*) "c1",(c1(k),k=0,nval), &
7392 " c2",(c2(k),k=0,nval)
7396 end subroutine etor_kcc
7397 !------------------------------------------------------------------------------
7399 subroutine etor_constr(edihcnstr)
7400 real(kind=8) :: etors,edihcnstr
7403 integer :: i,j,iblock,itori,itori1
7404 real(kind=8) :: phii,gloci,v1ij,v2ij,cosphi,sinphi,&
7405 vl1ij,vl2ij,vl3ij,pom1,difi,etors_ii,pom,&
7406 gaudih_i,gauder_i,s,cos_i,dexpcos_i
7408 if (raw_psipred) then
7409 do i=idihconstr_start,idihconstr_end
7410 itori=idih_constr(i)
7412 gaudih_i=vpsipred(1,i)
7416 cos_i=(1.0d0-dcos(phii-phibound(j,i)))/s**2
7417 dexpcos_i=dexp(-cos_i*cos_i)
7418 gaudih_i=gaudih_i+vpsipred(j+1,i)*dexpcos_i
7419 gauder_i=gauder_i-2*vpsipred(j+1,i)*dsin(phii-phibound(j,i)) &
7420 *cos_i*dexpcos_i/s**2
7422 edihcnstr=edihcnstr-wdihc*dlog(gaudih_i)
7423 gloc(itori-3,icg)=gloc(itori-3,icg)-wdihc*gauder_i/gaudih_i
7425 write (iout,'(2i5,f8.3,f8.5,2(f8.5,2f8.3),f10.5)') &
7426 i,itori,phii*rad2deg,vpsipred(1,i),vpsipred(2,i),&
7427 phibound(1,i)*rad2deg,sdihed(1,i)*rad2deg,vpsipred(3,i),&
7428 phibound(2,i)*rad2deg,sdihed(2,i)*rad2deg,&
7429 -wdihc*dlog(gaudih_i)
7433 do i=idihconstr_start,idihconstr_end
7434 itori=idih_constr(i)
7436 difi=pinorm(phii-phi0(i))
7437 if (difi.gt.drange(i)) then
7439 edihcnstr=edihcnstr+0.25d0*ftors(i)*difi**4
7440 gloc(itori-3,icg)=gloc(itori-3,icg)+ftors(i)*difi**3
7441 else if (difi.lt.-drange(i)) then
7443 edihcnstr=edihcnstr+0.25d0*ftors(i)*difi**4
7444 gloc(itori-3,icg)=gloc(itori-3,icg)+ftors(i)*difi**3
7454 end subroutine etor_constr
7455 !-----------------------------------------------------------------------------
7456 subroutine etor_d(etors_d)
7457 ! 6/23/01 Compute double torsional energy
7458 ! implicit real*8 (a-h,o-z)
7459 ! include 'DIMENSIONS'
7460 ! include 'COMMON.VAR'
7461 ! include 'COMMON.GEO'
7462 ! include 'COMMON.LOCAL'
7463 ! include 'COMMON.TORSION'
7464 ! include 'COMMON.INTERACT'
7465 ! include 'COMMON.DERIV'
7466 ! include 'COMMON.CHAIN'
7467 ! include 'COMMON.NAMES'
7468 ! include 'COMMON.IOUNITS'
7469 ! include 'COMMON.FFIELD'
7470 ! include 'COMMON.TORCNSTR'
7471 real(kind=8) :: etors_d,etors_d_ii
7474 integer :: i,j,k,l,itori,itori1,itori2,iblock
7475 real(kind=8) :: phii,phii1,gloci1,gloci2,&
7476 v1cij,v1sij,v2cij,v2sij,cosphi1,sinphi1,&
7477 sinphi2,cosphi2,v1cdij,v2cdij,v1sdij,v2sdij,&
7478 cosphi1p2,cosphi1m2,sinphi1p2,sinphi1m2
7479 ! Set lprn=.true. for debugging
7483 ! write(iout,*) "a tu??"
7484 do i=iphid_start,iphid_end
7486 if (itype(i-2,1).eq.ntyp1 .or. itype(i-1,1).eq.ntyp1 &
7487 .or. itype(i-3,1).eq.ntyp1 &
7488 .or. itype(i,1).eq.ntyp1 .or. itype(i+1,1).eq.ntyp1) cycle
7489 itori=itortyp(itype(i-2,1))
7490 itori1=itortyp(itype(i-1,1))
7491 itori2=itortyp(itype(i,1))
7497 if (iabs(itype(i+1,1)).eq.20) iblock=2
7499 ! Regular cosine and sine terms
7500 do j=1,ntermd_1(itori,itori1,itori2,iblock)
7501 v1cij=v1c(1,j,itori,itori1,itori2,iblock)
7502 v1sij=v1s(1,j,itori,itori1,itori2,iblock)
7503 v2cij=v1c(2,j,itori,itori1,itori2,iblock)
7504 v2sij=v1s(2,j,itori,itori1,itori2,iblock)
7505 cosphi1=dcos(j*phii)
7506 sinphi1=dsin(j*phii)
7507 cosphi2=dcos(j*phii1)
7508 sinphi2=dsin(j*phii1)
7509 etors_d=etors_d+v1cij*cosphi1+v1sij*sinphi1+ &
7510 v2cij*cosphi2+v2sij*sinphi2
7511 if (energy_dec) etors_d_ii=etors_d_ii+ &
7512 v1cij*cosphi1+v1sij*sinphi1+v2cij*cosphi2+v2sij*sinphi2
7513 gloci1=gloci1+j*(v1sij*cosphi1-v1cij*sinphi1)
7514 gloci2=gloci2+j*(v2sij*cosphi2-v2cij*sinphi2)
7516 do k=2,ntermd_2(itori,itori1,itori2,iblock)
7518 v1cdij = v2c(k,l,itori,itori1,itori2,iblock)
7519 v2cdij = v2c(l,k,itori,itori1,itori2,iblock)
7520 v1sdij = v2s(k,l,itori,itori1,itori2,iblock)
7521 v2sdij = v2s(l,k,itori,itori1,itori2,iblock)
7522 cosphi1p2=dcos(l*phii+(k-l)*phii1)
7523 cosphi1m2=dcos(l*phii-(k-l)*phii1)
7524 sinphi1p2=dsin(l*phii+(k-l)*phii1)
7525 sinphi1m2=dsin(l*phii-(k-l)*phii1)
7526 etors_d=etors_d+v1cdij*cosphi1p2+v2cdij*cosphi1m2+ &
7527 v1sdij*sinphi1p2+v2sdij*sinphi1m2
7528 if (energy_dec) etors_d_ii=etors_d_ii+ &
7529 v1cdij*cosphi1p2+v2cdij*cosphi1m2+ &
7530 v1sdij*sinphi1p2+v2sdij*sinphi1m2
7531 gloci1=gloci1+l*(v1sdij*cosphi1p2+v2sdij*cosphi1m2 &
7532 -v1cdij*sinphi1p2-v2cdij*sinphi1m2)
7533 gloci2=gloci2+(k-l)*(v1sdij*cosphi1p2-v2sdij*cosphi1m2 &
7534 -v1cdij*sinphi1p2+v2cdij*sinphi1m2)
7537 if (energy_dec) write (iout,'(a6,i5,0pf7.3)') &
7538 'etor_d',i,etors_d_ii
7539 gloc(i-3,icg)=gloc(i-3,icg)+wtor_d*gloci1
7540 gloc(i-2,icg)=gloc(i-2,icg)+wtor_d*gloci2
7543 end subroutine etor_d
7546 subroutine ebend_kcc(etheta)
7548 double precision thybt1(maxang_kcc),etheta
7549 integer :: i,iti,j,ihelp
7550 real (kind=8) :: sinthet,costhet,sumth1thyb,gradthybt1
7551 !C Set lprn=.true. for debugging
7554 !C print *,"wchodze kcc"
7555 if (lprn) write (iout,*) "ebend_kcc tor_mode",tor_mode
7557 do i=ithet_start,ithet_end
7558 !c print *,i,itype(i-1),itype(i),itype(i-2)
7559 if ((itype(i-1,1).eq.ntyp1).or.itype(i-2,1).eq.ntyp1 &
7560 .or.itype(i,1).eq.ntyp1) cycle
7561 iti=iabs(itortyp(itype(i-1,1)))
7562 sinthet=dsin(theta(i))
7563 costhet=dcos(theta(i))
7564 do j=1,nbend_kcc_Tb(iti)
7565 thybt1(j)=v1bend_chyb(j,iti)
7567 sumth1thyb=v1bend_chyb(0,iti)+ &
7568 tschebyshev(1,nbend_kcc_Tb(iti),thybt1(1),costhet)
7569 if (lprn) write (iout,*) i-1,itype(i-1,1),iti,theta(i)*rad2deg,&
7571 ihelp=nbend_kcc_Tb(iti)-1
7572 gradthybt1=gradtschebyshev(0,ihelp,thybt1(1),costhet)
7573 etheta=etheta+sumth1thyb
7574 !C print *,sumth1thyb,gradthybt1,sinthet*(-0.5d0)
7575 gloc(nphi+i-2,icg)=gloc(nphi+i-2,icg)-wang*gradthybt1*sinthet
7578 end subroutine ebend_kcc
7580 !c-------------------------------------------------------------------------------------
7581 subroutine etheta_constr(ethetacnstr)
7582 real (kind=8) :: ethetacnstr,thetiii,difi
7585 !C print *,ithetaconstr_start,ithetaconstr_end,"TU"
7586 do i=ithetaconstr_start,ithetaconstr_end
7587 itheta=itheta_constr(i)
7588 thetiii=theta(itheta)
7589 difi=pinorm(thetiii-theta_constr0(i))
7590 if (difi.gt.theta_drange(i)) then
7591 difi=difi-theta_drange(i)
7592 ethetacnstr=ethetacnstr+0.25d0*for_thet_constr(i)*difi**4
7593 gloc(itheta+nphi-2,icg)=gloc(itheta+nphi-2,icg) &
7594 +for_thet_constr(i)*difi**3
7595 else if (difi.lt.-drange(i)) then
7597 ethetacnstr=ethetacnstr+0.25d0*for_thet_constr(i)*difi**4
7598 gloc(itheta+nphi-2,icg)=gloc(itheta+nphi-2,icg) &
7599 +for_thet_constr(i)*difi**3
7603 if (energy_dec) then
7604 write (iout,'(a6,2i5,4f8.3,2e14.5)') "ethetc",&
7605 i,itheta,rad2deg*thetiii,&
7606 rad2deg*theta_constr0(i), rad2deg*theta_drange(i),&
7607 rad2deg*difi,0.25d0*for_thet_constr(i)*difi**4,&
7608 gloc(itheta+nphi-2,icg)
7612 end subroutine etheta_constr
7614 !-----------------------------------------------------------------------------
7615 subroutine eback_sc_corr(esccor)
7616 ! 7/21/2007 Correlations between the backbone-local and side-chain-local
7617 ! conformational states; temporarily implemented as differences
7618 ! between UNRES torsional potentials (dependent on three types of
7619 ! residues) and the torsional potentials dependent on all 20 types
7620 ! of residues computed from AM1 energy surfaces of terminally-blocked
7621 ! amino-acid residues.
7622 ! implicit real*8 (a-h,o-z)
7623 ! include 'DIMENSIONS'
7624 ! include 'COMMON.VAR'
7625 ! include 'COMMON.GEO'
7626 ! include 'COMMON.LOCAL'
7627 ! include 'COMMON.TORSION'
7628 ! include 'COMMON.SCCOR'
7629 ! include 'COMMON.INTERACT'
7630 ! include 'COMMON.DERIV'
7631 ! include 'COMMON.CHAIN'
7632 ! include 'COMMON.NAMES'
7633 ! include 'COMMON.IOUNITS'
7634 ! include 'COMMON.FFIELD'
7635 ! include 'COMMON.CONTROL'
7636 real(kind=8) :: esccor,esccor_ii,phii,gloci,v1ij,v2ij,&
7639 integer :: i,interty,j,isccori,isccori1,intertyp
7640 ! Set lprn=.true. for debugging
7643 ! write (iout,*) "EBACK_SC_COR",itau_start,itau_end
7645 do i=itau_start,itau_end
7646 if ((itype(i-2,1).eq.ntyp1).or.(itype(i-1,1).eq.ntyp1)) cycle
7648 isccori=isccortyp(itype(i-2,1))
7649 isccori1=isccortyp(itype(i-1,1))
7651 ! write (iout,*) "EBACK_SC_COR",i,nterm_sccor(isccori,isccori1)
7653 do intertyp=1,3 !intertyp
7655 !c Added 09 May 2012 (Adasko)
7656 !c Intertyp means interaction type of backbone mainchain correlation:
7657 ! 1 = SC...Ca...Ca...Ca
7658 ! 2 = Ca...Ca...Ca...SC
7659 ! 3 = SC...Ca...Ca...SCi
7661 if (((intertyp.eq.3).and.((itype(i-2,1).eq.10).or. &
7662 (itype(i-1,1).eq.10).or.(itype(i-2,1).eq.ntyp1).or. &
7663 (itype(i-1,1).eq.ntyp1))) &
7664 .or. ((intertyp.eq.1).and.((itype(i-2,1).eq.10) &
7665 .or.(itype(i-2,1).eq.ntyp1).or.(itype(i-1,1).eq.ntyp1) &
7666 .or.(itype(i,1).eq.ntyp1))) &
7667 .or.((intertyp.eq.2).and.((itype(i-1,1).eq.10).or. &
7668 (itype(i-1,1).eq.ntyp1).or.(itype(i-2,1).eq.ntyp1).or. &
7669 (itype(i-3,1).eq.ntyp1)))) cycle
7670 if ((intertyp.eq.2).and.(i.eq.4).and.(itype(1,1).eq.ntyp1)) cycle
7671 if ((intertyp.eq.1).and.(i.eq.nres).and.(itype(nres,1).eq.ntyp1)) &
7673 do j=1,nterm_sccor(isccori,isccori1)
7674 v1ij=v1sccor(j,intertyp,isccori,isccori1)
7675 v2ij=v2sccor(j,intertyp,isccori,isccori1)
7676 cosphi=dcos(j*tauangle(intertyp,i))
7677 sinphi=dsin(j*tauangle(intertyp,i))
7678 if (energy_dec) esccor_ii=esccor_ii+v1ij*cosphi+v2ij*sinphi
7679 esccor=esccor+v1ij*cosphi+v2ij*sinphi
7680 gloci=gloci+j*(v2ij*cosphi-v1ij*sinphi)
7682 if (energy_dec) write (iout,'(a6,i5,i2,0pf7.3)') &
7683 'esccor',i,intertyp,esccor_ii
7684 ! write (iout,*) "EBACK_SC_COR",i,v1ij*cosphi+v2ij*sinphi,intertyp
7685 gloc_sc(intertyp,i-3,icg)=gloc_sc(intertyp,i-3,icg)+wsccor*gloci
7687 write (iout,'(2(a3,2x,i3,2x),2i3,6f8.3/26x,6f8.3/)') &
7688 restyp(itype(i-2,1),1),i-2,restyp(itype(i-1,1),1),i-1,isccori,isccori1,&
7689 (v1sccor(j,intertyp,isccori,isccori1),j=1,6),&
7690 (v2sccor(j,intertyp,isccori,isccori1),j=1,6)
7691 gsccor_loc(i-3)=gsccor_loc(i-3)+gloci
7696 end subroutine eback_sc_corr
7697 !-----------------------------------------------------------------------------
7698 subroutine multibody(ecorr)
7699 ! This subroutine calculates multi-body contributions to energy following
7700 ! the idea of Skolnick et al. If side chains I and J make a contact and
7701 ! at the same time side chains I+1 and J+1 make a contact, an extra
7702 ! contribution equal to sqrt(eps(i,j)*eps(i+1,j+1)) is added.
7703 ! implicit real*8 (a-h,o-z)
7704 ! include 'DIMENSIONS'
7705 ! include 'COMMON.IOUNITS'
7706 ! include 'COMMON.DERIV'
7707 ! include 'COMMON.INTERACT'
7708 ! include 'COMMON.CONTACTS'
7709 real(kind=8),dimension(3) :: gx,gx1
7711 real(kind=8) :: ecorr
7712 integer :: i,j,ishift,i1,num_conti,num_conti1,j1,jj,kk
7713 ! Set lprn=.true. for debugging
7717 write (iout,'(a)') 'Contact function values:'
7719 write (iout,'(i2,20(1x,i2,f10.5))') &
7720 i,(jcont(j,i),facont(j,i),j=1,num_cont(i))
7725 ! if (.not.allocated(gradcorr)) allocate(gradcorr(3,nres))
7726 ! if (.not.allocated(gradxorr)) allocate(gradxorr(3,nres))
7738 num_conti=num_cont(i)
7739 num_conti1=num_cont(i1)
7744 if (j1.eq.j+ishift .or. j1.eq.j-ishift) then
7745 !d write(iout,*)'i=',i,' j=',j,' i1=',i1,' j1=',j1,
7746 !d & ' ishift=',ishift
7747 ! Contacts I--J and I+ISHIFT--J+-ISHIFT1 occur simultaneously.
7748 ! The system gains extra energy.
7749 ecorr=ecorr+esccorr(i,j,i1,j1,jj,kk)
7750 endif ! j1==j+-ishift
7758 end subroutine multibody
7759 !-----------------------------------------------------------------------------
7760 real(kind=8) function esccorr(i,j,k,l,jj,kk)
7761 ! implicit real*8 (a-h,o-z)
7762 ! include 'DIMENSIONS'
7763 ! include 'COMMON.IOUNITS'
7764 ! include 'COMMON.DERIV'
7765 ! include 'COMMON.INTERACT'
7766 ! include 'COMMON.CONTACTS'
7767 real(kind=8),dimension(3) :: gx,gx1
7769 integer :: i,j,k,l,jj,kk,m,ll
7770 real(kind=8) :: eij,ekl
7774 !d write (iout,'(4i5,3f10.5)') i,j,k,l,eij,ekl,-eij*ekl
7775 ! Calculate the multi-body contribution to energy.
7776 ! Calculate multi-body contributions to the gradient.
7777 !d write (iout,'(2(2i3,3f10.5))')i,j,(gacont(m,jj,i),m=1,3),
7778 !d & k,l,(gacont(m,kk,k),m=1,3)
7780 gx(m) =ekl*gacont(m,jj,i)
7781 gx1(m)=eij*gacont(m,kk,k)
7782 gradxorr(m,i)=gradxorr(m,i)-gx(m)
7783 gradxorr(m,j)=gradxorr(m,j)+gx(m)
7784 gradxorr(m,k)=gradxorr(m,k)-gx1(m)
7785 gradxorr(m,l)=gradxorr(m,l)+gx1(m)
7789 gradcorr(ll,m)=gradcorr(ll,m)+gx(ll)
7794 gradcorr(ll,m)=gradcorr(ll,m)+gx1(ll)
7799 end function esccorr
7800 !-----------------------------------------------------------------------------
7801 subroutine multibody_hb(ecorr,ecorr5,ecorr6,n_corr,n_corr1)
7802 ! This subroutine calculates multi-body contributions to hydrogen-bonding
7803 ! implicit real*8 (a-h,o-z)
7804 ! include 'DIMENSIONS'
7805 ! include 'COMMON.IOUNITS'
7808 ! integer :: maxconts !max_cont=maxconts =nres/4
7809 integer,parameter :: max_dim=26
7810 integer :: source,CorrelType,CorrelID,CorrelType1,CorrelID1,Error
7811 real(kind=8) :: zapas_recv(max_dim,maxconts,nfgtasks) !(max_dim,maxconts,max_fg_procs)
7812 !el real(kind=8) :: zapas(max_dim,maxconts,nfgtasks)
7813 !el common /przechowalnia/ zapas
7814 integer :: status(MPI_STATUS_SIZE)
7815 integer,dimension((nres/4)*2) :: req !maxconts*2
7816 integer :: status_array(MPI_STATUS_SIZE,(nres/4)*2),nn,ireq,ierr
7818 ! include 'COMMON.SETUP'
7819 ! include 'COMMON.FFIELD'
7820 ! include 'COMMON.DERIV'
7821 ! include 'COMMON.INTERACT'
7822 ! include 'COMMON.CONTACTS'
7823 ! include 'COMMON.CONTROL'
7824 ! include 'COMMON.LOCAL'
7825 real(kind=8),dimension(3) :: gx,gx1
7826 real(kind=8) :: time00,ecorr,ecorr5,ecorr6
7827 logical :: lprn,ldone
7829 integer :: i,j,ii,k,n_corr,n_corr1,i1,num_conti,num_conti1,&
7830 jj,jp,kk,j1,jp1,jjc,iii,nnn,iproc
7832 ! Set lprn=.true. for debugging
7836 if(.not.allocated(zapas)) allocate(zapas(max_dim,maxconts,nfgtasks))
7839 if (nfgtasks.le.1) goto 30
7841 write (iout,'(a)') 'Contact function values before RECEIVE:'
7843 write (iout,'(2i3,50(1x,i2,f5.2))') &
7844 i,num_cont_hb(i),(jcont_hb(j,i),facont_hb(j,i),&
7849 do i=1,ntask_cont_from
7852 do i=1,ntask_cont_to
7855 ! write (iout,*) "ntask_cont_from",ntask_cont_from," ntask_cont_to",
7857 ! Make the list of contacts to send to send to other procesors
7858 ! write (iout,*) "limits",max0(iturn4_end-1,iatel_s),iturn3_end
7860 do i=iturn3_start,iturn3_end
7861 ! write (iout,*) "make contact list turn3",i," num_cont",
7863 call add_hb_contact(i,i+2,iturn3_sent_local(1,i))
7865 do i=iturn4_start,iturn4_end
7866 ! write (iout,*) "make contact list turn4",i," num_cont",
7868 call add_hb_contact(i,i+3,iturn4_sent_local(1,i))
7872 ! write (iout,*) "make contact list longrange",i,ii," num_cont",
7874 do j=1,num_cont_hb(i)
7877 iproc=iint_sent_local(k,jjc,ii)
7878 ! write (iout,*) "i",i," j",j," k",k," jjc",jjc," iproc",iproc
7879 if (iproc.gt.0) then
7880 ncont_sent(iproc)=ncont_sent(iproc)+1
7881 nn=ncont_sent(iproc)
7883 zapas(2,nn,iproc)=jjc
7884 zapas(3,nn,iproc)=facont_hb(j,i)
7885 zapas(4,nn,iproc)=ees0p(j,i)
7886 zapas(5,nn,iproc)=ees0m(j,i)
7887 zapas(6,nn,iproc)=gacont_hbr(1,j,i)
7888 zapas(7,nn,iproc)=gacont_hbr(2,j,i)
7889 zapas(8,nn,iproc)=gacont_hbr(3,j,i)
7890 zapas(9,nn,iproc)=gacontm_hb1(1,j,i)
7891 zapas(10,nn,iproc)=gacontm_hb1(2,j,i)
7892 zapas(11,nn,iproc)=gacontm_hb1(3,j,i)
7893 zapas(12,nn,iproc)=gacontp_hb1(1,j,i)
7894 zapas(13,nn,iproc)=gacontp_hb1(2,j,i)
7895 zapas(14,nn,iproc)=gacontp_hb1(3,j,i)
7896 zapas(15,nn,iproc)=gacontm_hb2(1,j,i)
7897 zapas(16,nn,iproc)=gacontm_hb2(2,j,i)
7898 zapas(17,nn,iproc)=gacontm_hb2(3,j,i)
7899 zapas(18,nn,iproc)=gacontp_hb2(1,j,i)
7900 zapas(19,nn,iproc)=gacontp_hb2(2,j,i)
7901 zapas(20,nn,iproc)=gacontp_hb2(3,j,i)
7902 zapas(21,nn,iproc)=gacontm_hb3(1,j,i)
7903 zapas(22,nn,iproc)=gacontm_hb3(2,j,i)
7904 zapas(23,nn,iproc)=gacontm_hb3(3,j,i)
7905 zapas(24,nn,iproc)=gacontp_hb3(1,j,i)
7906 zapas(25,nn,iproc)=gacontp_hb3(2,j,i)
7907 zapas(26,nn,iproc)=gacontp_hb3(3,j,i)
7914 "Numbers of contacts to be sent to other processors",&
7915 (ncont_sent(i),i=1,ntask_cont_to)
7916 write (iout,*) "Contacts sent"
7917 do ii=1,ntask_cont_to
7919 iproc=itask_cont_to(ii)
7920 write (iout,*) nn," contacts to processor",iproc,&
7921 " of CONT_TO_COMM group"
7923 write(iout,'(2f5.0,4f10.5)')(zapas(j,i,ii),j=1,5)
7931 CorrelID1=nfgtasks+fg_rank+1
7933 ! Receive the numbers of needed contacts from other processors
7934 do ii=1,ntask_cont_from
7935 iproc=itask_cont_from(ii)
7937 call MPI_Irecv(ncont_recv(ii),1,MPI_INTEGER,iproc,CorrelType,&
7938 FG_COMM,req(ireq),IERR)
7940 ! write (iout,*) "IRECV ended"
7942 ! Send the number of contacts needed by other processors
7943 do ii=1,ntask_cont_to
7944 iproc=itask_cont_to(ii)
7946 call MPI_Isend(ncont_sent(ii),1,MPI_INTEGER,iproc,CorrelType,&
7947 FG_COMM,req(ireq),IERR)
7949 ! write (iout,*) "ISEND ended"
7950 ! write (iout,*) "number of requests (nn)",ireq
7953 call MPI_Waitall(ireq,req,status_array,ierr)
7955 ! & "Numbers of contacts to be received from other processors",
7956 ! & (ncont_recv(i),i=1,ntask_cont_from)
7960 do ii=1,ntask_cont_from
7961 iproc=itask_cont_from(ii)
7963 ! write (iout,*) "Receiving",nn," contacts from processor",iproc,
7964 ! & " of CONT_TO_COMM group"
7968 call MPI_Irecv(zapas_recv(1,1,ii),nn*max_dim,&
7969 MPI_DOUBLE_PRECISION,iproc,CorrelType1,FG_COMM,req(ireq),IERR)
7970 ! write (iout,*) "ireq,req",ireq,req(ireq)
7973 ! Send the contacts to processors that need them
7974 do ii=1,ntask_cont_to
7975 iproc=itask_cont_to(ii)
7977 ! write (iout,*) nn," contacts to processor",iproc,
7978 ! & " of CONT_TO_COMM group"
7981 call MPI_Isend(zapas(1,1,ii),nn*max_dim,MPI_DOUBLE_PRECISION,&
7982 iproc,CorrelType1,FG_COMM,req(ireq),IERR)
7983 ! write (iout,*) "ireq,req",ireq,req(ireq)
7985 ! write(iout,'(2f5.0,4f10.5)')(zapas(j,i,ii),j=1,5)
7989 ! write (iout,*) "number of requests (contacts)",ireq
7990 ! write (iout,*) "req",(req(i),i=1,4)
7993 call MPI_Waitall(ireq,req,status_array,ierr)
7994 do iii=1,ntask_cont_from
7995 iproc=itask_cont_from(iii)
7998 write (iout,*) "Received",nn," contacts from processor",iproc,&
7999 " of CONT_FROM_COMM group"
8002 write(iout,'(2f5.0,4f10.5)')(zapas_recv(j,i,iii),j=1,5)
8007 ii=zapas_recv(1,i,iii)
8008 ! Flag the received contacts to prevent double-counting
8009 jj=-zapas_recv(2,i,iii)
8010 ! write (iout,*) "iii",iii," i",i," ii",ii," jj",jj
8012 nnn=num_cont_hb(ii)+1
8015 facont_hb(nnn,ii)=zapas_recv(3,i,iii)
8016 ees0p(nnn,ii)=zapas_recv(4,i,iii)
8017 ees0m(nnn,ii)=zapas_recv(5,i,iii)
8018 gacont_hbr(1,nnn,ii)=zapas_recv(6,i,iii)
8019 gacont_hbr(2,nnn,ii)=zapas_recv(7,i,iii)
8020 gacont_hbr(3,nnn,ii)=zapas_recv(8,i,iii)
8021 gacontm_hb1(1,nnn,ii)=zapas_recv(9,i,iii)
8022 gacontm_hb1(2,nnn,ii)=zapas_recv(10,i,iii)
8023 gacontm_hb1(3,nnn,ii)=zapas_recv(11,i,iii)
8024 gacontp_hb1(1,nnn,ii)=zapas_recv(12,i,iii)
8025 gacontp_hb1(2,nnn,ii)=zapas_recv(13,i,iii)
8026 gacontp_hb1(3,nnn,ii)=zapas_recv(14,i,iii)
8027 gacontm_hb2(1,nnn,ii)=zapas_recv(15,i,iii)
8028 gacontm_hb2(2,nnn,ii)=zapas_recv(16,i,iii)
8029 gacontm_hb2(3,nnn,ii)=zapas_recv(17,i,iii)
8030 gacontp_hb2(1,nnn,ii)=zapas_recv(18,i,iii)
8031 gacontp_hb2(2,nnn,ii)=zapas_recv(19,i,iii)
8032 gacontp_hb2(3,nnn,ii)=zapas_recv(20,i,iii)
8033 gacontm_hb3(1,nnn,ii)=zapas_recv(21,i,iii)
8034 gacontm_hb3(2,nnn,ii)=zapas_recv(22,i,iii)
8035 gacontm_hb3(3,nnn,ii)=zapas_recv(23,i,iii)
8036 gacontp_hb3(1,nnn,ii)=zapas_recv(24,i,iii)
8037 gacontp_hb3(2,nnn,ii)=zapas_recv(25,i,iii)
8038 gacontp_hb3(3,nnn,ii)=zapas_recv(26,i,iii)
8043 write (iout,'(a)') 'Contact function values after receive:'
8045 write (iout,'(2i3,50(1x,i3,f5.2))') &
8046 i,num_cont_hb(i),(jcont_hb(j,i),facont_hb(j,i),&
8054 write (iout,'(a)') 'Contact function values:'
8056 write (iout,'(2i3,50(1x,i3,f5.2))') &
8057 i,num_cont_hb(i),(jcont_hb(j,i),facont_hb(j,i),&
8063 ! if (.not.allocated(gradcorr)) allocate(gradcorr(3,nres))
8064 ! if (.not.allocated(gradxorr)) allocate(gradxorr(3,nres))
8065 ! Remove the loop below after debugging !!!
8072 ! Calculate the local-electrostatic correlation terms
8073 do i=min0(iatel_s,iturn4_start),max0(iatel_e,iturn3_end)
8075 num_conti=num_cont_hb(i)
8076 num_conti1=num_cont_hb(i+1)
8083 ! write (iout,*) 'i=',i,' j=',j,' i1=',i1,' j1=',j1,&
8084 ! ' jj=',jj,' kk=',kk,"jp=",jp,"jp1",jp1
8085 if ((j.gt.0 .and. j1.gt.0 .or. j.gt.0 .and. j1.lt.0 &
8086 .or. j.lt.0 .and. j1.gt.0) .and. &
8087 (jp1.eq.jp+1 .or. jp1.eq.jp-1)) then
8088 ! Contacts I-J and (I+1)-(J+1) or (I+1)-(J-1) occur simultaneously.
8089 ! The system gains extra energy.
8090 ecorr=ecorr+ehbcorr(i,jp,i+1,jp1,jj,kk,0.72D0,0.32D0)
8091 if (energy_dec) write (iout,'(a6,2i5,0pf7.3)') &
8092 'ecorrh',i,j,ehbcorr(i,jp,i+1,jp1,jj,kk,0.72D0,0.32D0)
8094 else if (j1.eq.j) then
8095 ! Contacts I-J and I-(J+1) occur simultaneously.
8096 ! The system loses extra energy.
8097 ! ecorr=ecorr+ehbcorr(i,j,i+1,j,jj,kk,0.60D0,-0.40D0)
8102 ! write (iout,*) 'i=',i,' j=',j,' i1=',i1,' j1=',j1,
8103 ! & ' jj=',jj,' kk=',kk
8105 ! Contacts I-J and (I+1)-J occur simultaneously.
8106 ! The system loses extra energy.
8107 ! ecorr=ecorr+ehbcorr(i,j,i,j+1,jj,kk,0.60D0,-0.40D0)
8113 end subroutine multibody_hb
8114 !-----------------------------------------------------------------------------
8115 subroutine add_hb_contact(ii,jj,itask)
8116 ! implicit real*8 (a-h,o-z)
8117 ! include "DIMENSIONS"
8118 ! include "COMMON.IOUNITS"
8119 ! include "COMMON.CONTACTS"
8120 ! integer,parameter :: maxconts=nres/4
8121 integer,parameter :: max_dim=26
8122 real(kind=8) :: zapas_recv(max_dim,maxconts,nfgtasks) !(max_dim,maxconts,max_fg_procs)
8123 ! real(kind=8) :: zapas(max_dim,maxconts,nfgtasks)
8124 ! common /przechowalnia/ zapas
8125 integer :: i,j,ii,jj,iproc,nn,jjc
8126 integer,dimension(4) :: itask
8127 ! write (iout,*) "itask",itask
8130 if (iproc.gt.0) then
8131 do j=1,num_cont_hb(ii)
8133 ! write (iout,*) "i",ii," j",jj," jjc",jjc
8135 ncont_sent(iproc)=ncont_sent(iproc)+1
8136 nn=ncont_sent(iproc)
8137 zapas(1,nn,iproc)=ii
8138 zapas(2,nn,iproc)=jjc
8139 zapas(3,nn,iproc)=facont_hb(j,ii)
8140 zapas(4,nn,iproc)=ees0p(j,ii)
8141 zapas(5,nn,iproc)=ees0m(j,ii)
8142 zapas(6,nn,iproc)=gacont_hbr(1,j,ii)
8143 zapas(7,nn,iproc)=gacont_hbr(2,j,ii)
8144 zapas(8,nn,iproc)=gacont_hbr(3,j,ii)
8145 zapas(9,nn,iproc)=gacontm_hb1(1,j,ii)
8146 zapas(10,nn,iproc)=gacontm_hb1(2,j,ii)
8147 zapas(11,nn,iproc)=gacontm_hb1(3,j,ii)
8148 zapas(12,nn,iproc)=gacontp_hb1(1,j,ii)
8149 zapas(13,nn,iproc)=gacontp_hb1(2,j,ii)
8150 zapas(14,nn,iproc)=gacontp_hb1(3,j,ii)
8151 zapas(15,nn,iproc)=gacontm_hb2(1,j,ii)
8152 zapas(16,nn,iproc)=gacontm_hb2(2,j,ii)
8153 zapas(17,nn,iproc)=gacontm_hb2(3,j,ii)
8154 zapas(18,nn,iproc)=gacontp_hb2(1,j,ii)
8155 zapas(19,nn,iproc)=gacontp_hb2(2,j,ii)
8156 zapas(20,nn,iproc)=gacontp_hb2(3,j,ii)
8157 zapas(21,nn,iproc)=gacontm_hb3(1,j,ii)
8158 zapas(22,nn,iproc)=gacontm_hb3(2,j,ii)
8159 zapas(23,nn,iproc)=gacontm_hb3(3,j,ii)
8160 zapas(24,nn,iproc)=gacontp_hb3(1,j,ii)
8161 zapas(25,nn,iproc)=gacontp_hb3(2,j,ii)
8162 zapas(26,nn,iproc)=gacontp_hb3(3,j,ii)
8169 end subroutine add_hb_contact
8170 !-----------------------------------------------------------------------------
8171 subroutine multibody_eello(ecorr,ecorr5,ecorr6,eturn6,n_corr,n_corr1)
8172 ! This subroutine calculates multi-body contributions to hydrogen-bonding
8173 ! implicit real*8 (a-h,o-z)
8174 ! include 'DIMENSIONS'
8175 ! include 'COMMON.IOUNITS'
8176 integer,parameter :: max_dim=70
8179 ! integer :: maxconts !max_cont=maxconts=nres/4
8180 integer :: source,CorrelType,CorrelID,CorrelType1,CorrelID1,Error
8181 real(kind=8) :: zapas_recv(max_dim,maxconts,nfgtasks)
8182 ! real(kind=8) :: zapas(max_dim,maxconts,nfgtasks) !(max_dim,maxconts,max_fg_procs)
8183 ! common /przechowalnia/ zapas
8184 integer :: status(MPI_STATUS_SIZE),req((nres/4)*2),&
8185 status_array(MPI_STATUS_SIZE,(nres/4)*2),jjc,iproc,ireq,nn,ind,&
8188 ! include 'COMMON.SETUP'
8189 ! include 'COMMON.FFIELD'
8190 ! include 'COMMON.DERIV'
8191 ! include 'COMMON.LOCAL'
8192 ! include 'COMMON.INTERACT'
8193 ! include 'COMMON.CONTACTS'
8194 ! include 'COMMON.CHAIN'
8195 ! include 'COMMON.CONTROL'
8196 real(kind=8),dimension(3) :: gx,gx1
8197 integer,dimension(nres) :: num_cont_hb_old
8198 logical :: lprn,ldone
8199 !EL double precision eello4,eello5,eelo6,eello_turn6
8200 !EL external eello4,eello5,eello6,eello_turn6
8202 integer :: i,ii,j,k,l,jj,kk,ll,mm,n_corr,n_corr1,num_conti,jp,&
8203 j1,jp1,i1,num_conti1
8204 real(kind=8) :: sqd1,sqd2,sred_geom,fac_prim1,fac_prim2,fprimcont
8205 real(kind=8) :: ecorr,ecorr5,ecorr6,eturn6
8207 ! Set lprn=.true. for debugging
8212 if(.not.allocated(zapas)) allocate(zapas(max_dim,maxconts,nfgtasks))
8214 num_cont_hb_old(i)=num_cont_hb(i)
8218 if (nfgtasks.le.1) goto 30
8220 write (iout,'(a)') 'Contact function values before RECEIVE:'
8222 write (iout,'(2i3,50(1x,i2,f5.2))') &
8223 i,num_cont_hb(i),(jcont_hb(j,i),facont_hb(j,i),&
8228 do i=1,ntask_cont_from
8231 do i=1,ntask_cont_to
8234 ! write (iout,*) "ntask_cont_from",ntask_cont_from," ntask_cont_to",
8236 ! Make the list of contacts to send to send to other procesors
8237 do i=iturn3_start,iturn3_end
8238 ! write (iout,*) "make contact list turn3",i," num_cont",
8240 call add_hb_contact_eello(i,i+2,iturn3_sent_local(1,i))
8242 do i=iturn4_start,iturn4_end
8243 ! write (iout,*) "make contact list turn4",i," num_cont",
8245 call add_hb_contact_eello(i,i+3,iturn4_sent_local(1,i))
8249 ! write (iout,*) "make contact list longrange",i,ii," num_cont",
8251 do j=1,num_cont_hb(i)
8254 iproc=iint_sent_local(k,jjc,ii)
8255 ! write (iout,*) "i",i," j",j," k",k," jjc",jjc," iproc",iproc
8256 if (iproc.ne.0) then
8257 ncont_sent(iproc)=ncont_sent(iproc)+1
8258 nn=ncont_sent(iproc)
8260 zapas(2,nn,iproc)=jjc
8261 zapas(3,nn,iproc)=d_cont(j,i)
8265 zapas(ind,nn,iproc)=grij_hb_cont(kk,j,i)
8270 zapas(ind,nn,iproc)=a_chuj(ll,kk,j,i)
8278 zapas(ind,nn,iproc)=a_chuj_der(mm,ll,kk,jj,j,i)
8289 "Numbers of contacts to be sent to other processors",&
8290 (ncont_sent(i),i=1,ntask_cont_to)
8291 write (iout,*) "Contacts sent"
8292 do ii=1,ntask_cont_to
8294 iproc=itask_cont_to(ii)
8295 write (iout,*) nn," contacts to processor",iproc,&
8296 " of CONT_TO_COMM group"
8298 write(iout,'(2f5.0,10f10.5)')(zapas(j,i,ii),j=1,10)
8306 CorrelID1=nfgtasks+fg_rank+1
8308 ! Receive the numbers of needed contacts from other processors
8309 do ii=1,ntask_cont_from
8310 iproc=itask_cont_from(ii)
8312 call MPI_Irecv(ncont_recv(ii),1,MPI_INTEGER,iproc,CorrelType,&
8313 FG_COMM,req(ireq),IERR)
8315 ! write (iout,*) "IRECV ended"
8317 ! Send the number of contacts needed by other processors
8318 do ii=1,ntask_cont_to
8319 iproc=itask_cont_to(ii)
8321 call MPI_Isend(ncont_sent(ii),1,MPI_INTEGER,iproc,CorrelType,&
8322 FG_COMM,req(ireq),IERR)
8324 ! write (iout,*) "ISEND ended"
8325 ! write (iout,*) "number of requests (nn)",ireq
8328 call MPI_Waitall(ireq,req,status_array,ierr)
8330 ! & "Numbers of contacts to be received from other processors",
8331 ! & (ncont_recv(i),i=1,ntask_cont_from)
8335 do ii=1,ntask_cont_from
8336 iproc=itask_cont_from(ii)
8338 ! write (iout,*) "Receiving",nn," contacts from processor",iproc,
8339 ! & " of CONT_TO_COMM group"
8343 call MPI_Irecv(zapas_recv(1,1,ii),nn*max_dim,&
8344 MPI_DOUBLE_PRECISION,iproc,CorrelType1,FG_COMM,req(ireq),IERR)
8345 ! write (iout,*) "ireq,req",ireq,req(ireq)
8348 ! Send the contacts to processors that need them
8349 do ii=1,ntask_cont_to
8350 iproc=itask_cont_to(ii)
8352 ! write (iout,*) nn," contacts to processor",iproc,
8353 ! & " of CONT_TO_COMM group"
8356 call MPI_Isend(zapas(1,1,ii),nn*max_dim,MPI_DOUBLE_PRECISION,&
8357 iproc,CorrelType1,FG_COMM,req(ireq),IERR)
8358 ! write (iout,*) "ireq,req",ireq,req(ireq)
8360 ! write(iout,'(2f5.0,4f10.5)')(zapas(j,i,ii),j=1,5)
8364 ! write (iout,*) "number of requests (contacts)",ireq
8365 ! write (iout,*) "req",(req(i),i=1,4)
8368 call MPI_Waitall(ireq,req,status_array,ierr)
8369 do iii=1,ntask_cont_from
8370 iproc=itask_cont_from(iii)
8373 write (iout,*) "Received",nn," contacts from processor",iproc,&
8374 " of CONT_FROM_COMM group"
8377 write(iout,'(2f5.0,10f10.5)')(zapas_recv(j,i,iii),j=1,10)
8382 ii=zapas_recv(1,i,iii)
8383 ! Flag the received contacts to prevent double-counting
8384 jj=-zapas_recv(2,i,iii)
8385 ! write (iout,*) "iii",iii," i",i," ii",ii," jj",jj
8387 nnn=num_cont_hb(ii)+1
8390 d_cont(nnn,ii)=zapas_recv(3,i,iii)
8394 grij_hb_cont(kk,nnn,ii)=zapas_recv(ind,i,iii)
8399 a_chuj(ll,kk,nnn,ii)=zapas_recv(ind,i,iii)
8407 a_chuj_der(mm,ll,kk,jj,nnn,ii)=zapas_recv(ind,i,iii)
8416 write (iout,'(a)') 'Contact function values after receive:'
8418 write (iout,'(2i3,50(1x,i3,5f6.3))') &
8419 i,num_cont_hb(i),(jcont_hb(j,i),d_cont(j,i),&
8420 ((a_chuj(ll,kk,j,i),ll=1,2),kk=1,2),j=1,num_cont_hb(i))
8427 write (iout,'(a)') 'Contact function values:'
8429 write (iout,'(2i3,50(1x,i2,5f6.3))') &
8430 i,num_cont_hb(i),(jcont_hb(j,i),d_cont(j,i),&
8431 ((a_chuj(ll,kk,j,i),ll=1,2),kk=1,2),j=1,num_cont_hb(i))
8438 ! if (.not.allocated(gradcorr)) allocate(gradcorr(3,nres))
8439 ! if (.not.allocated(gradxorr)) allocate(gradxorr(3,nres))
8440 ! Remove the loop below after debugging !!!
8447 ! Calculate the dipole-dipole interaction energies
8448 if (wcorr6.gt.0.0d0 .or. wturn6.gt.0.0d0) then
8449 do i=iatel_s,iatel_e+1
8450 num_conti=num_cont_hb(i)
8459 ! Calculate the local-electrostatic correlation terms
8460 ! write (iout,*) "gradcorr5 in eello5 before loop"
8462 ! write (iout,'(i5,3f10.5)')
8463 ! & iii,(gradcorr5(jjj,iii),jjj=1,3)
8465 do i=min0(iatel_s,iturn4_start),max0(iatel_e+1,iturn3_end+1)
8466 ! write (iout,*) "corr loop i",i
8468 num_conti=num_cont_hb(i)
8469 num_conti1=num_cont_hb(i+1)
8476 ! write (iout,*) 'i=',i,' j=',j,' i1=',i1,' j1=',j1,
8477 ! & ' jj=',jj,' kk=',kk
8478 ! if (j1.eq.j+1 .or. j1.eq.j-1) then
8479 if ((j.gt.0 .and. j1.gt.0 .or. j.gt.0 .and. j1.lt.0 &
8480 .or. j.lt.0 .and. j1.gt.0) .and. &
8481 (jp1.eq.jp+1 .or. jp1.eq.jp-1)) then
8482 ! Contacts I-J and (I+1)-(J+1) or (I+1)-(J-1) occur simultaneously.
8483 ! The system gains extra energy.
8485 sqd1=dsqrt(d_cont(jj,i))
8486 sqd2=dsqrt(d_cont(kk,i1))
8487 sred_geom = sqd1*sqd2
8488 IF (sred_geom.lt.cutoff_corr) THEN
8489 call gcont(sred_geom,r0_corr,1.0D0,delt_corr,&
8491 !d write (iout,*) 'i=',i,' j=',jp,' i1=',i1,' j1=',jp1,
8492 !d & ' jj=',jj,' kk=',kk
8493 fac_prim1=0.5d0*sqd2/sqd1*fprimcont
8494 fac_prim2=0.5d0*sqd1/sqd2*fprimcont
8496 g_contij(l,1)=fac_prim1*grij_hb_cont(l,jj,i)
8497 g_contij(l,2)=fac_prim2*grij_hb_cont(l,kk,i1)
8500 !d write (iout,*) 'sred_geom=',sred_geom,
8501 !d & ' ekont=',ekont,' fprim=',fprimcont,
8502 !d & ' fac_prim1',fac_prim1,' fac_prim2',fac_prim2
8503 !d write (iout,*) "g_contij",g_contij
8504 !d write (iout,*) "grij_hb_cont i",grij_hb_cont(:,jj,i)
8505 !d write (iout,*) "grij_hb_cont i1",grij_hb_cont(:,jj,i1)
8506 call calc_eello(i,jp,i+1,jp1,jj,kk)
8507 if (wcorr4.gt.0.0d0) &
8508 ecorr=ecorr+eello4(i,jp,i+1,jp1,jj,kk)
8509 if (energy_dec.and.wcorr4.gt.0.0d0) &
8510 write (iout,'(a6,4i5,0pf7.3)') &
8511 'ecorr4',i,j,i+1,j1,eello4(i,jp,i+1,jp1,jj,kk)
8512 ! write (iout,*) "gradcorr5 before eello5"
8514 ! write (iout,'(i5,3f10.5)')
8515 ! & iii,(gradcorr5(jjj,iii),jjj=1,3)
8517 if (wcorr5.gt.0.0d0) &
8518 ecorr5=ecorr5+eello5(i,jp,i+1,jp1,jj,kk)
8519 ! write (iout,*) "gradcorr5 after eello5"
8521 ! write (iout,'(i5,3f10.5)')
8522 ! & iii,(gradcorr5(jjj,iii),jjj=1,3)
8524 if (energy_dec.and.wcorr5.gt.0.0d0) &
8525 write (iout,'(a6,4i5,0pf7.3)') &
8526 'ecorr5',i,j,i+1,j1,eello5(i,jp,i+1,jp1,jj,kk)
8527 !d write(2,*)'wcorr6',wcorr6,' wturn6',wturn6
8528 !d write(2,*)'ijkl',i,jp,i+1,jp1
8529 if (wcorr6.gt.0.0d0 .and. (jp.ne.i+4 .or. jp1.ne.i+3 &
8530 .or. wturn6.eq.0.0d0))then
8531 !d write (iout,*) '******ecorr6: i,j,i+1,j1',i,j,i+1,j1
8532 ecorr6=ecorr6+eello6(i,jp,i+1,jp1,jj,kk)
8533 if (energy_dec) write (iout,'(a6,4i5,0pf7.3)') &
8534 'ecorr6',i,j,i+1,j1,eello6(i,jp,i+1,jp1,jj,kk)
8535 !d write (iout,*) 'ecorr',ecorr,' ecorr5=',ecorr5,
8536 !d & 'ecorr6=',ecorr6
8537 !d write (iout,'(4e15.5)') sred_geom,
8538 !d & dabs(eello4(i,jp,i+1,jp1,jj,kk)),
8539 !d & dabs(eello5(i,jp,i+1,jp1,jj,kk)),
8540 !d & dabs(eello6(i,jp,i+1,jp1,jj,kk))
8541 else if (wturn6.gt.0.0d0 &
8542 .and. (jp.eq.i+4 .and. jp1.eq.i+3)) then
8543 !d write (iout,*) '******eturn6: i,j,i+1,j1',i,jip,i+1,jp1
8544 eturn6=eturn6+eello_turn6(i,jj,kk)
8545 if (energy_dec) write (iout,'(a6,4i5,0pf7.3)') &
8546 'eturn6',i,j,i+1,j1,eello_turn6(i,jj,kk)
8547 !d write (2,*) 'multibody_eello:eturn6',eturn6
8556 num_cont_hb(i)=num_cont_hb_old(i)
8558 ! write (iout,*) "gradcorr5 in eello5"
8560 ! write (iout,'(i5,3f10.5)')
8561 ! & iii,(gradcorr5(jjj,iii),jjj=1,3)
8564 end subroutine multibody_eello
8565 !-----------------------------------------------------------------------------
8566 subroutine add_hb_contact_eello(ii,jj,itask)
8567 ! implicit real*8 (a-h,o-z)
8568 ! include "DIMENSIONS"
8569 ! include "COMMON.IOUNITS"
8570 ! include "COMMON.CONTACTS"
8571 ! integer,parameter :: maxconts=nres/4
8572 integer,parameter :: max_dim=70
8573 real(kind=8) :: zapas_recv(max_dim,maxconts,nfgtasks)
8574 ! real(kind=8) :: zapas(max_dim,maxconts,nfgtasks) !(max_dim,maxconts,max_fg_procs)
8575 ! common /przechowalnia/ zapas
8577 integer :: i,j,ii,jj,iproc,nn,ind,jjc,kk,ll,mm
8578 integer,dimension(4) ::itask
8579 ! write (iout,*) "itask",itask
8582 if (iproc.gt.0) then
8583 do j=1,num_cont_hb(ii)
8585 ! write (iout,*) "send turns i",ii," j",jj," jjc",jjc
8587 ncont_sent(iproc)=ncont_sent(iproc)+1
8588 nn=ncont_sent(iproc)
8589 zapas(1,nn,iproc)=ii
8590 zapas(2,nn,iproc)=jjc
8591 zapas(3,nn,iproc)=d_cont(j,ii)
8595 zapas(ind,nn,iproc)=grij_hb_cont(kk,j,ii)
8600 zapas(ind,nn,iproc)=a_chuj(ll,kk,j,ii)
8608 zapas(ind,nn,iproc)=a_chuj_der(mm,ll,kk,jj,j,ii)
8619 end subroutine add_hb_contact_eello
8620 !-----------------------------------------------------------------------------
8621 real(kind=8) function ehbcorr(i,j,k,l,jj,kk,coeffp,coeffm)
8622 ! implicit real*8 (a-h,o-z)
8623 ! include 'DIMENSIONS'
8624 ! include 'COMMON.IOUNITS'
8625 ! include 'COMMON.DERIV'
8626 ! include 'COMMON.INTERACT'
8627 ! include 'COMMON.CONTACTS'
8628 real(kind=8),dimension(3) :: gx,gx1
8631 integer :: i,j,k,l,jj,kk,ll,ilist,m, iresshield
8632 real(kind=8) :: coeffp,coeffm,eij,ekl,ees0pij,ees0pkl,ees0mij,&
8633 ees0mkl,ees,coeffpees0pij,coeffmees0mij,&
8634 coeffpees0pkl,coeffmees0mkl,gradlongij,gradlongkl, &
8645 ees=-(coeffp*ees0pij*ees0pkl+coeffm*ees0mij*ees0mkl)
8646 !d ees=-(coeffp*ees0pkl+coeffm*ees0mkl)
8647 ! Following 4 lines for diagnostics.
8652 ! write (iout,'(2(a,2i3,a,f10.5,a,2f10.5),a,f10.5,a,$)')
8653 ! & 'Contacts ',i,j,
8654 ! & ' eij',eij,' eesij',ees0pij,ees0mij,' and ',k,l
8655 ! & ,' fcont ',ekl,' eeskl',ees0pkl,ees0mkl,' energy=',ekont*ees,
8657 ! Calculate the multi-body contribution to energy.
8658 ! ecorr=ecorr+ekont*ees
8659 ! Calculate multi-body contributions to the gradient.
8660 coeffpees0pij=coeffp*ees0pij
8661 coeffmees0mij=coeffm*ees0mij
8662 coeffpees0pkl=coeffp*ees0pkl
8663 coeffmees0mkl=coeffm*ees0mkl
8665 !grad ghalfi=ees*ekl*gacont_hbr(ll,jj,i)
8666 gradcorr(ll,i)=gradcorr(ll,i) & !+0.5d0*ghalfi
8667 -ekont*(coeffpees0pkl*gacontp_hb1(ll,jj,i)+ &
8668 coeffmees0mkl*gacontm_hb1(ll,jj,i))
8669 gradcorr(ll,j)=gradcorr(ll,j) & !+0.5d0*ghalfi
8670 -ekont*(coeffpees0pkl*gacontp_hb2(ll,jj,i)+ &
8671 coeffmees0mkl*gacontm_hb2(ll,jj,i))
8672 !grad ghalfk=ees*eij*gacont_hbr(ll,kk,k)
8673 gradcorr(ll,k)=gradcorr(ll,k) & !+0.5d0*ghalfk
8674 -ekont*(coeffpees0pij*gacontp_hb1(ll,kk,k)+&
8675 coeffmees0mij*gacontm_hb1(ll,kk,k))
8676 gradcorr(ll,l)=gradcorr(ll,l) & !+0.5d0*ghalfk
8677 -ekont*(coeffpees0pij*gacontp_hb2(ll,kk,k)+ &
8678 coeffmees0mij*gacontm_hb2(ll,kk,k))
8679 gradlongij=ees*ekl*gacont_hbr(ll,jj,i)- &
8680 ekont*(coeffpees0pkl*gacontp_hb3(ll,jj,i)+ &
8681 coeffmees0mkl*gacontm_hb3(ll,jj,i))
8682 gradcorr_long(ll,j)=gradcorr_long(ll,j)+gradlongij
8683 gradcorr_long(ll,i)=gradcorr_long(ll,i)-gradlongij
8684 gradlongkl=ees*eij*gacont_hbr(ll,kk,k)- &
8685 ekont*(coeffpees0pij*gacontp_hb3(ll,kk,k)+ &
8686 coeffmees0mij*gacontm_hb3(ll,kk,k))
8687 gradcorr_long(ll,l)=gradcorr_long(ll,l)+gradlongkl
8688 gradcorr_long(ll,k)=gradcorr_long(ll,k)-gradlongkl
8689 ! write (iout,'(2f10.5,2x,$)') gradlongij,gradlongkl
8694 !grad gradcorr(ll,m)=gradcorr(ll,m)+
8695 !grad & ees*ekl*gacont_hbr(ll,jj,i)-
8696 !grad & ekont*(coeffp*ees0pkl*gacontp_hb3(ll,jj,i)+
8697 !grad & coeffm*ees0mkl*gacontm_hb3(ll,jj,i))
8702 !grad gradcorr(ll,m)=gradcorr(ll,m)+
8703 !grad & ees*eij*gacont_hbr(ll,kk,k)-
8704 !grad & ekont*(coeffp*ees0pij*gacontp_hb3(ll,kk,k)+
8705 !grad & coeffm*ees0mij*gacontm_hb3(ll,kk,k))
8708 ! write (iout,*) "ehbcorr",ekont*ees
8710 if (shield_mode.gt.0) then
8713 !C print *,i,j,fac_shield(i),fac_shield(j),
8714 !C &fac_shield(k),fac_shield(l)
8715 if ((fac_shield(i).gt.0).and.(fac_shield(j).gt.0).and. &
8716 (fac_shield(k).gt.0).and.(fac_shield(l).gt.0)) then
8717 do ilist=1,ishield_list(i)
8718 iresshield=shield_list(ilist,i)
8720 rlocshield=grad_shield_side(m,ilist,i)*ehbcorr/fac_shield(i)
8721 gshieldx_ec(m,iresshield)=gshieldx_ec(m,iresshield)+ &
8723 +grad_shield_loc(m,ilist,i)*ehbcorr/fac_shield(i)
8724 gshieldc_ec(m,iresshield-1)=gshieldc_ec(m,iresshield-1) &
8728 do ilist=1,ishield_list(j)
8729 iresshield=shield_list(ilist,j)
8731 rlocshield=grad_shield_side(m,ilist,j)*ehbcorr/fac_shield(j)
8732 gshieldx_ec(m,iresshield)=gshieldx_ec(m,iresshield)+ &
8734 +grad_shield_loc(m,ilist,j)*ehbcorr/fac_shield(j)
8735 gshieldc_ec(m,iresshield-1)=gshieldc_ec(m,iresshield-1) &
8740 do ilist=1,ishield_list(k)
8741 iresshield=shield_list(ilist,k)
8743 rlocshield=grad_shield_side(m,ilist,k)*ehbcorr/fac_shield(k)
8744 gshieldx_ec(m,iresshield)=gshieldx_ec(m,iresshield)+ &
8746 +grad_shield_loc(m,ilist,k)*ehbcorr/fac_shield(k)
8747 gshieldc_ec(m,iresshield-1)=gshieldc_ec(m,iresshield-1) &
8751 do ilist=1,ishield_list(l)
8752 iresshield=shield_list(ilist,l)
8754 rlocshield=grad_shield_side(m,ilist,l)*ehbcorr/fac_shield(l)
8755 gshieldx_ec(m,iresshield)=gshieldx_ec(m,iresshield)+ &
8757 +grad_shield_loc(m,ilist,l)*ehbcorr/fac_shield(l)
8758 gshieldc_ec(m,iresshield-1)=gshieldc_ec(m,iresshield-1) &
8763 gshieldc_ec(m,i)=gshieldc_ec(m,i)+ &
8764 grad_shield(m,i)*ehbcorr/fac_shield(i)
8765 gshieldc_ec(m,j)=gshieldc_ec(m,j)+ &
8766 grad_shield(m,j)*ehbcorr/fac_shield(j)
8767 gshieldc_ec(m,i-1)=gshieldc_ec(m,i-1)+ &
8768 grad_shield(m,i)*ehbcorr/fac_shield(i)
8769 gshieldc_ec(m,j-1)=gshieldc_ec(m,j-1)+ &
8770 grad_shield(m,j)*ehbcorr/fac_shield(j)
8772 gshieldc_ec(m,k)=gshieldc_ec(m,k)+ &
8773 grad_shield(m,k)*ehbcorr/fac_shield(k)
8774 gshieldc_ec(m,l)=gshieldc_ec(m,l)+ &
8775 grad_shield(m,l)*ehbcorr/fac_shield(l)
8776 gshieldc_ec(m,k-1)=gshieldc_ec(m,k-1)+ &
8777 grad_shield(m,k)*ehbcorr/fac_shield(k)
8778 gshieldc_ec(m,l-1)=gshieldc_ec(m,l-1)+ &
8779 grad_shield(m,l)*ehbcorr/fac_shield(l)
8785 end function ehbcorr
8787 !-----------------------------------------------------------------------------
8788 subroutine dipole(i,j,jj)
8789 ! implicit real*8 (a-h,o-z)
8790 ! include 'DIMENSIONS'
8791 ! include 'COMMON.IOUNITS'
8792 ! include 'COMMON.CHAIN'
8793 ! include 'COMMON.FFIELD'
8794 ! include 'COMMON.DERIV'
8795 ! include 'COMMON.INTERACT'
8796 ! include 'COMMON.CONTACTS'
8797 ! include 'COMMON.TORSION'
8798 ! include 'COMMON.VAR'
8799 ! include 'COMMON.GEO'
8800 real(kind=8),dimension(2,2) :: dipi,dipj,auxmat
8801 real(kind=8),dimension(2) :: dipderi,dipderj,auxvec
8802 integer :: i,j,jj,iii,jjj,kkk,lll,iti1,itj1
8804 allocate(dip(4,maxconts,nres),dipderg(4,maxconts,nres))
8805 allocate(dipderx(3,5,4,maxconts,nres))
8808 iti1 = itortyp(itype(i+1,1))
8809 if (j.lt.nres-1) then
8810 itj1 = itype2loc(itype(j+1,1))
8815 dipi(iii,1)=Ub2(iii,i)
8816 dipderi(iii)=Ub2der(iii,i)
8817 dipi(iii,2)=b1(iii,iti1)
8818 dipj(iii,1)=Ub2(iii,j)
8819 dipderj(iii)=Ub2der(iii,j)
8820 dipj(iii,2)=b1(iii,itj1)
8824 call matvec2(a_chuj(1,1,jj,i),dipj(1,iii),auxvec(1))
8827 dip(kkk,jj,i)=scalar2(dipi(1,jjj),auxvec(1))
8834 call matvec2(a_chuj_der(1,1,lll,kkk,jj,i),dipj(1,iii),&
8838 dipderx(lll,kkk,mmm,jj,i)=scalar2(dipi(1,jjj),auxvec(1))
8843 call transpose2(a_chuj(1,1,jj,i),auxmat(1,1))
8844 call matvec2(auxmat(1,1),dipderi(1),auxvec(1))
8846 dipderg(iii,jj,i)=scalar2(auxvec(1),dipj(1,iii))
8848 call matvec2(a_chuj(1,1,jj,i),dipderj(1),auxvec(1))
8850 dipderg(iii+2,jj,i)=scalar2(auxvec(1),dipi(1,iii))
8853 end subroutine dipole
8855 !-----------------------------------------------------------------------------
8856 subroutine calc_eello(i,j,k,l,jj,kk)
8858 ! This subroutine computes matrices and vectors needed to calculate
8859 ! the fourth-, fifth-, and sixth-order local-electrostatic terms.
8862 ! implicit real*8 (a-h,o-z)
8863 ! include 'DIMENSIONS'
8864 ! include 'COMMON.IOUNITS'
8865 ! include 'COMMON.CHAIN'
8866 ! include 'COMMON.DERIV'
8867 ! include 'COMMON.INTERACT'
8868 ! include 'COMMON.CONTACTS'
8869 ! include 'COMMON.TORSION'
8870 ! include 'COMMON.VAR'
8871 ! include 'COMMON.GEO'
8872 ! include 'COMMON.FFIELD'
8873 real(kind=8),dimension(2,2) :: aa1,aa2,aa1t,aa2t,auxmat
8874 real(kind=8),dimension(2,2,3,5) :: aa1tder,aa2tder
8875 integer :: i,j,k,l,jj,kk,iii,jjj,kkk,lll,iti,itk1,itj,itl,itl1,&
8878 !el common /kutas/ lprn
8879 !d write (iout,*) 'calc_eello: i=',i,' j=',j,' k=',k,' l=',l,
8880 !d & ' jj=',jj,' kk=',kk
8881 !d if (i.ne.2 .or. j.ne.4 .or. k.ne.3 .or. l.ne.5) return
8882 !d write (iout,*) "a_chujij",((a_chuj(iii,jjj,jj,i),iii=1,2),jjj=1,2)
8883 !d write (iout,*) "a_chujkl",((a_chuj(iii,jjj,kk,k),iii=1,2),jjj=1,2)
8886 aa1(iii,jjj)=a_chuj(iii,jjj,jj,i)
8887 aa2(iii,jjj)=a_chuj(iii,jjj,kk,k)
8890 call transpose2(aa1(1,1),aa1t(1,1))
8891 call transpose2(aa2(1,1),aa2t(1,1))
8894 call transpose2(a_chuj_der(1,1,lll,kkk,jj,i),&
8895 aa1tder(1,1,lll,kkk))
8896 call transpose2(a_chuj_der(1,1,lll,kkk,kk,k),&
8897 aa2tder(1,1,lll,kkk))
8901 ! parallel orientation of the two CA-CA-CA frames.
8903 iti=itortyp(itype(i,1))
8907 itk1=itortyp(itype(k+1,1))
8908 itj=itortyp(itype(j,1))
8909 if (l.lt.nres-1) then
8910 itl1=itortyp(itype(l+1,1))
8914 ! A1 kernel(j+1) A2T
8916 !d write (iout,'(3f10.5,5x,3f10.5)')
8917 !d & (EUg(iii,jjj,k),jjj=1,2),(EUg(iii,jjj,l),jjj=1,2)
8919 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),&
8920 aa2tder(1,1,1,1),1,.false.,EUg(1,1,l),EUgder(1,1,l),&
8921 AEA(1,1,1),AEAderg(1,1,1),AEAderx(1,1,1,1,1,1))
8922 ! Following matrices are needed only for 6-th order cumulants
8923 IF (wcorr6.gt.0.0d0) THEN
8924 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),&
8925 aa2tder(1,1,1,1),1,.false.,EUgC(1,1,l),EUgCder(1,1,l),&
8926 AECA(1,1,1),AECAderg(1,1,1),AECAderx(1,1,1,1,1,1))
8927 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),&
8928 aa2tder(1,1,1,1),2,.false.,Ug2DtEUg(1,1,l),&
8929 Ug2DtEUgder(1,1,1,l),ADtEA(1,1,1),ADtEAderg(1,1,1,1),&
8930 ADtEAderx(1,1,1,1,1,1))
8932 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),&
8933 aa2tder(1,1,1,1),2,.false.,DtUg2EUg(1,1,l),&
8934 DtUg2EUgder(1,1,1,l),ADtEA1(1,1,1),ADtEA1derg(1,1,1,1),&
8935 ADtEA1derx(1,1,1,1,1,1))
8937 ! End 6-th order cumulants
8940 !d write (2,*) 'In calc_eello6'
8942 !d write (2,*) 'iii=',iii
8944 !d write (2,*) 'kkk=',kkk
8946 !d write (2,'(3(2f10.5),5x)')
8947 !d & ((ADtEA1derx(jjj,mmm,lll,kkk,iii,1),mmm=1,2),lll=1,3)
8952 call transpose2(EUgder(1,1,k),auxmat(1,1))
8953 call matmat2(auxmat(1,1),AEA(1,1,1),EAEAderg(1,1,1,1))
8954 call transpose2(EUg(1,1,k),auxmat(1,1))
8955 call matmat2(auxmat(1,1),AEA(1,1,1),EAEA(1,1,1))
8956 call matmat2(auxmat(1,1),AEAderg(1,1,1),EAEAderg(1,1,2,1))
8960 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,1),&
8961 EAEAderx(1,1,lll,kkk,iii,1))
8965 ! A1T kernel(i+1) A2
8966 call kernel(aa1t(1,1),aa2(1,1),aa1tder(1,1,1,1),&
8967 a_chuj_der(1,1,1,1,kk,k),1,.false.,EUg(1,1,k),EUgder(1,1,k),&
8968 AEA(1,1,2),AEAderg(1,1,2),AEAderx(1,1,1,1,1,2))
8969 ! Following matrices are needed only for 6-th order cumulants
8970 IF (wcorr6.gt.0.0d0) THEN
8971 call kernel(aa1t(1,1),aa2(1,1),aa1tder(1,1,1,1),&
8972 a_chuj_der(1,1,1,1,kk,k),1,.false.,EUgC(1,1,k),EUgCder(1,1,k),&
8973 AECA(1,1,2),AECAderg(1,1,2),AECAderx(1,1,1,1,1,2))
8974 call kernel(aa1t(1,1),aa2(1,1),aa1tder(1,1,1,1),&
8975 a_chuj_der(1,1,1,1,kk,k),2,.false.,Ug2DtEUg(1,1,k),&
8976 Ug2DtEUgder(1,1,1,k),ADtEA(1,1,2),ADtEAderg(1,1,1,2),&
8977 ADtEAderx(1,1,1,1,1,2))
8978 call kernel(aa1t(1,1),aa2(1,1),aa1tder(1,1,1,1),&
8979 a_chuj_der(1,1,1,1,kk,k),2,.false.,DtUg2EUg(1,1,k),&
8980 DtUg2EUgder(1,1,1,k),ADtEA1(1,1,2),ADtEA1derg(1,1,1,2),&
8981 ADtEA1derx(1,1,1,1,1,2))
8983 ! End 6-th order cumulants
8984 call transpose2(EUgder(1,1,l),auxmat(1,1))
8985 call matmat2(auxmat(1,1),AEA(1,1,2),EAEAderg(1,1,1,2))
8986 call transpose2(EUg(1,1,l),auxmat(1,1))
8987 call matmat2(auxmat(1,1),AEA(1,1,2),EAEA(1,1,2))
8988 call matmat2(auxmat(1,1),AEAderg(1,1,2),EAEAderg(1,1,2,2))
8992 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,2),&
8993 EAEAderx(1,1,lll,kkk,iii,2))
8998 ! Calculate the vectors and their derivatives in virtual-bond dihedral angles.
8999 ! They are needed only when the fifth- or the sixth-order cumulants are
9001 IF (wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0) THEN
9002 call transpose2(AEA(1,1,1),auxmat(1,1))
9003 call matvec2(auxmat(1,1),b1(1,iti),AEAb1(1,1,1))
9004 call matvec2(auxmat(1,1),Ub2(1,i),AEAb2(1,1,1))
9005 call matvec2(auxmat(1,1),Ub2der(1,i),AEAb2derg(1,2,1,1))
9006 call transpose2(AEAderg(1,1,1),auxmat(1,1))
9007 call matvec2(auxmat(1,1),b1(1,iti),AEAb1derg(1,1,1))
9008 call matvec2(auxmat(1,1),Ub2(1,i),AEAb2derg(1,1,1,1))
9009 call matvec2(AEA(1,1,1),b1(1,itk1),AEAb1(1,2,1))
9010 call matvec2(AEAderg(1,1,1),b1(1,itk1),AEAb1derg(1,2,1))
9011 call matvec2(AEA(1,1,1),Ub2(1,k+1),AEAb2(1,2,1))
9012 call matvec2(AEAderg(1,1,1),Ub2(1,k+1),AEAb2derg(1,1,2,1))
9013 call matvec2(AEA(1,1,1),Ub2der(1,k+1),AEAb2derg(1,2,2,1))
9014 call transpose2(AEA(1,1,2),auxmat(1,1))
9015 call matvec2(auxmat(1,1),b1(1,itj),AEAb1(1,1,2))
9016 call matvec2(auxmat(1,1),Ub2(1,j),AEAb2(1,1,2))
9017 call matvec2(auxmat(1,1),Ub2der(1,j),AEAb2derg(1,2,1,2))
9018 call transpose2(AEAderg(1,1,2),auxmat(1,1))
9019 call matvec2(auxmat(1,1),b1(1,itj),AEAb1derg(1,1,2))
9020 call matvec2(auxmat(1,1),Ub2(1,j),AEAb2derg(1,1,1,2))
9021 call matvec2(AEA(1,1,2),b1(1,itl1),AEAb1(1,2,2))
9022 call matvec2(AEAderg(1,1,2),b1(1,itl1),AEAb1derg(1,2,2))
9023 call matvec2(AEA(1,1,2),Ub2(1,l+1),AEAb2(1,2,2))
9024 call matvec2(AEAderg(1,1,2),Ub2(1,l+1),AEAb2derg(1,1,2,2))
9025 call matvec2(AEA(1,1,2),Ub2der(1,l+1),AEAb2derg(1,2,2,2))
9026 ! Calculate the Cartesian derivatives of the vectors.
9030 call transpose2(AEAderx(1,1,lll,kkk,iii,1),auxmat(1,1))
9031 call matvec2(auxmat(1,1),b1(1,iti),&
9032 AEAb1derx(1,lll,kkk,iii,1,1))
9033 call matvec2(auxmat(1,1),Ub2(1,i),&
9034 AEAb2derx(1,lll,kkk,iii,1,1))
9035 call matvec2(AEAderx(1,1,lll,kkk,iii,1),b1(1,itk1),&
9036 AEAb1derx(1,lll,kkk,iii,2,1))
9037 call matvec2(AEAderx(1,1,lll,kkk,iii,1),Ub2(1,k+1),&
9038 AEAb2derx(1,lll,kkk,iii,2,1))
9039 call transpose2(AEAderx(1,1,lll,kkk,iii,2),auxmat(1,1))
9040 call matvec2(auxmat(1,1),b1(1,itj),&
9041 AEAb1derx(1,lll,kkk,iii,1,2))
9042 call matvec2(auxmat(1,1),Ub2(1,j),&
9043 AEAb2derx(1,lll,kkk,iii,1,2))
9044 call matvec2(AEAderx(1,1,lll,kkk,iii,2),b1(1,itl1),&
9045 AEAb1derx(1,lll,kkk,iii,2,2))
9046 call matvec2(AEAderx(1,1,lll,kkk,iii,2),Ub2(1,l+1),&
9047 AEAb2derx(1,lll,kkk,iii,2,2))
9054 ! Antiparallel orientation of the two CA-CA-CA frames.
9056 iti=itortyp(itype(i,1))
9060 itk1=itortyp(itype(k+1,1))
9061 itl=itortyp(itype(l,1))
9062 itj=itortyp(itype(j,1))
9063 if (j.lt.nres-1) then
9064 itj1=itortyp(itype(j+1,1))
9068 ! A2 kernel(j-1)T A1T
9069 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),&
9070 aa2tder(1,1,1,1),1,.true.,EUg(1,1,j),EUgder(1,1,j),&
9071 AEA(1,1,1),AEAderg(1,1,1),AEAderx(1,1,1,1,1,1))
9072 ! Following matrices are needed only for 6-th order cumulants
9073 IF (wcorr6.gt.0.0d0 .or. (wturn6.gt.0.0d0 .and. &
9074 j.eq.i+4 .and. l.eq.i+3)) THEN
9075 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),&
9076 aa2tder(1,1,1,1),1,.true.,EUgC(1,1,j),EUgCder(1,1,j),&
9077 AECA(1,1,1),AECAderg(1,1,1),AECAderx(1,1,1,1,1,1))
9078 call kernel(aa2(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),&
9079 aa2tder(1,1,1,1),2,.true.,Ug2DtEUg(1,1,j),&
9080 Ug2DtEUgder(1,1,1,j),ADtEA(1,1,1),ADtEAderg(1,1,1,1),&
9081 ADtEAderx(1,1,1,1,1,1))
9082 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),&
9083 aa2tder(1,1,1,1),2,.true.,DtUg2EUg(1,1,j),&
9084 DtUg2EUgder(1,1,1,j),ADtEA1(1,1,1),ADtEA1derg(1,1,1,1),&
9085 ADtEA1derx(1,1,1,1,1,1))
9087 ! End 6-th order cumulants
9088 call transpose2(EUgder(1,1,k),auxmat(1,1))
9089 call matmat2(auxmat(1,1),AEA(1,1,1),EAEAderg(1,1,1,1))
9090 call transpose2(EUg(1,1,k),auxmat(1,1))
9091 call matmat2(auxmat(1,1),AEA(1,1,1),EAEA(1,1,1))
9092 call matmat2(auxmat(1,1),AEAderg(1,1,1),EAEAderg(1,1,2,1))
9096 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,1),&
9097 EAEAderx(1,1,lll,kkk,iii,1))
9101 ! A2T kernel(i+1)T A1
9102 call kernel(aa2t(1,1),aa1(1,1),aa2tder(1,1,1,1),&
9103 a_chuj_der(1,1,1,1,jj,i),1,.true.,EUg(1,1,k),EUgder(1,1,k),&
9104 AEA(1,1,2),AEAderg(1,1,2),AEAderx(1,1,1,1,1,2))
9105 ! Following matrices are needed only for 6-th order cumulants
9106 IF (wcorr6.gt.0.0d0 .or. (wturn6.gt.0.0d0 .and. &
9107 j.eq.i+4 .and. l.eq.i+3)) THEN
9108 call kernel(aa2t(1,1),aa1(1,1),aa2tder(1,1,1,1),&
9109 a_chuj_der(1,1,1,1,jj,i),1,.true.,EUgC(1,1,k),EUgCder(1,1,k),&
9110 AECA(1,1,2),AECAderg(1,1,2),AECAderx(1,1,1,1,1,2))
9111 call kernel(aa2t(1,1),aa1(1,1),aa2tder(1,1,1,1),&
9112 a_chuj_der(1,1,1,1,jj,i),2,.true.,Ug2DtEUg(1,1,k),&
9113 Ug2DtEUgder(1,1,1,k),ADtEA(1,1,2),ADtEAderg(1,1,1,2),&
9114 ADtEAderx(1,1,1,1,1,2))
9115 call kernel(aa2t(1,1),aa1(1,1),aa2tder(1,1,1,1),&
9116 a_chuj_der(1,1,1,1,jj,i),2,.true.,DtUg2EUg(1,1,k),&
9117 DtUg2EUgder(1,1,1,k),ADtEA1(1,1,2),ADtEA1derg(1,1,1,2),&
9118 ADtEA1derx(1,1,1,1,1,2))
9120 ! End 6-th order cumulants
9121 call transpose2(EUgder(1,1,j),auxmat(1,1))
9122 call matmat2(auxmat(1,1),AEA(1,1,1),EAEAderg(1,1,2,2))
9123 call transpose2(EUg(1,1,j),auxmat(1,1))
9124 call matmat2(auxmat(1,1),AEA(1,1,2),EAEA(1,1,2))
9125 call matmat2(auxmat(1,1),AEAderg(1,1,2),EAEAderg(1,1,2,2))
9129 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,2),&
9130 EAEAderx(1,1,lll,kkk,iii,2))
9135 ! Calculate the vectors and their derivatives in virtual-bond dihedral angles.
9136 ! They are needed only when the fifth- or the sixth-order cumulants are
9138 IF (wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0 .or. &
9139 (wturn6.gt.0.0d0 .and. j.eq.i+4 .and. l.eq.i+3)) THEN
9140 call transpose2(AEA(1,1,1),auxmat(1,1))
9141 call matvec2(auxmat(1,1),b1(1,iti),AEAb1(1,1,1))
9142 call matvec2(auxmat(1,1),Ub2(1,i),AEAb2(1,1,1))
9143 call matvec2(auxmat(1,1),Ub2der(1,i),AEAb2derg(1,2,1,1))
9144 call transpose2(AEAderg(1,1,1),auxmat(1,1))
9145 call matvec2(auxmat(1,1),b1(1,iti),AEAb1derg(1,1,1))
9146 call matvec2(auxmat(1,1),Ub2(1,i),AEAb2derg(1,1,1,1))
9147 call matvec2(AEA(1,1,1),b1(1,itk1),AEAb1(1,2,1))
9148 call matvec2(AEAderg(1,1,1),b1(1,itk1),AEAb1derg(1,2,1))
9149 call matvec2(AEA(1,1,1),Ub2(1,k+1),AEAb2(1,2,1))
9150 call matvec2(AEAderg(1,1,1),Ub2(1,k+1),AEAb2derg(1,1,2,1))
9151 call matvec2(AEA(1,1,1),Ub2der(1,k+1),AEAb2derg(1,2,2,1))
9152 call transpose2(AEA(1,1,2),auxmat(1,1))
9153 call matvec2(auxmat(1,1),b1(1,itj1),AEAb1(1,1,2))
9154 call matvec2(auxmat(1,1),Ub2(1,l),AEAb2(1,1,2))
9155 call matvec2(auxmat(1,1),Ub2der(1,l),AEAb2derg(1,2,1,2))
9156 call transpose2(AEAderg(1,1,2),auxmat(1,1))
9157 call matvec2(auxmat(1,1),b1(1,itl),AEAb1(1,1,2))
9158 call matvec2(auxmat(1,1),Ub2(1,l),AEAb2derg(1,1,1,2))
9159 call matvec2(AEA(1,1,2),b1(1,itj1),AEAb1(1,2,2))
9160 call matvec2(AEAderg(1,1,2),b1(1,itj1),AEAb1derg(1,2,2))
9161 call matvec2(AEA(1,1,2),Ub2(1,j),AEAb2(1,2,2))
9162 call matvec2(AEAderg(1,1,2),Ub2(1,j),AEAb2derg(1,1,2,2))
9163 call matvec2(AEA(1,1,2),Ub2der(1,j),AEAb2derg(1,2,2,2))
9164 ! Calculate the Cartesian derivatives of the vectors.
9168 call transpose2(AEAderx(1,1,lll,kkk,iii,1),auxmat(1,1))
9169 call matvec2(auxmat(1,1),b1(1,iti),&
9170 AEAb1derx(1,lll,kkk,iii,1,1))
9171 call matvec2(auxmat(1,1),Ub2(1,i),&
9172 AEAb2derx(1,lll,kkk,iii,1,1))
9173 call matvec2(AEAderx(1,1,lll,kkk,iii,1),b1(1,itk1),&
9174 AEAb1derx(1,lll,kkk,iii,2,1))
9175 call matvec2(AEAderx(1,1,lll,kkk,iii,1),Ub2(1,k+1),&
9176 AEAb2derx(1,lll,kkk,iii,2,1))
9177 call transpose2(AEAderx(1,1,lll,kkk,iii,2),auxmat(1,1))
9178 call matvec2(auxmat(1,1),b1(1,itl),&
9179 AEAb1derx(1,lll,kkk,iii,1,2))
9180 call matvec2(auxmat(1,1),Ub2(1,l),&
9181 AEAb2derx(1,lll,kkk,iii,1,2))
9182 call matvec2(AEAderx(1,1,lll,kkk,iii,2),b1(1,itj1),&
9183 AEAb1derx(1,lll,kkk,iii,2,2))
9184 call matvec2(AEAderx(1,1,lll,kkk,iii,2),Ub2(1,j),&
9185 AEAb2derx(1,lll,kkk,iii,2,2))
9193 end subroutine calc_eello
9194 !-----------------------------------------------------------------------------
9195 subroutine kernel(aa1,aa2t,aa1derx,aa2tderx,nderg,transp,KK,KKderg,AKA,AKAderg,AKAderx)
9200 real(kind=8),dimension(2,2) :: aa1,aa2t,KK,AKA
9201 real(kind=8),dimension(2,2,3,5) :: aa1derx,aa2tderx
9202 real(kind=8),dimension(2,2,3,5,2) :: AKAderx
9203 real(kind=8),dimension(2,2,nderg) :: KKderg,AKAderg
9204 integer :: iii,kkk,lll
9207 !el common /kutas/ lprn
9208 call prodmat3(aa1(1,1),aa2t(1,1),KK(1,1),transp,AKA(1,1))
9210 call prodmat3(aa1(1,1),aa2t(1,1),KKderg(1,1,iii),transp,&
9213 !d if (lprn) write (2,*) 'In kernel'
9215 !d if (lprn) write (2,*) 'kkk=',kkk
9217 call prodmat3(aa1derx(1,1,lll,kkk),aa2t(1,1),&
9218 KK(1,1),transp,AKAderx(1,1,lll,kkk,1))
9220 !d write (2,*) 'lll=',lll
9221 !d write (2,*) 'iii=1'
9223 !d write (2,'(3(2f10.5),5x)')
9224 !d & (AKAderx(jjj,mmm,lll,kkk,1),mmm=1,2)
9227 call prodmat3(aa1(1,1),aa2tderx(1,1,lll,kkk),&
9228 KK(1,1),transp,AKAderx(1,1,lll,kkk,2))
9230 !d write (2,*) 'lll=',lll
9231 !d write (2,*) 'iii=2'
9233 !d write (2,'(3(2f10.5),5x)')
9234 !d & (AKAderx(jjj,mmm,lll,kkk,2),mmm=1,2)
9240 end subroutine kernel
9241 !-----------------------------------------------------------------------------
9242 real(kind=8) function eello4(i,j,k,l,jj,kk)
9243 ! implicit real*8 (a-h,o-z)
9244 ! include 'DIMENSIONS'
9245 ! include 'COMMON.IOUNITS'
9246 ! include 'COMMON.CHAIN'
9247 ! include 'COMMON.DERIV'
9248 ! include 'COMMON.INTERACT'
9249 ! include 'COMMON.CONTACTS'
9250 ! include 'COMMON.TORSION'
9251 ! include 'COMMON.VAR'
9252 ! include 'COMMON.GEO'
9253 real(kind=8),dimension(2,2) :: pizda
9254 real(kind=8),dimension(3) :: ggg1,ggg2
9255 real(kind=8) :: eel4,glongij,glongkl
9256 integer :: i,j,k,l,jj,kk,iii,kkk,lll,j1,j2,l1,l2,ll
9257 !d if (i.ne.1 .or. j.ne.5 .or. k.ne.2 .or.l.ne.4) then
9261 !d print *,'eello4:',i,j,k,l,jj,kk
9262 !d write (2,*) 'i',i,' j',j,' k',k,' l',l
9263 !d call checkint4(i,j,k,l,jj,kk,eel4_num)
9264 !old eij=facont_hb(jj,i)
9265 !old ekl=facont_hb(kk,k)
9267 eel4=-EAEA(1,1,1)-EAEA(2,2,1)
9268 !d eel41=-EAEA(1,1,2)-EAEA(2,2,2)
9269 gcorr_loc(k-1)=gcorr_loc(k-1) &
9270 -ekont*(EAEAderg(1,1,1,1)+EAEAderg(2,2,1,1))
9272 gcorr_loc(l-1)=gcorr_loc(l-1) &
9273 -ekont*(EAEAderg(1,1,2,1)+EAEAderg(2,2,2,1))
9275 gcorr_loc(j-1)=gcorr_loc(j-1) &
9276 -ekont*(EAEAderg(1,1,2,1)+EAEAderg(2,2,2,1))
9281 derx(lll,kkk,iii)=-EAEAderx(1,1,lll,kkk,iii,1) &
9282 -EAEAderx(2,2,lll,kkk,iii,1)
9283 !d derx(lll,kkk,iii)=0.0d0
9287 !d gcorr_loc(l-1)=0.0d0
9288 !d gcorr_loc(j-1)=0.0d0
9289 !d gcorr_loc(k-1)=0.0d0
9291 !d write (iout,*)'Contacts have occurred for peptide groups',
9292 !d & i,j,' fcont:',eij,' eij',' and ',k,l,
9293 !d & ' fcont ',ekl,' eel4=',eel4,' eel4_num',16*eel4_num
9294 if (j.lt.nres-1) then
9301 if (l.lt.nres-1) then
9309 !grad ggg1(ll)=eel4*g_contij(ll,1)
9310 !grad ggg2(ll)=eel4*g_contij(ll,2)
9311 glongij=eel4*g_contij(ll,1)+ekont*derx(ll,1,1)
9312 glongkl=eel4*g_contij(ll,2)+ekont*derx(ll,1,2)
9313 !grad ghalf=0.5d0*ggg1(ll)
9314 gradcorr(ll,i)=gradcorr(ll,i)+ekont*derx(ll,2,1)
9315 gradcorr(ll,i+1)=gradcorr(ll,i+1)+ekont*derx(ll,3,1)
9316 gradcorr(ll,j)=gradcorr(ll,j)+ekont*derx(ll,4,1)
9317 gradcorr(ll,j1)=gradcorr(ll,j1)+ekont*derx(ll,5,1)
9318 gradcorr_long(ll,j)=gradcorr_long(ll,j)+glongij
9319 gradcorr_long(ll,i)=gradcorr_long(ll,i)-glongij
9320 !grad ghalf=0.5d0*ggg2(ll)
9321 gradcorr(ll,k)=gradcorr(ll,k)+ekont*derx(ll,2,2)
9322 gradcorr(ll,k+1)=gradcorr(ll,k+1)+ekont*derx(ll,3,2)
9323 gradcorr(ll,l)=gradcorr(ll,l)+ekont*derx(ll,4,2)
9324 gradcorr(ll,l1)=gradcorr(ll,l1)+ekont*derx(ll,5,2)
9325 gradcorr_long(ll,l)=gradcorr_long(ll,l)+glongkl
9326 gradcorr_long(ll,k)=gradcorr_long(ll,k)-glongkl
9330 !grad gradcorr(ll,m)=gradcorr(ll,m)+ggg1(ll)
9335 !grad gradcorr(ll,m)=gradcorr(ll,m)+ggg2(ll)
9340 !grad gradcorr(ll,m)=gradcorr(ll,m)+ekont*derx(ll,1,1)
9345 !grad gradcorr(ll,m)=gradcorr(ll,m)+ekont*derx(ll,1,2)
9349 !d write (2,*) iii,gcorr_loc(iii)
9352 !d write (2,*) 'ekont',ekont
9353 !d write (iout,*) 'eello4',ekont*eel4
9356 !-----------------------------------------------------------------------------
9357 real(kind=8) function eello5(i,j,k,l,jj,kk)
9358 ! implicit real*8 (a-h,o-z)
9359 ! include 'DIMENSIONS'
9360 ! include 'COMMON.IOUNITS'
9361 ! include 'COMMON.CHAIN'
9362 ! include 'COMMON.DERIV'
9363 ! include 'COMMON.INTERACT'
9364 ! include 'COMMON.CONTACTS'
9365 ! include 'COMMON.TORSION'
9366 ! include 'COMMON.VAR'
9367 ! include 'COMMON.GEO'
9368 real(kind=8),dimension(2,2) :: pizda,auxmat,auxmat1
9369 real(kind=8),dimension(2) :: vv
9370 real(kind=8),dimension(3) :: ggg1,ggg2
9371 real(kind=8) :: eello5_1,eello5_2,eello5_3,eello5_4,eel5
9372 real(kind=8) :: gradcorr5ij,gradcorr5kl,ghalf
9373 integer :: i,j,k,l,jj,kk,itk,itl,itj,iii,kkk,lll,j1,j2,l1,l2,ll
9374 !CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
9379 ! /l\ / \ \ / \ / \ / C
9380 ! / \ / \ \ / \ / \ / C
9381 ! j| o |l1 | o | o| o | | o |o C
9382 ! \ |/k\| |/ \| / |/ \| |/ \| C
9383 ! \i/ \ / \ / / \ / \ C
9385 ! (I) (II) (III) (IV) C
9387 ! eello5_1 eello5_2 eello5_3 eello5_4 C
9389 ! Antiparallel chains C
9392 ! /j\ / \ \ / \ / \ / C
9393 ! / \ / \ \ / \ / \ / C
9394 ! j1| o |l | o | o| o | | o |o C
9395 ! \ |/k\| |/ \| / |/ \| |/ \| C
9396 ! \i/ \ / \ / / \ / \ C
9398 ! (I) (II) (III) (IV) C
9400 ! eello5_1 eello5_2 eello5_3 eello5_4 C
9402 ! o denotes a local interaction, vertical lines an electrostatic interaction. C
9404 !CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
9405 !d if (i.ne.2 .or. j.ne.6 .or. k.ne.3 .or. l.ne.5) then
9410 !d & 'EELLO5: Contacts have occurred for peptide groups',i,j,
9412 itk=itortyp(itype(k,1))
9413 itl=itortyp(itype(l,1))
9414 itj=itortyp(itype(j,1))
9419 !d call checkint5(i,j,k,l,jj,kk,eel5_1_num,eel5_2_num,
9420 !d & eel5_3_num,eel5_4_num)
9424 derx(lll,kkk,iii)=0.0d0
9428 !d eij=facont_hb(jj,i)
9429 !d ekl=facont_hb(kk,k)
9431 !d write (iout,*)'Contacts have occurred for peptide groups',
9432 !d & i,j,' fcont:',eij,' eij',' and ',k,l
9434 ! Contribution from the graph I.
9435 !d write (2,*) 'AEA ',AEA(1,1,1),AEA(2,1,1),AEA(1,2,1),AEA(2,2,1)
9436 !d write (2,*) 'AEAb2',AEAb2(1,1,1),AEAb2(2,1,1)
9437 call transpose2(EUg(1,1,k),auxmat(1,1))
9438 call matmat2(AEA(1,1,1),auxmat(1,1),pizda(1,1))
9439 vv(1)=pizda(1,1)-pizda(2,2)
9440 vv(2)=pizda(1,2)+pizda(2,1)
9441 eello5_1=scalar2(AEAb2(1,1,1),Ub2(1,k)) &
9442 +0.5d0*scalar2(vv(1),Dtobr2(1,i))
9443 ! Explicit gradient in virtual-dihedral angles.
9444 if (i.gt.1) g_corr5_loc(i-1)=g_corr5_loc(i-1) &
9445 +ekont*(scalar2(AEAb2derg(1,2,1,1),Ub2(1,k)) &
9446 +0.5d0*scalar2(vv(1),Dtobr2der(1,i)))
9447 call transpose2(EUgder(1,1,k),auxmat1(1,1))
9448 call matmat2(AEA(1,1,1),auxmat1(1,1),pizda(1,1))
9449 vv(1)=pizda(1,1)-pizda(2,2)
9450 vv(2)=pizda(1,2)+pizda(2,1)
9451 g_corr5_loc(k-1)=g_corr5_loc(k-1) &
9452 +ekont*(scalar2(AEAb2(1,1,1),Ub2der(1,k)) &
9453 +0.5d0*scalar2(vv(1),Dtobr2(1,i)))
9454 call matmat2(AEAderg(1,1,1),auxmat(1,1),pizda(1,1))
9455 vv(1)=pizda(1,1)-pizda(2,2)
9456 vv(2)=pizda(1,2)+pizda(2,1)
9458 if (l.lt.nres-1) g_corr5_loc(l-1)=g_corr5_loc(l-1) &
9459 +ekont*(scalar2(AEAb2derg(1,1,1,1),Ub2(1,k)) &
9460 +0.5d0*scalar2(vv(1),Dtobr2(1,i)))
9462 if (j.lt.nres-1) g_corr5_loc(j-1)=g_corr5_loc(j-1) &
9463 +ekont*(scalar2(AEAb2derg(1,1,1,1),Ub2(1,k)) &
9464 +0.5d0*scalar2(vv(1),Dtobr2(1,i)))
9466 ! Cartesian gradient
9470 call matmat2(AEAderx(1,1,lll,kkk,iii,1),auxmat(1,1),&
9472 vv(1)=pizda(1,1)-pizda(2,2)
9473 vv(2)=pizda(1,2)+pizda(2,1)
9474 derx(lll,kkk,iii)=derx(lll,kkk,iii) &
9475 +scalar2(AEAb2derx(1,lll,kkk,iii,1,1),Ub2(1,k)) &
9476 +0.5d0*scalar2(vv(1),Dtobr2(1,i))
9482 ! Contribution from graph II
9483 call transpose2(EE(1,1,itk),auxmat(1,1))
9484 call matmat2(auxmat(1,1),AEA(1,1,1),pizda(1,1))
9485 vv(1)=pizda(1,1)+pizda(2,2)
9486 vv(2)=pizda(2,1)-pizda(1,2)
9487 eello5_2=scalar2(AEAb1(1,2,1),b1(1,itk)) &
9488 -0.5d0*scalar2(vv(1),Ctobr(1,k))
9489 ! Explicit gradient in virtual-dihedral angles.
9490 g_corr5_loc(k-1)=g_corr5_loc(k-1) &
9491 -0.5d0*ekont*scalar2(vv(1),Ctobrder(1,k))
9492 call matmat2(auxmat(1,1),AEAderg(1,1,1),pizda(1,1))
9493 vv(1)=pizda(1,1)+pizda(2,2)
9494 vv(2)=pizda(2,1)-pizda(1,2)
9496 g_corr5_loc(l-1)=g_corr5_loc(l-1) &
9497 +ekont*(scalar2(AEAb1derg(1,2,1),b1(1,itk)) &
9498 -0.5d0*scalar2(vv(1),Ctobr(1,k)))
9500 g_corr5_loc(j-1)=g_corr5_loc(j-1) &
9501 +ekont*(scalar2(AEAb1derg(1,2,1),b1(1,itk)) &
9502 -0.5d0*scalar2(vv(1),Ctobr(1,k)))
9504 ! Cartesian gradient
9508 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,1),&
9510 vv(1)=pizda(1,1)+pizda(2,2)
9511 vv(2)=pizda(2,1)-pizda(1,2)
9512 derx(lll,kkk,iii)=derx(lll,kkk,iii) &
9513 +scalar2(AEAb1derx(1,lll,kkk,iii,2,1),b1(1,itk)) &
9514 -0.5d0*scalar2(vv(1),Ctobr(1,k))
9522 ! Parallel orientation
9523 ! Contribution from graph III
9524 call transpose2(EUg(1,1,l),auxmat(1,1))
9525 call matmat2(AEA(1,1,2),auxmat(1,1),pizda(1,1))
9526 vv(1)=pizda(1,1)-pizda(2,2)
9527 vv(2)=pizda(1,2)+pizda(2,1)
9528 eello5_3=scalar2(AEAb2(1,1,2),Ub2(1,l)) &
9529 +0.5d0*scalar2(vv(1),Dtobr2(1,j))
9530 ! Explicit gradient in virtual-dihedral angles.
9531 g_corr5_loc(j-1)=g_corr5_loc(j-1) &
9532 +ekont*(scalar2(AEAb2derg(1,2,1,2),Ub2(1,l)) &
9533 +0.5d0*scalar2(vv(1),Dtobr2der(1,j)))
9534 call matmat2(AEAderg(1,1,2),auxmat(1,1),pizda(1,1))
9535 vv(1)=pizda(1,1)-pizda(2,2)
9536 vv(2)=pizda(1,2)+pizda(2,1)
9537 g_corr5_loc(k-1)=g_corr5_loc(k-1) &
9538 +ekont*(scalar2(AEAb2derg(1,1,1,2),Ub2(1,l)) &
9539 +0.5d0*scalar2(vv(1),Dtobr2(1,j)))
9540 call transpose2(EUgder(1,1,l),auxmat1(1,1))
9541 call matmat2(AEA(1,1,2),auxmat1(1,1),pizda(1,1))
9542 vv(1)=pizda(1,1)-pizda(2,2)
9543 vv(2)=pizda(1,2)+pizda(2,1)
9544 g_corr5_loc(l-1)=g_corr5_loc(l-1) &
9545 +ekont*(scalar2(AEAb2(1,1,2),Ub2der(1,l)) &
9546 +0.5d0*scalar2(vv(1),Dtobr2(1,j)))
9547 ! Cartesian gradient
9551 call matmat2(AEAderx(1,1,lll,kkk,iii,2),auxmat(1,1),&
9553 vv(1)=pizda(1,1)-pizda(2,2)
9554 vv(2)=pizda(1,2)+pizda(2,1)
9555 derx(lll,kkk,iii)=derx(lll,kkk,iii) &
9556 +scalar2(AEAb2derx(1,lll,kkk,iii,1,2),Ub2(1,l)) &
9557 +0.5d0*scalar2(vv(1),Dtobr2(1,j))
9562 ! Contribution from graph IV
9564 call transpose2(EE(1,1,itl),auxmat(1,1))
9565 call matmat2(auxmat(1,1),AEA(1,1,2),pizda(1,1))
9566 vv(1)=pizda(1,1)+pizda(2,2)
9567 vv(2)=pizda(2,1)-pizda(1,2)
9568 eello5_4=scalar2(AEAb1(1,2,2),b1(1,itl)) &
9569 -0.5d0*scalar2(vv(1),Ctobr(1,l))
9570 ! Explicit gradient in virtual-dihedral angles.
9571 g_corr5_loc(l-1)=g_corr5_loc(l-1) &
9572 -0.5d0*ekont*scalar2(vv(1),Ctobrder(1,l))
9573 call matmat2(auxmat(1,1),AEAderg(1,1,2),pizda(1,1))
9574 vv(1)=pizda(1,1)+pizda(2,2)
9575 vv(2)=pizda(2,1)-pizda(1,2)
9576 g_corr5_loc(k-1)=g_corr5_loc(k-1) &
9577 +ekont*(scalar2(AEAb1derg(1,2,2),b1(1,itl)) &
9578 -0.5d0*scalar2(vv(1),Ctobr(1,l)))
9579 ! Cartesian gradient
9583 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,2),&
9585 vv(1)=pizda(1,1)+pizda(2,2)
9586 vv(2)=pizda(2,1)-pizda(1,2)
9587 derx(lll,kkk,iii)=derx(lll,kkk,iii) &
9588 +scalar2(AEAb1derx(1,lll,kkk,iii,2,2),b1(1,itl)) &
9589 -0.5d0*scalar2(vv(1),Ctobr(1,l))
9594 ! Antiparallel orientation
9595 ! Contribution from graph III
9597 call transpose2(EUg(1,1,j),auxmat(1,1))
9598 call matmat2(AEA(1,1,2),auxmat(1,1),pizda(1,1))
9599 vv(1)=pizda(1,1)-pizda(2,2)
9600 vv(2)=pizda(1,2)+pizda(2,1)
9601 eello5_3=scalar2(AEAb2(1,1,2),Ub2(1,j)) &
9602 +0.5d0*scalar2(vv(1),Dtobr2(1,l))
9603 ! Explicit gradient in virtual-dihedral angles.
9604 g_corr5_loc(l-1)=g_corr5_loc(l-1) &
9605 +ekont*(scalar2(AEAb2derg(1,2,1,2),Ub2(1,j)) &
9606 +0.5d0*scalar2(vv(1),Dtobr2der(1,l)))
9607 call matmat2(AEAderg(1,1,2),auxmat(1,1),pizda(1,1))
9608 vv(1)=pizda(1,1)-pizda(2,2)
9609 vv(2)=pizda(1,2)+pizda(2,1)
9610 g_corr5_loc(k-1)=g_corr5_loc(k-1) &
9611 +ekont*(scalar2(AEAb2derg(1,1,1,2),Ub2(1,j)) &
9612 +0.5d0*scalar2(vv(1),Dtobr2(1,l)))
9613 call transpose2(EUgder(1,1,j),auxmat1(1,1))
9614 call matmat2(AEA(1,1,2),auxmat1(1,1),pizda(1,1))
9615 vv(1)=pizda(1,1)-pizda(2,2)
9616 vv(2)=pizda(1,2)+pizda(2,1)
9617 g_corr5_loc(j-1)=g_corr5_loc(j-1) &
9618 +ekont*(scalar2(AEAb2(1,1,2),Ub2der(1,j)) &
9619 +0.5d0*scalar2(vv(1),Dtobr2(1,l)))
9620 ! Cartesian gradient
9624 call matmat2(AEAderx(1,1,lll,kkk,iii,2),auxmat(1,1),&
9626 vv(1)=pizda(1,1)-pizda(2,2)
9627 vv(2)=pizda(1,2)+pizda(2,1)
9628 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii) &
9629 +scalar2(AEAb2derx(1,lll,kkk,iii,1,2),Ub2(1,j)) &
9630 +0.5d0*scalar2(vv(1),Dtobr2(1,l))
9635 ! Contribution from graph IV
9637 call transpose2(EE(1,1,itj),auxmat(1,1))
9638 call matmat2(auxmat(1,1),AEA(1,1,2),pizda(1,1))
9639 vv(1)=pizda(1,1)+pizda(2,2)
9640 vv(2)=pizda(2,1)-pizda(1,2)
9641 eello5_4=scalar2(AEAb1(1,2,2),b1(1,itj)) &
9642 -0.5d0*scalar2(vv(1),Ctobr(1,j))
9643 ! Explicit gradient in virtual-dihedral angles.
9644 g_corr5_loc(j-1)=g_corr5_loc(j-1) &
9645 -0.5d0*ekont*scalar2(vv(1),Ctobrder(1,j))
9646 call matmat2(auxmat(1,1),AEAderg(1,1,2),pizda(1,1))
9647 vv(1)=pizda(1,1)+pizda(2,2)
9648 vv(2)=pizda(2,1)-pizda(1,2)
9649 g_corr5_loc(k-1)=g_corr5_loc(k-1) &
9650 +ekont*(scalar2(AEAb1derg(1,2,2),b1(1,itj)) &
9651 -0.5d0*scalar2(vv(1),Ctobr(1,j)))
9652 ! Cartesian gradient
9656 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,2),&
9658 vv(1)=pizda(1,1)+pizda(2,2)
9659 vv(2)=pizda(2,1)-pizda(1,2)
9660 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii) &
9661 +scalar2(AEAb1derx(1,lll,kkk,iii,2,2),b1(1,itj)) &
9662 -0.5d0*scalar2(vv(1),Ctobr(1,j))
9668 eel5=eello5_1+eello5_2+eello5_3+eello5_4
9669 !d if (i.eq.2 .and. j.eq.8 .and. k.eq.3 .and. l.eq.7) then
9670 !d write (2,*) 'ijkl',i,j,k,l
9671 !d write (2,*) 'eello5_1',eello5_1,' eello5_2',eello5_2,
9672 !d & ' eello5_3',eello5_3,' eello5_4',eello5_4
9674 !d write(iout,*) 'eello5_1',eello5_1,' eel5_1_num',16*eel5_1_num
9675 !d write(iout,*) 'eello5_2',eello5_2,' eel5_2_num',16*eel5_2_num
9676 !d write(iout,*) 'eello5_3',eello5_3,' eel5_3_num',16*eel5_3_num
9677 !d write(iout,*) 'eello5_4',eello5_4,' eel5_4_num',16*eel5_4_num
9678 if (j.lt.nres-1) then
9685 if (l.lt.nres-1) then
9695 !d write (2,*) 'eij',eij,' ekl',ekl,' ekont',ekont
9696 ! 2/11/08 AL Gradients over DC's connecting interacting sites will be
9697 ! summed up outside the subrouine as for the other subroutines
9698 ! handling long-range interactions. The old code is commented out
9699 ! with "cgrad" to keep track of changes.
9701 !grad ggg1(ll)=eel5*g_contij(ll,1)
9702 !grad ggg2(ll)=eel5*g_contij(ll,2)
9703 gradcorr5ij=eel5*g_contij(ll,1)+ekont*derx(ll,1,1)
9704 gradcorr5kl=eel5*g_contij(ll,2)+ekont*derx(ll,1,2)
9705 ! write (iout,'(a,3i3,a,5f8.3,2i3,a,5f8.3,a,f8.3)')
9706 ! & "ecorr5",ll,i,j," derx",derx(ll,2,1),derx(ll,3,1),derx(ll,4,1),
9707 ! & derx(ll,5,1),k,l," derx",derx(ll,2,2),derx(ll,3,2),
9708 ! & derx(ll,4,2),derx(ll,5,2)," ekont",ekont
9709 ! write (iout,'(a,3i3,a,3f8.3,2i3,a,3f8.3)')
9710 ! & "ecorr5",ll,i,j," gradcorr5",g_contij(ll,1),derx(ll,1,1),
9712 ! & k,l," gradcorr5",g_contij(ll,2),derx(ll,1,2),gradcorr5kl
9713 !old ghalf=0.5d0*eel5*ekl*gacont_hbr(ll,jj,i)
9714 !grad ghalf=0.5d0*ggg1(ll)
9716 gradcorr5(ll,i)=gradcorr5(ll,i)+ekont*derx(ll,2,1)
9717 gradcorr5(ll,i+1)=gradcorr5(ll,i+1)+ekont*derx(ll,3,1)
9718 gradcorr5(ll,j)=gradcorr5(ll,j)+ekont*derx(ll,4,1)
9719 gradcorr5(ll,j1)=gradcorr5(ll,j1)+ekont*derx(ll,5,1)
9720 gradcorr5_long(ll,j)=gradcorr5_long(ll,j)+gradcorr5ij
9721 gradcorr5_long(ll,i)=gradcorr5_long(ll,i)-gradcorr5ij
9722 !old ghalf=0.5d0*eel5*eij*gacont_hbr(ll,kk,k)
9723 !grad ghalf=0.5d0*ggg2(ll)
9725 gradcorr5(ll,k)=gradcorr5(ll,k)+ghalf+ekont*derx(ll,2,2)
9726 gradcorr5(ll,k+1)=gradcorr5(ll,k+1)+ekont*derx(ll,3,2)
9727 gradcorr5(ll,l)=gradcorr5(ll,l)+ghalf+ekont*derx(ll,4,2)
9728 gradcorr5(ll,l1)=gradcorr5(ll,l1)+ekont*derx(ll,5,2)
9729 gradcorr5_long(ll,l)=gradcorr5_long(ll,l)+gradcorr5kl
9730 gradcorr5_long(ll,k)=gradcorr5_long(ll,k)-gradcorr5kl
9735 !old gradcorr5(ll,m)=gradcorr5(ll,m)+eel5*ekl*gacont_hbr(ll,jj,i)
9736 !grad gradcorr5(ll,m)=gradcorr5(ll,m)+ggg1(ll)
9741 !old gradcorr5(ll,m)=gradcorr5(ll,m)+eel5*eij*gacont_hbr(ll,kk,k)
9742 !grad gradcorr5(ll,m)=gradcorr5(ll,m)+ggg2(ll)
9748 !grad gradcorr5(ll,m)=gradcorr5(ll,m)+ekont*derx(ll,1,1)
9753 !grad gradcorr5(ll,m)=gradcorr5(ll,m)+ekont*derx(ll,1,2)
9757 !d write (2,*) iii,g_corr5_loc(iii)
9760 !d write (2,*) 'ekont',ekont
9761 !d write (iout,*) 'eello5',ekont*eel5
9764 !-----------------------------------------------------------------------------
9765 real(kind=8) function eello6(i,j,k,l,jj,kk)
9766 ! implicit real*8 (a-h,o-z)
9767 ! include 'DIMENSIONS'
9768 ! include 'COMMON.IOUNITS'
9769 ! include 'COMMON.CHAIN'
9770 ! include 'COMMON.DERIV'
9771 ! include 'COMMON.INTERACT'
9772 ! include 'COMMON.CONTACTS'
9773 ! include 'COMMON.TORSION'
9774 ! include 'COMMON.VAR'
9775 ! include 'COMMON.GEO'
9776 ! include 'COMMON.FFIELD'
9777 real(kind=8),dimension(3) :: ggg1,ggg2
9778 real(kind=8) :: eello6_1,eello6_2,eello6_3,eello6_4,eello6_5,&
9780 real(kind=8) :: gradcorr6ij,gradcorr6kl
9781 integer :: i,j,k,l,jj,kk,iii,kkk,lll,j1,j2,l1,l2,ll
9782 !d if (i.ne.1 .or. j.ne.3 .or. k.ne.2 .or. l.ne.4) then
9787 !d & 'EELLO6: Contacts have occurred for peptide groups',i,j,
9795 !d call checkint6(i,j,k,l,jj,kk,eel6_1_num,eel6_2_num,
9796 !d & eel6_3_num,eel6_4_num,eel6_5_num,eel6_6_num)
9800 derx(lll,kkk,iii)=0.0d0
9804 !d eij=facont_hb(jj,i)
9805 !d ekl=facont_hb(kk,k)
9811 eello6_1=eello6_graph1(i,j,k,l,1,.false.)
9812 eello6_2=eello6_graph1(j,i,l,k,2,.false.)
9813 eello6_3=eello6_graph2(i,j,k,l,jj,kk,.false.)
9814 eello6_4=eello6_graph4(i,j,k,l,jj,kk,1,.false.)
9815 eello6_5=eello6_graph4(j,i,l,k,jj,kk,2,.false.)
9816 eello6_6=eello6_graph3(i,j,k,l,jj,kk,.false.)
9818 eello6_1=eello6_graph1(i,j,k,l,1,.false.)
9819 eello6_2=eello6_graph1(l,k,j,i,2,.true.)
9820 eello6_3=eello6_graph2(i,l,k,j,jj,kk,.true.)
9821 eello6_4=eello6_graph4(i,j,k,l,jj,kk,1,.false.)
9822 if (wturn6.eq.0.0d0 .or. j.ne.i+4) then
9823 eello6_5=eello6_graph4(l,k,j,i,kk,jj,2,.true.)
9827 eello6_6=eello6_graph3(i,l,k,j,jj,kk,.true.)
9829 ! If turn contributions are considered, they will be handled separately.
9830 eel6=eello6_1+eello6_2+eello6_3+eello6_4+eello6_5+eello6_6
9831 !d write(iout,*) 'eello6_1',eello6_1!,' eel6_1_num',16*eel6_1_num
9832 !d write(iout,*) 'eello6_2',eello6_2!,' eel6_2_num',16*eel6_2_num
9833 !d write(iout,*) 'eello6_3',eello6_3!,' eel6_3_num',16*eel6_3_num
9834 !d write(iout,*) 'eello6_4',eello6_4!,' eel6_4_num',16*eel6_4_num
9835 !d write(iout,*) 'eello6_5',eello6_5!,' eel6_5_num',16*eel6_5_num
9836 !d write(iout,*) 'eello6_6',eello6_6!,' eel6_6_num',16*eel6_6_num
9838 if (j.lt.nres-1) then
9845 if (l.lt.nres-1) then
9853 !grad ggg1(ll)=eel6*g_contij(ll,1)
9854 !grad ggg2(ll)=eel6*g_contij(ll,2)
9855 !old ghalf=0.5d0*eel6*ekl*gacont_hbr(ll,jj,i)
9856 !grad ghalf=0.5d0*ggg1(ll)
9858 gradcorr6ij=eel6*g_contij(ll,1)+ekont*derx(ll,1,1)
9859 gradcorr6kl=eel6*g_contij(ll,2)+ekont*derx(ll,1,2)
9860 gradcorr6(ll,i)=gradcorr6(ll,i)+ekont*derx(ll,2,1)
9861 gradcorr6(ll,i+1)=gradcorr6(ll,i+1)+ekont*derx(ll,3,1)
9862 gradcorr6(ll,j)=gradcorr6(ll,j)+ekont*derx(ll,4,1)
9863 gradcorr6(ll,j1)=gradcorr6(ll,j1)+ekont*derx(ll,5,1)
9864 gradcorr6_long(ll,j)=gradcorr6_long(ll,j)+gradcorr6ij
9865 gradcorr6_long(ll,i)=gradcorr6_long(ll,i)-gradcorr6ij
9866 !grad ghalf=0.5d0*ggg2(ll)
9867 !old ghalf=0.5d0*eel6*eij*gacont_hbr(ll,kk,k)
9869 gradcorr6(ll,k)=gradcorr6(ll,k)+ekont*derx(ll,2,2)
9870 gradcorr6(ll,k+1)=gradcorr6(ll,k+1)+ekont*derx(ll,3,2)
9871 gradcorr6(ll,l)=gradcorr6(ll,l)+ekont*derx(ll,4,2)
9872 gradcorr6(ll,l1)=gradcorr6(ll,l1)+ekont*derx(ll,5,2)
9873 gradcorr6_long(ll,l)=gradcorr6_long(ll,l)+gradcorr6kl
9874 gradcorr6_long(ll,k)=gradcorr6_long(ll,k)-gradcorr6kl
9879 !old gradcorr6(ll,m)=gradcorr6(ll,m)+eel6*ekl*gacont_hbr(ll,jj,i)
9880 !grad gradcorr6(ll,m)=gradcorr6(ll,m)+ggg1(ll)
9885 !old gradcorr6(ll,m)=gradcorr6(ll,m)+eel6*eij*gacont_hbr(ll,kk,k)
9886 !grad gradcorr6(ll,m)=gradcorr6(ll,m)+ggg2(ll)
9892 !grad gradcorr6(ll,m)=gradcorr6(ll,m)+ekont*derx(ll,1,1)
9897 !grad gradcorr6(ll,m)=gradcorr6(ll,m)+ekont*derx(ll,1,2)
9901 !d write (2,*) iii,g_corr6_loc(iii)
9904 !d write (2,*) 'ekont',ekont
9905 !d write (iout,*) 'eello6',ekont*eel6
9908 !-----------------------------------------------------------------------------
9909 real(kind=8) function eello6_graph1(i,j,k,l,imat,swap)
9911 ! implicit real*8 (a-h,o-z)
9912 ! include 'DIMENSIONS'
9913 ! include 'COMMON.IOUNITS'
9914 ! include 'COMMON.CHAIN'
9915 ! include 'COMMON.DERIV'
9916 ! include 'COMMON.INTERACT'
9917 ! include 'COMMON.CONTACTS'
9918 ! include 'COMMON.TORSION'
9919 ! include 'COMMON.VAR'
9920 ! include 'COMMON.GEO'
9921 real(kind=8),dimension(2) :: vv,vv1
9922 real(kind=8),dimension(2,2) :: pizda,auxmat,pizda1
9925 !el common /kutas/ lprn
9926 integer :: i,j,k,l,imat,itk,iii,kkk,lll,ind
9927 real(kind=8) :: s1,s2,s3,s4,s5
9928 !CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
9930 ! Parallel Antiparallel C
9936 ! \ j|/k\| / \ |/k\|l / C
9941 !CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
9942 itk=itortyp(itype(k,1))
9943 s1= scalar2(AEAb1(1,2,imat),CUgb2(1,i))
9944 s2=-scalar2(AEAb2(1,1,imat),Ug2Db1t(1,k))
9945 s3= scalar2(AEAb2(1,1,imat),CUgb2(1,k))
9946 call transpose2(EUgC(1,1,k),auxmat(1,1))
9947 call matmat2(AEA(1,1,imat),auxmat(1,1),pizda1(1,1))
9948 vv1(1)=pizda1(1,1)-pizda1(2,2)
9949 vv1(2)=pizda1(1,2)+pizda1(2,1)
9950 s4=0.5d0*scalar2(vv1(1),Dtobr2(1,i))
9951 vv(1)=AEAb1(1,2,imat)*b1(1,itk)-AEAb1(2,2,imat)*b1(2,itk)
9952 vv(2)=AEAb1(1,2,imat)*b1(2,itk)+AEAb1(2,2,imat)*b1(1,itk)
9953 s5=scalar2(vv(1),Dtobr2(1,i))
9954 !d write (2,*) 's1',s1,' s2',s2,' s3',s3,' s4', s4,' s5',s5
9955 eello6_graph1=-0.5d0*(s1+s2+s3+s4+s5)
9956 if (i.gt.1) g_corr6_loc(i-1)=g_corr6_loc(i-1) &
9957 -0.5d0*ekont*(scalar2(AEAb1(1,2,imat),CUgb2der(1,i)) &
9958 -scalar2(AEAb2derg(1,2,1,imat),Ug2Db1t(1,k)) &
9959 +scalar2(AEAb2derg(1,2,1,imat),CUgb2(1,k)) &
9960 +0.5d0*scalar2(vv1(1),Dtobr2der(1,i)) &
9961 +scalar2(vv(1),Dtobr2der(1,i)))
9962 call matmat2(AEAderg(1,1,imat),auxmat(1,1),pizda1(1,1))
9963 vv1(1)=pizda1(1,1)-pizda1(2,2)
9964 vv1(2)=pizda1(1,2)+pizda1(2,1)
9965 vv(1)=AEAb1derg(1,2,imat)*b1(1,itk)-AEAb1derg(2,2,imat)*b1(2,itk)
9966 vv(2)=AEAb1derg(1,2,imat)*b1(2,itk)+AEAb1derg(2,2,imat)*b1(1,itk)
9968 g_corr6_loc(l-1)=g_corr6_loc(l-1) &
9969 +ekont*(-0.5d0*(scalar2(AEAb1derg(1,2,imat),CUgb2(1,i)) &
9970 -scalar2(AEAb2derg(1,1,1,imat),Ug2Db1t(1,k)) &
9971 +scalar2(AEAb2derg(1,1,1,imat),CUgb2(1,k)) &
9972 +0.5d0*scalar2(vv1(1),Dtobr2(1,i))+scalar2(vv(1),Dtobr2(1,i))))
9974 g_corr6_loc(j-1)=g_corr6_loc(j-1) &
9975 +ekont*(-0.5d0*(scalar2(AEAb1derg(1,2,imat),CUgb2(1,i)) &
9976 -scalar2(AEAb2derg(1,1,1,imat),Ug2Db1t(1,k)) &
9977 +scalar2(AEAb2derg(1,1,1,imat),CUgb2(1,k)) &
9978 +0.5d0*scalar2(vv1(1),Dtobr2(1,i))+scalar2(vv(1),Dtobr2(1,i))))
9980 call transpose2(EUgCder(1,1,k),auxmat(1,1))
9981 call matmat2(AEA(1,1,imat),auxmat(1,1),pizda1(1,1))
9982 vv1(1)=pizda1(1,1)-pizda1(2,2)
9983 vv1(2)=pizda1(1,2)+pizda1(2,1)
9984 if (k.gt.1) g_corr6_loc(k-1)=g_corr6_loc(k-1) &
9985 +ekont*(-0.5d0*(-scalar2(AEAb2(1,1,imat),Ug2Db1tder(1,k)) &
9986 +scalar2(AEAb2(1,1,imat),CUgb2der(1,k)) &
9987 +0.5d0*scalar2(vv1(1),Dtobr2(1,i))))
9996 s1= scalar2(AEAb1derx(1,lll,kkk,iii,2,imat),CUgb2(1,i))
9997 s2=-scalar2(AEAb2derx(1,lll,kkk,iii,1,imat),Ug2Db1t(1,k))
9998 s3= scalar2(AEAb2derx(1,lll,kkk,iii,1,imat),CUgb2(1,k))
9999 call transpose2(EUgC(1,1,k),auxmat(1,1))
10000 call matmat2(AEAderx(1,1,lll,kkk,iii,imat),auxmat(1,1),&
10002 vv1(1)=pizda1(1,1)-pizda1(2,2)
10003 vv1(2)=pizda1(1,2)+pizda1(2,1)
10004 s4=0.5d0*scalar2(vv1(1),Dtobr2(1,i))
10005 vv(1)=AEAb1derx(1,lll,kkk,iii,2,imat)*b1(1,itk) &
10006 -AEAb1derx(2,lll,kkk,iii,2,imat)*b1(2,itk)
10007 vv(2)=AEAb1derx(1,lll,kkk,iii,2,imat)*b1(2,itk) &
10008 +AEAb1derx(2,lll,kkk,iii,2,imat)*b1(1,itk)
10009 s5=scalar2(vv(1),Dtobr2(1,i))
10010 derx(lll,kkk,ind)=derx(lll,kkk,ind)-0.5d0*(s1+s2+s3+s4+s5)
10015 end function eello6_graph1
10016 !-----------------------------------------------------------------------------
10017 real(kind=8) function eello6_graph2(i,j,k,l,jj,kk,swap)
10019 ! implicit real*8 (a-h,o-z)
10020 ! include 'DIMENSIONS'
10021 ! include 'COMMON.IOUNITS'
10022 ! include 'COMMON.CHAIN'
10023 ! include 'COMMON.DERIV'
10024 ! include 'COMMON.INTERACT'
10025 ! include 'COMMON.CONTACTS'
10026 ! include 'COMMON.TORSION'
10027 ! include 'COMMON.VAR'
10028 ! include 'COMMON.GEO'
10030 real(kind=8),dimension(2) :: vv,auxvec,auxvec1,auxvec2
10031 real(kind=8),dimension(2,2) :: pizda,auxmat,auxmat1
10032 !el logical :: lprn
10033 !el common /kutas/ lprn
10034 integer :: i,j,k,l,jj,kk,iii,kkk,lll,jjj,mmm
10035 real(kind=8) :: s2,s3,s4
10036 !CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
10038 ! Parallel Antiparallel C
10044 ! \ j|/k\| \ |/k\|l C
10049 !CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
10050 !d write (2,*) 'eello6_graph2: i,',i,' j',j,' k',k,' l',l
10051 ! AL 7/4/01 s1 would occur in the sixth-order moment,
10052 ! but not in a cluster cumulant
10054 s1=dip(1,jj,i)*dip(1,kk,k)
10056 call matvec2(ADtEA1(1,1,1),Ub2(1,k),auxvec(1))
10057 s2=-0.5d0*scalar2(Ub2(1,i),auxvec(1))
10058 call matvec2(ADtEA(1,1,2),Ub2(1,l),auxvec1(1))
10059 s3=-0.5d0*scalar2(Ub2(1,j),auxvec1(1))
10060 call transpose2(EUg(1,1,k),auxmat(1,1))
10061 call matmat2(ADtEA1(1,1,1),auxmat(1,1),pizda(1,1))
10062 vv(1)=pizda(1,1)-pizda(2,2)
10063 vv(2)=pizda(1,2)+pizda(2,1)
10064 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
10065 !d write (2,*) 'eello6_graph2:','s1',s1,' s2',s2,' s3',s3,' s4',s4
10067 eello6_graph2=-(s1+s2+s3+s4)
10069 eello6_graph2=-(s2+s3+s4)
10071 ! eello6_graph2=-s3
10072 ! Derivatives in gamma(i-1)
10075 s1=dipderg(1,jj,i)*dip(1,kk,k)
10077 s2=-0.5d0*scalar2(Ub2der(1,i),auxvec(1))
10078 call matvec2(ADtEAderg(1,1,1,2),Ub2(1,l),auxvec2(1))
10079 s3=-0.5d0*scalar2(Ub2(1,j),auxvec2(1))
10080 s4=-0.25d0*scalar2(vv(1),Dtobr2der(1,i))
10082 g_corr6_loc(i-1)=g_corr6_loc(i-1)-ekont*(s1+s2+s3+s4)
10084 g_corr6_loc(i-1)=g_corr6_loc(i-1)-ekont*(s2+s3+s4)
10086 ! g_corr6_loc(i-1)=g_corr6_loc(i-1)-s3
10088 ! Derivatives in gamma(k-1)
10090 s1=dip(1,jj,i)*dipderg(1,kk,k)
10092 call matvec2(ADtEA1(1,1,1),Ub2der(1,k),auxvec2(1))
10093 s2=-0.5d0*scalar2(Ub2(1,i),auxvec2(1))
10094 call matvec2(ADtEAderg(1,1,2,2),Ub2(1,l),auxvec2(1))
10095 s3=-0.5d0*scalar2(Ub2(1,j),auxvec2(1))
10096 call transpose2(EUgder(1,1,k),auxmat1(1,1))
10097 call matmat2(ADtEA1(1,1,1),auxmat1(1,1),pizda(1,1))
10098 vv(1)=pizda(1,1)-pizda(2,2)
10099 vv(2)=pizda(1,2)+pizda(2,1)
10100 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
10102 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s1+s2+s3+s4)
10104 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s2+s3+s4)
10106 ! g_corr6_loc(k-1)=g_corr6_loc(k-1)-s3
10107 ! Derivatives in gamma(j-1) or gamma(l-1)
10110 s1=dipderg(3,jj,i)*dip(1,kk,k)
10112 call matvec2(ADtEA1derg(1,1,1,1),Ub2(1,k),auxvec2(1))
10113 s2=-0.5d0*scalar2(Ub2(1,i),auxvec2(1))
10114 s3=-0.5d0*scalar2(Ub2der(1,j),auxvec1(1))
10115 call matmat2(ADtEA1derg(1,1,1,1),auxmat(1,1),pizda(1,1))
10116 vv(1)=pizda(1,1)-pizda(2,2)
10117 vv(2)=pizda(1,2)+pizda(2,1)
10118 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
10121 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*s1
10123 g_corr6_loc(j-1)=g_corr6_loc(j-1)-ekont*s1
10126 g_corr6_loc(j-1)=g_corr6_loc(j-1)-ekont*(s2+s3+s4)
10127 ! g_corr6_loc(j-1)=g_corr6_loc(j-1)-s3
10129 ! Derivatives in gamma(l-1) or gamma(j-1)
10132 s1=dip(1,jj,i)*dipderg(3,kk,k)
10134 call matvec2(ADtEA1derg(1,1,2,1),Ub2(1,k),auxvec2(1))
10135 s2=-0.5d0*scalar2(Ub2(1,i),auxvec2(1))
10136 call matvec2(ADtEA(1,1,2),Ub2der(1,l),auxvec2(1))
10137 s3=-0.5d0*scalar2(Ub2(1,j),auxvec2(1))
10138 call matmat2(ADtEA1derg(1,1,2,1),auxmat(1,1),pizda(1,1))
10139 vv(1)=pizda(1,1)-pizda(2,2)
10140 vv(2)=pizda(1,2)+pizda(2,1)
10141 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
10144 g_corr6_loc(j-1)=g_corr6_loc(j-1)-ekont*s1
10146 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*s1
10149 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*(s2+s3+s4)
10150 ! g_corr6_loc(l-1)=g_corr6_loc(l-1)-s3
10152 ! Cartesian derivatives.
10154 write (2,*) 'In eello6_graph2'
10156 write (2,*) 'iii=',iii
10158 write (2,*) 'kkk=',kkk
10160 write (2,'(3(2f10.5),5x)') &
10161 ((ADtEA1derx(jjj,mmm,lll,kkk,iii,1),mmm=1,2),lll=1,3)
10171 s1=dipderx(lll,kkk,1,jj,i)*dip(1,kk,k)
10173 s1=dip(1,jj,i)*dipderx(lll,kkk,1,kk,k)
10176 call matvec2(ADtEA1derx(1,1,lll,kkk,iii,1),Ub2(1,k),&
10178 s2=-0.5d0*scalar2(Ub2(1,i),auxvec(1))
10179 call matvec2(ADtEAderx(1,1,lll,kkk,iii,2),Ub2(1,l),&
10181 s3=-0.5d0*scalar2(Ub2(1,j),auxvec(1))
10182 call transpose2(EUg(1,1,k),auxmat(1,1))
10183 call matmat2(ADtEA1derx(1,1,lll,kkk,iii,1),auxmat(1,1),&
10185 vv(1)=pizda(1,1)-pizda(2,2)
10186 vv(2)=pizda(1,2)+pizda(2,1)
10187 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
10188 !d write (2,*) 's1',s1,' s2',s2,' s3',s3,' s4',s4
10190 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s1+s2+s4)
10192 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s2+s4)
10195 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-s3
10197 derx(lll,kkk,iii)=derx(lll,kkk,iii)-s3
10203 end function eello6_graph2
10204 !-----------------------------------------------------------------------------
10205 real(kind=8) function eello6_graph3(i,j,k,l,jj,kk,swap)
10206 ! implicit real*8 (a-h,o-z)
10207 ! include 'DIMENSIONS'
10208 ! include 'COMMON.IOUNITS'
10209 ! include 'COMMON.CHAIN'
10210 ! include 'COMMON.DERIV'
10211 ! include 'COMMON.INTERACT'
10212 ! include 'COMMON.CONTACTS'
10213 ! include 'COMMON.TORSION'
10214 ! include 'COMMON.VAR'
10215 ! include 'COMMON.GEO'
10216 real(kind=8),dimension(2) :: vv,auxvec
10217 real(kind=8),dimension(2,2) :: pizda,auxmat
10219 integer :: i,j,k,l,jj,kk,iti,itj1,itk,itk1,iii,lll,kkk,itl1
10220 real(kind=8) :: s1,s2,s3,s4
10221 !CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
10223 ! Parallel Antiparallel C
10228 ! /| o |o o| o |\ C
10229 ! j|/k\| / |/k\|l / C
10234 !CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
10236 ! 4/7/01 AL Component s1 was removed, because it pertains to the respective
10237 ! energy moment and not to the cluster cumulant.
10238 iti=itortyp(itype(i,1))
10239 if (j.lt.nres-1) then
10240 itj1=itortyp(itype(j+1,1))
10244 itk=itortyp(itype(k,1))
10245 itk1=itortyp(itype(k+1,1))
10246 if (l.lt.nres-1) then
10247 itl1=itortyp(itype(l+1,1))
10252 s1=dip(4,jj,i)*dip(4,kk,k)
10254 call matvec2(AECA(1,1,1),b1(1,itk1),auxvec(1))
10255 s2=0.5d0*scalar2(b1(1,itk),auxvec(1))
10256 call matvec2(AECA(1,1,2),b1(1,itl1),auxvec(1))
10257 s3=0.5d0*scalar2(b1(1,itj1),auxvec(1))
10258 call transpose2(EE(1,1,itk),auxmat(1,1))
10259 call matmat2(auxmat(1,1),AECA(1,1,1),pizda(1,1))
10260 vv(1)=pizda(1,1)+pizda(2,2)
10261 vv(2)=pizda(2,1)-pizda(1,2)
10262 s4=-0.25d0*scalar2(vv(1),Ctobr(1,k))
10263 !d write (2,*) 'eello6_graph3:','s1',s1,' s2',s2,' s3',s3,' s4',s4,
10264 !d & "sum",-(s2+s3+s4)
10266 eello6_graph3=-(s1+s2+s3+s4)
10268 eello6_graph3=-(s2+s3+s4)
10270 ! eello6_graph3=-s4
10271 ! Derivatives in gamma(k-1)
10272 call matvec2(AECAderg(1,1,2),b1(1,itl1),auxvec(1))
10273 s3=0.5d0*scalar2(b1(1,itj1),auxvec(1))
10274 s4=-0.25d0*scalar2(vv(1),Ctobrder(1,k))
10275 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s3+s4)
10276 ! Derivatives in gamma(l-1)
10277 call matvec2(AECAderg(1,1,1),b1(1,itk1),auxvec(1))
10278 s2=0.5d0*scalar2(b1(1,itk),auxvec(1))
10279 call matmat2(auxmat(1,1),AECAderg(1,1,1),pizda(1,1))
10280 vv(1)=pizda(1,1)+pizda(2,2)
10281 vv(2)=pizda(2,1)-pizda(1,2)
10282 s4=-0.25d0*scalar2(vv(1),Ctobr(1,k))
10283 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*(s2+s4)
10284 ! Cartesian derivatives.
10290 s1=dipderx(lll,kkk,4,jj,i)*dip(4,kk,k)
10292 s1=dip(4,jj,i)*dipderx(lll,kkk,4,kk,k)
10295 call matvec2(AECAderx(1,1,lll,kkk,iii,1),b1(1,itk1),&
10297 s2=0.5d0*scalar2(b1(1,itk),auxvec(1))
10298 call matvec2(AECAderx(1,1,lll,kkk,iii,2),b1(1,itl1),&
10300 s3=0.5d0*scalar2(b1(1,itj1),auxvec(1))
10301 call matmat2(auxmat(1,1),AECAderx(1,1,lll,kkk,iii,1),&
10303 vv(1)=pizda(1,1)+pizda(2,2)
10304 vv(2)=pizda(2,1)-pizda(1,2)
10305 s4=-0.25d0*scalar2(vv(1),Ctobr(1,k))
10307 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s1+s2+s4)
10309 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s2+s4)
10312 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-s3
10314 derx(lll,kkk,iii)=derx(lll,kkk,iii)-s3
10316 ! derx(lll,kkk,iii)=derx(lll,kkk,iii)-s4
10321 end function eello6_graph3
10322 !-----------------------------------------------------------------------------
10323 real(kind=8) function eello6_graph4(i,j,k,l,jj,kk,imat,swap)
10324 ! implicit real*8 (a-h,o-z)
10325 ! include 'DIMENSIONS'
10326 ! include 'COMMON.IOUNITS'
10327 ! include 'COMMON.CHAIN'
10328 ! include 'COMMON.DERIV'
10329 ! include 'COMMON.INTERACT'
10330 ! include 'COMMON.CONTACTS'
10331 ! include 'COMMON.TORSION'
10332 ! include 'COMMON.VAR'
10333 ! include 'COMMON.GEO'
10334 ! include 'COMMON.FFIELD'
10335 real(kind=8),dimension(2) :: vv,auxvec,auxvec1
10336 real(kind=8),dimension(2,2) :: pizda,auxmat,auxmat1
10338 integer :: i,j,k,l,jj,kk,imat,iti,itj,itj1,itk,itk1,itl,itl1,&
10340 real(kind=8) :: s1,s2,s3,s4
10341 !CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
10343 ! Parallel Antiparallel C
10348 ! /| o |o o| o |\ C
10349 ! \ j|/k\| \ |/k\|l C
10354 !CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
10356 ! 4/7/01 AL Component s1 was removed, because it pertains to the respective
10357 ! energy moment and not to the cluster cumulant.
10358 !d write (2,*) 'eello_graph4: wturn6',wturn6
10359 iti=itortyp(itype(i,1))
10360 itj=itortyp(itype(j,1))
10361 if (j.lt.nres-1) then
10362 itj1=itortyp(itype(j+1,1))
10366 itk=itortyp(itype(k,1))
10367 if (k.lt.nres-1) then
10368 itk1=itortyp(itype(k+1,1))
10372 itl=itortyp(itype(l,1))
10373 if (l.lt.nres-1) then
10374 itl1=itortyp(itype(l+1,1))
10378 !d write (2,*) 'eello6_graph4:','i',i,' j',j,' k',k,' l',l
10379 !d write (2,*) 'iti',iti,' itj',itj,' itj1',itj1,' itk',itk,
10380 !d & ' itl',itl,' itl1',itl1
10382 if (imat.eq.1) then
10383 s1=dip(3,jj,i)*dip(3,kk,k)
10385 s1=dip(2,jj,j)*dip(2,kk,l)
10388 call matvec2(AECA(1,1,imat),Ub2(1,k),auxvec(1))
10389 s2=0.5d0*scalar2(Ub2(1,i),auxvec(1))
10391 call matvec2(ADtEA1(1,1,3-imat),b1(1,itj1),auxvec1(1))
10392 s3=-0.5d0*scalar2(b1(1,itj),auxvec1(1))
10394 call matvec2(ADtEA1(1,1,3-imat),b1(1,itl1),auxvec1(1))
10395 s3=-0.5d0*scalar2(b1(1,itl),auxvec1(1))
10397 call transpose2(EUg(1,1,k),auxmat(1,1))
10398 call matmat2(AECA(1,1,imat),auxmat(1,1),pizda(1,1))
10399 vv(1)=pizda(1,1)-pizda(2,2)
10400 vv(2)=pizda(2,1)+pizda(1,2)
10401 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
10402 !d write (2,*) 'eello6_graph4:','s1',s1,' s2',s2,' s3',s3,' s4',s4
10404 eello6_graph4=-(s1+s2+s3+s4)
10406 eello6_graph4=-(s2+s3+s4)
10408 ! Derivatives in gamma(i-1)
10411 if (imat.eq.1) then
10412 s1=dipderg(2,jj,i)*dip(3,kk,k)
10414 s1=dipderg(4,jj,j)*dip(2,kk,l)
10417 s2=0.5d0*scalar2(Ub2der(1,i),auxvec(1))
10419 call matvec2(ADtEA1derg(1,1,1,3-imat),b1(1,itj1),auxvec1(1))
10420 s3=-0.5d0*scalar2(b1(1,itj),auxvec1(1))
10422 call matvec2(ADtEA1derg(1,1,1,3-imat),b1(1,itl1),auxvec1(1))
10423 s3=-0.5d0*scalar2(b1(1,itl),auxvec1(1))
10425 s4=0.25d0*scalar2(vv(1),Dtobr2der(1,i))
10426 if (wturn6.gt.0.0d0 .and. k.eq.l+4 .and. i.eq.j+2) then
10427 !d write (2,*) 'turn6 derivatives'
10429 gel_loc_turn6(i-1)=gel_loc_turn6(i-1)-ekont*(s1+s2+s3+s4)
10431 gel_loc_turn6(i-1)=gel_loc_turn6(i-1)-ekont*(s2+s3+s4)
10435 g_corr6_loc(i-1)=g_corr6_loc(i-1)-ekont*(s1+s2+s3+s4)
10437 g_corr6_loc(i-1)=g_corr6_loc(i-1)-ekont*(s2+s3+s4)
10441 ! Derivatives in gamma(k-1)
10443 if (imat.eq.1) then
10444 s1=dip(3,jj,i)*dipderg(2,kk,k)
10446 s1=dip(2,jj,j)*dipderg(4,kk,l)
10449 call matvec2(AECA(1,1,imat),Ub2der(1,k),auxvec1(1))
10450 s2=0.5d0*scalar2(Ub2(1,i),auxvec1(1))
10452 call matvec2(ADtEA1derg(1,1,2,3-imat),b1(1,itj1),auxvec1(1))
10453 s3=-0.5d0*scalar2(b1(1,itj),auxvec1(1))
10455 call matvec2(ADtEA1derg(1,1,2,3-imat),b1(1,itl1),auxvec1(1))
10456 s3=-0.5d0*scalar2(b1(1,itl),auxvec1(1))
10458 call transpose2(EUgder(1,1,k),auxmat1(1,1))
10459 call matmat2(AECA(1,1,imat),auxmat1(1,1),pizda(1,1))
10460 vv(1)=pizda(1,1)-pizda(2,2)
10461 vv(2)=pizda(2,1)+pizda(1,2)
10462 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
10463 if (wturn6.gt.0.0d0 .and. k.eq.l+4 .and. i.eq.j+2) then
10465 gel_loc_turn6(k-1)=gel_loc_turn6(k-1)-ekont*(s1+s2+s3+s4)
10467 gel_loc_turn6(k-1)=gel_loc_turn6(k-1)-ekont*(s2+s3+s4)
10471 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s1+s2+s3+s4)
10473 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s2+s3+s4)
10476 ! Derivatives in gamma(j-1) or gamma(l-1)
10477 if (l.eq.j+1 .and. l.gt.1) then
10478 call matvec2(AECAderg(1,1,imat),Ub2(1,k),auxvec(1))
10479 s2=0.5d0*scalar2(Ub2(1,i),auxvec(1))
10480 call matmat2(AECAderg(1,1,imat),auxmat(1,1),pizda(1,1))
10481 vv(1)=pizda(1,1)-pizda(2,2)
10482 vv(2)=pizda(2,1)+pizda(1,2)
10483 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
10484 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*(s2+s4)
10485 else if (j.gt.1) then
10486 call matvec2(AECAderg(1,1,imat),Ub2(1,k),auxvec(1))
10487 s2=0.5d0*scalar2(Ub2(1,i),auxvec(1))
10488 call matmat2(AECAderg(1,1,imat),auxmat(1,1),pizda(1,1))
10489 vv(1)=pizda(1,1)-pizda(2,2)
10490 vv(2)=pizda(2,1)+pizda(1,2)
10491 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
10492 if (wturn6.gt.0.0d0 .and. k.eq.l+4 .and. i.eq.j+2) then
10493 gel_loc_turn6(j-1)=gel_loc_turn6(j-1)-ekont*(s2+s4)
10495 g_corr6_loc(j-1)=g_corr6_loc(j-1)-ekont*(s2+s4)
10498 ! Cartesian derivatives.
10504 if (imat.eq.1) then
10505 s1=dipderx(lll,kkk,3,jj,i)*dip(3,kk,k)
10507 s1=dipderx(lll,kkk,2,jj,j)*dip(2,kk,l)
10510 if (imat.eq.1) then
10511 s1=dip(3,jj,i)*dipderx(lll,kkk,3,kk,k)
10513 s1=dip(2,jj,j)*dipderx(lll,kkk,2,kk,l)
10517 call matvec2(AECAderx(1,1,lll,kkk,iii,imat),Ub2(1,k),&
10519 s2=0.5d0*scalar2(Ub2(1,i),auxvec(1))
10521 call matvec2(ADtEA1derx(1,1,lll,kkk,iii,3-imat),&
10522 b1(1,itj1),auxvec(1))
10523 s3=-0.5d0*scalar2(b1(1,itj),auxvec(1))
10525 call matvec2(ADtEA1derx(1,1,lll,kkk,iii,3-imat),&
10526 b1(1,itl1),auxvec(1))
10527 s3=-0.5d0*scalar2(b1(1,itl),auxvec(1))
10529 call matmat2(AECAderx(1,1,lll,kkk,iii,imat),auxmat(1,1),&
10531 vv(1)=pizda(1,1)-pizda(2,2)
10532 vv(2)=pizda(2,1)+pizda(1,2)
10533 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
10537 derx_turn(lll,kkk,3-iii)=derx_turn(lll,kkk,3-iii) &
10540 derx_turn(lll,kkk,3-iii)=derx_turn(lll,kkk,3-iii) &
10543 derx_turn(lll,kkk,iii)=derx_turn(lll,kkk,iii)-s3
10546 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-(s1+s2+s4)
10548 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-(s2+s4)
10550 derx(lll,kkk,iii)=derx(lll,kkk,iii)-s3
10554 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s1+s2+s4)
10556 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s2+s4)
10559 derx(lll,kkk,iii)=derx(lll,kkk,iii)-s3
10561 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-s3
10568 end function eello6_graph4
10569 !-----------------------------------------------------------------------------
10570 real(kind=8) function eello_turn6(i,jj,kk)
10571 ! implicit real*8 (a-h,o-z)
10572 ! include 'DIMENSIONS'
10573 ! include 'COMMON.IOUNITS'
10574 ! include 'COMMON.CHAIN'
10575 ! include 'COMMON.DERIV'
10576 ! include 'COMMON.INTERACT'
10577 ! include 'COMMON.CONTACTS'
10578 ! include 'COMMON.TORSION'
10579 ! include 'COMMON.VAR'
10580 ! include 'COMMON.GEO'
10581 real(kind=8),dimension(2) :: vtemp1,vtemp2,vtemp3,vtemp4,gvec
10582 real(kind=8),dimension(2,2) :: atemp,auxmat,achuj_temp,gtemp
10583 real(kind=8),dimension(3) :: ggg1,ggg2
10584 real(kind=8),dimension(2) :: vtemp1d,vtemp2d,vtemp3d,vtemp4d,gvecd
10585 real(kind=8),dimension(2,2) :: atempd,auxmatd,achuj_tempd,gtempd
10586 ! 4/7/01 AL Components s1, s8, and s13 were removed, because they pertain to
10587 ! the respective energy moment and not to the cluster cumulant.
10588 !el local variables
10589 integer :: i,jj,kk,j,k,l,iti,itk,itk1,itl,itj,iii,kkk,lll
10590 integer :: j1,j2,l1,l2,ll
10591 real(kind=8) :: s1,s2,s8,s13,s12,eello6_5,eel_turn6
10592 real(kind=8) :: s1d,s8d,s12d,s2d,gturn6ij,gturn6kl
10601 iti=itortyp(itype(i,1))
10602 itk=itortyp(itype(k,1))
10603 itk1=itortyp(itype(k+1,1))
10604 itl=itortyp(itype(l,1))
10605 itj=itortyp(itype(j,1))
10606 !d write (2,*) 'itk',itk,' itk1',itk1,' itl',itl,' itj',itj
10607 !d write (2,*) 'i',i,' k',k,' j',j,' l',l
10608 !d if (i.ne.1 .or. j.ne.3 .or. k.ne.2 .or. l.ne.4) then
10613 !d & 'EELLO6: Contacts have occurred for peptide groups',i,j,
10615 !d call checkint_turn6(i,jj,kk,eel_turn6_num)
10619 derx_turn(lll,kkk,iii)=0.0d0
10626 eello6_5=eello6_graph4(l,k,j,i,kk,jj,2,.true.)
10628 !d write (2,*) 'eello6_5',eello6_5
10630 call transpose2(AEA(1,1,1),auxmat(1,1))
10631 call matmat2(EUg(1,1,i+1),auxmat(1,1),auxmat(1,1))
10632 ss1=scalar2(Ub2(1,i+2),b1(1,itl))
10633 s1 = (auxmat(1,1)+auxmat(2,2))*ss1
10635 call matvec2(EUg(1,1,i+2),b1(1,itl),vtemp1(1))
10636 call matvec2(AEA(1,1,1),vtemp1(1),vtemp1(1))
10637 s2 = scalar2(b1(1,itk),vtemp1(1))
10639 call transpose2(AEA(1,1,2),atemp(1,1))
10640 call matmat2(atemp(1,1),EUg(1,1,i+4),atemp(1,1))
10641 call matvec2(Ug2(1,1,i+2),dd(1,1,itk1),vtemp2(1))
10642 s8 = -(atemp(1,1)+atemp(2,2))*scalar2(cc(1,1,itl),vtemp2(1))
10644 call matmat2(EUg(1,1,i+3),AEA(1,1,2),auxmat(1,1))
10645 call matvec2(auxmat(1,1),Ub2(1,i+4),vtemp3(1))
10646 s12 = scalar2(Ub2(1,i+2),vtemp3(1))
10648 call transpose2(a_chuj(1,1,kk,i+1),achuj_temp(1,1))
10649 call matmat2(achuj_temp(1,1),EUg(1,1,i+2),gtemp(1,1))
10650 call matmat2(gtemp(1,1),EUg(1,1,i+3),gtemp(1,1))
10651 call matvec2(a_chuj(1,1,jj,i),Ub2(1,i+4),vtemp4(1))
10652 ss13 = scalar2(b1(1,itk),vtemp4(1))
10653 s13 = (gtemp(1,1)+gtemp(2,2))*ss13
10655 ! write (2,*) 's1,s2,s8,s12,s13',s1,s2,s8,s12,s13
10661 eel_turn6 = eello6_5 - 0.5d0*(s1+s2+s12+s8+s13)
10662 ! Derivatives in gamma(i+2)
10666 call transpose2(AEA(1,1,1),auxmatd(1,1))
10667 call matmat2(EUgder(1,1,i+1),auxmatd(1,1),auxmatd(1,1))
10668 s1d = (auxmatd(1,1)+auxmatd(2,2))*ss1
10669 call transpose2(AEAderg(1,1,2),atempd(1,1))
10670 call matmat2(atempd(1,1),EUg(1,1,i+4),atempd(1,1))
10671 s8d = -(atempd(1,1)+atempd(2,2))*scalar2(cc(1,1,itl),vtemp2(1))
10673 call matmat2(EUg(1,1,i+3),AEAderg(1,1,2),auxmatd(1,1))
10674 call matvec2(auxmatd(1,1),Ub2(1,i+4),vtemp3d(1))
10675 s12d = scalar2(Ub2(1,i+2),vtemp3d(1))
10681 gel_loc_turn6(i)=gel_loc_turn6(i)-0.5d0*ekont*(s1d+s8d+s12d)
10682 ! Derivatives in gamma(i+3)
10684 call transpose2(AEA(1,1,1),auxmatd(1,1))
10685 call matmat2(EUg(1,1,i+1),auxmatd(1,1),auxmatd(1,1))
10686 ss1d=scalar2(Ub2der(1,i+2),b1(1,itl))
10687 s1d = (auxmatd(1,1)+auxmatd(2,2))*ss1d
10689 call matvec2(EUgder(1,1,i+2),b1(1,itl),vtemp1d(1))
10690 call matvec2(AEA(1,1,1),vtemp1d(1),vtemp1d(1))
10691 s2d = scalar2(b1(1,itk),vtemp1d(1))
10693 call matvec2(Ug2der(1,1,i+2),dd(1,1,itk1),vtemp2d(1))
10694 s8d = -(atemp(1,1)+atemp(2,2))*scalar2(cc(1,1,itl),vtemp2d(1))
10696 s12d = scalar2(Ub2der(1,i+2),vtemp3(1))
10698 call matmat2(achuj_temp(1,1),EUgder(1,1,i+2),gtempd(1,1))
10699 call matmat2(gtempd(1,1),EUg(1,1,i+3),gtempd(1,1))
10700 s13d = (gtempd(1,1)+gtempd(2,2))*ss13
10708 gel_loc_turn6(i+1)=gel_loc_turn6(i+1) &
10709 -0.5d0*ekont*(s1d+s2d+s8d+s12d+s13d)
10711 gel_loc_turn6(i+1)=gel_loc_turn6(i+1) &
10712 -0.5d0*ekont*(s2d+s12d)
10714 ! Derivatives in gamma(i+4)
10715 call matmat2(EUgder(1,1,i+3),AEA(1,1,2),auxmatd(1,1))
10716 call matvec2(auxmatd(1,1),Ub2(1,i+4),vtemp3d(1))
10717 s12d = scalar2(Ub2(1,i+2),vtemp3d(1))
10719 call matmat2(achuj_temp(1,1),EUg(1,1,i+2),gtempd(1,1))
10720 call matmat2(gtempd(1,1),EUgder(1,1,i+3),gtempd(1,1))
10721 s13d = (gtempd(1,1)+gtempd(2,2))*ss13
10729 gel_loc_turn6(i+2)=gel_loc_turn6(i+2)-0.5d0*ekont*(s12d+s13d)
10731 gel_loc_turn6(i+2)=gel_loc_turn6(i+2)-0.5d0*ekont*(s12d)
10733 ! Derivatives in gamma(i+5)
10735 call transpose2(AEAderg(1,1,1),auxmatd(1,1))
10736 call matmat2(EUg(1,1,i+1),auxmatd(1,1),auxmatd(1,1))
10737 s1d = (auxmatd(1,1)+auxmatd(2,2))*ss1
10739 call matvec2(EUg(1,1,i+2),b1(1,itl),vtemp1d(1))
10740 call matvec2(AEAderg(1,1,1),vtemp1d(1),vtemp1d(1))
10741 s2d = scalar2(b1(1,itk),vtemp1d(1))
10743 call transpose2(AEA(1,1,2),atempd(1,1))
10744 call matmat2(atempd(1,1),EUgder(1,1,i+4),atempd(1,1))
10745 s8d = -(atempd(1,1)+atempd(2,2))*scalar2(cc(1,1,itl),vtemp2(1))
10747 call matvec2(auxmat(1,1),Ub2der(1,i+4),vtemp3d(1))
10748 s12d = scalar2(Ub2(1,i+2),vtemp3d(1))
10750 call matvec2(a_chuj(1,1,jj,i),Ub2der(1,i+4),vtemp4d(1))
10751 ss13d = scalar2(b1(1,itk),vtemp4d(1))
10752 s13d = (gtemp(1,1)+gtemp(2,2))*ss13d
10760 gel_loc_turn6(i+3)=gel_loc_turn6(i+3) &
10761 -0.5d0*ekont*(s1d+s2d+s8d+s12d+s13d)
10763 gel_loc_turn6(i+3)=gel_loc_turn6(i+3) &
10764 -0.5d0*ekont*(s2d+s12d)
10766 ! Cartesian derivatives
10771 call transpose2(AEAderx(1,1,lll,kkk,iii,1),auxmatd(1,1))
10772 call matmat2(EUg(1,1,i+1),auxmatd(1,1),auxmatd(1,1))
10773 s1d = (auxmatd(1,1)+auxmatd(2,2))*ss1
10775 call matvec2(EUg(1,1,i+2),b1(1,itl),vtemp1(1))
10776 call matvec2(AEAderx(1,1,lll,kkk,iii,1),vtemp1(1),&
10778 s2d = scalar2(b1(1,itk),vtemp1d(1))
10780 call transpose2(AEAderx(1,1,lll,kkk,iii,2),atempd(1,1))
10781 call matmat2(atempd(1,1),EUg(1,1,i+4),atempd(1,1))
10782 s8d = -(atempd(1,1)+atempd(2,2))* &
10783 scalar2(cc(1,1,itl),vtemp2(1))
10785 call matmat2(EUg(1,1,i+3),AEAderx(1,1,lll,kkk,iii,2),&
10787 call matvec2(auxmatd(1,1),Ub2(1,i+4),vtemp3d(1))
10788 s12d = scalar2(Ub2(1,i+2),vtemp3d(1))
10795 derx_turn(lll,kkk,iii) = derx_turn(lll,kkk,iii) &
10798 derx_turn(lll,kkk,iii) = derx_turn(lll,kkk,iii) &
10802 derx_turn(lll,kkk,3-iii) = derx_turn(lll,kkk,3-iii) &
10805 derx_turn(lll,kkk,3-iii) = derx_turn(lll,kkk,3-iii) &
10814 call transpose2(a_chuj_der(1,1,lll,kkk,kk,i+1),&
10816 call matmat2(achuj_tempd(1,1),EUg(1,1,i+2),gtempd(1,1))
10817 call matmat2(gtempd(1,1),EUg(1,1,i+3),gtempd(1,1))
10818 s13d=(gtempd(1,1)+gtempd(2,2))*ss13
10819 derx_turn(lll,kkk,2) = derx_turn(lll,kkk,2)-0.5d0*s13d
10820 call matvec2(a_chuj_der(1,1,lll,kkk,jj,i),Ub2(1,i+4),&
10822 ss13d = scalar2(b1(1,itk),vtemp4d(1))
10823 s13d = (gtemp(1,1)+gtemp(2,2))*ss13d
10824 derx_turn(lll,kkk,1) = derx_turn(lll,kkk,1)-0.5d0*s13d
10828 !d write(iout,*) 'eel6_turn6',eel_turn6,' eel_turn6_num',
10829 !d & 16*eel_turn6_num
10831 if (j.lt.nres-1) then
10838 if (l.lt.nres-1) then
10846 !grad ggg1(ll)=eel_turn6*g_contij(ll,1)
10847 !grad ggg2(ll)=eel_turn6*g_contij(ll,2)
10848 !grad ghalf=0.5d0*ggg1(ll)
10850 gturn6ij=eel_turn6*g_contij(ll,1)+ekont*derx_turn(ll,1,1)
10851 gturn6kl=eel_turn6*g_contij(ll,2)+ekont*derx_turn(ll,1,2)
10852 gcorr6_turn(ll,i)=gcorr6_turn(ll,i) & !+ghalf
10853 +ekont*derx_turn(ll,2,1)
10854 gcorr6_turn(ll,i+1)=gcorr6_turn(ll,i+1)+ekont*derx_turn(ll,3,1)
10855 gcorr6_turn(ll,j)=gcorr6_turn(ll,j) & !+ghalf
10856 +ekont*derx_turn(ll,4,1)
10857 gcorr6_turn(ll,j1)=gcorr6_turn(ll,j1)+ekont*derx_turn(ll,5,1)
10858 gcorr6_turn_long(ll,j)=gcorr6_turn_long(ll,j)+gturn6ij
10859 gcorr6_turn_long(ll,i)=gcorr6_turn_long(ll,i)-gturn6ij
10860 !grad ghalf=0.5d0*ggg2(ll)
10862 gcorr6_turn(ll,k)=gcorr6_turn(ll,k) & !+ghalf
10863 +ekont*derx_turn(ll,2,2)
10864 gcorr6_turn(ll,k+1)=gcorr6_turn(ll,k+1)+ekont*derx_turn(ll,3,2)
10865 gcorr6_turn(ll,l)=gcorr6_turn(ll,l) & !+ghalf
10866 +ekont*derx_turn(ll,4,2)
10867 gcorr6_turn(ll,l1)=gcorr6_turn(ll,l1)+ekont*derx_turn(ll,5,2)
10868 gcorr6_turn_long(ll,l)=gcorr6_turn_long(ll,l)+gturn6kl
10869 gcorr6_turn_long(ll,k)=gcorr6_turn_long(ll,k)-gturn6kl
10874 !grad gcorr6_turn(ll,m)=gcorr6_turn(ll,m)+ggg1(ll)
10879 !grad gcorr6_turn(ll,m)=gcorr6_turn(ll,m)+ggg2(ll)
10885 !grad gcorr6_turn(ll,m)=gcorr6_turn(ll,m)+ekont*derx_turn(ll,1,1)
10890 !grad gcorr6_turn(ll,m)=gcorr6_turn(ll,m)+ekont*derx_turn(ll,1,2)
10894 !d write (2,*) iii,g_corr6_loc(iii)
10896 eello_turn6=ekont*eel_turn6
10897 !d write (2,*) 'ekont',ekont
10898 !d write (2,*) 'eel_turn6',ekont*eel_turn6
10900 end function eello_turn6
10901 !-----------------------------------------------------------------------------
10902 subroutine MATVEC2(A1,V1,V2)
10903 !DIR$ INLINEALWAYS MATVEC2
10905 !DEC$ ATTRIBUTES FORCEINLINE::MATVEC2
10907 ! implicit real*8 (a-h,o-z)
10908 ! include 'DIMENSIONS'
10909 real(kind=8),dimension(2) :: V1,V2
10910 real(kind=8),dimension(2,2) :: A1
10911 real(kind=8) :: vaux1,vaux2
10915 ! 3 VI=VI+A1(I,K)*V1(K)
10919 vaux1=a1(1,1)*v1(1)+a1(1,2)*v1(2)
10920 vaux2=a1(2,1)*v1(1)+a1(2,2)*v1(2)
10924 end subroutine MATVEC2
10925 !-----------------------------------------------------------------------------
10926 subroutine MATMAT2(A1,A2,A3)
10928 !DEC$ ATTRIBUTES FORCEINLINE::MATMAT2
10930 ! implicit real*8 (a-h,o-z)
10931 ! include 'DIMENSIONS'
10932 real(kind=8),dimension(2,2) :: A1,A2,A3
10933 real(kind=8) :: ai3_11,ai3_12,ai3_21,ai3_22
10934 ! DIMENSION AI3(2,2)
10938 ! A3IJ=A3IJ+A1(I,K)*A2(K,J)
10944 ai3_11=a1(1,1)*a2(1,1)+a1(1,2)*a2(2,1)
10945 ai3_12=a1(1,1)*a2(1,2)+a1(1,2)*a2(2,2)
10946 ai3_21=a1(2,1)*a2(1,1)+a1(2,2)*a2(2,1)
10947 ai3_22=a1(2,1)*a2(1,2)+a1(2,2)*a2(2,2)
10953 end subroutine MATMAT2
10954 !-----------------------------------------------------------------------------
10955 real(kind=8) function scalar2(u,v)
10956 !DIR$ INLINEALWAYS scalar2
10958 real(kind=8),dimension(2) :: u,v
10961 scalar2=u(1)*v(1)+u(2)*v(2)
10963 end function scalar2
10964 !-----------------------------------------------------------------------------
10965 subroutine transpose2(a,at)
10966 !DIR$ INLINEALWAYS transpose2
10968 !DEC$ ATTRIBUTES FORCEINLINE::transpose2
10971 real(kind=8),dimension(2,2) :: a,at
10977 end subroutine transpose2
10978 !-----------------------------------------------------------------------------
10979 subroutine transpose(n,a,at)
10982 real(kind=8),dimension(n,n) :: a,at
10989 end subroutine transpose
10990 !-----------------------------------------------------------------------------
10991 subroutine prodmat3(a1,a2,kk,transp,prod)
10992 !DIR$ INLINEALWAYS prodmat3
10994 !DEC$ ATTRIBUTES FORCEINLINE::prodmat3
10998 real(kind=8),dimension(2,2) :: a1,a2,a2t,kk,prod
11000 !rc double precision auxmat(2,2),prod_(2,2)
11003 !rc call transpose2(kk(1,1),auxmat(1,1))
11004 !rc call matmat2(a1(1,1),auxmat(1,1),auxmat(1,1))
11005 !rc call matmat2(auxmat(1,1),a2(1,1),prod_(1,1))
11007 prod(1,1)=(a1(1,1)*kk(1,1)+a1(1,2)*kk(1,2))*a2(1,1) &
11008 +(a1(1,1)*kk(2,1)+a1(1,2)*kk(2,2))*a2(2,1)
11009 prod(1,2)=(a1(1,1)*kk(1,1)+a1(1,2)*kk(1,2))*a2(1,2) &
11010 +(a1(1,1)*kk(2,1)+a1(1,2)*kk(2,2))*a2(2,2)
11011 prod(2,1)=(a1(2,1)*kk(1,1)+a1(2,2)*kk(1,2))*a2(1,1) &
11012 +(a1(2,1)*kk(2,1)+a1(2,2)*kk(2,2))*a2(2,1)
11013 prod(2,2)=(a1(2,1)*kk(1,1)+a1(2,2)*kk(1,2))*a2(1,2) &
11014 +(a1(2,1)*kk(2,1)+a1(2,2)*kk(2,2))*a2(2,2)
11017 !rc call matmat2(a1(1,1),kk(1,1),auxmat(1,1))
11018 !rc call matmat2(auxmat(1,1),a2(1,1),prod_(1,1))
11020 prod(1,1)=(a1(1,1)*kk(1,1)+a1(1,2)*kk(2,1))*a2(1,1) &
11021 +(a1(1,1)*kk(1,2)+a1(1,2)*kk(2,2))*a2(2,1)
11022 prod(1,2)=(a1(1,1)*kk(1,1)+a1(1,2)*kk(2,1))*a2(1,2) &
11023 +(a1(1,1)*kk(1,2)+a1(1,2)*kk(2,2))*a2(2,2)
11024 prod(2,1)=(a1(2,1)*kk(1,1)+a1(2,2)*kk(2,1))*a2(1,1) &
11025 +(a1(2,1)*kk(1,2)+a1(2,2)*kk(2,2))*a2(2,1)
11026 prod(2,2)=(a1(2,1)*kk(1,1)+a1(2,2)*kk(2,1))*a2(1,2) &
11027 +(a1(2,1)*kk(1,2)+a1(2,2)*kk(2,2))*a2(2,2)
11030 ! call transpose2(a2(1,1),a2t(1,1))
11033 !rc print *,((prod_(i,j),i=1,2),j=1,2)
11034 !rc print *,((prod(i,j),i=1,2),j=1,2)
11037 end subroutine prodmat3
11038 !-----------------------------------------------------------------------------
11039 ! energy_p_new_barrier.F
11040 !-----------------------------------------------------------------------------
11041 subroutine sum_gradient
11042 ! implicit real*8 (a-h,o-z)
11043 use io_base, only: pdbout
11044 ! include 'DIMENSIONS'
11048 !MS$ATTRIBUTES C :: proc_proc
11054 real(kind=8),dimension(3,-1:nres) :: gradbufc,gradbufx,gradbufc_sum,&
11055 gloc_scbuf !(3,maxres)
11057 real(kind=8),dimension(4*nres) :: glocbuf !(4*maxres)
11059 !el local variables
11060 integer :: i,j,k,ierror,ierr
11061 real(kind=8) :: gvdwc_norm,gvdwc_scp_norm,gelc_norm,gvdwpp_norm,&
11062 gradb_norm,ghpbc_norm,gradcorr_norm,gel_loc_norm,&
11063 gcorr3_turn_norm,gcorr4_turn_norm,gradcorr5_norm,&
11064 gradcorr6_norm,gcorr6_turn_norm,gsccorr_norm,&
11065 gscloc_norm,gvdwx_norm,gradx_scp_norm,ghpbx_norm,&
11066 gradxorr_norm,gsccorrx_norm,gsclocx_norm,gcorr6_max,&
11067 gsccorr_max,gsccorrx_max,time00
11069 ! include 'COMMON.SETUP'
11070 ! include 'COMMON.IOUNITS'
11071 ! include 'COMMON.FFIELD'
11072 ! include 'COMMON.DERIV'
11073 ! include 'COMMON.INTERACT'
11074 ! include 'COMMON.SBRIDGE'
11075 ! include 'COMMON.CHAIN'
11076 ! include 'COMMON.VAR'
11077 ! include 'COMMON.CONTROL'
11078 ! include 'COMMON.TIME1'
11079 ! include 'COMMON.MAXGRAD'
11080 ! include 'COMMON.SCCOR'
11086 write (iout,*) "sum_gradient gvdwc, gvdwx"
11088 write (iout,'(i3,3f10.5,5x,3f10.5,5x,f10.5)') &
11089 i,(gvdwx(j,i),j=1,3),(gvdwc(j,i),j=1,3)
11099 ! FG slaves call the following matching MPI_Bcast in ERGASTULUM
11100 if (nfgtasks.gt.1 .and. fg_rank.eq.0) &
11101 call MPI_Bcast(1,1,MPI_INTEGER,king,FG_COMM,IERROR)
11104 ! 9/29/08 AL Transform parts of gradients in site coordinates to the gradient
11105 ! in virtual-bond-vector coordinates
11108 ! write (iout,*) "gel_loc gel_loc_long and gel_loc_loc"
11110 ! write (iout,'(i5,3f10.5,2x,3f10.5,2x,f10.5)')
11111 ! & i,(gel_loc(j,i),j=1,3),(gel_loc_long(j,i),j=1,3),gel_loc_loc(i)
11113 ! write (iout,*) "gel_loc_tur3 gel_loc_turn4"
11115 ! write (iout,'(i5,3f10.5,2x,f10.5)')
11116 ! & i,(gcorr4_turn(j,i),j=1,3),gel_loc_turn4(i)
11118 ! write (iout,*) "gvdwc gvdwc_scp gvdwc_scpp"
11120 ! write (iout,'(i3,3f10.5,5x,3f10.5,5x,f10.5)') &
11121 ! i,(gvdwc(j,i),j=1,3),(gvdwc_scp(j,i),j=1,3),&
11122 ! (gvdwc_scpp(j,i),j=1,3)
11124 ! write (iout,*) "gelc_long gvdwpp gel_loc_long"
11126 ! write (iout,'(i3,3f10.5,5x,3f10.5,5x,f10.5)') &
11127 ! i,(gelc_long(j,i),j=1,3),(gvdwpp(j,i),j=1,3),&
11128 ! (gelc_loc_long(j,i),j=1,3)
11135 gradbufc(j,i)=wsc*gvdwc(j,i)+ &
11136 wscp*(gvdwc_scp(j,i)+gvdwc_scpp(j,i))+ &
11137 welec*gelc_long(j,i)+wvdwpp*gvdwpp(j,i)+ &
11138 wel_loc*gel_loc_long(j,i)+ &
11139 wcorr*gradcorr_long(j,i)+ &
11140 wcorr5*gradcorr5_long(j,i)+ &
11141 wcorr6*gradcorr6_long(j,i)+ &
11142 wturn6*gcorr6_turn_long(j,i)+ &
11143 wstrain*ghpbc(j,i) &
11144 +wliptran*gliptranc(j,i) &
11146 +welec*gshieldc(j,i) &
11147 +wcorr*gshieldc_ec(j,i) &
11148 +wturn3*gshieldc_t3(j,i)&
11149 +wturn4*gshieldc_t4(j,i)&
11150 +wel_loc*gshieldc_ll(j,i)&
11151 +wtube*gg_tube(j,i) &
11152 +wvdwpp_nucl*gvdwpp_nucl(j,i)+welpp*gelpp(j,i)+ &
11153 wvdwpsb*(gvdwpsb(j,i)+gvdwpsb1(j,i))+ &
11154 wvdwsb*gvdwsbc(j,i)+welsb*gelsbc(j,i)+ &
11155 wcorr_nucl*gradcorr_nucl(j,i)&
11156 +wcorr3_nucl*gradcorr3_nucl(j,i)+&
11157 wcatprot* gradpepcat(j,i)+ &
11158 wcatcat*gradcatcat(j,i)+ &
11159 wscbase*gvdwc_scbase(j,i)+ &
11160 wpepbase*gvdwc_pepbase(j,i)+&
11161 wscpho*gvdwc_scpho(j,i)+ &
11162 wpeppho*gvdwc_peppho(j,i)+wcatnucl*gradnuclcat(j,i)
11173 gradbufc(j,i)=wsc*gvdwc(j,i)+ &
11174 wscp*(gvdwc_scp(j,i)+gvdwc_scpp(j,i))+ &
11175 welec*gelc_long(j,i)+ &
11176 wbond*gradb(j,i)+ &
11177 wel_loc*gel_loc_long(j,i)+ &
11178 wcorr*gradcorr_long(j,i)+ &
11179 wcorr5*gradcorr5_long(j,i)+ &
11180 wcorr6*gradcorr6_long(j,i)+ &
11181 wturn6*gcorr6_turn_long(j,i)+ &
11182 wstrain*ghpbc(j,i) &
11183 +wliptran*gliptranc(j,i) &
11185 +welec*gshieldc(j,i)&
11186 +wcorr*gshieldc_ec(j,i) &
11187 +wturn4*gshieldc_t4(j,i) &
11188 +wel_loc*gshieldc_ll(j,i)&
11189 +wtube*gg_tube(j,i) &
11190 +wvdwpp_nucl*gvdwpp_nucl(j,i)+welpp*gelpp(j,i)+ &
11191 wvdwpsb*(gvdwpsb(j,i)+gvdwpsb1(j,i))+ &
11192 wvdwsb*gvdwsbc(j,i)+welsb*gelsbc(j,i)+ &
11193 wcorr_nucl*gradcorr_nucl(j,i) &
11194 +wcorr3_nucl*gradcorr3_nucl(j,i) +&
11195 wcatprot* gradpepcat(j,i)+ &
11196 wcatcat*gradcatcat(j,i)+ &
11197 wscbase*gvdwc_scbase(j,i)+ &
11198 wpepbase*gvdwc_pepbase(j,i)+&
11199 wscpho*gvdwc_scpho(j,i)+&
11200 wpeppho*gvdwc_peppho(j,i)+wcatnucl*gradnuclcat(j,i)
11207 if (nfgtasks.gt.1) then
11210 write (iout,*) "gradbufc before allreduce"
11212 write (iout,'(i3,3f10.5)') i,(gradbufc(j,i),j=1,3)
11218 gradbufc_sum(j,i)=gradbufc(j,i)
11221 ! call MPI_AllReduce(gradbufc(1,1),gradbufc_sum(1,1),3*nres,
11222 ! & MPI_DOUBLE_PRECISION,MPI_SUM,FG_COMM,IERR)
11223 ! time_reduce=time_reduce+MPI_Wtime()-time00
11225 ! write (iout,*) "gradbufc_sum after allreduce"
11227 ! write (iout,'(i3,3f10.5)') i,(gradbufc_sum(j,i),j=1,3)
11232 ! time_allreduce=time_allreduce+MPI_Wtime()-time00
11236 gradbufc(k,i)=0.0d0
11240 write (iout,*) "igrad_start",igrad_start," igrad_end",igrad_end
11241 write (iout,*) (i," jgrad_start",jgrad_start(i),&
11242 " jgrad_end ",jgrad_end(i),&
11243 i=igrad_start,igrad_end)
11246 ! Obsolete and inefficient code; we can make the effort O(n) and, therefore,
11247 ! do not parallelize this part.
11249 ! do i=igrad_start,igrad_end
11250 ! do j=jgrad_start(i),jgrad_end(i)
11252 ! gradbufc(k,i)=gradbufc(k,i)+gradbufc_sum(k,j)
11257 gradbufc(j,nres-1)=gradbufc_sum(j,nres)
11261 gradbufc(j,i)=gradbufc(j,i+1)+gradbufc_sum(j,i+1)
11265 write (iout,*) "gradbufc after summing"
11267 write (iout,'(i3,3f10.5)') i,(gradbufc(j,i),j=1,3)
11275 write (iout,*) "gradbufc"
11277 write (iout,'(i3,3f10.5)') i,(gradbufc(j,i),j=1,3)
11284 gradbufc_sum(j,i)=gradbufc(j,i)
11285 gradbufc(j,i)=0.0d0
11289 gradbufc(j,nres-1)=gradbufc_sum(j,nres)
11293 gradbufc(j,i)=gradbufc(j,i+1)+gradbufc_sum(j,i+1)
11298 ! gradbufc(k,i)=0.0d0
11302 ! gradbufc(k,i)=gradbufc(k,i)+gradbufc(k,j)
11308 write (iout,*) "gradbufc after summing"
11310 write (iout,'(i3,3f10.5)') i,(gradbufc(j,i),j=1,3)
11319 gradbufc(k,nres)=0.0d0
11321 !el----------------
11322 !el if (.not.allocated(gradx)) allocate(gradx(3,nres,2)) !(3,maxres,2)
11323 !el if (.not.allocated(gradc)) allocate(gradc(3,nres,2)) !(3,maxres,2)
11324 !el-----------------
11328 gradc(j,i,icg)=gradbufc(j,i)+welec*gelc(j,i)+ &
11329 wel_loc*gel_loc(j,i)+ &
11330 0.5d0*(wscp*gvdwc_scpp(j,i)+ &
11331 welec*gelc_long(j,i)+wvdwpp*gvdwpp(j,i)+ &
11332 wel_loc*gel_loc_long(j,i)+ &
11333 wcorr*gradcorr_long(j,i)+ &
11334 wcorr5*gradcorr5_long(j,i)+ &
11335 wcorr6*gradcorr6_long(j,i)+ &
11336 wturn6*gcorr6_turn_long(j,i))+ &
11337 wbond*gradb(j,i)+ &
11338 wcorr*gradcorr(j,i)+ &
11339 wturn3*gcorr3_turn(j,i)+ &
11340 wturn4*gcorr4_turn(j,i)+ &
11341 wcorr5*gradcorr5(j,i)+ &
11342 wcorr6*gradcorr6(j,i)+ &
11343 wturn6*gcorr6_turn(j,i)+ &
11344 wsccor*gsccorc(j,i) &
11345 +wscloc*gscloc(j,i) &
11346 +wliptran*gliptranc(j,i) &
11348 +welec*gshieldc(j,i) &
11349 +welec*gshieldc_loc(j,i) &
11350 +wcorr*gshieldc_ec(j,i) &
11351 +wcorr*gshieldc_loc_ec(j,i) &
11352 +wturn3*gshieldc_t3(j,i) &
11353 +wturn3*gshieldc_loc_t3(j,i) &
11354 +wturn4*gshieldc_t4(j,i) &
11355 +wturn4*gshieldc_loc_t4(j,i) &
11356 +wel_loc*gshieldc_ll(j,i) &
11357 +wel_loc*gshieldc_loc_ll(j,i) &
11358 +wtube*gg_tube(j,i) &
11359 +0.5d0*(wvdwpp_nucl*gvdwpp_nucl(j,i)+welpp*gelpp(j,i)&
11360 +wvdwpsb*gvdwpsb1(j,i))&
11361 +wbond_nucl*gradb_nucl(j,i)+wsbloc*gsbloc(j,i)
11362 ! if (i.eq.21) then
11363 ! print *,"in sum",gradc(j,i,icg),wturn4*gcorr4_turn(j,i),&
11364 ! wturn4*gshieldc_t4(j,i), &
11365 ! wturn4*gshieldc_loc_t4(j,i)
11367 ! if ((i.le.2).and.(i.ge.1))
11368 ! print *,gradc(j,i,icg),&
11369 ! gradbufc(j,i),welec*gelc(j,i), &
11370 ! wel_loc*gel_loc(j,i), &
11371 ! wscp*gvdwc_scpp(j,i), &
11372 ! welec*gelc_long(j,i),wvdwpp*gvdwpp(j,i), &
11373 ! wel_loc*gel_loc_long(j,i), &
11374 ! wcorr*gradcorr_long(j,i), &
11375 ! wcorr5*gradcorr5_long(j,i), &
11376 ! wcorr6*gradcorr6_long(j,i), &
11377 ! wturn6*gcorr6_turn_long(j,i), &
11378 ! wbond*gradb(j,i), &
11379 ! wcorr*gradcorr(j,i), &
11380 ! wturn3*gcorr3_turn(j,i), &
11381 ! wturn4*gcorr4_turn(j,i), &
11382 ! wcorr5*gradcorr5(j,i), &
11383 ! wcorr6*gradcorr6(j,i), &
11384 ! wturn6*gcorr6_turn(j,i), &
11385 ! wsccor*gsccorc(j,i) &
11386 ! ,wscloc*gscloc(j,i) &
11387 ! ,wliptran*gliptranc(j,i) &
11389 ! ,welec*gshieldc(j,i) &
11390 ! ,welec*gshieldc_loc(j,i) &
11391 ! ,wcorr*gshieldc_ec(j,i) &
11392 ! ,wcorr*gshieldc_loc_ec(j,i) &
11393 ! ,wturn3*gshieldc_t3(j,i) &
11394 ! ,wturn3*gshieldc_loc_t3(j,i) &
11395 ! ,wturn4*gshieldc_t4(j,i) &
11396 ! ,wturn4*gshieldc_loc_t4(j,i) &
11397 ! ,wel_loc*gshieldc_ll(j,i) &
11398 ! ,wel_loc*gshieldc_loc_ll(j,i) &
11399 ! ,wtube*gg_tube(j,i) &
11400 ! ,wbond_nucl*gradb_nucl(j,i) &
11401 ! ,wvdwpp_nucl*gvdwpp_nucl(j,i),welpp*gelpp(j,i),&
11402 ! wvdwpsb*gvdwpsb1(j,i)&
11403 ! ,wbond_nucl*gradb_nucl(j,i),wsbloc*gsbloc(j,i)
11407 gradc(j,i,icg)=gradbufc(j,i)+welec*gelc(j,i)+ &
11408 wel_loc*gel_loc(j,i)+ &
11409 0.5d0*(wscp*gvdwc_scpp(j,i)+ &
11410 welec*gelc_long(j,i)+ &
11411 wel_loc*gel_loc_long(j,i)+ &
11412 !el wcorr*gcorr_long(j,i)+ & !el gcorr_long- brak deklaracji
11413 wcorr5*gradcorr5_long(j,i)+ &
11414 wcorr6*gradcorr6_long(j,i)+ &
11415 wturn6*gcorr6_turn_long(j,i))+ &
11416 wbond*gradb(j,i)+ &
11417 wcorr*gradcorr(j,i)+ &
11418 wturn3*gcorr3_turn(j,i)+ &
11419 wturn4*gcorr4_turn(j,i)+ &
11420 wcorr5*gradcorr5(j,i)+ &
11421 wcorr6*gradcorr6(j,i)+ &
11422 wturn6*gcorr6_turn(j,i)+ &
11423 wsccor*gsccorc(j,i) &
11424 +wscloc*gscloc(j,i) &
11426 +wliptran*gliptranc(j,i) &
11427 +welec*gshieldc(j,i) &
11428 +welec*gshieldc_loc(j,i) &
11429 +wcorr*gshieldc_ec(j,i) &
11430 +wcorr*gshieldc_loc_ec(j,i) &
11431 +wturn3*gshieldc_t3(j,i) &
11432 +wturn3*gshieldc_loc_t3(j,i) &
11433 +wturn4*gshieldc_t4(j,i) &
11434 +wturn4*gshieldc_loc_t4(j,i) &
11435 +wel_loc*gshieldc_ll(j,i) &
11436 +wel_loc*gshieldc_loc_ll(j,i) &
11437 +wtube*gg_tube(j,i) &
11438 +wbond_nucl*gradb_nucl(j,i) &
11439 +0.5d0*(wvdwpp_nucl*gvdwpp_nucl(j,i)+welpp*gelpp(j,i)&
11440 +wvdwpsb*gvdwpsb1(j,i))&
11441 +wsbloc*gsbloc(j,i)+wcatnucl*gradnuclcat(j,i)
11447 gradx(j,i,icg)=wsc*gvdwx(j,i)+wscp*gradx_scp(j,i)+ &
11448 wbond*gradbx(j,i)+ &
11449 wstrain*ghpbx(j,i)+wcorr*gradxorr(j,i)+ &
11450 wsccor*gsccorx(j,i) &
11451 +wscloc*gsclocx(j,i) &
11452 +wliptran*gliptranx(j,i) &
11453 +welec*gshieldx(j,i) &
11454 +wcorr*gshieldx_ec(j,i) &
11455 +wturn3*gshieldx_t3(j,i) &
11456 +wturn4*gshieldx_t4(j,i) &
11457 +wel_loc*gshieldx_ll(j,i)&
11458 +wtube*gg_tube_sc(j,i) &
11459 +wbond_nucl*gradbx_nucl(j,i) &
11460 +wvdwsb*gvdwsbx(j,i) &
11461 +welsb*gelsbx(j,i) &
11462 +wcorr_nucl*gradxorr_nucl(j,i)&
11463 +wcorr3_nucl*gradxorr3_nucl(j,i) &
11464 +wsbloc*gsblocx(j,i) &
11465 +wcatprot* gradpepcatx(j,i)&
11466 +wscbase*gvdwx_scbase(j,i) &
11467 +wpepbase*gvdwx_pepbase(j,i)&
11468 +wscpho*gvdwx_scpho(j,i)+wcatnucl*gradnuclcatx(j,i)
11469 ! if (i.eq.3) print *,"tu?", wscpho,gvdwx_scpho(j,i)
11475 write (iout,*) "gloc before adding corr"
11477 write (iout,*) i,gloc(i,icg)
11481 gloc(i,icg)=gloc(i,icg)+wcorr*gcorr_loc(i) &
11482 +wcorr5*g_corr5_loc(i) &
11483 +wcorr6*g_corr6_loc(i) &
11484 +wturn4*gel_loc_turn4(i) &
11485 +wturn3*gel_loc_turn3(i) &
11486 +wturn6*gel_loc_turn6(i) &
11487 +wel_loc*gel_loc_loc(i)
11490 write (iout,*) "gloc after adding corr"
11492 write (iout,*) i,gloc(i,icg)
11497 if (nfgtasks.gt.1) then
11500 gradbufc(j,i)=gradc(j,i,icg)
11501 gradbufx(j,i)=gradx(j,i,icg)
11505 glocbuf(i)=gloc(i,icg)
11509 write (iout,*) "gloc_sc before reduce"
11512 write (iout,*) i,j,gloc_sc(j,i,icg)
11519 gloc_scbuf(j,i)=gloc_sc(j,i,icg)
11523 call MPI_Barrier(FG_COMM,IERR)
11524 time_barrier_g=time_barrier_g+MPI_Wtime()-time00
11526 call MPI_Reduce(gradbufc(1,0),gradc(1,0,icg),3*nres+3,&
11527 MPI_DOUBLE_PRECISION,MPI_SUM,king,FG_COMM,IERR)
11528 call MPI_Reduce(gradbufx(1,0),gradx(1,0,icg),3*nres+3,&
11529 MPI_DOUBLE_PRECISION,MPI_SUM,king,FG_COMM,IERR)
11530 call MPI_Reduce(glocbuf(1),gloc(1,icg),4*nres,&
11531 MPI_DOUBLE_PRECISION,MPI_SUM,king,FG_COMM,IERR)
11532 time_reduce=time_reduce+MPI_Wtime()-time00
11533 call MPI_Reduce(gloc_scbuf(1,0),gloc_sc(1,0,icg),3*nres+3,&
11534 MPI_DOUBLE_PRECISION,MPI_SUM,king,FG_COMM,IERR)
11535 time_reduce=time_reduce+MPI_Wtime()-time00
11537 ! print *,"gradbuf",gradbufc(1,1),gradc(1,1,icg)
11539 write (iout,*) "gloc_sc after reduce"
11542 write (iout,*) i,j,gloc_sc(j,i,icg)
11548 write (iout,*) "gloc after reduce"
11550 write (iout,*) i,gloc(i,icg)
11555 if (gnorm_check) then
11557 ! Compute the maximum elements of the gradient
11560 gvdwc_scp_max=0.0d0
11567 gcorr3_turn_max=0.0d0
11568 gcorr4_turn_max=0.0d0
11569 gradcorr5_max=0.0d0
11570 gradcorr6_max=0.0d0
11571 gcorr6_turn_max=0.0d0
11575 gradx_scp_max=0.0d0
11581 gvdwc_norm=dsqrt(scalar(gvdwc(1,i),gvdwc(1,i)))
11582 if (gvdwc_norm.gt.gvdwc_max) gvdwc_max=gvdwc_norm
11583 gvdwc_scp_norm=dsqrt(scalar(gvdwc_scp(1,i),gvdwc_scp(1,i)))
11584 if (gvdwc_scp_norm.gt.gvdwc_scp_max) &
11585 gvdwc_scp_max=gvdwc_scp_norm
11586 gelc_norm=dsqrt(scalar(gelc(1,i),gelc(1,i)))
11587 if (gelc_norm.gt.gelc_max) gelc_max=gelc_norm
11588 gvdwpp_norm=dsqrt(scalar(gvdwpp(1,i),gvdwpp(1,i)))
11589 if (gvdwpp_norm.gt.gvdwpp_max) gvdwpp_max=gvdwpp_norm
11590 gradb_norm=dsqrt(scalar(gradb(1,i),gradb(1,i)))
11591 if (gradb_norm.gt.gradb_max) gradb_max=gradb_norm
11592 ghpbc_norm=dsqrt(scalar(ghpbc(1,i),ghpbc(1,i)))
11593 if (ghpbc_norm.gt.ghpbc_max) ghpbc_max=ghpbc_norm
11594 gradcorr_norm=dsqrt(scalar(gradcorr(1,i),gradcorr(1,i)))
11595 if (gradcorr_norm.gt.gradcorr_max) gradcorr_max=gradcorr_norm
11596 gel_loc_norm=dsqrt(scalar(gel_loc(1,i),gel_loc(1,i)))
11597 if (gel_loc_norm.gt.gel_loc_max) gel_loc_max=gel_loc_norm
11598 gcorr3_turn_norm=dsqrt(scalar(gcorr3_turn(1,i),&
11600 if (gcorr3_turn_norm.gt.gcorr3_turn_max) &
11601 gcorr3_turn_max=gcorr3_turn_norm
11602 gcorr4_turn_norm=dsqrt(scalar(gcorr4_turn(1,i),&
11604 if (gcorr4_turn_norm.gt.gcorr4_turn_max) &
11605 gcorr4_turn_max=gcorr4_turn_norm
11606 gradcorr5_norm=dsqrt(scalar(gradcorr5(1,i),gradcorr5(1,i)))
11607 if (gradcorr5_norm.gt.gradcorr5_max) &
11608 gradcorr5_max=gradcorr5_norm
11609 gradcorr6_norm=dsqrt(scalar(gradcorr6(1,i),gradcorr6(1,i)))
11610 if (gradcorr6_norm.gt.gradcorr6_max) gcorr6_max=gradcorr6_norm
11611 gcorr6_turn_norm=dsqrt(scalar(gcorr6_turn(1,i),&
11613 if (gcorr6_turn_norm.gt.gcorr6_turn_max) &
11614 gcorr6_turn_max=gcorr6_turn_norm
11615 gsccorr_norm=dsqrt(scalar(gsccorc(1,i),gsccorc(1,i)))
11616 if (gsccorr_norm.gt.gsccorr_max) gsccorr_max=gsccorr_norm
11617 gscloc_norm=dsqrt(scalar(gscloc(1,i),gscloc(1,i)))
11618 if (gscloc_norm.gt.gscloc_max) gscloc_max=gscloc_norm
11619 gvdwx_norm=dsqrt(scalar(gvdwx(1,i),gvdwx(1,i)))
11620 if (gvdwx_norm.gt.gvdwx_max) gvdwx_max=gvdwx_norm
11621 gradx_scp_norm=dsqrt(scalar(gradx_scp(1,i),gradx_scp(1,i)))
11622 if (gradx_scp_norm.gt.gradx_scp_max) &
11623 gradx_scp_max=gradx_scp_norm
11624 ghpbx_norm=dsqrt(scalar(ghpbx(1,i),ghpbx(1,i)))
11625 if (ghpbx_norm.gt.ghpbx_max) ghpbx_max=ghpbx_norm
11626 gradxorr_norm=dsqrt(scalar(gradxorr(1,i),gradxorr(1,i)))
11627 if (gradxorr_norm.gt.gradxorr_max) gradxorr_max=gradxorr_norm
11628 gsccorrx_norm=dsqrt(scalar(gsccorx(1,i),gsccorx(1,i)))
11629 if (gsccorrx_norm.gt.gsccorrx_max) gsccorrx_max=gsccorrx_norm
11630 gsclocx_norm=dsqrt(scalar(gsclocx(1,i),gsclocx(1,i)))
11631 if (gsclocx_norm.gt.gsclocx_max) gsclocx_max=gsclocx_norm
11635 open(istat,file=statname,position="append")
11637 open(istat,file=statname,access="append")
11639 write (istat,'(1h#,21f10.2)') gvdwc_max,gvdwc_scp_max,&
11640 gelc_max,gvdwpp_max,gradb_max,ghpbc_max,&
11641 gradcorr_max,gel_loc_max,gcorr3_turn_max,gcorr4_turn_max,&
11642 gradcorr5_max,gradcorr6_max,gcorr6_turn_max,gsccorc_max,&
11643 gscloc_max,gvdwx_max,gradx_scp_max,ghpbx_max,gradxorr_max,&
11644 gsccorx_max,gsclocx_max
11646 if (gvdwc_max.gt.1.0d4) then
11647 write (iout,*) "gvdwc gvdwx gradb gradbx"
11649 write(iout,'(i5,4(3f10.2,5x))') i,(gvdwc(j,i),gvdwx(j,i),&
11650 gradb(j,i),gradbx(j,i),j=1,3)
11652 call pdbout(0.0d0,'cipiszcze',iout)
11659 write (iout,*) "gradc gradx gloc"
11661 write (iout,'(i5,3f10.5,5x,3f10.5,5x,f10.5)') &
11662 i,(gradc(j,i,icg),j=1,3),(gradx(j,i,icg),j=1,3),gloc(i,icg)
11667 time_sumgradient=time_sumgradient+MPI_Wtime()-time01
11670 end subroutine sum_gradient
11671 !-----------------------------------------------------------------------------
11673 ! implicit real*8 (a-h,o-z)
11675 ! include 'DIMENSIONS'
11676 ! include 'COMMON.CHAIN'
11677 ! include 'COMMON.DERIV'
11678 ! include 'COMMON.CALC'
11679 ! include 'COMMON.IOUNITS'
11680 real(kind=8), dimension(3) :: dcosom1,dcosom2
11681 ! print *,"wchodze"
11682 eom1=eps2der*eps2rt_om1-2.0D0*alf1*eps3der+sigder*sigsq_om1 &
11683 +dCAVdOM1+ dGCLdOM1+ dPOLdOM1
11684 eom2=eps2der*eps2rt_om2+2.0D0*alf2*eps3der+sigder*sigsq_om2 &
11685 +dCAVdOM2+ dGCLdOM2+ dPOLdOM2
11687 eom12=evdwij*eps1_om12+eps2der*eps2rt_om12 &
11688 -2.0D0*alf12*eps3der+sigder*sigsq_om12&
11689 +dCAVdOM12+ dGCLdOM12
11693 ! eom12=evdwij*eps1_om12
11695 ! write (iout,*) "eps2der",eps2der," eps3der",eps3der,&
11697 ! write (iout,*) "eps1_om12",eps1_om12," eps2rt_om12",eps2rt_om12
11698 ! write (iout,*) "eom1",eom1," eom2",eom2," eom12",eom12
11699 !C print *,sss_ele_cut,'in sc_grad'
11701 dcosom1(k)=rij*(dc_norm(k,nres+i)-om1*erij(k))
11702 dcosom2(k)=rij*(dc_norm(k,nres+j)-om2*erij(k))
11705 gg(k)=(gg(k)+eom1*dcosom1(k)+eom2*dcosom2(k))*sss_ele_cut
11706 !C print *,'gg',k,gg(k)
11708 ! print *,i,j,gg_lipi(3),gg_lipj(3),sss_ele_cut
11709 ! write (iout,*) "gg",(gg(k),k=1,3)
11711 gvdwx(k,i)=gvdwx(k,i)-gg(k) +gg_lipi(k)&
11712 +(eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,nres+i)) &
11713 +eom1*(erij(k)-om1*dc_norm(k,nres+i)))*dsci_inv &
11716 gvdwx(k,j)=gvdwx(k,j)+gg(k)+gg_lipj(k)&
11717 +(eom12*(dc_norm(k,nres+i)-om12*dc_norm(k,nres+j)) &
11718 +eom2*(erij(k)-om2*dc_norm(k,nres+j)))*dscj_inv &
11721 ! write (iout,*)(eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,nres+i)) &
11722 ! +eom1*(erij(k)-om1*dc_norm(k,nres+i)))*dsci_inv
11723 ! write (iout,*)(eom12*(dc_norm(k,nres+i)-om12*dc_norm(k,nres+j)) &
11724 ! +eom2*(erij(k)-om2*dc_norm(k,nres+j)))*dscj_inv
11727 ! Calculate the components of the gradient in DC and X
11731 !grad gvdwc(l,k)=gvdwc(l,k)+gg(l)
11735 gvdwc(l,i)=gvdwc(l,i)-gg(l)+gg_lipi(l)
11736 gvdwc(l,j)=gvdwc(l,j)+gg(l)+gg_lipj(l)
11739 end subroutine sc_grad
11741 subroutine sc_grad_cat
11743 real(kind=8), dimension(3) :: dcosom1,dcosom2
11744 eom1=eps2der*eps2rt_om1-2.0D0*alf1*eps3der+sigder*sigsq_om1 &
11745 +dCAVdOM1+ dGCLdOM1+ dPOLdOM1
11746 eom2=eps2der*eps2rt_om2+2.0D0*alf2*eps3der+sigder*sigsq_om2 &
11747 +dCAVdOM2+ dGCLdOM2+ dPOLdOM2
11749 eom12=evdwij*eps1_om12+eps2der*eps2rt_om12 &
11750 -2.0D0*alf12*eps3der+sigder*sigsq_om12&
11751 +dCAVdOM12+ dGCLdOM12
11755 ! eom12=evdwij*eps1_om12
11759 dcosom1(k)=rij*(dc_norm(k,nres+i)-om1*erij(k))
11760 dcosom2(k)=rij*(dc_norm(k,j)-om2*erij(k))
11763 gg(k)=(gg(k)+eom1*dcosom1(k)+eom2*dcosom2(k))
11764 !C print *,'gg',k,gg(k)
11766 ! print *,i,j,gg_lipi(3),gg_lipj(3),sss_ele_cut
11767 ! write (iout,*) "gg",(gg(k),k=1,3)
11769 gradpepcatx(k,i)=gradpepcatx(k,i)-gg(k) &
11770 +(eom12*(dc_norm(k,j)-om12*dc_norm(k,nres+i)) &
11771 +eom1*(erij(k)-om1*dc_norm(k,nres+i)))*dsci_inv
11773 ! gradpepcatx(k,j)=gradpepcatx(k,j)+gg(k) &
11774 ! +(eom12*(dc_norm(k,nres+i)-om12*dc_norm(k,j)) &
11775 ! +eom2*(erij(k)-om2*dc_norm(k,j)))*dscj_inv
11777 ! write (iout,*)(eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,nres+i)) &
11778 ! +eom1*(erij(k)-om1*dc_norm(k,nres+i)))*dsci_inv
11779 ! write (iout,*)(eom12*(dc_norm(k,nres+i)-om12*dc_norm(k,nres+j)) &
11780 ! +eom2*(erij(k)-om2*dc_norm(k,nres+j)))*dscj_inv
11783 ! Calculate the components of the gradient in DC and X
11786 gradpepcat(l,i)=gradpepcat(l,i)-gg(l)
11787 gradpepcat(l,j)=gradpepcat(l,j)+gg(l)
11789 end subroutine sc_grad_cat
11791 subroutine sc_grad_cat_pep
11793 real(kind=8), dimension(3) :: dcosom1,dcosom2
11794 eom1=eps2der*eps2rt_om1-2.0D0*alf1*eps3der+sigder*sigsq_om1 &
11795 +dCAVdOM1+ dGCLdOM1+ dPOLdOM1
11796 eom2=eps2der*eps2rt_om2+2.0D0*alf2*eps3der+sigder*sigsq_om2 &
11797 +dCAVdOM2+ dGCLdOM2+ dPOLdOM2
11799 eom12=evdwij*eps1_om12+eps2der*eps2rt_om12 &
11800 -2.0D0*alf12*eps3der+sigder*sigsq_om12&
11801 +dCAVdOM12+ dGCLdOM12
11805 ! eom12=evdwij*eps1_om12
11809 dcosom1(k) = rij * (dc_norm(k,i) - om1 * erij(k))
11810 dcosom2(k) = rij * (dc_norm(k,nres+j) - om2 * erij(k))
11811 gg(k) = gg(k) + eom1 * dcosom1(k) + eom2 * dcosom2(k)
11812 gvdwc_pepbase(k,i)= gvdwc_pepbase(k,i) +0.5*(- gg(k)) &
11813 + (-eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,i)))&
11815 - (eom1*(erij(k)-om1*dc_norm(k,i)))*dsci_inv*2.0
11816 gvdwc_pepbase(k,i+1)= gvdwc_pepbase(k,i+1) +0.5*(- gg(k)) &
11817 - (-eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,i))) &
11819 + (eom1*(erij(k)-om1*dc_norm(k,i)))*dsci_inv*2.0
11820 gradpepcat(k,j)=gradpepcat(k,j)+gg(k)
11822 end subroutine sc_grad_cat_pep
11825 !-----------------------------------------------------------------------------
11826 subroutine mixder(thetai,thet_pred_mean,theta0i,E_tc_t)
11829 ! implicit real*8 (a-h,o-z)
11830 ! include 'DIMENSIONS'
11831 ! include 'COMMON.LOCAL'
11832 ! include 'COMMON.IOUNITS'
11833 !el real(kind=8) :: term1,term2,termm,diffak,ratak,&
11834 !el ak,aktc,termpre,termexp,sigc,sig0i,time11,time12,sigcsq,&
11835 !el delthe0,sig0inv,sigtc,sigsqtc,delthec,
11836 real(kind=8) :: thetai,thet_pred_mean,theta0i,E_tc_t
11837 real(kind=8) :: t3,t6,t9,t12,t14,t16,t21,t23,t26,t27,t32,t40
11839 !el common /calcthet/ term1,term2,termm,diffak,ratak,&
11840 !el ak,aktc,termpre,termexp,sigc,sig0i,time11,time12,sigcsq,&
11841 !el delthe0,sig0inv,sigtc,sigsqtc,delthec,it
11842 !el local variables
11844 delthec=thetai-thet_pred_mean
11845 delthe0=thetai-theta0i
11846 ! "Thank you" to MAPLE (probably spared one day of hand-differentiation).
11847 t3 = thetai-thet_pred_mean
11851 t14 = t12+t6*sigsqtc
11853 t21 = thetai-theta0i
11859 E_tc_t = -((sigcsq+2.D0*t3*sigsqtc)*t9-t14*sigcsq*t3*t16*t9 &
11860 -aktc*sig0inv*t27)/t32+(t14*t9+aktc*t26)/t40 &
11861 *(-t12*t9-ak*sig0inv*t27)
11863 end subroutine mixder
11865 !-----------------------------------------------------------------------------
11867 !-----------------------------------------------------------------------------
11869 !-----------------------------------------------------------------------------
11870 ! This subroutine calculates the derivatives of the consecutive virtual
11871 ! bond vectors and the SC vectors in the virtual-bond angles theta and
11872 ! virtual-torsional angles phi, as well as the derivatives of SC vectors
11873 ! in the angles alpha and omega, describing the location of a side chain
11874 ! in its local coordinate system.
11876 ! The derivatives are stored in the following arrays:
11878 ! DDCDV - the derivatives of virtual-bond vectors DC in theta and phi.
11879 ! The structure is as follows:
11881 ! dDC(x,2)/dT(3),...,dDC(z,2)/dT(3),0, 0, 0
11882 ! dDC(x,3)/dT(4),...,dDC(z,3)/dT(4),dDC(x,3)/dP(4),dDC(y,4)/dP(4),dDC(z,4)/dP(4)
11883 ! . . . . . . . . . . . . . . . . . .
11884 ! dDC(x,N-1)/dT(4),...,dDC(z,N-1)/dT(4),dDC(x,N-1)/dP(4),dDC(y,N-1)/dP(4),dDC(z,N-1)/dP(4)
11888 ! dDC(x,N-1)/dT(N),...,dDC(z,N-1)/dT(N),dDC(x,N-1)/dP(N),dDC(y,N-1)/dP(N),dDC(z,N-1)/dP(N)
11890 ! DXDV - the derivatives of the side-chain vectors in theta and phi.
11891 ! The structure is same as above.
11893 ! DCDS - the derivatives of the side chain vectors in the local spherical
11894 ! andgles alph and omega:
11896 ! dX(x,2)/dA(2),dX(y,2)/dA(2),dX(z,2)/dA(2),dX(x,2)/dO(2),dX(y,2)/dO(2),dX(z,2)/dO(2)
11897 ! dX(x,3)/dA(3),dX(y,3)/dA(3),dX(z,3)/dA(3),dX(x,3)/dO(3),dX(y,3)/dO(3),dX(z,3)/dO(3)
11901 ! dX(x,N-1)/dA(N-1),dX(y,N-1)/dA(N-1),dX(z,N-1)/dA(N-1),dX(x,N-1)/dO(N-1),dX(y,N-1)/dO(N-1),dX(z,N-1)/dO(N-1)
11903 ! Version of March '95, based on an early version of November '91.
11905 !**********************************************************************
11906 ! implicit real*8 (a-h,o-z)
11907 ! include 'DIMENSIONS'
11908 ! include 'COMMON.VAR'
11909 ! include 'COMMON.CHAIN'
11910 ! include 'COMMON.DERIV'
11911 ! include 'COMMON.GEO'
11912 ! include 'COMMON.LOCAL'
11913 ! include 'COMMON.INTERACT'
11914 real(kind=8),dimension(3,3,nres) :: drt,rdt,prordt,prodrt !(3,3,maxres)
11915 real(kind=8),dimension(3,3) :: dp,temp
11916 !el real(kind=8) :: fromto(3,3,maxdim) !(3,3,maxdim)(maxdim=(maxres-1)*(maxres-2)/2)
11917 real(kind=8),dimension(3) :: xx,xx1
11918 !el local variables
11919 integer :: i,k,l,j,m,ind,ind1,jjj
11920 real(kind=8) :: alphi,omegi,theta2,dpkl,dpjk,xj,rj,dxoijk,dxoiij,&
11921 tempkl,dsci,cosalphi,sinalphi,cosomegi,sinomegi,cost2,&
11922 sint2,xp,yp,xxp,yyp,zzp,dj
11924 ! common /przechowalnia/ fromto
11925 if(.not. allocated(fromto)) allocate(fromto(3,3,maxdim))
11926 ! get the position of the jth ijth fragment of the chain coordinate system
11927 ! in the fromto array.
11928 ! indmat(i,j)=((2*(nres-2)-i)*(i-1))/2+j-1
11930 ! maxdim=(nres-1)*(nres-2)/2
11931 ! allocate(dcdv(6,maxdim),dxds(6,nres))
11932 ! calculate the derivatives of transformation matrix elements in theta
11935 !el call flush(iout) !el
11937 rdt(1,1,i)=-rt(1,2,i)
11938 rdt(1,2,i)= rt(1,1,i)
11940 rdt(2,1,i)=-rt(2,2,i)
11941 rdt(2,2,i)= rt(2,1,i)
11943 rdt(3,1,i)=-rt(3,2,i)
11944 rdt(3,2,i)= rt(3,1,i)
11948 ! derivatives in phi
11954 drt(2,1,i)= rt(3,1,i)
11955 drt(2,2,i)= rt(3,2,i)
11956 drt(2,3,i)= rt(3,3,i)
11957 drt(3,1,i)=-rt(2,1,i)
11958 drt(3,2,i)=-rt(2,2,i)
11959 drt(3,3,i)=-rt(2,3,i)
11962 ! generate the matrix products of type r(i)t(i)...r(j)t(j)
11968 temp(k,l)=rt(k,l,i)
11973 fromto(k,l,ind)=temp(k,l)
11982 dpkl=dpkl+temp(k,m)*rt(m,l,j)
11985 fromto(k,l,ind)=dpkl
11996 ! Calculate derivatives.
12002 ! Derivatives of DC(i+1) in theta(i+2)
12008 dpjk=dpjk+prod(j,l,i)*rdt(l,k,i)
12011 prordt(j,k,i)=dp(j,k)
12014 dcdv(j,ind1)=vbld(i+1)*dp(j,1)
12017 ! Derivatives of SC(i+1) in theta(i+2)
12019 xx1(1)=-0.5D0*xloc(2,i+1)
12020 xx1(2)= 0.5D0*xloc(1,i+1)
12024 xj=xj+r(j,k,i)*xx1(k)
12031 rj=rj+prod(j,k,i)*xx(k)
12036 ! Derivatives of SC(i+1) in theta(i+3). The have to be handled differently
12037 ! than the other off-diagonal derivatives.
12042 dxoiij=dxoiij+dp(j,k)*xrot(k,i+2)
12044 dxdv(j,ind1+1)=dxoiij
12046 !d print *,ind1+1,(dxdv(j,ind1+1),j=1,3)
12048 ! Derivatives of DC(i+1) in phi(i+2)
12054 dpjk=dpjk+prod(j,l,i)*drt(l,k,i)
12057 prodrt(j,k,i)=dp(j,k)
12059 dcdv(j+3,ind1)=vbld(i+1)*dp(j,1)
12062 ! Derivatives of SC(i+1) in phi(i+2)
12065 xx(3)= xloc(2,i+1)*r(2,2,i)+xloc(3,i+1)*r(2,3,i)
12066 xx(2)=-xloc(2,i+1)*r(3,2,i)-xloc(3,i+1)*r(3,3,i)
12070 rj=rj+prod(j,k,i)*xx(k)
12075 ! Derivatives of SC(i+1) in phi(i+3).
12080 dxoiij=dxoiij+dp(j,k)*xrot(k,i+2)
12082 dxdv(j+3,ind1+1)=dxoiij
12085 ! Calculate the derivatives of DC(i+1) and SC(i+1) in theta(i+3) thru
12086 ! theta(nres) and phi(i+3) thru phi(nres).
12090 ind=indmat(i+1,j+1)
12091 !d print *,'i=',i,' j=',j,' ind=',ind,' ind1=',ind1
12096 tempkl=tempkl+prordt(k,m,i)*fromto(m,l,ind)
12101 !d print '(9f8.3)',((fromto(k,l,ind),l=1,3),k=1,3)
12102 !d print '(9f8.3)',((prod(k,l,i),l=1,3),k=1,3)
12103 !d print '(9f8.3)',((temp(k,l),l=1,3),k=1,3)
12104 ! Derivatives of virtual-bond vectors in theta
12106 dcdv(k,ind1)=vbld(i+1)*temp(k,1)
12108 !d print '(3f8.3)',(dcdv(k,ind1),k=1,3)
12109 ! Derivatives of SC vectors in theta
12113 dxoijk=dxoijk+temp(k,l)*xrot(l,j+2)
12115 dxdv(k,ind1+1)=dxoijk
12118 !--- Calculate the derivatives in phi
12124 tempkl=tempkl+prodrt(k,m,i)*fromto(m,l,ind)
12130 dcdv(k+3,ind1)=vbld(i+1)*temp(k,1)
12135 dxoijk=dxoijk+temp(k,l)*xrot(l,j+2)
12137 dxdv(k+3,ind1+1)=dxoijk
12142 ! Derivatives in alpha and omega:
12145 ! dsci=dsc(itype(i,1))
12150 if(alphi.ne.alphi) alphi=100.0
12151 if(omegi.ne.omegi) omegi=-100.0
12156 !d print *,'i=',i,' dsci=',dsci,' alphi=',alphi,' omegi=',omegi
12157 cosalphi=dcos(alphi)
12158 sinalphi=dsin(alphi)
12159 cosomegi=dcos(omegi)
12160 sinomegi=dsin(omegi)
12161 temp(1,1)=-dsci*sinalphi
12162 temp(2,1)= dsci*cosalphi*cosomegi
12163 temp(3,1)=-dsci*cosalphi*sinomegi
12165 temp(2,2)=-dsci*sinalphi*sinomegi
12166 temp(3,2)=-dsci*sinalphi*cosomegi
12167 theta2=pi-0.5D0*theta(i+1)
12171 !d print *,((temp(l,k),l=1,3),k=1,2)
12175 xxp= xp*cost2+yp*sint2
12176 yyp=-xp*sint2+yp*cost2
12179 xx(2)=yyp*r(2,2,i-1)+zzp*r(2,3,i-1)
12180 xx(3)=yyp*r(3,2,i-1)+zzp*r(3,3,i-1)
12184 dj=dj+prod(k,l,i-1)*xx(l)
12192 end subroutine cartder
12193 !-----------------------------------------------------------------------------
12195 !-----------------------------------------------------------------------------
12196 subroutine check_cartgrad
12197 ! Check the gradient of Cartesian coordinates in internal coordinates.
12198 ! implicit real*8 (a-h,o-z)
12199 ! include 'DIMENSIONS'
12200 ! include 'COMMON.IOUNITS'
12201 ! include 'COMMON.VAR'
12202 ! include 'COMMON.CHAIN'
12203 ! include 'COMMON.GEO'
12204 ! include 'COMMON.LOCAL'
12205 ! include 'COMMON.DERIV'
12206 real(kind=8),dimension(6,nres) :: temp
12207 real(kind=8),dimension(3) :: xx,gg
12208 integer :: i,k,j,ii
12209 real(kind=8) :: aincr,aincr2,alphi,omegi,theti,thet,phii
12210 ! indmat(i,j)=((2*(nres-2)-i)*(i-1))/2+j-1
12212 ! Check the gradient of the virtual-bond and SC vectors in the internal
12218 write (iout,'(a)') '**************** dx/dalpha'
12222 alph(i)=alph(i)+aincr
12224 temp(k,i)=dc(k,nres+i)
12228 gg(k)=(dc(k,nres+i)-temp(k,i))/aincr
12229 xx(k)=dabs((gg(k)-dxds(k,i))/(aincr*dabs(dxds(k,i))+aincr))
12231 write (iout,'(i4,3e15.6/4x,3e15.6,3f9.3)') &
12232 i,(gg(k),k=1,3),(dxds(k,i),k=1,3),(xx(k),k=1,3)
12238 write (iout,'(a)') '**************** dx/domega'
12242 omeg(i)=omeg(i)+aincr
12244 temp(k,i)=dc(k,nres+i)
12248 gg(k)=(dc(k,nres+i)-temp(k,i))/aincr
12249 xx(k)=dabs((gg(k)-dxds(k+3,i))/ &
12250 (aincr*dabs(dxds(k+3,i))+aincr))
12252 write (iout,'(i4,3e15.6/4x,3e15.6,3f9.3)') &
12253 i,(gg(k),k=1,3),(dxds(k+3,i),k=1,3),(xx(k),k=1,3)
12259 write (iout,'(a)') '**************** dx/dtheta'
12263 theta(i)=theta(i)+aincr
12266 temp(k,j)=dc(k,nres+j)
12272 ! print *,'i=',i-2,' j=',j-1,' ii=',ii
12274 gg(k)=(dc(k,nres+j)-temp(k,j))/aincr
12275 xx(k)=dabs((gg(k)-dxdv(k,ii))/ &
12276 (aincr*dabs(dxdv(k,ii))+aincr))
12278 write (iout,'(2i4,3e14.6/8x,3e14.6,3f9.3)') &
12279 i,j,(gg(k),k=1,3),(dxdv(k,ii),k=1,3),(xx(k),k=1,3)
12286 write (iout,'(a)') '***************** dx/dphi'
12289 phi(i)=phi(i)+aincr
12292 temp(k,j)=dc(k,nres+j)
12300 gg(k)=(dc(k,nres+j)-temp(k,j))/aincr
12301 xx(k)=dabs((gg(k)-dxdv(k+3,ii))/ &
12302 (aincr*dabs(dxdv(k+3,ii))+aincr))
12304 write (iout,'(2i4,3e14.6/8x,3e14.6,3f9.3)') &
12305 i,j,(gg(k),k=1,3),(dxdv(k+3,ii),k=1,3),(xx(k),k=1,3)
12308 phi(i)=phi(i)-aincr
12311 write (iout,'(a)') '****************** ddc/dtheta'
12314 theta(i+2)=thet+aincr
12325 gg(k)=(dc(k,j)-temp(k,j))/aincr
12326 xx(k)=dabs((gg(k)-dcdv(k,ii))/ &
12327 (aincr*dabs(dcdv(k,ii))+aincr))
12329 write (iout,'(2i4,3e14.6/8x,3e14.6,3f9.3)') &
12330 i,j,(gg(k),k=1,3),(dcdv(k,ii),k=1,3),(xx(k),k=1,3)
12340 write (iout,'(a)') '******************* ddc/dphi'
12343 phi(i+3)=phii+aincr
12354 gg(k)=(dc(k,j)-temp(k,j))/aincr
12355 xx(k)=dabs((gg(k)-dcdv(k+3,ii))/ &
12356 (aincr*dabs(dcdv(k+3,ii))+aincr))
12358 write (iout,'(2i4,3e14.6/8x,3e14.6,3f9.3)') &
12359 i,j,(gg(k),k=1,3),(dcdv(k+3,ii),k=1,3),(xx(k),k=1,3)
12370 end subroutine check_cartgrad
12371 !-----------------------------------------------------------------------------
12372 subroutine check_ecart
12373 ! Check the gradient of the energy in Cartesian coordinates.
12374 ! implicit real*8 (a-h,o-z)
12375 ! include 'DIMENSIONS'
12376 ! include 'COMMON.CHAIN'
12377 ! include 'COMMON.DERIV'
12378 ! include 'COMMON.IOUNITS'
12379 ! include 'COMMON.VAR'
12380 ! include 'COMMON.CONTACTS'
12382 !el integer :: icall
12383 !el common /srutu/ icall
12384 real(kind=8),dimension(6) :: ggg
12385 real(kind=8),dimension(3) :: cc,xx,ddc,ddx
12386 real(kind=8),dimension(6*nres) :: x,g !(maxvar) (maxvar=6*maxres)
12387 real(kind=8),dimension(6,nres) :: grad_s
12388 real(kind=8),dimension(0:n_ene) :: energia,energia1
12389 integer :: uiparm(1)
12390 real(kind=8) :: urparm(1)
12392 integer :: nf,i,j,k
12393 real(kind=8) :: aincr,etot,etot1
12399 print '(a)','CG processor',me,' calling CHECK_CART.',aincr
12402 call geom_to_var(nvar,x)
12403 call etotal(energia)
12405 !el call enerprint(energia)
12406 call gradient(nvar,x,nf,g,uiparm,urparm,fdum)
12409 write (iout,'(i5,3f10.5)') i,(gradxorr(j,i),j=1,3)
12413 grad_s(j,i)=gradc(j,i,icg)
12414 grad_s(j+3,i)=gradx(j,i,icg)
12418 write (iout,'(/a/)') 'Gradient in virtual-bond and SC vectors'
12423 ddx(j)=dc(j,i+nres)
12426 dc(j,i)=dc(j,i)+aincr
12428 c(j,k)=c(j,k)+aincr
12429 c(j,k+nres)=c(j,k+nres)+aincr
12432 call etotal(energia1)
12434 ggg(j)=(etot1-etot)/aincr
12437 c(j,k)=c(j,k)-aincr
12438 c(j,k+nres)=c(j,k+nres)-aincr
12442 c(j,i+nres)=c(j,i+nres)+aincr
12443 dc(j,i+nres)=dc(j,i+nres)+aincr
12445 call etotal(energia1)
12447 ggg(j+3)=(etot1-etot)/aincr
12449 dc(j,i+nres)=ddx(j)
12451 write (iout,'(i3,6(1pe12.5)/3x,6(1pe12.5)/)') &
12452 i,(ggg(k),k=1,6),(grad_s(k,i),k=1,6)
12455 end subroutine check_ecart
12457 !-----------------------------------------------------------------------------
12458 subroutine check_ecartint
12459 ! Check the gradient of the energy in Cartesian coordinates.
12460 use io_base, only: intout
12461 ! implicit real*8 (a-h,o-z)
12462 ! include 'DIMENSIONS'
12463 ! include 'COMMON.CONTROL'
12464 ! include 'COMMON.CHAIN'
12465 ! include 'COMMON.DERIV'
12466 ! include 'COMMON.IOUNITS'
12467 ! include 'COMMON.VAR'
12468 ! include 'COMMON.CONTACTS'
12469 ! include 'COMMON.MD'
12470 ! include 'COMMON.LOCAL'
12471 ! include 'COMMON.SPLITELE'
12473 !el integer :: icall
12474 !el common /srutu/ icall
12475 real(kind=8),dimension(6) :: ggg,ggg1
12476 real(kind=8),dimension(3) :: cc,xx,ddc,ddx,ddc1,ddcn
12477 real(kind=8),dimension(6*nres) :: x,g !(maxvar) (maxvar=6*maxres)
12478 real(kind=8),dimension(3) :: dcnorm_safe1,dcnorm_safe2,dxnorm_safe
12479 real(kind=8),dimension(6,0:nres) :: grad_s,grad_s1 !(6,0:maxres)
12480 real(kind=8),dimension(nres) :: phi_temp,theta_temp,alph_temp,omeg_temp !(maxres)
12481 real(kind=8),dimension(0:n_ene) :: energia,energia1
12482 integer :: uiparm(1)
12483 real(kind=8) :: urparm(1)
12485 integer :: i,j,k,nf
12486 real(kind=8) :: rlambd,aincr,etot,etot1,etot11,etot12,etot2,&
12494 ! call intcartderiv
12495 ! call checkintcartgrad
12498 write(iout,*) 'Calling CHECK_ECARTINT.'
12501 call geom_to_var(nvar,x)
12502 write (iout,*) "split_ene ",split_ene
12504 if (.not.split_ene) then
12506 call etotal(energia)
12511 write (iout,'(i5,3f10.5)') i,(gradxorr(j,i),j=1,3)
12514 grad_s(j,0)=gcart(j,0)
12518 grad_s(j,i)=gcart(j,i)
12519 grad_s(j+3,i)=gxcart(j,i)
12523 !- split gradient check
12525 call etotal_long(energia)
12526 !el call enerprint(energia)
12530 write (iout,'(i5,3f10.5,5x,3f10.5)') i,(gcart(j,i),j=1,3),&
12531 (gxcart(j,i),j=1,3)
12534 grad_s(j,0)=gcart(j,0)
12538 grad_s(j,i)=gcart(j,i)
12539 grad_s(j+3,i)=gxcart(j,i)
12543 call etotal_short(energia)
12544 call enerprint(energia)
12548 write (iout,'(i5,3f10.5,5x,3f10.5)') i,(gcart(j,i),j=1,3),&
12549 (gxcart(j,i),j=1,3)
12552 grad_s1(j,0)=gcart(j,0)
12556 grad_s1(j,i)=gcart(j,i)
12557 grad_s1(j+3,i)=gxcart(j,i)
12561 write (iout,'(/a/)') 'Gradient in virtual-bond and SC vectors'
12565 if (nnt.gt.1 .and. i.eq.nnt) ddc1(j)=c(j,1)
12566 if (nct.lt.nres .and. i.eq.nct) ddcn(j)=c(j,nres)
12569 dcnorm_safe1(j)=dc_norm(j,i-1)
12570 dcnorm_safe2(j)=dc_norm(j,i)
12571 dxnorm_safe(j)=dc_norm(j,i+nres)
12574 c(j,i)=ddc(j)+aincr
12575 if (nnt.gt.1 .and. i.eq.nnt) c(j,1)=c(j,1)+aincr
12576 if (nct.lt.nres .and. i.eq.nct) c(j,nres)=c(j,nres)+aincr
12577 if (i.gt.1) dc(j,i-1)=c(j,i)-c(j,i-1)
12578 dc(j,i)=c(j,i+1)-c(j,i)
12579 dc(j,i+nres)=c(j,i+nres)-c(j,i)
12580 call int_from_cart1(.false.)
12581 if (.not.split_ene) then
12583 call etotal(energia1)
12585 write (iout,*) "ij",i,j," etot1",etot1
12588 call etotal_long(energia1)
12590 call etotal_short(energia1)
12593 !- end split gradient
12594 ! write(iout,'(2i5,2(a,f15.10))')i,j," etot",etot," etot1",etot1
12595 c(j,i)=ddc(j)-aincr
12596 if (nnt.gt.1 .and. i.eq.nnt) c(j,1)=ddc1(j)-aincr
12597 if (nct.lt.nres .and. i.eq.nct) c(j,nres)=ddcn(j)-aincr
12598 if (i.gt.1) dc(j,i-1)=c(j,i)-c(j,i-1)
12599 dc(j,i)=c(j,i+1)-c(j,i)
12600 dc(j,i+nres)=c(j,i+nres)-c(j,i)
12601 call int_from_cart1(.false.)
12602 if (.not.split_ene) then
12604 call etotal(energia1)
12606 write (iout,*) "ij",i,j," etot2",etot2
12607 ggg(j)=(etot1-etot2)/(2*aincr)
12610 call etotal_long(energia1)
12612 ggg(j)=(etot11-etot21)/(2*aincr)
12613 call etotal_short(energia1)
12615 ggg1(j)=(etot12-etot22)/(2*aincr)
12616 !- end split gradient
12617 ! write (iout,*) "etot21",etot21," etot22",etot22
12619 ! write(iout,'(2i5,2(a,f15.10))')i,j," etot",etot," etot2",etot2
12621 if (nnt.gt.1 .and. i.eq.nnt) c(j,1)=ddc1(j)
12622 if (nct.lt.nres .and. i.eq.nct) c(j,nres)=ddcn(j)
12623 if (i.gt.1) dc(j,i-1)=c(j,i)-c(j,i-1)
12624 dc(j,i)=c(j,i+1)-c(j,i)
12625 dc(j,i+nres)=c(j,i+nres)-c(j,i)
12626 dc_norm(j,i-1)=dcnorm_safe1(j)
12627 dc_norm(j,i)=dcnorm_safe2(j)
12628 dc_norm(j,i+nres)=dxnorm_safe(j)
12631 c(j,i+nres)=ddx(j)+aincr
12632 dc(j,i+nres)=c(j,i+nres)-c(j,i)
12633 call int_from_cart1(.false.)
12634 if (.not.split_ene) then
12636 call etotal(energia1)
12640 call etotal_long(energia1)
12642 call etotal_short(energia1)
12645 !- end split gradient
12646 c(j,i+nres)=ddx(j)-aincr
12647 dc(j,i+nres)=c(j,i+nres)-c(j,i)
12648 call int_from_cart1(.false.)
12649 if (.not.split_ene) then
12651 call etotal(energia1)
12653 ggg(j+3)=(etot1-etot2)/(2*aincr)
12656 call etotal_long(energia1)
12658 ggg(j+3)=(etot11-etot21)/(2*aincr)
12659 call etotal_short(energia1)
12661 ggg1(j+3)=(etot12-etot22)/(2*aincr)
12662 !- end split gradient
12664 ! write(iout,'(2i5,2(a,f15.10))')i,j," etot",etot," etot2",etot2
12666 dc(j,i+nres)=c(j,i+nres)-c(j,i)
12667 dc_norm(j,i+nres)=dxnorm_safe(j)
12668 call int_from_cart1(.false.)
12670 write (iout,'(i3,6(1pe12.5)/3x,6(1pe12.5)/3x,6(1pe12.5)/)') &
12671 i,(ggg(k),k=1,6),(grad_s(k,i),k=1,6),(ggg(k)/grad_s(k,i),k=1,6)
12672 if (split_ene) then
12673 write (iout,'(i3,6(1pe12.5)/3x,6(1pe12.5)/3x,6(1pe12.5)/)') &
12674 i,(ggg1(k),k=1,6),(grad_s1(k,i),k=1,6),(ggg1(k)/grad_s1(k,i),&
12676 write (iout,'(i3,6(1pe12.5)/3x,6(1pe12.5)/3x,6(1pe12.5)/)') &
12677 i,(ggg(k)+ggg1(k),k=1,6),(grad_s(k,i)+grad_s1(k,i),k=1,6),&
12678 ((ggg(k)+ggg1(k))/(grad_s(k,i)+grad_s1(k,i)),k=1,6)
12682 end subroutine check_ecartint
12684 !-----------------------------------------------------------------------------
12685 subroutine check_ecartint
12686 ! Check the gradient of the energy in Cartesian coordinates.
12687 use io_base, only: intout
12688 ! implicit real*8 (a-h,o-z)
12689 ! include 'DIMENSIONS'
12690 ! include 'COMMON.CONTROL'
12691 ! include 'COMMON.CHAIN'
12692 ! include 'COMMON.DERIV'
12693 ! include 'COMMON.IOUNITS'
12694 ! include 'COMMON.VAR'
12695 ! include 'COMMON.CONTACTS'
12696 ! include 'COMMON.MD'
12697 ! include 'COMMON.LOCAL'
12698 ! include 'COMMON.SPLITELE'
12700 !el integer :: icall
12701 !el common /srutu/ icall
12702 real(kind=8),dimension(6) :: ggg,ggg1
12703 real(kind=8),dimension(3) :: cc,xx,ddc,ddx
12704 real(kind=8),dimension(6*nres) :: x,g !(maxvar) (maxvar=6*maxres)
12705 real(kind=8),dimension(3) :: dcnorm_safe,dxnorm_safe
12706 real(kind=8),dimension(6,0:nres) :: grad_s,grad_s1 !(6,0:maxres)
12707 real(kind=8),dimension(nres) :: phi_temp,theta_temp,alph_temp,omeg_temp !(maxres)
12708 real(kind=8),dimension(0:n_ene) :: energia,energia1
12709 integer :: uiparm(1)
12710 real(kind=8) :: urparm(1)
12712 integer :: i,j,k,nf
12713 real(kind=8) :: rlambd,aincr,etot,etot1,etot11,etot12,etot2,&
12721 ! call intcartderiv
12722 ! call checkintcartgrad
12725 write(iout,*) 'Calling CHECK_ECARTINT.',aincr
12728 call geom_to_var(nvar,x)
12729 if (.not.split_ene) then
12730 call etotal(energia)
12732 !el call enerprint(energia)
12736 write (iout,'(i5,3f10.5)') i,(gradxorr(j,i),j=1,3)
12739 grad_s(j,0)=gcart(j,0)
12743 grad_s(j,i)=gcart(j,i)
12744 ! if (i.eq.21) print *,"PRZEKAZANIE",gcart(j,i)
12746 ! if (i.le.2) print *,"tu?!",gcart(j,i),grad_s(j,i),gxcart(j,i)
12747 grad_s(j+3,i)=gxcart(j,i)
12751 !- split gradient check
12753 call etotal_long(energia)
12754 !el call enerprint(energia)
12758 write (iout,'(i5,3f10.5,5x,3f10.5)') i,(gcart(j,i),j=1,3),&
12759 (gxcart(j,i),j=1,3)
12762 grad_s(j,0)=gcart(j,0)
12766 grad_s(j,i)=gcart(j,i)
12767 ! if (i.eq.21) print *,"PRZEKAZANIE",gcart(j,i)
12768 grad_s(j+3,i)=gxcart(j,i)
12772 call etotal_short(energia)
12773 !el call enerprint(energia)
12777 write (iout,'(i5,3f10.5,5x,3f10.5)') i,(gcart(j,i),j=1,3),&
12778 (gxcart(j,i),j=1,3)
12781 grad_s1(j,0)=gcart(j,0)
12785 grad_s1(j,i)=gcart(j,i)
12786 grad_s1(j+3,i)=gxcart(j,i)
12790 write (iout,'(/a/)') 'Gradient in virtual-bond and SC vectors'
12795 ddx(j)=dc(j,i+nres)
12797 dcnorm_safe(k)=dc_norm(k,i)
12798 dxnorm_safe(k)=dc_norm(k,i+nres)
12802 dc(j,i)=ddc(j)+aincr
12803 call chainbuild_cart
12805 ! Broadcast the order to compute internal coordinates to the slaves.
12806 ! if (nfgtasks.gt.1)
12807 ! & call MPI_Bcast(6,1,MPI_INTEGER,king,FG_COMM,IERROR)
12809 ! call int_from_cart1(.false.)
12810 if (.not.split_ene) then
12812 call etotal(energia1)
12814 ! call enerprint(energia1)
12817 call etotal_long(energia1)
12819 call etotal_short(energia1)
12821 ! write (iout,*) "etot11",etot11," etot12",etot12
12823 !- end split gradient
12824 ! write(iout,'(2i5,2(a,f15.10))')i,j," etot",etot," etot1",etot1
12825 dc(j,i)=ddc(j)-aincr
12826 call chainbuild_cart
12827 ! call int_from_cart1(.false.)
12828 if (.not.split_ene) then
12830 call etotal(energia1)
12832 ggg(j)=(etot1-etot2)/(2*aincr)
12835 call etotal_long(energia1)
12837 ggg(j)=(etot11-etot21)/(2*aincr)
12838 call etotal_short(energia1)
12840 ggg1(j)=(etot12-etot22)/(2*aincr)
12841 !- end split gradient
12842 ! write (iout,*) "etot21",etot21," etot22",etot22
12844 ! write(iout,'(2i5,2(a,f15.10))')i,j," etot",etot," etot2",etot2
12846 call chainbuild_cart
12849 dc(j,i+nres)=ddx(j)+aincr
12850 call chainbuild_cart
12851 ! write (iout,*) "i",i," j",j," dxnorm+ and dxnorm"
12852 ! write (iout,'(3f15.10)') (dc_norm(k,i+nres),k=1,3)
12853 ! write (iout,'(3f15.10)') (dxnorm_safe(k),k=1,3)
12854 ! write (iout,*) "dxnormnorm",dsqrt(
12855 ! & dc_norm(1,i+nres)**2+dc_norm(2,i+nres)**2+dc_norm(3,i+nres)**2)
12856 ! write (iout,*) "dxnormnormsafe",dsqrt(
12857 ! & dxnorm_safe(1)**2+dxnorm_safe(2)**2+dxnorm_safe(3)**2)
12859 if (.not.split_ene) then
12861 call etotal(energia1)
12865 call etotal_long(energia1)
12867 call etotal_short(energia1)
12870 !- end split gradient
12871 ! write(iout,'(2i5,2(a,f15.10))')i,j," etot",etot," etot1",etot1
12872 dc(j,i+nres)=ddx(j)-aincr
12873 call chainbuild_cart
12874 ! write (iout,*) "i",i," j",j," dxnorm- and dxnorm"
12875 ! write (iout,'(3f15.10)') (dc_norm(k,i+nres),k=1,3)
12876 ! write (iout,'(3f15.10)') (dxnorm_safe(k),k=1,3)
12878 ! write (iout,*) "dxnormnorm",dsqrt(
12879 ! & dc_norm(1,i+nres)**2+dc_norm(2,i+nres)**2+dc_norm(3,i+nres)**2)
12880 ! write (iout,*) "dxnormnormsafe",dsqrt(
12881 ! & dxnorm_safe(1)**2+dxnorm_safe(2)**2+dxnorm_safe(3)**2)
12882 if (.not.split_ene) then
12884 call etotal(energia1)
12886 ggg(j+3)=(etot1-etot2)/(2*aincr)
12889 call etotal_long(energia1)
12891 ggg(j+3)=(etot11-etot21)/(2*aincr)
12892 call etotal_short(energia1)
12894 ggg1(j+3)=(etot12-etot22)/(2*aincr)
12895 !- end split gradient
12897 ! write(iout,'(2i5,2(a,f15.10))')i,j," etot",etot," etot2",etot2
12898 dc(j,i+nres)=ddx(j)
12899 call chainbuild_cart
12901 write (iout,'(i3,6(1pe12.5)/3x,6(1pe12.5)/3x,6(1pe12.5)/)') &
12902 i,(ggg(k),k=1,6),(grad_s(k,i),k=1,6),(ggg(k)/grad_s(k,i),k=1,6)
12903 if (split_ene) then
12904 write (iout,'(i3,6(1pe12.5)/3x,6(1pe12.5)/3x,6(1pe12.5)/)') &
12905 i,(ggg1(k),k=1,6),(grad_s1(k,i),k=1,6),(ggg1(k)/grad_s1(k,i),&
12907 write (iout,'(i3,6(1pe12.5)/3x,6(1pe12.5)/3x,6(1pe12.5)/)') &
12908 i,(ggg(k)+ggg1(k),k=1,6),(grad_s(k,i)+grad_s1(k,i),k=1,6),&
12909 ((ggg(k)+ggg1(k))/(grad_s(k,i)+grad_s1(k,i)),k=1,6)
12913 end subroutine check_ecartint
12915 !-----------------------------------------------------------------------------
12916 subroutine check_eint
12917 ! Check the gradient of energy in internal coordinates.
12918 ! implicit real*8 (a-h,o-z)
12919 ! include 'DIMENSIONS'
12920 ! include 'COMMON.CHAIN'
12921 ! include 'COMMON.DERIV'
12922 ! include 'COMMON.IOUNITS'
12923 ! include 'COMMON.VAR'
12924 ! include 'COMMON.GEO'
12926 !el integer :: icall
12927 !el common /srutu/ icall
12928 real(kind=8),dimension(6*nres) :: x,gana,gg !(maxvar) (maxvar=6*maxres)
12929 integer :: uiparm(1)
12930 real(kind=8) :: urparm(1)
12931 real(kind=8),dimension(0:n_ene) :: energia,energia1,energia2
12932 character(len=6) :: key
12935 real(kind=8) :: xi,aincr,etot,etot1,etot2
12938 print '(a)','Calling CHECK_INT.'
12942 call geom_to_var(nvar,x)
12943 call var_to_geom(nvar,x)
12946 ! print *,'ICG=',ICG
12947 call etotal(energia)
12949 !el call enerprint(energia)
12950 ! print *,'ICG=',ICG
12952 if (MyID.ne.BossID) then
12953 call mp_bcast(x(1),8*(nvar+3),BossID,fgGroupID)
12961 !d write (iout,'(10f8.3)') (rad2deg*x(i),i=1,nvar)
12962 call gradient(nvar,x,nf,gana,uiparm,urparm,fdum)
12963 !d write (iout,'(i3,1pe14.4)') (i,gana(i),i=1,nvar+20) !sp
12967 x(i)=xi-0.5D0*aincr
12968 call var_to_geom(nvar,x)
12970 call etotal(energia1)
12972 x(i)=xi+0.5D0*aincr
12973 call var_to_geom(nvar,x)
12975 call etotal(energia2)
12977 gg(i)=(etot2-etot1)/aincr
12978 write (iout,*) i,etot1,etot2
12981 write (iout,'(/2a)')' Variable Numerical Analytical',&
12984 if (i.le.nphi) then
12987 else if (i.le.nphi+ntheta) then
12990 else if (i.le.nphi+ntheta+nside) then
12994 ii=i-(nphi+ntheta+nside)
12997 write (iout,'(i3,a,i3,3(1pd16.6))') &
12998 i,key,ii,gg(i),gana(i),&
12999 100.0D0*dabs(gg(i)-gana(i))/(dabs(gana(i))+aincr)
13002 end subroutine check_eint
13003 !-----------------------------------------------------------------------------
13005 !-----------------------------------------------------------------------------
13006 subroutine Econstr_back
13007 ! MD with umbrella_sampling using Wolyne's distance measure as a constraint
13008 ! implicit real*8 (a-h,o-z)
13009 ! include 'DIMENSIONS'
13010 ! include 'COMMON.CONTROL'
13011 ! include 'COMMON.VAR'
13012 ! include 'COMMON.MD'
13015 ! include 'COMMON.LANGEVIN'
13017 ! include 'COMMON.LANGEVIN.lang0'
13019 ! include 'COMMON.CHAIN'
13020 ! include 'COMMON.DERIV'
13021 ! include 'COMMON.GEO'
13022 ! include 'COMMON.LOCAL'
13023 ! include 'COMMON.INTERACT'
13024 ! include 'COMMON.IOUNITS'
13025 ! include 'COMMON.NAMES'
13026 ! include 'COMMON.TIME1'
13027 integer :: i,j,ii,k
13028 real(kind=8) :: utheta_i,dtheta_i,ugamma_i,dgamma_i,dxx,dyy,dzz
13030 if(.not.allocated(utheta)) allocate(utheta(nfrag_back))
13031 if(.not.allocated(ugamma)) allocate(ugamma(nfrag_back))
13032 if(.not.allocated(uscdiff)) allocate(uscdiff(nfrag_back))
13039 duscdiff(j,i)=0.0d0
13040 duscdiffx(j,i)=0.0d0
13044 ii = ifrag_back(2,i,iset)-ifrag_back(1,i,iset)
13046 ! Deviations from theta angles
13049 do j=ifrag_back(1,i,iset)+2,ifrag_back(2,i,iset)
13050 dtheta_i=theta(j)-thetaref(j)
13051 utheta_i=utheta_i+0.5d0*dtheta_i*dtheta_i
13052 dutheta(j-2)=dutheta(j-2)+wfrag_back(1,i,iset)*dtheta_i/(ii-1)
13054 utheta(i)=utheta_i/(ii-1)
13056 ! Deviations from gamma angles
13059 do j=ifrag_back(1,i,iset)+3,ifrag_back(2,i,iset)
13060 dgamma_i=pinorm(phi(j)-phiref(j))
13061 ! write (iout,*) j,phi(j),phi(j)-phiref(j)
13062 ugamma_i=ugamma_i+0.5d0*dgamma_i*dgamma_i
13063 dugamma(j-3)=dugamma(j-3)+wfrag_back(2,i,iset)*dgamma_i/(ii-2)
13064 ! write (iout,*) i,j,dgamma_i,wfrag_back(2,i,iset),dugamma(j-3)
13066 ugamma(i)=ugamma_i/(ii-2)
13068 ! Deviations from local SC geometry
13071 do j=ifrag_back(1,i,iset)+1,ifrag_back(2,i,iset)-1
13072 dxx=xxtab(j)-xxref(j)
13073 dyy=yytab(j)-yyref(j)
13074 dzz=zztab(j)-zzref(j)
13075 uscdiff(i)=uscdiff(i)+dxx*dxx+dyy*dyy+dzz*dzz
13077 duscdiff(k,j-1)=duscdiff(k,j-1)+wfrag_back(3,i,iset)* &
13078 (dXX_C1tab(k,j)*dxx+dYY_C1tab(k,j)*dyy+dZZ_C1tab(k,j)*dzz)/ &
13080 duscdiff(k,j)=duscdiff(k,j)+wfrag_back(3,i,iset)* &
13081 (dXX_Ctab(k,j)*dxx+dYY_Ctab(k,j)*dyy+dZZ_Ctab(k,j)*dzz)/ &
13083 duscdiffx(k,j)=duscdiffx(k,j)+wfrag_back(3,i,iset)* &
13084 (dXX_XYZtab(k,j)*dxx+dYY_XYZtab(k,j)*dyy+dZZ_XYZtab(k,j)*dzz) &
13087 ! write (iout,'(i5,6f10.5)') j,xxtab(j),yytab(j),zztab(j),
13088 ! & xxref(j),yyref(j),zzref(j)
13090 uscdiff(i)=0.5d0*uscdiff(i)/(ii-1)
13091 ! write (iout,*) i," uscdiff",uscdiff(i)
13093 ! Put together deviations from local geometry
13095 Uconst_back=Uconst_back+wfrag_back(1,i,iset)*utheta(i)+ &
13096 wfrag_back(2,i,iset)*ugamma(i)+wfrag_back(3,i,iset)*uscdiff(i)
13097 ! write(iout,*) "i",i," utheta",utheta(i)," ugamma",ugamma(i),
13098 ! & " uconst_back",uconst_back
13099 utheta(i)=dsqrt(utheta(i))
13100 ugamma(i)=dsqrt(ugamma(i))
13101 uscdiff(i)=dsqrt(uscdiff(i))
13104 end subroutine Econstr_back
13105 !-----------------------------------------------------------------------------
13106 ! energy_p_new-sep_barrier.F
13107 !-----------------------------------------------------------------------------
13108 real(kind=8) function sscale(r)
13109 ! include "COMMON.SPLITELE"
13110 real(kind=8) :: r,gamm
13111 if(r.lt.r_cut-rlamb) then
13113 else if(r.le.r_cut.and.r.ge.r_cut-rlamb) then
13114 gamm=(r-(r_cut-rlamb))/rlamb
13115 sscale=1.0d0+gamm*gamm*(2*gamm-3.0d0)
13120 end function sscale
13121 real(kind=8) function sscale_grad(r)
13122 ! include "COMMON.SPLITELE"
13123 real(kind=8) :: r,gamm
13124 if(r.lt.r_cut-rlamb) then
13126 else if(r.le.r_cut.and.r.ge.r_cut-rlamb) then
13127 gamm=(r-(r_cut-rlamb))/rlamb
13128 sscale_grad=gamm*(6*gamm-6.0d0)/rlamb
13133 end function sscale_grad
13135 !!!!!!!!!! PBCSCALE
13136 real(kind=8) function sscale_ele(r)
13137 ! include "COMMON.SPLITELE"
13138 real(kind=8) :: r,gamm
13139 if(r.lt.r_cut_ele-rlamb_ele) then
13141 else if(r.le.r_cut_ele.and.r.ge.r_cut_ele-rlamb_ele) then
13142 gamm=(r-(r_cut_ele-rlamb_ele))/rlamb_ele
13143 sscale_ele=1.0d0+gamm*gamm*(2*gamm-3.0d0)
13148 end function sscale_ele
13150 real(kind=8) function sscagrad_ele(r)
13151 real(kind=8) :: r,gamm
13152 ! include "COMMON.SPLITELE"
13153 if(r.lt.r_cut_ele-rlamb_ele) then
13155 else if(r.le.r_cut_ele.and.r.ge.r_cut_ele-rlamb_ele) then
13156 gamm=(r-(r_cut_ele-rlamb_ele))/rlamb_ele
13157 sscagrad_ele=gamm*(6*gamm-6.0d0)/rlamb_ele
13162 end function sscagrad_ele
13163 real(kind=8) function sscalelip(r)
13164 real(kind=8) r,gamm
13165 sscalelip=1.0d0+r*r*(2.0d0*r-3.0d0)
13167 end function sscalelip
13168 !C-----------------------------------------------------------------------
13169 real(kind=8) function sscagradlip(r)
13170 real(kind=8) r,gamm
13171 sscagradlip=r*(6.0d0*r-6.0d0)
13173 end function sscagradlip
13176 !-----------------------------------------------------------------------------
13177 subroutine elj_long(evdw)
13179 ! This subroutine calculates the interaction energy of nonbonded side chains
13180 ! assuming the LJ potential of interaction.
13182 ! implicit real*8 (a-h,o-z)
13183 ! include 'DIMENSIONS'
13184 ! include 'COMMON.GEO'
13185 ! include 'COMMON.VAR'
13186 ! include 'COMMON.LOCAL'
13187 ! include 'COMMON.CHAIN'
13188 ! include 'COMMON.DERIV'
13189 ! include 'COMMON.INTERACT'
13190 ! include 'COMMON.TORSION'
13191 ! include 'COMMON.SBRIDGE'
13192 ! include 'COMMON.NAMES'
13193 ! include 'COMMON.IOUNITS'
13194 ! include 'COMMON.CONTACTS'
13195 real(kind=8),parameter :: accur=1.0d-10
13196 real(kind=8),dimension(3) :: gg,gg_lipi,gg_lipj
13197 !el local variables
13198 integer :: i,iint,j,k,itypi,itypi1,itypj
13199 real(kind=8) :: xi,yi,zi,xj,yj,zj,rij,sss,rrij,fac,eps0ij
13200 real(kind=8) :: e1,e2,evdwij,evdw,sslipi,ssgradlipi,&
13201 sslipj,ssgradlipj,aa,bb
13202 ! write(iout,*)'Entering ELJ nnt=',nnt,' nct=',nct,' expon=',expon
13204 do i=iatsc_s,iatsc_e
13206 if (itypi.eq.ntyp1) cycle
13207 itypi1=itype(i+1,1)
13211 call to_box(xi,yi,zi)
13212 call lipid_layer(xi,yi,zi,sslipi,ssgradlipi)
13214 ! Calculate SC interaction energy.
13216 do iint=1,nint_gr(i)
13217 !d write (iout,*) 'i=',i,' iint=',iint,' istart=',istart(i,iint),
13218 !d & 'iend=',iend(i,iint)
13219 do j=istart(i,iint),iend(i,iint)
13221 if (itypj.eq.ntyp1) cycle
13225 call to_box(xj,yj,zj)
13226 call lipid_layer(xj,yj,zj,sslipj,ssgradlipj)
13227 aa=aa_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0 &
13228 +aa_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
13229 bb=bb_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0 &
13230 +bb_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
13231 xj=boxshift(xj-xi,boxxsize)
13232 yj=boxshift(yj-yi,boxysize)
13233 zj=boxshift(zj-zi,boxzsize)
13234 rij=xj*xj+yj*yj+zj*zj
13235 sss=sscale(dsqrt(rij)/sigma(itypi,itypj))
13236 if (sss.lt.1.0d0) then
13238 eps0ij=eps(itypi,itypj)
13240 e1=fac*fac*aa_aq(itypi,itypj)
13241 e2=fac*bb_aq(itypi,itypj)
13243 evdw=evdw+(1.0d0-sss)*evdwij
13245 ! Calculate the components of the gradient in DC and X
13247 fac=-rrij*(e1+evdwij)*(1.0d0-sss)
13252 gvdwx(k,i)=gvdwx(k,i)-gg(k)
13253 gvdwx(k,j)=gvdwx(k,j)+gg(k)
13254 gvdwc(k,i)=gvdwc(k,i)-gg(k)
13255 gvdwc(k,j)=gvdwc(k,j)+gg(k)
13263 gvdwc(j,i)=expon*gvdwc(j,i)
13264 gvdwx(j,i)=expon*gvdwx(j,i)
13267 !******************************************************************************
13271 ! To save time, the factor of EXPON has been extracted from ALL components
13272 ! of GVDWC and GRADX. Remember to multiply them by this factor before further
13275 !******************************************************************************
13277 end subroutine elj_long
13278 !-----------------------------------------------------------------------------
13279 subroutine elj_short(evdw)
13281 ! This subroutine calculates the interaction energy of nonbonded side chains
13282 ! assuming the LJ potential of interaction.
13284 ! implicit real*8 (a-h,o-z)
13285 ! include 'DIMENSIONS'
13286 ! include 'COMMON.GEO'
13287 ! include 'COMMON.VAR'
13288 ! include 'COMMON.LOCAL'
13289 ! include 'COMMON.CHAIN'
13290 ! include 'COMMON.DERIV'
13291 ! include 'COMMON.INTERACT'
13292 ! include 'COMMON.TORSION'
13293 ! include 'COMMON.SBRIDGE'
13294 ! include 'COMMON.NAMES'
13295 ! include 'COMMON.IOUNITS'
13296 ! include 'COMMON.CONTACTS'
13297 real(kind=8),parameter :: accur=1.0d-10
13298 real(kind=8),dimension(3) :: gg,gg_lipi,gg_lipj
13299 !el local variables
13300 integer :: i,iint,j,k,itypi,itypi1,itypj,num_conti
13301 real(kind=8) :: xi,yi,zi,xj,yj,zj,rij,sss,rrij,fac,eps0ij
13302 real(kind=8) :: e1,e2,evdwij,evdw,sslipi,ssgradlipi,&
13304 ! write(iout,*)'Entering ELJ nnt=',nnt,' nct=',nct,' expon=',expon
13306 do i=iatsc_s,iatsc_e
13308 if (itypi.eq.ntyp1) cycle
13309 itypi1=itype(i+1,1)
13313 call to_box(xi,yi,zi)
13314 call lipid_layer(xi,yi,zi,sslipi,ssgradlipi)
13318 ! Calculate SC interaction energy.
13320 do iint=1,nint_gr(i)
13321 !d write (iout,*) 'i=',i,' iint=',iint,' istart=',istart(i,iint),
13322 !d & 'iend=',iend(i,iint)
13323 do j=istart(i,iint),iend(i,iint)
13325 if (itypj.eq.ntyp1) cycle
13329 ! Change 12/1/95 to calculate four-body interactions
13330 rij=xj*xj+yj*yj+zj*zj
13331 sss=sscale(dsqrt(rij)/sigma(itypi,itypj))
13332 if (sss.gt.0.0d0) then
13334 eps0ij=eps(itypi,itypj)
13336 e1=fac*fac*aa_aq(itypi,itypj)
13337 e2=fac*bb_aq(itypi,itypj)
13339 evdw=evdw+sss*evdwij
13341 ! Calculate the components of the gradient in DC and X
13343 fac=-rrij*(e1+evdwij)*sss
13348 gvdwx(k,i)=gvdwx(k,i)-gg(k)
13349 gvdwx(k,j)=gvdwx(k,j)+gg(k)
13350 gvdwc(k,i)=gvdwc(k,i)-gg(k)
13351 gvdwc(k,j)=gvdwc(k,j)+gg(k)
13359 gvdwc(j,i)=expon*gvdwc(j,i)
13360 gvdwx(j,i)=expon*gvdwx(j,i)
13363 !******************************************************************************
13367 ! To save time, the factor of EXPON has been extracted from ALL components
13368 ! of GVDWC and GRADX. Remember to multiply them by this factor before further
13371 !******************************************************************************
13373 end subroutine elj_short
13374 !-----------------------------------------------------------------------------
13375 subroutine eljk_long(evdw)
13377 ! This subroutine calculates the interaction energy of nonbonded side chains
13378 ! assuming the LJK potential of interaction.
13380 ! implicit real*8 (a-h,o-z)
13381 ! include 'DIMENSIONS'
13382 ! include 'COMMON.GEO'
13383 ! include 'COMMON.VAR'
13384 ! include 'COMMON.LOCAL'
13385 ! include 'COMMON.CHAIN'
13386 ! include 'COMMON.DERIV'
13387 ! include 'COMMON.INTERACT'
13388 ! include 'COMMON.IOUNITS'
13389 ! include 'COMMON.NAMES'
13390 real(kind=8),dimension(3) :: gg,gg_lipi,gg_lipj
13392 !el local variables
13393 integer :: i,iint,j,k,itypi,itypi1,itypj
13394 real(kind=8) :: rrij,r_inv_ij,xj,yj,zj,xi,yi,zi,fac,evdw,&
13395 fac_augm,e_augm,rij,sss,r_shift_inv,e1,e2,evdwij
13396 ! print *,'Entering ELJK nnt=',nnt,' nct=',nct,' expon=',expon
13398 do i=iatsc_s,iatsc_e
13400 if (itypi.eq.ntyp1) cycle
13401 itypi1=itype(i+1,1)
13405 call to_box(xi,yi,zi)
13408 ! Calculate SC interaction energy.
13410 do iint=1,nint_gr(i)
13411 do j=istart(i,iint),iend(i,iint)
13413 if (itypj.eq.ntyp1) cycle
13417 call to_box(xj,yj,zj)
13418 xj=boxshift(xj-xi,boxxsize)
13419 yj=boxshift(yj-yi,boxysize)
13420 zj=boxshift(zj-zi,boxzsize)
13422 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
13423 fac_augm=rrij**expon
13424 e_augm=augm(itypi,itypj)*fac_augm
13425 r_inv_ij=dsqrt(rrij)
13427 sss=sscale(rij/sigma(itypi,itypj))
13428 if (sss.lt.1.0d0) then
13429 r_shift_inv=1.0D0/(rij+r0(itypi,itypj)-sigma(itypi,itypj))
13430 fac=r_shift_inv**expon
13431 e1=fac*fac*aa_aq(itypi,itypj)
13432 e2=fac*bb_aq(itypi,itypj)
13433 evdwij=e_augm+e1+e2
13434 !d sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
13435 !d epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
13436 !d write (iout,'(2(a3,i3,2x),8(1pd12.4)/2(3(1pd12.4),5x)/)')
13437 !d & restyp(itypi,1),i,restyp(itypj,1),j,aa(itypi,itypj),
13438 !d & bb(itypi,itypj),augm(itypi,itypj),epsi,sigm,
13439 !d & sigma(itypi,itypj),1.0D0/dsqrt(rrij),evdwij,
13440 !d & (c(k,i),k=1,3),(c(k,j),k=1,3)
13441 evdw=evdw+(1.0d0-sss)*evdwij
13443 ! Calculate the components of the gradient in DC and X
13445 fac=-2.0D0*rrij*e_augm-r_inv_ij*r_shift_inv*(e1+e1+e2)
13446 fac=fac*(1.0d0-sss)
13451 gvdwx(k,i)=gvdwx(k,i)-gg(k)
13452 gvdwx(k,j)=gvdwx(k,j)+gg(k)
13453 gvdwc(k,i)=gvdwc(k,i)-gg(k)
13454 gvdwc(k,j)=gvdwc(k,j)+gg(k)
13462 gvdwc(j,i)=expon*gvdwc(j,i)
13463 gvdwx(j,i)=expon*gvdwx(j,i)
13467 end subroutine eljk_long
13468 !-----------------------------------------------------------------------------
13469 subroutine eljk_short(evdw)
13471 ! This subroutine calculates the interaction energy of nonbonded side chains
13472 ! assuming the LJK potential of interaction.
13474 ! implicit real*8 (a-h,o-z)
13475 ! include 'DIMENSIONS'
13476 ! include 'COMMON.GEO'
13477 ! include 'COMMON.VAR'
13478 ! include 'COMMON.LOCAL'
13479 ! include 'COMMON.CHAIN'
13480 ! include 'COMMON.DERIV'
13481 ! include 'COMMON.INTERACT'
13482 ! include 'COMMON.IOUNITS'
13483 ! include 'COMMON.NAMES'
13484 real(kind=8),dimension(3) :: gg,gg_lipi,gg_lipj
13486 !el local variables
13487 integer :: i,iint,j,k,itypi,itypi1,itypj
13488 real(kind=8) :: rrij,r_inv_ij,xj,yj,zj,xi,yi,zi,fac,evdw,&
13489 fac_augm,e_augm,rij,sss,r_shift_inv,e1,e2,evdwij,&
13490 sslipi,ssgradlipi,sslipj,ssgradlipj,aa,bb
13491 ! print *,'Entering ELJK nnt=',nnt,' nct=',nct,' expon=',expon
13493 do i=iatsc_s,iatsc_e
13495 if (itypi.eq.ntyp1) cycle
13496 itypi1=itype(i+1,1)
13500 call to_box(xi,yi,zi)
13501 call lipid_layer(xi,yi,zi,sslipi,ssgradlipi)
13503 ! Calculate SC interaction energy.
13505 do iint=1,nint_gr(i)
13506 do j=istart(i,iint),iend(i,iint)
13508 if (itypj.eq.ntyp1) cycle
13512 call to_box(xj,yj,zj)
13513 call lipid_layer(xj,yj,zj,sslipj,ssgradlipj)
13514 aa=aa_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0 &
13515 +aa_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
13516 bb=bb_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0 &
13517 +bb_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
13518 xj=boxshift(xj-xi,boxxsize)
13519 yj=boxshift(yj-yi,boxysize)
13520 zj=boxshift(zj-zi,boxzsize)
13521 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
13522 fac_augm=rrij**expon
13523 e_augm=augm(itypi,itypj)*fac_augm
13524 r_inv_ij=dsqrt(rrij)
13526 sss=sscale(rij/sigma(itypi,itypj))
13527 if (sss.gt.0.0d0) then
13528 r_shift_inv=1.0D0/(rij+r0(itypi,itypj)-sigma(itypi,itypj))
13529 fac=r_shift_inv**expon
13530 e1=fac*fac*aa_aq(itypi,itypj)
13531 e2=fac*bb_aq(itypi,itypj)
13532 evdwij=e_augm+e1+e2
13533 !d sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
13534 !d epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
13535 !d write (iout,'(2(a3,i3,2x),8(1pd12.4)/2(3(1pd12.4),5x)/)')
13536 !d & restyp(itypi,1),i,restyp(itypj,1),j,aa(itypi,itypj),
13537 !d & bb(itypi,itypj),augm(itypi,itypj),epsi,sigm,
13538 !d & sigma(itypi,itypj),1.0D0/dsqrt(rrij),evdwij,
13539 !d & (c(k,i),k=1,3),(c(k,j),k=1,3)
13540 evdw=evdw+sss*evdwij
13542 ! Calculate the components of the gradient in DC and X
13544 fac=-2.0D0*rrij*e_augm-r_inv_ij*r_shift_inv*(e1+e1+e2)
13550 gvdwx(k,i)=gvdwx(k,i)-gg(k)
13551 gvdwx(k,j)=gvdwx(k,j)+gg(k)
13552 gvdwc(k,i)=gvdwc(k,i)-gg(k)
13553 gvdwc(k,j)=gvdwc(k,j)+gg(k)
13561 gvdwc(j,i)=expon*gvdwc(j,i)
13562 gvdwx(j,i)=expon*gvdwx(j,i)
13566 end subroutine eljk_short
13567 !-----------------------------------------------------------------------------
13568 subroutine ebp_long(evdw)
13569 ! This subroutine calculates the interaction energy of nonbonded side chains
13570 ! assuming the Berne-Pechukas potential of interaction.
13573 ! implicit real*8 (a-h,o-z)
13574 ! include 'DIMENSIONS'
13575 ! include 'COMMON.GEO'
13576 ! include 'COMMON.VAR'
13577 ! include 'COMMON.LOCAL'
13578 ! include 'COMMON.CHAIN'
13579 ! include 'COMMON.DERIV'
13580 ! include 'COMMON.NAMES'
13581 ! include 'COMMON.INTERACT'
13582 ! include 'COMMON.IOUNITS'
13583 ! include 'COMMON.CALC'
13585 !el integer :: icall
13586 !el common /srutu/ icall
13587 ! double precision rrsave(maxdim)
13589 !el local variables
13590 integer :: iint,itypi,itypi1,itypj
13591 real(kind=8) :: rrij,xi,yi,zi,fac,sslipi,ssgradlipi,&
13592 sslipj,ssgradlipj,aa,bb
13593 real(kind=8) :: sss,e1,e2,evdw,sigm,epsi
13595 ! print *,'Entering EBP nnt=',nnt,' nct=',nct,' expon=',expon
13597 ! if (icall.eq.0) then
13603 do i=iatsc_s,iatsc_e
13605 if (itypi.eq.ntyp1) cycle
13606 itypi1=itype(i+1,1)
13610 call to_box(xi,yi,zi)
13611 call lipid_layer(xi,yi,zi,sslipi,ssgradlipi)
13612 dxi=dc_norm(1,nres+i)
13613 dyi=dc_norm(2,nres+i)
13614 dzi=dc_norm(3,nres+i)
13615 ! dsci_inv=dsc_inv(itypi)
13616 dsci_inv=vbld_inv(i+nres)
13618 ! Calculate SC interaction energy.
13620 do iint=1,nint_gr(i)
13621 do j=istart(i,iint),iend(i,iint)
13624 if (itypj.eq.ntyp1) cycle
13625 ! dscj_inv=dsc_inv(itypj)
13626 dscj_inv=vbld_inv(j+nres)
13627 chi1=chi(itypi,itypj)
13628 chi2=chi(itypj,itypi)
13633 alf12=0.5D0*(alf1+alf2)
13637 call to_box(xj,yj,zj)
13638 call lipid_layer(xj,yj,zj,sslipj,ssgradlipj)
13639 aa=aa_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0 &
13640 +aa_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
13641 bb=bb_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0 &
13642 +bb_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
13643 xj=boxshift(xj-xi,boxxsize)
13644 yj=boxshift(yj-yi,boxysize)
13645 zj=boxshift(zj-zi,boxzsize)
13646 dxj=dc_norm(1,nres+j)
13647 dyj=dc_norm(2,nres+j)
13648 dzj=dc_norm(3,nres+j)
13649 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
13651 sss=sscale(1.0d0/(rij*sigmaii(itypi,itypj)))
13653 if (sss.lt.1.0d0) then
13655 ! Calculate the angle-dependent terms of energy & contributions to derivatives.
13657 ! Calculate whole angle-dependent part of epsilon and contributions
13658 ! to its derivatives
13659 fac=(rrij*sigsq)**expon2
13660 e1=fac*fac*aa_aq(itypi,itypj)
13661 e2=fac*bb_aq(itypi,itypj)
13662 evdwij=eps1*eps2rt*eps3rt*(e1+e2)
13663 eps2der=evdwij*eps3rt
13664 eps3der=evdwij*eps2rt
13665 evdwij=evdwij*eps2rt*eps3rt
13666 evdw=evdw+evdwij*(1.0d0-sss)
13668 sigm=dabs(aa_aq(itypi,itypj)/bb_aq(itypi,itypj))**(1.0D0/6.0D0)
13669 epsi=bb_aq(itypi,itypj)**2/aa_aq(itypi,itypj)
13670 !d write (iout,'(2(a3,i3,2x),15(0pf7.3))')
13671 !d & restyp(itypi,1),i,restyp(itypj,1),j,
13672 !d & epsi,sigm,chi1,chi2,chip1,chip2,
13673 !d & eps1,eps2rt**2,eps3rt**2,1.0D0/dsqrt(sigsq),
13674 !d & om1,om2,om12,1.0D0/dsqrt(rrij),
13677 ! Calculate gradient components.
13678 e1=e1*eps1*eps2rt**2*eps3rt**2
13679 fac=-expon*(e1+evdwij)
13682 ! Calculate radial part of the gradient
13686 ! Calculate the angular part of the gradient and sum add the contributions
13687 ! to the appropriate components of the Cartesian gradient.
13688 call sc_grad_scale(1.0d0-sss)
13695 end subroutine ebp_long
13696 !-----------------------------------------------------------------------------
13697 subroutine ebp_short(evdw)
13699 ! This subroutine calculates the interaction energy of nonbonded side chains
13700 ! assuming the Berne-Pechukas potential of interaction.
13703 ! implicit real*8 (a-h,o-z)
13704 ! include 'DIMENSIONS'
13705 ! include 'COMMON.GEO'
13706 ! include 'COMMON.VAR'
13707 ! include 'COMMON.LOCAL'
13708 ! include 'COMMON.CHAIN'
13709 ! include 'COMMON.DERIV'
13710 ! include 'COMMON.NAMES'
13711 ! include 'COMMON.INTERACT'
13712 ! include 'COMMON.IOUNITS'
13713 ! include 'COMMON.CALC'
13715 !el integer :: icall
13716 !el common /srutu/ icall
13717 ! double precision rrsave(maxdim)
13719 !el local variables
13720 integer :: iint,itypi,itypi1,itypj
13721 real(kind=8) :: rrij,xi,yi,zi,fac,sigm,epsi
13722 real(kind=8) :: sss,e1,e2,evdw,aa,bb, &
13723 sslipi,ssgradlipi,sslipj,ssgradlipj
13725 ! print *,'Entering EBP nnt=',nnt,' nct=',nct,' expon=',expon
13727 ! if (icall.eq.0) then
13733 do i=iatsc_s,iatsc_e
13735 if (itypi.eq.ntyp1) cycle
13736 itypi1=itype(i+1,1)
13740 call to_box(xi,yi,zi)
13741 call lipid_layer(xi,yi,zi,sslipi,ssgradlipi)
13743 dxi=dc_norm(1,nres+i)
13744 dyi=dc_norm(2,nres+i)
13745 dzi=dc_norm(3,nres+i)
13746 ! dsci_inv=dsc_inv(itypi)
13747 dsci_inv=vbld_inv(i+nres)
13749 ! Calculate SC interaction energy.
13751 do iint=1,nint_gr(i)
13752 do j=istart(i,iint),iend(i,iint)
13755 if (itypj.eq.ntyp1) cycle
13756 ! dscj_inv=dsc_inv(itypj)
13757 dscj_inv=vbld_inv(j+nres)
13758 chi1=chi(itypi,itypj)
13759 chi2=chi(itypj,itypi)
13766 alf12=0.5D0*(alf1+alf2)
13770 call to_box(xj,yj,zj)
13771 call lipid_layer(xj,yj,zj,sslipj,ssgradlipj)
13772 aa=aa_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0 &
13773 +aa_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
13774 bb=bb_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0 &
13775 +bb_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
13776 xj=boxshift(xj-xi,boxxsize)
13777 yj=boxshift(yj-yi,boxysize)
13778 zj=boxshift(zj-zi,boxzsize)
13779 dxj=dc_norm(1,nres+j)
13780 dyj=dc_norm(2,nres+j)
13781 dzj=dc_norm(3,nres+j)
13782 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
13784 sss=sscale(1.0d0/(rij*sigmaii(itypi,itypj)))
13786 if (sss.gt.0.0d0) then
13788 ! Calculate the angle-dependent terms of energy & contributions to derivatives.
13790 ! Calculate whole angle-dependent part of epsilon and contributions
13791 ! to its derivatives
13792 fac=(rrij*sigsq)**expon2
13793 e1=fac*fac*aa_aq(itypi,itypj)
13794 e2=fac*bb_aq(itypi,itypj)
13795 evdwij=eps1*eps2rt*eps3rt*(e1+e2)
13796 eps2der=evdwij*eps3rt
13797 eps3der=evdwij*eps2rt
13798 evdwij=evdwij*eps2rt*eps3rt
13799 evdw=evdw+evdwij*sss
13801 sigm=dabs(aa_aq(itypi,itypj)/bb_aq(itypi,itypj))**(1.0D0/6.0D0)
13802 epsi=bb_aq(itypi,itypj)**2/aa_aq(itypi,itypj)
13803 !d write (iout,'(2(a3,i3,2x),15(0pf7.3))')
13804 !d & restyp(itypi,1),i,restyp(itypj,1),j,
13805 !d & epsi,sigm,chi1,chi2,chip1,chip2,
13806 !d & eps1,eps2rt**2,eps3rt**2,1.0D0/dsqrt(sigsq),
13807 !d & om1,om2,om12,1.0D0/dsqrt(rrij),
13810 ! Calculate gradient components.
13811 e1=e1*eps1*eps2rt**2*eps3rt**2
13812 fac=-expon*(e1+evdwij)
13815 ! Calculate radial part of the gradient
13819 ! Calculate the angular part of the gradient and sum add the contributions
13820 ! to the appropriate components of the Cartesian gradient.
13821 call sc_grad_scale(sss)
13828 end subroutine ebp_short
13829 !-----------------------------------------------------------------------------
13830 subroutine egb_long(evdw)
13832 ! This subroutine calculates the interaction energy of nonbonded side chains
13833 ! assuming the Gay-Berne potential of interaction.
13836 ! implicit real*8 (a-h,o-z)
13837 ! include 'DIMENSIONS'
13838 ! include 'COMMON.GEO'
13839 ! include 'COMMON.VAR'
13840 ! include 'COMMON.LOCAL'
13841 ! include 'COMMON.CHAIN'
13842 ! include 'COMMON.DERIV'
13843 ! include 'COMMON.NAMES'
13844 ! include 'COMMON.INTERACT'
13845 ! include 'COMMON.IOUNITS'
13846 ! include 'COMMON.CALC'
13847 ! include 'COMMON.CONTROL'
13849 !el local variables
13850 integer :: iint,itypi,itypi1,itypj,subchap
13851 real(kind=8) :: rrij,xi,yi,zi,fac,sigm,epsi,sig,sig0ij,rij_shift
13852 real(kind=8) :: sss,e1,e2,evdw,sss_grad
13853 real(kind=8) :: xj_safe,yj_safe,zj_safe,xj_temp,yj_temp,zj_temp,&
13854 dist_temp, dist_init,aa,bb,fracinbuf,sslipi,sslipj,&
13855 ssgradlipi,ssgradlipj
13859 !cccc energy_dec=.false.
13860 ! print *,'Entering EGB nnt=',nnt,' nct=',nct,' expon=',expon
13863 ! if (icall.eq.0) lprn=.false.
13865 do i=iatsc_s,iatsc_e
13867 if (itypi.eq.ntyp1) cycle
13868 itypi1=itype(i+1,1)
13872 call to_box(xi,yi,zi)
13873 call lipid_layer(xi,yi,zi,sslipi,ssgradlipi)
13874 dxi=dc_norm(1,nres+i)
13875 dyi=dc_norm(2,nres+i)
13876 dzi=dc_norm(3,nres+i)
13877 ! dsci_inv=dsc_inv(itypi)
13878 dsci_inv=vbld_inv(i+nres)
13879 ! write (iout,*) "i",i,dsc_inv(itypi),dsci_inv,1.0d0/vbld(i+nres)
13880 ! write (iout,*) "dcnori",dxi*dxi+dyi*dyi+dzi*dzi
13882 ! Calculate SC interaction energy.
13884 do iint=1,nint_gr(i)
13885 do j=istart(i,iint),iend(i,iint)
13886 IF (dyn_ss_mask(i).and.dyn_ss_mask(j)) THEN
13887 ! call dyn_ssbond_ene(i,j,evdwij)
13889 ! if (energy_dec) write (iout,'(a6,2i5,0pf7.3,a3)') &
13890 ! 'evdw',i,j,evdwij,' ss'
13891 ! if (energy_dec) write (iout,*) &
13892 ! 'evdw',i,j,evdwij,' ss'
13893 ! do k=j+1,iend(i,iint)
13894 !C search over all next residues
13895 ! if (dyn_ss_mask(k)) then
13896 !C check if they are cysteins
13897 !C write(iout,*) 'k=',k
13899 !c write(iout,*) "PRZED TRI", evdwij
13900 ! evdwij_przed_tri=evdwij
13901 ! call triple_ssbond_ene(i,j,k,evdwij)
13902 !c if(evdwij_przed_tri.ne.evdwij) then
13903 !c write (iout,*) "TRI:", evdwij, evdwij_przed_tri
13906 !c write(iout,*) "PO TRI", evdwij
13907 !C call the energy function that removes the artifical triple disulfide
13908 !C bond the soubroutine is located in ssMD.F
13910 if (energy_dec) write (iout,'(a6,2i5,0pf7.3,a3)') &
13911 'evdw',i,j,evdwij,'tss'
13912 ! endif!dyn_ss_mask(k)
13918 if (itypj.eq.ntyp1) cycle
13919 ! dscj_inv=dsc_inv(itypj)
13920 dscj_inv=vbld_inv(j+nres)
13921 ! write (iout,*) "j",j,dsc_inv(itypj),dscj_inv,
13922 ! & 1.0d0/vbld(j+nres)
13923 ! write (iout,*) "i",i," j", j," itype",itype(i,1),itype(j,1)
13924 sig0ij=sigma(itypi,itypj)
13925 chi1=chi(itypi,itypj)
13926 chi2=chi(itypj,itypi)
13933 alf12=0.5D0*(alf1+alf2)
13937 ! Searching for nearest neighbour
13938 call to_box(xj,yj,zj)
13939 call lipid_layer(xj,yj,zj,sslipj,ssgradlipj)
13940 aa=aa_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0 &
13941 +aa_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
13942 bb=bb_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0 &
13943 +bb_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
13944 xj=boxshift(xj-xi,boxxsize)
13945 yj=boxshift(yj-yi,boxysize)
13946 zj=boxshift(zj-zi,boxzsize)
13947 dxj=dc_norm(1,nres+j)
13948 dyj=dc_norm(2,nres+j)
13949 dzj=dc_norm(3,nres+j)
13950 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
13952 sss=sscale(1.0d0/(rij*sigmaii(itypi,itypj)))
13953 sss_ele_cut=sscale_ele(1.0d0/(rij))
13954 sss_ele_grad=sscagrad_ele(1.0d0/(rij))
13955 sss_grad=sscale_grad(1.0d0/(rij*sigmaii(itypi,itypj)))
13956 if (sss_ele_cut.le.0.0) cycle
13957 if (sss.lt.1.0d0) then
13959 ! Calculate angle-dependent terms of energy and contributions to their
13963 sig=sig0ij*dsqrt(sigsq)
13964 rij_shift=1.0D0/rij-sig+sig0ij
13965 ! for diagnostics; uncomment
13966 ! rij_shift=1.2*sig0ij
13967 ! I hate to put IF's in the loops, but here don't have another choice!!!!
13968 if (rij_shift.le.0.0D0) then
13970 !d write (iout,'(2(a3,i3,2x),17(0pf7.3))')
13971 !d & restyp(itypi,1),i,restyp(itypj,1),j,
13972 !d & rij_shift,1.0D0/rij,sig,sig0ij,sigsq,1-dsqrt(sigsq)
13976 !---------------------------------------------------------------
13977 rij_shift=1.0D0/rij_shift
13978 fac=rij_shift**expon
13981 evdwij=eps1*eps2rt*eps3rt*(e1+e2)
13982 eps2der=evdwij*eps3rt
13983 eps3der=evdwij*eps2rt
13984 ! write (iout,*) "sigsq",sigsq," sig",sig," eps2rt",eps2rt,
13985 ! & " eps3rt",eps3rt," eps1",eps1," e1",e1," e2",e2
13986 evdwij=evdwij*eps2rt*eps3rt
13987 evdw=evdw+evdwij*(1.0d0-sss)*sss_ele_cut
13989 sigm=dabs(aa_aq(itypi,itypj)/bb_aq(itypi,itypj))**(1.0D0/6.0D0)
13990 epsi=bb_aq(itypi,itypj)**2/aa_aq(itypi,itypj)
13991 write (iout,'(2(a3,i3,2x),17(0pf7.3))') &
13992 restyp(itypi,1),i,restyp(itypj,1),j,&
13993 epsi,sigm,chi1,chi2,chip1,chip2,&
13994 eps1,eps2rt**2,eps3rt**2,sig,sig0ij,&
13995 om1,om2,om12,1.0D0/rij,1.0D0/rij_shift,&
13999 if (energy_dec) write (iout,'(a6,2i5,0pf7.3)') &
14001 ! if (energy_dec) write (iout,*) &
14002 ! 'evdw',i,j,evdwij,"egb_long"
14004 ! Calculate gradient components.
14005 e1=e1*eps1*eps2rt**2*eps3rt**2
14006 fac=-expon*(e1+evdwij)*rij_shift
14009 fac=fac+evdwij*(sss_ele_grad/sss_ele_cut&
14010 *rij-sss_grad/(1.0-sss)*rij &
14011 /sigmaii(itypi,itypj))
14013 ! Calculate the radial part of the gradient
14017 ! Calculate angular part of the gradient.
14018 call sc_grad_scale(1.0d0-sss)
14024 ! write (iout,*) "Number of loop steps in EGB:",ind
14025 !ccc energy_dec=.false.
14027 end subroutine egb_long
14028 !-----------------------------------------------------------------------------
14029 subroutine egb_short(evdw)
14031 ! This subroutine calculates the interaction energy of nonbonded side chains
14032 ! assuming the Gay-Berne potential of interaction.
14035 ! implicit real*8 (a-h,o-z)
14036 ! include 'DIMENSIONS'
14037 ! include 'COMMON.GEO'
14038 ! include 'COMMON.VAR'
14039 ! include 'COMMON.LOCAL'
14040 ! include 'COMMON.CHAIN'
14041 ! include 'COMMON.DERIV'
14042 ! include 'COMMON.NAMES'
14043 ! include 'COMMON.INTERACT'
14044 ! include 'COMMON.IOUNITS'
14045 ! include 'COMMON.CALC'
14046 ! include 'COMMON.CONTROL'
14048 !el local variables
14049 integer :: iint,itypi,itypi1,itypj,subchap
14050 real(kind=8) :: rrij,xi,yi,zi,fac,sigm,epsi,sig0ij,sig
14051 real(kind=8) :: sss,e1,e2,evdw,rij_shift,sss_grad
14052 real(kind=8) :: xj_safe,yj_safe,zj_safe,xj_temp,yj_temp,zj_temp,&
14053 dist_temp, dist_init,aa,bb,fracinbuf,sslipi,sslipj,&
14054 ssgradlipi,ssgradlipj
14056 !cccc energy_dec=.false.
14057 ! print *,'Entering EGB nnt=',nnt,' nct=',nct,' expon=',expon
14060 ! if (icall.eq.0) lprn=.false.
14062 do i=iatsc_s,iatsc_e
14064 if (itypi.eq.ntyp1) cycle
14065 itypi1=itype(i+1,1)
14069 call to_box(xi,yi,zi)
14070 call lipid_layer(xi,yi,zi,sslipi,ssgradlipi)
14072 dxi=dc_norm(1,nres+i)
14073 dyi=dc_norm(2,nres+i)
14074 dzi=dc_norm(3,nres+i)
14075 ! dsci_inv=dsc_inv(itypi)
14076 dsci_inv=vbld_inv(i+nres)
14078 dxi=dc_norm(1,nres+i)
14079 dyi=dc_norm(2,nres+i)
14080 dzi=dc_norm(3,nres+i)
14081 ! dsci_inv=dsc_inv(itypi)
14082 dsci_inv=vbld_inv(i+nres)
14083 do iint=1,nint_gr(i)
14084 do j=istart(i,iint),iend(i,iint)
14085 IF (dyn_ss_mask(i).and.dyn_ss_mask(j)) THEN
14086 call dyn_ssbond_ene(i,j,evdwij)
14088 if (energy_dec) write (iout,'(a6,2i5,0pf7.3,a3)') &
14089 'evdw',i,j,evdwij,' ss'
14090 do k=j+1,iend(i,iint)
14091 !C search over all next residues
14092 if (dyn_ss_mask(k)) then
14093 !C check if they are cysteins
14094 !C write(iout,*) 'k=',k
14096 !c write(iout,*) "PRZED TRI", evdwij
14097 ! evdwij_przed_tri=evdwij
14098 call triple_ssbond_ene(i,j,k,evdwij)
14099 !c if(evdwij_przed_tri.ne.evdwij) then
14100 !c write (iout,*) "TRI:", evdwij, evdwij_przed_tri
14103 !c write(iout,*) "PO TRI", evdwij
14104 !C call the energy function that removes the artifical triple disulfide
14105 !C bond the soubroutine is located in ssMD.F
14107 if (energy_dec) write (iout,'(a6,2i5,0pf7.3,a3)') &
14108 'evdw',i,j,evdwij,'tss'
14109 endif!dyn_ss_mask(k)
14114 if (itypj.eq.ntyp1) cycle
14115 ! dscj_inv=dsc_inv(itypj)
14116 dscj_inv=vbld_inv(j+nres)
14117 dscj_inv=dsc_inv(itypj)
14118 ! write (iout,*) "j",j,dsc_inv(itypj),dscj_inv,
14119 ! & 1.0d0/vbld(j+nres)
14120 ! write (iout,*) "i",i," j", j," itype",itype(i,1),itype(j,1)
14121 sig0ij=sigma(itypi,itypj)
14122 chi1=chi(itypi,itypj)
14123 chi2=chi(itypj,itypi)
14130 alf12=0.5D0*(alf1+alf2)
14131 ! xj=c(1,nres+j)-xi
14132 ! yj=c(2,nres+j)-yi
14133 ! zj=c(3,nres+j)-zi
14137 ! Searching for nearest neighbour
14138 call to_box(xj,yj,zj)
14139 call lipid_layer(xj,yj,zj,sslipj,ssgradlipj)
14140 aa=aa_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0 &
14141 +aa_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
14142 bb=bb_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0 &
14143 +bb_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
14144 xj=boxshift(xj-xi,boxxsize)
14145 yj=boxshift(yj-yi,boxysize)
14146 zj=boxshift(zj-zi,boxzsize)
14147 dxj=dc_norm(1,nres+j)
14148 dyj=dc_norm(2,nres+j)
14149 dzj=dc_norm(3,nres+j)
14150 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
14152 sss=sscale(1.0d0/(rij*sigmaii(itypi,itypj)))
14153 sss_grad=sscale_grad(1.0d0/(rij*sigmaii(itypi,itypj)))
14154 sss_ele_cut=sscale_ele(1.0d0/(rij))
14155 sss_ele_grad=sscagrad_ele(1.0d0/(rij))
14156 if (sss_ele_cut.le.0.0) cycle
14158 if (sss.gt.0.0d0) then
14160 ! Calculate angle-dependent terms of energy and contributions to their
14164 sig=sig0ij*dsqrt(sigsq)
14165 rij_shift=1.0D0/rij-sig+sig0ij
14166 ! for diagnostics; uncomment
14167 ! rij_shift=1.2*sig0ij
14168 ! I hate to put IF's in the loops, but here don't have another choice!!!!
14169 if (rij_shift.le.0.0D0) then
14171 !d write (iout,'(2(a3,i3,2x),17(0pf7.3))')
14172 !d & restyp(itypi,1),i,restyp(itypj,1),j,
14173 !d & rij_shift,1.0D0/rij,sig,sig0ij,sigsq,1-dsqrt(sigsq)
14177 !---------------------------------------------------------------
14178 rij_shift=1.0D0/rij_shift
14179 fac=rij_shift**expon
14182 evdwij=eps1*eps2rt*eps3rt*(e1+e2)
14183 eps2der=evdwij*eps3rt
14184 eps3der=evdwij*eps2rt
14185 ! write (iout,*) "sigsq",sigsq," sig",sig," eps2rt",eps2rt,
14186 ! & " eps3rt",eps3rt," eps1",eps1," e1",e1," e2",e2
14187 evdwij=evdwij*eps2rt*eps3rt
14188 evdw=evdw+evdwij*sss*sss_ele_cut
14190 sigm=dabs(aa_aq(itypi,itypj)/bb_aq(itypi,itypj))**(1.0D0/6.0D0)
14191 epsi=bb_aq(itypi,itypj)**2/aa_aq(itypi,itypj)
14192 write (iout,'(2(a3,i3,2x),17(0pf7.3))') &
14193 restyp(itypi,1),i,restyp(itypj,1),j,&
14194 epsi,sigm,chi1,chi2,chip1,chip2,&
14195 eps1,eps2rt**2,eps3rt**2,sig,sig0ij,&
14196 om1,om2,om12,1.0D0/rij,1.0D0/rij_shift,&
14200 if (energy_dec) write (iout,'(a6,2i5,0pf7.3)') &
14202 ! if (energy_dec) write (iout,*) &
14203 ! 'evdw',i,j,evdwij,"egb_short"
14205 ! Calculate gradient components.
14206 e1=e1*eps1*eps2rt**2*eps3rt**2
14207 fac=-expon*(e1+evdwij)*rij_shift
14210 fac=fac+evdwij*(sss_ele_grad/sss_ele_cut&
14211 *rij+sss_grad/sss*rij &
14212 /sigmaii(itypi,itypj))
14215 ! Calculate the radial part of the gradient
14219 ! Calculate angular part of the gradient.
14220 call sc_grad_scale(sss)
14226 ! write (iout,*) "Number of loop steps in EGB:",ind
14227 !ccc energy_dec=.false.
14229 end subroutine egb_short
14230 !-----------------------------------------------------------------------------
14231 subroutine egbv_long(evdw)
14233 ! This subroutine calculates the interaction energy of nonbonded side chains
14234 ! assuming the Gay-Berne-Vorobjev potential of interaction.
14237 ! implicit real*8 (a-h,o-z)
14238 ! include 'DIMENSIONS'
14239 ! include 'COMMON.GEO'
14240 ! include 'COMMON.VAR'
14241 ! include 'COMMON.LOCAL'
14242 ! include 'COMMON.CHAIN'
14243 ! include 'COMMON.DERIV'
14244 ! include 'COMMON.NAMES'
14245 ! include 'COMMON.INTERACT'
14246 ! include 'COMMON.IOUNITS'
14247 ! include 'COMMON.CALC'
14249 !el integer :: icall
14250 !el common /srutu/ icall
14252 !el local variables
14253 integer :: iint,itypi,itypi1,itypj
14254 real(kind=8) :: rrij,xi,yi,zi,fac,sigm,epsi,r0ij,sig,sig0ij,&
14255 sslipi,ssgradlipi,sslipj,ssgradlipj,aa,bb
14256 real(kind=8) :: sss,e1,e2,evdw,fac_augm,e_augm,rij_shift
14258 ! print *,'Entering EGB nnt=',nnt,' nct=',nct,' expon=',expon
14261 ! if (icall.eq.0) lprn=.true.
14263 do i=iatsc_s,iatsc_e
14265 if (itypi.eq.ntyp1) cycle
14266 itypi1=itype(i+1,1)
14270 call to_box(xi,yi,zi)
14271 call lipid_layer(xi,yi,zi,sslipi,ssgradlipi)
14272 dxi=dc_norm(1,nres+i)
14273 dyi=dc_norm(2,nres+i)
14274 dzi=dc_norm(3,nres+i)
14276 ! dsci_inv=dsc_inv(itypi)
14277 dsci_inv=vbld_inv(i+nres)
14279 ! Calculate SC interaction energy.
14281 do iint=1,nint_gr(i)
14282 do j=istart(i,iint),iend(i,iint)
14285 if (itypj.eq.ntyp1) cycle
14286 ! dscj_inv=dsc_inv(itypj)
14287 dscj_inv=vbld_inv(j+nres)
14288 sig0ij=sigma(itypi,itypj)
14289 r0ij=r0(itypi,itypj)
14290 chi1=chi(itypi,itypj)
14291 chi2=chi(itypj,itypi)
14298 alf12=0.5D0*(alf1+alf2)
14302 call to_box(xj,yj,zj)
14303 call lipid_layer(xj,yj,zj,sslipj,ssgradlipj)
14304 aa=aa_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0 &
14305 +aa_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
14306 bb=bb_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0 &
14307 +bb_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
14308 xj=boxshift(xj-xi,boxxsize)
14309 yj=boxshift(yj-yi,boxysize)
14310 zj=boxshift(zj-zi,boxzsize)
14311 dxj=dc_norm(1,nres+j)
14312 dyj=dc_norm(2,nres+j)
14313 dzj=dc_norm(3,nres+j)
14314 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
14317 sss=sscale(1.0d0/(rij*sigmaii(itypi,itypj)))
14319 if (sss.lt.1.0d0) then
14321 ! Calculate angle-dependent terms of energy and contributions to their
14325 sig=sig0ij*dsqrt(sigsq)
14326 rij_shift=1.0D0/rij-sig+r0ij
14327 ! I hate to put IF's in the loops, but here don't have another choice!!!!
14328 if (rij_shift.le.0.0D0) then
14333 !---------------------------------------------------------------
14334 rij_shift=1.0D0/rij_shift
14335 fac=rij_shift**expon
14336 e1=fac*fac*aa_aq(itypi,itypj)
14337 e2=fac*bb_aq(itypi,itypj)
14338 evdwij=eps1*eps2rt*eps3rt*(e1+e2)
14339 eps2der=evdwij*eps3rt
14340 eps3der=evdwij*eps2rt
14341 fac_augm=rrij**expon
14342 e_augm=augm(itypi,itypj)*fac_augm
14343 evdwij=evdwij*eps2rt*eps3rt
14344 evdw=evdw+(evdwij+e_augm)*(1.0d0-sss)
14346 sigm=dabs(aa_aq(itypi,itypj)/bb_aq(itypi,itypj))**(1.0D0/6.0D0)
14347 epsi=bb_aq(itypi,itypj)**2/aa_aq(itypi,itypj)
14348 write (iout,'(2(a3,i3,2x),17(0pf7.3))') &
14349 restyp(itypi,1),i,restyp(itypj,1),j,&
14350 epsi,sigm,sig,(augm(itypi,itypj)/epsi)**(1.0D0/12.0D0),&
14351 chi1,chi2,chip1,chip2,&
14352 eps1,eps2rt**2,eps3rt**2,&
14353 om1,om2,om12,1.0D0/rij,1.0D0/rij_shift,&
14356 ! Calculate gradient components.
14357 e1=e1*eps1*eps2rt**2*eps3rt**2
14358 fac=-expon*(e1+evdwij)*rij_shift
14360 fac=rij*fac-2*expon*rrij*e_augm
14361 ! Calculate the radial part of the gradient
14365 ! Calculate angular part of the gradient.
14366 call sc_grad_scale(1.0d0-sss)
14371 end subroutine egbv_long
14372 !-----------------------------------------------------------------------------
14373 subroutine egbv_short(evdw)
14375 ! This subroutine calculates the interaction energy of nonbonded side chains
14376 ! assuming the Gay-Berne-Vorobjev potential of interaction.
14379 ! implicit real*8 (a-h,o-z)
14380 ! include 'DIMENSIONS'
14381 ! include 'COMMON.GEO'
14382 ! include 'COMMON.VAR'
14383 ! include 'COMMON.LOCAL'
14384 ! include 'COMMON.CHAIN'
14385 ! include 'COMMON.DERIV'
14386 ! include 'COMMON.NAMES'
14387 ! include 'COMMON.INTERACT'
14388 ! include 'COMMON.IOUNITS'
14389 ! include 'COMMON.CALC'
14391 !el integer :: icall
14392 !el common /srutu/ icall
14394 !el local variables
14395 integer :: iint,itypi,itypi1,itypj
14396 real(kind=8) :: rrij,xi,yi,zi,fac,sigm,epsi,rij_shift,&
14397 sslipi,ssgradlipi, sslipj,ssgradlipj,aa,bb
14398 real(kind=8) :: sss,e1,e2,evdw,r0ij,sig,sig0ij,fac_augm,e_augm
14400 ! print *,'Entering EGB nnt=',nnt,' nct=',nct,' expon=',expon
14403 ! if (icall.eq.0) lprn=.true.
14405 do i=iatsc_s,iatsc_e
14407 if (itypi.eq.ntyp1) cycle
14408 itypi1=itype(i+1,1)
14412 dxi=dc_norm(1,nres+i)
14413 dyi=dc_norm(2,nres+i)
14414 dzi=dc_norm(3,nres+i)
14415 call to_box(xi,yi,zi)
14416 call lipid_layer(xi,yi,zi,sslipi,ssgradlipi)
14417 ! dsci_inv=dsc_inv(itypi)
14418 dsci_inv=vbld_inv(i+nres)
14420 ! Calculate SC interaction energy.
14422 do iint=1,nint_gr(i)
14423 do j=istart(i,iint),iend(i,iint)
14426 if (itypj.eq.ntyp1) cycle
14427 ! dscj_inv=dsc_inv(itypj)
14428 dscj_inv=vbld_inv(j+nres)
14429 sig0ij=sigma(itypi,itypj)
14430 r0ij=r0(itypi,itypj)
14431 chi1=chi(itypi,itypj)
14432 chi2=chi(itypj,itypi)
14439 alf12=0.5D0*(alf1+alf2)
14443 call to_box(xj,yj,zj)
14444 call lipid_layer(xj,yj,zj,sslipj,ssgradlipj)
14445 aa=aa_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0 &
14446 +aa_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
14447 bb=bb_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0 &
14448 +bb_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
14449 xj=boxshift(xj-xi,boxxsize)
14450 yj=boxshift(yj-yi,boxysize)
14451 zj=boxshift(zj-zi,boxzsize)
14452 dxj=dc_norm(1,nres+j)
14453 dyj=dc_norm(2,nres+j)
14454 dzj=dc_norm(3,nres+j)
14455 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
14458 sss=sscale(1.0d0/(rij*sigmaii(itypi,itypj)))
14460 if (sss.gt.0.0d0) then
14462 ! Calculate angle-dependent terms of energy and contributions to their
14466 sig=sig0ij*dsqrt(sigsq)
14467 rij_shift=1.0D0/rij-sig+r0ij
14468 ! I hate to put IF's in the loops, but here don't have another choice!!!!
14469 if (rij_shift.le.0.0D0) then
14474 !---------------------------------------------------------------
14475 rij_shift=1.0D0/rij_shift
14476 fac=rij_shift**expon
14477 e1=fac*fac*aa_aq(itypi,itypj)
14478 e2=fac*bb_aq(itypi,itypj)
14479 evdwij=eps1*eps2rt*eps3rt*(e1+e2)
14480 eps2der=evdwij*eps3rt
14481 eps3der=evdwij*eps2rt
14482 fac_augm=rrij**expon
14483 e_augm=augm(itypi,itypj)*fac_augm
14484 evdwij=evdwij*eps2rt*eps3rt
14485 evdw=evdw+(evdwij+e_augm)*sss
14487 sigm=dabs(aa_aq(itypi,itypj)/bb_aq(itypi,itypj))**(1.0D0/6.0D0)
14488 epsi=bb_aq(itypi,itypj)**2/aa_aq(itypi,itypj)
14489 write (iout,'(2(a3,i3,2x),17(0pf7.3))') &
14490 restyp(itypi,1),i,restyp(itypj,1),j,&
14491 epsi,sigm,sig,(augm(itypi,itypj)/epsi)**(1.0D0/12.0D0),&
14492 chi1,chi2,chip1,chip2,&
14493 eps1,eps2rt**2,eps3rt**2,&
14494 om1,om2,om12,1.0D0/rij,1.0D0/rij_shift,&
14497 ! Calculate gradient components.
14498 e1=e1*eps1*eps2rt**2*eps3rt**2
14499 fac=-expon*(e1+evdwij)*rij_shift
14501 fac=rij*fac-2*expon*rrij*e_augm
14502 ! Calculate the radial part of the gradient
14506 ! Calculate angular part of the gradient.
14507 call sc_grad_scale(sss)
14512 end subroutine egbv_short
14513 !-----------------------------------------------------------------------------
14514 subroutine eelec_scale(ees,evdw1,eel_loc,eello_turn3,eello_turn4)
14516 ! This subroutine calculates the average interaction energy and its gradient
14517 ! in the virtual-bond vectors between non-adjacent peptide groups, based on
14518 ! the potential described in Liwo et al., Protein Sci., 1993, 2, 1715.
14519 ! The potential depends both on the distance of peptide-group centers and on
14520 ! the orientation of the CA-CA virtual bonds.
14522 ! implicit real*8 (a-h,o-z)
14528 ! include 'DIMENSIONS'
14529 ! include 'COMMON.CONTROL'
14530 ! include 'COMMON.SETUP'
14531 ! include 'COMMON.IOUNITS'
14532 ! include 'COMMON.GEO'
14533 ! include 'COMMON.VAR'
14534 ! include 'COMMON.LOCAL'
14535 ! include 'COMMON.CHAIN'
14536 ! include 'COMMON.DERIV'
14537 ! include 'COMMON.INTERACT'
14538 ! include 'COMMON.CONTACTS'
14539 ! include 'COMMON.TORSION'
14540 ! include 'COMMON.VECTORS'
14541 ! include 'COMMON.FFIELD'
14542 ! include 'COMMON.TIME1'
14543 real(kind=8),dimension(3) :: ggg,gggp,gggm,erij,dcosb,dcosg
14544 real(kind=8),dimension(3,3) ::erder,uryg,urzg,vryg,vrzg
14545 real(kind=8),dimension(2,2) :: acipa !el,a_temp
14546 !el real(kind=8),dimension(3,4) :: agg,aggi,aggi1,aggj,aggj1
14547 real(kind=8),dimension(4) :: muij
14548 !el integer :: num_conti,j1,j2
14549 !el real(kind=8) :: a22,a23,a32,a33,dxi,dyi,dzi,dx_normi,dy_normi,&
14550 !el dz_normi,xmedi,ymedi,zmedi
14551 !el common /locel/ a_temp,agg,aggi,aggi1,aggj,aggj1,a22,a23,a32,a33,&
14552 !el dxi,dyi,dzi,dx_normi,dy_normi,dz_normi,xmedi,ymedi,zmedi,&
14553 !el num_conti,j1,j2
14554 ! 4/26/02 - AL scaling factor for 1,4 repulsive VDW interactions
14556 real(kind=8) :: scal_el=1.0d0
14558 real(kind=8) :: scal_el=0.5d0
14561 ! 13-go grudnia roku pamietnego...
14562 real(kind=8),dimension(3,3) :: unmat=reshape((/1.0d0,0.0d0,0.0d0,&
14563 0.0d0,1.0d0,0.0d0,&
14564 0.0d0,0.0d0,1.0d0/),shape(unmat))
14565 !el local variables
14567 real(kind=8) :: fac
14568 real(kind=8) :: dxj,dyj,dzj
14569 real(kind=8) :: ees,evdw1,eel_loc,eello_turn3,eello_turn4
14571 ! allocate(num_cont_hb(nres)) !(maxres)
14572 !d write(iout,*) 'In EELEC'
14574 !d write(iout,*) 'Type',i
14575 !d write(iout,*) 'B1',B1(:,i)
14576 !d write(iout,*) 'B2',B2(:,i)
14577 !d write(iout,*) 'CC',CC(:,:,i)
14578 !d write(iout,*) 'DD',DD(:,:,i)
14579 !d write(iout,*) 'EE',EE(:,:,i)
14581 !d call check_vecgrad
14583 if (icheckgrad.eq.1) then
14585 fac=1.0d0/dsqrt(scalar(dc(1,i),dc(1,i)))
14587 dc_norm(k,i)=dc(k,i)*fac
14589 ! write (iout,*) 'i',i,' fac',fac
14592 if (wel_loc.gt.0.0d0 .or. wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 &
14593 .or. wcorr6.gt.0.0d0 .or. wturn3.gt.0.0d0 .or. &
14594 wturn4.gt.0.0d0 .or. wturn6.gt.0.0d0) then
14595 ! call vec_and_deriv
14599 ! print *, "before set matrices"
14601 ! print *,"after set martices"
14603 time_mat=time_mat+MPI_Wtime()-time01
14607 !d write (iout,*) 'i=',i
14609 !d write (iout,'(i5,2f10.5)') k,uy(k,i),uz(k,i)
14612 !d write (iout,'(f10.5,2x,3f10.5,2x,3f10.5)')
14613 !d & uz(k,i),(uzgrad(k,l,1,i),l=1,3),(uzgrad(k,l,2,i),l=1,3)
14626 !d print '(a)','Enter EELEC'
14627 !d write (iout,*) 'iatel_s=',iatel_s,' iatel_e=',iatel_e
14628 ! if (.not.allocated(gel_loc_loc)) allocate(gel_loc_loc(nres)) !(maxvar)(maxvar=6*maxres)
14629 ! if (.not.allocated(gcorr_loc)) allocate(gcorr_loc(nres)) !(maxvar)(maxvar=6*maxres)
14631 gel_loc_loc(i)=0.0d0
14636 ! 9/27/08 AL Split the interaction loop to ensure load balancing of turn terms
14638 ! Loop over i,i+2 and i,i+3 pairs of the peptide groups
14640 do i=iturn3_start,iturn3_end
14641 if (itype(i,1).eq.ntyp1.or. itype(i+1,1).eq.ntyp1 &
14642 .or. itype(i+2,1).eq.ntyp1 .or. itype(i+3,1).eq.ntyp1) cycle
14646 dx_normi=dc_norm(1,i)
14647 dy_normi=dc_norm(2,i)
14648 dz_normi=dc_norm(3,i)
14649 xmedi=c(1,i)+0.5d0*dxi
14650 ymedi=c(2,i)+0.5d0*dyi
14651 zmedi=c(3,i)+0.5d0*dzi
14652 call to_box(xmedi,ymedi,zmedi)
14653 call lipid_layer(xmedi,ymedi,zmedi,sslipi,ssgradlipi)
14655 call eelecij_scale(i,i+2,ees,evdw1,eel_loc)
14656 if (wturn3.gt.0.0d0) call eturn3(i,eello_turn3)
14657 num_cont_hb(i)=num_conti
14659 do i=iturn4_start,iturn4_end
14660 if (itype(i,1).eq.ntyp1 .or. itype(i+1,1).eq.ntyp1 &
14661 .or. itype(i+3,1).eq.ntyp1 &
14662 .or. itype(i+4,1).eq.ntyp1) cycle
14666 dx_normi=dc_norm(1,i)
14667 dy_normi=dc_norm(2,i)
14668 dz_normi=dc_norm(3,i)
14669 xmedi=c(1,i)+0.5d0*dxi
14670 ymedi=c(2,i)+0.5d0*dyi
14671 zmedi=c(3,i)+0.5d0*dzi
14673 call to_box(xmedi,ymedi,zmedi)
14674 call lipid_layer(xmedi,ymedi,zmedi,sslipi,ssgradlipi)
14676 num_conti=num_cont_hb(i)
14677 call eelecij_scale(i,i+3,ees,evdw1,eel_loc)
14678 if (wturn4.gt.0.0d0 .and. itype(i+2,1).ne.ntyp1) &
14679 call eturn4(i,eello_turn4)
14680 num_cont_hb(i)=num_conti
14683 ! Loop over all pairs of interacting peptide groups except i,i+2 and i,i+3
14685 do i=iatel_s,iatel_e
14686 if (itype(i,1).eq.ntyp1 .or. itype(i+1,1).eq.ntyp1) cycle
14690 dx_normi=dc_norm(1,i)
14691 dy_normi=dc_norm(2,i)
14692 dz_normi=dc_norm(3,i)
14693 xmedi=c(1,i)+0.5d0*dxi
14694 ymedi=c(2,i)+0.5d0*dyi
14695 zmedi=c(3,i)+0.5d0*dzi
14696 call to_box(xmedi,ymedi,zmedi)
14697 call lipid_layer(xmedi,ymedi,zmedi,sslipi,ssgradlipi)
14698 ! write (iout,*) 'i',i,' ielstart',ielstart(i),' ielend',ielend(i)
14699 num_conti=num_cont_hb(i)
14700 do j=ielstart(i),ielend(i)
14701 if (itype(j,1).eq.ntyp1 .or. itype(j+1,1).eq.ntyp1) cycle
14702 call eelecij_scale(i,j,ees,evdw1,eel_loc)
14704 num_cont_hb(i)=num_conti
14706 ! write (iout,*) "Number of loop steps in EELEC:",ind
14708 !d write (iout,'(i3,3f10.5,5x,3f10.5)')
14709 !d & i,(gel_loc(k,i),k=1,3),gel_loc_loc(i)
14711 ! 12/7/99 Adam eello_turn3 will be considered as a separate energy term
14712 !cc eel_loc=eel_loc+eello_turn3
14713 !d print *,"Processor",fg_rank," t_eelecij",t_eelecij
14715 end subroutine eelec_scale
14716 !-----------------------------------------------------------------------------
14717 subroutine eelecij_scale(i,j,ees,evdw1,eel_loc)
14718 ! implicit real*8 (a-h,o-z)
14721 ! include 'DIMENSIONS'
14725 ! include 'COMMON.CONTROL'
14726 ! include 'COMMON.IOUNITS'
14727 ! include 'COMMON.GEO'
14728 ! include 'COMMON.VAR'
14729 ! include 'COMMON.LOCAL'
14730 ! include 'COMMON.CHAIN'
14731 ! include 'COMMON.DERIV'
14732 ! include 'COMMON.INTERACT'
14733 ! include 'COMMON.CONTACTS'
14734 ! include 'COMMON.TORSION'
14735 ! include 'COMMON.VECTORS'
14736 ! include 'COMMON.FFIELD'
14737 ! include 'COMMON.TIME1'
14738 real(kind=8),dimension(3) :: ggg,gggp,gggm,erij,dcosb,dcosg,xtemp
14739 real(kind=8),dimension(3,3) :: erder,uryg,urzg,vryg,vrzg
14740 real(kind=8),dimension(2,2) :: acipa !el,a_temp
14741 !el real(kind=8),dimension(3,4) :: agg,aggi,aggi1,aggj,aggj1
14742 real(kind=8),dimension(4) :: muij
14743 real(kind=8) :: xj_safe,yj_safe,zj_safe,xj_temp,yj_temp,zj_temp,&
14744 dist_temp, dist_init,sss_grad
14745 integer xshift,yshift,zshift
14747 !el integer :: num_conti,j1,j2
14748 !el real(kind=8) :: a22,a23,a32,a33,dxi,dyi,dzi,dx_normi,dy_normi,&
14749 !el dz_normi,xmedi,ymedi,zmedi
14750 !el common /locel/ a_temp,agg,aggi,aggi1,aggj,aggj1,a22,a23,a32,a33,&
14751 !el dxi,dyi,dzi,dx_normi,dy_normi,dz_normi,xmedi,ymedi,zmedi,&
14752 !el num_conti,j1,j2
14753 ! 4/26/02 - AL scaling factor for 1,4 repulsive VDW interactions
14755 real(kind=8) :: scal_el=1.0d0
14757 real(kind=8) :: scal_el=0.5d0
14760 ! 13-go grudnia roku pamietnego...
14761 real(kind=8),dimension(3,3) :: unmat=reshape((/1.0d0,0.0d0,0.0d0,&
14762 0.0d0,1.0d0,0.0d0,&
14763 0.0d0,0.0d0,1.0d0/),shape(unmat))
14764 !el local variables
14765 integer :: i,j,k,l,iteli,itelj,kkk,kkll,m,isubchap
14766 real(kind=8) :: aaa,bbb,ael6i,ael3i,dxj,dyj,dzj
14767 real(kind=8) :: xj,yj,zj,rij,rrmij,rmij,sss,r3ij,r6ij,fac
14768 real(kind=8) :: cosa,cosb,cosg,ev1,ev2,fac3,fac4,evdwij
14769 real(kind=8) :: el1,el2,eesij,ees0ij,r0ij,fcont,fprimcont
14770 real(kind=8) :: ees0tmp,ees0pij1,ees0mij1,ees0pijp,ees0mijp
14771 real(kind=8) :: ees,evdw1,eel_loc,eel_loc_ij,dx_normj,dy_normj,&
14772 dz_normj,facvdw,facel,fac1,facr,ecosa,ecosb,ecosg,&
14773 ury,urz,vry,vrz,a22der,a23der,a32der,a33der,cosa4,&
14774 wij,cosbg1,cosbg2,ees0pij,ees0mij,fac3p,ecosa1,ecosb1,&
14775 ecosg1,ecosa2,ecosb2,ecosg2,ecosap,ecosbp,ecosgp,&
14776 ecosam,ecosbm,ecosgm,ghalf,time00,faclipij,faclipij2
14777 ! integer :: maxconts
14778 ! maxconts = nres/4
14779 ! allocate(gacontp_hb1(3,maxconts,nres)) !(3,maxconts,maxres) ! (maxconts=maxres/4)
14780 ! allocate(gacontp_hb2(3,maxconts,nres)) !(3,maxconts,maxres) ! (maxconts=maxres/4)
14781 ! allocate(gacontp_hb3(3,maxconts,nres)) !(3,maxconts,maxres) ! (maxconts=maxres/4)
14782 ! allocate(gacontm_hb1(3,maxconts,nres)) !(3,maxconts,maxres) ! (maxconts=maxres/4)
14783 ! allocate(gacontm_hb2(3,maxconts,nres)) !(3,maxconts,maxres) ! (maxconts=maxres/4)
14784 ! allocate(gacontm_hb3(3,maxconts,nres)) !(3,maxconts,maxres) ! (maxconts=maxres/4)
14785 ! allocate(gacont_hbr(3,maxconts,nres)) !(3,maxconts,maxres) ! (maxconts=maxres/4)
14786 ! allocate(grij_hb_cont(3,maxconts,nres)) !(3,maxconts,maxres) ! (maxconts=maxres/4)
14787 ! allocate(facont_hb(maxconts,nres)) !(maxconts,maxres)
14788 ! allocate(ees0p(maxconts,nres)) !(maxconts,maxres)
14789 ! allocate(ees0m(maxconts,nres)) !(maxconts,maxres)
14790 ! allocate(d_cont(maxconts,nres)) !(maxconts,maxres)
14791 ! allocate(jcont_hb(maxconts,nres)) !(maxconts,maxres)
14793 ! allocate(a_chuj(2,2,maxconts,nres)) !(2,2,maxconts,maxres)
14794 ! allocate(a_chuj_der(2,2,3,5,maxconts,nres)) !(2,2,3,5,maxconts,maxres)
14799 !d write (iout,*) "eelecij",i,j
14803 if (j.eq.i+2 .and. itelj.eq.2) iteli=2
14804 aaa=app(iteli,itelj)
14805 bbb=bpp(iteli,itelj)
14806 ael6i=ael6(iteli,itelj)
14807 ael3i=ael3(iteli,itelj)
14811 dx_normj=dc_norm(1,j)
14812 dy_normj=dc_norm(2,j)
14813 dz_normj=dc_norm(3,j)
14814 ! xj=c(1,j)+0.5D0*dxj-xmedi
14815 ! yj=c(2,j)+0.5D0*dyj-ymedi
14816 ! zj=c(3,j)+0.5D0*dzj-zmedi
14817 xj=c(1,j)+0.5D0*dxj
14818 yj=c(2,j)+0.5D0*dyj
14819 zj=c(3,j)+0.5D0*dzj
14820 call to_box(xj,yj,zj)
14821 call lipid_layer(xj,yj,zj,sslipj,ssgradlipj)
14822 faclipij=(sslipi+sslipj)/2.0d0*lipscale+1.0d0
14823 faclipij2=(sslipi+sslipj)/2.0d0*lipscale**2+1.0d0
14824 xj=boxshift(xj-xmedi,boxxsize)
14825 yj=boxshift(yj-ymedi,boxysize)
14826 zj=boxshift(zj-zmedi,boxzsize)
14827 rij=xj*xj+yj*yj+zj*zj
14831 ! For extracting the short-range part of Evdwpp
14832 sss=sscale(rij/rpp(iteli,itelj))
14833 sss_ele_cut=sscale_ele(rij)
14834 sss_ele_grad=sscagrad_ele(rij)
14835 sss_grad=sscale_grad((rij/rpp(iteli,itelj)))
14836 ! sss_ele_cut=1.0d0
14837 ! sss_ele_grad=0.0d0
14838 if (sss_ele_cut.le.0.0) go to 128
14842 cosa=dx_normi*dx_normj+dy_normi*dy_normj+dz_normi*dz_normj
14843 cosb=(xj*dx_normi+yj*dy_normi+zj*dz_normi)*rmij
14844 cosg=(xj*dx_normj+yj*dy_normj+zj*dz_normj)*rmij
14845 fac=cosa-3.0D0*cosb*cosg
14847 ! 4/26/02 - AL scaling down 1,4 repulsive VDW interactions
14848 if (j.eq.i+2) ev1=scal_el*ev1
14853 el1=fac3*(4.0D0+fac*fac-3.0D0*(cosb*cosb+cosg*cosg))
14856 ! 12/26/95 - for the evaluation of multi-body H-bonding interactions
14857 ees0ij=4.0D0+fac*fac-3.0D0*(cosb*cosb+cosg*cosg)
14858 ees=ees+eesij*sss_ele_cut
14859 evdw1=evdw1+evdwij*(1.0d0-sss)*sss_ele_cut
14860 !d write(iout,'(2(2i3,2x),7(1pd12.4)/2(3(1pd12.4),5x)/)')
14861 !d & iteli,i,itelj,j,aaa,bbb,ael6i,ael3i,
14862 !d & 1.0D0/dsqrt(rrmij),evdwij,eesij,
14863 !d & xmedi,ymedi,zmedi,xj,yj,zj
14865 if (energy_dec) then
14866 write (iout,'(a6,2i5,0pf7.3,f7.3)') 'evdw1',i,j,evdwij,sss
14867 write (iout,'(a6,2i5,0pf7.3)') 'ees',i,j,eesij
14871 ! Calculate contributions to the Cartesian gradient.
14874 facvdw=-6*rrmij*(ev1+evdwij)*(1.0d0-sss)*sss_ele_cut
14875 facel=-3*rrmij*(el1+eesij)*sss_ele_cut
14881 ! Radial derivatives. First process both termini of the fragment (i,j)
14883 ggg(1)=facel*xj+sss_ele_grad*rmij*eesij*xj
14884 ggg(2)=facel*yj+sss_ele_grad*rmij*eesij*yj
14885 ggg(3)=facel*zj+sss_ele_grad*rmij*eesij*zj
14887 ! ghalf=0.5D0*ggg(k)
14888 ! gelc(k,i)=gelc(k,i)+ghalf
14889 ! gelc(k,j)=gelc(k,j)+ghalf
14891 ! 9/28/08 AL Gradient compotents will be summed only at the end
14893 gelc_long(k,j)=gelc_long(k,j)+ggg(k)
14894 gelc_long(k,i)=gelc_long(k,i)-ggg(k)
14897 ! Loop over residues i+1 thru j-1.
14901 !grad gelc(l,k)=gelc(l,k)+ggg(l)
14904 ggg(1)=facvdw*xj+sss_ele_grad*rmij*evdwij*xj*(1.0d0-sss) &
14905 -evdwij*sss_ele_cut/rij*sss_grad/rpp(iteli,itelj)*xj
14906 ggg(2)=facvdw*yj+sss_ele_grad*rmij*evdwij*yj*(1.0d0-sss) &
14907 -evdwij*sss_ele_cut/rij*sss_grad/rpp(iteli,itelj)*yj
14908 ggg(3)=facvdw*zj+sss_ele_grad*rmij*evdwij*zj*(1.0d0-sss) &
14909 -evdwij*sss_ele_cut/rij*sss_grad/rpp(iteli,itelj)*zj
14911 ! ghalf=0.5D0*ggg(k)
14912 ! gvdwpp(k,i)=gvdwpp(k,i)+ghalf
14913 ! gvdwpp(k,j)=gvdwpp(k,j)+ghalf
14915 ! 9/28/08 AL Gradient compotents will be summed only at the end
14917 gvdwpp(k,j)=gvdwpp(k,j)+ggg(k)
14918 gvdwpp(k,i)=gvdwpp(k,i)-ggg(k)
14921 ! Loop over residues i+1 thru j-1.
14925 !grad gvdwpp(l,k)=gvdwpp(l,k)+ggg(l)
14929 facvdw=(ev1+evdwij)*(1.0d0-sss)*sss_ele_cut
14930 facel=(el1+eesij)*sss_ele_cut
14932 fac=-3*rrmij*(facvdw+facvdw+facel)
14937 ! Radial derivatives. First process both termini of the fragment (i,j)
14943 ! ghalf=0.5D0*ggg(k)
14944 ! gelc(k,i)=gelc(k,i)+ghalf
14945 ! gelc(k,j)=gelc(k,j)+ghalf
14947 ! 9/28/08 AL Gradient compotents will be summed only at the end
14949 gelc_long(k,j)=gelc(k,j)+ggg(k)
14950 gelc_long(k,i)=gelc(k,i)-ggg(k)
14953 ! Loop over residues i+1 thru j-1.
14957 !grad gelc(l,k)=gelc(l,k)+ggg(l)
14960 ! 9/28/08 AL Gradient compotents will be summed only at the end
14965 gvdwpp(k,j)=gvdwpp(k,j)+ggg(k)
14966 gvdwpp(k,i)=gvdwpp(k,i)-ggg(k)
14972 ecosa=2.0D0*fac3*fac1+fac4
14975 ecosb=(fac3*(fac1*cosg+cosb)+cosg*fac4)
14976 ecosg=(fac3*(fac1*cosb+cosg)+cosb*fac4)
14978 dcosb(k)=rmij*(dc_norm(k,i)-erij(k)*cosb)
14979 dcosg(k)=rmij*(dc_norm(k,j)-erij(k)*cosg)
14981 !d print '(2i3,2(3(1pd14.5),3x))',i,j,(dcosb(k),k=1,3),
14982 !d & (dcosg(k),k=1,3)
14984 ggg(k)=(ecosb*dcosb(k)+ecosg*dcosg(k) )*sss_ele_cut
14987 ! ghalf=0.5D0*ggg(k)
14988 ! gelc(k,i)=gelc(k,i)+ghalf
14989 ! & +(ecosa*(dc_norm(k,j)-cosa*dc_norm(k,i))
14990 ! & + ecosb*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1)
14991 ! gelc(k,j)=gelc(k,j)+ghalf
14992 ! & +(ecosa*(dc_norm(k,i)-cosa*dc_norm(k,j))
14993 ! & + ecosg*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1)
14997 !grad gelc(l,k)=gelc(l,k)+ggg(l)
15001 gelc(k,i)=gelc(k,i) &
15002 +(ecosa*(dc_norm(k,j)-cosa*dc_norm(k,i)) &
15003 + ecosb*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1)&
15005 gelc(k,j)=gelc(k,j) &
15006 +(ecosa*(dc_norm(k,i)-cosa*dc_norm(k,j)) &
15007 + ecosg*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1)&
15009 gelc_long(k,j)=gelc_long(k,j)+ggg(k)
15010 gelc_long(k,i)=gelc_long(k,i)-ggg(k)
15012 IF (wel_loc.gt.0.0d0 .or. wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 &
15013 .or. wcorr6.gt.0.0d0 .or. wturn3.gt.0.0d0 &
15014 .or. wturn4.gt.0.0d0 .or. wturn6.gt.0.0d0) THEN
15016 ! 9/25/99 Mixed third-order local-electrostatic terms. The local-interaction
15017 ! energy of a peptide unit is assumed in the form of a second-order
15018 ! Fourier series in the angles lambda1 and lambda2 (see Nishikawa et al.
15019 ! Macromolecules, 1974, 7, 797-806 for definition). This correlation terms
15020 ! are computed for EVERY pair of non-contiguous peptide groups.
15022 if (j.lt.nres-1) then
15033 muij(kkk)=mu(k,i)*mu(l,j)
15036 !d write (iout,*) 'EELEC: i',i,' j',j
15037 !d write (iout,*) 'j',j,' j1',j1,' j2',j2
15038 !d write(iout,*) 'muij',muij
15039 ury=scalar(uy(1,i),erij)
15040 urz=scalar(uz(1,i),erij)
15041 vry=scalar(uy(1,j),erij)
15042 vrz=scalar(uz(1,j),erij)
15043 a22=scalar(uy(1,i),uy(1,j))-3*ury*vry
15044 a23=scalar(uy(1,i),uz(1,j))-3*ury*vrz
15045 a32=scalar(uz(1,i),uy(1,j))-3*urz*vry
15046 a33=scalar(uz(1,i),uz(1,j))-3*urz*vrz
15047 fac=dsqrt(-ael6i)*r3ij
15052 !d write (iout,'(4i5,4f10.5)')
15053 !d & i,itortyp(itype(i,1)),j,itortyp(itype(j,1)),a22,a23,a32,a33
15054 !d write (iout,'(6f10.5)') (muij(k),k=1,4),fac,eel_loc_ij
15055 !d write (iout,'(2(3f10.5,5x)/2(3f10.5,5x))') uy(:,i),uz(:,i),
15056 !d & uy(:,j),uz(:,j)
15057 !d write (iout,'(4f10.5)')
15058 !d & scalar(uy(1,i),uy(1,j)),scalar(uy(1,i),uz(1,j)),
15059 !d & scalar(uz(1,i),uy(1,j)),scalar(uz(1,i),uz(1,j))
15060 !d write (iout,'(4f10.5)') ury,urz,vry,vrz
15061 !d write (iout,'(9f10.5/)')
15062 !d & fac22,a22,fac23,a23,fac32,a32,fac33,a33,eel_loc_ij
15063 ! Derivatives of the elements of A in virtual-bond vectors
15064 call unormderiv(erij(1),unmat(1,1),rmij,erder(1,1))
15066 uryg(k,1)=scalar(erder(1,k),uy(1,i))
15067 uryg(k,2)=scalar(uygrad(1,k,1,i),erij(1))
15068 uryg(k,3)=scalar(uygrad(1,k,2,i),erij(1))
15069 urzg(k,1)=scalar(erder(1,k),uz(1,i))
15070 urzg(k,2)=scalar(uzgrad(1,k,1,i),erij(1))
15071 urzg(k,3)=scalar(uzgrad(1,k,2,i),erij(1))
15072 vryg(k,1)=scalar(erder(1,k),uy(1,j))
15073 vryg(k,2)=scalar(uygrad(1,k,1,j),erij(1))
15074 vryg(k,3)=scalar(uygrad(1,k,2,j),erij(1))
15075 vrzg(k,1)=scalar(erder(1,k),uz(1,j))
15076 vrzg(k,2)=scalar(uzgrad(1,k,1,j),erij(1))
15077 vrzg(k,3)=scalar(uzgrad(1,k,2,j),erij(1))
15079 ! Compute radial contributions to the gradient
15097 ! Add the contributions coming from er
15100 agg(k,1)=agg(k,1)+fac3*(uryg(k,1)*vry+vryg(k,1)*ury)
15101 agg(k,2)=agg(k,2)+fac3*(uryg(k,1)*vrz+vrzg(k,1)*ury)
15102 agg(k,3)=agg(k,3)+fac3*(urzg(k,1)*vry+vryg(k,1)*urz)
15103 agg(k,4)=agg(k,4)+fac3*(urzg(k,1)*vrz+vrzg(k,1)*urz)
15106 ! Derivatives in DC(i)
15107 !grad ghalf1=0.5d0*agg(k,1)
15108 !grad ghalf2=0.5d0*agg(k,2)
15109 !grad ghalf3=0.5d0*agg(k,3)
15110 !grad ghalf4=0.5d0*agg(k,4)
15111 aggi(k,1)=fac*(scalar(uygrad(1,k,1,i),uy(1,j)) &
15112 -3.0d0*uryg(k,2)*vry)!+ghalf1
15113 aggi(k,2)=fac*(scalar(uygrad(1,k,1,i),uz(1,j)) &
15114 -3.0d0*uryg(k,2)*vrz)!+ghalf2
15115 aggi(k,3)=fac*(scalar(uzgrad(1,k,1,i),uy(1,j)) &
15116 -3.0d0*urzg(k,2)*vry)!+ghalf3
15117 aggi(k,4)=fac*(scalar(uzgrad(1,k,1,i),uz(1,j)) &
15118 -3.0d0*urzg(k,2)*vrz)!+ghalf4
15119 ! Derivatives in DC(i+1)
15120 aggi1(k,1)=fac*(scalar(uygrad(1,k,2,i),uy(1,j)) &
15121 -3.0d0*uryg(k,3)*vry)!+agg(k,1)
15122 aggi1(k,2)=fac*(scalar(uygrad(1,k,2,i),uz(1,j)) &
15123 -3.0d0*uryg(k,3)*vrz)!+agg(k,2)
15124 aggi1(k,3)=fac*(scalar(uzgrad(1,k,2,i),uy(1,j)) &
15125 -3.0d0*urzg(k,3)*vry)!+agg(k,3)
15126 aggi1(k,4)=fac*(scalar(uzgrad(1,k,2,i),uz(1,j)) &
15127 -3.0d0*urzg(k,3)*vrz)!+agg(k,4)
15128 ! Derivatives in DC(j)
15129 aggj(k,1)=fac*(scalar(uygrad(1,k,1,j),uy(1,i)) &
15130 -3.0d0*vryg(k,2)*ury)!+ghalf1
15131 aggj(k,2)=fac*(scalar(uzgrad(1,k,1,j),uy(1,i)) &
15132 -3.0d0*vrzg(k,2)*ury)!+ghalf2
15133 aggj(k,3)=fac*(scalar(uygrad(1,k,1,j),uz(1,i)) &
15134 -3.0d0*vryg(k,2)*urz)!+ghalf3
15135 aggj(k,4)=fac*(scalar(uzgrad(1,k,1,j),uz(1,i)) &
15136 -3.0d0*vrzg(k,2)*urz)!+ghalf4
15137 ! Derivatives in DC(j+1) or DC(nres-1)
15138 aggj1(k,1)=fac*(scalar(uygrad(1,k,2,j),uy(1,i)) &
15139 -3.0d0*vryg(k,3)*ury)
15140 aggj1(k,2)=fac*(scalar(uzgrad(1,k,2,j),uy(1,i)) &
15141 -3.0d0*vrzg(k,3)*ury)
15142 aggj1(k,3)=fac*(scalar(uygrad(1,k,2,j),uz(1,i)) &
15143 -3.0d0*vryg(k,3)*urz)
15144 aggj1(k,4)=fac*(scalar(uzgrad(1,k,2,j),uz(1,i)) &
15145 -3.0d0*vrzg(k,3)*urz)
15146 !grad if (j.eq.nres-1 .and. i.lt.j-2) then
15148 !grad aggj1(k,l)=aggj1(k,l)+agg(k,l)
15161 aggi(k,l)=-aggi(k,l)
15162 aggi1(k,l)=-aggi1(k,l)
15163 aggj(k,l)=-aggj(k,l)
15164 aggj1(k,l)=-aggj1(k,l)
15167 if (j.lt.nres-1) then
15173 aggi(k,l)=-aggi(k,l)
15174 aggi1(k,l)=-aggi1(k,l)
15175 aggj(k,l)=-aggj(k,l)
15176 aggj1(k,l)=-aggj1(k,l)
15187 aggi(k,l)=-aggi(k,l)
15188 aggi1(k,l)=-aggi1(k,l)
15189 aggj(k,l)=-aggj(k,l)
15190 aggj1(k,l)=-aggj1(k,l)
15195 IF (wel_loc.gt.0.0d0) THEN
15196 ! Contribution to the local-electrostatic energy coming from the i-j pair
15197 eel_loc_ij=a22*muij(1)+a23*muij(2)+a32*muij(3) &
15199 ! write (iout,*) 'i',i,' j',j,' eel_loc_ij',eel_loc_ij
15200 ! print *,"EELLOC",i,gel_loc_loc(i-1)
15201 if (energy_dec) write (iout,'(a6,2i5,0pf7.3)') &
15202 'eelloc',i,j,eel_loc_ij
15203 ! write (iout,*) a22,muij(1),a23,muij(2),a32,muij(3) !d
15205 eel_loc=eel_loc+eel_loc_ij*sss_ele_cut
15206 ! Partial derivatives in virtual-bond dihedral angles gamma
15208 gel_loc_loc(i-1)=gel_loc_loc(i-1)+ &
15209 (a22*muder(1,i)*mu(1,j)+a23*muder(1,i)*mu(2,j) &
15210 +a32*muder(2,i)*mu(1,j)+a33*muder(2,i)*mu(2,j)) &
15212 gel_loc_loc(j-1)=gel_loc_loc(j-1)+ &
15213 (a22*mu(1,i)*muder(1,j)+a23*mu(1,i)*muder(2,j) &
15214 +a32*mu(2,i)*muder(1,j)+a33*mu(2,i)*muder(2,j)) &
15220 ! Derivatives of eello in DC(i+1) thru DC(j-1) or DC(nres-2)
15222 ggg(l)=(agg(l,1)*muij(1)+ &
15223 agg(l,2)*muij(2)+agg(l,3)*muij(3)+agg(l,4)*muij(4))&
15225 +eel_loc_ij*sss_ele_grad*rmij*xtemp(l)
15227 gel_loc_long(l,j)=gel_loc_long(l,j)+ggg(l)
15228 gel_loc_long(l,i)=gel_loc_long(l,i)-ggg(l)
15229 !grad ghalf=0.5d0*ggg(l)
15230 !grad gel_loc(l,i)=gel_loc(l,i)+ghalf
15231 !grad gel_loc(l,j)=gel_loc(l,j)+ghalf
15235 !grad gel_loc(l,k)=gel_loc(l,k)+ggg(l)
15238 ! Remaining derivatives of eello
15240 gel_loc(l,i)=gel_loc(l,i)+(aggi(l,1)*muij(1)+ &
15241 aggi(l,2)*muij(2)+aggi(l,3)*muij(3)+aggi(l,4)*muij(4))&
15244 gel_loc(l,i+1)=gel_loc(l,i+1)+(aggi1(l,1)*muij(1)+ &
15245 aggi1(l,2)*muij(2)+aggi1(l,3)*muij(3)+aggi1(l,4)*muij(4))&
15248 gel_loc(l,j)=gel_loc(l,j)+(aggj(l,1)*muij(1)+ &
15249 aggj(l,2)*muij(2)+aggj(l,3)*muij(3)+aggj(l,4)*muij(4))&
15252 gel_loc(l,j1)=gel_loc(l,j1)+(aggj1(l,1)*muij(1)+ &
15253 aggj1(l,2)*muij(2)+aggj1(l,3)*muij(3)+aggj1(l,4)*muij(4))&
15258 ! Change 12/26/95 to calculate four-body contributions to H-bonding energy
15259 ! if (j.gt.i+1 .and. num_conti.le.maxconts) then
15260 if (wcorr+wcorr4+wcorr5+wcorr6.gt.0.0d0 &
15261 .and. num_conti.le.maxconts) then
15262 ! write (iout,*) i,j," entered corr"
15264 ! Calculate the contact function. The ith column of the array JCONT will
15265 ! contain the numbers of atoms that make contacts with the atom I (of numbers
15266 ! greater than I). The arrays FACONT and GACONT will contain the values of
15267 ! the contact function and its derivative.
15268 ! r0ij=1.02D0*rpp(iteli,itelj)
15269 ! r0ij=1.11D0*rpp(iteli,itelj)
15270 r0ij=2.20D0*rpp(iteli,itelj)
15271 ! r0ij=1.55D0*rpp(iteli,itelj)
15272 call gcont(rij,r0ij,1.0D0,0.2d0*r0ij,fcont,fprimcont)
15273 !elwrite(iout,*) "num_conti",num_conti, "maxconts",maxconts
15274 if (fcont.gt.0.0D0) then
15275 num_conti=num_conti+1
15276 if (num_conti.gt.maxconts) then
15277 !elwrite(iout,*) "num_conti",num_conti, "maxconts",maxconts
15278 write (iout,*) 'WARNING - max. # of contacts exceeded;',&
15279 ' will skip next contacts for this conf.',num_conti
15281 jcont_hb(num_conti,i)=j
15282 !d write (iout,*) "i",i," j",j," num_conti",num_conti,
15283 !d & " jcont_hb",jcont_hb(num_conti,i)
15284 IF (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or. &
15285 wcorr6.gt.0.0d0 .or. wturn6.gt.0.0d0) THEN
15286 ! 9/30/99 (AL) - store components necessary to evaluate higher-order loc-el
15288 d_cont(num_conti,i)=rij
15289 !d write (2,'(3e15.5)') rij,r0ij+0.2d0*r0ij,rij
15290 ! --- Electrostatic-interaction matrix ---
15291 a_chuj(1,1,num_conti,i)=a22
15292 a_chuj(1,2,num_conti,i)=a23
15293 a_chuj(2,1,num_conti,i)=a32
15294 a_chuj(2,2,num_conti,i)=a33
15295 ! --- Gradient of rij
15297 grij_hb_cont(kkk,num_conti,i)=erij(kkk)
15304 a_chuj_der(k,l,m,1,num_conti,i)=agg(m,kkll)
15305 a_chuj_der(k,l,m,2,num_conti,i)=aggi(m,kkll)
15306 a_chuj_der(k,l,m,3,num_conti,i)=aggi1(m,kkll)
15307 a_chuj_der(k,l,m,4,num_conti,i)=aggj(m,kkll)
15308 a_chuj_der(k,l,m,5,num_conti,i)=aggj1(m,kkll)
15313 IF (wcorr4.eq.0.0d0 .and. wcorr.gt.0.0d0) THEN
15314 ! Calculate contact energies
15316 wij=cosa-3.0D0*cosb*cosg
15319 ! fac3=dsqrt(-ael6i)/r0ij**3
15320 fac3=dsqrt(-ael6i)*r3ij
15321 ! ees0pij=dsqrt(4.0D0+cosa4+wij*wij-3.0D0*cosbg1*cosbg1)
15322 ees0tmp=4.0D0+cosa4+wij*wij-3.0D0*cosbg1*cosbg1
15323 if (ees0tmp.gt.0) then
15324 ees0pij=dsqrt(ees0tmp)
15328 ! ees0mij=dsqrt(4.0D0-cosa4+wij*wij-3.0D0*cosbg2*cosbg2)
15329 ees0tmp=4.0D0-cosa4+wij*wij-3.0D0*cosbg2*cosbg2
15330 if (ees0tmp.gt.0) then
15331 ees0mij=dsqrt(ees0tmp)
15336 ees0p(num_conti,i)=0.5D0*fac3*(ees0pij+ees0mij) &
15339 ees0m(num_conti,i)=0.5D0*fac3*(ees0pij-ees0mij) &
15342 ! Diagnostics. Comment out or remove after debugging!
15343 ! ees0p(num_conti,i)=0.5D0*fac3*ees0pij
15344 ! ees0m(num_conti,i)=0.5D0*fac3*ees0mij
15345 ! ees0m(num_conti,i)=0.0D0
15347 ! write (iout,*) 'i=',i,' j=',j,' rij=',rij,' r0ij=',r0ij,
15348 ! & ' ees0ij=',ees0p(num_conti,i),ees0m(num_conti,i),' fcont=',fcont
15349 ! Angular derivatives of the contact function
15350 ees0pij1=fac3/ees0pij
15351 ees0mij1=fac3/ees0mij
15352 fac3p=-3.0D0*fac3*rrmij
15353 ees0pijp=0.5D0*fac3p*(ees0pij+ees0mij)
15354 ees0mijp=0.5D0*fac3p*(ees0pij-ees0mij)
15356 ecosa1= ees0pij1*( 1.0D0+0.5D0*wij)
15357 ecosb1=-1.5D0*ees0pij1*(wij*cosg+cosbg1)
15358 ecosg1=-1.5D0*ees0pij1*(wij*cosb+cosbg1)
15359 ecosa2= ees0mij1*(-1.0D0+0.5D0*wij)
15360 ecosb2=-1.5D0*ees0mij1*(wij*cosg+cosbg2)
15361 ecosg2=-1.5D0*ees0mij1*(wij*cosb-cosbg2)
15362 ecosap=ecosa1+ecosa2
15363 ecosbp=ecosb1+ecosb2
15364 ecosgp=ecosg1+ecosg2
15365 ecosam=ecosa1-ecosa2
15366 ecosbm=ecosb1-ecosb2
15367 ecosgm=ecosg1-ecosg2
15376 facont_hb(num_conti,i)=fcont
15377 fprimcont=fprimcont/rij
15378 !d facont_hb(num_conti,i)=1.0D0
15379 ! Following line is for diagnostics.
15382 dcosb(k)=rmij*(dc_norm(k,i)-erij(k)*cosb)
15383 dcosg(k)=rmij*(dc_norm(k,j)-erij(k)*cosg)
15386 gggp(k)=ecosbp*dcosb(k)+ecosgp*dcosg(k)
15387 gggm(k)=ecosbm*dcosb(k)+ecosgm*dcosg(k)
15389 ! gggp(1)=gggp(1)+ees0pijp*xj
15390 ! gggp(2)=gggp(2)+ees0pijp*yj
15391 ! gggp(3)=gggp(3)+ees0pijp*zj
15392 ! gggm(1)=gggm(1)+ees0mijp*xj
15393 ! gggm(2)=gggm(2)+ees0mijp*yj
15394 ! gggm(3)=gggm(3)+ees0mijp*zj
15395 gggp(1)=gggp(1)+ees0pijp*xj &
15396 +ees0p(num_conti,i)/sss_ele_cut*rmij*xj*sss_ele_grad
15397 gggp(2)=gggp(2)+ees0pijp*yj &
15398 +ees0p(num_conti,i)/sss_ele_cut*rmij*yj*sss_ele_grad
15399 gggp(3)=gggp(3)+ees0pijp*zj &
15400 +ees0p(num_conti,i)/sss_ele_cut*rmij*zj*sss_ele_grad
15402 gggm(1)=gggm(1)+ees0mijp*xj &
15403 +ees0m(num_conti,i)/sss_ele_cut*rmij*xj*sss_ele_grad
15405 gggm(2)=gggm(2)+ees0mijp*yj &
15406 +ees0m(num_conti,i)/sss_ele_cut*rmij*yj*sss_ele_grad
15408 gggm(3)=gggm(3)+ees0mijp*zj &
15409 +ees0m(num_conti,i)/sss_ele_cut*rmij*zj*sss_ele_grad
15411 ! Derivatives due to the contact function
15412 gacont_hbr(1,num_conti,i)=fprimcont*xj
15413 gacont_hbr(2,num_conti,i)=fprimcont*yj
15414 gacont_hbr(3,num_conti,i)=fprimcont*zj
15417 ! 10/24/08 cgrad and ! comments indicate the parts of the code removed
15418 ! following the change of gradient-summation algorithm.
15420 !grad ghalfp=0.5D0*gggp(k)
15421 !grad ghalfm=0.5D0*gggm(k)
15422 ! gacontp_hb1(k,num_conti,i)= & !ghalfp
15423 ! +(ecosap*(dc_norm(k,j)-cosa*dc_norm(k,i)) &
15424 ! + ecosbp*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1)
15425 ! gacontp_hb2(k,num_conti,i)= & !ghalfp
15426 ! +(ecosap*(dc_norm(k,i)-cosa*dc_norm(k,j)) &
15427 ! + ecosgp*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1)
15428 ! gacontp_hb3(k,num_conti,i)=gggp(k)
15429 ! gacontm_hb1(k,num_conti,i)= &!ghalfm
15430 ! +(ecosam*(dc_norm(k,j)-cosa*dc_norm(k,i)) &
15431 ! + ecosbm*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1)
15432 ! gacontm_hb2(k,num_conti,i)= & !ghalfm
15433 ! +(ecosam*(dc_norm(k,i)-cosa*dc_norm(k,j)) &
15434 ! + ecosgm*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1)
15435 ! gacontm_hb3(k,num_conti,i)=gggm(k)
15436 gacontp_hb1(k,num_conti,i)= & !ghalfp+
15437 (ecosap*(dc_norm(k,j)-cosa*dc_norm(k,i)) &
15438 + ecosbp*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1) &
15441 gacontp_hb2(k,num_conti,i)= & !ghalfp+
15442 (ecosap*(dc_norm(k,i)-cosa*dc_norm(k,j)) &
15443 + ecosgp*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1)&
15446 gacontp_hb3(k,num_conti,i)=gggp(k) &
15449 gacontm_hb1(k,num_conti,i)= & !ghalfm+
15450 (ecosam*(dc_norm(k,j)-cosa*dc_norm(k,i)) &
15451 + ecosbm*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1) &
15454 gacontm_hb2(k,num_conti,i)= & !ghalfm+
15455 (ecosam*(dc_norm(k,i)-cosa*dc_norm(k,j)) &
15456 + ecosgm*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1) &
15459 gacontm_hb3(k,num_conti,i)=gggm(k) &
15464 endif ! num_conti.le.maxconts
15467 if (wturn3.gt.0.0d0 .or. wturn4.gt.0.0d0) then
15470 ghalf=0.5d0*agg(l,k)
15471 aggi(l,k)=aggi(l,k)+ghalf
15472 aggi1(l,k)=aggi1(l,k)+agg(l,k)
15473 aggj(l,k)=aggj(l,k)+ghalf
15476 if (j.eq.nres-1 .and. i.lt.j-2) then
15479 aggj1(l,k)=aggj1(l,k)+agg(l,k)
15485 ! t_eelecij=t_eelecij+MPI_Wtime()-time00
15487 end subroutine eelecij_scale
15488 !-----------------------------------------------------------------------------
15489 subroutine evdwpp_short(evdw1)
15493 ! implicit real*8 (a-h,o-z)
15494 ! include 'DIMENSIONS'
15495 ! include 'COMMON.CONTROL'
15496 ! include 'COMMON.IOUNITS'
15497 ! include 'COMMON.GEO'
15498 ! include 'COMMON.VAR'
15499 ! include 'COMMON.LOCAL'
15500 ! include 'COMMON.CHAIN'
15501 ! include 'COMMON.DERIV'
15502 ! include 'COMMON.INTERACT'
15503 ! include 'COMMON.CONTACTS'
15504 ! include 'COMMON.TORSION'
15505 ! include 'COMMON.VECTORS'
15506 ! include 'COMMON.FFIELD'
15507 real(kind=8),dimension(3) :: ggg
15508 ! 4/26/02 - AL scaling factor for 1,4 repulsive VDW interactions
15510 real(kind=8) :: scal_el=1.0d0
15512 real(kind=8) :: scal_el=0.5d0
15514 !el local variables
15515 integer :: i,j,k,iteli,itelj,num_conti,isubchap
15516 real(kind=8) :: dxi,dyi,dzi,dxj,dyj,dzj,aaa,bbb
15517 real(kind=8) :: xj,yj,zj,rij,rrmij,sss,r3ij,r6ij,evdw1,&
15518 dx_normi,dy_normi,dz_normi,xmedi,ymedi,zmedi,&
15519 dx_normj,dy_normj,dz_normj,rmij,ev1,ev2,evdwij,facvdw
15520 real(kind=8) :: xj_safe,yj_safe,zj_safe,xj_temp,yj_temp,zj_temp,&
15521 dist_temp, dist_init,sss_grad,sslipi,ssgradlipi,&
15522 sslipj,ssgradlipj,faclipij2
15523 integer xshift,yshift,zshift
15527 ! write (iout,*) "iatel_s_vdw",iatel_s_vdw,
15528 ! & " iatel_e_vdw",iatel_e_vdw
15530 do i=iatel_s_vdw,iatel_e_vdw
15531 if (itype(i,1).eq.ntyp1.or. itype(i+1,1).eq.ntyp1) cycle
15535 dx_normi=dc_norm(1,i)
15536 dy_normi=dc_norm(2,i)
15537 dz_normi=dc_norm(3,i)
15538 xmedi=c(1,i)+0.5d0*dxi
15539 ymedi=c(2,i)+0.5d0*dyi
15540 zmedi=c(3,i)+0.5d0*dzi
15541 call to_box(xmedi,ymedi,zmedi)
15542 call lipid_layer(xmedi,ymedi,zmedi,sslipi,ssgradlipi)
15544 ! write (iout,*) 'i',i,' ielstart',ielstart_vdw(i),
15545 ! & ' ielend',ielend_vdw(i)
15547 do j=ielstart_vdw(i),ielend_vdw(i)
15548 if (itype(j,1).eq.ntyp1 .or. itype(j+1,1).eq.ntyp1) cycle
15552 if (j.eq.i+2 .and. itelj.eq.2) iteli=2
15553 aaa=app(iteli,itelj)
15554 bbb=bpp(iteli,itelj)
15558 dx_normj=dc_norm(1,j)
15559 dy_normj=dc_norm(2,j)
15560 dz_normj=dc_norm(3,j)
15561 ! xj=c(1,j)+0.5D0*dxj-xmedi
15562 ! yj=c(2,j)+0.5D0*dyj-ymedi
15563 ! zj=c(3,j)+0.5D0*dzj-zmedi
15564 xj=c(1,j)+0.5D0*dxj
15565 yj=c(2,j)+0.5D0*dyj
15566 zj=c(3,j)+0.5D0*dzj
15567 call to_box(xj,yj,zj)
15568 call lipid_layer(xj,yj,zj,sslipj,ssgradlipj)
15569 faclipij2=(sslipi+sslipj)/2.0d0*lipscale**2+1.0d0
15570 xj=boxshift(xj-xmedi,boxxsize)
15571 yj=boxshift(yj-ymedi,boxysize)
15572 zj=boxshift(zj-zmedi,boxzsize)
15573 rij=xj*xj+yj*yj+zj*zj
15576 sss=sscale(rij/rpp(iteli,itelj))
15577 sss_ele_cut=sscale_ele(rij)
15578 sss_ele_grad=sscagrad_ele(rij)
15579 sss_grad=sscale_grad((rij/rpp(iteli,itelj)))
15580 if (sss_ele_cut.le.0.0) cycle
15581 if (sss.gt.0.0d0) then
15586 ! 4/26/02 - AL scaling down 1,4 repulsive VDW interactions
15587 if (j.eq.i+2) ev1=scal_el*ev1
15590 if (energy_dec) then
15591 write (iout,'(a6,2i5,0pf7.3,f7.3)') 'evdw1',i,j,evdwij,sss
15593 evdw1=evdw1+evdwij*sss*sss_ele_cut
15595 ! Calculate contributions to the Cartesian gradient.
15597 facvdw=-6*rrmij*(ev1+evdwij)*sss*sss_ele_cut
15601 ggg(1)=facvdw*xj+sss_ele_grad*rmij*evdwij*xj*sss &
15602 +evdwij*sss_ele_cut/rij*sss_grad/rpp(iteli,itelj)*xj
15603 ggg(2)=facvdw*yj+sss_ele_grad*rmij*evdwij*yj*sss &
15604 +evdwij*sss_ele_cut/rij*sss_grad/rpp(iteli,itelj)*yj
15605 ggg(3)=facvdw*zj+sss_ele_grad*rmij*evdwij*zj*sss &
15606 +evdwij*sss_ele_cut/rij*sss_grad/rpp(iteli,itelj)*zj
15609 gvdwpp(k,j)=gvdwpp(k,j)+ggg(k)
15610 gvdwpp(k,i)=gvdwpp(k,i)-ggg(k)
15616 end subroutine evdwpp_short
15617 !-----------------------------------------------------------------------------
15618 subroutine escp_long(evdw2,evdw2_14)
15620 ! This subroutine calculates the excluded-volume interaction energy between
15621 ! peptide-group centers and side chains and its gradient in virtual-bond and
15622 ! side-chain vectors.
15624 ! implicit real*8 (a-h,o-z)
15625 ! include 'DIMENSIONS'
15626 ! include 'COMMON.GEO'
15627 ! include 'COMMON.VAR'
15628 ! include 'COMMON.LOCAL'
15629 ! include 'COMMON.CHAIN'
15630 ! include 'COMMON.DERIV'
15631 ! include 'COMMON.INTERACT'
15632 ! include 'COMMON.FFIELD'
15633 ! include 'COMMON.IOUNITS'
15634 ! include 'COMMON.CONTROL'
15635 real(kind=8),dimension(3) :: ggg
15636 !el local variables
15637 integer :: i,iint,j,k,iteli,itypj,subchap
15638 real(kind=8) :: xi,yi,zi,xj,yj,zj,rrij,sss,fac,e1,e2,sss_grad,rij
15639 real(kind=8) :: evdw2,evdw2_14,evdwij
15640 real(kind=8) :: xj_safe,yj_safe,zj_safe,xj_temp,yj_temp,zj_temp,&
15641 dist_temp, dist_init
15645 !d print '(a)','Enter ESCP'
15646 !d write (iout,*) 'iatscp_s=',iatscp_s,' iatscp_e=',iatscp_e
15647 do i=iatscp_s,iatscp_e
15648 if (itype(i,1).eq.ntyp1 .or. itype(i+1,1).eq.ntyp1) cycle
15650 xi=0.5D0*(c(1,i)+c(1,i+1))
15651 yi=0.5D0*(c(2,i)+c(2,i+1))
15652 zi=0.5D0*(c(3,i)+c(3,i+1))
15653 call to_box(xi,yi,zi)
15654 do iint=1,nscp_gr(i)
15656 do j=iscpstart(i,iint),iscpend(i,iint)
15658 if (itypj.eq.ntyp1) cycle
15659 ! Uncomment following three lines for SC-p interactions
15660 ! xj=c(1,nres+j)-xi
15661 ! yj=c(2,nres+j)-yi
15662 ! zj=c(3,nres+j)-zi
15663 ! Uncomment following three lines for Ca-p interactions
15667 call to_box(xj,yj,zj)
15668 xj=boxshift(xj-xi,boxxsize)
15669 yj=boxshift(yj-yi,boxysize)
15670 zj=boxshift(zj-zi,boxzsize)
15671 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
15673 rij=dsqrt(1.0d0/rrij)
15674 sss_ele_cut=sscale_ele(rij)
15675 sss_ele_grad=sscagrad_ele(rij)
15676 ! print *,sss_ele_cut,sss_ele_grad,&
15677 ! (rij),r_cut_ele,rlamb_ele
15678 if (sss_ele_cut.le.0.0) cycle
15679 sss=sscale((rij/rscp(itypj,iteli)))
15680 sss_grad=sscale_grad(rij/rscp(itypj,iteli))
15681 if (sss.lt.1.0d0) then
15684 e1=fac*fac*aad(itypj,iteli)
15685 e2=fac*bad(itypj,iteli)
15686 if (iabs(j-i) .le. 2) then
15689 evdw2_14=evdw2_14+(e1+e2)*(1.0d0-sss)*sss_ele_cut
15692 evdw2=evdw2+evdwij*(1.0d0-sss)*sss_ele_cut
15693 if (energy_dec) write (iout,'(a6,2i5,2(0pf7.3))') &
15694 'evdw2',i,j,sss,evdwij
15696 ! Calculate contributions to the gradient in the virtual-bond and SC vectors.
15698 fac=-(evdwij+e1)*rrij*(1.0d0-sss)*sss_ele_cut
15699 fac=fac+evdwij*sss_ele_grad/rij/expon*(1.0d0-sss)&
15700 -evdwij*sss_ele_cut/rij/expon*sss_grad/rscp(itypj,iteli)
15704 ! Uncomment following three lines for SC-p interactions
15706 ! gradx_scp(k,j)=gradx_scp(k,j)+ggg(k)
15708 ! Uncomment following line for SC-p interactions
15709 ! gradx_scp(k,j)=gradx_scp(k,j)+ggg(k)
15711 gvdwc_scpp(k,i)=gvdwc_scpp(k,i)-ggg(k)
15712 gvdwc_scp(k,j)=gvdwc_scp(k,j)+ggg(k)
15721 gvdwc_scp(j,i)=expon*gvdwc_scp(j,i)
15722 gvdwc_scpp(j,i)=expon*gvdwc_scpp(j,i)
15723 gradx_scp(j,i)=expon*gradx_scp(j,i)
15726 !******************************************************************************
15730 ! To save time the factor EXPON has been extracted from ALL components
15731 ! of GVDWC and GRADX. Remember to multiply them by this factor before further
15734 !******************************************************************************
15736 end subroutine escp_long
15737 !-----------------------------------------------------------------------------
15738 subroutine escp_short(evdw2,evdw2_14)
15740 ! This subroutine calculates the excluded-volume interaction energy between
15741 ! peptide-group centers and side chains and its gradient in virtual-bond and
15742 ! side-chain vectors.
15744 ! implicit real*8 (a-h,o-z)
15745 ! include 'DIMENSIONS'
15746 ! include 'COMMON.GEO'
15747 ! include 'COMMON.VAR'
15748 ! include 'COMMON.LOCAL'
15749 ! include 'COMMON.CHAIN'
15750 ! include 'COMMON.DERIV'
15751 ! include 'COMMON.INTERACT'
15752 ! include 'COMMON.FFIELD'
15753 ! include 'COMMON.IOUNITS'
15754 ! include 'COMMON.CONTROL'
15755 real(kind=8),dimension(3) :: ggg
15756 !el local variables
15757 integer :: i,iint,j,k,iteli,itypj,subchap
15758 real(kind=8) :: xi,yi,zi,xj,yj,zj,rrij,sss,fac,e1,e2,sss_grad,rij
15759 real(kind=8) :: evdw2,evdw2_14,evdwij
15760 real(kind=8) :: xj_safe,yj_safe,zj_safe,xj_temp,yj_temp,zj_temp,&
15761 dist_temp, dist_init
15765 !d print '(a)','Enter ESCP'
15766 !d write (iout,*) 'iatscp_s=',iatscp_s,' iatscp_e=',iatscp_e
15767 do i=iatscp_s,iatscp_e
15768 if (itype(i,1).eq.ntyp1 .or. itype(i+1,1).eq.ntyp1) cycle
15770 xi=0.5D0*(c(1,i)+c(1,i+1))
15771 yi=0.5D0*(c(2,i)+c(2,i+1))
15772 zi=0.5D0*(c(3,i)+c(3,i+1))
15773 call to_box(xi,yi,zi)
15774 if (zi.lt.0) zi=zi+boxzsize
15776 do iint=1,nscp_gr(i)
15778 do j=iscpstart(i,iint),iscpend(i,iint)
15780 if (itypj.eq.ntyp1) cycle
15781 ! Uncomment following three lines for SC-p interactions
15782 ! xj=c(1,nres+j)-xi
15783 ! yj=c(2,nres+j)-yi
15784 ! zj=c(3,nres+j)-zi
15785 ! Uncomment following three lines for Ca-p interactions
15792 call to_box(xj,yj,zj)
15793 xj=boxshift(xj-xi,boxxsize)
15794 yj=boxshift(yj-yi,boxysize)
15795 zj=boxshift(zj-zi,boxzsize)
15796 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
15797 rij=dsqrt(1.0d0/rrij)
15798 sss_ele_cut=sscale_ele(rij)
15799 sss_ele_grad=sscagrad_ele(rij)
15800 ! print *,sss_ele_cut,sss_ele_grad,&
15801 ! (rij),r_cut_ele,rlamb_ele
15802 if (sss_ele_cut.le.0.0) cycle
15803 sss=sscale(rij/rscp(itypj,iteli))
15804 sss_grad=sscale_grad(rij/rscp(itypj,iteli))
15805 if (sss.gt.0.0d0) then
15808 e1=fac*fac*aad(itypj,iteli)
15809 e2=fac*bad(itypj,iteli)
15810 if (iabs(j-i) .le. 2) then
15813 evdw2_14=evdw2_14+(e1+e2)*sss*sss_ele_cut
15816 evdw2=evdw2+evdwij*sss*sss_ele_cut
15817 if (energy_dec) write (iout,'(a6,2i5,2(0pf7.3))') &
15818 'evdw2',i,j,sss,evdwij
15820 ! Calculate contributions to the gradient in the virtual-bond and SC vectors.
15822 fac=-(evdwij+e1)*rrij*sss*sss_ele_cut
15823 fac=fac+evdwij*sss_ele_grad/rij/expon*sss &
15824 +evdwij*sss_ele_cut/rij/expon*sss_grad/rscp(itypj,iteli)
15829 ! Uncomment following three lines for SC-p interactions
15831 ! gradx_scp(k,j)=gradx_scp(k,j)+ggg(k)
15833 ! Uncomment following line for SC-p interactions
15834 ! gradx_scp(k,j)=gradx_scp(k,j)+ggg(k)
15836 gvdwc_scpp(k,i)=gvdwc_scpp(k,i)-ggg(k)
15837 gvdwc_scp(k,j)=gvdwc_scp(k,j)+ggg(k)
15846 gvdwc_scp(j,i)=expon*gvdwc_scp(j,i)
15847 gvdwc_scpp(j,i)=expon*gvdwc_scpp(j,i)
15848 gradx_scp(j,i)=expon*gradx_scp(j,i)
15851 !******************************************************************************
15855 ! To save time the factor EXPON has been extracted from ALL components
15856 ! of GVDWC and GRADX. Remember to multiply them by this factor before further
15859 !******************************************************************************
15861 end subroutine escp_short
15862 !-----------------------------------------------------------------------------
15863 ! energy_p_new-sep_barrier.F
15864 !-----------------------------------------------------------------------------
15865 subroutine sc_grad_scale(scalfac)
15866 ! implicit real*8 (a-h,o-z)
15868 ! include 'DIMENSIONS'
15869 ! include 'COMMON.CHAIN'
15870 ! include 'COMMON.DERIV'
15871 ! include 'COMMON.CALC'
15872 ! include 'COMMON.IOUNITS'
15873 real(kind=8),dimension(3) :: dcosom1,dcosom2
15874 real(kind=8) :: scalfac
15875 !el local variables
15876 ! integer :: i,j,k,l
15878 eom1=eps2der*eps2rt_om1-2.0D0*alf1*eps3der+sigder*sigsq_om1
15879 eom2=eps2der*eps2rt_om2+2.0D0*alf2*eps3der+sigder*sigsq_om2
15880 eom12=evdwij*eps1_om12+eps2der*eps2rt_om12 &
15881 -2.0D0*alf12*eps3der+sigder*sigsq_om12
15885 ! eom12=evdwij*eps1_om12
15887 ! write (iout,*) "eps2der",eps2der," eps3der",eps3der,
15888 ! & " sigder",sigder
15889 ! write (iout,*) "eps1_om12",eps1_om12," eps2rt_om12",eps2rt_om12
15890 ! write (iout,*) "eom1",eom1," eom2",eom2," eom12",eom12
15892 dcosom1(k)=rij*(dc_norm(k,nres+i)-om1*erij(k))
15893 dcosom2(k)=rij*(dc_norm(k,nres+j)-om2*erij(k))
15896 gg(k)=(gg(k)+eom1*dcosom1(k)+eom2*dcosom2(k))*scalfac&
15899 ! write (iout,*) "gg",(gg(k),k=1,3)
15901 gvdwx(k,i)=gvdwx(k,i)-gg(k) &
15902 +(eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,nres+i)) &
15903 +eom1*(erij(k)-om1*dc_norm(k,nres+i)))*dsci_inv*scalfac&
15905 gvdwx(k,j)=gvdwx(k,j)+gg(k) &
15906 +(eom12*(dc_norm(k,nres+i)-om12*dc_norm(k,nres+j)) &
15907 +eom2*(erij(k)-om2*dc_norm(k,nres+j)))*dscj_inv*scalfac&
15909 ! write (iout,*)(eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,nres+i))
15910 ! & +eom1*(erij(k)-om1*dc_norm(k,nres+i)))*dsci_inv
15911 ! write (iout,*)(eom12*(dc_norm(k,nres+i)-om12*dc_norm(k,nres+j))
15912 ! & +eom2*(erij(k)-om2*dc_norm(k,nres+j)))*dscj_inv
15915 ! Calculate the components of the gradient in DC and X
15918 gvdwc(l,i)=gvdwc(l,i)-gg(l)
15919 gvdwc(l,j)=gvdwc(l,j)+gg(l)
15922 end subroutine sc_grad_scale
15923 !-----------------------------------------------------------------------------
15924 ! energy_split-sep.F
15925 !-----------------------------------------------------------------------------
15926 subroutine etotal_long(energia)
15928 ! Compute the long-range slow-varying contributions to the energy
15930 ! implicit real*8 (a-h,o-z)
15931 ! include 'DIMENSIONS'
15932 use MD_data, only: totT,usampl,eq_time
15936 !MS$ATTRIBUTES C :: proc_proc
15941 real(kind=8),dimension(n_ene) :: weights_!,time_Bcast,time_Bcastw
15943 ! include 'COMMON.SETUP'
15944 ! include 'COMMON.IOUNITS'
15945 ! include 'COMMON.FFIELD'
15946 ! include 'COMMON.DERIV'
15947 ! include 'COMMON.INTERACT'
15948 ! include 'COMMON.SBRIDGE'
15949 ! include 'COMMON.CHAIN'
15950 ! include 'COMMON.VAR'
15951 ! include 'COMMON.LOCAL'
15952 ! include 'COMMON.MD'
15953 real(kind=8),dimension(0:n_ene) :: energia
15954 !el local variables
15955 integer :: i,n_corr,n_corr1,ierror,ierr
15956 real(kind=8) :: evdw2,evdw2_14,ehpb,etors,edihcnstr,etors_d,esccor,&
15957 evdw,ees,evdw1,eel_loc,eello_turn3,eello_turn4,&
15958 ecorr,ecorr5,ecorr6,eturn6,time00
15959 ! write(iout,'(a,i2)')'Calling etotal_long ipot=',ipot
15960 !elwrite(iout,*)"in etotal long"
15962 if (modecalc.eq.12.or.modecalc.eq.14) then
15964 ! if (fg_rank.eq.0) call int_from_cart1(.false.)
15966 call int_from_cart1(.false.)
15969 !elwrite(iout,*)"in etotal long"
15972 ! write(iout,*) "ETOTAL_LONG Processor",fg_rank,
15973 ! & " absolute rank",myrank," nfgtasks",nfgtasks
15975 if (nfgtasks.gt.1) then
15977 ! FG slaves call the following matching MPI_Bcast in ERGASTULUM
15978 if (fg_rank.eq.0) then
15979 call MPI_Bcast(3,1,MPI_INTEGER,king,FG_COMM,IERROR)
15980 ! write (iout,*) "Processor",myrank," BROADCAST iorder"
15982 ! FG master sets up the WEIGHTS_ array which will be broadcast to the
15983 ! FG slaves as WEIGHTS array.
15990 weights_(7)=wel_loc
15993 weights_(10)=wturn6
15995 weights_(12)=wscloc
15997 weights_(14)=wtor_d
15998 weights_(15)=wstrain
15999 weights_(16)=wvdwpp
16001 weights_(18)=scal14
16002 weights_(21)=wsccor
16003 ! FG Master broadcasts the WEIGHTS_ array
16004 call MPI_Bcast(weights_(1),n_ene,&
16005 MPI_DOUBLE_PRECISION,king,FG_COMM,IERROR)
16007 ! FG slaves receive the WEIGHTS array
16008 call MPI_Bcast(weights(1),n_ene,&
16009 MPI_DOUBLE_PRECISION,king,FG_COMM,IERROR)
16024 wstrain=weights(15)
16030 call MPI_Bcast(dc(1,1),6*nres,MPI_DOUBLE_PRECISION,&
16032 time_Bcast=time_Bcast+MPI_Wtime()-time00
16033 time_Bcastw=time_Bcastw+MPI_Wtime()-time00
16034 ! call chainbuild_cart
16035 ! call int_from_cart1(.false.)
16037 ! write (iout,*) 'Processor',myrank,
16038 ! & ' calling etotal_short ipot=',ipot
16040 ! print *,'Processor',myrank,' nnt=',nnt,' nct=',nct
16042 !d print *,'nnt=',nnt,' nct=',nct
16044 !elwrite(iout,*)"in etotal long"
16045 ! Compute the side-chain and electrostatic interaction energy
16047 goto (101,102,103,104,105,106) ipot
16048 ! Lennard-Jones potential.
16049 101 call elj_long(evdw)
16050 !d print '(a)','Exit ELJ'
16052 ! Lennard-Jones-Kihara potential (shifted).
16053 102 call eljk_long(evdw)
16055 ! Berne-Pechukas potential (dilated LJ, angular dependence).
16056 103 call ebp_long(evdw)
16058 ! Gay-Berne potential (shifted LJ, angular dependence).
16059 104 call egb_long(evdw)
16061 ! Gay-Berne-Vorobjev potential (shifted LJ, angular dependence).
16062 105 call egbv_long(evdw)
16064 ! Soft-sphere potential
16065 106 call e_softsphere(evdw)
16067 ! Calculate electrostatic (H-bonding) energy of the main chain.
16071 if (ipot.lt.6) then
16073 if (welec.gt.0d0.or.wvdwpp.gt.0d0.or.wel_loc.gt.0d0.or. &
16074 wturn3.gt.0d0.or.wturn4.gt.0d0 .or. wcorr.gt.0.0d0 &
16075 .or. wcorr4.gt.0.0d0 .or. wcorr5.gt.0.d0 &
16076 .or. wcorr6.gt.0.0d0 .or. wturn6.gt.0.0d0 ) then
16078 if (welec.gt.0d0.or.wel_loc.gt.0d0.or. &
16079 wturn3.gt.0d0.or.wturn4.gt.0d0 .or. wcorr.gt.0.0d0 &
16080 .or. wcorr4.gt.0.0d0 .or. wcorr5.gt.0.d0 &
16081 .or. wcorr6.gt.0.0d0 .or. wturn6.gt.0.0d0 ) then
16083 call eelec_scale(ees,evdw1,eel_loc,eello_turn3,eello_turn4)
16092 ! write (iout,*) "Soft-spheer ELEC potential"
16093 call eelec_soft_sphere(ees,evdw1,eel_loc,eello_turn3,&
16097 ! Calculate excluded-volume interaction energy between peptide groups
16100 if (ipot.lt.6) then
16101 if(wscp.gt.0d0) then
16102 call escp_long(evdw2,evdw2_14)
16108 call escp_soft_sphere(evdw2,evdw2_14)
16111 ! 12/1/95 Multi-body terms
16115 if ((wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0 &
16116 .or. wturn6.gt.0.0d0) .and. ipot.lt.6) then
16117 call multibody_eello(ecorr,ecorr5,ecorr6,eturn6,n_corr,n_corr1)
16118 ! write (2,*) 'n_corr=',n_corr,' n_corr1=',n_corr1,
16119 ! &" ecorr",ecorr," ecorr5",ecorr5," ecorr6",ecorr6," eturn6",eturn6
16126 if ((wcorr4.eq.0.0d0 .and. wcorr.gt.0.0d0) .and. ipot.lt.6) then
16127 call multibody_hb(ecorr,ecorr5,ecorr6,n_corr,n_corr1)
16130 ! If performing constraint dynamics, call the constraint energy
16131 ! after the equilibration time
16132 if(usampl.and.totT.gt.eq_time) then
16147 energia(2)=evdw2-evdw2_14
16148 energia(18)=evdw2_14
16157 energia(3)=ees+evdw1
16164 energia(8)=eello_turn3
16165 energia(9)=eello_turn4
16167 energia(20)=Uconst+Uconst_back
16168 call sum_energy(energia,.true.)
16169 ! write (iout,*) "Exit ETOTAL_LONG"
16172 end subroutine etotal_long
16173 !-----------------------------------------------------------------------------
16174 subroutine etotal_short(energia)
16176 ! Compute the short-range fast-varying contributions to the energy
16178 ! implicit real*8 (a-h,o-z)
16179 ! include 'DIMENSIONS'
16183 !MS$ATTRIBUTES C :: proc_proc
16188 integer :: ierror,ierr
16189 real(kind=8),dimension(n_ene) :: weights_
16190 real(kind=8) :: time00
16192 ! include 'COMMON.SETUP'
16193 ! include 'COMMON.IOUNITS'
16194 ! include 'COMMON.FFIELD'
16195 ! include 'COMMON.DERIV'
16196 ! include 'COMMON.INTERACT'
16197 ! include 'COMMON.SBRIDGE'
16198 ! include 'COMMON.CHAIN'
16199 ! include 'COMMON.VAR'
16200 ! include 'COMMON.LOCAL'
16201 real(kind=8),dimension(0:n_ene) :: energia
16202 !el local variables
16204 real(kind=8) :: evdw,evdw1,evdw2,evdw2_14,esccor,etors_d,etors
16205 real(kind=8) :: ehpb,escloc,estr,ebe,edihcnstr,ethetacnstr
16208 ! write(iout,'(a,i2)')'Calling etotal_short ipot=',ipot
16210 if (modecalc.eq.12.or.modecalc.eq.14) then
16212 if (fg_rank.eq.0) call int_from_cart1(.false.)
16214 call int_from_cart1(.false.)
16218 ! write(iout,*) "ETOTAL_SHORT Processor",fg_rank,
16219 ! & " absolute rank",myrank," nfgtasks",nfgtasks
16221 if (nfgtasks.gt.1) then
16223 ! FG slaves call the following matching MPI_Bcast in ERGASTULUM
16224 if (fg_rank.eq.0) then
16225 call MPI_Bcast(2,1,MPI_INTEGER,king,FG_COMM,IERROR)
16226 ! write (iout,*) "Processor",myrank," BROADCAST iorder"
16228 ! FG master sets up the WEIGHTS_ array which will be broadcast to the
16229 ! FG slaves as WEIGHTS array.
16236 weights_(7)=wel_loc
16239 weights_(10)=wturn6
16241 weights_(12)=wscloc
16243 weights_(14)=wtor_d
16244 weights_(15)=wstrain
16245 weights_(16)=wvdwpp
16247 weights_(18)=scal14
16248 weights_(21)=wsccor
16249 ! FG Master broadcasts the WEIGHTS_ array
16250 call MPI_Bcast(weights_(1),n_ene,&
16251 MPI_DOUBLE_PRECISION,king,FG_COMM,IERROR)
16253 ! FG slaves receive the WEIGHTS array
16254 call MPI_Bcast(weights(1),n_ene,&
16255 MPI_DOUBLE_PRECISION,king,FG_COMM,IERROR)
16270 wstrain=weights(15)
16276 ! write (iout,*),"Processor",myrank," BROADCAST weights"
16277 call MPI_Bcast(c(1,1),nres6,MPI_DOUBLE_PRECISION,&
16279 ! write (iout,*) "Processor",myrank," BROADCAST c"
16280 call MPI_Bcast(dc(1,1),nres6,MPI_DOUBLE_PRECISION,&
16282 ! write (iout,*) "Processor",myrank," BROADCAST dc"
16283 call MPI_Bcast(dc_norm(1,1),nres6,MPI_DOUBLE_PRECISION,&
16285 ! write (iout,*) "Processor",myrank," BROADCAST dc_norm"
16286 call MPI_Bcast(theta(1),nres,MPI_DOUBLE_PRECISION,&
16288 ! write (iout,*) "Processor",myrank," BROADCAST theta"
16289 call MPI_Bcast(phi(1),nres,MPI_DOUBLE_PRECISION,&
16291 ! write (iout,*) "Processor",myrank," BROADCAST phi"
16292 call MPI_Bcast(alph(1),nres,MPI_DOUBLE_PRECISION,&
16294 ! write (iout,*) "Processor",myrank," BROADCAST alph"
16295 call MPI_Bcast(omeg(1),nres,MPI_DOUBLE_PRECISION,&
16297 ! write (iout,*) "Processor",myrank," BROADCAST omeg"
16298 call MPI_Bcast(vbld(1),2*nres,MPI_DOUBLE_PRECISION,&
16300 ! write (iout,*) "Processor",myrank," BROADCAST vbld"
16301 call MPI_Bcast(vbld_inv(1),2*nres,MPI_DOUBLE_PRECISION,&
16303 time_Bcast=time_Bcast+MPI_Wtime()-time00
16304 ! write (iout,*) "Processor",myrank," BROADCAST vbld_inv"
16306 ! write (iout,*) 'Processor',myrank,
16307 ! & ' calling etotal_short ipot=',ipot
16309 ! print *,'Processor',myrank,' nnt=',nnt,' nct=',nct
16311 ! call int_from_cart1(.false.)
16313 ! Compute the side-chain and electrostatic interaction energy
16315 goto (101,102,103,104,105,106) ipot
16316 ! Lennard-Jones potential.
16317 101 call elj_short(evdw)
16318 !d print '(a)','Exit ELJ'
16320 ! Lennard-Jones-Kihara potential (shifted).
16321 102 call eljk_short(evdw)
16323 ! Berne-Pechukas potential (dilated LJ, angular dependence).
16324 103 call ebp_short(evdw)
16326 ! Gay-Berne potential (shifted LJ, angular dependence).
16327 104 call egb_short(evdw)
16329 ! Gay-Berne-Vorobjev potential (shifted LJ, angular dependence).
16330 105 call egbv_short(evdw)
16332 ! Soft-sphere potential - already dealt with in the long-range part
16334 ! 106 call e_softsphere_short(evdw)
16336 ! Calculate electrostatic (H-bonding) energy of the main chain.
16340 ! Calculate the short-range part of Evdwpp
16342 call evdwpp_short(evdw1)
16344 ! Calculate the short-range part of ESCp
16346 if (ipot.lt.6) then
16347 call escp_short(evdw2,evdw2_14)
16350 ! Calculate the bond-stretching energy
16354 ! Calculate the disulfide-bridge and other energy and the contributions
16355 ! from other distance constraints.
16358 ! Calculate the virtual-bond-angle energy.
16360 ! Calculate the SC local energy.
16365 if (wang.gt.0d0) then
16366 if (tor_mode.eq.0) then
16369 !C ebend kcc is Kubo cumulant clustered rigorous attemp to derive the
16371 call ebend_kcc(ebe)
16377 if (with_theta_constr) call etheta_constr(ethetacnstr)
16379 ! write(iout,*) "in etotal afer ebe",ipot
16381 ! print *,"Processor",myrank," computed UB"
16383 ! Calculate the SC local energy.
16386 !elwrite(iout,*) "in etotal afer esc",ipot
16387 ! print *,"Processor",myrank," computed USC"
16389 ! Calculate the virtual-bond torsional energy.
16391 !d print *,'nterm=',nterm
16392 ! if (wtor.gt.0) then
16393 ! call etor(etors,edihcnstr)
16398 if (wtor.gt.0.0d0) then
16399 if (tor_mode.eq.0) then
16402 !C etor kcc is Kubo cumulant clustered rigorous attemp to derive the
16404 call etor_kcc(etors)
16410 if (ndih_constr.gt.0) call etor_constr(edihcnstr)
16412 ! Calculate the virtual-bond torsional energy.
16415 ! 6/23/01 Calculate double-torsional energy
16417 if ((wtor_d.gt.0.0d0).and.(tor_mode.eq.0)) then
16418 call etor_d(etors_d)
16421 ! 21/5/07 Calculate local sicdechain correlation energy
16423 if (wsccor.gt.0.0d0) then
16424 call eback_sc_corr(esccor)
16429 ! Put energy components into an array
16436 energia(2)=evdw2-evdw2_14
16437 energia(18)=evdw2_14
16450 energia(14)=etors_d
16453 energia(19)=edihcnstr
16455 ! write (iout,*) "ETOTAL_SHORT before SUM_ENERGY"
16457 call sum_energy(energia,.true.)
16458 ! write (iout,*) "Exit ETOTAL_SHORT"
16461 end subroutine etotal_short
16462 !-----------------------------------------------------------------------------
16464 !-----------------------------------------------------------------------------
16465 real(kind=8) function gnmr1(y,ymin,ymax)
16467 real(kind=8) :: y,ymin,ymax
16468 real(kind=8) :: wykl=4.0d0
16469 if (y.lt.ymin) then
16470 gnmr1=(ymin-y)**wykl/wykl
16471 else if (y.gt.ymax) then
16472 gnmr1=(y-ymax)**wykl/wykl
16478 !-----------------------------------------------------------------------------
16479 real(kind=8) function gnmr1prim(y,ymin,ymax)
16481 real(kind=8) :: y,ymin,ymax
16482 real(kind=8) :: wykl=4.0d0
16483 if (y.lt.ymin) then
16484 gnmr1prim=-(ymin-y)**(wykl-1)
16485 else if (y.gt.ymax) then
16486 gnmr1prim=(y-ymax)**(wykl-1)
16491 end function gnmr1prim
16492 !----------------------------------------------------------------------------
16493 real(kind=8) function rlornmr1(y,ymin,ymax,sigma)
16494 real(kind=8) y,ymin,ymax,sigma
16495 real(kind=8) wykl /4.0d0/
16496 if (y.lt.ymin) then
16497 rlornmr1=(ymin-y)**wykl/((ymin-y)**wykl+sigma**wykl)
16498 else if (y.gt.ymax) then
16499 rlornmr1=(y-ymax)**wykl/((y-ymax)**wykl+sigma**wykl)
16504 end function rlornmr1
16505 !------------------------------------------------------------------------------
16506 real(kind=8) function rlornmr1prim(y,ymin,ymax,sigma)
16507 real(kind=8) y,ymin,ymax,sigma
16508 real(kind=8) wykl /4.0d0/
16509 if (y.lt.ymin) then
16510 rlornmr1prim=-(ymin-y)**(wykl-1)*sigma**wykl*wykl/ &
16511 ((ymin-y)**wykl+sigma**wykl)**2
16512 else if (y.gt.ymax) then
16513 rlornmr1prim=(y-ymax)**(wykl-1)*sigma**wykl*wykl/ &
16514 ((y-ymax)**wykl+sigma**wykl)**2
16519 end function rlornmr1prim
16521 real(kind=8) function harmonic(y,ymax)
16523 real(kind=8) :: y,ymax
16524 real(kind=8) :: wykl=2.0d0
16525 harmonic=(y-ymax)**wykl
16527 end function harmonic
16528 !-----------------------------------------------------------------------------
16529 real(kind=8) function harmonicprim(y,ymax)
16530 real(kind=8) :: y,ymin,ymax
16531 real(kind=8) :: wykl=2.0d0
16532 harmonicprim=(y-ymax)*wykl
16534 end function harmonicprim
16535 !-----------------------------------------------------------------------------
16537 !-----------------------------------------------------------------------------
16538 subroutine gradient(n,x,nf,g,uiparm,urparm,ufparm)
16540 use io_base, only:intout,briefout
16541 ! implicit real*8 (a-h,o-z)
16542 ! include 'DIMENSIONS'
16543 ! include 'COMMON.CHAIN'
16544 ! include 'COMMON.DERIV'
16545 ! include 'COMMON.VAR'
16546 ! include 'COMMON.INTERACT'
16547 ! include 'COMMON.FFIELD'
16548 ! include 'COMMON.MD'
16549 ! include 'COMMON.IOUNITS'
16550 real(kind=8),external :: ufparm
16551 integer :: uiparm(1)
16552 real(kind=8) :: urparm(1)
16553 real(kind=8),dimension(6*nres) :: x,g !(maxvar) (maxvar=6*maxres)
16554 real(kind=8) :: f,gthetai,gphii,galphai,gomegai
16555 integer :: n,nf,ind,ind1,i,k,j
16557 ! This subroutine calculates total internal coordinate gradient.
16558 ! Depending on the number of function evaluations, either whole energy
16559 ! is evaluated beforehand, Cartesian coordinates and their derivatives in
16560 ! internal coordinates are reevaluated or only the cartesian-in-internal
16561 ! coordinate derivatives are evaluated. The subroutine was designed to work
16567 !d print *,'grad',nf,icg
16568 if (nf-nfl+1) 20,30,40
16569 20 call func(n,x,nf,f,uiparm,urparm,ufparm)
16570 ! write (iout,*) 'grad 20'
16571 if (nf.eq.0) return
16573 30 call var_to_geom(n,x)
16575 ! write (iout,*) 'grad 30'
16577 ! Evaluate the derivatives of virtual bond lengths and SC vectors in variables.
16580 ! write (iout,*) 'grad 40'
16581 ! print *,'GRADIENT: nnt=',nnt,' nct=',nct,' expon=',expon
16583 ! Convert the Cartesian gradient into internal-coordinate gradient.
16593 ! print *,'GRAD: i=',i,' jc=',j,' ind=',ind
16595 gthetai=gthetai+dcdv(k,ind)*gradc(k,j,icg)
16598 gphii=gphii+dcdv(k+3,ind)*gradc(k,j,icg)
16604 ! print *,'GRAD: i=',i,' jx=',j,' ind1=',ind1
16606 gthetai=gthetai+dxdv(k,ind1)*gradx(k,j,icg)
16607 gphii=gphii+dxdv(k+3,ind1)*gradx(k,j,icg)
16610 if (i.gt.1) g(i-1)=gphii
16611 if (n.gt.nphi) g(nphi+i)=gthetai
16613 if (n.le.nphi+ntheta) goto 10
16615 if (itype(i,1).ne.10) then
16619 galphai=galphai+dxds(k,i)*gradx(k,i,icg)
16622 gomegai=gomegai+dxds(k+3,i)*gradx(k,i,icg)
16624 g(ialph(i,1))=galphai
16625 g(ialph(i,1)+nside)=gomegai
16629 ! Add the components corresponding to local energy terms.
16633 !d write (iout,*) 'i=',i,'g=',g(i),' gloc=',gloc(i,icg)
16634 g(i)=g(i)+gloc(i,icg)
16636 ! Uncomment following three lines for diagnostics.
16638 !elwrite(iout,*) "in gradient after calling intout"
16639 !d call briefout(0,0.0d0)
16640 !d write (iout,'(i3,1pe15.5)') (k,g(k),k=1,n)
16642 end subroutine gradient
16643 !-----------------------------------------------------------------------------
16644 subroutine func(n,x,nf,f,uiparm,urparm,ufparm) !from minimize_p.F
16647 ! implicit real*8 (a-h,o-z)
16648 ! include 'DIMENSIONS'
16649 ! include 'COMMON.DERIV'
16650 ! include 'COMMON.IOUNITS'
16651 ! include 'COMMON.GEO'
16654 !el common /chuju/ jjj
16655 real(kind=8) :: energia(0:n_ene)
16656 integer :: uiparm(1)
16657 real(kind=8) :: urparm(1)
16659 real(kind=8),external :: ufparm
16660 real(kind=8),dimension(6*nres) :: x !(maxvar) (maxvar=6*maxres)
16661 ! if (jjj.gt.0) then
16662 ! write (iout,'(10f8.3)') (rad2deg*x(i),i=1,n)
16666 !d print *,'func',nf,nfl,icg
16667 call var_to_geom(n,x)
16670 !d write (iout,*) 'ETOTAL called from FUNC'
16671 call etotal(energia)
16674 ! if (jjj.gt.0) then
16675 ! write (iout,'(10f8.3)') (rad2deg*x(i),i=1,n)
16676 ! write (iout,*) 'f=',etot
16680 end subroutine func
16681 !-----------------------------------------------------------------------------
16682 subroutine cartgrad
16683 ! implicit real*8 (a-h,o-z)
16684 ! include 'DIMENSIONS'
16686 use MD_data, only: totT,usampl,eq_time
16690 ! include 'COMMON.CHAIN'
16691 ! include 'COMMON.DERIV'
16692 ! include 'COMMON.VAR'
16693 ! include 'COMMON.INTERACT'
16694 ! include 'COMMON.FFIELD'
16695 ! include 'COMMON.MD'
16696 ! include 'COMMON.IOUNITS'
16697 ! include 'COMMON.TIME1'
16700 real(kind=8) :: time00,time01
16702 ! This subrouting calculates total Cartesian coordinate gradient.
16703 ! The subroutine chainbuild_cart and energy MUST be called beforehand.
16706 #ifdef TIMINGtime01
16714 !el write (iout,*) "After sum_gradient"
16716 write (iout,*) "After sum_gradient"
16718 write (iout,*) i," gradc ",(gradc(j,i,icg),j=1,3)
16719 write (iout,*) i," gradx ",(gradx(j,i,icg),j=1,3)
16723 ! If performing constraint dynamics, add the gradients of the constraint energy
16724 if(usampl.and.totT.gt.eq_time) then
16727 gradc(j,i,icg)=gradc(j,i,icg)+dudconst(j,i)+duscdiff(j,i)
16728 gradx(j,i,icg)=gradx(j,i,icg)+dudxconst(j,i)+duscdiffx(j,i)
16732 gloc(i,icg)=gloc(i,icg)+dugamma(i)
16735 gloc(nphi+i,icg)=gloc(nphi+i,icg)+dutheta(i)
16738 !elwrite (iout,*) "After sum_gradient"
16743 !elwrite (iout,*) "After sum_gradient"
16745 time_intcartderiv=time_intcartderiv+MPI_Wtime()-time01
16747 ! call checkintcartgrad
16748 ! write(iout,*) 'calling int_to_cart'
16751 write (iout,*) "gcart, gxcart, gloc before int_to_cart"
16755 gcart(j,i)=gradc(j,i,icg)
16756 gxcart(j,i)=gradx(j,i,icg)
16757 ! if (i.le.2) print *,"gcart_one",gcart(j,i),gradc(j,i,icg)
16760 write (iout,'(i5,2(3f10.5,5x),f10.5)') i,(gcart(j,i),j=1,3),&
16761 (gxcart(j,i),j=1,3),gloc(i,icg)
16767 ! print *,"gcart_two",gxcart(2,2),gradx(2,2,icg)
16769 ! print *,"gcart_two",gxcart(2,2),gradx(2,2,icg)
16772 time_inttocart=time_inttocart+MPI_Wtime()-time01
16775 write (iout,*) "gcart and gxcart after int_to_cart"
16777 write (iout,'(i5,3f10.5,5x,3f10.5)') i,(gcart(j,i),j=1,3),&
16778 (gxcart(j,i),j=1,3)
16784 write (iout,*) "CARGRAD"
16788 gcart(j,i)=-gcart(j,i)+gcart(j,i-1)-gxcart(j,i)
16789 ! gcart_new(j,i)=-gcart(j,i)+gcart(j,i-1)-gxcart(j,i)
16791 ! write (iout,'(i5,3f10.5,5x,3f10.5,5x,3f10.5)') i,(gcart(j,i),j=1,3), &
16792 ! (gcart_new(j,i),j=1,3),(gxcart(j,i),j=1,3)
16794 ! Correction: dummy residues
16797 ! gcart_new(j,nnt)=gcart_new(j,nnt)+gcart_new(j,1)
16798 gcart(j,nnt)=gcart(j,nnt)+gcart(j,1)
16801 if (nct.lt.nres) then
16803 ! gcart_new(j,nct)=gcart_new(j,nct)+gcart_new(j,nres)
16804 gcart(j,nct)=gcart(j,nct)+gcart(j,nres)
16809 time_cartgrad=time_cartgrad+MPI_Wtime()-time00
16813 end subroutine cartgrad
16814 !-----------------------------------------------------------------------------
16815 subroutine zerograd
16816 ! implicit real*8 (a-h,o-z)
16817 ! include 'DIMENSIONS'
16818 ! include 'COMMON.DERIV'
16819 ! include 'COMMON.CHAIN'
16820 ! include 'COMMON.VAR'
16821 ! include 'COMMON.MD'
16822 ! include 'COMMON.SCCOR'
16824 !el local variables
16825 integer :: i,j,intertyp,k
16826 ! Initialize Cartesian-coordinate gradient
16828 ! if (.not.allocated(gradx)) allocate(gradx(3,nres,2)) !(3,maxres,2)
16829 ! if (.not.allocated(gradc)) allocate(gradc(3,nres,2)) !(3,maxres,2)
16831 ! allocate(gvdwx(3,nres),gvdwc(3,nres),gelc(3,nres),gelc_long(3,nres))
16832 ! allocate(gvdwpp(3,nres),gvdwc_scpp(3,nres),gradx_scp(3,nres))
16833 ! allocate(gvdwc_scp(3,nres),ghpbx(3,nres),ghpbc(3,nres))
16834 ! allocate(gradcorr_long(3,nres))
16835 ! allocate(gradcorr5_long(3,nres),gradcorr6_long(3,nres))
16836 ! allocate(gcorr6_turn_long(3,nres))
16837 ! allocate(gradcorr5(3,nres),gradcorr6(3,nres)) !(3,maxres)
16839 ! if (.not.allocated(gradcorr)) allocate(gradcorr(3,nres)) !(3,maxres)
16841 ! allocate(gel_loc(3,nres),gel_loc_long(3,nres),gcorr3_turn(3,nres))
16842 ! allocate(gcorr4_turn(3,nres),gcorr6_turn(3,nres))
16844 ! if (.not.allocated(gradb)) allocate(gradb(3,nres)) !(3,maxres)
16845 ! if (.not.allocated(gradbx)) allocate(gradbx(3,nres)) !(3,maxres)
16847 ! allocate(gsccorc(3,nres),gsccorx(3,nres)) !(3,maxres)
16848 ! allocate(gscloc(3,nres)) !(3,maxres)
16849 ! if (.not.allocated(gsclocx)) allocate(gsclocx(3,nres)) !(3,maxres)
16853 ! common /deriv_scloc/
16854 ! allocate(dXX_C1tab(3,nres),dYY_C1tab(3,nres),dZZ_C1tab(3,nres))
16855 ! allocate(dXX_Ctab(3,nres),dYY_Ctab(3,nres),dZZ_Ctab(3,nres))
16856 ! allocate(dXX_XYZtab(3,nres),dYY_XYZtab(3,nres),dZZ_XYZtab(3,nres)) !(3,maxres)
16858 ! allocate(jgrad_start(nres),jgrad_end(nres)) !(maxres)
16862 ! gradc(j,i,icg)=0.0d0
16863 ! gradx(j,i,icg)=0.0d0
16865 ! allocate(gloc_sc(3,nres,10)) !(3,0:maxres2,10)maxres2=2*maxres
16866 !elwrite(iout,*) "icg",icg
16870 gradx_scp(j,i)=0.0D0
16872 gvdwc_scp(j,i)=0.0D0
16873 gvdwc_scpp(j,i)=0.0d0
16875 gelc_long(j,i)=0.0D0
16880 gel_loc_long(j,i)=0.0d0
16883 gcorr3_turn(j,i)=0.0d0
16884 gcorr4_turn(j,i)=0.0d0
16885 gradcorr(j,i)=0.0d0
16886 gradcorr_long(j,i)=0.0d0
16887 gradcorr5_long(j,i)=0.0d0
16888 gradcorr6_long(j,i)=0.0d0
16889 gcorr6_turn_long(j,i)=0.0d0
16890 gradcorr5(j,i)=0.0d0
16891 gradcorr6(j,i)=0.0d0
16892 gcorr6_turn(j,i)=0.0d0
16895 gradc(j,i,icg)=0.0d0
16896 gradx(j,i,icg)=0.0d0
16899 gliptran(j,i)=0.0d0
16900 gliptranx(j,i)=0.0d0
16901 gliptranc(j,i)=0.0d0
16902 gshieldx(j,i)=0.0d0
16903 gshieldc(j,i)=0.0d0
16904 gshieldc_loc(j,i)=0.0d0
16905 gshieldx_ec(j,i)=0.0d0
16906 gshieldc_ec(j,i)=0.0d0
16907 gshieldc_loc_ec(j,i)=0.0d0
16908 gshieldx_t3(j,i)=0.0d0
16909 gshieldc_t3(j,i)=0.0d0
16910 gshieldc_loc_t3(j,i)=0.0d0
16911 gshieldx_t4(j,i)=0.0d0
16912 gshieldc_t4(j,i)=0.0d0
16913 gshieldc_loc_t4(j,i)=0.0d0
16914 gshieldx_ll(j,i)=0.0d0
16915 gshieldc_ll(j,i)=0.0d0
16916 gshieldc_loc_ll(j,i)=0.0d0
16918 gg_tube_sc(j,i)=0.0d0
16920 gradb_nucl(j,i)=0.0d0
16921 gradbx_nucl(j,i)=0.0d0
16922 gvdwpp_nucl(j,i)=0.0d0
16926 gvdwpsb1(j,i)=0.0d0
16930 gradcorr_nucl(j,i)=0.0d0
16931 gradcorr3_nucl(j,i)=0.0d0
16932 gradxorr_nucl(j,i)=0.0d0
16933 gradxorr3_nucl(j,i)=0.0d0
16937 gradpepcat(j,i)=0.0d0
16938 gradpepcatx(j,i)=0.0d0
16939 gradcatcat(j,i)=0.0d0
16940 gvdwx_scbase(j,i)=0.0d0
16941 gvdwc_scbase(j,i)=0.0d0
16942 gvdwx_pepbase(j,i)=0.0d0
16943 gvdwc_pepbase(j,i)=0.0d0
16944 gvdwx_scpho(j,i)=0.0d0
16945 gvdwc_scpho(j,i)=0.0d0
16946 gvdwc_peppho(j,i)=0.0d0
16947 gradnuclcatx(j,i)=0.0d0
16948 gradnuclcat(j,i)=0.0d0
16954 gloc_sc(intertyp,i,icg)=0.0d0
16963 grad_shield_side(k,j,i)=0.0d0
16964 grad_shield_loc(k,j,i)=0.0d0
16971 ! Initialize the gradient of local energy terms.
16973 ! allocate(gloc(4*nres,2)) !!(maxvar,2)(maxvar=6*maxres)
16974 ! if (.not.allocated(gel_loc_loc)) allocate(gel_loc_loc(nres)) !(maxvar)(maxvar=6*maxres)
16975 ! if (.not.allocated(gcorr_loc)) allocate(gcorr_loc(nres)) !(maxvar)(maxvar=6*maxres)
16976 ! allocate(g_corr5_loc(nres),g_corr6_loc(nres)) !(maxvar)(maxvar=6*maxres)
16977 ! allocate(gel_loc_turn3(nres))
16978 ! allocate(gel_loc_turn4(nres),gel_loc_turn6(nres)) !(maxvar)(maxvar=6*maxres)
16979 ! allocate(gsccor_loc(nres)) !(maxres)
16985 gel_loc_loc(i)=0.0d0
16987 g_corr5_loc(i)=0.0d0
16988 g_corr6_loc(i)=0.0d0
16989 gel_loc_turn3(i)=0.0d0
16990 gel_loc_turn4(i)=0.0d0
16991 gel_loc_turn6(i)=0.0d0
16992 gsccor_loc(i)=0.0d0
16994 ! initialize gcart and gxcart
16995 ! allocate(gcart(3,0:nres),gxcart(3,0:nres)) !(3,0:MAXRES)
17003 end subroutine zerograd
17004 !-----------------------------------------------------------------------------
17005 real(kind=8) function fdum()
17009 !-----------------------------------------------------------------------------
17011 !-----------------------------------------------------------------------------
17012 subroutine intcartderiv
17013 ! implicit real*8 (a-h,o-z)
17014 ! include 'DIMENSIONS'
17018 ! include 'COMMON.SETUP'
17019 ! include 'COMMON.CHAIN'
17020 ! include 'COMMON.VAR'
17021 ! include 'COMMON.GEO'
17022 ! include 'COMMON.INTERACT'
17023 ! include 'COMMON.DERIV'
17024 ! include 'COMMON.IOUNITS'
17025 ! include 'COMMON.LOCAL'
17026 ! include 'COMMON.SCCOR'
17027 real(kind=8) :: pi4,pi34
17028 real(kind=8),dimension(3,2,nres) :: dcostheta ! (3,2,maxres)
17029 real(kind=8),dimension(3,3,nres) :: dcosphi,dsinphi,dcosalpha,&
17030 dcosomega,dsinomega !(3,3,maxres)
17031 real(kind=8),dimension(3) :: vo1,vo2,vo3,dummy,vp1,vp2,vp3,vpp1,n
17034 real(kind=8) :: cost,sint,cost1,sint1,cost2,sint2,sing,cosg,scalp,&
17035 fac0,fac1,fac2,fac3,fac4,fac5,fac6,ctgt,ctgt1,cosg_inv,&
17036 fac7,fac8,fac9,scala1,scala2,cosa,sina,sino,fac15,fac16,&
17037 fac17,coso_inv,fac10,fac11,fac12,fac13,fac14,IERROR
17041 !el from module energy-------------
17042 !el allocate(dcostau(3,3,3,itau_start:itau_end)) !(3,3,3,maxres2)maxres2=2*maxres
17043 !el allocate(dsintau(3,3,3,itau_start:itau_end))
17044 !el allocate(dtauangle(3,3,3,itau_start:itau_end))
17046 !el allocate(dcostau(3,3,3,0:nres2)) !(3,3,3,maxres2)maxres2=2*maxres
17047 !el allocate(dsintau(3,3,3,0:nres2))
17048 !el allocate(dtauangle(3,3,3,0:nres2))
17049 !el allocate(domicron(3,2,2,0:nres2))
17050 !el allocate(dcosomicron(3,2,2,0:nres2))
17054 #if defined(MPI) && defined(PARINTDER)
17055 if (nfgtasks.gt.1 .and. me.eq.king) &
17056 call MPI_Bcast(8,1,MPI_INTEGER,king,FG_COMM,IERROR)
17061 ! allocate(dtheta(3,2,nres)) !(3,2,maxres)
17062 ! allocate(dphi(3,3,nres),dalpha(3,3,nres),domega(3,3,nres)) !(3,3,maxres)
17064 ! write (iout,*) "iphi1_start",iphi1_start," iphi1_end",iphi1_end
17067 dtheta(j,1,i)=0.0d0
17068 dtheta(j,2,i)=0.0d0
17072 dcosomicron(j,1,1,i)=0.0d0
17073 dcosomicron(j,1,2,i)=0.0d0
17074 dcosomicron(j,2,1,i)=0.0d0
17075 dcosomicron(j,2,2,i)=0.0d0
17078 ! Derivatives of theta's
17079 #if defined(MPI) && defined(PARINTDER)
17080 ! We need dtheta(:,:,i-1) to compute dphi(:,:,i)
17081 do i=max0(ithet_start-1,3),ithet_end
17085 cost=dcos(theta(i))
17086 sint=sqrt(1-cost*cost)
17088 dcostheta(j,1,i)=-(dc_norm(j,i-1)+cost*dc_norm(j,i-2))/&
17090 if (itype(i-1,1).ne.ntyp1) dtheta(j,1,i)=-dcostheta(j,1,i)/sint
17091 dcostheta(j,2,i)=-(dc_norm(j,i-2)+cost*dc_norm(j,i-1))/&
17093 if (itype(i-1,1).ne.ntyp1) dtheta(j,2,i)=-dcostheta(j,2,i)/sint
17096 #if defined(MPI) && defined(PARINTDER)
17097 ! We need dtheta(:,:,i-1) to compute dphi(:,:,i)
17098 do i=max0(ithet_start-1,3),ithet_end
17102 if ((itype(i-1,1).ne.10).and.(itype(i-1,1).ne.ntyp1).and.molnum(i).ne.5) then
17103 cost1=dcos(omicron(1,i))
17104 sint1=sqrt(1-cost1*cost1)
17105 cost2=dcos(omicron(2,i))
17106 sint2=sqrt(1-cost2*cost2)
17108 !C Calculate derivative over first omicron (Cai-2,Cai-1,SCi-1)
17109 dcosomicron(j,1,1,i)=-(dc_norm(j,i-1+nres)+ &
17110 cost1*dc_norm(j,i-2))/ &
17112 domicron(j,1,1,i)=-1.0/sint1*dcosomicron(j,1,1,i)
17113 dcosomicron(j,1,2,i)=-(dc_norm(j,i-2) &
17114 +cost1*(dc_norm(j,i-1+nres)))/ &
17116 domicron(j,1,2,i)=-1.0/sint1*dcosomicron(j,1,2,i)
17117 !C Calculate derivative over second omicron Sci-1,Cai-1 Cai
17118 !C Looks messy but better than if in loop
17119 dcosomicron(j,2,1,i)=-(-dc_norm(j,i-1+nres) &
17120 +cost2*dc_norm(j,i-1))/ &
17122 domicron(j,2,1,i)=-1.0/sint2*dcosomicron(j,2,1,i)
17123 dcosomicron(j,2,2,i)=-(dc_norm(j,i-1) &
17124 +cost2*(-dc_norm(j,i-1+nres)))/ &
17126 ! write(iout,*) "vbld", i,itype(i,1),vbld(i-1+nres)
17127 domicron(j,2,2,i)=-1.0/sint2*dcosomicron(j,2,2,i)
17131 !elwrite(iout,*) "after vbld write"
17132 ! Derivatives of phi:
17133 ! If phi is 0 or 180 degrees, then the formulas
17134 ! have to be derived by power series expansion of the
17135 ! conventional formulas around 0 and 180.
17137 do i=iphi1_start,iphi1_end
17141 ! if (itype(i-1,1).eq.21 .or. itype(i-2,1).eq.21 ) cycle
17142 ! the conventional case
17143 sint=dsin(theta(i))
17144 sint1=dsin(theta(i-1))
17146 cost=dcos(theta(i))
17147 cost1=dcos(theta(i-1))
17149 scalp=scalar(dc_norm(1,i-3),dc_norm(1,i-1))
17150 fac0=1.0d0/(sint1*sint)
17153 fac3=cosg*cost1/(sint1*sint1)
17154 fac4=cosg*cost/(sint*sint)
17155 ! Obtaining the gamma derivatives from sine derivative
17156 if (phi(i).gt.-pi4.and.phi(i).le.pi4.or. &
17157 phi(i).gt.pi34.and.phi(i).le.pi.or. &
17158 phi(i).ge.-pi.and.phi(i).le.-pi34) then
17159 call vecpr(dc_norm(1,i-1),dc_norm(1,i-2),vp1)
17160 call vecpr(dc_norm(1,i-3),dc_norm(1,i-1),vp2)
17161 call vecpr(dc_norm(1,i-3),dc_norm(1,i-2),vp3)
17165 cosg_inv=1.0d0/cosg
17166 if (itype(i-1,1).ne.ntyp1 .and. itype(i-2,1).ne.ntyp1) then
17167 dsinphi(j,1,i)=-sing*ctgt1*dtheta(j,1,i-1) &
17168 -(fac0*vp1(j)+sing*dc_norm(j,i-3))*vbld_inv(i-2)
17169 dphi(j,1,i)=cosg_inv*dsinphi(j,1,i)
17171 -sing*(ctgt1*dtheta(j,2,i-1)+ctgt*dtheta(j,1,i)) &
17172 -(fac0*vp2(j)+sing*dc_norm(j,i-2))*vbld_inv(i-1)
17173 dphi(j,2,i)=cosg_inv*dsinphi(j,2,i)
17174 dsinphi(j,3,i)=-sing*ctgt*dtheta(j,2,i) &
17175 +(fac0*vp3(j)-sing*dc_norm(j,i-1))*vbld_inv(i)
17176 ! & +(fac0*vp3(j)-sing*dc_norm(j,i-1))*vbld_inv(i-1)
17177 dphi(j,3,i)=cosg_inv*dsinphi(j,3,i)
17179 ! Bug fixed 3/24/05 (AL)
17181 ! Obtaining the gamma derivatives from cosine derivative
17184 if (itype(i-1,1).ne.ntyp1 .and. itype(i-2,1).ne.ntyp1) then
17185 dcosphi(j,1,i)=fac1*dcostheta(j,1,i-1)+fac3* &
17186 dcostheta(j,1,i-1)-fac0*(dc_norm(j,i-1)-scalp* &
17187 dc_norm(j,i-3))/vbld(i-2)
17188 dphi(j,1,i)=-1.0/sing*dcosphi(j,1,i)
17189 dcosphi(j,2,i)=fac1*dcostheta(j,2,i-1)+fac2* &
17190 dcostheta(j,1,i)+fac3*dcostheta(j,2,i-1)+fac4* &
17192 dphi(j,2,i)=-1.0/sing*dcosphi(j,2,i)
17193 dcosphi(j,3,i)=fac2*dcostheta(j,2,i)+fac4* &
17194 dcostheta(j,2,i)-fac0*(dc_norm(j,i-3)-scalp* &
17195 dc_norm(j,i-1))/vbld(i)
17196 dphi(j,3,i)=-1.0/sing*dcosphi(j,3,i)
17199 write(iout,*) "just after",dphi(j,3,i),sing,dcosphi(j,3,i)
17206 !alculate derivative of Tauangle
17208 do i=itau_start,itau_end
17211 !elwrite(iout,*) " vecpr",i,nres
17213 if ((itype(i-2,1).eq.ntyp1).or.(itype(i-2,1).eq.10)) cycle
17214 ! if ((itype(i-2,1).eq.ntyp1).or.(itype(i-2,1).eq.10).or.
17215 ! & (itype(i-1,1).eq.ntyp1).or.(itype(i,1).eq.ntyp1)) cycle
17216 !c dtauangle(j,intertyp,dervityp,residue number)
17217 !c INTERTYP=1 SC...Ca...Ca..Ca
17218 ! the conventional case
17219 sint=dsin(theta(i))
17220 sint1=dsin(omicron(2,i-1))
17221 sing=dsin(tauangle(1,i))
17222 cost=dcos(theta(i))
17223 cost1=dcos(omicron(2,i-1))
17224 cosg=dcos(tauangle(1,i))
17225 !elwrite(iout,*) " vecpr5",i,nres
17227 !elwrite(iout,*) " vecpreee",i,nres,j,i-2+nres
17228 !elwrite(iout,*) " vecpr5",dc_norm2(1,1)
17229 dc_norm2(j,i-2+nres)=-dc_norm(j,i-2+nres)
17230 ! write(iout,*) dc_norm2(j,i-2+nres),"dcnorm"
17232 scalp=scalar(dc_norm2(1,i-2+nres),dc_norm(1,i-1))
17233 fac0=1.0d0/(sint1*sint)
17236 fac3=cosg*cost1/(sint1*sint1)
17237 fac4=cosg*cost/(sint*sint)
17238 ! write(iout,*) "faki",fac0,fac1,fac2,fac3,fac4
17239 ! Obtaining the gamma derivatives from sine derivative
17240 if (tauangle(1,i).gt.-pi4.and.tauangle(1,i).le.pi4.or. &
17241 tauangle(1,i).gt.pi34.and.tauangle(1,i).le.pi.or. &
17242 tauangle(1,i).gt.-pi.and.tauangle(1,i).le.-pi34) then
17243 call vecpr(dc_norm(1,i-1),dc_norm(1,i-2),vp1)
17244 call vecpr(dc_norm2(1,i-2+nres),dc_norm(1,i-1),vp2)
17245 call vecpr(dc_norm2(1,i-2+nres),dc_norm(1,i-2),vp3)
17249 cosg_inv=1.0d0/cosg
17250 dsintau(j,1,1,i)=-sing*ctgt1*domicron(j,2,2,i-1) &
17251 -(fac0*vp1(j)+sing*(dc_norm2(j,i-2+nres))) &
17252 *vbld_inv(i-2+nres)
17253 dtauangle(j,1,1,i)=cosg_inv*dsintau(j,1,1,i)
17254 dsintau(j,1,2,i)= &
17255 -sing*(ctgt1*domicron(j,2,1,i-1)+ctgt*dtheta(j,1,i)) &
17256 -(fac0*vp2(j)+sing*dc_norm(j,i-2))*vbld_inv(i-1)
17257 ! write(iout,*) "dsintau", dsintau(j,1,2,i)
17258 dtauangle(j,1,2,i)=cosg_inv*dsintau(j,1,2,i)
17259 ! Bug fixed 3/24/05 (AL)
17260 dsintau(j,1,3,i)=-sing*ctgt*dtheta(j,2,i) &
17261 +(fac0*vp3(j)-sing*dc_norm(j,i-1))*vbld_inv(i)
17262 ! & +(fac0*vp3(j)-sing*dc_norm(j,i-1))*vbld_inv(i-1)
17263 dtauangle(j,1,3,i)=cosg_inv*dsintau(j,1,3,i)
17265 ! Obtaining the gamma derivatives from cosine derivative
17268 dcostau(j,1,1,i)=fac1*dcosomicron(j,2,2,i-1)+fac3* &
17269 dcosomicron(j,2,2,i-1)-fac0*(dc_norm(j,i-1)-scalp* &
17270 (dc_norm2(j,i-2+nres)))/vbld(i-2+nres)
17271 dtauangle(j,1,1,i)=-1/sing*dcostau(j,1,1,i)
17272 dcostau(j,1,2,i)=fac1*dcosomicron(j,2,1,i-1)+fac2* &
17273 dcostheta(j,1,i)+fac3*dcosomicron(j,2,1,i-1)+fac4* &
17275 dtauangle(j,1,2,i)=-1/sing*dcostau(j,1,2,i)
17276 dcostau(j,1,3,i)=fac2*dcostheta(j,2,i)+fac4* &
17277 dcostheta(j,2,i)-fac0*(-dc_norm(j,i-2+nres)-scalp* &
17278 dc_norm(j,i-1))/vbld(i)
17279 dtauangle(j,1,3,i)=-1/sing*dcostau(j,1,3,i)
17280 ! write (iout,*) "else",i
17284 ! write(iout,*) "tu",i,k,(dtauangle(j,1,k,i),j=1,3)
17287 !C Second case Ca...Ca...Ca...SC
17289 do i=itau_start,itau_end
17293 if ((itype(i-1,1).eq.ntyp1).or.(itype(i-1,1).eq.10).or. &
17294 (itype(i-2,1).eq.ntyp1).or.(itype(i-3,1).eq.ntyp1)) cycle
17295 ! the conventional case
17296 sint=dsin(omicron(1,i))
17297 sint1=dsin(theta(i-1))
17298 sing=dsin(tauangle(2,i))
17299 cost=dcos(omicron(1,i))
17300 cost1=dcos(theta(i-1))
17301 cosg=dcos(tauangle(2,i))
17303 ! dc_norm2(j,i-1+nres)=-dc_norm(j,i-1+nres)
17305 scalp=scalar(dc_norm(1,i-3),dc_norm(1,i-1+nres))
17306 fac0=1.0d0/(sint1*sint)
17309 fac3=cosg*cost1/(sint1*sint1)
17310 fac4=cosg*cost/(sint*sint)
17311 ! Obtaining the gamma derivatives from sine derivative
17312 if (tauangle(2,i).gt.-pi4.and.tauangle(2,i).le.pi4.or. &
17313 tauangle(2,i).gt.pi34.and.tauangle(2,i).le.pi.or. &
17314 tauangle(2,i).gt.-pi.and.tauangle(2,i).le.-pi34) then
17315 call vecpr(dc_norm2(1,i-1+nres),dc_norm(1,i-2),vp1)
17316 call vecpr(dc_norm(1,i-3),dc_norm(1,i-1+nres),vp2)
17317 call vecpr(dc_norm(1,i-3),dc_norm(1,i-2),vp3)
17321 cosg_inv=1.0d0/cosg
17322 dsintau(j,2,1,i)=-sing*ctgt1*dtheta(j,1,i-1) &
17323 +(fac0*vp1(j)-sing*dc_norm(j,i-3))*vbld_inv(i-2)
17324 ! write(iout,*) i,j,dsintau(j,2,1,i),sing*ctgt1*dtheta(j,1,i-1),
17325 ! &fac0*vp1(j),sing*dc_norm(j,i-3),vbld_inv(i-2),"dsintau(2,1)"
17326 dtauangle(j,2,1,i)=cosg_inv*dsintau(j,2,1,i)
17327 dsintau(j,2,2,i)= &
17328 -sing*(ctgt1*dtheta(j,2,i-1)+ctgt*domicron(j,1,1,i)) &
17329 -(fac0*vp2(j)+sing*dc_norm(j,i-2))*vbld_inv(i-1)
17330 ! write(iout,*) "sprawdzenie",i,j,sing*ctgt1*dtheta(j,2,i-1),
17331 ! & sing*ctgt*domicron(j,1,2,i),
17332 ! & (fac0*vp2(j)+sing*dc_norm(j,i-2))*vbld_inv(i-1)
17333 dtauangle(j,2,2,i)=cosg_inv*dsintau(j,2,2,i)
17334 ! Bug fixed 3/24/05 (AL)
17335 dsintau(j,2,3,i)=-sing*ctgt*domicron(j,1,2,i) &
17336 +(fac0*vp3(j)-sing*dc_norm(j,i-1+nres))*vbld_inv(i-1+nres)
17337 ! & +(fac0*vp3(j)-sing*dc_norm(j,i-1))*vbld_inv(i-1)
17338 dtauangle(j,2,3,i)=cosg_inv*dsintau(j,2,3,i)
17340 ! Obtaining the gamma derivatives from cosine derivative
17343 dcostau(j,2,1,i)=fac1*dcostheta(j,1,i-1)+fac3* &
17344 dcostheta(j,1,i-1)-fac0*(dc_norm(j,i-1+nres)-scalp* &
17345 dc_norm(j,i-3))/vbld(i-2)
17346 dtauangle(j,2,1,i)=-1/sing*dcostau(j,2,1,i)
17347 dcostau(j,2,2,i)=fac1*dcostheta(j,2,i-1)+fac2* &
17348 dcosomicron(j,1,1,i)+fac3*dcostheta(j,2,i-1)+fac4* &
17349 dcosomicron(j,1,1,i)
17350 dtauangle(j,2,2,i)=-1/sing*dcostau(j,2,2,i)
17351 dcostau(j,2,3,i)=fac2*dcosomicron(j,1,2,i)+fac4* &
17352 dcosomicron(j,1,2,i)-fac0*(dc_norm(j,i-3)-scalp* &
17353 dc_norm(j,i-1+nres))/vbld(i-1+nres)
17354 dtauangle(j,2,3,i)=-1/sing*dcostau(j,2,3,i)
17355 ! write(iout,*) i,j,"else", dtauangle(j,2,3,i)
17360 !CC third case SC...Ca...Ca...SC
17363 do i=itau_start,itau_end
17367 ! the conventional case
17368 if ((itype(i-1,1).eq.ntyp1).or.(itype(i-1,1).eq.10).or. &
17369 (itype(i-2,1).eq.ntyp1).or.(itype(i-2,1).eq.10)) cycle
17370 sint=dsin(omicron(1,i))
17371 sint1=dsin(omicron(2,i-1))
17372 sing=dsin(tauangle(3,i))
17373 cost=dcos(omicron(1,i))
17374 cost1=dcos(omicron(2,i-1))
17375 cosg=dcos(tauangle(3,i))
17377 dc_norm2(j,i-2+nres)=-dc_norm(j,i-2+nres)
17378 ! dc_norm2(j,i-1+nres)=-dc_norm(j,i-1+nres)
17380 scalp=scalar(dc_norm2(1,i-2+nres),dc_norm(1,i-1+nres))
17381 fac0=1.0d0/(sint1*sint)
17384 fac3=cosg*cost1/(sint1*sint1)
17385 fac4=cosg*cost/(sint*sint)
17386 ! Obtaining the gamma derivatives from sine derivative
17387 if (tauangle(3,i).gt.-pi4.and.tauangle(3,i).le.pi4.or. &
17388 tauangle(3,i).gt.pi34.and.tauangle(3,i).le.pi.or. &
17389 tauangle(3,i).gt.-pi.and.tauangle(3,i).le.-pi34) then
17390 call vecpr(dc_norm(1,i-1+nres),dc_norm(1,i-2),vp1)
17391 call vecpr(dc_norm2(1,i-2+nres),dc_norm(1,i-1+nres),vp2)
17392 call vecpr(dc_norm2(1,i-2+nres),dc_norm(1,i-2),vp3)
17396 cosg_inv=1.0d0/cosg
17397 dsintau(j,3,1,i)=-sing*ctgt1*domicron(j,2,2,i-1) &
17398 -(fac0*vp1(j)-sing*dc_norm(j,i-2+nres)) &
17399 *vbld_inv(i-2+nres)
17400 dtauangle(j,3,1,i)=cosg_inv*dsintau(j,3,1,i)
17401 dsintau(j,3,2,i)= &
17402 -sing*(ctgt1*domicron(j,2,1,i-1)+ctgt*domicron(j,1,1,i)) &
17403 -(fac0*vp2(j)+sing*dc_norm(j,i-2))*vbld_inv(i-1)
17404 dtauangle(j,3,2,i)=cosg_inv*dsintau(j,3,2,i)
17405 ! Bug fixed 3/24/05 (AL)
17406 dsintau(j,3,3,i)=-sing*ctgt*domicron(j,1,2,i) &
17407 +(fac0*vp3(j)-sing*dc_norm(j,i-1+nres)) &
17408 *vbld_inv(i-1+nres)
17409 ! & +(fac0*vp3(j)-sing*dc_norm(j,i-1))*vbld_inv(i-1)
17410 dtauangle(j,3,3,i)=cosg_inv*dsintau(j,3,3,i)
17412 ! Obtaining the gamma derivatives from cosine derivative
17415 dcostau(j,3,1,i)=fac1*dcosomicron(j,2,2,i-1)+fac3* &
17416 dcosomicron(j,2,2,i-1)-fac0*(dc_norm(j,i-1+nres)-scalp* &
17417 dc_norm2(j,i-2+nres))/vbld(i-2+nres)
17418 dtauangle(j,3,1,i)=-1/sing*dcostau(j,3,1,i)
17419 dcostau(j,3,2,i)=fac1*dcosomicron(j,2,1,i-1)+fac2* &
17420 dcosomicron(j,1,1,i)+fac3*dcosomicron(j,2,1,i-1)+fac4* &
17421 dcosomicron(j,1,1,i)
17422 dtauangle(j,3,2,i)=-1/sing*dcostau(j,3,2,i)
17423 dcostau(j,3,3,i)=fac2*dcosomicron(j,1,2,i)+fac4* &
17424 dcosomicron(j,1,2,i)-fac0*(dc_norm2(j,i-2+nres)-scalp* &
17425 dc_norm(j,i-1+nres))/vbld(i-1+nres)
17426 dtauangle(j,3,3,i)=-1/sing*dcostau(j,3,3,i)
17427 ! write(iout,*) "else",i
17433 ! Derivatives of side-chain angles alpha and omega
17434 #if defined(MPI) && defined(PARINTDER)
17435 do i=ibond_start,ibond_end
17439 if(itype(i,1).ne.10 .and. itype(i,1).ne.ntyp1) then
17440 fac5=1.0d0/dsqrt(2*(1+dcos(theta(i+1))))
17443 fac8=fac5/vbld(i+1)
17444 fac9=fac5/vbld(i+nres)
17445 scala1=scalar(dc_norm(1,i-1),dc_norm(1,i+nres))
17446 scala2=scalar(dc_norm(1,i),dc_norm(1,i+nres))
17447 cosa=dsqrt(0.5d0/(1.0d0+dcos(theta(i+1))))* &
17448 (scalar(dC_norm(1,i),dC_norm(1,i+nres)) &
17449 -scalar(dC_norm(1,i-1),dC_norm(1,i+nres)))
17450 sina=sqrt(1-cosa*cosa)
17452 ! write (iout,*) "i",i," cosa",cosa," sina",sina," sino",sino
17454 dcosalpha(j,1,i)=fac6*(scala1*dc_norm(j,i-1)- &
17455 dc_norm(j,i+nres))-cosa*fac7*dcostheta(j,1,i+1)
17456 dalpha(j,1,i)=-1/sina*dcosalpha(j,1,i)
17457 dcosalpha(j,2,i)=fac8*(dc_norm(j,i+nres)- &
17458 scala2*dc_norm(j,i))-cosa*fac7*dcostheta(j,2,i+1)
17459 dalpha(j,2,i)=-1/sina*dcosalpha(j,2,i)
17460 dcosalpha(j,3,i)=(fac9*(dc_norm(j,i)- &
17461 dc_norm(j,i-1))-(cosa*dc_norm(j,i+nres))/ &
17463 dalpha(j,3,i)=-1/sina*dcosalpha(j,3,i)
17465 ! obtaining the derivatives of omega from sines
17466 if(omeg(i).gt.-pi4.and.omeg(i).le.pi4.or. &
17467 omeg(i).gt.pi34.and.omeg(i).le.pi.or. &
17468 omeg(i).gt.-pi.and.omeg(i).le.-pi34) then
17469 fac15=dcos(theta(i+1))/(dsin(theta(i+1))* &
17471 fac16=dcos(alph(i))/(dsin(alph(i))*dsin(alph(i)))
17472 fac17=1.0d0/(dsin(theta(i+1))*dsin(alph(i)))
17473 call vecpr(dc_norm(1,i+nres),dc_norm(1,i),vo1)
17474 call vecpr(dc_norm(1,i+nres),dc_norm(1,i-1),vo2)
17475 call vecpr(dc_norm(1,i),dc_norm(1,i-1),vo3)
17476 coso_inv=1.0d0/dcos(omeg(i))
17478 dsinomega(j,1,i)=sino*(fac15*dcostheta(j,1,i+1) &
17479 +fac16*dcosalpha(j,1,i))-fac17/vbld(i)*vo1(j)- &
17480 (sino*dc_norm(j,i-1))/vbld(i)
17481 domega(j,1,i)=coso_inv*dsinomega(j,1,i)
17482 dsinomega(j,2,i)=sino*(fac15*dcostheta(j,2,i+1) &
17483 +fac16*dcosalpha(j,2,i))+fac17/vbld(i+1)*vo2(j) &
17484 -sino*dc_norm(j,i)/vbld(i+1)
17485 domega(j,2,i)=coso_inv*dsinomega(j,2,i)
17486 dsinomega(j,3,i)=sino*fac16*dcosalpha(j,3,i)- &
17487 fac17/vbld(i+nres)*vo3(j)-sino*dc_norm(j,i+nres)/ &
17489 domega(j,3,i)=coso_inv*dsinomega(j,3,i)
17492 ! obtaining the derivatives of omega from cosines
17493 fac10=sqrt(0.5d0*(1-dcos(theta(i+1))))
17494 fac11=sqrt(0.5d0*(1+dcos(theta(i+1))))
17499 dcosomega(j,1,i)=(-(0.25d0*cosa/fac11* &
17500 dcostheta(j,1,i+1)+fac11*dcosalpha(j,1,i))*fac12+ &
17501 (0.25d0/fac10*sina*dcostheta(j,1,i+1)+cosa/sina* &
17502 fac10*dcosalpha(j,1,i))*(scala2-fac11*cosa))/fac13
17503 domega(j,1,i)=-1/sino*dcosomega(j,1,i)
17504 dcosomega(j,2,i)=(((dc_norm(j,i+nres)-scala2* &
17505 dc_norm(j,i))/vbld(i+1)-0.25d0*cosa/fac11* &
17506 dcostheta(j,2,i+1)-fac11*dcosalpha(j,2,i))*fac12+ &
17507 (scala2-fac11*cosa)*(0.25d0*sina/fac10* &
17508 dcostheta(j,2,i+1)+fac10*cosa/sina*dcosalpha(j,2,i)))/fac13
17509 domega(j,2,i)=-1/sino*dcosomega(j,2,i)
17510 dcosomega(j,3,i)=1/fac10*((1/vbld(i+nres)*(dc_norm(j,i)- &
17511 scala2*dc_norm(j,i+nres))-fac11*dcosalpha(j,3,i))*sina+ &
17512 (scala2-fac11*cosa)*(cosa/sina*dcosalpha(j,3,i)))/fac14
17513 domega(j,3,i)=-1/sino*dcosomega(j,3,i)
17519 dalpha(k,j,i)=0.0d0
17520 domega(k,j,i)=0.0d0
17526 #if defined(MPI) && defined(PARINTDER)
17527 if (nfgtasks.gt.1) then
17529 !d write (iout,*) "Gather dtheta"
17530 !d call flush(iout)
17531 write (iout,*) "dtheta before gather"
17533 write (iout,'(i3,3(3f8.5,3x))') i,((dtheta(j,k,i),k=1,3),j=1,2)
17536 call MPI_Gatherv(dtheta(1,1,ithet_start),ithet_count(fg_rank),&
17537 MPI_THET,dtheta(1,1,1),ithet_count(0),ithet_displ(0),MPI_THET,&
17538 king,FG_COMM,IERROR)
17541 !d write (iout,*) "Gather dphi"
17542 !d call flush(iout)
17543 write (iout,*) "dphi before gather"
17545 write (iout,'(i3,3(3f8.5,3x))') i,((dphi(j,k,i),k=1,3),j=1,3)
17549 call MPI_Gatherv(dphi(1,1,iphi1_start),iphi1_count(fg_rank),&
17550 MPI_GAM,dphi(1,1,1),iphi1_count(0),iphi1_displ(0),MPI_GAM,&
17551 king,FG_COMM,IERROR)
17552 !d write (iout,*) "Gather dalpha"
17553 !d call flush(iout)
17555 call MPI_Gatherv(dalpha(1,1,ibond_start),ibond_count(fg_rank),&
17556 MPI_GAM,dalpha(1,1,1),ibond_count(0),ibond_displ(0),MPI_GAM,&
17557 king,FG_COMM,IERROR)
17558 !d write (iout,*) "Gather domega"
17559 !d call flush(iout)
17560 call MPI_Gatherv(domega(1,1,ibond_start),ibond_count(fg_rank),&
17561 MPI_GAM,domega(1,1,1),ibond_count(0),ibond_displ(0),MPI_GAM,&
17562 king,FG_COMM,IERROR)
17568 write (iout,*) "dtheta after gather"
17570 write (iout,'(i3,3(3f8.5,3x))') i,((dtheta(j,k,i),j=1,3),k=1,2)
17572 write (iout,*) "dphi after gather"
17574 write (iout,'(i3,3(3f8.5,3x))') i,((dphi(j,k,i),j=1,3),k=1,3)
17576 write (iout,*) "dalpha after gather"
17578 write (iout,'(i3,3(3f8.5,3x))') i,((dalpha(j,k,i),j=1,3),k=1,3)
17580 write (iout,*) "domega after gather"
17582 write (iout,'(i3,3(3f8.5,3x))') i,((domega(j,k,i),j=1,3),k=1,3)
17587 end subroutine intcartderiv
17588 !-----------------------------------------------------------------------------
17589 subroutine checkintcartgrad
17590 ! implicit real*8 (a-h,o-z)
17591 ! include 'DIMENSIONS'
17595 ! include 'COMMON.CHAIN'
17596 ! include 'COMMON.VAR'
17597 ! include 'COMMON.GEO'
17598 ! include 'COMMON.INTERACT'
17599 ! include 'COMMON.DERIV'
17600 ! include 'COMMON.IOUNITS'
17601 ! include 'COMMON.SETUP'
17602 real(kind=8),dimension(3,2,nres) :: dthetanum !(3,2,maxres)
17603 real(kind=8),dimension(3,3,nres) :: dphinum,dalphanum,domeganum !(3,3,maxres)
17604 real(kind=8),dimension(nres) :: theta_s,phi_s,alph_s,omeg_s !(maxres)
17605 real(kind=8),dimension(3) :: dc_norm_s
17606 real(kind=8) :: aincr=1.0d-5
17608 real(kind=8) :: dcji
17611 theta_s(i)=theta(i)
17615 ! Check theta gradient
17617 "Analytical (upper) and numerical (lower) gradient of theta"
17622 dc(j,i-2)=dcji+aincr
17623 call chainbuild_cart
17624 call int_from_cart1(.false.)
17625 dthetanum(j,1,i)=(theta(i)-theta_s(i))/aincr
17628 dc(j,i-1)=dc(j,i-1)+aincr
17629 call chainbuild_cart
17630 dthetanum(j,2,i)=(theta(i)-theta_s(i))/aincr
17633 !el write (iout,'(i5,3f10.5,5x,3f10.5)') i,(dtheta(j,1,i),j=1,3),&
17634 !el (dtheta(j,2,i),j=1,3)
17635 !el write (iout,'(5x,3f10.5,5x,3f10.5)') (dthetanum(j,1,i),j=1,3),&
17636 !el (dthetanum(j,2,i),j=1,3)
17637 !el write (iout,'(5x,3f10.5,5x,3f10.5)') &
17638 !el (dthetanum(j,1,i)/dtheta(j,1,i),j=1,3),&
17639 !el (dthetanum(j,2,i)/dtheta(j,2,i),j=1,3)
17642 ! Check gamma gradient
17644 "Analytical (upper) and numerical (lower) gradient of gamma"
17648 dc(j,i-3)=dcji+aincr
17649 call chainbuild_cart
17650 dphinum(j,1,i)=(phi(i)-phi_s(i))/aincr
17653 dc(j,i-2)=dcji+aincr
17654 call chainbuild_cart
17655 dphinum(j,2,i)=(phi(i)-phi_s(i))/aincr
17658 dc(j,i-1)=dc(j,i-1)+aincr
17659 call chainbuild_cart
17660 dphinum(j,3,i)=(phi(i)-phi_s(i))/aincr
17663 !el write (iout,'(i5,3(3f10.5,5x))') i,(dphi(j,1,i),j=1,3),&
17664 !el (dphi(j,2,i),j=1,3),(dphi(j,3,i),j=1,3)
17665 !el write (iout,'(5x,3(3f10.5,5x))') (dphinum(j,1,i),j=1,3),&
17666 !el (dphinum(j,2,i),j=1,3),(dphinum(j,3,i),j=1,3)
17667 !el write (iout,'(5x,3(3f10.5,5x))') &
17668 !el (dphinum(j,1,i)/dphi(j,1,i),j=1,3),&
17669 !el (dphinum(j,2,i)/dphi(j,2,i),j=1,3),&
17670 !el (dphinum(j,3,i)/dphi(j,3,i),j=1,3)
17673 ! Check alpha gradient
17675 "Analytical (upper) and numerical (lower) gradient of alpha"
17677 if(itype(i,1).ne.10) then
17680 dc(j,i-1)=dcji+aincr
17681 call chainbuild_cart
17682 dalphanum(j,1,i)=(alph(i)-alph_s(i)) &
17687 call chainbuild_cart
17688 dalphanum(j,2,i)=(alph(i)-alph_s(i)) &
17692 dc(j,i+nres)=dc(j,i+nres)+aincr
17693 call chainbuild_cart
17694 dalphanum(j,3,i)=(alph(i)-alph_s(i)) &
17699 !el write (iout,'(i5,3(3f10.5,5x))') i,(dalpha(j,1,i),j=1,3),&
17700 !el (dalpha(j,2,i),j=1,3),(dalpha(j,3,i),j=1,3)
17701 !el write (iout,'(5x,3(3f10.5,5x))') (dalphanum(j,1,i),j=1,3),&
17702 !el (dalphanum(j,2,i),j=1,3),(dalphanum(j,3,i),j=1,3)
17703 !el write (iout,'(5x,3(3f10.5,5x))') &
17704 !el (dalphanum(j,1,i)/dalpha(j,1,i),j=1,3),&
17705 !el (dalphanum(j,2,i)/dalpha(j,2,i),j=1,3),&
17706 !el (dalphanum(j,3,i)/dalpha(j,3,i),j=1,3)
17709 ! Check omega gradient
17711 "Analytical (upper) and numerical (lower) gradient of omega"
17713 if(itype(i,1).ne.10) then
17716 dc(j,i-1)=dcji+aincr
17717 call chainbuild_cart
17718 domeganum(j,1,i)=(omeg(i)-omeg_s(i)) &
17723 call chainbuild_cart
17724 domeganum(j,2,i)=(omeg(i)-omeg_s(i)) &
17728 dc(j,i+nres)=dc(j,i+nres)+aincr
17729 call chainbuild_cart
17730 domeganum(j,3,i)=(omeg(i)-omeg_s(i)) &
17735 !el write (iout,'(i5,3(3f10.5,5x))') i,(domega(j,1,i),j=1,3),&
17736 !el (domega(j,2,i),j=1,3),(domega(j,3,i),j=1,3)
17737 !el write (iout,'(5x,3(3f10.5,5x))') (domeganum(j,1,i),j=1,3),&
17738 !el (domeganum(j,2,i),j=1,3),(domeganum(j,3,i),j=1,3)
17739 !el write (iout,'(5x,3(3f10.5,5x))') &
17740 !el (domeganum(j,1,i)/domega(j,1,i),j=1,3),&
17741 !el (domeganum(j,2,i)/domega(j,2,i),j=1,3),&
17742 !el (domeganum(j,3,i)/domega(j,3,i),j=1,3)
17746 end subroutine checkintcartgrad
17747 !-----------------------------------------------------------------------------
17749 !-----------------------------------------------------------------------------
17750 real(kind=8) function qwolynes(seg1,seg2,flag,seg3,seg4)
17751 ! implicit real*8 (a-h,o-z)
17752 ! include 'DIMENSIONS'
17753 ! include 'COMMON.IOUNITS'
17754 ! include 'COMMON.CHAIN'
17755 ! include 'COMMON.INTERACT'
17756 ! include 'COMMON.VAR'
17757 integer :: i,j,jl,k,l,il,kl,nl,np,ip,kp,seg1,seg2,seg3,seg4,secseg
17758 integer :: kkk,nsep=3
17759 real(kind=8) :: qm !dist,
17760 real(kind=8) :: qq,qqij,qqijCM,dij,d0ij,dijCM,d0ijCM,qqmax
17761 logical :: lprn=.false.
17763 ! real(kind=8) :: sigm,x
17765 !el sigm(x)=0.25d0*x ! local function
17771 do il=seg1+nsep,seg2
17774 d0ij=dsqrt((cref(1,jl,kkk)-cref(1,il,kkk))**2 + &
17775 (cref(2,jl,kkk)-cref(2,il,kkk))**2 + &
17776 (cref(3,jl,kkk)-cref(3,il,kkk))**2)
17778 qqij = dexp(-0.5d0*((dij-d0ij)/(sigm(d0ij)))**2)
17779 if (itype(il,1).ne.10 .or. itype(jl,1).ne.10) then
17782 (cref(1,jl+nres,kkk)-cref(1,il+nres,kkk))**2+ &
17783 (cref(2,jl+nres,kkk)-cref(2,il+nres,kkk))**2+ &
17784 (cref(3,jl+nres,kkk)-cref(3,il+nres,kkk))**2)
17785 dijCM=dist(il+nres,jl+nres)
17786 qqijCM = dexp(-0.5d0*((dijCM-d0ijCM)/(sigm(d0ijCM)))**2)
17788 qq = qq+qqij+qqijCM
17794 if((seg3-il).lt.3) then
17801 d0ij=dsqrt((cref(1,jl,kkk)-cref(1,il,kkk))**2+ &
17802 (cref(2,jl,kkk)-cref(2,il,kkk))**2+ &
17803 (cref(3,jl,kkk)-cref(3,il,kkk))**2)
17805 qqij = dexp(-0.5d0*((dij-d0ij)/(sigm(d0ij)))**2)
17806 if (itype(il,1).ne.10 .or. itype(jl,1).ne.10) then
17809 (cref(1,jl+nres,kkk)-cref(1,il+nres,kkk))**2+ &
17810 (cref(2,jl+nres,kkk)-cref(2,il+nres,kkk))**2+ &
17811 (cref(3,jl+nres,kkk)-cref(3,il+nres,kkk))**2)
17812 dijCM=dist(il+nres,jl+nres)
17813 qqijCM = dexp(-0.5d0*((dijCM-d0ijCM)/(sigm(d0ijCM)))**2)
17815 qq = qq+qqij+qqijCM
17820 if (qqmax.le.qq) qqmax=qq
17822 qwolynes=1.0d0-qqmax
17824 end function qwolynes
17825 !-----------------------------------------------------------------------------
17826 subroutine qwolynes_prim(seg1,seg2,flag,seg3,seg4)
17827 ! implicit real*8 (a-h,o-z)
17828 ! include 'DIMENSIONS'
17829 ! include 'COMMON.IOUNITS'
17830 ! include 'COMMON.CHAIN'
17831 ! include 'COMMON.INTERACT'
17832 ! include 'COMMON.VAR'
17833 ! include 'COMMON.MD'
17834 integer :: i,j,jl,k,l,il,nl,seg1,seg2,seg3,seg4,secseg
17835 integer :: nsep=3, kkk
17836 !el real(kind=8) :: dist
17837 real(kind=8) :: dij,d0ij,dijCM,d0ijCM
17838 logical :: lprn=.false.
17840 real(kind=8) :: sim,dd0,fac,ddqij
17841 !el sigm(x)=0.25d0*x ! local function
17851 do il=seg1+nsep,seg2
17854 d0ij=dsqrt((cref(1,jl,kkk)-cref(1,il,kkk))**2+ &
17855 (cref(2,jl,kkk)-cref(2,il,kkk))**2+ &
17856 (cref(3,jl,kkk)-cref(3,il,kkk))**2)
17858 sim = 1.0d0/sigm(d0ij)
17861 fac = dd0*sim/dij*dexp(-0.5d0*dd0*dd0*sim)
17863 ddqij = (c(k,il)-c(k,jl))*fac
17864 dqwol(k,il)=dqwol(k,il)+ddqij
17865 dqwol(k,jl)=dqwol(k,jl)-ddqij
17868 if (itype(il,1).ne.10 .or. itype(jl,1).ne.10) then
17871 (cref(1,jl+nres,kkk)-cref(1,il+nres,kkk))**2+ &
17872 (cref(2,jl+nres,kkk)-cref(2,il+nres,kkk))**2+ &
17873 (cref(3,jl+nres,kkk)-cref(3,il+nres,kkk))**2)
17874 dijCM=dist(il+nres,jl+nres)
17875 sim = 1.0d0/sigm(d0ijCM)
17878 fac=dd0*sim/dijCM*dexp(-0.5d0*dd0*dd0*sim)
17880 ddqij = (c(k,il+nres)-c(k,jl+nres))*fac
17881 dxqwol(k,il)=dxqwol(k,il)+ddqij
17882 dxqwol(k,jl)=dxqwol(k,jl)-ddqij
17889 if((seg3-il).lt.3) then
17896 d0ij=dsqrt((cref(1,jl,kkk)-cref(1,il,kkk))**2+ &
17897 (cref(2,jl,kkk)-cref(2,il,kkk))**2+ &
17898 (cref(3,jl,kkk)-cref(3,il,kkk))**2)
17900 sim = 1.0d0/sigm(d0ij)
17903 fac = dd0*sim/dij*dexp(-0.5d0*dd0*dd0*sim)
17905 ddqij = (c(k,il)-c(k,jl))*fac
17906 dqwol(k,il)=dqwol(k,il)+ddqij
17907 dqwol(k,jl)=dqwol(k,jl)-ddqij
17909 if (itype(il,1).ne.10 .or. itype(jl,1).ne.10) then
17912 (cref(1,jl+nres,kkk)-cref(1,il+nres,kkk))**2+ &
17913 (cref(2,jl+nres,kkk)-cref(2,il+nres,kkk))**2+ &
17914 (cref(3,jl+nres,kkk)-cref(3,il+nres,kkk))**2)
17915 dijCM=dist(il+nres,jl+nres)
17916 sim = 1.0d0/sigm(d0ijCM)
17919 fac = dd0*sim/dijCM*dexp(-0.5d0*dd0*dd0*sim)
17921 ddqij = (c(k,il+nres)-c(k,jl+nres))*fac
17922 dxqwol(k,il)=dxqwol(k,il)+ddqij
17923 dxqwol(k,jl)=dxqwol(k,jl)-ddqij
17932 dqwol(j,i)=dqwol(j,i)/nl
17933 dxqwol(j,i)=dxqwol(j,i)/nl
17937 end subroutine qwolynes_prim
17938 !-----------------------------------------------------------------------------
17939 subroutine qwol_num(seg1,seg2,flag,seg3,seg4)
17940 ! implicit real*8 (a-h,o-z)
17941 ! include 'DIMENSIONS'
17942 ! include 'COMMON.IOUNITS'
17943 ! include 'COMMON.CHAIN'
17944 ! include 'COMMON.INTERACT'
17945 ! include 'COMMON.VAR'
17946 integer :: seg1,seg2,seg3,seg4
17948 real(kind=8),dimension(3,0:nres) :: qwolan,qwolxan
17949 real(kind=8),dimension(3,0:2*nres) :: cdummy
17950 real(kind=8) :: q1,q2
17951 real(kind=8) :: delta=1.0d-10
17956 q1=qwolynes(seg1,seg2,flag,seg3,seg4)
17958 c(j,i)=c(j,i)+delta
17959 q2=qwolynes(seg1,seg2,flag,seg3,seg4)
17960 qwolan(j,i)=(q2-q1)/delta
17966 q1=qwolynes(seg1,seg2,flag,seg3,seg4)
17967 cdummy(j,i+nres)=c(j,i+nres)
17968 c(j,i+nres)=c(j,i+nres)+delta
17969 q2=qwolynes(seg1,seg2,flag,seg3,seg4)
17970 qwolxan(j,i)=(q2-q1)/delta
17971 c(j,i+nres)=cdummy(j,i+nres)
17974 ! write(iout,*) "Numerical Q carteisan gradients backbone: "
17976 ! write(iout,'(i5,3e15.5)') i, (qwolan(j,i),j=1,3)
17978 ! write(iout,*) "Numerical Q carteisan gradients side-chain: "
17980 ! write(iout,'(i5,3e15.5)') i, (qwolxan(j,i),j=1,3)
17983 end subroutine qwol_num
17984 !-----------------------------------------------------------------------------
17985 subroutine EconstrQ
17986 ! MD with umbrella_sampling using Wolyne's distance measure as a constraint
17987 ! implicit real*8 (a-h,o-z)
17988 ! include 'DIMENSIONS'
17989 ! include 'COMMON.CONTROL'
17990 ! include 'COMMON.VAR'
17991 ! include 'COMMON.MD'
17994 ! include 'COMMON.LANGEVIN'
17996 ! include 'COMMON.LANGEVIN.lang0'
17998 ! include 'COMMON.CHAIN'
17999 ! include 'COMMON.DERIV'
18000 ! include 'COMMON.GEO'
18001 ! include 'COMMON.LOCAL'
18002 ! include 'COMMON.INTERACT'
18003 ! include 'COMMON.IOUNITS'
18004 ! include 'COMMON.NAMES'
18005 ! include 'COMMON.TIME1'
18006 real(kind=8) :: uzap1,uzap2,hm1,hm2,hmnum,ucdelan
18007 real(kind=8),dimension(3,0:nres) :: dUcartan,dUxcartan,cdummy,&
18009 integer :: kstart,kend,lstart,lend,idummy
18010 real(kind=8) :: delta=1.0d-7
18011 integer :: i,j,k,ii
18015 dudconst(j,i)=0.0d0
18016 duxconst(j,i)=0.0d0
18017 dudxconst(j,i)=0.0d0
18022 qfrag(i)=qwolynes(ifrag(1,i,iset),ifrag(2,i,iset),.true.,&
18024 Uconst=Uconst+wfrag(i,iset)*harmonic(qfrag(i),qinfrag(i,iset))
18025 ! Calculating the derivatives of Constraint energy with respect to Q
18026 Ucdfrag=wfrag(i,iset)*harmonicprim(qfrag(i),&
18028 ! hm1=harmonic(qfrag(i,iset),qinfrag(i,iset))
18029 ! hm2=harmonic(qfrag(i,iset)+delta,qinfrag(i,iset))
18030 ! hmnum=(hm2-hm1)/delta
18031 ! write(iout,*) "harmonicprim frag",harmonicprim(qfrag(i,iset),
18032 ! & qinfrag(i,iset))
18033 ! write(iout,*) "harmonicnum frag", hmnum
18034 ! Calculating the derivatives of Q with respect to cartesian coordinates
18035 call qwolynes_prim(ifrag(1,i,iset),ifrag(2,i,iset),.true.,&
18037 ! write(iout,*) "dqwol "
18039 ! write(iout,'(i5,3e15.5)') ii,(dqwol(j,ii),j=1,3)
18041 ! write(iout,*) "dxqwol "
18043 ! write(iout,'(i5,3e15.5)') ii,(dxqwol(j,ii),j=1,3)
18045 ! Calculating numerical gradients of dU/dQi and dQi/dxi
18046 ! call qwol_num(ifrag(1,i,iset),ifrag(2,i,iset),.true.
18047 ! & ,idummy,idummy)
18048 ! The gradients of Uconst in Cs
18051 duconst(j,ii)=dUconst(j,ii)+ucdfrag*dqwol(j,ii)
18052 dUxconst(j,ii)=dUxconst(j,ii)+ucdfrag*dxqwol(j,ii)
18057 kstart=ifrag(1,ipair(1,i,iset),iset)
18058 kend=ifrag(2,ipair(1,i,iset),iset)
18059 lstart=ifrag(1,ipair(2,i,iset),iset)
18060 lend=ifrag(2,ipair(2,i,iset),iset)
18061 qpair(i)=qwolynes(kstart,kend,.false.,lstart,lend)
18062 Uconst=Uconst+wpair(i,iset)*harmonic(qpair(i),qinpair(i,iset))
18063 ! Calculating dU/dQ
18064 Ucdpair=wpair(i,iset)*harmonicprim(qpair(i),qinpair(i,iset))
18065 ! hm1=harmonic(qpair(i),qinpair(i,iset))
18066 ! hm2=harmonic(qpair(i)+delta,qinpair(i,iset))
18067 ! hmnum=(hm2-hm1)/delta
18068 ! write(iout,*) "harmonicprim pair ",harmonicprim(qpair(i),
18069 ! & qinpair(i,iset))
18070 ! write(iout,*) "harmonicnum pair ", hmnum
18071 ! Calculating dQ/dXi
18072 call qwolynes_prim(kstart,kend,.false.,&
18074 ! write(iout,*) "dqwol "
18076 ! write(iout,'(i5,3e15.5)') ii,(dqwol(j,ii),j=1,3)
18078 ! write(iout,*) "dxqwol "
18080 ! write(iout,'(i5,3e15.5)') ii,(dxqwol(j,ii),j=1,3)
18082 ! Calculating numerical gradients
18083 ! call qwol_num(kstart,kend,.false.
18085 ! The gradients of Uconst in Cs
18088 duconst(j,ii)=dUconst(j,ii)+ucdpair*dqwol(j,ii)
18089 dUxconst(j,ii)=dUxconst(j,ii)+ucdpair*dxqwol(j,ii)
18093 ! write(iout,*) "Uconst inside subroutine ", Uconst
18094 ! Transforming the gradients from Cs to dCs for the backbone
18098 dudconst(k,i)=dudconst(k,i)+duconst(k,j)+duxconst(k,j)
18102 ! Transforming the gradients from Cs to dCs for the side chains
18105 dudxconst(j,i)=duxconst(j,i)
18108 ! write(iout,*) "dU/ddc backbone "
18110 ! write(iout,'(i5,3e15.5)') ii, (dudconst(j,ii),j=1,3)
18112 ! write(iout,*) "dU/ddX side chain "
18114 ! write(iout,'(i5,3e15.5)') ii,(duxconst(j,ii),j=1,3)
18116 ! Calculating numerical gradients of dUconst/ddc and dUconst/ddx
18117 ! call dEconstrQ_num
18119 end subroutine EconstrQ
18120 !-----------------------------------------------------------------------------
18121 subroutine dEconstrQ_num
18122 ! Calculating numerical dUconst/ddc and dUconst/ddx
18123 ! implicit real*8 (a-h,o-z)
18124 ! include 'DIMENSIONS'
18125 ! include 'COMMON.CONTROL'
18126 ! include 'COMMON.VAR'
18127 ! include 'COMMON.MD'
18130 ! include 'COMMON.LANGEVIN'
18132 ! include 'COMMON.LANGEVIN.lang0'
18134 ! include 'COMMON.CHAIN'
18135 ! include 'COMMON.DERIV'
18136 ! include 'COMMON.GEO'
18137 ! include 'COMMON.LOCAL'
18138 ! include 'COMMON.INTERACT'
18139 ! include 'COMMON.IOUNITS'
18140 ! include 'COMMON.NAMES'
18141 ! include 'COMMON.TIME1'
18142 real(kind=8) :: uzap1,uzap2
18143 real(kind=8),dimension(3,0:nres) :: dUcartan,dUxcartan,cdummy
18144 integer :: kstart,kend,lstart,lend,idummy
18145 real(kind=8) :: delta=1.0d-7
18146 !el local variables
18152 dUcartan(j,i)=0.0d0
18153 cdummy(j,i)=dc(j,i)
18154 dc(j,i)=dc(j,i)+delta
18155 call chainbuild_cart
18158 qfrag(ii)=qwolynes(ifrag(1,ii,iset),ifrag(2,ii,iset),.true.,&
18160 uzap2=uzap2+wfrag(ii,iset)*harmonic(qfrag(ii),&
18164 kstart=ifrag(1,ipair(1,ii,iset),iset)
18165 kend=ifrag(2,ipair(1,ii,iset),iset)
18166 lstart=ifrag(1,ipair(2,ii,iset),iset)
18167 lend=ifrag(2,ipair(2,ii,iset),iset)
18168 qpair(ii)=qwolynes(kstart,kend,.false.,lstart,lend)
18169 uzap2=uzap2+wpair(ii,iset)*harmonic(qpair(ii),&
18172 dc(j,i)=cdummy(j,i)
18173 call chainbuild_cart
18176 qfrag(ii)=qwolynes(ifrag(1,ii,iset),ifrag(2,ii,iset),.true.,&
18178 uzap1=uzap1+wfrag(ii,iset)*harmonic(qfrag(ii),&
18182 kstart=ifrag(1,ipair(1,ii,iset),iset)
18183 kend=ifrag(2,ipair(1,ii,iset),iset)
18184 lstart=ifrag(1,ipair(2,ii,iset),iset)
18185 lend=ifrag(2,ipair(2,ii,iset),iset)
18186 qpair(ii)=qwolynes(kstart,kend,.false.,lstart,lend)
18187 uzap1=uzap1+wpair(ii,iset)*harmonic(qpair(ii),&
18190 ducartan(j,i)=(uzap2-uzap1)/(delta)
18193 ! Calculating numerical gradients for dU/ddx
18195 duxcartan(j,i)=0.0d0
18197 cdummy(j,i)=dc(j,i+nres)
18198 dc(j,i+nres)=dc(j,i+nres)+delta
18199 call chainbuild_cart
18202 qfrag(ii)=qwolynes(ifrag(1,ii,iset),ifrag(2,ii,iset),.true.,&
18204 uzap2=uzap2+wfrag(ii,iset)*harmonic(qfrag(ii),&
18208 kstart=ifrag(1,ipair(1,ii,iset),iset)
18209 kend=ifrag(2,ipair(1,ii,iset),iset)
18210 lstart=ifrag(1,ipair(2,ii,iset),iset)
18211 lend=ifrag(2,ipair(2,ii,iset),iset)
18212 qpair(ii)=qwolynes(kstart,kend,.false.,lstart,lend)
18213 uzap2=uzap2+wpair(ii,iset)*harmonic(qpair(ii),&
18216 dc(j,i+nres)=cdummy(j,i)
18217 call chainbuild_cart
18220 qfrag(ii)=qwolynes(ifrag(1,ii,iset),&
18221 ifrag(2,ii,iset),.true.,idummy,idummy)
18222 uzap1=uzap1+wfrag(ii,iset)*harmonic(qfrag(ii),&
18226 kstart=ifrag(1,ipair(1,ii,iset),iset)
18227 kend=ifrag(2,ipair(1,ii,iset),iset)
18228 lstart=ifrag(1,ipair(2,ii,iset),iset)
18229 lend=ifrag(2,ipair(2,ii,iset),iset)
18230 qpair(ii)=qwolynes(kstart,kend,.false.,lstart,lend)
18231 uzap1=uzap1+wpair(ii,iset)*harmonic(qpair(ii),&
18234 duxcartan(j,i)=(uzap2-uzap1)/(delta)
18237 write(iout,*) "Numerical dUconst/ddc backbone "
18239 write(iout,'(i5,3e15.5)') ii,(dUcartan(j,ii),j=1,3)
18241 ! write(iout,*) "Numerical dUconst/ddx side-chain "
18243 ! write(iout,'(i5,3e15.5)') ii,(dUxcartan(j,ii),j=1,3)
18246 end subroutine dEconstrQ_num
18247 !-----------------------------------------------------------------------------
18249 !-----------------------------------------------------------------------------
18250 subroutine check_energies
18252 ! use random, only: ran_number
18256 ! include 'DIMENSIONS'
18257 ! include 'COMMON.CHAIN'
18258 ! include 'COMMON.VAR'
18259 ! include 'COMMON.IOUNITS'
18260 ! include 'COMMON.SBRIDGE'
18261 ! include 'COMMON.LOCAL'
18262 ! include 'COMMON.GEO'
18264 ! External functions
18265 !EL double precision ran_number
18266 !EL external ran_number
18269 integer :: i,j,k,l,lmax,p,pmax
18270 real(kind=8) :: rmin,rmax
18271 real(kind=8) :: eij
18274 real(kind=8) :: wi,rij,tj,pj
18296 !t wi=ran_number(0.0D0,pi)
18297 ! wi=ran_number(0.0D0,pi/6.0D0)
18299 !t tj=ran_number(0.0D0,pi)
18300 !t pj=ran_number(0.0D0,pi)
18301 ! pj=ran_number(0.0D0,pi/6.0D0)
18305 !t rij=ran_number(rmin,rmax)
18307 c(1,j)=d*sin(pj)*cos(tj)
18308 c(2,j)=d*sin(pj)*sin(tj)
18314 c(3,i)=-rij-d*cos(wi)
18317 dc(k,nres+i)=c(k,nres+i)-c(k,i)
18318 dc_norm(k,nres+i)=dc(k,nres+i)/d
18319 dc(k,nres+j)=c(k,nres+j)-c(k,j)
18320 dc_norm(k,nres+j)=dc(k,nres+j)/d
18323 call dyn_ssbond_ene(i,j,eij)
18328 end subroutine check_energies
18329 !-----------------------------------------------------------------------------
18330 subroutine dyn_ssbond_ene(resi,resj,eij)
18335 ! include 'DIMENSIONS'
18336 ! include 'COMMON.SBRIDGE'
18337 ! include 'COMMON.CHAIN'
18338 ! include 'COMMON.DERIV'
18339 ! include 'COMMON.LOCAL'
18340 ! include 'COMMON.INTERACT'
18341 ! include 'COMMON.VAR'
18342 ! include 'COMMON.IOUNITS'
18343 ! include 'COMMON.CALC'
18347 ! include 'COMMON.MD'
18348 ! use MD, only: totT,t_bath
18351 ! External functions
18352 !EL double precision h_base
18353 !EL external h_base
18356 integer :: resi,resj
18359 real(kind=8) :: eij
18362 logical :: havebond
18363 integer itypi,itypj
18364 real(kind=8) :: rrij,ssd,deltat1,deltat2,deltat12,cosphi
18365 real(kind=8) :: sig0ij,ljd,sig,fac,e1,e2
18366 real(kind=8),dimension(3) :: dcosom1,dcosom2
18368 real(kind=8) :: pom1,pom2
18369 real(kind=8) :: ljA,ljB,ljXs
18370 real(kind=8),dimension(1:3) :: d_ljB
18371 real(kind=8) :: ssA,ssB,ssC,ssXs
18372 real(kind=8) :: ssxm,ljxm,ssm,ljm
18373 real(kind=8),dimension(1:3) :: d_ssxm,d_ljxm,d_ssm,d_ljm
18374 real(kind=8) :: f1,f2,h1,h2,hd1,hd2
18375 real(kind=8) :: omega,delta_inv,deltasq_inv,fac1,fac2
18376 !-------FIRST METHOD
18378 real(kind=8),dimension(1:3) :: d_xm
18379 !-------END FIRST METHOD
18380 !-------SECOND METHOD
18381 !$$$ double precision ss,d_ss(0:3),ljf,d_ljf(0:3)
18382 !-------END SECOND METHOD
18384 !-------TESTING CODE
18385 !el logical :: checkstop,transgrad
18386 !el common /sschecks/ checkstop,transgrad
18388 integer :: icheck,nicheck,jcheck,njcheck
18389 real(kind=8),dimension(-1:1) :: echeck
18390 real(kind=8) :: deps,ssx0,ljx0
18391 !-------END TESTING CODE
18397 !el allocate(dyn_ssbond_ij(iatsc_s:iatsc_e,nres))
18398 !el allocate(dyn_ssbond_ij(0:nres+4,nres))
18401 dxi=dc_norm(1,nres+i)
18402 dyi=dc_norm(2,nres+i)
18403 dzi=dc_norm(3,nres+i)
18404 dsci_inv=vbld_inv(i+nres)
18407 xj=c(1,nres+j)-c(1,nres+i)
18408 yj=c(2,nres+j)-c(2,nres+i)
18409 zj=c(3,nres+j)-c(3,nres+i)
18410 dxj=dc_norm(1,nres+j)
18411 dyj=dc_norm(2,nres+j)
18412 dzj=dc_norm(3,nres+j)
18413 dscj_inv=vbld_inv(j+nres)
18415 chi1=chi(itypi,itypj)
18416 chi2=chi(itypj,itypi)
18423 alf12=0.5D0*(alf1+alf2)
18425 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
18426 rij=dsqrt(rrij) ! sc_angular needs rij to really be the inverse
18427 ! The following are set in sc_angular
18431 ! om1=dxi*erij(1)+dyi*erij(2)+dzi*erij(3)
18432 ! om2=dxj*erij(1)+dyj*erij(2)+dzj*erij(3)
18433 ! om12=dxi*dxj+dyi*dyj+dzi*dzj
18435 rij=1.0D0/rij ! Reset this so it makes sense
18437 sig0ij=sigma(itypi,itypj)
18438 sig=sig0ij*dsqrt(1.0D0/sigsq)
18441 ljA=eps1*eps2rt**2*eps3rt**2
18442 ljB=ljA*bb_aq(itypi,itypj)
18443 ljA=ljA*aa_aq(itypi,itypj)
18444 ljxm=ljXs+(-2.0D0*aa_aq(itypi,itypj)/bb_aq(itypi,itypj))**(1.0D0/6.0D0)
18449 deltat12=om2-om1+2.0d0
18450 cosphi=om12-om1*om2
18454 +akth*(deltat1*deltat1+deltat2*deltat2) &
18455 +v1ss*cosphi+v2ss*cosphi*cosphi+v3ss*cosphi*cosphi*cosphi
18456 ssxm=ssXs-0.5D0*ssB/ssA
18458 !-------TESTING CODE
18459 !$$$c Some extra output
18460 !$$$ ssm=ssC-0.25D0*ssB*ssB/ssA
18461 !$$$ ljm=-0.25D0*ljB*bb(itypi,itypj)/aa(itypi,itypj)
18462 !$$$ ssx0=ssB*ssB-4.0d0*ssA*ssC
18463 !$$$ if (ssx0.gt.0.0d0) then
18464 !$$$ ssx0=ssXs+0.5d0*(-ssB+sqrt(ssx0))/ssA
18468 !$$$ ljx0=ljXs+(-aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
18469 !$$$ write(iout,'(a,4f8.2,2f15.2,3f6.2)')"SSENERGIES ",
18470 !$$$ & ssxm,ljxm,ssx0,ljx0,ssm,ljm,om1,om2,om12
18472 !-------END TESTING CODE
18474 !-------TESTING CODE
18475 ! Stop and plot energy and derivative as a function of distance
18476 if (checkstop) then
18477 ssm=ssC-0.25D0*ssB*ssB/ssA
18478 ljm=-0.25D0*ljB*bb_aq(itypi,itypj)/aa_aq(itypi,itypj)
18479 if (ssm.lt.ljm .and. &
18480 dabs(rij-0.5d0*(ssxm+ljxm)).lt.0.35d0*(ljxm-ssxm)) then
18488 if (.not.checkstop) then
18493 do icheck=0,nicheck
18494 do jcheck=-1,njcheck
18495 if (checkstop) rij=(ssxm-1.0d0)+ &
18496 ((ljxm-ssxm+2.0d0)*icheck)/nicheck+jcheck*deps
18497 !-------END TESTING CODE
18499 if (rij.gt.ljxm) then
18502 fac=(1.0D0/ljd)**expon
18503 e1=fac*fac*aa_aq(itypi,itypj)
18504 e2=fac*bb_aq(itypi,itypj)
18505 eij=eps1*eps2rt*eps3rt*(e1+e2)
18508 eij=eij*eps2rt*eps3rt
18511 e1=e1*eps1*eps2rt**2*eps3rt**2
18512 ed=-expon*(e1+eij)/ljd
18514 eom1=eps2der*eps2rt_om1-2.0D0*alf1*eps3der+sigder*sigsq_om1
18515 eom2=eps2der*eps2rt_om2+2.0D0*alf2*eps3der+sigder*sigsq_om2
18516 eom12=eij*eps1_om12+eps2der*eps2rt_om12 &
18517 -2.0D0*alf12*eps3der+sigder*sigsq_om12
18518 else if (rij.lt.ssxm) then
18521 eij=ssA*ssd*ssd+ssB*ssd+ssC
18523 ed=2*akcm*ssd+akct*deltat12
18525 pom2=v1ss+2*v2ss*cosphi+3*v3ss*cosphi*cosphi
18526 eom1=-2*akth*deltat1-pom1-om2*pom2
18527 eom2= 2*akth*deltat2+pom1-om1*pom2
18530 omega=v1ss+2.0d0*v2ss*cosphi+3.0d0*v3ss*cosphi*cosphi
18532 d_ssxm(1)=0.5D0*akct/ssA
18533 d_ssxm(2)=-d_ssxm(1)
18536 d_ljxm(1)=sig0ij/sqrt(sigsq**3)
18537 d_ljxm(2)=d_ljxm(1)*sigsq_om2
18538 d_ljxm(3)=d_ljxm(1)*sigsq_om12
18539 d_ljxm(1)=d_ljxm(1)*sigsq_om1
18541 !-------FIRST METHOD, DISCONTINUOUS SECOND DERIVATIVE
18542 xm=0.5d0*(ssxm+ljxm)
18544 d_xm(k)=0.5d0*(d_ssxm(k)+d_ljxm(k))
18546 if (rij.lt.xm) then
18548 ssm=ssC-0.25D0*ssB*ssB/ssA
18549 d_ssm(1)=0.5D0*akct*ssB/ssA
18550 d_ssm(2)=2.0D0*akth*deltat2-om1*omega-d_ssm(1)
18551 d_ssm(1)=-2.0D0*akth*deltat1-om2*omega+d_ssm(1)
18553 f1=(rij-xm)/(ssxm-xm)
18554 f2=(rij-ssxm)/(xm-ssxm)
18558 delta_inv=1.0d0/(xm-ssxm)
18559 deltasq_inv=delta_inv*delta_inv
18561 fac1=deltasq_inv*fac*(xm-rij)
18562 fac2=deltasq_inv*fac*(rij-ssxm)
18563 ed=delta_inv*(Ht*hd2-ssm*hd1)
18564 eom1=fac1*d_ssxm(1)+fac2*d_xm(1)+h1*d_ssm(1)
18565 eom2=fac1*d_ssxm(2)+fac2*d_xm(2)+h1*d_ssm(2)
18566 eom12=fac1*d_ssxm(3)+fac2*d_xm(3)+h1*d_ssm(3)
18569 ljm=-0.25D0*ljB*bb_aq(itypi,itypj)/aa_aq(itypi,itypj)
18570 d_ljm(1)=-0.5D0*bb_aq(itypi,itypj)/aa_aq(itypi,itypj)*ljB
18571 d_ljm(2)=d_ljm(1)*(0.5D0*eps2rt_om2/eps2rt+alf2/eps3rt)
18572 d_ljm(3)=d_ljm(1)*(0.5D0*eps1_om12+0.5D0*eps2rt_om12/eps2rt- &
18574 d_ljm(1)=d_ljm(1)*(0.5D0*eps2rt_om1/eps2rt-alf1/eps3rt)
18575 f1=(rij-ljxm)/(xm-ljxm)
18576 f2=(rij-xm)/(ljxm-xm)
18580 delta_inv=1.0d0/(ljxm-xm)
18581 deltasq_inv=delta_inv*delta_inv
18583 fac1=deltasq_inv*fac*(ljxm-rij)
18584 fac2=deltasq_inv*fac*(rij-xm)
18585 ed=delta_inv*(ljm*hd2-Ht*hd1)
18586 eom1=fac1*d_xm(1)+fac2*d_ljxm(1)+h2*d_ljm(1)
18587 eom2=fac1*d_xm(2)+fac2*d_ljxm(2)+h2*d_ljm(2)
18588 eom12=fac1*d_xm(3)+fac2*d_ljxm(3)+h2*d_ljm(3)
18590 !-------END FIRST METHOD, DISCONTINUOUS SECOND DERIVATIVE
18592 !-------SECOND METHOD, CONTINUOUS SECOND DERIVATIVE
18598 !$$$ d_ljB(1)=ljB*(eps2rt_om1/eps2rt-2.0d0*alf1/eps3rt)
18599 !$$$ d_ljB(2)=ljB*(eps2rt_om2/eps2rt+2.0d0*alf2/eps3rt)
18600 !$$$ d_ljB(3)=ljB*(eps1_om12+eps2rt_om12/eps2rt-2.0d0*alf12/eps3rt)
18602 !$$$ ssm=ssC-0.25D0*ssB*ssB/ssA
18603 !$$$ d_ssm(1)=0.5D0*akct*ssB/ssA
18604 !$$$ d_ssm(2)=2.0D0*akth*deltat2-om1*omega-d_ssm(1)
18605 !$$$ d_ssm(1)=-2.0D0*akth*deltat1-om2*omega+d_ssm(1)
18606 !$$$ d_ssm(3)=omega
18608 !$$$ ljm=-0.25D0*bb(itypi,itypj)/aa(itypi,itypj)
18610 !$$$ d_ljm(k)=ljm*d_ljB(k)
18614 !$$$ ss=ssA*ssd*ssd+ssB*ssd+ssC
18615 !$$$ d_ss(0)=2.0d0*ssA*ssd+ssB
18616 !$$$ d_ss(2)=akct*ssd
18617 !$$$ d_ss(1)=-d_ss(2)-2.0d0*akth*deltat1-om2*omega
18618 !$$$ d_ss(2)=d_ss(2)+2.0d0*akth*deltat2-om1*omega
18621 !$$$ ljf=bb(itypi,itypj)/aa(itypi,itypj)
18622 !$$$ ljf=9.0d0*ljf*(-0.5d0*ljf)**(1.0d0/3.0d0)
18623 !$$$ d_ljf(0)=ljf*2.0d0*ljB*fac1
18625 !$$$ d_ljf(k)=d_ljm(k)+ljf*(d_ljB(k)*fac1*fac1-
18626 !$$$ & 2.0d0*ljB*fac1*d_ljxm(k))
18628 !$$$ ljf=ljm+ljf*ljB*fac1*fac1
18630 !$$$ f1=(rij-ljxm)/(ssxm-ljxm)
18631 !$$$ f2=(rij-ssxm)/(ljxm-ssxm)
18632 !$$$ h1=h_base(f1,hd1)
18633 !$$$ h2=h_base(f2,hd2)
18634 !$$$ eij=ss*h1+ljf*h2
18635 !$$$ delta_inv=1.0d0/(ljxm-ssxm)
18636 !$$$ deltasq_inv=delta_inv*delta_inv
18637 !$$$ fac=ljf*hd2-ss*hd1
18638 !$$$ ed=d_ss(0)*h1+d_ljf(0)*h2+delta_inv*fac
18639 !$$$ eom1=d_ss(1)*h1+d_ljf(1)*h2+deltasq_inv*fac*
18640 !$$$ & (fac1*d_ssxm(1)-fac2*(d_ljxm(1)))
18641 !$$$ eom2=d_ss(2)*h1+d_ljf(2)*h2+deltasq_inv*fac*
18642 !$$$ & (fac1*d_ssxm(2)-fac2*(d_ljxm(2)))
18643 !$$$ eom12=d_ss(3)*h1+d_ljf(3)*h2+deltasq_inv*fac*
18644 !$$$ & (fac1*d_ssxm(3)-fac2*(d_ljxm(3)))
18646 !$$$ havebond=.false.
18647 !$$$ if (ed.gt.0.0d0) havebond=.true.
18648 !-------END SECOND METHOD, CONTINUOUS SECOND DERIVATIVE
18655 ! if (dyn_ssbond_ij(i,j).eq.1.0d300) then
18656 ! write(iout,'(a15,f12.2,f8.1,2i5)')
18657 ! & "SSBOND_E_FORM",totT,t_bath,i,j
18661 dyn_ssbond_ij(i,j)=eij
18662 else if (.not.havebond .and. dyn_ssbond_ij(i,j).lt.1.0d300) then
18663 dyn_ssbond_ij(i,j)=1.0d300
18666 ! write(iout,'(a15,f12.2,f8.1,2i5)')
18667 ! & "SSBOND_E_BREAK",totT,t_bath,i,j
18672 !-------TESTING CODE
18673 !el if (checkstop) then
18674 if (jcheck.eq.0) write(iout,'(a,3f15.8,$)') &
18675 "CHECKSTOP",rij,eij,ed
18679 if (checkstop) then
18680 write(iout,'(f15.8)')(echeck(1)-echeck(-1))*0.5d0/deps
18683 if (checkstop) then
18687 !-------END TESTING CODE
18690 dcosom1(k)=(dc_norm(k,nres+i)-om1*erij(k))/rij
18691 dcosom2(k)=(dc_norm(k,nres+j)-om2*erij(k))/rij
18694 gg(k)=ed*erij(k)+eom1*dcosom1(k)+eom2*dcosom2(k)
18697 gvdwx(k,i)=gvdwx(k,i)-gg(k) &
18698 +(eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,nres+i)) &
18699 +eom1*(erij(k)-om1*dc_norm(k,nres+i)))*dsci_inv
18700 gvdwx(k,j)=gvdwx(k,j)+gg(k) &
18701 +(eom12*(dc_norm(k,nres+i)-om12*dc_norm(k,nres+j)) &
18702 +eom2*(erij(k)-om2*dc_norm(k,nres+j)))*dscj_inv
18706 !grad gvdwc(l,k)=gvdwc(l,k)+gg(l)
18711 gvdwc(l,i)=gvdwc(l,i)-gg(l)
18712 gvdwc(l,j)=gvdwc(l,j)+gg(l)
18716 end subroutine dyn_ssbond_ene
18717 !--------------------------------------------------------------------------
18718 subroutine triple_ssbond_ene(resi,resj,resk,eij)
18723 ! include 'DIMENSIONS'
18724 ! include 'COMMON.SBRIDGE'
18725 ! include 'COMMON.CHAIN'
18726 ! include 'COMMON.DERIV'
18727 ! include 'COMMON.LOCAL'
18728 ! include 'COMMON.INTERACT'
18729 ! include 'COMMON.VAR'
18730 ! include 'COMMON.IOUNITS'
18731 ! include 'COMMON.CALC'
18735 ! include 'COMMON.MD'
18736 ! use MD, only: totT,t_bath
18739 double precision h_base
18743 integer resi,resj,resk,m,itypi,itypj,itypk
18745 !c Output arguments
18746 double precision eij,eij1,eij2,eij3
18750 !c integer itypi,itypj,k,l
18751 double precision rrij,ssd,deltat1,deltat2,deltat12,cosphi
18752 double precision rrik,rrjk,rik,rjk,xi,xk,yi,yk,zi,zk,xij,yij,zij
18753 double precision xik,yik,zik,xjk,yjk,zjk,dxk,dyk,dzk
18754 double precision sig0ij,ljd,sig,fac,e1,e2
18755 double precision dcosom1(3),dcosom2(3),ed
18756 double precision pom1,pom2
18757 double precision ljA,ljB,ljXs
18758 double precision d_ljB(1:3)
18759 double precision ssA,ssB,ssC,ssXs
18760 double precision ssxm,ljxm,ssm,ljm
18761 double precision d_ssxm(1:3),d_ljxm(1:3),d_ssm(1:3),d_ljm(1:3)
18763 if (dtriss.eq.0) return
18767 !C write(iout,*) resi,resj,resk
18769 dxi=dc_norm(1,nres+i)
18770 dyi=dc_norm(2,nres+i)
18771 dzi=dc_norm(3,nres+i)
18772 dsci_inv=vbld_inv(i+nres)
18776 call to_box(xi,yi,zi)
18781 call to_box(xj,yj,zj)
18782 dxj=dc_norm(1,nres+j)
18783 dyj=dc_norm(2,nres+j)
18784 dzj=dc_norm(3,nres+j)
18785 dscj_inv=vbld_inv(j+nres)
18790 call to_box(xk,yk,zk)
18791 dxk=dc_norm(1,nres+k)
18792 dyk=dc_norm(2,nres+k)
18793 dzk=dc_norm(3,nres+k)
18794 dscj_inv=vbld_inv(k+nres)
18804 rrij=(xij*xij+yij*yij+zij*zij)
18805 rij=dsqrt(rrij) ! sc_angular needs rij to really be the inverse
18806 rrik=(xik*xik+yik*yik+zik*zik)
18808 rrjk=(xjk*xjk+yjk*yjk+zjk*zjk)
18810 !C there are three combination of distances for each trisulfide bonds
18811 !C The first case the ith atom is the center
18812 !C Energy function is E=d/(a*(x-y)**2+b*(x+y)**2+c) where x is first
18813 !C distance y is second distance the a,b,c,d are parameters derived for
18814 !C this problem d parameter was set as a penalty currenlty set to 1.
18815 if ((iabs(j-i).le.2).or.(iabs(i-k).le.2)) then
18818 eij1=dtriss/(atriss*(rij-rik)**2+btriss*(rij+rik)**6+ctriss)
18820 !C second case jth atom is center
18821 if ((iabs(j-i).le.2).or.(iabs(j-k).le.2)) then
18824 eij2=dtriss/(atriss*(rij-rjk)**2+btriss*(rij+rjk)**6+ctriss)
18826 !C the third case kth atom is the center
18827 if ((iabs(i-k).le.2).or.(iabs(j-k).le.2)) then
18830 eij3=dtriss/(atriss*(rik-rjk)**2+btriss*(rik+rjk)**6+ctriss)
18836 !C write(iout,*)i,j,k,eij
18837 !C The energy penalty calculated now time for the gradient part
18838 !C derivative over rij
18839 fac=-eij1**2/dtriss*(2.0*atriss*(rij-rik)+6.0*btriss*(rij+rik)**5) &
18840 -eij2**2/dtriss*(2.0*atriss*(rij-rjk)+6.0*btriss*(rij+rjk)**5)
18845 gvdwx(m,i)=gvdwx(m,i)-gg(m)
18846 gvdwx(m,j)=gvdwx(m,j)+gg(m)
18850 gvdwc(l,i)=gvdwc(l,i)-gg(l)
18851 gvdwc(l,j)=gvdwc(l,j)+gg(l)
18853 !C now derivative over rik
18854 fac=-eij1**2/dtriss* &
18855 (-2.0*atriss*(rij-rik)+6.0*btriss*(rij+rik)**5) &
18856 -eij3**2/dtriss*(2.0*atriss*(rik-rjk)+6.0*btriss*(rik+rjk)**5)
18861 gvdwx(m,i)=gvdwx(m,i)-gg(m)
18862 gvdwx(m,k)=gvdwx(m,k)+gg(m)
18865 gvdwc(l,i)=gvdwc(l,i)-gg(l)
18866 gvdwc(l,k)=gvdwc(l,k)+gg(l)
18868 !C now derivative over rjk
18869 fac=-eij2**2/dtriss* &
18870 (-2.0*atriss*(rij-rjk)+6.0*btriss*(rij+rjk)**5)- &
18871 eij3**2/dtriss*(-2.0*atriss*(rik-rjk)+6.0*btriss*(rik+rjk)**5)
18876 gvdwx(m,j)=gvdwx(m,j)-gg(m)
18877 gvdwx(m,k)=gvdwx(m,k)+gg(m)
18880 gvdwc(l,j)=gvdwc(l,j)-gg(l)
18881 gvdwc(l,k)=gvdwc(l,k)+gg(l)
18884 end subroutine triple_ssbond_ene
18888 !-----------------------------------------------------------------------------
18889 real(kind=8) function h_base(x,deriv)
18890 ! A smooth function going 0->1 in range [0,1]
18891 ! It should NOT be called outside range [0,1], it will not work there.
18898 real(kind=8) :: deriv
18901 real(kind=8) :: xsq
18904 ! Two parabolas put together. First derivative zero at extrema
18905 !$$$ if (x.lt.0.5D0) then
18906 !$$$ h_base=2.0D0*x*x
18910 !$$$ h_base=1.0D0-2.0D0*deriv*deriv
18911 !$$$ deriv=4.0D0*deriv
18914 ! Third degree polynomial. First derivative zero at extrema
18915 h_base=x*x*(3.0d0-2.0d0*x)
18916 deriv=6.0d0*x*(1.0d0-x)
18918 ! Fifth degree polynomial. First and second derivatives zero at extrema
18920 !$$$ h_base=x*xsq*(6.0d0*xsq-15.0d0*x+10.0d0)
18922 !$$$ deriv=deriv*deriv
18923 !$$$ deriv=30.0d0*xsq*deriv
18926 end function h_base
18927 !-----------------------------------------------------------------------------
18928 subroutine dyn_set_nss
18929 ! Adjust nss and other relevant variables based on dyn_ssbond_ij
18931 use MD_data, only: totT,t_bath
18933 ! include 'DIMENSIONS'
18937 ! include 'COMMON.SBRIDGE'
18938 ! include 'COMMON.CHAIN'
18939 ! include 'COMMON.IOUNITS'
18940 ! include 'COMMON.SETUP'
18941 ! include 'COMMON.MD'
18943 real(kind=8) :: emin
18944 integer :: i,j,imin,ierr
18945 integer :: diff,allnss,newnss
18946 integer,dimension(maxdim) :: allflag,allihpb,alljhpb,& !(maxdim)(maxdim=(maxres-1)*(maxres-2)/2)
18949 integer,dimension(0:nfgtasks) :: i_newnss
18950 integer,dimension(0:nfgtasks) :: displ
18951 integer,dimension(maxdim) :: g_newihpb,g_newjhpb !(maxdim)(maxdim=(maxres-1)*(maxres-2)/2)
18952 integer :: g_newnss
18957 if (dyn_ssbond_ij(i,j).lt.1.0d300) then
18966 !mc write(iout,*)"ALLNSS ",allnss,(allihpb(i),alljhpb(i),i=1,allnss)
18970 if (allflag(i).eq.0 .and. &
18971 dyn_ssbond_ij(allihpb(i),alljhpb(i)).lt.emin) then
18972 emin=dyn_ssbond_ij(allihpb(i),alljhpb(i))
18976 if (emin.lt.1.0d300) then
18979 if (allflag(i).eq.0 .and. &
18980 (allihpb(i).eq.allihpb(imin) .or. &
18981 alljhpb(i).eq.allihpb(imin) .or. &
18982 allihpb(i).eq.alljhpb(imin) .or. &
18983 alljhpb(i).eq.alljhpb(imin))) then
18990 !mc write(iout,*)"ALLNSS ",allnss,(allihpb(i),alljhpb(i),i=1,allnss)
18994 if (allflag(i).eq.1) then
18996 newihpb(newnss)=allihpb(i)
18997 newjhpb(newnss)=alljhpb(i)
19002 if (nfgtasks.gt.1)then
19004 call MPI_Reduce(newnss,g_newnss,1,&
19005 MPI_INTEGER,MPI_SUM,king,FG_COMM,IERR)
19006 call MPI_Gather(newnss,1,MPI_INTEGER,&
19007 i_newnss,1,MPI_INTEGER,king,FG_COMM,IERR)
19009 do i=1,nfgtasks-1,1
19010 displ(i)=i_newnss(i-1)+displ(i-1)
19012 call MPI_Gatherv(newihpb,newnss,MPI_INTEGER,&
19013 g_newihpb,i_newnss,displ,MPI_INTEGER,&
19015 call MPI_Gatherv(newjhpb,newnss,MPI_INTEGER,&
19016 g_newjhpb,i_newnss,displ,MPI_INTEGER,&
19018 if(fg_rank.eq.0) then
19019 ! print *,'g_newnss',g_newnss
19020 ! print *,'g_newihpb',(g_newihpb(i),i=1,g_newnss)
19021 ! print *,'g_newjhpb',(g_newjhpb(i),i=1,g_newnss)
19024 newihpb(i)=g_newihpb(i)
19025 newjhpb(i)=g_newjhpb(i)
19033 !mc write(iout,*)"NEWNSS ",newnss,(newihpb(i),newjhpb(i),i=1,newnss)
19034 ! print *,newnss,nss,maxdim
19040 if (idssb(i).eq.newihpb(j) .and. &
19041 jdssb(i).eq.newjhpb(j)) found=.true.
19045 ! write(iout,*) "found",found,i,j
19046 if (.not.found.and.fg_rank.eq.0) &
19047 write(iout,'(a15,f12.2,f8.1,2i5)') &
19048 "SSBOND_BREAK",totT,t_bath,idssb(i),jdssb(i)
19057 if (newihpb(i).eq.idssb(j) .and. &
19058 newjhpb(i).eq.jdssb(j)) found=.true.
19062 ! write(iout,*) "found",found,i,j
19063 if (.not.found.and.fg_rank.eq.0) &
19064 write(iout,'(a15,f12.2,f8.1,2i5)') &
19065 "SSBOND_FORM",totT,t_bath,newihpb(i),newjhpb(i)
19072 idssb(i)=newihpb(i)
19073 jdssb(i)=newjhpb(i)
19077 end subroutine dyn_set_nss
19078 ! Lipid transfer energy function
19079 subroutine Eliptransfer(eliptran)
19080 !C this is done by Adasko
19081 !C print *,"wchodze"
19082 !C structure of box:
19084 !C--bordliptop-- buffore starts
19085 !C--bufliptop--- here true lipid starts
19087 !C--buflipbot--- lipid ends buffore starts
19088 !C--bordlipbot--buffore ends
19089 real(kind=8) :: fracinbuf,eliptran,sslip,positi,ssgradlip
19092 ! print *, "I am in eliptran"
19093 do i=ilip_start,ilip_end
19095 if ((itype(i,1).eq.ntyp1).or.(itype(i+1,1).eq.ntyp1).or.(i.eq.nres))&
19098 positi=(mod(((c(3,i)+c(3,i+1))/2.0d0),boxzsize))
19099 if (positi.le.0.0) positi=positi+boxzsize
19101 !C first for peptide groups
19102 !c for each residue check if it is in lipid or lipid water border area
19103 if ((positi.gt.bordlipbot) &
19104 .and.(positi.lt.bordliptop)) then
19105 !C the energy transfer exist
19106 if (positi.lt.buflipbot) then
19107 !C what fraction I am in
19109 ((positi-bordlipbot)/lipbufthick)
19110 !C lipbufthick is thickenes of lipid buffore
19111 sslip=sscalelip(fracinbuf)
19112 ssgradlip=-sscagradlip(fracinbuf)/lipbufthick
19113 eliptran=eliptran+sslip*pepliptran
19114 gliptranc(3,i)=gliptranc(3,i)+ssgradlip*pepliptran/2.0d0
19115 gliptranc(3,i-1)=gliptranc(3,i-1)+ssgradlip*pepliptran/2.0d0
19116 !C gliptranc(3,i-2)=gliptranc(3,i)+ssgradlip*pepliptran
19118 !C print *,"doing sccale for lower part"
19119 !C print *,i,sslip,fracinbuf,ssgradlip
19120 elseif (positi.gt.bufliptop) then
19121 fracinbuf=1.0d0-((bordliptop-positi)/lipbufthick)
19122 sslip=sscalelip(fracinbuf)
19123 ssgradlip=sscagradlip(fracinbuf)/lipbufthick
19124 eliptran=eliptran+sslip*pepliptran
19125 gliptranc(3,i)=gliptranc(3,i)+ssgradlip*pepliptran/2.0d0
19126 gliptranc(3,i-1)=gliptranc(3,i-1)+ssgradlip*pepliptran/2.0d0
19127 !C gliptranc(3,i-2)=gliptranc(3,i)+ssgradlip*pepliptran
19128 !C print *, "doing sscalefor top part"
19129 !C print *,i,sslip,fracinbuf,ssgradlip
19131 eliptran=eliptran+pepliptran
19132 !C print *,"I am in true lipid"
19135 !C eliptran=elpitran+0.0 ! I am in water
19137 if (energy_dec) write(iout,*) i,"eliptran=",eliptran,positi,sslip
19139 ! here starts the side chain transfer
19140 do i=ilip_start,ilip_end
19141 if (itype(i,1).eq.ntyp1) cycle
19142 positi=(mod(c(3,i+nres),boxzsize))
19143 if (positi.le.0) positi=positi+boxzsize
19144 !C print *,mod(c(3,i+nres),boxzsize),bordlipbot,bordliptop
19145 !c for each residue check if it is in lipid or lipid water border area
19146 !C respos=mod(c(3,i+nres),boxzsize)
19147 !C print *,positi,bordlipbot,buflipbot
19148 if ((positi.gt.bordlipbot) &
19149 .and.(positi.lt.bordliptop)) then
19150 !C the energy transfer exist
19151 if (positi.lt.buflipbot) then
19153 ((positi-bordlipbot)/lipbufthick)
19154 !C lipbufthick is thickenes of lipid buffore
19155 sslip=sscalelip(fracinbuf)
19156 ssgradlip=-sscagradlip(fracinbuf)/lipbufthick
19157 eliptran=eliptran+sslip*liptranene(itype(i,1))
19158 gliptranx(3,i)=gliptranx(3,i) &
19159 +ssgradlip*liptranene(itype(i,1))
19160 gliptranc(3,i-1)= gliptranc(3,i-1) &
19161 +ssgradlip*liptranene(itype(i,1))
19162 !C print *,"doing sccale for lower part"
19163 elseif (positi.gt.bufliptop) then
19165 ((bordliptop-positi)/lipbufthick)
19166 sslip=sscalelip(fracinbuf)
19167 ssgradlip=sscagradlip(fracinbuf)/lipbufthick
19168 eliptran=eliptran+sslip*liptranene(itype(i,1))
19169 gliptranx(3,i)=gliptranx(3,i) &
19170 +ssgradlip*liptranene(itype(i,1))
19171 gliptranc(3,i-1)= gliptranc(3,i-1) &
19172 +ssgradlip*liptranene(itype(i,1))
19173 !C print *, "doing sscalefor top part",sslip,fracinbuf
19175 eliptran=eliptran+liptranene(itype(i,1))
19176 !C print *,"I am in true lipid"
19178 endif ! if in lipid or buffor
19180 !C eliptran=elpitran+0.0 ! I am in water
19181 if (energy_dec) write(iout,*) i,"eliptran=",eliptran
19184 end subroutine Eliptransfer
19185 !----------------------------------NANO FUNCTIONS
19186 !C-----------------------------------------------------------------------
19187 !C-----------------------------------------------------------
19188 !C This subroutine is to mimic the histone like structure but as well can be
19189 !C utilizet to nanostructures (infinit) small modification has to be used to
19190 !C make it finite (z gradient at the ends has to be changes as well as the x,y
19191 !C gradient has to be modified at the ends
19192 !C The energy function is Kihara potential
19193 !C E=4esp*((sigma/(r-r0))^12 - (sigma/(r-r0))^6)
19194 !C 4eps is depth of well sigma is r_minimum r is distance from center of tube
19195 !C and r0 is the excluded size of nanotube (can be set to 0 if we want just a
19196 !C simple Kihara potential
19197 subroutine calctube(Etube)
19198 real(kind=8),dimension(3) :: vectube
19199 real(kind=8) :: Etube,xtemp,xminact,yminact,&
19200 ytemp,xmin,ymin,tub_r,rdiff,rdiff6,fac,positi, &
19201 sc_aa_tube,sc_bb_tube
19204 do i=itube_start,itube_end
19206 enetube(i+nres)=0.0d0
19208 !C first we calculate the distance from tube center
19210 do i=itube_start,itube_end
19211 !C lets ommit dummy atoms for now
19212 if ((itype(i,1).eq.ntyp1).or.(itype(i+1,1).eq.ntyp1)) cycle
19213 !C now calculate distance from center of tube and direction vectors
19216 ! Find minimum distance in periodic box
19218 vectube(1)=mod((c(1,i)+c(1,i+1))/2.0d0,boxxsize)
19219 vectube(1)=vectube(1)+boxxsize*j
19220 vectube(2)=mod((c(2,i)+c(2,i+1))/2.0d0,boxysize)
19221 vectube(2)=vectube(2)+boxysize*j
19222 xminact=abs(vectube(1)-tubecenter(1))
19223 yminact=abs(vectube(2)-tubecenter(2))
19224 if (xmin.gt.xminact) then
19228 if (ymin.gt.yminact) then
19235 vectube(1)=vectube(1)-tubecenter(1)
19236 vectube(2)=vectube(2)-tubecenter(2)
19238 !C print *,"x",(c(1,i)+c(1,i+1))/2.0d0,tubecenter(1)
19239 !C print *,"y",(c(2,i)+c(2,i+1))/2.0d0,tubecenter(2)
19241 !C as the tube is infinity we do not calculate the Z-vector use of Z
19244 !C now calculte the distance
19245 tub_r=dsqrt(vectube(1)**2+vectube(2)**2+vectube(3)**2)
19246 !C now normalize vector
19247 vectube(1)=vectube(1)/tub_r
19248 vectube(2)=vectube(2)/tub_r
19249 !C calculte rdiffrence between r and r0
19252 rdiff6=rdiff**6.0d0
19253 !C for vectorization reasons we will sumup at the end to avoid depenence of previous
19254 enetube(i)=pep_aa_tube/rdiff6**2.0d0+pep_bb_tube/rdiff6
19255 !C write(iout,*) "TU13",i,rdiff6,enetube(i)
19256 !C print *,rdiff,rdiff6,pep_aa_tube
19257 !C pep_aa_tube and pep_bb_tube are precomputed values A=4eps*sigma^12 B=4eps*sigma^6
19258 !C now we calculate gradient
19259 fac=(-12.0d0*pep_aa_tube/rdiff6- &
19260 6.0d0*pep_bb_tube)/rdiff6/rdiff
19261 !C write(iout,'(a5,i4,f12.1,3f12.5)') "TU13",i,rdiff6,enetube(i),
19263 !C now direction of gg_tube vector
19265 gg_tube(j,i-1)=gg_tube(j,i-1)+vectube(j)*fac/2.0d0
19266 gg_tube(j,i)=gg_tube(j,i)+vectube(j)*fac/2.0d0
19269 !C basically thats all code now we split for side-chains (REMEMBER to sum up at the END)
19270 !C print *,gg_tube(1,0),"TU"
19273 do i=itube_start,itube_end
19274 !C Lets not jump over memory as we use many times iti
19276 !C lets ommit dummy atoms for now
19277 if ((iti.eq.ntyp1) &
19278 !C in UNRES uncomment the line below as GLY has no side-chain...
19284 vectube(1)=mod((c(1,i+nres)),boxxsize)
19285 vectube(1)=vectube(1)+boxxsize*j
19286 vectube(2)=mod((c(2,i+nres)),boxysize)
19287 vectube(2)=vectube(2)+boxysize*j
19289 xminact=abs(vectube(1)-tubecenter(1))
19290 yminact=abs(vectube(2)-tubecenter(2))
19291 if (xmin.gt.xminact) then
19295 if (ymin.gt.yminact) then
19302 !C write(iout,*), "tututu", vectube(1),tubecenter(1),vectube(2),
19304 vectube(1)=vectube(1)-tubecenter(1)
19305 vectube(2)=vectube(2)-tubecenter(2)
19307 !C as the tube is infinity we do not calculate the Z-vector use of Z
19310 !C now calculte the distance
19311 tub_r=dsqrt(vectube(1)**2+vectube(2)**2+vectube(3)**2)
19312 !C now normalize vector
19313 vectube(1)=vectube(1)/tub_r
19314 vectube(2)=vectube(2)/tub_r
19316 !C calculte rdiffrence between r and r0
19319 rdiff6=rdiff**6.0d0
19320 !C for vectorization reasons we will sumup at the end to avoid depenence of previous
19321 sc_aa_tube=sc_aa_tube_par(iti)
19322 sc_bb_tube=sc_bb_tube_par(iti)
19323 enetube(i+nres)=sc_aa_tube/rdiff6**2.0d0+sc_bb_tube/rdiff6
19324 fac=-12.0d0*sc_aa_tube/rdiff6**2.0d0/rdiff- &
19325 6.0d0*sc_bb_tube/rdiff6/rdiff
19326 !C now direction of gg_tube vector
19328 gg_tube_SC(j,i)=gg_tube_SC(j,i)+vectube(j)*fac
19329 gg_tube(j,i-1)=gg_tube(j,i-1)+vectube(j)*fac
19332 do i=itube_start,itube_end
19333 Etube=Etube+enetube(i)+enetube(i+nres)
19335 !C print *,"ETUBE", etube
19337 end subroutine calctube
19338 !C TO DO 1) add to total energy
19339 !C 2) add to gradient summation
19340 !C 3) add reading parameters (AND of course oppening of PARAM file)
19341 !C 4) add reading the center of tube
19343 !C 6) add to zerograd
19344 !C 7) allocate matrices
19347 !C-----------------------------------------------------------------------
19348 !C-----------------------------------------------------------
19349 !C This subroutine is to mimic the histone like structure but as well can be
19350 !C utilizet to nanostructures (infinit) small modification has to be used to
19351 !C make it finite (z gradient at the ends has to be changes as well as the x,y
19352 !C gradient has to be modified at the ends
19353 !C The energy function is Kihara potential
19354 !C E=4esp*((sigma/(r-r0))^12 - (sigma/(r-r0))^6)
19355 !C 4eps is depth of well sigma is r_minimum r is distance from center of tube
19356 !C and r0 is the excluded size of nanotube (can be set to 0 if we want just a
19357 !C simple Kihara potential
19358 subroutine calctube2(Etube)
19359 real(kind=8),dimension(3) :: vectube
19360 real(kind=8) :: Etube,xtemp,xminact,yminact,&
19361 ytemp,xmin,ymin,tub_r,rdiff,rdiff6,fac,positi,fracinbuf,&
19362 sstube,ssgradtube,sc_aa_tube,sc_bb_tube
19365 do i=itube_start,itube_end
19367 enetube(i+nres)=0.0d0
19369 !C first we calculate the distance from tube center
19370 !C first sugare-phosphate group for NARES this would be peptide group
19372 do i=itube_start,itube_end
19373 !C lets ommit dummy atoms for now
19375 if ((itype(i,1).eq.ntyp1).or.(itype(i+1,1).eq.ntyp1)) cycle
19376 !C now calculate distance from center of tube and direction vectors
19377 !C vectube(1)=mod((c(1,i)+c(1,i+1))/2.0d0,boxxsize)
19378 !C if (vectube(1).lt.0) vectube(1)=vectube(1)+boxxsize
19379 !C vectube(2)=mod((c(2,i)+c(2,i+1))/2.0d0,boxysize)
19380 !C if (vectube(2).lt.0) vectube(2)=vectube(2)+boxysize
19384 vectube(1)=mod((c(1,i)+c(1,i+1))/2.0d0,boxxsize)
19385 vectube(1)=vectube(1)+boxxsize*j
19386 vectube(2)=mod((c(2,i)+c(2,i+1))/2.0d0,boxysize)
19387 vectube(2)=vectube(2)+boxysize*j
19389 xminact=abs(vectube(1)-tubecenter(1))
19390 yminact=abs(vectube(2)-tubecenter(2))
19391 if (xmin.gt.xminact) then
19395 if (ymin.gt.yminact) then
19402 vectube(1)=vectube(1)-tubecenter(1)
19403 vectube(2)=vectube(2)-tubecenter(2)
19405 !C print *,"x",(c(1,i)+c(1,i+1))/2.0d0,tubecenter(1)
19406 !C print *,"y",(c(2,i)+c(2,i+1))/2.0d0,tubecenter(2)
19408 !C as the tube is infinity we do not calculate the Z-vector use of Z
19411 !C now calculte the distance
19412 tub_r=dsqrt(vectube(1)**2+vectube(2)**2+vectube(3)**2)
19413 !C now normalize vector
19414 vectube(1)=vectube(1)/tub_r
19415 vectube(2)=vectube(2)/tub_r
19416 !C calculte rdiffrence between r and r0
19419 rdiff6=rdiff**6.0d0
19420 !C THIS FRAGMENT MAKES TUBE FINITE
19421 positi=mod((c(3,i)+c(3,i+1))/2.0d0,boxzsize)
19422 if (positi.le.0) positi=positi+boxzsize
19423 !C print *,mod(c(3,i+nres),boxzsize),bordlipbot,bordliptop
19424 !c for each residue check if it is in lipid or lipid water border area
19425 !C respos=mod(c(3,i+nres),boxzsize)
19426 !C print *,positi,bordtubebot,buftubebot,bordtubetop
19427 if ((positi.gt.bordtubebot) &
19428 .and.(positi.lt.bordtubetop)) then
19429 !C the energy transfer exist
19430 if (positi.lt.buftubebot) then
19432 ((positi-bordtubebot)/tubebufthick)
19433 !C lipbufthick is thickenes of lipid buffore
19434 sstube=sscalelip(fracinbuf)
19435 ssgradtube=-sscagradlip(fracinbuf)/tubebufthick
19436 !C print *,ssgradtube, sstube,tubetranene(itype(i,1))
19437 enetube(i)=enetube(i)+sstube*tubetranenepep
19438 !C gg_tube_SC(3,i)=gg_tube_SC(3,i)
19439 !C &+ssgradtube*tubetranene(itype(i,1))
19440 !C gg_tube(3,i-1)= gg_tube(3,i-1)
19441 !C &+ssgradtube*tubetranene(itype(i,1))
19442 !C print *,"doing sccale for lower part"
19443 elseif (positi.gt.buftubetop) then
19445 ((bordtubetop-positi)/tubebufthick)
19446 sstube=sscalelip(fracinbuf)
19447 ssgradtube=sscagradlip(fracinbuf)/tubebufthick
19448 enetube(i)=enetube(i)+sstube*tubetranenepep
19449 !C gg_tube_SC(3,i)=gg_tube_SC(3,i)
19450 !C &+ssgradtube*tubetranene(itype(i,1))
19451 !C gg_tube(3,i-1)= gg_tube(3,i-1)
19452 !C &+ssgradtube*tubetranene(itype(i,1))
19453 !C print *, "doing sscalefor top part",sslip,fracinbuf
19457 enetube(i)=enetube(i)+sstube*tubetranenepep
19458 !C print *,"I am in true lipid"
19462 !C ssgradtube=0.0d0
19464 endif ! if in lipid or buffor
19466 !C for vectorization reasons we will sumup at the end to avoid depenence of previous
19467 enetube(i)=enetube(i)+sstube* &
19468 (pep_aa_tube/rdiff6**2.0d0+pep_bb_tube/rdiff6)
19469 !C write(iout,*) "TU13",i,rdiff6,enetube(i)
19470 !C print *,rdiff,rdiff6,pep_aa_tube
19471 !C pep_aa_tube and pep_bb_tube are precomputed values A=4eps*sigma^12 B=4eps*sigma^6
19472 !C now we calculate gradient
19473 fac=(-12.0d0*pep_aa_tube/rdiff6- &
19474 6.0d0*pep_bb_tube)/rdiff6/rdiff*sstube
19475 !C write(iout,'(a5,i4,f12.1,3f12.5)') "TU13",i,rdiff6,enetube(i),
19478 !C now direction of gg_tube vector
19480 gg_tube(j,i-1)=gg_tube(j,i-1)+vectube(j)*fac/2.0d0
19481 gg_tube(j,i)=gg_tube(j,i)+vectube(j)*fac/2.0d0
19483 gg_tube(3,i)=gg_tube(3,i) &
19484 +ssgradtube*enetube(i)/sstube/2.0d0
19485 gg_tube(3,i-1)= gg_tube(3,i-1) &
19486 +ssgradtube*enetube(i)/sstube/2.0d0
19489 !C basically thats all code now we split for side-chains (REMEMBER to sum up at the END)
19490 !C print *,gg_tube(1,0),"TU"
19491 do i=itube_start,itube_end
19492 !C Lets not jump over memory as we use many times iti
19494 !C lets ommit dummy atoms for now
19495 if ((iti.eq.ntyp1) &
19496 !!C in UNRES uncomment the line below as GLY has no side-chain...
19499 vectube(1)=c(1,i+nres)
19500 vectube(1)=mod(vectube(1),boxxsize)
19501 if (vectube(1).lt.0) vectube(1)=vectube(1)+boxxsize
19502 vectube(2)=c(2,i+nres)
19503 vectube(2)=mod(vectube(2),boxysize)
19504 if (vectube(2).lt.0) vectube(2)=vectube(2)+boxysize
19506 vectube(1)=vectube(1)-tubecenter(1)
19507 vectube(2)=vectube(2)-tubecenter(2)
19508 !C THIS FRAGMENT MAKES TUBE FINITE
19509 positi=(mod(c(3,i+nres),boxzsize))
19510 if (positi.le.0) positi=positi+boxzsize
19511 !C print *,mod(c(3,i+nres),boxzsize),bordlipbot,bordliptop
19512 !c for each residue check if it is in lipid or lipid water border area
19513 !C respos=mod(c(3,i+nres),boxzsize)
19514 !C print *,positi,bordtubebot,buftubebot,bordtubetop
19516 if ((positi.gt.bordtubebot) &
19517 .and.(positi.lt.bordtubetop)) then
19518 !C the energy transfer exist
19519 if (positi.lt.buftubebot) then
19521 ((positi-bordtubebot)/tubebufthick)
19522 !C lipbufthick is thickenes of lipid buffore
19523 sstube=sscalelip(fracinbuf)
19524 ssgradtube=-sscagradlip(fracinbuf)/tubebufthick
19525 !C print *,ssgradtube, sstube,tubetranene(itype(i,1))
19526 enetube(i+nres)=enetube(i+nres)+sstube*tubetranene(itype(i,1))
19527 !C gg_tube_SC(3,i)=gg_tube_SC(3,i)
19528 !C &+ssgradtube*tubetranene(itype(i,1))
19529 !C gg_tube(3,i-1)= gg_tube(3,i-1)
19530 !C &+ssgradtube*tubetranene(itype(i,1))
19531 !C print *,"doing sccale for lower part"
19532 elseif (positi.gt.buftubetop) then
19534 ((bordtubetop-positi)/tubebufthick)
19536 sstube=sscalelip(fracinbuf)
19537 ssgradtube=sscagradlip(fracinbuf)/tubebufthick
19538 enetube(i+nres)=enetube(i+nres)+sstube*tubetranene(itype(i,1))
19539 !C gg_tube_SC(3,i)=gg_tube_SC(3,i)
19540 !C &+ssgradtube*tubetranene(itype(i,1))
19541 !C gg_tube(3,i-1)= gg_tube(3,i-1)
19542 !C &+ssgradtube*tubetranene(itype(i,1))
19543 !C print *, "doing sscalefor top part",sslip,fracinbuf
19547 enetube(i+nres)=enetube(i+nres)+sstube*tubetranene(itype(i,1))
19548 !C print *,"I am in true lipid"
19552 !C ssgradtube=0.0d0
19554 endif ! if in lipid or buffor
19555 !CEND OF FINITE FRAGMENT
19556 !C as the tube is infinity we do not calculate the Z-vector use of Z
19559 !C now calculte the distance
19560 tub_r=dsqrt(vectube(1)**2+vectube(2)**2+vectube(3)**2)
19561 !C now normalize vector
19562 vectube(1)=vectube(1)/tub_r
19563 vectube(2)=vectube(2)/tub_r
19564 !C calculte rdiffrence between r and r0
19567 rdiff6=rdiff**6.0d0
19568 !C for vectorization reasons we will sumup at the end to avoid depenence of previous
19569 sc_aa_tube=sc_aa_tube_par(iti)
19570 sc_bb_tube=sc_bb_tube_par(iti)
19571 enetube(i+nres)=(sc_aa_tube/rdiff6**2.0d0+sc_bb_tube/rdiff6)&
19572 *sstube+enetube(i+nres)
19573 !C pep_aa_tube and pep_bb_tube are precomputed values A=4eps*sigma^12 B=4eps*sigma^6
19574 !C now we calculate gradient
19575 fac=(-12.0d0*sc_aa_tube/rdiff6**2.0d0/rdiff-&
19576 6.0d0*sc_bb_tube/rdiff6/rdiff)*sstube
19577 !C now direction of gg_tube vector
19579 gg_tube_SC(j,i)=gg_tube_SC(j,i)+vectube(j)*fac
19580 gg_tube(j,i-1)=gg_tube(j,i-1)+vectube(j)*fac
19582 gg_tube_SC(3,i)=gg_tube_SC(3,i) &
19583 +ssgradtube*enetube(i+nres)/sstube
19584 gg_tube(3,i-1)= gg_tube(3,i-1) &
19585 +ssgradtube*enetube(i+nres)/sstube
19588 do i=itube_start,itube_end
19589 Etube=Etube+enetube(i)+enetube(i+nres)
19591 !C print *,"ETUBE", etube
19593 end subroutine calctube2
19594 !=====================================================================================================================================
19595 subroutine calcnano(Etube)
19596 real(kind=8),dimension(3) :: vectube
19598 real(kind=8) :: Etube,xtemp,xminact,yminact,&
19599 ytemp,xmin,ymin,tub_r,rdiff,rdiff6,fac,denominator,faccav,&
19600 sc_aa_tube,sc_bb_tube,zmin,ztemp,zminact
19601 integer:: i,j,iti,r
19604 ! print *,itube_start,itube_end,"poczatek"
19605 do i=itube_start,itube_end
19607 enetube(i+nres)=0.0d0
19609 !C first we calculate the distance from tube center
19610 !C first sugare-phosphate group for NARES this would be peptide group
19612 do i=itube_start,itube_end
19613 !C lets ommit dummy atoms for now
19614 if ((itype(i,1).eq.ntyp1).or.(itype(i+1,1).eq.ntyp1)) cycle
19615 !C now calculate distance from center of tube and direction vectors
19621 vectube(1)=dmod((c(1,i)+c(1,i+1))/2.0d0,boxxsize)
19622 vectube(1)=vectube(1)+boxxsize*j
19623 vectube(2)=dmod((c(2,i)+c(2,i+1))/2.0d0,boxysize)
19624 vectube(2)=vectube(2)+boxysize*j
19625 vectube(3)=dmod((c(3,i)+c(3,i+1))/2.0d0,boxzsize)
19626 vectube(3)=vectube(3)+boxzsize*j
19629 xminact=dabs(vectube(1)-tubecenter(1))
19630 yminact=dabs(vectube(2)-tubecenter(2))
19631 zminact=dabs(vectube(3)-tubecenter(3))
19633 if (xmin.gt.xminact) then
19637 if (ymin.gt.yminact) then
19641 if (zmin.gt.zminact) then
19650 vectube(1)=vectube(1)-tubecenter(1)
19651 vectube(2)=vectube(2)-tubecenter(2)
19652 vectube(3)=vectube(3)-tubecenter(3)
19654 !C print *,"x",(c(1,i)+c(1,i+1))/2.0d0,tubecenter(1)
19655 !C print *,"y",(c(2,i)+c(2,i+1))/2.0d0,tubecenter(2)
19656 !C as the tube is infinity we do not calculate the Z-vector use of Z
19658 !C vectube(3)=0.0d0
19659 !C now calculte the distance
19660 tub_r=dsqrt(vectube(1)**2+vectube(2)**2+vectube(3)**2)
19661 !C now normalize vector
19662 vectube(1)=vectube(1)/tub_r
19663 vectube(2)=vectube(2)/tub_r
19664 vectube(3)=vectube(3)/tub_r
19665 !C calculte rdiffrence between r and r0
19668 rdiff6=rdiff**6.0d0
19669 !C for vectorization reasons we will sumup at the end to avoid depenence of previous
19670 enetube(i)=pep_aa_tube/rdiff6**2.0d0+pep_bb_tube/rdiff6
19671 !C write(iout,*) "TU13",i,rdiff6,enetube(i)
19672 !C print *,rdiff,rdiff6,pep_aa_tube
19673 !C pep_aa_tube and pep_bb_tube are precomputed values A=4eps*sigma^12 B=4eps*sigma^6
19674 !C now we calculate gradient
19675 fac=(-12.0d0*pep_aa_tube/rdiff6- &
19676 6.0d0*pep_bb_tube)/rdiff6/rdiff
19677 !C write(iout,'(a5,i4,f12.1,3f12.5)') "TU13",i,rdiff6,enetube(i),
19679 if (acavtubpep.eq.0.0d0) then
19684 denominator=(1.0d0+dcavtubpep*rdiff6*rdiff6)
19686 (bcavtubpep*rdiff+acavtubpep*dsqrt(rdiff)+ccavtubpep) &
19689 faccav=((bcavtubpep*1.0d0+acavtubpep/2.0d0/dsqrt(rdiff)) &
19690 *denominator-(bcavtubpep*rdiff+acavtubpep*dsqrt(rdiff) &
19691 +ccavtubpep)*rdiff6**2.0d0/rdiff*dcavtubpep*12.0d0) &
19692 /denominator**2.0d0
19697 if (energy_dec) write(iout,*),i,rdiff,enetube(i),enecavtube(i)
19699 gg_tube(j,i-1)=gg_tube(j,i-1)+vectube(j)*fac/2.0d0
19700 gg_tube(j,i)=gg_tube(j,i)+vectube(j)*fac/2.0d0
19704 do i=itube_start,itube_end
19705 enecavtube(i)=0.0d0
19706 !C Lets not jump over memory as we use many times iti
19708 !C lets ommit dummy atoms for now
19709 if ((iti.eq.ntyp1) &
19710 !C in UNRES uncomment the line below as GLY has no side-chain...
19717 vectube(1)=dmod((c(1,i+nres)),boxxsize)
19718 vectube(1)=vectube(1)+boxxsize*j
19719 vectube(2)=dmod((c(2,i+nres)),boxysize)
19720 vectube(2)=vectube(2)+boxysize*j
19721 vectube(3)=dmod((c(3,i+nres)),boxzsize)
19722 vectube(3)=vectube(3)+boxzsize*j
19725 xminact=dabs(vectube(1)-tubecenter(1))
19726 yminact=dabs(vectube(2)-tubecenter(2))
19727 zminact=dabs(vectube(3)-tubecenter(3))
19729 if (xmin.gt.xminact) then
19733 if (ymin.gt.yminact) then
19737 if (zmin.gt.zminact) then
19746 !C write(iout,*), "tututu", vectube(1),tubecenter(1),vectube(2),
19748 vectube(1)=vectube(1)-tubecenter(1)
19749 vectube(2)=vectube(2)-tubecenter(2)
19750 vectube(3)=vectube(3)-tubecenter(3)
19751 !C now calculte the distance
19752 tub_r=dsqrt(vectube(1)**2+vectube(2)**2+vectube(3)**2)
19753 !C now normalize vector
19754 vectube(1)=vectube(1)/tub_r
19755 vectube(2)=vectube(2)/tub_r
19756 vectube(3)=vectube(3)/tub_r
19758 !C calculte rdiffrence between r and r0
19761 rdiff6=rdiff**6.0d0
19762 sc_aa_tube=sc_aa_tube_par(iti)
19763 sc_bb_tube=sc_bb_tube_par(iti)
19764 enetube(i+nres)=sc_aa_tube/rdiff6**2.0d0+sc_bb_tube/rdiff6
19765 !C enetube(i+nres)=0.0d0
19766 !C pep_aa_tube and pep_bb_tube are precomputed values A=4eps*sigma^12 B=4eps*sigma^6
19767 !C now we calculate gradient
19768 fac=-12.0d0*sc_aa_tube/rdiff6**2.0d0/rdiff- &
19769 6.0d0*sc_bb_tube/rdiff6/rdiff
19771 !C now direction of gg_tube vector
19772 !C Now cavity term E=a(x+bsqrt(x)+c)/(1+dx^12)
19773 if (acavtub(iti).eq.0.0d0) then
19775 enecavtube(i+nres)=0.0d0
19778 denominator=(1.0d0+dcavtub(iti)*rdiff6*rdiff6)
19779 enecavtube(i+nres)= &
19780 (bcavtub(iti)*rdiff+acavtub(iti)*dsqrt(rdiff)+ccavtub(iti)) &
19782 !C enecavtube(i)=0.0
19783 faccav=((bcavtub(iti)*1.0d0+acavtub(iti)/2.0d0/dsqrt(rdiff)) &
19784 *denominator-(bcavtub(iti)*rdiff+acavtub(iti)*dsqrt(rdiff) &
19785 +ccavtub(iti))*rdiff6**2.0d0/rdiff*dcavtub(iti)*12.0d0) &
19786 /denominator**2.0d0
19791 !C print *,"TUT",i,iti,rdiff,rdiff6,acavtub(iti),denominator,
19792 !C & enecavtube(i),faccav
19793 !C print *,"licz=",
19794 !C & (bcavtub(iti)*rdiff+acavtub(iti)*sqrt(rdiff)+ccavtub(iti))
19795 !C print *,"finene=",enetube(i+nres)+enecavtube(i)
19797 gg_tube_SC(j,i)=gg_tube_SC(j,i)+vectube(j)*fac
19798 gg_tube(j,i-1)=gg_tube(j,i-1)+vectube(j)*fac
19800 if (energy_dec) write(iout,*),i,rdiff,enetube(i+nres),enecavtube(i+nres)
19805 do i=itube_start,itube_end
19806 Etube=Etube+enetube(i)+enetube(i+nres)+enecavtube(i) &
19807 +enecavtube(i+nres)
19810 ! print *,"begin", i,"a"
19813 ! rdiff6=rdiff**6.0d0
19814 ! sc_aa_tube=sc_aa_tube_par(i)
19815 ! sc_bb_tube=sc_bb_tube_par(i)
19816 ! enetube(i)=sc_aa_tube/rdiff6**2.0d0+sc_bb_tube/rdiff6
19817 ! denominator=(1.0d0+dcavtub(i)*rdiff6*rdiff6)
19819 ! (bcavtub(i)*rdiff+acavtub(i)*dsqrt(rdiff)+ccavtub(i)) &
19822 ! print '(5(f10.3,1x))',rdiff,enetube(i),enecavtube(i),enecavtube(i)+enetube(i)
19824 ! print *,"end",i,"a"
19826 !C print *,"ETUBE", etube
19828 end subroutine calcnano
19830 !===============================================
19831 !--------------------------------------------------------------------------------
19832 !C first for shielding is setting of function of side-chains
19834 subroutine set_shield_fac2
19835 real(kind=8) :: div77_81=0.974996043d0, &
19836 div4_81=0.2222222222d0
19837 real (kind=8) :: dist_pep_side,dist_side_calf,dist_pept_group, &
19838 scale_fac_dist,fac_help_scale,VofOverlap,VolumeTotal,costhet,&
19839 short,long,sinthet,costhet_fac,sh_frac_dist,rkprim,cosphi, &
19840 sinphi,cosphi_fac,pep_side0pept_group,cosalfa,fac_alfa_sin
19841 !C the vector between center of side_chain and peptide group
19842 real(kind=8),dimension(3) :: pep_side_long,side_calf, &
19843 pept_group,costhet_grad,cosphi_grad_long, &
19844 cosphi_grad_loc,pep_side_norm,side_calf_norm, &
19845 sh_frac_dist_grad,pep_side
19847 !C write(2,*) "ivec",ivec_start,ivec_end
19849 fac_shield(i)=0.0d0
19852 grad_shield(j,i)=0.0d0
19855 do i=ivec_start,ivec_end
19857 !C if ((itype(i,1).eq.ntyp1).and.itype(i+1,1).eq.ntyp1) cycle
19858 ! ishield_list(i)=0
19859 if ((itype(i,1).eq.ntyp1).and.itype(i+1,1).eq.ntyp1) cycle
19860 !Cif there two consequtive dummy atoms there is no peptide group between them
19861 !C the line below has to be changed for FGPROC>1
19864 if ((itype(k,1).eq.ntyp1).or.(itype(k,1).eq.10)) cycle
19868 !C first lets set vector conecting the ithe side-chain with kth side-chain
19869 pep_side(j)=c(j,k+nres)-(c(j,i)+c(j,i+1))/2.0d0
19870 !C pep_side(j)=2.0d0
19871 !C and vector conecting the side-chain with its proper calfa
19872 side_calf(j)=c(j,k+nres)-c(j,k)
19873 !C side_calf(j)=2.0d0
19874 pept_group(j)=c(j,i)-c(j,i+1)
19875 !C lets have their lenght
19876 dist_pep_side=pep_side(j)**2+dist_pep_side
19877 dist_side_calf=dist_side_calf+side_calf(j)**2
19878 dist_pept_group=dist_pept_group+pept_group(j)**2
19880 dist_pep_side=sqrt(dist_pep_side)
19881 dist_pept_group=sqrt(dist_pept_group)
19882 dist_side_calf=sqrt(dist_side_calf)
19884 pep_side_norm(j)=pep_side(j)/dist_pep_side
19885 side_calf_norm(j)=dist_side_calf
19887 !C now sscale fraction
19888 sh_frac_dist=-(dist_pep_side-rpp(1,1)-buff_shield)/buff_shield
19889 ! print *,buff_shield,"buff",sh_frac_dist
19891 if (sh_frac_dist.le.0.0) cycle
19892 !C print *,ishield_list(i),i
19893 !C If we reach here it means that this side chain reaches the shielding sphere
19894 !C Lets add him to the list for gradient
19895 ishield_list(i)=ishield_list(i)+1
19896 !C ishield_list is a list of non 0 side-chain that contribute to factor gradient
19897 !C this list is essential otherwise problem would be O3
19898 shield_list(ishield_list(i),i)=k
19899 !C Lets have the sscale value
19900 if (sh_frac_dist.gt.1.0) then
19901 scale_fac_dist=1.0d0
19903 sh_frac_dist_grad(j)=0.0d0
19906 scale_fac_dist=-sh_frac_dist*sh_frac_dist &
19907 *(2.0d0*sh_frac_dist-3.0d0)
19908 fac_help_scale=6.0d0*(sh_frac_dist-sh_frac_dist**2) &
19909 /dist_pep_side/buff_shield*0.5d0
19911 sh_frac_dist_grad(j)=fac_help_scale*pep_side(j)
19912 !C sh_frac_dist_grad(j)=0.0d0
19913 !C scale_fac_dist=1.0d0
19914 !C print *,"jestem",scale_fac_dist,fac_help_scale,
19915 !C & sh_frac_dist_grad(j)
19918 !C this is what is now we have the distance scaling now volume...
19919 short=short_r_sidechain(itype(k,1))
19920 long=long_r_sidechain(itype(k,1))
19921 costhet=1.0d0/dsqrt(1.0d0+short**2/dist_pep_side**2)
19922 sinthet=short/dist_pep_side*costhet
19923 ! print *,"SORT",short,long,sinthet,costhet
19924 !C now costhet_grad
19927 costhet_fac=costhet**3*short**2*(-0.5d0)/dist_pep_side**4
19928 !C sinthet_fac=costhet**2*0.5d0*(short**3/dist_pep_side**4*costhet
19929 !C & -short/dist_pep_side**2/costhet)
19930 !C costhet_fac=0.0d0
19932 costhet_grad(j)=costhet_fac*pep_side(j)
19934 !C remember for the final gradient multiply costhet_grad(j)
19935 !C for side_chain by factor -2 !
19936 !C fac alfa is angle between CB_k,CA_k, CA_i,CA_i+1
19937 !C pep_side0pept_group is vector multiplication
19938 pep_side0pept_group=0.0d0
19940 pep_side0pept_group=pep_side0pept_group+pep_side(j)*side_calf(j)
19942 cosalfa=(pep_side0pept_group/ &
19943 (dist_pep_side*dist_side_calf))
19944 fac_alfa_sin=1.0d0-cosalfa**2
19945 fac_alfa_sin=dsqrt(fac_alfa_sin)
19946 rkprim=fac_alfa_sin*(long-short)+short
19949 !C now costhet_grad
19950 cosphi=1.0d0/dsqrt(1.0d0+rkprim**2/dist_pep_side**2)
19952 cosphi_fac=cosphi**3*rkprim**2*(-0.5d0)/dist_pep_side**4
19953 sinphi=rkprim/dist_pep_side/dsqrt(1.0d0+rkprim**2/ &
19957 cosphi_grad_long(j)=cosphi_fac*pep_side(j) &
19958 +cosphi**3*0.5d0/dist_pep_side**2*(-rkprim) &
19959 *(long-short)/fac_alfa_sin*cosalfa/ &
19960 ((dist_pep_side*dist_side_calf))* &
19961 ((side_calf(j))-cosalfa* &
19962 ((pep_side(j)/dist_pep_side)*dist_side_calf))
19963 !C cosphi_grad_long(j)=0.0d0
19964 cosphi_grad_loc(j)=cosphi**3*0.5d0/dist_pep_side**2*(-rkprim) &
19965 *(long-short)/fac_alfa_sin*cosalfa &
19966 /((dist_pep_side*dist_side_calf))* &
19968 cosalfa*side_calf(j)/dist_side_calf*dist_pep_side)
19969 !C cosphi_grad_loc(j)=0.0d0
19971 !C print *,sinphi,sinthet
19972 VofOverlap=VSolvSphere/2.0d0*(1.0d0-dsqrt(1.0d0-sinphi*sinthet)) &
19975 !C now the gradient...
19977 grad_shield(j,i)=grad_shield(j,i) &
19978 !C gradient po skalowaniu
19979 +(sh_frac_dist_grad(j)*VofOverlap &
19980 !C gradient po costhet
19981 +scale_fac_dist*VSolvSphere/VSolvSphere_div/4.0d0* &
19982 (1.0d0/(-dsqrt(1.0d0-sinphi*sinthet))*( &
19983 sinphi/sinthet*costhet*costhet_grad(j) &
19984 +sinthet/sinphi*cosphi*cosphi_grad_long(j))) &
19986 !C grad_shield_side is Cbeta sidechain gradient
19987 grad_shield_side(j,ishield_list(i),i)=&
19988 (sh_frac_dist_grad(j)*-2.0d0&
19990 -scale_fac_dist*VSolvSphere/VSolvSphere_div/2.0d0*&
19991 (1.0d0/(-dsqrt(1.0d0-sinphi*sinthet))*(&
19992 sinphi/sinthet*costhet*costhet_grad(j)&
19993 +sinthet/sinphi*cosphi*cosphi_grad_long(j))) &
19995 ! print *, 1.0d0/(-dsqrt(1.0d0-sinphi*sinthet)),&
19997 ! +sinthet/sinphi,"HERE"
19998 grad_shield_loc(j,ishield_list(i),i)= &
19999 scale_fac_dist*VSolvSphere/VSolvSphere_div/2.0d0*&
20000 (1.0d0/(dsqrt(1.0d0-sinphi*sinthet))*(&
20001 sinthet/sinphi*cosphi*cosphi_grad_loc(j)&
20004 ! print *,grad_shield_loc(j,ishield_list(i),i)
20006 VolumeTotal=VolumeTotal+VofOverlap*scale_fac_dist
20008 fac_shield(i)=VolumeTotal*wshield+(1.0d0-wshield)
20010 ! write(2,*) "TOTAL VOLUME",i,itype(i,1),fac_shield(i)
20013 end subroutine set_shield_fac2
20014 !----------------------------------------------------------------------------
20015 ! SOUBROUTINE FOR AFM
20016 subroutine AFMvel(Eafmforce)
20017 use MD_data, only:totTafm
20018 real(kind=8),dimension(3) :: diffafm
20019 real(kind=8) :: afmdist,Eafmforce
20021 !C Only for check grad COMMENT if not used for checkgrad
20023 !C--------------------------------------------------------
20024 !C print *,"wchodze"
20028 diffafm(i)=c(i,afmend)-c(i,afmbeg)
20029 afmdist=afmdist+diffafm(i)**2
20031 afmdist=dsqrt(afmdist)
20033 Eafmforce=0.5d0*forceAFMconst &
20034 *(distafminit+totTafm*velAFMconst-afmdist)**2
20035 !C Eafmforce=-forceAFMconst*(dist-distafminit)
20037 gradafm(i,afmend-1)=-forceAFMconst* &
20038 (distafminit+totTafm*velAFMconst-afmdist) &
20039 *diffafm(i)/afmdist
20040 gradafm(i,afmbeg-1)=forceAFMconst* &
20041 (distafminit+totTafm*velAFMconst-afmdist) &
20042 *diffafm(i)/afmdist
20044 ! print *,'AFM',Eafmforce,totTafm*velAFMconst,afmdist
20046 end subroutine AFMvel
20047 !---------------------------------------------------------
20048 subroutine AFMforce(Eafmforce)
20050 real(kind=8),dimension(3) :: diffafm
20051 ! real(kind=8) ::afmdist
20052 real(kind=8) :: afmdist,Eafmforce
20057 diffafm(i)=c(i,afmend)-c(i,afmbeg)
20058 afmdist=afmdist+diffafm(i)**2
20060 afmdist=dsqrt(afmdist)
20061 ! print *,afmdist,distafminit
20062 Eafmforce=-forceAFMconst*(afmdist-distafminit)
20064 gradafm(i,afmend-1)=-forceAFMconst*diffafm(i)/afmdist
20065 gradafm(i,afmbeg-1)=forceAFMconst*diffafm(i)/afmdist
20067 !C print *,'AFM',Eafmforce
20069 end subroutine AFMforce
20071 !-----------------------------------------------------------------------------
20073 subroutine read_ssHist
20076 ! include 'DIMENSIONS'
20077 ! include "DIMENSIONS.FREE"
20078 ! include 'COMMON.FREE'
20081 character(len=80) :: controlcard
20084 call card_concat(controlcard,.true.)
20085 read(controlcard,*) &
20086 dyn_ssHist(i,0),(dyn_ssHist(i,j),j=1,2*dyn_ssHist(i,0))
20090 end subroutine read_ssHist
20092 !-----------------------------------------------------------------------------
20093 integer function indmat(i,j)
20095 ! get the position of the jth ijth fragment of the chain coordinate system
20096 ! in the fromto array.
20099 indmat=((2*(nres-2)-i)*(i-1))/2+j-1
20101 end function indmat
20102 !-----------------------------------------------------------------------------
20103 real(kind=8) function sigm(x)
20109 !-----------------------------------------------------------------------------
20110 !-----------------------------------------------------------------------------
20111 subroutine alloc_ener_arrays
20112 !EL Allocation of arrays used by module energy
20113 use MD_data, only: mset
20114 !el local variables
20117 if(nres.lt.100) then
20119 elseif(nres.lt.200) then
20120 maxconts=10*nres ! Max. number of contacts per residue
20122 maxconts=10*nres ! (maxconts=maxres/4)
20124 maxcont=12*nres ! Max. number of SC contacts
20125 maxvar=6*nres ! Max. number of variables
20126 !el maxdim=(nres-1)*(nres-2)/2 ! Max. number of derivatives of virtual-bond
20127 maxdim=nres*(nres-2)/2 ! Max. number of derivatives of virtual-bond
20128 !----------------------
20129 ! arrays in subroutine init_int_table
20131 !el allocate(itask_cont_from(0:nfgtasks-1)) !(0:max_fg_procs-1)
20132 !el allocate(itask_cont_to(0:nfgtasks-1)) !(0:max_fg_procs-1)
20134 allocate(nint_gr(nres))
20135 allocate(nscp_gr(nres))
20136 allocate(ielstart(nres))
20137 allocate(ielend(nres))
20139 allocate(istart(nres,maxint_gr))
20140 allocate(iend(nres,maxint_gr))
20141 !(maxres,maxint_gr)
20142 allocate(iscpstart(nres,maxint_gr))
20143 allocate(iscpend(nres,maxint_gr))
20144 !(maxres,maxint_gr)
20145 allocate(ielstart_vdw(nres))
20146 allocate(ielend_vdw(nres))
20148 allocate(nint_gr_nucl(nres))
20149 allocate(nscp_gr_nucl(nres))
20150 allocate(ielstart_nucl(nres))
20151 allocate(ielend_nucl(nres))
20153 allocate(istart_nucl(nres,maxint_gr))
20154 allocate(iend_nucl(nres,maxint_gr))
20155 !(maxres,maxint_gr)
20156 allocate(iscpstart_nucl(nres,maxint_gr))
20157 allocate(iscpend_nucl(nres,maxint_gr))
20158 !(maxres,maxint_gr)
20159 allocate(ielstart_vdw_nucl(nres))
20160 allocate(ielend_vdw_nucl(nres))
20162 allocate(lentyp(0:nfgtasks-1))
20164 !----------------------
20166 ! common /contacts/
20167 if(.not.allocated(icont_ref)) allocate(icont_ref(2,maxcont))
20168 allocate(icont(2,maxcont))
20170 ! common /contacts1/
20171 allocate(num_cont(0:nres+4))
20173 allocate(jcont(maxconts,nres))
20175 allocate(facont(maxconts,nres))
20177 allocate(gacont(3,maxconts,nres))
20178 !(3,maxconts,maxres)
20179 ! common /contacts_hb/
20180 allocate(gacontp_hb1(3,maxconts,nres))
20181 allocate(gacontp_hb2(3,maxconts,nres))
20182 allocate(gacontp_hb3(3,maxconts,nres))
20183 allocate(gacontm_hb1(3,maxconts,nres))
20184 allocate(gacontm_hb2(3,maxconts,nres))
20185 allocate(gacontm_hb3(3,maxconts,nres))
20186 allocate(gacont_hbr(3,maxconts,nres))
20187 allocate(grij_hb_cont(3,maxconts,nres))
20188 !(3,maxconts,maxres)
20189 allocate(facont_hb(maxconts,nres))
20191 allocate(ees0p(maxconts,nres))
20192 allocate(ees0m(maxconts,nres))
20193 allocate(d_cont(maxconts,nres))
20194 allocate(ees0plist(maxconts,nres))
20197 allocate(num_cont_hb(nres))
20199 allocate(jcont_hb(maxconts,nres))
20202 allocate(Ug(2,2,nres))
20203 allocate(Ugder(2,2,nres))
20204 allocate(Ug2(2,2,nres))
20205 allocate(Ug2der(2,2,nres))
20207 allocate(obrot(2,nres))
20208 allocate(obrot2(2,nres))
20209 allocate(obrot_der(2,nres))
20210 allocate(obrot2_der(2,nres))
20212 ! common /precomp1/
20213 allocate(mu(2,nres))
20214 allocate(muder(2,nres))
20215 allocate(Ub2(2,nres))
20218 allocate(Ub2der(2,nres))
20219 allocate(Ctobr(2,nres))
20220 allocate(Ctobrder(2,nres))
20221 allocate(Dtobr2(2,nres))
20222 allocate(Dtobr2der(2,nres))
20224 allocate(EUg(2,2,nres))
20225 allocate(EUgder(2,2,nres))
20226 allocate(CUg(2,2,nres))
20227 allocate(CUgder(2,2,nres))
20228 allocate(DUg(2,2,nres))
20229 allocate(Dugder(2,2,nres))
20230 allocate(DtUg2(2,2,nres))
20231 allocate(DtUg2der(2,2,nres))
20233 ! common /precomp2/
20234 allocate(Ug2Db1t(2,nres))
20235 allocate(Ug2Db1tder(2,nres))
20236 allocate(CUgb2(2,nres))
20237 allocate(CUgb2der(2,nres))
20239 allocate(EUgC(2,2,nres))
20240 allocate(EUgCder(2,2,nres))
20241 allocate(EUgD(2,2,nres))
20242 allocate(EUgDder(2,2,nres))
20243 allocate(DtUg2EUg(2,2,nres))
20244 allocate(Ug2DtEUg(2,2,nres))
20246 allocate(Ug2DtEUgder(2,2,2,nres))
20247 allocate(DtUg2EUgder(2,2,2,nres))
20249 allocate(b1(2,nres)) !(2,-maxtor:maxtor)
20250 allocate(b2(2,nres)) !(2,-maxtor:maxtor)
20251 allocate(b1tilde(2,nres)) !(2,-maxtor:maxtor)
20252 allocate(b2tilde(2,nres)) !(2,-maxtor:maxtor)
20254 allocate(ctilde(2,2,nres))
20255 allocate(dtilde(2,2,nres)) !(2,2,-maxtor:maxtor)
20256 allocate(gtb1(2,nres))
20257 allocate(gtb2(2,nres))
20258 allocate(cc(2,2,nres))
20259 allocate(dd(2,2,nres))
20260 allocate(ee(2,2,nres))
20261 allocate(gtcc(2,2,nres))
20262 allocate(gtdd(2,2,nres))
20263 allocate(gtee(2,2,nres))
20264 allocate(gUb2(2,nres))
20265 allocate(gteUg(2,2,nres))
20267 ! common /rotat_old/
20268 allocate(costab(nres))
20269 allocate(sintab(nres))
20270 allocate(costab2(nres))
20271 allocate(sintab2(nres))
20274 allocate(a_chuj(2,2,maxconts,nres))
20275 !(2,2,maxconts,maxres)(maxconts=maxres/4)
20276 allocate(a_chuj_der(2,2,3,5,maxconts,nres))
20277 !(2,2,3,5,maxconts,maxres)(maxconts=maxres/4)
20278 ! common /contdistrib/
20279 allocate(ncont_sent(nres))
20280 allocate(ncont_recv(nres))
20282 allocate(iat_sent(nres))
20284 allocate(iint_sent(4,nres,nres))
20285 allocate(iint_sent_local(4,nres,nres))
20287 allocate(iturn3_sent(4,0:nres+4))
20288 allocate(iturn4_sent(4,0:nres+4))
20289 allocate(iturn3_sent_local(4,nres))
20290 allocate(iturn4_sent_local(4,nres))
20292 allocate(itask_cont_from(0:nfgtasks-1))
20293 allocate(itask_cont_to(0:nfgtasks-1))
20294 !(0:max_fg_procs-1)
20298 !----------------------
20301 allocate(dcdv(6,maxdim))
20302 allocate(dxdv(6,maxdim))
20304 allocate(dxds(6,nres))
20306 allocate(gradx(3,-1:nres,0:2))
20307 allocate(gradc(3,-1:nres,0:2))
20309 allocate(gvdwx(3,-1:nres))
20310 allocate(gvdwc(3,-1:nres))
20311 allocate(gelc(3,-1:nres))
20312 allocate(gelc_long(3,-1:nres))
20313 allocate(gvdwpp(3,-1:nres))
20314 allocate(gvdwc_scpp(3,-1:nres))
20315 allocate(gradx_scp(3,-1:nres))
20316 allocate(gvdwc_scp(3,-1:nres))
20317 allocate(ghpbx(3,-1:nres))
20318 allocate(ghpbc(3,-1:nres))
20319 allocate(gradcorr(3,-1:nres))
20320 allocate(gradcorr_long(3,-1:nres))
20321 allocate(gradcorr5_long(3,-1:nres))
20322 allocate(gradcorr6_long(3,-1:nres))
20323 allocate(gcorr6_turn_long(3,-1:nres))
20324 allocate(gradxorr(3,-1:nres))
20325 allocate(gradcorr5(3,-1:nres))
20326 allocate(gradcorr6(3,-1:nres))
20327 allocate(gliptran(3,-1:nres))
20328 allocate(gliptranc(3,-1:nres))
20329 allocate(gliptranx(3,-1:nres))
20330 allocate(gshieldx(3,-1:nres))
20331 allocate(gshieldc(3,-1:nres))
20332 allocate(gshieldc_loc(3,-1:nres))
20333 allocate(gshieldx_ec(3,-1:nres))
20334 allocate(gshieldc_ec(3,-1:nres))
20335 allocate(gshieldc_loc_ec(3,-1:nres))
20336 allocate(gshieldx_t3(3,-1:nres))
20337 allocate(gshieldc_t3(3,-1:nres))
20338 allocate(gshieldc_loc_t3(3,-1:nres))
20339 allocate(gshieldx_t4(3,-1:nres))
20340 allocate(gshieldc_t4(3,-1:nres))
20341 allocate(gshieldc_loc_t4(3,-1:nres))
20342 allocate(gshieldx_ll(3,-1:nres))
20343 allocate(gshieldc_ll(3,-1:nres))
20344 allocate(gshieldc_loc_ll(3,-1:nres))
20345 allocate(grad_shield(3,-1:nres))
20346 allocate(gg_tube_sc(3,-1:nres))
20347 allocate(gg_tube(3,-1:nres))
20348 allocate(gradafm(3,-1:nres))
20349 allocate(gradb_nucl(3,-1:nres))
20350 allocate(gradbx_nucl(3,-1:nres))
20351 allocate(gvdwpsb1(3,-1:nres))
20352 allocate(gelpp(3,-1:nres))
20353 allocate(gvdwpsb(3,-1:nres))
20354 allocate(gelsbc(3,-1:nres))
20355 allocate(gelsbx(3,-1:nres))
20356 allocate(gvdwsbx(3,-1:nres))
20357 allocate(gvdwsbc(3,-1:nres))
20358 allocate(gsbloc(3,-1:nres))
20359 allocate(gsblocx(3,-1:nres))
20360 allocate(gradcorr_nucl(3,-1:nres))
20361 allocate(gradxorr_nucl(3,-1:nres))
20362 allocate(gradcorr3_nucl(3,-1:nres))
20363 allocate(gradxorr3_nucl(3,-1:nres))
20364 allocate(gvdwpp_nucl(3,-1:nres))
20365 allocate(gradpepcat(3,-1:nres))
20366 allocate(gradpepcatx(3,-1:nres))
20367 allocate(gradcatcat(3,-1:nres))
20368 allocate(gradnuclcat(3,-1:nres))
20369 allocate(gradnuclcatx(3,-1:nres))
20371 allocate(grad_shield_side(3,maxcontsshi,-1:nres))
20372 allocate(grad_shield_loc(3,maxcontsshi,-1:nres))
20373 ! grad for shielding surroing
20374 allocate(gloc(0:maxvar,0:2))
20375 allocate(gloc_x(0:maxvar,2))
20377 allocate(gel_loc(3,-1:nres))
20378 allocate(gel_loc_long(3,-1:nres))
20379 allocate(gcorr3_turn(3,-1:nres))
20380 allocate(gcorr4_turn(3,-1:nres))
20381 allocate(gcorr6_turn(3,-1:nres))
20382 allocate(gradb(3,-1:nres))
20383 allocate(gradbx(3,-1:nres))
20385 allocate(gel_loc_loc(maxvar))
20386 allocate(gel_loc_turn3(maxvar))
20387 allocate(gel_loc_turn4(maxvar))
20388 allocate(gel_loc_turn6(maxvar))
20389 allocate(gcorr_loc(maxvar))
20390 allocate(g_corr5_loc(maxvar))
20391 allocate(g_corr6_loc(maxvar))
20393 allocate(gsccorc(3,-1:nres))
20394 allocate(gsccorx(3,-1:nres))
20396 allocate(gsccor_loc(-1:nres))
20398 allocate(gvdwx_scbase(3,-1:nres))
20399 allocate(gvdwc_scbase(3,-1:nres))
20400 allocate(gvdwx_pepbase(3,-1:nres))
20401 allocate(gvdwc_pepbase(3,-1:nres))
20402 allocate(gvdwx_scpho(3,-1:nres))
20403 allocate(gvdwc_scpho(3,-1:nres))
20404 allocate(gvdwc_peppho(3,-1:nres))
20406 allocate(dtheta(3,2,-1:nres))
20408 allocate(gscloc(3,-1:nres))
20409 allocate(gsclocx(3,-1:nres))
20411 allocate(dphi(3,3,-1:nres))
20412 allocate(dalpha(3,3,-1:nres))
20413 allocate(domega(3,3,-1:nres))
20415 ! common /deriv_scloc/
20416 allocate(dXX_C1tab(3,nres))
20417 allocate(dYY_C1tab(3,nres))
20418 allocate(dZZ_C1tab(3,nres))
20419 allocate(dXX_Ctab(3,nres))
20420 allocate(dYY_Ctab(3,nres))
20421 allocate(dZZ_Ctab(3,nres))
20422 allocate(dXX_XYZtab(3,nres))
20423 allocate(dYY_XYZtab(3,nres))
20424 allocate(dZZ_XYZtab(3,nres))
20427 allocate(jgrad_start(nres))
20428 allocate(jgrad_end(nres))
20430 !----------------------
20433 allocate(ibond_displ(0:nfgtasks-1))
20434 allocate(ibond_count(0:nfgtasks-1))
20435 allocate(ithet_displ(0:nfgtasks-1))
20436 allocate(ithet_count(0:nfgtasks-1))
20437 allocate(iphi_displ(0:nfgtasks-1))
20438 allocate(iphi_count(0:nfgtasks-1))
20439 allocate(iphi1_displ(0:nfgtasks-1))
20440 allocate(iphi1_count(0:nfgtasks-1))
20441 allocate(ivec_displ(0:nfgtasks-1))
20442 allocate(ivec_count(0:nfgtasks-1))
20443 allocate(iset_displ(0:nfgtasks-1))
20444 allocate(iset_count(0:nfgtasks-1))
20445 allocate(iint_count(0:nfgtasks-1))
20446 allocate(iint_displ(0:nfgtasks-1))
20447 !(0:max_fg_procs-1)
20448 !----------------------
20451 allocate(gcart(3,-1:nres))
20452 allocate(gxcart(3,-1:nres))
20454 allocate(gradcag(3,-1:nres))
20455 allocate(gradxag(3,-1:nres))
20457 ! common /back_constr/
20458 !el in energy:Econstr_back allocate((:),allocatable :: utheta,ugamma,uscdiff !(maxfrag_back)
20459 allocate(dutheta(nres))
20460 allocate(dugamma(nres))
20462 allocate(duscdiff(3,nres))
20463 allocate(duscdiffx(3,nres))
20465 !el i io:read_fragments
20466 ! allocate((:,:,:),allocatable :: wfrag_back !(3,maxfrag_back,maxprocs/20)
20467 ! allocate((:,:,:),allocatable :: ifrag_back !(3,maxfrag_back,maxprocs/20)
20469 ! allocate(qinfrag(50,nprocs/20),wfrag(50,nprocs/20)) !(50,maxprocs/20)
20470 ! allocate(qinpair(100,nprocs/20),wpair(100,nprocs/20)) !(100,maxprocs/20)
20471 allocate(mset(0:nprocs)) !(maxprocs/20)
20473 ! allocate(ifrag(2,50,nprocs/20)) !(2,50,maxprocs/20)
20474 ! allocate(ipair(2,100,nprocs/20)) !(2,100,maxprocs/20)
20475 allocate(dUdconst(3,0:nres))
20476 allocate(dUdxconst(3,0:nres))
20477 allocate(dqwol(3,0:nres))
20478 allocate(dxqwol(3,0:nres))
20480 !----------------------
20482 ! common /sbridge/ in io_common: read_bridge
20483 !el allocate((:),allocatable :: iss !(maxss)
20484 ! common /links/ in io_common: read_bridge
20485 !el real(kind=8),dimension(:),allocatable :: dhpb,forcon,dhpb1 !(maxdim) !el dhpb1 !!! nie używane
20486 !el integer,dimension(:),allocatable :: ihpb,jhpb,ibecarb !(maxdim) !el ibecarb !!! nie używane
20487 ! common /dyn_ssbond/
20488 ! and side-chain vectors in theta or phi.
20489 allocate(dyn_ssbond_ij(0:nres+4,0:nres+4))
20493 dyn_ssbond_ij(:,:)=1.0d300
20497 ! if (nss.gt.0) then
20498 allocate(idssb(maxdim),jdssb(maxdim))
20499 ! allocate(newihpb(nss),newjhpb(nss))
20502 allocate(ishield_list(-1:nres))
20503 allocate(shield_list(maxcontsshi,-1:nres))
20504 allocate(dyn_ss_mask(nres))
20505 allocate(fac_shield(-1:nres))
20506 allocate(enetube(nres*2))
20507 allocate(enecavtube(nres*2))
20510 dyn_ss_mask(:)=.false.
20511 !----------------------
20513 ! Parameters of the SCCOR term
20515 !el in io_conf: parmread
20516 ! allocate(v1sccor(maxterm_sccor,3,-ntyp:ntyp,-ntyp:ntyp))
20517 ! allocate(v2sccor(maxterm_sccor,3,-ntyp:ntyp,-ntyp:ntyp)) !(maxterm_sccor,3,-ntyp:ntyp,-ntyp:ntyp)
20518 ! allocate(v0sccor(maxterm_sccor,-ntyp:ntyp,-ntyp:ntyp)) !(maxterm_sccor,-ntyp:ntyp,-ntyp:ntyp)
20519 ! allocate(isccortyp(-ntyp:ntyp)) !(-ntyp:ntyp)
20520 ! allocate(nterm_sccor(-ntyp:ntyp,-ntyp:ntyp))
20521 ! allocate(nlor_sccor(-ntyp:ntyp,-ntyp:ntyp)) !(-ntyp:ntyp,-ntyp:ntyp)
20522 ! allocate(vlor1sccor(maxterm_sccor,20,20))
20523 ! allocate(vlor2sccor(maxterm_sccor,20,20))
20524 ! allocate(vlor3sccor(maxterm_sccor,20,20)) !(maxterm_sccor,20,20)
20526 allocate(gloc_sc(3,0:2*nres,0:10))
20527 !(3,0:maxres2,10)maxres2=2*maxres
20528 allocate(dcostau(3,3,3,2*nres))
20529 allocate(dsintau(3,3,3,2*nres))
20530 allocate(dtauangle(3,3,3,2*nres))
20531 allocate(dcosomicron(3,3,3,2*nres))
20532 allocate(domicron(3,3,3,2*nres))
20533 !(3,3,3,maxres2)maxres2=2*maxres
20534 !----------------------
20537 allocate(varall(maxvar))
20538 !(maxvar)(maxvar=6*maxres)
20539 allocate(mask_theta(nres))
20540 allocate(mask_phi(nres))
20541 allocate(mask_side(nres))
20543 !----------------------
20546 allocate(uy(3,nres))
20547 allocate(uz(3,nres))
20549 allocate(uygrad(3,3,2,nres))
20550 allocate(uzgrad(3,3,2,nres))
20552 ! allocateion of lists JPRDLA
20553 allocate(newcontlistppi(300*nres))
20554 allocate(newcontlistscpi(300*nres))
20555 allocate(newcontlisti(300*nres))
20556 allocate(newcontlistppj(300*nres))
20557 allocate(newcontlistscpj(300*nres))
20558 allocate(newcontlistj(300*nres))
20561 end subroutine alloc_ener_arrays
20562 !-----------------------------------------------------------------
20563 subroutine ebond_nucl(estr_nucl)
20565 !c Evaluate the energy of stretching of the CA-CA and CA-SC virtual bonds
20568 real(kind=8),dimension(3) :: u,ud
20569 real(kind=8) :: usum,uprod,uprod1,uprod2,usumsqder
20570 real(kind=8) :: estr_nucl,diff
20571 integer :: iti,i,j,k,nbi
20573 !C print *,"I enter ebond"
20575 write (iout,*) "ibondp_start,ibondp_end",&
20576 ibondp_nucl_start,ibondp_nucl_end
20577 do i=ibondp_nucl_start,ibondp_nucl_end
20578 if (itype(i-1,2).eq.ntyp1_molec(2) .or. &
20579 itype(i,2).eq.ntyp1_molec(2)) cycle
20580 ! estr1=estr1+gnmr1(vbld(i),-1.0d0,distchainmax)
20582 ! gradb(j,i-1)=gnmr1prim(vbld(i),-1.0d0,distchainmax)
20583 ! & *dc(j,i-1)/vbld(i)
20585 ! if (energy_dec) write(iout,*)
20586 ! & "estr1",i,vbld(i),distchainmax,
20587 ! & gnmr1(vbld(i),-1.0d0,distchainmax)
20589 diff = vbld(i)-vbldp0_nucl
20590 if(energy_dec)write(iout,*) "estr_nucl_bb" , i,vbld(i),&
20591 vbldp0_nucl,diff,AKP_nucl*diff*diff
20592 estr_nucl=estr_nucl+diff*diff
20593 ! print *,estr_nucl
20595 gradb_nucl(j,i-1)=AKP_nucl*diff*dc(j,i-1)/vbld(i)
20597 !c write (iout,'(i5,3f10.5)') i,(gradb(j,i-1),j=1,3)
20599 estr_nucl=0.5d0*AKP_nucl*estr_nucl
20600 ! print *,"partial sum", estr_nucl,AKP_nucl
20603 write (iout,*) "ibondp_start,ibondp_end",&
20604 ibond_nucl_start,ibond_nucl_end
20606 do i=ibond_nucl_start,ibond_nucl_end
20607 !C print *, "I am stuck",i
20609 if (iti.eq.ntyp1_molec(2)) cycle
20610 nbi=nbondterm_nucl(iti)
20613 diff=vbld(i+nres)-vbldsc0_nucl(1,iti)
20616 write (iout,*) "estr_nucl_sc", i,iti,vbld(i+nres),vbldsc0_nucl(1,iti),diff, &
20617 AKSC_nucl(1,iti),AKSC_nucl(1,iti)*diff*diff
20618 estr_nucl=estr_nucl+0.5d0*AKSC_nucl(1,iti)*diff*diff
20619 ! print *,estr_nucl
20621 gradbx_nucl(j,i)=AKSC_nucl(1,iti)*diff*dc(j,i+nres)/vbld(i+nres)
20625 diff=vbld(i+nres)-vbldsc0_nucl(j,iti)
20626 ud(j)=aksc_nucl(j,iti)*diff
20627 u(j)=abond0_nucl(j,iti)+0.5d0*ud(j)*diff
20641 uprod2=uprod2*u(k)*u(k)
20645 usumsqder=usumsqder+ud(j)*uprod2
20647 estr_nucl=estr_nucl+uprod/usum
20649 gradbx_nucl(j,i)=usumsqder/(usum*usum)*dc(j,i+nres)/vbld(i+nres)
20653 !C print *,"I am about to leave ebond"
20655 end subroutine ebond_nucl
20657 !-----------------------------------------------------------------------------
20658 subroutine ebend_nucl(etheta_nucl)
20659 real(kind=8),dimension(nntheterm_nucl+1) :: coskt,sinkt !mmaxtheterm
20660 real(kind=8),dimension(nsingle_nucl+1) :: cosph1,sinph1,cosph2,sinph2 !maxsingle
20661 real(kind=8),dimension(ndouble_nucl+1,ndouble_nucl+1) :: cosph1ph2,sinph1ph2 !maxdouble,maxdouble
20662 logical :: lprn=.false., lprn1=.false.
20663 !el local variables
20664 integer :: i,k,iblock,ityp1,ityp2,ityp3,l,m
20665 real(kind=8) :: dethetai,dephii,dephii1,theti2,phii,phii1,ethetai
20666 real(kind=8) :: aux,etheta_nucl,ccl,ssl,scl,csl,ethetacnstr
20667 ! local variables for constrains
20668 real(kind=8) :: difi,thetiii
20671 ! print *,"ithet_start",ithet_nucl_start," ithet_end",ithet_nucl_end,nres
20672 do i=ithet_nucl_start,ithet_nucl_end
20673 if ((itype(i-1,2).eq.ntyp1_molec(2)).or.&
20674 (itype(i-2,2).eq.ntyp1_molec(2)).or. &
20675 (itype(i,2).eq.ntyp1_molec(2))) cycle
20679 theti2=0.5d0*theta(i)
20680 ityp2=ithetyp_nucl(itype(i-1,2))
20681 do k=1,nntheterm_nucl
20682 coskt(k)=dcos(k*theti2)
20683 sinkt(k)=dsin(k*theti2)
20685 if (i.gt.3 .and. itype(i-2,2).ne.ntyp1_molec(2)) then
20688 if (phii.ne.phii) phii=150.0
20692 ityp1=ithetyp_nucl(itype(i-2,2))
20693 do k=1,nsingle_nucl
20694 cosph1(k)=dcos(k*phii)
20695 sinph1(k)=dsin(k*phii)
20699 ityp1=nthetyp_nucl+1
20700 do k=1,nsingle_nucl
20706 if (i.lt.nres .and. itype(i,2).ne.ntyp1_molec(2)) then
20709 if (phii1.ne.phii1) phii1=150.0
20710 phii1=pinorm(phii1)
20714 ityp3=ithetyp_nucl(itype(i,2))
20715 do k=1,nsingle_nucl
20716 cosph2(k)=dcos(k*phii1)
20717 sinph2(k)=dsin(k*phii1)
20721 ityp3=nthetyp_nucl+1
20722 do k=1,nsingle_nucl
20727 ethetai=aa0thet_nucl(ityp1,ityp2,ityp3)
20728 do k=1,ndouble_nucl
20730 ccl=cosph1(l)*cosph2(k-l)
20731 ssl=sinph1(l)*sinph2(k-l)
20732 scl=sinph1(l)*cosph2(k-l)
20733 csl=cosph1(l)*sinph2(k-l)
20734 cosph1ph2(l,k)=ccl-ssl
20735 cosph1ph2(k,l)=ccl+ssl
20736 sinph1ph2(l,k)=scl+csl
20737 sinph1ph2(k,l)=scl-csl
20741 write (iout,*) "i",i," ityp1",ityp1," ityp2",ityp2,&
20742 " ityp3",ityp3," theti2",theti2," phii",phii," phii1",phii1
20743 write (iout,*) "coskt and sinkt",nntheterm_nucl
20744 do k=1,nntheterm_nucl
20745 write (iout,*) k,coskt(k),sinkt(k)
20748 do k=1,ntheterm_nucl
20749 ethetai=ethetai+aathet_nucl(k,ityp1,ityp2,ityp3)*sinkt(k)
20750 dethetai=dethetai+0.5d0*k*aathet_nucl(k,ityp1,ityp2,ityp3)&
20753 write (iout,*) "k",k," aathet",aathet_nucl(k,ityp1,ityp2,ityp3),&
20757 write (iout,*) "cosph and sinph"
20758 do k=1,nsingle_nucl
20759 write (iout,*) k,cosph1(k),sinph1(k),cosph2(k),sinph2(k)
20761 write (iout,*) "cosph1ph2 and sinph2ph2"
20762 do k=2,ndouble_nucl
20764 write (iout,*) l,k,cosph1ph2(l,k),cosph1ph2(k,l),&
20765 sinph1ph2(l,k),sinph1ph2(k,l)
20768 write(iout,*) "ethetai",ethetai
20770 do m=1,ntheterm2_nucl
20771 do k=1,nsingle_nucl
20772 aux=bbthet_nucl(k,m,ityp1,ityp2,ityp3)*cosph1(k)&
20773 +ccthet_nucl(k,m,ityp1,ityp2,ityp3)*sinph1(k)&
20774 +ddthet_nucl(k,m,ityp1,ityp2,ityp3)*cosph2(k)&
20775 +eethet_nucl(k,m,ityp1,ityp2,ityp3)*sinph2(k)
20776 ethetai=ethetai+sinkt(m)*aux
20777 dethetai=dethetai+0.5d0*m*aux*coskt(m)
20778 dephii=dephii+k*sinkt(m)*(&
20779 ccthet_nucl(k,m,ityp1,ityp2,ityp3)*cosph1(k)-&
20780 bbthet_nucl(k,m,ityp1,ityp2,ityp3)*sinph1(k))
20781 dephii1=dephii1+k*sinkt(m)*(&
20782 eethet_nucl(k,m,ityp1,ityp2,ityp3)*cosph2(k)-&
20783 ddthet_nucl(k,m,ityp1,ityp2,ityp3)*sinph2(k))
20785 write (iout,*) "m",m," k",k," bbthet",&
20786 bbthet_nucl(k,m,ityp1,ityp2,ityp3)," ccthet",&
20787 ccthet_nucl(k,m,ityp1,ityp2,ityp3)," ddthet",&
20788 ddthet_nucl(k,m,ityp1,ityp2,ityp3)," eethet",&
20789 eethet_nucl(k,m,ityp1,ityp2,ityp3)," ethetai",ethetai
20793 write(iout,*) "ethetai",ethetai
20794 do m=1,ntheterm3_nucl
20795 do k=2,ndouble_nucl
20797 aux=ffthet_nucl(l,k,m,ityp1,ityp2,ityp3)*cosph1ph2(l,k)+&
20798 ffthet_nucl(k,l,m,ityp1,ityp2,ityp3)*cosph1ph2(k,l)+&
20799 ggthet_nucl(l,k,m,ityp1,ityp2,ityp3)*sinph1ph2(l,k)+&
20800 ggthet_nucl(k,l,m,ityp1,ityp2,ityp3)*sinph1ph2(k,l)
20801 ethetai=ethetai+sinkt(m)*aux
20802 dethetai=dethetai+0.5d0*m*coskt(m)*aux
20803 dephii=dephii+l*sinkt(m)*(&
20804 -ffthet_nucl(l,k,m,ityp1,ityp2,ityp3)*sinph1ph2(l,k)-&
20805 ffthet_nucl(k,l,m,ityp1,ityp2,ityp3)*sinph1ph2(k,l)+&
20806 ggthet_nucl(l,k,m,ityp1,ityp2,ityp3)*cosph1ph2(l,k)+&
20807 ggthet_nucl(k,l,m,ityp1,ityp2,ityp3)*cosph1ph2(k,l))
20808 dephii1=dephii1+(k-l)*sinkt(m)*( &
20809 -ffthet_nucl(l,k,m,ityp1,ityp2,ityp3)*sinph1ph2(l,k)+&
20810 ffthet_nucl(k,l,m,ityp1,ityp2,ityp3)*sinph1ph2(k,l)+&
20811 ggthet_nucl(l,k,m,ityp1,ityp2,ityp3)*cosph1ph2(l,k)-&
20812 ggthet_nucl(k,l,m,ityp1,ityp2,ityp3)*cosph1ph2(k,l))
20814 write (iout,*) "m",m," k",k," l",l," ffthet", &
20815 ffthet_nucl(l,k,m,ityp1,ityp2,ityp3), &
20816 ffthet_nucl(k,l,m,ityp1,ityp2,ityp3)," ggthet",&
20817 ggthet_nucl(l,k,m,ityp1,ityp2,ityp3),&
20818 ggthet_nucl(k,l,m,ityp1,ityp2,ityp3)," ethetai",ethetai
20819 write (iout,*) cosph1ph2(l,k)*sinkt(m), &
20820 cosph1ph2(k,l)*sinkt(m),&
20821 sinph1ph2(l,k)*sinkt(m),sinph1ph2(k,l)*sinkt(m)
20827 if (lprn1) write (iout,'(i2,3f8.1,9h ethetai ,f10.5)') &
20828 i,theta(i)*rad2deg,phii*rad2deg, &
20829 phii1*rad2deg,ethetai
20830 etheta_nucl=etheta_nucl+ethetai
20831 ! print *,i,"partial sum",etheta_nucl
20832 if (i.gt.3) gloc(i-3,icg)=gloc(i-3,icg)+wang_nucl*dephii
20833 if (i.lt.nres) gloc(i-2,icg)=gloc(i-2,icg)+wang_nucl*dephii1
20834 gloc(nphi+i-2,icg)=wang_nucl*dethetai
20837 end subroutine ebend_nucl
20838 !----------------------------------------------------
20839 subroutine etor_nucl(etors_nucl)
20840 ! implicit real*8 (a-h,o-z)
20841 ! include 'DIMENSIONS'
20842 ! include 'COMMON.VAR'
20843 ! include 'COMMON.GEO'
20844 ! include 'COMMON.LOCAL'
20845 ! include 'COMMON.TORSION'
20846 ! include 'COMMON.INTERACT'
20847 ! include 'COMMON.DERIV'
20848 ! include 'COMMON.CHAIN'
20849 ! include 'COMMON.NAMES'
20850 ! include 'COMMON.IOUNITS'
20851 ! include 'COMMON.FFIELD'
20852 ! include 'COMMON.TORCNSTR'
20853 ! include 'COMMON.CONTROL'
20854 real(kind=8) :: etors_nucl,edihcnstr
20856 !el local variables
20857 integer :: i,j,iblock,itori,itori1
20858 real(kind=8) :: phii,gloci,v1ij,v2ij,cosphi,sinphi,&
20859 vl1ij,vl2ij,vl3ij,pom1,difi,etors_ii,pom
20860 ! Set lprn=.true. for debugging
20864 ! print *,"iphi_nucl_start/end", iphi_nucl_start,iphi_nucl_end
20865 do i=iphi_nucl_start,iphi_nucl_end
20866 if (itype(i-2,2).eq.ntyp1_molec(2) .or. itype(i-1,2).eq.ntyp1_molec(2) &
20867 .or. itype(i-3,2).eq.ntyp1_molec(2) &
20868 .or. itype(i,2).eq.ntyp1_molec(2)) cycle
20870 itori=itortyp_nucl(itype(i-2,2))
20871 itori1=itortyp_nucl(itype(i-1,2))
20873 ! print *,i,itori,itori1
20875 !C Regular cosine and sine terms
20876 do j=1,nterm_nucl(itori,itori1)
20877 v1ij=v1_nucl(j,itori,itori1)
20878 v2ij=v2_nucl(j,itori,itori1)
20879 cosphi=dcos(j*phii)
20880 sinphi=dsin(j*phii)
20881 etors_nucl=etors_nucl+v1ij*cosphi+v2ij*sinphi
20882 if (energy_dec) etors_ii=etors_ii+&
20883 v1ij*cosphi+v2ij*sinphi
20884 gloci=gloci+j*(v2ij*cosphi-v1ij*sinphi)
20888 !C E = SUM ----------------------------------- - v1
20889 !C [v2 cos(phi/2)+v3 sin(phi/2)]^2 + 1
20891 cosphi=dcos(0.5d0*phii)
20892 sinphi=dsin(0.5d0*phii)
20893 do j=1,nlor_nucl(itori,itori1)
20894 vl1ij=vlor1_nucl(j,itori,itori1)
20895 vl2ij=vlor2_nucl(j,itori,itori1)
20896 vl3ij=vlor3_nucl(j,itori,itori1)
20897 pom=vl2ij*cosphi+vl3ij*sinphi
20898 pom1=1.0d0/(pom*pom+1.0d0)
20899 etors_nucl=etors_nucl+vl1ij*pom1
20900 if (energy_dec) etors_ii=etors_ii+ &
20903 gloci=gloci+vl1ij*(vl3ij*cosphi-vl2ij*sinphi)*pom
20905 !C Subtract the constant term
20906 etors_nucl=etors_nucl-v0_nucl(itori,itori1)
20907 if (energy_dec) write (iout,'(a6,i5,0pf7.3)') &
20908 'etor',i,etors_ii-v0_nucl(itori,itori1)
20910 write (iout,'(2(a3,2x,i3,2x),2i3,6f8.3/26x,6f8.3/)') &
20911 restyp(itype(i-2,2),2),i-2,restyp(itype(i-1,2),2),i-1,itori,itori1, &
20912 (v1_nucl(j,itori,itori1),j=1,6),(v2_nucl(j,itori,itori1),j=1,6)
20913 gloc(i-3,icg)=gloc(i-3,icg)+wtor_nucl*gloci
20914 !c write (iout,*) 'i=',i,' gloc=',gloc(i-3,icg)
20917 end subroutine etor_nucl
20918 !------------------------------------------------------------
20919 subroutine epp_nucl_sub(evdw1,ees)
20921 !C This subroutine calculates the average interaction energy and its gradient
20922 !C in the virtual-bond vectors between non-adjacent peptide groups, based on
20923 !C the potential described in Liwo et al., Protein Sci., 1993, 2, 1715.
20924 !C The potential depends both on the distance of peptide-group centers and on
20925 !C the orientation of the CA-CA virtual bonds.
20927 integer :: i,j,k,iteli,itelj,num_conti,isubchap,ind
20928 real(kind=8) :: dxi,dyi,dzi,dxj,dyj,dzj,aaa,bbbi,sslipi,ssgradlipi, &
20929 sslipj,ssgradlipj,faclipij2
20930 real(kind=8) :: xj,yj,zj,rij,rrmij,sss,r3ij,r6ij,evdw1,&
20931 dx_normi,dy_normi,dz_normi,xmedi,ymedi,zmedi,&
20932 dx_normj,dy_normj,dz_normj,rmij,ev1,ev2,evdwij,facvdw
20933 real(kind=8) :: xj_safe,yj_safe,zj_safe,xj_temp,yj_temp,zj_temp,&
20934 dist_temp, dist_init,sss_grad,fac,evdw1ij
20935 integer xshift,yshift,zshift
20936 real(kind=8),dimension(3):: ggg,gggp,gggm,erij
20937 real(kind=8) :: ees,eesij
20938 !c 4/26/02 - AL scaling factor for 1,4 repulsive VDW interactions
20939 real(kind=8) scal_el /0.5d0/
20945 !c Loop over all pairs of interacting peptide groups except i,i+2 and i,i+3
20947 ! print *,"iatel_s_nucl,iatel_e_nucl",iatel_s_nucl,iatel_e_nucl
20948 do i=iatel_s_nucl,iatel_e_nucl
20949 if (itype(i,2).eq.ntyp1_molec(2) .or. itype(i+1,2).eq.ntyp1_molec(2)) cycle
20953 dx_normi=dc_norm(1,i)
20954 dy_normi=dc_norm(2,i)
20955 dz_normi=dc_norm(3,i)
20956 xmedi=c(1,i)+0.5d0*dxi
20957 ymedi=c(2,i)+0.5d0*dyi
20958 zmedi=c(3,i)+0.5d0*dzi
20959 call to_box(xmedi,ymedi,zmedi)
20960 call lipid_layer(xmedi,ymedi,zmedi,sslipi,ssgradlipi)
20962 do j=ielstart_nucl(i),ielend_nucl(i)
20963 if (itype(j,2).eq.ntyp1_molec(2) .or. itype(j+1,2).eq.ntyp1_molec(2)) cycle
20968 ! xj=c(1,j)+0.5D0*dxj-xmedi
20969 ! yj=c(2,j)+0.5D0*dyj-ymedi
20970 ! zj=c(3,j)+0.5D0*dzj-zmedi
20971 xj=c(1,j)+0.5D0*dxj
20972 yj=c(2,j)+0.5D0*dyj
20973 zj=c(3,j)+0.5D0*dzj
20974 call to_box(xj,yj,zj)
20975 call lipid_layer(xj,yj,zj,sslipj,ssgradlipj)
20976 faclipij2=(sslipi+sslipj)/2.0d0*lipscale**2+1.0d0
20977 xj=boxshift(xj-xmedi,boxxsize)
20978 yj=boxshift(yj-ymedi,boxysize)
20979 zj=boxshift(zj-zmedi,boxzsize)
20980 rij=xj*xj+yj*yj+zj*zj
20981 !c write (2,*)"ij",i,j," r0pp",r0pp," rij",rij," epspp",epspp
20982 fac=(r0pp**2/rij)**3
20986 fac=(-ev1-evdw1ij)/rij
20987 ! write (2,*)"fac",fac," ev1",ev1," ev2",ev2," evdw1ij",evdw1ij
20988 if (energy_dec) write(iout,'(2i5,a9,f10.4)') i,j,"evdw1ij",evdw1ij
20989 evdw1=evdw1+evdw1ij
20991 !C Calculate contributions to the Cartesian gradient.
20997 gvdwpp_nucl(k,i)=gvdwpp_nucl(k,i)-ggg(k)
20998 gvdwpp_nucl(k,j)=gvdwpp_nucl(k,j)+ggg(k)
21000 !c phoshate-phosphate electrostatic interactions
21003 eesij=dexp(-BEES*rij)*fac
21004 ! write (2,*)"fac",fac," eesijpp",eesij
21005 if (energy_dec) write(iout,'(2i5,a9,f10.4)') i,j,"eesijpp",eesij
21008 fac=-(fac+BEES)*eesij*fac
21012 !c write(2,*) "ggg",i,j,ggg(1),ggg(2),ggg(3)
21013 !c write(2,*) "gelpp",i,(gelpp(k,i),k=1,3)
21014 !c write(2,*) "gelpp",j,(gelpp(k,j),k=1,3)
21016 gelpp(k,i)=gelpp(k,i)-ggg(k)
21017 gelpp(k,j)=gelpp(k,j)+ggg(k)
21024 !c write (2,*) "i",i," gelpp",(gelpp(k,i),k=1,3)
21026 gvdwpp_nucl(k,i)=6*gvdwpp_nucl(k,i)
21027 !c gelpp(k,i)=332.0d0*gelpp(k,i)
21028 gelpp(k,i)=AEES*gelpp(k,i)
21030 !c write (2,*) "i",i," gelpp",(gelpp(k,i),k=1,3)
21032 !c write (2,*) "total EES",ees
21034 end subroutine epp_nucl_sub
21035 !---------------------------------------------------------------------
21036 subroutine epsb(evdwpsb,eelpsb)
21039 !C This subroutine calculates the excluded-volume interaction energy between
21040 !C peptide-group centers and side chains and its gradient in virtual-bond and
21041 !C side-chain vectors.
21043 real(kind=8),dimension(3):: ggg
21044 integer :: i,iint,j,k,iteli,itypj,subchap
21045 real(kind=8) :: evdw2,evdw2_14,xi,yi,zi,xj,yj,zj,rrij,fac,&
21046 e1,e2,evdwij,rij,evdwpsb,eelpsb
21047 real(kind=8) :: xj_safe,yj_safe,zj_safe,xj_temp,yj_temp,zj_temp,&
21048 dist_temp, dist_init
21049 integer xshift,yshift,zshift
21051 !cd print '(a)','Enter ESCP'
21052 !cd write (iout,*) 'iatscp_s=',iatscp_s,' iatscp_e=',iatscp_e
21055 ! print *,"iatscp_s_nucl,iatscp_e_nucl",iatscp_s_nucl,iatscp_e_nucl
21056 do i=iatscp_s_nucl,iatscp_e_nucl
21057 if (itype(i,2).eq.ntyp1_molec(2) &
21058 .or. itype(i+1,2).eq.ntyp1_molec(2)) cycle
21059 xi=0.5D0*(c(1,i)+c(1,i+1))
21060 yi=0.5D0*(c(2,i)+c(2,i+1))
21061 zi=0.5D0*(c(3,i)+c(3,i+1))
21062 call to_box(xi,yi,zi)
21064 do iint=1,nscp_gr_nucl(i)
21066 do j=iscpstart_nucl(i,iint),iscpend_nucl(i,iint)
21068 if (itypj.eq.ntyp1_molec(2)) cycle
21069 !C Uncomment following three lines for SC-p interactions
21070 !c xj=c(1,nres+j)-xi
21071 !c yj=c(2,nres+j)-yi
21072 !c zj=c(3,nres+j)-zi
21073 !C Uncomment following three lines for Ca-p interactions
21080 call to_box(xj,yj,zj)
21081 xj=boxshift(xj-xi,boxxsize)
21082 yj=boxshift(yj-yi,boxysize)
21083 zj=boxshift(zj-zi,boxzsize)
21085 dist_init=xj**2+yj**2+zj**2
21087 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
21089 e1=fac*fac*aad_nucl(itypj)
21090 e2=fac*bad_nucl(itypj)
21091 if (iabs(j-i) .le. 2) then
21096 evdwpsb=evdwpsb+evdwij
21097 if (energy_dec) write (iout,'(a6,2i5,0pf7.3,a4)') &
21098 'evdw2',i,j,evdwij,"tu4"
21100 !C Calculate contributions to the gradient in the virtual-bond and SC vectors.
21102 fac=-(evdwij+e1)*rrij
21107 gvdwpsb1(k,i)=gvdwpsb1(k,i)-ggg(k)
21108 gvdwpsb(k,j)=gvdwpsb(k,j)+ggg(k)
21116 gvdwpsb(j,i)=expon*gvdwpsb(j,i)
21117 gvdwpsb1(j,i)=expon*gvdwpsb1(j,i)
21121 end subroutine epsb
21123 !------------------------------------------------------
21124 subroutine esb_gb(evdwsb,eelsb)
21127 integer :: iint,itypi,itypi1,itypj,subchap,num_conti2
21128 real(kind=8) :: xi,yi,zi,sig,rij_shift,fac,e1,e2,sigm,epsi
21129 real(kind=8) :: evdw,sig0iji,evdwsb,eelsb,ecorr,eelij
21130 real(kind=8) :: xj_safe,yj_safe,zj_safe,xj_temp,yj_temp,zj_temp,&
21131 dist_temp, dist_init,aa,bb,faclip,sig0ij
21140 ! print *,"iastsc_nucl",iatsc_s_nucl,iatsc_e_nucl
21141 do i=iatsc_s_nucl,iatsc_e_nucl
21145 ! PRINT *,"I=",i,itypi
21146 if (itypi.eq.ntyp1_molec(2)) cycle
21147 itypi1=itype(i+1,2)
21151 call to_box(xi,yi,zi)
21152 call lipid_layer(xi,yi,zi,sslipi,ssgradlipi)
21153 dxi=dc_norm(1,nres+i)
21154 dyi=dc_norm(2,nres+i)
21155 dzi=dc_norm(3,nres+i)
21156 dsci_inv=vbld_inv(i+nres)
21158 !C Calculate SC interaction energy.
21160 do iint=1,nint_gr_nucl(i)
21161 ! print *,"tu?",i,istart_nucl(i,iint),iend_nucl(i,iint)
21162 do j=istart_nucl(i,iint),iend_nucl(i,iint)
21166 if (itypj.eq.ntyp1_molec(2)) cycle
21167 dscj_inv=vbld_inv(j+nres)
21168 sig0ij=sigma_nucl(itypi,itypj)
21169 chi1=chi_nucl(itypi,itypj)
21170 chi2=chi_nucl(itypj,itypi)
21172 chip1=chip_nucl(itypi,itypj)
21173 chip2=chip_nucl(itypj,itypi)
21175 ! xj=c(1,nres+j)-xi
21176 ! yj=c(2,nres+j)-yi
21177 ! zj=c(3,nres+j)-zi
21181 call to_box(xj,yj,zj)
21182 ! call lipid_layer(xj,yj,zj,sslipj,ssgradlipj)
21183 ! aa=aa_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0 &
21184 ! +aa_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
21185 ! bb=bb_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0 &
21186 ! +bb_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
21187 xj=boxshift(xj-xi,boxxsize)
21188 yj=boxshift(yj-yi,boxysize)
21189 zj=boxshift(zj-zi,boxzsize)
21191 dxj=dc_norm(1,nres+j)
21192 dyj=dc_norm(2,nres+j)
21193 dzj=dc_norm(3,nres+j)
21194 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
21196 !C Calculate angle-dependent terms of energy and contributions to their
21201 om1=dxi*erij(1)+dyi*erij(2)+dzi*erij(3)
21202 om2=dxj*erij(1)+dyj*erij(2)+dzj*erij(3)
21203 om12=dxi*dxj+dyi*dyj+dzi*dzj
21204 call sc_angular_nucl
21206 sig=sig0ij*dsqrt(sigsq)
21207 rij_shift=1.0D0/rij-sig+sig0ij
21208 ! print *,rij_shift,"rij_shift"
21209 !c write (2,*) " rij",1.0D0/rij," sig",sig," sig0ij",sig0ij,
21210 !c & " rij_shift",rij_shift
21211 if (rij_shift.le.0.0D0) then
21216 !c---------------------------------------------------------------
21217 rij_shift=1.0D0/rij_shift
21218 fac=rij_shift**expon
21219 e1=fac*fac*aa_nucl(itypi,itypj)
21220 e2=fac*bb_nucl(itypi,itypj)
21221 evdwij=eps1*eps2rt*(e1+e2)
21222 !c write (2,*) "eps1",eps1," eps2rt",eps2rt,
21223 !c & " e1",e1," e2",e2," evdwij",evdwij
21225 evdwij=evdwij*eps2rt
21226 evdwsb=evdwsb+evdwij
21228 sigm=dabs(aa_nucl(itypi,itypj)/bb_nucl(itypi,itypj))**(1.0D0/6.0D0)
21229 epsi=bb_nucl(itypi,itypj)**2/aa_nucl(itypi,itypj)
21230 write (iout,'(2(a3,i3,2x),17(0pf7.3))') &
21231 restyp(itypi,2),i,restyp(itypj,2),j, &
21232 epsi,sigm,chi1,chi2,chip1,chip2, &
21233 eps1,eps2rt**2,sig,sig0ij, &
21234 om1,om2,om12,1.0D0/rij,1.0D0/rij_shift,&
21236 write (iout,*) "aa",aa_nucl(itypi,itypj)," bb",bb_nucl(itypi,itypj)
21239 if (energy_dec) write (iout,'(a6,2i5,e15.3,a4)') &
21240 'evdw',i,j,evdwij,"tu3"
21243 !C Calculate gradient components.
21244 e1=e1*eps1*eps2rt**2
21245 fac=-expon*(e1+evdwij)*rij_shift
21249 !C Calculate the radial part of the gradient
21253 !C Calculate angular part of the gradient.
21255 call eelsbij(eelij,num_conti2)
21256 if (energy_dec .and. &
21257 (j.eq.i+1.or.j.eq.nres-i+1.or.j.eq.nres-i.or.j.eq.nres-i+2)) &
21258 write (istat,'(e14.5)') evdwij
21262 num_cont_hb(i)=num_conti2
21264 !c write (iout,*) "Number of loop steps in EGB:",ind
21265 !cccc energy_dec=.false.
21267 end subroutine esb_gb
21268 !-------------------------------------------------------------------------------
21269 subroutine eelsbij(eesij,num_conti2)
21272 real(kind=8),dimension(3) :: ggg,gggp,gggm,dcosb,dcosg
21273 real(kind=8),dimension(3,3) :: erder,uryg,urzg,vryg,vrzg
21274 real(kind=8) :: xj_safe,yj_safe,zj_safe,xj_temp,yj_temp,zj_temp,&
21275 dist_temp, dist_init,rlocshield,fracinbuf
21276 integer xshift,yshift,zshift,ilist,iresshield,num_conti2
21278 !c 4/26/02 - AL scaling factor for 1,4 repulsive VDW interactions
21279 real(kind=8) scal_el /0.5d0/
21280 integer :: iteli,itelj,kkk,kkll,m,isubchap
21281 real(kind=8) :: ael6i,rrmij,rmij,r0ij,fcont,fprimcont,ees0tmp,facfac
21282 real(kind=8) :: ees,evdw1,eel_loc,aaa,bbb,ael3i,ael63i,ael32i
21283 real(kind=8) :: dx_normj,dy_normj,dz_normj,&
21284 r3ij,r6ij,cosa,cosb,cosg,fac,ev1,ev2,fac3,fac4,fac5,fac6,&
21285 el1,el2,el3,el4,eesij,ees0ij,facvdw,facel,fac1,ecosa,&
21286 ecosb,ecosg,ury,urz,vry,vrz,facr,a22der,a23der,a32der,&
21287 a33der,eel_loc_ij,cosa4,wij,cosbg1,cosbg2,ees0pij,&
21288 ees0pij1,ees0mij,ees0mij1,fac3p,ees0mijp,ees0pijp,&
21289 ecosa1,ecosb1,ecosg1,ecosa2,ecosb2,ecosg2,ecosap,ecosbp,&
21290 ecosgp,ecosam,ecosbm,ecosgm,ghalf,itypi,itypj
21294 ! print *,i,j,itypi,itypj,istype(i),istype(j),"????"
21295 ael6i=ael6_nucl(itypi,itypj)
21296 ael3i=ael3_nucl(itypi,itypj)
21297 ael63i=ael63_nucl(itypi,itypj)
21298 ael32i=ael32_nucl(itypi,itypj)
21299 !c write (iout,*) "eelecij",i,j,itype(i),itype(j),
21300 !c & ael6i,ael3i,ael63i,al32i,rij,rrij
21304 dx_normi=dc_norm(1,i+nres)
21305 dy_normi=dc_norm(2,i+nres)
21306 dz_normi=dc_norm(3,i+nres)
21307 dx_normj=dc_norm(1,j+nres)
21308 dy_normj=dc_norm(2,j+nres)
21309 dz_normj=dc_norm(3,j+nres)
21310 !c xj=c(1,j)+0.5D0*dxj-xmedi
21311 !c yj=c(2,j)+0.5D0*dyj-ymedi
21312 !c zj=c(3,j)+0.5D0*dzj-zmedi
21313 if (ipot_nucl.ne.2) then
21314 cosa=dx_normi*dx_normj+dy_normi*dy_normj+dz_normi*dz_normj
21315 cosb=(xj*dx_normi+yj*dy_normi+zj*dz_normi)*rmij
21316 cosg=(xj*dx_normj+yj*dy_normj+zj*dz_normj)*rmij
21324 fac=cosa-3.0D0*cosb*cosg
21326 fac1=3.0d0*(cosb*cosb+cosg*cosg)
21331 !c write (iout,*) "r3ij",r3ij," r6ij",r6ij," fac",fac," fac1",fac1,
21332 !c & " fac2",fac2," fac3",fac3," fac4",fac4," fac5",fac5," fac6",fac6
21333 el1=fac3*(4.0D0+facfac-fac1)
21335 el3=fac5*(2.0d0-2.0d0*facfac+fac1)
21337 eesij=el1+el2+el3+el4
21338 !C 12/26/95 - for the evaluation of multi-body H-bonding interactions
21339 ees0ij=4.0D0+facfac-fac1
21341 if (energy_dec) then
21342 if(j.eq.i+1.or.j.eq.nres-i+1.or.j.eq.nres-i.or.j.eq.nres-i+2) &
21343 write (istat,'(2a1,i4,1x,2a1,i4,4f10.5,3e12.5,$)') &
21344 sugartyp(istype(i)),restyp(itypi,2),i,sugartyp(istype(j)),&
21345 restyp(itypj,2),j,1.0d0/rij,cosa,cosb,cosg,fac*r3ij, &
21346 (4.0D0+facfac-fac1)*r6ij,(2.0d0-2.0d0*facfac+fac1)*r6ij
21347 write (iout,'(a6,2i5,e15.3)') 'ees',i,j,eesij
21351 !C Calculate contributions to the Cartesian gradient.
21353 facel=-3.0d0*rrij*(eesij+el1+el3+el4)
21359 !* Radial derivatives. First process both termini of the fragment (i,j)
21365 gelsbc(k,j)=gelsbc(k,j)+ggg(k)
21366 gelsbc(k,i)=gelsbc(k,i)-ggg(k)
21367 gelsbx(k,j)=gelsbx(k,j)+ggg(k)
21368 gelsbx(k,i)=gelsbx(k,i)-ggg(k)
21373 ecosa=2.0D0*fac3*fac1+fac4+(-4.0d0*fac5+2.0d0*fac6)*fac1
21378 ecosb=fac3*(fac1*cosg+cosb)+cosg*fac4+(cosb+2*fac1*cosg)*fac5+&
21380 ecosg=fac3*(fac1*cosb+cosg)+cosb*fac4+(cosg+2*fac1*cosb)*fac5+&
21383 dcosb(k)=rij*(dc_norm(k,i+nres)-erij(k)*cosb)
21384 dcosg(k)=rij*(dc_norm(k,j+nres)-erij(k)*cosg)
21387 ggg(k)=ecosb*dcosb(k)+ecosg*dcosg(k)
21390 gelsbx(k,i)=gelsbx(k,i)-ggg(k) &
21391 +(ecosa*(dc_norm(k,j+nres)-cosa*dc_norm(k,i+nres))&
21392 + ecosb*(erij(k)-cosb*dc_norm(k,i+nres)))*vbld_inv(i+nres)
21393 gelsbx(k,j)=gelsbx(k,j)+ggg(k) &
21394 +(ecosa*(dc_norm(k,i+nres)-cosa*dc_norm(k,j+nres))&
21395 + ecosg*(erij(k)-cosg*dc_norm(k,j+nres)))*vbld_inv(j+nres)
21396 gelsbc(k,j)=gelsbc(k,j)+ggg(k)
21397 gelsbc(k,i)=gelsbc(k,i)-ggg(k)
21399 ! IF ( (wcorr_nucl.gt.0.0d0.or.wcorr3_nucl.gt.0.0d0) .and.
21400 IF ( j.gt.i+1 .and.&
21401 num_conti.le.maxcont) THEN
21403 !C Calculate the contact function. The ith column of the array JCONT will
21404 !C contain the numbers of atoms that make contacts with the atom I (of numbers
21405 !C greater than I). The arrays FACONT and GACONT will contain the values of
21406 !C the contact function and its derivative.
21407 r0ij=2.20D0*sigma_nucl(itypi,itypj)
21408 !c write (2,*) "ij",i,j," rij",1.0d0/rij," r0ij",r0ij
21409 call gcont(rij,r0ij,1.0D0,0.2d0/r0ij,fcont,fprimcont)
21410 !c write (2,*) "fcont",fcont
21411 if (fcont.gt.0.0D0) then
21412 num_conti=num_conti+1
21413 num_conti2=num_conti2+1
21415 if (num_conti.gt.maxconts) then
21416 write (iout,*) 'WARNING - max. # of contacts exceeded;',&
21417 ' will skip next contacts for this conf.',maxconts
21419 jcont_hb(num_conti,i)=j
21420 !c write (iout,*) "num_conti",num_conti,
21421 !c & " jcont_hb",jcont_hb(num_conti,i)
21422 !C Calculate contact energies
21424 wij=cosa-3.0D0*cosb*cosg
21427 fac3=dsqrt(-ael6i)*r3ij
21428 !c write (2,*) "ael6i",ael6i," r3ij",r3ij," fac3",fac3
21429 ees0tmp=4.0D0+cosa4+wij*wij-3.0D0*cosbg1*cosbg1
21430 if (ees0tmp.gt.0) then
21431 ees0pij=dsqrt(ees0tmp)
21435 ees0tmp=4.0D0-cosa4+wij*wij-3.0D0*cosbg2*cosbg2
21436 if (ees0tmp.gt.0) then
21437 ees0mij=dsqrt(ees0tmp)
21441 ees0p(num_conti,i)=0.5D0*fac3*(ees0pij+ees0mij)
21442 ees0m(num_conti,i)=0.5D0*fac3*(ees0pij-ees0mij)
21443 !c write (iout,*) "i",i," j",j,
21444 !c & " ees0m",ees0m(num_conti,i)," ees0p",ees0p(num_conti,i)
21445 ees0pij1=fac3/ees0pij
21446 ees0mij1=fac3/ees0mij
21447 fac3p=-3.0D0*fac3*rrij
21448 ees0pijp=0.5D0*fac3p*(ees0pij+ees0mij)
21449 ees0mijp=0.5D0*fac3p*(ees0pij-ees0mij)
21450 ecosa1= ees0pij1*( 1.0D0+0.5D0*wij)
21451 ecosb1=-1.5D0*ees0pij1*(wij*cosg+cosbg1)
21452 ecosg1=-1.5D0*ees0pij1*(wij*cosb+cosbg1)
21453 ecosa2= ees0mij1*(-1.0D0+0.5D0*wij)
21454 ecosb2=-1.5D0*ees0mij1*(wij*cosg+cosbg2)
21455 ecosg2=-1.5D0*ees0mij1*(wij*cosb-cosbg2)
21456 ecosap=ecosa1+ecosa2
21457 ecosbp=ecosb1+ecosb2
21458 ecosgp=ecosg1+ecosg2
21459 ecosam=ecosa1-ecosa2
21460 ecosbm=ecosb1-ecosb2
21461 ecosgm=ecosg1-ecosg2
21463 facont_hb(num_conti,i)=fcont
21464 fprimcont=fprimcont/rij
21466 gggp(k)=ecosbp*dcosb(k)+ecosgp*dcosg(k)
21467 gggm(k)=ecosbm*dcosb(k)+ecosgm*dcosg(k)
21469 gggp(1)=gggp(1)+ees0pijp*xj
21470 gggp(2)=gggp(2)+ees0pijp*yj
21471 gggp(3)=gggp(3)+ees0pijp*zj
21472 gggm(1)=gggm(1)+ees0mijp*xj
21473 gggm(2)=gggm(2)+ees0mijp*yj
21474 gggm(3)=gggm(3)+ees0mijp*zj
21475 !C Derivatives due to the contact function
21476 gacont_hbr(1,num_conti,i)=fprimcont*xj
21477 gacont_hbr(2,num_conti,i)=fprimcont*yj
21478 gacont_hbr(3,num_conti,i)=fprimcont*zj
21481 !c Gradient of the correlation terms
21483 gacontp_hb1(k,num_conti,i)= &
21484 (ecosap*(dc_norm(k,j+nres)-cosa*dc_norm(k,i+nres)) &
21485 + ecosbp*(erij(k)-cosb*dc_norm(k,i+nres)))*vbld_inv(i+nres)
21486 gacontp_hb2(k,num_conti,i)= &
21487 (ecosap*(dc_norm(k,i+nres)-cosa*dc_norm(k,j+nres)) &
21488 + ecosgp*(erij(k)-cosg*dc_norm(k,j+nres)))*vbld_inv(j+nres)
21489 gacontp_hb3(k,num_conti,i)=gggp(k)
21490 gacontm_hb1(k,num_conti,i)= &
21491 (ecosam*(dc_norm(k,j+nres)-cosa*dc_norm(k,i+nres)) &
21492 + ecosbm*(erij(k)-cosb*dc_norm(k,i+nres)))*vbld_inv(i+nres)
21493 gacontm_hb2(k,num_conti,i)= &
21494 (ecosam*(dc_norm(k,i+nres)-cosa*dc_norm(k,j+nres))&
21495 + ecosgm*(erij(k)-cosg*dc_norm(k,j+nres)))*vbld_inv(j+nres)
21496 gacontm_hb3(k,num_conti,i)=gggm(k)
21502 end subroutine eelsbij
21503 !------------------------------------------------------------------
21504 subroutine sc_grad_nucl
21507 real(kind=8),dimension(3) :: dcosom1,dcosom2
21508 eom1=eps2der*eps2rt_om1+sigder*sigsq_om1
21509 eom2=eps2der*eps2rt_om2+sigder*sigsq_om2
21510 eom12=evdwij*eps1_om12+eps2der*eps2rt_om12+sigder*sigsq_om12
21512 dcosom1(k)=rij*(dc_norm(k,nres+i)-om1*erij(k))
21513 dcosom2(k)=rij*(dc_norm(k,nres+j)-om2*erij(k))
21516 gg(k)=gg(k)+eom1*dcosom1(k)+eom2*dcosom2(k)
21519 gvdwsbx(k,i)=gvdwsbx(k,i)-gg(k) &
21520 +(eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,nres+i))&
21521 +eom1*(erij(k)-om1*dc_norm(k,nres+i)))*dsci_inv
21522 gvdwsbx(k,j)=gvdwsbx(k,j)+gg(k) &
21523 +(eom12*(dc_norm(k,nres+i)-om12*dc_norm(k,nres+j)) &
21524 +eom2*(erij(k)-om2*dc_norm(k,nres+j)))*dscj_inv
21527 !C Calculate the components of the gradient in DC and X
21530 gvdwsbc(l,i)=gvdwsbc(l,i)-gg(l)
21531 gvdwsbc(l,j)=gvdwsbc(l,j)+gg(l)
21534 end subroutine sc_grad_nucl
21535 !-----------------------------------------------------------------------
21536 subroutine esb(esbloc)
21537 !C Calculate the local energy of a side chain and its derivatives in the
21538 !C corresponding virtual-bond valence angles THETA and the spherical angles
21539 !C ALPHA and OMEGA derived from AM1 all-atom calculations.
21540 !C added by Urszula Kozlowska. 07/11/2007
21542 real(kind=8),dimension(3):: x_prime,y_prime,z_prime
21543 real(kind=8),dimension(9):: x
21544 real(kind=8) :: sumene,dsc_i,dp2_i,xx,yy,zz,sumene1, &
21545 sumene2,sumene3,sumene4,s1,s1_6,s2,s2_6,&
21546 de_dxx,de_dyy,de_dzz,de_dt,s1_t,s1_6_t,s2_t,s2_6_t
21547 real(kind=8),dimension(3):: dXX_Ci1,dYY_Ci1,dZZ_Ci1,dXX_Ci,&
21548 dYY_Ci,dZZ_Ci,dXX_XYZ,dYY_XYZ,dZZ_XYZ,dt_dCi,dt_dCi1
21549 real(kind=8) :: esbloc,delta,cosfac2,cosfac,sinfac2,sinfac,de_dtt,&
21550 cossc,cossc1,cosfac2xx,sinfac2yy,pom1,pom
21551 integer::it,nlobit,i,j,k
21552 ! common /sccalc/ time11,time12,time112,theti,it,nlobit
21555 do i=loc_start_nucl,loc_end_nucl
21556 if (itype(i,2).eq.ntyp1_molec(2)) cycle
21557 costtab(i+1) =dcos(theta(i+1))
21558 sinttab(i+1) =dsqrt(1-costtab(i+1)*costtab(i+1))
21559 cost2tab(i+1)=dsqrt(0.5d0*(1.0d0+costtab(i+1)))
21560 sint2tab(i+1)=dsqrt(0.5d0*(1.0d0-costtab(i+1)))
21561 cosfac2=0.5d0/(1.0d0+costtab(i+1))
21562 cosfac=dsqrt(cosfac2)
21563 sinfac2=0.5d0/(1.0d0-costtab(i+1))
21564 sinfac=dsqrt(sinfac2)
21566 if (it.eq.10) goto 1
21569 !C Compute the axes of tghe local cartesian coordinates system; store in
21570 !c x_prime, y_prime and z_prime
21577 !C write(2,*) "dc_norm", dc_norm(1,i+nres),dc_norm(2,i+nres),
21578 !C & dc_norm(3,i+nres)
21580 x_prime(j) = (dc_norm(j,i) - dc_norm(j,i-1))*cosfac
21581 y_prime(j) = (dc_norm(j,i) + dc_norm(j,i-1))*sinfac
21584 z_prime(j) = -uz(j,i-1)
21592 xx = xx + x_prime(j)*dc_norm(j,i+nres)
21593 yy = yy + y_prime(j)*dc_norm(j,i+nres)
21594 zz = zz + z_prime(j)*dc_norm(j,i+nres)
21602 x(j) = sc_parmin_nucl(j,it)
21605 !Cc diagnostics - remove later
21606 xx1 = dcos(alph(2))
21607 yy1 = dsin(alph(2))*dcos(omeg(2))
21608 zz1 = -dsin(alph(2))*dsin(omeg(2))
21609 write(2,'(3f8.1,3f9.3,1x,3f9.3)') &
21610 alph(2)*rad2deg,omeg(2)*rad2deg,theta(3)*rad2deg,xx,yy,zz,&
21612 !C," --- ", xx_w,yy_w,zz_w
21615 sumene = enesc_nucl(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
21616 esbloc = esbloc + sumene
21617 sumene2= enesc_nucl(x,xx,yy,0.0d0,cost2tab(i+1),sint2tab(i+1))
21618 ! print *,"enecomp",sumene,sumene2
21619 ! if (energy_dec) write(iout,*) "i",i," esbloc",sumene,esbloc,xx,yy,zz
21620 ! if (energy_dec) write(iout,*) "x",(x(k),k=1,9)
21622 write (2,*) "x",(x(k),k=1,9)
21624 !C This section to check the numerical derivatives of the energy of ith side
21625 !C chain in xx, yy, zz, and theta. Use the -DDEBUG compiler option or insert
21626 !C #define DEBUG in the code to turn it on.
21628 write (2,*) "sumene =",sumene
21632 write (2,*) xx,yy,zz
21633 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
21634 de_dxx_num=(sumenep-sumene)/aincr
21636 write (2,*) "xx+ sumene from enesc=",sumenep,sumene
21639 write (2,*) xx,yy,zz
21640 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
21641 de_dyy_num=(sumenep-sumene)/aincr
21643 write (2,*) "yy+ sumene from enesc=",sumenep,sumene
21646 write (2,*) xx,yy,zz
21647 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
21648 de_dzz_num=(sumenep-sumene)/aincr
21650 write (2,*) "zz+ sumene from enesc=",sumenep,sumene
21651 costsave=cost2tab(i+1)
21652 sintsave=sint2tab(i+1)
21653 cost2tab(i+1)=dcos(0.5d0*(theta(i+1)+aincr))
21654 sint2tab(i+1)=dsin(0.5d0*(theta(i+1)+aincr))
21655 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
21656 de_dt_num=(sumenep-sumene)/aincr
21657 write (2,*) " t+ sumene from enesc=",sumenep,sumene
21658 cost2tab(i+1)=costsave
21659 sint2tab(i+1)=sintsave
21660 !C End of diagnostics section.
21663 !C Compute the gradient of esc
21665 de_dxx=x(1)+2*x(4)*xx+x(7)*zz+x(8)*yy
21666 de_dyy=x(2)+2*x(5)*yy+x(8)*xx+x(9)*zz
21667 de_dzz=x(3)+2*x(6)*zz+x(7)*xx+x(9)*yy
21670 write (2,*) "x",(x(k),k=1,9)
21671 write (2,*) "xx",xx," yy",yy," zz",zz
21672 write (2,*) "de_xx ",de_xx," de_yy ",de_yy,&
21673 " de_zz ",de_zz," de_tt ",de_tt
21674 write (2,*) "de_xx_num",de_dxx_num," de_yy_num",de_dyy_num,&
21675 " de_zz_num",de_dzz_num," de_dt_num",de_dt_num
21678 cossc=scalar(dc_norm(1,i),dc_norm(1,i+nres))
21679 cossc1=scalar(dc_norm(1,i-1),dc_norm(1,i+nres))
21680 cosfac2xx=cosfac2*xx
21681 sinfac2yy=sinfac2*yy
21683 dt_dCi(k) = -(dc_norm(k,i-1)+costtab(i+1)*dc_norm(k,i))*&
21685 dt_dCi1(k)= -(dc_norm(k,i)+costtab(i+1)*dc_norm(k,i-1))*&
21687 pom=(dC_norm(k,i+nres)-cossc*dC_norm(k,i))*vbld_inv(i+1)
21688 pom1=(dC_norm(k,i+nres)-cossc1*dC_norm(k,i-1))*vbld_inv(i)
21689 !c write (iout,*) "i",i," k",k," pom",pom," pom1",pom1,
21690 !c & " dt_dCi",dt_dCi(k)," dt_dCi1",dt_dCi1(k)
21691 !c write (iout,*) "dC_norm",(dC_norm(j,i),j=1,3),
21692 !c & (dC_norm(j,i-1),j=1,3)," vbld_inv",vbld_inv(i+1),vbld_inv(i)
21693 dXX_Ci(k)=pom*cosfac-dt_dCi(k)*cosfac2xx
21694 dXX_Ci1(k)=-pom1*cosfac-dt_dCi1(k)*cosfac2xx
21695 dYY_Ci(k)=pom*sinfac+dt_dCi(k)*sinfac2yy
21696 dYY_Ci1(k)=pom1*sinfac+dt_dCi1(k)*sinfac2yy
21700 dZZ_Ci(k)=dZZ_Ci(k)-uzgrad(j,k,2,i-1)*dC_norm(j,i+nres)
21701 dZZ_Ci1(k)=dZZ_Ci1(k)-uzgrad(j,k,1,i-1)*dC_norm(j,i+nres)
21704 dXX_XYZ(k)=vbld_inv(i+nres)*(x_prime(k)-xx*dC_norm(k,i+nres))
21705 dYY_XYZ(k)=vbld_inv(i+nres)*(y_prime(k)-yy*dC_norm(k,i+nres))
21706 dZZ_XYZ(k)=vbld_inv(i+nres)*(z_prime(k)-zz*dC_norm(k,i+nres))
21708 dt_dCi(k) = -dt_dCi(k)/sinttab(i+1)
21709 dt_dCi1(k)= -dt_dCi1(k)/sinttab(i+1)
21713 dXX_Ctab(k,i)=dXX_Ci(k)
21714 dXX_C1tab(k,i)=dXX_Ci1(k)
21715 dYY_Ctab(k,i)=dYY_Ci(k)
21716 dYY_C1tab(k,i)=dYY_Ci1(k)
21717 dZZ_Ctab(k,i)=dZZ_Ci(k)
21718 dZZ_C1tab(k,i)=dZZ_Ci1(k)
21719 dXX_XYZtab(k,i)=dXX_XYZ(k)
21720 dYY_XYZtab(k,i)=dYY_XYZ(k)
21721 dZZ_XYZtab(k,i)=dZZ_XYZ(k)
21724 !c write (iout,*) "k",k," dxx_ci1",dxx_ci1(k)," dyy_ci1",
21725 !c & dyy_ci1(k)," dzz_ci1",dzz_ci1(k)
21726 !c write (iout,*) "k",k," dxx_ci",dxx_ci(k)," dyy_ci",
21727 !c & dyy_ci(k)," dzz_ci",dzz_ci(k)
21728 !c write (iout,*) "k",k," dt_dci",dt_dci(k)," dt_dci",
21730 !c write (iout,*) "k",k," dxx_XYZ",dxx_XYZ(k)," dyy_XYZ",
21731 !c & dyy_XYZ(k)," dzz_XYZ",dzz_XYZ(k)
21732 gsbloc(k,i-1)=gsbloc(k,i-1)+(de_dxx*dxx_ci1(k) &
21733 +de_dyy*dyy_ci1(k)+de_dzz*dzz_ci1(k)+de_dt*dt_dCi1(k))
21734 gsbloc(k,i)=gsbloc(k,i)+(de_dxx*dxx_Ci(k) &
21735 +de_dyy*dyy_Ci(k)+de_dzz*dzz_Ci(k)+de_dt*dt_dCi(k))
21736 gsblocx(k,i)= de_dxx*dxx_XYZ(k)&
21737 +de_dyy*dyy_XYZ(k)+de_dzz*dzz_XYZ(k)
21738 ! print *,i,de_dxx*dxx_ci1(k)+de_dyy*dyy_ci1(k),de_dzz*dzz_ci1(k)*2
21740 !c write(iout,*) "ENERGY GRAD = ", (gsbloc(k,i-1),k=1,3),
21741 !c & (gsbloc(k,i),k=1,3),(gsblocx(k,i),k=1,3)
21743 !C to check gradient call subroutine check_grad
21749 !=-------------------------------------------------------
21750 real(kind=8) function enesc_nucl(x,xx,yy,zz,cost2,sint2)
21752 real(kind=8),dimension(9):: x(9)
21753 real(kind=8) :: xx,yy,zz,cost2,sint2,sumene1,sumene2, &
21754 sumene3,sumene4,sumene,dsc_i,dp2_i,dscp1,dscp2,s1,s1_6,s2,s2_6
21756 !c write (2,*) "enesc"
21757 !c write (2,*) "x",(x(i),i=1,9)
21758 !c write(2,*)"xx",xx," yy",yy," zz",zz," cost2",cost2," sint2",sint2
21759 sumene=x(1)*xx+x(2)*yy+x(3)*zz+x(4)*xx**2 &
21760 + x(5)*yy**2+x(6)*zz**2+x(7)*xx*zz+x(8)*xx*yy &
21764 end function enesc_nucl
21765 !-----------------------------------------------------------------------------
21766 subroutine multibody_hb_nucl(ecorr,ecorr3,n_corr,n_corr1)
21769 integer,parameter :: max_cont=2000
21770 integer,parameter:: max_dim=2*(8*3+6)
21771 integer, parameter :: msglen1=max_cont*max_dim
21772 integer,parameter :: msglen2=2*msglen1
21773 integer source,CorrelType,CorrelID,Error
21774 real(kind=8) :: buffer(max_cont,max_dim)
21775 integer status(MPI_STATUS_SIZE)
21776 integer :: ierror,nbytes
21778 real(kind=8),dimension(3):: gx(3),gx1(3)
21779 real(kind=8) :: time00
21781 integer i,j,i1,j1,jj,kk,num_conti,num_conti1,nn
21782 real(kind=8) ecorr,ecorr3
21783 integer :: n_corr,n_corr1,mm,msglen
21784 !C Set lprn=.true. for debugging
21789 if(.not.allocated(zapas2)) allocate(zapas2(3,maxconts,nres,8))
21791 if (nfgtasks.le.1) goto 30
21793 write (iout,'(a)') 'Contact function values:'
21795 write (iout,'(2i3,50(1x,i2,f5.2))') &
21796 i,num_cont_hb(i),(jcont_hb(j,i),facont_hb(j,i), &
21797 j=1,num_cont_hb(i))
21800 !C Caution! Following code assumes that electrostatic interactions concerning
21801 !C a given atom are split among at most two processors!
21811 !c write (*,*) 'MyRank',MyRank,' mm',mm
21814 !c write (*,*) 'Sending: MyRank',MyRank,' mm',mm,' ldone',ldone
21815 if (fg_rank.gt.0) then
21816 !C Send correlation contributions to the preceding processor
21818 nn=num_cont_hb(iatel_s_nucl)
21819 call pack_buffer(max_cont,max_dim,iatel_s,0,buffer)
21820 !c write (*,*) 'The BUFFER array:'
21822 !c write (*,'(i2,9(3f8.3,2x))') i,(buffer(i,j),j=1,30)
21824 if (ielstart_nucl(iatel_s_nucl).gt.iatel_s_nucl+ispp) then
21826 call pack_buffer(max_cont,max_dim,iatel_s+1,30,buffer)
21827 !C Clear the contacts of the atom passed to the neighboring processor
21828 nn=num_cont_hb(iatel_s_nucl+1)
21830 !c write (*,'(i2,9(3f8.3,2x))') i,(buffer(i,j+30),j=1,30)
21832 num_cont_hb(iatel_s_nucl)=0
21834 !cd write (iout,*) 'Processor ',fg_rank,MyRank,
21835 !cd & ' is sending correlation contribution to processor',fg_rank-1,
21836 !cd & ' msglen=',msglen
21837 !c write (*,*) 'Processor ',fg_rank,MyRank,
21838 !c & ' is sending correlation contribution to processor',fg_rank-1,
21839 !c & ' msglen=',msglen,' CorrelType=',CorrelType
21841 call MPI_Send(buffer,msglen,MPI_DOUBLE_PRECISION,fg_rank-1, &
21842 CorrelType,FG_COMM,IERROR)
21843 time_sendrecv=time_sendrecv+MPI_Wtime()-time00
21844 !cd write (iout,*) 'Processor ',fg_rank,
21845 !cd & ' has sent correlation contribution to processor',fg_rank-1,
21846 !cd & ' msglen=',msglen,' CorrelID=',CorrelID
21847 !c write (*,*) 'Processor ',fg_rank,
21848 !c & ' has sent correlation contribution to processor',fg_rank-1,
21849 !c & ' msglen=',msglen,' CorrelID=',CorrelID
21851 endif ! (fg_rank.gt.0)
21855 !c write (*,*) 'Receiving: MyRank',MyRank,' mm',mm,' ldone',ldone
21856 if (fg_rank.lt.nfgtasks-1) then
21857 !C Receive correlation contributions from the next processor
21859 if (ielend_nucl(iatel_e_nucl).lt.nct_molec(2)-1) msglen=msglen2
21860 !cd write (iout,*) 'Processor',fg_rank,
21861 !cd & ' is receiving correlation contribution from processor',fg_rank+1,
21862 !cd & ' msglen=',msglen,' CorrelType=',CorrelType
21863 !c write (*,*) 'Processor',fg_rank,
21864 !c &' is receiving correlation contribution from processor',fg_rank+1,
21865 !c & ' msglen=',msglen,' CorrelType=',CorrelType
21868 do while (nbytes.le.0)
21869 call MPI_Probe(fg_rank+1,CorrelType,FG_COMM,status,IERROR)
21870 call MPI_Get_count(status,MPI_DOUBLE_PRECISION,nbytes,IERROR)
21872 !c print *,'Processor',myrank,' msglen',msglen,' nbytes',nbytes
21873 call MPI_Recv(buffer,nbytes,MPI_DOUBLE_PRECISION, &
21874 fg_rank+1,CorrelType,FG_COMM,status,IERROR)
21875 time_sendrecv=time_sendrecv+MPI_Wtime()-time00
21876 !c write (*,*) 'Processor',fg_rank,
21877 !c &' has received correlation contribution from processor',fg_rank+1,
21878 !c & ' msglen=',msglen,' nbytes=',nbytes
21879 !c write (*,*) 'The received BUFFER array:'
21881 !c write (*,'(i2,9(3f8.3,2x))') i,(buffer(i,j),j=1,60)
21883 if (msglen.eq.msglen1) then
21884 call unpack_buffer(max_cont,max_dim,iatel_e_nucl+1,0,buffer)
21885 else if (msglen.eq.msglen2) then
21886 call unpack_buffer(max_cont,max_dim,iatel_e_nucl,0,buffer)
21887 call unpack_buffer(max_cont,max_dim,iatel_e_nucl+1,30,buffer)
21890 'ERROR!!!! message length changed while processing correlations.'
21892 'ERROR!!!! message length changed while processing correlations.'
21893 call MPI_Abort(MPI_COMM_WORLD,Error,IERROR)
21894 endif ! msglen.eq.msglen1
21895 endif ! fg_rank.lt.nfgtasks-1
21902 write (iout,'(a)') 'Contact function values:'
21903 do i=nnt_molec(2),nct_molec(2)-1
21904 write (iout,'(2i3,50(1x,i2,f5.2))') &
21905 i,num_cont_hb(i),(jcont_hb(j,i),facont_hb(j,i), &
21906 j=1,num_cont_hb(i))
21911 !C Remove the loop below after debugging !!!
21912 ! do i=nnt_molec(2),nct_molec(2)
21914 ! gradcorr_nucl(j,i)=0.0D0
21915 ! gradxorr_nucl(j,i)=0.0D0
21916 ! gradcorr3_nucl(j,i)=0.0D0
21917 ! gradxorr3_nucl(j,i)=0.0D0
21920 ! print *,"iatsc_s_nucl,iatsc_e_nucl",iatsc_s_nucl,iatsc_e_nucl
21921 !C Calculate the local-electrostatic correlation terms
21922 do i=iatsc_s_nucl,iatsc_e_nucl
21924 num_conti=num_cont_hb(i)
21925 num_conti1=num_cont_hb(i+1)
21926 ! print *,i,num_conti,num_conti1
21931 !c write (iout,*) 'i=',i,' j=',j,' i1=',i1,' j1=',j1,
21932 !c & ' jj=',jj,' kk=',kk
21933 if (j1.eq.j+1 .or. j1.eq.j-1) then
21935 !C Contacts I-J and (I+1)-(J+1) or (I+1)-(J-1) occur simultaneously.
21936 !C The system gains extra energy.
21937 !C Tentative expression & coefficients; assumed d(stacking)=4.5 A,
21938 !C parallel dipoles of stacknig bases and sin(mui)sin(muj)/eps/d^3=0.7
21939 !C Need to implement full formulas 34 and 35 from Liwo et al., 1998.
21941 ecorr=ecorr+ehbcorr_nucl(i,j,i+1,j1,jj,kk,0.528D0,0.132D0)
21942 if (energy_dec) write (iout,'(a6,2i5,0pf7.3)') &
21943 'ecorrh',i,j,ehbcorr_nucl(i,j,i+1,j1,jj,kk,0.528D0,0.132D0)
21945 else if (j1.eq.j) then
21947 !C Contacts I-J and I-(J+1) occur simultaneously.
21948 !C The system loses extra energy.
21949 !C Tentative expression & c?oefficients; assumed d(stacking)=4.5 A,
21950 !C parallel dipoles of stacknig bases and sin(mui)sin(muj)/eps/d^3=0.7
21951 !C Need to implement full formulas 32 from Liwo et al., 1998.
21953 !c write (iout,*) 'ecorr3: i=',i,' j=',j,' i1=',i1,' j1=',j1,
21954 !c & ' jj=',jj,' kk=',kk
21955 ecorr3=ecorr3+ehbcorr3_nucl(i,j,i+1,j,jj,kk,0.310D0,-0.155D0)
21960 !c write (iout,*) 'ecorr3: i=',i,' j=',j,' i1=',i1,' j1=',j1,
21961 !c & ' jj=',jj,' kk=',kk
21962 if (j1.eq.j+1) then
21963 !C Contacts I-J and (I+1)-J occur simultaneously.
21964 !C The system loses extra energy.
21965 ecorr3=ecorr3+ehbcorr3_nucl(i,j,i,j+1,jj,kk,0.310D0,-0.155D0)
21971 end subroutine multibody_hb_nucl
21972 !-----------------------------------------------------------
21973 real(kind=8) function ehbcorr_nucl(i,j,k,l,jj,kk,coeffp,coeffm)
21974 ! implicit real*8 (a-h,o-z)
21975 ! include 'DIMENSIONS'
21976 ! include 'COMMON.IOUNITS'
21977 ! include 'COMMON.DERIV'
21978 ! include 'COMMON.INTERACT'
21979 ! include 'COMMON.CONTACTS'
21980 real(kind=8),dimension(3) :: gx,gx1
21982 !el local variables
21983 integer :: i,j,k,l,jj,kk,ll,ilist,m, iresshield
21984 real(kind=8) :: coeffp,coeffm,eij,ekl,ees0pij,ees0pkl,ees0mij,&
21985 ees0mkl,ees,coeffpees0pij,coeffmees0mij,&
21986 coeffpees0pkl,coeffmees0mkl,gradlongij,gradlongkl, &
21990 eij=facont_hb(jj,i)
21991 ekl=facont_hb(kk,k)
21992 ees0pij=ees0p(jj,i)
21993 ees0pkl=ees0p(kk,k)
21994 ees0mij=ees0m(jj,i)
21995 ees0mkl=ees0m(kk,k)
21997 ees=-(coeffp*ees0pij*ees0pkl+coeffm*ees0mij*ees0mkl)
21998 ! print *,"ehbcorr_nucl",ekont,ees
21999 !cd ees=-(coeffp*ees0pkl+coeffm*ees0mkl)
22000 !C Following 4 lines for diagnostics.
22005 !cd write (iout,*)'Contacts have occurred for nucleic bases',
22006 !cd & i,j,' fcont:',eij,' eij',' eesij',ees0pij,ees0mij,' and ',k,l
22007 !cd & ,' fcont ',ekl,' eeskl',ees0pkl,ees0mkl,' ees=',ees
22008 !C Calculate the multi-body contribution to energy.
22009 ! ecorr_nucl=ecorr_nucl+ekont*ees
22010 !C Calculate multi-body contributions to the gradient.
22011 coeffpees0pij=coeffp*ees0pij
22012 coeffmees0mij=coeffm*ees0mij
22013 coeffpees0pkl=coeffp*ees0pkl
22014 coeffmees0mkl=coeffm*ees0mkl
22016 gradxorr_nucl(ll,i)=gradxorr_nucl(ll,i) &
22017 -ekont*(coeffpees0pkl*gacontp_hb1(ll,jj,i)+&
22018 coeffmees0mkl*gacontm_hb1(ll,jj,i))
22019 gradxorr_nucl(ll,j)=gradxorr_nucl(ll,j) &
22020 -ekont*(coeffpees0pkl*gacontp_hb2(ll,jj,i)+&
22021 coeffmees0mkl*gacontm_hb2(ll,jj,i))
22022 gradxorr_nucl(ll,k)=gradxorr_nucl(ll,k) &
22023 -ekont*(coeffpees0pij*gacontp_hb1(ll,kk,k)+&
22024 coeffmees0mij*gacontm_hb1(ll,kk,k))
22025 gradxorr_nucl(ll,l)=gradxorr_nucl(ll,l) &
22026 -ekont*(coeffpees0pij*gacontp_hb2(ll,kk,k)+ &
22027 coeffmees0mij*gacontm_hb2(ll,kk,k))
22028 gradlongij=ees*ekl*gacont_hbr(ll,jj,i)- &
22029 ekont*(coeffpees0pkl*gacontp_hb3(ll,jj,i)+ &
22030 coeffmees0mkl*gacontm_hb3(ll,jj,i))
22031 gradcorr_nucl(ll,j)=gradcorr_nucl(ll,j)+gradlongij
22032 gradcorr_nucl(ll,i)=gradcorr_nucl(ll,i)-gradlongij
22033 gradlongkl=ees*eij*gacont_hbr(ll,kk,k)- &
22034 ekont*(coeffpees0pij*gacontp_hb3(ll,kk,k)+ &
22035 coeffmees0mij*gacontm_hb3(ll,kk,k))
22036 gradcorr_nucl(ll,l)=gradcorr_nucl(ll,l)+gradlongkl
22037 gradcorr_nucl(ll,k)=gradcorr_nucl(ll,k)-gradlongkl
22038 gradxorr_nucl(ll,i)=gradxorr_nucl(ll,i)-gradlongij
22039 gradxorr_nucl(ll,j)=gradxorr_nucl(ll,j)+gradlongij
22040 gradxorr_nucl(ll,k)=gradxorr_nucl(ll,k)-gradlongkl
22041 gradxorr_nucl(ll,l)=gradxorr_nucl(ll,l)+gradlongkl
22043 ehbcorr_nucl=ekont*ees
22045 end function ehbcorr_nucl
22046 !-------------------------------------------------------------------------
22048 real(kind=8) function ehbcorr3_nucl(i,j,k,l,jj,kk,coeffp,coeffm)
22049 ! implicit real*8 (a-h,o-z)
22050 ! include 'DIMENSIONS'
22051 ! include 'COMMON.IOUNITS'
22052 ! include 'COMMON.DERIV'
22053 ! include 'COMMON.INTERACT'
22054 ! include 'COMMON.CONTACTS'
22055 real(kind=8),dimension(3) :: gx,gx1
22057 !el local variables
22058 integer :: i,j,k,l,jj,kk,ll,ilist,m, iresshield
22059 real(kind=8) :: coeffp,coeffm,eij,ekl,ees0pij,ees0pkl,ees0mij,&
22060 ees0mkl,ees,coeffpees0pij,coeffmees0mij,&
22061 coeffpees0pkl,coeffmees0mkl,gradlongij,gradlongkl, &
22065 eij=facont_hb(jj,i)
22066 ekl=facont_hb(kk,k)
22067 ees0pij=ees0p(jj,i)
22068 ees0pkl=ees0p(kk,k)
22069 ees0mij=ees0m(jj,i)
22070 ees0mkl=ees0m(kk,k)
22072 ees=-(coeffp*ees0pij*ees0pkl+coeffm*ees0mij*ees0mkl)
22073 !cd ees=-(coeffp*ees0pkl+coeffm*ees0mkl)
22074 !C Following 4 lines for diagnostics.
22079 !cd write (iout,*)'Contacts have occurred for nucleic bases',
22080 !cd & i,j,' fcont:',eij,' eij',' eesij',ees0pij,ees0mij,' and ',k,l
22081 !cd & ,' fcont ',ekl,' eeskl',ees0pkl,ees0mkl,' ees=',ees
22082 !C Calculate the multi-body contribution to energy.
22083 ! ecorr=ecorr+ekont*ees
22084 !C Calculate multi-body contributions to the gradient.
22085 coeffpees0pij=coeffp*ees0pij
22086 coeffmees0mij=coeffm*ees0mij
22087 coeffpees0pkl=coeffp*ees0pkl
22088 coeffmees0mkl=coeffm*ees0mkl
22090 gradxorr3_nucl(ll,i)=gradxorr3_nucl(ll,i) &
22091 -ekont*(coeffpees0pkl*gacontp_hb1(ll,jj,i)+&
22092 coeffmees0mkl*gacontm_hb1(ll,jj,i))
22093 gradxorr3_nucl(ll,j)=gradxorr3_nucl(ll,j) &
22094 -ekont*(coeffpees0pkl*gacontp_hb2(ll,jj,i)+ &
22095 coeffmees0mkl*gacontm_hb2(ll,jj,i))
22096 gradxorr3_nucl(ll,k)=gradxorr3_nucl(ll,k) &
22097 -ekont*(coeffpees0pij*gacontp_hb1(ll,kk,k)+ &
22098 coeffmees0mij*gacontm_hb1(ll,kk,k))
22099 gradxorr3_nucl(ll,l)=gradxorr3_nucl(ll,l) &
22100 -ekont*(coeffpees0pij*gacontp_hb2(ll,kk,k)+ &
22101 coeffmees0mij*gacontm_hb2(ll,kk,k))
22102 gradlongij=ees*ekl*gacont_hbr(ll,jj,i)- &
22103 ekont*(coeffpees0pkl*gacontp_hb3(ll,jj,i)+ &
22104 coeffmees0mkl*gacontm_hb3(ll,jj,i))
22105 gradcorr3_nucl(ll,j)=gradcorr3_nucl(ll,j)+gradlongij
22106 gradcorr3_nucl(ll,i)=gradcorr3_nucl(ll,i)-gradlongij
22107 gradlongkl=ees*eij*gacont_hbr(ll,kk,k)- &
22108 ekont*(coeffpees0pij*gacontp_hb3(ll,kk,k)+ &
22109 coeffmees0mij*gacontm_hb3(ll,kk,k))
22110 gradcorr3_nucl(ll,l)=gradcorr3_nucl(ll,l)+gradlongkl
22111 gradcorr3_nucl(ll,k)=gradcorr3_nucl(ll,k)-gradlongkl
22112 gradxorr3_nucl(ll,i)=gradxorr3_nucl(ll,i)-gradlongij
22113 gradxorr3_nucl(ll,j)=gradxorr3_nucl(ll,j)+gradlongij
22114 gradxorr3_nucl(ll,k)=gradxorr3_nucl(ll,k)-gradlongkl
22115 gradxorr3_nucl(ll,l)=gradxorr3_nucl(ll,l)+gradlongkl
22117 ehbcorr3_nucl=ekont*ees
22119 end function ehbcorr3_nucl
22121 subroutine pack_buffer(dimen1,dimen2,atom,indx,buffer)
22122 integer dimen1,dimen2,atom,indx,numcont,i,ii,k,j,num_kont,num_kont_old
22123 real(kind=8):: buffer(dimen1,dimen2)
22124 num_kont=num_cont_hb(atom)
22128 buffer(i,indx+(k-1)*3+j)=zapas2(j,i,atom,k)
22131 buffer(i,indx+25)=facont_hb(i,atom)
22132 buffer(i,indx+26)=ees0p(i,atom)
22133 buffer(i,indx+27)=ees0m(i,atom)
22134 buffer(i,indx+28)=d_cont(i,atom)
22135 buffer(i,indx+29)=dfloat(jcont_hb(i,atom))
22137 buffer(1,indx+30)=dfloat(num_kont)
22139 end subroutine pack_buffer
22140 !c------------------------------------------------------------------------------
22141 subroutine unpack_buffer(dimen1,dimen2,atom,indx,buffer)
22142 integer dimen1,dimen2,atom,indx,numcont,i,ii,k,j,num_kont,num_kont_old
22143 real(kind=8):: buffer(dimen1,dimen2)
22144 ! double precision zapas
22145 ! common /contacts_hb/ zapas(3,maxconts,maxres,8),
22146 ! & facont_hb(maxconts,maxres),ees0p(maxconts,maxres),
22147 ! & ees0m(maxconts,maxres),d_cont(maxconts,maxres),
22148 ! & num_cont_hb(maxres),jcont_hb(maxconts,maxres)
22149 num_kont=buffer(1,indx+30)
22150 num_kont_old=num_cont_hb(atom)
22151 num_cont_hb(atom)=num_kont+num_kont_old
22156 zapas2(j,ii,atom,k)=buffer(i,indx+(k-1)*3+j)
22159 facont_hb(ii,atom)=buffer(i,indx+25)
22160 ees0p(ii,atom)=buffer(i,indx+26)
22161 ees0m(ii,atom)=buffer(i,indx+27)
22162 d_cont(i,atom)=buffer(i,indx+28)
22163 jcont_hb(ii,atom)=buffer(i,indx+29)
22166 end subroutine unpack_buffer
22167 !c------------------------------------------------------------------------------
22169 subroutine ecatcat(ecationcation)
22170 integer :: i,j,itmp,xshift,yshift,zshift,subchap,k,itypi,itypj
22171 real(kind=8) :: xi,yi,zi,xj,yj,zj,ract,rcat0,epscalc,r06,r012,&
22172 r7,r4,ecationcation,k0,rcal,aa,bb,sslipi,ssgradlipi,sslipj,ssgradlipj
22173 real(kind=8) xj_temp,yj_temp,zj_temp,xj_safe,yj_safe,zj_safe, &
22174 dist_init,dist_temp,Evan1cat,Evan2cat,Eeleccat
22175 real(kind=8),dimension(3) ::dEvan1Cmcat,dEvan2Cmcat,dEeleccat,&
22178 ecationcation=0.0d0
22179 if (nres_molec(5).eq.0) return
22184 ! k0 = 332.0*(2.0*2.0)/80.0
22188 itmp=itmp+nres_molec(i)
22190 ! write(iout,*) "itmp",itmp
22191 do i=itmp+1,itmp+nres_molec(5)-1
22196 ! write (iout,*) i,"TUTUT",c(1,i)
22198 call to_box(xi,yi,zi)
22199 call lipid_layer(xi,yi,zi,sslipi,ssgradlipi)
22200 do j=i+1,itmp+nres_molec(5)
22202 ! print *,i,j,itypi,itypj
22203 k0 = 332.0*(ichargecat(itypi)*ichargecat(itypj))/80.0
22204 ! print *,i,j,'catcat'
22208 call to_box(xj,yj,zj)
22209 ! call lipid_layer(xj,yj,zj,sslipj,ssgradlipj)
22210 ! aa=aa_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0 &
22211 ! +aa_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
22212 ! bb=bb_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0 &
22213 ! +bb_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
22214 xj=boxshift(xj-xi,boxxsize)
22215 yj=boxshift(yj-yi,boxysize)
22216 zj=boxshift(zj-zi,boxzsize)
22217 rcal =xj**2+yj**2+zj**2
22223 ! k0 = 332*(2*2)/80
22224 Evan1cat=epscalc*(r012/(rcal**6))
22225 Evan2cat=epscalc*2*(r06/(rcal**3))
22233 dEvan1Cmcat(k)=-12*r(k)*epscalc*r012/r7
22234 dEvan2Cmcat(k)=-12*r(k)*epscalc*r06/r4
22235 dEeleccat(k)=-k0*r(k)/ract**3
22238 gg(k) = dEvan1Cmcat(k)+dEvan2Cmcat(k)+dEeleccat(k)
22239 gradcatcat(k,i)=gradcatcat(k,i)-gg(k)
22240 gradcatcat(k,j)=gradcatcat(k,j)+gg(k)
22242 if (energy_dec) write (iout,*) i,j,Evan1cat,Evan2cat,Eeleccat,&
22243 r012,rcal**6,ichargecat(itypi)*ichargecat(itypj)
22244 ! write(iout,*) "ecatcat",i,j, ecationcation,xj,yj,zj
22245 ecationcation=ecationcation+Evan1cat+Evan2cat+Eeleccat
22249 end subroutine ecatcat
22250 !---------------------------------------------------------------------------
22252 subroutine ecats_prot_amber(evdw)
22253 ! subroutine ecat_prot2(ecation_prot)
22258 !el local variables
22259 integer :: iint,itypi1,subchap,isel,itmp
22260 real(kind=8) :: rrij,xi,yi,zi,sig,rij_shift,e1,e2,sigm,epsi
22261 real(kind=8) :: evdw,aa,bb
22262 real(kind=8) :: xj_safe,yj_safe,zj_safe,xj_temp,yj_temp,zj_temp,&
22263 dist_temp, dist_init,ssgradlipi,ssgradlipj, &
22264 sslipi,sslipj,faclip,alpha_sco
22266 real(kind=8) :: fracinbuf
22267 real (kind=8) :: escpho
22268 real (kind=8),dimension(4):: ener
22269 real(kind=8) :: b1,b2,egb
22270 real(kind=8) :: Fisocav,ECL,Elj,Equad,Epol,eheadtail,&
22272 Chif,ChiLambf,Fcav,dFdR,dFdOM1,&
22273 ecations_prot_amber,dFdOM2,dFdL,dFdOM12,&
22276 ! real(kind=8),dimension(3,2)::erhead_tail
22277 ! real(kind=8),dimension(3) :: Rhead_distance,ertail,erhead,Rtail_distance
22278 real(kind=8) :: facd4, adler, Fgb, facd3
22279 integer troll,jj,istate
22280 real (kind=8) :: dcosom1(3),dcosom2(3)
22281 real(kind=8) ::locbox(3)
22287 if (nres_molec(5).eq.0) return
22289 ! sss_ele_cut=1.0d0
22293 itmp=itmp+nres_molec(i)
22296 ! do i=1,nres_molec(1)-1 ! loop over all peptide groups needs parralelization
22297 do i=ibond_start,ibond_end
22299 ! print *,"I am in EVDW",i
22300 itypi=iabs(itype(i,1))
22302 ! if (i.ne.47) cycle
22303 if ((itypi.eq.ntyp1).or.(itypi.eq.10)) cycle
22304 itypi1=iabs(itype(i+1,1))
22308 call to_box(xi,yi,zi)
22309 call lipid_layer(xi,yi,zi,sslipi,ssgradlipi)
22310 dxi=dc_norm(1,nres+i)
22311 dyi=dc_norm(2,nres+i)
22312 dzi=dc_norm(3,nres+i)
22313 dsci_inv=vbld_inv(i+nres)
22314 do j=itmp+1,itmp+nres_molec(5)
22316 ! Calculate SC interaction energy.
22317 itypj=iabs(itype(j,5))
22318 if ((itypj.eq.ntyp1)) cycle
22319 CALL elgrad_init_cat(eheadtail,Egb,Ecl,Elj,Equad,Epol)
22326 call to_box(xj,yj,zj)
22327 ! write(iout,*) "xi,yi,zi,xj,yj,zj", xi,yi,zi,xj,yj,zj
22329 ! call lipid_layer(xj,yj,zj,sslipj,ssgradlipj)
22330 ! aa=aa_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0 &
22331 ! +aa_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
22332 ! bb=bb_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0 &
22333 ! +bb_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
22334 xj=boxshift(xj-xi,boxxsize)
22335 yj=boxshift(yj-yi,boxysize)
22336 zj=boxshift(zj-zi,boxzsize)
22337 ! write(iout,*) "xj,yj,zj", xj,yj,zj,boxxsize
22339 ! dxj = dc_norm( 1, nres+j )
22340 ! dyj = dc_norm( 2, nres+j )
22341 ! dzj = dc_norm( 3, nres+j )
22345 ! Parameters from fitting the analitical expressions to the PMF obtained by umbrella
22346 ! sampling performed with amber package
22350 ! a12sq = rborn(itypi,itypj) * rborn(itypj,itypi)
22351 chi1 = chi1cat(itypi,itypj)
22352 chis1 = chis1cat(itypi,itypj)
22353 chip1 = chipp1cat(itypi,itypj)
22360 ! chis2 = chis(itypj,itypi)
22361 chis12 = chis1 * chis2
22362 sig1 = sigmap1cat(itypi,itypj)
22363 ! sig2 = sigmap2(itypi,itypj)
22364 ! alpha factors from Fcav/Gcav
22365 b1cav = alphasurcat(1,itypi,itypj)
22366 b2cav = alphasurcat(2,itypi,itypj)
22367 b3cav = alphasurcat(3,itypi,itypj)
22368 b4cav = alphasurcat(4,itypi,itypj)
22370 ! used to determine whether we want to do quadrupole calculations
22371 eps_in = epsintabcat(itypi,itypj)
22372 if (eps_in.eq.0.0) eps_in=1.0
22374 eps_inout_fac = ( (1.0d0/eps_in) - (1.0d0/eps_out))
22378 ctail(k,1)=c(k,i+nres)
22381 call to_box(ctail(1,1),ctail(2,1),ctail(3,1))
22382 call to_box(ctail(1,2),ctail(2,2),ctail(3,2))
22383 !c! tail distances will be themselves usefull elswhere
22384 !c1 (in Gcav, for example)
22386 Rtail_distance(k) = boxshift(ctail(k,2) - ctail(k,1),locbox(k))
22389 (Rtail_distance(1)*Rtail_distance(1)) &
22390 + (Rtail_distance(2)*Rtail_distance(2)) &
22391 + (Rtail_distance(3)*Rtail_distance(3)))
22392 ! tail location and distance calculations
22394 d1 = dheadcat(1, 1, itypi, itypj)
22395 ! d2 = dhead(2, 1, itypi, itypj)
22397 ! location of polar head is computed by taking hydrophobic centre
22398 ! and moving by a d1 * dc_norm vector
22399 ! see unres publications for very informative images
22400 chead(k,1) = c(k, i+nres) + d1 * dc_norm(k, i+nres)
22401 chead(k,2) = c(k, j)
22403 call to_box(chead(1,1),chead(2,1),chead(3,1))
22404 call to_box(chead(1,2),chead(2,2),chead(3,2))
22407 ! Rsc_distance(k) = dabs(c(k, i+nres) - c(k, j+nres))
22408 ! Rsc(k) = Rsc_distance(k) * Rsc_distance(k)
22410 Rhead_distance(k) = boxshift(chead(k,2) - chead(k,1),locbox(k))
22412 ! pitagoras (root of sum of squares)
22414 (Rhead_distance(1)*Rhead_distance(1)) &
22415 + (Rhead_distance(2)*Rhead_distance(2)) &
22416 + (Rhead_distance(3)*Rhead_distance(3)))
22417 !-------------------------------------------------------------------
22418 ! zero everything that should be zero'ed
22437 dscj_inv = vbld_inv(j+nres)
22438 ! print *,i,j,dscj_inv,dsci_inv
22439 ! rij holds 1/(distance of Calpha atoms)
22440 rrij = 1.0D0 / ( xj*xj + yj*yj + zj*zj)
22443 ! this should be in elgrad_init but om's are calculated by sc_angular
22444 ! which in turn is used by older potentials
22445 ! om = omega, sqom = om^2
22448 sqom12 = om12 * om12
22450 ! now we calculate EGB - Gey-Berne
22451 ! It will be summed up in evdwij and saved in evdw
22452 sigsq = 1.0D0 / sigsq
22453 sig = sig0ij * dsqrt(sigsq)
22454 ! rij_shift = 1.0D0 / rij - sig + sig0ij
22455 rij_shift = Rtail - sig + sig0ij
22456 IF (rij_shift.le.0.0D0) THEN
22460 sigder = -sig * sigsq
22461 rij_shift = 1.0D0 / rij_shift
22462 fac = rij_shift**expon
22463 c1 = fac * fac * aa_aq_cat(itypi,itypj)
22464 ! print *,"ADAM",aa_aq(itypi,itypj)
22467 c2 = fac * bb_aq_cat(itypi,itypj)
22469 evdwij = eps1 * eps2rt * eps3rt * ( c1 + c2 )
22470 eps2der = eps3rt * evdwij
22471 eps3der = eps2rt * evdwij
22472 ! evdwij = 4.0d0 * eps2rt * eps3rt * evdwij
22473 evdwij = eps2rt * eps3rt * evdwij
22475 ! IF (bb_aq(itypi,itypj).gt.0) THEN
22476 ! evdw_p = evdw_p + evdwij
22478 ! evdw_m = evdw_m + evdwij
22484 c1 = c1 * eps1 * eps2rt**2 * eps3rt**2
22485 fac = -expon * (c1 + evdwij) * rij_shift
22486 sigder = fac * sigder
22487 ! Calculate distance derivative
22492 fac = chis1 * sqom1 + chis2 * sqom2 &
22493 - 2.0d0 * chis12 * om1 * om2 * om12
22494 pom = 1.0d0 - chis1 * chis2 * sqom12
22495 Lambf = (1.0d0 - (fac / pom))
22496 Lambf = dsqrt(Lambf)
22497 sparrow = 1.0d0 / dsqrt(sig1**2.0d0 + sig2**2.0d0)
22498 Chif = Rtail * sparrow
22499 ChiLambf = Chif * Lambf
22500 eagle = dsqrt(ChiLambf)
22501 bat = ChiLambf ** 11.0d0
22502 top = b1cav * ( eagle + b2cav * ChiLambf - b3cav )
22503 bot = 1.0d0 + b4cav * (ChiLambf ** 12.0d0)
22507 dtop = b1cav * ((Lambf / (2.0d0 * eagle)) + (b2cav * Lambf))
22508 dbot = 12.0d0 * b4cav * bat * Lambf
22509 dFdR = ((dtop * bot - top * dbot) / botsq) * sparrow
22511 dtop = b1cav * ((Chif / (2.0d0 * eagle)) + (b2cav * Chif))
22512 dbot = 12.0d0 * b4cav * bat * Chif
22513 eagle = Lambf * pom
22514 dFdOM1 = -(chis1 * om1 - chis12 * om2 * om12) / (eagle)
22515 dFdOM2 = -(chis2 * om2 - chis12 * om1 * om12) / (eagle)
22516 dFdOM12 = chis12 * (chis1 * om1 * om12 - om2) &
22517 * (chis2 * om2 * om12 - om1) / (eagle * pom)
22519 dFdL = ((dtop * bot - top * dbot) / botsq)
22520 dCAVdOM1 = dFdL * ( dFdOM1 )
22521 dCAVdOM2 = dFdL * ( dFdOM2 )
22522 dCAVdOM12 = dFdL * ( dFdOM12 )
22525 ertail(k) = Rtail_distance(k)/Rtail
22527 erdxi = scalar( ertail(1), dC_norm(1,i+nres) )
22528 erdxj = scalar( ertail(1), dC_norm(1,j) )
22529 facd1 = dtailcat(1,itypi,itypj) * vbld_inv(i+nres)
22530 facd2 = dtailcat(2,itypi,itypj) * vbld_inv(j+nres)
22532 pom = ertail(k)-facd1*(ertail(k)-erdxi*dC_norm(k,i+nres))
22533 gradpepcatx(k,i) = gradpepcatx(k,i) &
22534 - (( dFdR + gg(k) ) * pom)
22535 pom = ertail(k)-facd2*(ertail(k)-erdxj*dC_norm(k,j+nres))
22536 ! gvdwx(k,j) = gvdwx(k,j) &
22537 ! + (( dFdR + gg(k) ) * pom)
22538 gradpepcat(k,i) = gradpepcat(k,i) &
22539 - (( dFdR + gg(k) ) * ertail(k))
22540 gradpepcat(k,j) = gradpepcat(k,j) &
22541 + (( dFdR + gg(k) ) * ertail(k))
22544 !c! Compute head-head and head-tail energies for each state
22545 isel = iabs(Qi) + 1 ! ion is always charged so iabs(Qj)
22546 IF (isel.eq.0) THEN
22547 !c! No charges - do nothing
22550 ELSE IF (isel.eq.1) THEN
22551 !c! Nonpolar-charge interactions
22552 if ((itype(i,1).eq.27).or.(itype(i,1).eq.26).or.(itype(i,1).eq.25)) then
22556 if ((itype(j,1).eq.27).or.(itype(j,1).eq.26).or.(itype(j,1).eq.25)) then
22563 ! eheadtail = 0.0d0
22565 ELSE IF (isel.eq.3) THEN
22566 !c! Dipole-charge interactions
22567 if ((itype(i,1).eq.27).or.(itype(i,1).eq.26).or.(itype(i,1).eq.25)) then
22571 if ((itype(j,1).eq.27).or.(itype(j,1).eq.26).or.(itype(j,1).eq.25)) then
22575 ! write(iout,*) "KURWA0",d1
22577 CALL edq_cat(ecl, elj, epol)
22578 eheadtail = ECL + elj + epol
22579 ! eheadtail = 0.0d0
22581 ELSE IF ((isel.eq.2)) THEN
22583 !c! Same charge-charge interaction ( +/+ or -/- )
22584 if ((itype(i,1).eq.27).or.(itype(i,1).eq.26).or.(itype(i,1).eq.25)) then
22588 if ((itype(j,1).eq.27).or.(itype(j,1).eq.26).or.(itype(j,1).eq.25)) then
22593 CALL eqq_cat(Ecl,Egb,Epol,Fisocav,Elj)
22594 eheadtail = ECL + Egb + Epol + Fisocav + Elj
22595 ! eheadtail = 0.0d0
22597 ! ELSE IF ((isel.eq.2.and. &
22598 ! iabs(Qi).eq.1).and. &
22599 ! nstate(itypi,itypj).ne.1) THEN
22600 !c! Different charge-charge interaction ( +/- or -/+ )
22601 ! if ((itype(i,1).eq.27).or.(itype(i,1).eq.26).or.(itype(i,1).eq.25)) then
22605 ! if ((itype(j,1).eq.27).or.(itype(j,1).eq.26).or.(itype(j,1).eq.25)) then
22610 ! CALL energy_quad(istate,eheadtail,Ecl,Egb,Epol,Fisocav,Elj,Equad)
22611 END IF ! this endif ends the "catch the gly-gly" at the beggining of Fcav
22612 evdw = evdw + Fcav + eheadtail
22614 IF (energy_dec) write (iout,'(2(1x,a3,i3),3f6.2,10f16.7)') &
22615 restyp(itype(i,1),1),i,restyp(itype(j,1),1),j,&
22616 1.0d0/rij,Rtail,Rhead,evdwij,Fcav,Ecl,Egb,Epol,Fisocav,Elj,&
22617 Equad,evdwij+Fcav+eheadtail,evdw
22618 ! evdw = evdw + Fcav + eheadtail
22620 ! iF (nstate(itypi,itypj).eq.1) THEN
22623 !c!-------------------------------------------------------------------
22627 !c write (iout,*) "Number of loop steps in EGB:",ind
22628 !c energy_dec=.false.
22629 ! print *,"EVDW KURW",evdw,nres
22632 do i=ibond_start,ibond_end
22634 ! print *,"I am in EVDW",i
22635 itypi=10 ! the peptide group parameters are for glicine
22637 ! if (i.ne.47) cycle
22638 if ((itype(i,1).eq.ntyp1).or.itype(i+1,1).eq.ntyp1) cycle
22639 itypi1=iabs(itype(i+1,1))
22640 xi=(c(1,i)+c(1,i+1))/2.0
22641 yi=(c(2,i)+c(2,i+1))/2.0
22642 zi=(c(3,i)+c(3,i+1))/2.0
22643 call to_box(xi,yi,zi)
22647 dsci_inv=vbld_inv(i+1)/2.0
22648 do j=itmp+1,itmp+nres_molec(5)
22650 ! Calculate SC interaction energy.
22651 itypj=iabs(itype(j,5))
22652 if ((itypj.eq.ntyp1)) cycle
22653 CALL elgrad_init_cat_pep(eheadtail,Egb,Ecl,Elj,Equad,Epol)
22659 call to_box(xj,yj,zj)
22660 xj=boxshift(xj-xi,boxxsize)
22661 yj=boxshift(yj-yi,boxysize)
22662 zj=boxshift(zj-zi,boxzsize)
22664 dist_init=(xj-xi)**2+(yj-yi)**2+(zj-zi)**2
22666 dxj = 0.0d0! dc_norm( 1, nres+j )
22667 dyj = 0.0d0!dc_norm( 2, nres+j )
22668 dzj = 0.0d0! dc_norm( 3, nres+j )
22672 ! Parameters from fitting the analitical expressions to the PMF obtained by umbrella
22673 ! sampling performed with amber package
22677 ! a12sq = rborn(itypi,itypj) * rborn(itypj,itypi)
22678 chi1 = chi1cat(itypi,itypj)
22679 chis1 = chis1cat(itypi,itypj)
22680 chip1 = chipp1cat(itypi,itypj)
22687 ! chis2 = chis(itypj,itypi)
22688 chis12 = chis1 * chis2
22689 sig1 = sigmap1cat(itypi,itypj)
22690 ! sig2 = sigmap2(itypi,itypj)
22691 ! alpha factors from Fcav/Gcav
22692 b1cav = alphasurcat(1,itypi,itypj)
22693 b2cav = alphasurcat(2,itypi,itypj)
22694 b3cav = alphasurcat(3,itypi,itypj)
22695 b4cav = alphasurcat(4,itypi,itypj)
22697 ! used to determine whether we want to do quadrupole calculations
22698 eps_in = epsintabcat(itypi,itypj)
22699 if (eps_in.eq.0.0) eps_in=1.0
22701 eps_inout_fac = ( (1.0d0/eps_in) - (1.0d0/eps_out))
22705 ctail(k,1)=(c(k,i)+c(k,i+1))/2.0
22708 call to_box(ctail(1,1),ctail(2,1),ctail(3,1))
22709 call to_box(ctail(1,2),ctail(2,2),ctail(3,2))
22710 !c! tail distances will be themselves usefull elswhere
22711 !c1 (in Gcav, for example)
22713 Rtail_distance(k) = boxshift(ctail(k,2) - ctail(k,1),locbox(k))
22716 !c! tail distances will be themselves usefull elswhere
22717 !c1 (in Gcav, for example)
22719 (Rtail_distance(1)*Rtail_distance(1)) &
22720 + (Rtail_distance(2)*Rtail_distance(2)) &
22721 + (Rtail_distance(3)*Rtail_distance(3)))
22722 ! tail location and distance calculations
22724 d1 = dheadcat(1, 1, itypi, itypj)
22727 ! d2 = dhead(2, 1, itypi, itypj)
22729 ! location of polar head is computed by taking hydrophobic centre
22730 ! and moving by a d1 * dc_norm vector
22731 ! see unres publications for very informative images
22732 chead(k,1) = (c(k, i)+c(k,i+1))/2.0 + d1 * dc_norm(k, i)
22733 chead(k,2) = c(k, j)
22736 ! Rsc_distance(k) = dabs(c(k, i+nres) - c(k, j+nres))
22737 ! Rsc(k) = Rsc_distance(k) * Rsc_distance(k)
22738 call to_box(chead(1,1),chead(2,1),chead(3,1))
22739 call to_box(chead(1,2),chead(2,2),chead(3,2))
22742 ! Rsc_distance(k) = dabs(c(k, i+nres) - c(k, j+nres))
22743 ! Rsc(k) = Rsc_distance(k) * Rsc_distance(k)
22745 Rhead_distance(k) = boxshift(chead(k,2) - chead(k,1),locbox(k))
22748 ! pitagoras (root of sum of squares)
22750 (Rhead_distance(1)*Rhead_distance(1)) &
22751 + (Rhead_distance(2)*Rhead_distance(2)) &
22752 + (Rhead_distance(3)*Rhead_distance(3)))
22753 !-------------------------------------------------------------------
22754 ! zero everything that should be zero'ed
22772 dscj_inv = vbld_inv(j+nres)
22773 ! print *,i,j,dscj_inv,dsci_inv
22774 ! rij holds 1/(distance of Calpha atoms)
22775 rrij = 1.0D0 / ( xj*xj + yj*yj + zj*zj)
22778 ! this should be in elgrad_init but om's are calculated by sc_angular
22779 ! which in turn is used by older potentials
22780 ! om = omega, sqom = om^2
22783 sqom12 = om12 * om12
22785 ! now we calculate EGB - Gey-Berne
22786 ! It will be summed up in evdwij and saved in evdw
22787 sigsq = 1.0D0 / sigsq
22788 sig = sig0ij * dsqrt(sigsq)
22789 ! rij_shift = 1.0D0 / rij - sig + sig0ij
22790 rij_shift = Rtail - sig + sig0ij
22791 IF (rij_shift.le.0.0D0) THEN
22795 sigder = -sig * sigsq
22796 rij_shift = 1.0D0 / rij_shift
22797 fac = rij_shift**expon
22798 c1 = fac * fac * aa_aq_cat(itypi,itypj)
22799 ! print *,"ADAM",aa_aq(itypi,itypj)
22802 c2 = fac * bb_aq_cat(itypi,itypj)
22804 evdwij = eps1 * eps2rt * eps3rt * ( c1 + c2 )
22805 eps2der = eps3rt * evdwij
22806 eps3der = eps2rt * evdwij
22807 ! evdwij = 4.0d0 * eps2rt * eps3rt * evdwij
22808 evdwij = eps2rt * eps3rt * evdwij
22810 ! IF (bb_aq(itypi,itypj).gt.0) THEN
22811 ! evdw_p = evdw_p + evdwij
22813 ! evdw_m = evdw_m + evdwij
22819 c1 = c1 * eps1 * eps2rt**2 * eps3rt**2
22820 fac = -expon * (c1 + evdwij) * rij_shift
22821 sigder = fac * sigder
22822 ! Calculate distance derivative
22827 fac = chis1 * sqom1 + chis2 * sqom2 &
22828 - 2.0d0 * chis12 * om1 * om2 * om12
22830 pom = 1.0d0 - chis1 * chis2 * sqom12
22831 ! print *,"TUT2",fac,chis1,sqom1,pom
22832 Lambf = (1.0d0 - (fac / pom))
22833 Lambf = dsqrt(Lambf)
22834 sparrow = 1.0d0 / dsqrt(sig1**2.0d0 + sig2**2.0d0)
22835 Chif = Rtail * sparrow
22836 ChiLambf = Chif * Lambf
22837 eagle = dsqrt(ChiLambf)
22838 bat = ChiLambf ** 11.0d0
22839 top = b1cav * ( eagle + b2cav * ChiLambf - b3cav )
22840 bot = 1.0d0 + b4cav * (ChiLambf ** 12.0d0)
22844 dtop = b1cav * ((Lambf / (2.0d0 * eagle)) + (b2cav * Lambf))
22845 dbot = 12.0d0 * b4cav * bat * Lambf
22846 dFdR = ((dtop * bot - top * dbot) / botsq) * sparrow
22848 dtop = b1cav * ((Chif / (2.0d0 * eagle)) + (b2cav * Chif))
22849 dbot = 12.0d0 * b4cav * bat * Chif
22850 eagle = Lambf * pom
22851 dFdOM1 = -(chis1 * om1 - chis12 * om2 * om12) / (eagle)
22852 dFdOM2 = -(chis2 * om2 - chis12 * om1 * om12) / (eagle)
22853 dFdOM12 = chis12 * (chis1 * om1 * om12 - om2) &
22854 * (chis2 * om2 * om12 - om1) / (eagle * pom)
22856 dFdL = ((dtop * bot - top * dbot) / botsq)
22857 dCAVdOM1 = dFdL * ( dFdOM1 )
22858 dCAVdOM2 = dFdL * ( dFdOM2 )
22859 dCAVdOM12 = dFdL * ( dFdOM12 )
22862 ertail(k) = Rtail_distance(k)/Rtail
22864 erdxi = scalar( ertail(1), dC_norm(1,i) )
22865 erdxj = scalar( ertail(1), dC_norm(1,j) )
22866 facd1 = dtailcat(1,itypi,itypj) * vbld_inv(i)
22867 facd2 = dtailcat(2,itypi,itypj) * vbld_inv(j+nres)
22869 pom = ertail(k)-facd1*(ertail(k)-erdxi*dC_norm(k,i))
22870 ! gradpepcatx(k,i) = gradpepcatx(k,i) &
22871 ! - (( dFdR + gg(k) ) * pom)
22872 pom = ertail(k)-facd2*(ertail(k)-erdxj*dC_norm(k,j+nres))
22873 ! gvdwx(k,j) = gvdwx(k,j) &
22874 ! + (( dFdR + gg(k) ) * pom)
22875 gradpepcat(k,i) = gradpepcat(k,i) &
22876 - (( dFdR + gg(k) ) * ertail(k))/2.0d0
22877 gradpepcat(k,i+1) = gradpepcat(k,i+1) &
22878 - (( dFdR + gg(k) ) * ertail(k))/2.0d0
22880 gradpepcat(k,j) = gradpepcat(k,j) &
22881 + (( dFdR + gg(k) ) * ertail(k))
22884 !c! Compute head-head and head-tail energies for each state
22886 !c! Dipole-charge interactions
22887 if ((itype(i,1).eq.27).or.(itype(i,1).eq.26).or.(itype(i,1).eq.25)) then
22891 if ((itype(j,1).eq.27).or.(itype(j,1).eq.26).or.(itype(j,1).eq.25)) then
22895 CALL edq_cat_pep(ecl, elj, epol)
22896 eheadtail = ECL + elj + epol
22897 ! print *,"i,",i,eheadtail
22898 ! eheadtail = 0.0d0
22900 evdw = evdw + Fcav + eheadtail
22902 IF (energy_dec) write (iout,'(2(1x,a3,i3),3f6.2,10f16.7)') &
22903 restyp(itype(i,1),1),i,restyp(itype(j,1),1),j,&
22904 1.0d0/rij,Rtail,Rhead,evdwij,Fcav,Ecl,Egb,Epol,Fisocav,Elj,&
22905 Equad,evdwij+Fcav+eheadtail,evdw
22906 ! evdw = evdw + Fcav + eheadtail
22908 ! iF (nstate(itypi,itypj).eq.1) THEN
22909 CALL sc_grad_cat_pep
22911 !c!-------------------------------------------------------------------
22915 !c write (iout,*) "Number of loop steps in EGB:",ind
22916 !c energy_dec=.false.
22917 ! print *,"EVDW KURW",evdw,nres
22921 end subroutine ecats_prot_amber
22923 !---------------------------------------------------------------------------
22925 subroutine ecat_prot(ecation_prot)
22928 integer i,j,k,subchap,itmp,inum
22929 real(kind=8) :: xi,yi,zi,xj,yj,zj,ract,rcat0,epscalc,r06,r012,&
22930 r7,r4,ecationcation
22931 real(kind=8) xj_temp,yj_temp,zj_temp,xj_safe,yj_safe,zj_safe, &
22932 dist_init,dist_temp,ecation_prot,rcal,rocal, &
22933 Evan1,Evan2,EC,cm1mag,DASGL,delta,r0p,Epepcat, &
22934 catl,cml,calpl, Etotal_p, Etotal_m,rtab,wdip,wmodquad,wquad1, &
22935 wquad2,wvan1,E1,E2,wconst,wvan2,rcpm,dcmag,sin2thet,sinthet, &
22936 costhet,v1m,v2m,wh2o,wc,rsecp,Ir,Irsecp,Irthrp,Irfourp,Irfiftp,&
22937 Irsistp,Irseven,Irtwelv,Irthir,dE1dr,dE2dr,dEdcos,wquad2p,opt, &
22938 rs,rthrp,rfourp,rsixp,reight,Irsixp,Ireight,Irtw,Irfourt, &
22939 opt1,opt2,opt3,opt4,opt5,opt6,opt7,opt8,opt9,opt10,opt11,opt12,&
22940 opt13,opt14,opt15,opt16,opt17,opt18,opt19, &
22941 Equad1,Equad2,dscmag,v1dpv2,dscmag3,constA,constB,Edip,&
22943 real(kind=8),dimension(3) ::dEvan1Cmcat,dEvan2Cmcat,dEeleccat,&
22944 gg,r,EtotalCat,dEtotalCm,dEtotalCalp,dEvan1Cm,dEvan2Cm, &
22945 dEtotalpep,dEtotalcat_num,dEddci,dEtotalcm_num,dEtotalcalp_num, &
22946 tab1,tab2,tab3,diff,cm1,sc,p,tcat,talp,cm,drcp,drcp_norm,vcat, &
22947 v1,v2,v3,myd_norm,dx,vcm,valpha,drdpep,dcosdpep,dcosddci,dEdpep,&
22948 dEcCat,dEdipCm,dEdipCalp,dEquad1Cat,dEquad1Cm,dEquad1Calp, &
22949 dEquad2Cat,dEquad2Cm,dEquad2Calpd,Evan1Cat,dEvan1Calp,dEvan2Cat,&
22950 dEvan2Calp,dEtotalCat,dscvec,dEcCm,dEcCalp,dEdipCat,dEquad2Calp,&
22952 real(kind=8),dimension(6) :: vcatprm
22954 ! first lets calculate interaction with peptide groups
22955 if (nres_molec(5).eq.0) return
22958 itmp=itmp+nres_molec(i)
22960 ! do i=1,nres_molec(1)-1 ! loop over all peptide groups needs parralelization
22961 do i=ibond_start,ibond_end
22963 if ((itype(i,1).eq.ntyp1).or.(itype(i+1,1).eq.ntyp1)) cycle ! leave dummy atoms
22964 xi=0.5d0*(c(1,i)+c(1,i+1))
22965 yi=0.5d0*(c(2,i)+c(2,i+1))
22966 zi=0.5d0*(c(3,i)+c(3,i+1))
22967 call to_box(xi,yi,zi)
22969 do j=itmp+1,itmp+nres_molec(5)
22970 ! print *,"WTF",itmp,j,i
22971 ! all parameters were for Ca2+ to approximate single charge divide by two
22973 if ((itype(j,5).eq.1).or.(itype(j,5).eq.3)) ndiv=2.0
22975 wdip =1.092777950857032D2
22977 wmodquad=-2.174122713004870D4
22978 wmodquad=wmodquad/wconst
22979 wquad1 = 3.901232068562804D1
22980 wquad1=wquad1/wconst
22982 wquad2=wquad2/wconst
22990 call to_box(xj,yj,zj)
22991 dist_init=(xj-xi)**2+(yj-yi)**2+(zj-zi)**2
22994 rcpm = sqrt(xj**2+yj**2+zj**2)
22995 drcp_norm(1)=xj/rcpm
22996 drcp_norm(2)=yj/rcpm
22997 drcp_norm(3)=zj/rcpm
23000 dcmag=dcmag+dc(k,i)**2
23004 myd_norm(k)=dc(k,i)/dcmag
23006 costhet=drcp_norm(1)*myd_norm(1)+drcp_norm(2)*myd_norm(2)+&
23007 drcp_norm(3)*myd_norm(3)
23010 Irsecp = 1.0d0/rsecp
23011 Irthrp = Irsecp/rcpm
23012 Irfourp = Irthrp/rcpm
23013 Irfiftp = Irfourp/rcpm
23014 Irsistp=Irfiftp/rcpm
23015 Irseven=Irsistp/rcpm
23016 Irtwelv=Irsistp*Irsistp
23017 Irthir=Irtwelv/rcpm
23018 sin2thet = (1-costhet*costhet)
23019 sinthet=sqrt(sin2thet)
23020 E1 = wdip*Irsecp*costhet+(wmodquad*Irfourp+wquad1*Irthrp)&
23022 E2 = -wquad1*Irthrp*wquad2+wvan1*(wvan2**12*Irtwelv-&
23023 2*wvan2**6*Irsistp)
23024 ecation_prot = ecation_prot+E1+E2
23025 ! print *,"ecatprot",i,j,ecation_prot,rcpm
23026 dE1dr = -2*costhet*wdip*Irthrp-&
23027 (4*wmodquad*Irfiftp+3*wquad1*Irfourp)*sin2thet
23028 dE2dr = 3*wquad1*wquad2*Irfourp- &
23029 12*wvan1*wvan2**6*(wvan2**6*Irthir-Irseven)
23030 dEdcos = wdip*Irsecp-2*(wmodquad*Irfourp+wquad1*Irthrp)*costhet
23032 drdpep(k) = -drcp_norm(k)
23033 dcosdpep(k) = Ir*(costhet*drcp_norm(k)-myd_norm(k))
23034 dcosddci(k) = drcp_norm(k)/dcmag-costhet*myd_norm(k)/dcmag
23035 dEdpep(k) = (dE1dr+dE2dr)*drdpep(k)+dEdcos*dcosdpep(k)
23036 dEddci(k) = dEdcos*dcosddci(k)
23039 gradpepcat(k,i)=gradpepcat(k,i)+0.5D0*dEdpep(k)-dEddci(k)
23040 gradpepcat(k,i+1)=gradpepcat(k,i+1)+0.5D0*dEdpep(k)+dEddci(k)
23041 gradpepcat(k,j)=gradpepcat(k,j)-dEdpep(k)
23045 !------------------------------------------sidechains
23046 ! do i=1,nres_molec(1)
23047 do i=ibond_start,ibond_end
23048 if ((itype(i,1).eq.ntyp1)) cycle ! leave dummy atoms
23050 ! print *,i,ecation_prot
23054 call to_box(xi,yi,zi)
23056 cm1(k)=dc(k,i+nres)
23058 cm1mag=sqrt(cm1(1)**2+cm1(2)**2+cm1(3)**2)
23059 do j=itmp+1,itmp+nres_molec(5)
23061 if ((itype(j,5).eq.1).or.(itype(j,5).eq.3)) ndiv=2.0
23066 call to_box(xj,yj,zj)
23067 dist_init=(xj-xi)**2+(yj-yi)**2+(zj-zi)**2
23071 if((itype(i,1).eq.15.or.itype(i,1).eq.16).or.&
23072 ((itype(i,1).eq.27).or.(itype(i,1).eq.26).or.&
23073 (itype(i,1).eq.25))) then
23074 if(itype(i,1).eq.16) then
23080 vcatprm(k)=catprm(k,inum)
23082 dASGL=catprm(7,inum)
23084 ! vcm(k)=(cm1(k)/cm1mag)*dASGL+c(k,i+nres)
23085 vcm(1)=(cm1(1)/cm1mag)*dASGL+xi
23086 vcm(2)=(cm1(2)/cm1mag)*dASGL+yi
23087 vcm(3)=(cm1(3)/cm1mag)*dASGL+zi
23091 if (subchap.eq.1) then
23100 valpha(1)=xi-c(1,i+nres)+c(1,i)
23101 valpha(2)=yi-c(2,i+nres)+c(2,i)
23102 valpha(3)=zi-c(3,i+nres)+c(3,i)
23106 dx(k) = vcat(k)-vcm(k)
23109 v1(k)=(vcm(k)-valpha(k))
23110 v2(k)=(vcat(k)-valpha(k))
23112 v1m = sqrt(v1(1)**2+v1(2)**2+v1(3)**2)
23113 v2m = sqrt(v2(1)**2+v2(2)**2+v2(3)**2)
23114 v1dpv2 = v1(1)*v2(1)+v1(2)*v2(2)+v1(3)*v2(3)
23116 ! The weights of the energy function calculated from
23117 !The quantum mechanical GAMESS simulations of calcium with ASP/GLU
23118 if ((itype(i,1).eq.27).or.(itype(i,1).eq.26).or.(itype(i,1).eq.25)) then
23124 if ((itype(j,5).eq.1).or.(itype(j,5).eq.3)) ndiv=2.0
23133 wquad2 = vcatprm(4)
23135 wquad2p = 1.0d0-wquad2
23138 opt = dx(1)**2+dx(2)**2
23139 rsecp = opt+dx(3)**2
23143 rsixp = rfourp*rsecp
23146 Irsecp = 1.0d0/rsecp
23148 Irfourp = Irthrp/rs
23149 Irsixp = 1.0d0/rsixp
23150 Ireight=1.0d0/reight
23154 opt1 = (4*rs*dx(3)*wdip)
23155 opt2 = 6*rsecp*wquad1*opt
23156 opt3 = wquad1*wquad2p*Irsixp
23157 opt4 = (wvan1*wvan2**12)
23158 opt5 = opt4*12*Irfourt
23159 opt6 = 2*wvan1*wvan2**6
23160 opt7 = 6*opt6*Ireight
23163 opt11 = (rsecp*v2m)**2
23164 opt12 = (rsecp*v1m)**2
23165 opt14 = (v1m*v2m*rsecp)**2
23166 opt15 = -wquad1/v2m**2
23167 opt16 = (rthrp*(v1m*v2m)**2)**2
23168 opt17 = (v1m**2*rthrp)**2
23169 opt18 = -wquad1/rthrp
23170 opt19 = (v1m**2*v2m**2)**2
23173 dEcCat(k) = -(dx(k)*wc)*Irthrp
23174 dEcCm(k)=(dx(k)*wc)*Irthrp
23177 Edip=opt8*(v1dpv2)/(rsecp*v2m)
23179 dEdipCat(k)=opt8*(v1(k)*rsecp*v2m-((v2(k)/v2m &
23180 *rsecp+2*dx(k)*v2m)*v1dpv2))/opt11
23181 dEdipCm(k)=opt10*(v2(k)*rsecp*v1m-((v1(k)/v1m &
23182 *rsecp-2*dx(k)*v1m)*v1dpv2))/opt12
23183 dEdipCalp(k)=wdip*((-v1(k)-v2(k))*rsecp*v1m &
23184 *v2m-(-v1(k)/v1m*v2m*rsecp-v2(k)/v2m*v1m*rsecp) &
23187 Equad1=-wquad1*v1dpv2**2/(rthrp*(v1m*v2m)**2)
23189 dEquad1Cat(k)=-wquad1*(2*v1(k)*v1dpv2*(rthrp* &
23190 (v1m*v2m)**2)-(3*dx(k)*rs*(v1m*v2m)**2+2*v1m*2* &
23191 v2(k)*1/2*1/v2m*v1m*v2m*rthrp)*v1dpv2**2)/opt16
23192 dEquad1Cm(k)=-wquad1*(2*v2(k)*v1dpv2*(rthrp* &
23193 (v1m*v2m)**2)-(-3*dx(k)*rs*(v1m*v2m)**2+2*v2m*2* &
23194 v1(k)*1/2*1/v1m*v2m*v1m*rthrp)*v1dpv2**2)/opt16
23195 dEquad1Calp(k)=opt18*(2*(-v1(k)-v2(k))*v1dpv2* &
23196 v1m**2*v2m**2-(-2*v1(k)*v2m**2-2*v2(k)*v1m**2)* &
23199 Equad2=wquad1*wquad2p*Irthrp
23201 dEquad2Cat(k)=-3*dx(k)*rs*opt3
23202 dEquad2Cm(k)=3*dx(k)*rs*opt3
23203 dEquad2Calp(k)=0.0d0
23207 dEvan1Cat(k)=-dx(k)*opt5
23208 dEvan1Cm(k)=dx(k)*opt5
23209 dEvan1Calp(k)=0.0d0
23213 dEvan2Cat(k)=dx(k)*opt7
23214 dEvan2Cm(k)=-dx(k)*opt7
23215 dEvan2Calp(k)=0.0d0
23217 ecation_prot=ecation_prot+Ec+Edip+Equad1+Equad2+Evan1+Evan2
23218 ! print *,ecation_prot,Ec+Edip+Equad1+Equad2+Evan1+Evan2
23221 dEtotalCat(k)=dEcCat(k)+dEdipCat(k)+dEquad1Cat(k)+ &
23222 dEquad2Cat(k)+dEvan1Cat(k)+dEvan2Cat(k)
23223 !c write(*,*) 'dEtotalCat inside', (dEtotalCat(l),l=1,3)
23224 dEtotalCm(k)=dEcCm(k)+dEdipCm(k)+dEquad1Cm(k)+ &
23225 dEquad2Cm(k)+dEvan1Cm(k)+dEvan2Cm(k)
23226 dEtotalCalp(k)=dEcCalp(k)+dEdipCalp(k)+dEquad1Calp(k) &
23227 +dEquad2Calp(k)+dEvan1Calp(k)+dEvan2Calp(k)
23231 dscvec(k) = dc(k,i+nres)
23232 dscmag = dscmag+dscvec(k)*dscvec(k)
23235 dscmag = sqrt(dscmag)
23236 dscmag3 = dscmag3*dscmag
23237 constA = 1.0d0+dASGL/dscmag
23240 constB = constB+dscvec(k)*dEtotalCm(k)
23242 constB = constB*dASGL/dscmag3
23244 gg(k) = dEtotalCm(k)+dEtotalCalp(k)
23245 gradpepcatx(k,i)=gradpepcatx(k,i)+ &
23246 constA*dEtotalCm(k)-constB*dscvec(k)
23247 ! print *,j,constA,dEtotalCm(k),constB,dscvec(k)
23248 gradpepcat(k,i)=gradpepcat(k,i)+gg(k)
23249 gradpepcat(k,j)=gradpepcat(k,j)+dEtotalCat(k)
23251 else if (itype(i,1).eq.13.or.itype(i,1).eq.14) then
23252 if(itype(i,1).eq.14) then
23258 vcatprm(k)=catprm(k,inum)
23260 dASGL=catprm(7,inum)
23262 ! vcm(k)=(cm1(k)/cm1mag)*dASGL+c(k,i+nres)
23266 vcm(1)=(cm1(1)/cm1mag)*dASGL+xi
23267 vcm(2)=(cm1(2)/cm1mag)*dASGL+yi
23268 vcm(3)=(cm1(3)/cm1mag)*dASGL+zi
23269 if (subchap.eq.1) then
23278 valpha(1)=xi-c(1,i+nres)+c(1,i)
23279 valpha(2)=yi-c(2,i+nres)+c(2,i)
23280 valpha(3)=zi-c(3,i+nres)+c(3,i)
23284 dx(k) = vcat(k)-vcm(k)
23287 v1(k)=(vcm(k)-valpha(k))
23288 v2(k)=(vcat(k)-valpha(k))
23290 v1m = sqrt(v1(1)**2+v1(2)**2+v1(3)**2)
23291 v2m = sqrt(v2(1)**2+v2(2)**2+v2(3)**2)
23292 v1dpv2 = v1(1)*v2(1)+v1(2)*v2(2)+v1(3)*v2(3)
23293 ! The weights of the energy function calculated from
23294 !The quantum mechanical GAMESS simulations of ASN/GLN with calcium
23296 if ((itype(j,5).eq.1).or.(itype(j,5).eq.3)) ndiv=2.0
23303 wquad2 = vcatprm(4)
23308 opt = dx(1)**2+dx(2)**2
23309 rsecp = opt+dx(3)**2
23313 rsixp = rfourp*rsecp
23318 Irfourp = Irthrp/rs
23324 opt1 = (4*rs*dx(3)*wdip)
23325 opt2 = 6*rsecp*wquad1*opt
23326 opt3 = wquad1*wquad2p*Irsixp
23327 opt4 = (wvan1*wvan2**12)
23328 opt5 = opt4*12*Irfourt
23329 opt6 = 2*wvan1*wvan2**6
23330 opt7 = 6*opt6*Ireight
23333 opt11 = (rsecp*v2m)**2
23334 opt12 = (rsecp*v1m)**2
23335 opt14 = (v1m*v2m*rsecp)**2
23336 opt15 = -wquad1/v2m**2
23337 opt16 = (rthrp*(v1m*v2m)**2)**2
23338 opt17 = (v1m**2*rthrp)**2
23339 opt18 = -wquad1/rthrp
23340 opt19 = (v1m**2*v2m**2)**2
23341 Edip=opt8*(v1dpv2)/(rsecp*v2m)
23343 dEdipCat(k)=opt8*(v1(k)*rsecp*v2m-((v2(k)/v2m&
23344 *rsecp+2*dx(k)*v2m)*v1dpv2))/opt11
23345 dEdipCm(k)=opt10*(v2(k)*rsecp*v1m-((v1(k)/v1m&
23346 *rsecp-2*dx(k)*v1m)*v1dpv2))/opt12
23347 dEdipCalp(k)=wdip*((-v1(k)-v2(k))*rsecp*v1m&
23348 *v2m-(-v1(k)/v1m*v2m*rsecp-v2(k)/v2m*v1m*rsecp)&
23351 Equad1=-wquad1*v1dpv2**2/(rthrp*(v1m*v2m)**2)
23353 dEquad1Cat(k)=-wquad1*(2*v1(k)*v1dpv2*(rthrp*&
23354 (v1m*v2m)**2)-(3*dx(k)*rs*(v1m*v2m)**2+2*v1m*2*&
23355 v2(k)*1/2*1/v2m*v1m*v2m*rthrp)*v1dpv2**2)/opt16
23356 dEquad1Cm(k)=-wquad1*(2*v2(k)*v1dpv2*(rthrp*&
23357 (v1m*v2m)**2)-(-3*dx(k)*rs*(v1m*v2m)**2+2*v2m*2*&
23358 v1(k)*1/2*1/v1m*v2m*v1m*rthrp)*v1dpv2**2)/opt16
23359 dEquad1Calp(k)=opt18*(2*(-v1(k)-v2(k))*v1dpv2* &
23360 v1m**2*v2m**2-(-2*v1(k)*v2m**2-2*v2(k)*v1m**2)*&
23363 Equad2=wquad1*wquad2p*Irthrp
23365 dEquad2Cat(k)=-3*dx(k)*rs*opt3
23366 dEquad2Cm(k)=3*dx(k)*rs*opt3
23367 dEquad2Calp(k)=0.0d0
23371 dEvan1Cat(k)=-dx(k)*opt5
23372 dEvan1Cm(k)=dx(k)*opt5
23373 dEvan1Calp(k)=0.0d0
23377 dEvan2Cat(k)=dx(k)*opt7
23378 dEvan2Cm(k)=-dx(k)*opt7
23379 dEvan2Calp(k)=0.0d0
23381 ecation_prot = ecation_prot+Edip+Equad1+Equad2+Evan1+Evan2
23383 dEtotalCat(k)=dEdipCat(k)+dEquad1Cat(k)+ &
23384 dEquad2Cat(k)+dEvan1Cat(k)+dEvan2Cat(k)
23385 dEtotalCm(k)=dEdipCm(k)+dEquad1Cm(k)+ &
23386 dEquad2Cm(k)+dEvan1Cm(k)+dEvan2Cm(k)
23387 dEtotalCalp(k)=dEdipCalp(k)+dEquad1Calp(k) &
23388 +dEquad2Calp(k)+dEvan1Calp(k)+dEvan2Calp(k)
23392 dscvec(k) = c(k,i+nres)-c(k,i)
23398 dscmag = dscmag+dscvec(k)*dscvec(k)
23401 dscmag = sqrt(dscmag)
23402 dscmag3 = dscmag3*dscmag
23403 constA = 1+dASGL/dscmag
23406 constB = constB+dscvec(k)*dEtotalCm(k)
23408 constB = constB*dASGL/dscmag3
23410 gg(k) = dEtotalCm(k)+dEtotalCalp(k)
23411 gradpepcatx(k,i)=gradpepcatx(k,i)+ &
23412 constA*dEtotalCm(k)-constB*dscvec(k)
23413 gradpepcat(k,i)=gradpepcat(k,i)+gg(k)
23414 gradpepcat(k,j)=gradpepcat(k,j)+dEtotalCat(k)
23419 ! r(k) = c(k,j)-c(k,i+nres)
23423 rcal = rcal+r(k)*r(k)
23428 r0p=0.5*(rocal+sig0(itype(i,1)))
23431 Evan1=epscalc*(r012/rcal**6)
23432 Evan2=epscalc*2*(r06/rcal**3)
23436 dEvan1Cm(k) = 12*r(k)*epscalc*r012/r7
23437 dEvan2Cm(k) = 12*r(k)*epscalc*r06/r4
23440 dEtotalCm(k)=dEvan1Cm(k)+dEvan2Cm(k)
23442 ecation_prot = ecation_prot+ Evan1+Evan2
23444 gradpepcatx(k,i)=gradpepcatx(k,i)+ &
23446 gradpepcat(k,i)=gradpepcat(k,i)+dEtotalCm(k)
23447 gradpepcat(k,j)=gradpepcat(k,j)-dEtotalCm(k)
23449 endif ! 13-16 residues
23453 end subroutine ecat_prot
23455 !----------------------------------------------------------------------------
23456 !---------------------------------------------------------------------------
23457 subroutine ecat_nucl(ecation_nucl)
23458 integer i,j,k,subchap,itmp,inum,itypi,itypj
23459 real(kind=8) :: xi,yi,zi,xj,yj,zj
23460 real(kind=8) xj_temp,yj_temp,zj_temp,xj_safe,yj_safe,zj_safe, &
23461 dist_init,dist_temp,ecation_nucl,Evan1,Evan2,Ecav,Egb,wdip1,wdip2, &
23462 wvan1,wvan2,wgbsig,wgbeps,wgbchi,wgbchip,wcav1,wcav2,wcav3,wcav4, &
23463 wcavsig,wcavchi,v1m,v1dpdx,wh2o,wc,Edip,rcs2,invrcs6,invrcs8,invrcs12, &
23464 invrcs14,rcb,rcb2,invrcb,invrcb2,invrcb4,invrcb6,cosinus,cos2,dcosdcatconst, &
23465 dcosdcalpconst,dcosdcmconst,rcav,rcav11,rcav12,constcav1,constcav2, &
23466 constgb1,constgb2,constdvan1,constdvan2,sgb,sgb6,sgb7,sgb12,sgb13, &
23467 cavnum,cavdenom,invcavdenom2,dcavnumdcos,dcavnumdr,dcavdenomdcos, &
23468 dcavdenomdr,sslipi,ssgradlipi,sslipj,ssgradlipj,aa,bb
23469 real(kind=8),dimension(3) ::gg,r,dEtotalCm,dEtotalCalp,dEvan1Cm,&
23470 dEvan2Cm,cm1,cm,vcat,vsug,v1,v2,dx,vcm,dEdipCm,dEdipCalp, &
23471 dEvan1Calp,dEvan2Cat,dEvan2Calp,dEtotalCat,dEdipCat,dEvan1Cat,dcosdcat, &
23472 dcosdcalp,dcosdcm,dEgbdCat,dEgbdCalp,dEgbdCm,dEcavdCat,dEcavdCalp, &
23474 real(kind=8),dimension(14) :: vcatnuclprm
23476 if (nres_molec(5).eq.0) return
23479 itmp=itmp+nres_molec(i)
23481 do i=iatsc_s_nucl,iatsc_e_nucl
23482 if ((itype(i,2).eq.ntyp1_molec(2))) cycle ! leave dummy atoms
23486 call to_box(xi,yi,zi)
23487 call lipid_layer(xi,yi,zi,sslipi,ssgradlipi)
23489 cm1(k)=dc(k,i+nres)
23491 do j=itmp+1,itmp+nres_molec(5)
23495 call to_box(xj,yj,zj)
23496 ! write(iout,*) "xi,yi,zi,xj,yj,zj", xi,yi,zi,xj,yj,zj
23497 ! call lipid_layer(xj,yj,zj,sslipj,ssgradlipj)
23498 ! aa=aa_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0 &
23499 ! +aa_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
23500 ! bb=bb_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0 &
23501 ! +bb_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
23502 xj=boxshift(xj-xi,boxxsize)
23503 yj=boxshift(yj-yi,boxysize)
23504 zj=boxshift(zj-zi,boxzsize)
23505 ! write(iout,*) 'after shift', xj,yj,zj
23506 dist_init=xj**2+yj**2+zj**2
23511 vcatnuclprm(k)=catnuclprm(k,itypi,itypj)
23519 dx(k) = vcat(k)-vcm(k)
23523 v2(k)=(vcat(k)-vsug(k))
23525 v1m = sqrt(v1(1)**2+v1(2)**2+v1(3)**2)
23526 v1dpdx = v1(1)*dx(1)+v1(2)*dx(2)+v1(3)*dx(3)
23527 ! The weights of the energy function calculated from
23528 !The quantum mechanical Gaussian simulations of potassium and sodium with deoxynucleosides
23530 wdip1 = vcatnuclprm(1)
23531 wdip1 = wdip1/wh2o !w1
23532 wdip2 = vcatnuclprm(2)
23533 wdip2 = wdip2/wh2o !w2
23534 wvan1 = vcatnuclprm(3)
23535 wvan2 = vcatnuclprm(4) !pis1
23536 wgbsig = vcatnuclprm(5) !sigma0
23537 wgbeps = vcatnuclprm(6) !epsi0
23538 wgbchi = vcatnuclprm(7) !chi1
23539 wgbchip = vcatnuclprm(8) !chip1
23540 wcavsig = vcatnuclprm(9) !sig
23541 wcav1 = vcatnuclprm(10) !b1
23542 wcav2 = vcatnuclprm(11) !b2
23543 wcav3 = vcatnuclprm(12) !b3
23544 wcav4 = vcatnuclprm(13) !b4
23545 wcavchi = vcatnuclprm(14) !chis1
23546 rcs2 = v2(1)**2+v2(2)**2+v2(3)**2
23547 invrcs6 = 1/rcs2**3
23548 invrcs8 = invrcs6/rcs2
23549 invrcs12 = invrcs6**2
23550 invrcs14 = invrcs12/rcs2
23551 rcb2 = dx(1)**2+dx(2)**2+dx(3)**2
23554 invrcb2 = invrcb**2
23555 invrcb4 = invrcb2**2
23556 invrcb6 = invrcb4*invrcb2
23557 cosinus = v1dpdx/(v1m*rcb)
23559 dcosdcatconst = invrcb2/v1m
23560 dcosdcalpconst = invrcb/v1m**2
23561 dcosdcmconst = invrcb2/v1m**2
23563 dcosdcat(k) = (v1(k)*rcb-dx(k)*v1m*cosinus)*dcosdcatconst
23564 dcosdcalp(k) = (v1(k)*rcb*cosinus-dx(k)*v1m)*dcosdcalpconst
23565 dcosdcm(k) = ((dx(k)-v1(k))*v1m*rcb+ &
23566 cosinus*(dx(k)*v1m**2-v1(k)*rcb2))*dcosdcmconst
23570 rcav12 = rcav11*rcav
23571 constcav1 = 1-wcavchi*cos2
23572 constcav2 = sqrt(constcav1)
23573 constgb1 = 1/sqrt(1-wgbchi*cos2)
23574 constgb2 = wgbeps*(1-wgbchip*cos2)**2
23575 constdvan1 = 12*wvan1*wvan2**12*invrcs14
23576 constdvan2 = 6*wvan1*wvan2**6*invrcs8
23577 !----------------------------------------------------------------------------
23579 !---------------------------------------------------------------------------
23580 sgb = 1/(1-constgb1+(rcb/wgbsig))
23585 Egb = constgb2*(sgb12-sgb6)
23587 dEgbdCat(k) = -constgb2/wgbsig*(12*sgb13-6*sgb7)*invrcb*dx(k) &
23588 +(constgb1**3*constgb2*wgbchi*cosinus*(12*sgb13-6*sgb7) &
23589 -4*wgbeps*wgbchip*cosinus*(1-wgbchip*cos2)*(sgb12-sgb6))*dcosdcat(k)
23590 dEgbdCm(k) = constgb2/wgbsig*(12*sgb13-6*sgb7)*invrcb*dx(k) &
23591 +(constgb1**3*constgb2*wgbchi*cosinus*(12*sgb13-6*sgb7) &
23592 -4*wgbeps*wgbchip*cosinus*(1-wgbchip*cos2)*(sgb12-sgb6))*dcosdcm(k)
23593 dEgbdCalp(k) = (constgb1**3*constgb2*wgbchi*cosinus &
23594 *(12*sgb13-6*sgb7) &
23595 -4*wgbeps*wgbchip*cosinus*(1-wgbchip*cos2)*(sgb12-sgb6))*dcosdcalp(k)
23597 !----------------------------------------------------------------------------
23599 !---------------------------------------------------------------------------
23600 cavnum = sqrt(rcav*constcav2)+wcav2*rcav*constcav2-wcav3
23601 cavdenom = 1+wcav4*rcav12*constcav1**6
23602 Ecav = wcav1*cavnum/cavdenom
23603 invcavdenom2 = 1/cavdenom**2
23604 dcavnumdcos = -wcavchi*cosinus/constcav2 &
23605 *(sqrt(rcav/constcav2)/2+wcav2*rcav)
23606 dcavnumdr = (0.5*sqrt(constcav2/rcav)+wcav2*constcav2)/wcavsig
23607 dcavdenomdcos = -12*wcav4*wcavchi*rcav12*constcav1**5*cosinus
23608 dcavdenomdr = 12*wcav4/wcavsig*rcav11*constcav1**6
23610 dEcavdCat(k) = ((dcavnumdcos*cavdenom-dcavdenomdcos*cavnum) &
23611 *dcosdcat(k)+(dcavnumdr*cavdenom-dcavdenomdr*cavnum)/rcb*dx(k))*wcav1*invcavdenom2
23612 dEcavdCm(k) = ((dcavnumdcos*cavdenom-dcavdenomdcos*cavnum) &
23613 *dcosdcm(k)-(dcavnumdr*cavdenom-dcavdenomdr*cavnum)/rcb*dx(k))*wcav1*invcavdenom2
23614 dEcavdCalp(k) = (dcavnumdcos*cavdenom-dcavdenomdcos*cavnum) &
23615 *dcosdcalp(k)*wcav1*invcavdenom2
23617 !----------------------------------------------------------------------------
23618 !van der Waals and dipole-charge interaction energy
23619 !---------------------------------------------------------------------------
23620 Evan1 = wvan1*wvan2**12*invrcs12
23622 dEvan1Cat(k) = -v2(k)*constdvan1
23623 dEvan1Cm(k) = 0.0d0
23624 dEvan1Calp(k) = v2(k)*constdvan1
23626 Evan2 = -wvan1*wvan2**6*invrcs6
23628 dEvan2Cat(k) = v2(k)*constdvan2
23629 dEvan2Cm(k) = 0.0d0
23630 dEvan2Calp(k) = -v2(k)*constdvan2
23632 Edip = wdip1*cosinus*invrcb2-wdip2*(1-cos2)*invrcb4
23634 dEdipCat(k) = (-2*wdip1*cosinus*invrcb4 &
23635 +4*wdip2*(1-cos2)*invrcb6)*dx(k) &
23636 +dcosdcat(k)*(wdip1*invrcb2+2*wdip2*cosinus*invrcb4)
23637 dEdipCm(k) = (2*wdip1*cosinus*invrcb4 &
23638 -4*wdip2*(1-cos2)*invrcb6)*dx(k) &
23639 +dcosdcm(k)*(wdip1*invrcb2+2*wdip2*cosinus*invrcb4)
23640 dEdipCalp(k) = dcosdcalp(k)*(wdip1*invrcb2 &
23641 +2*wdip2*cosinus*invrcb4)
23643 if (energy_dec) write (iout,'(2i5,4(a6,f7.3))') i,j, &
23644 ' E GB ',Egb,' ECav ',Ecav,' Evdw ',Evan1+Evan2,' Edip ',Edip
23645 ecation_nucl=ecation_nucl+Ecav+Egb+Edip+Evan1+Evan2
23647 dEtotalCat(k) = dEcavdCat(k)+dEvan1Cat(k)+dEvan2Cat(k) &
23648 +dEgbdCat(k)+dEdipCat(k)
23649 dEtotalCm(k) = dEcavdCm(k)+dEvan1Cm(k)+dEvan2Cm(k) &
23650 +dEgbdCm(k)+dEdipCm(k)
23651 dEtotalCalp(k) = dEcavdCalp(k)+dEgbdCalp(k)+dEvan1Calp(k) &
23652 +dEdipCalp(k)+dEvan2Calp(k)
23655 gg(k) = dEtotalCm(k)+dEtotalCalp(k)
23656 gradnuclcatx(k,i)=gradnuclcatx(k,i)+dEtotalCm(k)
23657 gradnuclcat(k,i)=gradnuclcat(k,i)+gg(k)
23658 gradnuclcat(k,j)=gradnuclcat(k,j)+dEtotalCat(k)
23663 end subroutine ecat_nucl
23665 !-----------------------------------------------------------------------------
23666 !-----------------------------------------------------------------------------
23667 subroutine eprot_sc_base(escbase)
23669 ! implicit real*8 (a-h,o-z)
23670 ! include 'DIMENSIONS'
23671 ! include 'COMMON.GEO'
23672 ! include 'COMMON.VAR'
23673 ! include 'COMMON.LOCAL'
23674 ! include 'COMMON.CHAIN'
23675 ! include 'COMMON.DERIV'
23676 ! include 'COMMON.NAMES'
23677 ! include 'COMMON.INTERACT'
23678 ! include 'COMMON.IOUNITS'
23679 ! include 'COMMON.CALC'
23680 ! include 'COMMON.CONTROL'
23681 ! include 'COMMON.SBRIDGE'
23683 !el local variables
23684 integer :: iint,itypi,itypi1,itypj,subchap
23685 real(kind=8) :: rrij,xi,yi,zi,sig,rij_shift,fac,e1,e2,sigm,epsi
23686 real(kind=8) :: evdw,sig0ij
23687 real(kind=8) :: xj_safe,yj_safe,zj_safe,xj_temp,yj_temp,zj_temp,&
23688 dist_temp, dist_init,aa,bb,ssgradlipi,ssgradlipj, &
23689 sslipi,sslipj,faclip
23691 real(kind=8) :: fracinbuf
23692 real (kind=8) :: escbase
23693 real (kind=8),dimension(4):: ener
23694 real(kind=8) :: b1,b2,b3,b4,egb,eps_in,eps_inout_fac,eps_out
23695 real(kind=8) :: ECL,Elj,Equad,Epol,eheadtail,rhead,dGCLOM2,&
23696 sqom1,sqom2,sqom12,c1,c2,c3,pom,Lambf,sparrow,&
23697 Chif,ChiLambf,bat,eagle,top,bot,botsq,Fcav,dtop,dFdR,dFdOM1,&
23698 dFdOM2,w1,w2,w3,dGCLdR,dFdL,dFdOM12,dbot ,&
23699 r1,eps_head,alphapol1,pis,facd2,d2,facd1,d1,erdxj,erdxi,federmaus,&
23700 dPOLdR1,dFGBdOM2,dFGBdR1,dPOLdFGB1,RR1,MomoFac1,hawk,d1i,d1j,&
23701 sig1,sig2,chis12,chis2,ee1,fgb1,a12sq,chis1
23702 real(kind=8),dimension(3,2)::chead,erhead_tail
23703 real(kind=8),dimension(3) :: Rhead_distance,ertail,erhead
23707 ! do i=1,nres_molec(1)
23708 do i=ibond_start,ibond_end
23709 if (itype(i,1).eq.ntyp1_molec(1)) cycle
23711 dxi = dc_norm(1,nres+i)
23712 dyi = dc_norm(2,nres+i)
23713 dzi = dc_norm(3,nres+i)
23714 dsci_inv = vbld_inv(i+nres)
23718 call to_box(xi,yi,zi)
23719 call lipid_layer(xi,yi,zi,sslipi,ssgradlipi)
23720 do j=nres_molec(1)+1,nres_molec(2)+nres_molec(1)
23722 if (itype(j,2).eq.ntyp1_molec(2))cycle
23726 call to_box(xj,yj,zj)
23727 ! call lipid_layer(xj,yj,zj,sslipj,ssgradlipj)
23728 ! aa=aa_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0 &
23729 ! +aa_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
23730 ! bb=bb_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0 &
23731 ! +bb_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
23732 xj=boxshift(xj-xi,boxxsize)
23733 yj=boxshift(yj-yi,boxysize)
23734 zj=boxshift(zj-zi,boxzsize)
23736 dxj = dc_norm( 1, nres+j )
23737 dyj = dc_norm( 2, nres+j )
23738 dzj = dc_norm( 3, nres+j )
23739 ! print *,i,j,itypi,itypj
23740 d1i = dhead_scbasei(itypi,itypj) !this is shift of dipole/charge
23741 d1j = dhead_scbasej(itypi,itypj) !this is shift of dipole/charge
23744 ! BetaT = 1.0d0 / (298.0d0 * Rb)
23746 sig0ij = sigma_scbase( itypi,itypj )
23747 chi1 = chi_scbase( itypi, itypj,1 )
23748 chi2 = chi_scbase( itypi, itypj,2 )
23751 chi12 = chi1 * chi2
23752 chip1 = chipp_scbase( itypi, itypj,1 )
23753 chip2 = chipp_scbase( itypi, itypj,2 )
23756 chip12 = chip1 * chip2
23757 ! not used by momo potential, but needed by sc_angular which is shared
23758 ! by all energy_potential subroutines
23762 a12sq = rborn_scbasei(itypi,itypj) * rborn_scbasej(itypi,itypj)
23763 ! a12sq = a12sq * a12sq
23764 ! charge of amino acid itypi is...
23765 chis1 = chis_scbase(itypi,itypj,1)
23766 chis2 = chis_scbase(itypi,itypj,2)
23767 chis12 = chis1 * chis2
23768 sig1 = sigmap1_scbase(itypi,itypj)
23769 sig2 = sigmap2_scbase(itypi,itypj)
23770 ! write (*,*) "sig1 = ", sig1
23771 ! write (*,*) "sig2 = ", sig2
23772 ! alpha factors from Fcav/Gcav
23773 b1 = alphasur_scbase(1,itypi,itypj)
23775 b2 = alphasur_scbase(2,itypi,itypj)
23776 b3 = alphasur_scbase(3,itypi,itypj)
23777 b4 = alphasur_scbase(4,itypi,itypj)
23778 ! used to determine whether we want to do quadrupole calculations
23780 eps_in = epsintab_scbase(itypi,itypj)
23781 if (eps_in.eq.0.0) eps_in=1.0
23782 eps_inout_fac = ( (1.0d0/eps_in) - (1.0d0/eps_out))
23783 ! write (*,*) "eps_inout_fac = ", eps_inout_fac
23784 !-------------------------------------------------------------------
23785 ! tail location and distance calculations
23787 ! location of polar head is computed by taking hydrophobic centre
23788 ! and moving by a d1 * dc_norm vector
23789 ! see unres publications for very informative images
23790 chead(k,1) = c(k, i+nres) + d1i * dc_norm(k, i+nres)
23791 chead(k,2) = c(k, j+nres) + d1j * dc_norm(k, j+nres)
23793 ! Rsc_distance(k) = dabs(c(k, i+nres) - c(k, j+nres))
23794 ! Rsc(k) = Rsc_distance(k) * Rsc_distance(k)
23795 Rhead_distance(k) = chead(k,2) - chead(k,1)
23797 ! pitagoras (root of sum of squares)
23799 (Rhead_distance(1)*Rhead_distance(1)) &
23800 + (Rhead_distance(2)*Rhead_distance(2)) &
23801 + (Rhead_distance(3)*Rhead_distance(3)))
23802 !-------------------------------------------------------------------
23803 ! zero everything that should be zero'ed
23821 dscj_inv = vbld_inv(j+nres)
23822 ! print *,i,j,dscj_inv,dsci_inv
23823 ! rij holds 1/(distance of Calpha atoms)
23824 rrij = 1.0D0 / ( xj*xj + yj*yj + zj*zj)
23826 !----------------------------
23828 ! this should be in elgrad_init but om's are calculated by sc_angular
23829 ! which in turn is used by older potentials
23830 ! om = omega, sqom = om^2
23833 sqom12 = om12 * om12
23835 ! now we calculate EGB - Gey-Berne
23836 ! It will be summed up in evdwij and saved in evdw
23837 sigsq = 1.0D0 / sigsq
23838 sig = sig0ij * dsqrt(sigsq)
23839 ! rij_shift = 1.0D0 / rij - sig + sig0ij
23840 rij_shift = 1.0/rij - sig + sig0ij
23841 IF (rij_shift.le.0.0D0) THEN
23845 sigder = -sig * sigsq
23846 rij_shift = 1.0D0 / rij_shift
23847 fac = rij_shift**expon
23848 c1 = fac * fac * aa_scbase(itypi,itypj)
23850 c2 = fac * bb_scbase(itypi,itypj)
23852 evdwij = eps1 * eps2rt * eps3rt * ( c1 + c2 )
23853 eps2der = eps3rt * evdwij
23854 eps3der = eps2rt * evdwij
23855 ! evdwij = 4.0d0 * eps2rt * eps3rt * evdwij
23856 evdwij = eps2rt * eps3rt * evdwij
23857 c1 = c1 * eps1 * eps2rt**2 * eps3rt**2
23858 fac = -expon * (c1 + evdwij) * rij_shift
23859 sigder = fac * sigder
23861 ! Calculate distance derivative
23865 ! if (b2.gt.0.0) then
23866 fac = chis1 * sqom1 + chis2 * sqom2 &
23867 - 2.0d0 * chis12 * om1 * om2 * om12
23868 ! we will use pom later in Gcav, so dont mess with it!
23869 pom = 1.0d0 - chis1 * chis2 * sqom12
23870 Lambf = (1.0d0 - (fac / pom))
23871 Lambf = dsqrt(Lambf)
23872 sparrow = 1.0d0 / dsqrt(sig1**2.0d0 + sig2**2.0d0)
23873 ! write (*,*) "sparrow = ", sparrow
23874 Chif = 1.0d0/rij * sparrow
23875 ChiLambf = Chif * Lambf
23876 eagle = dsqrt(ChiLambf)
23877 bat = ChiLambf ** 11.0d0
23878 top = b1 * ( eagle + b2 * ChiLambf - b3 )
23879 bot = 1.0d0 + b4 * (ChiLambf ** 12.0d0)
23883 dtop = b1 * ((Lambf / (2.0d0 * eagle)) + (b2 * Lambf))
23884 dbot = 12.0d0 * b4 * bat * Lambf
23885 dFdR = ((dtop * bot - top * dbot) / botsq) * sparrow
23887 ! write (*,*) "dFcav/dR = ", dFdR
23888 dtop = b1 * ((Chif / (2.0d0 * eagle)) + (b2 * Chif))
23889 dbot = 12.0d0 * b4 * bat * Chif
23890 eagle = Lambf * pom
23891 dFdOM1 = -(chis1 * om1 - chis12 * om2 * om12) / (eagle)
23892 dFdOM2 = -(chis2 * om2 - chis12 * om1 * om12) / (eagle)
23893 dFdOM12 = chis12 * (chis1 * om1 * om12 - om2) &
23894 * (chis2 * om2 * om12 - om1) / (eagle * pom)
23896 dFdL = ((dtop * bot - top * dbot) / botsq)
23898 dCAVdOM1 = dFdL * ( dFdOM1 )
23899 dCAVdOM2 = dFdL * ( dFdOM2 )
23900 dCAVdOM12 = dFdL * ( dFdOM12 )
23905 ! eom1=eps2der*eps2rt_om1-2.0D0*alf1*eps3der+sigder*sigsq_om1
23906 ! eom2=eps2der*eps2rt_om2+2.0D0*alf2*eps3der+sigder*sigsq_om2
23907 ! eom12=evdwij*eps1_om12+eps2der*eps2rt_om12 &
23908 ! -2.0D0*alf12*eps3der+sigder*sigsq_om12
23909 ! print *,"EOMY",eom1,eom2,eom12
23910 ! erdxi = scalar( ertail(1), dC_norm(1,i+nres) )
23911 ! erdxj = scalar( ertail(1), dC_norm(1,j+nres) )
23913 ! facd1 = dtail(1,itypi,itypj) * vbld_inv(i+nres)
23914 ! facd2 = dtail(2,itypi,itypj) * vbld_inv(j+nres)
23916 ! write (*,*) "Gvdwc(",k,",",i,")=", gvdwc(k,i)
23917 ! write (*,*) "Gvdwc(",k,",",j,")=", gvdwc(k,j)
23919 !-facd1*(ertail(k)-erdxi*dC_norm(k,i+nres))
23920 gvdwx_scbase(k,i) = gvdwx_scbase(k,i) &
23921 - (( dFdR + gg(k) ) * pom)
23922 ! +(eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,nres+i)) &
23923 ! +eom1*(erij(k)-om1*dc_norm(k,nres+i)))*dsci_inv
23924 ! & - ( dFdR * pom )
23926 !-facd2*(ertail(k)-erdxj*dC_norm(k,j+nres))
23927 gvdwx_scbase(k,j) = gvdwx_scbase(k,j) &
23928 + (( dFdR + gg(k) ) * pom)
23929 ! +(eom12*(dc_norm(k,nres+i)-om12*dc_norm(k,nres+j)) &
23930 ! +eom2*(erij(k)-om2*dc_norm(k,nres+j)))*dscj_inv
23931 !c! & + ( dFdR * pom )
23933 gvdwc_scbase(k,i) = gvdwc_scbase(k,i) &
23934 - (( dFdR + gg(k) ) * ertail(k))
23935 !c! & - ( dFdR * ertail(k))
23937 gvdwc_scbase(k,j) = gvdwc_scbase(k,j) &
23938 + (( dFdR + gg(k) ) * ertail(k))
23939 !c! & + ( dFdR * ertail(k))
23942 !c! write (*,*) "Gvdwc(",k,",",i,")=", gvdwc(k,i)
23943 !c! write (*,*) "Gvdwc(",k,",",j,")=", gvdwc(k,j)
23950 if (wdipdip_scbase(2,itypi,itypj).gt.0.0d0) then
23951 w1 = wdipdip_scbase(1,itypi,itypj)
23952 w2 = -wdipdip_scbase(3,itypi,itypj)/2.0
23953 w3 = wdipdip_scbase(2,itypi,itypj)
23954 !c!-------------------------------------------------------------------
23956 fac = (om12 - 3.0d0 * om1 * om2)
23957 c1 = (w1 / (Rhead**3.0d0)) * fac
23958 c2 = (w2 / Rhead ** 6.0d0) &
23959 * (4.0d0 + fac * fac -3.0d0 * (sqom1 + sqom2))
23960 c3= (w3/ Rhead ** 6.0d0) &
23961 * (2.0d0 - 2.0d0*fac*fac +3.0d0*(sqom1 + sqom2))
23963 !c! write (*,*) "w1 = ", w1
23964 !c! write (*,*) "w2 = ", w2
23965 !c! write (*,*) "om1 = ", om1
23966 !c! write (*,*) "om2 = ", om2
23967 !c! write (*,*) "om12 = ", om12
23968 !c! write (*,*) "fac = ", fac
23969 !c! write (*,*) "c1 = ", c1
23970 !c! write (*,*) "c2 = ", c2
23971 !c! write (*,*) "Ecl = ", Ecl
23972 !c! write (*,*) "c2_1 = ", (w2 / Rhead ** 6.0d0)
23973 !c! write (*,*) "c2_2 = ",
23974 !c! & (4.0d0 + fac * fac -3.0d0 * (sqom1 + sqom2))
23975 !c!-------------------------------------------------------------------
23976 !c! dervative of ECL is GCL...
23978 c1 = (-3.0d0 * w1 * fac) / (Rhead ** 4.0d0)
23979 c2 = (-6.0d0 * w2) / (Rhead ** 7.0d0) &
23980 * (4.0d0 + fac * fac - 3.0d0 * (sqom1 + sqom2))
23981 c3= (-6.0d0 * w3) / (Rhead ** 7.0d0) &
23982 * (2.0d0 - 2.0d0*fac*fac +3.0d0*(sqom1 + sqom2))
23983 dGCLdR = c1 - c2 + c3
23985 c1 = (-3.0d0 * w1 * om2 ) / (Rhead**3.0d0)
23986 c2 = (-6.0d0 * w2) / (Rhead**6.0d0) &
23987 * ( om2 * om12 - 3.0d0 * om1 * sqom2 + om1 )
23988 c3 =(6.0d0*w3/ Rhead ** 6.0d0)*(om1-2.0d0*(fac)*(-om2))
23989 dGCLdOM1 = c1 - c2 + c3
23991 c1 = (-3.0d0 * w1 * om1 ) / (Rhead**3.0d0)
23992 c2 = (-6.0d0 * w2) / (Rhead**6.0d0) &
23993 * ( om1 * om12 - 3.0d0 * sqom1 * om2 + om2 )
23994 c3 =(6.0d0*w3/ Rhead ** 6.0d0)*(om2-2.0d0*(fac)*(-om1))
23995 dGCLdOM2 = c1 - c2 + c3
23997 c1 = w1 / (Rhead ** 3.0d0)
23998 c2 = ( 2.0d0 * w2 * fac ) / Rhead ** 6.0d0
23999 c3 = (w3/ Rhead ** 6.0d0)*(-4.0d0*fac)
24000 dGCLdOM12 = c1 - c2 + c3
24002 erhead(k) = Rhead_distance(k)/Rhead
24004 erdxi = scalar( erhead(1), dC_norm(1,i+nres) )
24005 erdxj = scalar( erhead(1), dC_norm(1,j+nres) )
24006 facd1 = d1i * vbld_inv(i+nres)
24007 facd2 = d1j * vbld_inv(j+nres)
24010 pom = erhead(k)+facd1*(erhead(k)-erdxi*dC_norm(k,i+nres))
24011 gvdwx_scbase(k,i) = gvdwx_scbase(k,i) &
24013 pom = erhead(k)+facd2*(erhead(k)-erdxj*dC_norm(k,j+nres))
24014 gvdwx_scbase(k,j) = gvdwx_scbase(k,j) &
24017 gvdwc_scbase(k,i) = gvdwc_scbase(k,i) &
24018 - dGCLdR * erhead(k)
24019 gvdwc_scbase(k,j) = gvdwc_scbase(k,j) &
24020 + dGCLdR * erhead(k)
24023 !now charge with dipole eg. ARG-dG
24024 if (wqdip_scbase(2,itypi,itypj).gt.0.0d0) then
24025 alphapol1 = alphapol_scbase(itypi,itypj)
24026 w1 = wqdip_scbase(1,itypi,itypj)
24027 w2 = wqdip_scbase(2,itypi,itypj)
24030 ! pis = sig0head_scbase(itypi,itypj)
24031 ! eps_head = epshead_scbase(itypi,itypj)
24032 !c!-------------------------------------------------------------------
24033 !c! R1 - distance between head of ith side chain and tail of jth sidechain
24036 !c! Calculate head-to-tail distances tail is center of side-chain
24037 R1=R1+(c(k,j+nres)-chead(k,1))**2
24042 !c! R1 = dsqrt((Rtail**2)+((dtail(1,itypi,itypj)
24043 !c! & +dhead(1,1,itypi,itypj))**2))
24044 !c! R2 = dsqrt((Rtail**2)+((dtail(2,itypi,itypj)
24045 !c! & +dhead(2,1,itypi,itypj))**2))
24047 !c!-------------------------------------------------------------------
24050 hawk = w2 * (1.0d0 - sqom2)
24051 Ecl = sparrow / Rhead**2.0d0 &
24052 - hawk / Rhead**4.0d0
24053 !c!-------------------------------------------------------------------
24054 !c! derivative of ecl is Gcl
24056 dGCLdR = - 2.0d0 * sparrow / Rhead**3.0d0 &
24057 + 4.0d0 * hawk / Rhead**5.0d0
24059 dGCLdOM1 = (w1) / (Rhead**2.0d0)
24061 dGCLdOM2 = (2.0d0 * w2 * om2) / (Rhead ** 4.0d0)
24062 !c--------------------------------------------------------------------
24063 !c Polarization energy
24065 MomoFac1 = (1.0d0 - chi1 * sqom2)
24066 RR1 = R1 * R1 / MomoFac1
24067 ee1 = exp(-( RR1 / (4.0d0 * a12sq) ))
24068 fgb1 = sqrt( RR1 + a12sq * ee1)
24069 ! eps_inout_fac=0.0d0
24070 epol = 332.0d0 * eps_inout_fac * (( alphapol1 / fgb1 )**4.0d0)
24071 ! derivative of Epol is Gpol...
24072 dPOLdFGB1 = -(1328.0d0 * eps_inout_fac * alphapol1 ** 4.0d0) &
24074 dFGBdR1 = ( (R1 / MomoFac1) &
24075 * ( 2.0d0 - (0.5d0 * ee1) ) ) &
24077 dFGBdOM2 = (((R1 * R1 * chi1 * om2) / (MomoFac1 * MomoFac1)) &
24078 * (2.0d0 - 0.5d0 * ee1) ) &
24080 dPOLdR1 = dPOLdFGB1 * dFGBdR1
24083 dPOLdOM2 = dPOLdFGB1 * dFGBdOM2
24085 erhead(k) = Rhead_distance(k)/Rhead
24086 erhead_tail(k,1) = ((c(k,j+nres)-chead(k,1))/R1)
24089 erdxi = scalar( erhead(1), dC_norm(1,i+nres) )
24090 erdxj = scalar( erhead(1), dC_norm(1,j+nres) )
24091 bat = scalar( erhead_tail(1,1), dC_norm(1,i+nres) )
24093 federmaus = scalar(erhead_tail(1,1),dC_norm(1,j+nres))
24094 facd1 = d1i * vbld_inv(i+nres)
24095 facd2 = d1j * vbld_inv(j+nres)
24096 ! facd4 = dtail(2,itypi,itypj) * vbld_inv(j+nres)
24099 hawk = (erhead_tail(k,1) + &
24100 facd1 * (erhead_tail(k,1) - bat * dC_norm(k,i+nres)))
24103 pom = erhead(k)+facd1*(erhead(k)-erdxi*dC_norm(k,i+nres))
24104 gvdwx_scbase(k,i) = gvdwx_scbase(k,i) &
24106 - dPOLdR1 * (erhead_tail(k,1))
24109 pom = erhead(k)+facd2*(erhead(k)-erdxj*dC_norm(k,j+nres))
24110 gvdwx_scbase(k,j) = gvdwx_scbase(k,j) &
24112 + dPOLdR1 * (erhead_tail(k,1))
24116 gvdwc_scbase(k,i) = gvdwc_scbase(k,i) &
24117 - dGCLdR * erhead(k) &
24118 - dPOLdR1 * erhead_tail(k,1)
24119 ! & - dGLJdR * erhead(k)
24121 gvdwc_scbase(k,j) = gvdwc_scbase(k,j) &
24122 + dGCLdR * erhead(k) &
24123 + dPOLdR1 * erhead_tail(k,1)
24124 ! & + dGLJdR * erhead(k)
24128 ! print *,i,j,evdwij,epol,Fcav,ECL
24129 escbase=escbase+evdwij+epol+Fcav+ECL
24130 call sc_grad_scbase
24135 end subroutine eprot_sc_base
24136 SUBROUTINE sc_grad_scbase
24139 real (kind=8) :: dcosom1(3),dcosom2(3)
24141 eps2der * eps2rt_om1 &
24142 - 2.0D0 * alf1 * eps3der &
24143 + sigder * sigsq_om1 &
24149 eps2der * eps2rt_om2 &
24150 + 2.0D0 * alf2 * eps3der &
24151 + sigder * sigsq_om2 &
24157 evdwij * eps1_om12 &
24158 + eps2der * eps2rt_om12 &
24159 - 2.0D0 * alf12 * eps3der &
24160 + sigder *sigsq_om12 &
24164 ! print *,eom1,eom2,eom12,i,j,"eom1,2,12",erij(1),erij(2),erij(3)
24165 ! print *,dsci_inv,dscj_inv,dc_norm(2,nres+j),dc_norm(2,nres+i),&
24166 ! gg(1),gg(2),"rozne"
24168 dcosom1(k) = rij * (dc_norm(k,nres+i) - om1 * erij(k))
24169 dcosom2(k) = rij * (dc_norm(k,nres+j) - om2 * erij(k))
24170 gg(k) = gg(k) + eom1 * dcosom1(k) + eom2 * dcosom2(k)
24171 gvdwx_scbase(k,i)= gvdwx_scbase(k,i) - gg(k) &
24172 + (eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,nres+i)) &
24173 + eom1*(erij(k)-om1*dc_norm(k,nres+i)))*dsci_inv
24174 gvdwx_scbase(k,j)= gvdwx_scbase(k,j) + gg(k) &
24175 + (eom12*(dc_norm(k,nres+i)-om12*dc_norm(k,nres+j)) &
24176 + eom2*(erij(k)-om2*dc_norm(k,nres+j)))*dscj_inv
24177 gvdwc_scbase(k,i)=gvdwc_scbase(k,i)-gg(k)
24178 gvdwc_scbase(k,j)=gvdwc_scbase(k,j)+gg(k)
24181 END SUBROUTINE sc_grad_scbase
24184 subroutine epep_sc_base(epepbase)
24187 !el local variables
24188 integer :: iint,itypi,itypi1,itypj,subchap
24189 real(kind=8) :: rrij,xi,yi,zi,sig,rij_shift,fac,e1,e2,sigm,epsi
24190 real(kind=8) :: evdw,sig0ij
24191 real(kind=8) :: xj_safe,yj_safe,zj_safe,xj_temp,yj_temp,zj_temp,&
24192 dist_temp, dist_init,aa,bb,ssgradlipi,ssgradlipj, &
24193 sslipi,sslipj,faclip
24195 real(kind=8) :: fracinbuf
24196 real (kind=8) :: epepbase
24197 real (kind=8),dimension(4):: ener
24198 real(kind=8) :: b1,b2,b3,b4,egb,eps_in,eps_inout_fac,eps_out
24199 real(kind=8) :: ECL,Elj,Equad,Epol,eheadtail,rhead,dGCLOM2,&
24200 sqom1,sqom2,sqom12,c1,c2,c3,pom,Lambf,sparrow,&
24201 Chif,ChiLambf,bat,eagle,top,bot,botsq,Fcav,dtop,dFdR,dFdOM1,&
24202 dFdOM2,w1,w2,w3,dGCLdR,dFdL,dFdOM12,dbot ,&
24203 r1,eps_head,alphapol1,pis,facd2,d2,facd1,d1,erdxj,erdxi,federmaus,&
24204 dPOLdR1,dFGBdOM2,dFGBdR1,dPOLdFGB1,RR1,MomoFac1,hawk,d1i,d1j,&
24205 sig1,sig2,chis12,chis2,ee1,fgb1,a12sq,chis1
24206 real(kind=8),dimension(3,2)::chead,erhead_tail
24207 real(kind=8),dimension(3) :: Rhead_distance,ertail,erhead
24211 ! do i=1,nres_molec(1)-1
24212 do i=ibond_start,ibond_end
24213 if (itype(i,1).eq.ntyp1_molec(1).or.itype(i+1,1).eq.ntyp1_molec(1)) cycle
24214 !C itypi = itype(i,1)
24218 ! print *,dxi,(-c(1,i)+c(1,i+1))*vbld_inv(i+1)
24219 dsci_inv = vbld_inv(i+1)/2.0
24220 xi=(c(1,i)+c(1,i+1))/2.0
24221 yi=(c(2,i)+c(2,i+1))/2.0
24222 zi=(c(3,i)+c(3,i+1))/2.0
24223 call to_box(xi,yi,zi)
24224 do j=nres_molec(1)+1,nres_molec(2)+nres_molec(1)
24226 if (itype(j,2).eq.ntyp1_molec(2))cycle
24230 call to_box(xj,yj,zj)
24231 xj=boxshift(xj-xi,boxxsize)
24232 yj=boxshift(yj-yi,boxysize)
24233 zj=boxshift(zj-zi,boxzsize)
24234 dist_init=xj**2+yj**2+zj**2
24235 dxj = dc_norm( 1, nres+j )
24236 dyj = dc_norm( 2, nres+j )
24237 dzj = dc_norm( 3, nres+j )
24238 ! d1i = dhead_scbasei(itypi) !this is shift of dipole/charge
24239 ! d1j = dhead_scbasej(itypi) !this is shift of dipole/charge
24242 sig0ij = sigma_pepbase(itypj )
24243 chi1 = chi_pepbase(itypj,1 )
24244 chi2 = chi_pepbase(itypj,2 )
24247 chi12 = chi1 * chi2
24248 chip1 = chipp_pepbase(itypj,1 )
24249 chip2 = chipp_pepbase(itypj,2 )
24252 chip12 = chip1 * chip2
24253 chis1 = chis_pepbase(itypj,1)
24254 chis2 = chis_pepbase(itypj,2)
24255 chis12 = chis1 * chis2
24256 sig1 = sigmap1_pepbase(itypj)
24257 sig2 = sigmap2_pepbase(itypj)
24258 ! write (*,*) "sig1 = ", sig1
24259 ! write (*,*) "sig2 = ", sig2
24261 ! location of polar head is computed by taking hydrophobic centre
24262 ! and moving by a d1 * dc_norm vector
24263 ! see unres publications for very informative images
24264 chead(k,1) = (c(k,i)+c(k,i+1))/2.0
24265 ! + d1i * dc_norm(k, i+nres)
24266 chead(k,2) = c(k, j+nres)
24267 ! + d1j * dc_norm(k, j+nres)
24269 ! Rsc_distance(k) = dabs(c(k, i+nres) - c(k, j+nres))
24270 ! Rsc(k) = Rsc_distance(k) * Rsc_distance(k)
24271 Rhead_distance(k) = chead(k,2) - chead(k,1)
24272 ! print *,gvdwc_pepbase(k,i)
24276 (Rhead_distance(1)*Rhead_distance(1)) &
24277 + (Rhead_distance(2)*Rhead_distance(2)) &
24278 + (Rhead_distance(3)*Rhead_distance(3)))
24280 ! alpha factors from Fcav/Gcav
24281 b1 = alphasur_pepbase(1,itypj)
24283 b2 = alphasur_pepbase(2,itypj)
24284 b3 = alphasur_pepbase(3,itypj)
24285 b4 = alphasur_pepbase(4,itypj)
24289 rrij = 1.0D0 / ( xj*xj + yj*yj + zj*zj)
24292 !----------------------------
24310 dscj_inv = vbld_inv(j+nres)
24312 ! this should be in elgrad_init but om's are calculated by sc_angular
24313 ! which in turn is used by older potentials
24314 ! om = omega, sqom = om^2
24317 sqom12 = om12 * om12
24319 ! now we calculate EGB - Gey-Berne
24320 ! It will be summed up in evdwij and saved in evdw
24321 sigsq = 1.0D0 / sigsq
24322 sig = sig0ij * dsqrt(sigsq)
24323 rij_shift = 1.0/rij - sig + sig0ij
24324 IF (rij_shift.le.0.0D0) THEN
24328 sigder = -sig * sigsq
24329 rij_shift = 1.0D0 / rij_shift
24330 fac = rij_shift**expon
24331 c1 = fac * fac * aa_pepbase(itypj)
24333 c2 = fac * bb_pepbase(itypj)
24335 evdwij = eps1 * eps2rt * eps3rt * ( c1 + c2 )
24336 eps2der = eps3rt * evdwij
24337 eps3der = eps2rt * evdwij
24338 ! evdwij = 4.0d0 * eps2rt * eps3rt * evdwij
24339 evdwij = eps2rt * eps3rt * evdwij
24340 c1 = c1 * eps1 * eps2rt**2 * eps3rt**2
24341 fac = -expon * (c1 + evdwij) * rij_shift
24342 sigder = fac * sigder
24344 ! Calculate distance derivative
24348 fac = chis1 * sqom1 + chis2 * sqom2 &
24349 - 2.0d0 * chis12 * om1 * om2 * om12
24350 ! we will use pom later in Gcav, so dont mess with it!
24351 pom = 1.0d0 - chis1 * chis2 * sqom12
24352 Lambf = (1.0d0 - (fac / pom))
24353 Lambf = dsqrt(Lambf)
24354 sparrow = 1.0d0 / dsqrt(sig1**2.0d0 + sig2**2.0d0)
24355 ! write (*,*) "sparrow = ", sparrow
24356 Chif = 1.0d0/rij * sparrow
24357 ChiLambf = Chif * Lambf
24358 eagle = dsqrt(ChiLambf)
24359 bat = ChiLambf ** 11.0d0
24360 top = b1 * ( eagle + b2 * ChiLambf - b3 )
24361 bot = 1.0d0 + b4 * (ChiLambf ** 12.0d0)
24365 dtop = b1 * ((Lambf / (2.0d0 * eagle)) + (b2 * Lambf))
24366 dbot = 12.0d0 * b4 * bat * Lambf
24367 dFdR = ((dtop * bot - top * dbot) / botsq) * sparrow
24369 ! write (*,*) "dFcav/dR = ", dFdR
24370 dtop = b1 * ((Chif / (2.0d0 * eagle)) + (b2 * Chif))
24371 dbot = 12.0d0 * b4 * bat * Chif
24372 eagle = Lambf * pom
24373 dFdOM1 = -(chis1 * om1 - chis12 * om2 * om12) / (eagle)
24374 dFdOM2 = -(chis2 * om2 - chis12 * om1 * om12) / (eagle)
24375 dFdOM12 = chis12 * (chis1 * om1 * om12 - om2) &
24376 * (chis2 * om2 * om12 - om1) / (eagle * pom)
24378 dFdL = ((dtop * bot - top * dbot) / botsq)
24380 dCAVdOM1 = dFdL * ( dFdOM1 )
24381 dCAVdOM2 = dFdL * ( dFdOM2 )
24382 dCAVdOM12 = dFdL * ( dFdOM12 )
24388 ! write (*,*) "Gvdwc(",k,",",i,")=", gvdwc(k,i)
24389 ! write (*,*) "Gvdwc(",k,",",j,")=", gvdwc(k,j)
24391 !-facd1*(ertail(k)-erdxi*dC_norm(k,i+nres))
24392 gvdwc_pepbase(k,i) = gvdwc_pepbase(k,i) &
24393 - (( dFdR + gg(k) ) * pom)/2.0
24394 ! print *,gvdwc_pepbase(k,i),i,(( dFdR + gg(k) ) * pom)/2.0
24395 ! +(eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,nres+i)) &
24396 ! +eom1*(erij(k)-om1*dc_norm(k,nres+i)))*dsci_inv
24397 ! & - ( dFdR * pom )
24399 !-facd2*(ertail(k)-erdxj*dC_norm(k,j+nres))
24400 gvdwx_pepbase(k,j) = gvdwx_pepbase(k,j) &
24401 + (( dFdR + gg(k) ) * pom)
24402 ! +(eom12*(dc_norm(k,nres+i)-om12*dc_norm(k,nres+j)) &
24403 ! +eom2*(erij(k)-om2*dc_norm(k,nres+j)))*dscj_inv
24404 !c! & + ( dFdR * pom )
24406 gvdwc_pepbase(k,i+1) = gvdwc_pepbase(k,i+1) &
24407 - (( dFdR + gg(k) ) * ertail(k))/2.0
24408 ! print *,gvdwc_pepbase(k,i+1),i+1,(( dFdR + gg(k) ) * pom)/2.0
24410 !c! & - ( dFdR * ertail(k))
24412 gvdwc_pepbase(k,j) = gvdwc_pepbase(k,j) &
24413 + (( dFdR + gg(k) ) * ertail(k))
24414 !c! & + ( dFdR * ertail(k))
24417 !c! write (*,*) "Gvdwc(",k,",",i,")=", gvdwc(k,i)
24418 !c! write (*,*) "Gvdwc(",k,",",j,")=", gvdwc(k,j)
24422 w1 = wdipdip_pepbase(1,itypj)
24423 w2 = -wdipdip_pepbase(3,itypj)/2.0
24424 w3 = wdipdip_pepbase(2,itypj)
24427 !c!-------------------------------------------------------------------
24430 fac = (om12 - 3.0d0 * om1 * om2)
24431 c1 = (w1 / (Rhead**3.0d0)) * fac
24432 c2 = (w2 / Rhead ** 6.0d0) &
24433 * (4.0d0 + fac * fac -3.0d0 * (sqom1 + sqom2))
24434 c3= (w3/ Rhead ** 6.0d0) &
24435 * (2.0d0 - 2.0d0*fac*fac +3.0d0*(sqom1 + sqom2))
24439 c1 = (-3.0d0 * w1 * fac) / (Rhead ** 4.0d0)
24440 c2 = (-6.0d0 * w2) / (Rhead ** 7.0d0) &
24441 * (4.0d0 + fac * fac - 3.0d0 * (sqom1 + sqom2))
24442 c3= (-6.0d0 * w3) / (Rhead ** 7.0d0) &
24443 * (2.0d0 - 2.0d0*fac*fac +3.0d0*(sqom1 + sqom2))
24445 dGCLdR = c1 - c2 + c3
24447 c1 = (-3.0d0 * w1 * om2 ) / (Rhead**3.0d0)
24448 c2 = (-6.0d0 * w2) / (Rhead**6.0d0) &
24449 * ( om2 * om12 - 3.0d0 * om1 * sqom2 + om1 )
24450 c3 =(6.0d0*w3/ Rhead ** 6.0d0)*(om1-2.0d0*(fac)*(-om2))
24451 dGCLdOM1 = c1 - c2 + c3
24453 c1 = (-3.0d0 * w1 * om1 ) / (Rhead**3.0d0)
24454 c2 = (-6.0d0 * w2) / (Rhead**6.0d0) &
24455 * ( om1 * om12 - 3.0d0 * sqom1 * om2 + om2 )
24456 c3 =(6.0d0*w3/ Rhead ** 6.0d0)*(om2-2.0d0*(fac)*(-om1))
24458 dGCLdOM2 = c1 - c2 + c3
24460 c1 = w1 / (Rhead ** 3.0d0)
24461 c2 = ( 2.0d0 * w2 * fac ) / Rhead ** 6.0d0
24462 c3 = (w3/ Rhead ** 6.0d0)*(-4.0d0*fac)
24463 dGCLdOM12 = c1 - c2 + c3
24465 erhead(k) = Rhead_distance(k)/Rhead
24467 erdxi = scalar( erhead(1), dC_norm(1,i+nres) )
24468 erdxj = scalar( erhead(1), dC_norm(1,j+nres) )
24469 ! facd1 = d1 * vbld_inv(i+nres)
24470 ! facd2 = d2 * vbld_inv(j+nres)
24474 !+facd1*(erhead(k)-erdxi*dC_norm(k,i+nres))
24475 ! gvdwx_pepbase(k,i) = gvdwx_scbase(k,i) &
24478 !+facd2*(erhead(k)-erdxj*dC_norm(k,j+nres))
24479 gvdwx_pepbase(k,j) = gvdwx_pepbase(k,j) &
24482 gvdwc_pepbase(k,i) = gvdwc_pepbase(k,i) &
24483 - dGCLdR * erhead(k)/2.0d0
24484 ! print *,gvdwc_pepbase(k,i+1),i+1,- dGCLdR * erhead(k)/2.0d0
24485 gvdwc_pepbase(k,i+1) = gvdwc_pepbase(k,i+1) &
24486 - dGCLdR * erhead(k)/2.0d0
24487 ! print *,gvdwc_pepbase(k,i+1),i+1,- dGCLdR * erhead(k)/2.0d0
24488 gvdwc_pepbase(k,j) = gvdwc_pepbase(k,j) &
24489 + dGCLdR * erhead(k)
24491 ! print *,i,j,evdwij,Fcav,ECL,"vdw,cav,ecl"
24492 epepbase=epepbase+evdwij+Fcav+ECL
24493 call sc_grad_pepbase
24496 END SUBROUTINE epep_sc_base
24497 SUBROUTINE sc_grad_pepbase
24500 real (kind=8) :: dcosom1(3),dcosom2(3)
24502 eps2der * eps2rt_om1 &
24503 - 2.0D0 * alf1 * eps3der &
24504 + sigder * sigsq_om1 &
24510 eps2der * eps2rt_om2 &
24511 + 2.0D0 * alf2 * eps3der &
24512 + sigder * sigsq_om2 &
24518 evdwij * eps1_om12 &
24519 + eps2der * eps2rt_om12 &
24520 - 2.0D0 * alf12 * eps3der &
24521 + sigder *sigsq_om12 &
24526 ! print *,eom1,eom2,eom12,om12,i,j,"eom1,2,12",erij(1),erij(2),erij(3)
24527 ! if (i.eq.30) print *,gvdwc_pepbase(k,i),- gg(k),&
24528 ! (-eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,i)))&
24530 ! print *,dsci_inv,dscj_inv,dc_norm(2,nres+j),dc_norm(2,nres+i),&
24531 ! gg(1),gg(2),"rozne"
24533 dcosom1(k) = rij * (dc_norm(k,i) - om1 * erij(k))
24534 dcosom2(k) = rij * (dc_norm(k,nres+j) - om2 * erij(k))
24535 gg(k) = gg(k) + eom1 * dcosom1(k) + eom2 * dcosom2(k)
24536 gvdwc_pepbase(k,i)= gvdwc_pepbase(k,i) +0.5*(- gg(k)) &
24537 + (-eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,i)))&
24539 - (eom1*(erij(k)-om1*dc_norm(k,i)))*dsci_inv*2.0
24540 gvdwc_pepbase(k,i+1)= gvdwc_pepbase(k,i+1) +0.5*(- gg(k)) &
24541 - (-eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,i))) &
24543 + (eom1*(erij(k)-om1*dc_norm(k,i)))*dsci_inv*2.0
24544 ! print *,eom12,eom2,om12,om2
24545 !eom12*(-dc_norm(k,i)/2.0-om12*dc_norm(k,nres+j)),&
24546 ! (eom2*(erij(k)-om2*dc_norm(k,nres+j)))
24547 gvdwx_pepbase(k,j)= gvdwx_pepbase(k,j) + gg(k) &
24548 + (eom12*(dc_norm(k,i)-om12*dc_norm(k,nres+j))&
24549 + eom2*(erij(k)-om2*dc_norm(k,nres+j)))*dscj_inv
24550 gvdwc_pepbase(k,j)=gvdwc_pepbase(k,j)+gg(k)
24553 END SUBROUTINE sc_grad_pepbase
24554 subroutine eprot_sc_phosphate(escpho)
24556 ! implicit real*8 (a-h,o-z)
24557 ! include 'DIMENSIONS'
24558 ! include 'COMMON.GEO'
24559 ! include 'COMMON.VAR'
24560 ! include 'COMMON.LOCAL'
24561 ! include 'COMMON.CHAIN'
24562 ! include 'COMMON.DERIV'
24563 ! include 'COMMON.NAMES'
24564 ! include 'COMMON.INTERACT'
24565 ! include 'COMMON.IOUNITS'
24566 ! include 'COMMON.CALC'
24567 ! include 'COMMON.CONTROL'
24568 ! include 'COMMON.SBRIDGE'
24570 !el local variables
24571 integer :: iint,itypi,itypi1,itypj,subchap
24572 real(kind=8) :: rrij,xi,yi,zi,sig,rij_shift,fac,e1,e2,sigm,epsi
24573 real(kind=8) :: evdw,sig0ij,aa,bb
24574 real(kind=8) :: xj_safe,yj_safe,zj_safe,xj_temp,yj_temp,zj_temp,&
24575 dist_temp, dist_init,ssgradlipi,ssgradlipj, &
24576 sslipi,sslipj,faclip,alpha_sco
24578 real(kind=8) :: fracinbuf
24579 real (kind=8) :: escpho
24580 real (kind=8),dimension(4):: ener
24581 real(kind=8) :: b1,b2,b3,b4,egb,eps_in,eps_inout_fac,eps_out
24582 real(kind=8) :: ECL,Elj,Equad,Epol,eheadtail,rhead,dGCLOM2,&
24583 sqom1,sqom2,sqom12,c1,c2,pom,Lambf,sparrow,&
24584 Chif,ChiLambf,bat,eagle,top,bot,botsq,Fcav,dtop,dFdR,dFdOM1,&
24585 dFdOM2,w1,w2,dGCLdR,dFdL,dFdOM12,dbot ,&
24586 r1,eps_head,alphapol1,pis,facd2,d2,facd1,d1,erdxj,erdxi,federmaus,&
24587 dPOLdR1,dFGBdOM2,dFGBdR1,dPOLdFGB1,RR1,MomoFac1,hawk,d1i,d1j,&
24588 sig1,sig2,chis12,chis2,ee1,fgb1,a12sq,chis1,Rhead_sq,Qij,dFGBdOM1
24589 real(kind=8),dimension(3,2)::chead,erhead_tail
24590 real(kind=8),dimension(3) :: Rhead_distance,ertail,erhead
24594 ! do i=1,nres_molec(1)
24595 do i=ibond_start,ibond_end
24596 if (itype(i,1).eq.ntyp1_molec(1)) cycle
24598 dxi = dc_norm(1,nres+i)
24599 dyi = dc_norm(2,nres+i)
24600 dzi = dc_norm(3,nres+i)
24601 dsci_inv = vbld_inv(i+nres)
24605 call to_box(xi,yi,zi)
24606 call lipid_layer(xi,yi,zi,sslipi,ssgradlipi)
24607 do j=nres_molec(1)+1,nres_molec(2)+nres_molec(1)-1
24609 if ((itype(j,2).eq.ntyp1_molec(2)).or.&
24610 (itype(j+1,2).eq.ntyp1_molec(2))) cycle
24611 xj=(c(1,j)+c(1,j+1))/2.0
24612 yj=(c(2,j)+c(2,j+1))/2.0
24613 zj=(c(3,j)+c(3,j+1))/2.0
24614 call to_box(xj,yj,zj)
24615 ! call lipid_layer(xj,yj,zj,sslipj,ssgradlipj)
24616 ! aa=aa_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0 &
24617 ! +aa_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
24618 ! bb=bb_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0 &
24619 ! +bb_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
24620 xj=boxshift(xj-xi,boxxsize)
24621 yj=boxshift(yj-yi,boxysize)
24622 zj=boxshift(zj-zi,boxzsize)
24623 dxj = dc_norm( 1,j )
24624 dyj = dc_norm( 2,j )
24625 dzj = dc_norm( 3,j )
24626 dscj_inv = vbld_inv(j+1)
24629 sig0ij = sigma_scpho(itypi )
24630 chi1 = chi_scpho(itypi,1 )
24631 chi2 = chi_scpho(itypi,2 )
24634 chi12 = chi1 * chi2
24635 chip1 = chipp_scpho(itypi,1 )
24636 chip2 = chipp_scpho(itypi,2 )
24639 chip12 = chip1 * chip2
24640 chis1 = chis_scpho(itypi,1)
24641 chis2 = chis_scpho(itypi,2)
24642 chis12 = chis1 * chis2
24643 sig1 = sigmap1_scpho(itypi)
24644 sig2 = sigmap2_scpho(itypi)
24645 ! write (*,*) "sig1 = ", sig1
24646 ! write (*,*) "sig1 = ", sig1
24647 ! write (*,*) "sig2 = ", sig2
24648 ! alpha factors from Fcav/Gcav
24652 a12sq = rborn_scphoi(itypi) * rborn_scphoj(itypi)
24654 b1 = alphasur_scpho(1,itypi)
24656 b2 = alphasur_scpho(2,itypi)
24657 b3 = alphasur_scpho(3,itypi)
24658 b4 = alphasur_scpho(4,itypi)
24659 ! used to determine whether we want to do quadrupole calculations
24661 eps_in = epsintab_scpho(itypi)
24662 if (eps_in.eq.0.0) eps_in=1.0
24663 eps_inout_fac = ( (1.0d0/eps_in) - (1.0d0/eps_out))
24664 ! write (*,*) "eps_inout_fac = ", eps_inout_fac
24665 !-------------------------------------------------------------------
24666 ! tail location and distance calculations
24667 d1i = dhead_scphoi(itypi) !this is shift of dipole/charge
24670 ! location of polar head is computed by taking hydrophobic centre
24671 ! and moving by a d1 * dc_norm vector
24672 ! see unres publications for very informative images
24673 chead(k,1) = c(k, i+nres) + d1i * dc_norm(k, i+nres)
24674 chead(k,2) = (c(k, j) + c(k, j+1))/2.0
24676 ! Rsc_distance(k) = dabs(c(k, i+nres) - c(k, j+nres))
24677 ! Rsc(k) = Rsc_distance(k) * Rsc_distance(k)
24678 Rhead_distance(k) = chead(k,2) - chead(k,1)
24680 ! pitagoras (root of sum of squares)
24682 (Rhead_distance(1)*Rhead_distance(1)) &
24683 + (Rhead_distance(2)*Rhead_distance(2)) &
24684 + (Rhead_distance(3)*Rhead_distance(3)))
24685 Rhead_sq=Rhead**2.0
24686 !-------------------------------------------------------------------
24687 ! zero everything that should be zero'ed
24706 dscj_inv = vbld_inv(j+1)/2.0
24707 !dhead_scbasej(itypi,itypj)
24708 ! print *,i,j,dscj_inv,dsci_inv
24709 ! rij holds 1/(distance of Calpha atoms)
24710 rrij = 1.0D0 / ( xj*xj + yj*yj + zj*zj)
24712 !----------------------------
24714 ! this should be in elgrad_init but om's are calculated by sc_angular
24715 ! which in turn is used by older potentials
24716 ! om = omega, sqom = om^2
24719 sqom12 = om12 * om12
24721 ! now we calculate EGB - Gey-Berne
24722 ! It will be summed up in evdwij and saved in evdw
24723 sigsq = 1.0D0 / sigsq
24724 sig = sig0ij * dsqrt(sigsq)
24725 ! rij_shift = 1.0D0 / rij - sig + sig0ij
24726 rij_shift = 1.0/rij - sig + sig0ij
24727 IF (rij_shift.le.0.0D0) THEN
24731 sigder = -sig * sigsq
24732 rij_shift = 1.0D0 / rij_shift
24733 fac = rij_shift**expon
24734 c1 = fac * fac * aa_scpho(itypi)
24736 c2 = fac * bb_scpho(itypi)
24738 evdwij = eps1 * eps2rt * eps3rt * ( c1 + c2 )
24739 eps2der = eps3rt * evdwij
24740 eps3der = eps2rt * evdwij
24741 ! evdwij = 4.0d0 * eps2rt * eps3rt * evdwij
24742 evdwij = eps2rt * eps3rt * evdwij
24743 c1 = c1 * eps1 * eps2rt**2 * eps3rt**2
24744 fac = -expon * (c1 + evdwij) * rij_shift
24745 sigder = fac * sigder
24747 ! Calculate distance derivative
24751 fac = chis1 * sqom1 + chis2 * sqom2 &
24752 - 2.0d0 * chis12 * om1 * om2 * om12
24753 ! we will use pom later in Gcav, so dont mess with it!
24754 pom = 1.0d0 - chis1 * chis2 * sqom12
24755 Lambf = (1.0d0 - (fac / pom))
24756 Lambf = dsqrt(Lambf)
24757 sparrow = 1.0d0 / dsqrt(sig1**2.0d0 + sig2**2.0d0)
24758 ! write (*,*) "sparrow = ", sparrow
24759 Chif = 1.0d0/rij * sparrow
24760 ChiLambf = Chif * Lambf
24761 eagle = dsqrt(ChiLambf)
24762 bat = ChiLambf ** 11.0d0
24763 top = b1 * ( eagle + b2 * ChiLambf - b3 )
24764 bot = 1.0d0 + b4 * (ChiLambf ** 12.0d0)
24767 dtop = b1 * ((Lambf / (2.0d0 * eagle)) + (b2 * Lambf))
24768 dbot = 12.0d0 * b4 * bat * Lambf
24769 dFdR = ((dtop * bot - top * dbot) / botsq) * sparrow
24771 ! write (*,*) "dFcav/dR = ", dFdR
24772 dtop = b1 * ((Chif / (2.0d0 * eagle)) + (b2 * Chif))
24773 dbot = 12.0d0 * b4 * bat * Chif
24774 eagle = Lambf * pom
24775 dFdOM1 = -(chis1 * om1 - chis12 * om2 * om12) / (eagle)
24776 dFdOM2 = -(chis2 * om2 - chis12 * om1 * om12) / (eagle)
24777 dFdOM12 = chis12 * (chis1 * om1 * om12 - om2) &
24778 * (chis2 * om2 * om12 - om1) / (eagle * pom)
24780 dFdL = ((dtop * bot - top * dbot) / botsq)
24782 dCAVdOM1 = dFdL * ( dFdOM1 )
24783 dCAVdOM2 = dFdL * ( dFdOM2 )
24784 dCAVdOM12 = dFdL * ( dFdOM12 )
24790 ! write (*,*) "Gvdwc(",k,",",i,")=", gvdwc(k,i)
24791 ! write (*,*) "Gvdwc(",k,",",j,")=", gvdwc(k,j)
24792 ! if (i.eq.3) print *,'decl0',gvdwx_scpho(k,i),i
24795 ! print *,pom,gg(k),dFdR
24796 !-facd1*(ertail(k)-erdxi*dC_norm(k,i+nres))
24797 gvdwx_scpho(k,i) = gvdwx_scpho(k,i) &
24798 - (( dFdR + gg(k) ) * pom)
24799 ! +(eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,nres+i)) &
24800 ! +eom1*(erij(k)-om1*dc_norm(k,nres+i)))*dsci_inv
24801 ! & - ( dFdR * pom )
24803 !-facd2*(ertail(k)-erdxj*dC_norm(k,j+nres))
24804 ! gvdwx_scpho(k,j) = gvdwx_scpho(k,j) &
24805 ! + (( dFdR + gg(k) ) * pom)
24806 ! +(eom12*(dc_norm(k,nres+i)-om12*dc_norm(k,nres+j)) &
24807 ! +eom2*(erij(k)-om2*dc_norm(k,nres+j)))*dscj_inv
24808 !c! & + ( dFdR * pom )
24810 gvdwc_scpho(k,i) = gvdwc_scpho(k,i) &
24811 - (( dFdR + gg(k) ) * ertail(k))
24812 !c! & - ( dFdR * ertail(k))
24814 gvdwc_scpho(k,j) = gvdwc_scpho(k,j) &
24815 + (( dFdR + gg(k) ) * ertail(k))/2.0
24817 gvdwc_scpho(k,j+1) = gvdwc_scpho(k,j+1) &
24818 + (( dFdR + gg(k) ) * ertail(k))/2.0
24820 !c! & + ( dFdR * ertail(k))
24824 !c! write (*,*) "Gvdwc(",k,",",i,")=", gvdwc(k,i)
24825 !c! write (*,*) "Gvdwc(",k,",",j,")=", gvdwc(k,j)
24826 ! alphapol1 = alphapol_scpho(itypi)
24827 if (wqq_scpho(itypi).ne.0.0) then
24828 Qij=wqq_scpho(itypi)/eps_in
24829 alpha_sco=1.d0/alphi_scpho(itypi)
24831 Ecl = (332.0d0 * Qij*dexp(-Rhead*alpha_sco)) / Rhead
24832 !c! derivative of Ecl is Gcl...
24833 dGCLdR = (-332.0d0 * Qij*dexp(-Rhead*alpha_sco)* &
24834 (Rhead*alpha_sco+1) ) / Rhead_sq
24835 if (energy_dec) write(iout,*) "ECL",ECL,Rhead,1.0/rij
24836 else if (wqdip_scpho(2,itypi).gt.0.0d0) then
24837 w1 = wqdip_scpho(1,itypi)
24838 w2 = wqdip_scpho(2,itypi)
24841 ! pis = sig0head_scbase(itypi,itypj)
24842 ! eps_head = epshead_scbase(itypi,itypj)
24843 !c!-------------------------------------------------------------------
24845 !c! R1 = dsqrt((Rtail**2)+((dtail(1,itypi,itypj)
24846 !c! & +dhead(1,1,itypi,itypj))**2))
24847 !c! R2 = dsqrt((Rtail**2)+((dtail(2,itypi,itypj)
24848 !c! & +dhead(2,1,itypi,itypj))**2))
24850 !c!-------------------------------------------------------------------
24853 hawk = w2 * (1.0d0 - sqom2)
24854 Ecl = sparrow / Rhead**2.0d0 &
24855 - hawk / Rhead**4.0d0
24856 !c!-------------------------------------------------------------------
24857 if (energy_dec) write(iout,*) "ECLdipdip",ECL,Rhead,&
24860 !c! derivative of ecl is Gcl
24862 dGCLdR = - 2.0d0 * sparrow / Rhead**3.0d0 &
24863 + 4.0d0 * hawk / Rhead**5.0d0
24865 dGCLdOM1 = (w1) / (Rhead**2.0d0)
24867 dGCLdOM2 = (2.0d0 * w2 * om2) / (Rhead ** 4.0d0)
24870 !c--------------------------------------------------------------------
24871 !c Polarization energy
24875 !c! Calculate head-to-tail distances tail is center of side-chain
24876 R1=R1+((c(k,j)+c(k,j+1))/2.0-chead(k,1))**2
24881 alphapol1 = alphapol_scpho(itypi)
24883 MomoFac1 = (1.0d0 - chi2 * sqom1)
24884 RR1 = R1 * R1 / MomoFac1
24885 ee1 = exp(-( RR1 / (4.0d0 * a12sq) ))
24886 ! print *,"ee1",ee1,a12sq,alphapol1,eps_inout_fac
24887 fgb1 = sqrt( RR1 + a12sq * ee1)
24888 ! eps_inout_fac=0.0d0
24889 epol = 332.0d0 * eps_inout_fac * (( alphapol1 / fgb1 )**4.0d0)
24890 ! derivative of Epol is Gpol...
24891 dPOLdFGB1 = -(1328.0d0 * eps_inout_fac * alphapol1 ** 4.0d0) &
24893 dFGBdR1 = ( (R1 / MomoFac1) &
24894 * ( 2.0d0 - (0.5d0 * ee1) ) ) &
24896 dFGBdOM2 = (((R1 * R1 * chi1 * om2) / (MomoFac1 * MomoFac1)) &
24897 * (2.0d0 - 0.5d0 * ee1) ) &
24899 dPOLdR1 = dPOLdFGB1 * dFGBdR1
24902 dFGBdOM1 = (((R1 * R1 * chi2 * om1) / (MomoFac1 * MomoFac1)) &
24903 * (2.0d0 - 0.5d0 * ee1) ) &
24906 dPOLdOM1 = dPOLdFGB1 * dFGBdOM1
24909 erhead(k) = Rhead_distance(k)/Rhead
24910 erhead_tail(k,1) = (((c(k,j)+c(k,j+1))/2.0-chead(k,1))/R1)
24913 erdxi = scalar( erhead(1), dC_norm(1,i+nres) )
24914 erdxj = scalar( erhead(1), dC_norm(1,j) )
24915 bat = scalar( erhead_tail(1,1), dC_norm(1,i+nres) )
24917 federmaus = scalar(erhead_tail(1,1),dC_norm(1,j))
24918 facd1 = d1i * vbld_inv(i+nres)
24919 facd2 = d1j * vbld_inv(j)
24920 ! facd4 = dtail(2,itypi,itypj) * vbld_inv(j+nres)
24923 hawk = (erhead_tail(k,1) + &
24924 facd1 * (erhead_tail(k,1) - bat * dC_norm(k,i+nres)))
24927 ! if (i.eq.3) print *,'decl1',dGCLdR,dPOLdR1,gvdwc_scpho(k,i),i,&
24928 ! pom,(erhead_tail(k,1))
24930 ! print *,'decl',dGCLdR,dPOLdR1,gvdwc_scpho(k,i)
24931 pom = erhead(k)+facd1*(erhead(k)-erdxi*dC_norm(k,i+nres))
24932 gvdwx_scpho(k,i) = gvdwx_scpho(k,i) &
24934 - dPOLdR1 * (erhead_tail(k,1))
24937 pom = erhead(k)+facd2*(erhead(k)-erdxj*dC_norm(k,j))
24938 ! gvdwx_scpho(k,j) = gvdwx_scpho(k,j) &
24940 ! + dPOLdR1 * (erhead_tail(k,1))
24944 gvdwc_scpho(k,i) = gvdwc_scpho(k,i) &
24945 - dGCLdR * erhead(k) &
24946 - dPOLdR1 * erhead_tail(k,1)
24947 ! & - dGLJdR * erhead(k)
24949 gvdwc_scpho(k,j) = gvdwc_scpho(k,j) &
24950 + (dGCLdR * erhead(k) &
24951 + dPOLdR1 * erhead_tail(k,1))/2.0
24952 gvdwc_scpho(k,j+1) = gvdwc_scpho(k,j+1) &
24953 + (dGCLdR * erhead(k) &
24954 + dPOLdR1 * erhead_tail(k,1))/2.0
24956 ! & + dGLJdR * erhead(k)
24957 ! if (i.eq.3) print *,'decl2',dGCLdR,dPOLdR1,gvdwc_scpho(k,i),i
24960 ! if (i.eq.3) print *,i,j,evdwij,epol,Fcav,ECL
24961 if (energy_dec) write (iout,'(a22,2i5,4f8.3,f16.3)'), &
24962 "escpho:evdw,pol,cav,CL",i,j,evdwij,epol,Fcav,ECL,escpho
24963 escpho=escpho+evdwij+epol+Fcav+ECL
24970 end subroutine eprot_sc_phosphate
24971 SUBROUTINE sc_grad_scpho
24974 real (kind=8) :: dcosom1(3),dcosom2(3)
24976 eps2der * eps2rt_om1 &
24977 - 2.0D0 * alf1 * eps3der &
24978 + sigder * sigsq_om1 &
24984 eps2der * eps2rt_om2 &
24985 + 2.0D0 * alf2 * eps3der &
24986 + sigder * sigsq_om2 &
24992 evdwij * eps1_om12 &
24993 + eps2der * eps2rt_om12 &
24994 - 2.0D0 * alf12 * eps3der &
24995 + sigder *sigsq_om12 &
25000 ! print *,eom1,eom2,eom12,om12,i,j,"eom1,2,12",erij(1),erij(2),erij(3)
25001 ! if (i.eq.30) print *,gvdwc_scpho(k,i),- gg(k),&
25002 ! (-eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,i)))&
25004 ! print *,dsci_inv,dscj_inv,dc_norm(2,nres+j),dc_norm(2,nres+i),&
25005 ! gg(1),gg(2),"rozne"
25007 dcosom1(k) = rij * (dc_norm(k,nres+i) - om1 * erij(k))
25008 dcosom2(k) = rij * (dc_norm(k,j) - om2 * erij(k))
25009 gg(k) = gg(k) + eom1 * dcosom1(k) + eom2 * dcosom2(k)
25010 gvdwc_scpho(k,j)= gvdwc_scpho(k,j) +0.5*( gg(k)) &
25011 + (-eom12*(dc_norm(k,nres+i)-om12*dc_norm(k,j)))&
25013 - (eom2*(erij(k)-om2*dc_norm(k,j)))*dscj_inv*2.0
25014 gvdwc_scpho(k,j+1)= gvdwc_scpho(k,j+1) +0.5*( gg(k)) &
25015 - (-eom12*(dc_norm(k,nres+i)-om12*dc_norm(k,j))) &
25017 + (eom2*(erij(k)-om2*dc_norm(k,j)))*dscj_inv*2.0
25018 gvdwx_scpho(k,i)= gvdwx_scpho(k,i) - gg(k) &
25019 + (eom12*(dc_norm(k,j)-om12*dc_norm(k,nres+i)) &
25020 + eom1*(erij(k)-om1*dc_norm(k,nres+i)))*dsci_inv
25022 ! print *,eom12,eom2,om12,om2
25023 !eom12*(-dc_norm(k,i)/2.0-om12*dc_norm(k,nres+j)),&
25024 ! (eom2*(erij(k)-om2*dc_norm(k,nres+j)))
25025 ! gvdwx_scpho(k,j)= gvdwx_scpho(k,j) + gg(k) &
25026 ! + (eom12*(dc_norm(k,i)-om12*dc_norm(k,nres+j))&
25027 ! + eom2*(erij(k)-om2*dc_norm(k,nres+j)))*dscj_inv
25028 gvdwc_scpho(k,i)=gvdwc_scpho(k,i)-gg(k)
25031 END SUBROUTINE sc_grad_scpho
25032 subroutine eprot_pep_phosphate(epeppho)
25034 ! implicit real*8 (a-h,o-z)
25035 ! include 'DIMENSIONS'
25036 ! include 'COMMON.GEO'
25037 ! include 'COMMON.VAR'
25038 ! include 'COMMON.LOCAL'
25039 ! include 'COMMON.CHAIN'
25040 ! include 'COMMON.DERIV'
25041 ! include 'COMMON.NAMES'
25042 ! include 'COMMON.INTERACT'
25043 ! include 'COMMON.IOUNITS'
25044 ! include 'COMMON.CALC'
25045 ! include 'COMMON.CONTROL'
25046 ! include 'COMMON.SBRIDGE'
25048 !el local variables
25049 integer :: iint,itypi,itypi1,itypj,subchap
25050 real(kind=8) :: rrij,xi,yi,zi,sig,rij_shift,fac,e1,e2,sigm,epsi
25051 real(kind=8) :: evdw,sig0ij
25052 real(kind=8) :: xj_safe,yj_safe,zj_safe,xj_temp,yj_temp,zj_temp,&
25053 dist_temp, dist_init,aa,bb,ssgradlipi,ssgradlipj, &
25054 sslipi,sslipj,faclip
25056 real(kind=8) :: fracinbuf
25057 real (kind=8) :: epeppho
25058 real (kind=8),dimension(4):: ener
25059 real(kind=8) :: b1,b2,b3,b4,egb,eps_in,eps_inout_fac,eps_out
25060 real(kind=8) :: ECL,Elj,Equad,Epol,eheadtail,rhead,dGCLOM2,&
25061 sqom1,sqom2,sqom12,c1,c2,pom,Lambf,sparrow,&
25062 Chif,ChiLambf,bat,eagle,top,bot,botsq,Fcav,dtop,dFdR,dFdOM1,&
25063 dFdOM2,w1,w2,dGCLdR,dFdL,dFdOM12,dbot ,&
25064 r1,eps_head,alphapol1,pis,facd2,d2,facd1,d1,erdxj,erdxi,federmaus,&
25065 dPOLdR1,dFGBdOM2,dFGBdR1,dPOLdFGB1,RR1,MomoFac1,hawk,d1i,d1j,&
25066 sig1,sig2,chis12,chis2,ee1,fgb1,a12sq,chis1,Rhead_sq,Qij,dFGBdOM1
25067 real(kind=8),dimension(3,2)::chead,erhead_tail
25068 real(kind=8),dimension(3) :: Rhead_distance,ertail,erhead
25070 real (kind=8) :: dcosom1(3),dcosom2(3)
25072 ! do i=1,nres_molec(1)
25073 do i=ibond_start,ibond_end
25074 if (itype(i,1).eq.ntyp1_molec(1)) cycle
25076 dsci_inv = vbld_inv(i+1)/2.0
25080 xi=(c(1,i)+c(1,i+1))/2.0
25081 yi=(c(2,i)+c(2,i+1))/2.0
25082 zi=(c(3,i)+c(3,i+1))/2.0
25083 call to_box(xi,yi,zi)
25085 do j=nres_molec(1)+1,nres_molec(2)+nres_molec(1)-1
25087 if ((itype(j,2).eq.ntyp1_molec(2)).or.&
25088 (itype(j+1,2).eq.ntyp1_molec(2))) cycle
25089 xj=(c(1,j)+c(1,j+1))/2.0
25090 yj=(c(2,j)+c(2,j+1))/2.0
25091 zj=(c(3,j)+c(3,j+1))/2.0
25092 call to_box(xj,yj,zj)
25093 xj=boxshift(xj-xi,boxxsize)
25094 yj=boxshift(yj-yi,boxysize)
25095 zj=boxshift(zj-zi,boxzsize)
25097 dist_init=xj**2+yj**2+zj**2
25098 rrij = 1.0D0 / ( xj*xj + yj*yj + zj*zj)
25100 dxj = dc_norm( 1,j )
25101 dyj = dc_norm( 2,j )
25102 dzj = dc_norm( 3,j )
25103 dscj_inv = vbld_inv(j+1)/2.0
25105 sig0ij = sigma_peppho
25108 chi12 = chi1 * chi2
25111 chip12 = chip1 * chip2
25114 chis12 = chis1 * chis2
25115 sig1 = sigmap1_peppho
25116 sig2 = sigmap2_peppho
25117 ! write (*,*) "sig1 = ", sig1
25118 ! write (*,*) "sig1 = ", sig1
25119 ! write (*,*) "sig2 = ", sig2
25120 ! alpha factors from Fcav/Gcav
25124 b1 = alphasur_peppho(1)
25126 b2 = alphasur_peppho(2)
25127 b3 = alphasur_peppho(3)
25128 b4 = alphasur_peppho(4)
25150 fac = rij_shift**expon
25151 c1 = fac * fac * aa_peppho
25153 c2 = fac * bb_peppho
25156 ! Now cavity....................
25157 eagle = dsqrt(1.0/rij_shift)
25158 top = b1 * ( eagle + b2 * 1.0/rij_shift - b3 )
25159 bot = 1.0d0 + b4 * (1.0/rij_shift ** 12.0d0)
25162 dtop = b1 * ((1.0/ (2.0d0 * eagle)) + (b2))
25163 dbot = 12.0d0 * b4 * (1.0/rij_shift) ** 11.0d0
25164 dFdR = ((dtop * bot - top * dbot) / botsq)
25165 w1 = wqdip_peppho(1)
25166 w2 = wqdip_peppho(2)
25169 ! pis = sig0head_scbase(itypi,itypj)
25170 ! eps_head = epshead_scbase(itypi,itypj)
25171 !c!-------------------------------------------------------------------
25173 !c! R1 = dsqrt((Rtail**2)+((dtail(1,itypi,itypj)
25174 !c! & +dhead(1,1,itypi,itypj))**2))
25175 !c! R2 = dsqrt((Rtail**2)+((dtail(2,itypi,itypj)
25176 !c! & +dhead(2,1,itypi,itypj))**2))
25178 !c!-------------------------------------------------------------------
25181 hawk = w2 * (1.0d0 - sqom1)
25182 Ecl = sparrow * rij_shift**2.0d0 &
25183 - hawk * rij_shift**4.0d0
25184 !c!-------------------------------------------------------------------
25185 !c! derivative of ecl is Gcl
25188 dGCLdR = - 2.0d0 * sparrow * rij_shift**3.0d0 &
25189 + 4.0d0 * hawk * rij_shift**5.0d0
25191 dGCLdOM1 = (w1) * (rij_shift**2.0d0)
25193 dGCLdOM2 = (2.0d0 * w2 * om1) * (rij_shift ** 4.0d0)
25194 eom1 = dGCLdOM1+dGCLdOM2
25197 fac = -expon * (c1 + evdwij) * rij_shift+dFdR+dGCLdR
25203 gvdwc_peppho(k,j) = gvdwc_peppho(k,j) +gg(k)/2.0
25204 gvdwc_peppho(k,j+1) = gvdwc_peppho(k,j+1) +gg(k)/2.0
25205 gvdwc_peppho(k,i) = gvdwc_peppho(k,i) -gg(k)/2.0
25206 gvdwc_peppho(k,i+1) = gvdwc_peppho(k,i+1) -gg(k)/2.0
25211 dcosom1(k) = rij* (dc_norm(k,i) - om1 * erij(k))
25212 dcosom2(k) = rij* (dc_norm(k,j) - om2 * erij(k))
25213 gg(k) = gg(k) + eom1 * dcosom1(k)! + eom2 * dcosom2(k)
25214 gvdwc_peppho(k,j)= gvdwc_peppho(k,j) +0.5*( gg(k)) !&
25215 ! - (eom2*(erij(k)-om2*dc_norm(k,j)))*dscj_inv*2.0
25216 gvdwc_peppho(k,j+1)= gvdwc_peppho(k,j+1) +0.5*( gg(k)) !&
25217 ! + (eom2*(erij(k)-om2*dc_norm(k,j)))*dscj_inv*2.0
25218 gvdwc_peppho(k,i)= gvdwc_peppho(k,i) -0.5*( gg(k)) &
25219 - (eom1*(erij(k)-om1*dc_norm(k,i)))*dsci_inv*2.0
25220 gvdwc_peppho(k,i+1)= gvdwc_peppho(k,i+1) - 0.5*( gg(k)) &
25221 + (eom1*(erij(k)-om1*dc_norm(k,i)))*dsci_inv*2.0
25223 epeppho=epeppho+evdwij+Fcav+ECL
25224 ! print *,i,j,evdwij,Fcav,ECL,rij_shift
25227 end subroutine eprot_pep_phosphate
25228 !!!!!!!!!!!!!!!!-------------------------------------------------------------
25229 subroutine emomo(evdw)
25232 ! implicit real*8 (a-h,o-z)
25233 ! include 'DIMENSIONS'
25234 ! include 'COMMON.GEO'
25235 ! include 'COMMON.VAR'
25236 ! include 'COMMON.LOCAL'
25237 ! include 'COMMON.CHAIN'
25238 ! include 'COMMON.DERIV'
25239 ! include 'COMMON.NAMES'
25240 ! include 'COMMON.INTERACT'
25241 ! include 'COMMON.IOUNITS'
25242 ! include 'COMMON.CALC'
25243 ! include 'COMMON.CONTROL'
25244 ! include 'COMMON.SBRIDGE'
25246 !el local variables
25247 integer :: iint,itypi1,subchap,isel
25248 real(kind=8) :: rrij,xi,yi,zi,sig,rij_shift,e1,e2,sigm,epsi
25249 real(kind=8) :: evdw,aa,bb
25250 real(kind=8) :: xj_safe,yj_safe,zj_safe,xj_temp,yj_temp,zj_temp,&
25251 dist_temp, dist_init,ssgradlipi,ssgradlipj, &
25252 sslipi,sslipj,faclip,alpha_sco
25254 real(kind=8) :: fracinbuf
25255 real (kind=8) :: escpho
25256 real (kind=8),dimension(4):: ener
25257 real(kind=8) :: b1,b2,egb
25258 real(kind=8) :: Fisocav,ECL,Elj,Equad,Epol,eheadtail,&
25260 Chif,ChiLambf,Fcav,dFdR,dFdOM1,&
25261 dFdOM2,dFdL,dFdOM12,&
25264 ! real(kind=8),dimension(3,2)::erhead_tail
25265 ! real(kind=8),dimension(3) :: Rhead_distance,ertail,erhead,Rtail_distance
25266 real(kind=8) :: facd4, adler, Fgb, facd3
25267 integer troll,jj,istate
25268 real (kind=8) :: dcosom1(3),dcosom2(3)
25272 ! print *,"EVDW KURW",evdw,nres
25273 do i=iatsc_s,iatsc_e
25274 ! print *,"I am in EVDW",i
25275 itypi=iabs(itype(i,1))
25276 ! if (i.ne.47) cycle
25277 if (itypi.eq.ntyp1) cycle
25278 itypi1=iabs(itype(i+1,1))
25282 call to_box(xi,yi,zi)
25283 call lipid_layer(xi,yi,zi,sslipi,ssgradlipi)
25285 ! print *, sslipi,ssgradlipi
25286 dxi=dc_norm(1,nres+i)
25287 dyi=dc_norm(2,nres+i)
25288 dzi=dc_norm(3,nres+i)
25289 ! dsci_inv=dsc_inv(itypi)
25290 dsci_inv=vbld_inv(i+nres)
25291 ! write (iout,*) "i",i,dsc_inv(itypi),dsci_inv,1.0d0/vbld(i+nres)
25292 ! write (iout,*) "dcnori",dxi*dxi+dyi*dyi+dzi*dzi
25294 ! Calculate SC interaction energy.
25296 do iint=1,nint_gr(i)
25297 do j=istart(i,iint),iend(i,iint)
25298 ! print *,"JA PIER",i,j,iint,istart(i,iint),iend(i,iint)
25299 IF (dyn_ss_mask(i).and.dyn_ss_mask(j)) THEN
25300 call dyn_ssbond_ene(i,j,evdwij)
25302 if (energy_dec) write (iout,'(a6,2i5,0pf7.3,a3)') &
25303 'evdw',i,j,evdwij,' ss'
25304 ! if (energy_dec) write (iout,*) &
25305 ! 'evdw',i,j,evdwij,' ss'
25306 do k=j+1,iend(i,iint)
25307 !C search over all next residues
25308 if (dyn_ss_mask(k)) then
25309 !C check if they are cysteins
25310 !C write(iout,*) 'k=',k
25312 !c write(iout,*) "PRZED TRI", evdwij
25313 ! evdwij_przed_tri=evdwij
25314 call triple_ssbond_ene(i,j,k,evdwij)
25315 !c if(evdwij_przed_tri.ne.evdwij) then
25316 !c write (iout,*) "TRI:", evdwij, evdwij_przed_tri
25319 !c write(iout,*) "PO TRI", evdwij
25320 !C call the energy function that removes the artifical triple disulfide
25321 !C bond the soubroutine is located in ssMD.F
25323 if (energy_dec) write (iout,'(a6,2i5,0pf7.3,a3)') &
25324 'evdw',i,j,evdwij,'tss'
25325 endif!dyn_ss_mask(k)
25329 itypj=iabs(itype(j,1))
25330 if (itypj.eq.ntyp1) cycle
25331 CALL elgrad_init(eheadtail,Egb,Ecl,Elj,Equad,Epol)
25333 ! if (j.ne.78) cycle
25334 ! dscj_inv=dsc_inv(itypj)
25335 dscj_inv=vbld_inv(j+nres)
25339 call to_box(xj,yj,zj)
25340 call lipid_layer(xj,yj,zj,sslipj,ssgradlipj)
25341 ! write(iout,*) "KRUWA", i,j
25342 aa=aa_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0 &
25343 +aa_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
25344 bb=bb_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0 &
25345 +bb_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
25346 xj=boxshift(xj-xi,boxxsize)
25347 yj=boxshift(yj-yi,boxysize)
25348 zj=boxshift(zj-zi,boxzsize)
25349 dxj = dc_norm( 1, nres+j )
25350 dyj = dc_norm( 2, nres+j )
25351 dzj = dc_norm( 3, nres+j )
25352 ! print *,i,j,itypi,itypj
25355 ! BetaT = 1.0d0 / (298.0d0 * Rb)
25357 !1! sig0ij = sigma_scsc( itypi,itypj )
25362 ! not used by momo potential, but needed by sc_angular which is shared
25363 ! by all energy_potential subroutines
25367 a12sq = rborn(itypi,itypj) * rborn(itypj,itypi)
25368 ! a12sq = a12sq * a12sq
25369 ! charge of amino acid itypi is...
25370 chis1 = chis(itypi,itypj)
25371 chis2 = chis(itypj,itypi)
25372 chis12 = chis1 * chis2
25373 sig1 = sigmap1(itypi,itypj)
25374 sig2 = sigmap2(itypi,itypj)
25375 ! write (*,*) "sig1 = ", sig1
25378 ! chis12 = chis1 * chis2
25381 ! write (*,*) "sig2 = ", sig2
25382 ! alpha factors from Fcav/Gcav
25383 b1cav = alphasur(1,itypi,itypj)
25385 b2cav = alphasur(2,itypi,itypj)
25386 b3cav = alphasur(3,itypi,itypj)
25387 b4cav = alphasur(4,itypi,itypj)
25388 ! used to determine whether we want to do quadrupole calculations
25389 eps_in = epsintab(itypi,itypj)
25390 if (eps_in.eq.0.0) eps_in=1.0
25392 eps_inout_fac = ( (1.0d0/eps_in) - (1.0d0/eps_out))
25394 ! dtail(1,itypi,itypj)=0.0
25395 ! dtail(2,itypi,itypj)=0.0
25398 ctail(k,1)=c(k,i+nres)-dtail(1,itypi,itypj)*dc_norm(k,nres+i)
25399 ctail(k,2)=c(k,j+nres)-dtail(2,itypi,itypj)*dc_norm(k,nres+j)
25401 !c! tail distances will be themselves usefull elswhere
25402 !c1 (in Gcav, for example)
25403 Rtail_distance(1) = ctail( 1, 2 ) - ctail( 1,1 )
25404 Rtail_distance(2) = ctail( 2, 2 ) - ctail( 2,1 )
25405 Rtail_distance(3) = ctail( 3, 2 ) - ctail( 3,1 )
25407 (Rtail_distance(1)*Rtail_distance(1)) &
25408 + (Rtail_distance(2)*Rtail_distance(2)) &
25409 + (Rtail_distance(3)*Rtail_distance(3)))
25411 ! write (*,*) "eps_inout_fac = ", eps_inout_fac
25412 !-------------------------------------------------------------------
25413 ! tail location and distance calculations
25414 d1 = dhead(1, 1, itypi, itypj)
25415 d2 = dhead(2, 1, itypi, itypj)
25418 ! location of polar head is computed by taking hydrophobic centre
25419 ! and moving by a d1 * dc_norm vector
25420 ! see unres publications for very informative images
25421 chead(k,1) = c(k, i+nres) + d1 * dc_norm(k, i+nres)
25422 chead(k,2) = c(k, j+nres) + d2 * dc_norm(k, j+nres)
25424 ! Rsc_distance(k) = dabs(c(k, i+nres) - c(k, j+nres))
25425 ! Rsc(k) = Rsc_distance(k) * Rsc_distance(k)
25426 Rhead_distance(k) = chead(k,2) - chead(k,1)
25428 ! pitagoras (root of sum of squares)
25430 (Rhead_distance(1)*Rhead_distance(1)) &
25431 + (Rhead_distance(2)*Rhead_distance(2)) &
25432 + (Rhead_distance(3)*Rhead_distance(3)))
25433 !-------------------------------------------------------------------
25434 ! zero everything that should be zero'ed
25452 dscj_inv = vbld_inv(j+nres)
25453 ! print *,i,j,dscj_inv,dsci_inv
25454 ! rij holds 1/(distance of Calpha atoms)
25455 rrij = 1.0D0 / ( xj*xj + yj*yj + zj*zj)
25457 !----------------------------
25459 ! this should be in elgrad_init but om's are calculated by sc_angular
25460 ! which in turn is used by older potentials
25461 ! om = omega, sqom = om^2
25464 sqom12 = om12 * om12
25466 ! now we calculate EGB - Gey-Berne
25467 ! It will be summed up in evdwij and saved in evdw
25468 sigsq = 1.0D0 / sigsq
25469 sig = sig0ij * dsqrt(sigsq)
25470 ! rij_shift = 1.0D0 / rij - sig + sig0ij
25471 rij_shift = Rtail - sig + sig0ij
25472 IF (rij_shift.le.0.0D0) THEN
25476 sigder = -sig * sigsq
25477 rij_shift = 1.0D0 / rij_shift
25478 fac = rij_shift**expon
25479 c1 = fac * fac * aa_aq(itypi,itypj)
25480 ! print *,"ADAM",aa_aq(itypi,itypj)
25483 c2 = fac * bb_aq(itypi,itypj)
25485 evdwij = eps1 * eps2rt * eps3rt * ( c1 + c2 )
25486 eps2der = eps3rt * evdwij
25487 eps3der = eps2rt * evdwij
25488 ! evdwij = 4.0d0 * eps2rt * eps3rt * evdwij
25489 evdwij = eps2rt * eps3rt * evdwij
25491 ! IF (bb_aq(itypi,itypj).gt.0) THEN
25492 ! evdw_p = evdw_p + evdwij
25494 ! evdw_m = evdw_m + evdwij
25501 c1 = c1 * eps1 * eps2rt**2 * eps3rt**2
25502 fac = -expon * (c1 + evdwij) * rij_shift
25503 sigder = fac * sigder
25505 ! Calculate distance derivative
25509 ! if (b2.gt.0.0) then
25510 fac = chis1 * sqom1 + chis2 * sqom2 &
25511 - 2.0d0 * chis12 * om1 * om2 * om12
25512 ! we will use pom later in Gcav, so dont mess with it!
25513 pom = 1.0d0 - chis1 * chis2 * sqom12
25514 Lambf = (1.0d0 - (fac / pom))
25515 ! print *,"fac,pom",fac,pom,Lambf
25516 Lambf = dsqrt(Lambf)
25517 sparrow = 1.0d0 / dsqrt(sig1**2.0d0 + sig2**2.0d0)
25518 ! print *,"sig1,sig2",sig1,sig2,itypi,itypj
25519 ! write (*,*) "sparrow = ", sparrow
25520 Chif = Rtail * sparrow
25521 ! print *,"rij,sparrow",rij , sparrow
25522 ChiLambf = Chif * Lambf
25523 eagle = dsqrt(ChiLambf)
25524 bat = ChiLambf ** 11.0d0
25525 top = b1cav * ( eagle + b2cav * ChiLambf - b3cav )
25526 bot = 1.0d0 + b4cav * (ChiLambf ** 12.0d0)
25528 ! print *,top,bot,"bot,top",ChiLambf,Chif
25531 dtop = b1cav * ((Lambf / (2.0d0 * eagle)) + (b2cav * Lambf))
25532 dbot = 12.0d0 * b4cav * bat * Lambf
25533 dFdR = ((dtop * bot - top * dbot) / botsq) * sparrow
25535 dtop = b1cav * ((Chif / (2.0d0 * eagle)) + (b2cav * Chif))
25536 dbot = 12.0d0 * b4cav * bat * Chif
25537 eagle = Lambf * pom
25538 dFdOM1 = -(chis1 * om1 - chis12 * om2 * om12) / (eagle)
25539 dFdOM2 = -(chis2 * om2 - chis12 * om1 * om12) / (eagle)
25540 dFdOM12 = chis12 * (chis1 * om1 * om12 - om2) &
25541 * (chis2 * om2 * om12 - om1) / (eagle * pom)
25543 dFdL = ((dtop * bot - top * dbot) / botsq)
25545 dCAVdOM1 = dFdL * ( dFdOM1 )
25546 dCAVdOM2 = dFdL * ( dFdOM2 )
25547 dCAVdOM12 = dFdL * ( dFdOM12 )
25550 ertail(k) = Rtail_distance(k)/Rtail
25552 erdxi = scalar( ertail(1), dC_norm(1,i+nres) )
25553 erdxj = scalar( ertail(1), dC_norm(1,j+nres) )
25554 facd1 = dtail(1,itypi,itypj) * vbld_inv(i+nres)
25555 facd2 = dtail(2,itypi,itypj) * vbld_inv(j+nres)
25557 !c! write (*,*) "Gvdwc(",k,",",i,")=", gvdwc(k,i)
25558 !c! write (*,*) "Gvdwc(",k,",",j,")=", gvdwc(k,j)
25559 pom = ertail(k)-facd1*(ertail(k)-erdxi*dC_norm(k,i+nres))
25560 gvdwx(k,i) = gvdwx(k,i) &
25561 - (( dFdR + gg(k) ) * pom)
25562 !c! & - ( dFdR * pom )
25563 pom = ertail(k)-facd2*(ertail(k)-erdxj*dC_norm(k,j+nres))
25564 gvdwx(k,j) = gvdwx(k,j) &
25565 + (( dFdR + gg(k) ) * pom)
25566 !c! & + ( dFdR * pom )
25568 gvdwc(k,i) = gvdwc(k,i) &
25569 - (( dFdR + gg(k) ) * ertail(k))
25570 !c! & - ( dFdR * ertail(k))
25572 gvdwc(k,j) = gvdwc(k,j) &
25573 + (( dFdR + gg(k) ) * ertail(k))
25574 !c! & + ( dFdR * ertail(k))
25577 ! write (*,*) "Gvdwc(",k,",",i,")=", gvdwc(k,i)
25578 ! write (*,*) "Gvdwc(",k,",",j,")=", gvdwc(k,j)
25582 !c! Compute head-head and head-tail energies for each state
25584 isel = iabs(Qi) + iabs(Qj)
25585 ! double charge for Phophorylated! itype - 25,27,27
25586 ! if ((itype(i).eq.27).or.(itype(i).eq.26).or.(itype(i).eq.25)) then
25590 ! if ((itype(j).eq.27).or.(itype(j).eq.26).or.(itype(j).eq.25)) then
25596 IF (isel.eq.0) THEN
25597 !c! No charges - do nothing
25600 ELSE IF (isel.eq.4) THEN
25601 !c! Calculate dipole-dipole interactions
25604 ! eheadtail = 0.0d0
25606 ELSE IF (isel.eq.1 .and. iabs(Qi).eq.1) THEN
25607 !c! Charge-nonpolar interactions
25608 if ((itype(i,1).eq.27).or.(itype(i,1).eq.26).or.(itype(i,1).eq.25)) then
25612 if ((itype(j,1).eq.27).or.(itype(j,1).eq.26).or.(itype(j,1).eq.25)) then
25619 ! eheadtail = 0.0d0
25621 ELSE IF (isel.eq.1 .and. iabs(Qj).eq.1) THEN
25622 !c! Nonpolar-charge interactions
25623 if ((itype(i,1).eq.27).or.(itype(i,1).eq.26).or.(itype(i,1).eq.25)) then
25627 if ((itype(j,1).eq.27).or.(itype(j,1).eq.26).or.(itype(j,1).eq.25)) then
25634 ! eheadtail = 0.0d0
25636 ELSE IF (isel.eq.3 .and. icharge(itypj).eq.2) THEN
25637 !c! Charge-dipole interactions
25638 if ((itype(i,1).eq.27).or.(itype(i,1).eq.26).or.(itype(i,1).eq.25)) then
25642 if ((itype(j,1).eq.27).or.(itype(j,1).eq.26).or.(itype(j,1).eq.25)) then
25647 CALL eqd(ecl, elj, epol)
25648 eheadtail = ECL + elj + epol
25649 ! eheadtail = 0.0d0
25651 ELSE IF (isel.eq.3 .and. icharge(itypi).eq.2) THEN
25652 !c! Dipole-charge interactions
25653 if ((itype(i,1).eq.27).or.(itype(i,1).eq.26).or.(itype(i,1).eq.25)) then
25657 if ((itype(j,1).eq.27).or.(itype(j,1).eq.26).or.(itype(j,1).eq.25)) then
25661 CALL edq(ecl, elj, epol)
25662 eheadtail = ECL + elj + epol
25663 ! eheadtail = 0.0d0
25665 ELSE IF ((isel.eq.2.and. &
25666 iabs(Qi).eq.1).and. &
25667 nstate(itypi,itypj).eq.1) THEN
25668 !c! Same charge-charge interaction ( +/+ or -/- )
25669 if ((itype(i,1).eq.27).or.(itype(i,1).eq.26).or.(itype(i,1).eq.25)) then
25673 if ((itype(j,1).eq.27).or.(itype(j,1).eq.26).or.(itype(j,1).eq.25)) then
25678 CALL eqq(Ecl,Egb,Epol,Fisocav,Elj)
25679 eheadtail = ECL + Egb + Epol + Fisocav + Elj
25680 ! eheadtail = 0.0d0
25682 ELSE IF ((isel.eq.2.and. &
25683 iabs(Qi).eq.1).and. &
25684 nstate(itypi,itypj).ne.1) THEN
25685 !c! Different charge-charge interaction ( +/- or -/+ )
25686 if ((itype(i,1).eq.27).or.(itype(i,1).eq.26).or.(itype(i,1).eq.25)) then
25690 if ((itype(j,1).eq.27).or.(itype(j,1).eq.26).or.(itype(j,1).eq.25)) then
25695 CALL energy_quad(istate,eheadtail,Ecl,Egb,Epol,Fisocav,Elj,Equad)
25697 END IF ! this endif ends the "catch the gly-gly" at the beggining of Fcav
25698 evdw = evdw + Fcav + eheadtail
25700 IF (energy_dec) write (iout,'(2(1x,a3,i3),3f6.2,10f16.7)') &
25701 restyp(itype(i,1),1),i,restyp(itype(j,1),1),j,&
25702 1.0d0/rij,Rtail,Rhead,evdwij,Fcav,Ecl,Egb,Epol,Fisocav,Elj,&
25703 Equad,evdwij+Fcav+eheadtail,evdw
25704 ! evdw = evdw + Fcav + eheadtail
25706 iF (nstate(itypi,itypj).eq.1) THEN
25709 !c!-------------------------------------------------------------------
25714 !c write (iout,*) "Number of loop steps in EGB:",ind
25715 !c energy_dec=.false.
25716 ! print *,"EVDW KURW",evdw,nres
25719 END SUBROUTINE emomo
25720 !C------------------------------------------------------------------------------------
25721 SUBROUTINE eqq(Ecl,Egb,Epol,Fisocav,Elj)
25724 real (kind=8) :: facd3, facd4, federmaus, adler,&
25725 Ecl,Egb,Epol,Fisocav,Elj,Fgb,debkap
25727 !c! Epol and Gpol analytical parameters
25728 alphapol1 = alphapol(itypi,itypj)
25729 alphapol2 = alphapol(itypj,itypi)
25730 !c! Fisocav and Gisocav analytical parameters
25731 al1 = alphiso(1,itypi,itypj)
25732 al2 = alphiso(2,itypi,itypj)
25733 al3 = alphiso(3,itypi,itypj)
25734 al4 = alphiso(4,itypi,itypj)
25736 / dsqrt(sigiso1(itypi, itypj)**2.0d0 &
25737 + sigiso2(itypi,itypj)**2.0d0))
25739 pis = sig0head(itypi,itypj)
25740 eps_head = epshead(itypi,itypj)
25741 Rhead_sq = Rhead * Rhead
25742 !c! R1 - distance between head of ith side chain and tail of jth sidechain
25743 !c! R2 - distance between head of jth side chain and tail of ith sidechain
25747 !c! Calculate head-to-tail distances needed by Epol
25748 R1=R1+(ctail(k,2)-chead(k,1))**2
25749 R2=R2+(chead(k,2)-ctail(k,1))**2
25755 !c! R1 = dsqrt((Rtail**2)+((dtail(1,itypi,itypj)
25756 !c! & +dhead(1,1,itypi,itypj))**2))
25757 !c! R2 = dsqrt((Rtail**2)+((dtail(2,itypi,itypj)
25758 !c! & +dhead(2,1,itypi,itypj))**2))
25760 !c!-------------------------------------------------------------------
25761 !c! Coulomb electrostatic interaction
25762 Ecl = (332.0d0 * Qij) / Rhead
25763 !c! derivative of Ecl is Gcl...
25764 dGCLdR = (-332.0d0 * Qij ) / Rhead_sq
25768 ee0 = dexp(-( Rhead_sq ) / (4.0d0 * a12sq))
25769 Fgb = sqrt( ( Rhead_sq ) + a12sq * ee0)
25770 debkap=debaykap(itypi,itypj)
25771 Egb = -(332.0d0 * Qij *&
25772 (1.0/eps_in-dexp(-debkap*Fgb)/eps_out)) / Fgb
25773 ! print *,"EGB WTF",Qij,eps_inout_fac,Fgb,itypi,itypj,eps_in,eps_out
25774 !c! Derivative of Egb is Ggb...
25775 dGGBdFGB = -(-332.0d0 * Qij * &
25776 (1.0/eps_in-dexp(-debkap*Fgb)/eps_out))/(Fgb*Fgb)&
25778 (dexp(-debkap*Fgb)*debkap/eps_out))/ Fgb
25779 dFGBdR = ( Rhead * ( 2.0d0 - (0.5d0 * ee0) ) )/ ( 2.0d0 * Fgb )
25780 dGGBdR = dGGBdFGB * dFGBdR
25781 !c!-------------------------------------------------------------------
25782 !c! Fisocav - isotropic cavity creation term
25783 !c! or "how much energy it costs to put charged head in water"
25785 top = al1 * (dsqrt(pom) + al2 * pom - al3)
25786 bot = (1.0d0 + al4 * pom**12.0d0)
25788 FisoCav = top / bot
25789 ! write (*,*) "Rhead = ",Rhead
25790 ! write (*,*) "csig = ",csig
25791 ! write (*,*) "pom = ",pom
25792 ! write (*,*) "al1 = ",al1
25793 ! write (*,*) "al2 = ",al2
25794 ! write (*,*) "al3 = ",al3
25795 ! write (*,*) "al4 = ",al4
25796 ! write (*,*) "top = ",top
25797 ! write (*,*) "bot = ",bot
25798 !c! Derivative of Fisocav is GCV...
25799 dtop = al1 * ((1.0d0 / (2.0d0 * dsqrt(pom))) + al2)
25800 dbot = 12.0d0 * al4 * pom ** 11.0d0
25801 dGCVdR = ((dtop * bot - top * dbot) / botsq) * csig
25802 !c!-------------------------------------------------------------------
25804 !c! Polarization energy - charged heads polarize hydrophobic "neck"
25805 MomoFac1 = (1.0d0 - chi1 * sqom2)
25806 MomoFac2 = (1.0d0 - chi2 * sqom1)
25807 RR1 = ( R1 * R1 ) / MomoFac1
25808 RR2 = ( R2 * R2 ) / MomoFac2
25809 ee1 = exp(-( RR1 / (4.0d0 * a12sq) ))
25810 ee2 = exp(-( RR2 / (4.0d0 * a12sq) ))
25811 fgb1 = sqrt( RR1 + a12sq * ee1 )
25812 fgb2 = sqrt( RR2 + a12sq * ee2 )
25813 epol = 332.0d0 * eps_inout_fac * ( &
25814 (( alphapol1 / fgb1 )**4.0d0)+((alphapol2/fgb2) ** 4.0d0 ))
25816 dPOLdFGB1 = -(1328.0d0 * eps_inout_fac * alphapol1 ** 4.0d0)&
25818 dPOLdFGB2 = -(1328.0d0 * eps_inout_fac * alphapol2 ** 4.0d0)&
25820 dFGBdR1 = ( (R1 / MomoFac1)* ( 2.0d0 - (0.5d0 * ee1) ) )&
25822 dFGBdR2 = ( (R2 / MomoFac2)* ( 2.0d0 - (0.5d0 * ee2) ) )&
25824 dFGBdOM2 = (((R1 * R1 * chi1 * om2) / (MomoFac1 * MomoFac1))&
25825 * ( 2.0d0 - 0.5d0 * ee1) ) / ( 2.0d0 * fgb1 )
25826 dFGBdOM1 = (((R2 * R2 * chi2 * om1) / (MomoFac2 * MomoFac2))&
25827 * ( 2.0d0 - 0.5d0 * ee2) ) / ( 2.0d0 * fgb2 )
25828 dPOLdR1 = dPOLdFGB1 * dFGBdR1
25829 !c! dPOLdR1 = 0.0d0
25830 dPOLdR2 = dPOLdFGB2 * dFGBdR2
25831 !c! dPOLdR2 = 0.0d0
25832 dPOLdOM1 = dPOLdFGB2 * dFGBdOM1
25833 !c! dPOLdOM1 = 0.0d0
25834 dPOLdOM2 = dPOLdFGB1 * dFGBdOM2
25835 !c! dPOLdOM2 = 0.0d0
25836 !c!-------------------------------------------------------------------
25838 !c! Lennard-Jones 6-12 interaction between heads
25839 pom = (pis / Rhead)**6.0d0
25840 Elj = 4.0d0 * eps_head * pom * (pom-1.0d0)
25841 !c! derivative of Elj is Glj
25842 dGLJdR = 4.0d0 * eps_head*(((-12.0d0*pis**12.0d0)/(Rhead**13.0d0))&
25843 + (( 6.0d0*pis**6.0d0) /(Rhead**7.0d0)))
25844 !c!-------------------------------------------------------------------
25845 !c! Return the results
25846 !c! These things do the dRdX derivatives, that is
25847 !c! allow us to change what we see from function that changes with
25848 !c! distance to function that changes with LOCATION (of the interaction
25851 erhead(k) = Rhead_distance(k)/Rhead
25852 erhead_tail(k,1) = ((ctail(k,2)-chead(k,1))/R1)
25853 erhead_tail(k,2) = ((chead(k,2)-ctail(k,1))/R2)
25856 erdxi = scalar( erhead(1), dC_norm(1,i+nres) )
25857 erdxj = scalar( erhead(1), dC_norm(1,j+nres) )
25858 bat = scalar( erhead_tail(1,1), dC_norm(1,i+nres) )
25859 federmaus = scalar(erhead_tail(1,1),dC_norm(1,j+nres))
25860 eagle = scalar( erhead_tail(1,2), dC_norm(1,j+nres) )
25861 adler = scalar( erhead_tail(1,2), dC_norm(1,i+nres) )
25862 facd1 = d1 * vbld_inv(i+nres)
25863 facd2 = d2 * vbld_inv(j+nres)
25864 facd3 = dtail(1,itypi,itypj) * vbld_inv(i+nres)
25865 facd4 = dtail(2,itypi,itypj) * vbld_inv(j+nres)
25867 !c! Now we add appropriate partial derivatives (one in each dimension)
25869 hawk = (erhead_tail(k,1) + &
25870 facd1 * (erhead_tail(k,1) - bat * dC_norm(k,i+nres)))
25871 condor = (erhead_tail(k,2) + &
25872 facd2 * (erhead_tail(k,2) - eagle * dC_norm(k,j+nres)))
25874 pom = erhead(k)+facd1*(erhead(k)-erdxi*dC_norm(k,i+nres))
25875 gvdwx(k,i) = gvdwx(k,i) &
25880 - dPOLdR2 * (erhead_tail(k,2)&
25881 -facd3 * (erhead_tail(k,2) - adler * dC_norm(k,i+nres)))&
25884 pom = erhead(k)+facd2*(erhead(k)-erdxj*dC_norm(k,j+nres))
25885 gvdwx(k,j) = gvdwx(k,j)+ dGCLdR * pom&
25886 + dGGBdR * pom+ dGCVdR * pom&
25887 + dPOLdR1 * (erhead_tail(k,1)&
25888 -facd4 * (erhead_tail(k,1) - federmaus * dC_norm(k,j+nres)))&
25889 + dPOLdR2 * condor + dGLJdR * pom
25891 gvdwc(k,i) = gvdwc(k,i) &
25892 - dGCLdR * erhead(k)&
25893 - dGGBdR * erhead(k)&
25894 - dGCVdR * erhead(k)&
25895 - dPOLdR1 * erhead_tail(k,1)&
25896 - dPOLdR2 * erhead_tail(k,2)&
25897 - dGLJdR * erhead(k)
25899 gvdwc(k,j) = gvdwc(k,j) &
25900 + dGCLdR * erhead(k) &
25901 + dGGBdR * erhead(k) &
25902 + dGCVdR * erhead(k) &
25903 + dPOLdR1 * erhead_tail(k,1) &
25904 + dPOLdR2 * erhead_tail(k,2)&
25905 + dGLJdR * erhead(k)
25911 SUBROUTINE eqq_cat(Ecl,Egb,Epol,Fisocav,Elj)
25914 real (kind=8) :: facd3, facd4, federmaus, adler,&
25915 Ecl,Egb,Epol,Fisocav,Elj,Fgb,debkap
25917 !c! Epol and Gpol analytical parameters
25918 alphapol1 = alphapolcat(itypi,itypj)
25919 alphapol2 = alphapolcat(itypj,itypi)
25920 !c! Fisocav and Gisocav analytical parameters
25921 al1 = alphisocat(1,itypi,itypj)
25922 al2 = alphisocat(2,itypi,itypj)
25923 al3 = alphisocat(3,itypi,itypj)
25924 al4 = alphisocat(4,itypi,itypj)
25926 / dsqrt(sigiso1cat(itypi, itypj)**2.0d0 &
25927 + sigiso2cat(itypi,itypj)**2.0d0))
25929 pis = sig0headcat(itypi,itypj)
25930 eps_head = epsheadcat(itypi,itypj)
25931 Rhead_sq = Rhead * Rhead
25932 !c! R1 - distance between head of ith side chain and tail of jth sidechain
25933 !c! R2 - distance between head of jth side chain and tail of ith sidechain
25937 !c! Calculate head-to-tail distances needed by Epol
25938 R1=R1+(ctail(k,2)-chead(k,1))**2
25939 R2=R2+(chead(k,2)-ctail(k,1))**2
25945 !c! R1 = dsqrt((Rtail**2)+((dtail(1,itypi,itypj)
25946 !c! & +dhead(1,1,itypi,itypj))**2))
25947 !c! R2 = dsqrt((Rtail**2)+((dtail(2,itypi,itypj)
25948 !c! & +dhead(2,1,itypi,itypj))**2))
25950 !c!-------------------------------------------------------------------
25951 !c! Coulomb electrostatic interaction
25952 Ecl = (332.0d0 * Qij) / Rhead
25953 !c! derivative of Ecl is Gcl...
25954 dGCLdR = (-332.0d0 * Qij ) / Rhead_sq
25958 ee0 = dexp(-( Rhead_sq ) / (4.0d0 * a12sq))
25959 Fgb = sqrt( ( Rhead_sq ) + a12sq * ee0)
25960 debkap=debaykapcat(itypi,itypj)
25961 Egb = -(332.0d0 * Qij *&
25962 (1.0/eps_in-dexp(-debkap*Fgb)/eps_out)) / Fgb
25963 ! print *,"EGB WTF",Qij,eps_inout_fac,Fgb,itypi,itypj,eps_in,eps_out
25964 !c! Derivative of Egb is Ggb...
25965 dGGBdFGB = -(-332.0d0 * Qij * &
25966 (1.0/eps_in-dexp(-debkap*Fgb)/eps_out))/(Fgb*Fgb)&
25968 (dexp(-debkap*Fgb)*debkap/eps_out))/ Fgb
25969 dFGBdR = ( Rhead * ( 2.0d0 - (0.5d0 * ee0) ) )/ ( 2.0d0 * Fgb )
25970 dGGBdR = dGGBdFGB * dFGBdR
25971 !c!-------------------------------------------------------------------
25972 !c! Fisocav - isotropic cavity creation term
25973 !c! or "how much energy it costs to put charged head in water"
25975 top = al1 * (dsqrt(pom) + al2 * pom - al3)
25976 bot = (1.0d0 + al4 * pom**12.0d0)
25978 FisoCav = top / bot
25979 ! write (*,*) "Rhead = ",Rhead
25980 ! write (*,*) "csig = ",csig
25981 ! write (*,*) "pom = ",pom
25982 ! write (*,*) "al1 = ",al1
25983 ! write (*,*) "al2 = ",al2
25984 ! write (*,*) "al3 = ",al3
25985 ! write (*,*) "al4 = ",al4
25986 ! write (*,*) "top = ",top
25987 ! write (*,*) "bot = ",bot
25988 !c! Derivative of Fisocav is GCV...
25989 dtop = al1 * ((1.0d0 / (2.0d0 * dsqrt(pom))) + al2)
25990 dbot = 12.0d0 * al4 * pom ** 11.0d0
25991 dGCVdR = ((dtop * bot - top * dbot) / botsq) * csig
25992 !c!-------------------------------------------------------------------
25994 !c! Polarization energy - charged heads polarize hydrophobic "neck"
25995 MomoFac1 = (1.0d0 - chi1 * sqom2)
25996 MomoFac2 = (1.0d0 - chi2 * sqom1)
25997 RR1 = ( R1 * R1 ) / MomoFac1
25998 RR2 = ( R2 * R2 ) / MomoFac2
25999 ee1 = exp(-( RR1 / (4.0d0 * a12sq) ))
26000 ee2 = exp(-( RR2 / (4.0d0 * a12sq) ))
26001 fgb1 = sqrt( RR1 + a12sq * ee1 )
26002 fgb2 = sqrt( RR2 + a12sq * ee2 )
26003 epol = 332.0d0 * eps_inout_fac * ( &
26004 (( alphapol1 / fgb1 )**4.0d0)+((alphapol2/fgb2) ** 4.0d0 ))
26006 dPOLdFGB1 = -(1328.0d0 * eps_inout_fac * alphapol1 ** 4.0d0)&
26008 dPOLdFGB2 = -(1328.0d0 * eps_inout_fac * alphapol2 ** 4.0d0)&
26010 dFGBdR1 = ( (R1 / MomoFac1)* ( 2.0d0 - (0.5d0 * ee1) ) )&
26012 dFGBdR2 = ( (R2 / MomoFac2)* ( 2.0d0 - (0.5d0 * ee2) ) )&
26014 dFGBdOM2 = (((R1 * R1 * chi1 * om2) / (MomoFac1 * MomoFac1))&
26015 * ( 2.0d0 - 0.5d0 * ee1) ) / ( 2.0d0 * fgb1 )
26016 dFGBdOM1 = (((R2 * R2 * chi2 * om1) / (MomoFac2 * MomoFac2))&
26017 * ( 2.0d0 - 0.5d0 * ee2) ) / ( 2.0d0 * fgb2 )
26018 dPOLdR1 = dPOLdFGB1 * dFGBdR1
26019 !c! dPOLdR1 = 0.0d0
26020 dPOLdR2 = dPOLdFGB2 * dFGBdR2
26021 !c! dPOLdR2 = 0.0d0
26022 dPOLdOM1 = dPOLdFGB2 * dFGBdOM1
26023 !c! dPOLdOM1 = 0.0d0
26024 dPOLdOM2 = dPOLdFGB1 * dFGBdOM2
26025 !c! dPOLdOM2 = 0.0d0
26026 !c!-------------------------------------------------------------------
26028 !c! Lennard-Jones 6-12 interaction between heads
26029 pom = (pis / Rhead)**6.0d0
26030 Elj = 4.0d0 * eps_head * pom * (pom-1.0d0)
26031 !c! derivative of Elj is Glj
26032 dGLJdR = 4.0d0 * eps_head*(((-12.0d0*pis**12.0d0)/(Rhead**13.0d0))&
26033 + (( 6.0d0*pis**6.0d0) /(Rhead**7.0d0)))
26034 !c!-------------------------------------------------------------------
26035 !c! Return the results
26036 !c! These things do the dRdX derivatives, that is
26037 !c! allow us to change what we see from function that changes with
26038 !c! distance to function that changes with LOCATION (of the interaction
26041 erhead(k) = Rhead_distance(k)/Rhead
26042 erhead_tail(k,1) = ((ctail(k,2)-chead(k,1))/R1)
26043 erhead_tail(k,2) = ((chead(k,2)-ctail(k,1))/R2)
26046 erdxi = scalar( erhead(1), dC_norm(1,i+nres) )
26047 erdxj = scalar( erhead(1), dC_norm(1,j) )
26048 bat = scalar( erhead_tail(1,1), dC_norm(1,i+nres) )
26049 federmaus = scalar(erhead_tail(1,1),dC_norm(1,j))
26050 eagle = scalar( erhead_tail(1,2), dC_norm(1,j) )
26051 adler = scalar( erhead_tail(1,2), dC_norm(1,i+nres) )
26052 facd1 = d1 * vbld_inv(i+nres)
26053 facd2 = d2 * vbld_inv(j)
26054 facd3 = dtailcat(1,itypi,itypj) * vbld_inv(i+nres)
26055 facd4 = dtailcat(2,itypi,itypj) * vbld_inv(j)
26057 !c! Now we add appropriate partial derivatives (one in each dimension)
26059 hawk = (erhead_tail(k,1) + &
26060 facd1 * (erhead_tail(k,1) - bat * dC_norm(k,i+nres)))
26061 condor = (erhead_tail(k,2) + &
26062 facd2 * (erhead_tail(k,2) - eagle * dC_norm(k,j)))
26064 pom = erhead(k)+facd1*(erhead(k)-erdxi*dC_norm(k,i+nres))
26065 gradpepcatx(k,i) = gradpepcatx(k,i) &
26070 - dPOLdR2 * (erhead_tail(k,2)&
26071 -facd3 * (erhead_tail(k,2) - adler * dC_norm(k,i+nres)))&
26074 pom = erhead(k)+facd2*(erhead(k)-erdxj*dC_norm(k,j))
26075 ! gradpepcatx(k,j) = gradpepcatx(k,j)+ dGCLdR * pom&
26076 ! + dGGBdR * pom+ dGCVdR * pom&
26077 ! + dPOLdR1 * (erhead_tail(k,1)&
26078 ! -facd4 * (erhead_tail(k,1) - federmaus * dC_norm(k,j)))&
26079 ! + dPOLdR2 * condor + dGLJdR * pom
26081 gradpepcat(k,i) = gradpepcat(k,i) &
26082 - dGCLdR * erhead(k)&
26083 - dGGBdR * erhead(k)&
26084 - dGCVdR * erhead(k)&
26085 - dPOLdR1 * erhead_tail(k,1)&
26086 - dPOLdR2 * erhead_tail(k,2)&
26087 - dGLJdR * erhead(k)
26089 gradpepcat(k,j) = gradpepcat(k,j) &
26090 + dGCLdR * erhead(k) &
26091 + dGGBdR * erhead(k) &
26092 + dGCVdR * erhead(k) &
26093 + dPOLdR1 * erhead_tail(k,1) &
26094 + dPOLdR2 * erhead_tail(k,2)&
26095 + dGLJdR * erhead(k)
26099 END SUBROUTINE eqq_cat
26100 !c!-------------------------------------------------------------------
26101 SUBROUTINE energy_quad(istate,eheadtail,Ecl,Egb,Epol,Fisocav,Elj,Equad)
26105 double precision eheadtail,Ecl,Egb,Epol,Fisocav,Elj,Equad
26106 double precision ener(4)
26107 double precision dcosom1(3),dcosom2(3)
26108 !c! used in Epol derivatives
26109 double precision facd3, facd4
26110 double precision federmaus, adler
26111 integer istate,ii,jj
26112 real (kind=8) :: Fgb
26113 ! print *,"CALLING EQUAD"
26114 !c! Epol and Gpol analytical parameters
26115 alphapol1 = alphapol(itypi,itypj)
26116 alphapol2 = alphapol(itypj,itypi)
26117 !c! Fisocav and Gisocav analytical parameters
26118 al1 = alphiso(1,itypi,itypj)
26119 al2 = alphiso(2,itypi,itypj)
26120 al3 = alphiso(3,itypi,itypj)
26121 al4 = alphiso(4,itypi,itypj)
26122 csig = (1.0d0 / dsqrt(sigiso1(itypi, itypj)**2.0d0&
26123 + sigiso2(itypi,itypj)**2.0d0))
26125 w1 = wqdip(1,itypi,itypj)
26126 w2 = wqdip(2,itypi,itypj)
26127 pis = sig0head(itypi,itypj)
26128 eps_head = epshead(itypi,itypj)
26129 !c! First things first:
26130 !c! We need to do sc_grad's job with GB and Fcav
26131 eom1 = eps2der * eps2rt_om1 &
26132 - 2.0D0 * alf1 * eps3der&
26133 + sigder * sigsq_om1&
26135 eom2 = eps2der * eps2rt_om2 &
26136 + 2.0D0 * alf2 * eps3der&
26137 + sigder * sigsq_om2&
26139 eom12 = evdwij * eps1_om12 &
26140 + eps2der * eps2rt_om12 &
26141 - 2.0D0 * alf12 * eps3der&
26142 + sigder *sigsq_om12&
26144 !c! now some magical transformations to project gradient into
26145 !c! three cartesian vectors
26147 dcosom1(k) = rij * (dc_norm(k,nres+i) - om1 * erij(k))
26148 dcosom2(k) = rij * (dc_norm(k,nres+j) - om2 * erij(k))
26149 gg(k) = gg(k) + eom1 * dcosom1(k) + eom2 * dcosom2(k)
26150 !c! this acts on hydrophobic center of interaction
26151 gvdwx(k,i)= gvdwx(k,i) - gg(k) &
26152 + (eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,nres+i))&
26153 + eom1*(erij(k)-om1*dc_norm(k,nres+i)))*dsci_inv
26154 gvdwx(k,j)= gvdwx(k,j) + gg(k) &
26155 + (eom12*(dc_norm(k,nres+i)-om12*dc_norm(k,nres+j))&
26156 + eom2*(erij(k)-om2*dc_norm(k,nres+j)))*dscj_inv
26157 !c! this acts on Calpha
26158 gvdwc(k,i)=gvdwc(k,i)-gg(k)
26159 gvdwc(k,j)=gvdwc(k,j)+gg(k)
26161 !c! sc_grad is done, now we will compute
26166 DO istate = 1, nstate(itypi,itypj)
26167 !c*************************************************************
26168 IF (istate.ne.1) THEN
26169 IF (istate.lt.3) THEN
26175 d1 = dhead(1,ii,itypi,itypj)
26176 d2 = dhead(2,jj,itypi,itypj)
26178 chead(k,1) = c(k, i+nres) + d1 * dc_norm(k, i+nres)
26179 chead(k,2) = c(k, j+nres) + d2 * dc_norm(k, j+nres)
26180 Rhead_distance(k) = chead(k,2) - chead(k,1)
26182 !c! pitagoras (root of sum of squares)
26184 (Rhead_distance(1)*Rhead_distance(1)) &
26185 + (Rhead_distance(2)*Rhead_distance(2)) &
26186 + (Rhead_distance(3)*Rhead_distance(3)))
26188 Rhead_sq = Rhead * Rhead
26190 !c! R1 - distance between head of ith side chain and tail of jth sidechain
26191 !c! R2 - distance between head of jth side chain and tail of ith sidechain
26195 !c! Calculate head-to-tail distances
26196 R1=R1+(ctail(k,2)-chead(k,1))**2
26197 R2=R2+(chead(k,2)-ctail(k,1))**2
26202 Ecl = (332.0d0 * Qij) / (Rhead * eps_in)
26204 !c! write (*,*) "Ecl = ", Ecl
26205 !c! derivative of Ecl is Gcl...
26206 dGCLdR = (-332.0d0 * Qij ) / (Rhead_sq * eps_in)
26211 !c!-------------------------------------------------------------------
26212 !c! Generalised Born Solvent Polarization
26213 ee0 = dexp(-( Rhead_sq ) / (4.0d0 * a12sq))
26214 Fgb = sqrt( ( Rhead_sq ) + a12sq * ee0)
26215 Egb = -(332.0d0 * Qij * eps_inout_fac) / Fgb
26217 !c! write (*,*) "a1*a2 = ", a12sq
26218 !c! write (*,*) "Rhead = ", Rhead
26219 !c! write (*,*) "Rhead_sq = ", Rhead_sq
26220 !c! write (*,*) "ee = ", ee
26221 !c! write (*,*) "Fgb = ", Fgb
26222 !c! write (*,*) "fac = ", eps_inout_fac
26223 !c! write (*,*) "Qij = ", Qij
26224 !c! write (*,*) "Egb = ", Egb
26225 !c! Derivative of Egb is Ggb...
26226 !c! dFGBdR is used by Quad's later...
26227 dGGBdFGB = -(-332.0d0 * Qij * eps_inout_fac) / (Fgb * Fgb)
26228 dFGBdR = ( Rhead * ( 2.0d0 - (0.5d0 * ee0) ) )&
26230 dGGBdR = dGGBdFGB * dFGBdR
26232 !c!-------------------------------------------------------------------
26233 !c! Fisocav - isotropic cavity creation term
26235 top = al1 * (dsqrt(pom) + al2 * pom - al3)
26236 bot = (1.0d0 + al4 * pom**12.0d0)
26238 FisoCav = top / bot
26239 dtop = al1 * ((1.0d0 / (2.0d0 * dsqrt(pom))) + al2)
26240 dbot = 12.0d0 * al4 * pom ** 11.0d0
26241 dGCVdR = ((dtop * bot - top * dbot) / botsq) * csig
26243 !c!-------------------------------------------------------------------
26244 !c! Polarization energy
26246 MomoFac1 = (1.0d0 - chi1 * sqom2)
26247 MomoFac2 = (1.0d0 - chi2 * sqom1)
26248 RR1 = ( R1 * R1 ) / MomoFac1
26249 RR2 = ( R2 * R2 ) / MomoFac2
26250 ee1 = exp(-( RR1 / (4.0d0 * a12sq) ))
26251 ee2 = exp(-( RR2 / (4.0d0 * a12sq) ))
26252 fgb1 = sqrt( RR1 + a12sq * ee1 )
26253 fgb2 = sqrt( RR2 + a12sq * ee2 )
26254 epol = 332.0d0 * eps_inout_fac * (&
26255 (( alphapol1 / fgb1 )**4.0d0)+((alphapol2/fgb2) ** 4.0d0 ))
26257 !c! derivative of Epol is Gpol...
26258 dPOLdFGB1 = -(1328.0d0 * eps_inout_fac * alphapol1 ** 4.0d0)&
26260 dPOLdFGB2 = -(1328.0d0 * eps_inout_fac * alphapol2 ** 4.0d0)&
26262 dFGBdR1 = ( (R1 / MomoFac1) &
26263 * ( 2.0d0 - (0.5d0 * ee1) ) )&
26265 dFGBdR2 = ( (R2 / MomoFac2) &
26266 * ( 2.0d0 - (0.5d0 * ee2) ) ) &
26268 dFGBdOM2 = (((R1 * R1 * chi1 * om2) / (MomoFac1 * MomoFac1)) &
26269 * ( 2.0d0 - 0.5d0 * ee1) ) &
26271 dFGBdOM1 = (((R2 * R2 * chi2 * om1) / (MomoFac2 * MomoFac2)) &
26272 * ( 2.0d0 - 0.5d0 * ee2) ) &
26274 dPOLdR1 = dPOLdFGB1 * dFGBdR1
26275 !c! dPOLdR1 = 0.0d0
26276 dPOLdR2 = dPOLdFGB2 * dFGBdR2
26277 !c! dPOLdR2 = 0.0d0
26278 dPOLdOM1 = dPOLdFGB2 * dFGBdOM1
26279 !c! dPOLdOM1 = 0.0d0
26280 dPOLdOM2 = dPOLdFGB1 * dFGBdOM2
26281 pom = (pis / Rhead)**6.0d0
26282 Elj = 4.0d0 * eps_head * pom * (pom-1.0d0)
26284 !c! derivative of Elj is Glj
26285 dGLJdR = 4.0d0 * eps_head &
26286 * (((-12.0d0*pis**12.0d0)/(Rhead**13.0d0)) &
26287 + (( 6.0d0*pis**6.0d0) /(Rhead**7.0d0)))
26289 !c!-------------------------------------------------------------------
26291 IF (Wqd.ne.0.0d0) THEN
26292 Beta1 = 5.0d0 + 3.0d0 * (sqom12 - 1.0d0) &
26293 - 37.5d0 * ( sqom1 + sqom2 ) &
26294 + 157.5d0 * ( sqom1 * sqom2 ) &
26295 - 45.0d0 * om1*om2*om12
26296 fac = -( Wqd / (2.0d0 * Fgb**5.0d0) )
26297 Equad = fac * Beta1
26299 !c! derivative of Equad...
26300 dQUADdR = ((2.5d0 * Wqd * Beta1) / (Fgb**6.0d0)) * dFGBdR
26301 !c! dQUADdR = 0.0d0
26302 dQUADdOM1 = fac* (-75.0d0*om1 + 315.0d0*om1*sqom2 - 45.0d0*om2*om12)
26303 !c! dQUADdOM1 = 0.0d0
26304 dQUADdOM2 = fac* (-75.0d0*om2 + 315.0d0*sqom1*om2 - 45.0d0*om1*om12)
26305 !c! dQUADdOM2 = 0.0d0
26306 dQUADdOM12 = fac * ( 6.0d0*om12 - 45.0d0*om1*om2 )
26311 !c!-------------------------------------------------------------------
26312 !c! Return the results
26314 eom1 = dPOLdOM1 + dQUADdOM1
26315 eom2 = dPOLdOM2 + dQUADdOM2
26317 !c! now some magical transformations to project gradient into
26318 !c! three cartesian vectors
26320 dcosom1(k) = rij * (dc_norm(k,nres+i) - om1 * erij(k))
26321 dcosom2(k) = rij * (dc_norm(k,nres+j) - om2 * erij(k))
26322 tuna(k) = eom1 * dcosom1(k) + eom2 * dcosom2(k)
26326 erhead(k) = Rhead_distance(k)/Rhead
26327 erhead_tail(k,1) = ((ctail(k,2)-chead(k,1))/R1)
26328 erhead_tail(k,2) = ((chead(k,2)-ctail(k,1))/R2)
26330 erdxi = scalar( erhead(1), dC_norm(1,i+nres) )
26331 erdxj = scalar( erhead(1), dC_norm(1,j+nres) )
26332 bat = scalar( erhead_tail(1,1), dC_norm(1,i+nres) )
26333 federmaus = scalar(erhead_tail(1,1),dC_norm(1,j+nres))
26334 eagle = scalar( erhead_tail(1,2), dC_norm(1,j+nres) )
26335 adler = scalar( erhead_tail(1,2), dC_norm(1,i+nres) )
26336 facd1 = d1 * vbld_inv(i+nres)
26337 facd2 = d2 * vbld_inv(j+nres)
26338 facd3 = dtail(1,itypi,itypj) * vbld_inv(i+nres)
26339 facd4 = dtail(2,itypi,itypj) * vbld_inv(j+nres)
26341 hawk = erhead_tail(k,1) + &
26342 facd1 * (erhead_tail(k,1) - bat * dC_norm(k,i+nres))
26343 condor = erhead_tail(k,2) + &
26344 facd2 * (erhead_tail(k,2) - eagle * dC_norm(k,j+nres))
26346 pom = erhead(k)+facd1*(erhead(k)-erdxi*dC_norm(k,i+nres))
26347 !c! this acts on hydrophobic center of interaction
26348 gheadtail(k,1,1) = gheadtail(k,1,1) &
26353 - dPOLdR2 * (erhead_tail(k,2) &
26354 -facd3 * (erhead_tail(k,2) - adler * dC_norm(k,i+nres)))&
26358 + (eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,nres+i))&
26359 + eom1*(erij(k)-om1*dc_norm(k,nres+i)))*dsci_inv
26361 pom = erhead(k)+facd2*(erhead(k)-erdxj*dC_norm(k,j+nres))
26362 !c! this acts on hydrophobic center of interaction
26363 gheadtail(k,2,1) = gheadtail(k,2,1) &
26367 + dPOLdR1 * (erhead_tail(k,1) &
26368 -facd4 * (erhead_tail(k,1) - federmaus * dC_norm(k,j+nres))) &
26369 + dPOLdR2 * condor &
26373 + (eom12*(dc_norm(k,nres+i)-om12*dc_norm(k,nres+j)) &
26374 + eom2*(erij(k)-om2*dc_norm(k,nres+j)))*dscj_inv
26376 !c! this acts on Calpha
26377 gheadtail(k,3,1) = gheadtail(k,3,1) &
26378 - dGCLdR * erhead(k)&
26379 - dGGBdR * erhead(k)&
26380 - dGCVdR * erhead(k)&
26381 - dPOLdR1 * erhead_tail(k,1)&
26382 - dPOLdR2 * erhead_tail(k,2)&
26383 - dGLJdR * erhead(k) &
26384 - dQUADdR * erhead(k)&
26386 !c! this acts on Calpha
26387 gheadtail(k,4,1) = gheadtail(k,4,1) &
26388 + dGCLdR * erhead(k) &
26389 + dGGBdR * erhead(k) &
26390 + dGCVdR * erhead(k) &
26391 + dPOLdR1 * erhead_tail(k,1) &
26392 + dPOLdR2 * erhead_tail(k,2) &
26393 + dGLJdR * erhead(k) &
26394 + dQUADdR * erhead(k)&
26397 ener(istate) = ECL + Egb + Epol + Fisocav + Elj + Equad
26398 eheadtail = eheadtail &
26399 + wstate(istate, itypi, itypj) &
26400 * dexp(-betaT * ener(istate))
26401 !c! foreach cartesian dimension
26403 !c! foreach of two gvdwx and gvdwc
26405 gheadtail(k,l,2) = gheadtail(k,l,2) &
26406 + wstate( istate, itypi, itypj ) &
26407 * dexp(-betaT * ener(istate)) &
26409 gheadtail(k,l,1) = 0.0d0
26413 !c! Here ended the gigantic DO istate = 1, 4, which starts
26414 !c! at the beggining of the subroutine
26418 gheadtail(k,l,2) = gheadtail(k,l,2) / eheadtail
26420 gvdwx(k,i) = gvdwx(k,i) + gheadtail(k,1,2)
26421 gvdwx(k,j) = gvdwx(k,j) + gheadtail(k,2,2)
26422 gvdwc(k,i) = gvdwc(k,i) + gheadtail(k,3,2)
26423 gvdwc(k,j) = gvdwc(k,j) + gheadtail(k,4,2)
26425 gheadtail(k,l,1) = 0.0d0
26426 gheadtail(k,l,2) = 0.0d0
26429 eheadtail = (-dlog(eheadtail)) / betaT
26436 END SUBROUTINE energy_quad
26437 !!-----------------------------------------------------------
26438 SUBROUTINE eqn(Epol)
26442 double precision facd4, federmaus,epol
26443 alphapol1 = alphapol(itypi,itypj)
26444 !c! R1 - distance between head of ith side chain and tail of jth sidechain
26447 !c! Calculate head-to-tail distances
26448 R1=R1+(ctail(k,2)-chead(k,1))**2
26453 !c! R1 = dsqrt((Rtail**2)+((dtail(1,itypi,itypj)
26454 !c! & +dhead(1,1,itypi,itypj))**2))
26455 !c! R2 = dsqrt((Rtail**2)+((dtail(2,itypi,itypj)
26456 !c! & +dhead(2,1,itypi,itypj))**2))
26457 !c--------------------------------------------------------------------
26458 !c Polarization energy
26460 MomoFac1 = (1.0d0 - chi1 * sqom2)
26461 RR1 = R1 * R1 / MomoFac1
26462 ee1 = exp(-( RR1 / (4.0d0 * a12sq) ))
26463 fgb1 = sqrt( RR1 + a12sq * ee1)
26464 epol = 332.0d0 * eps_inout_fac * (( alphapol1 / fgb1 )**4.0d0)
26465 dPOLdFGB1 = -(1328.0d0 * eps_inout_fac * alphapol1 ** 4.0d0) &
26467 dFGBdR1 = ( (R1 / MomoFac1) &
26468 * ( 2.0d0 - (0.5d0 * ee1) ) ) &
26470 dFGBdOM2 = (((R1 * R1 * chi1 * om2) / (MomoFac1 * MomoFac1)) &
26471 * (2.0d0 - 0.5d0 * ee1) ) &
26473 dPOLdR1 = dPOLdFGB1 * dFGBdR1
26474 !c! dPOLdR1 = 0.0d0
26476 dPOLdOM2 = dPOLdFGB1 * dFGBdOM2
26478 erhead_tail(k,1) = ((ctail(k,2)-chead(k,1))/R1)
26480 bat = scalar( erhead_tail(1,1), dC_norm(1,i+nres) )
26481 federmaus = scalar(erhead_tail(1,1),dC_norm(1,j+nres))
26482 facd1 = d1 * vbld_inv(i+nres)
26483 facd4 = dtail(2,itypi,itypj) * vbld_inv(j+nres)
26486 hawk = (erhead_tail(k,1) + &
26487 facd1 * (erhead_tail(k,1) - bat * dC_norm(k,i+nres)))
26489 gvdwx(k,i) = gvdwx(k,i) &
26491 gvdwx(k,j) = gvdwx(k,j) &
26492 + dPOLdR1 * (erhead_tail(k,1) &
26493 -facd4 * (erhead_tail(k,1) - federmaus * dC_norm(k,j+nres)))
26495 gvdwc(k,i) = gvdwc(k,i) - dPOLdR1 * erhead_tail(k,1)
26496 gvdwc(k,j) = gvdwc(k,j) + dPOLdR1 * erhead_tail(k,1)
26501 SUBROUTINE enq(Epol)
26504 double precision facd3, adler,epol
26505 alphapol2 = alphapol(itypj,itypi)
26506 !c! R2 - distance between head of jth side chain and tail of ith sidechain
26509 !c! Calculate head-to-tail distances
26510 R2=R2+(chead(k,2)-ctail(k,1))**2
26515 !c! R1 = dsqrt((Rtail**2)+((dtail(1,itypi,itypj)
26516 !c! & +dhead(1,1,itypi,itypj))**2))
26517 !c! R2 = dsqrt((Rtail**2)+((dtail(2,itypi,itypj)
26518 !c! & +dhead(2,1,itypi,itypj))**2))
26519 !c------------------------------------------------------------------------
26520 !c Polarization energy
26521 MomoFac2 = (1.0d0 - chi2 * sqom1)
26522 RR2 = R2 * R2 / MomoFac2
26523 ee2 = exp(-(RR2 / (4.0d0 * a12sq)))
26524 fgb2 = sqrt(RR2 + a12sq * ee2)
26525 epol = 332.0d0 * eps_inout_fac * ((alphapol2/fgb2) ** 4.0d0 )
26526 dPOLdFGB2 = -(1328.0d0 * eps_inout_fac * alphapol2 ** 4.0d0) &
26528 dFGBdR2 = ( (R2 / MomoFac2) &
26529 * ( 2.0d0 - (0.5d0 * ee2) ) ) &
26531 dFGBdOM1 = (((R2 * R2 * chi2 * om1) / (MomoFac2 * MomoFac2)) &
26532 * (2.0d0 - 0.5d0 * ee2) ) &
26534 dPOLdR2 = dPOLdFGB2 * dFGBdR2
26535 !c! dPOLdR2 = 0.0d0
26536 dPOLdOM1 = dPOLdFGB2 * dFGBdOM1
26537 !c! dPOLdOM1 = 0.0d0
26539 !c!-------------------------------------------------------------------
26540 !c! Return the results
26541 !c! (See comments in Eqq)
26543 erhead_tail(k,2) = ((chead(k,2)-ctail(k,1))/R2)
26545 eagle = scalar( erhead_tail(1,2), dC_norm(1,j+nres) )
26546 adler = scalar( erhead_tail(1,2), dC_norm(1,i+nres) )
26547 facd2 = d2 * vbld_inv(j+nres)
26548 facd3 = dtail(1,itypi,itypj) * vbld_inv(i+nres)
26550 condor = (erhead_tail(k,2) &
26551 + facd2 * (erhead_tail(k,2) - eagle * dC_norm(k,j+nres)))
26553 gvdwx(k,i) = gvdwx(k,i) &
26554 - dPOLdR2 * (erhead_tail(k,2) &
26555 -facd3 * (erhead_tail(k,2) - adler * dC_norm(k,i+nres)))
26556 gvdwx(k,j) = gvdwx(k,j) &
26559 gvdwc(k,i) = gvdwc(k,i) &
26560 - dPOLdR2 * erhead_tail(k,2)
26561 gvdwc(k,j) = gvdwc(k,j) &
26562 + dPOLdR2 * erhead_tail(k,2)
26568 SUBROUTINE enq_cat(Epol)
26571 double precision facd3, adler,epol
26572 alphapol2 = alphapolcat(itypj,itypi)
26573 !c! R2 - distance between head of jth side chain and tail of ith sidechain
26576 !c! Calculate head-to-tail distances
26577 R2=R2+(chead(k,2)-ctail(k,1))**2
26582 !c! R1 = dsqrt((Rtail**2)+((dtail(1,itypi,itypj)
26583 !c! & +dhead(1,1,itypi,itypj))**2))
26584 !c! R2 = dsqrt((Rtail**2)+((dtail(2,itypi,itypj)
26585 !c! & +dhead(2,1,itypi,itypj))**2))
26586 !c------------------------------------------------------------------------
26587 !c Polarization energy
26588 MomoFac2 = (1.0d0 - chi2 * sqom1)
26589 RR2 = R2 * R2 / MomoFac2
26590 ee2 = exp(-(RR2 / (4.0d0 * a12sq)))
26591 fgb2 = sqrt(RR2 + a12sq * ee2)
26592 epol = 332.0d0 * eps_inout_fac * ((alphapol2/fgb2) ** 4.0d0 )
26593 dPOLdFGB2 = -(1328.0d0 * eps_inout_fac * alphapol2 ** 4.0d0) &
26595 dFGBdR2 = ( (R2 / MomoFac2) &
26596 * ( 2.0d0 - (0.5d0 * ee2) ) ) &
26598 dFGBdOM1 = (((R2 * R2 * chi2 * om1) / (MomoFac2 * MomoFac2)) &
26599 * (2.0d0 - 0.5d0 * ee2) ) &
26601 dPOLdR2 = dPOLdFGB2 * dFGBdR2
26602 !c! dPOLdR2 = 0.0d0
26603 dPOLdOM1 = dPOLdFGB2 * dFGBdOM1
26604 !c! dPOLdOM1 = 0.0d0
26607 !c!-------------------------------------------------------------------
26608 !c! Return the results
26609 !c! (See comments in Eqq)
26611 erhead_tail(k,2) = ((chead(k,2)-ctail(k,1))/R2)
26613 eagle = scalar( erhead_tail(1,2), dC_norm(1,j) )
26614 adler = scalar( erhead_tail(1,2), dC_norm(1,i+nres) )
26615 facd2 = d2 * vbld_inv(j+nres)
26616 facd3 = dtailcat(1,itypi,itypj) * vbld_inv(i+nres)
26618 condor = (erhead_tail(k,2) &
26619 + facd2 * (erhead_tail(k,2) - eagle * dC_norm(k,j)))
26621 gradpepcatx(k,i) = gradpepcatx(k,i) &
26622 - dPOLdR2 * (erhead_tail(k,2) &
26623 -facd3 * (erhead_tail(k,2) - adler * dC_norm(k,i+nres)))
26624 ! gradpepcatx(k,j) = gradpepcatx(k,j) &
26625 ! + dPOLdR2 * condor
26627 gradpepcat(k,i) = gradpepcat(k,i) &
26628 - dPOLdR2 * erhead_tail(k,2)
26629 gradpepcat(k,j) = gradpepcat(k,j) &
26630 + dPOLdR2 * erhead_tail(k,2)
26634 END SUBROUTINE enq_cat
26636 SUBROUTINE eqd(Ecl,Elj,Epol)
26639 double precision facd4, federmaus,ecl,elj,epol
26640 alphapol1 = alphapol(itypi,itypj)
26641 w1 = wqdip(1,itypi,itypj)
26642 w2 = wqdip(2,itypi,itypj)
26643 pis = sig0head(itypi,itypj)
26644 eps_head = epshead(itypi,itypj)
26645 !c!-------------------------------------------------------------------
26646 !c! R1 - distance between head of ith side chain and tail of jth sidechain
26649 !c! Calculate head-to-tail distances
26650 R1=R1+(ctail(k,2)-chead(k,1))**2
26655 !c! R1 = dsqrt((Rtail**2)+((dtail(1,itypi,itypj)
26656 !c! & +dhead(1,1,itypi,itypj))**2))
26657 !c! R2 = dsqrt((Rtail**2)+((dtail(2,itypi,itypj)
26658 !c! & +dhead(2,1,itypi,itypj))**2))
26660 !c!-------------------------------------------------------------------
26662 sparrow = w1 * Qi * om1
26663 hawk = w2 * Qi * Qi * (1.0d0 - sqom2)
26664 Ecl = sparrow / Rhead**2.0d0 &
26665 - hawk / Rhead**4.0d0
26666 dGCLdR = - 2.0d0 * sparrow / Rhead**3.0d0 &
26667 + 4.0d0 * hawk / Rhead**5.0d0
26669 dGCLdOM1 = (w1 * Qi) / (Rhead**2.0d0)
26671 dGCLdOM2 = (2.0d0 * w2 * Qi * Qi * om2) / (Rhead ** 4.0d0)
26672 !c--------------------------------------------------------------------
26673 !c Polarization energy
26675 MomoFac1 = (1.0d0 - chi1 * sqom2)
26676 RR1 = R1 * R1 / MomoFac1
26677 ee1 = exp(-( RR1 / (4.0d0 * a12sq) ))
26678 fgb1 = sqrt( RR1 + a12sq * ee1)
26679 epol = 332.0d0 * eps_inout_fac * (( alphapol1 / fgb1 )**4.0d0)
26681 !c!------------------------------------------------------------------
26682 !c! derivative of Epol is Gpol...
26683 dPOLdFGB1 = -(1328.0d0 * eps_inout_fac * alphapol1 ** 4.0d0) &
26685 dFGBdR1 = ( (R1 / MomoFac1) &
26686 * ( 2.0d0 - (0.5d0 * ee1) ) ) &
26688 dFGBdOM2 = (((R1 * R1 * chi1 * om2) / (MomoFac1 * MomoFac1)) &
26689 * (2.0d0 - 0.5d0 * ee1) ) &
26691 dPOLdR1 = dPOLdFGB1 * dFGBdR1
26692 !c! dPOLdR1 = 0.0d0
26694 dPOLdOM2 = dPOLdFGB1 * dFGBdOM2
26695 !c! dPOLdOM2 = 0.0d0
26696 !c!-------------------------------------------------------------------
26698 pom = (pis / Rhead)**6.0d0
26699 Elj = 4.0d0 * eps_head * pom * (pom-1.0d0)
26700 !c! derivative of Elj is Glj
26701 dGLJdR = 4.0d0 * eps_head &
26702 * (((-12.0d0*pis**12.0d0)/(Rhead**13.0d0)) &
26703 + (( 6.0d0*pis**6.0d0) /(Rhead**7.0d0)))
26705 erhead(k) = Rhead_distance(k)/Rhead
26706 erhead_tail(k,1) = ((ctail(k,2)-chead(k,1))/R1)
26709 erdxi = scalar( erhead(1), dC_norm(1,i+nres) )
26710 erdxj = scalar( erhead(1), dC_norm(1,j+nres) )
26711 bat = scalar( erhead_tail(1,1), dC_norm(1,i+nres) )
26712 federmaus = scalar(erhead_tail(1,1),dC_norm(1,j+nres))
26713 facd1 = d1 * vbld_inv(i+nres)
26714 facd2 = d2 * vbld_inv(j+nres)
26715 facd4 = dtail(2,itypi,itypj) * vbld_inv(j+nres)
26718 hawk = (erhead_tail(k,1) + &
26719 facd1 * (erhead_tail(k,1) - bat * dC_norm(k,i+nres)))
26721 pom = erhead(k)+facd1*(erhead(k)-erdxi*dC_norm(k,i+nres))
26722 gvdwx(k,i) = gvdwx(k,i) &
26727 pom = erhead(k)+facd2*(erhead(k)-erdxj*dC_norm(k,j+nres))
26728 gvdwx(k,j) = gvdwx(k,j) &
26730 + dPOLdR1 * (erhead_tail(k,1) &
26731 -facd4 * (erhead_tail(k,1) - federmaus * dC_norm(k,j+nres))) &
26735 gvdwc(k,i) = gvdwc(k,i) &
26736 - dGCLdR * erhead(k) &
26737 - dPOLdR1 * erhead_tail(k,1) &
26738 - dGLJdR * erhead(k)
26740 gvdwc(k,j) = gvdwc(k,j) &
26741 + dGCLdR * erhead(k) &
26742 + dPOLdR1 * erhead_tail(k,1) &
26743 + dGLJdR * erhead(k)
26748 SUBROUTINE edq(Ecl,Elj,Epol)
26753 double precision facd3, adler,ecl,elj,epol
26754 alphapol2 = alphapol(itypj,itypi)
26755 w1 = wqdip(1,itypi,itypj)
26756 w2 = wqdip(2,itypi,itypj)
26757 pis = sig0head(itypi,itypj)
26758 eps_head = epshead(itypi,itypj)
26759 !c!-------------------------------------------------------------------
26760 !c! R2 - distance between head of jth side chain and tail of ith sidechain
26763 !c! Calculate head-to-tail distances
26764 R2=R2+(chead(k,2)-ctail(k,1))**2
26769 !c! R1 = dsqrt((Rtail**2)+((dtail(1,itypi,itypj)
26770 !c! & +dhead(1,1,itypi,itypj))**2))
26771 !c! R2 = dsqrt((Rtail**2)+((dtail(2,itypi,itypj)
26772 !c! & +dhead(2,1,itypi,itypj))**2))
26775 !c!-------------------------------------------------------------------
26777 sparrow = w1 * Qj * om1
26778 hawk = w2 * Qj * Qj * (1.0d0 - sqom2)
26779 ECL = sparrow / Rhead**2.0d0 &
26780 - hawk / Rhead**4.0d0
26781 !c!-------------------------------------------------------------------
26782 !c! derivative of ecl is Gcl
26784 dGCLdR = - 2.0d0 * sparrow / Rhead**3.0d0 &
26785 + 4.0d0 * hawk / Rhead**5.0d0
26787 dGCLdOM1 = (w1 * Qj) / (Rhead**2.0d0)
26789 dGCLdOM2 = (2.0d0 * w2 * Qj * Qj * om2) / (Rhead ** 4.0d0)
26790 !c--------------------------------------------------------------------
26791 !c Polarization energy
26793 MomoFac2 = (1.0d0 - chi2 * sqom1)
26794 RR2 = R2 * R2 / MomoFac2
26795 ee2 = exp(-(RR2 / (4.0d0 * a12sq)))
26796 fgb2 = sqrt(RR2 + a12sq * ee2)
26797 epol = 332.0d0 * eps_inout_fac * ((alphapol2/fgb2) ** 4.0d0 )
26798 dPOLdFGB2 = -(1328.0d0 * eps_inout_fac * alphapol2 ** 4.0d0) &
26800 dFGBdR2 = ( (R2 / MomoFac2) &
26801 * ( 2.0d0 - (0.5d0 * ee2) ) ) &
26803 dFGBdOM1 = (((R2 * R2 * chi2 * om1) / (MomoFac2 * MomoFac2)) &
26804 * (2.0d0 - 0.5d0 * ee2) ) &
26806 dPOLdR2 = dPOLdFGB2 * dFGBdR2
26807 !c! dPOLdR2 = 0.0d0
26808 dPOLdOM1 = dPOLdFGB2 * dFGBdOM1
26809 !c! dPOLdOM1 = 0.0d0
26811 !c!-------------------------------------------------------------------
26813 pom = (pis / Rhead)**6.0d0
26814 Elj = 4.0d0 * eps_head * pom * (pom-1.0d0)
26815 !c! derivative of Elj is Glj
26816 dGLJdR = 4.0d0 * eps_head &
26817 * (((-12.0d0*pis**12.0d0)/(Rhead**13.0d0)) &
26818 + (( 6.0d0*pis**6.0d0) /(Rhead**7.0d0)))
26819 !c!-------------------------------------------------------------------
26820 !c! Return the results
26821 !c! (see comments in Eqq)
26823 erhead(k) = Rhead_distance(k)/Rhead
26824 erhead_tail(k,2) = ((chead(k,2)-ctail(k,1))/R2)
26826 erdxi = scalar( erhead(1), dC_norm(1,i+nres) )
26827 erdxj = scalar( erhead(1), dC_norm(1,j+nres) )
26828 eagle = scalar( erhead_tail(1,2), dC_norm(1,j+nres) )
26829 adler = scalar( erhead_tail(1,2), dC_norm(1,i+nres) )
26830 facd1 = d1 * vbld_inv(i+nres)
26831 facd2 = d2 * vbld_inv(j+nres)
26832 facd3 = dtail(1,itypi,itypj) * vbld_inv(i+nres)
26834 condor = (erhead_tail(k,2) &
26835 + facd2 * (erhead_tail(k,2) - eagle * dC_norm(k,j+nres)))
26837 pom = erhead(k)+facd1*(erhead(k)-erdxi*dC_norm(k,i+nres))
26838 gvdwx(k,i) = gvdwx(k,i) &
26840 - dPOLdR2 * (erhead_tail(k,2) &
26841 -facd3 * (erhead_tail(k,2) - adler * dC_norm(k,i+nres))) &
26844 pom = erhead(k)+facd2*(erhead(k)-erdxj*dC_norm(k,j+nres))
26845 gvdwx(k,j) = gvdwx(k,j) &
26847 + dPOLdR2 * condor &
26851 gvdwc(k,i) = gvdwc(k,i) &
26852 - dGCLdR * erhead(k) &
26853 - dPOLdR2 * erhead_tail(k,2) &
26854 - dGLJdR * erhead(k)
26856 gvdwc(k,j) = gvdwc(k,j) &
26857 + dGCLdR * erhead(k) &
26858 + dPOLdR2 * erhead_tail(k,2) &
26859 + dGLJdR * erhead(k)
26865 SUBROUTINE edq_cat(Ecl,Elj,Epol)
26869 double precision facd3, adler,ecl,elj,epol
26870 alphapol2 = alphapolcat(itypj,itypi)
26871 w1 = wqdipcat(1,itypi,itypj)
26872 w2 = wqdipcat(2,itypi,itypj)
26873 pis = sig0headcat(itypi,itypj)
26874 eps_head = epsheadcat(itypi,itypj)
26875 !c!-------------------------------------------------------------------
26876 !c! R2 - distance between head of jth side chain and tail of ith sidechain
26879 !c! Calculate head-to-tail distances
26880 R2=R2+(chead(k,2)-ctail(k,1))**2
26885 !c! R1 = dsqrt((Rtail**2)+((dtail(1,itypi,itypj)
26886 !c! & +dhead(1,1,itypi,itypj))**2))
26887 !c! R2 = dsqrt((Rtail**2)+((dtail(2,itypi,itypj)
26888 !c! & +dhead(2,1,itypi,itypj))**2))
26891 !c!-------------------------------------------------------------------
26893 ! write(iout,*) "KURWA2",Rhead
26894 sparrow = w1 * Qj * om1
26895 hawk = w2 * Qj * Qj * (1.0d0 - sqom2)
26896 ECL = sparrow / Rhead**2.0d0 &
26897 - hawk / Rhead**4.0d0
26898 !c!-------------------------------------------------------------------
26899 !c! derivative of ecl is Gcl
26901 dGCLdR = - 2.0d0 * sparrow / Rhead**3.0d0 &
26902 + 4.0d0 * hawk / Rhead**5.0d0
26904 dGCLdOM1 = (w1 * Qj) / (Rhead**2.0d0)
26906 dGCLdOM2 = (2.0d0 * w2 * Qj * Qj * om2) / (Rhead ** 4.0d0)
26907 !c--------------------------------------------------------------------
26908 !c--------------------------------------------------------------------
26909 !c Polarization energy
26911 MomoFac2 = (1.0d0 - chi2 * sqom1)
26912 RR2 = R2 * R2 / MomoFac2
26913 ee2 = exp(-(RR2 / (4.0d0 * a12sq)))
26914 fgb2 = sqrt(RR2 + a12sq * ee2)
26915 epol = 332.0d0 * eps_inout_fac * ((alphapol2/fgb2) ** 4.0d0 )
26916 dPOLdFGB2 = -(1328.0d0 * eps_inout_fac * alphapol2 ** 4.0d0) &
26918 dFGBdR2 = ( (R2 / MomoFac2) &
26919 * ( 2.0d0 - (0.5d0 * ee2) ) ) &
26921 dFGBdOM1 = (((R2 * R2 * chi2 * om1) / (MomoFac2 * MomoFac2)) &
26922 * (2.0d0 - 0.5d0 * ee2) ) &
26924 dPOLdR2 = dPOLdFGB2 * dFGBdR2
26925 !c! dPOLdR2 = 0.0d0
26926 dPOLdOM1 = dPOLdFGB2 * dFGBdOM1
26927 !c! dPOLdOM1 = 0.0d0
26929 !c!-------------------------------------------------------------------
26931 pom = (pis / Rhead)**6.0d0
26932 Elj = 4.0d0 * eps_head * pom * (pom-1.0d0)
26933 !c! derivative of Elj is Glj
26934 dGLJdR = 4.0d0 * eps_head &
26935 * (((-12.0d0*pis**12.0d0)/(Rhead**13.0d0)) &
26936 + (( 6.0d0*pis**6.0d0) /(Rhead**7.0d0)))
26937 !c!-------------------------------------------------------------------
26939 !c! Return the results
26940 !c! (see comments in Eqq)
26942 erhead(k) = Rhead_distance(k)/Rhead
26943 erhead_tail(k,2) = ((chead(k,2)-ctail(k,1))/R2)
26945 erdxi = scalar( erhead(1), dC_norm(1,i+nres) )
26946 erdxj = scalar( erhead(1), dC_norm(1,j) )
26947 eagle = scalar( erhead_tail(1,2), dC_norm(1,j) )
26948 adler = scalar( erhead_tail(1,2), dC_norm(1,i+nres) )
26949 facd1 = d1 * vbld_inv(i+nres)
26950 facd2 = d2 * vbld_inv(j)
26951 facd3 = dtailcat(1,itypi,itypj) * vbld_inv(i+nres)
26953 condor = (erhead_tail(k,2) &
26954 + facd2 * (erhead_tail(k,2) - eagle * dC_norm(k,j)))
26956 pom = erhead(k)+facd1*(erhead(k)-erdxi*dC_norm(k,i+nres))
26957 gradpepcatx(k,i) = gradpepcatx(k,i) &
26959 - dPOLdR2 * (erhead_tail(k,2) &
26960 -facd3 * (erhead_tail(k,2) - adler * dC_norm(k,i+nres))) &
26963 pom = erhead(k)+facd2*(erhead(k)-erdxj*dC_norm(k,j))
26964 ! gradpepcatx(k,j) = gradpepcatx(k,j) &
26966 ! + dPOLdR2 * condor &
26970 gradpepcat(k,i) = gradpepcat(k,i) &
26971 - dGCLdR * erhead(k) &
26972 - dPOLdR2 * erhead_tail(k,2) &
26973 - dGLJdR * erhead(k)
26975 gradpepcat(k,j) = gradpepcat(k,j) &
26976 + dGCLdR * erhead(k) &
26977 + dPOLdR2 * erhead_tail(k,2) &
26978 + dGLJdR * erhead(k)
26982 END SUBROUTINE edq_cat
26984 SUBROUTINE edq_cat_pep(Ecl,Elj,Epol)
26988 double precision facd3, adler,ecl,elj,epol
26989 alphapol2 = alphapolcat(itypj,itypi)
26990 w1 = wqdipcat(1,itypi,itypj)
26991 w2 = wqdipcat(2,itypi,itypj)
26992 pis = sig0headcat(itypi,itypj)
26993 eps_head = epsheadcat(itypi,itypj)
26994 !c!-------------------------------------------------------------------
26995 !c! R2 - distance between head of jth side chain and tail of ith sidechain
26998 !c! Calculate head-to-tail distances
26999 R2=R2+(chead(k,2)-ctail(k,1))**2
27004 !c! R1 = dsqrt((Rtail**2)+((dtail(1,itypi,itypj)
27005 !c! & +dhead(1,1,itypi,itypj))**2))
27006 !c! R2 = dsqrt((Rtail**2)+((dtail(2,itypi,itypj)
27007 !c! & +dhead(2,1,itypi,itypj))**2))
27010 !c!-------------------------------------------------------------------
27012 sparrow = w1 * Qj * om1
27013 hawk = w2 * Qj * Qj * (1.0d0 - sqom2)
27014 ! print *,"CO2", itypi,itypj
27015 ! print *,"CO?!.", w1,w2,Qj,om1
27016 ECL = sparrow / Rhead**2.0d0 &
27017 - hawk / Rhead**4.0d0
27018 !c!-------------------------------------------------------------------
27019 !c! derivative of ecl is Gcl
27021 dGCLdR = - 2.0d0 * sparrow / Rhead**3.0d0 &
27022 + 4.0d0 * hawk / Rhead**5.0d0
27024 dGCLdOM1 = (w1 * Qj) / (Rhead**2.0d0)
27026 dGCLdOM2 = (2.0d0 * w2 * Qj * Qj * om2) / (Rhead ** 4.0d0)
27027 !c--------------------------------------------------------------------
27028 !c--------------------------------------------------------------------
27029 !c Polarization energy
27031 MomoFac2 = (1.0d0 - chi2 * sqom1)
27032 RR2 = R2 * R2 / MomoFac2
27033 ee2 = exp(-(RR2 / (4.0d0 * a12sq)))
27034 fgb2 = sqrt(RR2 + a12sq * ee2)
27035 epol = 332.0d0 * eps_inout_fac * ((alphapol2/fgb2) ** 4.0d0 )
27036 dPOLdFGB2 = -(1328.0d0 * eps_inout_fac * alphapol2 ** 4.0d0) &
27038 dFGBdR2 = ( (R2 / MomoFac2) &
27039 * ( 2.0d0 - (0.5d0 * ee2) ) ) &
27041 dFGBdOM1 = (((R2 * R2 * chi2 * om1) / (MomoFac2 * MomoFac2)) &
27042 * (2.0d0 - 0.5d0 * ee2) ) &
27044 dPOLdR2 = dPOLdFGB2 * dFGBdR2
27045 !c! dPOLdR2 = 0.0d0
27046 dPOLdOM1 = dPOLdFGB2 * dFGBdOM1
27047 !c! dPOLdOM1 = 0.0d0
27049 !c!-------------------------------------------------------------------
27051 pom = (pis / Rhead)**6.0d0
27052 Elj = 4.0d0 * eps_head * pom * (pom-1.0d0)
27053 !c! derivative of Elj is Glj
27054 dGLJdR = 4.0d0 * eps_head &
27055 * (((-12.0d0*pis**12.0d0)/(Rhead**13.0d0)) &
27056 + (( 6.0d0*pis**6.0d0) /(Rhead**7.0d0)))
27057 !c!-------------------------------------------------------------------
27059 !c! Return the results
27060 !c! (see comments in Eqq)
27062 erhead(k) = Rhead_distance(k)/Rhead
27063 erhead_tail(k,2) = ((chead(k,2)-ctail(k,1))/R2)
27065 erdxi = scalar( erhead(1), dC_norm(1,i) )
27066 erdxj = scalar( erhead(1), dC_norm(1,j) )
27067 eagle = scalar( erhead_tail(1,2), dC_norm(1,j) )
27068 adler = scalar( erhead_tail(1,2), dC_norm(1,i) )
27069 facd1 = d1 * vbld_inv(i+1)/2.0
27070 facd2 = d2 * vbld_inv(j)
27071 facd3 = dtailcat(1,itypi,itypj) * vbld_inv(i+1)/2.0
27073 condor = (erhead_tail(k,2) &
27074 + facd2 * (erhead_tail(k,2) - eagle * dC_norm(k,j)))
27076 pom = erhead(k)+facd1*(erhead(k)-erdxi*dC_norm(k,i))
27077 ! gradpepcatx(k,i) = gradpepcatx(k,i) &
27079 ! - dPOLdR2 * (erhead_tail(k,2) &
27080 ! -facd3 * (erhead_tail(k,2) - adler * dC_norm(k,i+nres))) &
27083 pom = erhead(k)+facd2*(erhead(k)-erdxj*dC_norm(k,j))
27084 ! gradpepcatx(k,j) = gradpepcatx(k,j) &
27086 ! + dPOLdR2 * condor &
27090 gradpepcat(k,i) = gradpepcat(k,i) +0.5d0*( &
27091 - dGCLdR * erhead(k) &
27092 - dPOLdR2 * erhead_tail(k,2) &
27093 - dGLJdR * erhead(k))
27094 gradpepcat(k,i+1) = gradpepcat(k,i+1) +0.5d0*( &
27095 - dGCLdR * erhead(k) &
27096 - dPOLdR2 * erhead_tail(k,2) &
27097 - dGLJdR * erhead(k))
27100 gradpepcat(k,j) = gradpepcat(k,j) &
27101 + dGCLdR * erhead(k) &
27102 + dPOLdR2 * erhead_tail(k,2) &
27103 + dGLJdR * erhead(k)
27107 END SUBROUTINE edq_cat_pep
27109 SUBROUTINE edd(ECL)
27114 double precision ecl
27115 !c! csig = sigiso(itypi,itypj)
27116 w1 = wqdip(1,itypi,itypj)
27117 w2 = wqdip(2,itypi,itypj)
27118 !c!-------------------------------------------------------------------
27120 fac = (om12 - 3.0d0 * om1 * om2)
27121 c1 = (w1 / (Rhead**3.0d0)) * fac
27122 c2 = (w2 / Rhead ** 6.0d0) &
27123 * (4.0d0 + fac * fac -3.0d0 * (sqom1 + sqom2))
27125 !c! write (*,*) "w1 = ", w1
27126 !c! write (*,*) "w2 = ", w2
27127 !c! write (*,*) "om1 = ", om1
27128 !c! write (*,*) "om2 = ", om2
27129 !c! write (*,*) "om12 = ", om12
27130 !c! write (*,*) "fac = ", fac
27131 !c! write (*,*) "c1 = ", c1
27132 !c! write (*,*) "c2 = ", c2
27133 !c! write (*,*) "Ecl = ", Ecl
27134 !c! write (*,*) "c2_1 = ", (w2 / Rhead ** 6.0d0)
27135 !c! write (*,*) "c2_2 = ",
27136 !c! & (4.0d0 + fac * fac -3.0d0 * (sqom1 + sqom2))
27137 !c!-------------------------------------------------------------------
27138 !c! dervative of ECL is GCL...
27140 c1 = (-3.0d0 * w1 * fac) / (Rhead ** 4.0d0)
27141 c2 = (-6.0d0 * w2) / (Rhead ** 7.0d0) &
27142 * (4.0d0 + fac * fac - 3.0d0 * (sqom1 + sqom2))
27145 c1 = (-3.0d0 * w1 * om2 ) / (Rhead**3.0d0)
27146 c2 = (-6.0d0 * w2) / (Rhead**6.0d0) &
27147 * ( om2 * om12 - 3.0d0 * om1 * sqom2 + om1 )
27150 c1 = (-3.0d0 * w1 * om1 ) / (Rhead**3.0d0)
27151 c2 = (-6.0d0 * w2) / (Rhead**6.0d0) &
27152 * ( om1 * om12 - 3.0d0 * sqom1 * om2 + om2 )
27155 c1 = w1 / (Rhead ** 3.0d0)
27156 c2 = ( 2.0d0 * w2 * fac ) / Rhead ** 6.0d0
27157 dGCLdOM12 = c1 - c2
27158 !c!-------------------------------------------------------------------
27159 !c! Return the results
27160 !c! (see comments in Eqq)
27162 erhead(k) = Rhead_distance(k)/Rhead
27164 erdxi = scalar( erhead(1), dC_norm(1,i+nres) )
27165 erdxj = scalar( erhead(1), dC_norm(1,j+nres) )
27166 facd1 = d1 * vbld_inv(i+nres)
27167 facd2 = d2 * vbld_inv(j+nres)
27170 pom = erhead(k)+facd1*(erhead(k)-erdxi*dC_norm(k,i+nres))
27171 gvdwx(k,i) = gvdwx(k,i) - dGCLdR * pom
27172 pom = erhead(k)+facd2*(erhead(k)-erdxj*dC_norm(k,j+nres))
27173 gvdwx(k,j) = gvdwx(k,j) + dGCLdR * pom
27175 gvdwc(k,i) = gvdwc(k,i) - dGCLdR * erhead(k)
27176 gvdwc(k,j) = gvdwc(k,j) + dGCLdR * erhead(k)
27180 SUBROUTINE elgrad_init(eheadtail,Egb,Ecl,Elj,Equad,Epol)
27185 real(kind=8) :: eheadtail,Egb,Ecl,Elj,Equad,Epol,Rb
27189 !c! 1/(Gas Constant * Thermostate temperature) = BetaT
27190 !c! ENABLE THIS LINE WHEN USING CHECKGRAD!!!
27192 !c! BetaT = 1.0d0 / (t_bath * Rb)i
27194 BetaT = 1.0d0 / (298.0d0 * Rb)
27195 !c! Gay-berne var's
27196 sig0ij = sigma( itypi,itypj )
27197 chi1 = chi( itypi, itypj )
27198 chi2 = chi( itypj, itypi )
27199 chi12 = chi1 * chi2
27200 chip1 = chipp( itypi, itypj )
27201 chip2 = chipp( itypj, itypi )
27202 chip12 = chip1 * chip2
27209 !c! not used by momo potential, but needed by sc_angular which is shared
27210 !c! by all energy_potential subroutines
27214 !c! location, location, location
27215 ! xj = c( 1, nres+j ) - xi
27216 ! yj = c( 2, nres+j ) - yi
27217 ! zj = c( 3, nres+j ) - zi
27218 dxj = dc_norm( 1, nres+j )
27219 dyj = dc_norm( 2, nres+j )
27220 dzj = dc_norm( 3, nres+j )
27221 !c! distance from center of chain(?) to polar/charged head
27222 !c! write (*,*) "istate = ", 1
27223 !c! write (*,*) "ii = ", 1
27224 !c! write (*,*) "jj = ", 1
27225 d1 = dhead(1, 1, itypi, itypj)
27226 d2 = dhead(2, 1, itypi, itypj)
27228 a12sq = rborn(itypi,itypj) * rborn(itypj,itypi)
27229 !c! a12sq = a12sq * a12sq
27230 !c! charge of amino acid itypi is...
27231 Qi = icharge(itypi)
27232 Qj = icharge(itypj)
27235 chis1 = chis(itypi,itypj)
27236 chis2 = chis(itypj,itypi)
27237 chis12 = chis1 * chis2
27238 sig1 = sigmap1(itypi,itypj)
27239 sig2 = sigmap2(itypi,itypj)
27240 !c! write (*,*) "sig1 = ", sig1
27241 !c! write (*,*) "sig2 = ", sig2
27242 !c! alpha factors from Fcav/Gcav
27243 b1cav = alphasur(1,itypi,itypj)
27245 b2cav = alphasur(2,itypi,itypj)
27246 b3cav = alphasur(3,itypi,itypj)
27247 b4cav = alphasur(4,itypi,itypj)
27248 wqd = wquad(itypi, itypj)
27250 eps_in = epsintab(itypi,itypj)
27251 eps_inout_fac = ( (1.0d0/eps_in) - (1.0d0/eps_out))
27252 !c! write (*,*) "eps_inout_fac = ", eps_inout_fac
27253 !c!-------------------------------------------------------------------
27254 !c! tail location and distance calculations
27257 ctail(k,1)=c(k,i+nres)-dtail(1,itypi,itypj)*dc_norm(k,nres+i)
27258 ctail(k,2)=c(k,j+nres)-dtail(2,itypi,itypj)*dc_norm(k,nres+j)
27260 !c! tail distances will be themselves usefull elswhere
27261 !c1 (in Gcav, for example)
27262 Rtail_distance(1) = ctail( 1, 2 ) - ctail( 1,1 )
27263 Rtail_distance(2) = ctail( 2, 2 ) - ctail( 2,1 )
27264 Rtail_distance(3) = ctail( 3, 2 ) - ctail( 3,1 )
27266 (Rtail_distance(1)*Rtail_distance(1)) &
27267 + (Rtail_distance(2)*Rtail_distance(2)) &
27268 + (Rtail_distance(3)*Rtail_distance(3)))
27269 !c!-------------------------------------------------------------------
27270 !c! Calculate location and distance between polar heads
27271 !c! distance between heads
27272 !c! for each one of our three dimensional space...
27273 d1 = dhead(1, 1, itypi, itypj)
27274 d2 = dhead(2, 1, itypi, itypj)
27277 !c! location of polar head is computed by taking hydrophobic centre
27278 !c! and moving by a d1 * dc_norm vector
27279 !c! see unres publications for very informative images
27280 chead(k,1) = c(k, i+nres) + d1 * dc_norm(k, i+nres)
27281 chead(k,2) = c(k, j+nres) + d2 * dc_norm(k, j+nres)
27283 !c! Rsc_distance(k) = dabs(c(k, i+nres) - c(k, j+nres))
27284 !c! Rsc(k) = Rsc_distance(k) * Rsc_distance(k)
27285 Rhead_distance(k) = chead(k,2) - chead(k,1)
27287 !c! pitagoras (root of sum of squares)
27289 (Rhead_distance(1)*Rhead_distance(1)) &
27290 + (Rhead_distance(2)*Rhead_distance(2)) &
27291 + (Rhead_distance(3)*Rhead_distance(3)))
27292 !c!-------------------------------------------------------------------
27293 !c! zero everything that should be zero'ed
27306 END SUBROUTINE elgrad_init
27309 SUBROUTINE elgrad_init_cat(eheadtail,Egb,Ecl,Elj,Equad,Epol)
27312 real(kind=8) :: eheadtail,Egb,Ecl,Elj,Equad,Epol,Rb
27316 !c! 1/(Gas Constant * Thermostate temperature) = BetaT
27317 !c! ENABLE THIS LINE WHEN USING CHECKGRAD!!!
27319 !c! BetaT = 1.0d0 / (t_bath * Rb)i
27321 BetaT = 1.0d0 / (298.0d0 * Rb)
27322 !c! Gay-berne var's
27323 sig0ij = sigmacat( itypi,itypj )
27324 chi1 = chi1cat( itypi, itypj )
27327 chip1 = chipp1cat( itypi, itypj )
27330 !c! not used by momo potential, but needed by sc_angular which is shared
27331 !c! by all energy_potential subroutines
27335 dxj = dc_norm( 1, nres+j )
27336 dyj = dc_norm( 2, nres+j )
27337 dzj = dc_norm( 3, nres+j )
27338 !c! distance from center of chain(?) to polar/charged head
27339 d1 = dheadcat(1, 1, itypi, itypj)
27340 d2 = dheadcat(2, 1, itypi, itypj)
27342 a12sq = rborn1cat(itypi,itypj) * rborn2cat(itypi,itypj)
27343 !c! a12sq = a12sq * a12sq
27344 !c! charge of amino acid itypi is...
27345 Qi = icharge(itypi)
27346 Qj = ichargecat(itypj)
27349 chis1 = chis1cat(itypi,itypj)
27352 sig1 = sigmap1cat(itypi,itypj)
27353 sig2 = sigmap2cat(itypi,itypj)
27354 !c! alpha factors from Fcav/Gcav
27355 b1cav = alphasurcat(1,itypi,itypj)
27356 b2cav = alphasurcat(2,itypi,itypj)
27357 b3cav = alphasurcat(3,itypi,itypj)
27358 b4cav = alphasurcat(4,itypi,itypj)
27359 wqd = wquadcat(itypi, itypj)
27361 eps_in = epsintabcat(itypi,itypj)
27362 eps_inout_fac = ( (1.0d0/eps_in) - (1.0d0/eps_out))
27363 !c!-------------------------------------------------------------------
27364 !c! tail location and distance calculations
27367 ctail(k,1)=c(k,i+nres)-dtailcat(1,itypi,itypj)*dc_norm(k,nres+i)
27368 ctail(k,2)=c(k,j)!-dtailcat(2,itypi,itypj)*dc_norm(k,nres+j)
27370 !c! tail distances will be themselves usefull elswhere
27371 !c1 (in Gcav, for example)
27372 Rtail_distance(1) = ctail( 1, 2 ) - ctail( 1,1 )
27373 Rtail_distance(2) = ctail( 2, 2 ) - ctail( 2,1 )
27374 Rtail_distance(3) = ctail( 3, 2 ) - ctail( 3,1 )
27376 (Rtail_distance(1)*Rtail_distance(1)) &
27377 + (Rtail_distance(2)*Rtail_distance(2)) &
27378 + (Rtail_distance(3)*Rtail_distance(3)))
27379 !c!-------------------------------------------------------------------
27380 !c! Calculate location and distance between polar heads
27381 !c! distance between heads
27382 !c! for each one of our three dimensional space...
27383 d1 = dheadcat(1, 1, itypi, itypj)
27384 d2 = dheadcat(2, 1, itypi, itypj)
27387 !c! location of polar head is computed by taking hydrophobic centre
27388 !c! and moving by a d1 * dc_norm vector
27389 !c! see unres publications for very informative images
27390 chead(k,1) = c(k, i+nres) + d1 * dc_norm(k, i+nres)
27391 chead(k,2) = c(k, j)
27393 !c! Rsc_distance(k) = dabs(c(k, i+nres) - c(k, j+nres))
27394 !c! Rsc(k) = Rsc_distance(k) * Rsc_distance(k)
27395 Rhead_distance(k) = chead(k,2) - chead(k,1)
27397 !c! pitagoras (root of sum of squares)
27399 (Rhead_distance(1)*Rhead_distance(1)) &
27400 + (Rhead_distance(2)*Rhead_distance(2)) &
27401 + (Rhead_distance(3)*Rhead_distance(3)))
27402 !c!-------------------------------------------------------------------
27403 !c! zero everything that should be zero'ed
27416 END SUBROUTINE elgrad_init_cat
27418 SUBROUTINE elgrad_init_cat_pep(eheadtail,Egb,Ecl,Elj,Equad,Epol)
27421 real(kind=8) :: eheadtail,Egb,Ecl,Elj,Equad,Epol,Rb
27425 !c! 1/(Gas Constant * Thermostate temperature) = BetaT
27426 !c! ENABLE THIS LINE WHEN USING CHECKGRAD!!!
27428 !c! BetaT = 1.0d0 / (t_bath * Rb)i
27430 BetaT = 1.0d0 / (298.0d0 * Rb)
27431 !c! Gay-berne var's
27432 sig0ij = sigmacat( itypi,itypj )
27433 chi1 = chi1cat( itypi, itypj )
27436 chip1 = chipp1cat( itypi, itypj )
27439 !c! not used by momo potential, but needed by sc_angular which is shared
27440 !c! by all energy_potential subroutines
27444 dxj = 0.0d0 !dc_norm( 1, nres+j )
27445 dyj = 0.0d0 !dc_norm( 2, nres+j )
27446 dzj = 0.0d0 !dc_norm( 3, nres+j )
27447 !c! distance from center of chain(?) to polar/charged head
27448 d1 = dheadcat(1, 1, itypi, itypj)
27449 d2 = dheadcat(2, 1, itypi, itypj)
27451 a12sq = rborn1cat(itypi,itypj) * rborn2cat(itypi,itypj)
27452 !c! a12sq = a12sq * a12sq
27453 !c! charge of amino acid itypi is...
27455 Qj = ichargecat(itypj)
27458 chis1 = chis1cat(itypi,itypj)
27461 sig1 = sigmap1cat(itypi,itypj)
27462 sig2 = sigmap2cat(itypi,itypj)
27463 !c! alpha factors from Fcav/Gcav
27464 b1cav = alphasurcat(1,itypi,itypj)
27465 b2cav = alphasurcat(2,itypi,itypj)
27466 b3cav = alphasurcat(3,itypi,itypj)
27467 b4cav = alphasurcat(4,itypi,itypj)
27468 wqd = wquadcat(itypi, itypj)
27470 eps_in = epsintabcat(itypi,itypj)
27471 eps_inout_fac = ( (1.0d0/eps_in) - (1.0d0/eps_out))
27472 !c!-------------------------------------------------------------------
27473 !c! tail location and distance calculations
27476 ctail(k,1)=(c(k,i)+c(k,i+1))/2.0-dtailcat(1,itypi,itypj)*dc_norm(k,i)
27477 ctail(k,2)=c(k,j)!-dtailcat(2,itypi,itypj)*dc_norm(k,nres+j)
27479 !c! tail distances will be themselves usefull elswhere
27480 !c1 (in Gcav, for example)
27481 Rtail_distance(1) = ctail( 1, 2 ) - ctail( 1,1 )
27482 Rtail_distance(2) = ctail( 2, 2 ) - ctail( 2,1 )
27483 Rtail_distance(3) = ctail( 3, 2 ) - ctail( 3,1 )
27485 (Rtail_distance(1)*Rtail_distance(1)) &
27486 + (Rtail_distance(2)*Rtail_distance(2)) &
27487 + (Rtail_distance(3)*Rtail_distance(3)))
27488 !c!-------------------------------------------------------------------
27489 !c! Calculate location and distance between polar heads
27490 !c! distance between heads
27491 !c! for each one of our three dimensional space...
27492 d1 = dheadcat(1, 1, itypi, itypj)
27493 d2 = dheadcat(2, 1, itypi, itypj)
27496 !c! location of polar head is computed by taking hydrophobic centre
27497 !c! and moving by a d1 * dc_norm vector
27498 !c! see unres publications for very informative images
27499 chead(k,1) = (c(k, i)+c(k,i+1))/2.0 + d1 * dc_norm(k, i)
27500 chead(k,2) = c(k, j)
27502 !c! Rsc_distance(k) = dabs(c(k, i+nres) - c(k, j+nres))
27503 !c! Rsc(k) = Rsc_distance(k) * Rsc_distance(k)
27504 Rhead_distance(k) = chead(k,2) - chead(k,1)
27506 !c! pitagoras (root of sum of squares)
27508 (Rhead_distance(1)*Rhead_distance(1)) &
27509 + (Rhead_distance(2)*Rhead_distance(2)) &
27510 + (Rhead_distance(3)*Rhead_distance(3)))
27511 !c!-------------------------------------------------------------------
27512 !c! zero everything that should be zero'ed
27525 END SUBROUTINE elgrad_init_cat_pep
27527 double precision function tschebyshev(m,n,x,y)
27530 double precision x(n),y,yy(0:maxvar),aux
27531 !c Tschebyshev polynomial. Note that the first term is omitted
27532 !c m=0: the constant term is included
27533 !c m=1: the constant term is not included
27537 yy(i)=2*yy(1)*yy(i-1)-yy(i-2)
27545 end function tschebyshev
27546 !C--------------------------------------------------------------------------
27547 double precision function gradtschebyshev(m,n,x,y)
27550 double precision x(n+1),y,yy(0:maxvar),aux
27551 !c Tschebyshev polynomial. Note that the first term is omitted
27552 !c m=0: the constant term is included
27553 !c m=1: the constant term is not included
27557 yy(i)=2*y*yy(i-1)-yy(i-2)
27561 aux=aux+x(i+1)*yy(i)*(i+1)
27562 !C print *, x(i+1),yy(i),i
27564 gradtschebyshev=aux
27566 end function gradtschebyshev
27568 subroutine make_SCSC_inter_list
27570 real*8 :: xi,yi,zi,xj,yj,zj,xj_safe,yj_safe,zj_safe,xj_temp,yj_temp,zj_temp
27571 real*8 :: dist_init, dist_temp,r_buff_list
27572 integer:: contlisti(250*nres),contlistj(250*nres)
27573 ! integer :: newcontlisti(200*nres),newcontlistj(200*nres)
27574 integer i,j,itypi,itypj,subchap,xshift,yshift,zshift,iint,ilist_sc,g_ilist_sc
27575 integer displ(0:nprocs),i_ilist_sc(0:nprocs),ierr
27576 ! print *,"START make_SC"
27579 do i=iatsc_s,iatsc_e
27580 itypi=iabs(itype(i,1))
27581 if (itypi.eq.ntyp1) cycle
27585 call to_box(xi,yi,zi)
27586 do iint=1,nint_gr(i)
27587 do j=istart(i,iint),iend(i,iint)
27588 itypj=iabs(itype(j,1))
27589 if (itypj.eq.ntyp1) cycle
27593 call to_box(xj,yj,zj)
27594 ! call lipid_layer(xj,yj,zj,sslipj,ssgradlipj)
27595 ! faclipij2=(sslipi+sslipj)/2.0d0*lipscale**2+1.0d0
27596 xj=boxshift(xj-xi,boxxsize)
27597 yj=boxshift(yj-yi,boxysize)
27598 zj=boxshift(zj-zi,boxzsize)
27599 dist_init=xj**2+yj**2+zj**2
27600 ! dist_init=(xj-xi)**2+(yj-yi)**2+(zj-zi)**2
27601 ! r_buff_list is a read value for a buffer
27602 if (sqrt(dist_init).le.(r_cut_ele+r_buff_list)) then
27603 ! Here the list is created
27604 ilist_sc=ilist_sc+1
27605 ! this can be substituted by cantor and anti-cantor
27606 contlisti(ilist_sc)=i
27607 contlistj(ilist_sc)=j
27613 ! call MPI_Reduce(ilist_sc,g_ilist_sc,1,&
27614 ! MPI_INTEGER,MPI_SUM,king,FG_COMM,IERR)
27615 ! call MPI_Gather(newnss,1,MPI_INTEGER,&
27616 ! i_newnss,1,MPI_INTEGER,king,FG_COMM,IERR)
27618 write (iout,*) "before MPIREDUCE",ilist_sc
27620 write (iout,*) i,contlisti(i),contlistj(i)
27623 if (nfgtasks.gt.1)then
27625 call MPI_Reduce(ilist_sc,g_ilist_sc,1,&
27626 MPI_INTEGER,MPI_SUM,king,FG_COMM,IERR)
27627 ! write(iout,*) "before bcast",g_ilist_sc
27628 call MPI_Gather(ilist_sc,1,MPI_INTEGER,&
27629 i_ilist_sc,1,MPI_INTEGER,king,FG_COMM,IERR)
27631 do i=1,nfgtasks-1,1
27632 displ(i)=i_ilist_sc(i-1)+displ(i-1)
27634 ! write(iout,*) "before gather",displ(0),displ(1)
27635 call MPI_Gatherv(contlisti,ilist_sc,MPI_INTEGER,&
27636 newcontlisti,i_ilist_sc,displ,MPI_INTEGER,&
27638 call MPI_Gatherv(contlistj,ilist_sc,MPI_INTEGER,&
27639 newcontlistj,i_ilist_sc,displ,MPI_INTEGER,&
27641 call MPI_Bcast(g_ilist_sc,1,MPI_INT,king,FG_COMM,IERR)
27642 ! write(iout,*) "before bcast",g_ilist_sc
27643 ! call MPI_Bcast(g_ilist_sc,1,MPI_INT,king,FG_COMM)
27644 call MPI_Bcast(newcontlisti,g_ilist_sc,MPI_INT,king,FG_COMM,IERR)
27645 call MPI_Bcast(newcontlistj,g_ilist_sc,MPI_INT,king,FG_COMM,IERR)
27647 ! call MPI_Bcast(g_ilist_sc,1,MPI_INT,king,FG_COMM)
27650 g_ilist_sc=ilist_sc
27653 newcontlisti(i)=contlisti(i)
27654 newcontlistj(i)=contlistj(i)
27659 write (iout,*) "after MPIREDUCE",g_ilist_sc
27661 write (iout,*) i,newcontlisti(i),newcontlistj(i)
27664 call int_bounds(g_ilist_sc,g_listscsc_start,g_listscsc_end)
27666 end subroutine make_SCSC_inter_list
27667 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
27669 subroutine make_SCp_inter_list
27670 use MD_data, only: itime_mat
27673 real*8 :: xi,yi,zi,xj,yj,zj,xj_safe,yj_safe,zj_safe,xj_temp,yj_temp,zj_temp
27674 real*8 :: dist_init, dist_temp,r_buff_list
27675 integer:: contlistscpi(250*nres),contlistscpj(250*nres)
27676 ! integer :: newcontlistscpi(200*nres),newcontlistscpj(200*nres)
27677 integer i,j,itypi,itypj,subchap,xshift,yshift,zshift,iint,ilist_scp,g_ilist_scp
27678 integer displ(0:nprocs),i_ilist_scp(0:nprocs),ierr
27679 ! print *,"START make_SC"
27682 do i=iatscp_s,iatscp_e
27683 if (itype(i,1).eq.ntyp1 .or. itype(i+1,1).eq.ntyp1) cycle
27684 xi=0.5D0*(c(1,i)+c(1,i+1))
27685 yi=0.5D0*(c(2,i)+c(2,i+1))
27686 zi=0.5D0*(c(3,i)+c(3,i+1))
27687 call to_box(xi,yi,zi)
27688 do iint=1,nscp_gr(i)
27690 do j=iscpstart(i,iint),iscpend(i,iint)
27691 itypj=iabs(itype(j,1))
27692 if (itypj.eq.ntyp1) cycle
27693 ! Uncomment following three lines for SC-p interactions
27694 ! xj=c(1,nres+j)-xi
27695 ! yj=c(2,nres+j)-yi
27696 ! zj=c(3,nres+j)-zi
27697 ! Uncomment following three lines for Ca-p interactions
27704 call to_box(xj,yj,zj)
27705 xj=boxshift(xj-xi,boxxsize)
27706 yj=boxshift(yj-yi,boxysize)
27707 zj=boxshift(zj-zi,boxzsize)
27708 dist_init=xj**2+yj**2+zj**2
27710 ! r_buff_list is a read value for a buffer
27711 if ((sqrt(dist_init).le.(r_cut_ele)).and.(ifirstrun.eq.0)) then
27712 ! Here the list is created
27713 ilist_scp_first=ilist_scp_first+1
27714 ! this can be substituted by cantor and anti-cantor
27715 contlistscpi_f(ilist_scp_first)=i
27716 contlistscpj_f(ilist_scp_first)=j
27719 ! r_buff_list is a read value for a buffer
27720 if (sqrt(dist_init).le.(r_cut_ele+r_buff_list)) then
27721 ! Here the list is created
27722 ilist_scp=ilist_scp+1
27723 ! this can be substituted by cantor and anti-cantor
27724 contlistscpi(ilist_scp)=i
27725 contlistscpj(ilist_scp)=j
27731 write (iout,*) "before MPIREDUCE",ilist_scp
27733 write (iout,*) i,contlistscpi(i),contlistscpj(i)
27736 if (nfgtasks.gt.1)then
27738 call MPI_Reduce(ilist_scp,g_ilist_scp,1,&
27739 MPI_INTEGER,MPI_SUM,king,FG_COMM,IERR)
27740 ! write(iout,*) "before bcast",g_ilist_sc
27741 call MPI_Gather(ilist_scp,1,MPI_INTEGER,&
27742 i_ilist_scp,1,MPI_INTEGER,king,FG_COMM,IERR)
27744 do i=1,nfgtasks-1,1
27745 displ(i)=i_ilist_scp(i-1)+displ(i-1)
27747 ! write(iout,*) "before gather",displ(0),displ(1)
27748 call MPI_Gatherv(contlistscpi,ilist_scp,MPI_INTEGER,&
27749 newcontlistscpi,i_ilist_scp,displ,MPI_INTEGER,&
27751 call MPI_Gatherv(contlistscpj,ilist_scp,MPI_INTEGER,&
27752 newcontlistscpj,i_ilist_scp,displ,MPI_INTEGER,&
27754 call MPI_Bcast(g_ilist_scp,1,MPI_INT,king,FG_COMM,IERR)
27755 ! write(iout,*) "before bcast",g_ilist_sc
27756 ! call MPI_Bcast(g_ilist_sc,1,MPI_INT,king,FG_COMM)
27757 call MPI_Bcast(newcontlistscpi,g_ilist_scp,MPI_INT,king,FG_COMM,IERR)
27758 call MPI_Bcast(newcontlistscpj,g_ilist_scp,MPI_INT,king,FG_COMM,IERR)
27760 ! call MPI_Bcast(g_ilist_sc,1,MPI_INT,king,FG_COMM)
27763 g_ilist_scp=ilist_scp
27766 newcontlistscpi(i)=contlistscpi(i)
27767 newcontlistscpj(i)=contlistscpj(i)
27772 write (iout,*) "after MPIREDUCE",g_ilist_scp
27774 write (iout,*) i,newcontlistscpi(i),newcontlistscpj(i)
27777 ! if (ifirstrun.eq.0) ifirstrun=1
27778 ! do i=1,ilist_scp_first
27779 ! do j=1,g_ilist_scp
27780 ! if ((newcontlistscpi(j).eq.contlistscpi_f(i)).and.&
27781 ! (newcontlistscpj(j).eq.contlistscpj_f(i))) go to 126
27783 ! print *,itime_mat,"ERROR matrix needs updating"
27784 ! print *,contlistscpi_f(i),contlistscpj_f(i)
27788 call int_bounds(g_ilist_scp,g_listscp_start,g_listscp_end)
27791 end subroutine make_SCp_inter_list
27793 !-----------------------------------------------------------------------------
27794 !-----------------------------------------------------------------------------
27797 subroutine make_pp_inter_list
27799 real*8 :: xi,yi,zi,xj,yj,zj,xj_safe,yj_safe,zj_safe,xj_temp,yj_temp,zj_temp
27800 real*8 :: xmedj,ymedj,zmedj,sslipi,ssgradlipi,faclipij2,sslipj,ssgradlipj
27801 real*8 :: dist_init, dist_temp,r_buff_list,dxi,dyi,dzi,xmedi,ymedi,zmedi
27802 real*8 :: dx_normi,dy_normi,dz_normi,dxj,dyj,dzj,dx_normj,dy_normj,dz_normj
27803 integer:: contlistppi(250*nres),contlistppj(250*nres)
27804 ! integer :: newcontlistppi(200*nres),newcontlistppj(200*nres)
27805 integer i,j,itypi,itypj,subchap,xshift,yshift,zshift,iint,ilist_pp,g_ilist_pp
27806 integer displ(0:nprocs),i_ilist_pp(0:nprocs),ierr
27807 ! write(iout,*),"START make_pp",iatel_s,iatel_e,r_cut_ele+r_buff_list
27810 do i=iatel_s,iatel_e
27811 if (itype(i,1).eq.ntyp1 .or. itype(i+1,1).eq.ntyp1) cycle
27815 dx_normi=dc_norm(1,i)
27816 dy_normi=dc_norm(2,i)
27817 dz_normi=dc_norm(3,i)
27818 xmedi=c(1,i)+0.5d0*dxi
27819 ymedi=c(2,i)+0.5d0*dyi
27820 zmedi=c(3,i)+0.5d0*dzi
27822 call to_box(xmedi,ymedi,zmedi)
27823 call lipid_layer(xmedi,ymedi,zmedi,sslipi,ssgradlipi)
27824 ! write (iout,*) i,j,itype(i,1),itype(j,1)
27825 ! if (itype(j,1).eq.ntyp1.or. itype(j+1,1).eq.ntyp1) cycle
27828 do j=ielstart(i),ielend(i)
27829 ! write (iout,*) i,j,itype(i,1),itype(j,1)
27830 if (itype(j,1).eq.ntyp1.or. itype(j+1,1).eq.ntyp1) cycle
27834 dx_normj=dc_norm(1,j)
27835 dy_normj=dc_norm(2,j)
27836 dz_normj=dc_norm(3,j)
27837 ! xj=c(1,j)+0.5D0*dxj-xmedi
27838 ! yj=c(2,j)+0.5D0*dyj-ymedi
27839 ! zj=c(3,j)+0.5D0*dzj-zmedi
27840 xj=c(1,j)+0.5D0*dxj
27841 yj=c(2,j)+0.5D0*dyj
27842 zj=c(3,j)+0.5D0*dzj
27843 call to_box(xj,yj,zj)
27844 ! call lipid_layer(xj,yj,zj,sslipj,ssgradlipj)
27845 ! faclipij2=(sslipi+sslipj)/2.0d0*lipscale**2+1.0d0
27846 xj=boxshift(xj-xmedi,boxxsize)
27847 yj=boxshift(yj-ymedi,boxysize)
27848 zj=boxshift(zj-zmedi,boxzsize)
27849 dist_init=xj**2+yj**2+zj**2
27850 if (sqrt(dist_init).le.(r_cut_ele+r_buff_list)) then
27851 ! Here the list is created
27852 ilist_pp=ilist_pp+1
27853 ! this can be substituted by cantor and anti-cantor
27854 contlistppi(ilist_pp)=i
27855 contlistppj(ilist_pp)=j
27861 write (iout,*) "before MPIREDUCE",ilist_pp
27863 write (iout,*) i,contlistppi(i),contlistppj(i)
27866 if (nfgtasks.gt.1)then
27868 call MPI_Reduce(ilist_pp,g_ilist_pp,1,&
27869 MPI_INTEGER,MPI_SUM,king,FG_COMM,IERR)
27870 ! write(iout,*) "before bcast",g_ilist_sc
27871 call MPI_Gather(ilist_pp,1,MPI_INTEGER,&
27872 i_ilist_pp,1,MPI_INTEGER,king,FG_COMM,IERR)
27874 do i=1,nfgtasks-1,1
27875 displ(i)=i_ilist_pp(i-1)+displ(i-1)
27877 ! write(iout,*) "before gather",displ(0),displ(1)
27878 call MPI_Gatherv(contlistppi,ilist_pp,MPI_INTEGER,&
27879 newcontlistppi,i_ilist_pp,displ,MPI_INTEGER,&
27881 call MPI_Gatherv(contlistppj,ilist_pp,MPI_INTEGER,&
27882 newcontlistppj,i_ilist_pp,displ,MPI_INTEGER,&
27884 call MPI_Bcast(g_ilist_pp,1,MPI_INT,king,FG_COMM,IERR)
27885 ! write(iout,*) "before bcast",g_ilist_sc
27886 ! call MPI_Bcast(g_ilist_sc,1,MPI_INT,king,FG_COMM)
27887 call MPI_Bcast(newcontlistppi,g_ilist_pp,MPI_INT,king,FG_COMM,IERR)
27888 call MPI_Bcast(newcontlistppj,g_ilist_pp,MPI_INT,king,FG_COMM,IERR)
27890 ! call MPI_Bcast(g_ilist_sc,1,MPI_INT,king,FG_COMM)
27893 g_ilist_pp=ilist_pp
27896 newcontlistppi(i)=contlistppi(i)
27897 newcontlistppj(i)=contlistppj(i)
27900 call int_bounds(g_ilist_pp,g_listpp_start,g_listpp_end)
27902 write (iout,*) "after MPIREDUCE",g_ilist_pp
27904 write (iout,*) i,newcontlistppi(i),newcontlistppj(i)
27908 end subroutine make_pp_inter_list
27910 !-----------------------------------------------------------------------------
27911 double precision function boxshift(x,boxsize)
27913 double precision x,boxsize
27914 double precision xtemp
27915 xtemp=dmod(x,boxsize)
27916 if (dabs(xtemp-boxsize).lt.dabs(xtemp)) then
27917 boxshift=xtemp-boxsize
27918 else if (dabs(xtemp+boxsize).lt.dabs(xtemp)) then
27919 boxshift=xtemp+boxsize
27924 end function boxshift
27925 !-----------------------------------------------------------------------------
27926 subroutine to_box(xi,yi,zi)
27928 ! include 'DIMENSIONS'
27929 ! include 'COMMON.CHAIN'
27930 double precision xi,yi,zi
27931 xi=dmod(xi,boxxsize)
27932 if (xi.lt.0.0d0) xi=xi+boxxsize
27933 yi=dmod(yi,boxysize)
27934 if (yi.lt.0.0d0) yi=yi+boxysize
27935 zi=dmod(zi,boxzsize)
27936 if (zi.lt.0.0d0) zi=zi+boxzsize
27938 end subroutine to_box
27939 !--------------------------------------------------------------------------
27940 subroutine lipid_layer(xi,yi,zi,sslipi,ssgradlipi)
27942 ! include 'DIMENSIONS'
27943 ! include 'COMMON.IOUNITS'
27944 ! include 'COMMON.CHAIN'
27945 double precision xi,yi,zi,sslipi,ssgradlipi
27946 double precision fracinbuf
27947 ! double precision sscalelip,sscagradlip
27949 write (iout,*) "bordlipbot",bordlipbot," bordliptop",bordliptop
27950 write (iout,*) "buflipbot",buflipbot," lipbufthick",lipbufthick
27951 write (iout,*) "xi yi zi",xi,yi,zi
27953 if ((zi.gt.bordlipbot).and.(zi.lt.bordliptop)) then
27954 ! the energy transfer exist
27955 if (zi.lt.buflipbot) then
27956 ! what fraction I am in
27957 fracinbuf=1.0d0-((zi-bordlipbot)/lipbufthick)
27958 ! lipbufthick is thickenes of lipid buffore
27959 sslipi=sscalelip(fracinbuf)
27960 ssgradlipi=-sscagradlip(fracinbuf)/lipbufthick
27961 elseif (zi.gt.bufliptop) then
27962 fracinbuf=1.0d0-((bordliptop-zi)/lipbufthick)
27963 sslipi=sscalelip(fracinbuf)
27964 ssgradlipi=sscagradlip(fracinbuf)/lipbufthick
27974 write (iout,*) "sslipi",sslipi," ssgradlipi",ssgradlipi
27977 end subroutine lipid_layer
27979 !--------------------------------------------------------------------------
27980 !--------------------------------------------------------------------------