1 subroutine etotal(energia,fact)
2 implicit real*8 (a-h,o-z)
4 include 'DIMENSIONS.ZSCOPT'
10 cMS$ATTRIBUTES C :: proc_proc
13 include 'COMMON.IOUNITS'
14 double precision energia(0:max_ene),energia1(0:max_ene+1)
15 include 'COMMON.FFIELD'
16 include 'COMMON.DERIV'
17 include 'COMMON.INTERACT'
18 include 'COMMON.SBRIDGE'
19 include 'COMMON.CHAIN'
20 include 'COMMON.SHIELD'
21 include 'COMMON.CONTROL'
22 include 'COMMON.TORCNSTR'
23 double precision fact(6)
24 c write(iout, '(a,i2)')'Calling etotal ipot=',ipot
26 cd print *,'nnt=',nnt,' nct=',nct
28 C Compute the side-chain and electrostatic interaction energy
30 goto (101,102,103,104,105) ipot
31 C Lennard-Jones potential.
32 101 call elj(evdw,evdw_t)
33 cd print '(a)','Exit ELJ'
35 C Lennard-Jones-Kihara potential (shifted).
36 102 call eljk(evdw,evdw_t)
38 C Berne-Pechukas potential (dilated LJ, angular dependence).
39 103 call ebp(evdw,evdw_t)
41 C Gay-Berne potential (shifted LJ, angular dependence).
42 104 call egb(evdw,evdw_t)
44 C Gay-Berne-Vorobjev potential (shifted LJ, angular dependence).
45 105 call egbv(evdw,evdw_t)
46 C write(iout,*) 'po elektostatyce'
48 C Calculate electrostatic (H-bonding) energy of the main chain.
52 if (shield_mode.eq.1) then
54 else if (shield_mode.eq.2) then
57 call eelec(ees,evdw1,eel_loc,eello_turn3,eello_turn4)
58 C write(iout,*) 'po eelec'
60 C Calculate excluded-volume interaction energy between peptide groups
63 call escp(evdw2,evdw2_14)
65 c Calculate the bond-stretching energy
69 C write (iout,*) "estr",estr
71 C Calculate the disulfide-bridge and other energy and the contributions
72 C from other distance constraints.
73 cd print *,'Calling EHPB'
75 cd print *,'EHPB exitted succesfully.'
77 C Calculate the virtual-bond-angle energy.
79 C print *,'Bend energy finished.'
81 if (tor_mode.eq.0) then
84 C ebend kcc is Kubo cumulant clustered rigorous attemp to derive the
92 if (with_theta_constr) call etheta_constr(ethetacnstr)
93 c call ebend(ebe,ethetacnstr)
94 cd print *,'Bend energy finished.'
96 C Calculate the SC local energy.
99 C print *,'SCLOC energy finished.'
101 C Calculate the virtual-bond torsional energy.
103 if (wtor.gt.0.0d0) then
104 if (tor_mode.eq.0) then
105 call etor(etors,fact(1))
107 C etor kcc is Kubo cumulant clustered rigorous attemp to derive the
109 call etor_kcc(etors,fact(1))
115 if (ndih_constr.gt.0) call etor_constr(edihcnstr)
116 c print *,"Processor",myrank," computed Utor"
118 C 6/23/01 Calculate double-torsional energy
120 if ((wtor_d.gt.0.0d0).and.(tor_mode.eq.0)) then
121 call etor_d(etors_d,fact(2))
125 c print *,"Processor",myrank," computed Utord"
127 call eback_sc_corr(esccor)
129 if (wliptran.gt.0) then
130 call Eliptransfer(eliptran)
134 C 12/1/95 Multi-body terms
138 if (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0
139 & .or. wturn6.gt.0.0d0) then
140 c write(iout,*)"calling multibody_eello"
141 call multibody_eello(ecorr,ecorr5,ecorr6,eturn6,n_corr,n_corr1)
142 c write (iout,*) 'n_corr=',n_corr,' n_corr1=',n_corr1
143 c write (iout,*) ecorr,ecorr5,ecorr6,eturn6
150 if (wcorr4.eq.0.0d0 .and. wcorr.gt.0.0d0) then
151 c write (iout,*) "Calling multibody_hbond"
152 call multibody_hb(ecorr,ecorr5,ecorr6,n_corr,n_corr1)
154 c write (iout,*) "From Esaxs: Esaxs_constr",Esaxs_constr
155 if (nsaxs.gt.0 .and. saxs_mode.eq.0) then
156 call e_saxs(Esaxs_constr)
157 c write (iout,*) "From Esaxs: Esaxs_constr",Esaxs_constr
158 else if (nsaxs.gt.0 .and. saxs_mode.gt.0) then
159 call e_saxsC(Esaxs_constr)
160 c write (iout,*) "From EsaxsC: Esaxs_constr",Esaxs_constr
165 c write (iout,*) "ft(6)",fact(6)," evdw",evdw," evdw_t",evdw_t
167 if (shield_mode.gt.0) then
168 etot=fact(1)*wsc*(evdw+fact(6)*evdw_t)+fact(1)*wscp*evdw2
170 & +fact(1)*wvdwpp*evdw1
171 & +wang*ebe+wtor*fact(1)*etors+wscloc*escloc
172 & +wstrain*ehpb+wcorr*fact(3)*ecorr+wcorr5*fact(4)*ecorr5
173 & +wcorr6*fact(5)*ecorr6+wturn4*fact(3)*eello_turn4
174 & +wturn3*fact(2)*eello_turn3+wturn6*fact(5)*eturn6
175 & +wel_loc*fact(2)*eel_loc+edihcnstr+wtor_d*fact(2)*etors_d
176 & +wbond*estr+wsccor*fact(1)*esccor+ethetacnstr+wsaxs*esaxs_constr
177 & +wliptran*eliptran*esaxs_constr
179 etot=wsc*(evdw+fact(6)*evdw_t)+wscp*evdw2+welec*fact(1)*ees
181 & +wang*ebe+wtor*fact(1)*etors+wscloc*escloc
182 & +wstrain*ehpb+wcorr*fact(3)*ecorr+wcorr5*fact(4)*ecorr5
183 & +wcorr6*fact(5)*ecorr6+wturn4*fact(3)*eello_turn4
184 & +wturn3*fact(2)*eello_turn3+wturn6*fact(5)*eturn6
185 & +wel_loc*fact(2)*eel_loc+edihcnstr+wtor_d*fact(2)*etors_d
186 & +wbond*estr+wsccor*fact(1)*esccor+ethetacnstr
187 & +wliptran*eliptran+wsaxs*esaxs_constr
190 if (shield_mode.gt.0) then
191 etot=fact(1)wsc*(evdw+fact(6)*evdw_t)+fact(1)*wscp*evdw2
192 & +welec*fact(1)*(ees+evdw1)
193 & +wang*ebe+wtor*fact(1)*etors+wscloc*escloc
194 & +wstrain*ehpb+wcorr*fact(3)*ecorr+wcorr5*fact(4)*ecorr5
195 & +wcorr6*fact(5)*ecorr6+wturn4*fact(3)*eello_turn4
196 & +wturn3*fact(2)*eello_turn3+wturn6*fact(5)*eturn6
197 & +wel_loc*fact(2)*eel_loc+edihcnstr+wtor_d*fact(2)*etors_d
198 & +wbond*estr+wsccor*fact(1)*esccor+ethetacnstr
199 & +wliptran*eliptran+wsaxs*esaxs_constr
201 etot=wsc*(evdw+fact(6)*evdw_t)+wscp*evdw2
202 & +welec*fact(1)*(ees+evdw1)
203 & +wang*ebe+wtor*fact(1)*etors+wscloc*escloc
204 & +wstrain*ehpb+wcorr*fact(3)*ecorr+wcorr5*fact(4)*ecorr5
205 & +wcorr6*fact(5)*ecorr6+wturn4*fact(3)*eello_turn4
206 & +wturn3*fact(2)*eello_turn3+wturn6*fact(5)*eturn6
207 & +wel_loc*fact(2)*eel_loc+edihcnstr+wtor_d*fact(2)*etors_d
208 & +wbond*estr+wsccor*fact(1)*esccor+ethetacnstr
209 & +wliptran*eliptran+wsaxs*esaxs_constr
215 energia(2)=evdw2-evdw2_14
232 energia(8)=eello_turn3
233 energia(9)=eello_turn4
242 energia(20)=edihcnstr
244 energia(24)=ethetacnstr
246 energia(26)=esaxs_constr
250 if (isnan(etot).ne.0) energia(0)=1.0d+99
252 if (isnan(etot)) energia(0)=1.0d+99
257 idumm=proc_proc(etot,i)
259 call proc_proc(etot,i)
261 if(i.eq.1)energia(0)=1.0d+99
267 call enerprint(energia,fact)
271 C Sum up the components of the Cartesian gradient.
276 if (shield_mode.eq.0) then
277 gradc(j,i,icg)=wsc*gvdwc(j,i)+wscp*gvdwc_scp(j,i)+
278 & welec*fact(1)*gelc(j,i)+wvdwpp*gvdwpp(j,i)+
280 & wstrain*ghpbc(j,i)+
281 & wcorr*fact(3)*gradcorr(j,i)+
282 & wel_loc*fact(2)*gel_loc(j,i)+
283 & wturn3*fact(2)*gcorr3_turn(j,i)+
284 & wturn4*fact(3)*gcorr4_turn(j,i)+
285 & wcorr5*fact(4)*gradcorr5(j,i)+
286 & wcorr6*fact(5)*gradcorr6(j,i)+
287 & wturn6*fact(5)*gcorr6_turn(j,i)+
288 & wsccor*fact(2)*gsccorc(j,i)
289 & +wliptran*gliptranc(j,i)
290 gradx(j,i,icg)=wsc*gvdwx(j,i)+wscp*gradx_scp(j,i)+
292 & wstrain*ghpbx(j,i)+wcorr*gradxorr(j,i)+
293 & wsccor*fact(2)*gsccorx(j,i)
294 & +wliptran*gliptranx(j,i)
296 gradc(j,i,icg)=fact(1)*wsc*gvdwc(j,i)
297 & +fact(1)*wscp*gvdwc_scp(j,i)+
298 & welec*fact(1)*gelc(j,i)+fact(1)*wvdwpp*gvdwpp(j,i)+
300 & wstrain*ghpbc(j,i)+
301 & wcorr*fact(3)*gradcorr(j,i)+
302 & wel_loc*fact(2)*gel_loc(j,i)+
303 & wturn3*fact(2)*gcorr3_turn(j,i)+
304 & wturn4*fact(3)*gcorr4_turn(j,i)+
305 & wcorr5*fact(4)*gradcorr5(j,i)+
306 & wcorr6*fact(5)*gradcorr6(j,i)+
307 & wturn6*fact(5)*gcorr6_turn(j,i)+
308 & wsccor*fact(2)*gsccorc(j,i)
309 & +wliptran*gliptranc(j,i)
310 & +welec*gshieldc(j,i)
311 & +welec*gshieldc_loc(j,i)
312 & +wcorr*gshieldc_ec(j,i)
313 & +wcorr*gshieldc_loc_ec(j,i)
314 & +wturn3*gshieldc_t3(j,i)
315 & +wturn3*gshieldc_loc_t3(j,i)
316 & +wturn4*gshieldc_t4(j,i)
317 & +wturn4*gshieldc_loc_t4(j,i)
318 & +wel_loc*gshieldc_ll(j,i)
319 & +wel_loc*gshieldc_loc_ll(j,i)
321 gradx(j,i,icg)=fact(1)*wsc*gvdwx(j,i)
322 & +fact(1)*wscp*gradx_scp(j,i)+
324 & wstrain*ghpbx(j,i)+wcorr*gradxorr(j,i)+
325 & wsccor*fact(2)*gsccorx(j,i)
326 & +wliptran*gliptranx(j,i)
327 & +welec*gshieldx(j,i)
328 & +wcorr*gshieldx_ec(j,i)
329 & +wturn3*gshieldx_t3(j,i)
330 & +wturn4*gshieldx_t4(j,i)
331 & +wel_loc*gshieldx_ll(j,i)
339 if (shield_mode.eq.0) then
340 gradc(j,i,icg)=wsc*gvdwc(j,i)+wscp*gvdwc_scp(j,i)+
341 & welec*fact(1)*gelc(j,i)+wstrain*ghpbc(j,i)+
343 & wcorr*fact(3)*gradcorr(j,i)+
344 & wel_loc*fact(2)*gel_loc(j,i)+
345 & wturn3*fact(2)*gcorr3_turn(j,i)+
346 & wturn4*fact(3)*gcorr4_turn(j,i)+
347 & wcorr5*fact(4)*gradcorr5(j,i)+
348 & wcorr6*fact(5)*gradcorr6(j,i)+
349 & wturn6*fact(5)*gcorr6_turn(j,i)+
350 & wsccor*fact(2)*gsccorc(j,i)
351 & +wliptran*gliptranc(j,i)
352 gradx(j,i,icg)=wsc*gvdwx(j,i)+wscp*gradx_scp(j,i)+
354 & wstrain*ghpbx(j,i)+wcorr*gradxorr(j,i)+
355 & wsccor*fact(1)*gsccorx(j,i)
356 & +wliptran*gliptranx(j,i)
358 gradc(j,i,icg)=fact(1)*wsc*gvdwc(j,i)+
359 & fact(1)*wscp*gvdwc_scp(j,i)+
360 & welec*fact(1)*gelc(j,i)+wstrain*ghpbc(j,i)+
362 & wcorr*fact(3)*gradcorr(j,i)+
363 & wel_loc*fact(2)*gel_loc(j,i)+
364 & wturn3*fact(2)*gcorr3_turn(j,i)+
365 & wturn4*fact(3)*gcorr4_turn(j,i)+
366 & wcorr5*fact(4)*gradcorr5(j,i)+
367 & wcorr6*fact(5)*gradcorr6(j,i)+
368 & wturn6*fact(5)*gcorr6_turn(j,i)+
369 & wsccor*fact(2)*gsccorc(j,i)
370 & +wliptran*gliptranc(j,i)
371 & +welec*gshieldc(j,i)
372 & +welec*gshieldc_loc(j,i)
373 & +wcorr*gshieldc_ec(j,i)
374 & +wcorr*gshieldc_loc_ec(j,i)
375 & +wturn3*gshieldc_t3(j,i)
376 & +wturn3*gshieldc_loc_t3(j,i)
377 & +wturn4*gshieldc_t4(j,i)
378 & +wturn4*gshieldc_loc_t4(j,i)
379 & +wel_loc*gshieldc_ll(j,i)
380 & +wel_loc*gshieldc_loc_ll(j,i)
382 gradx(j,i,icg)=fact(1)*wsc*gvdwx(j,i)+
383 & fact(1)*wscp*gradx_scp(j,i)+
385 & wstrain*ghpbx(j,i)+wcorr*gradxorr(j,i)+
386 & wsccor*fact(1)*gsccorx(j,i)
387 & +wliptran*gliptranx(j,i)
388 & +welec*gshieldx(j,i)
389 & +wcorr*gshieldx_ec(j,i)
390 & +wturn3*gshieldx_t3(j,i)
391 & +wturn4*gshieldx_t4(j,i)
392 & +wel_loc*gshieldx_ll(j,i)
401 gloc(i,icg)=gloc(i,icg)+wcorr*fact(3)*gcorr_loc(i)
402 & +wcorr5*fact(4)*g_corr5_loc(i)
403 & +wcorr6*fact(5)*g_corr6_loc(i)
404 & +wturn4*fact(3)*gel_loc_turn4(i)
405 & +wturn3*fact(2)*gel_loc_turn3(i)
406 & +wturn6*fact(5)*gel_loc_turn6(i)
407 & +wel_loc*fact(2)*gel_loc_loc(i)
408 c & +wsccor*fact(1)*gsccor_loc(i)
409 c BYLA ROZNICA Z CLUSTER< OSTATNIA LINIA DODANA
412 if (dyn_ss) call dyn_set_nss
415 C------------------------------------------------------------------------
416 subroutine enerprint(energia,fact)
417 implicit real*8 (a-h,o-z)
419 include 'DIMENSIONS.ZSCOPT'
420 include 'COMMON.IOUNITS'
421 include 'COMMON.FFIELD'
422 include 'COMMON.SBRIDGE'
423 include 'COMMON.CONTROL'
424 double precision energia(0:max_ene),fact(6)
426 evdw=energia(1)+fact(6)*energia(21)
428 evdw2=energia(2)+energia(17)
440 eello_turn3=energia(8)
441 eello_turn4=energia(9)
442 eello_turn6=energia(10)
449 edihcnstr=energia(20)
451 ethetacnstr=energia(24)
455 if (shield_mode.gt.0) then
456 write (iout,10) evdw,wsc*fact(1),evdw2,wscp*fact(1),ees,
457 & welec*fact(1),evdw1,wvdwpp*fact(1),
458 & estr,wbond,ebe,wang,escloc,wscloc,etors,wtor*fact(1),
459 & etors_d,wtor_d*fact(2),ehpb,wstrain,
460 & ecorr,wcorr*fact(3),ecorr5,wcorr5*fact(4),ecorr6,wcorr6*fact(5),
461 & eel_loc,wel_loc*fact(2),eello_turn3,wturn3*fact(2),
462 & eello_turn4,wturn4*fact(3),eello_turn6,wturn6*fact(5),
463 & esccor,wsccor*fact(1),edihcnstr,ethetacnstr,ebr*nss,
464 & eliptran,wliptran,esaxs,wsaxs,etot
466 write (iout,10) evdw,wsc,evdw2,wscp,ees,welec*fact(1),evdw1,
468 & estr,wbond,ebe,wang,escloc,wscloc,etors,wtor*fact(1),
469 & etors_d,wtor_d*fact(2),ehpb,wstrain,
470 & ecorr,wcorr*fact(3),ecorr5,wcorr5*fact(4),ecorr6,wcorr6*fact(5),
471 & eel_loc,wel_loc*fact(2),eello_turn3,wturn3*fact(2),
472 & eello_turn4,wturn4*fact(3),eello_turn6,wturn6*fact(5),
473 & esccor,wsccor*fact(1),edihcnstr,ethetacnstr,ebr*nss,
474 & eliptran,wliptran,esaxs,wsaxs,etot
476 10 format (/'Virtual-chain energies:'//
477 & 'EVDW= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC-SC)'/
478 & 'EVDW2= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC-p)'/
479 & 'EES= ',1pE16.6,' WEIGHT=',1pD16.6,' (p-p)'/
480 & 'EVDWPP=',1pE16.6,' WEIGHT=',1pD16.6,' (p-p VDW)'/
481 & 'ESTR= ',1pE16.6,' WEIGHT=',1pD16.6,' (stretching)'/
482 & 'EBE= ',1pE16.6,' WEIGHT=',1pD16.6,' (bending)'/
483 & 'ESC= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC local)'/
484 & 'ETORS= ',1pE16.6,' WEIGHT=',1pD16.6,' (torsional)'/
485 & 'ETORSD=',1pE16.6,' WEIGHT=',1pD16.6,' (double torsional)'/
486 & 'EHBP= ',1pE16.6,' WEIGHT=',1pD16.6,
487 & ' (SS bridges & dist. cnstr.)'/
488 & 'ECORR4=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
489 & 'ECORR5=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
490 & 'ECORR6=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
491 & 'EELLO= ',1pE16.6,' WEIGHT=',1pD16.6,' (electrostatic-local)'/
492 & 'ETURN3=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 3rd order)'/
493 & 'ETURN4=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 4th order)'/
494 & 'ETURN6=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 6th order)'/
495 & 'ESCCOR=',1pE16.6,' WEIGHT=',1pD16.6,' (backbone-rotamer corr)'/
496 & 'EDIHC= ',1pE16.6,' (virtual-bond dihedral angle restraints)'/
497 & 'ETHETC=',1pE16.6,' (virtual-bond angle restraints)'/
498 & 'ESS= ',1pE16.6,' (disulfide-bridge intrinsic energy)'/
499 & 'ELT= ',1pE16.6,' WEIGHT=',1pD16.6,' (Lipid transfer)'/
500 & 'E_SAXS=',1pE16.6,' WEIGHT=',1pD16.6,' (SAXS restraints)'/
501 & 'ETOT= ',1pE16.6,' (total)')
503 if (shield_mode.gt.0) then
504 write (iout,10) evdw,wsc*fact(1),evdw2,wscp*fact(2),ees,
505 & welec*fact(1),estr,wbond,
506 & ebe,wang,escloc,wscloc,etors,wtor*fact(1),etors_d,wtor_d*fact2,
507 & ehpb,wstrain,ecorr,wcorr*fact(3),ecorr5,wcorr5*fact(4),
508 & ecorr6,wcorr6*fact(5),eel_loc,wel_loc*fact(2),
509 & eello_turn3,wturn3*fact(2),eello_turn4,wturn4*fact(3),
510 & eello_turn6,wturn6*fact(5),esccor*fact(1),wsccor,
511 & edihcnstr,ethetacnstr,ebr*nss,eliptran,wliptran,esaxs,wsaxs,etot
513 write (iout,10) evdw,wsc,evdw2,wscp,ees,welec*fact(1),estr,wbond,
514 & ebe,wang,escloc,wscloc,etors,wtor*fact(1),etors_d,wtor_d*fact2,
515 & ehpb,wstrain,ecorr,wcorr*fact(3),ecorr5,wcorr5*fact(4),
516 & ecorr6,wcorr6*fact(5),eel_loc,wel_loc*fact(2),
517 & eello_turn3,wturn3*fact(2),eello_turn4,wturn4*fact(3),
518 & eello_turn6,wturn6*fact(5),esccor*fact(1),wsccor,
519 & edihcnstr,ethetacnstr,ebr*nss,eliptran,wliptran,esaxs,wsaxs,etot
521 10 format (/'Virtual-chain energies:'//
522 & 'EVDW= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC-SC)'/
523 & 'EVDW2= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC-p)'/
524 & 'EES= ',1pE16.6,' WEIGHT=',1pD16.6,' (p-p)'/
525 & 'EVDWPP=',1pE16.6,' WEIGHT=',1pD16.6,' (p-p VDW)'/
526 & 'ESTR= ',1pE16.6,' WEIGHT=',1pD16.6,' (stretching)'/
527 & 'EBE= ',1pE16.6,' WEIGHT=',1pD16.6,' (bending)'/
528 & 'ESC= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC local)'/
529 & 'ETORS= ',1pE16.6,' WEIGHT=',1pD16.6,' (torsional)'/
530 & 'ETORSD=',1pE16.6,' WEIGHT=',1pD16.6,' (double torsional)'/
531 & 'EHBP= ',1pE16.6,' WEIGHT=',1pD16.6,
532 & ' (SS bridges & dist. cnstr.)'/
533 & 'ECORR4=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
534 & 'ECORR5=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
535 & 'ECORR6=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
536 & 'EELLO= ',1pE16.6,' WEIGHT=',1pD16.6,' (electrostatic-local)'/
537 & 'ETURN3=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 3rd order)'/
538 & 'ETURN4=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 4th order)'/
539 & 'ETURN6=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 6th order)'/
540 & 'ESCCOR=',1pE16.6,' WEIGHT=',1pD16.6,' (backbone-rotamer corr)'/
541 & 'EDIHC= ',1pE16.6,' (virtual-bond dihedral angle restraints)'/
542 & 'ETHETC=',1pE16.6,' (virtual-bond angle restraints)'/
543 & 'ESS= ',1pE16.6,' (disulfide-bridge intrinsic energy)'/
544 & 'ELT= ',1pE16.6,' WEIGHT=',1pD16.6,' (Lipid transfer)'/
545 & 'E_SAXS=',1pE16.6,' WEIGHT=',1pD16.6,' (SAXS restraints)'/
546 & 'ETOT= ',1pE16.6,' (total)')
550 C-----------------------------------------------------------------------
551 subroutine elj(evdw,evdw_t)
553 C This subroutine calculates the interaction energy of nonbonded side chains
554 C assuming the LJ potential of interaction.
556 implicit real*8 (a-h,o-z)
558 include 'DIMENSIONS.ZSCOPT'
559 include "DIMENSIONS.COMPAR"
560 parameter (accur=1.0d-10)
563 include 'COMMON.LOCAL'
564 include 'COMMON.CHAIN'
565 include 'COMMON.DERIV'
566 include 'COMMON.INTERACT'
567 include 'COMMON.TORSION'
568 include 'COMMON.ENEPS'
569 include 'COMMON.SBRIDGE'
570 include 'COMMON.NAMES'
571 include 'COMMON.IOUNITS'
572 include 'COMMON.CONTACTS'
576 cd print *,'Entering ELJ nnt=',nnt,' nct=',nct,' expon=',expon
580 eneps_temp(j,i)=0.0d0
589 if (itypi.eq.ntyp1) cycle
590 itypi1=iabs(itype(i+1))
597 C Calculate SC interaction energy.
600 cd write (iout,*) 'i=',i,' iint=',iint,' istart=',istart(i,iint),
601 cd & 'iend=',iend(i,iint)
602 do j=istart(i,iint),iend(i,iint)
604 if (itypj.eq.ntyp1) cycle
608 C Change 12/1/95 to calculate four-body interactions
609 rij=xj*xj+yj*yj+zj*zj
611 c write (iout,*)'i=',i,' j=',j,' itypi=',itypi,' itypj=',itypj
612 eps0ij=eps(itypi,itypj)
617 ij=icant(itypi,itypj)
619 eneps_temp(1,ij)=eneps_temp(1,ij)+e1/dabs(eps0ij)
620 eneps_temp(2,ij)=eneps_temp(2,ij)+e2/eps0ij
623 cd sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
624 cd epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
625 cd write (iout,'(2(a3,i3,2x),6(1pd12.4)/2(3(1pd12.4),5x)/)')
626 cd & restyp(itypi),i,restyp(itypj),j,aa(itypi,itypj),
627 cd & bb(itypi,itypj),1.0D0/dsqrt(rrij),evdwij,epsi,sigm,
628 cd & (c(k,i),k=1,3),(c(k,j),k=1,3)
629 if (bb.gt.0.0d0) then
636 C Calculate the components of the gradient in DC and X
638 fac=-rrij*(e1+evdwij)
643 gvdwx(k,i)=gvdwx(k,i)-gg(k)
644 gvdwx(k,j)=gvdwx(k,j)+gg(k)
648 gvdwc(l,k)=gvdwc(l,k)+gg(l)
653 C 12/1/95, revised on 5/20/97
655 C Calculate the contact function. The ith column of the array JCONT will
656 C contain the numbers of atoms that make contacts with the atom I (of numbers
657 C greater than I). The arrays FACONT and GACONT will contain the values of
658 C the contact function and its derivative.
660 C Uncomment next line, if the correlation interactions include EVDW explicitly.
661 c if (j.gt.i+1 .and. evdwij.le.0.0D0) then
662 C Uncomment next line, if the correlation interactions are contact function only
663 if (j.gt.i+1.and. eps0ij.gt.0.0D0) then
665 sigij=sigma(itypi,itypj)
666 r0ij=rs0(itypi,itypj)
668 C Check whether the SC's are not too far to make a contact.
671 call gcont(rij,rcut,1.0d0,0.2d0*rcut,fcont,fprimcont)
672 C Add a new contact, if the SC's are close enough, but not too close (r<sigma).
674 if (fcont.gt.0.0D0) then
675 C If the SC-SC distance if close to sigma, apply spline.
676 cAdam call gcont(-rij,-1.03d0*sigij,2.0d0*sigij,1.0d0,
677 cAdam & fcont1,fprimcont1)
678 cAdam fcont1=1.0d0-fcont1
679 cAdam if (fcont1.gt.0.0d0) then
680 cAdam fprimcont=fprimcont*fcont1+fcont*fprimcont1
681 cAdam fcont=fcont*fcont1
683 C Uncomment following 4 lines to have the geometric average of the epsilon0's
684 cga eps0ij=1.0d0/dsqrt(eps0ij)
686 cga gg(k)=gg(k)*eps0ij
688 cga eps0ij=-evdwij*eps0ij
689 C Uncomment for AL's type of SC correlation interactions.
691 num_conti=num_conti+1
693 facont(num_conti,i)=fcont*eps0ij
694 fprimcont=eps0ij*fprimcont/rij
696 cAdam gacont(1,num_conti,i)=-fprimcont*xj+fcont*gg(1)
697 cAdam gacont(2,num_conti,i)=-fprimcont*yj+fcont*gg(2)
698 cAdam gacont(3,num_conti,i)=-fprimcont*zj+fcont*gg(3)
699 C Uncomment following 3 lines for Skolnick's type of SC correlation.
700 gacont(1,num_conti,i)=-fprimcont*xj
701 gacont(2,num_conti,i)=-fprimcont*yj
702 gacont(3,num_conti,i)=-fprimcont*zj
703 cd write (iout,'(2i5,2f10.5)') i,j,rij,facont(num_conti,i)
704 cd write (iout,'(2i3,3f10.5)')
705 cd & i,j,(gacont(kk,num_conti,i),kk=1,3)
711 num_cont(i)=num_conti
716 gvdwc(j,i)=expon*gvdwc(j,i)
717 gvdwx(j,i)=expon*gvdwx(j,i)
721 C******************************************************************************
725 C To save time, the factor of EXPON has been extracted from ALL components
726 C of GVDWC and GRADX. Remember to multiply them by this factor before further
729 C******************************************************************************
732 C-----------------------------------------------------------------------------
733 subroutine eljk(evdw,evdw_t)
735 C This subroutine calculates the interaction energy of nonbonded side chains
736 C assuming the LJK potential of interaction.
738 implicit real*8 (a-h,o-z)
740 include 'DIMENSIONS.ZSCOPT'
741 include "DIMENSIONS.COMPAR"
744 include 'COMMON.LOCAL'
745 include 'COMMON.CHAIN'
746 include 'COMMON.DERIV'
747 include 'COMMON.INTERACT'
748 include 'COMMON.ENEPS'
749 include 'COMMON.IOUNITS'
750 include 'COMMON.NAMES'
755 c print *,'Entering ELJK nnt=',nnt,' nct=',nct,' expon=',expon
758 eneps_temp(j,i)=0.0d0
765 if (itypi.eq.ntyp1) cycle
766 itypi1=iabs(itype(i+1))
771 C Calculate SC interaction energy.
774 do j=istart(i,iint),iend(i,iint)
776 if (itypj.eq.ntyp1) cycle
780 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
782 e_augm=augm(itypi,itypj)*fac_augm
785 r_shift_inv=1.0D0/(rij+r0(itypi,itypj)-sigma(itypi,itypj))
786 fac=r_shift_inv**expon
790 ij=icant(itypi,itypj)
791 eneps_temp(1,ij)=eneps_temp(1,ij)+(e1+a_augm)
792 & /dabs(eps(itypi,itypj))
793 eneps_temp(2,ij)=eneps_temp(2,ij)+e2/eps(itypi,itypj)
794 cd sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
795 cd epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
796 cd write (iout,'(2(a3,i3,2x),8(1pd12.4)/2(3(1pd12.4),5x)/)')
797 cd & restyp(itypi),i,restyp(itypj),j,aa(itypi,itypj),
798 cd & bb(itypi,itypj),augm(itypi,itypj),epsi,sigm,
799 cd & sigma(itypi,itypj),1.0D0/dsqrt(rrij),evdwij,
800 cd & (c(k,i),k=1,3),(c(k,j),k=1,3)
801 if (bb.gt.0.0d0) then
808 C Calculate the components of the gradient in DC and X
810 fac=-2.0D0*rrij*e_augm-r_inv_ij*r_shift_inv*(e1+e1+e2)
815 gvdwx(k,i)=gvdwx(k,i)-gg(k)
816 gvdwx(k,j)=gvdwx(k,j)+gg(k)
820 gvdwc(l,k)=gvdwc(l,k)+gg(l)
830 gvdwc(j,i)=expon*gvdwc(j,i)
831 gvdwx(j,i)=expon*gvdwx(j,i)
837 C-----------------------------------------------------------------------------
838 subroutine ebp(evdw,evdw_t)
840 C This subroutine calculates the interaction energy of nonbonded side chains
841 C assuming the Berne-Pechukas potential of interaction.
843 implicit real*8 (a-h,o-z)
845 include 'DIMENSIONS.ZSCOPT'
846 include "DIMENSIONS.COMPAR"
849 include 'COMMON.LOCAL'
850 include 'COMMON.CHAIN'
851 include 'COMMON.DERIV'
852 include 'COMMON.NAMES'
853 include 'COMMON.INTERACT'
854 include 'COMMON.ENEPS'
855 include 'COMMON.IOUNITS'
856 include 'COMMON.CALC'
858 c double precision rrsave(maxdim)
864 eneps_temp(j,i)=0.0d0
869 c print *,'Entering EBP nnt=',nnt,' nct=',nct,' expon=',expon
870 c if (icall.eq.0) then
878 if (itypi.eq.ntyp1) cycle
879 itypi1=iabs(itype(i+1))
883 dxi=dc_norm(1,nres+i)
884 dyi=dc_norm(2,nres+i)
885 dzi=dc_norm(3,nres+i)
886 dsci_inv=vbld_inv(i+nres)
888 C Calculate SC interaction energy.
891 do j=istart(i,iint),iend(i,iint)
894 if (itypj.eq.ntyp1) cycle
895 dscj_inv=vbld_inv(j+nres)
896 chi1=chi(itypi,itypj)
897 chi2=chi(itypj,itypi)
904 alf12=0.5D0*(alf1+alf2)
905 C For diagnostics only!!!
918 dxj=dc_norm(1,nres+j)
919 dyj=dc_norm(2,nres+j)
920 dzj=dc_norm(3,nres+j)
921 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
922 cd if (icall.eq.0) then
928 C Calculate the angle-dependent terms of energy & contributions to derivatives.
930 C Calculate whole angle-dependent part of epsilon and contributions
932 fac=(rrij*sigsq)**expon2
935 evdwij=eps1*eps2rt*eps3rt*(e1+e2)
936 eps2der=evdwij*eps3rt
937 eps3der=evdwij*eps2rt
938 evdwij=evdwij*eps2rt*eps3rt
939 ij=icant(itypi,itypj)
940 aux=eps1*eps2rt**2*eps3rt**2
941 eneps_temp(1,ij)=eneps_temp(1,ij)+e1*aux
942 & /dabs(eps(itypi,itypj))
943 eneps_temp(2,ij)=eneps_temp(2,ij)+e2*aux/eps(itypi,itypj)
944 if (bb.gt.0.0d0) then
951 sigm=dabs(aa/bb)**(1.0D0/6.0D0)
953 write (iout,'(2(a3,i3,2x),15(0pf7.3))')
954 & restyp(itypi),i,restyp(itypj),j,
955 & epsi,sigm,chi1,chi2,chip1,chip2,
956 & eps1,eps2rt**2,eps3rt**2,1.0D0/dsqrt(sigsq),
957 & om1,om2,om12,1.0D0/dsqrt(rrij),
960 C Calculate gradient components.
961 e1=e1*eps1*eps2rt**2*eps3rt**2
962 fac=-expon*(e1+evdwij)
965 C Calculate radial part of the gradient
969 C Calculate the angular part of the gradient and sum add the contributions
970 C to the appropriate components of the Cartesian gradient.
979 C-----------------------------------------------------------------------------
980 subroutine egb(evdw,evdw_t)
982 C This subroutine calculates the interaction energy of nonbonded side chains
983 C assuming the Gay-Berne potential of interaction.
985 implicit real*8 (a-h,o-z)
987 include 'DIMENSIONS.ZSCOPT'
988 include "DIMENSIONS.COMPAR"
989 include 'COMMON.CONTROL'
992 include 'COMMON.LOCAL'
993 include 'COMMON.CHAIN'
994 include 'COMMON.DERIV'
995 include 'COMMON.NAMES'
996 include 'COMMON.INTERACT'
997 include 'COMMON.ENEPS'
998 include 'COMMON.IOUNITS'
999 include 'COMMON.CALC'
1000 include 'COMMON.SBRIDGE'
1003 integer icant,xshift,yshift,zshift
1007 eneps_temp(j,i)=0.0d0
1010 c print *,'Entering EGB nnt=',nnt,' nct=',nct,' expon=',expon
1014 c if (icall.gt.0) lprn=.true.
1016 do i=iatsc_s,iatsc_e
1017 itypi=iabs(itype(i))
1018 if (itypi.eq.ntyp1) cycle
1019 itypi1=iabs(itype(i+1))
1023 C returning the ith atom to box
1025 if (xi.lt.0) xi=xi+boxxsize
1027 if (yi.lt.0) yi=yi+boxysize
1029 if (zi.lt.0) zi=zi+boxzsize
1030 if ((zi.gt.bordlipbot)
1031 &.and.(zi.lt.bordliptop)) then
1032 C the energy transfer exist
1033 if (zi.lt.buflipbot) then
1034 C what fraction I am in
1036 & ((zi-bordlipbot)/lipbufthick)
1037 C lipbufthick is thickenes of lipid buffore
1038 sslipi=sscalelip(fracinbuf)
1039 ssgradlipi=-sscagradlip(fracinbuf)/lipbufthick
1040 elseif (zi.gt.bufliptop) then
1041 fracinbuf=1.0d0-((bordliptop-zi)/lipbufthick)
1042 sslipi=sscalelip(fracinbuf)
1043 ssgradlipi=sscagradlip(fracinbuf)/lipbufthick
1053 dxi=dc_norm(1,nres+i)
1054 dyi=dc_norm(2,nres+i)
1055 dzi=dc_norm(3,nres+i)
1056 dsci_inv=vbld_inv(i+nres)
1058 C Calculate SC interaction energy.
1060 do iint=1,nint_gr(i)
1061 do j=istart(i,iint),iend(i,iint)
1062 IF (dyn_ss_mask(i).and.dyn_ss_mask(j)) THEN
1063 call dyn_ssbond_ene(i,j,evdwij)
1065 C write (iout,'(a6,2i5,0pf7.3,a3,2f10.3)')
1066 C & 'evdw',i,j,evdwij,' ss',evdw,evdw_t
1067 C triple bond artifac removal
1068 do k=j+1,iend(i,iint)
1069 C search over all next residues
1070 if (dyn_ss_mask(k)) then
1071 C check if they are cysteins
1072 C write(iout,*) 'k=',k
1073 call triple_ssbond_ene(i,j,k,evdwij)
1074 C call the energy function that removes the artifical triple disulfide
1075 C bond the soubroutine is located in ssMD.F
1077 C write (iout,'(a6,2i5,0pf7.3,a3,2f10.3)')
1078 C & 'evdw',i,j,evdwij,'tss',evdw,evdw_t
1079 endif!dyn_ss_mask(k)
1083 itypj=iabs(itype(j))
1084 if (itypj.eq.ntyp1) cycle
1085 dscj_inv=vbld_inv(j+nres)
1086 sig0ij=sigma(itypi,itypj)
1087 chi1=chi(itypi,itypj)
1088 chi2=chi(itypj,itypi)
1095 alf12=0.5D0*(alf1+alf2)
1096 C For diagnostics only!!!
1109 C returning jth atom to box
1111 if (xj.lt.0) xj=xj+boxxsize
1113 if (yj.lt.0) yj=yj+boxysize
1115 if (zj.lt.0) zj=zj+boxzsize
1116 if ((zj.gt.bordlipbot)
1117 &.and.(zj.lt.bordliptop)) then
1118 C the energy transfer exist
1119 if (zj.lt.buflipbot) then
1120 C what fraction I am in
1122 & ((zj-bordlipbot)/lipbufthick)
1123 C lipbufthick is thickenes of lipid buffore
1124 sslipj=sscalelip(fracinbuf)
1125 ssgradlipj=-sscagradlip(fracinbuf)/lipbufthick
1126 elseif (zj.gt.bufliptop) then
1127 fracinbuf=1.0d0-((bordliptop-zj)/lipbufthick)
1128 sslipj=sscalelip(fracinbuf)
1129 ssgradlipj=sscagradlip(fracinbuf)/lipbufthick
1138 aa=aa_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0
1139 & +aa_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
1140 bb=bb_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0
1141 & +bb_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
1142 C if (aa.ne.aa_aq(itypi,itypj)) then
1144 C write(iout,*) "tu,", i,j,aa_aq(itypi,itypj)-aa,
1145 C & bb_aq(itypi,itypj)-bb,
1149 C write(iout,*),aa,aa_lip(itypi,itypj),aa_aq(itypi,itypj)
1150 C checking the distance
1151 dist_init=(xj-xi)**2+(yj-yi)**2+(zj-zi)**2
1156 C finding the closest
1160 xj=xj_safe+xshift*boxxsize
1161 yj=yj_safe+yshift*boxysize
1162 zj=zj_safe+zshift*boxzsize
1163 dist_temp=(xj-xi)**2+(yj-yi)**2+(zj-zi)**2
1164 if(dist_temp.lt.dist_init) then
1174 if (subchap.eq.1) then
1184 dxj=dc_norm(1,nres+j)
1185 dyj=dc_norm(2,nres+j)
1186 dzj=dc_norm(3,nres+j)
1187 c write (iout,*) i,j,xj,yj,zj
1188 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
1190 sss=sscale((1.0d0/rij)/sigma(itypi,itypj))
1191 sssgrad=sscagrad((1.0d0/rij)/sigma(itypi,itypj))
1192 if (sss.le.0.0) cycle
1193 C Calculate angle-dependent terms of energy and contributions to their
1198 sig=sig0ij*dsqrt(sigsq)
1199 rij_shift=1.0D0/rij-sig+sig0ij
1200 C I hate to put IF's in the loops, but here don't have another choice!!!!
1201 if (rij_shift.le.0.0D0) then
1206 c---------------------------------------------------------------
1207 rij_shift=1.0D0/rij_shift
1208 fac=rij_shift**expon
1211 evdwij=eps1*eps2rt*eps3rt*(e1+e2)
1212 eps2der=evdwij*eps3rt
1213 eps3der=evdwij*eps2rt
1214 evdwij=evdwij*eps2rt*eps3rt
1216 evdw=evdw+evdwij*sss
1218 evdw_t=evdw_t+evdwij*sss
1220 ij=icant(itypi,itypj)
1221 aux=eps1*eps2rt**2*eps3rt**2
1222 eneps_temp(1,ij)=eneps_temp(1,ij)+aux*e1
1223 & /dabs(eps(itypi,itypj))
1224 eneps_temp(2,ij)=eneps_temp(2,ij)+aux*e2/eps(itypi,itypj)
1225 c write (iout,*) "i",i," j",j," itypi",itypi," itypj",itypj,
1226 c & " ij",ij," eneps",aux*e1/dabs(eps(itypi,itypj)),
1227 c & aux*e2/eps(itypi,itypj)
1229 sigm=dabs(aa/bb)**(1.0D0/6.0D0)
1233 write (iout,'(2(a3,i3,2x),17(0pf7.3))')
1234 & restyp(itypi),i,restyp(itypj),j,
1235 & epsi,sigm,chi1,chi2,chip1,chip2,
1236 & eps1,eps2rt**2,eps3rt**2,sig,sig0ij,
1237 & om1,om2,om12,1.0D0/rij,1.0D0/rij_shift,
1239 write (iout,*) "partial sum", evdw, evdw_t
1243 if (energy_dec) write (iout,'(a6,2i5,0pf7.3)')
1246 C Calculate gradient components.
1247 e1=e1*eps1*eps2rt**2*eps3rt**2
1248 fac=-expon*(e1+evdwij)*rij_shift
1251 fac=fac+evdwij/sss*sssgrad/sigma(itypi,itypj)*rij
1252 C Calculate the radial part of the gradient
1256 C Calculate angular part of the gradient.
1259 C write(iout,*) "partial sum", evdw, evdw_t
1266 C-----------------------------------------------------------------------------
1267 subroutine egbv(evdw,evdw_t)
1269 C This subroutine calculates the interaction energy of nonbonded side chains
1270 C assuming the Gay-Berne-Vorobjev potential of interaction.
1272 implicit real*8 (a-h,o-z)
1273 include 'DIMENSIONS'
1274 include 'DIMENSIONS.ZSCOPT'
1275 include "DIMENSIONS.COMPAR"
1276 include 'COMMON.GEO'
1277 include 'COMMON.VAR'
1278 include 'COMMON.LOCAL'
1279 include 'COMMON.CHAIN'
1280 include 'COMMON.DERIV'
1281 include 'COMMON.NAMES'
1282 include 'COMMON.INTERACT'
1283 include 'COMMON.ENEPS'
1284 include 'COMMON.IOUNITS'
1285 include 'COMMON.CALC'
1286 common /srutu/ icall
1292 eneps_temp(j,i)=0.0d0
1297 c print *,'Entering EGB nnt=',nnt,' nct=',nct,' expon=',expon
1300 c if (icall.gt.0) lprn=.true.
1302 do i=iatsc_s,iatsc_e
1303 itypi=iabs(itype(i))
1304 if (itypi.eq.ntyp1) cycle
1305 itypi1=iabs(itype(i+1))
1309 dxi=dc_norm(1,nres+i)
1310 dyi=dc_norm(2,nres+i)
1311 dzi=dc_norm(3,nres+i)
1312 dsci_inv=vbld_inv(i+nres)
1314 C Calculate SC interaction energy.
1316 do iint=1,nint_gr(i)
1317 do j=istart(i,iint),iend(i,iint)
1319 itypj=iabs(itype(j))
1320 if (itypj.eq.ntyp1) cycle
1321 dscj_inv=vbld_inv(j+nres)
1322 sig0ij=sigma(itypi,itypj)
1323 r0ij=r0(itypi,itypj)
1324 chi1=chi(itypi,itypj)
1325 chi2=chi(itypj,itypi)
1332 alf12=0.5D0*(alf1+alf2)
1333 C For diagnostics only!!!
1346 dxj=dc_norm(1,nres+j)
1347 dyj=dc_norm(2,nres+j)
1348 dzj=dc_norm(3,nres+j)
1349 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
1351 C Calculate angle-dependent terms of energy and contributions to their
1355 sig=sig0ij*dsqrt(sigsq)
1356 rij_shift=1.0D0/rij-sig+r0ij
1357 C I hate to put IF's in the loops, but here don't have another choice!!!!
1358 if (rij_shift.le.0.0D0) then
1363 c---------------------------------------------------------------
1364 rij_shift=1.0D0/rij_shift
1365 fac=rij_shift**expon
1368 evdwij=eps1*eps2rt*eps3rt*(e1+e2)
1369 eps2der=evdwij*eps3rt
1370 eps3der=evdwij*eps2rt
1371 fac_augm=rrij**expon
1372 e_augm=augm(itypi,itypj)*fac_augm
1373 evdwij=evdwij*eps2rt*eps3rt
1374 if (bb.gt.0.0d0) then
1375 evdw=evdw+evdwij+e_augm
1377 evdw_t=evdw_t+evdwij+e_augm
1379 ij=icant(itypi,itypj)
1380 aux=eps1*eps2rt**2*eps3rt**2
1381 eneps_temp(1,ij)=eneps_temp(1,ij)+aux*(e1+e_augm)
1382 & /dabs(eps(itypi,itypj))
1383 eneps_temp(2,ij)=eneps_temp(2,ij)+aux*e2/eps(itypi,itypj)
1384 c eneps_temp(ij)=eneps_temp(ij)
1385 c & +(evdwij+e_augm)/eps(itypi,itypj)
1387 c sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
1388 c epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
1389 c write (iout,'(2(a3,i3,2x),17(0pf7.3))')
1390 c & restyp(itypi),i,restyp(itypj),j,
1391 c & epsi,sigm,sig,(augm(itypi,itypj)/epsi)**(1.0D0/12.0D0),
1392 c & chi1,chi2,chip1,chip2,
1393 c & eps1,eps2rt**2,eps3rt**2,
1394 c & om1,om2,om12,1.0D0/rij,1.0D0/rij_shift,
1398 C Calculate gradient components.
1399 e1=e1*eps1*eps2rt**2*eps3rt**2
1400 fac=-expon*(e1+evdwij)*rij_shift
1402 fac=rij*fac-2*expon*rrij*e_augm
1403 C Calculate the radial part of the gradient
1407 C Calculate angular part of the gradient.
1415 C-----------------------------------------------------------------------------
1416 subroutine sc_angular
1417 C Calculate eps1,eps2,eps3,sigma, and parts of their derivatives in om1,om2,
1418 C om12. Called by ebp, egb, and egbv.
1420 include 'COMMON.CALC'
1424 om1=dxi*erij(1)+dyi*erij(2)+dzi*erij(3)
1425 om2=dxj*erij(1)+dyj*erij(2)+dzj*erij(3)
1426 om12=dxi*dxj+dyi*dyj+dzi*dzj
1428 C Calculate eps1(om12) and its derivative in om12
1429 faceps1=1.0D0-om12*chiom12
1430 faceps1_inv=1.0D0/faceps1
1431 eps1=dsqrt(faceps1_inv)
1432 C Following variable is eps1*deps1/dom12
1433 eps1_om12=faceps1_inv*chiom12
1434 C Calculate sigma(om1,om2,om12) and the derivatives of sigma**2 in om1,om2,
1439 facsig=om1*chiom1+om2*chiom2-2.0D0*om1om2*chiom12
1440 sigsq=1.0D0-facsig*faceps1_inv
1441 sigsq_om1=(chiom1-chiom12*om2)*faceps1_inv
1442 sigsq_om2=(chiom2-chiom12*om1)*faceps1_inv
1443 sigsq_om12=-chi12*(om1om2*faceps1-om12*facsig)*faceps1_inv**2
1444 C Calculate eps2 and its derivatives in om1, om2, and om12.
1447 chipom12=chip12*om12
1448 facp=1.0D0-om12*chipom12
1450 facp1=om1*chipom1+om2*chipom2-2.0D0*om1om2*chipom12
1451 C Following variable is the square root of eps2
1452 eps2rt=1.0D0-facp1*facp_inv
1453 C Following three variables are the derivatives of the square root of eps
1454 C in om1, om2, and om12.
1455 eps2rt_om1=-4.0D0*(chipom1-chipom12*om2)*facp_inv
1456 eps2rt_om2=-4.0D0*(chipom2-chipom12*om1)*facp_inv
1457 eps2rt_om12=4.0D0*chip12*(om1om2*facp-om12*facp1)*facp_inv**2
1458 C Evaluate the "asymmetric" factor in the VDW constant, eps3
1459 eps3rt=1.0D0-alf1*om1+alf2*om2-alf12*om12
1460 C Calculate whole angle-dependent part of epsilon and contributions
1461 C to its derivatives
1464 C----------------------------------------------------------------------------
1466 implicit real*8 (a-h,o-z)
1467 include 'DIMENSIONS'
1468 include 'DIMENSIONS.ZSCOPT'
1469 include 'COMMON.CHAIN'
1470 include 'COMMON.DERIV'
1471 include 'COMMON.CALC'
1472 double precision dcosom1(3),dcosom2(3)
1473 eom1=eps2der*eps2rt_om1-2.0D0*alf1*eps3der+sigder*sigsq_om1
1474 eom2=eps2der*eps2rt_om2+2.0D0*alf2*eps3der+sigder*sigsq_om2
1475 eom12=evdwij*eps1_om12+eps2der*eps2rt_om12
1476 & -2.0D0*alf12*eps3der+sigder*sigsq_om12
1478 dcosom1(k)=rij*(dc_norm(k,nres+i)-om1*erij(k))
1479 dcosom2(k)=rij*(dc_norm(k,nres+j)-om2*erij(k))
1482 gg(k)=gg(k)+eom1*dcosom1(k)+eom2*dcosom2(k)
1485 gvdwx(k,i)=gvdwx(k,i)-gg(k)
1486 & +(eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,nres+i))
1487 & +eom1*(erij(k)-om1*dc_norm(k,nres+i)))*dsci_inv
1488 gvdwx(k,j)=gvdwx(k,j)+gg(k)
1489 & +(eom12*(dc_norm(k,nres+i)-om12*dc_norm(k,nres+j))
1490 & +eom2*(erij(k)-om2*dc_norm(k,nres+j)))*dscj_inv
1493 C Calculate the components of the gradient in DC and X
1497 gvdwc(l,k)=gvdwc(l,k)+gg(l)
1502 c------------------------------------------------------------------------------
1503 subroutine vec_and_deriv
1504 implicit real*8 (a-h,o-z)
1505 include 'DIMENSIONS'
1506 include 'DIMENSIONS.ZSCOPT'
1507 include 'COMMON.IOUNITS'
1508 include 'COMMON.GEO'
1509 include 'COMMON.VAR'
1510 include 'COMMON.LOCAL'
1511 include 'COMMON.CHAIN'
1512 include 'COMMON.VECTORS'
1513 include 'COMMON.DERIV'
1514 include 'COMMON.INTERACT'
1515 dimension uyder(3,3,2),uzder(3,3,2),vbld_inv_temp(2)
1516 C Compute the local reference systems. For reference system (i), the
1517 C X-axis points from CA(i) to CA(i+1), the Y axis is in the
1518 C CA(i)-CA(i+1)-CA(i+2) plane, and the Z axis is perpendicular to this plane.
1520 c if (i.eq.nres-1 .or. itel(i+1).eq.0) then
1521 if (i.eq.nres-1) then
1522 C Case of the last full residue
1523 C Compute the Z-axis
1524 call vecpr(dc_norm(1,i),dc_norm(1,i-1),uz(1,i))
1525 costh=dcos(pi-theta(nres))
1526 fac=1.0d0/dsqrt(1.0d0-costh*costh)
1527 c write (iout,*) "i",i," dc_norm",dc_norm(:,i),dc_norm(:,i-1),
1533 C Compute the derivatives of uz
1535 uzder(2,1,1)=-dc_norm(3,i-1)
1536 uzder(3,1,1)= dc_norm(2,i-1)
1537 uzder(1,2,1)= dc_norm(3,i-1)
1539 uzder(3,2,1)=-dc_norm(1,i-1)
1540 uzder(1,3,1)=-dc_norm(2,i-1)
1541 uzder(2,3,1)= dc_norm(1,i-1)
1544 uzder(2,1,2)= dc_norm(3,i)
1545 uzder(3,1,2)=-dc_norm(2,i)
1546 uzder(1,2,2)=-dc_norm(3,i)
1548 uzder(3,2,2)= dc_norm(1,i)
1549 uzder(1,3,2)= dc_norm(2,i)
1550 uzder(2,3,2)=-dc_norm(1,i)
1553 C Compute the Y-axis
1556 uy(k,i)=fac*(dc_norm(k,i-1)-costh*dc_norm(k,i))
1559 C Compute the derivatives of uy
1562 uyder(k,j,1)=2*dc_norm(k,i-1)*dc_norm(j,i)
1563 & -dc_norm(k,i)*dc_norm(j,i-1)
1564 uyder(k,j,2)=-dc_norm(j,i)*dc_norm(k,i)
1566 uyder(j,j,1)=uyder(j,j,1)-costh
1567 uyder(j,j,2)=1.0d0+uyder(j,j,2)
1572 uygrad(l,k,j,i)=uyder(l,k,j)
1573 uzgrad(l,k,j,i)=uzder(l,k,j)
1577 call unormderiv(uy(1,i),uyder(1,1,1),facy,uygrad(1,1,1,i))
1578 call unormderiv(uy(1,i),uyder(1,1,2),facy,uygrad(1,1,2,i))
1579 call unormderiv(uz(1,i),uzder(1,1,1),fac,uzgrad(1,1,1,i))
1580 call unormderiv(uz(1,i),uzder(1,1,2),fac,uzgrad(1,1,2,i))
1584 C Compute the Z-axis
1585 call vecpr(dc_norm(1,i),dc_norm(1,i+1),uz(1,i))
1586 costh=dcos(pi-theta(i+2))
1587 fac=1.0d0/dsqrt(1.0d0-costh*costh)
1592 C Compute the derivatives of uz
1594 uzder(2,1,1)=-dc_norm(3,i+1)
1595 uzder(3,1,1)= dc_norm(2,i+1)
1596 uzder(1,2,1)= dc_norm(3,i+1)
1598 uzder(3,2,1)=-dc_norm(1,i+1)
1599 uzder(1,3,1)=-dc_norm(2,i+1)
1600 uzder(2,3,1)= dc_norm(1,i+1)
1603 uzder(2,1,2)= dc_norm(3,i)
1604 uzder(3,1,2)=-dc_norm(2,i)
1605 uzder(1,2,2)=-dc_norm(3,i)
1607 uzder(3,2,2)= dc_norm(1,i)
1608 uzder(1,3,2)= dc_norm(2,i)
1609 uzder(2,3,2)=-dc_norm(1,i)
1612 C Compute the Y-axis
1615 uy(k,i)=facy*(dc_norm(k,i+1)-costh*dc_norm(k,i))
1618 C Compute the derivatives of uy
1621 uyder(k,j,1)=2*dc_norm(k,i+1)*dc_norm(j,i)
1622 & -dc_norm(k,i)*dc_norm(j,i+1)
1623 uyder(k,j,2)=-dc_norm(j,i)*dc_norm(k,i)
1625 uyder(j,j,1)=uyder(j,j,1)-costh
1626 uyder(j,j,2)=1.0d0+uyder(j,j,2)
1631 uygrad(l,k,j,i)=uyder(l,k,j)
1632 uzgrad(l,k,j,i)=uzder(l,k,j)
1636 call unormderiv(uy(1,i),uyder(1,1,1),facy,uygrad(1,1,1,i))
1637 call unormderiv(uy(1,i),uyder(1,1,2),facy,uygrad(1,1,2,i))
1638 call unormderiv(uz(1,i),uzder(1,1,1),fac,uzgrad(1,1,1,i))
1639 call unormderiv(uz(1,i),uzder(1,1,2),fac,uzgrad(1,1,2,i))
1645 vbld_inv_temp(1)=vbld_inv(i+1)
1646 if (i.lt.nres-1) then
1647 vbld_inv_temp(2)=vbld_inv(i+2)
1649 vbld_inv_temp(2)=vbld_inv(i)
1654 uygrad(l,k,j,i)=vbld_inv_temp(j)*uygrad(l,k,j,i)
1655 uzgrad(l,k,j,i)=vbld_inv_temp(j)*uzgrad(l,k,j,i)
1663 C--------------------------------------------------------------------------
1664 subroutine set_matrices
1665 implicit real*8 (a-h,o-z)
1666 include 'DIMENSIONS'
1670 integer status(MPI_STATUS_SIZE)
1672 include 'DIMENSIONS.ZSCOPT'
1673 include 'COMMON.IOUNITS'
1674 include 'COMMON.GEO'
1675 include 'COMMON.VAR'
1676 include 'COMMON.LOCAL'
1677 include 'COMMON.CHAIN'
1678 include 'COMMON.DERIV'
1679 include 'COMMON.INTERACT'
1680 include 'COMMON.CONTACTS'
1681 include 'COMMON.TORSION'
1682 include 'COMMON.VECTORS'
1683 include 'COMMON.FFIELD'
1684 double precision auxvec(2),auxmat(2,2)
1686 C Compute the virtual-bond-torsional-angle dependent quantities needed
1687 C to calculate the el-loc multibody terms of various order.
1689 c write(iout,*) 'SET_MATRICES nphi=',nphi,nres
1691 if (i.gt. nnt+2 .and. i.lt.nct+2) then
1692 iti = itype2loc(itype(i-2))
1696 c if (i.gt. iatel_s+1 .and. i.lt.iatel_e+4) then
1697 if (i.gt. nnt+1 .and. i.lt.nct+1) then
1698 iti1 = itype2loc(itype(i-1))
1703 cost1=dcos(theta(i-1))
1704 sint1=dsin(theta(i-1))
1706 sint1cub=sint1sq*sint1
1707 sint1cost1=2*sint1*cost1
1709 write (iout,*) "bnew1",i,iti
1710 write (iout,*) (bnew1(k,1,iti),k=1,3)
1711 write (iout,*) (bnew1(k,2,iti),k=1,3)
1712 write (iout,*) "bnew2",i,iti
1713 write (iout,*) (bnew2(k,1,iti),k=1,3)
1714 write (iout,*) (bnew2(k,2,iti),k=1,3)
1717 b1k=bnew1(1,k,iti)+(bnew1(2,k,iti)+bnew1(3,k,iti)*cost1)*cost1
1719 gtb1(k,i-2)=cost1*b1k-sint1sq*
1720 & (bnew1(2,k,iti)+2*bnew1(3,k,iti)*cost1)
1721 b2k=bnew2(1,k,iti)+(bnew2(2,k,iti)+bnew2(3,k,iti)*cost1)*cost1
1723 if (calc_grad) gtb2(k,i-2)=cost1*b2k-sint1sq*
1724 & (bnew2(2,k,iti)+2*bnew2(3,k,iti)*cost1)
1727 aux=ccnew(1,k,iti)+(ccnew(2,k,iti)+ccnew(3,k,iti)*cost1)*cost1
1728 cc(1,k,i-2)=sint1sq*aux
1729 if (calc_grad) gtcc(1,k,i-2)=sint1cost1*aux-sint1cub*
1730 & (ccnew(2,k,iti)+2*ccnew(3,k,iti)*cost1)
1731 aux=ddnew(1,k,iti)+(ddnew(2,k,iti)+ddnew(3,k,iti)*cost1)*cost1
1732 dd(1,k,i-2)=sint1sq*aux
1733 if (calc_grad) gtdd(1,k,i-2)=sint1cost1*aux-sint1cub*
1734 & (ddnew(2,k,iti)+2*ddnew(3,k,iti)*cost1)
1736 cc(2,1,i-2)=cc(1,2,i-2)
1737 cc(2,2,i-2)=-cc(1,1,i-2)
1738 gtcc(2,1,i-2)=gtcc(1,2,i-2)
1739 gtcc(2,2,i-2)=-gtcc(1,1,i-2)
1740 dd(2,1,i-2)=dd(1,2,i-2)
1741 dd(2,2,i-2)=-dd(1,1,i-2)
1742 gtdd(2,1,i-2)=gtdd(1,2,i-2)
1743 gtdd(2,2,i-2)=-gtdd(1,1,i-2)
1746 aux=eenew(1,l,k,iti)+eenew(2,l,k,iti)*cost1
1747 EE(l,k,i-2)=sint1sq*aux
1749 & gtEE(l,k,i-2)=sint1cost1*aux-sint1cub*eenew(2,l,k,iti)
1752 EE(1,1,i-2)=EE(1,1,i-2)+e0new(1,iti)*cost1
1753 EE(1,2,i-2)=EE(1,2,i-2)+e0new(2,iti)+e0new(3,iti)*cost1
1754 EE(2,1,i-2)=EE(2,1,i-2)+e0new(2,iti)*cost1+e0new(3,iti)
1755 EE(2,2,i-2)=EE(2,2,i-2)-e0new(1,iti)
1757 gtEE(1,1,i-2)=gtEE(1,1,i-2)-e0new(1,iti)*sint1
1758 gtEE(1,2,i-2)=gtEE(1,2,i-2)-e0new(3,iti)*sint1
1759 gtEE(2,1,i-2)=gtEE(2,1,i-2)-e0new(2,iti)*sint1
1761 c b1tilde(1,i-2)=b1(1,i-2)
1762 c b1tilde(2,i-2)=-b1(2,i-2)
1763 c b2tilde(1,i-2)=b2(1,i-2)
1764 c b2tilde(2,i-2)=-b2(2,i-2)
1766 write (iout,*) 'i=',i-2,gtb1(2,i-2),gtb1(1,i-2)
1767 write(iout,*) 'b1=',(b1(k,i-2),k=1,2)
1768 write(iout,*) 'b2=',(b2(k,i-2),k=1,2)
1769 write (iout,*) 'theta=', theta(i-1)
1772 c if (i.gt. nnt+2 .and. i.lt.nct+2) then
1773 c iti = itype2loc(itype(i-2))
1777 c if (i.gt. iatel_s+1 .and. i.lt.iatel_e+4) then
1778 c if (i.gt. nnt+1 .and. i.lt.nct+1) then
1779 c iti1 = itype2loc(itype(i-1))
1789 CC(k,l,i-2)=ccold(k,l,iti)
1790 DD(k,l,i-2)=ddold(k,l,iti)
1791 EE(k,l,i-2)=eeold(k,l,iti)
1795 b1tilde(1,i-2)= b1(1,i-2)
1796 b1tilde(2,i-2)=-b1(2,i-2)
1797 b2tilde(1,i-2)= b2(1,i-2)
1798 b2tilde(2,i-2)=-b2(2,i-2)
1800 Ctilde(1,1,i-2)= CC(1,1,i-2)
1801 Ctilde(1,2,i-2)= CC(1,2,i-2)
1802 Ctilde(2,1,i-2)=-CC(2,1,i-2)
1803 Ctilde(2,2,i-2)=-CC(2,2,i-2)
1805 Dtilde(1,1,i-2)= DD(1,1,i-2)
1806 Dtilde(1,2,i-2)= DD(1,2,i-2)
1807 Dtilde(2,1,i-2)=-DD(2,1,i-2)
1808 Dtilde(2,2,i-2)=-DD(2,2,i-2)
1810 write(iout,*) "i",i," iti",iti
1811 write(iout,*) 'b1=',(b1(k,i-2),k=1,2)
1812 write(iout,*) 'b2=',(b2(k,i-2),k=1,2)
1816 if (i .lt. nres+1) then
1853 if (i .gt. 3 .and. i .lt. nres+1) then
1854 obrot_der(1,i-2)=-sin1
1855 obrot_der(2,i-2)= cos1
1856 Ugder(1,1,i-2)= sin1
1857 Ugder(1,2,i-2)=-cos1
1858 Ugder(2,1,i-2)=-cos1
1859 Ugder(2,2,i-2)=-sin1
1862 obrot2_der(1,i-2)=-dwasin2
1863 obrot2_der(2,i-2)= dwacos2
1864 Ug2der(1,1,i-2)= dwasin2
1865 Ug2der(1,2,i-2)=-dwacos2
1866 Ug2der(2,1,i-2)=-dwacos2
1867 Ug2der(2,2,i-2)=-dwasin2
1869 obrot_der(1,i-2)=0.0d0
1870 obrot_der(2,i-2)=0.0d0
1871 Ugder(1,1,i-2)=0.0d0
1872 Ugder(1,2,i-2)=0.0d0
1873 Ugder(2,1,i-2)=0.0d0
1874 Ugder(2,2,i-2)=0.0d0
1875 obrot2_der(1,i-2)=0.0d0
1876 obrot2_der(2,i-2)=0.0d0
1877 Ug2der(1,1,i-2)=0.0d0
1878 Ug2der(1,2,i-2)=0.0d0
1879 Ug2der(2,1,i-2)=0.0d0
1880 Ug2der(2,2,i-2)=0.0d0
1882 c if (i.gt. iatel_s+2 .and. i.lt.iatel_e+5) then
1883 if (i.gt. nnt+2 .and. i.lt.nct+2) then
1884 iti = itype2loc(itype(i-2))
1888 c if (i.gt. iatel_s+1 .and. i.lt.iatel_e+4) then
1889 if (i.gt. nnt+1 .and. i.lt.nct+1) then
1890 iti1 = itype2loc(itype(i-1))
1894 cd write (iout,*) '*******i',i,' iti1',iti
1895 cd write (iout,*) 'b1',b1(:,iti)
1896 cd write (iout,*) 'b2',b2(:,iti)
1897 cd write (iout,*) 'Ug',Ug(:,:,i-2)
1898 c if (i .gt. iatel_s+2) then
1899 if (i .gt. nnt+2) then
1900 call matvec2(Ug(1,1,i-2),b2(1,i-2),Ub2(1,i-2))
1902 call matvec2(Ug(1,1,i-2),gtb2(1,i-2),gUb2(1,i-2))
1903 c write (iout,*) Ug(1,1,i-2),gtb2(1,i-2),gUb2(1,i-2),"chuj"
1905 c write(iout,*) "co jest kurwa", iti, EE(1,1,i),EE(2,1,i),
1906 c & EE(1,2,iti),EE(2,2,i)
1907 call matmat2(EE(1,1,i-2),Ug(1,1,i-2),EUg(1,1,i-2))
1908 call matmat2(gtEE(1,1,i-2),Ug(1,1,i-2),gtEUg(1,1,i-2))
1909 c write(iout,*) "Macierz EUG",
1910 c & eug(1,1,i-2),eug(1,2,i-2),eug(2,1,i-2),
1912 if (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0)
1914 call matmat2(CC(1,1,i-2),Ug(1,1,i-2),CUg(1,1,i-2))
1915 call matmat2(DD(1,1,i-2),Ug(1,1,i-2),DUg(1,1,i-2))
1916 call matmat2(Dtilde(1,1,i-2),Ug2(1,1,i-2),DtUg2(1,1,i-2))
1917 call matvec2(Ctilde(1,1,i-1),obrot(1,i-2),Ctobr(1,i-2))
1918 call matvec2(Dtilde(1,1,i-2),obrot2(1,i-2),Dtobr2(1,i-2))
1929 DtUg2(l,k,i-2)=0.0d0
1933 call matvec2(Ugder(1,1,i-2),b2(1,i-2),Ub2der(1,i-2))
1934 call matmat2(EE(1,1,i-2),Ugder(1,1,i-2),EUgder(1,1,i-2))
1936 muder(k,i-2)=Ub2der(k,i-2)
1938 c if (i.gt. iatel_s+1 .and. i.lt.iatel_e+4) then
1939 if (i.gt. nnt+1 .and. i.lt.nct+1) then
1940 if (itype(i-1).le.ntyp) then
1941 iti1 = itype2loc(itype(i-1))
1949 mu(k,i-2)=Ub2(k,i-2)+b1(k,i-1)
1952 write (iout,'(2hmu,i3,3f8.1,12f10.5)') i-2,rad2deg*theta(i-1),
1953 & rad2deg*theta(i),rad2deg*phi(i),mu(1,i-2),mu(2,i-2),
1954 & -b2(1,i-2),b2(2,i-2),b1(1,i-2),b1(2,i-2),
1955 & dsqrt(b2(1,i-1)**2+b2(2,i-1)**2)
1956 & +dsqrt(b1(1,i-1)**2+b1(2,i-1)**2),
1957 & ((ee(l,k,i-2),l=1,2),k=1,2)
1959 cd write (iout,*) 'mu1',mu1(:,i-2)
1960 cd write (iout,*) 'mu2',mu2(:,i-2)
1961 if (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or.wcorr6.gt.0.0d0)
1964 call matmat2(CC(1,1,i-1),Ugder(1,1,i-2),CUgder(1,1,i-2))
1965 call matmat2(DD(1,1,i-2),Ugder(1,1,i-2),DUgder(1,1,i-2))
1966 call matmat2(Dtilde(1,1,i-2),Ug2der(1,1,i-2),DtUg2der(1,1,i-2))
1967 call matvec2(Ctilde(1,1,i-1),obrot_der(1,i-2),Ctobrder(1,i-2))
1968 call matvec2(Dtilde(1,1,i-2),obrot2_der(1,i-2),Dtobr2der(1,i-2))
1970 C Vectors and matrices dependent on a single virtual-bond dihedral.
1971 call matvec2(DD(1,1,i-2),b1tilde(1,i-1),auxvec(1))
1972 call matvec2(Ug2(1,1,i-2),auxvec(1),Ug2Db1t(1,i-2))
1973 call matvec2(CC(1,1,i-1),Ub2(1,i-2),CUgb2(1,i-2))
1974 call matmat2(EUg(1,1,i-2),CC(1,1,i-1),EUgC(1,1,i-2))
1975 call matmat2(EUg(1,1,i-2),DD(1,1,i-1),EUgD(1,1,i-2))
1977 call matvec2(Ug2der(1,1,i-2),auxvec(1),Ug2Db1tder(1,i-2))
1978 call matvec2(CC(1,1,i-1),Ub2der(1,i-2),CUgb2der(1,i-2))
1979 call matmat2(EUgder(1,1,i-2),CC(1,1,i-1),EUgCder(1,1,i-2))
1980 call matmat2(EUgder(1,1,i-2),DD(1,1,i-1),EUgDder(1,1,i-2))
1984 C Matrices dependent on two consecutive virtual-bond dihedrals.
1985 C The order of matrices is from left to right.
1986 if (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or.wcorr6.gt.0.0d0)
1989 call matmat2(DtUg2(1,1,i-1),EUg(1,1,i),DtUg2EUg(1,1,i))
1991 call matmat2(DtUg2der(1,1,i-1),EUg(1,1,i),DtUg2EUgder(1,1,1,i))
1992 call matmat2(DtUg2(1,1,i-1),EUgder(1,1,i),DtUg2EUgder(1,1,2,i))
1994 call transpose2(DtUg2(1,1,i-1),auxmat(1,1))
1995 call matmat2(auxmat(1,1),EUg(1,1,i),Ug2DtEUg(1,1,i))
1997 call matmat2(auxmat(1,1),EUgder(1,1,i),Ug2DtEUgder(1,1,2,i))
1998 call transpose2(DtUg2der(1,1,i-1),auxmat(1,1))
1999 call matmat2(auxmat(1,1),EUg(1,1,i),Ug2DtEUgder(1,1,1,i))
2005 C--------------------------------------------------------------------------
2006 subroutine eelec(ees,evdw1,eel_loc,eello_turn3,eello_turn4)
2008 C This subroutine calculates the average interaction energy and its gradient
2009 C in the virtual-bond vectors between non-adjacent peptide groups, based on
2010 C the potential described in Liwo et al., Protein Sci., 1993, 2, 1715.
2011 C The potential depends both on the distance of peptide-group centers and on
2012 C the orientation of the CA-CA virtual bonds.
2014 implicit real*8 (a-h,o-z)
2018 include 'DIMENSIONS'
2019 include 'DIMENSIONS.ZSCOPT'
2020 include 'COMMON.CONTROL'
2021 include 'COMMON.IOUNITS'
2022 include 'COMMON.GEO'
2023 include 'COMMON.VAR'
2024 include 'COMMON.LOCAL'
2025 include 'COMMON.CHAIN'
2026 include 'COMMON.DERIV'
2027 include 'COMMON.INTERACT'
2028 include 'COMMON.CONTACTS'
2029 include 'COMMON.TORSION'
2030 include 'COMMON.VECTORS'
2031 include 'COMMON.FFIELD'
2032 include 'COMMON.TIME1'
2033 include 'COMMON.SPLITELE'
2034 dimension ggg(3),gggp(3),gggm(3),erij(3),dcosb(3),dcosg(3),
2035 & erder(3,3),uryg(3,3),urzg(3,3),vryg(3,3),vrzg(3,3)
2036 double precision acipa(2,2),agg(3,4),aggi(3,4),aggi1(3,4),
2037 & aggj(3,4),aggj1(3,4),a_temp(2,2),muij(4),gmuij(4)
2038 common /locel/ a_temp,agg,aggi,aggi1,aggj,aggj1,a22,a23,a32,a33,
2039 & dxi,dyi,dzi,dx_normi,dy_normi,dz_normi,xmedi,ymedi,zmedi,
2041 c 4/26/02 - AL scaling factor for 1,4 repulsive VDW interactions
2043 double precision scal_el /1.0d0/
2045 double precision scal_el /0.5d0/
2048 C 13-go grudnia roku pamietnego...
2049 double precision unmat(3,3) /1.0d0,0.0d0,0.0d0,
2050 & 0.0d0,1.0d0,0.0d0,
2051 & 0.0d0,0.0d0,1.0d0/
2052 cd write(iout,*) 'In EELEC'
2054 cd write(iout,*) 'Type',i
2055 cd write(iout,*) 'B1',B1(:,i)
2056 cd write(iout,*) 'B2',B2(:,i)
2057 cd write(iout,*) 'CC',CC(:,:,i)
2058 cd write(iout,*) 'DD',DD(:,:,i)
2059 cd write(iout,*) 'EE',EE(:,:,i)
2061 cd call check_vecgrad
2063 if (icheckgrad.eq.1) then
2065 fac=1.0d0/dsqrt(scalar(dc(1,i),dc(1,i)))
2067 dc_norm(k,i)=dc(k,i)*fac
2069 c write (iout,*) 'i',i,' fac',fac
2072 if (wel_loc.gt.0.0d0 .or. wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0
2073 & .or. wcorr6.gt.0.0d0 .or. wturn3.gt.0.0d0 .or.
2074 & wturn4.gt.0.0d0 .or. wturn6.gt.0.0d0) then
2075 c call vec_and_deriv
2081 time_mat=time_mat+MPI_Wtime()-time01
2085 cd write (iout,*) 'i=',i
2087 cd write (iout,'(i5,2f10.5)') k,uy(k,i),uz(k,i)
2090 cd write (iout,'(f10.5,2x,3f10.5,2x,3f10.5)')
2091 cd & uz(k,i),(uzgrad(k,l,1,i),l=1,3),(uzgrad(k,l,2,i),l=1,3)
2104 cd print '(a)','Enter EELEC'
2105 cd write (iout,*) 'iatel_s=',iatel_s,' iatel_e=',iatel_e
2107 gel_loc_loc(i)=0.0d0
2112 c 9/27/08 AL Split the interaction loop to ensure load balancing of turn terms
2114 C Loop over i,i+2 and i,i+3 pairs of the peptide groups
2116 C 14/01/2014 TURN3,TUNR4 does no go under periodic boundry condition
2117 do i=iturn3_start,iturn3_end
2119 C write(iout,*) "tu jest i",i
2120 if (itype(i).eq.ntyp1 .or. itype(i+1).eq.ntyp1
2121 C changes suggested by Ana to avoid out of bounds
2122 C Adam: Unnecessary: handled by iturn3_end and iturn3_start
2123 c & .or.((i+4).gt.nres)
2124 c & .or.((i-1).le.0)
2125 C end of changes by Ana
2126 C dobra zmiana wycofana
2127 & .or. itype(i+2).eq.ntyp1
2128 & .or. itype(i+3).eq.ntyp1) cycle
2129 C Adam: Instructions below will switch off existing interactions
2131 c if(itype(i-1).eq.ntyp1)cycle
2133 c if(i.LT.nres-3)then
2134 c if (itype(i+4).eq.ntyp1) cycle
2139 dx_normi=dc_norm(1,i)
2140 dy_normi=dc_norm(2,i)
2141 dz_normi=dc_norm(3,i)
2142 xmedi=c(1,i)+0.5d0*dxi
2143 ymedi=c(2,i)+0.5d0*dyi
2144 zmedi=c(3,i)+0.5d0*dzi
2145 xmedi=mod(xmedi,boxxsize)
2146 if (xmedi.lt.0) xmedi=xmedi+boxxsize
2147 ymedi=mod(ymedi,boxysize)
2148 if (ymedi.lt.0) ymedi=ymedi+boxysize
2149 zmedi=mod(zmedi,boxzsize)
2150 if (zmedi.lt.0) zmedi=zmedi+boxzsize
2152 call eelecij(i,i+2,ees,evdw1,eel_loc)
2153 if (wturn3.gt.0.0d0) call eturn3(i,eello_turn3)
2154 num_cont_hb(i)=num_conti
2156 do i=iturn4_start,iturn4_end
2158 if (itype(i).eq.ntyp1 .or. itype(i+1).eq.ntyp1
2159 C changes suggested by Ana to avoid out of bounds
2160 c & .or.((i+5).gt.nres)
2161 c & .or.((i-1).le.0)
2162 C end of changes suggested by Ana
2163 & .or. itype(i+3).eq.ntyp1
2164 & .or. itype(i+4).eq.ntyp1
2165 c & .or. itype(i+5).eq.ntyp1
2166 c & .or. itype(i).eq.ntyp1
2167 c & .or. itype(i-1).eq.ntyp1
2172 dx_normi=dc_norm(1,i)
2173 dy_normi=dc_norm(2,i)
2174 dz_normi=dc_norm(3,i)
2175 xmedi=c(1,i)+0.5d0*dxi
2176 ymedi=c(2,i)+0.5d0*dyi
2177 zmedi=c(3,i)+0.5d0*dzi
2178 C Return atom into box, boxxsize is size of box in x dimension
2180 c if (xmedi.gt.((0.5d0)*boxxsize)) xmedi=xmedi-boxxsize
2181 c if (xmedi.lt.((-0.5d0)*boxxsize)) xmedi=xmedi+boxxsize
2182 C Condition for being inside the proper box
2183 c if ((xmedi.gt.((0.5d0)*boxxsize)).or.
2184 c & (xmedi.lt.((-0.5d0)*boxxsize))) then
2188 c if (ymedi.gt.((0.5d0)*boxysize)) ymedi=ymedi-boxysize
2189 c if (ymedi.lt.((-0.5d0)*boxysize)) ymedi=ymedi+boxysize
2190 C Condition for being inside the proper box
2191 c if ((ymedi.gt.((0.5d0)*boxysize)).or.
2192 c & (ymedi.lt.((-0.5d0)*boxysize))) then
2196 c if (zmedi.gt.((0.5d0)*boxzsize)) zmedi=zmedi-boxzsize
2197 c if (zmedi.lt.((-0.5d0)*boxzsize)) zmedi=zmedi+boxzsize
2198 C Condition for being inside the proper box
2199 c if ((zmedi.gt.((0.5d0)*boxzsize)).or.
2200 c & (zmedi.lt.((-0.5d0)*boxzsize))) then
2203 xmedi=mod(xmedi,boxxsize)
2204 if (xmedi.lt.0) xmedi=xmedi+boxxsize
2205 ymedi=mod(ymedi,boxysize)
2206 if (ymedi.lt.0) ymedi=ymedi+boxysize
2207 zmedi=mod(zmedi,boxzsize)
2208 if (zmedi.lt.0) zmedi=zmedi+boxzsize
2210 num_conti=num_cont_hb(i)
2211 c write(iout,*) "JESTEM W PETLI"
2212 call eelecij(i,i+3,ees,evdw1,eel_loc)
2213 if (wturn4.gt.0.0d0 .and. itype(i+2).ne.ntyp1)
2214 & call eturn4(i,eello_turn4)
2215 num_cont_hb(i)=num_conti
2217 C Loop over all neighbouring boxes
2222 c Loop over all pairs of interacting peptide groups except i,i+2 and i,i+3
2225 do i=iatel_s,iatel_e
2228 if (itype(i).eq.ntyp1 .or. itype(i+1).eq.ntyp1
2229 C changes suggested by Ana to avoid out of bounds
2230 c & .or.((i+2).gt.nres)
2231 c & .or.((i-1).le.0)
2232 C end of changes by Ana
2233 c & .or. itype(i+2).eq.ntyp1
2234 c & .or. itype(i-1).eq.ntyp1
2239 dx_normi=dc_norm(1,i)
2240 dy_normi=dc_norm(2,i)
2241 dz_normi=dc_norm(3,i)
2242 xmedi=c(1,i)+0.5d0*dxi
2243 ymedi=c(2,i)+0.5d0*dyi
2244 zmedi=c(3,i)+0.5d0*dzi
2245 xmedi=mod(xmedi,boxxsize)
2246 if (xmedi.lt.0) xmedi=xmedi+boxxsize
2247 ymedi=mod(ymedi,boxysize)
2248 if (ymedi.lt.0) ymedi=ymedi+boxysize
2249 zmedi=mod(zmedi,boxzsize)
2250 if (zmedi.lt.0) zmedi=zmedi+boxzsize
2251 C xmedi=xmedi+xshift*boxxsize
2252 C ymedi=ymedi+yshift*boxysize
2253 C zmedi=zmedi+zshift*boxzsize
2255 C Return tom into box, boxxsize is size of box in x dimension
2257 c if (xmedi.gt.((xshift+0.5d0)*boxxsize)) xmedi=xmedi-boxxsize
2258 c if (xmedi.lt.((xshift-0.5d0)*boxxsize)) xmedi=xmedi+boxxsize
2259 C Condition for being inside the proper box
2260 c if ((xmedi.gt.((xshift+0.5d0)*boxxsize)).or.
2261 c & (xmedi.lt.((xshift-0.5d0)*boxxsize))) then
2265 c if (ymedi.gt.((yshift+0.5d0)*boxysize)) ymedi=ymedi-boxysize
2266 c if (ymedi.lt.((yshift-0.5d0)*boxysize)) ymedi=ymedi+boxysize
2267 C Condition for being inside the proper box
2268 c if ((ymedi.gt.((yshift+0.5d0)*boxysize)).or.
2269 c & (ymedi.lt.((yshift-0.5d0)*boxysize))) then
2273 c if (zmedi.gt.((zshift+0.5d0)*boxzsize)) zmedi=zmedi-boxzsize
2274 c if (zmedi.lt.((zshift-0.5d0)*boxzsize)) zmedi=zmedi+boxzsize
2275 cC Condition for being inside the proper box
2276 c if ((zmedi.gt.((zshift+0.5d0)*boxzsize)).or.
2277 c & (zmedi.lt.((zshift-0.5d0)*boxzsize))) then
2281 c write (iout,*) 'i',i,' ielstart',ielstart(i),' ielend',ielend(i)
2282 num_conti=num_cont_hb(i)
2284 do j=ielstart(i),ielend(i)
2286 C write (iout,*) i,j
2288 if (itype(j).eq.ntyp1.or. itype(j+1).eq.ntyp1
2289 C changes suggested by Ana to avoid out of bounds
2290 c & .or.((j+2).gt.nres)
2291 c & .or.((j-1).le.0)
2292 C end of changes by Ana
2293 c & .or.itype(j+2).eq.ntyp1
2294 c & .or.itype(j-1).eq.ntyp1
2296 call eelecij(i,j,ees,evdw1,eel_loc)
2298 num_cont_hb(i)=num_conti
2304 c write (iout,*) "Number of loop steps in EELEC:",ind
2306 cd write (iout,'(i3,3f10.5,5x,3f10.5)')
2307 cd & i,(gel_loc(k,i),k=1,3),gel_loc_loc(i)
2309 c 12/7/99 Adam eello_turn3 will be considered as a separate energy term
2310 ccc eel_loc=eel_loc+eello_turn3
2311 cd print *,"Processor",fg_rank," t_eelecij",t_eelecij
2314 C-------------------------------------------------------------------------------
2315 subroutine eelecij(i,j,ees,evdw1,eel_loc)
2316 implicit real*8 (a-h,o-z)
2317 include 'DIMENSIONS'
2318 include 'DIMENSIONS.ZSCOPT'
2322 include 'COMMON.CONTROL'
2323 include 'COMMON.IOUNITS'
2324 include 'COMMON.GEO'
2325 include 'COMMON.VAR'
2326 include 'COMMON.LOCAL'
2327 include 'COMMON.CHAIN'
2328 include 'COMMON.DERIV'
2329 include 'COMMON.INTERACT'
2330 include 'COMMON.CONTACTS'
2331 include 'COMMON.TORSION'
2332 include 'COMMON.VECTORS'
2333 include 'COMMON.FFIELD'
2334 include 'COMMON.TIME1'
2335 include 'COMMON.SPLITELE'
2336 include 'COMMON.SHIELD'
2337 dimension ggg(3),gggp(3),gggm(3),erij(3),dcosb(3),dcosg(3),
2338 & erder(3,3),uryg(3,3),urzg(3,3),vryg(3,3),vrzg(3,3)
2339 double precision acipa(2,2),agg(3,4),aggi(3,4),aggi1(3,4),
2340 & aggj(3,4),aggj1(3,4),a_temp(2,2),muij(4),gmuij1(4),gmuji1(4),
2341 & gmuij2(4),gmuji2(4)
2342 common /locel/ a_temp,agg,aggi,aggi1,aggj,aggj1,a22,a23,a32,a33,
2343 & dxi,dyi,dzi,dx_normi,dy_normi,dz_normi,xmedi,ymedi,zmedi,
2345 c 4/26/02 - AL scaling factor for 1,4 repulsive VDW interactions
2347 double precision scal_el /1.0d0/
2349 double precision scal_el /0.5d0/
2352 C 13-go grudnia roku pamietnego...
2353 double precision unmat(3,3) /1.0d0,0.0d0,0.0d0,
2354 & 0.0d0,1.0d0,0.0d0,
2355 & 0.0d0,0.0d0,1.0d0/
2356 integer xshift,yshift,zshift
2357 c time00=MPI_Wtime()
2358 cd write (iout,*) "eelecij",i,j
2362 if (j.eq.i+2 .and. itelj.eq.2) iteli=2
2363 aaa=app(iteli,itelj)
2364 bbb=bpp(iteli,itelj)
2365 ael6i=ael6(iteli,itelj)
2366 ael3i=ael3(iteli,itelj)
2370 dx_normj=dc_norm(1,j)
2371 dy_normj=dc_norm(2,j)
2372 dz_normj=dc_norm(3,j)
2373 C xj=c(1,j)+0.5D0*dxj-xmedi
2374 C yj=c(2,j)+0.5D0*dyj-ymedi
2375 C zj=c(3,j)+0.5D0*dzj-zmedi
2380 if (xj.lt.0) xj=xj+boxxsize
2382 if (yj.lt.0) yj=yj+boxysize
2384 if (zj.lt.0) zj=zj+boxzsize
2385 if ((zj.lt.0).or.(xj.lt.0).or.(yj.lt.0)) write (*,*) "CHUJ"
2386 dist_init=(xj-xmedi)**2+(yj-ymedi)**2+(zj-zmedi)**2
2394 xj=xj_safe+xshift*boxxsize
2395 yj=yj_safe+yshift*boxysize
2396 zj=zj_safe+zshift*boxzsize
2397 dist_temp=(xj-xmedi)**2+(yj-ymedi)**2+(zj-zmedi)**2
2398 if(dist_temp.lt.dist_init) then
2408 if (isubchap.eq.1) then
2417 C if ((i+3).lt.j) then !this condition keeps for turn3 and turn4 not subject to PBC
2419 c if (xj.gt.((0.5d0)*boxxsize)) xj=xj-boxxsize
2420 c if (xj.lt.((-0.5d0)*boxxsize)) xj=xj+boxxsize
2421 C Condition for being inside the proper box
2422 c if ((xj.gt.((0.5d0)*boxxsize)).or.
2423 c & (xj.lt.((-0.5d0)*boxxsize))) then
2427 c if (yj.gt.((0.5d0)*boxysize)) yj=yj-boxysize
2428 c if (yj.lt.((-0.5d0)*boxysize)) yj=yj+boxysize
2429 C Condition for being inside the proper box
2430 c if ((yj.gt.((0.5d0)*boxysize)).or.
2431 c & (yj.lt.((-0.5d0)*boxysize))) then
2435 c if (zj.gt.((0.5d0)*boxzsize)) zj=zj-boxzsize
2436 c if (zj.lt.((-0.5d0)*boxzsize)) zj=zj+boxzsize
2437 C Condition for being inside the proper box
2438 c if ((zj.gt.((0.5d0)*boxzsize)).or.
2439 c & (zj.lt.((-0.5d0)*boxzsize))) then
2442 C endif !endPBC condintion
2446 rij=xj*xj+yj*yj+zj*zj
2448 sss=sscale(sqrt(rij))
2449 sssgrad=sscagrad(sqrt(rij))
2450 c write (iout,*) "ij",i,j," rij",sqrt(rij)," r_cut",r_cut,
2451 c & " rlamb",rlamb," sss",sss
2452 c if (sss.gt.0.0d0) then
2458 cosa=dx_normi*dx_normj+dy_normi*dy_normj+dz_normi*dz_normj
2459 cosb=(xj*dx_normi+yj*dy_normi+zj*dz_normi)*rmij
2460 cosg=(xj*dx_normj+yj*dy_normj+zj*dz_normj)*rmij
2461 fac=cosa-3.0D0*cosb*cosg
2463 c 4/26/02 - AL scaling down 1,4 repulsive VDW interactions
2464 if (j.eq.i+2) ev1=scal_el*ev1
2469 el1=fac3*(4.0D0+fac*fac-3.0D0*(cosb*cosb+cosg*cosg))
2473 C 12/26/95 - for the evaluation of multi-body H-bonding interactions
2474 ees0ij=4.0D0+fac*fac-3.0D0*(cosb*cosb+cosg*cosg)
2475 if (shield_mode.gt.0) then
2478 el1=el1*fac_shield(i)**2*fac_shield(j)**2
2479 el2=el2*fac_shield(i)**2*fac_shield(j)**2
2488 evdw1=evdw1+evdwij*sss
2489 cd write(iout,'(2(2i3,2x),7(1pd12.4)/2(3(1pd12.4),5x)/)')
2490 cd & iteli,i,itelj,j,aaa,bbb,ael6i,ael3i,
2491 cd & 1.0D0/dsqrt(rrmij),evdwij,eesij,
2492 cd & xmedi,ymedi,zmedi,xj,yj,zj
2494 if (energy_dec) then
2495 write (iout,'(a6,2i5,0pf7.3,2i5,3e11.3)')
2497 &,iteli,itelj,aaa,evdw1,sss
2498 write (iout,'(a6,2i5,0pf7.3,2f8.3)') 'ees',i,j,eesij,
2499 &fac_shield(i),fac_shield(j)
2503 C Calculate contributions to the Cartesian gradient.
2506 facvdw=-6*rrmij*(ev1+evdwij)*sss
2507 facel=-3*rrmij*(el1+eesij)
2514 * Radial derivatives. First process both termini of the fragment (i,j)
2520 if ((fac_shield(i).gt.0).and.(fac_shield(j).gt.0).and.
2521 & (shield_mode.gt.0)) then
2523 do ilist=1,ishield_list(i)
2524 iresshield=shield_list(ilist,i)
2526 rlocshield=grad_shield_side(k,ilist,i)*eesij/fac_shield(i)
2528 gshieldx(k,iresshield)=gshieldx(k,iresshield)+
2530 & +grad_shield_loc(k,ilist,i)*eesij/fac_shield(i)*2.0
2531 gshieldc(k,iresshield-1)=gshieldc(k,iresshield-1)+rlocshield
2532 C gshieldc_loc(k,iresshield)=gshieldc_loc(k,iresshield)
2533 C & +grad_shield_loc(k,ilist,i)*eesij/fac_shield(i)
2534 C if (iresshield.gt.i) then
2535 C do ishi=i+1,iresshield-1
2536 C gshieldc(k,ishi)=gshieldc(k,ishi)+rlocshield
2537 C & +grad_shield_loc(k,ilist,i)*eesij/fac_shield(i)
2541 C do ishi=iresshield,i
2542 C gshieldc(k,ishi)=gshieldc(k,ishi)-rlocshield
2543 C & -grad_shield_loc(k,ilist,i)*eesij/fac_shield(i)
2549 do ilist=1,ishield_list(j)
2550 iresshield=shield_list(ilist,j)
2552 rlocshield=grad_shield_side(k,ilist,j)*eesij/fac_shield(j)
2554 gshieldx(k,iresshield)=gshieldx(k,iresshield)+
2556 & +grad_shield_loc(k,ilist,j)*eesij/fac_shield(j)*2.0
2557 gshieldc(k,iresshield-1)=gshieldc(k,iresshield-1)+rlocshield
2559 C & +grad_shield_loc(k,ilist,j)*eesij/fac_shield(j)
2560 C gshieldc_loc(k,iresshield)=gshieldc_loc(k,iresshield)
2561 C & +grad_shield_loc(k,ilist,j)*eesij/fac_shield(j)
2562 C if (iresshield.gt.j) then
2563 C do ishi=j+1,iresshield-1
2564 C gshieldc(k,ishi)=gshieldc(k,ishi)+rlocshield
2565 C & +grad_shield_loc(k,ilist,j)*eesij/fac_shield(j)
2569 C do ishi=iresshield,j
2570 C gshieldc(k,ishi)=gshieldc(k,ishi)-rlocshield
2571 C & -grad_shield_loc(k,ilist,j)*eesij/fac_shield(j)
2578 gshieldc(k,i)=gshieldc(k,i)+
2579 & grad_shield(k,i)*eesij/fac_shield(i)*2.0
2580 gshieldc(k,j)=gshieldc(k,j)+
2581 & grad_shield(k,j)*eesij/fac_shield(j)*2.0
2582 gshieldc(k,i-1)=gshieldc(k,i-1)+
2583 & grad_shield(k,i)*eesij/fac_shield(i)*2.0
2584 gshieldc(k,j-1)=gshieldc(k,j-1)+
2585 & grad_shield(k,j)*eesij/fac_shield(j)*2.0
2590 c ghalf=0.5D0*ggg(k)
2591 c gelc(k,i)=gelc(k,i)+ghalf
2592 c gelc(k,j)=gelc(k,j)+ghalf
2594 c 9/28/08 AL Gradient compotents will be summed only at the end
2595 C print *,"before", gelc_long(1,i), gelc_long(1,j)
2597 gelc_long(k,j)=gelc_long(k,j)+ggg(k)
2598 C & +grad_shield(k,j)*eesij/fac_shield(j)
2599 gelc_long(k,i)=gelc_long(k,i)-ggg(k)
2600 C & +grad_shield(k,i)*eesij/fac_shield(i)
2601 C gelc_long(k,i-1)=gelc_long(k,i-1)
2602 C & +grad_shield(k,i)*eesij/fac_shield(i)
2603 C gelc_long(k,j-1)=gelc_long(k,j-1)
2604 C & +grad_shield(k,j)*eesij/fac_shield(j)
2606 C print *,"bafter", gelc_long(1,i), gelc_long(1,j)
2609 * Loop over residues i+1 thru j-1.
2613 cgrad gelc(l,k)=gelc(l,k)+ggg(l)
2616 if (sss.gt.0.0) then
2617 ggg(1)=facvdw*xj+sssgrad*rmij*evdwij*xj
2618 ggg(2)=facvdw*yj+sssgrad*rmij*evdwij*yj
2619 ggg(3)=facvdw*zj+sssgrad*rmij*evdwij*zj
2626 c ghalf=0.5D0*ggg(k)
2627 c gvdwpp(k,i)=gvdwpp(k,i)+ghalf
2628 c gvdwpp(k,j)=gvdwpp(k,j)+ghalf
2630 c 9/28/08 AL Gradient compotents will be summed only at the end
2632 gvdwpp(k,j)=gvdwpp(k,j)+ggg(k)
2633 gvdwpp(k,i)=gvdwpp(k,i)-ggg(k)
2636 * Loop over residues i+1 thru j-1.
2640 cgrad gvdwpp(l,k)=gvdwpp(l,k)+ggg(l)
2646 facvdw=(ev1+evdwij)*sss
2649 fac=-3*rrmij*(facvdw+facvdw+facel)
2654 * Radial derivatives. First process both termini of the fragment (i,j)
2658 C+eesij*grad_shield(1,i)+eesij*grad_shield(1,j)
2660 C+eesij*grad_shield(2,i)+eesij*grad_shield(2,j)
2662 C+eesij*grad_shield(3,i)+eesij*grad_shield(3,j)
2664 c ghalf=0.5D0*ggg(k)
2665 c gelc(k,i)=gelc(k,i)+ghalf
2666 c gelc(k,j)=gelc(k,j)+ghalf
2668 c 9/28/08 AL Gradient compotents will be summed only at the end
2670 gelc_long(k,j)=gelc(k,j)+ggg(k)
2671 gelc_long(k,i)=gelc(k,i)-ggg(k)
2674 * Loop over residues i+1 thru j-1.
2678 cgrad gelc(l,k)=gelc(l,k)+ggg(l)
2681 c 9/28/08 AL Gradient compotents will be summed only at the end
2682 ggg(1)=facvdw*xj+sssgrad*rmij*evdwij*xj
2683 ggg(2)=facvdw*yj+sssgrad*rmij*evdwij*yj
2684 ggg(3)=facvdw*zj+sssgrad*rmij*evdwij*zj
2686 gvdwpp(k,j)=gvdwpp(k,j)+ggg(k)
2687 gvdwpp(k,i)=gvdwpp(k,i)-ggg(k)
2695 ecosa=2.0D0*fac3*fac1+fac4
2698 ecosb=(fac3*(fac1*cosg+cosb)+cosg*fac4)
2699 ecosg=(fac3*(fac1*cosb+cosg)+cosb*fac4)
2701 dcosb(k)=rmij*(dc_norm(k,i)-erij(k)*cosb)
2702 dcosg(k)=rmij*(dc_norm(k,j)-erij(k)*cosg)
2704 cd print '(2i3,2(3(1pd14.5),3x))',i,j,(dcosb(k),k=1,3),
2705 cd & (dcosg(k),k=1,3)
2707 ggg(k)=(ecosb*dcosb(k)+ecosg*dcosg(k))*
2708 & fac_shield(i)**2*fac_shield(j)**2
2711 c ghalf=0.5D0*ggg(k)
2712 c gelc(k,i)=gelc(k,i)+ghalf
2713 c & +(ecosa*(dc_norm(k,j)-cosa*dc_norm(k,i))
2714 c & + ecosb*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1)
2715 c gelc(k,j)=gelc(k,j)+ghalf
2716 c & +(ecosa*(dc_norm(k,i)-cosa*dc_norm(k,j))
2717 c & + ecosg*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1)
2721 cgrad gelc(l,k)=gelc(l,k)+ggg(l)
2724 C print *,"before22", gelc_long(1,i), gelc_long(1,j)
2727 & +((ecosa*(dc_norm(k,j)-cosa*dc_norm(k,i))
2728 & + ecosb*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1))
2729 & *fac_shield(i)**2*fac_shield(j)**2
2731 & +((ecosa*(dc_norm(k,i)-cosa*dc_norm(k,j))
2732 & + ecosg*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1))
2733 & *fac_shield(i)**2*fac_shield(j)**2
2734 gelc_long(k,j)=gelc_long(k,j)+ggg(k)
2735 gelc_long(k,i)=gelc_long(k,i)-ggg(k)
2737 C print *,"before33", gelc_long(1,i), gelc_long(1,j)
2742 IF (wel_loc.gt.0.0d0 .or. wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0
2743 & .or. wcorr6.gt.0.0d0 .or. wturn3.gt.0.0d0
2744 & .or. wturn4.gt.0.0d0 .or. wturn6.gt.0.0d0) THEN
2746 C 9/25/99 Mixed third-order local-electrostatic terms. The local-interaction
2747 C energy of a peptide unit is assumed in the form of a second-order
2748 C Fourier series in the angles lambda1 and lambda2 (see Nishikawa et al.
2749 C Macromolecules, 1974, 7, 797-806 for definition). This correlation terms
2750 C are computed for EVERY pair of non-contiguous peptide groups.
2753 if (j.lt.nres-1) then
2765 muij(kkk)=mu(k,i)*mu(l,j)
2766 c write(iout,*) 'mumu=', mu(k,i),mu(l,j),i,j,k,l
2769 gmuij1(kkk)=gtb1(k,i+1)*mu(l,j)
2770 c write(iout,*) 'k=',k,i,gtb1(k,i+1),gtb1(k,i+1)*mu(l,j)
2771 gmuij2(kkk)=gUb2(k,i)*mu(l,j)
2772 gmuji1(kkk)=mu(k,i)*gtb1(l,j+1)
2773 c write(iout,*) 'l=',l,j,gtb1(l,j+1),gtb1(l,j+1)*mu(k,i)
2774 gmuji2(kkk)=mu(k,i)*gUb2(l,j)
2780 write (iout,*) 'EELEC: i',i,' j',j
2781 write (iout,*) 'j',j,' j1',j1,' j2',j2
2782 write(iout,*) 'muij',muij
2783 write (iout,*) "uy",uy(:,i)
2784 write (iout,*) "uz",uz(:,j)
2785 write (iout,*) "erij",erij
2787 ury=scalar(uy(1,i),erij)
2788 urz=scalar(uz(1,i),erij)
2789 vry=scalar(uy(1,j),erij)
2790 vrz=scalar(uz(1,j),erij)
2791 a22=scalar(uy(1,i),uy(1,j))-3*ury*vry
2792 a23=scalar(uy(1,i),uz(1,j))-3*ury*vrz
2793 a32=scalar(uz(1,i),uy(1,j))-3*urz*vry
2794 a33=scalar(uz(1,i),uz(1,j))-3*urz*vrz
2795 fac=dsqrt(-ael6i)*r3ij
2800 cd write (iout,'(4i5,4f10.5)')
2801 cd & i,itortyp(itype(i)),j,itortyp(itype(j)),a22,a23,a32,a33
2802 cd write (iout,'(6f10.5)') (muij(k),k=1,4),fac,eel_loc_ij
2803 cd write (iout,'(2(3f10.5,5x)/2(3f10.5,5x))') uy(:,i),uz(:,i),
2804 cd & uy(:,j),uz(:,j)
2805 cd write (iout,'(4f10.5)')
2806 cd & scalar(uy(1,i),uy(1,j)),scalar(uy(1,i),uz(1,j)),
2807 cd & scalar(uz(1,i),uy(1,j)),scalar(uz(1,i),uz(1,j))
2808 cd write (iout,'(4f10.5)') ury,urz,vry,vrz
2809 cd write (iout,'(9f10.5/)')
2810 cd & fac22,a22,fac23,a23,fac32,a32,fac33,a33,eel_loc_ij
2811 C Derivatives of the elements of A in virtual-bond vectors
2813 call unormderiv(erij(1),unmat(1,1),rmij,erder(1,1))
2815 uryg(k,1)=scalar(erder(1,k),uy(1,i))
2816 uryg(k,2)=scalar(uygrad(1,k,1,i),erij(1))
2817 uryg(k,3)=scalar(uygrad(1,k,2,i),erij(1))
2818 urzg(k,1)=scalar(erder(1,k),uz(1,i))
2819 urzg(k,2)=scalar(uzgrad(1,k,1,i),erij(1))
2820 urzg(k,3)=scalar(uzgrad(1,k,2,i),erij(1))
2821 vryg(k,1)=scalar(erder(1,k),uy(1,j))
2822 vryg(k,2)=scalar(uygrad(1,k,1,j),erij(1))
2823 vryg(k,3)=scalar(uygrad(1,k,2,j),erij(1))
2824 vrzg(k,1)=scalar(erder(1,k),uz(1,j))
2825 vrzg(k,2)=scalar(uzgrad(1,k,1,j),erij(1))
2826 vrzg(k,3)=scalar(uzgrad(1,k,2,j),erij(1))
2828 C Compute radial contributions to the gradient
2846 C Add the contributions coming from er
2849 agg(k,1)=agg(k,1)+fac3*(uryg(k,1)*vry+vryg(k,1)*ury)
2850 agg(k,2)=agg(k,2)+fac3*(uryg(k,1)*vrz+vrzg(k,1)*ury)
2851 agg(k,3)=agg(k,3)+fac3*(urzg(k,1)*vry+vryg(k,1)*urz)
2852 agg(k,4)=agg(k,4)+fac3*(urzg(k,1)*vrz+vrzg(k,1)*urz)
2855 C Derivatives in DC(i)
2856 cgrad ghalf1=0.5d0*agg(k,1)
2857 cgrad ghalf2=0.5d0*agg(k,2)
2858 cgrad ghalf3=0.5d0*agg(k,3)
2859 cgrad ghalf4=0.5d0*agg(k,4)
2860 aggi(k,1)=fac*(scalar(uygrad(1,k,1,i),uy(1,j))
2861 & -3.0d0*uryg(k,2)*vry)!+ghalf1
2862 aggi(k,2)=fac*(scalar(uygrad(1,k,1,i),uz(1,j))
2863 & -3.0d0*uryg(k,2)*vrz)!+ghalf2
2864 aggi(k,3)=fac*(scalar(uzgrad(1,k,1,i),uy(1,j))
2865 & -3.0d0*urzg(k,2)*vry)!+ghalf3
2866 aggi(k,4)=fac*(scalar(uzgrad(1,k,1,i),uz(1,j))
2867 & -3.0d0*urzg(k,2)*vrz)!+ghalf4
2868 C Derivatives in DC(i+1)
2869 aggi1(k,1)=fac*(scalar(uygrad(1,k,2,i),uy(1,j))
2870 & -3.0d0*uryg(k,3)*vry)!+agg(k,1)
2871 aggi1(k,2)=fac*(scalar(uygrad(1,k,2,i),uz(1,j))
2872 & -3.0d0*uryg(k,3)*vrz)!+agg(k,2)
2873 aggi1(k,3)=fac*(scalar(uzgrad(1,k,2,i),uy(1,j))
2874 & -3.0d0*urzg(k,3)*vry)!+agg(k,3)
2875 aggi1(k,4)=fac*(scalar(uzgrad(1,k,2,i),uz(1,j))
2876 & -3.0d0*urzg(k,3)*vrz)!+agg(k,4)
2877 C Derivatives in DC(j)
2878 aggj(k,1)=fac*(scalar(uygrad(1,k,1,j),uy(1,i))
2879 & -3.0d0*vryg(k,2)*ury)!+ghalf1
2880 aggj(k,2)=fac*(scalar(uzgrad(1,k,1,j),uy(1,i))
2881 & -3.0d0*vrzg(k,2)*ury)!+ghalf2
2882 aggj(k,3)=fac*(scalar(uygrad(1,k,1,j),uz(1,i))
2883 & -3.0d0*vryg(k,2)*urz)!+ghalf3
2884 aggj(k,4)=fac*(scalar(uzgrad(1,k,1,j),uz(1,i))
2885 & -3.0d0*vrzg(k,2)*urz)!+ghalf4
2886 C Derivatives in DC(j+1) or DC(nres-1)
2887 aggj1(k,1)=fac*(scalar(uygrad(1,k,2,j),uy(1,i))
2888 & -3.0d0*vryg(k,3)*ury)
2889 aggj1(k,2)=fac*(scalar(uzgrad(1,k,2,j),uy(1,i))
2890 & -3.0d0*vrzg(k,3)*ury)
2891 aggj1(k,3)=fac*(scalar(uygrad(1,k,2,j),uz(1,i))
2892 & -3.0d0*vryg(k,3)*urz)
2893 aggj1(k,4)=fac*(scalar(uzgrad(1,k,2,j),uz(1,i))
2894 & -3.0d0*vrzg(k,3)*urz)
2895 cgrad if (j.eq.nres-1 .and. i.lt.j-2) then
2897 cgrad aggj1(k,l)=aggj1(k,l)+agg(k,l)
2912 aggi(k,l)=-aggi(k,l)
2913 aggi1(k,l)=-aggi1(k,l)
2914 aggj(k,l)=-aggj(k,l)
2915 aggj1(k,l)=-aggj1(k,l)
2919 if (j.lt.nres-1) then
2925 aggi(k,l)=-aggi(k,l)
2926 aggi1(k,l)=-aggi1(k,l)
2927 aggj(k,l)=-aggj(k,l)
2928 aggj1(k,l)=-aggj1(k,l)
2939 aggi(k,l)=-aggi(k,l)
2940 aggi1(k,l)=-aggi1(k,l)
2941 aggj(k,l)=-aggj(k,l)
2942 aggj1(k,l)=-aggj1(k,l)
2947 IF (wel_loc.gt.0.0d0) THEN
2948 C Contribution to the local-electrostatic energy coming from the i-j pair
2949 eel_loc_ij=a22*muij(1)+a23*muij(2)+a32*muij(3)
2952 write (iout,*) "muij",muij," a22",a22," a23",a23," a32",a32,
2954 write (iout,*) "ij",i,j," eel_loc_ij",eel_loc_ij,
2955 & " wel_loc",wel_loc
2957 if (shield_mode.eq.0) then
2964 eel_loc_ij=eel_loc_ij
2965 & *fac_shield(i)*fac_shield(j)
2966 if (energy_dec) write (iout,'(a6,2i5,0pf7.3)')
2967 & 'eelloc',i,j,eel_loc_ij
2968 c if (eel_loc_ij.ne.0)
2969 c & write (iout,'(a4,2i4,8f9.5)')'chuj',
2970 c & i,j,a22,muij(1),a23,muij(2),a32,muij(3),a33,muij(4)
2972 eel_loc=eel_loc+eel_loc_ij
2973 C Now derivative over eel_loc
2975 if ((fac_shield(i).gt.0).and.(fac_shield(j).gt.0).and.
2976 & (shield_mode.gt.0)) then
2979 do ilist=1,ishield_list(i)
2980 iresshield=shield_list(ilist,i)
2982 rlocshield=grad_shield_side(k,ilist,i)*eel_loc_ij
2985 gshieldx_ll(k,iresshield)=gshieldx_ll(k,iresshield)+
2987 & +grad_shield_loc(k,ilist,i)*eel_loc_ij/fac_shield(i)
2988 gshieldc_ll(k,iresshield-1)=gshieldc_ll(k,iresshield-1)
2992 do ilist=1,ishield_list(j)
2993 iresshield=shield_list(ilist,j)
2995 rlocshield=grad_shield_side(k,ilist,j)*eel_loc_ij
2998 gshieldx_ll(k,iresshield)=gshieldx_ll(k,iresshield)+
3000 & +grad_shield_loc(k,ilist,j)*eel_loc_ij/fac_shield(j)
3001 gshieldc_ll(k,iresshield-1)=gshieldc_ll(k,iresshield-1)
3008 gshieldc_ll(k,i)=gshieldc_ll(k,i)+
3009 & grad_shield(k,i)*eel_loc_ij/fac_shield(i)
3010 gshieldc_ll(k,j)=gshieldc_ll(k,j)+
3011 & grad_shield(k,j)*eel_loc_ij/fac_shield(j)
3012 gshieldc_ll(k,i-1)=gshieldc_ll(k,i-1)+
3013 & grad_shield(k,i)*eel_loc_ij/fac_shield(i)
3014 gshieldc_ll(k,j-1)=gshieldc_ll(k,j-1)+
3015 & grad_shield(k,j)*eel_loc_ij/fac_shield(j)
3020 c write (iout,*) 'i',i,' j',j,itype(i),itype(j),
3021 c & ' eel_loc_ij',eel_loc_ij
3022 C write(iout,*) 'muije=',i,j,muij(1),muij(2),muij(3),muij(4)
3023 C Calculate patrial derivative for theta angle
3025 geel_loc_ij=(a22*gmuij1(1)
3029 & *fac_shield(i)*fac_shield(j)
3030 c write(iout,*) "derivative over thatai"
3031 c write(iout,*) a22*gmuij1(1), a23*gmuij1(2) ,a32*gmuij1(3),
3033 gloc(nphi+i,icg)=gloc(nphi+i,icg)+
3034 & geel_loc_ij*wel_loc
3035 c write(iout,*) "derivative over thatai-1"
3036 c write(iout,*) a22*gmuij2(1), a23*gmuij2(2) ,a32*gmuij2(3),
3043 gloc(nphi+i-1,icg)=gloc(nphi+i-1,icg)+
3044 & geel_loc_ij*wel_loc
3045 & *fac_shield(i)*fac_shield(j)
3047 c Derivative over j residue
3048 geel_loc_ji=a22*gmuji1(1)
3052 c write(iout,*) "derivative over thataj"
3053 c write(iout,*) a22*gmuji1(1), a23*gmuji1(2) ,a32*gmuji1(3),
3056 gloc(nphi+j,icg)=gloc(nphi+j,icg)+
3057 & geel_loc_ji*wel_loc
3058 & *fac_shield(i)*fac_shield(j)
3065 c write(iout,*) "derivative over thataj-1"
3066 c write(iout,*) a22*gmuji2(1), a23*gmuji2(2) ,a32*gmuji2(3),
3068 gloc(nphi+j-1,icg)=gloc(nphi+j-1,icg)+
3069 & geel_loc_ji*wel_loc
3070 & *fac_shield(i)*fac_shield(j)
3072 cd write (iout,*) 'i',i,' j',j,' eel_loc_ij',eel_loc_ij
3074 C Partial derivatives in virtual-bond dihedral angles gamma
3076 & gel_loc_loc(i-1)=gel_loc_loc(i-1)+
3077 & (a22*muder(1,i)*mu(1,j)+a23*muder(1,i)*mu(2,j)
3078 & +a32*muder(2,i)*mu(1,j)+a33*muder(2,i)*mu(2,j))
3079 & *fac_shield(i)*fac_shield(j)
3081 gel_loc_loc(j-1)=gel_loc_loc(j-1)+
3082 & (a22*mu(1,i)*muder(1,j)+a23*mu(1,i)*muder(2,j)
3083 & +a32*mu(2,i)*muder(1,j)+a33*mu(2,i)*muder(2,j))
3084 & *fac_shield(i)*fac_shield(j)
3085 C Derivatives of eello in DC(i+1) thru DC(j-1) or DC(nres-2)
3087 ggg(l)=(agg(l,1)*muij(1)+
3088 & agg(l,2)*muij(2)+agg(l,3)*muij(3)+agg(l,4)*muij(4))
3089 & *fac_shield(i)*fac_shield(j)
3090 gel_loc_long(l,j)=gel_loc_long(l,j)+ggg(l)
3091 gel_loc_long(l,i)=gel_loc_long(l,i)-ggg(l)
3092 cgrad ghalf=0.5d0*ggg(l)
3093 cgrad gel_loc(l,i)=gel_loc(l,i)+ghalf
3094 cgrad gel_loc(l,j)=gel_loc(l,j)+ghalf
3098 cgrad gel_loc(l,k)=gel_loc(l,k)+ggg(l)
3101 C Remaining derivatives of eello
3103 gel_loc(l,i)=gel_loc(l,i)+(aggi(l,1)*muij(1)+
3104 & aggi(l,2)*muij(2)+aggi(l,3)*muij(3)+aggi(l,4)*muij(4))
3105 & *fac_shield(i)*fac_shield(j)
3107 gel_loc(l,i+1)=gel_loc(l,i+1)+(aggi1(l,1)*muij(1)+
3108 & aggi1(l,2)*muij(2)+aggi1(l,3)*muij(3)+aggi1(l,4)*muij(4))
3109 & *fac_shield(i)*fac_shield(j)
3111 gel_loc(l,j)=gel_loc(l,j)+(aggj(l,1)*muij(1)+
3112 & aggj(l,2)*muij(2)+aggj(l,3)*muij(3)+aggj(l,4)*muij(4))
3113 & *fac_shield(i)*fac_shield(j)
3115 gel_loc(l,j1)=gel_loc(l,j1)+(aggj1(l,1)*muij(1)+
3116 & aggj1(l,2)*muij(2)+aggj1(l,3)*muij(3)+aggj1(l,4)*muij(4))
3117 & *fac_shield(i)*fac_shield(j)
3124 C Change 12/26/95 to calculate four-body contributions to H-bonding energy
3125 c if (j.gt.i+1 .and. num_conti.le.maxconts) then
3126 if (wcorr+wcorr4+wcorr5+wcorr6.gt.0.0d0
3127 & .and. num_conti.le.maxconts) then
3128 c write (iout,*) i,j," entered corr"
3130 C Calculate the contact function. The ith column of the array JCONT will
3131 C contain the numbers of atoms that make contacts with the atom I (of numbers
3132 C greater than I). The arrays FACONT and GACONT will contain the values of
3133 C the contact function and its derivative.
3134 c r0ij=1.02D0*rpp(iteli,itelj)
3135 c r0ij=1.11D0*rpp(iteli,itelj)
3136 r0ij=2.20D0*rpp(iteli,itelj)
3137 c r0ij=1.55D0*rpp(iteli,itelj)
3138 call gcont(rij,r0ij,1.0D0,0.2d0*r0ij,fcont,fprimcont)
3139 if (fcont.gt.0.0D0) then
3140 num_conti=num_conti+1
3141 if (num_conti.gt.maxconts) then
3142 write (iout,*) 'WARNING - max. # of contacts exceeded;',
3143 & ' will skip next contacts for this conf.'
3145 jcont_hb(num_conti,i)=j
3146 cd write (iout,*) "i",i," j",j," num_conti",num_conti,
3147 cd & " jcont_hb",jcont_hb(num_conti,i)
3148 IF (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or.
3149 & wcorr6.gt.0.0d0 .or. wturn6.gt.0.0d0) THEN
3150 C 9/30/99 (AL) - store components necessary to evaluate higher-order loc-el
3152 d_cont(num_conti,i)=rij
3153 cd write (2,'(3e15.5)') rij,r0ij+0.2d0*r0ij,rij
3154 C --- Electrostatic-interaction matrix ---
3155 a_chuj(1,1,num_conti,i)=a22
3156 a_chuj(1,2,num_conti,i)=a23
3157 a_chuj(2,1,num_conti,i)=a32
3158 a_chuj(2,2,num_conti,i)=a33
3159 C --- Gradient of rij
3162 grij_hb_cont(kkk,num_conti,i)=erij(kkk)
3169 a_chuj_der(k,l,m,1,num_conti,i)=agg(m,kkll)
3170 a_chuj_der(k,l,m,2,num_conti,i)=aggi(m,kkll)
3171 a_chuj_der(k,l,m,3,num_conti,i)=aggi1(m,kkll)
3172 a_chuj_der(k,l,m,4,num_conti,i)=aggj(m,kkll)
3173 a_chuj_der(k,l,m,5,num_conti,i)=aggj1(m,kkll)
3179 IF (wcorr4.eq.0.0d0 .and. wcorr.gt.0.0d0) THEN
3180 C Calculate contact energies
3182 wij=cosa-3.0D0*cosb*cosg
3185 c fac3=dsqrt(-ael6i)/r0ij**3
3186 fac3=dsqrt(-ael6i)*r3ij
3187 c ees0pij=dsqrt(4.0D0+cosa4+wij*wij-3.0D0*cosbg1*cosbg1)
3188 ees0tmp=4.0D0+cosa4+wij*wij-3.0D0*cosbg1*cosbg1
3189 if (ees0tmp.gt.0) then
3190 ees0pij=dsqrt(ees0tmp)
3194 c ees0mij=dsqrt(4.0D0-cosa4+wij*wij-3.0D0*cosbg2*cosbg2)
3195 ees0tmp=4.0D0-cosa4+wij*wij-3.0D0*cosbg2*cosbg2
3196 if (ees0tmp.gt.0) then
3197 ees0mij=dsqrt(ees0tmp)
3202 if (shield_mode.eq.0) then
3206 ees0plist(num_conti,i)=j
3207 C fac_shield(i)=0.4d0
3208 C fac_shield(j)=0.6d0
3210 ees0p(num_conti,i)=0.5D0*fac3*(ees0pij+ees0mij)
3211 & *fac_shield(i)*fac_shield(j)
3212 ees0m(num_conti,i)=0.5D0*fac3*(ees0pij-ees0mij)
3213 & *fac_shield(i)*fac_shield(j)
3214 C Diagnostics. Comment out or remove after debugging!
3215 c ees0p(num_conti,i)=0.5D0*fac3*ees0pij
3216 c ees0m(num_conti,i)=0.5D0*fac3*ees0mij
3217 c ees0m(num_conti,i)=0.0D0
3219 c write (iout,*) 'i=',i,' j=',j,' rij=',rij,' r0ij=',r0ij,
3220 c & ' ees0ij=',ees0p(num_conti,i),ees0m(num_conti,i),' fcont=',fcont
3221 C Angular derivatives of the contact function
3223 ees0pij1=fac3/ees0pij
3224 ees0mij1=fac3/ees0mij
3225 fac3p=-3.0D0*fac3*rrmij
3226 ees0pijp=0.5D0*fac3p*(ees0pij+ees0mij)
3227 ees0mijp=0.5D0*fac3p*(ees0pij-ees0mij)
3229 ecosa1= ees0pij1*( 1.0D0+0.5D0*wij)
3230 ecosb1=-1.5D0*ees0pij1*(wij*cosg+cosbg1)
3231 ecosg1=-1.5D0*ees0pij1*(wij*cosb+cosbg1)
3232 ecosa2= ees0mij1*(-1.0D0+0.5D0*wij)
3233 ecosb2=-1.5D0*ees0mij1*(wij*cosg+cosbg2)
3234 ecosg2=-1.5D0*ees0mij1*(wij*cosb-cosbg2)
3235 ecosap=ecosa1+ecosa2
3236 ecosbp=ecosb1+ecosb2
3237 ecosgp=ecosg1+ecosg2
3238 ecosam=ecosa1-ecosa2
3239 ecosbm=ecosb1-ecosb2
3240 ecosgm=ecosg1-ecosg2
3249 facont_hb(num_conti,i)=fcont
3252 fprimcont=fprimcont/rij
3253 cd facont_hb(num_conti,i)=1.0D0
3254 C Following line is for diagnostics.
3257 dcosb(k)=rmij*(dc_norm(k,i)-erij(k)*cosb)
3258 dcosg(k)=rmij*(dc_norm(k,j)-erij(k)*cosg)
3261 gggp(k)=ecosbp*dcosb(k)+ecosgp*dcosg(k)
3262 gggm(k)=ecosbm*dcosb(k)+ecosgm*dcosg(k)
3264 gggp(1)=gggp(1)+ees0pijp*xj
3265 gggp(2)=gggp(2)+ees0pijp*yj
3266 gggp(3)=gggp(3)+ees0pijp*zj
3267 gggm(1)=gggm(1)+ees0mijp*xj
3268 gggm(2)=gggm(2)+ees0mijp*yj
3269 gggm(3)=gggm(3)+ees0mijp*zj
3270 C Derivatives due to the contact function
3271 gacont_hbr(1,num_conti,i)=fprimcont*xj
3272 gacont_hbr(2,num_conti,i)=fprimcont*yj
3273 gacont_hbr(3,num_conti,i)=fprimcont*zj
3276 c 10/24/08 cgrad and ! comments indicate the parts of the code removed
3277 c following the change of gradient-summation algorithm.
3279 cgrad ghalfp=0.5D0*gggp(k)
3280 cgrad ghalfm=0.5D0*gggm(k)
3281 gacontp_hb1(k,num_conti,i)=!ghalfp
3282 & +(ecosap*(dc_norm(k,j)-cosa*dc_norm(k,i))
3283 & + ecosbp*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1)
3284 & *fac_shield(i)*fac_shield(j)
3286 gacontp_hb2(k,num_conti,i)=!ghalfp
3287 & +(ecosap*(dc_norm(k,i)-cosa*dc_norm(k,j))
3288 & + ecosgp*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1)
3289 & *fac_shield(i)*fac_shield(j)
3291 gacontp_hb3(k,num_conti,i)=gggp(k)
3292 & *fac_shield(i)*fac_shield(j)
3294 gacontm_hb1(k,num_conti,i)=!ghalfm
3295 & +(ecosam*(dc_norm(k,j)-cosa*dc_norm(k,i))
3296 & + ecosbm*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1)
3297 & *fac_shield(i)*fac_shield(j)
3299 gacontm_hb2(k,num_conti,i)=!ghalfm
3300 & +(ecosam*(dc_norm(k,i)-cosa*dc_norm(k,j))
3301 & + ecosgm*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1)
3302 & *fac_shield(i)*fac_shield(j)
3304 gacontm_hb3(k,num_conti,i)=gggm(k)
3305 & *fac_shield(i)*fac_shield(j)
3308 C Diagnostics. Comment out or remove after debugging!
3310 cdiag gacontp_hb1(k,num_conti,i)=0.0D0
3311 cdiag gacontp_hb2(k,num_conti,i)=0.0D0
3312 cdiag gacontp_hb3(k,num_conti,i)=0.0D0
3313 cdiag gacontm_hb1(k,num_conti,i)=0.0D0
3314 cdiag gacontm_hb2(k,num_conti,i)=0.0D0
3315 cdiag gacontm_hb3(k,num_conti,i)=0.0D0
3321 endif ! num_conti.le.maxconts
3325 if (wturn3.gt.0.0d0 .or. wturn4.gt.0.0d0) then
3328 ghalf=0.5d0*agg(l,k)
3329 aggi(l,k)=aggi(l,k)+ghalf
3330 aggi1(l,k)=aggi1(l,k)+agg(l,k)
3331 aggj(l,k)=aggj(l,k)+ghalf
3334 if (j.eq.nres-1 .and. i.lt.j-2) then
3337 aggj1(l,k)=aggj1(l,k)+agg(l,k)
3343 c t_eelecij=t_eelecij+MPI_Wtime()-time00
3346 C-----------------------------------------------------------------------------
3347 subroutine eturn3(i,eello_turn3)
3348 C Third- and fourth-order contributions from turns
3349 implicit real*8 (a-h,o-z)
3350 include 'DIMENSIONS'
3351 include 'DIMENSIONS.ZSCOPT'
3352 include 'COMMON.IOUNITS'
3353 include 'COMMON.GEO'
3354 include 'COMMON.VAR'
3355 include 'COMMON.LOCAL'
3356 include 'COMMON.CHAIN'
3357 include 'COMMON.DERIV'
3358 include 'COMMON.INTERACT'
3359 include 'COMMON.CONTACTS'
3360 include 'COMMON.TORSION'
3361 include 'COMMON.VECTORS'
3362 include 'COMMON.FFIELD'
3363 include 'COMMON.CONTROL'
3364 include 'COMMON.SHIELD'
3366 double precision auxmat(2,2),auxmat1(2,2),auxmat2(2,2),pizda(2,2),
3367 & e1t(2,2),e2t(2,2),e3t(2,2),e1tder(2,2),e2tder(2,2),e3tder(2,2),
3368 & e1a(2,2),ae3(2,2),ae3e2(2,2),auxvec(2),auxvec1(2),gpizda1(2,2),
3369 & gpizda2(2,2),auxgmat1(2,2),auxgmatt1(2,2),
3370 & auxgmat2(2,2),auxgmatt2(2,2)
3371 double precision agg(3,4),aggi(3,4),aggi1(3,4),
3372 & aggj(3,4),aggj1(3,4),a_temp(2,2),auxmat3(2,2)
3373 common /locel/ a_temp,agg,aggi,aggi1,aggj,aggj1,a22,a23,a32,a33,
3374 & dxi,dyi,dzi,dx_normi,dy_normi,dz_normi,xmedi,ymedi,zmedi,
3377 c write (iout,*) "eturn3",i,j,j1,j2
3382 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
3384 C Third-order contributions
3391 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
3392 cd call checkint_turn3(i,a_temp,eello_turn3_num)
3393 call matmat2(EUg(1,1,i+1),EUg(1,1,i+2),auxmat(1,1))
3394 c auxalary matices for theta gradient
3395 c auxalary matrix for i+1 and constant i+2
3396 call matmat2(gtEUg(1,1,i+1),EUg(1,1,i+2),auxgmat1(1,1))
3397 c auxalary matrix for i+2 and constant i+1
3398 call matmat2(EUg(1,1,i+1),gtEUg(1,1,i+2),auxgmat2(1,1))
3399 call transpose2(auxmat(1,1),auxmat1(1,1))
3400 call transpose2(auxgmat1(1,1),auxgmatt1(1,1))
3401 call transpose2(auxgmat2(1,1),auxgmatt2(1,1))
3402 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
3403 call matmat2(a_temp(1,1),auxgmatt1(1,1),gpizda1(1,1))
3404 call matmat2(a_temp(1,1),auxgmatt2(1,1),gpizda2(1,1))
3405 if (shield_mode.eq.0) then
3412 eello_turn3=eello_turn3+0.5d0*(pizda(1,1)+pizda(2,2))
3413 & *fac_shield(i)*fac_shield(j)
3414 eello_t3=0.5d0*(pizda(1,1)+pizda(2,2))
3415 & *fac_shield(i)*fac_shield(j)
3416 if (energy_dec) write (iout,'(6heturn3,2i5,0pf7.3)') i,i+2,
3420 C Derivatives in theta
3421 gloc(nphi+i,icg)=gloc(nphi+i,icg)
3422 & +0.5d0*(gpizda1(1,1)+gpizda1(2,2))*wturn3
3423 & *fac_shield(i)*fac_shield(j)
3424 gloc(nphi+i+1,icg)=gloc(nphi+i+1,icg)
3425 & +0.5d0*(gpizda2(1,1)+gpizda2(2,2))*wturn3
3426 & *fac_shield(i)*fac_shield(j)
3429 C Derivatives in shield mode
3430 if ((fac_shield(i).gt.0).and.(fac_shield(j).gt.0).and.
3431 & (shield_mode.gt.0)) then
3434 do ilist=1,ishield_list(i)
3435 iresshield=shield_list(ilist,i)
3437 rlocshield=grad_shield_side(k,ilist,i)*eello_t3/fac_shield(i)
3439 gshieldx_t3(k,iresshield)=gshieldx_t3(k,iresshield)+
3441 & +grad_shield_loc(k,ilist,i)*eello_t3/fac_shield(i)
3442 gshieldc_t3(k,iresshield-1)=gshieldc_t3(k,iresshield-1)
3446 do ilist=1,ishield_list(j)
3447 iresshield=shield_list(ilist,j)
3449 rlocshield=grad_shield_side(k,ilist,j)*eello_t3/fac_shield(j)
3451 gshieldx_t3(k,iresshield)=gshieldx_t3(k,iresshield)+
3453 & +grad_shield_loc(k,ilist,j)*eello_t3/fac_shield(j)
3454 gshieldc_t3(k,iresshield-1)=gshieldc_t3(k,iresshield-1)
3461 gshieldc_t3(k,i)=gshieldc_t3(k,i)+
3462 & grad_shield(k,i)*eello_t3/fac_shield(i)
3463 gshieldc_t3(k,j)=gshieldc_t3(k,j)+
3464 & grad_shield(k,j)*eello_t3/fac_shield(j)
3465 gshieldc_t3(k,i-1)=gshieldc_t3(k,i-1)+
3466 & grad_shield(k,i)*eello_t3/fac_shield(i)
3467 gshieldc_t3(k,j-1)=gshieldc_t3(k,j-1)+
3468 & grad_shield(k,j)*eello_t3/fac_shield(j)
3472 C if (energy_dec) write (iout,'(a6,2i5,0pf7.3)')
3473 cd write (2,*) 'i,',i,' j',j,'eello_turn3',
3474 cd & 0.5d0*(pizda(1,1)+pizda(2,2)),
3475 cd & ' eello_turn3_num',4*eello_turn3_num
3476 C Derivatives in gamma(i)
3477 call matmat2(EUgder(1,1,i+1),EUg(1,1,i+2),auxmat2(1,1))
3478 call transpose2(auxmat2(1,1),auxmat3(1,1))
3479 call matmat2(a_temp(1,1),auxmat3(1,1),pizda(1,1))
3480 gel_loc_turn3(i)=gel_loc_turn3(i)+0.5d0*(pizda(1,1)+pizda(2,2))
3481 & *fac_shield(i)*fac_shield(j)
3482 C Derivatives in gamma(i+1)
3483 call matmat2(EUg(1,1,i+1),EUgder(1,1,i+2),auxmat2(1,1))
3484 call transpose2(auxmat2(1,1),auxmat3(1,1))
3485 call matmat2(a_temp(1,1),auxmat3(1,1),pizda(1,1))
3486 gel_loc_turn3(i+1)=gel_loc_turn3(i+1)
3487 & +0.5d0*(pizda(1,1)+pizda(2,2))
3488 & *fac_shield(i)*fac_shield(j)
3489 C Cartesian derivatives
3491 c ghalf1=0.5d0*agg(l,1)
3492 c ghalf2=0.5d0*agg(l,2)
3493 c ghalf3=0.5d0*agg(l,3)
3494 c ghalf4=0.5d0*agg(l,4)
3495 a_temp(1,1)=aggi(l,1)!+ghalf1
3496 a_temp(1,2)=aggi(l,2)!+ghalf2
3497 a_temp(2,1)=aggi(l,3)!+ghalf3
3498 a_temp(2,2)=aggi(l,4)!+ghalf4
3499 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
3500 gcorr3_turn(l,i)=gcorr3_turn(l,i)
3501 & +0.5d0*(pizda(1,1)+pizda(2,2))
3502 & *fac_shield(i)*fac_shield(j)
3504 a_temp(1,1)=aggi1(l,1)!+agg(l,1)
3505 a_temp(1,2)=aggi1(l,2)!+agg(l,2)
3506 a_temp(2,1)=aggi1(l,3)!+agg(l,3)
3507 a_temp(2,2)=aggi1(l,4)!+agg(l,4)
3508 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
3509 gcorr3_turn(l,i+1)=gcorr3_turn(l,i+1)
3510 & +0.5d0*(pizda(1,1)+pizda(2,2))
3511 & *fac_shield(i)*fac_shield(j)
3512 a_temp(1,1)=aggj(l,1)!+ghalf1
3513 a_temp(1,2)=aggj(l,2)!+ghalf2
3514 a_temp(2,1)=aggj(l,3)!+ghalf3
3515 a_temp(2,2)=aggj(l,4)!+ghalf4
3516 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
3517 gcorr3_turn(l,j)=gcorr3_turn(l,j)
3518 & +0.5d0*(pizda(1,1)+pizda(2,2))
3519 & *fac_shield(i)*fac_shield(j)
3520 a_temp(1,1)=aggj1(l,1)
3521 a_temp(1,2)=aggj1(l,2)
3522 a_temp(2,1)=aggj1(l,3)
3523 a_temp(2,2)=aggj1(l,4)
3524 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
3525 gcorr3_turn(l,j1)=gcorr3_turn(l,j1)
3526 & +0.5d0*(pizda(1,1)+pizda(2,2))
3527 & *fac_shield(i)*fac_shield(j)
3534 C-------------------------------------------------------------------------------
3535 subroutine eturn4(i,eello_turn4)
3536 C Third- and fourth-order contributions from turns
3537 implicit real*8 (a-h,o-z)
3538 include 'DIMENSIONS'
3539 include 'DIMENSIONS.ZSCOPT'
3540 include 'COMMON.IOUNITS'
3541 include 'COMMON.GEO'
3542 include 'COMMON.VAR'
3543 include 'COMMON.LOCAL'
3544 include 'COMMON.CHAIN'
3545 include 'COMMON.DERIV'
3546 include 'COMMON.INTERACT'
3547 include 'COMMON.CONTACTS'
3548 include 'COMMON.TORSION'
3549 include 'COMMON.VECTORS'
3550 include 'COMMON.FFIELD'
3551 include 'COMMON.CONTROL'
3552 include 'COMMON.SHIELD'
3554 double precision auxmat(2,2),auxmat1(2,2),auxmat2(2,2),pizda(2,2),
3555 & e1t(2,2),e2t(2,2),e3t(2,2),e1tder(2,2),e2tder(2,2),e3tder(2,2),
3556 & e1a(2,2),ae3(2,2),ae3e2(2,2),auxvec(2),auxvec1(2),auxgvec(2),
3557 & auxgEvec1(2),auxgEvec2(2),auxgEvec3(2),
3558 & gte1t(2,2),gte2t(2,2),gte3t(2,2),
3559 & gte1a(2,2),gtae3(2,2),gtae3e2(2,2), ae3gte2(2,2),
3560 & gtEpizda1(2,2),gtEpizda2(2,2),gtEpizda3(2,2)
3561 double precision agg(3,4),aggi(3,4),aggi1(3,4),
3562 & aggj(3,4),aggj1(3,4),a_temp(2,2),auxmat3(2,2)
3563 common /locel/ a_temp,agg,aggi,aggi1,aggj,aggj1,a22,a23,a32,a33,
3564 & dxi,dyi,dzi,dx_normi,dy_normi,dz_normi,xmedi,ymedi,zmedi,
3567 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
3569 C Fourth-order contributions
3577 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
3578 cd call checkint_turn4(i,a_temp,eello_turn4_num)
3579 c write (iout,*) "eturn4 i",i," j",j," j1",j1," j2",j2
3580 c write(iout,*)"WCHODZE W PROGRAM"
3585 iti1=itype2loc(itype(i+1))
3586 iti2=itype2loc(itype(i+2))
3587 iti3=itype2loc(itype(i+3))
3588 c write(iout,*) "iti1",iti1," iti2",iti2," iti3",iti3
3589 call transpose2(EUg(1,1,i+1),e1t(1,1))
3590 call transpose2(Eug(1,1,i+2),e2t(1,1))
3591 call transpose2(Eug(1,1,i+3),e3t(1,1))
3592 C Ematrix derivative in theta
3593 call transpose2(gtEUg(1,1,i+1),gte1t(1,1))
3594 call transpose2(gtEug(1,1,i+2),gte2t(1,1))
3595 call transpose2(gtEug(1,1,i+3),gte3t(1,1))
3596 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
3597 c eta1 in derivative theta
3598 call matmat2(gte1t(1,1),a_temp(1,1),gte1a(1,1))
3599 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
3600 c auxgvec is derivative of Ub2 so i+3 theta
3601 call matvec2(e1a(1,1),gUb2(1,i+3),auxgvec(1))
3602 c auxalary matrix of E i+1
3603 call matvec2(gte1a(1,1),Ub2(1,i+3),auxgEvec1(1))
3606 s1=scalar2(b1(1,i+2),auxvec(1))
3607 c derivative of theta i+2 with constant i+3
3608 gs23=scalar2(gtb1(1,i+2),auxvec(1))
3609 c derivative of theta i+2 with constant i+2
3610 gs32=scalar2(b1(1,i+2),auxgvec(1))
3611 c derivative of E matix in theta of i+1
3612 gsE13=scalar2(b1(1,i+2),auxgEvec1(1))
3614 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
3615 c ea31 in derivative theta
3616 call matmat2(a_temp(1,1),gte3t(1,1),gtae3(1,1))
3617 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
3618 c auxilary matrix auxgvec of Ub2 with constant E matirx
3619 call matvec2(ae3(1,1),gUb2(1,i+2),auxgvec(1))
3620 c auxilary matrix auxgEvec1 of E matix with Ub2 constant
3621 call matvec2(gtae3(1,1),Ub2(1,i+2),auxgEvec3(1))
3625 s2=scalar2(b1(1,i+1),auxvec(1))
3626 c derivative of theta i+1 with constant i+3
3627 gs13=scalar2(gtb1(1,i+1),auxvec(1))
3628 c derivative of theta i+2 with constant i+1
3629 gs21=scalar2(b1(1,i+1),auxgvec(1))
3630 c derivative of theta i+3 with constant i+1
3631 gsE31=scalar2(b1(1,i+1),auxgEvec3(1))
3632 c write(iout,*) gs1,gs2,'i=',i,auxgvec(1),gUb2(1,i+2),gtb1(1,i+2),
3634 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
3635 c two derivatives over diffetent matrices
3636 c gtae3e2 is derivative over i+3
3637 call matmat2(gtae3(1,1),e2t(1,1),gtae3e2(1,1))
3638 c ae3gte2 is derivative over i+2
3639 call matmat2(ae3(1,1),gte2t(1,1),ae3gte2(1,1))
3640 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
3641 c three possible derivative over theta E matices
3643 call matmat2(ae3e2(1,1),gte1t(1,1),gtEpizda1(1,1))
3645 call matmat2(ae3gte2(1,1),e1t(1,1),gtEpizda2(1,1))
3647 call matmat2(gtae3e2(1,1),e1t(1,1),gtEpizda3(1,1))
3648 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3650 gsEE1=0.5d0*(gtEpizda1(1,1)+gtEpizda1(2,2))
3651 gsEE2=0.5d0*(gtEpizda2(1,1)+gtEpizda2(2,2))
3652 gsEE3=0.5d0*(gtEpizda3(1,1)+gtEpizda3(2,2))
3653 if (shield_mode.eq.0) then
3660 eello_turn4=eello_turn4-(s1+s2+s3)
3661 & *fac_shield(i)*fac_shield(j)
3662 eello_t4=-(s1+s2+s3)
3663 & *fac_shield(i)*fac_shield(j)
3664 c write(iout,*)'chujOWO', auxvec(1),b1(1,iti2)
3665 if (energy_dec) write (iout,'(a6,2i5,0pf7.3,3f7.3)')
3666 & 'eturn4',i,j,-(s1+s2+s3),s1,s2,s3
3667 C Now derivative over shield:
3668 if ((fac_shield(i).gt.0).and.(fac_shield(j).gt.0).and.
3669 & (shield_mode.gt.0)) then
3672 do ilist=1,ishield_list(i)
3673 iresshield=shield_list(ilist,i)
3675 rlocshield=grad_shield_side(k,ilist,i)*eello_t4/fac_shield(i)
3677 gshieldx_t4(k,iresshield)=gshieldx_t4(k,iresshield)+
3679 & +grad_shield_loc(k,ilist,i)*eello_t4/fac_shield(i)
3680 gshieldc_t4(k,iresshield-1)=gshieldc_t4(k,iresshield-1)
3684 do ilist=1,ishield_list(j)
3685 iresshield=shield_list(ilist,j)
3687 rlocshield=grad_shield_side(k,ilist,j)*eello_t4/fac_shield(j)
3689 gshieldx_t4(k,iresshield)=gshieldx_t4(k,iresshield)+
3691 & +grad_shield_loc(k,ilist,j)*eello_t4/fac_shield(j)
3692 gshieldc_t4(k,iresshield-1)=gshieldc_t4(k,iresshield-1)
3699 gshieldc_t4(k,i)=gshieldc_t4(k,i)+
3700 & grad_shield(k,i)*eello_t4/fac_shield(i)
3701 gshieldc_t4(k,j)=gshieldc_t4(k,j)+
3702 & grad_shield(k,j)*eello_t4/fac_shield(j)
3703 gshieldc_t4(k,i-1)=gshieldc_t4(k,i-1)+
3704 & grad_shield(k,i)*eello_t4/fac_shield(i)
3705 gshieldc_t4(k,j-1)=gshieldc_t4(k,j-1)+
3706 & grad_shield(k,j)*eello_t4/fac_shield(j)
3709 cd write (2,*) 'i,',i,' j',j,'eello_turn4',-(s1+s2+s3),
3710 cd & ' eello_turn4_num',8*eello_turn4_num
3712 gloc(nphi+i,icg)=gloc(nphi+i,icg)
3713 & -(gs13+gsE13+gsEE1)*wturn4
3714 & *fac_shield(i)*fac_shield(j)
3715 gloc(nphi+i+1,icg)= gloc(nphi+i+1,icg)
3716 & -(gs23+gs21+gsEE2)*wturn4
3717 & *fac_shield(i)*fac_shield(j)
3719 gloc(nphi+i+2,icg)= gloc(nphi+i+2,icg)
3720 & -(gs32+gsE31+gsEE3)*wturn4
3721 & *fac_shield(i)*fac_shield(j)
3723 c gloc(nphi+i+1,icg)=gloc(nphi+i+1,icg)-
3726 if (energy_dec) write (iout,'(a6,2i5,0pf7.3)')
3727 & 'eturn4',i,j,-(s1+s2+s3)
3728 c write (iout,*) 'i,',i,' j',j,'eello_turn4',-(s1+s2+s3),
3729 c & ' eello_turn4_num',8*eello_turn4_num
3730 C Derivatives in gamma(i)
3731 call transpose2(EUgder(1,1,i+1),e1tder(1,1))
3732 call matmat2(e1tder(1,1),a_temp(1,1),auxmat(1,1))
3733 call matvec2(auxmat(1,1),Ub2(1,i+3),auxvec(1))
3734 s1=scalar2(b1(1,i+2),auxvec(1))
3735 call matmat2(ae3e2(1,1),e1tder(1,1),pizda(1,1))
3736 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3737 gel_loc_turn4(i)=gel_loc_turn4(i)-(s1+s3)
3738 & *fac_shield(i)*fac_shield(j)
3739 C Derivatives in gamma(i+1)
3740 call transpose2(EUgder(1,1,i+2),e2tder(1,1))
3741 call matvec2(ae3(1,1),Ub2der(1,i+2),auxvec(1))
3742 s2=scalar2(b1(1,i+1),auxvec(1))
3743 call matmat2(ae3(1,1),e2tder(1,1),auxmat(1,1))
3744 call matmat2(auxmat(1,1),e1t(1,1),pizda(1,1))
3745 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3746 gel_loc_turn4(i+1)=gel_loc_turn4(i+1)-(s2+s3)
3747 & *fac_shield(i)*fac_shield(j)
3748 C Derivatives in gamma(i+2)
3749 call transpose2(EUgder(1,1,i+3),e3tder(1,1))
3750 call matvec2(e1a(1,1),Ub2der(1,i+3),auxvec(1))
3751 s1=scalar2(b1(1,i+2),auxvec(1))
3752 call matmat2(a_temp(1,1),e3tder(1,1),auxmat(1,1))
3753 call matvec2(auxmat(1,1),Ub2(1,i+2),auxvec(1))
3754 s2=scalar2(b1(1,i+1),auxvec(1))
3755 call matmat2(auxmat(1,1),e2t(1,1),auxmat3(1,1))
3756 call matmat2(auxmat3(1,1),e1t(1,1),pizda(1,1))
3757 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3758 gel_loc_turn4(i+2)=gel_loc_turn4(i+2)-(s1+s2+s3)
3759 & *fac_shield(i)*fac_shield(j)
3761 C Cartesian derivatives
3762 C Derivatives of this turn contributions in DC(i+2)
3763 if (j.lt.nres-1) then
3765 a_temp(1,1)=agg(l,1)
3766 a_temp(1,2)=agg(l,2)
3767 a_temp(2,1)=agg(l,3)
3768 a_temp(2,2)=agg(l,4)
3769 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
3770 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
3771 s1=scalar2(b1(1,i+2),auxvec(1))
3772 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
3773 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
3774 s2=scalar2(b1(1,i+1),auxvec(1))
3775 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
3776 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
3777 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3779 gcorr4_turn(l,i+2)=gcorr4_turn(l,i+2)-(s1+s2+s3)
3780 & *fac_shield(i)*fac_shield(j)
3783 C Remaining derivatives of this turn contribution
3785 a_temp(1,1)=aggi(l,1)
3786 a_temp(1,2)=aggi(l,2)
3787 a_temp(2,1)=aggi(l,3)
3788 a_temp(2,2)=aggi(l,4)
3789 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
3790 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
3791 s1=scalar2(b1(1,i+2),auxvec(1))
3792 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
3793 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
3794 s2=scalar2(b1(1,i+1),auxvec(1))
3795 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
3796 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
3797 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3798 gcorr4_turn(l,i)=gcorr4_turn(l,i)-(s1+s2+s3)
3799 & *fac_shield(i)*fac_shield(j)
3800 a_temp(1,1)=aggi1(l,1)
3801 a_temp(1,2)=aggi1(l,2)
3802 a_temp(2,1)=aggi1(l,3)
3803 a_temp(2,2)=aggi1(l,4)
3804 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
3805 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
3806 s1=scalar2(b1(1,i+2),auxvec(1))
3807 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
3808 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
3809 s2=scalar2(b1(1,i+1),auxvec(1))
3810 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
3811 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
3812 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3813 gcorr4_turn(l,i+1)=gcorr4_turn(l,i+1)-(s1+s2+s3)
3814 & *fac_shield(i)*fac_shield(j)
3815 a_temp(1,1)=aggj(l,1)
3816 a_temp(1,2)=aggj(l,2)
3817 a_temp(2,1)=aggj(l,3)
3818 a_temp(2,2)=aggj(l,4)
3819 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
3820 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
3821 s1=scalar2(b1(1,i+2),auxvec(1))
3822 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
3823 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
3824 s2=scalar2(b1(1,i+1),auxvec(1))
3825 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
3826 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
3827 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3828 gcorr4_turn(l,j)=gcorr4_turn(l,j)-(s1+s2+s3)
3829 & *fac_shield(i)*fac_shield(j)
3830 a_temp(1,1)=aggj1(l,1)
3831 a_temp(1,2)=aggj1(l,2)
3832 a_temp(2,1)=aggj1(l,3)
3833 a_temp(2,2)=aggj1(l,4)
3834 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
3835 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
3836 s1=scalar2(b1(1,i+2),auxvec(1))
3837 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
3838 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
3839 s2=scalar2(b1(1,i+1),auxvec(1))
3840 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
3841 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
3842 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3843 c write (iout,*) "s1",s1," s2",s2," s3",s3," s1+s2+s3",s1+s2+s3
3844 gcorr4_turn(l,j1)=gcorr4_turn(l,j1)-(s1+s2+s3)
3845 & *fac_shield(i)*fac_shield(j)
3852 C-----------------------------------------------------------------------------
3853 subroutine vecpr(u,v,w)
3854 implicit real*8(a-h,o-z)
3855 dimension u(3),v(3),w(3)
3856 w(1)=u(2)*v(3)-u(3)*v(2)
3857 w(2)=-u(1)*v(3)+u(3)*v(1)
3858 w(3)=u(1)*v(2)-u(2)*v(1)
3861 C-----------------------------------------------------------------------------
3862 subroutine unormderiv(u,ugrad,unorm,ungrad)
3863 C This subroutine computes the derivatives of a normalized vector u, given
3864 C the derivatives computed without normalization conditions, ugrad. Returns
3867 double precision u(3),ugrad(3,3),unorm,ungrad(3,3)
3868 double precision vec(3)
3869 double precision scalar
3871 c write (2,*) 'ugrad',ugrad
3874 vec(i)=scalar(ugrad(1,i),u(1))
3876 c write (2,*) 'vec',vec
3879 ungrad(j,i)=(ugrad(j,i)-u(j)*vec(i))*unorm
3882 c write (2,*) 'ungrad',ungrad
3885 C-----------------------------------------------------------------------------
3886 subroutine escp(evdw2,evdw2_14)
3888 C This subroutine calculates the excluded-volume interaction energy between
3889 C peptide-group centers and side chains and its gradient in virtual-bond and
3890 C side-chain vectors.
3892 implicit real*8 (a-h,o-z)
3893 include 'DIMENSIONS'
3894 include 'DIMENSIONS.ZSCOPT'
3895 include 'COMMON.CONTROL'
3896 include 'COMMON.GEO'
3897 include 'COMMON.VAR'
3898 include 'COMMON.LOCAL'
3899 include 'COMMON.CHAIN'
3900 include 'COMMON.DERIV'
3901 include 'COMMON.INTERACT'
3902 include 'COMMON.FFIELD'
3903 include 'COMMON.IOUNITS'
3907 cd print '(a)','Enter ESCP'
3908 c write (iout,*) 'iatscp_s=',iatscp_s,' iatscp_e=',iatscp_e,
3909 c & ' scal14',scal14
3910 do i=iatscp_s,iatscp_e
3911 if (itype(i).eq.ntyp1 .or. itype(i+1).eq.ntyp1) cycle
3913 c write (iout,*) "i",i," iteli",iteli," nscp_gr",nscp_gr(i),
3914 c & " iscp",(iscpstart(i,j),iscpend(i,j),j=1,nscp_gr(i))
3915 if (iteli.eq.0) goto 1225
3916 xi=0.5D0*(c(1,i)+c(1,i+1))
3917 yi=0.5D0*(c(2,i)+c(2,i+1))
3918 zi=0.5D0*(c(3,i)+c(3,i+1))
3919 C Returning the ith atom to box
3921 if (xi.lt.0) xi=xi+boxxsize
3923 if (yi.lt.0) yi=yi+boxysize
3925 if (zi.lt.0) zi=zi+boxzsize
3926 do iint=1,nscp_gr(i)
3928 do j=iscpstart(i,iint),iscpend(i,iint)
3929 itypj=iabs(itype(j))
3930 if (itypj.eq.ntyp1) cycle
3931 C Uncomment following three lines for SC-p interactions
3935 C Uncomment following three lines for Ca-p interactions
3939 C returning the jth atom to box
3941 if (xj.lt.0) xj=xj+boxxsize
3943 if (yj.lt.0) yj=yj+boxysize
3945 if (zj.lt.0) zj=zj+boxzsize
3946 dist_init=(xj-xi)**2+(yj-yi)**2+(zj-zi)**2
3951 C Finding the closest jth atom
3955 xj=xj_safe+xshift*boxxsize
3956 yj=yj_safe+yshift*boxysize
3957 zj=zj_safe+zshift*boxzsize
3958 dist_temp=(xj-xi)**2+(yj-yi)**2+(zj-zi)**2
3959 if(dist_temp.lt.dist_init) then
3969 if (subchap.eq.1) then
3978 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
3979 C sss is scaling function for smoothing the cutoff gradient otherwise
3980 C the gradient would not be continuouse
3981 sss=sscale(1.0d0/(dsqrt(rrij)))
3982 if (sss.le.0.0d0) cycle
3983 sssgrad=sscagrad(1.0d0/(dsqrt(rrij)))
3985 e1=fac*fac*aad(itypj,iteli)
3986 e2=fac*bad(itypj,iteli)
3987 if (iabs(j-i) .le. 2) then
3990 evdw2_14=evdw2_14+(e1+e2)*sss
3993 c write (iout,'(a6,2i5,0pf7.3,2i3,3e11.3)')
3994 c & 'evdw2',i,j,evdwij,iteli,itypj,fac,aad(itypj,iteli),
3995 c & bad(itypj,iteli)
3996 evdw2=evdw2+evdwij*sss
3997 if (energy_dec) write (iout,'(a6,2i5,0pf7.3,2i3,3e11.3)')
3998 & 'evdw2',i,j,evdwij,iteli,itypj,fac,aad(itypj,iteli),
4003 C Calculate contributions to the gradient in the virtual-bond and SC vectors.
4005 fac=-(evdwij+e1)*rrij*sss
4006 fac=fac+(evdwij)*sssgrad*dsqrt(rrij)/expon
4011 cd write (iout,*) 'j<i'
4012 C Uncomment following three lines for SC-p interactions
4014 c gradx_scp(k,j)=gradx_scp(k,j)+ggg(k)
4017 cd write (iout,*) 'j>i'
4020 C Uncomment following line for SC-p interactions
4021 c gradx_scp(k,j)=gradx_scp(k,j)-ggg(k)
4025 gvdwc_scp(k,i)=gvdwc_scp(k,i)-0.5D0*ggg(k)
4029 cd write (iout,*) 'i=',i,' j=',j,' kstart=',kstart,' kend=',kend
4030 cd write (iout,*) ggg(1),ggg(2),ggg(3)
4033 gvdwc_scp(l,k)=gvdwc_scp(l,k)-ggg(l)
4043 gvdwc_scp(j,i)=expon*gvdwc_scp(j,i)
4044 gradx_scp(j,i)=expon*gradx_scp(j,i)
4047 C******************************************************************************
4051 C To save time the factor EXPON has been extracted from ALL components
4052 C of GVDWC and GRADX. Remember to multiply them by this factor before further
4055 C******************************************************************************
4058 C--------------------------------------------------------------------------
4059 subroutine edis(ehpb)
4061 C Evaluate bridge-strain energy and its gradient in virtual-bond and SC vectors.
4063 implicit real*8 (a-h,o-z)
4064 include 'DIMENSIONS'
4065 include 'DIMENSIONS.ZSCOPT'
4066 include 'COMMON.SBRIDGE'
4067 include 'COMMON.CHAIN'
4068 include 'COMMON.DERIV'
4069 include 'COMMON.VAR'
4070 include 'COMMON.INTERACT'
4071 include 'COMMON.CONTROL'
4072 include 'COMMON.IOUNITS'
4073 dimension ggg(3),ggg_peak(3,100)
4078 C write (iout,*) ,"link_end",link_end,constr_dist
4079 cd write(iout,*)'edis: nhpb=',nhpb,' fbr=',fbr
4080 c write(iout,*)'link_start=',link_start,' link_end=',link_end,
4081 c & " constr_dist",constr_dist
4082 if (link_end.eq.0.and.link_end_peak.eq.0) return
4083 do i=link_start_peak,link_end_peak
4085 c print *,"i",i," link_end_peak",link_end_peak," ipeak",
4086 c & ipeak(1,i),ipeak(2,i)
4087 do ip=ipeak(1,i),ipeak(2,i)
4092 C iii and jjj point to the residues for which the distance is assigned.
4093 if (ii.gt.nres) then
4100 aux=rlornmr1(dd,dhpb_peak(ip),dhpb1_peak(ip),forcon_peak(ip))
4101 aux=dexp(-scal_peak*aux)
4102 ehpb_peak=ehpb_peak+aux
4103 fac=rlornmr1prim(dd,dhpb_peak(ip),dhpb1_peak(ip),
4104 & forcon_peak(ip))*aux/dd
4106 ggg_peak(j,iip)=fac*(c(j,jj)-c(j,ii))
4108 if (energy_dec) write (iout,'(a6,3i5,6f10.3,i5)')
4109 & "edisL",i,ii,jj,dd,dhpb_peak(ip),dhpb1_peak(ip),
4110 & forcon_peak(ip),fordepth_peak(ip),ehpb_peak
4112 c write (iout,*) i,ii,jj,"ehpb_peak",ehpb_peak,
4113 c & " scal_peak",scal_peak
4114 ehpb=ehpb-fordepth_peak(ipeak(1,i))*dlog(ehpb_peak)/scal_peak
4115 do ip=ipeak(1,i),ipeak(2,i)
4118 ggg(j)=ggg_peak(j,iip)/ehpb_peak
4122 C iii and jjj point to the residues for which the distance is assigned.
4123 if (ii.gt.nres) then
4132 ghpbx(j,iii)=ghpbx(j,iii)-ggg(j)
4133 ghpbx(j,jjj)=ghpbx(j,jjj)+ggg(j)
4137 ghpbc(k,jjj)=ghpbc(k,jjj)+ggg(k)
4138 ghpbc(k,iii)=ghpbc(k,iii)-ggg(k)
4142 do i=link_start,link_end
4143 C If ihpb(i) and jhpb(i) > NRES, this is a SC-SC distance, otherwise a
4144 C CA-CA distance used in regularization of structure.
4147 C iii and jjj point to the residues for which the distance is assigned.
4148 if (ii.gt.nres) then
4155 c write (iout,*) "i",i," ii",ii," iii",iii," jj",jj," jjj",jjj,
4156 c & dhpb(i),dhpb1(i),forcon(i)
4157 C 24/11/03 AL: SS bridges handled separately because of introducing a specific
4158 C distance and angle dependent SS bond potential.
4159 C if (ii.gt.nres .and. iabs(itype(iii)).eq.1 .and.
4160 C & iabs(itype(jjj)).eq.1) then
4161 cmc if (ii.gt.nres .and. itype(iii).eq.1 .and. itype(jjj).eq.1) then
4162 C 18/07/06 MC: Use the convention that the first nss pairs are SS bonds
4163 if (.not.dyn_ss .and. i.le.nss) then
4164 C 15/02/13 CC dynamic SSbond - additional check
4165 if (ii.gt.nres .and. iabs(itype(iii)).eq.1 .and.
4166 & iabs(itype(jjj)).eq.1) then
4167 call ssbond_ene(iii,jjj,eij)
4170 cd write (iout,*) "eij",eij
4171 cd & ' waga=',waga,' fac=',fac
4172 ! else if (ii.gt.nres .and. jj.gt.nres) then
4174 C Calculate the distance between the two points and its difference from the
4177 if (irestr_type(i).eq.11) then
4178 ehpb=ehpb+fordepth(i)!**4.0d0
4179 & *rlornmr1(dd,dhpb(i),dhpb1(i),forcon(i))
4180 fac=fordepth(i)!**4.0d0
4181 & *rlornmr1prim(dd,dhpb(i),dhpb1(i),forcon(i))/dd
4182 if (energy_dec) write (iout,'(a6,2i5,6f10.3,i5)')
4183 & "edisL",ii,jj,dd,dhpb(i),dhpb1(i),forcon(i),fordepth(i),
4184 & ehpb,irestr_type(i)
4185 else if (irestr_type(i).eq.10) then
4186 c AL 6//19/2018 cross-link restraints
4187 xdis = 0.5d0*(dd/forcon(i))**2
4188 expdis = dexp(-xdis)
4189 c aux=(dhpb(i)+dhpb1(i)*xdis)*expdis+fordepth(i)
4190 aux=(dhpb(i)+dhpb1(i)*xdis*xdis)*expdis+fordepth(i)
4191 c write (iout,*)"HERE: xdis",xdis," expdis",expdis," aux",aux,
4192 c & " wboltzd",wboltzd
4193 ehpb=ehpb-wboltzd*xlscore(i)*dlog(aux)
4194 c fac=-wboltzd*(dhpb1(i)*(1.0d0-xdis)-dhpb(i))
4195 fac=-wboltzd*xlscore(i)*(dhpb1(i)*(2.0d0-xdis)*xdis-dhpb(i))
4196 & *expdis/(aux*forcon(i)**2)
4197 if (energy_dec) write(iout,'(a6,2i5,6f10.3,i5)')
4198 & "edisX",ii,jj,dd,dhpb(i),dhpb1(i),forcon(i),fordepth(i),
4199 & -wboltzd*xlscore(i)*dlog(aux),irestr_type(i)
4200 else if (irestr_type(i).eq.2) then
4201 c Quartic restraints
4202 ehpb=ehpb+forcon(i)*gnmr1(dd,dhpb(i),dhpb1(i))
4203 if (energy_dec) write(iout,'(a6,2i5,5f10.3,i5)')
4204 & "edisQ",ii,jj,dd,dhpb(i),dhpb1(i),forcon(i),
4205 & forcon(i)*gnmr1(dd,dhpb(i),dhpb1(i)),irestr_type(i)
4206 fac=forcon(i)*gnmr1prim(dd,dhpb(i),dhpb1(i))/dd
4208 c Quadratic restraints
4210 C Get the force constant corresponding to this distance.
4212 C Calculate the contribution to energy.
4213 ehpb=ehpb+0.5d0*waga*rdis*rdis
4214 if (energy_dec) write(iout,'(a6,2i5,5f10.3,i5)')
4215 & "edisS",ii,jj,dd,dhpb(i),dhpb1(i),forcon(i),
4216 & 0.5d0*waga*rdis*rdis,irestr_type(i)
4218 C Evaluate gradient.
4222 c Calculate Cartesian gradient
4224 ggg(j)=fac*(c(j,jj)-c(j,ii))
4226 cd print '(i3,3(1pe14.5))',i,(ggg(j),j=1,3)
4227 C If this is a SC-SC distance, we need to calculate the contributions to the
4228 C Cartesian gradient in the SC vectors (ghpbx).
4231 ghpbx(j,iii)=ghpbx(j,iii)-ggg(j)
4232 ghpbx(j,jjj)=ghpbx(j,jjj)+ggg(j)
4236 ghpbc(k,jjj)=ghpbc(k,jjj)+ggg(k)
4237 ghpbc(k,iii)=ghpbc(k,iii)-ggg(k)
4243 C--------------------------------------------------------------------------
4244 subroutine ssbond_ene(i,j,eij)
4246 C Calculate the distance and angle dependent SS-bond potential energy
4247 C using a free-energy function derived based on RHF/6-31G** ab initio
4248 C calculations of diethyl disulfide.
4250 C A. Liwo and U. Kozlowska, 11/24/03
4252 implicit real*8 (a-h,o-z)
4253 include 'DIMENSIONS'
4254 include 'DIMENSIONS.ZSCOPT'
4255 include 'COMMON.SBRIDGE'
4256 include 'COMMON.CHAIN'
4257 include 'COMMON.DERIV'
4258 include 'COMMON.LOCAL'
4259 include 'COMMON.INTERACT'
4260 include 'COMMON.VAR'
4261 include 'COMMON.IOUNITS'
4262 double precision erij(3),dcosom1(3),dcosom2(3),gg(3)
4263 itypi=iabs(itype(i))
4267 dxi=dc_norm(1,nres+i)
4268 dyi=dc_norm(2,nres+i)
4269 dzi=dc_norm(3,nres+i)
4270 dsci_inv=dsc_inv(itypi)
4271 itypj=iabs(itype(j))
4272 dscj_inv=dsc_inv(itypj)
4276 dxj=dc_norm(1,nres+j)
4277 dyj=dc_norm(2,nres+j)
4278 dzj=dc_norm(3,nres+j)
4279 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
4284 om1=dxi*erij(1)+dyi*erij(2)+dzi*erij(3)
4285 om2=dxj*erij(1)+dyj*erij(2)+dzj*erij(3)
4286 om12=dxi*dxj+dyi*dyj+dzi*dzj
4288 dcosom1(k)=rij*(dc_norm(k,nres+i)-om1*erij(k))
4289 dcosom2(k)=rij*(dc_norm(k,nres+j)-om2*erij(k))
4295 deltat12=om2-om1+2.0d0
4297 eij=akcm*deltad*deltad+akth*(deltat1*deltat1+deltat2*deltat2)
4298 & +akct*deltad*deltat12
4299 & +v1ss*cosphi+v2ss*cosphi*cosphi+v3ss*cosphi*cosphi*cosphi
4300 c write(iout,*) i,j,"rij",rij,"d0cm",d0cm," akcm",akcm," akth",akth,
4301 c & " akct",akct," deltad",deltad," deltat",deltat1,deltat2,
4302 c & " deltat12",deltat12," eij",eij
4303 ed=2*akcm*deltad+akct*deltat12
4305 pom2=v1ss+2*v2ss*cosphi+3*v3ss*cosphi*cosphi
4306 eom1=-2*akth*deltat1-pom1-om2*pom2
4307 eom2= 2*akth*deltat2+pom1-om1*pom2
4310 gg(k)=ed*erij(k)+eom1*dcosom1(k)+eom2*dcosom2(k)
4313 ghpbx(k,i)=ghpbx(k,i)-gg(k)
4314 & +(eom12*dc_norm(k,nres+j)+eom1*erij(k))*dsci_inv
4315 ghpbx(k,j)=ghpbx(k,j)+gg(k)
4316 & +(eom12*dc_norm(k,nres+i)+eom2*erij(k))*dscj_inv
4319 C Calculate the components of the gradient in DC and X
4323 ghpbc(l,k)=ghpbc(l,k)+gg(l)
4328 C--------------------------------------------------------------------------
4329 subroutine ebond(estr)
4331 c Evaluate the energy of stretching of the CA-CA and CA-SC virtual bonds
4333 implicit real*8 (a-h,o-z)
4334 include 'DIMENSIONS'
4335 include 'DIMENSIONS.ZSCOPT'
4336 include 'COMMON.LOCAL'
4337 include 'COMMON.GEO'
4338 include 'COMMON.INTERACT'
4339 include 'COMMON.DERIV'
4340 include 'COMMON.VAR'
4341 include 'COMMON.CHAIN'
4342 include 'COMMON.IOUNITS'
4343 include 'COMMON.NAMES'
4344 include 'COMMON.FFIELD'
4345 include 'COMMON.CONTROL'
4346 double precision u(3),ud(3)
4349 c write (iout,*) "distchainmax",distchainmax
4351 if (itype(i-1).eq.ntyp1 .and. itype(i).eq.ntyp1) cycle
4352 C estr1=estr1+gnmr1(vbld(i),-1.0d0,distchainmax)
4354 C gradb(j,i-1)=gnmr1prim(vbld(i),-1.0d0,distchainmax)
4355 C & *dc(j,i-1)/vbld(i)
4357 C if (energy_dec) write(iout,*)
4358 C & "estr1",i,vbld(i),distchainmax,
4359 C & gnmr1(vbld(i),-1.0d0,distchainmax)
4361 if (itype(i-1).eq.ntyp1 .or. itype(i).eq.ntyp1) then
4362 diff = vbld(i)-vbldpDUM
4363 C write(iout,*) i,diff
4365 diff = vbld(i)-vbldp0
4366 c write (iout,*) i,vbld(i),vbldp0,diff,AKP*diff*diff
4370 gradb(j,i-1)=AKP*diff*dc(j,i-1)/vbld(i)
4373 C write (iout,'(a7,i5,4f7.3)')
4374 C & "estr bb",i,vbld(i),vbldp0,diff,AKP*diff*diff
4376 estr=0.5d0*AKP*estr+estr1
4378 c 09/18/07 AL: multimodal bond potential based on AM1 CA-SC PMF's included
4382 if (iti.ne.10 .and. iti.ne.ntyp1) then
4385 diff=vbld(i+nres)-vbldsc0(1,iti)
4386 C write (iout,*) i,iti,vbld(i+nres),vbldsc0(1,iti),diff,
4387 C & AKSC(1,iti),AKSC(1,iti)*diff*diff
4388 estr=estr+0.5d0*AKSC(1,iti)*diff*diff
4390 gradbx(j,i)=AKSC(1,iti)*diff*dc(j,i+nres)/vbld(i+nres)
4394 diff=vbld(i+nres)-vbldsc0(j,iti)
4395 ud(j)=aksc(j,iti)*diff
4396 u(j)=abond0(j,iti)+0.5d0*ud(j)*diff
4410 uprod2=uprod2*u(k)*u(k)
4414 usumsqder=usumsqder+ud(j)*uprod2
4416 c write (iout,*) i,iti,vbld(i+nres),(vbldsc0(j,iti),
4417 c & AKSC(j,iti),abond0(j,iti),u(j),j=1,nbi)
4418 estr=estr+uprod/usum
4420 gradbx(j,i)=usumsqder/(usum*usum)*dc(j,i+nres)/vbld(i+nres)
4428 C--------------------------------------------------------------------------
4429 subroutine ebend(etheta,ethetacnstr)
4431 C Evaluate the virtual-bond-angle energy given the virtual-bond dihedral
4432 C angles gamma and its derivatives in consecutive thetas and gammas.
4434 implicit real*8 (a-h,o-z)
4435 include 'DIMENSIONS'
4436 include 'DIMENSIONS.ZSCOPT'
4437 include 'COMMON.LOCAL'
4438 include 'COMMON.GEO'
4439 include 'COMMON.INTERACT'
4440 include 'COMMON.DERIV'
4441 include 'COMMON.VAR'
4442 include 'COMMON.CHAIN'
4443 include 'COMMON.IOUNITS'
4444 include 'COMMON.NAMES'
4445 include 'COMMON.FFIELD'
4446 include 'COMMON.TORCNSTR'
4447 common /calcthet/ term1,term2,termm,diffak,ratak,
4448 & ak,aktc,termpre,termexp,sigc,sig0i,time11,time12,sigcsq,
4449 & delthe0,sig0inv,sigtc,sigsqtc,delthec,it
4450 double precision y(2),z(2)
4452 c time11=dexp(-2*time)
4455 c write (iout,*) "nres",nres
4456 c write (*,'(a,i2)') 'EBEND ICG=',icg
4457 c write (iout,*) ithet_start,ithet_end
4458 do i=ithet_start,ithet_end
4459 C if (itype(i-1).eq.ntyp1) cycle
4461 if ((itype(i-1).eq.ntyp1).or.itype(i-2).eq.ntyp1
4462 & .or.itype(i).eq.ntyp1) cycle
4463 C Zero the energy function and its derivative at 0 or pi.
4464 call splinthet(theta(i),0.5d0*delta,ss,ssd)
4466 ichir1=isign(1,itype(i-2))
4467 ichir2=isign(1,itype(i))
4468 if (itype(i-2).eq.10) ichir1=isign(1,itype(i-1))
4469 if (itype(i).eq.10) ichir2=isign(1,itype(i-1))
4470 if (itype(i-1).eq.10) then
4471 itype1=isign(10,itype(i-2))
4472 ichir11=isign(1,itype(i-2))
4473 ichir12=isign(1,itype(i-2))
4474 itype2=isign(10,itype(i))
4475 ichir21=isign(1,itype(i))
4476 ichir22=isign(1,itype(i))
4483 if (i.gt.3 .and. itype(i-3).ne.ntyp1) then
4487 c call proc_proc(phii,icrc)
4488 if (icrc.eq.1) phii=150.0
4499 if (i.lt.nres .and. itype(i+1).ne.ntyp1) then
4503 c call proc_proc(phii1,icrc)
4504 if (icrc.eq.1) phii1=150.0
4516 C Calculate the "mean" value of theta from the part of the distribution
4517 C dependent on the adjacent virtual-bond-valence angles (gamma1 & gamma2).
4518 C In following comments this theta will be referred to as t_c.
4519 thet_pred_mean=0.0d0
4521 athetk=athet(k,it,ichir1,ichir2)
4522 bthetk=bthet(k,it,ichir1,ichir2)
4524 athetk=athet(k,itype1,ichir11,ichir12)
4525 bthetk=bthet(k,itype2,ichir21,ichir22)
4527 thet_pred_mean=thet_pred_mean+athetk*y(k)+bthetk*z(k)
4529 c write (iout,*) "thet_pred_mean",thet_pred_mean
4530 dthett=thet_pred_mean*ssd
4531 thet_pred_mean=thet_pred_mean*ss+a0thet(it)
4532 c write (iout,*) "thet_pred_mean",thet_pred_mean
4533 C Derivatives of the "mean" values in gamma1 and gamma2.
4534 dthetg1=(-athet(1,it,ichir1,ichir2)*y(2)
4535 &+athet(2,it,ichir1,ichir2)*y(1))*ss
4536 dthetg2=(-bthet(1,it,ichir1,ichir2)*z(2)
4537 & +bthet(2,it,ichir1,ichir2)*z(1))*ss
4539 dthetg1=(-athet(1,itype1,ichir11,ichir12)*y(2)
4540 &+athet(2,itype1,ichir11,ichir12)*y(1))*ss
4541 dthetg2=(-bthet(1,itype2,ichir21,ichir22)*z(2)
4542 & +bthet(2,itype2,ichir21,ichir22)*z(1))*ss
4544 if (theta(i).gt.pi-delta) then
4545 call theteng(pi-delta,thet_pred_mean,theta0(it),f0,fprim0,
4547 call mixder(pi-delta,thet_pred_mean,theta0(it),fprim_tc0)
4548 call theteng(pi,thet_pred_mean,theta0(it),f1,fprim1,E_tc1)
4549 call spline1(theta(i),pi-delta,delta,f0,f1,fprim0,ethetai,
4551 call spline2(theta(i),pi-delta,delta,E_tc0,E_tc1,fprim_tc0,
4553 else if (theta(i).lt.delta) then
4554 call theteng(delta,thet_pred_mean,theta0(it),f0,fprim0,E_tc0)
4555 call theteng(0.0d0,thet_pred_mean,theta0(it),f1,fprim1,E_tc1)
4556 call spline1(theta(i),delta,-delta,f0,f1,fprim0,ethetai,
4558 call mixder(delta,thet_pred_mean,theta0(it),fprim_tc0)
4559 call spline2(theta(i),delta,-delta,E_tc0,E_tc1,fprim_tc0,
4562 call theteng(theta(i),thet_pred_mean,theta0(it),ethetai,
4565 etheta=etheta+ethetai
4566 c write (iout,'(a6,i5,0pf7.3,f7.3,i5)')
4567 c & 'ebend',i,ethetai,theta(i),itype(i)
4568 c write (iout,'(2i3,3f8.3,f10.5)') i,it,rad2deg*theta(i),
4569 c & rad2deg*phii,rad2deg*phii1,ethetai
4570 if (i.gt.3) gloc(i-3,icg)=gloc(i-3,icg)+wang*E_tc*dthetg1
4571 if (i.lt.nres) gloc(i-2,icg)=gloc(i-2,icg)+wang*E_tc*dthetg2
4572 gloc(nphi+i-2,icg)=wang*(E_theta+E_tc*dthett)
4576 C print *,ithetaconstr_start,ithetaconstr_end,"TU"
4577 do i=1,ntheta_constr
4578 itheta=itheta_constr(i)
4579 thetiii=theta(itheta)
4580 difi=pinorm(thetiii-theta_constr0(i))
4581 if (difi.gt.theta_drange(i)) then
4582 difi=difi-theta_drange(i)
4583 ethetacnstr=ethetacnstr+0.25d0*for_thet_constr(i)*difi**4
4584 gloc(itheta+nphi-2,icg)=gloc(itheta+nphi-2,icg)
4585 & +for_thet_constr(i)*difi**3
4586 else if (difi.lt.-drange(i)) then
4588 ethetacnstr=ethetacnstr+0.25d0*for_thet_constr(i)*difi**4
4589 gloc(itheta+nphi-2,icg)=gloc(itheta+nphi-2,icg)
4590 & +for_thet_constr(i)*difi**3
4594 C if (energy_dec) then
4595 C write (iout,'(a6,2i5,4f8.3,2e14.5)') "ethetc",
4596 C & i,itheta,rad2deg*thetiii,
4597 C & rad2deg*theta_constr0(i), rad2deg*theta_drange(i),
4598 C & rad2deg*difi,0.25d0*for_thet_constr(i)*difi**4,
4599 C & gloc(itheta+nphi-2,icg)
4602 C Ufff.... We've done all this!!!
4605 C---------------------------------------------------------------------------
4606 subroutine theteng(thetai,thet_pred_mean,theta0i,ethetai,E_theta,
4608 implicit real*8 (a-h,o-z)
4609 include 'DIMENSIONS'
4610 include 'COMMON.LOCAL'
4611 include 'COMMON.IOUNITS'
4612 common /calcthet/ term1,term2,termm,diffak,ratak,
4613 & ak,aktc,termpre,termexp,sigc,sig0i,time11,time12,sigcsq,
4614 & delthe0,sig0inv,sigtc,sigsqtc,delthec,it
4615 C Calculate the contributions to both Gaussian lobes.
4616 C 6/6/97 - Deform the Gaussians using the factor of 1/(1+time)
4617 C The "polynomial part" of the "standard deviation" of this part of
4621 sig=sig*thet_pred_mean+polthet(j,it)
4623 C Derivative of the "interior part" of the "standard deviation of the"
4624 C gamma-dependent Gaussian lobe in t_c.
4625 sigtc=3*polthet(3,it)
4627 sigtc=sigtc*thet_pred_mean+j*polthet(j,it)
4630 C Set the parameters of both Gaussian lobes of the distribution.
4631 C "Standard deviation" of the gamma-dependent Gaussian lobe (sigtc)
4632 fac=sig*sig+sigc0(it)
4635 C Following variable (sigsqtc) is -(1/2)d[sigma(t_c)**(-2))]/dt_c
4636 sigsqtc=-4.0D0*sigcsq*sigtc
4637 c print *,i,sig,sigtc,sigsqtc
4638 C Following variable (sigtc) is d[sigma(t_c)]/dt_c
4639 sigtc=-sigtc/(fac*fac)
4640 C Following variable is sigma(t_c)**(-2)
4641 sigcsq=sigcsq*sigcsq
4643 sig0inv=1.0D0/sig0i**2
4644 delthec=thetai-thet_pred_mean
4645 delthe0=thetai-theta0i
4646 term1=-0.5D0*sigcsq*delthec*delthec
4647 term2=-0.5D0*sig0inv*delthe0*delthe0
4648 C Following fuzzy logic is to avoid underflows in dexp and subsequent INFs and
4649 C NaNs in taking the logarithm. We extract the largest exponent which is added
4650 C to the energy (this being the log of the distribution) at the end of energy
4651 C term evaluation for this virtual-bond angle.
4652 if (term1.gt.term2) then
4654 term2=dexp(term2-termm)
4658 term1=dexp(term1-termm)
4661 C The ratio between the gamma-independent and gamma-dependent lobes of
4662 C the distribution is a Gaussian function of thet_pred_mean too.
4663 diffak=gthet(2,it)-thet_pred_mean
4664 ratak=diffak/gthet(3,it)**2
4665 ak=dexp(gthet(1,it)-0.5D0*diffak*ratak)
4666 C Let's differentiate it in thet_pred_mean NOW.
4668 C Now put together the distribution terms to make complete distribution.
4669 termexp=term1+ak*term2
4670 termpre=sigc+ak*sig0i
4671 C Contribution of the bending energy from this theta is just the -log of
4672 C the sum of the contributions from the two lobes and the pre-exponential
4673 C factor. Simple enough, isn't it?
4674 ethetai=(-dlog(termexp)-termm+dlog(termpre))
4675 C NOW the derivatives!!!
4676 C 6/6/97 Take into account the deformation.
4677 E_theta=(delthec*sigcsq*term1
4678 & +ak*delthe0*sig0inv*term2)/termexp
4679 E_tc=((sigtc+aktc*sig0i)/termpre
4680 & -((delthec*sigcsq+delthec*delthec*sigsqtc)*term1+
4681 & aktc*term2)/termexp)
4684 c-----------------------------------------------------------------------------
4685 subroutine mixder(thetai,thet_pred_mean,theta0i,E_tc_t)
4686 implicit real*8 (a-h,o-z)
4687 include 'DIMENSIONS'
4688 include 'COMMON.LOCAL'
4689 include 'COMMON.IOUNITS'
4690 common /calcthet/ term1,term2,termm,diffak,ratak,
4691 & ak,aktc,termpre,termexp,sigc,sig0i,time11,time12,sigcsq,
4692 & delthe0,sig0inv,sigtc,sigsqtc,delthec,it
4693 delthec=thetai-thet_pred_mean
4694 delthe0=thetai-theta0i
4695 C "Thank you" to MAPLE (probably spared one day of hand-differentiation).
4696 t3 = thetai-thet_pred_mean
4700 t14 = t12+t6*sigsqtc
4702 t21 = thetai-theta0i
4708 E_tc_t = -((sigcsq+2.D0*t3*sigsqtc)*t9-t14*sigcsq*t3*t16*t9
4709 & -aktc*sig0inv*t27)/t32+(t14*t9+aktc*t26)/t40
4710 & *(-t12*t9-ak*sig0inv*t27)
4714 C--------------------------------------------------------------------------
4715 subroutine ebend(etheta)
4717 C Evaluate the virtual-bond-angle energy given the virtual-bond dihedral
4718 C angles gamma and its derivatives in consecutive thetas and gammas.
4719 C ab initio-derived potentials from
4720 c Kozlowska et al., J. Phys.: Condens. Matter 19 (2007) 285203
4722 implicit real*8 (a-h,o-z)
4723 include 'DIMENSIONS'
4724 include 'DIMENSIONS.ZSCOPT'
4725 include 'COMMON.LOCAL'
4726 include 'COMMON.GEO'
4727 include 'COMMON.INTERACT'
4728 include 'COMMON.DERIV'
4729 include 'COMMON.VAR'
4730 include 'COMMON.CHAIN'
4731 include 'COMMON.IOUNITS'
4732 include 'COMMON.NAMES'
4733 include 'COMMON.FFIELD'
4734 include 'COMMON.CONTROL'
4735 include 'COMMON.TORCNSTR'
4736 double precision coskt(mmaxtheterm),sinkt(mmaxtheterm),
4737 & cosph1(maxsingle),sinph1(maxsingle),cosph2(maxsingle),
4738 & sinph2(maxsingle),cosph1ph2(maxdouble,maxdouble),
4739 & sinph1ph2(maxdouble,maxdouble)
4740 logical lprn /.false./, lprn1 /.false./
4742 c write (iout,*) "ithetyp",(ithetyp(i),i=1,ntyp1)
4743 do i=ithet_start,ithet_end
4745 C if (itype(i-1).eq.ntyp1) cycle
4747 if ((itype(i-1).eq.ntyp1).or.itype(i-2).eq.ntyp1
4748 & .or.itype(i).eq.ntyp1) cycle
4749 if (iabs(itype(i+1)).eq.20) iblock=2
4750 if (iabs(itype(i+1)).ne.20) iblock=1
4754 theti2=0.5d0*theta(i)
4755 ityp2=ithetyp((itype(i-1)))
4757 coskt(k)=dcos(k*theti2)
4758 sinkt(k)=dsin(k*theti2)
4768 if (i.gt.3 .and. itype(i-3).ne.ntyp1) then
4771 if (phii.ne.phii) phii=150.0
4775 ityp1=ithetyp((itype(i-2)))
4777 cosph1(k)=dcos(k*phii)
4778 sinph1(k)=dsin(k*phii)
4784 ityp1=ithetyp((itype(i-2)))
4790 if (i.lt.nres .and. itype(i+1).ne.ntyp1) then
4793 if (phii1.ne.phii1) phii1=150.0
4798 ityp3=ithetyp((itype(i)))
4800 cosph2(k)=dcos(k*phii1)
4801 sinph2(k)=dsin(k*phii1)
4806 ityp3=ithetyp((itype(i)))
4812 c write (iout,*) "i",i," ityp1",itype(i-2),ityp1,
4813 c & " ityp2",itype(i-1),ityp2," ityp3",itype(i),ityp3
4815 ethetai=aa0thet(ityp1,ityp2,ityp3,iblock)
4818 ccl=cosph1(l)*cosph2(k-l)
4819 ssl=sinph1(l)*sinph2(k-l)
4820 scl=sinph1(l)*cosph2(k-l)
4821 csl=cosph1(l)*sinph2(k-l)
4822 cosph1ph2(l,k)=ccl-ssl
4823 cosph1ph2(k,l)=ccl+ssl
4824 sinph1ph2(l,k)=scl+csl
4825 sinph1ph2(k,l)=scl-csl
4829 write (iout,*) "i",i," ityp1",ityp1," ityp2",ityp2,
4830 & " ityp3",ityp3," theti2",theti2," phii",phii," phii1",phii1
4831 write (iout,*) "coskt and sinkt"
4833 write (iout,*) k,coskt(k),sinkt(k)
4837 ethetai=ethetai+aathet(k,ityp1,ityp2,ityp3,iblock)*sinkt(k)
4838 dethetai=dethetai+0.5d0*k*aathet(k,ityp1,ityp2,ityp3,iblock)
4841 & write (iout,*) "k",k,"
4842 & aathet",aathet(k,ityp1,ityp2,ityp3,iblock),
4843 & " ethetai",ethetai
4846 write (iout,*) "cosph and sinph"
4848 write (iout,*) k,cosph1(k),sinph1(k),cosph2(k),sinph2(k)
4850 write (iout,*) "cosph1ph2 and sinph2ph2"
4853 write (iout,*) l,k,cosph1ph2(l,k),cosph1ph2(k,l),
4854 & sinph1ph2(l,k),sinph1ph2(k,l)
4857 write(iout,*) "ethetai",ethetai
4861 aux=bbthet(k,m,ityp1,ityp2,ityp3,iblock)*cosph1(k)
4862 & +ccthet(k,m,ityp1,ityp2,ityp3,iblock)*sinph1(k)
4863 & +ddthet(k,m,ityp1,ityp2,ityp3,iblock)*cosph2(k)
4864 & +eethet(k,m,ityp1,ityp2,ityp3,iblock)*sinph2(k)
4865 ethetai=ethetai+sinkt(m)*aux
4866 dethetai=dethetai+0.5d0*m*aux*coskt(m)
4867 dephii=dephii+k*sinkt(m)*(
4868 & ccthet(k,m,ityp1,ityp2,ityp3,iblock)*cosph1(k)-
4869 & bbthet(k,m,ityp1,ityp2,ityp3,iblock)*sinph1(k))
4870 dephii1=dephii1+k*sinkt(m)*(
4871 & eethet(k,m,ityp1,ityp2,ityp3,iblock)*cosph2(k)-
4872 & ddthet(k,m,ityp1,ityp2,ityp3,iblock)*sinph2(k))
4874 & write (iout,*) "m",m," k",k," bbthet",
4875 & bbthet(k,m,ityp1,ityp2,ityp3,iblock)," ccthet",
4876 & ccthet(k,m,ityp1,ityp2,ityp3,iblock)," ddthet",
4877 & ddthet(k,m,ityp1,ityp2,ityp3,iblock)," eethet",
4878 & eethet(k,m,ityp1,ityp2,ityp3,iblock)," ethetai",ethetai
4882 & write(iout,*) "ethetai",ethetai
4886 aux=ffthet(l,k,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(l,k)+
4887 & ffthet(k,l,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(k,l)+
4888 & ggthet(l,k,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(l,k)+
4889 & ggthet(k,l,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(k,l)
4890 ethetai=ethetai+sinkt(m)*aux
4891 dethetai=dethetai+0.5d0*m*coskt(m)*aux
4892 dephii=dephii+l*sinkt(m)*(
4893 & -ffthet(l,k,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(l,k)-
4894 & ffthet(k,l,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(k,l)+
4895 & ggthet(l,k,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(l,k)+
4896 & ggthet(k,l,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(k,l))
4897 dephii1=dephii1+(k-l)*sinkt(m)*(
4898 & -ffthet(l,k,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(l,k)+
4899 & ffthet(k,l,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(k,l)+
4900 & ggthet(l,k,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(l,k)-
4901 & ggthet(k,l,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(k,l))
4903 write (iout,*) "m",m," k",k," l",l," ffthet",
4904 & ffthet(l,k,m,ityp1,ityp2,ityp3,iblock),
4905 & ffthet(k,l,m,ityp1,ityp2,ityp3,iblock)," ggthet",
4906 & ggthet(l,k,m,ityp1,ityp2,ityp3,iblock),
4907 & ggthet(k,l,m,ityp1,ityp2,ityp3,iblock),
4908 & " ethetai",ethetai
4909 write (iout,*) cosph1ph2(l,k)*sinkt(m),
4910 & cosph1ph2(k,l)*sinkt(m),
4911 & sinph1ph2(l,k)*sinkt(m),sinph1ph2(k,l)*sinkt(m)
4917 if (lprn1) write (iout,'(i2,3f8.1,9h ethetai ,f10.5)')
4918 & i,theta(i)*rad2deg,phii*rad2deg,
4919 & phii1*rad2deg,ethetai
4920 etheta=etheta+ethetai
4921 if (i.gt.3) gloc(i-3,icg)=gloc(i-3,icg)+wang*dephii
4922 if (i.lt.nres) gloc(i-2,icg)=gloc(i-2,icg)+wang*dephii1
4923 c gloc(nphi+i-2,icg)=wang*dethetai
4924 gloc(nphi+i-2,icg)=gloc(nphi+i-2,icg)+wang*dethetai
4930 c-----------------------------------------------------------------------------
4931 subroutine esc(escloc)
4932 C Calculate the local energy of a side chain and its derivatives in the
4933 C corresponding virtual-bond valence angles THETA and the spherical angles
4935 implicit real*8 (a-h,o-z)
4936 include 'DIMENSIONS'
4937 include 'DIMENSIONS.ZSCOPT'
4938 include 'COMMON.GEO'
4939 include 'COMMON.LOCAL'
4940 include 'COMMON.VAR'
4941 include 'COMMON.INTERACT'
4942 include 'COMMON.DERIV'
4943 include 'COMMON.CHAIN'
4944 include 'COMMON.IOUNITS'
4945 include 'COMMON.NAMES'
4946 include 'COMMON.FFIELD'
4947 double precision x(3),dersc(3),xemp(3),dersc0(3),dersc1(3),
4948 & ddersc0(3),ddummy(3),xtemp(3),temp(3)
4949 common /sccalc/ time11,time12,time112,theti,it,nlobit
4952 C write (iout,*) 'ESC'
4953 do i=loc_start,loc_end
4955 if (it.eq.ntyp1) cycle
4956 if (it.eq.10) goto 1
4957 nlobit=nlob(iabs(it))
4958 c print *,'i=',i,' it=',it,' nlobit=',nlobit
4959 C write (iout,*) 'i=',i,' ssa=',ssa,' ssad=',ssad
4960 theti=theta(i+1)-pipol
4964 c write (iout,*) "i",i," x",x(1),x(2),x(3)
4966 if (x(2).gt.pi-delta) then
4970 call enesc(xtemp,escloci0,dersc0,ddersc0,.true.)
4972 call enesc(xtemp,escloci1,dersc1,ddummy,.false.)
4973 call spline1(x(2),pi-delta,delta,escloci0,escloci1,dersc0(2),
4975 call spline2(x(2),pi-delta,delta,dersc0(1),dersc1(1),
4976 & ddersc0(1),dersc(1))
4977 call spline2(x(2),pi-delta,delta,dersc0(3),dersc1(3),
4978 & ddersc0(3),dersc(3))
4980 call enesc_bound(xtemp,esclocbi0,dersc0,dersc12,.true.)
4982 call enesc_bound(xtemp,esclocbi1,dersc1,chuju,.false.)
4983 call spline1(x(2),pi-delta,delta,esclocbi0,esclocbi1,
4984 & dersc0(2),esclocbi,dersc02)
4985 call spline2(x(2),pi-delta,delta,dersc0(1),dersc1(1),
4987 call splinthet(x(2),0.5d0*delta,ss,ssd)
4992 dersc(k)=ss*dersc(k)+(1.0d0-ss)*dersc0(k)
4994 dersc(2)=dersc(2)+ssd*(escloci-esclocbi)
4995 write (iout,*) 'i=',i,x(2)*rad2deg,escloci0,escloci,
4997 escloci=ss*escloci+(1.0d0-ss)*esclocbi
4999 c write (iout,*) escloci
5000 else if (x(2).lt.delta) then
5004 call enesc(xtemp,escloci0,dersc0,ddersc0,.true.)
5006 call enesc(xtemp,escloci1,dersc1,ddummy,.false.)
5007 call spline1(x(2),delta,-delta,escloci0,escloci1,dersc0(2),
5009 call spline2(x(2),delta,-delta,dersc0(1),dersc1(1),
5010 & ddersc0(1),dersc(1))
5011 call spline2(x(2),delta,-delta,dersc0(3),dersc1(3),
5012 & ddersc0(3),dersc(3))
5014 call enesc_bound(xtemp,esclocbi0,dersc0,dersc12,.true.)
5016 call enesc_bound(xtemp,esclocbi1,dersc1,chuju,.false.)
5017 call spline1(x(2),delta,-delta,esclocbi0,esclocbi1,
5018 & dersc0(2),esclocbi,dersc02)
5019 call spline2(x(2),delta,-delta,dersc0(1),dersc1(1),
5024 call splinthet(x(2),0.5d0*delta,ss,ssd)
5026 dersc(k)=ss*dersc(k)+(1.0d0-ss)*dersc0(k)
5028 dersc(2)=dersc(2)+ssd*(escloci-esclocbi)
5029 c write (iout,*) 'i=',i,x(2)*rad2deg,escloci0,escloci,
5031 escloci=ss*escloci+(1.0d0-ss)*esclocbi
5032 C write (iout,*) 'i=',i, escloci
5034 call enesc(x,escloci,dersc,ddummy,.false.)
5037 escloc=escloc+escloci
5038 C write (iout,*) 'i=',i,' escloci=',escloci,' dersc=',dersc
5039 write (iout,'(a6,i5,0pf7.3)')
5040 & 'escloc',i,escloci
5042 gloc(nphi+i-1,icg)=gloc(nphi+i-1,icg)+
5044 gloc(ialph(i,1),icg)=wscloc*dersc(2)
5045 gloc(ialph(i,1)+nside,icg)=wscloc*dersc(3)
5050 C---------------------------------------------------------------------------
5051 subroutine enesc(x,escloci,dersc,ddersc,mixed)
5052 implicit real*8 (a-h,o-z)
5053 include 'DIMENSIONS'
5054 include 'COMMON.GEO'
5055 include 'COMMON.LOCAL'
5056 include 'COMMON.IOUNITS'
5057 common /sccalc/ time11,time12,time112,theti,it,nlobit
5058 double precision x(3),z(3),Ax(3,maxlob,-1:1),dersc(3),ddersc(3)
5059 double precision contr(maxlob,-1:1)
5061 c write (iout,*) 'it=',it,' nlobit=',nlobit
5065 if (mixed) ddersc(j)=0.0d0
5069 C Because of periodicity of the dependence of the SC energy in omega we have
5070 C to add up the contributions from x(3)-2*pi, x(3), and x(3+2*pi).
5071 C To avoid underflows, first compute & store the exponents.
5079 z(k)=x(k)-censc(k,j,it)
5084 Axk=Axk+gaussc(l,k,j,it)*z(l)
5090 expfac=expfac+Ax(k,j,iii)*z(k)
5098 C As in the case of ebend, we want to avoid underflows in exponentiation and
5099 C subsequent NaNs and INFs in energy calculation.
5100 C Find the largest exponent
5104 if (emin.gt.contr(j,iii)) emin=contr(j,iii)
5108 cd print *,'it=',it,' emin=',emin
5110 C Compute the contribution to SC energy and derivatives
5114 expfac=dexp(bsc(j,iabs(it))-0.5D0*contr(j,iii)+emin)
5115 cd print *,'j=',j,' expfac=',expfac
5116 escloc_i=escloc_i+expfac
5118 dersc(k)=dersc(k)+Ax(k,j,iii)*expfac
5122 ddersc(k)=ddersc(k)+(-Ax(2,j,iii)*Ax(k,j,iii)
5123 & +gaussc(k,2,j,it))*expfac
5130 dersc(1)=dersc(1)/cos(theti)**2
5131 ddersc(1)=ddersc(1)/cos(theti)**2
5134 escloci=-(dlog(escloc_i)-emin)
5136 dersc(j)=dersc(j)/escloc_i
5140 ddersc(j)=(ddersc(j)/escloc_i+dersc(2)*dersc(j))
5145 C------------------------------------------------------------------------------
5146 subroutine enesc_bound(x,escloci,dersc,dersc12,mixed)
5147 implicit real*8 (a-h,o-z)
5148 include 'DIMENSIONS'
5149 include 'COMMON.GEO'
5150 include 'COMMON.LOCAL'
5151 include 'COMMON.IOUNITS'
5152 common /sccalc/ time11,time12,time112,theti,it,nlobit
5153 double precision x(3),z(3),Ax(3,maxlob),dersc(3)
5154 double precision contr(maxlob)
5165 z(k)=x(k)-censc(k,j,it)
5171 Axk=Axk+gaussc(l,k,j,it)*z(l)
5177 expfac=expfac+Ax(k,j)*z(k)
5182 C As in the case of ebend, we want to avoid underflows in exponentiation and
5183 C subsequent NaNs and INFs in energy calculation.
5184 C Find the largest exponent
5187 if (emin.gt.contr(j)) emin=contr(j)
5191 C Compute the contribution to SC energy and derivatives
5195 expfac=dexp(bsc(j,iabs(it))-0.5D0*contr(j)+emin)
5196 escloc_i=escloc_i+expfac
5198 dersc(k)=dersc(k)+Ax(k,j)*expfac
5200 if (mixed) dersc12=dersc12+(-Ax(2,j)*Ax(1,j)
5201 & +gaussc(1,2,j,it))*expfac
5205 dersc(1)=dersc(1)/cos(theti)**2
5206 dersc12=dersc12/cos(theti)**2
5207 escloci=-(dlog(escloc_i)-emin)
5209 dersc(j)=dersc(j)/escloc_i
5211 if (mixed) dersc12=(dersc12/escloc_i+dersc(2)*dersc(1))
5215 c----------------------------------------------------------------------------------
5216 subroutine esc(escloc)
5217 C Calculate the local energy of a side chain and its derivatives in the
5218 C corresponding virtual-bond valence angles THETA and the spherical angles
5219 C ALPHA and OMEGA derived from AM1 all-atom calculations.
5220 C added by Urszula Kozlowska. 07/11/2007
5222 implicit real*8 (a-h,o-z)
5223 include 'DIMENSIONS'
5224 include 'DIMENSIONS.ZSCOPT'
5225 include 'COMMON.GEO'
5226 include 'COMMON.LOCAL'
5227 include 'COMMON.VAR'
5228 include 'COMMON.SCROT'
5229 include 'COMMON.INTERACT'
5230 include 'COMMON.DERIV'
5231 include 'COMMON.CHAIN'
5232 include 'COMMON.IOUNITS'
5233 include 'COMMON.NAMES'
5234 include 'COMMON.FFIELD'
5235 include 'COMMON.CONTROL'
5236 include 'COMMON.VECTORS'
5237 double precision x_prime(3),y_prime(3),z_prime(3)
5238 & , sumene,dsc_i,dp2_i,x(65),
5239 & xx,yy,zz,sumene1,sumene2,sumene3,sumene4,s1,s1_6,s2,s2_6,
5240 & de_dxx,de_dyy,de_dzz,de_dt
5241 double precision s1_t,s1_6_t,s2_t,s2_6_t
5243 & dXX_Ci1(3),dYY_Ci1(3),dZZ_Ci1(3),dXX_Ci(3),
5244 & dYY_Ci(3),dZZ_Ci(3),dXX_XYZ(3),dYY_XYZ(3),dZZ_XYZ(3),
5245 & dt_dCi(3),dt_dCi1(3)
5246 common /sccalc/ time11,time12,time112,theti,it,nlobit
5249 do i=loc_start,loc_end
5250 if (itype(i).eq.ntyp1) cycle
5251 costtab(i+1) =dcos(theta(i+1))
5252 sinttab(i+1) =dsqrt(1-costtab(i+1)*costtab(i+1))
5253 cost2tab(i+1)=dsqrt(0.5d0*(1.0d0+costtab(i+1)))
5254 sint2tab(i+1)=dsqrt(0.5d0*(1.0d0-costtab(i+1)))
5255 cosfac2=0.5d0/(1.0d0+costtab(i+1))
5256 cosfac=dsqrt(cosfac2)
5257 sinfac2=0.5d0/(1.0d0-costtab(i+1))
5258 sinfac=dsqrt(sinfac2)
5260 if (it.eq.10) goto 1
5262 C Compute the axes of tghe local cartesian coordinates system; store in
5263 c x_prime, y_prime and z_prime
5270 C write(2,*) "dc_norm", dc_norm(1,i+nres),dc_norm(2,i+nres),
5271 C & dc_norm(3,i+nres)
5273 x_prime(j) = (dc_norm(j,i) - dc_norm(j,i-1))*cosfac
5274 y_prime(j) = (dc_norm(j,i) + dc_norm(j,i-1))*sinfac
5277 z_prime(j) = -uz(j,i-1)*dsign(1.0d0,dfloat(itype(i)))
5280 c write (2,*) "x_prime",(x_prime(j),j=1,3)
5281 c write (2,*) "y_prime",(y_prime(j),j=1,3)
5282 c write (2,*) "z_prime",(z_prime(j),j=1,3)
5283 c write (2,*) "xx",scalar(x_prime(1),x_prime(1)),
5284 c & " xy",scalar(x_prime(1),y_prime(1)),
5285 c & " xz",scalar(x_prime(1),z_prime(1)),
5286 c & " yy",scalar(y_prime(1),y_prime(1)),
5287 c & " yz",scalar(y_prime(1),z_prime(1)),
5288 c & " zz",scalar(z_prime(1),z_prime(1))
5290 C Transform the unit vector of the ith side-chain centroid, dC_norm(*,i),
5291 C to local coordinate system. Store in xx, yy, zz.
5297 xx = xx + x_prime(j)*dc_norm(j,i+nres)
5298 yy = yy + y_prime(j)*dc_norm(j,i+nres)
5299 zz = zz + z_prime(j)*dc_norm(j,i+nres)
5306 C Compute the energy of the ith side cbain
5308 c write (2,*) "xx",xx," yy",yy," zz",zz
5311 x(j) = sc_parmin(j,it)
5314 Cc diagnostics - remove later
5316 yy1 = dsin(alph(2))*dcos(omeg(2))
5317 zz1 = -dsign(1.0d0,itype(i))*dsin(alph(2))*dsin(omeg(2))
5318 write(2,'(3f8.1,3f9.3,1x,3f9.3)')
5319 & alph(2)*rad2deg,omeg(2)*rad2deg,theta(3)*rad2deg,xx,yy,zz,
5321 C," --- ", xx_w,yy_w,zz_w
5324 sumene1= x(1)+ x(2)*xx+ x(3)*yy+ x(4)*zz+ x(5)*xx**2
5325 & + x(6)*yy**2+ x(7)*zz**2+ x(8)*xx*zz+ x(9)*xx*yy
5327 sumene2= x(11) + x(12)*xx + x(13)*yy + x(14)*zz + x(15)*xx**2
5328 & + x(16)*yy**2 + x(17)*zz**2 + x(18)*xx*zz + x(19)*xx*yy
5330 sumene3= x(21) +x(22)*xx +x(23)*yy +x(24)*zz +x(25)*xx**2
5331 & +x(26)*yy**2 +x(27)*zz**2 +x(28)*xx*zz +x(29)*xx*yy
5332 & +x(30)*yy*zz +x(31)*xx**3 +x(32)*yy**3 +x(33)*zz**3
5333 & +x(34)*(xx**2)*yy +x(35)*(xx**2)*zz +x(36)*(yy**2)*xx
5334 & +x(37)*(yy**2)*zz +x(38)*(zz**2)*xx +x(39)*(zz**2)*yy
5336 sumene4= x(41) +x(42)*xx +x(43)*yy +x(44)*zz +x(45)*xx**2
5337 & +x(46)*yy**2 +x(47)*zz**2 +x(48)*xx*zz +x(49)*xx*yy
5338 & +x(50)*yy*zz +x(51)*xx**3 +x(52)*yy**3 +x(53)*zz**3
5339 & +x(54)*(xx**2)*yy +x(55)*(xx**2)*zz +x(56)*(yy**2)*xx
5340 & +x(57)*(yy**2)*zz +x(58)*(zz**2)*xx +x(59)*(zz**2)*yy
5342 dsc_i = 0.743d0+x(61)
5344 dscp1=dsqrt(dsc_i**2+dp2_i**2-2*dsc_i*dp2_i
5345 & *(xx*cost2tab(i+1)+yy*sint2tab(i+1)))
5346 dscp2=dsqrt(dsc_i**2+dp2_i**2-2*dsc_i*dp2_i
5347 & *(xx*cost2tab(i+1)-yy*sint2tab(i+1)))
5348 s1=(1+x(63))/(0.1d0 + dscp1)
5349 s1_6=(1+x(64))/(0.1d0 + dscp1**6)
5350 s2=(1+x(65))/(0.1d0 + dscp2)
5351 s2_6=(1+x(65))/(0.1d0 + dscp2**6)
5352 sumene = ( sumene3*sint2tab(i+1) + sumene1)*(s1+s1_6)
5353 & + (sumene4*cost2tab(i+1) +sumene2)*(s2+s2_6)
5354 c write(2,'(i2," sumene",7f9.3)') i,sumene1,sumene2,sumene3,
5356 c & dscp1,dscp2,sumene
5357 c sumene = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
5358 escloc = escloc + sumene
5359 c write (2,*) "escloc",escloc
5360 c write (2,*) "i",i," escloc",sumene,escloc,it,itype(i),
5362 if (.not. calc_grad) goto 1
5365 C This section to check the numerical derivatives of the energy of ith side
5366 C chain in xx, yy, zz, and theta. Use the -DDEBUG compiler option or insert
5367 C #define DEBUG in the code to turn it on.
5369 write (2,*) "sumene =",sumene
5373 write (2,*) xx,yy,zz
5374 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
5375 de_dxx_num=(sumenep-sumene)/aincr
5377 write (2,*) "xx+ sumene from enesc=",sumenep
5380 write (2,*) xx,yy,zz
5381 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
5382 de_dyy_num=(sumenep-sumene)/aincr
5384 write (2,*) "yy+ sumene from enesc=",sumenep
5387 write (2,*) xx,yy,zz
5388 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
5389 de_dzz_num=(sumenep-sumene)/aincr
5391 write (2,*) "zz+ sumene from enesc=",sumenep
5392 costsave=cost2tab(i+1)
5393 sintsave=sint2tab(i+1)
5394 cost2tab(i+1)=dcos(0.5d0*(theta(i+1)+aincr))
5395 sint2tab(i+1)=dsin(0.5d0*(theta(i+1)+aincr))
5396 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
5397 de_dt_num=(sumenep-sumene)/aincr
5398 write (2,*) " t+ sumene from enesc=",sumenep
5399 cost2tab(i+1)=costsave
5400 sint2tab(i+1)=sintsave
5401 C End of diagnostics section.
5404 C Compute the gradient of esc
5406 pom_s1=(1.0d0+x(63))/(0.1d0 + dscp1)**2
5407 pom_s16=6*(1.0d0+x(64))/(0.1d0 + dscp1**6)**2
5408 pom_s2=(1.0d0+x(65))/(0.1d0 + dscp2)**2
5409 pom_s26=6*(1.0d0+x(65))/(0.1d0 + dscp2**6)**2
5410 pom_dx=dsc_i*dp2_i*cost2tab(i+1)
5411 pom_dy=dsc_i*dp2_i*sint2tab(i+1)
5412 pom_dt1=-0.5d0*dsc_i*dp2_i*(xx*sint2tab(i+1)-yy*cost2tab(i+1))
5413 pom_dt2=-0.5d0*dsc_i*dp2_i*(xx*sint2tab(i+1)+yy*cost2tab(i+1))
5414 pom1=(sumene3*sint2tab(i+1)+sumene1)
5415 & *(pom_s1/dscp1+pom_s16*dscp1**4)
5416 pom2=(sumene4*cost2tab(i+1)+sumene2)
5417 & *(pom_s2/dscp2+pom_s26*dscp2**4)
5418 sumene1x=x(2)+2*x(5)*xx+x(8)*zz+ x(9)*yy
5419 sumene3x=x(22)+2*x(25)*xx+x(28)*zz+x(29)*yy+3*x(31)*xx**2
5420 & +2*x(34)*xx*yy +2*x(35)*xx*zz +x(36)*(yy**2) +x(38)*(zz**2)
5422 sumene2x=x(12)+2*x(15)*xx+x(18)*zz+ x(19)*yy
5423 sumene4x=x(42)+2*x(45)*xx +x(48)*zz +x(49)*yy +3*x(51)*xx**2
5424 & +2*x(54)*xx*yy+2*x(55)*xx*zz+x(56)*(yy**2)+x(58)*(zz**2)
5426 de_dxx =(sumene1x+sumene3x*sint2tab(i+1))*(s1+s1_6)
5427 & +(sumene2x+sumene4x*cost2tab(i+1))*(s2+s2_6)
5428 & +(pom1+pom2)*pom_dx
5430 write(2,*), "de_dxx = ", de_dxx,de_dxx_num
5433 sumene1y=x(3) + 2*x(6)*yy + x(9)*xx + x(10)*zz
5434 sumene3y=x(23) +2*x(26)*yy +x(29)*xx +x(30)*zz +3*x(32)*yy**2
5435 & +x(34)*(xx**2) +2*x(36)*yy*xx +2*x(37)*yy*zz +x(39)*(zz**2)
5437 sumene2y=x(13) + 2*x(16)*yy + x(19)*xx + x(20)*zz
5438 sumene4y=x(43)+2*x(46)*yy+x(49)*xx +x(50)*zz
5439 & +3*x(52)*yy**2+x(54)*xx**2+2*x(56)*yy*xx +2*x(57)*yy*zz
5440 & +x(59)*zz**2 +x(60)*xx*zz
5441 de_dyy =(sumene1y+sumene3y*sint2tab(i+1))*(s1+s1_6)
5442 & +(sumene2y+sumene4y*cost2tab(i+1))*(s2+s2_6)
5443 & +(pom1-pom2)*pom_dy
5445 write(2,*), "de_dyy = ", de_dyy,de_dyy_num
5448 de_dzz =(x(24) +2*x(27)*zz +x(28)*xx +x(30)*yy
5449 & +3*x(33)*zz**2 +x(35)*xx**2 +x(37)*yy**2 +2*x(38)*zz*xx
5450 & +2*x(39)*zz*yy +x(40)*xx*yy)*sint2tab(i+1)*(s1+s1_6)
5451 & +(x(4) + 2*x(7)*zz+ x(8)*xx + x(10)*yy)*(s1+s1_6)
5452 & +(x(44)+2*x(47)*zz +x(48)*xx +x(50)*yy +3*x(53)*zz**2
5453 & +x(55)*xx**2 +x(57)*(yy**2)+2*x(58)*zz*xx +2*x(59)*zz*yy
5454 & +x(60)*xx*yy)*cost2tab(i+1)*(s2+s2_6)
5455 & + ( x(14) + 2*x(17)*zz+ x(18)*xx + x(20)*yy)*(s2+s2_6)
5457 write(2,*), "de_dzz = ", de_dzz,de_dzz_num
5460 de_dt = 0.5d0*sumene3*cost2tab(i+1)*(s1+s1_6)
5461 & -0.5d0*sumene4*sint2tab(i+1)*(s2+s2_6)
5462 & +pom1*pom_dt1+pom2*pom_dt2
5464 write(2,*), "de_dt = ", de_dt,de_dt_num
5468 cossc=scalar(dc_norm(1,i),dc_norm(1,i+nres))
5469 cossc1=scalar(dc_norm(1,i-1),dc_norm(1,i+nres))
5470 cosfac2xx=cosfac2*xx
5471 sinfac2yy=sinfac2*yy
5473 dt_dCi(k) = -(dc_norm(k,i-1)+costtab(i+1)*dc_norm(k,i))*
5475 dt_dCi1(k)= -(dc_norm(k,i)+costtab(i+1)*dc_norm(k,i-1))*
5477 pom=(dC_norm(k,i+nres)-cossc*dC_norm(k,i))*vbld_inv(i+1)
5478 pom1=(dC_norm(k,i+nres)-cossc1*dC_norm(k,i-1))*vbld_inv(i)
5479 c write (iout,*) "i",i," k",k," pom",pom," pom1",pom1,
5480 c & " dt_dCi",dt_dCi(k)," dt_dCi1",dt_dCi1(k)
5481 c write (iout,*) "dC_norm",(dC_norm(j,i),j=1,3),
5482 c & (dC_norm(j,i-1),j=1,3)," vbld_inv",vbld_inv(i+1),vbld_inv(i)
5483 dXX_Ci(k)=pom*cosfac-dt_dCi(k)*cosfac2xx
5484 dXX_Ci1(k)=-pom1*cosfac-dt_dCi1(k)*cosfac2xx
5485 dYY_Ci(k)=pom*sinfac+dt_dCi(k)*sinfac2yy
5486 dYY_Ci1(k)=pom1*sinfac+dt_dCi1(k)*sinfac2yy
5490 dZZ_Ci(k)=dZZ_Ci(k)-uzgrad(j,k,2,i-1)
5491 & *dsign(1.0d0,dfloat(itype(i)))*dC_norm(j,i+nres)
5492 dZZ_Ci1(k)=dZZ_Ci1(k)-uzgrad(j,k,1,i-1)
5493 & *dsign(1.0d0,dfloat(itype(i)))*dC_norm(j,i+nres)
5496 dXX_XYZ(k)=vbld_inv(i+nres)*(x_prime(k)-xx*dC_norm(k,i+nres))
5497 dYY_XYZ(k)=vbld_inv(i+nres)*(y_prime(k)-yy*dC_norm(k,i+nres))
5498 dZZ_XYZ(k)=vbld_inv(i+nres)*(z_prime(k)-zz*dC_norm(k,i+nres))
5500 dt_dCi(k) = -dt_dCi(k)/sinttab(i+1)
5501 dt_dCi1(k)= -dt_dCi1(k)/sinttab(i+1)
5505 dXX_Ctab(k,i)=dXX_Ci(k)
5506 dXX_C1tab(k,i)=dXX_Ci1(k)
5507 dYY_Ctab(k,i)=dYY_Ci(k)
5508 dYY_C1tab(k,i)=dYY_Ci1(k)
5509 dZZ_Ctab(k,i)=dZZ_Ci(k)
5510 dZZ_C1tab(k,i)=dZZ_Ci1(k)
5511 dXX_XYZtab(k,i)=dXX_XYZ(k)
5512 dYY_XYZtab(k,i)=dYY_XYZ(k)
5513 dZZ_XYZtab(k,i)=dZZ_XYZ(k)
5517 c write (iout,*) "k",k," dxx_ci1",dxx_ci1(k)," dyy_ci1",
5518 c & dyy_ci1(k)," dzz_ci1",dzz_ci1(k)
5519 c write (iout,*) "k",k," dxx_ci",dxx_ci(k)," dyy_ci",
5520 c & dyy_ci(k)," dzz_ci",dzz_ci(k)
5521 c write (iout,*) "k",k," dt_dci",dt_dci(k)," dt_dci",
5523 c write (iout,*) "k",k," dxx_XYZ",dxx_XYZ(k)," dyy_XYZ",
5524 c & dyy_XYZ(k)," dzz_XYZ",dzz_XYZ(k)
5525 gscloc(k,i-1)=gscloc(k,i-1)+de_dxx*dxx_ci1(k)
5526 & +de_dyy*dyy_ci1(k)+de_dzz*dzz_ci1(k)+de_dt*dt_dCi1(k)
5527 gscloc(k,i)=gscloc(k,i)+de_dxx*dxx_Ci(k)
5528 & +de_dyy*dyy_Ci(k)+de_dzz*dzz_Ci(k)+de_dt*dt_dCi(k)
5529 gsclocx(k,i)= de_dxx*dxx_XYZ(k)
5530 & +de_dyy*dyy_XYZ(k)+de_dzz*dzz_XYZ(k)
5532 c write(iout,*) "ENERGY GRAD = ", (gscloc(k,i-1),k=1,3),
5533 c & (gscloc(k,i),k=1,3),(gsclocx(k,i),k=1,3)
5535 C to check gradient call subroutine check_grad
5542 c------------------------------------------------------------------------------
5543 subroutine gcont(rij,r0ij,eps0ij,delta,fcont,fprimcont)
5545 C This procedure calculates two-body contact function g(rij) and its derivative:
5548 C g(rij) = esp0ij*(-0.9375*x+0.625*x**3-0.1875*x**5) ! -1 =< x =< 1
5551 C where x=(rij-r0ij)/delta
5553 C rij - interbody distance, r0ij - contact distance, eps0ij - contact energy
5556 double precision rij,r0ij,eps0ij,fcont,fprimcont
5557 double precision x,x2,x4,delta
5561 if (x.lt.-1.0D0) then
5564 else if (x.le.1.0D0) then
5567 fcont=eps0ij*(x*(-0.9375D0+0.6250D0*x2-0.1875D0*x4)+0.5D0)
5568 fprimcont=eps0ij * (-0.9375D0+1.8750D0*x2-0.9375D0*x4)/delta
5575 c------------------------------------------------------------------------------
5576 subroutine splinthet(theti,delta,ss,ssder)
5577 implicit real*8 (a-h,o-z)
5578 include 'DIMENSIONS'
5579 include 'DIMENSIONS.ZSCOPT'
5580 include 'COMMON.VAR'
5581 include 'COMMON.GEO'
5584 if (theti.gt.pipol) then
5585 call gcont(theti,thetup,1.0d0,delta,ss,ssder)
5587 call gcont(-theti,-thetlow,1.0d0,delta,ss,ssder)
5592 c------------------------------------------------------------------------------
5593 subroutine spline1(x,x0,delta,f0,f1,fprim0,f,fprim)
5595 double precision x,x0,delta,f0,f1,fprim0,f,fprim
5596 double precision ksi,ksi2,ksi3,a1,a2,a3
5597 a1=fprim0*delta/(f1-f0)
5603 f=f0+(f1-f0)*ksi*(a1+ksi*(a2+a3*ksi))
5604 fprim=(f1-f0)/delta*(a1+ksi*(2*a2+3*ksi*a3))
5607 c------------------------------------------------------------------------------
5608 subroutine spline2(x,x0,delta,f0x,f1x,fprim0x,fx)
5610 double precision x,x0,delta,f0x,f1x,fprim0x,fx
5611 double precision ksi,ksi2,ksi3,a1,a2,a3
5616 a2=3*(f1x-f0x)-2*fprim0x*delta
5617 a3=fprim0x*delta-2*(f1x-f0x)
5618 fx=f0x+a1*ksi+a2*ksi2+a3*ksi3
5621 C-----------------------------------------------------------------------------
5623 C-----------------------------------------------------------------------------
5624 subroutine etor(etors,fact)
5625 implicit real*8 (a-h,o-z)
5626 include 'DIMENSIONS'
5627 include 'DIMENSIONS.ZSCOPT'
5628 include 'COMMON.VAR'
5629 include 'COMMON.GEO'
5630 include 'COMMON.LOCAL'
5631 include 'COMMON.TORSION'
5632 include 'COMMON.INTERACT'
5633 include 'COMMON.DERIV'
5634 include 'COMMON.CHAIN'
5635 include 'COMMON.NAMES'
5636 include 'COMMON.IOUNITS'
5637 include 'COMMON.FFIELD'
5638 include 'COMMON.TORCNSTR'
5640 C Set lprn=.true. for debugging
5644 do i=iphi_start,iphi_end
5645 if (itype(i-2).eq.ntyp1 .or. itype(i-1).eq.ntyp1
5646 & .or. itype(i).eq.ntyp1) cycle
5647 itori=itortyp(itype(i-2))
5648 itori1=itortyp(itype(i-1))
5651 C Proline-Proline pair is a special case...
5652 if (itori.eq.3 .and. itori1.eq.3) then
5653 if (phii.gt.-dwapi3) then
5655 fac=1.0D0/(1.0D0-cosphi)
5656 etorsi=v1(1,3,3)*fac
5657 etorsi=etorsi+etorsi
5658 etors=etors+etorsi-v1(1,3,3)
5659 gloci=gloci-3*fac*etorsi*dsin(3*phii)
5662 v1ij=v1(j+1,itori,itori1)
5663 v2ij=v2(j+1,itori,itori1)
5666 etors=etors+v1ij*cosphi+v2ij*sinphi+dabs(v1ij)+dabs(v2ij)
5667 gloci=gloci+j*(v2ij*cosphi-v1ij*sinphi)
5671 v1ij=v1(j,itori,itori1)
5672 v2ij=v2(j,itori,itori1)
5675 etors=etors+v1ij*cosphi+v2ij*sinphi+dabs(v1ij)+dabs(v2ij)
5676 gloci=gloci+j*(v2ij*cosphi-v1ij*sinphi)
5680 & write (iout,'(2(a3,2x,i3,2x),2i3,6f8.3/26x,6f8.3/)')
5681 & restyp(itype(i-2)),i-2,restyp(itype(i-1)),i-1,itori,itori1,
5682 & (v1(j,itori,itori1),j=1,6),(v2(j,itori,itori1),j=1,6)
5683 gloc(i-3,icg)=gloc(i-3,icg)+wtor*fact*gloci
5684 c write (iout,*) 'i=',i,' gloc=',gloc(i-3,icg)
5688 c------------------------------------------------------------------------------
5690 subroutine etor(etors,fact)
5691 implicit real*8 (a-h,o-z)
5692 include 'DIMENSIONS'
5693 include 'DIMENSIONS.ZSCOPT'
5694 include 'COMMON.VAR'
5695 include 'COMMON.GEO'
5696 include 'COMMON.LOCAL'
5697 include 'COMMON.TORSION'
5698 include 'COMMON.INTERACT'
5699 include 'COMMON.DERIV'
5700 include 'COMMON.CHAIN'
5701 include 'COMMON.NAMES'
5702 include 'COMMON.IOUNITS'
5703 include 'COMMON.FFIELD'
5704 include 'COMMON.TORCNSTR'
5706 C Set lprn=.true. for debugging
5710 do i=iphi_start,iphi_end
5712 if (itype(i-2).eq.ntyp1.or. itype(i-1).eq.ntyp1
5713 & .or. itype(i).eq.ntyp1 .or. itype(i-3).eq.ntyp1) cycle
5714 C if (itype(i-2).eq.ntyp1 .or. itype(i-1).eq.ntyp1
5715 C & .or. itype(i).eq.ntyp1) cycle
5716 if (itel(i-2).eq.0 .or. itel(i-1).eq.0) goto 1215
5717 if (iabs(itype(i)).eq.20) then
5722 itori=itortyp(itype(i-2))
5723 itori1=itortyp(itype(i-1))
5726 C Regular cosine and sine terms
5727 do j=1,nterm(itori,itori1,iblock)
5728 v1ij=v1(j,itori,itori1,iblock)
5729 v2ij=v2(j,itori,itori1,iblock)
5732 etors=etors+v1ij*cosphi+v2ij*sinphi
5733 gloci=gloci+j*(v2ij*cosphi-v1ij*sinphi)
5737 C E = SUM ----------------------------------- - v1
5738 C [v2 cos(phi/2)+v3 sin(phi/2)]^2 + 1
5740 cosphi=dcos(0.5d0*phii)
5741 sinphi=dsin(0.5d0*phii)
5742 do j=1,nlor(itori,itori1,iblock)
5743 vl1ij=vlor1(j,itori,itori1)
5744 vl2ij=vlor2(j,itori,itori1)
5745 vl3ij=vlor3(j,itori,itori1)
5746 pom=vl2ij*cosphi+vl3ij*sinphi
5747 pom1=1.0d0/(pom*pom+1.0d0)
5748 etors=etors+vl1ij*pom1
5749 c if (energy_dec) etors_ii=etors_ii+
5752 gloci=gloci+vl1ij*(vl3ij*cosphi-vl2ij*sinphi)*pom
5754 C Subtract the constant term
5755 etors=etors-v0(itori,itori1,iblock)
5757 & write (iout,'(2(a3,2x,i3,2x),2i3,6f8.3/26x,6f8.3/)')
5758 & restyp(itype(i-2)),i-2,restyp(itype(i-1)),i-1,itori,itori1,
5759 & (v1(j,itori,itori1,1),j=1,6),(v2(j,itori,itori1,1),j=1,6)
5760 gloc(i-3,icg)=gloc(i-3,icg)+wtor*fact*gloci
5761 c write (iout,*) 'i=',i,' gloc=',gloc(i-3,icg)
5766 c----------------------------------------------------------------------------
5767 subroutine etor_d(etors_d,fact2)
5768 C 6/23/01 Compute double torsional energy
5769 implicit real*8 (a-h,o-z)
5770 include 'DIMENSIONS'
5771 include 'DIMENSIONS.ZSCOPT'
5772 include 'COMMON.VAR'
5773 include 'COMMON.GEO'
5774 include 'COMMON.LOCAL'
5775 include 'COMMON.TORSION'
5776 include 'COMMON.INTERACT'
5777 include 'COMMON.DERIV'
5778 include 'COMMON.CHAIN'
5779 include 'COMMON.NAMES'
5780 include 'COMMON.IOUNITS'
5781 include 'COMMON.FFIELD'
5782 include 'COMMON.TORCNSTR'
5784 C Set lprn=.true. for debugging
5788 do i=iphi_start,iphi_end-1
5790 C if (itype(i-2).eq.ntyp1.or. itype(i-1).eq.ntyp1
5791 C & .or. itype(i).eq.ntyp1 .or. itype(i+1).eq.ntyp1) cycle
5792 if ((itype(i-2).eq.ntyp1).or.itype(i-3).eq.ntyp1.or.
5793 & (itype(i-1).eq.ntyp1).or.(itype(i).eq.ntyp1).or.
5794 & (itype(i+1).eq.ntyp1)) cycle
5795 if (itel(i-2).eq.0 .or. itel(i-1).eq.0 .or. itel(i).eq.0)
5797 itori=itortyp(itype(i-2))
5798 itori1=itortyp(itype(i-1))
5799 itori2=itortyp(itype(i))
5805 if (iabs(itype(i+1)).eq.20) iblock=2
5806 C Regular cosine and sine terms
5807 do j=1,ntermd_1(itori,itori1,itori2,iblock)
5808 v1cij=v1c(1,j,itori,itori1,itori2,iblock)
5809 v1sij=v1s(1,j,itori,itori1,itori2,iblock)
5810 v2cij=v1c(2,j,itori,itori1,itori2,iblock)
5811 v2sij=v1s(2,j,itori,itori1,itori2,iblock)
5812 cosphi1=dcos(j*phii)
5813 sinphi1=dsin(j*phii)
5814 cosphi2=dcos(j*phii1)
5815 sinphi2=dsin(j*phii1)
5816 etors_d=etors_d+v1cij*cosphi1+v1sij*sinphi1+
5817 & v2cij*cosphi2+v2sij*sinphi2
5818 gloci1=gloci1+j*(v1sij*cosphi1-v1cij*sinphi1)
5819 gloci2=gloci2+j*(v2sij*cosphi2-v2cij*sinphi2)
5821 do k=2,ntermd_2(itori,itori1,itori2,iblock)
5823 v1cdij = v2c(k,l,itori,itori1,itori2,iblock)
5824 v2cdij = v2c(l,k,itori,itori1,itori2,iblock)
5825 v1sdij = v2s(k,l,itori,itori1,itori2,iblock)
5826 v2sdij = v2s(l,k,itori,itori1,itori2,iblock)
5827 cosphi1p2=dcos(l*phii+(k-l)*phii1)
5828 cosphi1m2=dcos(l*phii-(k-l)*phii1)
5829 sinphi1p2=dsin(l*phii+(k-l)*phii1)
5830 sinphi1m2=dsin(l*phii-(k-l)*phii1)
5831 etors_d=etors_d+v1cdij*cosphi1p2+v2cdij*cosphi1m2+
5832 & v1sdij*sinphi1p2+v2sdij*sinphi1m2
5833 gloci1=gloci1+l*(v1sdij*cosphi1p2+v2sdij*cosphi1m2
5834 & -v1cdij*sinphi1p2-v2cdij*sinphi1m2)
5835 gloci2=gloci2+(k-l)*(v1sdij*cosphi1p2-v2sdij*cosphi1m2
5836 & -v1cdij*sinphi1p2+v2cdij*sinphi1m2)
5839 gloc(i-3,icg)=gloc(i-3,icg)+wtor_d*fact2*gloci1
5840 gloc(i-2,icg)=gloc(i-2,icg)+wtor_d*fact2*gloci2
5846 c---------------------------------------------------------------------------
5847 C The rigorous attempt to derive energy function
5848 subroutine etor_kcc(etors,fact)
5849 implicit real*8 (a-h,o-z)
5850 include 'DIMENSIONS'
5851 include 'DIMENSIONS.ZSCOPT'
5852 include 'COMMON.VAR'
5853 include 'COMMON.GEO'
5854 include 'COMMON.LOCAL'
5855 include 'COMMON.TORSION'
5856 include 'COMMON.INTERACT'
5857 include 'COMMON.DERIV'
5858 include 'COMMON.CHAIN'
5859 include 'COMMON.NAMES'
5860 include 'COMMON.IOUNITS'
5861 include 'COMMON.FFIELD'
5862 include 'COMMON.TORCNSTR'
5863 include 'COMMON.CONTROL'
5864 double precision c1(0:maxval_kcc),c2(0:maxval_kcc)
5866 c double precision thybt1(maxtermkcc),thybt2(maxtermkcc)
5867 C Set lprn=.true. for debugging
5870 C print *,"wchodze kcc"
5871 if (lprn) write (iout,*) "etor_kcc tor_mode",tor_mode
5873 do i=iphi_start,iphi_end
5874 C ANY TWO ARE DUMMY ATOMS in row CYCLE
5875 c if (((itype(i-3).eq.ntyp1).and.(itype(i-2).eq.ntyp1)).or.
5876 c & ((itype(i-2).eq.ntyp1).and.(itype(i-1).eq.ntyp1)) .or.
5877 c & ((itype(i-1).eq.ntyp1).and.(itype(i).eq.ntyp1))) cycle
5878 if (itype(i-2).eq.ntyp1.or. itype(i-1).eq.ntyp1
5879 & .or. itype(i).eq.ntyp1 .or. itype(i-3).eq.ntyp1) cycle
5880 itori=itortyp(itype(i-2))
5881 itori1=itortyp(itype(i-1))
5886 C to avoid multiple devision by 2
5887 c theti22=0.5d0*theta(i)
5888 C theta 12 is the theta_1 /2
5889 C theta 22 is theta_2 /2
5890 c theti12=0.5d0*theta(i-1)
5891 C and appropriate sinus function
5892 sinthet1=dsin(theta(i-1))
5893 sinthet2=dsin(theta(i))
5894 costhet1=dcos(theta(i-1))
5895 costhet2=dcos(theta(i))
5896 C to speed up lets store its mutliplication
5897 sint1t2=sinthet2*sinthet1
5899 C \sum_{i=1}^n (sin(theta_1) * sin(theta_2))^n * (c_n* cos(n*gamma)
5900 C +d_n*sin(n*gamma)) *
5901 C \sum_{i=1}^m (1+a_m*Tb_m(cos(theta_1 /2))+b_m*Tb_m(cos(theta_2 /2)))
5902 C we have two sum 1) Non-Chebyshev which is with n and gamma
5903 nval=nterm_kcc_Tb(itori,itori1)
5909 c1(j)=c1(j-1)*costhet1
5910 c2(j)=c2(j-1)*costhet2
5913 do j=1,nterm_kcc(itori,itori1)
5917 sint1t2n=sint1t2n*sint1t2
5923 sumvalc=sumvalc+v1_kcc(l,k,j,itori1,itori)*c1(k)*c2(l)
5924 gradvalct1=gradvalct1+
5925 & (k-1)*v1_kcc(l,k,j,itori1,itori)*c1(k-1)*c2(l)
5926 gradvalct2=gradvalct2+
5927 & (l-1)*v1_kcc(l,k,j,itori1,itori)*c1(k)*c2(l-1)
5930 gradvalct1=-gradvalct1*sinthet1
5931 gradvalct2=-gradvalct2*sinthet2
5937 sumvals=sumvals+v2_kcc(l,k,j,itori1,itori)*c1(k)*c2(l)
5938 gradvalst1=gradvalst1+
5939 & (k-1)*v2_kcc(l,k,j,itori1,itori)*c1(k-1)*c2(l)
5940 gradvalst2=gradvalst2+
5941 & (l-1)*v2_kcc(l,k,j,itori1,itori)*c1(k)*c2(l-1)
5944 gradvalst1=-gradvalst1*sinthet1
5945 gradvalst2=-gradvalst2*sinthet2
5946 etori=etori+sint1t2n*(sumvalc*cosphi+sumvals*sinphi)
5947 C glocig is the gradient local i site in gamma
5948 glocig=glocig+j*sint1t2n*(sumvals*cosphi-sumvalc*sinphi)
5949 C now gradient over theta_1
5950 glocit1=glocit1+sint1t2n*(gradvalct1*cosphi+gradvalst1*sinphi)
5951 & +j*sint1t2n1*costhet1*sinthet2*(sumvalc*cosphi+sumvals*sinphi)
5952 glocit2=glocit2+sint1t2n*(gradvalct2*cosphi+gradvalst2*sinphi)
5953 & +j*sint1t2n1*sinthet1*costhet2*(sumvalc*cosphi+sumvals*sinphi)
5956 C derivative over gamma
5957 gloc(i-3,icg)=gloc(i-3,icg)+wtor*glocig
5958 C derivative over theta1
5959 gloc(nphi+i-3,icg)=gloc(nphi+i-3,icg)+wtor*glocit1
5960 C now derivative over theta2
5961 gloc(nphi+i-2,icg)=gloc(nphi+i-2,icg)+wtor*glocit2
5963 write (iout,*) i-2,i-1,itype(i-2),itype(i-1),itori,itori1,
5964 & theta(i-1)*rad2deg,theta(i)*rad2deg,phii*rad2deg,etori
5965 write (iout,*) "c1",(c1(k),k=0,nval),
5966 & " c2",(c2(k),k=0,nval)
5967 write (iout,*) "sumvalc",sumvalc," sumvals",sumvals
5972 c---------------------------------------------------------------------------------------------
5973 subroutine etor_constr(edihcnstr)
5974 implicit real*8 (a-h,o-z)
5975 include 'DIMENSIONS'
5976 include 'DIMENSIONS.ZSCOPT'
5977 include 'COMMON.VAR'
5978 include 'COMMON.GEO'
5979 include 'COMMON.LOCAL'
5980 include 'COMMON.TORSION'
5981 include 'COMMON.INTERACT'
5982 include 'COMMON.DERIV'
5983 include 'COMMON.CHAIN'
5984 include 'COMMON.NAMES'
5985 include 'COMMON.IOUNITS'
5986 include 'COMMON.FFIELD'
5987 include 'COMMON.TORCNSTR'
5988 include 'COMMON.CONTROL'
5989 ! 6/20/98 - dihedral angle constraints
5991 c do i=1,ndih_constr
5992 c write (iout,*) "idihconstr_start",idihconstr_start,
5993 c & " idihconstr_end",idihconstr_end
5995 if (raw_psipred) then
5996 do i=idihconstr_start,idihconstr_end
5997 itori=idih_constr(i)
5999 gaudih_i=vpsipred(1,i)
6003 cos_i=(1.0d0-dcos(phii-phibound(j,i)))/s**2
6004 dexpcos_i=dexp(-cos_i*cos_i)
6005 gaudih_i=gaudih_i+vpsipred(j+1,i)*dexpcos_i
6006 gauder_i=gauder_i-2*vpsipred(j+1,i)*dsin(phii-phibound(j,i))
6007 & *cos_i*dexpcos_i/s**2
6009 edihcnstr=edihcnstr-wdihc*dlog(gaudih_i)
6010 gloc(itori-3,icg)=gloc(itori-3,icg)-wdihc*gauder_i/gaudih_i
6012 & write (iout,'(2i5,f8.3,f8.5,2(f8.5,2f8.3),f10.5)')
6013 & i,itori,phii*rad2deg,vpsipred(1,i),vpsipred(2,i),
6014 & phibound(1,i)*rad2deg,sdihed(1,i)*rad2deg,vpsipred(3,i),
6015 & phibound(2,i)*rad2deg,sdihed(2,i)*rad2deg,
6016 & -wdihc*dlog(gaudih_i)
6020 do i=idihconstr_start,idihconstr_end
6021 itori=idih_constr(i)
6023 difi=pinorm(phii-phi0(i))
6024 if (difi.gt.drange(i)) then
6026 edihcnstr=edihcnstr+0.25d0*ftors(i)*difi**4
6027 gloc(itori-3,icg)=gloc(itori-3,icg)+ftors(i)*difi**3
6028 else if (difi.lt.-drange(i)) then
6030 edihcnstr=edihcnstr+0.25d0*ftors(i)*difi**4
6031 gloc(itori-3,icg)=gloc(itori-3,icg)+ftors(i)*difi**3
6039 c write (iout,*) "ETOR_CONSTR",edihcnstr
6042 c----------------------------------------------------------------------------
6043 C The rigorous attempt to derive energy function
6044 subroutine ebend_kcc(etheta)
6046 implicit real*8 (a-h,o-z)
6047 include 'DIMENSIONS'
6048 include 'DIMENSIONS.ZSCOPT'
6049 include 'COMMON.VAR'
6050 include 'COMMON.GEO'
6051 include 'COMMON.LOCAL'
6052 include 'COMMON.TORSION'
6053 include 'COMMON.INTERACT'
6054 include 'COMMON.DERIV'
6055 include 'COMMON.CHAIN'
6056 include 'COMMON.NAMES'
6057 include 'COMMON.IOUNITS'
6058 include 'COMMON.FFIELD'
6059 include 'COMMON.TORCNSTR'
6060 include 'COMMON.CONTROL'
6062 double precision thybt1(maxang_kcc)
6063 C Set lprn=.true. for debugging
6066 C print *,"wchodze kcc"
6067 if (lprn) write (iout,*) "ebend_kcc tor_mode",tor_mode
6069 do i=ithet_start,ithet_end
6070 c print *,i,itype(i-1),itype(i),itype(i-2)
6071 if ((itype(i-1).eq.ntyp1).or.itype(i-2).eq.ntyp1
6072 & .or.itype(i).eq.ntyp1) cycle
6073 iti=iabs(itortyp(itype(i-1)))
6074 sinthet=dsin(theta(i))
6075 costhet=dcos(theta(i))
6076 do j=1,nbend_kcc_Tb(iti)
6077 thybt1(j)=v1bend_chyb(j,iti)
6079 sumth1thyb=v1bend_chyb(0,iti)+
6080 & tschebyshev(1,nbend_kcc_Tb(iti),thybt1(1),costhet)
6081 if (lprn) write (iout,*) i-1,itype(i-1),iti,theta(i)*rad2deg,
6083 ihelp=nbend_kcc_Tb(iti)-1
6084 gradthybt1=gradtschebyshev(0,ihelp,thybt1(1),costhet)
6085 etheta=etheta+sumth1thyb
6086 C print *,sumth1thyb,gradthybt1,sinthet*(-0.5d0)
6087 gloc(nphi+i-2,icg)=gloc(nphi+i-2,icg)-wang*gradthybt1*sinthet
6091 c-------------------------------------------------------------------------------------
6092 subroutine etheta_constr(ethetacnstr)
6094 implicit real*8 (a-h,o-z)
6095 include 'DIMENSIONS'
6096 include 'DIMENSIONS.ZSCOPT'
6097 include 'COMMON.VAR'
6098 include 'COMMON.GEO'
6099 include 'COMMON.LOCAL'
6100 include 'COMMON.TORSION'
6101 include 'COMMON.INTERACT'
6102 include 'COMMON.DERIV'
6103 include 'COMMON.CHAIN'
6104 include 'COMMON.NAMES'
6105 include 'COMMON.IOUNITS'
6106 include 'COMMON.FFIELD'
6107 include 'COMMON.TORCNSTR'
6108 include 'COMMON.CONTROL'
6110 C print *,ithetaconstr_start,ithetaconstr_end,"TU"
6111 do i=ithetaconstr_start,ithetaconstr_end
6112 itheta=itheta_constr(i)
6113 thetiii=theta(itheta)
6114 difi=pinorm(thetiii-theta_constr0(i))
6115 if (difi.gt.theta_drange(i)) then
6116 difi=difi-theta_drange(i)
6117 ethetacnstr=ethetacnstr+0.25d0*for_thet_constr(i)*difi**4
6118 gloc(itheta+nphi-2,icg)=gloc(itheta+nphi-2,icg)
6119 & +for_thet_constr(i)*difi**3
6120 else if (difi.lt.-drange(i)) then
6122 ethetacnstr=ethetacnstr+0.25d0*for_thet_constr(i)*difi**4
6123 gloc(itheta+nphi-2,icg)=gloc(itheta+nphi-2,icg)
6124 & +for_thet_constr(i)*difi**3
6128 if (energy_dec) then
6129 write (iout,'(a6,2i5,4f8.3,2e14.5)') "ethetc",
6130 & i,itheta,rad2deg*thetiii,
6131 & rad2deg*theta_constr0(i), rad2deg*theta_drange(i),
6132 & rad2deg*difi,0.25d0*for_thet_constr(i)*difi**4,
6133 & gloc(itheta+nphi-2,icg)
6138 c------------------------------------------------------------------------------
6139 c------------------------------------------------------------------------------
6140 subroutine eback_sc_corr(esccor)
6141 c 7/21/2007 Correlations between the backbone-local and side-chain-local
6142 c conformational states; temporarily implemented as differences
6143 c between UNRES torsional potentials (dependent on three types of
6144 c residues) and the torsional potentials dependent on all 20 types
6145 c of residues computed from AM1 energy surfaces of terminally-blocked
6146 c amino-acid residues.
6147 implicit real*8 (a-h,o-z)
6148 include 'DIMENSIONS'
6149 include 'DIMENSIONS.ZSCOPT'
6150 include 'COMMON.VAR'
6151 include 'COMMON.GEO'
6152 include 'COMMON.LOCAL'
6153 include 'COMMON.TORSION'
6154 include 'COMMON.SCCOR'
6155 include 'COMMON.INTERACT'
6156 include 'COMMON.DERIV'
6157 include 'COMMON.CHAIN'
6158 include 'COMMON.NAMES'
6159 include 'COMMON.IOUNITS'
6160 include 'COMMON.FFIELD'
6161 include 'COMMON.CONTROL'
6163 C Set lprn=.true. for debugging
6166 c write (iout,*) "EBACK_SC_COR",iphi_start,iphi_end,nterm_sccor
6168 do i=itau_start,itau_end
6169 if ((itype(i-2).eq.ntyp1).or.(itype(i-1).eq.ntyp1)) cycle
6171 isccori=isccortyp(itype(i-2))
6172 isccori1=isccortyp(itype(i-1))
6174 do intertyp=1,3 !intertyp
6175 cc Added 09 May 2012 (Adasko)
6176 cc Intertyp means interaction type of backbone mainchain correlation:
6177 c 1 = SC...Ca...Ca...Ca
6178 c 2 = Ca...Ca...Ca...SC
6179 c 3 = SC...Ca...Ca...SCi
6181 if (((intertyp.eq.3).and.((itype(i-2).eq.10).or.
6182 & (itype(i-1).eq.10).or.(itype(i-2).eq.ntyp1).or.
6183 & (itype(i-1).eq.ntyp1)))
6184 & .or. ((intertyp.eq.1).and.((itype(i-2).eq.10)
6185 & .or.(itype(i-2).eq.ntyp1).or.(itype(i-1).eq.ntyp1)
6186 & .or.(itype(i).eq.ntyp1)))
6187 & .or.((intertyp.eq.2).and.((itype(i-1).eq.10).or.
6188 & (itype(i-1).eq.ntyp1).or.(itype(i-2).eq.ntyp1).or.
6189 & (itype(i-3).eq.ntyp1)))) cycle
6190 if ((intertyp.eq.2).and.(i.eq.4).and.(itype(1).eq.ntyp1)) cycle
6191 if ((intertyp.eq.1).and.(i.eq.nres).and.(itype(nres).eq.ntyp1))
6193 do j=1,nterm_sccor(isccori,isccori1)
6194 v1ij=v1sccor(j,intertyp,isccori,isccori1)
6195 v2ij=v2sccor(j,intertyp,isccori,isccori1)
6196 cosphi=dcos(j*tauangle(intertyp,i))
6197 sinphi=dsin(j*tauangle(intertyp,i))
6198 esccor=esccor+v1ij*cosphi+v2ij*sinphi
6199 gloci=gloci+j*(v2ij*cosphi-v1ij*sinphi)
6201 C write (iout,*)"EBACK_SC_COR",esccor,i
6202 c write (iout,*) "EBACK_SC_COR",i,v1ij*cosphi+v2ij*sinphi,intertyp,
6203 c & nterm_sccor(isccori,isccori1),isccori,isccori1
6204 c gloc_sc(intertyp,i-3,icg)=gloc_sc(intertyp,i-3,icg)+wsccor*gloci
6206 & write (iout,'(2(a3,2x,i3,2x),2i3,6f8.3/26x,6f8.3/)')
6207 & restyp(itype(i-2)),i-2,restyp(itype(i-1)),i-1,itori,itori1,
6208 & (v1sccor(j,1,itori,itori1),j=1,6)
6209 & ,(v2sccor(j,1,itori,itori1),j=1,6)
6210 c gsccor_loc(i-3)=gloci
6215 c------------------------------------------------------------------------------
6216 subroutine multibody(ecorr)
6217 C This subroutine calculates multi-body contributions to energy following
6218 C the idea of Skolnick et al. If side chains I and J make a contact and
6219 C at the same time side chains I+1 and J+1 make a contact, an extra
6220 C contribution equal to sqrt(eps(i,j)*eps(i+1,j+1)) is added.
6221 implicit real*8 (a-h,o-z)
6222 include 'DIMENSIONS'
6223 include 'COMMON.IOUNITS'
6224 include 'COMMON.DERIV'
6225 include 'COMMON.INTERACT'
6226 include 'COMMON.CONTACTS'
6227 double precision gx(3),gx1(3)
6230 C Set lprn=.true. for debugging
6234 write (iout,'(a)') 'Contact function values:'
6236 write (iout,'(i2,20(1x,i2,f10.5))')
6237 & i,(jcont(j,i),facont(j,i),j=1,num_cont(i))
6252 num_conti=num_cont(i)
6253 num_conti1=num_cont(i1)
6258 if (j1.eq.j+ishift .or. j1.eq.j-ishift) then
6259 cd write(iout,*)'i=',i,' j=',j,' i1=',i1,' j1=',j1,
6260 cd & ' ishift=',ishift
6261 C Contacts I--J and I+ISHIFT--J+-ISHIFT1 occur simultaneously.
6262 C The system gains extra energy.
6263 ecorr=ecorr+esccorr(i,j,i1,j1,jj,kk)
6264 endif ! j1==j+-ishift
6273 c------------------------------------------------------------------------------
6274 double precision function esccorr(i,j,k,l,jj,kk)
6275 implicit real*8 (a-h,o-z)
6276 include 'DIMENSIONS'
6277 include 'COMMON.IOUNITS'
6278 include 'COMMON.DERIV'
6279 include 'COMMON.INTERACT'
6280 include 'COMMON.CONTACTS'
6281 double precision gx(3),gx1(3)
6286 cd write (iout,'(4i5,3f10.5)') i,j,k,l,eij,ekl,-eij*ekl
6287 C Calculate the multi-body contribution to energy.
6288 C Calculate multi-body contributions to the gradient.
6289 cd write (iout,'(2(2i3,3f10.5))')i,j,(gacont(m,jj,i),m=1,3),
6290 cd & k,l,(gacont(m,kk,k),m=1,3)
6292 gx(m) =ekl*gacont(m,jj,i)
6293 gx1(m)=eij*gacont(m,kk,k)
6294 gradxorr(m,i)=gradxorr(m,i)-gx(m)
6295 gradxorr(m,j)=gradxorr(m,j)+gx(m)
6296 gradxorr(m,k)=gradxorr(m,k)-gx1(m)
6297 gradxorr(m,l)=gradxorr(m,l)+gx1(m)
6301 gradcorr(ll,m)=gradcorr(ll,m)+gx(ll)
6306 gradcorr(ll,m)=gradcorr(ll,m)+gx1(ll)
6312 c------------------------------------------------------------------------------
6313 subroutine multibody_hb(ecorr,ecorr5,ecorr6,n_corr,n_corr1)
6314 C This subroutine calculates multi-body contributions to hydrogen-bonding
6315 implicit real*8 (a-h,o-z)
6316 include 'DIMENSIONS'
6317 include 'DIMENSIONS.ZSCOPT'
6318 include 'COMMON.IOUNITS'
6319 include 'COMMON.FFIELD'
6320 include 'COMMON.DERIV'
6321 include 'COMMON.INTERACT'
6322 include 'COMMON.CONTACTS'
6323 double precision gx(3),gx1(3)
6326 C Set lprn=.true. for debugging
6329 write (iout,'(a)') 'Contact function values:'
6331 write (iout,'(2i3,50(1x,i2,f5.2))')
6332 & i,num_cont_hb(i),(jcont_hb(j,i),facont_hb(j,i),
6333 & j=1,num_cont_hb(i))
6337 C Remove the loop below after debugging !!!
6344 C Calculate the local-electrostatic correlation terms
6345 do i=iatel_s,iatel_e+1
6347 num_conti=num_cont_hb(i)
6348 num_conti1=num_cont_hb(i+1)
6353 c write (iout,*) 'i=',i,' j=',j,' i1=',i1,' j1=',j1,
6354 c & ' jj=',jj,' kk=',kk
6355 if (j1.eq.j+1 .or. j1.eq.j-1) then
6356 C Contacts I-J and (I+1)-(J+1) or (I+1)-(J-1) occur simultaneously.
6357 C The system gains extra energy.
6358 ecorr=ecorr+ehbcorr(i,j,i+1,j1,jj,kk,0.72D0,0.32D0)
6360 else if (j1.eq.j) then
6361 C Contacts I-J and I-(J+1) occur simultaneously.
6362 C The system loses extra energy.
6363 c ecorr=ecorr+ehbcorr(i,j,i+1,j,jj,kk,0.60D0,-0.40D0)
6368 c write (iout,*) 'i=',i,' j=',j,' i1=',i1,' j1=',j1,
6369 c & ' jj=',jj,' kk=',kk
6371 C Contacts I-J and (I+1)-J occur simultaneously.
6372 C The system loses extra energy.
6373 c ecorr=ecorr+ehbcorr(i,j,i,j+1,jj,kk,0.60D0,-0.40D0)
6380 c------------------------------------------------------------------------------
6381 subroutine multibody_eello(ecorr,ecorr5,ecorr6,eturn6,n_corr,
6383 C This subroutine calculates multi-body contributions to hydrogen-bonding
6384 implicit real*8 (a-h,o-z)
6385 include 'DIMENSIONS'
6386 include 'DIMENSIONS.ZSCOPT'
6387 include 'COMMON.IOUNITS'
6391 include 'COMMON.FFIELD'
6392 include 'COMMON.DERIV'
6393 include 'COMMON.LOCAL'
6394 include 'COMMON.INTERACT'
6395 include 'COMMON.CONTACTS'
6396 include 'COMMON.CHAIN'
6397 include 'COMMON.CONTROL'
6398 include 'COMMON.SHIELD'
6399 double precision gx(3),gx1(3)
6400 integer num_cont_hb_old(maxres)
6402 double precision eello4,eello5,eelo6,eello_turn6
6403 external eello4,eello5,eello6,eello_turn6
6404 C Set lprn=.true. for debugging
6408 write (iout,'(a)') 'Contact function values:'
6410 write (iout,'(2i3,50(1x,i2,5f6.3))')
6411 & i,num_cont_hb(i),(jcont_hb(j,i),d_cont(j,i),
6412 & ((a_chuj(ll,kk,j,i),ll=1,2),kk=1,2),j=1,num_cont_hb(i))
6418 C Remove the loop below after debugging !!!
6425 C Calculate the dipole-dipole interaction energies
6426 if (wcorr6.gt.0.0d0 .or. wturn6.gt.0.0d0) then
6427 do i=iatel_s,iatel_e+1
6428 num_conti=num_cont_hb(i)
6437 C Calculate the local-electrostatic correlation terms
6438 c write (iout,*) "gradcorr5 in eello5 before loop"
6440 c write (iout,'(i5,3f10.5)')
6441 c & iii,(gradcorr5(jjj,iii),jjj=1,3)
6443 do i=min0(iatel_s,iturn4_start),max0(iatel_e+1,iturn3_end+1)
6444 c write (iout,*) "corr loop i",i
6446 num_conti=num_cont_hb(i)
6447 num_conti1=num_cont_hb(i+1)
6454 c write (iout,*) 'i=',i,' j=',j,' i1=',i1,' j1=',j1,
6455 c & ' jj=',jj,' kk=',kk
6456 c if (j1.eq.j+1 .or. j1.eq.j-1) then
6457 if ((j.gt.0 .and. j1.gt.0 .or. j.gt.0 .and. j1.lt.0
6458 & .or. j.lt.0 .and. j1.gt.0) .and.
6459 & (jp1.eq.jp+1 .or. jp1.eq.jp-1)) then
6460 C Contacts I-J and (I+1)-(J+1) or (I+1)-(J-1) occur simultaneously.
6461 C The system gains extra energy.
6463 sqd1=dsqrt(d_cont(jj,i))
6464 sqd2=dsqrt(d_cont(kk,i1))
6465 sred_geom = sqd1*sqd2
6466 IF (sred_geom.lt.cutoff_corr) THEN
6467 call gcont(sred_geom,r0_corr,1.0D0,delt_corr,
6469 cd write (iout,*) 'i=',i,' j=',jp,' i1=',i1,' j1=',jp1,
6470 cd & ' jj=',jj,' kk=',kk
6471 fac_prim1=0.5d0*sqd2/sqd1*fprimcont
6472 fac_prim2=0.5d0*sqd1/sqd2*fprimcont
6474 g_contij(l,1)=fac_prim1*grij_hb_cont(l,jj,i)
6475 g_contij(l,2)=fac_prim2*grij_hb_cont(l,kk,i1)
6478 cd write (iout,*) 'sred_geom=',sred_geom,
6479 cd & ' ekont=',ekont,' fprim=',fprimcont,
6480 cd & ' fac_prim1',fac_prim1,' fac_prim2',fac_prim2
6481 cd write (iout,*) "g_contij",g_contij
6482 cd write (iout,*) "grij_hb_cont i",grij_hb_cont(:,jj,i)
6483 cd write (iout,*) "grij_hb_cont i1",grij_hb_cont(:,jj,i1)
6484 call calc_eello(i,jp,i+1,jp1,jj,kk)
6485 if (wcorr4.gt.0.0d0)
6486 & ecorr=ecorr+eello4(i,jp,i+1,jp1,jj,kk)
6487 CC & *fac_shield(i)**2*fac_shield(j)**2
6488 if (energy_dec.and.wcorr4.gt.0.0d0)
6489 1 write (iout,'(a6,4i5,0pf7.3)')
6490 2 'ecorr4',i,j,i+1,j1,eello4(i,jp,i+1,jp1,jj,kk)
6491 c write (iout,*) "gradcorr5 before eello5"
6493 c write (iout,'(i5,3f10.5)')
6494 c & iii,(gradcorr5(jjj,iii),jjj=1,3)
6496 if (wcorr5.gt.0.0d0)
6497 & ecorr5=ecorr5+eello5(i,jp,i+1,jp1,jj,kk)
6498 c write (iout,*) "gradcorr5 after eello5"
6500 c write (iout,'(i5,3f10.5)')
6501 c & iii,(gradcorr5(jjj,iii),jjj=1,3)
6503 if (energy_dec.and.wcorr5.gt.0.0d0)
6504 1 write (iout,'(a6,4i5,0pf7.3)')
6505 2 'ecorr5',i,j,i+1,j1,eello5(i,jp,i+1,jp1,jj,kk)
6506 cd write(2,*)'wcorr6',wcorr6,' wturn6',wturn6
6507 cd write(2,*)'ijkl',i,jp,i+1,jp1
6508 if (wcorr6.gt.0.0d0 .and. (jp.ne.i+4 .or. jp1.ne.i+3
6509 & .or. wturn6.eq.0.0d0))then
6510 cd write (iout,*) '******ecorr6: i,j,i+1,j1',i,j,i+1,j1
6511 ecorr6=ecorr6+eello6(i,jp,i+1,jp1,jj,kk)
6512 if (energy_dec) write (iout,'(a6,4i5,0pf7.3)')
6513 1 'ecorr6',i,j,i+1,j1,eello6(i,jp,i+1,jp1,jj,kk)
6514 cd write (iout,*) 'ecorr',ecorr,' ecorr5=',ecorr5,
6515 cd & 'ecorr6=',ecorr6
6516 cd write (iout,'(4e15.5)') sred_geom,
6517 cd & dabs(eello4(i,jp,i+1,jp1,jj,kk)),
6518 cd & dabs(eello5(i,jp,i+1,jp1,jj,kk)),
6519 cd & dabs(eello6(i,jp,i+1,jp1,jj,kk))
6520 else if (wturn6.gt.0.0d0
6521 & .and. (jp.eq.i+4 .and. jp1.eq.i+3)) then
6522 cd write (iout,*) '******eturn6: i,j,i+1,j1',i,jip,i+1,jp1
6523 eturn6=eturn6+eello_turn6(i,jj,kk)
6524 if (energy_dec) write (iout,'(a6,4i5,0pf7.3)')
6525 1 'eturn6',i,j,i+1,j1,eello_turn6(i,jj,kk)
6526 cd write (2,*) 'multibody_eello:eturn6',eturn6
6535 num_cont_hb(i)=num_cont_hb_old(i)
6537 c write (iout,*) "gradcorr5 in eello5"
6539 c write (iout,'(i5,3f10.5)')
6540 c & iii,(gradcorr5(jjj,iii),jjj=1,3)
6544 c------------------------------------------------------------------------------
6545 double precision function ehbcorr(i,j,k,l,jj,kk,coeffp,coeffm)
6546 implicit real*8 (a-h,o-z)
6547 include 'DIMENSIONS'
6548 include 'DIMENSIONS.ZSCOPT'
6549 include 'COMMON.IOUNITS'
6550 include 'COMMON.DERIV'
6551 include 'COMMON.INTERACT'
6552 include 'COMMON.CONTACTS'
6553 include 'COMMON.SHIELD'
6554 include 'COMMON.CONTROL'
6555 double precision gx(3),gx1(3)
6558 C print *,"wchodze",fac_shield(i),shield_mode
6566 ees=-(coeffp*ees0pij*ees0pkl+coeffm*ees0mij*ees0mkl)
6568 C & fac_shield(i)**2*fac_shield(j)**2
6569 cd ees=-(coeffp*ees0pkl+coeffm*ees0mkl)
6570 C Following 4 lines for diagnostics.
6575 c write (iout,'(2(a,2i3,a,f10.5,a,2f10.5),a,f10.5,a,$)')
6576 c & 'Contacts ',i,j,
6577 c & ' eij',eij,' eesij',ees0pij,ees0mij,' and ',k,l
6578 c & ,' fcont ',ekl,' eeskl',ees0pkl,ees0mkl,' energy=',ekont*ees,
6580 C Calculate the multi-body contribution to energy.
6581 C ecorr=ecorr+ekont*ees
6582 C Calculate multi-body contributions to the gradient.
6583 coeffpees0pij=coeffp*ees0pij
6584 coeffmees0mij=coeffm*ees0mij
6585 coeffpees0pkl=coeffp*ees0pkl
6586 coeffmees0mkl=coeffm*ees0mkl
6588 cgrad ghalfi=ees*ekl*gacont_hbr(ll,jj,i)
6589 gradcorr(ll,i)=gradcorr(ll,i)!+0.5d0*ghalfi
6590 & -ekont*(coeffpees0pkl*gacontp_hb1(ll,jj,i)+
6591 & coeffmees0mkl*gacontm_hb1(ll,jj,i))
6592 gradcorr(ll,j)=gradcorr(ll,j)!+0.5d0*ghalfi
6593 & -ekont*(coeffpees0pkl*gacontp_hb2(ll,jj,i)+
6594 & coeffmees0mkl*gacontm_hb2(ll,jj,i))
6595 cgrad ghalfk=ees*eij*gacont_hbr(ll,kk,k)
6596 gradcorr(ll,k)=gradcorr(ll,k)!+0.5d0*ghalfk
6597 & -ekont*(coeffpees0pij*gacontp_hb1(ll,kk,k)+
6598 & coeffmees0mij*gacontm_hb1(ll,kk,k))
6599 gradcorr(ll,l)=gradcorr(ll,l)!+0.5d0*ghalfk
6600 & -ekont*(coeffpees0pij*gacontp_hb2(ll,kk,k)+
6601 & coeffmees0mij*gacontm_hb2(ll,kk,k))
6602 gradlongij=ees*ekl*gacont_hbr(ll,jj,i)-
6603 & ekont*(coeffpees0pkl*gacontp_hb3(ll,jj,i)+
6604 & coeffmees0mkl*gacontm_hb3(ll,jj,i))
6605 gradcorr_long(ll,j)=gradcorr_long(ll,j)+gradlongij
6606 gradcorr_long(ll,i)=gradcorr_long(ll,i)-gradlongij
6607 gradlongkl=ees*eij*gacont_hbr(ll,kk,k)-
6608 & ekont*(coeffpees0pij*gacontp_hb3(ll,kk,k)+
6609 & coeffmees0mij*gacontm_hb3(ll,kk,k))
6610 gradcorr_long(ll,l)=gradcorr_long(ll,l)+gradlongkl
6611 gradcorr_long(ll,k)=gradcorr_long(ll,k)-gradlongkl
6612 c write (iout,'(2f10.5,2x,$)') gradlongij,gradlongkl
6617 cgrad gradcorr(ll,m)=gradcorr(ll,m)+
6618 cgrad & ees*ekl*gacont_hbr(ll,jj,i)-
6619 cgrad & ekont*(coeffp*ees0pkl*gacontp_hb3(ll,jj,i)+
6620 cgrad & coeffm*ees0mkl*gacontm_hb3(ll,jj,i))
6625 cgrad gradcorr(ll,m)=gradcorr(ll,m)+
6626 cgrad & ees*eij*gacont_hbr(ll,kk,k)-
6627 cgrad & ekont*(coeffp*ees0pij*gacontp_hb3(ll,kk,k)+
6628 cgrad & coeffm*ees0mij*gacontm_hb3(ll,kk,k))
6631 c write (iout,*) "ehbcorr",ekont*ees
6632 C print *,ekont,ees,i,k
6634 C now gradient over shielding
6636 if (shield_mode.gt.0) then
6639 C print *,i,j,fac_shield(i),fac_shield(j),
6640 C &fac_shield(k),fac_shield(l)
6641 if ((fac_shield(i).gt.0).and.(fac_shield(j).gt.0).and.
6642 & (fac_shield(k).gt.0).and.(fac_shield(l).gt.0)) then
6643 do ilist=1,ishield_list(i)
6644 iresshield=shield_list(ilist,i)
6646 rlocshield=grad_shield_side(m,ilist,i)*ehbcorr/fac_shield(i)
6648 gshieldx_ec(m,iresshield)=gshieldx_ec(m,iresshield)+
6650 & +grad_shield_loc(m,ilist,i)*ehbcorr/fac_shield(i)
6651 gshieldc_ec(m,iresshield-1)=gshieldc_ec(m,iresshield-1)
6655 do ilist=1,ishield_list(j)
6656 iresshield=shield_list(ilist,j)
6658 rlocshield=grad_shield_side(m,ilist,j)*ehbcorr/fac_shield(j)
6660 gshieldx_ec(m,iresshield)=gshieldx_ec(m,iresshield)+
6662 & +grad_shield_loc(m,ilist,j)*ehbcorr/fac_shield(j)
6663 gshieldc_ec(m,iresshield-1)=gshieldc_ec(m,iresshield-1)
6668 do ilist=1,ishield_list(k)
6669 iresshield=shield_list(ilist,k)
6671 rlocshield=grad_shield_side(m,ilist,k)*ehbcorr/fac_shield(k)
6673 gshieldx_ec(m,iresshield)=gshieldx_ec(m,iresshield)+
6675 & +grad_shield_loc(m,ilist,k)*ehbcorr/fac_shield(k)
6676 gshieldc_ec(m,iresshield-1)=gshieldc_ec(m,iresshield-1)
6680 do ilist=1,ishield_list(l)
6681 iresshield=shield_list(ilist,l)
6683 rlocshield=grad_shield_side(m,ilist,l)*ehbcorr/fac_shield(l)
6685 gshieldx_ec(m,iresshield)=gshieldx_ec(m,iresshield)+
6687 & +grad_shield_loc(m,ilist,l)*ehbcorr/fac_shield(l)
6688 gshieldc_ec(m,iresshield-1)=gshieldc_ec(m,iresshield-1)
6692 C print *,gshieldx(m,iresshield)
6694 gshieldc_ec(m,i)=gshieldc_ec(m,i)+
6695 & grad_shield(m,i)*ehbcorr/fac_shield(i)
6696 gshieldc_ec(m,j)=gshieldc_ec(m,j)+
6697 & grad_shield(m,j)*ehbcorr/fac_shield(j)
6698 gshieldc_ec(m,i-1)=gshieldc_ec(m,i-1)+
6699 & grad_shield(m,i)*ehbcorr/fac_shield(i)
6700 gshieldc_ec(m,j-1)=gshieldc_ec(m,j-1)+
6701 & grad_shield(m,j)*ehbcorr/fac_shield(j)
6703 gshieldc_ec(m,k)=gshieldc_ec(m,k)+
6704 & grad_shield(m,k)*ehbcorr/fac_shield(k)
6705 gshieldc_ec(m,l)=gshieldc_ec(m,l)+
6706 & grad_shield(m,l)*ehbcorr/fac_shield(l)
6707 gshieldc_ec(m,k-1)=gshieldc_ec(m,k-1)+
6708 & grad_shield(m,k)*ehbcorr/fac_shield(k)
6709 gshieldc_ec(m,l-1)=gshieldc_ec(m,l-1)+
6710 & grad_shield(m,l)*ehbcorr/fac_shield(l)
6718 C---------------------------------------------------------------------------
6719 subroutine dipole(i,j,jj)
6720 implicit real*8 (a-h,o-z)
6721 include 'DIMENSIONS'
6722 include 'DIMENSIONS.ZSCOPT'
6723 include 'COMMON.IOUNITS'
6724 include 'COMMON.CHAIN'
6725 include 'COMMON.FFIELD'
6726 include 'COMMON.DERIV'
6727 include 'COMMON.INTERACT'
6728 include 'COMMON.CONTACTS'
6729 include 'COMMON.TORSION'
6730 include 'COMMON.VAR'
6731 include 'COMMON.GEO'
6732 dimension dipi(2,2),dipj(2,2),dipderi(2),dipderj(2),auxvec(2),
6734 iti1 = itortyp(itype(i+1))
6735 if (j.lt.nres-1) then
6736 itj1 = itype2loc(itype(j+1))
6741 dipi(iii,1)=Ub2(iii,i)
6742 dipderi(iii)=Ub2der(iii,i)
6743 dipi(iii,2)=b1(iii,i+1)
6744 dipj(iii,1)=Ub2(iii,j)
6745 dipderj(iii)=Ub2der(iii,j)
6746 dipj(iii,2)=b1(iii,j+1)
6750 call matvec2(a_chuj(1,1,jj,i),dipj(1,iii),auxvec(1))
6753 dip(kkk,jj,i)=scalar2(dipi(1,jjj),auxvec(1))
6760 call matvec2(a_chuj_der(1,1,lll,kkk,jj,i),dipj(1,iii),
6764 dipderx(lll,kkk,mmm,jj,i)=scalar2(dipi(1,jjj),auxvec(1))
6769 call transpose2(a_chuj(1,1,jj,i),auxmat(1,1))
6770 call matvec2(auxmat(1,1),dipderi(1),auxvec(1))
6772 dipderg(iii,jj,i)=scalar2(auxvec(1),dipj(1,iii))
6774 call matvec2(a_chuj(1,1,jj,i),dipderj(1),auxvec(1))
6776 dipderg(iii+2,jj,i)=scalar2(auxvec(1),dipi(1,iii))
6781 C---------------------------------------------------------------------------
6782 subroutine calc_eello(i,j,k,l,jj,kk)
6784 C This subroutine computes matrices and vectors needed to calculate
6785 C the fourth-, fifth-, and sixth-order local-electrostatic terms.
6787 implicit real*8 (a-h,o-z)
6788 include 'DIMENSIONS'
6789 include 'DIMENSIONS.ZSCOPT'
6790 include 'COMMON.IOUNITS'
6791 include 'COMMON.CHAIN'
6792 include 'COMMON.DERIV'
6793 include 'COMMON.INTERACT'
6794 include 'COMMON.CONTACTS'
6795 include 'COMMON.TORSION'
6796 include 'COMMON.VAR'
6797 include 'COMMON.GEO'
6798 include 'COMMON.FFIELD'
6799 double precision aa1(2,2),aa2(2,2),aa1t(2,2),aa2t(2,2),
6800 & aa1tder(2,2,3,5),aa2tder(2,2,3,5),auxmat(2,2)
6803 cd write (iout,*) 'calc_eello: i=',i,' j=',j,' k=',k,' l=',l,
6804 cd & ' jj=',jj,' kk=',kk
6805 cd if (i.ne.2 .or. j.ne.4 .or. k.ne.3 .or. l.ne.5) return
6806 cd write (iout,*) "a_chujij",((a_chuj(iii,jjj,jj,i),iii=1,2),jjj=1,2)
6807 cd write (iout,*) "a_chujkl",((a_chuj(iii,jjj,kk,k),iii=1,2),jjj=1,2)
6810 aa1(iii,jjj)=a_chuj(iii,jjj,jj,i)
6811 aa2(iii,jjj)=a_chuj(iii,jjj,kk,k)
6814 call transpose2(aa1(1,1),aa1t(1,1))
6815 call transpose2(aa2(1,1),aa2t(1,1))
6818 call transpose2(a_chuj_der(1,1,lll,kkk,jj,i),
6819 & aa1tder(1,1,lll,kkk))
6820 call transpose2(a_chuj_der(1,1,lll,kkk,kk,k),
6821 & aa2tder(1,1,lll,kkk))
6825 C parallel orientation of the two CA-CA-CA frames.
6827 iti=itype2loc(itype(i))
6831 itk1=itype2loc(itype(k+1))
6832 itj=itype2loc(itype(j))
6833 if (l.lt.nres-1) then
6834 itl1=itype2loc(itype(l+1))
6838 C A1 kernel(j+1) A2T
6840 cd write (iout,'(3f10.5,5x,3f10.5)')
6841 cd & (EUg(iii,jjj,k),jjj=1,2),(EUg(iii,jjj,l),jjj=1,2)
6843 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
6844 & aa2tder(1,1,1,1),1,.false.,EUg(1,1,l),EUgder(1,1,l),
6845 & AEA(1,1,1),AEAderg(1,1,1),AEAderx(1,1,1,1,1,1))
6846 C Following matrices are needed only for 6-th order cumulants
6847 IF (wcorr6.gt.0.0d0) THEN
6848 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
6849 & aa2tder(1,1,1,1),1,.false.,EUgC(1,1,l),EUgCder(1,1,l),
6850 & AECA(1,1,1),AECAderg(1,1,1),AECAderx(1,1,1,1,1,1))
6851 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
6852 & aa2tder(1,1,1,1),2,.false.,Ug2DtEUg(1,1,l),
6853 & Ug2DtEUgder(1,1,1,l),ADtEA(1,1,1),ADtEAderg(1,1,1,1),
6854 & ADtEAderx(1,1,1,1,1,1))
6856 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
6857 & aa2tder(1,1,1,1),2,.false.,DtUg2EUg(1,1,l),
6858 & DtUg2EUgder(1,1,1,l),ADtEA1(1,1,1),ADtEA1derg(1,1,1,1),
6859 & ADtEA1derx(1,1,1,1,1,1))
6861 C End 6-th order cumulants
6864 cd write (2,*) 'In calc_eello6'
6866 cd write (2,*) 'iii=',iii
6868 cd write (2,*) 'kkk=',kkk
6870 cd write (2,'(3(2f10.5),5x)')
6871 cd & ((ADtEA1derx(jjj,mmm,lll,kkk,iii,1),mmm=1,2),lll=1,3)
6876 call transpose2(EUgder(1,1,k),auxmat(1,1))
6877 call matmat2(auxmat(1,1),AEA(1,1,1),EAEAderg(1,1,1,1))
6878 call transpose2(EUg(1,1,k),auxmat(1,1))
6879 call matmat2(auxmat(1,1),AEA(1,1,1),EAEA(1,1,1))
6880 call matmat2(auxmat(1,1),AEAderg(1,1,1),EAEAderg(1,1,2,1))
6884 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,1),
6885 & EAEAderx(1,1,lll,kkk,iii,1))
6889 C A1T kernel(i+1) A2
6890 call kernel(aa1t(1,1),aa2(1,1),aa1tder(1,1,1,1),
6891 & a_chuj_der(1,1,1,1,kk,k),1,.false.,EUg(1,1,k),EUgder(1,1,k),
6892 & AEA(1,1,2),AEAderg(1,1,2),AEAderx(1,1,1,1,1,2))
6893 C Following matrices are needed only for 6-th order cumulants
6894 IF (wcorr6.gt.0.0d0) THEN
6895 call kernel(aa1t(1,1),aa2(1,1),aa1tder(1,1,1,1),
6896 & a_chuj_der(1,1,1,1,kk,k),1,.false.,EUgC(1,1,k),EUgCder(1,1,k),
6897 & AECA(1,1,2),AECAderg(1,1,2),AECAderx(1,1,1,1,1,2))
6898 call kernel(aa1t(1,1),aa2(1,1),aa1tder(1,1,1,1),
6899 & a_chuj_der(1,1,1,1,kk,k),2,.false.,Ug2DtEUg(1,1,k),
6900 & Ug2DtEUgder(1,1,1,k),ADtEA(1,1,2),ADtEAderg(1,1,1,2),
6901 & ADtEAderx(1,1,1,1,1,2))
6902 call kernel(aa1t(1,1),aa2(1,1),aa1tder(1,1,1,1),
6903 & a_chuj_der(1,1,1,1,kk,k),2,.false.,DtUg2EUg(1,1,k),
6904 & DtUg2EUgder(1,1,1,k),ADtEA1(1,1,2),ADtEA1derg(1,1,1,2),
6905 & ADtEA1derx(1,1,1,1,1,2))
6907 C End 6-th order cumulants
6908 call transpose2(EUgder(1,1,l),auxmat(1,1))
6909 call matmat2(auxmat(1,1),AEA(1,1,2),EAEAderg(1,1,1,2))
6910 call transpose2(EUg(1,1,l),auxmat(1,1))
6911 call matmat2(auxmat(1,1),AEA(1,1,2),EAEA(1,1,2))
6912 call matmat2(auxmat(1,1),AEAderg(1,1,2),EAEAderg(1,1,2,2))
6916 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,2),
6917 & EAEAderx(1,1,lll,kkk,iii,2))
6922 C Calculate the vectors and their derivatives in virtual-bond dihedral angles.
6923 C They are needed only when the fifth- or the sixth-order cumulants are
6925 IF (wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0) THEN
6926 call transpose2(AEA(1,1,1),auxmat(1,1))
6927 call matvec2(auxmat(1,1),b1(1,i),AEAb1(1,1,1))
6928 call matvec2(auxmat(1,1),Ub2(1,i),AEAb2(1,1,1))
6929 call matvec2(auxmat(1,1),Ub2der(1,i),AEAb2derg(1,2,1,1))
6930 call transpose2(AEAderg(1,1,1),auxmat(1,1))
6931 call matvec2(auxmat(1,1),b1(1,i),AEAb1derg(1,1,1))
6932 call matvec2(auxmat(1,1),Ub2(1,i),AEAb2derg(1,1,1,1))
6933 call matvec2(AEA(1,1,1),b1(1,k+1),AEAb1(1,2,1))
6934 call matvec2(AEAderg(1,1,1),b1(1,k+1),AEAb1derg(1,2,1))
6935 call matvec2(AEA(1,1,1),Ub2(1,k+1),AEAb2(1,2,1))
6936 call matvec2(AEAderg(1,1,1),Ub2(1,k+1),AEAb2derg(1,1,2,1))
6937 call matvec2(AEA(1,1,1),Ub2der(1,k+1),AEAb2derg(1,2,2,1))
6938 call transpose2(AEA(1,1,2),auxmat(1,1))
6939 call matvec2(auxmat(1,1),b1(1,j),AEAb1(1,1,2))
6940 call matvec2(auxmat(1,1),Ub2(1,j),AEAb2(1,1,2))
6941 call matvec2(auxmat(1,1),Ub2der(1,j),AEAb2derg(1,2,1,2))
6942 call transpose2(AEAderg(1,1,2),auxmat(1,1))
6943 call matvec2(auxmat(1,1),b1(1,j),AEAb1derg(1,1,2))
6944 call matvec2(auxmat(1,1),Ub2(1,j),AEAb2derg(1,1,1,2))
6945 call matvec2(AEA(1,1,2),b1(1,l+1),AEAb1(1,2,2))
6946 call matvec2(AEAderg(1,1,2),b1(1,l+1),AEAb1derg(1,2,2))
6947 call matvec2(AEA(1,1,2),Ub2(1,l+1),AEAb2(1,2,2))
6948 call matvec2(AEAderg(1,1,2),Ub2(1,l+1),AEAb2derg(1,1,2,2))
6949 call matvec2(AEA(1,1,2),Ub2der(1,l+1),AEAb2derg(1,2,2,2))
6950 C Calculate the Cartesian derivatives of the vectors.
6954 call transpose2(AEAderx(1,1,lll,kkk,iii,1),auxmat(1,1))
6955 call matvec2(auxmat(1,1),b1(1,i),
6956 & AEAb1derx(1,lll,kkk,iii,1,1))
6957 call matvec2(auxmat(1,1),Ub2(1,i),
6958 & AEAb2derx(1,lll,kkk,iii,1,1))
6959 call matvec2(AEAderx(1,1,lll,kkk,iii,1),b1(1,k+1),
6960 & AEAb1derx(1,lll,kkk,iii,2,1))
6961 call matvec2(AEAderx(1,1,lll,kkk,iii,1),Ub2(1,k+1),
6962 & AEAb2derx(1,lll,kkk,iii,2,1))
6963 call transpose2(AEAderx(1,1,lll,kkk,iii,2),auxmat(1,1))
6964 call matvec2(auxmat(1,1),b1(1,j),
6965 & AEAb1derx(1,lll,kkk,iii,1,2))
6966 call matvec2(auxmat(1,1),Ub2(1,j),
6967 & AEAb2derx(1,lll,kkk,iii,1,2))
6968 call matvec2(AEAderx(1,1,lll,kkk,iii,2),b1(1,l+1),
6969 & AEAb1derx(1,lll,kkk,iii,2,2))
6970 call matvec2(AEAderx(1,1,lll,kkk,iii,2),Ub2(1,l+1),
6971 & AEAb2derx(1,lll,kkk,iii,2,2))
6978 C Antiparallel orientation of the two CA-CA-CA frames.
6980 iti=itype2loc(itype(i))
6984 itk1=itype2loc(itype(k+1))
6985 itl=itype2loc(itype(l))
6986 itj=itype2loc(itype(j))
6987 if (j.lt.nres-1) then
6988 itj1=itype2loc(itype(j+1))
6992 C A2 kernel(j-1)T A1T
6993 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
6994 & aa2tder(1,1,1,1),1,.true.,EUg(1,1,j),EUgder(1,1,j),
6995 & AEA(1,1,1),AEAderg(1,1,1),AEAderx(1,1,1,1,1,1))
6996 C Following matrices are needed only for 6-th order cumulants
6997 IF (wcorr6.gt.0.0d0 .or. (wturn6.gt.0.0d0 .and.
6998 & j.eq.i+4 .and. l.eq.i+3)) THEN
6999 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
7000 & aa2tder(1,1,1,1),1,.true.,EUgC(1,1,j),EUgCder(1,1,j),
7001 & AECA(1,1,1),AECAderg(1,1,1),AECAderx(1,1,1,1,1,1))
7002 call kernel(aa2(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
7003 & aa2tder(1,1,1,1),2,.true.,Ug2DtEUg(1,1,j),
7004 & Ug2DtEUgder(1,1,1,j),ADtEA(1,1,1),ADtEAderg(1,1,1,1),
7005 & ADtEAderx(1,1,1,1,1,1))
7006 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
7007 & aa2tder(1,1,1,1),2,.true.,DtUg2EUg(1,1,j),
7008 & DtUg2EUgder(1,1,1,j),ADtEA1(1,1,1),ADtEA1derg(1,1,1,1),
7009 & ADtEA1derx(1,1,1,1,1,1))
7011 C End 6-th order cumulants
7012 call transpose2(EUgder(1,1,k),auxmat(1,1))
7013 call matmat2(auxmat(1,1),AEA(1,1,1),EAEAderg(1,1,1,1))
7014 call transpose2(EUg(1,1,k),auxmat(1,1))
7015 call matmat2(auxmat(1,1),AEA(1,1,1),EAEA(1,1,1))
7016 call matmat2(auxmat(1,1),AEAderg(1,1,1),EAEAderg(1,1,2,1))
7020 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,1),
7021 & EAEAderx(1,1,lll,kkk,iii,1))
7025 C A2T kernel(i+1)T A1
7026 call kernel(aa2t(1,1),aa1(1,1),aa2tder(1,1,1,1),
7027 & a_chuj_der(1,1,1,1,jj,i),1,.true.,EUg(1,1,k),EUgder(1,1,k),
7028 & AEA(1,1,2),AEAderg(1,1,2),AEAderx(1,1,1,1,1,2))
7029 C Following matrices are needed only for 6-th order cumulants
7030 IF (wcorr6.gt.0.0d0 .or. (wturn6.gt.0.0d0 .and.
7031 & j.eq.i+4 .and. l.eq.i+3)) THEN
7032 call kernel(aa2t(1,1),aa1(1,1),aa2tder(1,1,1,1),
7033 & a_chuj_der(1,1,1,1,jj,i),1,.true.,EUgC(1,1,k),EUgCder(1,1,k),
7034 & AECA(1,1,2),AECAderg(1,1,2),AECAderx(1,1,1,1,1,2))
7035 call kernel(aa2t(1,1),aa1(1,1),aa2tder(1,1,1,1),
7036 & a_chuj_der(1,1,1,1,jj,i),2,.true.,Ug2DtEUg(1,1,k),
7037 & Ug2DtEUgder(1,1,1,k),ADtEA(1,1,2),ADtEAderg(1,1,1,2),
7038 & ADtEAderx(1,1,1,1,1,2))
7039 call kernel(aa2t(1,1),aa1(1,1),aa2tder(1,1,1,1),
7040 & a_chuj_der(1,1,1,1,jj,i),2,.true.,DtUg2EUg(1,1,k),
7041 & DtUg2EUgder(1,1,1,k),ADtEA1(1,1,2),ADtEA1derg(1,1,1,2),
7042 & ADtEA1derx(1,1,1,1,1,2))
7044 C End 6-th order cumulants
7045 call transpose2(EUgder(1,1,j),auxmat(1,1))
7046 call matmat2(auxmat(1,1),AEA(1,1,1),EAEAderg(1,1,2,2))
7047 call transpose2(EUg(1,1,j),auxmat(1,1))
7048 call matmat2(auxmat(1,1),AEA(1,1,2),EAEA(1,1,2))
7049 call matmat2(auxmat(1,1),AEAderg(1,1,2),EAEAderg(1,1,2,2))
7053 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,2),
7054 & EAEAderx(1,1,lll,kkk,iii,2))
7059 C Calculate the vectors and their derivatives in virtual-bond dihedral angles.
7060 C They are needed only when the fifth- or the sixth-order cumulants are
7062 IF (wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0 .or.
7063 & (wturn6.gt.0.0d0 .and. j.eq.i+4 .and. l.eq.i+3)) THEN
7064 call transpose2(AEA(1,1,1),auxmat(1,1))
7065 call matvec2(auxmat(1,1),b1(1,i),AEAb1(1,1,1))
7066 call matvec2(auxmat(1,1),Ub2(1,i),AEAb2(1,1,1))
7067 call matvec2(auxmat(1,1),Ub2der(1,i),AEAb2derg(1,2,1,1))
7068 call transpose2(AEAderg(1,1,1),auxmat(1,1))
7069 call matvec2(auxmat(1,1),b1(1,i),AEAb1derg(1,1,1))
7070 call matvec2(auxmat(1,1),Ub2(1,i),AEAb2derg(1,1,1,1))
7071 call matvec2(AEA(1,1,1),b1(1,k+1),AEAb1(1,2,1))
7072 call matvec2(AEAderg(1,1,1),b1(1,k+1),AEAb1derg(1,2,1))
7073 call matvec2(AEA(1,1,1),Ub2(1,k+1),AEAb2(1,2,1))
7074 call matvec2(AEAderg(1,1,1),Ub2(1,k+1),AEAb2derg(1,1,2,1))
7075 call matvec2(AEA(1,1,1),Ub2der(1,k+1),AEAb2derg(1,2,2,1))
7076 call transpose2(AEA(1,1,2),auxmat(1,1))
7077 call matvec2(auxmat(1,1),b1(1,j+1),AEAb1(1,1,2))
7078 call matvec2(auxmat(1,1),Ub2(1,l),AEAb2(1,1,2))
7079 call matvec2(auxmat(1,1),Ub2der(1,l),AEAb2derg(1,2,1,2))
7080 call transpose2(AEAderg(1,1,2),auxmat(1,1))
7081 call matvec2(auxmat(1,1),b1(1,l),AEAb1(1,1,2))
7082 call matvec2(auxmat(1,1),Ub2(1,l),AEAb2derg(1,1,1,2))
7083 call matvec2(AEA(1,1,2),b1(1,j+1),AEAb1(1,2,2))
7084 call matvec2(AEAderg(1,1,2),b1(1,j+1),AEAb1derg(1,2,2))
7085 call matvec2(AEA(1,1,2),Ub2(1,j),AEAb2(1,2,2))
7086 call matvec2(AEAderg(1,1,2),Ub2(1,j),AEAb2derg(1,1,2,2))
7087 call matvec2(AEA(1,1,2),Ub2der(1,j),AEAb2derg(1,2,2,2))
7088 C Calculate the Cartesian derivatives of the vectors.
7092 call transpose2(AEAderx(1,1,lll,kkk,iii,1),auxmat(1,1))
7093 call matvec2(auxmat(1,1),b1(1,i),
7094 & AEAb1derx(1,lll,kkk,iii,1,1))
7095 call matvec2(auxmat(1,1),Ub2(1,i),
7096 & AEAb2derx(1,lll,kkk,iii,1,1))
7097 call matvec2(AEAderx(1,1,lll,kkk,iii,1),b1(1,k+1),
7098 & AEAb1derx(1,lll,kkk,iii,2,1))
7099 call matvec2(AEAderx(1,1,lll,kkk,iii,1),Ub2(1,k+1),
7100 & AEAb2derx(1,lll,kkk,iii,2,1))
7101 call transpose2(AEAderx(1,1,lll,kkk,iii,2),auxmat(1,1))
7102 call matvec2(auxmat(1,1),b1(1,l),
7103 & AEAb1derx(1,lll,kkk,iii,1,2))
7104 call matvec2(auxmat(1,1),Ub2(1,l),
7105 & AEAb2derx(1,lll,kkk,iii,1,2))
7106 call matvec2(AEAderx(1,1,lll,kkk,iii,2),b1(1,j+1),
7107 & AEAb1derx(1,lll,kkk,iii,2,2))
7108 call matvec2(AEAderx(1,1,lll,kkk,iii,2),Ub2(1,j),
7109 & AEAb2derx(1,lll,kkk,iii,2,2))
7118 C---------------------------------------------------------------------------
7119 subroutine kernel(aa1,aa2t,aa1derx,aa2tderx,nderg,transp,
7120 & KK,KKderg,AKA,AKAderg,AKAderx)
7124 double precision aa1(2,2),aa2t(2,2),aa1derx(2,2,3,5),
7125 & aa2tderx(2,2,3,5),KK(2,2),KKderg(2,2,nderg),AKA(2,2),
7126 & AKAderg(2,2,nderg),AKAderx(2,2,3,5,2)
7131 call prodmat3(aa1(1,1),aa2t(1,1),KK(1,1),transp,AKA(1,1))
7133 call prodmat3(aa1(1,1),aa2t(1,1),KKderg(1,1,iii),transp,
7136 cd if (lprn) write (2,*) 'In kernel'
7138 cd if (lprn) write (2,*) 'kkk=',kkk
7140 call prodmat3(aa1derx(1,1,lll,kkk),aa2t(1,1),
7141 & KK(1,1),transp,AKAderx(1,1,lll,kkk,1))
7143 cd write (2,*) 'lll=',lll
7144 cd write (2,*) 'iii=1'
7146 cd write (2,'(3(2f10.5),5x)')
7147 cd & (AKAderx(jjj,mmm,lll,kkk,1),mmm=1,2)
7150 call prodmat3(aa1(1,1),aa2tderx(1,1,lll,kkk),
7151 & KK(1,1),transp,AKAderx(1,1,lll,kkk,2))
7153 cd write (2,*) 'lll=',lll
7154 cd write (2,*) 'iii=2'
7156 cd write (2,'(3(2f10.5),5x)')
7157 cd & (AKAderx(jjj,mmm,lll,kkk,2),mmm=1,2)
7164 C---------------------------------------------------------------------------
7165 double precision function eello4(i,j,k,l,jj,kk)
7166 implicit real*8 (a-h,o-z)
7167 include 'DIMENSIONS'
7168 include 'DIMENSIONS.ZSCOPT'
7169 include 'COMMON.IOUNITS'
7170 include 'COMMON.CHAIN'
7171 include 'COMMON.DERIV'
7172 include 'COMMON.INTERACT'
7173 include 'COMMON.CONTACTS'
7174 include 'COMMON.TORSION'
7175 include 'COMMON.VAR'
7176 include 'COMMON.GEO'
7177 double precision pizda(2,2),ggg1(3),ggg2(3)
7178 cd if (i.ne.1 .or. j.ne.5 .or. k.ne.2 .or.l.ne.4) then
7182 cd print *,'eello4:',i,j,k,l,jj,kk
7183 cd write (2,*) 'i',i,' j',j,' k',k,' l',l
7184 cd call checkint4(i,j,k,l,jj,kk,eel4_num)
7185 cold eij=facont_hb(jj,i)
7186 cold ekl=facont_hb(kk,k)
7188 eel4=-EAEA(1,1,1)-EAEA(2,2,1)
7190 cd eel41=-EAEA(1,1,2)-EAEA(2,2,2)
7191 gcorr_loc(k-1)=gcorr_loc(k-1)
7192 & -ekont*(EAEAderg(1,1,1,1)+EAEAderg(2,2,1,1))
7194 gcorr_loc(l-1)=gcorr_loc(l-1)
7195 & -ekont*(EAEAderg(1,1,2,1)+EAEAderg(2,2,2,1))
7197 gcorr_loc(j-1)=gcorr_loc(j-1)
7198 & -ekont*(EAEAderg(1,1,2,1)+EAEAderg(2,2,2,1))
7203 derx(lll,kkk,iii)=-EAEAderx(1,1,lll,kkk,iii,1)
7204 & -EAEAderx(2,2,lll,kkk,iii,1)
7205 cd derx(lll,kkk,iii)=0.0d0
7209 cd gcorr_loc(l-1)=0.0d0
7210 cd gcorr_loc(j-1)=0.0d0
7211 cd gcorr_loc(k-1)=0.0d0
7213 cd write (iout,*)'Contacts have occurred for peptide groups',
7214 cd & i,j,' fcont:',eij,' eij',' and ',k,l,
7215 cd & ' fcont ',ekl,' eel4=',eel4,' eel4_num',16*eel4_num
7216 if (j.lt.nres-1) then
7223 if (l.lt.nres-1) then
7231 cgrad ggg1(ll)=eel4*g_contij(ll,1)
7232 cgrad ggg2(ll)=eel4*g_contij(ll,2)
7233 glongij=eel4*g_contij(ll,1)+ekont*derx(ll,1,1)
7234 glongkl=eel4*g_contij(ll,2)+ekont*derx(ll,1,2)
7235 cgrad ghalf=0.5d0*ggg1(ll)
7236 gradcorr(ll,i)=gradcorr(ll,i)+ekont*derx(ll,2,1)
7237 gradcorr(ll,i+1)=gradcorr(ll,i+1)+ekont*derx(ll,3,1)
7238 gradcorr(ll,j)=gradcorr(ll,j)+ekont*derx(ll,4,1)
7239 gradcorr(ll,j1)=gradcorr(ll,j1)+ekont*derx(ll,5,1)
7240 gradcorr_long(ll,j)=gradcorr_long(ll,j)+glongij
7241 gradcorr_long(ll,i)=gradcorr_long(ll,i)-glongij
7242 cgrad ghalf=0.5d0*ggg2(ll)
7243 gradcorr(ll,k)=gradcorr(ll,k)+ekont*derx(ll,2,2)
7244 gradcorr(ll,k+1)=gradcorr(ll,k+1)+ekont*derx(ll,3,2)
7245 gradcorr(ll,l)=gradcorr(ll,l)+ekont*derx(ll,4,2)
7246 gradcorr(ll,l1)=gradcorr(ll,l1)+ekont*derx(ll,5,2)
7247 gradcorr_long(ll,l)=gradcorr_long(ll,l)+glongkl
7248 gradcorr_long(ll,k)=gradcorr_long(ll,k)-glongkl
7252 cgrad gradcorr(ll,m)=gradcorr(ll,m)+ggg1(ll)
7257 cgrad gradcorr(ll,m)=gradcorr(ll,m)+ggg2(ll)
7262 cgrad gradcorr(ll,m)=gradcorr(ll,m)+ekont*derx(ll,1,1)
7267 cgrad gradcorr(ll,m)=gradcorr(ll,m)+ekont*derx(ll,1,2)
7271 cd write (2,*) iii,gcorr_loc(iii)
7275 cd write (2,*) 'ekont',ekont
7276 cd write (iout,*) 'eello4',ekont*eel4
7279 C---------------------------------------------------------------------------
7280 double precision function eello5(i,j,k,l,jj,kk)
7281 implicit real*8 (a-h,o-z)
7282 include 'DIMENSIONS'
7283 include 'DIMENSIONS.ZSCOPT'
7284 include 'COMMON.IOUNITS'
7285 include 'COMMON.CHAIN'
7286 include 'COMMON.DERIV'
7287 include 'COMMON.INTERACT'
7288 include 'COMMON.CONTACTS'
7289 include 'COMMON.TORSION'
7290 include 'COMMON.VAR'
7291 include 'COMMON.GEO'
7292 double precision pizda(2,2),auxmat(2,2),auxmat1(2,2),vv(2)
7293 double precision ggg1(3),ggg2(3)
7294 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
7299 C /l\ / \ \ / \ / \ / C
7300 C / \ / \ \ / \ / \ / C
7301 C j| o |l1 | o | o| o | | o |o C
7302 C \ |/k\| |/ \| / |/ \| |/ \| C
7303 C \i/ \ / \ / / \ / \ C
7305 C (I) (II) (III) (IV) C
7307 C eello5_1 eello5_2 eello5_3 eello5_4 C
7309 C Antiparallel chains C
7312 C /j\ / \ \ / \ / \ / C
7313 C / \ / \ \ / \ / \ / C
7314 C j1| o |l | o | o| o | | o |o C
7315 C \ |/k\| |/ \| / |/ \| |/ \| C
7316 C \i/ \ / \ / / \ / \ C
7318 C (I) (II) (III) (IV) C
7320 C eello5_1 eello5_2 eello5_3 eello5_4 C
7322 C o denotes a local interaction, vertical lines an electrostatic interaction. C
7324 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
7325 cd if (i.ne.2 .or. j.ne.6 .or. k.ne.3 .or. l.ne.5) then
7330 cd & 'EELLO5: Contacts have occurred for peptide groups',i,j,
7332 itk=itype2loc(itype(k))
7333 itl=itype2loc(itype(l))
7334 itj=itype2loc(itype(j))
7339 cd call checkint5(i,j,k,l,jj,kk,eel5_1_num,eel5_2_num,
7340 cd & eel5_3_num,eel5_4_num)
7344 derx(lll,kkk,iii)=0.0d0
7348 cd eij=facont_hb(jj,i)
7349 cd ekl=facont_hb(kk,k)
7351 cd write (iout,*)'Contacts have occurred for peptide groups',
7352 cd & i,j,' fcont:',eij,' eij',' and ',k,l
7354 C Contribution from the graph I.
7355 cd write (2,*) 'AEA ',AEA(1,1,1),AEA(2,1,1),AEA(1,2,1),AEA(2,2,1)
7356 cd write (2,*) 'AEAb2',AEAb2(1,1,1),AEAb2(2,1,1)
7357 call transpose2(EUg(1,1,k),auxmat(1,1))
7358 call matmat2(AEA(1,1,1),auxmat(1,1),pizda(1,1))
7359 vv(1)=pizda(1,1)-pizda(2,2)
7360 vv(2)=pizda(1,2)+pizda(2,1)
7361 eello5_1=scalar2(AEAb2(1,1,1),Ub2(1,k))
7362 & +0.5d0*scalar2(vv(1),Dtobr2(1,i))
7364 C Explicit gradient in virtual-dihedral angles.
7365 if (i.gt.1) g_corr5_loc(i-1)=g_corr5_loc(i-1)
7366 & +ekont*(scalar2(AEAb2derg(1,2,1,1),Ub2(1,k))
7367 & +0.5d0*scalar2(vv(1),Dtobr2der(1,i)))
7368 call transpose2(EUgder(1,1,k),auxmat1(1,1))
7369 call matmat2(AEA(1,1,1),auxmat1(1,1),pizda(1,1))
7370 vv(1)=pizda(1,1)-pizda(2,2)
7371 vv(2)=pizda(1,2)+pizda(2,1)
7372 g_corr5_loc(k-1)=g_corr5_loc(k-1)
7373 & +ekont*(scalar2(AEAb2(1,1,1),Ub2der(1,k))
7374 & +0.5d0*scalar2(vv(1),Dtobr2(1,i)))
7375 call matmat2(AEAderg(1,1,1),auxmat(1,1),pizda(1,1))
7376 vv(1)=pizda(1,1)-pizda(2,2)
7377 vv(2)=pizda(1,2)+pizda(2,1)
7379 if (l.lt.nres-1) g_corr5_loc(l-1)=g_corr5_loc(l-1)
7380 & +ekont*(scalar2(AEAb2derg(1,1,1,1),Ub2(1,k))
7381 & +0.5d0*scalar2(vv(1),Dtobr2(1,i)))
7383 if (j.lt.nres-1) g_corr5_loc(j-1)=g_corr5_loc(j-1)
7384 & +ekont*(scalar2(AEAb2derg(1,1,1,1),Ub2(1,k))
7385 & +0.5d0*scalar2(vv(1),Dtobr2(1,i)))
7387 C Cartesian gradient
7391 call matmat2(AEAderx(1,1,lll,kkk,iii,1),auxmat(1,1),
7393 vv(1)=pizda(1,1)-pizda(2,2)
7394 vv(2)=pizda(1,2)+pizda(2,1)
7395 derx(lll,kkk,iii)=derx(lll,kkk,iii)
7396 & +scalar2(AEAb2derx(1,lll,kkk,iii,1,1),Ub2(1,k))
7397 & +0.5d0*scalar2(vv(1),Dtobr2(1,i))
7404 C Contribution from graph II
7405 call transpose2(EE(1,1,k),auxmat(1,1))
7406 call matmat2(auxmat(1,1),AEA(1,1,1),pizda(1,1))
7407 vv(1)=pizda(1,1)+pizda(2,2)
7408 vv(2)=pizda(2,1)-pizda(1,2)
7409 eello5_2=scalar2(AEAb1(1,2,1),b1(1,k))
7410 & -0.5d0*scalar2(vv(1),Ctobr(1,k))
7412 C Explicit gradient in virtual-dihedral angles.
7413 g_corr5_loc(k-1)=g_corr5_loc(k-1)
7414 & -0.5d0*ekont*scalar2(vv(1),Ctobrder(1,k))
7415 call matmat2(auxmat(1,1),AEAderg(1,1,1),pizda(1,1))
7416 vv(1)=pizda(1,1)+pizda(2,2)
7417 vv(2)=pizda(2,1)-pizda(1,2)
7419 g_corr5_loc(l-1)=g_corr5_loc(l-1)
7420 & +ekont*(scalar2(AEAb1derg(1,2,1),b1(1,k))
7421 & -0.5d0*scalar2(vv(1),Ctobr(1,k)))
7423 g_corr5_loc(j-1)=g_corr5_loc(j-1)
7424 & +ekont*(scalar2(AEAb1derg(1,2,1),b1(1,k))
7425 & -0.5d0*scalar2(vv(1),Ctobr(1,k)))
7427 C Cartesian gradient
7431 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,1),
7433 vv(1)=pizda(1,1)+pizda(2,2)
7434 vv(2)=pizda(2,1)-pizda(1,2)
7435 derx(lll,kkk,iii)=derx(lll,kkk,iii)
7436 & +scalar2(AEAb1derx(1,lll,kkk,iii,2,1),b1(1,k))
7437 & -0.5d0*scalar2(vv(1),Ctobr(1,k))
7446 C Parallel orientation
7447 C Contribution from graph III
7448 call transpose2(EUg(1,1,l),auxmat(1,1))
7449 call matmat2(AEA(1,1,2),auxmat(1,1),pizda(1,1))
7450 vv(1)=pizda(1,1)-pizda(2,2)
7451 vv(2)=pizda(1,2)+pizda(2,1)
7452 eello5_3=scalar2(AEAb2(1,1,2),Ub2(1,l))
7453 & +0.5d0*scalar2(vv(1),Dtobr2(1,j))
7455 C Explicit gradient in virtual-dihedral angles.
7456 g_corr5_loc(j-1)=g_corr5_loc(j-1)
7457 & +ekont*(scalar2(AEAb2derg(1,2,1,2),Ub2(1,l))
7458 & +0.5d0*scalar2(vv(1),Dtobr2der(1,j)))
7459 call matmat2(AEAderg(1,1,2),auxmat(1,1),pizda(1,1))
7460 vv(1)=pizda(1,1)-pizda(2,2)
7461 vv(2)=pizda(1,2)+pizda(2,1)
7462 g_corr5_loc(k-1)=g_corr5_loc(k-1)
7463 & +ekont*(scalar2(AEAb2derg(1,1,1,2),Ub2(1,l))
7464 & +0.5d0*scalar2(vv(1),Dtobr2(1,j)))
7465 call transpose2(EUgder(1,1,l),auxmat1(1,1))
7466 call matmat2(AEA(1,1,2),auxmat1(1,1),pizda(1,1))
7467 vv(1)=pizda(1,1)-pizda(2,2)
7468 vv(2)=pizda(1,2)+pizda(2,1)
7469 g_corr5_loc(l-1)=g_corr5_loc(l-1)
7470 & +ekont*(scalar2(AEAb2(1,1,2),Ub2der(1,l))
7471 & +0.5d0*scalar2(vv(1),Dtobr2(1,j)))
7472 C Cartesian gradient
7476 call matmat2(AEAderx(1,1,lll,kkk,iii,2),auxmat(1,1),
7478 vv(1)=pizda(1,1)-pizda(2,2)
7479 vv(2)=pizda(1,2)+pizda(2,1)
7480 derx(lll,kkk,iii)=derx(lll,kkk,iii)
7481 & +scalar2(AEAb2derx(1,lll,kkk,iii,1,2),Ub2(1,l))
7482 & +0.5d0*scalar2(vv(1),Dtobr2(1,j))
7487 C Contribution from graph IV
7489 call transpose2(EE(1,1,l),auxmat(1,1))
7490 call matmat2(auxmat(1,1),AEA(1,1,2),pizda(1,1))
7491 vv(1)=pizda(1,1)+pizda(2,2)
7492 vv(2)=pizda(2,1)-pizda(1,2)
7493 eello5_4=scalar2(AEAb1(1,2,2),b1(1,l))
7494 & -0.5d0*scalar2(vv(1),Ctobr(1,l))
7495 C Explicit gradient in virtual-dihedral angles.
7496 g_corr5_loc(l-1)=g_corr5_loc(l-1)
7497 & -0.5d0*ekont*scalar2(vv(1),Ctobrder(1,l))
7498 call matmat2(auxmat(1,1),AEAderg(1,1,2),pizda(1,1))
7499 vv(1)=pizda(1,1)+pizda(2,2)
7500 vv(2)=pizda(2,1)-pizda(1,2)
7501 g_corr5_loc(k-1)=g_corr5_loc(k-1)
7502 & +ekont*(scalar2(AEAb1derg(1,2,2),b1(1,l))
7503 & -0.5d0*scalar2(vv(1),Ctobr(1,l)))
7504 C Cartesian gradient
7508 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,2),
7510 vv(1)=pizda(1,1)+pizda(2,2)
7511 vv(2)=pizda(2,1)-pizda(1,2)
7512 derx(lll,kkk,iii)=derx(lll,kkk,iii)
7513 & +scalar2(AEAb1derx(1,lll,kkk,iii,2,2),b1(1,l))
7514 & -0.5d0*scalar2(vv(1),Ctobr(1,l))
7520 C Antiparallel orientation
7521 C Contribution from graph III
7523 call transpose2(EUg(1,1,j),auxmat(1,1))
7524 call matmat2(AEA(1,1,2),auxmat(1,1),pizda(1,1))
7525 vv(1)=pizda(1,1)-pizda(2,2)
7526 vv(2)=pizda(1,2)+pizda(2,1)
7527 eello5_3=scalar2(AEAb2(1,1,2),Ub2(1,j))
7528 & +0.5d0*scalar2(vv(1),Dtobr2(1,l))
7530 C Explicit gradient in virtual-dihedral angles.
7531 g_corr5_loc(l-1)=g_corr5_loc(l-1)
7532 & +ekont*(scalar2(AEAb2derg(1,2,1,2),Ub2(1,j))
7533 & +0.5d0*scalar2(vv(1),Dtobr2der(1,l)))
7534 call matmat2(AEAderg(1,1,2),auxmat(1,1),pizda(1,1))
7535 vv(1)=pizda(1,1)-pizda(2,2)
7536 vv(2)=pizda(1,2)+pizda(2,1)
7537 g_corr5_loc(k-1)=g_corr5_loc(k-1)
7538 & +ekont*(scalar2(AEAb2derg(1,1,1,2),Ub2(1,j))
7539 & +0.5d0*scalar2(vv(1),Dtobr2(1,l)))
7540 call transpose2(EUgder(1,1,j),auxmat1(1,1))
7541 call matmat2(AEA(1,1,2),auxmat1(1,1),pizda(1,1))
7542 vv(1)=pizda(1,1)-pizda(2,2)
7543 vv(2)=pizda(1,2)+pizda(2,1)
7544 g_corr5_loc(j-1)=g_corr5_loc(j-1)
7545 & +ekont*(scalar2(AEAb2(1,1,2),Ub2der(1,j))
7546 & +0.5d0*scalar2(vv(1),Dtobr2(1,l)))
7547 C Cartesian gradient
7551 call matmat2(AEAderx(1,1,lll,kkk,iii,2),auxmat(1,1),
7553 vv(1)=pizda(1,1)-pizda(2,2)
7554 vv(2)=pizda(1,2)+pizda(2,1)
7555 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)
7556 & +scalar2(AEAb2derx(1,lll,kkk,iii,1,2),Ub2(1,j))
7557 & +0.5d0*scalar2(vv(1),Dtobr2(1,l))
7563 C Contribution from graph IV
7565 call transpose2(EE(1,1,j),auxmat(1,1))
7566 call matmat2(auxmat(1,1),AEA(1,1,2),pizda(1,1))
7567 vv(1)=pizda(1,1)+pizda(2,2)
7568 vv(2)=pizda(2,1)-pizda(1,2)
7569 eello5_4=scalar2(AEAb1(1,2,2),b1(1,j))
7570 & -0.5d0*scalar2(vv(1),Ctobr(1,j))
7572 C Explicit gradient in virtual-dihedral angles.
7573 g_corr5_loc(j-1)=g_corr5_loc(j-1)
7574 & -0.5d0*ekont*scalar2(vv(1),Ctobrder(1,j))
7575 call matmat2(auxmat(1,1),AEAderg(1,1,2),pizda(1,1))
7576 vv(1)=pizda(1,1)+pizda(2,2)
7577 vv(2)=pizda(2,1)-pizda(1,2)
7578 g_corr5_loc(k-1)=g_corr5_loc(k-1)
7579 & +ekont*(scalar2(AEAb1derg(1,2,2),b1(1,j))
7580 & -0.5d0*scalar2(vv(1),Ctobr(1,j)))
7581 C Cartesian gradient
7585 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,2),
7587 vv(1)=pizda(1,1)+pizda(2,2)
7588 vv(2)=pizda(2,1)-pizda(1,2)
7589 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)
7590 & +scalar2(AEAb1derx(1,lll,kkk,iii,2,2),b1(1,j))
7591 & -0.5d0*scalar2(vv(1),Ctobr(1,j))
7598 eel5=eello5_1+eello5_2+eello5_3+eello5_4
7599 cd if (i.eq.2 .and. j.eq.8 .and. k.eq.3 .and. l.eq.7) then
7600 cd write (2,*) 'ijkl',i,j,k,l
7601 cd write (2,*) 'eello5_1',eello5_1,' eello5_2',eello5_2,
7602 cd & ' eello5_3',eello5_3,' eello5_4',eello5_4
7604 cd write(iout,*) 'eello5_1',eello5_1,' eel5_1_num',16*eel5_1_num
7605 cd write(iout,*) 'eello5_2',eello5_2,' eel5_2_num',16*eel5_2_num
7606 cd write(iout,*) 'eello5_3',eello5_3,' eel5_3_num',16*eel5_3_num
7607 cd write(iout,*) 'eello5_4',eello5_4,' eel5_4_num',16*eel5_4_num
7609 if (j.lt.nres-1) then
7616 if (l.lt.nres-1) then
7626 cd write (2,*) 'eij',eij,' ekl',ekl,' ekont',ekont
7627 C 2/11/08 AL Gradients over DC's connecting interacting sites will be
7628 C summed up outside the subrouine as for the other subroutines
7629 C handling long-range interactions. The old code is commented out
7630 C with "cgrad" to keep track of changes.
7632 cgrad ggg1(ll)=eel5*g_contij(ll,1)
7633 cgrad ggg2(ll)=eel5*g_contij(ll,2)
7634 gradcorr5ij=eel5*g_contij(ll,1)+ekont*derx(ll,1,1)
7635 gradcorr5kl=eel5*g_contij(ll,2)+ekont*derx(ll,1,2)
7636 c write (iout,'(a,3i3,a,5f8.3,2i3,a,5f8.3,a,f8.3)')
7637 c & "ecorr5",ll,i,j," derx",derx(ll,2,1),derx(ll,3,1),derx(ll,4,1),
7638 c & derx(ll,5,1),k,l," derx",derx(ll,2,2),derx(ll,3,2),
7639 c & derx(ll,4,2),derx(ll,5,2)," ekont",ekont
7640 c write (iout,'(a,3i3,a,3f8.3,2i3,a,3f8.3)')
7641 c & "ecorr5",ll,i,j," gradcorr5",g_contij(ll,1),derx(ll,1,1),
7643 c & k,l," gradcorr5",g_contij(ll,2),derx(ll,1,2),gradcorr5kl
7644 cold ghalf=0.5d0*eel5*ekl*gacont_hbr(ll,jj,i)
7645 cgrad ghalf=0.5d0*ggg1(ll)
7647 gradcorr5(ll,i)=gradcorr5(ll,i)+ekont*derx(ll,2,1)
7648 gradcorr5(ll,i+1)=gradcorr5(ll,i+1)+ekont*derx(ll,3,1)
7649 gradcorr5(ll,j)=gradcorr5(ll,j)+ekont*derx(ll,4,1)
7650 gradcorr5(ll,j1)=gradcorr5(ll,j1)+ekont*derx(ll,5,1)
7651 gradcorr5_long(ll,j)=gradcorr5_long(ll,j)+gradcorr5ij
7652 gradcorr5_long(ll,i)=gradcorr5_long(ll,i)-gradcorr5ij
7653 cold ghalf=0.5d0*eel5*eij*gacont_hbr(ll,kk,k)
7654 cgrad ghalf=0.5d0*ggg2(ll)
7656 gradcorr5(ll,k)=gradcorr5(ll,k)+ekont*derx(ll,2,2)
7657 gradcorr5(ll,k+1)=gradcorr5(ll,k+1)+ekont*derx(ll,3,2)
7658 gradcorr5(ll,l)=gradcorr5(ll,l)+ekont*derx(ll,4,2)
7659 gradcorr5(ll,l1)=gradcorr5(ll,l1)+ekont*derx(ll,5,2)
7660 gradcorr5_long(ll,l)=gradcorr5_long(ll,l)+gradcorr5kl
7661 gradcorr5_long(ll,k)=gradcorr5_long(ll,k)-gradcorr5kl
7667 cold gradcorr5(ll,m)=gradcorr5(ll,m)+eel5*ekl*gacont_hbr(ll,jj,i)
7668 cgrad gradcorr5(ll,m)=gradcorr5(ll,m)+ggg1(ll)
7673 cold gradcorr5(ll,m)=gradcorr5(ll,m)+eel5*eij*gacont_hbr(ll,kk,k)
7674 cgrad gradcorr5(ll,m)=gradcorr5(ll,m)+ggg2(ll)
7680 cgrad gradcorr5(ll,m)=gradcorr5(ll,m)+ekont*derx(ll,1,1)
7685 cgrad gradcorr5(ll,m)=gradcorr5(ll,m)+ekont*derx(ll,1,2)
7689 cd write (2,*) iii,g_corr5_loc(iii)
7692 cd write (2,*) 'ekont',ekont
7693 cd write (iout,*) 'eello5',ekont*eel5
7696 c--------------------------------------------------------------------------
7697 double precision function eello6(i,j,k,l,jj,kk)
7698 implicit real*8 (a-h,o-z)
7699 include 'DIMENSIONS'
7700 include 'DIMENSIONS.ZSCOPT'
7701 include 'COMMON.IOUNITS'
7702 include 'COMMON.CHAIN'
7703 include 'COMMON.DERIV'
7704 include 'COMMON.INTERACT'
7705 include 'COMMON.CONTACTS'
7706 include 'COMMON.TORSION'
7707 include 'COMMON.VAR'
7708 include 'COMMON.GEO'
7709 include 'COMMON.FFIELD'
7710 double precision ggg1(3),ggg2(3)
7711 cd if (i.ne.1 .or. j.ne.3 .or. k.ne.2 .or. l.ne.4) then
7716 cd & 'EELLO6: Contacts have occurred for peptide groups',i,j,
7724 cd call checkint6(i,j,k,l,jj,kk,eel6_1_num,eel6_2_num,
7725 cd & eel6_3_num,eel6_4_num,eel6_5_num,eel6_6_num)
7729 derx(lll,kkk,iii)=0.0d0
7733 cd eij=facont_hb(jj,i)
7734 cd ekl=facont_hb(kk,k)
7740 eello6_1=eello6_graph1(i,j,k,l,1,.false.)
7741 eello6_2=eello6_graph1(j,i,l,k,2,.false.)
7742 eello6_3=eello6_graph2(i,j,k,l,jj,kk,.false.)
7743 eello6_4=eello6_graph4(i,j,k,l,jj,kk,1,.false.)
7744 eello6_5=eello6_graph4(j,i,l,k,jj,kk,2,.false.)
7745 eello6_6=eello6_graph3(i,j,k,l,jj,kk,.false.)
7747 eello6_1=eello6_graph1(i,j,k,l,1,.false.)
7748 eello6_2=eello6_graph1(l,k,j,i,2,.true.)
7749 eello6_3=eello6_graph2(i,l,k,j,jj,kk,.true.)
7750 eello6_4=eello6_graph4(i,j,k,l,jj,kk,1,.false.)
7751 if (wturn6.eq.0.0d0 .or. j.ne.i+4) then
7752 eello6_5=eello6_graph4(l,k,j,i,kk,jj,2,.true.)
7756 eello6_6=eello6_graph3(i,l,k,j,jj,kk,.true.)
7758 C If turn contributions are considered, they will be handled separately.
7759 eel6=eello6_1+eello6_2+eello6_3+eello6_4+eello6_5+eello6_6
7760 cd write(iout,*) 'eello6_1',eello6_1!,' eel6_1_num',16*eel6_1_num
7761 cd write(iout,*) 'eello6_2',eello6_2!,' eel6_2_num',16*eel6_2_num
7762 cd write(iout,*) 'eello6_3',eello6_3!,' eel6_3_num',16*eel6_3_num
7763 cd write(iout,*) 'eello6_4',eello6_4!,' eel6_4_num',16*eel6_4_num
7764 cd write(iout,*) 'eello6_5',eello6_5!,' eel6_5_num',16*eel6_5_num
7765 cd write(iout,*) 'eello6_6',eello6_6!,' eel6_6_num',16*eel6_6_num
7768 if (j.lt.nres-1) then
7775 if (l.lt.nres-1) then
7783 cgrad ggg1(ll)=eel6*g_contij(ll,1)
7784 cgrad ggg2(ll)=eel6*g_contij(ll,2)
7785 cold ghalf=0.5d0*eel6*ekl*gacont_hbr(ll,jj,i)
7786 cgrad ghalf=0.5d0*ggg1(ll)
7788 gradcorr6ij=eel6*g_contij(ll,1)+ekont*derx(ll,1,1)
7789 gradcorr6kl=eel6*g_contij(ll,2)+ekont*derx(ll,1,2)
7790 gradcorr6(ll,i)=gradcorr6(ll,i)+ekont*derx(ll,2,1)
7791 gradcorr6(ll,i+1)=gradcorr6(ll,i+1)+ekont*derx(ll,3,1)
7792 gradcorr6(ll,j)=gradcorr6(ll,j)+ekont*derx(ll,4,1)
7793 gradcorr6(ll,j1)=gradcorr6(ll,j1)+ekont*derx(ll,5,1)
7794 gradcorr6_long(ll,j)=gradcorr6_long(ll,j)+gradcorr6ij
7795 gradcorr6_long(ll,i)=gradcorr6_long(ll,i)-gradcorr6ij
7796 cgrad ghalf=0.5d0*ggg2(ll)
7797 cold ghalf=0.5d0*eel6*eij*gacont_hbr(ll,kk,k)
7799 gradcorr6(ll,k)=gradcorr6(ll,k)+ekont*derx(ll,2,2)
7800 gradcorr6(ll,k+1)=gradcorr6(ll,k+1)+ekont*derx(ll,3,2)
7801 gradcorr6(ll,l)=gradcorr6(ll,l)+ekont*derx(ll,4,2)
7802 gradcorr6(ll,l1)=gradcorr6(ll,l1)+ekont*derx(ll,5,2)
7803 gradcorr6_long(ll,l)=gradcorr6_long(ll,l)+gradcorr6kl
7804 gradcorr6_long(ll,k)=gradcorr6_long(ll,k)-gradcorr6kl
7810 cold gradcorr6(ll,m)=gradcorr6(ll,m)+eel6*ekl*gacont_hbr(ll,jj,i)
7811 cgrad gradcorr6(ll,m)=gradcorr6(ll,m)+ggg1(ll)
7816 cold gradcorr6(ll,m)=gradcorr6(ll,m)+eel6*eij*gacont_hbr(ll,kk,k)
7817 cgrad gradcorr6(ll,m)=gradcorr6(ll,m)+ggg2(ll)
7823 cgrad gradcorr6(ll,m)=gradcorr6(ll,m)+ekont*derx(ll,1,1)
7828 cgrad gradcorr6(ll,m)=gradcorr6(ll,m)+ekont*derx(ll,1,2)
7832 cd write (2,*) iii,g_corr6_loc(iii)
7835 cd write (2,*) 'ekont',ekont
7836 cd write (iout,*) 'eello6',ekont*eel6
7839 c--------------------------------------------------------------------------
7840 double precision function eello6_graph1(i,j,k,l,imat,swap)
7841 implicit real*8 (a-h,o-z)
7842 include 'DIMENSIONS'
7843 include 'DIMENSIONS.ZSCOPT'
7844 include 'COMMON.IOUNITS'
7845 include 'COMMON.CHAIN'
7846 include 'COMMON.DERIV'
7847 include 'COMMON.INTERACT'
7848 include 'COMMON.CONTACTS'
7849 include 'COMMON.TORSION'
7850 include 'COMMON.VAR'
7851 include 'COMMON.GEO'
7852 double precision vv(2),vv1(2),pizda(2,2),auxmat(2,2),pizda1(2,2)
7856 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
7858 C Parallel Antiparallel C
7864 C \ j|/k\| / \ |/k\|l / C
7869 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
7870 itk=itype2loc(itype(k))
7871 s1= scalar2(AEAb1(1,2,imat),CUgb2(1,i))
7872 s2=-scalar2(AEAb2(1,1,imat),Ug2Db1t(1,k))
7873 s3= scalar2(AEAb2(1,1,imat),CUgb2(1,k))
7874 call transpose2(EUgC(1,1,k),auxmat(1,1))
7875 call matmat2(AEA(1,1,imat),auxmat(1,1),pizda1(1,1))
7876 vv1(1)=pizda1(1,1)-pizda1(2,2)
7877 vv1(2)=pizda1(1,2)+pizda1(2,1)
7878 s4=0.5d0*scalar2(vv1(1),Dtobr2(1,i))
7879 vv(1)=AEAb1(1,2,imat)*b1(1,k)-AEAb1(2,2,imat)*b1(2,k)
7880 vv(2)=AEAb1(1,2,imat)*b1(2,k)+AEAb1(2,2,imat)*b1(1,k)
7881 s5=scalar2(vv(1),Dtobr2(1,i))
7882 cd write (2,*) 's1',s1,' s2',s2,' s3',s3,' s4', s4,' s5',s5
7883 eello6_graph1=-0.5d0*(s1+s2+s3+s4+s5)
7885 if (i.gt.1) g_corr6_loc(i-1)=g_corr6_loc(i-1)
7886 & -0.5d0*ekont*(scalar2(AEAb1(1,2,imat),CUgb2der(1,i))
7887 & -scalar2(AEAb2derg(1,2,1,imat),Ug2Db1t(1,k))
7888 & +scalar2(AEAb2derg(1,2,1,imat),CUgb2(1,k))
7889 & +0.5d0*scalar2(vv1(1),Dtobr2der(1,i))
7890 & +scalar2(vv(1),Dtobr2der(1,i)))
7891 call matmat2(AEAderg(1,1,imat),auxmat(1,1),pizda1(1,1))
7892 vv1(1)=pizda1(1,1)-pizda1(2,2)
7893 vv1(2)=pizda1(1,2)+pizda1(2,1)
7894 vv(1)=AEAb1derg(1,2,imat)*b1(1,k)-AEAb1derg(2,2,imat)*b1(2,k)
7895 vv(2)=AEAb1derg(1,2,imat)*b1(2,k)+AEAb1derg(2,2,imat)*b1(1,k)
7897 g_corr6_loc(l-1)=g_corr6_loc(l-1)
7898 & +ekont*(-0.5d0*(scalar2(AEAb1derg(1,2,imat),CUgb2(1,i))
7899 & -scalar2(AEAb2derg(1,1,1,imat),Ug2Db1t(1,k))
7900 & +scalar2(AEAb2derg(1,1,1,imat),CUgb2(1,k))
7901 & +0.5d0*scalar2(vv1(1),Dtobr2(1,i))+scalar2(vv(1),Dtobr2(1,i))))
7903 g_corr6_loc(j-1)=g_corr6_loc(j-1)
7904 & +ekont*(-0.5d0*(scalar2(AEAb1derg(1,2,imat),CUgb2(1,i))
7905 & -scalar2(AEAb2derg(1,1,1,imat),Ug2Db1t(1,k))
7906 & +scalar2(AEAb2derg(1,1,1,imat),CUgb2(1,k))
7907 & +0.5d0*scalar2(vv1(1),Dtobr2(1,i))+scalar2(vv(1),Dtobr2(1,i))))
7909 call transpose2(EUgCder(1,1,k),auxmat(1,1))
7910 call matmat2(AEA(1,1,imat),auxmat(1,1),pizda1(1,1))
7911 vv1(1)=pizda1(1,1)-pizda1(2,2)
7912 vv1(2)=pizda1(1,2)+pizda1(2,1)
7913 if (k.gt.1) g_corr6_loc(k-1)=g_corr6_loc(k-1)
7914 & +ekont*(-0.5d0*(-scalar2(AEAb2(1,1,imat),Ug2Db1tder(1,k))
7915 & +scalar2(AEAb2(1,1,imat),CUgb2der(1,k))
7916 & +0.5d0*scalar2(vv1(1),Dtobr2(1,i))))
7925 s1= scalar2(AEAb1derx(1,lll,kkk,iii,2,imat),CUgb2(1,i))
7926 s2=-scalar2(AEAb2derx(1,lll,kkk,iii,1,imat),Ug2Db1t(1,k))
7927 s3= scalar2(AEAb2derx(1,lll,kkk,iii,1,imat),CUgb2(1,k))
7928 call transpose2(EUgC(1,1,k),auxmat(1,1))
7929 call matmat2(AEAderx(1,1,lll,kkk,iii,imat),auxmat(1,1),
7931 vv1(1)=pizda1(1,1)-pizda1(2,2)
7932 vv1(2)=pizda1(1,2)+pizda1(2,1)
7933 s4=0.5d0*scalar2(vv1(1),Dtobr2(1,i))
7934 vv(1)=AEAb1derx(1,lll,kkk,iii,2,imat)*b1(1,k)
7935 & -AEAb1derx(2,lll,kkk,iii,2,imat)*b1(2,k)
7936 vv(2)=AEAb1derx(1,lll,kkk,iii,2,imat)*b1(2,k)
7937 & +AEAb1derx(2,lll,kkk,iii,2,imat)*b1(1,k)
7938 s5=scalar2(vv(1),Dtobr2(1,i))
7939 derx(lll,kkk,ind)=derx(lll,kkk,ind)-0.5d0*(s1+s2+s3+s4+s5)
7946 c----------------------------------------------------------------------------
7947 double precision function eello6_graph2(i,j,k,l,jj,kk,swap)
7948 implicit real*8 (a-h,o-z)
7949 include 'DIMENSIONS'
7950 include 'DIMENSIONS.ZSCOPT'
7951 include 'COMMON.IOUNITS'
7952 include 'COMMON.CHAIN'
7953 include 'COMMON.DERIV'
7954 include 'COMMON.INTERACT'
7955 include 'COMMON.CONTACTS'
7956 include 'COMMON.TORSION'
7957 include 'COMMON.VAR'
7958 include 'COMMON.GEO'
7960 double precision vv(2),pizda(2,2),auxmat(2,2),auxvec(2),
7961 & auxvec1(2),auxvec2(2),auxmat1(2,2)
7964 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
7966 C Parallel Antiparallel C
7972 C \ j|/k\| \ |/k\|l C
7977 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
7978 cd write (2,*) 'eello6_graph2: i,',i,' j',j,' k',k,' l',l
7979 C AL 7/4/01 s1 would occur in the sixth-order moment,
7980 C but not in a cluster cumulant
7982 s1=dip(1,jj,i)*dip(1,kk,k)
7984 call matvec2(ADtEA1(1,1,1),Ub2(1,k),auxvec(1))
7985 s2=-0.5d0*scalar2(Ub2(1,i),auxvec(1))
7986 call matvec2(ADtEA(1,1,2),Ub2(1,l),auxvec1(1))
7987 s3=-0.5d0*scalar2(Ub2(1,j),auxvec1(1))
7988 call transpose2(EUg(1,1,k),auxmat(1,1))
7989 call matmat2(ADtEA1(1,1,1),auxmat(1,1),pizda(1,1))
7990 vv(1)=pizda(1,1)-pizda(2,2)
7991 vv(2)=pizda(1,2)+pizda(2,1)
7992 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
7993 cd write (2,*) 'eello6_graph2:','s1',s1,' s2',s2,' s3',s3,' s4',s4
7995 eello6_graph2=-(s1+s2+s3+s4)
7997 eello6_graph2=-(s2+s3+s4)
8000 C Derivatives in gamma(i-1)
8004 s1=dipderg(1,jj,i)*dip(1,kk,k)
8006 s2=-0.5d0*scalar2(Ub2der(1,i),auxvec(1))
8007 call matvec2(ADtEAderg(1,1,1,2),Ub2(1,l),auxvec2(1))
8008 s3=-0.5d0*scalar2(Ub2(1,j),auxvec2(1))
8009 s4=-0.25d0*scalar2(vv(1),Dtobr2der(1,i))
8011 g_corr6_loc(i-1)=g_corr6_loc(i-1)-ekont*(s1+s2+s3+s4)
8013 g_corr6_loc(i-1)=g_corr6_loc(i-1)-ekont*(s2+s3+s4)
8015 c g_corr6_loc(i-1)=g_corr6_loc(i-1)-s3
8017 C Derivatives in gamma(k-1)
8019 s1=dip(1,jj,i)*dipderg(1,kk,k)
8021 call matvec2(ADtEA1(1,1,1),Ub2der(1,k),auxvec2(1))
8022 s2=-0.5d0*scalar2(Ub2(1,i),auxvec2(1))
8023 call matvec2(ADtEAderg(1,1,2,2),Ub2(1,l),auxvec2(1))
8024 s3=-0.5d0*scalar2(Ub2(1,j),auxvec2(1))
8025 call transpose2(EUgder(1,1,k),auxmat1(1,1))
8026 call matmat2(ADtEA1(1,1,1),auxmat1(1,1),pizda(1,1))
8027 vv(1)=pizda(1,1)-pizda(2,2)
8028 vv(2)=pizda(1,2)+pizda(2,1)
8029 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
8031 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s1+s2+s3+s4)
8033 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s2+s3+s4)
8035 c g_corr6_loc(k-1)=g_corr6_loc(k-1)-s3
8036 C Derivatives in gamma(j-1) or gamma(l-1)
8039 s1=dipderg(3,jj,i)*dip(1,kk,k)
8041 call matvec2(ADtEA1derg(1,1,1,1),Ub2(1,k),auxvec2(1))
8042 s2=-0.5d0*scalar2(Ub2(1,i),auxvec2(1))
8043 s3=-0.5d0*scalar2(Ub2der(1,j),auxvec1(1))
8044 call matmat2(ADtEA1derg(1,1,1,1),auxmat(1,1),pizda(1,1))
8045 vv(1)=pizda(1,1)-pizda(2,2)
8046 vv(2)=pizda(1,2)+pizda(2,1)
8047 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
8050 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*s1
8052 g_corr6_loc(j-1)=g_corr6_loc(j-1)-ekont*s1
8055 g_corr6_loc(j-1)=g_corr6_loc(j-1)-ekont*(s2+s3+s4)
8056 c g_corr6_loc(j-1)=g_corr6_loc(j-1)-s3
8058 C Derivatives in gamma(l-1) or gamma(j-1)
8061 s1=dip(1,jj,i)*dipderg(3,kk,k)
8063 call matvec2(ADtEA1derg(1,1,2,1),Ub2(1,k),auxvec2(1))
8064 s2=-0.5d0*scalar2(Ub2(1,i),auxvec2(1))
8065 call matvec2(ADtEA(1,1,2),Ub2der(1,l),auxvec2(1))
8066 s3=-0.5d0*scalar2(Ub2(1,j),auxvec2(1))
8067 call matmat2(ADtEA1derg(1,1,2,1),auxmat(1,1),pizda(1,1))
8068 vv(1)=pizda(1,1)-pizda(2,2)
8069 vv(2)=pizda(1,2)+pizda(2,1)
8070 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
8073 g_corr6_loc(j-1)=g_corr6_loc(j-1)-ekont*s1
8075 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*s1
8078 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*(s2+s3+s4)
8079 c g_corr6_loc(l-1)=g_corr6_loc(l-1)-s3
8081 C Cartesian derivatives.
8083 write (2,*) 'In eello6_graph2'
8085 write (2,*) 'iii=',iii
8087 write (2,*) 'kkk=',kkk
8089 write (2,'(3(2f10.5),5x)')
8090 & ((ADtEA1derx(jjj,mmm,lll,kkk,iii,1),mmm=1,2),lll=1,3)
8100 s1=dipderx(lll,kkk,1,jj,i)*dip(1,kk,k)
8102 s1=dip(1,jj,i)*dipderx(lll,kkk,1,kk,k)
8105 call matvec2(ADtEA1derx(1,1,lll,kkk,iii,1),Ub2(1,k),
8107 s2=-0.5d0*scalar2(Ub2(1,i),auxvec(1))
8108 call matvec2(ADtEAderx(1,1,lll,kkk,iii,2),Ub2(1,l),
8110 s3=-0.5d0*scalar2(Ub2(1,j),auxvec(1))
8111 call transpose2(EUg(1,1,k),auxmat(1,1))
8112 call matmat2(ADtEA1derx(1,1,lll,kkk,iii,1),auxmat(1,1),
8114 vv(1)=pizda(1,1)-pizda(2,2)
8115 vv(2)=pizda(1,2)+pizda(2,1)
8116 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
8117 cd write (2,*) 's1',s1,' s2',s2,' s3',s3,' s4',s4
8119 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s1+s2+s4)
8121 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s2+s4)
8124 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-s3
8126 derx(lll,kkk,iii)=derx(lll,kkk,iii)-s3
8134 c----------------------------------------------------------------------------
8135 double precision function eello6_graph3(i,j,k,l,jj,kk,swap)
8136 implicit real*8 (a-h,o-z)
8137 include 'DIMENSIONS'
8138 include 'DIMENSIONS.ZSCOPT'
8139 include 'COMMON.IOUNITS'
8140 include 'COMMON.CHAIN'
8141 include 'COMMON.DERIV'
8142 include 'COMMON.INTERACT'
8143 include 'COMMON.CONTACTS'
8144 include 'COMMON.TORSION'
8145 include 'COMMON.VAR'
8146 include 'COMMON.GEO'
8147 double precision vv(2),pizda(2,2),auxmat(2,2),auxvec(2)
8149 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
8151 C Parallel Antiparallel C
8157 C j|/k\| / |/k\|l / C
8162 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
8164 C 4/7/01 AL Component s1 was removed, because it pertains to the respective
8165 C energy moment and not to the cluster cumulant.
8166 iti=itortyp(itype(i))
8167 if (j.lt.nres-1) then
8168 itj1=itype2loc(itype(j+1))
8172 itk=itype2loc(itype(k))
8173 itk1=itype2loc(itype(k+1))
8174 if (l.lt.nres-1) then
8175 itl1=itype2loc(itype(l+1))
8180 s1=dip(4,jj,i)*dip(4,kk,k)
8182 call matvec2(AECA(1,1,1),b1(1,k+1),auxvec(1))
8183 s2=0.5d0*scalar2(b1(1,k),auxvec(1))
8184 call matvec2(AECA(1,1,2),b1(1,l+1),auxvec(1))
8185 s3=0.5d0*scalar2(b1(1,j+1),auxvec(1))
8186 call transpose2(EE(1,1,k),auxmat(1,1))
8187 call matmat2(auxmat(1,1),AECA(1,1,1),pizda(1,1))
8188 vv(1)=pizda(1,1)+pizda(2,2)
8189 vv(2)=pizda(2,1)-pizda(1,2)
8190 s4=-0.25d0*scalar2(vv(1),Ctobr(1,k))
8191 cd write (2,*) 'eello6_graph3:','s1',s1,' s2',s2,' s3',s3,' s4',s4,
8192 cd & "sum",-(s2+s3+s4)
8194 eello6_graph3=-(s1+s2+s3+s4)
8196 eello6_graph3=-(s2+s3+s4)
8199 C Derivatives in gamma(k-1)
8201 call matvec2(AECAderg(1,1,2),b1(1,l+1),auxvec(1))
8202 s3=0.5d0*scalar2(b1(1,j+1),auxvec(1))
8203 s4=-0.25d0*scalar2(vv(1),Ctobrder(1,k))
8204 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s3+s4)
8205 C Derivatives in gamma(l-1)
8206 call matvec2(AECAderg(1,1,1),b1(1,k+1),auxvec(1))
8207 s2=0.5d0*scalar2(b1(1,k),auxvec(1))
8208 call matmat2(auxmat(1,1),AECAderg(1,1,1),pizda(1,1))
8209 vv(1)=pizda(1,1)+pizda(2,2)
8210 vv(2)=pizda(2,1)-pizda(1,2)
8211 s4=-0.25d0*scalar2(vv(1),Ctobr(1,k))
8212 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*(s2+s4)
8213 C Cartesian derivatives.
8219 s1=dipderx(lll,kkk,4,jj,i)*dip(4,kk,k)
8221 s1=dip(4,jj,i)*dipderx(lll,kkk,4,kk,k)
8224 call matvec2(AECAderx(1,1,lll,kkk,iii,1),b1(1,k+1),
8226 s2=0.5d0*scalar2(b1(1,k),auxvec(1))
8227 call matvec2(AECAderx(1,1,lll,kkk,iii,2),b1(1,l+1),
8229 s3=0.5d0*scalar2(b1(1,j+1),auxvec(1))
8230 call matmat2(auxmat(1,1),AECAderx(1,1,lll,kkk,iii,1),
8232 vv(1)=pizda(1,1)+pizda(2,2)
8233 vv(2)=pizda(2,1)-pizda(1,2)
8234 s4=-0.25d0*scalar2(vv(1),Ctobr(1,k))
8236 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s1+s2+s4)
8238 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s2+s4)
8241 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-s3
8243 derx(lll,kkk,iii)=derx(lll,kkk,iii)-s3
8245 c derx(lll,kkk,iii)=derx(lll,kkk,iii)-s4
8252 c----------------------------------------------------------------------------
8253 double precision function eello6_graph4(i,j,k,l,jj,kk,imat,swap)
8254 implicit real*8 (a-h,o-z)
8255 include 'DIMENSIONS'
8256 include 'DIMENSIONS.ZSCOPT'
8257 include 'COMMON.IOUNITS'
8258 include 'COMMON.CHAIN'
8259 include 'COMMON.DERIV'
8260 include 'COMMON.INTERACT'
8261 include 'COMMON.CONTACTS'
8262 include 'COMMON.TORSION'
8263 include 'COMMON.VAR'
8264 include 'COMMON.GEO'
8265 include 'COMMON.FFIELD'
8266 double precision vv(2),pizda(2,2),auxmat(2,2),auxvec(2),
8267 & auxvec1(2),auxmat1(2,2)
8269 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
8271 C Parallel Antiparallel C
8277 C \ j|/k\| \ |/k\|l C
8282 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
8284 C 4/7/01 AL Component s1 was removed, because it pertains to the respective
8285 C energy moment and not to the cluster cumulant.
8286 cd write (2,*) 'eello_graph4: wturn6',wturn6
8287 iti=itype2loc(itype(i))
8288 itj=itype2loc(itype(j))
8289 if (j.lt.nres-1) then
8290 itj1=itype2loc(itype(j+1))
8294 itk=itype2loc(itype(k))
8295 if (k.lt.nres-1) then
8296 itk1=itype2loc(itype(k+1))
8300 itl=itype2loc(itype(l))
8301 if (l.lt.nres-1) then
8302 itl1=itype2loc(itype(l+1))
8306 cd write (2,*) 'eello6_graph4:','i',i,' j',j,' k',k,' l',l
8307 cd write (2,*) 'iti',iti,' itj',itj,' itj1',itj1,' itk',itk,
8308 cd & ' itl',itl,' itl1',itl1
8311 s1=dip(3,jj,i)*dip(3,kk,k)
8313 s1=dip(2,jj,j)*dip(2,kk,l)
8316 call matvec2(AECA(1,1,imat),Ub2(1,k),auxvec(1))
8317 s2=0.5d0*scalar2(Ub2(1,i),auxvec(1))
8319 call matvec2(ADtEA1(1,1,3-imat),b1(1,j+1),auxvec1(1))
8320 s3=-0.5d0*scalar2(b1(1,j),auxvec1(1))
8322 call matvec2(ADtEA1(1,1,3-imat),b1(1,l+1),auxvec1(1))
8323 s3=-0.5d0*scalar2(b1(1,l),auxvec1(1))
8325 call transpose2(EUg(1,1,k),auxmat(1,1))
8326 call matmat2(AECA(1,1,imat),auxmat(1,1),pizda(1,1))
8327 vv(1)=pizda(1,1)-pizda(2,2)
8328 vv(2)=pizda(2,1)+pizda(1,2)
8329 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
8330 cd write (2,*) 'eello6_graph4:','s1',s1,' s2',s2,' s3',s3,' s4',s4
8332 eello6_graph4=-(s1+s2+s3+s4)
8334 eello6_graph4=-(s2+s3+s4)
8336 C Derivatives in gamma(i-1)
8341 s1=dipderg(2,jj,i)*dip(3,kk,k)
8343 s1=dipderg(4,jj,j)*dip(2,kk,l)
8346 s2=0.5d0*scalar2(Ub2der(1,i),auxvec(1))
8348 call matvec2(ADtEA1derg(1,1,1,3-imat),b1(1,j+1),auxvec1(1))
8349 s3=-0.5d0*scalar2(b1(1,j),auxvec1(1))
8351 call matvec2(ADtEA1derg(1,1,1,3-imat),b1(1,l+1),auxvec1(1))
8352 s3=-0.5d0*scalar2(b1(1,l),auxvec1(1))
8354 s4=0.25d0*scalar2(vv(1),Dtobr2der(1,i))
8355 if (wturn6.gt.0.0d0 .and. k.eq.l+4 .and. i.eq.j+2) then
8356 cd write (2,*) 'turn6 derivatives'
8358 gel_loc_turn6(i-1)=gel_loc_turn6(i-1)-ekont*(s1+s2+s3+s4)
8360 gel_loc_turn6(i-1)=gel_loc_turn6(i-1)-ekont*(s2+s3+s4)
8364 g_corr6_loc(i-1)=g_corr6_loc(i-1)-ekont*(s1+s2+s3+s4)
8366 g_corr6_loc(i-1)=g_corr6_loc(i-1)-ekont*(s2+s3+s4)
8370 C Derivatives in gamma(k-1)
8373 s1=dip(3,jj,i)*dipderg(2,kk,k)
8375 s1=dip(2,jj,j)*dipderg(4,kk,l)
8378 call matvec2(AECA(1,1,imat),Ub2der(1,k),auxvec1(1))
8379 s2=0.5d0*scalar2(Ub2(1,i),auxvec1(1))
8381 call matvec2(ADtEA1derg(1,1,2,3-imat),b1(1,j+1),auxvec1(1))
8382 s3=-0.5d0*scalar2(b1(1,j),auxvec1(1))
8384 call matvec2(ADtEA1derg(1,1,2,3-imat),b1(1,l+1),auxvec1(1))
8385 s3=-0.5d0*scalar2(b1(1,l),auxvec1(1))
8387 call transpose2(EUgder(1,1,k),auxmat1(1,1))
8388 call matmat2(AECA(1,1,imat),auxmat1(1,1),pizda(1,1))
8389 vv(1)=pizda(1,1)-pizda(2,2)
8390 vv(2)=pizda(2,1)+pizda(1,2)
8391 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
8392 if (wturn6.gt.0.0d0 .and. k.eq.l+4 .and. i.eq.j+2) then
8394 gel_loc_turn6(k-1)=gel_loc_turn6(k-1)-ekont*(s1+s2+s3+s4)
8396 gel_loc_turn6(k-1)=gel_loc_turn6(k-1)-ekont*(s2+s3+s4)
8400 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s1+s2+s3+s4)
8402 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s2+s3+s4)
8405 C Derivatives in gamma(j-1) or gamma(l-1)
8406 if (l.eq.j+1 .and. l.gt.1) then
8407 call matvec2(AECAderg(1,1,imat),Ub2(1,k),auxvec(1))
8408 s2=0.5d0*scalar2(Ub2(1,i),auxvec(1))
8409 call matmat2(AECAderg(1,1,imat),auxmat(1,1),pizda(1,1))
8410 vv(1)=pizda(1,1)-pizda(2,2)
8411 vv(2)=pizda(2,1)+pizda(1,2)
8412 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
8413 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*(s2+s4)
8414 else if (j.gt.1) then
8415 call matvec2(AECAderg(1,1,imat),Ub2(1,k),auxvec(1))
8416 s2=0.5d0*scalar2(Ub2(1,i),auxvec(1))
8417 call matmat2(AECAderg(1,1,imat),auxmat(1,1),pizda(1,1))
8418 vv(1)=pizda(1,1)-pizda(2,2)
8419 vv(2)=pizda(2,1)+pizda(1,2)
8420 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
8421 if (wturn6.gt.0.0d0 .and. k.eq.l+4 .and. i.eq.j+2) then
8422 gel_loc_turn6(j-1)=gel_loc_turn6(j-1)-ekont*(s2+s4)
8424 g_corr6_loc(j-1)=g_corr6_loc(j-1)-ekont*(s2+s4)
8427 C Cartesian derivatives.
8434 s1=dipderx(lll,kkk,3,jj,i)*dip(3,kk,k)
8436 s1=dipderx(lll,kkk,2,jj,j)*dip(2,kk,l)
8440 s1=dip(3,jj,i)*dipderx(lll,kkk,3,kk,k)
8442 s1=dip(2,jj,j)*dipderx(lll,kkk,2,kk,l)
8446 call matvec2(AECAderx(1,1,lll,kkk,iii,imat),Ub2(1,k),
8448 s2=0.5d0*scalar2(Ub2(1,i),auxvec(1))
8450 call matvec2(ADtEA1derx(1,1,lll,kkk,iii,3-imat),
8451 & b1(1,j+1),auxvec(1))
8452 s3=-0.5d0*scalar2(b1(1,j),auxvec(1))
8454 call matvec2(ADtEA1derx(1,1,lll,kkk,iii,3-imat),
8455 & b1(1,l+1),auxvec(1))
8456 s3=-0.5d0*scalar2(b1(1,l),auxvec(1))
8458 call matmat2(AECAderx(1,1,lll,kkk,iii,imat),auxmat(1,1),
8460 vv(1)=pizda(1,1)-pizda(2,2)
8461 vv(2)=pizda(2,1)+pizda(1,2)
8462 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
8464 if (wturn6.gt.0.0d0 .and. k.eq.l+4 .and. i.eq.j+2) then
8466 derx_turn(lll,kkk,3-iii)=derx_turn(lll,kkk,3-iii)
8469 derx_turn(lll,kkk,3-iii)=derx_turn(lll,kkk,3-iii)
8472 derx_turn(lll,kkk,iii)=derx_turn(lll,kkk,iii)-s3
8475 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-(s1+s2+s4)
8477 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-(s2+s4)
8479 derx(lll,kkk,iii)=derx(lll,kkk,iii)-s3
8483 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s1+s2+s4)
8485 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s2+s4)
8488 derx(lll,kkk,iii)=derx(lll,kkk,iii)-s3
8490 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-s3
8499 c----------------------------------------------------------------------------
8500 double precision function eello_turn6(i,jj,kk)
8501 implicit real*8 (a-h,o-z)
8502 include 'DIMENSIONS'
8503 include 'DIMENSIONS.ZSCOPT'
8504 include 'COMMON.IOUNITS'
8505 include 'COMMON.CHAIN'
8506 include 'COMMON.DERIV'
8507 include 'COMMON.INTERACT'
8508 include 'COMMON.CONTACTS'
8509 include 'COMMON.TORSION'
8510 include 'COMMON.VAR'
8511 include 'COMMON.GEO'
8512 double precision vtemp1(2),vtemp2(2),vtemp3(2),vtemp4(2),
8513 & atemp(2,2),auxmat(2,2),achuj_temp(2,2),gtemp(2,2),gvec(2),
8515 double precision vtemp1d(2),vtemp2d(2),vtemp3d(2),vtemp4d(2),
8516 & atempd(2,2),auxmatd(2,2),achuj_tempd(2,2),gtempd(2,2),gvecd(2)
8517 C 4/7/01 AL Components s1, s8, and s13 were removed, because they pertain to
8518 C the respective energy moment and not to the cluster cumulant.
8527 iti=itype2loc(itype(i))
8528 itk=itype2loc(itype(k))
8529 itk1=itype2loc(itype(k+1))
8530 itl=itype2loc(itype(l))
8531 itj=itype2loc(itype(j))
8532 cd write (2,*) 'itk',itk,' itk1',itk1,' itl',itl,' itj',itj
8533 cd write (2,*) 'i',i,' k',k,' j',j,' l',l
8534 cd if (i.ne.1 .or. j.ne.3 .or. k.ne.2 .or. l.ne.4) then
8539 cd & 'EELLO6: Contacts have occurred for peptide groups',i,j,
8541 cd call checkint_turn6(i,jj,kk,eel_turn6_num)
8545 derx_turn(lll,kkk,iii)=0.0d0
8552 eello6_5=eello6_graph4(l,k,j,i,kk,jj,2,.true.)
8554 cd write (2,*) 'eello6_5',eello6_5
8556 call transpose2(AEA(1,1,1),auxmat(1,1))
8557 call matmat2(EUg(1,1,i+1),auxmat(1,1),auxmat(1,1))
8558 ss1=scalar2(Ub2(1,i+2),b1(1,l))
8559 s1 = (auxmat(1,1)+auxmat(2,2))*ss1
8561 call matvec2(EUg(1,1,i+2),b1(1,l),vtemp1(1))
8562 call matvec2(AEA(1,1,1),vtemp1(1),vtemp1(1))
8563 s2 = scalar2(b1(1,k),vtemp1(1))
8565 call transpose2(AEA(1,1,2),atemp(1,1))
8566 call matmat2(atemp(1,1),EUg(1,1,i+4),atemp(1,1))
8567 call matvec2(Ug2(1,1,i+2),dd(1,1,k+1),vtemp2(1))
8568 s8 = -(atemp(1,1)+atemp(2,2))*scalar2(cc(1,1,l),vtemp2(1))
8570 call matmat2(EUg(1,1,i+3),AEA(1,1,2),auxmat(1,1))
8571 call matvec2(auxmat(1,1),Ub2(1,i+4),vtemp3(1))
8572 s12 = scalar2(Ub2(1,i+2),vtemp3(1))
8574 call transpose2(a_chuj(1,1,kk,i+1),achuj_temp(1,1))
8575 call matmat2(achuj_temp(1,1),EUg(1,1,i+2),gtemp(1,1))
8576 call matmat2(gtemp(1,1),EUg(1,1,i+3),gtemp(1,1))
8577 call matvec2(a_chuj(1,1,jj,i),Ub2(1,i+4),vtemp4(1))
8578 ss13 = scalar2(b1(1,k),vtemp4(1))
8579 s13 = (gtemp(1,1)+gtemp(2,2))*ss13
8581 c write (2,*) 's1,s2,s8,s12,s13',s1,s2,s8,s12,s13
8587 eel_turn6 = eello6_5 - 0.5d0*(s1+s2+s12+s8+s13)
8588 C Derivatives in gamma(i+2)
8593 call transpose2(AEA(1,1,1),auxmatd(1,1))
8594 call matmat2(EUgder(1,1,i+1),auxmatd(1,1),auxmatd(1,1))
8595 s1d = (auxmatd(1,1)+auxmatd(2,2))*ss1
8596 call transpose2(AEAderg(1,1,2),atempd(1,1))
8597 call matmat2(atempd(1,1),EUg(1,1,i+4),atempd(1,1))
8598 s8d = -(atempd(1,1)+atempd(2,2))*scalar2(cc(1,1,l),vtemp2(1))
8600 call matmat2(EUg(1,1,i+3),AEAderg(1,1,2),auxmatd(1,1))
8601 call matvec2(auxmatd(1,1),Ub2(1,i+4),vtemp3d(1))
8602 s12d = scalar2(Ub2(1,i+2),vtemp3d(1))
8608 gel_loc_turn6(i)=gel_loc_turn6(i)-0.5d0*ekont*(s1d+s8d+s12d)
8609 C Derivatives in gamma(i+3)
8611 call transpose2(AEA(1,1,1),auxmatd(1,1))
8612 call matmat2(EUg(1,1,i+1),auxmatd(1,1),auxmatd(1,1))
8613 ss1d=scalar2(Ub2der(1,i+2),b1(1,l))
8614 s1d = (auxmatd(1,1)+auxmatd(2,2))*ss1d
8616 call matvec2(EUgder(1,1,i+2),b1(1,l),vtemp1d(1))
8617 call matvec2(AEA(1,1,1),vtemp1d(1),vtemp1d(1))
8618 s2d = scalar2(b1(1,k),vtemp1d(1))
8620 call matvec2(Ug2der(1,1,i+2),dd(1,1,k+1),vtemp2d(1))
8621 s8d = -(atemp(1,1)+atemp(2,2))*scalar2(cc(1,1,l),vtemp2d(1))
8623 s12d = scalar2(Ub2der(1,i+2),vtemp3(1))
8625 call matmat2(achuj_temp(1,1),EUgder(1,1,i+2),gtempd(1,1))
8626 call matmat2(gtempd(1,1),EUg(1,1,i+3),gtempd(1,1))
8627 s13d = (gtempd(1,1)+gtempd(2,2))*ss13
8635 gel_loc_turn6(i+1)=gel_loc_turn6(i+1)
8636 & -0.5d0*ekont*(s1d+s2d+s8d+s12d+s13d)
8638 gel_loc_turn6(i+1)=gel_loc_turn6(i+1)
8639 & -0.5d0*ekont*(s2d+s12d)
8641 C Derivatives in gamma(i+4)
8642 call matmat2(EUgder(1,1,i+3),AEA(1,1,2),auxmatd(1,1))
8643 call matvec2(auxmatd(1,1),Ub2(1,i+4),vtemp3d(1))
8644 s12d = scalar2(Ub2(1,i+2),vtemp3d(1))
8646 call matmat2(achuj_temp(1,1),EUg(1,1,i+2),gtempd(1,1))
8647 call matmat2(gtempd(1,1),EUgder(1,1,i+3),gtempd(1,1))
8648 s13d = (gtempd(1,1)+gtempd(2,2))*ss13
8656 gel_loc_turn6(i+2)=gel_loc_turn6(i+2)-0.5d0*ekont*(s12d+s13d)
8658 gel_loc_turn6(i+2)=gel_loc_turn6(i+2)-0.5d0*ekont*(s12d)
8660 C Derivatives in gamma(i+5)
8662 call transpose2(AEAderg(1,1,1),auxmatd(1,1))
8663 call matmat2(EUg(1,1,i+1),auxmatd(1,1),auxmatd(1,1))
8664 s1d = (auxmatd(1,1)+auxmatd(2,2))*ss1
8666 call matvec2(EUg(1,1,i+2),b1(1,l),vtemp1d(1))
8667 call matvec2(AEAderg(1,1,1),vtemp1d(1),vtemp1d(1))
8668 s2d = scalar2(b1(1,k),vtemp1d(1))
8670 call transpose2(AEA(1,1,2),atempd(1,1))
8671 call matmat2(atempd(1,1),EUgder(1,1,i+4),atempd(1,1))
8672 s8d = -(atempd(1,1)+atempd(2,2))*scalar2(cc(1,1,l),vtemp2(1))
8674 call matvec2(auxmat(1,1),Ub2der(1,i+4),vtemp3d(1))
8675 s12d = scalar2(Ub2(1,i+2),vtemp3d(1))
8677 call matvec2(a_chuj(1,1,jj,i),Ub2der(1,i+4),vtemp4d(1))
8678 ss13d = scalar2(b1(1,k),vtemp4d(1))
8679 s13d = (gtemp(1,1)+gtemp(2,2))*ss13d
8687 gel_loc_turn6(i+3)=gel_loc_turn6(i+3)
8688 & -0.5d0*ekont*(s1d+s2d+s8d+s12d+s13d)
8690 gel_loc_turn6(i+3)=gel_loc_turn6(i+3)
8691 & -0.5d0*ekont*(s2d+s12d)
8693 C Cartesian derivatives
8698 call transpose2(AEAderx(1,1,lll,kkk,iii,1),auxmatd(1,1))
8699 call matmat2(EUg(1,1,i+1),auxmatd(1,1),auxmatd(1,1))
8700 s1d = (auxmatd(1,1)+auxmatd(2,2))*ss1
8702 call matvec2(EUg(1,1,i+2),b1(1,l),vtemp1(1))
8703 call matvec2(AEAderx(1,1,lll,kkk,iii,1),vtemp1(1),
8705 s2d = scalar2(b1(1,k),vtemp1d(1))
8707 call transpose2(AEAderx(1,1,lll,kkk,iii,2),atempd(1,1))
8708 call matmat2(atempd(1,1),EUg(1,1,i+4),atempd(1,1))
8709 s8d = -(atempd(1,1)+atempd(2,2))*
8710 & scalar2(cc(1,1,l),vtemp2(1))
8712 call matmat2(EUg(1,1,i+3),AEAderx(1,1,lll,kkk,iii,2),
8714 call matvec2(auxmatd(1,1),Ub2(1,i+4),vtemp3d(1))
8715 s12d = scalar2(Ub2(1,i+2),vtemp3d(1))
8722 derx_turn(lll,kkk,iii) = derx_turn(lll,kkk,iii)
8725 derx_turn(lll,kkk,iii) = derx_turn(lll,kkk,iii)
8729 derx_turn(lll,kkk,3-iii) = derx_turn(lll,kkk,3-iii)
8730 & - 0.5d0*(s8d+s12d)
8732 derx_turn(lll,kkk,3-iii) = derx_turn(lll,kkk,3-iii)
8741 call transpose2(a_chuj_der(1,1,lll,kkk,kk,i+1),
8743 call matmat2(achuj_tempd(1,1),EUg(1,1,i+2),gtempd(1,1))
8744 call matmat2(gtempd(1,1),EUg(1,1,i+3),gtempd(1,1))
8745 s13d=(gtempd(1,1)+gtempd(2,2))*ss13
8746 derx_turn(lll,kkk,2) = derx_turn(lll,kkk,2)-0.5d0*s13d
8747 call matvec2(a_chuj_der(1,1,lll,kkk,jj,i),Ub2(1,i+4),
8749 ss13d = scalar2(b1(1,k),vtemp4d(1))
8750 s13d = (gtemp(1,1)+gtemp(2,2))*ss13d
8751 derx_turn(lll,kkk,1) = derx_turn(lll,kkk,1)-0.5d0*s13d
8755 cd write(iout,*) 'eel6_turn6',eel_turn6,' eel_turn6_num',
8756 cd & 16*eel_turn6_num
8758 if (j.lt.nres-1) then
8765 if (l.lt.nres-1) then
8773 cgrad ggg1(ll)=eel_turn6*g_contij(ll,1)
8774 cgrad ggg2(ll)=eel_turn6*g_contij(ll,2)
8775 cgrad ghalf=0.5d0*ggg1(ll)
8777 gturn6ij=eel_turn6*g_contij(ll,1)+ekont*derx_turn(ll,1,1)
8778 gturn6kl=eel_turn6*g_contij(ll,2)+ekont*derx_turn(ll,1,2)
8779 gcorr6_turn(ll,i)=gcorr6_turn(ll,i)!+ghalf
8780 & +ekont*derx_turn(ll,2,1)
8781 gcorr6_turn(ll,i+1)=gcorr6_turn(ll,i+1)+ekont*derx_turn(ll,3,1)
8782 gcorr6_turn(ll,j)=gcorr6_turn(ll,j)!+ghalf
8783 & +ekont*derx_turn(ll,4,1)
8784 gcorr6_turn(ll,j1)=gcorr6_turn(ll,j1)+ekont*derx_turn(ll,5,1)
8785 gcorr6_turn_long(ll,j)=gcorr6_turn_long(ll,j)+gturn6ij
8786 gcorr6_turn_long(ll,i)=gcorr6_turn_long(ll,i)-gturn6ij
8787 cgrad ghalf=0.5d0*ggg2(ll)
8789 gcorr6_turn(ll,k)=gcorr6_turn(ll,k)!+ghalf
8790 & +ekont*derx_turn(ll,2,2)
8791 gcorr6_turn(ll,k+1)=gcorr6_turn(ll,k+1)+ekont*derx_turn(ll,3,2)
8792 gcorr6_turn(ll,l)=gcorr6_turn(ll,l)!+ghalf
8793 & +ekont*derx_turn(ll,4,2)
8794 gcorr6_turn(ll,l1)=gcorr6_turn(ll,l1)+ekont*derx_turn(ll,5,2)
8795 gcorr6_turn_long(ll,l)=gcorr6_turn_long(ll,l)+gturn6kl
8796 gcorr6_turn_long(ll,k)=gcorr6_turn_long(ll,k)-gturn6kl
8801 cgrad gcorr6_turn(ll,m)=gcorr6_turn(ll,m)+ggg1(ll)
8806 cgrad gcorr6_turn(ll,m)=gcorr6_turn(ll,m)+ggg2(ll)
8812 cgrad gcorr6_turn(ll,m)=gcorr6_turn(ll,m)+ekont*derx_turn(ll,1,1)
8817 cgrad gcorr6_turn(ll,m)=gcorr6_turn(ll,m)+ekont*derx_turn(ll,1,2)
8821 cd write (2,*) iii,g_corr6_loc(iii)
8824 eello_turn6=ekont*eel_turn6
8825 cd write (2,*) 'ekont',ekont
8826 cd write (2,*) 'eel_turn6',ekont*eel_turn6
8830 crc-------------------------------------------------
8831 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
8832 subroutine Eliptransfer(eliptran)
8833 implicit real*8 (a-h,o-z)
8834 include 'DIMENSIONS'
8835 include 'DIMENSIONS.ZSCOPT'
8836 include 'COMMON.GEO'
8837 include 'COMMON.VAR'
8838 include 'COMMON.LOCAL'
8839 include 'COMMON.CHAIN'
8840 include 'COMMON.DERIV'
8841 include 'COMMON.INTERACT'
8842 include 'COMMON.IOUNITS'
8843 include 'COMMON.CALC'
8844 include 'COMMON.CONTROL'
8845 include 'COMMON.SPLITELE'
8846 include 'COMMON.SBRIDGE'
8847 C this is done by Adasko
8851 C--bordliptop-- buffore starts
8852 C--bufliptop--- here true lipid starts
8854 C--buflipbot--- lipid ends buffore starts
8855 C--bordlipbot--buffore ends
8859 if (itype(i).eq.ntyp1) cycle
8861 positi=(mod(((c(3,i)+c(3,i+1))/2.0d0),boxzsize))
8862 if (positi.le.0) positi=positi+boxzsize
8864 C first for peptide groups
8865 c for each residue check if it is in lipid or lipid water border area
8866 if ((positi.gt.bordlipbot)
8867 &.and.(positi.lt.bordliptop)) then
8868 C the energy transfer exist
8869 if (positi.lt.buflipbot) then
8870 C what fraction I am in
8872 & ((positi-bordlipbot)/lipbufthick)
8873 C lipbufthick is thickenes of lipid buffore
8874 sslip=sscalelip(fracinbuf)
8875 ssgradlip=-sscagradlip(fracinbuf)/lipbufthick
8876 eliptran=eliptran+sslip*pepliptran
8877 gliptranc(3,i)=gliptranc(3,i)+ssgradlip*pepliptran/2.0d0
8878 gliptranc(3,i-1)=gliptranc(3,i-1)+ssgradlip*pepliptran/2.0d0
8879 C gliptranc(3,i-2)=gliptranc(3,i)+ssgradlip*pepliptran
8880 elseif (positi.gt.bufliptop) then
8881 fracinbuf=1.0d0-((bordliptop-positi)/lipbufthick)
8882 sslip=sscalelip(fracinbuf)
8883 ssgradlip=sscagradlip(fracinbuf)/lipbufthick
8884 eliptran=eliptran+sslip*pepliptran
8885 gliptranc(3,i)=gliptranc(3,i)+ssgradlip*pepliptran/2.0d0
8886 gliptranc(3,i-1)=gliptranc(3,i-1)+ssgradlip*pepliptran/2.0d0
8887 C gliptranc(3,i-2)=gliptranc(3,i)+ssgradlip*pepliptran
8888 C print *, "doing sscalefor top part"
8889 C print *,i,sslip,fracinbuf,ssgradlip
8891 eliptran=eliptran+pepliptran
8892 C print *,"I am in true lipid"
8895 C eliptran=elpitran+0.0 ! I am in water
8898 C print *, "nic nie bylo w lipidzie?"
8899 C now multiply all by the peptide group transfer factor
8900 C eliptran=eliptran*pepliptran
8901 C now the same for side chains
8904 if (itype(i).eq.ntyp1) cycle
8905 positi=(mod(c(3,i+nres),boxzsize))
8906 if (positi.le.0) positi=positi+boxzsize
8907 C print *,mod(c(3,i+nres),boxzsize),bordlipbot,bordliptop
8908 c for each residue check if it is in lipid or lipid water border area
8909 C respos=mod(c(3,i+nres),boxzsize)
8910 C print *,positi,bordlipbot,buflipbot
8911 if ((positi.gt.bordlipbot)
8912 & .and.(positi.lt.bordliptop)) then
8913 C the energy transfer exist
8914 if (positi.lt.buflipbot) then
8916 & ((positi-bordlipbot)/lipbufthick)
8917 C lipbufthick is thickenes of lipid buffore
8918 sslip=sscalelip(fracinbuf)
8919 ssgradlip=-sscagradlip(fracinbuf)/lipbufthick
8920 eliptran=eliptran+sslip*liptranene(itype(i))
8921 gliptranx(3,i)=gliptranx(3,i)
8922 &+ssgradlip*liptranene(itype(i))
8923 gliptranc(3,i-1)= gliptranc(3,i-1)
8924 &+ssgradlip*liptranene(itype(i))
8925 C print *,"doing sccale for lower part"
8926 elseif (positi.gt.bufliptop) then
8928 &((bordliptop-positi)/lipbufthick)
8929 sslip=sscalelip(fracinbuf)
8930 ssgradlip=sscagradlip(fracinbuf)/lipbufthick
8931 eliptran=eliptran+sslip*liptranene(itype(i))
8932 gliptranx(3,i)=gliptranx(3,i)
8933 &+ssgradlip*liptranene(itype(i))
8934 gliptranc(3,i-1)= gliptranc(3,i-1)
8935 &+ssgradlip*liptranene(itype(i))
8936 C print *, "doing sscalefor top part",sslip,fracinbuf
8938 eliptran=eliptran+liptranene(itype(i))
8939 C print *,"I am in true lipid"
8941 endif ! if in lipid or buffor
8943 C eliptran=elpitran+0.0 ! I am in water
8949 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
8951 SUBROUTINE MATVEC2(A1,V1,V2)
8952 implicit real*8 (a-h,o-z)
8953 include 'DIMENSIONS'
8954 DIMENSION A1(2,2),V1(2),V2(2)
8958 c 3 VI=VI+A1(I,K)*V1(K)
8962 vaux1=a1(1,1)*v1(1)+a1(1,2)*v1(2)
8963 vaux2=a1(2,1)*v1(1)+a1(2,2)*v1(2)
8968 C---------------------------------------
8969 SUBROUTINE MATMAT2(A1,A2,A3)
8970 implicit real*8 (a-h,o-z)
8971 include 'DIMENSIONS'
8972 DIMENSION A1(2,2),A2(2,2),A3(2,2)
8973 c DIMENSION AI3(2,2)
8977 c A3IJ=A3IJ+A1(I,K)*A2(K,J)
8983 ai3_11=a1(1,1)*a2(1,1)+a1(1,2)*a2(2,1)
8984 ai3_12=a1(1,1)*a2(1,2)+a1(1,2)*a2(2,2)
8985 ai3_21=a1(2,1)*a2(1,1)+a1(2,2)*a2(2,1)
8986 ai3_22=a1(2,1)*a2(1,2)+a1(2,2)*a2(2,2)
8994 c-------------------------------------------------------------------------
8995 double precision function scalar2(u,v)
8997 double precision u(2),v(2)
9000 scalar2=u(1)*v(1)+u(2)*v(2)
9004 C-----------------------------------------------------------------------------
9006 subroutine transpose2(a,at)
9008 double precision a(2,2),at(2,2)
9015 c--------------------------------------------------------------------------
9016 subroutine transpose(n,a,at)
9019 double precision a(n,n),at(n,n)
9027 C---------------------------------------------------------------------------
9028 subroutine prodmat3(a1,a2,kk,transp,prod)
9031 double precision a1(2,2),a2(2,2),a2t(2,2),kk(2,2),prod(2,2)
9033 crc double precision auxmat(2,2),prod_(2,2)
9036 crc call transpose2(kk(1,1),auxmat(1,1))
9037 crc call matmat2(a1(1,1),auxmat(1,1),auxmat(1,1))
9038 crc call matmat2(auxmat(1,1),a2(1,1),prod_(1,1))
9040 prod(1,1)=(a1(1,1)*kk(1,1)+a1(1,2)*kk(1,2))*a2(1,1)
9041 & +(a1(1,1)*kk(2,1)+a1(1,2)*kk(2,2))*a2(2,1)
9042 prod(1,2)=(a1(1,1)*kk(1,1)+a1(1,2)*kk(1,2))*a2(1,2)
9043 & +(a1(1,1)*kk(2,1)+a1(1,2)*kk(2,2))*a2(2,2)
9044 prod(2,1)=(a1(2,1)*kk(1,1)+a1(2,2)*kk(1,2))*a2(1,1)
9045 & +(a1(2,1)*kk(2,1)+a1(2,2)*kk(2,2))*a2(2,1)
9046 prod(2,2)=(a1(2,1)*kk(1,1)+a1(2,2)*kk(1,2))*a2(1,2)
9047 & +(a1(2,1)*kk(2,1)+a1(2,2)*kk(2,2))*a2(2,2)
9050 crc call matmat2(a1(1,1),kk(1,1),auxmat(1,1))
9051 crc call matmat2(auxmat(1,1),a2(1,1),prod_(1,1))
9053 prod(1,1)=(a1(1,1)*kk(1,1)+a1(1,2)*kk(2,1))*a2(1,1)
9054 & +(a1(1,1)*kk(1,2)+a1(1,2)*kk(2,2))*a2(2,1)
9055 prod(1,2)=(a1(1,1)*kk(1,1)+a1(1,2)*kk(2,1))*a2(1,2)
9056 & +(a1(1,1)*kk(1,2)+a1(1,2)*kk(2,2))*a2(2,2)
9057 prod(2,1)=(a1(2,1)*kk(1,1)+a1(2,2)*kk(2,1))*a2(1,1)
9058 & +(a1(2,1)*kk(1,2)+a1(2,2)*kk(2,2))*a2(2,1)
9059 prod(2,2)=(a1(2,1)*kk(1,1)+a1(2,2)*kk(2,1))*a2(1,2)
9060 & +(a1(2,1)*kk(1,2)+a1(2,2)*kk(2,2))*a2(2,2)
9063 c call transpose2(a2(1,1),a2t(1,1))
9066 crc print *,((prod_(i,j),i=1,2),j=1,2)
9067 crc print *,((prod(i,j),i=1,2),j=1,2)
9071 C-----------------------------------------------------------------------------
9072 double precision function scalar(u,v)
9074 double precision u(3),v(3)
9084 C-----------------------------------------------------------------------
9085 double precision function sscale(r)
9086 double precision r,gamm
9087 include "COMMON.SPLITELE"
9088 if(r.lt.r_cut-rlamb) then
9090 else if(r.le.r_cut.and.r.ge.r_cut-rlamb) then
9091 gamm=(r-(r_cut-rlamb))/rlamb
9092 sscale=1.0d0+gamm*gamm*(2*gamm-3.0d0)
9098 C-----------------------------------------------------------------------
9099 C-----------------------------------------------------------------------
9100 double precision function sscagrad(r)
9101 double precision r,gamm
9102 include "COMMON.SPLITELE"
9103 if(r.lt.r_cut-rlamb) then
9105 else if(r.le.r_cut.and.r.ge.r_cut-rlamb) then
9106 gamm=(r-(r_cut-rlamb))/rlamb
9107 sscagrad=gamm*(6*gamm-6.0d0)/rlamb
9113 C-----------------------------------------------------------------------
9114 C-----------------------------------------------------------------------
9115 double precision function sscalelip(r)
9116 double precision r,gamm
9117 include "COMMON.SPLITELE"
9118 C if(r.lt.r_cut-rlamb) then
9120 C else if(r.le.r_cut.and.r.ge.r_cut-rlamb) then
9121 C gamm=(r-(r_cut-rlamb))/rlamb
9122 sscalelip=1.0d0+r*r*(2*r-3.0d0)
9128 C-----------------------------------------------------------------------
9129 double precision function sscagradlip(r)
9130 double precision r,gamm
9131 include "COMMON.SPLITELE"
9132 C if(r.lt.r_cut-rlamb) then
9134 C else if(r.le.r_cut.and.r.ge.r_cut-rlamb) then
9135 C gamm=(r-(r_cut-rlamb))/rlamb
9136 sscagradlip=r*(6*r-6.0d0)
9143 C-----------------------------------------------------------------------
9144 subroutine set_shield_fac
9145 implicit real*8 (a-h,o-z)
9146 include 'DIMENSIONS'
9147 include 'DIMENSIONS.ZSCOPT'
9148 include 'COMMON.CHAIN'
9149 include 'COMMON.DERIV'
9150 include 'COMMON.IOUNITS'
9151 include 'COMMON.SHIELD'
9152 include 'COMMON.INTERACT'
9153 C this is the squar root 77 devided by 81 the epislion in lipid (in protein)
9154 double precision div77_81/0.974996043d0/,
9155 &div4_81/0.2222222222d0/,sh_frac_dist_grad(3)
9157 C the vector between center of side_chain and peptide group
9158 double precision pep_side(3),long,side_calf(3),
9159 &pept_group(3),costhet_grad(3),cosphi_grad_long(3),
9160 &cosphi_grad_loc(3),pep_side_norm(3),side_calf_norm(3)
9161 C the line belowe needs to be changed for FGPROC>1
9163 if ((itype(i).eq.ntyp1).and.itype(i+1).eq.ntyp1) cycle
9165 Cif there two consequtive dummy atoms there is no peptide group between them
9166 C the line below has to be changed for FGPROC>1
9169 if ((itype(k).eq.ntyp1).or.(itype(k).eq.10)) cycle
9173 C first lets set vector conecting the ithe side-chain with kth side-chain
9174 pep_side(j)=c(j,k+nres)-(c(j,i)+c(j,i+1))/2.0d0
9176 C and vector conecting the side-chain with its proper calfa
9177 side_calf(j)=c(j,k+nres)-c(j,k)
9178 C side_calf(j)=2.0d0
9179 pept_group(j)=c(j,i)-c(j,i+1)
9180 C lets have their lenght
9181 dist_pep_side=pep_side(j)**2+dist_pep_side
9182 dist_side_calf=dist_side_calf+side_calf(j)**2
9183 dist_pept_group=dist_pept_group+pept_group(j)**2
9185 dist_pep_side=dsqrt(dist_pep_side)
9186 dist_pept_group=dsqrt(dist_pept_group)
9187 dist_side_calf=dsqrt(dist_side_calf)
9189 pep_side_norm(j)=pep_side(j)/dist_pep_side
9190 side_calf_norm(j)=dist_side_calf
9192 C now sscale fraction
9193 sh_frac_dist=-(dist_pep_side-rpp(1,1)-buff_shield)/buff_shield
9194 C print *,buff_shield,"buff"
9196 if (sh_frac_dist.le.0.0) cycle
9197 C If we reach here it means that this side chain reaches the shielding sphere
9198 C Lets add him to the list for gradient
9199 ishield_list(i)=ishield_list(i)+1
9200 C ishield_list is a list of non 0 side-chain that contribute to factor gradient
9201 C this list is essential otherwise problem would be O3
9202 shield_list(ishield_list(i),i)=k
9203 C Lets have the sscale value
9204 if (sh_frac_dist.gt.1.0) then
9205 scale_fac_dist=1.0d0
9207 sh_frac_dist_grad(j)=0.0d0
9210 scale_fac_dist=-sh_frac_dist*sh_frac_dist
9211 & *(2.0*sh_frac_dist-3.0d0)
9212 fac_help_scale=6.0*(sh_frac_dist-sh_frac_dist**2)
9213 & /dist_pep_side/buff_shield*0.5
9214 C remember for the final gradient multiply sh_frac_dist_grad(j)
9215 C for side_chain by factor -2 !
9217 sh_frac_dist_grad(j)=fac_help_scale*pep_side(j)
9218 C print *,"jestem",scale_fac_dist,fac_help_scale,
9219 C & sh_frac_dist_grad(j)
9222 C if ((i.eq.3).and.(k.eq.2)) then
9223 C print *,i,sh_frac_dist,dist_pep,fac_help_scale,scale_fac_dist
9227 C this is what is now we have the distance scaling now volume...
9228 short=short_r_sidechain(itype(k))
9229 long=long_r_sidechain(itype(k))
9230 costhet=1.0d0/dsqrt(1.0+short**2/dist_pep_side**2)
9233 costhet_fac=costhet**3*short**2*(-0.5)/dist_pep_side**4
9236 costhet_grad(j)=costhet_fac*pep_side(j)
9238 C remember for the final gradient multiply costhet_grad(j)
9239 C for side_chain by factor -2 !
9240 C fac alfa is angle between CB_k,CA_k, CA_i,CA_i+1
9241 C pep_side0pept_group is vector multiplication
9242 pep_side0pept_group=0.0
9244 pep_side0pept_group=pep_side0pept_group+pep_side(j)*side_calf(j)
9246 cosalfa=(pep_side0pept_group/
9247 & (dist_pep_side*dist_side_calf))
9248 fac_alfa_sin=1.0-cosalfa**2
9249 fac_alfa_sin=dsqrt(fac_alfa_sin)
9250 rkprim=fac_alfa_sin*(long-short)+short
9252 cosphi=1.0d0/dsqrt(1.0+rkprim**2/dist_pep_side**2)
9253 cosphi_fac=cosphi**3*rkprim**2*(-0.5)/dist_pep_side**4
9256 cosphi_grad_long(j)=cosphi_fac*pep_side(j)
9257 &+cosphi**3*0.5/dist_pep_side**2*(-rkprim)
9258 &*(long-short)/fac_alfa_sin*cosalfa/
9259 &((dist_pep_side*dist_side_calf))*
9260 &((side_calf(j))-cosalfa*
9261 &((pep_side(j)/dist_pep_side)*dist_side_calf))
9263 cosphi_grad_loc(j)=cosphi**3*0.5/dist_pep_side**2*(-rkprim)
9264 &*(long-short)/fac_alfa_sin*cosalfa
9265 &/((dist_pep_side*dist_side_calf))*
9267 &cosalfa*side_calf(j)/dist_side_calf*dist_pep_side)
9270 VofOverlap=VSolvSphere/2.0d0*(1.0-costhet)*(1.0-cosphi)
9273 C now the gradient...
9274 C grad_shield is gradient of Calfa for peptide groups
9275 C write(iout,*) "shield_compon",i,k,VSolvSphere,scale_fac_dist,
9277 C write(iout,*) "cosphi_compon",i,k,pep_side0pept_group,
9278 C & dist_pep_side,dist_side_calf,c(1,k+nres),c(1,k),itype(k)
9280 grad_shield(j,i)=grad_shield(j,i)
9281 C gradient po skalowaniu
9282 & +(sh_frac_dist_grad(j)
9283 C gradient po costhet
9284 &-scale_fac_dist*costhet_grad(j)/(1.0-costhet)
9285 &-scale_fac_dist*(cosphi_grad_long(j))
9286 &/(1.0-cosphi) )*div77_81
9288 C grad_shield_side is Cbeta sidechain gradient
9289 grad_shield_side(j,ishield_list(i),i)=
9290 & (sh_frac_dist_grad(j)*(-2.0d0)
9291 & +scale_fac_dist*costhet_grad(j)*2.0d0/(1.0-costhet)
9292 & +scale_fac_dist*(cosphi_grad_long(j))
9293 & *2.0d0/(1.0-cosphi))
9294 & *div77_81*VofOverlap
9296 grad_shield_loc(j,ishield_list(i),i)=
9297 & scale_fac_dist*cosphi_grad_loc(j)
9298 & *2.0d0/(1.0-cosphi)
9299 & *div77_81*VofOverlap
9301 VolumeTotal=VolumeTotal+VofOverlap*scale_fac_dist
9303 fac_shield(i)=VolumeTotal*div77_81+div4_81
9304 C write(2,*) "TOTAL VOLUME",i,VolumeTotal,fac_shield(i)
9308 C--------------------------------------------------------------------------
9309 C first for shielding is setting of function of side-chains
9310 subroutine set_shield_fac2
9311 implicit real*8 (a-h,o-z)
9312 include 'DIMENSIONS'
9313 include 'DIMENSIONS.ZSCOPT'
9314 include 'COMMON.CHAIN'
9315 include 'COMMON.DERIV'
9316 include 'COMMON.IOUNITS'
9317 include 'COMMON.SHIELD'
9318 include 'COMMON.INTERACT'
9319 C this is the squar root 77 devided by 81 the epislion in lipid (in protein)
9320 double precision div77_81/0.974996043d0/,
9321 &div4_81/0.2222222222d0/,sh_frac_dist_grad(3)
9323 C the vector between center of side_chain and peptide group
9324 double precision pep_side(3),long,side_calf(3),
9325 &pept_group(3),costhet_grad(3),cosphi_grad_long(3),
9326 &cosphi_grad_loc(3),pep_side_norm(3),side_calf_norm(3)
9327 C the line belowe needs to be changed for FGPROC>1
9329 if ((itype(i).eq.ntyp1).and.itype(i+1).eq.ntyp1) cycle
9331 Cif there two consequtive dummy atoms there is no peptide group between them
9332 C the line below has to be changed for FGPROC>1
9335 if ((itype(k).eq.ntyp1).or.(itype(k).eq.10)) cycle
9339 C first lets set vector conecting the ithe side-chain with kth side-chain
9340 pep_side(j)=c(j,k+nres)-(c(j,i)+c(j,i+1))/2.0d0
9342 C and vector conecting the side-chain with its proper calfa
9343 side_calf(j)=c(j,k+nres)-c(j,k)
9344 C side_calf(j)=2.0d0
9345 pept_group(j)=c(j,i)-c(j,i+1)
9346 C lets have their lenght
9347 dist_pep_side=pep_side(j)**2+dist_pep_side
9348 dist_side_calf=dist_side_calf+side_calf(j)**2
9349 dist_pept_group=dist_pept_group+pept_group(j)**2
9351 dist_pep_side=dsqrt(dist_pep_side)
9352 dist_pept_group=dsqrt(dist_pept_group)
9353 dist_side_calf=dsqrt(dist_side_calf)
9355 pep_side_norm(j)=pep_side(j)/dist_pep_side
9356 side_calf_norm(j)=dist_side_calf
9358 C now sscale fraction
9359 sh_frac_dist=-(dist_pep_side-rpp(1,1)-buff_shield)/buff_shield
9360 C print *,buff_shield,"buff"
9362 if (sh_frac_dist.le.0.0) cycle
9363 C If we reach here it means that this side chain reaches the shielding sphere
9364 C Lets add him to the list for gradient
9365 ishield_list(i)=ishield_list(i)+1
9366 C ishield_list is a list of non 0 side-chain that contribute to factor gradient
9367 C this list is essential otherwise problem would be O3
9368 shield_list(ishield_list(i),i)=k
9369 C Lets have the sscale value
9370 if (sh_frac_dist.gt.1.0) then
9371 scale_fac_dist=1.0d0
9373 sh_frac_dist_grad(j)=0.0d0
9376 scale_fac_dist=-sh_frac_dist*sh_frac_dist
9377 & *(2.0d0*sh_frac_dist-3.0d0)
9378 fac_help_scale=6.0d0*(sh_frac_dist-sh_frac_dist**2)
9379 & /dist_pep_side/buff_shield*0.5d0
9380 C remember for the final gradient multiply sh_frac_dist_grad(j)
9381 C for side_chain by factor -2 !
9383 sh_frac_dist_grad(j)=fac_help_scale*pep_side(j)
9384 C sh_frac_dist_grad(j)=0.0d0
9385 C scale_fac_dist=1.0d0
9386 C print *,"jestem",scale_fac_dist,fac_help_scale,
9387 C & sh_frac_dist_grad(j)
9390 C this is what is now we have the distance scaling now volume...
9391 short=short_r_sidechain(itype(k))
9392 long=long_r_sidechain(itype(k))
9393 costhet=1.0d0/dsqrt(1.0d0+short**2/dist_pep_side**2)
9394 sinthet=short/dist_pep_side*costhet
9398 costhet_fac=costhet**3*short**2*(-0.5d0)/dist_pep_side**4
9399 C sinthet_fac=costhet**2*0.5d0*(short**3/dist_pep_side**4*costhet
9400 C & -short/dist_pep_side**2/costhet)
9403 costhet_grad(j)=costhet_fac*pep_side(j)
9405 C remember for the final gradient multiply costhet_grad(j)
9406 C for side_chain by factor -2 !
9407 C fac alfa is angle between CB_k,CA_k, CA_i,CA_i+1
9408 C pep_side0pept_group is vector multiplication
9409 pep_side0pept_group=0.0d0
9411 pep_side0pept_group=pep_side0pept_group+pep_side(j)*side_calf(j)
9413 cosalfa=(pep_side0pept_group/
9414 & (dist_pep_side*dist_side_calf))
9415 fac_alfa_sin=1.0d0-cosalfa**2
9416 fac_alfa_sin=dsqrt(fac_alfa_sin)
9417 rkprim=fac_alfa_sin*(long-short)+short
9421 cosphi=1.0d0/dsqrt(1.0d0+rkprim**2/dist_pep_side**2)
9423 cosphi_fac=cosphi**3*rkprim**2*(-0.5d0)/dist_pep_side**4
9424 sinphi=rkprim/dist_pep_side/dsqrt(1.0d0+rkprim**2/
9428 cosphi_grad_long(j)=cosphi_fac*pep_side(j)
9429 &+cosphi**3*0.5d0/dist_pep_side**2*(-rkprim)
9430 &*(long-short)/fac_alfa_sin*cosalfa/
9431 &((dist_pep_side*dist_side_calf))*
9432 &((side_calf(j))-cosalfa*
9433 &((pep_side(j)/dist_pep_side)*dist_side_calf))
9434 C cosphi_grad_long(j)=0.0d0
9435 cosphi_grad_loc(j)=cosphi**3*0.5d0/dist_pep_side**2*(-rkprim)
9436 &*(long-short)/fac_alfa_sin*cosalfa
9437 &/((dist_pep_side*dist_side_calf))*
9439 &cosalfa*side_calf(j)/dist_side_calf*dist_pep_side)
9440 C cosphi_grad_loc(j)=0.0d0
9442 C print *,sinphi,sinthet
9443 VofOverlap=VSolvSphere/2.0d0*(1.0d0-dsqrt(1.0d0-sinphi*sinthet))
9446 C now the gradient...
9448 grad_shield(j,i)=grad_shield(j,i)
9449 C gradient po skalowaniu
9450 & +(sh_frac_dist_grad(j)*VofOverlap
9451 C gradient po costhet
9452 & +scale_fac_dist*VSolvSphere/VSolvSphere_div/4.0d0*
9453 &(1.0d0/(-dsqrt(1.0d0-sinphi*sinthet))*(
9454 & sinphi/sinthet*costhet*costhet_grad(j)
9455 & +sinthet/sinphi*cosphi*cosphi_grad_long(j)))
9457 C grad_shield_side is Cbeta sidechain gradient
9458 grad_shield_side(j,ishield_list(i),i)=
9459 & (sh_frac_dist_grad(j)*(-2.0d0)
9461 & -scale_fac_dist*VSolvSphere/VSolvSphere_div/2.0d0*
9462 &(1.0d0/(-dsqrt(1.0d0-sinphi*sinthet))*(
9463 & sinphi/sinthet*costhet*costhet_grad(j)
9464 & +sinthet/sinphi*cosphi*cosphi_grad_long(j)))
9467 grad_shield_loc(j,ishield_list(i),i)=
9468 & scale_fac_dist*VSolvSphere/VSolvSphere_div/2.0d0*
9469 &(1.0d0/(dsqrt(1.0d0-sinphi*sinthet))*(
9470 & sinthet/sinphi*cosphi*cosphi_grad_loc(j)
9474 VolumeTotal=VolumeTotal+VofOverlap*scale_fac_dist
9476 fac_shield(i)=VolumeTotal*wshield+(1.0d0-wshield)
9477 c write(2,*) "TOTAL VOLUME",i,VolumeTotal,fac_shield(i),
9478 c & " wshield",wshield
9479 c write(2,*) "TU",rpp(1,1),short,long,buff_shield
9483 C--------------------------------------------------------------------------
9484 double precision function tschebyshev(m,n,x,y)
9486 include "DIMENSIONS"
9488 double precision x(n),y,yy(0:maxvar),aux
9489 c Tschebyshev polynomial. Note that the first term is omitted
9490 c m=0: the constant term is included
9491 c m=1: the constant term is not included
9495 yy(i)=2*yy(1)*yy(i-1)-yy(i-2)
9504 C--------------------------------------------------------------------------
9505 double precision function gradtschebyshev(m,n,x,y)
9507 include "DIMENSIONS"
9509 double precision x(n+1),y,yy(0:maxvar),aux
9510 c Tschebyshev polynomial. Note that the first term is omitted
9511 c m=0: the constant term is included
9512 c m=1: the constant term is not included
9516 yy(i)=2*y*yy(i-1)-yy(i-2)
9520 aux=aux+x(i+1)*yy(i)*(i+1)
9521 C print *, x(i+1),yy(i),i
9526 c----------------------------------------------------------------------------
9527 double precision function sscale2(r,r_cut,r0,rlamb)
9529 double precision r,gamm,r_cut,r0,rlamb,rr
9531 c write (2,*) "r",r," r_cut",r_cut," r0",r0," rlamb",rlamb
9532 c write (2,*) "rr",rr
9533 if(rr.lt.r_cut-rlamb) then
9535 else if(rr.le.r_cut.and.rr.ge.r_cut-rlamb) then
9536 gamm=(rr-(r_cut-rlamb))/rlamb
9537 sscale2=1.0d0+gamm*gamm*(2*gamm-3.0d0)
9543 C-----------------------------------------------------------------------
9544 double precision function sscalgrad2(r,r_cut,r0,rlamb)
9546 double precision r,gamm,r_cut,r0,rlamb,rr
9548 if(rr.lt.r_cut-rlamb) then
9550 else if(rr.le.r_cut.and.rr.ge.r_cut-rlamb) then
9551 gamm=(rr-(r_cut-rlamb))/rlamb
9553 sscalgrad2=gamm*(6*gamm-6.0d0)/rlamb
9555 sscalgrad2=-gamm*(6*gamm-6.0d0)/rlamb
9562 c----------------------------------------------------------------------------
9563 subroutine e_saxs(Esaxs_constr)
9565 include 'DIMENSIONS'
9566 include 'DIMENSIONS.ZSCOPT'
9567 include 'DIMENSIONS.FREE'
9570 include "COMMON.SETUP"
9573 include 'COMMON.SBRIDGE'
9574 include 'COMMON.CHAIN'
9575 include 'COMMON.GEO'
9576 include 'COMMON.LOCAL'
9577 include 'COMMON.INTERACT'
9578 include 'COMMON.VAR'
9579 include 'COMMON.IOUNITS'
9580 include 'COMMON.DERIV'
9581 include 'COMMON.CONTROL'
9582 include 'COMMON.NAMES'
9583 include 'COMMON.FFIELD'
9584 include 'COMMON.LANGEVIN'
9586 double precision Esaxs_constr
9587 integer i,iint,j,k,l
9588 double precision PgradC(maxSAXS,3,maxres),
9589 & PgradX(maxSAXS,3,maxres),Pcalc(maxSAXS)
9591 double precision PgradC_(maxSAXS,3,maxres),
9592 & PgradX_(maxSAXS,3,maxres),Pcalc_(maxSAXS)
9594 double precision dk,dijCACA,dijCASC,dijSCCA,dijSCSC,
9595 & sigma2CACA,sigma2CASC,sigma2SCCA,sigma2SCSC,expCACA,expCASC,
9596 & expSCCA,expSCSC,CASCgrad,SCCAgrad,SCSCgrad,aux,auxC,auxC1,
9597 & auxX,auxX1,CACAgrad,Cnorm
9598 double precision sss2,ssgrad2,rrr,sscalgrad2,sscale2
9599 double precision dist
9601 c SAXS restraint penalty function
9603 write(iout,*) "------- SAXS penalty function start -------"
9604 write (iout,*) "nsaxs",nsaxs
9605 write (iout,*) "Esaxs: iatsc_s",iatsc_s," iatsc_e",iatsc_e
9606 write (iout,*) "Psaxs"
9608 write (iout,'(i5,e15.5)') i, Psaxs(i)
9611 Esaxs_constr = 0.0d0
9621 do i=iatsc_s,iatsc_e
9622 if (itype(i).eq.ntyp1) cycle
9623 do iint=1,nint_gr(i)
9624 do j=istart(i,iint),iend(i,iint)
9625 if (itype(j).eq.ntyp1) cycle
9628 dijCASC=dist(i,j+nres)
9629 dijSCCA=dist(i+nres,j)
9630 dijSCSC=dist(i+nres,j+nres)
9631 sigma2CACA=2.0d0/(pstok**2)
9632 sigma2CASC=4.0d0/(pstok**2+restok(itype(j))**2)
9633 sigma2SCCA=4.0d0/(pstok**2+restok(itype(i))**2)
9634 sigma2SCSC=4.0d0/(restok(itype(j))**2+restok(itype(i))**2)
9637 expCACA = dexp(-0.5d0*sigma2CACA*(dijCACA-dk)**2)
9638 if (itype(j).ne.10) then
9639 expCASC = dexp(-0.5d0*sigma2CASC*(dijCASC-dk)**2)
9643 if (itype(i).ne.10) then
9644 expSCCA = dexp(-0.5d0*sigma2SCCA*(dijSCCA-dk)**2)
9648 if (itype(i).ne.10 .and. itype(j).ne.10) then
9649 expSCSC = dexp(-0.5d0*sigma2SCSC*(dijSCSC-dk)**2)
9653 Pcalc(k) = Pcalc(k)+expCACA+expCASC+expSCCA+expSCSC
9655 write(iout,*) "i j k Pcalc",i,j,Pcalc(k)
9657 CACAgrad = sigma2CACA*(dijCACA-dk)*expCACA
9658 CASCgrad = sigma2CASC*(dijCASC-dk)*expCASC
9659 SCCAgrad = sigma2SCCA*(dijSCCA-dk)*expSCCA
9660 SCSCgrad = sigma2SCSC*(dijSCSC-dk)*expSCSC
9663 aux = CACAgrad*(C(l,j)-C(l,i))/dijCACA
9664 PgradC(k,l,i) = PgradC(k,l,i)-aux
9665 PgradC(k,l,j) = PgradC(k,l,j)+aux
9667 if (itype(j).ne.10) then
9668 aux = CASCgrad*(C(l,j+nres)-C(l,i))/dijCASC
9669 PgradC(k,l,i) = PgradC(k,l,i)-aux
9670 PgradC(k,l,j) = PgradC(k,l,j)+aux
9671 PgradX(k,l,j) = PgradX(k,l,j)+aux
9674 if (itype(i).ne.10) then
9675 aux = SCCAgrad*(C(l,j)-C(l,i+nres))/dijSCCA
9676 PgradX(k,l,i) = PgradX(k,l,i)-aux
9677 PgradC(k,l,i) = PgradC(k,l,i)-aux
9678 PgradC(k,l,j) = PgradC(k,l,j)+aux
9681 if (itype(i).ne.10 .and. itype(j).ne.10) then
9682 aux = SCSCgrad*(C(l,j+nres)-C(l,i+nres))/dijSCSC
9683 PgradC(k,l,i) = PgradC(k,l,i)-aux
9684 PgradC(k,l,j) = PgradC(k,l,j)+aux
9685 PgradX(k,l,i) = PgradX(k,l,i)-aux
9686 PgradX(k,l,j) = PgradX(k,l,j)+aux
9692 sigma2CACA=scal_rad**2*0.25d0/
9693 & (restok(itype(j))**2+restok(itype(i))**2)
9695 IF (saxs_cutoff.eq.0) THEN
9698 expCACA = dexp(-0.5d0*sigma2CACA*(dijCACA-dk)**2)
9699 Pcalc(k) = Pcalc(k)+expCACA
9700 CACAgrad = sigma2CACA*(dijCACA-dk)*expCACA
9702 aux = CACAgrad*(C(l,j)-C(l,i))/dijCACA
9703 PgradC(k,l,i) = PgradC(k,l,i)-aux
9704 PgradC(k,l,j) = PgradC(k,l,j)+aux
9708 rrr = saxs_cutoff*2.0d0/dsqrt(sigma2CACA)
9711 c write (2,*) "ijk",i,j,k
9712 sss2 = sscale2(dijCACA,rrr,dk,0.3d0)
9713 if (sss2.eq.0.0d0) cycle
9714 ssgrad2 = sscalgrad2(dijCACA,rrr,dk,0.3d0)
9715 expCACA = dexp(-0.5d0*sigma2CACA*(dijCACA-dk)**2)*sss2
9716 Pcalc(k) = Pcalc(k)+expCACA
9718 write(iout,*) "i j k Pcalc",i,j,Pcalc(k)
9720 CACAgrad = -sigma2CACA*(dijCACA-dk)*expCACA+
9721 & ssgrad2*expCACA/sss2
9724 aux = CACAgrad*(C(l,j)-C(l,i))/dijCACA
9725 PgradC(k,l,i) = PgradC(k,l,i)+aux
9726 PgradC(k,l,j) = PgradC(k,l,j)-aux
9735 if (nfgtasks.gt.1) then
9736 call MPI_Reduce(Pcalc(1),Pcalc_(1),nsaxs,MPI_DOUBLE_PRECISION,
9737 & MPI_SUM,king,FG_COMM,IERR)
9738 if (fg_rank.eq.king) then
9740 Pcalc(k) = Pcalc_(k)
9743 call MPI_Reduce(PgradC(k,1,1),PgradC_(k,1,1),3*maxsaxs*nres,
9744 & MPI_DOUBLE_PRECISION,MPI_SUM,king,FG_COMM,IERR)
9745 if (fg_rank.eq.king) then
9749 PgradC(k,l,i) = PgradC_(k,l,i)
9755 call MPI_Reduce(PgradX(k,1,1),PgradX_(k,1,1),3*maxsaxs*nres,
9756 & MPI_DOUBLE_PRECISION,MPI_SUM,king,FG_COMM,IERR)
9757 if (fg_rank.eq.king) then
9761 PgradX(k,l,i) = PgradX_(k,l,i)
9770 if (fg_rank.eq.king) then
9774 Cnorm = Cnorm + Pcalc(k)
9776 Esaxs_constr = dlog(Cnorm)-wsaxs0
9778 if (Pcalc(k).gt.0.0d0)
9779 & Esaxs_constr = Esaxs_constr - Psaxs(k)*dlog(Pcalc(k))
9781 write (iout,*) "k",k," Esaxs_constr",Esaxs_constr
9785 write (iout,*) "Cnorm",Cnorm," Esaxs_constr",Esaxs_constr
9795 & auxC = auxC +Psaxs(k)*PgradC(k,l,i)/Pcalc(k)
9796 auxC1 = auxC1+PgradC(k,l,i)
9798 auxX = auxX +Psaxs(k)*PgradX(k,l,i)/Pcalc(k)
9799 auxX1 = auxX1+PgradX(k,l,i)
9802 gsaxsC(l,i) = auxC - auxC1/Cnorm
9804 gsaxsX(l,i) = auxX - auxX1/Cnorm
9806 c write (iout,*) "l i",l,i," gradC",wsaxs*(auxC - auxC1/Cnorm),
9807 c * " gradX",wsaxs*(auxX - auxX1/Cnorm)
9815 c----------------------------------------------------------------------------
9816 subroutine e_saxsC(Esaxs_constr)
9818 include 'DIMENSIONS'
9819 include 'DIMENSIONS.ZSCOPT'
9820 include 'DIMENSIONS.FREE'
9823 include "COMMON.SETUP"
9826 include 'COMMON.SBRIDGE'
9827 include 'COMMON.CHAIN'
9828 include 'COMMON.GEO'
9829 include 'COMMON.LOCAL'
9830 include 'COMMON.INTERACT'
9831 include 'COMMON.VAR'
9832 include 'COMMON.IOUNITS'
9833 include 'COMMON.DERIV'
9834 include 'COMMON.CONTROL'
9835 include 'COMMON.NAMES'
9836 include 'COMMON.FFIELD'
9837 include 'COMMON.LANGEVIN'
9839 double precision Esaxs_constr
9840 integer i,iint,j,k,l
9841 double precision PgradC(3,maxres),PgradX(3,maxres),Pcalc,logPtot
9843 double precision gsaxsc_(3,maxres),gsaxsx_(3,maxres),logPtot_
9845 double precision dk,dijCASPH,dijSCSPH,
9846 & sigma2CA,sigma2SC,expCASPH,expSCSPH,
9847 & CASPHgrad,SCSPHgrad,aux,auxC,auxC1,
9849 c SAXS restraint penalty function
9851 write(iout,*) "------- SAXS penalty function start -------"
9852 write (iout,*) "nsaxs",nsaxs," isaxs_start",isaxs_start,
9853 & " isaxs_end",isaxs_end
9854 write (iout,*) "nnt",nnt," ntc",nct
9856 write(iout,'(a6,i5,3f10.5,5x,2f10.5)')
9857 & "CA",i,(C(j,i),j=1,3),pstok,restok(itype(i))
9860 write(iout,'(a6,i5,3f10.5)')"CSaxs",i,(Csaxs(j,i),j=1,3)
9863 Esaxs_constr = 0.0d0
9865 do j=isaxs_start,isaxs_end
9877 dijCASPH=dijCASPH+(C(l,i)-Csaxs(l,j))**2
9879 if (itype(i).ne.10) then
9881 dijSCSPH=dijSCSPH+(C(l,i+nres)-Csaxs(l,j))**2
9884 sigma2CA=2.0d0/pstok**2
9885 sigma2SC=4.0d0/restok(itype(i))**2
9886 expCASPH = dexp(-0.5d0*sigma2CA*dijCASPH)
9887 expSCSPH = dexp(-0.5d0*sigma2SC*dijSCSPH)
9888 Pcalc = Pcalc+expCASPH+expSCSPH
9890 write(*,*) "processor i j Pcalc",
9891 & MyRank,i,j,dijCASPH,dijSCSPH, Pcalc
9893 CASPHgrad = sigma2CA*expCASPH
9894 SCSPHgrad = sigma2SC*expSCSPH
9896 aux = (C(l,i+nres)-Csaxs(l,j))*SCSPHgrad
9897 PgradX(l,i) = PgradX(l,i) + aux
9898 PgradC(l,i) = PgradC(l,i)+(C(l,i)-Csaxs(l,j))*CASPHgrad+aux
9903 gsaxsc(l,i)=gsaxsc(l,i)+PgradC(l,i)/Pcalc
9904 gsaxsx(l,i)=gsaxsx(l,i)+PgradX(l,i)/Pcalc
9907 logPtot = logPtot - dlog(Pcalc)
9908 c print *,"me",me,MyRank," j",j," logPcalc",-dlog(Pcalc),
9909 c & " logPtot",logPtot
9912 if (nfgtasks.gt.1) then
9913 c write (iout,*) "logPtot before reduction",logPtot
9914 call MPI_Reduce(logPtot,logPtot_,1,MPI_DOUBLE_PRECISION,
9915 & MPI_SUM,king,FG_COMM,IERR)
9917 c write (iout,*) "logPtot after reduction",logPtot
9918 call MPI_Reduce(gsaxsC(1,1),gsaxsC_(1,1),3*nres,
9919 & MPI_DOUBLE_PRECISION,MPI_SUM,king,FG_COMM,IERR)
9920 if (fg_rank.eq.king) then
9923 gsaxsC(l,i) = gsaxsC_(l,i)
9927 call MPI_Reduce(gsaxsX(1,1),gsaxsX_(1,1),3*nres,
9928 & MPI_DOUBLE_PRECISION,MPI_SUM,king,FG_COMM,IERR)
9929 if (fg_rank.eq.king) then
9932 gsaxsX(l,i) = gsaxsX_(l,i)
9938 Esaxs_constr = logPtot