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'
24 double precision fact(6)
25 c write(iout, '(a,i2)')'Calling etotal ipot=',ipot
27 cd print *,'nnt=',nnt,' nct=',nct
29 C Compute the side-chain and electrostatic interaction energy
31 goto (101,102,103,104,105) ipot
32 C Lennard-Jones potential.
33 101 call elj(evdw,evdw_t)
34 cd print '(a)','Exit ELJ'
36 C Lennard-Jones-Kihara potential (shifted).
37 102 call eljk(evdw,evdw_t)
39 C Berne-Pechukas potential (dilated LJ, angular dependence).
40 103 call ebp(evdw,evdw_t)
42 C Gay-Berne potential (shifted LJ, angular dependence).
43 104 call egb(evdw,evdw_t)
45 C Gay-Berne-Vorobjev potential (shifted LJ, angular dependence).
46 105 call egbv(evdw,evdw_t)
47 C write(iout,*) 'po elektostatyce'
49 C Calculate electrostatic (H-bonding) energy of the main chain.
53 if (shield_mode.eq.1) then
55 else if (shield_mode.eq.2) then
58 call eelec(ees,evdw1,eel_loc,eello_turn3,eello_turn4)
59 C write(iout,*) 'po eelec'
61 C Calculate excluded-volume interaction energy between peptide groups
64 call escp(evdw2,evdw2_14)
66 c Calculate the bond-stretching energy
70 C write (iout,*) "estr",estr
72 C Calculate the disulfide-bridge and other energy and the contributions
73 C from other distance constraints.
74 cd print *,'Calling EHPB'
76 cd print *,'EHPB exitted succesfully.'
78 C Calculate the virtual-bond-angle energy.
80 C print *,'Bend energy finished.'
82 if (tor_mode.eq.0) then
85 C ebend kcc is Kubo cumulant clustered rigorous attemp to derive the
93 if (with_theta_constr) call etheta_constr(ethetacnstr)
94 c call ebend(ebe,ethetacnstr)
95 cd print *,'Bend energy finished.'
97 C Calculate the SC local energy.
100 C print *,'SCLOC energy finished.'
102 C Calculate the virtual-bond torsional energy.
104 if (wtor.gt.0.0d0) then
105 if (tor_mode.eq.0) then
106 call etor(etors,fact(1))
108 C etor kcc is Kubo cumulant clustered rigorous attemp to derive the
110 call etor_kcc(etors,fact(1))
116 if (ndih_constr.gt.0) call etor_constr(edihcnstr)
117 c print *,"Processor",myrank," computed Utor"
119 C 6/23/01 Calculate double-torsional energy
121 if ((wtor_d.gt.0.0d0).and.(tor_mode.eq.0)) then
122 call etor_d(etors_d,fact(2))
126 c print *,"Processor",myrank," computed Utord"
128 if (wsccor.gt.0.0d0) then
129 call eback_sc_corr(esccor)
134 if (wliptran.gt.0) then
135 call Eliptransfer(eliptran)
141 C 12/1/95 Multi-body terms
145 if (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0
146 & .or. wturn6.gt.0.0d0) then
147 c write(iout,*)"calling multibody_eello"
148 call multibody_eello(ecorr,ecorr5,ecorr6,eturn6,n_corr,n_corr1)
149 c write (iout,*) 'n_corr=',n_corr,' n_corr1=',n_corr1
150 c write (iout,*) ecorr,ecorr5,ecorr6,eturn6
157 if (wcorr4.eq.0.0d0 .and. wcorr.gt.0.0d0) then
158 c write (iout,*) "Calling multibody_hbond"
159 call multibody_hb(ecorr,ecorr5,ecorr6,n_corr,n_corr1)
162 c write (iout,*) "From Esaxs: Esaxs_constr",Esaxs_constr
163 if (nsaxs.gt.0 .and. saxs_mode.eq.0) then
164 call e_saxs(Esaxs_constr)
165 c write (iout,*) "From Esaxs: Esaxs_constr",Esaxs_constr
166 else if (nsaxs.gt.0 .and. saxs_mode.gt.0) then
167 call e_saxsC(Esaxs_constr)
168 c write (iout,*) "From EsaxsC: Esaxs_constr",Esaxs_constr
173 c write(iout,*) "TEST_ENE1 constr_homology=",constr_homology
174 if (constr_homology.ge.1) then
175 call e_modeller(ehomology_constr)
177 ehomology_constr=0.0d0
180 c write(iout,*) "TEST_ENE1 ehomology_constr=",ehomology_constr
182 C BARTEK for dfa test!
184 if (wdfa_dist.gt.0) call edfad(edfadis)
185 c write(iout,*)'edfad is finished!', wdfa_dist,edfadis
187 if (wdfa_tor.gt.0) call edfat(edfator)
188 c write(iout,*)'edfat is finished!', wdfa_tor,edfator
190 if (wdfa_nei.gt.0) call edfan(edfanei)
191 c write(iout,*)'edfan is finished!', wdfa_nei,edfanei
193 if (wdfa_beta.gt.0) call edfab(edfabet)
194 c write(iout,*)'edfab is finished!', wdfa_beta,edfabet
197 c write (iout,*) "ft(6)",fact(6)," evdw",evdw," evdw_t",evdw_t
199 if (shield_mode.gt.0) then
200 etot=fact(1)*wsc*(evdw+fact(6)*evdw_t)+fact(1)*wscp*evdw2
202 & +fact(1)*wvdwpp*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+wsaxs*esaxs_constr
209 & +wliptran*eliptran*esaxs_constr
210 & +wdfa_dist*edfadis+wdfa_tor*edfator+wdfa_nei*edfanei
213 etot=wsc*(evdw+fact(6)*evdw_t)+wscp*evdw2+welec*fact(1)*ees
215 & +wang*ebe+wtor*fact(1)*etors+wscloc*escloc
216 & +wstrain*ehpb+wcorr*fact(3)*ecorr+wcorr5*fact(4)*ecorr5
217 & +wcorr6*fact(5)*ecorr6+wturn4*fact(3)*eello_turn4
218 & +wturn3*fact(2)*eello_turn3+wturn6*fact(5)*eturn6
219 & +wel_loc*fact(2)*eel_loc+edihcnstr+wtor_d*fact(2)*etors_d
220 & +wbond*estr+wsccor*fact(1)*esccor+ethetacnstr
221 & +wliptran*eliptran+wsaxs*esaxs_constr
222 & +wdfa_dist*edfadis+wdfa_tor*edfator+wdfa_nei*edfanei
226 if (shield_mode.gt.0) then
227 etot=fact(1)wsc*(evdw+fact(6)*evdw_t)+fact(1)*wscp*evdw2
228 & +welec*fact(1)*(ees+evdw1)
229 & +wang*ebe+wtor*fact(1)*etors+wscloc*escloc
230 & +wstrain*ehpb+wcorr*fact(3)*ecorr+wcorr5*fact(4)*ecorr5
231 & +wcorr6*fact(5)*ecorr6+wturn4*fact(3)*eello_turn4
232 & +wturn3*fact(2)*eello_turn3+wturn6*fact(5)*eturn6
233 & +wel_loc*fact(2)*eel_loc+edihcnstr+wtor_d*fact(2)*etors_d
234 & +wbond*estr+wsccor*fact(1)*esccor+ethetacnstr
235 & +wliptran*eliptran+wsaxs*esaxs_constr
236 & +wdfa_dist*edfadis+wdfa_tor*edfator+wdfa_nei*edfanei
239 etot=wsc*(evdw+fact(6)*evdw_t)+wscp*evdw2
240 & +welec*fact(1)*(ees+evdw1)
241 & +wang*ebe+wtor*fact(1)*etors+wscloc*escloc
242 & +wstrain*ehpb+wcorr*fact(3)*ecorr+wcorr5*fact(4)*ecorr5
243 & +wcorr6*fact(5)*ecorr6+wturn4*fact(3)*eello_turn4
244 & +wturn3*fact(2)*eello_turn3+wturn6*fact(5)*eturn6
245 & +wel_loc*fact(2)*eel_loc+edihcnstr+wtor_d*fact(2)*etors_d
246 & +wbond*estr+wsccor*fact(1)*esccor+ethetacnstr
247 & +wliptran*eliptran+wsaxs*esaxs_constr
248 & +wdfa_dist*edfadis+wdfa_tor*edfator+wdfa_nei*edfanei
255 energia(2)=evdw2-evdw2_14
272 energia(8)=eello_turn3
273 energia(9)=eello_turn4
282 energia(20)=edihcnstr
285 energia(24)=ethetacnstr
286 energia(26)=esaxs_constr
287 energia(27)=ehomology_constr
295 if (isnan(etot).ne.0) energia(0)=1.0d+99
297 if (isnan(etot)) energia(0)=1.0d+99
302 idumm=proc_proc(etot,i)
304 call proc_proc(etot,i)
306 if(i.eq.1)energia(0)=1.0d+99
312 call enerprint(energia,fact)
316 C Sum up the components of the Cartesian gradient.
321 if (shield_mode.eq.0) then
322 gradc(j,i,icg)=wsc*gvdwc(j,i)+wscp*gvdwc_scp(j,i)+
323 & welec*fact(1)*gelc(j,i)+wvdwpp*gvdwpp(j,i)+
325 & wstrain*ghpbc(j,i)+
326 & wcorr*fact(3)*gradcorr(j,i)+
327 & wel_loc*fact(2)*gel_loc(j,i)+
328 & wturn3*fact(2)*gcorr3_turn(j,i)+
329 & wturn4*fact(3)*gcorr4_turn(j,i)+
330 & wcorr5*fact(4)*gradcorr5(j,i)+
331 & wcorr6*fact(5)*gradcorr6(j,i)+
332 & wturn6*fact(5)*gcorr6_turn(j,i)+
333 & wsccor*fact(2)*gsccorc(j,i)+
334 & wliptran*gliptranc(j,i)+
335 & wdfa_dist*gdfad(j,i)+
336 & wdfa_tor*gdfat(j,i)+
337 & wdfa_nei*gdfan(j,i)+
338 & wdfa_beta*gdfab(j,i)
339 gradx(j,i,icg)=wsc*gvdwx(j,i)+wscp*gradx_scp(j,i)+
341 & wstrain*ghpbx(j,i)+wcorr*gradxorr(j,i)+
342 & wsccor*fact(2)*gsccorx(j,i)
343 & +wliptran*gliptranx(j,i)
345 gradc(j,i,icg)=fact(1)*wsc*gvdwc(j,i)
346 & +fact(1)*wscp*gvdwc_scp(j,i)+
347 & welec*fact(1)*gelc(j,i)+fact(1)*wvdwpp*gvdwpp(j,i)+
349 & wstrain*ghpbc(j,i)+
350 & wcorr*fact(3)*gradcorr(j,i)+
351 & wel_loc*fact(2)*gel_loc(j,i)+
352 & wturn3*fact(2)*gcorr3_turn(j,i)+
353 & wturn4*fact(3)*gcorr4_turn(j,i)+
354 & wcorr5*fact(4)*gradcorr5(j,i)+
355 & wcorr6*fact(5)*gradcorr6(j,i)+
356 & wturn6*fact(5)*gcorr6_turn(j,i)+
357 & wsccor*fact(2)*gsccorc(j,i)
358 & +wliptran*gliptranc(j,i)
359 & +welec*gshieldc(j,i)
360 & +welec*gshieldc_loc(j,i)
361 & +wcorr*gshieldc_ec(j,i)
362 & +wcorr*gshieldc_loc_ec(j,i)
363 & +wturn3*gshieldc_t3(j,i)
364 & +wturn3*gshieldc_loc_t3(j,i)
365 & +wturn4*gshieldc_t4(j,i)
366 & +wturn4*gshieldc_loc_t4(j,i)
367 & +wel_loc*gshieldc_ll(j,i)
368 & +wel_loc*gshieldc_loc_ll(j,i)+
369 & wdfa_dist*gdfad(j,i)+
370 & wdfa_tor*gdfat(j,i)+
371 & wdfa_nei*gdfan(j,i)+
372 & wdfa_beta*gdfab(j,i)
373 gradx(j,i,icg)=fact(1)*wsc*gvdwx(j,i)
374 & +fact(1)*wscp*gradx_scp(j,i)+
376 & wstrain*ghpbx(j,i)+wcorr*gradxorr(j,i)+
377 & wsccor*fact(2)*gsccorx(j,i)
378 & +wliptran*gliptranx(j,i)
379 & +welec*gshieldx(j,i)
380 & +wcorr*gshieldx_ec(j,i)
381 & +wturn3*gshieldx_t3(j,i)
382 & +wturn4*gshieldx_t4(j,i)
383 & +wel_loc*gshieldx_ll(j,i)
389 if (shield_mode.eq.0) then
390 gradc(j,i,icg)=wsc*gvdwc(j,i)+wscp*gvdwc_scp(j,i)+
391 & welec*fact(1)*gelc(j,i)+wstrain*ghpbc(j,i)+
393 & wcorr*fact(3)*gradcorr(j,i)+
394 & wel_loc*fact(2)*gel_loc(j,i)+
395 & wturn3*fact(2)*gcorr3_turn(j,i)+
396 & wturn4*fact(3)*gcorr4_turn(j,i)+
397 & wcorr5*fact(4)*gradcorr5(j,i)+
398 & wcorr6*fact(5)*gradcorr6(j,i)+
399 & wturn6*fact(5)*gcorr6_turn(j,i)+
400 & wsccor*fact(2)*gsccorc(j,i)
401 & +wliptran*gliptranc(j,i)+
402 & wdfa_dist*gdfad(j,i)+
403 & wdfa_tor*gdfat(j,i)+
404 & wdfa_nei*gdfan(j,i)+
405 & wdfa_beta*gdfab(j,i)
407 gradx(j,i,icg)=wsc*gvdwx(j,i)+wscp*gradx_scp(j,i)+
409 & wstrain*ghpbx(j,i)+wcorr*gradxorr(j,i)+
410 & wsccor*fact(1)*gsccorx(j,i)
411 & +wliptran*gliptranx(j,i)
413 gradc(j,i,icg)=fact(1)*wsc*gvdwc(j,i)+
414 & fact(1)*wscp*gvdwc_scp(j,i)+
415 & welec*fact(1)*gelc(j,i)+wstrain*ghpbc(j,i)+
417 & wcorr*fact(3)*gradcorr(j,i)+
418 & wel_loc*fact(2)*gel_loc(j,i)+
419 & wturn3*fact(2)*gcorr3_turn(j,i)+
420 & wturn4*fact(3)*gcorr4_turn(j,i)+
421 & wcorr5*fact(4)*gradcorr5(j,i)+
422 & wcorr6*fact(5)*gradcorr6(j,i)+
423 & wturn6*fact(5)*gcorr6_turn(j,i)+
424 & wsccor*fact(2)*gsccorc(j,i)
425 & +wliptran*gliptranc(j,i)
426 & +welec*gshieldc(j,i)
427 & +welec*gshieldc_loc(j,i)
428 & +wcorr*gshieldc_ec(j,i)
429 & +wcorr*gshieldc_loc_ec(j,i)
430 & +wturn3*gshieldc_t3(j,i)
431 & +wturn3*gshieldc_loc_t3(j,i)
432 & +wturn4*gshieldc_t4(j,i)
433 & +wturn4*gshieldc_loc_t4(j,i)
434 & +wel_loc*gshieldc_ll(j,i)
435 & +wel_loc*gshieldc_loc_ll(j,i)+
436 & wdfa_dist*gdfad(j,i)+
437 & wdfa_tor*gdfat(j,i)+
438 & wdfa_nei*gdfan(j,i)+
439 & wdfa_beta*gdfab(j,i)
440 gradx(j,i,icg)=fact(1)*wsc*gvdwx(j,i)+
441 & fact(1)*wscp*gradx_scp(j,i)+
443 & wstrain*ghpbx(j,i)+wcorr*gradxorr(j,i)+
444 & wsccor*fact(1)*gsccorx(j,i)
445 & +wliptran*gliptranx(j,i)
446 & +welec*gshieldx(j,i)
447 & +wcorr*gshieldx_ec(j,i)
448 & +wturn3*gshieldx_t3(j,i)
449 & +wturn4*gshieldx_t4(j,i)
450 & +wel_loc*gshieldx_ll(j,i)
459 gloc(i,icg)=gloc(i,icg)+wcorr*fact(3)*gcorr_loc(i)
460 & +wcorr5*fact(4)*g_corr5_loc(i)
461 & +wcorr6*fact(5)*g_corr6_loc(i)
462 & +wturn4*fact(3)*gel_loc_turn4(i)
463 & +wturn3*fact(2)*gel_loc_turn3(i)
464 & +wturn6*fact(5)*gel_loc_turn6(i)
465 & +wel_loc*fact(2)*gel_loc_loc(i)
466 c & +wsccor*fact(1)*gsccor_loc(i)
467 c BYLA ROZNICA Z CLUSTER< OSTATNIA LINIA DODANA
470 if (dyn_ss) call dyn_set_nss
473 C------------------------------------------------------------------------
474 subroutine enerprint(energia,fact)
475 implicit real*8 (a-h,o-z)
477 include 'DIMENSIONS.ZSCOPT'
478 include 'COMMON.IOUNITS'
479 include 'COMMON.FFIELD'
480 include 'COMMON.SBRIDGE'
481 include 'COMMON.CONTROL'
482 double precision energia(0:max_ene),fact(6)
484 evdw=energia(1)+fact(6)*energia(21)
486 evdw2=energia(2)+energia(17)
498 eello_turn3=energia(8)
499 eello_turn4=energia(9)
500 eello_turn6=energia(10)
507 edihcnstr=energia(20)
509 ethetacnstr=energia(24)
512 ehomology_constr=energia(27)
514 edfadis = energia(28)
515 edfator = energia(29)
516 edfanei = energia(30)
517 edfabet = energia(31)
519 write(iout,10) evdw,wsc,evdw2,wscp,ees,welec*fact(1),evdw1,wvdwpp,
520 & estr,wbond,ebe,wang,escloc,wscloc,etors,wtor*fact(1),
521 & etors_d,wtor_d*fact(2),ehpb,wstrain,
523 & ecorr,wcorr*fact(3),
524 & ecorr5,wcorr5*fact(4),ecorr6,wcorr6*fact(5),
527 & wel_loc*fact(2),eello_turn3,wturn3*fact(2),
528 & eello_turn4,wturn4*fact(3),
530 & eello_turn6,wturn6*fact(5),
532 & esccor,wsccor*fact(1),edihcnstr,
533 & ethetacnstr,ebr*nss,Uconst,wumb,eliptran,wliptran,Eafmforc,
534 & etube,wtube,esaxs,wsaxs,ehomology_constr,
535 & edfadis,wdfa_dist,edfator,wdfa_tor,edfanei,wdfa_nei,
538 10 format (/'Virtual-chain energies:'//
539 & 'EVDW= ',1pE16.6,' WEIGHT=',1pE16.6,' (SC-SC)'/
540 & 'EVDW2= ',1pE16.6,' WEIGHT=',1pE16.6,' (SC-p)'/
541 & 'EES= ',1pE16.6,' WEIGHT=',1pE16.6,' (p-p)'/
542 & 'EVDWPP=',1pE16.6,' WEIGHT=',1pE16.6,' (p-p VDW)'/
543 & 'ESTR= ',1pE16.6,' WEIGHT=',1pE16.6,' (stretching)'/
544 & 'EBE= ',1pE16.6,' WEIGHT=',1pE16.6,' (bending)'/
545 & 'ESC= ',1pE16.6,' WEIGHT=',1pE16.6,' (SC local)'/
546 & 'ETORS= ',1pE16.6,' WEIGHT=',1pE16.6,' (torsional)'/
547 & 'ETORSD=',1pE16.6,' WEIGHT=',1pE16.6,' (double torsional)'/
548 & 'EHBP= ',1pE16.6,' WEIGHT=',1pE16.6,
549 & ' (SS bridges & dist. cnstr.)'/
551 & 'ECORR4=',1pE16.6,' WEIGHT=',1pE16.6,' (multi-body)'/
552 & 'ECORR5=',1pE16.6,' WEIGHT=',1pE16.6,' (multi-body)'/
553 & 'ECORR6=',1pE16.6,' WEIGHT=',1pE16.6,' (multi-body)'/
555 & 'EELLO= ',1pE16.6,' WEIGHT=',1pE16.6,' (electrostatic-local)'/
556 & 'ETURN3=',1pE16.6,' WEIGHT=',1pE16.6,' (turns, 3rd order)'/
557 & 'ETURN4=',1pE16.6,' WEIGHT=',1pE16.6,' (turns, 4th order)'/
559 & 'ETURN6=',1pE16.6,' WEIGHT=',1pE16.6,' (turns, 6th order)'/
561 & 'ESCCOR=',1pE16.6,' WEIGHT=',1pE16.6,' (backbone-rotamer corr)'/
562 & 'EDIHC= ',1pE16.6,' (virtual-bond dihedral angle restraints)'/
563 & 'ETHETC=',1pE16.6,' (virtual-bond angle restraints)'/
564 & 'ESS= ',1pE16.6,' (disulfide-bridge intrinsic energy)'/
565 & 'UCONST=',1pE16.6,' WEIGHT=',1pE16.6' (umbrella restraints)'/
566 & 'ELT= ',1pE16.6,' WEIGHT=',1pE16.6,' (Lipid transfer)'/
567 & 'EAFM= ',1pE16.6,' (atomic-force microscopy)'/
568 & 'ETUBE= ',1pE16.6,' WEIGHT=',1pE16.6,' (tube confinment)'/
569 & 'E_SAXS=',1pE16.6,' WEIGHT=',1pE16.6,' (SAXS restraints)'/
570 & 'H_CONS=',1pE16.6,' (Homology model constraints energy)'/
571 & 'EDFAD= ',1pE16.6,' WEIGHT=',1pE16.6,' (DFA distance energy)'/
572 & 'EDFAT= ',1pE16.6,' WEIGHT=',1pE16.6,' (DFA torsion energy)'/
573 & 'EDFAN= ',1pE16.6,' WEIGHT=',1pE16.6,' (DFA NCa energy)'/
574 & 'EDFAB= ',1pE16.6,' WEIGHT=',1pE16.6,' (DFA Beta energy)'/
575 & 'ETOT= ',1pE16.6,' (total)')
578 write (iout,10) evdw,wsc,evdw2,wscp,ees,welec*fact(1),
579 & estr,wbond,ebe,wang,escloc,wscloc,etors,wtor*fact(1),
580 & etors_d,wtor_d*fact(2),ehpb,wstrain,
582 & ecorr,wcorr*fact(3),
583 & ecorr5,wcorr5*fact(4),ecorr6,wcorr6*fact(5),
585 & eel_loc,wel_loc*fact(2),eello_turn3,wturn3*fact(2),
586 & eello_turn4,wturn4*fact(3),
588 & eello_turn6,wturn6*fact(5),
590 & esccor,wsccor*fact(1),edihcnstr,
591 & ethetacnstr,ebr*nss,Uconst,wumb,eliptran,wliptran,Eafmforc,
592 & etube,wtube,esaxs,wsaxs,ehomology_constr,
593 & edfadis,wdfa_dist,edfator,wdfa_tor,edfanei,wdfa_nei,
596 10 format (/'Virtual-chain energies:'//
597 & 'EVDW= ',1pE16.6,' WEIGHT=',1pE16.6,' (SC-SC)'/
598 & 'EVDW2= ',1pE16.6,' WEIGHT=',1pE16.6,' (SC-p)'/
599 & 'EES= ',1pE16.6,' WEIGHT=',1pE16.6,' (p-p)'/
600 & 'ESTR= ',1pE16.6,' WEIGHT=',1pE16.6,' (stretching)'/
601 & 'EBE= ',1pE16.6,' WEIGHT=',1pE16.6,' (bending)'/
602 & 'ESC= ',1pE16.6,' WEIGHT=',1pE16.6,' (SC local)'/
603 & 'ETORS= ',1pE16.6,' WEIGHT=',1pE16.6,' (torsional)'/
604 & 'ETORSD=',1pE16.6,' WEIGHT=',1pE16.6,' (double torsional)'/
605 & 'EHBP= ',1pE16.6,' WEIGHT=',1pE16.6,
606 & ' (SS bridges & dist. restr.)'/
608 & 'ECORR4=',1pE16.6,' WEIGHT=',1pE16.6,' (multi-body)'/
609 & 'ECORR5=',1pE16.6,' WEIGHT=',1pE16.6,' (multi-body)'/
610 & 'ECORR6=',1pE16.6,' WEIGHT=',1pE16.6,' (multi-body)'/
612 & 'EELLO= ',1pE16.6,' WEIGHT=',1pE16.6,' (electrostatic-local)'/
613 & 'ETURN3=',1pE16.6,' WEIGHT=',1pE16.6,' (turns, 3rd order)'/
614 & 'ETURN4=',1pE16.6,' WEIGHT=',1pE16.6,' (turns, 4th order)'/
616 & 'ETURN6=',1pE16.6,' WEIGHT=',1pE16.6,' (turns, 6th order)'/
618 & 'ESCCOR=',1pE16.6,' WEIGHT=',1pE16.6,' (backbone-rotamer corr)'/
619 & 'EDIHC= ',1pE16.6,' (virtual-bond dihedral angle restraints)'/
620 & 'ETHETC=',1pE16.6,' (virtual-bond angle restraints)'/
621 & 'ESS= ',1pE16.6,' (disulfide-bridge intrinsic energy)'/
622 & 'UCONST=',1pE16.6,' WEIGHT=',1pE16.6' (umbrella restraints)'/
623 & 'ELT= ',1pE16.6,' WEIGHT=',1pE16.6,' (Lipid transfer)'/
624 & 'EAFM= ',1pE16.6,' (atomic-force microscopy)'/
625 & 'ETUBE= ',1pE16.6,' WEIGHT=',1pE16.6,' (tube confinment)'/
626 & 'E_SAXS=',1pE16.6,' WEIGHT=',1pE16.6,' (SAXS restraints)'/
627 & 'H_CONS=',1pE16.6,' (Homology model constraints energy)'/
628 & 'EDFAD= ',1pE16.6,' WEIGHT=',1pE16.6,' (DFA distance energy)'/
629 & 'EDFAT= ',1pE16.6,' WEIGHT=',1pE16.6,' (DFA torsion energy)'/
630 & 'EDFAN= ',1pE16.6,' WEIGHT=',1pE16.6,' (DFA NCa energy)'/
631 & 'EDFAB= ',1pE16.6,' WEIGHT=',1pE16.6,' (DFA Beta energy)'/
632 & 'ETOT= ',1pE16.6,' (total)')
636 C-----------------------------------------------------------------------
637 subroutine elj(evdw,evdw_t)
639 C This subroutine calculates the interaction energy of nonbonded side chains
640 C assuming the LJ potential of interaction.
642 implicit real*8 (a-h,o-z)
644 include 'DIMENSIONS.ZSCOPT'
645 include "DIMENSIONS.COMPAR"
646 parameter (accur=1.0d-10)
649 include 'COMMON.LOCAL'
650 include 'COMMON.CHAIN'
651 include 'COMMON.DERIV'
652 include 'COMMON.INTERACT'
653 include 'COMMON.TORSION'
654 include 'COMMON.ENEPS'
655 include 'COMMON.SBRIDGE'
656 include 'COMMON.NAMES'
657 include 'COMMON.IOUNITS'
659 include 'COMMON.CONTACTS'
660 include 'COMMON.CONTMAT'
665 cd print *,'Entering ELJ nnt=',nnt,' nct=',nct,' expon=',expon
669 eneps_temp(j,i)=0.0d0
678 if (itypi.eq.ntyp1) cycle
679 itypi1=iabs(itype(i+1))
686 C Calculate SC interaction energy.
689 cd write (iout,*) 'i=',i,' iint=',iint,' istart=',istart(i,iint),
690 cd & 'iend=',iend(i,iint)
691 do j=istart(i,iint),iend(i,iint)
693 if (itypj.eq.ntyp1) cycle
697 C Change 12/1/95 to calculate four-body interactions
698 rij=xj*xj+yj*yj+zj*zj
702 if (sss1.eq.0.0d0) cycle
703 sssgrad1=sscagrad(sqrij)
704 c write (iout,*)'i=',i,' j=',j,' itypi=',itypi,' itypj=',itypj
705 eps0ij=eps(itypi,itypj)
710 ij=icant(itypi,itypj)
712 eneps_temp(1,ij)=eneps_temp(1,ij)+e1/dabs(eps0ij)
713 eneps_temp(2,ij)=eneps_temp(2,ij)+e2/eps0ij
716 cd sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
717 cd epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
718 cd write (iout,'(2(a3,i3,2x),6(1pd12.4)/2(3(1pd12.4),5x)/)')
719 cd & restyp(itypi),i,restyp(itypj),j,aa(itypi,itypj),
720 cd & bb(itypi,itypj),1.0D0/dsqrt(rrij),evdwij,epsi,sigm,
721 cd & (c(k,i),k=1,3),(c(k,j),k=1,3)
722 if (bb.gt.0.0d0) then
723 evdw=evdw+sss1*evdwij
725 evdw_t=evdw_t+sss1*evdwij
729 C Calculate the components of the gradient in DC and X
731 fac=-rrij*(e1+evdwij)*sss1
732 & +evdwij*sssgrad1/sqrij/expon
737 gvdwx(k,i)=gvdwx(k,i)-gg(k)
738 gvdwx(k,j)=gvdwx(k,j)+gg(k)
742 gvdwc(l,k)=gvdwc(l,k)+gg(l)
748 C 12/1/95, revised on 5/20/97
750 C Calculate the contact function. The ith column of the array JCONT will
751 C contain the numbers of atoms that make contacts with the atom I (of numbers
752 C greater than I). The arrays FACONT and GACONT will contain the values of
753 C the contact function and its derivative.
755 C Uncomment next line, if the correlation interactions include EVDW explicitly.
756 c if (j.gt.i+1 .and. evdwij.le.0.0D0) then
757 C Uncomment next line, if the correlation interactions are contact function only
758 if (j.gt.i+1.and. eps0ij.gt.0.0D0) then
760 sigij=sigma(itypi,itypj)
761 r0ij=rs0(itypi,itypj)
763 C Check whether the SC's are not too far to make a contact.
766 call gcont(rij,rcut,1.0d0,0.2d0*rcut,fcont,fprimcont)
767 C Add a new contact, if the SC's are close enough, but not too close (r<sigma).
769 if (fcont.gt.0.0D0) then
770 C If the SC-SC distance if close to sigma, apply spline.
771 cAdam call gcont(-rij,-1.03d0*sigij,2.0d0*sigij,1.0d0,
772 cAdam & fcont1,fprimcont1)
773 cAdam fcont1=1.0d0-fcont1
774 cAdam if (fcont1.gt.0.0d0) then
775 cAdam fprimcont=fprimcont*fcont1+fcont*fprimcont1
776 cAdam fcont=fcont*fcont1
778 C Uncomment following 4 lines to have the geometric average of the epsilon0's
779 cga eps0ij=1.0d0/dsqrt(eps0ij)
781 cga gg(k)=gg(k)*eps0ij
783 cga eps0ij=-evdwij*eps0ij
784 C Uncomment for AL's type of SC correlation interactions.
786 num_conti=num_conti+1
788 facont(num_conti,i)=fcont*eps0ij
789 fprimcont=eps0ij*fprimcont/rij
791 cAdam gacont(1,num_conti,i)=-fprimcont*xj+fcont*gg(1)
792 cAdam gacont(2,num_conti,i)=-fprimcont*yj+fcont*gg(2)
793 cAdam gacont(3,num_conti,i)=-fprimcont*zj+fcont*gg(3)
794 C Uncomment following 3 lines for Skolnick's type of SC correlation.
795 gacont(1,num_conti,i)=-fprimcont*xj
796 gacont(2,num_conti,i)=-fprimcont*yj
797 gacont(3,num_conti,i)=-fprimcont*zj
798 cd write (iout,'(2i5,2f10.5)') i,j,rij,facont(num_conti,i)
799 cd write (iout,'(2i3,3f10.5)')
800 cd & i,j,(gacont(kk,num_conti,i),kk=1,3)
808 num_cont(i)=num_conti
814 gvdwc(j,i)=expon*gvdwc(j,i)
815 gvdwx(j,i)=expon*gvdwx(j,i)
819 C******************************************************************************
823 C To save time, the factor of EXPON has been extracted from ALL components
824 C of GVDWC and GRADX. Remember to multiply them by this factor before further
827 C******************************************************************************
830 C-----------------------------------------------------------------------------
831 subroutine eljk(evdw,evdw_t)
833 C This subroutine calculates the interaction energy of nonbonded side chains
834 C assuming the LJK potential of interaction.
836 implicit real*8 (a-h,o-z)
838 include 'DIMENSIONS.ZSCOPT'
839 include "DIMENSIONS.COMPAR"
842 include 'COMMON.LOCAL'
843 include 'COMMON.CHAIN'
844 include 'COMMON.DERIV'
845 include 'COMMON.INTERACT'
846 include 'COMMON.ENEPS'
847 include 'COMMON.IOUNITS'
848 include 'COMMON.NAMES'
853 c print *,'Entering ELJK nnt=',nnt,' nct=',nct,' expon=',expon
856 eneps_temp(j,i)=0.0d0
863 if (itypi.eq.ntyp1) cycle
864 itypi1=iabs(itype(i+1))
869 C Calculate SC interaction energy.
872 do j=istart(i,iint),iend(i,iint)
874 if (itypj.eq.ntyp1) cycle
878 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
880 e_augm=augm(itypi,itypj)*fac_augm
884 if (sss1.eq.0.0d0) cycle
885 sssgrad1=sscagrad(rij)
886 r_shift_inv=1.0D0/(rij+r0(itypi,itypj)-sigma(itypi,itypj))
887 fac=r_shift_inv**expon
891 ij=icant(itypi,itypj)
892 eneps_temp(1,ij)=eneps_temp(1,ij)+(e1+a_augm)
893 & /dabs(eps(itypi,itypj))
894 eneps_temp(2,ij)=eneps_temp(2,ij)+e2/eps(itypi,itypj)
895 cd sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
896 cd epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
897 cd write (iout,'(2(a3,i3,2x),8(1pd12.4)/2(3(1pd12.4),5x)/)')
898 cd & restyp(itypi),i,restyp(itypj),j,aa(itypi,itypj),
899 cd & bb(itypi,itypj),augm(itypi,itypj),epsi,sigm,
900 cd & sigma(itypi,itypj),1.0D0/dsqrt(rrij),evdwij,
901 cd & (c(k,i),k=1,3),(c(k,j),k=1,3)
902 if (bb.gt.0.0d0) then
903 evdw=evdw+evdwij*sss1
905 evdw_t=evdw_t+evdwij*sss1
909 C Calculate the components of the gradient in DC and X
911 fac=(-2.0D0*rrij*e_augm-r_inv_ij*r_shift_inv*(e1+e1+e2))*sss1
912 & +evdwij*sssgrad1*r_inv_ij/expon
917 gvdwx(k,i)=gvdwx(k,i)-gg(k)
918 gvdwx(k,j)=gvdwx(k,j)+gg(k)
922 gvdwc(l,k)=gvdwc(l,k)+gg(l)
932 gvdwc(j,i)=expon*gvdwc(j,i)
933 gvdwx(j,i)=expon*gvdwx(j,i)
939 C-----------------------------------------------------------------------------
940 subroutine ebp(evdw,evdw_t)
942 C This subroutine calculates the interaction energy of nonbonded side chains
943 C assuming the Berne-Pechukas potential of interaction.
945 implicit real*8 (a-h,o-z)
947 include 'DIMENSIONS.ZSCOPT'
948 include "DIMENSIONS.COMPAR"
951 include 'COMMON.LOCAL'
952 include 'COMMON.CHAIN'
953 include 'COMMON.DERIV'
954 include 'COMMON.NAMES'
955 include 'COMMON.INTERACT'
956 include 'COMMON.ENEPS'
957 include 'COMMON.IOUNITS'
958 include 'COMMON.CALC'
960 c double precision rrsave(maxdim)
966 eneps_temp(j,i)=0.0d0
971 c print *,'Entering EBP nnt=',nnt,' nct=',nct,' expon=',expon
972 c if (icall.eq.0) then
980 if (itypi.eq.ntyp1) cycle
981 itypi1=iabs(itype(i+1))
985 dxi=dc_norm(1,nres+i)
986 dyi=dc_norm(2,nres+i)
987 dzi=dc_norm(3,nres+i)
988 dsci_inv=vbld_inv(i+nres)
990 C Calculate SC interaction energy.
993 do j=istart(i,iint),iend(i,iint)
996 if (itypj.eq.ntyp1) cycle
997 dscj_inv=vbld_inv(j+nres)
998 chi1=chi(itypi,itypj)
999 chi2=chi(itypj,itypi)
1006 alf12=0.5D0*(alf1+alf2)
1007 C For diagnostics only!!!
1020 dxj=dc_norm(1,nres+j)
1021 dyj=dc_norm(2,nres+j)
1022 dzj=dc_norm(3,nres+j)
1023 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
1024 cd if (icall.eq.0) then
1030 sss1=sscale(1.0d0/rij)
1031 if (sss1.eq.0.0d0) cycle
1032 sssgrad1=sscagrad(1.0d0/rij)
1034 C Calculate the angle-dependent terms of energy & contributions to derivatives.
1036 C Calculate whole angle-dependent part of epsilon and contributions
1037 C to its derivatives
1038 fac=(rrij*sigsq)**expon2
1041 evdwij=eps1*eps2rt*eps3rt*(e1+e2)
1042 eps2der=evdwij*eps3rt
1043 eps3der=evdwij*eps2rt
1044 evdwij=evdwij*eps2rt*eps3rt
1045 ij=icant(itypi,itypj)
1046 aux=eps1*eps2rt**2*eps3rt**2
1047 eneps_temp(1,ij)=eneps_temp(1,ij)+e1*aux
1048 & /dabs(eps(itypi,itypj))
1049 eneps_temp(2,ij)=eneps_temp(2,ij)+e2*aux/eps(itypi,itypj)
1050 if (bb.gt.0.0d0) then
1051 evdw=evdw+sss1*evdwij
1053 evdw_t=evdw_t+sss1*evdwij
1057 sigm=dabs(aa/bb)**(1.0D0/6.0D0)
1059 write (iout,'(2(a3,i3,2x),15(0pf7.3))')
1060 & restyp(itypi),i,restyp(itypj),j,
1061 & epsi,sigm,chi1,chi2,chip1,chip2,
1062 & eps1,eps2rt**2,eps3rt**2,1.0D0/dsqrt(sigsq),
1063 & om1,om2,om12,1.0D0/dsqrt(rrij),
1066 C Calculate gradient components.
1067 e1=e1*eps1*eps2rt**2*eps3rt**2
1068 fac=-expon*(e1+evdwij)
1071 & +evdwij*sssgrad1/sss1*rij
1072 C Calculate radial part of the gradient
1076 C Calculate the angular part of the gradient and sum add the contributions
1077 C to the appropriate components of the Cartesian gradient.
1086 C-----------------------------------------------------------------------------
1087 subroutine egb(evdw,evdw_t)
1089 C This subroutine calculates the interaction energy of nonbonded side chains
1090 C assuming the Gay-Berne potential of interaction.
1092 implicit real*8 (a-h,o-z)
1093 include 'DIMENSIONS'
1094 include 'DIMENSIONS.ZSCOPT'
1095 include "DIMENSIONS.COMPAR"
1096 include 'COMMON.CONTROL'
1097 include 'COMMON.GEO'
1098 include 'COMMON.VAR'
1099 include 'COMMON.LOCAL'
1100 include 'COMMON.CHAIN'
1101 include 'COMMON.DERIV'
1102 include 'COMMON.NAMES'
1103 include 'COMMON.INTERACT'
1104 include 'COMMON.ENEPS'
1105 include 'COMMON.IOUNITS'
1106 include 'COMMON.CALC'
1107 include 'COMMON.SBRIDGE'
1110 integer icant,xshift,yshift,zshift
1114 eneps_temp(j,i)=0.0d0
1117 c print *,'Entering EGB nnt=',nnt,' nct=',nct,' expon=',expon
1121 c if (icall.gt.0) lprn=.true.
1123 do i=iatsc_s,iatsc_e
1124 itypi=iabs(itype(i))
1125 if (itypi.eq.ntyp1) cycle
1126 itypi1=iabs(itype(i+1))
1130 C returning the ith atom to box
1132 if (xi.lt.0) xi=xi+boxxsize
1134 if (yi.lt.0) yi=yi+boxysize
1136 if (zi.lt.0) zi=zi+boxzsize
1137 if ((zi.gt.bordlipbot)
1138 &.and.(zi.lt.bordliptop)) then
1139 C the energy transfer exist
1140 if (zi.lt.buflipbot) then
1141 C what fraction I am in
1143 & ((zi-bordlipbot)/lipbufthick)
1144 C lipbufthick is thickenes of lipid buffore
1145 sslipi=sscalelip(fracinbuf)
1146 ssgradlipi=-sscagradlip(fracinbuf)/lipbufthick
1147 elseif (zi.gt.bufliptop) then
1148 fracinbuf=1.0d0-((bordliptop-zi)/lipbufthick)
1149 sslipi=sscalelip(fracinbuf)
1150 ssgradlipi=sscagradlip(fracinbuf)/lipbufthick
1160 dxi=dc_norm(1,nres+i)
1161 dyi=dc_norm(2,nres+i)
1162 dzi=dc_norm(3,nres+i)
1163 dsci_inv=vbld_inv(i+nres)
1165 C Calculate SC interaction energy.
1167 do iint=1,nint_gr(i)
1168 do j=istart(i,iint),iend(i,iint)
1169 IF (dyn_ss_mask(i).and.dyn_ss_mask(j)) THEN
1170 call dyn_ssbond_ene(i,j,evdwij)
1172 C write (iout,'(a6,2i5,0pf7.3,a3,2f10.3)')
1173 C & 'evdw',i,j,evdwij,' ss',evdw,evdw_t
1174 C triple bond artifac removal
1175 do k=j+1,iend(i,iint)
1176 C search over all next residues
1177 if (dyn_ss_mask(k)) then
1178 C check if they are cysteins
1179 C write(iout,*) 'k=',k
1180 call triple_ssbond_ene(i,j,k,evdwij)
1181 C call the energy function that removes the artifical triple disulfide
1182 C bond the soubroutine is located in ssMD.F
1184 C write (iout,'(a6,2i5,0pf7.3,a3,2f10.3)')
1185 C & 'evdw',i,j,evdwij,'tss',evdw,evdw_t
1186 endif!dyn_ss_mask(k)
1190 itypj=iabs(itype(j))
1191 if (itypj.eq.ntyp1) cycle
1192 dscj_inv=vbld_inv(j+nres)
1193 sig0ij=sigma(itypi,itypj)
1194 chi1=chi(itypi,itypj)
1195 chi2=chi(itypj,itypi)
1202 alf12=0.5D0*(alf1+alf2)
1203 C For diagnostics only!!!
1216 C returning jth atom to box
1218 if (xj.lt.0) xj=xj+boxxsize
1220 if (yj.lt.0) yj=yj+boxysize
1222 if (zj.lt.0) zj=zj+boxzsize
1223 if ((zj.gt.bordlipbot)
1224 &.and.(zj.lt.bordliptop)) then
1225 C the energy transfer exist
1226 if (zj.lt.buflipbot) then
1227 C what fraction I am in
1229 & ((zj-bordlipbot)/lipbufthick)
1230 C lipbufthick is thickenes of lipid buffore
1231 sslipj=sscalelip(fracinbuf)
1232 ssgradlipj=-sscagradlip(fracinbuf)/lipbufthick
1233 elseif (zj.gt.bufliptop) then
1234 fracinbuf=1.0d0-((bordliptop-zj)/lipbufthick)
1235 sslipj=sscalelip(fracinbuf)
1236 ssgradlipj=sscagradlip(fracinbuf)/lipbufthick
1245 aa=aa_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0
1246 & +aa_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
1247 bb=bb_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0
1248 & +bb_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
1249 C if (aa.ne.aa_aq(itypi,itypj)) then
1251 C write(iout,*) "tu,", i,j,aa_aq(itypi,itypj)-aa,
1252 C & bb_aq(itypi,itypj)-bb,
1256 C write(iout,*),aa,aa_lip(itypi,itypj),aa_aq(itypi,itypj)
1257 C checking the distance
1258 dist_init=(xj-xi)**2+(yj-yi)**2+(zj-zi)**2
1263 C finding the closest
1267 xj=xj_safe+xshift*boxxsize
1268 yj=yj_safe+yshift*boxysize
1269 zj=zj_safe+zshift*boxzsize
1270 dist_temp=(xj-xi)**2+(yj-yi)**2+(zj-zi)**2
1271 if(dist_temp.lt.dist_init) then
1281 if (subchap.eq.1) then
1291 dxj=dc_norm(1,nres+j)
1292 dyj=dc_norm(2,nres+j)
1293 dzj=dc_norm(3,nres+j)
1294 c write (iout,*) i,j,xj,yj,zj
1295 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
1297 sss=sscale(1.0d0/rij)
1298 sssgrad=sscagrad(1.0d0/rij)
1299 if (sss.le.0.0) cycle
1300 C Calculate angle-dependent terms of energy and contributions to their
1305 sig=sig0ij*dsqrt(sigsq)
1306 rij_shift=1.0D0/rij-sig+sig0ij
1307 C I hate to put IF's in the loops, but here don't have another choice!!!!
1308 if (rij_shift.le.0.0D0) then
1313 c---------------------------------------------------------------
1314 rij_shift=1.0D0/rij_shift
1315 fac=rij_shift**expon
1318 evdwij=eps1*eps2rt*eps3rt*(e1+e2)
1319 eps2der=evdwij*eps3rt
1320 eps3der=evdwij*eps2rt
1321 evdwij=evdwij*eps2rt*eps3rt
1323 evdw=evdw+evdwij*sss
1325 evdw_t=evdw_t+evdwij*sss
1327 ij=icant(itypi,itypj)
1328 aux=eps1*eps2rt**2*eps3rt**2
1329 eneps_temp(1,ij)=eneps_temp(1,ij)+aux*e1
1330 & /dabs(eps(itypi,itypj))
1331 eneps_temp(2,ij)=eneps_temp(2,ij)+aux*e2/eps(itypi,itypj)
1332 c write (iout,*) "i",i," j",j," itypi",itypi," itypj",itypj,
1333 c & " ij",ij," eneps",aux*e1/dabs(eps(itypi,itypj)),
1334 c & aux*e2/eps(itypi,itypj)
1336 sigm=dabs(aa/bb)**(1.0D0/6.0D0)
1340 write (iout,'(2(a3,i3,2x),17(0pf7.3))')
1341 & restyp(itypi),i,restyp(itypj),j,
1342 & epsi,sigm,chi1,chi2,chip1,chip2,
1343 & eps1,eps2rt**2,eps3rt**2,sig,sig0ij,
1344 & om1,om2,om12,1.0D0/rij,1.0D0/rij_shift,
1346 write (iout,*) "partial sum", evdw, evdw_t
1350 if (energy_dec) write (iout,'(a,2i5,3f10.5)')
1351 & 'r sss evdw',i,j,1.0d0/rij,sss,evdwij
1353 C Calculate gradient components.
1354 e1=e1*eps1*eps2rt**2*eps3rt**2
1355 fac=-expon*(e1+evdwij)*rij_shift
1358 fac=fac+evdwij/sss*sssgrad/sigma(itypi,itypj)*rij
1359 C Calculate the radial part of the gradient
1363 C Calculate angular part of the gradient.
1366 C write(iout,*) "partial sum", evdw, evdw_t
1373 C-----------------------------------------------------------------------------
1374 subroutine egbv(evdw,evdw_t)
1376 C This subroutine calculates the interaction energy of nonbonded side chains
1377 C assuming the Gay-Berne-Vorobjev potential of interaction.
1379 implicit real*8 (a-h,o-z)
1380 include 'DIMENSIONS'
1381 include 'DIMENSIONS.ZSCOPT'
1382 include "DIMENSIONS.COMPAR"
1383 include 'COMMON.GEO'
1384 include 'COMMON.VAR'
1385 include 'COMMON.LOCAL'
1386 include 'COMMON.CHAIN'
1387 include 'COMMON.DERIV'
1388 include 'COMMON.NAMES'
1389 include 'COMMON.INTERACT'
1390 include 'COMMON.ENEPS'
1391 include 'COMMON.IOUNITS'
1392 include 'COMMON.CALC'
1393 common /srutu/ icall
1399 eneps_temp(j,i)=0.0d0
1404 c print *,'Entering EGB nnt=',nnt,' nct=',nct,' expon=',expon
1407 c if (icall.gt.0) lprn=.true.
1409 do i=iatsc_s,iatsc_e
1410 itypi=iabs(itype(i))
1411 if (itypi.eq.ntyp1) cycle
1412 itypi1=iabs(itype(i+1))
1416 dxi=dc_norm(1,nres+i)
1417 dyi=dc_norm(2,nres+i)
1418 dzi=dc_norm(3,nres+i)
1419 dsci_inv=vbld_inv(i+nres)
1421 C Calculate SC interaction energy.
1423 do iint=1,nint_gr(i)
1424 do j=istart(i,iint),iend(i,iint)
1426 itypj=iabs(itype(j))
1427 if (itypj.eq.ntyp1) cycle
1428 dscj_inv=vbld_inv(j+nres)
1429 sig0ij=sigma(itypi,itypj)
1430 r0ij=r0(itypi,itypj)
1431 chi1=chi(itypi,itypj)
1432 chi2=chi(itypj,itypi)
1439 alf12=0.5D0*(alf1+alf2)
1440 C For diagnostics only!!!
1453 dxj=dc_norm(1,nres+j)
1454 dyj=dc_norm(2,nres+j)
1455 dzj=dc_norm(3,nres+j)
1456 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
1458 sss=sscale(1.0d0/rij)
1459 if (sss.eq.0.0d0) cycle
1460 sssgrad=sscagrad(1.0d0/rij)
1461 C Calculate angle-dependent terms of energy and contributions to their
1465 sig=sig0ij*dsqrt(sigsq)
1466 rij_shift=1.0D0/rij-sig+r0ij
1467 C I hate to put IF's in the loops, but here don't have another choice!!!!
1468 if (rij_shift.le.0.0D0) then
1473 c---------------------------------------------------------------
1474 rij_shift=1.0D0/rij_shift
1475 fac=rij_shift**expon
1478 evdwij=eps1*eps2rt*eps3rt*(e1+e2)
1479 eps2der=evdwij*eps3rt
1480 eps3der=evdwij*eps2rt
1481 fac_augm=rrij**expon
1482 e_augm=augm(itypi,itypj)*fac_augm
1483 evdwij=evdwij*eps2rt*eps3rt
1484 if (bb.gt.0.0d0) then
1485 evdw=evdw+(evdwij+e_augm)*sss
1487 evdw_t=evdw_t+(evdwij+e_augm)*sss
1489 ij=icant(itypi,itypj)
1490 aux=eps1*eps2rt**2*eps3rt**2
1491 eneps_temp(1,ij)=eneps_temp(1,ij)+aux*(e1+e_augm)
1492 & /dabs(eps(itypi,itypj))
1493 eneps_temp(2,ij)=eneps_temp(2,ij)+aux*e2/eps(itypi,itypj)
1494 c eneps_temp(ij)=eneps_temp(ij)
1495 c & +(evdwij+e_augm)/eps(itypi,itypj)
1497 c sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
1498 c epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
1499 c write (iout,'(2(a3,i3,2x),17(0pf7.3))')
1500 c & restyp(itypi),i,restyp(itypj),j,
1501 c & epsi,sigm,sig,(augm(itypi,itypj)/epsi)**(1.0D0/12.0D0),
1502 c & chi1,chi2,chip1,chip2,
1503 c & eps1,eps2rt**2,eps3rt**2,
1504 c & om1,om2,om12,1.0D0/rij,1.0D0/rij_shift,
1508 C Calculate gradient components.
1509 e1=e1*eps1*eps2rt**2*eps3rt**2
1510 fac=-expon*(e1+evdwij)*rij_shift
1512 fac=rij*fac-2*expon*rrij*e_augm
1513 fac=fac+(evdwij+e_augm)*sssgrad/sss*rij
1514 C Calculate the radial part of the gradient
1518 C Calculate angular part of the gradient.
1526 C-----------------------------------------------------------------------------
1527 subroutine sc_angular
1528 C Calculate eps1,eps2,eps3,sigma, and parts of their derivatives in om1,om2,
1529 C om12. Called by ebp, egb, and egbv.
1531 include 'COMMON.CALC'
1535 om1=dxi*erij(1)+dyi*erij(2)+dzi*erij(3)
1536 om2=dxj*erij(1)+dyj*erij(2)+dzj*erij(3)
1537 om12=dxi*dxj+dyi*dyj+dzi*dzj
1539 C Calculate eps1(om12) and its derivative in om12
1540 faceps1=1.0D0-om12*chiom12
1541 faceps1_inv=1.0D0/faceps1
1542 eps1=dsqrt(faceps1_inv)
1543 C Following variable is eps1*deps1/dom12
1544 eps1_om12=faceps1_inv*chiom12
1545 C Calculate sigma(om1,om2,om12) and the derivatives of sigma**2 in om1,om2,
1550 facsig=om1*chiom1+om2*chiom2-2.0D0*om1om2*chiom12
1551 sigsq=1.0D0-facsig*faceps1_inv
1552 sigsq_om1=(chiom1-chiom12*om2)*faceps1_inv
1553 sigsq_om2=(chiom2-chiom12*om1)*faceps1_inv
1554 sigsq_om12=-chi12*(om1om2*faceps1-om12*facsig)*faceps1_inv**2
1555 C Calculate eps2 and its derivatives in om1, om2, and om12.
1558 chipom12=chip12*om12
1559 facp=1.0D0-om12*chipom12
1561 facp1=om1*chipom1+om2*chipom2-2.0D0*om1om2*chipom12
1562 C Following variable is the square root of eps2
1563 eps2rt=1.0D0-facp1*facp_inv
1564 C Following three variables are the derivatives of the square root of eps
1565 C in om1, om2, and om12.
1566 eps2rt_om1=-4.0D0*(chipom1-chipom12*om2)*facp_inv
1567 eps2rt_om2=-4.0D0*(chipom2-chipom12*om1)*facp_inv
1568 eps2rt_om12=4.0D0*chip12*(om1om2*facp-om12*facp1)*facp_inv**2
1569 C Evaluate the "asymmetric" factor in the VDW constant, eps3
1570 eps3rt=1.0D0-alf1*om1+alf2*om2-alf12*om12
1571 C Calculate whole angle-dependent part of epsilon and contributions
1572 C to its derivatives
1575 C----------------------------------------------------------------------------
1577 implicit real*8 (a-h,o-z)
1578 include 'DIMENSIONS'
1579 include 'DIMENSIONS.ZSCOPT'
1580 include 'COMMON.CHAIN'
1581 include 'COMMON.DERIV'
1582 include 'COMMON.CALC'
1583 double precision dcosom1(3),dcosom2(3)
1584 eom1=eps2der*eps2rt_om1-2.0D0*alf1*eps3der+sigder*sigsq_om1
1585 eom2=eps2der*eps2rt_om2+2.0D0*alf2*eps3der+sigder*sigsq_om2
1586 eom12=evdwij*eps1_om12+eps2der*eps2rt_om12
1587 & -2.0D0*alf12*eps3der+sigder*sigsq_om12
1589 dcosom1(k)=rij*(dc_norm(k,nres+i)-om1*erij(k))
1590 dcosom2(k)=rij*(dc_norm(k,nres+j)-om2*erij(k))
1593 gg(k)=gg(k)+eom1*dcosom1(k)+eom2*dcosom2(k)
1596 gvdwx(k,i)=gvdwx(k,i)-gg(k)
1597 & +(eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,nres+i))
1598 & +eom1*(erij(k)-om1*dc_norm(k,nres+i)))*dsci_inv
1599 gvdwx(k,j)=gvdwx(k,j)+gg(k)
1600 & +(eom12*(dc_norm(k,nres+i)-om12*dc_norm(k,nres+j))
1601 & +eom2*(erij(k)-om2*dc_norm(k,nres+j)))*dscj_inv
1604 C Calculate the components of the gradient in DC and X
1608 gvdwc(l,k)=gvdwc(l,k)+gg(l)
1613 c------------------------------------------------------------------------------
1614 subroutine vec_and_deriv
1615 implicit real*8 (a-h,o-z)
1616 include 'DIMENSIONS'
1617 include 'DIMENSIONS.ZSCOPT'
1618 include 'COMMON.IOUNITS'
1619 include 'COMMON.GEO'
1620 include 'COMMON.VAR'
1621 include 'COMMON.LOCAL'
1622 include 'COMMON.CHAIN'
1623 include 'COMMON.VECTORS'
1624 include 'COMMON.DERIV'
1625 include 'COMMON.INTERACT'
1626 dimension uyder(3,3,2),uzder(3,3,2),vbld_inv_temp(2)
1627 C Compute the local reference systems. For reference system (i), the
1628 C X-axis points from CA(i) to CA(i+1), the Y axis is in the
1629 C CA(i)-CA(i+1)-CA(i+2) plane, and the Z axis is perpendicular to this plane.
1631 c if (i.eq.nres-1 .or. itel(i+1).eq.0) then
1632 if (i.eq.nres-1) then
1633 C Case of the last full residue
1634 C Compute the Z-axis
1635 call vecpr(dc_norm(1,i),dc_norm(1,i-1),uz(1,i))
1636 costh=dcos(pi-theta(nres))
1637 fac=1.0d0/dsqrt(1.0d0-costh*costh)
1638 c write (iout,*) "i",i," dc_norm",dc_norm(:,i),dc_norm(:,i-1),
1644 C Compute the derivatives of uz
1646 uzder(2,1,1)=-dc_norm(3,i-1)
1647 uzder(3,1,1)= dc_norm(2,i-1)
1648 uzder(1,2,1)= dc_norm(3,i-1)
1650 uzder(3,2,1)=-dc_norm(1,i-1)
1651 uzder(1,3,1)=-dc_norm(2,i-1)
1652 uzder(2,3,1)= dc_norm(1,i-1)
1655 uzder(2,1,2)= dc_norm(3,i)
1656 uzder(3,1,2)=-dc_norm(2,i)
1657 uzder(1,2,2)=-dc_norm(3,i)
1659 uzder(3,2,2)= dc_norm(1,i)
1660 uzder(1,3,2)= dc_norm(2,i)
1661 uzder(2,3,2)=-dc_norm(1,i)
1664 C Compute the Y-axis
1667 uy(k,i)=fac*(dc_norm(k,i-1)-costh*dc_norm(k,i))
1670 C Compute the derivatives of uy
1673 uyder(k,j,1)=2*dc_norm(k,i-1)*dc_norm(j,i)
1674 & -dc_norm(k,i)*dc_norm(j,i-1)
1675 uyder(k,j,2)=-dc_norm(j,i)*dc_norm(k,i)
1677 uyder(j,j,1)=uyder(j,j,1)-costh
1678 uyder(j,j,2)=1.0d0+uyder(j,j,2)
1683 uygrad(l,k,j,i)=uyder(l,k,j)
1684 uzgrad(l,k,j,i)=uzder(l,k,j)
1688 call unormderiv(uy(1,i),uyder(1,1,1),facy,uygrad(1,1,1,i))
1689 call unormderiv(uy(1,i),uyder(1,1,2),facy,uygrad(1,1,2,i))
1690 call unormderiv(uz(1,i),uzder(1,1,1),fac,uzgrad(1,1,1,i))
1691 call unormderiv(uz(1,i),uzder(1,1,2),fac,uzgrad(1,1,2,i))
1695 C Compute the Z-axis
1696 call vecpr(dc_norm(1,i),dc_norm(1,i+1),uz(1,i))
1697 costh=dcos(pi-theta(i+2))
1698 fac=1.0d0/dsqrt(1.0d0-costh*costh)
1703 C Compute the derivatives of uz
1705 uzder(2,1,1)=-dc_norm(3,i+1)
1706 uzder(3,1,1)= dc_norm(2,i+1)
1707 uzder(1,2,1)= dc_norm(3,i+1)
1709 uzder(3,2,1)=-dc_norm(1,i+1)
1710 uzder(1,3,1)=-dc_norm(2,i+1)
1711 uzder(2,3,1)= dc_norm(1,i+1)
1714 uzder(2,1,2)= dc_norm(3,i)
1715 uzder(3,1,2)=-dc_norm(2,i)
1716 uzder(1,2,2)=-dc_norm(3,i)
1718 uzder(3,2,2)= dc_norm(1,i)
1719 uzder(1,3,2)= dc_norm(2,i)
1720 uzder(2,3,2)=-dc_norm(1,i)
1723 C Compute the Y-axis
1726 uy(k,i)=facy*(dc_norm(k,i+1)-costh*dc_norm(k,i))
1729 C Compute the derivatives of uy
1732 uyder(k,j,1)=2*dc_norm(k,i+1)*dc_norm(j,i)
1733 & -dc_norm(k,i)*dc_norm(j,i+1)
1734 uyder(k,j,2)=-dc_norm(j,i)*dc_norm(k,i)
1736 uyder(j,j,1)=uyder(j,j,1)-costh
1737 uyder(j,j,2)=1.0d0+uyder(j,j,2)
1742 uygrad(l,k,j,i)=uyder(l,k,j)
1743 uzgrad(l,k,j,i)=uzder(l,k,j)
1747 call unormderiv(uy(1,i),uyder(1,1,1),facy,uygrad(1,1,1,i))
1748 call unormderiv(uy(1,i),uyder(1,1,2),facy,uygrad(1,1,2,i))
1749 call unormderiv(uz(1,i),uzder(1,1,1),fac,uzgrad(1,1,1,i))
1750 call unormderiv(uz(1,i),uzder(1,1,2),fac,uzgrad(1,1,2,i))
1756 vbld_inv_temp(1)=vbld_inv(i+1)
1757 if (i.lt.nres-1) then
1758 vbld_inv_temp(2)=vbld_inv(i+2)
1760 vbld_inv_temp(2)=vbld_inv(i)
1765 uygrad(l,k,j,i)=vbld_inv_temp(j)*uygrad(l,k,j,i)
1766 uzgrad(l,k,j,i)=vbld_inv_temp(j)*uzgrad(l,k,j,i)
1774 C--------------------------------------------------------------------------
1775 subroutine set_matrices
1776 implicit real*8 (a-h,o-z)
1777 include 'DIMENSIONS'
1781 integer status(MPI_STATUS_SIZE)
1783 include 'DIMENSIONS.ZSCOPT'
1784 include 'COMMON.IOUNITS'
1785 include 'COMMON.GEO'
1786 include 'COMMON.VAR'
1787 include 'COMMON.LOCAL'
1788 include 'COMMON.CHAIN'
1789 include 'COMMON.DERIV'
1790 include 'COMMON.INTERACT'
1791 include 'COMMON.CORRMAT'
1792 include 'COMMON.TORSION'
1793 include 'COMMON.VECTORS'
1794 include 'COMMON.FFIELD'
1795 double precision auxvec(2),auxmat(2,2)
1797 C Compute the virtual-bond-torsional-angle dependent quantities needed
1798 C to calculate the el-loc multibody terms of various order.
1800 c write(iout,*) 'SET_MATRICES nphi=',nphi,nres
1804 innt=chain_border(1,ii)
1805 inct=chain_border(2,ii)
1806 c if (i.gt. nnt+2 .and. i.lt.nct+2) then
1807 if (i.gt. innt+2 .and. i.lt.inct+2) then
1808 iti = itype2loc(itype(i-2))
1812 c if (i.gt. iatel_s+1 .and. i.lt.iatel_e+4) then
1813 c if (i.gt. nnt+1 .and. i.lt.nct+1) then
1814 if (i.gt. innt+1 .and. i.lt.inct+1) then
1815 iti1 = itype2loc(itype(i-1))
1820 cost1=dcos(theta(i-1))
1821 sint1=dsin(theta(i-1))
1823 sint1cub=sint1sq*sint1
1824 sint1cost1=2*sint1*cost1
1826 write (iout,*) "bnew1",i,iti
1827 write (iout,*) (bnew1(k,1,iti),k=1,3)
1828 write (iout,*) (bnew1(k,2,iti),k=1,3)
1829 write (iout,*) "bnew2",i,iti
1830 write (iout,*) (bnew2(k,1,iti),k=1,3)
1831 write (iout,*) (bnew2(k,2,iti),k=1,3)
1834 b1k=bnew1(1,k,iti)+(bnew1(2,k,iti)+bnew1(3,k,iti)*cost1)*cost1
1836 gtb1(k,i-2)=cost1*b1k-sint1sq*
1837 & (bnew1(2,k,iti)+2*bnew1(3,k,iti)*cost1)
1838 b2k=bnew2(1,k,iti)+(bnew2(2,k,iti)+bnew2(3,k,iti)*cost1)*cost1
1840 if (calc_grad) gtb2(k,i-2)=cost1*b2k-sint1sq*
1841 & (bnew2(2,k,iti)+2*bnew2(3,k,iti)*cost1)
1844 aux=ccnew(1,k,iti)+(ccnew(2,k,iti)+ccnew(3,k,iti)*cost1)*cost1
1845 cc(1,k,i-2)=sint1sq*aux
1846 if (calc_grad) gtcc(1,k,i-2)=sint1cost1*aux-sint1cub*
1847 & (ccnew(2,k,iti)+2*ccnew(3,k,iti)*cost1)
1848 aux=ddnew(1,k,iti)+(ddnew(2,k,iti)+ddnew(3,k,iti)*cost1)*cost1
1849 dd(1,k,i-2)=sint1sq*aux
1850 if (calc_grad) gtdd(1,k,i-2)=sint1cost1*aux-sint1cub*
1851 & (ddnew(2,k,iti)+2*ddnew(3,k,iti)*cost1)
1853 cc(2,1,i-2)=cc(1,2,i-2)
1854 cc(2,2,i-2)=-cc(1,1,i-2)
1855 gtcc(2,1,i-2)=gtcc(1,2,i-2)
1856 gtcc(2,2,i-2)=-gtcc(1,1,i-2)
1857 dd(2,1,i-2)=dd(1,2,i-2)
1858 dd(2,2,i-2)=-dd(1,1,i-2)
1859 gtdd(2,1,i-2)=gtdd(1,2,i-2)
1860 gtdd(2,2,i-2)=-gtdd(1,1,i-2)
1863 aux=eenew(1,l,k,iti)+eenew(2,l,k,iti)*cost1
1864 EE(l,k,i-2)=sint1sq*aux
1866 & gtEE(l,k,i-2)=sint1cost1*aux-sint1cub*eenew(2,l,k,iti)
1869 EE(1,1,i-2)=EE(1,1,i-2)+e0new(1,iti)*cost1
1870 EE(1,2,i-2)=EE(1,2,i-2)+e0new(2,iti)+e0new(3,iti)*cost1
1871 EE(2,1,i-2)=EE(2,1,i-2)+e0new(2,iti)*cost1+e0new(3,iti)
1872 EE(2,2,i-2)=EE(2,2,i-2)-e0new(1,iti)
1874 gtEE(1,1,i-2)=gtEE(1,1,i-2)-e0new(1,iti)*sint1
1875 gtEE(1,2,i-2)=gtEE(1,2,i-2)-e0new(3,iti)*sint1
1876 gtEE(2,1,i-2)=gtEE(2,1,i-2)-e0new(2,iti)*sint1
1878 c b1tilde(1,i-2)=b1(1,i-2)
1879 c b1tilde(2,i-2)=-b1(2,i-2)
1880 c b2tilde(1,i-2)=b2(1,i-2)
1881 c b2tilde(2,i-2)=-b2(2,i-2)
1883 write (iout,*) 'i=',i-2,gtb1(2,i-2),gtb1(1,i-2)
1884 write(iout,*) 'b1=',(b1(k,i-2),k=1,2)
1885 write(iout,*) 'b2=',(b2(k,i-2),k=1,2)
1886 write (iout,*) 'theta=', theta(i-1)
1889 c if (i.gt. nnt+2 .and. i.lt.nct+2) then
1890 c iti = itype2loc(itype(i-2))
1894 c if (i.gt. iatel_s+1 .and. i.lt.iatel_e+4) then
1895 c if (i.gt. nnt+1 .and. i.lt.nct+1) then
1896 c iti1 = itype2loc(itype(i-1))
1906 CC(k,l,i-2)=ccold(k,l,iti)
1907 DD(k,l,i-2)=ddold(k,l,iti)
1908 EE(k,l,i-2)=eeold(k,l,iti)
1912 b1tilde(1,i-2)= b1(1,i-2)
1913 b1tilde(2,i-2)=-b1(2,i-2)
1914 b2tilde(1,i-2)= b2(1,i-2)
1915 b2tilde(2,i-2)=-b2(2,i-2)
1917 Ctilde(1,1,i-2)= CC(1,1,i-2)
1918 Ctilde(1,2,i-2)= CC(1,2,i-2)
1919 Ctilde(2,1,i-2)=-CC(2,1,i-2)
1920 Ctilde(2,2,i-2)=-CC(2,2,i-2)
1922 Dtilde(1,1,i-2)= DD(1,1,i-2)
1923 Dtilde(1,2,i-2)= DD(1,2,i-2)
1924 Dtilde(2,1,i-2)=-DD(2,1,i-2)
1925 Dtilde(2,2,i-2)=-DD(2,2,i-2)
1927 write(iout,*) "i",i," iti",iti
1928 write(iout,*) 'b1=',(b1(k,i-2),k=1,2)
1929 write(iout,*) 'b2=',(b2(k,i-2),k=1,2)
1933 if (i .lt. nres+1) then
1970 if (i .gt. 3 .and. i .lt. nres+1) then
1971 obrot_der(1,i-2)=-sin1
1972 obrot_der(2,i-2)= cos1
1973 Ugder(1,1,i-2)= sin1
1974 Ugder(1,2,i-2)=-cos1
1975 Ugder(2,1,i-2)=-cos1
1976 Ugder(2,2,i-2)=-sin1
1979 obrot2_der(1,i-2)=-dwasin2
1980 obrot2_der(2,i-2)= dwacos2
1981 Ug2der(1,1,i-2)= dwasin2
1982 Ug2der(1,2,i-2)=-dwacos2
1983 Ug2der(2,1,i-2)=-dwacos2
1984 Ug2der(2,2,i-2)=-dwasin2
1986 obrot_der(1,i-2)=0.0d0
1987 obrot_der(2,i-2)=0.0d0
1988 Ugder(1,1,i-2)=0.0d0
1989 Ugder(1,2,i-2)=0.0d0
1990 Ugder(2,1,i-2)=0.0d0
1991 Ugder(2,2,i-2)=0.0d0
1992 obrot2_der(1,i-2)=0.0d0
1993 obrot2_der(2,i-2)=0.0d0
1994 Ug2der(1,1,i-2)=0.0d0
1995 Ug2der(1,2,i-2)=0.0d0
1996 Ug2der(2,1,i-2)=0.0d0
1997 Ug2der(2,2,i-2)=0.0d0
1999 c if (i.gt. iatel_s+2 .and. i.lt.iatel_e+5) then
2000 if (i.gt. nnt+2 .and. i.lt.nct+2) then
2001 iti = itype2loc(itype(i-2))
2005 c if (i.gt. iatel_s+1 .and. i.lt.iatel_e+4) then
2006 if (i.gt. nnt+1 .and. i.lt.nct+1) then
2007 iti1 = itype2loc(itype(i-1))
2011 cd write (iout,*) '*******i',i,' iti1',iti
2012 cd write (iout,*) 'b1',b1(:,iti)
2013 cd write (iout,*) 'b2',b2(:,iti)
2014 cd write (iout,*) 'Ug',Ug(:,:,i-2)
2015 c if (i .gt. iatel_s+2) then
2016 if (i .gt. nnt+2) then
2017 call matvec2(Ug(1,1,i-2),b2(1,i-2),Ub2(1,i-2))
2019 call matvec2(Ug(1,1,i-2),gtb2(1,i-2),gUb2(1,i-2))
2020 c write (iout,*) Ug(1,1,i-2),gtb2(1,i-2),gUb2(1,i-2),"chuj"
2022 c write(iout,*) "co jest kurwa", iti, EE(1,1,i),EE(2,1,i),
2023 c & EE(1,2,iti),EE(2,2,i)
2024 call matmat2(EE(1,1,i-2),Ug(1,1,i-2),EUg(1,1,i-2))
2025 call matmat2(gtEE(1,1,i-2),Ug(1,1,i-2),gtEUg(1,1,i-2))
2026 c write(iout,*) "Macierz EUG",
2027 c & eug(1,1,i-2),eug(1,2,i-2),eug(2,1,i-2),
2030 if (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0)
2032 call matmat2(CC(1,1,i-2),Ug(1,1,i-2),CUg(1,1,i-2))
2033 call matmat2(DD(1,1,i-2),Ug(1,1,i-2),DUg(1,1,i-2))
2034 call matmat2(Dtilde(1,1,i-2),Ug2(1,1,i-2),DtUg2(1,1,i-2))
2035 call matvec2(Ctilde(1,1,i-1),obrot(1,i-2),Ctobr(1,i-2))
2036 call matvec2(Dtilde(1,1,i-2),obrot2(1,i-2),Dtobr2(1,i-2))
2048 DtUg2(l,k,i-2)=0.0d0
2052 call matvec2(Ugder(1,1,i-2),b2(1,i-2),Ub2der(1,i-2))
2053 call matmat2(EE(1,1,i-2),Ugder(1,1,i-2),EUgder(1,1,i-2))
2055 muder(k,i-2)=Ub2der(k,i-2)
2057 c if (i.gt. iatel_s+1 .and. i.lt.iatel_e+4) then
2058 if (i.gt. nnt+1 .and. i.lt.nct+1) then
2059 if (itype(i-1).le.ntyp) then
2060 iti1 = itype2loc(itype(i-1))
2068 mu(k,i-2)=Ub2(k,i-2)+b1(k,i-1)
2071 write (iout,'(2hmu,i3,3f8.1,12f10.5)') i-2,rad2deg*theta(i-1),
2072 & rad2deg*theta(i),rad2deg*phi(i),mu(1,i-2),mu(2,i-2),
2073 & -b2(1,i-2),b2(2,i-2),b1(1,i-2),b1(2,i-2),
2074 & dsqrt(b2(1,i-1)**2+b2(2,i-1)**2)
2075 & +dsqrt(b1(1,i-1)**2+b1(2,i-1)**2),
2076 & ((ee(l,k,i-2),l=1,2),k=1,2)
2078 cd write (iout,*) 'mu1',mu1(:,i-2)
2079 cd write (iout,*) 'mu2',mu2(:,i-2)
2081 if (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or.wcorr6.gt.0.0d0)
2084 call matmat2(CC(1,1,i-1),Ugder(1,1,i-2),CUgder(1,1,i-2))
2085 call matmat2(DD(1,1,i-2),Ugder(1,1,i-2),DUgder(1,1,i-2))
2086 call matmat2(Dtilde(1,1,i-2),Ug2der(1,1,i-2),DtUg2der(1,1,i-2))
2087 call matvec2(Ctilde(1,1,i-1),obrot_der(1,i-2),Ctobrder(1,i-2))
2088 call matvec2(Dtilde(1,1,i-2),obrot2_der(1,i-2),Dtobr2der(1,i-2))
2090 C Vectors and matrices dependent on a single virtual-bond dihedral.
2091 call matvec2(DD(1,1,i-2),b1tilde(1,i-1),auxvec(1))
2092 call matvec2(Ug2(1,1,i-2),auxvec(1),Ug2Db1t(1,i-2))
2093 call matvec2(CC(1,1,i-1),Ub2(1,i-2),CUgb2(1,i-2))
2094 call matmat2(EUg(1,1,i-2),CC(1,1,i-1),EUgC(1,1,i-2))
2095 call matmat2(EUg(1,1,i-2),DD(1,1,i-1),EUgD(1,1,i-2))
2097 call matvec2(Ug2der(1,1,i-2),auxvec(1),Ug2Db1tder(1,i-2))
2098 call matvec2(CC(1,1,i-1),Ub2der(1,i-2),CUgb2der(1,i-2))
2099 call matmat2(EUgder(1,1,i-2),CC(1,1,i-1),EUgCder(1,1,i-2))
2100 call matmat2(EUgder(1,1,i-2),DD(1,1,i-1),EUgDder(1,1,i-2))
2106 C Matrices dependent on two consecutive virtual-bond dihedrals.
2107 C The order of matrices is from left to right.
2108 if (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or.wcorr6.gt.0.0d0)
2111 call matmat2(DtUg2(1,1,i-1),EUg(1,1,i),DtUg2EUg(1,1,i))
2113 call matmat2(DtUg2der(1,1,i-1),EUg(1,1,i),DtUg2EUgder(1,1,1,i))
2114 call matmat2(DtUg2(1,1,i-1),EUgder(1,1,i),DtUg2EUgder(1,1,2,i))
2116 call transpose2(DtUg2(1,1,i-1),auxmat(1,1))
2117 call matmat2(auxmat(1,1),EUg(1,1,i),Ug2DtEUg(1,1,i))
2119 call matmat2(auxmat(1,1),EUgder(1,1,i),Ug2DtEUgder(1,1,2,i))
2120 call transpose2(DtUg2der(1,1,i-1),auxmat(1,1))
2121 call matmat2(auxmat(1,1),EUg(1,1,i),Ug2DtEUgder(1,1,1,i))
2128 C--------------------------------------------------------------------------
2129 subroutine eelec(ees,evdw1,eel_loc,eello_turn3,eello_turn4)
2131 C This subroutine calculates the average interaction energy and its gradient
2132 C in the virtual-bond vectors between non-adjacent peptide groups, based on
2133 C the potential described in Liwo et al., Protein Sci., 1993, 2, 1715.
2134 C The potential depends both on the distance of peptide-group centers and on
2135 C the orientation of the CA-CA virtual bonds.
2137 implicit real*8 (a-h,o-z)
2141 include 'DIMENSIONS'
2142 include 'DIMENSIONS.ZSCOPT'
2143 include 'COMMON.CONTROL'
2144 include 'COMMON.IOUNITS'
2145 include 'COMMON.GEO'
2146 include 'COMMON.VAR'
2147 include 'COMMON.LOCAL'
2148 include 'COMMON.CHAIN'
2149 include 'COMMON.DERIV'
2150 include 'COMMON.INTERACT'
2152 include 'COMMON.CONTACTS'
2153 include 'COMMON.CONTMAT'
2155 include 'COMMON.CORRMAT'
2156 include 'COMMON.TORSION'
2157 include 'COMMON.VECTORS'
2158 include 'COMMON.FFIELD'
2159 include 'COMMON.TIME1'
2160 include 'COMMON.SPLITELE'
2161 dimension ggg(3),gggp(3),gggm(3),erij(3),dcosb(3),dcosg(3),
2162 & erder(3,3),uryg(3,3),urzg(3,3),vryg(3,3),vrzg(3,3)
2163 double precision acipa(2,2),agg(3,4),aggi(3,4),aggi1(3,4),
2164 & aggj(3,4),aggj1(3,4),a_temp(2,2),muij(4),gmuij(4)
2165 common /locel/ a_temp,agg,aggi,aggi1,aggj,aggj1,a22,a23,a32,a33,
2166 & dxi,dyi,dzi,dx_normi,dy_normi,dz_normi,xmedi,ymedi,zmedi,
2168 c 4/26/02 - AL scaling factor for 1,4 repulsive VDW interactions
2170 double precision scal_el /1.0d0/
2172 double precision scal_el /0.5d0/
2175 C 13-go grudnia roku pamietnego...
2176 double precision unmat(3,3) /1.0d0,0.0d0,0.0d0,
2177 & 0.0d0,1.0d0,0.0d0,
2178 & 0.0d0,0.0d0,1.0d0/
2179 cd write(iout,*) 'In EELEC'
2181 cd write(iout,*) 'Type',i
2182 cd write(iout,*) 'B1',B1(:,i)
2183 cd write(iout,*) 'B2',B2(:,i)
2184 cd write(iout,*) 'CC',CC(:,:,i)
2185 cd write(iout,*) 'DD',DD(:,:,i)
2186 cd write(iout,*) 'EE',EE(:,:,i)
2188 cd call check_vecgrad
2190 if (icheckgrad.eq.1) then
2192 fac=1.0d0/dsqrt(scalar(dc(1,i),dc(1,i)))
2194 dc_norm(k,i)=dc(k,i)*fac
2196 c write (iout,*) 'i',i,' fac',fac
2199 if (wel_loc.gt.0.0d0 .or. wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0
2200 & .or. wcorr6.gt.0.0d0 .or. wturn3.gt.0.0d0 .or.
2201 & wturn4.gt.0.0d0 .or. wturn6.gt.0.0d0) then
2202 c call vec_and_deriv
2208 time_mat=time_mat+MPI_Wtime()-time01
2212 cd write (iout,*) 'i=',i
2214 cd write (iout,'(i5,2f10.5)') k,uy(k,i),uz(k,i)
2217 cd write (iout,'(f10.5,2x,3f10.5,2x,3f10.5)')
2218 cd & uz(k,i),(uzgrad(k,l,1,i),l=1,3),(uzgrad(k,l,2,i),l=1,3)
2233 cd print '(a)','Enter EELEC'
2234 cd write (iout,*) 'iatel_s=',iatel_s,' iatel_e=',iatel_e
2236 gel_loc_loc(i)=0.0d0
2241 c 9/27/08 AL Split the interaction loop to ensure load balancing of turn terms
2243 C Loop over i,i+2 and i,i+3 pairs of the peptide groups
2245 C 14/01/2014 TURN3,TUNR4 does no go under periodic boundry condition
2246 do i=iturn3_start,iturn3_end
2248 C write(iout,*) "tu jest i",i
2249 if (itype(i).eq.ntyp1 .or. itype(i+1).eq.ntyp1
2250 C changes suggested by Ana to avoid out of bounds
2251 C Adam: Unnecessary: handled by iturn3_end and iturn3_start
2252 c & .or.((i+4).gt.nres)
2253 c & .or.((i-1).le.0)
2254 C end of changes by Ana
2255 C dobra zmiana wycofana
2256 & .or. itype(i+2).eq.ntyp1
2257 & .or. itype(i+3).eq.ntyp1) cycle
2258 C Adam: Instructions below will switch off existing interactions
2260 c if(itype(i-1).eq.ntyp1)cycle
2262 c if(i.LT.nres-3)then
2263 c if (itype(i+4).eq.ntyp1) cycle
2268 dx_normi=dc_norm(1,i)
2269 dy_normi=dc_norm(2,i)
2270 dz_normi=dc_norm(3,i)
2271 xmedi=c(1,i)+0.5d0*dxi
2272 ymedi=c(2,i)+0.5d0*dyi
2273 zmedi=c(3,i)+0.5d0*dzi
2274 xmedi=mod(xmedi,boxxsize)
2275 if (xmedi.lt.0) xmedi=xmedi+boxxsize
2276 ymedi=mod(ymedi,boxysize)
2277 if (ymedi.lt.0) ymedi=ymedi+boxysize
2278 zmedi=mod(zmedi,boxzsize)
2279 if (zmedi.lt.0) zmedi=zmedi+boxzsize
2281 call eelecij(i,i+2,ees,evdw1,eel_loc)
2282 if (wturn3.gt.0.0d0) call eturn3(i,eello_turn3)
2284 num_cont_hb(i)=num_conti
2287 do i=iturn4_start,iturn4_end
2289 if (itype(i).eq.ntyp1 .or. itype(i+1).eq.ntyp1
2290 C changes suggested by Ana to avoid out of bounds
2291 c & .or.((i+5).gt.nres)
2292 c & .or.((i-1).le.0)
2293 C end of changes suggested by Ana
2294 & .or. itype(i+3).eq.ntyp1
2295 & .or. itype(i+4).eq.ntyp1
2296 c & .or. itype(i+5).eq.ntyp1
2297 c & .or. itype(i).eq.ntyp1
2298 c & .or. itype(i-1).eq.ntyp1
2303 dx_normi=dc_norm(1,i)
2304 dy_normi=dc_norm(2,i)
2305 dz_normi=dc_norm(3,i)
2306 xmedi=c(1,i)+0.5d0*dxi
2307 ymedi=c(2,i)+0.5d0*dyi
2308 zmedi=c(3,i)+0.5d0*dzi
2309 C Return atom into box, boxxsize is size of box in x dimension
2311 c if (xmedi.gt.((0.5d0)*boxxsize)) xmedi=xmedi-boxxsize
2312 c if (xmedi.lt.((-0.5d0)*boxxsize)) xmedi=xmedi+boxxsize
2313 C Condition for being inside the proper box
2314 c if ((xmedi.gt.((0.5d0)*boxxsize)).or.
2315 c & (xmedi.lt.((-0.5d0)*boxxsize))) then
2319 c if (ymedi.gt.((0.5d0)*boxysize)) ymedi=ymedi-boxysize
2320 c if (ymedi.lt.((-0.5d0)*boxysize)) ymedi=ymedi+boxysize
2321 C Condition for being inside the proper box
2322 c if ((ymedi.gt.((0.5d0)*boxysize)).or.
2323 c & (ymedi.lt.((-0.5d0)*boxysize))) then
2327 c if (zmedi.gt.((0.5d0)*boxzsize)) zmedi=zmedi-boxzsize
2328 c if (zmedi.lt.((-0.5d0)*boxzsize)) zmedi=zmedi+boxzsize
2329 C Condition for being inside the proper box
2330 c if ((zmedi.gt.((0.5d0)*boxzsize)).or.
2331 c & (zmedi.lt.((-0.5d0)*boxzsize))) then
2334 xmedi=mod(xmedi,boxxsize)
2335 if (xmedi.lt.0) xmedi=xmedi+boxxsize
2336 ymedi=mod(ymedi,boxysize)
2337 if (ymedi.lt.0) ymedi=ymedi+boxysize
2338 zmedi=mod(zmedi,boxzsize)
2339 if (zmedi.lt.0) zmedi=zmedi+boxzsize
2341 num_conti=num_cont_hb(i)
2343 c write(iout,*) "JESTEM W PETLI"
2344 call eelecij(i,i+3,ees,evdw1,eel_loc)
2345 if (wturn4.gt.0.0d0 .and. itype(i+2).ne.ntyp1)
2346 & call eturn4(i,eello_turn4)
2348 num_cont_hb(i)=num_conti
2351 C Loop over all neighbouring boxes
2356 c Loop over all pairs of interacting peptide groups except i,i+2 and i,i+3
2359 do i=iatel_s,iatel_e
2362 if (itype(i).eq.ntyp1 .or. itype(i+1).eq.ntyp1
2363 C changes suggested by Ana to avoid out of bounds
2364 c & .or.((i+2).gt.nres)
2365 c & .or.((i-1).le.0)
2366 C end of changes by Ana
2367 c & .or. itype(i+2).eq.ntyp1
2368 c & .or. itype(i-1).eq.ntyp1
2373 dx_normi=dc_norm(1,i)
2374 dy_normi=dc_norm(2,i)
2375 dz_normi=dc_norm(3,i)
2376 xmedi=c(1,i)+0.5d0*dxi
2377 ymedi=c(2,i)+0.5d0*dyi
2378 zmedi=c(3,i)+0.5d0*dzi
2379 xmedi=mod(xmedi,boxxsize)
2380 if (xmedi.lt.0) xmedi=xmedi+boxxsize
2381 ymedi=mod(ymedi,boxysize)
2382 if (ymedi.lt.0) ymedi=ymedi+boxysize
2383 zmedi=mod(zmedi,boxzsize)
2384 if (zmedi.lt.0) zmedi=zmedi+boxzsize
2385 C xmedi=xmedi+xshift*boxxsize
2386 C ymedi=ymedi+yshift*boxysize
2387 C zmedi=zmedi+zshift*boxzsize
2389 C Return tom into box, boxxsize is size of box in x dimension
2391 c if (xmedi.gt.((xshift+0.5d0)*boxxsize)) xmedi=xmedi-boxxsize
2392 c if (xmedi.lt.((xshift-0.5d0)*boxxsize)) xmedi=xmedi+boxxsize
2393 C Condition for being inside the proper box
2394 c if ((xmedi.gt.((xshift+0.5d0)*boxxsize)).or.
2395 c & (xmedi.lt.((xshift-0.5d0)*boxxsize))) then
2399 c if (ymedi.gt.((yshift+0.5d0)*boxysize)) ymedi=ymedi-boxysize
2400 c if (ymedi.lt.((yshift-0.5d0)*boxysize)) ymedi=ymedi+boxysize
2401 C Condition for being inside the proper box
2402 c if ((ymedi.gt.((yshift+0.5d0)*boxysize)).or.
2403 c & (ymedi.lt.((yshift-0.5d0)*boxysize))) then
2407 c if (zmedi.gt.((zshift+0.5d0)*boxzsize)) zmedi=zmedi-boxzsize
2408 c if (zmedi.lt.((zshift-0.5d0)*boxzsize)) zmedi=zmedi+boxzsize
2409 cC Condition for being inside the proper box
2410 c if ((zmedi.gt.((zshift+0.5d0)*boxzsize)).or.
2411 c & (zmedi.lt.((zshift-0.5d0)*boxzsize))) then
2415 c write (iout,*) 'i',i,' ielstart',ielstart(i),' ielend',ielend(i)
2417 num_conti=num_cont_hb(i)
2420 do j=ielstart(i),ielend(i)
2422 C write (iout,*) i,j
2424 if (itype(j).eq.ntyp1.or. itype(j+1).eq.ntyp1
2425 C changes suggested by Ana to avoid out of bounds
2426 c & .or.((j+2).gt.nres)
2427 c & .or.((j-1).le.0)
2428 C end of changes by Ana
2429 c & .or.itype(j+2).eq.ntyp1
2430 c & .or.itype(j-1).eq.ntyp1
2432 call eelecij(i,j,ees,evdw1,eel_loc)
2435 num_cont_hb(i)=num_conti
2442 c write (iout,*) "Number of loop steps in EELEC:",ind
2444 cd write (iout,'(i3,3f10.5,5x,3f10.5)')
2445 cd & i,(gel_loc(k,i),k=1,3),gel_loc_loc(i)
2447 c 12/7/99 Adam eello_turn3 will be considered as a separate energy term
2448 ccc eel_loc=eel_loc+eello_turn3
2449 cd print *,"Processor",fg_rank," t_eelecij",t_eelecij
2452 C-------------------------------------------------------------------------------
2453 subroutine eelecij(i,j,ees,evdw1,eel_loc)
2454 implicit real*8 (a-h,o-z)
2455 include 'DIMENSIONS'
2456 include 'DIMENSIONS.ZSCOPT'
2460 include 'COMMON.CONTROL'
2461 include 'COMMON.IOUNITS'
2462 include 'COMMON.GEO'
2463 include 'COMMON.VAR'
2464 include 'COMMON.LOCAL'
2465 include 'COMMON.CHAIN'
2466 include 'COMMON.DERIV'
2467 include 'COMMON.INTERACT'
2469 include 'COMMON.CONTACTS'
2470 include 'COMMON.CONTMAT'
2472 include 'COMMON.CORRMAT'
2473 include 'COMMON.TORSION'
2474 include 'COMMON.VECTORS'
2475 include 'COMMON.FFIELD'
2476 include 'COMMON.TIME1'
2477 include 'COMMON.SPLITELE'
2478 include 'COMMON.SHIELD'
2479 dimension ggg(3),gggp(3),gggm(3),erij(3),dcosb(3),dcosg(3),
2480 & erder(3,3),uryg(3,3),urzg(3,3),vryg(3,3),vrzg(3,3)
2481 double precision acipa(2,2),agg(3,4),aggi(3,4),aggi1(3,4),
2482 & aggj(3,4),aggj1(3,4),a_temp(2,2),muij(4),gmuij1(4),gmuji1(4),
2483 & gmuij2(4),gmuji2(4)
2484 common /locel/ a_temp,agg,aggi,aggi1,aggj,aggj1,a22,a23,a32,a33,
2485 & dxi,dyi,dzi,dx_normi,dy_normi,dz_normi,xmedi,ymedi,zmedi,
2487 c 4/26/02 - AL scaling factor for 1,4 repulsive VDW interactions
2489 double precision scal_el /1.0d0/
2491 double precision scal_el /0.5d0/
2494 C 13-go grudnia roku pamietnego...
2495 double precision unmat(3,3) /1.0d0,0.0d0,0.0d0,
2496 & 0.0d0,1.0d0,0.0d0,
2497 & 0.0d0,0.0d0,1.0d0/
2498 integer xshift,yshift,zshift
2499 c time00=MPI_Wtime()
2500 cd write (iout,*) "eelecij",i,j
2504 if (j.eq.i+2 .and. itelj.eq.2) iteli=2
2505 aaa=app(iteli,itelj)
2506 bbb=bpp(iteli,itelj)
2507 ael6i=ael6(iteli,itelj)
2508 ael3i=ael3(iteli,itelj)
2512 dx_normj=dc_norm(1,j)
2513 dy_normj=dc_norm(2,j)
2514 dz_normj=dc_norm(3,j)
2515 C xj=c(1,j)+0.5D0*dxj-xmedi
2516 C yj=c(2,j)+0.5D0*dyj-ymedi
2517 C zj=c(3,j)+0.5D0*dzj-zmedi
2522 if (xj.lt.0) xj=xj+boxxsize
2524 if (yj.lt.0) yj=yj+boxysize
2526 if (zj.lt.0) zj=zj+boxzsize
2527 if ((zj.lt.0).or.(xj.lt.0).or.(yj.lt.0)) write (*,*) "CHUJ"
2528 dist_init=(xj-xmedi)**2+(yj-ymedi)**2+(zj-zmedi)**2
2536 xj=xj_safe+xshift*boxxsize
2537 yj=yj_safe+yshift*boxysize
2538 zj=zj_safe+zshift*boxzsize
2539 dist_temp=(xj-xmedi)**2+(yj-ymedi)**2+(zj-zmedi)**2
2540 if(dist_temp.lt.dist_init) then
2550 if (isubchap.eq.1) then
2559 C if ((i+3).lt.j) then !this condition keeps for turn3 and turn4 not subject to PBC
2561 c if (xj.gt.((0.5d0)*boxxsize)) xj=xj-boxxsize
2562 c if (xj.lt.((-0.5d0)*boxxsize)) xj=xj+boxxsize
2563 C Condition for being inside the proper box
2564 c if ((xj.gt.((0.5d0)*boxxsize)).or.
2565 c & (xj.lt.((-0.5d0)*boxxsize))) then
2569 c if (yj.gt.((0.5d0)*boxysize)) yj=yj-boxysize
2570 c if (yj.lt.((-0.5d0)*boxysize)) yj=yj+boxysize
2571 C Condition for being inside the proper box
2572 c if ((yj.gt.((0.5d0)*boxysize)).or.
2573 c & (yj.lt.((-0.5d0)*boxysize))) then
2577 c if (zj.gt.((0.5d0)*boxzsize)) zj=zj-boxzsize
2578 c if (zj.lt.((-0.5d0)*boxzsize)) zj=zj+boxzsize
2579 C Condition for being inside the proper box
2580 c if ((zj.gt.((0.5d0)*boxzsize)).or.
2581 c & (zj.lt.((-0.5d0)*boxzsize))) then
2584 C endif !endPBC condintion
2588 rij=xj*xj+yj*yj+zj*zj
2590 sss=sscale(sqrt(rij))
2591 if (sss.eq.0.0d0) return
2592 sssgrad=sscagrad(sqrt(rij))
2593 c write (iout,*) "ij",i,j," rij",sqrt(rij)," r_cut",r_cut,
2594 c & " rlamb",rlamb," sss",sss
2595 c if (sss.gt.0.0d0) then
2601 cosa=dx_normi*dx_normj+dy_normi*dy_normj+dz_normi*dz_normj
2602 cosb=(xj*dx_normi+yj*dy_normi+zj*dz_normi)*rmij
2603 cosg=(xj*dx_normj+yj*dy_normj+zj*dz_normj)*rmij
2604 fac=cosa-3.0D0*cosb*cosg
2606 c 4/26/02 - AL scaling down 1,4 repulsive VDW interactions
2607 if (j.eq.i+2) ev1=scal_el*ev1
2612 el1=fac3*(4.0D0+fac*fac-3.0D0*(cosb*cosb+cosg*cosg))
2616 C 12/26/95 - for the evaluation of multi-body H-bonding interactions
2617 ees0ij=4.0D0+fac*fac-3.0D0*(cosb*cosb+cosg*cosg)
2618 if (shield_mode.gt.0) then
2621 el1=el1*fac_shield(i)**2*fac_shield(j)**2
2622 el2=el2*fac_shield(i)**2*fac_shield(j)**2
2631 evdw1=evdw1+evdwij*sss
2632 cd write(iout,'(2(2i3,2x),7(1pd12.4)/2(3(1pd12.4),5x)/)')
2633 cd & iteli,i,itelj,j,aaa,bbb,ael6i,ael3i,
2634 cd & 1.0D0/dsqrt(rrmij),evdwij,eesij,
2635 cd & xmedi,ymedi,zmedi,xj,yj,zj
2637 if (energy_dec) then
2638 write (iout,'(a6,2i5,0pf7.3,2i5,3e11.3)')
2640 &,iteli,itelj,aaa,evdw1,sss
2641 write (iout,'(a6,2i5,0pf7.3,2f8.3)') 'ees',i,j,eesij,
2642 &fac_shield(i),fac_shield(j)
2646 C Calculate contributions to the Cartesian gradient.
2649 facvdw=-6*rrmij*(ev1+evdwij)*sss
2650 facel=-3*rrmij*(el1+eesij)
2657 * Radial derivatives. First process both termini of the fragment (i,j)
2663 if ((fac_shield(i).gt.0).and.(fac_shield(j).gt.0).and.
2664 & (shield_mode.gt.0)) then
2666 do ilist=1,ishield_list(i)
2667 iresshield=shield_list(ilist,i)
2669 rlocshield=grad_shield_side(k,ilist,i)*eesij/fac_shield(i)
2671 gshieldx(k,iresshield)=gshieldx(k,iresshield)+
2673 & +grad_shield_loc(k,ilist,i)*eesij/fac_shield(i)*2.0
2674 gshieldc(k,iresshield-1)=gshieldc(k,iresshield-1)+rlocshield
2675 C gshieldc_loc(k,iresshield)=gshieldc_loc(k,iresshield)
2676 C & +grad_shield_loc(k,ilist,i)*eesij/fac_shield(i)
2677 C if (iresshield.gt.i) then
2678 C do ishi=i+1,iresshield-1
2679 C gshieldc(k,ishi)=gshieldc(k,ishi)+rlocshield
2680 C & +grad_shield_loc(k,ilist,i)*eesij/fac_shield(i)
2684 C do ishi=iresshield,i
2685 C gshieldc(k,ishi)=gshieldc(k,ishi)-rlocshield
2686 C & -grad_shield_loc(k,ilist,i)*eesij/fac_shield(i)
2692 do ilist=1,ishield_list(j)
2693 iresshield=shield_list(ilist,j)
2695 rlocshield=grad_shield_side(k,ilist,j)*eesij/fac_shield(j)
2697 gshieldx(k,iresshield)=gshieldx(k,iresshield)+
2699 & +grad_shield_loc(k,ilist,j)*eesij/fac_shield(j)*2.0
2700 gshieldc(k,iresshield-1)=gshieldc(k,iresshield-1)+rlocshield
2702 C & +grad_shield_loc(k,ilist,j)*eesij/fac_shield(j)
2703 C gshieldc_loc(k,iresshield)=gshieldc_loc(k,iresshield)
2704 C & +grad_shield_loc(k,ilist,j)*eesij/fac_shield(j)
2705 C if (iresshield.gt.j) then
2706 C do ishi=j+1,iresshield-1
2707 C gshieldc(k,ishi)=gshieldc(k,ishi)+rlocshield
2708 C & +grad_shield_loc(k,ilist,j)*eesij/fac_shield(j)
2712 C do ishi=iresshield,j
2713 C gshieldc(k,ishi)=gshieldc(k,ishi)-rlocshield
2714 C & -grad_shield_loc(k,ilist,j)*eesij/fac_shield(j)
2721 gshieldc(k,i)=gshieldc(k,i)+
2722 & grad_shield(k,i)*eesij/fac_shield(i)*2.0
2723 gshieldc(k,j)=gshieldc(k,j)+
2724 & grad_shield(k,j)*eesij/fac_shield(j)*2.0
2725 gshieldc(k,i-1)=gshieldc(k,i-1)+
2726 & grad_shield(k,i)*eesij/fac_shield(i)*2.0
2727 gshieldc(k,j-1)=gshieldc(k,j-1)+
2728 & grad_shield(k,j)*eesij/fac_shield(j)*2.0
2733 c ghalf=0.5D0*ggg(k)
2734 c gelc(k,i)=gelc(k,i)+ghalf
2735 c gelc(k,j)=gelc(k,j)+ghalf
2737 c 9/28/08 AL Gradient compotents will be summed only at the end
2738 C print *,"before", gelc_long(1,i), gelc_long(1,j)
2740 gelc_long(k,j)=gelc_long(k,j)+ggg(k)
2741 C & +grad_shield(k,j)*eesij/fac_shield(j)
2742 gelc_long(k,i)=gelc_long(k,i)-ggg(k)
2743 C & +grad_shield(k,i)*eesij/fac_shield(i)
2744 C gelc_long(k,i-1)=gelc_long(k,i-1)
2745 C & +grad_shield(k,i)*eesij/fac_shield(i)
2746 C gelc_long(k,j-1)=gelc_long(k,j-1)
2747 C & +grad_shield(k,j)*eesij/fac_shield(j)
2749 C print *,"bafter", gelc_long(1,i), gelc_long(1,j)
2752 * Loop over residues i+1 thru j-1.
2756 cgrad gelc(l,k)=gelc(l,k)+ggg(l)
2759 if (sss.gt.0.0) then
2760 facvdw=facvdw+sssgrad*rmij*evdwij
2770 c ghalf=0.5D0*ggg(k)
2771 c gvdwpp(k,i)=gvdwpp(k,i)+ghalf
2772 c gvdwpp(k,j)=gvdwpp(k,j)+ghalf
2774 c 9/28/08 AL Gradient compotents will be summed only at the end
2776 gvdwpp(k,j)=gvdwpp(k,j)+ggg(k)
2777 gvdwpp(k,i)=gvdwpp(k,i)-ggg(k)
2780 * Loop over residues i+1 thru j-1.
2784 cgrad gvdwpp(l,k)=gvdwpp(l,k)+ggg(l)
2793 fac=-3*rrmij*(facvdw+facvdw+facel)*sss
2794 & +(evdwij+eesij)*sssgrad*rrmij
2799 * Radial derivatives. First process both termini of the fragment (i,j)
2803 C+eesij*grad_shield(1,i)+eesij*grad_shield(1,j)
2805 C+eesij*grad_shield(2,i)+eesij*grad_shield(2,j)
2807 C+eesij*grad_shield(3,i)+eesij*grad_shield(3,j)
2809 c ghalf=0.5D0*ggg(k)
2810 c gelc(k,i)=gelc(k,i)+ghalf
2811 c gelc(k,j)=gelc(k,j)+ghalf
2813 c 9/28/08 AL Gradient compotents will be summed only at the end
2815 gelc_long(k,j)=gelc(k,j)+ggg(k)
2816 gelc_long(k,i)=gelc(k,i)-ggg(k)
2819 * Loop over residues i+1 thru j-1.
2823 cgrad gelc(l,k)=gelc(l,k)+ggg(l)
2826 c 9/28/08 AL Gradient compotents will be summed only at the end
2827 ggg(1)=facvdw*xj+sssgrad*rmij*evdwij*xj
2828 ggg(2)=facvdw*yj+sssgrad*rmij*evdwij*yj
2829 ggg(3)=facvdw*zj+sssgrad*rmij*evdwij*zj
2831 gvdwpp(k,j)=gvdwpp(k,j)+ggg(k)
2832 gvdwpp(k,i)=gvdwpp(k,i)-ggg(k)
2840 ecosa=2.0D0*fac3*fac1+fac4
2843 ecosb=(fac3*(fac1*cosg+cosb)+cosg*fac4)
2844 ecosg=(fac3*(fac1*cosb+cosg)+cosb*fac4)
2846 dcosb(k)=rmij*(dc_norm(k,i)-erij(k)*cosb)
2847 dcosg(k)=rmij*(dc_norm(k,j)-erij(k)*cosg)
2849 cd print '(2i3,2(3(1pd14.5),3x))',i,j,(dcosb(k),k=1,3),
2850 cd & (dcosg(k),k=1,3)
2852 ggg(k)=(ecosb*dcosb(k)+ecosg*dcosg(k))*
2853 & fac_shield(i)**2*fac_shield(j)**2
2856 c ghalf=0.5D0*ggg(k)
2857 c gelc(k,i)=gelc(k,i)+ghalf
2858 c & +(ecosa*(dc_norm(k,j)-cosa*dc_norm(k,i))
2859 c & + ecosb*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1)
2860 c gelc(k,j)=gelc(k,j)+ghalf
2861 c & +(ecosa*(dc_norm(k,i)-cosa*dc_norm(k,j))
2862 c & + ecosg*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1)
2866 cgrad gelc(l,k)=gelc(l,k)+ggg(l)
2869 C print *,"before22", gelc_long(1,i), gelc_long(1,j)
2872 & +((ecosa*(dc_norm(k,j)-cosa*dc_norm(k,i))
2873 & + ecosb*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1))
2874 & *fac_shield(i)**2*fac_shield(j)**2
2876 & +((ecosa*(dc_norm(k,i)-cosa*dc_norm(k,j))
2877 & + ecosg*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1))
2878 & *fac_shield(i)**2*fac_shield(j)**2
2879 gelc_long(k,j)=gelc_long(k,j)+ggg(k)
2880 gelc_long(k,i)=gelc_long(k,i)-ggg(k)
2882 C print *,"before33", gelc_long(1,i), gelc_long(1,j)
2887 IF (wel_loc.gt.0.0d0 .or. wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0
2888 & .or. wcorr6.gt.0.0d0 .or. wturn3.gt.0.0d0
2889 & .or. wturn4.gt.0.0d0 .or. wturn6.gt.0.0d0) THEN
2891 C 9/25/99 Mixed third-order local-electrostatic terms. The local-interaction
2892 C energy of a peptide unit is assumed in the form of a second-order
2893 C Fourier series in the angles lambda1 and lambda2 (see Nishikawa et al.
2894 C Macromolecules, 1974, 7, 797-806 for definition). This correlation terms
2895 C are computed for EVERY pair of non-contiguous peptide groups.
2898 if (j.lt.nres-1) then
2910 muij(kkk)=mu(k,i)*mu(l,j)
2911 c write(iout,*) 'mumu=', mu(k,i),mu(l,j),i,j,k,l
2914 gmuij1(kkk)=gtb1(k,i+1)*mu(l,j)
2915 c write(iout,*) 'k=',k,i,gtb1(k,i+1),gtb1(k,i+1)*mu(l,j)
2916 gmuij2(kkk)=gUb2(k,i)*mu(l,j)
2917 gmuji1(kkk)=mu(k,i)*gtb1(l,j+1)
2918 c write(iout,*) 'l=',l,j,gtb1(l,j+1),gtb1(l,j+1)*mu(k,i)
2919 gmuji2(kkk)=mu(k,i)*gUb2(l,j)
2925 write (iout,*) 'EELEC: i',i,' j',j
2926 write (iout,*) 'j',j,' j1',j1,' j2',j2
2927 write(iout,*) 'muij',muij
2928 write (iout,*) "uy",uy(:,i)
2929 write (iout,*) "uz",uz(:,j)
2930 write (iout,*) "erij",erij
2932 ury=scalar(uy(1,i),erij)
2933 urz=scalar(uz(1,i),erij)
2934 vry=scalar(uy(1,j),erij)
2935 vrz=scalar(uz(1,j),erij)
2936 a22=scalar(uy(1,i),uy(1,j))-3*ury*vry
2937 a23=scalar(uy(1,i),uz(1,j))-3*ury*vrz
2938 a32=scalar(uz(1,i),uy(1,j))-3*urz*vry
2939 a33=scalar(uz(1,i),uz(1,j))-3*urz*vrz
2940 fac=dsqrt(-ael6i)*r3ij
2945 cd write (iout,'(4i5,4f10.5)')
2946 cd & i,itortyp(itype(i)),j,itortyp(itype(j)),a22,a23,a32,a33
2947 cd write (iout,'(6f10.5)') (muij(k),k=1,4),fac,eel_loc_ij
2948 cd write (iout,'(2(3f10.5,5x)/2(3f10.5,5x))') uy(:,i),uz(:,i),
2949 cd & uy(:,j),uz(:,j)
2950 cd write (iout,'(4f10.5)')
2951 cd & scalar(uy(1,i),uy(1,j)),scalar(uy(1,i),uz(1,j)),
2952 cd & scalar(uz(1,i),uy(1,j)),scalar(uz(1,i),uz(1,j))
2953 cd write (iout,'(4f10.5)') ury,urz,vry,vrz
2954 cd write (iout,'(9f10.5/)')
2955 cd & fac22,a22,fac23,a23,fac32,a32,fac33,a33,eel_loc_ij
2956 C Derivatives of the elements of A in virtual-bond vectors
2958 call unormderiv(erij(1),unmat(1,1),rmij,erder(1,1))
2960 uryg(k,1)=scalar(erder(1,k),uy(1,i))
2961 uryg(k,2)=scalar(uygrad(1,k,1,i),erij(1))
2962 uryg(k,3)=scalar(uygrad(1,k,2,i),erij(1))
2963 urzg(k,1)=scalar(erder(1,k),uz(1,i))
2964 urzg(k,2)=scalar(uzgrad(1,k,1,i),erij(1))
2965 urzg(k,3)=scalar(uzgrad(1,k,2,i),erij(1))
2966 vryg(k,1)=scalar(erder(1,k),uy(1,j))
2967 vryg(k,2)=scalar(uygrad(1,k,1,j),erij(1))
2968 vryg(k,3)=scalar(uygrad(1,k,2,j),erij(1))
2969 vrzg(k,1)=scalar(erder(1,k),uz(1,j))
2970 vrzg(k,2)=scalar(uzgrad(1,k,1,j),erij(1))
2971 vrzg(k,3)=scalar(uzgrad(1,k,2,j),erij(1))
2973 C Compute radial contributions to the gradient
2991 C Add the contributions coming from er
2994 agg(k,1)=agg(k,1)+fac3*(uryg(k,1)*vry+vryg(k,1)*ury)
2995 agg(k,2)=agg(k,2)+fac3*(uryg(k,1)*vrz+vrzg(k,1)*ury)
2996 agg(k,3)=agg(k,3)+fac3*(urzg(k,1)*vry+vryg(k,1)*urz)
2997 agg(k,4)=agg(k,4)+fac3*(urzg(k,1)*vrz+vrzg(k,1)*urz)
3000 C Derivatives in DC(i)
3001 cgrad ghalf1=0.5d0*agg(k,1)
3002 cgrad ghalf2=0.5d0*agg(k,2)
3003 cgrad ghalf3=0.5d0*agg(k,3)
3004 cgrad ghalf4=0.5d0*agg(k,4)
3005 aggi(k,1)=fac*(scalar(uygrad(1,k,1,i),uy(1,j))
3006 & -3.0d0*uryg(k,2)*vry)!+ghalf1
3007 aggi(k,2)=fac*(scalar(uygrad(1,k,1,i),uz(1,j))
3008 & -3.0d0*uryg(k,2)*vrz)!+ghalf2
3009 aggi(k,3)=fac*(scalar(uzgrad(1,k,1,i),uy(1,j))
3010 & -3.0d0*urzg(k,2)*vry)!+ghalf3
3011 aggi(k,4)=fac*(scalar(uzgrad(1,k,1,i),uz(1,j))
3012 & -3.0d0*urzg(k,2)*vrz)!+ghalf4
3013 C Derivatives in DC(i+1)
3014 aggi1(k,1)=fac*(scalar(uygrad(1,k,2,i),uy(1,j))
3015 & -3.0d0*uryg(k,3)*vry)!+agg(k,1)
3016 aggi1(k,2)=fac*(scalar(uygrad(1,k,2,i),uz(1,j))
3017 & -3.0d0*uryg(k,3)*vrz)!+agg(k,2)
3018 aggi1(k,3)=fac*(scalar(uzgrad(1,k,2,i),uy(1,j))
3019 & -3.0d0*urzg(k,3)*vry)!+agg(k,3)
3020 aggi1(k,4)=fac*(scalar(uzgrad(1,k,2,i),uz(1,j))
3021 & -3.0d0*urzg(k,3)*vrz)!+agg(k,4)
3022 C Derivatives in DC(j)
3023 aggj(k,1)=fac*(scalar(uygrad(1,k,1,j),uy(1,i))
3024 & -3.0d0*vryg(k,2)*ury)!+ghalf1
3025 aggj(k,2)=fac*(scalar(uzgrad(1,k,1,j),uy(1,i))
3026 & -3.0d0*vrzg(k,2)*ury)!+ghalf2
3027 aggj(k,3)=fac*(scalar(uygrad(1,k,1,j),uz(1,i))
3028 & -3.0d0*vryg(k,2)*urz)!+ghalf3
3029 aggj(k,4)=fac*(scalar(uzgrad(1,k,1,j),uz(1,i))
3030 & -3.0d0*vrzg(k,2)*urz)!+ghalf4
3031 C Derivatives in DC(j+1) or DC(nres-1)
3032 aggj1(k,1)=fac*(scalar(uygrad(1,k,2,j),uy(1,i))
3033 & -3.0d0*vryg(k,3)*ury)
3034 aggj1(k,2)=fac*(scalar(uzgrad(1,k,2,j),uy(1,i))
3035 & -3.0d0*vrzg(k,3)*ury)
3036 aggj1(k,3)=fac*(scalar(uygrad(1,k,2,j),uz(1,i))
3037 & -3.0d0*vryg(k,3)*urz)
3038 aggj1(k,4)=fac*(scalar(uzgrad(1,k,2,j),uz(1,i))
3039 & -3.0d0*vrzg(k,3)*urz)
3040 cgrad if (j.eq.nres-1 .and. i.lt.j-2) then
3042 cgrad aggj1(k,l)=aggj1(k,l)+agg(k,l)
3057 aggi(k,l)=-aggi(k,l)
3058 aggi1(k,l)=-aggi1(k,l)
3059 aggj(k,l)=-aggj(k,l)
3060 aggj1(k,l)=-aggj1(k,l)
3064 if (j.lt.nres-1) then
3070 aggi(k,l)=-aggi(k,l)
3071 aggi1(k,l)=-aggi1(k,l)
3072 aggj(k,l)=-aggj(k,l)
3073 aggj1(k,l)=-aggj1(k,l)
3084 aggi(k,l)=-aggi(k,l)
3085 aggi1(k,l)=-aggi1(k,l)
3086 aggj(k,l)=-aggj(k,l)
3087 aggj1(k,l)=-aggj1(k,l)
3092 IF (wel_loc.gt.0.0d0) THEN
3093 C Contribution to the local-electrostatic energy coming from the i-j pair
3094 eel_loc_ij=a22*muij(1)+a23*muij(2)+a32*muij(3)
3097 write (iout,*) "muij",muij," a22",a22," a23",a23," a32",a32,
3099 write (iout,*) "ij",i,j," eel_loc_ij",eel_loc_ij,
3100 & " wel_loc",wel_loc
3102 if (shield_mode.eq.0) then
3109 eel_loc_ij=eel_loc_ij
3110 & *fac_shield(i)*fac_shield(j)*sss
3111 if (energy_dec) write (iout,'(a6,2i5,0pf7.3)')
3112 & 'eelloc',i,j,eel_loc_ij
3113 c if (eel_loc_ij.ne.0)
3114 c & write (iout,'(a4,2i4,8f9.5)')'chuj',
3115 c & i,j,a22,muij(1),a23,muij(2),a32,muij(3),a33,muij(4)
3117 eel_loc=eel_loc+eel_loc_ij
3118 C Now derivative over eel_loc
3120 if ((fac_shield(i).gt.0).and.(fac_shield(j).gt.0).and.
3121 & (shield_mode.gt.0)) then
3124 do ilist=1,ishield_list(i)
3125 iresshield=shield_list(ilist,i)
3127 rlocshield=grad_shield_side(k,ilist,i)*eel_loc_ij
3130 gshieldx_ll(k,iresshield)=gshieldx_ll(k,iresshield)+
3132 & +grad_shield_loc(k,ilist,i)*eel_loc_ij/fac_shield(i)
3133 gshieldc_ll(k,iresshield-1)=gshieldc_ll(k,iresshield-1)
3137 do ilist=1,ishield_list(j)
3138 iresshield=shield_list(ilist,j)
3140 rlocshield=grad_shield_side(k,ilist,j)*eel_loc_ij
3143 gshieldx_ll(k,iresshield)=gshieldx_ll(k,iresshield)+
3145 & +grad_shield_loc(k,ilist,j)*eel_loc_ij/fac_shield(j)
3146 gshieldc_ll(k,iresshield-1)=gshieldc_ll(k,iresshield-1)
3153 gshieldc_ll(k,i)=gshieldc_ll(k,i)+
3154 & grad_shield(k,i)*eel_loc_ij/fac_shield(i)
3155 gshieldc_ll(k,j)=gshieldc_ll(k,j)+
3156 & grad_shield(k,j)*eel_loc_ij/fac_shield(j)
3157 gshieldc_ll(k,i-1)=gshieldc_ll(k,i-1)+
3158 & grad_shield(k,i)*eel_loc_ij/fac_shield(i)
3159 gshieldc_ll(k,j-1)=gshieldc_ll(k,j-1)+
3160 & grad_shield(k,j)*eel_loc_ij/fac_shield(j)
3165 c write (iout,*) 'i',i,' j',j,itype(i),itype(j),
3166 c & ' eel_loc_ij',eel_loc_ij
3167 C write(iout,*) 'muije=',i,j,muij(1),muij(2),muij(3),muij(4)
3168 C Calculate patrial derivative for theta angle
3170 geel_loc_ij=(a22*gmuij1(1)
3174 & *fac_shield(i)*fac_shield(j)*sss
3175 c write(iout,*) "derivative over thatai"
3176 c write(iout,*) a22*gmuij1(1), a23*gmuij1(2) ,a32*gmuij1(3),
3178 gloc(nphi+i,icg)=gloc(nphi+i,icg)+
3179 & geel_loc_ij*wel_loc
3180 c write(iout,*) "derivative over thatai-1"
3181 c write(iout,*) a22*gmuij2(1), a23*gmuij2(2) ,a32*gmuij2(3),
3188 gloc(nphi+i-1,icg)=gloc(nphi+i-1,icg)+
3189 & geel_loc_ij*wel_loc
3190 & *fac_shield(i)*fac_shield(j)*sss
3192 c Derivative over j residue
3193 geel_loc_ji=a22*gmuji1(1)
3197 c write(iout,*) "derivative over thataj"
3198 c write(iout,*) a22*gmuji1(1), a23*gmuji1(2) ,a32*gmuji1(3),
3201 gloc(nphi+j,icg)=gloc(nphi+j,icg)+
3202 & geel_loc_ji*wel_loc
3203 & *fac_shield(i)*fac_shield(j)
3210 c write(iout,*) "derivative over thataj-1"
3211 c write(iout,*) a22*gmuji2(1), a23*gmuji2(2) ,a32*gmuji2(3),
3213 gloc(nphi+j-1,icg)=gloc(nphi+j-1,icg)+
3214 & geel_loc_ji*wel_loc
3215 & *fac_shield(i)*fac_shield(j)*sss
3217 cd write (iout,*) 'i',i,' j',j,' eel_loc_ij',eel_loc_ij
3219 C Partial derivatives in virtual-bond dihedral angles gamma
3221 & gel_loc_loc(i-1)=gel_loc_loc(i-1)+
3222 & (a22*muder(1,i)*mu(1,j)+a23*muder(1,i)*mu(2,j)
3223 & +a32*muder(2,i)*mu(1,j)+a33*muder(2,i)*mu(2,j))
3224 & *fac_shield(i)*fac_shield(j)
3226 gel_loc_loc(j-1)=gel_loc_loc(j-1)+
3227 & (a22*mu(1,i)*muder(1,j)+a23*mu(1,i)*muder(2,j)
3228 & +a32*mu(2,i)*muder(1,j)+a33*mu(2,i)*muder(2,j))
3229 & *fac_shield(i)*fac_shield(j)
3230 C Derivatives of eello in DC(i+1) thru DC(j-1) or DC(nres-2)
3231 aux=eel_loc_ij/sss*sssgrad*rmij
3236 ggg(l)=ggg(l)+(agg(l,1)*muij(1)+
3237 & agg(l,2)*muij(2)+agg(l,3)*muij(3)+agg(l,4)*muij(4))
3238 & *fac_shield(i)*fac_shield(j)*sss
3239 gel_loc_long(l,j)=gel_loc_long(l,j)+ggg(l)
3240 gel_loc_long(l,i)=gel_loc_long(l,i)-ggg(l)
3241 cgrad ghalf=0.5d0*ggg(l)
3242 cgrad gel_loc(l,i)=gel_loc(l,i)+ghalf
3243 cgrad gel_loc(l,j)=gel_loc(l,j)+ghalf
3247 cgrad gel_loc(l,k)=gel_loc(l,k)+ggg(l)
3250 C Remaining derivatives of eello
3252 gel_loc(l,i)=gel_loc(l,i)+(aggi(l,1)*muij(1)+
3253 & aggi(l,2)*muij(2)+aggi(l,3)*muij(3)+aggi(l,4)*muij(4))
3254 & *fac_shield(i)*fac_shield(j)
3256 gel_loc(l,i+1)=gel_loc(l,i+1)+(aggi1(l,1)*muij(1)+
3257 & aggi1(l,2)*muij(2)+aggi1(l,3)*muij(3)+aggi1(l,4)*muij(4))
3258 & *fac_shield(i)*fac_shield(j)
3260 gel_loc(l,j)=gel_loc(l,j)+(aggj(l,1)*muij(1)+
3261 & aggj(l,2)*muij(2)+aggj(l,3)*muij(3)+aggj(l,4)*muij(4))
3262 & *fac_shield(i)*fac_shield(j)
3264 gel_loc(l,j1)=gel_loc(l,j1)+(aggj1(l,1)*muij(1)+
3265 & aggj1(l,2)*muij(2)+aggj1(l,3)*muij(3)+aggj1(l,4)*muij(4))
3266 & *fac_shield(i)*fac_shield(j)
3273 C Change 12/26/95 to calculate four-body contributions to H-bonding energy
3274 c if (j.gt.i+1 .and. num_conti.le.maxconts) then
3276 if (wcorr+wcorr4+wcorr5+wcorr6.gt.0.0d0
3277 & .and. num_conti.le.maxconts) then
3278 c write (iout,*) i,j," entered corr"
3280 C Calculate the contact function. The ith column of the array JCONT will
3281 C contain the numbers of atoms that make contacts with the atom I (of numbers
3282 C greater than I). The arrays FACONT and GACONT will contain the values of
3283 C the contact function and its derivative.
3284 c r0ij=1.02D0*rpp(iteli,itelj)
3285 c r0ij=1.11D0*rpp(iteli,itelj)
3286 r0ij=2.20D0*rpp(iteli,itelj)
3287 c r0ij=1.55D0*rpp(iteli,itelj)
3288 call gcont(rij,r0ij,1.0D0,0.2d0*r0ij,fcont,fprimcont)
3289 if (fcont.gt.0.0D0) then
3290 num_conti=num_conti+1
3291 if (num_conti.gt.maxconts) then
3292 write (iout,*) 'WARNING - max. # of contacts exceeded;',
3293 & ' will skip next contacts for this conf.'
3295 jcont_hb(num_conti,i)=j
3296 cd write (iout,*) "i",i," j",j," num_conti",num_conti,
3297 cd & " jcont_hb",jcont_hb(num_conti,i)
3298 IF (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or.
3299 & wcorr6.gt.0.0d0 .or. wturn6.gt.0.0d0) THEN
3300 C 9/30/99 (AL) - store components necessary to evaluate higher-order loc-el
3302 d_cont(num_conti,i)=rij
3303 cd write (2,'(3e15.5)') rij,r0ij+0.2d0*r0ij,rij
3304 C --- Electrostatic-interaction matrix ---
3305 a_chuj(1,1,num_conti,i)=a22
3306 a_chuj(1,2,num_conti,i)=a23
3307 a_chuj(2,1,num_conti,i)=a32
3308 a_chuj(2,2,num_conti,i)=a33
3309 C --- Gradient of rij
3312 grij_hb_cont(kkk,num_conti,i)=erij(kkk)
3319 a_chuj_der(k,l,m,1,num_conti,i)=agg(m,kkll)
3320 a_chuj_der(k,l,m,2,num_conti,i)=aggi(m,kkll)
3321 a_chuj_der(k,l,m,3,num_conti,i)=aggi1(m,kkll)
3322 a_chuj_der(k,l,m,4,num_conti,i)=aggj(m,kkll)
3323 a_chuj_der(k,l,m,5,num_conti,i)=aggj1(m,kkll)
3329 IF (wcorr4.eq.0.0d0 .and. wcorr.gt.0.0d0) THEN
3330 C Calculate contact energies
3332 wij=cosa-3.0D0*cosb*cosg
3335 c fac3=dsqrt(-ael6i)/r0ij**3
3336 fac3=dsqrt(-ael6i)*r3ij
3337 c ees0pij=dsqrt(4.0D0+cosa4+wij*wij-3.0D0*cosbg1*cosbg1)
3338 ees0tmp=4.0D0+cosa4+wij*wij-3.0D0*cosbg1*cosbg1
3339 if (ees0tmp.gt.0) then
3340 ees0pij=dsqrt(ees0tmp)
3344 c ees0mij=dsqrt(4.0D0-cosa4+wij*wij-3.0D0*cosbg2*cosbg2)
3345 ees0tmp=4.0D0-cosa4+wij*wij-3.0D0*cosbg2*cosbg2
3346 if (ees0tmp.gt.0) then
3347 ees0mij=dsqrt(ees0tmp)
3352 if (shield_mode.eq.0) then
3356 ees0plist(num_conti,i)=j
3357 C fac_shield(i)=0.4d0
3358 C fac_shield(j)=0.6d0
3360 ees0p(num_conti,i)=0.5D0*fac3*(ees0pij+ees0mij)
3361 & *fac_shield(i)*fac_shield(j)
3362 ees0m(num_conti,i)=0.5D0*fac3*(ees0pij-ees0mij)
3363 & *fac_shield(i)*fac_shield(j)
3364 C Diagnostics. Comment out or remove after debugging!
3365 c ees0p(num_conti,i)=0.5D0*fac3*ees0pij
3366 c ees0m(num_conti,i)=0.5D0*fac3*ees0mij
3367 c ees0m(num_conti,i)=0.0D0
3369 c write (iout,*) 'i=',i,' j=',j,' rij=',rij,' r0ij=',r0ij,
3370 c & ' ees0ij=',ees0p(num_conti,i),ees0m(num_conti,i),' fcont=',fcont
3371 C Angular derivatives of the contact function
3373 ees0pij1=fac3/ees0pij
3374 ees0mij1=fac3/ees0mij
3375 fac3p=-3.0D0*fac3*rrmij
3376 ees0pijp=0.5D0*fac3p*(ees0pij+ees0mij)
3377 ees0mijp=0.5D0*fac3p*(ees0pij-ees0mij)
3379 ecosa1= ees0pij1*( 1.0D0+0.5D0*wij)
3380 ecosb1=-1.5D0*ees0pij1*(wij*cosg+cosbg1)
3381 ecosg1=-1.5D0*ees0pij1*(wij*cosb+cosbg1)
3382 ecosa2= ees0mij1*(-1.0D0+0.5D0*wij)
3383 ecosb2=-1.5D0*ees0mij1*(wij*cosg+cosbg2)
3384 ecosg2=-1.5D0*ees0mij1*(wij*cosb-cosbg2)
3385 ecosap=ecosa1+ecosa2
3386 ecosbp=ecosb1+ecosb2
3387 ecosgp=ecosg1+ecosg2
3388 ecosam=ecosa1-ecosa2
3389 ecosbm=ecosb1-ecosb2
3390 ecosgm=ecosg1-ecosg2
3399 facont_hb(num_conti,i)=fcont
3402 fprimcont=fprimcont/rij
3403 cd facont_hb(num_conti,i)=1.0D0
3404 C Following line is for diagnostics.
3407 dcosb(k)=rmij*(dc_norm(k,i)-erij(k)*cosb)
3408 dcosg(k)=rmij*(dc_norm(k,j)-erij(k)*cosg)
3411 gggp(k)=ecosbp*dcosb(k)+ecosgp*dcosg(k)
3412 gggm(k)=ecosbm*dcosb(k)+ecosgm*dcosg(k)
3414 gggp(1)=gggp(1)+ees0pijp*xj
3415 & +ees0p(num_conti,i)/sss*rmij*xj*sssgrad
3416 gggp(2)=gggp(2)+ees0pijp*yj
3417 & +ees0p(num_conti,i)/sss*rmij*yj*sssgrad
3418 gggp(3)=gggp(3)+ees0pijp*zj
3419 & +ees0p(num_conti,i)/sss*rmij*zj*sssgrad
3420 gggm(1)=gggm(1)+ees0mijp*xj
3421 & +ees0m(num_conti,i)/sss*rmij*xj*sssgrad
3422 gggm(2)=gggm(2)+ees0mijp*yj
3423 & +ees0m(num_conti,i)/sss*rmij*yj*sssgrad
3424 gggm(3)=gggm(3)+ees0mijp*zj
3425 & +ees0m(num_conti,i)/sss*rmij*zj*sssgrad
3426 C Derivatives due to the contact function
3427 gacont_hbr(1,num_conti,i)=fprimcont*xj
3428 gacont_hbr(2,num_conti,i)=fprimcont*yj
3429 gacont_hbr(3,num_conti,i)=fprimcont*zj
3432 c 10/24/08 cgrad and ! comments indicate the parts of the code removed
3433 c following the change of gradient-summation algorithm.
3435 cgrad ghalfp=0.5D0*gggp(k)
3436 cgrad ghalfm=0.5D0*gggm(k)
3437 gacontp_hb1(k,num_conti,i)=!ghalfp
3438 & +(ecosap*(dc_norm(k,j)-cosa*dc_norm(k,i))
3439 & + ecosbp*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1)
3440 & *fac_shield(i)*fac_shield(j)*sss
3442 gacontp_hb2(k,num_conti,i)=!ghalfp
3443 & +(ecosap*(dc_norm(k,i)-cosa*dc_norm(k,j))
3444 & + ecosgp*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1)
3445 & *fac_shield(i)*fac_shield(j)*sss
3447 gacontp_hb3(k,num_conti,i)=gggp(k)
3448 & *fac_shield(i)*fac_shield(j)*sss
3450 gacontm_hb1(k,num_conti,i)=!ghalfm
3451 & +(ecosam*(dc_norm(k,j)-cosa*dc_norm(k,i))
3452 & + ecosbm*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1)
3453 & *fac_shield(i)*fac_shield(j)*sss
3455 gacontm_hb2(k,num_conti,i)=!ghalfm
3456 & +(ecosam*(dc_norm(k,i)-cosa*dc_norm(k,j))
3457 & + ecosgm*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1)
3458 & *fac_shield(i)*fac_shield(j)*sss
3460 gacontm_hb3(k,num_conti,i)=gggm(k)
3461 & *fac_shield(i)*fac_shield(j)*sss
3464 C Diagnostics. Comment out or remove after debugging!
3466 cdiag gacontp_hb1(k,num_conti,i)=0.0D0
3467 cdiag gacontp_hb2(k,num_conti,i)=0.0D0
3468 cdiag gacontp_hb3(k,num_conti,i)=0.0D0
3469 cdiag gacontm_hb1(k,num_conti,i)=0.0D0
3470 cdiag gacontm_hb2(k,num_conti,i)=0.0D0
3471 cdiag gacontm_hb3(k,num_conti,i)=0.0D0
3477 endif ! num_conti.le.maxconts
3482 if (wturn3.gt.0.0d0 .or. wturn4.gt.0.0d0) then
3485 ghalf=0.5d0*agg(l,k)
3486 aggi(l,k)=aggi(l,k)+ghalf
3487 aggi1(l,k)=aggi1(l,k)+agg(l,k)
3488 aggj(l,k)=aggj(l,k)+ghalf
3491 if (j.eq.nres-1 .and. i.lt.j-2) then
3494 aggj1(l,k)=aggj1(l,k)+agg(l,k)
3500 c t_eelecij=t_eelecij+MPI_Wtime()-time00
3503 C-----------------------------------------------------------------------------
3504 subroutine eturn3(i,eello_turn3)
3505 C Third- and fourth-order contributions from turns
3506 implicit real*8 (a-h,o-z)
3507 include 'DIMENSIONS'
3508 include 'DIMENSIONS.ZSCOPT'
3509 include 'COMMON.IOUNITS'
3510 include 'COMMON.GEO'
3511 include 'COMMON.VAR'
3512 include 'COMMON.LOCAL'
3513 include 'COMMON.CHAIN'
3514 include 'COMMON.DERIV'
3515 include 'COMMON.INTERACT'
3516 include 'COMMON.CONTACTS'
3517 include 'COMMON.TORSION'
3518 include 'COMMON.VECTORS'
3519 include 'COMMON.FFIELD'
3520 include 'COMMON.CONTROL'
3521 include 'COMMON.SHIELD'
3522 include 'COMMON.CORRMAT'
3524 double precision auxmat(2,2),auxmat1(2,2),auxmat2(2,2),pizda(2,2),
3525 & e1t(2,2),e2t(2,2),e3t(2,2),e1tder(2,2),e2tder(2,2),e3tder(2,2),
3526 & e1a(2,2),ae3(2,2),ae3e2(2,2),auxvec(2),auxvec1(2),gpizda1(2,2),
3527 & gpizda2(2,2),auxgmat1(2,2),auxgmatt1(2,2),
3528 & auxgmat2(2,2),auxgmatt2(2,2)
3529 double precision agg(3,4),aggi(3,4),aggi1(3,4),
3530 & aggj(3,4),aggj1(3,4),a_temp(2,2),auxmat3(2,2)
3531 common /locel/ a_temp,agg,aggi,aggi1,aggj,aggj1,a22,a23,a32,a33,
3532 & dxi,dyi,dzi,dx_normi,dy_normi,dz_normi,xmedi,ymedi,zmedi,
3535 c write (iout,*) "eturn3",i,j,j1,j2
3540 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
3542 C Third-order contributions
3549 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
3550 cd call checkint_turn3(i,a_temp,eello_turn3_num)
3551 call matmat2(EUg(1,1,i+1),EUg(1,1,i+2),auxmat(1,1))
3552 c auxalary matices for theta gradient
3553 c auxalary matrix for i+1 and constant i+2
3554 call matmat2(gtEUg(1,1,i+1),EUg(1,1,i+2),auxgmat1(1,1))
3555 c auxalary matrix for i+2 and constant i+1
3556 call matmat2(EUg(1,1,i+1),gtEUg(1,1,i+2),auxgmat2(1,1))
3557 call transpose2(auxmat(1,1),auxmat1(1,1))
3558 call transpose2(auxgmat1(1,1),auxgmatt1(1,1))
3559 call transpose2(auxgmat2(1,1),auxgmatt2(1,1))
3560 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
3561 call matmat2(a_temp(1,1),auxgmatt1(1,1),gpizda1(1,1))
3562 call matmat2(a_temp(1,1),auxgmatt2(1,1),gpizda2(1,1))
3563 if (shield_mode.eq.0) then
3570 eello_turn3=eello_turn3+0.5d0*(pizda(1,1)+pizda(2,2))
3571 & *fac_shield(i)*fac_shield(j)
3572 eello_t3=0.5d0*(pizda(1,1)+pizda(2,2))
3573 & *fac_shield(i)*fac_shield(j)
3574 if (energy_dec) write (iout,'(6heturn3,2i5,0pf7.3)') i,i+2,
3578 C Derivatives in theta
3579 gloc(nphi+i,icg)=gloc(nphi+i,icg)
3580 & +0.5d0*(gpizda1(1,1)+gpizda1(2,2))*wturn3
3581 & *fac_shield(i)*fac_shield(j)
3582 gloc(nphi+i+1,icg)=gloc(nphi+i+1,icg)
3583 & +0.5d0*(gpizda2(1,1)+gpizda2(2,2))*wturn3
3584 & *fac_shield(i)*fac_shield(j)
3587 C Derivatives in shield mode
3588 if ((fac_shield(i).gt.0).and.(fac_shield(j).gt.0).and.
3589 & (shield_mode.gt.0)) then
3592 do ilist=1,ishield_list(i)
3593 iresshield=shield_list(ilist,i)
3595 rlocshield=grad_shield_side(k,ilist,i)*eello_t3/fac_shield(i)
3597 gshieldx_t3(k,iresshield)=gshieldx_t3(k,iresshield)+
3599 & +grad_shield_loc(k,ilist,i)*eello_t3/fac_shield(i)
3600 gshieldc_t3(k,iresshield-1)=gshieldc_t3(k,iresshield-1)
3604 do ilist=1,ishield_list(j)
3605 iresshield=shield_list(ilist,j)
3607 rlocshield=grad_shield_side(k,ilist,j)*eello_t3/fac_shield(j)
3609 gshieldx_t3(k,iresshield)=gshieldx_t3(k,iresshield)+
3611 & +grad_shield_loc(k,ilist,j)*eello_t3/fac_shield(j)
3612 gshieldc_t3(k,iresshield-1)=gshieldc_t3(k,iresshield-1)
3619 gshieldc_t3(k,i)=gshieldc_t3(k,i)+
3620 & grad_shield(k,i)*eello_t3/fac_shield(i)
3621 gshieldc_t3(k,j)=gshieldc_t3(k,j)+
3622 & grad_shield(k,j)*eello_t3/fac_shield(j)
3623 gshieldc_t3(k,i-1)=gshieldc_t3(k,i-1)+
3624 & grad_shield(k,i)*eello_t3/fac_shield(i)
3625 gshieldc_t3(k,j-1)=gshieldc_t3(k,j-1)+
3626 & grad_shield(k,j)*eello_t3/fac_shield(j)
3630 C if (energy_dec) write (iout,'(a6,2i5,0pf7.3)')
3631 cd write (2,*) 'i,',i,' j',j,'eello_turn3',
3632 cd & 0.5d0*(pizda(1,1)+pizda(2,2)),
3633 cd & ' eello_turn3_num',4*eello_turn3_num
3634 C Derivatives in gamma(i)
3635 call matmat2(EUgder(1,1,i+1),EUg(1,1,i+2),auxmat2(1,1))
3636 call transpose2(auxmat2(1,1),auxmat3(1,1))
3637 call matmat2(a_temp(1,1),auxmat3(1,1),pizda(1,1))
3638 gel_loc_turn3(i)=gel_loc_turn3(i)+0.5d0*(pizda(1,1)+pizda(2,2))
3639 & *fac_shield(i)*fac_shield(j)
3640 C Derivatives in gamma(i+1)
3641 call matmat2(EUg(1,1,i+1),EUgder(1,1,i+2),auxmat2(1,1))
3642 call transpose2(auxmat2(1,1),auxmat3(1,1))
3643 call matmat2(a_temp(1,1),auxmat3(1,1),pizda(1,1))
3644 gel_loc_turn3(i+1)=gel_loc_turn3(i+1)
3645 & +0.5d0*(pizda(1,1)+pizda(2,2))
3646 & *fac_shield(i)*fac_shield(j)
3647 C Cartesian derivatives
3649 c ghalf1=0.5d0*agg(l,1)
3650 c ghalf2=0.5d0*agg(l,2)
3651 c ghalf3=0.5d0*agg(l,3)
3652 c ghalf4=0.5d0*agg(l,4)
3653 a_temp(1,1)=aggi(l,1)!+ghalf1
3654 a_temp(1,2)=aggi(l,2)!+ghalf2
3655 a_temp(2,1)=aggi(l,3)!+ghalf3
3656 a_temp(2,2)=aggi(l,4)!+ghalf4
3657 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
3658 gcorr3_turn(l,i)=gcorr3_turn(l,i)
3659 & +0.5d0*(pizda(1,1)+pizda(2,2))
3660 & *fac_shield(i)*fac_shield(j)
3662 a_temp(1,1)=aggi1(l,1)!+agg(l,1)
3663 a_temp(1,2)=aggi1(l,2)!+agg(l,2)
3664 a_temp(2,1)=aggi1(l,3)!+agg(l,3)
3665 a_temp(2,2)=aggi1(l,4)!+agg(l,4)
3666 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
3667 gcorr3_turn(l,i+1)=gcorr3_turn(l,i+1)
3668 & +0.5d0*(pizda(1,1)+pizda(2,2))
3669 & *fac_shield(i)*fac_shield(j)
3670 a_temp(1,1)=aggj(l,1)!+ghalf1
3671 a_temp(1,2)=aggj(l,2)!+ghalf2
3672 a_temp(2,1)=aggj(l,3)!+ghalf3
3673 a_temp(2,2)=aggj(l,4)!+ghalf4
3674 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
3675 gcorr3_turn(l,j)=gcorr3_turn(l,j)
3676 & +0.5d0*(pizda(1,1)+pizda(2,2))
3677 & *fac_shield(i)*fac_shield(j)
3678 a_temp(1,1)=aggj1(l,1)
3679 a_temp(1,2)=aggj1(l,2)
3680 a_temp(2,1)=aggj1(l,3)
3681 a_temp(2,2)=aggj1(l,4)
3682 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
3683 gcorr3_turn(l,j1)=gcorr3_turn(l,j1)
3684 & +0.5d0*(pizda(1,1)+pizda(2,2))
3685 & *fac_shield(i)*fac_shield(j)
3692 C-------------------------------------------------------------------------------
3693 subroutine eturn4(i,eello_turn4)
3694 C Third- and fourth-order contributions from turns
3695 implicit real*8 (a-h,o-z)
3696 include 'DIMENSIONS'
3697 include 'DIMENSIONS.ZSCOPT'
3698 include 'COMMON.IOUNITS'
3699 include 'COMMON.GEO'
3700 include 'COMMON.VAR'
3701 include 'COMMON.LOCAL'
3702 include 'COMMON.CHAIN'
3703 include 'COMMON.DERIV'
3704 include 'COMMON.INTERACT'
3705 include 'COMMON.CONTACTS'
3706 include 'COMMON.TORSION'
3707 include 'COMMON.VECTORS'
3708 include 'COMMON.FFIELD'
3709 include 'COMMON.CONTROL'
3710 include 'COMMON.SHIELD'
3711 include 'COMMON.CORRMAT'
3713 double precision auxmat(2,2),auxmat1(2,2),auxmat2(2,2),pizda(2,2),
3714 & e1t(2,2),e2t(2,2),e3t(2,2),e1tder(2,2),e2tder(2,2),e3tder(2,2),
3715 & e1a(2,2),ae3(2,2),ae3e2(2,2),auxvec(2),auxvec1(2),auxgvec(2),
3716 & auxgEvec1(2),auxgEvec2(2),auxgEvec3(2),
3717 & gte1t(2,2),gte2t(2,2),gte3t(2,2),
3718 & gte1a(2,2),gtae3(2,2),gtae3e2(2,2), ae3gte2(2,2),
3719 & gtEpizda1(2,2),gtEpizda2(2,2),gtEpizda3(2,2)
3720 double precision agg(3,4),aggi(3,4),aggi1(3,4),
3721 & aggj(3,4),aggj1(3,4),a_temp(2,2),auxmat3(2,2)
3722 common /locel/ a_temp,agg,aggi,aggi1,aggj,aggj1,a22,a23,a32,a33,
3723 & dxi,dyi,dzi,dx_normi,dy_normi,dz_normi,xmedi,ymedi,zmedi,
3726 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
3728 C Fourth-order contributions
3736 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
3737 cd call checkint_turn4(i,a_temp,eello_turn4_num)
3738 c write (iout,*) "eturn4 i",i," j",j," j1",j1," j2",j2
3739 c write(iout,*)"WCHODZE W PROGRAM"
3744 iti1=itype2loc(itype(i+1))
3745 iti2=itype2loc(itype(i+2))
3746 iti3=itype2loc(itype(i+3))
3747 c write(iout,*) "iti1",iti1," iti2",iti2," iti3",iti3
3748 call transpose2(EUg(1,1,i+1),e1t(1,1))
3749 call transpose2(Eug(1,1,i+2),e2t(1,1))
3750 call transpose2(Eug(1,1,i+3),e3t(1,1))
3751 C Ematrix derivative in theta
3752 call transpose2(gtEUg(1,1,i+1),gte1t(1,1))
3753 call transpose2(gtEug(1,1,i+2),gte2t(1,1))
3754 call transpose2(gtEug(1,1,i+3),gte3t(1,1))
3755 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
3756 c eta1 in derivative theta
3757 call matmat2(gte1t(1,1),a_temp(1,1),gte1a(1,1))
3758 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
3759 c auxgvec is derivative of Ub2 so i+3 theta
3760 call matvec2(e1a(1,1),gUb2(1,i+3),auxgvec(1))
3761 c auxalary matrix of E i+1
3762 call matvec2(gte1a(1,1),Ub2(1,i+3),auxgEvec1(1))
3765 s1=scalar2(b1(1,i+2),auxvec(1))
3766 c derivative of theta i+2 with constant i+3
3767 gs23=scalar2(gtb1(1,i+2),auxvec(1))
3768 c derivative of theta i+2 with constant i+2
3769 gs32=scalar2(b1(1,i+2),auxgvec(1))
3770 c derivative of E matix in theta of i+1
3771 gsE13=scalar2(b1(1,i+2),auxgEvec1(1))
3773 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
3774 c ea31 in derivative theta
3775 call matmat2(a_temp(1,1),gte3t(1,1),gtae3(1,1))
3776 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
3777 c auxilary matrix auxgvec of Ub2 with constant E matirx
3778 call matvec2(ae3(1,1),gUb2(1,i+2),auxgvec(1))
3779 c auxilary matrix auxgEvec1 of E matix with Ub2 constant
3780 call matvec2(gtae3(1,1),Ub2(1,i+2),auxgEvec3(1))
3784 s2=scalar2(b1(1,i+1),auxvec(1))
3785 c derivative of theta i+1 with constant i+3
3786 gs13=scalar2(gtb1(1,i+1),auxvec(1))
3787 c derivative of theta i+2 with constant i+1
3788 gs21=scalar2(b1(1,i+1),auxgvec(1))
3789 c derivative of theta i+3 with constant i+1
3790 gsE31=scalar2(b1(1,i+1),auxgEvec3(1))
3791 c write(iout,*) gs1,gs2,'i=',i,auxgvec(1),gUb2(1,i+2),gtb1(1,i+2),
3793 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
3794 c two derivatives over diffetent matrices
3795 c gtae3e2 is derivative over i+3
3796 call matmat2(gtae3(1,1),e2t(1,1),gtae3e2(1,1))
3797 c ae3gte2 is derivative over i+2
3798 call matmat2(ae3(1,1),gte2t(1,1),ae3gte2(1,1))
3799 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
3800 c three possible derivative over theta E matices
3802 call matmat2(ae3e2(1,1),gte1t(1,1),gtEpizda1(1,1))
3804 call matmat2(ae3gte2(1,1),e1t(1,1),gtEpizda2(1,1))
3806 call matmat2(gtae3e2(1,1),e1t(1,1),gtEpizda3(1,1))
3807 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3809 gsEE1=0.5d0*(gtEpizda1(1,1)+gtEpizda1(2,2))
3810 gsEE2=0.5d0*(gtEpizda2(1,1)+gtEpizda2(2,2))
3811 gsEE3=0.5d0*(gtEpizda3(1,1)+gtEpizda3(2,2))
3812 if (shield_mode.eq.0) then
3819 eello_turn4=eello_turn4-(s1+s2+s3)
3820 & *fac_shield(i)*fac_shield(j)
3821 eello_t4=-(s1+s2+s3)
3822 & *fac_shield(i)*fac_shield(j)
3823 c write(iout,*)'chujOWO', auxvec(1),b1(1,iti2)
3824 if (energy_dec) write (iout,'(a6,2i5,0pf7.3,3f7.3)')
3825 & 'eturn4',i,j,-(s1+s2+s3),s1,s2,s3
3826 C Now derivative over shield:
3827 if ((fac_shield(i).gt.0).and.(fac_shield(j).gt.0).and.
3828 & (shield_mode.gt.0)) then
3831 do ilist=1,ishield_list(i)
3832 iresshield=shield_list(ilist,i)
3834 rlocshield=grad_shield_side(k,ilist,i)*eello_t4/fac_shield(i)
3836 gshieldx_t4(k,iresshield)=gshieldx_t4(k,iresshield)+
3838 & +grad_shield_loc(k,ilist,i)*eello_t4/fac_shield(i)
3839 gshieldc_t4(k,iresshield-1)=gshieldc_t4(k,iresshield-1)
3843 do ilist=1,ishield_list(j)
3844 iresshield=shield_list(ilist,j)
3846 rlocshield=grad_shield_side(k,ilist,j)*eello_t4/fac_shield(j)
3848 gshieldx_t4(k,iresshield)=gshieldx_t4(k,iresshield)+
3850 & +grad_shield_loc(k,ilist,j)*eello_t4/fac_shield(j)
3851 gshieldc_t4(k,iresshield-1)=gshieldc_t4(k,iresshield-1)
3858 gshieldc_t4(k,i)=gshieldc_t4(k,i)+
3859 & grad_shield(k,i)*eello_t4/fac_shield(i)
3860 gshieldc_t4(k,j)=gshieldc_t4(k,j)+
3861 & grad_shield(k,j)*eello_t4/fac_shield(j)
3862 gshieldc_t4(k,i-1)=gshieldc_t4(k,i-1)+
3863 & grad_shield(k,i)*eello_t4/fac_shield(i)
3864 gshieldc_t4(k,j-1)=gshieldc_t4(k,j-1)+
3865 & grad_shield(k,j)*eello_t4/fac_shield(j)
3868 cd write (2,*) 'i,',i,' j',j,'eello_turn4',-(s1+s2+s3),
3869 cd & ' eello_turn4_num',8*eello_turn4_num
3871 gloc(nphi+i,icg)=gloc(nphi+i,icg)
3872 & -(gs13+gsE13+gsEE1)*wturn4
3873 & *fac_shield(i)*fac_shield(j)
3874 gloc(nphi+i+1,icg)= gloc(nphi+i+1,icg)
3875 & -(gs23+gs21+gsEE2)*wturn4
3876 & *fac_shield(i)*fac_shield(j)
3878 gloc(nphi+i+2,icg)= gloc(nphi+i+2,icg)
3879 & -(gs32+gsE31+gsEE3)*wturn4
3880 & *fac_shield(i)*fac_shield(j)
3882 c gloc(nphi+i+1,icg)=gloc(nphi+i+1,icg)-
3885 if (energy_dec) write (iout,'(a6,2i5,0pf7.3)')
3886 & 'eturn4',i,j,-(s1+s2+s3)
3887 c write (iout,*) 'i,',i,' j',j,'eello_turn4',-(s1+s2+s3),
3888 c & ' eello_turn4_num',8*eello_turn4_num
3889 C Derivatives in gamma(i)
3890 call transpose2(EUgder(1,1,i+1),e1tder(1,1))
3891 call matmat2(e1tder(1,1),a_temp(1,1),auxmat(1,1))
3892 call matvec2(auxmat(1,1),Ub2(1,i+3),auxvec(1))
3893 s1=scalar2(b1(1,i+2),auxvec(1))
3894 call matmat2(ae3e2(1,1),e1tder(1,1),pizda(1,1))
3895 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3896 gel_loc_turn4(i)=gel_loc_turn4(i)-(s1+s3)
3897 & *fac_shield(i)*fac_shield(j)
3898 C Derivatives in gamma(i+1)
3899 call transpose2(EUgder(1,1,i+2),e2tder(1,1))
3900 call matvec2(ae3(1,1),Ub2der(1,i+2),auxvec(1))
3901 s2=scalar2(b1(1,i+1),auxvec(1))
3902 call matmat2(ae3(1,1),e2tder(1,1),auxmat(1,1))
3903 call matmat2(auxmat(1,1),e1t(1,1),pizda(1,1))
3904 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3905 gel_loc_turn4(i+1)=gel_loc_turn4(i+1)-(s2+s3)
3906 & *fac_shield(i)*fac_shield(j)
3907 C Derivatives in gamma(i+2)
3908 call transpose2(EUgder(1,1,i+3),e3tder(1,1))
3909 call matvec2(e1a(1,1),Ub2der(1,i+3),auxvec(1))
3910 s1=scalar2(b1(1,i+2),auxvec(1))
3911 call matmat2(a_temp(1,1),e3tder(1,1),auxmat(1,1))
3912 call matvec2(auxmat(1,1),Ub2(1,i+2),auxvec(1))
3913 s2=scalar2(b1(1,i+1),auxvec(1))
3914 call matmat2(auxmat(1,1),e2t(1,1),auxmat3(1,1))
3915 call matmat2(auxmat3(1,1),e1t(1,1),pizda(1,1))
3916 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3917 gel_loc_turn4(i+2)=gel_loc_turn4(i+2)-(s1+s2+s3)
3918 & *fac_shield(i)*fac_shield(j)
3920 C Cartesian derivatives
3921 C Derivatives of this turn contributions in DC(i+2)
3922 if (j.lt.nres-1) then
3924 a_temp(1,1)=agg(l,1)
3925 a_temp(1,2)=agg(l,2)
3926 a_temp(2,1)=agg(l,3)
3927 a_temp(2,2)=agg(l,4)
3928 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
3929 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
3930 s1=scalar2(b1(1,i+2),auxvec(1))
3931 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
3932 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
3933 s2=scalar2(b1(1,i+1),auxvec(1))
3934 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
3935 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
3936 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3938 gcorr4_turn(l,i+2)=gcorr4_turn(l,i+2)-(s1+s2+s3)
3939 & *fac_shield(i)*fac_shield(j)
3942 C Remaining derivatives of this turn contribution
3944 a_temp(1,1)=aggi(l,1)
3945 a_temp(1,2)=aggi(l,2)
3946 a_temp(2,1)=aggi(l,3)
3947 a_temp(2,2)=aggi(l,4)
3948 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
3949 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
3950 s1=scalar2(b1(1,i+2),auxvec(1))
3951 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
3952 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
3953 s2=scalar2(b1(1,i+1),auxvec(1))
3954 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
3955 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
3956 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3957 gcorr4_turn(l,i)=gcorr4_turn(l,i)-(s1+s2+s3)
3958 & *fac_shield(i)*fac_shield(j)
3959 a_temp(1,1)=aggi1(l,1)
3960 a_temp(1,2)=aggi1(l,2)
3961 a_temp(2,1)=aggi1(l,3)
3962 a_temp(2,2)=aggi1(l,4)
3963 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
3964 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
3965 s1=scalar2(b1(1,i+2),auxvec(1))
3966 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
3967 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
3968 s2=scalar2(b1(1,i+1),auxvec(1))
3969 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
3970 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
3971 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3972 gcorr4_turn(l,i+1)=gcorr4_turn(l,i+1)-(s1+s2+s3)
3973 & *fac_shield(i)*fac_shield(j)
3974 a_temp(1,1)=aggj(l,1)
3975 a_temp(1,2)=aggj(l,2)
3976 a_temp(2,1)=aggj(l,3)
3977 a_temp(2,2)=aggj(l,4)
3978 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
3979 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
3980 s1=scalar2(b1(1,i+2),auxvec(1))
3981 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
3982 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
3983 s2=scalar2(b1(1,i+1),auxvec(1))
3984 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
3985 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
3986 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3987 gcorr4_turn(l,j)=gcorr4_turn(l,j)-(s1+s2+s3)
3988 & *fac_shield(i)*fac_shield(j)
3989 a_temp(1,1)=aggj1(l,1)
3990 a_temp(1,2)=aggj1(l,2)
3991 a_temp(2,1)=aggj1(l,3)
3992 a_temp(2,2)=aggj1(l,4)
3993 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
3994 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
3995 s1=scalar2(b1(1,i+2),auxvec(1))
3996 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
3997 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
3998 s2=scalar2(b1(1,i+1),auxvec(1))
3999 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
4000 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
4001 s3=0.5d0*(pizda(1,1)+pizda(2,2))
4002 c write (iout,*) "s1",s1," s2",s2," s3",s3," s1+s2+s3",s1+s2+s3
4003 gcorr4_turn(l,j1)=gcorr4_turn(l,j1)-(s1+s2+s3)
4004 & *fac_shield(i)*fac_shield(j)
4011 C-----------------------------------------------------------------------------
4012 subroutine vecpr(u,v,w)
4013 implicit real*8(a-h,o-z)
4014 dimension u(3),v(3),w(3)
4015 w(1)=u(2)*v(3)-u(3)*v(2)
4016 w(2)=-u(1)*v(3)+u(3)*v(1)
4017 w(3)=u(1)*v(2)-u(2)*v(1)
4020 C-----------------------------------------------------------------------------
4021 subroutine unormderiv(u,ugrad,unorm,ungrad)
4022 C This subroutine computes the derivatives of a normalized vector u, given
4023 C the derivatives computed without normalization conditions, ugrad. Returns
4026 double precision u(3),ugrad(3,3),unorm,ungrad(3,3)
4027 double precision vec(3)
4028 double precision scalar
4030 c write (2,*) 'ugrad',ugrad
4033 vec(i)=scalar(ugrad(1,i),u(1))
4035 c write (2,*) 'vec',vec
4038 ungrad(j,i)=(ugrad(j,i)-u(j)*vec(i))*unorm
4041 c write (2,*) 'ungrad',ungrad
4044 C-----------------------------------------------------------------------------
4045 subroutine escp(evdw2,evdw2_14)
4047 C This subroutine calculates the excluded-volume interaction energy between
4048 C peptide-group centers and side chains and its gradient in virtual-bond and
4049 C side-chain vectors.
4051 implicit real*8 (a-h,o-z)
4052 include 'DIMENSIONS'
4053 include 'DIMENSIONS.ZSCOPT'
4054 include 'COMMON.CONTROL'
4055 include 'COMMON.GEO'
4056 include 'COMMON.VAR'
4057 include 'COMMON.LOCAL'
4058 include 'COMMON.CHAIN'
4059 include 'COMMON.DERIV'
4060 include 'COMMON.INTERACT'
4061 include 'COMMON.FFIELD'
4062 include 'COMMON.IOUNITS'
4066 cd print '(a)','Enter ESCP'
4067 c write (iout,*) 'iatscp_s=',iatscp_s,' iatscp_e=',iatscp_e,
4068 c & ' scal14',scal14
4069 do i=iatscp_s,iatscp_e
4070 if (itype(i).eq.ntyp1 .or. itype(i+1).eq.ntyp1) cycle
4072 c write (iout,*) "i",i," iteli",iteli," nscp_gr",nscp_gr(i),
4073 c & " iscp",(iscpstart(i,j),iscpend(i,j),j=1,nscp_gr(i))
4074 if (iteli.eq.0) goto 1225
4075 xi=0.5D0*(c(1,i)+c(1,i+1))
4076 yi=0.5D0*(c(2,i)+c(2,i+1))
4077 zi=0.5D0*(c(3,i)+c(3,i+1))
4078 C Returning the ith atom to box
4080 if (xi.lt.0) xi=xi+boxxsize
4082 if (yi.lt.0) yi=yi+boxysize
4084 if (zi.lt.0) zi=zi+boxzsize
4085 do iint=1,nscp_gr(i)
4087 do j=iscpstart(i,iint),iscpend(i,iint)
4088 itypj=iabs(itype(j))
4089 if (itypj.eq.ntyp1) cycle
4090 C Uncomment following three lines for SC-p interactions
4094 C Uncomment following three lines for Ca-p interactions
4098 C returning the jth atom to box
4100 if (xj.lt.0) xj=xj+boxxsize
4102 if (yj.lt.0) yj=yj+boxysize
4104 if (zj.lt.0) zj=zj+boxzsize
4105 dist_init=(xj-xi)**2+(yj-yi)**2+(zj-zi)**2
4110 C Finding the closest jth atom
4114 xj=xj_safe+xshift*boxxsize
4115 yj=yj_safe+yshift*boxysize
4116 zj=zj_safe+zshift*boxzsize
4117 dist_temp=(xj-xi)**2+(yj-yi)**2+(zj-zi)**2
4118 if(dist_temp.lt.dist_init) then
4128 if (subchap.eq.1) then
4137 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
4138 C sss is scaling function for smoothing the cutoff gradient otherwise
4139 C the gradient would not be continuouse
4140 sss=sscale(1.0d0/(dsqrt(rrij)))
4141 if (sss.le.0.0d0) cycle
4142 sssgrad=sscagrad(1.0d0/(dsqrt(rrij)))
4144 e1=fac*fac*aad(itypj,iteli)
4145 e2=fac*bad(itypj,iteli)
4146 if (iabs(j-i) .le. 2) then
4149 evdw2_14=evdw2_14+(e1+e2)*sss
4152 c write (iout,'(a6,2i5,0pf7.3,2i3,3e11.3)')
4153 c & 'evdw2',i,j,evdwij,iteli,itypj,fac,aad(itypj,iteli),
4154 c & bad(itypj,iteli)
4155 evdw2=evdw2+evdwij*sss
4156 if (energy_dec) write (iout,'(a6,2i5,0pf7.3,2i3,3e11.3)')
4157 & 'evdw2',i,j,evdwij,iteli,itypj,fac,aad(itypj,iteli),
4162 C Calculate contributions to the gradient in the virtual-bond and SC vectors.
4164 fac=-(evdwij+e1)*rrij*sss
4165 fac=fac+(evdwij)*sssgrad*dsqrt(rrij)/expon
4170 cd write (iout,*) 'j<i'
4171 C Uncomment following three lines for SC-p interactions
4173 c gradx_scp(k,j)=gradx_scp(k,j)+ggg(k)
4176 cd write (iout,*) 'j>i'
4179 C Uncomment following line for SC-p interactions
4180 c gradx_scp(k,j)=gradx_scp(k,j)-ggg(k)
4184 gvdwc_scp(k,i)=gvdwc_scp(k,i)-0.5D0*ggg(k)
4188 cd write (iout,*) 'i=',i,' j=',j,' kstart=',kstart,' kend=',kend
4189 cd write (iout,*) ggg(1),ggg(2),ggg(3)
4192 gvdwc_scp(l,k)=gvdwc_scp(l,k)-ggg(l)
4202 gvdwc_scp(j,i)=expon*gvdwc_scp(j,i)
4203 gradx_scp(j,i)=expon*gradx_scp(j,i)
4206 C******************************************************************************
4210 C To save time the factor EXPON has been extracted from ALL components
4211 C of GVDWC and GRADX. Remember to multiply them by this factor before further
4214 C******************************************************************************
4217 C--------------------------------------------------------------------------
4218 subroutine edis(ehpb)
4220 C Evaluate bridge-strain energy and its gradient in virtual-bond and SC vectors.
4222 implicit real*8 (a-h,o-z)
4223 include 'DIMENSIONS'
4224 include 'DIMENSIONS.ZSCOPT'
4225 include 'COMMON.SBRIDGE'
4226 include 'COMMON.CHAIN'
4227 include 'COMMON.DERIV'
4228 include 'COMMON.VAR'
4229 include 'COMMON.INTERACT'
4230 include 'COMMON.CONTROL'
4231 include 'COMMON.IOUNITS'
4232 dimension ggg(3),ggg_peak(3,1000)
4237 c 8/21/18 AL: added explicit restraints on reference coords
4238 c write (iout,*) "restr_on_coord",restr_on_coord
4239 if (restr_on_coord) then
4243 if (itype(i).eq.ntyp1) cycle
4245 ecoor=ecoor+(c(j,i)-cref(j,i))**2
4246 ghpbc(j,i)=ghpbc(j,i)+bfac(i)*(c(j,i)-cref(j,i))
4248 if (itype(i).ne.10) then
4250 ecoor=ecoor+(c(j,i+nres)-cref(j,i+nres))**2
4251 ghpbx(j,i)=ghpbx(j,i)+bfac(i)*(c(j,i+nres)-cref(j,i+nres))
4254 if (energy_dec) write (iout,*)
4255 & "i",i," bfac",bfac(i)," ecoor",ecoor
4256 ehpb=ehpb+0.5d0*bfac(i)*ecoor
4261 C write (iout,*) ,"link_end",link_end,constr_dist
4262 cd write(iout,*)'edis: nhpb=',nhpb,' fbr=',fbr
4263 c write(iout,*)'link_start=',link_start,' link_end=',link_end,
4264 c & " constr_dist",constr_dist
4265 if (link_end.eq.0.and.link_end_peak.eq.0) return
4266 do i=link_start_peak,link_end_peak
4268 c print *,"i",i," link_end_peak",link_end_peak," ipeak",
4269 c & ipeak(1,i),ipeak(2,i)
4270 do ip=ipeak(1,i),ipeak(2,i)
4275 C iii and jjj point to the residues for which the distance is assigned.
4276 c if (ii.gt.nres) then
4283 if (ii.gt.nres) then
4288 if (jj.gt.nres) then
4293 aux=rlornmr1(dd,dhpb_peak(ip),dhpb1_peak(ip),forcon_peak(ip))
4294 aux=dexp(-scal_peak*aux)
4295 ehpb_peak=ehpb_peak+aux
4296 fac=rlornmr1prim(dd,dhpb_peak(ip),dhpb1_peak(ip),
4297 & forcon_peak(ip))*aux/dd
4299 ggg_peak(j,iip)=fac*(c(j,jj)-c(j,ii))
4301 if (energy_dec) write (iout,'(a6,3i5,6f10.3,i5)')
4302 & "edisL",i,ii,jj,dd,dhpb_peak(ip),dhpb1_peak(ip),
4303 & forcon_peak(ip),fordepth_peak(ip),ehpb_peak
4305 c write (iout,*) "ehpb_peak",ehpb_peak," scal_peak",scal_peak
4306 ehpb=ehpb-fordepth_peak(ipeak(1,i))*dlog(ehpb_peak)/scal_peak
4307 do ip=ipeak(1,i),ipeak(2,i)
4310 ggg(j)=ggg_peak(j,iip)/ehpb_peak
4314 C iii and jjj point to the residues for which the distance is assigned.
4315 if (ii.gt.nres) then
4324 ghpbx(j,iii)=ghpbx(j,iii)-ggg(j)
4329 ghpbx(j,jjj)=ghpbx(j,jjj)+ggg(j)
4333 ghpbc(k,jjj)=ghpbc(k,jjj)+ggg(k)
4334 ghpbc(k,iii)=ghpbc(k,iii)-ggg(k)
4338 do i=link_start,link_end
4339 C If ihpb(i) and jhpb(i) > NRES, this is a SC-SC distance, otherwise a
4340 C CA-CA distance used in regularization of structure.
4343 C iii and jjj point to the residues for which the distance is assigned.
4344 if (ii.gt.nres) then
4349 if (jj.gt.nres) then
4354 c write (iout,*) "i",i," ii",ii," iii",iii," jj",jj," jjj",jjj,
4355 c & dhpb(i),dhpb1(i),forcon(i)
4356 C 24/11/03 AL: SS bridges handled separately because of introducing a specific
4357 C distance and angle dependent SS bond potential.
4358 C if (ii.gt.nres .and. iabs(itype(iii)).eq.1 .and.
4359 C & iabs(itype(jjj)).eq.1) then
4360 cmc if (ii.gt.nres .and. itype(iii).eq.1 .and. itype(jjj).eq.1) then
4361 C 18/07/06 MC: Use the convention that the first nss pairs are SS bonds
4362 if (.not.dyn_ss .and. i.le.nss) then
4363 C 15/02/13 CC dynamic SSbond - additional check
4364 if (ii.gt.nres .and. iabs(itype(iii)).eq.1 .and.
4365 & iabs(itype(jjj)).eq.1) then
4366 call ssbond_ene(iii,jjj,eij)
4369 cd write (iout,*) "eij",eij
4370 cd & ' waga=',waga,' fac=',fac
4371 ! else if (ii.gt.nres .and. jj.gt.nres) then
4373 C Calculate the distance between the two points and its difference from the
4376 if (irestr_type(i).eq.11) then
4377 ehpb=ehpb+fordepth(i)!**4.0d0
4378 & *rlornmr1(dd,dhpb(i),dhpb1(i),forcon(i))
4379 fac=fordepth(i)!**4.0d0
4380 & *rlornmr1prim(dd,dhpb(i),dhpb1(i),forcon(i))/dd
4381 if (energy_dec) write (iout,'(a6,2i5,6f10.3,i5)')
4382 & "edisL",ii,jj,dd,dhpb(i),dhpb1(i),forcon(i),fordepth(i),
4383 & ehpb,irestr_type(i)
4384 else if (irestr_type(i).eq.10) then
4385 c AL 6//19/2018 cross-link restraints
4386 xdis = 0.5d0*(dd/forcon(i))**2
4387 expdis = dexp(-xdis)
4388 c aux=(dhpb(i)+dhpb1(i)*xdis)*expdis+fordepth(i)
4389 aux=(dhpb(i)+dhpb1(i)*xdis*xdis)*expdis+fordepth(i)
4390 c write (iout,*)"HERE: xdis",xdis," expdis",expdis," aux",aux,
4391 c & " wboltzd",wboltzd
4392 ehpb=ehpb-wboltzd*xlscore(i)*dlog(aux)
4393 c fac=-wboltzd*(dhpb1(i)*(1.0d0-xdis)-dhpb(i))
4394 fac=-wboltzd*xlscore(i)*(dhpb1(i)*(2.0d0-xdis)*xdis-dhpb(i))
4395 & *expdis/(aux*forcon(i)**2)
4396 if (energy_dec) write(iout,'(a6,2i5,6f10.3,i5)')
4397 & "edisX",ii,jj,dd,dhpb(i),dhpb1(i),forcon(i),fordepth(i),
4398 & -wboltzd*xlscore(i)*dlog(aux),irestr_type(i)
4399 else if (irestr_type(i).eq.2) then
4400 c Quartic restraints
4401 ehpb=ehpb+forcon(i)*gnmr1(dd,dhpb(i),dhpb1(i))
4402 if (energy_dec) write(iout,'(a6,2i5,5f10.3,i5)')
4403 & "edisQ",ii,jj,dd,dhpb(i),dhpb1(i),forcon(i),
4404 & forcon(i)*gnmr1(dd,dhpb(i),dhpb1(i)),irestr_type(i)
4405 fac=forcon(i)*gnmr1prim(dd,dhpb(i),dhpb1(i))/dd
4407 c Quadratic restraints
4409 C Get the force constant corresponding to this distance.
4411 C Calculate the contribution to energy.
4412 ehpb=ehpb+0.5d0*waga*rdis*rdis
4413 if (energy_dec) write(iout,'(a6,2i5,5f10.3,i5)')
4414 & "edisS",ii,jj,dd,dhpb(i),dhpb1(i),forcon(i),
4415 & 0.5d0*waga*rdis*rdis,irestr_type(i)
4417 C Evaluate gradient.
4421 c Calculate Cartesian gradient
4423 ggg(j)=fac*(c(j,jj)-c(j,ii))
4425 cd print '(i3,3(1pe14.5))',i,(ggg(j),j=1,3)
4426 C If this is a SC-SC distance, we need to calculate the contributions to the
4427 C Cartesian gradient in the SC vectors (ghpbx).
4430 ghpbx(j,iii)=ghpbx(j,iii)-ggg(j)
4435 ghpbx(j,jjj)=ghpbx(j,jjj)+ggg(j)
4439 ghpbc(k,jjj)=ghpbc(k,jjj)+ggg(k)
4440 ghpbc(k,iii)=ghpbc(k,iii)-ggg(k)
4446 C--------------------------------------------------------------------------
4447 subroutine ssbond_ene(i,j,eij)
4449 C Calculate the distance and angle dependent SS-bond potential energy
4450 C using a free-energy function derived based on RHF/6-31G** ab initio
4451 C calculations of diethyl disulfide.
4453 C A. Liwo and U. Kozlowska, 11/24/03
4455 implicit real*8 (a-h,o-z)
4456 include 'DIMENSIONS'
4457 include 'DIMENSIONS.ZSCOPT'
4458 include 'COMMON.SBRIDGE'
4459 include 'COMMON.CHAIN'
4460 include 'COMMON.DERIV'
4461 include 'COMMON.LOCAL'
4462 include 'COMMON.INTERACT'
4463 include 'COMMON.VAR'
4464 include 'COMMON.IOUNITS'
4465 double precision erij(3),dcosom1(3),dcosom2(3),gg(3)
4466 itypi=iabs(itype(i))
4470 dxi=dc_norm(1,nres+i)
4471 dyi=dc_norm(2,nres+i)
4472 dzi=dc_norm(3,nres+i)
4473 dsci_inv=dsc_inv(itypi)
4474 itypj=iabs(itype(j))
4475 dscj_inv=dsc_inv(itypj)
4479 dxj=dc_norm(1,nres+j)
4480 dyj=dc_norm(2,nres+j)
4481 dzj=dc_norm(3,nres+j)
4482 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
4487 om1=dxi*erij(1)+dyi*erij(2)+dzi*erij(3)
4488 om2=dxj*erij(1)+dyj*erij(2)+dzj*erij(3)
4489 om12=dxi*dxj+dyi*dyj+dzi*dzj
4491 dcosom1(k)=rij*(dc_norm(k,nres+i)-om1*erij(k))
4492 dcosom2(k)=rij*(dc_norm(k,nres+j)-om2*erij(k))
4498 deltat12=om2-om1+2.0d0
4500 eij=akcm*deltad*deltad+akth*(deltat1*deltat1+deltat2*deltat2)
4501 & +akct*deltad*deltat12
4502 & +v1ss*cosphi+v2ss*cosphi*cosphi+v3ss*cosphi*cosphi*cosphi
4503 c write(iout,*) i,j,"rij",rij,"d0cm",d0cm," akcm",akcm," akth",akth,
4504 c & " akct",akct," deltad",deltad," deltat",deltat1,deltat2,
4505 c & " deltat12",deltat12," eij",eij
4506 ed=2*akcm*deltad+akct*deltat12
4508 pom2=v1ss+2*v2ss*cosphi+3*v3ss*cosphi*cosphi
4509 eom1=-2*akth*deltat1-pom1-om2*pom2
4510 eom2= 2*akth*deltat2+pom1-om1*pom2
4513 gg(k)=ed*erij(k)+eom1*dcosom1(k)+eom2*dcosom2(k)
4516 ghpbx(k,i)=ghpbx(k,i)-gg(k)
4517 & +(eom12*dc_norm(k,nres+j)+eom1*erij(k))*dsci_inv
4518 ghpbx(k,j)=ghpbx(k,j)+gg(k)
4519 & +(eom12*dc_norm(k,nres+i)+eom2*erij(k))*dscj_inv
4522 C Calculate the components of the gradient in DC and X
4526 ghpbc(l,k)=ghpbc(l,k)+gg(l)
4531 C--------------------------------------------------------------------------
4532 c MODELLER restraint function
4533 subroutine e_modeller(ehomology_constr)
4534 implicit real*8 (a-h,o-z)
4535 include 'DIMENSIONS'
4536 include 'DIMENSIONS.ZSCOPT'
4537 include 'DIMENSIONS.FREE'
4538 integer nnn, i, j, k, ki, irec, l
4539 integer katy, odleglosci, test7
4540 real*8 odleg, odleg2, odleg3, kat, kat2, kat3, gdih(max_template)
4541 real*8 distance(max_template),distancek(max_template),
4542 & min_odl,godl(max_template),dih_diff(max_template)
4545 c FP - 30/10/2014 Temporary specifications for homology restraints
4547 double precision utheta_i,gutheta_i,sum_gtheta,sum_sgtheta,
4549 double precision, dimension (maxres) :: guscdiff,usc_diff
4550 double precision, dimension (max_template) ::
4551 & gtheta,dscdiff,uscdiffk,guscdiff2,guscdiff3,
4554 include 'COMMON.SBRIDGE'
4555 include 'COMMON.CHAIN'
4556 include 'COMMON.GEO'
4557 include 'COMMON.DERIV'
4558 include 'COMMON.LOCAL'
4559 include 'COMMON.INTERACT'
4560 include 'COMMON.VAR'
4561 include 'COMMON.IOUNITS'
4562 include 'COMMON.CONTROL'
4563 include 'COMMON.HOMRESTR'
4564 include 'COMMON.HOMOLOGY'
4565 include 'COMMON.SETUP'
4566 include 'COMMON.NAMES'
4569 distancek(i)=9999999.9
4574 c Pseudo-energy and gradient from homology restraints (MODELLER-like
4576 C AL 5/2/14 - Introduce list of restraints
4577 c write(iout,*) "waga_theta",waga_theta,"waga_d",waga_d
4579 write(iout,*) "------- dist restrs start -------"
4581 do ii = link_start_homo,link_end_homo
4585 c write (iout,*) "dij(",i,j,") =",dij
4587 do k=1,constr_homology
4588 if(.not.l_homo(k,ii)) then
4592 distance(k)=odl(k,ii)-dij
4593 c write (iout,*) "distance(",k,") =",distance(k)
4595 c For Gaussian-type Urestr
4597 distancek(k)=0.5d0*distance(k)**2*sigma_odl(k,ii) ! waga_dist rmvd from Gaussian argument
4598 c write (iout,*) "sigma_odl(",k,ii,") =",sigma_odl(k,ii)
4599 c write (iout,*) "distancek(",k,") =",distancek(k)
4600 c distancek(k)=0.5d0*waga_dist*distance(k)**2*sigma_odl(k,ii)
4602 c For Lorentzian-type Urestr
4604 if (waga_dist.lt.0.0d0) then
4605 sigma_odlir(k,ii)=dsqrt(1/sigma_odl(k,ii))
4606 distancek(k)=distance(k)**2/(sigma_odlir(k,ii)*
4607 & (distance(k)**2+sigma_odlir(k,ii)**2))
4611 c min_odl=minval(distancek)
4615 do kk=1,constr_homology
4616 if(l_homo(kk,ii)) then
4617 min_odl=distancek(kk)
4621 do kk=1,constr_homology
4622 if(l_homo(kk,ii) .and. distancek(kk).lt.min_odl)
4623 & min_odl=distancek(kk)
4626 c write (iout,* )"min_odl",min_odl
4628 write (iout,*) "ij dij",i,j,dij
4629 write (iout,*) "distance",(distance(k),k=1,constr_homology)
4630 write (iout,*) "distancek",(distancek(k),k=1,constr_homology)
4631 write (iout,* )"min_odl",min_odl
4636 if (waga_dist.ge.0.0d0) then
4642 do k=1,constr_homology
4643 c Nie wiem po co to liczycie jeszcze raz!
4644 c odleg3=-waga_dist(iset)*((distance(i,j,k)**2)/
4645 c & (2*(sigma_odl(i,j,k))**2))
4646 if(.not.l_homo(k,ii)) cycle
4647 if (waga_dist.ge.0.0d0) then
4649 c For Gaussian-type Urestr
4651 godl(k)=dexp(-distancek(k)+min_odl)
4652 odleg2=odleg2+godl(k)
4654 c For Lorentzian-type Urestr
4657 odleg2=odleg2+distancek(k)
4660 ccc write(iout,779) i,j,k, "odleg2=",odleg2, "odleg3=", odleg3,
4661 ccc & "dEXP(odleg3)=", dEXP(odleg3),"distance(i,j,k)^2=",
4662 ccc & distance(i,j,k)**2, "dist(i+1,j+1)=", dist(i+1,j+1),
4663 ccc & "sigma_odl(i,j,k)=", sigma_odl(i,j,k)
4666 c write (iout,*) "godl",(godl(k),k=1,constr_homology) ! exponents
4667 c write (iout,*) "ii i j",ii,i,j," odleg2",odleg2 ! sum of exps
4669 write (iout,*) "godl",(godl(k),k=1,constr_homology) ! exponents
4670 write (iout,*) "ii i j",ii,i,j," odleg2",odleg2 ! sum of exps
4672 if (waga_dist.ge.0.0d0) then
4674 c For Gaussian-type Urestr
4676 odleg=odleg-dLOG(odleg2/constr_homology)+min_odl
4678 c For Lorentzian-type Urestr
4681 odleg=odleg+odleg2/constr_homology
4685 c write (iout,*) "odleg",odleg ! sum of -ln-s
4688 c For Gaussian-type Urestr
4690 if (waga_dist.ge.0.0d0) sum_godl=odleg2
4692 do k=1,constr_homology
4693 c godl=dexp(((-(distance(i,j,k)**2)/(2*(sigma_odl(i,j,k))**2))
4694 c & *waga_dist)+min_odl
4695 c sgodl=-godl(k)*distance(k)*sigma_odl(k,ii)*waga_dist
4697 if(.not.l_homo(k,ii)) cycle
4698 if (waga_dist.ge.0.0d0) then
4699 c For Gaussian-type Urestr
4701 sgodl=-godl(k)*distance(k)*sigma_odl(k,ii) ! waga_dist rmvd
4703 c For Lorentzian-type Urestr
4706 sgodl=-2*sigma_odlir(k,ii)*(distance(k)/(distance(k)**2+
4707 & sigma_odlir(k,ii)**2)**2)
4709 sum_sgodl=sum_sgodl+sgodl
4711 c sgodl2=sgodl2+sgodl
4712 c write(iout,*) i, j, k, distance(i,j,k), "W GRADIENCIE1"
4713 c write(iout,*) "constr_homology=",constr_homology
4714 c write(iout,*) i, j, k, "TEST K"
4716 if (waga_dist.ge.0.0d0) then
4718 c For Gaussian-type Urestr
4720 grad_odl3=waga_homology(iset)*waga_dist
4721 & *sum_sgodl/(sum_godl*dij)
4723 c For Lorentzian-type Urestr
4726 c Original grad expr modified by analogy w Gaussian-type Urestr grad
4727 c grad_odl3=-waga_homology(iset)*waga_dist*sum_sgodl
4728 grad_odl3=-waga_homology(iset)*waga_dist*
4729 & sum_sgodl/(constr_homology*dij)
4732 c grad_odl3=sum_sgodl/(sum_godl*dij)
4735 c write(iout,*) i, j, k, distance(i,j,k), "W GRADIENCIE2"
4736 c write(iout,*) (distance(i,j,k)**2), (2*(sigma_odl(i,j,k))**2),
4737 c & (-(distance(i,j,k)**2)/(2*(sigma_odl(i,j,k))**2))
4739 ccc write(iout,*) godl, sgodl, grad_odl3
4741 c grad_odl=grad_odl+grad_odl3
4744 ggodl=grad_odl3*(c(jik,i)-c(jik,j))
4745 ccc write(iout,*) c(jik,i+1), c(jik,j+1), (c(jik,i+1)-c(jik,j+1))
4746 ccc write(iout,746) "GRAD_ODL_1", i, j, jik, ggodl,
4747 ccc & ghpbc(jik,i+1), ghpbc(jik,j+1)
4748 ghpbc(jik,i)=ghpbc(jik,i)+ggodl
4749 ghpbc(jik,j)=ghpbc(jik,j)-ggodl
4750 ccc write(iout,746) "GRAD_ODL_2", i, j, jik, ggodl,
4751 ccc & ghpbc(jik,i+1), ghpbc(jik,j+1)
4752 c if (i.eq.25.and.j.eq.27) then
4753 c write(iout,*) "jik",jik,"i",i,"j",j
4754 c write(iout,*) "sum_sgodl",sum_sgodl,"sgodl",sgodl
4755 c write(iout,*) "grad_odl3",grad_odl3
4756 c write(iout,*) "c(",jik,i,")",c(jik,i),"c(",jik,j,")",c(jik,j)
4757 c write(iout,*) "ggodl",ggodl
4758 c write(iout,*) "ghpbc(",jik,i,")",
4759 c & ghpbc(jik,i),"ghpbc(",jik,j,")",
4764 ccc write(iout,778)"TEST: odleg2=", odleg2, "DLOG(odleg2)=",
4765 ccc & dLOG(odleg2),"-odleg=", -odleg
4767 enddo ! ii-loop for dist
4769 write(iout,*) "------- dist restrs end -------"
4770 c if (waga_angle.eq.1.0d0 .or. waga_theta.eq.1.0d0 .or.
4771 c & waga_d.eq.1.0d0) call sum_gradient
4773 c Pseudo-energy and gradient from dihedral-angle restraints from
4774 c homology templates
4775 c write (iout,*) "End of distance loop"
4778 c write (iout,*) idihconstr_start_homo,idihconstr_end_homo
4780 write(iout,*) "------- dih restrs start -------"
4781 do i=idihconstr_start_homo,idihconstr_end_homo
4782 write (iout,*) "gloc_init(",i,icg,")",gloc(i,icg)
4785 do i=idihconstr_start_homo,idihconstr_end_homo
4787 c betai=beta(i,i+1,i+2,i+3)
4789 c write (iout,*) "betai =",betai
4790 do k=1,constr_homology
4791 dih_diff(k)=pinorm(dih(k,i)-betai)
4792 c write (iout,*) "dih_diff(",k,") =",dih_diff(k)
4793 c if (dih_diff(i,k).gt.3.14159) dih_diff(i,k)=
4794 c & -(6.28318-dih_diff(i,k))
4795 c if (dih_diff(i,k).lt.-3.14159) dih_diff(i,k)=
4796 c & 6.28318+dih_diff(i,k)
4798 kat3=-0.5d0*dih_diff(k)**2*sigma_dih(k,i) ! waga_angle rmvd from Gaussian argument
4800 kat3=(dcos(dih_diff(k))-1)*sigma_dih(k,i)
4802 c kat3=-0.5d0*waga_angle*dih_diff(k)**2*sigma_dih(k,i)
4805 c write(iout,*) "kat2=", kat2, "exp(kat3)=", exp(kat3)
4808 c write (iout,*) "gdih",(gdih(k),k=1,constr_homology) ! exps
4809 c write (iout,*) "i",i," betai",betai," kat2",kat2 ! sum of exps
4811 write (iout,*) "i",i," betai",betai," kat2",kat2
4812 write (iout,*) "gdih",(gdih(k),k=1,constr_homology)
4814 if (kat2.le.1.0d-14) cycle
4815 kat=kat-dLOG(kat2/constr_homology)
4816 c write (iout,*) "kat",kat ! sum of -ln-s
4818 ccc write(iout,778)"TEST: kat2=", kat2, "DLOG(kat2)=",
4819 ccc & dLOG(kat2), "-kat=", -kat
4822 c ----------------------------------------------------------------------
4824 c ----------------------------------------------------------------------
4828 do k=1,constr_homology
4830 sgdih=-gdih(k)*dih_diff(k)*sigma_dih(k,i) ! waga_angle rmvd
4832 sgdih=-gdih(k)*dsin(dih_diff(k))*sigma_dih(k,i)
4834 c sgdih=-gdih(k)*dih_diff(k)*sigma_dih(k,i)*waga_angle
4835 sum_sgdih=sum_sgdih+sgdih
4837 c grad_dih3=sum_sgdih/sum_gdih
4838 grad_dih3=waga_homology(iset)*waga_angle*sum_sgdih/sum_gdih
4840 c write(iout,*)i,k,gdih,sgdih,beta(i+1,i+2,i+3,i+4),grad_dih3
4841 ccc write(iout,747) "GRAD_KAT_1", i, nphi, icg, grad_dih3,
4842 ccc & gloc(nphi+i-3,icg)
4843 gloc(i,icg)=gloc(i,icg)+grad_dih3
4845 c write(iout,*) "i",i,"icg",icg,"gloc(",i,icg,")",gloc(i,icg)
4847 ccc write(iout,747) "GRAD_KAT_2", i, nphi, icg, grad_dih3,
4848 ccc & gloc(nphi+i-3,icg)
4850 enddo ! i-loop for dih
4852 write(iout,*) "------- dih restrs end -------"
4855 c Pseudo-energy and gradient for theta angle restraints from
4856 c homology templates
4857 c FP 01/15 - inserted from econstr_local_test.F, loop structure
4861 c For constr_homology reference structures (FP)
4863 c Uconst_back_tot=0.0d0
4866 c Econstr_back legacy
4869 c do i=ithet_start,ithet_end
4872 c do i=loc_start,loc_end
4875 duscdiffx(j,i)=0.0d0
4881 c write (iout,*) "ithet_start =",ithet_start,"ithet_end =",ithet_end
4882 c write (iout,*) "waga_theta",waga_theta
4883 if (waga_theta.gt.0.0d0) then
4885 write (iout,*) "usampl",usampl
4886 write(iout,*) "------- theta restrs start -------"
4887 c do i=ithet_start,ithet_end
4888 c write (iout,*) "gloc_init(",nphi+i,icg,")",gloc(nphi+i,icg)
4891 c write (iout,*) "maxres",maxres,"nres",nres
4893 do i=ithet_start,ithet_end
4896 c ii = ifrag_back(2,i,iset)-ifrag_back(1,i,iset)
4898 c Deviation of theta angles wrt constr_homology ref structures
4900 utheta_i=0.0d0 ! argument of Gaussian for single k
4901 gutheta_i=0.0d0 ! Sum of Gaussians over constr_homology ref structures
4902 c do j=ifrag_back(1,i,iset)+2,ifrag_back(2,i,iset) ! original loop
4903 c over residues in a fragment
4904 c write (iout,*) "theta(",i,")=",theta(i)
4905 do k=1,constr_homology
4907 c dtheta_i=theta(j)-thetaref(j,iref)
4908 c dtheta_i=thetaref(k,i)-theta(i) ! original form without indexing
4909 theta_diff(k)=thetatpl(k,i)-theta(i)
4911 utheta_i=-0.5d0*theta_diff(k)**2*sigma_theta(k,i) ! waga_theta rmvd from Gaussian argument
4912 c utheta_i=-0.5d0*waga_theta*theta_diff(k)**2*sigma_theta(k,i) ! waga_theta?
4913 gtheta(k)=dexp(utheta_i) ! + min_utheta_i?
4914 gutheta_i=gutheta_i+dexp(utheta_i) ! Sum of Gaussians (pk)
4915 c Gradient for single Gaussian restraint in subr Econstr_back
4916 c dutheta(j-2)=dutheta(j-2)+wfrag_back(1,i,iset)*dtheta_i/(ii-1)
4919 c write (iout,*) "gtheta",(gtheta(k),k=1,constr_homology) ! exps
4920 c write (iout,*) "i",i," gutheta_i",gutheta_i ! sum of exps
4924 c Gradient for multiple Gaussian restraint
4925 sum_gtheta=gutheta_i
4927 do k=1,constr_homology
4928 c New generalized expr for multiple Gaussian from Econstr_back
4929 sgtheta=-gtheta(k)*theta_diff(k)*sigma_theta(k,i) ! waga_theta rmvd
4931 c sgtheta=-gtheta(k)*theta_diff(k)*sigma_theta(k,i)*waga_theta ! right functional form?
4932 sum_sgtheta=sum_sgtheta+sgtheta ! cum variable
4935 c Final value of gradient using same var as in Econstr_back
4936 dutheta(i-2)=sum_sgtheta/sum_gtheta*waga_theta
4937 & *waga_homology(iset)
4938 c dutheta(i)=sum_sgtheta/sum_gtheta
4940 c Uconst_back=Uconst_back+waga_theta*utheta(i) ! waga_theta added as weight
4942 Eval=Eval-dLOG(gutheta_i/constr_homology)
4943 c write (iout,*) "utheta(",i,")=",utheta(i) ! -ln of sum of exps
4944 c write (iout,*) "Uconst_back",Uconst_back ! sum of -ln-s
4945 c Uconst_back=Uconst_back+utheta(i)
4946 enddo ! (i-loop for theta)
4948 write(iout,*) "------- theta restrs end -------"
4952 c Deviation of local SC geometry
4954 c Separation of two i-loops (instructed by AL - 11/3/2014)
4956 c write (iout,*) "loc_start =",loc_start,"loc_end =",loc_end
4957 c write (iout,*) "waga_d",waga_d
4960 write(iout,*) "------- SC restrs start -------"
4961 write (iout,*) "Initial duscdiff,duscdiffx"
4962 do i=loc_start,loc_end
4963 write (iout,*) i,(duscdiff(jik,i),jik=1,3),
4964 & (duscdiffx(jik,i),jik=1,3)
4967 do i=loc_start,loc_end
4968 usc_diff_i=0.0d0 ! argument of Gaussian for single k
4969 guscdiff(i)=0.0d0 ! Sum of Gaussians over constr_homology ref structures
4970 c do j=ifrag_back(1,i,iset)+1,ifrag_back(2,i,iset)-1 ! Econstr_back legacy
4971 c write(iout,*) "xxtab, yytab, zztab"
4972 c write(iout,'(i5,3f8.2)') i,xxtab(i),yytab(i),zztab(i)
4973 do k=1,constr_homology
4975 dxx=-xxtpl(k,i)+xxtab(i) ! Diff b/w x component of ith SC vector in model and kth ref str?
4976 c Original sign inverted for calc of gradients (s. Econstr_back)
4977 dyy=-yytpl(k,i)+yytab(i) ! ibid y
4978 dzz=-zztpl(k,i)+zztab(i) ! ibid z
4979 c write(iout,*) "dxx, dyy, dzz"
4980 c write(iout,'(2i5,3f8.2)') k,i,dxx,dyy,dzz
4982 usc_diff_i=-0.5d0*(dxx**2+dyy**2+dzz**2)*sigma_d(k,i) ! waga_d rmvd from Gaussian argument
4983 c usc_diff(i)=-0.5d0*waga_d*(dxx**2+dyy**2+dzz**2)*sigma_d(k,i) ! waga_d?
4984 c uscdiffk(k)=usc_diff(i)
4985 guscdiff2(k)=dexp(usc_diff_i) ! without min_scdiff
4986 guscdiff(i)=guscdiff(i)+dexp(usc_diff_i) !Sum of Gaussians (pk)
4987 c write (iout,'(i5,6f10.5)') j,xxtab(j),yytab(j),zztab(j),
4988 c & xxref(j),yyref(j),zzref(j)
4993 c Generalized expression for multiple Gaussian acc to that for a single
4994 c Gaussian in Econstr_back as instructed by AL (FP - 03/11/2014)
4996 c Original implementation
4997 c sum_guscdiff=guscdiff(i)
4999 c sum_sguscdiff=0.0d0
5000 c do k=1,constr_homology
5001 c sguscdiff=-guscdiff2(k)*dscdiff(k)*sigma_d(k,i)*waga_d !waga_d?
5002 c sguscdiff=-guscdiff3(k)*dscdiff(k)*sigma_d(k,i)*waga_d ! w min_uscdiff
5003 c sum_sguscdiff=sum_sguscdiff+sguscdiff
5006 c Implementation of new expressions for gradient (Jan. 2015)
5008 c grad_uscdiff=sum_sguscdiff/(sum_guscdiff*dtab) !?
5010 do k=1,constr_homology
5012 c New calculation of dxx, dyy, and dzz corrected by AL (07/11), was missing and wrong
5013 c before. Now the drivatives should be correct
5015 dxx=-xxtpl(k,i)+xxtab(i) ! Diff b/w x component of ith SC vector in model and kth ref str?
5016 c Original sign inverted for calc of gradients (s. Econstr_back)
5017 dyy=-yytpl(k,i)+yytab(i) ! ibid y
5018 dzz=-zztpl(k,i)+zztab(i) ! ibid z
5020 c New implementation
5022 sum_guscdiff=guscdiff2(k)*!(dsqrt(dxx*dxx+dyy*dyy+dzz*dzz))* -> wrong!
5023 & sigma_d(k,i) ! for the grad wrt r'
5024 c sum_sguscdiff=sum_sguscdiff+sum_guscdiff
5027 c New implementation
5028 sum_guscdiff = waga_homology(iset)*waga_d*sum_guscdiff
5030 duscdiff(jik,i-1)=duscdiff(jik,i-1)+
5031 & sum_guscdiff*(dXX_C1tab(jik,i)*dxx+
5032 & dYY_C1tab(jik,i)*dyy+dZZ_C1tab(jik,i)*dzz)/guscdiff(i)
5033 duscdiff(jik,i)=duscdiff(jik,i)+
5034 & sum_guscdiff*(dXX_Ctab(jik,i)*dxx+
5035 & dYY_Ctab(jik,i)*dyy+dZZ_Ctab(jik,i)*dzz)/guscdiff(i)
5036 duscdiffx(jik,i)=duscdiffx(jik,i)+
5037 & sum_guscdiff*(dXX_XYZtab(jik,i)*dxx+
5038 & dYY_XYZtab(jik,i)*dyy+dZZ_XYZtab(jik,i)*dzz)/guscdiff(i)
5041 write(iout,*) "jik",jik,"i",i
5042 write(iout,*) "dxx, dyy, dzz"
5043 write(iout,'(2i5,3f8.2)') k,i,dxx,dyy,dzz
5044 write(iout,*) "guscdiff2(",k,")",guscdiff2(k)
5045 c write(iout,*) "sum_sguscdiff",sum_sguscdiff
5046 cc write(iout,*) "dXX_Ctab(",jik,i,")",dXX_Ctab(jik,i)
5047 c write(iout,*) "dYY_Ctab(",jik,i,")",dYY_Ctab(jik,i)
5048 c write(iout,*) "dZZ_Ctab(",jik,i,")",dZZ_Ctab(jik,i)
5049 c write(iout,*) "dXX_C1tab(",jik,i,")",dXX_C1tab(jik,i)
5050 c write(iout,*) "dYY_C1tab(",jik,i,")",dYY_C1tab(jik,i)
5051 c write(iout,*) "dZZ_C1tab(",jik,i,")",dZZ_C1tab(jik,i)
5052 c write(iout,*) "dXX_XYZtab(",jik,i,")",dXX_XYZtab(jik,i)
5053 c write(iout,*) "dYY_XYZtab(",jik,i,")",dYY_XYZtab(jik,i)
5054 c write(iout,*) "dZZ_XYZtab(",jik,i,")",dZZ_XYZtab(jik,i)
5055 c write(iout,*) "duscdiff(",jik,i-1,")",duscdiff(jik,i-1)
5056 c write(iout,*) "duscdiff(",jik,i,")",duscdiff(jik,i)
5057 c write(iout,*) "duscdiffx(",jik,i,")",duscdiffx(jik,i)
5064 c uscdiff(i)=-dLOG(guscdiff(i)/(ii-1)) ! Weighting by (ii-1) required?
5065 c usc_diff(i)=-dLOG(guscdiff(i)/constr_homology) ! + min_uscdiff ?
5067 c write (iout,*) i," uscdiff",uscdiff(i)
5069 c Put together deviations from local geometry
5071 c Uconst_back=Uconst_back+wfrag_back(1,i,iset)*utheta(i)+
5072 c & wfrag_back(3,i,iset)*uscdiff(i)
5073 Erot=Erot-dLOG(guscdiff(i)/constr_homology)
5074 c write (iout,*) "usc_diff(",i,")=",usc_diff(i) ! -ln of sum of exps
5075 c write (iout,*) "Uconst_back",Uconst_back ! cum sum of -ln-s
5076 c Uconst_back=Uconst_back+usc_diff(i)
5078 c Gradient of multiple Gaussian restraint (FP - 04/11/2014 - right?)
5080 c New implment: multiplied by sum_sguscdiff
5083 enddo ! (i-loop for dscdiff)
5088 write(iout,*) "------- SC restrs end -------"
5089 write (iout,*) "------ After SC loop in e_modeller ------"
5090 do i=loc_start,loc_end
5091 write (iout,*) "i",i," gradc",(gradc(j,i,icg),j=1,3)
5092 write (iout,*) "i",i," gradx",(gradx(j,i,icg),j=1,3)
5094 if (waga_theta.eq.1.0d0) then
5095 write (iout,*) "in e_modeller after SC restr end: dutheta"
5096 do i=ithet_start,ithet_end
5097 write (iout,*) i,dutheta(i)
5100 if (waga_d.eq.1.0d0) then
5101 write (iout,*) "e_modeller after SC loop: duscdiff/x"
5103 write (iout,*) i,(duscdiff(j,i),j=1,3)
5104 write (iout,*) i,(duscdiffx(j,i),j=1,3)
5109 c Total energy from homology restraints
5111 write (iout,*) "odleg",odleg," kat",kat
5112 write (iout,*) "odleg",odleg," kat",kat
5113 write (iout,*) "Eval",Eval," Erot",Erot
5114 write (iout,*) "waga_homology(",iset,")",waga_homology(iset)
5115 write (iout,*) "waga_dist ",waga_dist,"waga_angle ",waga_angle
5116 write (iout,*) "waga_theta ",waga_theta,"waga_d ",waga_d
5119 c Addition of energy of theta angle and SC local geom over constr_homologs ref strs
5121 c ehomology_constr=odleg+kat
5123 c For Lorentzian-type Urestr
5126 if (waga_dist.ge.0.0d0) then
5128 c For Gaussian-type Urestr
5130 c ehomology_constr=(waga_dist*odleg+waga_angle*kat+
5131 c & waga_theta*Eval+waga_d*Erot)*waga_homology(iset)
5132 ehomology_constr=waga_dist*odleg+waga_angle*kat+
5133 & waga_theta*Eval+waga_d*Erot
5134 c write (iout,*) "ehomology_constr=",ehomology_constr
5137 c For Lorentzian-type Urestr
5139 c ehomology_constr=(-waga_dist*odleg+waga_angle*kat+
5140 c & waga_theta*Eval+waga_d*Erot)*waga_homology(iset)
5141 ehomology_constr=-waga_dist*odleg+waga_angle*kat+
5142 & waga_theta*Eval+waga_d*Erot
5143 c write (iout,*) "ehomology_constr=",ehomology_constr
5146 write (iout,*) "odleg",waga_dist,odleg," kat",waga_angle,kat,
5147 & "Eval",waga_theta,eval,
5148 & "Erot",waga_d,Erot
5149 write (iout,*) "ehomology_constr",ehomology_constr
5153 748 format(a8,f12.3,a6,f12.3,a7,f12.3)
5154 747 format(a12,i4,i4,i4,f8.3,f8.3)
5155 746 format(a12,i4,i4,i4,f8.3,f8.3,f8.3)
5156 778 format(a7,1X,f10.3,1X,a4,1X,f10.3,1X,a5,1X,f10.3)
5157 779 format(i3,1X,i3,1X,i2,1X,a7,1X,f7.3,1X,a7,1X,f7.3,1X,a13,1X,
5158 & f7.3,1X,a17,1X,f9.3,1X,a10,1X,f8.3,1X,a10,1X,f8.3)
5160 c-----------------------------------------------------------------------
5161 subroutine ebond(estr)
5163 c Evaluate the energy of stretching of the CA-CA and CA-SC virtual bonds
5165 implicit real*8 (a-h,o-z)
5166 include 'DIMENSIONS'
5167 include 'DIMENSIONS.ZSCOPT'
5168 include 'COMMON.LOCAL'
5169 include 'COMMON.GEO'
5170 include 'COMMON.INTERACT'
5171 include 'COMMON.DERIV'
5172 include 'COMMON.VAR'
5173 include 'COMMON.CHAIN'
5174 include 'COMMON.IOUNITS'
5175 include 'COMMON.NAMES'
5176 include 'COMMON.FFIELD'
5177 include 'COMMON.CONTROL'
5178 double precision u(3),ud(3)
5181 c write (iout,*) "distchainmax",distchainmax
5184 if (itype(i-1).eq.ntyp1 .or. itype(i).eq.ntyp1) cycle
5185 diff = vbld(i)-vbldp0
5187 if (itype(i-1).eq.ntyp1 .and. itype(i).eq.ntyp1) cycle
5188 C estr1=estr1+gnmr1(vbld(i),-1.0d0,distchainmax)
5190 C gradb(j,i-1)=gnmr1prim(vbld(i),-1.0d0,distchainmax)
5191 C & *dc(j,i-1)/vbld(i)
5193 C if (energy_dec) write(iout,*)
5194 C & "estr1",i,vbld(i),distchainmax,
5195 C & gnmr1(vbld(i),-1.0d0,distchainmax)
5197 if (itype(i-1).eq.ntyp1 .or. itype(i).eq.ntyp1) then
5198 diff = vbld(i)-vbldpDUM
5199 C write(iout,*) i,diff
5201 diff = vbld(i)-vbldp0
5202 c write (iout,*) i,vbld(i),vbldp0,diff,AKP*diff*diff
5207 gradb(j,i-1)=AKP*diff*dc(j,i-1)/vbld(i)
5210 if (energy_dec) write (iout,'(a7,i5,4f7.3)')
5211 & "estr bb",i,vbld(i),vbldp0,diff,AKP*diff*diff
5213 estr=0.5d0*AKP*estr+estr1
5215 c 09/18/07 AL: multimodal bond potential based on AM1 CA-SC PMF's included
5219 if (iti.ne.10 .and. iti.ne.ntyp1) then
5222 diff=vbld(i+nres)-vbldsc0(1,iti)
5223 if (energy_dec) write (iout,*) "estr sc",iti,vbld(i+nres),
5224 & vbldsc0(1,iti),diff,
5225 & AKSC(1,iti),AKSC(1,iti)*diff*diff
5226 estr=estr+0.5d0*AKSC(1,iti)*diff*diff
5228 gradbx(j,i)=AKSC(1,iti)*diff*dc(j,i+nres)/vbld(i+nres)
5232 diff=vbld(i+nres)-vbldsc0(j,iti)
5233 ud(j)=aksc(j,iti)*diff
5234 u(j)=abond0(j,iti)+0.5d0*ud(j)*diff
5248 uprod2=uprod2*u(k)*u(k)
5252 usumsqder=usumsqder+ud(j)*uprod2
5254 c write (iout,*) i,iti,vbld(i+nres),(vbldsc0(j,iti),
5255 c & AKSC(j,iti),abond0(j,iti),u(j),j=1,nbi)
5256 estr=estr+uprod/usum
5258 gradbx(j,i)=usumsqder/(usum*usum)*dc(j,i+nres)/vbld(i+nres)
5266 C--------------------------------------------------------------------------
5267 subroutine ebend(etheta,ethetacnstr)
5269 C Evaluate the virtual-bond-angle energy given the virtual-bond dihedral
5270 C angles gamma and its derivatives in consecutive thetas and gammas.
5272 implicit real*8 (a-h,o-z)
5273 include 'DIMENSIONS'
5274 include 'DIMENSIONS.ZSCOPT'
5275 include 'COMMON.LOCAL'
5276 include 'COMMON.GEO'
5277 include 'COMMON.INTERACT'
5278 include 'COMMON.DERIV'
5279 include 'COMMON.VAR'
5280 include 'COMMON.CHAIN'
5281 include 'COMMON.IOUNITS'
5282 include 'COMMON.NAMES'
5283 include 'COMMON.FFIELD'
5284 include 'COMMON.TORCNSTR'
5285 common /calcthet/ term1,term2,termm,diffak,ratak,
5286 & ak,aktc,termpre,termexp,sigc,sig0i,time11,time12,sigcsq,
5287 & delthe0,sig0inv,sigtc,sigsqtc,delthec,it
5288 double precision y(2),z(2)
5290 c time11=dexp(-2*time)
5293 c write (iout,*) "nres",nres
5294 c write (*,'(a,i2)') 'EBEND ICG=',icg
5295 c write (iout,*) ithet_start,ithet_end
5296 do i=ithet_start,ithet_end
5297 C if (itype(i-1).eq.ntyp1) cycle
5299 if ((itype(i-1).eq.ntyp1).or.itype(i-2).eq.ntyp1
5300 & .or.itype(i).eq.ntyp1) cycle
5301 C Zero the energy function and its derivative at 0 or pi.
5302 call splinthet(theta(i),0.5d0*delta,ss,ssd)
5304 ichir1=isign(1,itype(i-2))
5305 ichir2=isign(1,itype(i))
5306 if (itype(i-2).eq.10) ichir1=isign(1,itype(i-1))
5307 if (itype(i).eq.10) ichir2=isign(1,itype(i-1))
5308 if (itype(i-1).eq.10) then
5309 itype1=isign(10,itype(i-2))
5310 ichir11=isign(1,itype(i-2))
5311 ichir12=isign(1,itype(i-2))
5312 itype2=isign(10,itype(i))
5313 ichir21=isign(1,itype(i))
5314 ichir22=isign(1,itype(i))
5321 if (i.gt.3 .and. itype(i-3).ne.ntyp1) then
5325 c call proc_proc(phii,icrc)
5326 if (icrc.eq.1) phii=150.0
5337 if (i.lt.nres .and. itype(i+1).ne.ntyp1) then
5341 c call proc_proc(phii1,icrc)
5342 if (icrc.eq.1) phii1=150.0
5354 C Calculate the "mean" value of theta from the part of the distribution
5355 C dependent on the adjacent virtual-bond-valence angles (gamma1 & gamma2).
5356 C In following comments this theta will be referred to as t_c.
5357 thet_pred_mean=0.0d0
5359 athetk=athet(k,it,ichir1,ichir2)
5360 bthetk=bthet(k,it,ichir1,ichir2)
5362 athetk=athet(k,itype1,ichir11,ichir12)
5363 bthetk=bthet(k,itype2,ichir21,ichir22)
5365 thet_pred_mean=thet_pred_mean+athetk*y(k)+bthetk*z(k)
5367 c write (iout,*) "thet_pred_mean",thet_pred_mean
5368 dthett=thet_pred_mean*ssd
5369 thet_pred_mean=thet_pred_mean*ss+a0thet(it)
5370 c write (iout,*) "thet_pred_mean",thet_pred_mean
5371 C Derivatives of the "mean" values in gamma1 and gamma2.
5372 dthetg1=(-athet(1,it,ichir1,ichir2)*y(2)
5373 &+athet(2,it,ichir1,ichir2)*y(1))*ss
5374 dthetg2=(-bthet(1,it,ichir1,ichir2)*z(2)
5375 & +bthet(2,it,ichir1,ichir2)*z(1))*ss
5377 dthetg1=(-athet(1,itype1,ichir11,ichir12)*y(2)
5378 &+athet(2,itype1,ichir11,ichir12)*y(1))*ss
5379 dthetg2=(-bthet(1,itype2,ichir21,ichir22)*z(2)
5380 & +bthet(2,itype2,ichir21,ichir22)*z(1))*ss
5382 if (theta(i).gt.pi-delta) then
5383 call theteng(pi-delta,thet_pred_mean,theta0(it),f0,fprim0,
5385 call mixder(pi-delta,thet_pred_mean,theta0(it),fprim_tc0)
5386 call theteng(pi,thet_pred_mean,theta0(it),f1,fprim1,E_tc1)
5387 call spline1(theta(i),pi-delta,delta,f0,f1,fprim0,ethetai,
5389 call spline2(theta(i),pi-delta,delta,E_tc0,E_tc1,fprim_tc0,
5391 else if (theta(i).lt.delta) then
5392 call theteng(delta,thet_pred_mean,theta0(it),f0,fprim0,E_tc0)
5393 call theteng(0.0d0,thet_pred_mean,theta0(it),f1,fprim1,E_tc1)
5394 call spline1(theta(i),delta,-delta,f0,f1,fprim0,ethetai,
5396 call mixder(delta,thet_pred_mean,theta0(it),fprim_tc0)
5397 call spline2(theta(i),delta,-delta,E_tc0,E_tc1,fprim_tc0,
5400 call theteng(theta(i),thet_pred_mean,theta0(it),ethetai,
5403 etheta=etheta+ethetai
5404 c write (iout,'(a6,i5,0pf7.3,f7.3,i5)')
5405 c & 'ebend',i,ethetai,theta(i),itype(i)
5406 c write (iout,'(2i3,3f8.3,f10.5)') i,it,rad2deg*theta(i),
5407 c & rad2deg*phii,rad2deg*phii1,ethetai
5408 if (i.gt.3) gloc(i-3,icg)=gloc(i-3,icg)+wang*E_tc*dthetg1
5409 if (i.lt.nres) gloc(i-2,icg)=gloc(i-2,icg)+wang*E_tc*dthetg2
5410 gloc(nphi+i-2,icg)=wang*(E_theta+E_tc*dthett)
5414 C print *,ithetaconstr_start,ithetaconstr_end,"TU"
5415 do i=1,ntheta_constr
5416 itheta=itheta_constr(i)
5417 thetiii=theta(itheta)
5418 difi=pinorm(thetiii-theta_constr0(i))
5419 if (difi.gt.theta_drange(i)) then
5420 difi=difi-theta_drange(i)
5421 ethetacnstr=ethetacnstr+0.25d0*for_thet_constr(i)*difi**4
5422 gloc(itheta+nphi-2,icg)=gloc(itheta+nphi-2,icg)
5423 & +for_thet_constr(i)*difi**3
5424 else if (difi.lt.-drange(i)) then
5426 ethetacnstr=ethetacnstr+0.25d0*for_thet_constr(i)*difi**4
5427 gloc(itheta+nphi-2,icg)=gloc(itheta+nphi-2,icg)
5428 & +for_thet_constr(i)*difi**3
5432 C if (energy_dec) then
5433 C write (iout,'(a6,2i5,4f8.3,2e14.5)') "ethetc",
5434 C & i,itheta,rad2deg*thetiii,
5435 C & rad2deg*theta_constr0(i), rad2deg*theta_drange(i),
5436 C & rad2deg*difi,0.25d0*for_thet_constr(i)*difi**4,
5437 C & gloc(itheta+nphi-2,icg)
5440 C Ufff.... We've done all this!!!
5443 C---------------------------------------------------------------------------
5444 subroutine theteng(thetai,thet_pred_mean,theta0i,ethetai,E_theta,
5446 implicit real*8 (a-h,o-z)
5447 include 'DIMENSIONS'
5448 include 'COMMON.LOCAL'
5449 include 'COMMON.IOUNITS'
5450 common /calcthet/ term1,term2,termm,diffak,ratak,
5451 & ak,aktc,termpre,termexp,sigc,sig0i,time11,time12,sigcsq,
5452 & delthe0,sig0inv,sigtc,sigsqtc,delthec,it
5453 C Calculate the contributions to both Gaussian lobes.
5454 C 6/6/97 - Deform the Gaussians using the factor of 1/(1+time)
5455 C The "polynomial part" of the "standard deviation" of this part of
5459 sig=sig*thet_pred_mean+polthet(j,it)
5461 C Derivative of the "interior part" of the "standard deviation of the"
5462 C gamma-dependent Gaussian lobe in t_c.
5463 sigtc=3*polthet(3,it)
5465 sigtc=sigtc*thet_pred_mean+j*polthet(j,it)
5468 C Set the parameters of both Gaussian lobes of the distribution.
5469 C "Standard deviation" of the gamma-dependent Gaussian lobe (sigtc)
5470 fac=sig*sig+sigc0(it)
5473 C Following variable (sigsqtc) is -(1/2)d[sigma(t_c)**(-2))]/dt_c
5474 sigsqtc=-4.0D0*sigcsq*sigtc
5475 c print *,i,sig,sigtc,sigsqtc
5476 C Following variable (sigtc) is d[sigma(t_c)]/dt_c
5477 sigtc=-sigtc/(fac*fac)
5478 C Following variable is sigma(t_c)**(-2)
5479 sigcsq=sigcsq*sigcsq
5481 sig0inv=1.0D0/sig0i**2
5482 delthec=thetai-thet_pred_mean
5483 delthe0=thetai-theta0i
5484 term1=-0.5D0*sigcsq*delthec*delthec
5485 term2=-0.5D0*sig0inv*delthe0*delthe0
5486 C Following fuzzy logic is to avoid underflows in dexp and subsequent INFs and
5487 C NaNs in taking the logarithm. We extract the largest exponent which is added
5488 C to the energy (this being the log of the distribution) at the end of energy
5489 C term evaluation for this virtual-bond angle.
5490 if (term1.gt.term2) then
5492 term2=dexp(term2-termm)
5496 term1=dexp(term1-termm)
5499 C The ratio between the gamma-independent and gamma-dependent lobes of
5500 C the distribution is a Gaussian function of thet_pred_mean too.
5501 diffak=gthet(2,it)-thet_pred_mean
5502 ratak=diffak/gthet(3,it)**2
5503 ak=dexp(gthet(1,it)-0.5D0*diffak*ratak)
5504 C Let's differentiate it in thet_pred_mean NOW.
5506 C Now put together the distribution terms to make complete distribution.
5507 termexp=term1+ak*term2
5508 termpre=sigc+ak*sig0i
5509 C Contribution of the bending energy from this theta is just the -log of
5510 C the sum of the contributions from the two lobes and the pre-exponential
5511 C factor. Simple enough, isn't it?
5512 ethetai=(-dlog(termexp)-termm+dlog(termpre))
5513 C NOW the derivatives!!!
5514 C 6/6/97 Take into account the deformation.
5515 E_theta=(delthec*sigcsq*term1
5516 & +ak*delthe0*sig0inv*term2)/termexp
5517 E_tc=((sigtc+aktc*sig0i)/termpre
5518 & -((delthec*sigcsq+delthec*delthec*sigsqtc)*term1+
5519 & aktc*term2)/termexp)
5522 c-----------------------------------------------------------------------------
5523 subroutine mixder(thetai,thet_pred_mean,theta0i,E_tc_t)
5524 implicit real*8 (a-h,o-z)
5525 include 'DIMENSIONS'
5526 include 'COMMON.LOCAL'
5527 include 'COMMON.IOUNITS'
5528 common /calcthet/ term1,term2,termm,diffak,ratak,
5529 & ak,aktc,termpre,termexp,sigc,sig0i,time11,time12,sigcsq,
5530 & delthe0,sig0inv,sigtc,sigsqtc,delthec,it
5531 delthec=thetai-thet_pred_mean
5532 delthe0=thetai-theta0i
5533 C "Thank you" to MAPLE (probably spared one day of hand-differentiation).
5534 t3 = thetai-thet_pred_mean
5538 t14 = t12+t6*sigsqtc
5540 t21 = thetai-theta0i
5546 E_tc_t = -((sigcsq+2.D0*t3*sigsqtc)*t9-t14*sigcsq*t3*t16*t9
5547 & -aktc*sig0inv*t27)/t32+(t14*t9+aktc*t26)/t40
5548 & *(-t12*t9-ak*sig0inv*t27)
5552 C--------------------------------------------------------------------------
5553 subroutine ebend(etheta)
5555 C Evaluate the virtual-bond-angle energy given the virtual-bond dihedral
5556 C angles gamma and its derivatives in consecutive thetas and gammas.
5557 C ab initio-derived potentials from
5558 c Kozlowska et al., J. Phys.: Condens. Matter 19 (2007) 285203
5560 implicit real*8 (a-h,o-z)
5561 include 'DIMENSIONS'
5562 include 'DIMENSIONS.ZSCOPT'
5563 include 'COMMON.LOCAL'
5564 include 'COMMON.GEO'
5565 include 'COMMON.INTERACT'
5566 include 'COMMON.DERIV'
5567 include 'COMMON.VAR'
5568 include 'COMMON.CHAIN'
5569 include 'COMMON.IOUNITS'
5570 include 'COMMON.NAMES'
5571 include 'COMMON.FFIELD'
5572 include 'COMMON.CONTROL'
5573 include 'COMMON.TORCNSTR'
5574 double precision coskt(mmaxtheterm),sinkt(mmaxtheterm),
5575 & cosph1(maxsingle),sinph1(maxsingle),cosph2(maxsingle),
5576 & sinph2(maxsingle),cosph1ph2(maxdouble,maxdouble),
5577 & sinph1ph2(maxdouble,maxdouble)
5578 logical lprn /.false./, lprn1 /.false./
5580 c write (iout,*) "ithetyp",(ithetyp(i),i=1,ntyp1)
5581 do i=ithet_start,ithet_end
5583 C if (itype(i-1).eq.ntyp1) cycle
5585 if ((itype(i-1).eq.ntyp1).or.itype(i-2).eq.ntyp1
5586 & .or.itype(i).eq.ntyp1) cycle
5587 if (iabs(itype(i+1)).eq.20) iblock=2
5588 if (iabs(itype(i+1)).ne.20) iblock=1
5592 theti2=0.5d0*theta(i)
5593 ityp2=ithetyp((itype(i-1)))
5595 coskt(k)=dcos(k*theti2)
5596 sinkt(k)=dsin(k*theti2)
5606 if (i.gt.3 .and. itype(i-3).ne.ntyp1) then
5609 if (phii.ne.phii) phii=150.0
5613 ityp1=ithetyp((itype(i-2)))
5615 cosph1(k)=dcos(k*phii)
5616 sinph1(k)=dsin(k*phii)
5622 ityp1=ithetyp((itype(i-2)))
5627 if (i.lt.nres .and. itype(i+1).ne.ntyp1) then
5630 if (phii1.ne.phii1) phii1=150.0
5635 ityp3=ithetyp((itype(i)))
5637 cosph2(k)=dcos(k*phii1)
5638 sinph2(k)=dsin(k*phii1)
5643 ityp3=ithetyp((itype(i)))
5649 c write (iout,*) "i",i," ityp1",itype(i-2),ityp1,
5650 c & " ityp2",itype(i-1),ityp2," ityp3",itype(i),ityp3
5652 ethetai=aa0thet(ityp1,ityp2,ityp3,iblock)
5655 ccl=cosph1(l)*cosph2(k-l)
5656 ssl=sinph1(l)*sinph2(k-l)
5657 scl=sinph1(l)*cosph2(k-l)
5658 csl=cosph1(l)*sinph2(k-l)
5659 cosph1ph2(l,k)=ccl-ssl
5660 cosph1ph2(k,l)=ccl+ssl
5661 sinph1ph2(l,k)=scl+csl
5662 sinph1ph2(k,l)=scl-csl
5666 write (iout,*) "i",i," ityp1",ityp1," ityp2",ityp2,
5667 & " ityp3",ityp3," theti2",theti2," phii",phii," phii1",phii1
5668 write (iout,*) "coskt and sinkt"
5670 write (iout,*) k,coskt(k),sinkt(k)
5674 ethetai=ethetai+aathet(k,ityp1,ityp2,ityp3,iblock)*sinkt(k)
5675 dethetai=dethetai+0.5d0*k*aathet(k,ityp1,ityp2,ityp3,iblock)
5678 & write (iout,*) "k",k,"
5679 & aathet",aathet(k,ityp1,ityp2,ityp3,iblock),
5680 & " ethetai",ethetai
5683 write (iout,*) "cosph and sinph"
5685 write (iout,*) k,cosph1(k),sinph1(k),cosph2(k),sinph2(k)
5687 write (iout,*) "cosph1ph2 and sinph2ph2"
5690 write (iout,*) l,k,cosph1ph2(l,k),cosph1ph2(k,l),
5691 & sinph1ph2(l,k),sinph1ph2(k,l)
5694 write(iout,*) "ethetai",ethetai
5698 aux=bbthet(k,m,ityp1,ityp2,ityp3,iblock)*cosph1(k)
5699 & +ccthet(k,m,ityp1,ityp2,ityp3,iblock)*sinph1(k)
5700 & +ddthet(k,m,ityp1,ityp2,ityp3,iblock)*cosph2(k)
5701 & +eethet(k,m,ityp1,ityp2,ityp3,iblock)*sinph2(k)
5702 ethetai=ethetai+sinkt(m)*aux
5703 dethetai=dethetai+0.5d0*m*aux*coskt(m)
5704 dephii=dephii+k*sinkt(m)*(
5705 & ccthet(k,m,ityp1,ityp2,ityp3,iblock)*cosph1(k)-
5706 & bbthet(k,m,ityp1,ityp2,ityp3,iblock)*sinph1(k))
5707 dephii1=dephii1+k*sinkt(m)*(
5708 & eethet(k,m,ityp1,ityp2,ityp3,iblock)*cosph2(k)-
5709 & ddthet(k,m,ityp1,ityp2,ityp3,iblock)*sinph2(k))
5711 & write (iout,*) "m",m," k",k," bbthet",
5712 & bbthet(k,m,ityp1,ityp2,ityp3,iblock)," ccthet",
5713 & ccthet(k,m,ityp1,ityp2,ityp3,iblock)," ddthet",
5714 & ddthet(k,m,ityp1,ityp2,ityp3,iblock)," eethet",
5715 & eethet(k,m,ityp1,ityp2,ityp3,iblock)," ethetai",ethetai
5719 & write(iout,*) "ethetai",ethetai
5723 aux=ffthet(l,k,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(l,k)+
5724 & ffthet(k,l,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(k,l)+
5725 & ggthet(l,k,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(l,k)+
5726 & ggthet(k,l,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(k,l)
5727 ethetai=ethetai+sinkt(m)*aux
5728 dethetai=dethetai+0.5d0*m*coskt(m)*aux
5729 dephii=dephii+l*sinkt(m)*(
5730 & -ffthet(l,k,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(l,k)-
5731 & ffthet(k,l,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(k,l)+
5732 & ggthet(l,k,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(l,k)+
5733 & ggthet(k,l,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(k,l))
5734 dephii1=dephii1+(k-l)*sinkt(m)*(
5735 & -ffthet(l,k,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(l,k)+
5736 & ffthet(k,l,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(k,l)+
5737 & ggthet(l,k,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(l,k)-
5738 & ggthet(k,l,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(k,l))
5740 write (iout,*) "m",m," k",k," l",l," ffthet",
5741 & ffthet(l,k,m,ityp1,ityp2,ityp3,iblock),
5742 & ffthet(k,l,m,ityp1,ityp2,ityp3,iblock)," ggthet",
5743 & ggthet(l,k,m,ityp1,ityp2,ityp3,iblock),
5744 & ggthet(k,l,m,ityp1,ityp2,ityp3,iblock),
5745 & " ethetai",ethetai
5746 write (iout,*) cosph1ph2(l,k)*sinkt(m),
5747 & cosph1ph2(k,l)*sinkt(m),
5748 & sinph1ph2(l,k)*sinkt(m),sinph1ph2(k,l)*sinkt(m)
5754 if (lprn1) write (iout,'(i2,3f8.1,9h ethetai ,f10.5)')
5755 & i,theta(i)*rad2deg,phii*rad2deg,
5756 & phii1*rad2deg,ethetai
5757 etheta=etheta+ethetai
5758 if (i.gt.3) gloc(i-3,icg)=gloc(i-3,icg)+wang*dephii
5759 if (i.lt.nres) gloc(i-2,icg)=gloc(i-2,icg)+wang*dephii1
5760 c gloc(nphi+i-2,icg)=wang*dethetai
5761 gloc(nphi+i-2,icg)=gloc(nphi+i-2,icg)+wang*dethetai
5767 c-----------------------------------------------------------------------------
5768 subroutine esc(escloc)
5769 C Calculate the local energy of a side chain and its derivatives in the
5770 C corresponding virtual-bond valence angles THETA and the spherical angles
5772 implicit real*8 (a-h,o-z)
5773 include 'DIMENSIONS'
5774 include 'DIMENSIONS.ZSCOPT'
5775 include 'COMMON.GEO'
5776 include 'COMMON.LOCAL'
5777 include 'COMMON.VAR'
5778 include 'COMMON.INTERACT'
5779 include 'COMMON.DERIV'
5780 include 'COMMON.CHAIN'
5781 include 'COMMON.IOUNITS'
5782 include 'COMMON.NAMES'
5783 include 'COMMON.FFIELD'
5784 double precision x(3),dersc(3),xemp(3),dersc0(3),dersc1(3),
5785 & ddersc0(3),ddummy(3),xtemp(3),temp(3)
5786 common /sccalc/ time11,time12,time112,theti,it,nlobit
5789 C write (iout,*) 'ESC'
5790 do i=loc_start,loc_end
5792 if (it.eq.ntyp1) cycle
5793 if (it.eq.10) goto 1
5794 nlobit=nlob(iabs(it))
5795 c print *,'i=',i,' it=',it,' nlobit=',nlobit
5796 C write (iout,*) 'i=',i,' ssa=',ssa,' ssad=',ssad
5797 theti=theta(i+1)-pipol
5801 c write (iout,*) "i",i," x",x(1),x(2),x(3)
5803 if (x(2).gt.pi-delta) then
5807 call enesc(xtemp,escloci0,dersc0,ddersc0,.true.)
5809 call enesc(xtemp,escloci1,dersc1,ddummy,.false.)
5810 call spline1(x(2),pi-delta,delta,escloci0,escloci1,dersc0(2),
5812 call spline2(x(2),pi-delta,delta,dersc0(1),dersc1(1),
5813 & ddersc0(1),dersc(1))
5814 call spline2(x(2),pi-delta,delta,dersc0(3),dersc1(3),
5815 & ddersc0(3),dersc(3))
5817 call enesc_bound(xtemp,esclocbi0,dersc0,dersc12,.true.)
5819 call enesc_bound(xtemp,esclocbi1,dersc1,chuju,.false.)
5820 call spline1(x(2),pi-delta,delta,esclocbi0,esclocbi1,
5821 & dersc0(2),esclocbi,dersc02)
5822 call spline2(x(2),pi-delta,delta,dersc0(1),dersc1(1),
5824 call splinthet(x(2),0.5d0*delta,ss,ssd)
5829 dersc(k)=ss*dersc(k)+(1.0d0-ss)*dersc0(k)
5831 dersc(2)=dersc(2)+ssd*(escloci-esclocbi)
5832 write (iout,*) 'i=',i,x(2)*rad2deg,escloci0,escloci,
5834 escloci=ss*escloci+(1.0d0-ss)*esclocbi
5836 c write (iout,*) escloci
5837 else if (x(2).lt.delta) then
5841 call enesc(xtemp,escloci0,dersc0,ddersc0,.true.)
5843 call enesc(xtemp,escloci1,dersc1,ddummy,.false.)
5844 call spline1(x(2),delta,-delta,escloci0,escloci1,dersc0(2),
5846 call spline2(x(2),delta,-delta,dersc0(1),dersc1(1),
5847 & ddersc0(1),dersc(1))
5848 call spline2(x(2),delta,-delta,dersc0(3),dersc1(3),
5849 & ddersc0(3),dersc(3))
5851 call enesc_bound(xtemp,esclocbi0,dersc0,dersc12,.true.)
5853 call enesc_bound(xtemp,esclocbi1,dersc1,chuju,.false.)
5854 call spline1(x(2),delta,-delta,esclocbi0,esclocbi1,
5855 & dersc0(2),esclocbi,dersc02)
5856 call spline2(x(2),delta,-delta,dersc0(1),dersc1(1),
5861 call splinthet(x(2),0.5d0*delta,ss,ssd)
5863 dersc(k)=ss*dersc(k)+(1.0d0-ss)*dersc0(k)
5865 dersc(2)=dersc(2)+ssd*(escloci-esclocbi)
5866 c write (iout,*) 'i=',i,x(2)*rad2deg,escloci0,escloci,
5868 escloci=ss*escloci+(1.0d0-ss)*esclocbi
5869 C write (iout,*) 'i=',i, escloci
5871 call enesc(x,escloci,dersc,ddummy,.false.)
5874 escloc=escloc+escloci
5875 C write (iout,*) 'i=',i,' escloci=',escloci,' dersc=',dersc
5876 write (iout,'(a6,i5,0pf7.3)')
5877 & 'escloc',i,escloci
5879 gloc(nphi+i-1,icg)=gloc(nphi+i-1,icg)+
5881 gloc(ialph(i,1),icg)=wscloc*dersc(2)
5882 gloc(ialph(i,1)+nside,icg)=wscloc*dersc(3)
5887 C---------------------------------------------------------------------------
5888 subroutine enesc(x,escloci,dersc,ddersc,mixed)
5889 implicit real*8 (a-h,o-z)
5890 include 'DIMENSIONS'
5891 include 'COMMON.GEO'
5892 include 'COMMON.LOCAL'
5893 include 'COMMON.IOUNITS'
5894 common /sccalc/ time11,time12,time112,theti,it,nlobit
5895 double precision x(3),z(3),Ax(3,maxlob,-1:1),dersc(3),ddersc(3)
5896 double precision contr(maxlob,-1:1)
5898 c write (iout,*) 'it=',it,' nlobit=',nlobit
5902 if (mixed) ddersc(j)=0.0d0
5906 C Because of periodicity of the dependence of the SC energy in omega we have
5907 C to add up the contributions from x(3)-2*pi, x(3), and x(3+2*pi).
5908 C To avoid underflows, first compute & store the exponents.
5916 z(k)=x(k)-censc(k,j,it)
5921 Axk=Axk+gaussc(l,k,j,it)*z(l)
5927 expfac=expfac+Ax(k,j,iii)*z(k)
5935 C As in the case of ebend, we want to avoid underflows in exponentiation and
5936 C subsequent NaNs and INFs in energy calculation.
5937 C Find the largest exponent
5941 if (emin.gt.contr(j,iii)) emin=contr(j,iii)
5945 cd print *,'it=',it,' emin=',emin
5947 C Compute the contribution to SC energy and derivatives
5951 expfac=dexp(bsc(j,iabs(it))-0.5D0*contr(j,iii)+emin)
5952 cd print *,'j=',j,' expfac=',expfac
5953 escloc_i=escloc_i+expfac
5955 dersc(k)=dersc(k)+Ax(k,j,iii)*expfac
5959 ddersc(k)=ddersc(k)+(-Ax(2,j,iii)*Ax(k,j,iii)
5960 & +gaussc(k,2,j,it))*expfac
5967 dersc(1)=dersc(1)/cos(theti)**2
5968 ddersc(1)=ddersc(1)/cos(theti)**2
5971 escloci=-(dlog(escloc_i)-emin)
5973 dersc(j)=dersc(j)/escloc_i
5977 ddersc(j)=(ddersc(j)/escloc_i+dersc(2)*dersc(j))
5982 C------------------------------------------------------------------------------
5983 subroutine enesc_bound(x,escloci,dersc,dersc12,mixed)
5984 implicit real*8 (a-h,o-z)
5985 include 'DIMENSIONS'
5986 include 'COMMON.GEO'
5987 include 'COMMON.LOCAL'
5988 include 'COMMON.IOUNITS'
5989 common /sccalc/ time11,time12,time112,theti,it,nlobit
5990 double precision x(3),z(3),Ax(3,maxlob),dersc(3)
5991 double precision contr(maxlob)
6002 z(k)=x(k)-censc(k,j,it)
6008 Axk=Axk+gaussc(l,k,j,it)*z(l)
6014 expfac=expfac+Ax(k,j)*z(k)
6019 C As in the case of ebend, we want to avoid underflows in exponentiation and
6020 C subsequent NaNs and INFs in energy calculation.
6021 C Find the largest exponent
6024 if (emin.gt.contr(j)) emin=contr(j)
6028 C Compute the contribution to SC energy and derivatives
6032 expfac=dexp(bsc(j,iabs(it))-0.5D0*contr(j)+emin)
6033 escloc_i=escloc_i+expfac
6035 dersc(k)=dersc(k)+Ax(k,j)*expfac
6037 if (mixed) dersc12=dersc12+(-Ax(2,j)*Ax(1,j)
6038 & +gaussc(1,2,j,it))*expfac
6042 dersc(1)=dersc(1)/cos(theti)**2
6043 dersc12=dersc12/cos(theti)**2
6044 escloci=-(dlog(escloc_i)-emin)
6046 dersc(j)=dersc(j)/escloc_i
6048 if (mixed) dersc12=(dersc12/escloc_i+dersc(2)*dersc(1))
6052 c----------------------------------------------------------------------------------
6053 subroutine esc(escloc)
6054 C Calculate the local energy of a side chain and its derivatives in the
6055 C corresponding virtual-bond valence angles THETA and the spherical angles
6056 C ALPHA and OMEGA derived from AM1 all-atom calculations.
6057 C added by Urszula Kozlowska. 07/11/2007
6059 implicit real*8 (a-h,o-z)
6060 include 'DIMENSIONS'
6061 include 'DIMENSIONS.ZSCOPT'
6062 include 'COMMON.GEO'
6063 include 'COMMON.LOCAL'
6064 include 'COMMON.VAR'
6065 include 'COMMON.SCROT'
6066 include 'COMMON.INTERACT'
6067 include 'COMMON.DERIV'
6068 include 'COMMON.CHAIN'
6069 include 'COMMON.IOUNITS'
6070 include 'COMMON.NAMES'
6071 include 'COMMON.FFIELD'
6072 include 'COMMON.CONTROL'
6073 include 'COMMON.VECTORS'
6074 double precision x_prime(3),y_prime(3),z_prime(3)
6075 & , sumene,dsc_i,dp2_i,x(65),
6076 & xx,yy,zz,sumene1,sumene2,sumene3,sumene4,s1,s1_6,s2,s2_6,
6077 & de_dxx,de_dyy,de_dzz,de_dt
6078 double precision s1_t,s1_6_t,s2_t,s2_6_t
6080 & dXX_Ci1(3),dYY_Ci1(3),dZZ_Ci1(3),dXX_Ci(3),
6081 & dYY_Ci(3),dZZ_Ci(3),dXX_XYZ(3),dYY_XYZ(3),dZZ_XYZ(3),
6082 & dt_dCi(3),dt_dCi1(3)
6083 common /sccalc/ time11,time12,time112,theti,it,nlobit
6086 do i=loc_start,loc_end
6087 if (itype(i).eq.ntyp1) cycle
6088 costtab(i+1) =dcos(theta(i+1))
6089 sinttab(i+1) =dsqrt(1-costtab(i+1)*costtab(i+1))
6090 cost2tab(i+1)=dsqrt(0.5d0*(1.0d0+costtab(i+1)))
6091 sint2tab(i+1)=dsqrt(0.5d0*(1.0d0-costtab(i+1)))
6092 cosfac2=0.5d0/(1.0d0+costtab(i+1))
6093 cosfac=dsqrt(cosfac2)
6094 sinfac2=0.5d0/(1.0d0-costtab(i+1))
6095 sinfac=dsqrt(sinfac2)
6097 if (it.eq.10) goto 1
6099 C Compute the axes of tghe local cartesian coordinates system; store in
6100 c x_prime, y_prime and z_prime
6107 C write(2,*) "dc_norm", dc_norm(1,i+nres),dc_norm(2,i+nres),
6108 C & dc_norm(3,i+nres)
6110 x_prime(j) = (dc_norm(j,i) - dc_norm(j,i-1))*cosfac
6111 y_prime(j) = (dc_norm(j,i) + dc_norm(j,i-1))*sinfac
6114 z_prime(j) = -uz(j,i-1)*dsign(1.0d0,dfloat(itype(i)))
6117 c write (2,*) "x_prime",(x_prime(j),j=1,3)
6118 c write (2,*) "y_prime",(y_prime(j),j=1,3)
6119 c write (2,*) "z_prime",(z_prime(j),j=1,3)
6120 c write (2,*) "xx",scalar(x_prime(1),x_prime(1)),
6121 c & " xy",scalar(x_prime(1),y_prime(1)),
6122 c & " xz",scalar(x_prime(1),z_prime(1)),
6123 c & " yy",scalar(y_prime(1),y_prime(1)),
6124 c & " yz",scalar(y_prime(1),z_prime(1)),
6125 c & " zz",scalar(z_prime(1),z_prime(1))
6127 C Transform the unit vector of the ith side-chain centroid, dC_norm(*,i),
6128 C to local coordinate system. Store in xx, yy, zz.
6134 xx = xx + x_prime(j)*dc_norm(j,i+nres)
6135 yy = yy + y_prime(j)*dc_norm(j,i+nres)
6136 zz = zz + z_prime(j)*dc_norm(j,i+nres)
6143 C Compute the energy of the ith side cbain
6145 c write (2,*) "xx",xx," yy",yy," zz",zz
6148 x(j) = sc_parmin(j,it)
6151 Cc diagnostics - remove later
6153 yy1 = dsin(alph(2))*dcos(omeg(2))
6154 zz1 = -dsign(1.0d0,itype(i))*dsin(alph(2))*dsin(omeg(2))
6155 write(2,'(3f8.1,3f9.3,1x,3f9.3)')
6156 & alph(2)*rad2deg,omeg(2)*rad2deg,theta(3)*rad2deg,xx,yy,zz,
6158 C," --- ", xx_w,yy_w,zz_w
6161 sumene1= x(1)+ x(2)*xx+ x(3)*yy+ x(4)*zz+ x(5)*xx**2
6162 & + x(6)*yy**2+ x(7)*zz**2+ x(8)*xx*zz+ x(9)*xx*yy
6164 sumene2= x(11) + x(12)*xx + x(13)*yy + x(14)*zz + x(15)*xx**2
6165 & + x(16)*yy**2 + x(17)*zz**2 + x(18)*xx*zz + x(19)*xx*yy
6167 sumene3= x(21) +x(22)*xx +x(23)*yy +x(24)*zz +x(25)*xx**2
6168 & +x(26)*yy**2 +x(27)*zz**2 +x(28)*xx*zz +x(29)*xx*yy
6169 & +x(30)*yy*zz +x(31)*xx**3 +x(32)*yy**3 +x(33)*zz**3
6170 & +x(34)*(xx**2)*yy +x(35)*(xx**2)*zz +x(36)*(yy**2)*xx
6171 & +x(37)*(yy**2)*zz +x(38)*(zz**2)*xx +x(39)*(zz**2)*yy
6173 sumene4= x(41) +x(42)*xx +x(43)*yy +x(44)*zz +x(45)*xx**2
6174 & +x(46)*yy**2 +x(47)*zz**2 +x(48)*xx*zz +x(49)*xx*yy
6175 & +x(50)*yy*zz +x(51)*xx**3 +x(52)*yy**3 +x(53)*zz**3
6176 & +x(54)*(xx**2)*yy +x(55)*(xx**2)*zz +x(56)*(yy**2)*xx
6177 & +x(57)*(yy**2)*zz +x(58)*(zz**2)*xx +x(59)*(zz**2)*yy
6179 dsc_i = 0.743d0+x(61)
6181 dscp1=dsqrt(dsc_i**2+dp2_i**2-2*dsc_i*dp2_i
6182 & *(xx*cost2tab(i+1)+yy*sint2tab(i+1)))
6183 dscp2=dsqrt(dsc_i**2+dp2_i**2-2*dsc_i*dp2_i
6184 & *(xx*cost2tab(i+1)-yy*sint2tab(i+1)))
6185 s1=(1+x(63))/(0.1d0 + dscp1)
6186 s1_6=(1+x(64))/(0.1d0 + dscp1**6)
6187 s2=(1+x(65))/(0.1d0 + dscp2)
6188 s2_6=(1+x(65))/(0.1d0 + dscp2**6)
6189 sumene = ( sumene3*sint2tab(i+1) + sumene1)*(s1+s1_6)
6190 & + (sumene4*cost2tab(i+1) +sumene2)*(s2+s2_6)
6191 c write(2,'(i2," sumene",7f9.3)') i,sumene1,sumene2,sumene3,
6193 c & dscp1,dscp2,sumene
6194 c sumene = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
6195 escloc = escloc + sumene
6196 c write (2,*) "escloc",escloc
6197 c write (2,*) "i",i," escloc",sumene,escloc,it,itype(i),
6199 if (.not. calc_grad) goto 1
6202 C This section to check the numerical derivatives of the energy of ith side
6203 C chain in xx, yy, zz, and theta. Use the -DDEBUG compiler option or insert
6204 C #define DEBUG in the code to turn it on.
6206 write (2,*) "sumene =",sumene
6210 write (2,*) xx,yy,zz
6211 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
6212 de_dxx_num=(sumenep-sumene)/aincr
6214 write (2,*) "xx+ sumene from enesc=",sumenep
6217 write (2,*) xx,yy,zz
6218 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
6219 de_dyy_num=(sumenep-sumene)/aincr
6221 write (2,*) "yy+ sumene from enesc=",sumenep
6224 write (2,*) xx,yy,zz
6225 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
6226 de_dzz_num=(sumenep-sumene)/aincr
6228 write (2,*) "zz+ sumene from enesc=",sumenep
6229 costsave=cost2tab(i+1)
6230 sintsave=sint2tab(i+1)
6231 cost2tab(i+1)=dcos(0.5d0*(theta(i+1)+aincr))
6232 sint2tab(i+1)=dsin(0.5d0*(theta(i+1)+aincr))
6233 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
6234 de_dt_num=(sumenep-sumene)/aincr
6235 write (2,*) " t+ sumene from enesc=",sumenep
6236 cost2tab(i+1)=costsave
6237 sint2tab(i+1)=sintsave
6238 C End of diagnostics section.
6241 C Compute the gradient of esc
6243 pom_s1=(1.0d0+x(63))/(0.1d0 + dscp1)**2
6244 pom_s16=6*(1.0d0+x(64))/(0.1d0 + dscp1**6)**2
6245 pom_s2=(1.0d0+x(65))/(0.1d0 + dscp2)**2
6246 pom_s26=6*(1.0d0+x(65))/(0.1d0 + dscp2**6)**2
6247 pom_dx=dsc_i*dp2_i*cost2tab(i+1)
6248 pom_dy=dsc_i*dp2_i*sint2tab(i+1)
6249 pom_dt1=-0.5d0*dsc_i*dp2_i*(xx*sint2tab(i+1)-yy*cost2tab(i+1))
6250 pom_dt2=-0.5d0*dsc_i*dp2_i*(xx*sint2tab(i+1)+yy*cost2tab(i+1))
6251 pom1=(sumene3*sint2tab(i+1)+sumene1)
6252 & *(pom_s1/dscp1+pom_s16*dscp1**4)
6253 pom2=(sumene4*cost2tab(i+1)+sumene2)
6254 & *(pom_s2/dscp2+pom_s26*dscp2**4)
6255 sumene1x=x(2)+2*x(5)*xx+x(8)*zz+ x(9)*yy
6256 sumene3x=x(22)+2*x(25)*xx+x(28)*zz+x(29)*yy+3*x(31)*xx**2
6257 & +2*x(34)*xx*yy +2*x(35)*xx*zz +x(36)*(yy**2) +x(38)*(zz**2)
6259 sumene2x=x(12)+2*x(15)*xx+x(18)*zz+ x(19)*yy
6260 sumene4x=x(42)+2*x(45)*xx +x(48)*zz +x(49)*yy +3*x(51)*xx**2
6261 & +2*x(54)*xx*yy+2*x(55)*xx*zz+x(56)*(yy**2)+x(58)*(zz**2)
6263 de_dxx =(sumene1x+sumene3x*sint2tab(i+1))*(s1+s1_6)
6264 & +(sumene2x+sumene4x*cost2tab(i+1))*(s2+s2_6)
6265 & +(pom1+pom2)*pom_dx
6267 write(2,*), "de_dxx = ", de_dxx,de_dxx_num
6270 sumene1y=x(3) + 2*x(6)*yy + x(9)*xx + x(10)*zz
6271 sumene3y=x(23) +2*x(26)*yy +x(29)*xx +x(30)*zz +3*x(32)*yy**2
6272 & +x(34)*(xx**2) +2*x(36)*yy*xx +2*x(37)*yy*zz +x(39)*(zz**2)
6274 sumene2y=x(13) + 2*x(16)*yy + x(19)*xx + x(20)*zz
6275 sumene4y=x(43)+2*x(46)*yy+x(49)*xx +x(50)*zz
6276 & +3*x(52)*yy**2+x(54)*xx**2+2*x(56)*yy*xx +2*x(57)*yy*zz
6277 & +x(59)*zz**2 +x(60)*xx*zz
6278 de_dyy =(sumene1y+sumene3y*sint2tab(i+1))*(s1+s1_6)
6279 & +(sumene2y+sumene4y*cost2tab(i+1))*(s2+s2_6)
6280 & +(pom1-pom2)*pom_dy
6282 write(2,*), "de_dyy = ", de_dyy,de_dyy_num
6285 de_dzz =(x(24) +2*x(27)*zz +x(28)*xx +x(30)*yy
6286 & +3*x(33)*zz**2 +x(35)*xx**2 +x(37)*yy**2 +2*x(38)*zz*xx
6287 & +2*x(39)*zz*yy +x(40)*xx*yy)*sint2tab(i+1)*(s1+s1_6)
6288 & +(x(4) + 2*x(7)*zz+ x(8)*xx + x(10)*yy)*(s1+s1_6)
6289 & +(x(44)+2*x(47)*zz +x(48)*xx +x(50)*yy +3*x(53)*zz**2
6290 & +x(55)*xx**2 +x(57)*(yy**2)+2*x(58)*zz*xx +2*x(59)*zz*yy
6291 & +x(60)*xx*yy)*cost2tab(i+1)*(s2+s2_6)
6292 & + ( x(14) + 2*x(17)*zz+ x(18)*xx + x(20)*yy)*(s2+s2_6)
6294 write(2,*), "de_dzz = ", de_dzz,de_dzz_num
6297 de_dt = 0.5d0*sumene3*cost2tab(i+1)*(s1+s1_6)
6298 & -0.5d0*sumene4*sint2tab(i+1)*(s2+s2_6)
6299 & +pom1*pom_dt1+pom2*pom_dt2
6301 write(2,*), "de_dt = ", de_dt,de_dt_num
6305 cossc=scalar(dc_norm(1,i),dc_norm(1,i+nres))
6306 cossc1=scalar(dc_norm(1,i-1),dc_norm(1,i+nres))
6307 cosfac2xx=cosfac2*xx
6308 sinfac2yy=sinfac2*yy
6310 dt_dCi(k) = -(dc_norm(k,i-1)+costtab(i+1)*dc_norm(k,i))*
6312 dt_dCi1(k)= -(dc_norm(k,i)+costtab(i+1)*dc_norm(k,i-1))*
6314 pom=(dC_norm(k,i+nres)-cossc*dC_norm(k,i))*vbld_inv(i+1)
6315 pom1=(dC_norm(k,i+nres)-cossc1*dC_norm(k,i-1))*vbld_inv(i)
6316 c write (iout,*) "i",i," k",k," pom",pom," pom1",pom1,
6317 c & " dt_dCi",dt_dCi(k)," dt_dCi1",dt_dCi1(k)
6318 c write (iout,*) "dC_norm",(dC_norm(j,i),j=1,3),
6319 c & (dC_norm(j,i-1),j=1,3)," vbld_inv",vbld_inv(i+1),vbld_inv(i)
6320 dXX_Ci(k)=pom*cosfac-dt_dCi(k)*cosfac2xx
6321 dXX_Ci1(k)=-pom1*cosfac-dt_dCi1(k)*cosfac2xx
6322 dYY_Ci(k)=pom*sinfac+dt_dCi(k)*sinfac2yy
6323 dYY_Ci1(k)=pom1*sinfac+dt_dCi1(k)*sinfac2yy
6327 dZZ_Ci(k)=dZZ_Ci(k)-uzgrad(j,k,2,i-1)
6328 & *dsign(1.0d0,dfloat(itype(i)))*dC_norm(j,i+nres)
6329 dZZ_Ci1(k)=dZZ_Ci1(k)-uzgrad(j,k,1,i-1)
6330 & *dsign(1.0d0,dfloat(itype(i)))*dC_norm(j,i+nres)
6333 dXX_XYZ(k)=vbld_inv(i+nres)*(x_prime(k)-xx*dC_norm(k,i+nres))
6334 dYY_XYZ(k)=vbld_inv(i+nres)*(y_prime(k)-yy*dC_norm(k,i+nres))
6335 dZZ_XYZ(k)=vbld_inv(i+nres)*(z_prime(k)-zz*dC_norm(k,i+nres))
6337 dt_dCi(k) = -dt_dCi(k)/sinttab(i+1)
6338 dt_dCi1(k)= -dt_dCi1(k)/sinttab(i+1)
6342 dXX_Ctab(k,i)=dXX_Ci(k)
6343 dXX_C1tab(k,i)=dXX_Ci1(k)
6344 dYY_Ctab(k,i)=dYY_Ci(k)
6345 dYY_C1tab(k,i)=dYY_Ci1(k)
6346 dZZ_Ctab(k,i)=dZZ_Ci(k)
6347 dZZ_C1tab(k,i)=dZZ_Ci1(k)
6348 dXX_XYZtab(k,i)=dXX_XYZ(k)
6349 dYY_XYZtab(k,i)=dYY_XYZ(k)
6350 dZZ_XYZtab(k,i)=dZZ_XYZ(k)
6354 c write (iout,*) "k",k," dxx_ci1",dxx_ci1(k)," dyy_ci1",
6355 c & dyy_ci1(k)," dzz_ci1",dzz_ci1(k)
6356 c write (iout,*) "k",k," dxx_ci",dxx_ci(k)," dyy_ci",
6357 c & dyy_ci(k)," dzz_ci",dzz_ci(k)
6358 c write (iout,*) "k",k," dt_dci",dt_dci(k)," dt_dci",
6360 c write (iout,*) "k",k," dxx_XYZ",dxx_XYZ(k)," dyy_XYZ",
6361 c & dyy_XYZ(k)," dzz_XYZ",dzz_XYZ(k)
6362 gscloc(k,i-1)=gscloc(k,i-1)+de_dxx*dxx_ci1(k)
6363 & +de_dyy*dyy_ci1(k)+de_dzz*dzz_ci1(k)+de_dt*dt_dCi1(k)
6364 gscloc(k,i)=gscloc(k,i)+de_dxx*dxx_Ci(k)
6365 & +de_dyy*dyy_Ci(k)+de_dzz*dzz_Ci(k)+de_dt*dt_dCi(k)
6366 gsclocx(k,i)= de_dxx*dxx_XYZ(k)
6367 & +de_dyy*dyy_XYZ(k)+de_dzz*dzz_XYZ(k)
6369 c write(iout,*) "ENERGY GRAD = ", (gscloc(k,i-1),k=1,3),
6370 c & (gscloc(k,i),k=1,3),(gsclocx(k,i),k=1,3)
6372 C to check gradient call subroutine check_grad
6379 c------------------------------------------------------------------------------
6380 subroutine gcont(rij,r0ij,eps0ij,delta,fcont,fprimcont)
6382 C This procedure calculates two-body contact function g(rij) and its derivative:
6385 C g(rij) = esp0ij*(-0.9375*x+0.625*x**3-0.1875*x**5) ! -1 =< x =< 1
6388 C where x=(rij-r0ij)/delta
6390 C rij - interbody distance, r0ij - contact distance, eps0ij - contact energy
6393 double precision rij,r0ij,eps0ij,fcont,fprimcont
6394 double precision x,x2,x4,delta
6398 if (x.lt.-1.0D0) then
6401 else if (x.le.1.0D0) then
6404 fcont=eps0ij*(x*(-0.9375D0+0.6250D0*x2-0.1875D0*x4)+0.5D0)
6405 fprimcont=eps0ij * (-0.9375D0+1.8750D0*x2-0.9375D0*x4)/delta
6412 c------------------------------------------------------------------------------
6413 subroutine splinthet(theti,delta,ss,ssder)
6414 implicit real*8 (a-h,o-z)
6415 include 'DIMENSIONS'
6416 include 'DIMENSIONS.ZSCOPT'
6417 include 'COMMON.VAR'
6418 include 'COMMON.GEO'
6421 if (theti.gt.pipol) then
6422 call gcont(theti,thetup,1.0d0,delta,ss,ssder)
6424 call gcont(-theti,-thetlow,1.0d0,delta,ss,ssder)
6429 c------------------------------------------------------------------------------
6430 subroutine spline1(x,x0,delta,f0,f1,fprim0,f,fprim)
6432 double precision x,x0,delta,f0,f1,fprim0,f,fprim
6433 double precision ksi,ksi2,ksi3,a1,a2,a3
6434 a1=fprim0*delta/(f1-f0)
6440 f=f0+(f1-f0)*ksi*(a1+ksi*(a2+a3*ksi))
6441 fprim=(f1-f0)/delta*(a1+ksi*(2*a2+3*ksi*a3))
6444 c------------------------------------------------------------------------------
6445 subroutine spline2(x,x0,delta,f0x,f1x,fprim0x,fx)
6447 double precision x,x0,delta,f0x,f1x,fprim0x,fx
6448 double precision ksi,ksi2,ksi3,a1,a2,a3
6453 a2=3*(f1x-f0x)-2*fprim0x*delta
6454 a3=fprim0x*delta-2*(f1x-f0x)
6455 fx=f0x+a1*ksi+a2*ksi2+a3*ksi3
6458 C-----------------------------------------------------------------------------
6460 C-----------------------------------------------------------------------------
6461 subroutine etor(etors,fact)
6462 implicit real*8 (a-h,o-z)
6463 include 'DIMENSIONS'
6464 include 'DIMENSIONS.ZSCOPT'
6465 include 'COMMON.VAR'
6466 include 'COMMON.GEO'
6467 include 'COMMON.LOCAL'
6468 include 'COMMON.TORSION'
6469 include 'COMMON.INTERACT'
6470 include 'COMMON.DERIV'
6471 include 'COMMON.CHAIN'
6472 include 'COMMON.NAMES'
6473 include 'COMMON.IOUNITS'
6474 include 'COMMON.FFIELD'
6475 include 'COMMON.TORCNSTR'
6477 C Set lprn=.true. for debugging
6481 do i=iphi_start,iphi_end
6482 if (itype(i-2).eq.ntyp1 .or. itype(i-1).eq.ntyp1
6483 & .or. itype(i).eq.ntyp1) cycle
6484 itori=itortyp(itype(i-2))
6485 itori1=itortyp(itype(i-1))
6488 C Proline-Proline pair is a special case...
6489 if (itori.eq.3 .and. itori1.eq.3) then
6490 if (phii.gt.-dwapi3) then
6492 fac=1.0D0/(1.0D0-cosphi)
6493 etorsi=v1(1,3,3)*fac
6494 etorsi=etorsi+etorsi
6495 etors=etors+etorsi-v1(1,3,3)
6496 gloci=gloci-3*fac*etorsi*dsin(3*phii)
6499 v1ij=v1(j+1,itori,itori1)
6500 v2ij=v2(j+1,itori,itori1)
6503 etors=etors+v1ij*cosphi+v2ij*sinphi+dabs(v1ij)+dabs(v2ij)
6504 gloci=gloci+j*(v2ij*cosphi-v1ij*sinphi)
6508 v1ij=v1(j,itori,itori1)
6509 v2ij=v2(j,itori,itori1)
6512 etors=etors+v1ij*cosphi+v2ij*sinphi+dabs(v1ij)+dabs(v2ij)
6513 gloci=gloci+j*(v2ij*cosphi-v1ij*sinphi)
6517 & write (iout,'(2(a3,2x,i3,2x),2i3,6f8.3/26x,6f8.3/)')
6518 & restyp(itype(i-2)),i-2,restyp(itype(i-1)),i-1,itori,itori1,
6519 & (v1(j,itori,itori1),j=1,6),(v2(j,itori,itori1),j=1,6)
6520 gloc(i-3,icg)=gloc(i-3,icg)+wtor*fact*gloci
6521 c write (iout,*) 'i=',i,' gloc=',gloc(i-3,icg)
6525 c------------------------------------------------------------------------------
6527 subroutine etor(etors,fact)
6528 implicit real*8 (a-h,o-z)
6529 include 'DIMENSIONS'
6530 include 'DIMENSIONS.ZSCOPT'
6531 include 'COMMON.VAR'
6532 include 'COMMON.GEO'
6533 include 'COMMON.LOCAL'
6534 include 'COMMON.TORSION'
6535 include 'COMMON.INTERACT'
6536 include 'COMMON.DERIV'
6537 include 'COMMON.CHAIN'
6538 include 'COMMON.NAMES'
6539 include 'COMMON.IOUNITS'
6540 include 'COMMON.FFIELD'
6541 include 'COMMON.TORCNSTR'
6543 C Set lprn=.true. for debugging
6547 do i=iphi_start,iphi_end
6549 if (itype(i-2).eq.ntyp1.or. itype(i-1).eq.ntyp1
6550 & .or. itype(i).eq.ntyp1 .or. itype(i-3).eq.ntyp1) cycle
6551 C if (itype(i-2).eq.ntyp1 .or. itype(i-1).eq.ntyp1
6552 C & .or. itype(i).eq.ntyp1) cycle
6553 if (itel(i-2).eq.0 .or. itel(i-1).eq.0) goto 1215
6554 if (iabs(itype(i)).eq.20) then
6559 itori=itortyp(itype(i-2))
6560 itori1=itortyp(itype(i-1))
6563 C Regular cosine and sine terms
6564 do j=1,nterm(itori,itori1,iblock)
6565 v1ij=v1(j,itori,itori1,iblock)
6566 v2ij=v2(j,itori,itori1,iblock)
6569 etors=etors+v1ij*cosphi+v2ij*sinphi
6570 gloci=gloci+j*(v2ij*cosphi-v1ij*sinphi)
6574 C E = SUM ----------------------------------- - v1
6575 C [v2 cos(phi/2)+v3 sin(phi/2)]^2 + 1
6577 cosphi=dcos(0.5d0*phii)
6578 sinphi=dsin(0.5d0*phii)
6579 do j=1,nlor(itori,itori1,iblock)
6580 vl1ij=vlor1(j,itori,itori1)
6581 vl2ij=vlor2(j,itori,itori1)
6582 vl3ij=vlor3(j,itori,itori1)
6583 pom=vl2ij*cosphi+vl3ij*sinphi
6584 pom1=1.0d0/(pom*pom+1.0d0)
6585 etors=etors+vl1ij*pom1
6586 c if (energy_dec) etors_ii=etors_ii+
6589 gloci=gloci+vl1ij*(vl3ij*cosphi-vl2ij*sinphi)*pom
6591 C Subtract the constant term
6592 etors=etors-v0(itori,itori1,iblock)
6594 & write (iout,'(2(a3,2x,i3,2x),2i3,6f8.3/26x,6f8.3/)')
6595 & restyp(itype(i-2)),i-2,restyp(itype(i-1)),i-1,itori,itori1,
6596 & (v1(j,itori,itori1,1),j=1,6),(v2(j,itori,itori1,1),j=1,6)
6597 gloc(i-3,icg)=gloc(i-3,icg)+wtor*fact*gloci
6598 c write (iout,*) 'i=',i,' gloc=',gloc(i-3,icg)
6603 c----------------------------------------------------------------------------
6604 subroutine etor_d(etors_d,fact2)
6605 C 6/23/01 Compute double torsional energy
6606 implicit real*8 (a-h,o-z)
6607 include 'DIMENSIONS'
6608 include 'DIMENSIONS.ZSCOPT'
6609 include 'COMMON.VAR'
6610 include 'COMMON.GEO'
6611 include 'COMMON.LOCAL'
6612 include 'COMMON.TORSION'
6613 include 'COMMON.INTERACT'
6614 include 'COMMON.DERIV'
6615 include 'COMMON.CHAIN'
6616 include 'COMMON.NAMES'
6617 include 'COMMON.IOUNITS'
6618 include 'COMMON.FFIELD'
6619 include 'COMMON.TORCNSTR'
6621 C Set lprn=.true. for debugging
6625 do i=iphi_start,iphi_end-1
6627 C if (itype(i-2).eq.ntyp1.or. itype(i-1).eq.ntyp1
6628 C & .or. itype(i).eq.ntyp1 .or. itype(i+1).eq.ntyp1) cycle
6629 if ((itype(i-2).eq.ntyp1).or.itype(i-3).eq.ntyp1.or.
6630 & (itype(i-1).eq.ntyp1).or.(itype(i).eq.ntyp1).or.
6631 & (itype(i+1).eq.ntyp1)) cycle
6632 if (itel(i-2).eq.0 .or. itel(i-1).eq.0 .or. itel(i).eq.0)
6634 itori=itortyp(itype(i-2))
6635 itori1=itortyp(itype(i-1))
6636 itori2=itortyp(itype(i))
6642 if (iabs(itype(i+1)).eq.20) iblock=2
6643 C Regular cosine and sine terms
6644 do j=1,ntermd_1(itori,itori1,itori2,iblock)
6645 v1cij=v1c(1,j,itori,itori1,itori2,iblock)
6646 v1sij=v1s(1,j,itori,itori1,itori2,iblock)
6647 v2cij=v1c(2,j,itori,itori1,itori2,iblock)
6648 v2sij=v1s(2,j,itori,itori1,itori2,iblock)
6649 cosphi1=dcos(j*phii)
6650 sinphi1=dsin(j*phii)
6651 cosphi2=dcos(j*phii1)
6652 sinphi2=dsin(j*phii1)
6653 etors_d=etors_d+v1cij*cosphi1+v1sij*sinphi1+
6654 & v2cij*cosphi2+v2sij*sinphi2
6655 gloci1=gloci1+j*(v1sij*cosphi1-v1cij*sinphi1)
6656 gloci2=gloci2+j*(v2sij*cosphi2-v2cij*sinphi2)
6658 do k=2,ntermd_2(itori,itori1,itori2,iblock)
6660 v1cdij = v2c(k,l,itori,itori1,itori2,iblock)
6661 v2cdij = v2c(l,k,itori,itori1,itori2,iblock)
6662 v1sdij = v2s(k,l,itori,itori1,itori2,iblock)
6663 v2sdij = v2s(l,k,itori,itori1,itori2,iblock)
6664 cosphi1p2=dcos(l*phii+(k-l)*phii1)
6665 cosphi1m2=dcos(l*phii-(k-l)*phii1)
6666 sinphi1p2=dsin(l*phii+(k-l)*phii1)
6667 sinphi1m2=dsin(l*phii-(k-l)*phii1)
6668 etors_d=etors_d+v1cdij*cosphi1p2+v2cdij*cosphi1m2+
6669 & v1sdij*sinphi1p2+v2sdij*sinphi1m2
6670 gloci1=gloci1+l*(v1sdij*cosphi1p2+v2sdij*cosphi1m2
6671 & -v1cdij*sinphi1p2-v2cdij*sinphi1m2)
6672 gloci2=gloci2+(k-l)*(v1sdij*cosphi1p2-v2sdij*cosphi1m2
6673 & -v1cdij*sinphi1p2+v2cdij*sinphi1m2)
6676 gloc(i-3,icg)=gloc(i-3,icg)+wtor_d*fact2*gloci1
6677 gloc(i-2,icg)=gloc(i-2,icg)+wtor_d*fact2*gloci2
6683 c---------------------------------------------------------------------------
6684 C The rigorous attempt to derive energy function
6685 subroutine etor_kcc(etors,fact)
6686 implicit real*8 (a-h,o-z)
6687 include 'DIMENSIONS'
6688 include 'DIMENSIONS.ZSCOPT'
6689 include 'COMMON.VAR'
6690 include 'COMMON.GEO'
6691 include 'COMMON.LOCAL'
6692 include 'COMMON.TORSION'
6693 include 'COMMON.INTERACT'
6694 include 'COMMON.DERIV'
6695 include 'COMMON.CHAIN'
6696 include 'COMMON.NAMES'
6697 include 'COMMON.IOUNITS'
6698 include 'COMMON.FFIELD'
6699 include 'COMMON.TORCNSTR'
6700 include 'COMMON.CONTROL'
6701 double precision c1(0:maxval_kcc),c2(0:maxval_kcc)
6703 c double precision thybt1(maxtermkcc),thybt2(maxtermkcc)
6704 C Set lprn=.true. for debugging
6707 C print *,"wchodze kcc"
6708 if (lprn) write (iout,*) "etor_kcc tor_mode",tor_mode
6710 do i=iphi_start,iphi_end
6711 C ANY TWO ARE DUMMY ATOMS in row CYCLE
6712 c if (((itype(i-3).eq.ntyp1).and.(itype(i-2).eq.ntyp1)).or.
6713 c & ((itype(i-2).eq.ntyp1).and.(itype(i-1).eq.ntyp1)) .or.
6714 c & ((itype(i-1).eq.ntyp1).and.(itype(i).eq.ntyp1))) cycle
6715 if (itype(i-2).eq.ntyp1.or. itype(i-1).eq.ntyp1
6716 & .or. itype(i).eq.ntyp1 .or. itype(i-3).eq.ntyp1) cycle
6717 itori=itortyp(itype(i-2))
6718 itori1=itortyp(itype(i-1))
6723 C to avoid multiple devision by 2
6724 c theti22=0.5d0*theta(i)
6725 C theta 12 is the theta_1 /2
6726 C theta 22 is theta_2 /2
6727 c theti12=0.5d0*theta(i-1)
6728 C and appropriate sinus function
6729 sinthet1=dsin(theta(i-1))
6730 sinthet2=dsin(theta(i))
6731 costhet1=dcos(theta(i-1))
6732 costhet2=dcos(theta(i))
6733 C to speed up lets store its mutliplication
6734 sint1t2=sinthet2*sinthet1
6736 C \sum_{i=1}^n (sin(theta_1) * sin(theta_2))^n * (c_n* cos(n*gamma)
6737 C +d_n*sin(n*gamma)) *
6738 C \sum_{i=1}^m (1+a_m*Tb_m(cos(theta_1 /2))+b_m*Tb_m(cos(theta_2 /2)))
6739 C we have two sum 1) Non-Chebyshev which is with n and gamma
6740 nval=nterm_kcc_Tb(itori,itori1)
6746 c1(j)=c1(j-1)*costhet1
6747 c2(j)=c2(j-1)*costhet2
6750 do j=1,nterm_kcc(itori,itori1)
6754 sint1t2n=sint1t2n*sint1t2
6760 sumvalc=sumvalc+v1_kcc(l,k,j,itori1,itori)*c1(k)*c2(l)
6761 gradvalct1=gradvalct1+
6762 & (k-1)*v1_kcc(l,k,j,itori1,itori)*c1(k-1)*c2(l)
6763 gradvalct2=gradvalct2+
6764 & (l-1)*v1_kcc(l,k,j,itori1,itori)*c1(k)*c2(l-1)
6767 gradvalct1=-gradvalct1*sinthet1
6768 gradvalct2=-gradvalct2*sinthet2
6774 sumvals=sumvals+v2_kcc(l,k,j,itori1,itori)*c1(k)*c2(l)
6775 gradvalst1=gradvalst1+
6776 & (k-1)*v2_kcc(l,k,j,itori1,itori)*c1(k-1)*c2(l)
6777 gradvalst2=gradvalst2+
6778 & (l-1)*v2_kcc(l,k,j,itori1,itori)*c1(k)*c2(l-1)
6781 gradvalst1=-gradvalst1*sinthet1
6782 gradvalst2=-gradvalst2*sinthet2
6783 etori=etori+sint1t2n*(sumvalc*cosphi+sumvals*sinphi)
6784 C glocig is the gradient local i site in gamma
6785 glocig=glocig+j*sint1t2n*(sumvals*cosphi-sumvalc*sinphi)
6786 C now gradient over theta_1
6787 glocit1=glocit1+sint1t2n*(gradvalct1*cosphi+gradvalst1*sinphi)
6788 & +j*sint1t2n1*costhet1*sinthet2*(sumvalc*cosphi+sumvals*sinphi)
6789 glocit2=glocit2+sint1t2n*(gradvalct2*cosphi+gradvalst2*sinphi)
6790 & +j*sint1t2n1*sinthet1*costhet2*(sumvalc*cosphi+sumvals*sinphi)
6793 C derivative over gamma
6794 gloc(i-3,icg)=gloc(i-3,icg)+wtor*glocig
6795 C derivative over theta1
6796 gloc(nphi+i-3,icg)=gloc(nphi+i-3,icg)+wtor*glocit1
6797 C now derivative over theta2
6798 gloc(nphi+i-2,icg)=gloc(nphi+i-2,icg)+wtor*glocit2
6800 write (iout,*) i-2,i-1,itype(i-2),itype(i-1),itori,itori1,
6801 & theta(i-1)*rad2deg,theta(i)*rad2deg,phii*rad2deg,etori
6802 write (iout,*) "c1",(c1(k),k=0,nval),
6803 & " c2",(c2(k),k=0,nval)
6804 write (iout,*) "sumvalc",sumvalc," sumvals",sumvals
6809 c---------------------------------------------------------------------------------------------
6810 subroutine etor_constr(edihcnstr)
6811 implicit real*8 (a-h,o-z)
6812 include 'DIMENSIONS'
6813 include 'DIMENSIONS.ZSCOPT'
6814 include 'COMMON.VAR'
6815 include 'COMMON.GEO'
6816 include 'COMMON.LOCAL'
6817 include 'COMMON.TORSION'
6818 include 'COMMON.INTERACT'
6819 include 'COMMON.DERIV'
6820 include 'COMMON.CHAIN'
6821 include 'COMMON.NAMES'
6822 include 'COMMON.IOUNITS'
6823 include 'COMMON.FFIELD'
6824 include 'COMMON.TORCNSTR'
6825 include 'COMMON.CONTROL'
6826 ! 6/20/98 - dihedral angle constraints
6828 c do i=1,ndih_constr
6829 c write (iout,*) "idihconstr_start",idihconstr_start,
6830 c & " idihconstr_end",idihconstr_end
6832 if (raw_psipred) then
6833 do i=idihconstr_start,idihconstr_end
6834 itori=idih_constr(i)
6836 gaudih_i=vpsipred(1,i)
6840 cos_i=(1.0d0-dcos(phii-phibound(j,i)))/s**2
6841 dexpcos_i=dexp(-cos_i*cos_i)
6842 gaudih_i=gaudih_i+vpsipred(j+1,i)*dexpcos_i
6843 gauder_i=gauder_i-2*vpsipred(j+1,i)*dsin(phii-phibound(j,i))
6844 & *cos_i*dexpcos_i/s**2
6846 edihcnstr=edihcnstr-wdihc*dlog(gaudih_i)
6847 gloc(itori-3,icg)=gloc(itori-3,icg)-wdihc*gauder_i/gaudih_i
6849 & write (iout,'(2i5,f8.3,f8.5,2(f8.5,2f8.3),f10.5)')
6850 & i,itori,phii*rad2deg,vpsipred(1,i),vpsipred(2,i),
6851 & phibound(1,i)*rad2deg,sdihed(1,i)*rad2deg,vpsipred(3,i),
6852 & phibound(2,i)*rad2deg,sdihed(2,i)*rad2deg,
6853 & -wdihc*dlog(gaudih_i)
6857 do i=idihconstr_start,idihconstr_end
6858 itori=idih_constr(i)
6860 difi=pinorm(phii-phi0(i))
6861 if (difi.gt.drange(i)) then
6863 edihcnstr=edihcnstr+0.25d0*ftors(i)*difi**4
6864 gloc(itori-3,icg)=gloc(itori-3,icg)+ftors(i)*difi**3
6865 else if (difi.lt.-drange(i)) then
6867 edihcnstr=edihcnstr+0.25d0*ftors(i)*difi**4
6868 gloc(itori-3,icg)=gloc(itori-3,icg)+ftors(i)*difi**3
6876 c write (iout,*) "ETOR_CONSTR",edihcnstr
6879 c----------------------------------------------------------------------------
6880 C The rigorous attempt to derive energy function
6881 subroutine ebend_kcc(etheta)
6883 implicit real*8 (a-h,o-z)
6884 include 'DIMENSIONS'
6885 include 'DIMENSIONS.ZSCOPT'
6886 include 'COMMON.VAR'
6887 include 'COMMON.GEO'
6888 include 'COMMON.LOCAL'
6889 include 'COMMON.TORSION'
6890 include 'COMMON.INTERACT'
6891 include 'COMMON.DERIV'
6892 include 'COMMON.CHAIN'
6893 include 'COMMON.NAMES'
6894 include 'COMMON.IOUNITS'
6895 include 'COMMON.FFIELD'
6896 include 'COMMON.TORCNSTR'
6897 include 'COMMON.CONTROL'
6899 double precision thybt1(maxang_kcc)
6900 C Set lprn=.true. for debugging
6903 C print *,"wchodze kcc"
6904 if (lprn) write (iout,*) "ebend_kcc tor_mode",tor_mode
6906 do i=ithet_start,ithet_end
6907 c print *,i,itype(i-1),itype(i),itype(i-2)
6908 if ((itype(i-1).eq.ntyp1).or.itype(i-2).eq.ntyp1
6909 & .or.itype(i).eq.ntyp1) cycle
6910 iti=iabs(itortyp(itype(i-1)))
6911 sinthet=dsin(theta(i))
6912 costhet=dcos(theta(i))
6913 do j=1,nbend_kcc_Tb(iti)
6914 thybt1(j)=v1bend_chyb(j,iti)
6916 sumth1thyb=v1bend_chyb(0,iti)+
6917 & tschebyshev(1,nbend_kcc_Tb(iti),thybt1(1),costhet)
6918 if (lprn) write (iout,*) i-1,itype(i-1),iti,theta(i)*rad2deg,
6920 ihelp=nbend_kcc_Tb(iti)-1
6921 gradthybt1=gradtschebyshev(0,ihelp,thybt1(1),costhet)
6922 etheta=etheta+sumth1thyb
6923 C print *,sumth1thyb,gradthybt1,sinthet*(-0.5d0)
6924 gloc(nphi+i-2,icg)=gloc(nphi+i-2,icg)-wang*gradthybt1*sinthet
6928 c-------------------------------------------------------------------------------------
6929 subroutine etheta_constr(ethetacnstr)
6931 implicit real*8 (a-h,o-z)
6932 include 'DIMENSIONS'
6933 include 'DIMENSIONS.ZSCOPT'
6934 include 'COMMON.VAR'
6935 include 'COMMON.GEO'
6936 include 'COMMON.LOCAL'
6937 include 'COMMON.TORSION'
6938 include 'COMMON.INTERACT'
6939 include 'COMMON.DERIV'
6940 include 'COMMON.CHAIN'
6941 include 'COMMON.NAMES'
6942 include 'COMMON.IOUNITS'
6943 include 'COMMON.FFIELD'
6944 include 'COMMON.TORCNSTR'
6945 include 'COMMON.CONTROL'
6947 C print *,ithetaconstr_start,ithetaconstr_end,"TU"
6948 do i=ithetaconstr_start,ithetaconstr_end
6949 itheta=itheta_constr(i)
6950 thetiii=theta(itheta)
6951 difi=pinorm(thetiii-theta_constr0(i))
6952 if (difi.gt.theta_drange(i)) then
6953 difi=difi-theta_drange(i)
6954 ethetacnstr=ethetacnstr+0.25d0*for_thet_constr(i)*difi**4
6955 gloc(itheta+nphi-2,icg)=gloc(itheta+nphi-2,icg)
6956 & +for_thet_constr(i)*difi**3
6957 else if (difi.lt.-drange(i)) then
6959 ethetacnstr=ethetacnstr+0.25d0*for_thet_constr(i)*difi**4
6960 gloc(itheta+nphi-2,icg)=gloc(itheta+nphi-2,icg)
6961 & +for_thet_constr(i)*difi**3
6965 if (energy_dec) then
6966 write (iout,'(a6,2i5,4f8.3,2e14.5)') "ethetc",
6967 & i,itheta,rad2deg*thetiii,
6968 & rad2deg*theta_constr0(i), rad2deg*theta_drange(i),
6969 & rad2deg*difi,0.25d0*for_thet_constr(i)*difi**4,
6970 & gloc(itheta+nphi-2,icg)
6975 c------------------------------------------------------------------------------
6976 c------------------------------------------------------------------------------
6977 subroutine eback_sc_corr(esccor)
6978 c 7/21/2007 Correlations between the backbone-local and side-chain-local
6979 c conformational states; temporarily implemented as differences
6980 c between UNRES torsional potentials (dependent on three types of
6981 c residues) and the torsional potentials dependent on all 20 types
6982 c of residues computed from AM1 energy surfaces of terminally-blocked
6983 c amino-acid residues.
6984 implicit real*8 (a-h,o-z)
6985 include 'DIMENSIONS'
6986 include 'DIMENSIONS.ZSCOPT'
6987 include 'COMMON.VAR'
6988 include 'COMMON.GEO'
6989 include 'COMMON.LOCAL'
6990 include 'COMMON.TORSION'
6991 include 'COMMON.SCCOR'
6992 include 'COMMON.INTERACT'
6993 include 'COMMON.DERIV'
6994 include 'COMMON.CHAIN'
6995 include 'COMMON.NAMES'
6996 include 'COMMON.IOUNITS'
6997 include 'COMMON.FFIELD'
6998 include 'COMMON.CONTROL'
7000 C Set lprn=.true. for debugging
7003 c write (iout,*) "EBACK_SC_COR",iphi_start,iphi_end,nterm_sccor
7005 do i=itau_start,itau_end
7006 if ((itype(i-2).eq.ntyp1).or.(itype(i-1).eq.ntyp1)) cycle
7008 isccori=isccortyp(itype(i-2))
7009 isccori1=isccortyp(itype(i-1))
7011 do intertyp=1,3 !intertyp
7012 cc Added 09 May 2012 (Adasko)
7013 cc Intertyp means interaction type of backbone mainchain correlation:
7014 c 1 = SC...Ca...Ca...Ca
7015 c 2 = Ca...Ca...Ca...SC
7016 c 3 = SC...Ca...Ca...SCi
7018 if (((intertyp.eq.3).and.((itype(i-2).eq.10).or.
7019 & (itype(i-1).eq.10).or.(itype(i-2).eq.ntyp1).or.
7020 & (itype(i-1).eq.ntyp1)))
7021 & .or. ((intertyp.eq.1).and.((itype(i-2).eq.10)
7022 & .or.(itype(i-2).eq.ntyp1).or.(itype(i-1).eq.ntyp1)
7023 & .or.(itype(i).eq.ntyp1)))
7024 & .or.((intertyp.eq.2).and.((itype(i-1).eq.10).or.
7025 & (itype(i-1).eq.ntyp1).or.(itype(i-2).eq.ntyp1).or.
7026 & (itype(i-3).eq.ntyp1)))) cycle
7027 if ((intertyp.eq.2).and.(i.eq.4).and.(itype(1).eq.ntyp1)) cycle
7028 if ((intertyp.eq.1).and.(i.eq.nres).and.(itype(nres).eq.ntyp1))
7030 do j=1,nterm_sccor(isccori,isccori1)
7031 v1ij=v1sccor(j,intertyp,isccori,isccori1)
7032 v2ij=v2sccor(j,intertyp,isccori,isccori1)
7033 cosphi=dcos(j*tauangle(intertyp,i))
7034 sinphi=dsin(j*tauangle(intertyp,i))
7035 esccor=esccor+v1ij*cosphi+v2ij*sinphi
7036 gloci=gloci+j*(v2ij*cosphi-v1ij*sinphi)
7038 C write (iout,*)"EBACK_SC_COR",esccor,i
7039 c write (iout,*) "EBACK_SC_COR",i,v1ij*cosphi+v2ij*sinphi,intertyp,
7040 c & nterm_sccor(isccori,isccori1),isccori,isccori1
7041 c gloc_sc(intertyp,i-3,icg)=gloc_sc(intertyp,i-3,icg)+wsccor*gloci
7043 & write (iout,'(2(a3,2x,i3,2x),2i3,6f8.3/26x,6f8.3/)')
7044 & restyp(itype(i-2)),i-2,restyp(itype(i-1)),i-1,itori,itori1,
7045 & (v1sccor(j,1,itori,itori1),j=1,6)
7046 & ,(v2sccor(j,1,itori,itori1),j=1,6)
7047 c gsccor_loc(i-3)=gloci
7053 c------------------------------------------------------------------------------
7054 subroutine multibody(ecorr)
7055 C This subroutine calculates multi-body contributions to energy following
7056 C the idea of Skolnick et al. If side chains I and J make a contact and
7057 C at the same time side chains I+1 and J+1 make a contact, an extra
7058 C contribution equal to sqrt(eps(i,j)*eps(i+1,j+1)) is added.
7059 implicit real*8 (a-h,o-z)
7060 include 'DIMENSIONS'
7061 include 'COMMON.IOUNITS'
7062 include 'COMMON.DERIV'
7063 include 'COMMON.INTERACT'
7064 include 'COMMON.CONTACTS'
7065 include 'COMMON.CONTMAT'
7066 include 'COMMON.CORRMAT'
7067 double precision gx(3),gx1(3)
7070 C Set lprn=.true. for debugging
7074 write (iout,'(a)') 'Contact function values:'
7076 write (iout,'(i2,20(1x,i2,f10.5))')
7077 & i,(jcont(j,i),facont(j,i),j=1,num_cont(i))
7092 num_conti=num_cont(i)
7093 num_conti1=num_cont(i1)
7098 if (j1.eq.j+ishift .or. j1.eq.j-ishift) then
7099 cd write(iout,*)'i=',i,' j=',j,' i1=',i1,' j1=',j1,
7100 cd & ' ishift=',ishift
7101 C Contacts I--J and I+ISHIFT--J+-ISHIFT1 occur simultaneously.
7102 C The system gains extra energy.
7103 ecorr=ecorr+esccorr(i,j,i1,j1,jj,kk)
7104 endif ! j1==j+-ishift
7113 c------------------------------------------------------------------------------
7114 double precision function esccorr(i,j,k,l,jj,kk)
7115 implicit real*8 (a-h,o-z)
7116 include 'DIMENSIONS'
7117 include 'COMMON.IOUNITS'
7118 include 'COMMON.DERIV'
7119 include 'COMMON.INTERACT'
7120 include 'COMMON.CONTACTS'
7121 include 'COMMON.CONTMAT'
7122 include 'COMMON.CORRMAT'
7123 double precision gx(3),gx1(3)
7128 cd write (iout,'(4i5,3f10.5)') i,j,k,l,eij,ekl,-eij*ekl
7129 C Calculate the multi-body contribution to energy.
7130 C Calculate multi-body contributions to the gradient.
7131 cd write (iout,'(2(2i3,3f10.5))')i,j,(gacont(m,jj,i),m=1,3),
7132 cd & k,l,(gacont(m,kk,k),m=1,3)
7134 gx(m) =ekl*gacont(m,jj,i)
7135 gx1(m)=eij*gacont(m,kk,k)
7136 gradxorr(m,i)=gradxorr(m,i)-gx(m)
7137 gradxorr(m,j)=gradxorr(m,j)+gx(m)
7138 gradxorr(m,k)=gradxorr(m,k)-gx1(m)
7139 gradxorr(m,l)=gradxorr(m,l)+gx1(m)
7143 gradcorr(ll,m)=gradcorr(ll,m)+gx(ll)
7148 gradcorr(ll,m)=gradcorr(ll,m)+gx1(ll)
7154 c------------------------------------------------------------------------------
7155 subroutine multibody_hb(ecorr,ecorr5,ecorr6,n_corr,n_corr1)
7156 C This subroutine calculates multi-body contributions to hydrogen-bonding
7157 implicit real*8 (a-h,o-z)
7158 include 'DIMENSIONS'
7159 include 'DIMENSIONS.ZSCOPT'
7160 include 'COMMON.IOUNITS'
7161 include 'COMMON.FFIELD'
7162 include 'COMMON.DERIV'
7163 include 'COMMON.INTERACT'
7164 include 'COMMON.CONTACTS'
7165 include 'COMMON.CONTMAT'
7166 include 'COMMON.CORRMAT'
7167 double precision gx(3),gx1(3)
7170 C Set lprn=.true. for debugging
7173 write (iout,'(a)') 'Contact function values:'
7175 write (iout,'(2i3,50(1x,i2,f5.2))')
7176 & i,num_cont_hb(i),(jcont_hb(j,i),facont_hb(j,i),
7177 & j=1,num_cont_hb(i))
7181 C Remove the loop below after debugging !!!
7188 C Calculate the local-electrostatic correlation terms
7189 do i=iatel_s,iatel_e+1
7191 num_conti=num_cont_hb(i)
7192 num_conti1=num_cont_hb(i+1)
7197 c write (iout,*) 'i=',i,' j=',j,' i1=',i1,' j1=',j1,
7198 c & ' jj=',jj,' kk=',kk
7199 if (j1.eq.j+1 .or. j1.eq.j-1) then
7200 C Contacts I-J and (I+1)-(J+1) or (I+1)-(J-1) occur simultaneously.
7201 C The system gains extra energy.
7202 ecorr=ecorr+ehbcorr(i,j,i+1,j1,jj,kk,0.72D0,0.32D0)
7204 else if (j1.eq.j) then
7205 C Contacts I-J and I-(J+1) occur simultaneously.
7206 C The system loses extra energy.
7207 c ecorr=ecorr+ehbcorr(i,j,i+1,j,jj,kk,0.60D0,-0.40D0)
7212 c write (iout,*) 'i=',i,' j=',j,' i1=',i1,' j1=',j1,
7213 c & ' jj=',jj,' kk=',kk
7215 C Contacts I-J and (I+1)-J occur simultaneously.
7216 C The system loses extra energy.
7217 c ecorr=ecorr+ehbcorr(i,j,i,j+1,jj,kk,0.60D0,-0.40D0)
7224 c------------------------------------------------------------------------------
7225 subroutine multibody_eello(ecorr,ecorr5,ecorr6,eturn6,n_corr,
7227 C This subroutine calculates multi-body contributions to hydrogen-bonding
7228 implicit real*8 (a-h,o-z)
7229 include 'DIMENSIONS'
7230 include 'DIMENSIONS.ZSCOPT'
7231 include 'COMMON.IOUNITS'
7235 include 'COMMON.FFIELD'
7236 include 'COMMON.DERIV'
7237 include 'COMMON.LOCAL'
7238 include 'COMMON.INTERACT'
7239 include 'COMMON.CONTACTS'
7240 include 'COMMON.CONTMAT'
7241 include 'COMMON.CORRMAT'
7242 include 'COMMON.CHAIN'
7243 include 'COMMON.CONTROL'
7244 include 'COMMON.SHIELD'
7245 double precision gx(3),gx1(3)
7246 integer num_cont_hb_old(maxres)
7248 double precision eello4,eello5,eelo6,eello_turn6
7249 external eello4,eello5,eello6,eello_turn6
7250 C Set lprn=.true. for debugging
7254 write (iout,'(a)') 'Contact function values:'
7256 write (iout,'(2i3,50(1x,i2,5f6.3))')
7257 & i,num_cont_hb(i),(jcont_hb(j,i),d_cont(j,i),
7258 & ((a_chuj(ll,kk,j,i),ll=1,2),kk=1,2),j=1,num_cont_hb(i))
7264 C Remove the loop below after debugging !!!
7271 C Calculate the dipole-dipole interaction energies
7272 if (wcorr6.gt.0.0d0 .or. wturn6.gt.0.0d0) then
7273 do i=iatel_s,iatel_e+1
7274 num_conti=num_cont_hb(i)
7283 C Calculate the local-electrostatic correlation terms
7284 c write (iout,*) "gradcorr5 in eello5 before loop"
7286 c write (iout,'(i5,3f10.5)')
7287 c & iii,(gradcorr5(jjj,iii),jjj=1,3)
7289 do i=min0(iatel_s,iturn4_start),max0(iatel_e+1,iturn3_end+1)
7290 c write (iout,*) "corr loop i",i
7292 num_conti=num_cont_hb(i)
7293 num_conti1=num_cont_hb(i+1)
7300 c write (iout,*) 'i=',i,' j=',j,' i1=',i1,' j1=',j1,
7301 c & ' jj=',jj,' kk=',kk
7302 c if (j1.eq.j+1 .or. j1.eq.j-1) then
7303 if ((j.gt.0 .and. j1.gt.0 .or. j.gt.0 .and. j1.lt.0
7304 & .or. j.lt.0 .and. j1.gt.0) .and.
7305 & (jp1.eq.jp+1 .or. jp1.eq.jp-1)) then
7306 C Contacts I-J and (I+1)-(J+1) or (I+1)-(J-1) occur simultaneously.
7307 C The system gains extra energy.
7309 sqd1=dsqrt(d_cont(jj,i))
7310 sqd2=dsqrt(d_cont(kk,i1))
7311 sred_geom = sqd1*sqd2
7312 IF (sred_geom.lt.cutoff_corr) THEN
7313 call gcont(sred_geom,r0_corr,1.0D0,delt_corr,
7315 cd write (iout,*) 'i=',i,' j=',jp,' i1=',i1,' j1=',jp1,
7316 cd & ' jj=',jj,' kk=',kk
7317 fac_prim1=0.5d0*sqd2/sqd1*fprimcont
7318 fac_prim2=0.5d0*sqd1/sqd2*fprimcont
7320 g_contij(l,1)=fac_prim1*grij_hb_cont(l,jj,i)
7321 g_contij(l,2)=fac_prim2*grij_hb_cont(l,kk,i1)
7324 cd write (iout,*) 'sred_geom=',sred_geom,
7325 cd & ' ekont=',ekont,' fprim=',fprimcont,
7326 cd & ' fac_prim1',fac_prim1,' fac_prim2',fac_prim2
7327 cd write (iout,*) "g_contij",g_contij
7328 cd write (iout,*) "grij_hb_cont i",grij_hb_cont(:,jj,i)
7329 cd write (iout,*) "grij_hb_cont i1",grij_hb_cont(:,jj,i1)
7330 call calc_eello(i,jp,i+1,jp1,jj,kk)
7331 if (wcorr4.gt.0.0d0)
7332 & ecorr=ecorr+eello4(i,jp,i+1,jp1,jj,kk)
7333 CC & *fac_shield(i)**2*fac_shield(j)**2
7334 if (energy_dec.and.wcorr4.gt.0.0d0)
7335 1 write (iout,'(a6,4i5,0pf7.3)')
7336 2 'ecorr4',i,j,i+1,j1,eello4(i,jp,i+1,jp1,jj,kk)
7337 c write (iout,*) "gradcorr5 before eello5"
7339 c write (iout,'(i5,3f10.5)')
7340 c & iii,(gradcorr5(jjj,iii),jjj=1,3)
7342 if (wcorr5.gt.0.0d0)
7343 & ecorr5=ecorr5+eello5(i,jp,i+1,jp1,jj,kk)
7344 c write (iout,*) "gradcorr5 after eello5"
7346 c write (iout,'(i5,3f10.5)')
7347 c & iii,(gradcorr5(jjj,iii),jjj=1,3)
7349 if (energy_dec.and.wcorr5.gt.0.0d0)
7350 1 write (iout,'(a6,4i5,0pf7.3)')
7351 2 'ecorr5',i,j,i+1,j1,eello5(i,jp,i+1,jp1,jj,kk)
7352 cd write(2,*)'wcorr6',wcorr6,' wturn6',wturn6
7353 cd write(2,*)'ijkl',i,jp,i+1,jp1
7354 if (wcorr6.gt.0.0d0 .and. (jp.ne.i+4 .or. jp1.ne.i+3
7355 & .or. wturn6.eq.0.0d0))then
7356 cd write (iout,*) '******ecorr6: i,j,i+1,j1',i,j,i+1,j1
7357 ecorr6=ecorr6+eello6(i,jp,i+1,jp1,jj,kk)
7358 if (energy_dec) write (iout,'(a6,4i5,0pf7.3)')
7359 1 'ecorr6',i,j,i+1,j1,eello6(i,jp,i+1,jp1,jj,kk)
7360 cd write (iout,*) 'ecorr',ecorr,' ecorr5=',ecorr5,
7361 cd & 'ecorr6=',ecorr6
7362 cd write (iout,'(4e15.5)') sred_geom,
7363 cd & dabs(eello4(i,jp,i+1,jp1,jj,kk)),
7364 cd & dabs(eello5(i,jp,i+1,jp1,jj,kk)),
7365 cd & dabs(eello6(i,jp,i+1,jp1,jj,kk))
7366 else if (wturn6.gt.0.0d0
7367 & .and. (jp.eq.i+4 .and. jp1.eq.i+3)) then
7368 cd write (iout,*) '******eturn6: i,j,i+1,j1',i,jip,i+1,jp1
7369 eturn6=eturn6+eello_turn6(i,jj,kk)
7370 if (energy_dec) write (iout,'(a6,4i5,0pf7.3)')
7371 1 'eturn6',i,j,i+1,j1,eello_turn6(i,jj,kk)
7372 cd write (2,*) 'multibody_eello:eturn6',eturn6
7381 num_cont_hb(i)=num_cont_hb_old(i)
7383 c write (iout,*) "gradcorr5 in eello5"
7385 c write (iout,'(i5,3f10.5)')
7386 c & iii,(gradcorr5(jjj,iii),jjj=1,3)
7390 c------------------------------------------------------------------------------
7391 double precision function ehbcorr(i,j,k,l,jj,kk,coeffp,coeffm)
7392 implicit real*8 (a-h,o-z)
7393 include 'DIMENSIONS'
7394 include 'DIMENSIONS.ZSCOPT'
7395 include 'COMMON.IOUNITS'
7396 include 'COMMON.DERIV'
7397 include 'COMMON.INTERACT'
7398 include 'COMMON.CONTACTS'
7399 include 'COMMON.CONTMAT'
7400 include 'COMMON.CORRMAT'
7401 include 'COMMON.SHIELD'
7402 include 'COMMON.CONTROL'
7403 double precision gx(3),gx1(3)
7406 C print *,"wchodze",fac_shield(i),shield_mode
7414 ees=-(coeffp*ees0pij*ees0pkl+coeffm*ees0mij*ees0mkl)
7416 C & fac_shield(i)**2*fac_shield(j)**2
7417 cd ees=-(coeffp*ees0pkl+coeffm*ees0mkl)
7418 C Following 4 lines for diagnostics.
7423 c write (iout,'(2(a,2i3,a,f10.5,a,2f10.5),a,f10.5,a,$)')
7424 c & 'Contacts ',i,j,
7425 c & ' eij',eij,' eesij',ees0pij,ees0mij,' and ',k,l
7426 c & ,' fcont ',ekl,' eeskl',ees0pkl,ees0mkl,' energy=',ekont*ees,
7428 C Calculate the multi-body contribution to energy.
7429 C ecorr=ecorr+ekont*ees
7430 C Calculate multi-body contributions to the gradient.
7431 coeffpees0pij=coeffp*ees0pij
7432 coeffmees0mij=coeffm*ees0mij
7433 coeffpees0pkl=coeffp*ees0pkl
7434 coeffmees0mkl=coeffm*ees0mkl
7436 cgrad ghalfi=ees*ekl*gacont_hbr(ll,jj,i)
7437 gradcorr(ll,i)=gradcorr(ll,i)!+0.5d0*ghalfi
7438 & -ekont*(coeffpees0pkl*gacontp_hb1(ll,jj,i)+
7439 & coeffmees0mkl*gacontm_hb1(ll,jj,i))
7440 gradcorr(ll,j)=gradcorr(ll,j)!+0.5d0*ghalfi
7441 & -ekont*(coeffpees0pkl*gacontp_hb2(ll,jj,i)+
7442 & coeffmees0mkl*gacontm_hb2(ll,jj,i))
7443 cgrad ghalfk=ees*eij*gacont_hbr(ll,kk,k)
7444 gradcorr(ll,k)=gradcorr(ll,k)!+0.5d0*ghalfk
7445 & -ekont*(coeffpees0pij*gacontp_hb1(ll,kk,k)+
7446 & coeffmees0mij*gacontm_hb1(ll,kk,k))
7447 gradcorr(ll,l)=gradcorr(ll,l)!+0.5d0*ghalfk
7448 & -ekont*(coeffpees0pij*gacontp_hb2(ll,kk,k)+
7449 & coeffmees0mij*gacontm_hb2(ll,kk,k))
7450 gradlongij=ees*ekl*gacont_hbr(ll,jj,i)-
7451 & ekont*(coeffpees0pkl*gacontp_hb3(ll,jj,i)+
7452 & coeffmees0mkl*gacontm_hb3(ll,jj,i))
7453 gradcorr_long(ll,j)=gradcorr_long(ll,j)+gradlongij
7454 gradcorr_long(ll,i)=gradcorr_long(ll,i)-gradlongij
7455 gradlongkl=ees*eij*gacont_hbr(ll,kk,k)-
7456 & ekont*(coeffpees0pij*gacontp_hb3(ll,kk,k)+
7457 & coeffmees0mij*gacontm_hb3(ll,kk,k))
7458 gradcorr_long(ll,l)=gradcorr_long(ll,l)+gradlongkl
7459 gradcorr_long(ll,k)=gradcorr_long(ll,k)-gradlongkl
7460 c write (iout,'(2f10.5,2x,$)') gradlongij,gradlongkl
7465 cgrad gradcorr(ll,m)=gradcorr(ll,m)+
7466 cgrad & ees*ekl*gacont_hbr(ll,jj,i)-
7467 cgrad & ekont*(coeffp*ees0pkl*gacontp_hb3(ll,jj,i)+
7468 cgrad & coeffm*ees0mkl*gacontm_hb3(ll,jj,i))
7473 cgrad gradcorr(ll,m)=gradcorr(ll,m)+
7474 cgrad & ees*eij*gacont_hbr(ll,kk,k)-
7475 cgrad & ekont*(coeffp*ees0pij*gacontp_hb3(ll,kk,k)+
7476 cgrad & coeffm*ees0mij*gacontm_hb3(ll,kk,k))
7479 c write (iout,*) "ehbcorr",ekont*ees
7480 C print *,ekont,ees,i,k
7482 C now gradient over shielding
7484 if (shield_mode.gt.0) then
7487 C print *,i,j,fac_shield(i),fac_shield(j),
7488 C &fac_shield(k),fac_shield(l)
7489 if ((fac_shield(i).gt.0).and.(fac_shield(j).gt.0).and.
7490 & (fac_shield(k).gt.0).and.(fac_shield(l).gt.0)) then
7491 do ilist=1,ishield_list(i)
7492 iresshield=shield_list(ilist,i)
7494 rlocshield=grad_shield_side(m,ilist,i)*ehbcorr/fac_shield(i)
7496 gshieldx_ec(m,iresshield)=gshieldx_ec(m,iresshield)+
7498 & +grad_shield_loc(m,ilist,i)*ehbcorr/fac_shield(i)
7499 gshieldc_ec(m,iresshield-1)=gshieldc_ec(m,iresshield-1)
7503 do ilist=1,ishield_list(j)
7504 iresshield=shield_list(ilist,j)
7506 rlocshield=grad_shield_side(m,ilist,j)*ehbcorr/fac_shield(j)
7508 gshieldx_ec(m,iresshield)=gshieldx_ec(m,iresshield)+
7510 & +grad_shield_loc(m,ilist,j)*ehbcorr/fac_shield(j)
7511 gshieldc_ec(m,iresshield-1)=gshieldc_ec(m,iresshield-1)
7516 do ilist=1,ishield_list(k)
7517 iresshield=shield_list(ilist,k)
7519 rlocshield=grad_shield_side(m,ilist,k)*ehbcorr/fac_shield(k)
7521 gshieldx_ec(m,iresshield)=gshieldx_ec(m,iresshield)+
7523 & +grad_shield_loc(m,ilist,k)*ehbcorr/fac_shield(k)
7524 gshieldc_ec(m,iresshield-1)=gshieldc_ec(m,iresshield-1)
7528 do ilist=1,ishield_list(l)
7529 iresshield=shield_list(ilist,l)
7531 rlocshield=grad_shield_side(m,ilist,l)*ehbcorr/fac_shield(l)
7533 gshieldx_ec(m,iresshield)=gshieldx_ec(m,iresshield)+
7535 & +grad_shield_loc(m,ilist,l)*ehbcorr/fac_shield(l)
7536 gshieldc_ec(m,iresshield-1)=gshieldc_ec(m,iresshield-1)
7540 C print *,gshieldx(m,iresshield)
7542 gshieldc_ec(m,i)=gshieldc_ec(m,i)+
7543 & grad_shield(m,i)*ehbcorr/fac_shield(i)
7544 gshieldc_ec(m,j)=gshieldc_ec(m,j)+
7545 & grad_shield(m,j)*ehbcorr/fac_shield(j)
7546 gshieldc_ec(m,i-1)=gshieldc_ec(m,i-1)+
7547 & grad_shield(m,i)*ehbcorr/fac_shield(i)
7548 gshieldc_ec(m,j-1)=gshieldc_ec(m,j-1)+
7549 & grad_shield(m,j)*ehbcorr/fac_shield(j)
7551 gshieldc_ec(m,k)=gshieldc_ec(m,k)+
7552 & grad_shield(m,k)*ehbcorr/fac_shield(k)
7553 gshieldc_ec(m,l)=gshieldc_ec(m,l)+
7554 & grad_shield(m,l)*ehbcorr/fac_shield(l)
7555 gshieldc_ec(m,k-1)=gshieldc_ec(m,k-1)+
7556 & grad_shield(m,k)*ehbcorr/fac_shield(k)
7557 gshieldc_ec(m,l-1)=gshieldc_ec(m,l-1)+
7558 & grad_shield(m,l)*ehbcorr/fac_shield(l)
7566 C---------------------------------------------------------------------------
7567 subroutine dipole(i,j,jj)
7568 implicit real*8 (a-h,o-z)
7569 include 'DIMENSIONS'
7570 include 'DIMENSIONS.ZSCOPT'
7571 include 'COMMON.IOUNITS'
7572 include 'COMMON.CHAIN'
7573 include 'COMMON.FFIELD'
7574 include 'COMMON.DERIV'
7575 include 'COMMON.INTERACT'
7576 include 'COMMON.CONTACTS'
7577 include 'COMMON.CONTMAT'
7578 include 'COMMON.CORRMAT'
7579 include 'COMMON.TORSION'
7580 include 'COMMON.VAR'
7581 include 'COMMON.GEO'
7582 dimension dipi(2,2),dipj(2,2),dipderi(2),dipderj(2),auxvec(2),
7584 iti1 = itortyp(itype(i+1))
7585 if (j.lt.nres-1) then
7586 itj1 = itype2loc(itype(j+1))
7591 dipi(iii,1)=Ub2(iii,i)
7592 dipderi(iii)=Ub2der(iii,i)
7593 dipi(iii,2)=b1(iii,i+1)
7594 dipj(iii,1)=Ub2(iii,j)
7595 dipderj(iii)=Ub2der(iii,j)
7596 dipj(iii,2)=b1(iii,j+1)
7600 call matvec2(a_chuj(1,1,jj,i),dipj(1,iii),auxvec(1))
7603 dip(kkk,jj,i)=scalar2(dipi(1,jjj),auxvec(1))
7610 call matvec2(a_chuj_der(1,1,lll,kkk,jj,i),dipj(1,iii),
7614 dipderx(lll,kkk,mmm,jj,i)=scalar2(dipi(1,jjj),auxvec(1))
7619 call transpose2(a_chuj(1,1,jj,i),auxmat(1,1))
7620 call matvec2(auxmat(1,1),dipderi(1),auxvec(1))
7622 dipderg(iii,jj,i)=scalar2(auxvec(1),dipj(1,iii))
7624 call matvec2(a_chuj(1,1,jj,i),dipderj(1),auxvec(1))
7626 dipderg(iii+2,jj,i)=scalar2(auxvec(1),dipi(1,iii))
7631 C---------------------------------------------------------------------------
7632 subroutine calc_eello(i,j,k,l,jj,kk)
7634 C This subroutine computes matrices and vectors needed to calculate
7635 C the fourth-, fifth-, and sixth-order local-electrostatic terms.
7637 implicit real*8 (a-h,o-z)
7638 include 'DIMENSIONS'
7639 include 'DIMENSIONS.ZSCOPT'
7640 include 'COMMON.IOUNITS'
7641 include 'COMMON.CHAIN'
7642 include 'COMMON.DERIV'
7643 include 'COMMON.INTERACT'
7644 include 'COMMON.CONTACTS'
7645 include 'COMMON.CONTMAT'
7646 include 'COMMON.CORRMAT'
7647 include 'COMMON.TORSION'
7648 include 'COMMON.VAR'
7649 include 'COMMON.GEO'
7650 include 'COMMON.FFIELD'
7651 double precision aa1(2,2),aa2(2,2),aa1t(2,2),aa2t(2,2),
7652 & aa1tder(2,2,3,5),aa2tder(2,2,3,5),auxmat(2,2)
7655 cd write (iout,*) 'calc_eello: i=',i,' j=',j,' k=',k,' l=',l,
7656 cd & ' jj=',jj,' kk=',kk
7657 cd if (i.ne.2 .or. j.ne.4 .or. k.ne.3 .or. l.ne.5) return
7658 cd write (iout,*) "a_chujij",((a_chuj(iii,jjj,jj,i),iii=1,2),jjj=1,2)
7659 cd write (iout,*) "a_chujkl",((a_chuj(iii,jjj,kk,k),iii=1,2),jjj=1,2)
7662 aa1(iii,jjj)=a_chuj(iii,jjj,jj,i)
7663 aa2(iii,jjj)=a_chuj(iii,jjj,kk,k)
7666 call transpose2(aa1(1,1),aa1t(1,1))
7667 call transpose2(aa2(1,1),aa2t(1,1))
7670 call transpose2(a_chuj_der(1,1,lll,kkk,jj,i),
7671 & aa1tder(1,1,lll,kkk))
7672 call transpose2(a_chuj_der(1,1,lll,kkk,kk,k),
7673 & aa2tder(1,1,lll,kkk))
7677 C parallel orientation of the two CA-CA-CA frames.
7679 iti=itype2loc(itype(i))
7683 itk1=itype2loc(itype(k+1))
7684 itj=itype2loc(itype(j))
7685 if (l.lt.nres-1) then
7686 itl1=itype2loc(itype(l+1))
7690 C A1 kernel(j+1) A2T
7692 cd write (iout,'(3f10.5,5x,3f10.5)')
7693 cd & (EUg(iii,jjj,k),jjj=1,2),(EUg(iii,jjj,l),jjj=1,2)
7695 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
7696 & aa2tder(1,1,1,1),1,.false.,EUg(1,1,l),EUgder(1,1,l),
7697 & AEA(1,1,1),AEAderg(1,1,1),AEAderx(1,1,1,1,1,1))
7698 C Following matrices are needed only for 6-th order cumulants
7699 IF (wcorr6.gt.0.0d0) THEN
7700 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
7701 & aa2tder(1,1,1,1),1,.false.,EUgC(1,1,l),EUgCder(1,1,l),
7702 & AECA(1,1,1),AECAderg(1,1,1),AECAderx(1,1,1,1,1,1))
7703 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
7704 & aa2tder(1,1,1,1),2,.false.,Ug2DtEUg(1,1,l),
7705 & Ug2DtEUgder(1,1,1,l),ADtEA(1,1,1),ADtEAderg(1,1,1,1),
7706 & ADtEAderx(1,1,1,1,1,1))
7708 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
7709 & aa2tder(1,1,1,1),2,.false.,DtUg2EUg(1,1,l),
7710 & DtUg2EUgder(1,1,1,l),ADtEA1(1,1,1),ADtEA1derg(1,1,1,1),
7711 & ADtEA1derx(1,1,1,1,1,1))
7713 C End 6-th order cumulants
7716 cd write (2,*) 'In calc_eello6'
7718 cd write (2,*) 'iii=',iii
7720 cd write (2,*) 'kkk=',kkk
7722 cd write (2,'(3(2f10.5),5x)')
7723 cd & ((ADtEA1derx(jjj,mmm,lll,kkk,iii,1),mmm=1,2),lll=1,3)
7728 call transpose2(EUgder(1,1,k),auxmat(1,1))
7729 call matmat2(auxmat(1,1),AEA(1,1,1),EAEAderg(1,1,1,1))
7730 call transpose2(EUg(1,1,k),auxmat(1,1))
7731 call matmat2(auxmat(1,1),AEA(1,1,1),EAEA(1,1,1))
7732 call matmat2(auxmat(1,1),AEAderg(1,1,1),EAEAderg(1,1,2,1))
7736 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,1),
7737 & EAEAderx(1,1,lll,kkk,iii,1))
7741 C A1T kernel(i+1) A2
7742 call kernel(aa1t(1,1),aa2(1,1),aa1tder(1,1,1,1),
7743 & a_chuj_der(1,1,1,1,kk,k),1,.false.,EUg(1,1,k),EUgder(1,1,k),
7744 & AEA(1,1,2),AEAderg(1,1,2),AEAderx(1,1,1,1,1,2))
7745 C Following matrices are needed only for 6-th order cumulants
7746 IF (wcorr6.gt.0.0d0) THEN
7747 call kernel(aa1t(1,1),aa2(1,1),aa1tder(1,1,1,1),
7748 & a_chuj_der(1,1,1,1,kk,k),1,.false.,EUgC(1,1,k),EUgCder(1,1,k),
7749 & AECA(1,1,2),AECAderg(1,1,2),AECAderx(1,1,1,1,1,2))
7750 call kernel(aa1t(1,1),aa2(1,1),aa1tder(1,1,1,1),
7751 & a_chuj_der(1,1,1,1,kk,k),2,.false.,Ug2DtEUg(1,1,k),
7752 & Ug2DtEUgder(1,1,1,k),ADtEA(1,1,2),ADtEAderg(1,1,1,2),
7753 & ADtEAderx(1,1,1,1,1,2))
7754 call kernel(aa1t(1,1),aa2(1,1),aa1tder(1,1,1,1),
7755 & a_chuj_der(1,1,1,1,kk,k),2,.false.,DtUg2EUg(1,1,k),
7756 & DtUg2EUgder(1,1,1,k),ADtEA1(1,1,2),ADtEA1derg(1,1,1,2),
7757 & ADtEA1derx(1,1,1,1,1,2))
7759 C End 6-th order cumulants
7760 call transpose2(EUgder(1,1,l),auxmat(1,1))
7761 call matmat2(auxmat(1,1),AEA(1,1,2),EAEAderg(1,1,1,2))
7762 call transpose2(EUg(1,1,l),auxmat(1,1))
7763 call matmat2(auxmat(1,1),AEA(1,1,2),EAEA(1,1,2))
7764 call matmat2(auxmat(1,1),AEAderg(1,1,2),EAEAderg(1,1,2,2))
7768 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,2),
7769 & EAEAderx(1,1,lll,kkk,iii,2))
7774 C Calculate the vectors and their derivatives in virtual-bond dihedral angles.
7775 C They are needed only when the fifth- or the sixth-order cumulants are
7777 IF (wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0) THEN
7778 call transpose2(AEA(1,1,1),auxmat(1,1))
7779 call matvec2(auxmat(1,1),b1(1,i),AEAb1(1,1,1))
7780 call matvec2(auxmat(1,1),Ub2(1,i),AEAb2(1,1,1))
7781 call matvec2(auxmat(1,1),Ub2der(1,i),AEAb2derg(1,2,1,1))
7782 call transpose2(AEAderg(1,1,1),auxmat(1,1))
7783 call matvec2(auxmat(1,1),b1(1,i),AEAb1derg(1,1,1))
7784 call matvec2(auxmat(1,1),Ub2(1,i),AEAb2derg(1,1,1,1))
7785 call matvec2(AEA(1,1,1),b1(1,k+1),AEAb1(1,2,1))
7786 call matvec2(AEAderg(1,1,1),b1(1,k+1),AEAb1derg(1,2,1))
7787 call matvec2(AEA(1,1,1),Ub2(1,k+1),AEAb2(1,2,1))
7788 call matvec2(AEAderg(1,1,1),Ub2(1,k+1),AEAb2derg(1,1,2,1))
7789 call matvec2(AEA(1,1,1),Ub2der(1,k+1),AEAb2derg(1,2,2,1))
7790 call transpose2(AEA(1,1,2),auxmat(1,1))
7791 call matvec2(auxmat(1,1),b1(1,j),AEAb1(1,1,2))
7792 call matvec2(auxmat(1,1),Ub2(1,j),AEAb2(1,1,2))
7793 call matvec2(auxmat(1,1),Ub2der(1,j),AEAb2derg(1,2,1,2))
7794 call transpose2(AEAderg(1,1,2),auxmat(1,1))
7795 call matvec2(auxmat(1,1),b1(1,j),AEAb1derg(1,1,2))
7796 call matvec2(auxmat(1,1),Ub2(1,j),AEAb2derg(1,1,1,2))
7797 call matvec2(AEA(1,1,2),b1(1,l+1),AEAb1(1,2,2))
7798 call matvec2(AEAderg(1,1,2),b1(1,l+1),AEAb1derg(1,2,2))
7799 call matvec2(AEA(1,1,2),Ub2(1,l+1),AEAb2(1,2,2))
7800 call matvec2(AEAderg(1,1,2),Ub2(1,l+1),AEAb2derg(1,1,2,2))
7801 call matvec2(AEA(1,1,2),Ub2der(1,l+1),AEAb2derg(1,2,2,2))
7802 C Calculate the Cartesian derivatives of the vectors.
7806 call transpose2(AEAderx(1,1,lll,kkk,iii,1),auxmat(1,1))
7807 call matvec2(auxmat(1,1),b1(1,i),
7808 & AEAb1derx(1,lll,kkk,iii,1,1))
7809 call matvec2(auxmat(1,1),Ub2(1,i),
7810 & AEAb2derx(1,lll,kkk,iii,1,1))
7811 call matvec2(AEAderx(1,1,lll,kkk,iii,1),b1(1,k+1),
7812 & AEAb1derx(1,lll,kkk,iii,2,1))
7813 call matvec2(AEAderx(1,1,lll,kkk,iii,1),Ub2(1,k+1),
7814 & AEAb2derx(1,lll,kkk,iii,2,1))
7815 call transpose2(AEAderx(1,1,lll,kkk,iii,2),auxmat(1,1))
7816 call matvec2(auxmat(1,1),b1(1,j),
7817 & AEAb1derx(1,lll,kkk,iii,1,2))
7818 call matvec2(auxmat(1,1),Ub2(1,j),
7819 & AEAb2derx(1,lll,kkk,iii,1,2))
7820 call matvec2(AEAderx(1,1,lll,kkk,iii,2),b1(1,l+1),
7821 & AEAb1derx(1,lll,kkk,iii,2,2))
7822 call matvec2(AEAderx(1,1,lll,kkk,iii,2),Ub2(1,l+1),
7823 & AEAb2derx(1,lll,kkk,iii,2,2))
7830 C Antiparallel orientation of the two CA-CA-CA frames.
7832 iti=itype2loc(itype(i))
7836 itk1=itype2loc(itype(k+1))
7837 itl=itype2loc(itype(l))
7838 itj=itype2loc(itype(j))
7839 if (j.lt.nres-1) then
7840 itj1=itype2loc(itype(j+1))
7844 C A2 kernel(j-1)T A1T
7845 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
7846 & aa2tder(1,1,1,1),1,.true.,EUg(1,1,j),EUgder(1,1,j),
7847 & AEA(1,1,1),AEAderg(1,1,1),AEAderx(1,1,1,1,1,1))
7848 C Following matrices are needed only for 6-th order cumulants
7849 IF (wcorr6.gt.0.0d0 .or. (wturn6.gt.0.0d0 .and.
7850 & j.eq.i+4 .and. l.eq.i+3)) THEN
7851 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
7852 & aa2tder(1,1,1,1),1,.true.,EUgC(1,1,j),EUgCder(1,1,j),
7853 & AECA(1,1,1),AECAderg(1,1,1),AECAderx(1,1,1,1,1,1))
7854 call kernel(aa2(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
7855 & aa2tder(1,1,1,1),2,.true.,Ug2DtEUg(1,1,j),
7856 & Ug2DtEUgder(1,1,1,j),ADtEA(1,1,1),ADtEAderg(1,1,1,1),
7857 & ADtEAderx(1,1,1,1,1,1))
7858 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
7859 & aa2tder(1,1,1,1),2,.true.,DtUg2EUg(1,1,j),
7860 & DtUg2EUgder(1,1,1,j),ADtEA1(1,1,1),ADtEA1derg(1,1,1,1),
7861 & ADtEA1derx(1,1,1,1,1,1))
7863 C End 6-th order cumulants
7864 call transpose2(EUgder(1,1,k),auxmat(1,1))
7865 call matmat2(auxmat(1,1),AEA(1,1,1),EAEAderg(1,1,1,1))
7866 call transpose2(EUg(1,1,k),auxmat(1,1))
7867 call matmat2(auxmat(1,1),AEA(1,1,1),EAEA(1,1,1))
7868 call matmat2(auxmat(1,1),AEAderg(1,1,1),EAEAderg(1,1,2,1))
7872 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,1),
7873 & EAEAderx(1,1,lll,kkk,iii,1))
7877 C A2T kernel(i+1)T A1
7878 call kernel(aa2t(1,1),aa1(1,1),aa2tder(1,1,1,1),
7879 & a_chuj_der(1,1,1,1,jj,i),1,.true.,EUg(1,1,k),EUgder(1,1,k),
7880 & AEA(1,1,2),AEAderg(1,1,2),AEAderx(1,1,1,1,1,2))
7881 C Following matrices are needed only for 6-th order cumulants
7882 IF (wcorr6.gt.0.0d0 .or. (wturn6.gt.0.0d0 .and.
7883 & j.eq.i+4 .and. l.eq.i+3)) THEN
7884 call kernel(aa2t(1,1),aa1(1,1),aa2tder(1,1,1,1),
7885 & a_chuj_der(1,1,1,1,jj,i),1,.true.,EUgC(1,1,k),EUgCder(1,1,k),
7886 & AECA(1,1,2),AECAderg(1,1,2),AECAderx(1,1,1,1,1,2))
7887 call kernel(aa2t(1,1),aa1(1,1),aa2tder(1,1,1,1),
7888 & a_chuj_der(1,1,1,1,jj,i),2,.true.,Ug2DtEUg(1,1,k),
7889 & Ug2DtEUgder(1,1,1,k),ADtEA(1,1,2),ADtEAderg(1,1,1,2),
7890 & ADtEAderx(1,1,1,1,1,2))
7891 call kernel(aa2t(1,1),aa1(1,1),aa2tder(1,1,1,1),
7892 & a_chuj_der(1,1,1,1,jj,i),2,.true.,DtUg2EUg(1,1,k),
7893 & DtUg2EUgder(1,1,1,k),ADtEA1(1,1,2),ADtEA1derg(1,1,1,2),
7894 & ADtEA1derx(1,1,1,1,1,2))
7896 C End 6-th order cumulants
7897 call transpose2(EUgder(1,1,j),auxmat(1,1))
7898 call matmat2(auxmat(1,1),AEA(1,1,1),EAEAderg(1,1,2,2))
7899 call transpose2(EUg(1,1,j),auxmat(1,1))
7900 call matmat2(auxmat(1,1),AEA(1,1,2),EAEA(1,1,2))
7901 call matmat2(auxmat(1,1),AEAderg(1,1,2),EAEAderg(1,1,2,2))
7905 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,2),
7906 & EAEAderx(1,1,lll,kkk,iii,2))
7911 C Calculate the vectors and their derivatives in virtual-bond dihedral angles.
7912 C They are needed only when the fifth- or the sixth-order cumulants are
7914 IF (wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0 .or.
7915 & (wturn6.gt.0.0d0 .and. j.eq.i+4 .and. l.eq.i+3)) THEN
7916 call transpose2(AEA(1,1,1),auxmat(1,1))
7917 call matvec2(auxmat(1,1),b1(1,i),AEAb1(1,1,1))
7918 call matvec2(auxmat(1,1),Ub2(1,i),AEAb2(1,1,1))
7919 call matvec2(auxmat(1,1),Ub2der(1,i),AEAb2derg(1,2,1,1))
7920 call transpose2(AEAderg(1,1,1),auxmat(1,1))
7921 call matvec2(auxmat(1,1),b1(1,i),AEAb1derg(1,1,1))
7922 call matvec2(auxmat(1,1),Ub2(1,i),AEAb2derg(1,1,1,1))
7923 call matvec2(AEA(1,1,1),b1(1,k+1),AEAb1(1,2,1))
7924 call matvec2(AEAderg(1,1,1),b1(1,k+1),AEAb1derg(1,2,1))
7925 call matvec2(AEA(1,1,1),Ub2(1,k+1),AEAb2(1,2,1))
7926 call matvec2(AEAderg(1,1,1),Ub2(1,k+1),AEAb2derg(1,1,2,1))
7927 call matvec2(AEA(1,1,1),Ub2der(1,k+1),AEAb2derg(1,2,2,1))
7928 call transpose2(AEA(1,1,2),auxmat(1,1))
7929 call matvec2(auxmat(1,1),b1(1,j+1),AEAb1(1,1,2))
7930 call matvec2(auxmat(1,1),Ub2(1,l),AEAb2(1,1,2))
7931 call matvec2(auxmat(1,1),Ub2der(1,l),AEAb2derg(1,2,1,2))
7932 call transpose2(AEAderg(1,1,2),auxmat(1,1))
7933 call matvec2(auxmat(1,1),b1(1,l),AEAb1(1,1,2))
7934 call matvec2(auxmat(1,1),Ub2(1,l),AEAb2derg(1,1,1,2))
7935 call matvec2(AEA(1,1,2),b1(1,j+1),AEAb1(1,2,2))
7936 call matvec2(AEAderg(1,1,2),b1(1,j+1),AEAb1derg(1,2,2))
7937 call matvec2(AEA(1,1,2),Ub2(1,j),AEAb2(1,2,2))
7938 call matvec2(AEAderg(1,1,2),Ub2(1,j),AEAb2derg(1,1,2,2))
7939 call matvec2(AEA(1,1,2),Ub2der(1,j),AEAb2derg(1,2,2,2))
7940 C Calculate the Cartesian derivatives of the vectors.
7944 call transpose2(AEAderx(1,1,lll,kkk,iii,1),auxmat(1,1))
7945 call matvec2(auxmat(1,1),b1(1,i),
7946 & AEAb1derx(1,lll,kkk,iii,1,1))
7947 call matvec2(auxmat(1,1),Ub2(1,i),
7948 & AEAb2derx(1,lll,kkk,iii,1,1))
7949 call matvec2(AEAderx(1,1,lll,kkk,iii,1),b1(1,k+1),
7950 & AEAb1derx(1,lll,kkk,iii,2,1))
7951 call matvec2(AEAderx(1,1,lll,kkk,iii,1),Ub2(1,k+1),
7952 & AEAb2derx(1,lll,kkk,iii,2,1))
7953 call transpose2(AEAderx(1,1,lll,kkk,iii,2),auxmat(1,1))
7954 call matvec2(auxmat(1,1),b1(1,l),
7955 & AEAb1derx(1,lll,kkk,iii,1,2))
7956 call matvec2(auxmat(1,1),Ub2(1,l),
7957 & AEAb2derx(1,lll,kkk,iii,1,2))
7958 call matvec2(AEAderx(1,1,lll,kkk,iii,2),b1(1,j+1),
7959 & AEAb1derx(1,lll,kkk,iii,2,2))
7960 call matvec2(AEAderx(1,1,lll,kkk,iii,2),Ub2(1,j),
7961 & AEAb2derx(1,lll,kkk,iii,2,2))
7970 C---------------------------------------------------------------------------
7971 subroutine kernel(aa1,aa2t,aa1derx,aa2tderx,nderg,transp,
7972 & KK,KKderg,AKA,AKAderg,AKAderx)
7976 double precision aa1(2,2),aa2t(2,2),aa1derx(2,2,3,5),
7977 & aa2tderx(2,2,3,5),KK(2,2),KKderg(2,2,nderg),AKA(2,2),
7978 & AKAderg(2,2,nderg),AKAderx(2,2,3,5,2)
7983 call prodmat3(aa1(1,1),aa2t(1,1),KK(1,1),transp,AKA(1,1))
7985 call prodmat3(aa1(1,1),aa2t(1,1),KKderg(1,1,iii),transp,
7988 cd if (lprn) write (2,*) 'In kernel'
7990 cd if (lprn) write (2,*) 'kkk=',kkk
7992 call prodmat3(aa1derx(1,1,lll,kkk),aa2t(1,1),
7993 & KK(1,1),transp,AKAderx(1,1,lll,kkk,1))
7995 cd write (2,*) 'lll=',lll
7996 cd write (2,*) 'iii=1'
7998 cd write (2,'(3(2f10.5),5x)')
7999 cd & (AKAderx(jjj,mmm,lll,kkk,1),mmm=1,2)
8002 call prodmat3(aa1(1,1),aa2tderx(1,1,lll,kkk),
8003 & KK(1,1),transp,AKAderx(1,1,lll,kkk,2))
8005 cd write (2,*) 'lll=',lll
8006 cd write (2,*) 'iii=2'
8008 cd write (2,'(3(2f10.5),5x)')
8009 cd & (AKAderx(jjj,mmm,lll,kkk,2),mmm=1,2)
8016 C---------------------------------------------------------------------------
8017 double precision function eello4(i,j,k,l,jj,kk)
8018 implicit real*8 (a-h,o-z)
8019 include 'DIMENSIONS'
8020 include 'DIMENSIONS.ZSCOPT'
8021 include 'COMMON.IOUNITS'
8022 include 'COMMON.CHAIN'
8023 include 'COMMON.DERIV'
8024 include 'COMMON.INTERACT'
8025 include 'COMMON.CONTACTS'
8026 include 'COMMON.CONTMAT'
8027 include 'COMMON.CORRMAT'
8028 include 'COMMON.TORSION'
8029 include 'COMMON.VAR'
8030 include 'COMMON.GEO'
8031 double precision pizda(2,2),ggg1(3),ggg2(3)
8032 cd if (i.ne.1 .or. j.ne.5 .or. k.ne.2 .or.l.ne.4) then
8036 cd print *,'eello4:',i,j,k,l,jj,kk
8037 cd write (2,*) 'i',i,' j',j,' k',k,' l',l
8038 cd call checkint4(i,j,k,l,jj,kk,eel4_num)
8039 cold eij=facont_hb(jj,i)
8040 cold ekl=facont_hb(kk,k)
8042 eel4=-EAEA(1,1,1)-EAEA(2,2,1)
8044 cd eel41=-EAEA(1,1,2)-EAEA(2,2,2)
8045 gcorr_loc(k-1)=gcorr_loc(k-1)
8046 & -ekont*(EAEAderg(1,1,1,1)+EAEAderg(2,2,1,1))
8048 gcorr_loc(l-1)=gcorr_loc(l-1)
8049 & -ekont*(EAEAderg(1,1,2,1)+EAEAderg(2,2,2,1))
8051 gcorr_loc(j-1)=gcorr_loc(j-1)
8052 & -ekont*(EAEAderg(1,1,2,1)+EAEAderg(2,2,2,1))
8057 derx(lll,kkk,iii)=-EAEAderx(1,1,lll,kkk,iii,1)
8058 & -EAEAderx(2,2,lll,kkk,iii,1)
8059 cd derx(lll,kkk,iii)=0.0d0
8063 cd gcorr_loc(l-1)=0.0d0
8064 cd gcorr_loc(j-1)=0.0d0
8065 cd gcorr_loc(k-1)=0.0d0
8067 cd write (iout,*)'Contacts have occurred for peptide groups',
8068 cd & i,j,' fcont:',eij,' eij',' and ',k,l,
8069 cd & ' fcont ',ekl,' eel4=',eel4,' eel4_num',16*eel4_num
8070 if (j.lt.nres-1) then
8077 if (l.lt.nres-1) then
8085 cgrad ggg1(ll)=eel4*g_contij(ll,1)
8086 cgrad ggg2(ll)=eel4*g_contij(ll,2)
8087 glongij=eel4*g_contij(ll,1)+ekont*derx(ll,1,1)
8088 glongkl=eel4*g_contij(ll,2)+ekont*derx(ll,1,2)
8089 cgrad ghalf=0.5d0*ggg1(ll)
8090 gradcorr(ll,i)=gradcorr(ll,i)+ekont*derx(ll,2,1)
8091 gradcorr(ll,i+1)=gradcorr(ll,i+1)+ekont*derx(ll,3,1)
8092 gradcorr(ll,j)=gradcorr(ll,j)+ekont*derx(ll,4,1)
8093 gradcorr(ll,j1)=gradcorr(ll,j1)+ekont*derx(ll,5,1)
8094 gradcorr_long(ll,j)=gradcorr_long(ll,j)+glongij
8095 gradcorr_long(ll,i)=gradcorr_long(ll,i)-glongij
8096 cgrad ghalf=0.5d0*ggg2(ll)
8097 gradcorr(ll,k)=gradcorr(ll,k)+ekont*derx(ll,2,2)
8098 gradcorr(ll,k+1)=gradcorr(ll,k+1)+ekont*derx(ll,3,2)
8099 gradcorr(ll,l)=gradcorr(ll,l)+ekont*derx(ll,4,2)
8100 gradcorr(ll,l1)=gradcorr(ll,l1)+ekont*derx(ll,5,2)
8101 gradcorr_long(ll,l)=gradcorr_long(ll,l)+glongkl
8102 gradcorr_long(ll,k)=gradcorr_long(ll,k)-glongkl
8106 cgrad gradcorr(ll,m)=gradcorr(ll,m)+ggg1(ll)
8111 cgrad gradcorr(ll,m)=gradcorr(ll,m)+ggg2(ll)
8116 cgrad gradcorr(ll,m)=gradcorr(ll,m)+ekont*derx(ll,1,1)
8121 cgrad gradcorr(ll,m)=gradcorr(ll,m)+ekont*derx(ll,1,2)
8125 cd write (2,*) iii,gcorr_loc(iii)
8129 cd write (2,*) 'ekont',ekont
8130 cd write (iout,*) 'eello4',ekont*eel4
8133 C---------------------------------------------------------------------------
8134 double precision function eello5(i,j,k,l,jj,kk)
8135 implicit real*8 (a-h,o-z)
8136 include 'DIMENSIONS'
8137 include 'DIMENSIONS.ZSCOPT'
8138 include 'COMMON.IOUNITS'
8139 include 'COMMON.CHAIN'
8140 include 'COMMON.DERIV'
8141 include 'COMMON.INTERACT'
8142 include 'COMMON.CONTACTS'
8143 include 'COMMON.CONTMAT'
8144 include 'COMMON.CORRMAT'
8145 include 'COMMON.TORSION'
8146 include 'COMMON.VAR'
8147 include 'COMMON.GEO'
8148 double precision pizda(2,2),auxmat(2,2),auxmat1(2,2),vv(2)
8149 double precision ggg1(3),ggg2(3)
8150 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
8155 C /l\ / \ \ / \ / \ / C
8156 C / \ / \ \ / \ / \ / C
8157 C j| o |l1 | o | o| o | | o |o C
8158 C \ |/k\| |/ \| / |/ \| |/ \| C
8159 C \i/ \ / \ / / \ / \ C
8161 C (I) (II) (III) (IV) C
8163 C eello5_1 eello5_2 eello5_3 eello5_4 C
8165 C Antiparallel chains C
8168 C /j\ / \ \ / \ / \ / C
8169 C / \ / \ \ / \ / \ / C
8170 C j1| o |l | o | o| o | | o |o C
8171 C \ |/k\| |/ \| / |/ \| |/ \| C
8172 C \i/ \ / \ / / \ / \ C
8174 C (I) (II) (III) (IV) C
8176 C eello5_1 eello5_2 eello5_3 eello5_4 C
8178 C o denotes a local interaction, vertical lines an electrostatic interaction. C
8180 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
8181 cd if (i.ne.2 .or. j.ne.6 .or. k.ne.3 .or. l.ne.5) then
8186 cd & 'EELLO5: Contacts have occurred for peptide groups',i,j,
8188 itk=itype2loc(itype(k))
8189 itl=itype2loc(itype(l))
8190 itj=itype2loc(itype(j))
8195 cd call checkint5(i,j,k,l,jj,kk,eel5_1_num,eel5_2_num,
8196 cd & eel5_3_num,eel5_4_num)
8200 derx(lll,kkk,iii)=0.0d0
8204 cd eij=facont_hb(jj,i)
8205 cd ekl=facont_hb(kk,k)
8207 cd write (iout,*)'Contacts have occurred for peptide groups',
8208 cd & i,j,' fcont:',eij,' eij',' and ',k,l
8210 C Contribution from the graph I.
8211 cd write (2,*) 'AEA ',AEA(1,1,1),AEA(2,1,1),AEA(1,2,1),AEA(2,2,1)
8212 cd write (2,*) 'AEAb2',AEAb2(1,1,1),AEAb2(2,1,1)
8213 call transpose2(EUg(1,1,k),auxmat(1,1))
8214 call matmat2(AEA(1,1,1),auxmat(1,1),pizda(1,1))
8215 vv(1)=pizda(1,1)-pizda(2,2)
8216 vv(2)=pizda(1,2)+pizda(2,1)
8217 eello5_1=scalar2(AEAb2(1,1,1),Ub2(1,k))
8218 & +0.5d0*scalar2(vv(1),Dtobr2(1,i))
8220 C Explicit gradient in virtual-dihedral angles.
8221 if (i.gt.1) g_corr5_loc(i-1)=g_corr5_loc(i-1)
8222 & +ekont*(scalar2(AEAb2derg(1,2,1,1),Ub2(1,k))
8223 & +0.5d0*scalar2(vv(1),Dtobr2der(1,i)))
8224 call transpose2(EUgder(1,1,k),auxmat1(1,1))
8225 call matmat2(AEA(1,1,1),auxmat1(1,1),pizda(1,1))
8226 vv(1)=pizda(1,1)-pizda(2,2)
8227 vv(2)=pizda(1,2)+pizda(2,1)
8228 g_corr5_loc(k-1)=g_corr5_loc(k-1)
8229 & +ekont*(scalar2(AEAb2(1,1,1),Ub2der(1,k))
8230 & +0.5d0*scalar2(vv(1),Dtobr2(1,i)))
8231 call matmat2(AEAderg(1,1,1),auxmat(1,1),pizda(1,1))
8232 vv(1)=pizda(1,1)-pizda(2,2)
8233 vv(2)=pizda(1,2)+pizda(2,1)
8235 if (l.lt.nres-1) g_corr5_loc(l-1)=g_corr5_loc(l-1)
8236 & +ekont*(scalar2(AEAb2derg(1,1,1,1),Ub2(1,k))
8237 & +0.5d0*scalar2(vv(1),Dtobr2(1,i)))
8239 if (j.lt.nres-1) g_corr5_loc(j-1)=g_corr5_loc(j-1)
8240 & +ekont*(scalar2(AEAb2derg(1,1,1,1),Ub2(1,k))
8241 & +0.5d0*scalar2(vv(1),Dtobr2(1,i)))
8243 C Cartesian gradient
8247 call matmat2(AEAderx(1,1,lll,kkk,iii,1),auxmat(1,1),
8249 vv(1)=pizda(1,1)-pizda(2,2)
8250 vv(2)=pizda(1,2)+pizda(2,1)
8251 derx(lll,kkk,iii)=derx(lll,kkk,iii)
8252 & +scalar2(AEAb2derx(1,lll,kkk,iii,1,1),Ub2(1,k))
8253 & +0.5d0*scalar2(vv(1),Dtobr2(1,i))
8260 C Contribution from graph II
8261 call transpose2(EE(1,1,k),auxmat(1,1))
8262 call matmat2(auxmat(1,1),AEA(1,1,1),pizda(1,1))
8263 vv(1)=pizda(1,1)+pizda(2,2)
8264 vv(2)=pizda(2,1)-pizda(1,2)
8265 eello5_2=scalar2(AEAb1(1,2,1),b1(1,k))
8266 & -0.5d0*scalar2(vv(1),Ctobr(1,k))
8268 C Explicit gradient in virtual-dihedral angles.
8269 g_corr5_loc(k-1)=g_corr5_loc(k-1)
8270 & -0.5d0*ekont*scalar2(vv(1),Ctobrder(1,k))
8271 call matmat2(auxmat(1,1),AEAderg(1,1,1),pizda(1,1))
8272 vv(1)=pizda(1,1)+pizda(2,2)
8273 vv(2)=pizda(2,1)-pizda(1,2)
8275 g_corr5_loc(l-1)=g_corr5_loc(l-1)
8276 & +ekont*(scalar2(AEAb1derg(1,2,1),b1(1,k))
8277 & -0.5d0*scalar2(vv(1),Ctobr(1,k)))
8279 g_corr5_loc(j-1)=g_corr5_loc(j-1)
8280 & +ekont*(scalar2(AEAb1derg(1,2,1),b1(1,k))
8281 & -0.5d0*scalar2(vv(1),Ctobr(1,k)))
8283 C Cartesian gradient
8287 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,1),
8289 vv(1)=pizda(1,1)+pizda(2,2)
8290 vv(2)=pizda(2,1)-pizda(1,2)
8291 derx(lll,kkk,iii)=derx(lll,kkk,iii)
8292 & +scalar2(AEAb1derx(1,lll,kkk,iii,2,1),b1(1,k))
8293 & -0.5d0*scalar2(vv(1),Ctobr(1,k))
8302 C Parallel orientation
8303 C Contribution from graph III
8304 call transpose2(EUg(1,1,l),auxmat(1,1))
8305 call matmat2(AEA(1,1,2),auxmat(1,1),pizda(1,1))
8306 vv(1)=pizda(1,1)-pizda(2,2)
8307 vv(2)=pizda(1,2)+pizda(2,1)
8308 eello5_3=scalar2(AEAb2(1,1,2),Ub2(1,l))
8309 & +0.5d0*scalar2(vv(1),Dtobr2(1,j))
8311 C Explicit gradient in virtual-dihedral angles.
8312 g_corr5_loc(j-1)=g_corr5_loc(j-1)
8313 & +ekont*(scalar2(AEAb2derg(1,2,1,2),Ub2(1,l))
8314 & +0.5d0*scalar2(vv(1),Dtobr2der(1,j)))
8315 call matmat2(AEAderg(1,1,2),auxmat(1,1),pizda(1,1))
8316 vv(1)=pizda(1,1)-pizda(2,2)
8317 vv(2)=pizda(1,2)+pizda(2,1)
8318 g_corr5_loc(k-1)=g_corr5_loc(k-1)
8319 & +ekont*(scalar2(AEAb2derg(1,1,1,2),Ub2(1,l))
8320 & +0.5d0*scalar2(vv(1),Dtobr2(1,j)))
8321 call transpose2(EUgder(1,1,l),auxmat1(1,1))
8322 call matmat2(AEA(1,1,2),auxmat1(1,1),pizda(1,1))
8323 vv(1)=pizda(1,1)-pizda(2,2)
8324 vv(2)=pizda(1,2)+pizda(2,1)
8325 g_corr5_loc(l-1)=g_corr5_loc(l-1)
8326 & +ekont*(scalar2(AEAb2(1,1,2),Ub2der(1,l))
8327 & +0.5d0*scalar2(vv(1),Dtobr2(1,j)))
8328 C Cartesian gradient
8332 call matmat2(AEAderx(1,1,lll,kkk,iii,2),auxmat(1,1),
8334 vv(1)=pizda(1,1)-pizda(2,2)
8335 vv(2)=pizda(1,2)+pizda(2,1)
8336 derx(lll,kkk,iii)=derx(lll,kkk,iii)
8337 & +scalar2(AEAb2derx(1,lll,kkk,iii,1,2),Ub2(1,l))
8338 & +0.5d0*scalar2(vv(1),Dtobr2(1,j))
8343 C Contribution from graph IV
8345 call transpose2(EE(1,1,l),auxmat(1,1))
8346 call matmat2(auxmat(1,1),AEA(1,1,2),pizda(1,1))
8347 vv(1)=pizda(1,1)+pizda(2,2)
8348 vv(2)=pizda(2,1)-pizda(1,2)
8349 eello5_4=scalar2(AEAb1(1,2,2),b1(1,l))
8350 & -0.5d0*scalar2(vv(1),Ctobr(1,l))
8351 C Explicit gradient in virtual-dihedral angles.
8352 g_corr5_loc(l-1)=g_corr5_loc(l-1)
8353 & -0.5d0*ekont*scalar2(vv(1),Ctobrder(1,l))
8354 call matmat2(auxmat(1,1),AEAderg(1,1,2),pizda(1,1))
8355 vv(1)=pizda(1,1)+pizda(2,2)
8356 vv(2)=pizda(2,1)-pizda(1,2)
8357 g_corr5_loc(k-1)=g_corr5_loc(k-1)
8358 & +ekont*(scalar2(AEAb1derg(1,2,2),b1(1,l))
8359 & -0.5d0*scalar2(vv(1),Ctobr(1,l)))
8360 C Cartesian gradient
8364 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,2),
8366 vv(1)=pizda(1,1)+pizda(2,2)
8367 vv(2)=pizda(2,1)-pizda(1,2)
8368 derx(lll,kkk,iii)=derx(lll,kkk,iii)
8369 & +scalar2(AEAb1derx(1,lll,kkk,iii,2,2),b1(1,l))
8370 & -0.5d0*scalar2(vv(1),Ctobr(1,l))
8376 C Antiparallel orientation
8377 C Contribution from graph III
8379 call transpose2(EUg(1,1,j),auxmat(1,1))
8380 call matmat2(AEA(1,1,2),auxmat(1,1),pizda(1,1))
8381 vv(1)=pizda(1,1)-pizda(2,2)
8382 vv(2)=pizda(1,2)+pizda(2,1)
8383 eello5_3=scalar2(AEAb2(1,1,2),Ub2(1,j))
8384 & +0.5d0*scalar2(vv(1),Dtobr2(1,l))
8386 C Explicit gradient in virtual-dihedral angles.
8387 g_corr5_loc(l-1)=g_corr5_loc(l-1)
8388 & +ekont*(scalar2(AEAb2derg(1,2,1,2),Ub2(1,j))
8389 & +0.5d0*scalar2(vv(1),Dtobr2der(1,l)))
8390 call matmat2(AEAderg(1,1,2),auxmat(1,1),pizda(1,1))
8391 vv(1)=pizda(1,1)-pizda(2,2)
8392 vv(2)=pizda(1,2)+pizda(2,1)
8393 g_corr5_loc(k-1)=g_corr5_loc(k-1)
8394 & +ekont*(scalar2(AEAb2derg(1,1,1,2),Ub2(1,j))
8395 & +0.5d0*scalar2(vv(1),Dtobr2(1,l)))
8396 call transpose2(EUgder(1,1,j),auxmat1(1,1))
8397 call matmat2(AEA(1,1,2),auxmat1(1,1),pizda(1,1))
8398 vv(1)=pizda(1,1)-pizda(2,2)
8399 vv(2)=pizda(1,2)+pizda(2,1)
8400 g_corr5_loc(j-1)=g_corr5_loc(j-1)
8401 & +ekont*(scalar2(AEAb2(1,1,2),Ub2der(1,j))
8402 & +0.5d0*scalar2(vv(1),Dtobr2(1,l)))
8403 C Cartesian gradient
8407 call matmat2(AEAderx(1,1,lll,kkk,iii,2),auxmat(1,1),
8409 vv(1)=pizda(1,1)-pizda(2,2)
8410 vv(2)=pizda(1,2)+pizda(2,1)
8411 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)
8412 & +scalar2(AEAb2derx(1,lll,kkk,iii,1,2),Ub2(1,j))
8413 & +0.5d0*scalar2(vv(1),Dtobr2(1,l))
8419 C Contribution from graph IV
8421 call transpose2(EE(1,1,j),auxmat(1,1))
8422 call matmat2(auxmat(1,1),AEA(1,1,2),pizda(1,1))
8423 vv(1)=pizda(1,1)+pizda(2,2)
8424 vv(2)=pizda(2,1)-pizda(1,2)
8425 eello5_4=scalar2(AEAb1(1,2,2),b1(1,j))
8426 & -0.5d0*scalar2(vv(1),Ctobr(1,j))
8428 C Explicit gradient in virtual-dihedral angles.
8429 g_corr5_loc(j-1)=g_corr5_loc(j-1)
8430 & -0.5d0*ekont*scalar2(vv(1),Ctobrder(1,j))
8431 call matmat2(auxmat(1,1),AEAderg(1,1,2),pizda(1,1))
8432 vv(1)=pizda(1,1)+pizda(2,2)
8433 vv(2)=pizda(2,1)-pizda(1,2)
8434 g_corr5_loc(k-1)=g_corr5_loc(k-1)
8435 & +ekont*(scalar2(AEAb1derg(1,2,2),b1(1,j))
8436 & -0.5d0*scalar2(vv(1),Ctobr(1,j)))
8437 C Cartesian gradient
8441 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,2),
8443 vv(1)=pizda(1,1)+pizda(2,2)
8444 vv(2)=pizda(2,1)-pizda(1,2)
8445 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)
8446 & +scalar2(AEAb1derx(1,lll,kkk,iii,2,2),b1(1,j))
8447 & -0.5d0*scalar2(vv(1),Ctobr(1,j))
8454 eel5=eello5_1+eello5_2+eello5_3+eello5_4
8455 cd if (i.eq.2 .and. j.eq.8 .and. k.eq.3 .and. l.eq.7) then
8456 cd write (2,*) 'ijkl',i,j,k,l
8457 cd write (2,*) 'eello5_1',eello5_1,' eello5_2',eello5_2,
8458 cd & ' eello5_3',eello5_3,' eello5_4',eello5_4
8460 cd write(iout,*) 'eello5_1',eello5_1,' eel5_1_num',16*eel5_1_num
8461 cd write(iout,*) 'eello5_2',eello5_2,' eel5_2_num',16*eel5_2_num
8462 cd write(iout,*) 'eello5_3',eello5_3,' eel5_3_num',16*eel5_3_num
8463 cd write(iout,*) 'eello5_4',eello5_4,' eel5_4_num',16*eel5_4_num
8465 if (j.lt.nres-1) then
8472 if (l.lt.nres-1) then
8482 cd write (2,*) 'eij',eij,' ekl',ekl,' ekont',ekont
8483 C 2/11/08 AL Gradients over DC's connecting interacting sites will be
8484 C summed up outside the subrouine as for the other subroutines
8485 C handling long-range interactions. The old code is commented out
8486 C with "cgrad" to keep track of changes.
8488 cgrad ggg1(ll)=eel5*g_contij(ll,1)
8489 cgrad ggg2(ll)=eel5*g_contij(ll,2)
8490 gradcorr5ij=eel5*g_contij(ll,1)+ekont*derx(ll,1,1)
8491 gradcorr5kl=eel5*g_contij(ll,2)+ekont*derx(ll,1,2)
8492 c write (iout,'(a,3i3,a,5f8.3,2i3,a,5f8.3,a,f8.3)')
8493 c & "ecorr5",ll,i,j," derx",derx(ll,2,1),derx(ll,3,1),derx(ll,4,1),
8494 c & derx(ll,5,1),k,l," derx",derx(ll,2,2),derx(ll,3,2),
8495 c & derx(ll,4,2),derx(ll,5,2)," ekont",ekont
8496 c write (iout,'(a,3i3,a,3f8.3,2i3,a,3f8.3)')
8497 c & "ecorr5",ll,i,j," gradcorr5",g_contij(ll,1),derx(ll,1,1),
8499 c & k,l," gradcorr5",g_contij(ll,2),derx(ll,1,2),gradcorr5kl
8500 cold ghalf=0.5d0*eel5*ekl*gacont_hbr(ll,jj,i)
8501 cgrad ghalf=0.5d0*ggg1(ll)
8503 gradcorr5(ll,i)=gradcorr5(ll,i)+ekont*derx(ll,2,1)
8504 gradcorr5(ll,i+1)=gradcorr5(ll,i+1)+ekont*derx(ll,3,1)
8505 gradcorr5(ll,j)=gradcorr5(ll,j)+ekont*derx(ll,4,1)
8506 gradcorr5(ll,j1)=gradcorr5(ll,j1)+ekont*derx(ll,5,1)
8507 gradcorr5_long(ll,j)=gradcorr5_long(ll,j)+gradcorr5ij
8508 gradcorr5_long(ll,i)=gradcorr5_long(ll,i)-gradcorr5ij
8509 cold ghalf=0.5d0*eel5*eij*gacont_hbr(ll,kk,k)
8510 cgrad ghalf=0.5d0*ggg2(ll)
8512 gradcorr5(ll,k)=gradcorr5(ll,k)+ekont*derx(ll,2,2)
8513 gradcorr5(ll,k+1)=gradcorr5(ll,k+1)+ekont*derx(ll,3,2)
8514 gradcorr5(ll,l)=gradcorr5(ll,l)+ekont*derx(ll,4,2)
8515 gradcorr5(ll,l1)=gradcorr5(ll,l1)+ekont*derx(ll,5,2)
8516 gradcorr5_long(ll,l)=gradcorr5_long(ll,l)+gradcorr5kl
8517 gradcorr5_long(ll,k)=gradcorr5_long(ll,k)-gradcorr5kl
8523 cold gradcorr5(ll,m)=gradcorr5(ll,m)+eel5*ekl*gacont_hbr(ll,jj,i)
8524 cgrad gradcorr5(ll,m)=gradcorr5(ll,m)+ggg1(ll)
8529 cold gradcorr5(ll,m)=gradcorr5(ll,m)+eel5*eij*gacont_hbr(ll,kk,k)
8530 cgrad gradcorr5(ll,m)=gradcorr5(ll,m)+ggg2(ll)
8536 cgrad gradcorr5(ll,m)=gradcorr5(ll,m)+ekont*derx(ll,1,1)
8541 cgrad gradcorr5(ll,m)=gradcorr5(ll,m)+ekont*derx(ll,1,2)
8545 cd write (2,*) iii,g_corr5_loc(iii)
8548 cd write (2,*) 'ekont',ekont
8549 cd write (iout,*) 'eello5',ekont*eel5
8552 c--------------------------------------------------------------------------
8553 double precision function eello6(i,j,k,l,jj,kk)
8554 implicit real*8 (a-h,o-z)
8555 include 'DIMENSIONS'
8556 include 'DIMENSIONS.ZSCOPT'
8557 include 'COMMON.IOUNITS'
8558 include 'COMMON.CHAIN'
8559 include 'COMMON.DERIV'
8560 include 'COMMON.INTERACT'
8561 include 'COMMON.CONTACTS'
8562 include 'COMMON.CONTMAT'
8563 include 'COMMON.CORRMAT'
8564 include 'COMMON.TORSION'
8565 include 'COMMON.VAR'
8566 include 'COMMON.GEO'
8567 include 'COMMON.FFIELD'
8568 double precision ggg1(3),ggg2(3)
8569 cd if (i.ne.1 .or. j.ne.3 .or. k.ne.2 .or. l.ne.4) then
8574 cd & 'EELLO6: Contacts have occurred for peptide groups',i,j,
8582 cd call checkint6(i,j,k,l,jj,kk,eel6_1_num,eel6_2_num,
8583 cd & eel6_3_num,eel6_4_num,eel6_5_num,eel6_6_num)
8587 derx(lll,kkk,iii)=0.0d0
8591 cd eij=facont_hb(jj,i)
8592 cd ekl=facont_hb(kk,k)
8598 eello6_1=eello6_graph1(i,j,k,l,1,.false.)
8599 eello6_2=eello6_graph1(j,i,l,k,2,.false.)
8600 eello6_3=eello6_graph2(i,j,k,l,jj,kk,.false.)
8601 eello6_4=eello6_graph4(i,j,k,l,jj,kk,1,.false.)
8602 eello6_5=eello6_graph4(j,i,l,k,jj,kk,2,.false.)
8603 eello6_6=eello6_graph3(i,j,k,l,jj,kk,.false.)
8605 eello6_1=eello6_graph1(i,j,k,l,1,.false.)
8606 eello6_2=eello6_graph1(l,k,j,i,2,.true.)
8607 eello6_3=eello6_graph2(i,l,k,j,jj,kk,.true.)
8608 eello6_4=eello6_graph4(i,j,k,l,jj,kk,1,.false.)
8609 if (wturn6.eq.0.0d0 .or. j.ne.i+4) then
8610 eello6_5=eello6_graph4(l,k,j,i,kk,jj,2,.true.)
8614 eello6_6=eello6_graph3(i,l,k,j,jj,kk,.true.)
8616 C If turn contributions are considered, they will be handled separately.
8617 eel6=eello6_1+eello6_2+eello6_3+eello6_4+eello6_5+eello6_6
8618 cd write(iout,*) 'eello6_1',eello6_1!,' eel6_1_num',16*eel6_1_num
8619 cd write(iout,*) 'eello6_2',eello6_2!,' eel6_2_num',16*eel6_2_num
8620 cd write(iout,*) 'eello6_3',eello6_3!,' eel6_3_num',16*eel6_3_num
8621 cd write(iout,*) 'eello6_4',eello6_4!,' eel6_4_num',16*eel6_4_num
8622 cd write(iout,*) 'eello6_5',eello6_5!,' eel6_5_num',16*eel6_5_num
8623 cd write(iout,*) 'eello6_6',eello6_6!,' eel6_6_num',16*eel6_6_num
8626 if (j.lt.nres-1) then
8633 if (l.lt.nres-1) then
8641 cgrad ggg1(ll)=eel6*g_contij(ll,1)
8642 cgrad ggg2(ll)=eel6*g_contij(ll,2)
8643 cold ghalf=0.5d0*eel6*ekl*gacont_hbr(ll,jj,i)
8644 cgrad ghalf=0.5d0*ggg1(ll)
8646 gradcorr6ij=eel6*g_contij(ll,1)+ekont*derx(ll,1,1)
8647 gradcorr6kl=eel6*g_contij(ll,2)+ekont*derx(ll,1,2)
8648 gradcorr6(ll,i)=gradcorr6(ll,i)+ekont*derx(ll,2,1)
8649 gradcorr6(ll,i+1)=gradcorr6(ll,i+1)+ekont*derx(ll,3,1)
8650 gradcorr6(ll,j)=gradcorr6(ll,j)+ekont*derx(ll,4,1)
8651 gradcorr6(ll,j1)=gradcorr6(ll,j1)+ekont*derx(ll,5,1)
8652 gradcorr6_long(ll,j)=gradcorr6_long(ll,j)+gradcorr6ij
8653 gradcorr6_long(ll,i)=gradcorr6_long(ll,i)-gradcorr6ij
8654 cgrad ghalf=0.5d0*ggg2(ll)
8655 cold ghalf=0.5d0*eel6*eij*gacont_hbr(ll,kk,k)
8657 gradcorr6(ll,k)=gradcorr6(ll,k)+ekont*derx(ll,2,2)
8658 gradcorr6(ll,k+1)=gradcorr6(ll,k+1)+ekont*derx(ll,3,2)
8659 gradcorr6(ll,l)=gradcorr6(ll,l)+ekont*derx(ll,4,2)
8660 gradcorr6(ll,l1)=gradcorr6(ll,l1)+ekont*derx(ll,5,2)
8661 gradcorr6_long(ll,l)=gradcorr6_long(ll,l)+gradcorr6kl
8662 gradcorr6_long(ll,k)=gradcorr6_long(ll,k)-gradcorr6kl
8668 cold gradcorr6(ll,m)=gradcorr6(ll,m)+eel6*ekl*gacont_hbr(ll,jj,i)
8669 cgrad gradcorr6(ll,m)=gradcorr6(ll,m)+ggg1(ll)
8674 cold gradcorr6(ll,m)=gradcorr6(ll,m)+eel6*eij*gacont_hbr(ll,kk,k)
8675 cgrad gradcorr6(ll,m)=gradcorr6(ll,m)+ggg2(ll)
8681 cgrad gradcorr6(ll,m)=gradcorr6(ll,m)+ekont*derx(ll,1,1)
8686 cgrad gradcorr6(ll,m)=gradcorr6(ll,m)+ekont*derx(ll,1,2)
8690 cd write (2,*) iii,g_corr6_loc(iii)
8693 cd write (2,*) 'ekont',ekont
8694 cd write (iout,*) 'eello6',ekont*eel6
8697 c--------------------------------------------------------------------------
8698 double precision function eello6_graph1(i,j,k,l,imat,swap)
8699 implicit real*8 (a-h,o-z)
8700 include 'DIMENSIONS'
8701 include 'DIMENSIONS.ZSCOPT'
8702 include 'COMMON.IOUNITS'
8703 include 'COMMON.CHAIN'
8704 include 'COMMON.DERIV'
8705 include 'COMMON.INTERACT'
8706 include 'COMMON.CONTACTS'
8707 include 'COMMON.CONTMAT'
8708 include 'COMMON.CORRMAT'
8709 include 'COMMON.TORSION'
8710 include 'COMMON.VAR'
8711 include 'COMMON.GEO'
8712 double precision vv(2),vv1(2),pizda(2,2),auxmat(2,2),pizda1(2,2)
8716 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
8718 C Parallel Antiparallel C
8724 C \ j|/k\| / \ |/k\|l / C
8729 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
8730 itk=itype2loc(itype(k))
8731 s1= scalar2(AEAb1(1,2,imat),CUgb2(1,i))
8732 s2=-scalar2(AEAb2(1,1,imat),Ug2Db1t(1,k))
8733 s3= scalar2(AEAb2(1,1,imat),CUgb2(1,k))
8734 call transpose2(EUgC(1,1,k),auxmat(1,1))
8735 call matmat2(AEA(1,1,imat),auxmat(1,1),pizda1(1,1))
8736 vv1(1)=pizda1(1,1)-pizda1(2,2)
8737 vv1(2)=pizda1(1,2)+pizda1(2,1)
8738 s4=0.5d0*scalar2(vv1(1),Dtobr2(1,i))
8739 vv(1)=AEAb1(1,2,imat)*b1(1,k)-AEAb1(2,2,imat)*b1(2,k)
8740 vv(2)=AEAb1(1,2,imat)*b1(2,k)+AEAb1(2,2,imat)*b1(1,k)
8741 s5=scalar2(vv(1),Dtobr2(1,i))
8742 cd write (2,*) 's1',s1,' s2',s2,' s3',s3,' s4', s4,' s5',s5
8743 eello6_graph1=-0.5d0*(s1+s2+s3+s4+s5)
8745 if (i.gt.1) g_corr6_loc(i-1)=g_corr6_loc(i-1)
8746 & -0.5d0*ekont*(scalar2(AEAb1(1,2,imat),CUgb2der(1,i))
8747 & -scalar2(AEAb2derg(1,2,1,imat),Ug2Db1t(1,k))
8748 & +scalar2(AEAb2derg(1,2,1,imat),CUgb2(1,k))
8749 & +0.5d0*scalar2(vv1(1),Dtobr2der(1,i))
8750 & +scalar2(vv(1),Dtobr2der(1,i)))
8751 call matmat2(AEAderg(1,1,imat),auxmat(1,1),pizda1(1,1))
8752 vv1(1)=pizda1(1,1)-pizda1(2,2)
8753 vv1(2)=pizda1(1,2)+pizda1(2,1)
8754 vv(1)=AEAb1derg(1,2,imat)*b1(1,k)-AEAb1derg(2,2,imat)*b1(2,k)
8755 vv(2)=AEAb1derg(1,2,imat)*b1(2,k)+AEAb1derg(2,2,imat)*b1(1,k)
8757 g_corr6_loc(l-1)=g_corr6_loc(l-1)
8758 & +ekont*(-0.5d0*(scalar2(AEAb1derg(1,2,imat),CUgb2(1,i))
8759 & -scalar2(AEAb2derg(1,1,1,imat),Ug2Db1t(1,k))
8760 & +scalar2(AEAb2derg(1,1,1,imat),CUgb2(1,k))
8761 & +0.5d0*scalar2(vv1(1),Dtobr2(1,i))+scalar2(vv(1),Dtobr2(1,i))))
8763 g_corr6_loc(j-1)=g_corr6_loc(j-1)
8764 & +ekont*(-0.5d0*(scalar2(AEAb1derg(1,2,imat),CUgb2(1,i))
8765 & -scalar2(AEAb2derg(1,1,1,imat),Ug2Db1t(1,k))
8766 & +scalar2(AEAb2derg(1,1,1,imat),CUgb2(1,k))
8767 & +0.5d0*scalar2(vv1(1),Dtobr2(1,i))+scalar2(vv(1),Dtobr2(1,i))))
8769 call transpose2(EUgCder(1,1,k),auxmat(1,1))
8770 call matmat2(AEA(1,1,imat),auxmat(1,1),pizda1(1,1))
8771 vv1(1)=pizda1(1,1)-pizda1(2,2)
8772 vv1(2)=pizda1(1,2)+pizda1(2,1)
8773 if (k.gt.1) g_corr6_loc(k-1)=g_corr6_loc(k-1)
8774 & +ekont*(-0.5d0*(-scalar2(AEAb2(1,1,imat),Ug2Db1tder(1,k))
8775 & +scalar2(AEAb2(1,1,imat),CUgb2der(1,k))
8776 & +0.5d0*scalar2(vv1(1),Dtobr2(1,i))))
8785 s1= scalar2(AEAb1derx(1,lll,kkk,iii,2,imat),CUgb2(1,i))
8786 s2=-scalar2(AEAb2derx(1,lll,kkk,iii,1,imat),Ug2Db1t(1,k))
8787 s3= scalar2(AEAb2derx(1,lll,kkk,iii,1,imat),CUgb2(1,k))
8788 call transpose2(EUgC(1,1,k),auxmat(1,1))
8789 call matmat2(AEAderx(1,1,lll,kkk,iii,imat),auxmat(1,1),
8791 vv1(1)=pizda1(1,1)-pizda1(2,2)
8792 vv1(2)=pizda1(1,2)+pizda1(2,1)
8793 s4=0.5d0*scalar2(vv1(1),Dtobr2(1,i))
8794 vv(1)=AEAb1derx(1,lll,kkk,iii,2,imat)*b1(1,k)
8795 & -AEAb1derx(2,lll,kkk,iii,2,imat)*b1(2,k)
8796 vv(2)=AEAb1derx(1,lll,kkk,iii,2,imat)*b1(2,k)
8797 & +AEAb1derx(2,lll,kkk,iii,2,imat)*b1(1,k)
8798 s5=scalar2(vv(1),Dtobr2(1,i))
8799 derx(lll,kkk,ind)=derx(lll,kkk,ind)-0.5d0*(s1+s2+s3+s4+s5)
8806 c----------------------------------------------------------------------------
8807 double precision function eello6_graph2(i,j,k,l,jj,kk,swap)
8808 implicit real*8 (a-h,o-z)
8809 include 'DIMENSIONS'
8810 include 'DIMENSIONS.ZSCOPT'
8811 include 'COMMON.IOUNITS'
8812 include 'COMMON.CHAIN'
8813 include 'COMMON.DERIV'
8814 include 'COMMON.INTERACT'
8815 include 'COMMON.CONTACTS'
8816 include 'COMMON.CONTMAT'
8817 include 'COMMON.CORRMAT'
8818 include 'COMMON.TORSION'
8819 include 'COMMON.VAR'
8820 include 'COMMON.GEO'
8822 double precision vv(2),pizda(2,2),auxmat(2,2),auxvec(2),
8823 & auxvec1(2),auxvec2(2),auxmat1(2,2)
8826 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
8828 C Parallel Antiparallel C
8834 C \ j|/k\| \ |/k\|l C
8839 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
8840 cd write (2,*) 'eello6_graph2: i,',i,' j',j,' k',k,' l',l
8841 C AL 7/4/01 s1 would occur in the sixth-order moment,
8842 C but not in a cluster cumulant
8844 s1=dip(1,jj,i)*dip(1,kk,k)
8846 call matvec2(ADtEA1(1,1,1),Ub2(1,k),auxvec(1))
8847 s2=-0.5d0*scalar2(Ub2(1,i),auxvec(1))
8848 call matvec2(ADtEA(1,1,2),Ub2(1,l),auxvec1(1))
8849 s3=-0.5d0*scalar2(Ub2(1,j),auxvec1(1))
8850 call transpose2(EUg(1,1,k),auxmat(1,1))
8851 call matmat2(ADtEA1(1,1,1),auxmat(1,1),pizda(1,1))
8852 vv(1)=pizda(1,1)-pizda(2,2)
8853 vv(2)=pizda(1,2)+pizda(2,1)
8854 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
8855 cd write (2,*) 'eello6_graph2:','s1',s1,' s2',s2,' s3',s3,' s4',s4
8857 eello6_graph2=-(s1+s2+s3+s4)
8859 eello6_graph2=-(s2+s3+s4)
8862 C Derivatives in gamma(i-1)
8866 s1=dipderg(1,jj,i)*dip(1,kk,k)
8868 s2=-0.5d0*scalar2(Ub2der(1,i),auxvec(1))
8869 call matvec2(ADtEAderg(1,1,1,2),Ub2(1,l),auxvec2(1))
8870 s3=-0.5d0*scalar2(Ub2(1,j),auxvec2(1))
8871 s4=-0.25d0*scalar2(vv(1),Dtobr2der(1,i))
8873 g_corr6_loc(i-1)=g_corr6_loc(i-1)-ekont*(s1+s2+s3+s4)
8875 g_corr6_loc(i-1)=g_corr6_loc(i-1)-ekont*(s2+s3+s4)
8877 c g_corr6_loc(i-1)=g_corr6_loc(i-1)-s3
8879 C Derivatives in gamma(k-1)
8881 s1=dip(1,jj,i)*dipderg(1,kk,k)
8883 call matvec2(ADtEA1(1,1,1),Ub2der(1,k),auxvec2(1))
8884 s2=-0.5d0*scalar2(Ub2(1,i),auxvec2(1))
8885 call matvec2(ADtEAderg(1,1,2,2),Ub2(1,l),auxvec2(1))
8886 s3=-0.5d0*scalar2(Ub2(1,j),auxvec2(1))
8887 call transpose2(EUgder(1,1,k),auxmat1(1,1))
8888 call matmat2(ADtEA1(1,1,1),auxmat1(1,1),pizda(1,1))
8889 vv(1)=pizda(1,1)-pizda(2,2)
8890 vv(2)=pizda(1,2)+pizda(2,1)
8891 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
8893 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s1+s2+s3+s4)
8895 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s2+s3+s4)
8897 c g_corr6_loc(k-1)=g_corr6_loc(k-1)-s3
8898 C Derivatives in gamma(j-1) or gamma(l-1)
8901 s1=dipderg(3,jj,i)*dip(1,kk,k)
8903 call matvec2(ADtEA1derg(1,1,1,1),Ub2(1,k),auxvec2(1))
8904 s2=-0.5d0*scalar2(Ub2(1,i),auxvec2(1))
8905 s3=-0.5d0*scalar2(Ub2der(1,j),auxvec1(1))
8906 call matmat2(ADtEA1derg(1,1,1,1),auxmat(1,1),pizda(1,1))
8907 vv(1)=pizda(1,1)-pizda(2,2)
8908 vv(2)=pizda(1,2)+pizda(2,1)
8909 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
8912 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*s1
8914 g_corr6_loc(j-1)=g_corr6_loc(j-1)-ekont*s1
8917 g_corr6_loc(j-1)=g_corr6_loc(j-1)-ekont*(s2+s3+s4)
8918 c g_corr6_loc(j-1)=g_corr6_loc(j-1)-s3
8920 C Derivatives in gamma(l-1) or gamma(j-1)
8923 s1=dip(1,jj,i)*dipderg(3,kk,k)
8925 call matvec2(ADtEA1derg(1,1,2,1),Ub2(1,k),auxvec2(1))
8926 s2=-0.5d0*scalar2(Ub2(1,i),auxvec2(1))
8927 call matvec2(ADtEA(1,1,2),Ub2der(1,l),auxvec2(1))
8928 s3=-0.5d0*scalar2(Ub2(1,j),auxvec2(1))
8929 call matmat2(ADtEA1derg(1,1,2,1),auxmat(1,1),pizda(1,1))
8930 vv(1)=pizda(1,1)-pizda(2,2)
8931 vv(2)=pizda(1,2)+pizda(2,1)
8932 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
8935 g_corr6_loc(j-1)=g_corr6_loc(j-1)-ekont*s1
8937 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*s1
8940 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*(s2+s3+s4)
8941 c g_corr6_loc(l-1)=g_corr6_loc(l-1)-s3
8943 C Cartesian derivatives.
8945 write (2,*) 'In eello6_graph2'
8947 write (2,*) 'iii=',iii
8949 write (2,*) 'kkk=',kkk
8951 write (2,'(3(2f10.5),5x)')
8952 & ((ADtEA1derx(jjj,mmm,lll,kkk,iii,1),mmm=1,2),lll=1,3)
8962 s1=dipderx(lll,kkk,1,jj,i)*dip(1,kk,k)
8964 s1=dip(1,jj,i)*dipderx(lll,kkk,1,kk,k)
8967 call matvec2(ADtEA1derx(1,1,lll,kkk,iii,1),Ub2(1,k),
8969 s2=-0.5d0*scalar2(Ub2(1,i),auxvec(1))
8970 call matvec2(ADtEAderx(1,1,lll,kkk,iii,2),Ub2(1,l),
8972 s3=-0.5d0*scalar2(Ub2(1,j),auxvec(1))
8973 call transpose2(EUg(1,1,k),auxmat(1,1))
8974 call matmat2(ADtEA1derx(1,1,lll,kkk,iii,1),auxmat(1,1),
8976 vv(1)=pizda(1,1)-pizda(2,2)
8977 vv(2)=pizda(1,2)+pizda(2,1)
8978 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
8979 cd write (2,*) 's1',s1,' s2',s2,' s3',s3,' s4',s4
8981 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s1+s2+s4)
8983 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s2+s4)
8986 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-s3
8988 derx(lll,kkk,iii)=derx(lll,kkk,iii)-s3
8996 c----------------------------------------------------------------------------
8997 double precision function eello6_graph3(i,j,k,l,jj,kk,swap)
8998 implicit real*8 (a-h,o-z)
8999 include 'DIMENSIONS'
9000 include 'DIMENSIONS.ZSCOPT'
9001 include 'COMMON.IOUNITS'
9002 include 'COMMON.CHAIN'
9003 include 'COMMON.DERIV'
9004 include 'COMMON.INTERACT'
9005 include 'COMMON.CONTACTS'
9006 include 'COMMON.CONTMAT'
9007 include 'COMMON.CORRMAT'
9008 include 'COMMON.TORSION'
9009 include 'COMMON.VAR'
9010 include 'COMMON.GEO'
9011 double precision vv(2),pizda(2,2),auxmat(2,2),auxvec(2)
9013 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
9015 C Parallel Antiparallel C
9021 C j|/k\| / |/k\|l / C
9026 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
9028 C 4/7/01 AL Component s1 was removed, because it pertains to the respective
9029 C energy moment and not to the cluster cumulant.
9030 iti=itortyp(itype(i))
9031 if (j.lt.nres-1) then
9032 itj1=itype2loc(itype(j+1))
9036 itk=itype2loc(itype(k))
9037 itk1=itype2loc(itype(k+1))
9038 if (l.lt.nres-1) then
9039 itl1=itype2loc(itype(l+1))
9044 s1=dip(4,jj,i)*dip(4,kk,k)
9046 call matvec2(AECA(1,1,1),b1(1,k+1),auxvec(1))
9047 s2=0.5d0*scalar2(b1(1,k),auxvec(1))
9048 call matvec2(AECA(1,1,2),b1(1,l+1),auxvec(1))
9049 s3=0.5d0*scalar2(b1(1,j+1),auxvec(1))
9050 call transpose2(EE(1,1,k),auxmat(1,1))
9051 call matmat2(auxmat(1,1),AECA(1,1,1),pizda(1,1))
9052 vv(1)=pizda(1,1)+pizda(2,2)
9053 vv(2)=pizda(2,1)-pizda(1,2)
9054 s4=-0.25d0*scalar2(vv(1),Ctobr(1,k))
9055 cd write (2,*) 'eello6_graph3:','s1',s1,' s2',s2,' s3',s3,' s4',s4,
9056 cd & "sum",-(s2+s3+s4)
9058 eello6_graph3=-(s1+s2+s3+s4)
9060 eello6_graph3=-(s2+s3+s4)
9063 C Derivatives in gamma(k-1)
9065 call matvec2(AECAderg(1,1,2),b1(1,l+1),auxvec(1))
9066 s3=0.5d0*scalar2(b1(1,j+1),auxvec(1))
9067 s4=-0.25d0*scalar2(vv(1),Ctobrder(1,k))
9068 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s3+s4)
9069 C Derivatives in gamma(l-1)
9070 call matvec2(AECAderg(1,1,1),b1(1,k+1),auxvec(1))
9071 s2=0.5d0*scalar2(b1(1,k),auxvec(1))
9072 call matmat2(auxmat(1,1),AECAderg(1,1,1),pizda(1,1))
9073 vv(1)=pizda(1,1)+pizda(2,2)
9074 vv(2)=pizda(2,1)-pizda(1,2)
9075 s4=-0.25d0*scalar2(vv(1),Ctobr(1,k))
9076 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*(s2+s4)
9077 C Cartesian derivatives.
9083 s1=dipderx(lll,kkk,4,jj,i)*dip(4,kk,k)
9085 s1=dip(4,jj,i)*dipderx(lll,kkk,4,kk,k)
9088 call matvec2(AECAderx(1,1,lll,kkk,iii,1),b1(1,k+1),
9090 s2=0.5d0*scalar2(b1(1,k),auxvec(1))
9091 call matvec2(AECAderx(1,1,lll,kkk,iii,2),b1(1,l+1),
9093 s3=0.5d0*scalar2(b1(1,j+1),auxvec(1))
9094 call matmat2(auxmat(1,1),AECAderx(1,1,lll,kkk,iii,1),
9096 vv(1)=pizda(1,1)+pizda(2,2)
9097 vv(2)=pizda(2,1)-pizda(1,2)
9098 s4=-0.25d0*scalar2(vv(1),Ctobr(1,k))
9100 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s1+s2+s4)
9102 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s2+s4)
9105 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-s3
9107 derx(lll,kkk,iii)=derx(lll,kkk,iii)-s3
9109 c derx(lll,kkk,iii)=derx(lll,kkk,iii)-s4
9116 c----------------------------------------------------------------------------
9117 double precision function eello6_graph4(i,j,k,l,jj,kk,imat,swap)
9118 implicit real*8 (a-h,o-z)
9119 include 'DIMENSIONS'
9120 include 'DIMENSIONS.ZSCOPT'
9121 include 'COMMON.IOUNITS'
9122 include 'COMMON.CHAIN'
9123 include 'COMMON.DERIV'
9124 include 'COMMON.INTERACT'
9125 include 'COMMON.CONTACTS'
9126 include 'COMMON.CONTMAT'
9127 include 'COMMON.CORRMAT'
9128 include 'COMMON.TORSION'
9129 include 'COMMON.VAR'
9130 include 'COMMON.GEO'
9131 include 'COMMON.FFIELD'
9132 double precision vv(2),pizda(2,2),auxmat(2,2),auxvec(2),
9133 & auxvec1(2),auxmat1(2,2)
9135 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
9137 C Parallel Antiparallel C
9143 C \ j|/k\| \ |/k\|l C
9148 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
9150 C 4/7/01 AL Component s1 was removed, because it pertains to the respective
9151 C energy moment and not to the cluster cumulant.
9152 cd write (2,*) 'eello_graph4: wturn6',wturn6
9153 iti=itype2loc(itype(i))
9154 itj=itype2loc(itype(j))
9155 if (j.lt.nres-1) then
9156 itj1=itype2loc(itype(j+1))
9160 itk=itype2loc(itype(k))
9161 if (k.lt.nres-1) then
9162 itk1=itype2loc(itype(k+1))
9166 itl=itype2loc(itype(l))
9167 if (l.lt.nres-1) then
9168 itl1=itype2loc(itype(l+1))
9172 cd write (2,*) 'eello6_graph4:','i',i,' j',j,' k',k,' l',l
9173 cd write (2,*) 'iti',iti,' itj',itj,' itj1',itj1,' itk',itk,
9174 cd & ' itl',itl,' itl1',itl1
9177 s1=dip(3,jj,i)*dip(3,kk,k)
9179 s1=dip(2,jj,j)*dip(2,kk,l)
9182 call matvec2(AECA(1,1,imat),Ub2(1,k),auxvec(1))
9183 s2=0.5d0*scalar2(Ub2(1,i),auxvec(1))
9185 call matvec2(ADtEA1(1,1,3-imat),b1(1,j+1),auxvec1(1))
9186 s3=-0.5d0*scalar2(b1(1,j),auxvec1(1))
9188 call matvec2(ADtEA1(1,1,3-imat),b1(1,l+1),auxvec1(1))
9189 s3=-0.5d0*scalar2(b1(1,l),auxvec1(1))
9191 call transpose2(EUg(1,1,k),auxmat(1,1))
9192 call matmat2(AECA(1,1,imat),auxmat(1,1),pizda(1,1))
9193 vv(1)=pizda(1,1)-pizda(2,2)
9194 vv(2)=pizda(2,1)+pizda(1,2)
9195 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
9196 cd write (2,*) 'eello6_graph4:','s1',s1,' s2',s2,' s3',s3,' s4',s4
9198 eello6_graph4=-(s1+s2+s3+s4)
9200 eello6_graph4=-(s2+s3+s4)
9202 C Derivatives in gamma(i-1)
9207 s1=dipderg(2,jj,i)*dip(3,kk,k)
9209 s1=dipderg(4,jj,j)*dip(2,kk,l)
9212 s2=0.5d0*scalar2(Ub2der(1,i),auxvec(1))
9214 call matvec2(ADtEA1derg(1,1,1,3-imat),b1(1,j+1),auxvec1(1))
9215 s3=-0.5d0*scalar2(b1(1,j),auxvec1(1))
9217 call matvec2(ADtEA1derg(1,1,1,3-imat),b1(1,l+1),auxvec1(1))
9218 s3=-0.5d0*scalar2(b1(1,l),auxvec1(1))
9220 s4=0.25d0*scalar2(vv(1),Dtobr2der(1,i))
9221 if (wturn6.gt.0.0d0 .and. k.eq.l+4 .and. i.eq.j+2) then
9222 cd write (2,*) 'turn6 derivatives'
9224 gel_loc_turn6(i-1)=gel_loc_turn6(i-1)-ekont*(s1+s2+s3+s4)
9226 gel_loc_turn6(i-1)=gel_loc_turn6(i-1)-ekont*(s2+s3+s4)
9230 g_corr6_loc(i-1)=g_corr6_loc(i-1)-ekont*(s1+s2+s3+s4)
9232 g_corr6_loc(i-1)=g_corr6_loc(i-1)-ekont*(s2+s3+s4)
9236 C Derivatives in gamma(k-1)
9239 s1=dip(3,jj,i)*dipderg(2,kk,k)
9241 s1=dip(2,jj,j)*dipderg(4,kk,l)
9244 call matvec2(AECA(1,1,imat),Ub2der(1,k),auxvec1(1))
9245 s2=0.5d0*scalar2(Ub2(1,i),auxvec1(1))
9247 call matvec2(ADtEA1derg(1,1,2,3-imat),b1(1,j+1),auxvec1(1))
9248 s3=-0.5d0*scalar2(b1(1,j),auxvec1(1))
9250 call matvec2(ADtEA1derg(1,1,2,3-imat),b1(1,l+1),auxvec1(1))
9251 s3=-0.5d0*scalar2(b1(1,l),auxvec1(1))
9253 call transpose2(EUgder(1,1,k),auxmat1(1,1))
9254 call matmat2(AECA(1,1,imat),auxmat1(1,1),pizda(1,1))
9255 vv(1)=pizda(1,1)-pizda(2,2)
9256 vv(2)=pizda(2,1)+pizda(1,2)
9257 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
9258 if (wturn6.gt.0.0d0 .and. k.eq.l+4 .and. i.eq.j+2) then
9260 gel_loc_turn6(k-1)=gel_loc_turn6(k-1)-ekont*(s1+s2+s3+s4)
9262 gel_loc_turn6(k-1)=gel_loc_turn6(k-1)-ekont*(s2+s3+s4)
9266 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s1+s2+s3+s4)
9268 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s2+s3+s4)
9271 C Derivatives in gamma(j-1) or gamma(l-1)
9272 if (l.eq.j+1 .and. l.gt.1) then
9273 call matvec2(AECAderg(1,1,imat),Ub2(1,k),auxvec(1))
9274 s2=0.5d0*scalar2(Ub2(1,i),auxvec(1))
9275 call matmat2(AECAderg(1,1,imat),auxmat(1,1),pizda(1,1))
9276 vv(1)=pizda(1,1)-pizda(2,2)
9277 vv(2)=pizda(2,1)+pizda(1,2)
9278 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
9279 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*(s2+s4)
9280 else if (j.gt.1) then
9281 call matvec2(AECAderg(1,1,imat),Ub2(1,k),auxvec(1))
9282 s2=0.5d0*scalar2(Ub2(1,i),auxvec(1))
9283 call matmat2(AECAderg(1,1,imat),auxmat(1,1),pizda(1,1))
9284 vv(1)=pizda(1,1)-pizda(2,2)
9285 vv(2)=pizda(2,1)+pizda(1,2)
9286 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
9287 if (wturn6.gt.0.0d0 .and. k.eq.l+4 .and. i.eq.j+2) then
9288 gel_loc_turn6(j-1)=gel_loc_turn6(j-1)-ekont*(s2+s4)
9290 g_corr6_loc(j-1)=g_corr6_loc(j-1)-ekont*(s2+s4)
9293 C Cartesian derivatives.
9300 s1=dipderx(lll,kkk,3,jj,i)*dip(3,kk,k)
9302 s1=dipderx(lll,kkk,2,jj,j)*dip(2,kk,l)
9306 s1=dip(3,jj,i)*dipderx(lll,kkk,3,kk,k)
9308 s1=dip(2,jj,j)*dipderx(lll,kkk,2,kk,l)
9312 call matvec2(AECAderx(1,1,lll,kkk,iii,imat),Ub2(1,k),
9314 s2=0.5d0*scalar2(Ub2(1,i),auxvec(1))
9316 call matvec2(ADtEA1derx(1,1,lll,kkk,iii,3-imat),
9317 & b1(1,j+1),auxvec(1))
9318 s3=-0.5d0*scalar2(b1(1,j),auxvec(1))
9320 call matvec2(ADtEA1derx(1,1,lll,kkk,iii,3-imat),
9321 & b1(1,l+1),auxvec(1))
9322 s3=-0.5d0*scalar2(b1(1,l),auxvec(1))
9324 call matmat2(AECAderx(1,1,lll,kkk,iii,imat),auxmat(1,1),
9326 vv(1)=pizda(1,1)-pizda(2,2)
9327 vv(2)=pizda(2,1)+pizda(1,2)
9328 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
9330 if (wturn6.gt.0.0d0 .and. k.eq.l+4 .and. i.eq.j+2) then
9332 derx_turn(lll,kkk,3-iii)=derx_turn(lll,kkk,3-iii)
9335 derx_turn(lll,kkk,3-iii)=derx_turn(lll,kkk,3-iii)
9338 derx_turn(lll,kkk,iii)=derx_turn(lll,kkk,iii)-s3
9341 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-(s1+s2+s4)
9343 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-(s2+s4)
9345 derx(lll,kkk,iii)=derx(lll,kkk,iii)-s3
9349 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s1+s2+s4)
9351 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s2+s4)
9354 derx(lll,kkk,iii)=derx(lll,kkk,iii)-s3
9356 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-s3
9365 c----------------------------------------------------------------------------
9366 double precision function eello_turn6(i,jj,kk)
9367 implicit real*8 (a-h,o-z)
9368 include 'DIMENSIONS'
9369 include 'DIMENSIONS.ZSCOPT'
9370 include 'COMMON.IOUNITS'
9371 include 'COMMON.CHAIN'
9372 include 'COMMON.DERIV'
9373 include 'COMMON.INTERACT'
9374 include 'COMMON.CONTACTS'
9375 include 'COMMON.CONTMAT'
9376 include 'COMMON.CORRMAT'
9377 include 'COMMON.TORSION'
9378 include 'COMMON.VAR'
9379 include 'COMMON.GEO'
9380 double precision vtemp1(2),vtemp2(2),vtemp3(2),vtemp4(2),
9381 & atemp(2,2),auxmat(2,2),achuj_temp(2,2),gtemp(2,2),gvec(2),
9383 double precision vtemp1d(2),vtemp2d(2),vtemp3d(2),vtemp4d(2),
9384 & atempd(2,2),auxmatd(2,2),achuj_tempd(2,2),gtempd(2,2),gvecd(2)
9385 C 4/7/01 AL Components s1, s8, and s13 were removed, because they pertain to
9386 C the respective energy moment and not to the cluster cumulant.
9395 iti=itype2loc(itype(i))
9396 itk=itype2loc(itype(k))
9397 itk1=itype2loc(itype(k+1))
9398 itl=itype2loc(itype(l))
9399 itj=itype2loc(itype(j))
9400 cd write (2,*) 'itk',itk,' itk1',itk1,' itl',itl,' itj',itj
9401 cd write (2,*) 'i',i,' k',k,' j',j,' l',l
9402 cd if (i.ne.1 .or. j.ne.3 .or. k.ne.2 .or. l.ne.4) then
9407 cd & 'EELLO6: Contacts have occurred for peptide groups',i,j,
9409 cd call checkint_turn6(i,jj,kk,eel_turn6_num)
9413 derx_turn(lll,kkk,iii)=0.0d0
9420 eello6_5=eello6_graph4(l,k,j,i,kk,jj,2,.true.)
9422 cd write (2,*) 'eello6_5',eello6_5
9424 call transpose2(AEA(1,1,1),auxmat(1,1))
9425 call matmat2(EUg(1,1,i+1),auxmat(1,1),auxmat(1,1))
9426 ss1=scalar2(Ub2(1,i+2),b1(1,l))
9427 s1 = (auxmat(1,1)+auxmat(2,2))*ss1
9429 call matvec2(EUg(1,1,i+2),b1(1,l),vtemp1(1))
9430 call matvec2(AEA(1,1,1),vtemp1(1),vtemp1(1))
9431 s2 = scalar2(b1(1,k),vtemp1(1))
9433 call transpose2(AEA(1,1,2),atemp(1,1))
9434 call matmat2(atemp(1,1),EUg(1,1,i+4),atemp(1,1))
9435 call matvec2(Ug2(1,1,i+2),dd(1,1,k+1),vtemp2(1))
9436 s8 = -(atemp(1,1)+atemp(2,2))*scalar2(cc(1,1,l),vtemp2(1))
9438 call matmat2(EUg(1,1,i+3),AEA(1,1,2),auxmat(1,1))
9439 call matvec2(auxmat(1,1),Ub2(1,i+4),vtemp3(1))
9440 s12 = scalar2(Ub2(1,i+2),vtemp3(1))
9442 call transpose2(a_chuj(1,1,kk,i+1),achuj_temp(1,1))
9443 call matmat2(achuj_temp(1,1),EUg(1,1,i+2),gtemp(1,1))
9444 call matmat2(gtemp(1,1),EUg(1,1,i+3),gtemp(1,1))
9445 call matvec2(a_chuj(1,1,jj,i),Ub2(1,i+4),vtemp4(1))
9446 ss13 = scalar2(b1(1,k),vtemp4(1))
9447 s13 = (gtemp(1,1)+gtemp(2,2))*ss13
9449 c write (2,*) 's1,s2,s8,s12,s13',s1,s2,s8,s12,s13
9455 eel_turn6 = eello6_5 - 0.5d0*(s1+s2+s12+s8+s13)
9456 C Derivatives in gamma(i+2)
9461 call transpose2(AEA(1,1,1),auxmatd(1,1))
9462 call matmat2(EUgder(1,1,i+1),auxmatd(1,1),auxmatd(1,1))
9463 s1d = (auxmatd(1,1)+auxmatd(2,2))*ss1
9464 call transpose2(AEAderg(1,1,2),atempd(1,1))
9465 call matmat2(atempd(1,1),EUg(1,1,i+4),atempd(1,1))
9466 s8d = -(atempd(1,1)+atempd(2,2))*scalar2(cc(1,1,l),vtemp2(1))
9468 call matmat2(EUg(1,1,i+3),AEAderg(1,1,2),auxmatd(1,1))
9469 call matvec2(auxmatd(1,1),Ub2(1,i+4),vtemp3d(1))
9470 s12d = scalar2(Ub2(1,i+2),vtemp3d(1))
9476 gel_loc_turn6(i)=gel_loc_turn6(i)-0.5d0*ekont*(s1d+s8d+s12d)
9477 C Derivatives in gamma(i+3)
9479 call transpose2(AEA(1,1,1),auxmatd(1,1))
9480 call matmat2(EUg(1,1,i+1),auxmatd(1,1),auxmatd(1,1))
9481 ss1d=scalar2(Ub2der(1,i+2),b1(1,l))
9482 s1d = (auxmatd(1,1)+auxmatd(2,2))*ss1d
9484 call matvec2(EUgder(1,1,i+2),b1(1,l),vtemp1d(1))
9485 call matvec2(AEA(1,1,1),vtemp1d(1),vtemp1d(1))
9486 s2d = scalar2(b1(1,k),vtemp1d(1))
9488 call matvec2(Ug2der(1,1,i+2),dd(1,1,k+1),vtemp2d(1))
9489 s8d = -(atemp(1,1)+atemp(2,2))*scalar2(cc(1,1,l),vtemp2d(1))
9491 s12d = scalar2(Ub2der(1,i+2),vtemp3(1))
9493 call matmat2(achuj_temp(1,1),EUgder(1,1,i+2),gtempd(1,1))
9494 call matmat2(gtempd(1,1),EUg(1,1,i+3),gtempd(1,1))
9495 s13d = (gtempd(1,1)+gtempd(2,2))*ss13
9503 gel_loc_turn6(i+1)=gel_loc_turn6(i+1)
9504 & -0.5d0*ekont*(s1d+s2d+s8d+s12d+s13d)
9506 gel_loc_turn6(i+1)=gel_loc_turn6(i+1)
9507 & -0.5d0*ekont*(s2d+s12d)
9509 C Derivatives in gamma(i+4)
9510 call matmat2(EUgder(1,1,i+3),AEA(1,1,2),auxmatd(1,1))
9511 call matvec2(auxmatd(1,1),Ub2(1,i+4),vtemp3d(1))
9512 s12d = scalar2(Ub2(1,i+2),vtemp3d(1))
9514 call matmat2(achuj_temp(1,1),EUg(1,1,i+2),gtempd(1,1))
9515 call matmat2(gtempd(1,1),EUgder(1,1,i+3),gtempd(1,1))
9516 s13d = (gtempd(1,1)+gtempd(2,2))*ss13
9524 gel_loc_turn6(i+2)=gel_loc_turn6(i+2)-0.5d0*ekont*(s12d+s13d)
9526 gel_loc_turn6(i+2)=gel_loc_turn6(i+2)-0.5d0*ekont*(s12d)
9528 C Derivatives in gamma(i+5)
9530 call transpose2(AEAderg(1,1,1),auxmatd(1,1))
9531 call matmat2(EUg(1,1,i+1),auxmatd(1,1),auxmatd(1,1))
9532 s1d = (auxmatd(1,1)+auxmatd(2,2))*ss1
9534 call matvec2(EUg(1,1,i+2),b1(1,l),vtemp1d(1))
9535 call matvec2(AEAderg(1,1,1),vtemp1d(1),vtemp1d(1))
9536 s2d = scalar2(b1(1,k),vtemp1d(1))
9538 call transpose2(AEA(1,1,2),atempd(1,1))
9539 call matmat2(atempd(1,1),EUgder(1,1,i+4),atempd(1,1))
9540 s8d = -(atempd(1,1)+atempd(2,2))*scalar2(cc(1,1,l),vtemp2(1))
9542 call matvec2(auxmat(1,1),Ub2der(1,i+4),vtemp3d(1))
9543 s12d = scalar2(Ub2(1,i+2),vtemp3d(1))
9545 call matvec2(a_chuj(1,1,jj,i),Ub2der(1,i+4),vtemp4d(1))
9546 ss13d = scalar2(b1(1,k),vtemp4d(1))
9547 s13d = (gtemp(1,1)+gtemp(2,2))*ss13d
9555 gel_loc_turn6(i+3)=gel_loc_turn6(i+3)
9556 & -0.5d0*ekont*(s1d+s2d+s8d+s12d+s13d)
9558 gel_loc_turn6(i+3)=gel_loc_turn6(i+3)
9559 & -0.5d0*ekont*(s2d+s12d)
9561 C Cartesian derivatives
9566 call transpose2(AEAderx(1,1,lll,kkk,iii,1),auxmatd(1,1))
9567 call matmat2(EUg(1,1,i+1),auxmatd(1,1),auxmatd(1,1))
9568 s1d = (auxmatd(1,1)+auxmatd(2,2))*ss1
9570 call matvec2(EUg(1,1,i+2),b1(1,l),vtemp1(1))
9571 call matvec2(AEAderx(1,1,lll,kkk,iii,1),vtemp1(1),
9573 s2d = scalar2(b1(1,k),vtemp1d(1))
9575 call transpose2(AEAderx(1,1,lll,kkk,iii,2),atempd(1,1))
9576 call matmat2(atempd(1,1),EUg(1,1,i+4),atempd(1,1))
9577 s8d = -(atempd(1,1)+atempd(2,2))*
9578 & scalar2(cc(1,1,l),vtemp2(1))
9580 call matmat2(EUg(1,1,i+3),AEAderx(1,1,lll,kkk,iii,2),
9582 call matvec2(auxmatd(1,1),Ub2(1,i+4),vtemp3d(1))
9583 s12d = scalar2(Ub2(1,i+2),vtemp3d(1))
9590 derx_turn(lll,kkk,iii) = derx_turn(lll,kkk,iii)
9593 derx_turn(lll,kkk,iii) = derx_turn(lll,kkk,iii)
9597 derx_turn(lll,kkk,3-iii) = derx_turn(lll,kkk,3-iii)
9598 & - 0.5d0*(s8d+s12d)
9600 derx_turn(lll,kkk,3-iii) = derx_turn(lll,kkk,3-iii)
9609 call transpose2(a_chuj_der(1,1,lll,kkk,kk,i+1),
9611 call matmat2(achuj_tempd(1,1),EUg(1,1,i+2),gtempd(1,1))
9612 call matmat2(gtempd(1,1),EUg(1,1,i+3),gtempd(1,1))
9613 s13d=(gtempd(1,1)+gtempd(2,2))*ss13
9614 derx_turn(lll,kkk,2) = derx_turn(lll,kkk,2)-0.5d0*s13d
9615 call matvec2(a_chuj_der(1,1,lll,kkk,jj,i),Ub2(1,i+4),
9617 ss13d = scalar2(b1(1,k),vtemp4d(1))
9618 s13d = (gtemp(1,1)+gtemp(2,2))*ss13d
9619 derx_turn(lll,kkk,1) = derx_turn(lll,kkk,1)-0.5d0*s13d
9623 cd write(iout,*) 'eel6_turn6',eel_turn6,' eel_turn6_num',
9624 cd & 16*eel_turn6_num
9626 if (j.lt.nres-1) then
9633 if (l.lt.nres-1) then
9641 cgrad ggg1(ll)=eel_turn6*g_contij(ll,1)
9642 cgrad ggg2(ll)=eel_turn6*g_contij(ll,2)
9643 cgrad ghalf=0.5d0*ggg1(ll)
9645 gturn6ij=eel_turn6*g_contij(ll,1)+ekont*derx_turn(ll,1,1)
9646 gturn6kl=eel_turn6*g_contij(ll,2)+ekont*derx_turn(ll,1,2)
9647 gcorr6_turn(ll,i)=gcorr6_turn(ll,i)!+ghalf
9648 & +ekont*derx_turn(ll,2,1)
9649 gcorr6_turn(ll,i+1)=gcorr6_turn(ll,i+1)+ekont*derx_turn(ll,3,1)
9650 gcorr6_turn(ll,j)=gcorr6_turn(ll,j)!+ghalf
9651 & +ekont*derx_turn(ll,4,1)
9652 gcorr6_turn(ll,j1)=gcorr6_turn(ll,j1)+ekont*derx_turn(ll,5,1)
9653 gcorr6_turn_long(ll,j)=gcorr6_turn_long(ll,j)+gturn6ij
9654 gcorr6_turn_long(ll,i)=gcorr6_turn_long(ll,i)-gturn6ij
9655 cgrad ghalf=0.5d0*ggg2(ll)
9657 gcorr6_turn(ll,k)=gcorr6_turn(ll,k)!+ghalf
9658 & +ekont*derx_turn(ll,2,2)
9659 gcorr6_turn(ll,k+1)=gcorr6_turn(ll,k+1)+ekont*derx_turn(ll,3,2)
9660 gcorr6_turn(ll,l)=gcorr6_turn(ll,l)!+ghalf
9661 & +ekont*derx_turn(ll,4,2)
9662 gcorr6_turn(ll,l1)=gcorr6_turn(ll,l1)+ekont*derx_turn(ll,5,2)
9663 gcorr6_turn_long(ll,l)=gcorr6_turn_long(ll,l)+gturn6kl
9664 gcorr6_turn_long(ll,k)=gcorr6_turn_long(ll,k)-gturn6kl
9669 cgrad gcorr6_turn(ll,m)=gcorr6_turn(ll,m)+ggg1(ll)
9674 cgrad gcorr6_turn(ll,m)=gcorr6_turn(ll,m)+ggg2(ll)
9680 cgrad gcorr6_turn(ll,m)=gcorr6_turn(ll,m)+ekont*derx_turn(ll,1,1)
9685 cgrad gcorr6_turn(ll,m)=gcorr6_turn(ll,m)+ekont*derx_turn(ll,1,2)
9689 cd write (2,*) iii,g_corr6_loc(iii)
9692 eello_turn6=ekont*eel_turn6
9693 cd write (2,*) 'ekont',ekont
9694 cd write (2,*) 'eel_turn6',ekont*eel_turn6
9698 crc-------------------------------------------------
9699 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
9700 subroutine Eliptransfer(eliptran)
9701 implicit real*8 (a-h,o-z)
9702 include 'DIMENSIONS'
9703 include 'DIMENSIONS.ZSCOPT'
9704 include 'COMMON.GEO'
9705 include 'COMMON.VAR'
9706 include 'COMMON.LOCAL'
9707 include 'COMMON.CHAIN'
9708 include 'COMMON.DERIV'
9709 include 'COMMON.INTERACT'
9710 include 'COMMON.IOUNITS'
9711 include 'COMMON.CALC'
9712 include 'COMMON.CONTROL'
9713 include 'COMMON.SPLITELE'
9714 include 'COMMON.SBRIDGE'
9715 C this is done by Adasko
9719 C--bordliptop-- buffore starts
9720 C--bufliptop--- here true lipid starts
9722 C--buflipbot--- lipid ends buffore starts
9723 C--bordlipbot--buffore ends
9727 if (itype(i).eq.ntyp1) cycle
9729 positi=(mod(((c(3,i)+c(3,i+1))/2.0d0),boxzsize))
9730 if (positi.le.0) positi=positi+boxzsize
9732 C first for peptide groups
9733 c for each residue check if it is in lipid or lipid water border area
9734 if ((positi.gt.bordlipbot)
9735 &.and.(positi.lt.bordliptop)) then
9736 C the energy transfer exist
9737 if (positi.lt.buflipbot) then
9738 C what fraction I am in
9740 & ((positi-bordlipbot)/lipbufthick)
9741 C lipbufthick is thickenes of lipid buffore
9742 sslip=sscalelip(fracinbuf)
9743 ssgradlip=-sscagradlip(fracinbuf)/lipbufthick
9744 eliptran=eliptran+sslip*pepliptran
9745 gliptranc(3,i)=gliptranc(3,i)+ssgradlip*pepliptran/2.0d0
9746 gliptranc(3,i-1)=gliptranc(3,i-1)+ssgradlip*pepliptran/2.0d0
9747 C gliptranc(3,i-2)=gliptranc(3,i)+ssgradlip*pepliptran
9748 elseif (positi.gt.bufliptop) then
9749 fracinbuf=1.0d0-((bordliptop-positi)/lipbufthick)
9750 sslip=sscalelip(fracinbuf)
9751 ssgradlip=sscagradlip(fracinbuf)/lipbufthick
9752 eliptran=eliptran+sslip*pepliptran
9753 gliptranc(3,i)=gliptranc(3,i)+ssgradlip*pepliptran/2.0d0
9754 gliptranc(3,i-1)=gliptranc(3,i-1)+ssgradlip*pepliptran/2.0d0
9755 C gliptranc(3,i-2)=gliptranc(3,i)+ssgradlip*pepliptran
9756 C print *, "doing sscalefor top part"
9757 C print *,i,sslip,fracinbuf,ssgradlip
9759 eliptran=eliptran+pepliptran
9760 C print *,"I am in true lipid"
9763 C eliptran=elpitran+0.0 ! I am in water
9766 C print *, "nic nie bylo w lipidzie?"
9767 C now multiply all by the peptide group transfer factor
9768 C eliptran=eliptran*pepliptran
9769 C now the same for side chains
9772 if (itype(i).eq.ntyp1) cycle
9773 positi=(mod(c(3,i+nres),boxzsize))
9774 if (positi.le.0) positi=positi+boxzsize
9775 C print *,mod(c(3,i+nres),boxzsize),bordlipbot,bordliptop
9776 c for each residue check if it is in lipid or lipid water border area
9777 C respos=mod(c(3,i+nres),boxzsize)
9778 C print *,positi,bordlipbot,buflipbot
9779 if ((positi.gt.bordlipbot)
9780 & .and.(positi.lt.bordliptop)) then
9781 C the energy transfer exist
9782 if (positi.lt.buflipbot) then
9784 & ((positi-bordlipbot)/lipbufthick)
9785 C lipbufthick is thickenes of lipid buffore
9786 sslip=sscalelip(fracinbuf)
9787 ssgradlip=-sscagradlip(fracinbuf)/lipbufthick
9788 eliptran=eliptran+sslip*liptranene(itype(i))
9789 gliptranx(3,i)=gliptranx(3,i)
9790 &+ssgradlip*liptranene(itype(i))
9791 gliptranc(3,i-1)= gliptranc(3,i-1)
9792 &+ssgradlip*liptranene(itype(i))
9793 C print *,"doing sccale for lower part"
9794 elseif (positi.gt.bufliptop) then
9796 &((bordliptop-positi)/lipbufthick)
9797 sslip=sscalelip(fracinbuf)
9798 ssgradlip=sscagradlip(fracinbuf)/lipbufthick
9799 eliptran=eliptran+sslip*liptranene(itype(i))
9800 gliptranx(3,i)=gliptranx(3,i)
9801 &+ssgradlip*liptranene(itype(i))
9802 gliptranc(3,i-1)= gliptranc(3,i-1)
9803 &+ssgradlip*liptranene(itype(i))
9804 C print *, "doing sscalefor top part",sslip,fracinbuf
9806 eliptran=eliptran+liptranene(itype(i))
9807 C print *,"I am in true lipid"
9809 endif ! if in lipid or buffor
9811 C eliptran=elpitran+0.0 ! I am in water
9817 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
9819 SUBROUTINE MATVEC2(A1,V1,V2)
9820 implicit real*8 (a-h,o-z)
9821 include 'DIMENSIONS'
9822 DIMENSION A1(2,2),V1(2),V2(2)
9826 c 3 VI=VI+A1(I,K)*V1(K)
9830 vaux1=a1(1,1)*v1(1)+a1(1,2)*v1(2)
9831 vaux2=a1(2,1)*v1(1)+a1(2,2)*v1(2)
9836 C---------------------------------------
9837 SUBROUTINE MATMAT2(A1,A2,A3)
9838 implicit real*8 (a-h,o-z)
9839 include 'DIMENSIONS'
9840 DIMENSION A1(2,2),A2(2,2),A3(2,2)
9841 c DIMENSION AI3(2,2)
9845 c A3IJ=A3IJ+A1(I,K)*A2(K,J)
9851 ai3_11=a1(1,1)*a2(1,1)+a1(1,2)*a2(2,1)
9852 ai3_12=a1(1,1)*a2(1,2)+a1(1,2)*a2(2,2)
9853 ai3_21=a1(2,1)*a2(1,1)+a1(2,2)*a2(2,1)
9854 ai3_22=a1(2,1)*a2(1,2)+a1(2,2)*a2(2,2)
9862 c-------------------------------------------------------------------------
9863 double precision function scalar2(u,v)
9865 double precision u(2),v(2)
9868 scalar2=u(1)*v(1)+u(2)*v(2)
9872 C-----------------------------------------------------------------------------
9874 subroutine transpose2(a,at)
9876 double precision a(2,2),at(2,2)
9883 c--------------------------------------------------------------------------
9884 subroutine transpose(n,a,at)
9887 double precision a(n,n),at(n,n)
9895 C---------------------------------------------------------------------------
9896 subroutine prodmat3(a1,a2,kk,transp,prod)
9899 double precision a1(2,2),a2(2,2),a2t(2,2),kk(2,2),prod(2,2)
9901 crc double precision auxmat(2,2),prod_(2,2)
9904 crc call transpose2(kk(1,1),auxmat(1,1))
9905 crc call matmat2(a1(1,1),auxmat(1,1),auxmat(1,1))
9906 crc call matmat2(auxmat(1,1),a2(1,1),prod_(1,1))
9908 prod(1,1)=(a1(1,1)*kk(1,1)+a1(1,2)*kk(1,2))*a2(1,1)
9909 & +(a1(1,1)*kk(2,1)+a1(1,2)*kk(2,2))*a2(2,1)
9910 prod(1,2)=(a1(1,1)*kk(1,1)+a1(1,2)*kk(1,2))*a2(1,2)
9911 & +(a1(1,1)*kk(2,1)+a1(1,2)*kk(2,2))*a2(2,2)
9912 prod(2,1)=(a1(2,1)*kk(1,1)+a1(2,2)*kk(1,2))*a2(1,1)
9913 & +(a1(2,1)*kk(2,1)+a1(2,2)*kk(2,2))*a2(2,1)
9914 prod(2,2)=(a1(2,1)*kk(1,1)+a1(2,2)*kk(1,2))*a2(1,2)
9915 & +(a1(2,1)*kk(2,1)+a1(2,2)*kk(2,2))*a2(2,2)
9918 crc call matmat2(a1(1,1),kk(1,1),auxmat(1,1))
9919 crc call matmat2(auxmat(1,1),a2(1,1),prod_(1,1))
9921 prod(1,1)=(a1(1,1)*kk(1,1)+a1(1,2)*kk(2,1))*a2(1,1)
9922 & +(a1(1,1)*kk(1,2)+a1(1,2)*kk(2,2))*a2(2,1)
9923 prod(1,2)=(a1(1,1)*kk(1,1)+a1(1,2)*kk(2,1))*a2(1,2)
9924 & +(a1(1,1)*kk(1,2)+a1(1,2)*kk(2,2))*a2(2,2)
9925 prod(2,1)=(a1(2,1)*kk(1,1)+a1(2,2)*kk(2,1))*a2(1,1)
9926 & +(a1(2,1)*kk(1,2)+a1(2,2)*kk(2,2))*a2(2,1)
9927 prod(2,2)=(a1(2,1)*kk(1,1)+a1(2,2)*kk(2,1))*a2(1,2)
9928 & +(a1(2,1)*kk(1,2)+a1(2,2)*kk(2,2))*a2(2,2)
9931 c call transpose2(a2(1,1),a2t(1,1))
9934 crc print *,((prod_(i,j),i=1,2),j=1,2)
9935 crc print *,((prod(i,j),i=1,2),j=1,2)
9939 C-----------------------------------------------------------------------------
9940 double precision function scalar(u,v)
9942 double precision u(3),v(3)
9952 C-----------------------------------------------------------------------
9953 double precision function sscale(r)
9954 double precision r,gamm
9955 include "COMMON.SPLITELE"
9956 if(r.lt.r_cut-rlamb) then
9958 else if(r.le.r_cut.and.r.ge.r_cut-rlamb) then
9959 gamm=(r-(r_cut-rlamb))/rlamb
9960 sscale=1.0d0+gamm*gamm*(2*gamm-3.0d0)
9966 C-----------------------------------------------------------------------
9967 C-----------------------------------------------------------------------
9968 double precision function sscagrad(r)
9969 double precision r,gamm
9970 include "COMMON.SPLITELE"
9971 if(r.lt.r_cut-rlamb) then
9973 else if(r.le.r_cut.and.r.ge.r_cut-rlamb) then
9974 gamm=(r-(r_cut-rlamb))/rlamb
9975 sscagrad=gamm*(6*gamm-6.0d0)/rlamb
9981 C-----------------------------------------------------------------------
9982 C-----------------------------------------------------------------------
9983 double precision function sscalelip(r)
9984 double precision r,gamm
9985 include "COMMON.SPLITELE"
9986 C if(r.lt.r_cut-rlamb) then
9988 C else if(r.le.r_cut.and.r.ge.r_cut-rlamb) then
9989 C gamm=(r-(r_cut-rlamb))/rlamb
9990 sscalelip=1.0d0+r*r*(2*r-3.0d0)
9996 C-----------------------------------------------------------------------
9997 double precision function sscagradlip(r)
9998 double precision r,gamm
9999 include "COMMON.SPLITELE"
10000 C if(r.lt.r_cut-rlamb) then
10002 C else if(r.le.r_cut.and.r.ge.r_cut-rlamb) then
10003 C gamm=(r-(r_cut-rlamb))/rlamb
10004 sscagradlip=r*(6*r-6.0d0)
10011 C-----------------------------------------------------------------------
10012 subroutine set_shield_fac
10013 implicit real*8 (a-h,o-z)
10014 include 'DIMENSIONS'
10015 include 'DIMENSIONS.ZSCOPT'
10016 include 'COMMON.CHAIN'
10017 include 'COMMON.DERIV'
10018 include 'COMMON.IOUNITS'
10019 include 'COMMON.SHIELD'
10020 include 'COMMON.INTERACT'
10021 C this is the squar root 77 devided by 81 the epislion in lipid (in protein)
10022 double precision div77_81/0.974996043d0/,
10023 &div4_81/0.2222222222d0/,sh_frac_dist_grad(3)
10025 C the vector between center of side_chain and peptide group
10026 double precision pep_side(3),long,side_calf(3),
10027 &pept_group(3),costhet_grad(3),cosphi_grad_long(3),
10028 &cosphi_grad_loc(3),pep_side_norm(3),side_calf_norm(3)
10029 C the line belowe needs to be changed for FGPROC>1
10031 if ((itype(i).eq.ntyp1).and.itype(i+1).eq.ntyp1) cycle
10033 Cif there two consequtive dummy atoms there is no peptide group between them
10034 C the line below has to be changed for FGPROC>1
10037 if ((itype(k).eq.ntyp1).or.(itype(k).eq.10)) cycle
10041 C first lets set vector conecting the ithe side-chain with kth side-chain
10042 pep_side(j)=c(j,k+nres)-(c(j,i)+c(j,i+1))/2.0d0
10043 C pep_side(j)=2.0d0
10044 C and vector conecting the side-chain with its proper calfa
10045 side_calf(j)=c(j,k+nres)-c(j,k)
10046 C side_calf(j)=2.0d0
10047 pept_group(j)=c(j,i)-c(j,i+1)
10048 C lets have their lenght
10049 dist_pep_side=pep_side(j)**2+dist_pep_side
10050 dist_side_calf=dist_side_calf+side_calf(j)**2
10051 dist_pept_group=dist_pept_group+pept_group(j)**2
10053 dist_pep_side=dsqrt(dist_pep_side)
10054 dist_pept_group=dsqrt(dist_pept_group)
10055 dist_side_calf=dsqrt(dist_side_calf)
10057 pep_side_norm(j)=pep_side(j)/dist_pep_side
10058 side_calf_norm(j)=dist_side_calf
10060 C now sscale fraction
10061 sh_frac_dist=-(dist_pep_side-rpp(1,1)-buff_shield)/buff_shield
10062 C print *,buff_shield,"buff"
10064 if (sh_frac_dist.le.0.0) cycle
10065 C If we reach here it means that this side chain reaches the shielding sphere
10066 C Lets add him to the list for gradient
10067 ishield_list(i)=ishield_list(i)+1
10068 C ishield_list is a list of non 0 side-chain that contribute to factor gradient
10069 C this list is essential otherwise problem would be O3
10070 shield_list(ishield_list(i),i)=k
10071 C Lets have the sscale value
10072 if (sh_frac_dist.gt.1.0) then
10073 scale_fac_dist=1.0d0
10075 sh_frac_dist_grad(j)=0.0d0
10078 scale_fac_dist=-sh_frac_dist*sh_frac_dist
10079 & *(2.0*sh_frac_dist-3.0d0)
10080 fac_help_scale=6.0*(sh_frac_dist-sh_frac_dist**2)
10081 & /dist_pep_side/buff_shield*0.5
10082 C remember for the final gradient multiply sh_frac_dist_grad(j)
10083 C for side_chain by factor -2 !
10085 sh_frac_dist_grad(j)=fac_help_scale*pep_side(j)
10086 C print *,"jestem",scale_fac_dist,fac_help_scale,
10087 C & sh_frac_dist_grad(j)
10090 C if ((i.eq.3).and.(k.eq.2)) then
10091 C print *,i,sh_frac_dist,dist_pep,fac_help_scale,scale_fac_dist
10095 C this is what is now we have the distance scaling now volume...
10096 short=short_r_sidechain(itype(k))
10097 long=long_r_sidechain(itype(k))
10098 costhet=1.0d0/dsqrt(1.0+short**2/dist_pep_side**2)
10101 costhet_fac=costhet**3*short**2*(-0.5)/dist_pep_side**4
10102 C costhet_fac=0.0d0
10104 costhet_grad(j)=costhet_fac*pep_side(j)
10106 C remember for the final gradient multiply costhet_grad(j)
10107 C for side_chain by factor -2 !
10108 C fac alfa is angle between CB_k,CA_k, CA_i,CA_i+1
10109 C pep_side0pept_group is vector multiplication
10110 pep_side0pept_group=0.0
10112 pep_side0pept_group=pep_side0pept_group+pep_side(j)*side_calf(j)
10114 cosalfa=(pep_side0pept_group/
10115 & (dist_pep_side*dist_side_calf))
10116 fac_alfa_sin=1.0-cosalfa**2
10117 fac_alfa_sin=dsqrt(fac_alfa_sin)
10118 rkprim=fac_alfa_sin*(long-short)+short
10120 cosphi=1.0d0/dsqrt(1.0+rkprim**2/dist_pep_side**2)
10121 cosphi_fac=cosphi**3*rkprim**2*(-0.5)/dist_pep_side**4
10124 cosphi_grad_long(j)=cosphi_fac*pep_side(j)
10125 &+cosphi**3*0.5/dist_pep_side**2*(-rkprim)
10126 &*(long-short)/fac_alfa_sin*cosalfa/
10127 &((dist_pep_side*dist_side_calf))*
10128 &((side_calf(j))-cosalfa*
10129 &((pep_side(j)/dist_pep_side)*dist_side_calf))
10131 cosphi_grad_loc(j)=cosphi**3*0.5/dist_pep_side**2*(-rkprim)
10132 &*(long-short)/fac_alfa_sin*cosalfa
10133 &/((dist_pep_side*dist_side_calf))*
10135 &cosalfa*side_calf(j)/dist_side_calf*dist_pep_side)
10138 VofOverlap=VSolvSphere/2.0d0*(1.0-costhet)*(1.0-cosphi)
10141 C now the gradient...
10142 C grad_shield is gradient of Calfa for peptide groups
10143 C write(iout,*) "shield_compon",i,k,VSolvSphere,scale_fac_dist,
10145 C write(iout,*) "cosphi_compon",i,k,pep_side0pept_group,
10146 C & dist_pep_side,dist_side_calf,c(1,k+nres),c(1,k),itype(k)
10148 grad_shield(j,i)=grad_shield(j,i)
10149 C gradient po skalowaniu
10150 & +(sh_frac_dist_grad(j)
10151 C gradient po costhet
10152 &-scale_fac_dist*costhet_grad(j)/(1.0-costhet)
10153 &-scale_fac_dist*(cosphi_grad_long(j))
10154 &/(1.0-cosphi) )*div77_81
10156 C grad_shield_side is Cbeta sidechain gradient
10157 grad_shield_side(j,ishield_list(i),i)=
10158 & (sh_frac_dist_grad(j)*(-2.0d0)
10159 & +scale_fac_dist*costhet_grad(j)*2.0d0/(1.0-costhet)
10160 & +scale_fac_dist*(cosphi_grad_long(j))
10161 & *2.0d0/(1.0-cosphi))
10162 & *div77_81*VofOverlap
10164 grad_shield_loc(j,ishield_list(i),i)=
10165 & scale_fac_dist*cosphi_grad_loc(j)
10166 & *2.0d0/(1.0-cosphi)
10167 & *div77_81*VofOverlap
10169 VolumeTotal=VolumeTotal+VofOverlap*scale_fac_dist
10171 fac_shield(i)=VolumeTotal*div77_81+div4_81
10172 C write(2,*) "TOTAL VOLUME",i,VolumeTotal,fac_shield(i)
10176 C--------------------------------------------------------------------------
10177 C first for shielding is setting of function of side-chains
10178 subroutine set_shield_fac2
10179 implicit real*8 (a-h,o-z)
10180 include 'DIMENSIONS'
10181 include 'DIMENSIONS.ZSCOPT'
10182 include 'COMMON.CHAIN'
10183 include 'COMMON.DERIV'
10184 include 'COMMON.IOUNITS'
10185 include 'COMMON.SHIELD'
10186 include 'COMMON.INTERACT'
10187 C this is the squar root 77 devided by 81 the epislion in lipid (in protein)
10188 double precision div77_81/0.974996043d0/,
10189 &div4_81/0.2222222222d0/,sh_frac_dist_grad(3)
10191 C the vector between center of side_chain and peptide group
10192 double precision pep_side(3),long,side_calf(3),
10193 &pept_group(3),costhet_grad(3),cosphi_grad_long(3),
10194 &cosphi_grad_loc(3),pep_side_norm(3),side_calf_norm(3)
10195 C the line belowe needs to be changed for FGPROC>1
10197 if ((itype(i).eq.ntyp1).and.itype(i+1).eq.ntyp1) cycle
10199 Cif there two consequtive dummy atoms there is no peptide group between them
10200 C the line below has to be changed for FGPROC>1
10203 if ((itype(k).eq.ntyp1).or.(itype(k).eq.10)) cycle
10207 C first lets set vector conecting the ithe side-chain with kth side-chain
10208 pep_side(j)=c(j,k+nres)-(c(j,i)+c(j,i+1))/2.0d0
10209 C pep_side(j)=2.0d0
10210 C and vector conecting the side-chain with its proper calfa
10211 side_calf(j)=c(j,k+nres)-c(j,k)
10212 C side_calf(j)=2.0d0
10213 pept_group(j)=c(j,i)-c(j,i+1)
10214 C lets have their lenght
10215 dist_pep_side=pep_side(j)**2+dist_pep_side
10216 dist_side_calf=dist_side_calf+side_calf(j)**2
10217 dist_pept_group=dist_pept_group+pept_group(j)**2
10219 dist_pep_side=dsqrt(dist_pep_side)
10220 dist_pept_group=dsqrt(dist_pept_group)
10221 dist_side_calf=dsqrt(dist_side_calf)
10223 pep_side_norm(j)=pep_side(j)/dist_pep_side
10224 side_calf_norm(j)=dist_side_calf
10226 C now sscale fraction
10227 sh_frac_dist=-(dist_pep_side-rpp(1,1)-buff_shield)/buff_shield
10228 C print *,buff_shield,"buff"
10230 if (sh_frac_dist.le.0.0) cycle
10231 C If we reach here it means that this side chain reaches the shielding sphere
10232 C Lets add him to the list for gradient
10233 ishield_list(i)=ishield_list(i)+1
10234 C ishield_list is a list of non 0 side-chain that contribute to factor gradient
10235 C this list is essential otherwise problem would be O3
10236 shield_list(ishield_list(i),i)=k
10237 C Lets have the sscale value
10238 if (sh_frac_dist.gt.1.0) then
10239 scale_fac_dist=1.0d0
10241 sh_frac_dist_grad(j)=0.0d0
10244 scale_fac_dist=-sh_frac_dist*sh_frac_dist
10245 & *(2.0d0*sh_frac_dist-3.0d0)
10246 fac_help_scale=6.0d0*(sh_frac_dist-sh_frac_dist**2)
10247 & /dist_pep_side/buff_shield*0.5d0
10248 C remember for the final gradient multiply sh_frac_dist_grad(j)
10249 C for side_chain by factor -2 !
10251 sh_frac_dist_grad(j)=fac_help_scale*pep_side(j)
10252 C sh_frac_dist_grad(j)=0.0d0
10253 C scale_fac_dist=1.0d0
10254 C print *,"jestem",scale_fac_dist,fac_help_scale,
10255 C & sh_frac_dist_grad(j)
10258 C this is what is now we have the distance scaling now volume...
10259 short=short_r_sidechain(itype(k))
10260 long=long_r_sidechain(itype(k))
10261 costhet=1.0d0/dsqrt(1.0d0+short**2/dist_pep_side**2)
10262 sinthet=short/dist_pep_side*costhet
10266 costhet_fac=costhet**3*short**2*(-0.5d0)/dist_pep_side**4
10267 C sinthet_fac=costhet**2*0.5d0*(short**3/dist_pep_side**4*costhet
10268 C & -short/dist_pep_side**2/costhet)
10269 C costhet_fac=0.0d0
10271 costhet_grad(j)=costhet_fac*pep_side(j)
10273 C remember for the final gradient multiply costhet_grad(j)
10274 C for side_chain by factor -2 !
10275 C fac alfa is angle between CB_k,CA_k, CA_i,CA_i+1
10276 C pep_side0pept_group is vector multiplication
10277 pep_side0pept_group=0.0d0
10279 pep_side0pept_group=pep_side0pept_group+pep_side(j)*side_calf(j)
10281 cosalfa=(pep_side0pept_group/
10282 & (dist_pep_side*dist_side_calf))
10283 fac_alfa_sin=1.0d0-cosalfa**2
10284 fac_alfa_sin=dsqrt(fac_alfa_sin)
10285 rkprim=fac_alfa_sin*(long-short)+short
10289 cosphi=1.0d0/dsqrt(1.0d0+rkprim**2/dist_pep_side**2)
10291 cosphi_fac=cosphi**3*rkprim**2*(-0.5d0)/dist_pep_side**4
10292 sinphi=rkprim/dist_pep_side/dsqrt(1.0d0+rkprim**2/
10293 & dist_pep_side**2)
10296 cosphi_grad_long(j)=cosphi_fac*pep_side(j)
10297 &+cosphi**3*0.5d0/dist_pep_side**2*(-rkprim)
10298 &*(long-short)/fac_alfa_sin*cosalfa/
10299 &((dist_pep_side*dist_side_calf))*
10300 &((side_calf(j))-cosalfa*
10301 &((pep_side(j)/dist_pep_side)*dist_side_calf))
10302 C cosphi_grad_long(j)=0.0d0
10303 cosphi_grad_loc(j)=cosphi**3*0.5d0/dist_pep_side**2*(-rkprim)
10304 &*(long-short)/fac_alfa_sin*cosalfa
10305 &/((dist_pep_side*dist_side_calf))*
10307 &cosalfa*side_calf(j)/dist_side_calf*dist_pep_side)
10308 C cosphi_grad_loc(j)=0.0d0
10310 C print *,sinphi,sinthet
10311 VofOverlap=VSolvSphere/2.0d0*(1.0d0-dsqrt(1.0d0-sinphi*sinthet))
10314 C now the gradient...
10316 grad_shield(j,i)=grad_shield(j,i)
10317 C gradient po skalowaniu
10318 & +(sh_frac_dist_grad(j)*VofOverlap
10319 C gradient po costhet
10320 & +scale_fac_dist*VSolvSphere/VSolvSphere_div/4.0d0*
10321 &(1.0d0/(-dsqrt(1.0d0-sinphi*sinthet))*(
10322 & sinphi/sinthet*costhet*costhet_grad(j)
10323 & +sinthet/sinphi*cosphi*cosphi_grad_long(j)))
10325 C grad_shield_side is Cbeta sidechain gradient
10326 grad_shield_side(j,ishield_list(i),i)=
10327 & (sh_frac_dist_grad(j)*(-2.0d0)
10329 & -scale_fac_dist*VSolvSphere/VSolvSphere_div/2.0d0*
10330 &(1.0d0/(-dsqrt(1.0d0-sinphi*sinthet))*(
10331 & sinphi/sinthet*costhet*costhet_grad(j)
10332 & +sinthet/sinphi*cosphi*cosphi_grad_long(j)))
10335 grad_shield_loc(j,ishield_list(i),i)=
10336 & scale_fac_dist*VSolvSphere/VSolvSphere_div/2.0d0*
10337 &(1.0d0/(dsqrt(1.0d0-sinphi*sinthet))*(
10338 & sinthet/sinphi*cosphi*cosphi_grad_loc(j)
10342 VolumeTotal=VolumeTotal+VofOverlap*scale_fac_dist
10344 fac_shield(i)=VolumeTotal*wshield+(1.0d0-wshield)
10345 c write(2,*) "TOTAL VOLUME",i,VolumeTotal,fac_shield(i),
10346 c & " wshield",wshield
10347 c write(2,*) "TU",rpp(1,1),short,long,buff_shield
10351 C--------------------------------------------------------------------------
10352 double precision function tschebyshev(m,n,x,y)
10354 include "DIMENSIONS"
10356 double precision x(n),y,yy(0:maxvar),aux
10357 c Tschebyshev polynomial. Note that the first term is omitted
10358 c m=0: the constant term is included
10359 c m=1: the constant term is not included
10363 yy(i)=2*yy(1)*yy(i-1)-yy(i-2)
10372 C--------------------------------------------------------------------------
10373 double precision function gradtschebyshev(m,n,x,y)
10375 include "DIMENSIONS"
10377 double precision x(n+1),y,yy(0:maxvar),aux
10378 c Tschebyshev polynomial. Note that the first term is omitted
10379 c m=0: the constant term is included
10380 c m=1: the constant term is not included
10384 yy(i)=2*y*yy(i-1)-yy(i-2)
10388 aux=aux+x(i+1)*yy(i)*(i+1)
10389 C print *, x(i+1),yy(i),i
10391 gradtschebyshev=aux
10394 c----------------------------------------------------------------------------
10395 double precision function sscale2(r,r_cut,r0,rlamb)
10397 double precision r,gamm,r_cut,r0,rlamb,rr
10399 c write (2,*) "r",r," r_cut",r_cut," r0",r0," rlamb",rlamb
10400 c write (2,*) "rr",rr
10401 if(rr.lt.r_cut-rlamb) then
10403 else if(rr.le.r_cut.and.rr.ge.r_cut-rlamb) then
10404 gamm=(rr-(r_cut-rlamb))/rlamb
10405 sscale2=1.0d0+gamm*gamm*(2*gamm-3.0d0)
10411 C-----------------------------------------------------------------------
10412 double precision function sscalgrad2(r,r_cut,r0,rlamb)
10414 double precision r,gamm,r_cut,r0,rlamb,rr
10416 if(rr.lt.r_cut-rlamb) then
10418 else if(rr.le.r_cut.and.rr.ge.r_cut-rlamb) then
10419 gamm=(rr-(r_cut-rlamb))/rlamb
10421 sscalgrad2=gamm*(6*gamm-6.0d0)/rlamb
10423 sscalgrad2=-gamm*(6*gamm-6.0d0)/rlamb
10430 c----------------------------------------------------------------------------
10431 subroutine e_saxs(Esaxs_constr)
10433 include 'DIMENSIONS'
10434 include 'DIMENSIONS.ZSCOPT'
10435 include 'DIMENSIONS.FREE'
10438 include "COMMON.SETUP"
10441 include 'COMMON.SBRIDGE'
10442 include 'COMMON.CHAIN'
10443 include 'COMMON.GEO'
10444 include 'COMMON.LOCAL'
10445 include 'COMMON.INTERACT'
10446 include 'COMMON.VAR'
10447 include 'COMMON.IOUNITS'
10448 include 'COMMON.DERIV'
10449 include 'COMMON.CONTROL'
10450 include 'COMMON.NAMES'
10451 include 'COMMON.FFIELD'
10452 include 'COMMON.LANGEVIN'
10453 include 'COMMON.SAXS'
10455 double precision Esaxs_constr
10456 integer i,iint,j,k,l
10457 double precision PgradC(maxSAXS,3,maxres),
10458 & PgradX(maxSAXS,3,maxres),Pcalc(maxSAXS)
10460 double precision PgradC_(maxSAXS,3,maxres),
10461 & PgradX_(maxSAXS,3,maxres),Pcalc_(maxSAXS)
10463 double precision dk,dijCACA,dijCASC,dijSCCA,dijSCSC,
10464 & sigma2CACA,sigma2CASC,sigma2SCCA,sigma2SCSC,expCACA,expCASC,
10465 & expSCCA,expSCSC,CASCgrad,SCCAgrad,SCSCgrad,aux,auxC,auxC1,
10466 & auxX,auxX1,CACAgrad,Cnorm
10467 double precision sss2,ssgrad2,rrr,sscalgrad2,sscale2
10468 double precision dist
10470 c SAXS restraint penalty function
10472 write(iout,*) "------- SAXS penalty function start -------"
10473 write (iout,*) "nsaxs",nsaxs
10474 write (iout,*) "Esaxs: iatsc_s",iatsc_s," iatsc_e",iatsc_e
10475 write (iout,*) "Psaxs"
10477 write (iout,'(i5,e15.5)') i, Psaxs(i)
10480 Esaxs_constr = 0.0d0
10485 PgradC(k,l,j)=0.0d0
10486 PgradX(k,l,j)=0.0d0
10490 do i=iatsc_s,iatsc_e
10491 if (itype(i).eq.ntyp1) cycle
10492 do iint=1,nint_gr(i)
10493 do j=istart(i,iint),iend(i,iint)
10494 if (itype(j).eq.ntyp1) cycle
10497 dijCASC=dist(i,j+nres)
10498 dijSCCA=dist(i+nres,j)
10499 dijSCSC=dist(i+nres,j+nres)
10500 sigma2CACA=2.0d0/(pstok**2)
10501 sigma2CASC=4.0d0/(pstok**2+restok(itype(j))**2)
10502 sigma2SCCA=4.0d0/(pstok**2+restok(itype(i))**2)
10503 sigma2SCSC=4.0d0/(restok(itype(j))**2+restok(itype(i))**2)
10506 expCACA = dexp(-0.5d0*sigma2CACA*(dijCACA-dk)**2)
10507 if (itype(j).ne.10) then
10508 expCASC = dexp(-0.5d0*sigma2CASC*(dijCASC-dk)**2)
10512 if (itype(i).ne.10) then
10513 expSCCA = dexp(-0.5d0*sigma2SCCA*(dijSCCA-dk)**2)
10517 if (itype(i).ne.10 .and. itype(j).ne.10) then
10518 expSCSC = dexp(-0.5d0*sigma2SCSC*(dijSCSC-dk)**2)
10522 Pcalc(k) = Pcalc(k)+expCACA+expCASC+expSCCA+expSCSC
10524 write(iout,*) "i j k Pcalc",i,j,Pcalc(k)
10526 CACAgrad = sigma2CACA*(dijCACA-dk)*expCACA
10527 CASCgrad = sigma2CASC*(dijCASC-dk)*expCASC
10528 SCCAgrad = sigma2SCCA*(dijSCCA-dk)*expSCCA
10529 SCSCgrad = sigma2SCSC*(dijSCSC-dk)*expSCSC
10532 aux = CACAgrad*(C(l,j)-C(l,i))/dijCACA
10533 PgradC(k,l,i) = PgradC(k,l,i)-aux
10534 PgradC(k,l,j) = PgradC(k,l,j)+aux
10536 if (itype(j).ne.10) then
10537 aux = CASCgrad*(C(l,j+nres)-C(l,i))/dijCASC
10538 PgradC(k,l,i) = PgradC(k,l,i)-aux
10539 PgradC(k,l,j) = PgradC(k,l,j)+aux
10540 PgradX(k,l,j) = PgradX(k,l,j)+aux
10543 if (itype(i).ne.10) then
10544 aux = SCCAgrad*(C(l,j)-C(l,i+nres))/dijSCCA
10545 PgradX(k,l,i) = PgradX(k,l,i)-aux
10546 PgradC(k,l,i) = PgradC(k,l,i)-aux
10547 PgradC(k,l,j) = PgradC(k,l,j)+aux
10550 if (itype(i).ne.10 .and. itype(j).ne.10) then
10551 aux = SCSCgrad*(C(l,j+nres)-C(l,i+nres))/dijSCSC
10552 PgradC(k,l,i) = PgradC(k,l,i)-aux
10553 PgradC(k,l,j) = PgradC(k,l,j)+aux
10554 PgradX(k,l,i) = PgradX(k,l,i)-aux
10555 PgradX(k,l,j) = PgradX(k,l,j)+aux
10561 sigma2CACA=scal_rad**2*0.25d0/
10562 & (restok(itype(j))**2+restok(itype(i))**2)
10564 IF (saxs_cutoff.eq.0) THEN
10567 expCACA = dexp(-0.5d0*sigma2CACA*(dijCACA-dk)**2)
10568 Pcalc(k) = Pcalc(k)+expCACA
10569 CACAgrad = sigma2CACA*(dijCACA-dk)*expCACA
10571 aux = CACAgrad*(C(l,j)-C(l,i))/dijCACA
10572 PgradC(k,l,i) = PgradC(k,l,i)-aux
10573 PgradC(k,l,j) = PgradC(k,l,j)+aux
10577 rrr = saxs_cutoff*2.0d0/dsqrt(sigma2CACA)
10580 c write (2,*) "ijk",i,j,k
10581 sss2 = sscale2(dijCACA,rrr,dk,0.3d0)
10582 if (sss2.eq.0.0d0) cycle
10583 ssgrad2 = sscalgrad2(dijCACA,rrr,dk,0.3d0)
10584 expCACA = dexp(-0.5d0*sigma2CACA*(dijCACA-dk)**2)*sss2
10585 Pcalc(k) = Pcalc(k)+expCACA
10587 write(iout,*) "i j k Pcalc",i,j,Pcalc(k)
10589 CACAgrad = -sigma2CACA*(dijCACA-dk)*expCACA+
10590 & ssgrad2*expCACA/sss2
10593 aux = CACAgrad*(C(l,j)-C(l,i))/dijCACA
10594 PgradC(k,l,i) = PgradC(k,l,i)+aux
10595 PgradC(k,l,j) = PgradC(k,l,j)-aux
10604 if (nfgtasks.gt.1) then
10605 call MPI_Reduce(Pcalc(1),Pcalc_(1),nsaxs,MPI_DOUBLE_PRECISION,
10606 & MPI_SUM,king,FG_COMM,IERR)
10607 if (fg_rank.eq.king) then
10609 Pcalc(k) = Pcalc_(k)
10612 call MPI_Reduce(PgradC(k,1,1),PgradC_(k,1,1),3*maxsaxs*nres,
10613 & MPI_DOUBLE_PRECISION,MPI_SUM,king,FG_COMM,IERR)
10614 if (fg_rank.eq.king) then
10618 PgradC(k,l,i) = PgradC_(k,l,i)
10624 call MPI_Reduce(PgradX(k,1,1),PgradX_(k,1,1),3*maxsaxs*nres,
10625 & MPI_DOUBLE_PRECISION,MPI_SUM,king,FG_COMM,IERR)
10626 if (fg_rank.eq.king) then
10630 PgradX(k,l,i) = PgradX_(k,l,i)
10639 if (fg_rank.eq.king) then
10643 Cnorm = Cnorm + Pcalc(k)
10645 Esaxs_constr = dlog(Cnorm)-wsaxs0
10647 if (Pcalc(k).gt.0.0d0)
10648 & Esaxs_constr = Esaxs_constr - Psaxs(k)*dlog(Pcalc(k))
10650 write (iout,*) "k",k," Esaxs_constr",Esaxs_constr
10654 write (iout,*) "Cnorm",Cnorm," Esaxs_constr",Esaxs_constr
10664 & auxC = auxC +Psaxs(k)*PgradC(k,l,i)/Pcalc(k)
10665 auxC1 = auxC1+PgradC(k,l,i)
10667 auxX = auxX +Psaxs(k)*PgradX(k,l,i)/Pcalc(k)
10668 auxX1 = auxX1+PgradX(k,l,i)
10671 gsaxsC(l,i) = auxC - auxC1/Cnorm
10673 gsaxsX(l,i) = auxX - auxX1/Cnorm
10675 c write (iout,*) "l i",l,i," gradC",wsaxs*(auxC - auxC1/Cnorm),
10676 c * " gradX",wsaxs*(auxX - auxX1/Cnorm)
10684 c----------------------------------------------------------------------------
10685 subroutine e_saxsC(Esaxs_constr)
10687 include 'DIMENSIONS'
10688 include 'DIMENSIONS.ZSCOPT'
10689 include 'DIMENSIONS.FREE'
10692 include "COMMON.SETUP"
10695 include 'COMMON.SBRIDGE'
10696 include 'COMMON.CHAIN'
10697 include 'COMMON.GEO'
10698 include 'COMMON.LOCAL'
10699 include 'COMMON.INTERACT'
10700 include 'COMMON.VAR'
10701 include 'COMMON.IOUNITS'
10702 include 'COMMON.DERIV'
10703 include 'COMMON.CONTROL'
10704 include 'COMMON.NAMES'
10705 include 'COMMON.FFIELD'
10706 include 'COMMON.LANGEVIN'
10707 include 'COMMON.SAXS'
10709 double precision Esaxs_constr
10710 integer i,iint,j,k,l
10711 double precision PgradC(3,maxres),PgradX(3,maxres),Pcalc,logPtot
10713 double precision gsaxsc_(3,maxres),gsaxsx_(3,maxres),logPtot_
10715 double precision dk,dijCASPH,dijSCSPH,
10716 & sigma2CA,sigma2SC,expCASPH,expSCSPH,
10717 & CASPHgrad,SCSPHgrad,aux,auxC,auxC1,
10719 c SAXS restraint penalty function
10721 write(iout,*) "------- SAXS penalty function start -------"
10722 write (iout,*) "nsaxs",nsaxs," isaxs_start",isaxs_start,
10723 & " isaxs_end",isaxs_end
10724 write (iout,*) "nnt",nnt," ntc",nct
10726 write(iout,'(a6,i5,3f10.5,5x,2f10.5)')
10727 & "CA",i,(C(j,i),j=1,3),pstok,restok(itype(i))
10730 write(iout,'(a6,i5,3f10.5)')"CSaxs",i,(Csaxs(j,i),j=1,3)
10733 Esaxs_constr = 0.0d0
10735 do j=isaxs_start,isaxs_end
10747 dijCASPH=dijCASPH+(C(l,i)-Csaxs(l,j))**2
10749 if (itype(i).ne.10) then
10751 dijSCSPH=dijSCSPH+(C(l,i+nres)-Csaxs(l,j))**2
10754 sigma2CA=2.0d0/pstok**2
10755 sigma2SC=4.0d0/restok(itype(i))**2
10756 expCASPH = dexp(-0.5d0*sigma2CA*dijCASPH)
10757 expSCSPH = dexp(-0.5d0*sigma2SC*dijSCSPH)
10758 Pcalc = Pcalc+expCASPH+expSCSPH
10760 write(*,*) "processor i j Pcalc",
10761 & MyRank,i,j,dijCASPH,dijSCSPH, Pcalc
10763 CASPHgrad = sigma2CA*expCASPH
10764 SCSPHgrad = sigma2SC*expSCSPH
10766 aux = (C(l,i+nres)-Csaxs(l,j))*SCSPHgrad
10767 PgradX(l,i) = PgradX(l,i) + aux
10768 PgradC(l,i) = PgradC(l,i)+(C(l,i)-Csaxs(l,j))*CASPHgrad+aux
10773 gsaxsc(l,i)=gsaxsc(l,i)+PgradC(l,i)/Pcalc
10774 gsaxsx(l,i)=gsaxsx(l,i)+PgradX(l,i)/Pcalc
10777 logPtot = logPtot - dlog(Pcalc)
10778 c print *,"me",me,MyRank," j",j," logPcalc",-dlog(Pcalc),
10779 c & " logPtot",logPtot
10782 if (nfgtasks.gt.1) then
10783 c write (iout,*) "logPtot before reduction",logPtot
10784 call MPI_Reduce(logPtot,logPtot_,1,MPI_DOUBLE_PRECISION,
10785 & MPI_SUM,king,FG_COMM,IERR)
10787 c write (iout,*) "logPtot after reduction",logPtot
10788 call MPI_Reduce(gsaxsC(1,1),gsaxsC_(1,1),3*nres,
10789 & MPI_DOUBLE_PRECISION,MPI_SUM,king,FG_COMM,IERR)
10790 if (fg_rank.eq.king) then
10793 gsaxsC(l,i) = gsaxsC_(l,i)
10797 call MPI_Reduce(gsaxsX(1,1),gsaxsX_(1,1),3*nres,
10798 & MPI_DOUBLE_PRECISION,MPI_SUM,king,FG_COMM,IERR)
10799 if (fg_rank.eq.king) then
10802 gsaxsX(l,i) = gsaxsX_(l,i)
10808 Esaxs_constr = logPtot