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,gradcattranx,&
141 gradcattranc,gradcatangc,gradcatangx
142 ! real(kind=8),dimension(:,:),allocatable :: gloc,gloc_x !(maxvar,2)
143 !----------------------------------------
144 real(kind=8),dimension(:,:),allocatable ::gradlipelec,gradlipbond,&
147 real(kind=8),dimension(:,:),allocatable :: gel_loc,gel_loc_long,&
148 gcorr3_turn,gcorr4_turn,gcorr6_turn,gradb,gradbx !(3,maxres)
149 real(kind=8),dimension(:),allocatable :: gel_loc_loc,&
150 gel_loc_turn3,gel_loc_turn4,gel_loc_turn6,gcorr_loc,g_corr5_loc,&
151 g_corr6_loc !(maxvar)
152 real(kind=8),dimension(:,:),allocatable :: gsccorc,gsccorx !(3,maxres)
153 real(kind=8),dimension(:),allocatable :: gsccor_loc !(maxres)
154 ! real(kind=8),dimension(:,:,:),allocatable :: dtheta !(3,2,maxres)
155 real(kind=8),dimension(:,:),allocatable :: gscloc,gsclocx !(3,maxres)
156 ! real(kind=8),dimension(:,:,:),allocatable :: dphi,dalpha,domega !(3,3,maxres)
157 real(kind=8),dimension(:,:,:),allocatable :: grad_shield_side, &
158 grad_shield_loc ! (3,maxcontsshileding,maxnres)
161 real(kind=8), dimension(:),allocatable :: fac_shield
162 real(kind=8),dimension(3,5,2) :: derx,derx_turn
163 ! common /deriv_scloc/
164 real(kind=8),dimension(:,:),allocatable :: dXX_C1tab,dYY_C1tab,&
165 dZZ_C1tab,dXX_Ctab,dYY_Ctab,dZZ_Ctab,dXX_XYZtab,dYY_XYZtab,&
166 dZZ_XYZtab !(3,maxres)
167 !-----------------------------------------------------------------------------
170 real(kind=8) :: gvdwc_max,gvdwc_scp_max,gelc_max,gvdwpp_max,&
171 gradb_max,ghpbc_max,&
172 gradcorr_max,gel_loc_max,gcorr3_turn_max,gcorr4_turn_max,&
173 gradcorr5_max,gradcorr6_max,gcorr6_turn_max,gsccorc_max,&
174 gscloc_max,gvdwx_max,gradx_scp_max,ghpbx_max,gradxorr_max,&
175 gsccorx_max,gsclocx_max
176 !-----------------------------------------------------------------------------
178 ! common /back_constr/
179 real(kind=8),dimension(:),allocatable :: dutheta,dugamma !(maxres)
180 real(kind=8),dimension(:,:),allocatable :: duscdiff,duscdiffx !(3,maxres)
182 real(kind=8) :: Ucdfrag,Ucdpair
183 real(kind=8),dimension(:,:),allocatable :: dUdconst,dUdxconst,&
184 dqwol,dxqwol !(3,0:MAXRES)
185 !-----------------------------------------------------------------------------
187 ! common /dyn_ssbond/
188 real(kind=8),dimension(:,:),allocatable :: dyn_ssbond_ij !(maxres,maxres)
189 !-----------------------------------------------------------------------------
191 ! Parameters of the SCCOR term
193 real(kind=8),dimension(:,:,:,:),allocatable :: dcostau,dsintau,&
194 dcosomicron,domicron !(3,3,3,maxres2)
195 !-----------------------------------------------------------------------------
198 real(kind=8),dimension(:,:),allocatable :: uy,uz !(3,maxres)
199 real(kind=8),dimension(:,:,:,:),allocatable :: uygrad,uzgrad !(3,3,2,maxres)
200 !-----------------------------------------------------------------------------
201 ! common /przechowalnia/
202 real(kind=8),dimension(:,:,:),allocatable :: zapas
203 real(kind=8),dimension(:,:,:,:),allocatable ::zapas2 !(max_dim,maxconts,max_fg_procs)
205 real(kind=8),dimension(:,:),allocatable :: fromto !(3,3,maxdim)(maxdim=(maxres-1)*(maxres-2)/2)
207 real(kind=8),dimension(:,:,:),allocatable :: fromto !(3,3,maxdim)(maxdim=(maxres-1)*(maxres-2)/2)
209 !-----------------------------------------------------------------------------
210 !-----------------------------------------------------------------------------
213 !-----------------------------------------------------------------------------
215 !-----------------------------------------------------------------------------
216 ! energy_p_new_barrier.F
217 !-----------------------------------------------------------------------------
218 subroutine etotal(energia)
219 ! implicit real(kind=8) (a-h,o-z)
220 ! include 'DIMENSIONS'
225 !MS$ATTRIBUTES C :: proc_proc
231 ! include 'COMMON.SETUP'
232 ! include 'COMMON.IOUNITS'
233 real(kind=8),dimension(0:n_ene) :: energia
234 ! include 'COMMON.LOCAL'
235 ! include 'COMMON.FFIELD'
236 ! include 'COMMON.DERIV'
237 ! include 'COMMON.INTERACT'
238 ! include 'COMMON.SBRIDGE'
239 ! include 'COMMON.CHAIN'
240 ! include 'COMMON.VAR'
241 ! include 'COMMON.MD'
242 ! include 'COMMON.CONTROL'
243 ! include 'COMMON.TIME1'
244 real(kind=8) :: time00
246 integer :: n_corr,n_corr1,ierror,imatupdate
247 real(kind=8) :: etors,edihcnstr,etors_d,esccor,ehpb
248 real(kind=8) :: evdw,evdw1,evdw2,evdw2_14,escloc,ees,eel_loc
249 real(kind=8) :: eello_turn3,eello_turn4,estr,ebe,eliptran,etube, &
250 Eafmforce,ethetacnstr
251 real(kind=8) :: ecorr,ecorr5,ecorr6,eturn6,ehomology_constr
252 ! now energies for nulceic alone parameters
253 real(kind=8) :: evdwpp,eespp,evdwpsb,eelpsb,evdwsb,eelsb,estr_nucl,&
254 ebe_nucl,esbloc,etors_nucl,etors_d_nucl,ecorr_nucl,&
257 real(kind=8) :: ecation_prot,ecationcation,ecations_prot_amber,&
258 ecation_nucl,ecat_prottran,ecation_protang
259 ! energies for protein nucleic acid interaction
260 real(kind=8) :: escbase,epepbase,escpho,epeppho
261 ! energies for MARTINI
262 real(kind=8) :: elipbond,elipang,elipelec,eliplj
265 real(kind=8) :: weights_(n_ene) !,time_Bcast,time_Bcastw
266 ! shielding effect varibles for MPI
267 real(kind=8) :: fac_shieldbuf(nres), &
268 grad_shield_locbuf1(3*maxcontsshi*nres), &
269 grad_shield_sidebuf1(3*maxcontsshi*nres), &
270 grad_shield_locbuf2(3*maxcontsshi*nres), &
271 grad_shield_sidebuf2(3*maxcontsshi*nres), &
272 grad_shieldbuf1(3*nres), &
273 grad_shieldbuf2(3*nres)
275 integer ishield_listbuf(-1:nres), &
276 shield_listbuf(maxcontsshi,-1:nres),k,j,i,iii,impishi,mojint,jjj
277 ! print *,"I START ENERGY"
279 ! if (mod(itime_mat,imatupdate).eq.0) call make_SCSC_inter_list
280 ! real(kind=8), dimension(:),allocatable:: fac_shieldbuf
281 ! real(kind=8), dimension(:,:,:),allocatable:: &
282 ! grad_shield_locbuf,grad_shield_sidebuf
283 ! real(kind=8), dimension(:,:),allocatable:: &
285 ! integer, dimension(:),allocatable:: &
287 ! integer, dimension(:,:),allocatable:: shield_listbuf
289 ! if (.not.allocated(fac_shieldbuf)) then
290 ! allocate(fac_shieldbuf(nres))
291 ! allocate(grad_shield_locbuf(3,maxcontsshi,-1:nres))
292 ! allocate(grad_shield_sidebuf(3,maxcontsshi,-1:nres))
293 ! allocate(grad_shieldbuf(3,-1:nres))
294 ! allocate(ishield_listbuf(nres))
295 ! allocate(shield_listbuf(maxcontsshi,nres))
297 ! print *,"wstrain check", wstrain
298 ! print*,"ETOTAL Processor",fg_rank," absolute rank",myrank,
299 ! & " nfgtasks",nfgtasks
300 if (nfgtasks.gt.1) then
302 ! FG slaves call the following matching MPI_Bcast in ERGASTULUM
303 if (fg_rank.eq.0) then
304 call MPI_Bcast(0,1,MPI_INTEGER,king,FG_COMM,IERROR)
305 ! print *,"Processor",myrank," BROADCAST iorder"
306 ! FG master sets up the WEIGHTS_ array which will be broadcast to the
307 ! FG slaves as WEIGHTS array.
327 weights_(26)=wvdwpp_nucl
333 weights_(32)=wbond_nucl
334 weights_(33)=wang_nucl
336 weights_(35)=wtor_nucl
337 weights_(36)=wtor_d_nucl
338 weights_(37)=wcorr_nucl
339 weights_(38)=wcorr3_nucl
341 weights_(42)=wcatprot
343 weights_(47)=wpepbase
346 weights_(50)=wcatnucl
347 weights_(56)=wcat_tran
349 ! wcatcat= weights(41)
350 ! wcatprot=weights(42)
352 ! FG Master broadcasts the WEIGHTS_ array
353 call MPI_Bcast(weights_(1),n_ene,&
354 MPI_DOUBLE_PRECISION,king,FG_COMM,IERROR)
356 ! FG slaves receive the WEIGHTS array
357 call MPI_Bcast(weights(1),n_ene,&
358 MPI_DOUBLE_PRECISION,king,FG_COMM,IERROR)
378 wvdwpp_nucl =weights(26)
384 wbond_nucl =weights(32)
385 wang_nucl =weights(33)
387 wtor_nucl =weights(35)
388 wtor_d_nucl =weights(36)
389 wcorr_nucl =weights(37)
390 wcorr3_nucl =weights(38)
398 wcat_tran=weights(56)
400 ! welpsb=weights(28)*fact(1)
402 ! wcorr_nucl= weights(37)*fact(1)
403 ! wcorr3_nucl=weights(38)*fact(2)
404 ! wtor_nucl= weights(35)*fact(1)
405 ! wtor_d_nucl=weights(36)*fact(2)
408 time_Bcast=time_Bcast+MPI_Wtime()-time00
409 time_Bcastw=time_Bcastw+MPI_Wtime()-time00
410 ! call chainbuild_cart
412 ! print *,"itime_mat",itime_mat,imatupdate
413 if (nfgtasks.gt.1) then
414 call MPI_Bcast(itime_mat,1,MPI_INT,king,FG_COMM,IERROR)
416 if (nres_molec(1).gt.0) then
417 if (mod(itime_mat,imatupdate).eq.0) call make_SCp_inter_list
418 ! write (iout,*) "after make_SCp_inter_list"
419 if (mod(itime_mat,imatupdate).eq.0) call make_SCSC_inter_list
420 ! write (iout,*) "after make_SCSC_inter_list"
422 if (mod(itime_mat,imatupdate).eq.0) call make_pp_inter_list
423 if (nres_molec(5).gt.0) then
424 if (mod(itime_mat,imatupdate).eq.0) then
425 ! print *,'Processor',myrank,' calling etotal ipot=',ipot
426 call make_cat_pep_list
430 ! write (iout,*) "after make_pp_inter_list"
432 ! print *,'Processor',myrank,' calling etotal ipot=',ipot
433 ! print *,'Processor',myrank,' nnt=',nnt,' nct=',nct
435 ! if (modecalc.eq.12.or.modecalc.eq.14) then
436 ! call int_from_cart1(.false.)
443 ! Compute the side-chain and electrostatic interaction energy
444 ! print *, "Before EVDW"
445 ! goto (101,102,103,104,105,106) ipot
446 if (nres_molec(1).gt.0) then
448 ! Lennard-Jones potential.
452 !d print '(a)','Exit ELJcall el'
454 ! Lennard-Jones-Kihara potential (shifted).
455 ! 102 call eljk(evdw)
459 ! Berne-Pechukas potential (dilated LJ, angular dependence).
464 ! Gay-Berne potential (shifted LJ, angular dependence).
467 ! print *,"MOMO",scelemode
468 if (scelemode.eq.0) then
474 ! Gay-Berne-Vorobjev potential (shifted LJ, angular dependence).
475 ! 105 call egbv(evdw)
479 ! Soft-sphere potential
480 ! 106 call e_softsphere(evdw)
482 call e_softsphere(evdw)
484 ! Calculate electrostatic (H-bonding) energy of the main chain.
488 write(iout,*)"Wrong ipot"
493 ! print *,"after EGB"
495 if (shield_mode.eq.2) then
498 if (nfgtasks.gt.1) then
499 grad_shield_sidebuf1(:)=0.0d0
500 grad_shield_locbuf1(:)=0.0d0
501 grad_shield_sidebuf2(:)=0.0d0
502 grad_shield_locbuf2(:)=0.0d0
503 grad_shieldbuf1(:)=0.0d0
504 grad_shieldbuf2(:)=0.0d0
507 write(iout,*) "befor reduce fac_shield reduce"
509 write(2,*) "fac",itype(i,1),fac_shield(i),grad_shield(1,i)
510 write(2,*) "list", shield_list(1,i),ishield_list(i), &
511 grad_shield_side(1,1,i),grad_shield_loc(1,1,i)
520 grad_shieldbuf1(iii)=grad_shield(k,i)
527 grad_shield_sidebuf1(jjj)=grad_shield_side(k,j,i)
528 grad_shield_locbuf1(jjj)=grad_shield_loc(k,j,i)
532 call MPI_Allgatherv(fac_shield(ivec_start), &
533 ivec_count(fg_rank1), &
534 MPI_DOUBLE_PRECISION,fac_shieldbuf(1),ivec_count(0), &
536 MPI_DOUBLE_PRECISION,FG_COMM,IERROR)
537 call MPI_Allgatherv(shield_list(1,ivec_start), &
538 ivec_count(fg_rank1), &
539 MPI_I50,shield_listbuf(1,1),ivec_count(0), &
541 MPI_I50,FG_COMM,IERROR)
542 ! write(2,*) "After I50"
544 call MPI_Allgatherv(ishield_list(ivec_start), &
545 ivec_count(fg_rank1), &
546 MPI_INTEGER,ishield_listbuf(1),ivec_count(0), &
548 MPI_INTEGER,FG_COMM,IERROR)
549 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
551 ! write(2,*) ivec_count(fg_rank1)*3,ivec_count(0)*3,ivec_displ(0)*3,3*ivec_start-2
552 ! write (2,*) "before"
553 ! write(2,*) grad_shieldbuf1
554 ! call MPI_Allgatherv(grad_shieldbuf1(3*ivec_start-2), &
555 ! ivec_count(fg_rank1)*3, &
556 ! MPI_DOUBLE_PRECISION,grad_shieldbuf2(1),ivec_count(0), &
558 ! MPI_DOUBLE_PRECISION,FG_COMM,IERROR)
559 call MPI_Allreduce(grad_shieldbuf1(1),grad_shieldbuf2(1), &
561 MPI_DOUBLE_PRECISION, &
564 call MPI_Allreduce(grad_shield_sidebuf1(1),grad_shield_sidebuf2(1), &
565 nres*3*maxcontsshi, &
566 MPI_DOUBLE_PRECISION, &
570 call MPI_Allreduce(grad_shield_locbuf1(1),grad_shield_locbuf2(1), &
571 nres*3*maxcontsshi, &
572 MPI_DOUBLE_PRECISION, &
577 ! write(2,*) grad_shieldbuf2
579 ! call MPI_Allgatherv(grad_shield_sidebuf1(3*maxcontsshi*ivec_start-2), &
580 ! ivec_count(fg_rank1)*3*maxcontsshi, &
581 ! MPI_DOUBLE_PRECISION,grad_shield_sidebuf2(1),ivec_count(0)*3*maxcontsshi,&
582 ! ivec_displ(0)*3*maxcontsshi, &
583 ! MPI_DOUBLE_PRECISION,FG_COMM,IERROR)
584 ! write(2,*) "After grad_shield_side"
586 ! call MPI_Allgatherv(grad_shield_locbuf1(3*maxcontsshi*ivec_start-2), &
587 ! ivec_count(fg_rank1)*3*maxcontsshi, &
588 ! MPI_DOUBLE_PRECISION,grad_shield_locbuf2(1),ivec_count(0)*3*maxcontsshi, &
589 ! ivec_displ(0)*3*maxcontsshi, &
590 ! MPI_DOUBLE_PRECISION,FG_COMM,IERROR)
591 ! write(2,*) "After MPI_SHI"
596 fac_shield(i)=fac_shieldbuf(i)
597 ishield_list(i)=ishield_listbuf(i)
598 ! write(iout,*) i,fac_shield(i)
601 grad_shield(j,i)=grad_shieldbuf2(iii)
603 do j=1,ishield_list(i)
604 ! write (iout,*) "ishild", ishield_list(i),i
605 shield_list(j,i)=shield_listbuf(j,i)
610 grad_shield_loc(k,j,i)=grad_shield_locbuf2(jjj)
611 grad_shield_side(k,j,i)=grad_shield_sidebuf2(jjj)
617 write(iout,*) "after reduce fac_shield reduce"
619 write(2,*) "fac",itype(i,1),fac_shield(i),grad_shield(1,i)
620 write(2,*) "list", shield_list(1,i),ishield_list(i), &
621 grad_shield_side(1,1,i),grad_shield_loc(1,1,i)
629 ! print *,"AFTER EGB",ipot,evdw
631 !mc Sep-06: egb takes care of dynamic ss bonds too
633 ! if (dyn_ss) call dyn_set_nss
634 ! print *,"Processor",myrank," computed USCSC"
640 time_vec=time_vec+MPI_Wtime()-time01
646 ! print *,"Processor",myrank," left VEC_AND_DERIV"
649 ! print *,"after ipot if", ipot
650 if (welec.gt.0d0.or.wvdwpp.gt.0d0.or.wel_loc.gt.0d0.or. &
651 wturn3.gt.0d0.or.wturn4.gt.0d0 .or. wcorr.gt.0.0d0 &
652 .or. wcorr4.gt.0.0d0 .or. wcorr5.gt.0.d0 &
653 .or. wcorr6.gt.0.0d0 .or. wturn6.gt.0.0d0 ) then
655 if (welec.gt.0d0.or.wel_loc.gt.0d0.or. &
656 wturn3.gt.0d0.or.wturn4.gt.0d0 .or. wcorr.gt.0.0d0 &
657 .or. wcorr4.gt.0.0d0 .or. wcorr5.gt.0.d0 &
658 .or. wcorr6.gt.0.0d0 .or. wturn6.gt.0.0d0 ) then
660 ! print *,"just befor eelec call"
661 call eelec(ees,evdw1,eel_loc,eello_turn3,eello_turn4)
662 ! print *, "ELEC calc"
671 ! write (iout,*) "Soft-spheer ELEC potential"
672 call eelec_soft_sphere(ees,evdw1,eel_loc,eello_turn3,&
675 ! print *,"Processor",myrank," computed UELEC"
677 ! Calculate excluded-volume interaction energy between peptide groups
680 ! write(iout,*) "in etotal calc exc;luded",ipot
684 call escp(evdw2,evdw2_14)
690 ! write (iout,*) "Soft-sphere SCP potential"
691 call escp_soft_sphere(evdw2,evdw2_14)
693 ! write(iout,*) "in etotal before ebond",ipot
694 ! print *,"after escp"
696 ! Calculate the bond-stretching energy
699 ! print *,"EBOND",estr
700 ! write(iout,*) "in etotal afer ebond",ipot
703 ! Calculate the disulfide-bridge and other energy and the contributions
704 ! from other distance constraints.
705 ! print *,'Calling EHPB'
707 !elwrite(iout,*) "in etotal afer edis",ipot
708 ! print *,'EHPB exitted succesfully.'
710 ! Calculate the virtual-bond-angle energy.
711 ! write(iout,*) "in etotal afer edis",ipot
713 ! if (wang.gt.0.0d0) then
714 ! call ebend(ebe,ethetacnstr)
719 if (wang.gt.0d0) then
720 if (tor_mode.eq.0) then
723 !C ebend kcc is Kubo cumulant clustered rigorous attemp to derive the
731 ! write(iout,*) with_theta_constr,"with_theta_constr"
732 if (with_theta_constr) call etheta_constr(ethetacnstr)
734 ! write(iout,*) "in etotal afer ebe",ipot
736 ! print *,"Processor",myrank," computed UB"
738 ! Calculate the SC local energy.
741 ! print *, "in etotal afer esc",wtor
742 ! print *,"Processor",myrank," computed USC"
744 ! Calculate the virtual-bond torsional energy.
746 !d print *,'nterm=',nterm
747 ! if (wtor.gt.0) then
748 ! call etor(etors,edihcnstr)
753 if (wtor.gt.0.0d0) then
754 ! print *,"WTOR",wtor,tor_mode
755 if (tor_mode.eq.0) then
758 !C etor kcc is Kubo cumulant clustered rigorous attemp to derive the
766 if (ndih_constr.gt.0) call etor_constr(edihcnstr)
767 !c print *,"Processor",myrank," computed Utor"
769 ! print *, "constr_homol",constr_homology
770 ! print *,"Processor",myrank," computed Utor"
771 if (constr_homology.ge.1) then
772 call e_modeller(ehomology_constr)
773 ! print *,'iset=',iset,'me=',me,ehomology_constr,
774 ! & 'Processor',fg_rank,' CG group',kolor,
775 ! & ' absolute rank',MyRank
778 ehomology_constr=0.0d0
782 ! 6/23/01 Calculate double-torsional energy
784 ! print *, "before etor_d",wtor_d
785 if (wtor_d.gt.0) then
790 ! print *,"Processor",myrank," computed Utord"
792 ! 21/5/07 Calculate local sicdechain correlation energy
794 if (wsccor.gt.0.0d0) then
795 call eback_sc_corr(esccor)
800 ! write(iout,*) "before multibody"
802 ! print *,"Processor",myrank," computed Usccorr"
804 ! 12/1/95 Multi-body terms
809 if ((wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0 &
810 .or. wturn6.gt.0.0d0) .and. ipot.lt.6) then
811 call multibody_eello(ecorr,ecorr5,ecorr6,eturn6,n_corr,n_corr1)
812 !d write(2,*)'multibody_eello n_corr=',n_corr,' n_corr1=',n_corr1,
813 !d &" ecorr",ecorr," ecorr5",ecorr5," ecorr6",ecorr6," eturn6",eturn6
820 !elwrite(iout,*) "in etotal",ipot
821 if ((wcorr4.eq.0.0d0 .and. wcorr.gt.0.0d0) .and. ipot.lt.6) then
822 call multibody_hb(ecorr,ecorr5,ecorr6,n_corr,n_corr1)
823 !d write (iout,*) "multibody_hb ecorr",ecorr
825 ! write(iout,*) "afeter multibody hb"
827 ! print *,"Processor",myrank," computed Ucorr"
829 ! If performing constraint dynamics, call the constraint energy
830 ! after the equilibration time
831 if((usampl).and.(totT.gt.eq_time)) then
832 write(iout,*) "usampl",usampl
834 !elwrite(iout,*) "afeter multibody hb"
836 !elwrite(iout,*) "afeter multibody hb"
842 ! write(iout,*) "after Econstr"
844 if (wliptran.gt.0) then
845 ! print *,"PRZED WYWOLANIEM"
846 call Eliptransfer(eliptran)
882 ehomology_constr=0.0d0
885 ! write(iout,*) "TU JEST PRZED EHPB"
887 if (fg_rank.eq.0) then
888 if (AFMlog.gt.0) then
889 call AFMforce(Eafmforce)
890 else if (selfguide.gt.0) then
891 call AFMvel(Eafmforce)
896 ! print *,"before tubemode",tubemode
897 if (tubemode.eq.1) then
899 else if (tubemode.eq.2) then
900 call calctube2(etube)
901 elseif (tubemode.eq.3) then
906 ! print *, "TU JEST PRZED EHPB"
909 !--------------------------------------------------------
910 ! print *, "NRES_MOLEC(2),",nres_molec(2)
911 ! print *,"before",ees,evdw1,ecorr
912 ! write(iout,*) ecorr_nucl,"ecorr_nucl",nres_molec(2)
913 if (nres_molec(2).gt.0) then
914 call ebond_nucl(estr_nucl)
915 call ebend_nucl(ebe_nucl)
916 call etor_nucl(etors_nucl)
917 call esb_gb(evdwsb,eelsb)
918 call epp_nucl_sub(evdwpp,eespp)
919 call epsb(evdwpsb,eelpsb)
921 call multibody_hb_nucl(ecorr_nucl,ecorr3_nucl,n_corr,n_corr1)
922 call ecat_nucl(ecation_nucl)
939 ! write(iout,*) ecorr_nucl,"ecorr_nucl",nres_molec(2)
940 ! print *,"before ecatcat",wcatcat
941 if (nres_molec(5).gt.0) then
942 if (g_ilist_catsctran.gt.0) then
943 call ecat_prot_transition(ecat_prottran)
947 if (g_ilist_catscang.gt.0) then
948 call ecat_prot_ang(ecation_protang)
950 ecation_protang=0.0d0
952 if (nfgtasks.gt.1) then
953 if (fg_rank.eq.0) then
954 if (nres_molec(5).gt.1) call ecatcat(ecationcation)
957 if (nres_molec(5).gt.1) call ecatcat(ecationcation)
959 if (oldion.gt.0) then
960 if (g_ilist_catpnorm.gt.0) call ecat_prot(ecation_prot)
962 if (g_ilist_catpnorm.gt.0) call ecats_prot_amber(ecation_prot)
967 ecation_protang=0.0d0
970 if (g_ilist_catscnorm.eq.0) ecation_prot=0.0d0
971 if ((nres_molec(2).gt.0).and.(nres_molec(1).gt.0)) then
972 call eprot_sc_base(escbase)
973 call epep_sc_base(epepbase)
974 call eprot_sc_phosphate(escpho)
975 call eprot_pep_phosphate(epeppho)
982 ! MARTINI FORCE FIELD ENERGY TERMS
983 if (nres_molec(4).gt.0) then
984 if (nfgtasks.gt.1) then
985 if (fg_rank.eq.0) then
986 call lipid_bond(elipbond)
987 call lipid_angle(elipang)
990 call lipid_bond(elipbond)
991 call lipid_angle(elipang)
993 call lipid_LJ(eliplj)
994 call lipid_elec(elipelec)
1001 ! call ecatcat(ecationcation)
1002 ! print *,"after ebend", wtor_nucl
1004 time_enecalc=time_enecalc+MPI_Wtime()-time00
1006 ! print *,"Processor",myrank," computed Uconstr"
1015 energia(2)=evdw2-evdw2_14
1016 energia(18)=evdw2_14
1025 energia(3)=ees+evdw1
1032 energia(8)=eello_turn3
1033 energia(9)=eello_turn4
1040 energia(19)=edihcnstr
1042 energia(20)=Uconst+Uconst_back
1044 energia(22)=eliptran
1045 energia(23)=Eafmforce
1046 energia(24)=ethetacnstr
1048 !---------------------------------------------------------------
1055 energia(32)=estr_nucl
1056 energia(33)=ebe_nucl
1058 energia(35)=etors_nucl
1059 energia(36)=etors_d_nucl
1060 energia(37)=ecorr_nucl
1061 energia(38)=ecorr3_nucl
1062 !----------------------------------------------------------------------
1063 ! Here are the energies showed per procesor if the are more processors
1064 ! per molecule then we sum it up in sum_energy subroutine
1065 ! print *," Processor",myrank," calls SUM_ENERGY"
1066 energia(42)=ecation_prot
1067 energia(41)=ecationcation
1069 energia(47)=epepbase
1072 ! energia(50)=ecations_prot_amber
1073 energia(50)=ecation_nucl
1074 energia(51)=ehomology_constr
1075 ! energia(51)=homology
1076 energia(52)=elipbond
1079 energia(55)=elipelec
1080 energia(56)=ecat_prottran
1081 energia(57)=ecation_protang
1082 ! write(iout,*) elipelec,"elipelec"
1083 ! write(iout,*) elipang,"elipang"
1084 ! write(iout,*) eliplj,"eliplj"
1085 call sum_energy(energia,.true.)
1086 if (dyn_ss) call dyn_set_nss
1087 ! print *," Processor",myrank," left SUM_ENERGY"
1089 time_sumene=time_sumene+MPI_Wtime()-time00
1091 ! call enerprint(energia)
1092 !elwrite(iout,*)"finish etotal"
1094 end subroutine etotal
1095 !-----------------------------------------------------------------------------
1096 subroutine sum_energy(energia,reduce)
1097 ! implicit real(kind=8) (a-h,o-z)
1098 ! include 'DIMENSIONS'
1102 !MS$ATTRIBUTES C :: proc_proc
1108 ! include 'COMMON.SETUP'
1109 ! include 'COMMON.IOUNITS'
1110 real(kind=8) :: energia(0:n_ene),enebuff(0:n_ene+1)
1111 ! include 'COMMON.FFIELD'
1112 ! include 'COMMON.DERIV'
1113 ! include 'COMMON.INTERACT'
1114 ! include 'COMMON.SBRIDGE'
1115 ! include 'COMMON.CHAIN'
1116 ! include 'COMMON.VAR'
1117 ! include 'COMMON.CONTROL'
1118 ! include 'COMMON.TIME1'
1120 real(kind=8) :: evdw,evdw2,evdw2_14,ees,evdw1,ecorr,ecorr5,ecorr6
1121 real(kind=8) :: eel_loc,eello_turn3,eello_turn4,eturn6,ebe,escloc
1122 real(kind=8) :: etors,etors_d,ehpb,edihcnstr,estr,esccor,etot, &
1123 eliptran,etube, Eafmforce,ethetacnstr
1124 real(kind=8) :: evdwpp,eespp,evdwpsb,eelpsb,evdwsb,eelsb,estr_nucl,&
1125 ebe_nucl,esbloc,etors_nucl,etors_d_nucl,ecorr_nucl,&
1126 ecorr3_nucl,ehomology_constr
1127 real(kind=8) :: ecation_prot,ecationcation,ecations_prot_amber,&
1128 ecation_nucl,ecat_prottran,ecation_protang
1129 real(kind=8) :: escbase,epepbase,escpho,epeppho
1131 real(kind=8) :: elipbond,elipang,eliplj,elipelec
1134 real(kind=8) :: time00
1135 if (nfgtasks.gt.1 .and. reduce) then
1138 write (iout,*) "energies before REDUCE"
1139 call enerprint(energia)
1143 enebuff(i)=energia(i)
1146 call MPI_Barrier(FG_COMM,IERR)
1147 time_barrier_e=time_barrier_e+MPI_Wtime()-time00
1149 call MPI_Reduce(enebuff(0),energia(0),n_ene+1,&
1150 MPI_DOUBLE_PRECISION,MPI_SUM,king,FG_COMM,IERR)
1152 write (iout,*) "energies after REDUCE"
1153 call enerprint(energia)
1156 time_Reduce=time_Reduce+MPI_Wtime()-time00
1158 if (fg_rank.eq.0) then
1162 evdw2=energia(2)+energia(18)
1163 evdw2_14=energia(18)
1178 eello_turn3=energia(8)
1179 eello_turn4=energia(9)
1186 edihcnstr=energia(19)
1190 eliptran=energia(22)
1191 Eafmforce=energia(23)
1192 ethetacnstr=energia(24)
1200 estr_nucl=energia(32)
1201 ebe_nucl=energia(33)
1203 etors_nucl=energia(35)
1204 etors_d_nucl=energia(36)
1205 ecorr_nucl=energia(37)
1206 ecorr3_nucl=energia(38)
1207 ecation_prot=energia(42)
1208 ecationcation=energia(41)
1210 epepbase=energia(47)
1213 ecation_nucl=energia(50)
1214 ehomology_constr=energia(51)
1215 elipbond=energia(52)
1218 elipelec=energia(55)
1219 ecat_prottran=energia(56)
1220 ecation_protang=energia(57)
1221 ! ecations_prot_amber=energia(50)
1223 ! energia(41)=ecation_prot
1224 ! energia(42)=ecationcation
1228 etot=wsc*evdw+wscp*evdw2+welec*ees+wvdwpp*evdw1 &
1229 +wang*ebe+wtor*etors+wscloc*escloc &
1230 +wstrain*ehpb+wcorr*ecorr+wcorr5*ecorr5 &
1231 +wcorr6*ecorr6+wturn4*eello_turn4+wturn3*eello_turn3 &
1232 +wturn6*eturn6+wel_loc*eel_loc+edihcnstr+wtor_d*etors_d &
1233 +wbond*estr+Uconst+wsccor*esccor+wliptran*eliptran+wtube*etube&
1234 +Eafmforce+ethetacnstr &
1235 +wbond_nucl*estr_nucl+wang_nucl*ebe_nucl&
1236 +wvdwpp_nucl*evdwpp+welpp*eespp+wvdwpsb*evdwpsb+welpsb*eelpsb&
1237 +wvdwsb*evdwsb+welsb*eelsb+wsbloc*esbloc+wtor_nucl*etors_nucl&
1238 +wtor_d_nucl*etors_d_nucl+wcorr_nucl*ecorr_nucl+wcorr3_nucl*ecorr3_nucl&
1239 +wcatprot*ecation_prot+wcatcat*ecationcation+wscbase*escbase&
1240 +wpepbase*epepbase+wscpho*escpho+wpeppho*epeppho+wcatnucl*ecation_nucl&
1241 +elipbond+elipang+eliplj+elipelec+wcat_tran*ecat_prottran+ecation_protang&
1248 etot=wsc*evdw+wscp*evdw2+welec*(ees+evdw1) &
1249 +wang*ebe+wtor*etors+wscloc*escloc &
1250 +wstrain*ehpb+wcorr*ecorr+wcorr5*ecorr5 &
1251 +wcorr6*ecorr6+wturn4*eello_turn4+wturn3*eello_turn3 &
1252 +wturn6*eturn6+wel_loc*eel_loc+edihcnstr+wtor_d*etors_d &
1253 +wbond*estr+Uconst+wsccor*esccor+wliptran*eliptran+wtube*etube&
1254 +Eafmforce+ethetacnstr &
1255 +wbond_nucl*estr_nucl+wang_nucl*ebe_nucl&
1256 +wvdwpp_nucl*evdwpp+welpp*eespp+wvdwpsb*evdwpsb+welpsb*eelpsb&
1257 +wvdwsb*evdwsb+welsb*eelsb+wsbloc*esbloc+wtor_nucl*etors_nucl&
1258 +wtor_d_nucl*etors_d_nucl+wcorr_nucl*ecorr_nucl+wcorr3_nucl*ecorr3_nucl&
1259 +wcatprot*ecation_prot+wcatcat*ecationcation+wscbase*escbase&
1260 +wpepbase*epepbase+wscpho*escpho+wpeppho*epeppho+wcatnucl*ecation_nucl&
1261 +elipbond+elipang+eliplj+elipelec+wcat_tran*ecat_prottran+ecation_protang&
1272 if (isnan(etot).ne.0) energia(0)=1.0d+99
1274 if (isnan(etot)) energia(0)=1.0d+99
1279 idumm=proc_proc(etot,i)
1281 call proc_proc(etot,i)
1283 if(i.eq.1)energia(0)=1.0d+99
1288 ! call enerprint(energia)
1291 end subroutine sum_energy
1292 !-----------------------------------------------------------------------------
1293 subroutine rescale_weights(t_bath)
1294 ! implicit real(kind=8) (a-h,o-z)
1298 ! include 'DIMENSIONS'
1299 ! include 'COMMON.IOUNITS'
1300 ! include 'COMMON.FFIELD'
1301 ! include 'COMMON.SBRIDGE'
1302 real(kind=8) :: kfac=2.4d0
1303 real(kind=8) :: x,x2,x3,x4,x5,licznik=1.12692801104297249644
1305 real(kind=8) :: t_bath,facT(6) !,facT2,facT3,facT4,facT5,facT6
1306 real(kind=8) :: T0=3.0d2
1309 ! facT=2*temp0/(t_bath+temp0)
1310 if (rescale_mode.eq.0) then
1317 else if (rescale_mode.eq.1) then
1318 facT(1)=kfac/(kfac-1.0d0+t_bath/temp0)
1319 facT(2)=kfac**2/(kfac**2-1.0d0+(t_bath/temp0)**2)
1320 facT(3)=kfac**3/(kfac**3-1.0d0+(t_bath/temp0)**3)
1321 facT(4)=kfac**4/(kfac**4-1.0d0+(t_bath/temp0)**4)
1322 facT(5)=kfac**5/(kfac**5-1.0d0+(t_bath/temp0)**5)
1324 !#if defined(WHAM_RUN) || defined(CLUSTER)
1326 ! tt = 1.0d0/(beta_h(ib,ipar)*1.987D-3)
1327 facT(6)=(320.0+80.0*dtanh((t_bath-320.0)/80.0))/320.0
1328 #elif defined(FUNCT)
1334 else if (rescale_mode.eq.2) then
1340 facT(1)=licznik/dlog(dexp(x)+dexp(-x))
1341 facT(2)=licznik/dlog(dexp(x2)+dexp(-x2))
1342 facT(3)=licznik/dlog(dexp(x3)+dexp(-x3))
1343 facT(4)=licznik/dlog(dexp(x4)+dexp(-x4))
1344 facT(5)=licznik/dlog(dexp(x5)+dexp(-x5))
1346 !#if defined(WHAM_RUN) || defined(CLUSTER)
1348 facT(6)=(320.0+80.0*dtanh((t_bath-320.0)/80.0))/320.0
1349 #elif defined(FUNCT)
1356 write (iout,*) "Wrong RESCALE_MODE",rescale_mode
1357 write (*,*) "Wrong RESCALE_MODE",rescale_mode
1359 call MPI_Finalize(MPI_COMM_WORLD,IERROR)
1363 welec=weights(3)*fact(1)
1364 wcorr=weights(4)*fact(3)
1365 wcorr5=weights(5)*fact(4)
1366 wcorr6=weights(6)*fact(5)
1367 wel_loc=weights(7)*fact(2)
1368 wturn3=weights(8)*fact(2)
1369 wturn4=weights(9)*fact(3)
1370 wturn6=weights(10)*fact(5)
1371 wtor=weights(13)*fact(1)
1372 wtor_d=weights(14)*fact(2)
1373 wsccor=weights(21)*fact(1)
1374 welpsb=weights(28)*fact(1)
1375 wcorr_nucl= weights(37)*fact(1)
1376 wcorr3_nucl=weights(38)*fact(2)
1377 wtor_nucl= weights(35)*fact(1)
1378 wtor_d_nucl=weights(36)*fact(2)
1379 wpepbase=weights(47)*fact(1)
1381 end subroutine rescale_weights
1382 !-----------------------------------------------------------------------------
1383 subroutine enerprint(energia)
1384 ! implicit real(kind=8) (a-h,o-z)
1385 ! include 'DIMENSIONS'
1386 ! include 'COMMON.IOUNITS'
1387 ! include 'COMMON.FFIELD'
1388 ! include 'COMMON.SBRIDGE'
1389 ! include 'COMMON.MD'
1390 real(kind=8) :: energia(0:n_ene)
1392 real(kind=8) :: etot,evdw,evdw2,ees,evdw1,ecorr,ecorr5,ecorr6,eel_loc
1393 real(kind=8) :: eello_turn6,eello_turn3,eello_turn4,ebe,escloc
1394 real(kind=8) :: etors,etors_d,ehpb,edihcnstr,estr,Uconst,esccor,eliptran,&
1395 etube,ethetacnstr,Eafmforce
1396 real(kind=8) :: evdwpp,eespp,evdwpsb,eelpsb,evdwsb,eelsb,estr_nucl,&
1397 ebe_nucl,esbloc,etors_nucl,etors_d_nucl,ecorr_nucl,&
1398 ecorr3_nucl,ehomology_constr
1399 real(kind=8) :: ecation_prot,ecationcation,ecations_prot_amber,&
1400 ecation_nucl,ecat_prottran,ecation_protang
1401 real(kind=8) :: escbase,epepbase,escpho,epeppho
1402 real(kind=8) :: elipbond,elipang,eliplj,elipelec
1407 evdw2=energia(2)+energia(18)
1419 eello_turn3=energia(8)
1420 eello_turn4=energia(9)
1421 eello_turn6=energia(10)
1427 edihcnstr=energia(19)
1431 eliptran=energia(22)
1432 Eafmforce=energia(23)
1433 ethetacnstr=energia(24)
1441 estr_nucl=energia(32)
1442 ebe_nucl=energia(33)
1444 etors_nucl=energia(35)
1445 etors_d_nucl=energia(36)
1446 ecorr_nucl=energia(37)
1447 ecorr3_nucl=energia(38)
1448 ecation_prot=energia(42)
1449 ecationcation=energia(41)
1451 epepbase=energia(47)
1454 ecation_nucl=energia(50)
1455 elipbond=energia(52)
1458 elipelec=energia(55)
1459 ecat_prottran=energia(56)
1460 ecation_protang=energia(57)
1461 ehomology_constr=energia(51)
1463 ! ecations_prot_amber=energia(50)
1465 write (iout,10) evdw,wsc,evdw2,wscp,ees,welec,evdw1,wvdwpp,&
1466 estr,wbond,ebe,wang,&
1467 escloc,wscloc,etors,wtor,etors_d,wtor_d,ehpb,wstrain,&
1469 ecorr5,wcorr5,ecorr6,wcorr6,eel_loc,wel_loc,eello_turn3,wturn3,&
1470 eello_turn4,wturn4,eello_turn6,wturn6,esccor,wsccor,&
1471 edihcnstr,ethetacnstr,ebr*nss,&
1472 Uconst,eliptran,wliptran,Eafmforce,etube,wtube, & ! till now protein
1473 estr_nucl,wbond_nucl,ebe_nucl,wang_nucl, &
1474 evdwpp,wvdwpp_nucl,eespp,welpp,evdwpsb,wvdwpsb,eelpsb,welpsb,&
1475 evdwsb,wvdwsb,eelsb,welsb,esbloc,wsbloc,etors_nucl,wtor_nucl,&
1476 etors_d_nucl,wtor_d_nucl,ecorr_nucl,wcorr_nucl,&
1477 ecorr3_nucl,wcorr3_nucl,ecation_prot,wcatprot,&
1478 ecat_prottran,wcat_tran,ecation_protang,wcat_ang,&
1479 ecationcation,wcatcat, &
1480 escbase,wscbase,epepbase,wpepbase,escpho,wscpho,epeppho,wpeppho,&
1481 ecation_nucl,wcatnucl,ehomology_constr,&
1482 elipbond,elipang,eliplj,elipelec,etot
1483 10 format (/'Virtual-chain energies:'// &
1484 'EVDW= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC-SC)'/ &
1485 'EVDW2= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC-p)'/ &
1486 'EES= ',1pE16.6,' WEIGHT=',1pD16.6,' (p-p)'/ &
1487 'EVDWPP=',1pE16.6,' WEIGHT=',1pD16.6,' (p-p VDW)'/ &
1488 'ESTR= ',1pE16.6,' WEIGHT=',1pD16.6,' (stretching)'/ &
1489 'EBE= ',1pE16.6,' WEIGHT=',1pD16.6,' (bending)'/ &
1490 'ESC= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC local)'/ &
1491 'ETORS= ',1pE16.6,' WEIGHT=',1pD16.6,' (torsional)'/ &
1492 'ETORSD=',1pE16.6,' WEIGHT=',1pD16.6,' (double torsional)'/ &
1493 'EHBP= ',1pE16.6,' WEIGHT=',1pD16.6, &
1494 ' (SS bridges & dist. cnstr.)'/ &
1495 'ECORR4=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/ &
1496 'ECORR5=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/ &
1497 'ECORR6=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/ &
1498 'EELLO= ',1pE16.6,' WEIGHT=',1pD16.6,' (electrostatic-local)'/ &
1499 'ETURN3=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 3rd order)'/ &
1500 'ETURN4=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 4th order)'/ &
1501 'ETURN6=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 6th order)'/ &
1502 'ESCCOR=',1pE16.6,' WEIGHT=',1pD16.6,' (backbone-rotamer corr)'/ &
1503 'EDIHC= ',1pE16.6,' (dihedral angle constraints)'/ &
1504 'ETHETC= ',1pE16.6,' (valence angle constraints)'/ &
1505 'ESS= ',1pE16.6,' (disulfide-bridge intrinsic energy)'/ &
1506 'UCONST= ',1pE16.6,' (Constraint energy)'/ &
1507 'ELT=',1pE16.6, ' WEIGHT=',1pD16.6,' (Lipid transfer energy)'/&
1508 'EAFM= ',1pE16.6,' (atomic-force microscopy)'/ &
1509 'ETUBE=',1pE16.6, ' WEIGHT=',1pD16.6,' (cylindrical energy)'/ &
1510 'ESTR_nucl=',1pE16.6,' WEIGHT=',1pD16.6,' (stretching for nucleic)'/ &
1511 'EBE_nucl=',1pE16.6,' WEIGHT=',1pD16.6,' (bending for nucleic)'/ &
1512 'EVDW_nucl=',1pE16.6,' WEIGHT=',1pD16.6,'(phosphate-phosphate VDW)'/ &
1513 'EESPP_nucl=',1pE16.6,' WEIGHT=',1pD16.6,'(phosphate-phosphate elec)'/ &
1514 'EVDWPSB_nucl=',1pE16.6,' WEIGHT=',1pD16.6,'(phosphate-sugarbase VDW)'/ &
1515 'EESPSB_nucl=',1pE16.6,' WEIGHT=',1pD16.6,'(phosphate-sugarbase elec)'/ &
1516 'EVDWSB_nucl=',1pE16.6,' WEIGHT=',1pD16.6,'(sugarbase-sugarbase VDW)'/ &
1517 'EESSB_nucl=',1pE16.6,' WEIGHT=',1pD16.6,'(sugarbase-sugarbase elec)'/ &
1518 'ESBLOC_nucl=',1pE16.6,' WEIGHT=',1pD16.6,'(sugarbase rotamer)'/ &
1519 'ETORS_nucl=',1pE16.6,' WEIGHT=',1pD16.6,'(torsional)'/ &
1520 'ETORSD_nucl=',1pE16.6,' WEIGHT=',1pD16.6,'(double torsional)'/ &
1521 'ECORR_nucl=',1pE16.6,' WEIGHT=',1pD16.6,'(multibody 4th order)'/ &
1522 'ECORR3_nucl=',1pE16.6,' WEIGHT=',1pD16.6,'(multibody 3th order)'/ &
1523 'ECATPROT=',1pE16.6,' WEIGHT=',1pD16.6,'(cation prot)'/ &
1524 'ECATPTRAN=',1pE16.6,' WEIGHT=',1pD16.6,'(cation prot tran)'/ &
1525 'ECATPANG=',1pE16.6,' WEIGHT=',1pD16.6,'(cation prot angle)'/ &
1526 'ECATCAT=',1pE16.6,' WEIGHT=',1pD16.6,'(cation cation)'/ &
1527 'ESCBASE=',1pE16.6,' WEIGHT=',1pD16.6,'(sc-prot nucl-base)'/ &
1528 'EPEPBASE=',1pE16.6,' WEIGHT=',1pD16.6,'(pep-prot nucl-base)'/ &
1529 'ESCPHO=',1pE16.6,' WEIGHT=',1pD16.6,'(sc-prot nucl-phosphate)'/&
1530 'EPEPPHO=',1pE16.6,' WEIGHT=',1pD16.6,'(pep-prot nucl-phosphate)'/&
1531 'ECATBASE=',1pE16.6,' WEIGHT=',1pD16.6,'(cation nucl-base)'/&
1532 'H_CONS=',1pE16.6,' (Homology model constraints energy)'/&
1533 'ELIPBOND=',1pE16.6,'(matrini bond energy)'/&
1534 'ELIPANG=',1pE16.6,'(matrini angle energy)'/&
1535 'ELIPLJ=',1pE16.6,'(matrini Lennard-Jones energy)'/&
1536 'ELIPELEC=',1pE16.6,'(matrini electrostatic energy)'/&
1537 'ETOT= ',1pE16.6,' (total)')
1539 write (iout,10) evdw,wsc,evdw2,wscp,ees,welec,&
1540 estr,wbond,ebe,wang,&
1541 escloc,wscloc,etors,wtor,etors_d,wtor_d,ehpb,wstrain,&
1543 ecorr5,wcorr5,ecorr6,wcorr6,eel_loc,wel_loc,eello_turn3,wturn3,&
1544 eello_turn4,wturn4,eello_turn6,wturn6,esccor,wsccor,edihcnstr,&
1545 ethetacnstr,ebr*nss,Uconst,eliptran,wliptran,Eafmforce, &
1546 etube,wtube, ehomology_constr,&
1547 estr_nucl,wbond_nucl, ebe_nucl,wang_nucl,&
1548 evdwpp,wvdwpp_nucl,eespp,welpp,evdwpsb,wvdwpsb,eelpsb,welpsb,&
1549 evdwsb,wvdwsb,eelsb,welsb,esbloc,wsbloc,etors_nucl,wtor_nucl,&
1550 etors_d_nucl,wtor_d_nucl,ecorr_nucl,wcorr_nucl,&
1551 ecorr3_nucl,wcorr3_nucl,ecation_prot,wcatprot,ecationcation,wcatcat, &
1552 escbase,wscbase,epepbase,wpepbase,escpho,wscpho,epeppho,wpeppho,&
1553 ecation_nucl,wcatnucl,ehomology_constr,etot
1554 10 format (/'Virtual-chain energies:'// &
1555 'EVDW= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC-SC)'/ &
1556 'EVDW2= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC-p)'/ &
1557 'EES= ',1pE16.6,' WEIGHT=',1pD16.6,' (p-p)'/ &
1558 'ESTR= ',1pE16.6,' WEIGHT=',1pD16.6,' (stretching)'/ &
1559 'EBE= ',1pE16.6,' WEIGHT=',1pD16.6,' (bending)'/ &
1560 'ESC= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC local)'/ &
1561 'ETORS= ',1pE16.6,' WEIGHT=',1pD16.6,' (torsional)'/ &
1562 'ETORSD=',1pE16.6,' WEIGHT=',1pD16.6,' (double torsional)'/ &
1563 'EHBP= ',1pE16.6,' WEIGHT=',1pD16.6, &
1564 ' (SS bridges & dist. cnstr.)'/ &
1565 'ECORR4=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/ &
1566 'ECORR5=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/ &
1567 'ECORR6=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/ &
1568 'EELLO= ',1pE16.6,' WEIGHT=',1pD16.6,' (electrostatic-local)'/ &
1569 'ETURN3=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 3rd order)'/ &
1570 'ETURN4=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 4th order)'/ &
1571 'ETURN6=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 6th order)'/ &
1572 'ESCCOR=',1pE16.6,' WEIGHT=',1pD16.6,' (backbone-rotamer corr)'/ &
1573 'EDIHC= ',1pE16.6,' (dihedral angle constraints)'/ &
1574 'ETHETC= ',1pE16.6,' (valence angle constraints)'/ &
1575 'ESS= ',1pE16.6,' (disulfide-bridge intrinsic energy)'/ &
1576 'UCONST=',1pE16.6,' (Constraint energy)'/ &
1577 'ELT=',1pE16.6, ' WEIGHT=',1pD16.6,' (Lipid transfer energy)'/ &
1578 'EAFM= ',1pE16.6,' (atomic-force microscopy)'/ &
1579 'ETUBE=',1pE16.6, ' WEIGHT=',1pD16.6,' (cylindrical energy)'/ &
1580 'ESTR_nucl= ',1pE16.6,' WEIGHT=',1pD16.6,' (stretching for nucleic)'/ &
1581 'EBE_nucl=',1pE16.6,' WEIGHT=',1pD16.6,' (bending for nucleic)'/ &
1582 'EVDW_nucl=',1pE16.6,' WEIGHT=',1pD16.6,'(phosphate-phosphate VDW)'/ &
1583 'EESPP_nucl=',1pE16.6,' WEIGHT=',1pD16.6,'(phosphate-phosphate elec)'/ &
1584 'EVDWPSB_nucl=',1pE16.6,' WEIGHT=',1pD16.6,'(phosphate-sugarbase VDW)'/ &
1585 'EESPSB_nucl=',1pE16.6,' WEIGHT=',1pD16.6,'(phosphate-sugarbase elec)'/ &
1586 'EVDWSB_nucl=',1pE16.6,' WEIGHT=',1pD16.6,'(sugarbase-sugarbase VDW)'/ &
1587 'EESSB_nucl=',1pE16.6,' WEIGHT=',1pD16.6,'(sugarbase-sugarbase elec)'/ &
1588 'ESBLOC_nucl=',1pE16.6,' WEIGHT=',1pD16.6,'(sugarbase rotamer)'/ &
1589 'ETORS_nucl=',1pE16.6,' WEIGHT=',1pD16.6,'(torsional)'/ &
1590 'ETORSD_nucl=',1pE16.6,' WEIGHT=',1pD16.6,'(double torsional)'/ &
1591 'ECORR_nucl=',1pE16.6,' WEIGHT=',1pD16.6,'(multibody 4th order)'/ &
1592 'ECORR3_nucl=',1pE16.6,' WEIGHT=',1pD16.6,'(multibody 3th order)'/ &
1593 'ECATPROT=',1pE16.6,' WEIGHT=',1pD16.6,'(cation prot)'/ &
1594 'ECATCAT=',1pE16.6,' WEIGHT=',1pD16.6,'(cation cation)'/ &
1595 'ESCBASE=',1pE16.6,' WEIGHT=',1pD16.6,'(sc-prot nucl-base)'/ &
1596 'EPEPBASE=',1pE16.6,' WEIGHT=',1pD16.6,'(pep-prot nucl-base)'/ &
1597 'ESCPHO=',1pE16.6,' WEIGHT=',1pD16.6,'(sc-prot nucl-phosphate)'/&
1598 'EPEPPHO=',1pE16.6,' WEIGHT=',1pD16.6,'(pep-prot nucl-phosphate)'/&
1599 'ECATBASE=',1pE16.6,' WEIGHT=',1pD16.6,'(cation nucl-base)'/&
1600 'H_CONS=',1pE16.6,' (Homology model constraints energy)'/&
1601 'ELIPBOND=',1pE16.6,'(matrini bond energy)'/&
1602 'ELIPANG=',1pE16.6,'(matrini angle energy)'/&
1603 'ELIPLJ=',1pE16.6,'(matrini Lennard-Jones energy)'/&
1604 'ELIPELEC=',1pE16.6,'(matrini electrostatic energy)'/&
1605 'ETOT= ',1pE16.6,' (total)')
1608 end subroutine enerprint
1609 !-----------------------------------------------------------------------------
1610 subroutine elj(evdw)
1612 ! This subroutine calculates the interaction energy of nonbonded side chains
1613 ! assuming the LJ potential of interaction.
1615 ! implicit real(kind=8) (a-h,o-z)
1616 ! include 'DIMENSIONS'
1617 real(kind=8),parameter :: accur=1.0d-10
1618 ! include 'COMMON.GEO'
1619 ! include 'COMMON.VAR'
1620 ! include 'COMMON.LOCAL'
1621 ! include 'COMMON.CHAIN'
1622 ! include 'COMMON.DERIV'
1623 ! include 'COMMON.INTERACT'
1624 ! include 'COMMON.TORSION'
1625 ! include 'COMMON.SBRIDGE'
1626 ! include 'COMMON.NAMES'
1627 ! include 'COMMON.IOUNITS'
1628 ! include 'COMMON.CONTACTS'
1629 real(kind=8),dimension(3) :: gg,gg_lipi,gg_lipj
1630 integer :: num_conti
1632 integer :: i,itypi,iint,j,itypi1,itypj,k
1633 real(kind=8) :: rij,rcut,fcont,fprimcont,rrij,sslipi,ssgradlipi,&
1634 aa,bb,sslipj,ssgradlipj
1635 real(kind=8) :: evdw,xi,yi,zi,xj,yj,zj
1636 real(kind=8) :: eps0ij,fac,e1,e2,evdwij,sigij,r0ij
1638 ! write(iout,*)'Entering ELJ nnt=',nnt,' nct=',nct,' expon=',expon
1640 ! allocate(num_cont(iatsc_s:iatsc_e)) !(maxres) nnt,nct-2
1641 ! allocate(jcont(nres/4,iatsc_s:iatsc_e)) !(maxconts,maxres) (maxconts=maxres/4)
1642 ! allocate(facont(nres/4,iatsc_s:iatsc_e)) !(maxconts,maxres)
1643 ! allocate(gacont(3,nres/4,iatsc_s:iatsc_e)) !(3,maxconts,maxres)
1645 do i=iatsc_s,iatsc_e
1646 itypi=iabs(itype(i,1))
1647 if (itypi.eq.ntyp1) cycle
1648 itypi1=iabs(itype(i+1,1))
1652 call to_box(xi,yi,zi)
1653 call lipid_layer(xi,yi,zi,sslipi,ssgradlipi)
1658 ! Calculate SC interaction energy.
1660 do iint=1,nint_gr(i)
1661 !d write (iout,*) 'i=',i,' iint=',iint,' istart=',istart(i,iint),
1662 !d & 'iend=',iend(i,iint)
1663 do j=istart(i,iint),iend(i,iint)
1664 itypj=iabs(itype(j,1))
1665 if (itypj.eq.ntyp1) cycle
1669 call to_box(xj,yj,zj)
1670 call lipid_layer(xj,yj,zj,sslipj,ssgradlipj)
1671 aa=aa_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0 &
1672 +aa_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
1673 bb=bb_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0 &
1674 +bb_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
1675 xj=boxshift(xj-xi,boxxsize)
1676 yj=boxshift(yj-yi,boxysize)
1677 zj=boxshift(zj-zi,boxzsize)
1678 ! Change 12/1/95 to calculate four-body interactions
1679 rij=xj*xj+yj*yj+zj*zj
1681 ! write (iout,*)'i=',i,' j=',j,' itypi=',itypi,' itypj=',itypj
1682 eps0ij=eps(itypi,itypj)
1684 e1=fac*fac*aa_aq(itypi,itypj)
1685 e2=fac*bb_aq(itypi,itypj)
1687 !d sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
1688 !d epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
1689 !d write (iout,'(2(a3,i3,2x),6(1pd12.4)/2(3(1pd12.4),5x)/)')
1690 !d & restyp(itypi,1),i,restyp(itypj,1),j,aa(itypi,itypj),
1691 !d & bb(itypi,itypj),1.0D0/dsqrt(rrij),evdwij,epsi,sigm,
1692 !d & (c(k,i),k=1,3),(c(k,j),k=1,3)
1695 ! Calculate the components of the gradient in DC and X
1697 fac=-rrij*(e1+evdwij)
1702 gvdwx(k,i)=gvdwx(k,i)-gg(k)
1703 gvdwx(k,j)=gvdwx(k,j)+gg(k)
1704 gvdwc(k,i)=gvdwc(k,i)-gg(k)
1705 gvdwc(k,j)=gvdwc(k,j)+gg(k)
1709 !grad gvdwc(l,k)=gvdwc(l,k)+gg(l)
1713 ! 12/1/95, revised on 5/20/97
1715 ! Calculate the contact function. The ith column of the array JCONT will
1716 ! contain the numbers of atoms that make contacts with the atom I (of numbers
1717 ! greater than I). The arrays FACONT and GACONT will contain the values of
1718 ! the contact function and its derivative.
1720 ! Uncomment next line, if the correlation interactions include EVDW explicitly.
1721 ! if (j.gt.i+1 .and. evdwij.le.0.0D0) then
1722 ! Uncomment next line, if the correlation interactions are contact function only
1723 if (j.gt.i+1.and. eps0ij.gt.0.0D0) then
1725 sigij=sigma(itypi,itypj)
1726 r0ij=rs0(itypi,itypj)
1728 ! Check whether the SC's are not too far to make a contact.
1731 call gcont(rij,rcut,1.0d0,0.2d0*rcut,fcont,fprimcont)
1732 ! Add a new contact, if the SC's are close enough, but not too close (r<sigma).
1734 if (fcont.gt.0.0D0) then
1735 ! If the SC-SC distance if close to sigma, apply spline.
1736 !Adam call gcont(-rij,-1.03d0*sigij,2.0d0*sigij,1.0d0,
1737 !Adam & fcont1,fprimcont1)
1738 !Adam fcont1=1.0d0-fcont1
1739 !Adam if (fcont1.gt.0.0d0) then
1740 !Adam fprimcont=fprimcont*fcont1+fcont*fprimcont1
1741 !Adam fcont=fcont*fcont1
1743 ! Uncomment following 4 lines to have the geometric average of the epsilon0's
1744 !ga eps0ij=1.0d0/dsqrt(eps0ij)
1746 !ga gg(k)=gg(k)*eps0ij
1748 !ga eps0ij=-evdwij*eps0ij
1749 ! Uncomment for AL's type of SC correlation interactions.
1750 !adam eps0ij=-evdwij
1751 num_conti=num_conti+1
1752 jcont(num_conti,i)=j
1753 facont(num_conti,i)=fcont*eps0ij
1754 fprimcont=eps0ij*fprimcont/rij
1756 !Adam gacont(1,num_conti,i)=-fprimcont*xj+fcont*gg(1)
1757 !Adam gacont(2,num_conti,i)=-fprimcont*yj+fcont*gg(2)
1758 !Adam gacont(3,num_conti,i)=-fprimcont*zj+fcont*gg(3)
1759 ! Uncomment following 3 lines for Skolnick's type of SC correlation.
1760 gacont(1,num_conti,i)=-fprimcont*xj
1761 gacont(2,num_conti,i)=-fprimcont*yj
1762 gacont(3,num_conti,i)=-fprimcont*zj
1763 !d write (iout,'(2i5,2f10.5)') i,j,rij,facont(num_conti,i)
1764 !d write (iout,'(2i3,3f10.5)')
1765 !d & i,j,(gacont(kk,num_conti,i),kk=1,3)
1771 num_cont(i)=num_conti
1775 gvdwc(j,i)=expon*gvdwc(j,i)
1776 gvdwx(j,i)=expon*gvdwx(j,i)
1779 !******************************************************************************
1783 ! To save time, the factor of EXPON has been extracted from ALL components
1784 ! of GVDWC and GRADX. Remember to multiply them by this factor before further
1787 !******************************************************************************
1790 !-----------------------------------------------------------------------------
1791 subroutine eljk(evdw)
1793 ! This subroutine calculates the interaction energy of nonbonded side chains
1794 ! assuming the LJK potential of interaction.
1796 ! implicit real(kind=8) (a-h,o-z)
1797 ! include 'DIMENSIONS'
1798 ! include 'COMMON.GEO'
1799 ! include 'COMMON.VAR'
1800 ! include 'COMMON.LOCAL'
1801 ! include 'COMMON.CHAIN'
1802 ! include 'COMMON.DERIV'
1803 ! include 'COMMON.INTERACT'
1804 ! include 'COMMON.IOUNITS'
1805 ! include 'COMMON.NAMES'
1806 real(kind=8),dimension(3) :: gg,gg_lipi,gg_lipj
1809 integer :: i,iint,j,itypi,itypi1,k,itypj
1810 real(kind=8) :: rrij,xi,yi,zi,xj,yj,zj,fac_augm,e_augm,r_inv_ij, &
1811 sslipi,ssgradlipi, sslipj,ssgradlipj, aa, bb
1812 real(kind=8) :: evdw,rij,r_shift_inv,fac,e1,e2,evdwij
1814 ! print *,'Entering ELJK nnt=',nnt,' nct=',nct,' expon=',expon
1816 do i=iatsc_s,iatsc_e
1817 itypi=iabs(itype(i,1))
1818 if (itypi.eq.ntyp1) cycle
1819 itypi1=iabs(itype(i+1,1))
1823 call to_box(xi,yi,zi)
1824 call lipid_layer(xi,yi,zi,sslipi,ssgradlipi)
1827 ! Calculate SC interaction energy.
1829 do iint=1,nint_gr(i)
1830 do j=istart(i,iint),iend(i,iint)
1831 itypj=iabs(itype(j,1))
1832 if (itypj.eq.ntyp1) cycle
1836 call to_box(xj,yj,zj)
1837 call lipid_layer(xj,yj,zj,sslipj,ssgradlipj)
1838 aa=aa_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0 &
1839 +aa_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
1840 bb=bb_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0 &
1841 +bb_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
1842 xj=boxshift(xj-xi,boxxsize)
1843 yj=boxshift(yj-yi,boxysize)
1844 zj=boxshift(zj-zi,boxzsize)
1845 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
1846 fac_augm=rrij**expon
1847 e_augm=augm(itypi,itypj)*fac_augm
1848 r_inv_ij=dsqrt(rrij)
1850 r_shift_inv=1.0D0/(rij+r0(itypi,itypj)-sigma(itypi,itypj))
1851 fac=r_shift_inv**expon
1852 e1=fac*fac*aa_aq(itypi,itypj)
1853 e2=fac*bb_aq(itypi,itypj)
1855 !d sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
1856 !d epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
1857 !d write (iout,'(2(a3,i3,2x),8(1pd12.4)/2(3(1pd12.4),5x)/)')
1858 !d & restyp(itypi,1),i,restyp(itypj,1),j,aa(itypi,itypj),
1859 !d & bb(itypi,itypj),augm(itypi,itypj),epsi,sigm,
1860 !d & sigma(itypi,itypj),1.0D0/dsqrt(rrij),evdwij,
1861 !d & (c(k,i),k=1,3),(c(k,j),k=1,3)
1864 ! Calculate the components of the gradient in DC and X
1866 fac=-2.0D0*rrij*e_augm-r_inv_ij*r_shift_inv*(e1+e1+e2)
1871 gvdwx(k,i)=gvdwx(k,i)-gg(k)
1872 gvdwx(k,j)=gvdwx(k,j)+gg(k)
1873 gvdwc(k,i)=gvdwc(k,i)-gg(k)
1874 gvdwc(k,j)=gvdwc(k,j)+gg(k)
1878 !grad gvdwc(l,k)=gvdwc(l,k)+gg(l)
1886 gvdwc(j,i)=expon*gvdwc(j,i)
1887 gvdwx(j,i)=expon*gvdwx(j,i)
1892 !-----------------------------------------------------------------------------
1893 subroutine ebp(evdw)
1895 ! This subroutine calculates the interaction energy of nonbonded side chains
1896 ! assuming the Berne-Pechukas potential of interaction.
1900 ! implicit real(kind=8) (a-h,o-z)
1901 ! include 'DIMENSIONS'
1902 ! include 'COMMON.GEO'
1903 ! include 'COMMON.VAR'
1904 ! include 'COMMON.LOCAL'
1905 ! include 'COMMON.CHAIN'
1906 ! include 'COMMON.DERIV'
1907 ! include 'COMMON.NAMES'
1908 ! include 'COMMON.INTERACT'
1909 ! include 'COMMON.IOUNITS'
1910 ! include 'COMMON.CALC'
1912 !el integer :: icall
1913 !el common /srutu/ icall
1914 ! double precision rrsave(maxdim)
1917 integer :: iint,itypi,itypi1,itypj
1918 real(kind=8) :: rrij,xi,yi,zi, sslipi,ssgradlipi, sslipj, &
1920 real(kind=8) :: evdw,fac,e1,e2,sigm,epsi
1922 ! print *,'Entering EBP nnt=',nnt,' nct=',nct,' expon=',expon
1924 ! if (icall.eq.0) then
1930 do i=iatsc_s,iatsc_e
1931 itypi=iabs(itype(i,1))
1932 if (itypi.eq.ntyp1) cycle
1933 itypi1=iabs(itype(i+1,1))
1937 call to_box(xi,yi,zi)
1938 call lipid_layer(xi,yi,zi,sslipi,ssgradlipi)
1939 dxi=dc_norm(1,nres+i)
1940 dyi=dc_norm(2,nres+i)
1941 dzi=dc_norm(3,nres+i)
1942 ! dsci_inv=dsc_inv(itypi)
1943 dsci_inv=vbld_inv(i+nres)
1945 ! Calculate SC interaction energy.
1947 do iint=1,nint_gr(i)
1948 do j=istart(i,iint),iend(i,iint)
1950 itypj=iabs(itype(j,1))
1951 if (itypj.eq.ntyp1) cycle
1952 ! dscj_inv=dsc_inv(itypj)
1953 dscj_inv=vbld_inv(j+nres)
1954 chi1=chi(itypi,itypj)
1955 chi2=chi(itypj,itypi)
1962 alf12=0.5D0*(alf1+alf2)
1963 ! For diagnostics only!!!
1976 call to_box(xj,yj,zj)
1977 call lipid_layer(xj,yj,zj,sslipj,ssgradlipj)
1978 aa=aa_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0 &
1979 +aa_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
1980 bb=bb_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0 &
1981 +bb_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
1982 xj=boxshift(xj-xi,boxxsize)
1983 yj=boxshift(yj-yi,boxysize)
1984 zj=boxshift(zj-zi,boxzsize)
1985 dxj=dc_norm(1,nres+j)
1986 dyj=dc_norm(2,nres+j)
1987 dzj=dc_norm(3,nres+j)
1988 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
1989 !d if (icall.eq.0) then
1995 ! Calculate the angle-dependent terms of energy & contributions to derivatives.
1997 ! Calculate whole angle-dependent part of epsilon and contributions
1998 ! to its derivatives
1999 fac=(rrij*sigsq)**expon2
2000 e1=fac*fac*aa_aq(itypi,itypj)
2001 e2=fac*bb_aq(itypi,itypj)
2002 evdwij=eps1*eps2rt*eps3rt*(e1+e2)
2003 eps2der=evdwij*eps3rt
2004 eps3der=evdwij*eps2rt
2005 evdwij=evdwij*eps2rt*eps3rt
2008 sigm=dabs(aa_aq(itypi,itypj)/bb_aq(itypi,itypj))**(1.0D0/6.0D0)
2009 epsi=bb_aq(itypi,itypj)**2/aa_aq(itypi,itypj)
2010 !d write (iout,'(2(a3,i3,2x),15(0pf7.3))')
2011 !d & restyp(itypi,1),i,restyp(itypj,1),j,
2012 !d & epsi,sigm,chi1,chi2,chip1,chip2,
2013 !d & eps1,eps2rt**2,eps3rt**2,1.0D0/dsqrt(sigsq),
2014 !d & om1,om2,om12,1.0D0/dsqrt(rrij),
2017 ! Calculate gradient components.
2018 e1=e1*eps1*eps2rt**2*eps3rt**2
2019 fac=-expon*(e1+evdwij)
2022 ! Calculate radial part of the gradient
2026 ! Calculate the angular part of the gradient and sum add the contributions
2027 ! to the appropriate components of the Cartesian gradient.
2035 !-----------------------------------------------------------------------------
2036 subroutine egb(evdw)
2038 ! This subroutine calculates the interaction energy of nonbonded side chains
2039 ! assuming the Gay-Berne potential of interaction.
2042 ! implicit real(kind=8) (a-h,o-z)
2043 ! include 'DIMENSIONS'
2044 ! include 'COMMON.GEO'
2045 ! include 'COMMON.VAR'
2046 ! include 'COMMON.LOCAL'
2047 ! include 'COMMON.CHAIN'
2048 ! include 'COMMON.DERIV'
2049 ! include 'COMMON.NAMES'
2050 ! include 'COMMON.INTERACT'
2051 ! include 'COMMON.IOUNITS'
2052 ! include 'COMMON.CALC'
2053 ! include 'COMMON.CONTROL'
2054 ! include 'COMMON.SBRIDGE'
2057 integer :: iint,itypi,itypi1,itypj,subchap,icont
2058 real(kind=8) :: rrij,xi,yi,zi,sig,rij_shift,fac,e1,e2,sigm,epsi
2059 real(kind=8) :: evdw,sig0ij
2060 real(kind=8) :: xj_safe,yj_safe,zj_safe,xj_temp,yj_temp,zj_temp,&
2061 dist_temp, dist_init,aa,bb,ssgradlipi,ssgradlipj, &
2062 sslipi,sslipj,faclip
2064 real(kind=8) :: fracinbuf
2066 !cccc energy_dec=.false.
2067 ! print *,'Entering EGB nnt=',nnt,' nct=',nct,' expon=',expon
2070 ! if (icall.eq.0) lprn=.false.
2078 ! write (iout,*) "RWA", g_listscsc_start,g_listscsc_end,i,j
2079 if (nres_molec(1).eq.0) return
2080 do icont=g_listscsc_start,g_listscsc_end
2081 i=newcontlisti(icont)
2082 j=newcontlistj(icont)
2083 ! write (iout,*) "RWA", g_listscsc_start,g_listscsc_end,i,j
2084 ! do i=iatsc_s,iatsc_e
2085 !C print *,"I am in EVDW",i
2086 itypi=iabs(itype(i,1))
2087 ! if (i.ne.47) cycle
2088 if (itypi.eq.ntyp1) cycle
2089 itypi1=iabs(itype(i+1,1))
2093 call to_box(xi,yi,zi)
2094 call lipid_layer(xi,yi,zi,sslipi,ssgradlipi)
2096 dxi=dc_norm(1,nres+i)
2097 dyi=dc_norm(2,nres+i)
2098 dzi=dc_norm(3,nres+i)
2099 ! dsci_inv=dsc_inv(itypi)
2100 dsci_inv=vbld_inv(i+nres)
2101 ! write (iout,*) "i",i,dsc_inv(itypi),dsci_inv,1.0d0/vbld(i+nres)
2102 ! write (iout,*) "dcnori",dxi*dxi+dyi*dyi+dzi*dzi
2104 ! Calculate SC interaction energy.
2106 ! do iint=1,nint_gr(i)
2107 ! do j=istart(i,iint),iend(i,iint)
2108 IF (dyn_ss_mask(i).and.dyn_ss_mask(j)) THEN
2109 call dyn_ssbond_ene(i,j,evdwij)
2111 if (energy_dec) write (iout,'(a6,2i5,0pf7.3,a3)') &
2112 'evdw',i,j,evdwij,' ss'
2113 ! if (energy_dec) write (iout,*) &
2114 ! 'evdw',i,j,evdwij,' ss'
2116 !C search over all next residues
2117 if (dyn_ss_mask(k)) then
2118 !C check if they are cysteins
2119 !C write(iout,*) 'k=',k
2121 !c write(iout,*) "PRZED TRI", evdwij
2122 ! evdwij_przed_tri=evdwij
2123 call triple_ssbond_ene(i,j,k,evdwij)
2124 !c if(evdwij_przed_tri.ne.evdwij) then
2125 !c write (iout,*) "TRI:", evdwij, evdwij_przed_tri
2128 !c write(iout,*) "PO TRI", evdwij
2129 !C call the energy function that removes the artifical triple disulfide
2130 !C bond the soubroutine is located in ssMD.F
2132 if (energy_dec) write (iout,'(a6,2i5,0pf7.3,a3)') &
2133 'evdw',i,j,evdwij,'tss'
2134 endif!dyn_ss_mask(k)
2138 itypj=iabs(itype(j,1))
2139 if (itypj.eq.ntyp1) cycle
2140 ! if (j.ne.78) cycle
2141 ! dscj_inv=dsc_inv(itypj)
2142 dscj_inv=vbld_inv(j+nres)
2143 ! write (iout,*) "j",j,dsc_inv(itypj),dscj_inv,&
2144 ! 1.0d0/vbld(j+nres) !d
2145 ! write (iout,*) "i",i," j", j," itype",itype(i,1),itype(j,1)
2146 sig0ij=sigma(itypi,itypj)
2147 chi1=chi(itypi,itypj)
2148 chi2=chi(itypj,itypi)
2155 alf12=0.5D0*(alf1+alf2)
2156 ! For diagnostics only!!!
2169 call to_box(xj,yj,zj)
2170 call lipid_layer(xj,yj,zj,sslipj,ssgradlipj)
2171 ! write (iout,*) "KWA2", itypi,itypj
2172 aa=aa_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0 &
2173 +aa_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
2174 bb=bb_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0 &
2175 +bb_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
2176 xj=boxshift(xj-xi,boxxsize)
2177 yj=boxshift(yj-yi,boxysize)
2178 zj=boxshift(zj-zi,boxzsize)
2179 dxj=dc_norm(1,nres+j)
2180 dyj=dc_norm(2,nres+j)
2181 dzj=dc_norm(3,nres+j)
2182 ! write (iout,*) "dcnorj",dxi*dxi+dyi*dyi+dzi*dzi
2183 ! write (iout,*) "j",j," dc_norm",& !d
2184 ! dc_norm(1,nres+j),dc_norm(2,nres+j),dc_norm(3,nres+j)
2185 ! write(iout,*)"rrij ",rrij
2186 ! write(iout,*)"xj yj zj ", xj, yj, zj
2187 ! write(iout,*)"xi yi zi ", xi, yi, zi
2188 ! write(iout,*)"c ", c(1,:), c(2,:), c(3,:)
2189 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
2191 sss_ele_cut=sscale_ele(1.0d0/(rij))
2192 sss_ele_grad=sscagrad_ele(1.0d0/(rij))
2193 ! print *,sss_ele_cut,sss_ele_grad,&
2194 ! 1.0d0/(rij),r_cut_ele,rlamb_ele
2195 if (sss_ele_cut.le.0.0) cycle
2196 ! Calculate angle-dependent terms of energy and contributions to their
2200 sig=sig0ij*dsqrt(sigsq)
2201 rij_shift=1.0D0/rij-sig+sig0ij
2202 ! write(iout,*)" rij_shift",rij_shift," rij",rij," sig",sig,&
2204 ! for diagnostics; uncomment
2205 ! rij_shift=1.2*sig0ij
2206 ! I hate to put IF's in the loops, but here don't have another choice!!!!
2207 if (rij_shift.le.0.0D0) then
2209 !d write (iout,'(2(a3,i3,2x),17(0pf7.3))')
2210 !d & restyp(itypi,1),i,restyp(itypj,1),j,
2211 !d & rij_shift,1.0D0/rij,sig,sig0ij,sigsq,1-dsqrt(sigsq)
2215 !---------------------------------------------------------------
2216 rij_shift=1.0D0/rij_shift
2217 fac=rij_shift**expon
2219 e1=fac*fac*aa!(itypi,itypj)
2220 e2=fac*bb!(itypi,itypj)
2221 evdwij=eps1*eps2rt*eps3rt*(e1+e2)
2222 eps2der=evdwij*eps3rt
2223 eps3der=evdwij*eps2rt
2224 ! write(iout,*)"aa, bb ",aa(:,:),bb(:,:)
2225 ! write (iout,*) "sigsq",sigsq," sig",sig," eps2rt",eps2rt,& !d
2226 ! " eps3rt",eps3rt," eps1",eps1," e1",e1," e2",e2," fac",fac !d
2227 evdwij=evdwij*eps2rt*eps3rt
2228 evdw=evdw+evdwij*sss_ele_cut
2230 sigm=dabs(aa/bb)**(1.0D0/6.0D0)
2231 epsi=bb**2/aa!(itypi,itypj)
2232 write (iout,'(2(a3,i3,2x),17(0pf7.3))') &
2233 restyp(itypi,1),i,restyp(itypj,1),j, &
2234 epsi,sigm,chi1,chi2,chip1,chip2, &
2235 eps1,eps2rt**2,eps3rt**2,sig,sig0ij, &
2236 om1,om2,om12,1.0D0/rij,1.0D0/rij_shift, &
2240 if (energy_dec) write (iout,'(a6,2i5,0pf7.3,2e10.2,e11.3)')&
2241 'evdw',i,j,evdwij,1.0D0/rij,1.0D0/rij_shift,dabs(aa/bb)**(1.0D0/6.0D0)!,"egb"
2242 !C print *,i,j,c(1,i),c(1,j),c(2,i),c(2,j),c(3,i),c(3,j)
2243 ! if (energy_dec) write (iout,*) &
2245 ! print *,"ZALAMKA", evdw
2247 ! Calculate gradient components.
2248 e1=e1*eps1*eps2rt**2*eps3rt**2
2249 fac=-expon*(e1+evdwij)*rij_shift
2252 ! print *,'before fac',fac,rij,evdwij
2253 fac=fac+evdwij*sss_ele_grad/sss_ele_cut&
2255 ! print *,'grad part scale',fac, &
2256 ! evdwij*sss_ele_grad/sss_ele_cut &
2257 ! /sigma(itypi,itypj)*rij
2259 ! Calculate the radial part of the gradient
2263 !C Calculate the radial part of the gradient
2264 gg_lipi(3)=eps1*(eps2rt*eps2rt)&
2265 *(eps3rt*eps3rt)*sss_ele_cut/2.0d0*(faclip*faclip*&
2266 (aa_lip(itypi,itypj)-aa_aq(itypi,itypj))&
2267 +faclip*(bb_lip(itypi,itypj)-bb_aq(itypi,itypj)))
2268 gg_lipj(3)=ssgradlipj*gg_lipi(3)
2269 gg_lipi(3)=gg_lipi(3)*ssgradlipi
2271 ! print *,'before sc_grad', gg(1),gg(2),gg(3)
2272 ! Calculate angular part of the gradient.
2278 ! print *,"ZALAMKA", evdw
2279 ! write (iout,*) "Number of loop steps in EGB:",ind
2280 !ccc energy_dec=.false.
2283 !-----------------------------------------------------------------------------
2284 subroutine egbv(evdw)
2286 ! This subroutine calculates the interaction energy of nonbonded side chains
2287 ! assuming the Gay-Berne-Vorobjev potential of interaction.
2291 ! implicit real(kind=8) (a-h,o-z)
2292 ! include 'DIMENSIONS'
2293 ! include 'COMMON.GEO'
2294 ! include 'COMMON.VAR'
2295 ! include 'COMMON.LOCAL'
2296 ! include 'COMMON.CHAIN'
2297 ! include 'COMMON.DERIV'
2298 ! include 'COMMON.NAMES'
2299 ! include 'COMMON.INTERACT'
2300 ! include 'COMMON.IOUNITS'
2301 ! include 'COMMON.CALC'
2303 !el integer :: icall
2304 !el common /srutu/ icall
2307 integer :: iint,itypi,itypi1,itypj
2308 real(kind=8) :: rrij,xi,yi,zi,r0ij,fac_augm,e_augm,fac,e1,e2, &
2309 sigm,sslipi,ssgradlipi, sslipj,ssgradlipj, aa, bb
2310 real(kind=8) :: evdw,sig0ij,sig,rij_shift,epsi
2312 ! print *,'Entering EGB nnt=',nnt,' nct=',nct,' expon=',expon
2315 ! if (icall.eq.0) lprn=.true.
2317 do i=iatsc_s,iatsc_e
2318 itypi=iabs(itype(i,1))
2319 if (itypi.eq.ntyp1) cycle
2320 itypi1=iabs(itype(i+1,1))
2324 call to_box(xi,yi,zi)
2325 call lipid_layer(xi,yi,zi,sslipi,ssgradlipi)
2326 dxi=dc_norm(1,nres+i)
2327 dyi=dc_norm(2,nres+i)
2328 dzi=dc_norm(3,nres+i)
2329 ! dsci_inv=dsc_inv(itypi)
2330 dsci_inv=vbld_inv(i+nres)
2332 ! Calculate SC interaction energy.
2334 do iint=1,nint_gr(i)
2335 do j=istart(i,iint),iend(i,iint)
2337 itypj=iabs(itype(j,1))
2338 if (itypj.eq.ntyp1) cycle
2339 ! dscj_inv=dsc_inv(itypj)
2340 dscj_inv=vbld_inv(j+nres)
2341 sig0ij=sigma(itypi,itypj)
2342 r0ij=r0(itypi,itypj)
2343 chi1=chi(itypi,itypj)
2344 chi2=chi(itypj,itypi)
2351 alf12=0.5D0*(alf1+alf2)
2352 ! For diagnostics only!!!
2365 call to_box(xj,yj,zj)
2366 call lipid_layer(xj,yj,zj,sslipj,ssgradlipj)
2367 aa=aa_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0 &
2368 +aa_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
2369 bb=bb_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0 &
2370 +bb_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
2371 xj=boxshift(xj-xi,boxxsize)
2372 yj=boxshift(yj-yi,boxysize)
2373 zj=boxshift(zj-zi,boxzsize)
2374 dxj=dc_norm(1,nres+j)
2375 dyj=dc_norm(2,nres+j)
2376 dzj=dc_norm(3,nres+j)
2377 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
2379 ! Calculate angle-dependent terms of energy and contributions to their
2383 sig=sig0ij*dsqrt(sigsq)
2384 rij_shift=1.0D0/rij-sig+r0ij
2385 ! I hate to put IF's in the loops, but here don't have another choice!!!!
2386 if (rij_shift.le.0.0D0) then
2391 !---------------------------------------------------------------
2392 rij_shift=1.0D0/rij_shift
2393 fac=rij_shift**expon
2394 e1=fac*fac*aa_aq(itypi,itypj)
2395 e2=fac*bb_aq(itypi,itypj)
2396 evdwij=eps1*eps2rt*eps3rt*(e1+e2)
2397 eps2der=evdwij*eps3rt
2398 eps3der=evdwij*eps2rt
2399 fac_augm=rrij**expon
2400 e_augm=augm(itypi,itypj)*fac_augm
2401 evdwij=evdwij*eps2rt*eps3rt
2402 evdw=evdw+evdwij+e_augm
2404 sigm=dabs(aa_aq(itypi,itypj)/&
2405 bb_aq(itypi,itypj))**(1.0D0/6.0D0)
2406 epsi=bb_aq(itypi,itypj)**2/aa_aq(itypi,itypj)
2407 write (iout,'(2(a3,i3,2x),17(0pf7.3))') &
2408 restyp(itypi,1),i,restyp(itypj,1),j,&
2409 epsi,sigm,sig,(augm(itypi,itypj)/epsi)**(1.0D0/12.0D0),&
2410 chi1,chi2,chip1,chip2,&
2411 eps1,eps2rt**2,eps3rt**2,&
2412 om1,om2,om12,1.0D0/rij,1.0D0/rij_shift,&
2415 ! Calculate gradient components.
2416 e1=e1*eps1*eps2rt**2*eps3rt**2
2417 fac=-expon*(e1+evdwij)*rij_shift
2419 fac=rij*fac-2*expon*rrij*e_augm
2420 ! Calculate the radial part of the gradient
2424 ! Calculate angular part of the gradient.
2430 !-----------------------------------------------------------------------------
2431 !el subroutine sc_angular in module geometry
2432 !-----------------------------------------------------------------------------
2433 subroutine e_softsphere(evdw)
2435 ! This subroutine calculates the interaction energy of nonbonded side chains
2436 ! assuming the LJ potential of interaction.
2438 ! implicit real(kind=8) (a-h,o-z)
2439 ! include 'DIMENSIONS'
2440 real(kind=8),parameter :: accur=1.0d-10
2441 ! include 'COMMON.GEO'
2442 ! include 'COMMON.VAR'
2443 ! include 'COMMON.LOCAL'
2444 ! include 'COMMON.CHAIN'
2445 ! include 'COMMON.DERIV'
2446 ! include 'COMMON.INTERACT'
2447 ! include 'COMMON.TORSION'
2448 ! include 'COMMON.SBRIDGE'
2449 ! include 'COMMON.NAMES'
2450 ! include 'COMMON.IOUNITS'
2451 ! include 'COMMON.CONTACTS'
2452 real(kind=8),dimension(3) :: gg,gg_lipi,gg_lipj
2453 !d print *,'Entering Esoft_sphere nnt=',nnt,' nct=',nct
2455 integer :: i,iint,j,itypi,itypi1,itypj,k
2456 real(kind=8) :: evdw,xj,yj,zj,xi,yi,zi,rij,r0ij,r0ijsq,evdwij
2460 do i=iatsc_s,iatsc_e
2461 itypi=iabs(itype(i,1))
2462 if (itypi.eq.ntyp1) cycle
2463 itypi1=iabs(itype(i+1,1))
2467 call to_box(xi,yi,zi)
2470 ! Calculate SC interaction energy.
2472 do iint=1,nint_gr(i)
2473 !d write (iout,*) 'i=',i,' iint=',iint,' istart=',istart(i,iint),
2474 !d & 'iend=',iend(i,iint)
2475 do j=istart(i,iint),iend(i,iint)
2476 itypj=iabs(itype(j,1))
2477 if (itypj.eq.ntyp1) cycle
2478 xj=boxshift(c(1,nres+j)-xi,boxxsize)
2479 yj=boxshift(c(2,nres+j)-yi,boxysize)
2480 zj=boxshift(c(3,nres+j)-zi,boxzsize)
2481 rij=xj*xj+yj*yj+zj*zj
2482 ! write (iout,*)'i=',i,' j=',j,' itypi=',itypi,' itypj=',itypj
2483 r0ij=r0(itypi,itypj)
2485 ! print *,i,j,r0ij,dsqrt(rij)
2486 if (rij.lt.r0ijsq) then
2487 evdwij=0.25d0*(rij-r0ijsq)**2
2495 ! Calculate the components of the gradient in DC and X
2501 gvdwx(k,i)=gvdwx(k,i)-gg(k)
2502 gvdwx(k,j)=gvdwx(k,j)+gg(k)
2503 gvdwc(k,i)=gvdwc(k,i)-gg(k)
2504 gvdwc(k,j)=gvdwc(k,j)+gg(k)
2508 !grad gvdwc(l,k)=gvdwc(l,k)+gg(l)
2515 end subroutine e_softsphere
2516 !-----------------------------------------------------------------------------
2517 subroutine eelec_soft_sphere(ees,evdw1,eel_loc,eello_turn3,eello_turn4)
2519 ! Soft-sphere potential of p-p interaction
2521 ! implicit real(kind=8) (a-h,o-z)
2522 ! include 'DIMENSIONS'
2523 ! include 'COMMON.CONTROL'
2524 ! include 'COMMON.IOUNITS'
2525 ! include 'COMMON.GEO'
2526 ! include 'COMMON.VAR'
2527 ! include 'COMMON.LOCAL'
2528 ! include 'COMMON.CHAIN'
2529 ! include 'COMMON.DERIV'
2530 ! include 'COMMON.INTERACT'
2531 ! include 'COMMON.CONTACTS'
2532 ! include 'COMMON.TORSION'
2533 ! include 'COMMON.VECTORS'
2534 ! include 'COMMON.FFIELD'
2535 real(kind=8),dimension(3) :: ggg
2536 !d write(iout,*) 'In EELEC_soft_sphere'
2538 integer :: i,j,k,num_conti,iteli,itelj
2539 real(kind=8) :: ees,evdw1,eel_loc,eello_turn3,eello_turn4
2540 real(kind=8) :: dxi,dyi,dzi,xmedi,ymedi,zmedi,r0ij,r0ijsq
2541 real(kind=8) :: dxj,dyj,dzj,xj,yj,zj,rij,evdw1ij,fac
2549 do i=iatel_s,iatel_e
2550 if (itype(i,1).eq.ntyp1 .or. itype(i+1,1).eq.ntyp1) cycle
2554 xmedi=c(1,i)+0.5d0*dxi
2555 ymedi=c(2,i)+0.5d0*dyi
2556 zmedi=c(3,i)+0.5d0*dzi
2557 call to_box(xmedi,ymedi,zmedi)
2559 ! write (iout,*) 'i',i,' ielstart',ielstart(i),' ielend',ielend(i)
2560 do j=ielstart(i),ielend(i)
2561 if (itype(j,1).eq.ntyp1 .or. itype(j+1,1).eq.ntyp1) cycle
2565 if (j.eq.i+2 .and. itelj.eq.2) iteli=2
2566 r0ij=rpp(iteli,itelj)
2571 xj=c(1,j)+0.5D0*dxj-xmedi
2572 yj=c(2,j)+0.5D0*dyj-ymedi
2573 zj=c(3,j)+0.5D0*dzj-zmedi
2574 call to_box(xj,yj,zj)
2575 xj=boxshift(xj-xmedi,boxxsize)
2576 yj=boxshift(yj-ymedi,boxysize)
2577 zj=boxshift(zj-zmedi,boxzsize)
2578 rij=xj*xj+yj*yj+zj*zj
2579 if (rij.lt.r0ijsq) then
2580 evdw1ij=0.25d0*(rij-r0ijsq)**2
2588 ! Calculate contributions to the Cartesian gradient.
2594 gvdwpp(k,i)=gvdwpp(k,i)-ggg(k)
2595 gvdwpp(k,j)=gvdwpp(k,j)+ggg(k)
2598 ! Loop over residues i+1 thru j-1.
2602 !grad gelc(l,k)=gelc(l,k)+ggg(l)
2607 !grad do i=nnt,nct-1
2609 !grad gelc(k,i)=gelc(k,i)+0.5d0*gelc(k,i)
2611 !grad do j=i+1,nct-1
2613 !grad gelc(k,i)=gelc(k,i)+gelc(k,j)
2618 end subroutine eelec_soft_sphere
2619 !-----------------------------------------------------------------------------
2620 subroutine vec_and_deriv
2621 ! implicit real(kind=8) (a-h,o-z)
2622 ! include 'DIMENSIONS'
2626 ! include 'COMMON.IOUNITS'
2627 ! include 'COMMON.GEO'
2628 ! include 'COMMON.VAR'
2629 ! include 'COMMON.LOCAL'
2630 ! include 'COMMON.CHAIN'
2631 ! include 'COMMON.VECTORS'
2632 ! include 'COMMON.SETUP'
2633 ! include 'COMMON.TIME1'
2634 real(kind=8),dimension(3,3,2) :: uyder,uzder
2635 real(kind=8),dimension(2) :: vbld_inv_temp
2636 ! Compute the local reference systems. For reference system (i), the
2637 ! X-axis points from CA(i) to CA(i+1), the Y axis is in the
2638 ! CA(i)-CA(i+1)-CA(i+2) plane, and the Z axis is perpendicular to this plane.
2641 real(kind=8) :: facy,fac,costh
2644 do i=ivec_start,ivec_end
2648 if (i.eq.nres-1) then
2649 ! Case of the last full residue
2650 ! Compute the Z-axis
2651 call vecpr(dc_norm(1,i),dc_norm(1,i-1),uz(1,i))
2652 costh=dcos(pi-theta(nres))
2653 fac=1.0d0/dsqrt(1.0d0-costh*costh)
2657 ! Compute the derivatives of uz
2659 uzder(2,1,1)=-dc_norm(3,i-1)
2660 uzder(3,1,1)= dc_norm(2,i-1)
2661 uzder(1,2,1)= dc_norm(3,i-1)
2663 uzder(3,2,1)=-dc_norm(1,i-1)
2664 uzder(1,3,1)=-dc_norm(2,i-1)
2665 uzder(2,3,1)= dc_norm(1,i-1)
2668 uzder(2,1,2)= dc_norm(3,i)
2669 uzder(3,1,2)=-dc_norm(2,i)
2670 uzder(1,2,2)=-dc_norm(3,i)
2672 uzder(3,2,2)= dc_norm(1,i)
2673 uzder(1,3,2)= dc_norm(2,i)
2674 uzder(2,3,2)=-dc_norm(1,i)
2676 ! Compute the Y-axis
2679 uy(k,i)=fac*(dc_norm(k,i-1)-costh*dc_norm(k,i))
2681 ! Compute the derivatives of uy
2684 uyder(k,j,1)=2*dc_norm(k,i-1)*dc_norm(j,i) &
2685 -dc_norm(k,i)*dc_norm(j,i-1)
2686 uyder(k,j,2)=-dc_norm(j,i)*dc_norm(k,i)
2688 uyder(j,j,1)=uyder(j,j,1)-costh
2689 uyder(j,j,2)=1.0d0+uyder(j,j,2)
2694 uygrad(l,k,j,i)=uyder(l,k,j)
2695 uzgrad(l,k,j,i)=uzder(l,k,j)
2699 call unormderiv(uy(1,i),uyder(1,1,1),facy,uygrad(1,1,1,i))
2700 call unormderiv(uy(1,i),uyder(1,1,2),facy,uygrad(1,1,2,i))
2701 call unormderiv(uz(1,i),uzder(1,1,1),fac,uzgrad(1,1,1,i))
2702 call unormderiv(uz(1,i),uzder(1,1,2),fac,uzgrad(1,1,2,i))
2705 ! Compute the Z-axis
2706 call vecpr(dc_norm(1,i),dc_norm(1,i+1),uz(1,i))
2707 costh=dcos(pi-theta(i+2))
2708 fac=1.0d0/dsqrt(1.0d0-costh*costh)
2712 ! Compute the derivatives of uz
2714 uzder(2,1,1)=-dc_norm(3,i+1)
2715 uzder(3,1,1)= dc_norm(2,i+1)
2716 uzder(1,2,1)= dc_norm(3,i+1)
2718 uzder(3,2,1)=-dc_norm(1,i+1)
2719 uzder(1,3,1)=-dc_norm(2,i+1)
2720 uzder(2,3,1)= dc_norm(1,i+1)
2723 uzder(2,1,2)= dc_norm(3,i)
2724 uzder(3,1,2)=-dc_norm(2,i)
2725 uzder(1,2,2)=-dc_norm(3,i)
2727 uzder(3,2,2)= dc_norm(1,i)
2728 uzder(1,3,2)= dc_norm(2,i)
2729 uzder(2,3,2)=-dc_norm(1,i)
2731 ! Compute the Y-axis
2734 uy(k,i)=facy*(dc_norm(k,i+1)-costh*dc_norm(k,i))
2736 ! Compute the derivatives of uy
2739 uyder(k,j,1)=2*dc_norm(k,i+1)*dc_norm(j,i) &
2740 -dc_norm(k,i)*dc_norm(j,i+1)
2741 uyder(k,j,2)=-dc_norm(j,i)*dc_norm(k,i)
2743 uyder(j,j,1)=uyder(j,j,1)-costh
2744 uyder(j,j,2)=1.0d0+uyder(j,j,2)
2749 uygrad(l,k,j,i)=uyder(l,k,j)
2750 uzgrad(l,k,j,i)=uzder(l,k,j)
2754 call unormderiv(uy(1,i),uyder(1,1,1),facy,uygrad(1,1,1,i))
2755 call unormderiv(uy(1,i),uyder(1,1,2),facy,uygrad(1,1,2,i))
2756 call unormderiv(uz(1,i),uzder(1,1,1),fac,uzgrad(1,1,1,i))
2757 call unormderiv(uz(1,i),uzder(1,1,2),fac,uzgrad(1,1,2,i))
2761 vbld_inv_temp(1)=vbld_inv(i+1)
2762 if (i.lt.nres-1) then
2763 vbld_inv_temp(2)=vbld_inv(i+2)
2765 vbld_inv_temp(2)=vbld_inv(i)
2770 uygrad(l,k,j,i)=vbld_inv_temp(j)*uygrad(l,k,j,i)
2771 uzgrad(l,k,j,i)=vbld_inv_temp(j)*uzgrad(l,k,j,i)
2776 #if defined(PARVEC) && defined(MPI)
2777 if (nfgtasks1.gt.1) then
2779 ! print *,"Processor",fg_rank1,kolor1," ivec_start",ivec_start,
2780 ! & " ivec_displ",(ivec_displ(i),i=0,nfgtasks1-1),
2781 ! & " ivec_count",(ivec_count(i),i=0,nfgtasks1-1)
2782 call MPI_Allgatherv(uy(1,ivec_start),ivec_count(fg_rank1),&
2783 MPI_UYZ,uy(1,1),ivec_count(0),ivec_displ(0),MPI_UYZ,&
2785 call MPI_Allgatherv(uz(1,ivec_start),ivec_count(fg_rank1),&
2786 MPI_UYZ,uz(1,1),ivec_count(0),ivec_displ(0),MPI_UYZ,&
2788 call MPI_Allgatherv(uygrad(1,1,1,ivec_start),&
2789 ivec_count(fg_rank1),MPI_UYZGRAD,uygrad(1,1,1,1),ivec_count(0),&
2790 ivec_displ(0),MPI_UYZGRAD,FG_COMM1,IERR)
2791 call MPI_Allgatherv(uzgrad(1,1,1,ivec_start),&
2792 ivec_count(fg_rank1),MPI_UYZGRAD,uzgrad(1,1,1,1),ivec_count(0),&
2793 ivec_displ(0),MPI_UYZGRAD,FG_COMM1,IERR)
2794 time_gather=time_gather+MPI_Wtime()-time00
2796 ! if (fg_rank.eq.0) then
2797 ! write (iout,*) "Arrays UY and UZ"
2799 ! write (iout,'(i5,3f10.5,5x,3f10.5)') i,(uy(k,i),k=1,3),
2805 end subroutine vec_and_deriv
2806 !-----------------------------------------------------------------------------
2807 subroutine check_vecgrad
2808 ! implicit real(kind=8) (a-h,o-z)
2809 ! include 'DIMENSIONS'
2810 ! include 'COMMON.IOUNITS'
2811 ! include 'COMMON.GEO'
2812 ! include 'COMMON.VAR'
2813 ! include 'COMMON.LOCAL'
2814 ! include 'COMMON.CHAIN'
2815 ! include 'COMMON.VECTORS'
2816 real(kind=8),dimension(3,3,2,nres) :: uygradt,uzgradt !(3,3,2,maxres)
2817 real(kind=8),dimension(3,nres) :: uyt,uzt !(3,maxres)
2818 real(kind=8),dimension(3,3,2) :: uygradn,uzgradn
2819 real(kind=8),dimension(3) :: erij
2820 real(kind=8) :: delta=1.0d-7
2826 !rc write(iout,'(2i5,2(3f10.5,5x))') i,1,dc_norm(:,i)
2827 !rc write(iout,'(2i5,2(3f10.5,5x))') i,2,uy(:,i)
2828 !rc write(iout,'(2i5,2(3f10.5,5x)/)')i,3,uz(:,i)
2829 !d write(iout,'(2i5,2(3f10.5,5x))') i,1,
2830 !d & (dc_norm(if90,i),if90=1,3)
2831 !d write(iout,'(2i5,2(3f10.5,5x))') i,2,(uy(if90,i),if90=1,3)
2832 !d write(iout,'(2i5,2(3f10.5,5x)/)')i,3,(uz(if90,i),if90=1,3)
2833 !d write(iout,'(a)')
2839 uygradt(l,k,j,i)=uygrad(l,k,j,i)
2840 uzgradt(l,k,j,i)=uzgrad(l,k,j,i)
2853 !d write (iout,*) 'i=',i
2855 erij(k)=dc_norm(k,i)
2859 dc_norm(k,i)=erij(k)
2861 dc_norm(j,i)=dc_norm(j,i)+delta
2862 ! fac=dsqrt(scalar(dc_norm(1,i),dc_norm(1,i)))
2864 ! dc_norm(k,i)=dc_norm(k,i)/fac
2866 ! write (iout,*) (dc_norm(k,i),k=1,3)
2867 ! write (iout,*) (erij(k),k=1,3)
2870 uygradn(k,j,1)=(uy(k,i)-uyt(k,i))/delta
2871 uygradn(k,j,2)=(uy(k,i-1)-uyt(k,i-1))/delta
2872 uzgradn(k,j,1)=(uz(k,i)-uzt(k,i))/delta
2873 uzgradn(k,j,2)=(uz(k,i-1)-uzt(k,i-1))/delta
2875 ! write (iout,'(i5,3f8.5,3x,3f8.5,5x,3f8.5,3x,3f8.5)')
2876 ! & j,(uzgradt(k,j,1,i),k=1,3),(uzgradn(k,j,1),k=1,3),
2877 ! & (uzgradt(k,j,2,i-1),k=1,3),(uzgradn(k,j,2),k=1,3)
2880 dc_norm(k,i)=erij(k)
2883 !d write (iout,'(i5,3f8.5,3x,3f8.5,5x,3f8.5,3x,3f8.5)')
2884 !d & k,(uygradt(k,l,1,i),l=1,3),(uygradn(k,l,1),l=1,3),
2885 !d & (uygradt(k,l,2,i-1),l=1,3),(uygradn(k,l,2),l=1,3)
2886 !d write (iout,'(i5,3f8.5,3x,3f8.5,5x,3f8.5,3x,3f8.5)')
2887 !d & k,(uzgradt(k,l,1,i),l=1,3),(uzgradn(k,l,1),l=1,3),
2888 !d & (uzgradt(k,l,2,i-1),l=1,3),(uzgradn(k,l,2),l=1,3)
2889 !d write (iout,'(a)')
2893 end subroutine check_vecgrad
2894 !-----------------------------------------------------------------------------
2895 subroutine set_matrices
2896 ! implicit real(kind=8) (a-h,o-z)
2897 ! include 'DIMENSIONS'
2900 ! include "COMMON.SETUP"
2902 integer :: status(MPI_STATUS_SIZE)
2904 ! include 'COMMON.IOUNITS'
2905 ! include 'COMMON.GEO'
2906 ! include 'COMMON.VAR'
2907 ! include 'COMMON.LOCAL'
2908 ! include 'COMMON.CHAIN'
2909 ! include 'COMMON.DERIV'
2910 ! include 'COMMON.INTERACT'
2911 ! include 'COMMON.CONTACTS'
2912 ! include 'COMMON.TORSION'
2913 ! include 'COMMON.VECTORS'
2914 ! include 'COMMON.FFIELD'
2915 real(kind=8) :: auxvec(2),auxmat(2,2)
2916 integer :: i,iti1,iti,k,l
2917 real(kind=8) :: sin1,cos1,sin2,cos2,dwacos2,dwasin2,cost1,sint1,&
2918 sint1sq,sint1cub,sint1cost1,b1k,b2k,aux
2919 ! print *,"in set matrices"
2921 ! Compute the virtual-bond-torsional-angle dependent quantities needed
2922 ! to calculate the el-loc multibody terms of various order.
2927 do i=ivec_start+2,ivec_end+2
2931 if (i.gt. nnt+2 .and. i.lt.nct+2) then
2932 if (itype(i-2,1).eq.0) then
2935 iti = itype2loc(itype(i-2,1))
2940 !c if (i.gt. iatel_s+1 .and. i.lt.iatel_e+4) then
2941 if (i.gt. nnt+1 .and. i.lt.nct+1) then
2942 iti1 = itype2loc(itype(i-1,1))
2946 ! print *,i,itype(i-2,1),iti
2948 cost1=dcos(theta(i-1))
2949 sint1=dsin(theta(i-1))
2951 sint1cub=sint1sq*sint1
2952 sint1cost1=2*sint1*cost1
2953 ! print *,"cost1",cost1,theta(i-1)
2954 !c write (iout,*) "bnew1",i,iti
2955 !c write (iout,*) (bnew1(k,1,iti),k=1,3)
2956 !c write (iout,*) (bnew1(k,2,iti),k=1,3)
2957 !c write (iout,*) "bnew2",i,iti
2958 !c write (iout,*) (bnew2(k,1,iti),k=1,3)
2959 !c write (iout,*) (bnew2(k,2,iti),k=1,3)
2961 ! print *,bnew1(1,k,iti),"bnew1"
2963 b1k=bnew1(1,k,iti)+(bnew1(2,k,iti)+bnew1(3,k,iti)*cost1)*cost1
2965 ! write(*,*) shape(b1)
2966 ! if(.not.allocated(b1)) print *, "WTF?"
2971 gtb1(k,i-2)=cost1*b1k-sint1sq*&
2972 (bnew1(2,k,iti)+2*bnew1(3,k,iti)*cost1)
2973 ! print *,gtb1(k,i-2)
2975 b2k=bnew2(1,k,iti)+(bnew2(2,k,iti)+bnew2(3,k,iti)*cost1)*cost1
2979 gtb2(k,i-2)=cost1*b2k-sint1sq*&
2980 (bnew2(2,k,iti)+2*bnew2(3,k,iti)*cost1)
2981 ! print *,gtb2(k,i-2)
2986 aux=ccnew(1,k,iti)+(ccnew(2,k,iti)+ccnew(3,k,iti)*cost1)*cost1
2987 cc(1,k,i-2)=sint1sq*aux
2988 gtcc(1,k,i-2)=sint1cost1*aux-sint1cub*&
2989 (ccnew(2,k,iti)+2*ccnew(3,k,iti)*cost1)
2990 aux=ddnew(1,k,iti)+(ddnew(2,k,iti)+ddnew(3,k,iti)*cost1)*cost1
2991 dd(1,k,i-2)=sint1sq*aux
2992 gtdd(1,k,i-2)=sint1cost1*aux-sint1cub*&
2993 (ddnew(2,k,iti)+2*ddnew(3,k,iti)*cost1)
2995 ! print *,"after cc"
2996 cc(2,1,i-2)=cc(1,2,i-2)
2997 cc(2,2,i-2)=-cc(1,1,i-2)
2998 gtcc(2,1,i-2)=gtcc(1,2,i-2)
2999 gtcc(2,2,i-2)=-gtcc(1,1,i-2)
3000 dd(2,1,i-2)=dd(1,2,i-2)
3001 dd(2,2,i-2)=-dd(1,1,i-2)
3002 gtdd(2,1,i-2)=gtdd(1,2,i-2)
3003 gtdd(2,2,i-2)=-gtdd(1,1,i-2)
3004 ! print *,"after dd"
3008 aux=eenew(1,l,k,iti)+eenew(2,l,k,iti)*cost1
3009 EE(l,k,i-2)=sint1sq*aux
3010 gtEE(l,k,i-2)=sint1cost1*aux-sint1cub*eenew(2,l,k,iti)
3013 EE(1,1,i-2)=EE(1,1,i-2)+e0new(1,iti)*cost1
3014 EE(1,2,i-2)=EE(1,2,i-2)+e0new(2,iti)+e0new(3,iti)*cost1
3015 EE(2,1,i-2)=EE(2,1,i-2)+e0new(2,iti)*cost1+e0new(3,iti)
3016 EE(2,2,i-2)=EE(2,2,i-2)-e0new(1,iti)
3017 gtEE(1,1,i-2)=gtEE(1,1,i-2)-e0new(1,iti)*sint1
3018 gtEE(1,2,i-2)=gtEE(1,2,i-2)-e0new(3,iti)*sint1
3019 gtEE(2,1,i-2)=gtEE(2,1,i-2)-e0new(2,iti)*sint1
3020 ! print *,"after ee"
3022 !c b1tilde(1,i-2)=b1(1,i-2)
3023 !c b1tilde(2,i-2)=-b1(2,i-2)
3024 !c b2tilde(1,i-2)=b2(1,i-2)
3025 !c b2tilde(2,i-2)=-b2(2,i-2)
3027 write (iout,*) 'i=',i-2,gtb1(2,i-2),gtb1(1,i-2)
3028 write(iout,*) 'b1=',(b1(k,i-2),k=1,2)
3029 write(iout,*) 'b2=',(b2(k,i-2),k=1,2)
3030 write (iout,*) 'theta=', theta(i-1)
3033 if (i.gt. nnt+2 .and. i.lt.nct+2) then
3034 ! write(iout,*) "i,",molnum(i),nloctyp
3035 ! print *, "i,",molnum(i),i,itype(i-2,1)
3036 if (molnum(i).eq.1) then
3037 if (itype(i-2,1).eq.ntyp1) then
3040 iti = itype2loc(itype(i-2,1))
3048 !c write (iout,*) "i",i-1," itype",itype(i-2)," iti",iti
3049 !c if (i.gt. iatel_s+1 .and. i.lt.iatel_e+4) then
3050 if (i.gt. nnt+1 .and. i.lt.nct+1) then
3051 iti1 = itype2loc(itype(i-1,1))
3062 CC(k,l,i-2)=ccold(k,l,iti)
3063 DD(k,l,i-2)=ddold(k,l,iti)
3064 EE(k,l,i-2)=eeold(k,l,iti)
3068 b1tilde(1,i-2)= b1(1,i-2)
3069 b1tilde(2,i-2)=-b1(2,i-2)
3070 b2tilde(1,i-2)= b2(1,i-2)
3071 b2tilde(2,i-2)=-b2(2,i-2)
3073 Ctilde(1,1,i-2)= CC(1,1,i-2)
3074 Ctilde(1,2,i-2)= CC(1,2,i-2)
3075 Ctilde(2,1,i-2)=-CC(2,1,i-2)
3076 Ctilde(2,2,i-2)=-CC(2,2,i-2)
3078 Dtilde(1,1,i-2)= DD(1,1,i-2)
3079 Dtilde(1,2,i-2)= DD(1,2,i-2)
3080 Dtilde(2,1,i-2)=-DD(2,1,i-2)
3081 Dtilde(2,2,i-2)=-DD(2,2,i-2)
3084 do i=ivec_start+2,ivec_end+2
3090 if (i .lt. nres+1) then
3127 if (i .gt. 3 .and. i .lt. nres+1) then
3128 obrot_der(1,i-2)=-sin1
3129 obrot_der(2,i-2)= cos1
3130 Ugder(1,1,i-2)= sin1
3131 Ugder(1,2,i-2)=-cos1
3132 Ugder(2,1,i-2)=-cos1
3133 Ugder(2,2,i-2)=-sin1
3136 obrot2_der(1,i-2)=-dwasin2
3137 obrot2_der(2,i-2)= dwacos2
3138 Ug2der(1,1,i-2)= dwasin2
3139 Ug2der(1,2,i-2)=-dwacos2
3140 Ug2der(2,1,i-2)=-dwacos2
3141 Ug2der(2,2,i-2)=-dwasin2
3143 obrot_der(1,i-2)=0.0d0
3144 obrot_der(2,i-2)=0.0d0
3145 Ugder(1,1,i-2)=0.0d0
3146 Ugder(1,2,i-2)=0.0d0
3147 Ugder(2,1,i-2)=0.0d0
3148 Ugder(2,2,i-2)=0.0d0
3149 obrot2_der(1,i-2)=0.0d0
3150 obrot2_der(2,i-2)=0.0d0
3151 Ug2der(1,1,i-2)=0.0d0
3152 Ug2der(1,2,i-2)=0.0d0
3153 Ug2der(2,1,i-2)=0.0d0
3154 Ug2der(2,2,i-2)=0.0d0
3156 ! if (i.gt. iatel_s+2 .and. i.lt.iatel_e+5) then
3157 if (i.gt. nnt+2 .and. i.lt.nct+2) then
3158 if (itype(i-2,1).eq.0) then
3161 iti = itype2loc(itype(i-2,1))
3166 ! if (i.gt. iatel_s+1 .and. i.lt.iatel_e+4) then
3167 if (i.gt. nnt+1 .and. i.lt.nct+1) then
3168 if (itype(i-1,1).eq.0) then
3171 iti1 = itype2loc(itype(i-1,1))
3176 ! print *,iti,i,"iti",iti1,itype(i-1,1),itype(i-2,1)
3177 !d write (iout,*) '*******i',i,' iti1',iti
3178 ! write (iout,*) 'b1',b1(:,iti)
3179 ! write (iout,*) 'b2',b2(:,i-2)
3180 !d write (iout,*) 'Ug',Ug(:,:,i-2)
3181 ! if (i .gt. iatel_s+2) then
3182 if (i .gt. nnt+2) then
3183 call matvec2(Ug(1,1,i-2),b2(1,i-2),Ub2(1,i-2))
3185 call matvec2(Ug(1,1,i-2),gtb2(1,i-2),gUb2(1,i-2))
3186 !c write (iout,*) Ug(1,1,i-2),gtb2(1,i-2),gUb2(1,i-2),"chuj"
3189 call matmat2(EE(1,1,i-2),Ug(1,1,i-2),EUg(1,1,i-2))
3190 call matmat2(gtEE(1,1,i-2),Ug(1,1,i-2),gtEUg(1,1,i-2))
3191 if (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0) &
3193 call matmat2(CC(1,1,i-2),Ug(1,1,i-2),CUg(1,1,i-2))
3194 call matmat2(DD(1,1,i-2),Ug(1,1,i-2),DUg(1,1,i-2))
3195 call matmat2(Dtilde(1,1,i-2),Ug2(1,1,i-2),DtUg2(1,1,i-2))
3196 call matvec2(Ctilde(1,1,i-1),obrot(1,i-2),Ctobr(1,i-2))
3197 call matvec2(Dtilde(1,1,i-2),obrot2(1,i-2),Dtobr2(1,i-2))
3208 DtUg2(l,k,i-2)=0.0d0
3212 call matvec2(Ugder(1,1,i-2),b2(1,i-2),Ub2der(1,i-2))
3213 call matmat2(EE(1,1,i-2),Ugder(1,1,i-2),EUgder(1,1,i-2))
3215 muder(k,i-2)=Ub2der(k,i-2)
3217 ! if (i.gt. iatel_s+1 .and. i.lt.iatel_e+4) then
3218 if (i.gt. nnt+1 .and. i.lt.nct+1) then
3219 if (itype(i-1,1).eq.0) then
3221 elseif (itype(i-1,1).le.ntyp) then
3222 iti1 = itype2loc(itype(i-1,1))
3230 mu(k,i-2)=Ub2(k,i-2)+b1(k,i-1)
3232 if (energy_dec) write (iout,*) 'Ub2 ',i,Ub2(:,i-2)
3233 if (energy_dec) write (iout,*) 'b1 ',iti1,b1(:,i-1)
3234 if (energy_dec) write (iout,*) 'mu ',i,iti1,mu(:,i-2)
3235 !d write (iout,*) 'mu1',mu1(:,i-2)
3236 !d write (iout,*) 'mu2',mu2(:,i-2)
3237 if (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or.wcorr6.gt.0.0d0) &
3239 call matmat2(CC(1,1,i-1),Ugder(1,1,i-2),CUgder(1,1,i-2))
3240 call matmat2(DD(1,1,i-2),Ugder(1,1,i-2),DUgder(1,1,i-2))
3241 call matmat2(Dtilde(1,1,i-2),Ug2der(1,1,i-2),DtUg2der(1,1,i-2))
3242 call matvec2(Ctilde(1,1,i-1),obrot_der(1,i-2),Ctobrder(1,i-2))
3243 call matvec2(Dtilde(1,1,i-2),obrot2_der(1,i-2),Dtobr2der(1,i-2))
3244 ! Vectors and matrices dependent on a single virtual-bond dihedral.
3245 call matvec2(DD(1,1,i-2),b1tilde(1,i-1),auxvec(1))
3246 call matvec2(Ug2(1,1,i-2),auxvec(1),Ug2Db1t(1,i-2))
3247 call matvec2(Ug2der(1,1,i-2),auxvec(1),Ug2Db1tder(1,i-2))
3248 call matvec2(CC(1,1,i-1),Ub2(1,i-2),CUgb2(1,i-2))
3249 call matvec2(CC(1,1,i-1),Ub2der(1,i-2),CUgb2der(1,i-2))
3250 call matmat2(EUg(1,1,i-2),CC(1,1,iti1),EUgC(1,1,i-2))
3251 call matmat2(EUgder(1,1,i-2),CC(1,1,iti1),EUgCder(1,1,i-2))
3252 call matmat2(EUg(1,1,i-2),DD(1,1,iti1),EUgD(1,1,i-2))
3253 call matmat2(EUgder(1,1,i-2),DD(1,1,iti1),EUgDder(1,1,i-2))
3256 ! Matrices dependent on two consecutive virtual-bond dihedrals.
3257 ! The order of matrices is from left to right.
3258 if (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or.wcorr6.gt.0.0d0) &
3260 ! do i=max0(ivec_start,2),ivec_end
3262 call matmat2(DtUg2(1,1,i-1),EUg(1,1,i),DtUg2EUg(1,1,i))
3263 call matmat2(DtUg2der(1,1,i-1),EUg(1,1,i),DtUg2EUgder(1,1,1,i))
3264 call matmat2(DtUg2(1,1,i-1),EUgder(1,1,i),DtUg2EUgder(1,1,2,i))
3265 call transpose2(DtUg2(1,1,i-1),auxmat(1,1))
3266 call matmat2(auxmat(1,1),EUg(1,1,i),Ug2DtEUg(1,1,i))
3267 call matmat2(auxmat(1,1),EUgder(1,1,i),Ug2DtEUgder(1,1,2,i))
3268 call transpose2(DtUg2der(1,1,i-1),auxmat(1,1))
3269 call matmat2(auxmat(1,1),EUg(1,1,i),Ug2DtEUgder(1,1,1,i))
3272 #if defined(MPI) && defined(PARMAT)
3274 ! if (fg_rank.eq.0) then
3275 write (iout,*) "Arrays UG and UGDER before GATHER"
3277 write (iout,'(i5,4f10.5,5x,4f10.5)') i,&
3278 ((ug(l,k,i),l=1,2),k=1,2),&
3279 ((ugder(l,k,i),l=1,2),k=1,2)
3281 write (iout,*) "Arrays UG2 and UG2DER"
3283 write (iout,'(i5,4f10.5,5x,4f10.5)') i,&
3284 ((ug2(l,k,i),l=1,2),k=1,2),&
3285 ((ug2der(l,k,i),l=1,2),k=1,2)
3287 write (iout,*) "Arrays OBROT OBROT2 OBROTDER and OBROT2DER"
3289 write (iout,'(i5,4f10.5,5x,4f10.5)') i,&
3290 (obrot(k,i),k=1,2),(obrot2(k,i),k=1,2),&
3291 (obrot_der(k,i),k=1,2),(obrot2_der(k,i),k=1,2)
3293 write (iout,*) "Arrays COSTAB SINTAB COSTAB2 and SINTAB2"
3295 write (iout,'(i5,4f10.5,5x,4f10.5)') i,&
3296 costab(i),sintab(i),costab2(i),sintab2(i)
3298 write (iout,*) "Array MUDER"
3300 write (iout,'(i5,2f10.5)') i,muder(1,i),muder(2,i)
3304 if (nfgtasks.gt.1) then
3306 ! write(iout,*)"Processor",fg_rank,kolor," ivec_start",ivec_start,
3307 ! & " ivec_displ",(ivec_displ(i),i=0,nfgtasks-1),
3308 ! & " ivec_count",(ivec_count(i),i=0,nfgtasks-1)
3310 call MPI_Allgatherv(Ub2(1,ivec_start),ivec_count(fg_rank1),&
3311 MPI_MU,Ub2(1,1),ivec_count(0),ivec_displ(0),MPI_MU,&
3313 call MPI_Allgatherv(Ub2der(1,ivec_start),ivec_count(fg_rank1),&
3314 MPI_MU,Ub2der(1,1),ivec_count(0),ivec_displ(0),MPI_MU,&
3316 call MPI_Allgatherv(mu(1,ivec_start),ivec_count(fg_rank1),&
3317 MPI_MU,mu(1,1),ivec_count(0),ivec_displ(0),MPI_MU,&
3319 call MPI_Allgatherv(muder(1,ivec_start),ivec_count(fg_rank1),&
3320 MPI_MU,muder(1,1),ivec_count(0),ivec_displ(0),MPI_MU,&
3322 call MPI_Allgatherv(Eug(1,1,ivec_start),ivec_count(fg_rank1),&
3323 MPI_MAT1,Eug(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,&
3325 call MPI_Allgatherv(Eugder(1,1,ivec_start),ivec_count(fg_rank1),&
3326 MPI_MAT1,Eugder(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,&
3328 call MPI_Allgatherv(costab(ivec_start),ivec_count(fg_rank1),&
3329 MPI_DOUBLE_PRECISION,costab(1),ivec_count(0),ivec_displ(0),&
3330 MPI_DOUBLE_PRECISION,FG_COMM1,IERR)
3331 call MPI_Allgatherv(sintab(ivec_start),ivec_count(fg_rank1),&
3332 MPI_DOUBLE_PRECISION,sintab(1),ivec_count(0),ivec_displ(0),&
3333 MPI_DOUBLE_PRECISION,FG_COMM1,IERR)
3334 call MPI_Allgatherv(costab2(ivec_start),ivec_count(fg_rank1),&
3335 MPI_DOUBLE_PRECISION,costab2(1),ivec_count(0),ivec_displ(0),&
3336 MPI_DOUBLE_PRECISION,FG_COMM1,IERR)
3337 call MPI_Allgatherv(sintab2(ivec_start),ivec_count(fg_rank1),&
3338 MPI_DOUBLE_PRECISION,sintab2(1),ivec_count(0),ivec_displ(0),&
3339 MPI_DOUBLE_PRECISION,FG_COMM1,IERR)
3340 if (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0) &
3342 call MPI_Allgatherv(Ctobr(1,ivec_start),ivec_count(fg_rank1),&
3343 MPI_MU,Ctobr(1,1),ivec_count(0),ivec_displ(0),MPI_MU,&
3345 call MPI_Allgatherv(Ctobrder(1,ivec_start),ivec_count(fg_rank1),&
3346 MPI_MU,Ctobrder(1,1),ivec_count(0),ivec_displ(0),MPI_MU,&
3348 call MPI_Allgatherv(Dtobr2(1,ivec_start),ivec_count(fg_rank1),&
3349 MPI_MU,Dtobr2(1,1),ivec_count(0),ivec_displ(0),MPI_MU,&
3351 call MPI_Allgatherv(Dtobr2der(1,ivec_start),ivec_count(fg_rank1),&
3352 MPI_MU,Dtobr2der(1,1),ivec_count(0),ivec_displ(0),MPI_MU,&
3354 call MPI_Allgatherv(Ug2Db1t(1,ivec_start),ivec_count(fg_rank1),&
3355 MPI_MU,Ug2Db1t(1,1),ivec_count(0),ivec_displ(0),MPI_MU,&
3357 call MPI_Allgatherv(Ug2Db1tder(1,ivec_start),&
3358 ivec_count(fg_rank1),&
3359 MPI_MU,Ug2Db1tder(1,1),ivec_count(0),ivec_displ(0),MPI_MU,&
3361 call MPI_Allgatherv(CUgb2(1,ivec_start),ivec_count(fg_rank1),&
3362 MPI_MU,CUgb2(1,1),ivec_count(0),ivec_displ(0),MPI_MU,&
3364 call MPI_Allgatherv(CUgb2der(1,ivec_start),ivec_count(fg_rank1),&
3365 MPI_MU,CUgb2der(1,1),ivec_count(0),ivec_displ(0),MPI_MU,&
3367 call MPI_Allgatherv(Cug(1,1,ivec_start),ivec_count(fg_rank1),&
3368 MPI_MAT1,Cug(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,&
3370 call MPI_Allgatherv(Cugder(1,1,ivec_start),ivec_count(fg_rank1),&
3371 MPI_MAT1,Cugder(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,&
3373 call MPI_Allgatherv(Dug(1,1,ivec_start),ivec_count(fg_rank1),&
3374 MPI_MAT1,Dug(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,&
3376 call MPI_Allgatherv(Dugder(1,1,ivec_start),ivec_count(fg_rank1),&
3377 MPI_MAT1,Dugder(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,&
3379 call MPI_Allgatherv(Dtug2(1,1,ivec_start),ivec_count(fg_rank1),&
3380 MPI_MAT1,Dtug2(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,&
3382 call MPI_Allgatherv(Dtug2der(1,1,ivec_start),&
3383 ivec_count(fg_rank1),&
3384 MPI_MAT1,Dtug2der(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,&
3386 call MPI_Allgatherv(EugC(1,1,ivec_start),ivec_count(fg_rank1),&
3387 MPI_MAT1,EugC(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,&
3389 call MPI_Allgatherv(EugCder(1,1,ivec_start),ivec_count(fg_rank1),&
3390 MPI_MAT1,EugCder(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,&
3392 call MPI_Allgatherv(EugD(1,1,ivec_start),ivec_count(fg_rank1),&
3393 MPI_MAT1,EugD(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,&
3395 call MPI_Allgatherv(EugDder(1,1,ivec_start),ivec_count(fg_rank1),&
3396 MPI_MAT1,EugDder(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,&
3398 call MPI_Allgatherv(DtUg2EUg(1,1,ivec_start),&
3399 ivec_count(fg_rank1),&
3400 MPI_MAT1,DtUg2EUg(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,&
3402 call MPI_Allgatherv(Ug2DtEUg(1,1,ivec_start),&
3403 ivec_count(fg_rank1),&
3404 MPI_MAT1,Ug2DtEUg(1,1,1),ivec_count(0),ivec_displ(0),MPI_MAT1,&
3406 call MPI_Allgatherv(DtUg2EUgder(1,1,1,ivec_start),&
3407 ivec_count(fg_rank1),&
3408 MPI_MAT2,DtUg2EUgder(1,1,1,1),ivec_count(0),ivec_displ(0),&
3409 MPI_MAT2,FG_COMM1,IERR)
3410 call MPI_Allgatherv(Ug2DtEUgder(1,1,1,ivec_start),&
3411 ivec_count(fg_rank1),&
3412 MPI_MAT2,Ug2DtEUgder(1,1,1,1),ivec_count(0),ivec_displ(0),&
3413 MPI_MAT2,FG_COMM1,IERR)
3416 ! Passes matrix info through the ring
3419 if (irecv.lt.0) irecv=nfgtasks1-1
3422 if (inext.ge.nfgtasks1) inext=0
3424 ! write (iout,*) "isend",isend," irecv",irecv
3426 lensend=lentyp(isend)
3427 lenrecv=lentyp(irecv)
3428 ! write (iout,*) "lensend",lensend," lenrecv",lenrecv
3429 ! call MPI_SENDRECV(ug(1,1,ivec_displ(isend)+1),1,
3430 ! & MPI_ROTAT1(lensend),inext,2200+isend,
3431 ! & ug(1,1,ivec_displ(irecv)+1),1,MPI_ROTAT1(lenrecv),
3432 ! & iprev,2200+irecv,FG_COMM,status,IERR)
3433 ! write (iout,*) "Gather ROTAT1"
3435 ! call MPI_SENDRECV(obrot(1,ivec_displ(isend)+1),1,
3436 ! & MPI_ROTAT2(lensend),inext,3300+isend,
3437 ! & obrot(1,ivec_displ(irecv)+1),1,MPI_ROTAT2(lenrecv),
3438 ! & iprev,3300+irecv,FG_COMM,status,IERR)
3439 ! write (iout,*) "Gather ROTAT2"
3441 call MPI_SENDRECV(costab(ivec_displ(isend)+1),1,&
3442 MPI_ROTAT_OLD(lensend),inext,4400+isend,&
3443 costab(ivec_displ(irecv)+1),1,MPI_ROTAT_OLD(lenrecv),&
3444 iprev,4400+irecv,FG_COMM,status,IERR)
3445 ! write (iout,*) "Gather ROTAT_OLD"
3447 call MPI_SENDRECV(mu(1,ivec_displ(isend)+1),1,&
3448 MPI_PRECOMP11(lensend),inext,5500+isend,&
3449 mu(1,ivec_displ(irecv)+1),1,MPI_PRECOMP11(lenrecv),&
3450 iprev,5500+irecv,FG_COMM,status,IERR)
3451 ! write (iout,*) "Gather PRECOMP11"
3453 call MPI_SENDRECV(Eug(1,1,ivec_displ(isend)+1),1,&
3454 MPI_PRECOMP12(lensend),inext,6600+isend,&
3455 Eug(1,1,ivec_displ(irecv)+1),1,MPI_PRECOMP12(lenrecv),&
3456 iprev,6600+irecv,FG_COMM,status,IERR)
3457 ! write (iout,*) "Gather PRECOMP12"
3459 if (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0) &
3461 call MPI_SENDRECV(ug2db1t(1,ivec_displ(isend)+1),1,&
3462 MPI_ROTAT2(lensend),inext,7700+isend,&
3463 ug2db1t(1,ivec_displ(irecv)+1),1,MPI_ROTAT2(lenrecv),&
3464 iprev,7700+irecv,FG_COMM,status,IERR)
3465 ! write (iout,*) "Gather PRECOMP21"
3467 call MPI_SENDRECV(EUgC(1,1,ivec_displ(isend)+1),1,&
3468 MPI_PRECOMP22(lensend),inext,8800+isend,&
3469 EUgC(1,1,ivec_displ(irecv)+1),1,MPI_PRECOMP22(lenrecv),&
3470 iprev,8800+irecv,FG_COMM,status,IERR)
3471 ! write (iout,*) "Gather PRECOMP22"
3473 call MPI_SENDRECV(Ug2DtEUgder(1,1,1,ivec_displ(isend)+1),1,&
3474 MPI_PRECOMP23(lensend),inext,9900+isend,&
3475 Ug2DtEUgder(1,1,1,ivec_displ(irecv)+1),1,&
3476 MPI_PRECOMP23(lenrecv),&
3477 iprev,9900+irecv,FG_COMM,status,IERR)
3478 ! write (iout,*) "Gather PRECOMP23"
3483 if (irecv.lt.0) irecv=nfgtasks1-1
3486 time_gather=time_gather+MPI_Wtime()-time00
3489 ! if (fg_rank.eq.0) then
3490 write (iout,*) "Arrays UG and UGDER"
3492 write (iout,'(i5,4f10.5,5x,4f10.5)') i,&
3493 ((ug(l,k,i),l=1,2),k=1,2),&
3494 ((ugder(l,k,i),l=1,2),k=1,2)
3496 write (iout,*) "Arrays UG2 and UG2DER"
3498 write (iout,'(i5,4f10.5,5x,4f10.5)') i,&
3499 ((ug2(l,k,i),l=1,2),k=1,2),&
3500 ((ug2der(l,k,i),l=1,2),k=1,2)
3502 write (iout,*) "Arrays OBROT OBROT2 OBROTDER and OBROT2DER"
3504 write (iout,'(i5,4f10.5,5x,4f10.5)') i,&
3505 (obrot(k,i),k=1,2),(obrot2(k,i),k=1,2),&
3506 (obrot_der(k,i),k=1,2),(obrot2_der(k,i),k=1,2)
3508 write (iout,*) "Arrays COSTAB SINTAB COSTAB2 and SINTAB2"
3510 write (iout,'(i5,4f10.5,5x,4f10.5)') i,&
3511 costab(i),sintab(i),costab2(i),sintab2(i)
3513 write (iout,*) "Array MUDER"
3515 write (iout,'(i5,2f10.5)') i,muder(1,i),muder(2,i)
3521 !d iti = itortyp(itype(i,1))
3524 !d write (iout,'(2f10.5,5x,2f10.5,5x,2f10.5)')
3525 !d & (EE(j,k,iti),k=1,2),(Ug(j,k,i),k=1,2),(EUg(j,k,i),k=1,2)
3529 end subroutine set_matrices
3530 !-----------------------------------------------------------------------------
3531 subroutine eelec(ees,evdw1,eel_loc,eello_turn3,eello_turn4)
3533 ! This subroutine calculates the average interaction energy and its gradient
3534 ! in the virtual-bond vectors between non-adjacent peptide groups, based on
3535 ! the potential described in Liwo et al., Protein Sci., 1993, 2, 1715.
3536 ! The potential depends both on the distance of peptide-group centers and on
3537 ! the orientation of the CA-CA virtual bonds.
3540 ! implicit real(kind=8) (a-h,o-z)
3544 ! include 'DIMENSIONS'
3545 ! include 'COMMON.CONTROL'
3546 ! include 'COMMON.SETUP'
3547 ! include 'COMMON.IOUNITS'
3548 ! include 'COMMON.GEO'
3549 ! include 'COMMON.VAR'
3550 ! include 'COMMON.LOCAL'
3551 ! include 'COMMON.CHAIN'
3552 ! include 'COMMON.DERIV'
3553 ! include 'COMMON.INTERACT'
3554 ! include 'COMMON.CONTACTS'
3555 ! include 'COMMON.TORSION'
3556 ! include 'COMMON.VECTORS'
3557 ! include 'COMMON.FFIELD'
3558 ! include 'COMMON.TIME1'
3559 real(kind=8),dimension(3) :: ggg,gggp,gggm,erij,dcosb,dcosg
3560 real(kind=8),dimension(3,3) :: erder,uryg,urzg,vryg,vrzg
3561 real(kind=8),dimension(2,2) :: acipa !el,a_temp
3562 !el real(kind=8),dimension(3,4) :: agg,aggi,aggi1,aggj,aggj1
3563 real(kind=8),dimension(4) :: muij
3564 !el integer :: num_conti,j1,j2
3565 !el real(kind=8) :: a22,a23,a32,a33,dxi,dyi,dzi,dx_normi,dy_normi,&
3566 !el dz_normi,xmedi,ymedi,zmedi
3568 !el common /locel/ a_temp,agg,aggi,aggi1,aggj,aggj1,a22,a23,a32,a33,&
3569 !el dxi,dyi,dzi,dx_normi,dy_normi,dz_normi,xmedi,ymedi,zmedi,&
3572 ! 4/26/02 - AL scaling factor for 1,4 repulsive VDW interactions
3574 real(kind=8) :: scal_el=1.0d0
3576 real(kind=8) :: scal_el=0.5d0
3579 ! 13-go grudnia roku pamietnego...
3580 real(kind=8),dimension(3,3) :: unmat=reshape((/1.0d0,0.0d0,0.0d0,&
3582 0.0d0,0.0d0,1.0d0/),shape(unmat))
3584 integer :: i,k,j,icont
3585 real(kind=8) :: ees,evdw1,eel_loc,eello_turn3,eello_turn4
3586 real(kind=8) :: fac,t_eelecij,fracinbuf
3589 !d write(iout,*) 'In EELEC'
3590 ! print *,"IN EELEC"
3592 !d write(iout,*) 'Type',i
3593 !d write(iout,*) 'B1',B1(:,i)
3594 !d write(iout,*) 'B2',B2(:,i)
3595 !d write(iout,*) 'CC',CC(:,:,i)
3596 !d write(iout,*) 'DD',DD(:,:,i)
3597 !d write(iout,*) 'EE',EE(:,:,i)
3599 !d call check_vecgrad
3612 if (nres_molec(1).eq.0) return
3615 if (icheckgrad.eq.1) then
3618 ! dc_norm(1,i)=0.0d0
3619 ! dc_norm(2,i)=0.0d0
3620 ! dc_norm(3,i)=0.0d0
3623 fac=1.0d0/dsqrt(scalar(dc(1,i),dc(1,i)))
3625 dc_norm(k,i)=dc(k,i)*fac
3627 ! write (iout,*) 'i',i,' fac',fac
3630 ! print *,wel_loc,"wel_loc",wcorr4,wcorr5,wcorr6,wturn3,wturn4, &
3632 if (wel_loc.gt.0.0d0 .or. wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 &
3633 .or. wcorr6.gt.0.0d0 .or. wturn3.gt.0.0d0 .or. &
3634 wturn4.gt.0.0d0 .or. wturn6.gt.0.0d0) then
3635 ! call vec_and_deriv
3639 ! print *, "before set matrices"
3641 ! print *, "after set matrices"
3644 time_mat=time_mat+MPI_Wtime()-time01
3647 ! print *, "after set matrices"
3649 !d write (iout,*) 'i=',i
3651 !d write (iout,'(i5,2f10.5)') k,uy(k,i),uz(k,i)
3654 !d write (iout,'(f10.5,2x,3f10.5,2x,3f10.5)')
3655 !d & uz(k,i),(uzgrad(k,l,1,i),l=1,3),(uzgrad(k,l,2,i),l=1,3)
3668 !d print '(a)','Enter EELEC'
3669 !d write (iout,*) 'iatel_s=',iatel_s,' iatel_e=',iatel_e
3670 ! if (.not.allocated(gel_loc_loc)) allocate(gel_loc_loc(nres)) !(maxvar)(maxvar=6*maxres)
3671 ! if (.not.allocated(gcorr_loc)) allocate(gcorr_loc(nres)) !(maxvar)(maxvar=6*maxres)
3673 gel_loc_loc(i)=0.0d0
3678 ! 9/27/08 AL Split the interaction loop to ensure load balancing of turn terms
3680 ! Loop over i,i+2 and i,i+3 pairs of the peptide groups
3684 ! print *,"before iturn3 loop"
3685 do i=iturn3_start,iturn3_end
3686 if (itype(i,1).eq.ntyp1 .or. itype(i+1,1).eq.ntyp1 &
3687 .or. itype(i+2,1).eq.ntyp1 .or. itype(i+3,1).eq.ntyp1) cycle
3691 dx_normi=dc_norm(1,i)
3692 dy_normi=dc_norm(2,i)
3693 dz_normi=dc_norm(3,i)
3694 xmedi=c(1,i)+0.5d0*dxi
3695 ymedi=c(2,i)+0.5d0*dyi
3696 zmedi=c(3,i)+0.5d0*dzi
3697 call to_box(xmedi,ymedi,zmedi)
3698 call lipid_layer(xmedi,ymedi,zmedi,sslipi,ssgradlipi)
3700 call eelecij(i,i+2,ees,evdw1,eel_loc)
3701 if (wturn3.gt.0.0d0) call eturn3(i,eello_turn3)
3702 num_cont_hb(i)=num_conti
3704 do i=iturn4_start,iturn4_end
3705 if (itype(i,1).eq.ntyp1 .or. itype(i+1,1).eq.ntyp1 &
3706 .or. itype(i+3,1).eq.ntyp1 &
3707 .or. itype(i+4,1).eq.ntyp1) cycle
3708 ! print *,"before2",i,i+3, gshieldc_t4(2,i+3),gshieldc_t4(2,i)
3712 dx_normi=dc_norm(1,i)
3713 dy_normi=dc_norm(2,i)
3714 dz_normi=dc_norm(3,i)
3715 xmedi=c(1,i)+0.5d0*dxi
3716 ymedi=c(2,i)+0.5d0*dyi
3717 zmedi=c(3,i)+0.5d0*dzi
3718 call to_box(xmedi,ymedi,zmedi)
3719 call lipid_layer(xmedi,ymedi,zmedi,sslipi,ssgradlipi)
3720 num_conti=num_cont_hb(i)
3721 call eelecij(i,i+3,ees,evdw1,eel_loc)
3722 if (wturn4.gt.0.0d0 .and. itype(i+2,1).ne.ntyp1) &
3723 call eturn4(i,eello_turn4)
3724 ! print *,"before",i,i+3, gshieldc_t4(2,i+3),gshieldc_t4(2,i)
3725 num_cont_hb(i)=num_conti
3728 ! Loop over all pairs of interacting peptide groups except i,i+2 and i,i+3
3730 ! print *,"iatel_s,iatel_e,",iatel_s,iatel_e
3731 ! do i=iatel_s,iatel_e
3733 do icont=g_listpp_start,g_listpp_end
3734 i=newcontlistppi(icont)
3735 j=newcontlistppj(icont)
3736 if (itype(i,1).eq.ntyp1 .or. itype(i+1,1).eq.ntyp1) cycle
3740 dx_normi=dc_norm(1,i)
3741 dy_normi=dc_norm(2,i)
3742 dz_normi=dc_norm(3,i)
3743 xmedi=c(1,i)+0.5d0*dxi
3744 ymedi=c(2,i)+0.5d0*dyi
3745 zmedi=c(3,i)+0.5d0*dzi
3746 call to_box(xmedi,ymedi,zmedi)
3747 call lipid_layer(xmedi,ymedi,zmedi,sslipi,ssgradlipi)
3749 ! write (iout,*) 'i',i,' ielstart',ielstart(i),' ielend',ielend(i)
3750 num_conti=num_cont_hb(i)
3751 ! do j=ielstart(i),ielend(i)
3752 ! write (iout,*) i,j,itype(i,1),itype(j,1)
3753 if (itype(j,1).eq.ntyp1.or. itype(j+1,1).eq.ntyp1) cycle
3754 call eelecij(i,j,ees,evdw1,eel_loc)
3756 num_cont_hb(i)=num_conti
3758 ! write (iout,*) "Number of loop steps in EELEC:",ind
3760 !d write (iout,'(i3,3f10.5,5x,3f10.5)')
3761 !d & i,(gel_loc(k,i),k=1,3),gel_loc_loc(i)
3763 ! 12/7/99 Adam eello_turn3 will be considered as a separate energy term
3764 !cc eel_loc=eel_loc+eello_turn3
3765 !d print *,"Processor",fg_rank," t_eelecij",t_eelecij
3767 end subroutine eelec
3768 !-----------------------------------------------------------------------------
3769 subroutine eelecij(i,j,ees,evdw1,eel_loc)
3772 ! implicit real(kind=8) (a-h,o-z)
3773 ! include 'DIMENSIONS'
3777 ! include 'COMMON.CONTROL'
3778 ! include 'COMMON.IOUNITS'
3779 ! include 'COMMON.GEO'
3780 ! include 'COMMON.VAR'
3781 ! include 'COMMON.LOCAL'
3782 ! include 'COMMON.CHAIN'
3783 ! include 'COMMON.DERIV'
3784 ! include 'COMMON.INTERACT'
3785 ! include 'COMMON.CONTACTS'
3786 ! include 'COMMON.TORSION'
3787 ! include 'COMMON.VECTORS'
3788 ! include 'COMMON.FFIELD'
3789 ! include 'COMMON.TIME1'
3790 real(kind=8),dimension(3) :: ggg,gggp,gggm,erij,dcosb,dcosg,xtemp
3791 real(kind=8),dimension(3,3) :: erder,uryg,urzg,vryg,vrzg
3792 real(kind=8),dimension(2,2) :: acipa !el,a_temp
3793 !el real(kind=8),dimension(3,4) :: agg,aggi,aggi1,aggj,aggj1
3794 real(kind=8),dimension(4) :: muij
3795 real(kind=8) :: geel_loc_ij,geel_loc_ji
3796 real(kind=8) :: xj_safe,yj_safe,zj_safe,xj_temp,yj_temp,zj_temp,&
3797 dist_temp, dist_init,rlocshield,fracinbuf
3798 integer xshift,yshift,zshift,ilist,iresshield
3799 !el integer :: num_conti,j1,j2
3800 !el real(kind=8) :: a22,a23,a32,a33,dxi,dyi,dzi,dx_normi,dy_normi,&
3801 !el dz_normi,xmedi,ymedi,zmedi
3803 !el common /locel/ a_temp,agg,aggi,aggi1,aggj,aggj1,a22,a23,a32,a33,&
3804 !el dxi,dyi,dzi,dx_normi,dy_normi,dz_normi,xmedi,ymedi,zmedi,&
3807 ! 4/26/02 - AL scaling factor for 1,4 repulsive VDW interactions
3809 real(kind=8) :: scal_el=1.0d0
3811 real(kind=8) :: scal_el=0.5d0
3814 ! 13-go grudnia roku pamietnego...
3815 real(kind=8),dimension(3,3) :: unmat=reshape((/1.0d0,0.0d0,0.0d0,&
3817 0.0d0,0.0d0,1.0d0/),shape(unmat))
3818 ! integer :: maxconts=nres/4
3820 integer :: k,i,j,iteli,itelj,kkk,l,kkll,m,isubchap
3821 real(kind=8) :: ael6i,rrmij,rmij,r0ij,fcont,fprimcont,ees0tmp
3822 real(kind=8) :: faclipij2, faclipij
3823 real(kind=8) :: ees,evdw1,eel_loc,aaa,bbb,ael3i
3824 real(kind=8) :: dxj,dyj,dzj,dx_normj,dy_normj,dz_normj,xj,yj,zj,&
3825 rij,r3ij,r6ij,cosa,cosb,cosg,fac,ev1,ev2,fac3,fac4,&
3826 evdwij,el1,el2,eesij,ees0ij,facvdw,facel,fac1,ecosa,&
3827 ecosb,ecosg,ury,urz,vry,vrz,facr,a22der,a23der,a32der,&
3828 a33der,eel_loc_ij,cosa4,wij,cosbg1,cosbg2,ees0pij,&
3829 ees0pij1,ees0mij,ees0mij1,fac3p,ees0mijp,ees0pijp,&
3830 ecosa1,ecosb1,ecosg1,ecosa2,ecosb2,ecosg2,ecosap,ecosbp,&
3831 ecosgp,ecosam,ecosbm,ecosgm,ghalf
3833 ! allocate(a_chuj(2,2,maxconts,nres)) !(2,2,maxconts,maxres)
3834 ! allocate(a_chuj_der(2,2,3,5,maxconts,nres)) !(2,2,3,5,maxconts,maxres)
3836 ! time00=MPI_Wtime()
3837 !d write (iout,*) "eelecij",i,j
3841 if (j.eq.i+2 .and. itelj.eq.2) iteli=2
3842 aaa=app(iteli,itelj)
3843 bbb=bpp(iteli,itelj)
3844 ael6i=ael6(iteli,itelj)
3845 ael3i=ael3(iteli,itelj)
3849 dx_normj=dc_norm(1,j)
3850 dy_normj=dc_norm(2,j)
3851 dz_normj=dc_norm(3,j)
3852 ! xj=c(1,j)+0.5D0*dxj-xmedi
3853 ! yj=c(2,j)+0.5D0*dyj-ymedi
3854 ! zj=c(3,j)+0.5D0*dzj-zmedi
3859 call to_box(xj,yj,zj)
3860 call lipid_layer(xj,yj,zj,sslipj,ssgradlipj)
3861 faclipij=(sslipi+sslipj)/2.0d0*lipscale+1.0d0
3862 faclipij2=(sslipi+sslipj)/2.0d0*lipscale**2+1.0d0
3863 xj=boxshift(xj-xmedi,boxxsize)
3864 yj=boxshift(yj-ymedi,boxysize)
3865 zj=boxshift(zj-zmedi,boxzsize)
3867 rij=xj*xj+yj*yj+zj*zj
3870 !C print *,xmedi,ymedi,zmedi,xj,yj,zj,boxxsize,rij
3871 sss_ele_cut=sscale_ele(rij)
3872 sss_ele_grad=sscagrad_ele(rij)
3874 ! sss_ele_grad=0.0d0
3875 ! print *,sss_ele_cut,sss_ele_grad,&
3876 ! (rij),r_cut_ele,rlamb_ele
3877 if (sss_ele_cut.le.0.0) go to 128
3882 cosa=dx_normi*dx_normj+dy_normi*dy_normj+dz_normi*dz_normj
3883 cosb=(xj*dx_normi+yj*dy_normi+zj*dz_normi)*rmij
3884 cosg=(xj*dx_normj+yj*dy_normj+zj*dz_normj)*rmij
3885 fac=cosa-3.0D0*cosb*cosg
3887 ! 4/26/02 - AL scaling down 1,4 repulsive VDW interactions
3888 if (j.eq.i+2) ev1=scal_el*ev1
3893 el1=fac3*(4.0D0+fac*fac-3.0D0*(cosb*cosb+cosg*cosg))
3896 if (shield_mode.gt.0) then
3897 !C fac_shield(i)=0.4
3898 !C fac_shield(j)=0.6
3899 el1=el1*fac_shield(i)**2*fac_shield(j)**2
3900 el2=el2*fac_shield(i)**2*fac_shield(j)**2
3902 ees=ees+eesij*sss_ele_cut
3903 !C FOR NOW SHIELD IS NOT USED WITH LIPSCALE
3904 !C & *((sslipi+sslipj)/2.0d0*lipscale**2+1.0d0)
3910 *((sslipi+sslipj)/2.0d0*lipscale**2+1.0d0)*sss_ele_cut
3911 !C print *,"TUCC",(sslipi+sslipj)/2.0d0*lipscale**2+1.0d0
3914 ! 12/26/95 - for the evaluation of multi-body H-bonding interactions
3915 ees0ij=4.0D0+fac*fac-3.0D0*(cosb*cosb+cosg*cosg)
3916 ! ees=ees+eesij*sss_ele_cut
3917 evdw1=evdw1+evdwij*sss_ele_cut &
3918 *((sslipi+sslipj)/2.0d0*lipscale**2+1.0d0)
3919 !d write(iout,'(2(2i3,2x),7(1pd12.4)/2(3(1pd12.4),5x)/)')
3920 !d & iteli,i,itelj,j,aaa,bbb,ael6i,ael3i,
3921 !d & 1.0D0/dsqrt(rrmij),evdwij,eesij,
3922 !d & xmedi,ymedi,zmedi,xj,yj,zj
3924 if (energy_dec) then
3925 ! write (iout,'(a6,2i5,0pf7.3,2i5,2e11.3)') &
3926 ! 'evdw1',i,j,evdwij,&
3927 ! iteli,itelj,aaa,evdw1
3928 write (iout,'(a6,2i5,0pf7.3)') 'evdw1',i,j,evdwij
3929 write (iout,'(a6,2i5,0pf7.3)') 'ees',i,j,eesij
3932 ! Calculate contributions to the Cartesian gradient.
3935 facvdw=-6*rrmij*(ev1+evdwij)*sss_ele_cut &
3936 *((sslipi+sslipj)/2.0d0*lipscale**2+1.0d0)
3937 facel=-3*rrmij*(el1+eesij)*sss_ele_cut &
3938 *((sslipi+sslipj)/2.0d0*lipscale**2+1.0d0)
3944 ! Radial derivatives. First process both termini of the fragment (i,j)
3946 ggg(1)=facel*xj+sss_ele_grad*rmij*eesij*xj* &
3947 ((sslipi+sslipj)/2.0d0*lipscale**2+1.0d0)
3948 ggg(2)=facel*yj+sss_ele_grad*rmij*eesij*yj* &
3949 ((sslipi+sslipj)/2.0d0*lipscale**2+1.0d0)
3950 ggg(3)=facel*zj+sss_ele_grad*rmij*eesij*zj* &
3951 ((sslipi+sslipj)/2.0d0*lipscale**2+1.0d0)
3953 if ((fac_shield(i).gt.0).and.(fac_shield(j).gt.0).and. &
3954 (shield_mode.gt.0)) then
3956 do ilist=1,ishield_list(i)
3957 iresshield=shield_list(ilist,i)
3959 rlocshield=grad_shield_side(k,ilist,i)*eesij/fac_shield(i)&
3961 gshieldx(k,iresshield)=gshieldx(k,iresshield)+ &
3963 +grad_shield_loc(k,ilist,i)*eesij/fac_shield(i)*2.0 &
3965 gshieldc(k,iresshield-1)=gshieldc(k,iresshield-1)+rlocshield
3968 do ilist=1,ishield_list(j)
3969 iresshield=shield_list(ilist,j)
3971 rlocshield=grad_shield_side(k,ilist,j)*eesij/fac_shield(j) &
3973 gshieldx(k,iresshield)=gshieldx(k,iresshield)+ &
3975 +grad_shield_loc(k,ilist,j)*eesij/fac_shield(j)*2.0 &
3977 gshieldc(k,iresshield-1)=gshieldc(k,iresshield-1)+rlocshield
3981 gshieldc(k,i)=gshieldc(k,i)+ &
3982 grad_shield(k,i)*eesij/fac_shield(i)*2.0 &
3985 gshieldc(k,j)=gshieldc(k,j)+ &
3986 grad_shield(k,j)*eesij/fac_shield(j)*2.0 &
3989 gshieldc(k,i-1)=gshieldc(k,i-1)+ &
3990 grad_shield(k,i)*eesij/fac_shield(i)*2.0 &
3993 gshieldc(k,j-1)=gshieldc(k,j-1)+ &
3994 grad_shield(k,j)*eesij/fac_shield(j)*2.0 &
4002 ! ghalf=0.5D0*ggg(k)
4003 ! gelc(k,i)=gelc(k,i)+ghalf
4004 ! gelc(k,j)=gelc(k,j)+ghalf
4006 ! 9/28/08 AL Gradient compotents will be summed only at the end
4008 gelc_long(k,j)=gelc_long(k,j)+ggg(k)
4009 gelc_long(k,i)=gelc_long(k,i)-ggg(k)
4011 gelc_long(3,j)=gelc_long(3,j)+ &
4012 ssgradlipj*eesij/2.0d0*lipscale**2&
4015 gelc_long(3,i)=gelc_long(3,i)+ &
4016 ssgradlipi*eesij/2.0d0*lipscale**2&
4021 ! Loop over residues i+1 thru j-1.
4025 !grad gelc(l,k)=gelc(l,k)+ggg(l)
4028 ggg(1)=facvdw*xj+sss_ele_grad*rmij*evdwij*xj &
4029 *((sslipi+sslipj)/2.0d0*lipscale**2+1.0d0)
4030 ggg(2)=facvdw*yj+sss_ele_grad*rmij*evdwij*yj &
4031 *((sslipi+sslipj)/2.0d0*lipscale**2+1.0d0)
4032 ggg(3)=facvdw*zj+sss_ele_grad*rmij*evdwij*zj &
4033 *((sslipi+sslipj)/2.0d0*lipscale**2+1.0d0)
4036 ! ghalf=0.5D0*ggg(k)
4037 ! gvdwpp(k,i)=gvdwpp(k,i)+ghalf
4038 ! gvdwpp(k,j)=gvdwpp(k,j)+ghalf
4040 ! 9/28/08 AL Gradient compotents will be summed only at the end
4042 gvdwpp(k,j)=gvdwpp(k,j)+ggg(k)
4043 gvdwpp(k,i)=gvdwpp(k,i)-ggg(k)
4046 !C Lipidic part for scaling weight
4047 gvdwpp(3,j)=gvdwpp(3,j)+ &
4048 sss_ele_cut*ssgradlipj*evdwij/2.0d0*lipscale**2
4049 gvdwpp(3,i)=gvdwpp(3,i)+ &
4050 sss_ele_cut*ssgradlipi*evdwij/2.0d0*lipscale**2
4051 !! Loop over residues i+1 thru j-1.
4055 !grad gvdwpp(l,k)=gvdwpp(l,k)+ggg(l)
4059 facvdw=(ev1+evdwij)*sss_ele_cut &
4060 *((sslipi+sslipj)/2.0d0*lipscale**2+1.0d0)
4062 facel=(el1+eesij)*sss_ele_cut
4064 fac=-3*rrmij*(facvdw+facvdw+facel)
4069 ! Radial derivatives. First process both termini of the fragment (i,j)
4071 ggg(1)=fac*xj+sss_ele_grad*rmij*(eesij+evdwij)*xj
4072 ggg(2)=fac*yj+sss_ele_grad*rmij*(eesij+evdwij)*yj
4073 ggg(3)=fac*zj+sss_ele_grad*rmij*(eesij+evdwij)*zj
4075 ! ghalf=0.5D0*ggg(k)
4076 ! gelc(k,i)=gelc(k,i)+ghalf
4077 ! gelc(k,j)=gelc(k,j)+ghalf
4079 ! 9/28/08 AL Gradient compotents will be summed only at the end
4081 gelc_long(k,j)=gelc(k,j)+ggg(k)
4082 gelc_long(k,i)=gelc(k,i)-ggg(k)
4085 ! Loop over residues i+1 thru j-1.
4089 !grad gelc(l,k)=gelc(l,k)+ggg(l)
4092 ! 9/28/08 AL Gradient compotents will be summed only at the end
4093 ggg(1)=facvdw*xj+sss_ele_grad*rmij*evdwij*xj &
4094 *((sslipi+sslipj)/2.0d0*lipscale**2+1.0d0)
4095 ggg(2)=facvdw*yj+sss_ele_grad*rmij*evdwij*yj &
4096 *((sslipi+sslipj)/2.0d0*lipscale**2+1.0d0)
4097 ggg(3)=facvdw*zj+sss_ele_grad*rmij*evdwij*zj &
4098 *((sslipi+sslipj)/2.0d0*lipscale**2+1.0d0)
4101 gvdwpp(k,j)=gvdwpp(k,j)+ggg(k)
4102 gvdwpp(k,i)=gvdwpp(k,i)-ggg(k)
4104 gvdwpp(3,j)=gvdwpp(3,j)+ &
4105 sss_ele_cut*ssgradlipj*evdwij/2.0d0*lipscale**2
4106 gvdwpp(3,i)=gvdwpp(3,i)+ &
4107 sss_ele_cut*ssgradlipi*evdwij/2.0d0*lipscale**2
4113 ecosa=2.0D0*fac3*fac1+fac4
4116 ecosb=(fac3*(fac1*cosg+cosb)+cosg*fac4)
4117 ecosg=(fac3*(fac1*cosb+cosg)+cosb*fac4)
4119 dcosb(k)=rmij*(dc_norm(k,i)-erij(k)*cosb)
4120 dcosg(k)=rmij*(dc_norm(k,j)-erij(k)*cosg)
4122 !d print '(2i3,2(3(1pd14.5),3x))',i,j,(dcosb(k),k=1,3),
4123 !d & (dcosg(k),k=1,3)
4125 ggg(k)=(ecosb*dcosb(k)+ecosg*dcosg(k))*sss_ele_cut &
4126 *fac_shield(i)**2*fac_shield(j)**2 &
4127 *((sslipi+sslipj)/2.0d0*lipscale**2+1.0d0)
4131 ! ghalf=0.5D0*ggg(k)
4132 ! gelc(k,i)=gelc(k,i)+ghalf
4133 ! & +(ecosa*(dc_norm(k,j)-cosa*dc_norm(k,i))
4134 ! & + ecosb*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1)
4135 ! gelc(k,j)=gelc(k,j)+ghalf
4136 ! & +(ecosa*(dc_norm(k,i)-cosa*dc_norm(k,j))
4137 ! & + ecosg*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1)
4141 !grad gelc(l,k)=gelc(l,k)+ggg(l)
4145 gelc(k,i)=gelc(k,i) &
4146 +(ecosa*(dc_norm(k,j)-cosa*dc_norm(k,i)) &
4147 + ecosb*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1)&
4149 *fac_shield(i)**2*fac_shield(j)**2 &
4150 *((sslipi+sslipj)/2.0d0*lipscale**2+1.0d0)
4152 gelc(k,j)=gelc(k,j) &
4153 +(ecosa*(dc_norm(k,i)-cosa*dc_norm(k,j)) &
4154 + ecosg*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1)&
4156 *fac_shield(i)**2*fac_shield(j)**2 &
4157 *((sslipi+sslipj)/2.0d0*lipscale**2+1.0d0)
4159 gelc_long(k,j)=gelc_long(k,j)+ggg(k)
4160 gelc_long(k,i)=gelc_long(k,i)-ggg(k)
4163 IF (wel_loc.gt.0.0d0 .or. wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 &
4164 .or. wcorr6.gt.0.0d0 .or. wturn3.gt.0.0d0 &
4165 .or. wturn4.gt.0.0d0 .or. wturn6.gt.0.0d0) THEN
4167 ! 9/25/99 Mixed third-order local-electrostatic terms. The local-interaction
4168 ! energy of a peptide unit is assumed in the form of a second-order
4169 ! Fourier series in the angles lambda1 and lambda2 (see Nishikawa et al.
4170 ! Macromolecules, 1974, 7, 797-806 for definition). This correlation terms
4171 ! are computed for EVERY pair of non-contiguous peptide groups.
4173 if (j.lt.nres-1) then
4184 muij(kkk)=mu(k,i)*mu(l,j)
4186 gmuij1(kkk)=gtb1(k,i+1)*mu(l,j)
4187 !c write(iout,*) 'k=',k,i,gtb1(k,i+1),gtb1(k,i+1)*mu(l,j)
4188 gmuij2(kkk)=gUb2(k,i)*mu(l,j)
4189 gmuji1(kkk)=mu(k,i)*gtb1(l,j+1)
4190 !c write(iout,*) 'l=',l,j,gtb1(l,j+1),gtb1(l,j+1)*mu(k,i)
4191 gmuji2(kkk)=mu(k,i)*gUb2(l,j)
4196 !d write (iout,*) 'EELEC: i',i,' j',j
4197 !d write (iout,*) 'j',j,' j1',j1,' j2',j2
4198 !d write(iout,*) 'muij',muij
4199 ury=scalar(uy(1,i),erij)
4200 urz=scalar(uz(1,i),erij)
4201 vry=scalar(uy(1,j),erij)
4202 vrz=scalar(uz(1,j),erij)
4203 a22=scalar(uy(1,i),uy(1,j))-3*ury*vry
4204 a23=scalar(uy(1,i),uz(1,j))-3*ury*vrz
4205 a32=scalar(uz(1,i),uy(1,j))-3*urz*vry
4206 a33=scalar(uz(1,i),uz(1,j))-3*urz*vrz
4207 fac=dsqrt(-ael6i)*r3ij
4212 !d write (iout,'(4i5,4f10.5)')
4213 !d & i,itortyp(itype(i,1)),j,itortyp(itype(j,1)),a22,a23,a32,a33
4214 !d write (iout,'(6f10.5)') (muij(k),k=1,4),fac,eel_loc_ij
4215 !d write (iout,'(2(3f10.5,5x)/2(3f10.5,5x))') uy(:,i),uz(:,i),
4216 !d & uy(:,j),uz(:,j)
4217 !d write (iout,'(4f10.5)')
4218 !d & scalar(uy(1,i),uy(1,j)),scalar(uy(1,i),uz(1,j)),
4219 !d & scalar(uz(1,i),uy(1,j)),scalar(uz(1,i),uz(1,j))
4220 !d write (iout,'(4f10.5)') ury,urz,vry,vrz
4221 !d write (iout,'(9f10.5/)')
4222 !d & fac22,a22,fac23,a23,fac32,a32,fac33,a33,eel_loc_ij
4223 ! Derivatives of the elements of A in virtual-bond vectors
4224 call unormderiv(erij(1),unmat(1,1),rmij,erder(1,1))
4226 uryg(k,1)=scalar(erder(1,k),uy(1,i))
4227 uryg(k,2)=scalar(uygrad(1,k,1,i),erij(1))
4228 uryg(k,3)=scalar(uygrad(1,k,2,i),erij(1))
4229 urzg(k,1)=scalar(erder(1,k),uz(1,i))
4230 urzg(k,2)=scalar(uzgrad(1,k,1,i),erij(1))
4231 urzg(k,3)=scalar(uzgrad(1,k,2,i),erij(1))
4232 vryg(k,1)=scalar(erder(1,k),uy(1,j))
4233 vryg(k,2)=scalar(uygrad(1,k,1,j),erij(1))
4234 vryg(k,3)=scalar(uygrad(1,k,2,j),erij(1))
4235 vrzg(k,1)=scalar(erder(1,k),uz(1,j))
4236 vrzg(k,2)=scalar(uzgrad(1,k,1,j),erij(1))
4237 vrzg(k,3)=scalar(uzgrad(1,k,2,j),erij(1))
4239 ! Compute radial contributions to the gradient
4257 ! Add the contributions coming from er
4260 agg(k,1)=agg(k,1)+fac3*(uryg(k,1)*vry+vryg(k,1)*ury)
4261 agg(k,2)=agg(k,2)+fac3*(uryg(k,1)*vrz+vrzg(k,1)*ury)
4262 agg(k,3)=agg(k,3)+fac3*(urzg(k,1)*vry+vryg(k,1)*urz)
4263 agg(k,4)=agg(k,4)+fac3*(urzg(k,1)*vrz+vrzg(k,1)*urz)
4266 ! Derivatives in DC(i)
4267 !grad ghalf1=0.5d0*agg(k,1)
4268 !grad ghalf2=0.5d0*agg(k,2)
4269 !grad ghalf3=0.5d0*agg(k,3)
4270 !grad ghalf4=0.5d0*agg(k,4)
4271 aggi(k,1)=fac*(scalar(uygrad(1,k,1,i),uy(1,j)) &
4272 -3.0d0*uryg(k,2)*vry)!+ghalf1
4273 aggi(k,2)=fac*(scalar(uygrad(1,k,1,i),uz(1,j)) &
4274 -3.0d0*uryg(k,2)*vrz)!+ghalf2
4275 aggi(k,3)=fac*(scalar(uzgrad(1,k,1,i),uy(1,j)) &
4276 -3.0d0*urzg(k,2)*vry)!+ghalf3
4277 aggi(k,4)=fac*(scalar(uzgrad(1,k,1,i),uz(1,j)) &
4278 -3.0d0*urzg(k,2)*vrz)!+ghalf4
4279 ! Derivatives in DC(i+1)
4280 aggi1(k,1)=fac*(scalar(uygrad(1,k,2,i),uy(1,j)) &
4281 -3.0d0*uryg(k,3)*vry)!+agg(k,1)
4282 aggi1(k,2)=fac*(scalar(uygrad(1,k,2,i),uz(1,j)) &
4283 -3.0d0*uryg(k,3)*vrz)!+agg(k,2)
4284 aggi1(k,3)=fac*(scalar(uzgrad(1,k,2,i),uy(1,j)) &
4285 -3.0d0*urzg(k,3)*vry)!+agg(k,3)
4286 aggi1(k,4)=fac*(scalar(uzgrad(1,k,2,i),uz(1,j)) &
4287 -3.0d0*urzg(k,3)*vrz)!+agg(k,4)
4288 ! Derivatives in DC(j)
4289 aggj(k,1)=fac*(scalar(uygrad(1,k,1,j),uy(1,i)) &
4290 -3.0d0*vryg(k,2)*ury)!+ghalf1
4291 aggj(k,2)=fac*(scalar(uzgrad(1,k,1,j),uy(1,i)) &
4292 -3.0d0*vrzg(k,2)*ury)!+ghalf2
4293 aggj(k,3)=fac*(scalar(uygrad(1,k,1,j),uz(1,i)) &
4294 -3.0d0*vryg(k,2)*urz)!+ghalf3
4295 aggj(k,4)=fac*(scalar(uzgrad(1,k,1,j),uz(1,i)) &
4296 -3.0d0*vrzg(k,2)*urz)!+ghalf4
4297 ! Derivatives in DC(j+1) or DC(nres-1)
4298 aggj1(k,1)=fac*(scalar(uygrad(1,k,2,j),uy(1,i)) &
4299 -3.0d0*vryg(k,3)*ury)
4300 aggj1(k,2)=fac*(scalar(uzgrad(1,k,2,j),uy(1,i)) &
4301 -3.0d0*vrzg(k,3)*ury)
4302 aggj1(k,3)=fac*(scalar(uygrad(1,k,2,j),uz(1,i)) &
4303 -3.0d0*vryg(k,3)*urz)
4304 aggj1(k,4)=fac*(scalar(uzgrad(1,k,2,j),uz(1,i)) &
4305 -3.0d0*vrzg(k,3)*urz)
4306 !grad if (j.eq.nres-1 .and. i.lt.j-2) then
4308 !grad aggj1(k,l)=aggj1(k,l)+agg(k,l)
4321 aggi(k,l)=-aggi(k,l)
4322 aggi1(k,l)=-aggi1(k,l)
4323 aggj(k,l)=-aggj(k,l)
4324 aggj1(k,l)=-aggj1(k,l)
4327 if (j.lt.nres-1) then
4333 aggi(k,l)=-aggi(k,l)
4334 aggi1(k,l)=-aggi1(k,l)
4335 aggj(k,l)=-aggj(k,l)
4336 aggj1(k,l)=-aggj1(k,l)
4347 aggi(k,l)=-aggi(k,l)
4348 aggi1(k,l)=-aggi1(k,l)
4349 aggj(k,l)=-aggj(k,l)
4350 aggj1(k,l)=-aggj1(k,l)
4355 IF (wel_loc.gt.0.0d0) THEN
4356 ! Contribution to the local-electrostatic energy coming from the i-j pair
4357 eel_loc_ij=a22*muij(1)+a23*muij(2)+a32*muij(3) &
4359 if (shield_mode.eq.0) then
4363 eel_loc_ij=eel_loc_ij &
4364 *fac_shield(i)*fac_shield(j) &
4365 *((sslipi+sslipj)/2.0d0*lipscale+1.0d0)
4366 !C Now derivative over eel_loc
4367 if ((fac_shield(i).gt.0).and.(fac_shield(j).gt.0).and. &
4368 (shield_mode.gt.0)) then
4371 do ilist=1,ishield_list(i)
4372 iresshield=shield_list(ilist,i)
4374 rlocshield=grad_shield_side(k,ilist,i)*eel_loc_ij &
4377 gshieldx_ll(k,iresshield)=gshieldx_ll(k,iresshield)+ &
4379 +grad_shield_loc(k,ilist,i)*eel_loc_ij/fac_shield(i) &
4382 gshieldc_ll(k,iresshield-1)=gshieldc_ll(k,iresshield-1)&
4386 do ilist=1,ishield_list(j)
4387 iresshield=shield_list(ilist,j)
4389 rlocshield=grad_shield_side(k,ilist,j)*eel_loc_ij &
4392 gshieldx_ll(k,iresshield)=gshieldx_ll(k,iresshield)+ &
4394 +grad_shield_loc(k,ilist,j)*eel_loc_ij/fac_shield(j) &
4397 gshieldc_ll(k,iresshield-1)=gshieldc_ll(k,iresshield-1)&
4404 gshieldc_ll(k,i)=gshieldc_ll(k,i)+ &
4405 grad_shield(k,i)*eel_loc_ij/fac_shield(i) &
4407 gshieldc_ll(k,j)=gshieldc_ll(k,j)+ &
4408 grad_shield(k,j)*eel_loc_ij/fac_shield(j) &
4410 gshieldc_ll(k,i-1)=gshieldc_ll(k,i-1)+ &
4411 grad_shield(k,i)*eel_loc_ij/fac_shield(i) &
4413 gshieldc_ll(k,j-1)=gshieldc_ll(k,j-1)+ &
4414 grad_shield(k,j)*eel_loc_ij/fac_shield(j) &
4421 geel_loc_ij=(a22*gmuij1(1)&
4425 *fac_shield(i)*fac_shield(j)&
4427 *((sslipi+sslipj)/2.0d0*lipscale+1.0d0)
4430 !c write(iout,*) "derivative over thatai"
4431 !c write(iout,*) a22*gmuij1(1), a23*gmuij1(2) ,a32*gmuij1(3),
4433 gloc(nphi+i,icg)=gloc(nphi+i,icg)+&
4435 !c write(iout,*) "derivative over thatai-1"
4436 !c write(iout,*) a22*gmuij2(1), a23*gmuij2(2) ,a32*gmuij2(3),
4443 gloc(nphi+i-1,icg)=gloc(nphi+i-1,icg)+&
4444 geel_loc_ij*wel_loc&
4445 *fac_shield(i)*fac_shield(j)&
4447 *((sslipi+sslipj)/2.0d0*lipscale+1.0d0)
4450 !c Derivative over j residue
4451 geel_loc_ji=a22*gmuji1(1)&
4455 !c write(iout,*) "derivative over thataj"
4456 !c write(iout,*) a22*gmuji1(1), a23*gmuji1(2) ,a32*gmuji1(3),
4459 gloc(nphi+j,icg)=gloc(nphi+j,icg)+&
4460 geel_loc_ji*wel_loc&
4461 *fac_shield(i)*fac_shield(j)&
4463 *((sslipi+sslipj)/2.0d0*lipscale+1.0d0)
4471 !c write(iout,*) "derivative over thataj-1"
4472 !c write(iout,*) a22*gmuji2(1), a23*gmuji2(2) ,a32*gmuji2(3),
4474 gloc(nphi+j-1,icg)=gloc(nphi+j-1,icg)+&
4475 geel_loc_ji*wel_loc&
4476 *fac_shield(i)*fac_shield(j)&
4478 *((sslipi+sslipj)/2.0d0*lipscale+1.0d0)
4482 ! write (iout,*) 'i',i,' j',j,' eel_loc_ij',eel_loc_ij
4484 ! if (energy_dec) write (iout,'(a6,2i5,0pf7.3)') &
4485 ! 'eelloc',i,j,eel_loc_ij
4486 if (energy_dec) write (iout,'(a6,2i5,0pf7.3,8f8.3)') &
4487 'eelloc',i,j,eel_loc_ij,a22,muij(1),a23,muij(2),a32,muij(3),a33,muij(4)
4488 ! print *,"EELLOC",i,gel_loc_loc(i-1)
4490 ! if (energy_dec) write (iout,*) "a22",a22," a23",a23," a32",a32," a33",a33
4491 ! if (energy_dec) write (iout,*) "muij",muij
4492 ! write (iout,*) a22,muij(1),a23,muij(2),a32,muij(3)
4494 eel_loc=eel_loc+eel_loc_ij*sss_ele_cut
4495 ! Partial derivatives in virtual-bond dihedral angles gamma
4497 gel_loc_loc(i-1)=gel_loc_loc(i-1)+ &
4498 (a22*muder(1,i)*mu(1,j)+a23*muder(1,i)*mu(2,j) &
4499 +a32*muder(2,i)*mu(1,j)+a33*muder(2,i)*mu(2,j)) &
4501 *fac_shield(i)*fac_shield(j) &
4502 *((sslipi+sslipj)/2.0d0*lipscale+1.0d0)
4504 gel_loc_loc(j-1)=gel_loc_loc(j-1)+ &
4505 (a22*mu(1,i)*muder(1,j)+a23*mu(1,i)*muder(2,j) &
4506 +a32*mu(2,i)*muder(1,j)+a33*mu(2,i)*muder(2,j)) &
4508 *fac_shield(i)*fac_shield(j) &
4509 *((sslipi+sslipj)/2.0d0*lipscale+1.0d0)
4510 ! Derivatives of eello in DC(i+1) thru DC(j-1) or DC(nres-2)
4512 ! ggg(1)=(agg(1,1)*muij(1)+ &
4513 ! agg(1,2)*muij(2)+agg(1,3)*muij(3)+agg(1,4)*muij(4)) &
4515 ! +eel_loc_ij*sss_ele_grad*rmij*xj
4516 ! ggg(2)=(agg(2,1)*muij(1)+ &
4517 ! agg(2,2)*muij(2)+agg(2,3)*muij(3)+agg(2,4)*muij(4)) &
4519 ! +eel_loc_ij*sss_ele_grad*rmij*yj
4520 ! ggg(3)=(agg(3,1)*muij(1)+ &
4521 ! agg(3,2)*muij(2)+agg(3,3)*muij(3)+agg(3,4)*muij(4)) &
4523 ! +eel_loc_ij*sss_ele_grad*rmij*zj
4529 ggg(l)=(agg(l,1)*muij(1)+ &
4530 agg(l,2)*muij(2)+agg(l,3)*muij(3)+agg(l,4)*muij(4))&
4532 *fac_shield(i)*fac_shield(j) &
4533 *((sslipi+sslipj)/2.0d0*lipscale+1.0d0) &
4534 +eel_loc_ij*sss_ele_grad*rmij*xtemp(l)
4537 gel_loc_long(l,j)=gel_loc_long(l,j)+ggg(l)
4538 gel_loc_long(l,i)=gel_loc_long(l,i)-ggg(l)
4539 !grad ghalf=0.5d0*ggg(l)
4540 !grad gel_loc(l,i)=gel_loc(l,i)+ghalf
4541 !grad gel_loc(l,j)=gel_loc(l,j)+ghalf
4543 gel_loc_long(3,j)=gel_loc_long(3,j)+ &
4544 ssgradlipj*eel_loc_ij/2.0d0*lipscale/ &
4545 ((sslipi+sslipj)/2.0d0*lipscale+1.0d0)*sss_ele_cut
4547 gel_loc_long(3,i)=gel_loc_long(3,i)+ &
4548 ssgradlipi*eel_loc_ij/2.0d0*lipscale/ &
4549 ((sslipi+sslipj)/2.0d0*lipscale+1.0d0)*sss_ele_cut
4553 !grad gel_loc(l,k)=gel_loc(l,k)+ggg(l)
4556 ! Remaining derivatives of eello
4558 gel_loc(l,i)=gel_loc(l,i)+(aggi(l,1)*muij(1)+ &
4559 aggi(l,2)*muij(2)+aggi(l,3)*muij(3)+aggi(l,4)*muij(4))&
4561 *fac_shield(i)*fac_shield(j) &
4562 *((sslipi+sslipj)/2.0d0*lipscale+1.0d0)
4564 !+eel_loc_ij*sss_ele_grad*rmij*xtemp(l)
4565 gel_loc(l,i+1)=gel_loc(l,i+1)+(aggi1(l,1)*muij(1)+ &
4566 aggi1(l,2)*muij(2)+aggi1(l,3)*muij(3) &
4567 +aggi1(l,4)*muij(4))&
4569 *fac_shield(i)*fac_shield(j) &
4570 *((sslipi+sslipj)/2.0d0*lipscale+1.0d0)
4572 !+eel_loc_ij*sss_ele_grad*rmij*xtemp(l)
4573 gel_loc(l,j)=gel_loc(l,j)+(aggj(l,1)*muij(1)+ &
4574 aggj(l,2)*muij(2)+aggj(l,3)*muij(3)+aggj(l,4)*muij(4))&
4576 *fac_shield(i)*fac_shield(j) &
4577 *((sslipi+sslipj)/2.0d0*lipscale+1.0d0)
4579 !+eel_loc_ij*sss_ele_grad*rmij*xtemp(l)
4580 gel_loc(l,j1)=gel_loc(l,j1)+(aggj1(l,1)*muij(1)+ &
4581 aggj1(l,2)*muij(2)+aggj1(l,3)*muij(3) &
4582 +aggj1(l,4)*muij(4))&
4584 *fac_shield(i)*fac_shield(j) &
4585 *((sslipi+sslipj)/2.0d0*lipscale+1.0d0)
4587 !+eel_loc_ij*sss_ele_grad*rmij*xtemp(l)
4590 ! Change 12/26/95 to calculate four-body contributions to H-bonding energy
4591 ! if (j.gt.i+1 .and. num_conti.le.maxconts) then
4592 if (wcorr+wcorr4+wcorr5+wcorr6.gt.0.0d0 &
4593 .and. num_conti.le.maxconts) then
4594 ! write (iout,*) i,j," entered corr"
4596 ! Calculate the contact function. The ith column of the array JCONT will
4597 ! contain the numbers of atoms that make contacts with the atom I (of numbers
4598 ! greater than I). The arrays FACONT and GACONT will contain the values of
4599 ! the contact function and its derivative.
4600 ! r0ij=1.02D0*rpp(iteli,itelj)
4601 ! r0ij=1.11D0*rpp(iteli,itelj)
4602 r0ij=2.20D0*rpp(iteli,itelj)
4603 ! r0ij=1.55D0*rpp(iteli,itelj)
4604 call gcont(rij,r0ij,1.0D0,0.2d0*r0ij,fcont,fprimcont)
4605 !elwrite(iout,*) "num_conti",num_conti, "maxconts",maxconts
4606 if (fcont.gt.0.0D0) then
4607 num_conti=num_conti+1
4608 if (num_conti.gt.maxconts) then
4609 !el write (iout,*) "esrgresgdsrgdfsrgdswrgaresfgaerwgae"
4610 !el write (iout,*) "num_conti",num_conti, "maxconts",maxconts
4611 write (iout,*) 'WARNING - max. # of contacts exceeded;',&
4612 ' will skip next contacts for this conf.', num_conti
4614 jcont_hb(num_conti,i)=j
4615 !d write (iout,*) "i",i," j",j," num_conti",num_conti,
4616 !d & " jcont_hb",jcont_hb(num_conti,i)
4617 IF (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or. &
4618 wcorr6.gt.0.0d0 .or. wturn6.gt.0.0d0) THEN
4619 ! 9/30/99 (AL) - store components necessary to evaluate higher-order loc-el
4621 d_cont(num_conti,i)=rij
4622 !d write (2,'(3e15.5)') rij,r0ij+0.2d0*r0ij,rij
4623 ! --- Electrostatic-interaction matrix ---
4624 a_chuj(1,1,num_conti,i)=a22
4625 a_chuj(1,2,num_conti,i)=a23
4626 a_chuj(2,1,num_conti,i)=a32
4627 a_chuj(2,2,num_conti,i)=a33
4628 ! --- Gradient of rij
4630 grij_hb_cont(kkk,num_conti,i)=erij(kkk)
4637 a_chuj_der(k,l,m,1,num_conti,i)=agg(m,kkll)
4638 a_chuj_der(k,l,m,2,num_conti,i)=aggi(m,kkll)
4639 a_chuj_der(k,l,m,3,num_conti,i)=aggi1(m,kkll)
4640 a_chuj_der(k,l,m,4,num_conti,i)=aggj(m,kkll)
4641 a_chuj_der(k,l,m,5,num_conti,i)=aggj1(m,kkll)
4646 IF (wcorr4.eq.0.0d0 .and. wcorr.gt.0.0d0) THEN
4647 ! Calculate contact energies
4649 wij=cosa-3.0D0*cosb*cosg
4652 ! fac3=dsqrt(-ael6i)/r0ij**3
4653 fac3=dsqrt(-ael6i)*r3ij
4654 ! ees0pij=dsqrt(4.0D0+cosa4+wij*wij-3.0D0*cosbg1*cosbg1)
4655 ees0tmp=4.0D0+cosa4+wij*wij-3.0D0*cosbg1*cosbg1
4656 if (ees0tmp.gt.0) then
4657 ees0pij=dsqrt(ees0tmp)
4661 if (shield_mode.eq.0) then
4665 ees0plist(num_conti,i)=j
4667 ! ees0mij=dsqrt(4.0D0-cosa4+wij*wij-3.0D0*cosbg2*cosbg2)
4668 ees0tmp=4.0D0-cosa4+wij*wij-3.0D0*cosbg2*cosbg2
4669 if (ees0tmp.gt.0) then
4670 ees0mij=dsqrt(ees0tmp)
4675 ees0p(num_conti,i)=0.5D0*fac3*(ees0pij+ees0mij) &
4677 *fac_shield(i)*fac_shield(j)
4678 ! *((sslipi+sslipj)/2.0d0*lipscale+1.0d0)
4680 ees0m(num_conti,i)=0.5D0*fac3*(ees0pij-ees0mij) &
4682 *fac_shield(i)*fac_shield(j)
4683 ! *((sslipi+sslipj)/2.0d0*lipscale+1.0d0)
4685 ! Diagnostics. Comment out or remove after debugging!
4686 ! ees0p(num_conti,i)=0.5D0*fac3*ees0pij
4687 ! ees0m(num_conti,i)=0.5D0*fac3*ees0mij
4688 ! ees0m(num_conti,i)=0.0D0
4690 ! write (iout,*) 'i=',i,' j=',j,' rij=',rij,' r0ij=',r0ij,
4691 ! & ' ees0ij=',ees0p(num_conti,i),ees0m(num_conti,i),' fcont=',fcont
4692 ! Angular derivatives of the contact function
4693 ees0pij1=fac3/ees0pij
4694 ees0mij1=fac3/ees0mij
4695 fac3p=-3.0D0*fac3*rrmij
4696 ees0pijp=0.5D0*fac3p*(ees0pij+ees0mij)
4697 ees0mijp=0.5D0*fac3p*(ees0pij-ees0mij)
4699 ecosa1= ees0pij1*( 1.0D0+0.5D0*wij)
4700 ecosb1=-1.5D0*ees0pij1*(wij*cosg+cosbg1)
4701 ecosg1=-1.5D0*ees0pij1*(wij*cosb+cosbg1)
4702 ecosa2= ees0mij1*(-1.0D0+0.5D0*wij)
4703 ecosb2=-1.5D0*ees0mij1*(wij*cosg+cosbg2)
4704 ecosg2=-1.5D0*ees0mij1*(wij*cosb-cosbg2)
4705 ecosap=ecosa1+ecosa2
4706 ecosbp=ecosb1+ecosb2
4707 ecosgp=ecosg1+ecosg2
4708 ecosam=ecosa1-ecosa2
4709 ecosbm=ecosb1-ecosb2
4710 ecosgm=ecosg1-ecosg2
4719 facont_hb(num_conti,i)=fcont
4720 fprimcont=fprimcont/rij
4721 !d facont_hb(num_conti,i)=1.0D0
4722 ! Following line is for diagnostics.
4725 dcosb(k)=rmij*(dc_norm(k,i)-erij(k)*cosb)
4726 dcosg(k)=rmij*(dc_norm(k,j)-erij(k)*cosg)
4729 gggp(k)=ecosbp*dcosb(k)+ecosgp*dcosg(k)
4730 gggm(k)=ecosbm*dcosb(k)+ecosgm*dcosg(k)
4732 gggp(1)=gggp(1)+ees0pijp*xj &
4733 +ees0p(num_conti,i)/sss_ele_cut*rmij*xj*sss_ele_grad
4734 gggp(2)=gggp(2)+ees0pijp*yj &
4735 +ees0p(num_conti,i)/sss_ele_cut*rmij*yj*sss_ele_grad
4736 gggp(3)=gggp(3)+ees0pijp*zj &
4737 +ees0p(num_conti,i)/sss_ele_cut*rmij*zj*sss_ele_grad
4739 gggm(1)=gggm(1)+ees0mijp*xj &
4740 +ees0m(num_conti,i)/sss_ele_cut*rmij*xj*sss_ele_grad
4742 gggm(2)=gggm(2)+ees0mijp*yj &
4743 +ees0m(num_conti,i)/sss_ele_cut*rmij*yj*sss_ele_grad
4745 gggm(3)=gggm(3)+ees0mijp*zj &
4746 +ees0m(num_conti,i)/sss_ele_cut*rmij*zj*sss_ele_grad
4748 ! Derivatives due to the contact function
4749 gacont_hbr(1,num_conti,i)=fprimcont*xj
4750 gacont_hbr(2,num_conti,i)=fprimcont*yj
4751 gacont_hbr(3,num_conti,i)=fprimcont*zj
4754 ! 10/24/08 cgrad and ! comments indicate the parts of the code removed
4755 ! following the change of gradient-summation algorithm.
4757 !grad ghalfp=0.5D0*gggp(k)
4758 !grad ghalfm=0.5D0*gggm(k)
4759 gacontp_hb1(k,num_conti,i)= & !ghalfp+
4760 (ecosap*(dc_norm(k,j)-cosa*dc_norm(k,i)) &
4761 + ecosbp*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1) &
4762 *sss_ele_cut*fac_shield(i)*fac_shield(j) ! &
4763 ! *((sslipi+sslipj)/2.0d0*lipscale+1.0d0)
4766 gacontp_hb2(k,num_conti,i)= & !ghalfp+
4767 (ecosap*(dc_norm(k,i)-cosa*dc_norm(k,j)) &
4768 + ecosgp*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1)&
4769 *sss_ele_cut*fac_shield(i)*fac_shield(j)! &
4770 ! *((sslipi+sslipj)/2.0d0*lipscale+1.0d0)
4773 gacontp_hb3(k,num_conti,i)=gggp(k) &
4774 *sss_ele_cut*fac_shield(i)*fac_shield(j)
4775 ! *((sslipi+sslipj)/2.0d0*lipscale+1.0d0)
4777 gacontm_hb1(k,num_conti,i)= & !ghalfm+
4778 (ecosam*(dc_norm(k,j)-cosa*dc_norm(k,i)) &
4779 + ecosbm*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1) &
4780 *sss_ele_cut*fac_shield(i)*fac_shield(j)
4781 ! *((sslipi+sslipj)/2.0d0*lipscale+1.0d0)
4783 gacontm_hb2(k,num_conti,i)= & !ghalfm+
4784 (ecosam*(dc_norm(k,i)-cosa*dc_norm(k,j)) &
4785 + ecosgm*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1) &
4786 *sss_ele_cut*fac_shield(i)*fac_shield(j)
4787 ! *((sslipi+sslipj)/2.0d0*lipscale+1.0d0)
4789 gacontm_hb3(k,num_conti,i)=gggm(k) &
4790 *sss_ele_cut*fac_shield(i)*fac_shield(j)
4791 ! *((sslipi+sslipj)/2.0d0*lipscale+1.0d0)
4794 ! Diagnostics. Comment out or remove after debugging!
4796 !diag gacontp_hb1(k,num_conti,i)=0.0D0
4797 !diag gacontp_hb2(k,num_conti,i)=0.0D0
4798 !diag gacontp_hb3(k,num_conti,i)=0.0D0
4799 !diag gacontm_hb1(k,num_conti,i)=0.0D0
4800 !diag gacontm_hb2(k,num_conti,i)=0.0D0
4801 !diag gacontm_hb3(k,num_conti,i)=0.0D0
4804 endif ! num_conti.le.maxconts
4807 if (wturn3.gt.0.0d0 .or. wturn4.gt.0.0d0) then
4810 ghalf=0.5d0*agg(l,k)
4811 aggi(l,k)=aggi(l,k)+ghalf
4812 aggi1(l,k)=aggi1(l,k)+agg(l,k)
4813 aggj(l,k)=aggj(l,k)+ghalf
4816 if (j.eq.nres-1 .and. i.lt.j-2) then
4819 aggj1(l,k)=aggj1(l,k)+agg(l,k)
4825 ! t_eelecij=t_eelecij+MPI_Wtime()-time00
4827 end subroutine eelecij
4828 !-----------------------------------------------------------------------------
4829 subroutine eturn3(i,eello_turn3)
4830 ! Third- and fourth-order contributions from turns
4833 ! implicit real(kind=8) (a-h,o-z)
4834 ! include 'DIMENSIONS'
4835 ! include 'COMMON.IOUNITS'
4836 ! include 'COMMON.GEO'
4837 ! include 'COMMON.VAR'
4838 ! include 'COMMON.LOCAL'
4839 ! include 'COMMON.CHAIN'
4840 ! include 'COMMON.DERIV'
4841 ! include 'COMMON.INTERACT'
4842 ! include 'COMMON.CONTACTS'
4843 ! include 'COMMON.TORSION'
4844 ! include 'COMMON.VECTORS'
4845 ! include 'COMMON.FFIELD'
4846 ! include 'COMMON.CONTROL'
4847 real(kind=8),dimension(3) :: ggg
4848 real(kind=8),dimension(2,2) :: auxmat,auxmat1,auxmat2,pizda,&
4849 e1t,e2t,e3t,e1tder,e2tder,e3tder,e1a,ae3,ae3e2,gpizda1,&
4850 gpizda2,auxgmat1,auxgmatt1,auxgmat2,auxgmatt2
4852 real(kind=8),dimension(2) :: auxvec,auxvec1
4853 !el real(kind=8),dimension(3,4) :: agg,aggi,aggi1,aggj,aggj1
4854 real(kind=8),dimension(2,2) :: auxmat3 !el, a_temp
4855 !el integer :: num_conti,j1,j2
4856 !el real(kind=8) :: a22,a23,a32,a33,dxi,dyi,dzi,dx_normi,dy_normi,&
4857 !el dz_normi,xmedi,ymedi,zmedi
4859 !el common /locel/ a_temp,agg,aggi,aggi1,aggj,aggj1,a22,a23,a32,a33,&
4860 !el dxi,dyi,dzi,dx_normi,dy_normi,dz_normi,xmedi,ymedi,zmedi,&
4863 integer :: i,j,l,k,ilist,iresshield
4864 real(kind=8) :: eello_turn3,zj,fracinbuf,eello_t3, rlocshield,xj,yj
4868 ! write (iout,*) "eturn3",i,j,j1,j2
4869 zj=(c(3,j)+c(3,j+1))/2.0d0
4870 call to_box(xj,yj,zj)
4871 call lipid_layer(xj,yj,zj,sslipj,ssgradlipj)
4877 !CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
4879 ! Third-order contributions
4886 !CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
4887 !d call checkint_turn3(i,a_temp,eello_turn3_num)
4888 call matmat2(EUg(1,1,i+1),EUg(1,1,i+2),auxmat(1,1))
4889 call matmat2(gtEUg(1,1,i+1),EUg(1,1,i+2),auxgmat1(1,1))
4890 call matmat2(EUg(1,1,i+1),gtEUg(1,1,i+2),auxgmat2(1,1))
4891 call transpose2(auxmat(1,1),auxmat1(1,1))
4892 call transpose2(auxgmat1(1,1),auxgmatt1(1,1))
4893 call transpose2(auxgmat2(1,1),auxgmatt2(1,1))
4894 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
4895 call matmat2(a_temp(1,1),auxgmatt1(1,1),gpizda1(1,1))
4896 call matmat2(a_temp(1,1),auxgmatt2(1,1),gpizda2(1,1))
4898 if (shield_mode.eq.0) then
4903 eello_turn3=eello_turn3+0.5d0*(pizda(1,1)+pizda(2,2)) &
4904 *fac_shield(i)*fac_shield(j) &
4905 *((sslipi+sslipj)/2.0d0*lipscale+1.0d0)
4907 0.5d0*(pizda(1,1)+pizda(2,2)) &
4908 *fac_shield(i)*fac_shield(j)
4910 if (energy_dec) write (iout,'(a6,2i5,0pf7.3)') &
4911 'eturn3',i,j,0.5d0*(pizda(1,1)+pizda(2,2))
4913 !C Derivatives in theta
4914 gloc(nphi+i,icg)=gloc(nphi+i,icg) &
4915 +0.5d0*(gpizda1(1,1)+gpizda1(2,2))*wturn3&
4916 *fac_shield(i)*fac_shield(j) &
4917 *((sslipi+sslipj)/2.0d0*lipscale+1.0d0)
4919 gloc(nphi+i+1,icg)=gloc(nphi+i+1,icg)&
4920 +0.5d0*(gpizda2(1,1)+gpizda2(2,2))*wturn3&
4921 *fac_shield(i)*fac_shield(j) &
4922 *((sslipi+sslipj)/2.0d0*lipscale+1.0d0)
4929 if ((fac_shield(i).gt.0).and.(fac_shield(j).gt.0).and. &
4930 (shield_mode.gt.0)) then
4933 do ilist=1,ishield_list(i)
4934 iresshield=shield_list(ilist,i)
4936 rlocshield=grad_shield_side(k,ilist,i)*eello_t3/fac_shield(i)
4937 gshieldx_t3(k,iresshield)=gshieldx_t3(k,iresshield)+ &
4939 +grad_shield_loc(k,ilist,i)*eello_t3/fac_shield(i)
4940 gshieldc_t3(k,iresshield-1)=gshieldc_t3(k,iresshield-1) &
4944 do ilist=1,ishield_list(j)
4945 iresshield=shield_list(ilist,j)
4947 rlocshield=grad_shield_side(k,ilist,j)*eello_t3/fac_shield(j)
4948 gshieldx_t3(k,iresshield)=gshieldx_t3(k,iresshield)+ &
4950 +grad_shield_loc(k,ilist,j)*eello_t3/fac_shield(j)
4951 gshieldc_t3(k,iresshield-1)=gshieldc_t3(k,iresshield-1) &
4958 gshieldc_t3(k,i)=gshieldc_t3(k,i)+ &
4959 grad_shield(k,i)*eello_t3/fac_shield(i)
4960 gshieldc_t3(k,j)=gshieldc_t3(k,j)+ &
4961 grad_shield(k,j)*eello_t3/fac_shield(j)
4962 gshieldc_t3(k,i-1)=gshieldc_t3(k,i-1)+ &
4963 grad_shield(k,i)*eello_t3/fac_shield(i)
4964 gshieldc_t3(k,j-1)=gshieldc_t3(k,j-1)+ &
4965 grad_shield(k,j)*eello_t3/fac_shield(j)
4969 !d write (2,*) 'i,',i,' j',j,'eello_turn3',
4970 !d & 0.5d0*(pizda(1,1)+pizda(2,2)),
4971 !d & ' eello_turn3_num',4*eello_turn3_num
4972 ! Derivatives in gamma(i)
4973 call matmat2(EUgder(1,1,i+1),EUg(1,1,i+2),auxmat2(1,1))
4974 call transpose2(auxmat2(1,1),auxmat3(1,1))
4975 call matmat2(a_temp(1,1),auxmat3(1,1),pizda(1,1))
4976 gel_loc_turn3(i)=gel_loc_turn3(i)+0.5d0*(pizda(1,1)+pizda(2,2))&
4977 *fac_shield(i)*fac_shield(j) &
4978 *((sslipi+sslipj)/2.0d0*lipscale+1.0d0)
4979 ! Derivatives in gamma(i+1)
4980 call matmat2(EUg(1,1,i+1),EUgder(1,1,i+2),auxmat2(1,1))
4981 call transpose2(auxmat2(1,1),auxmat3(1,1))
4982 call matmat2(a_temp(1,1),auxmat3(1,1),pizda(1,1))
4983 gel_loc_turn3(i+1)=gel_loc_turn3(i+1) &
4984 +0.5d0*(pizda(1,1)+pizda(2,2)) &
4985 *fac_shield(i)*fac_shield(j) &
4986 *((sslipi+sslipj)/2.0d0*lipscale+1.0d0)
4988 ! Cartesian derivatives
4990 ! ghalf1=0.5d0*agg(l,1)
4991 ! ghalf2=0.5d0*agg(l,2)
4992 ! ghalf3=0.5d0*agg(l,3)
4993 ! ghalf4=0.5d0*agg(l,4)
4994 a_temp(1,1)=aggi(l,1)!+ghalf1
4995 a_temp(1,2)=aggi(l,2)!+ghalf2
4996 a_temp(2,1)=aggi(l,3)!+ghalf3
4997 a_temp(2,2)=aggi(l,4)!+ghalf4
4998 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
4999 gcorr3_turn(l,i)=gcorr3_turn(l,i) &
5000 +0.5d0*(pizda(1,1)+pizda(2,2)) &
5001 *fac_shield(i)*fac_shield(j) &
5002 *((sslipi+sslipj)/2.0d0*lipscale+1.0d0)
5004 a_temp(1,1)=aggi1(l,1)!+agg(l,1)
5005 a_temp(1,2)=aggi1(l,2)!+agg(l,2)
5006 a_temp(2,1)=aggi1(l,3)!+agg(l,3)
5007 a_temp(2,2)=aggi1(l,4)!+agg(l,4)
5008 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
5009 gcorr3_turn(l,i+1)=gcorr3_turn(l,i+1) &
5010 +0.5d0*(pizda(1,1)+pizda(2,2)) &
5011 *fac_shield(i)*fac_shield(j) &
5012 *((sslipi+sslipj)/2.0d0*lipscale+1.0d0)
5014 a_temp(1,1)=aggj(l,1)!+ghalf1
5015 a_temp(1,2)=aggj(l,2)!+ghalf2
5016 a_temp(2,1)=aggj(l,3)!+ghalf3
5017 a_temp(2,2)=aggj(l,4)!+ghalf4
5018 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
5019 gcorr3_turn(l,j)=gcorr3_turn(l,j) &
5020 +0.5d0*(pizda(1,1)+pizda(2,2)) &
5021 *fac_shield(i)*fac_shield(j) &
5022 *((sslipi+sslipj)/2.0d0*lipscale+1.0d0)
5024 a_temp(1,1)=aggj1(l,1)
5025 a_temp(1,2)=aggj1(l,2)
5026 a_temp(2,1)=aggj1(l,3)
5027 a_temp(2,2)=aggj1(l,4)
5028 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
5029 gcorr3_turn(l,j1)=gcorr3_turn(l,j1) &
5030 +0.5d0*(pizda(1,1)+pizda(2,2)) &
5031 *fac_shield(i)*fac_shield(j) &
5032 *((sslipi+sslipj)/2.0d0*lipscale+1.0d0)
5034 gshieldc_t3(3,i)=gshieldc_t3(3,i)+ &
5035 ssgradlipi*eello_t3/4.0d0*lipscale
5036 gshieldc_t3(3,j)=gshieldc_t3(3,j)+ &
5037 ssgradlipj*eello_t3/4.0d0*lipscale
5038 gshieldc_t3(3,i-1)=gshieldc_t3(3,i-1)+ &
5039 ssgradlipi*eello_t3/4.0d0*lipscale
5040 gshieldc_t3(3,j-1)=gshieldc_t3(3,j-1)+ &
5041 ssgradlipj*eello_t3/4.0d0*lipscale
5044 end subroutine eturn3
5045 !-----------------------------------------------------------------------------
5046 subroutine eturn4(i,eello_turn4)
5047 ! Third- and fourth-order contributions from turns
5050 ! implicit real(kind=8) (a-h,o-z)
5051 ! include 'DIMENSIONS'
5052 ! include 'COMMON.IOUNITS'
5053 ! include 'COMMON.GEO'
5054 ! include 'COMMON.VAR'
5055 ! include 'COMMON.LOCAL'
5056 ! include 'COMMON.CHAIN'
5057 ! include 'COMMON.DERIV'
5058 ! include 'COMMON.INTERACT'
5059 ! include 'COMMON.CONTACTS'
5060 ! include 'COMMON.TORSION'
5061 ! include 'COMMON.VECTORS'
5062 ! include 'COMMON.FFIELD'
5063 ! include 'COMMON.CONTROL'
5064 real(kind=8),dimension(3) :: ggg
5065 real(kind=8),dimension(2,2) :: auxmat,auxmat1,auxmat2,pizda,&
5066 e1t,e2t,e3t,e1tder,e2tder,e3tder,e1a,ae3,ae3e2,&
5068 gte1a,gtae3,gtae3e2, ae3gte2,&
5069 gtEpizda1,gtEpizda2,gtEpizda3
5071 real(kind=8),dimension(2) :: auxvec,auxvec1,auxgEvec1,auxgEvec2,&
5074 !el real(kind=8),dimension(3,4) :: agg,aggi,aggi1,aggj,aggj1
5075 real(kind=8),dimension(2,2) :: auxmat3 !el a_temp
5076 !el real(kind=8) :: a22,a23,a32,a33,dxi,dyi,dzi,dx_normi,dy_normi,&
5077 !el dz_normi,xmedi,ymedi,zmedi
5078 !el integer :: num_conti,j1,j2
5079 !el common /locel/ a_temp,agg,aggi,aggi1,aggj,aggj1,a22,a23,a32,a33,&
5080 !el dxi,dyi,dzi,dx_normi,dy_normi,dz_normi,xmedi,ymedi,zmedi,&
5083 integer :: i,j,iti1,iti2,iti3,l,k,ilist,iresshield
5084 real(kind=8) :: eello_turn4,s1,s2,s3,zj,fracinbuf,eello_t4,&
5085 rlocshield,gs23,gs32,gsE13,gs13,gs21,gsE31,gsEE1,gsEE2,gsEE3,xj,yj
5089 ! if (j.ne.20) return
5090 ! print *,i,j,gshieldc_t4(2,j),gshieldc_t4(2,j+1)
5091 !CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
5093 ! Fourth-order contributions
5101 !CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
5102 !d call checkint_turn4(i,a_temp,eello_turn4_num)
5103 ! write (iout,*) "eturn4 i",i," j",j," j1",j1," j2",j2
5104 zj=(c(3,j)+c(3,j+1))/2.0d0
5105 call to_box(xj,yj,zj)
5106 call lipid_layer(xj,yj,zj,sslipj,ssgradlipj)
5116 ! write(iout,*) "iti1",iti1," iti2",iti2," iti3",iti3
5117 call transpose2(EUg(1,1,i+1),e1t(1,1))
5118 call transpose2(Eug(1,1,i+2),e2t(1,1))
5119 call transpose2(Eug(1,1,i+3),e3t(1,1))
5120 !C Ematrix derivative in theta
5121 call transpose2(gtEUg(1,1,i+1),gte1t(1,1))
5122 call transpose2(gtEug(1,1,i+2),gte2t(1,1))
5123 call transpose2(gtEug(1,1,i+3),gte3t(1,1))
5125 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
5126 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
5127 call matmat2(gte1t(1,1),a_temp(1,1),gte1a(1,1))
5128 call matvec2(e1a(1,1),gUb2(1,i+3),auxgvec(1))
5129 !c auxalary matrix of E i+1
5130 call matvec2(gte1a(1,1),Ub2(1,i+3),auxgEvec1(1))
5131 s1=scalar2(b1(1,iti2),auxvec(1))
5132 !c derivative of theta i+2 with constant i+3
5133 gs23=scalar2(gtb1(1,i+2),auxvec(1))
5134 !c derivative of theta i+2 with constant i+2
5135 gs32=scalar2(b1(1,i+2),auxgvec(1))
5136 !c derivative of E matix in theta of i+1
5137 gsE13=scalar2(b1(1,i+2),auxgEvec1(1))
5139 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
5140 call matmat2(a_temp(1,1),gte3t(1,1),gtae3(1,1))
5141 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
5142 !c auxilary matrix auxgvec of Ub2 with constant E matirx
5143 call matvec2(ae3(1,1),gUb2(1,i+2),auxgvec(1))
5144 !c auxilary matrix auxgEvec1 of E matix with Ub2 constant
5145 call matvec2(gtae3(1,1),Ub2(1,i+2),auxgEvec3(1))
5146 s2=scalar2(b1(1,i+1),auxvec(1))
5147 !c derivative of theta i+1 with constant i+3
5148 gs13=scalar2(gtb1(1,i+1),auxvec(1))
5149 !c derivative of theta i+2 with constant i+1
5150 gs21=scalar2(b1(1,i+1),auxgvec(1))
5151 !c derivative of theta i+3 with constant i+1
5152 gsE31=scalar2(b1(1,i+1),auxgEvec3(1))
5154 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
5155 call matmat2(gtae3(1,1),e2t(1,1),gtae3e2(1,1))
5156 !c ae3gte2 is derivative over i+2
5157 call matmat2(ae3(1,1),gte2t(1,1),ae3gte2(1,1))
5159 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
5160 call matmat2(ae3e2(1,1),gte1t(1,1),gtEpizda1(1,1))
5162 call matmat2(ae3gte2(1,1),e1t(1,1),gtEpizda2(1,1))
5164 call matmat2(gtae3e2(1,1),e1t(1,1),gtEpizda3(1,1))
5166 s3=0.5d0*(pizda(1,1)+pizda(2,2))
5167 gsEE1=0.5d0*(gtEpizda1(1,1)+gtEpizda1(2,2))
5168 gsEE2=0.5d0*(gtEpizda2(1,1)+gtEpizda2(2,2))
5169 gsEE3=0.5d0*(gtEpizda3(1,1)+gtEpizda3(2,2))
5170 if (shield_mode.eq.0) then
5175 eello_turn4=eello_turn4-(s1+s2+s3) &
5176 *fac_shield(i)*fac_shield(j) &
5177 *((sslipi+sslipj)/2.0d0*lipscale+1.0d0)
5178 eello_t4=-(s1+s2+s3) &
5179 *fac_shield(i)*fac_shield(j)
5180 !C Now derivative over shield:
5181 if ((fac_shield(i).gt.0).and.(fac_shield(j).gt.0).and. &
5182 (shield_mode.gt.0)) then
5185 do ilist=1,ishield_list(i)
5186 iresshield=shield_list(ilist,i)
5188 rlocshield=grad_shield_side(k,ilist,i)*eello_t4/fac_shield(i)
5189 ! print *,"rlocshield",rlocshield,grad_shield_side(k,ilist,i),iresshield
5190 gshieldx_t4(k,iresshield)=gshieldx_t4(k,iresshield)+ &
5192 +grad_shield_loc(k,ilist,i)*eello_t4/fac_shield(i)
5193 gshieldc_t4(k,iresshield-1)=gshieldc_t4(k,iresshield-1) &
5197 do ilist=1,ishield_list(j)
5198 iresshield=shield_list(ilist,j)
5200 ! print *,"rlocshieldj",j,rlocshield,grad_shield_side(k,ilist,j),iresshield
5201 rlocshield=grad_shield_side(k,ilist,j)*eello_t4/fac_shield(j)
5202 gshieldx_t4(k,iresshield)=gshieldx_t4(k,iresshield)+ &
5204 +grad_shield_loc(k,ilist,j)*eello_t4/fac_shield(j)
5205 gshieldc_t4(k,iresshield-1)=gshieldc_t4(k,iresshield-1) &
5207 ! print *,"after", gshieldc_t4(k,iresshield-1),iresshield-1,gshieldc_t4(k,iresshield)
5212 gshieldc_t4(k,i)=gshieldc_t4(k,i)+ &
5213 grad_shield(k,i)*eello_t4/fac_shield(i)
5214 gshieldc_t4(k,j)=gshieldc_t4(k,j)+ &
5215 grad_shield(k,j)*eello_t4/fac_shield(j)
5216 gshieldc_t4(k,i-1)=gshieldc_t4(k,i-1)+ &
5217 grad_shield(k,i)*eello_t4/fac_shield(i)
5218 gshieldc_t4(k,j-1)=gshieldc_t4(k,j-1)+ &
5219 grad_shield(k,j)*eello_t4/fac_shield(j)
5220 ! print *,"gshieldc_t4(k,j+1)",j,gshieldc_t4(k,j+1)
5224 gloc(nphi+i,icg)=gloc(nphi+i,icg)&
5225 -(gs13+gsE13+gsEE1)*wturn4&
5226 *fac_shield(i)*fac_shield(j) &
5227 *((sslipi+sslipj)/2.0d0*lipscale+1.0d0)
5229 gloc(nphi+i+1,icg)= gloc(nphi+i+1,icg)&
5230 -(gs23+gs21+gsEE2)*wturn4&
5231 *fac_shield(i)*fac_shield(j)&
5232 *((sslipi+sslipj)/2.0d0*lipscale+1.0d0)
5234 gloc(nphi+i+2,icg)= gloc(nphi+i+2,icg)&
5235 -(gs32+gsE31+gsEE3)*wturn4&
5236 *fac_shield(i)*fac_shield(j)&
5237 *((sslipi+sslipj)/2.0d0*lipscale+1.0d0)
5240 !c gloc(nphi+i+1,icg)=gloc(nphi+i+1,icg)-
5243 if (energy_dec) write (iout,'(a6,2i5,0pf7.3)') &
5244 'eturn4',i,j,-(s1+s2+s3)
5245 !d write (2,*) 'i,',i,' j',j,'eello_turn4',-(s1+s2+s3),
5246 !d & ' eello_turn4_num',8*eello_turn4_num
5247 ! Derivatives in gamma(i)
5248 call transpose2(EUgder(1,1,i+1),e1tder(1,1))
5249 call matmat2(e1tder(1,1),a_temp(1,1),auxmat(1,1))
5250 call matvec2(auxmat(1,1),Ub2(1,i+3),auxvec(1))
5251 s1=scalar2(b1(1,i+1),auxvec(1))
5252 call matmat2(ae3e2(1,1),e1tder(1,1),pizda(1,1))
5253 s3=0.5d0*(pizda(1,1)+pizda(2,2))
5254 gel_loc_turn4(i)=gel_loc_turn4(i)-(s1+s3) &
5255 *fac_shield(i)*fac_shield(j) &
5256 *((sslipi+sslipj)/2.0d0*lipscale+1.0d0)
5258 ! Derivatives in gamma(i+1)
5259 call transpose2(EUgder(1,1,i+2),e2tder(1,1))
5260 call matvec2(ae3(1,1),Ub2der(1,i+2),auxvec(1))
5261 s2=scalar2(b1(1,iti1),auxvec(1))
5262 call matmat2(ae3(1,1),e2tder(1,1),auxmat(1,1))
5263 call matmat2(auxmat(1,1),e1t(1,1),pizda(1,1))
5264 s3=0.5d0*(pizda(1,1)+pizda(2,2))
5265 gel_loc_turn4(i+1)=gel_loc_turn4(i+1)-(s2+s3) &
5266 *fac_shield(i)*fac_shield(j) &
5267 *((sslipi+sslipj)/2.0d0*lipscale+1.0d0)
5269 ! Derivatives in gamma(i+2)
5270 call transpose2(EUgder(1,1,i+3),e3tder(1,1))
5271 call matvec2(e1a(1,1),Ub2der(1,i+3),auxvec(1))
5272 s1=scalar2(b1(1,iti2),auxvec(1))
5273 call matmat2(a_temp(1,1),e3tder(1,1),auxmat(1,1))
5274 call matvec2(auxmat(1,1),Ub2(1,i+2),auxvec(1))
5275 s2=scalar2(b1(1,iti1),auxvec(1))
5276 call matmat2(auxmat(1,1),e2t(1,1),auxmat3(1,1))
5277 call matmat2(auxmat3(1,1),e1t(1,1),pizda(1,1))
5278 s3=0.5d0*(pizda(1,1)+pizda(2,2))
5279 gel_loc_turn4(i+2)=gel_loc_turn4(i+2)-(s1+s2+s3) &
5280 *fac_shield(i)*fac_shield(j) &
5281 *((sslipi+sslipj)/2.0d0*lipscale+1.0d0)
5283 ! Cartesian derivatives
5284 ! Derivatives of this turn contributions in DC(i+2)
5285 if (j.lt.nres-1) then
5287 a_temp(1,1)=agg(l,1)
5288 a_temp(1,2)=agg(l,2)
5289 a_temp(2,1)=agg(l,3)
5290 a_temp(2,2)=agg(l,4)
5291 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
5292 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
5293 s1=scalar2(b1(1,iti2),auxvec(1))
5294 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
5295 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
5296 s2=scalar2(b1(1,iti1),auxvec(1))
5297 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
5298 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
5299 s3=0.5d0*(pizda(1,1)+pizda(2,2))
5301 gcorr4_turn(l,i+2)=gcorr4_turn(l,i+2)-(s1+s2+s3)&
5302 *fac_shield(i)*fac_shield(j) &
5303 *((sslipi+sslipj)/2.0d0*lipscale+1.0d0)
5307 ! Remaining derivatives of this turn contribution
5309 a_temp(1,1)=aggi(l,1)
5310 a_temp(1,2)=aggi(l,2)
5311 a_temp(2,1)=aggi(l,3)
5312 a_temp(2,2)=aggi(l,4)
5313 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
5314 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
5315 s1=scalar2(b1(1,iti2),auxvec(1))
5316 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
5317 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
5318 s2=scalar2(b1(1,iti1),auxvec(1))
5319 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
5320 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
5321 s3=0.5d0*(pizda(1,1)+pizda(2,2))
5322 gcorr4_turn(l,i)=gcorr4_turn(l,i)-(s1+s2+s3) &
5323 *fac_shield(i)*fac_shield(j) &
5324 *((sslipi+sslipj)/2.0d0*lipscale+1.0d0)
5327 a_temp(1,1)=aggi1(l,1)
5328 a_temp(1,2)=aggi1(l,2)
5329 a_temp(2,1)=aggi1(l,3)
5330 a_temp(2,2)=aggi1(l,4)
5331 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
5332 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
5333 s1=scalar2(b1(1,iti2),auxvec(1))
5334 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
5335 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
5336 s2=scalar2(b1(1,iti1),auxvec(1))
5337 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
5338 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
5339 s3=0.5d0*(pizda(1,1)+pizda(2,2))
5340 gcorr4_turn(l,i+1)=gcorr4_turn(l,i+1)-(s1+s2+s3) &
5341 *fac_shield(i)*fac_shield(j) &
5342 *((sslipi+sslipj)/2.0d0*lipscale+1.0d0)
5345 a_temp(1,1)=aggj(l,1)
5346 a_temp(1,2)=aggj(l,2)
5347 a_temp(2,1)=aggj(l,3)
5348 a_temp(2,2)=aggj(l,4)
5349 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
5350 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
5351 s1=scalar2(b1(1,iti2),auxvec(1))
5352 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
5353 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
5354 s2=scalar2(b1(1,iti1),auxvec(1))
5355 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
5356 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
5357 s3=0.5d0*(pizda(1,1)+pizda(2,2))
5358 ! if (j.lt.nres-1) then
5359 gcorr4_turn(l,j)=gcorr4_turn(l,j)-(s1+s2+s3) &
5360 *fac_shield(i)*fac_shield(j) &
5361 *((sslipi+sslipj)/2.0d0*lipscale+1.0d0)
5364 a_temp(1,1)=aggj1(l,1)
5365 a_temp(1,2)=aggj1(l,2)
5366 a_temp(2,1)=aggj1(l,3)
5367 a_temp(2,2)=aggj1(l,4)
5368 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
5369 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
5370 s1=scalar2(b1(1,iti2),auxvec(1))
5371 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
5372 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
5373 s2=scalar2(b1(1,iti1),auxvec(1))
5374 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
5375 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
5376 s3=0.5d0*(pizda(1,1)+pizda(2,2))
5377 ! write (iout,*) "s1",s1," s2",s2," s3",s3," s1+s2+s3",s1+s2+s3
5378 ! if (j.lt.nres-1) then
5379 ! print *,"juest before",j1, gcorr4_turn(l,j1)
5380 gcorr4_turn(l,j1)=gcorr4_turn(l,j1)-(s1+s2+s3) &
5381 *fac_shield(i)*fac_shield(j) &
5382 *((sslipi+sslipj)/2.0d0*lipscale+1.0d0)
5383 ! if (shield_mode.gt.0) then
5384 ! print *,"juest after",j1, gcorr4_turn(l,j1),gshieldc_t4(k,j1),gshieldc_loc_t4(k,j1),gel_loc_turn4(i+2)
5386 ! print *,"juest after",j1, gcorr4_turn(l,j1),gel_loc_turn4(i+2)
5390 gshieldc_t4(3,i)=gshieldc_t4(3,i)+ &
5391 ssgradlipi*eello_t4/4.0d0*lipscale
5392 gshieldc_t4(3,j)=gshieldc_t4(3,j)+ &
5393 ssgradlipj*eello_t4/4.0d0*lipscale
5394 gshieldc_t4(3,i-1)=gshieldc_t4(3,i-1)+ &
5395 ssgradlipi*eello_t4/4.0d0*lipscale
5396 gshieldc_t4(3,j-1)=gshieldc_t4(3,j-1)+ &
5397 ssgradlipj*eello_t4/4.0d0*lipscale
5400 end subroutine eturn4
5401 !-----------------------------------------------------------------------------
5402 subroutine unormderiv(u,ugrad,unorm,ungrad)
5403 ! This subroutine computes the derivatives of a normalized vector u, given
5404 ! the derivatives computed without normalization conditions, ugrad. Returns
5407 real(kind=8),dimension(3) :: u,vec
5408 real(kind=8),dimension(3,3) ::ugrad,ungrad
5409 real(kind=8) :: unorm !,scalar
5411 ! write (2,*) 'ugrad',ugrad
5414 vec(i)=scalar(ugrad(1,i),u(1))
5416 ! write (2,*) 'vec',vec
5419 ungrad(j,i)=(ugrad(j,i)-u(j)*vec(i))*unorm
5422 ! write (2,*) 'ungrad',ungrad
5424 end subroutine unormderiv
5425 !-----------------------------------------------------------------------------
5426 subroutine escp_soft_sphere(evdw2,evdw2_14)
5428 ! This subroutine calculates the excluded-volume interaction energy between
5429 ! peptide-group centers and side chains and its gradient in virtual-bond and
5430 ! side-chain vectors.
5432 ! implicit real(kind=8) (a-h,o-z)
5433 ! include 'DIMENSIONS'
5434 ! include 'COMMON.GEO'
5435 ! include 'COMMON.VAR'
5436 ! include 'COMMON.LOCAL'
5437 ! include 'COMMON.CHAIN'
5438 ! include 'COMMON.DERIV'
5439 ! include 'COMMON.INTERACT'
5440 ! include 'COMMON.FFIELD'
5441 ! include 'COMMON.IOUNITS'
5442 ! include 'COMMON.CONTROL'
5443 real(kind=8),dimension(3) :: ggg
5445 integer :: i,iint,j,k,iteli,itypj
5446 real(kind=8) :: evdw2,evdw2_14,r0_scp,xi,yi,zi,xj,yj,zj,&
5447 fac,rij,r0ij,r0ijsq,evdwij,e1,e2
5452 !d print '(a)','Enter ESCP'
5453 !d write (iout,*) 'iatscp_s=',iatscp_s,' iatscp_e=',iatscp_e
5454 do i=iatscp_s,iatscp_e
5455 if (itype(i,1).eq.ntyp1 .or. itype(i+1,1).eq.ntyp1) cycle
5457 xi=0.5D0*(c(1,i)+c(1,i+1))
5458 yi=0.5D0*(c(2,i)+c(2,i+1))
5459 zi=0.5D0*(c(3,i)+c(3,i+1))
5460 call to_box(xi,yi,zi)
5462 do iint=1,nscp_gr(i)
5464 do j=iscpstart(i,iint),iscpend(i,iint)
5465 if (itype(j,1).eq.ntyp1) cycle
5466 itypj=iabs(itype(j,1))
5467 ! Uncomment following three lines for SC-p interactions
5471 ! Uncomment following three lines for Ca-p interactions
5475 call to_box(xj,yj,zj)
5476 xj=boxshift(xj-xi,boxxsize)
5477 yj=boxshift(yj-yi,boxysize)
5478 zj=boxshift(zj-zi,boxzsize)
5479 rij=xj*xj+yj*yj+zj*zj
5482 if (rij.lt.r0ijsq) then
5483 evdwij=0.25d0*(rij-r0ijsq)**2
5491 ! Calculate contributions to the gradient in the virtual-bond and SC vectors.
5496 !grad if (j.lt.i) then
5497 !d write (iout,*) 'j<i'
5498 ! Uncomment following three lines for SC-p interactions
5500 ! gradx_scp(k,j)=gradx_scp(k,j)+ggg(k)
5503 !d write (iout,*) 'j>i'
5505 !grad ggg(k)=-ggg(k)
5506 ! Uncomment following line for SC-p interactions
5507 ! gradx_scp(k,j)=gradx_scp(k,j)-ggg(k)
5511 !grad gvdwc_scp(k,i)=gvdwc_scp(k,i)-0.5D0*ggg(k)
5513 !grad kstart=min0(i+1,j)
5514 !grad kend=max0(i-1,j-1)
5515 !d write (iout,*) 'i=',i,' j=',j,' kstart=',kstart,' kend=',kend
5516 !d write (iout,*) ggg(1),ggg(2),ggg(3)
5517 !grad do k=kstart,kend
5519 !grad gvdwc_scp(l,k)=gvdwc_scp(l,k)-ggg(l)
5523 gvdwc_scpp(k,i)=gvdwc_scpp(k,i)-ggg(k)
5524 gvdwc_scp(k,j)=gvdwc_scp(k,j)+ggg(k)
5531 end subroutine escp_soft_sphere
5532 !-----------------------------------------------------------------------------
5533 subroutine escp(evdw2,evdw2_14)
5535 ! This subroutine calculates the excluded-volume interaction energy between
5536 ! peptide-group centers and side chains and its gradient in virtual-bond and
5537 ! side-chain vectors.
5539 ! implicit real(kind=8) (a-h,o-z)
5540 ! include 'DIMENSIONS'
5541 ! include 'COMMON.GEO'
5542 ! include 'COMMON.VAR'
5543 ! include 'COMMON.LOCAL'
5544 ! include 'COMMON.CHAIN'
5545 ! include 'COMMON.DERIV'
5546 ! include 'COMMON.INTERACT'
5547 ! include 'COMMON.FFIELD'
5548 ! include 'COMMON.IOUNITS'
5549 ! include 'COMMON.CONTROL'
5550 real(kind=8),dimension(3) :: ggg
5552 integer :: i,iint,j,k,iteli,itypj,subchap,iconta
5553 real(kind=8) :: evdw2,evdw2_14,xi,yi,zi,xj,yj,zj,rrij,fac,&
5555 real(kind=8) :: xj_safe,yj_safe,zj_safe,xj_temp,yj_temp,zj_temp,&
5556 dist_temp, dist_init
5557 integer xshift,yshift,zshift
5561 !d print '(a)','Enter ESCP'
5562 !d write (iout,*) 'iatscp_s=',iatscp_s,' iatscp_e=',iatscp_e
5563 ! do i=iatscp_s,iatscp_e
5564 if (nres_molec(1).eq.0) return
5565 do iconta=g_listscp_start,g_listscp_end
5566 ! print *,"icont",iconta,g_listscp_start,g_listscp_end
5567 i=newcontlistscpi(iconta)
5568 j=newcontlistscpj(iconta)
5569 if (itype(i,1).eq.ntyp1 .or. itype(i+1,1).eq.ntyp1) cycle
5571 xi=0.5D0*(c(1,i)+c(1,i+1))
5572 yi=0.5D0*(c(2,i)+c(2,i+1))
5573 zi=0.5D0*(c(3,i)+c(3,i+1))
5574 call to_box(xi,yi,zi)
5575 ! print *,itel(i),i,j
5576 ! do iint=1,nscp_gr(i)
5578 ! do j=iscpstart(i,iint),iscpend(i,iint)
5579 itypj=iabs(itype(j,1))
5580 if (itypj.eq.ntyp1) cycle
5581 ! Uncomment following three lines for SC-p interactions
5585 ! Uncomment following three lines for Ca-p interactions
5593 call to_box(xj,yj,zj)
5594 xj=boxshift(xj-xi,boxxsize)
5595 yj=boxshift(yj-yi,boxysize)
5596 zj=boxshift(zj-zi,boxzsize)
5598 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
5599 rij=dsqrt(1.0d0/rrij)
5600 sss_ele_cut=sscale_ele(rij)
5601 sss_ele_grad=sscagrad_ele(rij)
5602 ! print *,sss_ele_cut,sss_ele_grad,&
5603 ! (rij),r_cut_ele,rlamb_ele
5604 if (sss_ele_cut.le.0.0) cycle
5606 e1=fac*fac*aad(itypj,iteli)
5607 e2=fac*bad(itypj,iteli)
5608 if (iabs(j-i) .le. 2) then
5611 evdw2_14=evdw2_14+(e1+e2)*sss_ele_cut
5614 evdw2=evdw2+evdwij*sss_ele_cut
5615 ! if (energy_dec) write (iout,'(a6,2i5,0pf7.3,2i3,3e11.3)') &
5616 ! 'evdw2',i,j,evdwij,iteli,itypj,fac,aad(itypj,iteli),&
5617 if (energy_dec) write (iout,'(a6,2i5,0pf7.3)') &
5620 ! Calculate contributions to the gradient in the virtual-bond and SC vectors.
5622 fac=-(evdwij+e1)*rrij*sss_ele_cut
5623 fac=fac+evdwij*sss_ele_grad/rij/expon
5627 !grad if (j.lt.i) then
5628 !d write (iout,*) 'j<i'
5629 ! Uncomment following three lines for SC-p interactions
5631 ! gradx_scp(k,j)=gradx_scp(k,j)+ggg(k)
5634 !d write (iout,*) 'j>i'
5636 !grad ggg(k)=-ggg(k)
5637 ! Uncomment following line for SC-p interactions
5638 !cgrad gradx_scp(k,j)=gradx_scp(k,j)-ggg(k)
5639 ! gradx_scp(k,j)=gradx_scp(k,j)+ggg(k)
5643 !grad gvdwc_scp(k,i)=gvdwc_scp(k,i)-0.5D0*ggg(k)
5645 !grad kstart=min0(i+1,j)
5646 !grad kend=max0(i-1,j-1)
5647 !d write (iout,*) 'i=',i,' j=',j,' kstart=',kstart,' kend=',kend
5648 !d write (iout,*) ggg(1),ggg(2),ggg(3)
5649 !grad do k=kstart,kend
5651 !grad gvdwc_scp(l,k)=gvdwc_scp(l,k)-ggg(l)
5655 gvdwc_scpp(k,i)=gvdwc_scpp(k,i)-ggg(k)
5656 gvdwc_scp(k,j)=gvdwc_scp(k,j)+ggg(k)
5664 gvdwc_scp(j,i)=expon*gvdwc_scp(j,i)
5665 gvdwc_scpp(j,i)=expon*gvdwc_scpp(j,i)
5666 gradx_scp(j,i)=expon*gradx_scp(j,i)
5669 !******************************************************************************
5673 ! To save time the factor EXPON has been extracted from ALL components
5674 ! of GVDWC and GRADX. Remember to multiply them by this factor before further
5677 !******************************************************************************
5680 !-----------------------------------------------------------------------------
5681 subroutine edis(ehpb)
5683 ! Evaluate bridge-strain energy and its gradient in virtual-bond and SC vectors.
5685 ! implicit real(kind=8) (a-h,o-z)
5686 ! include 'DIMENSIONS'
5687 ! include 'COMMON.SBRIDGE'
5688 ! include 'COMMON.CHAIN'
5689 ! include 'COMMON.DERIV'
5690 ! include 'COMMON.VAR'
5691 ! include 'COMMON.INTERACT'
5692 ! include 'COMMON.IOUNITS'
5693 real(kind=8),dimension(3) :: ggg,vec
5695 integer :: i,j,ii,jj,iii,jjj,k,mnumii,mnumjj
5696 real(kind=8) :: fac,eij,rdis,ehpb,dd,waga,xi,yi,zi,zj,yj,xj
5699 ! write(iout,*)'edis: nhpb=',nhpb!,' fbr=',fbr
5700 ! write(iout,*)'link_start=',link_start,' link_end=',link_end
5701 if (link_end.eq.0) return
5702 do i=link_start,link_end
5703 ! If ihpb(i) and jhpb(i) > NRES, this is a SC-SC distance, otherwise a
5704 ! CA-CA distance used in regularization of structure.
5708 ! iii and jjj point to the residues for which the distance is assigned.
5709 if (ii.gt.nres) then
5717 vec(j)=c(j,jj)-c(j,ii)
5721 if (energy_dec) write(iout,*) i,ii,jj,mnumii,mnumjj,itype(jjj,mnumjj),itype(iii,mnumii)
5722 if ((itype(iii,mnumii).gt.ntyp_molec(mnumii)).or.(itype(jjj,mnumjj).gt.ntyp_molec(mnumjj))) cycle
5724 ! write (iout,*) "i",i," ii",ii," iii",iii," jj",jj," jjj",jjj,
5725 ! & dhpb(i),dhpb1(i),forcon(i)
5726 ! 24/11/03 AL: SS bridges handled separately because of introducing a specific
5727 ! distance and angle dependent SS bond potential.
5728 !mc if (ii.gt.nres .and. itype(iii).eq.1 .and. itype(jjj).eq.1) then
5729 ! 18/07/06 MC: Use the convention that the first nss pairs are SS bonds
5730 if (.not.dyn_ss .and. i.le.nss) then
5731 ! 15/02/13 CC dynamic SSbond - additional check
5732 if (ii.gt.nres .and. iabs(itype(iii,1)).eq.1 .and. &
5733 iabs(itype(jjj,1)).eq.1) then
5734 call ssbond_ene(iii,jjj,eij)
5736 ! write (iout,*) "eij",eij,iii,jjj
5738 else if (ii.gt.nres .and. jj.gt.nres) then
5739 !c Restraints from contact prediction
5741 if (constr_dist.eq.11) then
5742 ehpb=ehpb+fordepth(i)**4.0d0 &
5743 *rlornmr1(dd,dhpb(i),dhpb1(i),forcon(i))
5744 fac=fordepth(i)**4.0d0 &
5745 *rlornmr1prim(dd,dhpb(i),dhpb1(i),forcon(i))/dd
5746 if (energy_dec) write (iout,'(a6,2i5,3f8.3)') "edisl",ii,jj, &
5749 if (dhpb1(i).gt.0.0d0) then
5750 ehpb=ehpb+2*forcon(i)*gnmr1(dd,dhpb(i),dhpb1(i))
5751 fac=forcon(i)*gnmr1prim(dd,dhpb(i),dhpb1(i))/dd
5752 !c write (iout,*) "beta nmr",
5753 !c & dd,2*forcon(i)*gnmr1(dd,dhpb(i),dhpb1(i))
5757 !C Get the force constant corresponding to this distance.
5759 !C Calculate the contribution to energy.
5760 ehpb=ehpb+waga*rdis*rdis
5761 !c write (iout,*) "beta reg",dd,waga*rdis*rdis
5763 !C Evaluate gradient.
5769 ggg(j)=fac*(c(j,jj)-c(j,ii))
5772 ghpbx(j,iii)=ghpbx(j,iii)-ggg(j)
5773 ghpbx(j,jjj)=ghpbx(j,jjj)+ggg(j)
5776 ghpbc(k,jjj)=ghpbc(k,jjj)+ggg(k)
5777 ghpbc(k,iii)=ghpbc(k,iii)-ggg(k)
5782 if (constr_dist.eq.11) then
5783 ehpb=ehpb+fordepth(i)**4.0d0 &
5784 *rlornmr1(dd,dhpb(i),dhpb1(i),forcon(i))
5785 fac=fordepth(i)**4.0d0 &
5786 *rlornmr1prim(dd,dhpb(i),dhpb1(i),forcon(i))/dd
5787 if (energy_dec) write (iout,'(a6,2i5,3f8.3)') "edisl",ii,jj, &
5790 if (dhpb1(i).gt.0.0d0) then
5791 ehpb=ehpb+2*forcon(i)*gnmr1(dd,dhpb(i),dhpb1(i))
5792 fac=forcon(i)*gnmr1prim(dd,dhpb(i),dhpb1(i))/dd
5793 !c write (iout,*) "alph nmr",
5794 !c & dd,2*forcon(i)*gnmr1(dd,dhpb(i),dhpb1(i))
5799 call to_box(xi,yi,zi)
5803 call to_box(xj,yj,zj)
5804 xj=boxshift(xj-xi,boxxsize)
5805 yj=boxshift(yj-yi,boxysize)
5806 zj=boxshift(zj-zi,boxzsize)
5810 dd=sqrt(xj*xj+yj*yj+zj*zj)
5812 !C Get the force constant corresponding to this distance.
5814 !C Calculate the contribution to energy.
5815 ehpb=ehpb+waga*rdis*rdis
5816 if (energy_dec) write (iout,'(a6,2i5,5f10.3)') "edis",ii,jj, &
5817 ehpb,dd,dhpb(i),waga,rdis
5819 !c write (iout,*) "alpha reg",dd,waga*rdis*rdis
5821 !C Evaluate gradient.
5830 !cd print '(i3,3(1pe14.5))',i,(ggg(j),j=1,3)
5831 !C If this is a SC-SC distance, we need to calculate the contributions to the
5832 !C Cartesian gradient in the SC vectors (ghpbx).
5835 ghpbx(j,iii)=ghpbx(j,iii)-ggg(j)
5836 ghpbx(j,jjj)=ghpbx(j,jjj)+ggg(j)
5839 !cgrad do j=iii,jjj-1
5841 !cgrad ghpbc(k,j)=ghpbc(k,j)+ggg(k)
5845 ghpbc(k,jjj)=ghpbc(k,jjj)+ggg(k)
5846 ghpbc(k,iii)=ghpbc(k,iii)-ggg(k)
5850 if (constr_dist.ne.11) ehpb=0.5D0*ehpb
5854 !-----------------------------------------------------------------------------
5855 subroutine ssbond_ene(i,j,eij)
5857 ! Calculate the distance and angle dependent SS-bond potential energy
5858 ! using a free-energy function derived based on RHF/6-31G** ab initio
5859 ! calculations of diethyl disulfide.
5861 ! A. Liwo and U. Kozlowska, 11/24/03
5863 ! implicit real(kind=8) (a-h,o-z)
5864 ! include 'DIMENSIONS'
5865 ! include 'COMMON.SBRIDGE'
5866 ! include 'COMMON.CHAIN'
5867 ! include 'COMMON.DERIV'
5868 ! include 'COMMON.LOCAL'
5869 ! include 'COMMON.INTERACT'
5870 ! include 'COMMON.VAR'
5871 ! include 'COMMON.IOUNITS'
5872 real(kind=8),dimension(3) :: erij,dcosom1,dcosom2,gg
5874 integer :: i,j,itypi,itypj,k
5875 real(kind=8) :: eij,rij,rrij,xi,yi,zi,dxi,dyi,dzi,dsci_inv,&
5876 xj,yj,zj,dxj,dyj,dzj,om1,om2,om12,deltad,dscj_inv,&
5877 deltat1,deltat2,deltat12,ed,pom1,pom2,eom1,eom2,eom12,&
5880 itypi=iabs(itype(i,1))
5884 call to_box(xi,yi,zi)
5886 dxi=dc_norm(1,nres+i)
5887 dyi=dc_norm(2,nres+i)
5888 dzi=dc_norm(3,nres+i)
5889 ! dsci_inv=dsc_inv(itypi)
5890 dsci_inv=vbld_inv(nres+i)
5891 itypj=iabs(itype(j,1))
5892 ! dscj_inv=dsc_inv(itypj)
5893 dscj_inv=vbld_inv(nres+j)
5897 call to_box(xj,yj,zj)
5898 xj=boxshift(xj-xi,boxxsize)
5899 yj=boxshift(yj-yi,boxysize)
5900 zj=boxshift(zj-zi,boxzsize)
5901 dxj=dc_norm(1,nres+j)
5902 dyj=dc_norm(2,nres+j)
5903 dzj=dc_norm(3,nres+j)
5904 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
5909 om1=dxi*erij(1)+dyi*erij(2)+dzi*erij(3)
5910 om2=dxj*erij(1)+dyj*erij(2)+dzj*erij(3)
5911 om12=dxi*dxj+dyi*dyj+dzi*dzj
5913 dcosom1(k)=rij*(dc_norm(k,nres+i)-om1*erij(k))
5914 dcosom2(k)=rij*(dc_norm(k,nres+j)-om2*erij(k))
5920 deltat12=om2-om1+2.0d0
5922 eij=akcm*deltad*deltad+akth*(deltat1*deltat1+deltat2*deltat2) &
5923 +akct*deltad*deltat12 &
5924 +v1ss*cosphi+v2ss*cosphi*cosphi+v3ss*cosphi*cosphi*cosphi+ebr
5925 ! write(iout,*) i,j,"rij",rij,"d0cm",d0cm," akcm",akcm," akth",akth, &
5926 ! " akct",akct," deltad",deltad," deltat",deltat1,deltat2, &
5927 ! " deltat12",deltat12," eij",eij
5928 ed=2*akcm*deltad+akct*deltat12
5930 pom2=v1ss+2*v2ss*cosphi+3*v3ss*cosphi*cosphi
5931 eom1=-2*akth*deltat1-pom1-om2*pom2
5932 eom2= 2*akth*deltat2+pom1-om1*pom2
5935 ggk=ed*erij(k)+eom1*dcosom1(k)+eom2*dcosom2(k)
5936 ghpbx(k,i)=ghpbx(k,i)-ggk &
5937 +(eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,nres+i)) &
5938 +eom1*(erij(k)-om1*dc_norm(k,nres+i)))*dsci_inv
5939 ghpbx(k,j)=ghpbx(k,j)+ggk &
5940 +(eom12*(dc_norm(k,nres+i)-om12*dc_norm(k,nres+j)) &
5941 +eom2*(erij(k)-om2*dc_norm(k,nres+j)))*dscj_inv
5942 ghpbc(k,i)=ghpbc(k,i)-ggk
5943 ghpbc(k,j)=ghpbc(k,j)+ggk
5946 ! Calculate the components of the gradient in DC and X
5950 !grad ghpbc(l,k)=ghpbc(l,k)+gg(l)
5954 end subroutine ssbond_ene
5955 !-----------------------------------------------------------------------------
5956 subroutine ebond(estr)
5958 ! Evaluate the energy of stretching of the CA-CA and CA-SC virtual bonds
5960 ! implicit real(kind=8) (a-h,o-z)
5961 ! include 'DIMENSIONS'
5962 ! include 'COMMON.LOCAL'
5963 ! include 'COMMON.GEO'
5964 ! include 'COMMON.INTERACT'
5965 ! include 'COMMON.DERIV'
5966 ! include 'COMMON.VAR'
5967 ! include 'COMMON.CHAIN'
5968 ! include 'COMMON.IOUNITS'
5969 ! include 'COMMON.NAMES'
5970 ! include 'COMMON.FFIELD'
5971 ! include 'COMMON.CONTROL'
5972 ! include 'COMMON.SETUP'
5973 real(kind=8),dimension(3) :: u,ud
5975 integer :: i,j,iti,nbi,k
5976 real(kind=8) :: estr,estr1,diff,uprod,usum,usumsqder,&
5981 ! if (.not.allocated(gradb)) allocate(gradb(3,nres)) !(3,maxres)
5982 ! if (.not.allocated(gradbx)) allocate(gradbx(3,nres)) !(3,maxres)
5984 do i=ibondp_start,ibondp_end
5986 if (itype(i-1).eq.ntyp1 .or. itype(i).eq.ntyp1) cycle
5987 diff = vbld(i)-vbldp0
5989 if (itype(i-1,1).eq.ntyp1 .and. itype(i,1).eq.ntyp1) cycle
5990 if (itype(i-1,1).eq.ntyp1 .or. itype(i,1).eq.ntyp1) then
5991 !C estr1=estr1+gnmr1(vbld(i),-1.0d0,distchainmax)
5993 !C gradb(j,i-1)=gnmr1prim(vbld(i),-1.0d0,distchainmax) &
5994 !C *dc(j,i-1)/vbld(i)
5996 !C if (energy_dec) write(iout,*) &
5997 !C "estr1",i,gnmr1(vbld(i),-1.0d0,distchainmax)
5998 diff = vbld(i)-vbldpDUM
6000 diff = vbld(i)-vbldp0
6003 if (energy_dec) write (iout,'(a7,i5,4f7.3)') &
6004 "estr bb",i,vbld(i),vbldp0,diff,AKP*diff*diff
6007 gradb(j,i-1)=AKP*diff*dc(j,i-1)/vbld(i)
6009 ! write (iout,'(i5,3f10.5)') i,(gradb(j,i-1),j=1,3)
6012 estr=0.5d0*AKP*estr+estr1
6013 ! print *,"estr_bb",estr,AKP
6015 ! 09/18/07 AL: multimodal bond potential based on AM1 CA-SC PMF's included
6017 do i=ibond_start,ibond_end
6018 iti=iabs(itype(i,1))
6019 if (iti.eq.0) print *,"WARNING WRONG SETTTING",i
6020 if (iti.ne.10 .and. iti.ne.ntyp1) then
6023 diff=vbld(i+nres)-vbldsc0(1,iti)
6024 if (energy_dec) write (iout,*) &
6025 "estr sc",i,iti,vbld(i+nres),vbldsc0(1,iti),diff,&
6026 AKSC(1,iti),AKSC(1,iti)*diff*diff
6027 estr=estr+0.5d0*AKSC(1,iti)*diff*diff
6028 ! print *,"estr_sc",estr
6030 gradbx(j,i)=AKSC(1,iti)*diff*dc(j,i+nres)/vbld(i+nres)
6034 diff=vbld(i+nres)-vbldsc0(j,iti)
6035 ud(j)=aksc(j,iti)*diff
6036 u(j)=abond0(j,iti)+0.5d0*ud(j)*diff
6050 uprod2=uprod2*u(k)*u(k)
6054 usumsqder=usumsqder+ud(j)*uprod2
6056 estr=estr+uprod/usum
6057 ! print *,"estr_sc",estr,i
6059 if (energy_dec) write (iout,*) &
6060 "estr sc",i,iti,vbld(i+nres),vbldsc0(1,iti),diff,&
6061 AKSC(1,iti),uprod/usum
6063 gradbx(j,i)=usumsqder/(usum*usum)*dc(j,i+nres)/vbld(i+nres)
6069 end subroutine ebond
6071 !-----------------------------------------------------------------------------
6072 subroutine ebend(etheta)
6074 ! Evaluate the virtual-bond-angle energy given the virtual-bond dihedral
6075 ! angles gamma and its derivatives in consecutive thetas and gammas.
6078 ! implicit real(kind=8) (a-h,o-z)
6079 ! include 'DIMENSIONS'
6080 ! include 'COMMON.LOCAL'
6081 ! include 'COMMON.GEO'
6082 ! include 'COMMON.INTERACT'
6083 ! include 'COMMON.DERIV'
6084 ! include 'COMMON.VAR'
6085 ! include 'COMMON.CHAIN'
6086 ! include 'COMMON.IOUNITS'
6087 ! include 'COMMON.NAMES'
6088 ! include 'COMMON.FFIELD'
6089 ! include 'COMMON.CONTROL'
6090 !el real(kind=8) :: term1,term2,termm,diffak,ratak,&
6091 !el ak,aktc,termpre,termexp,sigc,sig0i,time11,time12,sigcsq,&
6092 !el delthe0,sig0inv,sigtc,sigsqtc,delthec
6094 !el common /calcthet/ term1,term2,termm,diffak,ratak,&
6095 !el ak,aktc,termpre,termexp,sigc,sig0i,time11,time12,sigcsq,&
6096 !el delthe0,sig0inv,sigtc,sigsqtc,delthec,it
6098 integer :: i,k,ichir1,ichir2,itype1,ichir11,ichir12,itype2,&
6100 real(kind=8) :: etheta,delta,ss,ssd,phii,phii1,thet_pred_mean,&
6101 athetk,bthetk,dthett,dthetg1,dthetg2,f0,fprim0,E_tc0,fprim_tc0,&
6102 f1,fprim1,E_tc1,ethetai,E_theta,E_tc
6103 real(kind=8),dimension(2) :: y,z
6106 ! time11=dexp(-2*time)
6109 ! write (*,'(a,i2)') 'EBEND ICG=',icg
6110 do i=ithet_start,ithet_end
6111 if (itype(i-1,1).eq.ntyp1) cycle
6112 ! Zero the energy function and its derivative at 0 or pi.
6113 call splinthet(theta(i),0.5d0*delta,ss,ssd)
6115 ichir1=isign(1,itype(i-2,1))
6116 ichir2=isign(1,itype(i,1))
6117 if (itype(i-2,1).eq.10) ichir1=isign(1,itype(i-1,1))
6118 if (itype(i,1).eq.10) ichir2=isign(1,itype(i-1,1))
6119 if (itype(i-1,1).eq.10) then
6120 itype1=isign(10,itype(i-2,1))
6121 ichir11=isign(1,itype(i-2,1))
6122 ichir12=isign(1,itype(i-2,1))
6123 itype2=isign(10,itype(i,1))
6124 ichir21=isign(1,itype(i,1))
6125 ichir22=isign(1,itype(i,1))
6128 if (i.gt.3 .and. itype(i-2,1).ne.ntyp1) then
6131 if (phii.ne.phii) phii=150.0
6141 if (i.lt.nres .and. itype(i,1).ne.ntyp1) then
6144 if (phii1.ne.phii1) phii1=150.0
6156 ! Calculate the "mean" value of theta from the part of the distribution
6157 ! dependent on the adjacent virtual-bond-valence angles (gamma1 & gamma2).
6158 ! In following comments this theta will be referred to as t_c.
6159 thet_pred_mean=0.0d0
6161 athetk=athet(k,it,ichir1,ichir2)
6162 bthetk=bthet(k,it,ichir1,ichir2)
6164 athetk=athet(k,itype1,ichir11,ichir12)
6165 bthetk=bthet(k,itype2,ichir21,ichir22)
6167 thet_pred_mean=thet_pred_mean+athetk*y(k)+bthetk*z(k)
6169 dthett=thet_pred_mean*ssd
6170 thet_pred_mean=thet_pred_mean*ss+a0thet(it)
6171 ! Derivatives of the "mean" values in gamma1 and gamma2.
6172 dthetg1=(-athet(1,it,ichir1,ichir2)*y(2) &
6173 +athet(2,it,ichir1,ichir2)*y(1))*ss
6174 dthetg2=(-bthet(1,it,ichir1,ichir2)*z(2) &
6175 +bthet(2,it,ichir1,ichir2)*z(1))*ss
6177 dthetg1=(-athet(1,itype1,ichir11,ichir12)*y(2) &
6178 +athet(2,itype1,ichir11,ichir12)*y(1))*ss
6179 dthetg2=(-bthet(1,itype2,ichir21,ichir22)*z(2) &
6180 +bthet(2,itype2,ichir21,ichir22)*z(1))*ss
6182 if (theta(i).gt.pi-delta) then
6183 call theteng(pi-delta,thet_pred_mean,theta0(it),f0,fprim0,&
6185 call mixder(pi-delta,thet_pred_mean,theta0(it),fprim_tc0)
6186 call theteng(pi,thet_pred_mean,theta0(it),f1,fprim1,E_tc1)
6187 call spline1(theta(i),pi-delta,delta,f0,f1,fprim0,ethetai,&
6189 call spline2(theta(i),pi-delta,delta,E_tc0,E_tc1,fprim_tc0,&
6191 else if (theta(i).lt.delta) then
6192 call theteng(delta,thet_pred_mean,theta0(it),f0,fprim0,E_tc0)
6193 call theteng(0.0d0,thet_pred_mean,theta0(it),f1,fprim1,E_tc1)
6194 call spline1(theta(i),delta,-delta,f0,f1,fprim0,ethetai,&
6196 call mixder(delta,thet_pred_mean,theta0(it),fprim_tc0)
6197 call spline2(theta(i),delta,-delta,E_tc0,E_tc1,fprim_tc0,&
6200 call theteng(theta(i),thet_pred_mean,theta0(it),ethetai,&
6203 etheta=etheta+ethetai
6204 if (energy_dec) write (iout,'(a6,i5,0pf7.3)') &
6206 if (i.gt.3) gloc(i-3,icg)=gloc(i-3,icg)+wang*E_tc*dthetg1
6207 if (i.lt.nres) gloc(i-2,icg)=gloc(i-2,icg)+wang*E_tc*dthetg2
6208 gloc(nphi+i-2,icg)=wang*(E_theta+E_tc*dthett)
6210 ! print *,ithetaconstr_start,ithetaconstr_end,"TU"
6212 ! Ufff.... We've done all this!!!
6214 end subroutine ebend
6215 !-----------------------------------------------------------------------------
6216 subroutine theteng(thetai,thet_pred_mean,theta0i,ethetai,E_theta,E_tc)
6219 ! implicit real(kind=8) (a-h,o-z)
6220 ! include 'DIMENSIONS'
6221 ! include 'COMMON.LOCAL'
6222 ! include 'COMMON.IOUNITS'
6223 !el real(kind=8) :: term1,term2,termm,diffak,ratak,&
6224 !el ak,aktc,termpre,termexp,sigc,sig0i,time11,time12,sigcsq,&
6225 !el delthe0,sig0inv,sigtc,sigsqtc,delthec
6227 real(kind=8) :: thetai,thet_pred_mean,theta0i,ethetai,E_theta,E_tc
6229 !el common /calcthet/ term1,term2,termm,diffak,ratak,&
6230 !el ak,aktc,termpre,termexp,sigc,sig0i,time11,time12,sigcsq,&
6231 !el delthe0,sig0inv,sigtc,sigsqtc,delthec,it
6233 real(kind=8) :: sig,fac,escloci0,escloci1,esclocbi0,dersc12,&
6234 esclocbi1,chuju,esclocbi,dersc02,dersc01,ss,ssd
6236 ! Calculate the contributions to both Gaussian lobes.
6237 ! 6/6/97 - Deform the Gaussians using the factor of 1/(1+time)
6238 ! The "polynomial part" of the "standard deviation" of this part of
6242 sig=sig*thet_pred_mean+polthet(j,it)
6244 ! Derivative of the "interior part" of the "standard deviation of the"
6245 ! gamma-dependent Gaussian lobe in t_c.
6246 sigtc=3*polthet(3,it)
6248 sigtc=sigtc*thet_pred_mean+j*polthet(j,it)
6251 ! Set the parameters of both Gaussian lobes of the distribution.
6252 ! "Standard deviation" of the gamma-dependent Gaussian lobe (sigtc)
6253 fac=sig*sig+sigc0(it)
6256 ! Following variable (sigsqtc) is -(1/2)d[sigma(t_c)**(-2))]/dt_c
6257 sigsqtc=-4.0D0*sigcsq*sigtc
6258 ! print *,i,sig,sigtc,sigsqtc
6259 ! Following variable (sigtc) is d[sigma(t_c)]/dt_c
6260 sigtc=-sigtc/(fac*fac)
6261 ! Following variable is sigma(t_c)**(-2)
6262 sigcsq=sigcsq*sigcsq
6264 sig0inv=1.0D0/sig0i**2
6265 delthec=thetai-thet_pred_mean
6266 delthe0=thetai-theta0i
6267 term1=-0.5D0*sigcsq*delthec*delthec
6268 term2=-0.5D0*sig0inv*delthe0*delthe0
6269 ! Following fuzzy logic is to avoid underflows in dexp and subsequent INFs and
6270 ! NaNs in taking the logarithm. We extract the largest exponent which is added
6271 ! to the energy (this being the log of the distribution) at the end of energy
6272 ! term evaluation for this virtual-bond angle.
6273 if (term1.gt.term2) then
6275 term2=dexp(term2-termm)
6279 term1=dexp(term1-termm)
6282 ! The ratio between the gamma-independent and gamma-dependent lobes of
6283 ! the distribution is a Gaussian function of thet_pred_mean too.
6284 diffak=gthet(2,it)-thet_pred_mean
6285 ratak=diffak/gthet(3,it)**2
6286 ak=dexp(gthet(1,it)-0.5D0*diffak*ratak)
6287 ! Let's differentiate it in thet_pred_mean NOW.
6289 ! Now put together the distribution terms to make complete distribution.
6290 termexp=term1+ak*term2
6291 termpre=sigc+ak*sig0i
6292 ! Contribution of the bending energy from this theta is just the -log of
6293 ! the sum of the contributions from the two lobes and the pre-exponential
6294 ! factor. Simple enough, isn't it?
6295 ethetai=(-dlog(termexp)-termm+dlog(termpre))
6296 ! NOW the derivatives!!!
6297 ! 6/6/97 Take into account the deformation.
6298 E_theta=(delthec*sigcsq*term1 &
6299 +ak*delthe0*sig0inv*term2)/termexp
6300 E_tc=((sigtc+aktc*sig0i)/termpre &
6301 -((delthec*sigcsq+delthec*delthec*sigsqtc)*term1+ &
6302 aktc*term2)/termexp)
6304 end subroutine theteng
6306 !-----------------------------------------------------------------------------
6307 subroutine ebend(etheta)
6309 ! Evaluate the virtual-bond-angle energy given the virtual-bond dihedral
6310 ! angles gamma and its derivatives in consecutive thetas and gammas.
6311 ! ab initio-derived potentials from
6312 ! Kozlowska et al., J. Phys.: Condens. Matter 19 (2007) 285203
6314 ! implicit real(kind=8) (a-h,o-z)
6315 ! include 'DIMENSIONS'
6316 ! include 'COMMON.LOCAL'
6317 ! include 'COMMON.GEO'
6318 ! include 'COMMON.INTERACT'
6319 ! include 'COMMON.DERIV'
6320 ! include 'COMMON.VAR'
6321 ! include 'COMMON.CHAIN'
6322 ! include 'COMMON.IOUNITS'
6323 ! include 'COMMON.NAMES'
6324 ! include 'COMMON.FFIELD'
6325 ! include 'COMMON.CONTROL'
6326 real(kind=8),dimension(nntheterm) :: coskt,sinkt !mmaxtheterm
6327 real(kind=8),dimension(nsingle) :: cosph1,sinph1,cosph2,sinph2 !maxsingle
6328 real(kind=8),dimension(ndouble,ndouble) :: cosph1ph2,sinph1ph2 !maxdouble,maxdouble
6329 logical :: lprn=.false., lprn1=.false.
6331 integer :: i,k,iblock,ityp1,ityp2,ityp3,l,m
6332 real(kind=8) :: dethetai,dephii,dephii1,theti2,phii,phii1,ethetai
6333 real(kind=8) :: aux,etheta,ccl,ssl,scl,csl,ethetacnstr
6334 ! local variables for constrains
6335 real(kind=8) :: difi,thetiii
6337 ! write(iout,*) "in ebend",ithet_start,ithet_end
6340 do i=ithet_start,ithet_end
6341 if (itype(i-1,1).eq.ntyp1) cycle
6342 if (itype(i-2,1).eq.ntyp1.or.itype(i,1).eq.ntyp1) cycle
6343 if (iabs(itype(i+1,1)).eq.20) iblock=2
6344 if (iabs(itype(i+1,1)).ne.20) iblock=1
6348 theti2=0.5d0*theta(i)
6349 ityp2=ithetyp((itype(i-1,1)))
6351 coskt(k)=dcos(k*theti2)
6352 sinkt(k)=dsin(k*theti2)
6354 if (i.gt.3 .and. itype(max0(i-3,1),1).ne.ntyp1) then
6357 if (phii.ne.phii) phii=150.0
6361 ityp1=ithetyp((itype(i-2,1)))
6362 ! propagation of chirality for glycine type
6364 cosph1(k)=dcos(k*phii)
6365 sinph1(k)=dsin(k*phii)
6369 ityp1=ithetyp(itype(i-2,1))
6375 if (i.lt.nres .and. itype(i+1,1).ne.ntyp1) then
6378 if (phii1.ne.phii1) phii1=150.0
6383 ityp3=ithetyp((itype(i,1)))
6385 cosph2(k)=dcos(k*phii1)
6386 sinph2(k)=dsin(k*phii1)
6390 ityp3=ithetyp(itype(i,1))
6396 ethetai=aa0thet(ityp1,ityp2,ityp3,iblock)
6399 ccl=cosph1(l)*cosph2(k-l)
6400 ssl=sinph1(l)*sinph2(k-l)
6401 scl=sinph1(l)*cosph2(k-l)
6402 csl=cosph1(l)*sinph2(k-l)
6403 cosph1ph2(l,k)=ccl-ssl
6404 cosph1ph2(k,l)=ccl+ssl
6405 sinph1ph2(l,k)=scl+csl
6406 sinph1ph2(k,l)=scl-csl
6410 write (iout,*) "i",i," ityp1",ityp1," ityp2",ityp2,&
6411 " ityp3",ityp3," theti2",theti2," phii",phii," phii1",phii1
6412 write (iout,*) "coskt and sinkt"
6414 write (iout,*) k,coskt(k),sinkt(k)
6418 ethetai=ethetai+aathet(k,ityp1,ityp2,ityp3,iblock)*sinkt(k)
6419 dethetai=dethetai+0.5d0*k*aathet(k,ityp1,ityp2,ityp3,iblock) &
6422 write (iout,*) "k",k,&
6423 "aathet",aathet(k,ityp1,ityp2,ityp3,iblock),&
6427 write (iout,*) "cosph and sinph"
6429 write (iout,*) k,cosph1(k),sinph1(k),cosph2(k),sinph2(k)
6431 write (iout,*) "cosph1ph2 and sinph2ph2"
6434 write (iout,*) l,k,cosph1ph2(l,k),cosph1ph2(k,l),&
6435 sinph1ph2(l,k),sinph1ph2(k,l)
6438 write(iout,*) "ethetai",ethetai
6442 aux=bbthet(k,m,ityp1,ityp2,ityp3,iblock)*cosph1(k) &
6443 +ccthet(k,m,ityp1,ityp2,ityp3,iblock)*sinph1(k) &
6444 +ddthet(k,m,ityp1,ityp2,ityp3,iblock)*cosph2(k) &
6445 +eethet(k,m,ityp1,ityp2,ityp3,iblock)*sinph2(k)
6446 ethetai=ethetai+sinkt(m)*aux
6447 dethetai=dethetai+0.5d0*m*aux*coskt(m)
6448 dephii=dephii+k*sinkt(m)* &
6449 (ccthet(k,m,ityp1,ityp2,ityp3,iblock)*cosph1(k)- &
6450 bbthet(k,m,ityp1,ityp2,ityp3,iblock)*sinph1(k))
6451 dephii1=dephii1+k*sinkt(m)* &
6452 (eethet(k,m,ityp1,ityp2,ityp3,iblock)*cosph2(k)- &
6453 ddthet(k,m,ityp1,ityp2,ityp3,iblock)*sinph2(k))
6455 write (iout,*) "m",m," k",k," bbthet", &
6456 bbthet(k,m,ityp1,ityp2,ityp3,iblock)," ccthet", &
6457 ccthet(k,m,ityp1,ityp2,ityp3,iblock)," ddthet", &
6458 ddthet(k,m,ityp1,ityp2,ityp3,iblock)," eethet", &
6459 eethet(k,m,ityp1,ityp2,ityp3,iblock)," ethetai",ethetai
6463 write(iout,*) "ethetai",ethetai
6467 aux=ffthet(l,k,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(l,k)+ &
6468 ffthet(k,l,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(k,l)+ &
6469 ggthet(l,k,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(l,k)+ &
6470 ggthet(k,l,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(k,l)
6471 ethetai=ethetai+sinkt(m)*aux
6472 dethetai=dethetai+0.5d0*m*coskt(m)*aux
6473 dephii=dephii+l*sinkt(m)* &
6474 (-ffthet(l,k,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(l,k)- &
6475 ffthet(k,l,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(k,l)+ &
6476 ggthet(l,k,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(l,k)+ &
6477 ggthet(k,l,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(k,l))
6478 dephii1=dephii1+(k-l)*sinkt(m)* &
6479 (-ffthet(l,k,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(l,k)+ &
6480 ffthet(k,l,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(k,l)+ &
6481 ggthet(l,k,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(l,k)- &
6482 ggthet(k,l,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(k,l))
6484 write (iout,*) "m",m," k",k," l",l," ffthet",&
6485 ffthet(l,k,m,ityp1,ityp2,ityp3,iblock),&
6486 ffthet(k,l,m,ityp1,ityp2,ityp3,iblock)," ggthet",&
6487 ggthet(l,k,m,ityp1,ityp2,ityp3,iblock),&
6488 ggthet(k,l,m,ityp1,ityp2,ityp3,iblock),&
6490 write (iout,*) cosph1ph2(l,k)*sinkt(m),&
6491 cosph1ph2(k,l)*sinkt(m),&
6492 sinph1ph2(l,k)*sinkt(m),sinph1ph2(k,l)*sinkt(m)
6500 write (iout,'(i2,3f8.1,9h ethetai ,f10.5)') &
6501 i,theta(i)*rad2deg,phii*rad2deg,&
6502 phii1*rad2deg,ethetai
6504 etheta=etheta+ethetai
6505 if (energy_dec) write (iout,'(a6,i5,0pf7.3)') &
6507 if (i.gt.3) gloc(i-3,icg)=gloc(i-3,icg)+wang*dephii
6508 if (i.lt.nres) gloc(i-2,icg)=gloc(i-2,icg)+wang*dephii1
6509 gloc(nphi+i-2,icg)=wang*dethetai
6511 !-----------thete constrains
6512 ! if (tor_mode.ne.2) then
6515 end subroutine ebend
6518 !-----------------------------------------------------------------------------
6519 subroutine esc(escloc)
6520 ! Calculate the local energy of a side chain and its derivatives in the
6521 ! corresponding virtual-bond valence angles THETA and the spherical angles
6525 ! implicit real(kind=8) (a-h,o-z)
6526 ! include 'DIMENSIONS'
6527 ! include 'COMMON.GEO'
6528 ! include 'COMMON.LOCAL'
6529 ! include 'COMMON.VAR'
6530 ! include 'COMMON.INTERACT'
6531 ! include 'COMMON.DERIV'
6532 ! include 'COMMON.CHAIN'
6533 ! include 'COMMON.IOUNITS'
6534 ! include 'COMMON.NAMES'
6535 ! include 'COMMON.FFIELD'
6536 ! include 'COMMON.CONTROL'
6537 real(kind=8),dimension(3) :: x,dersc,xemp,dersc0,dersc1,&
6538 ddersc0,ddummy,xtemp,temp
6539 !el real(kind=8) :: time11,time12,time112,theti
6540 real(kind=8) :: escloc,delta
6541 !el integer :: it,nlobit
6542 !el common /sccalc/ time11,time12,time112,theti,it,nlobit
6545 real(kind=8) :: escloci0,escloci1,escloci,esclocbi0,&
6546 dersc12,esclocbi1,chuju,esclocbi,dersc02,dersc01,ss,ssd
6549 ! write (iout,'(a)') 'ESC'
6550 do i=loc_start,loc_end
6552 if (it.eq.ntyp1) cycle
6553 if (it.eq.10) goto 1
6554 nlobit=nlob(iabs(it))
6555 ! print *,'i=',i,' it=',it,' nlobit=',nlobit
6556 ! write (iout,*) 'i=',i,' ssa=',ssa,' ssad=',ssad
6557 theti=theta(i+1)-pipol
6562 if (x(2).gt.pi-delta) then
6566 call enesc(xtemp,escloci0,dersc0,ddersc0,.true.)
6568 call enesc(xtemp,escloci1,dersc1,ddummy,.false.)
6569 call spline1(x(2),pi-delta,delta,escloci0,escloci1,dersc0(2),&
6571 call spline2(x(2),pi-delta,delta,dersc0(1),dersc1(1),&
6572 ddersc0(1),dersc(1))
6573 call spline2(x(2),pi-delta,delta,dersc0(3),dersc1(3),&
6574 ddersc0(3),dersc(3))
6576 call enesc_bound(xtemp,esclocbi0,dersc0,dersc12,.true.)
6578 call enesc_bound(xtemp,esclocbi1,dersc1,chuju,.false.)
6579 call spline1(x(2),pi-delta,delta,esclocbi0,esclocbi1,&
6580 dersc0(2),esclocbi,dersc02)
6581 call spline2(x(2),pi-delta,delta,dersc0(1),dersc1(1),&
6583 call splinthet(x(2),0.5d0*delta,ss,ssd)
6588 dersc(k)=ss*dersc(k)+(1.0d0-ss)*dersc0(k)
6590 dersc(2)=dersc(2)+ssd*(escloci-esclocbi)
6591 ! write (iout,*) 'i=',i,x(2)*rad2deg,escloci0,escloci,
6593 escloci=ss*escloci+(1.0d0-ss)*esclocbi
6595 ! write (iout,*) escloci
6596 else if (x(2).lt.delta) then
6600 call enesc(xtemp,escloci0,dersc0,ddersc0,.true.)
6602 call enesc(xtemp,escloci1,dersc1,ddummy,.false.)
6603 call spline1(x(2),delta,-delta,escloci0,escloci1,dersc0(2),&
6605 call spline2(x(2),delta,-delta,dersc0(1),dersc1(1),&
6606 ddersc0(1),dersc(1))
6607 call spline2(x(2),delta,-delta,dersc0(3),dersc1(3),&
6608 ddersc0(3),dersc(3))
6610 call enesc_bound(xtemp,esclocbi0,dersc0,dersc12,.true.)
6612 call enesc_bound(xtemp,esclocbi1,dersc1,chuju,.false.)
6613 call spline1(x(2),delta,-delta,esclocbi0,esclocbi1,&
6614 dersc0(2),esclocbi,dersc02)
6615 call spline2(x(2),delta,-delta,dersc0(1),dersc1(1),&
6620 call splinthet(x(2),0.5d0*delta,ss,ssd)
6622 dersc(k)=ss*dersc(k)+(1.0d0-ss)*dersc0(k)
6624 dersc(2)=dersc(2)+ssd*(escloci-esclocbi)
6625 ! write (iout,*) 'i=',i,x(2)*rad2deg,escloci0,escloci,
6627 escloci=ss*escloci+(1.0d0-ss)*esclocbi
6628 ! write (iout,*) escloci
6630 call enesc(x,escloci,dersc,ddummy,.false.)
6633 escloc=escloc+escloci
6634 if (energy_dec) write (iout,'(a6,i5,0pf7.3)') &
6636 ! write (iout,*) 'i=',i,' escloci=',escloci,' dersc=',dersc
6638 gloc(nphi+i-1,icg)=gloc(nphi+i-1,icg)+ &
6640 gloc(ialph(i,1),icg)=wscloc*dersc(2)
6641 gloc(ialph(i,1)+nside,icg)=wscloc*dersc(3)
6646 !-----------------------------------------------------------------------------
6647 subroutine enesc(x,escloci,dersc,ddersc,mixed)
6650 ! implicit real(kind=8) (a-h,o-z)
6651 ! include 'DIMENSIONS'
6652 ! include 'COMMON.GEO'
6653 ! include 'COMMON.LOCAL'
6654 ! include 'COMMON.IOUNITS'
6655 !el common /sccalc/ time11,time12,time112,theti,it,nlobit
6656 real(kind=8),dimension(3) :: x,z,dersc,ddersc
6657 real(kind=8),dimension(3,nlobit,-1:1) :: Ax !(3,maxlob,-1:1)
6658 real(kind=8),dimension(nlobit,-1:1) :: contr !(maxlob,-1:1)
6659 real(kind=8) :: escloci
6662 integer :: j,iii,l,k !el,it,nlobit
6663 real(kind=8) :: escloc_i,x3,Axk,expfac,emin !el,theti,&
6664 !el time11,time12,time112
6665 ! write (iout,*) 'it=',it,' nlobit=',nlobit
6669 if (mixed) ddersc(j)=0.0d0
6673 ! Because of periodicity of the dependence of the SC energy in omega we have
6674 ! to add up the contributions from x(3)-2*pi, x(3), and x(3+2*pi).
6675 ! To avoid underflows, first compute & store the exponents.
6683 z(k)=x(k)-censc(k,j,it)
6688 Axk=Axk+gaussc(l,k,j,it)*z(l)
6694 expfac=expfac+Ax(k,j,iii)*z(k)
6702 ! As in the case of ebend, we want to avoid underflows in exponentiation and
6703 ! subsequent NaNs and INFs in energy calculation.
6704 ! Find the largest exponent
6708 if (emin.gt.contr(j,iii)) emin=contr(j,iii)
6712 !d print *,'it=',it,' emin=',emin
6714 ! Compute the contribution to SC energy and derivatives
6719 adexp=bsc(j,iabs(it))-0.5D0*contr(j,iii)+emin
6720 if(adexp.ne.adexp) adexp=1.0
6723 expfac=dexp(bsc(j,iabs(it))-0.5D0*contr(j,iii)+emin)
6725 !d print *,'j=',j,' expfac=',expfac
6726 escloc_i=escloc_i+expfac
6728 dersc(k)=dersc(k)+Ax(k,j,iii)*expfac
6732 ddersc(k)=ddersc(k)+(-Ax(2,j,iii)*Ax(k,j,iii) &
6733 +gaussc(k,2,j,it))*expfac
6740 dersc(1)=dersc(1)/cos(theti)**2
6741 ddersc(1)=ddersc(1)/cos(theti)**2
6744 escloci=-(dlog(escloc_i)-emin)
6746 dersc(j)=dersc(j)/escloc_i
6750 ddersc(j)=(ddersc(j)/escloc_i+dersc(2)*dersc(j))
6754 end subroutine enesc
6755 !-----------------------------------------------------------------------------
6756 subroutine enesc_bound(x,escloci,dersc,dersc12,mixed)
6759 ! implicit real(kind=8) (a-h,o-z)
6760 ! include 'DIMENSIONS'
6761 ! include 'COMMON.GEO'
6762 ! include 'COMMON.LOCAL'
6763 ! include 'COMMON.IOUNITS'
6764 !el common /sccalc/ time11,time12,time112,theti,it,nlobit
6765 real(kind=8),dimension(3) :: x,z,dersc
6766 real(kind=8),dimension(3,nlobit) :: Ax !(3,maxlob)
6767 real(kind=8),dimension(nlobit) :: contr !(maxlob)
6768 real(kind=8) :: escloci,dersc12,emin
6771 integer :: j,k,l !el,it,nlobit
6772 real(kind=8) :: escloc_i,Axk,expfac !el,time11,time12,time112,theti
6782 z(k)=x(k)-censc(k,j,it)
6788 Axk=Axk+gaussc(l,k,j,it)*z(l)
6794 expfac=expfac+Ax(k,j)*z(k)
6799 ! As in the case of ebend, we want to avoid underflows in exponentiation and
6800 ! subsequent NaNs and INFs in energy calculation.
6801 ! Find the largest exponent
6804 if (emin.gt.contr(j)) emin=contr(j)
6808 ! Compute the contribution to SC energy and derivatives
6812 expfac=dexp(bsc(j,iabs(it))-0.5D0*contr(j)+emin)
6813 escloc_i=escloc_i+expfac
6815 dersc(k)=dersc(k)+Ax(k,j)*expfac
6817 if (mixed) dersc12=dersc12+(-Ax(2,j)*Ax(1,j) &
6818 +gaussc(1,2,j,it))*expfac
6822 dersc(1)=dersc(1)/cos(theti)**2
6823 dersc12=dersc12/cos(theti)**2
6824 escloci=-(dlog(escloc_i)-emin)
6826 dersc(j)=dersc(j)/escloc_i
6828 if (mixed) dersc12=(dersc12/escloc_i+dersc(2)*dersc(1))
6830 end subroutine enesc_bound
6832 !-----------------------------------------------------------------------------
6833 subroutine esc(escloc)
6834 ! Calculate the local energy of a side chain and its derivatives in the
6835 ! corresponding virtual-bond valence angles THETA and the spherical angles
6836 ! ALPHA and OMEGA derived from AM1 all-atom calculations.
6837 ! added by Urszula Kozlowska. 07/11/2007
6840 ! implicit real(kind=8) (a-h,o-z)
6841 ! include 'DIMENSIONS'
6842 ! include 'COMMON.GEO'
6843 ! include 'COMMON.LOCAL'
6844 ! include 'COMMON.VAR'
6845 ! include 'COMMON.SCROT'
6846 ! include 'COMMON.INTERACT'
6847 ! include 'COMMON.DERIV'
6848 ! include 'COMMON.CHAIN'
6849 ! include 'COMMON.IOUNITS'
6850 ! include 'COMMON.NAMES'
6851 ! include 'COMMON.FFIELD'
6852 ! include 'COMMON.CONTROL'
6853 ! include 'COMMON.VECTORS'
6854 real(kind=8),dimension(3) :: x_prime,y_prime,z_prime
6855 real(kind=8),dimension(65) :: x
6856 real(kind=8) :: sumene,dsc_i,dp2_i,xx,yy,zz,sumene1,sumene2,sumene3,&
6857 sumene4,s1,s1_6,s2,s2_6,de_dxx,de_dyy,de_dzz,de_dt
6858 real(kind=8) :: s1_t,s1_6_t,s2_t,s2_6_t
6859 real(kind=8),dimension(3) :: dXX_Ci1,dYY_Ci1,dZZ_Ci1,dXX_Ci,dYY_Ci,&
6860 dZZ_Ci,dXX_XYZ,dYY_XYZ,dZZ_XYZ,dt_dCi,dt_dCi1
6862 integer :: i,j,k !el,it,nlobit
6863 real(kind=8) :: cosfac2,sinfac2,cosfac,sinfac,escloc,delta
6864 !el real(kind=8) :: time11,time12,time112,theti
6865 !el common /sccalc/ time11,time12,time112,theti,it,nlobit
6866 real(kind=8) :: dscp1,dscp2,pom_s1,pom_s16,pom_s2,pom_s26,&
6867 pom,pom_dx,pom_dy,pom_dt1,pom_dt2,pom1,pom2,&
6868 sumene1x,sumene2x,sumene3x,sumene4x,&
6869 sumene1y,sumene2y,sumene3y,sumene4y,cossc,cossc1,&
6872 real(kind=8) :: aincr,xxsave,sumenep,de_dxx_num,yysave,&
6873 de_dyy_num,zzsave,de_dzz_num,costsave,sintsave,&
6876 ! if (.not.allocated(gsclocx)) allocate(gsclocx(3,nres)) !(3,maxres)
6880 do i=loc_start,loc_end
6881 if (itype(i,1).eq.ntyp1) cycle
6882 costtab(i+1) =dcos(theta(i+1))
6883 sinttab(i+1) =dsqrt(1-costtab(i+1)*costtab(i+1))
6884 cost2tab(i+1)=dsqrt(0.5d0*(1.0d0+costtab(i+1)))
6885 sint2tab(i+1)=dsqrt(0.5d0*(1.0d0-costtab(i+1)))
6886 cosfac2=0.5d0/(1.0d0+costtab(i+1))
6887 cosfac=dsqrt(cosfac2)
6888 sinfac2=0.5d0/(1.0d0-costtab(i+1))
6889 sinfac=dsqrt(sinfac2)
6891 if (it.eq.10) goto 1
6893 ! Compute the axes of tghe local cartesian coordinates system; store in
6894 ! x_prime, y_prime and z_prime
6901 ! write(2,*) "dc_norm", dc_norm(1,i+nres),dc_norm(2,i+nres),
6902 ! & dc_norm(3,i+nres)
6904 x_prime(j) = (dc_norm(j,i) - dc_norm(j,i-1))*cosfac
6905 y_prime(j) = (dc_norm(j,i) + dc_norm(j,i-1))*sinfac
6908 z_prime(j) = -uz(j,i-1)*dsign(1.0d0,dfloat(itype(i,1)))
6911 ! write (2,*) "x_prime",(x_prime(j),j=1,3)
6912 ! write (2,*) "y_prime",(y_prime(j),j=1,3)
6913 ! write (2,*) "z_prime",(z_prime(j),j=1,3)
6914 ! write (2,*) "xx",scalar(x_prime(1),x_prime(1)),
6915 ! & " xy",scalar(x_prime(1),y_prime(1)),
6916 ! & " xz",scalar(x_prime(1),z_prime(1)),
6917 ! & " yy",scalar(y_prime(1),y_prime(1)),
6918 ! & " yz",scalar(y_prime(1),z_prime(1)),
6919 ! & " zz",scalar(z_prime(1),z_prime(1))
6921 ! Transform the unit vector of the ith side-chain centroid, dC_norm(*,i),
6922 ! to local coordinate system. Store in xx, yy, zz.
6928 xx = xx + x_prime(j)*dc_norm(j,i+nres)
6929 yy = yy + y_prime(j)*dc_norm(j,i+nres)
6930 zz = zz + z_prime(j)*dc_norm(j,i+nres)
6937 ! Compute the energy of the ith side cbain
6939 ! write (2,*) "xx",xx," yy",yy," zz",zz
6942 x(j) = sc_parmin(j,it)
6945 !c diagnostics - remove later
6947 yy1 = dsin(alph(2))*dcos(omeg(2))
6948 zz1 = -dsign(1.0,dfloat(itype(i,1)))*dsin(alph(2))*dsin(omeg(2))
6949 write(2,'(3f8.1,3f9.3,1x,3f9.3)') &
6950 alph(2)*rad2deg,omeg(2)*rad2deg,theta(3)*rad2deg,xx,yy,zz,&
6952 !," --- ", xx_w,yy_w,zz_w
6955 sumene1= x(1)+ x(2)*xx+ x(3)*yy+ x(4)*zz+ x(5)*xx**2 &
6956 + x(6)*yy**2+ x(7)*zz**2+ x(8)*xx*zz+ x(9)*xx*yy &
6958 sumene2= x(11) + x(12)*xx + x(13)*yy + x(14)*zz + x(15)*xx**2 &
6959 + x(16)*yy**2 + x(17)*zz**2 + x(18)*xx*zz + x(19)*xx*yy &
6961 sumene3= x(21) +x(22)*xx +x(23)*yy +x(24)*zz +x(25)*xx**2 &
6962 +x(26)*yy**2 +x(27)*zz**2 +x(28)*xx*zz +x(29)*xx*yy &
6963 +x(30)*yy*zz +x(31)*xx**3 +x(32)*yy**3 +x(33)*zz**3 &
6964 +x(34)*(xx**2)*yy +x(35)*(xx**2)*zz +x(36)*(yy**2)*xx &
6965 +x(37)*(yy**2)*zz +x(38)*(zz**2)*xx +x(39)*(zz**2)*yy &
6967 sumene4= x(41) +x(42)*xx +x(43)*yy +x(44)*zz +x(45)*xx**2 &
6968 +x(46)*yy**2 +x(47)*zz**2 +x(48)*xx*zz +x(49)*xx*yy &
6969 +x(50)*yy*zz +x(51)*xx**3 +x(52)*yy**3 +x(53)*zz**3 &
6970 +x(54)*(xx**2)*yy +x(55)*(xx**2)*zz +x(56)*(yy**2)*xx &
6971 +x(57)*(yy**2)*zz +x(58)*(zz**2)*xx +x(59)*(zz**2)*yy &
6973 dsc_i = 0.743d0+x(61)
6975 dscp1=dsqrt(dsc_i**2+dp2_i**2-2*dsc_i*dp2_i &
6976 *(xx*cost2tab(i+1)+yy*sint2tab(i+1)))
6977 dscp2=dsqrt(dsc_i**2+dp2_i**2-2*dsc_i*dp2_i &
6978 *(xx*cost2tab(i+1)-yy*sint2tab(i+1)))
6979 s1=(1+x(63))/(0.1d0 + dscp1)
6980 s1_6=(1+x(64))/(0.1d0 + dscp1**6)
6981 s2=(1+x(65))/(0.1d0 + dscp2)
6982 s2_6=(1+x(65))/(0.1d0 + dscp2**6)
6983 sumene = ( sumene3*sint2tab(i+1) + sumene1)*(s1+s1_6) &
6984 + (sumene4*cost2tab(i+1) +sumene2)*(s2+s2_6)
6985 ! write(2,'(i2," sumene",7f9.3)') i,sumene1,sumene2,sumene3,
6987 ! & dscp1,dscp2,sumene
6988 ! sumene = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
6989 escloc = escloc + sumene
6990 if (energy_dec) write (2,*) "i",i," itype",itype(i,1)," it",it, &
6991 " escloc",sumene,escloc,it,itype(i,1)
6992 ! write (2,*) "i",i," escloc",sumene,escloc,it,itype(i,1)
6997 ! This section to check the numerical derivatives of the energy of ith side
6998 ! chain in xx, yy, zz, and theta. Use the -DDEBUG compiler option or insert
6999 ! #define DEBUG in the code to turn it on.
7001 write (2,*) "sumene =",sumene
7005 write (2,*) xx,yy,zz
7006 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
7007 de_dxx_num=(sumenep-sumene)/aincr
7009 write (2,*) "xx+ sumene from enesc=",sumenep
7012 write (2,*) xx,yy,zz
7013 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
7014 de_dyy_num=(sumenep-sumene)/aincr
7016 write (2,*) "yy+ sumene from enesc=",sumenep
7019 write (2,*) xx,yy,zz
7020 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
7021 de_dzz_num=(sumenep-sumene)/aincr
7023 write (2,*) "zz+ sumene from enesc=",sumenep
7024 costsave=cost2tab(i+1)
7025 sintsave=sint2tab(i+1)
7026 cost2tab(i+1)=dcos(0.5d0*(theta(i+1)+aincr))
7027 sint2tab(i+1)=dsin(0.5d0*(theta(i+1)+aincr))
7028 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
7029 de_dt_num=(sumenep-sumene)/aincr
7030 write (2,*) " t+ sumene from enesc=",sumenep
7031 cost2tab(i+1)=costsave
7032 sint2tab(i+1)=sintsave
7033 ! End of diagnostics section.
7036 ! Compute the gradient of esc
7038 ! zz=zz*dsign(1.0,dfloat(itype(i,1)))
7039 pom_s1=(1.0d0+x(63))/(0.1d0 + dscp1)**2
7040 pom_s16=6*(1.0d0+x(64))/(0.1d0 + dscp1**6)**2
7041 pom_s2=(1.0d0+x(65))/(0.1d0 + dscp2)**2
7042 pom_s26=6*(1.0d0+x(65))/(0.1d0 + dscp2**6)**2
7043 pom_dx=dsc_i*dp2_i*cost2tab(i+1)
7044 pom_dy=dsc_i*dp2_i*sint2tab(i+1)
7045 pom_dt1=-0.5d0*dsc_i*dp2_i*(xx*sint2tab(i+1)-yy*cost2tab(i+1))
7046 pom_dt2=-0.5d0*dsc_i*dp2_i*(xx*sint2tab(i+1)+yy*cost2tab(i+1))
7047 pom1=(sumene3*sint2tab(i+1)+sumene1) &
7048 *(pom_s1/dscp1+pom_s16*dscp1**4)
7049 pom2=(sumene4*cost2tab(i+1)+sumene2) &
7050 *(pom_s2/dscp2+pom_s26*dscp2**4)
7051 sumene1x=x(2)+2*x(5)*xx+x(8)*zz+ x(9)*yy
7052 sumene3x=x(22)+2*x(25)*xx+x(28)*zz+x(29)*yy+3*x(31)*xx**2 &
7053 +2*x(34)*xx*yy +2*x(35)*xx*zz +x(36)*(yy**2) +x(38)*(zz**2) &
7055 sumene2x=x(12)+2*x(15)*xx+x(18)*zz+ x(19)*yy
7056 sumene4x=x(42)+2*x(45)*xx +x(48)*zz +x(49)*yy +3*x(51)*xx**2 &
7057 +2*x(54)*xx*yy+2*x(55)*xx*zz+x(56)*(yy**2)+x(58)*(zz**2) &
7059 de_dxx =(sumene1x+sumene3x*sint2tab(i+1))*(s1+s1_6) &
7060 +(sumene2x+sumene4x*cost2tab(i+1))*(s2+s2_6) &
7063 write(2,*), "de_dxx = ", de_dxx,de_dxx_num,itype(i,1)
7066 sumene1y=x(3) + 2*x(6)*yy + x(9)*xx + x(10)*zz
7067 sumene3y=x(23) +2*x(26)*yy +x(29)*xx +x(30)*zz +3*x(32)*yy**2 &
7068 +x(34)*(xx**2) +2*x(36)*yy*xx +2*x(37)*yy*zz +x(39)*(zz**2) &
7070 sumene2y=x(13) + 2*x(16)*yy + x(19)*xx + x(20)*zz
7071 sumene4y=x(43)+2*x(46)*yy+x(49)*xx +x(50)*zz &
7072 +3*x(52)*yy**2+x(54)*xx**2+2*x(56)*yy*xx +2*x(57)*yy*zz &
7073 +x(59)*zz**2 +x(60)*xx*zz
7074 de_dyy =(sumene1y+sumene3y*sint2tab(i+1))*(s1+s1_6) &
7075 +(sumene2y+sumene4y*cost2tab(i+1))*(s2+s2_6) &
7078 write(2,*), "de_dyy = ", de_dyy,de_dyy_num,itype(i,1)
7081 de_dzz =(x(24) +2*x(27)*zz +x(28)*xx +x(30)*yy &
7082 +3*x(33)*zz**2 +x(35)*xx**2 +x(37)*yy**2 +2*x(38)*zz*xx &
7083 +2*x(39)*zz*yy +x(40)*xx*yy)*sint2tab(i+1)*(s1+s1_6) &
7084 +(x(4) + 2*x(7)*zz+ x(8)*xx + x(10)*yy)*(s1+s1_6) &
7085 +(x(44)+2*x(47)*zz +x(48)*xx +x(50)*yy +3*x(53)*zz**2 &
7086 +x(55)*xx**2 +x(57)*(yy**2)+2*x(58)*zz*xx +2*x(59)*zz*yy &
7087 +x(60)*xx*yy)*cost2tab(i+1)*(s2+s2_6) &
7088 + ( x(14) + 2*x(17)*zz+ x(18)*xx + x(20)*yy)*(s2+s2_6)
7090 write(2,*), "de_dzz = ", de_dzz,de_dzz_num,itype(i,1)
7093 de_dt = 0.5d0*sumene3*cost2tab(i+1)*(s1+s1_6) &
7094 -0.5d0*sumene4*sint2tab(i+1)*(s2+s2_6) &
7095 +pom1*pom_dt1+pom2*pom_dt2
7097 write(2,*), "de_dt = ", de_dt,de_dt_num,itype(i,1)
7101 cossc=scalar(dc_norm(1,i),dc_norm(1,i+nres))
7102 cossc1=scalar(dc_norm(1,i-1),dc_norm(1,i+nres))
7103 cosfac2xx=cosfac2*xx
7104 sinfac2yy=sinfac2*yy
7106 dt_dCi(k) = -(dc_norm(k,i-1)+costtab(i+1)*dc_norm(k,i))* &
7108 dt_dCi1(k)= -(dc_norm(k,i)+costtab(i+1)*dc_norm(k,i-1))* &
7110 pom=(dC_norm(k,i+nres)-cossc*dC_norm(k,i))*vbld_inv(i+1)
7111 pom1=(dC_norm(k,i+nres)-cossc1*dC_norm(k,i-1))*vbld_inv(i)
7112 ! write (iout,*) "i",i," k",k," pom",pom," pom1",pom1,
7113 ! & " dt_dCi",dt_dCi(k)," dt_dCi1",dt_dCi1(k)
7114 ! write (iout,*) "dC_norm",(dC_norm(j,i),j=1,3),
7115 ! & (dC_norm(j,i-1),j=1,3)," vbld_inv",vbld_inv(i+1),vbld_inv(i)
7116 dXX_Ci(k)=pom*cosfac-dt_dCi(k)*cosfac2xx
7117 dXX_Ci1(k)=-pom1*cosfac-dt_dCi1(k)*cosfac2xx
7118 dYY_Ci(k)=pom*sinfac+dt_dCi(k)*sinfac2yy
7119 dYY_Ci1(k)=pom1*sinfac+dt_dCi1(k)*sinfac2yy
7123 dZZ_Ci(k)=dZZ_Ci(k)-uzgrad(j,k,2,i-1) &
7124 *dsign(1.0d0,dfloat(itype(i,1)))*dC_norm(j,i+nres)
7125 dZZ_Ci1(k)=dZZ_Ci1(k)-uzgrad(j,k,1,i-1) &
7126 *dsign(1.0d0,dfloat(itype(i,1)))*dC_norm(j,i+nres)
7129 dXX_XYZ(k)=vbld_inv(i+nres)*(x_prime(k)-xx*dC_norm(k,i+nres))
7130 dYY_XYZ(k)=vbld_inv(i+nres)*(y_prime(k)-yy*dC_norm(k,i+nres))
7131 dZZ_XYZ(k)=vbld_inv(i+nres)* &
7132 (z_prime(k)-zz*dC_norm(k,i+nres))
7134 dt_dCi(k) = -dt_dCi(k)/sinttab(i+1)
7135 dt_dCi1(k)= -dt_dCi1(k)/sinttab(i+1)
7139 dXX_Ctab(k,i)=dXX_Ci(k)
7140 dXX_C1tab(k,i)=dXX_Ci1(k)
7141 dYY_Ctab(k,i)=dYY_Ci(k)
7142 dYY_C1tab(k,i)=dYY_Ci1(k)
7143 dZZ_Ctab(k,i)=dZZ_Ci(k)
7144 dZZ_C1tab(k,i)=dZZ_Ci1(k)
7145 dXX_XYZtab(k,i)=dXX_XYZ(k)
7146 dYY_XYZtab(k,i)=dYY_XYZ(k)
7147 dZZ_XYZtab(k,i)=dZZ_XYZ(k)
7151 ! write (iout,*) "k",k," dxx_ci1",dxx_ci1(k)," dyy_ci1",
7152 ! & dyy_ci1(k)," dzz_ci1",dzz_ci1(k)
7153 ! write (iout,*) "k",k," dxx_ci",dxx_ci(k)," dyy_ci",
7154 ! & dyy_ci(k)," dzz_ci",dzz_ci(k)
7155 ! write (iout,*) "k",k," dt_dci",dt_dci(k)," dt_dci",
7157 ! write (iout,*) "k",k," dxx_XYZ",dxx_XYZ(k)," dyy_XYZ",
7158 ! & dyy_XYZ(k)," dzz_XYZ",dzz_XYZ(k)
7159 gscloc(k,i-1)=gscloc(k,i-1)+de_dxx*dxx_ci1(k) &
7160 +de_dyy*dyy_ci1(k)+de_dzz*dzz_ci1(k)+de_dt*dt_dCi1(k)
7161 gscloc(k,i)=gscloc(k,i)+de_dxx*dxx_Ci(k) &
7162 +de_dyy*dyy_Ci(k)+de_dzz*dzz_Ci(k)+de_dt*dt_dCi(k)
7163 gsclocx(k,i)= de_dxx*dxx_XYZ(k) &
7164 +de_dyy*dyy_XYZ(k)+de_dzz*dzz_XYZ(k)
7166 ! write(iout,*) "ENERGY GRAD = ", (gscloc(k,i-1),k=1,3),
7167 ! & (gscloc(k,i),k=1,3),(gsclocx(k,i),k=1,3)
7169 ! to check gradient call subroutine check_grad
7175 !-----------------------------------------------------------------------------
7176 real(kind=8) function enesc(x,xx,yy,zz,cost2,sint2)
7178 real(kind=8),dimension(65) :: x
7179 real(kind=8) :: xx,yy,zz,cost2,sint2,sumene1,sumene2,sumene3,&
7180 sumene4,sumene,dsc_i,dp2_i,dscp1,dscp2,s1,s1_6,s2,s2_6
7182 sumene1= x(1)+ x(2)*xx+ x(3)*yy+ x(4)*zz+ x(5)*xx**2 &
7183 + x(6)*yy**2+ x(7)*zz**2+ x(8)*xx*zz+ x(9)*xx*yy &
7185 sumene2= x(11) + x(12)*xx + x(13)*yy + x(14)*zz + x(15)*xx**2 &
7186 + x(16)*yy**2 + x(17)*zz**2 + x(18)*xx*zz + x(19)*xx*yy &
7188 sumene3= x(21) +x(22)*xx +x(23)*yy +x(24)*zz +x(25)*xx**2 &
7189 +x(26)*yy**2 +x(27)*zz**2 +x(28)*xx*zz +x(29)*xx*yy &
7190 +x(30)*yy*zz +x(31)*xx**3 +x(32)*yy**3 +x(33)*zz**3 &
7191 +x(34)*(xx**2)*yy +x(35)*(xx**2)*zz +x(36)*(yy**2)*xx &
7192 +x(37)*(yy**2)*zz +x(38)*(zz**2)*xx +x(39)*(zz**2)*yy &
7194 sumene4= x(41) +x(42)*xx +x(43)*yy +x(44)*zz +x(45)*xx**2 &
7195 +x(46)*yy**2 +x(47)*zz**2 +x(48)*xx*zz +x(49)*xx*yy &
7196 +x(50)*yy*zz +x(51)*xx**3 +x(52)*yy**3 +x(53)*zz**3 &
7197 +x(54)*(xx**2)*yy +x(55)*(xx**2)*zz +x(56)*(yy**2)*xx &
7198 +x(57)*(yy**2)*zz +x(58)*(zz**2)*xx +x(59)*(zz**2)*yy &
7200 dsc_i = 0.743d0+x(61)
7202 dscp1=dsqrt(dsc_i**2+dp2_i**2-2*dsc_i*dp2_i &
7203 *(xx*cost2+yy*sint2))
7204 dscp2=dsqrt(dsc_i**2+dp2_i**2-2*dsc_i*dp2_i &
7205 *(xx*cost2-yy*sint2))
7206 s1=(1+x(63))/(0.1d0 + dscp1)
7207 s1_6=(1+x(64))/(0.1d0 + dscp1**6)
7208 s2=(1+x(65))/(0.1d0 + dscp2)
7209 s2_6=(1+x(65))/(0.1d0 + dscp2**6)
7210 sumene = ( sumene3*sint2 + sumene1)*(s1+s1_6) &
7211 + (sumene4*cost2 +sumene2)*(s2+s2_6)
7216 !-----------------------------------------------------------------------------
7217 subroutine gcont(rij,r0ij,eps0ij,delta,fcont,fprimcont)
7219 ! This procedure calculates two-body contact function g(rij) and its derivative:
7222 ! g(rij) = esp0ij*(-0.9375*x+0.625*x**3-0.1875*x**5) ! -1 =< x =< 1
7225 ! where x=(rij-r0ij)/delta
7227 ! rij - interbody distance, r0ij - contact distance, eps0ij - contact energy
7230 real(kind=8) :: rij,r0ij,eps0ij,fcont,fprimcont
7231 real(kind=8) :: x,x2,x4,delta
7235 if (x.lt.-1.0D0) then
7238 else if (x.le.1.0D0) then
7241 fcont=eps0ij*(x*(-0.9375D0+0.6250D0*x2-0.1875D0*x4)+0.5D0)
7242 fprimcont=eps0ij * (-0.9375D0+1.8750D0*x2-0.9375D0*x4)/delta
7248 end subroutine gcont
7249 !-----------------------------------------------------------------------------
7250 subroutine splinthet(theti,delta,ss,ssder)
7251 ! implicit real(kind=8) (a-h,o-z)
7252 ! include 'DIMENSIONS'
7253 ! include 'COMMON.VAR'
7254 ! include 'COMMON.GEO'
7255 real(kind=8) :: theti,delta,ss,ssder
7256 real(kind=8) :: thetup,thetlow
7259 if (theti.gt.pipol) then
7260 call gcont(theti,thetup,1.0d0,delta,ss,ssder)
7262 call gcont(-theti,-thetlow,1.0d0,delta,ss,ssder)
7266 end subroutine splinthet
7267 !-----------------------------------------------------------------------------
7268 subroutine spline1(x,x0,delta,f0,f1,fprim0,f,fprim)
7270 real(kind=8) :: x,x0,delta,f0,f1,fprim0,f,fprim
7271 real(kind=8) :: ksi,ksi2,ksi3,a1,a2,a3
7272 a1=fprim0*delta/(f1-f0)
7278 f=f0+(f1-f0)*ksi*(a1+ksi*(a2+a3*ksi))
7279 fprim=(f1-f0)/delta*(a1+ksi*(2*a2+3*ksi*a3))
7281 end subroutine spline1
7282 !-----------------------------------------------------------------------------
7283 subroutine spline2(x,x0,delta,f0x,f1x,fprim0x,fx)
7285 real(kind=8) :: x,x0,delta,f0x,f1x,fprim0x,fx
7286 real(kind=8) :: ksi,ksi2,ksi3,a1,a2,a3
7291 a2=3*(f1x-f0x)-2*fprim0x*delta
7292 a3=fprim0x*delta-2*(f1x-f0x)
7293 fx=f0x+a1*ksi+a2*ksi2+a3*ksi3
7295 end subroutine spline2
7296 !-----------------------------------------------------------------------------
7298 !-----------------------------------------------------------------------------
7299 subroutine etor(etors,edihcnstr)
7300 ! implicit real(kind=8) (a-h,o-z)
7301 ! include 'DIMENSIONS'
7302 ! include 'COMMON.VAR'
7303 ! include 'COMMON.GEO'
7304 ! include 'COMMON.LOCAL'
7305 ! include 'COMMON.TORSION'
7306 ! include 'COMMON.INTERACT'
7307 ! include 'COMMON.DERIV'
7308 ! include 'COMMON.CHAIN'
7309 ! include 'COMMON.NAMES'
7310 ! include 'COMMON.IOUNITS'
7311 ! include 'COMMON.FFIELD'
7312 ! include 'COMMON.TORCNSTR'
7313 ! include 'COMMON.CONTROL'
7314 real(kind=8) :: etors,edihcnstr
7318 real(kind=8) :: phii,fac,etors_ii
7320 ! Set lprn=.true. for debugging
7324 do i=iphi_start,iphi_end
7326 if (itype(i-2,1).eq.ntyp1.or. itype(i-1,1).eq.ntyp1 &
7327 .or. itype(i,1).eq.ntyp1) cycle
7328 itori=itortyp(itype(i-2,1))
7329 itori1=itortyp(itype(i-1,1))
7332 ! Proline-Proline pair is a special case...
7333 if (itori.eq.3 .and. itori1.eq.3) then
7334 if (phii.gt.-dwapi3) then
7336 fac=1.0D0/(1.0D0-cosphi)
7337 etorsi=v1(1,3,3)*fac
7338 etorsi=etorsi+etorsi
7339 etors=etors+etorsi-v1(1,3,3)
7340 if (energy_dec) etors_ii=etors_ii+etorsi-v1(1,3,3)
7341 gloci=gloci-3*fac*etorsi*dsin(3*phii)
7344 v1ij=v1(j+1,itori,itori1)
7345 v2ij=v2(j+1,itori,itori1)
7348 etors=etors+v1ij*cosphi+v2ij*sinphi+dabs(v1ij)+dabs(v2ij)
7349 if (energy_dec) etors_ii=etors_ii+ &
7350 v2ij*sinphi+dabs(v1ij)+dabs(v2ij)
7351 gloci=gloci+j*(v2ij*cosphi-v1ij*sinphi)
7355 v1ij=v1(j,itori,itori1)
7356 v2ij=v2(j,itori,itori1)
7359 etors=etors+v1ij*cosphi+v2ij*sinphi+dabs(v1ij)+dabs(v2ij)
7360 if (energy_dec) etors_ii=etors_ii+ &
7361 v1ij*cosphi+v2ij*sinphi+dabs(v1ij)+dabs(v2ij)
7362 gloci=gloci+j*(v2ij*cosphi-v1ij*sinphi)
7365 if (energy_dec) write (iout,'(a6,i5,0pf7.3)') &
7368 write (iout,'(2(a3,2x,i3,2x),2i3,6f8.3/26x,6f8.3/)') &
7369 restyp(itype(i-2,1),1),i-2,restyp(itype(i-1,1),1),i-1,itori,itori1,&
7370 (v1(j,itori,itori1),j=1,6),(v2(j,itori,itori1),j=1,6)
7371 gloc(i-3,icg)=gloc(i-3,icg)+wtor*gloci
7372 ! write (iout,*) 'i=',i,' gloc=',gloc(i-3,icg)
7374 ! 6/20/98 - dihedral angle constraints
7377 itori=idih_constr(i)
7380 if (difi.gt.drange(i)) then
7382 edihcnstr=edihcnstr+0.25d0*ftors(i)*difi**4
7383 gloc(itori-3,icg)=gloc(itori-3,icg)+ftors(i)*difi**3
7384 else if (difi.lt.-drange(i)) then
7386 edihcnstr=edihcnstr+0.25d0*ftors(i)*difi**4
7387 gloc(itori-3,icg)=gloc(itori-3,icg)+ftors(i)*difi**3
7389 ! write (iout,'(2i5,2f8.3,2e14.5)') i,itori,rad2deg*phii,
7390 ! & rad2deg*difi,0.25d0*ftors*difi**4,gloc(itori-3,icg)
7392 ! write (iout,*) 'edihcnstr',edihcnstr
7395 !-----------------------------------------------------------------------------
7396 subroutine etor_d(etors_d)
7397 real(kind=8) :: etors_d
7400 end subroutine etor_d
7401 !-----------------------------------------------------------------------------
7402 !c LICZENIE WIEZOW Z ROWNANIA ENERGII MODELLERA
7403 subroutine e_modeller(ehomology_constr)
7404 real(kind=8) :: ehomology_constr
7405 ehomology_constr=0.0d0
7406 write (iout,*) "!!!!!UWAGA, JESTEM W DZIWNEJ PETLI, TEST!!!!!"
7408 end subroutine e_modeller
7409 C !!!!!!!! NIE CZYTANE !!!!!!!!!!!
7411 !-----------------------------------------------------------------------------
7412 subroutine etor(etors)
7413 ! implicit real(kind=8) (a-h,o-z)
7414 ! include 'DIMENSIONS'
7415 ! include 'COMMON.VAR'
7416 ! include 'COMMON.GEO'
7417 ! include 'COMMON.LOCAL'
7418 ! include 'COMMON.TORSION'
7419 ! include 'COMMON.INTERACT'
7420 ! include 'COMMON.DERIV'
7421 ! include 'COMMON.CHAIN'
7422 ! include 'COMMON.NAMES'
7423 ! include 'COMMON.IOUNITS'
7424 ! include 'COMMON.FFIELD'
7425 ! include 'COMMON.TORCNSTR'
7426 ! include 'COMMON.CONTROL'
7427 real(kind=8) :: etors,edihcnstr
7430 integer :: i,j,iblock,itori,itori1
7431 real(kind=8) :: phii,gloci,v1ij,v2ij,cosphi,sinphi,&
7432 vl1ij,vl2ij,vl3ij,pom1,difi,etors_ii,pom
7433 ! Set lprn=.true. for debugging
7437 do i=iphi_start,iphi_end
7438 if (itype(i-2,1).eq.ntyp1 .or. itype(i-1,1).eq.ntyp1 &
7439 .or. itype(i-3,1).eq.ntyp1 &
7440 .or. itype(i,1).eq.ntyp1) cycle
7442 if (iabs(itype(i,1)).eq.20) then
7447 itori=itortyp(itype(i-2,1))
7448 itori1=itortyp(itype(i-1,1))
7451 ! Regular cosine and sine terms
7452 do j=1,nterm(itori,itori1,iblock)
7453 v1ij=v1(j,itori,itori1,iblock)
7454 v2ij=v2(j,itori,itori1,iblock)
7457 etors=etors+v1ij*cosphi+v2ij*sinphi
7458 if (energy_dec) etors_ii=etors_ii+ &
7459 v1ij*cosphi+v2ij*sinphi
7460 gloci=gloci+j*(v2ij*cosphi-v1ij*sinphi)
7464 ! E = SUM ----------------------------------- - v1
7465 ! [v2 cos(phi/2)+v3 sin(phi/2)]^2 + 1
7467 cosphi=dcos(0.5d0*phii)
7468 sinphi=dsin(0.5d0*phii)
7469 do j=1,nlor(itori,itori1,iblock)
7470 vl1ij=vlor1(j,itori,itori1)
7471 vl2ij=vlor2(j,itori,itori1)
7472 vl3ij=vlor3(j,itori,itori1)
7473 pom=vl2ij*cosphi+vl3ij*sinphi
7474 pom1=1.0d0/(pom*pom+1.0d0)
7475 etors=etors+vl1ij*pom1
7476 if (energy_dec) etors_ii=etors_ii+ &
7479 gloci=gloci+vl1ij*(vl3ij*cosphi-vl2ij*sinphi)*pom
7481 ! Subtract the constant term
7482 etors=etors-v0(itori,itori1,iblock)
7483 if (energy_dec) write (iout,'(a6,i5,0pf7.3)') &
7484 'etor',i,etors_ii-v0(itori,itori1,iblock)
7486 write (iout,'(2(a3,2x,i3,2x),2i3,6f8.3/26x,6f8.3/)') &
7487 restyp(itype(i-2,1),1),i-2,restyp(itype(i-1,1),1),i-1,itori,itori1,&
7488 (v1(j,itori,itori1,iblock),j=1,6),&
7489 (v2(j,itori,itori1,iblock),j=1,6)
7490 gloc(i-3,icg)=gloc(i-3,icg)+wtor*gloci
7491 ! write (iout,*) 'i=',i,' gloc=',gloc(i-3,icg)
7493 ! 6/20/98 - dihedral angle constraints
7496 !C The rigorous attempt to derive energy function
7497 !-------------------------------------------------------------------------------------------
7498 subroutine etor_kcc(etors)
7499 double precision c1(0:maxval_kcc),c2(0:maxval_kcc)
7500 real(kind=8) :: etors,glocig,glocit1,glocit2,sinthet1,&
7501 sinthet2,costhet1,costhet2,sint1t2,sint1t2n,phii,sinphi,cosphi,&
7502 sint1t2n1,sumvalc,gradvalct1,gradvalct2,sumvals,gradvalst1,&
7505 integer :: i,j,itori,itori1,nval,k,l
7507 if (lprn) write (iout,*) "etor_kcc tor_mode",tor_mode
7509 do i=iphi_start,iphi_end
7510 !C ANY TWO ARE DUMMY ATOMS in row CYCLE
7511 !c if (((itype(i-3).eq.ntyp1).and.(itype(i-2).eq.ntyp1)).or.
7512 !c & ((itype(i-2).eq.ntyp1).and.(itype(i-1).eq.ntyp1)) .or.
7513 !c & ((itype(i-1).eq.ntyp1).and.(itype(i).eq.ntyp1))) cycle
7514 if (itype(i-2,1).eq.ntyp1.or. itype(i-1,1).eq.ntyp1 &
7515 .or. itype(i,1).eq.ntyp1 .or. itype(i-3,1).eq.ntyp1) cycle
7516 itori=itortyp(itype(i-2,1))
7517 itori1=itortyp(itype(i-1,1))
7522 !C to avoid multiple devision by 2
7523 !c theti22=0.5d0*theta(i)
7524 !C theta 12 is the theta_1 /2
7525 !C theta 22 is theta_2 /2
7526 !c theti12=0.5d0*theta(i-1)
7527 !C and appropriate sinus function
7528 sinthet1=dsin(theta(i-1))
7529 sinthet2=dsin(theta(i))
7530 costhet1=dcos(theta(i-1))
7531 costhet2=dcos(theta(i))
7532 !C to speed up lets store its mutliplication
7533 sint1t2=sinthet2*sinthet1
7535 !C \sum_{i=1}^n (sin(theta_1) * sin(theta_2))^n * (c_n* cos(n*gamma)
7536 !C +d_n*sin(n*gamma)) *
7537 !C \sum_{i=1}^m (1+a_m*Tb_m(cos(theta_1 /2))+b_m*Tb_m(cos(theta_2 /2)))
7538 !C we have two sum 1) Non-Chebyshev which is with n and gamma
7539 nval=nterm_kcc_Tb(itori,itori1)
7545 c1(j)=c1(j-1)*costhet1
7546 c2(j)=c2(j-1)*costhet2
7550 do j=1,nterm_kcc(itori,itori1)
7554 sint1t2n=sint1t2n*sint1t2
7560 sumvalc=sumvalc+v1_kcc(l,k,j,itori1,itori)*c1(k)*c2(l)
7561 gradvalct1=gradvalct1+ &
7562 (k-1)*v1_kcc(l,k,j,itori1,itori)*c1(k-1)*c2(l)
7563 gradvalct2=gradvalct2+ &
7564 (l-1)*v1_kcc(l,k,j,itori1,itori)*c1(k)*c2(l-1)
7567 gradvalct1=-gradvalct1*sinthet1
7568 gradvalct2=-gradvalct2*sinthet2
7574 sumvals=sumvals+v2_kcc(l,k,j,itori1,itori)*c1(k)*c2(l)
7575 gradvalst1=gradvalst1+ &
7576 (k-1)*v2_kcc(l,k,j,itori1,itori)*c1(k-1)*c2(l)
7577 gradvalst2=gradvalst2+ &
7578 (l-1)*v2_kcc(l,k,j,itori1,itori)*c1(k)*c2(l-1)
7581 gradvalst1=-gradvalst1*sinthet1
7582 gradvalst2=-gradvalst2*sinthet2
7583 if (lprn) write (iout,*)j,"sumvalc",sumvalc," sumvals",sumvals
7584 etori=etori+sint1t2n*(sumvalc*cosphi+sumvals*sinphi)
7585 !C glocig is the gradient local i site in gamma
7586 glocig=glocig+j*sint1t2n*(sumvals*cosphi-sumvalc*sinphi)
7587 !C now gradient over theta_1
7588 glocit1=glocit1+sint1t2n*(gradvalct1*cosphi+gradvalst1*sinphi)&
7589 +j*sint1t2n1*costhet1*sinthet2*(sumvalc*cosphi+sumvals*sinphi)
7590 glocit2=glocit2+sint1t2n*(gradvalct2*cosphi+gradvalst2*sinphi)&
7591 +j*sint1t2n1*sinthet1*costhet2*(sumvalc*cosphi+sumvals*sinphi)
7594 gloc(i-3,icg)=gloc(i-3,icg)+wtor*glocig
7595 !C derivative over theta1
7596 gloc(nphi+i-3,icg)=gloc(nphi+i-3,icg)+wtor*glocit1
7597 !C now derivative over theta2
7598 gloc(nphi+i-2,icg)=gloc(nphi+i-2,icg)+wtor*glocit2
7600 write (iout,*) i-2,i-1,itype(i-2,1),itype(i-1,1),itori,itori1,&
7601 theta(i-1)*rad2deg,theta(i)*rad2deg,phii*rad2deg,etori
7602 write (iout,*) "c1",(c1(k),k=0,nval), &
7603 " c2",(c2(k),k=0,nval)
7607 end subroutine etor_kcc
7608 !------------------------------------------------------------------------------
7610 subroutine etor_constr(edihcnstr)
7611 real(kind=8) :: etors,edihcnstr
7614 integer :: i,j,iblock,itori,itori1
7615 real(kind=8) :: phii,gloci,v1ij,v2ij,cosphi,sinphi,&
7616 vl1ij,vl2ij,vl3ij,pom1,difi,etors_ii,pom,&
7617 gaudih_i,gauder_i,s,cos_i,dexpcos_i
7619 if (raw_psipred) then
7620 do i=idihconstr_start,idihconstr_end
7621 itori=idih_constr(i)
7623 gaudih_i=vpsipred(1,i)
7627 cos_i=(1.0d0-dcos(phii-phibound(j,i)))/s**2
7628 dexpcos_i=dexp(-cos_i*cos_i)
7629 gaudih_i=gaudih_i+vpsipred(j+1,i)*dexpcos_i
7630 gauder_i=gauder_i-2*vpsipred(j+1,i)*dsin(phii-phibound(j,i)) &
7631 *cos_i*dexpcos_i/s**2
7633 edihcnstr=edihcnstr-wdihc*dlog(gaudih_i)
7634 gloc(itori-3,icg)=gloc(itori-3,icg)-wdihc*gauder_i/gaudih_i
7636 write (iout,'(2i5,f8.3,f8.5,2(f8.5,2f8.3),f10.5)') &
7637 i,itori,phii*rad2deg,vpsipred(1,i),vpsipred(2,i),&
7638 phibound(1,i)*rad2deg,sdihed(1,i)*rad2deg,vpsipred(3,i),&
7639 phibound(2,i)*rad2deg,sdihed(2,i)*rad2deg,&
7640 -wdihc*dlog(gaudih_i)
7644 do i=idihconstr_start,idihconstr_end
7645 itori=idih_constr(i)
7647 difi=pinorm(phii-phi0(i))
7648 if (difi.gt.drange(i)) then
7650 edihcnstr=edihcnstr+0.25d0*ftors(i)*difi**4
7651 gloc(itori-3,icg)=gloc(itori-3,icg)+ftors(i)*difi**3
7652 else if (difi.lt.-drange(i)) then
7654 edihcnstr=edihcnstr+0.25d0*ftors(i)*difi**4
7655 gloc(itori-3,icg)=gloc(itori-3,icg)+ftors(i)*difi**3
7665 end subroutine etor_constr
7666 !-----------------------------------------------------------------------------
7667 subroutine etor_d(etors_d)
7668 ! 6/23/01 Compute double torsional energy
7669 ! implicit real(kind=8) (a-h,o-z)
7670 ! include 'DIMENSIONS'
7671 ! include 'COMMON.VAR'
7672 ! include 'COMMON.GEO'
7673 ! include 'COMMON.LOCAL'
7674 ! include 'COMMON.TORSION'
7675 ! include 'COMMON.INTERACT'
7676 ! include 'COMMON.DERIV'
7677 ! include 'COMMON.CHAIN'
7678 ! include 'COMMON.NAMES'
7679 ! include 'COMMON.IOUNITS'
7680 ! include 'COMMON.FFIELD'
7681 ! include 'COMMON.TORCNSTR'
7682 real(kind=8) :: etors_d,etors_d_ii
7685 integer :: i,j,k,l,itori,itori1,itori2,iblock
7686 real(kind=8) :: phii,phii1,gloci1,gloci2,&
7687 v1cij,v1sij,v2cij,v2sij,cosphi1,sinphi1,&
7688 sinphi2,cosphi2,v1cdij,v2cdij,v1sdij,v2sdij,&
7689 cosphi1p2,cosphi1m2,sinphi1p2,sinphi1m2
7690 ! Set lprn=.true. for debugging
7694 ! write(iout,*) "a tu??"
7695 do i=iphid_start,iphid_end
7697 if (itype(i-2,1).eq.ntyp1 .or. itype(i-1,1).eq.ntyp1 &
7698 .or. itype(i-3,1).eq.ntyp1 &
7699 .or. itype(i,1).eq.ntyp1 .or. itype(i+1,1).eq.ntyp1) cycle
7700 itori=itortyp(itype(i-2,1))
7701 itori1=itortyp(itype(i-1,1))
7702 itori2=itortyp(itype(i,1))
7708 if (iabs(itype(i+1,1)).eq.20) iblock=2
7710 ! Regular cosine and sine terms
7711 do j=1,ntermd_1(itori,itori1,itori2,iblock)
7712 v1cij=v1c(1,j,itori,itori1,itori2,iblock)
7713 v1sij=v1s(1,j,itori,itori1,itori2,iblock)
7714 v2cij=v1c(2,j,itori,itori1,itori2,iblock)
7715 v2sij=v1s(2,j,itori,itori1,itori2,iblock)
7716 cosphi1=dcos(j*phii)
7717 sinphi1=dsin(j*phii)
7718 cosphi2=dcos(j*phii1)
7719 sinphi2=dsin(j*phii1)
7720 etors_d=etors_d+v1cij*cosphi1+v1sij*sinphi1+ &
7721 v2cij*cosphi2+v2sij*sinphi2
7722 if (energy_dec) etors_d_ii=etors_d_ii+ &
7723 v1cij*cosphi1+v1sij*sinphi1+v2cij*cosphi2+v2sij*sinphi2
7724 gloci1=gloci1+j*(v1sij*cosphi1-v1cij*sinphi1)
7725 gloci2=gloci2+j*(v2sij*cosphi2-v2cij*sinphi2)
7727 do k=2,ntermd_2(itori,itori1,itori2,iblock)
7729 v1cdij = v2c(k,l,itori,itori1,itori2,iblock)
7730 v2cdij = v2c(l,k,itori,itori1,itori2,iblock)
7731 v1sdij = v2s(k,l,itori,itori1,itori2,iblock)
7732 v2sdij = v2s(l,k,itori,itori1,itori2,iblock)
7733 cosphi1p2=dcos(l*phii+(k-l)*phii1)
7734 cosphi1m2=dcos(l*phii-(k-l)*phii1)
7735 sinphi1p2=dsin(l*phii+(k-l)*phii1)
7736 sinphi1m2=dsin(l*phii-(k-l)*phii1)
7737 etors_d=etors_d+v1cdij*cosphi1p2+v2cdij*cosphi1m2+ &
7738 v1sdij*sinphi1p2+v2sdij*sinphi1m2
7739 if (energy_dec) etors_d_ii=etors_d_ii+ &
7740 v1cdij*cosphi1p2+v2cdij*cosphi1m2+ &
7741 v1sdij*sinphi1p2+v2sdij*sinphi1m2
7742 gloci1=gloci1+l*(v1sdij*cosphi1p2+v2sdij*cosphi1m2 &
7743 -v1cdij*sinphi1p2-v2cdij*sinphi1m2)
7744 gloci2=gloci2+(k-l)*(v1sdij*cosphi1p2-v2sdij*cosphi1m2 &
7745 -v1cdij*sinphi1p2+v2cdij*sinphi1m2)
7748 if (energy_dec) write (iout,'(a6,i5,0pf7.3)') &
7749 'etor_d',i,etors_d_ii
7750 gloc(i-3,icg)=gloc(i-3,icg)+wtor_d*gloci1
7751 gloc(i-2,icg)=gloc(i-2,icg)+wtor_d*gloci2
7754 end subroutine etor_d
7756 !----------------------------------------------------------------------------
7757 !----------------------------------------------------------------------------
7758 subroutine e_modeller(ehomology_constr)
7760 ! include 'DIMENSIONS'
7761 use MD_data, only: iset
7762 real(kind=8) :: ehomology_constr
7763 integer nnn,i,ii,j,k,ijk,jik,ki,kk,nexl,irec,l
7764 integer katy, odleglosci, test7
7765 real(kind=8) :: odleg, odleg2, odleg3, kat, kat2, kat3
7766 real(kind=8) :: Eval,Erot,min_odl
7767 real(kind=8),dimension(constr_homology) :: distance,distancek,godl,dih_diff,gdih, &
7769 uscdiffk,guscdiff2,guscdiff3,&
7774 ! FP - 30/10/2014 Temporary specifications for homology restraints
7776 real(kind=8) :: utheta_i,gutheta_i,sum_gtheta,sum_sgtheta,&
7778 real(kind=8), dimension (nres) :: guscdiff,usc_diff
7779 real(kind=8) :: sum_godl,sgodl,grad_odl3,ggodl,sum_gdih,&
7780 sum_guscdiff,sum_sgdih,sgdih,grad_dih3,usc_diff_i,dxx,dyy,dzz,&
7781 betai,sum_sgodl,dij,max_template
7782 ! real(kind=8) :: dist,pinorm
7784 ! include 'COMMON.SBRIDGE'
7785 ! include 'COMMON.CHAIN'
7786 ! include 'COMMON.GEO'
7787 ! include 'COMMON.DERIV'
7788 ! include 'COMMON.LOCAL'
7789 ! include 'COMMON.INTERACT'
7790 ! include 'COMMON.VAR'
7791 ! include 'COMMON.IOUNITS'
7792 ! include 'COMMON.MD'
7793 ! include 'COMMON.CONTROL'
7794 ! include 'COMMON.HOMOLOGY'
7795 ! include 'COMMON.QRESTR'
7797 ! From subroutine Econstr_back
7799 ! include 'COMMON.NAMES'
7800 ! include 'COMMON.TIME1'
7805 distancek(i)=9999999.9
7811 ! Pseudo-energy and gradient from homology restraints (MODELLER-like
7813 ! AL 5/2/14 - Introduce list of restraints
7814 ! write(iout,*) "waga_theta",waga_theta,"waga_d",waga_d
7816 write(iout,*) "------- dist restrs start -------"
7818 do ii = link_start_homo,link_end_homo
7822 ! write (iout,*) "dij(",i,j,") =",dij
7824 do k=1,constr_homology
7825 ! write(iout,*) ii,k,i,j,l_homo(k,ii),dij,odl(k,ii)
7826 if(.not.l_homo(k,ii)) then
7830 distance(k)=odl(k,ii)-dij
7831 ! write (iout,*) "distance(",k,") =",distance(k)
7833 ! For Gaussian-type Urestr
7835 distancek(k)=0.5d0*distance(k)**2*sigma_odl(k,ii) ! waga_dist rmvd from Gaussian argument
7836 ! write (iout,*) "sigma_odl(",k,ii,") =",sigma_odl(k,ii)
7837 ! write (iout,*) "distancek(",k,") =",distancek(k)
7838 ! distancek(k)=0.5d0*waga_dist*distance(k)**2*sigma_odl(k,ii)
7840 ! For Lorentzian-type Urestr
7842 if (waga_dist.lt.0.0d0) then
7843 sigma_odlir(k,ii)=dsqrt(1/sigma_odl(k,ii))
7844 distancek(k)=distance(k)**2/(sigma_odlir(k,ii)* &
7845 (distance(k)**2+sigma_odlir(k,ii)**2))
7849 ! min_odl=minval(distancek)
7853 do kk=1,constr_homology
7854 if(l_homo(kk,ii)) then
7855 min_odl=distancek(kk)
7859 do kk=1,constr_homology
7860 if (l_homo(kk,ii) .and. distancek(kk).lt.min_odl) &
7861 min_odl=distancek(kk)
7865 ! write (iout,* )"min_odl",min_odl
7867 write (iout,*) "ij dij",i,j,dij
7868 write (iout,*) "distance",(distance(k),k=1,constr_homology)
7869 write (iout,*) "distancek",(distancek(k),k=1,constr_homology)
7870 write (iout,* )"min_odl",min_odl
7875 if (waga_dist.ge.0.0d0) then
7881 do k=1,constr_homology
7882 ! Nie wiem po co to liczycie jeszcze raz!
7883 ! odleg3=-waga_dist(iset)*((distance(i,j,k)**2)/
7884 ! & (2*(sigma_odl(i,j,k))**2))
7885 if(.not.l_homo(k,ii)) cycle
7886 if (waga_dist.ge.0.0d0) then
7888 ! For Gaussian-type Urestr
7890 godl(k)=dexp(-distancek(k)+min_odl)
7891 odleg2=odleg2+godl(k)
7893 ! For Lorentzian-type Urestr
7896 odleg2=odleg2+distancek(k)
7899 !cc write(iout,779) i,j,k, "odleg2=",odleg2, "odleg3=", odleg3,
7900 !cc & "dEXP(odleg3)=", dEXP(odleg3),"distance(i,j,k)^2=",
7901 !cc & distance(i,j,k)**2, "dist(i+1,j+1)=", dist(i+1,j+1),
7902 !cc & "sigma_odl(i,j,k)=", sigma_odl(i,j,k)
7905 ! write (iout,*) "godl",(godl(k),k=1,constr_homology) ! exponents
7906 ! write (iout,*) "ii i j",ii,i,j," odleg2",odleg2 ! sum of exps
7908 write (iout,*) "godl",(godl(k),k=1,constr_homology) ! exponents
7909 write (iout,*) "ii i j",ii,i,j," odleg2",odleg2 ! sum of exps
7911 if (waga_dist.ge.0.0d0) then
7913 ! For Gaussian-type Urestr
7915 odleg=odleg-dLOG(odleg2/constr_homology)+min_odl
7917 ! For Lorentzian-type Urestr
7920 odleg=odleg+odleg2/constr_homology
7923 ! write (iout,*) "odleg",odleg ! sum of -ln-s
7926 ! For Gaussian-type Urestr
7928 if (waga_dist.ge.0.0d0) sum_godl=odleg2
7930 do k=1,constr_homology
7931 ! godl=dexp(((-(distance(i,j,k)**2)/(2*(sigma_odl(i,j,k))**2))
7932 ! & *waga_dist)+min_odl
7933 ! sgodl=-godl(k)*distance(k)*sigma_odl(k,ii)*waga_dist
7935 if(.not.l_homo(k,ii)) cycle
7936 if (waga_dist.ge.0.0d0) then
7937 ! For Gaussian-type Urestr
7939 sgodl=-godl(k)*distance(k)*sigma_odl(k,ii) ! waga_dist rmvd
7941 ! For Lorentzian-type Urestr
7944 sgodl=-2*sigma_odlir(k,ii)*(distance(k)/(distance(k)**2+ &
7945 sigma_odlir(k,ii)**2)**2)
7947 sum_sgodl=sum_sgodl+sgodl
7949 ! sgodl2=sgodl2+sgodl
7950 ! write(iout,*) i, j, k, distance(i,j,k), "W GRADIENCIE1"
7951 ! write(iout,*) "constr_homology=",constr_homology
7952 ! write(iout,*) i, j, k, "TEST K"
7954 ! print *, "ok",iset
7955 if (waga_dist.ge.0.0d0) then
7957 ! For Gaussian-type Urestr
7959 grad_odl3=waga_homology(iset)*waga_dist &
7960 *sum_sgodl/(sum_godl*dij)
7963 ! For Lorentzian-type Urestr
7966 ! Original grad expr modified by analogy w Gaussian-type Urestr grad
7967 ! grad_odl3=-waga_homology(iset)*waga_dist*sum_sgodl
7968 grad_odl3=-waga_homology(iset)*waga_dist* &
7969 sum_sgodl/(constr_homology*dij)
7973 ! grad_odl3=sum_sgodl/(sum_godl*dij)
7976 ! write(iout,*) i, j, k, distance(i,j,k), "W GRADIENCIE2"
7977 ! write(iout,*) (distance(i,j,k)**2), (2*(sigma_odl(i,j,k))**2),
7978 ! & (-(distance(i,j,k)**2)/(2*(sigma_odl(i,j,k))**2))
7980 !cc write(iout,*) godl, sgodl, grad_odl3
7982 ! grad_odl=grad_odl+grad_odl3
7985 ggodl=grad_odl3*(c(jik,i)-c(jik,j))
7986 !cc write(iout,*) c(jik,i+1), c(jik,j+1), (c(jik,i+1)-c(jik,j+1))
7987 !cc write(iout,746) "GRAD_ODL_1", i, j, jik, ggodl,
7988 !cc & ghpbc(jik,i+1), ghpbc(jik,j+1)
7989 ghpbc(jik,i)=ghpbc(jik,i)+ggodl
7990 ghpbc(jik,j)=ghpbc(jik,j)-ggodl
7991 !cc write(iout,746) "GRAD_ODL_2", i, j, jik, ggodl,
7992 !cc & ghpbc(jik,i+1), ghpbc(jik,j+1)
7993 ! if (i.eq.25.and.j.eq.27) then
7994 ! write(iout,*) "jik",jik,"i",i,"j",j
7995 ! write(iout,*) "sum_sgodl",sum_sgodl,"sgodl",sgodl
7996 ! write(iout,*) "grad_odl3",grad_odl3
7997 ! write(iout,*) "c(",jik,i,")",c(jik,i),"c(",jik,j,")",c(jik,j)
7998 ! write(iout,*) "ggodl",ggodl
7999 ! write(iout,*) "ghpbc(",jik,i,")",
8000 ! & ghpbc(jik,i),"ghpbc(",jik,j,")",
8004 !cc write(iout,778)"TEST: odleg2=", odleg2, "DLOG(odleg2)=",
8005 !cc & dLOG(odleg2),"-odleg=", -odleg
8007 enddo ! ii-loop for dist
8009 write(iout,*) "------- dist restrs end -------"
8010 ! if (waga_angle.eq.1.0d0 .or. waga_theta.eq.1.0d0 .or.
8011 ! & waga_d.eq.1.0d0) call sum_gradient
8013 ! Pseudo-energy and gradient from dihedral-angle restraints from
8014 ! homology templates
8015 ! write (iout,*) "End of distance loop"
8018 ! write (iout,*) idihconstr_start_homo,idihconstr_end_homo
8020 write(iout,*) "------- dih restrs start -------"
8021 do i=idihconstr_start_homo,idihconstr_end_homo
8022 write (iout,*) "gloc_init(",i,icg,")",gloc(i,icg)
8025 do i=idihconstr_start_homo,idihconstr_end_homo
8027 ! betai=beta(i,i+1,i+2,i+3)
8029 ! write (iout,*) "betai =",betai
8030 do k=1,constr_homology
8031 dih_diff(k)=pinorm(dih(k,i)-betai)
8032 !d write (iout,'(a8,2i4,2f15.8)') "dih_diff",i,k,dih_diff(k)
8033 !d & ,sigma_dih(k,i)
8034 ! if (dih_diff(i,k).gt.3.14159) dih_diff(i,k)=
8035 ! & -(6.28318-dih_diff(i,k))
8036 ! if (dih_diff(i,k).lt.-3.14159) dih_diff(i,k)=
8037 ! & 6.28318+dih_diff(i,k)
8039 kat3=-0.5d0*dih_diff(k)**2*sigma_dih(k,i) ! waga_angle rmvd from Gaussian argument
8041 kat3=(dcos(dih_diff(k))-1)*sigma_dih(k,i) ! waga_angle rmvd from Gaussian argument
8043 ! kat3=-0.5d0*waga_angle*dih_diff(k)**2*sigma_dih(k,i)
8046 ! write(iout,*) "kat2=", kat2, "exp(kat3)=", exp(kat3)
8049 ! write (iout,*) "gdih",(gdih(k),k=1,constr_homology) ! exps
8050 ! write (iout,*) "i",i," betai",betai," kat2",kat2 ! sum of exps
8052 write (iout,*) "i",i," betai",betai," kat2",kat2
8053 write (iout,*) "gdih",(gdih(k),k=1,constr_homology)
8055 if (kat2.le.1.0d-14) cycle
8056 kat=kat-dLOG(kat2/constr_homology)
8057 ! write (iout,*) "kat",kat ! sum of -ln-s
8059 !cc write(iout,778)"TEST: kat2=", kat2, "DLOG(kat2)=",
8060 !cc & dLOG(kat2), "-kat=", -kat
8062 ! ----------------------------------------------------------------------
8064 ! ----------------------------------------------------------------------
8068 do k=1,constr_homology
8070 sgdih=-gdih(k)*dih_diff(k)*sigma_dih(k,i) ! waga_angle rmvd
8072 sgdih=-gdih(k)*dsin(dih_diff(k))*sigma_dih(k,i) ! waga_angle rmvd
8074 ! sgdih=-gdih(k)*dih_diff(k)*sigma_dih(k,i)*waga_angle
8075 sum_sgdih=sum_sgdih+sgdih
8077 ! grad_dih3=sum_sgdih/sum_gdih
8078 grad_dih3=waga_homology(iset)*waga_angle*sum_sgdih/sum_gdih
8081 ! write(iout,*)i,k,gdih,sgdih,beta(i+1,i+2,i+3,i+4),grad_dih3
8082 !cc write(iout,747) "GRAD_KAT_1", i, nphi, icg, grad_dih3,
8083 !cc & gloc(nphi+i-3,icg)
8084 gloc(i-3,icg)=gloc(i-3,icg)+grad_dih3
8086 ! write(iout,*) "i",i,"icg",icg,"gloc(",i,icg,")",gloc(i,icg)
8088 !cc write(iout,747) "GRAD_KAT_2", i, nphi, icg, grad_dih3,
8089 !cc & gloc(nphi+i-3,icg)
8091 enddo ! i-loop for dih
8093 write(iout,*) "------- dih restrs end -------"
8096 ! Pseudo-energy and gradient for theta angle restraints from
8097 ! homology templates
8098 ! FP 01/15 - inserted from econstr_local_test.F, loop structure
8102 ! For constr_homology reference structures (FP)
8104 ! Uconst_back_tot=0.0d0
8107 ! Econstr_back legacy
8109 ! do i=ithet_start,ithet_end
8112 ! do i=loc_start,loc_end
8116 duscdiffx(j,i)=0.0d0
8121 ! write (iout,*) "ithet_start =",ithet_start,"ithet_end =",ithet_end
8122 ! write (iout,*) "waga_theta",waga_theta
8123 if (waga_theta.gt.0.0d0) then
8125 write (iout,*) "usampl",usampl
8126 write(iout,*) "------- theta restrs start -------"
8127 ! do i=ithet_start,ithet_end
8128 ! write (iout,*) "gloc_init(",nphi+i,icg,")",gloc(nphi+i,icg)
8131 ! write (iout,*) "maxres",maxres,"nres",nres
8133 do i=ithet_start,ithet_end
8136 ! ii = ifrag_back(2,i,iset)-ifrag_back(1,i,iset)
8138 ! Deviation of theta angles wrt constr_homology ref structures
8140 utheta_i=0.0d0 ! argument of Gaussian for single k
8141 gutheta_i=0.0d0 ! Sum of Gaussians over constr_homology ref structures
8142 ! do j=ifrag_back(1,i,iset)+2,ifrag_back(2,i,iset) ! original loop
8143 ! over residues in a fragment
8144 ! write (iout,*) "theta(",i,")=",theta(i)
8145 do k=1,constr_homology
8147 ! dtheta_i=theta(j)-thetaref(j,iref)
8148 ! dtheta_i=thetaref(k,i)-theta(i) ! original form without indexing
8149 theta_diff(k)=thetatpl(k,i)-theta(i)
8150 !d write (iout,'(a8,2i4,2f15.8)') "theta_diff",i,k,theta_diff(k)
8151 !d & ,sigma_theta(k,i)
8154 utheta_i=-0.5d0*theta_diff(k)**2*sigma_theta(k,i) ! waga_theta rmvd from Gaussian argument
8155 ! utheta_i=-0.5d0*waga_theta*theta_diff(k)**2*sigma_theta(k,i) ! waga_theta?
8156 gtheta(k)=dexp(utheta_i) ! + min_utheta_i?
8157 gutheta_i=gutheta_i+gtheta(k) ! Sum of Gaussians (pk)
8158 ! Gradient for single Gaussian restraint in subr Econstr_back
8159 ! dutheta(j-2)=dutheta(j-2)+wfrag_back(1,i,iset)*dtheta_i/(ii-1)
8162 ! write (iout,*) "gtheta",(gtheta(k),k=1,constr_homology) ! exps
8163 ! write (iout,*) "i",i," gutheta_i",gutheta_i ! sum of exps
8166 ! Gradient for multiple Gaussian restraint
8167 sum_gtheta=gutheta_i
8169 do k=1,constr_homology
8170 ! New generalized expr for multiple Gaussian from Econstr_back
8171 sgtheta=-gtheta(k)*theta_diff(k)*sigma_theta(k,i) ! waga_theta rmvd
8173 ! sgtheta=-gtheta(k)*theta_diff(k)*sigma_theta(k,i)*waga_theta ! right functional form?
8174 sum_sgtheta=sum_sgtheta+sgtheta ! cum variable
8176 ! Final value of gradient using same var as in Econstr_back
8177 gloc(nphi+i-2,icg)=gloc(nphi+i-2,icg) &
8178 +sum_sgtheta/sum_gtheta*waga_theta &
8179 *waga_homology(iset)
8182 ! dutheta(i-2)=sum_sgtheta/sum_gtheta*waga_theta
8183 ! & *waga_homology(iset)
8184 ! dutheta(i)=sum_sgtheta/sum_gtheta
8186 ! Uconst_back=Uconst_back+waga_theta*utheta(i) ! waga_theta added as weight
8187 Eval=Eval-dLOG(gutheta_i/constr_homology)
8188 ! write (iout,*) "utheta(",i,")=",utheta(i) ! -ln of sum of exps
8189 ! write (iout,*) "Uconst_back",Uconst_back ! sum of -ln-s
8190 ! Uconst_back=Uconst_back+utheta(i)
8191 enddo ! (i-loop for theta)
8193 write(iout,*) "------- theta restrs end -------"
8197 ! Deviation of local SC geometry
8199 ! Separation of two i-loops (instructed by AL - 11/3/2014)
8201 ! write (iout,*) "loc_start =",loc_start,"loc_end =",loc_end
8202 ! write (iout,*) "waga_d",waga_d
8205 write(iout,*) "------- SC restrs start -------"
8206 write (iout,*) "Initial duscdiff,duscdiffx"
8207 do i=loc_start,loc_end
8208 write (iout,*) i,(duscdiff(jik,i),jik=1,3), &
8209 (duscdiffx(jik,i),jik=1,3)
8212 do i=loc_start,loc_end
8213 usc_diff_i=0.0d0 ! argument of Gaussian for single k
8214 guscdiff(i)=0.0d0 ! Sum of Gaussians over constr_homology ref structures
8215 ! do j=ifrag_back(1,i,iset)+1,ifrag_back(2,i,iset)-1 ! Econstr_back legacy
8216 ! write(iout,*) "xxtab, yytab, zztab"
8217 ! write(iout,'(i5,3f8.2)') i,xxtab(i),yytab(i),zztab(i)
8218 do k=1,constr_homology
8220 dxx=-xxtpl(k,i)+xxtab(i) ! Diff b/w x component of ith SC vector in model and kth ref str?
8221 ! Original sign inverted for calc of gradients (s. Econstr_back)
8222 dyy=-yytpl(k,i)+yytab(i) ! ibid y
8223 dzz=-zztpl(k,i)+zztab(i) ! ibid z
8224 ! write(iout,*) "dxx, dyy, dzz"
8225 !d write(iout,'(2i5,4f8.2)') k,i,dxx,dyy,dzz,sigma_d(k,i)
8227 usc_diff_i=-0.5d0*(dxx**2+dyy**2+dzz**2)*sigma_d(k,i) ! waga_d rmvd from Gaussian argument
8228 ! usc_diff(i)=-0.5d0*waga_d*(dxx**2+dyy**2+dzz**2)*sigma_d(k,i) ! waga_d?
8229 ! uscdiffk(k)=usc_diff(i)
8230 guscdiff2(k)=dexp(usc_diff_i) ! without min_scdiff
8231 ! write(iout,*) "i",i," k",k," sigma_d",sigma_d(k,i),
8232 ! & " guscdiff2",guscdiff2(k)
8233 guscdiff(i)=guscdiff(i)+guscdiff2(k) !Sum of Gaussians (pk)
8234 ! write (iout,'(i5,6f10.5)') j,xxtab(j),yytab(j),zztab(j),
8235 ! & xxref(j),yyref(j),zzref(j)
8240 ! Generalized expression for multiple Gaussian acc to that for a single
8241 ! Gaussian in Econstr_back as instructed by AL (FP - 03/11/2014)
8243 ! Original implementation
8244 ! sum_guscdiff=guscdiff(i)
8246 ! sum_sguscdiff=0.0d0
8247 ! do k=1,constr_homology
8248 ! sguscdiff=-guscdiff2(k)*dscdiff(k)*sigma_d(k,i)*waga_d !waga_d?
8249 ! sguscdiff=-guscdiff3(k)*dscdiff(k)*sigma_d(k,i)*waga_d ! w min_uscdiff
8250 ! sum_sguscdiff=sum_sguscdiff+sguscdiff
8253 ! Implementation of new expressions for gradient (Jan. 2015)
8255 ! grad_uscdiff=sum_sguscdiff/(sum_guscdiff*dtab) !?
8256 do k=1,constr_homology
8258 ! New calculation of dxx, dyy, and dzz corrected by AL (07/11), was missing and wrong
8259 ! before. Now the drivatives should be correct
8261 dxx=-xxtpl(k,i)+xxtab(i) ! Diff b/w x component of ith SC vector in model and kth ref str?
8262 ! Original sign inverted for calc of gradients (s. Econstr_back)
8263 dyy=-yytpl(k,i)+yytab(i) ! ibid y
8264 dzz=-zztpl(k,i)+zztab(i) ! ibid z
8265 sum_guscdiff=guscdiff2(k)* &!(dsqrt(dxx*dxx+dyy*dyy+dzz*dzz))* -> wrong!
8266 sigma_d(k,i) ! for the grad wrt r'
8267 ! sum_sguscdiff=sum_sguscdiff+sum_guscdiff
8270 ! New implementation
8271 sum_guscdiff = waga_homology(iset)*waga_d*sum_guscdiff
8273 duscdiff(jik,i-1)=duscdiff(jik,i-1)+ &
8274 sum_guscdiff*(dXX_C1tab(jik,i)*dxx+ &
8275 dYY_C1tab(jik,i)*dyy+dZZ_C1tab(jik,i)*dzz)/guscdiff(i)
8276 duscdiff(jik,i)=duscdiff(jik,i)+ &
8277 sum_guscdiff*(dXX_Ctab(jik,i)*dxx+ &
8278 dYY_Ctab(jik,i)*dyy+dZZ_Ctab(jik,i)*dzz)/guscdiff(i)
8279 duscdiffx(jik,i)=duscdiffx(jik,i)+ &
8280 sum_guscdiff*(dXX_XYZtab(jik,i)*dxx+ &
8281 dYY_XYZtab(jik,i)*dyy+dZZ_XYZtab(jik,i)*dzz)/guscdiff(i)
8285 ! write(iout,*) "jik",jik,"i",i
8286 write(iout,*) "dxx, dyy, dzz"
8287 write(iout,'(2i5,3f8.2)') k,i,dxx,dyy,dzz
8288 write(iout,*) "guscdiff2(",k,")",guscdiff2(k)
8289 write(iout,*) "sum_sguscdiff",sum_guscdiff,waga_homology(iset),waga_d
8290 write(iout,*) "dXX_Ctab(",jik,i,")",dXX_Ctab(jik,i)
8291 write(iout,*) "dYY_Ctab(",jik,i,")",dYY_Ctab(jik,i)
8292 write(iout,*) "dZZ_Ctab(",jik,i,")",dZZ_Ctab(jik,i)
8293 write(iout,*) "dXX_C1tab(",jik,i,")",dXX_C1tab(jik,i)
8294 write(iout,*) "dYY_C1tab(",jik,i,")",dYY_C1tab(jik,i)
8295 write(iout,*) "dZZ_C1tab(",jik,i,")",dZZ_C1tab(jik,i)
8296 write(iout,*) "dXX_XYZtab(",jik,i,")",dXX_XYZtab(jik,i)
8297 write(iout,*) "dYY_XYZtab(",jik,i,")",dYY_XYZtab(jik,i)
8298 write(iout,*) "dZZ_XYZtab(",jik,i,")",dZZ_XYZtab(jik,i)
8299 write(iout,*) "duscdiff(",jik,i-1,")",duscdiff(jik,i-1)
8300 write(iout,*) "duscdiff(",jik,i,")",duscdiff(jik,i)
8301 write(iout,*) "duscdiffx(",jik,i,")",duscdiffx(jik,i)
8308 ! uscdiff(i)=-dLOG(guscdiff(i)/(ii-1)) ! Weighting by (ii-1) required?
8309 ! usc_diff(i)=-dLOG(guscdiff(i)/constr_homology) ! + min_uscdiff ?
8311 ! write (iout,*) i," uscdiff",uscdiff(i)
8313 ! Put together deviations from local geometry
8315 ! Uconst_back=Uconst_back+wfrag_back(1,i,iset)*utheta(i)+
8316 ! & wfrag_back(3,i,iset)*uscdiff(i)
8317 Erot=Erot-dLOG(guscdiff(i)/constr_homology)
8318 ! write (iout,*) "usc_diff(",i,")=",usc_diff(i) ! -ln of sum of exps
8319 ! write (iout,*) "Uconst_back",Uconst_back ! cum sum of -ln-s
8320 ! Uconst_back=Uconst_back+usc_diff(i)
8322 ! Gradient of multiple Gaussian restraint (FP - 04/11/2014 - right?)
8324 ! New implment: multiplied by sum_sguscdiff
8327 enddo ! (i-loop for dscdiff)
8332 write(iout,*) "------- SC restrs end -------"
8333 write (iout,*) "------ After SC loop in e_modeller ------"
8334 do i=loc_start,loc_end
8335 write (iout,*) "i",i," gradc",(gradc(j,i,icg),j=1,3)
8336 write (iout,*) "i",i," gradx",(gradx(j,i,icg),j=1,3)
8338 if (waga_theta.eq.1.0d0) then
8339 write (iout,*) "in e_modeller after SC restr end: dutheta"
8340 do i=ithet_start,ithet_end
8341 write (iout,*) i,dutheta(i)
8344 if (waga_d.eq.1.0d0) then
8345 write (iout,*) "e_modeller after SC loop: duscdiff/x"
8347 write (iout,*) i,(duscdiff(j,i),j=1,3)
8348 write (iout,*) i,(duscdiffx(j,i),j=1,3)
8353 ! Total energy from homology restraints
8355 write (iout,*) "odleg",odleg," kat",kat
8358 ! Addition of energy of theta angle and SC local geom over constr_homologs ref strs
8360 ! ehomology_constr=odleg+kat
8362 ! For Lorentzian-type Urestr
8365 if (waga_dist.ge.0.0d0) then
8367 ! For Gaussian-type Urestr
8369 ehomology_constr=(waga_dist*odleg+waga_angle*kat+ &
8370 waga_theta*Eval+waga_d*Erot)*waga_homology(iset)
8371 ! write (iout,*) "ehomology_constr=",ehomology_constr
8375 ! For Lorentzian-type Urestr
8377 ehomology_constr=(-waga_dist*odleg+waga_angle*kat+ &
8378 waga_theta*Eval+waga_d*Erot)*waga_homology(iset)
8379 ! write (iout,*) "ehomology_constr=",ehomology_constr
8383 write (iout,*) "odleg",waga_dist,odleg," kat",waga_angle,kat, &
8384 "Eval",waga_theta,eval, &
8386 write (iout,*) "ehomology_constr",ehomology_constr
8392 748 format(a8,f12.3,a6,f12.3,a7,f12.3)
8393 747 format(a12,i4,i4,i4,f8.3,f8.3)
8394 746 format(a12,i4,i4,i4,f8.3,f8.3,f8.3)
8395 778 format(a7,1X,f10.3,1X,a4,1X,f10.3,1X,a5,1X,f10.3)
8396 779 format(i3,1X,i3,1X,i2,1X,a7,1X,f7.3,1X,a7,1X,f7.3,1X,a13,1X, &
8397 f7.3,1X,a17,1X,f9.3,1X,a10,1X,f8.3,1X,a10,1X,f8.3)
8398 end subroutine e_modeller
8400 !----------------------------------------------------------------------------
8401 subroutine ebend_kcc(etheta)
8403 double precision thybt1(maxang_kcc),etheta
8404 integer :: i,iti,j,ihelp
8405 real (kind=8) :: sinthet,costhet,sumth1thyb,gradthybt1
8406 !C Set lprn=.true. for debugging
8409 !C print *,"wchodze kcc"
8410 if (lprn) write (iout,*) "ebend_kcc tor_mode",tor_mode
8412 do i=ithet_start,ithet_end
8413 !c print *,i,itype(i-1),itype(i),itype(i-2)
8414 if ((itype(i-1,1).eq.ntyp1).or.itype(i-2,1).eq.ntyp1 &
8415 .or.itype(i,1).eq.ntyp1) cycle
8416 iti=iabs(itortyp(itype(i-1,1)))
8417 sinthet=dsin(theta(i))
8418 costhet=dcos(theta(i))
8419 do j=1,nbend_kcc_Tb(iti)
8420 thybt1(j)=v1bend_chyb(j,iti)
8422 sumth1thyb=v1bend_chyb(0,iti)+ &
8423 tschebyshev(1,nbend_kcc_Tb(iti),thybt1(1),costhet)
8424 if (lprn) write (iout,*) i-1,itype(i-1,1),iti,theta(i)*rad2deg,&
8426 ihelp=nbend_kcc_Tb(iti)-1
8427 gradthybt1=gradtschebyshev(0,ihelp,thybt1(1),costhet)
8428 etheta=etheta+sumth1thyb
8429 !C print *,sumth1thyb,gradthybt1,sinthet*(-0.5d0)
8430 gloc(nphi+i-2,icg)=gloc(nphi+i-2,icg)-wang*gradthybt1*sinthet
8433 end subroutine ebend_kcc
8435 !c-------------------------------------------------------------------------------------
8436 subroutine etheta_constr(ethetacnstr)
8437 real (kind=8) :: ethetacnstr,thetiii,difi
8440 !C print *,ithetaconstr_start,ithetaconstr_end,"TU"
8441 do i=ithetaconstr_start,ithetaconstr_end
8442 itheta=itheta_constr(i)
8443 thetiii=theta(itheta)
8444 difi=pinorm(thetiii-theta_constr0(i))
8445 if (difi.gt.theta_drange(i)) then
8446 difi=difi-theta_drange(i)
8447 ethetacnstr=ethetacnstr+0.25d0*for_thet_constr(i)*difi**4
8448 gloc(itheta+nphi-2,icg)=gloc(itheta+nphi-2,icg) &
8449 +for_thet_constr(i)*difi**3
8450 else if (difi.lt.-drange(i)) then
8452 ethetacnstr=ethetacnstr+0.25d0*for_thet_constr(i)*difi**4
8453 gloc(itheta+nphi-2,icg)=gloc(itheta+nphi-2,icg) &
8454 +for_thet_constr(i)*difi**3
8458 if (energy_dec) then
8459 write (iout,'(a6,2i5,4f8.3,2e14.5)') "ethetc",&
8460 i,itheta,rad2deg*thetiii,&
8461 rad2deg*theta_constr0(i), rad2deg*theta_drange(i),&
8462 rad2deg*difi,0.25d0*for_thet_constr(i)*difi**4,&
8463 gloc(itheta+nphi-2,icg)
8467 end subroutine etheta_constr
8469 !-----------------------------------------------------------------------------
8470 subroutine eback_sc_corr(esccor)
8471 ! 7/21/2007 Correlations between the backbone-local and side-chain-local
8472 ! conformational states; temporarily implemented as differences
8473 ! between UNRES torsional potentials (dependent on three types of
8474 ! residues) and the torsional potentials dependent on all 20 types
8475 ! of residues computed from AM1 energy surfaces of terminally-blocked
8476 ! amino-acid residues.
8477 ! implicit real(kind=8) (a-h,o-z)
8478 ! include 'DIMENSIONS'
8479 ! include 'COMMON.VAR'
8480 ! include 'COMMON.GEO'
8481 ! include 'COMMON.LOCAL'
8482 ! include 'COMMON.TORSION'
8483 ! include 'COMMON.SCCOR'
8484 ! include 'COMMON.INTERACT'
8485 ! include 'COMMON.DERIV'
8486 ! include 'COMMON.CHAIN'
8487 ! include 'COMMON.NAMES'
8488 ! include 'COMMON.IOUNITS'
8489 ! include 'COMMON.FFIELD'
8490 ! include 'COMMON.CONTROL'
8491 real(kind=8) :: esccor,esccor_ii,phii,gloci,v1ij,v2ij,&
8494 integer :: i,interty,j,isccori,isccori1,intertyp
8495 ! Set lprn=.true. for debugging
8498 ! write (iout,*) "EBACK_SC_COR",itau_start,itau_end
8500 do i=itau_start,itau_end
8501 if ((itype(i-2,1).eq.ntyp1).or.(itype(i-1,1).eq.ntyp1)) cycle
8503 isccori=isccortyp(itype(i-2,1))
8504 isccori1=isccortyp(itype(i-1,1))
8506 ! write (iout,*) "EBACK_SC_COR",i,nterm_sccor(isccori,isccori1)
8508 do intertyp=1,3 !intertyp
8510 !c Added 09 May 2012 (Adasko)
8511 !c Intertyp means interaction type of backbone mainchain correlation:
8512 ! 1 = SC...Ca...Ca...Ca
8513 ! 2 = Ca...Ca...Ca...SC
8514 ! 3 = SC...Ca...Ca...SCi
8516 if (((intertyp.eq.3).and.((itype(i-2,1).eq.10).or. &
8517 (itype(i-1,1).eq.10).or.(itype(i-2,1).eq.ntyp1).or. &
8518 (itype(i-1,1).eq.ntyp1))) &
8519 .or. ((intertyp.eq.1).and.((itype(i-2,1).eq.10) &
8520 .or.(itype(i-2,1).eq.ntyp1).or.(itype(i-1,1).eq.ntyp1) &
8521 .or.(itype(i,1).eq.ntyp1))) &
8522 .or.((intertyp.eq.2).and.((itype(i-1,1).eq.10).or. &
8523 (itype(i-1,1).eq.ntyp1).or.(itype(i-2,1).eq.ntyp1).or. &
8524 (itype(i-3,1).eq.ntyp1)))) cycle
8525 if ((intertyp.eq.2).and.(i.eq.4).and.(itype(1,1).eq.ntyp1)) cycle
8526 if ((intertyp.eq.1).and.(i.eq.nres).and.(itype(nres,1).eq.ntyp1)) &
8528 do j=1,nterm_sccor(isccori,isccori1)
8529 v1ij=v1sccor(j,intertyp,isccori,isccori1)
8530 v2ij=v2sccor(j,intertyp,isccori,isccori1)
8531 cosphi=dcos(j*tauangle(intertyp,i))
8532 sinphi=dsin(j*tauangle(intertyp,i))
8533 if (energy_dec) esccor_ii=esccor_ii+v1ij*cosphi+v2ij*sinphi
8534 esccor=esccor+v1ij*cosphi+v2ij*sinphi
8535 gloci=gloci+j*(v2ij*cosphi-v1ij*sinphi)
8537 if (energy_dec) write (iout,'(a6,i5,i2,0pf7.3)') &
8538 'esccor',i,intertyp,esccor_ii
8539 ! write (iout,*) "EBACK_SC_COR",i,v1ij*cosphi+v2ij*sinphi,intertyp
8540 gloc_sc(intertyp,i-3,icg)=gloc_sc(intertyp,i-3,icg)+wsccor*gloci
8542 write (iout,'(2(a3,2x,i3,2x),2i3,6f8.3/26x,6f8.3/)') &
8543 restyp(itype(i-2,1),1),i-2,restyp(itype(i-1,1),1),i-1,isccori,isccori1,&
8544 (v1sccor(j,intertyp,isccori,isccori1),j=1,6),&
8545 (v2sccor(j,intertyp,isccori,isccori1),j=1,6)
8546 gsccor_loc(i-3)=gsccor_loc(i-3)+gloci
8551 end subroutine eback_sc_corr
8552 !-----------------------------------------------------------------------------
8553 subroutine multibody(ecorr)
8554 ! This subroutine calculates multi-body contributions to energy following
8555 ! the idea of Skolnick et al. If side chains I and J make a contact and
8556 ! at the same time side chains I+1 and J+1 make a contact, an extra
8557 ! contribution equal to sqrt(eps(i,j)*eps(i+1,j+1)) is added.
8558 ! implicit real(kind=8) (a-h,o-z)
8559 ! include 'DIMENSIONS'
8560 ! include 'COMMON.IOUNITS'
8561 ! include 'COMMON.DERIV'
8562 ! include 'COMMON.INTERACT'
8563 ! include 'COMMON.CONTACTS'
8564 real(kind=8),dimension(3) :: gx,gx1
8566 real(kind=8) :: ecorr
8567 integer :: i,j,ishift,i1,num_conti,num_conti1,j1,jj,kk
8568 ! Set lprn=.true. for debugging
8572 write (iout,'(a)') 'Contact function values:'
8574 write (iout,'(i2,20(1x,i2,f10.5))') &
8575 i,(jcont(j,i),facont(j,i),j=1,num_cont(i))
8580 ! if (.not.allocated(gradcorr)) allocate(gradcorr(3,nres))
8581 ! if (.not.allocated(gradxorr)) allocate(gradxorr(3,nres))
8593 num_conti=num_cont(i)
8594 num_conti1=num_cont(i1)
8599 if (j1.eq.j+ishift .or. j1.eq.j-ishift) then
8600 !d write(iout,*)'i=',i,' j=',j,' i1=',i1,' j1=',j1,
8601 !d & ' ishift=',ishift
8602 ! Contacts I--J and I+ISHIFT--J+-ISHIFT1 occur simultaneously.
8603 ! The system gains extra energy.
8604 ecorr=ecorr+esccorr(i,j,i1,j1,jj,kk)
8605 endif ! j1==j+-ishift
8613 end subroutine multibody
8614 !-----------------------------------------------------------------------------
8615 real(kind=8) function esccorr(i,j,k,l,jj,kk)
8616 ! implicit real(kind=8) (a-h,o-z)
8617 ! include 'DIMENSIONS'
8618 ! include 'COMMON.IOUNITS'
8619 ! include 'COMMON.DERIV'
8620 ! include 'COMMON.INTERACT'
8621 ! include 'COMMON.CONTACTS'
8622 real(kind=8),dimension(3) :: gx,gx1
8624 integer :: i,j,k,l,jj,kk,m,ll
8625 real(kind=8) :: eij,ekl
8629 !d write (iout,'(4i5,3f10.5)') i,j,k,l,eij,ekl,-eij*ekl
8630 ! Calculate the multi-body contribution to energy.
8631 ! Calculate multi-body contributions to the gradient.
8632 !d write (iout,'(2(2i3,3f10.5))')i,j,(gacont(m,jj,i),m=1,3),
8633 !d & k,l,(gacont(m,kk,k),m=1,3)
8635 gx(m) =ekl*gacont(m,jj,i)
8636 gx1(m)=eij*gacont(m,kk,k)
8637 gradxorr(m,i)=gradxorr(m,i)-gx(m)
8638 gradxorr(m,j)=gradxorr(m,j)+gx(m)
8639 gradxorr(m,k)=gradxorr(m,k)-gx1(m)
8640 gradxorr(m,l)=gradxorr(m,l)+gx1(m)
8644 gradcorr(ll,m)=gradcorr(ll,m)+gx(ll)
8649 gradcorr(ll,m)=gradcorr(ll,m)+gx1(ll)
8654 end function esccorr
8655 !-----------------------------------------------------------------------------
8656 subroutine multibody_hb(ecorr,ecorr5,ecorr6,n_corr,n_corr1)
8657 ! This subroutine calculates multi-body contributions to hydrogen-bonding
8658 ! implicit real(kind=8) (a-h,o-z)
8659 ! include 'DIMENSIONS'
8660 ! include 'COMMON.IOUNITS'
8663 ! integer :: maxconts !max_cont=maxconts =nres/4
8664 integer,parameter :: max_dim=26
8665 integer :: source,CorrelType,CorrelID,CorrelType1,CorrelID1,Error
8666 real(kind=8) :: zapas_recv(max_dim,maxconts,nfgtasks) !(max_dim,maxconts,max_fg_procs)
8667 !el real(kind=8) :: zapas(max_dim,maxconts,nfgtasks)
8668 !el common /przechowalnia/ zapas
8669 integer :: status(MPI_STATUS_SIZE)
8670 integer,dimension((nres/4)*2) :: req !maxconts*2
8671 integer :: status_array(MPI_STATUS_SIZE,(nres/4)*2),nn,ireq,ierr
8673 ! include 'COMMON.SETUP'
8674 ! include 'COMMON.FFIELD'
8675 ! include 'COMMON.DERIV'
8676 ! include 'COMMON.INTERACT'
8677 ! include 'COMMON.CONTACTS'
8678 ! include 'COMMON.CONTROL'
8679 ! include 'COMMON.LOCAL'
8680 real(kind=8),dimension(3) :: gx,gx1
8681 real(kind=8) :: time00,ecorr,ecorr5,ecorr6
8682 logical :: lprn,ldone
8684 integer :: i,j,ii,k,n_corr,n_corr1,i1,num_conti,num_conti1,&
8685 jj,jp,kk,j1,jp1,jjc,iii,nnn,iproc
8687 ! Set lprn=.true. for debugging
8691 if(.not.allocated(zapas)) allocate(zapas(max_dim,maxconts,nfgtasks))
8694 if (nfgtasks.le.1) goto 30
8696 write (iout,'(a)') 'Contact function values before RECEIVE:'
8698 write (iout,'(2i3,50(1x,i2,f5.2))') &
8699 i,num_cont_hb(i),(jcont_hb(j,i),facont_hb(j,i),&
8704 do i=1,ntask_cont_from
8707 do i=1,ntask_cont_to
8710 ! write (iout,*) "ntask_cont_from",ntask_cont_from," ntask_cont_to",
8712 ! Make the list of contacts to send to send to other procesors
8713 ! write (iout,*) "limits",max0(iturn4_end-1,iatel_s),iturn3_end
8715 do i=iturn3_start,iturn3_end
8716 ! write (iout,*) "make contact list turn3",i," num_cont",
8718 call add_hb_contact(i,i+2,iturn3_sent_local(1,i))
8720 do i=iturn4_start,iturn4_end
8721 ! write (iout,*) "make contact list turn4",i," num_cont",
8723 call add_hb_contact(i,i+3,iturn4_sent_local(1,i))
8727 ! write (iout,*) "make contact list longrange",i,ii," num_cont",
8729 do j=1,num_cont_hb(i)
8732 iproc=iint_sent_local(k,jjc,ii)
8733 ! write (iout,*) "i",i," j",j," k",k," jjc",jjc," iproc",iproc
8734 if (iproc.gt.0) then
8735 ncont_sent(iproc)=ncont_sent(iproc)+1
8736 nn=ncont_sent(iproc)
8738 zapas(2,nn,iproc)=jjc
8739 zapas(3,nn,iproc)=facont_hb(j,i)
8740 zapas(4,nn,iproc)=ees0p(j,i)
8741 zapas(5,nn,iproc)=ees0m(j,i)
8742 zapas(6,nn,iproc)=gacont_hbr(1,j,i)
8743 zapas(7,nn,iproc)=gacont_hbr(2,j,i)
8744 zapas(8,nn,iproc)=gacont_hbr(3,j,i)
8745 zapas(9,nn,iproc)=gacontm_hb1(1,j,i)
8746 zapas(10,nn,iproc)=gacontm_hb1(2,j,i)
8747 zapas(11,nn,iproc)=gacontm_hb1(3,j,i)
8748 zapas(12,nn,iproc)=gacontp_hb1(1,j,i)
8749 zapas(13,nn,iproc)=gacontp_hb1(2,j,i)
8750 zapas(14,nn,iproc)=gacontp_hb1(3,j,i)
8751 zapas(15,nn,iproc)=gacontm_hb2(1,j,i)
8752 zapas(16,nn,iproc)=gacontm_hb2(2,j,i)
8753 zapas(17,nn,iproc)=gacontm_hb2(3,j,i)
8754 zapas(18,nn,iproc)=gacontp_hb2(1,j,i)
8755 zapas(19,nn,iproc)=gacontp_hb2(2,j,i)
8756 zapas(20,nn,iproc)=gacontp_hb2(3,j,i)
8757 zapas(21,nn,iproc)=gacontm_hb3(1,j,i)
8758 zapas(22,nn,iproc)=gacontm_hb3(2,j,i)
8759 zapas(23,nn,iproc)=gacontm_hb3(3,j,i)
8760 zapas(24,nn,iproc)=gacontp_hb3(1,j,i)
8761 zapas(25,nn,iproc)=gacontp_hb3(2,j,i)
8762 zapas(26,nn,iproc)=gacontp_hb3(3,j,i)
8769 "Numbers of contacts to be sent to other processors",&
8770 (ncont_sent(i),i=1,ntask_cont_to)
8771 write (iout,*) "Contacts sent"
8772 do ii=1,ntask_cont_to
8774 iproc=itask_cont_to(ii)
8775 write (iout,*) nn," contacts to processor",iproc,&
8776 " of CONT_TO_COMM group"
8778 write(iout,'(2f5.0,4f10.5)')(zapas(j,i,ii),j=1,5)
8786 CorrelID1=nfgtasks+fg_rank+1
8788 ! Receive the numbers of needed contacts from other processors
8789 do ii=1,ntask_cont_from
8790 iproc=itask_cont_from(ii)
8792 call MPI_Irecv(ncont_recv(ii),1,MPI_INTEGER,iproc,CorrelType,&
8793 FG_COMM,req(ireq),IERR)
8795 ! write (iout,*) "IRECV ended"
8797 ! Send the number of contacts needed by other processors
8798 do ii=1,ntask_cont_to
8799 iproc=itask_cont_to(ii)
8801 call MPI_Isend(ncont_sent(ii),1,MPI_INTEGER,iproc,CorrelType,&
8802 FG_COMM,req(ireq),IERR)
8804 ! write (iout,*) "ISEND ended"
8805 ! write (iout,*) "number of requests (nn)",ireq
8808 call MPI_Waitall(ireq,req,status_array,ierr)
8810 ! & "Numbers of contacts to be received from other processors",
8811 ! & (ncont_recv(i),i=1,ntask_cont_from)
8815 do ii=1,ntask_cont_from
8816 iproc=itask_cont_from(ii)
8818 ! write (iout,*) "Receiving",nn," contacts from processor",iproc,
8819 ! & " of CONT_TO_COMM group"
8823 call MPI_Irecv(zapas_recv(1,1,ii),nn*max_dim,&
8824 MPI_DOUBLE_PRECISION,iproc,CorrelType1,FG_COMM,req(ireq),IERR)
8825 ! write (iout,*) "ireq,req",ireq,req(ireq)
8828 ! Send the contacts to processors that need them
8829 do ii=1,ntask_cont_to
8830 iproc=itask_cont_to(ii)
8832 ! write (iout,*) nn," contacts to processor",iproc,
8833 ! & " of CONT_TO_COMM group"
8836 call MPI_Isend(zapas(1,1,ii),nn*max_dim,MPI_DOUBLE_PRECISION,&
8837 iproc,CorrelType1,FG_COMM,req(ireq),IERR)
8838 ! write (iout,*) "ireq,req",ireq,req(ireq)
8840 ! write(iout,'(2f5.0,4f10.5)')(zapas(j,i,ii),j=1,5)
8844 ! write (iout,*) "number of requests (contacts)",ireq
8845 ! write (iout,*) "req",(req(i),i=1,4)
8848 call MPI_Waitall(ireq,req,status_array,ierr)
8849 do iii=1,ntask_cont_from
8850 iproc=itask_cont_from(iii)
8853 write (iout,*) "Received",nn," contacts from processor",iproc,&
8854 " of CONT_FROM_COMM group"
8857 write(iout,'(2f5.0,4f10.5)')(zapas_recv(j,i,iii),j=1,5)
8862 ii=zapas_recv(1,i,iii)
8863 ! Flag the received contacts to prevent double-counting
8864 jj=-zapas_recv(2,i,iii)
8865 ! write (iout,*) "iii",iii," i",i," ii",ii," jj",jj
8867 nnn=num_cont_hb(ii)+1
8870 facont_hb(nnn,ii)=zapas_recv(3,i,iii)
8871 ees0p(nnn,ii)=zapas_recv(4,i,iii)
8872 ees0m(nnn,ii)=zapas_recv(5,i,iii)
8873 gacont_hbr(1,nnn,ii)=zapas_recv(6,i,iii)
8874 gacont_hbr(2,nnn,ii)=zapas_recv(7,i,iii)
8875 gacont_hbr(3,nnn,ii)=zapas_recv(8,i,iii)
8876 gacontm_hb1(1,nnn,ii)=zapas_recv(9,i,iii)
8877 gacontm_hb1(2,nnn,ii)=zapas_recv(10,i,iii)
8878 gacontm_hb1(3,nnn,ii)=zapas_recv(11,i,iii)
8879 gacontp_hb1(1,nnn,ii)=zapas_recv(12,i,iii)
8880 gacontp_hb1(2,nnn,ii)=zapas_recv(13,i,iii)
8881 gacontp_hb1(3,nnn,ii)=zapas_recv(14,i,iii)
8882 gacontm_hb2(1,nnn,ii)=zapas_recv(15,i,iii)
8883 gacontm_hb2(2,nnn,ii)=zapas_recv(16,i,iii)
8884 gacontm_hb2(3,nnn,ii)=zapas_recv(17,i,iii)
8885 gacontp_hb2(1,nnn,ii)=zapas_recv(18,i,iii)
8886 gacontp_hb2(2,nnn,ii)=zapas_recv(19,i,iii)
8887 gacontp_hb2(3,nnn,ii)=zapas_recv(20,i,iii)
8888 gacontm_hb3(1,nnn,ii)=zapas_recv(21,i,iii)
8889 gacontm_hb3(2,nnn,ii)=zapas_recv(22,i,iii)
8890 gacontm_hb3(3,nnn,ii)=zapas_recv(23,i,iii)
8891 gacontp_hb3(1,nnn,ii)=zapas_recv(24,i,iii)
8892 gacontp_hb3(2,nnn,ii)=zapas_recv(25,i,iii)
8893 gacontp_hb3(3,nnn,ii)=zapas_recv(26,i,iii)
8898 write (iout,'(a)') 'Contact function values after receive:'
8900 write (iout,'(2i3,50(1x,i3,f5.2))') &
8901 i,num_cont_hb(i),(jcont_hb(j,i),facont_hb(j,i),&
8909 write (iout,'(a)') 'Contact function values:'
8911 write (iout,'(2i3,50(1x,i3,f5.2))') &
8912 i,num_cont_hb(i),(jcont_hb(j,i),facont_hb(j,i),&
8918 ! if (.not.allocated(gradcorr)) allocate(gradcorr(3,nres))
8919 ! if (.not.allocated(gradxorr)) allocate(gradxorr(3,nres))
8920 ! Remove the loop below after debugging !!!
8927 ! Calculate the local-electrostatic correlation terms
8928 do i=min0(iatel_s,iturn4_start),max0(iatel_e,iturn3_end)
8930 num_conti=num_cont_hb(i)
8931 num_conti1=num_cont_hb(i+1)
8938 ! write (iout,*) 'i=',i,' j=',j,' i1=',i1,' j1=',j1,&
8939 ! ' jj=',jj,' kk=',kk,"jp=",jp,"jp1",jp1
8940 if ((j.gt.0 .and. j1.gt.0 .or. j.gt.0 .and. j1.lt.0 &
8941 .or. j.lt.0 .and. j1.gt.0) .and. &
8942 (jp1.eq.jp+1 .or. jp1.eq.jp-1)) then
8943 ! Contacts I-J and (I+1)-(J+1) or (I+1)-(J-1) occur simultaneously.
8944 ! The system gains extra energy.
8945 ecorr=ecorr+ehbcorr(i,jp,i+1,jp1,jj,kk,0.72D0,0.32D0)
8946 if (energy_dec) write (iout,'(a6,2i5,0pf7.3)') &
8947 'ecorrh',i,j,ehbcorr(i,jp,i+1,jp1,jj,kk,0.72D0,0.32D0)
8949 else if (j1.eq.j) then
8950 ! Contacts I-J and I-(J+1) occur simultaneously.
8951 ! The system loses extra energy.
8952 ! ecorr=ecorr+ehbcorr(i,j,i+1,j,jj,kk,0.60D0,-0.40D0)
8957 ! write (iout,*) 'i=',i,' j=',j,' i1=',i1,' j1=',j1,
8958 ! & ' jj=',jj,' kk=',kk
8960 ! Contacts I-J and (I+1)-J occur simultaneously.
8961 ! The system loses extra energy.
8962 ! ecorr=ecorr+ehbcorr(i,j,i,j+1,jj,kk,0.60D0,-0.40D0)
8968 end subroutine multibody_hb
8969 !-----------------------------------------------------------------------------
8970 subroutine add_hb_contact(ii,jj,itask)
8971 ! implicit real(kind=8) (a-h,o-z)
8972 ! include "DIMENSIONS"
8973 ! include "COMMON.IOUNITS"
8974 ! include "COMMON.CONTACTS"
8975 ! integer,parameter :: maxconts=nres/4
8976 integer,parameter :: max_dim=26
8977 real(kind=8) :: zapas_recv(max_dim,maxconts,nfgtasks) !(max_dim,maxconts,max_fg_procs)
8978 ! real(kind=8) :: zapas(max_dim,maxconts,nfgtasks)
8979 ! common /przechowalnia/ zapas
8980 integer :: i,j,ii,jj,iproc,nn,jjc
8981 integer,dimension(4) :: itask
8982 ! write (iout,*) "itask",itask
8985 if (iproc.gt.0) then
8986 do j=1,num_cont_hb(ii)
8988 ! write (iout,*) "i",ii," j",jj," jjc",jjc
8990 ncont_sent(iproc)=ncont_sent(iproc)+1
8991 nn=ncont_sent(iproc)
8992 zapas(1,nn,iproc)=ii
8993 zapas(2,nn,iproc)=jjc
8994 zapas(3,nn,iproc)=facont_hb(j,ii)
8995 zapas(4,nn,iproc)=ees0p(j,ii)
8996 zapas(5,nn,iproc)=ees0m(j,ii)
8997 zapas(6,nn,iproc)=gacont_hbr(1,j,ii)
8998 zapas(7,nn,iproc)=gacont_hbr(2,j,ii)
8999 zapas(8,nn,iproc)=gacont_hbr(3,j,ii)
9000 zapas(9,nn,iproc)=gacontm_hb1(1,j,ii)
9001 zapas(10,nn,iproc)=gacontm_hb1(2,j,ii)
9002 zapas(11,nn,iproc)=gacontm_hb1(3,j,ii)
9003 zapas(12,nn,iproc)=gacontp_hb1(1,j,ii)
9004 zapas(13,nn,iproc)=gacontp_hb1(2,j,ii)
9005 zapas(14,nn,iproc)=gacontp_hb1(3,j,ii)
9006 zapas(15,nn,iproc)=gacontm_hb2(1,j,ii)
9007 zapas(16,nn,iproc)=gacontm_hb2(2,j,ii)
9008 zapas(17,nn,iproc)=gacontm_hb2(3,j,ii)
9009 zapas(18,nn,iproc)=gacontp_hb2(1,j,ii)
9010 zapas(19,nn,iproc)=gacontp_hb2(2,j,ii)
9011 zapas(20,nn,iproc)=gacontp_hb2(3,j,ii)
9012 zapas(21,nn,iproc)=gacontm_hb3(1,j,ii)
9013 zapas(22,nn,iproc)=gacontm_hb3(2,j,ii)
9014 zapas(23,nn,iproc)=gacontm_hb3(3,j,ii)
9015 zapas(24,nn,iproc)=gacontp_hb3(1,j,ii)
9016 zapas(25,nn,iproc)=gacontp_hb3(2,j,ii)
9017 zapas(26,nn,iproc)=gacontp_hb3(3,j,ii)
9024 end subroutine add_hb_contact
9025 !-----------------------------------------------------------------------------
9026 subroutine multibody_eello(ecorr,ecorr5,ecorr6,eturn6,n_corr,n_corr1)
9027 ! This subroutine calculates multi-body contributions to hydrogen-bonding
9028 ! implicit real(kind=8) (a-h,o-z)
9029 ! include 'DIMENSIONS'
9030 ! include 'COMMON.IOUNITS'
9031 integer,parameter :: max_dim=70
9034 ! integer :: maxconts !max_cont=maxconts=nres/4
9035 integer :: source,CorrelType,CorrelID,CorrelType1,CorrelID1,Error
9036 real(kind=8) :: zapas_recv(max_dim,maxconts,nfgtasks)
9037 ! real(kind=8) :: zapas(max_dim,maxconts,nfgtasks) !(max_dim,maxconts,max_fg_procs)
9038 ! common /przechowalnia/ zapas
9039 integer :: status(MPI_STATUS_SIZE),req((nres/4)*2),&
9040 status_array(MPI_STATUS_SIZE,(nres/4)*2),jjc,iproc,ireq,nn,ind,&
9043 ! include 'COMMON.SETUP'
9044 ! include 'COMMON.FFIELD'
9045 ! include 'COMMON.DERIV'
9046 ! include 'COMMON.LOCAL'
9047 ! include 'COMMON.INTERACT'
9048 ! include 'COMMON.CONTACTS'
9049 ! include 'COMMON.CHAIN'
9050 ! include 'COMMON.CONTROL'
9051 real(kind=8),dimension(3) :: gx,gx1
9052 integer,dimension(nres) :: num_cont_hb_old
9053 logical :: lprn,ldone
9054 !EL double precision eello4,eello5,eelo6,eello_turn6
9055 !EL external eello4,eello5,eello6,eello_turn6
9057 integer :: i,ii,j,k,l,jj,kk,ll,mm,n_corr,n_corr1,num_conti,jp,&
9058 j1,jp1,i1,num_conti1
9059 real(kind=8) :: sqd1,sqd2,sred_geom,fac_prim1,fac_prim2,fprimcont
9060 real(kind=8) :: ecorr,ecorr5,ecorr6,eturn6
9062 ! Set lprn=.true. for debugging
9067 if(.not.allocated(zapas)) allocate(zapas(max_dim,maxconts,nfgtasks))
9069 num_cont_hb_old(i)=num_cont_hb(i)
9073 if (nfgtasks.le.1) goto 30
9075 write (iout,'(a)') 'Contact function values before RECEIVE:'
9077 write (iout,'(2i3,50(1x,i2,f5.2))') &
9078 i,num_cont_hb(i),(jcont_hb(j,i),facont_hb(j,i),&
9083 do i=1,ntask_cont_from
9086 do i=1,ntask_cont_to
9089 ! write (iout,*) "ntask_cont_from",ntask_cont_from," ntask_cont_to",
9091 ! Make the list of contacts to send to send to other procesors
9092 do i=iturn3_start,iturn3_end
9093 ! write (iout,*) "make contact list turn3",i," num_cont",
9095 call add_hb_contact_eello(i,i+2,iturn3_sent_local(1,i))
9097 do i=iturn4_start,iturn4_end
9098 ! write (iout,*) "make contact list turn4",i," num_cont",
9100 call add_hb_contact_eello(i,i+3,iturn4_sent_local(1,i))
9104 ! write (iout,*) "make contact list longrange",i,ii," num_cont",
9106 do j=1,num_cont_hb(i)
9109 iproc=iint_sent_local(k,jjc,ii)
9110 ! write (iout,*) "i",i," j",j," k",k," jjc",jjc," iproc",iproc
9111 if (iproc.ne.0) then
9112 ncont_sent(iproc)=ncont_sent(iproc)+1
9113 nn=ncont_sent(iproc)
9115 zapas(2,nn,iproc)=jjc
9116 zapas(3,nn,iproc)=d_cont(j,i)
9120 zapas(ind,nn,iproc)=grij_hb_cont(kk,j,i)
9125 zapas(ind,nn,iproc)=a_chuj(ll,kk,j,i)
9133 zapas(ind,nn,iproc)=a_chuj_der(mm,ll,kk,jj,j,i)
9144 "Numbers of contacts to be sent to other processors",&
9145 (ncont_sent(i),i=1,ntask_cont_to)
9146 write (iout,*) "Contacts sent"
9147 do ii=1,ntask_cont_to
9149 iproc=itask_cont_to(ii)
9150 write (iout,*) nn," contacts to processor",iproc,&
9151 " of CONT_TO_COMM group"
9153 write(iout,'(2f5.0,10f10.5)')(zapas(j,i,ii),j=1,10)
9161 CorrelID1=nfgtasks+fg_rank+1
9163 ! Receive the numbers of needed contacts from other processors
9164 do ii=1,ntask_cont_from
9165 iproc=itask_cont_from(ii)
9167 call MPI_Irecv(ncont_recv(ii),1,MPI_INTEGER,iproc,CorrelType,&
9168 FG_COMM,req(ireq),IERR)
9170 ! write (iout,*) "IRECV ended"
9172 ! Send the number of contacts needed by other processors
9173 do ii=1,ntask_cont_to
9174 iproc=itask_cont_to(ii)
9176 call MPI_Isend(ncont_sent(ii),1,MPI_INTEGER,iproc,CorrelType,&
9177 FG_COMM,req(ireq),IERR)
9179 ! write (iout,*) "ISEND ended"
9180 ! write (iout,*) "number of requests (nn)",ireq
9183 call MPI_Waitall(ireq,req,status_array,ierr)
9185 ! & "Numbers of contacts to be received from other processors",
9186 ! & (ncont_recv(i),i=1,ntask_cont_from)
9190 do ii=1,ntask_cont_from
9191 iproc=itask_cont_from(ii)
9193 ! write (iout,*) "Receiving",nn," contacts from processor",iproc,
9194 ! & " of CONT_TO_COMM group"
9198 call MPI_Irecv(zapas_recv(1,1,ii),nn*max_dim,&
9199 MPI_DOUBLE_PRECISION,iproc,CorrelType1,FG_COMM,req(ireq),IERR)
9200 ! write (iout,*) "ireq,req",ireq,req(ireq)
9203 ! Send the contacts to processors that need them
9204 do ii=1,ntask_cont_to
9205 iproc=itask_cont_to(ii)
9207 ! write (iout,*) nn," contacts to processor",iproc,
9208 ! & " of CONT_TO_COMM group"
9211 call MPI_Isend(zapas(1,1,ii),nn*max_dim,MPI_DOUBLE_PRECISION,&
9212 iproc,CorrelType1,FG_COMM,req(ireq),IERR)
9213 ! write (iout,*) "ireq,req",ireq,req(ireq)
9215 ! write(iout,'(2f5.0,4f10.5)')(zapas(j,i,ii),j=1,5)
9219 ! write (iout,*) "number of requests (contacts)",ireq
9220 ! write (iout,*) "req",(req(i),i=1,4)
9223 call MPI_Waitall(ireq,req,status_array,ierr)
9224 do iii=1,ntask_cont_from
9225 iproc=itask_cont_from(iii)
9228 write (iout,*) "Received",nn," contacts from processor",iproc,&
9229 " of CONT_FROM_COMM group"
9232 write(iout,'(2f5.0,10f10.5)')(zapas_recv(j,i,iii),j=1,10)
9237 ii=zapas_recv(1,i,iii)
9238 ! Flag the received contacts to prevent double-counting
9239 jj=-zapas_recv(2,i,iii)
9240 ! write (iout,*) "iii",iii," i",i," ii",ii," jj",jj
9242 nnn=num_cont_hb(ii)+1
9245 d_cont(nnn,ii)=zapas_recv(3,i,iii)
9249 grij_hb_cont(kk,nnn,ii)=zapas_recv(ind,i,iii)
9254 a_chuj(ll,kk,nnn,ii)=zapas_recv(ind,i,iii)
9262 a_chuj_der(mm,ll,kk,jj,nnn,ii)=zapas_recv(ind,i,iii)
9271 write (iout,'(a)') 'Contact function values after receive:'
9273 write (iout,'(2i3,50(1x,i3,5f6.3))') &
9274 i,num_cont_hb(i),(jcont_hb(j,i),d_cont(j,i),&
9275 ((a_chuj(ll,kk,j,i),ll=1,2),kk=1,2),j=1,num_cont_hb(i))
9282 write (iout,'(a)') 'Contact function values:'
9284 write (iout,'(2i3,50(1x,i2,5f6.3))') &
9285 i,num_cont_hb(i),(jcont_hb(j,i),d_cont(j,i),&
9286 ((a_chuj(ll,kk,j,i),ll=1,2),kk=1,2),j=1,num_cont_hb(i))
9293 ! if (.not.allocated(gradcorr)) allocate(gradcorr(3,nres))
9294 ! if (.not.allocated(gradxorr)) allocate(gradxorr(3,nres))
9295 ! Remove the loop below after debugging !!!
9302 ! Calculate the dipole-dipole interaction energies
9303 if (wcorr6.gt.0.0d0 .or. wturn6.gt.0.0d0) then
9304 do i=iatel_s,iatel_e+1
9305 num_conti=num_cont_hb(i)
9314 ! Calculate the local-electrostatic correlation terms
9315 ! write (iout,*) "gradcorr5 in eello5 before loop"
9317 ! write (iout,'(i5,3f10.5)')
9318 ! & iii,(gradcorr5(jjj,iii),jjj=1,3)
9320 do i=min0(iatel_s,iturn4_start),max0(iatel_e+1,iturn3_end+1)
9321 ! write (iout,*) "corr loop i",i
9323 num_conti=num_cont_hb(i)
9324 num_conti1=num_cont_hb(i+1)
9331 ! write (iout,*) 'i=',i,' j=',j,' i1=',i1,' j1=',j1,
9332 ! & ' jj=',jj,' kk=',kk
9333 ! if (j1.eq.j+1 .or. j1.eq.j-1) then
9334 if ((j.gt.0 .and. j1.gt.0 .or. j.gt.0 .and. j1.lt.0 &
9335 .or. j.lt.0 .and. j1.gt.0) .and. &
9336 (jp1.eq.jp+1 .or. jp1.eq.jp-1)) then
9337 ! Contacts I-J and (I+1)-(J+1) or (I+1)-(J-1) occur simultaneously.
9338 ! The system gains extra energy.
9340 sqd1=dsqrt(d_cont(jj,i))
9341 sqd2=dsqrt(d_cont(kk,i1))
9342 sred_geom = sqd1*sqd2
9343 IF (sred_geom.lt.cutoff_corr) THEN
9344 call gcont(sred_geom,r0_corr,1.0D0,delt_corr,&
9346 !d write (iout,*) 'i=',i,' j=',jp,' i1=',i1,' j1=',jp1,
9347 !d & ' jj=',jj,' kk=',kk
9348 fac_prim1=0.5d0*sqd2/sqd1*fprimcont
9349 fac_prim2=0.5d0*sqd1/sqd2*fprimcont
9351 g_contij(l,1)=fac_prim1*grij_hb_cont(l,jj,i)
9352 g_contij(l,2)=fac_prim2*grij_hb_cont(l,kk,i1)
9355 !d write (iout,*) 'sred_geom=',sred_geom,
9356 !d & ' ekont=',ekont,' fprim=',fprimcont,
9357 !d & ' fac_prim1',fac_prim1,' fac_prim2',fac_prim2
9358 !d write (iout,*) "g_contij",g_contij
9359 !d write (iout,*) "grij_hb_cont i",grij_hb_cont(:,jj,i)
9360 !d write (iout,*) "grij_hb_cont i1",grij_hb_cont(:,jj,i1)
9361 call calc_eello(i,jp,i+1,jp1,jj,kk)
9362 if (wcorr4.gt.0.0d0) &
9363 ecorr=ecorr+eello4(i,jp,i+1,jp1,jj,kk)
9364 if (energy_dec.and.wcorr4.gt.0.0d0) &
9365 write (iout,'(a6,4i5,0pf7.3)') &
9366 'ecorr4',i,j,i+1,j1,eello4(i,jp,i+1,jp1,jj,kk)
9367 ! write (iout,*) "gradcorr5 before eello5"
9369 ! write (iout,'(i5,3f10.5)')
9370 ! & iii,(gradcorr5(jjj,iii),jjj=1,3)
9372 if (wcorr5.gt.0.0d0) &
9373 ecorr5=ecorr5+eello5(i,jp,i+1,jp1,jj,kk)
9374 ! write (iout,*) "gradcorr5 after eello5"
9376 ! write (iout,'(i5,3f10.5)')
9377 ! & iii,(gradcorr5(jjj,iii),jjj=1,3)
9379 if (energy_dec.and.wcorr5.gt.0.0d0) &
9380 write (iout,'(a6,4i5,0pf7.3)') &
9381 'ecorr5',i,j,i+1,j1,eello5(i,jp,i+1,jp1,jj,kk)
9382 !d write(2,*)'wcorr6',wcorr6,' wturn6',wturn6
9383 !d write(2,*)'ijkl',i,jp,i+1,jp1
9384 if (wcorr6.gt.0.0d0 .and. (jp.ne.i+4 .or. jp1.ne.i+3 &
9385 .or. wturn6.eq.0.0d0))then
9386 !d write (iout,*) '******ecorr6: i,j,i+1,j1',i,j,i+1,j1
9387 ecorr6=ecorr6+eello6(i,jp,i+1,jp1,jj,kk)
9388 if (energy_dec) write (iout,'(a6,4i5,0pf7.3)') &
9389 'ecorr6',i,j,i+1,j1,eello6(i,jp,i+1,jp1,jj,kk)
9390 !d write (iout,*) 'ecorr',ecorr,' ecorr5=',ecorr5,
9391 !d & 'ecorr6=',ecorr6
9392 !d write (iout,'(4e15.5)') sred_geom,
9393 !d & dabs(eello4(i,jp,i+1,jp1,jj,kk)),
9394 !d & dabs(eello5(i,jp,i+1,jp1,jj,kk)),
9395 !d & dabs(eello6(i,jp,i+1,jp1,jj,kk))
9396 else if (wturn6.gt.0.0d0 &
9397 .and. (jp.eq.i+4 .and. jp1.eq.i+3)) then
9398 !d write (iout,*) '******eturn6: i,j,i+1,j1',i,jip,i+1,jp1
9399 eturn6=eturn6+eello_turn6(i,jj,kk)
9400 if (energy_dec) write (iout,'(a6,4i5,0pf7.3)') &
9401 'eturn6',i,j,i+1,j1,eello_turn6(i,jj,kk)
9402 !d write (2,*) 'multibody_eello:eturn6',eturn6
9411 num_cont_hb(i)=num_cont_hb_old(i)
9413 ! write (iout,*) "gradcorr5 in eello5"
9415 ! write (iout,'(i5,3f10.5)')
9416 ! & iii,(gradcorr5(jjj,iii),jjj=1,3)
9419 end subroutine multibody_eello
9420 !-----------------------------------------------------------------------------
9421 subroutine add_hb_contact_eello(ii,jj,itask)
9422 ! implicit real(kind=8) (a-h,o-z)
9423 ! include "DIMENSIONS"
9424 ! include "COMMON.IOUNITS"
9425 ! include "COMMON.CONTACTS"
9426 ! integer,parameter :: maxconts=nres/4
9427 integer,parameter :: max_dim=70
9428 real(kind=8) :: zapas_recv(max_dim,maxconts,nfgtasks)
9429 ! real(kind=8) :: zapas(max_dim,maxconts,nfgtasks) !(max_dim,maxconts,max_fg_procs)
9430 ! common /przechowalnia/ zapas
9432 integer :: i,j,ii,jj,iproc,nn,ind,jjc,kk,ll,mm
9433 integer,dimension(4) ::itask
9434 ! write (iout,*) "itask",itask
9437 if (iproc.gt.0) then
9438 do j=1,num_cont_hb(ii)
9440 ! write (iout,*) "send turns i",ii," j",jj," jjc",jjc
9442 ncont_sent(iproc)=ncont_sent(iproc)+1
9443 nn=ncont_sent(iproc)
9444 zapas(1,nn,iproc)=ii
9445 zapas(2,nn,iproc)=jjc
9446 zapas(3,nn,iproc)=d_cont(j,ii)
9450 zapas(ind,nn,iproc)=grij_hb_cont(kk,j,ii)
9455 zapas(ind,nn,iproc)=a_chuj(ll,kk,j,ii)
9463 zapas(ind,nn,iproc)=a_chuj_der(mm,ll,kk,jj,j,ii)
9474 end subroutine add_hb_contact_eello
9475 !-----------------------------------------------------------------------------
9476 real(kind=8) function ehbcorr(i,j,k,l,jj,kk,coeffp,coeffm)
9477 ! implicit real(kind=8) (a-h,o-z)
9478 ! include 'DIMENSIONS'
9479 ! include 'COMMON.IOUNITS'
9480 ! include 'COMMON.DERIV'
9481 ! include 'COMMON.INTERACT'
9482 ! include 'COMMON.CONTACTS'
9483 real(kind=8),dimension(3) :: gx,gx1
9486 integer :: i,j,k,l,jj,kk,ll,ilist,m, iresshield
9487 real(kind=8) :: coeffp,coeffm,eij,ekl,ees0pij,ees0pkl,ees0mij,&
9488 ees0mkl,ees,coeffpees0pij,coeffmees0mij,&
9489 coeffpees0pkl,coeffmees0mkl,gradlongij,gradlongkl, &
9500 ees=-(coeffp*ees0pij*ees0pkl+coeffm*ees0mij*ees0mkl)
9501 !d ees=-(coeffp*ees0pkl+coeffm*ees0mkl)
9502 ! Following 4 lines for diagnostics.
9507 ! write (iout,'(2(a,2i3,a,f10.5,a,2f10.5),a,f10.5,a,$)')
9508 ! & 'Contacts ',i,j,
9509 ! & ' eij',eij,' eesij',ees0pij,ees0mij,' and ',k,l
9510 ! & ,' fcont ',ekl,' eeskl',ees0pkl,ees0mkl,' energy=',ekont*ees,
9512 ! Calculate the multi-body contribution to energy.
9513 ! ecorr=ecorr+ekont*ees
9514 ! Calculate multi-body contributions to the gradient.
9515 coeffpees0pij=coeffp*ees0pij
9516 coeffmees0mij=coeffm*ees0mij
9517 coeffpees0pkl=coeffp*ees0pkl
9518 coeffmees0mkl=coeffm*ees0mkl
9520 !grad ghalfi=ees*ekl*gacont_hbr(ll,jj,i)
9521 gradcorr(ll,i)=gradcorr(ll,i) & !+0.5d0*ghalfi
9522 -ekont*(coeffpees0pkl*gacontp_hb1(ll,jj,i)+ &
9523 coeffmees0mkl*gacontm_hb1(ll,jj,i))
9524 gradcorr(ll,j)=gradcorr(ll,j) & !+0.5d0*ghalfi
9525 -ekont*(coeffpees0pkl*gacontp_hb2(ll,jj,i)+ &
9526 coeffmees0mkl*gacontm_hb2(ll,jj,i))
9527 !grad ghalfk=ees*eij*gacont_hbr(ll,kk,k)
9528 gradcorr(ll,k)=gradcorr(ll,k) & !+0.5d0*ghalfk
9529 -ekont*(coeffpees0pij*gacontp_hb1(ll,kk,k)+&
9530 coeffmees0mij*gacontm_hb1(ll,kk,k))
9531 gradcorr(ll,l)=gradcorr(ll,l) & !+0.5d0*ghalfk
9532 -ekont*(coeffpees0pij*gacontp_hb2(ll,kk,k)+ &
9533 coeffmees0mij*gacontm_hb2(ll,kk,k))
9534 gradlongij=ees*ekl*gacont_hbr(ll,jj,i)- &
9535 ekont*(coeffpees0pkl*gacontp_hb3(ll,jj,i)+ &
9536 coeffmees0mkl*gacontm_hb3(ll,jj,i))
9537 gradcorr_long(ll,j)=gradcorr_long(ll,j)+gradlongij
9538 gradcorr_long(ll,i)=gradcorr_long(ll,i)-gradlongij
9539 gradlongkl=ees*eij*gacont_hbr(ll,kk,k)- &
9540 ekont*(coeffpees0pij*gacontp_hb3(ll,kk,k)+ &
9541 coeffmees0mij*gacontm_hb3(ll,kk,k))
9542 gradcorr_long(ll,l)=gradcorr_long(ll,l)+gradlongkl
9543 gradcorr_long(ll,k)=gradcorr_long(ll,k)-gradlongkl
9544 ! write (iout,'(2f10.5,2x,$)') gradlongij,gradlongkl
9549 !grad gradcorr(ll,m)=gradcorr(ll,m)+
9550 !grad & ees*ekl*gacont_hbr(ll,jj,i)-
9551 !grad & ekont*(coeffp*ees0pkl*gacontp_hb3(ll,jj,i)+
9552 !grad & coeffm*ees0mkl*gacontm_hb3(ll,jj,i))
9557 !grad gradcorr(ll,m)=gradcorr(ll,m)+
9558 !grad & ees*eij*gacont_hbr(ll,kk,k)-
9559 !grad & ekont*(coeffp*ees0pij*gacontp_hb3(ll,kk,k)+
9560 !grad & coeffm*ees0mij*gacontm_hb3(ll,kk,k))
9563 ! write (iout,*) "ehbcorr",ekont*ees
9565 if (shield_mode.gt.0) then
9568 !C print *,i,j,fac_shield(i),fac_shield(j),
9569 !C &fac_shield(k),fac_shield(l)
9570 if ((fac_shield(i).gt.0).and.(fac_shield(j).gt.0).and. &
9571 (fac_shield(k).gt.0).and.(fac_shield(l).gt.0)) then
9572 do ilist=1,ishield_list(i)
9573 iresshield=shield_list(ilist,i)
9575 rlocshield=grad_shield_side(m,ilist,i)*ehbcorr/fac_shield(i)
9576 gshieldx_ec(m,iresshield)=gshieldx_ec(m,iresshield)+ &
9578 +grad_shield_loc(m,ilist,i)*ehbcorr/fac_shield(i)
9579 gshieldc_ec(m,iresshield-1)=gshieldc_ec(m,iresshield-1) &
9583 do ilist=1,ishield_list(j)
9584 iresshield=shield_list(ilist,j)
9586 rlocshield=grad_shield_side(m,ilist,j)*ehbcorr/fac_shield(j)
9587 gshieldx_ec(m,iresshield)=gshieldx_ec(m,iresshield)+ &
9589 +grad_shield_loc(m,ilist,j)*ehbcorr/fac_shield(j)
9590 gshieldc_ec(m,iresshield-1)=gshieldc_ec(m,iresshield-1) &
9595 do ilist=1,ishield_list(k)
9596 iresshield=shield_list(ilist,k)
9598 rlocshield=grad_shield_side(m,ilist,k)*ehbcorr/fac_shield(k)
9599 gshieldx_ec(m,iresshield)=gshieldx_ec(m,iresshield)+ &
9601 +grad_shield_loc(m,ilist,k)*ehbcorr/fac_shield(k)
9602 gshieldc_ec(m,iresshield-1)=gshieldc_ec(m,iresshield-1) &
9606 do ilist=1,ishield_list(l)
9607 iresshield=shield_list(ilist,l)
9609 rlocshield=grad_shield_side(m,ilist,l)*ehbcorr/fac_shield(l)
9610 gshieldx_ec(m,iresshield)=gshieldx_ec(m,iresshield)+ &
9612 +grad_shield_loc(m,ilist,l)*ehbcorr/fac_shield(l)
9613 gshieldc_ec(m,iresshield-1)=gshieldc_ec(m,iresshield-1) &
9618 gshieldc_ec(m,i)=gshieldc_ec(m,i)+ &
9619 grad_shield(m,i)*ehbcorr/fac_shield(i)
9620 gshieldc_ec(m,j)=gshieldc_ec(m,j)+ &
9621 grad_shield(m,j)*ehbcorr/fac_shield(j)
9622 gshieldc_ec(m,i-1)=gshieldc_ec(m,i-1)+ &
9623 grad_shield(m,i)*ehbcorr/fac_shield(i)
9624 gshieldc_ec(m,j-1)=gshieldc_ec(m,j-1)+ &
9625 grad_shield(m,j)*ehbcorr/fac_shield(j)
9627 gshieldc_ec(m,k)=gshieldc_ec(m,k)+ &
9628 grad_shield(m,k)*ehbcorr/fac_shield(k)
9629 gshieldc_ec(m,l)=gshieldc_ec(m,l)+ &
9630 grad_shield(m,l)*ehbcorr/fac_shield(l)
9631 gshieldc_ec(m,k-1)=gshieldc_ec(m,k-1)+ &
9632 grad_shield(m,k)*ehbcorr/fac_shield(k)
9633 gshieldc_ec(m,l-1)=gshieldc_ec(m,l-1)+ &
9634 grad_shield(m,l)*ehbcorr/fac_shield(l)
9640 end function ehbcorr
9642 !-----------------------------------------------------------------------------
9643 subroutine dipole(i,j,jj)
9644 ! implicit real(kind=8) (a-h,o-z)
9645 ! include 'DIMENSIONS'
9646 ! include 'COMMON.IOUNITS'
9647 ! include 'COMMON.CHAIN'
9648 ! include 'COMMON.FFIELD'
9649 ! include 'COMMON.DERIV'
9650 ! include 'COMMON.INTERACT'
9651 ! include 'COMMON.CONTACTS'
9652 ! include 'COMMON.TORSION'
9653 ! include 'COMMON.VAR'
9654 ! include 'COMMON.GEO'
9655 real(kind=8),dimension(2,2) :: dipi,dipj,auxmat
9656 real(kind=8),dimension(2) :: dipderi,dipderj,auxvec
9657 integer :: i,j,jj,iii,jjj,kkk,lll,iti1,itj1
9659 allocate(dip(4,maxconts,nres),dipderg(4,maxconts,nres))
9660 allocate(dipderx(3,5,4,maxconts,nres))
9663 iti1 = itortyp(itype(i+1,1))
9664 if (j.lt.nres-1) then
9665 itj1 = itype2loc(itype(j+1,1))
9670 dipi(iii,1)=Ub2(iii,i)
9671 dipderi(iii)=Ub2der(iii,i)
9672 dipi(iii,2)=b1(iii,iti1)
9673 dipj(iii,1)=Ub2(iii,j)
9674 dipderj(iii)=Ub2der(iii,j)
9675 dipj(iii,2)=b1(iii,itj1)
9679 call matvec2(a_chuj(1,1,jj,i),dipj(1,iii),auxvec(1))
9682 dip(kkk,jj,i)=scalar2(dipi(1,jjj),auxvec(1))
9689 call matvec2(a_chuj_der(1,1,lll,kkk,jj,i),dipj(1,iii),&
9693 dipderx(lll,kkk,mmm,jj,i)=scalar2(dipi(1,jjj),auxvec(1))
9698 call transpose2(a_chuj(1,1,jj,i),auxmat(1,1))
9699 call matvec2(auxmat(1,1),dipderi(1),auxvec(1))
9701 dipderg(iii,jj,i)=scalar2(auxvec(1),dipj(1,iii))
9703 call matvec2(a_chuj(1,1,jj,i),dipderj(1),auxvec(1))
9705 dipderg(iii+2,jj,i)=scalar2(auxvec(1),dipi(1,iii))
9708 end subroutine dipole
9710 !-----------------------------------------------------------------------------
9711 subroutine calc_eello(i,j,k,l,jj,kk)
9713 ! This subroutine computes matrices and vectors needed to calculate
9714 ! the fourth-, fifth-, and sixth-order local-electrostatic terms.
9717 ! implicit real(kind=8) (a-h,o-z)
9718 ! include 'DIMENSIONS'
9719 ! include 'COMMON.IOUNITS'
9720 ! include 'COMMON.CHAIN'
9721 ! include 'COMMON.DERIV'
9722 ! include 'COMMON.INTERACT'
9723 ! include 'COMMON.CONTACTS'
9724 ! include 'COMMON.TORSION'
9725 ! include 'COMMON.VAR'
9726 ! include 'COMMON.GEO'
9727 ! include 'COMMON.FFIELD'
9728 real(kind=8),dimension(2,2) :: aa1,aa2,aa1t,aa2t,auxmat
9729 real(kind=8),dimension(2,2,3,5) :: aa1tder,aa2tder
9730 integer :: i,j,k,l,jj,kk,iii,jjj,kkk,lll,iti,itk1,itj,itl,itl1,&
9733 !el common /kutas/ lprn
9734 !d write (iout,*) 'calc_eello: i=',i,' j=',j,' k=',k,' l=',l,
9735 !d & ' jj=',jj,' kk=',kk
9736 !d if (i.ne.2 .or. j.ne.4 .or. k.ne.3 .or. l.ne.5) return
9737 !d write (iout,*) "a_chujij",((a_chuj(iii,jjj,jj,i),iii=1,2),jjj=1,2)
9738 !d write (iout,*) "a_chujkl",((a_chuj(iii,jjj,kk,k),iii=1,2),jjj=1,2)
9741 aa1(iii,jjj)=a_chuj(iii,jjj,jj,i)
9742 aa2(iii,jjj)=a_chuj(iii,jjj,kk,k)
9745 call transpose2(aa1(1,1),aa1t(1,1))
9746 call transpose2(aa2(1,1),aa2t(1,1))
9749 call transpose2(a_chuj_der(1,1,lll,kkk,jj,i),&
9750 aa1tder(1,1,lll,kkk))
9751 call transpose2(a_chuj_der(1,1,lll,kkk,kk,k),&
9752 aa2tder(1,1,lll,kkk))
9756 ! parallel orientation of the two CA-CA-CA frames.
9758 iti=itortyp(itype(i,1))
9762 itk1=itortyp(itype(k+1,1))
9763 itj=itortyp(itype(j,1))
9764 if (l.lt.nres-1) then
9765 itl1=itortyp(itype(l+1,1))
9769 ! A1 kernel(j+1) A2T
9771 !d write (iout,'(3f10.5,5x,3f10.5)')
9772 !d & (EUg(iii,jjj,k),jjj=1,2),(EUg(iii,jjj,l),jjj=1,2)
9774 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),&
9775 aa2tder(1,1,1,1),1,.false.,EUg(1,1,l),EUgder(1,1,l),&
9776 AEA(1,1,1),AEAderg(1,1,1),AEAderx(1,1,1,1,1,1))
9777 ! Following matrices are needed only for 6-th order cumulants
9778 IF (wcorr6.gt.0.0d0) THEN
9779 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),&
9780 aa2tder(1,1,1,1),1,.false.,EUgC(1,1,l),EUgCder(1,1,l),&
9781 AECA(1,1,1),AECAderg(1,1,1),AECAderx(1,1,1,1,1,1))
9782 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),&
9783 aa2tder(1,1,1,1),2,.false.,Ug2DtEUg(1,1,l),&
9784 Ug2DtEUgder(1,1,1,l),ADtEA(1,1,1),ADtEAderg(1,1,1,1),&
9785 ADtEAderx(1,1,1,1,1,1))
9787 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),&
9788 aa2tder(1,1,1,1),2,.false.,DtUg2EUg(1,1,l),&
9789 DtUg2EUgder(1,1,1,l),ADtEA1(1,1,1),ADtEA1derg(1,1,1,1),&
9790 ADtEA1derx(1,1,1,1,1,1))
9792 ! End 6-th order cumulants
9795 !d write (2,*) 'In calc_eello6'
9797 !d write (2,*) 'iii=',iii
9799 !d write (2,*) 'kkk=',kkk
9801 !d write (2,'(3(2f10.5),5x)')
9802 !d & ((ADtEA1derx(jjj,mmm,lll,kkk,iii,1),mmm=1,2),lll=1,3)
9807 call transpose2(EUgder(1,1,k),auxmat(1,1))
9808 call matmat2(auxmat(1,1),AEA(1,1,1),EAEAderg(1,1,1,1))
9809 call transpose2(EUg(1,1,k),auxmat(1,1))
9810 call matmat2(auxmat(1,1),AEA(1,1,1),EAEA(1,1,1))
9811 call matmat2(auxmat(1,1),AEAderg(1,1,1),EAEAderg(1,1,2,1))
9815 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,1),&
9816 EAEAderx(1,1,lll,kkk,iii,1))
9820 ! A1T kernel(i+1) A2
9821 call kernel(aa1t(1,1),aa2(1,1),aa1tder(1,1,1,1),&
9822 a_chuj_der(1,1,1,1,kk,k),1,.false.,EUg(1,1,k),EUgder(1,1,k),&
9823 AEA(1,1,2),AEAderg(1,1,2),AEAderx(1,1,1,1,1,2))
9824 ! Following matrices are needed only for 6-th order cumulants
9825 IF (wcorr6.gt.0.0d0) THEN
9826 call kernel(aa1t(1,1),aa2(1,1),aa1tder(1,1,1,1),&
9827 a_chuj_der(1,1,1,1,kk,k),1,.false.,EUgC(1,1,k),EUgCder(1,1,k),&
9828 AECA(1,1,2),AECAderg(1,1,2),AECAderx(1,1,1,1,1,2))
9829 call kernel(aa1t(1,1),aa2(1,1),aa1tder(1,1,1,1),&
9830 a_chuj_der(1,1,1,1,kk,k),2,.false.,Ug2DtEUg(1,1,k),&
9831 Ug2DtEUgder(1,1,1,k),ADtEA(1,1,2),ADtEAderg(1,1,1,2),&
9832 ADtEAderx(1,1,1,1,1,2))
9833 call kernel(aa1t(1,1),aa2(1,1),aa1tder(1,1,1,1),&
9834 a_chuj_der(1,1,1,1,kk,k),2,.false.,DtUg2EUg(1,1,k),&
9835 DtUg2EUgder(1,1,1,k),ADtEA1(1,1,2),ADtEA1derg(1,1,1,2),&
9836 ADtEA1derx(1,1,1,1,1,2))
9838 ! End 6-th order cumulants
9839 call transpose2(EUgder(1,1,l),auxmat(1,1))
9840 call matmat2(auxmat(1,1),AEA(1,1,2),EAEAderg(1,1,1,2))
9841 call transpose2(EUg(1,1,l),auxmat(1,1))
9842 call matmat2(auxmat(1,1),AEA(1,1,2),EAEA(1,1,2))
9843 call matmat2(auxmat(1,1),AEAderg(1,1,2),EAEAderg(1,1,2,2))
9847 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,2),&
9848 EAEAderx(1,1,lll,kkk,iii,2))
9853 ! Calculate the vectors and their derivatives in virtual-bond dihedral angles.
9854 ! They are needed only when the fifth- or the sixth-order cumulants are
9856 IF (wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0) THEN
9857 call transpose2(AEA(1,1,1),auxmat(1,1))
9858 call matvec2(auxmat(1,1),b1(1,iti),AEAb1(1,1,1))
9859 call matvec2(auxmat(1,1),Ub2(1,i),AEAb2(1,1,1))
9860 call matvec2(auxmat(1,1),Ub2der(1,i),AEAb2derg(1,2,1,1))
9861 call transpose2(AEAderg(1,1,1),auxmat(1,1))
9862 call matvec2(auxmat(1,1),b1(1,iti),AEAb1derg(1,1,1))
9863 call matvec2(auxmat(1,1),Ub2(1,i),AEAb2derg(1,1,1,1))
9864 call matvec2(AEA(1,1,1),b1(1,itk1),AEAb1(1,2,1))
9865 call matvec2(AEAderg(1,1,1),b1(1,itk1),AEAb1derg(1,2,1))
9866 call matvec2(AEA(1,1,1),Ub2(1,k+1),AEAb2(1,2,1))
9867 call matvec2(AEAderg(1,1,1),Ub2(1,k+1),AEAb2derg(1,1,2,1))
9868 call matvec2(AEA(1,1,1),Ub2der(1,k+1),AEAb2derg(1,2,2,1))
9869 call transpose2(AEA(1,1,2),auxmat(1,1))
9870 call matvec2(auxmat(1,1),b1(1,itj),AEAb1(1,1,2))
9871 call matvec2(auxmat(1,1),Ub2(1,j),AEAb2(1,1,2))
9872 call matvec2(auxmat(1,1),Ub2der(1,j),AEAb2derg(1,2,1,2))
9873 call transpose2(AEAderg(1,1,2),auxmat(1,1))
9874 call matvec2(auxmat(1,1),b1(1,itj),AEAb1derg(1,1,2))
9875 call matvec2(auxmat(1,1),Ub2(1,j),AEAb2derg(1,1,1,2))
9876 call matvec2(AEA(1,1,2),b1(1,itl1),AEAb1(1,2,2))
9877 call matvec2(AEAderg(1,1,2),b1(1,itl1),AEAb1derg(1,2,2))
9878 call matvec2(AEA(1,1,2),Ub2(1,l+1),AEAb2(1,2,2))
9879 call matvec2(AEAderg(1,1,2),Ub2(1,l+1),AEAb2derg(1,1,2,2))
9880 call matvec2(AEA(1,1,2),Ub2der(1,l+1),AEAb2derg(1,2,2,2))
9881 ! Calculate the Cartesian derivatives of the vectors.
9885 call transpose2(AEAderx(1,1,lll,kkk,iii,1),auxmat(1,1))
9886 call matvec2(auxmat(1,1),b1(1,iti),&
9887 AEAb1derx(1,lll,kkk,iii,1,1))
9888 call matvec2(auxmat(1,1),Ub2(1,i),&
9889 AEAb2derx(1,lll,kkk,iii,1,1))
9890 call matvec2(AEAderx(1,1,lll,kkk,iii,1),b1(1,itk1),&
9891 AEAb1derx(1,lll,kkk,iii,2,1))
9892 call matvec2(AEAderx(1,1,lll,kkk,iii,1),Ub2(1,k+1),&
9893 AEAb2derx(1,lll,kkk,iii,2,1))
9894 call transpose2(AEAderx(1,1,lll,kkk,iii,2),auxmat(1,1))
9895 call matvec2(auxmat(1,1),b1(1,itj),&
9896 AEAb1derx(1,lll,kkk,iii,1,2))
9897 call matvec2(auxmat(1,1),Ub2(1,j),&
9898 AEAb2derx(1,lll,kkk,iii,1,2))
9899 call matvec2(AEAderx(1,1,lll,kkk,iii,2),b1(1,itl1),&
9900 AEAb1derx(1,lll,kkk,iii,2,2))
9901 call matvec2(AEAderx(1,1,lll,kkk,iii,2),Ub2(1,l+1),&
9902 AEAb2derx(1,lll,kkk,iii,2,2))
9909 ! Antiparallel orientation of the two CA-CA-CA frames.
9911 iti=itortyp(itype(i,1))
9915 itk1=itortyp(itype(k+1,1))
9916 itl=itortyp(itype(l,1))
9917 itj=itortyp(itype(j,1))
9918 if (j.lt.nres-1) then
9919 itj1=itortyp(itype(j+1,1))
9923 ! A2 kernel(j-1)T A1T
9924 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),&
9925 aa2tder(1,1,1,1),1,.true.,EUg(1,1,j),EUgder(1,1,j),&
9926 AEA(1,1,1),AEAderg(1,1,1),AEAderx(1,1,1,1,1,1))
9927 ! Following matrices are needed only for 6-th order cumulants
9928 IF (wcorr6.gt.0.0d0 .or. (wturn6.gt.0.0d0 .and. &
9929 j.eq.i+4 .and. l.eq.i+3)) THEN
9930 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),&
9931 aa2tder(1,1,1,1),1,.true.,EUgC(1,1,j),EUgCder(1,1,j),&
9932 AECA(1,1,1),AECAderg(1,1,1),AECAderx(1,1,1,1,1,1))
9933 call kernel(aa2(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),&
9934 aa2tder(1,1,1,1),2,.true.,Ug2DtEUg(1,1,j),&
9935 Ug2DtEUgder(1,1,1,j),ADtEA(1,1,1),ADtEAderg(1,1,1,1),&
9936 ADtEAderx(1,1,1,1,1,1))
9937 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),&
9938 aa2tder(1,1,1,1),2,.true.,DtUg2EUg(1,1,j),&
9939 DtUg2EUgder(1,1,1,j),ADtEA1(1,1,1),ADtEA1derg(1,1,1,1),&
9940 ADtEA1derx(1,1,1,1,1,1))
9942 ! End 6-th order cumulants
9943 call transpose2(EUgder(1,1,k),auxmat(1,1))
9944 call matmat2(auxmat(1,1),AEA(1,1,1),EAEAderg(1,1,1,1))
9945 call transpose2(EUg(1,1,k),auxmat(1,1))
9946 call matmat2(auxmat(1,1),AEA(1,1,1),EAEA(1,1,1))
9947 call matmat2(auxmat(1,1),AEAderg(1,1,1),EAEAderg(1,1,2,1))
9951 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,1),&
9952 EAEAderx(1,1,lll,kkk,iii,1))
9956 ! A2T kernel(i+1)T A1
9957 call kernel(aa2t(1,1),aa1(1,1),aa2tder(1,1,1,1),&
9958 a_chuj_der(1,1,1,1,jj,i),1,.true.,EUg(1,1,k),EUgder(1,1,k),&
9959 AEA(1,1,2),AEAderg(1,1,2),AEAderx(1,1,1,1,1,2))
9960 ! Following matrices are needed only for 6-th order cumulants
9961 IF (wcorr6.gt.0.0d0 .or. (wturn6.gt.0.0d0 .and. &
9962 j.eq.i+4 .and. l.eq.i+3)) THEN
9963 call kernel(aa2t(1,1),aa1(1,1),aa2tder(1,1,1,1),&
9964 a_chuj_der(1,1,1,1,jj,i),1,.true.,EUgC(1,1,k),EUgCder(1,1,k),&
9965 AECA(1,1,2),AECAderg(1,1,2),AECAderx(1,1,1,1,1,2))
9966 call kernel(aa2t(1,1),aa1(1,1),aa2tder(1,1,1,1),&
9967 a_chuj_der(1,1,1,1,jj,i),2,.true.,Ug2DtEUg(1,1,k),&
9968 Ug2DtEUgder(1,1,1,k),ADtEA(1,1,2),ADtEAderg(1,1,1,2),&
9969 ADtEAderx(1,1,1,1,1,2))
9970 call kernel(aa2t(1,1),aa1(1,1),aa2tder(1,1,1,1),&
9971 a_chuj_der(1,1,1,1,jj,i),2,.true.,DtUg2EUg(1,1,k),&
9972 DtUg2EUgder(1,1,1,k),ADtEA1(1,1,2),ADtEA1derg(1,1,1,2),&
9973 ADtEA1derx(1,1,1,1,1,2))
9975 ! End 6-th order cumulants
9976 call transpose2(EUgder(1,1,j),auxmat(1,1))
9977 call matmat2(auxmat(1,1),AEA(1,1,1),EAEAderg(1,1,2,2))
9978 call transpose2(EUg(1,1,j),auxmat(1,1))
9979 call matmat2(auxmat(1,1),AEA(1,1,2),EAEA(1,1,2))
9980 call matmat2(auxmat(1,1),AEAderg(1,1,2),EAEAderg(1,1,2,2))
9984 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,2),&
9985 EAEAderx(1,1,lll,kkk,iii,2))
9990 ! Calculate the vectors and their derivatives in virtual-bond dihedral angles.
9991 ! They are needed only when the fifth- or the sixth-order cumulants are
9993 IF (wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0 .or. &
9994 (wturn6.gt.0.0d0 .and. j.eq.i+4 .and. l.eq.i+3)) THEN
9995 call transpose2(AEA(1,1,1),auxmat(1,1))
9996 call matvec2(auxmat(1,1),b1(1,iti),AEAb1(1,1,1))
9997 call matvec2(auxmat(1,1),Ub2(1,i),AEAb2(1,1,1))
9998 call matvec2(auxmat(1,1),Ub2der(1,i),AEAb2derg(1,2,1,1))
9999 call transpose2(AEAderg(1,1,1),auxmat(1,1))
10000 call matvec2(auxmat(1,1),b1(1,iti),AEAb1derg(1,1,1))
10001 call matvec2(auxmat(1,1),Ub2(1,i),AEAb2derg(1,1,1,1))
10002 call matvec2(AEA(1,1,1),b1(1,itk1),AEAb1(1,2,1))
10003 call matvec2(AEAderg(1,1,1),b1(1,itk1),AEAb1derg(1,2,1))
10004 call matvec2(AEA(1,1,1),Ub2(1,k+1),AEAb2(1,2,1))
10005 call matvec2(AEAderg(1,1,1),Ub2(1,k+1),AEAb2derg(1,1,2,1))
10006 call matvec2(AEA(1,1,1),Ub2der(1,k+1),AEAb2derg(1,2,2,1))
10007 call transpose2(AEA(1,1,2),auxmat(1,1))
10008 call matvec2(auxmat(1,1),b1(1,itj1),AEAb1(1,1,2))
10009 call matvec2(auxmat(1,1),Ub2(1,l),AEAb2(1,1,2))
10010 call matvec2(auxmat(1,1),Ub2der(1,l),AEAb2derg(1,2,1,2))
10011 call transpose2(AEAderg(1,1,2),auxmat(1,1))
10012 call matvec2(auxmat(1,1),b1(1,itl),AEAb1(1,1,2))
10013 call matvec2(auxmat(1,1),Ub2(1,l),AEAb2derg(1,1,1,2))
10014 call matvec2(AEA(1,1,2),b1(1,itj1),AEAb1(1,2,2))
10015 call matvec2(AEAderg(1,1,2),b1(1,itj1),AEAb1derg(1,2,2))
10016 call matvec2(AEA(1,1,2),Ub2(1,j),AEAb2(1,2,2))
10017 call matvec2(AEAderg(1,1,2),Ub2(1,j),AEAb2derg(1,1,2,2))
10018 call matvec2(AEA(1,1,2),Ub2der(1,j),AEAb2derg(1,2,2,2))
10019 ! Calculate the Cartesian derivatives of the vectors.
10023 call transpose2(AEAderx(1,1,lll,kkk,iii,1),auxmat(1,1))
10024 call matvec2(auxmat(1,1),b1(1,iti),&
10025 AEAb1derx(1,lll,kkk,iii,1,1))
10026 call matvec2(auxmat(1,1),Ub2(1,i),&
10027 AEAb2derx(1,lll,kkk,iii,1,1))
10028 call matvec2(AEAderx(1,1,lll,kkk,iii,1),b1(1,itk1),&
10029 AEAb1derx(1,lll,kkk,iii,2,1))
10030 call matvec2(AEAderx(1,1,lll,kkk,iii,1),Ub2(1,k+1),&
10031 AEAb2derx(1,lll,kkk,iii,2,1))
10032 call transpose2(AEAderx(1,1,lll,kkk,iii,2),auxmat(1,1))
10033 call matvec2(auxmat(1,1),b1(1,itl),&
10034 AEAb1derx(1,lll,kkk,iii,1,2))
10035 call matvec2(auxmat(1,1),Ub2(1,l),&
10036 AEAb2derx(1,lll,kkk,iii,1,2))
10037 call matvec2(AEAderx(1,1,lll,kkk,iii,2),b1(1,itj1),&
10038 AEAb1derx(1,lll,kkk,iii,2,2))
10039 call matvec2(AEAderx(1,1,lll,kkk,iii,2),Ub2(1,j),&
10040 AEAb2derx(1,lll,kkk,iii,2,2))
10048 end subroutine calc_eello
10049 !-----------------------------------------------------------------------------
10050 subroutine kernel(aa1,aa2t,aa1derx,aa2tderx,nderg,transp,KK,KKderg,AKA,AKAderg,AKAderx)
10055 real(kind=8),dimension(2,2) :: aa1,aa2t,KK,AKA
10056 real(kind=8),dimension(2,2,3,5) :: aa1derx,aa2tderx
10057 real(kind=8),dimension(2,2,3,5,2) :: AKAderx
10058 real(kind=8),dimension(2,2,nderg) :: KKderg,AKAderg
10059 integer :: iii,kkk,lll
10061 !el logical :: lprn
10062 !el common /kutas/ lprn
10063 call prodmat3(aa1(1,1),aa2t(1,1),KK(1,1),transp,AKA(1,1))
10065 call prodmat3(aa1(1,1),aa2t(1,1),KKderg(1,1,iii),transp,&
10068 !d if (lprn) write (2,*) 'In kernel'
10070 !d if (lprn) write (2,*) 'kkk=',kkk
10072 call prodmat3(aa1derx(1,1,lll,kkk),aa2t(1,1),&
10073 KK(1,1),transp,AKAderx(1,1,lll,kkk,1))
10075 !d write (2,*) 'lll=',lll
10076 !d write (2,*) 'iii=1'
10078 !d write (2,'(3(2f10.5),5x)')
10079 !d & (AKAderx(jjj,mmm,lll,kkk,1),mmm=1,2)
10082 call prodmat3(aa1(1,1),aa2tderx(1,1,lll,kkk),&
10083 KK(1,1),transp,AKAderx(1,1,lll,kkk,2))
10085 !d write (2,*) 'lll=',lll
10086 !d write (2,*) 'iii=2'
10088 !d write (2,'(3(2f10.5),5x)')
10089 !d & (AKAderx(jjj,mmm,lll,kkk,2),mmm=1,2)
10095 end subroutine kernel
10096 !-----------------------------------------------------------------------------
10097 real(kind=8) function eello4(i,j,k,l,jj,kk)
10098 ! implicit real(kind=8) (a-h,o-z)
10099 ! include 'DIMENSIONS'
10100 ! include 'COMMON.IOUNITS'
10101 ! include 'COMMON.CHAIN'
10102 ! include 'COMMON.DERIV'
10103 ! include 'COMMON.INTERACT'
10104 ! include 'COMMON.CONTACTS'
10105 ! include 'COMMON.TORSION'
10106 ! include 'COMMON.VAR'
10107 ! include 'COMMON.GEO'
10108 real(kind=8),dimension(2,2) :: pizda
10109 real(kind=8),dimension(3) :: ggg1,ggg2
10110 real(kind=8) :: eel4,glongij,glongkl
10111 integer :: i,j,k,l,jj,kk,iii,kkk,lll,j1,j2,l1,l2,ll
10112 !d if (i.ne.1 .or. j.ne.5 .or. k.ne.2 .or.l.ne.4) then
10116 !d print *,'eello4:',i,j,k,l,jj,kk
10117 !d write (2,*) 'i',i,' j',j,' k',k,' l',l
10118 !d call checkint4(i,j,k,l,jj,kk,eel4_num)
10119 !old eij=facont_hb(jj,i)
10120 !old ekl=facont_hb(kk,k)
10122 eel4=-EAEA(1,1,1)-EAEA(2,2,1)
10123 !d eel41=-EAEA(1,1,2)-EAEA(2,2,2)
10124 gcorr_loc(k-1)=gcorr_loc(k-1) &
10125 -ekont*(EAEAderg(1,1,1,1)+EAEAderg(2,2,1,1))
10127 gcorr_loc(l-1)=gcorr_loc(l-1) &
10128 -ekont*(EAEAderg(1,1,2,1)+EAEAderg(2,2,2,1))
10130 gcorr_loc(j-1)=gcorr_loc(j-1) &
10131 -ekont*(EAEAderg(1,1,2,1)+EAEAderg(2,2,2,1))
10136 derx(lll,kkk,iii)=-EAEAderx(1,1,lll,kkk,iii,1) &
10137 -EAEAderx(2,2,lll,kkk,iii,1)
10138 !d derx(lll,kkk,iii)=0.0d0
10142 !d gcorr_loc(l-1)=0.0d0
10143 !d gcorr_loc(j-1)=0.0d0
10144 !d gcorr_loc(k-1)=0.0d0
10146 !d write (iout,*)'Contacts have occurred for peptide groups',
10147 !d & i,j,' fcont:',eij,' eij',' and ',k,l,
10148 !d & ' fcont ',ekl,' eel4=',eel4,' eel4_num',16*eel4_num
10149 if (j.lt.nres-1) then
10156 if (l.lt.nres-1) then
10164 !grad ggg1(ll)=eel4*g_contij(ll,1)
10165 !grad ggg2(ll)=eel4*g_contij(ll,2)
10166 glongij=eel4*g_contij(ll,1)+ekont*derx(ll,1,1)
10167 glongkl=eel4*g_contij(ll,2)+ekont*derx(ll,1,2)
10168 !grad ghalf=0.5d0*ggg1(ll)
10169 gradcorr(ll,i)=gradcorr(ll,i)+ekont*derx(ll,2,1)
10170 gradcorr(ll,i+1)=gradcorr(ll,i+1)+ekont*derx(ll,3,1)
10171 gradcorr(ll,j)=gradcorr(ll,j)+ekont*derx(ll,4,1)
10172 gradcorr(ll,j1)=gradcorr(ll,j1)+ekont*derx(ll,5,1)
10173 gradcorr_long(ll,j)=gradcorr_long(ll,j)+glongij
10174 gradcorr_long(ll,i)=gradcorr_long(ll,i)-glongij
10175 !grad ghalf=0.5d0*ggg2(ll)
10176 gradcorr(ll,k)=gradcorr(ll,k)+ekont*derx(ll,2,2)
10177 gradcorr(ll,k+1)=gradcorr(ll,k+1)+ekont*derx(ll,3,2)
10178 gradcorr(ll,l)=gradcorr(ll,l)+ekont*derx(ll,4,2)
10179 gradcorr(ll,l1)=gradcorr(ll,l1)+ekont*derx(ll,5,2)
10180 gradcorr_long(ll,l)=gradcorr_long(ll,l)+glongkl
10181 gradcorr_long(ll,k)=gradcorr_long(ll,k)-glongkl
10185 !grad gradcorr(ll,m)=gradcorr(ll,m)+ggg1(ll)
10190 !grad gradcorr(ll,m)=gradcorr(ll,m)+ggg2(ll)
10195 !grad gradcorr(ll,m)=gradcorr(ll,m)+ekont*derx(ll,1,1)
10200 !grad gradcorr(ll,m)=gradcorr(ll,m)+ekont*derx(ll,1,2)
10204 !d write (2,*) iii,gcorr_loc(iii)
10207 !d write (2,*) 'ekont',ekont
10208 !d write (iout,*) 'eello4',ekont*eel4
10210 end function eello4
10211 !-----------------------------------------------------------------------------
10212 real(kind=8) function eello5(i,j,k,l,jj,kk)
10213 ! implicit real(kind=8) (a-h,o-z)
10214 ! include 'DIMENSIONS'
10215 ! include 'COMMON.IOUNITS'
10216 ! include 'COMMON.CHAIN'
10217 ! include 'COMMON.DERIV'
10218 ! include 'COMMON.INTERACT'
10219 ! include 'COMMON.CONTACTS'
10220 ! include 'COMMON.TORSION'
10221 ! include 'COMMON.VAR'
10222 ! include 'COMMON.GEO'
10223 real(kind=8),dimension(2,2) :: pizda,auxmat,auxmat1
10224 real(kind=8),dimension(2) :: vv
10225 real(kind=8),dimension(3) :: ggg1,ggg2
10226 real(kind=8) :: eello5_1,eello5_2,eello5_3,eello5_4,eel5
10227 real(kind=8) :: gradcorr5ij,gradcorr5kl,ghalf
10228 integer :: i,j,k,l,jj,kk,itk,itl,itj,iii,kkk,lll,j1,j2,l1,l2,ll
10229 !CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
10231 ! Parallel chains C
10234 ! /l\ / \ \ / \ / \ / C
10235 ! / \ / \ \ / \ / \ / C
10236 ! j| o |l1 | o | o| o | | o |o C
10237 ! \ |/k\| |/ \| / |/ \| |/ \| C
10238 ! \i/ \ / \ / / \ / \ C
10240 ! (I) (II) (III) (IV) C
10242 ! eello5_1 eello5_2 eello5_3 eello5_4 C
10244 ! Antiparallel chains C
10247 ! /j\ / \ \ / \ / \ / C
10248 ! / \ / \ \ / \ / \ / C
10249 ! j1| o |l | o | o| o | | o |o C
10250 ! \ |/k\| |/ \| / |/ \| |/ \| C
10251 ! \i/ \ / \ / / \ / \ C
10253 ! (I) (II) (III) (IV) C
10255 ! eello5_1 eello5_2 eello5_3 eello5_4 C
10257 ! o denotes a local interaction, vertical lines an electrostatic interaction. C
10259 !CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
10260 !d if (i.ne.2 .or. j.ne.6 .or. k.ne.3 .or. l.ne.5) then
10265 !d & 'EELLO5: Contacts have occurred for peptide groups',i,j,
10267 itk=itortyp(itype(k,1))
10268 itl=itortyp(itype(l,1))
10269 itj=itortyp(itype(j,1))
10274 !d call checkint5(i,j,k,l,jj,kk,eel5_1_num,eel5_2_num,
10275 !d & eel5_3_num,eel5_4_num)
10279 derx(lll,kkk,iii)=0.0d0
10283 !d eij=facont_hb(jj,i)
10284 !d ekl=facont_hb(kk,k)
10286 !d write (iout,*)'Contacts have occurred for peptide groups',
10287 !d & i,j,' fcont:',eij,' eij',' and ',k,l
10289 ! Contribution from the graph I.
10290 !d write (2,*) 'AEA ',AEA(1,1,1),AEA(2,1,1),AEA(1,2,1),AEA(2,2,1)
10291 !d write (2,*) 'AEAb2',AEAb2(1,1,1),AEAb2(2,1,1)
10292 call transpose2(EUg(1,1,k),auxmat(1,1))
10293 call matmat2(AEA(1,1,1),auxmat(1,1),pizda(1,1))
10294 vv(1)=pizda(1,1)-pizda(2,2)
10295 vv(2)=pizda(1,2)+pizda(2,1)
10296 eello5_1=scalar2(AEAb2(1,1,1),Ub2(1,k)) &
10297 +0.5d0*scalar2(vv(1),Dtobr2(1,i))
10298 ! Explicit gradient in virtual-dihedral angles.
10299 if (i.gt.1) g_corr5_loc(i-1)=g_corr5_loc(i-1) &
10300 +ekont*(scalar2(AEAb2derg(1,2,1,1),Ub2(1,k)) &
10301 +0.5d0*scalar2(vv(1),Dtobr2der(1,i)))
10302 call transpose2(EUgder(1,1,k),auxmat1(1,1))
10303 call matmat2(AEA(1,1,1),auxmat1(1,1),pizda(1,1))
10304 vv(1)=pizda(1,1)-pizda(2,2)
10305 vv(2)=pizda(1,2)+pizda(2,1)
10306 g_corr5_loc(k-1)=g_corr5_loc(k-1) &
10307 +ekont*(scalar2(AEAb2(1,1,1),Ub2der(1,k)) &
10308 +0.5d0*scalar2(vv(1),Dtobr2(1,i)))
10309 call matmat2(AEAderg(1,1,1),auxmat(1,1),pizda(1,1))
10310 vv(1)=pizda(1,1)-pizda(2,2)
10311 vv(2)=pizda(1,2)+pizda(2,1)
10313 if (l.lt.nres-1) g_corr5_loc(l-1)=g_corr5_loc(l-1) &
10314 +ekont*(scalar2(AEAb2derg(1,1,1,1),Ub2(1,k)) &
10315 +0.5d0*scalar2(vv(1),Dtobr2(1,i)))
10317 if (j.lt.nres-1) g_corr5_loc(j-1)=g_corr5_loc(j-1) &
10318 +ekont*(scalar2(AEAb2derg(1,1,1,1),Ub2(1,k)) &
10319 +0.5d0*scalar2(vv(1),Dtobr2(1,i)))
10321 ! Cartesian gradient
10325 call matmat2(AEAderx(1,1,lll,kkk,iii,1),auxmat(1,1),&
10327 vv(1)=pizda(1,1)-pizda(2,2)
10328 vv(2)=pizda(1,2)+pizda(2,1)
10329 derx(lll,kkk,iii)=derx(lll,kkk,iii) &
10330 +scalar2(AEAb2derx(1,lll,kkk,iii,1,1),Ub2(1,k)) &
10331 +0.5d0*scalar2(vv(1),Dtobr2(1,i))
10337 ! Contribution from graph II
10338 call transpose2(EE(1,1,itk),auxmat(1,1))
10339 call matmat2(auxmat(1,1),AEA(1,1,1),pizda(1,1))
10340 vv(1)=pizda(1,1)+pizda(2,2)
10341 vv(2)=pizda(2,1)-pizda(1,2)
10342 eello5_2=scalar2(AEAb1(1,2,1),b1(1,itk)) &
10343 -0.5d0*scalar2(vv(1),Ctobr(1,k))
10344 ! Explicit gradient in virtual-dihedral angles.
10345 g_corr5_loc(k-1)=g_corr5_loc(k-1) &
10346 -0.5d0*ekont*scalar2(vv(1),Ctobrder(1,k))
10347 call matmat2(auxmat(1,1),AEAderg(1,1,1),pizda(1,1))
10348 vv(1)=pizda(1,1)+pizda(2,2)
10349 vv(2)=pizda(2,1)-pizda(1,2)
10351 g_corr5_loc(l-1)=g_corr5_loc(l-1) &
10352 +ekont*(scalar2(AEAb1derg(1,2,1),b1(1,itk)) &
10353 -0.5d0*scalar2(vv(1),Ctobr(1,k)))
10355 g_corr5_loc(j-1)=g_corr5_loc(j-1) &
10356 +ekont*(scalar2(AEAb1derg(1,2,1),b1(1,itk)) &
10357 -0.5d0*scalar2(vv(1),Ctobr(1,k)))
10359 ! Cartesian gradient
10363 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,1),&
10365 vv(1)=pizda(1,1)+pizda(2,2)
10366 vv(2)=pizda(2,1)-pizda(1,2)
10367 derx(lll,kkk,iii)=derx(lll,kkk,iii) &
10368 +scalar2(AEAb1derx(1,lll,kkk,iii,2,1),b1(1,itk)) &
10369 -0.5d0*scalar2(vv(1),Ctobr(1,k))
10377 ! Parallel orientation
10378 ! Contribution from graph III
10379 call transpose2(EUg(1,1,l),auxmat(1,1))
10380 call matmat2(AEA(1,1,2),auxmat(1,1),pizda(1,1))
10381 vv(1)=pizda(1,1)-pizda(2,2)
10382 vv(2)=pizda(1,2)+pizda(2,1)
10383 eello5_3=scalar2(AEAb2(1,1,2),Ub2(1,l)) &
10384 +0.5d0*scalar2(vv(1),Dtobr2(1,j))
10385 ! Explicit gradient in virtual-dihedral angles.
10386 g_corr5_loc(j-1)=g_corr5_loc(j-1) &
10387 +ekont*(scalar2(AEAb2derg(1,2,1,2),Ub2(1,l)) &
10388 +0.5d0*scalar2(vv(1),Dtobr2der(1,j)))
10389 call matmat2(AEAderg(1,1,2),auxmat(1,1),pizda(1,1))
10390 vv(1)=pizda(1,1)-pizda(2,2)
10391 vv(2)=pizda(1,2)+pizda(2,1)
10392 g_corr5_loc(k-1)=g_corr5_loc(k-1) &
10393 +ekont*(scalar2(AEAb2derg(1,1,1,2),Ub2(1,l)) &
10394 +0.5d0*scalar2(vv(1),Dtobr2(1,j)))
10395 call transpose2(EUgder(1,1,l),auxmat1(1,1))
10396 call matmat2(AEA(1,1,2),auxmat1(1,1),pizda(1,1))
10397 vv(1)=pizda(1,1)-pizda(2,2)
10398 vv(2)=pizda(1,2)+pizda(2,1)
10399 g_corr5_loc(l-1)=g_corr5_loc(l-1) &
10400 +ekont*(scalar2(AEAb2(1,1,2),Ub2der(1,l)) &
10401 +0.5d0*scalar2(vv(1),Dtobr2(1,j)))
10402 ! Cartesian gradient
10406 call matmat2(AEAderx(1,1,lll,kkk,iii,2),auxmat(1,1),&
10408 vv(1)=pizda(1,1)-pizda(2,2)
10409 vv(2)=pizda(1,2)+pizda(2,1)
10410 derx(lll,kkk,iii)=derx(lll,kkk,iii) &
10411 +scalar2(AEAb2derx(1,lll,kkk,iii,1,2),Ub2(1,l)) &
10412 +0.5d0*scalar2(vv(1),Dtobr2(1,j))
10417 ! Contribution from graph IV
10419 call transpose2(EE(1,1,itl),auxmat(1,1))
10420 call matmat2(auxmat(1,1),AEA(1,1,2),pizda(1,1))
10421 vv(1)=pizda(1,1)+pizda(2,2)
10422 vv(2)=pizda(2,1)-pizda(1,2)
10423 eello5_4=scalar2(AEAb1(1,2,2),b1(1,itl)) &
10424 -0.5d0*scalar2(vv(1),Ctobr(1,l))
10425 ! Explicit gradient in virtual-dihedral angles.
10426 g_corr5_loc(l-1)=g_corr5_loc(l-1) &
10427 -0.5d0*ekont*scalar2(vv(1),Ctobrder(1,l))
10428 call matmat2(auxmat(1,1),AEAderg(1,1,2),pizda(1,1))
10429 vv(1)=pizda(1,1)+pizda(2,2)
10430 vv(2)=pizda(2,1)-pizda(1,2)
10431 g_corr5_loc(k-1)=g_corr5_loc(k-1) &
10432 +ekont*(scalar2(AEAb1derg(1,2,2),b1(1,itl)) &
10433 -0.5d0*scalar2(vv(1),Ctobr(1,l)))
10434 ! Cartesian gradient
10438 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,2),&
10440 vv(1)=pizda(1,1)+pizda(2,2)
10441 vv(2)=pizda(2,1)-pizda(1,2)
10442 derx(lll,kkk,iii)=derx(lll,kkk,iii) &
10443 +scalar2(AEAb1derx(1,lll,kkk,iii,2,2),b1(1,itl)) &
10444 -0.5d0*scalar2(vv(1),Ctobr(1,l))
10449 ! Antiparallel orientation
10450 ! Contribution from graph III
10452 call transpose2(EUg(1,1,j),auxmat(1,1))
10453 call matmat2(AEA(1,1,2),auxmat(1,1),pizda(1,1))
10454 vv(1)=pizda(1,1)-pizda(2,2)
10455 vv(2)=pizda(1,2)+pizda(2,1)
10456 eello5_3=scalar2(AEAb2(1,1,2),Ub2(1,j)) &
10457 +0.5d0*scalar2(vv(1),Dtobr2(1,l))
10458 ! Explicit gradient in virtual-dihedral angles.
10459 g_corr5_loc(l-1)=g_corr5_loc(l-1) &
10460 +ekont*(scalar2(AEAb2derg(1,2,1,2),Ub2(1,j)) &
10461 +0.5d0*scalar2(vv(1),Dtobr2der(1,l)))
10462 call matmat2(AEAderg(1,1,2),auxmat(1,1),pizda(1,1))
10463 vv(1)=pizda(1,1)-pizda(2,2)
10464 vv(2)=pizda(1,2)+pizda(2,1)
10465 g_corr5_loc(k-1)=g_corr5_loc(k-1) &
10466 +ekont*(scalar2(AEAb2derg(1,1,1,2),Ub2(1,j)) &
10467 +0.5d0*scalar2(vv(1),Dtobr2(1,l)))
10468 call transpose2(EUgder(1,1,j),auxmat1(1,1))
10469 call matmat2(AEA(1,1,2),auxmat1(1,1),pizda(1,1))
10470 vv(1)=pizda(1,1)-pizda(2,2)
10471 vv(2)=pizda(1,2)+pizda(2,1)
10472 g_corr5_loc(j-1)=g_corr5_loc(j-1) &
10473 +ekont*(scalar2(AEAb2(1,1,2),Ub2der(1,j)) &
10474 +0.5d0*scalar2(vv(1),Dtobr2(1,l)))
10475 ! Cartesian gradient
10479 call matmat2(AEAderx(1,1,lll,kkk,iii,2),auxmat(1,1),&
10481 vv(1)=pizda(1,1)-pizda(2,2)
10482 vv(2)=pizda(1,2)+pizda(2,1)
10483 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii) &
10484 +scalar2(AEAb2derx(1,lll,kkk,iii,1,2),Ub2(1,j)) &
10485 +0.5d0*scalar2(vv(1),Dtobr2(1,l))
10490 ! Contribution from graph IV
10492 call transpose2(EE(1,1,itj),auxmat(1,1))
10493 call matmat2(auxmat(1,1),AEA(1,1,2),pizda(1,1))
10494 vv(1)=pizda(1,1)+pizda(2,2)
10495 vv(2)=pizda(2,1)-pizda(1,2)
10496 eello5_4=scalar2(AEAb1(1,2,2),b1(1,itj)) &
10497 -0.5d0*scalar2(vv(1),Ctobr(1,j))
10498 ! Explicit gradient in virtual-dihedral angles.
10499 g_corr5_loc(j-1)=g_corr5_loc(j-1) &
10500 -0.5d0*ekont*scalar2(vv(1),Ctobrder(1,j))
10501 call matmat2(auxmat(1,1),AEAderg(1,1,2),pizda(1,1))
10502 vv(1)=pizda(1,1)+pizda(2,2)
10503 vv(2)=pizda(2,1)-pizda(1,2)
10504 g_corr5_loc(k-1)=g_corr5_loc(k-1) &
10505 +ekont*(scalar2(AEAb1derg(1,2,2),b1(1,itj)) &
10506 -0.5d0*scalar2(vv(1),Ctobr(1,j)))
10507 ! Cartesian gradient
10511 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,2),&
10513 vv(1)=pizda(1,1)+pizda(2,2)
10514 vv(2)=pizda(2,1)-pizda(1,2)
10515 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii) &
10516 +scalar2(AEAb1derx(1,lll,kkk,iii,2,2),b1(1,itj)) &
10517 -0.5d0*scalar2(vv(1),Ctobr(1,j))
10523 eel5=eello5_1+eello5_2+eello5_3+eello5_4
10524 !d if (i.eq.2 .and. j.eq.8 .and. k.eq.3 .and. l.eq.7) then
10525 !d write (2,*) 'ijkl',i,j,k,l
10526 !d write (2,*) 'eello5_1',eello5_1,' eello5_2',eello5_2,
10527 !d & ' eello5_3',eello5_3,' eello5_4',eello5_4
10529 !d write(iout,*) 'eello5_1',eello5_1,' eel5_1_num',16*eel5_1_num
10530 !d write(iout,*) 'eello5_2',eello5_2,' eel5_2_num',16*eel5_2_num
10531 !d write(iout,*) 'eello5_3',eello5_3,' eel5_3_num',16*eel5_3_num
10532 !d write(iout,*) 'eello5_4',eello5_4,' eel5_4_num',16*eel5_4_num
10533 if (j.lt.nres-1) then
10540 if (l.lt.nres-1) then
10550 !d write (2,*) 'eij',eij,' ekl',ekl,' ekont',ekont
10551 ! 2/11/08 AL Gradients over DC's connecting interacting sites will be
10552 ! summed up outside the subrouine as for the other subroutines
10553 ! handling long-range interactions. The old code is commented out
10554 ! with "cgrad" to keep track of changes.
10556 !grad ggg1(ll)=eel5*g_contij(ll,1)
10557 !grad ggg2(ll)=eel5*g_contij(ll,2)
10558 gradcorr5ij=eel5*g_contij(ll,1)+ekont*derx(ll,1,1)
10559 gradcorr5kl=eel5*g_contij(ll,2)+ekont*derx(ll,1,2)
10560 ! write (iout,'(a,3i3,a,5f8.3,2i3,a,5f8.3,a,f8.3)')
10561 ! & "ecorr5",ll,i,j," derx",derx(ll,2,1),derx(ll,3,1),derx(ll,4,1),
10562 ! & derx(ll,5,1),k,l," derx",derx(ll,2,2),derx(ll,3,2),
10563 ! & derx(ll,4,2),derx(ll,5,2)," ekont",ekont
10564 ! write (iout,'(a,3i3,a,3f8.3,2i3,a,3f8.3)')
10565 ! & "ecorr5",ll,i,j," gradcorr5",g_contij(ll,1),derx(ll,1,1),
10567 ! & k,l," gradcorr5",g_contij(ll,2),derx(ll,1,2),gradcorr5kl
10568 !old ghalf=0.5d0*eel5*ekl*gacont_hbr(ll,jj,i)
10569 !grad ghalf=0.5d0*ggg1(ll)
10571 gradcorr5(ll,i)=gradcorr5(ll,i)+ekont*derx(ll,2,1)
10572 gradcorr5(ll,i+1)=gradcorr5(ll,i+1)+ekont*derx(ll,3,1)
10573 gradcorr5(ll,j)=gradcorr5(ll,j)+ekont*derx(ll,4,1)
10574 gradcorr5(ll,j1)=gradcorr5(ll,j1)+ekont*derx(ll,5,1)
10575 gradcorr5_long(ll,j)=gradcorr5_long(ll,j)+gradcorr5ij
10576 gradcorr5_long(ll,i)=gradcorr5_long(ll,i)-gradcorr5ij
10577 !old ghalf=0.5d0*eel5*eij*gacont_hbr(ll,kk,k)
10578 !grad ghalf=0.5d0*ggg2(ll)
10580 gradcorr5(ll,k)=gradcorr5(ll,k)+ghalf+ekont*derx(ll,2,2)
10581 gradcorr5(ll,k+1)=gradcorr5(ll,k+1)+ekont*derx(ll,3,2)
10582 gradcorr5(ll,l)=gradcorr5(ll,l)+ghalf+ekont*derx(ll,4,2)
10583 gradcorr5(ll,l1)=gradcorr5(ll,l1)+ekont*derx(ll,5,2)
10584 gradcorr5_long(ll,l)=gradcorr5_long(ll,l)+gradcorr5kl
10585 gradcorr5_long(ll,k)=gradcorr5_long(ll,k)-gradcorr5kl
10590 !old gradcorr5(ll,m)=gradcorr5(ll,m)+eel5*ekl*gacont_hbr(ll,jj,i)
10591 !grad gradcorr5(ll,m)=gradcorr5(ll,m)+ggg1(ll)
10596 !old gradcorr5(ll,m)=gradcorr5(ll,m)+eel5*eij*gacont_hbr(ll,kk,k)
10597 !grad gradcorr5(ll,m)=gradcorr5(ll,m)+ggg2(ll)
10603 !grad gradcorr5(ll,m)=gradcorr5(ll,m)+ekont*derx(ll,1,1)
10608 !grad gradcorr5(ll,m)=gradcorr5(ll,m)+ekont*derx(ll,1,2)
10612 !d write (2,*) iii,g_corr5_loc(iii)
10615 !d write (2,*) 'ekont',ekont
10616 !d write (iout,*) 'eello5',ekont*eel5
10618 end function eello5
10619 !-----------------------------------------------------------------------------
10620 real(kind=8) function eello6(i,j,k,l,jj,kk)
10621 ! implicit real(kind=8) (a-h,o-z)
10622 ! include 'DIMENSIONS'
10623 ! include 'COMMON.IOUNITS'
10624 ! include 'COMMON.CHAIN'
10625 ! include 'COMMON.DERIV'
10626 ! include 'COMMON.INTERACT'
10627 ! include 'COMMON.CONTACTS'
10628 ! include 'COMMON.TORSION'
10629 ! include 'COMMON.VAR'
10630 ! include 'COMMON.GEO'
10631 ! include 'COMMON.FFIELD'
10632 real(kind=8),dimension(3) :: ggg1,ggg2
10633 real(kind=8) :: eello6_1,eello6_2,eello6_3,eello6_4,eello6_5,&
10635 real(kind=8) :: gradcorr6ij,gradcorr6kl
10636 integer :: i,j,k,l,jj,kk,iii,kkk,lll,j1,j2,l1,l2,ll
10637 !d if (i.ne.1 .or. j.ne.3 .or. k.ne.2 .or. l.ne.4) then
10642 !d & 'EELLO6: Contacts have occurred for peptide groups',i,j,
10650 !d call checkint6(i,j,k,l,jj,kk,eel6_1_num,eel6_2_num,
10651 !d & eel6_3_num,eel6_4_num,eel6_5_num,eel6_6_num)
10655 derx(lll,kkk,iii)=0.0d0
10659 !d eij=facont_hb(jj,i)
10660 !d ekl=facont_hb(kk,k)
10666 eello6_1=eello6_graph1(i,j,k,l,1,.false.)
10667 eello6_2=eello6_graph1(j,i,l,k,2,.false.)
10668 eello6_3=eello6_graph2(i,j,k,l,jj,kk,.false.)
10669 eello6_4=eello6_graph4(i,j,k,l,jj,kk,1,.false.)
10670 eello6_5=eello6_graph4(j,i,l,k,jj,kk,2,.false.)
10671 eello6_6=eello6_graph3(i,j,k,l,jj,kk,.false.)
10673 eello6_1=eello6_graph1(i,j,k,l,1,.false.)
10674 eello6_2=eello6_graph1(l,k,j,i,2,.true.)
10675 eello6_3=eello6_graph2(i,l,k,j,jj,kk,.true.)
10676 eello6_4=eello6_graph4(i,j,k,l,jj,kk,1,.false.)
10677 if (wturn6.eq.0.0d0 .or. j.ne.i+4) then
10678 eello6_5=eello6_graph4(l,k,j,i,kk,jj,2,.true.)
10682 eello6_6=eello6_graph3(i,l,k,j,jj,kk,.true.)
10684 ! If turn contributions are considered, they will be handled separately.
10685 eel6=eello6_1+eello6_2+eello6_3+eello6_4+eello6_5+eello6_6
10686 !d write(iout,*) 'eello6_1',eello6_1!,' eel6_1_num',16*eel6_1_num
10687 !d write(iout,*) 'eello6_2',eello6_2!,' eel6_2_num',16*eel6_2_num
10688 !d write(iout,*) 'eello6_3',eello6_3!,' eel6_3_num',16*eel6_3_num
10689 !d write(iout,*) 'eello6_4',eello6_4!,' eel6_4_num',16*eel6_4_num
10690 !d write(iout,*) 'eello6_5',eello6_5!,' eel6_5_num',16*eel6_5_num
10691 !d write(iout,*) 'eello6_6',eello6_6!,' eel6_6_num',16*eel6_6_num
10693 if (j.lt.nres-1) then
10700 if (l.lt.nres-1) then
10708 !grad ggg1(ll)=eel6*g_contij(ll,1)
10709 !grad ggg2(ll)=eel6*g_contij(ll,2)
10710 !old ghalf=0.5d0*eel6*ekl*gacont_hbr(ll,jj,i)
10711 !grad ghalf=0.5d0*ggg1(ll)
10713 gradcorr6ij=eel6*g_contij(ll,1)+ekont*derx(ll,1,1)
10714 gradcorr6kl=eel6*g_contij(ll,2)+ekont*derx(ll,1,2)
10715 gradcorr6(ll,i)=gradcorr6(ll,i)+ekont*derx(ll,2,1)
10716 gradcorr6(ll,i+1)=gradcorr6(ll,i+1)+ekont*derx(ll,3,1)
10717 gradcorr6(ll,j)=gradcorr6(ll,j)+ekont*derx(ll,4,1)
10718 gradcorr6(ll,j1)=gradcorr6(ll,j1)+ekont*derx(ll,5,1)
10719 gradcorr6_long(ll,j)=gradcorr6_long(ll,j)+gradcorr6ij
10720 gradcorr6_long(ll,i)=gradcorr6_long(ll,i)-gradcorr6ij
10721 !grad ghalf=0.5d0*ggg2(ll)
10722 !old ghalf=0.5d0*eel6*eij*gacont_hbr(ll,kk,k)
10724 gradcorr6(ll,k)=gradcorr6(ll,k)+ekont*derx(ll,2,2)
10725 gradcorr6(ll,k+1)=gradcorr6(ll,k+1)+ekont*derx(ll,3,2)
10726 gradcorr6(ll,l)=gradcorr6(ll,l)+ekont*derx(ll,4,2)
10727 gradcorr6(ll,l1)=gradcorr6(ll,l1)+ekont*derx(ll,5,2)
10728 gradcorr6_long(ll,l)=gradcorr6_long(ll,l)+gradcorr6kl
10729 gradcorr6_long(ll,k)=gradcorr6_long(ll,k)-gradcorr6kl
10734 !old gradcorr6(ll,m)=gradcorr6(ll,m)+eel6*ekl*gacont_hbr(ll,jj,i)
10735 !grad gradcorr6(ll,m)=gradcorr6(ll,m)+ggg1(ll)
10740 !old gradcorr6(ll,m)=gradcorr6(ll,m)+eel6*eij*gacont_hbr(ll,kk,k)
10741 !grad gradcorr6(ll,m)=gradcorr6(ll,m)+ggg2(ll)
10747 !grad gradcorr6(ll,m)=gradcorr6(ll,m)+ekont*derx(ll,1,1)
10752 !grad gradcorr6(ll,m)=gradcorr6(ll,m)+ekont*derx(ll,1,2)
10756 !d write (2,*) iii,g_corr6_loc(iii)
10759 !d write (2,*) 'ekont',ekont
10760 !d write (iout,*) 'eello6',ekont*eel6
10762 end function eello6
10763 !-----------------------------------------------------------------------------
10764 real(kind=8) function eello6_graph1(i,j,k,l,imat,swap)
10766 ! implicit real(kind=8) (a-h,o-z)
10767 ! include 'DIMENSIONS'
10768 ! include 'COMMON.IOUNITS'
10769 ! include 'COMMON.CHAIN'
10770 ! include 'COMMON.DERIV'
10771 ! include 'COMMON.INTERACT'
10772 ! include 'COMMON.CONTACTS'
10773 ! include 'COMMON.TORSION'
10774 ! include 'COMMON.VAR'
10775 ! include 'COMMON.GEO'
10776 real(kind=8),dimension(2) :: vv,vv1
10777 real(kind=8),dimension(2,2) :: pizda,auxmat,pizda1
10779 !el logical :: lprn
10780 !el common /kutas/ lprn
10781 integer :: i,j,k,l,imat,itk,iii,kkk,lll,ind
10782 real(kind=8) :: s1,s2,s3,s4,s5
10783 !CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
10785 ! Parallel Antiparallel C
10791 ! \ j|/k\| / \ |/k\|l / C
10792 ! \ / \ / \ / \ / C
10796 !CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
10797 itk=itortyp(itype(k,1))
10798 s1= scalar2(AEAb1(1,2,imat),CUgb2(1,i))
10799 s2=-scalar2(AEAb2(1,1,imat),Ug2Db1t(1,k))
10800 s3= scalar2(AEAb2(1,1,imat),CUgb2(1,k))
10801 call transpose2(EUgC(1,1,k),auxmat(1,1))
10802 call matmat2(AEA(1,1,imat),auxmat(1,1),pizda1(1,1))
10803 vv1(1)=pizda1(1,1)-pizda1(2,2)
10804 vv1(2)=pizda1(1,2)+pizda1(2,1)
10805 s4=0.5d0*scalar2(vv1(1),Dtobr2(1,i))
10806 vv(1)=AEAb1(1,2,imat)*b1(1,itk)-AEAb1(2,2,imat)*b1(2,itk)
10807 vv(2)=AEAb1(1,2,imat)*b1(2,itk)+AEAb1(2,2,imat)*b1(1,itk)
10808 s5=scalar2(vv(1),Dtobr2(1,i))
10809 !d write (2,*) 's1',s1,' s2',s2,' s3',s3,' s4', s4,' s5',s5
10810 eello6_graph1=-0.5d0*(s1+s2+s3+s4+s5)
10811 if (i.gt.1) g_corr6_loc(i-1)=g_corr6_loc(i-1) &
10812 -0.5d0*ekont*(scalar2(AEAb1(1,2,imat),CUgb2der(1,i)) &
10813 -scalar2(AEAb2derg(1,2,1,imat),Ug2Db1t(1,k)) &
10814 +scalar2(AEAb2derg(1,2,1,imat),CUgb2(1,k)) &
10815 +0.5d0*scalar2(vv1(1),Dtobr2der(1,i)) &
10816 +scalar2(vv(1),Dtobr2der(1,i)))
10817 call matmat2(AEAderg(1,1,imat),auxmat(1,1),pizda1(1,1))
10818 vv1(1)=pizda1(1,1)-pizda1(2,2)
10819 vv1(2)=pizda1(1,2)+pizda1(2,1)
10820 vv(1)=AEAb1derg(1,2,imat)*b1(1,itk)-AEAb1derg(2,2,imat)*b1(2,itk)
10821 vv(2)=AEAb1derg(1,2,imat)*b1(2,itk)+AEAb1derg(2,2,imat)*b1(1,itk)
10823 g_corr6_loc(l-1)=g_corr6_loc(l-1) &
10824 +ekont*(-0.5d0*(scalar2(AEAb1derg(1,2,imat),CUgb2(1,i)) &
10825 -scalar2(AEAb2derg(1,1,1,imat),Ug2Db1t(1,k)) &
10826 +scalar2(AEAb2derg(1,1,1,imat),CUgb2(1,k)) &
10827 +0.5d0*scalar2(vv1(1),Dtobr2(1,i))+scalar2(vv(1),Dtobr2(1,i))))
10829 g_corr6_loc(j-1)=g_corr6_loc(j-1) &
10830 +ekont*(-0.5d0*(scalar2(AEAb1derg(1,2,imat),CUgb2(1,i)) &
10831 -scalar2(AEAb2derg(1,1,1,imat),Ug2Db1t(1,k)) &
10832 +scalar2(AEAb2derg(1,1,1,imat),CUgb2(1,k)) &
10833 +0.5d0*scalar2(vv1(1),Dtobr2(1,i))+scalar2(vv(1),Dtobr2(1,i))))
10835 call transpose2(EUgCder(1,1,k),auxmat(1,1))
10836 call matmat2(AEA(1,1,imat),auxmat(1,1),pizda1(1,1))
10837 vv1(1)=pizda1(1,1)-pizda1(2,2)
10838 vv1(2)=pizda1(1,2)+pizda1(2,1)
10839 if (k.gt.1) g_corr6_loc(k-1)=g_corr6_loc(k-1) &
10840 +ekont*(-0.5d0*(-scalar2(AEAb2(1,1,imat),Ug2Db1tder(1,k)) &
10841 +scalar2(AEAb2(1,1,imat),CUgb2der(1,k)) &
10842 +0.5d0*scalar2(vv1(1),Dtobr2(1,i))))
10851 s1= scalar2(AEAb1derx(1,lll,kkk,iii,2,imat),CUgb2(1,i))
10852 s2=-scalar2(AEAb2derx(1,lll,kkk,iii,1,imat),Ug2Db1t(1,k))
10853 s3= scalar2(AEAb2derx(1,lll,kkk,iii,1,imat),CUgb2(1,k))
10854 call transpose2(EUgC(1,1,k),auxmat(1,1))
10855 call matmat2(AEAderx(1,1,lll,kkk,iii,imat),auxmat(1,1),&
10857 vv1(1)=pizda1(1,1)-pizda1(2,2)
10858 vv1(2)=pizda1(1,2)+pizda1(2,1)
10859 s4=0.5d0*scalar2(vv1(1),Dtobr2(1,i))
10860 vv(1)=AEAb1derx(1,lll,kkk,iii,2,imat)*b1(1,itk) &
10861 -AEAb1derx(2,lll,kkk,iii,2,imat)*b1(2,itk)
10862 vv(2)=AEAb1derx(1,lll,kkk,iii,2,imat)*b1(2,itk) &
10863 +AEAb1derx(2,lll,kkk,iii,2,imat)*b1(1,itk)
10864 s5=scalar2(vv(1),Dtobr2(1,i))
10865 derx(lll,kkk,ind)=derx(lll,kkk,ind)-0.5d0*(s1+s2+s3+s4+s5)
10870 end function eello6_graph1
10871 !-----------------------------------------------------------------------------
10872 real(kind=8) function eello6_graph2(i,j,k,l,jj,kk,swap)
10874 ! implicit real(kind=8) (a-h,o-z)
10875 ! include 'DIMENSIONS'
10876 ! include 'COMMON.IOUNITS'
10877 ! include 'COMMON.CHAIN'
10878 ! include 'COMMON.DERIV'
10879 ! include 'COMMON.INTERACT'
10880 ! include 'COMMON.CONTACTS'
10881 ! include 'COMMON.TORSION'
10882 ! include 'COMMON.VAR'
10883 ! include 'COMMON.GEO'
10885 real(kind=8),dimension(2) :: vv,auxvec,auxvec1,auxvec2
10886 real(kind=8),dimension(2,2) :: pizda,auxmat,auxmat1
10887 !el logical :: lprn
10888 !el common /kutas/ lprn
10889 integer :: i,j,k,l,jj,kk,iii,kkk,lll,jjj,mmm
10890 real(kind=8) :: s2,s3,s4
10891 !CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
10893 ! Parallel Antiparallel C
10899 ! \ j|/k\| \ |/k\|l C
10904 !CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
10905 !d write (2,*) 'eello6_graph2: i,',i,' j',j,' k',k,' l',l
10906 ! AL 7/4/01 s1 would occur in the sixth-order moment,
10907 ! but not in a cluster cumulant
10909 s1=dip(1,jj,i)*dip(1,kk,k)
10911 call matvec2(ADtEA1(1,1,1),Ub2(1,k),auxvec(1))
10912 s2=-0.5d0*scalar2(Ub2(1,i),auxvec(1))
10913 call matvec2(ADtEA(1,1,2),Ub2(1,l),auxvec1(1))
10914 s3=-0.5d0*scalar2(Ub2(1,j),auxvec1(1))
10915 call transpose2(EUg(1,1,k),auxmat(1,1))
10916 call matmat2(ADtEA1(1,1,1),auxmat(1,1),pizda(1,1))
10917 vv(1)=pizda(1,1)-pizda(2,2)
10918 vv(2)=pizda(1,2)+pizda(2,1)
10919 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
10920 !d write (2,*) 'eello6_graph2:','s1',s1,' s2',s2,' s3',s3,' s4',s4
10922 eello6_graph2=-(s1+s2+s3+s4)
10924 eello6_graph2=-(s2+s3+s4)
10926 ! eello6_graph2=-s3
10927 ! Derivatives in gamma(i-1)
10930 s1=dipderg(1,jj,i)*dip(1,kk,k)
10932 s2=-0.5d0*scalar2(Ub2der(1,i),auxvec(1))
10933 call matvec2(ADtEAderg(1,1,1,2),Ub2(1,l),auxvec2(1))
10934 s3=-0.5d0*scalar2(Ub2(1,j),auxvec2(1))
10935 s4=-0.25d0*scalar2(vv(1),Dtobr2der(1,i))
10937 g_corr6_loc(i-1)=g_corr6_loc(i-1)-ekont*(s1+s2+s3+s4)
10939 g_corr6_loc(i-1)=g_corr6_loc(i-1)-ekont*(s2+s3+s4)
10941 ! g_corr6_loc(i-1)=g_corr6_loc(i-1)-s3
10943 ! Derivatives in gamma(k-1)
10945 s1=dip(1,jj,i)*dipderg(1,kk,k)
10947 call matvec2(ADtEA1(1,1,1),Ub2der(1,k),auxvec2(1))
10948 s2=-0.5d0*scalar2(Ub2(1,i),auxvec2(1))
10949 call matvec2(ADtEAderg(1,1,2,2),Ub2(1,l),auxvec2(1))
10950 s3=-0.5d0*scalar2(Ub2(1,j),auxvec2(1))
10951 call transpose2(EUgder(1,1,k),auxmat1(1,1))
10952 call matmat2(ADtEA1(1,1,1),auxmat1(1,1),pizda(1,1))
10953 vv(1)=pizda(1,1)-pizda(2,2)
10954 vv(2)=pizda(1,2)+pizda(2,1)
10955 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
10957 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s1+s2+s3+s4)
10959 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s2+s3+s4)
10961 ! g_corr6_loc(k-1)=g_corr6_loc(k-1)-s3
10962 ! Derivatives in gamma(j-1) or gamma(l-1)
10965 s1=dipderg(3,jj,i)*dip(1,kk,k)
10967 call matvec2(ADtEA1derg(1,1,1,1),Ub2(1,k),auxvec2(1))
10968 s2=-0.5d0*scalar2(Ub2(1,i),auxvec2(1))
10969 s3=-0.5d0*scalar2(Ub2der(1,j),auxvec1(1))
10970 call matmat2(ADtEA1derg(1,1,1,1),auxmat(1,1),pizda(1,1))
10971 vv(1)=pizda(1,1)-pizda(2,2)
10972 vv(2)=pizda(1,2)+pizda(2,1)
10973 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
10976 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*s1
10978 g_corr6_loc(j-1)=g_corr6_loc(j-1)-ekont*s1
10981 g_corr6_loc(j-1)=g_corr6_loc(j-1)-ekont*(s2+s3+s4)
10982 ! g_corr6_loc(j-1)=g_corr6_loc(j-1)-s3
10984 ! Derivatives in gamma(l-1) or gamma(j-1)
10987 s1=dip(1,jj,i)*dipderg(3,kk,k)
10989 call matvec2(ADtEA1derg(1,1,2,1),Ub2(1,k),auxvec2(1))
10990 s2=-0.5d0*scalar2(Ub2(1,i),auxvec2(1))
10991 call matvec2(ADtEA(1,1,2),Ub2der(1,l),auxvec2(1))
10992 s3=-0.5d0*scalar2(Ub2(1,j),auxvec2(1))
10993 call matmat2(ADtEA1derg(1,1,2,1),auxmat(1,1),pizda(1,1))
10994 vv(1)=pizda(1,1)-pizda(2,2)
10995 vv(2)=pizda(1,2)+pizda(2,1)
10996 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
10999 g_corr6_loc(j-1)=g_corr6_loc(j-1)-ekont*s1
11001 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*s1
11004 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*(s2+s3+s4)
11005 ! g_corr6_loc(l-1)=g_corr6_loc(l-1)-s3
11007 ! Cartesian derivatives.
11009 write (2,*) 'In eello6_graph2'
11011 write (2,*) 'iii=',iii
11013 write (2,*) 'kkk=',kkk
11015 write (2,'(3(2f10.5),5x)') &
11016 ((ADtEA1derx(jjj,mmm,lll,kkk,iii,1),mmm=1,2),lll=1,3)
11026 s1=dipderx(lll,kkk,1,jj,i)*dip(1,kk,k)
11028 s1=dip(1,jj,i)*dipderx(lll,kkk,1,kk,k)
11031 call matvec2(ADtEA1derx(1,1,lll,kkk,iii,1),Ub2(1,k),&
11033 s2=-0.5d0*scalar2(Ub2(1,i),auxvec(1))
11034 call matvec2(ADtEAderx(1,1,lll,kkk,iii,2),Ub2(1,l),&
11036 s3=-0.5d0*scalar2(Ub2(1,j),auxvec(1))
11037 call transpose2(EUg(1,1,k),auxmat(1,1))
11038 call matmat2(ADtEA1derx(1,1,lll,kkk,iii,1),auxmat(1,1),&
11040 vv(1)=pizda(1,1)-pizda(2,2)
11041 vv(2)=pizda(1,2)+pizda(2,1)
11042 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
11043 !d write (2,*) 's1',s1,' s2',s2,' s3',s3,' s4',s4
11045 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s1+s2+s4)
11047 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s2+s4)
11050 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-s3
11052 derx(lll,kkk,iii)=derx(lll,kkk,iii)-s3
11058 end function eello6_graph2
11059 !-----------------------------------------------------------------------------
11060 real(kind=8) function eello6_graph3(i,j,k,l,jj,kk,swap)
11061 ! implicit real(kind=8) (a-h,o-z)
11062 ! include 'DIMENSIONS'
11063 ! include 'COMMON.IOUNITS'
11064 ! include 'COMMON.CHAIN'
11065 ! include 'COMMON.DERIV'
11066 ! include 'COMMON.INTERACT'
11067 ! include 'COMMON.CONTACTS'
11068 ! include 'COMMON.TORSION'
11069 ! include 'COMMON.VAR'
11070 ! include 'COMMON.GEO'
11071 real(kind=8),dimension(2) :: vv,auxvec
11072 real(kind=8),dimension(2,2) :: pizda,auxmat
11074 integer :: i,j,k,l,jj,kk,iti,itj1,itk,itk1,iii,lll,kkk,itl1
11075 real(kind=8) :: s1,s2,s3,s4
11076 !CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
11078 ! Parallel Antiparallel C
11083 ! /| o |o o| o |\ C
11084 ! j|/k\| / |/k\|l / C
11089 !CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
11091 ! 4/7/01 AL Component s1 was removed, because it pertains to the respective
11092 ! energy moment and not to the cluster cumulant.
11093 iti=itortyp(itype(i,1))
11094 if (j.lt.nres-1) then
11095 itj1=itortyp(itype(j+1,1))
11099 itk=itortyp(itype(k,1))
11100 itk1=itortyp(itype(k+1,1))
11101 if (l.lt.nres-1) then
11102 itl1=itortyp(itype(l+1,1))
11107 s1=dip(4,jj,i)*dip(4,kk,k)
11109 call matvec2(AECA(1,1,1),b1(1,itk1),auxvec(1))
11110 s2=0.5d0*scalar2(b1(1,itk),auxvec(1))
11111 call matvec2(AECA(1,1,2),b1(1,itl1),auxvec(1))
11112 s3=0.5d0*scalar2(b1(1,itj1),auxvec(1))
11113 call transpose2(EE(1,1,itk),auxmat(1,1))
11114 call matmat2(auxmat(1,1),AECA(1,1,1),pizda(1,1))
11115 vv(1)=pizda(1,1)+pizda(2,2)
11116 vv(2)=pizda(2,1)-pizda(1,2)
11117 s4=-0.25d0*scalar2(vv(1),Ctobr(1,k))
11118 !d write (2,*) 'eello6_graph3:','s1',s1,' s2',s2,' s3',s3,' s4',s4,
11119 !d & "sum",-(s2+s3+s4)
11121 eello6_graph3=-(s1+s2+s3+s4)
11123 eello6_graph3=-(s2+s3+s4)
11125 ! eello6_graph3=-s4
11126 ! Derivatives in gamma(k-1)
11127 call matvec2(AECAderg(1,1,2),b1(1,itl1),auxvec(1))
11128 s3=0.5d0*scalar2(b1(1,itj1),auxvec(1))
11129 s4=-0.25d0*scalar2(vv(1),Ctobrder(1,k))
11130 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s3+s4)
11131 ! Derivatives in gamma(l-1)
11132 call matvec2(AECAderg(1,1,1),b1(1,itk1),auxvec(1))
11133 s2=0.5d0*scalar2(b1(1,itk),auxvec(1))
11134 call matmat2(auxmat(1,1),AECAderg(1,1,1),pizda(1,1))
11135 vv(1)=pizda(1,1)+pizda(2,2)
11136 vv(2)=pizda(2,1)-pizda(1,2)
11137 s4=-0.25d0*scalar2(vv(1),Ctobr(1,k))
11138 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*(s2+s4)
11139 ! Cartesian derivatives.
11145 s1=dipderx(lll,kkk,4,jj,i)*dip(4,kk,k)
11147 s1=dip(4,jj,i)*dipderx(lll,kkk,4,kk,k)
11150 call matvec2(AECAderx(1,1,lll,kkk,iii,1),b1(1,itk1),&
11152 s2=0.5d0*scalar2(b1(1,itk),auxvec(1))
11153 call matvec2(AECAderx(1,1,lll,kkk,iii,2),b1(1,itl1),&
11155 s3=0.5d0*scalar2(b1(1,itj1),auxvec(1))
11156 call matmat2(auxmat(1,1),AECAderx(1,1,lll,kkk,iii,1),&
11158 vv(1)=pizda(1,1)+pizda(2,2)
11159 vv(2)=pizda(2,1)-pizda(1,2)
11160 s4=-0.25d0*scalar2(vv(1),Ctobr(1,k))
11162 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s1+s2+s4)
11164 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s2+s4)
11167 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-s3
11169 derx(lll,kkk,iii)=derx(lll,kkk,iii)-s3
11171 ! derx(lll,kkk,iii)=derx(lll,kkk,iii)-s4
11176 end function eello6_graph3
11177 !-----------------------------------------------------------------------------
11178 real(kind=8) function eello6_graph4(i,j,k,l,jj,kk,imat,swap)
11179 ! implicit real(kind=8) (a-h,o-z)
11180 ! include 'DIMENSIONS'
11181 ! include 'COMMON.IOUNITS'
11182 ! include 'COMMON.CHAIN'
11183 ! include 'COMMON.DERIV'
11184 ! include 'COMMON.INTERACT'
11185 ! include 'COMMON.CONTACTS'
11186 ! include 'COMMON.TORSION'
11187 ! include 'COMMON.VAR'
11188 ! include 'COMMON.GEO'
11189 ! include 'COMMON.FFIELD'
11190 real(kind=8),dimension(2) :: vv,auxvec,auxvec1
11191 real(kind=8),dimension(2,2) :: pizda,auxmat,auxmat1
11193 integer :: i,j,k,l,jj,kk,imat,iti,itj,itj1,itk,itk1,itl,itl1,&
11195 real(kind=8) :: s1,s2,s3,s4
11196 !CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
11198 ! Parallel Antiparallel C
11203 ! /| o |o o| o |\ C
11204 ! \ j|/k\| \ |/k\|l C
11209 !CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
11211 ! 4/7/01 AL Component s1 was removed, because it pertains to the respective
11212 ! energy moment and not to the cluster cumulant.
11213 !d write (2,*) 'eello_graph4: wturn6',wturn6
11214 iti=itortyp(itype(i,1))
11215 itj=itortyp(itype(j,1))
11216 if (j.lt.nres-1) then
11217 itj1=itortyp(itype(j+1,1))
11221 itk=itortyp(itype(k,1))
11222 if (k.lt.nres-1) then
11223 itk1=itortyp(itype(k+1,1))
11227 itl=itortyp(itype(l,1))
11228 if (l.lt.nres-1) then
11229 itl1=itortyp(itype(l+1,1))
11233 !d write (2,*) 'eello6_graph4:','i',i,' j',j,' k',k,' l',l
11234 !d write (2,*) 'iti',iti,' itj',itj,' itj1',itj1,' itk',itk,
11235 !d & ' itl',itl,' itl1',itl1
11237 if (imat.eq.1) then
11238 s1=dip(3,jj,i)*dip(3,kk,k)
11240 s1=dip(2,jj,j)*dip(2,kk,l)
11243 call matvec2(AECA(1,1,imat),Ub2(1,k),auxvec(1))
11244 s2=0.5d0*scalar2(Ub2(1,i),auxvec(1))
11246 call matvec2(ADtEA1(1,1,3-imat),b1(1,itj1),auxvec1(1))
11247 s3=-0.5d0*scalar2(b1(1,itj),auxvec1(1))
11249 call matvec2(ADtEA1(1,1,3-imat),b1(1,itl1),auxvec1(1))
11250 s3=-0.5d0*scalar2(b1(1,itl),auxvec1(1))
11252 call transpose2(EUg(1,1,k),auxmat(1,1))
11253 call matmat2(AECA(1,1,imat),auxmat(1,1),pizda(1,1))
11254 vv(1)=pizda(1,1)-pizda(2,2)
11255 vv(2)=pizda(2,1)+pizda(1,2)
11256 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
11257 !d write (2,*) 'eello6_graph4:','s1',s1,' s2',s2,' s3',s3,' s4',s4
11259 eello6_graph4=-(s1+s2+s3+s4)
11261 eello6_graph4=-(s2+s3+s4)
11263 ! Derivatives in gamma(i-1)
11266 if (imat.eq.1) then
11267 s1=dipderg(2,jj,i)*dip(3,kk,k)
11269 s1=dipderg(4,jj,j)*dip(2,kk,l)
11272 s2=0.5d0*scalar2(Ub2der(1,i),auxvec(1))
11274 call matvec2(ADtEA1derg(1,1,1,3-imat),b1(1,itj1),auxvec1(1))
11275 s3=-0.5d0*scalar2(b1(1,itj),auxvec1(1))
11277 call matvec2(ADtEA1derg(1,1,1,3-imat),b1(1,itl1),auxvec1(1))
11278 s3=-0.5d0*scalar2(b1(1,itl),auxvec1(1))
11280 s4=0.25d0*scalar2(vv(1),Dtobr2der(1,i))
11281 if (wturn6.gt.0.0d0 .and. k.eq.l+4 .and. i.eq.j+2) then
11282 !d write (2,*) 'turn6 derivatives'
11284 gel_loc_turn6(i-1)=gel_loc_turn6(i-1)-ekont*(s1+s2+s3+s4)
11286 gel_loc_turn6(i-1)=gel_loc_turn6(i-1)-ekont*(s2+s3+s4)
11290 g_corr6_loc(i-1)=g_corr6_loc(i-1)-ekont*(s1+s2+s3+s4)
11292 g_corr6_loc(i-1)=g_corr6_loc(i-1)-ekont*(s2+s3+s4)
11296 ! Derivatives in gamma(k-1)
11298 if (imat.eq.1) then
11299 s1=dip(3,jj,i)*dipderg(2,kk,k)
11301 s1=dip(2,jj,j)*dipderg(4,kk,l)
11304 call matvec2(AECA(1,1,imat),Ub2der(1,k),auxvec1(1))
11305 s2=0.5d0*scalar2(Ub2(1,i),auxvec1(1))
11307 call matvec2(ADtEA1derg(1,1,2,3-imat),b1(1,itj1),auxvec1(1))
11308 s3=-0.5d0*scalar2(b1(1,itj),auxvec1(1))
11310 call matvec2(ADtEA1derg(1,1,2,3-imat),b1(1,itl1),auxvec1(1))
11311 s3=-0.5d0*scalar2(b1(1,itl),auxvec1(1))
11313 call transpose2(EUgder(1,1,k),auxmat1(1,1))
11314 call matmat2(AECA(1,1,imat),auxmat1(1,1),pizda(1,1))
11315 vv(1)=pizda(1,1)-pizda(2,2)
11316 vv(2)=pizda(2,1)+pizda(1,2)
11317 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
11318 if (wturn6.gt.0.0d0 .and. k.eq.l+4 .and. i.eq.j+2) then
11320 gel_loc_turn6(k-1)=gel_loc_turn6(k-1)-ekont*(s1+s2+s3+s4)
11322 gel_loc_turn6(k-1)=gel_loc_turn6(k-1)-ekont*(s2+s3+s4)
11326 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s1+s2+s3+s4)
11328 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s2+s3+s4)
11331 ! Derivatives in gamma(j-1) or gamma(l-1)
11332 if (l.eq.j+1 .and. l.gt.1) then
11333 call matvec2(AECAderg(1,1,imat),Ub2(1,k),auxvec(1))
11334 s2=0.5d0*scalar2(Ub2(1,i),auxvec(1))
11335 call matmat2(AECAderg(1,1,imat),auxmat(1,1),pizda(1,1))
11336 vv(1)=pizda(1,1)-pizda(2,2)
11337 vv(2)=pizda(2,1)+pizda(1,2)
11338 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
11339 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*(s2+s4)
11340 else if (j.gt.1) then
11341 call matvec2(AECAderg(1,1,imat),Ub2(1,k),auxvec(1))
11342 s2=0.5d0*scalar2(Ub2(1,i),auxvec(1))
11343 call matmat2(AECAderg(1,1,imat),auxmat(1,1),pizda(1,1))
11344 vv(1)=pizda(1,1)-pizda(2,2)
11345 vv(2)=pizda(2,1)+pizda(1,2)
11346 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
11347 if (wturn6.gt.0.0d0 .and. k.eq.l+4 .and. i.eq.j+2) then
11348 gel_loc_turn6(j-1)=gel_loc_turn6(j-1)-ekont*(s2+s4)
11350 g_corr6_loc(j-1)=g_corr6_loc(j-1)-ekont*(s2+s4)
11353 ! Cartesian derivatives.
11359 if (imat.eq.1) then
11360 s1=dipderx(lll,kkk,3,jj,i)*dip(3,kk,k)
11362 s1=dipderx(lll,kkk,2,jj,j)*dip(2,kk,l)
11365 if (imat.eq.1) then
11366 s1=dip(3,jj,i)*dipderx(lll,kkk,3,kk,k)
11368 s1=dip(2,jj,j)*dipderx(lll,kkk,2,kk,l)
11372 call matvec2(AECAderx(1,1,lll,kkk,iii,imat),Ub2(1,k),&
11374 s2=0.5d0*scalar2(Ub2(1,i),auxvec(1))
11376 call matvec2(ADtEA1derx(1,1,lll,kkk,iii,3-imat),&
11377 b1(1,itj1),auxvec(1))
11378 s3=-0.5d0*scalar2(b1(1,itj),auxvec(1))
11380 call matvec2(ADtEA1derx(1,1,lll,kkk,iii,3-imat),&
11381 b1(1,itl1),auxvec(1))
11382 s3=-0.5d0*scalar2(b1(1,itl),auxvec(1))
11384 call matmat2(AECAderx(1,1,lll,kkk,iii,imat),auxmat(1,1),&
11386 vv(1)=pizda(1,1)-pizda(2,2)
11387 vv(2)=pizda(2,1)+pizda(1,2)
11388 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
11390 if (wturn6.gt.0.0d0 .and. k.eq.l+4 .and. i.eq.j+2) then
11392 derx_turn(lll,kkk,3-iii)=derx_turn(lll,kkk,3-iii) &
11395 derx_turn(lll,kkk,3-iii)=derx_turn(lll,kkk,3-iii) &
11398 derx_turn(lll,kkk,iii)=derx_turn(lll,kkk,iii)-s3
11401 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-(s1+s2+s4)
11403 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-(s2+s4)
11405 derx(lll,kkk,iii)=derx(lll,kkk,iii)-s3
11409 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s1+s2+s4)
11411 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s2+s4)
11414 derx(lll,kkk,iii)=derx(lll,kkk,iii)-s3
11416 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-s3
11423 end function eello6_graph4
11424 !-----------------------------------------------------------------------------
11425 real(kind=8) function eello_turn6(i,jj,kk)
11426 ! implicit real(kind=8) (a-h,o-z)
11427 ! include 'DIMENSIONS'
11428 ! include 'COMMON.IOUNITS'
11429 ! include 'COMMON.CHAIN'
11430 ! include 'COMMON.DERIV'
11431 ! include 'COMMON.INTERACT'
11432 ! include 'COMMON.CONTACTS'
11433 ! include 'COMMON.TORSION'
11434 ! include 'COMMON.VAR'
11435 ! include 'COMMON.GEO'
11436 real(kind=8),dimension(2) :: vtemp1,vtemp2,vtemp3,vtemp4,gvec
11437 real(kind=8),dimension(2,2) :: atemp,auxmat,achuj_temp,gtemp
11438 real(kind=8),dimension(3) :: ggg1,ggg2
11439 real(kind=8),dimension(2) :: vtemp1d,vtemp2d,vtemp3d,vtemp4d,gvecd
11440 real(kind=8),dimension(2,2) :: atempd,auxmatd,achuj_tempd,gtempd
11441 ! 4/7/01 AL Components s1, s8, and s13 were removed, because they pertain to
11442 ! the respective energy moment and not to the cluster cumulant.
11443 !el local variables
11444 integer :: i,jj,kk,j,k,l,iti,itk,itk1,itl,itj,iii,kkk,lll
11445 integer :: j1,j2,l1,l2,ll
11446 real(kind=8) :: s1,s2,s8,s13,s12,eello6_5,eel_turn6
11447 real(kind=8) :: s1d,s8d,s12d,s2d,gturn6ij,gturn6kl
11456 iti=itortyp(itype(i,1))
11457 itk=itortyp(itype(k,1))
11458 itk1=itortyp(itype(k+1,1))
11459 itl=itortyp(itype(l,1))
11460 itj=itortyp(itype(j,1))
11461 !d write (2,*) 'itk',itk,' itk1',itk1,' itl',itl,' itj',itj
11462 !d write (2,*) 'i',i,' k',k,' j',j,' l',l
11463 !d if (i.ne.1 .or. j.ne.3 .or. k.ne.2 .or. l.ne.4) then
11468 !d & 'EELLO6: Contacts have occurred for peptide groups',i,j,
11470 !d call checkint_turn6(i,jj,kk,eel_turn6_num)
11474 derx_turn(lll,kkk,iii)=0.0d0
11481 eello6_5=eello6_graph4(l,k,j,i,kk,jj,2,.true.)
11483 !d write (2,*) 'eello6_5',eello6_5
11485 call transpose2(AEA(1,1,1),auxmat(1,1))
11486 call matmat2(EUg(1,1,i+1),auxmat(1,1),auxmat(1,1))
11487 ss1=scalar2(Ub2(1,i+2),b1(1,itl))
11488 s1 = (auxmat(1,1)+auxmat(2,2))*ss1
11490 call matvec2(EUg(1,1,i+2),b1(1,itl),vtemp1(1))
11491 call matvec2(AEA(1,1,1),vtemp1(1),vtemp1(1))
11492 s2 = scalar2(b1(1,itk),vtemp1(1))
11494 call transpose2(AEA(1,1,2),atemp(1,1))
11495 call matmat2(atemp(1,1),EUg(1,1,i+4),atemp(1,1))
11496 call matvec2(Ug2(1,1,i+2),dd(1,1,itk1),vtemp2(1))
11497 s8 = -(atemp(1,1)+atemp(2,2))*scalar2(cc(1,1,itl),vtemp2(1))
11499 call matmat2(EUg(1,1,i+3),AEA(1,1,2),auxmat(1,1))
11500 call matvec2(auxmat(1,1),Ub2(1,i+4),vtemp3(1))
11501 s12 = scalar2(Ub2(1,i+2),vtemp3(1))
11503 call transpose2(a_chuj(1,1,kk,i+1),achuj_temp(1,1))
11504 call matmat2(achuj_temp(1,1),EUg(1,1,i+2),gtemp(1,1))
11505 call matmat2(gtemp(1,1),EUg(1,1,i+3),gtemp(1,1))
11506 call matvec2(a_chuj(1,1,jj,i),Ub2(1,i+4),vtemp4(1))
11507 ss13 = scalar2(b1(1,itk),vtemp4(1))
11508 s13 = (gtemp(1,1)+gtemp(2,2))*ss13
11510 ! write (2,*) 's1,s2,s8,s12,s13',s1,s2,s8,s12,s13
11516 eel_turn6 = eello6_5 - 0.5d0*(s1+s2+s12+s8+s13)
11517 ! Derivatives in gamma(i+2)
11521 call transpose2(AEA(1,1,1),auxmatd(1,1))
11522 call matmat2(EUgder(1,1,i+1),auxmatd(1,1),auxmatd(1,1))
11523 s1d = (auxmatd(1,1)+auxmatd(2,2))*ss1
11524 call transpose2(AEAderg(1,1,2),atempd(1,1))
11525 call matmat2(atempd(1,1),EUg(1,1,i+4),atempd(1,1))
11526 s8d = -(atempd(1,1)+atempd(2,2))*scalar2(cc(1,1,itl),vtemp2(1))
11528 call matmat2(EUg(1,1,i+3),AEAderg(1,1,2),auxmatd(1,1))
11529 call matvec2(auxmatd(1,1),Ub2(1,i+4),vtemp3d(1))
11530 s12d = scalar2(Ub2(1,i+2),vtemp3d(1))
11536 gel_loc_turn6(i)=gel_loc_turn6(i)-0.5d0*ekont*(s1d+s8d+s12d)
11537 ! Derivatives in gamma(i+3)
11539 call transpose2(AEA(1,1,1),auxmatd(1,1))
11540 call matmat2(EUg(1,1,i+1),auxmatd(1,1),auxmatd(1,1))
11541 ss1d=scalar2(Ub2der(1,i+2),b1(1,itl))
11542 s1d = (auxmatd(1,1)+auxmatd(2,2))*ss1d
11544 call matvec2(EUgder(1,1,i+2),b1(1,itl),vtemp1d(1))
11545 call matvec2(AEA(1,1,1),vtemp1d(1),vtemp1d(1))
11546 s2d = scalar2(b1(1,itk),vtemp1d(1))
11548 call matvec2(Ug2der(1,1,i+2),dd(1,1,itk1),vtemp2d(1))
11549 s8d = -(atemp(1,1)+atemp(2,2))*scalar2(cc(1,1,itl),vtemp2d(1))
11551 s12d = scalar2(Ub2der(1,i+2),vtemp3(1))
11553 call matmat2(achuj_temp(1,1),EUgder(1,1,i+2),gtempd(1,1))
11554 call matmat2(gtempd(1,1),EUg(1,1,i+3),gtempd(1,1))
11555 s13d = (gtempd(1,1)+gtempd(2,2))*ss13
11563 gel_loc_turn6(i+1)=gel_loc_turn6(i+1) &
11564 -0.5d0*ekont*(s1d+s2d+s8d+s12d+s13d)
11566 gel_loc_turn6(i+1)=gel_loc_turn6(i+1) &
11567 -0.5d0*ekont*(s2d+s12d)
11569 ! Derivatives in gamma(i+4)
11570 call matmat2(EUgder(1,1,i+3),AEA(1,1,2),auxmatd(1,1))
11571 call matvec2(auxmatd(1,1),Ub2(1,i+4),vtemp3d(1))
11572 s12d = scalar2(Ub2(1,i+2),vtemp3d(1))
11574 call matmat2(achuj_temp(1,1),EUg(1,1,i+2),gtempd(1,1))
11575 call matmat2(gtempd(1,1),EUgder(1,1,i+3),gtempd(1,1))
11576 s13d = (gtempd(1,1)+gtempd(2,2))*ss13
11584 gel_loc_turn6(i+2)=gel_loc_turn6(i+2)-0.5d0*ekont*(s12d+s13d)
11586 gel_loc_turn6(i+2)=gel_loc_turn6(i+2)-0.5d0*ekont*(s12d)
11588 ! Derivatives in gamma(i+5)
11590 call transpose2(AEAderg(1,1,1),auxmatd(1,1))
11591 call matmat2(EUg(1,1,i+1),auxmatd(1,1),auxmatd(1,1))
11592 s1d = (auxmatd(1,1)+auxmatd(2,2))*ss1
11594 call matvec2(EUg(1,1,i+2),b1(1,itl),vtemp1d(1))
11595 call matvec2(AEAderg(1,1,1),vtemp1d(1),vtemp1d(1))
11596 s2d = scalar2(b1(1,itk),vtemp1d(1))
11598 call transpose2(AEA(1,1,2),atempd(1,1))
11599 call matmat2(atempd(1,1),EUgder(1,1,i+4),atempd(1,1))
11600 s8d = -(atempd(1,1)+atempd(2,2))*scalar2(cc(1,1,itl),vtemp2(1))
11602 call matvec2(auxmat(1,1),Ub2der(1,i+4),vtemp3d(1))
11603 s12d = scalar2(Ub2(1,i+2),vtemp3d(1))
11605 call matvec2(a_chuj(1,1,jj,i),Ub2der(1,i+4),vtemp4d(1))
11606 ss13d = scalar2(b1(1,itk),vtemp4d(1))
11607 s13d = (gtemp(1,1)+gtemp(2,2))*ss13d
11615 gel_loc_turn6(i+3)=gel_loc_turn6(i+3) &
11616 -0.5d0*ekont*(s1d+s2d+s8d+s12d+s13d)
11618 gel_loc_turn6(i+3)=gel_loc_turn6(i+3) &
11619 -0.5d0*ekont*(s2d+s12d)
11621 ! Cartesian derivatives
11626 call transpose2(AEAderx(1,1,lll,kkk,iii,1),auxmatd(1,1))
11627 call matmat2(EUg(1,1,i+1),auxmatd(1,1),auxmatd(1,1))
11628 s1d = (auxmatd(1,1)+auxmatd(2,2))*ss1
11630 call matvec2(EUg(1,1,i+2),b1(1,itl),vtemp1(1))
11631 call matvec2(AEAderx(1,1,lll,kkk,iii,1),vtemp1(1),&
11633 s2d = scalar2(b1(1,itk),vtemp1d(1))
11635 call transpose2(AEAderx(1,1,lll,kkk,iii,2),atempd(1,1))
11636 call matmat2(atempd(1,1),EUg(1,1,i+4),atempd(1,1))
11637 s8d = -(atempd(1,1)+atempd(2,2))* &
11638 scalar2(cc(1,1,itl),vtemp2(1))
11640 call matmat2(EUg(1,1,i+3),AEAderx(1,1,lll,kkk,iii,2),&
11642 call matvec2(auxmatd(1,1),Ub2(1,i+4),vtemp3d(1))
11643 s12d = scalar2(Ub2(1,i+2),vtemp3d(1))
11650 derx_turn(lll,kkk,iii) = derx_turn(lll,kkk,iii) &
11653 derx_turn(lll,kkk,iii) = derx_turn(lll,kkk,iii) &
11657 derx_turn(lll,kkk,3-iii) = derx_turn(lll,kkk,3-iii) &
11660 derx_turn(lll,kkk,3-iii) = derx_turn(lll,kkk,3-iii) &
11669 call transpose2(a_chuj_der(1,1,lll,kkk,kk,i+1),&
11671 call matmat2(achuj_tempd(1,1),EUg(1,1,i+2),gtempd(1,1))
11672 call matmat2(gtempd(1,1),EUg(1,1,i+3),gtempd(1,1))
11673 s13d=(gtempd(1,1)+gtempd(2,2))*ss13
11674 derx_turn(lll,kkk,2) = derx_turn(lll,kkk,2)-0.5d0*s13d
11675 call matvec2(a_chuj_der(1,1,lll,kkk,jj,i),Ub2(1,i+4),&
11677 ss13d = scalar2(b1(1,itk),vtemp4d(1))
11678 s13d = (gtemp(1,1)+gtemp(2,2))*ss13d
11679 derx_turn(lll,kkk,1) = derx_turn(lll,kkk,1)-0.5d0*s13d
11683 !d write(iout,*) 'eel6_turn6',eel_turn6,' eel_turn6_num',
11684 !d & 16*eel_turn6_num
11686 if (j.lt.nres-1) then
11693 if (l.lt.nres-1) then
11701 !grad ggg1(ll)=eel_turn6*g_contij(ll,1)
11702 !grad ggg2(ll)=eel_turn6*g_contij(ll,2)
11703 !grad ghalf=0.5d0*ggg1(ll)
11705 gturn6ij=eel_turn6*g_contij(ll,1)+ekont*derx_turn(ll,1,1)
11706 gturn6kl=eel_turn6*g_contij(ll,2)+ekont*derx_turn(ll,1,2)
11707 gcorr6_turn(ll,i)=gcorr6_turn(ll,i) & !+ghalf
11708 +ekont*derx_turn(ll,2,1)
11709 gcorr6_turn(ll,i+1)=gcorr6_turn(ll,i+1)+ekont*derx_turn(ll,3,1)
11710 gcorr6_turn(ll,j)=gcorr6_turn(ll,j) & !+ghalf
11711 +ekont*derx_turn(ll,4,1)
11712 gcorr6_turn(ll,j1)=gcorr6_turn(ll,j1)+ekont*derx_turn(ll,5,1)
11713 gcorr6_turn_long(ll,j)=gcorr6_turn_long(ll,j)+gturn6ij
11714 gcorr6_turn_long(ll,i)=gcorr6_turn_long(ll,i)-gturn6ij
11715 !grad ghalf=0.5d0*ggg2(ll)
11717 gcorr6_turn(ll,k)=gcorr6_turn(ll,k) & !+ghalf
11718 +ekont*derx_turn(ll,2,2)
11719 gcorr6_turn(ll,k+1)=gcorr6_turn(ll,k+1)+ekont*derx_turn(ll,3,2)
11720 gcorr6_turn(ll,l)=gcorr6_turn(ll,l) & !+ghalf
11721 +ekont*derx_turn(ll,4,2)
11722 gcorr6_turn(ll,l1)=gcorr6_turn(ll,l1)+ekont*derx_turn(ll,5,2)
11723 gcorr6_turn_long(ll,l)=gcorr6_turn_long(ll,l)+gturn6kl
11724 gcorr6_turn_long(ll,k)=gcorr6_turn_long(ll,k)-gturn6kl
11729 !grad gcorr6_turn(ll,m)=gcorr6_turn(ll,m)+ggg1(ll)
11734 !grad gcorr6_turn(ll,m)=gcorr6_turn(ll,m)+ggg2(ll)
11740 !grad gcorr6_turn(ll,m)=gcorr6_turn(ll,m)+ekont*derx_turn(ll,1,1)
11745 !grad gcorr6_turn(ll,m)=gcorr6_turn(ll,m)+ekont*derx_turn(ll,1,2)
11749 !d write (2,*) iii,g_corr6_loc(iii)
11751 eello_turn6=ekont*eel_turn6
11752 !d write (2,*) 'ekont',ekont
11753 !d write (2,*) 'eel_turn6',ekont*eel_turn6
11755 end function eello_turn6
11756 !-----------------------------------------------------------------------------
11757 subroutine MATVEC2(A1,V1,V2)
11758 !DIR$ INLINEALWAYS MATVEC2
11760 !DEC$ ATTRIBUTES FORCEINLINE::MATVEC2
11762 ! implicit real(kind=8) (a-h,o-z)
11763 ! include 'DIMENSIONS'
11764 real(kind=8),dimension(2) :: V1,V2
11765 real(kind=8),dimension(2,2) :: A1
11766 real(kind=8) :: vaux1,vaux2
11770 ! 3 VI=VI+A1(I,K)*V1(K)
11774 vaux1=a1(1,1)*v1(1)+a1(1,2)*v1(2)
11775 vaux2=a1(2,1)*v1(1)+a1(2,2)*v1(2)
11779 end subroutine MATVEC2
11780 !-----------------------------------------------------------------------------
11781 subroutine MATMAT2(A1,A2,A3)
11783 !DEC$ ATTRIBUTES FORCEINLINE::MATMAT2
11785 ! implicit real(kind=8) (a-h,o-z)
11786 ! include 'DIMENSIONS'
11787 real(kind=8),dimension(2,2) :: A1,A2,A3
11788 real(kind=8) :: ai3_11,ai3_12,ai3_21,ai3_22
11789 ! DIMENSION AI3(2,2)
11793 ! A3IJ=A3IJ+A1(I,K)*A2(K,J)
11799 ai3_11=a1(1,1)*a2(1,1)+a1(1,2)*a2(2,1)
11800 ai3_12=a1(1,1)*a2(1,2)+a1(1,2)*a2(2,2)
11801 ai3_21=a1(2,1)*a2(1,1)+a1(2,2)*a2(2,1)
11802 ai3_22=a1(2,1)*a2(1,2)+a1(2,2)*a2(2,2)
11808 end subroutine MATMAT2
11809 !-----------------------------------------------------------------------------
11810 real(kind=8) function scalar2(u,v)
11811 !DIR$ INLINEALWAYS scalar2
11813 real(kind=8),dimension(2) :: u,v
11816 scalar2=u(1)*v(1)+u(2)*v(2)
11818 end function scalar2
11819 !-----------------------------------------------------------------------------
11820 subroutine transpose2(a,at)
11821 !DIR$ INLINEALWAYS transpose2
11823 !DEC$ ATTRIBUTES FORCEINLINE::transpose2
11826 real(kind=8),dimension(2,2) :: a,at
11832 end subroutine transpose2
11833 !-----------------------------------------------------------------------------
11834 subroutine transpose(n,a,at)
11837 real(kind=8),dimension(n,n) :: a,at
11844 end subroutine transpose
11845 !-----------------------------------------------------------------------------
11846 subroutine prodmat3(a1,a2,kk,transp,prod)
11847 !DIR$ INLINEALWAYS prodmat3
11849 !DEC$ ATTRIBUTES FORCEINLINE::prodmat3
11853 real(kind=8),dimension(2,2) :: a1,a2,a2t,kk,prod
11855 !rc double precision auxmat(2,2),prod_(2,2)
11858 !rc call transpose2(kk(1,1),auxmat(1,1))
11859 !rc call matmat2(a1(1,1),auxmat(1,1),auxmat(1,1))
11860 !rc call matmat2(auxmat(1,1),a2(1,1),prod_(1,1))
11862 prod(1,1)=(a1(1,1)*kk(1,1)+a1(1,2)*kk(1,2))*a2(1,1) &
11863 +(a1(1,1)*kk(2,1)+a1(1,2)*kk(2,2))*a2(2,1)
11864 prod(1,2)=(a1(1,1)*kk(1,1)+a1(1,2)*kk(1,2))*a2(1,2) &
11865 +(a1(1,1)*kk(2,1)+a1(1,2)*kk(2,2))*a2(2,2)
11866 prod(2,1)=(a1(2,1)*kk(1,1)+a1(2,2)*kk(1,2))*a2(1,1) &
11867 +(a1(2,1)*kk(2,1)+a1(2,2)*kk(2,2))*a2(2,1)
11868 prod(2,2)=(a1(2,1)*kk(1,1)+a1(2,2)*kk(1,2))*a2(1,2) &
11869 +(a1(2,1)*kk(2,1)+a1(2,2)*kk(2,2))*a2(2,2)
11872 !rc call matmat2(a1(1,1),kk(1,1),auxmat(1,1))
11873 !rc call matmat2(auxmat(1,1),a2(1,1),prod_(1,1))
11875 prod(1,1)=(a1(1,1)*kk(1,1)+a1(1,2)*kk(2,1))*a2(1,1) &
11876 +(a1(1,1)*kk(1,2)+a1(1,2)*kk(2,2))*a2(2,1)
11877 prod(1,2)=(a1(1,1)*kk(1,1)+a1(1,2)*kk(2,1))*a2(1,2) &
11878 +(a1(1,1)*kk(1,2)+a1(1,2)*kk(2,2))*a2(2,2)
11879 prod(2,1)=(a1(2,1)*kk(1,1)+a1(2,2)*kk(2,1))*a2(1,1) &
11880 +(a1(2,1)*kk(1,2)+a1(2,2)*kk(2,2))*a2(2,1)
11881 prod(2,2)=(a1(2,1)*kk(1,1)+a1(2,2)*kk(2,1))*a2(1,2) &
11882 +(a1(2,1)*kk(1,2)+a1(2,2)*kk(2,2))*a2(2,2)
11885 ! call transpose2(a2(1,1),a2t(1,1))
11888 !rc print *,((prod_(i,j),i=1,2),j=1,2)
11889 !rc print *,((prod(i,j),i=1,2),j=1,2)
11892 end subroutine prodmat3
11893 !-----------------------------------------------------------------------------
11894 ! energy_p_new_barrier.F
11895 !-----------------------------------------------------------------------------
11896 subroutine sum_gradient
11897 ! implicit real(kind=8) (a-h,o-z)
11898 use io_base, only: pdbout
11899 ! include 'DIMENSIONS'
11903 !MS$ATTRIBUTES C :: proc_proc
11909 real(kind=8),dimension(3,-1:nres) :: gradbufc,gradbufx,gradbufc_sum,&
11910 gloc_scbuf !(3,maxres)
11912 real(kind=8),dimension(4*nres) :: glocbuf !(4*maxres)
11914 !el local variables
11915 integer :: i,j,k,ierror,ierr
11916 real(kind=8) :: gvdwc_norm,gvdwc_scp_norm,gelc_norm,gvdwpp_norm,&
11917 gradb_norm,ghpbc_norm,gradcorr_norm,gel_loc_norm,&
11918 gcorr3_turn_norm,gcorr4_turn_norm,gradcorr5_norm,&
11919 gradcorr6_norm,gcorr6_turn_norm,gsccorr_norm,&
11920 gscloc_norm,gvdwx_norm,gradx_scp_norm,ghpbx_norm,&
11921 gradxorr_norm,gsccorrx_norm,gsclocx_norm,gcorr6_max,&
11922 gsccorr_max,gsccorrx_max,time00
11924 ! include 'COMMON.SETUP'
11925 ! include 'COMMON.IOUNITS'
11926 ! include 'COMMON.FFIELD'
11927 ! include 'COMMON.DERIV'
11928 ! include 'COMMON.INTERACT'
11929 ! include 'COMMON.SBRIDGE'
11930 ! include 'COMMON.CHAIN'
11931 ! include 'COMMON.VAR'
11932 ! include 'COMMON.CONTROL'
11933 ! include 'COMMON.TIME1'
11934 ! include 'COMMON.MAXGRAD'
11935 ! include 'COMMON.SCCOR'
11941 write (iout,*) "sum_gradient gvdwc, gvdwx"
11943 write (iout,'(i3,3f10.5,5x,3f10.5,5x,f10.5)') &
11944 i,(gvdwx(j,i),j=1,3),(gvdwc(j,i),j=1,3)
11954 ! FG slaves call the following matching MPI_Bcast in ERGASTULUM
11955 if (nfgtasks.gt.1 .and. fg_rank.eq.0) &
11956 call MPI_Bcast(1,1,MPI_INTEGER,king,FG_COMM,IERROR)
11959 ! 9/29/08 AL Transform parts of gradients in site coordinates to the gradient
11960 ! in virtual-bond-vector coordinates
11963 ! write (iout,*) "gel_loc gel_loc_long and gel_loc_loc"
11965 ! write (iout,'(i5,3f10.5,2x,3f10.5,2x,f10.5)')
11966 ! & i,(gel_loc(j,i),j=1,3),(gel_loc_long(j,i),j=1,3),gel_loc_loc(i)
11968 ! write (iout,*) "gel_loc_tur3 gel_loc_turn4"
11970 ! write (iout,'(i5,3f10.5,2x,f10.5)')
11971 ! & i,(gcorr4_turn(j,i),j=1,3),gel_loc_turn4(i)
11973 ! write (iout,*) "gvdwc gvdwc_scp gvdwc_scpp"
11975 ! write (iout,'(i3,3f10.5,5x,3f10.5,5x,f10.5)') &
11976 ! i,(gvdwc(j,i),j=1,3),(gvdwc_scp(j,i),j=1,3),&
11977 ! (gvdwc_scpp(j,i),j=1,3)
11979 ! write (iout,*) "gelc_long gvdwpp gel_loc_long"
11981 ! write (iout,'(i3,3f10.5,5x,3f10.5,5x,f10.5)') &
11982 ! i,(gelc_long(j,i),j=1,3),(gvdwpp(j,i),j=1,3),&
11983 ! (gelc_loc_long(j,i),j=1,3)
11990 gradbufc(j,i)=wsc*gvdwc(j,i)+ &
11991 wscp*(gvdwc_scp(j,i)+gvdwc_scpp(j,i))+ &
11992 welec*gelc_long(j,i)+wvdwpp*gvdwpp(j,i)+ &
11993 wel_loc*gel_loc_long(j,i)+ &
11994 wcorr*gradcorr_long(j,i)+ &
11995 wcorr5*gradcorr5_long(j,i)+ &
11996 wcorr6*gradcorr6_long(j,i)+ &
11997 wturn6*gcorr6_turn_long(j,i)+ &
11998 wstrain*ghpbc(j,i) &
11999 +wliptran*gliptranc(j,i) &
12001 +welec*gshieldc(j,i) &
12002 +wcorr*gshieldc_ec(j,i) &
12003 +wturn3*gshieldc_t3(j,i)&
12004 +wturn4*gshieldc_t4(j,i)&
12005 +wel_loc*gshieldc_ll(j,i)&
12006 +wtube*gg_tube(j,i) &
12007 +wvdwpp_nucl*gvdwpp_nucl(j,i)+welpp*gelpp(j,i)+ &
12008 wvdwpsb*(gvdwpsb(j,i)+gvdwpsb1(j,i))+ &
12009 wvdwsb*gvdwsbc(j,i)+welsb*gelsbc(j,i)+ &
12010 wcorr_nucl*gradcorr_nucl(j,i)&
12011 +wcorr3_nucl*gradcorr3_nucl(j,i)+&
12012 wcatprot* gradpepcat(j,i)+ &
12013 wcatcat*gradcatcat(j,i)+ &
12014 wscbase*gvdwc_scbase(j,i)+ &
12015 wpepbase*gvdwc_pepbase(j,i)+&
12016 wscpho*gvdwc_scpho(j,i)+ &
12017 wpeppho*gvdwc_peppho(j,i)+wcatnucl*gradnuclcat(j,i)+ &
12018 gradlipbond(j,i)+gradlipang(j,i)+gradliplj(j,i)+gradlipelec(j,i)+&
12019 wcat_tran*gradcattranc(j,i)+gradcatangc(j,i)
12030 gradbufc(j,i)=wsc*gvdwc(j,i)+ &
12031 wscp*(gvdwc_scp(j,i)+gvdwc_scpp(j,i))+ &
12032 welec*gelc_long(j,i)+ &
12033 wbond*gradb(j,i)+ &
12034 wel_loc*gel_loc_long(j,i)+ &
12035 wcorr*gradcorr_long(j,i)+ &
12036 wcorr5*gradcorr5_long(j,i)+ &
12037 wcorr6*gradcorr6_long(j,i)+ &
12038 wturn6*gcorr6_turn_long(j,i)+ &
12039 wstrain*ghpbc(j,i) &
12040 +wliptran*gliptranc(j,i) &
12042 +welec*gshieldc(j,i)&
12043 +wcorr*gshieldc_ec(j,i) &
12044 +wturn4*gshieldc_t4(j,i) &
12045 +wel_loc*gshieldc_ll(j,i)&
12046 +wtube*gg_tube(j,i) &
12047 +wvdwpp_nucl*gvdwpp_nucl(j,i)+welpp*gelpp(j,i)+ &
12048 wvdwpsb*(gvdwpsb(j,i)+gvdwpsb1(j,i))+ &
12049 wvdwsb*gvdwsbc(j,i)+welsb*gelsbc(j,i)+ &
12050 wcorr_nucl*gradcorr_nucl(j,i) &
12051 +wcorr3_nucl*gradcorr3_nucl(j,i) +&
12052 wcatprot* gradpepcat(j,i)+ &
12053 wcatcat*gradcatcat(j,i)+ &
12054 wscbase*gvdwc_scbase(j,i)+ &
12055 wpepbase*gvdwc_pepbase(j,i)+&
12056 wscpho*gvdwc_scpho(j,i)+&
12057 wpeppho*gvdwc_peppho(j,i)+wcatnucl*gradnuclcat(j,i)+&
12058 gradlipbond(j,i)+gradlipang(j,i)+gradliplj(j,i)+gradlipelec(j,i)+&
12059 wcat_tran*gradcattranc(j,i)+gradcatangc(j,i)
12067 if (nfgtasks.gt.1) then
12070 write (iout,*) "gradbufc before allreduce"
12072 write (iout,'(i3,3f10.5)') i,(gradbufc(j,i),j=1,3)
12078 gradbufc_sum(j,i)=gradbufc(j,i)
12081 ! call MPI_AllReduce(gradbufc(1,1),gradbufc_sum(1,1),3*nres,
12082 ! & MPI_DOUBLE_PRECISION,MPI_SUM,FG_COMM,IERR)
12083 ! time_reduce=time_reduce+MPI_Wtime()-time00
12085 ! write (iout,*) "gradbufc_sum after allreduce"
12087 ! write (iout,'(i3,3f10.5)') i,(gradbufc_sum(j,i),j=1,3)
12092 ! time_allreduce=time_allreduce+MPI_Wtime()-time00
12096 gradbufc(k,i)=0.0d0
12100 write (iout,*) "igrad_start",igrad_start," igrad_end",igrad_end
12101 write (iout,*) (i," jgrad_start",jgrad_start(i),&
12102 " jgrad_end ",jgrad_end(i),&
12103 i=igrad_start,igrad_end)
12106 ! Obsolete and inefficient code; we can make the effort O(n) and, therefore,
12107 ! do not parallelize this part.
12109 ! do i=igrad_start,igrad_end
12110 ! do j=jgrad_start(i),jgrad_end(i)
12112 ! gradbufc(k,i)=gradbufc(k,i)+gradbufc_sum(k,j)
12117 gradbufc(j,nres-1)=gradbufc_sum(j,nres)
12121 gradbufc(j,i)=gradbufc(j,i+1)+gradbufc_sum(j,i+1)
12125 write (iout,*) "gradbufc after summing"
12127 write (iout,'(i3,3f10.5)') i,(gradbufc(j,i),j=1,3)
12135 write (iout,*) "gradbufc"
12137 write (iout,'(i3,3f10.5)') i,(gradbufc(j,i),j=1,3)
12144 gradbufc_sum(j,i)=gradbufc(j,i)
12145 gradbufc(j,i)=0.0d0
12149 gradbufc(j,nres-1)=gradbufc_sum(j,nres)
12153 gradbufc(j,i)=gradbufc(j,i+1)+gradbufc_sum(j,i+1)
12158 ! gradbufc(k,i)=0.0d0
12162 ! gradbufc(k,i)=gradbufc(k,i)+gradbufc(k,j)
12168 write (iout,*) "gradbufc after summing"
12170 write (iout,'(i3,3f10.5)') i,(gradbufc(j,i),j=1,3)
12179 gradbufc(k,nres)=0.0d0
12181 !el----------------
12182 !el if (.not.allocated(gradx)) allocate(gradx(3,nres,2)) !(3,maxres,2)
12183 !el if (.not.allocated(gradc)) allocate(gradc(3,nres,2)) !(3,maxres,2)
12184 !el-----------------
12188 gradc(j,i,icg)=gradbufc(j,i)+welec*gelc(j,i)+ &
12189 wel_loc*gel_loc(j,i)+ &
12190 0.5d0*(wscp*gvdwc_scpp(j,i)+ &
12191 welec*gelc_long(j,i)+wvdwpp*gvdwpp(j,i)+ &
12192 wel_loc*gel_loc_long(j,i)+ &
12193 wcorr*gradcorr_long(j,i)+ &
12194 wcorr5*gradcorr5_long(j,i)+ &
12195 wcorr6*gradcorr6_long(j,i)+ &
12196 wturn6*gcorr6_turn_long(j,i))+ &
12197 wbond*gradb(j,i)+ &
12198 wcorr*gradcorr(j,i)+ &
12199 wturn3*gcorr3_turn(j,i)+ &
12200 wturn4*gcorr4_turn(j,i)+ &
12201 wcorr5*gradcorr5(j,i)+ &
12202 wcorr6*gradcorr6(j,i)+ &
12203 wturn6*gcorr6_turn(j,i)+ &
12204 wsccor*gsccorc(j,i) &
12205 +wscloc*gscloc(j,i) &
12206 +wliptran*gliptranc(j,i) &
12208 +welec*gshieldc(j,i) &
12209 +welec*gshieldc_loc(j,i) &
12210 +wcorr*gshieldc_ec(j,i) &
12211 +wcorr*gshieldc_loc_ec(j,i) &
12212 +wturn3*gshieldc_t3(j,i) &
12213 +wturn3*gshieldc_loc_t3(j,i) &
12214 +wturn4*gshieldc_t4(j,i) &
12215 +wturn4*gshieldc_loc_t4(j,i) &
12216 +wel_loc*gshieldc_ll(j,i) &
12217 +wel_loc*gshieldc_loc_ll(j,i) &
12218 +wtube*gg_tube(j,i) &
12219 +0.5d0*(wvdwpp_nucl*gvdwpp_nucl(j,i)+welpp*gelpp(j,i)&
12220 +wvdwpsb*gvdwpsb1(j,i))&
12221 +wbond_nucl*gradb_nucl(j,i)+wsbloc*gsbloc(j,i)!&
12222 ! + gradcattranc(j,i)
12223 ! if (i.eq.21) then
12224 ! print *,"in sum",gradc(j,i,icg),wturn4*gcorr4_turn(j,i),&
12225 ! wturn4*gshieldc_t4(j,i), &
12226 ! wturn4*gshieldc_loc_t4(j,i)
12228 ! if ((i.le.2).and.(i.ge.1))
12229 ! print *,gradc(j,i,icg),&
12230 ! gradbufc(j,i),welec*gelc(j,i), &
12231 ! wel_loc*gel_loc(j,i), &
12232 ! wscp*gvdwc_scpp(j,i), &
12233 ! welec*gelc_long(j,i),wvdwpp*gvdwpp(j,i), &
12234 ! wel_loc*gel_loc_long(j,i), &
12235 ! wcorr*gradcorr_long(j,i), &
12236 ! wcorr5*gradcorr5_long(j,i), &
12237 ! wcorr6*gradcorr6_long(j,i), &
12238 ! wturn6*gcorr6_turn_long(j,i), &
12239 ! wbond*gradb(j,i), &
12240 ! wcorr*gradcorr(j,i), &
12241 ! wturn3*gcorr3_turn(j,i), &
12242 ! wturn4*gcorr4_turn(j,i), &
12243 ! wcorr5*gradcorr5(j,i), &
12244 ! wcorr6*gradcorr6(j,i), &
12245 ! wturn6*gcorr6_turn(j,i), &
12246 ! wsccor*gsccorc(j,i) &
12247 ! ,wscloc*gscloc(j,i) &
12248 ! ,wliptran*gliptranc(j,i) &
12250 ! ,welec*gshieldc(j,i) &
12251 ! ,welec*gshieldc_loc(j,i) &
12252 ! ,wcorr*gshieldc_ec(j,i) &
12253 ! ,wcorr*gshieldc_loc_ec(j,i) &
12254 ! ,wturn3*gshieldc_t3(j,i) &
12255 ! ,wturn3*gshieldc_loc_t3(j,i) &
12256 ! ,wturn4*gshieldc_t4(j,i) &
12257 ! ,wturn4*gshieldc_loc_t4(j,i) &
12258 ! ,wel_loc*gshieldc_ll(j,i) &
12259 ! ,wel_loc*gshieldc_loc_ll(j,i) &
12260 ! ,wtube*gg_tube(j,i) &
12261 ! ,wbond_nucl*gradb_nucl(j,i) &
12262 ! ,wvdwpp_nucl*gvdwpp_nucl(j,i),welpp*gelpp(j,i),&
12263 ! wvdwpsb*gvdwpsb1(j,i)&
12264 ! ,wbond_nucl*gradb_nucl(j,i),wsbloc*gsbloc(j,i)
12268 gradc(j,i,icg)=gradbufc(j,i)+welec*gelc(j,i)+ &
12269 wel_loc*gel_loc(j,i)+ &
12270 0.5d0*(wscp*gvdwc_scpp(j,i)+ &
12271 welec*gelc_long(j,i)+ &
12272 wel_loc*gel_loc_long(j,i)+ &
12273 !el wcorr*gcorr_long(j,i)+ & !el gcorr_long- brak deklaracji
12274 wcorr5*gradcorr5_long(j,i)+ &
12275 wcorr6*gradcorr6_long(j,i)+ &
12276 wturn6*gcorr6_turn_long(j,i))+ &
12277 wbond*gradb(j,i)+ &
12278 wcorr*gradcorr(j,i)+ &
12279 wturn3*gcorr3_turn(j,i)+ &
12280 wturn4*gcorr4_turn(j,i)+ &
12281 wcorr5*gradcorr5(j,i)+ &
12282 wcorr6*gradcorr6(j,i)+ &
12283 wturn6*gcorr6_turn(j,i)+ &
12284 wsccor*gsccorc(j,i) &
12285 +wscloc*gscloc(j,i) &
12287 +wliptran*gliptranc(j,i) &
12288 +welec*gshieldc(j,i) &
12289 +welec*gshieldc_loc(j,i) &
12290 +wcorr*gshieldc_ec(j,i) &
12291 +wcorr*gshieldc_loc_ec(j,i) &
12292 +wturn3*gshieldc_t3(j,i) &
12293 +wturn3*gshieldc_loc_t3(j,i) &
12294 +wturn4*gshieldc_t4(j,i) &
12295 +wturn4*gshieldc_loc_t4(j,i) &
12296 +wel_loc*gshieldc_ll(j,i) &
12297 +wel_loc*gshieldc_loc_ll(j,i) &
12298 +wtube*gg_tube(j,i) &
12299 +wbond_nucl*gradb_nucl(j,i) &
12300 +0.5d0*(wvdwpp_nucl*gvdwpp_nucl(j,i)+welpp*gelpp(j,i)&
12301 +wvdwpsb*gvdwpsb1(j,i))&
12302 +wsbloc*gsbloc(j,i)+wcatnucl*gradnuclcat(j,i)!&
12303 ! + gradcattranc(j,i)
12309 gradx(j,i,icg)=wsc*gvdwx(j,i)+wscp*gradx_scp(j,i)+ &
12310 wbond*gradbx(j,i)+ &
12311 wstrain*ghpbx(j,i)+wcorr*gradxorr(j,i)+ &
12312 wsccor*gsccorx(j,i) &
12313 +wscloc*gsclocx(j,i) &
12314 +wliptran*gliptranx(j,i) &
12315 +welec*gshieldx(j,i) &
12316 +wcorr*gshieldx_ec(j,i) &
12317 +wturn3*gshieldx_t3(j,i) &
12318 +wturn4*gshieldx_t4(j,i) &
12319 +wel_loc*gshieldx_ll(j,i)&
12320 +wtube*gg_tube_sc(j,i) &
12321 +wbond_nucl*gradbx_nucl(j,i) &
12322 +wvdwsb*gvdwsbx(j,i) &
12323 +welsb*gelsbx(j,i) &
12324 +wcorr_nucl*gradxorr_nucl(j,i)&
12325 +wcorr3_nucl*gradxorr3_nucl(j,i) &
12326 +wsbloc*gsblocx(j,i) &
12327 +wcatprot* gradpepcatx(j,i)&
12328 +wscbase*gvdwx_scbase(j,i) &
12329 +wpepbase*gvdwx_pepbase(j,i)&
12330 +wscpho*gvdwx_scpho(j,i)+wcatnucl*gradnuclcatx(j,i)&
12331 +wcat_tran*gradcattranx(j,i)+gradcatangx(j,i)
12332 ! if (i.eq.3) print *,"tu?", wscpho,gvdwx_scpho(j,i)
12336 ! write(iout,*), "const_homol",constr_homology
12337 if (constr_homology.gt.0) then
12340 gradc(j,i,icg)=gradc(j,i,icg)+duscdiff(j,i)
12341 ! write(iout,*) "duscdiff",duscdiff(j,i)
12342 gradx(j,i,icg)=gradx(j,i,icg)+duscdiffx(j,i)
12348 write (iout,*) "gloc before adding corr"
12350 write (iout,*) i,gloc(i,icg)
12354 gloc(i,icg)=gloc(i,icg)+wcorr*gcorr_loc(i) &
12355 +wcorr5*g_corr5_loc(i) &
12356 +wcorr6*g_corr6_loc(i) &
12357 +wturn4*gel_loc_turn4(i) &
12358 +wturn3*gel_loc_turn3(i) &
12359 +wturn6*gel_loc_turn6(i) &
12360 +wel_loc*gel_loc_loc(i)
12363 write (iout,*) "gloc after adding corr"
12365 write (iout,*) i,gloc(i,icg)
12370 if (nfgtasks.gt.1) then
12373 gradbufc(j,i)=gradc(j,i,icg)
12374 gradbufx(j,i)=gradx(j,i,icg)
12378 glocbuf(i)=gloc(i,icg)
12382 write (iout,*) "gloc_sc before reduce"
12385 write (iout,*) i,j,gloc_sc(j,i,icg)
12392 gloc_scbuf(j,i)=gloc_sc(j,i,icg)
12396 call MPI_Barrier(FG_COMM,IERR)
12397 time_barrier_g=time_barrier_g+MPI_Wtime()-time00
12399 call MPI_Reduce(gradbufc(1,0),gradc(1,0,icg),3*nres+3,&
12400 MPI_DOUBLE_PRECISION,MPI_SUM,king,FG_COMM,IERR)
12401 call MPI_Reduce(gradbufx(1,0),gradx(1,0,icg),3*nres+3,&
12402 MPI_DOUBLE_PRECISION,MPI_SUM,king,FG_COMM,IERR)
12403 call MPI_Reduce(glocbuf(1),gloc(1,icg),4*nres,&
12404 MPI_DOUBLE_PRECISION,MPI_SUM,king,FG_COMM,IERR)
12405 time_reduce=time_reduce+MPI_Wtime()-time00
12406 call MPI_Reduce(gloc_scbuf(1,0),gloc_sc(1,0,icg),3*nres+3,&
12407 MPI_DOUBLE_PRECISION,MPI_SUM,king,FG_COMM,IERR)
12408 time_reduce=time_reduce+MPI_Wtime()-time00
12410 ! print *,"gradbuf",gradbufc(1,1),gradc(1,1,icg)
12412 write (iout,*) "gloc_sc after reduce"
12415 write (iout,*) i,j,gloc_sc(j,i,icg)
12421 write (iout,*) "gloc after reduce"
12423 write (iout,*) i,gloc(i,icg)
12428 if (gnorm_check) then
12430 ! Compute the maximum elements of the gradient
12433 gvdwc_scp_max=0.0d0
12440 gcorr3_turn_max=0.0d0
12441 gcorr4_turn_max=0.0d0
12442 gradcorr5_max=0.0d0
12443 gradcorr6_max=0.0d0
12444 gcorr6_turn_max=0.0d0
12448 gradx_scp_max=0.0d0
12454 gvdwc_norm=dsqrt(scalar(gvdwc(1,i),gvdwc(1,i)))
12455 if (gvdwc_norm.gt.gvdwc_max) gvdwc_max=gvdwc_norm
12456 gvdwc_scp_norm=dsqrt(scalar(gvdwc_scp(1,i),gvdwc_scp(1,i)))
12457 if (gvdwc_scp_norm.gt.gvdwc_scp_max) &
12458 gvdwc_scp_max=gvdwc_scp_norm
12459 gelc_norm=dsqrt(scalar(gelc(1,i),gelc(1,i)))
12460 if (gelc_norm.gt.gelc_max) gelc_max=gelc_norm
12461 gvdwpp_norm=dsqrt(scalar(gvdwpp(1,i),gvdwpp(1,i)))
12462 if (gvdwpp_norm.gt.gvdwpp_max) gvdwpp_max=gvdwpp_norm
12463 gradb_norm=dsqrt(scalar(gradb(1,i),gradb(1,i)))
12464 if (gradb_norm.gt.gradb_max) gradb_max=gradb_norm
12465 ghpbc_norm=dsqrt(scalar(ghpbc(1,i),ghpbc(1,i)))
12466 if (ghpbc_norm.gt.ghpbc_max) ghpbc_max=ghpbc_norm
12467 gradcorr_norm=dsqrt(scalar(gradcorr(1,i),gradcorr(1,i)))
12468 if (gradcorr_norm.gt.gradcorr_max) gradcorr_max=gradcorr_norm
12469 gel_loc_norm=dsqrt(scalar(gel_loc(1,i),gel_loc(1,i)))
12470 if (gel_loc_norm.gt.gel_loc_max) gel_loc_max=gel_loc_norm
12471 gcorr3_turn_norm=dsqrt(scalar(gcorr3_turn(1,i),&
12473 if (gcorr3_turn_norm.gt.gcorr3_turn_max) &
12474 gcorr3_turn_max=gcorr3_turn_norm
12475 gcorr4_turn_norm=dsqrt(scalar(gcorr4_turn(1,i),&
12477 if (gcorr4_turn_norm.gt.gcorr4_turn_max) &
12478 gcorr4_turn_max=gcorr4_turn_norm
12479 gradcorr5_norm=dsqrt(scalar(gradcorr5(1,i),gradcorr5(1,i)))
12480 if (gradcorr5_norm.gt.gradcorr5_max) &
12481 gradcorr5_max=gradcorr5_norm
12482 gradcorr6_norm=dsqrt(scalar(gradcorr6(1,i),gradcorr6(1,i)))
12483 if (gradcorr6_norm.gt.gradcorr6_max) gcorr6_max=gradcorr6_norm
12484 gcorr6_turn_norm=dsqrt(scalar(gcorr6_turn(1,i),&
12486 if (gcorr6_turn_norm.gt.gcorr6_turn_max) &
12487 gcorr6_turn_max=gcorr6_turn_norm
12488 gsccorr_norm=dsqrt(scalar(gsccorc(1,i),gsccorc(1,i)))
12489 if (gsccorr_norm.gt.gsccorr_max) gsccorr_max=gsccorr_norm
12490 gscloc_norm=dsqrt(scalar(gscloc(1,i),gscloc(1,i)))
12491 if (gscloc_norm.gt.gscloc_max) gscloc_max=gscloc_norm
12492 gvdwx_norm=dsqrt(scalar(gvdwx(1,i),gvdwx(1,i)))
12493 if (gvdwx_norm.gt.gvdwx_max) gvdwx_max=gvdwx_norm
12494 gradx_scp_norm=dsqrt(scalar(gradx_scp(1,i),gradx_scp(1,i)))
12495 if (gradx_scp_norm.gt.gradx_scp_max) &
12496 gradx_scp_max=gradx_scp_norm
12497 ghpbx_norm=dsqrt(scalar(ghpbx(1,i),ghpbx(1,i)))
12498 if (ghpbx_norm.gt.ghpbx_max) ghpbx_max=ghpbx_norm
12499 gradxorr_norm=dsqrt(scalar(gradxorr(1,i),gradxorr(1,i)))
12500 if (gradxorr_norm.gt.gradxorr_max) gradxorr_max=gradxorr_norm
12501 gsccorrx_norm=dsqrt(scalar(gsccorx(1,i),gsccorx(1,i)))
12502 if (gsccorrx_norm.gt.gsccorrx_max) gsccorrx_max=gsccorrx_norm
12503 gsclocx_norm=dsqrt(scalar(gsclocx(1,i),gsclocx(1,i)))
12504 if (gsclocx_norm.gt.gsclocx_max) gsclocx_max=gsclocx_norm
12508 open(istat,file=statname,position="append")
12510 open(istat,file=statname,access="append")
12512 write (istat,'(1h#,21f10.2)') gvdwc_max,gvdwc_scp_max,&
12513 gelc_max,gvdwpp_max,gradb_max,ghpbc_max,&
12514 gradcorr_max,gel_loc_max,gcorr3_turn_max,gcorr4_turn_max,&
12515 gradcorr5_max,gradcorr6_max,gcorr6_turn_max,gsccorc_max,&
12516 gscloc_max,gvdwx_max,gradx_scp_max,ghpbx_max,gradxorr_max,&
12517 gsccorx_max,gsclocx_max
12519 if (gvdwc_max.gt.1.0d4) then
12520 write (iout,*) "gvdwc gvdwx gradb gradbx"
12522 write(iout,'(i5,4(3f10.2,5x))') i,(gvdwc(j,i),gvdwx(j,i),&
12523 gradb(j,i),gradbx(j,i),j=1,3)
12525 call pdbout(0.0d0,'cipiszcze',iout)
12532 write (iout,*) "gradc gradx gloc"
12534 write (iout,'(i5,3f10.5,5x,3f10.5,5x,f10.5)') &
12535 i,(gradc(j,i,icg),j=1,3),(gradx(j,i,icg),j=1,3),gloc(i,icg)
12540 time_sumgradient=time_sumgradient+MPI_Wtime()-time01
12543 end subroutine sum_gradient
12544 !-----------------------------------------------------------------------------
12546 ! implicit real(kind=8) (a-h,o-z)
12548 ! include 'DIMENSIONS'
12549 ! include 'COMMON.CHAIN'
12550 ! include 'COMMON.DERIV'
12551 ! include 'COMMON.CALC'
12552 ! include 'COMMON.IOUNITS'
12553 real(kind=8), dimension(3) :: dcosom1,dcosom2
12554 ! print *,"wchodze"
12555 eom1=eps2der*eps2rt_om1-2.0D0*alf1*eps3der+sigder*sigsq_om1 &
12556 +dCAVdOM1+ dGCLdOM1+ dPOLdOM1
12557 eom2=eps2der*eps2rt_om2+2.0D0*alf2*eps3der+sigder*sigsq_om2 &
12558 +dCAVdOM2+ dGCLdOM2+ dPOLdOM2
12560 eom12=evdwij*eps1_om12+eps2der*eps2rt_om12 &
12561 -2.0D0*alf12*eps3der+sigder*sigsq_om12&
12562 +dCAVdOM12+ dGCLdOM12
12566 ! eom12=evdwij*eps1_om12
12568 ! write (iout,*) "eps2der",eps2der," eps3der",eps3der,&
12570 ! write (iout,*) "eps1_om12",eps1_om12," eps2rt_om12",eps2rt_om12
12571 ! write (iout,*) "eom1",eom1," eom2",eom2," eom12",eom12
12572 !C print *,sss_ele_cut,'in sc_grad'
12574 dcosom1(k)=rij*(dc_norm(k,nres+i)-om1*erij(k))
12575 dcosom2(k)=rij*(dc_norm(k,nres+j)-om2*erij(k))
12578 gg(k)=(gg(k)+eom1*dcosom1(k)+eom2*dcosom2(k))*sss_ele_cut
12579 !C print *,'gg',k,gg(k)
12581 ! print *,i,j,gg_lipi(3),gg_lipj(3),sss_ele_cut
12582 ! write (iout,*) "gg",(gg(k),k=1,3)
12584 gvdwx(k,i)=gvdwx(k,i)-gg(k) +gg_lipi(k)&
12585 +(eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,nres+i)) &
12586 +eom1*(erij(k)-om1*dc_norm(k,nres+i)))*dsci_inv &
12589 gvdwx(k,j)=gvdwx(k,j)+gg(k)+gg_lipj(k)&
12590 +(eom12*(dc_norm(k,nres+i)-om12*dc_norm(k,nres+j)) &
12591 +eom2*(erij(k)-om2*dc_norm(k,nres+j)))*dscj_inv &
12594 ! write (iout,*)(eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,nres+i)) &
12595 ! +eom1*(erij(k)-om1*dc_norm(k,nres+i)))*dsci_inv
12596 ! write (iout,*)(eom12*(dc_norm(k,nres+i)-om12*dc_norm(k,nres+j)) &
12597 ! +eom2*(erij(k)-om2*dc_norm(k,nres+j)))*dscj_inv
12600 ! Calculate the components of the gradient in DC and X
12604 !grad gvdwc(l,k)=gvdwc(l,k)+gg(l)
12608 gvdwc(l,i)=gvdwc(l,i)-gg(l)+gg_lipi(l)
12609 gvdwc(l,j)=gvdwc(l,j)+gg(l)+gg_lipj(l)
12612 end subroutine sc_grad
12614 subroutine sc_grad_cat
12616 real(kind=8), dimension(3) :: dcosom1,dcosom2
12617 eom1=eps2der*eps2rt_om1-2.0D0*alf1*eps3der+sigder*sigsq_om1 &
12618 +dCAVdOM1+ dGCLdOM1+ dPOLdOM1
12619 eom2=eps2der*eps2rt_om2+2.0D0*alf2*eps3der+sigder*sigsq_om2 &
12620 +dCAVdOM2+ dGCLdOM2+ dPOLdOM2
12622 eom12=evdwij*eps1_om12+eps2der*eps2rt_om12 &
12623 -2.0D0*alf12*eps3der+sigder*sigsq_om12&
12624 +dCAVdOM12+ dGCLdOM12
12628 ! eom12=evdwij*eps1_om12
12632 dcosom1(k)=rij*(dc_norm(k,nres+i)-om1*erij(k))
12633 dcosom2(k)=rij*(dc_norm(k,j)-om2*erij(k))
12636 gg(k)=(gg(k)+eom1*dcosom1(k)+eom2*dcosom2(k))
12637 ! print *,'gg',k,gg(k)
12639 ! print *,i,j,gg_lipi(3),gg_lipj(3),sss_ele_cut
12640 ! write (iout,*) "gg",(gg(k),k=1,3)
12642 gradpepcatx(k,i)=gradpepcatx(k,i)-gg(k) &
12643 +(eom12*(dc_norm(k,j)-om12*dc_norm(k,nres+i)) &
12644 +eom1*(erij(k)-om1*dc_norm(k,nres+i)))*dsci_inv
12646 ! gradpepcatx(k,j)=gradpepcatx(k,j)+gg(k) &
12647 ! +(eom12*(dc_norm(k,nres+i)-om12*dc_norm(k,j)) &
12648 ! +eom2*(erij(k)-om2*dc_norm(k,j)))*dscj_inv
12650 ! write (iout,*)(eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,nres+i)) &
12651 ! +eom1*(erij(k)-om1*dc_norm(k,nres+i)))*dsci_inv
12652 ! write (iout,*)(eom12*(dc_norm(k,nres+i)-om12*dc_norm(k,nres+j)) &
12653 ! +eom2*(erij(k)-om2*dc_norm(k,nres+j)))*dscj_inv
12656 ! Calculate the components of the gradient in DC and X
12659 gradpepcat(l,i)=gradpepcat(l,i)-gg(l)
12660 gradpepcat(l,j)=gradpepcat(l,j)+gg(l)
12662 end subroutine sc_grad_cat
12664 subroutine sc_grad_cat_pep
12666 real(kind=8), dimension(3) :: dcosom1,dcosom2
12667 eom1=eps2der*eps2rt_om1-2.0D0*alf1*eps3der+sigder*sigsq_om1 &
12668 +dCAVdOM1+ dGCLdOM1+ dPOLdOM1
12669 eom2=eps2der*eps2rt_om2+2.0D0*alf2*eps3der+sigder*sigsq_om2 &
12670 +dCAVdOM2+ dGCLdOM2+ dPOLdOM2
12672 eom12=evdwij*eps1_om12+eps2der*eps2rt_om12 &
12673 -2.0D0*alf12*eps3der+sigder*sigsq_om12&
12674 +dCAVdOM12+ dGCLdOM12
12678 ! eom12=evdwij*eps1_om12
12682 dcosom1(k) = rij * (dc_norm(k,i) - om1 * erij(k))
12683 dcosom2(k) = rij * (dc_norm(k,nres+j) - om2 * erij(k))
12684 gg(k) = gg(k) + eom1 * dcosom1(k) + eom2 * dcosom2(k)
12685 gvdwc_pepbase(k,i)= gvdwc_pepbase(k,i) +0.5*(- gg(k)) &
12686 + (-eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,i)))&
12688 - (eom1*(erij(k)-om1*dc_norm(k,i)))*dsci_inv*2.0
12689 gvdwc_pepbase(k,i+1)= gvdwc_pepbase(k,i+1) +0.5*(- gg(k)) &
12690 - (-eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,i))) &
12692 + (eom1*(erij(k)-om1*dc_norm(k,i)))*dsci_inv*2.0
12693 gradpepcat(k,j)=gradpepcat(k,j)+gg(k)
12695 end subroutine sc_grad_cat_pep
12698 !-----------------------------------------------------------------------------
12699 subroutine mixder(thetai,thet_pred_mean,theta0i,E_tc_t)
12702 ! implicit real(kind=8) (a-h,o-z)
12703 ! include 'DIMENSIONS'
12704 ! include 'COMMON.LOCAL'
12705 ! include 'COMMON.IOUNITS'
12706 !el real(kind=8) :: term1,term2,termm,diffak,ratak,&
12707 !el ak,aktc,termpre,termexp,sigc,sig0i,time11,time12,sigcsq,&
12708 !el delthe0,sig0inv,sigtc,sigsqtc,delthec,
12709 real(kind=8) :: thetai,thet_pred_mean,theta0i,E_tc_t
12710 real(kind=8) :: t3,t6,t9,t12,t14,t16,t21,t23,t26,t27,t32,t40
12712 !el common /calcthet/ term1,term2,termm,diffak,ratak,&
12713 !el ak,aktc,termpre,termexp,sigc,sig0i,time11,time12,sigcsq,&
12714 !el delthe0,sig0inv,sigtc,sigsqtc,delthec,it
12715 !el local variables
12717 delthec=thetai-thet_pred_mean
12718 delthe0=thetai-theta0i
12719 ! "Thank you" to MAPLE (probably spared one day of hand-differentiation).
12720 t3 = thetai-thet_pred_mean
12724 t14 = t12+t6*sigsqtc
12726 t21 = thetai-theta0i
12732 E_tc_t = -((sigcsq+2.D0*t3*sigsqtc)*t9-t14*sigcsq*t3*t16*t9 &
12733 -aktc*sig0inv*t27)/t32+(t14*t9+aktc*t26)/t40 &
12734 *(-t12*t9-ak*sig0inv*t27)
12736 end subroutine mixder
12738 !-----------------------------------------------------------------------------
12740 !-----------------------------------------------------------------------------
12742 !-----------------------------------------------------------------------------
12743 ! This subroutine calculates the derivatives of the consecutive virtual
12744 ! bond vectors and the SC vectors in the virtual-bond angles theta and
12745 ! virtual-torsional angles phi, as well as the derivatives of SC vectors
12746 ! in the angles alpha and omega, describing the location of a side chain
12747 ! in its local coordinate system.
12749 ! The derivatives are stored in the following arrays:
12751 ! DDCDV - the derivatives of virtual-bond vectors DC in theta and phi.
12752 ! The structure is as follows:
12754 ! dDC(x,2)/dT(3),...,dDC(z,2)/dT(3),0, 0, 0
12755 ! 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)
12756 ! . . . . . . . . . . . . . . . . . .
12757 ! 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)
12761 ! 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)
12763 ! DXDV - the derivatives of the side-chain vectors in theta and phi.
12764 ! The structure is same as above.
12766 ! DCDS - the derivatives of the side chain vectors in the local spherical
12767 ! andgles alph and omega:
12769 ! 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)
12770 ! 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)
12774 ! 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)
12776 ! Version of March '95, based on an early version of November '91.
12778 !**********************************************************************
12779 ! implicit real(kind=8) (a-h,o-z)
12780 ! include 'DIMENSIONS'
12781 ! include 'COMMON.VAR'
12782 ! include 'COMMON.CHAIN'
12783 ! include 'COMMON.DERIV'
12784 ! include 'COMMON.GEO'
12785 ! include 'COMMON.LOCAL'
12786 ! include 'COMMON.INTERACT'
12787 real(kind=8),dimension(3,3,nres) :: drt,rdt,prordt,prodrt !(3,3,maxres)
12788 real(kind=8),dimension(3,3) :: dp,temp
12789 !el real(kind=8) :: fromto(3,3,maxdim) !(3,3,maxdim)(maxdim=(maxres-1)*(maxres-2)/2)
12790 real(kind=8),dimension(3) :: xx,xx1
12791 !el local variables
12792 integer :: i,k,l,j,m,ind,ind1,jjj
12793 real(kind=8) :: alphi,omegi,theta2,dpkl,dpjk,xj,rj,dxoijk,dxoiij,&
12794 tempkl,dsci,cosalphi,sinalphi,cosomegi,sinomegi,cost2,&
12795 sint2,xp,yp,xxp,yyp,zzp,dj
12797 ! common /przechowalnia/ fromto
12799 if(.not. allocated(fromto)) allocate(fromto(3,3))
12801 if(.not. allocated(fromto)) allocate(fromto(3,3,maxdim))
12803 ! get the position of the jth ijth fragment of the chain coordinate system
12804 ! in the fromto array.
12805 ! indmat(i,j)=((2*(nres-2)-i)*(i-1))/2+j-1
12807 ! maxdim=(nres-1)*(nres-2)/2
12808 ! allocate(dcdv(6,maxdim),dxds(6,nres))
12809 ! calculate the derivatives of transformation matrix elements in theta
12812 !el call flush(iout) !el
12814 rdt(1,1,i)=-rt(1,2,i)
12815 rdt(1,2,i)= rt(1,1,i)
12817 rdt(2,1,i)=-rt(2,2,i)
12818 rdt(2,2,i)= rt(2,1,i)
12820 rdt(3,1,i)=-rt(3,2,i)
12821 rdt(3,2,i)= rt(3,1,i)
12825 ! derivatives in phi
12831 drt(2,1,i)= rt(3,1,i)
12832 drt(2,2,i)= rt(3,2,i)
12833 drt(2,3,i)= rt(3,3,i)
12834 drt(3,1,i)=-rt(2,1,i)
12835 drt(3,2,i)=-rt(2,2,i)
12836 drt(3,3,i)=-rt(2,3,i)
12839 ! generate the matrix products of type r(i)t(i)...r(j)t(j)
12846 temp(k,l)=rt(k,l,i)
12851 fromto(k,l,ind)=temp(k,l)
12861 dpkl=dpkl+temp(k,m)*rt(m,l,j)
12864 fromto(k,l,ind)=dpkl
12876 ! Calculate derivatives.
12882 ! Derivatives of DC(i+1) in theta(i+2)
12888 dpjk=dpjk+prod(j,l,i)*rdt(l,k,i)
12891 prordt(j,k,i)=dp(j,k)
12894 dcdv(j,ind1)=vbld(i+1)*dp(j,1)
12897 ! Derivatives of SC(i+1) in theta(i+2)
12899 xx1(1)=-0.5D0*xloc(2,i+1)
12900 xx1(2)= 0.5D0*xloc(1,i+1)
12904 xj=xj+r(j,k,i)*xx1(k)
12911 rj=rj+prod(j,k,i)*xx(k)
12916 ! Derivatives of SC(i+1) in theta(i+3). The have to be handled differently
12917 ! than the other off-diagonal derivatives.
12922 dxoiij=dxoiij+dp(j,k)*xrot(k,i+2)
12924 dxdv(j,ind1+1)=dxoiij
12926 !d print *,ind1+1,(dxdv(j,ind1+1),j=1,3)
12928 ! Derivatives of DC(i+1) in phi(i+2)
12934 dpjk=dpjk+prod(j,l,i)*drt(l,k,i)
12937 prodrt(j,k,i)=dp(j,k)
12939 dcdv(j+3,ind1)=vbld(i+1)*dp(j,1)
12942 ! Derivatives of SC(i+1) in phi(i+2)
12945 xx(3)= xloc(2,i+1)*r(2,2,i)+xloc(3,i+1)*r(2,3,i)
12946 xx(2)=-xloc(2,i+1)*r(3,2,i)-xloc(3,i+1)*r(3,3,i)
12950 rj=rj+prod(j,k,i)*xx(k)
12955 ! Derivatives of SC(i+1) in phi(i+3).
12960 dxoiij=dxoiij+dp(j,k)*xrot(k,i+2)
12962 dxdv(j+3,ind1+1)=dxoiij
12965 ! Calculate the derivatives of DC(i+1) and SC(i+1) in theta(i+3) thru
12966 ! theta(nres) and phi(i+3) thru phi(nres).
12970 ind=indmat(i+1,j+1)
12971 !d print *,'i=',i,' j=',j,' ind=',ind,' ind1=',ind1
12973 call build_fromto(i+1,j+1,fromto)
12974 c write(iout,'(7hfromto 9f10.5)')((fromto(k,l),l=1,3),k=1,3)
12979 tempkl=tempkl+prordt(k,m,i)*fromto(m,l)
12989 tempkl=tempkl+prordt(k,m,i)*fromto(m,l,ind)
12995 !d print '(9f8.3)',((fromto(k,l,ind),l=1,3),k=1,3)
12996 !d print '(9f8.3)',((prod(k,l,i),l=1,3),k=1,3)
12997 !d print '(9f8.3)',((temp(k,l),l=1,3),k=1,3)
12998 ! Derivatives of virtual-bond vectors in theta
13000 dcdv(k,ind1)=vbld(i+1)*temp(k,1)
13002 !d print '(3f8.3)',(dcdv(k,ind1),k=1,3)
13003 ! Derivatives of SC vectors in theta
13007 dxoijk=dxoijk+temp(k,l)*xrot(l,j+2)
13009 dxdv(k,ind1+1)=dxoijk
13012 !--- Calculate the derivatives in phi
13019 tempkl=tempkl+prodrt(k,m,i)*fromto(m,l)
13029 tempkl=tempkl+prodrt(k,m,i)*fromto(m,l,ind)
13038 dcdv(k+3,ind1)=vbld(i+1)*temp(k,1)
13043 dxoijk=dxoijk+temp(k,l)*xrot(l,j+2)
13045 dxdv(k+3,ind1+1)=dxoijk
13050 ! Derivatives in alpha and omega:
13053 ! dsci=dsc(itype(i,1))
13058 if(alphi.ne.alphi) alphi=100.0
13059 if(omegi.ne.omegi) omegi=-100.0
13064 !d print *,'i=',i,' dsci=',dsci,' alphi=',alphi,' omegi=',omegi
13065 cosalphi=dcos(alphi)
13066 sinalphi=dsin(alphi)
13067 cosomegi=dcos(omegi)
13068 sinomegi=dsin(omegi)
13069 temp(1,1)=-dsci*sinalphi
13070 temp(2,1)= dsci*cosalphi*cosomegi
13071 temp(3,1)=-dsci*cosalphi*sinomegi
13073 temp(2,2)=-dsci*sinalphi*sinomegi
13074 temp(3,2)=-dsci*sinalphi*cosomegi
13075 theta2=pi-0.5D0*theta(i+1)
13079 !d print *,((temp(l,k),l=1,3),k=1,2)
13083 xxp= xp*cost2+yp*sint2
13084 yyp=-xp*sint2+yp*cost2
13087 xx(2)=yyp*r(2,2,i-1)+zzp*r(2,3,i-1)
13088 xx(3)=yyp*r(3,2,i-1)+zzp*r(3,3,i-1)
13092 dj=dj+prod(k,l,i-1)*xx(l)
13100 end subroutine cartder
13102 subroutine build_fromto(i,j,fromto)
13104 integer i,j,jj,k,l,m
13105 double precision fromto(3,3),temp(3,3),dp(3,3)
13106 double precision dpkl
13109 ! generate the matrix products of type r(i)t(i)...r(j)t(j) on the fly
13111 ! write (iout,*) "temp on entry"
13112 ! write (iout,'(3f10.5)') ((temp(k,l),l=1,3),k=1,3)
13114 ! ind=indmat(i,i+1)
13118 temp(k,l)=rt(k,l,i)
13123 fromto(k,l)=temp(k,l)
13128 ! ind=indmat(i,j+1)
13133 dpkl=dpkl+temp(k,m)*rt(m,l,j-1)
13145 ! write (iout,*) "temp upon exit"
13146 ! write (iout,'(3f10.5)') ((temp(k,l),l=1,3),k=1,3)
13150 end subroutine build_fromto
13153 !-----------------------------------------------------------------------------
13155 !-----------------------------------------------------------------------------
13156 subroutine check_cartgrad
13157 ! Check the gradient of Cartesian coordinates in internal coordinates.
13158 ! implicit real(kind=8) (a-h,o-z)
13159 ! include 'DIMENSIONS'
13160 ! include 'COMMON.IOUNITS'
13161 ! include 'COMMON.VAR'
13162 ! include 'COMMON.CHAIN'
13163 ! include 'COMMON.GEO'
13164 ! include 'COMMON.LOCAL'
13165 ! include 'COMMON.DERIV'
13166 real(kind=8),dimension(6,nres) :: temp
13167 real(kind=8),dimension(3) :: xx,gg
13168 integer :: i,k,j,ii
13169 real(kind=8) :: aincr,aincr2,alphi,omegi,theti,thet,phii
13170 ! indmat(i,j)=((2*(nres-2)-i)*(i-1))/2+j-1
13172 ! Check the gradient of the virtual-bond and SC vectors in the internal
13178 write (iout,'(a)') '**************** dx/dalpha'
13182 alph(i)=alph(i)+aincr
13184 temp(k,i)=dc(k,nres+i)
13188 gg(k)=(dc(k,nres+i)-temp(k,i))/aincr
13189 xx(k)=dabs((gg(k)-dxds(k,i))/(aincr*dabs(dxds(k,i))+aincr))
13191 write (iout,'(i4,3e15.6/4x,3e15.6,3f9.3)') &
13192 i,(gg(k),k=1,3),(dxds(k,i),k=1,3),(xx(k),k=1,3)
13198 write (iout,'(a)') '**************** dx/domega'
13202 omeg(i)=omeg(i)+aincr
13204 temp(k,i)=dc(k,nres+i)
13208 gg(k)=(dc(k,nres+i)-temp(k,i))/aincr
13209 xx(k)=dabs((gg(k)-dxds(k+3,i))/ &
13210 (aincr*dabs(dxds(k+3,i))+aincr))
13212 write (iout,'(i4,3e15.6/4x,3e15.6,3f9.3)') &
13213 i,(gg(k),k=1,3),(dxds(k+3,i),k=1,3),(xx(k),k=1,3)
13219 write (iout,'(a)') '**************** dx/dtheta'
13223 theta(i)=theta(i)+aincr
13226 temp(k,j)=dc(k,nres+j)
13232 ! print *,'i=',i-2,' j=',j-1,' ii=',ii
13234 gg(k)=(dc(k,nres+j)-temp(k,j))/aincr
13235 xx(k)=dabs((gg(k)-dxdv(k,ii))/ &
13236 (aincr*dabs(dxdv(k,ii))+aincr))
13238 write (iout,'(2i4,3e14.6/8x,3e14.6,3f9.3)') &
13239 i,j,(gg(k),k=1,3),(dxdv(k,ii),k=1,3),(xx(k),k=1,3)
13246 write (iout,'(a)') '***************** dx/dphi'
13249 phi(i)=phi(i)+aincr
13252 temp(k,j)=dc(k,nres+j)
13260 gg(k)=(dc(k,nres+j)-temp(k,j))/aincr
13261 xx(k)=dabs((gg(k)-dxdv(k+3,ii))/ &
13262 (aincr*dabs(dxdv(k+3,ii))+aincr))
13264 write (iout,'(2i4,3e14.6/8x,3e14.6,3f9.3)') &
13265 i,j,(gg(k),k=1,3),(dxdv(k+3,ii),k=1,3),(xx(k),k=1,3)
13268 phi(i)=phi(i)-aincr
13271 write (iout,'(a)') '****************** ddc/dtheta'
13274 theta(i+2)=thet+aincr
13285 gg(k)=(dc(k,j)-temp(k,j))/aincr
13286 xx(k)=dabs((gg(k)-dcdv(k,ii))/ &
13287 (aincr*dabs(dcdv(k,ii))+aincr))
13289 write (iout,'(2i4,3e14.6/8x,3e14.6,3f9.3)') &
13290 i,j,(gg(k),k=1,3),(dcdv(k,ii),k=1,3),(xx(k),k=1,3)
13300 write (iout,'(a)') '******************* ddc/dphi'
13303 phi(i+3)=phii+aincr
13314 gg(k)=(dc(k,j)-temp(k,j))/aincr
13315 xx(k)=dabs((gg(k)-dcdv(k+3,ii))/ &
13316 (aincr*dabs(dcdv(k+3,ii))+aincr))
13318 write (iout,'(2i4,3e14.6/8x,3e14.6,3f9.3)') &
13319 i,j,(gg(k),k=1,3),(dcdv(k+3,ii),k=1,3),(xx(k),k=1,3)
13330 end subroutine check_cartgrad
13331 !-----------------------------------------------------------------------------
13332 subroutine check_ecart
13333 ! Check the gradient of the energy in Cartesian coordinates.
13334 ! implicit real(kind=8) (a-h,o-z)
13335 ! include 'DIMENSIONS'
13336 ! include 'COMMON.CHAIN'
13337 ! include 'COMMON.DERIV'
13338 ! include 'COMMON.IOUNITS'
13339 ! include 'COMMON.VAR'
13340 ! include 'COMMON.CONTACTS'
13342 !el integer :: icall
13343 !el common /srutu/ icall
13344 real(kind=8),dimension(6) :: ggg
13345 real(kind=8),dimension(3) :: cc,xx,ddc,ddx
13346 real(kind=8),dimension(6*nres) :: x,g !(maxvar) (maxvar=6*maxres)
13347 real(kind=8),dimension(6,nres) :: grad_s
13348 real(kind=8),dimension(0:n_ene) :: energia,energia1
13349 integer :: uiparm(1)
13350 real(kind=8) :: urparm(1)
13352 integer :: nf,i,j,k
13353 real(kind=8) :: aincr,etot,etot1
13359 print '(a)','CG processor',me,' calling CHECK_CART.',aincr
13362 call geom_to_var(nvar,x)
13363 call etotal(energia)
13365 !el call enerprint(energia)
13366 call gradient(nvar,x,nf,g,uiparm,urparm,fdum)
13369 write (iout,'(i5,3f10.5)') i,(gradxorr(j,i),j=1,3)
13373 grad_s(j,i)=gradc(j,i,icg)
13374 grad_s(j+3,i)=gradx(j,i,icg)
13378 write (iout,'(/a/)') 'Gradient in virtual-bond and SC vectors'
13383 ddx(j)=dc(j,i+nres)
13386 dc(j,i)=dc(j,i)+aincr
13388 c(j,k)=c(j,k)+aincr
13389 c(j,k+nres)=c(j,k+nres)+aincr
13392 call etotal(energia1)
13394 ggg(j)=(etot1-etot)/aincr
13397 c(j,k)=c(j,k)-aincr
13398 c(j,k+nres)=c(j,k+nres)-aincr
13402 c(j,i+nres)=c(j,i+nres)+aincr
13403 dc(j,i+nres)=dc(j,i+nres)+aincr
13405 call etotal(energia1)
13407 ggg(j+3)=(etot1-etot)/aincr
13409 dc(j,i+nres)=ddx(j)
13411 write (iout,'(i3,6(1pe12.5)/3x,6(1pe12.5)/)') &
13412 i,(ggg(k),k=1,6),(grad_s(k,i),k=1,6)
13415 end subroutine check_ecart
13417 !-----------------------------------------------------------------------------
13418 subroutine check_ecartint
13419 ! Check the gradient of the energy in Cartesian coordinates.
13420 use io_base, only: intout
13421 use MD_data, only: iset
13422 ! implicit real*8 (a-h,o-z)
13423 ! include 'DIMENSIONS'
13424 ! include 'COMMON.CONTROL'
13425 ! include 'COMMON.CHAIN'
13426 ! include 'COMMON.DERIV'
13427 ! include 'COMMON.IOUNITS'
13428 ! include 'COMMON.VAR'
13429 ! include 'COMMON.CONTACTS'
13430 ! include 'COMMON.MD'
13431 ! include 'COMMON.LOCAL'
13432 ! include 'COMMON.SPLITELE'
13434 !el integer :: icall
13435 !el common /srutu/ icall
13436 real(kind=8),dimension(6) :: ggg,ggg1
13437 real(kind=8),dimension(3) :: cc,xx,ddc,ddx,ddc1,ddcn
13438 real(kind=8),dimension(6*nres) :: x,g !(maxvar) (maxvar=6*maxres)
13439 real(kind=8),dimension(3) :: dcnorm_safe1,dcnorm_safe2,dxnorm_safe
13440 real(kind=8),dimension(6,0:nres) :: grad_s,grad_s1 !(6,0:maxres)
13441 real(kind=8),dimension(nres) :: phi_temp,theta_temp,alph_temp,omeg_temp !(maxres)
13442 real(kind=8),dimension(0:n_ene) :: energia,energia1
13443 integer :: uiparm(1)
13444 real(kind=8) :: urparm(1)
13446 integer :: i,j,k,nf
13447 real(kind=8) :: rlambd,aincr,etot,etot1,etot11,etot12,etot2,&
13454 if (iset.eq.0) iset=1
13456 ! call intcartderiv
13457 ! call checkintcartgrad
13460 write(iout,*) 'Calling CHECK_ECARTINT.'
13463 call geom_to_var(nvar,x)
13464 write (iout,*) "split_ene ",split_ene
13466 if (.not.split_ene) then
13468 call etotal(energia)
13473 write (iout,'(i5,3f10.5)') i,(gradxorr(j,i),j=1,3)
13476 grad_s(j,0)=gcart(j,0)
13480 grad_s(j,i)=gcart(j,i)
13481 grad_s(j+3,i)=gxcart(j,i)
13482 write(iout,*) "before movement analytical gradient"
13484 write (iout,'(i5,3f10.5,5x,3f10.5)') i,(gcart(j,i),j=1,3),&
13485 (gxcart(j,i),j=1,3)
13491 !- split gradient check
13493 call etotal_long(energia)
13494 !el call enerprint(energia)
13498 write (iout,'(i5,3f10.5,5x,3f10.5)') i,(gcart(j,i),j=1,3),&
13499 (gxcart(j,i),j=1,3)
13502 grad_s(j,0)=gcart(j,0)
13506 grad_s(j,i)=gcart(j,i)
13507 grad_s(j+3,i)=gxcart(j,i)
13511 call etotal_short(energia)
13512 call enerprint(energia)
13516 write (iout,'(i5,3f10.5,5x,3f10.5)') i,(gcart(j,i),j=1,3),&
13517 (gxcart(j,i),j=1,3)
13520 grad_s1(j,0)=gcart(j,0)
13524 grad_s1(j,i)=gcart(j,i)
13525 grad_s1(j+3,i)=gxcart(j,i)
13529 write (iout,'(/a/)') 'Gradient in virtual-bond and SC vectors'
13533 if (nnt.gt.1 .and. i.eq.nnt) ddc1(j)=c(j,1)
13534 if (nct.lt.nres .and. i.eq.nct) ddcn(j)=c(j,nres)
13537 dcnorm_safe1(j)=dc_norm(j,i-1)
13538 dcnorm_safe2(j)=dc_norm(j,i)
13539 dxnorm_safe(j)=dc_norm(j,i+nres)
13542 c(j,i)=ddc(j)+aincr
13543 if (nnt.gt.1 .and. i.eq.nnt) c(j,1)=c(j,1)+aincr
13544 if (nct.lt.nres .and. i.eq.nct) c(j,nres)=c(j,nres)+aincr
13545 if (i.gt.1) dc(j,i-1)=c(j,i)-c(j,i-1)
13546 dc(j,i)=c(j,i+1)-c(j,i)
13547 dc(j,i+nres)=c(j,i+nres)-c(j,i)
13548 call int_from_cart1(.false.)
13549 if (.not.split_ene) then
13551 call etotal(energia1)
13553 write (iout,*) "ij",i,j," etot1",etot1
13556 call etotal_long(energia1)
13558 call etotal_short(energia1)
13561 !- end split gradient
13562 ! write(iout,'(2i5,2(a,f15.10))')i,j," etot",etot," etot1",etot1
13563 c(j,i)=ddc(j)-aincr
13564 if (nnt.gt.1 .and. i.eq.nnt) c(j,1)=ddc1(j)-aincr
13565 if (nct.lt.nres .and. i.eq.nct) c(j,nres)=ddcn(j)-aincr
13566 if (i.gt.1) dc(j,i-1)=c(j,i)-c(j,i-1)
13567 dc(j,i)=c(j,i+1)-c(j,i)
13568 dc(j,i+nres)=c(j,i+nres)-c(j,i)
13569 call int_from_cart1(.false.)
13570 if (.not.split_ene) then
13572 call etotal(energia1)
13574 write (iout,*) "ij",i,j," etot2",etot2
13575 ggg(j)=(etot1-etot2)/(2*aincr)
13578 call etotal_long(energia1)
13580 ggg(j)=(etot11-etot21)/(2*aincr)
13581 call etotal_short(energia1)
13583 ggg1(j)=(etot12-etot22)/(2*aincr)
13584 !- end split gradient
13585 ! write (iout,*) "etot21",etot21," etot22",etot22
13587 ! write(iout,'(2i5,2(a,f15.10))')i,j," etot",etot," etot2",etot2
13589 if (nnt.gt.1 .and. i.eq.nnt) c(j,1)=ddc1(j)
13590 if (nct.lt.nres .and. i.eq.nct) c(j,nres)=ddcn(j)
13591 if (i.gt.1) dc(j,i-1)=c(j,i)-c(j,i-1)
13592 dc(j,i)=c(j,i+1)-c(j,i)
13593 dc(j,i+nres)=c(j,i+nres)-c(j,i)
13594 dc_norm(j,i-1)=dcnorm_safe1(j)
13595 dc_norm(j,i)=dcnorm_safe2(j)
13596 dc_norm(j,i+nres)=dxnorm_safe(j)
13599 c(j,i+nres)=ddx(j)+aincr
13600 dc(j,i+nres)=c(j,i+nres)-c(j,i)
13601 call int_from_cart1(.false.)
13602 if (.not.split_ene) then
13604 call etotal(energia1)
13608 call etotal_long(energia1)
13610 call etotal_short(energia1)
13613 !- end split gradient
13614 c(j,i+nres)=ddx(j)-aincr
13615 dc(j,i+nres)=c(j,i+nres)-c(j,i)
13616 call int_from_cart1(.false.)
13617 if (.not.split_ene) then
13619 call etotal(energia1)
13621 ggg(j+3)=(etot1-etot2)/(2*aincr)
13624 call etotal_long(energia1)
13626 ggg(j+3)=(etot11-etot21)/(2*aincr)
13627 call etotal_short(energia1)
13629 ggg1(j+3)=(etot12-etot22)/(2*aincr)
13630 !- end split gradient
13632 ! write(iout,'(2i5,2(a,f15.10))')i,j," etot",etot," etot2",etot2
13634 dc(j,i+nres)=c(j,i+nres)-c(j,i)
13635 dc_norm(j,i+nres)=dxnorm_safe(j)
13636 call int_from_cart1(.false.)
13638 write (iout,'(i3,6(1pe12.5)/3x,6(1pe12.5)/3x,6(1pe12.5)/)') &
13639 i,(ggg(k),k=1,6),(grad_s(k,i),k=1,6),(ggg(k)/grad_s(k,i),k=1,6)
13640 if (split_ene) then
13641 write (iout,'(i3,6(1pe12.5)/3x,6(1pe12.5)/3x,6(1pe12.5)/)') &
13642 i,(ggg1(k),k=1,6),(grad_s1(k,i),k=1,6),(ggg1(k)/grad_s1(k,i),&
13644 write (iout,'(i3,6(1pe12.5)/3x,6(1pe12.5)/3x,6(1pe12.5)/)') &
13645 i,(ggg(k)+ggg1(k),k=1,6),(grad_s(k,i)+grad_s1(k,i),k=1,6),&
13646 ((ggg(k)+ggg1(k))/(grad_s(k,i)+grad_s1(k,i)),k=1,6)
13650 end subroutine check_ecartint
13652 !-----------------------------------------------------------------------------
13653 subroutine check_ecartint
13654 ! Check the gradient of the energy in Cartesian coordinates.
13655 use io_base, only: intout
13656 use MD_data, only: iset
13657 ! implicit real*8 (a-h,o-z)
13658 ! include 'DIMENSIONS'
13659 ! include 'COMMON.CONTROL'
13660 ! include 'COMMON.CHAIN'
13661 ! include 'COMMON.DERIV'
13662 ! include 'COMMON.IOUNITS'
13663 ! include 'COMMON.VAR'
13664 ! include 'COMMON.CONTACTS'
13665 ! include 'COMMON.MD'
13666 ! include 'COMMON.LOCAL'
13667 ! include 'COMMON.SPLITELE'
13669 !el integer :: icall
13670 !el common /srutu/ icall
13671 real(kind=8),dimension(6) :: ggg,ggg1
13672 real(kind=8),dimension(3) :: cc,xx,ddc,ddx
13673 real(kind=8),dimension(6*nres) :: x,g !(maxvar) (maxvar=6*maxres)
13674 real(kind=8),dimension(3) :: dcnorm_safe,dxnorm_safe
13675 real(kind=8),dimension(6,0:nres) :: grad_s,grad_s1 !(6,0:maxres)
13676 real(kind=8),dimension(nres) :: phi_temp,theta_temp,alph_temp,omeg_temp !(maxres)
13677 real(kind=8),dimension(0:n_ene) :: energia,energia1
13678 integer :: uiparm(1)
13679 real(kind=8) :: urparm(1)
13681 integer :: i,j,k,nf
13682 real(kind=8) :: rlambd,aincr,etot,etot1,etot11,etot12,etot2,&
13689 if (iset.eq.0) iset=1
13691 ! call intcartderiv
13692 ! call checkintcartgrad
13695 write(iout,*) 'Calling CHECK_ECARTINT.',aincr
13698 call geom_to_var(nvar,x)
13699 if (.not.split_ene) then
13700 call etotal(energia)
13702 ! call enerprint(energia)
13706 write (iout,'(i5,3f10.5)') i,(gradxorr(j,i),j=1,3)
13709 grad_s(j,0)=gcart(j,0)
13710 grad_s(j+3,0)=gxcart(j,0)
13714 grad_s(j,i)=gcart(j,i)
13715 grad_s(j+3,i)=gxcart(j,i)
13718 write(iout,*) "before movement analytical gradient"
13720 write (iout,'(i5,3f10.5,5x,3f10.5)') i,(gcart(j,i),j=1,3),&
13721 (gxcart(j,i),j=1,3)
13725 !- split gradient check
13727 call etotal_long(energia)
13728 !el call enerprint(energia)
13732 write (iout,'(i5,3f10.5,5x,3f10.5)') i,(gcart(j,i),j=1,3),&
13733 (gxcart(j,i),j=1,3)
13736 grad_s(j,0)=gcart(j,0)
13740 grad_s(j,i)=gcart(j,i)
13741 ! if (i.eq.21) print *,"PRZEKAZANIE",gcart(j,i)
13742 grad_s(j+3,i)=gxcart(j,i)
13746 call etotal_short(energia)
13747 !el call enerprint(energia)
13751 write (iout,'(i5,3f10.5,5x,3f10.5)') i,(gcart(j,i),j=1,3),&
13752 (gxcart(j,i),j=1,3)
13755 grad_s1(j,0)=gcart(j,0)
13759 grad_s1(j,i)=gcart(j,i)
13760 grad_s1(j+3,i)=gxcart(j,i)
13764 write (iout,'(/a/)') 'Gradient in virtual-bond and SC vectors'
13769 ddx(j)=dc(j,i+nres)
13771 dcnorm_safe(k)=dc_norm(k,i)
13772 dxnorm_safe(k)=dc_norm(k,i+nres)
13776 dc(j,i)=ddc(j)+aincr
13777 call chainbuild_cart
13779 ! Broadcast the order to compute internal coordinates to the slaves.
13780 ! if (nfgtasks.gt.1)
13781 ! & call MPI_Bcast(6,1,MPI_INTEGER,king,FG_COMM,IERROR)
13783 ! call int_from_cart1(.false.)
13784 if (.not.split_ene) then
13786 call etotal(energia1)
13788 ! call enerprint(energia1)
13791 call etotal_long(energia1)
13793 call etotal_short(energia1)
13795 ! write (iout,*) "etot11",etot11," etot12",etot12
13797 !- end split gradient
13798 ! write(iout,'(2i5,2(a,f15.10))')i,j," etot",etot," etot1",etot1
13799 dc(j,i)=ddc(j)-aincr
13800 call chainbuild_cart
13801 ! call int_from_cart1(.false.)
13802 if (.not.split_ene) then
13804 call etotal(energia1)
13805 ! call enerprint(energia1)
13807 ggg(j)=(etot1-etot2)/(2*aincr)
13810 call etotal_long(energia1)
13812 ggg(j)=(etot11-etot21)/(2*aincr)
13813 call etotal_short(energia1)
13815 ggg1(j)=(etot12-etot22)/(2*aincr)
13816 !- end split gradient
13817 ! write (iout,*) "etot21",etot21," etot22",etot22
13819 ! write(iout,'(2i5,2(a,f15.10))')i,j," etot",etot," etot2",etot2
13821 call chainbuild_cart
13824 dc(j,i+nres)=ddx(j)+aincr
13825 call chainbuild_cart
13826 ! write (iout,*) "i",i," j",j," dxnorm+ and dxnorm"
13827 ! write (iout,'(3f15.10)') (dc_norm(k,i+nres),k=1,3)
13828 ! write (iout,'(3f15.10)') (dxnorm_safe(k),k=1,3)
13829 ! write (iout,*) "dxnormnorm",dsqrt(
13830 ! & dc_norm(1,i+nres)**2+dc_norm(2,i+nres)**2+dc_norm(3,i+nres)**2)
13831 ! write (iout,*) "dxnormnormsafe",dsqrt(
13832 ! & dxnorm_safe(1)**2+dxnorm_safe(2)**2+dxnorm_safe(3)**2)
13834 if (.not.split_ene) then
13836 call etotal(energia1)
13837 ! call enerprint(energia1)
13839 ! print *,"ene",energia1(0),energia1(57)
13842 call etotal_long(energia1)
13844 call etotal_short(energia1)
13847 !- end split gradient
13848 ! write(iout,'(2i5,2(a,f15.10))')i,j," etot",etot," etot1",etot1
13849 dc(j,i+nres)=ddx(j)-aincr
13850 call chainbuild_cart
13851 ! write (iout,*) "i",i," j",j," dxnorm- and dxnorm"
13852 ! write (iout,'(3f15.10)') (dc_norm(k,i+nres),k=1,3)
13853 ! write (iout,'(3f15.10)') (dxnorm_safe(k),k=1,3)
13855 ! write (iout,*) "dxnormnorm",dsqrt(
13856 ! & dc_norm(1,i+nres)**2+dc_norm(2,i+nres)**2+dc_norm(3,i+nres)**2)
13857 ! write (iout,*) "dxnormnormsafe",dsqrt(
13858 ! & dxnorm_safe(1)**2+dxnorm_safe(2)**2+dxnorm_safe(3)**2)
13859 if (.not.split_ene) then
13861 call etotal(energia1)
13863 ! call enerprint(energia1)
13864 ! print *,"ene",energia1(0),energia1(57)
13865 ggg(j+3)=(etot1-etot2)/(2*aincr)
13868 call etotal_long(energia1)
13870 ggg(j+3)=(etot11-etot21)/(2*aincr)
13871 call etotal_short(energia1)
13873 ggg1(j+3)=(etot12-etot22)/(2*aincr)
13874 !- end split gradient
13876 ! write(iout,'(2i5,2(a,f15.10))')i,j," etot",etot," etot2",etot2
13877 dc(j,i+nres)=ddx(j)
13878 call chainbuild_cart
13880 write (iout,'(i3,6(1pe12.5)/3x,6(1pe12.5)/3x,6(1pe12.5)/)') &
13881 i,(ggg(k),k=1,6),(grad_s(k,i),k=1,6),(ggg(k)/grad_s(k,i),k=1,6)
13882 if (split_ene) then
13883 write (iout,'(i3,6(1pe12.5)/3x,6(1pe12.5)/3x,6(1pe12.5)/)') &
13884 i,(ggg1(k),k=1,6),(grad_s1(k,i),k=1,6),(ggg1(k)/grad_s1(k,i),&
13886 write (iout,'(i3,6(1pe12.5)/3x,6(1pe12.5)/3x,6(1pe12.5)/)') &
13887 i,(ggg(k)+ggg1(k),k=1,6),(grad_s(k,i)+grad_s1(k,i),k=1,6),&
13888 ((ggg(k)+ggg1(k))/(grad_s(k,i)+grad_s1(k,i)),k=1,6)
13892 end subroutine check_ecartint
13894 !-----------------------------------------------------------------------------
13895 subroutine check_eint
13896 ! Check the gradient of energy in internal coordinates.
13897 ! implicit real(kind=8) (a-h,o-z)
13898 ! include 'DIMENSIONS'
13899 ! include 'COMMON.CHAIN'
13900 ! include 'COMMON.DERIV'
13901 ! include 'COMMON.IOUNITS'
13902 ! include 'COMMON.VAR'
13903 ! include 'COMMON.GEO'
13905 !el integer :: icall
13906 !el common /srutu/ icall
13907 real(kind=8),dimension(6*nres) :: x,gana,gg !(maxvar) (maxvar=6*maxres)
13908 integer :: uiparm(1)
13909 real(kind=8) :: urparm(1)
13910 real(kind=8),dimension(0:n_ene) :: energia,energia1,energia2
13911 character(len=6) :: key
13914 real(kind=8) :: xi,aincr,etot,etot1,etot2
13917 print '(a)','Calling CHECK_INT.'
13921 call geom_to_var(nvar,x)
13922 call var_to_geom(nvar,x)
13925 ! print *,'ICG=',ICG
13926 call etotal(energia)
13928 !el call enerprint(energia)
13929 ! print *,'ICG=',ICG
13931 if (MyID.ne.BossID) then
13932 call mp_bcast(x(1),8*(nvar+3),BossID,fgGroupID)
13940 !d write (iout,'(10f8.3)') (rad2deg*x(i),i=1,nvar)
13941 call gradient(nvar,x,nf,gana,uiparm,urparm,fdum)
13942 !d write (iout,'(i3,1pe14.4)') (i,gana(i),i=1,nvar+20) !sp
13946 x(i)=xi-0.5D0*aincr
13947 call var_to_geom(nvar,x)
13949 call etotal(energia1)
13951 x(i)=xi+0.5D0*aincr
13952 call var_to_geom(nvar,x)
13954 call etotal(energia2)
13956 gg(i)=(etot2-etot1)/aincr
13957 write (iout,*) i,etot1,etot2
13960 write (iout,'(/2a)')' Variable Numerical Analytical',&
13963 if (i.le.nphi) then
13966 else if (i.le.nphi+ntheta) then
13969 else if (i.le.nphi+ntheta+nside) then
13973 ii=i-(nphi+ntheta+nside)
13976 write (iout,'(i3,a,i3,3(1pd16.6))') &
13977 i,key,ii,gg(i),gana(i),&
13978 100.0D0*dabs(gg(i)-gana(i))/(dabs(gana(i))+aincr)
13981 end subroutine check_eint
13982 !-----------------------------------------------------------------------------
13984 !-----------------------------------------------------------------------------
13985 subroutine Econstr_back
13986 ! MD with umbrella_sampling using Wolyne's distance measure as a constraint
13987 ! implicit real(kind=8) (a-h,o-z)
13988 ! include 'DIMENSIONS'
13989 ! include 'COMMON.CONTROL'
13990 ! include 'COMMON.VAR'
13991 ! include 'COMMON.MD'
13994 ! include 'COMMON.LANGEVIN'
13996 ! include 'COMMON.LANGEVIN.lang0'
13998 ! include 'COMMON.CHAIN'
13999 ! include 'COMMON.DERIV'
14000 ! include 'COMMON.GEO'
14001 ! include 'COMMON.LOCAL'
14002 ! include 'COMMON.INTERACT'
14003 ! include 'COMMON.IOUNITS'
14004 ! include 'COMMON.NAMES'
14005 ! include 'COMMON.TIME1'
14006 integer :: i,j,ii,k
14007 real(kind=8) :: utheta_i,dtheta_i,ugamma_i,dgamma_i,dxx,dyy,dzz
14009 if(.not.allocated(utheta)) allocate(utheta(nfrag_back))
14010 if(.not.allocated(ugamma)) allocate(ugamma(nfrag_back))
14011 if(.not.allocated(uscdiff)) allocate(uscdiff(nfrag_back))
14018 duscdiff(j,i)=0.0d0
14019 duscdiffx(j,i)=0.0d0
14023 ii = ifrag_back(2,i,iset)-ifrag_back(1,i,iset)
14025 ! Deviations from theta angles
14028 do j=ifrag_back(1,i,iset)+2,ifrag_back(2,i,iset)
14029 dtheta_i=theta(j)-thetaref(j)
14030 utheta_i=utheta_i+0.5d0*dtheta_i*dtheta_i
14031 dutheta(j-2)=dutheta(j-2)+wfrag_back(1,i,iset)*dtheta_i/(ii-1)
14033 utheta(i)=utheta_i/(ii-1)
14035 ! Deviations from gamma angles
14038 do j=ifrag_back(1,i,iset)+3,ifrag_back(2,i,iset)
14039 dgamma_i=pinorm(phi(j)-phiref(j))
14040 ! write (iout,*) j,phi(j),phi(j)-phiref(j)
14041 ugamma_i=ugamma_i+0.5d0*dgamma_i*dgamma_i
14042 dugamma(j-3)=dugamma(j-3)+wfrag_back(2,i,iset)*dgamma_i/(ii-2)
14043 ! write (iout,*) i,j,dgamma_i,wfrag_back(2,i,iset),dugamma(j-3)
14045 ugamma(i)=ugamma_i/(ii-2)
14047 ! Deviations from local SC geometry
14050 do j=ifrag_back(1,i,iset)+1,ifrag_back(2,i,iset)-1
14051 dxx=xxtab(j)-xxref(j)
14052 dyy=yytab(j)-yyref(j)
14053 dzz=zztab(j)-zzref(j)
14054 uscdiff(i)=uscdiff(i)+dxx*dxx+dyy*dyy+dzz*dzz
14056 duscdiff(k,j-1)=duscdiff(k,j-1)+wfrag_back(3,i,iset)* &
14057 (dXX_C1tab(k,j)*dxx+dYY_C1tab(k,j)*dyy+dZZ_C1tab(k,j)*dzz)/ &
14059 duscdiff(k,j)=duscdiff(k,j)+wfrag_back(3,i,iset)* &
14060 (dXX_Ctab(k,j)*dxx+dYY_Ctab(k,j)*dyy+dZZ_Ctab(k,j)*dzz)/ &
14062 duscdiffx(k,j)=duscdiffx(k,j)+wfrag_back(3,i,iset)* &
14063 (dXX_XYZtab(k,j)*dxx+dYY_XYZtab(k,j)*dyy+dZZ_XYZtab(k,j)*dzz) &
14066 ! write (iout,'(i5,6f10.5)') j,xxtab(j),yytab(j),zztab(j),
14067 ! & xxref(j),yyref(j),zzref(j)
14069 uscdiff(i)=0.5d0*uscdiff(i)/(ii-1)
14070 ! write (iout,*) i," uscdiff",uscdiff(i)
14072 ! Put together deviations from local geometry
14074 Uconst_back=Uconst_back+wfrag_back(1,i,iset)*utheta(i)+ &
14075 wfrag_back(2,i,iset)*ugamma(i)+wfrag_back(3,i,iset)*uscdiff(i)
14076 ! write(iout,*) "i",i," utheta",utheta(i)," ugamma",ugamma(i),
14077 ! & " uconst_back",uconst_back
14078 utheta(i)=dsqrt(utheta(i))
14079 ugamma(i)=dsqrt(ugamma(i))
14080 uscdiff(i)=dsqrt(uscdiff(i))
14083 end subroutine Econstr_back
14084 !-----------------------------------------------------------------------------
14085 ! energy_p_new-sep_barrier.F
14086 !-----------------------------------------------------------------------------
14087 real(kind=8) function sscale(r)
14088 ! include "COMMON.SPLITELE"
14089 real(kind=8) :: r,gamm
14090 if(r.lt.r_cut-rlamb) then
14092 else if(r.le.r_cut.and.r.ge.r_cut-rlamb) then
14093 gamm=(r-(r_cut-rlamb))/rlamb
14094 sscale=1.0d0+gamm*gamm*(2*gamm-3.0d0)
14099 end function sscale
14100 real(kind=8) function sscale_grad(r)
14101 ! include "COMMON.SPLITELE"
14102 real(kind=8) :: r,gamm
14103 if(r.lt.r_cut-rlamb) then
14105 else if(r.le.r_cut.and.r.ge.r_cut-rlamb) then
14106 gamm=(r-(r_cut-rlamb))/rlamb
14107 sscale_grad=gamm*(6*gamm-6.0d0)/rlamb
14112 end function sscale_grad
14114 real(kind=8) function sscale_martini(r)
14115 ! include "COMMON.SPLITELE"
14116 real(kind=8) :: r,gamm
14117 ! print *,"here2",r_cut_mart,r
14118 if(r.lt.r_cut_mart-rlamb_mart) then
14119 sscale_martini=1.0d0
14120 else if(r.le.r_cut_mart.and.r.ge.r_cut_mart-rlamb_mart) then
14121 gamm=(r-(r_cut_mart-rlamb_mart))/rlamb_mart
14122 sscale_martini=1.0d0+gamm*gamm*(2*gamm-3.0d0)
14124 sscale_martini=0.0d0
14127 end function sscale_martini
14128 real(kind=8) function sscale_grad_martini(r)
14129 ! include "COMMON.SPLITELE"
14130 real(kind=8) :: r,gamm
14131 if(r.lt.r_cut_mart-rlamb_mart) then
14132 sscale_grad_martini=0.0d0
14133 else if(r.le.r_cut_mart.and.r.ge.r_cut_mart-rlamb_mart) then
14134 gamm=(r-(r_cut_mart-rlamb_mart))/rlamb_mart
14135 sscale_grad_martini=gamm*(6*gamm-6.0d0)/rlamb_mart
14137 sscale_grad_martini=0.0d0
14140 end function sscale_grad_martini
14141 real(kind=8) function sscale_martini_angle(r)
14142 ! include "COMMON.SPLITELE"
14143 real(kind=8) :: r,gamm,r_cut_angle,rlamb_angle
14144 ! print *,"here2",r_cut_angle,r
14147 if(r.lt.r_cut_angle-rlamb_angle) then
14148 sscale_martini_angle=1.0d0
14149 else if(r.le.r_cut_angle.and.r.ge.r_cut_angle-rlamb_angle) then
14150 gamm=(r-(r_cut_angle-rlamb_angle))/rlamb_angle
14151 sscale_martini_angle=1.0d0+gamm*gamm*(2*gamm-3.0d0)
14153 sscale_martini_angle=0.0d0
14156 end function sscale_martini_angle
14157 real(kind=8) function sscale_grad_martini_angle(r)
14158 ! include "COMMON.SPLITELE"
14159 real(kind=8) :: r,gamm,r_cut_angle,rlamb_angle
14162 if(r.lt.r_cut_angle-rlamb_angle) then
14163 sscale_grad_martini_angle=0.0d0
14164 else if(r.le.r_cut_angle.and.r.ge.r_cut_angle-rlamb_angle) then
14165 gamm=(r-(r_cut_angle-rlamb_angle))/rlamb_angle
14166 sscale_grad_martini_angle=gamm*(6*gamm-6.0d0)/rlamb_angle
14168 sscale_grad_martini_angle=0.0d0
14171 end function sscale_grad_martini_angle
14174 !!!!!!!!!! PBCSCALE
14175 real(kind=8) function sscale_ele(r)
14176 ! include "COMMON.SPLITELE"
14177 real(kind=8) :: r,gamm
14178 if(r.lt.r_cut_ele-rlamb_ele) then
14180 else if(r.le.r_cut_ele.and.r.ge.r_cut_ele-rlamb_ele) then
14181 gamm=(r-(r_cut_ele-rlamb_ele))/rlamb_ele
14182 sscale_ele=1.0d0+gamm*gamm*(2*gamm-3.0d0)
14187 end function sscale_ele
14189 real(kind=8) function sscagrad_ele(r)
14190 real(kind=8) :: r,gamm
14191 ! include "COMMON.SPLITELE"
14192 if(r.lt.r_cut_ele-rlamb_ele) then
14194 else if(r.le.r_cut_ele.and.r.ge.r_cut_ele-rlamb_ele) then
14195 gamm=(r-(r_cut_ele-rlamb_ele))/rlamb_ele
14196 sscagrad_ele=gamm*(6*gamm-6.0d0)/rlamb_ele
14201 end function sscagrad_ele
14202 !!!!!!!!!! PBCSCALE
14203 real(kind=8) function sscale2(r,r_cc,r_ll)
14204 ! include "COMMON.SPLITELE"
14205 real(kind=8) :: r,gamm,r_cc,r_ll
14206 if(r.lt.r_cc-r_ll) then
14208 else if(r.le.r_cc.and.r.ge.r_cc-r_ll) then
14209 gamm=(r-(r_cc-r_ll))/r_ll
14210 sscale2=1.0d0+gamm*gamm*(2*gamm-3.0d0)
14215 end function sscale2
14217 real(kind=8) function sscagrad2(r,r_cc,r_ll)
14218 real(kind=8) :: r,gamm,r_cc,r_ll
14219 ! include "COMMON.SPLITELE"
14220 if(r.lt.r_cc-r_ll) then
14222 else if(r.le.r_cc.and.r.ge.r_cc-r_ll) then
14223 gamm=(r-(r_cc-r_ll))/r_ll
14224 sscagrad2=gamm*(6*gamm-6.0d0)/r_ll
14229 end function sscagrad2
14231 real(kind=8) function sscalelip(r)
14232 real(kind=8) r,gamm
14233 sscalelip=1.0d0+r*r*(2.0d0*r-3.0d0)
14235 end function sscalelip
14236 !C-----------------------------------------------------------------------
14237 real(kind=8) function sscagradlip(r)
14238 real(kind=8) r,gamm
14239 sscagradlip=r*(6.0d0*r-6.0d0)
14241 end function sscagradlip
14244 !-----------------------------------------------------------------------------
14245 subroutine elj_long(evdw)
14247 ! This subroutine calculates the interaction energy of nonbonded side chains
14248 ! assuming the LJ potential of interaction.
14250 ! implicit real(kind=8) (a-h,o-z)
14251 ! include 'DIMENSIONS'
14252 ! include 'COMMON.GEO'
14253 ! include 'COMMON.VAR'
14254 ! include 'COMMON.LOCAL'
14255 ! include 'COMMON.CHAIN'
14256 ! include 'COMMON.DERIV'
14257 ! include 'COMMON.INTERACT'
14258 ! include 'COMMON.TORSION'
14259 ! include 'COMMON.SBRIDGE'
14260 ! include 'COMMON.NAMES'
14261 ! include 'COMMON.IOUNITS'
14262 ! include 'COMMON.CONTACTS'
14263 real(kind=8),parameter :: accur=1.0d-10
14264 real(kind=8),dimension(3) :: gg,gg_lipi,gg_lipj
14265 !el local variables
14266 integer :: i,iint,j,k,itypi,itypi1,itypj
14267 real(kind=8) :: xi,yi,zi,xj,yj,zj,rij,sss,rrij,fac,eps0ij
14268 real(kind=8) :: e1,e2,evdwij,evdw,sslipi,ssgradlipi,&
14269 sslipj,ssgradlipj,aa,bb
14270 ! write(iout,*)'Entering ELJ nnt=',nnt,' nct=',nct,' expon=',expon
14272 do i=iatsc_s,iatsc_e
14274 if (itypi.eq.ntyp1) cycle
14275 itypi1=itype(i+1,1)
14279 call to_box(xi,yi,zi)
14280 call lipid_layer(xi,yi,zi,sslipi,ssgradlipi)
14282 ! Calculate SC interaction energy.
14284 do iint=1,nint_gr(i)
14285 !d write (iout,*) 'i=',i,' iint=',iint,' istart=',istart(i,iint),
14286 !d & 'iend=',iend(i,iint)
14287 do j=istart(i,iint),iend(i,iint)
14289 if (itypj.eq.ntyp1) cycle
14293 call to_box(xj,yj,zj)
14294 call lipid_layer(xj,yj,zj,sslipj,ssgradlipj)
14295 aa=aa_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0 &
14296 +aa_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
14297 bb=bb_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0 &
14298 +bb_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
14299 xj=boxshift(xj-xi,boxxsize)
14300 yj=boxshift(yj-yi,boxysize)
14301 zj=boxshift(zj-zi,boxzsize)
14302 rij=xj*xj+yj*yj+zj*zj
14303 sss=sscale(dsqrt(rij)/sigma(itypi,itypj))
14304 if (sss.lt.1.0d0) then
14306 eps0ij=eps(itypi,itypj)
14308 e1=fac*fac*aa_aq(itypi,itypj)
14309 e2=fac*bb_aq(itypi,itypj)
14311 evdw=evdw+(1.0d0-sss)*evdwij
14313 ! Calculate the components of the gradient in DC and X
14315 fac=-rrij*(e1+evdwij)*(1.0d0-sss)
14320 gvdwx(k,i)=gvdwx(k,i)-gg(k)
14321 gvdwx(k,j)=gvdwx(k,j)+gg(k)
14322 gvdwc(k,i)=gvdwc(k,i)-gg(k)
14323 gvdwc(k,j)=gvdwc(k,j)+gg(k)
14331 gvdwc(j,i)=expon*gvdwc(j,i)
14332 gvdwx(j,i)=expon*gvdwx(j,i)
14335 !******************************************************************************
14339 ! To save time, the factor of EXPON has been extracted from ALL components
14340 ! of GVDWC and GRADX. Remember to multiply them by this factor before further
14343 !******************************************************************************
14345 end subroutine elj_long
14346 !-----------------------------------------------------------------------------
14347 subroutine elj_short(evdw)
14349 ! This subroutine calculates the interaction energy of nonbonded side chains
14350 ! assuming the LJ potential of interaction.
14352 ! implicit real(kind=8) (a-h,o-z)
14353 ! include 'DIMENSIONS'
14354 ! include 'COMMON.GEO'
14355 ! include 'COMMON.VAR'
14356 ! include 'COMMON.LOCAL'
14357 ! include 'COMMON.CHAIN'
14358 ! include 'COMMON.DERIV'
14359 ! include 'COMMON.INTERACT'
14360 ! include 'COMMON.TORSION'
14361 ! include 'COMMON.SBRIDGE'
14362 ! include 'COMMON.NAMES'
14363 ! include 'COMMON.IOUNITS'
14364 ! include 'COMMON.CONTACTS'
14365 real(kind=8),parameter :: accur=1.0d-10
14366 real(kind=8),dimension(3) :: gg,gg_lipi,gg_lipj
14367 !el local variables
14368 integer :: i,iint,j,k,itypi,itypi1,itypj,num_conti
14369 real(kind=8) :: xi,yi,zi,xj,yj,zj,rij,sss,rrij,fac,eps0ij
14370 real(kind=8) :: e1,e2,evdwij,evdw,sslipi,ssgradlipi,&
14372 ! write(iout,*)'Entering ELJ nnt=',nnt,' nct=',nct,' expon=',expon
14374 do i=iatsc_s,iatsc_e
14376 if (itypi.eq.ntyp1) cycle
14377 itypi1=itype(i+1,1)
14381 call to_box(xi,yi,zi)
14382 call lipid_layer(xi,yi,zi,sslipi,ssgradlipi)
14386 ! Calculate SC interaction energy.
14388 do iint=1,nint_gr(i)
14389 !d write (iout,*) 'i=',i,' iint=',iint,' istart=',istart(i,iint),
14390 !d & 'iend=',iend(i,iint)
14391 do j=istart(i,iint),iend(i,iint)
14393 if (itypj.eq.ntyp1) cycle
14397 ! Change 12/1/95 to calculate four-body interactions
14398 rij=xj*xj+yj*yj+zj*zj
14399 sss=sscale(dsqrt(rij)/sigma(itypi,itypj))
14400 if (sss.gt.0.0d0) then
14402 eps0ij=eps(itypi,itypj)
14404 e1=fac*fac*aa_aq(itypi,itypj)
14405 e2=fac*bb_aq(itypi,itypj)
14407 evdw=evdw+sss*evdwij
14409 ! Calculate the components of the gradient in DC and X
14411 fac=-rrij*(e1+evdwij)*sss
14416 gvdwx(k,i)=gvdwx(k,i)-gg(k)
14417 gvdwx(k,j)=gvdwx(k,j)+gg(k)
14418 gvdwc(k,i)=gvdwc(k,i)-gg(k)
14419 gvdwc(k,j)=gvdwc(k,j)+gg(k)
14427 gvdwc(j,i)=expon*gvdwc(j,i)
14428 gvdwx(j,i)=expon*gvdwx(j,i)
14431 !******************************************************************************
14435 ! To save time, the factor of EXPON has been extracted from ALL components
14436 ! of GVDWC and GRADX. Remember to multiply them by this factor before further
14439 !******************************************************************************
14441 end subroutine elj_short
14442 !-----------------------------------------------------------------------------
14443 subroutine eljk_long(evdw)
14445 ! This subroutine calculates the interaction energy of nonbonded side chains
14446 ! assuming the LJK potential of interaction.
14448 ! implicit real(kind=8) (a-h,o-z)
14449 ! include 'DIMENSIONS'
14450 ! include 'COMMON.GEO'
14451 ! include 'COMMON.VAR'
14452 ! include 'COMMON.LOCAL'
14453 ! include 'COMMON.CHAIN'
14454 ! include 'COMMON.DERIV'
14455 ! include 'COMMON.INTERACT'
14456 ! include 'COMMON.IOUNITS'
14457 ! include 'COMMON.NAMES'
14458 real(kind=8),dimension(3) :: gg,gg_lipi,gg_lipj
14460 !el local variables
14461 integer :: i,iint,j,k,itypi,itypi1,itypj
14462 real(kind=8) :: rrij,r_inv_ij,xj,yj,zj,xi,yi,zi,fac,evdw,&
14463 fac_augm,e_augm,rij,sss,r_shift_inv,e1,e2,evdwij
14464 ! print *,'Entering ELJK nnt=',nnt,' nct=',nct,' expon=',expon
14466 do i=iatsc_s,iatsc_e
14468 if (itypi.eq.ntyp1) cycle
14469 itypi1=itype(i+1,1)
14473 call to_box(xi,yi,zi)
14476 ! Calculate SC interaction energy.
14478 do iint=1,nint_gr(i)
14479 do j=istart(i,iint),iend(i,iint)
14481 if (itypj.eq.ntyp1) cycle
14485 call to_box(xj,yj,zj)
14486 xj=boxshift(xj-xi,boxxsize)
14487 yj=boxshift(yj-yi,boxysize)
14488 zj=boxshift(zj-zi,boxzsize)
14490 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
14491 fac_augm=rrij**expon
14492 e_augm=augm(itypi,itypj)*fac_augm
14493 r_inv_ij=dsqrt(rrij)
14495 sss=sscale(rij/sigma(itypi,itypj))
14496 if (sss.lt.1.0d0) then
14497 r_shift_inv=1.0D0/(rij+r0(itypi,itypj)-sigma(itypi,itypj))
14498 fac=r_shift_inv**expon
14499 e1=fac*fac*aa_aq(itypi,itypj)
14500 e2=fac*bb_aq(itypi,itypj)
14501 evdwij=e_augm+e1+e2
14502 !d sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
14503 !d epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
14504 !d write (iout,'(2(a3,i3,2x),8(1pd12.4)/2(3(1pd12.4),5x)/)')
14505 !d & restyp(itypi,1),i,restyp(itypj,1),j,aa(itypi,itypj),
14506 !d & bb(itypi,itypj),augm(itypi,itypj),epsi,sigm,
14507 !d & sigma(itypi,itypj),1.0D0/dsqrt(rrij),evdwij,
14508 !d & (c(k,i),k=1,3),(c(k,j),k=1,3)
14509 evdw=evdw+(1.0d0-sss)*evdwij
14511 ! Calculate the components of the gradient in DC and X
14513 fac=-2.0D0*rrij*e_augm-r_inv_ij*r_shift_inv*(e1+e1+e2)
14514 fac=fac*(1.0d0-sss)
14519 gvdwx(k,i)=gvdwx(k,i)-gg(k)
14520 gvdwx(k,j)=gvdwx(k,j)+gg(k)
14521 gvdwc(k,i)=gvdwc(k,i)-gg(k)
14522 gvdwc(k,j)=gvdwc(k,j)+gg(k)
14530 gvdwc(j,i)=expon*gvdwc(j,i)
14531 gvdwx(j,i)=expon*gvdwx(j,i)
14535 end subroutine eljk_long
14536 !-----------------------------------------------------------------------------
14537 subroutine eljk_short(evdw)
14539 ! This subroutine calculates the interaction energy of nonbonded side chains
14540 ! assuming the LJK potential of interaction.
14542 ! implicit real(kind=8) (a-h,o-z)
14543 ! include 'DIMENSIONS'
14544 ! include 'COMMON.GEO'
14545 ! include 'COMMON.VAR'
14546 ! include 'COMMON.LOCAL'
14547 ! include 'COMMON.CHAIN'
14548 ! include 'COMMON.DERIV'
14549 ! include 'COMMON.INTERACT'
14550 ! include 'COMMON.IOUNITS'
14551 ! include 'COMMON.NAMES'
14552 real(kind=8),dimension(3) :: gg,gg_lipi,gg_lipj
14554 !el local variables
14555 integer :: i,iint,j,k,itypi,itypi1,itypj
14556 real(kind=8) :: rrij,r_inv_ij,xj,yj,zj,xi,yi,zi,fac,evdw,&
14557 fac_augm,e_augm,rij,sss,r_shift_inv,e1,e2,evdwij,&
14558 sslipi,ssgradlipi,sslipj,ssgradlipj,aa,bb
14559 ! print *,'Entering ELJK nnt=',nnt,' nct=',nct,' expon=',expon
14561 do i=iatsc_s,iatsc_e
14563 if (itypi.eq.ntyp1) cycle
14564 itypi1=itype(i+1,1)
14568 call to_box(xi,yi,zi)
14569 call lipid_layer(xi,yi,zi,sslipi,ssgradlipi)
14571 ! Calculate SC interaction energy.
14573 do iint=1,nint_gr(i)
14574 do j=istart(i,iint),iend(i,iint)
14576 if (itypj.eq.ntyp1) cycle
14580 call to_box(xj,yj,zj)
14581 call lipid_layer(xj,yj,zj,sslipj,ssgradlipj)
14582 aa=aa_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0 &
14583 +aa_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
14584 bb=bb_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0 &
14585 +bb_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
14586 xj=boxshift(xj-xi,boxxsize)
14587 yj=boxshift(yj-yi,boxysize)
14588 zj=boxshift(zj-zi,boxzsize)
14589 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
14590 fac_augm=rrij**expon
14591 e_augm=augm(itypi,itypj)*fac_augm
14592 r_inv_ij=dsqrt(rrij)
14594 sss=sscale(rij/sigma(itypi,itypj))
14595 if (sss.gt.0.0d0) then
14596 r_shift_inv=1.0D0/(rij+r0(itypi,itypj)-sigma(itypi,itypj))
14597 fac=r_shift_inv**expon
14598 e1=fac*fac*aa_aq(itypi,itypj)
14599 e2=fac*bb_aq(itypi,itypj)
14600 evdwij=e_augm+e1+e2
14601 !d sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
14602 !d epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
14603 !d write (iout,'(2(a3,i3,2x),8(1pd12.4)/2(3(1pd12.4),5x)/)')
14604 !d & restyp(itypi,1),i,restyp(itypj,1),j,aa(itypi,itypj),
14605 !d & bb(itypi,itypj),augm(itypi,itypj),epsi,sigm,
14606 !d & sigma(itypi,itypj),1.0D0/dsqrt(rrij),evdwij,
14607 !d & (c(k,i),k=1,3),(c(k,j),k=1,3)
14608 evdw=evdw+sss*evdwij
14610 ! Calculate the components of the gradient in DC and X
14612 fac=-2.0D0*rrij*e_augm-r_inv_ij*r_shift_inv*(e1+e1+e2)
14618 gvdwx(k,i)=gvdwx(k,i)-gg(k)
14619 gvdwx(k,j)=gvdwx(k,j)+gg(k)
14620 gvdwc(k,i)=gvdwc(k,i)-gg(k)
14621 gvdwc(k,j)=gvdwc(k,j)+gg(k)
14629 gvdwc(j,i)=expon*gvdwc(j,i)
14630 gvdwx(j,i)=expon*gvdwx(j,i)
14634 end subroutine eljk_short
14635 !-----------------------------------------------------------------------------
14636 subroutine ebp_long(evdw)
14637 ! This subroutine calculates the interaction energy of nonbonded side chains
14638 ! assuming the Berne-Pechukas potential of interaction.
14641 ! implicit real(kind=8) (a-h,o-z)
14642 ! include 'DIMENSIONS'
14643 ! include 'COMMON.GEO'
14644 ! include 'COMMON.VAR'
14645 ! include 'COMMON.LOCAL'
14646 ! include 'COMMON.CHAIN'
14647 ! include 'COMMON.DERIV'
14648 ! include 'COMMON.NAMES'
14649 ! include 'COMMON.INTERACT'
14650 ! include 'COMMON.IOUNITS'
14651 ! include 'COMMON.CALC'
14653 !el integer :: icall
14654 !el common /srutu/ icall
14655 ! double precision rrsave(maxdim)
14657 !el local variables
14658 integer :: iint,itypi,itypi1,itypj
14659 real(kind=8) :: rrij,xi,yi,zi,fac,sslipi,ssgradlipi,&
14660 sslipj,ssgradlipj,aa,bb
14661 real(kind=8) :: sss,e1,e2,evdw,sigm,epsi
14663 ! print *,'Entering EBP nnt=',nnt,' nct=',nct,' expon=',expon
14665 ! if (icall.eq.0) then
14671 do i=iatsc_s,iatsc_e
14673 if (itypi.eq.ntyp1) cycle
14674 itypi1=itype(i+1,1)
14678 call to_box(xi,yi,zi)
14679 call lipid_layer(xi,yi,zi,sslipi,ssgradlipi)
14680 dxi=dc_norm(1,nres+i)
14681 dyi=dc_norm(2,nres+i)
14682 dzi=dc_norm(3,nres+i)
14683 ! dsci_inv=dsc_inv(itypi)
14684 dsci_inv=vbld_inv(i+nres)
14686 ! Calculate SC interaction energy.
14688 do iint=1,nint_gr(i)
14689 do j=istart(i,iint),iend(i,iint)
14692 if (itypj.eq.ntyp1) cycle
14693 ! dscj_inv=dsc_inv(itypj)
14694 dscj_inv=vbld_inv(j+nres)
14695 !chi1=chi(itypi,itypj)
14696 !chi2=chi(itypj,itypi)
14701 alf12=0.5D0*(alf1+alf2)
14705 call to_box(xj,yj,zj)
14706 call lipid_layer(xj,yj,zj,sslipj,ssgradlipj)
14707 aa=aa_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0 &
14708 +aa_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
14709 bb=bb_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0 &
14710 +bb_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
14711 xj=boxshift(xj-xi,boxxsize)
14712 yj=boxshift(yj-yi,boxysize)
14713 zj=boxshift(zj-zi,boxzsize)
14714 dxj=dc_norm(1,nres+j)
14715 dyj=dc_norm(2,nres+j)
14716 dzj=dc_norm(3,nres+j)
14717 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
14719 sss=sscale(1.0d0/(rij*sigmaii(itypi,itypj)))
14721 if (sss.lt.1.0d0) then
14723 ! Calculate the angle-dependent terms of energy & contributions to derivatives.
14725 ! Calculate whole angle-dependent part of epsilon and contributions
14726 ! to its derivatives
14727 fac=(rrij*sigsq)**expon2
14728 e1=fac*fac*aa_aq(itypi,itypj)
14729 e2=fac*bb_aq(itypi,itypj)
14730 evdwij=eps1*eps2rt*eps3rt*(e1+e2)
14731 eps2der=evdwij*eps3rt
14732 eps3der=evdwij*eps2rt
14733 evdwij=evdwij*eps2rt*eps3rt
14734 evdw=evdw+evdwij*(1.0d0-sss)
14736 sigm=dabs(aa_aq(itypi,itypj)/bb_aq(itypi,itypj))**(1.0D0/6.0D0)
14737 epsi=bb_aq(itypi,itypj)**2/aa_aq(itypi,itypj)
14738 !d write (iout,'(2(a3,i3,2x),15(0pf7.3))')
14739 !d & restyp(itypi,1),i,restyp(itypj,1),j,
14740 !d & epsi,sigm,chi1,chi2,chip1,chip2,
14741 !d & eps1,eps2rt**2,eps3rt**2,1.0D0/dsqrt(sigsq),
14742 !d & om1,om2,om12,1.0D0/dsqrt(rrij),
14745 ! Calculate gradient components.
14746 e1=e1*eps1*eps2rt**2*eps3rt**2
14747 fac=-expon*(e1+evdwij)
14750 ! Calculate radial part of the gradient
14754 ! Calculate the angular part of the gradient and sum add the contributions
14755 ! to the appropriate components of the Cartesian gradient.
14756 call sc_grad_scale(1.0d0-sss)
14763 end subroutine ebp_long
14764 !-----------------------------------------------------------------------------
14765 subroutine ebp_short(evdw)
14767 ! This subroutine calculates the interaction energy of nonbonded side chains
14768 ! assuming the Berne-Pechukas potential of interaction.
14771 ! implicit real(kind=8) (a-h,o-z)
14772 ! include 'DIMENSIONS'
14773 ! include 'COMMON.GEO'
14774 ! include 'COMMON.VAR'
14775 ! include 'COMMON.LOCAL'
14776 ! include 'COMMON.CHAIN'
14777 ! include 'COMMON.DERIV'
14778 ! include 'COMMON.NAMES'
14779 ! include 'COMMON.INTERACT'
14780 ! include 'COMMON.IOUNITS'
14781 ! include 'COMMON.CALC'
14783 !el integer :: icall
14784 !el common /srutu/ icall
14785 ! double precision rrsave(maxdim)
14787 !el local variables
14788 integer :: iint,itypi,itypi1,itypj
14789 real(kind=8) :: rrij,xi,yi,zi,fac,sigm,epsi
14790 real(kind=8) :: sss,e1,e2,evdw,aa,bb, &
14791 sslipi,ssgradlipi,sslipj,ssgradlipj
14793 ! print *,'Entering EBP nnt=',nnt,' nct=',nct,' expon=',expon
14795 ! if (icall.eq.0) then
14801 do i=iatsc_s,iatsc_e
14803 if (itypi.eq.ntyp1) cycle
14804 itypi1=itype(i+1,1)
14808 call to_box(xi,yi,zi)
14809 call lipid_layer(xi,yi,zi,sslipi,ssgradlipi)
14811 dxi=dc_norm(1,nres+i)
14812 dyi=dc_norm(2,nres+i)
14813 dzi=dc_norm(3,nres+i)
14814 ! dsci_inv=dsc_inv(itypi)
14815 dsci_inv=vbld_inv(i+nres)
14817 ! Calculate SC interaction energy.
14819 do iint=1,nint_gr(i)
14820 do j=istart(i,iint),iend(i,iint)
14823 if (itypj.eq.ntyp1) cycle
14824 ! dscj_inv=dsc_inv(itypj)
14825 dscj_inv=vbld_inv(j+nres)
14826 chi1=chi(itypi,itypj)
14827 chi2=chi(itypj,itypi)
14834 alf12=0.5D0*(alf1+alf2)
14838 call to_box(xj,yj,zj)
14839 call lipid_layer(xj,yj,zj,sslipj,ssgradlipj)
14840 aa=aa_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0 &
14841 +aa_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
14842 bb=bb_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0 &
14843 +bb_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
14844 xj=boxshift(xj-xi,boxxsize)
14845 yj=boxshift(yj-yi,boxysize)
14846 zj=boxshift(zj-zi,boxzsize)
14847 dxj=dc_norm(1,nres+j)
14848 dyj=dc_norm(2,nres+j)
14849 dzj=dc_norm(3,nres+j)
14850 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
14852 sss=sscale(1.0d0/(rij*sigmaii(itypi,itypj)))
14854 if (sss.gt.0.0d0) then
14856 ! Calculate the angle-dependent terms of energy & contributions to derivatives.
14858 ! Calculate whole angle-dependent part of epsilon and contributions
14859 ! to its derivatives
14860 fac=(rrij*sigsq)**expon2
14861 e1=fac*fac*aa_aq(itypi,itypj)
14862 e2=fac*bb_aq(itypi,itypj)
14863 evdwij=eps1*eps2rt*eps3rt*(e1+e2)
14864 eps2der=evdwij*eps3rt
14865 eps3der=evdwij*eps2rt
14866 evdwij=evdwij*eps2rt*eps3rt
14867 evdw=evdw+evdwij*sss
14869 sigm=dabs(aa_aq(itypi,itypj)/bb_aq(itypi,itypj))**(1.0D0/6.0D0)
14870 epsi=bb_aq(itypi,itypj)**2/aa_aq(itypi,itypj)
14871 !d write (iout,'(2(a3,i3,2x),15(0pf7.3))')
14872 !d & restyp(itypi,1),i,restyp(itypj,1),j,
14873 !d & epsi,sigm,chi1,chi2,chip1,chip2,
14874 !d & eps1,eps2rt**2,eps3rt**2,1.0D0/dsqrt(sigsq),
14875 !d & om1,om2,om12,1.0D0/dsqrt(rrij),
14878 ! Calculate gradient components.
14879 e1=e1*eps1*eps2rt**2*eps3rt**2
14880 fac=-expon*(e1+evdwij)
14883 ! Calculate radial part of the gradient
14887 ! Calculate the angular part of the gradient and sum add the contributions
14888 ! to the appropriate components of the Cartesian gradient.
14889 call sc_grad_scale(sss)
14896 end subroutine ebp_short
14897 !-----------------------------------------------------------------------------
14898 subroutine egb_long(evdw)
14900 ! This subroutine calculates the interaction energy of nonbonded side chains
14901 ! assuming the Gay-Berne potential of interaction.
14904 ! implicit real(kind=8) (a-h,o-z)
14905 ! include 'DIMENSIONS'
14906 ! include 'COMMON.GEO'
14907 ! include 'COMMON.VAR'
14908 ! include 'COMMON.LOCAL'
14909 ! include 'COMMON.CHAIN'
14910 ! include 'COMMON.DERIV'
14911 ! include 'COMMON.NAMES'
14912 ! include 'COMMON.INTERACT'
14913 ! include 'COMMON.IOUNITS'
14914 ! include 'COMMON.CALC'
14915 ! include 'COMMON.CONTROL'
14917 !el local variables
14918 integer :: iint,itypi,itypi1,itypj,subchap
14919 real(kind=8) :: rrij,xi,yi,zi,fac,sigm,epsi,sig,sig0ij,rij_shift
14920 real(kind=8) :: sss,e1,e2,evdw,sss_grad
14921 real(kind=8) :: xj_safe,yj_safe,zj_safe,xj_temp,yj_temp,zj_temp,&
14922 dist_temp, dist_init,aa,bb,fracinbuf,sslipi,sslipj,&
14923 ssgradlipi,ssgradlipj
14927 !cccc energy_dec=.false.
14928 ! print *,'Entering EGB nnt=',nnt,' nct=',nct,' expon=',expon
14931 ! if (icall.eq.0) lprn=.false.
14933 do i=iatsc_s,iatsc_e
14935 if (itypi.eq.ntyp1) cycle
14936 itypi1=itype(i+1,1)
14940 call to_box(xi,yi,zi)
14941 call lipid_layer(xi,yi,zi,sslipi,ssgradlipi)
14942 dxi=dc_norm(1,nres+i)
14943 dyi=dc_norm(2,nres+i)
14944 dzi=dc_norm(3,nres+i)
14945 ! dsci_inv=dsc_inv(itypi)
14946 dsci_inv=vbld_inv(i+nres)
14947 ! write (iout,*) "i",i,dsc_inv(itypi),dsci_inv,1.0d0/vbld(i+nres)
14948 ! write (iout,*) "dcnori",dxi*dxi+dyi*dyi+dzi*dzi
14950 ! Calculate SC interaction energy.
14952 do iint=1,nint_gr(i)
14953 do j=istart(i,iint),iend(i,iint)
14954 IF (dyn_ss_mask(i).and.dyn_ss_mask(j)) THEN
14955 ! call dyn_ssbond_ene(i,j,evdwij)
14957 ! if (energy_dec) write (iout,'(a6,2i5,0pf7.3,a3)') &
14958 ! 'evdw',i,j,evdwij,' ss'
14959 ! if (energy_dec) write (iout,*) &
14960 ! 'evdw',i,j,evdwij,' ss'
14961 ! do k=j+1,iend(i,iint)
14962 !C search over all next residues
14963 ! if (dyn_ss_mask(k)) then
14964 !C check if they are cysteins
14965 !C write(iout,*) 'k=',k
14967 !c write(iout,*) "PRZED TRI", evdwij
14968 ! evdwij_przed_tri=evdwij
14969 ! call triple_ssbond_ene(i,j,k,evdwij)
14970 !c if(evdwij_przed_tri.ne.evdwij) then
14971 !c write (iout,*) "TRI:", evdwij, evdwij_przed_tri
14974 !c write(iout,*) "PO TRI", evdwij
14975 !C call the energy function that removes the artifical triple disulfide
14976 !C bond the soubroutine is located in ssMD.F
14978 if (energy_dec) write (iout,'(a6,2i5,0pf7.3,a3)') &
14979 'evdw',i,j,evdwij,'tss'
14980 ! endif!dyn_ss_mask(k)
14986 if (itypj.eq.ntyp1) cycle
14987 ! dscj_inv=dsc_inv(itypj)
14988 dscj_inv=vbld_inv(j+nres)
14989 ! write (iout,*) "j",j,dsc_inv(itypj),dscj_inv,
14990 ! & 1.0d0/vbld(j+nres)
14991 ! write (iout,*) "i",i," j", j," itype",itype(i,1),itype(j,1)
14992 sig0ij=sigma(itypi,itypj)
14993 chi1=chi(itypi,itypj)
14994 chi2=chi(itypj,itypi)
15001 alf12=0.5D0*(alf1+alf2)
15005 ! Searching for nearest neighbour
15006 call to_box(xj,yj,zj)
15007 call lipid_layer(xj,yj,zj,sslipj,ssgradlipj)
15008 aa=aa_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0 &
15009 +aa_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
15010 bb=bb_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0 &
15011 +bb_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
15012 xj=boxshift(xj-xi,boxxsize)
15013 yj=boxshift(yj-yi,boxysize)
15014 zj=boxshift(zj-zi,boxzsize)
15015 dxj=dc_norm(1,nres+j)
15016 dyj=dc_norm(2,nres+j)
15017 dzj=dc_norm(3,nres+j)
15018 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
15020 sss=sscale(1.0d0/(rij*sigmaii(itypi,itypj)))
15021 sss_ele_cut=sscale_ele(1.0d0/(rij))
15022 sss_ele_grad=sscagrad_ele(1.0d0/(rij))
15023 sss_grad=sscale_grad(1.0d0/(rij*sigmaii(itypi,itypj)))
15024 if (sss_ele_cut.le.0.0) cycle
15025 if (sss.lt.1.0d0) then
15027 ! Calculate angle-dependent terms of energy and contributions to their
15031 sig=sig0ij*dsqrt(sigsq)
15032 rij_shift=1.0D0/rij-sig+sig0ij
15033 ! for diagnostics; uncomment
15034 ! rij_shift=1.2*sig0ij
15035 ! I hate to put IF's in the loops, but here don't have another choice!!!!
15036 if (rij_shift.le.0.0D0) then
15038 !d write (iout,'(2(a3,i3,2x),17(0pf7.3))')
15039 !d & restyp(itypi,1),i,restyp(itypj,1),j,
15040 !d & rij_shift,1.0D0/rij,sig,sig0ij,sigsq,1-dsqrt(sigsq)
15044 !---------------------------------------------------------------
15045 rij_shift=1.0D0/rij_shift
15046 fac=rij_shift**expon
15049 evdwij=eps1*eps2rt*eps3rt*(e1+e2)
15050 eps2der=evdwij*eps3rt
15051 eps3der=evdwij*eps2rt
15052 ! write (iout,*) "sigsq",sigsq," sig",sig," eps2rt",eps2rt,
15053 ! & " eps3rt",eps3rt," eps1",eps1," e1",e1," e2",e2
15054 evdwij=evdwij*eps2rt*eps3rt
15055 evdw=evdw+evdwij*(1.0d0-sss)*sss_ele_cut
15057 sigm=dabs(aa_aq(itypi,itypj)/bb_aq(itypi,itypj))**(1.0D0/6.0D0)
15058 epsi=bb_aq(itypi,itypj)**2/aa_aq(itypi,itypj)
15059 write (iout,'(2(a3,i3,2x),17(0pf7.3))') &
15060 restyp(itypi,1),i,restyp(itypj,1),j,&
15061 epsi,sigm,chi1,chi2,chip1,chip2,&
15062 eps1,eps2rt**2,eps3rt**2,sig,sig0ij,&
15063 om1,om2,om12,1.0D0/rij,1.0D0/rij_shift,&
15067 if (energy_dec) write (iout,'(a6,2i5,0pf7.3)') &
15069 ! if (energy_dec) write (iout,*) &
15070 ! 'evdw',i,j,evdwij,"egb_long"
15072 ! Calculate gradient components.
15073 e1=e1*eps1*eps2rt**2*eps3rt**2
15074 fac=-expon*(e1+evdwij)*rij_shift
15077 fac=fac+evdwij*(sss_ele_grad/sss_ele_cut&
15078 *rij-sss_grad/(1.0-sss)*rij &
15079 /sigmaii(itypi,itypj))
15081 ! Calculate the radial part of the gradient
15085 ! Calculate angular part of the gradient.
15086 call sc_grad_scale(1.0d0-sss)
15092 ! write (iout,*) "Number of loop steps in EGB:",ind
15093 !ccc energy_dec=.false.
15095 end subroutine egb_long
15096 !-----------------------------------------------------------------------------
15097 subroutine egb_short(evdw)
15099 ! This subroutine calculates the interaction energy of nonbonded side chains
15100 ! assuming the Gay-Berne potential of interaction.
15103 ! implicit real(kind=8) (a-h,o-z)
15104 ! include 'DIMENSIONS'
15105 ! include 'COMMON.GEO'
15106 ! include 'COMMON.VAR'
15107 ! include 'COMMON.LOCAL'
15108 ! include 'COMMON.CHAIN'
15109 ! include 'COMMON.DERIV'
15110 ! include 'COMMON.NAMES'
15111 ! include 'COMMON.INTERACT'
15112 ! include 'COMMON.IOUNITS'
15113 ! include 'COMMON.CALC'
15114 ! include 'COMMON.CONTROL'
15116 !el local variables
15117 integer :: iint,itypi,itypi1,itypj,subchap
15118 real(kind=8) :: rrij,xi,yi,zi,fac,sigm,epsi,sig0ij,sig
15119 real(kind=8) :: sss,e1,e2,evdw,rij_shift,sss_grad
15120 real(kind=8) :: xj_safe,yj_safe,zj_safe,xj_temp,yj_temp,zj_temp,&
15121 dist_temp, dist_init,aa,bb,fracinbuf,sslipi,sslipj,&
15122 ssgradlipi,ssgradlipj
15124 !cccc energy_dec=.false.
15125 ! print *,'Entering EGB nnt=',nnt,' nct=',nct,' expon=',expon
15128 ! if (icall.eq.0) lprn=.false.
15130 do i=iatsc_s,iatsc_e
15132 if (itypi.eq.ntyp1) cycle
15133 itypi1=itype(i+1,1)
15137 call to_box(xi,yi,zi)
15138 call lipid_layer(xi,yi,zi,sslipi,ssgradlipi)
15140 dxi=dc_norm(1,nres+i)
15141 dyi=dc_norm(2,nres+i)
15142 dzi=dc_norm(3,nres+i)
15143 ! dsci_inv=dsc_inv(itypi)
15144 dsci_inv=vbld_inv(i+nres)
15146 dxi=dc_norm(1,nres+i)
15147 dyi=dc_norm(2,nres+i)
15148 dzi=dc_norm(3,nres+i)
15149 ! dsci_inv=dsc_inv(itypi)
15150 dsci_inv=vbld_inv(i+nres)
15151 do iint=1,nint_gr(i)
15152 do j=istart(i,iint),iend(i,iint)
15153 IF (dyn_ss_mask(i).and.dyn_ss_mask(j)) THEN
15154 call dyn_ssbond_ene(i,j,evdwij)
15156 if (energy_dec) write (iout,'(a6,2i5,0pf7.3,a3)') &
15157 'evdw',i,j,evdwij,' ss'
15158 do k=j+1,iend(i,iint)
15159 !C search over all next residues
15160 if (dyn_ss_mask(k)) then
15161 !C check if they are cysteins
15162 !C write(iout,*) 'k=',k
15164 !c write(iout,*) "PRZED TRI", evdwij
15165 ! evdwij_przed_tri=evdwij
15166 call triple_ssbond_ene(i,j,k,evdwij)
15167 !c if(evdwij_przed_tri.ne.evdwij) then
15168 !c write (iout,*) "TRI:", evdwij, evdwij_przed_tri
15171 !c write(iout,*) "PO TRI", evdwij
15172 !C call the energy function that removes the artifical triple disulfide
15173 !C bond the soubroutine is located in ssMD.F
15175 if (energy_dec) write (iout,'(a6,2i5,0pf7.3,a3)') &
15176 'evdw',i,j,evdwij,'tss'
15177 endif!dyn_ss_mask(k)
15182 if (itypj.eq.ntyp1) cycle
15183 ! dscj_inv=dsc_inv(itypj)
15184 dscj_inv=vbld_inv(j+nres)
15185 dscj_inv=dsc_inv(itypj)
15186 ! write (iout,*) "j",j,dsc_inv(itypj),dscj_inv,
15187 ! & 1.0d0/vbld(j+nres)
15188 ! write (iout,*) "i",i," j", j," itype",itype(i,1),itype(j,1)
15189 sig0ij=sigma(itypi,itypj)
15190 chi1=chi(itypi,itypj)
15191 chi2=chi(itypj,itypi)
15198 alf12=0.5D0*(alf1+alf2)
15199 ! xj=c(1,nres+j)-xi
15200 ! yj=c(2,nres+j)-yi
15201 ! zj=c(3,nres+j)-zi
15205 ! Searching for nearest neighbour
15206 call to_box(xj,yj,zj)
15207 call lipid_layer(xj,yj,zj,sslipj,ssgradlipj)
15208 aa=aa_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0 &
15209 +aa_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
15210 bb=bb_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0 &
15211 +bb_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
15212 xj=boxshift(xj-xi,boxxsize)
15213 yj=boxshift(yj-yi,boxysize)
15214 zj=boxshift(zj-zi,boxzsize)
15215 dxj=dc_norm(1,nres+j)
15216 dyj=dc_norm(2,nres+j)
15217 dzj=dc_norm(3,nres+j)
15218 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
15220 sss=sscale(1.0d0/(rij*sigmaii(itypi,itypj)))
15221 sss_grad=sscale_grad(1.0d0/(rij*sigmaii(itypi,itypj)))
15222 sss_ele_cut=sscale_ele(1.0d0/(rij))
15223 sss_ele_grad=sscagrad_ele(1.0d0/(rij))
15224 if (sss_ele_cut.le.0.0) cycle
15226 if (sss.gt.0.0d0) then
15228 ! Calculate angle-dependent terms of energy and contributions to their
15232 sig=sig0ij*dsqrt(sigsq)
15233 rij_shift=1.0D0/rij-sig+sig0ij
15234 ! for diagnostics; uncomment
15235 ! rij_shift=1.2*sig0ij
15236 ! I hate to put IF's in the loops, but here don't have another choice!!!!
15237 if (rij_shift.le.0.0D0) then
15239 !d write (iout,'(2(a3,i3,2x),17(0pf7.3))')
15240 !d & restyp(itypi,1),i,restyp(itypj,1),j,
15241 !d & rij_shift,1.0D0/rij,sig,sig0ij,sigsq,1-dsqrt(sigsq)
15245 !---------------------------------------------------------------
15246 rij_shift=1.0D0/rij_shift
15247 fac=rij_shift**expon
15250 evdwij=eps1*eps2rt*eps3rt*(e1+e2)
15251 eps2der=evdwij*eps3rt
15252 eps3der=evdwij*eps2rt
15253 ! write (iout,*) "sigsq",sigsq," sig",sig," eps2rt",eps2rt,
15254 ! & " eps3rt",eps3rt," eps1",eps1," e1",e1," e2",e2
15255 evdwij=evdwij*eps2rt*eps3rt
15256 evdw=evdw+evdwij*sss*sss_ele_cut
15258 sigm=dabs(aa_aq(itypi,itypj)/bb_aq(itypi,itypj))**(1.0D0/6.0D0)
15259 epsi=bb_aq(itypi,itypj)**2/aa_aq(itypi,itypj)
15260 write (iout,'(2(a3,i3,2x),17(0pf7.3))') &
15261 restyp(itypi,1),i,restyp(itypj,1),j,&
15262 epsi,sigm,chi1,chi2,chip1,chip2,&
15263 eps1,eps2rt**2,eps3rt**2,sig,sig0ij,&
15264 om1,om2,om12,1.0D0/rij,1.0D0/rij_shift,&
15268 if (energy_dec) write (iout,'(a6,2i5,0pf7.3)') &
15270 ! if (energy_dec) write (iout,*) &
15271 ! 'evdw',i,j,evdwij,"egb_short"
15273 ! Calculate gradient components.
15274 e1=e1*eps1*eps2rt**2*eps3rt**2
15275 fac=-expon*(e1+evdwij)*rij_shift
15278 fac=fac+evdwij*(sss_ele_grad/sss_ele_cut&
15279 *rij+sss_grad/sss*rij &
15280 /sigmaii(itypi,itypj))
15283 ! Calculate the radial part of the gradient
15287 ! Calculate angular part of the gradient.
15288 call sc_grad_scale(sss)
15294 ! write (iout,*) "Number of loop steps in EGB:",ind
15295 !ccc energy_dec=.false.
15297 end subroutine egb_short
15298 !-----------------------------------------------------------------------------
15299 subroutine egbv_long(evdw)
15301 ! This subroutine calculates the interaction energy of nonbonded side chains
15302 ! assuming the Gay-Berne-Vorobjev potential of interaction.
15305 ! implicit real(kind=8) (a-h,o-z)
15306 ! include 'DIMENSIONS'
15307 ! include 'COMMON.GEO'
15308 ! include 'COMMON.VAR'
15309 ! include 'COMMON.LOCAL'
15310 ! include 'COMMON.CHAIN'
15311 ! include 'COMMON.DERIV'
15312 ! include 'COMMON.NAMES'
15313 ! include 'COMMON.INTERACT'
15314 ! include 'COMMON.IOUNITS'
15315 ! include 'COMMON.CALC'
15317 !el integer :: icall
15318 !el common /srutu/ icall
15320 !el local variables
15321 integer :: iint,itypi,itypi1,itypj
15322 real(kind=8) :: rrij,xi,yi,zi,fac,sigm,epsi,r0ij,sig,sig0ij,&
15323 sslipi,ssgradlipi,sslipj,ssgradlipj,aa,bb
15324 real(kind=8) :: sss,e1,e2,evdw,fac_augm,e_augm,rij_shift
15326 ! print *,'Entering EGB nnt=',nnt,' nct=',nct,' expon=',expon
15329 ! if (icall.eq.0) lprn=.true.
15331 do i=iatsc_s,iatsc_e
15333 if (itypi.eq.ntyp1) cycle
15334 itypi1=itype(i+1,1)
15338 call to_box(xi,yi,zi)
15339 call lipid_layer(xi,yi,zi,sslipi,ssgradlipi)
15340 dxi=dc_norm(1,nres+i)
15341 dyi=dc_norm(2,nres+i)
15342 dzi=dc_norm(3,nres+i)
15344 ! dsci_inv=dsc_inv(itypi)
15345 dsci_inv=vbld_inv(i+nres)
15347 ! Calculate SC interaction energy.
15349 do iint=1,nint_gr(i)
15350 do j=istart(i,iint),iend(i,iint)
15353 if (itypj.eq.ntyp1) cycle
15354 ! dscj_inv=dsc_inv(itypj)
15355 dscj_inv=vbld_inv(j+nres)
15356 sig0ij=sigma(itypi,itypj)
15357 r0ij=r0(itypi,itypj)
15358 chi1=chi(itypi,itypj)
15359 chi2=chi(itypj,itypi)
15366 alf12=0.5D0*(alf1+alf2)
15370 call to_box(xj,yj,zj)
15371 call lipid_layer(xj,yj,zj,sslipj,ssgradlipj)
15372 aa=aa_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0 &
15373 +aa_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
15374 bb=bb_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0 &
15375 +bb_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
15376 xj=boxshift(xj-xi,boxxsize)
15377 yj=boxshift(yj-yi,boxysize)
15378 zj=boxshift(zj-zi,boxzsize)
15379 dxj=dc_norm(1,nres+j)
15380 dyj=dc_norm(2,nres+j)
15381 dzj=dc_norm(3,nres+j)
15382 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
15385 sss=sscale(1.0d0/(rij*sigmaii(itypi,itypj)))
15387 if (sss.lt.1.0d0) then
15389 ! Calculate angle-dependent terms of energy and contributions to their
15393 sig=sig0ij*dsqrt(sigsq)
15394 rij_shift=1.0D0/rij-sig+r0ij
15395 ! I hate to put IF's in the loops, but here don't have another choice!!!!
15396 if (rij_shift.le.0.0D0) then
15401 !---------------------------------------------------------------
15402 rij_shift=1.0D0/rij_shift
15403 fac=rij_shift**expon
15404 e1=fac*fac*aa_aq(itypi,itypj)
15405 e2=fac*bb_aq(itypi,itypj)
15406 evdwij=eps1*eps2rt*eps3rt*(e1+e2)
15407 eps2der=evdwij*eps3rt
15408 eps3der=evdwij*eps2rt
15409 fac_augm=rrij**expon
15410 e_augm=augm(itypi,itypj)*fac_augm
15411 evdwij=evdwij*eps2rt*eps3rt
15412 evdw=evdw+(evdwij+e_augm)*(1.0d0-sss)
15414 sigm=dabs(aa_aq(itypi,itypj)/bb_aq(itypi,itypj))**(1.0D0/6.0D0)
15415 epsi=bb_aq(itypi,itypj)**2/aa_aq(itypi,itypj)
15416 write (iout,'(2(a3,i3,2x),17(0pf7.3))') &
15417 restyp(itypi,1),i,restyp(itypj,1),j,&
15418 epsi,sigm,sig,(augm(itypi,itypj)/epsi)**(1.0D0/12.0D0),&
15419 chi1,chi2,chip1,chip2,&
15420 eps1,eps2rt**2,eps3rt**2,&
15421 om1,om2,om12,1.0D0/rij,1.0D0/rij_shift,&
15424 ! Calculate gradient components.
15425 e1=e1*eps1*eps2rt**2*eps3rt**2
15426 fac=-expon*(e1+evdwij)*rij_shift
15428 fac=rij*fac-2*expon*rrij*e_augm
15429 ! Calculate the radial part of the gradient
15433 ! Calculate angular part of the gradient.
15434 call sc_grad_scale(1.0d0-sss)
15439 end subroutine egbv_long
15440 !-----------------------------------------------------------------------------
15441 subroutine egbv_short(evdw)
15443 ! This subroutine calculates the interaction energy of nonbonded side chains
15444 ! assuming the Gay-Berne-Vorobjev potential of interaction.
15447 ! implicit real(kind=8) (a-h,o-z)
15448 ! include 'DIMENSIONS'
15449 ! include 'COMMON.GEO'
15450 ! include 'COMMON.VAR'
15451 ! include 'COMMON.LOCAL'
15452 ! include 'COMMON.CHAIN'
15453 ! include 'COMMON.DERIV'
15454 ! include 'COMMON.NAMES'
15455 ! include 'COMMON.INTERACT'
15456 ! include 'COMMON.IOUNITS'
15457 ! include 'COMMON.CALC'
15459 !el integer :: icall
15460 !el common /srutu/ icall
15462 !el local variables
15463 integer :: iint,itypi,itypi1,itypj
15464 real(kind=8) :: rrij,xi,yi,zi,fac,sigm,epsi,rij_shift,&
15465 sslipi,ssgradlipi, sslipj,ssgradlipj,aa,bb
15466 real(kind=8) :: sss,e1,e2,evdw,r0ij,sig,sig0ij,fac_augm,e_augm
15468 ! print *,'Entering EGB nnt=',nnt,' nct=',nct,' expon=',expon
15471 ! if (icall.eq.0) lprn=.true.
15473 do i=iatsc_s,iatsc_e
15475 if (itypi.eq.ntyp1) cycle
15476 itypi1=itype(i+1,1)
15480 dxi=dc_norm(1,nres+i)
15481 dyi=dc_norm(2,nres+i)
15482 dzi=dc_norm(3,nres+i)
15483 call to_box(xi,yi,zi)
15484 call lipid_layer(xi,yi,zi,sslipi,ssgradlipi)
15485 ! dsci_inv=dsc_inv(itypi)
15486 dsci_inv=vbld_inv(i+nres)
15488 ! Calculate SC interaction energy.
15490 do iint=1,nint_gr(i)
15491 do j=istart(i,iint),iend(i,iint)
15494 if (itypj.eq.ntyp1) cycle
15495 ! dscj_inv=dsc_inv(itypj)
15496 dscj_inv=vbld_inv(j+nres)
15497 sig0ij=sigma(itypi,itypj)
15498 r0ij=r0(itypi,itypj)
15499 chi1=chi(itypi,itypj)
15500 chi2=chi(itypj,itypi)
15507 alf12=0.5D0*(alf1+alf2)
15511 call to_box(xj,yj,zj)
15512 call lipid_layer(xj,yj,zj,sslipj,ssgradlipj)
15513 aa=aa_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0 &
15514 +aa_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
15515 bb=bb_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0 &
15516 +bb_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
15517 xj=boxshift(xj-xi,boxxsize)
15518 yj=boxshift(yj-yi,boxysize)
15519 zj=boxshift(zj-zi,boxzsize)
15520 dxj=dc_norm(1,nres+j)
15521 dyj=dc_norm(2,nres+j)
15522 dzj=dc_norm(3,nres+j)
15523 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
15526 sss=sscale(1.0d0/(rij*sigmaii(itypi,itypj)))
15528 if (sss.gt.0.0d0) then
15530 ! Calculate angle-dependent terms of energy and contributions to their
15534 sig=sig0ij*dsqrt(sigsq)
15535 rij_shift=1.0D0/rij-sig+r0ij
15536 ! I hate to put IF's in the loops, but here don't have another choice!!!!
15537 if (rij_shift.le.0.0D0) then
15542 !---------------------------------------------------------------
15543 rij_shift=1.0D0/rij_shift
15544 fac=rij_shift**expon
15545 e1=fac*fac*aa_aq(itypi,itypj)
15546 e2=fac*bb_aq(itypi,itypj)
15547 evdwij=eps1*eps2rt*eps3rt*(e1+e2)
15548 eps2der=evdwij*eps3rt
15549 eps3der=evdwij*eps2rt
15550 fac_augm=rrij**expon
15551 e_augm=augm(itypi,itypj)*fac_augm
15552 evdwij=evdwij*eps2rt*eps3rt
15553 evdw=evdw+(evdwij+e_augm)*sss
15555 sigm=dabs(aa_aq(itypi,itypj)/bb_aq(itypi,itypj))**(1.0D0/6.0D0)
15556 epsi=bb_aq(itypi,itypj)**2/aa_aq(itypi,itypj)
15557 write (iout,'(2(a3,i3,2x),17(0pf7.3))') &
15558 restyp(itypi,1),i,restyp(itypj,1),j,&
15559 epsi,sigm,sig,(augm(itypi,itypj)/epsi)**(1.0D0/12.0D0),&
15560 chi1,chi2,chip1,chip2,&
15561 eps1,eps2rt**2,eps3rt**2,&
15562 om1,om2,om12,1.0D0/rij,1.0D0/rij_shift,&
15565 ! Calculate gradient components.
15566 e1=e1*eps1*eps2rt**2*eps3rt**2
15567 fac=-expon*(e1+evdwij)*rij_shift
15569 fac=rij*fac-2*expon*rrij*e_augm
15570 ! Calculate the radial part of the gradient
15574 ! Calculate angular part of the gradient.
15575 call sc_grad_scale(sss)
15580 end subroutine egbv_short
15581 !-----------------------------------------------------------------------------
15582 subroutine eelec_scale(ees,evdw1,eel_loc,eello_turn3,eello_turn4)
15584 ! This subroutine calculates the average interaction energy and its gradient
15585 ! in the virtual-bond vectors between non-adjacent peptide groups, based on
15586 ! the potential described in Liwo et al., Protein Sci., 1993, 2, 1715.
15587 ! The potential depends both on the distance of peptide-group centers and on
15588 ! the orientation of the CA-CA virtual bonds.
15590 ! implicit real(kind=8) (a-h,o-z)
15596 ! include 'DIMENSIONS'
15597 ! include 'COMMON.CONTROL'
15598 ! include 'COMMON.SETUP'
15599 ! include 'COMMON.IOUNITS'
15600 ! include 'COMMON.GEO'
15601 ! include 'COMMON.VAR'
15602 ! include 'COMMON.LOCAL'
15603 ! include 'COMMON.CHAIN'
15604 ! include 'COMMON.DERIV'
15605 ! include 'COMMON.INTERACT'
15606 ! include 'COMMON.CONTACTS'
15607 ! include 'COMMON.TORSION'
15608 ! include 'COMMON.VECTORS'
15609 ! include 'COMMON.FFIELD'
15610 ! include 'COMMON.TIME1'
15611 real(kind=8),dimension(3) :: ggg,gggp,gggm,erij,dcosb,dcosg
15612 real(kind=8),dimension(3,3) ::erder,uryg,urzg,vryg,vrzg
15613 real(kind=8),dimension(2,2) :: acipa !el,a_temp
15614 !el real(kind=8),dimension(3,4) :: agg,aggi,aggi1,aggj,aggj1
15615 real(kind=8),dimension(4) :: muij
15616 !el integer :: num_conti,j1,j2
15617 !el real(kind=8) :: a22,a23,a32,a33,dxi,dyi,dzi,dx_normi,dy_normi,&
15618 !el dz_normi,xmedi,ymedi,zmedi
15619 !el common /locel/ a_temp,agg,aggi,aggi1,aggj,aggj1,a22,a23,a32,a33,&
15620 !el dxi,dyi,dzi,dx_normi,dy_normi,dz_normi,xmedi,ymedi,zmedi,&
15621 !el num_conti,j1,j2
15622 ! 4/26/02 - AL scaling factor for 1,4 repulsive VDW interactions
15624 real(kind=8) :: scal_el=1.0d0
15626 real(kind=8) :: scal_el=0.5d0
15629 ! 13-go grudnia roku pamietnego...
15630 real(kind=8),dimension(3,3) :: unmat=reshape((/1.0d0,0.0d0,0.0d0,&
15631 0.0d0,1.0d0,0.0d0,&
15632 0.0d0,0.0d0,1.0d0/),shape(unmat))
15633 !el local variables
15635 real(kind=8) :: fac
15636 real(kind=8) :: dxj,dyj,dzj
15637 real(kind=8) :: ees,evdw1,eel_loc,eello_turn3,eello_turn4
15639 ! allocate(num_cont_hb(nres)) !(maxres)
15640 !d write(iout,*) 'In EELEC'
15642 !d write(iout,*) 'Type',i
15643 !d write(iout,*) 'B1',B1(:,i)
15644 !d write(iout,*) 'B2',B2(:,i)
15645 !d write(iout,*) 'CC',CC(:,:,i)
15646 !d write(iout,*) 'DD',DD(:,:,i)
15647 !d write(iout,*) 'EE',EE(:,:,i)
15649 !d call check_vecgrad
15651 if (icheckgrad.eq.1) then
15653 fac=1.0d0/dsqrt(scalar(dc(1,i),dc(1,i)))
15655 dc_norm(k,i)=dc(k,i)*fac
15657 ! write (iout,*) 'i',i,' fac',fac
15660 if (wel_loc.gt.0.0d0 .or. wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 &
15661 .or. wcorr6.gt.0.0d0 .or. wturn3.gt.0.0d0 .or. &
15662 wturn4.gt.0.0d0 .or. wturn6.gt.0.0d0) then
15663 ! call vec_and_deriv
15667 ! print *, "before set matrices"
15669 ! print *,"after set martices"
15671 time_mat=time_mat+MPI_Wtime()-time01
15675 !d write (iout,*) 'i=',i
15677 !d write (iout,'(i5,2f10.5)') k,uy(k,i),uz(k,i)
15680 !d write (iout,'(f10.5,2x,3f10.5,2x,3f10.5)')
15681 !d & uz(k,i),(uzgrad(k,l,1,i),l=1,3),(uzgrad(k,l,2,i),l=1,3)
15694 !d print '(a)','Enter EELEC'
15695 !d write (iout,*) 'iatel_s=',iatel_s,' iatel_e=',iatel_e
15696 ! if (.not.allocated(gel_loc_loc)) allocate(gel_loc_loc(nres)) !(maxvar)(maxvar=6*maxres)
15697 ! if (.not.allocated(gcorr_loc)) allocate(gcorr_loc(nres)) !(maxvar)(maxvar=6*maxres)
15699 gel_loc_loc(i)=0.0d0
15704 ! 9/27/08 AL Split the interaction loop to ensure load balancing of turn terms
15706 ! Loop over i,i+2 and i,i+3 pairs of the peptide groups
15708 do i=iturn3_start,iturn3_end
15709 if (itype(i,1).eq.ntyp1.or. itype(i+1,1).eq.ntyp1 &
15710 .or. itype(i+2,1).eq.ntyp1 .or. itype(i+3,1).eq.ntyp1) cycle
15714 dx_normi=dc_norm(1,i)
15715 dy_normi=dc_norm(2,i)
15716 dz_normi=dc_norm(3,i)
15717 xmedi=c(1,i)+0.5d0*dxi
15718 ymedi=c(2,i)+0.5d0*dyi
15719 zmedi=c(3,i)+0.5d0*dzi
15720 call to_box(xmedi,ymedi,zmedi)
15721 call lipid_layer(xmedi,ymedi,zmedi,sslipi,ssgradlipi)
15723 call eelecij_scale(i,i+2,ees,evdw1,eel_loc)
15724 if (wturn3.gt.0.0d0) call eturn3(i,eello_turn3)
15725 num_cont_hb(i)=num_conti
15727 do i=iturn4_start,iturn4_end
15728 if (itype(i,1).eq.ntyp1 .or. itype(i+1,1).eq.ntyp1 &
15729 .or. itype(i+3,1).eq.ntyp1 &
15730 .or. itype(i+4,1).eq.ntyp1) cycle
15734 dx_normi=dc_norm(1,i)
15735 dy_normi=dc_norm(2,i)
15736 dz_normi=dc_norm(3,i)
15737 xmedi=c(1,i)+0.5d0*dxi
15738 ymedi=c(2,i)+0.5d0*dyi
15739 zmedi=c(3,i)+0.5d0*dzi
15741 call to_box(xmedi,ymedi,zmedi)
15742 call lipid_layer(xmedi,ymedi,zmedi,sslipi,ssgradlipi)
15744 num_conti=num_cont_hb(i)
15745 call eelecij_scale(i,i+3,ees,evdw1,eel_loc)
15746 if (wturn4.gt.0.0d0 .and. itype(i+2,1).ne.ntyp1) &
15747 call eturn4(i,eello_turn4)
15748 num_cont_hb(i)=num_conti
15751 ! Loop over all pairs of interacting peptide groups except i,i+2 and i,i+3
15753 do i=iatel_s,iatel_e
15754 if (itype(i,1).eq.ntyp1 .or. itype(i+1,1).eq.ntyp1) cycle
15758 dx_normi=dc_norm(1,i)
15759 dy_normi=dc_norm(2,i)
15760 dz_normi=dc_norm(3,i)
15761 xmedi=c(1,i)+0.5d0*dxi
15762 ymedi=c(2,i)+0.5d0*dyi
15763 zmedi=c(3,i)+0.5d0*dzi
15764 call to_box(xmedi,ymedi,zmedi)
15765 call lipid_layer(xmedi,ymedi,zmedi,sslipi,ssgradlipi)
15766 ! write (iout,*) 'i',i,' ielstart',ielstart(i),' ielend',ielend(i)
15767 num_conti=num_cont_hb(i)
15768 do j=ielstart(i),ielend(i)
15769 if (itype(j,1).eq.ntyp1 .or. itype(j+1,1).eq.ntyp1) cycle
15770 call eelecij_scale(i,j,ees,evdw1,eel_loc)
15772 num_cont_hb(i)=num_conti
15774 ! write (iout,*) "Number of loop steps in EELEC:",ind
15776 !d write (iout,'(i3,3f10.5,5x,3f10.5)')
15777 !d & i,(gel_loc(k,i),k=1,3),gel_loc_loc(i)
15779 ! 12/7/99 Adam eello_turn3 will be considered as a separate energy term
15780 !cc eel_loc=eel_loc+eello_turn3
15781 !d print *,"Processor",fg_rank," t_eelecij",t_eelecij
15783 end subroutine eelec_scale
15784 !-----------------------------------------------------------------------------
15785 subroutine eelecij_scale(i,j,ees,evdw1,eel_loc)
15786 ! implicit real(kind=8) (a-h,o-z)
15789 ! include 'DIMENSIONS'
15793 ! include 'COMMON.CONTROL'
15794 ! include 'COMMON.IOUNITS'
15795 ! include 'COMMON.GEO'
15796 ! include 'COMMON.VAR'
15797 ! include 'COMMON.LOCAL'
15798 ! include 'COMMON.CHAIN'
15799 ! include 'COMMON.DERIV'
15800 ! include 'COMMON.INTERACT'
15801 ! include 'COMMON.CONTACTS'
15802 ! include 'COMMON.TORSION'
15803 ! include 'COMMON.VECTORS'
15804 ! include 'COMMON.FFIELD'
15805 ! include 'COMMON.TIME1'
15806 real(kind=8),dimension(3) :: ggg,gggp,gggm,erij,dcosb,dcosg,xtemp
15807 real(kind=8),dimension(3,3) :: erder,uryg,urzg,vryg,vrzg
15808 real(kind=8),dimension(2,2) :: acipa !el,a_temp
15809 !el real(kind=8),dimension(3,4) :: agg,aggi,aggi1,aggj,aggj1
15810 real(kind=8),dimension(4) :: muij
15811 real(kind=8) :: xj_safe,yj_safe,zj_safe,xj_temp,yj_temp,zj_temp,&
15812 dist_temp, dist_init,sss_grad
15813 integer xshift,yshift,zshift
15815 !el integer :: num_conti,j1,j2
15816 !el real(kind=8) :: a22,a23,a32,a33,dxi,dyi,dzi,dx_normi,dy_normi,&
15817 !el dz_normi,xmedi,ymedi,zmedi
15818 !el common /locel/ a_temp,agg,aggi,aggi1,aggj,aggj1,a22,a23,a32,a33,&
15819 !el dxi,dyi,dzi,dx_normi,dy_normi,dz_normi,xmedi,ymedi,zmedi,&
15820 !el num_conti,j1,j2
15821 ! 4/26/02 - AL scaling factor for 1,4 repulsive VDW interactions
15823 real(kind=8) :: scal_el=1.0d0
15825 real(kind=8) :: scal_el=0.5d0
15828 ! 13-go grudnia roku pamietnego...
15829 real(kind=8),dimension(3,3) :: unmat=reshape((/1.0d0,0.0d0,0.0d0,&
15830 0.0d0,1.0d0,0.0d0,&
15831 0.0d0,0.0d0,1.0d0/),shape(unmat))
15832 !el local variables
15833 integer :: i,j,k,l,iteli,itelj,kkk,kkll,m,isubchap
15834 real(kind=8) :: aaa,bbb,ael6i,ael3i,dxj,dyj,dzj
15835 real(kind=8) :: xj,yj,zj,rij,rrmij,rmij,sss,r3ij,r6ij,fac
15836 real(kind=8) :: cosa,cosb,cosg,ev1,ev2,fac3,fac4,evdwij
15837 real(kind=8) :: el1,el2,eesij,ees0ij,r0ij,fcont,fprimcont
15838 real(kind=8) :: ees0tmp,ees0pij1,ees0mij1,ees0pijp,ees0mijp
15839 real(kind=8) :: ees,evdw1,eel_loc,eel_loc_ij,dx_normj,dy_normj,&
15840 dz_normj,facvdw,facel,fac1,facr,ecosa,ecosb,ecosg,&
15841 ury,urz,vry,vrz,a22der,a23der,a32der,a33der,cosa4,&
15842 wij,cosbg1,cosbg2,ees0pij,ees0mij,fac3p,ecosa1,ecosb1,&
15843 ecosg1,ecosa2,ecosb2,ecosg2,ecosap,ecosbp,ecosgp,&
15844 ecosam,ecosbm,ecosgm,ghalf,time00,faclipij,faclipij2
15845 ! integer :: maxconts
15846 ! maxconts = nres/4
15847 ! allocate(gacontp_hb1(3,maxconts,nres)) !(3,maxconts,maxres) ! (maxconts=maxres/4)
15848 ! allocate(gacontp_hb2(3,maxconts,nres)) !(3,maxconts,maxres) ! (maxconts=maxres/4)
15849 ! allocate(gacontp_hb3(3,maxconts,nres)) !(3,maxconts,maxres) ! (maxconts=maxres/4)
15850 ! allocate(gacontm_hb1(3,maxconts,nres)) !(3,maxconts,maxres) ! (maxconts=maxres/4)
15851 ! allocate(gacontm_hb2(3,maxconts,nres)) !(3,maxconts,maxres) ! (maxconts=maxres/4)
15852 ! allocate(gacontm_hb3(3,maxconts,nres)) !(3,maxconts,maxres) ! (maxconts=maxres/4)
15853 ! allocate(gacont_hbr(3,maxconts,nres)) !(3,maxconts,maxres) ! (maxconts=maxres/4)
15854 ! allocate(grij_hb_cont(3,maxconts,nres)) !(3,maxconts,maxres) ! (maxconts=maxres/4)
15855 ! allocate(facont_hb(maxconts,nres)) !(maxconts,maxres)
15856 ! allocate(ees0p(maxconts,nres)) !(maxconts,maxres)
15857 ! allocate(ees0m(maxconts,nres)) !(maxconts,maxres)
15858 ! allocate(d_cont(maxconts,nres)) !(maxconts,maxres)
15859 ! allocate(jcont_hb(maxconts,nres)) !(maxconts,maxres)
15861 ! allocate(a_chuj(2,2,maxconts,nres)) !(2,2,maxconts,maxres)
15862 ! allocate(a_chuj_der(2,2,3,5,maxconts,nres)) !(2,2,3,5,maxconts,maxres)
15867 !d write (iout,*) "eelecij",i,j
15871 if (j.eq.i+2 .and. itelj.eq.2) iteli=2
15872 aaa=app(iteli,itelj)
15873 bbb=bpp(iteli,itelj)
15874 ael6i=ael6(iteli,itelj)
15875 ael3i=ael3(iteli,itelj)
15879 dx_normj=dc_norm(1,j)
15880 dy_normj=dc_norm(2,j)
15881 dz_normj=dc_norm(3,j)
15882 ! xj=c(1,j)+0.5D0*dxj-xmedi
15883 ! yj=c(2,j)+0.5D0*dyj-ymedi
15884 ! zj=c(3,j)+0.5D0*dzj-zmedi
15885 xj=c(1,j)+0.5D0*dxj
15886 yj=c(2,j)+0.5D0*dyj
15887 zj=c(3,j)+0.5D0*dzj
15888 call to_box(xj,yj,zj)
15889 call lipid_layer(xj,yj,zj,sslipj,ssgradlipj)
15890 faclipij=(sslipi+sslipj)/2.0d0*lipscale+1.0d0
15891 faclipij2=(sslipi+sslipj)/2.0d0*lipscale**2+1.0d0
15892 xj=boxshift(xj-xmedi,boxxsize)
15893 yj=boxshift(yj-ymedi,boxysize)
15894 zj=boxshift(zj-zmedi,boxzsize)
15895 rij=xj*xj+yj*yj+zj*zj
15899 ! For extracting the short-range part of Evdwpp
15900 sss=sscale(rij/rpp(iteli,itelj))
15901 sss_ele_cut=sscale_ele(rij)
15902 sss_ele_grad=sscagrad_ele(rij)
15903 sss_grad=sscale_grad((rij/rpp(iteli,itelj)))
15904 ! sss_ele_cut=1.0d0
15905 ! sss_ele_grad=0.0d0
15906 if (sss_ele_cut.le.0.0) go to 128
15910 cosa=dx_normi*dx_normj+dy_normi*dy_normj+dz_normi*dz_normj
15911 cosb=(xj*dx_normi+yj*dy_normi+zj*dz_normi)*rmij
15912 cosg=(xj*dx_normj+yj*dy_normj+zj*dz_normj)*rmij
15913 fac=cosa-3.0D0*cosb*cosg
15915 ! 4/26/02 - AL scaling down 1,4 repulsive VDW interactions
15916 if (j.eq.i+2) ev1=scal_el*ev1
15921 el1=fac3*(4.0D0+fac*fac-3.0D0*(cosb*cosb+cosg*cosg))
15924 ! 12/26/95 - for the evaluation of multi-body H-bonding interactions
15925 ees0ij=4.0D0+fac*fac-3.0D0*(cosb*cosb+cosg*cosg)
15926 ees=ees+eesij*sss_ele_cut
15927 evdw1=evdw1+evdwij*(1.0d0-sss)*sss_ele_cut
15928 !d write(iout,'(2(2i3,2x),7(1pd12.4)/2(3(1pd12.4),5x)/)')
15929 !d & iteli,i,itelj,j,aaa,bbb,ael6i,ael3i,
15930 !d & 1.0D0/dsqrt(rrmij),evdwij,eesij,
15931 !d & xmedi,ymedi,zmedi,xj,yj,zj
15933 if (energy_dec) then
15934 write (iout,'(a6,2i5,0pf7.3,f7.3)') 'evdw1',i,j,evdwij,sss
15935 write (iout,'(a6,2i5,0pf7.3)') 'ees',i,j,eesij
15939 ! Calculate contributions to the Cartesian gradient.
15942 facvdw=-6*rrmij*(ev1+evdwij)*(1.0d0-sss)*sss_ele_cut
15943 facel=-3*rrmij*(el1+eesij)*sss_ele_cut
15949 ! Radial derivatives. First process both termini of the fragment (i,j)
15951 ggg(1)=facel*xj+sss_ele_grad*rmij*eesij*xj
15952 ggg(2)=facel*yj+sss_ele_grad*rmij*eesij*yj
15953 ggg(3)=facel*zj+sss_ele_grad*rmij*eesij*zj
15955 ! ghalf=0.5D0*ggg(k)
15956 ! gelc(k,i)=gelc(k,i)+ghalf
15957 ! gelc(k,j)=gelc(k,j)+ghalf
15959 ! 9/28/08 AL Gradient compotents will be summed only at the end
15961 gelc_long(k,j)=gelc_long(k,j)+ggg(k)
15962 gelc_long(k,i)=gelc_long(k,i)-ggg(k)
15965 ! Loop over residues i+1 thru j-1.
15969 !grad gelc(l,k)=gelc(l,k)+ggg(l)
15972 ggg(1)=facvdw*xj+sss_ele_grad*rmij*evdwij*xj*(1.0d0-sss) &
15973 -evdwij*sss_ele_cut/rij*sss_grad/rpp(iteli,itelj)*xj
15974 ggg(2)=facvdw*yj+sss_ele_grad*rmij*evdwij*yj*(1.0d0-sss) &
15975 -evdwij*sss_ele_cut/rij*sss_grad/rpp(iteli,itelj)*yj
15976 ggg(3)=facvdw*zj+sss_ele_grad*rmij*evdwij*zj*(1.0d0-sss) &
15977 -evdwij*sss_ele_cut/rij*sss_grad/rpp(iteli,itelj)*zj
15979 ! ghalf=0.5D0*ggg(k)
15980 ! gvdwpp(k,i)=gvdwpp(k,i)+ghalf
15981 ! gvdwpp(k,j)=gvdwpp(k,j)+ghalf
15983 ! 9/28/08 AL Gradient compotents will be summed only at the end
15985 gvdwpp(k,j)=gvdwpp(k,j)+ggg(k)
15986 gvdwpp(k,i)=gvdwpp(k,i)-ggg(k)
15989 ! Loop over residues i+1 thru j-1.
15993 !grad gvdwpp(l,k)=gvdwpp(l,k)+ggg(l)
15997 facvdw=(ev1+evdwij)*(1.0d0-sss)*sss_ele_cut
15998 facel=(el1+eesij)*sss_ele_cut
16000 fac=-3*rrmij*(facvdw+facvdw+facel)
16005 ! Radial derivatives. First process both termini of the fragment (i,j)
16011 ! ghalf=0.5D0*ggg(k)
16012 ! gelc(k,i)=gelc(k,i)+ghalf
16013 ! gelc(k,j)=gelc(k,j)+ghalf
16015 ! 9/28/08 AL Gradient compotents will be summed only at the end
16017 gelc_long(k,j)=gelc(k,j)+ggg(k)
16018 gelc_long(k,i)=gelc(k,i)-ggg(k)
16021 ! Loop over residues i+1 thru j-1.
16025 !grad gelc(l,k)=gelc(l,k)+ggg(l)
16028 ! 9/28/08 AL Gradient compotents will be summed only at the end
16033 gvdwpp(k,j)=gvdwpp(k,j)+ggg(k)
16034 gvdwpp(k,i)=gvdwpp(k,i)-ggg(k)
16040 ecosa=2.0D0*fac3*fac1+fac4
16043 ecosb=(fac3*(fac1*cosg+cosb)+cosg*fac4)
16044 ecosg=(fac3*(fac1*cosb+cosg)+cosb*fac4)
16046 dcosb(k)=rmij*(dc_norm(k,i)-erij(k)*cosb)
16047 dcosg(k)=rmij*(dc_norm(k,j)-erij(k)*cosg)
16049 !d print '(2i3,2(3(1pd14.5),3x))',i,j,(dcosb(k),k=1,3),
16050 !d & (dcosg(k),k=1,3)
16052 ggg(k)=(ecosb*dcosb(k)+ecosg*dcosg(k) )*sss_ele_cut
16055 ! ghalf=0.5D0*ggg(k)
16056 ! gelc(k,i)=gelc(k,i)+ghalf
16057 ! & +(ecosa*(dc_norm(k,j)-cosa*dc_norm(k,i))
16058 ! & + ecosb*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1)
16059 ! gelc(k,j)=gelc(k,j)+ghalf
16060 ! & +(ecosa*(dc_norm(k,i)-cosa*dc_norm(k,j))
16061 ! & + ecosg*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1)
16065 !grad gelc(l,k)=gelc(l,k)+ggg(l)
16069 gelc(k,i)=gelc(k,i) &
16070 +(ecosa*(dc_norm(k,j)-cosa*dc_norm(k,i)) &
16071 + ecosb*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1)&
16073 gelc(k,j)=gelc(k,j) &
16074 +(ecosa*(dc_norm(k,i)-cosa*dc_norm(k,j)) &
16075 + ecosg*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1)&
16077 gelc_long(k,j)=gelc_long(k,j)+ggg(k)
16078 gelc_long(k,i)=gelc_long(k,i)-ggg(k)
16080 IF (wel_loc.gt.0.0d0 .or. wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 &
16081 .or. wcorr6.gt.0.0d0 .or. wturn3.gt.0.0d0 &
16082 .or. wturn4.gt.0.0d0 .or. wturn6.gt.0.0d0) THEN
16084 ! 9/25/99 Mixed third-order local-electrostatic terms. The local-interaction
16085 ! energy of a peptide unit is assumed in the form of a second-order
16086 ! Fourier series in the angles lambda1 and lambda2 (see Nishikawa et al.
16087 ! Macromolecules, 1974, 7, 797-806 for definition). This correlation terms
16088 ! are computed for EVERY pair of non-contiguous peptide groups.
16090 if (j.lt.nres-1) then
16101 muij(kkk)=mu(k,i)*mu(l,j)
16104 !d write (iout,*) 'EELEC: i',i,' j',j
16105 !d write (iout,*) 'j',j,' j1',j1,' j2',j2
16106 !d write(iout,*) 'muij',muij
16107 ury=scalar(uy(1,i),erij)
16108 urz=scalar(uz(1,i),erij)
16109 vry=scalar(uy(1,j),erij)
16110 vrz=scalar(uz(1,j),erij)
16111 a22=scalar(uy(1,i),uy(1,j))-3*ury*vry
16112 a23=scalar(uy(1,i),uz(1,j))-3*ury*vrz
16113 a32=scalar(uz(1,i),uy(1,j))-3*urz*vry
16114 a33=scalar(uz(1,i),uz(1,j))-3*urz*vrz
16115 fac=dsqrt(-ael6i)*r3ij
16120 !d write (iout,'(4i5,4f10.5)')
16121 !d & i,itortyp(itype(i,1)),j,itortyp(itype(j,1)),a22,a23,a32,a33
16122 !d write (iout,'(6f10.5)') (muij(k),k=1,4),fac,eel_loc_ij
16123 !d write (iout,'(2(3f10.5,5x)/2(3f10.5,5x))') uy(:,i),uz(:,i),
16124 !d & uy(:,j),uz(:,j)
16125 !d write (iout,'(4f10.5)')
16126 !d & scalar(uy(1,i),uy(1,j)),scalar(uy(1,i),uz(1,j)),
16127 !d & scalar(uz(1,i),uy(1,j)),scalar(uz(1,i),uz(1,j))
16128 !d write (iout,'(4f10.5)') ury,urz,vry,vrz
16129 !d write (iout,'(9f10.5/)')
16130 !d & fac22,a22,fac23,a23,fac32,a32,fac33,a33,eel_loc_ij
16131 ! Derivatives of the elements of A in virtual-bond vectors
16132 call unormderiv(erij(1),unmat(1,1),rmij,erder(1,1))
16134 uryg(k,1)=scalar(erder(1,k),uy(1,i))
16135 uryg(k,2)=scalar(uygrad(1,k,1,i),erij(1))
16136 uryg(k,3)=scalar(uygrad(1,k,2,i),erij(1))
16137 urzg(k,1)=scalar(erder(1,k),uz(1,i))
16138 urzg(k,2)=scalar(uzgrad(1,k,1,i),erij(1))
16139 urzg(k,3)=scalar(uzgrad(1,k,2,i),erij(1))
16140 vryg(k,1)=scalar(erder(1,k),uy(1,j))
16141 vryg(k,2)=scalar(uygrad(1,k,1,j),erij(1))
16142 vryg(k,3)=scalar(uygrad(1,k,2,j),erij(1))
16143 vrzg(k,1)=scalar(erder(1,k),uz(1,j))
16144 vrzg(k,2)=scalar(uzgrad(1,k,1,j),erij(1))
16145 vrzg(k,3)=scalar(uzgrad(1,k,2,j),erij(1))
16147 ! Compute radial contributions to the gradient
16165 ! Add the contributions coming from er
16168 agg(k,1)=agg(k,1)+fac3*(uryg(k,1)*vry+vryg(k,1)*ury)
16169 agg(k,2)=agg(k,2)+fac3*(uryg(k,1)*vrz+vrzg(k,1)*ury)
16170 agg(k,3)=agg(k,3)+fac3*(urzg(k,1)*vry+vryg(k,1)*urz)
16171 agg(k,4)=agg(k,4)+fac3*(urzg(k,1)*vrz+vrzg(k,1)*urz)
16174 ! Derivatives in DC(i)
16175 !grad ghalf1=0.5d0*agg(k,1)
16176 !grad ghalf2=0.5d0*agg(k,2)
16177 !grad ghalf3=0.5d0*agg(k,3)
16178 !grad ghalf4=0.5d0*agg(k,4)
16179 aggi(k,1)=fac*(scalar(uygrad(1,k,1,i),uy(1,j)) &
16180 -3.0d0*uryg(k,2)*vry)!+ghalf1
16181 aggi(k,2)=fac*(scalar(uygrad(1,k,1,i),uz(1,j)) &
16182 -3.0d0*uryg(k,2)*vrz)!+ghalf2
16183 aggi(k,3)=fac*(scalar(uzgrad(1,k,1,i),uy(1,j)) &
16184 -3.0d0*urzg(k,2)*vry)!+ghalf3
16185 aggi(k,4)=fac*(scalar(uzgrad(1,k,1,i),uz(1,j)) &
16186 -3.0d0*urzg(k,2)*vrz)!+ghalf4
16187 ! Derivatives in DC(i+1)
16188 aggi1(k,1)=fac*(scalar(uygrad(1,k,2,i),uy(1,j)) &
16189 -3.0d0*uryg(k,3)*vry)!+agg(k,1)
16190 aggi1(k,2)=fac*(scalar(uygrad(1,k,2,i),uz(1,j)) &
16191 -3.0d0*uryg(k,3)*vrz)!+agg(k,2)
16192 aggi1(k,3)=fac*(scalar(uzgrad(1,k,2,i),uy(1,j)) &
16193 -3.0d0*urzg(k,3)*vry)!+agg(k,3)
16194 aggi1(k,4)=fac*(scalar(uzgrad(1,k,2,i),uz(1,j)) &
16195 -3.0d0*urzg(k,3)*vrz)!+agg(k,4)
16196 ! Derivatives in DC(j)
16197 aggj(k,1)=fac*(scalar(uygrad(1,k,1,j),uy(1,i)) &
16198 -3.0d0*vryg(k,2)*ury)!+ghalf1
16199 aggj(k,2)=fac*(scalar(uzgrad(1,k,1,j),uy(1,i)) &
16200 -3.0d0*vrzg(k,2)*ury)!+ghalf2
16201 aggj(k,3)=fac*(scalar(uygrad(1,k,1,j),uz(1,i)) &
16202 -3.0d0*vryg(k,2)*urz)!+ghalf3
16203 aggj(k,4)=fac*(scalar(uzgrad(1,k,1,j),uz(1,i)) &
16204 -3.0d0*vrzg(k,2)*urz)!+ghalf4
16205 ! Derivatives in DC(j+1) or DC(nres-1)
16206 aggj1(k,1)=fac*(scalar(uygrad(1,k,2,j),uy(1,i)) &
16207 -3.0d0*vryg(k,3)*ury)
16208 aggj1(k,2)=fac*(scalar(uzgrad(1,k,2,j),uy(1,i)) &
16209 -3.0d0*vrzg(k,3)*ury)
16210 aggj1(k,3)=fac*(scalar(uygrad(1,k,2,j),uz(1,i)) &
16211 -3.0d0*vryg(k,3)*urz)
16212 aggj1(k,4)=fac*(scalar(uzgrad(1,k,2,j),uz(1,i)) &
16213 -3.0d0*vrzg(k,3)*urz)
16214 !grad if (j.eq.nres-1 .and. i.lt.j-2) then
16216 !grad aggj1(k,l)=aggj1(k,l)+agg(k,l)
16229 aggi(k,l)=-aggi(k,l)
16230 aggi1(k,l)=-aggi1(k,l)
16231 aggj(k,l)=-aggj(k,l)
16232 aggj1(k,l)=-aggj1(k,l)
16235 if (j.lt.nres-1) then
16241 aggi(k,l)=-aggi(k,l)
16242 aggi1(k,l)=-aggi1(k,l)
16243 aggj(k,l)=-aggj(k,l)
16244 aggj1(k,l)=-aggj1(k,l)
16255 aggi(k,l)=-aggi(k,l)
16256 aggi1(k,l)=-aggi1(k,l)
16257 aggj(k,l)=-aggj(k,l)
16258 aggj1(k,l)=-aggj1(k,l)
16263 IF (wel_loc.gt.0.0d0) THEN
16264 ! Contribution to the local-electrostatic energy coming from the i-j pair
16265 eel_loc_ij=a22*muij(1)+a23*muij(2)+a32*muij(3) &
16267 ! write (iout,*) 'i',i,' j',j,' eel_loc_ij',eel_loc_ij
16268 ! print *,"EELLOC",i,gel_loc_loc(i-1)
16269 if (energy_dec) write (iout,'(a6,2i5,0pf7.3)') &
16270 'eelloc',i,j,eel_loc_ij
16271 ! write (iout,*) a22,muij(1),a23,muij(2),a32,muij(3) !d
16273 eel_loc=eel_loc+eel_loc_ij*sss_ele_cut
16274 ! Partial derivatives in virtual-bond dihedral angles gamma
16276 gel_loc_loc(i-1)=gel_loc_loc(i-1)+ &
16277 (a22*muder(1,i)*mu(1,j)+a23*muder(1,i)*mu(2,j) &
16278 +a32*muder(2,i)*mu(1,j)+a33*muder(2,i)*mu(2,j)) &
16280 gel_loc_loc(j-1)=gel_loc_loc(j-1)+ &
16281 (a22*mu(1,i)*muder(1,j)+a23*mu(1,i)*muder(2,j) &
16282 +a32*mu(2,i)*muder(1,j)+a33*mu(2,i)*muder(2,j)) &
16288 ! Derivatives of eello in DC(i+1) thru DC(j-1) or DC(nres-2)
16290 ggg(l)=(agg(l,1)*muij(1)+ &
16291 agg(l,2)*muij(2)+agg(l,3)*muij(3)+agg(l,4)*muij(4))&
16293 +eel_loc_ij*sss_ele_grad*rmij*xtemp(l)
16295 gel_loc_long(l,j)=gel_loc_long(l,j)+ggg(l)
16296 gel_loc_long(l,i)=gel_loc_long(l,i)-ggg(l)
16297 !grad ghalf=0.5d0*ggg(l)
16298 !grad gel_loc(l,i)=gel_loc(l,i)+ghalf
16299 !grad gel_loc(l,j)=gel_loc(l,j)+ghalf
16303 !grad gel_loc(l,k)=gel_loc(l,k)+ggg(l)
16306 ! Remaining derivatives of eello
16308 gel_loc(l,i)=gel_loc(l,i)+(aggi(l,1)*muij(1)+ &
16309 aggi(l,2)*muij(2)+aggi(l,3)*muij(3)+aggi(l,4)*muij(4))&
16312 gel_loc(l,i+1)=gel_loc(l,i+1)+(aggi1(l,1)*muij(1)+ &
16313 aggi1(l,2)*muij(2)+aggi1(l,3)*muij(3)+aggi1(l,4)*muij(4))&
16316 gel_loc(l,j)=gel_loc(l,j)+(aggj(l,1)*muij(1)+ &
16317 aggj(l,2)*muij(2)+aggj(l,3)*muij(3)+aggj(l,4)*muij(4))&
16320 gel_loc(l,j1)=gel_loc(l,j1)+(aggj1(l,1)*muij(1)+ &
16321 aggj1(l,2)*muij(2)+aggj1(l,3)*muij(3)+aggj1(l,4)*muij(4))&
16326 ! Change 12/26/95 to calculate four-body contributions to H-bonding energy
16327 ! if (j.gt.i+1 .and. num_conti.le.maxconts) then
16328 if (wcorr+wcorr4+wcorr5+wcorr6.gt.0.0d0 &
16329 .and. num_conti.le.maxconts) then
16330 ! write (iout,*) i,j," entered corr"
16332 ! Calculate the contact function. The ith column of the array JCONT will
16333 ! contain the numbers of atoms that make contacts with the atom I (of numbers
16334 ! greater than I). The arrays FACONT and GACONT will contain the values of
16335 ! the contact function and its derivative.
16336 ! r0ij=1.02D0*rpp(iteli,itelj)
16337 ! r0ij=1.11D0*rpp(iteli,itelj)
16338 r0ij=2.20D0*rpp(iteli,itelj)
16339 ! r0ij=1.55D0*rpp(iteli,itelj)
16340 call gcont(rij,r0ij,1.0D0,0.2d0*r0ij,fcont,fprimcont)
16341 !elwrite(iout,*) "num_conti",num_conti, "maxconts",maxconts
16342 if (fcont.gt.0.0D0) then
16343 num_conti=num_conti+1
16344 if (num_conti.gt.maxconts) then
16345 !elwrite(iout,*) "num_conti",num_conti, "maxconts",maxconts
16346 write (iout,*) 'WARNING - max. # of contacts exceeded;',&
16347 ' will skip next contacts for this conf.',num_conti
16349 jcont_hb(num_conti,i)=j
16350 !d write (iout,*) "i",i," j",j," num_conti",num_conti,
16351 !d & " jcont_hb",jcont_hb(num_conti,i)
16352 IF (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or. &
16353 wcorr6.gt.0.0d0 .or. wturn6.gt.0.0d0) THEN
16354 ! 9/30/99 (AL) - store components necessary to evaluate higher-order loc-el
16356 d_cont(num_conti,i)=rij
16357 !d write (2,'(3e15.5)') rij,r0ij+0.2d0*r0ij,rij
16358 ! --- Electrostatic-interaction matrix ---
16359 a_chuj(1,1,num_conti,i)=a22
16360 a_chuj(1,2,num_conti,i)=a23
16361 a_chuj(2,1,num_conti,i)=a32
16362 a_chuj(2,2,num_conti,i)=a33
16363 ! --- Gradient of rij
16365 grij_hb_cont(kkk,num_conti,i)=erij(kkk)
16372 a_chuj_der(k,l,m,1,num_conti,i)=agg(m,kkll)
16373 a_chuj_der(k,l,m,2,num_conti,i)=aggi(m,kkll)
16374 a_chuj_der(k,l,m,3,num_conti,i)=aggi1(m,kkll)
16375 a_chuj_der(k,l,m,4,num_conti,i)=aggj(m,kkll)
16376 a_chuj_der(k,l,m,5,num_conti,i)=aggj1(m,kkll)
16381 IF (wcorr4.eq.0.0d0 .and. wcorr.gt.0.0d0) THEN
16382 ! Calculate contact energies
16384 wij=cosa-3.0D0*cosb*cosg
16387 ! fac3=dsqrt(-ael6i)/r0ij**3
16388 fac3=dsqrt(-ael6i)*r3ij
16389 ! ees0pij=dsqrt(4.0D0+cosa4+wij*wij-3.0D0*cosbg1*cosbg1)
16390 ees0tmp=4.0D0+cosa4+wij*wij-3.0D0*cosbg1*cosbg1
16391 if (ees0tmp.gt.0) then
16392 ees0pij=dsqrt(ees0tmp)
16396 ! ees0mij=dsqrt(4.0D0-cosa4+wij*wij-3.0D0*cosbg2*cosbg2)
16397 ees0tmp=4.0D0-cosa4+wij*wij-3.0D0*cosbg2*cosbg2
16398 if (ees0tmp.gt.0) then
16399 ees0mij=dsqrt(ees0tmp)
16404 ees0p(num_conti,i)=0.5D0*fac3*(ees0pij+ees0mij) &
16407 ees0m(num_conti,i)=0.5D0*fac3*(ees0pij-ees0mij) &
16410 ! Diagnostics. Comment out or remove after debugging!
16411 ! ees0p(num_conti,i)=0.5D0*fac3*ees0pij
16412 ! ees0m(num_conti,i)=0.5D0*fac3*ees0mij
16413 ! ees0m(num_conti,i)=0.0D0
16415 ! write (iout,*) 'i=',i,' j=',j,' rij=',rij,' r0ij=',r0ij,
16416 ! & ' ees0ij=',ees0p(num_conti,i),ees0m(num_conti,i),' fcont=',fcont
16417 ! Angular derivatives of the contact function
16418 ees0pij1=fac3/ees0pij
16419 ees0mij1=fac3/ees0mij
16420 fac3p=-3.0D0*fac3*rrmij
16421 ees0pijp=0.5D0*fac3p*(ees0pij+ees0mij)
16422 ees0mijp=0.5D0*fac3p*(ees0pij-ees0mij)
16424 ecosa1= ees0pij1*( 1.0D0+0.5D0*wij)
16425 ecosb1=-1.5D0*ees0pij1*(wij*cosg+cosbg1)
16426 ecosg1=-1.5D0*ees0pij1*(wij*cosb+cosbg1)
16427 ecosa2= ees0mij1*(-1.0D0+0.5D0*wij)
16428 ecosb2=-1.5D0*ees0mij1*(wij*cosg+cosbg2)
16429 ecosg2=-1.5D0*ees0mij1*(wij*cosb-cosbg2)
16430 ecosap=ecosa1+ecosa2
16431 ecosbp=ecosb1+ecosb2
16432 ecosgp=ecosg1+ecosg2
16433 ecosam=ecosa1-ecosa2
16434 ecosbm=ecosb1-ecosb2
16435 ecosgm=ecosg1-ecosg2
16444 facont_hb(num_conti,i)=fcont
16445 fprimcont=fprimcont/rij
16446 !d facont_hb(num_conti,i)=1.0D0
16447 ! Following line is for diagnostics.
16450 dcosb(k)=rmij*(dc_norm(k,i)-erij(k)*cosb)
16451 dcosg(k)=rmij*(dc_norm(k,j)-erij(k)*cosg)
16454 gggp(k)=ecosbp*dcosb(k)+ecosgp*dcosg(k)
16455 gggm(k)=ecosbm*dcosb(k)+ecosgm*dcosg(k)
16457 ! gggp(1)=gggp(1)+ees0pijp*xj
16458 ! gggp(2)=gggp(2)+ees0pijp*yj
16459 ! gggp(3)=gggp(3)+ees0pijp*zj
16460 ! gggm(1)=gggm(1)+ees0mijp*xj
16461 ! gggm(2)=gggm(2)+ees0mijp*yj
16462 ! gggm(3)=gggm(3)+ees0mijp*zj
16463 gggp(1)=gggp(1)+ees0pijp*xj &
16464 +ees0p(num_conti,i)/sss_ele_cut*rmij*xj*sss_ele_grad
16465 gggp(2)=gggp(2)+ees0pijp*yj &
16466 +ees0p(num_conti,i)/sss_ele_cut*rmij*yj*sss_ele_grad
16467 gggp(3)=gggp(3)+ees0pijp*zj &
16468 +ees0p(num_conti,i)/sss_ele_cut*rmij*zj*sss_ele_grad
16470 gggm(1)=gggm(1)+ees0mijp*xj &
16471 +ees0m(num_conti,i)/sss_ele_cut*rmij*xj*sss_ele_grad
16473 gggm(2)=gggm(2)+ees0mijp*yj &
16474 +ees0m(num_conti,i)/sss_ele_cut*rmij*yj*sss_ele_grad
16476 gggm(3)=gggm(3)+ees0mijp*zj &
16477 +ees0m(num_conti,i)/sss_ele_cut*rmij*zj*sss_ele_grad
16479 ! Derivatives due to the contact function
16480 gacont_hbr(1,num_conti,i)=fprimcont*xj
16481 gacont_hbr(2,num_conti,i)=fprimcont*yj
16482 gacont_hbr(3,num_conti,i)=fprimcont*zj
16485 ! 10/24/08 cgrad and ! comments indicate the parts of the code removed
16486 ! following the change of gradient-summation algorithm.
16488 !grad ghalfp=0.5D0*gggp(k)
16489 !grad ghalfm=0.5D0*gggm(k)
16490 ! gacontp_hb1(k,num_conti,i)= & !ghalfp
16491 ! +(ecosap*(dc_norm(k,j)-cosa*dc_norm(k,i)) &
16492 ! + ecosbp*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1)
16493 ! gacontp_hb2(k,num_conti,i)= & !ghalfp
16494 ! +(ecosap*(dc_norm(k,i)-cosa*dc_norm(k,j)) &
16495 ! + ecosgp*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1)
16496 ! gacontp_hb3(k,num_conti,i)=gggp(k)
16497 ! gacontm_hb1(k,num_conti,i)= &!ghalfm
16498 ! +(ecosam*(dc_norm(k,j)-cosa*dc_norm(k,i)) &
16499 ! + ecosbm*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1)
16500 ! gacontm_hb2(k,num_conti,i)= & !ghalfm
16501 ! +(ecosam*(dc_norm(k,i)-cosa*dc_norm(k,j)) &
16502 ! + ecosgm*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1)
16503 ! gacontm_hb3(k,num_conti,i)=gggm(k)
16504 gacontp_hb1(k,num_conti,i)= & !ghalfp+
16505 (ecosap*(dc_norm(k,j)-cosa*dc_norm(k,i)) &
16506 + ecosbp*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1) &
16509 gacontp_hb2(k,num_conti,i)= & !ghalfp+
16510 (ecosap*(dc_norm(k,i)-cosa*dc_norm(k,j)) &
16511 + ecosgp*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1)&
16514 gacontp_hb3(k,num_conti,i)=gggp(k) &
16517 gacontm_hb1(k,num_conti,i)= & !ghalfm+
16518 (ecosam*(dc_norm(k,j)-cosa*dc_norm(k,i)) &
16519 + ecosbm*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1) &
16522 gacontm_hb2(k,num_conti,i)= & !ghalfm+
16523 (ecosam*(dc_norm(k,i)-cosa*dc_norm(k,j)) &
16524 + ecosgm*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1) &
16527 gacontm_hb3(k,num_conti,i)=gggm(k) &
16532 endif ! num_conti.le.maxconts
16535 if (wturn3.gt.0.0d0 .or. wturn4.gt.0.0d0) then
16538 ghalf=0.5d0*agg(l,k)
16539 aggi(l,k)=aggi(l,k)+ghalf
16540 aggi1(l,k)=aggi1(l,k)+agg(l,k)
16541 aggj(l,k)=aggj(l,k)+ghalf
16544 if (j.eq.nres-1 .and. i.lt.j-2) then
16547 aggj1(l,k)=aggj1(l,k)+agg(l,k)
16553 ! t_eelecij=t_eelecij+MPI_Wtime()-time00
16555 end subroutine eelecij_scale
16556 !-----------------------------------------------------------------------------
16557 subroutine evdwpp_short(evdw1)
16561 ! implicit real(kind=8) (a-h,o-z)
16562 ! include 'DIMENSIONS'
16563 ! include 'COMMON.CONTROL'
16564 ! include 'COMMON.IOUNITS'
16565 ! include 'COMMON.GEO'
16566 ! include 'COMMON.VAR'
16567 ! include 'COMMON.LOCAL'
16568 ! include 'COMMON.CHAIN'
16569 ! include 'COMMON.DERIV'
16570 ! include 'COMMON.INTERACT'
16571 ! include 'COMMON.CONTACTS'
16572 ! include 'COMMON.TORSION'
16573 ! include 'COMMON.VECTORS'
16574 ! include 'COMMON.FFIELD'
16575 real(kind=8),dimension(3) :: ggg
16576 ! 4/26/02 - AL scaling factor for 1,4 repulsive VDW interactions
16578 real(kind=8) :: scal_el=1.0d0
16580 real(kind=8) :: scal_el=0.5d0
16582 !el local variables
16583 integer :: i,j,k,iteli,itelj,num_conti,isubchap
16584 real(kind=8) :: dxi,dyi,dzi,dxj,dyj,dzj,aaa,bbb
16585 real(kind=8) :: xj,yj,zj,rij,rrmij,sss,r3ij,r6ij,evdw1,&
16586 dx_normi,dy_normi,dz_normi,xmedi,ymedi,zmedi,&
16587 dx_normj,dy_normj,dz_normj,rmij,ev1,ev2,evdwij,facvdw
16588 real(kind=8) :: xj_safe,yj_safe,zj_safe,xj_temp,yj_temp,zj_temp,&
16589 dist_temp, dist_init,sss_grad,sslipi,ssgradlipi,&
16590 sslipj,ssgradlipj,faclipij2
16591 integer xshift,yshift,zshift
16595 ! write (iout,*) "iatel_s_vdw",iatel_s_vdw,
16596 ! & " iatel_e_vdw",iatel_e_vdw
16598 do i=iatel_s_vdw,iatel_e_vdw
16599 if (itype(i,1).eq.ntyp1.or. itype(i+1,1).eq.ntyp1) cycle
16603 dx_normi=dc_norm(1,i)
16604 dy_normi=dc_norm(2,i)
16605 dz_normi=dc_norm(3,i)
16606 xmedi=c(1,i)+0.5d0*dxi
16607 ymedi=c(2,i)+0.5d0*dyi
16608 zmedi=c(3,i)+0.5d0*dzi
16609 call to_box(xmedi,ymedi,zmedi)
16610 call lipid_layer(xmedi,ymedi,zmedi,sslipi,ssgradlipi)
16612 ! write (iout,*) 'i',i,' ielstart',ielstart_vdw(i),
16613 ! & ' ielend',ielend_vdw(i)
16615 do j=ielstart_vdw(i),ielend_vdw(i)
16616 if (itype(j,1).eq.ntyp1 .or. itype(j+1,1).eq.ntyp1) cycle
16620 if (j.eq.i+2 .and. itelj.eq.2) iteli=2
16621 aaa=app(iteli,itelj)
16622 bbb=bpp(iteli,itelj)
16626 dx_normj=dc_norm(1,j)
16627 dy_normj=dc_norm(2,j)
16628 dz_normj=dc_norm(3,j)
16629 ! xj=c(1,j)+0.5D0*dxj-xmedi
16630 ! yj=c(2,j)+0.5D0*dyj-ymedi
16631 ! zj=c(3,j)+0.5D0*dzj-zmedi
16632 xj=c(1,j)+0.5D0*dxj
16633 yj=c(2,j)+0.5D0*dyj
16634 zj=c(3,j)+0.5D0*dzj
16635 call to_box(xj,yj,zj)
16636 call lipid_layer(xj,yj,zj,sslipj,ssgradlipj)
16637 faclipij2=(sslipi+sslipj)/2.0d0*lipscale**2+1.0d0
16638 xj=boxshift(xj-xmedi,boxxsize)
16639 yj=boxshift(yj-ymedi,boxysize)
16640 zj=boxshift(zj-zmedi,boxzsize)
16641 rij=xj*xj+yj*yj+zj*zj
16644 sss=sscale(rij/rpp(iteli,itelj))
16645 sss_ele_cut=sscale_ele(rij)
16646 sss_ele_grad=sscagrad_ele(rij)
16647 sss_grad=sscale_grad((rij/rpp(iteli,itelj)))
16648 if (sss_ele_cut.le.0.0) cycle
16649 if (sss.gt.0.0d0) then
16654 ! 4/26/02 - AL scaling down 1,4 repulsive VDW interactions
16655 if (j.eq.i+2) ev1=scal_el*ev1
16658 if (energy_dec) then
16659 write (iout,'(a6,2i5,0pf7.3,f7.3)') 'evdw1',i,j,evdwij,sss
16661 evdw1=evdw1+evdwij*sss*sss_ele_cut
16663 ! Calculate contributions to the Cartesian gradient.
16665 facvdw=-6*rrmij*(ev1+evdwij)*sss*sss_ele_cut
16669 ggg(1)=facvdw*xj+sss_ele_grad*rmij*evdwij*xj*sss &
16670 +evdwij*sss_ele_cut/rij*sss_grad/rpp(iteli,itelj)*xj
16671 ggg(2)=facvdw*yj+sss_ele_grad*rmij*evdwij*yj*sss &
16672 +evdwij*sss_ele_cut/rij*sss_grad/rpp(iteli,itelj)*yj
16673 ggg(3)=facvdw*zj+sss_ele_grad*rmij*evdwij*zj*sss &
16674 +evdwij*sss_ele_cut/rij*sss_grad/rpp(iteli,itelj)*zj
16677 gvdwpp(k,j)=gvdwpp(k,j)+ggg(k)
16678 gvdwpp(k,i)=gvdwpp(k,i)-ggg(k)
16684 end subroutine evdwpp_short
16685 !-----------------------------------------------------------------------------
16686 subroutine escp_long(evdw2,evdw2_14)
16688 ! This subroutine calculates the excluded-volume interaction energy between
16689 ! peptide-group centers and side chains and its gradient in virtual-bond and
16690 ! side-chain vectors.
16692 ! implicit real(kind=8) (a-h,o-z)
16693 ! include 'DIMENSIONS'
16694 ! include 'COMMON.GEO'
16695 ! include 'COMMON.VAR'
16696 ! include 'COMMON.LOCAL'
16697 ! include 'COMMON.CHAIN'
16698 ! include 'COMMON.DERIV'
16699 ! include 'COMMON.INTERACT'
16700 ! include 'COMMON.FFIELD'
16701 ! include 'COMMON.IOUNITS'
16702 ! include 'COMMON.CONTROL'
16703 real(kind=8),dimension(3) :: ggg
16704 !el local variables
16705 integer :: i,iint,j,k,iteli,itypj,subchap
16706 real(kind=8) :: xi,yi,zi,xj,yj,zj,rrij,sss,fac,e1,e2,sss_grad,rij
16707 real(kind=8) :: evdw2,evdw2_14,evdwij
16708 real(kind=8) :: xj_safe,yj_safe,zj_safe,xj_temp,yj_temp,zj_temp,&
16709 dist_temp, dist_init
16713 !d print '(a)','Enter ESCP'
16714 !d write (iout,*) 'iatscp_s=',iatscp_s,' iatscp_e=',iatscp_e
16715 do i=iatscp_s,iatscp_e
16716 if (itype(i,1).eq.ntyp1 .or. itype(i+1,1).eq.ntyp1) cycle
16718 xi=0.5D0*(c(1,i)+c(1,i+1))
16719 yi=0.5D0*(c(2,i)+c(2,i+1))
16720 zi=0.5D0*(c(3,i)+c(3,i+1))
16721 call to_box(xi,yi,zi)
16722 do iint=1,nscp_gr(i)
16724 do j=iscpstart(i,iint),iscpend(i,iint)
16726 if (itypj.eq.ntyp1) cycle
16727 ! Uncomment following three lines for SC-p interactions
16728 ! xj=c(1,nres+j)-xi
16729 ! yj=c(2,nres+j)-yi
16730 ! zj=c(3,nres+j)-zi
16731 ! Uncomment following three lines for Ca-p interactions
16735 call to_box(xj,yj,zj)
16736 xj=boxshift(xj-xi,boxxsize)
16737 yj=boxshift(yj-yi,boxysize)
16738 zj=boxshift(zj-zi,boxzsize)
16739 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
16741 rij=dsqrt(1.0d0/rrij)
16742 sss_ele_cut=sscale_ele(rij)
16743 sss_ele_grad=sscagrad_ele(rij)
16744 ! print *,sss_ele_cut,sss_ele_grad,&
16745 ! (rij),r_cut_ele,rlamb_ele
16746 if (sss_ele_cut.le.0.0) cycle
16747 sss=sscale((rij/rscp(itypj,iteli)))
16748 sss_grad=sscale_grad(rij/rscp(itypj,iteli))
16749 if (sss.lt.1.0d0) then
16752 e1=fac*fac*aad(itypj,iteli)
16753 e2=fac*bad(itypj,iteli)
16754 if (iabs(j-i) .le. 2) then
16757 evdw2_14=evdw2_14+(e1+e2)*(1.0d0-sss)*sss_ele_cut
16760 evdw2=evdw2+evdwij*(1.0d0-sss)*sss_ele_cut
16761 if (energy_dec) write (iout,'(a6,2i5,2(0pf7.3))') &
16762 'evdw2',i,j,sss,evdwij
16764 ! Calculate contributions to the gradient in the virtual-bond and SC vectors.
16766 fac=-(evdwij+e1)*rrij*(1.0d0-sss)*sss_ele_cut
16767 fac=fac+evdwij*sss_ele_grad/rij/expon*(1.0d0-sss)&
16768 -evdwij*sss_ele_cut/rij/expon*sss_grad/rscp(itypj,iteli)
16772 ! Uncomment following three lines for SC-p interactions
16774 ! gradx_scp(k,j)=gradx_scp(k,j)+ggg(k)
16776 ! Uncomment following line for SC-p interactions
16777 ! gradx_scp(k,j)=gradx_scp(k,j)+ggg(k)
16779 gvdwc_scpp(k,i)=gvdwc_scpp(k,i)-ggg(k)
16780 gvdwc_scp(k,j)=gvdwc_scp(k,j)+ggg(k)
16789 gvdwc_scp(j,i)=expon*gvdwc_scp(j,i)
16790 gvdwc_scpp(j,i)=expon*gvdwc_scpp(j,i)
16791 gradx_scp(j,i)=expon*gradx_scp(j,i)
16794 !******************************************************************************
16798 ! To save time the factor EXPON has been extracted from ALL components
16799 ! of GVDWC and GRADX. Remember to multiply them by this factor before further
16802 !******************************************************************************
16804 end subroutine escp_long
16805 !-----------------------------------------------------------------------------
16806 subroutine escp_short(evdw2,evdw2_14)
16808 ! This subroutine calculates the excluded-volume interaction energy between
16809 ! peptide-group centers and side chains and its gradient in virtual-bond and
16810 ! side-chain vectors.
16812 ! implicit real(kind=8) (a-h,o-z)
16813 ! include 'DIMENSIONS'
16814 ! include 'COMMON.GEO'
16815 ! include 'COMMON.VAR'
16816 ! include 'COMMON.LOCAL'
16817 ! include 'COMMON.CHAIN'
16818 ! include 'COMMON.DERIV'
16819 ! include 'COMMON.INTERACT'
16820 ! include 'COMMON.FFIELD'
16821 ! include 'COMMON.IOUNITS'
16822 ! include 'COMMON.CONTROL'
16823 real(kind=8),dimension(3) :: ggg
16824 !el local variables
16825 integer :: i,iint,j,k,iteli,itypj,subchap
16826 real(kind=8) :: xi,yi,zi,xj,yj,zj,rrij,sss,fac,e1,e2,sss_grad,rij
16827 real(kind=8) :: evdw2,evdw2_14,evdwij
16828 real(kind=8) :: xj_safe,yj_safe,zj_safe,xj_temp,yj_temp,zj_temp,&
16829 dist_temp, dist_init
16833 !d print '(a)','Enter ESCP'
16834 !d write (iout,*) 'iatscp_s=',iatscp_s,' iatscp_e=',iatscp_e
16835 do i=iatscp_s,iatscp_e
16836 if (itype(i,1).eq.ntyp1 .or. itype(i+1,1).eq.ntyp1) cycle
16838 xi=0.5D0*(c(1,i)+c(1,i+1))
16839 yi=0.5D0*(c(2,i)+c(2,i+1))
16840 zi=0.5D0*(c(3,i)+c(3,i+1))
16841 call to_box(xi,yi,zi)
16842 if (zi.lt.0) zi=zi+boxzsize
16844 do iint=1,nscp_gr(i)
16846 do j=iscpstart(i,iint),iscpend(i,iint)
16848 if (itypj.eq.ntyp1) cycle
16849 ! Uncomment following three lines for SC-p interactions
16850 ! xj=c(1,nres+j)-xi
16851 ! yj=c(2,nres+j)-yi
16852 ! zj=c(3,nres+j)-zi
16853 ! Uncomment following three lines for Ca-p interactions
16860 call to_box(xj,yj,zj)
16861 xj=boxshift(xj-xi,boxxsize)
16862 yj=boxshift(yj-yi,boxysize)
16863 zj=boxshift(zj-zi,boxzsize)
16864 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
16865 rij=dsqrt(1.0d0/rrij)
16866 sss_ele_cut=sscale_ele(rij)
16867 sss_ele_grad=sscagrad_ele(rij)
16868 ! print *,sss_ele_cut,sss_ele_grad,&
16869 ! (rij),r_cut_ele,rlamb_ele
16870 if (sss_ele_cut.le.0.0) cycle
16871 sss=sscale(rij/rscp(itypj,iteli))
16872 sss_grad=sscale_grad(rij/rscp(itypj,iteli))
16873 if (sss.gt.0.0d0) then
16876 e1=fac*fac*aad(itypj,iteli)
16877 e2=fac*bad(itypj,iteli)
16878 if (iabs(j-i) .le. 2) then
16881 evdw2_14=evdw2_14+(e1+e2)*sss*sss_ele_cut
16884 evdw2=evdw2+evdwij*sss*sss_ele_cut
16885 if (energy_dec) write (iout,'(a6,2i5,2(0pf7.3))') &
16886 'evdw2',i,j,sss,evdwij
16888 ! Calculate contributions to the gradient in the virtual-bond and SC vectors.
16890 fac=-(evdwij+e1)*rrij*sss*sss_ele_cut
16891 fac=fac+evdwij*sss_ele_grad/rij/expon*sss &
16892 +evdwij*sss_ele_cut/rij/expon*sss_grad/rscp(itypj,iteli)
16897 ! Uncomment following three lines for SC-p interactions
16899 ! gradx_scp(k,j)=gradx_scp(k,j)+ggg(k)
16901 ! Uncomment following line for SC-p interactions
16902 ! gradx_scp(k,j)=gradx_scp(k,j)+ggg(k)
16904 gvdwc_scpp(k,i)=gvdwc_scpp(k,i)-ggg(k)
16905 gvdwc_scp(k,j)=gvdwc_scp(k,j)+ggg(k)
16914 gvdwc_scp(j,i)=expon*gvdwc_scp(j,i)
16915 gvdwc_scpp(j,i)=expon*gvdwc_scpp(j,i)
16916 gradx_scp(j,i)=expon*gradx_scp(j,i)
16919 !******************************************************************************
16923 ! To save time the factor EXPON has been extracted from ALL components
16924 ! of GVDWC and GRADX. Remember to multiply them by this factor before further
16927 !******************************************************************************
16929 end subroutine escp_short
16930 !-----------------------------------------------------------------------------
16931 ! energy_p_new-sep_barrier.F
16932 !-----------------------------------------------------------------------------
16933 subroutine sc_grad_scale(scalfac)
16934 ! implicit real(kind=8) (a-h,o-z)
16936 ! include 'DIMENSIONS'
16937 ! include 'COMMON.CHAIN'
16938 ! include 'COMMON.DERIV'
16939 ! include 'COMMON.CALC'
16940 ! include 'COMMON.IOUNITS'
16941 real(kind=8),dimension(3) :: dcosom1,dcosom2
16942 real(kind=8) :: scalfac
16943 !el local variables
16944 ! integer :: i,j,k,l
16946 eom1=eps2der*eps2rt_om1-2.0D0*alf1*eps3der+sigder*sigsq_om1
16947 eom2=eps2der*eps2rt_om2+2.0D0*alf2*eps3der+sigder*sigsq_om2
16948 eom12=evdwij*eps1_om12+eps2der*eps2rt_om12 &
16949 -2.0D0*alf12*eps3der+sigder*sigsq_om12
16953 ! eom12=evdwij*eps1_om12
16955 ! write (iout,*) "eps2der",eps2der," eps3der",eps3der,
16956 ! & " sigder",sigder
16957 ! write (iout,*) "eps1_om12",eps1_om12," eps2rt_om12",eps2rt_om12
16958 ! write (iout,*) "eom1",eom1," eom2",eom2," eom12",eom12
16960 dcosom1(k)=rij*(dc_norm(k,nres+i)-om1*erij(k))
16961 dcosom2(k)=rij*(dc_norm(k,nres+j)-om2*erij(k))
16964 gg(k)=(gg(k)+eom1*dcosom1(k)+eom2*dcosom2(k))*scalfac&
16967 ! write (iout,*) "gg",(gg(k),k=1,3)
16969 gvdwx(k,i)=gvdwx(k,i)-gg(k) &
16970 +(eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,nres+i)) &
16971 +eom1*(erij(k)-om1*dc_norm(k,nres+i)))*dsci_inv*scalfac&
16973 gvdwx(k,j)=gvdwx(k,j)+gg(k) &
16974 +(eom12*(dc_norm(k,nres+i)-om12*dc_norm(k,nres+j)) &
16975 +eom2*(erij(k)-om2*dc_norm(k,nres+j)))*dscj_inv*scalfac&
16977 ! write (iout,*)(eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,nres+i))
16978 ! & +eom1*(erij(k)-om1*dc_norm(k,nres+i)))*dsci_inv
16979 ! write (iout,*)(eom12*(dc_norm(k,nres+i)-om12*dc_norm(k,nres+j))
16980 ! & +eom2*(erij(k)-om2*dc_norm(k,nres+j)))*dscj_inv
16983 ! Calculate the components of the gradient in DC and X
16986 gvdwc(l,i)=gvdwc(l,i)-gg(l)
16987 gvdwc(l,j)=gvdwc(l,j)+gg(l)
16990 end subroutine sc_grad_scale
16991 !-----------------------------------------------------------------------------
16992 ! energy_split-sep.F
16993 !-----------------------------------------------------------------------------
16994 subroutine etotal_long(energia)
16996 ! Compute the long-range slow-varying contributions to the energy
16998 ! implicit real(kind=8) (a-h,o-z)
16999 ! include 'DIMENSIONS'
17000 use MD_data, only: totT,usampl,eq_time
17004 !MS$ATTRIBUTES C :: proc_proc
17009 real(kind=8),dimension(n_ene) :: weights_!,time_Bcast,time_Bcastw
17011 ! include 'COMMON.SETUP'
17012 ! include 'COMMON.IOUNITS'
17013 ! include 'COMMON.FFIELD'
17014 ! include 'COMMON.DERIV'
17015 ! include 'COMMON.INTERACT'
17016 ! include 'COMMON.SBRIDGE'
17017 ! include 'COMMON.CHAIN'
17018 ! include 'COMMON.VAR'
17019 ! include 'COMMON.LOCAL'
17020 ! include 'COMMON.MD'
17021 real(kind=8),dimension(0:n_ene) :: energia
17022 !el local variables
17023 integer :: i,n_corr,n_corr1,ierror,ierr
17024 real(kind=8) :: evdw2,evdw2_14,ehpb,etors,edihcnstr,etors_d,esccor,&
17025 evdw,ees,evdw1,eel_loc,eello_turn3,eello_turn4,&
17026 ecorr,ecorr5,ecorr6,eturn6,time00, ehomology_constr
17027 ! write(iout,'(a,i2)')'Calling etotal_long ipot=',ipot
17028 !elwrite(iout,*)"in etotal long"
17030 if (modecalc.eq.12.or.modecalc.eq.14) then
17032 ! if (fg_rank.eq.0) call int_from_cart1(.false.)
17034 call int_from_cart1(.false.)
17037 !elwrite(iout,*)"in etotal long"
17038 ehomology_constr=0.0d0
17040 ! write(iout,*) "ETOTAL_LONG Processor",fg_rank,
17041 ! & " absolute rank",myrank," nfgtasks",nfgtasks
17043 if (nfgtasks.gt.1) then
17045 ! FG slaves call the following matching MPI_Bcast in ERGASTULUM
17046 if (fg_rank.eq.0) then
17047 call MPI_Bcast(3,1,MPI_INTEGER,king,FG_COMM,IERROR)
17048 ! write (iout,*) "Processor",myrank," BROADCAST iorder"
17050 ! FG master sets up the WEIGHTS_ array which will be broadcast to the
17051 ! FG slaves as WEIGHTS array.
17058 weights_(7)=wel_loc
17061 weights_(10)=wturn6
17063 weights_(12)=wscloc
17065 weights_(14)=wtor_d
17066 weights_(15)=wstrain
17067 weights_(16)=wvdwpp
17069 weights_(18)=scal14
17070 weights_(21)=wsccor
17071 ! FG Master broadcasts the WEIGHTS_ array
17072 call MPI_Bcast(weights_(1),n_ene,&
17073 MPI_DOUBLE_PRECISION,king,FG_COMM,IERROR)
17075 ! FG slaves receive the WEIGHTS array
17076 call MPI_Bcast(weights(1),n_ene,&
17077 MPI_DOUBLE_PRECISION,king,FG_COMM,IERROR)
17092 wstrain=weights(15)
17098 call MPI_Bcast(dc(1,1),6*nres,MPI_DOUBLE_PRECISION,&
17100 time_Bcast=time_Bcast+MPI_Wtime()-time00
17101 time_Bcastw=time_Bcastw+MPI_Wtime()-time00
17102 ! call chainbuild_cart
17103 ! call int_from_cart1(.false.)
17105 ! write (iout,*) 'Processor',myrank,
17106 ! & ' calling etotal_short ipot=',ipot
17108 ! print *,'Processor',myrank,' nnt=',nnt,' nct=',nct
17110 !d print *,'nnt=',nnt,' nct=',nct
17112 !elwrite(iout,*)"in etotal long"
17113 ! Compute the side-chain and electrostatic interaction energy
17115 goto (101,102,103,104,105,106) ipot
17116 ! Lennard-Jones potential.
17117 101 call elj_long(evdw)
17118 !d print '(a)','Exit ELJ'
17120 ! Lennard-Jones-Kihara potential (shifted).
17121 102 call eljk_long(evdw)
17123 ! Berne-Pechukas potential (dilated LJ, angular dependence).
17124 103 call ebp_long(evdw)
17126 ! Gay-Berne potential (shifted LJ, angular dependence).
17127 104 call egb_long(evdw)
17129 ! Gay-Berne-Vorobjev potential (shifted LJ, angular dependence).
17130 105 call egbv_long(evdw)
17132 ! Soft-sphere potential
17133 106 call e_softsphere(evdw)
17135 ! Calculate electrostatic (H-bonding) energy of the main chain.
17139 if (ipot.lt.6) then
17141 if (welec.gt.0d0.or.wvdwpp.gt.0d0.or.wel_loc.gt.0d0.or. &
17142 wturn3.gt.0d0.or.wturn4.gt.0d0 .or. wcorr.gt.0.0d0 &
17143 .or. wcorr4.gt.0.0d0 .or. wcorr5.gt.0.d0 &
17144 .or. wcorr6.gt.0.0d0 .or. wturn6.gt.0.0d0 ) then
17146 if (welec.gt.0d0.or.wel_loc.gt.0d0.or. &
17147 wturn3.gt.0d0.or.wturn4.gt.0d0 .or. wcorr.gt.0.0d0 &
17148 .or. wcorr4.gt.0.0d0 .or. wcorr5.gt.0.d0 &
17149 .or. wcorr6.gt.0.0d0 .or. wturn6.gt.0.0d0 ) then
17151 call eelec_scale(ees,evdw1,eel_loc,eello_turn3,eello_turn4)
17160 ! write (iout,*) "Soft-spheer ELEC potential"
17161 call eelec_soft_sphere(ees,evdw1,eel_loc,eello_turn3,&
17165 ! Calculate excluded-volume interaction energy between peptide groups
17168 if (ipot.lt.6) then
17169 if(wscp.gt.0d0) then
17170 call escp_long(evdw2,evdw2_14)
17176 call escp_soft_sphere(evdw2,evdw2_14)
17179 ! 12/1/95 Multi-body terms
17183 if ((wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0 &
17184 .or. wturn6.gt.0.0d0) .and. ipot.lt.6) then
17185 call multibody_eello(ecorr,ecorr5,ecorr6,eturn6,n_corr,n_corr1)
17186 ! write (2,*) 'n_corr=',n_corr,' n_corr1=',n_corr1,
17187 ! &" ecorr",ecorr," ecorr5",ecorr5," ecorr6",ecorr6," eturn6",eturn6
17194 if ((wcorr4.eq.0.0d0 .and. wcorr.gt.0.0d0) .and. ipot.lt.6) then
17195 call multibody_hb(ecorr,ecorr5,ecorr6,n_corr,n_corr1)
17198 ! If performing constraint dynamics, call the constraint energy
17199 ! after the equilibration time
17200 if(usampl.and.totT.gt.eq_time) then
17215 energia(2)=evdw2-evdw2_14
17216 energia(18)=evdw2_14
17225 energia(3)=ees+evdw1
17232 energia(8)=eello_turn3
17233 energia(9)=eello_turn4
17235 energia(20)=Uconst+Uconst_back
17236 energia(51)=ehomology_constr
17237 call sum_energy(energia,.true.)
17238 ! write (iout,*) "Exit ETOTAL_LONG"
17241 end subroutine etotal_long
17242 !-----------------------------------------------------------------------------
17243 subroutine etotal_short(energia)
17245 ! Compute the short-range fast-varying contributions to the energy
17247 ! implicit real(kind=8) (a-h,o-z)
17248 ! include 'DIMENSIONS'
17252 !MS$ATTRIBUTES C :: proc_proc
17257 integer :: ierror,ierr
17258 real(kind=8),dimension(n_ene) :: weights_
17259 real(kind=8) :: time00
17261 ! include 'COMMON.SETUP'
17262 ! include 'COMMON.IOUNITS'
17263 ! include 'COMMON.FFIELD'
17264 ! include 'COMMON.DERIV'
17265 ! include 'COMMON.INTERACT'
17266 ! include 'COMMON.SBRIDGE'
17267 ! include 'COMMON.CHAIN'
17268 ! include 'COMMON.VAR'
17269 ! include 'COMMON.LOCAL'
17270 real(kind=8),dimension(0:n_ene) :: energia
17271 !el local variables
17273 real(kind=8) :: evdw,evdw1,evdw2,evdw2_14,esccor,etors_d,etors
17274 real(kind=8) :: ehpb,escloc,estr,ebe,edihcnstr,ethetacnstr, &
17278 ! write(iout,'(a,i2)')'Calling etotal_short ipot=',ipot
17280 if (modecalc.eq.12.or.modecalc.eq.14) then
17282 if (fg_rank.eq.0) call int_from_cart1(.false.)
17284 call int_from_cart1(.false.)
17288 ! write(iout,*) "ETOTAL_SHORT Processor",fg_rank,
17289 ! & " absolute rank",myrank," nfgtasks",nfgtasks
17291 if (nfgtasks.gt.1) then
17293 ! FG slaves call the following matching MPI_Bcast in ERGASTULUM
17294 if (fg_rank.eq.0) then
17295 call MPI_Bcast(2,1,MPI_INTEGER,king,FG_COMM,IERROR)
17296 ! write (iout,*) "Processor",myrank," BROADCAST iorder"
17298 ! FG master sets up the WEIGHTS_ array which will be broadcast to the
17299 ! FG slaves as WEIGHTS array.
17306 weights_(7)=wel_loc
17309 weights_(10)=wturn6
17311 weights_(12)=wscloc
17313 weights_(14)=wtor_d
17314 weights_(15)=wstrain
17315 weights_(16)=wvdwpp
17317 weights_(18)=scal14
17318 weights_(21)=wsccor
17319 ! FG Master broadcasts the WEIGHTS_ array
17320 call MPI_Bcast(weights_(1),n_ene,&
17321 MPI_DOUBLE_PRECISION,king,FG_COMM,IERROR)
17323 ! FG slaves receive the WEIGHTS array
17324 call MPI_Bcast(weights(1),n_ene,&
17325 MPI_DOUBLE_PRECISION,king,FG_COMM,IERROR)
17340 wstrain=weights(15)
17346 ! write (iout,*),"Processor",myrank," BROADCAST weights"
17347 call MPI_Bcast(c(1,1),nres6,MPI_DOUBLE_PRECISION,&
17349 ! write (iout,*) "Processor",myrank," BROADCAST c"
17350 call MPI_Bcast(dc(1,1),nres6,MPI_DOUBLE_PRECISION,&
17352 ! write (iout,*) "Processor",myrank," BROADCAST dc"
17353 call MPI_Bcast(dc_norm(1,1),nres6,MPI_DOUBLE_PRECISION,&
17355 ! write (iout,*) "Processor",myrank," BROADCAST dc_norm"
17356 call MPI_Bcast(theta(1),nres,MPI_DOUBLE_PRECISION,&
17358 ! write (iout,*) "Processor",myrank," BROADCAST theta"
17359 call MPI_Bcast(phi(1),nres,MPI_DOUBLE_PRECISION,&
17361 ! write (iout,*) "Processor",myrank," BROADCAST phi"
17362 call MPI_Bcast(alph(1),nres,MPI_DOUBLE_PRECISION,&
17364 ! write (iout,*) "Processor",myrank," BROADCAST alph"
17365 call MPI_Bcast(omeg(1),nres,MPI_DOUBLE_PRECISION,&
17367 ! write (iout,*) "Processor",myrank," BROADCAST omeg"
17368 call MPI_Bcast(vbld(1),2*nres,MPI_DOUBLE_PRECISION,&
17370 ! write (iout,*) "Processor",myrank," BROADCAST vbld"
17371 call MPI_Bcast(vbld_inv(1),2*nres,MPI_DOUBLE_PRECISION,&
17373 time_Bcast=time_Bcast+MPI_Wtime()-time00
17374 ! write (iout,*) "Processor",myrank," BROADCAST vbld_inv"
17376 ! write (iout,*) 'Processor',myrank,
17377 ! & ' calling etotal_short ipot=',ipot
17379 ! print *,'Processor',myrank,' nnt=',nnt,' nct=',nct
17381 ! call int_from_cart1(.false.)
17383 ! Compute the side-chain and electrostatic interaction energy
17385 goto (101,102,103,104,105,106) ipot
17386 ! Lennard-Jones potential.
17387 101 call elj_short(evdw)
17388 !d print '(a)','Exit ELJ'
17390 ! Lennard-Jones-Kihara potential (shifted).
17391 102 call eljk_short(evdw)
17393 ! Berne-Pechukas potential (dilated LJ, angular dependence).
17394 103 call ebp_short(evdw)
17396 ! Gay-Berne potential (shifted LJ, angular dependence).
17397 104 call egb_short(evdw)
17399 ! Gay-Berne-Vorobjev potential (shifted LJ, angular dependence).
17400 105 call egbv_short(evdw)
17402 ! Soft-sphere potential - already dealt with in the long-range part
17404 ! 106 call e_softsphere_short(evdw)
17406 ! Calculate electrostatic (H-bonding) energy of the main chain.
17410 ! Calculate the short-range part of Evdwpp
17412 call evdwpp_short(evdw1)
17414 ! Calculate the short-range part of ESCp
17416 if (ipot.lt.6) then
17417 call escp_short(evdw2,evdw2_14)
17420 ! Calculate the bond-stretching energy
17424 ! Calculate the disulfide-bridge and other energy and the contributions
17425 ! from other distance constraints.
17428 ! Calculate the virtual-bond-angle energy.
17430 ! Calculate the SC local energy.
17435 if (wang.gt.0d0) then
17436 if (tor_mode.eq.0) then
17439 !C ebend kcc is Kubo cumulant clustered rigorous attemp to derive the
17441 call ebend_kcc(ebe)
17447 if (with_theta_constr) call etheta_constr(ethetacnstr)
17449 ! write(iout,*) "in etotal afer ebe",ipot
17451 ! print *,"Processor",myrank," computed UB"
17453 ! Calculate the SC local energy.
17456 !elwrite(iout,*) "in etotal afer esc",ipot
17457 ! print *,"Processor",myrank," computed USC"
17459 ! Calculate the virtual-bond torsional energy.
17461 !d print *,'nterm=',nterm
17462 ! if (wtor.gt.0) then
17463 ! call etor(etors,edihcnstr)
17468 if (wtor.gt.0.0d0) then
17469 if (tor_mode.eq.0) then
17472 !C etor kcc is Kubo cumulant clustered rigorous attemp to derive the
17474 call etor_kcc(etors)
17480 if (ndih_constr.gt.0) call etor_constr(edihcnstr)
17482 ! Calculate the virtual-bond torsional energy.
17485 ! 6/23/01 Calculate double-torsional energy
17487 if ((wtor_d.gt.0.0d0).and.(tor_mode.eq.0)) then
17488 call etor_d(etors_d)
17491 ! Homology restraints
17493 if (constr_homology.ge.1) then
17494 call e_modeller(ehomology_constr)
17497 ehomology_constr=0.0d0
17501 ! 21/5/07 Calculate local sicdechain correlation energy
17503 if (wsccor.gt.0.0d0) then
17504 call eback_sc_corr(esccor)
17509 ! Put energy components into an array
17516 energia(2)=evdw2-evdw2_14
17517 energia(18)=evdw2_14
17530 energia(14)=etors_d
17533 energia(19)=edihcnstr
17535 energia(51)=ehomology_constr
17536 ! write (iout,*) "ETOTAL_SHORT before SUM_ENERGY"
17538 call sum_energy(energia,.true.)
17539 ! write (iout,*) "Exit ETOTAL_SHORT"
17542 end subroutine etotal_short
17543 !-----------------------------------------------------------------------------
17545 !-----------------------------------------------------------------------------
17546 real(kind=8) function gnmr1(y,ymin,ymax)
17548 real(kind=8) :: y,ymin,ymax
17549 real(kind=8) :: wykl=4.0d0
17550 if (y.lt.ymin) then
17551 gnmr1=(ymin-y)**wykl/wykl
17552 else if (y.gt.ymax) then
17553 gnmr1=(y-ymax)**wykl/wykl
17559 !-----------------------------------------------------------------------------
17560 real(kind=8) function gnmr1prim(y,ymin,ymax)
17562 real(kind=8) :: y,ymin,ymax
17563 real(kind=8) :: wykl=4.0d0
17564 if (y.lt.ymin) then
17565 gnmr1prim=-(ymin-y)**(wykl-1)
17566 else if (y.gt.ymax) then
17567 gnmr1prim=(y-ymax)**(wykl-1)
17572 end function gnmr1prim
17573 !----------------------------------------------------------------------------
17574 real(kind=8) function rlornmr1(y,ymin,ymax,sigma)
17575 real(kind=8) y,ymin,ymax,sigma
17576 real(kind=8) wykl /4.0d0/
17577 if (y.lt.ymin) then
17578 rlornmr1=(ymin-y)**wykl/((ymin-y)**wykl+sigma**wykl)
17579 else if (y.gt.ymax) then
17580 rlornmr1=(y-ymax)**wykl/((y-ymax)**wykl+sigma**wykl)
17585 end function rlornmr1
17586 !------------------------------------------------------------------------------
17587 real(kind=8) function rlornmr1prim(y,ymin,ymax,sigma)
17588 real(kind=8) y,ymin,ymax,sigma
17589 real(kind=8) wykl /4.0d0/
17590 if (y.lt.ymin) then
17591 rlornmr1prim=-(ymin-y)**(wykl-1)*sigma**wykl*wykl/ &
17592 ((ymin-y)**wykl+sigma**wykl)**2
17593 else if (y.gt.ymax) then
17594 rlornmr1prim=(y-ymax)**(wykl-1)*sigma**wykl*wykl/ &
17595 ((y-ymax)**wykl+sigma**wykl)**2
17600 end function rlornmr1prim
17602 real(kind=8) function harmonic(y,ymax)
17604 real(kind=8) :: y,ymax
17605 real(kind=8) :: wykl=2.0d0
17606 harmonic=(y-ymax)**wykl
17608 end function harmonic
17609 !-----------------------------------------------------------------------------
17610 real(kind=8) function harmonicprim(y,ymax)
17611 real(kind=8) :: y,ymin,ymax
17612 real(kind=8) :: wykl=2.0d0
17613 harmonicprim=(y-ymax)*wykl
17615 end function harmonicprim
17616 !-----------------------------------------------------------------------------
17618 !-----------------------------------------------------------------------------
17619 subroutine gradient(n,x,nf,g,uiparm,urparm,ufparm)
17621 use io_base, only:intout,briefout
17622 ! implicit real(kind=8) (a-h,o-z)
17623 ! include 'DIMENSIONS'
17624 ! include 'COMMON.CHAIN'
17625 ! include 'COMMON.DERIV'
17626 ! include 'COMMON.VAR'
17627 ! include 'COMMON.INTERACT'
17628 ! include 'COMMON.FFIELD'
17629 ! include 'COMMON.MD'
17630 ! include 'COMMON.IOUNITS'
17631 real(kind=8),external :: ufparm
17632 integer :: uiparm(1)
17633 real(kind=8) :: urparm(1)
17634 real(kind=8),dimension(6*nres) :: x,g !(maxvar) (maxvar=6*maxres)
17635 real(kind=8) :: f,gthetai,gphii,galphai,gomegai
17636 integer :: n,nf,ind,ind1,i,k,j
17638 ! This subroutine calculates total internal coordinate gradient.
17639 ! Depending on the number of function evaluations, either whole energy
17640 ! is evaluated beforehand, Cartesian coordinates and their derivatives in
17641 ! internal coordinates are reevaluated or only the cartesian-in-internal
17642 ! coordinate derivatives are evaluated. The subroutine was designed to work
17648 !d print *,'grad',nf,icg
17649 if (nf-nfl+1) 20,30,40
17650 20 call func(n,x,nf,f,uiparm,urparm,ufparm)
17651 ! write (iout,*) 'grad 20'
17652 if (nf.eq.0) return
17654 30 call var_to_geom(n,x)
17656 ! write (iout,*) 'grad 30'
17658 ! Evaluate the derivatives of virtual bond lengths and SC vectors in variables.
17661 ! write (iout,*) 'grad 40'
17662 ! print *,'GRADIENT: nnt=',nnt,' nct=',nct,' expon=',expon
17664 ! Convert the Cartesian gradient into internal-coordinate gradient.
17674 ! print *,'GRAD: i=',i,' jc=',j,' ind=',ind
17676 gthetai=gthetai+dcdv(k,ind)*gradc(k,j,icg)
17679 gphii=gphii+dcdv(k+3,ind)*gradc(k,j,icg)
17685 ! print *,'GRAD: i=',i,' jx=',j,' ind1=',ind1
17687 gthetai=gthetai+dxdv(k,ind1)*gradx(k,j,icg)
17688 gphii=gphii+dxdv(k+3,ind1)*gradx(k,j,icg)
17691 if (i.gt.1) g(i-1)=gphii
17692 if (n.gt.nphi) g(nphi+i)=gthetai
17694 if (n.le.nphi+ntheta) goto 10
17696 if (itype(i,1).ne.10) then
17700 galphai=galphai+dxds(k,i)*gradx(k,i,icg)
17703 gomegai=gomegai+dxds(k+3,i)*gradx(k,i,icg)
17705 g(ialph(i,1))=galphai
17706 g(ialph(i,1)+nside)=gomegai
17710 ! Add the components corresponding to local energy terms.
17714 !d write (iout,*) 'i=',i,'g=',g(i),' gloc=',gloc(i,icg)
17715 g(i)=g(i)+gloc(i,icg)
17717 ! Uncomment following three lines for diagnostics.
17719 !elwrite(iout,*) "in gradient after calling intout"
17720 !d call briefout(0,0.0d0)
17721 !d write (iout,'(i3,1pe15.5)') (k,g(k),k=1,n)
17723 end subroutine gradient
17724 !-----------------------------------------------------------------------------
17725 subroutine func(n,x,nf,f,uiparm,urparm,ufparm) !from minimize_p.F
17728 ! implicit real(kind=8) (a-h,o-z)
17729 ! include 'DIMENSIONS'
17730 ! include 'COMMON.DERIV'
17731 ! include 'COMMON.IOUNITS'
17732 ! include 'COMMON.GEO'
17735 !el common /chuju/ jjj
17736 real(kind=8) :: energia(0:n_ene)
17737 integer :: uiparm(1)
17738 real(kind=8) :: urparm(1)
17740 real(kind=8),external :: ufparm
17741 real(kind=8),dimension(6*nres) :: x !(maxvar) (maxvar=6*maxres)
17742 ! if (jjj.gt.0) then
17743 ! write (iout,'(10f8.3)') (rad2deg*x(i),i=1,n)
17747 !d print *,'func',nf,nfl,icg
17748 call var_to_geom(n,x)
17751 !d write (iout,*) 'ETOTAL called from FUNC'
17752 call etotal(energia)
17755 ! if (jjj.gt.0) then
17756 ! write (iout,'(10f8.3)') (rad2deg*x(i),i=1,n)
17757 ! write (iout,*) 'f=',etot
17761 end subroutine func
17762 !-----------------------------------------------------------------------------
17763 subroutine cartgrad
17764 ! implicit real(kind=8) (a-h,o-z)
17765 ! include 'DIMENSIONS'
17767 use MD_data, only: totT,usampl,eq_time
17771 ! include 'COMMON.CHAIN'
17772 ! include 'COMMON.DERIV'
17773 ! include 'COMMON.VAR'
17774 ! include 'COMMON.INTERACT'
17775 ! include 'COMMON.FFIELD'
17776 ! include 'COMMON.MD'
17777 ! include 'COMMON.IOUNITS'
17778 ! include 'COMMON.TIME1'
17781 real(kind=8) :: time00,time01
17783 ! This subrouting calculates total Cartesian coordinate gradient.
17784 ! The subroutine chainbuild_cart and energy MUST be called beforehand.
17787 #ifdef TIMINGtime01
17795 !el write (iout,*) "After sum_gradient"
17797 write (iout,*) "After sum_gradient"
17799 write (iout,*) i," gradc ",(gradc(j,i,icg),j=1,3)
17800 write (iout,*) i," gradx ",(gradx(j,i,icg),j=1,3)
17804 ! If performing constraint dynamics, add the gradients of the constraint energy
17805 if(usampl.and.totT.gt.eq_time) then
17808 gradc(j,i,icg)=gradc(j,i,icg)+dudconst(j,i)+duscdiff(j,i)
17809 gradx(j,i,icg)=gradx(j,i,icg)+dudxconst(j,i)+duscdiffx(j,i)
17813 gloc(i,icg)=gloc(i,icg)+dugamma(i)
17816 gloc(nphi+i,icg)=gloc(nphi+i,icg)+dutheta(i)
17819 !elwrite (iout,*) "After sum_gradient"
17824 !elwrite (iout,*) "After sum_gradient"
17826 time_intcartderiv=time_intcartderiv+MPI_Wtime()-time01
17828 ! call checkintcartgrad
17829 ! write(iout,*) 'calling int_to_cart'
17832 write (iout,*) "gcart, gxcart, gloc before int_to_cart"
17836 gcart(j,i)=gradc(j,i,icg)
17837 gxcart(j,i)=gradx(j,i,icg)
17838 ! if (i.le.2) print *,"gcart_one",gcart(j,i),gradc(j,i,icg)
17841 write (iout,'(i5,2(3f10.5,5x),4f10.5)') i,(gcart(j,i),j=1,3),&
17842 (gxcart(j,i),j=1,3),gloc(i,icg),(gloc_sc(j,i,icg),j=1,3)
17848 ! print *,"gcart_two",gxcart(2,2),gradx(2,2,icg)
17850 ! print *,"gcart_two",gxcart(2,2),gradx(2,2,icg)
17853 time_inttocart=time_inttocart+MPI_Wtime()-time01
17856 write (iout,*) "gcart and gxcart after int_to_cart"
17858 write (iout,'(i5,3f10.5,5x,3f10.5)') i,(gcart(j,i),j=1,3),&
17859 (gxcart(j,i),j=1,3)
17865 write (iout,*) "CARGRAD"
17869 gcart(j,i)=-gcart(j,i)+gcart(j,i-1)-gxcart(j,i)
17870 ! gcart_new(j,i)=-gcart(j,i)+gcart(j,i-1)-gxcart(j,i)
17872 ! write (iout,'(i5,3f10.5,5x,3f10.5,5x,3f10.5)') i,(gcart(j,i),j=1,3), &
17873 ! (gcart_new(j,i),j=1,3),(gxcart(j,i),j=1,3)
17875 ! Correction: dummy residues
17878 ! gcart_new(j,nnt)=gcart_new(j,nnt)+gcart_new(j,1)
17879 gcart(j,nnt)=gcart(j,nnt)+gcart(j,1)
17882 if (nct.lt.nres) then
17884 ! gcart_new(j,nct)=gcart_new(j,nct)+gcart_new(j,nres)
17885 gcart(j,nct)=gcart(j,nct)+gcart(j,nres)
17890 time_cartgrad=time_cartgrad+MPI_Wtime()-time00
17894 end subroutine cartgrad
17897 subroutine grad_transform
17904 write (iout,*)"Converting virtual-bond gradient to CA/SC gradient"
17905 write (iout,*) "dC/dX gradient"
17907 write (iout,'(i5,3f10.5,5x,3f10.5)') i,(gcart(j,i),j=1,3),
17908 & (gxcart(j,i),j=1,3)
17913 gcart(j,i)=-gcart(j,i)+gcart(j,i-1)-gxcart(j,i)
17914 ! gcart_new(j,i)=-gcart(j,i)+gcart(j,i-1)-gxcart(j,i)
17916 ! write (iout,'(i5,3f10.5,5x,3f10.5,5x,3f10.5)') i,(gcart(j,i),j=1,3), &
17917 ! (gcart_new(j,i),j=1,3),(gxcart(j,i),j=1,3)
17919 ! Correction: dummy residues
17921 if (itype(i-1).eq.ntyp1 .and. itype(i).ne.ntyp1) then
17922 gcart(:,i)=gcart(:,i)+gcart(:,i-1)
17923 else if (itype(i-1).ne.ntyp1 .and. itype(i).eq.ntyp1) then
17924 gcart(:,i-1)=gcart(:,i-1)+gcart(:,i)
17927 c if (nnt.gt.1) then
17929 c gcart(j,nnt)=gcart(j,nnt)+gcart(j,1)
17932 c if (nct.lt.nres) then
17934 c! gcart_new(j,nct)=gcart_new(j,nct)+gcart_new(j,nres)
17935 c gcart(j,nct)=gcart(j,nct)+gcart(j,nres)
17939 write (iout,*) "CA/SC gradient"
17941 write (iout,'(i5,3f10.5,5x,3f10.5)') i,(gcart(j,i),j=1,3),
17942 & (gxcart(j,i),j=1,3)
17946 end subroutine grad_transform
17949 !-----------------------------------------------------------------------------
17950 subroutine zerograd
17951 ! implicit real(kind=8) (a-h,o-z)
17952 ! include 'DIMENSIONS'
17953 ! include 'COMMON.DERIV'
17954 ! include 'COMMON.CHAIN'
17955 ! include 'COMMON.VAR'
17956 ! include 'COMMON.MD'
17957 ! include 'COMMON.SCCOR'
17959 !el local variables
17960 integer :: i,j,intertyp,k
17961 ! Initialize Cartesian-coordinate gradient
17963 ! if (.not.allocated(gradx)) allocate(gradx(3,nres,2)) !(3,maxres,2)
17964 ! if (.not.allocated(gradc)) allocate(gradc(3,nres,2)) !(3,maxres,2)
17966 ! allocate(gvdwx(3,nres),gvdwc(3,nres),gelc(3,nres),gelc_long(3,nres))
17967 ! allocate(gvdwpp(3,nres),gvdwc_scpp(3,nres),gradx_scp(3,nres))
17968 ! allocate(gvdwc_scp(3,nres),ghpbx(3,nres),ghpbc(3,nres))
17969 ! allocate(gradcorr_long(3,nres))
17970 ! allocate(gradcorr5_long(3,nres),gradcorr6_long(3,nres))
17971 ! allocate(gcorr6_turn_long(3,nres))
17972 ! allocate(gradcorr5(3,nres),gradcorr6(3,nres)) !(3,maxres)
17974 ! if (.not.allocated(gradcorr)) allocate(gradcorr(3,nres)) !(3,maxres)
17976 ! allocate(gel_loc(3,nres),gel_loc_long(3,nres),gcorr3_turn(3,nres))
17977 ! allocate(gcorr4_turn(3,nres),gcorr6_turn(3,nres))
17979 ! if (.not.allocated(gradb)) allocate(gradb(3,nres)) !(3,maxres)
17980 ! if (.not.allocated(gradbx)) allocate(gradbx(3,nres)) !(3,maxres)
17982 ! allocate(gsccorc(3,nres),gsccorx(3,nres)) !(3,maxres)
17983 ! allocate(gscloc(3,nres)) !(3,maxres)
17984 ! if (.not.allocated(gsclocx)) allocate(gsclocx(3,nres)) !(3,maxres)
17988 ! common /deriv_scloc/
17989 ! allocate(dXX_C1tab(3,nres),dYY_C1tab(3,nres),dZZ_C1tab(3,nres))
17990 ! allocate(dXX_Ctab(3,nres),dYY_Ctab(3,nres),dZZ_Ctab(3,nres))
17991 ! allocate(dXX_XYZtab(3,nres),dYY_XYZtab(3,nres),dZZ_XYZtab(3,nres)) !(3,maxres)
17993 ! allocate(jgrad_start(nres),jgrad_end(nres)) !(maxres)
17997 ! gradc(j,i,icg)=0.0d0
17998 ! gradx(j,i,icg)=0.0d0
18000 ! allocate(gloc_sc(3,nres,10)) !(3,0:maxres2,10)maxres2=2*maxres
18001 !elwrite(iout,*) "icg",icg
18005 gradx_scp(j,i)=0.0D0
18007 gvdwc_scp(j,i)=0.0D0
18008 gvdwc_scpp(j,i)=0.0d0
18010 gelc_long(j,i)=0.0D0
18015 gel_loc_long(j,i)=0.0d0
18018 gcorr3_turn(j,i)=0.0d0
18019 gcorr4_turn(j,i)=0.0d0
18020 gradcorr(j,i)=0.0d0
18021 gradcorr_long(j,i)=0.0d0
18022 gradcorr5_long(j,i)=0.0d0
18023 gradcorr6_long(j,i)=0.0d0
18024 gcorr6_turn_long(j,i)=0.0d0
18025 gradcorr5(j,i)=0.0d0
18026 gradcorr6(j,i)=0.0d0
18027 gcorr6_turn(j,i)=0.0d0
18030 gradc(j,i,icg)=0.0d0
18031 gradx(j,i,icg)=0.0d0
18034 gliptran(j,i)=0.0d0
18035 gliptranx(j,i)=0.0d0
18036 gliptranc(j,i)=0.0d0
18037 gshieldx(j,i)=0.0d0
18038 gshieldc(j,i)=0.0d0
18039 gshieldc_loc(j,i)=0.0d0
18040 gshieldx_ec(j,i)=0.0d0
18041 gshieldc_ec(j,i)=0.0d0
18042 gshieldc_loc_ec(j,i)=0.0d0
18043 gshieldx_t3(j,i)=0.0d0
18044 gshieldc_t3(j,i)=0.0d0
18045 gshieldc_loc_t3(j,i)=0.0d0
18046 gshieldx_t4(j,i)=0.0d0
18047 gshieldc_t4(j,i)=0.0d0
18048 gshieldc_loc_t4(j,i)=0.0d0
18049 gshieldx_ll(j,i)=0.0d0
18050 gshieldc_ll(j,i)=0.0d0
18051 gshieldc_loc_ll(j,i)=0.0d0
18053 gg_tube_sc(j,i)=0.0d0
18055 gradb_nucl(j,i)=0.0d0
18056 gradbx_nucl(j,i)=0.0d0
18057 gvdwpp_nucl(j,i)=0.0d0
18061 gvdwpsb1(j,i)=0.0d0
18065 gradcorr_nucl(j,i)=0.0d0
18066 gradcorr3_nucl(j,i)=0.0d0
18067 gradxorr_nucl(j,i)=0.0d0
18068 gradxorr3_nucl(j,i)=0.0d0
18072 gradpepcat(j,i)=0.0d0
18073 gradpepcatx(j,i)=0.0d0
18074 gradcatcat(j,i)=0.0d0
18075 gvdwx_scbase(j,i)=0.0d0
18076 gvdwc_scbase(j,i)=0.0d0
18077 gvdwx_pepbase(j,i)=0.0d0
18078 gvdwc_pepbase(j,i)=0.0d0
18079 gvdwx_scpho(j,i)=0.0d0
18080 gvdwc_scpho(j,i)=0.0d0
18081 gvdwc_peppho(j,i)=0.0d0
18082 gradnuclcatx(j,i)=0.0d0
18083 gradnuclcat(j,i)=0.0d0
18084 gradlipbond(j,i)=0.0d0
18085 gradlipang(j,i)=0.0d0
18086 gradliplj(j,i)=0.0d0
18087 gradlipelec(j,i)=0.0d0
18088 gradcattranc(j,i)=0.0d0
18089 gradcattranx(j,i)=0.0d0
18090 gradcatangx(j,i)=0.0d0
18091 gradcatangc(j,i)=0.0d0
18092 duscdiff(j,i)=0.0d0
18093 duscdiffx(j,i)=0.0d0
18099 gloc_sc(intertyp,i,icg)=0.0d0
18108 grad_shield_side(k,j,i)=0.0d0
18109 grad_shield_loc(k,j,i)=0.0d0
18116 ! Initialize the gradient of local energy terms.
18118 ! allocate(gloc(4*nres,2)) !!(maxvar,2)(maxvar=6*maxres)
18119 ! if (.not.allocated(gel_loc_loc)) allocate(gel_loc_loc(nres)) !(maxvar)(maxvar=6*maxres)
18120 ! if (.not.allocated(gcorr_loc)) allocate(gcorr_loc(nres)) !(maxvar)(maxvar=6*maxres)
18121 ! allocate(g_corr5_loc(nres),g_corr6_loc(nres)) !(maxvar)(maxvar=6*maxres)
18122 ! allocate(gel_loc_turn3(nres))
18123 ! allocate(gel_loc_turn4(nres),gel_loc_turn6(nres)) !(maxvar)(maxvar=6*maxres)
18124 ! allocate(gsccor_loc(nres)) !(maxres)
18130 gel_loc_loc(i)=0.0d0
18132 g_corr5_loc(i)=0.0d0
18133 g_corr6_loc(i)=0.0d0
18134 gel_loc_turn3(i)=0.0d0
18135 gel_loc_turn4(i)=0.0d0
18136 gel_loc_turn6(i)=0.0d0
18137 gsccor_loc(i)=0.0d0
18139 ! initialize gcart and gxcart
18140 ! allocate(gcart(3,0:nres),gxcart(3,0:nres)) !(3,0:MAXRES)
18148 end subroutine zerograd
18149 !-----------------------------------------------------------------------------
18150 real(kind=8) function fdum()
18154 !-----------------------------------------------------------------------------
18156 !-----------------------------------------------------------------------------
18157 subroutine intcartderiv
18158 ! implicit real(kind=8) (a-h,o-z)
18159 ! include 'DIMENSIONS'
18163 ! include 'COMMON.SETUP'
18164 ! include 'COMMON.CHAIN'
18165 ! include 'COMMON.VAR'
18166 ! include 'COMMON.GEO'
18167 ! include 'COMMON.INTERACT'
18168 ! include 'COMMON.DERIV'
18169 ! include 'COMMON.IOUNITS'
18170 ! include 'COMMON.LOCAL'
18171 ! include 'COMMON.SCCOR'
18172 real(kind=8) :: pi4,pi34
18173 real(kind=8),dimension(3,2,nres) :: dcostheta ! (3,2,maxres)
18174 real(kind=8),dimension(3,3,nres) :: dcosphi,dsinphi,dcosalpha,&
18175 dcosomega,dsinomega !(3,3,maxres)
18176 real(kind=8),dimension(3) :: vo1,vo2,vo3,dummy,vp1,vp2,vp3,vpp1,n
18179 real(kind=8) :: cost,sint,cost1,sint1,cost2,sint2,sing,cosg,scalp,&
18180 fac0,fac1,fac2,fac3,fac4,fac5,fac6,ctgt,ctgt1,cosg_inv,&
18181 fac7,fac8,fac9,scala1,scala2,cosa,sina,sino,fac15,fac16,&
18182 fac17,coso_inv,fac10,fac11,fac12,fac13,fac14,IERROR
18186 !el from module energy-------------
18187 !el allocate(dcostau(3,3,3,itau_start:itau_end)) !(3,3,3,maxres2)maxres2=2*maxres
18188 !el allocate(dsintau(3,3,3,itau_start:itau_end))
18189 !el allocate(dtauangle(3,3,3,itau_start:itau_end))
18191 !el allocate(dcostau(3,3,3,0:nres2)) !(3,3,3,maxres2)maxres2=2*maxres
18192 !el allocate(dsintau(3,3,3,0:nres2))
18193 !el allocate(dtauangle(3,3,3,0:nres2))
18194 !el allocate(domicron(3,2,2,0:nres2))
18195 !el allocate(dcosomicron(3,2,2,0:nres2))
18199 #if defined(MPI) && defined(PARINTDER)
18200 if (nfgtasks.gt.1 .and. me.eq.king) &
18201 call MPI_Bcast(8,1,MPI_INTEGER,king,FG_COMM,IERROR)
18206 ! allocate(dtheta(3,2,nres)) !(3,2,maxres)
18207 ! allocate(dphi(3,3,nres),dalpha(3,3,nres),domega(3,3,nres)) !(3,3,maxres)
18209 ! write (iout,*) "iphi1_start",iphi1_start," iphi1_end",iphi1_end
18212 dtheta(j,1,i)=0.0d0
18213 dtheta(j,2,i)=0.0d0
18217 dcosomicron(j,1,1,i)=0.0d0
18218 dcosomicron(j,1,2,i)=0.0d0
18219 dcosomicron(j,2,1,i)=0.0d0
18220 dcosomicron(j,2,2,i)=0.0d0
18223 ! Derivatives of theta's
18224 #if defined(MPI) && defined(PARINTDER)
18225 ! We need dtheta(:,:,i-1) to compute dphi(:,:,i)
18226 do i=max0(ithet_start-1,3),ithet_end
18230 cost=dcos(theta(i))
18231 sint=sqrt(1-cost*cost)
18233 dcostheta(j,1,i)=-(dc_norm(j,i-1)+cost*dc_norm(j,i-2))/&
18235 if (((itype(i-1,1).ne.ntyp1).and.(sint.ne.0.0d0))) &
18236 dtheta(j,1,i)=-dcostheta(j,1,i)/sint
18237 dcostheta(j,2,i)=-(dc_norm(j,i-2)+cost*dc_norm(j,i-1))/&
18239 if ((itype(i-1,1).ne.ntyp1).and.(sint.ne.0.0d0))&
18240 dtheta(j,2,i)=-dcostheta(j,2,i)/sint
18243 #if defined(MPI) && defined(PARINTDER)
18244 ! We need dtheta(:,:,i-1) to compute dphi(:,:,i)
18245 do i=max0(ithet_start-1,3),ithet_end
18249 if ((itype(i-1,1).ne.10).and.(itype(i-1,1).ne.ntyp1).and.molnum(i).ge.4) then
18250 cost1=dcos(omicron(1,i))
18251 sint1=sqrt(1-cost1*cost1)
18252 cost2=dcos(omicron(2,i))
18253 sint2=sqrt(1-cost2*cost2)
18255 !C Calculate derivative over first omicron (Cai-2,Cai-1,SCi-1)
18256 dcosomicron(j,1,1,i)=-(dc_norm(j,i-1+nres)+ &
18257 cost1*dc_norm(j,i-2))/ &
18259 domicron(j,1,1,i)=-1.0/sint1*dcosomicron(j,1,1,i)
18260 dcosomicron(j,1,2,i)=-(dc_norm(j,i-2) &
18261 +cost1*(dc_norm(j,i-1+nres)))/ &
18263 domicron(j,1,2,i)=-1.0/sint1*dcosomicron(j,1,2,i)
18264 !C Calculate derivative over second omicron Sci-1,Cai-1 Cai
18265 !C Looks messy but better than if in loop
18266 dcosomicron(j,2,1,i)=-(-dc_norm(j,i-1+nres) &
18267 +cost2*dc_norm(j,i-1))/ &
18269 domicron(j,2,1,i)=-1.0/sint2*dcosomicron(j,2,1,i)
18270 dcosomicron(j,2,2,i)=-(dc_norm(j,i-1) &
18271 +cost2*(-dc_norm(j,i-1+nres)))/ &
18273 ! write(iout,*) "vbld", i,itype(i,1),vbld(i-1+nres)
18274 domicron(j,2,2,i)=-1.0/sint2*dcosomicron(j,2,2,i)
18278 !elwrite(iout,*) "after vbld write"
18279 ! Derivatives of phi:
18280 ! If phi is 0 or 180 degrees, then the formulas
18281 ! have to be derived by power series expansion of the
18282 ! conventional formulas around 0 and 180.
18284 do i=iphi1_start,iphi1_end
18288 ! if (itype(i-1,1).eq.21 .or. itype(i-2,1).eq.21 ) cycle
18289 ! the conventional case
18290 sint=dsin(theta(i))
18291 sint1=dsin(theta(i-1))
18293 cost=dcos(theta(i))
18294 cost1=dcos(theta(i-1))
18296 scalp=scalar(dc_norm(1,i-3),dc_norm(1,i-1))
18297 if ((sint*sint1).eq.0.0d0) then
18300 fac0=1.0d0/(sint1*sint)
18304 if (sint1.ne.0.0d0) then
18305 fac3=cosg*cost1/(sint1*sint1)
18309 if (sint.ne.0.0d0) then
18310 fac4=cosg*cost/(sint*sint)
18314 ! Obtaining the gamma derivatives from sine derivative
18315 if (phi(i).gt.-pi4.and.phi(i).le.pi4.or. &
18316 phi(i).gt.pi34.and.phi(i).le.pi.or. &
18317 phi(i).ge.-pi.and.phi(i).le.-pi34) then
18318 call vecpr(dc_norm(1,i-1),dc_norm(1,i-2),vp1)
18319 call vecpr(dc_norm(1,i-3),dc_norm(1,i-1),vp2)
18320 call vecpr(dc_norm(1,i-3),dc_norm(1,i-2),vp3)
18322 if (sint.ne.0.0d0) then
18327 if (sint1.ne.0.0d0) then
18332 cosg_inv=1.0d0/cosg
18333 if (itype(i-1,1).ne.ntyp1 .and. itype(i-2,1).ne.ntyp1) then
18334 dsinphi(j,1,i)=-sing*ctgt1*dtheta(j,1,i-1) &
18335 -(fac0*vp1(j)+sing*dc_norm(j,i-3))*vbld_inv(i-2)
18336 dphi(j,1,i)=cosg_inv*dsinphi(j,1,i)
18338 -sing*(ctgt1*dtheta(j,2,i-1)+ctgt*dtheta(j,1,i)) &
18339 -(fac0*vp2(j)+sing*dc_norm(j,i-2))*vbld_inv(i-1)
18340 dphi(j,2,i)=cosg_inv*dsinphi(j,2,i)
18341 dsinphi(j,3,i)=-sing*ctgt*dtheta(j,2,i) &
18342 +(fac0*vp3(j)-sing*dc_norm(j,i-1))*vbld_inv(i)
18343 ! & +(fac0*vp3(j)-sing*dc_norm(j,i-1))*vbld_inv(i-1)
18344 dphi(j,3,i)=cosg_inv*dsinphi(j,3,i)
18346 ! write(iout,*) "just after,close to pi",dphi(j,3,i),&
18347 ! sing*(ctgt1*dtheta(j,2,i-1)),ctgt*dtheta(j,1,i), &
18348 ! (fac0*vp2(j)+sing*dc_norm(j,i-2)),vbld_inv(i-1)
18350 ! Bug fixed 3/24/05 (AL)
18352 ! Obtaining the gamma derivatives from cosine derivative
18355 if (itype(i-1,1).ne.ntyp1 .and. itype(i-2,1).ne.ntyp1) then
18356 dcosphi(j,1,i)=fac1*dcostheta(j,1,i-1)+fac3* &
18357 dcostheta(j,1,i-1)-fac0*(dc_norm(j,i-1)-scalp* &
18358 dc_norm(j,i-3))/vbld(i-2)
18359 dphi(j,1,i)=-1.0/sing*dcosphi(j,1,i)
18360 dcosphi(j,2,i)=fac1*dcostheta(j,2,i-1)+fac2* &
18361 dcostheta(j,1,i)+fac3*dcostheta(j,2,i-1)+fac4* &
18363 dphi(j,2,i)=-1.0/sing*dcosphi(j,2,i)
18364 dcosphi(j,3,i)=fac2*dcostheta(j,2,i)+fac4* &
18365 dcostheta(j,2,i)-fac0*(dc_norm(j,i-3)-scalp* &
18366 dc_norm(j,i-1))/vbld(i)
18367 dphi(j,3,i)=-1.0/sing*dcosphi(j,3,i)
18370 write(iout,*) "just after",dphi(j,3,i),sing,dcosphi(j,3,i)
18377 !alculate derivative of Tauangle
18379 do i=itau_start,itau_end
18382 !elwrite(iout,*) " vecpr",i,nres
18384 if ((itype(i-2,1).eq.ntyp1).or.(itype(i-2,1).eq.10)) cycle
18385 ! if ((itype(i-2,1).eq.ntyp1).or.(itype(i-2,1).eq.10).or.
18386 ! & (itype(i-1,1).eq.ntyp1).or.(itype(i,1).eq.ntyp1)) cycle
18387 !c dtauangle(j,intertyp,dervityp,residue number)
18388 !c INTERTYP=1 SC...Ca...Ca..Ca
18389 ! the conventional case
18390 sint=dsin(theta(i))
18391 sint1=dsin(omicron(2,i-1))
18392 sing=dsin(tauangle(1,i))
18393 cost=dcos(theta(i))
18394 cost1=dcos(omicron(2,i-1))
18395 cosg=dcos(tauangle(1,i))
18396 !elwrite(iout,*) " vecpr5",i,nres
18398 !elwrite(iout,*) " vecpreee",i,nres,j,i-2+nres
18399 !elwrite(iout,*) " vecpr5",dc_norm2(1,1)
18400 dc_norm2(j,i-2+nres)=-dc_norm(j,i-2+nres)
18401 ! write(iout,*) dc_norm2(j,i-2+nres),"dcnorm"
18403 scalp=scalar(dc_norm2(1,i-2+nres),dc_norm(1,i-1))
18404 ! write(iout,*) "faki",fac0,fac1,fac2,fac3,fac
18405 if ((sint*sint1).eq.0.0d0) then
18408 fac0=1.0d0/(sint1*sint)
18412 if (sint1.ne.0.0d0) then
18413 fac3=cosg*cost1/(sint1*sint1)
18417 if (sint.ne.0.0d0) then
18418 fac4=cosg*cost/(sint*sint)
18423 ! Obtaining the gamma derivatives from sine derivative
18424 if (tauangle(1,i).gt.-pi4.and.tauangle(1,i).le.pi4.or. &
18425 tauangle(1,i).gt.pi34.and.tauangle(1,i).le.pi.or. &
18426 tauangle(1,i).gt.-pi.and.tauangle(1,i).le.-pi34) then
18427 call vecpr(dc_norm(1,i-1),dc_norm(1,i-2),vp1)
18428 call vecpr(dc_norm2(1,i-2+nres),dc_norm(1,i-1),vp2)
18429 call vecpr(dc_norm2(1,i-2+nres),dc_norm(1,i-2),vp3)
18433 cosg_inv=1.0d0/cosg
18434 dsintau(j,1,1,i)=-sing*ctgt1*domicron(j,2,2,i-1) &
18435 -(fac0*vp1(j)+sing*(dc_norm2(j,i-2+nres))) &
18436 *vbld_inv(i-2+nres)
18437 dtauangle(j,1,1,i)=cosg_inv*dsintau(j,1,1,i)
18438 dsintau(j,1,2,i)= &
18439 -sing*(ctgt1*domicron(j,2,1,i-1)+ctgt*dtheta(j,1,i)) &
18440 -(fac0*vp2(j)+sing*dc_norm(j,i-2))*vbld_inv(i-1)
18441 ! write(iout,*) "dsintau", dsintau(j,1,2,i)
18442 dtauangle(j,1,2,i)=cosg_inv*dsintau(j,1,2,i)
18443 ! Bug fixed 3/24/05 (AL)
18444 dsintau(j,1,3,i)=-sing*ctgt*dtheta(j,2,i) &
18445 +(fac0*vp3(j)-sing*dc_norm(j,i-1))*vbld_inv(i)
18446 ! & +(fac0*vp3(j)-sing*dc_norm(j,i-1))*vbld_inv(i-1)
18447 dtauangle(j,1,3,i)=cosg_inv*dsintau(j,1,3,i)
18449 ! Obtaining the gamma derivatives from cosine derivative
18452 dcostau(j,1,1,i)=fac1*dcosomicron(j,2,2,i-1)+fac3* &
18453 dcosomicron(j,2,2,i-1)-fac0*(dc_norm(j,i-1)-scalp* &
18454 (dc_norm2(j,i-2+nres)))/vbld(i-2+nres)
18455 dtauangle(j,1,1,i)=-1/sing*dcostau(j,1,1,i)
18456 dcostau(j,1,2,i)=fac1*dcosomicron(j,2,1,i-1)+fac2* &
18457 dcostheta(j,1,i)+fac3*dcosomicron(j,2,1,i-1)+fac4* &
18459 dtauangle(j,1,2,i)=-1/sing*dcostau(j,1,2,i)
18460 dcostau(j,1,3,i)=fac2*dcostheta(j,2,i)+fac4* &
18461 dcostheta(j,2,i)-fac0*(-dc_norm(j,i-2+nres)-scalp* &
18462 dc_norm(j,i-1))/vbld(i)
18463 dtauangle(j,1,3,i)=-1/sing*dcostau(j,1,3,i)
18464 ! write (iout,*) "else",i
18468 ! write(iout,*) "tu",i,k,(dtauangle(j,1,k,i),j=1,3)
18471 !C Second case Ca...Ca...Ca...SC
18473 do i=itau_start,itau_end
18477 if ((itype(i-1,1).eq.ntyp1).or.(itype(i-1,1).eq.10).or. &
18478 (itype(i-2,1).eq.ntyp1).or.(itype(i-3,1).eq.ntyp1)) cycle
18479 ! the conventional case
18480 sint=dsin(omicron(1,i))
18481 sint1=dsin(theta(i-1))
18482 sing=dsin(tauangle(2,i))
18483 cost=dcos(omicron(1,i))
18484 cost1=dcos(theta(i-1))
18485 cosg=dcos(tauangle(2,i))
18487 ! dc_norm2(j,i-1+nres)=-dc_norm(j,i-1+nres)
18489 scalp=scalar(dc_norm(1,i-3),dc_norm(1,i-1+nres))
18490 if ((sint*sint1).eq.0.0d0) then
18493 fac0=1.0d0/(sint1*sint)
18497 if (sint1.ne.0.0d0) then
18498 fac3=cosg*cost1/(sint1*sint1)
18502 if (sint.ne.0.0d0) then
18503 fac4=cosg*cost/(sint*sint)
18507 ! Obtaining the gamma derivatives from sine derivative
18508 if (tauangle(2,i).gt.-pi4.and.tauangle(2,i).le.pi4.or. &
18509 tauangle(2,i).gt.pi34.and.tauangle(2,i).le.pi.or. &
18510 tauangle(2,i).gt.-pi.and.tauangle(2,i).le.-pi34) then
18511 call vecpr(dc_norm2(1,i-1+nres),dc_norm(1,i-2),vp1)
18512 call vecpr(dc_norm(1,i-3),dc_norm(1,i-1+nres),vp2)
18513 call vecpr(dc_norm(1,i-3),dc_norm(1,i-2),vp3)
18517 cosg_inv=1.0d0/cosg
18518 dsintau(j,2,1,i)=-sing*ctgt1*dtheta(j,1,i-1) &
18519 +(fac0*vp1(j)-sing*dc_norm(j,i-3))*vbld_inv(i-2)
18520 ! write(iout,*) i,j,dsintau(j,2,1,i),sing*ctgt1*dtheta(j,1,i-1),
18521 ! &fac0*vp1(j),sing*dc_norm(j,i-3),vbld_inv(i-2),"dsintau(2,1)"
18522 dtauangle(j,2,1,i)=cosg_inv*dsintau(j,2,1,i)
18523 dsintau(j,2,2,i)= &
18524 -sing*(ctgt1*dtheta(j,2,i-1)+ctgt*domicron(j,1,1,i)) &
18525 -(fac0*vp2(j)+sing*dc_norm(j,i-2))*vbld_inv(i-1)
18526 ! write(iout,*) "sprawdzenie",i,j,sing*ctgt1*dtheta(j,2,i-1),
18527 ! & sing*ctgt*domicron(j,1,2,i),
18528 ! & (fac0*vp2(j)+sing*dc_norm(j,i-2))*vbld_inv(i-1)
18529 dtauangle(j,2,2,i)=cosg_inv*dsintau(j,2,2,i)
18530 ! Bug fixed 3/24/05 (AL)
18531 dsintau(j,2,3,i)=-sing*ctgt*domicron(j,1,2,i) &
18532 +(fac0*vp3(j)-sing*dc_norm(j,i-1+nres))*vbld_inv(i-1+nres)
18533 ! & +(fac0*vp3(j)-sing*dc_norm(j,i-1))*vbld_inv(i-1)
18534 dtauangle(j,2,3,i)=cosg_inv*dsintau(j,2,3,i)
18536 ! Obtaining the gamma derivatives from cosine derivative
18539 dcostau(j,2,1,i)=fac1*dcostheta(j,1,i-1)+fac3* &
18540 dcostheta(j,1,i-1)-fac0*(dc_norm(j,i-1+nres)-scalp* &
18541 dc_norm(j,i-3))/vbld(i-2)
18542 dtauangle(j,2,1,i)=-1/sing*dcostau(j,2,1,i)
18543 dcostau(j,2,2,i)=fac1*dcostheta(j,2,i-1)+fac2* &
18544 dcosomicron(j,1,1,i)+fac3*dcostheta(j,2,i-1)+fac4* &
18545 dcosomicron(j,1,1,i)
18546 dtauangle(j,2,2,i)=-1/sing*dcostau(j,2,2,i)
18547 dcostau(j,2,3,i)=fac2*dcosomicron(j,1,2,i)+fac4* &
18548 dcosomicron(j,1,2,i)-fac0*(dc_norm(j,i-3)-scalp* &
18549 dc_norm(j,i-1+nres))/vbld(i-1+nres)
18550 dtauangle(j,2,3,i)=-1/sing*dcostau(j,2,3,i)
18551 ! write(iout,*) i,j,"else", dtauangle(j,2,3,i)
18556 !CC third case SC...Ca...Ca...SC
18559 do i=itau_start,itau_end
18563 ! the conventional case
18564 if ((itype(i-1,1).eq.ntyp1).or.(itype(i-1,1).eq.10).or. &
18565 (itype(i-2,1).eq.ntyp1).or.(itype(i-2,1).eq.10)) cycle
18566 sint=dsin(omicron(1,i))
18567 sint1=dsin(omicron(2,i-1))
18568 sing=dsin(tauangle(3,i))
18569 cost=dcos(omicron(1,i))
18570 cost1=dcos(omicron(2,i-1))
18571 cosg=dcos(tauangle(3,i))
18573 dc_norm2(j,i-2+nres)=-dc_norm(j,i-2+nres)
18574 ! dc_norm2(j,i-1+nres)=-dc_norm(j,i-1+nres)
18576 scalp=scalar(dc_norm2(1,i-2+nres),dc_norm(1,i-1+nres))
18577 if ((sint*sint1).eq.0.0d0) then
18580 fac0=1.0d0/(sint1*sint)
18584 if (sint1.ne.0.0d0) then
18585 fac3=cosg*cost1/(sint1*sint1)
18589 if (sint.ne.0.0d0) then
18590 fac4=cosg*cost/(sint*sint)
18594 ! Obtaining the gamma derivatives from sine derivative
18595 if (tauangle(3,i).gt.-pi4.and.tauangle(3,i).le.pi4.or. &
18596 tauangle(3,i).gt.pi34.and.tauangle(3,i).le.pi.or. &
18597 tauangle(3,i).gt.-pi.and.tauangle(3,i).le.-pi34) then
18598 call vecpr(dc_norm(1,i-1+nres),dc_norm(1,i-2),vp1)
18599 call vecpr(dc_norm2(1,i-2+nres),dc_norm(1,i-1+nres),vp2)
18600 call vecpr(dc_norm2(1,i-2+nres),dc_norm(1,i-2),vp3)
18604 cosg_inv=1.0d0/cosg
18605 dsintau(j,3,1,i)=-sing*ctgt1*domicron(j,2,2,i-1) &
18606 -(fac0*vp1(j)-sing*dc_norm(j,i-2+nres)) &
18607 *vbld_inv(i-2+nres)
18608 dtauangle(j,3,1,i)=cosg_inv*dsintau(j,3,1,i)
18609 dsintau(j,3,2,i)= &
18610 -sing*(ctgt1*domicron(j,2,1,i-1)+ctgt*domicron(j,1,1,i)) &
18611 -(fac0*vp2(j)+sing*dc_norm(j,i-2))*vbld_inv(i-1)
18612 dtauangle(j,3,2,i)=cosg_inv*dsintau(j,3,2,i)
18613 ! Bug fixed 3/24/05 (AL)
18614 dsintau(j,3,3,i)=-sing*ctgt*domicron(j,1,2,i) &
18615 +(fac0*vp3(j)-sing*dc_norm(j,i-1+nres)) &
18616 *vbld_inv(i-1+nres)
18617 ! & +(fac0*vp3(j)-sing*dc_norm(j,i-1))*vbld_inv(i-1)
18618 dtauangle(j,3,3,i)=cosg_inv*dsintau(j,3,3,i)
18620 ! Obtaining the gamma derivatives from cosine derivative
18623 dcostau(j,3,1,i)=fac1*dcosomicron(j,2,2,i-1)+fac3* &
18624 dcosomicron(j,2,2,i-1)-fac0*(dc_norm(j,i-1+nres)-scalp* &
18625 dc_norm2(j,i-2+nres))/vbld(i-2+nres)
18626 dtauangle(j,3,1,i)=-1/sing*dcostau(j,3,1,i)
18627 dcostau(j,3,2,i)=fac1*dcosomicron(j,2,1,i-1)+fac2* &
18628 dcosomicron(j,1,1,i)+fac3*dcosomicron(j,2,1,i-1)+fac4* &
18629 dcosomicron(j,1,1,i)
18630 dtauangle(j,3,2,i)=-1/sing*dcostau(j,3,2,i)
18631 dcostau(j,3,3,i)=fac2*dcosomicron(j,1,2,i)+fac4* &
18632 dcosomicron(j,1,2,i)-fac0*(dc_norm2(j,i-2+nres)-scalp* &
18633 dc_norm(j,i-1+nres))/vbld(i-1+nres)
18634 dtauangle(j,3,3,i)=-1/sing*dcostau(j,3,3,i)
18635 ! write(iout,*) "else",i
18641 ! Derivatives of side-chain angles alpha and omega
18642 #if defined(MPI) && defined(PARINTDER)
18643 do i=ibond_start,ibond_end
18647 if(itype(i,1).ne.10 .and. itype(i,1).ne.ntyp1) then
18648 fac5=1.0d0/dsqrt(2*(1+dcos(theta(i+1))))
18651 fac8=fac5/vbld(i+1)
18652 fac9=fac5/vbld(i+nres)
18653 scala1=scalar(dc_norm(1,i-1),dc_norm(1,i+nres))
18654 scala2=scalar(dc_norm(1,i),dc_norm(1,i+nres))
18655 cosa=dsqrt(0.5d0/(1.0d0+dcos(theta(i+1))))* &
18656 (scalar(dC_norm(1,i),dC_norm(1,i+nres)) &
18657 -scalar(dC_norm(1,i-1),dC_norm(1,i+nres)))
18658 sina=sqrt(1-cosa*cosa)
18660 ! write (iout,*) "i",i," cosa",cosa," sina",sina," sino",sino
18662 dcosalpha(j,1,i)=fac6*(scala1*dc_norm(j,i-1)- &
18663 dc_norm(j,i+nres))-cosa*fac7*dcostheta(j,1,i+1)
18664 dalpha(j,1,i)=-1/sina*dcosalpha(j,1,i)
18665 dcosalpha(j,2,i)=fac8*(dc_norm(j,i+nres)- &
18666 scala2*dc_norm(j,i))-cosa*fac7*dcostheta(j,2,i+1)
18667 dalpha(j,2,i)=-1/sina*dcosalpha(j,2,i)
18668 dcosalpha(j,3,i)=(fac9*(dc_norm(j,i)- &
18669 dc_norm(j,i-1))-(cosa*dc_norm(j,i+nres))/ &
18671 dalpha(j,3,i)=-1/sina*dcosalpha(j,3,i)
18673 ! obtaining the derivatives of omega from sines
18674 if(omeg(i).gt.-pi4.and.omeg(i).le.pi4.or. &
18675 omeg(i).gt.pi34.and.omeg(i).le.pi.or. &
18676 omeg(i).gt.-pi.and.omeg(i).le.-pi34) then
18677 fac15=dcos(theta(i+1))/(dsin(theta(i+1))* &
18679 fac16=dcos(alph(i))/(dsin(alph(i))*dsin(alph(i)))
18680 fac17=1.0d0/(dsin(theta(i+1))*dsin(alph(i)))
18681 call vecpr(dc_norm(1,i+nres),dc_norm(1,i),vo1)
18682 call vecpr(dc_norm(1,i+nres),dc_norm(1,i-1),vo2)
18683 call vecpr(dc_norm(1,i),dc_norm(1,i-1),vo3)
18684 coso_inv=1.0d0/dcos(omeg(i))
18686 dsinomega(j,1,i)=sino*(fac15*dcostheta(j,1,i+1) &
18687 +fac16*dcosalpha(j,1,i))-fac17/vbld(i)*vo1(j)- &
18688 (sino*dc_norm(j,i-1))/vbld(i)
18689 domega(j,1,i)=coso_inv*dsinomega(j,1,i)
18690 dsinomega(j,2,i)=sino*(fac15*dcostheta(j,2,i+1) &
18691 +fac16*dcosalpha(j,2,i))+fac17/vbld(i+1)*vo2(j) &
18692 -sino*dc_norm(j,i)/vbld(i+1)
18693 domega(j,2,i)=coso_inv*dsinomega(j,2,i)
18694 dsinomega(j,3,i)=sino*fac16*dcosalpha(j,3,i)- &
18695 fac17/vbld(i+nres)*vo3(j)-sino*dc_norm(j,i+nres)/ &
18697 domega(j,3,i)=coso_inv*dsinomega(j,3,i)
18700 ! obtaining the derivatives of omega from cosines
18701 fac10=sqrt(0.5d0*(1-dcos(theta(i+1))))
18702 fac11=sqrt(0.5d0*(1+dcos(theta(i+1))))
18707 dcosomega(j,1,i)=(-(0.25d0*cosa/fac11* &
18708 dcostheta(j,1,i+1)+fac11*dcosalpha(j,1,i))*fac12+ &
18709 (0.25d0/fac10*sina*dcostheta(j,1,i+1)+cosa/sina* &
18710 fac10*dcosalpha(j,1,i))*(scala2-fac11*cosa))/fac13
18711 domega(j,1,i)=-1/sino*dcosomega(j,1,i)
18712 dcosomega(j,2,i)=(((dc_norm(j,i+nres)-scala2* &
18713 dc_norm(j,i))/vbld(i+1)-0.25d0*cosa/fac11* &
18714 dcostheta(j,2,i+1)-fac11*dcosalpha(j,2,i))*fac12+ &
18715 (scala2-fac11*cosa)*(0.25d0*sina/fac10* &
18716 dcostheta(j,2,i+1)+fac10*cosa/sina*dcosalpha(j,2,i)))/fac13
18717 domega(j,2,i)=-1/sino*dcosomega(j,2,i)
18718 dcosomega(j,3,i)=1/fac10*((1/vbld(i+nres)*(dc_norm(j,i)- &
18719 scala2*dc_norm(j,i+nres))-fac11*dcosalpha(j,3,i))*sina+ &
18720 (scala2-fac11*cosa)*(cosa/sina*dcosalpha(j,3,i)))/fac14
18721 domega(j,3,i)=-1/sino*dcosomega(j,3,i)
18727 dalpha(k,j,i)=0.0d0
18728 domega(k,j,i)=0.0d0
18734 #if defined(MPI) && defined(PARINTDER)
18735 if (nfgtasks.gt.1) then
18737 !d write (iout,*) "Gather dtheta"
18738 !d call flush(iout)
18739 write (iout,*) "dtheta before gather"
18741 write (iout,'(i3,3(3f8.5,3x))') i,((dtheta(j,k,i),k=1,3),j=1,2)
18744 call MPI_Gatherv(dtheta(1,1,ithet_start),ithet_count(fg_rank),&
18745 MPI_THET,dtheta(1,1,1),ithet_count(0),ithet_displ(0),MPI_THET,&
18746 king,FG_COMM,IERROR)
18749 !d write (iout,*) "Gather dphi"
18750 !d call flush(iout)
18751 write (iout,*) "dphi before gather"
18753 write (iout,'(i3,3(3f8.5,3x))') i,((dphi(j,k,i),k=1,3),j=1,3)
18757 call MPI_Gatherv(dphi(1,1,iphi1_start),iphi1_count(fg_rank),&
18758 MPI_GAM,dphi(1,1,1),iphi1_count(0),iphi1_displ(0),MPI_GAM,&
18759 king,FG_COMM,IERROR)
18760 !d write (iout,*) "Gather dalpha"
18761 !d call flush(iout)
18763 call MPI_Gatherv(dalpha(1,1,ibond_start),ibond_count(fg_rank),&
18764 MPI_GAM,dalpha(1,1,1),ibond_count(0),ibond_displ(0),MPI_GAM,&
18765 king,FG_COMM,IERROR)
18766 !d write (iout,*) "Gather domega"
18767 !d call flush(iout)
18768 call MPI_Gatherv(domega(1,1,ibond_start),ibond_count(fg_rank),&
18769 MPI_GAM,domega(1,1,1),ibond_count(0),ibond_displ(0),MPI_GAM,&
18770 king,FG_COMM,IERROR)
18776 write (iout,*) "dtheta after gather"
18778 write (iout,'(i3,3(3f8.5,3x))') i,((dtheta(j,k,i),j=1,3),k=1,2)
18780 write (iout,*) "dphi after gather"
18782 write (iout,'(i3,3(3f8.5,3x))') i,((dphi(j,k,i),j=1,3),k=1,3)
18784 write (iout,*) "dalpha after gather"
18786 write (iout,'(i3,3(3f8.5,3x))') i,((dalpha(j,k,i),j=1,3),k=1,3)
18788 write (iout,*) "domega after gather"
18790 write (iout,'(i3,3(3f8.5,3x))') i,((domega(j,k,i),j=1,3),k=1,3)
18795 end subroutine intcartderiv
18796 !-----------------------------------------------------------------------------
18797 subroutine checkintcartgrad
18798 ! implicit real(kind=8) (a-h,o-z)
18799 ! include 'DIMENSIONS'
18803 ! include 'COMMON.CHAIN'
18804 ! include 'COMMON.VAR'
18805 ! include 'COMMON.GEO'
18806 ! include 'COMMON.INTERACT'
18807 ! include 'COMMON.DERIV'
18808 ! include 'COMMON.IOUNITS'
18809 ! include 'COMMON.SETUP'
18810 real(kind=8),dimension(3,2,nres) :: dthetanum !(3,2,maxres)
18811 real(kind=8),dimension(3,3,nres) :: dphinum,dalphanum,domeganum !(3,3,maxres)
18812 real(kind=8),dimension(nres) :: theta_s,phi_s,alph_s,omeg_s !(maxres)
18813 real(kind=8),dimension(3) :: dc_norm_s
18814 real(kind=8) :: aincr=1.0d-5
18816 real(kind=8) :: dcji
18819 theta_s(i)=theta(i)
18823 ! Check theta gradient
18825 "Analytical (upper) and numerical (lower) gradient of theta"
18830 dc(j,i-2)=dcji+aincr
18831 call chainbuild_cart
18832 call int_from_cart1(.false.)
18833 dthetanum(j,1,i)=(theta(i)-theta_s(i))/aincr
18836 dc(j,i-1)=dc(j,i-1)+aincr
18837 call chainbuild_cart
18838 dthetanum(j,2,i)=(theta(i)-theta_s(i))/aincr
18841 !el write (iout,'(i5,3f10.5,5x,3f10.5)') i,(dtheta(j,1,i),j=1,3),&
18842 !el (dtheta(j,2,i),j=1,3)
18843 !el write (iout,'(5x,3f10.5,5x,3f10.5)') (dthetanum(j,1,i),j=1,3),&
18844 !el (dthetanum(j,2,i),j=1,3)
18845 !el write (iout,'(5x,3f10.5,5x,3f10.5)') &
18846 !el (dthetanum(j,1,i)/dtheta(j,1,i),j=1,3),&
18847 !el (dthetanum(j,2,i)/dtheta(j,2,i),j=1,3)
18850 ! Check gamma gradient
18852 "Analytical (upper) and numerical (lower) gradient of gamma"
18856 dc(j,i-3)=dcji+aincr
18857 call chainbuild_cart
18858 dphinum(j,1,i)=(phi(i)-phi_s(i))/aincr
18861 dc(j,i-2)=dcji+aincr
18862 call chainbuild_cart
18863 dphinum(j,2,i)=(phi(i)-phi_s(i))/aincr
18866 dc(j,i-1)=dc(j,i-1)+aincr
18867 call chainbuild_cart
18868 dphinum(j,3,i)=(phi(i)-phi_s(i))/aincr
18871 !el write (iout,'(i5,3(3f10.5,5x))') i,(dphi(j,1,i),j=1,3),&
18872 !el (dphi(j,2,i),j=1,3),(dphi(j,3,i),j=1,3)
18873 !el write (iout,'(5x,3(3f10.5,5x))') (dphinum(j,1,i),j=1,3),&
18874 !el (dphinum(j,2,i),j=1,3),(dphinum(j,3,i),j=1,3)
18875 !el write (iout,'(5x,3(3f10.5,5x))') &
18876 !el (dphinum(j,1,i)/dphi(j,1,i),j=1,3),&
18877 !el (dphinum(j,2,i)/dphi(j,2,i),j=1,3),&
18878 !el (dphinum(j,3,i)/dphi(j,3,i),j=1,3)
18881 ! Check alpha gradient
18883 "Analytical (upper) and numerical (lower) gradient of alpha"
18885 if(itype(i,1).ne.10) then
18888 dc(j,i-1)=dcji+aincr
18889 call chainbuild_cart
18890 dalphanum(j,1,i)=(alph(i)-alph_s(i)) &
18895 call chainbuild_cart
18896 dalphanum(j,2,i)=(alph(i)-alph_s(i)) &
18900 dc(j,i+nres)=dc(j,i+nres)+aincr
18901 call chainbuild_cart
18902 dalphanum(j,3,i)=(alph(i)-alph_s(i)) &
18907 !el write (iout,'(i5,3(3f10.5,5x))') i,(dalpha(j,1,i),j=1,3),&
18908 !el (dalpha(j,2,i),j=1,3),(dalpha(j,3,i),j=1,3)
18909 !el write (iout,'(5x,3(3f10.5,5x))') (dalphanum(j,1,i),j=1,3),&
18910 !el (dalphanum(j,2,i),j=1,3),(dalphanum(j,3,i),j=1,3)
18911 !el write (iout,'(5x,3(3f10.5,5x))') &
18912 !el (dalphanum(j,1,i)/dalpha(j,1,i),j=1,3),&
18913 !el (dalphanum(j,2,i)/dalpha(j,2,i),j=1,3),&
18914 !el (dalphanum(j,3,i)/dalpha(j,3,i),j=1,3)
18917 ! Check omega gradient
18919 "Analytical (upper) and numerical (lower) gradient of omega"
18921 if(itype(i,1).ne.10) then
18924 dc(j,i-1)=dcji+aincr
18925 call chainbuild_cart
18926 domeganum(j,1,i)=(omeg(i)-omeg_s(i)) &
18931 call chainbuild_cart
18932 domeganum(j,2,i)=(omeg(i)-omeg_s(i)) &
18936 dc(j,i+nres)=dc(j,i+nres)+aincr
18937 call chainbuild_cart
18938 domeganum(j,3,i)=(omeg(i)-omeg_s(i)) &
18943 !el write (iout,'(i5,3(3f10.5,5x))') i,(domega(j,1,i),j=1,3),&
18944 !el (domega(j,2,i),j=1,3),(domega(j,3,i),j=1,3)
18945 !el write (iout,'(5x,3(3f10.5,5x))') (domeganum(j,1,i),j=1,3),&
18946 !el (domeganum(j,2,i),j=1,3),(domeganum(j,3,i),j=1,3)
18947 !el write (iout,'(5x,3(3f10.5,5x))') &
18948 !el (domeganum(j,1,i)/domega(j,1,i),j=1,3),&
18949 !el (domeganum(j,2,i)/domega(j,2,i),j=1,3),&
18950 !el (domeganum(j,3,i)/domega(j,3,i),j=1,3)
18954 end subroutine checkintcartgrad
18955 !-----------------------------------------------------------------------------
18957 !-----------------------------------------------------------------------------
18958 real(kind=8) function qwolynes(seg1,seg2,flag,seg3,seg4)
18959 ! implicit real(kind=8) (a-h,o-z)
18960 ! include 'DIMENSIONS'
18961 ! include 'COMMON.IOUNITS'
18962 ! include 'COMMON.CHAIN'
18963 ! include 'COMMON.INTERACT'
18964 ! include 'COMMON.VAR'
18965 integer :: i,j,jl,k,l,il,kl,nl,np,ip,kp,seg1,seg2,seg3,seg4,secseg
18966 integer :: kkk,nsep=3
18967 real(kind=8) :: qm !dist,
18968 real(kind=8) :: qq,qqij,qqijCM,dij,d0ij,dijCM,d0ijCM,qqmax
18969 logical :: lprn=.false.
18971 ! real(kind=8) :: sigm,x
18973 !el sigm(x)=0.25d0*x ! local function
18979 do il=seg1+nsep,seg2
18982 d0ij=dsqrt((cref(1,jl,kkk)-cref(1,il,kkk))**2 + &
18983 (cref(2,jl,kkk)-cref(2,il,kkk))**2 + &
18984 (cref(3,jl,kkk)-cref(3,il,kkk))**2)
18986 qqij = dexp(-0.5d0*((dij-d0ij)/(sigm(d0ij)))**2)
18987 if (itype(il,1).ne.10 .or. itype(jl,1).ne.10) then
18990 (cref(1,jl+nres,kkk)-cref(1,il+nres,kkk))**2+ &
18991 (cref(2,jl+nres,kkk)-cref(2,il+nres,kkk))**2+ &
18992 (cref(3,jl+nres,kkk)-cref(3,il+nres,kkk))**2)
18993 dijCM=dist(il+nres,jl+nres)
18994 qqijCM = dexp(-0.5d0*((dijCM-d0ijCM)/(sigm(d0ijCM)))**2)
18996 qq = qq+qqij+qqijCM
19002 if((seg3-il).lt.3) then
19009 d0ij=dsqrt((cref(1,jl,kkk)-cref(1,il,kkk))**2+ &
19010 (cref(2,jl,kkk)-cref(2,il,kkk))**2+ &
19011 (cref(3,jl,kkk)-cref(3,il,kkk))**2)
19013 qqij = dexp(-0.5d0*((dij-d0ij)/(sigm(d0ij)))**2)
19014 if (itype(il,1).ne.10 .or. itype(jl,1).ne.10) then
19017 (cref(1,jl+nres,kkk)-cref(1,il+nres,kkk))**2+ &
19018 (cref(2,jl+nres,kkk)-cref(2,il+nres,kkk))**2+ &
19019 (cref(3,jl+nres,kkk)-cref(3,il+nres,kkk))**2)
19020 dijCM=dist(il+nres,jl+nres)
19021 qqijCM = dexp(-0.5d0*((dijCM-d0ijCM)/(sigm(d0ijCM)))**2)
19023 qq = qq+qqij+qqijCM
19028 if (qqmax.le.qq) qqmax=qq
19030 qwolynes=1.0d0-qqmax
19032 end function qwolynes
19033 !-----------------------------------------------------------------------------
19034 subroutine qwolynes_prim(seg1,seg2,flag,seg3,seg4)
19035 ! implicit real(kind=8) (a-h,o-z)
19036 ! include 'DIMENSIONS'
19037 ! include 'COMMON.IOUNITS'
19038 ! include 'COMMON.CHAIN'
19039 ! include 'COMMON.INTERACT'
19040 ! include 'COMMON.VAR'
19041 ! include 'COMMON.MD'
19042 integer :: i,j,jl,k,l,il,nl,seg1,seg2,seg3,seg4,secseg
19043 integer :: nsep=3, kkk
19044 !el real(kind=8) :: dist
19045 real(kind=8) :: dij,d0ij,dijCM,d0ijCM
19046 logical :: lprn=.false.
19048 real(kind=8) :: sim,dd0,fac,ddqij
19049 !el sigm(x)=0.25d0*x ! local function
19059 do il=seg1+nsep,seg2
19062 d0ij=dsqrt((cref(1,jl,kkk)-cref(1,il,kkk))**2+ &
19063 (cref(2,jl,kkk)-cref(2,il,kkk))**2+ &
19064 (cref(3,jl,kkk)-cref(3,il,kkk))**2)
19066 sim = 1.0d0/sigm(d0ij)
19069 fac = dd0*sim/dij*dexp(-0.5d0*dd0*dd0*sim)
19071 ddqij = (c(k,il)-c(k,jl))*fac
19072 dqwol(k,il)=dqwol(k,il)+ddqij
19073 dqwol(k,jl)=dqwol(k,jl)-ddqij
19076 if (itype(il,1).ne.10 .or. itype(jl,1).ne.10) then
19079 (cref(1,jl+nres,kkk)-cref(1,il+nres,kkk))**2+ &
19080 (cref(2,jl+nres,kkk)-cref(2,il+nres,kkk))**2+ &
19081 (cref(3,jl+nres,kkk)-cref(3,il+nres,kkk))**2)
19082 dijCM=dist(il+nres,jl+nres)
19083 sim = 1.0d0/sigm(d0ijCM)
19086 fac=dd0*sim/dijCM*dexp(-0.5d0*dd0*dd0*sim)
19088 ddqij = (c(k,il+nres)-c(k,jl+nres))*fac
19089 dxqwol(k,il)=dxqwol(k,il)+ddqij
19090 dxqwol(k,jl)=dxqwol(k,jl)-ddqij
19097 if((seg3-il).lt.3) then
19104 d0ij=dsqrt((cref(1,jl,kkk)-cref(1,il,kkk))**2+ &
19105 (cref(2,jl,kkk)-cref(2,il,kkk))**2+ &
19106 (cref(3,jl,kkk)-cref(3,il,kkk))**2)
19108 sim = 1.0d0/sigm(d0ij)
19111 fac = dd0*sim/dij*dexp(-0.5d0*dd0*dd0*sim)
19113 ddqij = (c(k,il)-c(k,jl))*fac
19114 dqwol(k,il)=dqwol(k,il)+ddqij
19115 dqwol(k,jl)=dqwol(k,jl)-ddqij
19117 if (itype(il,1).ne.10 .or. itype(jl,1).ne.10) then
19120 (cref(1,jl+nres,kkk)-cref(1,il+nres,kkk))**2+ &
19121 (cref(2,jl+nres,kkk)-cref(2,il+nres,kkk))**2+ &
19122 (cref(3,jl+nres,kkk)-cref(3,il+nres,kkk))**2)
19123 dijCM=dist(il+nres,jl+nres)
19124 sim = 1.0d0/sigm(d0ijCM)
19127 fac = dd0*sim/dijCM*dexp(-0.5d0*dd0*dd0*sim)
19129 ddqij = (c(k,il+nres)-c(k,jl+nres))*fac
19130 dxqwol(k,il)=dxqwol(k,il)+ddqij
19131 dxqwol(k,jl)=dxqwol(k,jl)-ddqij
19140 dqwol(j,i)=dqwol(j,i)/nl
19141 dxqwol(j,i)=dxqwol(j,i)/nl
19145 end subroutine qwolynes_prim
19146 !-----------------------------------------------------------------------------
19147 subroutine qwol_num(seg1,seg2,flag,seg3,seg4)
19148 ! implicit real(kind=8) (a-h,o-z)
19149 ! include 'DIMENSIONS'
19150 ! include 'COMMON.IOUNITS'
19151 ! include 'COMMON.CHAIN'
19152 ! include 'COMMON.INTERACT'
19153 ! include 'COMMON.VAR'
19154 integer :: seg1,seg2,seg3,seg4
19156 real(kind=8),dimension(3,0:nres) :: qwolan,qwolxan
19157 real(kind=8),dimension(3,0:2*nres) :: cdummy
19158 real(kind=8) :: q1,q2
19159 real(kind=8) :: delta=1.0d-10
19164 q1=qwolynes(seg1,seg2,flag,seg3,seg4)
19166 c(j,i)=c(j,i)+delta
19167 q2=qwolynes(seg1,seg2,flag,seg3,seg4)
19168 qwolan(j,i)=(q2-q1)/delta
19174 q1=qwolynes(seg1,seg2,flag,seg3,seg4)
19175 cdummy(j,i+nres)=c(j,i+nres)
19176 c(j,i+nres)=c(j,i+nres)+delta
19177 q2=qwolynes(seg1,seg2,flag,seg3,seg4)
19178 qwolxan(j,i)=(q2-q1)/delta
19179 c(j,i+nres)=cdummy(j,i+nres)
19182 ! write(iout,*) "Numerical Q carteisan gradients backbone: "
19184 ! write(iout,'(i5,3e15.5)') i, (qwolan(j,i),j=1,3)
19186 ! write(iout,*) "Numerical Q carteisan gradients side-chain: "
19188 ! write(iout,'(i5,3e15.5)') i, (qwolxan(j,i),j=1,3)
19191 end subroutine qwol_num
19192 !-----------------------------------------------------------------------------
19193 subroutine EconstrQ
19194 ! MD with umbrella_sampling using Wolyne's distance measure as a constraint
19195 ! implicit real(kind=8) (a-h,o-z)
19196 ! include 'DIMENSIONS'
19197 ! include 'COMMON.CONTROL'
19198 ! include 'COMMON.VAR'
19199 ! include 'COMMON.MD'
19202 ! include 'COMMON.LANGEVIN'
19204 ! include 'COMMON.LANGEVIN.lang0'
19206 ! include 'COMMON.CHAIN'
19207 ! include 'COMMON.DERIV'
19208 ! include 'COMMON.GEO'
19209 ! include 'COMMON.LOCAL'
19210 ! include 'COMMON.INTERACT'
19211 ! include 'COMMON.IOUNITS'
19212 ! include 'COMMON.NAMES'
19213 ! include 'COMMON.TIME1'
19214 real(kind=8) :: uzap1,uzap2,hm1,hm2,hmnum,ucdelan
19215 real(kind=8),dimension(3,0:nres) :: dUcartan,dUxcartan,cdummy,&
19217 integer :: kstart,kend,lstart,lend,idummy
19218 real(kind=8) :: delta=1.0d-7
19219 integer :: i,j,k,ii
19223 dudconst(j,i)=0.0d0
19224 duxconst(j,i)=0.0d0
19225 dudxconst(j,i)=0.0d0
19230 qfrag(i)=qwolynes(ifrag(1,i,iset),ifrag(2,i,iset),.true.,&
19232 Uconst=Uconst+wfrag(i,iset)*harmonic(qfrag(i),qinfrag(i,iset))
19233 ! Calculating the derivatives of Constraint energy with respect to Q
19234 Ucdfrag=wfrag(i,iset)*harmonicprim(qfrag(i),&
19236 ! hm1=harmonic(qfrag(i,iset),qinfrag(i,iset))
19237 ! hm2=harmonic(qfrag(i,iset)+delta,qinfrag(i,iset))
19238 ! hmnum=(hm2-hm1)/delta
19239 ! write(iout,*) "harmonicprim frag",harmonicprim(qfrag(i,iset),
19240 ! & qinfrag(i,iset))
19241 ! write(iout,*) "harmonicnum frag", hmnum
19242 ! Calculating the derivatives of Q with respect to cartesian coordinates
19243 call qwolynes_prim(ifrag(1,i,iset),ifrag(2,i,iset),.true.,&
19245 ! write(iout,*) "dqwol "
19247 ! write(iout,'(i5,3e15.5)') ii,(dqwol(j,ii),j=1,3)
19249 ! write(iout,*) "dxqwol "
19251 ! write(iout,'(i5,3e15.5)') ii,(dxqwol(j,ii),j=1,3)
19253 ! Calculating numerical gradients of dU/dQi and dQi/dxi
19254 ! call qwol_num(ifrag(1,i,iset),ifrag(2,i,iset),.true.
19255 ! & ,idummy,idummy)
19256 ! The gradients of Uconst in Cs
19259 duconst(j,ii)=dUconst(j,ii)+ucdfrag*dqwol(j,ii)
19260 dUxconst(j,ii)=dUxconst(j,ii)+ucdfrag*dxqwol(j,ii)
19265 kstart=ifrag(1,ipair(1,i,iset),iset)
19266 kend=ifrag(2,ipair(1,i,iset),iset)
19267 lstart=ifrag(1,ipair(2,i,iset),iset)
19268 lend=ifrag(2,ipair(2,i,iset),iset)
19269 qpair(i)=qwolynes(kstart,kend,.false.,lstart,lend)
19270 Uconst=Uconst+wpair(i,iset)*harmonic(qpair(i),qinpair(i,iset))
19271 ! Calculating dU/dQ
19272 Ucdpair=wpair(i,iset)*harmonicprim(qpair(i),qinpair(i,iset))
19273 ! hm1=harmonic(qpair(i),qinpair(i,iset))
19274 ! hm2=harmonic(qpair(i)+delta,qinpair(i,iset))
19275 ! hmnum=(hm2-hm1)/delta
19276 ! write(iout,*) "harmonicprim pair ",harmonicprim(qpair(i),
19277 ! & qinpair(i,iset))
19278 ! write(iout,*) "harmonicnum pair ", hmnum
19279 ! Calculating dQ/dXi
19280 call qwolynes_prim(kstart,kend,.false.,&
19282 ! write(iout,*) "dqwol "
19284 ! write(iout,'(i5,3e15.5)') ii,(dqwol(j,ii),j=1,3)
19286 ! write(iout,*) "dxqwol "
19288 ! write(iout,'(i5,3e15.5)') ii,(dxqwol(j,ii),j=1,3)
19290 ! Calculating numerical gradients
19291 ! call qwol_num(kstart,kend,.false.
19293 ! The gradients of Uconst in Cs
19296 duconst(j,ii)=dUconst(j,ii)+ucdpair*dqwol(j,ii)
19297 dUxconst(j,ii)=dUxconst(j,ii)+ucdpair*dxqwol(j,ii)
19301 ! write(iout,*) "Uconst inside subroutine ", Uconst
19302 ! Transforming the gradients from Cs to dCs for the backbone
19306 dudconst(k,i)=dudconst(k,i)+duconst(k,j)+duxconst(k,j)
19310 ! Transforming the gradients from Cs to dCs for the side chains
19313 dudxconst(j,i)=duxconst(j,i)
19316 ! write(iout,*) "dU/ddc backbone "
19318 ! write(iout,'(i5,3e15.5)') ii, (dudconst(j,ii),j=1,3)
19320 ! write(iout,*) "dU/ddX side chain "
19322 ! write(iout,'(i5,3e15.5)') ii,(duxconst(j,ii),j=1,3)
19324 ! Calculating numerical gradients of dUconst/ddc and dUconst/ddx
19325 ! call dEconstrQ_num
19327 end subroutine EconstrQ
19328 !-----------------------------------------------------------------------------
19329 subroutine dEconstrQ_num
19330 ! Calculating numerical dUconst/ddc and dUconst/ddx
19331 ! implicit real(kind=8) (a-h,o-z)
19332 ! include 'DIMENSIONS'
19333 ! include 'COMMON.CONTROL'
19334 ! include 'COMMON.VAR'
19335 ! include 'COMMON.MD'
19338 ! include 'COMMON.LANGEVIN'
19340 ! include 'COMMON.LANGEVIN.lang0'
19342 ! include 'COMMON.CHAIN'
19343 ! include 'COMMON.DERIV'
19344 ! include 'COMMON.GEO'
19345 ! include 'COMMON.LOCAL'
19346 ! include 'COMMON.INTERACT'
19347 ! include 'COMMON.IOUNITS'
19348 ! include 'COMMON.NAMES'
19349 ! include 'COMMON.TIME1'
19350 real(kind=8) :: uzap1,uzap2
19351 real(kind=8),dimension(3,0:nres) :: dUcartan,dUxcartan,cdummy
19352 integer :: kstart,kend,lstart,lend,idummy
19353 real(kind=8) :: delta=1.0d-7
19354 !el local variables
19360 dUcartan(j,i)=0.0d0
19361 cdummy(j,i)=dc(j,i)
19362 dc(j,i)=dc(j,i)+delta
19363 call chainbuild_cart
19366 qfrag(ii)=qwolynes(ifrag(1,ii,iset),ifrag(2,ii,iset),.true.,&
19368 uzap2=uzap2+wfrag(ii,iset)*harmonic(qfrag(ii),&
19372 kstart=ifrag(1,ipair(1,ii,iset),iset)
19373 kend=ifrag(2,ipair(1,ii,iset),iset)
19374 lstart=ifrag(1,ipair(2,ii,iset),iset)
19375 lend=ifrag(2,ipair(2,ii,iset),iset)
19376 qpair(ii)=qwolynes(kstart,kend,.false.,lstart,lend)
19377 uzap2=uzap2+wpair(ii,iset)*harmonic(qpair(ii),&
19380 dc(j,i)=cdummy(j,i)
19381 call chainbuild_cart
19384 qfrag(ii)=qwolynes(ifrag(1,ii,iset),ifrag(2,ii,iset),.true.,&
19386 uzap1=uzap1+wfrag(ii,iset)*harmonic(qfrag(ii),&
19390 kstart=ifrag(1,ipair(1,ii,iset),iset)
19391 kend=ifrag(2,ipair(1,ii,iset),iset)
19392 lstart=ifrag(1,ipair(2,ii,iset),iset)
19393 lend=ifrag(2,ipair(2,ii,iset),iset)
19394 qpair(ii)=qwolynes(kstart,kend,.false.,lstart,lend)
19395 uzap1=uzap1+wpair(ii,iset)*harmonic(qpair(ii),&
19398 ducartan(j,i)=(uzap2-uzap1)/(delta)
19401 ! Calculating numerical gradients for dU/ddx
19403 duxcartan(j,i)=0.0d0
19405 cdummy(j,i)=dc(j,i+nres)
19406 dc(j,i+nres)=dc(j,i+nres)+delta
19407 call chainbuild_cart
19410 qfrag(ii)=qwolynes(ifrag(1,ii,iset),ifrag(2,ii,iset),.true.,&
19412 uzap2=uzap2+wfrag(ii,iset)*harmonic(qfrag(ii),&
19416 kstart=ifrag(1,ipair(1,ii,iset),iset)
19417 kend=ifrag(2,ipair(1,ii,iset),iset)
19418 lstart=ifrag(1,ipair(2,ii,iset),iset)
19419 lend=ifrag(2,ipair(2,ii,iset),iset)
19420 qpair(ii)=qwolynes(kstart,kend,.false.,lstart,lend)
19421 uzap2=uzap2+wpair(ii,iset)*harmonic(qpair(ii),&
19424 dc(j,i+nres)=cdummy(j,i)
19425 call chainbuild_cart
19428 qfrag(ii)=qwolynes(ifrag(1,ii,iset),&
19429 ifrag(2,ii,iset),.true.,idummy,idummy)
19430 uzap1=uzap1+wfrag(ii,iset)*harmonic(qfrag(ii),&
19434 kstart=ifrag(1,ipair(1,ii,iset),iset)
19435 kend=ifrag(2,ipair(1,ii,iset),iset)
19436 lstart=ifrag(1,ipair(2,ii,iset),iset)
19437 lend=ifrag(2,ipair(2,ii,iset),iset)
19438 qpair(ii)=qwolynes(kstart,kend,.false.,lstart,lend)
19439 uzap1=uzap1+wpair(ii,iset)*harmonic(qpair(ii),&
19442 duxcartan(j,i)=(uzap2-uzap1)/(delta)
19445 write(iout,*) "Numerical dUconst/ddc backbone "
19447 write(iout,'(i5,3e15.5)') ii,(dUcartan(j,ii),j=1,3)
19449 ! write(iout,*) "Numerical dUconst/ddx side-chain "
19451 ! write(iout,'(i5,3e15.5)') ii,(dUxcartan(j,ii),j=1,3)
19454 end subroutine dEconstrQ_num
19455 !-----------------------------------------------------------------------------
19457 !-----------------------------------------------------------------------------
19458 subroutine check_energies
19460 ! use random, only: ran_number
19464 ! include 'DIMENSIONS'
19465 ! include 'COMMON.CHAIN'
19466 ! include 'COMMON.VAR'
19467 ! include 'COMMON.IOUNITS'
19468 ! include 'COMMON.SBRIDGE'
19469 ! include 'COMMON.LOCAL'
19470 ! include 'COMMON.GEO'
19472 ! External functions
19473 !EL double precision ran_number
19474 !EL external ran_number
19477 integer :: i,j,k,l,lmax,p,pmax
19478 real(kind=8) :: rmin,rmax
19479 real(kind=8) :: eij
19482 real(kind=8) :: wi,rij,tj,pj
19504 !t wi=ran_number(0.0D0,pi)
19505 ! wi=ran_number(0.0D0,pi/6.0D0)
19507 !t tj=ran_number(0.0D0,pi)
19508 !t pj=ran_number(0.0D0,pi)
19509 ! pj=ran_number(0.0D0,pi/6.0D0)
19513 !t rij=ran_number(rmin,rmax)
19515 c(1,j)=d*sin(pj)*cos(tj)
19516 c(2,j)=d*sin(pj)*sin(tj)
19522 c(3,i)=-rij-d*cos(wi)
19525 dc(k,nres+i)=c(k,nres+i)-c(k,i)
19526 dc_norm(k,nres+i)=dc(k,nres+i)/d
19527 dc(k,nres+j)=c(k,nres+j)-c(k,j)
19528 dc_norm(k,nres+j)=dc(k,nres+j)/d
19531 call dyn_ssbond_ene(i,j,eij)
19536 end subroutine check_energies
19537 !-----------------------------------------------------------------------------
19538 subroutine dyn_ssbond_ene(resi,resj,eij)
19543 ! include 'DIMENSIONS'
19544 ! include 'COMMON.SBRIDGE'
19545 ! include 'COMMON.CHAIN'
19546 ! include 'COMMON.DERIV'
19547 ! include 'COMMON.LOCAL'
19548 ! include 'COMMON.INTERACT'
19549 ! include 'COMMON.VAR'
19550 ! include 'COMMON.IOUNITS'
19551 ! include 'COMMON.CALC'
19555 ! include 'COMMON.MD'
19556 ! use MD, only: totT,t_bath
19559 ! External functions
19560 !EL double precision h_base
19561 !EL external h_base
19564 integer :: resi,resj
19567 real(kind=8) :: eij
19570 logical :: havebond
19571 integer itypi,itypj
19572 real(kind=8) :: rrij,ssd,deltat1,deltat2,deltat12,cosphi
19573 real(kind=8) :: sig0ij,ljd,sig,fac,e1,e2
19574 real(kind=8),dimension(3) :: dcosom1,dcosom2
19576 real(kind=8) :: pom1,pom2
19577 real(kind=8) :: ljA,ljB,ljXs
19578 real(kind=8),dimension(1:3) :: d_ljB
19579 real(kind=8) :: ssA,ssB,ssC,ssXs
19580 real(kind=8) :: ssxm,ljxm,ssm,ljm
19581 real(kind=8),dimension(1:3) :: d_ssxm,d_ljxm,d_ssm,d_ljm
19582 real(kind=8) :: f1,f2,h1,h2,hd1,hd2
19583 real(kind=8) :: omega,delta_inv,deltasq_inv,fac1,fac2
19584 !-------FIRST METHOD
19586 real(kind=8),dimension(1:3) :: d_xm
19587 !-------END FIRST METHOD
19588 !-------SECOND METHOD
19589 !$$$ double precision ss,d_ss(0:3),ljf,d_ljf(0:3)
19590 !-------END SECOND METHOD
19592 !-------TESTING CODE
19593 !el logical :: checkstop,transgrad
19594 !el common /sschecks/ checkstop,transgrad
19596 integer :: icheck,nicheck,jcheck,njcheck
19597 real(kind=8),dimension(-1:1) :: echeck
19598 real(kind=8) :: deps,ssx0,ljx0
19599 !-------END TESTING CODE
19605 !el allocate(dyn_ssbond_ij(iatsc_s:iatsc_e,nres))
19606 !el allocate(dyn_ssbond_ij(0:nres+4,nres))
19609 dxi=dc_norm(1,nres+i)
19610 dyi=dc_norm(2,nres+i)
19611 dzi=dc_norm(3,nres+i)
19612 dsci_inv=vbld_inv(i+nres)
19615 xj=c(1,nres+j)-c(1,nres+i)
19616 yj=c(2,nres+j)-c(2,nres+i)
19617 zj=c(3,nres+j)-c(3,nres+i)
19618 dxj=dc_norm(1,nres+j)
19619 dyj=dc_norm(2,nres+j)
19620 dzj=dc_norm(3,nres+j)
19621 dscj_inv=vbld_inv(j+nres)
19623 chi1=chi(itypi,itypj)
19624 chi2=chi(itypj,itypi)
19631 alf12=0.5D0*(alf1+alf2)
19633 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
19634 rij=dsqrt(rrij) ! sc_angular needs rij to really be the inverse
19635 ! The following are set in sc_angular
19639 ! om1=dxi*erij(1)+dyi*erij(2)+dzi*erij(3)
19640 ! om2=dxj*erij(1)+dyj*erij(2)+dzj*erij(3)
19641 ! om12=dxi*dxj+dyi*dyj+dzi*dzj
19643 rij=1.0D0/rij ! Reset this so it makes sense
19645 sig0ij=sigma(itypi,itypj)
19646 sig=sig0ij*dsqrt(1.0D0/sigsq)
19649 ljA=eps1*eps2rt**2*eps3rt**2
19650 ljB=ljA*bb_aq(itypi,itypj)
19651 ljA=ljA*aa_aq(itypi,itypj)
19652 ljxm=ljXs+(-2.0D0*aa_aq(itypi,itypj)/bb_aq(itypi,itypj))**(1.0D0/6.0D0)
19657 deltat12=om2-om1+2.0d0
19658 cosphi=om12-om1*om2
19662 +akth*(deltat1*deltat1+deltat2*deltat2) &
19663 +v1ss*cosphi+v2ss*cosphi*cosphi+v3ss*cosphi*cosphi*cosphi
19664 ssxm=ssXs-0.5D0*ssB/ssA
19666 !-------TESTING CODE
19667 !$$$c Some extra output
19668 !$$$ ssm=ssC-0.25D0*ssB*ssB/ssA
19669 !$$$ ljm=-0.25D0*ljB*bb(itypi,itypj)/aa(itypi,itypj)
19670 !$$$ ssx0=ssB*ssB-4.0d0*ssA*ssC
19671 !$$$ if (ssx0.gt.0.0d0) then
19672 !$$$ ssx0=ssXs+0.5d0*(-ssB+sqrt(ssx0))/ssA
19676 !$$$ ljx0=ljXs+(-aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
19677 !$$$ write(iout,'(a,4f8.2,2f15.2,3f6.2)')"SSENERGIES ",
19678 !$$$ & ssxm,ljxm,ssx0,ljx0,ssm,ljm,om1,om2,om12
19680 !-------END TESTING CODE
19682 !-------TESTING CODE
19683 ! Stop and plot energy and derivative as a function of distance
19684 if (checkstop) then
19685 ssm=ssC-0.25D0*ssB*ssB/ssA
19686 ljm=-0.25D0*ljB*bb_aq(itypi,itypj)/aa_aq(itypi,itypj)
19687 if (ssm.lt.ljm .and. &
19688 dabs(rij-0.5d0*(ssxm+ljxm)).lt.0.35d0*(ljxm-ssxm)) then
19696 if (.not.checkstop) then
19701 do icheck=0,nicheck
19702 do jcheck=-1,njcheck
19703 if (checkstop) rij=(ssxm-1.0d0)+ &
19704 ((ljxm-ssxm+2.0d0)*icheck)/nicheck+jcheck*deps
19705 !-------END TESTING CODE
19707 if (rij.gt.ljxm) then
19710 fac=(1.0D0/ljd)**expon
19711 e1=fac*fac*aa_aq(itypi,itypj)
19712 e2=fac*bb_aq(itypi,itypj)
19713 eij=eps1*eps2rt*eps3rt*(e1+e2)
19716 eij=eij*eps2rt*eps3rt
19719 e1=e1*eps1*eps2rt**2*eps3rt**2
19720 ed=-expon*(e1+eij)/ljd
19722 eom1=eps2der*eps2rt_om1-2.0D0*alf1*eps3der+sigder*sigsq_om1
19723 eom2=eps2der*eps2rt_om2+2.0D0*alf2*eps3der+sigder*sigsq_om2
19724 eom12=eij*eps1_om12+eps2der*eps2rt_om12 &
19725 -2.0D0*alf12*eps3der+sigder*sigsq_om12
19726 else if (rij.lt.ssxm) then
19729 eij=ssA*ssd*ssd+ssB*ssd+ssC
19731 ed=2*akcm*ssd+akct*deltat12
19733 pom2=v1ss+2*v2ss*cosphi+3*v3ss*cosphi*cosphi
19734 eom1=-2*akth*deltat1-pom1-om2*pom2
19735 eom2= 2*akth*deltat2+pom1-om1*pom2
19738 omega=v1ss+2.0d0*v2ss*cosphi+3.0d0*v3ss*cosphi*cosphi
19740 d_ssxm(1)=0.5D0*akct/ssA
19741 d_ssxm(2)=-d_ssxm(1)
19744 d_ljxm(1)=sig0ij/sqrt(sigsq**3)
19745 d_ljxm(2)=d_ljxm(1)*sigsq_om2
19746 d_ljxm(3)=d_ljxm(1)*sigsq_om12
19747 d_ljxm(1)=d_ljxm(1)*sigsq_om1
19749 !-------FIRST METHOD, DISCONTINUOUS SECOND DERIVATIVE
19750 xm=0.5d0*(ssxm+ljxm)
19752 d_xm(k)=0.5d0*(d_ssxm(k)+d_ljxm(k))
19754 if (rij.lt.xm) then
19756 ssm=ssC-0.25D0*ssB*ssB/ssA
19757 d_ssm(1)=0.5D0*akct*ssB/ssA
19758 d_ssm(2)=2.0D0*akth*deltat2-om1*omega-d_ssm(1)
19759 d_ssm(1)=-2.0D0*akth*deltat1-om2*omega+d_ssm(1)
19761 f1=(rij-xm)/(ssxm-xm)
19762 f2=(rij-ssxm)/(xm-ssxm)
19766 delta_inv=1.0d0/(xm-ssxm)
19767 deltasq_inv=delta_inv*delta_inv
19769 fac1=deltasq_inv*fac*(xm-rij)
19770 fac2=deltasq_inv*fac*(rij-ssxm)
19771 ed=delta_inv*(Ht*hd2-ssm*hd1)
19772 eom1=fac1*d_ssxm(1)+fac2*d_xm(1)+h1*d_ssm(1)
19773 eom2=fac1*d_ssxm(2)+fac2*d_xm(2)+h1*d_ssm(2)
19774 eom12=fac1*d_ssxm(3)+fac2*d_xm(3)+h1*d_ssm(3)
19777 ljm=-0.25D0*ljB*bb_aq(itypi,itypj)/aa_aq(itypi,itypj)
19778 d_ljm(1)=-0.5D0*bb_aq(itypi,itypj)/aa_aq(itypi,itypj)*ljB
19779 d_ljm(2)=d_ljm(1)*(0.5D0*eps2rt_om2/eps2rt+alf2/eps3rt)
19780 d_ljm(3)=d_ljm(1)*(0.5D0*eps1_om12+0.5D0*eps2rt_om12/eps2rt- &
19782 d_ljm(1)=d_ljm(1)*(0.5D0*eps2rt_om1/eps2rt-alf1/eps3rt)
19783 f1=(rij-ljxm)/(xm-ljxm)
19784 f2=(rij-xm)/(ljxm-xm)
19788 delta_inv=1.0d0/(ljxm-xm)
19789 deltasq_inv=delta_inv*delta_inv
19791 fac1=deltasq_inv*fac*(ljxm-rij)
19792 fac2=deltasq_inv*fac*(rij-xm)
19793 ed=delta_inv*(ljm*hd2-Ht*hd1)
19794 eom1=fac1*d_xm(1)+fac2*d_ljxm(1)+h2*d_ljm(1)
19795 eom2=fac1*d_xm(2)+fac2*d_ljxm(2)+h2*d_ljm(2)
19796 eom12=fac1*d_xm(3)+fac2*d_ljxm(3)+h2*d_ljm(3)
19798 !-------END FIRST METHOD, DISCONTINUOUS SECOND DERIVATIVE
19800 !-------SECOND METHOD, CONTINUOUS SECOND DERIVATIVE
19806 !$$$ d_ljB(1)=ljB*(eps2rt_om1/eps2rt-2.0d0*alf1/eps3rt)
19807 !$$$ d_ljB(2)=ljB*(eps2rt_om2/eps2rt+2.0d0*alf2/eps3rt)
19808 !$$$ d_ljB(3)=ljB*(eps1_om12+eps2rt_om12/eps2rt-2.0d0*alf12/eps3rt)
19810 !$$$ ssm=ssC-0.25D0*ssB*ssB/ssA
19811 !$$$ d_ssm(1)=0.5D0*akct*ssB/ssA
19812 !$$$ d_ssm(2)=2.0D0*akth*deltat2-om1*omega-d_ssm(1)
19813 !$$$ d_ssm(1)=-2.0D0*akth*deltat1-om2*omega+d_ssm(1)
19814 !$$$ d_ssm(3)=omega
19816 !$$$ ljm=-0.25D0*bb(itypi,itypj)/aa(itypi,itypj)
19818 !$$$ d_ljm(k)=ljm*d_ljB(k)
19822 !$$$ ss=ssA*ssd*ssd+ssB*ssd+ssC
19823 !$$$ d_ss(0)=2.0d0*ssA*ssd+ssB
19824 !$$$ d_ss(2)=akct*ssd
19825 !$$$ d_ss(1)=-d_ss(2)-2.0d0*akth*deltat1-om2*omega
19826 !$$$ d_ss(2)=d_ss(2)+2.0d0*akth*deltat2-om1*omega
19829 !$$$ ljf=bb(itypi,itypj)/aa(itypi,itypj)
19830 !$$$ ljf=9.0d0*ljf*(-0.5d0*ljf)**(1.0d0/3.0d0)
19831 !$$$ d_ljf(0)=ljf*2.0d0*ljB*fac1
19833 !$$$ d_ljf(k)=d_ljm(k)+ljf*(d_ljB(k)*fac1*fac1-
19834 !$$$ & 2.0d0*ljB*fac1*d_ljxm(k))
19836 !$$$ ljf=ljm+ljf*ljB*fac1*fac1
19838 !$$$ f1=(rij-ljxm)/(ssxm-ljxm)
19839 !$$$ f2=(rij-ssxm)/(ljxm-ssxm)
19840 !$$$ h1=h_base(f1,hd1)
19841 !$$$ h2=h_base(f2,hd2)
19842 !$$$ eij=ss*h1+ljf*h2
19843 !$$$ delta_inv=1.0d0/(ljxm-ssxm)
19844 !$$$ deltasq_inv=delta_inv*delta_inv
19845 !$$$ fac=ljf*hd2-ss*hd1
19846 !$$$ ed=d_ss(0)*h1+d_ljf(0)*h2+delta_inv*fac
19847 !$$$ eom1=d_ss(1)*h1+d_ljf(1)*h2+deltasq_inv*fac*
19848 !$$$ & (fac1*d_ssxm(1)-fac2*(d_ljxm(1)))
19849 !$$$ eom2=d_ss(2)*h1+d_ljf(2)*h2+deltasq_inv*fac*
19850 !$$$ & (fac1*d_ssxm(2)-fac2*(d_ljxm(2)))
19851 !$$$ eom12=d_ss(3)*h1+d_ljf(3)*h2+deltasq_inv*fac*
19852 !$$$ & (fac1*d_ssxm(3)-fac2*(d_ljxm(3)))
19854 !$$$ havebond=.false.
19855 !$$$ if (ed.gt.0.0d0) havebond=.true.
19856 !-------END SECOND METHOD, CONTINUOUS SECOND DERIVATIVE
19863 ! if (dyn_ssbond_ij(i,j).eq.1.0d300) then
19864 ! write(iout,'(a15,f12.2,f8.1,2i5)')
19865 ! & "SSBOND_E_FORM",totT,t_bath,i,j
19869 dyn_ssbond_ij(i,j)=eij
19870 else if (.not.havebond .and. dyn_ssbond_ij(i,j).lt.1.0d300) then
19871 dyn_ssbond_ij(i,j)=1.0d300
19874 ! write(iout,'(a15,f12.2,f8.1,2i5)')
19875 ! & "SSBOND_E_BREAK",totT,t_bath,i,j
19880 !-------TESTING CODE
19881 !el if (checkstop) then
19882 if (jcheck.eq.0) write(iout,'(a,3f15.8,$)') &
19883 "CHECKSTOP",rij,eij,ed
19887 if (checkstop) then
19888 write(iout,'(f15.8)')(echeck(1)-echeck(-1))*0.5d0/deps
19891 if (checkstop) then
19895 !-------END TESTING CODE
19898 dcosom1(k)=(dc_norm(k,nres+i)-om1*erij(k))/rij
19899 dcosom2(k)=(dc_norm(k,nres+j)-om2*erij(k))/rij
19902 gg(k)=ed*erij(k)+eom1*dcosom1(k)+eom2*dcosom2(k)
19905 gvdwx(k,i)=gvdwx(k,i)-gg(k) &
19906 +(eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,nres+i)) &
19907 +eom1*(erij(k)-om1*dc_norm(k,nres+i)))*dsci_inv
19908 gvdwx(k,j)=gvdwx(k,j)+gg(k) &
19909 +(eom12*(dc_norm(k,nres+i)-om12*dc_norm(k,nres+j)) &
19910 +eom2*(erij(k)-om2*dc_norm(k,nres+j)))*dscj_inv
19914 !grad gvdwc(l,k)=gvdwc(l,k)+gg(l)
19919 gvdwc(l,i)=gvdwc(l,i)-gg(l)
19920 gvdwc(l,j)=gvdwc(l,j)+gg(l)
19924 end subroutine dyn_ssbond_ene
19925 !--------------------------------------------------------------------------
19926 subroutine triple_ssbond_ene(resi,resj,resk,eij)
19931 ! include 'DIMENSIONS'
19932 ! include 'COMMON.SBRIDGE'
19933 ! include 'COMMON.CHAIN'
19934 ! include 'COMMON.DERIV'
19935 ! include 'COMMON.LOCAL'
19936 ! include 'COMMON.INTERACT'
19937 ! include 'COMMON.VAR'
19938 ! include 'COMMON.IOUNITS'
19939 ! include 'COMMON.CALC'
19943 ! include 'COMMON.MD'
19944 ! use MD, only: totT,t_bath
19947 double precision h_base
19951 integer resi,resj,resk,m,itypi,itypj,itypk
19953 !c Output arguments
19954 double precision eij,eij1,eij2,eij3
19958 !c integer itypi,itypj,k,l
19959 double precision rrij,ssd,deltat1,deltat2,deltat12,cosphi
19960 double precision rrik,rrjk,rik,rjk,xi,xk,yi,yk,zi,zk,xij,yij,zij
19961 double precision xik,yik,zik,xjk,yjk,zjk,dxk,dyk,dzk
19962 double precision sig0ij,ljd,sig,fac,e1,e2
19963 double precision dcosom1(3),dcosom2(3),ed
19964 double precision pom1,pom2
19965 double precision ljA,ljB,ljXs
19966 double precision d_ljB(1:3)
19967 double precision ssA,ssB,ssC,ssXs
19968 double precision ssxm,ljxm,ssm,ljm
19969 double precision d_ssxm(1:3),d_ljxm(1:3),d_ssm(1:3),d_ljm(1:3)
19971 if (dtriss.eq.0) return
19975 !C write(iout,*) resi,resj,resk
19977 dxi=dc_norm(1,nres+i)
19978 dyi=dc_norm(2,nres+i)
19979 dzi=dc_norm(3,nres+i)
19980 dsci_inv=vbld_inv(i+nres)
19984 call to_box(xi,yi,zi)
19989 call to_box(xj,yj,zj)
19990 dxj=dc_norm(1,nres+j)
19991 dyj=dc_norm(2,nres+j)
19992 dzj=dc_norm(3,nres+j)
19993 dscj_inv=vbld_inv(j+nres)
19998 call to_box(xk,yk,zk)
19999 dxk=dc_norm(1,nres+k)
20000 dyk=dc_norm(2,nres+k)
20001 dzk=dc_norm(3,nres+k)
20002 dscj_inv=vbld_inv(k+nres)
20012 rrij=(xij*xij+yij*yij+zij*zij)
20013 rij=dsqrt(rrij) ! sc_angular needs rij to really be the inverse
20014 rrik=(xik*xik+yik*yik+zik*zik)
20016 rrjk=(xjk*xjk+yjk*yjk+zjk*zjk)
20018 !C there are three combination of distances for each trisulfide bonds
20019 !C The first case the ith atom is the center
20020 !C Energy function is E=d/(a*(x-y)**2+b*(x+y)**2+c) where x is first
20021 !C distance y is second distance the a,b,c,d are parameters derived for
20022 !C this problem d parameter was set as a penalty currenlty set to 1.
20023 if ((iabs(j-i).le.2).or.(iabs(i-k).le.2)) then
20026 eij1=dtriss/(atriss*(rij-rik)**2+btriss*(rij+rik)**6+ctriss)
20028 !C second case jth atom is center
20029 if ((iabs(j-i).le.2).or.(iabs(j-k).le.2)) then
20032 eij2=dtriss/(atriss*(rij-rjk)**2+btriss*(rij+rjk)**6+ctriss)
20034 !C the third case kth atom is the center
20035 if ((iabs(i-k).le.2).or.(iabs(j-k).le.2)) then
20038 eij3=dtriss/(atriss*(rik-rjk)**2+btriss*(rik+rjk)**6+ctriss)
20044 !C write(iout,*)i,j,k,eij
20045 !C The energy penalty calculated now time for the gradient part
20046 !C derivative over rij
20047 fac=-eij1**2/dtriss*(2.0*atriss*(rij-rik)+6.0*btriss*(rij+rik)**5) &
20048 -eij2**2/dtriss*(2.0*atriss*(rij-rjk)+6.0*btriss*(rij+rjk)**5)
20053 gvdwx(m,i)=gvdwx(m,i)-gg(m)
20054 gvdwx(m,j)=gvdwx(m,j)+gg(m)
20058 gvdwc(l,i)=gvdwc(l,i)-gg(l)
20059 gvdwc(l,j)=gvdwc(l,j)+gg(l)
20061 !C now derivative over rik
20062 fac=-eij1**2/dtriss* &
20063 (-2.0*atriss*(rij-rik)+6.0*btriss*(rij+rik)**5) &
20064 -eij3**2/dtriss*(2.0*atriss*(rik-rjk)+6.0*btriss*(rik+rjk)**5)
20069 gvdwx(m,i)=gvdwx(m,i)-gg(m)
20070 gvdwx(m,k)=gvdwx(m,k)+gg(m)
20073 gvdwc(l,i)=gvdwc(l,i)-gg(l)
20074 gvdwc(l,k)=gvdwc(l,k)+gg(l)
20076 !C now derivative over rjk
20077 fac=-eij2**2/dtriss* &
20078 (-2.0*atriss*(rij-rjk)+6.0*btriss*(rij+rjk)**5)- &
20079 eij3**2/dtriss*(-2.0*atriss*(rik-rjk)+6.0*btriss*(rik+rjk)**5)
20084 gvdwx(m,j)=gvdwx(m,j)-gg(m)
20085 gvdwx(m,k)=gvdwx(m,k)+gg(m)
20088 gvdwc(l,j)=gvdwc(l,j)-gg(l)
20089 gvdwc(l,k)=gvdwc(l,k)+gg(l)
20092 end subroutine triple_ssbond_ene
20096 !-----------------------------------------------------------------------------
20097 real(kind=8) function h_base(x,deriv)
20098 ! A smooth function going 0->1 in range [0,1]
20099 ! It should NOT be called outside range [0,1], it will not work there.
20106 real(kind=8) :: deriv
20109 real(kind=8) :: xsq
20112 ! Two parabolas put together. First derivative zero at extrema
20113 !$$$ if (x.lt.0.5D0) then
20114 !$$$ h_base=2.0D0*x*x
20118 !$$$ h_base=1.0D0-2.0D0*deriv*deriv
20119 !$$$ deriv=4.0D0*deriv
20122 ! Third degree polynomial. First derivative zero at extrema
20123 h_base=x*x*(3.0d0-2.0d0*x)
20124 deriv=6.0d0*x*(1.0d0-x)
20126 ! Fifth degree polynomial. First and second derivatives zero at extrema
20128 !$$$ h_base=x*xsq*(6.0d0*xsq-15.0d0*x+10.0d0)
20130 !$$$ deriv=deriv*deriv
20131 !$$$ deriv=30.0d0*xsq*deriv
20134 end function h_base
20135 !-----------------------------------------------------------------------------
20136 subroutine dyn_set_nss
20137 ! Adjust nss and other relevant variables based on dyn_ssbond_ij
20139 use MD_data, only: totT,t_bath
20141 ! include 'DIMENSIONS'
20145 ! include 'COMMON.SBRIDGE'
20146 ! include 'COMMON.CHAIN'
20147 ! include 'COMMON.IOUNITS'
20148 ! include 'COMMON.SETUP'
20149 ! include 'COMMON.MD'
20151 real(kind=8) :: emin
20152 integer :: i,j,imin,ierr
20153 integer :: diff,allnss,newnss
20154 integer,dimension(maxdim) :: allflag,allihpb,alljhpb,& !(maxdim)(maxdim=(maxres-1)*(maxres-2)/2)
20157 integer,dimension(0:nfgtasks) :: i_newnss
20158 integer,dimension(0:nfgtasks) :: displ
20159 integer,dimension(maxdim) :: g_newihpb,g_newjhpb !(maxdim)(maxdim=(maxres-1)*(maxres-2)/2)
20160 integer :: g_newnss
20165 if (dyn_ssbond_ij(i,j).lt.1.0d300) then
20174 !mc write(iout,*)"ALLNSS ",allnss,(allihpb(i),alljhpb(i),i=1,allnss)
20178 if (allflag(i).eq.0 .and. &
20179 dyn_ssbond_ij(allihpb(i),alljhpb(i)).lt.emin) then
20180 emin=dyn_ssbond_ij(allihpb(i),alljhpb(i))
20184 if (emin.lt.1.0d300) then
20187 if (allflag(i).eq.0 .and. &
20188 (allihpb(i).eq.allihpb(imin) .or. &
20189 alljhpb(i).eq.allihpb(imin) .or. &
20190 allihpb(i).eq.alljhpb(imin) .or. &
20191 alljhpb(i).eq.alljhpb(imin))) then
20198 !mc write(iout,*)"ALLNSS ",allnss,(allihpb(i),alljhpb(i),i=1,allnss)
20202 if (allflag(i).eq.1) then
20204 newihpb(newnss)=allihpb(i)
20205 newjhpb(newnss)=alljhpb(i)
20210 if (nfgtasks.gt.1)then
20212 call MPI_Reduce(newnss,g_newnss,1,&
20213 MPI_INTEGER,MPI_SUM,king,FG_COMM,IERR)
20214 call MPI_Gather(newnss,1,MPI_INTEGER,&
20215 i_newnss,1,MPI_INTEGER,king,FG_COMM,IERR)
20217 do i=1,nfgtasks-1,1
20218 displ(i)=i_newnss(i-1)+displ(i-1)
20220 call MPI_Gatherv(newihpb,newnss,MPI_INTEGER,&
20221 g_newihpb,i_newnss,displ,MPI_INTEGER,&
20223 call MPI_Gatherv(newjhpb,newnss,MPI_INTEGER,&
20224 g_newjhpb,i_newnss,displ,MPI_INTEGER,&
20226 if(fg_rank.eq.0) then
20227 ! print *,'g_newnss',g_newnss
20228 ! print *,'g_newihpb',(g_newihpb(i),i=1,g_newnss)
20229 ! print *,'g_newjhpb',(g_newjhpb(i),i=1,g_newnss)
20232 newihpb(i)=g_newihpb(i)
20233 newjhpb(i)=g_newjhpb(i)
20241 !mc write(iout,*)"NEWNSS ",newnss,(newihpb(i),newjhpb(i),i=1,newnss)
20242 ! print *,newnss,nss,maxdim
20248 if (idssb(i).eq.newihpb(j) .and. &
20249 jdssb(i).eq.newjhpb(j)) found=.true.
20251 #if .not. defined(WHAM_RUN) && .not. defined(CLUSTER)
20252 ! write(iout,*) "found",found,i,j
20253 if (.not.found.and.fg_rank.eq.0) &
20254 write(iout,'(a15,f12.2,f8.1,2i5)') &
20255 "SSBOND_BREAK",totT,t_bath,idssb(i),jdssb(i)
20263 if (newihpb(i).eq.idssb(j) .and. &
20264 newjhpb(i).eq.jdssb(j)) found=.true.
20266 #if .not. defined(WHAM_RUN) && .not. defined(CLUSTER)
20267 ! write(iout,*) "found",found,i,j
20268 if (.not.found.and.fg_rank.eq.0) &
20269 write(iout,'(a15,f12.2,f8.1,2i5)') &
20270 "SSBOND_FORM",totT,t_bath,newihpb(i),newjhpb(i)
20273 !#if .not. defined(WHAM_RUN) && .not. defined(CLUSTER)
20276 idssb(i)=newihpb(i)
20277 jdssb(i)=newjhpb(i)
20284 end subroutine dyn_set_nss
20285 ! Lipid transfer energy function
20286 subroutine Eliptransfer(eliptran)
20287 !C this is done by Adasko
20288 !C print *,"wchodze"
20289 !C structure of box:
20291 !C--bordliptop-- buffore starts
20292 !C--bufliptop--- here true lipid starts
20294 !C--buflipbot--- lipid ends buffore starts
20295 !C--bordlipbot--buffore ends
20296 real(kind=8) :: fracinbuf,eliptran,sslip,positi,ssgradlip
20299 ! print *, "I am in eliptran"
20300 do i=ilip_start,ilip_end
20302 if ((itype(i,1).eq.ntyp1).or.(itype(i+1,1).eq.ntyp1).or.(i.eq.nres))&
20305 positi=(mod(((c(3,i)+c(3,i+1))/2.0d0),boxzsize))
20306 if (positi.le.0.0) positi=positi+boxzsize
20308 !C first for peptide groups
20309 !c for each residue check if it is in lipid or lipid water border area
20310 if ((positi.gt.bordlipbot) &
20311 .and.(positi.lt.bordliptop)) then
20312 !C the energy transfer exist
20313 if (positi.lt.buflipbot) then
20314 !C what fraction I am in
20316 ((positi-bordlipbot)/lipbufthick)
20317 !C lipbufthick is thickenes of lipid buffore
20318 sslip=sscalelip(fracinbuf)
20319 ssgradlip=-sscagradlip(fracinbuf)/lipbufthick
20320 eliptran=eliptran+sslip*pepliptran
20321 gliptranc(3,i)=gliptranc(3,i)+ssgradlip*pepliptran/2.0d0
20322 gliptranc(3,i-1)=gliptranc(3,i-1)+ssgradlip*pepliptran/2.0d0
20323 !C gliptranc(3,i-2)=gliptranc(3,i)+ssgradlip*pepliptran
20325 !C print *,"doing sccale for lower part"
20326 !C print *,i,sslip,fracinbuf,ssgradlip
20327 elseif (positi.gt.bufliptop) then
20328 fracinbuf=1.0d0-((bordliptop-positi)/lipbufthick)
20329 sslip=sscalelip(fracinbuf)
20330 ssgradlip=sscagradlip(fracinbuf)/lipbufthick
20331 eliptran=eliptran+sslip*pepliptran
20332 gliptranc(3,i)=gliptranc(3,i)+ssgradlip*pepliptran/2.0d0
20333 gliptranc(3,i-1)=gliptranc(3,i-1)+ssgradlip*pepliptran/2.0d0
20334 !C gliptranc(3,i-2)=gliptranc(3,i)+ssgradlip*pepliptran
20335 !C print *, "doing sscalefor top part"
20336 !C print *,i,sslip,fracinbuf,ssgradlip
20338 eliptran=eliptran+pepliptran
20339 !C print *,"I am in true lipid"
20342 !C eliptran=elpitran+0.0 ! I am in water
20344 if (energy_dec) write(iout,*) i,"eliptran=",eliptran,positi,sslip
20346 ! here starts the side chain transfer
20347 do i=ilip_start,ilip_end
20348 if (itype(i,1).eq.ntyp1) cycle
20349 positi=(mod(c(3,i+nres),boxzsize))
20350 if (positi.le.0) positi=positi+boxzsize
20351 !C print *,mod(c(3,i+nres),boxzsize),bordlipbot,bordliptop
20352 !c for each residue check if it is in lipid or lipid water border area
20353 !C respos=mod(c(3,i+nres),boxzsize)
20354 !C print *,positi,bordlipbot,buflipbot
20355 if ((positi.gt.bordlipbot) &
20356 .and.(positi.lt.bordliptop)) then
20357 !C the energy transfer exist
20358 if (positi.lt.buflipbot) then
20360 ((positi-bordlipbot)/lipbufthick)
20361 !C lipbufthick is thickenes of lipid buffore
20362 sslip=sscalelip(fracinbuf)
20363 ssgradlip=-sscagradlip(fracinbuf)/lipbufthick
20364 eliptran=eliptran+sslip*liptranene(itype(i,1))
20365 gliptranx(3,i)=gliptranx(3,i) &
20366 +ssgradlip*liptranene(itype(i,1))
20367 gliptranc(3,i-1)= gliptranc(3,i-1) &
20368 +ssgradlip*liptranene(itype(i,1))
20369 !C print *,"doing sccale for lower part"
20370 elseif (positi.gt.bufliptop) then
20372 ((bordliptop-positi)/lipbufthick)
20373 sslip=sscalelip(fracinbuf)
20374 ssgradlip=sscagradlip(fracinbuf)/lipbufthick
20375 eliptran=eliptran+sslip*liptranene(itype(i,1))
20376 gliptranx(3,i)=gliptranx(3,i) &
20377 +ssgradlip*liptranene(itype(i,1))
20378 gliptranc(3,i-1)= gliptranc(3,i-1) &
20379 +ssgradlip*liptranene(itype(i,1))
20380 !C print *, "doing sscalefor top part",sslip,fracinbuf
20382 eliptran=eliptran+liptranene(itype(i,1))
20383 !C print *,"I am in true lipid"
20385 endif ! if in lipid or buffor
20387 !C eliptran=elpitran+0.0 ! I am in water
20388 if (energy_dec) write(iout,*) i,"eliptran=",eliptran
20391 end subroutine Eliptransfer
20392 !----------------------------------NANO FUNCTIONS
20393 !C-----------------------------------------------------------------------
20394 !C-----------------------------------------------------------
20395 !C This subroutine is to mimic the histone like structure but as well can be
20396 !C utilizet to nanostructures (infinit) small modification has to be used to
20397 !C make it finite (z gradient at the ends has to be changes as well as the x,y
20398 !C gradient has to be modified at the ends
20399 !C The energy function is Kihara potential
20400 !C E=4esp*((sigma/(r-r0))^12 - (sigma/(r-r0))^6)
20401 !C 4eps is depth of well sigma is r_minimum r is distance from center of tube
20402 !C and r0 is the excluded size of nanotube (can be set to 0 if we want just a
20403 !C simple Kihara potential
20404 subroutine calctube(Etube)
20405 real(kind=8),dimension(3) :: vectube
20406 real(kind=8) :: Etube,xtemp,xminact,yminact,&
20407 ytemp,xmin,ymin,tub_r,rdiff,rdiff6,fac,positi, &
20408 sc_aa_tube,sc_bb_tube
20411 do i=itube_start,itube_end
20413 enetube(i+nres)=0.0d0
20415 !C first we calculate the distance from tube center
20417 do i=itube_start,itube_end
20418 !C lets ommit dummy atoms for now
20419 if ((itype(i,1).eq.ntyp1).or.(itype(i+1,1).eq.ntyp1)) cycle
20420 !C now calculate distance from center of tube and direction vectors
20423 ! Find minimum distance in periodic box
20425 vectube(1)=mod((c(1,i)+c(1,i+1))/2.0d0,boxxsize)
20426 vectube(1)=vectube(1)+boxxsize*j
20427 vectube(2)=mod((c(2,i)+c(2,i+1))/2.0d0,boxysize)
20428 vectube(2)=vectube(2)+boxysize*j
20429 xminact=abs(vectube(1)-tubecenter(1))
20430 yminact=abs(vectube(2)-tubecenter(2))
20431 if (xmin.gt.xminact) then
20435 if (ymin.gt.yminact) then
20442 vectube(1)=vectube(1)-tubecenter(1)
20443 vectube(2)=vectube(2)-tubecenter(2)
20445 !C print *,"x",(c(1,i)+c(1,i+1))/2.0d0,tubecenter(1)
20446 !C print *,"y",(c(2,i)+c(2,i+1))/2.0d0,tubecenter(2)
20448 !C as the tube is infinity we do not calculate the Z-vector use of Z
20451 !C now calculte the distance
20452 tub_r=dsqrt(vectube(1)**2+vectube(2)**2+vectube(3)**2)
20453 !C now normalize vector
20454 vectube(1)=vectube(1)/tub_r
20455 vectube(2)=vectube(2)/tub_r
20456 !C calculte rdiffrence between r and r0
20459 rdiff6=rdiff**6.0d0
20460 !C for vectorization reasons we will sumup at the end to avoid depenence of previous
20461 enetube(i)=pep_aa_tube/rdiff6**2.0d0+pep_bb_tube/rdiff6
20462 !C write(iout,*) "TU13",i,rdiff6,enetube(i)
20463 !C print *,rdiff,rdiff6,pep_aa_tube
20464 !C pep_aa_tube and pep_bb_tube are precomputed values A=4eps*sigma^12 B=4eps*sigma^6
20465 !C now we calculate gradient
20466 fac=(-12.0d0*pep_aa_tube/rdiff6- &
20467 6.0d0*pep_bb_tube)/rdiff6/rdiff
20468 !C write(iout,'(a5,i4,f12.1,3f12.5)') "TU13",i,rdiff6,enetube(i),
20470 !C now direction of gg_tube vector
20472 gg_tube(j,i-1)=gg_tube(j,i-1)+vectube(j)*fac/2.0d0
20473 gg_tube(j,i)=gg_tube(j,i)+vectube(j)*fac/2.0d0
20476 !C basically thats all code now we split for side-chains (REMEMBER to sum up at the END)
20477 !C print *,gg_tube(1,0),"TU"
20480 do i=itube_start,itube_end
20481 !C Lets not jump over memory as we use many times iti
20483 !C lets ommit dummy atoms for now
20484 if ((iti.eq.ntyp1) &
20485 !C in UNRES uncomment the line below as GLY has no side-chain...
20491 vectube(1)=mod((c(1,i+nres)),boxxsize)
20492 vectube(1)=vectube(1)+boxxsize*j
20493 vectube(2)=mod((c(2,i+nres)),boxysize)
20494 vectube(2)=vectube(2)+boxysize*j
20496 xminact=abs(vectube(1)-tubecenter(1))
20497 yminact=abs(vectube(2)-tubecenter(2))
20498 if (xmin.gt.xminact) then
20502 if (ymin.gt.yminact) then
20509 !C write(iout,*), "tututu", vectube(1),tubecenter(1),vectube(2),
20511 vectube(1)=vectube(1)-tubecenter(1)
20512 vectube(2)=vectube(2)-tubecenter(2)
20514 !C as the tube is infinity we do not calculate the Z-vector use of Z
20517 !C now calculte the distance
20518 tub_r=dsqrt(vectube(1)**2+vectube(2)**2+vectube(3)**2)
20519 !C now normalize vector
20520 vectube(1)=vectube(1)/tub_r
20521 vectube(2)=vectube(2)/tub_r
20523 !C calculte rdiffrence between r and r0
20526 rdiff6=rdiff**6.0d0
20527 !C for vectorization reasons we will sumup at the end to avoid depenence of previous
20528 sc_aa_tube=sc_aa_tube_par(iti)
20529 sc_bb_tube=sc_bb_tube_par(iti)
20530 enetube(i+nres)=sc_aa_tube/rdiff6**2.0d0+sc_bb_tube/rdiff6
20531 fac=-12.0d0*sc_aa_tube/rdiff6**2.0d0/rdiff- &
20532 6.0d0*sc_bb_tube/rdiff6/rdiff
20533 !C now direction of gg_tube vector
20535 gg_tube_SC(j,i)=gg_tube_SC(j,i)+vectube(j)*fac
20536 gg_tube(j,i-1)=gg_tube(j,i-1)+vectube(j)*fac
20539 do i=itube_start,itube_end
20540 Etube=Etube+enetube(i)+enetube(i+nres)
20542 !C print *,"ETUBE", etube
20544 end subroutine calctube
20545 !C TO DO 1) add to total energy
20546 !C 2) add to gradient summation
20547 !C 3) add reading parameters (AND of course oppening of PARAM file)
20548 !C 4) add reading the center of tube
20550 !C 6) add to zerograd
20551 !C 7) allocate matrices
20554 !C-----------------------------------------------------------------------
20555 !C-----------------------------------------------------------
20556 !C This subroutine is to mimic the histone like structure but as well can be
20557 !C utilizet to nanostructures (infinit) small modification has to be used to
20558 !C make it finite (z gradient at the ends has to be changes as well as the x,y
20559 !C gradient has to be modified at the ends
20560 !C The energy function is Kihara potential
20561 !C E=4esp*((sigma/(r-r0))^12 - (sigma/(r-r0))^6)
20562 !C 4eps is depth of well sigma is r_minimum r is distance from center of tube
20563 !C and r0 is the excluded size of nanotube (can be set to 0 if we want just a
20564 !C simple Kihara potential
20565 subroutine calctube2(Etube)
20566 real(kind=8),dimension(3) :: vectube
20567 real(kind=8) :: Etube,xtemp,xminact,yminact,&
20568 ytemp,xmin,ymin,tub_r,rdiff,rdiff6,fac,positi,fracinbuf,&
20569 sstube,ssgradtube,sc_aa_tube,sc_bb_tube
20572 do i=itube_start,itube_end
20574 enetube(i+nres)=0.0d0
20576 !C first we calculate the distance from tube center
20577 !C first sugare-phosphate group for NARES this would be peptide group
20579 do i=itube_start,itube_end
20580 !C lets ommit dummy atoms for now
20582 if ((itype(i,1).eq.ntyp1).or.(itype(i+1,1).eq.ntyp1)) cycle
20583 !C now calculate distance from center of tube and direction vectors
20584 !C vectube(1)=mod((c(1,i)+c(1,i+1))/2.0d0,boxxsize)
20585 !C if (vectube(1).lt.0) vectube(1)=vectube(1)+boxxsize
20586 !C vectube(2)=mod((c(2,i)+c(2,i+1))/2.0d0,boxysize)
20587 !C if (vectube(2).lt.0) vectube(2)=vectube(2)+boxysize
20591 vectube(1)=mod((c(1,i)+c(1,i+1))/2.0d0,boxxsize)
20592 vectube(1)=vectube(1)+boxxsize*j
20593 vectube(2)=mod((c(2,i)+c(2,i+1))/2.0d0,boxysize)
20594 vectube(2)=vectube(2)+boxysize*j
20596 xminact=abs(vectube(1)-tubecenter(1))
20597 yminact=abs(vectube(2)-tubecenter(2))
20598 if (xmin.gt.xminact) then
20602 if (ymin.gt.yminact) then
20609 vectube(1)=vectube(1)-tubecenter(1)
20610 vectube(2)=vectube(2)-tubecenter(2)
20612 !C print *,"x",(c(1,i)+c(1,i+1))/2.0d0,tubecenter(1)
20613 !C print *,"y",(c(2,i)+c(2,i+1))/2.0d0,tubecenter(2)
20615 !C as the tube is infinity we do not calculate the Z-vector use of Z
20618 !C now calculte the distance
20619 tub_r=dsqrt(vectube(1)**2+vectube(2)**2+vectube(3)**2)
20620 !C now normalize vector
20621 vectube(1)=vectube(1)/tub_r
20622 vectube(2)=vectube(2)/tub_r
20623 !C calculte rdiffrence between r and r0
20626 rdiff6=rdiff**6.0d0
20627 !C THIS FRAGMENT MAKES TUBE FINITE
20628 positi=mod((c(3,i)+c(3,i+1))/2.0d0,boxzsize)
20629 if (positi.le.0) positi=positi+boxzsize
20630 !C print *,mod(c(3,i+nres),boxzsize),bordlipbot,bordliptop
20631 !c for each residue check if it is in lipid or lipid water border area
20632 !C respos=mod(c(3,i+nres),boxzsize)
20633 !C print *,positi,bordtubebot,buftubebot,bordtubetop
20634 if ((positi.gt.bordtubebot) &
20635 .and.(positi.lt.bordtubetop)) then
20636 !C the energy transfer exist
20637 if (positi.lt.buftubebot) then
20639 ((positi-bordtubebot)/tubebufthick)
20640 !C lipbufthick is thickenes of lipid buffore
20641 sstube=sscalelip(fracinbuf)
20642 ssgradtube=-sscagradlip(fracinbuf)/tubebufthick
20643 !C print *,ssgradtube, sstube,tubetranene(itype(i,1))
20644 enetube(i)=enetube(i)+sstube*tubetranenepep
20645 !C gg_tube_SC(3,i)=gg_tube_SC(3,i)
20646 !C &+ssgradtube*tubetranene(itype(i,1))
20647 !C gg_tube(3,i-1)= gg_tube(3,i-1)
20648 !C &+ssgradtube*tubetranene(itype(i,1))
20649 !C print *,"doing sccale for lower part"
20650 elseif (positi.gt.buftubetop) then
20652 ((bordtubetop-positi)/tubebufthick)
20653 sstube=sscalelip(fracinbuf)
20654 ssgradtube=sscagradlip(fracinbuf)/tubebufthick
20655 enetube(i)=enetube(i)+sstube*tubetranenepep
20656 !C gg_tube_SC(3,i)=gg_tube_SC(3,i)
20657 !C &+ssgradtube*tubetranene(itype(i,1))
20658 !C gg_tube(3,i-1)= gg_tube(3,i-1)
20659 !C &+ssgradtube*tubetranene(itype(i,1))
20660 !C print *, "doing sscalefor top part",sslip,fracinbuf
20664 enetube(i)=enetube(i)+sstube*tubetranenepep
20665 !C print *,"I am in true lipid"
20669 !C ssgradtube=0.0d0
20671 endif ! if in lipid or buffor
20673 !C for vectorization reasons we will sumup at the end to avoid depenence of previous
20674 enetube(i)=enetube(i)+sstube* &
20675 (pep_aa_tube/rdiff6**2.0d0+pep_bb_tube/rdiff6)
20676 !C write(iout,*) "TU13",i,rdiff6,enetube(i)
20677 !C print *,rdiff,rdiff6,pep_aa_tube
20678 !C pep_aa_tube and pep_bb_tube are precomputed values A=4eps*sigma^12 B=4eps*sigma^6
20679 !C now we calculate gradient
20680 fac=(-12.0d0*pep_aa_tube/rdiff6- &
20681 6.0d0*pep_bb_tube)/rdiff6/rdiff*sstube
20682 !C write(iout,'(a5,i4,f12.1,3f12.5)') "TU13",i,rdiff6,enetube(i),
20685 !C now direction of gg_tube vector
20687 gg_tube(j,i-1)=gg_tube(j,i-1)+vectube(j)*fac/2.0d0
20688 gg_tube(j,i)=gg_tube(j,i)+vectube(j)*fac/2.0d0
20690 gg_tube(3,i)=gg_tube(3,i) &
20691 +ssgradtube*enetube(i)/sstube/2.0d0
20692 gg_tube(3,i-1)= gg_tube(3,i-1) &
20693 +ssgradtube*enetube(i)/sstube/2.0d0
20696 !C basically thats all code now we split for side-chains (REMEMBER to sum up at the END)
20697 !C print *,gg_tube(1,0),"TU"
20698 do i=itube_start,itube_end
20699 !C Lets not jump over memory as we use many times iti
20701 !C lets ommit dummy atoms for now
20702 if ((iti.eq.ntyp1) &
20703 !!C in UNRES uncomment the line below as GLY has no side-chain...
20706 vectube(1)=c(1,i+nres)
20707 vectube(1)=mod(vectube(1),boxxsize)
20708 if (vectube(1).lt.0) vectube(1)=vectube(1)+boxxsize
20709 vectube(2)=c(2,i+nres)
20710 vectube(2)=mod(vectube(2),boxysize)
20711 if (vectube(2).lt.0) vectube(2)=vectube(2)+boxysize
20713 vectube(1)=vectube(1)-tubecenter(1)
20714 vectube(2)=vectube(2)-tubecenter(2)
20715 !C THIS FRAGMENT MAKES TUBE FINITE
20716 positi=(mod(c(3,i+nres),boxzsize))
20717 if (positi.le.0) positi=positi+boxzsize
20718 !C print *,mod(c(3,i+nres),boxzsize),bordlipbot,bordliptop
20719 !c for each residue check if it is in lipid or lipid water border area
20720 !C respos=mod(c(3,i+nres),boxzsize)
20721 !C print *,positi,bordtubebot,buftubebot,bordtubetop
20723 if ((positi.gt.bordtubebot) &
20724 .and.(positi.lt.bordtubetop)) then
20725 !C the energy transfer exist
20726 if (positi.lt.buftubebot) then
20728 ((positi-bordtubebot)/tubebufthick)
20729 !C lipbufthick is thickenes of lipid buffore
20730 sstube=sscalelip(fracinbuf)
20731 ssgradtube=-sscagradlip(fracinbuf)/tubebufthick
20732 !C print *,ssgradtube, sstube,tubetranene(itype(i,1))
20733 enetube(i+nres)=enetube(i+nres)+sstube*tubetranene(itype(i,1))
20734 !C gg_tube_SC(3,i)=gg_tube_SC(3,i)
20735 !C &+ssgradtube*tubetranene(itype(i,1))
20736 !C gg_tube(3,i-1)= gg_tube(3,i-1)
20737 !C &+ssgradtube*tubetranene(itype(i,1))
20738 !C print *,"doing sccale for lower part"
20739 elseif (positi.gt.buftubetop) then
20741 ((bordtubetop-positi)/tubebufthick)
20743 sstube=sscalelip(fracinbuf)
20744 ssgradtube=sscagradlip(fracinbuf)/tubebufthick
20745 enetube(i+nres)=enetube(i+nres)+sstube*tubetranene(itype(i,1))
20746 !C gg_tube_SC(3,i)=gg_tube_SC(3,i)
20747 !C &+ssgradtube*tubetranene(itype(i,1))
20748 !C gg_tube(3,i-1)= gg_tube(3,i-1)
20749 !C &+ssgradtube*tubetranene(itype(i,1))
20750 !C print *, "doing sscalefor top part",sslip,fracinbuf
20754 enetube(i+nres)=enetube(i+nres)+sstube*tubetranene(itype(i,1))
20755 !C print *,"I am in true lipid"
20759 !C ssgradtube=0.0d0
20761 endif ! if in lipid or buffor
20762 !CEND OF FINITE FRAGMENT
20763 !C as the tube is infinity we do not calculate the Z-vector use of Z
20766 !C now calculte the distance
20767 tub_r=dsqrt(vectube(1)**2+vectube(2)**2+vectube(3)**2)
20768 !C now normalize vector
20769 vectube(1)=vectube(1)/tub_r
20770 vectube(2)=vectube(2)/tub_r
20771 !C calculte rdiffrence between r and r0
20774 rdiff6=rdiff**6.0d0
20775 !C for vectorization reasons we will sumup at the end to avoid depenence of previous
20776 sc_aa_tube=sc_aa_tube_par(iti)
20777 sc_bb_tube=sc_bb_tube_par(iti)
20778 enetube(i+nres)=(sc_aa_tube/rdiff6**2.0d0+sc_bb_tube/rdiff6)&
20779 *sstube+enetube(i+nres)
20780 !C pep_aa_tube and pep_bb_tube are precomputed values A=4eps*sigma^12 B=4eps*sigma^6
20781 !C now we calculate gradient
20782 fac=(-12.0d0*sc_aa_tube/rdiff6**2.0d0/rdiff-&
20783 6.0d0*sc_bb_tube/rdiff6/rdiff)*sstube
20784 !C now direction of gg_tube vector
20786 gg_tube_SC(j,i)=gg_tube_SC(j,i)+vectube(j)*fac
20787 gg_tube(j,i-1)=gg_tube(j,i-1)+vectube(j)*fac
20789 gg_tube_SC(3,i)=gg_tube_SC(3,i) &
20790 +ssgradtube*enetube(i+nres)/sstube
20791 gg_tube(3,i-1)= gg_tube(3,i-1) &
20792 +ssgradtube*enetube(i+nres)/sstube
20795 do i=itube_start,itube_end
20796 Etube=Etube+enetube(i)+enetube(i+nres)
20798 !C print *,"ETUBE", etube
20800 end subroutine calctube2
20801 !=====================================================================================================================================
20802 subroutine calcnano(Etube)
20803 use MD_data, only:totTafm
20804 real(kind=8),dimension(3) :: vectube,cm
20806 real(kind=8) :: Etube,xtemp,xminact,yminact,&
20807 ytemp,xmin,ymin,tub_r,rdiff,rdiff6,fac,denominator,faccav,&
20808 sc_aa_tube,sc_bb_tube,zmin,ztemp,zminact,tubezcenter,xi,yi,zi!,&
20810 real(kind=8) :: eps,sig,aa_tub_lip,bb_tub_lip
20811 integer:: i,j,iti,r,ilol,ityp
20814 call to_box(tubecenter(1),tubecenter(2),tubecenter(3))
20815 ! print *,itube_start,itube_end,"poczatek"
20816 do i=itube_start,itube_end
20818 enetube(i+nres)=0.0d0
20820 !C first we calculate the distance from tube center
20821 !C first sugare-phosphate group for NARES this would be peptide group
20823 do i=itube_start,itube_end
20824 !C lets ommit dummy atoms for now
20825 if ((itype(i,1).eq.ntyp1).or.(itype(i+1,1).eq.ntyp1)) cycle
20826 !C now calculate distance from center of tube and direction vectors
20829 xi=(c(1,i)+c(1,i+1))/2.0d0
20830 yi=(c(2,i)+c(2,i+1))/2.0d0
20831 zi=((c(3,i)+c(3,i+1))/2.0d0)
20832 call to_box(xi,yi,zi)
20833 ! tubezcenter=totTafm*velNANOconst+tubecenter(3)
20835 vectube(1)=boxshift(xi-tubecenter(1),boxxsize)
20836 vectube(2)=boxshift(yi-tubecenter(2),boxysize)
20837 vectube(3)=boxshift(zi-tubecenter(3),boxzsize)
20839 !C print *,"x",(c(1,i)+c(1,i+1))/2.0d0,tubecenter(1)
20840 !C print *,"y",(c(2,i)+c(2,i+1))/2.0d0,tubecenter(2)
20841 !C as the tube is infinity we do not calculate the Z-vector use of Z
20843 !C vectube(3)=0.0d0
20844 !C now calculte the distance
20845 tub_r=dsqrt(vectube(1)**2+vectube(2)**2+vectube(3)**2)
20846 !C now normalize vector
20847 vectube(1)=vectube(1)/tub_r
20848 vectube(2)=vectube(2)/tub_r
20849 vectube(3)=vectube(3)/tub_r
20850 !C calculte rdiffrence between r and r0
20853 rdiff6=rdiff**6.0d0
20854 !C for vectorization reasons we will sumup at the end to avoid depenence of previous
20855 enetube(i)=pep_aa_tube/rdiff6**2.0d0+pep_bb_tube/rdiff6
20856 !C write(iout,*) "TU13",i,rdiff6,enetube(i)
20857 !C print *,rdiff,rdiff6,pep_aa_tube
20858 !C pep_aa_tube and pep_bb_tube are precomputed values A=4eps*sigma^12 B=4eps*sigma^6
20859 !C now we calculate gradient
20860 fac=(-12.0d0*pep_aa_tube/rdiff6- &
20861 6.0d0*pep_bb_tube)/rdiff6/rdiff
20862 !C write(iout,'(a5,i4,f12.1,3f12.5)') "TU13",i,rdiff6,enetube(i),
20864 if (acavtubpep.eq.0.0d0) then
20869 denominator=(1.0d0+dcavtubpep*rdiff6*rdiff6)
20871 (bcavtubpep*rdiff+acavtubpep*dsqrt(rdiff)+ccavtubpep) &
20874 faccav=((bcavtubpep*1.0d0+acavtubpep/2.0d0/dsqrt(rdiff)) &
20875 *denominator-(bcavtubpep*rdiff+acavtubpep*dsqrt(rdiff) &
20876 +ccavtubpep)*rdiff6**2.0d0/rdiff*dcavtubpep*12.0d0) &
20877 /denominator**2.0d0
20882 if (energy_dec) write(iout,*),i,rdiff,enetube(i),enecavtube(i)
20884 gg_tube(j,i-1)=gg_tube(j,i-1)+vectube(j)*fac/2.0d0
20885 gg_tube(j,i)=gg_tube(j,i)+vectube(j)*fac/2.0d0
20889 do i=itube_start,itube_end
20890 enecavtube(i)=0.0d0
20891 !C Lets not jump over memory as we use many times iti
20893 !C lets ommit dummy atoms for now
20894 if ((iti.eq.ntyp1) &
20895 !C in UNRES uncomment the line below as GLY has no side-chain...
20901 call to_box(xi,yi,zi)
20902 tubezcenter=totTafm*velNANOconst+tubecenter(3)
20904 vectube(1)=boxshift(xi-tubecenter(1),boxxsize)
20905 vectube(2)=boxshift(yi-tubecenter(2),boxysize)
20906 vectube(3)=boxshift(zi-tubecenter(3),boxzsize)
20909 !C now calculte the distance
20910 tub_r=dsqrt(vectube(1)**2+vectube(2)**2+vectube(3)**2)
20911 !C now normalize vector
20912 vectube(1)=vectube(1)/tub_r
20913 vectube(2)=vectube(2)/tub_r
20914 vectube(3)=vectube(3)/tub_r
20916 !C calculte rdiffrence between r and r0
20919 rdiff6=rdiff**6.0d0
20920 sc_aa_tube=sc_aa_tube_par(iti)
20921 sc_bb_tube=sc_bb_tube_par(iti)
20922 enetube(i+nres)=sc_aa_tube/rdiff6**2.0d0+sc_bb_tube/rdiff6
20923 !C enetube(i+nres)=0.0d0
20924 !C pep_aa_tube and pep_bb_tube are precomputed values A=4eps*sigma^12 B=4eps*sigma^6
20925 !C now we calculate gradient
20926 fac=-12.0d0*sc_aa_tube/rdiff6**2.0d0/rdiff- &
20927 6.0d0*sc_bb_tube/rdiff6/rdiff
20929 !C now direction of gg_tube vector
20930 !C Now cavity term E=a(x+bsqrt(x)+c)/(1+dx^12)
20931 if (acavtub(iti).eq.0.0d0) then
20933 enecavtube(i+nres)=0.0d0
20936 denominator=(1.0d0+dcavtub(iti)*rdiff6*rdiff6)
20937 enecavtube(i+nres)= &
20938 (bcavtub(iti)*rdiff+acavtub(iti)*dsqrt(rdiff)+ccavtub(iti)) &
20940 !C enecavtube(i)=0.0
20941 faccav=((bcavtub(iti)*1.0d0+acavtub(iti)/2.0d0/dsqrt(rdiff)) &
20942 *denominator-(bcavtub(iti)*rdiff+acavtub(iti)*dsqrt(rdiff) &
20943 +ccavtub(iti))*rdiff6**2.0d0/rdiff*dcavtub(iti)*12.0d0) &
20944 /denominator**2.0d0
20949 !C print *,"TUT",i,iti,rdiff,rdiff6,acavtub(iti),denominator,
20950 !C & enecavtube(i),faccav
20951 !C print *,"licz=",
20952 !C & (bcavtub(iti)*rdiff+acavtub(iti)*sqrt(rdiff)+ccavtub(iti))
20953 !C print *,"finene=",enetube(i+nres)+enecavtube(i)
20955 gg_tube_SC(j,i)=gg_tube_SC(j,i)+vectube(j)*fac
20956 gg_tube(j,i-1)=gg_tube(j,i-1)+vectube(j)*fac
20958 if (energy_dec) write(iout,*),i,rdiff,enetube(i+nres),enecavtube(i+nres)
20963 do i=itube_start,itube_end
20964 Etube=Etube+enetube(i)+enetube(i+nres)+enecavtube(i) &
20965 +enecavtube(i+nres)
20968 do i=ilipbond_start_tub,ilipbond_end_tub
20970 ! print *,"ilipbond_start",ilipbond_start,i,ityp
20971 if (ityp.gt.ntyp_molec(4)) cycle
20972 !C now calculate distance from center of tube and direction vectors
20973 eps=lip_sig(ityp,18)*4.0d0
20974 sig=lip_sig(ityp,18)
20975 aa_tub_lip=eps/(sig**12)
20976 bb_tub_lip=eps/(sig**6)
20981 call to_box(xi,yi,zi)
20982 ! tubezcenter=totTafm*velNANOconst+tubecenter(3)
20984 vectube(1)=boxshift(xi-tubecenter(1),boxxsize)
20985 vectube(2)=boxshift(yi-tubecenter(2),boxysize)
20986 vectube(3)=boxshift(zi-tubecenter(3),boxzsize)
20988 !C print *,"x",(c(1,i)+c(1,i+1))/2.0d0,tubecenter(1)
20989 !C print *,"y",(c(2,i)+c(2,i+1))/2.0d0,tubecenter(2)
20990 !C as the tube is infinity we do not calculate the Z-vector use of Z
20992 !C vectube(3)=0.0d0
20993 !C now calculte the distance
20994 tub_r=dsqrt(vectube(1)**2+vectube(2)**2+vectube(3)**2)
20995 !C now normalize vector
20996 vectube(1)=vectube(1)/tub_r
20997 vectube(2)=vectube(2)/tub_r
20998 vectube(3)=vectube(3)/tub_r
20999 !C calculte rdiffrence between r and r0
21002 rdiff6=rdiff**6.0d0
21003 !C for vectorization reasons we will sumup at the end to avoid depenence of previous
21004 enetube(i)=aa_tub_lip/rdiff6**2.0d0+bb_tub_lip/rdiff6
21005 Etube=Etube+enetube(i)
21006 !C write(iout,*) "TU13",i,rdiff6,enetube(i)
21007 !C print *,rdiff,rdiff6,pep_aa_tube
21008 !C pep_aa_tube and pep_bb_tube are precomputed values A=4eps*sigma^12 B=4eps*sigma^6
21009 !C now we calculate gradient
21010 fac=(-12.0d0*aa_tub_lip/rdiff6- &
21011 6.0d0*bb_tub_lip)/rdiff6/rdiff
21013 gg_tube(j,i-1)=gg_tube(j,i-1)+vectube(j)*fac
21015 if (energy_dec) write(iout,*),i,rdiff,enetube(i+nres)
21019 !-----------------------------------------------------------------------
21020 if (fg_rank.eq.0) then
21021 if (velNANOconst.ne.0) then
21028 cm(j)=cm(j)+c(j,ilol)
21032 cm(j)=cm(j)/inanomove
21034 vecsim=velNANOconst*totTafm+distnanoinit
21035 vectrue=cm(3)-tubecenter(3)
21036 etube=etube+0.5d0*forcenanoconst*( vectrue-vecsim)**2
21037 fac=forcenanoconst*(vectrue-vecsim)/inanomove
21040 gg_tube(3,ilol-1)=gg_tube(3,ilol-1)+fac
21045 ! print *,"begin", i,"a"
21048 ! rdiff6=rdiff**6.0d0
21049 ! sc_aa_tube=sc_aa_tube_par(i)
21050 ! sc_bb_tube=sc_bb_tube_par(i)
21051 ! enetube(i)=sc_aa_tube/rdiff6**2.0d0+sc_bb_tube/rdiff6
21052 ! denominator=(1.0d0+dcavtub(i)*rdiff6*rdiff6)
21054 ! (bcavtub(i)*rdiff+acavtub(i)*dsqrt(rdiff)+ccavtub(i)) &
21057 ! print '(5(f10.3,1x))',rdiff,enetube(i),enecavtube(i),enecavtube(i)+enetube(i)
21059 ! print *,"end",i,"a"
21061 !C print *,"ETUBE", etube
21063 end subroutine calcnano
21065 !===============================================
21066 !--------------------------------------------------------------------------------
21067 !C first for shielding is setting of function of side-chains
21069 subroutine set_shield_fac2
21070 real(kind=8) :: div77_81=0.974996043d0, &
21071 div4_81=0.2222222222d0
21072 real (kind=8) :: dist_pep_side,dist_side_calf,dist_pept_group, &
21073 scale_fac_dist,fac_help_scale,VofOverlap,VolumeTotal,costhet,&
21074 short,long,sinthet,costhet_fac,sh_frac_dist,rkprim,cosphi, &
21075 sinphi,cosphi_fac,pep_side0pept_group,cosalfa,fac_alfa_sin
21076 !C the vector between center of side_chain and peptide group
21077 real(kind=8),dimension(3) :: pep_side_long,side_calf, &
21078 pept_group,costhet_grad,cosphi_grad_long, &
21079 cosphi_grad_loc,pep_side_norm,side_calf_norm, &
21080 sh_frac_dist_grad,pep_side
21082 !C write(2,*) "ivec",ivec_start,ivec_end
21084 fac_shield(i)=0.0d0
21087 grad_shield(j,i)=0.0d0
21090 do i=ivec_start,ivec_end
21092 !C if ((itype(i,1).eq.ntyp1).and.itype(i+1,1).eq.ntyp1) cycle
21093 ! ishield_list(i)=0
21094 if ((itype(i,1).eq.ntyp1).and.itype(i+1,1).eq.ntyp1) cycle
21095 !Cif there two consequtive dummy atoms there is no peptide group between them
21096 !C the line below has to be changed for FGPROC>1
21099 if ((itype(k,1).eq.ntyp1).or.(itype(k,1).eq.10)) cycle
21103 !C first lets set vector conecting the ithe side-chain with kth side-chain
21104 pep_side(j)=c(j,k+nres)-(c(j,i)+c(j,i+1))/2.0d0
21105 !C pep_side(j)=2.0d0
21106 !C and vector conecting the side-chain with its proper calfa
21107 side_calf(j)=c(j,k+nres)-c(j,k)
21108 !C side_calf(j)=2.0d0
21109 pept_group(j)=c(j,i)-c(j,i+1)
21110 !C lets have their lenght
21111 dist_pep_side=pep_side(j)**2+dist_pep_side
21112 dist_side_calf=dist_side_calf+side_calf(j)**2
21113 dist_pept_group=dist_pept_group+pept_group(j)**2
21115 dist_pep_side=sqrt(dist_pep_side)
21116 dist_pept_group=sqrt(dist_pept_group)
21117 dist_side_calf=sqrt(dist_side_calf)
21119 pep_side_norm(j)=pep_side(j)/dist_pep_side
21120 side_calf_norm(j)=dist_side_calf
21122 !C now sscale fraction
21123 sh_frac_dist=-(dist_pep_side-rpp(1,1)-buff_shield)/buff_shield
21124 ! print *,buff_shield,"buff",sh_frac_dist
21126 if (sh_frac_dist.le.0.0) cycle
21127 !C print *,ishield_list(i),i
21128 !C If we reach here it means that this side chain reaches the shielding sphere
21129 !C Lets add him to the list for gradient
21130 ishield_list(i)=ishield_list(i)+1
21131 !C ishield_list is a list of non 0 side-chain that contribute to factor gradient
21132 !C this list is essential otherwise problem would be O3
21133 shield_list(ishield_list(i),i)=k
21134 !C Lets have the sscale value
21135 if (sh_frac_dist.gt.1.0) then
21136 scale_fac_dist=1.0d0
21138 sh_frac_dist_grad(j)=0.0d0
21141 scale_fac_dist=-sh_frac_dist*sh_frac_dist &
21142 *(2.0d0*sh_frac_dist-3.0d0)
21143 fac_help_scale=6.0d0*(sh_frac_dist-sh_frac_dist**2) &
21144 /dist_pep_side/buff_shield*0.5d0
21146 sh_frac_dist_grad(j)=fac_help_scale*pep_side(j)
21147 !C sh_frac_dist_grad(j)=0.0d0
21148 !C scale_fac_dist=1.0d0
21149 !C print *,"jestem",scale_fac_dist,fac_help_scale,
21150 !C & sh_frac_dist_grad(j)
21153 !C this is what is now we have the distance scaling now volume...
21154 short=short_r_sidechain(itype(k,1))
21155 long=long_r_sidechain(itype(k,1))
21156 costhet=1.0d0/dsqrt(1.0d0+short**2/dist_pep_side**2)
21157 sinthet=short/dist_pep_side*costhet
21158 ! print *,"SORT",short,long,sinthet,costhet
21159 !C now costhet_grad
21162 costhet_fac=costhet**3*short**2*(-0.5d0)/dist_pep_side**4
21163 !C sinthet_fac=costhet**2*0.5d0*(short**3/dist_pep_side**4*costhet
21164 !C & -short/dist_pep_side**2/costhet)
21165 !C costhet_fac=0.0d0
21167 costhet_grad(j)=costhet_fac*pep_side(j)
21169 !C remember for the final gradient multiply costhet_grad(j)
21170 !C for side_chain by factor -2 !
21171 !C fac alfa is angle between CB_k,CA_k, CA_i,CA_i+1
21172 !C pep_side0pept_group is vector multiplication
21173 pep_side0pept_group=0.0d0
21175 pep_side0pept_group=pep_side0pept_group+pep_side(j)*side_calf(j)
21177 cosalfa=(pep_side0pept_group/ &
21178 (dist_pep_side*dist_side_calf))
21179 fac_alfa_sin=1.0d0-cosalfa**2
21180 fac_alfa_sin=dsqrt(fac_alfa_sin)
21181 rkprim=fac_alfa_sin*(long-short)+short
21184 !C now costhet_grad
21185 cosphi=1.0d0/dsqrt(1.0d0+rkprim**2/dist_pep_side**2)
21187 cosphi_fac=cosphi**3*rkprim**2*(-0.5d0)/dist_pep_side**4
21188 sinphi=rkprim/dist_pep_side/dsqrt(1.0d0+rkprim**2/ &
21192 cosphi_grad_long(j)=cosphi_fac*pep_side(j) &
21193 +cosphi**3*0.5d0/dist_pep_side**2*(-rkprim) &
21194 *(long-short)/fac_alfa_sin*cosalfa/ &
21195 ((dist_pep_side*dist_side_calf))* &
21196 ((side_calf(j))-cosalfa* &
21197 ((pep_side(j)/dist_pep_side)*dist_side_calf))
21198 !C cosphi_grad_long(j)=0.0d0
21199 cosphi_grad_loc(j)=cosphi**3*0.5d0/dist_pep_side**2*(-rkprim) &
21200 *(long-short)/fac_alfa_sin*cosalfa &
21201 /((dist_pep_side*dist_side_calf))* &
21203 cosalfa*side_calf(j)/dist_side_calf*dist_pep_side)
21204 !C cosphi_grad_loc(j)=0.0d0
21206 !C print *,sinphi,sinthet
21207 VofOverlap=VSolvSphere/2.0d0*(1.0d0-dsqrt(1.0d0-sinphi*sinthet)) &
21210 !C now the gradient...
21212 grad_shield(j,i)=grad_shield(j,i) &
21213 !C gradient po skalowaniu
21214 +(sh_frac_dist_grad(j)*VofOverlap &
21215 !C gradient po costhet
21216 +scale_fac_dist*VSolvSphere/VSolvSphere_div/4.0d0* &
21217 (1.0d0/(-dsqrt(1.0d0-sinphi*sinthet))*( &
21218 sinphi/sinthet*costhet*costhet_grad(j) &
21219 +sinthet/sinphi*cosphi*cosphi_grad_long(j))) &
21221 !C grad_shield_side is Cbeta sidechain gradient
21222 grad_shield_side(j,ishield_list(i),i)=&
21223 (sh_frac_dist_grad(j)*-2.0d0&
21225 -scale_fac_dist*VSolvSphere/VSolvSphere_div/2.0d0*&
21226 (1.0d0/(-dsqrt(1.0d0-sinphi*sinthet))*(&
21227 sinphi/sinthet*costhet*costhet_grad(j)&
21228 +sinthet/sinphi*cosphi*cosphi_grad_long(j))) &
21230 ! print *, 1.0d0/(-dsqrt(1.0d0-sinphi*sinthet)),&
21232 ! +sinthet/sinphi,"HERE"
21233 grad_shield_loc(j,ishield_list(i),i)= &
21234 scale_fac_dist*VSolvSphere/VSolvSphere_div/2.0d0*&
21235 (1.0d0/(dsqrt(1.0d0-sinphi*sinthet))*(&
21236 sinthet/sinphi*cosphi*cosphi_grad_loc(j)&
21239 ! print *,grad_shield_loc(j,ishield_list(i),i)
21241 VolumeTotal=VolumeTotal+VofOverlap*scale_fac_dist
21243 fac_shield(i)=VolumeTotal*wshield+(1.0d0-wshield)
21245 ! write(2,*) "TOTAL VOLUME",i,itype(i,1),fac_shield(i)
21248 end subroutine set_shield_fac2
21249 !----------------------------------------------------------------------------
21250 ! SOUBROUTINE FOR AFM
21251 subroutine AFMvel(Eafmforce)
21252 use MD_data, only:totTafm
21253 real(kind=8),dimension(3) :: diffafm,cbeg,cend
21254 real(kind=8) :: afmdist,Eafmforce
21256 !C Only for check grad COMMENT if not used for checkgrad
21258 !C--------------------------------------------------------
21259 !C print *,"wchodze"
21264 if (afmbeg.eq.-1) then
21267 cbeg(j)=cbeg(j)+c(j,afmbegcentr(i))/nbegafmmat
21272 cbeg(j)=c(j,afmend)
21275 if (afmend.eq.-1) then
21278 cend(j)=cend(j)+c(j,afmendcentr(i))/nendafmmat
21282 cend(j)=c(j,afmend)
21286 diffafm(i)=cend(i)-cbeg(i)
21287 afmdist=afmdist+diffafm(i)**2
21289 afmdist=dsqrt(afmdist)
21291 Eafmforce=0.5d0*forceAFMconst &
21292 *(distafminit+totTafm*velAFMconst-afmdist)**2
21293 !C Eafmforce=-forceAFMconst*(dist-distafminit)
21294 if (afmend.eq.-1) then
21297 gradafm(j,afmendcentr(i)-1)=-forceAFMconst* &
21298 (distafminit+totTafm*velAFMconst-afmdist) &
21299 *diffafm(j)/afmdist/nendafmmat
21304 gradafm(i,afmend-1)=-forceAFMconst* &
21305 (distafminit+totTafm*velAFMconst-afmdist) &
21306 *diffafm(i)/afmdist
21309 if (afmbeg.eq.-1) then
21312 gradafm(i,afmbegcentr(i)-1)=forceAFMconst* &
21313 (distafminit+totTafm*velAFMconst-afmdist) &
21314 *diffafm(i)/afmdist
21319 gradafm(i,afmbeg-1)=forceAFMconst* &
21320 (distafminit+totTafm*velAFMconst-afmdist) &
21321 *diffafm(i)/afmdist
21324 ! print *,'AFM',Eafmforce,totTafm*velAFMconst,afmdist
21326 end subroutine AFMvel
21327 !---------------------------------------------------------
21328 subroutine AFMforce(Eafmforce)
21330 real(kind=8),dimension(3) :: diffafm
21331 ! real(kind=8) ::afmdist
21332 real(kind=8) :: afmdist,Eafmforce
21337 diffafm(i)=c(i,afmend)-c(i,afmbeg)
21338 afmdist=afmdist+diffafm(i)**2
21340 afmdist=dsqrt(afmdist)
21341 ! print *,afmdist,distafminit
21342 Eafmforce=-forceAFMconst*(afmdist-distafminit)
21344 gradafm(i,afmend-1)=-forceAFMconst*diffafm(i)/afmdist
21345 gradafm(i,afmbeg-1)=forceAFMconst*diffafm(i)/afmdist
21347 !C print *,'AFM',Eafmforce
21349 end subroutine AFMforce
21351 !-----------------------------------------------------------------------------
21353 subroutine read_ssHist
21356 ! include 'DIMENSIONS'
21357 ! include "DIMENSIONS.FREE"
21358 ! include 'COMMON.FREE'
21361 character(len=80) :: controlcard
21364 call card_concat(controlcard,.true.)
21365 read(controlcard,*) &
21366 dyn_ssHist(i,0),(dyn_ssHist(i,j),j=1,2*dyn_ssHist(i,0))
21370 end subroutine read_ssHist
21372 !-----------------------------------------------------------------------------
21373 integer function indmat(i,j)
21375 ! get the position of the jth ijth fragment of the chain coordinate system
21376 ! in the fromto array.
21379 indmat=((2*(nres-2)-i)*(i-1))/2+j-1
21381 end function indmat
21382 !-----------------------------------------------------------------------------
21383 real(kind=8) function sigm(x)
21389 !-----------------------------------------------------------------------------
21390 !-----------------------------------------------------------------------------
21391 subroutine alloc_ener_arrays
21392 !EL Allocation of arrays used by module energy
21393 use MD_data, only: mset
21394 !el local variables
21397 if(nres.lt.100) then
21399 elseif(nres.lt.200) then
21400 maxconts=10*nres ! Max. number of contacts per residue
21402 maxconts=10*nres ! (maxconts=maxres/4)
21404 maxcont=100*nres ! Max. number of SC contacts
21405 maxvar=6*nres ! Max. number of variables
21406 !el maxdim=(nres-1)*(nres-2)/2 ! Max. number of derivatives of virtual-bond
21407 maxdim=nres*(nres-2)/2 ! Max. number of derivatives of virtual-bond
21408 !----------------------
21409 ! arrays in subroutine init_int_table
21411 !el allocate(itask_cont_from(0:nfgtasks-1)) !(0:max_fg_procs-1)
21412 !el allocate(itask_cont_to(0:nfgtasks-1)) !(0:max_fg_procs-1)
21414 allocate(nint_gr(nres))
21415 allocate(nscp_gr(nres))
21416 allocate(ielstart(nres))
21417 allocate(ielend(nres))
21419 allocate(istart(nres,maxint_gr))
21420 allocate(iend(nres,maxint_gr))
21421 !(maxres,maxint_gr)
21422 allocate(iscpstart(nres,maxint_gr))
21423 allocate(iscpend(nres,maxint_gr))
21424 !(maxres,maxint_gr)
21425 allocate(ielstart_vdw(nres))
21426 allocate(ielend_vdw(nres))
21428 allocate(nint_gr_nucl(nres))
21429 allocate(nscp_gr_nucl(nres))
21430 allocate(ielstart_nucl(nres))
21431 allocate(ielend_nucl(nres))
21433 allocate(istart_nucl(nres,maxint_gr))
21434 allocate(iend_nucl(nres,maxint_gr))
21435 !(maxres,maxint_gr)
21436 allocate(iscpstart_nucl(nres,maxint_gr))
21437 allocate(iscpend_nucl(nres,maxint_gr))
21438 !(maxres,maxint_gr)
21439 allocate(ielstart_vdw_nucl(nres))
21440 allocate(ielend_vdw_nucl(nres))
21442 allocate(lentyp(0:nfgtasks-1))
21444 !----------------------
21446 ! common /contacts/
21447 if(.not.allocated(icont_ref)) allocate(icont_ref(2,maxcont))
21448 allocate(icont(2,maxcont))
21450 ! common /contacts1/
21451 allocate(num_cont(0:nres+4))
21453 allocate(jcont(maxconts,nres))
21455 allocate(facont(maxconts,nres))
21457 allocate(gacont(3,maxconts,nres))
21458 !(3,maxconts,maxres)
21459 ! common /contacts_hb/
21460 allocate(gacontp_hb1(3,maxconts,nres))
21461 allocate(gacontp_hb2(3,maxconts,nres))
21462 allocate(gacontp_hb3(3,maxconts,nres))
21463 allocate(gacontm_hb1(3,maxconts,nres))
21464 allocate(gacontm_hb2(3,maxconts,nres))
21465 allocate(gacontm_hb3(3,maxconts,nres))
21466 allocate(gacont_hbr(3,maxconts,nres))
21467 allocate(grij_hb_cont(3,maxconts,nres))
21468 !(3,maxconts,maxres)
21469 allocate(facont_hb(maxconts,nres))
21471 allocate(ees0p(maxconts,nres))
21472 allocate(ees0m(maxconts,nres))
21473 allocate(d_cont(maxconts,nres))
21474 allocate(ees0plist(maxconts,nres))
21477 allocate(num_cont_hb(nres))
21479 allocate(jcont_hb(maxconts,nres))
21482 allocate(Ug(2,2,nres))
21483 allocate(Ugder(2,2,nres))
21484 allocate(Ug2(2,2,nres))
21485 allocate(Ug2der(2,2,nres))
21487 allocate(obrot(2,nres))
21488 allocate(obrot2(2,nres))
21489 allocate(obrot_der(2,nres))
21490 allocate(obrot2_der(2,nres))
21492 ! common /precomp1/
21493 allocate(mu(2,nres))
21494 allocate(muder(2,nres))
21495 allocate(Ub2(2,nres))
21498 allocate(Ub2der(2,nres))
21499 allocate(Ctobr(2,nres))
21500 allocate(Ctobrder(2,nres))
21501 allocate(Dtobr2(2,nres))
21502 allocate(Dtobr2der(2,nres))
21504 allocate(EUg(2,2,nres))
21505 allocate(EUgder(2,2,nres))
21506 allocate(CUg(2,2,nres))
21507 allocate(CUgder(2,2,nres))
21508 allocate(DUg(2,2,nres))
21509 allocate(Dugder(2,2,nres))
21510 allocate(DtUg2(2,2,nres))
21511 allocate(DtUg2der(2,2,nres))
21513 ! common /precomp2/
21514 allocate(Ug2Db1t(2,nres))
21515 allocate(Ug2Db1tder(2,nres))
21516 allocate(CUgb2(2,nres))
21517 allocate(CUgb2der(2,nres))
21519 allocate(EUgC(2,2,nres))
21520 allocate(EUgCder(2,2,nres))
21521 allocate(EUgD(2,2,nres))
21522 allocate(EUgDder(2,2,nres))
21523 allocate(DtUg2EUg(2,2,nres))
21524 allocate(Ug2DtEUg(2,2,nres))
21526 allocate(Ug2DtEUgder(2,2,2,nres))
21527 allocate(DtUg2EUgder(2,2,2,nres))
21529 allocate(b1(2,nres)) !(2,-maxtor:maxtor)
21530 allocate(b2(2,nres)) !(2,-maxtor:maxtor)
21531 allocate(b1tilde(2,nres)) !(2,-maxtor:maxtor)
21532 allocate(b2tilde(2,nres)) !(2,-maxtor:maxtor)
21534 allocate(ctilde(2,2,nres))
21535 allocate(dtilde(2,2,nres)) !(2,2,-maxtor:maxtor)
21536 allocate(gtb1(2,nres))
21537 allocate(gtb2(2,nres))
21538 allocate(cc(2,2,nres))
21539 allocate(dd(2,2,nres))
21540 allocate(ee(2,2,nres))
21541 allocate(gtcc(2,2,nres))
21542 allocate(gtdd(2,2,nres))
21543 allocate(gtee(2,2,nres))
21544 allocate(gUb2(2,nres))
21545 allocate(gteUg(2,2,nres))
21547 ! common /rotat_old/
21548 allocate(costab(nres))
21549 allocate(sintab(nres))
21550 allocate(costab2(nres))
21551 allocate(sintab2(nres))
21554 allocate(a_chuj(2,2,maxconts,nres))
21555 !(2,2,maxconts,maxres)(maxconts=maxres/4)
21556 allocate(a_chuj_der(2,2,3,5,maxconts,nres))
21557 !(2,2,3,5,maxconts,maxres)(maxconts=maxres/4)
21558 ! common /contdistrib/
21559 allocate(ncont_sent(nres))
21560 allocate(ncont_recv(nres))
21562 allocate(iat_sent(nres))
21564 allocate(iint_sent(4,nres,nres))
21565 allocate(iint_sent_local(4,nres,nres))
21567 allocate(iturn3_sent(4,0:nres+4))
21568 allocate(iturn4_sent(4,0:nres+4))
21569 allocate(iturn3_sent_local(4,nres))
21570 allocate(iturn4_sent_local(4,nres))
21572 allocate(itask_cont_from(0:nfgtasks-1))
21573 allocate(itask_cont_to(0:nfgtasks-1))
21574 !(0:max_fg_procs-1)
21578 !----------------------
21581 allocate(dcdv(6,maxdim))
21582 allocate(dxdv(6,maxdim))
21584 allocate(dxds(6,nres))
21586 allocate(gradx(3,-1:nres,0:2))
21587 allocate(gradc(3,-1:nres,0:2))
21589 allocate(gvdwx(3,-1:nres))
21590 allocate(gvdwc(3,-1:nres))
21591 allocate(gelc(3,-1:nres))
21592 allocate(gelc_long(3,-1:nres))
21593 allocate(gvdwpp(3,-1:nres))
21594 allocate(gvdwc_scpp(3,-1:nres))
21595 allocate(gradx_scp(3,-1:nres))
21596 allocate(gvdwc_scp(3,-1:nres))
21597 allocate(ghpbx(3,-1:nres))
21598 allocate(ghpbc(3,-1:nres))
21599 allocate(gradcorr(3,-1:nres))
21600 allocate(gradcorr_long(3,-1:nres))
21601 allocate(gradcorr5_long(3,-1:nres))
21602 allocate(gradcorr6_long(3,-1:nres))
21603 allocate(gcorr6_turn_long(3,-1:nres))
21604 allocate(gradxorr(3,-1:nres))
21605 allocate(gradcorr5(3,-1:nres))
21606 allocate(gradcorr6(3,-1:nres))
21607 allocate(gliptran(3,-1:nres))
21608 allocate(gliptranc(3,-1:nres))
21609 allocate(gliptranx(3,-1:nres))
21610 allocate(gshieldx(3,-1:nres))
21611 allocate(gshieldc(3,-1:nres))
21612 allocate(gshieldc_loc(3,-1:nres))
21613 allocate(gshieldx_ec(3,-1:nres))
21614 allocate(gshieldc_ec(3,-1:nres))
21615 allocate(gshieldc_loc_ec(3,-1:nres))
21616 allocate(gshieldx_t3(3,-1:nres))
21617 allocate(gshieldc_t3(3,-1:nres))
21618 allocate(gshieldc_loc_t3(3,-1:nres))
21619 allocate(gshieldx_t4(3,-1:nres))
21620 allocate(gshieldc_t4(3,-1:nres))
21621 allocate(gshieldc_loc_t4(3,-1:nres))
21622 allocate(gshieldx_ll(3,-1:nres))
21623 allocate(gshieldc_ll(3,-1:nres))
21624 allocate(gshieldc_loc_ll(3,-1:nres))
21625 allocate(grad_shield(3,-1:nres))
21626 allocate(gg_tube_sc(3,-1:nres))
21627 allocate(gg_tube(3,-1:nres))
21628 allocate(gradafm(3,-1:nres))
21629 allocate(gradb_nucl(3,-1:nres))
21630 allocate(gradbx_nucl(3,-1:nres))
21631 allocate(gvdwpsb1(3,-1:nres))
21632 allocate(gelpp(3,-1:nres))
21633 allocate(gvdwpsb(3,-1:nres))
21634 allocate(gelsbc(3,-1:nres))
21635 allocate(gelsbx(3,-1:nres))
21636 allocate(gvdwsbx(3,-1:nres))
21637 allocate(gvdwsbc(3,-1:nres))
21638 allocate(gsbloc(3,-1:nres))
21639 allocate(gsblocx(3,-1:nres))
21640 allocate(gradcorr_nucl(3,-1:nres))
21641 allocate(gradxorr_nucl(3,-1:nres))
21642 allocate(gradcorr3_nucl(3,-1:nres))
21643 allocate(gradxorr3_nucl(3,-1:nres))
21644 allocate(gvdwpp_nucl(3,-1:nres))
21645 allocate(gradpepcat(3,-1:nres))
21646 allocate(gradpepcatx(3,-1:nres))
21647 allocate(gradcatcat(3,-1:nres))
21648 allocate(gradnuclcat(3,-1:nres))
21649 allocate(gradnuclcatx(3,-1:nres))
21650 allocate(gradlipbond(3,-1:nres))
21651 allocate(gradlipang(3,-1:nres))
21652 allocate(gradliplj(3,-1:nres))
21653 allocate(gradlipelec(3,-1:nres))
21654 allocate(gradcattranc(3,-1:nres))
21655 allocate(gradcattranx(3,-1:nres))
21656 allocate(gradcatangx(3,-1:nres))
21657 allocate(gradcatangc(3,-1:nres))
21659 allocate(grad_shield_side(3,maxcontsshi,-1:nres))
21660 allocate(grad_shield_loc(3,maxcontsshi,-1:nres))
21661 ! grad for shielding surroing
21662 allocate(gloc(0:maxvar,0:2))
21663 allocate(gloc_x(0:maxvar,2))
21665 allocate(gel_loc(3,-1:nres))
21666 allocate(gel_loc_long(3,-1:nres))
21667 allocate(gcorr3_turn(3,-1:nres))
21668 allocate(gcorr4_turn(3,-1:nres))
21669 allocate(gcorr6_turn(3,-1:nres))
21670 allocate(gradb(3,-1:nres))
21671 allocate(gradbx(3,-1:nres))
21673 allocate(gel_loc_loc(maxvar))
21674 allocate(gel_loc_turn3(maxvar))
21675 allocate(gel_loc_turn4(maxvar))
21676 allocate(gel_loc_turn6(maxvar))
21677 allocate(gcorr_loc(maxvar))
21678 allocate(g_corr5_loc(maxvar))
21679 allocate(g_corr6_loc(maxvar))
21681 allocate(gsccorc(3,-1:nres))
21682 allocate(gsccorx(3,-1:nres))
21684 allocate(gsccor_loc(-1:nres))
21686 allocate(gvdwx_scbase(3,-1:nres))
21687 allocate(gvdwc_scbase(3,-1:nres))
21688 allocate(gvdwx_pepbase(3,-1:nres))
21689 allocate(gvdwc_pepbase(3,-1:nres))
21690 allocate(gvdwx_scpho(3,-1:nres))
21691 allocate(gvdwc_scpho(3,-1:nres))
21692 allocate(gvdwc_peppho(3,-1:nres))
21694 allocate(dtheta(3,2,-1:nres))
21696 allocate(gscloc(3,-1:nres))
21697 allocate(gsclocx(3,-1:nres))
21699 allocate(dphi(3,3,-1:nres))
21700 allocate(dalpha(3,3,-1:nres))
21701 allocate(domega(3,3,-1:nres))
21703 ! common /deriv_scloc/
21704 allocate(dXX_C1tab(3,nres))
21705 allocate(dYY_C1tab(3,nres))
21706 allocate(dZZ_C1tab(3,nres))
21707 allocate(dXX_Ctab(3,nres))
21708 allocate(dYY_Ctab(3,nres))
21709 allocate(dZZ_Ctab(3,nres))
21710 allocate(dXX_XYZtab(3,nres))
21711 allocate(dYY_XYZtab(3,nres))
21712 allocate(dZZ_XYZtab(3,nres))
21715 allocate(jgrad_start(nres))
21716 allocate(jgrad_end(nres))
21718 !----------------------
21721 allocate(ibond_displ(0:nfgtasks-1))
21722 allocate(ibond_count(0:nfgtasks-1))
21723 allocate(ithet_displ(0:nfgtasks-1))
21724 allocate(ithet_count(0:nfgtasks-1))
21725 allocate(iphi_displ(0:nfgtasks-1))
21726 allocate(iphi_count(0:nfgtasks-1))
21727 allocate(iphi1_displ(0:nfgtasks-1))
21728 allocate(iphi1_count(0:nfgtasks-1))
21729 allocate(ivec_displ(0:nfgtasks-1))
21730 allocate(ivec_count(0:nfgtasks-1))
21731 allocate(iset_displ(0:nfgtasks-1))
21732 allocate(iset_count(0:nfgtasks-1))
21733 allocate(iint_count(0:nfgtasks-1))
21734 allocate(iint_displ(0:nfgtasks-1))
21735 !(0:max_fg_procs-1)
21736 !----------------------
21739 allocate(gcart(3,-1:nres))
21740 allocate(gxcart(3,-1:nres))
21742 allocate(gradcag(3,-1:nres))
21743 allocate(gradxag(3,-1:nres))
21745 ! common /back_constr/
21746 !el in energy:Econstr_back allocate((:),allocatable :: utheta,ugamma,uscdiff !(maxfrag_back)
21747 allocate(dutheta(nres))
21748 allocate(dugamma(nres))
21750 allocate(duscdiff(3,-1:nres))
21751 allocate(duscdiffx(3,-1:nres))
21753 !el i io:read_fragments
21754 ! allocate((:,:,:),allocatable :: wfrag_back !(3,maxfrag_back,maxprocs/20)
21755 ! allocate((:,:,:),allocatable :: ifrag_back !(3,maxfrag_back,maxprocs/20)
21757 ! allocate(qinfrag(50,nprocs/20),wfrag(50,nprocs/20)) !(50,maxprocs/20)
21758 ! allocate(qinpair(100,nprocs/20),wpair(100,nprocs/20)) !(100,maxprocs/20)
21759 allocate(mset(0:nprocs)) !(maxprocs/20)
21761 ! allocate(ifrag(2,50,nprocs/20)) !(2,50,maxprocs/20)
21762 ! allocate(ipair(2,100,nprocs/20)) !(2,100,maxprocs/20)
21763 allocate(dUdconst(3,0:nres))
21764 allocate(dUdxconst(3,0:nres))
21765 allocate(dqwol(3,0:nres))
21766 allocate(dxqwol(3,0:nres))
21768 !----------------------
21770 ! common /sbridge/ in io_common: read_bridge
21771 !el allocate((:),allocatable :: iss !(maxss)
21772 ! common /links/ in io_common: read_bridge
21773 !el real(kind=8),dimension(:),allocatable :: dhpb,forcon,dhpb1 !(maxdim) !el dhpb1 !!! nie używane
21774 !el integer,dimension(:),allocatable :: ihpb,jhpb,ibecarb !(maxdim) !el ibecarb !!! nie używane
21775 ! common /dyn_ssbond/
21776 ! and side-chain vectors in theta or phi.
21777 allocate(dyn_ssbond_ij(0:nres+4,0:nres+4))
21781 dyn_ssbond_ij(:,:)=1.0d300
21785 ! if (nss.gt.0) then
21786 allocate(idssb(maxdim),jdssb(maxdim))
21787 ! allocate(newihpb(nss),newjhpb(nss))
21790 allocate(ishield_list(-1:nres))
21791 allocate(shield_list(maxcontsshi,-1:nres))
21792 allocate(dyn_ss_mask(nres))
21793 allocate(fac_shield(-1:nres))
21794 allocate(enetube(nres*2))
21795 allocate(enecavtube(nres*2))
21798 dyn_ss_mask(:)=.false.
21799 !----------------------
21801 ! Parameters of the SCCOR term
21803 !el in io_conf: parmread
21804 ! allocate(v1sccor(maxterm_sccor,3,-ntyp:ntyp,-ntyp:ntyp))
21805 ! allocate(v2sccor(maxterm_sccor,3,-ntyp:ntyp,-ntyp:ntyp)) !(maxterm_sccor,3,-ntyp:ntyp,-ntyp:ntyp)
21806 ! allocate(v0sccor(maxterm_sccor,-ntyp:ntyp,-ntyp:ntyp)) !(maxterm_sccor,-ntyp:ntyp,-ntyp:ntyp)
21807 ! allocate(isccortyp(-ntyp:ntyp)) !(-ntyp:ntyp)
21808 ! allocate(nterm_sccor(-ntyp:ntyp,-ntyp:ntyp))
21809 ! allocate(nlor_sccor(-ntyp:ntyp,-ntyp:ntyp)) !(-ntyp:ntyp,-ntyp:ntyp)
21810 ! allocate(vlor1sccor(maxterm_sccor,20,20))
21811 ! allocate(vlor2sccor(maxterm_sccor,20,20))
21812 ! allocate(vlor3sccor(maxterm_sccor,20,20)) !(maxterm_sccor,20,20)
21814 allocate(gloc_sc(3,0:2*nres,0:10))
21815 !(3,0:maxres2,10)maxres2=2*maxres
21816 allocate(dcostau(3,3,3,2*nres))
21817 allocate(dsintau(3,3,3,2*nres))
21818 allocate(dtauangle(3,3,3,2*nres))
21819 allocate(dcosomicron(3,3,3,2*nres))
21820 allocate(domicron(3,3,3,2*nres))
21821 !(3,3,3,maxres2)maxres2=2*maxres
21822 !----------------------
21825 allocate(varall(maxvar))
21826 !(maxvar)(maxvar=6*maxres)
21827 allocate(mask_theta(nres))
21828 allocate(mask_phi(nres))
21829 allocate(mask_side(nres))
21831 !----------------------
21834 allocate(uy(3,nres))
21835 allocate(uz(3,nres))
21837 allocate(uygrad(3,3,2,nres))
21838 allocate(uzgrad(3,3,2,nres))
21840 ! allocateion of lists JPRDLA
21841 allocate(newcontlistppi(300*nres))
21842 allocate(newcontlistscpi(350*nres))
21843 allocate(newcontlisti(300*nres))
21844 allocate(newcontlistppj(300*nres))
21845 allocate(newcontlistscpj(350*nres))
21846 allocate(newcontlistj(300*nres))
21847 allocate(newcontlistcatsctrani(300*nres))
21848 allocate(newcontlistcatsctranj(300*nres))
21849 allocate(newcontlistcatptrani(300*nres))
21850 allocate(newcontlistcatptranj(300*nres))
21851 allocate(newcontlistcatscnormi(300*nres))
21852 allocate(newcontlistcatscnormj(300*nres))
21853 allocate(newcontlistcatpnormi(300*nres))
21854 allocate(newcontlistcatpnormj(300*nres))
21856 allocate(newcontlistcatscangi(300*nres))
21857 allocate(newcontlistcatscangj(300*nres))
21858 allocate(newcontlistcatscangfi(300*nres))
21859 allocate(newcontlistcatscangfj(300*nres))
21860 allocate(newcontlistcatscangfk(300*nres))
21861 allocate(newcontlistcatscangti(300*nres))
21862 allocate(newcontlistcatscangtj(300*nres))
21863 allocate(newcontlistcatscangtk(300*nres))
21864 allocate(newcontlistcatscangtl(300*nres))
21868 end subroutine alloc_ener_arrays
21869 !-----------------------------------------------------------------
21870 subroutine ebond_nucl(estr_nucl)
21872 !c Evaluate the energy of stretching of the CA-CA and CA-SC virtual bonds
21875 real(kind=8),dimension(3) :: u,ud
21876 real(kind=8) :: usum,uprod,uprod1,uprod2,usumsqder
21877 real(kind=8) :: estr_nucl,diff
21878 integer :: iti,i,j,k,nbi
21880 !C print *,"I enter ebond"
21882 write (iout,*) "ibondp_start,ibondp_end",&
21883 ibondp_nucl_start,ibondp_nucl_end
21884 do i=ibondp_nucl_start,ibondp_nucl_end
21886 if (itype(i-1,2).eq.ntyp1_molec(2)&
21887 .and.itype(i,2).eq.ntyp1_molec(2)) cycle
21888 if (itype(i-1,2).eq.ntyp1_molec(2)&
21889 .or. itype(i,2).eq.ntyp1_molec(2)) then
21890 !C estr1=estr1+gnmr1(vbld(i),-1.0d0,distchainmax)
21892 !C gradb(j,i-1)=gnmr1prim(vbld(i),-1.0d0,distchainmax) &
21893 !C *dc(j,i-1)/vbld(i)
21895 !C if (energy_dec) write(iout,*) &
21896 !C "estr1",i,gnmr1(vbld(i),-1.0d0,distchainmax)
21897 diff = vbld(i)-vbldpDUM
21899 diff = vbld(i)-vbldp0_nucl
21901 ! estr1=estr1+gnmr1(vbld(i),-1.0d0,distchainmax)
21903 ! gradb(j,i-1)=gnmr1prim(vbld(i),-1.0d0,distchainmax)
21904 ! & *dc(j,i-1)/vbld(i)
21906 ! if (energy_dec) write(iout,*)
21907 ! & "estr1",i,vbld(i),distchainmax,
21908 ! & gnmr1(vbld(i),-1.0d0,distchainmax)
21910 if(energy_dec)write(iout,*) "estr_nucl_bb" , i,vbld(i),&
21911 vbldp0_nucl,diff,AKP_nucl*diff*diff
21912 estr_nucl=estr_nucl+diff*diff
21913 ! print *,estr_nucl
21915 gradb_nucl(j,i-1)=AKP_nucl*diff*dc(j,i-1)/vbld(i)
21917 !c write (iout,'(i5,3f10.5)') i,(gradb(j,i-1),j=1,3)
21919 estr_nucl=0.5d0*AKP_nucl*estr_nucl
21920 ! print *,"partial sum", estr_nucl,AKP_nucl
21923 write (iout,*) "ibondp_start,ibondp_end",&
21924 ibond_nucl_start,ibond_nucl_end
21926 do i=ibond_nucl_start,ibond_nucl_end
21927 !C print *, "I am stuck",i
21929 if (iti.eq.ntyp1_molec(2)) cycle
21930 nbi=nbondterm_nucl(iti)
21933 diff=vbld(i+nres)-vbldsc0_nucl(1,iti)
21936 write (iout,*) "estr_nucl_sc", i,iti,vbld(i+nres),vbldsc0_nucl(1,iti),diff, &
21937 AKSC_nucl(1,iti),AKSC_nucl(1,iti)*diff*diff
21938 estr_nucl=estr_nucl+0.5d0*AKSC_nucl(1,iti)*diff*diff
21939 ! print *,estr_nucl
21941 gradbx_nucl(j,i)=AKSC_nucl(1,iti)*diff*dc(j,i+nres)/vbld(i+nres)
21945 diff=vbld(i+nres)-vbldsc0_nucl(j,iti)
21946 ud(j)=aksc_nucl(j,iti)*diff
21947 u(j)=abond0_nucl(j,iti)+0.5d0*ud(j)*diff
21961 uprod2=uprod2*u(k)*u(k)
21965 usumsqder=usumsqder+ud(j)*uprod2
21967 estr_nucl=estr_nucl+uprod/usum
21969 gradbx_nucl(j,i)=usumsqder/(usum*usum)*dc(j,i+nres)/vbld(i+nres)
21973 !C print *,"I am about to leave ebond"
21975 end subroutine ebond_nucl
21977 !-----------------------------------------------------------------------------
21978 subroutine ebend_nucl(etheta_nucl)
21979 real(kind=8),dimension(nntheterm_nucl+1) :: coskt,sinkt !mmaxtheterm
21980 real(kind=8),dimension(nsingle_nucl+1) :: cosph1,sinph1,cosph2,sinph2 !maxsingle
21981 real(kind=8),dimension(ndouble_nucl+1,ndouble_nucl+1) :: cosph1ph2,sinph1ph2 !maxdouble,maxdouble
21982 logical :: lprn=.false., lprn1=.false.
21983 !el local variables
21984 integer :: i,k,iblock,ityp1,ityp2,ityp3,l,m
21985 real(kind=8) :: dethetai,dephii,dephii1,theti2,phii,phii1,ethetai
21986 real(kind=8) :: aux,etheta_nucl,ccl,ssl,scl,csl,ethetacnstr
21987 ! local variables for constrains
21988 real(kind=8) :: difi,thetiii
21991 ! print *,"ithet_start",ithet_nucl_start," ithet_end",ithet_nucl_end,nres
21992 do i=ithet_nucl_start,ithet_nucl_end
21993 if ((itype(i-1,2).eq.ntyp1_molec(2)).or.&
21994 (itype(i-2,2).eq.ntyp1_molec(2)).or. &
21995 (itype(i,2).eq.ntyp1_molec(2))) cycle
21999 theti2=0.5d0*theta(i)
22000 ityp2=ithetyp_nucl(itype(i-1,2))
22001 do k=1,nntheterm_nucl
22002 coskt(k)=dcos(k*theti2)
22003 sinkt(k)=dsin(k*theti2)
22005 if (i.gt.3 .and. itype(i-2,2).ne.ntyp1_molec(2)) then
22008 if (phii.ne.phii) phii=150.0
22012 ityp1=ithetyp_nucl(itype(i-2,2))
22013 do k=1,nsingle_nucl
22014 cosph1(k)=dcos(k*phii)
22015 sinph1(k)=dsin(k*phii)
22019 ityp1=nthetyp_nucl+1
22020 do k=1,nsingle_nucl
22026 if (i.lt.nres .and. itype(i,2).ne.ntyp1_molec(2)) then
22029 if (phii1.ne.phii1) phii1=150.0
22030 phii1=pinorm(phii1)
22034 ityp3=ithetyp_nucl(itype(i,2))
22035 do k=1,nsingle_nucl
22036 cosph2(k)=dcos(k*phii1)
22037 sinph2(k)=dsin(k*phii1)
22041 ityp3=nthetyp_nucl+1
22042 do k=1,nsingle_nucl
22047 ethetai=aa0thet_nucl(ityp1,ityp2,ityp3)
22048 do k=1,ndouble_nucl
22050 ccl=cosph1(l)*cosph2(k-l)
22051 ssl=sinph1(l)*sinph2(k-l)
22052 scl=sinph1(l)*cosph2(k-l)
22053 csl=cosph1(l)*sinph2(k-l)
22054 cosph1ph2(l,k)=ccl-ssl
22055 cosph1ph2(k,l)=ccl+ssl
22056 sinph1ph2(l,k)=scl+csl
22057 sinph1ph2(k,l)=scl-csl
22061 write (iout,*) "i",i," ityp1",ityp1," ityp2",ityp2,&
22062 " ityp3",ityp3," theti2",theti2," phii",phii," phii1",phii1
22063 write (iout,*) "coskt and sinkt",nntheterm_nucl
22064 do k=1,nntheterm_nucl
22065 write (iout,*) k,coskt(k),sinkt(k)
22068 do k=1,ntheterm_nucl
22069 ethetai=ethetai+aathet_nucl(k,ityp1,ityp2,ityp3)*sinkt(k)
22070 dethetai=dethetai+0.5d0*k*aathet_nucl(k,ityp1,ityp2,ityp3)&
22073 write (iout,*) "k",k," aathet",aathet_nucl(k,ityp1,ityp2,ityp3),&
22077 write (iout,*) "cosph and sinph"
22078 do k=1,nsingle_nucl
22079 write (iout,*) k,cosph1(k),sinph1(k),cosph2(k),sinph2(k)
22081 write (iout,*) "cosph1ph2 and sinph2ph2"
22082 do k=2,ndouble_nucl
22084 write (iout,*) l,k,cosph1ph2(l,k),cosph1ph2(k,l),&
22085 sinph1ph2(l,k),sinph1ph2(k,l)
22088 write(iout,*) "ethetai",ethetai
22090 do m=1,ntheterm2_nucl
22091 do k=1,nsingle_nucl
22092 aux=bbthet_nucl(k,m,ityp1,ityp2,ityp3)*cosph1(k)&
22093 +ccthet_nucl(k,m,ityp1,ityp2,ityp3)*sinph1(k)&
22094 +ddthet_nucl(k,m,ityp1,ityp2,ityp3)*cosph2(k)&
22095 +eethet_nucl(k,m,ityp1,ityp2,ityp3)*sinph2(k)
22096 ethetai=ethetai+sinkt(m)*aux
22097 dethetai=dethetai+0.5d0*m*aux*coskt(m)
22098 dephii=dephii+k*sinkt(m)*(&
22099 ccthet_nucl(k,m,ityp1,ityp2,ityp3)*cosph1(k)-&
22100 bbthet_nucl(k,m,ityp1,ityp2,ityp3)*sinph1(k))
22101 dephii1=dephii1+k*sinkt(m)*(&
22102 eethet_nucl(k,m,ityp1,ityp2,ityp3)*cosph2(k)-&
22103 ddthet_nucl(k,m,ityp1,ityp2,ityp3)*sinph2(k))
22105 write (iout,*) "m",m," k",k," bbthet",&
22106 bbthet_nucl(k,m,ityp1,ityp2,ityp3)," ccthet",&
22107 ccthet_nucl(k,m,ityp1,ityp2,ityp3)," ddthet",&
22108 ddthet_nucl(k,m,ityp1,ityp2,ityp3)," eethet",&
22109 eethet_nucl(k,m,ityp1,ityp2,ityp3)," ethetai",ethetai
22113 write(iout,*) "ethetai",ethetai
22114 do m=1,ntheterm3_nucl
22115 do k=2,ndouble_nucl
22117 aux=ffthet_nucl(l,k,m,ityp1,ityp2,ityp3)*cosph1ph2(l,k)+&
22118 ffthet_nucl(k,l,m,ityp1,ityp2,ityp3)*cosph1ph2(k,l)+&
22119 ggthet_nucl(l,k,m,ityp1,ityp2,ityp3)*sinph1ph2(l,k)+&
22120 ggthet_nucl(k,l,m,ityp1,ityp2,ityp3)*sinph1ph2(k,l)
22121 ethetai=ethetai+sinkt(m)*aux
22122 dethetai=dethetai+0.5d0*m*coskt(m)*aux
22123 dephii=dephii+l*sinkt(m)*(&
22124 -ffthet_nucl(l,k,m,ityp1,ityp2,ityp3)*sinph1ph2(l,k)-&
22125 ffthet_nucl(k,l,m,ityp1,ityp2,ityp3)*sinph1ph2(k,l)+&
22126 ggthet_nucl(l,k,m,ityp1,ityp2,ityp3)*cosph1ph2(l,k)+&
22127 ggthet_nucl(k,l,m,ityp1,ityp2,ityp3)*cosph1ph2(k,l))
22128 dephii1=dephii1+(k-l)*sinkt(m)*( &
22129 -ffthet_nucl(l,k,m,ityp1,ityp2,ityp3)*sinph1ph2(l,k)+&
22130 ffthet_nucl(k,l,m,ityp1,ityp2,ityp3)*sinph1ph2(k,l)+&
22131 ggthet_nucl(l,k,m,ityp1,ityp2,ityp3)*cosph1ph2(l,k)-&
22132 ggthet_nucl(k,l,m,ityp1,ityp2,ityp3)*cosph1ph2(k,l))
22134 write (iout,*) "m",m," k",k," l",l," ffthet", &
22135 ffthet_nucl(l,k,m,ityp1,ityp2,ityp3), &
22136 ffthet_nucl(k,l,m,ityp1,ityp2,ityp3)," ggthet",&
22137 ggthet_nucl(l,k,m,ityp1,ityp2,ityp3),&
22138 ggthet_nucl(k,l,m,ityp1,ityp2,ityp3)," ethetai",ethetai
22139 write (iout,*) cosph1ph2(l,k)*sinkt(m), &
22140 cosph1ph2(k,l)*sinkt(m),&
22141 sinph1ph2(l,k)*sinkt(m),sinph1ph2(k,l)*sinkt(m)
22147 if (lprn1) write (iout,'(i2,3f8.1,9h ethetai ,f10.5)') &
22148 i,theta(i)*rad2deg,phii*rad2deg, &
22149 phii1*rad2deg,ethetai
22150 etheta_nucl=etheta_nucl+ethetai
22151 ! print *,i,"partial sum",etheta_nucl
22152 if (i.gt.3) gloc(i-3,icg)=gloc(i-3,icg)+wang_nucl*dephii
22153 if (i.lt.nres) gloc(i-2,icg)=gloc(i-2,icg)+wang_nucl*dephii1
22154 gloc(nphi+i-2,icg)=wang_nucl*dethetai
22157 end subroutine ebend_nucl
22158 !----------------------------------------------------
22159 subroutine etor_nucl(etors_nucl)
22160 ! implicit real(kind=8) (a-h,o-z)
22161 ! include 'DIMENSIONS'
22162 ! include 'COMMON.VAR'
22163 ! include 'COMMON.GEO'
22164 ! include 'COMMON.LOCAL'
22165 ! include 'COMMON.TORSION'
22166 ! include 'COMMON.INTERACT'
22167 ! include 'COMMON.DERIV'
22168 ! include 'COMMON.CHAIN'
22169 ! include 'COMMON.NAMES'
22170 ! include 'COMMON.IOUNITS'
22171 ! include 'COMMON.FFIELD'
22172 ! include 'COMMON.TORCNSTR'
22173 ! include 'COMMON.CONTROL'
22174 real(kind=8) :: etors_nucl,edihcnstr
22176 !el local variables
22177 integer :: i,j,iblock,itori,itori1
22178 real(kind=8) :: phii,gloci,v1ij,v2ij,cosphi,sinphi,&
22179 vl1ij,vl2ij,vl3ij,pom1,difi,etors_ii,pom
22180 ! Set lprn=.true. for debugging
22184 ! print *,"iphi_nucl_start/end", iphi_nucl_start,iphi_nucl_end
22185 do i=iphi_nucl_start,iphi_nucl_end
22186 if (itype(i-2,2).eq.ntyp1_molec(2) .or. itype(i-1,2).eq.ntyp1_molec(2) &
22187 .or. itype(i-3,2).eq.ntyp1_molec(2) &
22188 .or. itype(i,2).eq.ntyp1_molec(2)) cycle
22190 itori=itortyp_nucl(itype(i-2,2))
22191 itori1=itortyp_nucl(itype(i-1,2))
22193 ! print *,i,itori,itori1
22195 !C Regular cosine and sine terms
22196 do j=1,nterm_nucl(itori,itori1)
22197 v1ij=v1_nucl(j,itori,itori1)
22198 v2ij=v2_nucl(j,itori,itori1)
22199 cosphi=dcos(j*phii)
22200 sinphi=dsin(j*phii)
22201 etors_nucl=etors_nucl+v1ij*cosphi+v2ij*sinphi
22202 if (energy_dec) etors_ii=etors_ii+&
22203 v1ij*cosphi+v2ij*sinphi
22204 gloci=gloci+j*(v2ij*cosphi-v1ij*sinphi)
22208 !C E = SUM ----------------------------------- - v1
22209 !C [v2 cos(phi/2)+v3 sin(phi/2)]^2 + 1
22211 cosphi=dcos(0.5d0*phii)
22212 sinphi=dsin(0.5d0*phii)
22213 do j=1,nlor_nucl(itori,itori1)
22214 vl1ij=vlor1_nucl(j,itori,itori1)
22215 vl2ij=vlor2_nucl(j,itori,itori1)
22216 vl3ij=vlor3_nucl(j,itori,itori1)
22217 pom=vl2ij*cosphi+vl3ij*sinphi
22218 pom1=1.0d0/(pom*pom+1.0d0)
22219 etors_nucl=etors_nucl+vl1ij*pom1
22220 if (energy_dec) etors_ii=etors_ii+ &
22223 gloci=gloci+vl1ij*(vl3ij*cosphi-vl2ij*sinphi)*pom
22225 !C Subtract the constant term
22226 etors_nucl=etors_nucl-v0_nucl(itori,itori1)
22227 if (energy_dec) write (iout,'(a6,i5,0pf7.3)') &
22228 'etor',i,etors_ii-v0_nucl(itori,itori1)
22230 write (iout,'(2(a3,2x,i3,2x),2i3,6f8.3/26x,6f8.3/)') &
22231 restyp(itype(i-2,2),2),i-2,restyp(itype(i-1,2),2),i-1,itori,itori1, &
22232 (v1_nucl(j,itori,itori1),j=1,6),(v2_nucl(j,itori,itori1),j=1,6)
22233 gloc(i-3,icg)=gloc(i-3,icg)+wtor_nucl*gloci
22234 !c write (iout,*) 'i=',i,' gloc=',gloc(i-3,icg)
22237 end subroutine etor_nucl
22238 !------------------------------------------------------------
22239 subroutine epp_nucl_sub(evdw1,ees)
22241 !C This subroutine calculates the average interaction energy and its gradient
22242 !C in the virtual-bond vectors between non-adjacent peptide groups, based on
22243 !C the potential described in Liwo et al., Protein Sci., 1993, 2, 1715.
22244 !C The potential depends both on the distance of peptide-group centers and on
22245 !C the orientation of the CA-CA virtual bonds.
22247 integer :: i,j,k,iteli,itelj,num_conti,isubchap,ind
22248 real(kind=8) :: dxi,dyi,dzi,dxj,dyj,dzj,aaa,bbbi,sslipi,ssgradlipi, &
22249 sslipj,ssgradlipj,faclipij2
22250 real(kind=8) :: xj,yj,zj,rij,rrmij,sss,r3ij,r6ij,evdw1,&
22251 dx_normi,dy_normi,dz_normi,xmedi,ymedi,zmedi,&
22252 dx_normj,dy_normj,dz_normj,rmij,ev1,ev2,evdwij,facvdw
22253 real(kind=8) :: xj_safe,yj_safe,zj_safe,xj_temp,yj_temp,zj_temp,&
22254 dist_temp, dist_init,sss_grad,fac,evdw1ij
22255 integer xshift,yshift,zshift
22256 real(kind=8),dimension(3):: ggg,gggp,gggm,erij
22257 real(kind=8) :: ees,eesij
22258 !c 4/26/02 - AL scaling factor for 1,4 repulsive VDW interactions
22259 real(kind=8) scal_el /0.5d0/
22265 !c Loop over all pairs of interacting peptide groups except i,i+2 and i,i+3
22267 ! print *,"iatel_s_nucl,iatel_e_nucl",iatel_s_nucl,iatel_e_nucl
22268 do i=iatel_s_nucl,iatel_e_nucl
22269 if (itype(i,2).eq.ntyp1_molec(2) .or. itype(i+1,2).eq.ntyp1_molec(2)) cycle
22273 dx_normi=dc_norm(1,i)
22274 dy_normi=dc_norm(2,i)
22275 dz_normi=dc_norm(3,i)
22276 xmedi=c(1,i)+0.5d0*dxi
22277 ymedi=c(2,i)+0.5d0*dyi
22278 zmedi=c(3,i)+0.5d0*dzi
22279 call to_box(xmedi,ymedi,zmedi)
22280 call lipid_layer(xmedi,ymedi,zmedi,sslipi,ssgradlipi)
22282 do j=ielstart_nucl(i),ielend_nucl(i)
22283 if (itype(j,2).eq.ntyp1_molec(2) .or. itype(j+1,2).eq.ntyp1_molec(2)) cycle
22288 ! xj=c(1,j)+0.5D0*dxj-xmedi
22289 ! yj=c(2,j)+0.5D0*dyj-ymedi
22290 ! zj=c(3,j)+0.5D0*dzj-zmedi
22291 xj=c(1,j)+0.5D0*dxj
22292 yj=c(2,j)+0.5D0*dyj
22293 zj=c(3,j)+0.5D0*dzj
22294 call to_box(xj,yj,zj)
22295 call lipid_layer(xj,yj,zj,sslipj,ssgradlipj)
22296 faclipij2=(sslipi+sslipj)/2.0d0*lipscale**2+1.0d0
22297 xj=boxshift(xj-xmedi,boxxsize)
22298 yj=boxshift(yj-ymedi,boxysize)
22299 zj=boxshift(zj-zmedi,boxzsize)
22300 rij=xj*xj+yj*yj+zj*zj
22301 !c write (2,*)"ij",i,j," r0pp",r0pp," rij",rij," epspp",epspp
22302 fac=(r0pp**2/rij)**3
22306 fac=(-ev1-evdw1ij)/rij
22307 ! write (2,*)"fac",fac," ev1",ev1," ev2",ev2," evdw1ij",evdw1ij
22308 if (energy_dec) write(iout,'(2i5,a9,f10.4)') i,j,"evdw1ij",evdw1ij
22309 evdw1=evdw1+evdw1ij
22311 !C Calculate contributions to the Cartesian gradient.
22317 gvdwpp_nucl(k,i)=gvdwpp_nucl(k,i)-ggg(k)
22318 gvdwpp_nucl(k,j)=gvdwpp_nucl(k,j)+ggg(k)
22320 !c phoshate-phosphate electrostatic interactions
22323 eesij=dexp(-BEES*rij)*fac
22324 ! write (2,*)"fac",fac," eesijpp",eesij
22325 if (energy_dec) write(iout,'(2i5,a9,f10.4)') i,j,"eesijpp",eesij
22328 fac=-(fac+BEES)*eesij*fac
22332 !c write(2,*) "ggg",i,j,ggg(1),ggg(2),ggg(3)
22333 !c write(2,*) "gelpp",i,(gelpp(k,i),k=1,3)
22334 !c write(2,*) "gelpp",j,(gelpp(k,j),k=1,3)
22336 gelpp(k,i)=gelpp(k,i)-ggg(k)
22337 gelpp(k,j)=gelpp(k,j)+ggg(k)
22344 !c write (2,*) "i",i," gelpp",(gelpp(k,i),k=1,3)
22346 gvdwpp_nucl(k,i)=6*gvdwpp_nucl(k,i)
22347 !c gelpp(k,i)=332.0d0*gelpp(k,i)
22348 gelpp(k,i)=AEES*gelpp(k,i)
22350 !c write (2,*) "i",i," gelpp",(gelpp(k,i),k=1,3)
22352 !c write (2,*) "total EES",ees
22354 end subroutine epp_nucl_sub
22355 !---------------------------------------------------------------------
22356 subroutine epsb(evdwpsb,eelpsb)
22359 !C This subroutine calculates the excluded-volume interaction energy between
22360 !C peptide-group centers and side chains and its gradient in virtual-bond and
22361 !C side-chain vectors.
22363 real(kind=8),dimension(3):: ggg
22364 integer :: i,iint,j,k,iteli,itypj,subchap
22365 real(kind=8) :: evdw2,evdw2_14,xi,yi,zi,xj,yj,zj,rrij,fac,&
22366 e1,e2,evdwij,rij,evdwpsb,eelpsb
22367 real(kind=8) :: xj_safe,yj_safe,zj_safe,xj_temp,yj_temp,zj_temp,&
22368 dist_temp, dist_init
22369 integer xshift,yshift,zshift
22371 !cd print '(a)','Enter ESCP'
22372 !cd write (iout,*) 'iatscp_s=',iatscp_s,' iatscp_e=',iatscp_e
22375 ! print *,"iatscp_s_nucl,iatscp_e_nucl",iatscp_s_nucl,iatscp_e_nucl
22376 do i=iatscp_s_nucl,iatscp_e_nucl
22377 if (itype(i,2).eq.ntyp1_molec(2) &
22378 .or. itype(i+1,2).eq.ntyp1_molec(2)) cycle
22379 xi=0.5D0*(c(1,i)+c(1,i+1))
22380 yi=0.5D0*(c(2,i)+c(2,i+1))
22381 zi=0.5D0*(c(3,i)+c(3,i+1))
22382 call to_box(xi,yi,zi)
22384 do iint=1,nscp_gr_nucl(i)
22386 do j=iscpstart_nucl(i,iint),iscpend_nucl(i,iint)
22388 if (itypj.eq.ntyp1_molec(2)) cycle
22389 !C Uncomment following three lines for SC-p interactions
22390 !c xj=c(1,nres+j)-xi
22391 !c yj=c(2,nres+j)-yi
22392 !c zj=c(3,nres+j)-zi
22393 !C Uncomment following three lines for Ca-p interactions
22400 call to_box(xj,yj,zj)
22401 xj=boxshift(xj-xi,boxxsize)
22402 yj=boxshift(yj-yi,boxysize)
22403 zj=boxshift(zj-zi,boxzsize)
22405 dist_init=xj**2+yj**2+zj**2
22407 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
22409 e1=fac*fac*aad_nucl(itypj)
22410 e2=fac*bad_nucl(itypj)
22411 if (iabs(j-i) .le. 2) then
22416 evdwpsb=evdwpsb+evdwij
22417 if (energy_dec) write (iout,'(a6,2i5,0pf7.3,a4)') &
22418 'evdw2',i,j,evdwij,"tu4"
22420 !C Calculate contributions to the gradient in the virtual-bond and SC vectors.
22422 fac=-(evdwij+e1)*rrij
22427 gvdwpsb1(k,i)=gvdwpsb1(k,i)-ggg(k)
22428 gvdwpsb(k,j)=gvdwpsb(k,j)+ggg(k)
22436 gvdwpsb(j,i)=expon*gvdwpsb(j,i)
22437 gvdwpsb1(j,i)=expon*gvdwpsb1(j,i)
22441 end subroutine epsb
22443 !------------------------------------------------------
22444 subroutine esb_gb(evdwsb,eelsb)
22447 integer :: iint,itypi,itypi1,itypj,subchap,num_conti2
22448 real(kind=8) :: xi,yi,zi,sig,rij_shift,fac,e1,e2,sigm,epsi
22449 real(kind=8) :: evdw,sig0iji,evdwsb,eelsb,ecorr,eelij
22450 real(kind=8) :: xj_safe,yj_safe,zj_safe,xj_temp,yj_temp,zj_temp,&
22451 dist_temp, dist_init,aa,bb,faclip,sig0ij
22460 ! print *,"iastsc_nucl",iatsc_s_nucl,iatsc_e_nucl
22461 do i=iatsc_s_nucl,iatsc_e_nucl
22465 ! PRINT *,"I=",i,itypi
22466 if (itypi.eq.ntyp1_molec(2)) cycle
22467 itypi1=itype(i+1,2)
22471 call to_box(xi,yi,zi)
22472 call lipid_layer(xi,yi,zi,sslipi,ssgradlipi)
22473 dxi=dc_norm(1,nres+i)
22474 dyi=dc_norm(2,nres+i)
22475 dzi=dc_norm(3,nres+i)
22476 dsci_inv=vbld_inv(i+nres)
22478 !C Calculate SC interaction energy.
22480 do iint=1,nint_gr_nucl(i)
22481 ! print *,"tu?",i,istart_nucl(i,iint),iend_nucl(i,iint)
22482 do j=istart_nucl(i,iint),iend_nucl(i,iint)
22486 if (itypj.eq.ntyp1_molec(2)) cycle
22487 dscj_inv=vbld_inv(j+nres)
22488 sig0ij=sigma_nucl(itypi,itypj)
22489 chi1=chi_nucl(itypi,itypj)
22490 chi2=chi_nucl(itypj,itypi)
22492 chip1=chip_nucl(itypi,itypj)
22493 chip2=chip_nucl(itypj,itypi)
22495 ! xj=c(1,nres+j)-xi
22496 ! yj=c(2,nres+j)-yi
22497 ! zj=c(3,nres+j)-zi
22501 call to_box(xj,yj,zj)
22502 ! call lipid_layer(xj,yj,zj,sslipj,ssgradlipj)
22503 ! aa=aa_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0 &
22504 ! +aa_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
22505 ! bb=bb_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0 &
22506 ! +bb_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
22507 xj=boxshift(xj-xi,boxxsize)
22508 yj=boxshift(yj-yi,boxysize)
22509 zj=boxshift(zj-zi,boxzsize)
22511 dxj=dc_norm(1,nres+j)
22512 dyj=dc_norm(2,nres+j)
22513 dzj=dc_norm(3,nres+j)
22514 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
22516 !C Calculate angle-dependent terms of energy and contributions to their
22521 om1=dxi*erij(1)+dyi*erij(2)+dzi*erij(3)
22522 om2=dxj*erij(1)+dyj*erij(2)+dzj*erij(3)
22523 om12=dxi*dxj+dyi*dyj+dzi*dzj
22524 call sc_angular_nucl
22526 sig=sig0ij*dsqrt(sigsq)
22527 rij_shift=1.0D0/rij-sig+sig0ij
22528 ! print *,rij_shift,"rij_shift"
22529 !c write (2,*) " rij",1.0D0/rij," sig",sig," sig0ij",sig0ij,
22530 !c & " rij_shift",rij_shift
22531 if (rij_shift.le.0.0D0) then
22536 !c---------------------------------------------------------------
22537 rij_shift=1.0D0/rij_shift
22538 fac=rij_shift**expon
22539 e1=fac*fac*aa_nucl(itypi,itypj)
22540 e2=fac*bb_nucl(itypi,itypj)
22541 evdwij=eps1*eps2rt*(e1+e2)
22542 !c write (2,*) "eps1",eps1," eps2rt",eps2rt,
22543 !c & " e1",e1," e2",e2," evdwij",evdwij
22545 evdwij=evdwij*eps2rt
22546 evdwsb=evdwsb+evdwij
22548 sigm=dabs(aa_nucl(itypi,itypj)/bb_nucl(itypi,itypj))**(1.0D0/6.0D0)
22549 epsi=bb_nucl(itypi,itypj)**2/aa_nucl(itypi,itypj)
22550 write (iout,'(2(a3,i3,2x),17(0pf7.3))') &
22551 restyp(itypi,2),i,restyp(itypj,2),j, &
22552 epsi,sigm,chi1,chi2,chip1,chip2, &
22553 eps1,eps2rt**2,sig,sig0ij, &
22554 om1,om2,om12,1.0D0/rij,1.0D0/rij_shift,&
22556 write (iout,*) "aa",aa_nucl(itypi,itypj)," bb",bb_nucl(itypi,itypj)
22559 if (energy_dec) write (iout,'(a6,2i5,e15.3,a4)') &
22560 'evdw',i,j,evdwij,"tu3"
22563 !C Calculate gradient components.
22564 e1=e1*eps1*eps2rt**2
22565 fac=-expon*(e1+evdwij)*rij_shift
22569 !C Calculate the radial part of the gradient
22573 !C Calculate angular part of the gradient.
22575 call eelsbij(eelij,num_conti2)
22576 if (energy_dec .and. &
22577 (j.eq.i+1.or.j.eq.nres-i+1.or.j.eq.nres-i.or.j.eq.nres-i+2)) &
22578 write (istat,'(e14.5)') evdwij
22582 num_cont_hb(i)=num_conti2
22584 !c write (iout,*) "Number of loop steps in EGB:",ind
22585 !cccc energy_dec=.false.
22587 end subroutine esb_gb
22588 !-------------------------------------------------------------------------------
22589 subroutine eelsbij(eesij,num_conti2)
22592 real(kind=8),dimension(3) :: ggg,gggp,gggm,dcosb,dcosg
22593 real(kind=8),dimension(3,3) :: erder,uryg,urzg,vryg,vrzg
22594 real(kind=8) :: xj_safe,yj_safe,zj_safe,xj_temp,yj_temp,zj_temp,&
22595 dist_temp, dist_init,rlocshield,fracinbuf
22596 integer xshift,yshift,zshift,ilist,iresshield,num_conti2
22598 !c 4/26/02 - AL scaling factor for 1,4 repulsive VDW interactions
22599 real(kind=8) scal_el /0.5d0/
22600 integer :: iteli,itelj,kkk,kkll,m,isubchap
22601 real(kind=8) :: ael6i,rrmij,rmij,r0ij,fcont,fprimcont,ees0tmp,facfac
22602 real(kind=8) :: ees,evdw1,eel_loc,aaa,bbb,ael3i,ael63i,ael32i
22603 real(kind=8) :: dx_normj,dy_normj,dz_normj,&
22604 r3ij,r6ij,cosa,cosb,cosg,fac,ev1,ev2,fac3,fac4,fac5,fac6,&
22605 el1,el2,el3,el4,eesij,ees0ij,facvdw,facel,fac1,ecosa,&
22606 ecosb,ecosg,ury,urz,vry,vrz,facr,a22der,a23der,a32der,&
22607 a33der,eel_loc_ij,cosa4,wij,cosbg1,cosbg2,ees0pij,&
22608 ees0pij1,ees0mij,ees0mij1,fac3p,ees0mijp,ees0pijp,&
22609 ecosa1,ecosb1,ecosg1,ecosa2,ecosb2,ecosg2,ecosap,ecosbp,&
22610 ecosgp,ecosam,ecosbm,ecosgm,ghalf,itypi,itypj
22614 ! print *,i,j,itypi,itypj,istype(i),istype(j),"????"
22615 ael6i=ael6_nucl(itypi,itypj)
22616 ael3i=ael3_nucl(itypi,itypj)
22617 ael63i=ael63_nucl(itypi,itypj)
22618 ael32i=ael32_nucl(itypi,itypj)
22619 !c write (iout,*) "eelecij",i,j,itype(i),itype(j),
22620 !c & ael6i,ael3i,ael63i,al32i,rij,rrij
22624 dx_normi=dc_norm(1,i+nres)
22625 dy_normi=dc_norm(2,i+nres)
22626 dz_normi=dc_norm(3,i+nres)
22627 dx_normj=dc_norm(1,j+nres)
22628 dy_normj=dc_norm(2,j+nres)
22629 dz_normj=dc_norm(3,j+nres)
22630 !c xj=c(1,j)+0.5D0*dxj-xmedi
22631 !c yj=c(2,j)+0.5D0*dyj-ymedi
22632 !c zj=c(3,j)+0.5D0*dzj-zmedi
22633 if (ipot_nucl.ne.2) then
22634 cosa=dx_normi*dx_normj+dy_normi*dy_normj+dz_normi*dz_normj
22635 cosb=(xj*dx_normi+yj*dy_normi+zj*dz_normi)*rmij
22636 cosg=(xj*dx_normj+yj*dy_normj+zj*dz_normj)*rmij
22644 fac=cosa-3.0D0*cosb*cosg
22646 fac1=3.0d0*(cosb*cosb+cosg*cosg)
22651 !c write (iout,*) "r3ij",r3ij," r6ij",r6ij," fac",fac," fac1",fac1,
22652 !c & " fac2",fac2," fac3",fac3," fac4",fac4," fac5",fac5," fac6",fac6
22653 el1=fac3*(4.0D0+facfac-fac1)
22655 el3=fac5*(2.0d0-2.0d0*facfac+fac1)
22657 eesij=el1+el2+el3+el4
22658 !C 12/26/95 - for the evaluation of multi-body H-bonding interactions
22659 ees0ij=4.0D0+facfac-fac1
22661 if (energy_dec) then
22662 if(j.eq.i+1.or.j.eq.nres-i+1.or.j.eq.nres-i.or.j.eq.nres-i+2) &
22663 write (istat,'(2a1,i4,1x,2a1,i4,4f10.5,3e12.5,$)') &
22664 sugartyp(istype(i)),restyp(itypi,2),i,sugartyp(istype(j)),&
22665 restyp(itypj,2),j,1.0d0/rij,cosa,cosb,cosg,fac*r3ij, &
22666 (4.0D0+facfac-fac1)*r6ij,(2.0d0-2.0d0*facfac+fac1)*r6ij
22667 write (iout,'(a6,2i5,e15.3)') 'ees',i,j,eesij
22671 !C Calculate contributions to the Cartesian gradient.
22673 facel=-3.0d0*rrij*(eesij+el1+el3+el4)
22679 !* Radial derivatives. First process both termini of the fragment (i,j)
22685 gelsbc(k,j)=gelsbc(k,j)+ggg(k)
22686 gelsbc(k,i)=gelsbc(k,i)-ggg(k)
22687 gelsbx(k,j)=gelsbx(k,j)+ggg(k)
22688 gelsbx(k,i)=gelsbx(k,i)-ggg(k)
22693 ecosa=2.0D0*fac3*fac1+fac4+(-4.0d0*fac5+2.0d0*fac6)*fac1
22698 ecosb=fac3*(fac1*cosg+cosb)+cosg*fac4+(cosb+2*fac1*cosg)*fac5+&
22700 ecosg=fac3*(fac1*cosb+cosg)+cosb*fac4+(cosg+2*fac1*cosb)*fac5+&
22703 dcosb(k)=rij*(dc_norm(k,i+nres)-erij(k)*cosb)
22704 dcosg(k)=rij*(dc_norm(k,j+nres)-erij(k)*cosg)
22707 ggg(k)=ecosb*dcosb(k)+ecosg*dcosg(k)
22710 gelsbx(k,i)=gelsbx(k,i)-ggg(k) &
22711 +(ecosa*(dc_norm(k,j+nres)-cosa*dc_norm(k,i+nres))&
22712 + ecosb*(erij(k)-cosb*dc_norm(k,i+nres)))*vbld_inv(i+nres)
22713 gelsbx(k,j)=gelsbx(k,j)+ggg(k) &
22714 +(ecosa*(dc_norm(k,i+nres)-cosa*dc_norm(k,j+nres))&
22715 + ecosg*(erij(k)-cosg*dc_norm(k,j+nres)))*vbld_inv(j+nres)
22716 gelsbc(k,j)=gelsbc(k,j)+ggg(k)
22717 gelsbc(k,i)=gelsbc(k,i)-ggg(k)
22719 ! IF ( (wcorr_nucl.gt.0.0d0.or.wcorr3_nucl.gt.0.0d0) .and.
22720 IF ( j.gt.i+1 .and.&
22721 num_conti.le.maxcont) THEN
22723 !C Calculate the contact function. The ith column of the array JCONT will
22724 !C contain the numbers of atoms that make contacts with the atom I (of numbers
22725 !C greater than I). The arrays FACONT and GACONT will contain the values of
22726 !C the contact function and its derivative.
22727 r0ij=2.20D0*sigma_nucl(itypi,itypj)
22728 !c write (2,*) "ij",i,j," rij",1.0d0/rij," r0ij",r0ij
22729 call gcont(rij,r0ij,1.0D0,0.2d0/r0ij,fcont,fprimcont)
22730 !c write (2,*) "fcont",fcont
22731 if (fcont.gt.0.0D0) then
22732 num_conti=num_conti+1
22733 num_conti2=num_conti2+1
22735 if (num_conti.gt.maxconts) then
22736 write (iout,*) 'WARNING - max. # of contacts exceeded;',&
22737 ' will skip next contacts for this conf.',maxconts
22739 jcont_hb(num_conti,i)=j
22740 !c write (iout,*) "num_conti",num_conti,
22741 !c & " jcont_hb",jcont_hb(num_conti,i)
22742 !C Calculate contact energies
22744 wij=cosa-3.0D0*cosb*cosg
22747 fac3=dsqrt(-ael6i)*r3ij
22748 !c write (2,*) "ael6i",ael6i," r3ij",r3ij," fac3",fac3
22749 ees0tmp=4.0D0+cosa4+wij*wij-3.0D0*cosbg1*cosbg1
22750 if (ees0tmp.gt.0) then
22751 ees0pij=dsqrt(ees0tmp)
22755 ees0tmp=4.0D0-cosa4+wij*wij-3.0D0*cosbg2*cosbg2
22756 if (ees0tmp.gt.0) then
22757 ees0mij=dsqrt(ees0tmp)
22761 ees0p(num_conti,i)=0.5D0*fac3*(ees0pij+ees0mij)
22762 ees0m(num_conti,i)=0.5D0*fac3*(ees0pij-ees0mij)
22763 !c write (iout,*) "i",i," j",j,
22764 !c & " ees0m",ees0m(num_conti,i)," ees0p",ees0p(num_conti,i)
22765 ees0pij1=fac3/ees0pij
22766 ees0mij1=fac3/ees0mij
22767 fac3p=-3.0D0*fac3*rrij
22768 ees0pijp=0.5D0*fac3p*(ees0pij+ees0mij)
22769 ees0mijp=0.5D0*fac3p*(ees0pij-ees0mij)
22770 ecosa1= ees0pij1*( 1.0D0+0.5D0*wij)
22771 ecosb1=-1.5D0*ees0pij1*(wij*cosg+cosbg1)
22772 ecosg1=-1.5D0*ees0pij1*(wij*cosb+cosbg1)
22773 ecosa2= ees0mij1*(-1.0D0+0.5D0*wij)
22774 ecosb2=-1.5D0*ees0mij1*(wij*cosg+cosbg2)
22775 ecosg2=-1.5D0*ees0mij1*(wij*cosb-cosbg2)
22776 ecosap=ecosa1+ecosa2
22777 ecosbp=ecosb1+ecosb2
22778 ecosgp=ecosg1+ecosg2
22779 ecosam=ecosa1-ecosa2
22780 ecosbm=ecosb1-ecosb2
22781 ecosgm=ecosg1-ecosg2
22783 facont_hb(num_conti,i)=fcont
22784 fprimcont=fprimcont/rij
22786 gggp(k)=ecosbp*dcosb(k)+ecosgp*dcosg(k)
22787 gggm(k)=ecosbm*dcosb(k)+ecosgm*dcosg(k)
22789 gggp(1)=gggp(1)+ees0pijp*xj
22790 gggp(2)=gggp(2)+ees0pijp*yj
22791 gggp(3)=gggp(3)+ees0pijp*zj
22792 gggm(1)=gggm(1)+ees0mijp*xj
22793 gggm(2)=gggm(2)+ees0mijp*yj
22794 gggm(3)=gggm(3)+ees0mijp*zj
22795 !C Derivatives due to the contact function
22796 gacont_hbr(1,num_conti,i)=fprimcont*xj
22797 gacont_hbr(2,num_conti,i)=fprimcont*yj
22798 gacont_hbr(3,num_conti,i)=fprimcont*zj
22801 !c Gradient of the correlation terms
22803 gacontp_hb1(k,num_conti,i)= &
22804 (ecosap*(dc_norm(k,j+nres)-cosa*dc_norm(k,i+nres)) &
22805 + ecosbp*(erij(k)-cosb*dc_norm(k,i+nres)))*vbld_inv(i+nres)
22806 gacontp_hb2(k,num_conti,i)= &
22807 (ecosap*(dc_norm(k,i+nres)-cosa*dc_norm(k,j+nres)) &
22808 + ecosgp*(erij(k)-cosg*dc_norm(k,j+nres)))*vbld_inv(j+nres)
22809 gacontp_hb3(k,num_conti,i)=gggp(k)
22810 gacontm_hb1(k,num_conti,i)= &
22811 (ecosam*(dc_norm(k,j+nres)-cosa*dc_norm(k,i+nres)) &
22812 + ecosbm*(erij(k)-cosb*dc_norm(k,i+nres)))*vbld_inv(i+nres)
22813 gacontm_hb2(k,num_conti,i)= &
22814 (ecosam*(dc_norm(k,i+nres)-cosa*dc_norm(k,j+nres))&
22815 + ecosgm*(erij(k)-cosg*dc_norm(k,j+nres)))*vbld_inv(j+nres)
22816 gacontm_hb3(k,num_conti,i)=gggm(k)
22822 end subroutine eelsbij
22823 !------------------------------------------------------------------
22824 subroutine sc_grad_nucl
22827 real(kind=8),dimension(3) :: dcosom1,dcosom2
22828 eom1=eps2der*eps2rt_om1+sigder*sigsq_om1
22829 eom2=eps2der*eps2rt_om2+sigder*sigsq_om2
22830 eom12=evdwij*eps1_om12+eps2der*eps2rt_om12+sigder*sigsq_om12
22832 dcosom1(k)=rij*(dc_norm(k,nres+i)-om1*erij(k))
22833 dcosom2(k)=rij*(dc_norm(k,nres+j)-om2*erij(k))
22836 gg(k)=gg(k)+eom1*dcosom1(k)+eom2*dcosom2(k)
22839 gvdwsbx(k,i)=gvdwsbx(k,i)-gg(k) &
22840 +(eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,nres+i))&
22841 +eom1*(erij(k)-om1*dc_norm(k,nres+i)))*dsci_inv
22842 gvdwsbx(k,j)=gvdwsbx(k,j)+gg(k) &
22843 +(eom12*(dc_norm(k,nres+i)-om12*dc_norm(k,nres+j)) &
22844 +eom2*(erij(k)-om2*dc_norm(k,nres+j)))*dscj_inv
22847 !C Calculate the components of the gradient in DC and X
22850 gvdwsbc(l,i)=gvdwsbc(l,i)-gg(l)
22851 gvdwsbc(l,j)=gvdwsbc(l,j)+gg(l)
22854 end subroutine sc_grad_nucl
22855 !-----------------------------------------------------------------------
22856 subroutine esb(esbloc)
22857 !C Calculate the local energy of a side chain and its derivatives in the
22858 !C corresponding virtual-bond valence angles THETA and the spherical angles
22859 !C ALPHA and OMEGA derived from AM1 all-atom calculations.
22860 !C added by Urszula Kozlowska. 07/11/2007
22862 real(kind=8),dimension(3):: x_prime,y_prime,z_prime
22863 real(kind=8),dimension(9):: x
22864 real(kind=8) :: sumene,dsc_i,dp2_i,xx,yy,zz,sumene1, &
22865 sumene2,sumene3,sumene4,s1,s1_6,s2,s2_6,&
22866 de_dxx,de_dyy,de_dzz,de_dt,s1_t,s1_6_t,s2_t,s2_6_t
22867 real(kind=8),dimension(3):: dXX_Ci1,dYY_Ci1,dZZ_Ci1,dXX_Ci,&
22868 dYY_Ci,dZZ_Ci,dXX_XYZ,dYY_XYZ,dZZ_XYZ,dt_dCi,dt_dCi1
22869 real(kind=8) :: esbloc,delta,cosfac2,cosfac,sinfac2,sinfac,de_dtt,&
22870 cossc,cossc1,cosfac2xx,sinfac2yy,pom1,pom
22871 integer::it,nlobit,i,j,k
22872 ! common /sccalc/ time11,time12,time112,theti,it,nlobit
22875 do i=loc_start_nucl,loc_end_nucl
22876 if (itype(i,2).eq.ntyp1_molec(2)) cycle
22877 costtab(i+1) =dcos(theta(i+1))
22878 sinttab(i+1) =dsqrt(1-costtab(i+1)*costtab(i+1))
22879 cost2tab(i+1)=dsqrt(0.5d0*(1.0d0+costtab(i+1)))
22880 sint2tab(i+1)=dsqrt(0.5d0*(1.0d0-costtab(i+1)))
22881 cosfac2=0.5d0/(1.0d0+costtab(i+1))
22882 cosfac=dsqrt(cosfac2)
22883 sinfac2=0.5d0/(1.0d0-costtab(i+1))
22884 sinfac=dsqrt(sinfac2)
22886 if (it.eq.10) goto 1
22889 !C Compute the axes of tghe local cartesian coordinates system; store in
22890 !c x_prime, y_prime and z_prime
22897 !C write(2,*) "dc_norm", dc_norm(1,i+nres),dc_norm(2,i+nres),
22898 !C & dc_norm(3,i+nres)
22900 x_prime(j) = (dc_norm(j,i) - dc_norm(j,i-1))*cosfac
22901 y_prime(j) = (dc_norm(j,i) + dc_norm(j,i-1))*sinfac
22904 z_prime(j) = -uz(j,i-1)
22912 xx = xx + x_prime(j)*dc_norm(j,i+nres)
22913 yy = yy + y_prime(j)*dc_norm(j,i+nres)
22914 zz = zz + z_prime(j)*dc_norm(j,i+nres)
22922 x(j) = sc_parmin_nucl(j,it)
22925 !Cc diagnostics - remove later
22926 xx1 = dcos(alph(2))
22927 yy1 = dsin(alph(2))*dcos(omeg(2))
22928 zz1 = -dsin(alph(2))*dsin(omeg(2))
22929 write(2,'(3f8.1,3f9.3,1x,3f9.3)') &
22930 alph(2)*rad2deg,omeg(2)*rad2deg,theta(3)*rad2deg,xx,yy,zz,&
22932 !C," --- ", xx_w,yy_w,zz_w
22935 sumene = enesc_nucl(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
22936 esbloc = esbloc + sumene
22937 sumene2= enesc_nucl(x,xx,yy,0.0d0,cost2tab(i+1),sint2tab(i+1))
22938 ! print *,"enecomp",sumene,sumene2
22939 if (energy_dec) write(iout,*) "i",i," esbloc",sumene,esbloc,xx,yy,zz
22940 ! if (energy_dec) write(iout,*) "x",(x(k),k=1,9)
22942 write (2,*) "x",(x(k),k=1,9)
22944 !C This section to check the numerical derivatives of the energy of ith side
22945 !C chain in xx, yy, zz, and theta. Use the -DDEBUG compiler option or insert
22946 !C #define DEBUG in the code to turn it on.
22948 write (2,*) "sumene =",sumene
22952 write (2,*) xx,yy,zz
22953 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
22954 de_dxx_num=(sumenep-sumene)/aincr
22956 write (2,*) "xx+ sumene from enesc=",sumenep,sumene
22959 write (2,*) xx,yy,zz
22960 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
22961 de_dyy_num=(sumenep-sumene)/aincr
22963 write (2,*) "yy+ sumene from enesc=",sumenep,sumene
22966 write (2,*) xx,yy,zz
22967 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
22968 de_dzz_num=(sumenep-sumene)/aincr
22970 write (2,*) "zz+ sumene from enesc=",sumenep,sumene
22971 costsave=cost2tab(i+1)
22972 sintsave=sint2tab(i+1)
22973 cost2tab(i+1)=dcos(0.5d0*(theta(i+1)+aincr))
22974 sint2tab(i+1)=dsin(0.5d0*(theta(i+1)+aincr))
22975 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
22976 de_dt_num=(sumenep-sumene)/aincr
22977 write (2,*) " t+ sumene from enesc=",sumenep,sumene
22978 cost2tab(i+1)=costsave
22979 sint2tab(i+1)=sintsave
22980 !C End of diagnostics section.
22983 !C Compute the gradient of esc
22985 de_dxx=x(1)+2*x(4)*xx+x(7)*zz+x(8)*yy
22986 de_dyy=x(2)+2*x(5)*yy+x(8)*xx+x(9)*zz
22987 de_dzz=x(3)+2*x(6)*zz+x(7)*xx+x(9)*yy
22990 write (2,*) "x",(x(k),k=1,9)
22991 write (2,*) "xx",xx," yy",yy," zz",zz
22992 write (2,*) "de_xx ",de_xx," de_yy ",de_yy,&
22993 " de_zz ",de_zz," de_tt ",de_tt
22994 write (2,*) "de_xx_num",de_dxx_num," de_yy_num",de_dyy_num,&
22995 " de_zz_num",de_dzz_num," de_dt_num",de_dt_num
22998 cossc=scalar(dc_norm(1,i),dc_norm(1,i+nres))
22999 cossc1=scalar(dc_norm(1,i-1),dc_norm(1,i+nres))
23000 cosfac2xx=cosfac2*xx
23001 sinfac2yy=sinfac2*yy
23003 dt_dCi(k) = -(dc_norm(k,i-1)+costtab(i+1)*dc_norm(k,i))*&
23005 dt_dCi1(k)= -(dc_norm(k,i)+costtab(i+1)*dc_norm(k,i-1))*&
23007 pom=(dC_norm(k,i+nres)-cossc*dC_norm(k,i))*vbld_inv(i+1)
23008 pom1=(dC_norm(k,i+nres)-cossc1*dC_norm(k,i-1))*vbld_inv(i)
23009 !c write (iout,*) "i",i," k",k," pom",pom," pom1",pom1,
23010 !c & " dt_dCi",dt_dCi(k)," dt_dCi1",dt_dCi1(k)
23011 !c write (iout,*) "dC_norm",(dC_norm(j,i),j=1,3),
23012 !c & (dC_norm(j,i-1),j=1,3)," vbld_inv",vbld_inv(i+1),vbld_inv(i)
23013 dXX_Ci(k)=pom*cosfac-dt_dCi(k)*cosfac2xx
23014 dXX_Ci1(k)=-pom1*cosfac-dt_dCi1(k)*cosfac2xx
23015 dYY_Ci(k)=pom*sinfac+dt_dCi(k)*sinfac2yy
23016 dYY_Ci1(k)=pom1*sinfac+dt_dCi1(k)*sinfac2yy
23020 dZZ_Ci(k)=dZZ_Ci(k)-uzgrad(j,k,2,i-1)*dC_norm(j,i+nres)
23021 dZZ_Ci1(k)=dZZ_Ci1(k)-uzgrad(j,k,1,i-1)*dC_norm(j,i+nres)
23024 dXX_XYZ(k)=vbld_inv(i+nres)*(x_prime(k)-xx*dC_norm(k,i+nres))
23025 dYY_XYZ(k)=vbld_inv(i+nres)*(y_prime(k)-yy*dC_norm(k,i+nres))
23026 dZZ_XYZ(k)=vbld_inv(i+nres)*(z_prime(k)-zz*dC_norm(k,i+nres))
23028 dt_dCi(k) = -dt_dCi(k)/sinttab(i+1)
23029 dt_dCi1(k)= -dt_dCi1(k)/sinttab(i+1)
23033 dXX_Ctab(k,i)=dXX_Ci(k)
23034 dXX_C1tab(k,i)=dXX_Ci1(k)
23035 dYY_Ctab(k,i)=dYY_Ci(k)
23036 dYY_C1tab(k,i)=dYY_Ci1(k)
23037 dZZ_Ctab(k,i)=dZZ_Ci(k)
23038 dZZ_C1tab(k,i)=dZZ_Ci1(k)
23039 dXX_XYZtab(k,i)=dXX_XYZ(k)
23040 dYY_XYZtab(k,i)=dYY_XYZ(k)
23041 dZZ_XYZtab(k,i)=dZZ_XYZ(k)
23044 !c write (iout,*) "k",k," dxx_ci1",dxx_ci1(k)," dyy_ci1",
23045 !c & dyy_ci1(k)," dzz_ci1",dzz_ci1(k)
23046 !c write (iout,*) "k",k," dxx_ci",dxx_ci(k)," dyy_ci",
23047 !c & dyy_ci(k)," dzz_ci",dzz_ci(k)
23048 !c write (iout,*) "k",k," dt_dci",dt_dci(k)," dt_dci",
23050 !c write (iout,*) "k",k," dxx_XYZ",dxx_XYZ(k)," dyy_XYZ",
23051 !c & dyy_XYZ(k)," dzz_XYZ",dzz_XYZ(k)
23052 gsbloc(k,i-1)=gsbloc(k,i-1)+(de_dxx*dxx_ci1(k) &
23053 +de_dyy*dyy_ci1(k)+de_dzz*dzz_ci1(k)+de_dt*dt_dCi1(k))
23054 gsbloc(k,i)=gsbloc(k,i)+(de_dxx*dxx_Ci(k) &
23055 +de_dyy*dyy_Ci(k)+de_dzz*dzz_Ci(k)+de_dt*dt_dCi(k))
23056 gsblocx(k,i)= de_dxx*dxx_XYZ(k)&
23057 +de_dyy*dyy_XYZ(k)+de_dzz*dzz_XYZ(k)
23058 ! print *,i,de_dxx*dxx_ci1(k)+de_dyy*dyy_ci1(k),de_dzz*dzz_ci1(k)*2
23060 !c write(iout,*) "ENERGY GRAD = ", (gsbloc(k,i-1),k=1,3),
23061 !c & (gsbloc(k,i),k=1,3),(gsblocx(k,i),k=1,3)
23063 !C to check gradient call subroutine check_grad
23069 !=-------------------------------------------------------
23070 real(kind=8) function enesc_nucl(x,xx,yy,zz,cost2,sint2)
23072 real(kind=8),dimension(9):: x(9)
23073 real(kind=8) :: xx,yy,zz,cost2,sint2,sumene1,sumene2, &
23074 sumene3,sumene4,sumene,dsc_i,dp2_i,dscp1,dscp2,s1,s1_6,s2,s2_6
23076 !c write (2,*) "enesc"
23077 !c write (2,*) "x",(x(i),i=1,9)
23078 !c write(2,*)"xx",xx," yy",yy," zz",zz," cost2",cost2," sint2",sint2
23079 sumene=x(1)*xx+x(2)*yy+x(3)*zz+x(4)*xx**2 &
23080 + x(5)*yy**2+x(6)*zz**2+x(7)*xx*zz+x(8)*xx*yy &
23084 end function enesc_nucl
23085 !-----------------------------------------------------------------------------
23086 subroutine multibody_hb_nucl(ecorr,ecorr3,n_corr,n_corr1)
23089 integer,parameter :: max_cont=2000
23090 integer,parameter:: max_dim=2*(8*3+6)
23091 integer, parameter :: msglen1=max_cont*max_dim
23092 integer,parameter :: msglen2=2*msglen1
23093 integer source,CorrelType,CorrelID,Error
23094 real(kind=8) :: buffer(max_cont,max_dim)
23095 integer status(MPI_STATUS_SIZE)
23096 integer :: ierror,nbytes
23098 real(kind=8),dimension(3):: gx(3),gx1(3)
23099 real(kind=8) :: time00
23101 integer i,j,i1,j1,jj,kk,num_conti,num_conti1,nn
23102 real(kind=8) ecorr,ecorr3
23103 integer :: n_corr,n_corr1,mm,msglen
23104 !C Set lprn=.true. for debugging
23109 if(.not.allocated(zapas2)) allocate(zapas2(3,maxconts,nres,8))
23111 if (nfgtasks.le.1) goto 30
23113 write (iout,'(a)') 'Contact function values:'
23115 write (iout,'(2i3,50(1x,i2,f5.2))') &
23116 i,num_cont_hb(i),(jcont_hb(j,i),facont_hb(j,i), &
23117 j=1,num_cont_hb(i))
23120 !C Caution! Following code assumes that electrostatic interactions concerning
23121 !C a given atom are split among at most two processors!
23131 !c write (*,*) 'MyRank',MyRank,' mm',mm
23134 !c write (*,*) 'Sending: MyRank',MyRank,' mm',mm,' ldone',ldone
23135 if (fg_rank.gt.0) then
23136 !C Send correlation contributions to the preceding processor
23138 nn=num_cont_hb(iatel_s_nucl)
23139 call pack_buffer(max_cont,max_dim,iatel_s,0,buffer)
23140 !c write (*,*) 'The BUFFER array:'
23142 !c write (*,'(i2,9(3f8.3,2x))') i,(buffer(i,j),j=1,30)
23144 if (ielstart_nucl(iatel_s_nucl).gt.iatel_s_nucl+ispp) then
23146 call pack_buffer(max_cont,max_dim,iatel_s+1,30,buffer)
23147 !C Clear the contacts of the atom passed to the neighboring processor
23148 nn=num_cont_hb(iatel_s_nucl+1)
23150 !c write (*,'(i2,9(3f8.3,2x))') i,(buffer(i,j+30),j=1,30)
23152 num_cont_hb(iatel_s_nucl)=0
23154 !cd write (iout,*) 'Processor ',fg_rank,MyRank,
23155 !cd & ' is sending correlation contribution to processor',fg_rank-1,
23156 !cd & ' msglen=',msglen
23157 !c write (*,*) 'Processor ',fg_rank,MyRank,
23158 !c & ' is sending correlation contribution to processor',fg_rank-1,
23159 !c & ' msglen=',msglen,' CorrelType=',CorrelType
23161 call MPI_Send(buffer,msglen,MPI_DOUBLE_PRECISION,fg_rank-1, &
23162 CorrelType,FG_COMM,IERROR)
23163 time_sendrecv=time_sendrecv+MPI_Wtime()-time00
23164 !cd write (iout,*) 'Processor ',fg_rank,
23165 !cd & ' has sent correlation contribution to processor',fg_rank-1,
23166 !cd & ' msglen=',msglen,' CorrelID=',CorrelID
23167 !c write (*,*) 'Processor ',fg_rank,
23168 !c & ' has sent correlation contribution to processor',fg_rank-1,
23169 !c & ' msglen=',msglen,' CorrelID=',CorrelID
23171 endif ! (fg_rank.gt.0)
23175 !c write (*,*) 'Receiving: MyRank',MyRank,' mm',mm,' ldone',ldone
23176 if (fg_rank.lt.nfgtasks-1) then
23177 !C Receive correlation contributions from the next processor
23179 if (ielend_nucl(iatel_e_nucl).lt.nct_molec(2)-1) msglen=msglen2
23180 !cd write (iout,*) 'Processor',fg_rank,
23181 !cd & ' is receiving correlation contribution from processor',fg_rank+1,
23182 !cd & ' msglen=',msglen,' CorrelType=',CorrelType
23183 !c write (*,*) 'Processor',fg_rank,
23184 !c &' is receiving correlation contribution from processor',fg_rank+1,
23185 !c & ' msglen=',msglen,' CorrelType=',CorrelType
23188 do while (nbytes.le.0)
23189 call MPI_Probe(fg_rank+1,CorrelType,FG_COMM,status,IERROR)
23190 call MPI_Get_count(status,MPI_DOUBLE_PRECISION,nbytes,IERROR)
23192 !c print *,'Processor',myrank,' msglen',msglen,' nbytes',nbytes
23193 call MPI_Recv(buffer,nbytes,MPI_DOUBLE_PRECISION, &
23194 fg_rank+1,CorrelType,FG_COMM,status,IERROR)
23195 time_sendrecv=time_sendrecv+MPI_Wtime()-time00
23196 !c write (*,*) 'Processor',fg_rank,
23197 !c &' has received correlation contribution from processor',fg_rank+1,
23198 !c & ' msglen=',msglen,' nbytes=',nbytes
23199 !c write (*,*) 'The received BUFFER array:'
23201 !c write (*,'(i2,9(3f8.3,2x))') i,(buffer(i,j),j=1,60)
23203 if (msglen.eq.msglen1) then
23204 call unpack_buffer(max_cont,max_dim,iatel_e_nucl+1,0,buffer)
23205 else if (msglen.eq.msglen2) then
23206 call unpack_buffer(max_cont,max_dim,iatel_e_nucl,0,buffer)
23207 call unpack_buffer(max_cont,max_dim,iatel_e_nucl+1,30,buffer)
23210 'ERROR!!!! message length changed while processing correlations.'
23212 'ERROR!!!! message length changed while processing correlations.'
23213 call MPI_Abort(MPI_COMM_WORLD,Error,IERROR)
23214 endif ! msglen.eq.msglen1
23215 endif ! fg_rank.lt.nfgtasks-1
23222 write (iout,'(a)') 'Contact function values:'
23223 do i=nnt_molec(2),nct_molec(2)-1
23224 write (iout,'(2i3,50(1x,i2,f5.2))') &
23225 i,num_cont_hb(i),(jcont_hb(j,i),facont_hb(j,i), &
23226 j=1,num_cont_hb(i))
23231 !C Remove the loop below after debugging !!!
23232 ! do i=nnt_molec(2),nct_molec(2)
23234 ! gradcorr_nucl(j,i)=0.0D0
23235 ! gradxorr_nucl(j,i)=0.0D0
23236 ! gradcorr3_nucl(j,i)=0.0D0
23237 ! gradxorr3_nucl(j,i)=0.0D0
23240 ! print *,"iatsc_s_nucl,iatsc_e_nucl",iatsc_s_nucl,iatsc_e_nucl
23241 !C Calculate the local-electrostatic correlation terms
23242 do i=iatsc_s_nucl,iatsc_e_nucl
23244 num_conti=num_cont_hb(i)
23245 num_conti1=num_cont_hb(i+1)
23246 ! print *,i,num_conti,num_conti1
23251 !c write (iout,*) 'i=',i,' j=',j,' i1=',i1,' j1=',j1,
23252 !c & ' jj=',jj,' kk=',kk
23253 if (j1.eq.j+1 .or. j1.eq.j-1) then
23255 !C Contacts I-J and (I+1)-(J+1) or (I+1)-(J-1) occur simultaneously.
23256 !C The system gains extra energy.
23257 !C Tentative expression & coefficients; assumed d(stacking)=4.5 A,
23258 !C parallel dipoles of stacknig bases and sin(mui)sin(muj)/eps/d^3=0.7
23259 !C Need to implement full formulas 34 and 35 from Liwo et al., 1998.
23261 ecorr=ecorr+ehbcorr_nucl(i,j,i+1,j1,jj,kk,0.528D0,0.132D0)
23262 if (energy_dec) write (iout,'(a6,2i5,0pf7.3)') &
23263 'ecorrh',i,j,ehbcorr_nucl(i,j,i+1,j1,jj,kk,0.528D0,0.132D0)
23265 else if (j1.eq.j) then
23267 !C Contacts I-J and I-(J+1) occur simultaneously.
23268 !C The system loses extra energy.
23269 !C Tentative expression & c?oefficients; assumed d(stacking)=4.5 A,
23270 !C parallel dipoles of stacknig bases and sin(mui)sin(muj)/eps/d^3=0.7
23271 !C Need to implement full formulas 32 from Liwo et al., 1998.
23273 !c write (iout,*) 'ecorr3: i=',i,' j=',j,' i1=',i1,' j1=',j1,
23274 !c & ' jj=',jj,' kk=',kk
23275 ecorr3=ecorr3+ehbcorr3_nucl(i,j,i+1,j,jj,kk,0.310D0,-0.155D0)
23280 !c write (iout,*) 'ecorr3: i=',i,' j=',j,' i1=',i1,' j1=',j1,
23281 !c & ' jj=',jj,' kk=',kk
23282 if (j1.eq.j+1) then
23283 !C Contacts I-J and (I+1)-J occur simultaneously.
23284 !C The system loses extra energy.
23285 ecorr3=ecorr3+ehbcorr3_nucl(i,j,i,j+1,jj,kk,0.310D0,-0.155D0)
23291 end subroutine multibody_hb_nucl
23292 !-----------------------------------------------------------
23293 real(kind=8) function ehbcorr_nucl(i,j,k,l,jj,kk,coeffp,coeffm)
23294 ! implicit real(kind=8) (a-h,o-z)
23295 ! include 'DIMENSIONS'
23296 ! include 'COMMON.IOUNITS'
23297 ! include 'COMMON.DERIV'
23298 ! include 'COMMON.INTERACT'
23299 ! include 'COMMON.CONTACTS'
23300 real(kind=8),dimension(3) :: gx,gx1
23302 !el local variables
23303 integer :: i,j,k,l,jj,kk,ll,ilist,m, iresshield
23304 real(kind=8) :: coeffp,coeffm,eij,ekl,ees0pij,ees0pkl,ees0mij,&
23305 ees0mkl,ees,coeffpees0pij,coeffmees0mij,&
23306 coeffpees0pkl,coeffmees0mkl,gradlongij,gradlongkl, &
23310 eij=facont_hb(jj,i)
23311 ekl=facont_hb(kk,k)
23312 ees0pij=ees0p(jj,i)
23313 ees0pkl=ees0p(kk,k)
23314 ees0mij=ees0m(jj,i)
23315 ees0mkl=ees0m(kk,k)
23317 ees=-(coeffp*ees0pij*ees0pkl+coeffm*ees0mij*ees0mkl)
23318 ! print *,"ehbcorr_nucl",ekont,ees
23319 !cd ees=-(coeffp*ees0pkl+coeffm*ees0mkl)
23320 !C Following 4 lines for diagnostics.
23325 !cd write (iout,*)'Contacts have occurred for nucleic bases',
23326 !cd & i,j,' fcont:',eij,' eij',' eesij',ees0pij,ees0mij,' and ',k,l
23327 !cd & ,' fcont ',ekl,' eeskl',ees0pkl,ees0mkl,' ees=',ees
23328 !C Calculate the multi-body contribution to energy.
23329 ! ecorr_nucl=ecorr_nucl+ekont*ees
23330 !C Calculate multi-body contributions to the gradient.
23331 coeffpees0pij=coeffp*ees0pij
23332 coeffmees0mij=coeffm*ees0mij
23333 coeffpees0pkl=coeffp*ees0pkl
23334 coeffmees0mkl=coeffm*ees0mkl
23336 gradxorr_nucl(ll,i)=gradxorr_nucl(ll,i) &
23337 -ekont*(coeffpees0pkl*gacontp_hb1(ll,jj,i)+&
23338 coeffmees0mkl*gacontm_hb1(ll,jj,i))
23339 gradxorr_nucl(ll,j)=gradxorr_nucl(ll,j) &
23340 -ekont*(coeffpees0pkl*gacontp_hb2(ll,jj,i)+&
23341 coeffmees0mkl*gacontm_hb2(ll,jj,i))
23342 gradxorr_nucl(ll,k)=gradxorr_nucl(ll,k) &
23343 -ekont*(coeffpees0pij*gacontp_hb1(ll,kk,k)+&
23344 coeffmees0mij*gacontm_hb1(ll,kk,k))
23345 gradxorr_nucl(ll,l)=gradxorr_nucl(ll,l) &
23346 -ekont*(coeffpees0pij*gacontp_hb2(ll,kk,k)+ &
23347 coeffmees0mij*gacontm_hb2(ll,kk,k))
23348 gradlongij=ees*ekl*gacont_hbr(ll,jj,i)- &
23349 ekont*(coeffpees0pkl*gacontp_hb3(ll,jj,i)+ &
23350 coeffmees0mkl*gacontm_hb3(ll,jj,i))
23351 gradcorr_nucl(ll,j)=gradcorr_nucl(ll,j)+gradlongij
23352 gradcorr_nucl(ll,i)=gradcorr_nucl(ll,i)-gradlongij
23353 gradlongkl=ees*eij*gacont_hbr(ll,kk,k)- &
23354 ekont*(coeffpees0pij*gacontp_hb3(ll,kk,k)+ &
23355 coeffmees0mij*gacontm_hb3(ll,kk,k))
23356 gradcorr_nucl(ll,l)=gradcorr_nucl(ll,l)+gradlongkl
23357 gradcorr_nucl(ll,k)=gradcorr_nucl(ll,k)-gradlongkl
23358 gradxorr_nucl(ll,i)=gradxorr_nucl(ll,i)-gradlongij
23359 gradxorr_nucl(ll,j)=gradxorr_nucl(ll,j)+gradlongij
23360 gradxorr_nucl(ll,k)=gradxorr_nucl(ll,k)-gradlongkl
23361 gradxorr_nucl(ll,l)=gradxorr_nucl(ll,l)+gradlongkl
23363 ehbcorr_nucl=ekont*ees
23365 end function ehbcorr_nucl
23366 !-------------------------------------------------------------------------
23368 real(kind=8) function ehbcorr3_nucl(i,j,k,l,jj,kk,coeffp,coeffm)
23369 ! implicit real(kind=8) (a-h,o-z)
23370 ! include 'DIMENSIONS'
23371 ! include 'COMMON.IOUNITS'
23372 ! include 'COMMON.DERIV'
23373 ! include 'COMMON.INTERACT'
23374 ! include 'COMMON.CONTACTS'
23375 real(kind=8),dimension(3) :: gx,gx1
23377 !el local variables
23378 integer :: i,j,k,l,jj,kk,ll,ilist,m, iresshield
23379 real(kind=8) :: coeffp,coeffm,eij,ekl,ees0pij,ees0pkl,ees0mij,&
23380 ees0mkl,ees,coeffpees0pij,coeffmees0mij,&
23381 coeffpees0pkl,coeffmees0mkl,gradlongij,gradlongkl, &
23385 eij=facont_hb(jj,i)
23386 ekl=facont_hb(kk,k)
23387 ees0pij=ees0p(jj,i)
23388 ees0pkl=ees0p(kk,k)
23389 ees0mij=ees0m(jj,i)
23390 ees0mkl=ees0m(kk,k)
23392 ees=-(coeffp*ees0pij*ees0pkl+coeffm*ees0mij*ees0mkl)
23393 !cd ees=-(coeffp*ees0pkl+coeffm*ees0mkl)
23394 !C Following 4 lines for diagnostics.
23399 !cd write (iout,*)'Contacts have occurred for nucleic bases',
23400 !cd & i,j,' fcont:',eij,' eij',' eesij',ees0pij,ees0mij,' and ',k,l
23401 !cd & ,' fcont ',ekl,' eeskl',ees0pkl,ees0mkl,' ees=',ees
23402 !C Calculate the multi-body contribution to energy.
23403 ! ecorr=ecorr+ekont*ees
23404 !C Calculate multi-body contributions to the gradient.
23405 coeffpees0pij=coeffp*ees0pij
23406 coeffmees0mij=coeffm*ees0mij
23407 coeffpees0pkl=coeffp*ees0pkl
23408 coeffmees0mkl=coeffm*ees0mkl
23410 gradxorr3_nucl(ll,i)=gradxorr3_nucl(ll,i) &
23411 -ekont*(coeffpees0pkl*gacontp_hb1(ll,jj,i)+&
23412 coeffmees0mkl*gacontm_hb1(ll,jj,i))
23413 gradxorr3_nucl(ll,j)=gradxorr3_nucl(ll,j) &
23414 -ekont*(coeffpees0pkl*gacontp_hb2(ll,jj,i)+ &
23415 coeffmees0mkl*gacontm_hb2(ll,jj,i))
23416 gradxorr3_nucl(ll,k)=gradxorr3_nucl(ll,k) &
23417 -ekont*(coeffpees0pij*gacontp_hb1(ll,kk,k)+ &
23418 coeffmees0mij*gacontm_hb1(ll,kk,k))
23419 gradxorr3_nucl(ll,l)=gradxorr3_nucl(ll,l) &
23420 -ekont*(coeffpees0pij*gacontp_hb2(ll,kk,k)+ &
23421 coeffmees0mij*gacontm_hb2(ll,kk,k))
23422 gradlongij=ees*ekl*gacont_hbr(ll,jj,i)- &
23423 ekont*(coeffpees0pkl*gacontp_hb3(ll,jj,i)+ &
23424 coeffmees0mkl*gacontm_hb3(ll,jj,i))
23425 gradcorr3_nucl(ll,j)=gradcorr3_nucl(ll,j)+gradlongij
23426 gradcorr3_nucl(ll,i)=gradcorr3_nucl(ll,i)-gradlongij
23427 gradlongkl=ees*eij*gacont_hbr(ll,kk,k)- &
23428 ekont*(coeffpees0pij*gacontp_hb3(ll,kk,k)+ &
23429 coeffmees0mij*gacontm_hb3(ll,kk,k))
23430 gradcorr3_nucl(ll,l)=gradcorr3_nucl(ll,l)+gradlongkl
23431 gradcorr3_nucl(ll,k)=gradcorr3_nucl(ll,k)-gradlongkl
23432 gradxorr3_nucl(ll,i)=gradxorr3_nucl(ll,i)-gradlongij
23433 gradxorr3_nucl(ll,j)=gradxorr3_nucl(ll,j)+gradlongij
23434 gradxorr3_nucl(ll,k)=gradxorr3_nucl(ll,k)-gradlongkl
23435 gradxorr3_nucl(ll,l)=gradxorr3_nucl(ll,l)+gradlongkl
23437 ehbcorr3_nucl=ekont*ees
23439 end function ehbcorr3_nucl
23441 subroutine pack_buffer(dimen1,dimen2,atom,indx,buffer)
23442 integer dimen1,dimen2,atom,indx,numcont,i,ii,k,j,num_kont,num_kont_old
23443 real(kind=8):: buffer(dimen1,dimen2)
23444 num_kont=num_cont_hb(atom)
23448 buffer(i,indx+(k-1)*3+j)=zapas2(j,i,atom,k)
23451 buffer(i,indx+25)=facont_hb(i,atom)
23452 buffer(i,indx+26)=ees0p(i,atom)
23453 buffer(i,indx+27)=ees0m(i,atom)
23454 buffer(i,indx+28)=d_cont(i,atom)
23455 buffer(i,indx+29)=dfloat(jcont_hb(i,atom))
23457 buffer(1,indx+30)=dfloat(num_kont)
23459 end subroutine pack_buffer
23460 !c------------------------------------------------------------------------------
23461 subroutine unpack_buffer(dimen1,dimen2,atom,indx,buffer)
23462 integer dimen1,dimen2,atom,indx,numcont,i,ii,k,j,num_kont,num_kont_old
23463 real(kind=8):: buffer(dimen1,dimen2)
23464 ! double precision zapas
23465 ! common /contacts_hb/ zapas(3,maxconts,maxres,8),
23466 ! & facont_hb(maxconts,maxres),ees0p(maxconts,maxres),
23467 ! & ees0m(maxconts,maxres),d_cont(maxconts,maxres),
23468 ! & num_cont_hb(maxres),jcont_hb(maxconts,maxres)
23469 num_kont=buffer(1,indx+30)
23470 num_kont_old=num_cont_hb(atom)
23471 num_cont_hb(atom)=num_kont+num_kont_old
23476 zapas2(j,ii,atom,k)=buffer(i,indx+(k-1)*3+j)
23479 facont_hb(ii,atom)=buffer(i,indx+25)
23480 ees0p(ii,atom)=buffer(i,indx+26)
23481 ees0m(ii,atom)=buffer(i,indx+27)
23482 d_cont(i,atom)=buffer(i,indx+28)
23483 jcont_hb(ii,atom)=buffer(i,indx+29)
23486 end subroutine unpack_buffer
23487 !c------------------------------------------------------------------------------
23489 subroutine ecatcat(ecationcation)
23490 use MD_data, only: t_bath
23491 integer :: i,j,itmp,xshift,yshift,zshift,subchap,k,itypi,itypj,irdiff
23492 real(kind=8) :: xi,yi,zi,xj,yj,zj,ract,rcat0,epscalc,r06,r012,&
23493 r7,r4,ecationcation,k0,rcal,aa,bb,sslipi,ssgradlipi,sslipj,ssgradlipj
23494 real(kind=8) :: xj_temp,yj_temp,zj_temp,xj_safe,yj_safe,zj_safe, &
23495 dist_init,dist_temp,Evan1cat,Evan2cat,Eeleccat
23496 real(kind=8) :: awat,bwat,cwat,dwat,sss2min2,sss2mingrad2,rdiff,ewater
23497 real(kind=8),dimension(3) ::dEvan1Cmcat,dEvan2Cmcat,dEeleccat,&
23500 ecationcation=0.0d0
23501 if (nres_molec(5).le.1) return
23506 ! k0 = 332.0*(2.0*2.0)/80.0
23510 itmp=itmp+nres_molec(i)
23512 ! write(iout,*) "itmp",itmp
23513 do i=itmp+1,itmp+nres_molec(5)-1
23518 ! write (iout,*) i,"TUTUT",c(1,i)
23520 call to_box(xi,yi,zi)
23521 call lipid_layer(xi,yi,zi,sslipi,ssgradlipi)
23522 do j=i+1,itmp+nres_molec(5)
23524 ! print *,i,j,itypi,itypj
23525 k0 = 332.0*(ichargecat(itypi)*ichargecat(itypj))/80.0
23526 ! print *,i,j,'catcat'
23530 call to_box(xj,yj,zj)
23531 ! call lipid_layer(xj,yj,zj,sslipj,ssgradlipj)
23532 ! aa=aa_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0 &
23533 ! +aa_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
23534 ! bb=bb_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0 &
23535 ! +bb_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
23536 xj=boxshift(xj-xi,boxxsize)
23537 yj=boxshift(yj-yi,boxysize)
23538 zj=boxshift(zj-zi,boxzsize)
23539 rcal =xj**2+yj**2+zj**2
23541 if ((itypi.gt.1).or.(itypj.gt.1)) then
23547 ! k0 = 332*(2*2)/80
23548 Evan1cat=epscalc*(r012/(rcal**6))
23549 Evan2cat=epscalc*2*(r06/(rcal**3))
23557 dEvan1Cmcat(k)=-12*r(k)*epscalc*r012/r7
23558 dEvan2Cmcat(k)=-12*r(k)*epscalc*r06/r4
23559 dEeleccat(k)=-k0*r(k)/ract**3
23562 gg(k) = dEvan1Cmcat(k)+dEvan2Cmcat(k)+dEeleccat(k)
23563 gradcatcat(k,i)=gradcatcat(k,i)-gg(k)
23564 gradcatcat(k,j)=gradcatcat(k,j)+gg(k)
23566 if (energy_dec) write (iout,*) "ecatcat",i,j,Evan1cat,Evan2cat,Eeleccat,&
23567 r012,rcal**6,ichargecat(itypi)*ichargecat(itypj)
23568 ! write(iout,*) "ecatcat",i,j, ecationcation,xj,yj,zj
23569 ecationcation=ecationcation+Evan1cat+Evan2cat+Eeleccat
23570 else !this is water part and other non standard molecules
23572 sss2min2=sscale2(ract,10.0d0,1.0d0)! cutoff for water interaction is 15A
23573 if (sss2min2.eq.0.0d0) cycle
23574 sss2mingrad2=sscagrad2(ract,10.0d0,1.0d0)
23575 irdiff=int((ract-2.06d0)*50.0d0)+1
23577 rdiff=ract-((irdiff-1)*0.02d0+2.06d0)
23578 if (irdiff.le.0) then
23582 ! print *,rdiff,ract,irdiff,sss2mingrad2
23583 awat=awaterenta(irdiff)-awaterentro(irdiff)*t_bath/1000.0d0
23584 bwat=bwaterenta(irdiff)-bwaterentro(irdiff)*t_bath/1000.0d0
23585 cwat=cwaterenta(irdiff)-cwaterentro(irdiff)*t_bath/1000.0d0
23586 dwat=dwaterenta(irdiff)-dwaterentro(irdiff)*t_bath/1000.0d0
23591 ewater=awat+bwat*rdiff+cwat*rdiff*rdiff+dwat*rdiff*rdiff*rdiff
23592 ecationcation=ecationcation+ewater*sss2min2
23594 gg(k)=(bwat+2.0d0*cwat*rdiff+dwat*3.0d0*rdiff*rdiff)*r(k)/ract
23595 gradcatcat(k,i)=gradcatcat(k,i)-gg(k)*sss2min2-sss2mingrad2*ewater*r(k)/ract
23596 gradcatcat(k,j)=gradcatcat(k,j)+gg(k)*sss2min2+sss2mingrad2*ewater*r(k)/ract
23598 if (energy_dec) write(iout,'(2f10.7,f15.7,2i5)') rdiff,ract,ecationcation,i,j
23603 end subroutine ecatcat
23604 !---------------------------------------------------------------------------
23606 subroutine ecats_prot_amber(evdw)
23607 ! subroutine ecat_prot2(ecation_prot)
23612 !el local variables
23613 integer :: iint,itypi1,subchap,isel,itmp
23614 real(kind=8) :: rrij,xi,yi,zi,sig,rij_shift,e1,e2,sigm,epsi
23615 real(kind=8) :: evdw,aa,bb
23616 real(kind=8) :: xj_safe,yj_safe,zj_safe,xj_temp,yj_temp,zj_temp,&
23617 dist_temp, dist_init,ssgradlipi,ssgradlipj, &
23618 sslipi,sslipj,faclip,alpha_sco
23620 real(kind=8) :: fracinbuf
23621 real (kind=8) :: escpho
23622 real (kind=8),dimension(4):: ener
23623 real(kind=8) :: b1,b2,egb
23624 real(kind=8) :: Fisocav,ECL,Elj,Equad,Epol,eheadtail,&
23626 Chif,ChiLambf,Fcav,dFdR,dFdOM1,&
23627 ecations_prot_amber,dFdOM2,dFdL,dFdOM12,&
23630 ! real(kind=8),dimension(3,2)::erhead_tail
23631 ! real(kind=8),dimension(3) :: Rhead_distance,ertail,erhead,Rtail_distance
23632 real(kind=8) :: facd4, adler, Fgb, facd3
23633 integer troll,jj,istate
23634 real (kind=8) :: dcosom1(3),dcosom2(3)
23635 real(kind=8) ::locbox(3)
23641 if (nres_molec(5).eq.0) return
23643 ! sss_ele_cut=1.0d0
23647 itmp=itmp+nres_molec(i)
23650 ! do i=1,nres_molec(1)-1 ! loop over all peptide groups needs parralelization
23651 do i=ibond_start,ibond_end
23653 ! print *,"I am in EVDW",i
23654 itypi=iabs(itype(i,1))
23656 ! if (i.ne.47) cycle
23657 if ((itypi.eq.ntyp1).or.(itypi.eq.10)) cycle
23658 itypi1=iabs(itype(i+1,1))
23662 call to_box(xi,yi,zi)
23663 call lipid_layer(xi,yi,zi,sslipi,ssgradlipi)
23664 dxi=dc_norm(1,nres+i)
23665 dyi=dc_norm(2,nres+i)
23666 dzi=dc_norm(3,nres+i)
23667 dsci_inv=vbld_inv(i+nres)
23668 do j=itmp+1,itmp+nres_molec(5)
23670 ! Calculate SC interaction energy.
23671 itypj=iabs(itype(j,5))
23672 if ((itypj.eq.ntyp1)) cycle
23673 CALL elgrad_init_cat(eheadtail,Egb,Ecl,Elj,Equad,Epol)
23680 call to_box(xj,yj,zj)
23681 ! write(iout,*) "xi,yi,zi,xj,yj,zj", xi,yi,zi,xj,yj,zj
23683 ! call lipid_layer(xj,yj,zj,sslipj,ssgradlipj)
23684 ! aa=aa_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0 &
23685 ! +aa_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
23686 ! bb=bb_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0 &
23687 ! +bb_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
23688 xj=boxshift(xj-xi,boxxsize)
23689 yj=boxshift(yj-yi,boxysize)
23690 zj=boxshift(zj-zi,boxzsize)
23691 ! write(iout,*) "xj,yj,zj", xj,yj,zj,boxxsize
23693 ! dxj = dc_norm( 1, nres+j )
23694 ! dyj = dc_norm( 2, nres+j )
23695 ! dzj = dc_norm( 3, nres+j )
23699 ! Parameters from fitting the analitical expressions to the PMF obtained by umbrella
23700 ! sampling performed with amber package
23704 ! a12sq = rborn(itypi,itypj) * rborn(itypj,itypi)
23705 chi1 = chi1cat(itypi,itypj)
23706 chis1 = chis1cat(itypi,itypj)
23707 chip1 = chipp1cat(itypi,itypj)
23714 ! chis2 = chis(itypj,itypi)
23715 chis12 = chis1 * chis2
23716 sig1 = sigmap1cat(itypi,itypj)
23718 ! sig2 = sigmap2(itypi,itypj)
23719 ! alpha factors from Fcav/Gcav
23720 b1cav = alphasurcat(1,itypi,itypj)
23721 b2cav = alphasurcat(2,itypi,itypj)
23722 b3cav = alphasurcat(3,itypi,itypj)
23723 b4cav = alphasurcat(4,itypi,itypj)
23730 ! used to determine whether we want to do quadrupole calculations
23731 eps_in = epsintabcat(itypi,itypj)
23732 if (eps_in.eq.0.0) eps_in=1.0
23734 eps_inout_fac = ( (1.0d0/eps_in) - (1.0d0/eps_out))
23738 ctail(k,1)=c(k,i+nres)
23741 call to_box(ctail(1,1),ctail(2,1),ctail(3,1))
23742 call to_box(ctail(1,2),ctail(2,2),ctail(3,2))
23743 !c! tail distances will be themselves usefull elswhere
23744 !c1 (in Gcav, for example)
23746 Rtail_distance(k) = boxshift(ctail(k,2) - ctail(k,1),locbox(k))
23749 (Rtail_distance(1)*Rtail_distance(1)) &
23750 + (Rtail_distance(2)*Rtail_distance(2)) &
23751 + (Rtail_distance(3)*Rtail_distance(3)))
23752 ! tail location and distance calculations
23754 d1 = dheadcat(1, 1, itypi, itypj)
23755 ! d2 = dhead(2, 1, itypi, itypj)
23757 ! location of polar head is computed by taking hydrophobic centre
23758 ! and moving by a d1 * dc_norm vector
23759 ! see unres publications for very informative images
23760 chead(k,1) = c(k, i+nres) + d1 * dc_norm(k, i+nres)
23761 chead(k,2) = c(k, j)
23763 call to_box(chead(1,1),chead(2,1),chead(3,1))
23764 call to_box(chead(1,2),chead(2,2),chead(3,2))
23765 ! write(iout,*) "TEST",chead(1,1),chead(2,1),chead(3,1),dc_norm(k, i+nres),d1
23767 ! Rsc_distance(k) = dabs(c(k, i+nres) - c(k, j+nres))
23768 ! Rsc(k) = Rsc_distance(k) * Rsc_distance(k)
23770 Rhead_distance(k) = boxshift(chead(k,2) - chead(k,1),locbox(k))
23772 ! pitagoras (root of sum of squares)
23774 (Rhead_distance(1)*Rhead_distance(1)) &
23775 + (Rhead_distance(2)*Rhead_distance(2)) &
23776 + (Rhead_distance(3)*Rhead_distance(3)))
23777 !-------------------------------------------------------------------
23778 ! zero everything that should be zero'ed
23797 dscj_inv = vbld_inv(j+nres)
23798 ! print *,i,j,dscj_inv,dsci_inv
23799 ! rij holds 1/(distance of Calpha atoms)
23800 rrij = 1.0D0 / ( xj*xj + yj*yj + zj*zj)
23803 ! this should be in elgrad_init but om's are calculated by sc_angular
23804 ! which in turn is used by older potentials
23805 ! om = omega, sqom = om^2
23808 sqom12 = om12 * om12
23810 ! now we calculate EGB - Gey-Berne
23811 ! It will be summed up in evdwij and saved in evdw
23812 sigsq = 1.0D0 / sigsq
23813 sig = sig0ij * dsqrt(sigsq)
23814 ! rij_shift = 1.0D0 / rij - sig + sig0ij
23815 rij_shift = Rtail - sig + sig0ij
23816 IF (rij_shift.le.0.0D0) THEN
23818 if (evdw.gt.1.0d6) then
23819 write (*,'(2(1x,a3,i3),7f7.2)') &
23820 restyp(itype(i,1),1),i,restyp(itype(j,1),1),j,&
23821 1.0d0/rij,Rtail,Rhead,rij_shift, sig, sig0ij,sigsq
23822 write(*,*) facsig,faceps1_inv,om1,chiom1,chi1
23823 write(*,*) "ANISO?!",chi1
23824 !evdwij,Fcav,Ecl,Egb,Epol,Fisocav,Elj,&
23825 ! Equad,evdwij+Fcav+eheadtail,evdw
23830 sigder = -sig * sigsq
23831 rij_shift = 1.0D0 / rij_shift
23832 fac = rij_shift**expon
23833 c1 = fac * fac * aa_aq_cat(itypi,itypj)
23834 ! print *,"ADAM",aa_aq(itypi,itypj)
23837 c2 = fac * bb_aq_cat(itypi,itypj)
23839 evdwij = eps1 * eps2rt * eps3rt * ( c1 + c2 )
23840 eps2der = eps3rt * evdwij
23841 eps3der = eps2rt * evdwij
23842 ! evdwij = 4.0d0 * eps2rt * eps3rt * evdwij
23843 evdwij = eps2rt * eps3rt * evdwij
23845 ! IF (bb_aq(itypi,itypj).gt.0) THEN
23846 ! evdw_p = evdw_p + evdwij
23848 ! evdw_m = evdw_m + evdwij
23854 c1 = c1 * eps1 * eps2rt**2 * eps3rt**2
23855 fac = -expon * (c1 + evdwij) * rij_shift
23856 sigder = fac * sigder
23857 ! Calculate distance derivative
23861 ! print *,"GG(1),distance grad",gg(1)
23862 fac = chis1 * sqom1 + chis2 * sqom2 &
23863 - 2.0d0 * chis12 * om1 * om2 * om12
23864 pom = 1.0d0 - chis1 * chis2 * sqom12
23865 Lambf = (1.0d0 - (fac / pom))
23866 Lambf = dsqrt(Lambf)
23867 sparrow = 1.0d0 / dsqrt(sig1**2.0d0 + sig2**2.0d0)
23868 Chif = Rtail * sparrow
23869 ChiLambf = Chif * Lambf
23870 eagle = dsqrt(ChiLambf)
23871 bat = ChiLambf ** 11.0d0
23872 top = b1cav * ( eagle + b2cav * ChiLambf - b3cav )
23873 bot = 1.0d0 + b4cav * (ChiLambf ** 12.0d0)
23877 dtop = b1cav * ((Lambf / (2.0d0 * eagle)) + (b2cav * Lambf))
23878 dbot = 12.0d0 * b4cav * bat * Lambf
23879 dFdR = ((dtop * bot - top * dbot) / botsq) * sparrow
23881 dtop = b1cav * ((Chif / (2.0d0 * eagle)) + (b2cav * Chif))
23882 dbot = 12.0d0 * b4cav * bat * Chif
23883 eagle = Lambf * pom
23884 dFdOM1 = -(chis1 * om1 - chis12 * om2 * om12) / (eagle)
23885 dFdOM2 = -(chis2 * om2 - chis12 * om1 * om12) / (eagle)
23886 dFdOM12 = chis12 * (chis1 * om1 * om12 - om2) &
23887 * (chis2 * om2 * om12 - om1) / (eagle * pom)
23889 dFdL = ((dtop * bot - top * dbot) / botsq)
23890 dCAVdOM1 = dFdL * ( dFdOM1 )
23891 dCAVdOM2 = dFdL * ( dFdOM2 )
23892 dCAVdOM12 = dFdL * ( dFdOM12 )
23895 ertail(k) = Rtail_distance(k)/Rtail
23897 erdxi = scalar( ertail(1), dC_norm(1,i+nres) )
23898 erdxj = scalar( ertail(1), dC_norm(1,j) )
23899 facd1 = dtailcat(1,itypi,itypj) * vbld_inv(i+nres)
23900 facd2 = dtailcat(2,itypi,itypj) * vbld_inv(j)
23902 pom = ertail(k)-facd1*(ertail(k)-erdxi*dC_norm(k,i+nres))
23903 gradpepcatx(k,i) = gradpepcatx(k,i) &
23904 - (( dFdR + gg(k) ) * pom)
23905 pom = ertail(k)-facd2*(ertail(k)-erdxj*dC_norm(k,j))
23906 ! gvdwx(k,j) = gvdwx(k,j) &
23907 ! + (( dFdR + gg(k) ) * pom)
23908 gradpepcat(k,i) = gradpepcat(k,i) &
23909 - (( dFdR + gg(k) ) * ertail(k))
23910 gradpepcat(k,j) = gradpepcat(k,j) &
23911 + (( dFdR + gg(k) ) * ertail(k))
23914 !c! Compute head-head and head-tail energies for each state
23915 !! if (.false.) then ! turn off electrostatic
23916 if (itype(j,5).gt.0) then ! the normal cation case
23917 isel = iabs(Qi) + 1 ! ion is always charged so iabs(Qj)
23918 ! print *,i,itype(i,1),isel
23919 IF (isel.eq.0) THEN
23920 !c! No charges - do nothing
23923 ELSE IF (isel.eq.1) THEN
23924 !c! Nonpolar-charge interactions
23925 if ((itype(i,1).eq.27).or.(itype(i,1).eq.26).or.(itype(i,1).eq.25)) then
23932 ! eheadtail = 0.0d0
23934 ELSE IF (isel.eq.3) THEN
23935 !c! Dipole-charge interactions
23936 if ((itype(i,1).eq.27).or.(itype(i,1).eq.26).or.(itype(i,1).eq.25)) then
23940 ! write(iout,*) "KURWA0",d1
23942 CALL edq_cat(ecl, elj, epol)
23943 eheadtail = ECL + elj + epol
23944 ! eheadtail = 0.0d0
23946 ELSE IF ((isel.eq.2)) THEN
23948 !c! Same charge-charge interaction ( +/+ or -/- )
23949 if ((itype(i,1).eq.27).or.(itype(i,1).eq.26).or.(itype(i,1).eq.25)) then
23954 CALL eqq_cat(Ecl,Egb,Epol,Fisocav,Elj)
23955 eheadtail = ECL + Egb + Epol + Fisocav + Elj
23956 ! eheadtail = 0.0d0
23958 ! ELSE IF ((isel.eq.2.and. &
23959 ! iabs(Qi).eq.1).and. &
23960 ! nstate(itypi,itypj).ne.1) THEN
23961 !c! Different charge-charge interaction ( +/- or -/+ )
23962 ! if ((itype(i,1).eq.27).or.(itype(i,1).eq.26).or.(itype(i,1).eq.25)) then
23966 ! if ((itype(j,1).eq.27).or.(itype(j,1).eq.26).or.(itype(j,1).eq.25)) then
23971 ! CALL energy_quad(istate,eheadtail,Ecl,Egb,Epol,Fisocav,Elj,Equad)
23972 END IF ! this endif ends the "catch the gly-gly" at the beggining of Fcav
23974 write(iout,*) "not yet implemented",j,itype(j,5)
23976 !! endif ! turn off electrostatic
23977 evdw = evdw + Fcav + eheadtail
23978 ! if (evdw.gt.1.0d6) then
23979 ! write (*,'(2(1x,a3,i3),3f6.2,10f16.7)') &
23980 ! restyp(itype(i,1),1),i,restyp(itype(j,1),1),j,&
23981 ! 1.0d0/rij,Rtail,Rhead,evdwij,Fcav,Ecl,Egb,Epol,Fisocav,Elj,&
23982 ! Equad,evdwij+Fcav+eheadtail,evdw
23985 IF (energy_dec) write (iout,'(2(1x,a3,i3),3f6.2,10f16.7)') &
23986 restyp(itype(i,1),1),i,restyp(itype(j,1),1),j,&
23987 1.0d0/rij,Rtail,Rhead,evdwij,Fcav,Ecl,Egb,Epol,Fisocav,Elj,&
23988 Equad,evdwij+Fcav+eheadtail,evdw
23989 ! evdw = evdw + Fcav + eheadtail
23990 if (energy_dec) write(iout,*) "FCAV", &
23991 sig1,sig2,b1cav,b2cav,b3cav,b4cav
23992 ! print *,"before sc_grad_cat", i,j, gradpepcat(1,j)
23993 ! iF (nstate(itypi,itypj).eq.1) THEN
23995 ! print *,"after sc_grad_cat", i,j, gradpepcat(1,j)
23998 !c!-------------------------------------------------------------------
24002 !c write (iout,*) "Number of loop steps in EGB:",ind
24003 !c energy_dec=.false.
24004 ! print *,"EVDW KURW",evdw,nres
24008 do i=ibond_start,ibond_end
24010 ! print *,"I am in EVDW",i
24011 itypi=10 ! the peptide group parameters are for glicine
24013 ! if (i.ne.47) cycle
24014 if ((itype(i,1).eq.ntyp1).or.itype(i+1,1).eq.ntyp1) cycle
24015 itypi1=iabs(itype(i+1,1))
24016 xi=(c(1,i)+c(1,i+1))/2.0
24017 yi=(c(2,i)+c(2,i+1))/2.0
24018 zi=(c(3,i)+c(3,i+1))/2.0
24019 call to_box(xi,yi,zi)
24023 dsci_inv=vbld_inv(i+1)/2.0
24024 do j=itmp+1,itmp+nres_molec(5)
24026 ! Calculate SC interaction energy.
24027 itypj=iabs(itype(j,5))
24028 if ((itypj.eq.ntyp1)) cycle
24029 CALL elgrad_init_cat_pep(eheadtail,Egb,Ecl,Elj,Equad,Epol)
24035 call to_box(xj,yj,zj)
24036 xj=boxshift(xj-xi,boxxsize)
24037 yj=boxshift(yj-yi,boxysize)
24038 zj=boxshift(zj-zi,boxzsize)
24040 dist_init=(xj-xi)**2+(yj-yi)**2+(zj-zi)**2
24042 dxj = 0.0d0! dc_norm( 1, nres+j )
24043 dyj = 0.0d0!dc_norm( 2, nres+j )
24044 dzj = 0.0d0! dc_norm( 3, nres+j )
24048 ! Parameters from fitting the analitical expressions to the PMF obtained by umbrella
24049 ! sampling performed with amber package
24053 ! a12sq = rborn(itypi,itypj) * rborn(itypj,itypi)
24054 chi1 = chi1cat(itypi,itypj)
24055 chis1 = chis1cat(itypi,itypj)
24056 chip1 = chipp1cat(itypi,itypj)
24063 ! chis2 = chis(itypj,itypi)
24064 chis12 = chis1 * chis2
24065 sig1 = sigmap1cat(itypi,itypj)
24067 ! sig2 = sigmap2(itypi,itypj)
24068 ! alpha factors from Fcav/Gcav
24069 b1cav = alphasurcat(1,itypi,itypj)
24070 b2cav = alphasurcat(2,itypi,itypj)
24071 b3cav = alphasurcat(3,itypi,itypj)
24072 b4cav = alphasurcat(4,itypi,itypj)
24074 ! used to determine whether we want to do quadrupole calculations
24075 eps_in = epsintabcat(itypi,itypj)
24076 if (eps_in.eq.0.0) eps_in=1.0
24078 eps_inout_fac = ( (1.0d0/eps_in) - (1.0d0/eps_out))
24082 ctail(k,1)=(c(k,i)+c(k,i+1))/2.0
24085 call to_box(ctail(1,1),ctail(2,1),ctail(3,1))
24086 call to_box(ctail(1,2),ctail(2,2),ctail(3,2))
24087 !c! tail distances will be themselves usefull elswhere
24088 !c1 (in Gcav, for example)
24090 Rtail_distance(k) = boxshift(ctail(k,2) - ctail(k,1),locbox(k))
24093 !c! tail distances will be themselves usefull elswhere
24094 !c1 (in Gcav, for example)
24096 (Rtail_distance(1)*Rtail_distance(1)) &
24097 + (Rtail_distance(2)*Rtail_distance(2)) &
24098 + (Rtail_distance(3)*Rtail_distance(3)))
24099 ! tail location and distance calculations
24101 d1 = dheadcat(1, 1, itypi, itypj)
24104 ! d2 = dhead(2, 1, itypi, itypj)
24106 ! location of polar head is computed by taking hydrophobic centre
24107 ! and moving by a d1 * dc_norm vector
24108 ! see unres publications for very informative images
24109 chead(k,1) = (c(k, i)+c(k,i+1))/2.0 + d1 * dc_norm(k, i)
24110 chead(k,2) = c(k, j)
24113 ! Rsc_distance(k) = dabs(c(k, i+nres) - c(k, j+nres))
24114 ! Rsc(k) = Rsc_distance(k) * Rsc_distance(k)
24115 call to_box(chead(1,1),chead(2,1),chead(3,1))
24116 call to_box(chead(1,2),chead(2,2),chead(3,2))
24119 ! Rsc_distance(k) = dabs(c(k, i+nres) - c(k, j+nres))
24120 ! Rsc(k) = Rsc_distance(k) * Rsc_distance(k)
24122 Rhead_distance(k) = boxshift(chead(k,2) - chead(k,1),locbox(k))
24125 ! pitagoras (root of sum of squares)
24127 (Rhead_distance(1)*Rhead_distance(1)) &
24128 + (Rhead_distance(2)*Rhead_distance(2)) &
24129 + (Rhead_distance(3)*Rhead_distance(3)))
24130 !-------------------------------------------------------------------
24131 ! zero everything that should be zero'ed
24149 dscj_inv = vbld_inv(j+nres)
24150 ! print *,i,j,dscj_inv,dsci_inv
24151 ! rij holds 1/(distance of Calpha atoms)
24152 rrij = 1.0D0 / ( xj*xj + yj*yj + zj*zj)
24155 ! this should be in elgrad_init but om's are calculated by sc_angular
24156 ! which in turn is used by older potentials
24157 ! om = omega, sqom = om^2
24160 sqom12 = om12 * om12
24162 ! now we calculate EGB - Gey-Berne
24163 ! It will be summed up in evdwij and saved in evdw
24164 sigsq = 1.0D0 / sigsq
24165 sig = sig0ij * dsqrt(sigsq)
24166 ! rij_shift = 1.0D0 / rij - sig + sig0ij
24167 rij_shift = Rtail - sig + sig0ij
24168 IF (rij_shift.le.0.0D0) THEN
24170 ! if (evdw.gt.1.0d6) then
24171 ! write (*,'(2(1x,a3,i3),6f6.2)') &
24172 ! restyp(itype(i,1),1),i,restyp(itype(j,1),1),j,&
24173 ! 1.0d0/rij,Rtail,Rhead,rij_shift, sig, sig0ij
24174 !evdwij,Fcav,Ecl,Egb,Epol,Fisocav,Elj,&
24175 ! Equad,evdwij+Fcav+eheadtail,evdw
24179 sigder = -sig * sigsq
24180 rij_shift = 1.0D0 / rij_shift
24181 fac = rij_shift**expon
24182 c1 = fac * fac * aa_aq_cat(itypi,itypj)
24183 ! print *,"ADAM",aa_aq(itypi,itypj)
24186 c2 = fac * bb_aq_cat(itypi,itypj)
24188 evdwij = eps1 * eps2rt * eps3rt * ( c1 + c2 )
24189 eps2der = eps3rt * evdwij
24190 eps3der = eps2rt * evdwij
24191 ! evdwij = 4.0d0 * eps2rt * eps3rt * evdwij
24192 evdwij = eps2rt * eps3rt * evdwij
24194 ! IF (bb_aq(itypi,itypj).gt.0) THEN
24195 ! evdw_p = evdw_p + evdwij
24197 ! evdw_m = evdw_m + evdwij
24203 c1 = c1 * eps1 * eps2rt**2 * eps3rt**2
24204 fac = -expon * (c1 + evdwij) * rij_shift
24205 sigder = fac * sigder
24206 ! Calculate distance derivative
24211 fac = chis1 * sqom1 + chis2 * sqom2 &
24212 - 2.0d0 * chis12 * om1 * om2 * om12
24214 pom = 1.0d0 - chis1 * chis2 * sqom12
24215 ! print *,"TUT2",fac,chis1,sqom1,pom
24216 Lambf = (1.0d0 - (fac / pom))
24217 Lambf = dsqrt(Lambf)
24218 sparrow = 1.0d0 / dsqrt(sig1**2.0d0 + sig2**2.0d0)
24219 Chif = Rtail * sparrow
24220 ChiLambf = Chif * Lambf
24221 eagle = dsqrt(ChiLambf)
24222 bat = ChiLambf ** 11.0d0
24223 top = b1cav * ( eagle + b2cav * ChiLambf - b3cav )
24224 bot = 1.0d0 + b4cav * (ChiLambf ** 12.0d0)
24228 dtop = b1cav * ((Lambf / (2.0d0 * eagle)) + (b2cav * Lambf))
24229 dbot = 12.0d0 * b4cav * bat * Lambf
24230 dFdR = ((dtop * bot - top * dbot) / botsq) * sparrow
24232 dtop = b1cav * ((Chif / (2.0d0 * eagle)) + (b2cav * Chif))
24233 dbot = 12.0d0 * b4cav * bat * Chif
24234 eagle = Lambf * pom
24235 dFdOM1 = -(chis1 * om1 - chis12 * om2 * om12) / (eagle)
24236 dFdOM2 = -(chis2 * om2 - chis12 * om1 * om12) / (eagle)
24237 dFdOM12 = chis12 * (chis1 * om1 * om12 - om2) &
24238 * (chis2 * om2 * om12 - om1) / (eagle * pom)
24240 dFdL = ((dtop * bot - top * dbot) / botsq)
24241 dCAVdOM1 = dFdL * ( dFdOM1 )
24242 dCAVdOM2 = dFdL * ( dFdOM2 )
24243 dCAVdOM12 = dFdL * ( dFdOM12 )
24246 ertail(k) = Rtail_distance(k)/Rtail
24248 erdxi = scalar( ertail(1), dC_norm(1,i) )
24249 erdxj = scalar( ertail(1), dC_norm(1,j) )
24250 facd1 = dtailcat(1,itypi,itypj) * vbld_inv(i)
24251 facd2 = dtailcat(2,itypi,itypj) * vbld_inv(j+nres)
24253 pom = ertail(k)-facd1*(ertail(k)-erdxi*dC_norm(k,i))
24254 ! gradpepcatx(k,i) = gradpepcatx(k,i) &
24255 ! - (( dFdR + gg(k) ) * pom)
24256 pom = ertail(k)-facd2*(ertail(k)-erdxj*dC_norm(k,j+nres))
24257 ! gvdwx(k,j) = gvdwx(k,j) &
24258 ! + (( dFdR + gg(k) ) * pom)
24259 gradpepcat(k,i) = gradpepcat(k,i) &
24260 - (( dFdR + gg(k) ) * ertail(k))/2.0d0
24261 gradpepcat(k,i+1) = gradpepcat(k,i+1) &
24262 - (( dFdR + gg(k) ) * ertail(k))/2.0d0
24264 gradpepcat(k,j) = gradpepcat(k,j) &
24265 + (( dFdR + gg(k) ) * ertail(k))
24268 if (itype(j,5).gt.0) then
24269 !c! Compute head-head and head-tail energies for each state
24271 !c! Dipole-charge interactions
24272 CALL edq_cat_pep(ecl, elj, epol)
24273 eheadtail = ECL + elj + epol
24274 ! print *,"i,",i,eheadtail
24275 ! eheadtail = 0.0d0
24277 !HERE WATER and other types of molecules solvents will be added
24278 write(iout,*) "not yet implemented"
24281 evdw = evdw + Fcav + eheadtail
24282 ! if (evdw.gt.1.0d6) then
24283 ! write (*,'(2(1x,a3,i3),3f6.2,10f16.7)') &
24284 ! restyp(itype(i,1),1),i,restyp(itype(j,1),1),j,&
24285 ! 1.0d0/rij,Rtail,Rhead,evdwij,Fcav,Ecl,Egb,Epol,Fisocav,Elj,&
24286 ! Equad,evdwij+Fcav+eheadtail,evdw
24288 IF (energy_dec) write (iout,'(2(1x,a3,i3),3f6.2,10f16.7)') &
24289 restyp(itype(i,1),1),i,restyp(itype(j,1),1),j,&
24290 1.0d0/rij,Rtail,Rhead,evdwij,Fcav,Ecl,Egb,Epol,Fisocav,Elj,&
24291 Equad,evdwij+Fcav+eheadtail,evdw
24292 ! evdw = evdw + Fcav + eheadtail
24294 ! iF (nstate(itypi,itypj).eq.1) THEN
24295 CALL sc_grad_cat_pep
24297 !c!-------------------------------------------------------------------
24301 !c write (iout,*) "Number of loop steps in EGB:",ind
24302 !c energy_dec=.false.
24303 ! print *,"EVDW KURW",evdw,nres
24305 ! print *,"before leave sc_grad_cat", i,j, gradpepcat(1,nres-1)
24308 end subroutine ecats_prot_amber
24310 !---------------------------------------------------------------------------
24312 subroutine ecat_prot(ecation_prot)
24315 integer i,j,k,subchap,itmp,inum
24316 real(kind=8) :: xi,yi,zi,xj,yj,zj,ract,rcat0,epscalc,r06,r012,&
24318 real(kind=8) xj_temp,yj_temp,zj_temp,xj_safe,yj_safe,zj_safe, &
24319 dist_init,dist_temp,ecation_prot,rcal,rocal, &
24320 Evan1,Evan2,EC,cm1mag,DASGL,delta,r0p,Epepcat, &
24321 catl,cml,calpl, Etotal_p, Etotal_m,rtab,wdip,wmodquad,wquad1, &
24322 wquad2,wvan1,E1,E2,wconst,wvan2,rcpm,dcmag,sin2thet,sinthet, &
24323 costhet,v1m,v2m,wh2o,wc,rsecp,Ir,Irsecp,Irthrp,Irfourp,Irfiftp,&
24324 Irsistp,Irseven,Irtwelv,Irthir,dE1dr,dE2dr,dEdcos,wquad2p,opt, &
24325 rs,rthrp,rfourp,rsixp,reight,Irsixp,Ireight,Irtw,Irfourt, &
24326 opt1,opt2,opt3,opt4,opt5,opt6,opt7,opt8,opt9,opt10,opt11,opt12,&
24327 opt13,opt14,opt15,opt16,opt17,opt18,opt19, &
24328 Equad1,Equad2,dscmag,v1dpv2,dscmag3,constA,constB,Edip,&
24330 real(kind=8),dimension(3) ::dEvan1Cmcat,dEvan2Cmcat,dEeleccat,&
24331 gg,r,EtotalCat,dEtotalCm,dEtotalCalp,dEvan1Cm,dEvan2Cm, &
24332 dEtotalpep,dEtotalcat_num,dEddci,dEtotalcm_num,dEtotalcalp_num, &
24333 tab1,tab2,tab3,diff,cm1,sc,p,tcat,talp,cm,drcp,drcp_norm,vcat, &
24334 v1,v2,v3,myd_norm,dx,vcm,valpha,drdpep,dcosdpep,dcosddci,dEdpep,&
24335 dEcCat,dEdipCm,dEdipCalp,dEquad1Cat,dEquad1Cm,dEquad1Calp, &
24336 dEquad2Cat,dEquad2Cm,dEquad2Calpd,Evan1Cat,dEvan1Calp,dEvan2Cat,&
24337 dEvan2Calp,dEtotalCat,dscvec,dEcCm,dEcCalp,dEdipCat,dEquad2Calp,&
24339 real(kind=8),dimension(6) :: vcatprm
24341 ! first lets calculate interaction with peptide groups
24342 if (nres_molec(5).eq.0) return
24345 itmp=itmp+nres_molec(i)
24347 ! do i=1,nres_molec(1)-1 ! loop over all peptide groups needs parralelization
24348 do i=ibond_start,ibond_end
24350 if ((itype(i,1).eq.ntyp1).or.(itype(i+1,1).eq.ntyp1)) cycle ! leave dummy atoms
24351 xi=0.5d0*(c(1,i)+c(1,i+1))
24352 yi=0.5d0*(c(2,i)+c(2,i+1))
24353 zi=0.5d0*(c(3,i)+c(3,i+1))
24354 call to_box(xi,yi,zi)
24356 do j=itmp+1,itmp+nres_molec(5)
24357 ! print *,"WTF",itmp,j,i
24358 ! all parameters were for Ca2+ to approximate single charge divide by two
24360 if ((itype(j,5).eq.1).or.(itype(j,5).eq.3)) ndiv=2.0
24362 wdip =1.092777950857032D2
24364 wmodquad=-2.174122713004870D4
24365 wmodquad=wmodquad/wconst
24366 wquad1 = 3.901232068562804D1
24367 wquad1=wquad1/wconst
24369 wquad2=wquad2/wconst
24377 call to_box(xj,yj,zj)
24378 dist_init=(xj-xi)**2+(yj-yi)**2+(zj-zi)**2
24381 rcpm = sqrt(xj**2+yj**2+zj**2)
24382 drcp_norm(1)=xj/rcpm
24383 drcp_norm(2)=yj/rcpm
24384 drcp_norm(3)=zj/rcpm
24387 dcmag=dcmag+dc(k,i)**2
24391 myd_norm(k)=dc(k,i)/dcmag
24393 costhet=drcp_norm(1)*myd_norm(1)+drcp_norm(2)*myd_norm(2)+&
24394 drcp_norm(3)*myd_norm(3)
24397 Irsecp = 1.0d0/rsecp
24398 Irthrp = Irsecp/rcpm
24399 Irfourp = Irthrp/rcpm
24400 Irfiftp = Irfourp/rcpm
24401 Irsistp=Irfiftp/rcpm
24402 Irseven=Irsistp/rcpm
24403 Irtwelv=Irsistp*Irsistp
24404 Irthir=Irtwelv/rcpm
24405 sin2thet = (1-costhet*costhet)
24406 sinthet=sqrt(sin2thet)
24407 E1 = wdip*Irsecp*costhet+(wmodquad*Irfourp+wquad1*Irthrp)&
24409 E2 = -wquad1*Irthrp*wquad2+wvan1*(wvan2**12*Irtwelv-&
24410 2*wvan2**6*Irsistp)
24411 ecation_prot = ecation_prot+E1+E2
24412 ! print *,"ecatprot",i,j,ecation_prot,rcpm
24413 dE1dr = -2*costhet*wdip*Irthrp-&
24414 (4*wmodquad*Irfiftp+3*wquad1*Irfourp)*sin2thet
24415 dE2dr = 3*wquad1*wquad2*Irfourp- &
24416 12*wvan1*wvan2**6*(wvan2**6*Irthir-Irseven)
24417 dEdcos = wdip*Irsecp-2*(wmodquad*Irfourp+wquad1*Irthrp)*costhet
24419 drdpep(k) = -drcp_norm(k)
24420 dcosdpep(k) = Ir*(costhet*drcp_norm(k)-myd_norm(k))
24421 dcosddci(k) = drcp_norm(k)/dcmag-costhet*myd_norm(k)/dcmag
24422 dEdpep(k) = (dE1dr+dE2dr)*drdpep(k)+dEdcos*dcosdpep(k)
24423 dEddci(k) = dEdcos*dcosddci(k)
24426 gradpepcat(k,i)=gradpepcat(k,i)+0.5D0*dEdpep(k)-dEddci(k)
24427 gradpepcat(k,i+1)=gradpepcat(k,i+1)+0.5D0*dEdpep(k)+dEddci(k)
24428 gradpepcat(k,j)=gradpepcat(k,j)-dEdpep(k)
24432 !------------------------------------------sidechains
24433 ! do i=1,nres_molec(1)
24434 do i=ibond_start,ibond_end
24435 if ((itype(i,1).eq.ntyp1)) cycle ! leave dummy atoms
24437 ! print *,i,ecation_prot
24441 call to_box(xi,yi,zi)
24443 cm1(k)=dc(k,i+nres)
24445 cm1mag=sqrt(cm1(1)**2+cm1(2)**2+cm1(3)**2)
24446 do j=itmp+1,itmp+nres_molec(5)
24448 if ((itype(j,5).eq.1).or.(itype(j,5).eq.3)) ndiv=2.0
24453 call to_box(xj,yj,zj)
24454 dist_init=(xj-xi)**2+(yj-yi)**2+(zj-zi)**2
24458 if((itype(i,1).eq.15.or.itype(i,1).eq.16).or.&
24459 ((itype(i,1).eq.27).or.(itype(i,1).eq.26).or.&
24460 (itype(i,1).eq.25))) then
24461 if(itype(i,1).eq.16) then
24467 vcatprm(k)=catprm(k,inum)
24469 dASGL=catprm(7,inum)
24471 ! vcm(k)=(cm1(k)/cm1mag)*dASGL+c(k,i+nres)
24472 vcm(1)=(cm1(1)/cm1mag)*dASGL+xi
24473 vcm(2)=(cm1(2)/cm1mag)*dASGL+yi
24474 vcm(3)=(cm1(3)/cm1mag)*dASGL+zi
24478 if (subchap.eq.1) then
24487 valpha(1)=xi-c(1,i+nres)+c(1,i)
24488 valpha(2)=yi-c(2,i+nres)+c(2,i)
24489 valpha(3)=zi-c(3,i+nres)+c(3,i)
24493 dx(k) = vcat(k)-vcm(k)
24496 v1(k)=(vcm(k)-valpha(k))
24497 v2(k)=(vcat(k)-valpha(k))
24499 v1m = sqrt(v1(1)**2+v1(2)**2+v1(3)**2)
24500 v2m = sqrt(v2(1)**2+v2(2)**2+v2(3)**2)
24501 v1dpv2 = v1(1)*v2(1)+v1(2)*v2(2)+v1(3)*v2(3)
24503 ! The weights of the energy function calculated from
24504 !The quantum mechanical GAMESS simulations of calcium with ASP/GLU
24505 if ((itype(i,1).eq.27).or.(itype(i,1).eq.26).or.(itype(i,1).eq.25)) then
24511 if ((itype(j,5).eq.1).or.(itype(j,5).eq.3)) ndiv=2.0
24520 wquad2 = vcatprm(4)
24522 wquad2p = 1.0d0-wquad2
24525 opt = dx(1)**2+dx(2)**2
24526 rsecp = opt+dx(3)**2
24530 rsixp = rfourp*rsecp
24533 Irsecp = 1.0d0/rsecp
24535 Irfourp = Irthrp/rs
24536 Irsixp = 1.0d0/rsixp
24537 Ireight=1.0d0/reight
24541 opt1 = (4*rs*dx(3)*wdip)
24542 opt2 = 6*rsecp*wquad1*opt
24543 opt3 = wquad1*wquad2p*Irsixp
24544 opt4 = (wvan1*wvan2**12)
24545 opt5 = opt4*12*Irfourt
24546 opt6 = 2*wvan1*wvan2**6
24547 opt7 = 6*opt6*Ireight
24550 opt11 = (rsecp*v2m)**2
24551 opt12 = (rsecp*v1m)**2
24552 opt14 = (v1m*v2m*rsecp)**2
24553 opt15 = -wquad1/v2m**2
24554 opt16 = (rthrp*(v1m*v2m)**2)**2
24555 opt17 = (v1m**2*rthrp)**2
24556 opt18 = -wquad1/rthrp
24557 opt19 = (v1m**2*v2m**2)**2
24560 dEcCat(k) = -(dx(k)*wc)*Irthrp
24561 dEcCm(k)=(dx(k)*wc)*Irthrp
24564 Edip=opt8*(v1dpv2)/(rsecp*v2m)
24566 dEdipCat(k)=opt8*(v1(k)*rsecp*v2m-((v2(k)/v2m &
24567 *rsecp+2*dx(k)*v2m)*v1dpv2))/opt11
24568 dEdipCm(k)=opt10*(v2(k)*rsecp*v1m-((v1(k)/v1m &
24569 *rsecp-2*dx(k)*v1m)*v1dpv2))/opt12
24570 dEdipCalp(k)=wdip*((-v1(k)-v2(k))*rsecp*v1m &
24571 *v2m-(-v1(k)/v1m*v2m*rsecp-v2(k)/v2m*v1m*rsecp) &
24574 Equad1=-wquad1*v1dpv2**2/(rthrp*(v1m*v2m)**2)
24576 dEquad1Cat(k)=-wquad1*(2*v1(k)*v1dpv2*(rthrp* &
24577 (v1m*v2m)**2)-(3*dx(k)*rs*(v1m*v2m)**2+2*v1m*2* &
24578 v2(k)*1/2*1/v2m*v1m*v2m*rthrp)*v1dpv2**2)/opt16
24579 dEquad1Cm(k)=-wquad1*(2*v2(k)*v1dpv2*(rthrp* &
24580 (v1m*v2m)**2)-(-3*dx(k)*rs*(v1m*v2m)**2+2*v2m*2* &
24581 v1(k)*1/2*1/v1m*v2m*v1m*rthrp)*v1dpv2**2)/opt16
24582 dEquad1Calp(k)=opt18*(2*(-v1(k)-v2(k))*v1dpv2* &
24583 v1m**2*v2m**2-(-2*v1(k)*v2m**2-2*v2(k)*v1m**2)* &
24586 Equad2=wquad1*wquad2p*Irthrp
24588 dEquad2Cat(k)=-3*dx(k)*rs*opt3
24589 dEquad2Cm(k)=3*dx(k)*rs*opt3
24590 dEquad2Calp(k)=0.0d0
24594 dEvan1Cat(k)=-dx(k)*opt5
24595 dEvan1Cm(k)=dx(k)*opt5
24596 dEvan1Calp(k)=0.0d0
24600 dEvan2Cat(k)=dx(k)*opt7
24601 dEvan2Cm(k)=-dx(k)*opt7
24602 dEvan2Calp(k)=0.0d0
24604 ecation_prot=ecation_prot+Ec+Edip+Equad1+Equad2+Evan1+Evan2
24605 ! print *,ecation_prot,Ec+Edip+Equad1+Equad2+Evan1+Evan2
24608 dEtotalCat(k)=dEcCat(k)+dEdipCat(k)+dEquad1Cat(k)+ &
24609 dEquad2Cat(k)+dEvan1Cat(k)+dEvan2Cat(k)
24610 !c write(*,*) 'dEtotalCat inside', (dEtotalCat(l),l=1,3)
24611 dEtotalCm(k)=dEcCm(k)+dEdipCm(k)+dEquad1Cm(k)+ &
24612 dEquad2Cm(k)+dEvan1Cm(k)+dEvan2Cm(k)
24613 dEtotalCalp(k)=dEcCalp(k)+dEdipCalp(k)+dEquad1Calp(k) &
24614 +dEquad2Calp(k)+dEvan1Calp(k)+dEvan2Calp(k)
24618 dscvec(k) = dc(k,i+nres)
24619 dscmag = dscmag+dscvec(k)*dscvec(k)
24622 dscmag = sqrt(dscmag)
24623 dscmag3 = dscmag3*dscmag
24624 constA = 1.0d0+dASGL/dscmag
24627 constB = constB+dscvec(k)*dEtotalCm(k)
24629 constB = constB*dASGL/dscmag3
24631 gg(k) = dEtotalCm(k)+dEtotalCalp(k)
24632 gradpepcatx(k,i)=gradpepcatx(k,i)+ &
24633 constA*dEtotalCm(k)-constB*dscvec(k)
24634 ! print *,j,constA,dEtotalCm(k),constB,dscvec(k)
24635 gradpepcat(k,i)=gradpepcat(k,i)+gg(k)
24636 gradpepcat(k,j)=gradpepcat(k,j)+dEtotalCat(k)
24638 else if (itype(i,1).eq.13.or.itype(i,1).eq.14) then
24639 if(itype(i,1).eq.14) then
24645 vcatprm(k)=catprm(k,inum)
24647 dASGL=catprm(7,inum)
24649 ! vcm(k)=(cm1(k)/cm1mag)*dASGL+c(k,i+nres)
24653 vcm(1)=(cm1(1)/cm1mag)*dASGL+xi
24654 vcm(2)=(cm1(2)/cm1mag)*dASGL+yi
24655 vcm(3)=(cm1(3)/cm1mag)*dASGL+zi
24656 if (subchap.eq.1) then
24665 valpha(1)=xi-c(1,i+nres)+c(1,i)
24666 valpha(2)=yi-c(2,i+nres)+c(2,i)
24667 valpha(3)=zi-c(3,i+nres)+c(3,i)
24671 dx(k) = vcat(k)-vcm(k)
24674 v1(k)=(vcm(k)-valpha(k))
24675 v2(k)=(vcat(k)-valpha(k))
24677 v1m = sqrt(v1(1)**2+v1(2)**2+v1(3)**2)
24678 v2m = sqrt(v2(1)**2+v2(2)**2+v2(3)**2)
24679 v1dpv2 = v1(1)*v2(1)+v1(2)*v2(2)+v1(3)*v2(3)
24680 ! The weights of the energy function calculated from
24681 !The quantum mechanical GAMESS simulations of ASN/GLN with calcium
24683 if ((itype(j,5).eq.1).or.(itype(j,5).eq.3)) ndiv=2.0
24690 wquad2 = vcatprm(4)
24695 opt = dx(1)**2+dx(2)**2
24696 rsecp = opt+dx(3)**2
24700 rsixp = rfourp*rsecp
24705 Irfourp = Irthrp/rs
24711 opt1 = (4*rs*dx(3)*wdip)
24712 opt2 = 6*rsecp*wquad1*opt
24713 opt3 = wquad1*wquad2p*Irsixp
24714 opt4 = (wvan1*wvan2**12)
24715 opt5 = opt4*12*Irfourt
24716 opt6 = 2*wvan1*wvan2**6
24717 opt7 = 6*opt6*Ireight
24720 opt11 = (rsecp*v2m)**2
24721 opt12 = (rsecp*v1m)**2
24722 opt14 = (v1m*v2m*rsecp)**2
24723 opt15 = -wquad1/v2m**2
24724 opt16 = (rthrp*(v1m*v2m)**2)**2
24725 opt17 = (v1m**2*rthrp)**2
24726 opt18 = -wquad1/rthrp
24727 opt19 = (v1m**2*v2m**2)**2
24728 Edip=opt8*(v1dpv2)/(rsecp*v2m)
24730 dEdipCat(k)=opt8*(v1(k)*rsecp*v2m-((v2(k)/v2m&
24731 *rsecp+2*dx(k)*v2m)*v1dpv2))/opt11
24732 dEdipCm(k)=opt10*(v2(k)*rsecp*v1m-((v1(k)/v1m&
24733 *rsecp-2*dx(k)*v1m)*v1dpv2))/opt12
24734 dEdipCalp(k)=wdip*((-v1(k)-v2(k))*rsecp*v1m&
24735 *v2m-(-v1(k)/v1m*v2m*rsecp-v2(k)/v2m*v1m*rsecp)&
24738 Equad1=-wquad1*v1dpv2**2/(rthrp*(v1m*v2m)**2)
24740 dEquad1Cat(k)=-wquad1*(2*v1(k)*v1dpv2*(rthrp*&
24741 (v1m*v2m)**2)-(3*dx(k)*rs*(v1m*v2m)**2+2*v1m*2*&
24742 v2(k)*1/2*1/v2m*v1m*v2m*rthrp)*v1dpv2**2)/opt16
24743 dEquad1Cm(k)=-wquad1*(2*v2(k)*v1dpv2*(rthrp*&
24744 (v1m*v2m)**2)-(-3*dx(k)*rs*(v1m*v2m)**2+2*v2m*2*&
24745 v1(k)*1/2*1/v1m*v2m*v1m*rthrp)*v1dpv2**2)/opt16
24746 dEquad1Calp(k)=opt18*(2*(-v1(k)-v2(k))*v1dpv2* &
24747 v1m**2*v2m**2-(-2*v1(k)*v2m**2-2*v2(k)*v1m**2)*&
24750 Equad2=wquad1*wquad2p*Irthrp
24752 dEquad2Cat(k)=-3*dx(k)*rs*opt3
24753 dEquad2Cm(k)=3*dx(k)*rs*opt3
24754 dEquad2Calp(k)=0.0d0
24758 dEvan1Cat(k)=-dx(k)*opt5
24759 dEvan1Cm(k)=dx(k)*opt5
24760 dEvan1Calp(k)=0.0d0
24764 dEvan2Cat(k)=dx(k)*opt7
24765 dEvan2Cm(k)=-dx(k)*opt7
24766 dEvan2Calp(k)=0.0d0
24768 ecation_prot = ecation_prot+Edip+Equad1+Equad2+Evan1+Evan2
24770 dEtotalCat(k)=dEdipCat(k)+dEquad1Cat(k)+ &
24771 dEquad2Cat(k)+dEvan1Cat(k)+dEvan2Cat(k)
24772 dEtotalCm(k)=dEdipCm(k)+dEquad1Cm(k)+ &
24773 dEquad2Cm(k)+dEvan1Cm(k)+dEvan2Cm(k)
24774 dEtotalCalp(k)=dEdipCalp(k)+dEquad1Calp(k) &
24775 +dEquad2Calp(k)+dEvan1Calp(k)+dEvan2Calp(k)
24779 dscvec(k) = c(k,i+nres)-c(k,i)
24785 dscmag = dscmag+dscvec(k)*dscvec(k)
24788 dscmag = sqrt(dscmag)
24789 dscmag3 = dscmag3*dscmag
24790 constA = 1+dASGL/dscmag
24793 constB = constB+dscvec(k)*dEtotalCm(k)
24795 constB = constB*dASGL/dscmag3
24797 gg(k) = dEtotalCm(k)+dEtotalCalp(k)
24798 gradpepcatx(k,i)=gradpepcatx(k,i)+ &
24799 constA*dEtotalCm(k)-constB*dscvec(k)
24800 gradpepcat(k,i)=gradpepcat(k,i)+gg(k)
24801 gradpepcat(k,j)=gradpepcat(k,j)+dEtotalCat(k)
24806 ! r(k) = c(k,j)-c(k,i+nres)
24810 rcal = rcal+r(k)*r(k)
24815 r0p=0.5*(rocal+sig0(itype(i,1)))
24818 Evan1=epscalc*(r012/rcal**6)
24819 Evan2=epscalc*2*(r06/rcal**3)
24823 dEvan1Cm(k) = 12*r(k)*epscalc*r012/r7
24824 dEvan2Cm(k) = 12*r(k)*epscalc*r06/r4
24827 dEtotalCm(k)=dEvan1Cm(k)+dEvan2Cm(k)
24829 ecation_prot = ecation_prot+ Evan1+Evan2
24831 gradpepcatx(k,i)=gradpepcatx(k,i)+ &
24833 gradpepcat(k,i)=gradpepcat(k,i)+dEtotalCm(k)
24834 gradpepcat(k,j)=gradpepcat(k,j)-dEtotalCm(k)
24836 endif ! 13-16 residues
24840 end subroutine ecat_prot
24842 !----------------------------------------------------------------------------
24843 !---------------------------------------------------------------------------
24844 subroutine ecat_nucl(ecation_nucl)
24845 integer i,j,k,subchap,itmp,inum,itypi,itypj
24846 real(kind=8) :: xi,yi,zi,xj,yj,zj
24847 real(kind=8) xj_temp,yj_temp,zj_temp,xj_safe,yj_safe,zj_safe, &
24848 dist_init,dist_temp,ecation_nucl,Evan1,Evan2,Ecav,Egb,wdip1,wdip2, &
24849 wvan1,wvan2,wgbsig,wgbeps,wgbchi,wgbchip,wcav1,wcav2,wcav3,wcav4, &
24850 wcavsig,wcavchi,v1m,v1dpdx,wh2o,wc,Edip,rcs2,invrcs6,invrcs8,invrcs12, &
24851 invrcs14,rcb,rcb2,invrcb,invrcb2,invrcb4,invrcb6,cosinus,cos2,dcosdcatconst, &
24852 dcosdcalpconst,dcosdcmconst,rcav,rcav11,rcav12,constcav1,constcav2, &
24853 constgb1,constgb2,constdvan1,constdvan2,sgb,sgb6,sgb7,sgb12,sgb13, &
24854 cavnum,cavdenom,invcavdenom2,dcavnumdcos,dcavnumdr,dcavdenomdcos, &
24855 dcavdenomdr,sslipi,ssgradlipi,sslipj,ssgradlipj,aa,bb
24856 real(kind=8),dimension(3) ::gg,r,dEtotalCm,dEtotalCalp,dEvan1Cm,&
24857 dEvan2Cm,cm1,cm,vcat,vsug,v1,v2,dx,vcm,dEdipCm,dEdipCalp, &
24858 dEvan1Calp,dEvan2Cat,dEvan2Calp,dEtotalCat,dEdipCat,dEvan1Cat,dcosdcat, &
24859 dcosdcalp,dcosdcm,dEgbdCat,dEgbdCalp,dEgbdCm,dEcavdCat,dEcavdCalp, &
24861 real(kind=8),dimension(14) :: vcatnuclprm
24867 if (nres_molec(5).eq.0) return
24870 itmp=itmp+nres_molec(i)
24872 ! print *,nres_molec(2),"nres2"
24873 do i=ibond_nucl_start,ibond_nucl_end
24874 ! do i=iatsc_s_nucl,iatsc_e_nucl
24875 if ((itype(i,2).eq.ntyp1_molec(2))) cycle ! leave dummy atoms
24879 call to_box(xi,yi,zi)
24880 call lipid_layer(xi,yi,zi,sslipi,ssgradlipi)
24882 cm1(k)=dc(k,i+nres)
24884 do j=itmp+1,itmp+nres_molec(5)
24888 call to_box(xj,yj,zj)
24890 ! write(iout,*) "xi,yi,zi,xj,yj,zj", xi,yi,zi,xj,yj,zj
24891 ! call lipid_layer(xj,yj,zj,sslipj,ssgradlipj)
24892 ! aa=aa_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0 &
24893 ! +aa_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
24894 ! bb=bb_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0 &
24895 ! +bb_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
24896 xj=boxshift(xj-xi,boxxsize)
24897 yj=boxshift(yj-yi,boxysize)
24898 zj=boxshift(zj-zi,boxzsize)
24899 ! write(iout,*) 'after shift', xj,yj,zj
24900 dist_init=xj**2+yj**2+zj**2
24905 vcatnuclprm(k)=catnuclprm(k,itypi,itypj)
24912 call to_box(vcm(1),vcm(2),vcm(3))
24913 call to_box(vsug(1),vsug(2),vsug(3))
24914 call to_box(vcat(1),vcat(2),vcat(3))
24916 ! dx(k) = vcat(k)-vcm(k)
24918 dx(k)=boxshift(vcat(k)-vcm(k),boxik(k))
24921 v2(k)=boxshift(vcat(k)-vsug(k),boxik(k))
24923 v1m = sqrt(v1(1)**2+v1(2)**2+v1(3)**2)
24924 v1dpdx = v1(1)*dx(1)+v1(2)*dx(2)+v1(3)*dx(3)
24925 ! The weights of the energy function calculated from
24926 !The quantum mechanical Gaussian simulations of potassium and sodium with deoxynucleosides
24928 wdip1 = vcatnuclprm(1)
24929 wdip1 = wdip1/wh2o !w1
24930 wdip2 = vcatnuclprm(2)
24931 wdip2 = wdip2/wh2o !w2
24932 wvan1 = vcatnuclprm(3)
24933 wvan2 = vcatnuclprm(4) !pis1
24934 wgbsig = vcatnuclprm(5) !sigma0
24935 wgbeps = vcatnuclprm(6) !epsi0
24936 wgbchi = vcatnuclprm(7) !chi1
24937 wgbchip = vcatnuclprm(8) !chip1
24938 wcavsig = vcatnuclprm(9) !sig
24939 wcav1 = vcatnuclprm(10) !b1
24940 wcav2 = vcatnuclprm(11) !b2
24941 wcav3 = vcatnuclprm(12) !b3
24942 wcav4 = vcatnuclprm(13) !b4
24943 wcavchi = vcatnuclprm(14) !chis1
24944 rcs2 = v2(1)**2+v2(2)**2+v2(3)**2
24945 invrcs6 = 1/rcs2**3
24946 invrcs8 = invrcs6/rcs2
24947 invrcs12 = invrcs6**2
24948 invrcs14 = invrcs12/rcs2
24949 rcb2 = dx(1)**2+dx(2)**2+dx(3)**2
24952 invrcb2 = invrcb**2
24953 invrcb4 = invrcb2**2
24954 invrcb6 = invrcb4*invrcb2
24955 cosinus = v1dpdx/(v1m*rcb)
24957 dcosdcatconst = invrcb2/v1m
24958 dcosdcalpconst = invrcb/v1m**2
24959 dcosdcmconst = invrcb2/v1m**2
24961 dcosdcat(k) = (v1(k)*rcb-dx(k)*v1m*cosinus)*dcosdcatconst
24962 dcosdcalp(k) = (v1(k)*rcb*cosinus-dx(k)*v1m)*dcosdcalpconst
24963 dcosdcm(k) = ((dx(k)-v1(k))*v1m*rcb+ &
24964 cosinus*(dx(k)*v1m**2-v1(k)*rcb2))*dcosdcmconst
24968 rcav12 = rcav11*rcav
24969 constcav1 = 1-wcavchi*cos2
24970 constcav2 = sqrt(constcav1)
24971 constgb1 = 1/sqrt(1-wgbchi*cos2)
24972 constgb2 = wgbeps*(1-wgbchip*cos2)**2
24973 constdvan1 = 12*wvan1*wvan2**12*invrcs14
24974 constdvan2 = 6*wvan1*wvan2**6*invrcs8
24975 !----------------------------------------------------------------------------
24977 !---------------------------------------------------------------------------
24978 sgb = 1/(1-constgb1+(rcb/wgbsig))
24983 Egb = constgb2*(sgb12-sgb6)
24985 dEgbdCat(k) = -constgb2/wgbsig*(12*sgb13-6*sgb7)*invrcb*dx(k) &
24986 +(constgb1**3*constgb2*wgbchi*cosinus*(12*sgb13-6*sgb7) &
24987 -4*wgbeps*wgbchip*cosinus*(1-wgbchip*cos2)*(sgb12-sgb6))*dcosdcat(k)
24988 dEgbdCm(k) = constgb2/wgbsig*(12*sgb13-6*sgb7)*invrcb*dx(k) &
24989 +(constgb1**3*constgb2*wgbchi*cosinus*(12*sgb13-6*sgb7) &
24990 -4*wgbeps*wgbchip*cosinus*(1-wgbchip*cos2)*(sgb12-sgb6))*dcosdcm(k)
24991 dEgbdCalp(k) = (constgb1**3*constgb2*wgbchi*cosinus &
24992 *(12*sgb13-6*sgb7) &
24993 -4*wgbeps*wgbchip*cosinus*(1-wgbchip*cos2)*(sgb12-sgb6))*dcosdcalp(k)
24995 !----------------------------------------------------------------------------
24997 !---------------------------------------------------------------------------
24998 cavnum = sqrt(rcav*constcav2)+wcav2*rcav*constcav2-wcav3
24999 cavdenom = 1+wcav4*rcav12*constcav1**6
25000 Ecav = wcav1*cavnum/cavdenom
25001 invcavdenom2 = 1/cavdenom**2
25002 dcavnumdcos = -wcavchi*cosinus/constcav2 &
25003 *(sqrt(rcav/constcav2)/2+wcav2*rcav)
25004 dcavnumdr = (0.5*sqrt(constcav2/rcav)+wcav2*constcav2)/wcavsig
25005 dcavdenomdcos = -12*wcav4*wcavchi*rcav12*constcav1**5*cosinus
25006 dcavdenomdr = 12*wcav4/wcavsig*rcav11*constcav1**6
25008 dEcavdCat(k) = ((dcavnumdcos*cavdenom-dcavdenomdcos*cavnum) &
25009 *dcosdcat(k)+(dcavnumdr*cavdenom-dcavdenomdr*cavnum)/rcb*dx(k))*wcav1*invcavdenom2
25010 dEcavdCm(k) = ((dcavnumdcos*cavdenom-dcavdenomdcos*cavnum) &
25011 *dcosdcm(k)-(dcavnumdr*cavdenom-dcavdenomdr*cavnum)/rcb*dx(k))*wcav1*invcavdenom2
25012 dEcavdCalp(k) = (dcavnumdcos*cavdenom-dcavdenomdcos*cavnum) &
25013 *dcosdcalp(k)*wcav1*invcavdenom2
25015 !----------------------------------------------------------------------------
25016 !van der Waals and dipole-charge interaction energy
25017 !---------------------------------------------------------------------------
25018 Evan1 = wvan1*wvan2**12*invrcs12
25020 dEvan1Cat(k) = -v2(k)*constdvan1
25021 dEvan1Cm(k) = 0.0d0
25022 dEvan1Calp(k) = v2(k)*constdvan1
25024 Evan2 = -wvan1*wvan2**6*invrcs6
25026 dEvan2Cat(k) = v2(k)*constdvan2
25027 dEvan2Cm(k) = 0.0d0
25028 dEvan2Calp(k) = -v2(k)*constdvan2
25030 Edip = wdip1*cosinus*invrcb2-wdip2*(1-cos2)*invrcb4
25032 dEdipCat(k) = (-2*wdip1*cosinus*invrcb4 &
25033 +4*wdip2*(1-cos2)*invrcb6)*dx(k) &
25034 +dcosdcat(k)*(wdip1*invrcb2+2*wdip2*cosinus*invrcb4)
25035 dEdipCm(k) = (2*wdip1*cosinus*invrcb4 &
25036 -4*wdip2*(1-cos2)*invrcb6)*dx(k) &
25037 +dcosdcm(k)*(wdip1*invrcb2+2*wdip2*cosinus*invrcb4)
25038 dEdipCalp(k) = dcosdcalp(k)*(wdip1*invrcb2 &
25039 +2*wdip2*cosinus*invrcb4)
25041 if (energy_dec) write (iout,'(2i5,4(a6,f7.3))') i,j, &
25042 ' E GB ',Egb,' ECav ',Ecav,' Evdw ',Evan1+Evan2,' Edip ',Edip
25043 ecation_nucl=ecation_nucl+Ecav+Egb+Edip+Evan1+Evan2
25045 dEtotalCat(k) = dEcavdCat(k)+dEvan1Cat(k)+dEvan2Cat(k) &
25046 +dEgbdCat(k)+dEdipCat(k)
25047 dEtotalCm(k) = dEcavdCm(k)+dEvan1Cm(k)+dEvan2Cm(k) &
25048 +dEgbdCm(k)+dEdipCm(k)
25049 dEtotalCalp(k) = dEcavdCalp(k)+dEgbdCalp(k)+dEvan1Calp(k) &
25050 +dEdipCalp(k)+dEvan2Calp(k)
25053 gg(k) = dEtotalCm(k)+dEtotalCalp(k)
25054 gradnuclcatx(k,i)=gradnuclcatx(k,i)+dEtotalCm(k)
25055 gradnuclcat(k,i)=gradnuclcat(k,i)+gg(k)
25056 gradnuclcat(k,j)=gradnuclcat(k,j)+dEtotalCat(k)
25061 end subroutine ecat_nucl
25063 !-----------------------------------------------------------------------------
25064 !-----------------------------------------------------------------------------
25065 subroutine eprot_sc_base(escbase)
25067 ! implicit real(kind=8) (a-h,o-z)
25068 ! include 'DIMENSIONS'
25069 ! include 'COMMON.GEO'
25070 ! include 'COMMON.VAR'
25071 ! include 'COMMON.LOCAL'
25072 ! include 'COMMON.CHAIN'
25073 ! include 'COMMON.DERIV'
25074 ! include 'COMMON.NAMES'
25075 ! include 'COMMON.INTERACT'
25076 ! include 'COMMON.IOUNITS'
25077 ! include 'COMMON.CALC'
25078 ! include 'COMMON.CONTROL'
25079 ! include 'COMMON.SBRIDGE'
25081 !el local variables
25082 integer :: iint,itypi,itypi1,itypj,subchap
25083 real(kind=8) :: rrij,xi,yi,zi,sig,rij_shift,fac,e1,e2,sigm,epsi
25084 real(kind=8) :: evdw,sig0ij
25085 real(kind=8) :: xj_safe,yj_safe,zj_safe,xj_temp,yj_temp,zj_temp,&
25086 dist_temp, dist_init,aa,bb,ssgradlipi,ssgradlipj, &
25087 sslipi,sslipj,faclip
25089 real(kind=8) :: fracinbuf
25090 real (kind=8) :: escbase
25091 real (kind=8),dimension(4):: ener
25092 real(kind=8) :: b1,b2,b3,b4,egb,eps_in,eps_inout_fac,eps_out
25093 real(kind=8) :: ECL,Elj,Equad,Epol,eheadtail,rhead,dGCLOM2,&
25094 sqom1,sqom2,sqom12,c1,c2,c3,pom,Lambf,sparrow,&
25095 Chif,ChiLambf,bat,eagle,top,bot,botsq,Fcav,dtop,dFdR,dFdOM1,&
25096 dFdOM2,w1,w2,w3,dGCLdR,dFdL,dFdOM12,dbot ,&
25097 r1,eps_head,alphapol1,pis,facd2,d2,facd1,d1,erdxj,erdxi,federmaus,&
25098 dPOLdR1,dFGBdOM2,dFGBdR1,dPOLdFGB1,RR1,MomoFac1,hawk,d1i,d1j,&
25099 sig1,sig2,chis12,chis2,ee1,fgb1,a12sq,chis1
25100 real(kind=8),dimension(3,2)::chead,erhead_tail
25101 real(kind=8),dimension(3) :: Rhead_distance,ertail,erhead
25105 ! do i=1,nres_molec(1)
25106 do i=ibond_start,ibond_end
25107 if (itype(i,1).eq.ntyp1_molec(1)) cycle
25109 dxi = dc_norm(1,nres+i)
25110 dyi = dc_norm(2,nres+i)
25111 dzi = dc_norm(3,nres+i)
25112 dsci_inv = vbld_inv(i+nres)
25116 call to_box(xi,yi,zi)
25117 call lipid_layer(xi,yi,zi,sslipi,ssgradlipi)
25118 do j=nres_molec(1)+1,nres_molec(2)+nres_molec(1)
25120 if (itype(j,2).eq.ntyp1_molec(2))cycle
25124 call to_box(xj,yj,zj)
25125 ! call lipid_layer(xj,yj,zj,sslipj,ssgradlipj)
25126 ! aa=aa_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0 &
25127 ! +aa_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
25128 ! bb=bb_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0 &
25129 ! +bb_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
25130 xj=boxshift(xj-xi,boxxsize)
25131 yj=boxshift(yj-yi,boxysize)
25132 zj=boxshift(zj-zi,boxzsize)
25134 dxj = dc_norm( 1, nres+j )
25135 dyj = dc_norm( 2, nres+j )
25136 dzj = dc_norm( 3, nres+j )
25137 ! print *,i,j,itypi,itypj
25138 d1i = dhead_scbasei(itypi,itypj) !this is shift of dipole/charge
25139 d1j = dhead_scbasej(itypi,itypj) !this is shift of dipole/charge
25142 ! BetaT = 1.0d0 / (298.0d0 * Rb)
25144 sig0ij = sigma_scbase( itypi,itypj )
25145 if (sig0ij.lt.0.2) print *,"KURWA",sig0ij,itypi,itypj
25146 chi1 = chi_scbase( itypi, itypj,1 )
25147 chi2 = chi_scbase( itypi, itypj,2 )
25150 chi12 = chi1 * chi2
25151 chip1 = chipp_scbase( itypi, itypj,1 )
25152 chip2 = chipp_scbase( itypi, itypj,2 )
25155 chip12 = chip1 * chip2
25156 ! not used by momo potential, but needed by sc_angular which is shared
25157 ! by all energy_potential subroutines
25161 a12sq = rborn_scbasei(itypi,itypj) * rborn_scbasej(itypi,itypj)
25162 ! a12sq = a12sq * a12sq
25163 ! charge of amino acid itypi is...
25164 chis1 = chis_scbase(itypi,itypj,1)
25165 chis2 = chis_scbase(itypi,itypj,2)
25166 chis12 = chis1 * chis2
25167 sig1 = sigmap1_scbase(itypi,itypj)
25168 sig2 = sigmap2_scbase(itypi,itypj)
25169 ! write (*,*) "sig1 = ", sig1
25170 ! write (*,*) "sig2 = ", sig2
25171 ! alpha factors from Fcav/Gcav
25172 b1 = alphasur_scbase(1,itypi,itypj)
25174 b2 = alphasur_scbase(2,itypi,itypj)
25175 b3 = alphasur_scbase(3,itypi,itypj)
25176 b4 = alphasur_scbase(4,itypi,itypj)
25177 ! used to determine whether we want to do quadrupole calculations
25179 eps_in = epsintab_scbase(itypi,itypj)
25180 if (eps_in.eq.0.0) eps_in=1.0
25181 eps_inout_fac = ( (1.0d0/eps_in) - (1.0d0/eps_out))
25182 ! write (*,*) "eps_inout_fac = ", eps_inout_fac
25183 !-------------------------------------------------------------------
25184 ! tail location and distance calculations
25186 ! location of polar head is computed by taking hydrophobic centre
25187 ! and moving by a d1 * dc_norm vector
25188 ! see unres publications for very informative images
25189 chead(k,1) = c(k, i+nres) + d1i * dc_norm(k, i+nres)
25190 chead(k,2) = c(k, j+nres) + d1j * dc_norm(k, j+nres)
25192 ! Rsc_distance(k) = dabs(c(k, i+nres) - c(k, j+nres))
25193 ! Rsc(k) = Rsc_distance(k) * Rsc_distance(k)
25194 Rhead_distance(k) = chead(k,2) - chead(k,1)
25196 ! pitagoras (root of sum of squares)
25198 (Rhead_distance(1)*Rhead_distance(1)) &
25199 + (Rhead_distance(2)*Rhead_distance(2)) &
25200 + (Rhead_distance(3)*Rhead_distance(3)))
25201 !-------------------------------------------------------------------
25202 ! zero everything that should be zero'ed
25220 dscj_inv = vbld_inv(j+nres)
25221 ! print *,i,j,dscj_inv,dsci_inv
25222 ! rij holds 1/(distance of Calpha atoms)
25223 rrij = 1.0D0 / ( xj*xj + yj*yj + zj*zj)
25225 !----------------------------
25227 ! this should be in elgrad_init but om's are calculated by sc_angular
25228 ! which in turn is used by older potentials
25229 ! om = omega, sqom = om^2
25232 sqom12 = om12 * om12
25234 ! now we calculate EGB - Gey-Berne
25235 ! It will be summed up in evdwij and saved in evdw
25236 sigsq = 1.0D0 / sigsq
25237 sig = sig0ij * dsqrt(sigsq)
25238 ! rij_shift = 1.0D0 / rij - sig + sig0ij
25239 rij_shift = 1.0/rij - sig + sig0ij
25240 IF (rij_shift.le.0.0D0) THEN
25244 sigder = -sig * sigsq
25245 rij_shift = 1.0D0 / rij_shift
25246 fac = rij_shift**expon
25247 c1 = fac * fac * aa_scbase(itypi,itypj)
25249 c2 = fac * bb_scbase(itypi,itypj)
25251 evdwij = eps1 * eps2rt * eps3rt * ( c1 + c2 )
25252 eps2der = eps3rt * evdwij
25253 eps3der = eps2rt * evdwij
25254 ! evdwij = 4.0d0 * eps2rt * eps3rt * evdwij
25255 evdwij = eps2rt * eps3rt * evdwij
25256 c1 = c1 * eps1 * eps2rt**2 * eps3rt**2
25257 fac = -expon * (c1 + evdwij) * rij_shift
25258 sigder = fac * sigder
25260 ! Calculate distance derivative
25264 ! if (b2.gt.0.0) then
25265 fac = chis1 * sqom1 + chis2 * sqom2 &
25266 - 2.0d0 * chis12 * om1 * om2 * om12
25267 ! we will use pom later in Gcav, so dont mess with it!
25268 pom = 1.0d0 - chis1 * chis2 * sqom12
25269 Lambf = (1.0d0 - (fac / pom))
25270 Lambf = dsqrt(Lambf)
25271 sparrow=dsqrt(sig1**2.0d0 + sig2**2.0d0)
25272 if (b1.eq.0.0d0) sparrow=1.0d0
25273 sparrow = 1.0d0 / sparrow
25274 ! write (*,*) "sparrow = ", sparrow,sig1,sig2,b1
25275 Chif = 1.0d0/rij * sparrow
25276 ChiLambf = Chif * Lambf
25277 eagle = dsqrt(ChiLambf)
25278 bat = ChiLambf ** 11.0d0
25279 top = b1 * ( eagle + b2 * ChiLambf - b3 )
25280 bot = 1.0d0 + b4 * (ChiLambf ** 12.0d0)
25284 dtop = b1 * ((Lambf / (2.0d0 * eagle)) + (b2 * Lambf))
25285 dbot = 12.0d0 * b4 * bat * Lambf
25286 dFdR = ((dtop * bot - top * dbot) / botsq) * sparrow
25288 ! write (*,*) "dFcav/dR = ", dFdR
25289 dtop = b1 * ((Chif / (2.0d0 * eagle)) + (b2 * Chif))
25290 dbot = 12.0d0 * b4 * bat * Chif
25291 eagle = Lambf * pom
25292 dFdOM1 = -(chis1 * om1 - chis12 * om2 * om12) / (eagle)
25293 dFdOM2 = -(chis2 * om2 - chis12 * om1 * om12) / (eagle)
25294 dFdOM12 = chis12 * (chis1 * om1 * om12 - om2) &
25295 * (chis2 * om2 * om12 - om1) / (eagle * pom)
25297 dFdL = ((dtop * bot - top * dbot) / botsq)
25299 dCAVdOM1 = dFdL * ( dFdOM1 )
25300 dCAVdOM2 = dFdL * ( dFdOM2 )
25301 dCAVdOM12 = dFdL * ( dFdOM12 )
25306 ! eom1=eps2der*eps2rt_om1-2.0D0*alf1*eps3der+sigder*sigsq_om1
25307 ! eom2=eps2der*eps2rt_om2+2.0D0*alf2*eps3der+sigder*sigsq_om2
25308 ! eom12=evdwij*eps1_om12+eps2der*eps2rt_om12 &
25309 ! -2.0D0*alf12*eps3der+sigder*sigsq_om12
25310 ! print *,"EOMY",eom1,eom2,eom12
25311 ! erdxi = scalar( ertail(1), dC_norm(1,i+nres) )
25312 ! erdxj = scalar( ertail(1), dC_norm(1,j+nres) )
25314 ! facd1 = dtail(1,itypi,itypj) * vbld_inv(i+nres)
25315 ! facd2 = dtail(2,itypi,itypj) * vbld_inv(j+nres)
25317 ! write (*,*) "Gvdwc(",k,",",i,")=", gvdwc(k,i)
25318 ! write (*,*) "Gvdwc(",k,",",j,")=", gvdwc(k,j)
25320 !-facd1*(ertail(k)-erdxi*dC_norm(k,i+nres))
25321 gvdwx_scbase(k,i) = gvdwx_scbase(k,i) &
25322 - (( dFdR + gg(k) ) * pom)
25323 ! +(eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,nres+i)) &
25324 ! +eom1*(erij(k)-om1*dc_norm(k,nres+i)))*dsci_inv
25325 ! & - ( dFdR * pom )
25327 !-facd2*(ertail(k)-erdxj*dC_norm(k,j+nres))
25328 gvdwx_scbase(k,j) = gvdwx_scbase(k,j) &
25329 + (( dFdR + gg(k) ) * pom)
25330 ! +(eom12*(dc_norm(k,nres+i)-om12*dc_norm(k,nres+j)) &
25331 ! +eom2*(erij(k)-om2*dc_norm(k,nres+j)))*dscj_inv
25332 !c! & + ( dFdR * pom )
25334 gvdwc_scbase(k,i) = gvdwc_scbase(k,i) &
25335 - (( dFdR + gg(k) ) * ertail(k))
25336 !c! & - ( dFdR * ertail(k))
25338 gvdwc_scbase(k,j) = gvdwc_scbase(k,j) &
25339 + (( dFdR + gg(k) ) * ertail(k))
25340 !c! & + ( dFdR * ertail(k))
25343 !c! write (*,*) "Gvdwc(",k,",",i,")=", gvdwc(k,i)
25344 !c! write (*,*) "Gvdwc(",k,",",j,")=", gvdwc(k,j)
25351 if (wdipdip_scbase(2,itypi,itypj).gt.0.0d0) then
25352 w1 = wdipdip_scbase(1,itypi,itypj)
25353 w2 = -wdipdip_scbase(3,itypi,itypj)/2.0
25354 w3 = wdipdip_scbase(2,itypi,itypj)
25355 !c!-------------------------------------------------------------------
25357 fac = (om12 - 3.0d0 * om1 * om2)
25358 c1 = (w1 / (Rhead**3.0d0)) * fac
25359 c2 = (w2 / Rhead ** 6.0d0) &
25360 * (4.0d0 + fac * fac -3.0d0 * (sqom1 + sqom2))
25361 c3= (w3/ Rhead ** 6.0d0) &
25362 * (2.0d0 - 2.0d0*fac*fac +3.0d0*(sqom1 + sqom2))
25364 !c! write (*,*) "w1 = ", w1
25365 !c! write (*,*) "w2 = ", w2
25366 !c! write (*,*) "om1 = ", om1
25367 !c! write (*,*) "om2 = ", om2
25368 !c! write (*,*) "om12 = ", om12
25369 !c! write (*,*) "fac = ", fac
25370 !c! write (*,*) "c1 = ", c1
25371 !c! write (*,*) "c2 = ", c2
25372 !c! write (*,*) "Ecl = ", Ecl
25373 !c! write (*,*) "c2_1 = ", (w2 / Rhead ** 6.0d0)
25374 !c! write (*,*) "c2_2 = ",
25375 !c! & (4.0d0 + fac * fac -3.0d0 * (sqom1 + sqom2))
25376 !c!-------------------------------------------------------------------
25377 !c! dervative of ECL is GCL...
25379 c1 = (-3.0d0 * w1 * fac) / (Rhead ** 4.0d0)
25380 c2 = (-6.0d0 * w2) / (Rhead ** 7.0d0) &
25381 * (4.0d0 + fac * fac - 3.0d0 * (sqom1 + sqom2))
25382 c3= (-6.0d0 * w3) / (Rhead ** 7.0d0) &
25383 * (2.0d0 - 2.0d0*fac*fac +3.0d0*(sqom1 + sqom2))
25384 dGCLdR = c1 - c2 + c3
25386 c1 = (-3.0d0 * w1 * om2 ) / (Rhead**3.0d0)
25387 c2 = (-6.0d0 * w2) / (Rhead**6.0d0) &
25388 * ( om2 * om12 - 3.0d0 * om1 * sqom2 + om1 )
25389 c3 =(6.0d0*w3/ Rhead ** 6.0d0)*(om1-2.0d0*(fac)*(-om2))
25390 dGCLdOM1 = c1 - c2 + c3
25392 c1 = (-3.0d0 * w1 * om1 ) / (Rhead**3.0d0)
25393 c2 = (-6.0d0 * w2) / (Rhead**6.0d0) &
25394 * ( om1 * om12 - 3.0d0 * sqom1 * om2 + om2 )
25395 c3 =(6.0d0*w3/ Rhead ** 6.0d0)*(om2-2.0d0*(fac)*(-om1))
25396 dGCLdOM2 = c1 - c2 + c3
25398 c1 = w1 / (Rhead ** 3.0d0)
25399 c2 = ( 2.0d0 * w2 * fac ) / Rhead ** 6.0d0
25400 c3 = (w3/ Rhead ** 6.0d0)*(-4.0d0*fac)
25401 dGCLdOM12 = c1 - c2 + c3
25403 erhead(k) = Rhead_distance(k)/Rhead
25405 erdxi = scalar( erhead(1), dC_norm(1,i+nres) )
25406 erdxj = scalar( erhead(1), dC_norm(1,j+nres) )
25407 facd1 = d1i * vbld_inv(i+nres)
25408 facd2 = d1j * vbld_inv(j+nres)
25411 pom = erhead(k)+facd1*(erhead(k)-erdxi*dC_norm(k,i+nres))
25412 gvdwx_scbase(k,i) = gvdwx_scbase(k,i) &
25414 pom = erhead(k)+facd2*(erhead(k)-erdxj*dC_norm(k,j+nres))
25415 gvdwx_scbase(k,j) = gvdwx_scbase(k,j) &
25418 gvdwc_scbase(k,i) = gvdwc_scbase(k,i) &
25419 - dGCLdR * erhead(k)
25420 gvdwc_scbase(k,j) = gvdwc_scbase(k,j) &
25421 + dGCLdR * erhead(k)
25424 !now charge with dipole eg. ARG-dG
25425 if (wqdip_scbase(2,itypi,itypj).gt.0.0d0) then
25426 alphapol1 = alphapol_scbase(itypi,itypj)
25427 w1 = wqdip_scbase(1,itypi,itypj)
25428 w2 = wqdip_scbase(2,itypi,itypj)
25431 ! pis = sig0head_scbase(itypi,itypj)
25432 ! eps_head = epshead_scbase(itypi,itypj)
25433 !c!-------------------------------------------------------------------
25434 !c! R1 - distance between head of ith side chain and tail of jth sidechain
25437 !c! Calculate head-to-tail distances tail is center of side-chain
25438 R1=R1+(c(k,j+nres)-chead(k,1))**2
25443 !c! R1 = dsqrt((Rtail**2)+((dtail(1,itypi,itypj)
25444 !c! & +dhead(1,1,itypi,itypj))**2))
25445 !c! R2 = dsqrt((Rtail**2)+((dtail(2,itypi,itypj)
25446 !c! & +dhead(2,1,itypi,itypj))**2))
25448 !c!-------------------------------------------------------------------
25451 hawk = w2 * (1.0d0 - sqom2)
25452 Ecl = sparrow / Rhead**2.0d0 &
25453 - hawk / Rhead**4.0d0
25454 !c!-------------------------------------------------------------------
25455 !c! derivative of ecl is Gcl
25457 dGCLdR = - 2.0d0 * sparrow / Rhead**3.0d0 &
25458 + 4.0d0 * hawk / Rhead**5.0d0
25460 dGCLdOM1 = (w1) / (Rhead**2.0d0)
25462 dGCLdOM2 = (2.0d0 * w2 * om2) / (Rhead ** 4.0d0)
25463 !c--------------------------------------------------------------------
25464 !c Polarization energy
25466 MomoFac1 = (1.0d0 - chi1 * sqom2)
25467 RR1 = R1 * R1 / MomoFac1
25468 ee1 = exp(-( RR1 / (4.0d0 * a12sq) ))
25469 fgb1 = sqrt( RR1 + a12sq * ee1)
25470 ! eps_inout_fac=0.0d0
25471 epol = 332.0d0 * eps_inout_fac * (( alphapol1 / fgb1 )**4.0d0)
25472 ! derivative of Epol is Gpol...
25473 dPOLdFGB1 = -(1328.0d0 * eps_inout_fac * alphapol1 ** 4.0d0) &
25475 dFGBdR1 = ( (R1 / MomoFac1) &
25476 * ( 2.0d0 - (0.5d0 * ee1) ) ) &
25478 dFGBdOM2 = (((R1 * R1 * chi1 * om2) / (MomoFac1 * MomoFac1)) &
25479 * (2.0d0 - 0.5d0 * ee1) ) &
25481 dPOLdR1 = dPOLdFGB1 * dFGBdR1
25484 dPOLdOM2 = dPOLdFGB1 * dFGBdOM2
25486 erhead(k) = Rhead_distance(k)/Rhead
25487 erhead_tail(k,1) = ((c(k,j+nres)-chead(k,1))/R1)
25490 erdxi = scalar( erhead(1), dC_norm(1,i+nres) )
25491 erdxj = scalar( erhead(1), dC_norm(1,j+nres) )
25492 bat = scalar( erhead_tail(1,1), dC_norm(1,i+nres) )
25494 federmaus = scalar(erhead_tail(1,1),dC_norm(1,j+nres))
25495 facd1 = d1i * vbld_inv(i+nres)
25496 facd2 = d1j * vbld_inv(j+nres)
25497 ! facd4 = dtail(2,itypi,itypj) * vbld_inv(j+nres)
25500 hawk = (erhead_tail(k,1) + &
25501 facd1 * (erhead_tail(k,1) - bat * dC_norm(k,i+nres)))
25504 pom = erhead(k)+facd1*(erhead(k)-erdxi*dC_norm(k,i+nres))
25505 gvdwx_scbase(k,i) = gvdwx_scbase(k,i) &
25507 - dPOLdR1 * (erhead_tail(k,1))
25510 pom = erhead(k)+facd2*(erhead(k)-erdxj*dC_norm(k,j+nres))
25511 gvdwx_scbase(k,j) = gvdwx_scbase(k,j) &
25513 + dPOLdR1 * (erhead_tail(k,1))
25517 gvdwc_scbase(k,i) = gvdwc_scbase(k,i) &
25518 - dGCLdR * erhead(k) &
25519 - dPOLdR1 * erhead_tail(k,1)
25520 ! & - dGLJdR * erhead(k)
25522 gvdwc_scbase(k,j) = gvdwc_scbase(k,j) &
25523 + dGCLdR * erhead(k) &
25524 + dPOLdR1 * erhead_tail(k,1)
25525 ! & + dGLJdR * erhead(k)
25529 ! print *,i,j,evdwij,epol,Fcav,ECL
25530 escbase=escbase+evdwij+epol+Fcav+ECL
25531 if (energy_dec) write (iout,'(a22,2i5,4f8.3,f16.3)'), &
25532 "escbase:evdw,pol,cav,CL",i,j,evdwij,epol,Fcav,ECL,escbase
25533 if (energy_dec) write (iout,*) "evdwij,", evdwij, 1.0/rij, sig, sig0ij
25534 call sc_grad_scbase
25539 end subroutine eprot_sc_base
25540 SUBROUTINE sc_grad_scbase
25543 real (kind=8) :: dcosom1(3),dcosom2(3)
25545 eps2der * eps2rt_om1 &
25546 - 2.0D0 * alf1 * eps3der &
25547 + sigder * sigsq_om1 &
25553 eps2der * eps2rt_om2 &
25554 + 2.0D0 * alf2 * eps3der &
25555 + sigder * sigsq_om2 &
25561 evdwij * eps1_om12 &
25562 + eps2der * eps2rt_om12 &
25563 - 2.0D0 * alf12 * eps3der &
25564 + sigder *sigsq_om12 &
25568 ! print *,eom1,eom2,eom12,i,j,"eom1,2,12",erij(1),erij(2),erij(3)
25569 ! print *,dsci_inv,dscj_inv,dc_norm(2,nres+j),dc_norm(2,nres+i),&
25570 ! gg(1),gg(2),"rozne"
25572 dcosom1(k) = rij * (dc_norm(k,nres+i) - om1 * erij(k))
25573 dcosom2(k) = rij * (dc_norm(k,nres+j) - om2 * erij(k))
25574 gg(k) = gg(k) + eom1 * dcosom1(k) + eom2 * dcosom2(k)
25575 gvdwx_scbase(k,i)= gvdwx_scbase(k,i) - gg(k) &
25576 + (eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,nres+i)) &
25577 + eom1*(erij(k)-om1*dc_norm(k,nres+i)))*dsci_inv
25578 gvdwx_scbase(k,j)= gvdwx_scbase(k,j) + gg(k) &
25579 + (eom12*(dc_norm(k,nres+i)-om12*dc_norm(k,nres+j)) &
25580 + eom2*(erij(k)-om2*dc_norm(k,nres+j)))*dscj_inv
25581 gvdwc_scbase(k,i)=gvdwc_scbase(k,i)-gg(k)
25582 gvdwc_scbase(k,j)=gvdwc_scbase(k,j)+gg(k)
25586 END SUBROUTINE sc_grad_scbase
25589 subroutine epep_sc_base(epepbase)
25592 !el local variables
25593 integer :: iint,itypi,itypi1,itypj,subchap
25594 real(kind=8) :: rrij,xi,yi,zi,sig,rij_shift,fac,e1,e2,sigm,epsi
25595 real(kind=8) :: evdw,sig0ij
25596 real(kind=8) :: xj_safe,yj_safe,zj_safe,xj_temp,yj_temp,zj_temp,&
25597 dist_temp, dist_init,aa,bb,ssgradlipi,ssgradlipj, &
25598 sslipi,sslipj,faclip
25600 real(kind=8) :: fracinbuf
25601 real (kind=8) :: epepbase
25602 real (kind=8),dimension(4):: ener
25603 real(kind=8) :: b1,b2,b3,b4,egb,eps_in,eps_inout_fac,eps_out
25604 real(kind=8) :: ECL,Elj,Equad,Epol,eheadtail,rhead,dGCLOM2,&
25605 sqom1,sqom2,sqom12,c1,c2,c3,pom,Lambf,sparrow,&
25606 Chif,ChiLambf,bat,eagle,top,bot,botsq,Fcav,dtop,dFdR,dFdOM1,&
25607 dFdOM2,w1,w2,w3,dGCLdR,dFdL,dFdOM12,dbot ,&
25608 r1,eps_head,alphapol1,pis,facd2,d2,facd1,d1,erdxj,erdxi,federmaus,&
25609 dPOLdR1,dFGBdOM2,dFGBdR1,dPOLdFGB1,RR1,MomoFac1,hawk,d1i,d1j,&
25610 sig1,sig2,chis12,chis2,ee1,fgb1,a12sq,chis1
25611 real(kind=8),dimension(3,2)::chead,erhead_tail
25612 real(kind=8),dimension(3) :: Rhead_distance,ertail,erhead
25616 ! do i=1,nres_molec(1)-1
25617 do i=ibond_start,ibond_end
25618 if (itype(i,1).eq.ntyp1_molec(1).or.itype(i+1,1).eq.ntyp1_molec(1)) cycle
25619 !C itypi = itype(i,1)
25623 ! print *,dxi,(-c(1,i)+c(1,i+1))*vbld_inv(i+1)
25624 dsci_inv = vbld_inv(i+1)/2.0
25625 xi=(c(1,i)+c(1,i+1))/2.0
25626 yi=(c(2,i)+c(2,i+1))/2.0
25627 zi=(c(3,i)+c(3,i+1))/2.0
25628 call to_box(xi,yi,zi)
25629 do j=nres_molec(1)+1,nres_molec(2)+nres_molec(1)
25631 if (itype(j,2).eq.ntyp1_molec(2))cycle
25635 call to_box(xj,yj,zj)
25636 xj=boxshift(xj-xi,boxxsize)
25637 yj=boxshift(yj-yi,boxysize)
25638 zj=boxshift(zj-zi,boxzsize)
25639 dist_init=xj**2+yj**2+zj**2
25640 dxj = dc_norm( 1, nres+j )
25641 dyj = dc_norm( 2, nres+j )
25642 dzj = dc_norm( 3, nres+j )
25643 ! d1i = dhead_scbasei(itypi) !this is shift of dipole/charge
25644 ! d1j = dhead_scbasej(itypi) !this is shift of dipole/charge
25647 sig0ij = sigma_pepbase(itypj )
25648 chi1 = chi_pepbase(itypj,1 )
25649 chi2 = chi_pepbase(itypj,2 )
25652 chi12 = chi1 * chi2
25653 chip1 = chipp_pepbase(itypj,1 )
25654 chip2 = chipp_pepbase(itypj,2 )
25657 chip12 = chip1 * chip2
25658 chis1 = chis_pepbase(itypj,1)
25659 chis2 = chis_pepbase(itypj,2)
25660 chis12 = chis1 * chis2
25661 sig1 = sigmap1_pepbase(itypj)
25662 sig2 = sigmap2_pepbase(itypj)
25663 ! write (*,*) "sig1 = ", sig1
25664 ! write (*,*) "sig2 = ", sig2
25666 ! location of polar head is computed by taking hydrophobic centre
25667 ! and moving by a d1 * dc_norm vector
25668 ! see unres publications for very informative images
25669 chead(k,1) = (c(k,i)+c(k,i+1))/2.0
25670 ! + d1i * dc_norm(k, i+nres)
25671 chead(k,2) = c(k, j+nres)
25672 ! + d1j * dc_norm(k, j+nres)
25674 ! Rsc_distance(k) = dabs(c(k, i+nres) - c(k, j+nres))
25675 ! Rsc(k) = Rsc_distance(k) * Rsc_distance(k)
25676 Rhead_distance(k) = chead(k,2) - chead(k,1)
25677 ! print *,gvdwc_pepbase(k,i)
25681 (Rhead_distance(1)*Rhead_distance(1)) &
25682 + (Rhead_distance(2)*Rhead_distance(2)) &
25683 + (Rhead_distance(3)*Rhead_distance(3)))
25685 ! alpha factors from Fcav/Gcav
25686 b1 = alphasur_pepbase(1,itypj)
25688 b2 = alphasur_pepbase(2,itypj)
25689 b3 = alphasur_pepbase(3,itypj)
25690 b4 = alphasur_pepbase(4,itypj)
25694 rrij = 1.0D0 / ( xj*xj + yj*yj + zj*zj)
25697 !----------------------------
25715 dscj_inv = vbld_inv(j+nres)
25717 ! this should be in elgrad_init but om's are calculated by sc_angular
25718 ! which in turn is used by older potentials
25719 ! om = omega, sqom = om^2
25722 sqom12 = om12 * om12
25724 ! now we calculate EGB - Gey-Berne
25725 ! It will be summed up in evdwij and saved in evdw
25726 sigsq = 1.0D0 / sigsq
25727 sig = sig0ij * dsqrt(sigsq)
25728 rij_shift = 1.0/rij - sig + sig0ij
25729 IF (rij_shift.le.0.0D0) THEN
25733 sigder = -sig * sigsq
25734 rij_shift = 1.0D0 / rij_shift
25735 fac = rij_shift**expon
25736 c1 = fac * fac * aa_pepbase(itypj)
25738 c2 = fac * bb_pepbase(itypj)
25740 evdwij = eps1 * eps2rt * eps3rt * ( c1 + c2 )
25741 eps2der = eps3rt * evdwij
25742 eps3der = eps2rt * evdwij
25743 ! evdwij = 4.0d0 * eps2rt * eps3rt * evdwij
25744 evdwij = eps2rt * eps3rt * evdwij
25745 c1 = c1 * eps1 * eps2rt**2 * eps3rt**2
25746 fac = -expon * (c1 + evdwij) * rij_shift
25747 sigder = fac * sigder
25749 ! Calculate distance derivative
25753 fac = chis1 * sqom1 + chis2 * sqom2 &
25754 - 2.0d0 * chis12 * om1 * om2 * om12
25755 ! we will use pom later in Gcav, so dont mess with it!
25756 pom = 1.0d0 - chis1 * chis2 * sqom12
25757 Lambf = (1.0d0 - (fac / pom))
25758 Lambf = dsqrt(Lambf)
25759 sparrow = 1.0d0 / dsqrt(sig1**2.0d0 + sig2**2.0d0)
25760 ! write (*,*) "sparrow = ", sparrow
25761 Chif = 1.0d0/rij * sparrow
25762 ChiLambf = Chif * Lambf
25763 eagle = dsqrt(ChiLambf)
25764 bat = ChiLambf ** 11.0d0
25765 top = b1 * ( eagle + b2 * ChiLambf - b3 )
25766 bot = 1.0d0 + b4 * (ChiLambf ** 12.0d0)
25770 dtop = b1 * ((Lambf / (2.0d0 * eagle)) + (b2 * Lambf))
25771 dbot = 12.0d0 * b4 * bat * Lambf
25772 dFdR = ((dtop * bot - top * dbot) / botsq) * sparrow
25774 ! write (*,*) "dFcav/dR = ", dFdR
25775 dtop = b1 * ((Chif / (2.0d0 * eagle)) + (b2 * Chif))
25776 dbot = 12.0d0 * b4 * bat * Chif
25777 eagle = Lambf * pom
25778 dFdOM1 = -(chis1 * om1 - chis12 * om2 * om12) / (eagle)
25779 dFdOM2 = -(chis2 * om2 - chis12 * om1 * om12) / (eagle)
25780 dFdOM12 = chis12 * (chis1 * om1 * om12 - om2) &
25781 * (chis2 * om2 * om12 - om1) / (eagle * pom)
25783 dFdL = ((dtop * bot - top * dbot) / botsq)
25785 dCAVdOM1 = dFdL * ( dFdOM1 )
25786 dCAVdOM2 = dFdL * ( dFdOM2 )
25787 dCAVdOM12 = dFdL * ( dFdOM12 )
25793 ! write (*,*) "Gvdwc(",k,",",i,")=", gvdwc(k,i)
25794 ! write (*,*) "Gvdwc(",k,",",j,")=", gvdwc(k,j)
25796 !-facd1*(ertail(k)-erdxi*dC_norm(k,i+nres))
25797 gvdwc_pepbase(k,i) = gvdwc_pepbase(k,i) &
25798 - (( dFdR + gg(k) ) * pom)/2.0
25799 ! print *,gvdwc_pepbase(k,i),i,(( dFdR + gg(k) ) * pom)/2.0
25800 ! +(eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,nres+i)) &
25801 ! +eom1*(erij(k)-om1*dc_norm(k,nres+i)))*dsci_inv
25802 ! & - ( dFdR * pom )
25804 !-facd2*(ertail(k)-erdxj*dC_norm(k,j+nres))
25805 gvdwx_pepbase(k,j) = gvdwx_pepbase(k,j) &
25806 + (( dFdR + gg(k) ) * pom)
25807 ! +(eom12*(dc_norm(k,nres+i)-om12*dc_norm(k,nres+j)) &
25808 ! +eom2*(erij(k)-om2*dc_norm(k,nres+j)))*dscj_inv
25809 !c! & + ( dFdR * pom )
25811 gvdwc_pepbase(k,i+1) = gvdwc_pepbase(k,i+1) &
25812 - (( dFdR + gg(k) ) * ertail(k))/2.0
25813 ! print *,gvdwc_pepbase(k,i+1),i+1,(( dFdR + gg(k) ) * pom)/2.0
25815 !c! & - ( dFdR * ertail(k))
25817 gvdwc_pepbase(k,j) = gvdwc_pepbase(k,j) &
25818 + (( dFdR + gg(k) ) * ertail(k))
25819 !c! & + ( dFdR * ertail(k))
25822 !c! write (*,*) "Gvdwc(",k,",",i,")=", gvdwc(k,i)
25823 !c! write (*,*) "Gvdwc(",k,",",j,")=", gvdwc(k,j)
25827 w1 = wdipdip_pepbase(1,itypj)
25828 w2 = -wdipdip_pepbase(3,itypj)/2.0
25829 w3 = wdipdip_pepbase(2,itypj)
25832 !c!-------------------------------------------------------------------
25835 fac = (om12 - 3.0d0 * om1 * om2)
25836 c1 = (w1 / (Rhead**3.0d0)) * fac
25837 c2 = (w2 / Rhead ** 6.0d0) &
25838 * (4.0d0 + fac * fac -3.0d0 * (sqom1 + sqom2))
25839 c3= (w3/ Rhead ** 6.0d0) &
25840 * (2.0d0 - 2.0d0*fac*fac +3.0d0*(sqom1 + sqom2))
25844 c1 = (-3.0d0 * w1 * fac) / (Rhead ** 4.0d0)
25845 c2 = (-6.0d0 * w2) / (Rhead ** 7.0d0) &
25846 * (4.0d0 + fac * fac - 3.0d0 * (sqom1 + sqom2))
25847 c3= (-6.0d0 * w3) / (Rhead ** 7.0d0) &
25848 * (2.0d0 - 2.0d0*fac*fac +3.0d0*(sqom1 + sqom2))
25850 dGCLdR = c1 - c2 + c3
25852 c1 = (-3.0d0 * w1 * om2 ) / (Rhead**3.0d0)
25853 c2 = (-6.0d0 * w2) / (Rhead**6.0d0) &
25854 * ( om2 * om12 - 3.0d0 * om1 * sqom2 + om1 )
25855 c3 =(6.0d0*w3/ Rhead ** 6.0d0)*(om1-2.0d0*(fac)*(-om2))
25856 dGCLdOM1 = c1 - c2 + c3
25858 c1 = (-3.0d0 * w1 * om1 ) / (Rhead**3.0d0)
25859 c2 = (-6.0d0 * w2) / (Rhead**6.0d0) &
25860 * ( om1 * om12 - 3.0d0 * sqom1 * om2 + om2 )
25861 c3 =(6.0d0*w3/ Rhead ** 6.0d0)*(om2-2.0d0*(fac)*(-om1))
25863 dGCLdOM2 = c1 - c2 + c3
25865 c1 = w1 / (Rhead ** 3.0d0)
25866 c2 = ( 2.0d0 * w2 * fac ) / Rhead ** 6.0d0
25867 c3 = (w3/ Rhead ** 6.0d0)*(-4.0d0*fac)
25868 dGCLdOM12 = c1 - c2 + c3
25870 erhead(k) = Rhead_distance(k)/Rhead
25872 erdxi = scalar( erhead(1), dC_norm(1,i+nres) )
25873 erdxj = scalar( erhead(1), dC_norm(1,j+nres) )
25874 ! facd1 = d1 * vbld_inv(i+nres)
25875 ! facd2 = d2 * vbld_inv(j+nres)
25879 !+facd1*(erhead(k)-erdxi*dC_norm(k,i+nres))
25880 ! gvdwx_pepbase(k,i) = gvdwx_scbase(k,i) &
25883 !+facd2*(erhead(k)-erdxj*dC_norm(k,j+nres))
25884 gvdwx_pepbase(k,j) = gvdwx_pepbase(k,j) &
25887 gvdwc_pepbase(k,i) = gvdwc_pepbase(k,i) &
25888 - dGCLdR * erhead(k)/2.0d0
25889 ! print *,gvdwc_pepbase(k,i+1),i+1,- dGCLdR * erhead(k)/2.0d0
25890 gvdwc_pepbase(k,i+1) = gvdwc_pepbase(k,i+1) &
25891 - dGCLdR * erhead(k)/2.0d0
25892 ! print *,gvdwc_pepbase(k,i+1),i+1,- dGCLdR * erhead(k)/2.0d0
25893 gvdwc_pepbase(k,j) = gvdwc_pepbase(k,j) &
25894 + dGCLdR * erhead(k)
25896 ! print *,i,j,evdwij,Fcav,ECL,"vdw,cav,ecl"
25897 epepbase=epepbase+evdwij+Fcav+ECL
25898 if (energy_dec) write (iout,'(a22,2i5,4f8.3,f16.3)'), &
25899 "epepbase:evdw,pol,cav,CL",i,j,evdwij,epol,Fcav,ECL,epepbase
25900 call sc_grad_pepbase
25903 END SUBROUTINE epep_sc_base
25904 SUBROUTINE sc_grad_pepbase
25907 real (kind=8) :: dcosom1(3),dcosom2(3)
25909 eps2der * eps2rt_om1 &
25910 - 2.0D0 * alf1 * eps3der &
25911 + sigder * sigsq_om1 &
25917 eps2der * eps2rt_om2 &
25918 + 2.0D0 * alf2 * eps3der &
25919 + sigder * sigsq_om2 &
25925 evdwij * eps1_om12 &
25926 + eps2der * eps2rt_om12 &
25927 - 2.0D0 * alf12 * eps3der &
25928 + sigder *sigsq_om12 &
25933 ! print *,eom1,eom2,eom12,om12,i,j,"eom1,2,12",erij(1),erij(2),erij(3)
25934 ! if (i.eq.30) print *,gvdwc_pepbase(k,i),- gg(k),&
25935 ! (-eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,i)))&
25937 ! print *,dsci_inv,dscj_inv,dc_norm(2,nres+j),dc_norm(2,nres+i),&
25938 ! gg(1),gg(2),"rozne"
25940 dcosom1(k) = rij * (dc_norm(k,i) - om1 * erij(k))
25941 dcosom2(k) = rij * (dc_norm(k,nres+j) - om2 * erij(k))
25942 gg(k) = gg(k) + eom1 * dcosom1(k) + eom2 * dcosom2(k)
25943 gvdwc_pepbase(k,i)= gvdwc_pepbase(k,i) +0.5*(- gg(k)) &
25944 + (-eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,i)))&
25946 - (eom1*(erij(k)-om1*dc_norm(k,i)))*dsci_inv*2.0
25947 gvdwc_pepbase(k,i+1)= gvdwc_pepbase(k,i+1) +0.5*(- gg(k)) &
25948 - (-eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,i))) &
25950 + (eom1*(erij(k)-om1*dc_norm(k,i)))*dsci_inv*2.0
25951 ! print *,eom12,eom2,om12,om2
25952 !eom12*(-dc_norm(k,i)/2.0-om12*dc_norm(k,nres+j)),&
25953 ! (eom2*(erij(k)-om2*dc_norm(k,nres+j)))
25954 gvdwx_pepbase(k,j)= gvdwx_pepbase(k,j) + gg(k) &
25955 + (eom12*(dc_norm(k,i)-om12*dc_norm(k,nres+j))&
25956 + eom2*(erij(k)-om2*dc_norm(k,nres+j)))*dscj_inv
25957 gvdwc_pepbase(k,j)=gvdwc_pepbase(k,j)+gg(k)
25960 END SUBROUTINE sc_grad_pepbase
25961 subroutine eprot_sc_phosphate(escpho)
25963 ! implicit real(kind=8) (a-h,o-z)
25964 ! include 'DIMENSIONS'
25965 ! include 'COMMON.GEO'
25966 ! include 'COMMON.VAR'
25967 ! include 'COMMON.LOCAL'
25968 ! include 'COMMON.CHAIN'
25969 ! include 'COMMON.DERIV'
25970 ! include 'COMMON.NAMES'
25971 ! include 'COMMON.INTERACT'
25972 ! include 'COMMON.IOUNITS'
25973 ! include 'COMMON.CALC'
25974 ! include 'COMMON.CONTROL'
25975 ! include 'COMMON.SBRIDGE'
25977 !el local variables
25978 integer :: iint,itypi,itypi1,itypj,subchap
25979 real(kind=8) :: rrij,xi,yi,zi,sig,rij_shift,fac,e1,e2,sigm,epsi
25980 real(kind=8) :: evdw,sig0ij,aa,bb
25981 real(kind=8) :: xj_safe,yj_safe,zj_safe,xj_temp,yj_temp,zj_temp,&
25982 dist_temp, dist_init,ssgradlipi,ssgradlipj, &
25983 sslipi,sslipj,faclip,alpha_sco
25985 real(kind=8) :: fracinbuf
25986 real (kind=8) :: escpho
25987 real (kind=8),dimension(4):: ener
25988 real(kind=8) :: b1,b2,b3,b4,egb,eps_in,eps_inout_fac,eps_out
25989 real(kind=8) :: ECL,Elj,Equad,Epol,eheadtail,rhead,dGCLOM2,&
25990 sqom1,sqom2,sqom12,c1,c2,pom,Lambf,sparrow,&
25991 Chif,ChiLambf,bat,eagle,top,bot,botsq,Fcav,dtop,dFdR,dFdOM1,&
25992 dFdOM2,w1,w2,dGCLdR,dFdL,dFdOM12,dbot ,&
25993 r1,eps_head,alphapol1,pis,facd2,d2,facd1,d1,erdxj,erdxi,federmaus,&
25994 dPOLdR1,dFGBdOM2,dFGBdR1,dPOLdFGB1,RR1,MomoFac1,hawk,d1i,d1j,&
25995 sig1,sig2,chis12,chis2,ee1,fgb1,a12sq,chis1,Rhead_sq,Qij,dFGBdOM1
25996 real(kind=8),dimension(3,2)::chead,erhead_tail
25997 real(kind=8),dimension(3) :: Rhead_distance,ertail,erhead
26001 ! do i=1,nres_molec(1)
26002 do i=ibond_start,ibond_end
26003 if (itype(i,1).eq.ntyp1_molec(1)) cycle
26005 dxi = dc_norm(1,nres+i)
26006 dyi = dc_norm(2,nres+i)
26007 dzi = dc_norm(3,nres+i)
26008 dsci_inv = vbld_inv(i+nres)
26012 call to_box(xi,yi,zi)
26013 call lipid_layer(xi,yi,zi,sslipi,ssgradlipi)
26014 do j=nres_molec(1)+1,nres_molec(2)+nres_molec(1)-1
26016 if ((itype(j,2).eq.ntyp1_molec(2)).or.&
26017 (itype(j+1,2).eq.ntyp1_molec(2))) cycle
26018 xj=(c(1,j)+c(1,j+1))/2.0
26019 yj=(c(2,j)+c(2,j+1))/2.0
26020 zj=(c(3,j)+c(3,j+1))/2.0
26021 call to_box(xj,yj,zj)
26022 ! call lipid_layer(xj,yj,zj,sslipj,ssgradlipj)
26023 ! aa=aa_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0 &
26024 ! +aa_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
26025 ! bb=bb_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0 &
26026 ! +bb_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
26027 xj=boxshift(xj-xi,boxxsize)
26028 yj=boxshift(yj-yi,boxysize)
26029 zj=boxshift(zj-zi,boxzsize)
26030 dxj = dc_norm( 1,j )
26031 dyj = dc_norm( 2,j )
26032 dzj = dc_norm( 3,j )
26033 dscj_inv = vbld_inv(j+1)
26036 sig0ij = sigma_scpho(itypi )
26037 chi1 = chi_scpho(itypi,1 )
26038 chi2 = chi_scpho(itypi,2 )
26041 chi12 = chi1 * chi2
26042 chip1 = chipp_scpho(itypi,1 )
26043 chip2 = chipp_scpho(itypi,2 )
26046 chip12 = chip1 * chip2
26047 chis1 = chis_scpho(itypi,1)
26048 chis2 = chis_scpho(itypi,2)
26049 chis12 = chis1 * chis2
26050 sig1 = sigmap1_scpho(itypi)
26051 sig2 = sigmap2_scpho(itypi)
26052 ! write (*,*) "sig1 = ", sig1
26053 ! write (*,*) "sig1 = ", sig1
26054 ! write (*,*) "sig2 = ", sig2
26055 ! alpha factors from Fcav/Gcav
26059 a12sq = rborn_scphoi(itypi) * rborn_scphoj(itypi)
26061 b1 = alphasur_scpho(1,itypi)
26063 b2 = alphasur_scpho(2,itypi)
26064 b3 = alphasur_scpho(3,itypi)
26065 b4 = alphasur_scpho(4,itypi)
26066 ! used to determine whether we want to do quadrupole calculations
26068 eps_in = epsintab_scpho(itypi)
26069 if (eps_in.eq.0.0) eps_in=1.0
26070 eps_inout_fac = ( (1.0d0/eps_in) - (1.0d0/eps_out))
26071 ! write (*,*) "eps_inout_fac = ", eps_inout_fac
26072 !-------------------------------------------------------------------
26073 ! tail location and distance calculations
26074 d1i = dhead_scphoi(itypi) !this is shift of dipole/charge
26077 ! location of polar head is computed by taking hydrophobic centre
26078 ! and moving by a d1 * dc_norm vector
26079 ! see unres publications for very informative images
26080 chead(k,1) = c(k, i+nres) + d1i * dc_norm(k, i+nres)
26081 chead(k,2) = (c(k, j) + c(k, j+1))/2.0
26083 ! Rsc_distance(k) = dabs(c(k, i+nres) - c(k, j+nres))
26084 ! Rsc(k) = Rsc_distance(k) * Rsc_distance(k)
26085 Rhead_distance(k) = chead(k,2) - chead(k,1)
26087 ! pitagoras (root of sum of squares)
26089 (Rhead_distance(1)*Rhead_distance(1)) &
26090 + (Rhead_distance(2)*Rhead_distance(2)) &
26091 + (Rhead_distance(3)*Rhead_distance(3)))
26092 Rhead_sq=Rhead**2.0
26093 !-------------------------------------------------------------------
26094 ! zero everything that should be zero'ed
26113 dscj_inv = vbld_inv(j+1)/2.0
26114 !dhead_scbasej(itypi,itypj)
26115 ! print *,i,j,dscj_inv,dsci_inv
26116 ! rij holds 1/(distance of Calpha atoms)
26117 rrij = 1.0D0 / ( xj*xj + yj*yj + zj*zj)
26119 !----------------------------
26121 ! this should be in elgrad_init but om's are calculated by sc_angular
26122 ! which in turn is used by older potentials
26123 ! om = omega, sqom = om^2
26126 sqom12 = om12 * om12
26128 ! now we calculate EGB - Gey-Berne
26129 ! It will be summed up in evdwij and saved in evdw
26130 sigsq = 1.0D0 / sigsq
26131 sig = sig0ij * dsqrt(sigsq)
26132 ! rij_shift = 1.0D0 / rij - sig + sig0ij
26133 rij_shift = 1.0/rij - sig + sig0ij
26134 IF (rij_shift.le.0.0D0) THEN
26138 sigder = -sig * sigsq
26139 rij_shift = 1.0D0 / rij_shift
26140 fac = rij_shift**expon
26141 c1 = fac * fac * aa_scpho(itypi)
26143 c2 = fac * bb_scpho(itypi)
26145 evdwij = eps1 * eps2rt * eps3rt * ( c1 + c2 )
26146 eps2der = eps3rt * evdwij
26147 eps3der = eps2rt * evdwij
26148 ! evdwij = 4.0d0 * eps2rt * eps3rt * evdwij
26149 evdwij = eps2rt * eps3rt * evdwij
26150 c1 = c1 * eps1 * eps2rt**2 * eps3rt**2
26151 fac = -expon * (c1 + evdwij) * rij_shift
26152 sigder = fac * sigder
26154 ! Calculate distance derivative
26158 fac = chis1 * sqom1 + chis2 * sqom2 &
26159 - 2.0d0 * chis12 * om1 * om2 * om12
26160 ! we will use pom later in Gcav, so dont mess with it!
26161 pom = 1.0d0 - chis1 * chis2 * sqom12
26162 Lambf = (1.0d0 - (fac / pom))
26163 Lambf = dsqrt(Lambf)
26164 sparrow = 1.0d0 / dsqrt(sig1**2.0d0 + sig2**2.0d0)
26165 ! write (*,*) "sparrow = ", sparrow
26166 Chif = 1.0d0/rij * sparrow
26167 ChiLambf = Chif * Lambf
26168 eagle = dsqrt(ChiLambf)
26169 bat = ChiLambf ** 11.0d0
26170 top = b1 * ( eagle + b2 * ChiLambf - b3 )
26171 bot = 1.0d0 + b4 * (ChiLambf ** 12.0d0)
26174 dtop = b1 * ((Lambf / (2.0d0 * eagle)) + (b2 * Lambf))
26175 dbot = 12.0d0 * b4 * bat * Lambf
26176 dFdR = ((dtop * bot - top * dbot) / botsq) * sparrow
26178 ! write (*,*) "dFcav/dR = ", dFdR
26179 dtop = b1 * ((Chif / (2.0d0 * eagle)) + (b2 * Chif))
26180 dbot = 12.0d0 * b4 * bat * Chif
26181 eagle = Lambf * pom
26182 dFdOM1 = -(chis1 * om1 - chis12 * om2 * om12) / (eagle)
26183 dFdOM2 = -(chis2 * om2 - chis12 * om1 * om12) / (eagle)
26184 dFdOM12 = chis12 * (chis1 * om1 * om12 - om2) &
26185 * (chis2 * om2 * om12 - om1) / (eagle * pom)
26187 dFdL = ((dtop * bot - top * dbot) / botsq)
26189 dCAVdOM1 = dFdL * ( dFdOM1 )
26190 dCAVdOM2 = dFdL * ( dFdOM2 )
26191 dCAVdOM12 = dFdL * ( dFdOM12 )
26197 ! write (*,*) "Gvdwc(",k,",",i,")=", gvdwc(k,i)
26198 ! write (*,*) "Gvdwc(",k,",",j,")=", gvdwc(k,j)
26199 ! if (i.eq.3) print *,'decl0',gvdwx_scpho(k,i),i
26202 ! print *,pom,gg(k),dFdR
26203 !-facd1*(ertail(k)-erdxi*dC_norm(k,i+nres))
26204 gvdwx_scpho(k,i) = gvdwx_scpho(k,i) &
26205 - (( dFdR + gg(k) ) * pom)
26206 ! +(eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,nres+i)) &
26207 ! +eom1*(erij(k)-om1*dc_norm(k,nres+i)))*dsci_inv
26208 ! & - ( dFdR * pom )
26210 !-facd2*(ertail(k)-erdxj*dC_norm(k,j+nres))
26211 ! gvdwx_scpho(k,j) = gvdwx_scpho(k,j) &
26212 ! + (( dFdR + gg(k) ) * pom)
26213 ! +(eom12*(dc_norm(k,nres+i)-om12*dc_norm(k,nres+j)) &
26214 ! +eom2*(erij(k)-om2*dc_norm(k,nres+j)))*dscj_inv
26215 !c! & + ( dFdR * pom )
26217 gvdwc_scpho(k,i) = gvdwc_scpho(k,i) &
26218 - (( dFdR + gg(k) ) * ertail(k))
26219 !c! & - ( dFdR * ertail(k))
26221 gvdwc_scpho(k,j) = gvdwc_scpho(k,j) &
26222 + (( dFdR + gg(k) ) * ertail(k))/2.0
26224 gvdwc_scpho(k,j+1) = gvdwc_scpho(k,j+1) &
26225 + (( dFdR + gg(k) ) * ertail(k))/2.0
26227 !c! & + ( dFdR * ertail(k))
26231 !c! write (*,*) "Gvdwc(",k,",",i,")=", gvdwc(k,i)
26232 !c! write (*,*) "Gvdwc(",k,",",j,")=", gvdwc(k,j)
26233 ! alphapol1 = alphapol_scpho(itypi)
26234 if (wqq_scpho(itypi).ne.0.0) then
26235 Qij=wqq_scpho(itypi)/eps_in
26236 alpha_sco=1.d0/alphi_scpho(itypi)
26238 Ecl = (332.0d0 * Qij*dexp(-Rhead*alpha_sco)) / Rhead
26239 !c! derivative of Ecl is Gcl...
26240 dGCLdR = (-332.0d0 * Qij*dexp(-Rhead*alpha_sco)* &
26241 (Rhead*alpha_sco+1) ) / Rhead_sq
26242 if (energy_dec) write(iout,*) "ECL",ECL,Rhead,1.0/rij
26243 else if (wqdip_scpho(2,itypi).gt.0.0d0) then
26244 w1 = wqdip_scpho(1,itypi)
26245 w2 = wqdip_scpho(2,itypi)
26248 ! pis = sig0head_scbase(itypi,itypj)
26249 ! eps_head = epshead_scbase(itypi,itypj)
26250 !c!-------------------------------------------------------------------
26252 !c! R1 = dsqrt((Rtail**2)+((dtail(1,itypi,itypj)
26253 !c! & +dhead(1,1,itypi,itypj))**2))
26254 !c! R2 = dsqrt((Rtail**2)+((dtail(2,itypi,itypj)
26255 !c! & +dhead(2,1,itypi,itypj))**2))
26257 !c!-------------------------------------------------------------------
26260 hawk = w2 * (1.0d0 - sqom2)
26261 Ecl = sparrow / Rhead**2.0d0 &
26262 - hawk / Rhead**4.0d0
26263 !c!-------------------------------------------------------------------
26264 if (energy_dec) write(iout,*) "ECLdipdip",ECL,Rhead,&
26267 !c! derivative of ecl is Gcl
26269 dGCLdR = - 2.0d0 * sparrow / Rhead**3.0d0 &
26270 + 4.0d0 * hawk / Rhead**5.0d0
26272 dGCLdOM1 = (w1) / (Rhead**2.0d0)
26274 dGCLdOM2 = (2.0d0 * w2 * om2) / (Rhead ** 4.0d0)
26277 !c--------------------------------------------------------------------
26278 !c Polarization energy
26282 !c! Calculate head-to-tail distances tail is center of side-chain
26283 R1=R1+((c(k,j)+c(k,j+1))/2.0-chead(k,1))**2
26288 alphapol1 = alphapol_scpho(itypi)
26290 MomoFac1 = (1.0d0 - chi2 * sqom1)
26291 RR1 = R1 * R1 / MomoFac1
26292 ee1 = exp(-( RR1 / (4.0d0 * a12sq) ))
26293 ! print *,"ee1",ee1,a12sq,alphapol1,eps_inout_fac
26294 fgb1 = sqrt( RR1 + a12sq * ee1)
26295 ! eps_inout_fac=0.0d0
26296 epol = 332.0d0 * eps_inout_fac * (( alphapol1 / fgb1 )**4.0d0)
26297 ! derivative of Epol is Gpol...
26298 dPOLdFGB1 = -(1328.0d0 * eps_inout_fac * alphapol1 ** 4.0d0) &
26300 dFGBdR1 = ( (R1 / MomoFac1) &
26301 * ( 2.0d0 - (0.5d0 * ee1) ) ) &
26303 dFGBdOM2 = (((R1 * R1 * chi1 * om2) / (MomoFac1 * MomoFac1)) &
26304 * (2.0d0 - 0.5d0 * ee1) ) &
26306 dPOLdR1 = dPOLdFGB1 * dFGBdR1
26309 dFGBdOM1 = (((R1 * R1 * chi2 * om1) / (MomoFac1 * MomoFac1)) &
26310 * (2.0d0 - 0.5d0 * ee1) ) &
26313 dPOLdOM1 = dPOLdFGB1 * dFGBdOM1
26316 erhead(k) = Rhead_distance(k)/Rhead
26317 erhead_tail(k,1) = (((c(k,j)+c(k,j+1))/2.0-chead(k,1))/R1)
26320 erdxi = scalar( erhead(1), dC_norm(1,i+nres) )
26321 erdxj = scalar( erhead(1), dC_norm(1,j) )
26322 bat = scalar( erhead_tail(1,1), dC_norm(1,i+nres) )
26324 federmaus = scalar(erhead_tail(1,1),dC_norm(1,j))
26325 facd1 = d1i * vbld_inv(i+nres)
26326 facd2 = d1j * vbld_inv(j)
26327 ! facd4 = dtail(2,itypi,itypj) * vbld_inv(j+nres)
26330 hawk = (erhead_tail(k,1) + &
26331 facd1 * (erhead_tail(k,1) - bat * dC_norm(k,i+nres)))
26334 ! if (i.eq.3) print *,'decl1',dGCLdR,dPOLdR1,gvdwc_scpho(k,i),i,&
26335 ! pom,(erhead_tail(k,1))
26337 ! print *,'decl',dGCLdR,dPOLdR1,gvdwc_scpho(k,i)
26338 pom = erhead(k)+facd1*(erhead(k)-erdxi*dC_norm(k,i+nres))
26339 gvdwx_scpho(k,i) = gvdwx_scpho(k,i) &
26341 - dPOLdR1 * (erhead_tail(k,1))
26344 pom = erhead(k)+facd2*(erhead(k)-erdxj*dC_norm(k,j))
26345 ! gvdwx_scpho(k,j) = gvdwx_scpho(k,j) &
26347 ! + dPOLdR1 * (erhead_tail(k,1))
26351 gvdwc_scpho(k,i) = gvdwc_scpho(k,i) &
26352 - dGCLdR * erhead(k) &
26353 - dPOLdR1 * erhead_tail(k,1)
26354 ! & - dGLJdR * erhead(k)
26356 gvdwc_scpho(k,j) = gvdwc_scpho(k,j) &
26357 + (dGCLdR * erhead(k) &
26358 + dPOLdR1 * erhead_tail(k,1))/2.0
26359 gvdwc_scpho(k,j+1) = gvdwc_scpho(k,j+1) &
26360 + (dGCLdR * erhead(k) &
26361 + dPOLdR1 * erhead_tail(k,1))/2.0
26363 ! & + dGLJdR * erhead(k)
26364 ! if (i.eq.3) print *,'decl2',dGCLdR,dPOLdR1,gvdwc_scpho(k,i),i
26367 ! if (i.eq.3) print *,i,j,evdwij,epol,Fcav,ECL
26368 if (energy_dec) write (iout,'(a22,2i5,4f8.3,f16.3)'), &
26369 "escpho:evdw,pol,cav,CL",i,j,evdwij,epol,Fcav,ECL,escpho
26370 escpho=escpho+evdwij+epol+Fcav+ECL
26377 end subroutine eprot_sc_phosphate
26378 SUBROUTINE sc_grad_scpho
26381 real (kind=8) :: dcosom1(3),dcosom2(3)
26383 eps2der * eps2rt_om1 &
26384 - 2.0D0 * alf1 * eps3der &
26385 + sigder * sigsq_om1 &
26391 eps2der * eps2rt_om2 &
26392 + 2.0D0 * alf2 * eps3der &
26393 + sigder * sigsq_om2 &
26399 evdwij * eps1_om12 &
26400 + eps2der * eps2rt_om12 &
26401 - 2.0D0 * alf12 * eps3der &
26402 + sigder *sigsq_om12 &
26407 ! print *,eom1,eom2,eom12,om12,i,j,"eom1,2,12",erij(1),erij(2),erij(3)
26408 ! if (i.eq.30) print *,gvdwc_scpho(k,i),- gg(k),&
26409 ! (-eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,i)))&
26411 ! print *,dsci_inv,dscj_inv,dc_norm(2,nres+j),dc_norm(2,nres+i),&
26412 ! gg(1),gg(2),"rozne"
26414 dcosom1(k) = rij * (dc_norm(k,nres+i) - om1 * erij(k))
26415 dcosom2(k) = rij * (dc_norm(k,j) - om2 * erij(k))
26416 gg(k) = gg(k) + eom1 * dcosom1(k) + eom2 * dcosom2(k)
26417 gvdwc_scpho(k,j)= gvdwc_scpho(k,j) +0.5*( gg(k)) &
26418 + (-eom12*(dc_norm(k,nres+i)-om12*dc_norm(k,j)))&
26420 - (eom2*(erij(k)-om2*dc_norm(k,j)))*dscj_inv*2.0
26421 gvdwc_scpho(k,j+1)= gvdwc_scpho(k,j+1) +0.5*( gg(k)) &
26422 - (-eom12*(dc_norm(k,nres+i)-om12*dc_norm(k,j))) &
26424 + (eom2*(erij(k)-om2*dc_norm(k,j)))*dscj_inv*2.0
26425 gvdwx_scpho(k,i)= gvdwx_scpho(k,i) - gg(k) &
26426 + (eom12*(dc_norm(k,j)-om12*dc_norm(k,nres+i)) &
26427 + eom1*(erij(k)-om1*dc_norm(k,nres+i)))*dsci_inv
26429 ! print *,eom12,eom2,om12,om2
26430 !eom12*(-dc_norm(k,i)/2.0-om12*dc_norm(k,nres+j)),&
26431 ! (eom2*(erij(k)-om2*dc_norm(k,nres+j)))
26432 ! gvdwx_scpho(k,j)= gvdwx_scpho(k,j) + gg(k) &
26433 ! + (eom12*(dc_norm(k,i)-om12*dc_norm(k,nres+j))&
26434 ! + eom2*(erij(k)-om2*dc_norm(k,nres+j)))*dscj_inv
26435 gvdwc_scpho(k,i)=gvdwc_scpho(k,i)-gg(k)
26438 END SUBROUTINE sc_grad_scpho
26439 subroutine eprot_pep_phosphate(epeppho)
26441 ! implicit real(kind=8) (a-h,o-z)
26442 ! include 'DIMENSIONS'
26443 ! include 'COMMON.GEO'
26444 ! include 'COMMON.VAR'
26445 ! include 'COMMON.LOCAL'
26446 ! include 'COMMON.CHAIN'
26447 ! include 'COMMON.DERIV'
26448 ! include 'COMMON.NAMES'
26449 ! include 'COMMON.INTERACT'
26450 ! include 'COMMON.IOUNITS'
26451 ! include 'COMMON.CALC'
26452 ! include 'COMMON.CONTROL'
26453 ! include 'COMMON.SBRIDGE'
26455 !el local variables
26456 integer :: iint,itypi,itypi1,itypj,subchap
26457 real(kind=8) :: rrij,xi,yi,zi,sig,rij_shift,fac,e1,e2,sigm,epsi
26458 real(kind=8) :: evdw,sig0ij
26459 real(kind=8) :: xj_safe,yj_safe,zj_safe,xj_temp,yj_temp,zj_temp,&
26460 dist_temp, dist_init,aa,bb,ssgradlipi,ssgradlipj, &
26461 sslipi,sslipj,faclip
26463 real(kind=8) :: fracinbuf
26464 real (kind=8) :: epeppho
26465 real (kind=8),dimension(4):: ener
26466 real(kind=8) :: b1,b2,b3,b4,egb,eps_in,eps_inout_fac,eps_out
26467 real(kind=8) :: ECL,Elj,Equad,Epol,eheadtail,rhead,dGCLOM2,&
26468 sqom1,sqom2,sqom12,c1,c2,pom,Lambf,sparrow,&
26469 Chif,ChiLambf,bat,eagle,top,bot,botsq,Fcav,dtop,dFdR,dFdOM1,&
26470 dFdOM2,w1,w2,dGCLdR,dFdL,dFdOM12,dbot ,&
26471 r1,eps_head,alphapol1,pis,facd2,d2,facd1,d1,erdxj,erdxi,federmaus,&
26472 dPOLdR1,dFGBdOM2,dFGBdR1,dPOLdFGB1,RR1,MomoFac1,hawk,d1i,d1j,&
26473 sig1,sig2,chis12,chis2,ee1,fgb1,a12sq,chis1,Rhead_sq,Qij,dFGBdOM1
26474 real(kind=8),dimension(3,2)::chead,erhead_tail
26475 real(kind=8),dimension(3) :: Rhead_distance,ertail,erhead
26477 real (kind=8) :: dcosom1(3),dcosom2(3)
26479 ! do i=1,nres_molec(1)
26480 do i=ibond_start,ibond_end
26481 if (itype(i,1).eq.ntyp1_molec(1)) cycle
26483 dsci_inv = vbld_inv(i+1)/2.0
26487 xi=(c(1,i)+c(1,i+1))/2.0
26488 yi=(c(2,i)+c(2,i+1))/2.0
26489 zi=(c(3,i)+c(3,i+1))/2.0
26490 call to_box(xi,yi,zi)
26492 do j=nres_molec(1)+1,nres_molec(2)+nres_molec(1)-1
26494 if ((itype(j,2).eq.ntyp1_molec(2)).or.&
26495 (itype(j+1,2).eq.ntyp1_molec(2))) cycle
26496 xj=(c(1,j)+c(1,j+1))/2.0
26497 yj=(c(2,j)+c(2,j+1))/2.0
26498 zj=(c(3,j)+c(3,j+1))/2.0
26499 call to_box(xj,yj,zj)
26500 xj=boxshift(xj-xi,boxxsize)
26501 yj=boxshift(yj-yi,boxysize)
26502 zj=boxshift(zj-zi,boxzsize)
26504 dist_init=xj**2+yj**2+zj**2
26505 rrij = 1.0D0 / ( xj*xj + yj*yj + zj*zj)
26507 dxj = dc_norm( 1,j )
26508 dyj = dc_norm( 2,j )
26509 dzj = dc_norm( 3,j )
26510 dscj_inv = vbld_inv(j+1)/2.0
26512 sig0ij = sigma_peppho
26515 chi12 = chi1 * chi2
26518 chip12 = chip1 * chip2
26521 chis12 = chis1 * chis2
26522 sig1 = sigmap1_peppho
26523 sig2 = sigmap2_peppho
26524 ! write (*,*) "sig1 = ", sig1
26525 ! write (*,*) "sig1 = ", sig1
26526 ! write (*,*) "sig2 = ", sig2
26527 ! alpha factors from Fcav/Gcav
26531 b1 = alphasur_peppho(1)
26533 b2 = alphasur_peppho(2)
26534 b3 = alphasur_peppho(3)
26535 b4 = alphasur_peppho(4)
26557 fac = rij_shift**expon
26558 c1 = fac * fac * aa_peppho
26560 c2 = fac * bb_peppho
26563 ! Now cavity....................
26564 eagle = dsqrt(1.0/rij_shift)
26565 top = b1 * ( eagle + b2 * 1.0/rij_shift - b3 )
26566 bot = 1.0d0 + b4 * (1.0/rij_shift ** 12.0d0)
26569 dtop = b1 * ((1.0/ (2.0d0 * eagle)) + (b2))
26570 dbot = 12.0d0 * b4 * (1.0/rij_shift) ** 11.0d0
26571 dFdR = ((dtop * bot - top * dbot) / botsq)
26572 w1 = wqdip_peppho(1)
26573 w2 = wqdip_peppho(2)
26576 ! pis = sig0head_scbase(itypi,itypj)
26577 ! eps_head = epshead_scbase(itypi,itypj)
26578 !c!-------------------------------------------------------------------
26580 !c! R1 = dsqrt((Rtail**2)+((dtail(1,itypi,itypj)
26581 !c! & +dhead(1,1,itypi,itypj))**2))
26582 !c! R2 = dsqrt((Rtail**2)+((dtail(2,itypi,itypj)
26583 !c! & +dhead(2,1,itypi,itypj))**2))
26585 !c!-------------------------------------------------------------------
26588 hawk = w2 * (1.0d0 - sqom1)
26589 Ecl = sparrow * rij_shift**2.0d0 &
26590 - hawk * rij_shift**4.0d0
26591 !c!-------------------------------------------------------------------
26592 !c! derivative of ecl is Gcl
26595 dGCLdR = - 2.0d0 * sparrow * rij_shift**3.0d0 &
26596 + 4.0d0 * hawk * rij_shift**5.0d0
26598 dGCLdOM1 = (w1) * (rij_shift**2.0d0)
26600 dGCLdOM2 = (2.0d0 * w2 * om1) * (rij_shift ** 4.0d0)
26601 eom1 = dGCLdOM1+dGCLdOM2
26604 fac = -expon * (c1 + evdwij) * rij_shift+dFdR+dGCLdR
26610 gvdwc_peppho(k,j) = gvdwc_peppho(k,j) +gg(k)/2.0
26611 gvdwc_peppho(k,j+1) = gvdwc_peppho(k,j+1) +gg(k)/2.0
26612 gvdwc_peppho(k,i) = gvdwc_peppho(k,i) -gg(k)/2.0
26613 gvdwc_peppho(k,i+1) = gvdwc_peppho(k,i+1) -gg(k)/2.0
26618 dcosom1(k) = rij* (dc_norm(k,i) - om1 * erij(k))
26619 dcosom2(k) = rij* (dc_norm(k,j) - om2 * erij(k))
26620 gg(k) = gg(k) + eom1 * dcosom1(k)! + eom2 * dcosom2(k)
26621 gvdwc_peppho(k,j)= gvdwc_peppho(k,j) +0.5*( gg(k)) !&
26622 ! - (eom2*(erij(k)-om2*dc_norm(k,j)))*dscj_inv*2.0
26623 gvdwc_peppho(k,j+1)= gvdwc_peppho(k,j+1) +0.5*( gg(k)) !&
26624 ! + (eom2*(erij(k)-om2*dc_norm(k,j)))*dscj_inv*2.0
26625 gvdwc_peppho(k,i)= gvdwc_peppho(k,i) -0.5*( gg(k)) &
26626 - (eom1*(erij(k)-om1*dc_norm(k,i)))*dsci_inv*2.0
26627 gvdwc_peppho(k,i+1)= gvdwc_peppho(k,i+1) - 0.5*( gg(k)) &
26628 + (eom1*(erij(k)-om1*dc_norm(k,i)))*dsci_inv*2.0
26630 if (energy_dec) write (iout,'(a22,2i5,4f8.3,f16.3)'), &
26631 "epeppho:evdw,pol,cav,CL",i,j,evdwij,epol,Fcav,ECL,epeppho
26633 epeppho=epeppho+evdwij+Fcav+ECL
26634 ! print *,i,j,evdwij,Fcav,ECL,rij_shift
26637 end subroutine eprot_pep_phosphate
26638 !!!!!!!!!!!!!!!!-------------------------------------------------------------
26639 subroutine emomo(evdw)
26642 ! implicit real(kind=8) (a-h,o-z)
26643 ! include 'DIMENSIONS'
26644 ! include 'COMMON.GEO'
26645 ! include 'COMMON.VAR'
26646 ! include 'COMMON.LOCAL'
26647 ! include 'COMMON.CHAIN'
26648 ! include 'COMMON.DERIV'
26649 ! include 'COMMON.NAMES'
26650 ! include 'COMMON.INTERACT'
26651 ! include 'COMMON.IOUNITS'
26652 ! include 'COMMON.CALC'
26653 ! include 'COMMON.CONTROL'
26654 ! include 'COMMON.SBRIDGE'
26656 !el local variables
26657 integer :: iint,itypi1,subchap,isel
26658 real(kind=8) :: rrij,xi,yi,zi,sig,rij_shift,e1,e2,sigm,epsi
26659 real(kind=8) :: evdw,aa,bb
26660 real(kind=8) :: xj_safe,yj_safe,zj_safe,xj_temp,yj_temp,zj_temp,&
26661 dist_temp, dist_init,ssgradlipi,ssgradlipj, &
26662 sslipi,sslipj,faclip,alpha_sco
26664 real(kind=8) :: fracinbuf
26665 real (kind=8) :: escpho
26666 real (kind=8),dimension(4):: ener
26667 real(kind=8) :: b1,b2,egb
26668 real(kind=8) :: Fisocav,ECL,Elj,Equad,Epol,eheadtail,&
26670 Chif,ChiLambf,Fcav,dFdR,dFdOM1,&
26671 dFdOM2,dFdL,dFdOM12,&
26674 ! real(kind=8),dimension(3,2)::erhead_tail
26675 ! real(kind=8),dimension(3) :: Rhead_distance,ertail,erhead,Rtail_distance
26676 real(kind=8) :: facd4, adler, Fgb, facd3
26677 integer troll,jj,istate
26678 real (kind=8) :: dcosom1(3),dcosom2(3)
26682 ! print *,"EVDW KURW",evdw,nres
26683 do i=iatsc_s,iatsc_e
26684 ! print *,"I am in EVDW",i
26685 itypi=iabs(itype(i,1))
26686 ! if (i.ne.47) cycle
26687 if (itypi.eq.ntyp1) cycle
26688 itypi1=iabs(itype(i+1,1))
26692 call to_box(xi,yi,zi)
26693 call lipid_layer(xi,yi,zi,sslipi,ssgradlipi)
26695 ! print *, sslipi,ssgradlipi
26696 dxi=dc_norm(1,nres+i)
26697 dyi=dc_norm(2,nres+i)
26698 dzi=dc_norm(3,nres+i)
26699 ! dsci_inv=dsc_inv(itypi)
26700 dsci_inv=vbld_inv(i+nres)
26701 ! write (iout,*) "i",i,dsc_inv(itypi),dsci_inv,1.0d0/vbld(i+nres)
26702 ! write (iout,*) "dcnori",dxi*dxi+dyi*dyi+dzi*dzi
26704 ! Calculate SC interaction energy.
26706 do iint=1,nint_gr(i)
26707 do j=istart(i,iint),iend(i,iint)
26708 ! print *,"JA PIER",i,j,iint,istart(i,iint),iend(i,iint)
26709 IF (dyn_ss_mask(i).and.dyn_ss_mask(j)) THEN
26710 call dyn_ssbond_ene(i,j,evdwij)
26712 if (energy_dec) write (iout,'(a6,2i5,0pf7.3,a3)') &
26713 'evdw',i,j,evdwij,' ss'
26714 ! if (energy_dec) write (iout,*) &
26715 ! 'evdw',i,j,evdwij,' ss'
26716 do k=j+1,iend(i,iint)
26717 !C search over all next residues
26718 if (dyn_ss_mask(k)) then
26719 !C check if they are cysteins
26720 !C write(iout,*) 'k=',k
26722 !c write(iout,*) "PRZED TRI", evdwij
26723 ! evdwij_przed_tri=evdwij
26724 call triple_ssbond_ene(i,j,k,evdwij)
26725 !c if(evdwij_przed_tri.ne.evdwij) then
26726 !c write (iout,*) "TRI:", evdwij, evdwij_przed_tri
26729 !c write(iout,*) "PO TRI", evdwij
26730 !C call the energy function that removes the artifical triple disulfide
26731 !C bond the soubroutine is located in ssMD.F
26733 if (energy_dec) write (iout,'(a6,2i5,0pf7.3,a3)') &
26734 'evdw',i,j,evdwij,'tss'
26735 endif!dyn_ss_mask(k)
26739 itypj=iabs(itype(j,1))
26740 if (itypj.eq.ntyp1) cycle
26741 CALL elgrad_init(eheadtail,Egb,Ecl,Elj,Equad,Epol)
26743 ! if (j.ne.78) cycle
26744 ! dscj_inv=dsc_inv(itypj)
26745 dscj_inv=vbld_inv(j+nres)
26749 call to_box(xj,yj,zj)
26750 call lipid_layer(xj,yj,zj,sslipj,ssgradlipj)
26751 ! write(iout,*) "KRUWA", i,j
26752 aa=aa_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0 &
26753 +aa_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
26754 bb=bb_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0 &
26755 +bb_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
26756 xj=boxshift(xj-xi,boxxsize)
26757 yj=boxshift(yj-yi,boxysize)
26758 zj=boxshift(zj-zi,boxzsize)
26759 dxj = dc_norm( 1, nres+j )
26760 dyj = dc_norm( 2, nres+j )
26761 dzj = dc_norm( 3, nres+j )
26762 ! print *,i,j,itypi,itypj
26765 ! BetaT = 1.0d0 / (298.0d0 * Rb)
26767 !1! sig0ij = sigma_scsc( itypi,itypj )
26772 ! not used by momo potential, but needed by sc_angular which is shared
26773 ! by all energy_potential subroutines
26777 a12sq = rborn(itypi,itypj) * rborn(itypj,itypi)
26778 ! a12sq = a12sq * a12sq
26779 ! charge of amino acid itypi is...
26780 chis1 = chis(itypi,itypj)
26781 chis2 = chis(itypj,itypi)
26782 chis12 = chis1 * chis2
26783 sig1 = sigmap1(itypi,itypj)
26784 sig2 = sigmap2(itypi,itypj)
26785 ! write (*,*) "sig1 = ", sig1
26788 ! chis12 = chis1 * chis2
26791 ! write (*,*) "sig2 = ", sig2
26792 ! alpha factors from Fcav/Gcav
26793 b1cav = alphasur(1,itypi,itypj)
26795 b2cav = alphasur(2,itypi,itypj)
26796 b3cav = alphasur(3,itypi,itypj)
26797 b4cav = alphasur(4,itypi,itypj)
26798 ! used to determine whether we want to do quadrupole calculations
26799 eps_in = epsintab(itypi,itypj)
26800 if (eps_in.eq.0.0) eps_in=1.0
26802 eps_inout_fac = ( (1.0d0/eps_in) - (1.0d0/eps_out))
26804 ! dtail(1,itypi,itypj)=0.0
26805 ! dtail(2,itypi,itypj)=0.0
26808 ctail(k,1)=c(k,i+nres)-dtail(1,itypi,itypj)*dc_norm(k,nres+i)
26809 ctail(k,2)=c(k,j+nres)-dtail(2,itypi,itypj)*dc_norm(k,nres+j)
26811 call to_box (ctail(1,1),ctail(2,1),ctail(3,1))
26812 call to_box (ctail(1,2),ctail(2,2),ctail(3,2))
26814 !c! tail distances will be themselves usefull elswhere
26815 !c1 (in Gcav, for example)
26816 Rtail_distance(1)=boxshift(ctail( 1, 2 ) - ctail( 1,1 ),boxxsize)
26817 Rtail_distance(2)=boxshift(ctail( 2, 2 ) - ctail( 2,1 ),boxysize)
26818 Rtail_distance(3)=boxshift(ctail( 3, 2 ) - ctail( 3,1 ),boxzsize)
26820 (Rtail_distance(1)*Rtail_distance(1)) &
26821 + (Rtail_distance(2)*Rtail_distance(2)) &
26822 + (Rtail_distance(3)*Rtail_distance(3)))
26824 ! write (*,*) "eps_inout_fac = ", eps_inout_fac
26825 !-------------------------------------------------------------------
26826 ! tail location and distance calculations
26827 d1 = dhead(1, 1, itypi, itypj)
26828 d2 = dhead(2, 1, itypi, itypj)
26831 ! location of polar head is computed by taking hydrophobic centre
26832 ! and moving by a d1 * dc_norm vector
26833 ! see unres publications for very informative images
26834 chead(k,1) = c(k, i+nres) + d1 * dc_norm(k, i+nres)
26835 chead(k,2) = c(k, j+nres) + d2 * dc_norm(k, j+nres)
26838 if (energy_dec) write(iout,*) "before",chead(1,1),chead(2,1),chead(3,1)
26839 if (energy_dec) write(iout,*) "before",chead(1,2),chead(2,2),chead(3,2)
26840 call to_box (chead(1,1),chead(2,1),chead(3,1))
26841 call to_box (chead(1,2),chead(2,2),chead(3,2))
26843 !c! head distances will be themselves usefull elswhere
26844 !c1 (in Gcav, for example)
26845 if (energy_dec) write(iout,*) "after",chead(1,1),chead(2,1),chead(3,1)
26846 if (energy_dec) write(iout,*) "after",chead(1,2),chead(2,2),chead(3,2)
26848 Rhead_distance(1)=boxshift(chead( 1, 2 ) - chead( 1,1 ),boxxsize)
26849 Rhead_distance(2)=boxshift(chead( 2, 2 ) - chead( 2,1 ),boxysize)
26850 Rhead_distance(3)=boxshift(chead( 3, 2 ) - chead( 3,1 ),boxzsize)
26851 if (energy_dec) write(iout,*) "after,rdi",(Rhead_distance(k),k=1,3)
26852 ! Rsc_distance(k) = dabs(c(k, i+nres) - c(k, j+nres))
26853 ! Rsc(k) = Rsc_distance(k) * Rsc_distance(k)
26854 ! Rhead_distance(k) = chead(k,2) - chead(k,1)
26856 ! pitagoras (root of sum of squares)
26858 (Rhead_distance(1)*Rhead_distance(1)) &
26859 + (Rhead_distance(2)*Rhead_distance(2)) &
26860 + (Rhead_distance(3)*Rhead_distance(3)))
26861 !-------------------------------------------------------------------
26862 ! zero everything that should be zero'ed
26880 dscj_inv = vbld_inv(j+nres)
26881 ! print *,i,j,dscj_inv,dsci_inv
26882 ! rij holds 1/(distance of Calpha atoms)
26883 rrij = 1.0D0 / ( xj*xj + yj*yj + zj*zj)
26885 !----------------------------
26887 ! this should be in elgrad_init but om's are calculated by sc_angular
26888 ! which in turn is used by older potentials
26889 ! om = omega, sqom = om^2
26892 sqom12 = om12 * om12
26894 ! now we calculate EGB - Gey-Berne
26895 ! It will be summed up in evdwij and saved in evdw
26896 sigsq = 1.0D0 / sigsq
26897 sig = sig0ij * dsqrt(sigsq)
26898 ! rij_shift = 1.0D0 / rij - sig + sig0ij
26899 rij_shift = Rtail - sig + sig0ij
26900 IF (rij_shift.le.0.0D0) THEN
26904 sigder = -sig * sigsq
26905 rij_shift = 1.0D0 / rij_shift
26906 fac = rij_shift**expon
26907 c1 = fac * fac * aa_aq(itypi,itypj)
26908 ! print *,"ADAM",aa_aq(itypi,itypj)
26911 c2 = fac * bb_aq(itypi,itypj)
26913 evdwij = eps1 * eps2rt * eps3rt * ( c1 + c2 )
26914 eps2der = eps3rt * evdwij
26915 eps3der = eps2rt * evdwij
26916 ! evdwij = 4.0d0 * eps2rt * eps3rt * evdwij
26917 evdwij = eps2rt * eps3rt * evdwij
26919 ! IF (bb_aq(itypi,itypj).gt.0) THEN
26920 ! evdw_p = evdw_p + evdwij
26922 ! evdw_m = evdw_m + evdwij
26929 c1 = c1 * eps1 * eps2rt**2 * eps3rt**2
26930 fac = -expon * (c1 + evdwij) * rij_shift
26931 sigder = fac * sigder
26933 ! Calculate distance derivative
26937 ! if (b2.gt.0.0) then
26938 fac = chis1 * sqom1 + chis2 * sqom2 &
26939 - 2.0d0 * chis12 * om1 * om2 * om12
26940 ! we will use pom later in Gcav, so dont mess with it!
26941 pom = 1.0d0 - chis1 * chis2 * sqom12
26942 Lambf = (1.0d0 - (fac / pom))
26943 ! print *,"fac,pom",fac,pom,Lambf
26944 Lambf = dsqrt(Lambf)
26945 sparrow = 1.0d0 / dsqrt(sig1**2.0d0 + sig2**2.0d0)
26946 ! print *,"sig1,sig2",sig1,sig2,itypi,itypj
26947 ! write (*,*) "sparrow = ", sparrow
26948 Chif = Rtail * sparrow
26949 ! print *,"rij,sparrow",rij , sparrow
26950 ChiLambf = Chif * Lambf
26951 eagle = dsqrt(ChiLambf)
26952 bat = ChiLambf ** 11.0d0
26953 top = b1cav * ( eagle + b2cav * ChiLambf - b3cav )
26954 bot = 1.0d0 + b4cav * (ChiLambf ** 12.0d0)
26956 ! print *,top,bot,"bot,top",ChiLambf,Chif
26959 dtop = b1cav * ((Lambf / (2.0d0 * eagle)) + (b2cav * Lambf))
26960 dbot = 12.0d0 * b4cav * bat * Lambf
26961 dFdR = ((dtop * bot - top * dbot) / botsq) * sparrow
26963 dtop = b1cav * ((Chif / (2.0d0 * eagle)) + (b2cav * Chif))
26964 dbot = 12.0d0 * b4cav * bat * Chif
26965 eagle = Lambf * pom
26966 dFdOM1 = -(chis1 * om1 - chis12 * om2 * om12) / (eagle)
26967 dFdOM2 = -(chis2 * om2 - chis12 * om1 * om12) / (eagle)
26968 dFdOM12 = chis12 * (chis1 * om1 * om12 - om2) &
26969 * (chis2 * om2 * om12 - om1) / (eagle * pom)
26971 dFdL = ((dtop * bot - top * dbot) / botsq)
26973 dCAVdOM1 = dFdL * ( dFdOM1 )
26974 dCAVdOM2 = dFdL * ( dFdOM2 )
26975 dCAVdOM12 = dFdL * ( dFdOM12 )
26978 ertail(k) = Rtail_distance(k)/Rtail
26980 erdxi = scalar( ertail(1), dC_norm(1,i+nres) )
26981 erdxj = scalar( ertail(1), dC_norm(1,j+nres) )
26982 facd1 = dtail(1,itypi,itypj) * vbld_inv(i+nres)
26983 facd2 = dtail(2,itypi,itypj) * vbld_inv(j+nres)
26985 !c! write (*,*) "Gvdwc(",k,",",i,")=", gvdwc(k,i)
26986 !c! write (*,*) "Gvdwc(",k,",",j,")=", gvdwc(k,j)
26987 pom = ertail(k)-facd1*(ertail(k)-erdxi*dC_norm(k,i+nres))
26988 gvdwx(k,i) = gvdwx(k,i) &
26989 - (( dFdR + gg(k) ) * pom)
26990 !c! & - ( dFdR * pom )
26991 pom = ertail(k)-facd2*(ertail(k)-erdxj*dC_norm(k,j+nres))
26992 gvdwx(k,j) = gvdwx(k,j) &
26993 + (( dFdR + gg(k) ) * pom)
26994 !c! & + ( dFdR * pom )
26996 gvdwc(k,i) = gvdwc(k,i) &
26997 - (( dFdR + gg(k) ) * ertail(k))
26998 !c! & - ( dFdR * ertail(k))
27000 gvdwc(k,j) = gvdwc(k,j) &
27001 + (( dFdR + gg(k) ) * ertail(k))
27002 !c! & + ( dFdR * ertail(k))
27005 ! write (*,*) "Gvdwc(",k,",",i,")=", gvdwc(k,i)
27006 ! write (*,*) "Gvdwc(",k,",",j,")=", gvdwc(k,j)
27010 !c! Compute head-head and head-tail energies for each state
27012 isel = iabs(Qi) + iabs(Qj)
27013 ! double charge for Phophorylated! itype - 25,27,27
27014 ! if ((itype(i).eq.27).or.(itype(i).eq.26).or.(itype(i).eq.25)) then
27018 ! if ((itype(j).eq.27).or.(itype(j).eq.26).or.(itype(j).eq.25)) then
27024 IF (isel.eq.0) THEN
27025 !c! No charges - do nothing
27028 ELSE IF (isel.eq.4) THEN
27029 !c! Calculate dipole-dipole interactions
27032 ! eheadtail = 0.0d0
27034 ELSE IF (isel.eq.1 .and. iabs(Qi).eq.1) THEN
27035 !c! Charge-nonpolar interactions
27036 if ((itype(i,1).eq.27).or.(itype(i,1).eq.26).or.(itype(i,1).eq.25)) then
27040 if ((itype(j,1).eq.27).or.(itype(j,1).eq.26).or.(itype(j,1).eq.25)) then
27047 ! eheadtail = 0.0d0
27049 ELSE IF (isel.eq.1 .and. iabs(Qj).eq.1) THEN
27050 !c! Nonpolar-charge interactions
27051 if ((itype(i,1).eq.27).or.(itype(i,1).eq.26).or.(itype(i,1).eq.25)) then
27055 if ((itype(j,1).eq.27).or.(itype(j,1).eq.26).or.(itype(j,1).eq.25)) then
27062 ! eheadtail = 0.0d0
27064 ELSE IF (isel.eq.3 .and. icharge(itypj).eq.2) THEN
27065 !c! Charge-dipole interactions
27066 if ((itype(i,1).eq.27).or.(itype(i,1).eq.26).or.(itype(i,1).eq.25)) then
27070 if ((itype(j,1).eq.27).or.(itype(j,1).eq.26).or.(itype(j,1).eq.25)) then
27075 CALL eqd(ecl, elj, epol)
27076 eheadtail = ECL + elj + epol
27077 ! eheadtail = 0.0d0
27079 ELSE IF (isel.eq.3 .and. icharge(itypi).eq.2) THEN
27080 !c! Dipole-charge interactions
27081 if ((itype(i,1).eq.27).or.(itype(i,1).eq.26).or.(itype(i,1).eq.25)) then
27085 if ((itype(j,1).eq.27).or.(itype(j,1).eq.26).or.(itype(j,1).eq.25)) then
27089 CALL edq(ecl, elj, epol)
27090 eheadtail = ECL + elj + epol
27091 ! eheadtail = 0.0d0
27093 ELSE IF ((isel.eq.2.and. &
27094 iabs(Qi).eq.1).and. &
27095 nstate(itypi,itypj).eq.1) THEN
27096 !c! Same charge-charge interaction ( +/+ or -/- )
27097 if ((itype(i,1).eq.27).or.(itype(i,1).eq.26).or.(itype(i,1).eq.25)) then
27101 if ((itype(j,1).eq.27).or.(itype(j,1).eq.26).or.(itype(j,1).eq.25)) then
27106 CALL eqq(Ecl,Egb,Epol,Fisocav,Elj)
27107 eheadtail = ECL + Egb + Epol + Fisocav + Elj
27108 ! eheadtail = 0.0d0
27110 ELSE IF ((isel.eq.2.and. &
27111 iabs(Qi).eq.1).and. &
27112 nstate(itypi,itypj).ne.1) THEN
27113 !c! Different charge-charge interaction ( +/- or -/+ )
27114 if ((itype(i,1).eq.27).or.(itype(i,1).eq.26).or.(itype(i,1).eq.25)) then
27118 if ((itype(j,1).eq.27).or.(itype(j,1).eq.26).or.(itype(j,1).eq.25)) then
27123 CALL energy_quad(istate,eheadtail,Ecl,Egb,Epol,Fisocav,Elj,Equad)
27125 END IF ! this endif ends the "catch the gly-gly" at the beggining of Fcav
27126 evdw = evdw + Fcav + eheadtail
27128 IF (energy_dec) write (iout,'(2(1x,a3,i3),3f6.2,10f16.7)') &
27129 restyp(itype(i,1),1),i,restyp(itype(j,1),1),j,&
27130 1.0d0/rij,Rtail,Rhead,evdwij,Fcav,Ecl,Egb,Epol,Fisocav,Elj,&
27131 Equad,evdwij+Fcav+eheadtail,evdw
27132 ! evdw = evdw + Fcav + eheadtail
27134 iF (nstate(itypi,itypj).eq.1) THEN
27137 !c!-------------------------------------------------------------------
27142 !c write (iout,*) "Number of loop steps in EGB:",ind
27143 !c energy_dec=.false.
27144 ! print *,"EVDW KURW",evdw,nres
27147 END SUBROUTINE emomo
27148 !C------------------------------------------------------------------------------------
27149 SUBROUTINE eqq(Ecl,Egb,Epol,Fisocav,Elj)
27152 real (kind=8) :: facd3, facd4, federmaus, adler,&
27153 Ecl,Egb,Epol,Fisocav,Elj,Fgb,debkap
27155 !c! Epol and Gpol analytical parameters
27156 alphapol1 = alphapol(itypi,itypj)
27157 alphapol2 = alphapol(itypj,itypi)
27158 !c! Fisocav and Gisocav analytical parameters
27159 al1 = alphiso(1,itypi,itypj)
27160 al2 = alphiso(2,itypi,itypj)
27161 al3 = alphiso(3,itypi,itypj)
27162 al4 = alphiso(4,itypi,itypj)
27164 / dsqrt(sigiso1(itypi, itypj)**2.0d0 &
27165 + sigiso2(itypi,itypj)**2.0d0))
27167 pis = sig0head(itypi,itypj)
27168 eps_head = epshead(itypi,itypj)
27169 Rhead_sq = Rhead * Rhead
27170 !c! R1 - distance between head of ith side chain and tail of jth sidechain
27171 !c! R2 - distance between head of jth side chain and tail of ith sidechain
27175 !c! Calculate head-to-tail distances needed by Epol
27176 R1=R1+(ctail(k,2)-chead(k,1))**2
27177 R2=R2+(chead(k,2)-ctail(k,1))**2
27183 !c! R1 = dsqrt((Rtail**2)+((dtail(1,itypi,itypj)
27184 !c! & +dhead(1,1,itypi,itypj))**2))
27185 !c! R2 = dsqrt((Rtail**2)+((dtail(2,itypi,itypj)
27186 !c! & +dhead(2,1,itypi,itypj))**2))
27188 !c!-------------------------------------------------------------------
27189 !c! Coulomb electrostatic interaction
27190 Ecl = (332.0d0 * Qij) / Rhead
27191 !c! derivative of Ecl is Gcl...
27192 dGCLdR = (-332.0d0 * Qij ) / Rhead_sq
27196 ee0 = dexp(-( Rhead_sq ) / (4.0d0 * a12sq))
27197 Fgb = sqrt( ( Rhead_sq ) + a12sq * ee0)
27198 debkap=debaykap(itypi,itypj)
27199 Egb = -(332.0d0 * Qij *&
27200 (1.0/eps_in-dexp(-debkap*Fgb)/eps_out)) / Fgb
27201 ! print *,"EGB WTF",Qij,eps_inout_fac,Fgb,itypi,itypj,eps_in,eps_out
27202 !c! Derivative of Egb is Ggb...
27203 dGGBdFGB = -(-332.0d0 * Qij * &
27204 (1.0/eps_in-dexp(-debkap*Fgb)/eps_out))/(Fgb*Fgb)&
27206 (dexp(-debkap*Fgb)*debkap/eps_out))/ Fgb
27207 dFGBdR = ( Rhead * ( 2.0d0 - (0.5d0 * ee0) ) )/ ( 2.0d0 * Fgb )
27208 dGGBdR = dGGBdFGB * dFGBdR
27209 !c!-------------------------------------------------------------------
27210 !c! Fisocav - isotropic cavity creation term
27211 !c! or "how much energy it costs to put charged head in water"
27213 top = al1 * (dsqrt(pom) + al2 * pom - al3)
27214 bot = (1.0d0 + al4 * pom**12.0d0)
27216 FisoCav = top / bot
27217 ! write (*,*) "Rhead = ",Rhead
27218 ! write (*,*) "csig = ",csig
27219 ! write (*,*) "pom = ",pom
27220 ! write (*,*) "al1 = ",al1
27221 ! write (*,*) "al2 = ",al2
27222 ! write (*,*) "al3 = ",al3
27223 ! write (*,*) "al4 = ",al4
27224 ! write (*,*) "top = ",top
27225 ! write (*,*) "bot = ",bot
27226 !c! Derivative of Fisocav is GCV...
27227 dtop = al1 * ((1.0d0 / (2.0d0 * dsqrt(pom))) + al2)
27228 dbot = 12.0d0 * al4 * pom ** 11.0d0
27229 dGCVdR = ((dtop * bot - top * dbot) / botsq) * csig
27230 !c!-------------------------------------------------------------------
27232 !c! Polarization energy - charged heads polarize hydrophobic "neck"
27233 MomoFac1 = (1.0d0 - chi1 * sqom2)
27234 MomoFac2 = (1.0d0 - chi2 * sqom1)
27235 RR1 = ( R1 * R1 ) / MomoFac1
27236 RR2 = ( R2 * R2 ) / MomoFac2
27237 ee1 = exp(-( RR1 / (4.0d0 * a12sq) ))
27238 ee2 = exp(-( RR2 / (4.0d0 * a12sq) ))
27239 fgb1 = sqrt( RR1 + a12sq * ee1 )
27240 fgb2 = sqrt( RR2 + a12sq * ee2 )
27241 epol = 332.0d0 * eps_inout_fac * ( &
27242 (( alphapol1 / fgb1 )**4.0d0)+((alphapol2/fgb2) ** 4.0d0 ))
27244 dPOLdFGB1 = -(1328.0d0 * eps_inout_fac * alphapol1 ** 4.0d0)&
27246 dPOLdFGB2 = -(1328.0d0 * eps_inout_fac * alphapol2 ** 4.0d0)&
27248 dFGBdR1 = ( (R1 / MomoFac1)* ( 2.0d0 - (0.5d0 * ee1) ) )&
27250 dFGBdR2 = ( (R2 / MomoFac2)* ( 2.0d0 - (0.5d0 * ee2) ) )&
27252 dFGBdOM2 = (((R1 * R1 * chi1 * om2) / (MomoFac1 * MomoFac1))&
27253 * ( 2.0d0 - 0.5d0 * ee1) ) / ( 2.0d0 * fgb1 )
27254 dFGBdOM1 = (((R2 * R2 * chi2 * om1) / (MomoFac2 * MomoFac2))&
27255 * ( 2.0d0 - 0.5d0 * ee2) ) / ( 2.0d0 * fgb2 )
27256 dPOLdR1 = dPOLdFGB1 * dFGBdR1
27257 !c! dPOLdR1 = 0.0d0
27258 dPOLdR2 = dPOLdFGB2 * dFGBdR2
27259 !c! dPOLdR2 = 0.0d0
27260 dPOLdOM1 = dPOLdFGB2 * dFGBdOM1
27261 !c! dPOLdOM1 = 0.0d0
27262 dPOLdOM2 = dPOLdFGB1 * dFGBdOM2
27263 !c! dPOLdOM2 = 0.0d0
27264 !c!-------------------------------------------------------------------
27266 !c! Lennard-Jones 6-12 interaction between heads
27267 pom = (pis / Rhead)**6.0d0
27268 Elj = 4.0d0 * eps_head * pom * (pom-1.0d0)
27269 !c! derivative of Elj is Glj
27270 dGLJdR = 4.0d0 * eps_head*(((-12.0d0*pis**12.0d0)/(Rhead**13.0d0))&
27271 + (( 6.0d0*pis**6.0d0) /(Rhead**7.0d0)))
27272 !c!-------------------------------------------------------------------
27273 !c! Return the results
27274 !c! These things do the dRdX derivatives, that is
27275 !c! allow us to change what we see from function that changes with
27276 !c! distance to function that changes with LOCATION (of the interaction
27279 erhead(k) = Rhead_distance(k)/Rhead
27280 erhead_tail(k,1) = ((ctail(k,2)-chead(k,1))/R1)
27281 erhead_tail(k,2) = ((chead(k,2)-ctail(k,1))/R2)
27284 erdxi = scalar( erhead(1), dC_norm(1,i+nres) )
27285 erdxj = scalar( erhead(1), dC_norm(1,j+nres) )
27286 bat = scalar( erhead_tail(1,1), dC_norm(1,i+nres) )
27287 federmaus = scalar(erhead_tail(1,1),dC_norm(1,j+nres))
27288 eagle = scalar( erhead_tail(1,2), dC_norm(1,j+nres) )
27289 adler = scalar( erhead_tail(1,2), dC_norm(1,i+nres) )
27290 facd1 = d1 * vbld_inv(i+nres)
27291 facd2 = d2 * vbld_inv(j+nres)
27292 facd3 = dtail(1,itypi,itypj) * vbld_inv(i+nres)
27293 facd4 = dtail(2,itypi,itypj) * vbld_inv(j+nres)
27295 !c! Now we add appropriate partial derivatives (one in each dimension)
27297 hawk = (erhead_tail(k,1) + &
27298 facd1 * (erhead_tail(k,1) - bat * dC_norm(k,i+nres)))
27299 condor = (erhead_tail(k,2) + &
27300 facd2 * (erhead_tail(k,2) - eagle * dC_norm(k,j+nres)))
27302 pom = erhead(k)+facd1*(erhead(k)-erdxi*dC_norm(k,i+nres))
27303 gvdwx(k,i) = gvdwx(k,i) &
27308 - dPOLdR2 * (erhead_tail(k,2)&
27309 -facd3 * (erhead_tail(k,2) - adler * dC_norm(k,i+nres)))&
27312 pom = erhead(k)+facd2*(erhead(k)-erdxj*dC_norm(k,j+nres))
27313 gvdwx(k,j) = gvdwx(k,j)+ dGCLdR * pom&
27314 + dGGBdR * pom+ dGCVdR * pom&
27315 + dPOLdR1 * (erhead_tail(k,1)&
27316 -facd4 * (erhead_tail(k,1) - federmaus * dC_norm(k,j+nres)))&
27317 + dPOLdR2 * condor + dGLJdR * pom
27319 gvdwc(k,i) = gvdwc(k,i) &
27320 - dGCLdR * erhead(k)&
27321 - dGGBdR * erhead(k)&
27322 - dGCVdR * erhead(k)&
27323 - dPOLdR1 * erhead_tail(k,1)&
27324 - dPOLdR2 * erhead_tail(k,2)&
27325 - dGLJdR * erhead(k)
27327 gvdwc(k,j) = gvdwc(k,j) &
27328 + dGCLdR * erhead(k) &
27329 + dGGBdR * erhead(k) &
27330 + dGCVdR * erhead(k) &
27331 + dPOLdR1 * erhead_tail(k,1) &
27332 + dPOLdR2 * erhead_tail(k,2)&
27333 + dGLJdR * erhead(k)
27339 SUBROUTINE eqq_cat(Ecl,Egb,Epol,Fisocav,Elj)
27342 real (kind=8) :: facd3, facd4, federmaus, adler,&
27343 Ecl,Egb,Epol,Fisocav,Elj,Fgb,debkap
27345 !c! Epol and Gpol analytical parameters
27346 alphapol1 = alphapolcat(itypi,itypj)
27347 alphapol2 = alphapolcat2(itypj,itypi)
27348 !c! Fisocav and Gisocav analytical parameters
27349 al1 = alphisocat(1,itypi,itypj)
27350 al2 = alphisocat(2,itypi,itypj)
27351 al3 = alphisocat(3,itypi,itypj)
27352 al4 = alphisocat(4,itypi,itypj)
27354 / dsqrt(sigiso1cat(itypi, itypj)**2.0d0 &
27355 + sigiso2cat(itypi,itypj)**2.0d0))
27357 pis = sig0headcat(itypi,itypj)
27358 eps_head = epsheadcat(itypi,itypj)
27359 Rhead_sq = Rhead * Rhead
27360 !c! R1 - distance between head of ith side chain and tail of jth sidechain
27361 !c! R2 - distance between head of jth side chain and tail of ith sidechain
27365 !c! Calculate head-to-tail distances needed by Epol
27366 R1=R1+(ctail(k,2)-chead(k,1))**2
27367 R2=R2+(chead(k,2)-ctail(k,1))**2
27373 !c! R1 = dsqrt((Rtail**2)+((dtail(1,itypi,itypj)
27374 !c! & +dhead(1,1,itypi,itypj))**2))
27375 !c! R2 = dsqrt((Rtail**2)+((dtail(2,itypi,itypj)
27376 !c! & +dhead(2,1,itypi,itypj))**2))
27378 !c!-------------------------------------------------------------------
27379 !c! Coulomb electrostatic interaction
27380 Ecl = (332.0d0 * Qij) / Rhead
27381 !c! derivative of Ecl is Gcl...
27382 dGCLdR = (-332.0d0 * Qij ) / Rhead_sq
27387 ee0 = dexp(-( Rhead_sq ) / (4.0d0 * a12sq))
27388 Fgb = sqrt( ( Rhead_sq ) + a12sq * ee0)
27389 debkap=debaykapcat(itypi,itypj)
27390 if (energy_dec) write(iout,*) "egb",Qij,debkap,Fgb,a12sq,ee0
27391 Egb = -(332.0d0 * Qij *&
27392 (1.0/eps_in-dexp(-debkap*Fgb)/eps_out)) / Fgb
27393 ! print *,"EGB WTF",Qij,eps_inout_fac,Fgb,itypi,itypj,eps_in,eps_out
27394 !c! Derivative of Egb is Ggb...
27395 dGGBdFGB = -(-332.0d0 * Qij * &
27396 (1.0/eps_in-dexp(-debkap*Fgb)/eps_out))/(Fgb*Fgb)&
27398 (dexp(-debkap*Fgb)*debkap/eps_out))/ Fgb
27399 dFGBdR = ( Rhead * ( 2.0d0 - (0.5d0 * ee0) ) )/ ( 2.0d0 * Fgb )
27400 dGGBdR = dGGBdFGB * dFGBdR
27401 !c!-------------------------------------------------------------------
27402 !c! Fisocav - isotropic cavity creation term
27403 !c! or "how much energy it costs to put charged head in water"
27405 top = al1 * (dsqrt(pom) + al2 * pom - al3)
27406 bot = (1.0d0 + al4 * pom**12.0d0)
27408 FisoCav = top / bot
27409 ! write (*,*) "Rhead = ",Rhead
27410 ! write (*,*) "csig = ",csig
27411 ! write (*,*) "pom = ",pom
27412 ! write (*,*) "al1 = ",al1
27413 ! write (*,*) "al2 = ",al2
27414 ! write (*,*) "al3 = ",al3
27415 ! write (*,*) "al4 = ",al4
27416 ! write (*,*) "top = ",top
27417 ! write (*,*) "bot = ",bot
27418 !c! Derivative of Fisocav is GCV...
27419 dtop = al1 * ((1.0d0 / (2.0d0 * dsqrt(pom))) + al2)
27420 dbot = 12.0d0 * al4 * pom ** 11.0d0
27421 dGCVdR = ((dtop * bot - top * dbot) / botsq) * csig
27422 !c!-------------------------------------------------------------------
27424 !c! Polarization energy - charged heads polarize hydrophobic "neck"
27425 MomoFac1 = (1.0d0 - chi1 * sqom2)
27426 MomoFac2 = (1.0d0 - chi2 * sqom1)
27427 RR1 = ( R1 * R1 ) / MomoFac1
27428 RR2 = ( R2 * R2 ) / MomoFac2
27429 ee1 = exp(-( RR1 / (4.0d0 * a12sq) ))
27430 ee2 = exp(-( RR2 / (4.0d0 * a12sq) ))
27431 fgb1 = sqrt( RR1 + a12sq * ee1 )
27432 fgb2 = sqrt( RR2 + a12sq * ee2 )
27433 epol = 332.0d0 * eps_inout_fac * ( &
27434 (( alphapol1 / fgb1 )**4.0d0)+((alphapol2/fgb2) ** 4.0d0 ))
27436 dPOLdFGB1 = -(1328.0d0 * eps_inout_fac * alphapol1 ** 4.0d0)&
27438 dPOLdFGB2 = -(1328.0d0 * eps_inout_fac * alphapol2 ** 4.0d0)&
27440 dFGBdR1 = ( (R1 / MomoFac1)* ( 2.0d0 - (0.5d0 * ee1) ) )&
27442 dFGBdR2 = ( (R2 / MomoFac2)* ( 2.0d0 - (0.5d0 * ee2) ) )&
27444 dFGBdOM2 = (((R1 * R1 * chi1 * om2) / (MomoFac1 * MomoFac1))&
27445 * ( 2.0d0 - 0.5d0 * ee1) ) / ( 2.0d0 * fgb1 )
27446 dFGBdOM1 = (((R2 * R2 * chi2 * om1) / (MomoFac2 * MomoFac2))&
27447 * ( 2.0d0 - 0.5d0 * ee2) ) / ( 2.0d0 * fgb2 )
27448 dPOLdR1 = dPOLdFGB1 * dFGBdR1
27449 !c! dPOLdR1 = 0.0d0
27450 dPOLdR2 = dPOLdFGB2 * dFGBdR2
27451 !c! dPOLdR2 = 0.0d0
27452 dPOLdOM1 = dPOLdFGB2 * dFGBdOM1
27453 !c! dPOLdOM1 = 0.0d0
27454 dPOLdOM2 = dPOLdFGB1 * dFGBdOM2
27455 !c! dPOLdOM2 = 0.0d0
27456 !c!-------------------------------------------------------------------
27458 !c! Lennard-Jones 6-12 interaction between heads
27459 pom = (pis / Rhead)**6.0d0
27460 Elj = 4.0d0 * eps_head * pom * (pom-1.0d0)
27461 !c! derivative of Elj is Glj
27462 dGLJdR = 4.0d0 * eps_head*(((-12.0d0*pis**12.0d0)/(Rhead**13.0d0))&
27463 + (( 6.0d0*pis**6.0d0) /(Rhead**7.0d0)))
27464 !c!-------------------------------------------------------------------
27465 !c! Return the results
27466 !c! These things do the dRdX derivatives, that is
27467 !c! allow us to change what we see from function that changes with
27468 !c! distance to function that changes with LOCATION (of the interaction
27471 erhead(k) = Rhead_distance(k)/Rhead
27472 erhead_tail(k,1) = ((ctail(k,2)-chead(k,1))/R1)
27473 erhead_tail(k,2) = ((chead(k,2)-ctail(k,1))/R2)
27476 erdxi = scalar( erhead(1), dC_norm(1,i+nres) )
27477 erdxj = scalar( erhead(1), dC_norm(1,j) )
27478 bat = scalar( erhead_tail(1,1), dC_norm(1,i+nres) )
27479 federmaus = scalar(erhead_tail(1,1),dC_norm(1,j))
27480 eagle = scalar( erhead_tail(1,2), dC_norm(1,j) )
27481 adler = scalar( erhead_tail(1,2), dC_norm(1,i+nres) )
27482 facd1 = d1 * vbld_inv(i+nres)
27483 facd2 = d2 * vbld_inv(j)
27484 facd3 = dtailcat(1,itypi,itypj) * vbld_inv(i+nres)
27485 facd4 = dtailcat(2,itypi,itypj) * vbld_inv(j)
27487 !c! Now we add appropriate partial derivatives (one in each dimension)
27489 hawk = (erhead_tail(k,1) + &
27490 facd1 * (erhead_tail(k,1) - bat * dC_norm(k,i+nres)))
27491 condor = (erhead_tail(k,2) + &
27492 facd2 * (erhead_tail(k,2) - eagle * dC_norm(k,j)))
27494 pom = erhead(k)+facd1*(erhead(k)-erdxi*dC_norm(k,i+nres))
27495 gradpepcatx(k,i) = gradpepcatx(k,i) &
27500 - dPOLdR2 * (erhead_tail(k,2)&
27501 -facd3 * (erhead_tail(k,2) - adler * dC_norm(k,i+nres)))&
27504 pom = erhead(k)+facd2*(erhead(k)-erdxj*dC_norm(k,j))
27505 ! gradpepcatx(k,j) = gradpepcatx(k,j)+ dGCLdR * pom&
27506 ! + dGGBdR * pom+ dGCVdR * pom&
27507 ! + dPOLdR1 * (erhead_tail(k,1)&
27508 ! -facd4 * (erhead_tail(k,1) - federmaus * dC_norm(k,j)))&
27509 ! + dPOLdR2 * condor + dGLJdR * pom
27511 gradpepcat(k,i) = gradpepcat(k,i) &
27512 - dGCLdR * erhead(k)&
27513 - dGGBdR * erhead(k)&
27514 - dGCVdR * erhead(k)&
27515 - dPOLdR1 * erhead_tail(k,1)&
27516 - dPOLdR2 * erhead_tail(k,2)&
27517 - dGLJdR * erhead(k)
27519 gradpepcat(k,j) = gradpepcat(k,j) &
27520 + dGCLdR * erhead(k) &
27521 + dGGBdR * erhead(k) &
27522 + dGCVdR * erhead(k) &
27523 + dPOLdR1 * erhead_tail(k,1) &
27524 + dPOLdR2 * erhead_tail(k,2)&
27525 + dGLJdR * erhead(k)
27529 END SUBROUTINE eqq_cat
27530 !c!-------------------------------------------------------------------
27531 SUBROUTINE energy_quad(istate,eheadtail,Ecl,Egb,Epol,Fisocav,Elj,Equad)
27535 double precision eheadtail,Ecl,Egb,Epol,Fisocav,Elj,Equad
27536 double precision ener(4)
27537 double precision dcosom1(3),dcosom2(3)
27538 !c! used in Epol derivatives
27539 double precision facd3, facd4
27540 double precision federmaus, adler
27541 integer istate,ii,jj
27542 real (kind=8) :: Fgb
27543 ! print *,"CALLING EQUAD"
27544 !c! Epol and Gpol analytical parameters
27545 alphapol1 = alphapol(itypi,itypj)
27546 alphapol2 = alphapol(itypj,itypi)
27547 !c! Fisocav and Gisocav analytical parameters
27548 al1 = alphiso(1,itypi,itypj)
27549 al2 = alphiso(2,itypi,itypj)
27550 al3 = alphiso(3,itypi,itypj)
27551 al4 = alphiso(4,itypi,itypj)
27552 csig = (1.0d0 / dsqrt(sigiso1(itypi, itypj)**2.0d0&
27553 + sigiso2(itypi,itypj)**2.0d0))
27555 w1 = wqdip(1,itypi,itypj)
27556 w2 = wqdip(2,itypi,itypj)
27557 pis = sig0head(itypi,itypj)
27558 eps_head = epshead(itypi,itypj)
27559 !c! First things first:
27560 !c! We need to do sc_grad's job with GB and Fcav
27561 eom1 = eps2der * eps2rt_om1 &
27562 - 2.0D0 * alf1 * eps3der&
27563 + sigder * sigsq_om1&
27565 eom2 = eps2der * eps2rt_om2 &
27566 + 2.0D0 * alf2 * eps3der&
27567 + sigder * sigsq_om2&
27569 eom12 = evdwij * eps1_om12 &
27570 + eps2der * eps2rt_om12 &
27571 - 2.0D0 * alf12 * eps3der&
27572 + sigder *sigsq_om12&
27574 !c! now some magical transformations to project gradient into
27575 !c! three cartesian vectors
27577 dcosom1(k) = rij * (dc_norm(k,nres+i) - om1 * erij(k))
27578 dcosom2(k) = rij * (dc_norm(k,nres+j) - om2 * erij(k))
27579 gg(k) = gg(k) + eom1 * dcosom1(k) + eom2 * dcosom2(k)
27580 !c! this acts on hydrophobic center of interaction
27581 gvdwx(k,i)= gvdwx(k,i) - gg(k) &
27582 + (eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,nres+i))&
27583 + eom1*(erij(k)-om1*dc_norm(k,nres+i)))*dsci_inv
27584 gvdwx(k,j)= gvdwx(k,j) + gg(k) &
27585 + (eom12*(dc_norm(k,nres+i)-om12*dc_norm(k,nres+j))&
27586 + eom2*(erij(k)-om2*dc_norm(k,nres+j)))*dscj_inv
27587 !c! this acts on Calpha
27588 gvdwc(k,i)=gvdwc(k,i)-gg(k)
27589 gvdwc(k,j)=gvdwc(k,j)+gg(k)
27591 !c! sc_grad is done, now we will compute
27596 DO istate = 1, nstate(itypi,itypj)
27597 !c*************************************************************
27598 IF (istate.ne.1) THEN
27599 IF (istate.lt.3) THEN
27605 d1 = dhead(1,ii,itypi,itypj)
27606 d2 = dhead(2,jj,itypi,itypj)
27608 chead(k,1) = c(k, i+nres) + d1 * dc_norm(k, i+nres)
27609 chead(k,2) = c(k, j+nres) + d2 * dc_norm(k, j+nres)
27612 call to_box (chead(1,1),chead(2,1),chead(3,1))
27613 call to_box (chead(1,2),chead(2,2),chead(3,2))
27615 !c! head distances will be themselves usefull elswhere
27616 !c1 (in Gcav, for example)
27618 Rhead_distance(1)=boxshift(chead( 1, 2 ) - chead( 1,1 ),boxxsize)
27619 Rhead_distance(2)=boxshift(chead( 2, 2 ) - chead( 2,1 ),boxysize)
27620 Rhead_distance(3)=boxshift(chead( 3, 2 ) - chead( 3,1 ),boxzsize)
27621 ! Rsc_distance(k) = dabs(c(k, i+nres) - c(k, j+nres))
27622 ! Rsc(k) = Rsc_distance(k) * Rsc_distance(k)
27623 ! Rhead_distance(k) = chead(k,2) - chead(k,1)
27625 ! pitagoras (root of sum of squares)
27627 (Rhead_distance(1)*Rhead_distance(1)) &
27628 + (Rhead_distance(2)*Rhead_distance(2)) &
27629 + (Rhead_distance(3)*Rhead_distance(3)))
27632 ! chead(k,1) = c(k, i+nres) + d1 * dc_norm(k, i+nres)
27633 ! chead(k,2) = c(k, j+nres) + d2 * dc_norm(k, j+nres)
27634 ! Rhead_distance(k) = chead(k,2) - chead(k,1)
27636 !c! pitagoras (root of sum of squares)
27638 ! (Rhead_distance(1)*Rhead_distance(1)) &
27639 ! + (Rhead_distance(2)*Rhead_distance(2)) &
27640 ! + (Rhead_distance(3)*Rhead_distance(3)))
27642 Rhead_sq = Rhead * Rhead
27644 !c! R1 - distance between head of ith side chain and tail of jth sidechain
27645 !c! R2 - distance between head of jth side chain and tail of ith sidechain
27649 !c! Calculate head-to-tail distances
27650 R1=R1+(ctail(k,2)-chead(k,1))**2
27651 R2=R2+(chead(k,2)-ctail(k,1))**2
27656 Ecl = (332.0d0 * Qij) / (Rhead * eps_in)
27658 !c! write (*,*) "Ecl = ", Ecl
27659 !c! derivative of Ecl is Gcl...
27660 dGCLdR = (-332.0d0 * Qij ) / (Rhead_sq * eps_in)
27665 !c!-------------------------------------------------------------------
27666 !c! Generalised Born Solvent Polarization
27667 ee0 = dexp(-( Rhead_sq ) / (4.0d0 * a12sq))
27668 Fgb = sqrt( ( Rhead_sq ) + a12sq * ee0)
27669 Egb = -(332.0d0 * Qij * eps_inout_fac) / Fgb
27671 !c! write (*,*) "a1*a2 = ", a12sq
27672 !c! write (*,*) "Rhead = ", Rhead
27673 !c! write (*,*) "Rhead_sq = ", Rhead_sq
27674 !c! write (*,*) "ee = ", ee
27675 !c! write (*,*) "Fgb = ", Fgb
27676 !c! write (*,*) "fac = ", eps_inout_fac
27677 !c! write (*,*) "Qij = ", Qij
27678 !c! write (*,*) "Egb = ", Egb
27679 !c! Derivative of Egb is Ggb...
27680 !c! dFGBdR is used by Quad's later...
27681 dGGBdFGB = -(-332.0d0 * Qij * eps_inout_fac) / (Fgb * Fgb)
27682 dFGBdR = ( Rhead * ( 2.0d0 - (0.5d0 * ee0) ) )&
27684 dGGBdR = dGGBdFGB * dFGBdR
27686 !c!-------------------------------------------------------------------
27687 !c! Fisocav - isotropic cavity creation term
27689 top = al1 * (dsqrt(pom) + al2 * pom - al3)
27690 bot = (1.0d0 + al4 * pom**12.0d0)
27692 FisoCav = top / bot
27693 dtop = al1 * ((1.0d0 / (2.0d0 * dsqrt(pom))) + al2)
27694 dbot = 12.0d0 * al4 * pom ** 11.0d0
27695 dGCVdR = ((dtop * bot - top * dbot) / botsq) * csig
27697 !c!-------------------------------------------------------------------
27698 !c! Polarization energy
27700 MomoFac1 = (1.0d0 - chi1 * sqom2)
27701 MomoFac2 = (1.0d0 - chi2 * sqom1)
27702 RR1 = ( R1 * R1 ) / MomoFac1
27703 RR2 = ( R2 * R2 ) / MomoFac2
27704 ee1 = exp(-( RR1 / (4.0d0 * a12sq) ))
27705 ee2 = exp(-( RR2 / (4.0d0 * a12sq) ))
27706 fgb1 = sqrt( RR1 + a12sq * ee1 )
27707 fgb2 = sqrt( RR2 + a12sq * ee2 )
27708 epol = 332.0d0 * eps_inout_fac * (&
27709 (( alphapol1 / fgb1 )**4.0d0)+((alphapol2/fgb2) ** 4.0d0 ))
27711 !c! derivative of Epol is Gpol...
27712 dPOLdFGB1 = -(1328.0d0 * eps_inout_fac * alphapol1 ** 4.0d0)&
27714 dPOLdFGB2 = -(1328.0d0 * eps_inout_fac * alphapol2 ** 4.0d0)&
27716 dFGBdR1 = ( (R1 / MomoFac1) &
27717 * ( 2.0d0 - (0.5d0 * ee1) ) )&
27719 dFGBdR2 = ( (R2 / MomoFac2) &
27720 * ( 2.0d0 - (0.5d0 * ee2) ) ) &
27722 dFGBdOM2 = (((R1 * R1 * chi1 * om2) / (MomoFac1 * MomoFac1)) &
27723 * ( 2.0d0 - 0.5d0 * ee1) ) &
27725 dFGBdOM1 = (((R2 * R2 * chi2 * om1) / (MomoFac2 * MomoFac2)) &
27726 * ( 2.0d0 - 0.5d0 * ee2) ) &
27728 dPOLdR1 = dPOLdFGB1 * dFGBdR1
27729 !c! dPOLdR1 = 0.0d0
27730 dPOLdR2 = dPOLdFGB2 * dFGBdR2
27731 !c! dPOLdR2 = 0.0d0
27732 dPOLdOM1 = dPOLdFGB2 * dFGBdOM1
27733 !c! dPOLdOM1 = 0.0d0
27734 dPOLdOM2 = dPOLdFGB1 * dFGBdOM2
27735 pom = (pis / Rhead)**6.0d0
27736 Elj = 4.0d0 * eps_head * pom * (pom-1.0d0)
27738 !c! derivative of Elj is Glj
27739 dGLJdR = 4.0d0 * eps_head &
27740 * (((-12.0d0*pis**12.0d0)/(Rhead**13.0d0)) &
27741 + (( 6.0d0*pis**6.0d0) /(Rhead**7.0d0)))
27743 !c!-------------------------------------------------------------------
27745 IF (Wqd.ne.0.0d0) THEN
27746 Beta1 = 5.0d0 + 3.0d0 * (sqom12 - 1.0d0) &
27747 - 37.5d0 * ( sqom1 + sqom2 ) &
27748 + 157.5d0 * ( sqom1 * sqom2 ) &
27749 - 45.0d0 * om1*om2*om12
27750 fac = -( Wqd / (2.0d0 * Fgb**5.0d0) )
27751 Equad = fac * Beta1
27753 !c! derivative of Equad...
27754 dQUADdR = ((2.5d0 * Wqd * Beta1) / (Fgb**6.0d0)) * dFGBdR
27755 !c! dQUADdR = 0.0d0
27756 dQUADdOM1 = fac* (-75.0d0*om1 + 315.0d0*om1*sqom2 - 45.0d0*om2*om12)
27757 !c! dQUADdOM1 = 0.0d0
27758 dQUADdOM2 = fac* (-75.0d0*om2 + 315.0d0*sqom1*om2 - 45.0d0*om1*om12)
27759 !c! dQUADdOM2 = 0.0d0
27760 dQUADdOM12 = fac * ( 6.0d0*om12 - 45.0d0*om1*om2 )
27765 !c!-------------------------------------------------------------------
27766 !c! Return the results
27768 eom1 = dPOLdOM1 + dQUADdOM1
27769 eom2 = dPOLdOM2 + dQUADdOM2
27771 !c! now some magical transformations to project gradient into
27772 !c! three cartesian vectors
27774 dcosom1(k) = rij * (dc_norm(k,nres+i) - om1 * erij(k))
27775 dcosom2(k) = rij * (dc_norm(k,nres+j) - om2 * erij(k))
27776 tuna(k) = eom1 * dcosom1(k) + eom2 * dcosom2(k)
27780 erhead(k) = Rhead_distance(k)/Rhead
27781 erhead_tail(k,1) = ((ctail(k,2)-chead(k,1))/R1)
27782 erhead_tail(k,2) = ((chead(k,2)-ctail(k,1))/R2)
27784 erdxi = scalar( erhead(1), dC_norm(1,i+nres) )
27785 erdxj = scalar( erhead(1), dC_norm(1,j+nres) )
27786 bat = scalar( erhead_tail(1,1), dC_norm(1,i+nres) )
27787 federmaus = scalar(erhead_tail(1,1),dC_norm(1,j+nres))
27788 eagle = scalar( erhead_tail(1,2), dC_norm(1,j+nres) )
27789 adler = scalar( erhead_tail(1,2), dC_norm(1,i+nres) )
27790 facd1 = d1 * vbld_inv(i+nres)
27791 facd2 = d2 * vbld_inv(j+nres)
27792 facd3 = dtail(1,itypi,itypj) * vbld_inv(i+nres)
27793 facd4 = dtail(2,itypi,itypj) * vbld_inv(j+nres)
27795 hawk = erhead_tail(k,1) + &
27796 facd1 * (erhead_tail(k,1) - bat * dC_norm(k,i+nres))
27797 condor = erhead_tail(k,2) + &
27798 facd2 * (erhead_tail(k,2) - eagle * dC_norm(k,j+nres))
27800 pom = erhead(k)+facd1*(erhead(k)-erdxi*dC_norm(k,i+nres))
27801 !c! this acts on hydrophobic center of interaction
27802 gheadtail(k,1,1) = gheadtail(k,1,1) &
27807 - dPOLdR2 * (erhead_tail(k,2) &
27808 -facd3 * (erhead_tail(k,2) - adler * dC_norm(k,i+nres)))&
27812 + (eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,nres+i))&
27813 + eom1*(erij(k)-om1*dc_norm(k,nres+i)))*dsci_inv
27815 pom = erhead(k)+facd2*(erhead(k)-erdxj*dC_norm(k,j+nres))
27816 !c! this acts on hydrophobic center of interaction
27817 gheadtail(k,2,1) = gheadtail(k,2,1) &
27821 + dPOLdR1 * (erhead_tail(k,1) &
27822 -facd4 * (erhead_tail(k,1) - federmaus * dC_norm(k,j+nres))) &
27823 + dPOLdR2 * condor &
27827 + (eom12*(dc_norm(k,nres+i)-om12*dc_norm(k,nres+j)) &
27828 + eom2*(erij(k)-om2*dc_norm(k,nres+j)))*dscj_inv
27830 !c! this acts on Calpha
27831 gheadtail(k,3,1) = gheadtail(k,3,1) &
27832 - dGCLdR * erhead(k)&
27833 - dGGBdR * erhead(k)&
27834 - dGCVdR * erhead(k)&
27835 - dPOLdR1 * erhead_tail(k,1)&
27836 - dPOLdR2 * erhead_tail(k,2)&
27837 - dGLJdR * erhead(k) &
27838 - dQUADdR * erhead(k)&
27840 !c! this acts on Calpha
27841 gheadtail(k,4,1) = gheadtail(k,4,1) &
27842 + dGCLdR * erhead(k) &
27843 + dGGBdR * erhead(k) &
27844 + dGCVdR * erhead(k) &
27845 + dPOLdR1 * erhead_tail(k,1) &
27846 + dPOLdR2 * erhead_tail(k,2) &
27847 + dGLJdR * erhead(k) &
27848 + dQUADdR * erhead(k)&
27851 ener(istate) = ECL + Egb + Epol + Fisocav + Elj + Equad
27852 eheadtail = eheadtail &
27853 + wstate(istate, itypi, itypj) &
27854 * dexp(-betaT * ener(istate))
27855 !c! foreach cartesian dimension
27857 !c! foreach of two gvdwx and gvdwc
27859 gheadtail(k,l,2) = gheadtail(k,l,2) &
27860 + wstate( istate, itypi, itypj ) &
27861 * dexp(-betaT * ener(istate)) &
27863 gheadtail(k,l,1) = 0.0d0
27867 !c! Here ended the gigantic DO istate = 1, 4, which starts
27868 !c! at the beggining of the subroutine
27872 gheadtail(k,l,2) = gheadtail(k,l,2) / eheadtail
27874 gvdwx(k,i) = gvdwx(k,i) + gheadtail(k,1,2)
27875 gvdwx(k,j) = gvdwx(k,j) + gheadtail(k,2,2)
27876 gvdwc(k,i) = gvdwc(k,i) + gheadtail(k,3,2)
27877 gvdwc(k,j) = gvdwc(k,j) + gheadtail(k,4,2)
27879 gheadtail(k,l,1) = 0.0d0
27880 gheadtail(k,l,2) = 0.0d0
27883 eheadtail = (-dlog(eheadtail)) / betaT
27890 END SUBROUTINE energy_quad
27891 !!-----------------------------------------------------------
27892 SUBROUTINE eqn(Epol)
27896 double precision facd4, federmaus,epol
27897 alphapol1 = alphapol(itypi,itypj)
27898 !c! R1 - distance between head of ith side chain and tail of jth sidechain
27901 !c! Calculate head-to-tail distances
27902 R1=R1+(ctail(k,2)-chead(k,1))**2
27907 !c! R1 = dsqrt((Rtail**2)+((dtail(1,itypi,itypj)
27908 !c! & +dhead(1,1,itypi,itypj))**2))
27909 !c! R2 = dsqrt((Rtail**2)+((dtail(2,itypi,itypj)
27910 !c! & +dhead(2,1,itypi,itypj))**2))
27911 !c--------------------------------------------------------------------
27912 !c Polarization energy
27914 MomoFac1 = (1.0d0 - chi1 * sqom2)
27915 RR1 = R1 * R1 / MomoFac1
27916 ee1 = exp(-( RR1 / (4.0d0 * a12sq) ))
27917 fgb1 = sqrt( RR1 + a12sq * ee1)
27918 epol = 332.0d0 * eps_inout_fac * (( alphapol1 / fgb1 )**4.0d0)
27919 dPOLdFGB1 = -(1328.0d0 * eps_inout_fac * alphapol1 ** 4.0d0) &
27921 dFGBdR1 = ( (R1 / MomoFac1) &
27922 * ( 2.0d0 - (0.5d0 * ee1) ) ) &
27924 dFGBdOM2 = (((R1 * R1 * chi1 * om2) / (MomoFac1 * MomoFac1)) &
27925 * (2.0d0 - 0.5d0 * ee1) ) &
27927 dPOLdR1 = dPOLdFGB1 * dFGBdR1
27928 !c! dPOLdR1 = 0.0d0
27930 dPOLdOM2 = dPOLdFGB1 * dFGBdOM2
27932 erhead_tail(k,1) = ((ctail(k,2)-chead(k,1))/R1)
27934 bat = scalar( erhead_tail(1,1), dC_norm(1,i+nres) )
27935 federmaus = scalar(erhead_tail(1,1),dC_norm(1,j+nres))
27936 facd1 = d1 * vbld_inv(i+nres)
27937 facd4 = dtail(2,itypi,itypj) * vbld_inv(j+nres)
27940 hawk = (erhead_tail(k,1) + &
27941 facd1 * (erhead_tail(k,1) - bat * dC_norm(k,i+nres)))
27943 gvdwx(k,i) = gvdwx(k,i) &
27945 gvdwx(k,j) = gvdwx(k,j) &
27946 + dPOLdR1 * (erhead_tail(k,1) &
27947 -facd4 * (erhead_tail(k,1) - federmaus * dC_norm(k,j+nres)))
27949 gvdwc(k,i) = gvdwc(k,i) - dPOLdR1 * erhead_tail(k,1)
27950 gvdwc(k,j) = gvdwc(k,j) + dPOLdR1 * erhead_tail(k,1)
27955 SUBROUTINE enq(Epol)
27958 double precision facd3, adler,epol
27959 alphapol2 = alphapol(itypj,itypi)
27960 !c! R2 - distance between head of jth side chain and tail of ith sidechain
27963 !c! Calculate head-to-tail distances
27964 R2=R2+(chead(k,2)-ctail(k,1))**2
27969 !c! R1 = dsqrt((Rtail**2)+((dtail(1,itypi,itypj)
27970 !c! & +dhead(1,1,itypi,itypj))**2))
27971 !c! R2 = dsqrt((Rtail**2)+((dtail(2,itypi,itypj)
27972 !c! & +dhead(2,1,itypi,itypj))**2))
27973 !c------------------------------------------------------------------------
27974 !c Polarization energy
27975 MomoFac2 = (1.0d0 - chi2 * sqom1)
27976 RR2 = R2 * R2 / MomoFac2
27977 ee2 = exp(-(RR2 / (4.0d0 * a12sq)))
27978 fgb2 = sqrt(RR2 + a12sq * ee2)
27979 epol = 332.0d0 * eps_inout_fac * ((alphapol2/fgb2) ** 4.0d0 )
27980 dPOLdFGB2 = -(1328.0d0 * eps_inout_fac * alphapol2 ** 4.0d0) &
27982 dFGBdR2 = ( (R2 / MomoFac2) &
27983 * ( 2.0d0 - (0.5d0 * ee2) ) ) &
27985 dFGBdOM1 = (((R2 * R2 * chi2 * om1) / (MomoFac2 * MomoFac2)) &
27986 * (2.0d0 - 0.5d0 * ee2) ) &
27988 dPOLdR2 = dPOLdFGB2 * dFGBdR2
27989 !c! dPOLdR2 = 0.0d0
27990 dPOLdOM1 = dPOLdFGB2 * dFGBdOM1
27991 !c! dPOLdOM1 = 0.0d0
27993 !c!-------------------------------------------------------------------
27994 !c! Return the results
27995 !c! (See comments in Eqq)
27997 erhead_tail(k,2) = ((chead(k,2)-ctail(k,1))/R2)
27999 eagle = scalar( erhead_tail(1,2), dC_norm(1,j+nres) )
28000 adler = scalar( erhead_tail(1,2), dC_norm(1,i+nres) )
28001 facd2 = d2 * vbld_inv(j+nres)
28002 facd3 = dtail(1,itypi,itypj) * vbld_inv(i+nres)
28004 condor = (erhead_tail(k,2) &
28005 + facd2 * (erhead_tail(k,2) - eagle * dC_norm(k,j+nres)))
28007 gvdwx(k,i) = gvdwx(k,i) &
28008 - dPOLdR2 * (erhead_tail(k,2) &
28009 -facd3 * (erhead_tail(k,2) - adler * dC_norm(k,i+nres)))
28010 gvdwx(k,j) = gvdwx(k,j) &
28013 gvdwc(k,i) = gvdwc(k,i) &
28014 - dPOLdR2 * erhead_tail(k,2)
28015 gvdwc(k,j) = gvdwc(k,j) &
28016 + dPOLdR2 * erhead_tail(k,2)
28022 SUBROUTINE enq_cat(Epol)
28025 double precision facd3, adler,epol
28026 alphapol2 = alphapolcat(itypi,itypj)
28027 !c! R2 - distance between head of jth side chain and tail of ith sidechain
28030 !c! Calculate head-to-tail distances
28031 R2=R2+(chead(k,2)-ctail(k,1))**2
28036 !c! R1 = dsqrt((Rtail**2)+((dtail(1,itypi,itypj)
28037 !c! & +dhead(1,1,itypi,itypj))**2))
28038 !c! R2 = dsqrt((Rtail**2)+((dtail(2,itypi,itypj)
28039 !c! & +dhead(2,1,itypi,itypj))**2))
28040 !c------------------------------------------------------------------------
28041 !c Polarization energy
28042 MomoFac2 = (1.0d0 - chi2 * sqom1)
28043 RR2 = R2 * R2 / MomoFac2
28044 ee2 = exp(-(RR2 / (4.0d0 * a12sq)))
28045 fgb2 = sqrt(RR2 + a12sq * ee2)
28046 epol = 332.0d0 * eps_inout_fac * ((alphapol2/fgb2) ** 4.0d0 )
28047 dPOLdFGB2 = -(1328.0d0 * eps_inout_fac * alphapol2 ** 4.0d0) &
28049 dFGBdR2 = ( (R2 / MomoFac2) &
28050 * ( 2.0d0 - (0.5d0 * ee2) ) ) &
28052 dFGBdOM1 = (((R2 * R2 * chi2 * om1) / (MomoFac2 * MomoFac2)) &
28053 * (2.0d0 - 0.5d0 * ee2) ) &
28055 dPOLdR2 = dPOLdFGB2 * dFGBdR2
28056 !c! dPOLdR2 = 0.0d0
28057 dPOLdOM1 = dPOLdFGB2 * dFGBdOM1
28058 !c! dPOLdOM1 = 0.0d0
28061 !c!-------------------------------------------------------------------
28062 !c! Return the results
28063 !c! (See comments in Eqq)
28065 erhead_tail(k,2) = ((chead(k,2)-ctail(k,1))/R2)
28067 eagle = scalar( erhead_tail(1,2), dC_norm(1,j) )
28068 adler = scalar( erhead_tail(1,2), dC_norm(1,i+nres) )
28069 facd2 = d2 * vbld_inv(j+nres)
28070 facd3 = dtailcat(1,itypi,itypj) * vbld_inv(i+nres)
28072 condor = (erhead_tail(k,2) &
28073 + facd2 * (erhead_tail(k,2) - eagle * dC_norm(k,j)))
28075 gradpepcatx(k,i) = gradpepcatx(k,i) &
28076 - dPOLdR2 * (erhead_tail(k,2) &
28077 -facd3 * (erhead_tail(k,2) - adler * dC_norm(k,i+nres)))
28078 ! gradpepcatx(k,j) = gradpepcatx(k,j) &
28079 ! + dPOLdR2 * condor
28081 gradpepcat(k,i) = gradpepcat(k,i) &
28082 - dPOLdR2 * erhead_tail(k,2)
28083 gradpepcat(k,j) = gradpepcat(k,j) &
28084 + dPOLdR2 * erhead_tail(k,2)
28088 END SUBROUTINE enq_cat
28090 SUBROUTINE eqd(Ecl,Elj,Epol)
28093 double precision facd4, federmaus,ecl,elj,epol
28094 alphapol1 = alphapol(itypi,itypj)
28095 w1 = wqdip(1,itypi,itypj)
28096 w2 = wqdip(2,itypi,itypj)
28097 pis = sig0head(itypi,itypj)
28098 eps_head = epshead(itypi,itypj)
28099 !c!-------------------------------------------------------------------
28100 !c! R1 - distance between head of ith side chain and tail of jth sidechain
28103 !c! Calculate head-to-tail distances
28104 R1=R1+(ctail(k,2)-chead(k,1))**2
28109 !c! R1 = dsqrt((Rtail**2)+((dtail(1,itypi,itypj)
28110 !c! & +dhead(1,1,itypi,itypj))**2))
28111 !c! R2 = dsqrt((Rtail**2)+((dtail(2,itypi,itypj)
28112 !c! & +dhead(2,1,itypi,itypj))**2))
28114 !c!-------------------------------------------------------------------
28116 sparrow = w1 * Qi * om1
28117 hawk = w2 * Qi * Qi * (1.0d0 - sqom2)
28118 Ecl = sparrow / Rhead**2.0d0 &
28119 - hawk / Rhead**4.0d0
28120 dGCLdR = - 2.0d0 * sparrow / Rhead**3.0d0 &
28121 + 4.0d0 * hawk / Rhead**5.0d0
28123 dGCLdOM1 = (w1 * Qi) / (Rhead**2.0d0)
28125 dGCLdOM2 = (2.0d0 * w2 * Qi * Qi * om2) / (Rhead ** 4.0d0)
28126 !c--------------------------------------------------------------------
28127 !c Polarization energy
28129 MomoFac1 = (1.0d0 - chi1 * sqom2)
28130 RR1 = R1 * R1 / MomoFac1
28131 ee1 = exp(-( RR1 / (4.0d0 * a12sq) ))
28132 fgb1 = sqrt( RR1 + a12sq * ee1)
28133 epol = 332.0d0 * eps_inout_fac * (( alphapol1 / fgb1 )**4.0d0)
28135 !c!------------------------------------------------------------------
28136 !c! derivative of Epol is Gpol...
28137 dPOLdFGB1 = -(1328.0d0 * eps_inout_fac * alphapol1 ** 4.0d0) &
28139 dFGBdR1 = ( (R1 / MomoFac1) &
28140 * ( 2.0d0 - (0.5d0 * ee1) ) ) &
28142 dFGBdOM2 = (((R1 * R1 * chi1 * om2) / (MomoFac1 * MomoFac1)) &
28143 * (2.0d0 - 0.5d0 * ee1) ) &
28145 dPOLdR1 = dPOLdFGB1 * dFGBdR1
28146 !c! dPOLdR1 = 0.0d0
28148 dPOLdOM2 = dPOLdFGB1 * dFGBdOM2
28149 !c! dPOLdOM2 = 0.0d0
28150 !c!-------------------------------------------------------------------
28152 pom = (pis / Rhead)**6.0d0
28153 Elj = 4.0d0 * eps_head * pom * (pom-1.0d0)
28154 !c! derivative of Elj is Glj
28155 dGLJdR = 4.0d0 * eps_head &
28156 * (((-12.0d0*pis**12.0d0)/(Rhead**13.0d0)) &
28157 + (( 6.0d0*pis**6.0d0) /(Rhead**7.0d0)))
28159 erhead(k) = Rhead_distance(k)/Rhead
28160 erhead_tail(k,1) = ((ctail(k,2)-chead(k,1))/R1)
28163 erdxi = scalar( erhead(1), dC_norm(1,i+nres) )
28164 erdxj = scalar( erhead(1), dC_norm(1,j+nres) )
28165 bat = scalar( erhead_tail(1,1), dC_norm(1,i+nres) )
28166 federmaus = scalar(erhead_tail(1,1),dC_norm(1,j+nres))
28167 facd1 = d1 * vbld_inv(i+nres)
28168 facd2 = d2 * vbld_inv(j+nres)
28169 facd4 = dtail(2,itypi,itypj) * vbld_inv(j+nres)
28172 hawk = (erhead_tail(k,1) + &
28173 facd1 * (erhead_tail(k,1) - bat * dC_norm(k,i+nres)))
28175 pom = erhead(k)+facd1*(erhead(k)-erdxi*dC_norm(k,i+nres))
28176 gvdwx(k,i) = gvdwx(k,i) &
28181 pom = erhead(k)+facd2*(erhead(k)-erdxj*dC_norm(k,j+nres))
28182 gvdwx(k,j) = gvdwx(k,j) &
28184 + dPOLdR1 * (erhead_tail(k,1) &
28185 -facd4 * (erhead_tail(k,1) - federmaus * dC_norm(k,j+nres))) &
28189 gvdwc(k,i) = gvdwc(k,i) &
28190 - dGCLdR * erhead(k) &
28191 - dPOLdR1 * erhead_tail(k,1) &
28192 - dGLJdR * erhead(k)
28194 gvdwc(k,j) = gvdwc(k,j) &
28195 + dGCLdR * erhead(k) &
28196 + dPOLdR1 * erhead_tail(k,1) &
28197 + dGLJdR * erhead(k)
28202 SUBROUTINE edq(Ecl,Elj,Epol)
28207 double precision facd3, adler,ecl,elj,epol
28208 alphapol2 = alphapol(itypj,itypi)
28209 w1 = wqdip(1,itypi,itypj)
28210 w2 = wqdip(2,itypi,itypj)
28211 pis = sig0head(itypi,itypj)
28212 eps_head = epshead(itypi,itypj)
28213 !c!-------------------------------------------------------------------
28214 !c! R2 - distance between head of jth side chain and tail of ith sidechain
28217 !c! Calculate head-to-tail distances
28218 R2=R2+(chead(k,2)-ctail(k,1))**2
28223 !c! R1 = dsqrt((Rtail**2)+((dtail(1,itypi,itypj)
28224 !c! & +dhead(1,1,itypi,itypj))**2))
28225 !c! R2 = dsqrt((Rtail**2)+((dtail(2,itypi,itypj)
28226 !c! & +dhead(2,1,itypi,itypj))**2))
28229 !c!-------------------------------------------------------------------
28231 sparrow = w1 * Qj * om1
28232 hawk = w2 * Qj * Qj * (1.0d0 - sqom2)
28233 ECL = sparrow / Rhead**2.0d0 &
28234 - hawk / Rhead**4.0d0
28235 !c!-------------------------------------------------------------------
28236 !c! derivative of ecl is Gcl
28238 dGCLdR = - 2.0d0 * sparrow / Rhead**3.0d0 &
28239 + 4.0d0 * hawk / Rhead**5.0d0
28241 dGCLdOM1 = (w1 * Qj) / (Rhead**2.0d0)
28243 dGCLdOM2 = (2.0d0 * w2 * Qj * Qj * om2) / (Rhead ** 4.0d0)
28244 !c--------------------------------------------------------------------
28245 !c Polarization energy
28247 MomoFac2 = (1.0d0 - chi2 * sqom1)
28248 RR2 = R2 * R2 / MomoFac2
28249 ee2 = exp(-(RR2 / (4.0d0 * a12sq)))
28250 fgb2 = sqrt(RR2 + a12sq * ee2)
28251 epol = 332.0d0 * eps_inout_fac * ((alphapol2/fgb2) ** 4.0d0 )
28252 dPOLdFGB2 = -(1328.0d0 * eps_inout_fac * alphapol2 ** 4.0d0) &
28254 dFGBdR2 = ( (R2 / MomoFac2) &
28255 * ( 2.0d0 - (0.5d0 * ee2) ) ) &
28257 dFGBdOM1 = (((R2 * R2 * chi2 * om1) / (MomoFac2 * MomoFac2)) &
28258 * (2.0d0 - 0.5d0 * ee2) ) &
28260 dPOLdR2 = dPOLdFGB2 * dFGBdR2
28261 !c! dPOLdR2 = 0.0d0
28262 dPOLdOM1 = dPOLdFGB2 * dFGBdOM1
28263 !c! dPOLdOM1 = 0.0d0
28265 !c!-------------------------------------------------------------------
28267 pom = (pis / Rhead)**6.0d0
28268 Elj = 4.0d0 * eps_head * pom * (pom-1.0d0)
28269 !c! derivative of Elj is Glj
28270 dGLJdR = 4.0d0 * eps_head &
28271 * (((-12.0d0*pis**12.0d0)/(Rhead**13.0d0)) &
28272 + (( 6.0d0*pis**6.0d0) /(Rhead**7.0d0)))
28273 !c!-------------------------------------------------------------------
28274 !c! Return the results
28275 !c! (see comments in Eqq)
28277 erhead(k) = Rhead_distance(k)/Rhead
28278 erhead_tail(k,2) = ((chead(k,2)-ctail(k,1))/R2)
28280 erdxi = scalar( erhead(1), dC_norm(1,i+nres) )
28281 erdxj = scalar( erhead(1), dC_norm(1,j+nres) )
28282 eagle = scalar( erhead_tail(1,2), dC_norm(1,j+nres) )
28283 adler = scalar( erhead_tail(1,2), dC_norm(1,i+nres) )
28284 facd1 = d1 * vbld_inv(i+nres)
28285 facd2 = d2 * vbld_inv(j+nres)
28286 facd3 = dtail(1,itypi,itypj) * vbld_inv(i+nres)
28288 condor = (erhead_tail(k,2) &
28289 + facd2 * (erhead_tail(k,2) - eagle * dC_norm(k,j+nres)))
28291 pom = erhead(k)+facd1*(erhead(k)-erdxi*dC_norm(k,i+nres))
28292 gvdwx(k,i) = gvdwx(k,i) &
28294 - dPOLdR2 * (erhead_tail(k,2) &
28295 -facd3 * (erhead_tail(k,2) - adler * dC_norm(k,i+nres))) &
28298 pom = erhead(k)+facd2*(erhead(k)-erdxj*dC_norm(k,j+nres))
28299 gvdwx(k,j) = gvdwx(k,j) &
28301 + dPOLdR2 * condor &
28305 gvdwc(k,i) = gvdwc(k,i) &
28306 - dGCLdR * erhead(k) &
28307 - dPOLdR2 * erhead_tail(k,2) &
28308 - dGLJdR * erhead(k)
28310 gvdwc(k,j) = gvdwc(k,j) &
28311 + dGCLdR * erhead(k) &
28312 + dPOLdR2 * erhead_tail(k,2) &
28313 + dGLJdR * erhead(k)
28319 SUBROUTINE edq_cat(Ecl,Elj,Epol)
28323 double precision facd3, adler,ecl,elj,epol
28324 alphapol2 = alphapolcat(itypi,itypj)
28325 w1 = wqdipcat(1,itypi,itypj)
28326 w2 = wqdipcat(2,itypi,itypj)
28327 pis = sig0headcat(itypi,itypj)
28328 eps_head = epsheadcat(itypi,itypj)
28329 !c!-------------------------------------------------------------------
28330 !c! R2 - distance between head of jth side chain and tail of ith sidechain
28333 !c! Calculate head-to-tail distances
28334 R2=R2+(chead(k,2)-ctail(k,1))**2
28339 !c! R1 = dsqrt((Rtail**2)+((dtail(1,itypi,itypj)
28340 !c! & +dhead(1,1,itypi,itypj))**2))
28341 !c! R2 = dsqrt((Rtail**2)+((dtail(2,itypi,itypj)
28342 !c! & +dhead(2,1,itypi,itypj))**2))
28345 !c!-------------------------------------------------------------------
28347 ! write(iout,*) "KURWA2",Rhead
28348 sparrow = w1 * Qj * om1
28349 hawk = w2 * Qj * Qj * (1.0d0 - sqom2)
28350 ECL = sparrow / Rhead**2.0d0 &
28351 - hawk / Rhead**4.0d0
28352 !c!-------------------------------------------------------------------
28353 !c! derivative of ecl is Gcl
28355 dGCLdR = - 2.0d0 * sparrow / Rhead**3.0d0 &
28356 + 4.0d0 * hawk / Rhead**5.0d0
28358 dGCLdOM1 = (w1 * Qj) / (Rhead**2.0d0)
28360 dGCLdOM2 = (2.0d0 * w2 * Qj * Qj * om2) / (Rhead ** 4.0d0)
28361 !c--------------------------------------------------------------------
28362 !c--------------------------------------------------------------------
28363 !c Polarization energy
28365 MomoFac2 = (1.0d0 - chi2 * sqom1)
28366 RR2 = R2 * R2 / MomoFac2
28367 ee2 = exp(-(RR2 / (4.0d0 * a12sq)))
28368 fgb2 = sqrt(RR2 + a12sq * ee2)
28369 epol = 332.0d0 * eps_inout_fac * ((alphapol2/fgb2) ** 4.0d0 )
28370 dPOLdFGB2 = -(1328.0d0 * eps_inout_fac * alphapol2 ** 4.0d0) &
28372 dFGBdR2 = ( (R2 / MomoFac2) &
28373 * ( 2.0d0 - (0.5d0 * ee2) ) ) &
28375 dFGBdOM1 = (((R2 * R2 * chi2 * om1) / (MomoFac2 * MomoFac2)) &
28376 * (2.0d0 - 0.5d0 * ee2) ) &
28378 dPOLdR2 = dPOLdFGB2 * dFGBdR2
28379 !c! dPOLdR2 = 0.0d0
28380 dPOLdOM1 = dPOLdFGB2 * dFGBdOM1
28381 !c! dPOLdOM1 = 0.0d0
28383 !c!-------------------------------------------------------------------
28385 pom = (pis / Rhead)**6.0d0
28386 Elj = 4.0d0 * eps_head * pom * (pom-1.0d0)
28387 !c! derivative of Elj is Glj
28388 dGLJdR = 4.0d0 * eps_head &
28389 * (((-12.0d0*pis**12.0d0)/(Rhead**13.0d0)) &
28390 + (( 6.0d0*pis**6.0d0) /(Rhead**7.0d0)))
28391 !c!-------------------------------------------------------------------
28393 !c! Return the results
28394 !c! (see comments in Eqq)
28396 erhead(k) = Rhead_distance(k)/Rhead
28397 erhead_tail(k,2) = ((chead(k,2)-ctail(k,1))/R2)
28399 erdxi = scalar( erhead(1), dC_norm(1,i+nres) )
28400 erdxj = scalar( erhead(1), dC_norm(1,j) )
28401 eagle = scalar( erhead_tail(1,2), dC_norm(1,j) )
28402 adler = scalar( erhead_tail(1,2), dC_norm(1,i+nres) )
28403 facd1 = d1 * vbld_inv(i+nres)
28404 facd2 = d2 * vbld_inv(j)
28405 facd3 = dtailcat(1,itypi,itypj) * vbld_inv(i+nres)
28407 condor = (erhead_tail(k,2) &
28408 + facd2 * (erhead_tail(k,2) - eagle * dC_norm(k,j)))
28410 pom = erhead(k)+facd1*(erhead(k)-erdxi*dC_norm(k,i+nres))
28411 gradpepcatx(k,i) = gradpepcatx(k,i) &
28413 - dPOLdR2 * (erhead_tail(k,2) &
28414 -facd3 * (erhead_tail(k,2) - adler * dC_norm(k,i+nres))) &
28417 pom = erhead(k)+facd2*(erhead(k)-erdxj*dC_norm(k,j))
28418 ! gradpepcatx(k,j) = gradpepcatx(k,j) &
28420 ! + dPOLdR2 * condor &
28424 gradpepcat(k,i) = gradpepcat(k,i) &
28425 - dGCLdR * erhead(k) &
28426 - dPOLdR2 * erhead_tail(k,2) &
28427 - dGLJdR * erhead(k)
28429 gradpepcat(k,j) = gradpepcat(k,j) &
28430 + dGCLdR * erhead(k) &
28431 + dPOLdR2 * erhead_tail(k,2) &
28432 + dGLJdR * erhead(k)
28436 END SUBROUTINE edq_cat
28438 SUBROUTINE edq_cat_pep(Ecl,Elj,Epol)
28442 double precision facd3, adler,ecl,elj,epol
28443 alphapol2 = alphapolcat(itypi,itypj)
28444 w1 = wqdipcat(1,itypi,itypj)
28445 w2 = wqdipcat(2,itypi,itypj)
28446 pis = sig0headcat(itypi,itypj)
28447 eps_head = epsheadcat(itypi,itypj)
28448 !c!-------------------------------------------------------------------
28449 !c! R2 - distance between head of jth side chain and tail of ith sidechain
28452 !c! Calculate head-to-tail distances
28453 R2=R2+(chead(k,2)-ctail(k,1))**2
28458 !c! R1 = dsqrt((Rtail**2)+((dtail(1,itypi,itypj)
28459 !c! & +dhead(1,1,itypi,itypj))**2))
28460 !c! R2 = dsqrt((Rtail**2)+((dtail(2,itypi,itypj)
28461 !c! & +dhead(2,1,itypi,itypj))**2))
28464 !c!-------------------------------------------------------------------
28466 sparrow = w1 * Qj * om1
28467 hawk = w2 * Qj * Qj * (1.0d0 - sqom2)
28468 ! print *,"CO2", itypi,itypj
28469 ! print *,"CO?!.", w1,w2,Qj,om1
28470 ECL = sparrow / Rhead**2.0d0 &
28471 - hawk / Rhead**4.0d0
28472 !c!-------------------------------------------------------------------
28473 !c! derivative of ecl is Gcl
28475 dGCLdR = - 2.0d0 * sparrow / Rhead**3.0d0 &
28476 + 4.0d0 * hawk / Rhead**5.0d0
28478 dGCLdOM1 = (w1 * Qj) / (Rhead**2.0d0)
28480 dGCLdOM2 = (2.0d0 * w2 * Qj * Qj * om2) / (Rhead ** 4.0d0)
28481 !c--------------------------------------------------------------------
28482 !c--------------------------------------------------------------------
28483 !c Polarization energy
28485 MomoFac2 = (1.0d0 - chi2 * sqom1)
28486 RR2 = R2 * R2 / MomoFac2
28487 ee2 = exp(-(RR2 / (4.0d0 * a12sq)))
28488 fgb2 = sqrt(RR2 + a12sq * ee2)
28489 epol = 332.0d0 * eps_inout_fac * ((alphapol2/fgb2) ** 4.0d0 )
28490 dPOLdFGB2 = -(1328.0d0 * eps_inout_fac * alphapol2 ** 4.0d0) &
28492 dFGBdR2 = ( (R2 / MomoFac2) &
28493 * ( 2.0d0 - (0.5d0 * ee2) ) ) &
28495 dFGBdOM1 = (((R2 * R2 * chi2 * om1) / (MomoFac2 * MomoFac2)) &
28496 * (2.0d0 - 0.5d0 * ee2) ) &
28498 dPOLdR2 = dPOLdFGB2 * dFGBdR2
28499 !c! dPOLdR2 = 0.0d0
28500 dPOLdOM1 = dPOLdFGB2 * dFGBdOM1
28501 !c! dPOLdOM1 = 0.0d0
28503 !c!-------------------------------------------------------------------
28505 pom = (pis / Rhead)**6.0d0
28506 Elj = 4.0d0 * eps_head * pom * (pom-1.0d0)
28507 !c! derivative of Elj is Glj
28508 dGLJdR = 4.0d0 * eps_head &
28509 * (((-12.0d0*pis**12.0d0)/(Rhead**13.0d0)) &
28510 + (( 6.0d0*pis**6.0d0) /(Rhead**7.0d0)))
28511 !c!-------------------------------------------------------------------
28513 !c! Return the results
28514 !c! (see comments in Eqq)
28516 erhead(k) = Rhead_distance(k)/Rhead
28517 erhead_tail(k,2) = ((chead(k,2)-ctail(k,1))/R2)
28519 erdxi = scalar( erhead(1), dC_norm(1,i) )
28520 erdxj = scalar( erhead(1), dC_norm(1,j) )
28521 eagle = scalar( erhead_tail(1,2), dC_norm(1,j) )
28522 adler = scalar( erhead_tail(1,2), dC_norm(1,i) )
28523 facd1 = d1 * vbld_inv(i+1)/2.0
28524 facd2 = d2 * vbld_inv(j)
28525 facd3 = dtailcat(1,itypi,itypj) * vbld_inv(i+1)/2.0
28527 condor = (erhead_tail(k,2) &
28528 + facd2 * (erhead_tail(k,2) - eagle * dC_norm(k,j)))
28530 pom = erhead(k)+facd1*(erhead(k)-erdxi*dC_norm(k,i))
28531 ! gradpepcatx(k,i) = gradpepcatx(k,i) &
28533 ! - dPOLdR2 * (erhead_tail(k,2) &
28534 ! -facd3 * (erhead_tail(k,2) - adler * dC_norm(k,i+nres))) &
28537 pom = erhead(k)+facd2*(erhead(k)-erdxj*dC_norm(k,j))
28538 ! gradpepcatx(k,j) = gradpepcatx(k,j) &
28540 ! + dPOLdR2 * condor &
28544 gradpepcat(k,i) = gradpepcat(k,i) +0.5d0*( &
28545 - dGCLdR * erhead(k) &
28546 - dPOLdR2 * erhead_tail(k,2) &
28547 - dGLJdR * erhead(k))
28548 gradpepcat(k,i+1) = gradpepcat(k,i+1) +0.5d0*( &
28549 - dGCLdR * erhead(k) &
28550 - dPOLdR2 * erhead_tail(k,2) &
28551 - dGLJdR * erhead(k))
28554 gradpepcat(k,j) = gradpepcat(k,j) &
28555 + dGCLdR * erhead(k) &
28556 + dPOLdR2 * erhead_tail(k,2) &
28557 + dGLJdR * erhead(k)
28561 END SUBROUTINE edq_cat_pep
28563 SUBROUTINE edd(ECL)
28568 double precision ecl
28569 !c! csig = sigiso(itypi,itypj)
28570 w1 = wqdip(1,itypi,itypj)
28571 w2 = wqdip(2,itypi,itypj)
28572 !c!-------------------------------------------------------------------
28574 fac = (om12 - 3.0d0 * om1 * om2)
28575 c1 = (w1 / (Rhead**3.0d0)) * fac
28576 c2 = (w2 / Rhead ** 6.0d0) &
28577 * (4.0d0 + fac * fac -3.0d0 * (sqom1 + sqom2))
28579 !c! write (*,*) "w1 = ", w1
28580 !c! write (*,*) "w2 = ", w2
28581 !c! write (*,*) "om1 = ", om1
28582 !c! write (*,*) "om2 = ", om2
28583 !c! write (*,*) "om12 = ", om12
28584 !c! write (*,*) "fac = ", fac
28585 !c! write (*,*) "c1 = ", c1
28586 !c! write (*,*) "c2 = ", c2
28587 !c! write (*,*) "Ecl = ", Ecl
28588 !c! write (*,*) "c2_1 = ", (w2 / Rhead ** 6.0d0)
28589 !c! write (*,*) "c2_2 = ",
28590 !c! & (4.0d0 + fac * fac -3.0d0 * (sqom1 + sqom2))
28591 !c!-------------------------------------------------------------------
28592 !c! dervative of ECL is GCL...
28594 c1 = (-3.0d0 * w1 * fac) / (Rhead ** 4.0d0)
28595 c2 = (-6.0d0 * w2) / (Rhead ** 7.0d0) &
28596 * (4.0d0 + fac * fac - 3.0d0 * (sqom1 + sqom2))
28599 c1 = (-3.0d0 * w1 * om2 ) / (Rhead**3.0d0)
28600 c2 = (-6.0d0 * w2) / (Rhead**6.0d0) &
28601 * ( om2 * om12 - 3.0d0 * om1 * sqom2 + om1 )
28604 c1 = (-3.0d0 * w1 * om1 ) / (Rhead**3.0d0)
28605 c2 = (-6.0d0 * w2) / (Rhead**6.0d0) &
28606 * ( om1 * om12 - 3.0d0 * sqom1 * om2 + om2 )
28609 c1 = w1 / (Rhead ** 3.0d0)
28610 c2 = ( 2.0d0 * w2 * fac ) / Rhead ** 6.0d0
28611 dGCLdOM12 = c1 - c2
28612 !c!-------------------------------------------------------------------
28613 !c! Return the results
28614 !c! (see comments in Eqq)
28616 erhead(k) = Rhead_distance(k)/Rhead
28618 erdxi = scalar( erhead(1), dC_norm(1,i+nres) )
28619 erdxj = scalar( erhead(1), dC_norm(1,j+nres) )
28620 facd1 = d1 * vbld_inv(i+nres)
28621 facd2 = d2 * vbld_inv(j+nres)
28624 pom = erhead(k)+facd1*(erhead(k)-erdxi*dC_norm(k,i+nres))
28625 gvdwx(k,i) = gvdwx(k,i) - dGCLdR * pom
28626 pom = erhead(k)+facd2*(erhead(k)-erdxj*dC_norm(k,j+nres))
28627 gvdwx(k,j) = gvdwx(k,j) + dGCLdR * pom
28629 gvdwc(k,i) = gvdwc(k,i) - dGCLdR * erhead(k)
28630 gvdwc(k,j) = gvdwc(k,j) + dGCLdR * erhead(k)
28634 SUBROUTINE elgrad_init(eheadtail,Egb,Ecl,Elj,Equad,Epol)
28639 real(kind=8) :: eheadtail,Egb,Ecl,Elj,Equad,Epol,Rb
28643 !c! 1/(Gas Constant * Thermostate temperature) = BetaT
28644 !c! ENABLE THIS LINE WHEN USING CHECKGRAD!!!
28646 !c! BetaT = 1.0d0 / (t_bath * Rb)i
28648 BetaT = 1.0d0 / (298.0d0 * Rb)
28649 !c! Gay-berne var's
28650 sig0ij = sigma( itypi,itypj )
28651 chi1 = chi( itypi, itypj )
28652 chi2 = chi( itypj, itypi )
28653 chi12 = chi1 * chi2
28654 chip1 = chipp( itypi, itypj )
28655 chip2 = chipp( itypj, itypi )
28656 chip12 = chip1 * chip2
28663 !c! not used by momo potential, but needed by sc_angular which is shared
28664 !c! by all energy_potential subroutines
28668 !c! location, location, location
28669 ! xj = c( 1, nres+j ) - xi
28670 ! yj = c( 2, nres+j ) - yi
28671 ! zj = c( 3, nres+j ) - zi
28672 dxj = dc_norm( 1, nres+j )
28673 dyj = dc_norm( 2, nres+j )
28674 dzj = dc_norm( 3, nres+j )
28675 !c! distance from center of chain(?) to polar/charged head
28676 !c! write (*,*) "istate = ", 1
28677 !c! write (*,*) "ii = ", 1
28678 !c! write (*,*) "jj = ", 1
28679 d1 = dhead(1, 1, itypi, itypj)
28680 d2 = dhead(2, 1, itypi, itypj)
28682 a12sq = rborn(itypi,itypj) * rborn(itypj,itypi)
28683 !c! a12sq = a12sq * a12sq
28684 !c! charge of amino acid itypi is...
28685 Qi = icharge(itypi)
28686 Qj = icharge(itypj)
28689 chis1 = chis(itypi,itypj)
28690 chis2 = chis(itypj,itypi)
28691 chis12 = chis1 * chis2
28692 sig1 = sigmap1(itypi,itypj)
28693 sig2 = sigmap2(itypi,itypj)
28694 !c! write (*,*) "sig1 = ", sig1
28695 !c! write (*,*) "sig2 = ", sig2
28696 !c! alpha factors from Fcav/Gcav
28697 b1cav = alphasur(1,itypi,itypj)
28699 b2cav = alphasur(2,itypi,itypj)
28700 b3cav = alphasur(3,itypi,itypj)
28701 b4cav = alphasur(4,itypi,itypj)
28702 wqd = wquad(itypi, itypj)
28704 eps_in = epsintab(itypi,itypj)
28705 eps_inout_fac = ( (1.0d0/eps_in) - (1.0d0/eps_out))
28706 !c! write (*,*) "eps_inout_fac = ", eps_inout_fac
28707 !c!-------------------------------------------------------------------
28708 !c! tail location and distance calculations
28711 ctail(k,1)=c(k,i+nres)-dtail(1,itypi,itypj)*dc_norm(k,nres+i)
28712 ctail(k,2)=c(k,j+nres)-dtail(2,itypi,itypj)*dc_norm(k,nres+j)
28714 !c! tail distances will be themselves usefull elswhere
28715 !c1 (in Gcav, for example)
28716 Rtail_distance(1) = ctail( 1, 2 ) - ctail( 1,1 )
28717 Rtail_distance(2) = ctail( 2, 2 ) - ctail( 2,1 )
28718 Rtail_distance(3) = ctail( 3, 2 ) - ctail( 3,1 )
28720 (Rtail_distance(1)*Rtail_distance(1)) &
28721 + (Rtail_distance(2)*Rtail_distance(2)) &
28722 + (Rtail_distance(3)*Rtail_distance(3)))
28723 !c!-------------------------------------------------------------------
28724 !c! Calculate location and distance between polar heads
28725 !c! distance between heads
28726 !c! for each one of our three dimensional space...
28727 d1 = dhead(1, 1, itypi, itypj)
28728 d2 = dhead(2, 1, itypi, itypj)
28731 !c! location of polar head is computed by taking hydrophobic centre
28732 !c! and moving by a d1 * dc_norm vector
28733 !c! see unres publications for very informative images
28734 chead(k,1) = c(k, i+nres) + d1 * dc_norm(k, i+nres)
28735 chead(k,2) = c(k, j+nres) + d2 * dc_norm(k, j+nres)
28737 !c! Rsc_distance(k) = dabs(c(k, i+nres) - c(k, j+nres))
28738 !c! Rsc(k) = Rsc_distance(k) * Rsc_distance(k)
28739 Rhead_distance(k) = chead(k,2) - chead(k,1)
28741 !c! pitagoras (root of sum of squares)
28743 (Rhead_distance(1)*Rhead_distance(1)) &
28744 + (Rhead_distance(2)*Rhead_distance(2)) &
28745 + (Rhead_distance(3)*Rhead_distance(3)))
28746 !c!-------------------------------------------------------------------
28747 !c! zero everything that should be zero'ed
28760 END SUBROUTINE elgrad_init
28763 SUBROUTINE elgrad_init_cat(eheadtail,Egb,Ecl,Elj,Equad,Epol)
28766 real(kind=8) :: eheadtail,Egb,Ecl,Elj,Equad,Epol,Rb
28770 !c! 1/(Gas Constant * Thermostate temperature) = BetaT
28771 !c! ENABLE THIS LINE WHEN USING CHECKGRAD!!!
28773 !c! BetaT = 1.0d0 / (t_bath * Rb)i
28775 BetaT = 1.0d0 / (298.0d0 * Rb)
28776 !c! Gay-berne var's
28777 sig0ij = sigmacat( itypi,itypj )
28778 chi1 = chi1cat( itypi, itypj )
28781 chip1 = chipp1cat( itypi, itypj )
28784 !c! not used by momo potential, but needed by sc_angular which is shared
28785 !c! by all energy_potential subroutines
28789 dxj = 0.0d0 !dc_norm( 1, nres+j )
28790 dyj = 0.0d0 !dc_norm( 2, nres+j )
28791 dzj = 0.0d0 !dc_norm( 3, nres+j )
28792 !c! distance from center of chain(?) to polar/charged head
28793 d1 = dheadcat(1, 1, itypi, itypj)
28794 d2 = dheadcat(2, 1, itypi, itypj)
28796 a12sq = rborn1cat(itypi,itypj) * rborn2cat(itypi,itypj)
28797 !c! a12sq = a12sq * a12sq
28798 !c! charge of amino acid itypi is...
28799 Qi = icharge(itypi)
28800 Qj = ichargecat(itypj)
28803 chis1 = chis1cat(itypi,itypj)
28806 sig1 = sigmap1cat(itypi,itypj)
28807 sig2 = sigmap2cat(itypi,itypj)
28808 !c! alpha factors from Fcav/Gcav
28809 b1cav = alphasurcat(1,itypi,itypj)
28810 b2cav = alphasurcat(2,itypi,itypj)
28811 b3cav = alphasurcat(3,itypi,itypj)
28812 b4cav = alphasurcat(4,itypi,itypj)
28813 wqd = wquadcat(itypi, itypj)
28815 eps_in = epsintabcat(itypi,itypj)
28816 eps_inout_fac = ( (1.0d0/eps_in) - (1.0d0/eps_out))
28817 !c!-------------------------------------------------------------------
28818 !c! tail location and distance calculations
28821 ctail(k,1)=c(k,i+nres)-dtailcat(1,itypi,itypj)*dc_norm(k,nres+i)
28822 ctail(k,2)=c(k,j)!-dtailcat(2,itypi,itypj)*dc_norm(k,nres+j)
28824 !c! tail distances will be themselves usefull elswhere
28825 !c1 (in Gcav, for example)
28826 Rtail_distance(1) = ctail( 1, 2 ) - ctail( 1,1 )
28827 Rtail_distance(2) = ctail( 2, 2 ) - ctail( 2,1 )
28828 Rtail_distance(3) = ctail( 3, 2 ) - ctail( 3,1 )
28830 (Rtail_distance(1)*Rtail_distance(1)) &
28831 + (Rtail_distance(2)*Rtail_distance(2)) &
28832 + (Rtail_distance(3)*Rtail_distance(3)))
28833 !c!-------------------------------------------------------------------
28834 !c! Calculate location and distance between polar heads
28835 !c! distance between heads
28836 !c! for each one of our three dimensional space...
28837 d1 = dheadcat(1, 1, itypi, itypj)
28838 d2 = dheadcat(2, 1, itypi, itypj)
28841 !c! location of polar head is computed by taking hydrophobic centre
28842 !c! and moving by a d1 * dc_norm vector
28843 !c! see unres publications for very informative images
28844 chead(k,1) = c(k, i+nres) + d1 * dc_norm(k, i+nres)
28845 chead(k,2) = c(k, j)
28847 !c! Rsc_distance(k) = dabs(c(k, i+nres) - c(k, j+nres))
28848 !c! Rsc(k) = Rsc_distance(k) * Rsc_distance(k)
28849 Rhead_distance(k) = chead(k,2) - chead(k,1)
28851 !c! pitagoras (root of sum of squares)
28853 (Rhead_distance(1)*Rhead_distance(1)) &
28854 + (Rhead_distance(2)*Rhead_distance(2)) &
28855 + (Rhead_distance(3)*Rhead_distance(3)))
28856 !c!-------------------------------------------------------------------
28857 !c! zero everything that should be zero'ed
28870 END SUBROUTINE elgrad_init_cat
28872 SUBROUTINE elgrad_init_cat_pep(eheadtail,Egb,Ecl,Elj,Equad,Epol)
28875 real(kind=8) :: eheadtail,Egb,Ecl,Elj,Equad,Epol,Rb
28879 !c! 1/(Gas Constant * Thermostate temperature) = BetaT
28880 !c! ENABLE THIS LINE WHEN USING CHECKGRAD!!!
28882 !c! BetaT = 1.0d0 / (t_bath * Rb)i
28884 BetaT = 1.0d0 / (298.0d0 * Rb)
28885 !c! Gay-berne var's
28886 sig0ij = sigmacat( itypi,itypj )
28887 chi1 = chi1cat( itypi, itypj )
28890 chip1 = chipp1cat( itypi, itypj )
28893 !c! not used by momo potential, but needed by sc_angular which is shared
28894 !c! by all energy_potential subroutines
28898 dxj = 0.0d0 !dc_norm( 1, nres+j )
28899 dyj = 0.0d0 !dc_norm( 2, nres+j )
28900 dzj = 0.0d0 !dc_norm( 3, nres+j )
28901 !c! distance from center of chain(?) to polar/charged head
28902 d1 = dheadcat(1, 1, itypi, itypj)
28903 d2 = dheadcat(2, 1, itypi, itypj)
28905 a12sq = rborn1cat(itypi,itypj) * rborn2cat(itypi,itypj)
28906 !c! a12sq = a12sq * a12sq
28907 !c! charge of amino acid itypi is...
28909 Qj = ichargecat(itypj)
28912 chis1 = chis1cat(itypi,itypj)
28915 sig1 = sigmap1cat(itypi,itypj)
28916 sig2 = sigmap2cat(itypi,itypj)
28917 !c! alpha factors from Fcav/Gcav
28918 b1cav = alphasurcat(1,itypi,itypj)
28919 b2cav = alphasurcat(2,itypi,itypj)
28920 b3cav = alphasurcat(3,itypi,itypj)
28921 b4cav = alphasurcat(4,itypi,itypj)
28922 wqd = wquadcat(itypi, itypj)
28924 eps_in = epsintabcat(itypi,itypj)
28925 eps_inout_fac = ( (1.0d0/eps_in) - (1.0d0/eps_out))
28926 !c!-------------------------------------------------------------------
28927 !c! tail location and distance calculations
28930 ctail(k,1)=(c(k,i)+c(k,i+1))/2.0-dtailcat(1,itypi,itypj)*dc_norm(k,i)
28931 ctail(k,2)=c(k,j)!-dtailcat(2,itypi,itypj)*dc_norm(k,nres+j)
28933 !c! tail distances will be themselves usefull elswhere
28934 !c1 (in Gcav, for example)
28935 Rtail_distance(1) = ctail( 1, 2 ) - ctail( 1,1 )
28936 Rtail_distance(2) = ctail( 2, 2 ) - ctail( 2,1 )
28937 Rtail_distance(3) = ctail( 3, 2 ) - ctail( 3,1 )
28939 (Rtail_distance(1)*Rtail_distance(1)) &
28940 + (Rtail_distance(2)*Rtail_distance(2)) &
28941 + (Rtail_distance(3)*Rtail_distance(3)))
28942 !c!-------------------------------------------------------------------
28943 !c! Calculate location and distance between polar heads
28944 !c! distance between heads
28945 !c! for each one of our three dimensional space...
28946 d1 = dheadcat(1, 1, itypi, itypj)
28947 d2 = dheadcat(2, 1, itypi, itypj)
28950 !c! location of polar head is computed by taking hydrophobic centre
28951 !c! and moving by a d1 * dc_norm vector
28952 !c! see unres publications for very informative images
28953 chead(k,1) = (c(k, i)+c(k,i+1))/2.0 + d1 * dc_norm(k, i)
28954 chead(k,2) = c(k, j)
28956 !c! Rsc_distance(k) = dabs(c(k, i+nres) - c(k, j+nres))
28957 !c! Rsc(k) = Rsc_distance(k) * Rsc_distance(k)
28958 Rhead_distance(k) = chead(k,2) - chead(k,1)
28960 !c! pitagoras (root of sum of squares)
28962 (Rhead_distance(1)*Rhead_distance(1)) &
28963 + (Rhead_distance(2)*Rhead_distance(2)) &
28964 + (Rhead_distance(3)*Rhead_distance(3)))
28965 !c!-------------------------------------------------------------------
28966 !c! zero everything that should be zero'ed
28979 END SUBROUTINE elgrad_init_cat_pep
28981 double precision function tschebyshev(m,n,x,y)
28984 double precision x(n),y,yy(0:maxvar),aux
28985 !c Tschebyshev polynomial. Note that the first term is omitted
28986 !c m=0: the constant term is included
28987 !c m=1: the constant term is not included
28991 yy(i)=2*yy(1)*yy(i-1)-yy(i-2)
28999 end function tschebyshev
29000 !C--------------------------------------------------------------------------
29001 double precision function gradtschebyshev(m,n,x,y)
29004 double precision x(n+1),y,yy(0:maxvar),aux
29005 !c Tschebyshev polynomial. Note that the first term is omitted
29006 !c m=0: the constant term is included
29007 !c m=1: the constant term is not included
29011 yy(i)=2*y*yy(i-1)-yy(i-2)
29015 aux=aux+x(i+1)*yy(i)*(i+1)
29016 !C print *, x(i+1),yy(i),i
29018 gradtschebyshev=aux
29020 end function gradtschebyshev
29021 !!!!!!!!!--------------------------------------------------------------
29022 subroutine lipid_bond(elipbond)
29023 real(kind=8) :: elipbond,fac,dist_sub,sumdist
29024 real(kind=8), dimension(3):: dist
29025 integer(kind=8) :: i,j,k,ibra,ityp,jtyp,ityp1
29027 ! print *,"before",ilipbond_start,ilipbond_end
29028 do i=ilipbond_start,ilipbond_end
29029 ! print *,i,i+1,"i,i+1"
29032 ! print *,ityp,ityp1,"itype"
29034 if (ityp.eq.12) ibra=i
29035 if ((ityp.eq.ntyp1_molec(4)).or.(ityp1.ge.ntyp1_molec(4)-1)) cycle
29036 if (ityp.eq.(ntyp1_molec(4)-1)) then
29037 !cofniecie do ostatnie GL1
29045 dist(k)=c(k,j)-c(k,i+1)
29049 sumdist=sumdist+dist(k)**2
29051 dist_sub=sqrt(sumdist)
29052 ! print *,"before",i,j,ityp1,ityp,jtyp
29053 elipbond=elipbond+kbondlip*((dist_sub-lip_bond(jtyp,ityp1))**2)
29054 fac=kbondlip*(dist_sub-lip_bond(jtyp,ityp1))
29056 gradlipbond(k,i+1)= gradlipbond(k,i+1)-fac*dist(k)/dist_sub
29057 gradlipbond(k,j)=gradlipbond(k,j)+fac*dist(k)/dist_sub
29059 if (energy_dec) write(iout,*) "lipbond",j,i+1,dist_sub,lip_bond(jtyp,ityp1),kbondlip,fac
29061 elipbond=elipbond*0.5d0
29063 end subroutine lipid_bond
29064 !---------------------------------------------------------------------------------------
29065 subroutine lipid_angle(elipang)
29066 real(kind=8) :: elipang,alfa,xa(3),xb(3),alfaact,alfa0,force,fac,&
29067 scalara,vnorm,wnorm,sss,sss_grad,eangle
29068 integer :: i,j,k,l,m,ibra,ityp1,itypm1,itypp1
29070 ! print *,"ilipang_start,ilipang_end",ilipang_start,ilipang_end
29071 do i=ilipang_start,ilipang_end
29074 ! the loop is centered on the central residue
29075 itypm1=itype(i-1,4)
29077 itypp1=itype(i+1,4)
29078 ! print *,i,i,j,"processor",fg_rank
29082 if (ityp1.eq.12) ibra=i
29083 if ((itypm1.eq.ntyp1_molec(4)).or.(ityp1.eq.ntyp1_molec(4))&
29084 .or.(itypp1.eq.ntyp1_molec(4))) cycle !cycle if any of the angles is dummy
29085 if ((itypm1.eq.ntyp1_molec(4)-1).or.(itypp1.eq.ntyp1_molec(4)-1)) cycle
29086 ! branching is only to one angle
29087 if (ityp1.eq.ntyp1_molec(4)-1) then
29094 xa(m)=c(m,j)-c(m,k)
29095 xb(m)=c(m,l)-c(m,k)
29098 vnorm=dsqrt(xa(1)*xa(1)+xa(2)*xa(2)+xa(3)*xa(3))
29099 wnorm=dsqrt(xb(1)*xb(1)+xb(2)*xb(2)+xb(3)*xb(3))
29100 scalara=(xa(1)*xb(1)+xa(2)*xb(2)+xa(3)*xb(3))/(vnorm*wnorm)
29101 ! if (((scalar*scalar).gt.0.99999999d0).and.(alfa0.eq.180.0d0)) cycle
29104 ! sss=sscale_martini_angle(alfaact)
29105 ! sss_grad=sscale_grad_martini_angle(alfaact)
29106 ! print *,sss_grad,"sss_grad",sss
29107 ! if (sss.le.0.0) cycle
29108 ! if (sss_grad.ne.0.0) print *,sss_grad,"sss_grad"
29109 force=lip_angle_force(itypm1,ityp1,itypp1)
29110 alfa0=lip_angle_angle(itypm1,ityp1,itypp1)
29111 eangle=force*(alfaact-dcos(alfa0))*(alfaact-dcos(alfa0))*0.5d0
29112 elipang=elipang+eangle!*(1001.0d0-1000.0d0*sss)
29113 fac=force*(alfaact-dcos(alfa0))!*(1001.0d0-1000.0d0*sss)-sss_grad*eangle*1000.0d0
29115 gradlipang(m,j)=gradlipang(m,j)+(fac &!/dsqrt(1.0d0-scalar*scalar)&
29116 *(xb(m)-scalara*wnorm*xa(m)/vnorm)&
29117 /(vnorm*wnorm))!-sss_grad*eangle*xa(m)/vnorm
29119 gradlipang(m,l)=gradlipang(m,l)+(fac & !/dsqrt(1.0d0-scalar*scalar)&
29120 *(xa(m)-scalara*vnorm*xb(m)/wnorm)&
29121 /(vnorm*wnorm))!+sss_grad*eangle*xb(m)/wnorm
29123 gradlipang(m,k)=gradlipang(m,k)-(fac)& !/dsqrt(1.0d0-scalar*scalar)&
29124 *(xb(m)-scalara*wnorm*xa(m)/vnorm)&
29125 /((vnorm*wnorm))-(fac & !/dsqrt(1.0d0-scalar*scalar)&
29126 *(xa(m)-scalara*vnorm*xb(m)/wnorm)&
29127 /(vnorm*wnorm))!-sss_grad*eangle*xa(m)/vnorm&
29128 !-sss_grad*eangle*xb(m)/wnorm
29131 ! *(xb(m)*vnorm*wnorm)&
29133 !-xa(m)*xa(m)*xb(m)*wnorm/vnorm)&
29135 if (energy_dec) write(iout,*) "elipang",j,k,l,force,alfa0,alfaact,elipang
29138 end subroutine lipid_angle
29139 !--------------------------------------------------------------------
29140 subroutine lipid_lj(eliplj)
29141 real(kind=8) :: eliplj,fac,sumdist,dist_sub,LJ1,LJ2,LJ,&
29142 xj,yj,zj,xi,yi,zi,sss,sss_grad
29143 real(kind=8), dimension(3):: dist
29144 integer :: i,j,k,inum,ityp,jtyp
29146 do inum=iliplj_start,iliplj_end
29147 i=mlipljlisti(inum)
29148 j=mlipljlistj(inum)
29149 ! print *,inum,i,j,"processor",fg_rank
29155 call to_box(xi,yi,zi)
29159 call to_box(xj,yj,zj)
29160 xj=boxshift(xj-xi,boxxsize)
29161 yj=boxshift(yj-yi,boxysize)
29162 zj=boxshift(zj-zi,boxzsize)
29167 ! dist(k)=c(k,j)-c(k,i)
29171 sumdist=sumdist+dist(k)**2
29174 dist_sub=sqrt(sumdist)
29175 sss=sscale_martini(dist_sub)
29176 if (energy_dec) write(iout,*) "LJ LIP bef",i,j,ityp,jtyp,dist_sub
29177 if (sss.le.0.0) cycle
29178 sss_grad=sscale_grad_martini(dist_sub)
29179 LJ1 = (lip_sig(ityp,jtyp)/dist_sub)**6
29182 LJ = 4.0d0*lip_eps(ityp,jtyp)*LJ
29183 eliplj = eliplj + LJ*sss
29184 fac=4.0d0*lip_eps(ityp,jtyp)*(-6.0d0*LJ1/dist_sub+12.0d0*LJ2/dist_sub)
29186 gradliplj(k,i)=gradliplj(k,i)+fac*dist(k)/dist_sub*sss-sss_grad*LJ*dist(k)/dist_sub
29187 gradliplj(k,j)=gradliplj(k,j)-fac*dist(k)/dist_sub*sss+sss_grad*LJ*dist(k)/dist_sub
29189 if (energy_dec) write(iout,'(a7,4i5,2f8.3)') "LJ LIP",i,j,ityp,jtyp,LJ,dist_sub
29192 end subroutine lipid_lj
29193 !--------------------------------------------------------------------------------------
29194 subroutine lipid_elec(elipelec)
29195 real(kind=8) :: elipelec,fac,sumdist,dist_sub,xj,yj,zj,xi,yi,zi,EQ,&
29197 real(kind=8), dimension(3):: dist
29198 integer :: i,j,k,inum,ityp,jtyp
29200 ! print *,"processor",fg_rank,ilip_elec_start,ilipelec_end
29201 do inum=ilip_elec_start,ilipelec_end
29202 i=mlipeleclisti(inum)
29203 j=mlipeleclistj(inum)
29204 ! print *,inum,i,j,"processor",fg_rank
29210 call to_box(xi,yi,zi)
29214 call to_box(xj,yj,zj)
29215 xj=boxshift(xj-xi,boxxsize)
29216 yj=boxshift(yj-yi,boxysize)
29217 zj=boxshift(zj-zi,boxzsize)
29222 ! dist(k)=c(k,j)-c(k,i)
29226 sumdist=sumdist+dist(k)**2
29228 dist_sub=sqrt(sumdist)
29229 sss=sscale_martini(dist_sub)
29230 ! print *,sss,dist_sub
29231 if (energy_dec) write(iout,*) "EQ LIP",sss,dist_sub,i,j
29232 if (sss.le.0.0) cycle
29233 sss_grad=sscale_grad_martini(dist_sub)
29234 ! print *,"sss",sss,sss_grad
29235 EQ=k_coulomb_lip*(ichargelipid(ityp)*ichargelipid(jtyp)/dist_sub)
29236 elipelec=elipelec+EQ*sss
29237 fac=k_coulomb_lip*(ichargelipid(ityp)*ichargelipid(jtyp)/sumdist)*sss
29239 gradlipelec(k,i)=gradlipelec(k,i)+fac*dist(k)/dist_sub&
29240 -sss_grad*EQ*dist(k)/dist_sub
29241 gradlipelec(k,j)=gradlipelec(k,j)-fac*dist(k)/dist_sub&
29242 +sss_grad*EQ*dist(k)/dist_sub
29244 if (energy_dec) write(iout,*) "EQ LIP",i,j,ityp,jtyp,EQ,dist_sub,elipelec
29247 end subroutine lipid_elec
29248 !-------------------------------------------------------------------------
29249 subroutine make_SCSC_inter_list
29251 real(kind=8) :: xi,yi,zi,xj,yj,zj,xj_safe,yj_safe,zj_safe,xj_temp,yj_temp,zj_temp
29252 real(kind=8) :: dist_init, dist_temp,r_buff_list
29253 integer:: contlisti(250*nres),contlistj(250*nres)
29254 ! integer :: newcontlisti(200*nres),newcontlistj(200*nres)
29255 integer i,j,itypi,itypj,subchap,xshift,yshift,zshift,iint,ilist_sc,g_ilist_sc
29256 integer displ(0:nprocs),i_ilist_sc(0:nprocs),ierr
29257 ! print *,"START make_SC"
29260 do i=iatsc_s,iatsc_e
29261 itypi=iabs(itype(i,1))
29262 if (itypi.eq.ntyp1) cycle
29266 call to_box(xi,yi,zi)
29267 do iint=1,nint_gr(i)
29268 ! print *,"is it wrong", iint,i
29269 do j=istart(i,iint),iend(i,iint)
29270 itypj=iabs(itype(j,1))
29271 if (energy_dec) write(iout,*) "LISTA ZAKRES",istart(i,iint),iend(i,iint),iatsc_s,iatsc_e
29272 if (itypj.eq.ntyp1) cycle
29276 call to_box(xj,yj,zj)
29277 ! call lipid_layer(xj,yj,zj,sslipj,ssgradlipj)
29278 ! faclipij2=(sslipi+sslipj)/2.0d0*lipscale**2+1.0d0
29279 xj=boxshift(xj-xi,boxxsize)
29280 yj=boxshift(yj-yi,boxysize)
29281 zj=boxshift(zj-zi,boxzsize)
29282 dist_init=xj**2+yj**2+zj**2
29283 ! dist_init=(xj-xi)**2+(yj-yi)**2+(zj-zi)**2
29284 ! r_buff_list is a read value for a buffer
29285 if (sqrt(dist_init).le.(r_cut_ele+r_buff_list)) then
29286 ! Here the list is created
29287 ilist_sc=ilist_sc+1
29288 ! this can be substituted by cantor and anti-cantor
29289 contlisti(ilist_sc)=i
29290 contlistj(ilist_sc)=j
29296 ! call MPI_Reduce(ilist_sc,g_ilist_sc,1,&
29297 ! MPI_INTEGER,MPI_SUM,king,FG_COMM,IERR)
29298 ! call MPI_Gather(newnss,1,MPI_INTEGER,&
29299 ! i_newnss,1,MPI_INTEGER,king,FG_COMM,IERR)
29301 write (iout,*) "before MPIREDUCE",ilist_sc
29303 write (iout,*) i,contlisti(i),contlistj(i)
29306 if (nfgtasks.gt.1)then
29308 call MPI_Reduce(ilist_sc,g_ilist_sc,1,&
29309 MPI_INTEGER,MPI_SUM,king,FG_COMM,IERR)
29310 ! write(iout,*) "before bcast",g_ilist_sc
29311 call MPI_Gather(ilist_sc,1,MPI_INTEGER,&
29312 i_ilist_sc,1,MPI_INTEGER,king,FG_COMM,IERR)
29314 do i=1,nfgtasks-1,1
29315 displ(i)=i_ilist_sc(i-1)+displ(i-1)
29317 ! write(iout,*) "before gather",displ(0),displ(1)
29318 call MPI_Gatherv(contlisti,ilist_sc,MPI_INTEGER,&
29319 newcontlisti,i_ilist_sc,displ,MPI_INTEGER,&
29321 call MPI_Gatherv(contlistj,ilist_sc,MPI_INTEGER,&
29322 newcontlistj,i_ilist_sc,displ,MPI_INTEGER,&
29324 call MPI_Bcast(g_ilist_sc,1,MPI_INT,king,FG_COMM,IERR)
29325 ! write(iout,*) "before bcast",g_ilist_sc
29326 ! call MPI_Bcast(g_ilist_sc,1,MPI_INT,king,FG_COMM)
29327 call MPI_Bcast(newcontlisti,g_ilist_sc,MPI_INT,king,FG_COMM,IERR)
29328 call MPI_Bcast(newcontlistj,g_ilist_sc,MPI_INT,king,FG_COMM,IERR)
29330 ! call MPI_Bcast(g_ilist_sc,1,MPI_INT,king,FG_COMM)
29333 g_ilist_sc=ilist_sc
29336 newcontlisti(i)=contlisti(i)
29337 newcontlistj(i)=contlistj(i)
29342 write (iout,*) "after MPIREDUCE",g_ilist_sc
29344 write (iout,*) i,newcontlisti(i),newcontlistj(i)
29347 call int_bounds(g_ilist_sc,g_listscsc_start,g_listscsc_end)
29349 end subroutine make_SCSC_inter_list
29350 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
29352 subroutine make_SCp_inter_list
29353 use MD_data, only: itime_mat
29356 real(kind=8) :: xi,yi,zi,xj,yj,zj,xj_safe,yj_safe,zj_safe,xj_temp,yj_temp,zj_temp
29357 real(kind=8) :: dist_init, dist_temp,r_buff_list
29358 integer:: contlistscpi(350*nres),contlistscpj(350*nres)
29359 ! integer :: newcontlistscpi(200*nres),newcontlistscpj(200*nres)
29360 integer i,j,itypi,itypj,subchap,xshift,yshift,zshift,iint,ilist_scp,g_ilist_scp
29361 integer displ(0:nprocs),i_ilist_scp(0:nprocs),ierr
29362 ! print *,"START make_SC"
29365 do i=iatscp_s,iatscp_e
29366 if (itype(i,1).eq.ntyp1 .or. itype(i+1,1).eq.ntyp1) cycle
29367 xi=0.5D0*(c(1,i)+c(1,i+1))
29368 yi=0.5D0*(c(2,i)+c(2,i+1))
29369 zi=0.5D0*(c(3,i)+c(3,i+1))
29370 call to_box(xi,yi,zi)
29371 do iint=1,nscp_gr(i)
29373 do j=iscpstart(i,iint),iscpend(i,iint)
29374 itypj=iabs(itype(j,1))
29375 if (itypj.eq.ntyp1) cycle
29376 ! Uncomment following three lines for SC-p interactions
29377 ! xj=c(1,nres+j)-xi
29378 ! yj=c(2,nres+j)-yi
29379 ! zj=c(3,nres+j)-zi
29380 ! Uncomment following three lines for Ca-p interactions
29387 call to_box(xj,yj,zj)
29388 xj=boxshift(xj-xi,boxxsize)
29389 yj=boxshift(yj-yi,boxysize)
29390 zj=boxshift(zj-zi,boxzsize)
29391 dist_init=xj**2+yj**2+zj**2
29393 ! r_buff_list is a read value for a buffer
29394 if ((sqrt(dist_init).le.(r_cut_ele)).and.(ifirstrun.eq.0)) then
29395 ! Here the list is created
29396 ilist_scp_first=ilist_scp_first+1
29397 ! this can be substituted by cantor and anti-cantor
29398 contlistscpi_f(ilist_scp_first)=i
29399 contlistscpj_f(ilist_scp_first)=j
29402 ! r_buff_list is a read value for a buffer
29403 if (sqrt(dist_init).le.(r_cut_ele+r_buff_list)) then
29404 ! Here the list is created
29405 ilist_scp=ilist_scp+1
29406 ! this can be substituted by cantor and anti-cantor
29407 contlistscpi(ilist_scp)=i
29408 contlistscpj(ilist_scp)=j
29414 write (iout,*) "before MPIREDUCE",ilist_scp
29416 write (iout,*) i,contlistscpi(i),contlistscpj(i)
29419 if (nfgtasks.gt.1)then
29421 call MPI_Reduce(ilist_scp,g_ilist_scp,1,&
29422 MPI_INTEGER,MPI_SUM,king,FG_COMM,IERR)
29423 ! write(iout,*) "before bcast",g_ilist_sc
29424 call MPI_Gather(ilist_scp,1,MPI_INTEGER,&
29425 i_ilist_scp,1,MPI_INTEGER,king,FG_COMM,IERR)
29427 do i=1,nfgtasks-1,1
29428 displ(i)=i_ilist_scp(i-1)+displ(i-1)
29430 ! write(iout,*) "before gather",displ(0),displ(1)
29431 call MPI_Gatherv(contlistscpi,ilist_scp,MPI_INTEGER,&
29432 newcontlistscpi,i_ilist_scp,displ,MPI_INTEGER,&
29434 call MPI_Gatherv(contlistscpj,ilist_scp,MPI_INTEGER,&
29435 newcontlistscpj,i_ilist_scp,displ,MPI_INTEGER,&
29437 call MPI_Bcast(g_ilist_scp,1,MPI_INT,king,FG_COMM,IERR)
29438 ! write(iout,*) "before bcast",g_ilist_sc
29439 ! call MPI_Bcast(g_ilist_sc,1,MPI_INT,king,FG_COMM)
29440 call MPI_Bcast(newcontlistscpi,g_ilist_scp,MPI_INT,king,FG_COMM,IERR)
29441 call MPI_Bcast(newcontlistscpj,g_ilist_scp,MPI_INT,king,FG_COMM,IERR)
29443 ! call MPI_Bcast(g_ilist_sc,1,MPI_INT,king,FG_COMM)
29446 g_ilist_scp=ilist_scp
29449 newcontlistscpi(i)=contlistscpi(i)
29450 newcontlistscpj(i)=contlistscpj(i)
29455 write (iout,*) "after MPIREDUCE",g_ilist_scp
29457 write (iout,*) i,newcontlistscpi(i),newcontlistscpj(i)
29460 ! if (ifirstrun.eq.0) ifirstrun=1
29461 ! do i=1,ilist_scp_first
29462 ! do j=1,g_ilist_scp
29463 ! if ((newcontlistscpi(j).eq.contlistscpi_f(i)).and.&
29464 ! (newcontlistscpj(j).eq.contlistscpj_f(i))) go to 126
29466 ! print *,itime_mat,"ERROR matrix needs updating"
29467 ! print *,contlistscpi_f(i),contlistscpj_f(i)
29471 call int_bounds(g_ilist_scp,g_listscp_start,g_listscp_end)
29474 end subroutine make_SCp_inter_list
29476 !-----------------------------------------------------------------------------
29477 !-----------------------------------------------------------------------------
29480 subroutine make_pp_inter_list
29482 real(kind=8) :: xi,yi,zi,xj,yj,zj,xj_safe,yj_safe,zj_safe,xj_temp,yj_temp,zj_temp
29483 real(kind=8) :: xmedj,ymedj,zmedj,sslipi,ssgradlipi,faclipij2,sslipj,ssgradlipj
29484 real(kind=8) :: dist_init, dist_temp,r_buff_list,dxi,dyi,dzi,xmedi,ymedi,zmedi
29485 real(kind=8) :: dx_normi,dy_normi,dz_normi,dxj,dyj,dzj,dx_normj,dy_normj,dz_normj
29486 integer:: contlistppi(250*nres),contlistppj(250*nres)
29487 ! integer :: newcontlistppi(200*nres),newcontlistppj(200*nres)
29488 integer i,j,itypi,itypj,subchap,xshift,yshift,zshift,iint,ilist_pp,g_ilist_pp
29489 integer displ(0:nprocs),i_ilist_pp(0:nprocs),ierr
29490 ! write(iout,*),"START make_pp",iatel_s,iatel_e,r_cut_ele+r_buff_list
29493 do i=iatel_s,iatel_e
29494 if (itype(i,1).eq.ntyp1 .or. itype(i+1,1).eq.ntyp1) cycle
29498 dx_normi=dc_norm(1,i)
29499 dy_normi=dc_norm(2,i)
29500 dz_normi=dc_norm(3,i)
29501 xmedi=c(1,i)+0.5d0*dxi
29502 ymedi=c(2,i)+0.5d0*dyi
29503 zmedi=c(3,i)+0.5d0*dzi
29505 call to_box(xmedi,ymedi,zmedi)
29506 call lipid_layer(xmedi,ymedi,zmedi,sslipi,ssgradlipi)
29507 ! write (iout,*) i,j,itype(i,1),itype(j,1)
29508 ! if (itype(j,1).eq.ntyp1.or. itype(j+1,1).eq.ntyp1) cycle
29511 do j=ielstart(i),ielend(i)
29512 ! write (iout,*) i,j,itype(i,1),itype(j,1)
29513 if (itype(j,1).eq.ntyp1.or. itype(j+1,1).eq.ntyp1) cycle
29517 dx_normj=dc_norm(1,j)
29518 dy_normj=dc_norm(2,j)
29519 dz_normj=dc_norm(3,j)
29520 ! xj=c(1,j)+0.5D0*dxj-xmedi
29521 ! yj=c(2,j)+0.5D0*dyj-ymedi
29522 ! zj=c(3,j)+0.5D0*dzj-zmedi
29523 xj=c(1,j)+0.5D0*dxj
29524 yj=c(2,j)+0.5D0*dyj
29525 zj=c(3,j)+0.5D0*dzj
29526 call to_box(xj,yj,zj)
29527 ! call lipid_layer(xj,yj,zj,sslipj,ssgradlipj)
29528 ! faclipij2=(sslipi+sslipj)/2.0d0*lipscale**2+1.0d0
29529 xj=boxshift(xj-xmedi,boxxsize)
29530 yj=boxshift(yj-ymedi,boxysize)
29531 zj=boxshift(zj-zmedi,boxzsize)
29532 dist_init=xj**2+yj**2+zj**2
29533 if (sqrt(dist_init).le.(r_cut_ele+r_buff_list)) then
29534 ! Here the list is created
29535 ilist_pp=ilist_pp+1
29536 ! this can be substituted by cantor and anti-cantor
29537 contlistppi(ilist_pp)=i
29538 contlistppj(ilist_pp)=j
29544 write (iout,*) "before MPIREDUCE",ilist_pp
29546 write (iout,*) i,contlistppi(i),contlistppj(i)
29549 if (nfgtasks.gt.1)then
29551 call MPI_Reduce(ilist_pp,g_ilist_pp,1,&
29552 MPI_INTEGER,MPI_SUM,king,FG_COMM,IERR)
29553 ! write(iout,*) "before bcast",g_ilist_sc
29554 call MPI_Gather(ilist_pp,1,MPI_INTEGER,&
29555 i_ilist_pp,1,MPI_INTEGER,king,FG_COMM,IERR)
29557 do i=1,nfgtasks-1,1
29558 displ(i)=i_ilist_pp(i-1)+displ(i-1)
29560 ! write(iout,*) "before gather",displ(0),displ(1)
29561 call MPI_Gatherv(contlistppi,ilist_pp,MPI_INTEGER,&
29562 newcontlistppi,i_ilist_pp,displ,MPI_INTEGER,&
29564 call MPI_Gatherv(contlistppj,ilist_pp,MPI_INTEGER,&
29565 newcontlistppj,i_ilist_pp,displ,MPI_INTEGER,&
29567 call MPI_Bcast(g_ilist_pp,1,MPI_INT,king,FG_COMM,IERR)
29568 ! write(iout,*) "before bcast",g_ilist_sc
29569 ! call MPI_Bcast(g_ilist_sc,1,MPI_INT,king,FG_COMM)
29570 call MPI_Bcast(newcontlistppi,g_ilist_pp,MPI_INT,king,FG_COMM,IERR)
29571 call MPI_Bcast(newcontlistppj,g_ilist_pp,MPI_INT,king,FG_COMM,IERR)
29573 ! call MPI_Bcast(g_ilist_sc,1,MPI_INT,king,FG_COMM)
29576 g_ilist_pp=ilist_pp
29579 newcontlistppi(i)=contlistppi(i)
29580 newcontlistppj(i)=contlistppj(i)
29583 call int_bounds(g_ilist_pp,g_listpp_start,g_listpp_end)
29585 write (iout,*) "after MPIREDUCE",g_ilist_pp
29587 write (iout,*) i,newcontlistppi(i),newcontlistppj(i)
29591 end subroutine make_pp_inter_list
29592 !---------------------------------------------------------------------------
29593 subroutine make_cat_pep_list
29595 real(kind=8) :: xi,yi,zi,xj,yj,zj,xj_safe,yj_safe,zj_safe,xj_temp,yj_temp,zj_temp
29596 real(kind=8) :: xmedj,ymedj,zmedj,sslipi,ssgradlipi,faclipij2,sslipj,ssgradlipj
29597 real(kind=8) :: dist_init, dist_temp,r_buff_list,dxi,dyi,dzi,xmedi,ymedi,zmedi
29598 real(kind=8) :: dx_normi,dy_normi,dz_normi,dxj,dyj,dzj,dx_normj,dy_normj,dz_normj
29599 real(kind=8) :: xja,yja,zja
29600 integer:: contlistcatpnormi(250*nres),contlistcatpnormj(250*nres)
29601 integer:: contlistcatscnormi(250*nres),contlistcatscnormj(250*nres)
29602 integer:: contlistcatptrani(250*nres),contlistcatptranj(250*nres)
29603 integer:: contlistcatsctrani(250*nres),contlistcatsctranj(250*nres)
29604 integer:: contlistcatscangi(250*nres),contlistcatscangj(250*nres)
29605 integer:: contlistcatscangfi(250*nres),contlistcatscangfj(250*nres),&
29606 contlistcatscangfk(250*nres)
29607 integer:: contlistcatscangti(250*nres),contlistcatscangtj(250*nres)
29608 integer:: contlistcatscangtk(250*nres),contlistcatscangtl(250*nres)
29611 ! integer :: newcontlistppi(200*nres),newcontlistppj(200*nres)
29612 integer i,j,itypi,itypj,subchap,xshift,yshift,zshift,iint,ilist_catscnorm,&
29613 ilist_catsctran,ilist_catpnorm,ilist_catptran,itmp,ilist_catscang,&
29614 ilist_catscangf,ilist_catscangt,k
29615 integer displ(0:nprocs),i_ilist_catscnorm(0:nprocs),ierr,&
29616 i_ilist_catpnorm(0:nprocs),i_ilist_catsctran(0:nprocs),&
29617 i_ilist_catptran(0:nprocs),i_ilist_catscang(0:nprocs),&
29618 i_ilist_catscangf(0:nprocs),i_ilist_catscangt(0:nprocs)
29619 ! write(iout,*),"START make_pp",iatel_s,iatel_e,r_cut_ele+r_buff_list
29630 itmp=itmp+nres_molec(i)
29633 ! do i=1,nres_molec(1)-1 ! loop over all peptide groups needs parralelization
29634 do i=ibond_start,ibond_end
29636 ! print *,"I am in EVDW",i
29637 itypi=iabs(itype(i,1))
29639 ! if (i.ne.47) cycle
29640 if ((itypi.eq.ntyp1).or.(itypi.eq.10)) cycle
29641 ! itypi1=iabs(itype(i+1,1))
29645 call to_box(xi,yi,zi)
29646 dxi=dc_norm(1,nres+i)
29647 dyi=dc_norm(2,nres+i)
29648 dzi=dc_norm(3,nres+i)
29649 xmedi=c(1,i)+0.5d0*dxi
29650 ymedi=c(2,i)+0.5d0*dyi
29651 zmedi=c(3,i)+0.5d0*dzi
29652 call to_box(xmedi,ymedi,zmedi)
29654 ! dsci_inv=vbld_inv(i+nres)
29655 do j=itmp+1,itmp+nres_molec(5)
29659 dx_normj=dc_norm(1,j)
29660 dy_normj=dc_norm(2,j)
29661 dz_normj=dc_norm(3,j)
29665 call to_box(xj,yj,zj)
29666 ! call lipid_layer(xj,yj,zj,sslipj,ssgradlipj)
29667 ! faclipij2=(sslipi+sslipj)/2.0d0*lipscale**2+1.0d0
29668 xja=boxshift(xj-xmedi,boxxsize)
29669 yja=boxshift(yj-ymedi,boxysize)
29670 zja=boxshift(zj-zmedi,boxzsize)
29671 dist_init=xja**2+yja**2+zja**2
29672 if (sqrt(dist_init).le.(r_cut_ele+r_buff_list)) then
29673 ! Here the list is created
29674 if (itype(j,5).le.5) then
29675 ilist_catpnorm=ilist_catpnorm+1
29676 ! this can be substituted by cantor and anti-cantor
29677 contlistcatpnormi(ilist_catpnorm)=i
29678 contlistcatpnormj(ilist_catpnorm)=j
29680 ilist_catptran=ilist_catptran+1
29681 ! this can be substituted by cantor and anti-cantor
29682 contlistcatptrani(ilist_catptran)=i
29683 contlistcatptranj(ilist_catptran)=j
29686 xja=boxshift(xj-xi,boxxsize)
29687 yja=boxshift(yj-yi,boxysize)
29688 zja=boxshift(zj-zi,boxzsize)
29689 dist_init=xja**2+yja**2+zja**2
29690 if (sqrt(dist_init).le.(r_cut_ele+r_buff_list)) then
29691 ! Here the list is created
29692 if (itype(j,5).le.5) then
29693 ilist_catscnorm=ilist_catscnorm+1
29694 ! this can be substituted by cantor and anti-cantor
29695 contlistcatscnormi(ilist_catscnorm)=i
29696 contlistcatscnormj(ilist_catscnorm)=j
29698 ilist_catsctran=ilist_catsctran+1
29699 ! this can be substituted by cantor and anti-cantor
29700 contlistcatsctrani(ilist_catsctran)=i
29701 contlistcatsctranj(ilist_catsctran)=j
29702 ! print *,"KUR**",i,j,itype(i,1)
29703 if (((itype(i,1).eq.1).or.(itype(i,1).eq.15).or.&
29704 (itype(i,1).eq.16).or.(itype(i,1).eq.17)).and.&
29705 ((sqrt(dist_init).le.(r_cut_ang+r_buff_list)))) then
29706 ! print *,"KUR**2",i,j,itype(i,1),ilist_catscang+1
29708 ilist_catscang=ilist_catscang+1
29709 contlistcatscangi(ilist_catscang)=i
29710 contlistcatscangj(ilist_catscang)=j
29719 write (iout,*) "before MPIREDUCE",ilist_catsctran,ilist_catptran,&
29720 ilist_catscnorm,ilist_catpnorm,ilist_catscang
29722 do i=1,ilist_catsctran
29723 write (iout,*) i,contlistcatsctrani(i),contlistcatsctranj(i)
29725 do i=1,ilist_catptran
29726 write (iout,*) i,contlistcatptrani(i),contlistcatsctranj(i)
29728 do i=1,ilist_catscnorm
29729 write (iout,*) i,contlistcatscnormi(i),contlistcatsctranj(i)
29731 do i=1,ilist_catpnorm
29732 write (iout,*) i,contlistcatpnormi(i),contlistcatsctranj(i)
29734 do i=1,ilist_catscang
29735 write (iout,*) i,contlistcatscangi(i),contlistcatscangi(i)
29740 if (nfgtasks.gt.1)then
29742 call MPI_Reduce(ilist_catsctran,g_ilist_catsctran,1,&
29743 MPI_INTEGER,MPI_SUM,king,FG_COMM,IERR)
29744 ! write(iout,*) "before bcast",g_ilist_sc
29745 call MPI_Gather(ilist_catsctran,1,MPI_INTEGER,&
29746 i_ilist_catsctran,1,MPI_INTEGER,king,FG_COMM,IERR)
29748 do i=1,nfgtasks-1,1
29749 displ(i)=i_ilist_catsctran(i-1)+displ(i-1)
29751 ! write(iout,*) "before gather",displ(0),displ(1)
29752 call MPI_Gatherv(contlistcatsctrani,ilist_catsctran,MPI_INTEGER,&
29753 newcontlistcatsctrani,i_ilist_catsctran,displ,MPI_INTEGER,&
29755 call MPI_Gatherv(contlistcatsctranj,ilist_catsctran,MPI_INTEGER,&
29756 newcontlistcatsctranj,i_ilist_catsctran,displ,MPI_INTEGER,&
29758 call MPI_Bcast(g_ilist_catsctran,1,MPI_INT,king,FG_COMM,IERR)
29759 ! write(iout,*) "before bcast",g_ilist_sc
29760 ! call MPI_Bcast(g_ilist_sc,1,MPI_INT,king,FG_COMM)
29761 call MPI_Bcast(newcontlistcatsctrani,g_ilist_catsctran,MPI_INT,king,FG_COMM,IERR)
29762 call MPI_Bcast(newcontlistcatsctranj,g_ilist_catsctran,MPI_INT,king,FG_COMM,IERR)
29765 call MPI_Reduce(ilist_catptran,g_ilist_catptran,1,&
29766 MPI_INTEGER,MPI_SUM,king,FG_COMM,IERR)
29767 ! write(iout,*) "before bcast",g_ilist_sc
29768 call MPI_Gather(ilist_catptran,1,MPI_INTEGER,&
29769 i_ilist_catptran,1,MPI_INTEGER,king,FG_COMM,IERR)
29771 do i=1,nfgtasks-1,1
29772 displ(i)=i_ilist_catptran(i-1)+displ(i-1)
29774 ! write(iout,*) "before gather",displ(0),displ(1)
29775 call MPI_Gatherv(contlistcatptrani,ilist_catptran,MPI_INTEGER,&
29776 newcontlistcatptrani,i_ilist_catptran,displ,MPI_INTEGER,&
29778 call MPI_Gatherv(contlistcatptranj,ilist_catptran,MPI_INTEGER,&
29779 newcontlistcatptranj,i_ilist_catptran,displ,MPI_INTEGER,&
29781 call MPI_Bcast(g_ilist_catptran,1,MPI_INT,king,FG_COMM,IERR)
29782 ! write(iout,*) "before bcast",g_ilist_sc
29783 ! call MPI_Bcast(g_ilist_sc,1,MPI_INT,king,FG_COMM)
29784 call MPI_Bcast(newcontlistcatptrani,g_ilist_catptran,MPI_INT,king,FG_COMM,IERR)
29785 call MPI_Bcast(newcontlistcatptranj,g_ilist_catptran,MPI_INT,king,FG_COMM,IERR)
29787 ! call MPI_Bcast(g_ilist_sc,1,MPI_INT,king,FG_COMM)
29789 call MPI_Reduce(ilist_catscnorm,g_ilist_catscnorm,1,&
29790 MPI_INTEGER,MPI_SUM,king,FG_COMM,IERR)
29791 ! write(iout,*) "before bcast",g_ilist_sc
29792 call MPI_Gather(ilist_catscnorm,1,MPI_INTEGER,&
29793 i_ilist_catscnorm,1,MPI_INTEGER,king,FG_COMM,IERR)
29795 do i=1,nfgtasks-1,1
29796 displ(i)=i_ilist_catscnorm(i-1)+displ(i-1)
29798 ! write(iout,*) "before gather",displ(0),displ(1)
29799 call MPI_Gatherv(contlistcatscnormi,ilist_catscnorm,MPI_INTEGER,&
29800 newcontlistcatscnormi,i_ilist_catscnorm,displ,MPI_INTEGER,&
29802 call MPI_Gatherv(contlistcatscnormj,ilist_catscnorm,MPI_INTEGER,&
29803 newcontlistcatscnormj,i_ilist_catscnorm,displ,MPI_INTEGER,&
29805 call MPI_Bcast(g_ilist_catscnorm,1,MPI_INT,king,FG_COMM,IERR)
29806 ! write(iout,*) "before bcast",g_ilist_sc
29807 ! call MPI_Bcast(g_ilist_sc,1,MPI_INT,king,FG_COMM)
29808 call MPI_Bcast(newcontlistcatscnormi,g_ilist_catscnorm,MPI_INT,king,FG_COMM,IERR)
29809 call MPI_Bcast(newcontlistcatscnormj,g_ilist_catscnorm,MPI_INT,king,FG_COMM,IERR)
29813 call MPI_Reduce(ilist_catpnorm,g_ilist_catpnorm,1,&
29814 MPI_INTEGER,MPI_SUM,king,FG_COMM,IERR)
29815 ! write(iout,*) "before bcast",g_ilist_sc
29816 call MPI_Gather(ilist_catpnorm,1,MPI_INTEGER,&
29817 i_ilist_catpnorm,1,MPI_INTEGER,king,FG_COMM,IERR)
29819 do i=1,nfgtasks-1,1
29820 displ(i)=i_ilist_catpnorm(i-1)+displ(i-1)
29822 ! write(iout,*) "before gather",displ(0),displ(1)
29823 call MPI_Gatherv(contlistcatpnormi,ilist_catpnorm,MPI_INTEGER,&
29824 newcontlistcatpnormi,i_ilist_catpnorm,displ,MPI_INTEGER,&
29826 call MPI_Gatherv(contlistcatpnormj,ilist_catpnorm,MPI_INTEGER,&
29827 newcontlistcatpnormj,i_ilist_catpnorm,displ,MPI_INTEGER,&
29829 call MPI_Bcast(g_ilist_catpnorm,1,MPI_INT,king,FG_COMM,IERR)
29830 ! write(iout,*) "before bcast",g_ilist_sc
29831 ! call MPI_Bcast(g_ilist_sc,1,MPI_INT,king,FG_COMM)
29832 call MPI_Bcast(newcontlistcatpnormi,g_ilist_catpnorm,MPI_INT,king,FG_COMM,IERR)
29833 call MPI_Bcast(newcontlistcatpnormj,g_ilist_catpnorm,MPI_INT,king,FG_COMM,IERR)
29837 call MPI_Reduce(ilist_catscang,g_ilist_catscang,1,&
29838 MPI_INTEGER,MPI_SUM,king,FG_COMM,IERR)
29839 ! write(iout,*) "before bcast",g_ilist_sc
29840 call MPI_Gather(ilist_catscang,1,MPI_INTEGER,&
29841 i_ilist_catscang,1,MPI_INTEGER,king,FG_COMM,IERR)
29843 do i=1,nfgtasks-1,1
29844 displ(i)=i_ilist_catscang(i-1)+displ(i-1)
29846 ! write(iout,*) "before gather",displ(0),displ(1)
29847 call MPI_Gatherv(contlistcatscangi,ilist_catscang,MPI_INTEGER,&
29848 newcontlistcatscangi,i_ilist_catscang,displ,MPI_INTEGER,&
29850 call MPI_Gatherv(contlistcatscangj,ilist_catscang,MPI_INTEGER,&
29851 newcontlistcatscangj,i_ilist_catscang,displ,MPI_INTEGER,&
29853 call MPI_Bcast(g_ilist_catscang,1,MPI_INT,king,FG_COMM,IERR)
29854 ! write(iout,*) "before bcast",g_ilist_sc
29855 ! call MPI_Bcast(g_ilist_sc,1,MPI_INT,king,FG_COMM)
29856 call MPI_Bcast(newcontlistcatscangi,g_ilist_catscang,MPI_INT,king,FG_COMM,IERR)
29857 call MPI_Bcast(newcontlistcatscangj,g_ilist_catscang,MPI_INT,king,FG_COMM,IERR)
29861 g_ilist_catscnorm=ilist_catscnorm
29862 g_ilist_catsctran=ilist_catsctran
29863 g_ilist_catpnorm=ilist_catpnorm
29864 g_ilist_catptran=ilist_catptran
29865 g_ilist_catscang=ilist_catscang
29868 do i=1,ilist_catscnorm
29869 newcontlistcatscnormi(i)=contlistcatscnormi(i)
29870 newcontlistcatscnormj(i)=contlistcatscnormj(i)
29872 do i=1,ilist_catpnorm
29873 newcontlistcatpnormi(i)=contlistcatpnormi(i)
29874 newcontlistcatpnormj(i)=contlistcatpnormj(i)
29876 do i=1,ilist_catsctran
29877 newcontlistcatsctrani(i)=contlistcatsctrani(i)
29878 newcontlistcatsctranj(i)=contlistcatsctranj(i)
29880 do i=1,ilist_catptran
29881 newcontlistcatptrani(i)=contlistcatptrani(i)
29882 newcontlistcatptranj(i)=contlistcatptranj(i)
29885 do i=1,ilist_catscang
29886 newcontlistcatscangi(i)=contlistcatscangi(i)
29887 newcontlistcatscangj(i)=contlistcatscangj(i)
29892 call int_bounds(g_ilist_catsctran,g_listcatsctran_start,g_listcatsctran_end)
29893 call int_bounds(g_ilist_catptran,g_listcatptran_start,g_listcatptran_end)
29894 call int_bounds(g_ilist_catscnorm,g_listcatscnorm_start,g_listcatscnorm_end)
29895 call int_bounds(g_ilist_catpnorm,g_listcatpnorm_start,g_listcatpnorm_end)
29896 call int_bounds(g_ilist_catscang,g_listcatscang_start,g_listcatscang_end)
29897 ! make new ang list
29899 do i=g_listcatscang_start,g_listcatscang_end
29900 do j=2,g_ilist_catscang
29901 ! print *,"RWA",i,j,contlistcatscangj(i),contlistcatscangj(j)
29903 if (newcontlistcatscangj(i).ne.newcontlistcatscangj(j)) cycle
29904 ilist_catscangf=ilist_catscangf+1
29905 contlistcatscangfi(ilist_catscangf)=newcontlistcatscangi(i)
29906 contlistcatscangfj(ilist_catscangf)=newcontlistcatscangj(i)
29907 contlistcatscangfk(ilist_catscangf)=newcontlistcatscangi(j)
29908 ! print *,"TUTU",g_listcatscang_start,g_listcatscang_end,i,j,g_ilist_catscangf,myrank
29911 if (nfgtasks.gt.1)then
29913 call MPI_Reduce(ilist_catscangf,g_ilist_catscangf,1,&
29914 MPI_INTEGER,MPI_SUM,king,FG_COMM,IERR)
29915 ! write(iout,*) "before bcast",g_ilist_sc
29916 call MPI_Gather(ilist_catscangf,1,MPI_INTEGER,&
29917 i_ilist_catscangf,1,MPI_INTEGER,king,FG_COMM,IERR)
29919 do i=1,nfgtasks-1,1
29920 displ(i)=i_ilist_catscangf(i-1)+displ(i-1)
29922 ! write(iout,*) "before gather",displ(0),displ(1)
29923 call MPI_Gatherv(contlistcatscangfi,ilist_catscangf,MPI_INTEGER,&
29924 newcontlistcatscangfi,i_ilist_catscangf,displ,MPI_INTEGER,&
29926 call MPI_Gatherv(contlistcatscangfj,ilist_catscangf,MPI_INTEGER,&
29927 newcontlistcatscangfj,i_ilist_catscangf,displ,MPI_INTEGER,&
29929 call MPI_Gatherv(contlistcatscangfk,ilist_catscangf,MPI_INTEGER,&
29930 newcontlistcatscangfk,i_ilist_catscangf,displ,MPI_INTEGER,&
29933 call MPI_Bcast(g_ilist_catscangf,1,MPI_INT,king,FG_COMM,IERR)
29934 ! write(iout,*) "before bcast",g_ilist_sc
29935 ! call MPI_Bcast(g_ilist_sc,1,MPI_INT,king,FG_COMM)
29936 call MPI_Bcast(newcontlistcatscangfi,g_ilist_catscangf,MPI_INT,king,FG_COMM,IERR)
29937 call MPI_Bcast(newcontlistcatscangfj,g_ilist_catscangf,MPI_INT,king,FG_COMM,IERR)
29938 call MPI_Bcast(newcontlistcatscangfk,g_ilist_catscangf,MPI_INT,king,FG_COMM,IERR)
29940 g_ilist_catscangf=ilist_catscangf
29941 do i=1,ilist_catscangf
29942 newcontlistcatscangfi(i)=contlistcatscangfi(i)
29943 newcontlistcatscangfj(i)=contlistcatscangfj(i)
29944 newcontlistcatscangfk(i)=contlistcatscangfk(i)
29947 call int_bounds(g_ilist_catscangf,g_listcatscangf_start,g_listcatscangf_end)
29951 do i=g_listcatscang_start,g_listcatscang_end
29952 do j=1,g_ilist_catscang
29953 do k=1,g_ilist_catscang
29954 ! print *,"TUTU1",g_listcatscang_start,g_listcatscang_end,i,j
29956 if (newcontlistcatscangj(i).ne.newcontlistcatscangj(j)) cycle
29957 if (newcontlistcatscangj(i).ne.newcontlistcatscangj(k)) cycle
29958 if (newcontlistcatscangj(k).ne.newcontlistcatscangj(j)) cycle
29959 if (newcontlistcatscangi(i).eq.newcontlistcatscangi(j)) cycle
29960 if (newcontlistcatscangi(i).eq.newcontlistcatscangi(k)) cycle
29961 if (newcontlistcatscangi(k).eq.newcontlistcatscangi(j)) cycle
29962 ! print *,"TUTU2",g_listcatscang_start,g_listcatscang_end,i,j
29964 ilist_catscangt=ilist_catscangt+1
29965 contlistcatscangti(ilist_catscangt)=newcontlistcatscangi(i)
29966 contlistcatscangtj(ilist_catscangt)=newcontlistcatscangj(i)
29967 contlistcatscangtk(ilist_catscangt)=newcontlistcatscangi(j)
29968 contlistcatscangtl(ilist_catscangt)=newcontlistcatscangi(k)
29973 if (nfgtasks.gt.1)then
29975 call MPI_Reduce(ilist_catscangt,g_ilist_catscangt,1,&
29976 MPI_INTEGER,MPI_SUM,king,FG_COMM,IERR)
29977 ! write(iout,*) "before bcast",g_ilist_sc
29978 call MPI_Gather(ilist_catscangt,1,MPI_INTEGER,&
29979 i_ilist_catscangt,1,MPI_INTEGER,king,FG_COMM,IERR)
29981 do i=1,nfgtasks-1,1
29982 displ(i)=i_ilist_catscangt(i-1)+displ(i-1)
29984 ! write(iout,*) "before gather",displ(0),displ(1)
29985 call MPI_Gatherv(contlistcatscangti,ilist_catscangt,MPI_INTEGER,&
29986 newcontlistcatscangti,i_ilist_catscangt,displ,MPI_INTEGER,&
29988 call MPI_Gatherv(contlistcatscangtj,ilist_catscangt,MPI_INTEGER,&
29989 newcontlistcatscangtj,i_ilist_catscangt,displ,MPI_INTEGER,&
29991 call MPI_Gatherv(contlistcatscangtk,ilist_catscangt,MPI_INTEGER,&
29992 newcontlistcatscangtk,i_ilist_catscangt,displ,MPI_INTEGER,&
29994 call MPI_Gatherv(contlistcatscangtl,ilist_catscangt,MPI_INTEGER,&
29995 newcontlistcatscangtl,i_ilist_catscangt,displ,MPI_INTEGER,&
29998 call MPI_Bcast(g_ilist_catscangt,1,MPI_INT,king,FG_COMM,IERR)
29999 ! write(iout,*) "before bcast",g_ilist_sc
30000 ! call MPI_Bcast(g_ilist_sc,1,MPI_INT,king,FG_COMM)
30001 call MPI_Bcast(newcontlistcatscangti,g_ilist_catscangt,MPI_INT,king,FG_COMM,IERR)
30002 call MPI_Bcast(newcontlistcatscangtj,g_ilist_catscangt,MPI_INT,king,FG_COMM,IERR)
30003 call MPI_Bcast(newcontlistcatscangtk,g_ilist_catscangt,MPI_INT,king,FG_COMM,IERR)
30004 call MPI_Bcast(newcontlistcatscangtl,g_ilist_catscangt,MPI_INT,king,FG_COMM,IERR)
30007 g_ilist_catscangt=ilist_catscangt
30008 do i=1,ilist_catscangt
30009 newcontlistcatscangti(i)=contlistcatscangti(i)
30010 newcontlistcatscangtj(i)=contlistcatscangtj(i)
30011 newcontlistcatscangtk(i)=contlistcatscangtk(i)
30012 newcontlistcatscangtl(i)=contlistcatscangtl(i)
30015 call int_bounds(g_ilist_catscangt,g_listcatscangt_start,g_listcatscangt_end)
30022 write (iout,*) "after MPIREDUCE",ilist_catsctran,ilist_catptran, &
30023 ilist_catscnorm,ilist_catpnorm
30025 do i=1,g_ilist_catsctran
30026 write (iout,*) i,newcontlistcatsctrani(i),newcontlistcatsctranj(i)
30028 do i=1,g_ilist_catptran
30029 write (iout,*) i,newcontlistcatptrani(i),newcontlistcatsctranj(i)
30031 do i=1,g_ilist_catscnorm
30032 write (iout,*) i,newcontlistcatscnormi(i),newcontlistcatscnormj(i)
30034 do i=1,g_ilist_catpnorm
30035 write (iout,*) i,newcontlistcatpnormi(i),newcontlistcatscnormj(i)
30037 do i=1,g_ilist_catscang
30038 write (iout,*) i,newcontlistcatscangi(i),newcontlistcatscangj(i)
30042 end subroutine make_cat_pep_list
30046 !-----------------------------------------------------------------------------
30047 double precision function boxshift(x,boxsize)
30049 double precision x,boxsize
30050 double precision xtemp
30051 xtemp=dmod(x,boxsize)
30052 if (dabs(xtemp-boxsize).lt.dabs(xtemp)) then
30053 boxshift=xtemp-boxsize
30054 else if (dabs(xtemp+boxsize).lt.dabs(xtemp)) then
30055 boxshift=xtemp+boxsize
30060 end function boxshift
30061 !-----------------------------------------------------------------------------
30062 subroutine to_box(xi,yi,zi)
30064 ! include 'DIMENSIONS'
30065 ! include 'COMMON.CHAIN'
30066 double precision xi,yi,zi
30067 xi=dmod(xi,boxxsize)
30068 if (xi.lt.0.0d0) xi=xi+boxxsize
30069 yi=dmod(yi,boxysize)
30070 if (yi.lt.0.0d0) yi=yi+boxysize
30071 zi=dmod(zi,boxzsize)
30072 if (zi.lt.0.0d0) zi=zi+boxzsize
30074 end subroutine to_box
30075 !--------------------------------------------------------------------------
30076 subroutine lipid_layer(xi,yi,zi,sslipi,ssgradlipi)
30078 ! include 'DIMENSIONS'
30079 ! include 'COMMON.IOUNITS'
30080 ! include 'COMMON.CHAIN'
30081 double precision xi,yi,zi,sslipi,ssgradlipi
30082 double precision fracinbuf
30083 ! double precision sscalelip,sscagradlip
30085 write (iout,*) "bordlipbot",bordlipbot," bordliptop",bordliptop
30086 write (iout,*) "buflipbot",buflipbot," lipbufthick",lipbufthick
30087 write (iout,*) "xi yi zi",xi,yi,zi
30089 if ((zi.gt.bordlipbot).and.(zi.lt.bordliptop)) then
30090 ! the energy transfer exist
30091 if (zi.lt.buflipbot) then
30092 ! what fraction I am in
30093 fracinbuf=1.0d0-((zi-bordlipbot)/lipbufthick)
30094 ! lipbufthick is thickenes of lipid buffore
30095 sslipi=sscalelip(fracinbuf)
30096 ssgradlipi=-sscagradlip(fracinbuf)/lipbufthick
30097 elseif (zi.gt.bufliptop) then
30098 fracinbuf=1.0d0-((bordliptop-zi)/lipbufthick)
30099 sslipi=sscalelip(fracinbuf)
30100 ssgradlipi=sscagradlip(fracinbuf)/lipbufthick
30110 write (iout,*) "sslipi",sslipi," ssgradlipi",ssgradlipi
30113 end subroutine lipid_layer
30114 !-------------------------------------------------------------
30115 subroutine ecat_prot_transition(ecation_prottran)
30116 integer:: itypi,itypj,ityptrani,ityptranj,k,l,i,j
30117 real(kind=8),dimension(3):: cjtemp,citemp,diff,dsctemp,vecsc,&
30118 diffnorm,boxx,r,dEvan1Cm,dEvan2Cm,dEtotalCm
30119 real(kind=8):: ecation_prottran,dista,sdist,De,ene,x0left,&
30120 alphac,grad,sumvec,simplesum,pom,erdxi,facd1,&
30121 sss_ele_cut,sss_ele_cut_grad,sss2min,sss2mingrad,&
30122 ene1,ene2,grad1,grad2,evan1,evan2,rcal,r4,r7,r0p,&
30123 r06,r012,epscalc,rocal,ract
30124 ecation_prottran=0.0d0
30128 do k=g_listcatsctran_start,g_listcatsctran_end
30129 i=newcontlistcatsctrani(k)
30130 j=newcontlistcatsctranj(k)
30131 ! print *,i,j,"in new tran"
30133 citemp(l)=c(l,i+nres)
30137 itypi=itype(i,1) !as the first is the protein part
30138 itypj=itype(j,5) !as the second part is always cation
30139 ! remapping to internal types
30140 ! read (iiontran,*,err=123,end=123) (agamacattran(k,j,i),k=1,3),&
30141 ! (athetacattran(k,j,i),k=1,6),acatshiftdsc(j,i),bcatshiftdsc(j,i),&
30142 ! demorsecat(j,i),alphamorsecat(j,i),x0catleft(j,i),x0catright(j,i),&
30145 if (itypj.eq.6) then
30146 ityptranj=1 !as now only Zn2+ is this needs to be modified for other ions
30148 if (itypi.eq.16) then
30150 elseif (itypi.eq.1) then
30152 elseif (itypi.eq.15) then
30154 elseif (itypi.eq.17) then
30156 elseif (itypi.eq.2) then
30162 if (ityptrani.gt.ntrantyp(ityptranj)) then
30164 ! write(iout,*),gradcattranc(l,j),gradcattranx(l,i)
30167 call to_box(cjtemp(1),cjtemp(2),cjtemp(3))
30168 call to_box(citemp(1),citemp(2),citemp(3))
30171 r(l)=boxshift(cjtemp(l)-citemp(l),boxx(l))
30172 rcal=rcal+r(l)*r(l)
30175 if (ract.gt.r_cut_ele) cycle
30176 sss_ele_cut=sscale_ele(ract)
30177 sss_ele_cut_grad=sscagrad_ele(ract)
30180 r0p=0.5*(rocal+sig0(itype(i,1)))
30183 Evan1=epscalc*(r012/rcal**6)
30184 Evan2=epscalc*2*(r06/rcal**3)
30188 dEvan1Cm(l) = 12*r(l)*epscalc*r012/r7
30189 dEvan2Cm(l) = 12*r(l)*epscalc*r06/r4
30192 dEtotalCm(l)=(dEvan1Cm(l)+dEvan2Cm(l))*sss_ele_cut-&
30193 (Evan1+Evan2)*sss_ele_cut_grad*r(l)/ract
30195 ecation_prottran = ecation_prottran+&
30196 (Evan1+Evan2)*sss_ele_cut
30198 gradcattranx(l,i)=gradcattranx(l,i)+dEtotalCm(l)
30199 gradcattranc(l,i)=gradcattranc(l,i)+dEtotalCm(l)
30200 gradcattranc(l,j)=gradcattranc(l,j)-dEtotalCm(l)
30209 vecsc(l)=citemp(l)-c(l,i)
30210 sumvec=sumvec+vecsc(l)**2
30211 simplesum=simplesum+vecsc(l)
30213 sumvec=dsqrt(sumvec)
30214 call to_box(cjtemp(1),cjtemp(2),cjtemp(3))
30215 call to_box(citemp(1),citemp(2),citemp(3))
30218 dsctemp(l)=c(l,i+nres)&
30219 +(acatshiftdsc(ityptrani,ityptranj)-1.0d0)*vecsc(l)&
30220 +bcatshiftdsc(ityptrani,ityptranj)*vecsc(l)/sumvec
30222 call to_box(dsctemp(1),dsctemp(2),dsctemp(3))
30225 diff(l)=boxshift(dsctemp(l)-cjtemp(l),boxx(l))
30226 sdist=sdist+diff(l)*diff(l)
30229 if (dista.gt.r_cut_ele) cycle
30231 sss_ele_cut=sscale_ele(dista)
30232 sss_ele_cut_grad=sscagrad_ele(dista)
30233 sss2min=sscale2(dista,x0cattrans(ityptrani,ityptranj)-0.1d0,0.2d0)
30234 De=demorsecat(ityptrani,ityptranj)
30235 alphac=alphamorsecat(ityptrani,ityptranj)
30236 if (sss2min.eq.1.0d0) then
30237 ! print *,"ityptrani",ityptrani,ityptranj
30238 x0left=x0catleft(ityptrani,ityptranj) ! to mn
30239 ene=sss_ele_cut*(-De+De*(1.0d0-dexp(-alphac*(dista-x0left)))**2)
30240 grad=2.0d0*alphac*De*dexp(-alphac*(dista-x0left))*&
30241 (1.0d0-dexp(-alphac*(dista-x0left)))*sss_ele_cut&
30242 +ene/sss_ele_cut*sss_ele_cut_grad
30243 else if (sss2min.eq.0.0d0) then
30244 x0left=x0catright(ityptrani,ityptranj)
30245 ene=sss_ele_cut*(-De+De*(1.0d0-dexp(-alphac*(dista-x0left)))**2)
30246 grad=2.0d0*alphac*De*dexp(-alphac*(dista-x0left))*&
30247 (1.0d0-dexp(-alphac*(dista-x0left)))*sss_ele_cut&
30248 +ene/sss_ele_cut*sss_ele_cut_grad
30250 sss2mingrad=sscagrad2(dista,x0cattrans(ityptrani,ityptranj)-0.1d0,0.2d0)
30251 x0left=x0catleft(ityptrani,ityptranj)
30252 ene1=sss_ele_cut*(-De+De*(1.0d0-dexp(-alphac*(dista-x0left)))**2)
30253 grad1=2.0d0*alphac*De*dexp(-alphac*(dista-x0left))*&
30254 (1.0d0-dexp(-alphac*(dista-x0left)))*sss_ele_cut&
30255 +ene/sss_ele_cut*sss_ele_cut_grad
30256 x0left=x0catright(ityptrani,ityptranj)
30257 ene2=sss_ele_cut*(-De+De*(1.0d0-dexp(-alphac*(dista-x0left)))**2)
30258 grad2=2.0d0*alphac*De*dexp(-alphac*(dista-x0left))*&
30259 (1.0d0-dexp(-alphac*(dista-x0left)))*sss_ele_cut&
30260 +ene/sss_ele_cut*sss_ele_cut_grad
30261 ene=sss2min*ene1+(1.0d0-sss2min)*ene2
30262 grad=sss2min*grad1+(1.0d0-sss2min)*grad2+sss2mingrad*(ene1-ene2)
30265 diffnorm(l)= diff(l)/dista
30267 erdxi=scalar(diffnorm(1),dc_norm(1,i+nres))
30268 facd1=bcatshiftdsc(ityptrani,ityptranj)/sumvec
30272 ! ertail(k) = Rtail_distance(k)/Rtail
30274 ! erdxi = scalar( ertail(1), dC_norm(1,i+nres) )
30275 ! erdxj = scalar( ertail(1), dC_norm(1,j+nres) )
30276 ! facd1 = dtail(1,itypi,itypj) * vbld_inv(i+nres)
30277 ! facd2 = dtail(2,itypi,itypj) * vbld_inv(j+nres)
30279 !c! write (*,*) "Gvdwc(",k,",",i,")=", gvdwc(k,i)
30280 !c! write (*,*) "Gvdwc(",k,",",j,")=", gvdwc(k,j)
30281 ! pom = ertail(k)-facd1*(ertail(k)-erdxi*dC_norm(k,i+nres))
30282 ! gvdwx(k,i) = gvdwx(k,i) &
30283 ! - (( dFdR + gg(k) ) * pom)
30284 pom=diffnorm(l)+facd1*(diffnorm(l)-erdxi*dc_norm(l,i+nres))
30285 ! write(iout,*),gradcattranc(l,j),gradcattranx(l,i),grad*diff(l)/dista
30287 gradcattranx(l,i)=gradcattranx(l,i)+grad*pom&
30288 +grad*diffnorm(l)*(acatshiftdsc(ityptrani,ityptranj)-1.0d0)
30289 ! *( bcatshiftdsc(ityptrani,ityptranj)*&
30290 ! (1.0d0/sumvec-(vecsc(l)*simplesum)*(sumvec**(-3.0d0))))
30291 gradcattranc(l,i)=gradcattranc(l,i)+grad*diff(l)/dista
30292 ! +sss_ele_cut_grad*ene*diff(l)/dista/sss_ele_cut
30293 gradcattranc(l,j)=gradcattranc(l,j)-grad*diff(l)/dista
30294 ! -sss_ele_cut_grad*ene*diff(l)/dista/sss_ele_cut
30296 ecation_prottran=ecation_prottran+ene
30297 if (energy_dec) write(iout,*) "etrancat",i,j,ene,x0left,De,dista,&
30301 ! do k=g_listcatptran_start,g_listcatptran_end
30302 ! ene=0.0d0 this will be used if peptide group interaction is needed
30308 subroutine ecat_prot_ang(ecation_protang)
30309 integer:: itypi,itypj,ityptrani,ityptranj,k,l,i,j,n,m,&
30310 ityptrani1,ityptranj1,ityptrani2,ityptranj2,&
30311 i1,i2,j1,j2,k1,k2,k3,i3,j3,ityptrani3,ityptranj3
30313 real(kind=8),dimension(3):: cjtemp,citemp,diff,dsctemp,vecsc,&
30314 diffnorm,boxx,dscvec,dscvecnorm,diffnorm2,&
30315 dscvec2,dscvecnorm2,cjtemp2,citemp2,diff2,dsctemp2,&
30316 vecsc2,diff1,diffnorm1,diff3,mindiffnorm2
30317 real(kind=8),dimension(3):: dscvec1,dscvecnorm1,cjtemp1,citemp1,vecsc1,dsctemp1,&
30318 dscvec3,dscvecnorm3,cjtemp3,citemp3,vecsc3,dsctemp3,&
30319 diffnorm3,diff4,diffnorm4
30321 real(kind=8):: ecation_protang,dista,sdist,De,ene,x0left,&
30322 alphac,grad,sumvec,sumdscvec,pom,erdxi,facd1,&
30323 sss_ele_cut,sss_ele_cut_grad,sss2min,sss2mingrad,&
30324 simplesum,cosval,part1,part2a,part2,part2b,part3,&
30325 part4a,part4b,part4,bottom,dista2,sdist2,sumvec2,&
30326 sumdscvec2,simplesum2,dista1,sdist1,sumvec1,simplesum1,&
30327 sumdscvec1,facd2,scal1a,scal1b,scal2a,scal2b,&
30328 sss2mingrad1,sss2mingrad2,sss2min1,sss2min2,pom1,pom2,&
30329 det1ij,det2ij,cosom1,cosom2,cosom12,cosphij,dista3,&
30331 real(kind=8):: sinom1,sinom2,sinaux,dephiij,sumdscvec3,sumscvec3,&
30332 cosphi,sdist3,simplesum3,det1t2ij,sss2mingrad3,sss2min3,&
30333 scal1c,scal2c,scal3a,scal3b,scal3c,facd3,facd2b,scal3d,&
30334 scal3e,dista4,sdist4,pom3,sssmintot
30336 ecation_protang=0.0d0
30340 ! print *,"KUR**3",g_listcatscang_start,g_listcatscang_end
30343 do k=g_listcatscang_start,g_listcatscang_end
30345 i=newcontlistcatscangi(k)
30346 j=newcontlistcatscangj(k)
30347 itypi=itype(i,1) !as the first is the protein part
30348 itypj=itype(j,5) !as the second part is always cation
30349 ! print *,"KUR**4",i,j,itypi,itypj
30350 ! remapping to internal types
30351 ! read (iiontran,*,err=123,end=123) (agamacattran(k,j,i),k=1,3),&
30352 ! (athetacattran(k,j,i),k=1,6),acatshiftdsc(j,i),bcatshiftdsc(j,i),&
30353 ! demorsecat(j,i),alphamorsecat(j,i),x0catleft(j,i),x0catright(j,i),&
30355 if (itypj.eq.6) then
30356 ityptranj=1 !as now only Zn2+ is this needs to be modified for other ions
30358 if (itypi.eq.16) then
30360 elseif (itypi.eq.1) then
30362 elseif (itypi.eq.15) then
30364 elseif (itypi.eq.17) then
30366 elseif (itypi.eq.2) then
30371 if (ityptrani.gt.ntrantyp(ityptranj)) cycle
30373 citemp(l)=c(l,i+nres)
30379 vecsc(l)=citemp(l)-c(l,i)
30380 sumvec=sumvec+vecsc(l)**2
30381 simplesum=simplesum+vecsc(l)
30383 sumvec=dsqrt(sumvec)
30388 +(acatshiftdsc(ityptrani,ityptranj))*vecsc(l)&
30389 +bcatshiftdsc(ityptrani,ityptranj)*vecsc(l)/sumvec
30392 (acatshiftdsc(ityptrani,ityptranj))*vecsc(l)&
30393 +bcatshiftdsc(ityptrani,ityptranj)*vecsc(l)/sumvec
30394 sumdscvec=sumdscvec+dscvec(l)**2
30396 sumdscvec=dsqrt(sumdscvec)
30398 dscvecnorm(l)=dscvec(l)/sumdscvec
30400 call to_box(dsctemp(1),dsctemp(2),dsctemp(3))
30401 call to_box(cjtemp(1),cjtemp(2),cjtemp(3))
30404 diff(l)=boxshift(dsctemp(l)-cjtemp(l),boxx(l))
30405 sdist=sdist+diff(l)*diff(l)
30409 diffnorm(l)= diff(l)/dista
30411 cosval=scalar(diffnorm(1),dc_norm(1,i+nres))
30413 sss2min=sscale2(dista,r_cut_ang,1.0d0)
30414 sss2mingrad=sscagrad2(dista,r_cut_ang,1.0d0)
30416 +tschebyshev(1,6,athetacattran(1,ityptrani,ityptranj),cosval)
30417 grad=gradtschebyshev(0,5,athetacattran(1,ityptrani,ityptranj),cosval)*sss2min
30419 facd1=bcatshiftdsc(ityptrani,ityptranj)/sumvec
30420 erdxi=scalar(diffnorm(1),dc_norm(1,i+nres))
30426 bottom=sumvec**2*sdist
30427 part1=diff(l)*sumvec*dista
30428 part2a=(acatshiftdsc(ityptrani,ityptranj))*vecsc(l)
30430 !bcatshiftdsc(ityptrani,ityptranj)/sumvec*&
30431 !(vecsc(l)-cosval*dista*dc_norm(l,i+nres))
30432 part2=(part2a+part2b)*sumvec*dista
30433 part3=cosval*sumvec*dista*dc_norm(l,i+nres)*dista
30434 part4a=diff(l)*acatshiftdsc(ityptrani,ityptranj)
30435 part4b=bcatshiftdsc(ityptrani,ityptranj)/sumvec*&
30436 (diff(l)-cosval*dista*dc_norm(l,i+nres))
30437 part4=cosval*sumvec*(part4a+part4b)*sumvec
30438 ! gradlipang(m,l)=gradlipang(m,l)+(fac &
30439 ! *(xa(m)-scalar*vnorm*xb(m)/wnorm)&
30443 ! ertail(k) = Rtail_distance(k)/Rtail
30445 ! erdxi = scalar( ertail(1), dC_norm(1,i+nres) )
30446 ! erdxj = scalar( ertail(1), dC_norm(1,j+nres) )
30447 ! facd1 = dtail(1,itypi,itypj) * vbld_inv(i+nres)
30448 ! facd2 = dtail(2,itypi,itypj) * vbld_inv(j+nres)
30450 !c! write (*,*) "Gvdwc(",k,",",i,")=", gvdwc(k,i)
30451 !c! write (*,*) "Gvdwc(",k,",",j,")=", gvdwc(k,j)
30452 ! pom = ertail(k)-facd1*(ertail(k)-erdxi*dC_norm(k,i+nres))
30453 ! gvdwx(k,i) = gvdwx(k,i) &
30454 ! - (( dFdR + gg(k) ) * pom)
30455 pom=diffnorm(l)+facd1*(diffnorm(l)-erdxi*dc_norm(l,i+nres))
30457 gradcatangc(l,j)=gradcatangc(l,j)-grad*&
30458 (dscvec(l)-cosval*diffnorm(l)*sumdscvec)/(sumdscvec*dista)-&
30459 ene*sss2mingrad*diffnorm(l)
30461 gradcatangc(l,i)=gradcatangc(l,i)+grad*&
30462 (dscvec(l)-cosval*diffnorm(l)*sumdscvec)/(sumdscvec*dista)+&
30463 ene*sss2mingrad*diffnorm(l)
30465 gradcatangx(l,i)=gradcatangx(l,i)+grad*&
30466 (part1+part2-part3-part4)/bottom+&
30467 ene*sss2mingrad*pom+&
30468 ene*sss2mingrad*diffnorm(l)*(acatshiftdsc(ityptrani,ityptranj)-1.0d0)
30469 ! +grad*(dscvec(l)-cosval*diffnorm(l)*sumdscvec)/(sumdscvec*dista)&
30470 ! +grad*pom+grad*diffnorm(l)*(acatshiftdsc(ityptrani,ityptranj)-1.0d0)
30472 ! (diff(l)-cosval*dscvecnorm(l)*dista)/(sumdscvec*dista)
30479 ! print *,i,j,cosval,tschebyshev(1,3,aomicattr(1,ityptranj),cosval)&
30480 ! ,aomicattr(0,ityptranj),ene
30481 if (energy_dec) write(iout,*) i,j,ityptrani,ityptranj,ene,cosval
30482 ecation_protang=ecation_protang+ene*sss2min
30485 ! print *,"KUR**",g_listcatscangf_start,g_listcatscangf_end
30486 do k=g_listcatscangf_start,g_listcatscangf_end
30488 i1=newcontlistcatscangfi(k)
30489 j1=newcontlistcatscangfj(k)
30490 itypi=itype(i1,1) !as the first is the protein part
30491 itypj=itype(j1,5) !as the second part is always cation
30492 if (itypj.eq.6) then
30493 ityptranj1=1 !as now only Zn2+ is this needs to be modified for other ions
30495 if (itypi.eq.16) then
30497 elseif (itypi.eq.1) then
30499 elseif (itypi.eq.15) then
30501 elseif (itypi.eq.17) then
30503 elseif (itypi.eq.2) then
30509 citemp1(l)=c(l,i1+nres)
30515 vecsc1(l)=citemp1(l)-c(l,i1)
30516 sumvec1=sumvec1+vecsc1(l)**2
30517 simplesum1=simplesum1+vecsc1(l)
30519 sumvec1=dsqrt(sumvec1)
30522 dsctemp1(l)=c(l,i1)&
30524 +(acatshiftdsc(ityptrani1,ityptranj1))*vecsc1(l)&
30525 +bcatshiftdsc(ityptrani1,ityptranj1)*vecsc1(l)/sumvec1
30528 (acatshiftdsc(ityptrani1,ityptranj1))*vecsc1(l)&
30529 +bcatshiftdsc(ityptrani1,ityptranj1)*vecsc1(l)/sumvec1
30530 sumdscvec1=sumdscvec1+dscvec1(l)**2
30532 sumdscvec1=dsqrt(sumdscvec1)
30534 dscvecnorm1(l)=dscvec1(l)/sumdscvec1
30536 call to_box(dsctemp1(1),dsctemp1(2),dsctemp1(3))
30537 call to_box(cjtemp1(1),cjtemp1(2),cjtemp1(3))
30540 diff1(l)=boxshift(dsctemp1(l)-cjtemp1(l),boxx(l))
30541 sdist1=sdist1+diff1(l)*diff1(l)
30543 dista1=sqrt(sdist1)
30545 diffnorm1(l)= diff1(l)/dista1
30547 sss2min1=sscale2(dista1,r_cut_ang,1.0d0)
30548 sss2mingrad1=sscagrad2(dista1,r_cut_ang,1.0d0)
30549 if (ityptrani1.gt.ntrantyp(ityptranj1)) cycle
30551 !-----------------------------------------------------------------
30552 ! do m=k+1,g_listcatscang_end
30554 i2=newcontlistcatscangfk(k)
30556 if (j1.ne.j2) cycle
30557 itypi=itype(i2,1) !as the first is the protein part
30558 itypj=itype(j2,5) !as the second part is always cation
30559 if (itypj.eq.6) then
30560 ityptranj2=1 !as now only Zn2+ is this needs to be modified for other ions
30562 if (itypi.eq.16) then
30564 elseif (itypi.eq.1) then
30566 elseif (itypi.eq.15) then
30568 elseif (itypi.eq.17) then
30570 elseif (itypi.eq.2) then
30575 if (ityptrani2.gt.ntrantyp(ityptranj2)) cycle
30578 citemp2(l)=c(l,i2+nres)
30584 vecsc2(l)=citemp2(l)-c(l,i2)
30585 sumvec2=sumvec2+vecsc2(l)**2
30586 simplesum2=simplesum2+vecsc2(l)
30588 sumvec2=dsqrt(sumvec2)
30591 dsctemp2(l)=c(l,i2)&
30593 +(acatshiftdsc(ityptrani2,ityptranj2))*vecsc2(l)&
30594 +bcatshiftdsc(ityptrani2,ityptranj2)*vecsc2(l)/sumvec2
30597 (acatshiftdsc(ityptrani2,ityptranj2))*vecsc2(l)&
30598 +bcatshiftdsc(ityptrani2,ityptranj2)*vecsc2(l)/sumvec2
30599 sumdscvec2=sumdscvec2+dscvec2(l)**2
30601 sumdscvec2=dsqrt(sumdscvec2)
30603 dscvecnorm2(l)=dscvec2(l)/sumdscvec2
30605 call to_box(dsctemp2(1),dsctemp2(2),dsctemp2(3))
30606 call to_box(cjtemp2(1),cjtemp2(2),cjtemp2(3))
30609 diff2(l)=boxshift(dsctemp2(l)-cjtemp2(l),boxx(l))
30611 sdist2=sdist2+diff2(l)*diff2(l)
30613 dista2=sqrt(sdist2)
30615 diffnorm2(l)= diff2(l)/dista2
30617 ! print *,i1,i2,diffnorm2(1)
30618 cosval=scalar(diffnorm1(1),diffnorm2(1))
30620 sss2min2=sscale2(dista2,r_cut_ang,1.0d0)
30621 sss2mingrad2=sscagrad2(dista2,r_cut_ang,1.0d0)
30622 ene=ene+tschebyshev(1,3,aomicattr(1,ityptranj1),cosval)
30623 grad=gradtschebyshev(0,2,aomicattr(1,ityptranj1),cosval)*sss2min2*sss2min1
30628 ecation_protang=ecation_protang+ene*sss2min2*sss2min1
30629 facd1=bcatshiftdsc(ityptrani1,ityptranj1)/sumvec1
30630 facd2=bcatshiftdsc(ityptrani2,ityptranj2)/sumvec2
30631 scal1a=scalar(diffnorm1(1),dc_norm(1,i1+nres))
30632 scal1b=scalar(diffnorm2(1),dc_norm(1,i1+nres))
30633 scal2a=scalar(diffnorm1(1),dc_norm(1,i2+nres))
30634 scal2b=scalar(diffnorm2(1),dc_norm(1,i2+nres))
30636 if (energy_dec) write(iout,*) "omi", i,j,ityptrani,ityptranj,ene,cosval,aomicattr(1,ityptranj1),&
30637 aomicattr(2,ityptranj1),aomicattr(3,ityptranj1),tschebyshev(1,3,aomicattr(1,ityptranj1),cosval)
30641 pom1=diffnorm1(l)+facd1*(diffnorm1(l)-scal1a*dc_norm(l,i1+nres))
30642 pom2=diffnorm2(l)+facd2*(diffnorm2(l)-scal2b*dc_norm(l,i2+nres))
30645 gradcatangc(l,i1)=gradcatangc(l,i1)+grad*(diff2(l)-&
30646 cosval*diffnorm1(l)*dista2)/(dista2*dista1)+&
30647 ene*sss2mingrad1*diffnorm1(l)*sss2min2
30650 gradcatangx(l,i1)=gradcatangx(l,i1)+grad/(dista2*dista1)*&
30651 (acatshiftdsc(ityptrani1,ityptranj1)*diff2(l)+&
30652 facd1*(diff2(l)-scal1b*dc_norm(l,i1+nres)*dista2)-&
30653 cosval*dista2/dista1*&
30654 (acatshiftdsc(ityptrani1,ityptranj1)*diff1(l)+&
30655 facd1*(diff1(l)-scal1a*dc_norm(l,i1+nres)*dista1)))+&
30656 ene*sss2mingrad1*sss2min2*(pom1+&
30657 diffnorm1(l)*(acatshiftdsc(ityptrani1,ityptranj1)-1.0d0))
30660 gradcatangx(l,i2)=gradcatangx(l,i2)+grad/(dista2*dista1)*&
30661 (acatshiftdsc(ityptrani2,ityptranj2)*diff1(l)+&
30662 facd2*(diff1(l)-scal2a*dc_norm(l,i2+nres)*dista1)-&
30663 cosval*dista1/dista2*&
30664 (acatshiftdsc(ityptrani2,ityptranj2)*diff2(l)+&
30665 facd2*(diff2(l)-scal2b*dc_norm(l,i2+nres)*dista2)))+&
30666 ene*sss2mingrad2*sss2min1*(pom2+&
30667 diffnorm2(l)*(acatshiftdsc(ityptrani2,ityptranj2)-1.0d0))
30670 gradcatangx(l,i2)=gradcatangx(l,i2)
30671 gradcatangc(l,i2)=gradcatangc(l,i2)+grad*(diff1(l)-&
30672 cosval*diffnorm2(l)*dista1)/(dista2*dista1)+&
30673 ene*sss2mingrad2*diffnorm2(l)*sss2min1
30675 gradcatangc(l,j2)=gradcatangc(l,j2)-grad*(diff2(l)/dista2/dista1-&
30676 cosval*diff1(l)/dista1/dista1+diff1(l)/dista2/dista1-&
30677 cosval*diff2(l)/dista2/dista2)-&
30678 ene*sss2mingrad1*diffnorm1(l)*sss2min2-&
30679 ene*sss2mingrad2*diffnorm2(l)*sss2min1
30688 ! do k1=g_listcatscang_start,g_listcatscang_end
30689 ! print *,"KURNA",g_listcatscangt_start,g_listcatscangt_end
30690 do k1=g_listcatscangt_start,g_listcatscangt_end
30691 i1=newcontlistcatscangti(k1)
30692 j1=newcontlistcatscangtj(k1)
30693 itypi=itype(i1,1) !as the first is the protein part
30694 itypj=itype(j1,5) !as the second part is always cation
30695 if (itypj.eq.6) then
30696 ityptranj1=1 !as now only Zn2+ is this needs to be modified for other ions
30698 if (itypi.eq.16) then
30700 elseif (itypi.eq.1) then
30702 elseif (itypi.eq.15) then
30704 elseif (itypi.eq.17) then
30706 elseif (itypi.eq.2) then
30712 citemp1(l)=c(l,i1+nres)
30718 vecsc1(l)=citemp1(l)-c(l,i1)
30719 sumvec1=sumvec1+vecsc1(l)**2
30720 simplesum1=simplesum1+vecsc1(l)
30722 sumvec1=dsqrt(sumvec1)
30725 dsctemp1(l)=c(l,i1)&
30726 +(acatshiftdsc(ityptrani1,ityptranj1))*vecsc1(l)&
30727 +bcatshiftdsc(ityptrani1,ityptranj1)*vecsc1(l)/sumvec1
30729 (acatshiftdsc(ityptrani1,ityptranj1))*vecsc1(l)&
30730 +bcatshiftdsc(ityptrani1,ityptranj1)*vecsc1(l)/sumvec1
30731 sumdscvec1=sumdscvec1+dscvec1(l)**2
30733 sumdscvec1=dsqrt(sumdscvec1)
30735 dscvecnorm1(l)=dscvec1(l)/sumdscvec1
30737 call to_box(dsctemp1(1),dsctemp1(2),dsctemp1(3))
30738 call to_box(cjtemp1(1),cjtemp1(2),cjtemp1(3))
30741 diff1(l)=boxshift(dsctemp1(l)-cjtemp1(l),boxx(l))
30742 sdist1=sdist1+diff1(l)*diff1(l)
30744 dista1=sqrt(sdist1)
30746 diffnorm1(l)= diff1(l)/dista1
30748 sss2min1=sscale2(dista1,r_cut_ang,1.0d0)
30749 sss2mingrad1=sscagrad2(dista1,r_cut_ang,1.0d0)
30750 if (ityptrani1.gt.ntrantyp(ityptranj1)) cycle
30751 !---------------before second loop
30752 ! do k2=k1+1,g_listcatscang_end
30753 i2=newcontlistcatscangtk(k1)
30755 ! print *,"TUTU3",i1,i2,j1,j2
30756 if (i2.eq.i1) cycle
30757 if (j2.ne.j1) cycle
30758 itypi=itype(i2,1) !as the first is the protein part
30759 itypj=itype(j2,5) !as the second part is always cation
30760 if (itypj.eq.6) then
30761 ityptranj2=1 !as now only Zn2+ is this needs to be modified for other ions
30763 if (itypi.eq.16) then
30765 elseif (itypi.eq.1) then
30767 elseif (itypi.eq.15) then
30769 elseif (itypi.eq.17) then
30771 elseif (itypi.eq.2) then
30776 if (ityptrani2.gt.ntrantyp(ityptranj2)) cycle
30778 citemp2(l)=c(l,i2+nres)
30784 vecsc2(l)=citemp2(l)-c(l,i2)
30785 sumvec2=sumvec2+vecsc2(l)**2
30786 simplesum2=simplesum2+vecsc2(l)
30788 sumvec2=dsqrt(sumvec2)
30791 dsctemp2(l)=c(l,i2)&
30792 +(acatshiftdsc(ityptrani2,ityptranj2))*vecsc2(l)&
30793 +bcatshiftdsc(ityptrani2,ityptranj2)*vecsc2(l)/sumvec2
30795 (acatshiftdsc(ityptrani2,ityptranj2))*vecsc2(l)&
30796 +bcatshiftdsc(ityptrani2,ityptranj2)*vecsc2(l)/sumvec2
30797 sumdscvec2=sumdscvec2+dscvec2(l)**2
30799 sumdscvec2=dsqrt(sumdscvec2)
30801 dscvecnorm2(l)=dscvec2(l)/sumdscvec2
30803 call to_box(dsctemp2(1),dsctemp2(2),dsctemp2(3))
30804 call to_box(cjtemp2(1),cjtemp2(2),cjtemp2(3))
30807 diff2(l)=boxshift(dsctemp2(l)-cjtemp2(l),boxx(l))
30809 sdist2=sdist2+diff2(l)*diff2(l)
30811 dista2=sqrt(sdist2)
30813 diffnorm2(l)= diff2(l)/dista2
30814 mindiffnorm2(l)=-diffnorm2(l)
30816 ! print *,i1,i2,diffnorm2(1)
30817 cosom1=scalar(diffnorm1(1),diffnorm2(1))
30818 sss2min2=sscale2(dista2,r_cut_ang,1.0d0)
30819 sss2mingrad2=sscagrad2(dista2,r_cut_ang,1.0d0)
30821 !---------------- before third loop
30822 ! do k3=g_listcatscang_start,g_listcatscang_end
30824 i3=newcontlistcatscangtl(k1)
30826 ! print *,"TUTU4",i1,i2,i3,j1,j2,j3
30828 if (i3.eq.i2) cycle
30829 if (i3.eq.i1) cycle
30830 if (j3.ne.j1) cycle
30831 itypi=itype(i3,1) !as the first is the protein part
30832 itypj=itype(j3,5) !as the second part is always cation
30833 if (itypj.eq.6) then
30834 ityptranj3=1 !as now only Zn2+ is this needs to be modified for other ions
30836 if (itypi.eq.16) then
30838 elseif (itypi.eq.1) then
30840 elseif (itypi.eq.15) then
30842 elseif (itypi.eq.17) then
30844 elseif (itypi.eq.2) then
30849 if (ityptrani3.gt.ntrantyp(ityptranj3)) cycle
30851 citemp3(l)=c(l,i3+nres)
30857 vecsc3(l)=citemp3(l)-c(l,i3)
30858 sumvec3=sumvec3+vecsc3(l)**2
30859 simplesum3=simplesum3+vecsc3(l)
30861 sumvec3=dsqrt(sumvec3)
30864 dsctemp3(l)=c(l,i3)&
30865 +(acatshiftdsc(ityptrani3,ityptranj3))*vecsc3(l)&
30866 +bcatshiftdsc(ityptrani3,ityptranj3)*vecsc3(l)/sumvec3
30868 (acatshiftdsc(ityptrani3,ityptranj3))*vecsc3(l)&
30869 +bcatshiftdsc(ityptrani3,ityptranj3)*vecsc3(l)/sumvec3
30870 sumdscvec3=sumdscvec3+dscvec3(l)**2
30872 sumdscvec3=dsqrt(sumdscvec3)
30874 dscvecnorm3(l)=dscvec3(l)/sumdscvec3
30876 call to_box(dsctemp3(1),dsctemp3(2),dsctemp3(3))
30877 call to_box(cjtemp3(1),cjtemp3(2),cjtemp3(3))
30880 diff3(l)=boxshift(dsctemp3(l)-dsctemp2(l),boxx(l))
30881 sdist3=sdist3+diff3(l)*diff3(l)
30883 dista3=sqrt(sdist3)
30885 diffnorm3(l)= diff3(l)/dista3
30889 diff4(l)=boxshift(dsctemp3(l)-cjtemp2(l),boxx(l))
30891 sdist4=sdist4+diff4(l)*diff4(l)
30893 dista4=sqrt(sdist4)
30895 diffnorm4(l)= diff4(l)/dista4
30898 sss2min3=sscale2(dista4,r_cut_ang,1.0d0)
30899 sss2mingrad3=sscagrad2(dista4,r_cut_ang,1.0d0)
30900 sssmintot=sss2min3*sss2min2*sss2min1
30901 if (ityptrani3.gt.ntrantyp(ityptranj3)) cycle
30902 cosom12=scalar(diffnorm3(1),diffnorm1(1))
30903 cosom2=scalar(diffnorm3(1),mindiffnorm2(1))
30904 sinom1=dsqrt(1.0d0-cosom1*cosom1)
30905 sinom2=dsqrt(1.0d0-cosom2*cosom2)
30906 cosphi=cosom12-cosom1*cosom2
30907 sinaux=sinom1*sinom2
30908 ene=ene+mytschebyshev(1,3,agamacattran(1,ityptrani2,ityptranj2),cosphi,sinaux)
30909 call mygradtschebyshev(1,3,agamacattran(1,ityptrani2,ityptranj2)&
30910 ,cosphi,sinaux,dephiij,det1t2ij)
30912 det1ij=-det1t2ij*sinom2*cosom1/sinom1-dephiij*cosom2
30913 det2ij=-det1t2ij*sinom1*cosom2/sinom2-dephiij*cosom1
30914 facd1=bcatshiftdsc(ityptrani1,ityptranj1)/sumvec1
30915 facd2=bcatshiftdsc(ityptrani2,ityptranj2)/sumvec2
30916 ! facd2b=bcatshiftdsc(ityptrani2,ityptranj2)/sumvec3
30917 facd3=bcatshiftdsc(ityptrani3,ityptranj3)/sumvec3
30918 scal1a=scalar(diffnorm1(1),dc_norm(1,i1+nres))
30919 scal1b=scalar(diffnorm2(1),dc_norm(1,i1+nres))
30920 scal1c=scalar(diffnorm3(1),dc_norm(1,i1+nres))
30921 scal2a=scalar(diffnorm1(1),dc_norm(1,i2+nres))
30922 scal2b=scalar(diffnorm2(1),dc_norm(1,i2+nres))
30923 scal2c=scalar(diffnorm3(1),dc_norm(1,i2+nres))
30924 scal3a=scalar(diffnorm1(1),dc_norm(1,i3+nres))
30925 scal3b=scalar(mindiffnorm2(1),dc_norm(1,i3+nres))
30926 scal3d=scalar(diffnorm2(1),dc_norm(1,i3+nres))
30927 scal3c=scalar(diffnorm3(1),dc_norm(1,i3+nres))
30928 scal3e=scalar(diffnorm4(1),dc_norm(1,i3+nres))
30932 pom1=diffnorm1(l)+facd1*(diffnorm1(l)-scal1a*dc_norm(l,i1+nres))
30933 pom2=diffnorm2(l)+facd2*(diffnorm2(l)-scal2b*dc_norm(l,i2+nres))
30934 pom3=diffnorm4(l)+facd3*(diffnorm4(l)-scal3e*dc_norm(l,i3+nres))
30936 gradcatangc(l,i1)=gradcatangc(l,i1)&
30937 +det1ij*sssmintot*(diff2(l)-diffnorm1(l)*cosom1*dista2)/(dista2*dista1)+&
30938 dephiij*sssmintot*(diff3(l)-diffnorm1(l)*cosom12*dista3)/(dista3*dista1)&
30939 +ene*sss2mingrad1*diffnorm1(l)*sss2min2*sss2min3
30942 gradcatangc(l,i2)=gradcatangc(l,i2)+(&
30943 det1ij*(diff1(l)-diffnorm2(l)*cosom1*dista1)/(dista2*dista1)+&
30944 det2ij*(-diff3(l)+mindiffnorm2(l)*cosom2*dista3)/(dista3*dista2)&
30945 -det2ij*(-diff2(l)-diffnorm3(l)*cosom2*dista2)/(dista3*dista2)&
30946 -dephiij*(diff1(l)-diffnorm3(l)*cosom12*dista1)/(dista3*dista1))*sssmintot&
30947 +ene*sss2mingrad2*diffnorm2(l)*sss2min1*sss2min3
30951 gradcatangc(l,i3)=gradcatangc(l,i3)&
30952 +det2ij*(-diff2(l)-diffnorm3(l)*cosom2*dista2)/(dista3*dista2)*sssmintot&
30953 +dephiij*(diff1(l)-diffnorm3(l)*cosom12*dista1)/(dista3*dista1)*sssmintot&
30954 +ene*sss2mingrad3*diffnorm4(l)*sss2min1*sss2min2
30957 gradcatangc(l,j1)=gradcatangc(l,j1)-&
30958 sssmintot*(det1ij*(diff2(l)-diffnorm1(l)*cosom1*dista2)/(dista2*dista1)+&
30959 dephiij*(diff3(l)-diffnorm1(l)*cosom12*dista3)/(dista3*dista1))&
30960 -(det1ij*(diff1(l)-diffnorm2(l)*cosom1*dista1)/(dista1*dista2)+&
30961 det2ij*(-diff3(l)+mindiffnorm2(l)*cosom2*dista3)/(dista3*dista2))*sssmintot&
30962 -ene*sss2mingrad1*diffnorm1(l)*sss2min2*sss2min3&
30963 -ene*sss2mingrad2*diffnorm2(l)*sss2min1*sss2min3&
30964 -ene*sss2mingrad3*diffnorm4(l)*sss2min1*sss2min2
30967 gradcatangx(l,i1)=gradcatangx(l,i1)+(det1ij/(dista2*dista1)*&
30968 (acatshiftdsc(ityptrani1,ityptranj1)*diff2(l)+&
30969 facd1*(diff2(l)-scal1b*dc_norm(l,i1+nres)*dista2)-&
30970 cosom1*dista2/dista1*&
30971 (acatshiftdsc(ityptrani1,ityptranj1)*diff1(l)+&
30972 facd1*(diff1(l)-scal1a*dc_norm(l,i1+nres)*dista1)))&
30973 +dephiij/(dista3*dista1)*&
30974 (acatshiftdsc(ityptrani1,ityptranj1)*diff3(l)+&
30975 facd1*(diff3(l)-scal1c*dc_norm(l,i1+nres)*dista3)-&
30976 cosom12*dista3/dista1*&
30977 (acatshiftdsc(ityptrani1,ityptranj1)*diff1(l)+&
30978 facd1*(diff1(l)-scal1a*dc_norm(l,i1+nres)*dista1))))*sssmintot&
30979 +ene*sss2mingrad1*sss2min2*sss2min3*(pom1+&
30980 diffnorm1(l)*(acatshiftdsc(ityptrani1,ityptranj1)-1.0d0))
30983 gradcatangx(l,i3)=gradcatangx(l,i3)+(&
30984 det2ij/(dista3*dista2)*&
30985 (acatshiftdsc(ityptrani3,ityptranj3)*(-diff2(l))+&
30986 facd3*(-diff2(l)-scal3b*dc_norm(l,i3+nres)*dista2)-&
30987 cosom2*dista2/dista3*&
30988 (acatshiftdsc(ityptrani3,ityptranj3)*diff3(l)+&
30989 facd3*(diff3(l)-scal3c*dc_norm(l,i3+nres)*dista3)))&
30990 +dephiij/(dista3*dista1)*&
30991 (acatshiftdsc(ityptrani3,ityptranj3)*diff1(l)+&
30992 facd3*(diff1(l)-scal3a*dc_norm(l,i3+nres)*dista1)-&
30993 cosom12*dista1/dista3*&
30994 (acatshiftdsc(ityptrani3,ityptranj3)*diff3(l)+&
30995 facd3*(diff3(l)-scal3c*dc_norm(l,i3+nres)*dista3))))*sssmintot&
30996 +ene*sss2mingrad3*sss2min2*sss2min1*(pom3+&
30997 diffnorm4(l)*(acatshiftdsc(ityptrani3,ityptranj3)-1.0d0))
31000 gradcatangx(l,i2)=gradcatangx(l,i2)+(&!
31001 det1ij/(dista2*dista1)*&!
31002 (acatshiftdsc(ityptrani2,ityptranj2)*diff1(l)&!
31003 +facd2*(diff1(l)-scal2a*dc_norm(l,i2+nres)*dista1)&
31004 -cosom1*dista1/dista2*&!
31005 (acatshiftdsc(ityptrani2,ityptranj2)*diff2(l)+&!
31006 facd2*(diff2(l)-scal2b*dc_norm(l,i2+nres)*dista2)))+&
31007 det2ij/(dista3*dista2)*&!
31008 (acatshiftdsc(ityptrani2,ityptranj2)*diff2(l)+&!
31009 facd2*(diff2(l)-scal2b*dc_norm(l,i2+nres)*dista2)&
31010 -(acatshiftdsc(ityptrani2,ityptranj2)*diff3(l)+&!
31011 facd2*(diff3(l)-scal2c*dc_norm(l,i2+nres)*dista3))&
31012 -cosom2*dista3/dista2*&!
31013 (acatshiftdsc(ityptrani2,ityptranj2)*diff2(l)+&!
31014 facd2*(diff2(l)-scal2b*dc_norm(l,i2+nres)*dista2))&
31015 +cosom2*dista2/dista3*&!
31016 (acatshiftdsc(ityptrani2,ityptranj2)*diff3(l)+&!
31017 facd2*(diff3(l)-scal2c*dc_norm(l,i2+nres)*dista3)))&
31018 +dephiij/(dista3*dista1)*&!
31019 (-(acatshiftdsc(ityptrani2,ityptranj2)*diff1(l)+&!
31020 facd2*(diff1(l)-scal2a*dc_norm(l,i2+nres)*dista1))+&
31021 cosom12*dista1/dista3*&!
31022 (acatshiftdsc(ityptrani2,ityptranj2)*diff3(l)+&!
31023 facd2*(diff3(l)-scal2c*dc_norm(l,i2+nres)*dista3))))*sssmintot&
31024 +ene*sss2mingrad2*sss2min3*sss2min1*(pom2+&
31025 diffnorm2(l)*(acatshiftdsc(ityptrani2,ityptranj2)-1.0d0))
31029 ! print *,i1,i2,i3,j1,j2,j3,"tors",ene,sinaux,cosphi
31030 ! print *,"param",agamacattran(1,ityptrani2,ityptranj2),ityptranj2,ityptrani2
31031 ecation_protang=ecation_protang+ene*sssmintot
31038 !--------------------------------------------------------------------------
31039 !c------------------------------------------------------------------------------
31040 double precision function mytschebyshev(m,n,x,y,yt)
31043 double precision x(n),y,yt,yy(0:100),aux
31044 !c Tschebyshev polynomial in y multiplied by sin(t1)sin(t2) (yt).
31045 !c Note that the first term is omitted
31046 !c m=0: the constant term is included
31047 !c m=1: the constant term is not included
31051 yy(i)=2*yy(1)*yy(i-1)-yy(i-2)*yt*yt
31057 !c print *,(yy(i),i=1,n)
31061 !C--------------------------------------------------------------------------
31062 !C--------------------------------------------------------------------------
31063 subroutine mygradtschebyshev(m,n,x,y,yt,fy,fyt)
31066 double precision x(n+1),y,yt,fy,fyt,yy(0:100),yb(0:100), &
31068 !c Derivative of Tschebyshev polynomial in y multiplied by sin(t1)sin(t2) (yt).
31069 !c Note that the first term is omitted
31070 !c m=0: the constant term is included
31071 !c m=1: the constant term is not included
31079 yy(i)=2*yy(1)*yy(i-1)-yy(i-2)*yt*yt
31080 yb(i)=2*yy(i-1)+2*yy(1)*yb(i-1)-yb(i-2)*yt*yt
31081 ybt(i)=2*yy(1)*ybt(i-1)-ybt(i-2)*yt*yt-2*yy(i-2)*yt
31087 fyt=fyt+x(i)*ybt(i)
31091 subroutine fodstep(nsteps)
31092 use geometry_data, only: c, nres, theta, alph
31093 use geometry, only:alpha,beta,dist
31094 integer, intent(in) :: nsteps
31095 integer idxtomod, j, i
31096 double precision RD0, RD1, fi
31097 ! double precision alpha
31098 ! double precision beta
31099 ! double precision dist
31100 ! double precision compute_RD
31101 double precision TT
31103 !c ! Założenia: dla łańcucha zapisanego w tablicy c zawierającego
31104 !c ! nres elementów CA i CB da się wyznaczyć kąty płaskie
31105 !c ! theta (procedura Alpha) i kąty torsyjne (procedura beta),
31106 !c ! zapisywane w tablicach theta i alph.
31107 !c ! Na podstawie danych z tych tablic da się odtworzyć
31108 !c ! strukturę 3D łańcucha procedurą chainbuild.
31110 ! print *,"fodstep: nres=",nres
31112 ! print *, "RD0before step: ",RD0
31114 !c ! Wyznaczenie kątów theta na podstawie struktury
31115 !c ! zapisanej w tablicy c
31117 TT=alpha(i-2,i-1,i)
31119 !c print *,"TT=",TT
31121 !c ! Wyznaczenie kątów phi na podstawie struktury
31122 !c ! zapisanej w tablicy c
31124 phi(i)=beta(i-3,i-2,i-1,i)
31126 !c ! Wyznaczenie odległości między atomami
31127 !c ! vbld(i)=dist(i-1,i)
31129 vbld(i)=dist(i-1,i)
31131 !c ! losujemy kilka liczb
31132 call random_number(r21)
31133 !c ! r21(1): indeks pozycji do zmiany
31134 !c ! r21(2): kąt (r21(2)/20.0-1/40.0)
31135 !c ! r21(3): wybór tablicy
31137 !c print *, "RD before step: ",RD0
31138 fi = (r21(2)/20.0-1.0/40.0) ! o tyle radianów zmienimy losowy kąt
31139 if (r21(3) .le. 0.5) then
31140 idxtomod = 3+r21(1)*(nres - 2)
31141 theta(idxtomod) = theta(idxtomod)+fi
31142 ! print *,"Zmiana kąta theta(",&
31143 ! idxtomod,") o fi = ",fi
31145 idxtomod = 4+r21(1)*(nres - 3)
31146 phi(idxtomod) = phi(idxtomod)+fi
31147 ! print *,"Zmiana kąta phi(",&
31148 ! idxtomod,") o fi = ",fi
31150 !c ! odtwarzamy łańcuch
31152 !c ! czy coś się polepszyło?
31154 if (RD1 .gt. RD0) then ! nie, wycofujemy zmianę
31155 ! print *, "RD after step: ",RD1," rejected"
31156 if (r21(3) .le. 0.5) then
31157 theta(idxtomod) = theta(idxtomod)-fi
31159 phi(idxtomod) = phi(idxtomod)-fi
31161 call chainbuild ! odtworzenie pierwotnej wersji (bez zmienionego kąta)
31163 ! print *, "RD after step: ",RD1," accepted"
31168 !c-----------------------------------------------------------------------------------------
31169 subroutine orientation_matrix(res) ! obliczenie macierzy oraz przygotowanie ea z tymi przeksztalceniami
31170 use geometry_data, only: c, nres
31171 use energy_data, only: itype
31172 double precision, intent(out) :: res(4,4)
31173 double precision resM(4,4)
31174 double precision M(4,4)
31175 double precision M2(4,4)
31176 integer i, j, maxi, maxj
31177 ! double precision sq
31178 double precision maxd, dd
31179 double precision v1(3)
31180 double precision v2(3)
31181 double precision vecnea(3)
31182 double precision mean_ea(3)
31183 double precision fi
31184 !c ! liczymy atomy efektywne i zapisujemy w tablicy ea
31186 !c if (itype(i,1) .ne. 10) then
31187 if (itype(i,1) .ne. 10) then
31188 ea(1,i) = c(1,i+nres)
31189 ea(2,i) = c(2,i+nres)
31190 ea(3,i) = c(3,i+nres)
31197 call IdentityM(resM)
31198 if (nres .le. 2) then
31199 print *, "nres too small (should be at least 2), stopping"
31206 !c ! szukamy najwiekszej odleglosci miedzy atomami efektywnymi ea
31207 call Dist3d(maxd,v1,v2)
31208 !c ! odleglosc miedzy pierwsza para atomow efektywnych
31219 call Dist3d(dd,v1,v2)
31220 if (dd .gt. maxd) then
31227 vecnea(1)=ea(1,maxi)-ea(1,maxj)
31228 vecnea(2)=ea(2,maxi)-ea(2,maxj)
31229 vecnea(3)=ea(3,maxi)-ea(3,maxj)
31230 if (vecnea(1) .lt. 0) then
31231 vecnea(1) = -vecnea(1)
31232 vecnea(2) = -vecnea(2)
31233 vecnea(3) = -vecnea(3)
31235 !c ! obliczenie kata obrotu wokol osi Z
31236 fi = -atan2(vecnea(2),vecnea(1))
31238 !c ! obliczenie kata obrotu wokol osi Y
31239 fi = atan2(vecnea(3), sqrt(sq(vecnea(1))+sq(vecnea(2))))
31240 call RotateY(M2,fi)
31242 !c ! Przeksztalcamy wszystkie atomy efektywne
31243 !c ! uzyskujac najwieksza odleglosc ulożona wzdluz OX
31244 !c ! ea = transform_eatoms(ea,M)
31249 call tranform_point(v2,v1,M)
31255 !c ! Teraz szukamy najdluzszego rzutu na plaszczyzne YZ
31256 !c ! (czyli w liczeniu odleglosci bierzemy pod uwage tylko wsp. y, z)
31257 maxd = sqrt( sq(ea(2,1)-ea(2,2)) + sq(ea(3,1)-ea(3,2))) ! aktualnie max odl
31258 maxi = 1 ! indeksy atomow
31259 maxj = 2 ! miedzy ktorymi jest max odl (chwilowe)
31262 dd = sqrt( (ea(2,i)-ea(2,j))**2 + (ea(3,i)-ea(3,j))**2)
31263 if (dd .gt. maxd) then
31270 !c ! Teraz obrocimy wszystko wokol OX tak, zeby znaleziony rzut
31271 !c ! byl rownolegly do OY
31272 vecnea(1) = ea(1,maxi)-ea(1,maxj)
31273 vecnea(2) = ea(2,maxi)-ea(2,maxj)
31274 vecnea(3) = ea(3,maxi)-ea(3,maxj)
31275 !c ! jeśli współrzędna vecnea.y < 0, to robimy odwrotnie
31276 if (vecnea(2) .lt. 0) then
31277 vecnea(1) = -vecnea(1)
31278 vecnea(2) = -vecnea(2)
31279 vecnea(3) = -vecnea(3)
31281 !c ! obliczenie kąta obrotu wokół osi X
31282 fi = -atan2(vecnea(3),vecnea(2))
31284 !c ! Przeksztalcamy wszystkie atomy efektywne
31289 call tranform_point(v2,v1,M)
31294 resM = matmul(M,resM) ! zbieramy wynik (sprawdzic kolejnosc M,resM)
31300 mean_ea(1) = mean_ea(1) + ea(1,i)
31301 mean_ea(2) = mean_ea(2) + ea(2,i)
31302 mean_ea(3) = mean_ea(3) + ea(3,i)
31304 v1(1) = -mean_ea(1)/nres
31305 v1(2) = -mean_ea(2)/nres
31306 v1(3) = -mean_ea(3)/nres
31307 call TranslateV(M,v1)
31308 resM = matmul(M,resM)
31311 ea(1,i) = ea(1,i) + v1(1)
31312 ea(2,i) = ea(2,i) + v1(2)
31313 ea(3,i) = ea(3,i) + v1(3)
31316 !c ! wynikowa macierz przeksztalcenia lancucha
31317 !c ! (ale lancuch w ea juz mamy przeksztalcony)
31320 double precision function compute_rd
31321 use geometry_data, only: nres
31322 use energy_data, only: itype
31324 double precision or_mat(4,4)
31325 ! double precision hydrophobicity
31327 double precision cutoff
31328 double precision ho(70000)
31329 double precision ht(70000)
31330 double precision hosum, htsum
31331 double precision marg, sigmax, sigmay, sigmaz
31333 double precision v1(3)
31334 double precision v2(3)
31335 double precision rijdivc, coll, tmpkwadrat, tmppotega, dist
31336 double precision OdivT, OdivR, ot_one, or_one, RD_classic
31337 call orientation_matrix(or_mat)
31338 !c ! tam juz liczy sie tablica ea
31341 !c ! granica oddzialywania w A (powyzej ignorujemy oddzialywanie)
31342 !c ! Najpierw liczymy "obserwowana hydrofobowosc"
31343 hosum = 0.0d0 ! na sume pol ho, do celow pozniejszej normalizacji
31347 if (j .eq. i) then ! nie uwzgledniamy oddzialywania atomu z samym soba
31356 call Dist3d(dist,v1,v2) ! odleglosc miedzy atomami
31357 if (dist .gt. cutoff) then ! za daleko, nie uwzgledniamy
31360 rijdivc = dist / cutoff
31362 tmppotega = rijdivc*rijdivc
31363 tmpkwadrat = tmppotega
31364 coll = coll + 7*tmpkwadrat
31365 tmppotega = tmppotega * tmpkwadrat ! do potęgi 4
31366 coll = coll - 9*tmppotega
31367 tmppotega = tmppotega * tmpkwadrat ! do potęgi 6
31368 coll = coll + 5*tmppotega
31369 tmppotega = tmppotega * tmpkwadrat ! do potęgi 8
31370 coll = coll - tmppotega
31371 !c ! Wersja: Bryliński 2007
31372 !c ! EAtoms[j].collectedhp += EAtoms[i].hyphob*(1 - 0.5 * coll);
31373 !c ! ea$ho[j] = ea$ho[j] + hydrophobicity(ea$resid[i])*(1-0.5*coll)
31374 !c ! Wersja: Banach Konieczny Roterman 2014
31375 !c ! EAtoms[j].collectedhp += (EAtoms[i].hyphob+EAtoms[j].hyphob)*(1 - 0.5 * coll);
31376 !c ponizej bylo itype(i,1) w miejscu itype(i) oraz itype(j,1) w miejscu itype(j)
31377 ho(j) = ho(j) + (hydrophobicity(itype(i,1))+&
31378 hydrophobicity(itype(j,1)))*(1.0d0-0.5_8*coll)
31380 hosum = hosum + ho(j)
31384 ho(i) = ho(i) / hosum
31386 !c ! Koniec liczenia hydrofobowosci obserwowanej (profil ho)
31387 !c ! Teraz liczymy "teoretyczna hydrofobowosc", wedlug kropli i rozkladu Gaussa
31389 !c ! tu zbieramy sume ht, uzyjemy potem do normalizacji
31390 !c ! Ustalimy teraz parametry rozkladu Gaussa, czyli sigmy (srodek jest w (0,0,0)).
31391 !c ! To bedzie (max odl od srodka + margines) / 3, oddzielnie dla kazdej wspolrzednej.
31394 !c ! jeszcze raz zerujemy
31395 !c ! szukamy ekstremalnej wartosci wspolrzednej x (max wart bezwzgl)
31398 if (abs(ea(1,i))>sigmax) then
31399 sigmax = abs(ea(1,i))
31402 sigmax = (marg + sigmax) / 3.0d0
31403 !c ! szukamy ekstremalnej wartosci wspolrzednej y (max wart bezwzgl)
31406 if (abs(ea(2,i))>sigmay) then
31407 sigmay = abs(ea(2,i))
31410 sigmay = (marg + sigmay) / 3.0d0
31411 !c ! szukamy ekstremalnej wartosci wspolrzednej z (max wart bezwzgl)
31414 if (abs(ea(3,i))>sigmaz) then
31415 sigmaz = abs(ea(3,i))
31418 sigmaz = (marg + sigmaz) / 3.0d0
31419 !c !sigmax = (marg + max(abs(max(ea$acoor[,1])), abs(min(ea$acoor[,1]))))/3.0
31420 !c !sigmay = (marg + max(abs(max(ea$acoor[,2])), abs(min(ea$acoor[,2]))))/3.0
31421 !c !sigmaz = (marg + max(abs(max(ea$acoor[,3])), abs(min(ea$acoor[,3]))))/3.0
31422 !c ! print *,"sigmax =",sigmax," sigmay =",sigmay," sigmaz = ",sigmaz
31424 ht(j)= exp(-(ea(1,j))**2/(2*sigmax**2))&
31425 * exp(-(ea(2,j))**2/(2*sigmay**2)) &
31426 * exp(-(ea(3,j))**2/(2*sigmaz**2))
31427 htsum = htsum + ht(j)
31431 ht(i) = ht(i) / htsum
31433 !c ! Teraz liczymy RD
31437 if (ho(j) .ne. 0) then
31438 ot_one = ho(j) * log(ho(j)/ht(j)) / log(2.0d0)
31439 OdivT = OdivT + ot_one
31440 or_one = ho(j) * log(ho(j)/ (1.0d0/neatoms)) / log(2.0_8)
31441 OdivR = OdivR + or_one
31444 RD_classic = OdivT / (OdivT+OdivR)
31445 compute_rd = RD_classic
31448 function hydrophobicity(id) ! do przepisania (bylo: identyfikowanie aa po nazwach)
31450 double precision hydrophobicity
31451 hydrophobicity = 0.0d0
31452 if (id .eq. 1) then
31453 hydrophobicity = 1.000d0 ! CYS
31456 if (id .eq. 2) then
31457 hydrophobicity = 0.828d0 ! MET
31460 if (id .eq. 3) then
31461 hydrophobicity = 0.906d0 ! PHE
31464 if (id .eq. 4) then
31465 hydrophobicity = 0.883d0 ! ILE
31468 if (id .eq. 5) then
31469 hydrophobicity = 0.783d0 ! LEU
31472 if (id .eq. 6) then
31473 hydrophobicity = 0.811d0 ! VAL
31476 if (id .eq. 7) then
31477 hydrophobicity = 0.856d0 ! TRP
31480 if (id .eq. 8) then
31481 hydrophobicity = 0.700d0 ! TYR
31484 if (id .eq. 9) then
31485 hydrophobicity = 0.572d0 ! ALA
31488 if (id .eq. 10) then
31489 hydrophobicity = 0.550d0 ! GLY
31492 if (id .eq. 11) then
31493 hydrophobicity = 0.478d0 ! THR
31496 if (id .eq. 12) then
31497 hydrophobicity = 0.422d0 ! SER
31500 if (id .eq. 13) then
31501 hydrophobicity = 0.250d0 ! GLN
31504 if (id .eq. 14) then
31505 hydrophobicity = 0.278d0 ! ASN
31508 if (id .eq. 15) then
31509 hydrophobicity = 0.083d0 ! GLU
31512 if (id .eq. 16) then
31513 hydrophobicity = 0.167d0 ! ASP
31516 if (id .eq. 17) then
31517 hydrophobicity = 0.628d0 ! HIS
31520 if (id .eq. 18) then
31521 hydrophobicity = 0.272d0 ! ARG
31524 if (id .eq. 19) then
31525 hydrophobicity = 0.000d0 ! LYS
31528 if (id .eq. 20) then
31529 hydrophobicity = 0.300d0 ! PRO
31533 end function hydrophobicity
31534 subroutine mycrossprod(res,b,c)
31536 double precision, intent(out) :: res(3)
31537 double precision, intent(in) :: b(3)
31538 double precision, intent(in) :: c(3)
31539 !c ! Tylko dla wektorów trójwymiarowych, ale nie sprawdzamy tego tutaj
31540 res(1) = b(2)*c(3)-b(3)*c(2)
31541 res(2) = b(3)*c(1)-b(1)*c(3)
31542 res(3) = b(1)*c(2)-b(2)*c(1)
31545 subroutine mydotprod(res,b,c)
31547 double precision, intent(out) :: res
31548 double precision, intent(in) :: b(3)
31549 double precision, intent(in) :: c(3)
31550 !c ! Tylko dla wektorów trójwymiarowych, ale nie sprawdzamy tego tutaj
31551 res = b(1)*c(1)+b(2)*c(2)+b(3)*c(3)
31554 !c ! cosinus k¹ta miêdzy wektorami trójwymiarowymi
31555 subroutine cosfi(res, x, y)
31557 double precision, intent(out) :: res
31558 double precision, intent(in) :: x(3)
31559 double precision, intent(in) :: y(3)
31560 double precision LxLy
31561 LxLy=sqrt(x(1)*x(1)+x(2)*x(2)+x(3)*x(3)) *&
31562 sqrt(y(1)*y(1)+y(2)*y(2)+y(3)*y(3))
31563 if (LxLy==0.0) then
31566 call mydotprod(res,x,y)
31573 subroutine Dist3d(res,v1,v2)
31575 double precision, intent(out) :: res
31576 double precision, intent(in) :: v1(3)
31577 double precision, intent(in) :: v2(3)
31578 ! double precision sq
31579 res = sqrt( sq(v1(1)-v2(1)) + sq(v1(2)-v2(2)) + sq(v1(3)-v2(3)))
31582 !c ! Przeksztalca wsp. 3d uzywajac macierzy przeksztalcenia M (4x4)
31583 subroutine tranform_point(res,v3d,M)
31585 double precision, intent(out) :: res(3)
31586 double precision, intent(in) :: v3d(3)
31587 double precision, intent(in) :: M(4,4)
31589 res(1) = M(1,1)*v3d(1) + M(1,2)*v3d(2) + M(1,3)*v3d(3) + M(1,4)
31590 res(2) = M(2,1)*v3d(1) + M(2,2)*v3d(2) + M(2,3)*v3d(3) + M(2,4)
31591 res(3) = M(3,1)*v3d(1) + M(3,2)*v3d(2) + M(3,3)*v3d(3) + M(3,4)
31594 !c ! TranslateV: macierz translacji o wektor V
31595 subroutine TranslateV(res,V)
31597 double precision, intent(out) :: res(4,4)
31598 double precision, intent(in) :: v(3)
31617 !c ! RotateX: macierz obrotu wokol osi OX o kat fi
31618 subroutine RotateX(res,fi)
31620 double precision, intent(out) :: res(4,4)
31621 double precision, intent(in) :: fi
31628 res(2,3) = -sin(fi)
31640 !c ! RotateY: macierz obrotu wokol osi OY o kat fi
31641 subroutine RotateY(res,fi)
31643 double precision, intent(out) :: res(4,4)
31644 double precision, intent(in) :: fi
31653 res(3,1) = -sin(fi)
31663 !c ! RotateZ: macierz obrotu wokol osi OZ o kat fi
31664 subroutine RotateZ(res,fi)
31666 double precision, intent(out) :: res(4,4)
31667 double precision, intent(in) :: fi
31669 res(1,2) = -sin(fi)
31687 subroutine IdentityM(res)
31689 double precision, intent(out) :: res(4,4)
31708 double precision function sq(x)
31714 !--------------------------------------------------------------------------