1 subroutine etotal(energia,fact)
2 implicit real*8 (a-h,o-z)
4 include 'DIMENSIONS.ZSCOPT'
10 cMS$ATTRIBUTES C :: proc_proc
13 include 'COMMON.IOUNITS'
14 double precision energia(0:max_ene),energia1(0:max_ene+1)
15 include 'COMMON.FFIELD'
16 include 'COMMON.DERIV'
17 include 'COMMON.INTERACT'
18 include 'COMMON.SBRIDGE'
19 include 'COMMON.CHAIN'
20 include 'COMMON.SHIELD'
21 include 'COMMON.CONTROL'
22 include 'COMMON.TORCNSTR'
23 double precision fact(6)
24 c write(iout, '(a,i2)')'Calling etotal ipot=',ipot
26 cd print *,'nnt=',nnt,' nct=',nct
28 C Compute the side-chain and electrostatic interaction energy
30 goto (101,102,103,104,105) ipot
31 C Lennard-Jones potential.
32 101 call elj(evdw,evdw_t)
33 cd print '(a)','Exit ELJ'
35 C Lennard-Jones-Kihara potential (shifted).
36 102 call eljk(evdw,evdw_t)
38 C Berne-Pechukas potential (dilated LJ, angular dependence).
39 103 call ebp(evdw,evdw_t)
41 C Gay-Berne potential (shifted LJ, angular dependence).
42 104 call egb(evdw,evdw_t)
44 C Gay-Berne-Vorobjev potential (shifted LJ, angular dependence).
45 105 call egbv(evdw,evdw_t)
46 C write(iout,*) 'po elektostatyce'
48 C Calculate electrostatic (H-bonding) energy of the main chain.
52 if (shield_mode.eq.1) then
54 else if (shield_mode.eq.2) then
57 call eelec(ees,evdw1,eel_loc,eello_turn3,eello_turn4)
58 C write(iout,*) 'po eelec'
60 C Calculate excluded-volume interaction energy between peptide groups
63 call escp(evdw2,evdw2_14)
65 c Calculate the bond-stretching energy
69 C write (iout,*) "estr",estr
71 C Calculate the disulfide-bridge and other energy and the contributions
72 C from other distance constraints.
73 cd print *,'Calling EHPB'
75 cd print *,'EHPB exitted succesfully.'
77 C Calculate the virtual-bond-angle energy.
79 C print *,'Bend energy finished.'
81 if (tor_mode.eq.0) then
84 C ebend kcc is Kubo cumulant clustered rigorous attemp to derive the
92 if (with_theta_constr) call etheta_constr(ethetacnstr)
93 c call ebend(ebe,ethetacnstr)
94 cd print *,'Bend energy finished.'
96 C Calculate the SC local energy.
99 C print *,'SCLOC energy finished.'
101 C Calculate the virtual-bond torsional energy.
103 if (wtor.gt.0.0d0) then
104 if (tor_mode.eq.0) then
105 call etor(etors,fact(1))
107 C etor kcc is Kubo cumulant clustered rigorous attemp to derive the
109 call etor_kcc(etors,fact(1))
115 if (ndih_constr.gt.0) call etor_constr(edihcnstr)
116 c print *,"Processor",myrank," computed Utor"
118 C 6/23/01 Calculate double-torsional energy
120 if ((wtor_d.gt.0.0d0).and.(tor_mode.eq.0)) then
121 call etor_d(etors_d,fact(2))
125 c print *,"Processor",myrank," computed Utord"
127 call eback_sc_corr(esccor)
129 if (wliptran.gt.0) then
130 call Eliptransfer(eliptran)
134 C 12/1/95 Multi-body terms
138 if (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0
139 & .or. wturn6.gt.0.0d0) then
140 c write(iout,*)"calling multibody_eello"
141 call multibody_eello(ecorr,ecorr5,ecorr6,eturn6,n_corr,n_corr1)
142 c write (iout,*) 'n_corr=',n_corr,' n_corr1=',n_corr1
143 c write (iout,*) ecorr,ecorr5,ecorr6,eturn6
150 if (wcorr4.eq.0.0d0 .and. wcorr.gt.0.0d0) then
151 c write (iout,*) "Calling multibody_hbond"
152 call multibody_hb(ecorr,ecorr5,ecorr6,n_corr,n_corr1)
154 c write (iout,*) "From Esaxs: Esaxs_constr",Esaxs_constr
155 if (nsaxs.gt.0 .and. saxs_mode.eq.0) then
156 call e_saxs(Esaxs_constr)
157 c write (iout,*) "From Esaxs: Esaxs_constr",Esaxs_constr
158 else if (nsaxs.gt.0 .and. saxs_mode.gt.0) then
159 call e_saxsC(Esaxs_constr)
160 c write (iout,*) "From EsaxsC: Esaxs_constr",Esaxs_constr
165 c write(iout,*) "TEST_ENE1 constr_homology=",constr_homology
166 if (constr_homology.ge.1) then
167 call e_modeller(ehomology_constr)
169 ehomology_constr=0.0d0
172 c write(iout,*) "TEST_ENE1 ehomology_constr=",ehomology_constr
174 C BARTEK for dfa test!
175 if (wdfa_dist.gt.0) call edfad(edfadis)
176 c write(iout,*)'edfad is finished!', wdfa_dist,edfadis
177 if (wdfa_tor.gt.0) call edfat(edfator)
178 c write(iout,*)'edfat is finished!', wdfa_tor,edfator
179 if (wdfa_nei.gt.0) call edfan(edfanei)
180 c write(iout,*)'edfan is finished!', wdfa_nei,edfanei
181 if (wdfa_beta.gt.0) call edfab(edfabet)
182 c write(iout,*)'edfab is finished!', wdfa_beta,edfabet
185 c write (iout,*) "ft(6)",fact(6)," evdw",evdw," evdw_t",evdw_t
187 if (shield_mode.gt.0) then
188 etot=fact(1)*wsc*(evdw+fact(6)*evdw_t)+fact(1)*wscp*evdw2
190 & +fact(1)*wvdwpp*evdw1
191 & +wang*ebe+wtor*fact(1)*etors+wscloc*escloc
192 & +wstrain*ehpb+wcorr*fact(3)*ecorr+wcorr5*fact(4)*ecorr5
193 & +wcorr6*fact(5)*ecorr6+wturn4*fact(3)*eello_turn4
194 & +wturn3*fact(2)*eello_turn3+wturn6*fact(5)*eturn6
195 & +wel_loc*fact(2)*eel_loc+edihcnstr+wtor_d*fact(2)*etors_d
196 & +wbond*estr+wsccor*fact(1)*esccor+ethetacnstr+wsaxs*esaxs_constr
197 & +wliptran*eliptran*esaxs_constr
198 & +wdfa_dist*edfadis+wdfa_tor*edfator+wdfa_nei*edfanei
201 etot=wsc*(evdw+fact(6)*evdw_t)+wscp*evdw2+welec*fact(1)*ees
203 & +wang*ebe+wtor*fact(1)*etors+wscloc*escloc
204 & +wstrain*ehpb+wcorr*fact(3)*ecorr+wcorr5*fact(4)*ecorr5
205 & +wcorr6*fact(5)*ecorr6+wturn4*fact(3)*eello_turn4
206 & +wturn3*fact(2)*eello_turn3+wturn6*fact(5)*eturn6
207 & +wel_loc*fact(2)*eel_loc+edihcnstr+wtor_d*fact(2)*etors_d
208 & +wbond*estr+wsccor*fact(1)*esccor+ethetacnstr
209 & +wliptran*eliptran+wsaxs*esaxs_constr
210 & +wdfa_dist*edfadis+wdfa_tor*edfator+wdfa_nei*edfanei
214 if (shield_mode.gt.0) then
215 etot=fact(1)wsc*(evdw+fact(6)*evdw_t)+fact(1)*wscp*evdw2
216 & +welec*fact(1)*(ees+evdw1)
217 & +wang*ebe+wtor*fact(1)*etors+wscloc*escloc
218 & +wstrain*ehpb+wcorr*fact(3)*ecorr+wcorr5*fact(4)*ecorr5
219 & +wcorr6*fact(5)*ecorr6+wturn4*fact(3)*eello_turn4
220 & +wturn3*fact(2)*eello_turn3+wturn6*fact(5)*eturn6
221 & +wel_loc*fact(2)*eel_loc+edihcnstr+wtor_d*fact(2)*etors_d
222 & +wbond*estr+wsccor*fact(1)*esccor+ethetacnstr
223 & +wliptran*eliptran+wsaxs*esaxs_constr
224 & +wdfa_dist*edfadis+wdfa_tor*edfator+wdfa_nei*edfanei
227 etot=wsc*(evdw+fact(6)*evdw_t)+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
243 energia(2)=evdw2-evdw2_14
260 energia(8)=eello_turn3
261 energia(9)=eello_turn4
270 energia(20)=edihcnstr
273 energia(24)=ethetacnstr
274 energia(26)=esaxs_constr
275 energia(27)=ehomology_constr
283 if (isnan(etot).ne.0) energia(0)=1.0d+99
285 if (isnan(etot)) energia(0)=1.0d+99
290 idumm=proc_proc(etot,i)
292 call proc_proc(etot,i)
294 if(i.eq.1)energia(0)=1.0d+99
300 call enerprint(energia,fact)
304 C Sum up the components of the Cartesian gradient.
309 if (shield_mode.eq.0) then
310 gradc(j,i,icg)=wsc*gvdwc(j,i)+wscp*gvdwc_scp(j,i)+
311 & welec*fact(1)*gelc(j,i)+wvdwpp*gvdwpp(j,i)+
313 & wstrain*ghpbc(j,i)+
314 & wcorr*fact(3)*gradcorr(j,i)+
315 & wel_loc*fact(2)*gel_loc(j,i)+
316 & wturn3*fact(2)*gcorr3_turn(j,i)+
317 & wturn4*fact(3)*gcorr4_turn(j,i)+
318 & wcorr5*fact(4)*gradcorr5(j,i)+
319 & wcorr6*fact(5)*gradcorr6(j,i)+
320 & wturn6*fact(5)*gcorr6_turn(j,i)+
321 & wsccor*fact(2)*gsccorc(j,i)+
322 & wliptran*gliptranc(j,i)+
323 & wdfa_dist*gdfad(j,i)+
324 & wdfa_tor*gdfat(j,i)+
325 & wdfa_nei*gdfan(j,i)+
326 & wdfa_beta*gdfab(j,i)
327 gradx(j,i,icg)=wsc*gvdwx(j,i)+wscp*gradx_scp(j,i)+
329 & wstrain*ghpbx(j,i)+wcorr*gradxorr(j,i)+
330 & wsccor*fact(2)*gsccorx(j,i)
331 & +wliptran*gliptranx(j,i)
333 gradc(j,i,icg)=fact(1)*wsc*gvdwc(j,i)
334 & +fact(1)*wscp*gvdwc_scp(j,i)+
335 & welec*fact(1)*gelc(j,i)+fact(1)*wvdwpp*gvdwpp(j,i)+
337 & wstrain*ghpbc(j,i)+
338 & wcorr*fact(3)*gradcorr(j,i)+
339 & wel_loc*fact(2)*gel_loc(j,i)+
340 & wturn3*fact(2)*gcorr3_turn(j,i)+
341 & wturn4*fact(3)*gcorr4_turn(j,i)+
342 & wcorr5*fact(4)*gradcorr5(j,i)+
343 & wcorr6*fact(5)*gradcorr6(j,i)+
344 & wturn6*fact(5)*gcorr6_turn(j,i)+
345 & wsccor*fact(2)*gsccorc(j,i)
346 & +wliptran*gliptranc(j,i)
347 & +welec*gshieldc(j,i)
348 & +welec*gshieldc_loc(j,i)
349 & +wcorr*gshieldc_ec(j,i)
350 & +wcorr*gshieldc_loc_ec(j,i)
351 & +wturn3*gshieldc_t3(j,i)
352 & +wturn3*gshieldc_loc_t3(j,i)
353 & +wturn4*gshieldc_t4(j,i)
354 & +wturn4*gshieldc_loc_t4(j,i)
355 & +wel_loc*gshieldc_ll(j,i)
356 & +wel_loc*gshieldc_loc_ll(j,i)+
357 & wdfa_dist*gdfad(j,i)+
358 & wdfa_tor*gdfat(j,i)+
359 & wdfa_nei*gdfan(j,i)+
360 & wdfa_beta*gdfab(j,i)
361 gradx(j,i,icg)=fact(1)*wsc*gvdwx(j,i)
362 & +fact(1)*wscp*gradx_scp(j,i)+
364 & wstrain*ghpbx(j,i)+wcorr*gradxorr(j,i)+
365 & wsccor*fact(2)*gsccorx(j,i)
366 & +wliptran*gliptranx(j,i)
367 & +welec*gshieldx(j,i)
368 & +wcorr*gshieldx_ec(j,i)
369 & +wturn3*gshieldx_t3(j,i)
370 & +wturn4*gshieldx_t4(j,i)
371 & +wel_loc*gshieldx_ll(j,i)
377 if (shield_mode.eq.0) then
378 gradc(j,i,icg)=wsc*gvdwc(j,i)+wscp*gvdwc_scp(j,i)+
379 & welec*fact(1)*gelc(j,i)+wstrain*ghpbc(j,i)+
381 & wcorr*fact(3)*gradcorr(j,i)+
382 & wel_loc*fact(2)*gel_loc(j,i)+
383 & wturn3*fact(2)*gcorr3_turn(j,i)+
384 & wturn4*fact(3)*gcorr4_turn(j,i)+
385 & wcorr5*fact(4)*gradcorr5(j,i)+
386 & wcorr6*fact(5)*gradcorr6(j,i)+
387 & wturn6*fact(5)*gcorr6_turn(j,i)+
388 & wsccor*fact(2)*gsccorc(j,i)
389 & +wliptran*gliptranc(j,i)+
390 & wdfa_dist*gdfad(j,i)+
391 & wdfa_tor*gdfat(j,i)+
392 & wdfa_nei*gdfan(j,i)+
393 & wdfa_beta*gdfab(j,i)
395 gradx(j,i,icg)=wsc*gvdwx(j,i)+wscp*gradx_scp(j,i)+
397 & wstrain*ghpbx(j,i)+wcorr*gradxorr(j,i)+
398 & wsccor*fact(1)*gsccorx(j,i)
399 & +wliptran*gliptranx(j,i)
401 gradc(j,i,icg)=fact(1)*wsc*gvdwc(j,i)+
402 & fact(1)*wscp*gvdwc_scp(j,i)+
403 & welec*fact(1)*gelc(j,i)+wstrain*ghpbc(j,i)+
405 & wcorr*fact(3)*gradcorr(j,i)+
406 & wel_loc*fact(2)*gel_loc(j,i)+
407 & wturn3*fact(2)*gcorr3_turn(j,i)+
408 & wturn4*fact(3)*gcorr4_turn(j,i)+
409 & wcorr5*fact(4)*gradcorr5(j,i)+
410 & wcorr6*fact(5)*gradcorr6(j,i)+
411 & wturn6*fact(5)*gcorr6_turn(j,i)+
412 & wsccor*fact(2)*gsccorc(j,i)
413 & +wliptran*gliptranc(j,i)
414 & +welec*gshieldc(j,i)
415 & +welec*gshieldc_loc(j,i)
416 & +wcorr*gshieldc_ec(j,i)
417 & +wcorr*gshieldc_loc_ec(j,i)
418 & +wturn3*gshieldc_t3(j,i)
419 & +wturn3*gshieldc_loc_t3(j,i)
420 & +wturn4*gshieldc_t4(j,i)
421 & +wturn4*gshieldc_loc_t4(j,i)
422 & +wel_loc*gshieldc_ll(j,i)
423 & +wel_loc*gshieldc_loc_ll(j,i)+
424 & wdfa_dist*gdfad(j,i)+
425 & wdfa_tor*gdfat(j,i)+
426 & wdfa_nei*gdfan(j,i)+
427 & wdfa_beta*gdfab(j,i)
428 gradx(j,i,icg)=fact(1)*wsc*gvdwx(j,i)+
429 & fact(1)*wscp*gradx_scp(j,i)+
431 & wstrain*ghpbx(j,i)+wcorr*gradxorr(j,i)+
432 & wsccor*fact(1)*gsccorx(j,i)
433 & +wliptran*gliptranx(j,i)
434 & +welec*gshieldx(j,i)
435 & +wcorr*gshieldx_ec(j,i)
436 & +wturn3*gshieldx_t3(j,i)
437 & +wturn4*gshieldx_t4(j,i)
438 & +wel_loc*gshieldx_ll(j,i)
447 gloc(i,icg)=gloc(i,icg)+wcorr*fact(3)*gcorr_loc(i)
448 & +wcorr5*fact(4)*g_corr5_loc(i)
449 & +wcorr6*fact(5)*g_corr6_loc(i)
450 & +wturn4*fact(3)*gel_loc_turn4(i)
451 & +wturn3*fact(2)*gel_loc_turn3(i)
452 & +wturn6*fact(5)*gel_loc_turn6(i)
453 & +wel_loc*fact(2)*gel_loc_loc(i)
454 c & +wsccor*fact(1)*gsccor_loc(i)
455 c BYLA ROZNICA Z CLUSTER< OSTATNIA LINIA DODANA
458 if (dyn_ss) call dyn_set_nss
461 C------------------------------------------------------------------------
462 subroutine enerprint(energia,fact)
463 implicit real*8 (a-h,o-z)
465 include 'DIMENSIONS.ZSCOPT'
466 include 'COMMON.IOUNITS'
467 include 'COMMON.FFIELD'
468 include 'COMMON.SBRIDGE'
469 include 'COMMON.CONTROL'
470 double precision energia(0:max_ene),fact(6)
472 evdw=energia(1)+fact(6)*energia(21)
474 evdw2=energia(2)+energia(17)
486 eello_turn3=energia(8)
487 eello_turn4=energia(9)
488 eello_turn6=energia(10)
495 edihcnstr=energia(20)
497 ethetacnstr=energia(24)
500 ehomology_constr=energia(27)
502 edfadis = energia(28)
503 edfator = energia(29)
504 edfanei = energia(30)
505 edfabet = energia(31)
507 write (iout,10) evdw,wsc,evdw2,wscp,ees,welec,evdw1,wvdwpp,
508 & estr,wbond,ebe,wang,
509 & escloc,wscloc,etors,wtor,etors_d,wtor_d,ehpb,wstrain,
511 & ecorr5,wcorr5,ecorr6,wcorr6,eel_loc,wel_loc,eello_turn3,wturn3,
512 & eello_turn4,wturn4,eello_turn6,wturn6,esccor,wsccor,edihcnstr,
513 & ethetacnstr,ebr*nss,Uconst,wumb,eliptran,wliptran,Eafmforc,
514 & etube,wtube,esaxs,wsaxs,ehomology_constr,
515 & edfadis,wdfa_dist,edfator,wdfa_tor,edfanei,wdfa_nei,
518 10 format (/'Virtual-chain energies:'//
519 & 'EVDW= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC-SC)'/
520 & 'EVDW2= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC-p)'/
521 & 'EES= ',1pE16.6,' WEIGHT=',1pD16.6,' (p-p)'/
522 & 'EVDWPP=',1pE16.6,' WEIGHT=',1pD16.6,' (p-p VDW)'/
523 & 'ESTR= ',1pE16.6,' WEIGHT=',1pD16.6,' (stretching)'/
524 & 'EBE= ',1pE16.6,' WEIGHT=',1pD16.6,' (bending)'/
525 & 'ESC= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC local)'/
526 & 'ETORS= ',1pE16.6,' WEIGHT=',1pD16.6,' (torsional)'/
527 & 'ETORSD=',1pE16.6,' WEIGHT=',1pD16.6,' (double torsional)'/
528 & 'EHBP= ',1pE16.6,' WEIGHT=',1pD16.6,
529 & ' (SS bridges & dist. cnstr.)'/
530 & 'ECORR4=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
531 & 'ECORR5=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
532 & 'ECORR6=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
533 & 'EELLO= ',1pE16.6,' WEIGHT=',1pD16.6,' (electrostatic-local)'/
534 & 'ETURN3=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 3rd order)'/
535 & 'ETURN4=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 4th order)'/
536 & 'ETURN6=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 6th order)'/
537 & 'ESCCOR=',1pE16.6,' WEIGHT=',1pD16.6,' (backbone-rotamer corr)'/
538 & 'EDIHC= ',1pE16.6,' (virtual-bond dihedral angle restraints)'/
539 & 'ETHETC=',1pE16.6,' (virtual-bond angle restraints)'/
540 & 'ESS= ',1pE16.6,' (disulfide-bridge intrinsic energy)'/
541 & 'UCONST=',1pE16.6,' WEIGHT=',1pD16.6' (umbrella restraints)'/
542 & 'ELT= ',1pE16.6,' WEIGHT=',1pD16.6,' (Lipid transfer)'/
543 & 'EAFM= ',1pE16.6,' (atomic-force microscopy)'/
544 & 'ETUBE= ',1pE16.6,' WEIGHT=',1pD16.6,' (tube confinment)'/
545 & 'E_SAXS=',1pE16.6,' WEIGHT=',1pD16.6,' (SAXS restraints)'/
546 & 'H_CONS=',1pE16.6,' (Homology model constraints energy)'/
547 & 'EDFAD= ',1pE16.6,' WEIGHT=',1pE16.6,' (DFA distance energy)'/
548 & 'EDFAT= ',1pE16.6,' WEIGHT=',1pE16.6,' (DFA torsion energy)'/
549 & 'EDFAN= ',1pE16.6,' WEIGHT=',1pE16.6,' (DFA NCa energy)'/
550 & 'EDFAB= ',1pE16.6,' WEIGHT=',1pE16.6,' (DFA Beta energy)'/
551 & 'ETOT= ',1pE16.6,' (total)')
554 write (iout,10) evdw,wsc,evdw2,wscp,ees,welec,
555 & estr,wbond,ebe,wang,
556 & escloc,wscloc,etors,wtor,etors_d,wtor_d,ehpb,wstrain,
558 & ecorr5,wcorr5,ecorr6,wcorr6,eel_loc,wel_loc,eello_turn3,wturn3,
559 & eello_turn4,wturn4,eello_turn6,wturn6,esccor,wsccor,edihcnstr,
560 & ethetacnstr,ebr*nss,Uconst,wumb,eliptran,wliptran,Eafmforc,
561 & etube,wtube,esaxs,wsaxs,ehomology_constr,
562 & edfadis,wdfa_dist,edfator,wdfa_tor,edfanei,wdfa_nei,
565 10 format (/'Virtual-chain energies:'//
566 & 'EVDW= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC-SC)'/
567 & 'EVDW2= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC-p)'/
568 & 'EES= ',1pE16.6,' WEIGHT=',1pD16.6,' (p-p)'/
569 & 'ESTR= ',1pE16.6,' WEIGHT=',1pD16.6,' (stretching)'/
570 & 'EBE= ',1pE16.6,' WEIGHT=',1pD16.6,' (bending)'/
571 & 'ESC= ',1pE16.6,' WEIGHT=',1pD16.6,' (SC local)'/
572 & 'ETORS= ',1pE16.6,' WEIGHT=',1pD16.6,' (torsional)'/
573 & 'ETORSD=',1pE16.6,' WEIGHT=',1pD16.6,' (double torsional)'/
574 & 'EHBP= ',1pE16.6,' WEIGHT=',1pD16.6,
575 & ' (SS bridges & dist. restr.)'/
576 & 'ECORR4=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
577 & 'ECORR5=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
578 & 'ECORR6=',1pE16.6,' WEIGHT=',1pD16.6,' (multi-body)'/
579 & 'EELLO= ',1pE16.6,' WEIGHT=',1pD16.6,' (electrostatic-local)'/
580 & 'ETURN3=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 3rd order)'/
581 & 'ETURN4=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 4th order)'/
582 & 'ETURN6=',1pE16.6,' WEIGHT=',1pD16.6,' (turns, 6th order)'/
583 & 'ESCCOR=',1pE16.6,' WEIGHT=',1pD16.6,' (backbone-rotamer corr)'/
584 & 'EDIHC= ',1pE16.6,' (virtual-bond dihedral angle restraints)'/
585 & 'ETHETC=',1pE16.6,' (virtual-bond angle restraints)'/
586 & 'ESS= ',1pE16.6,' (disulfide-bridge intrinsic energy)'/
587 & 'UCONST=',1pE16.6,' WEIGHT=',1pD16.6' (umbrella restraints)'/
588 & 'ELT= ',1pE16.6,' WEIGHT=',1pD16.6,' (Lipid transfer)'/
589 & 'EAFM= ',1pE16.6,' (atomic-force microscopy)'/
590 & 'ETUBE= ',1pE16.6,' WEIGHT=',1pD16.6,' (tube confinment)'/
591 & 'E_SAXS=',1pE16.6,' WEIGHT=',1pD16.6,' (SAXS restraints)'/
592 & 'H_CONS=',1pE16.6,' (Homology model constraints energy)'/
593 & 'EDFAD= ',1pE16.6,' WEIGHT=',1pE16.6,' (DFA distance energy)'/
594 & 'EDFAT= ',1pE16.6,' WEIGHT=',1pE16.6,' (DFA torsion energy)'/
595 & 'EDFAN= ',1pE16.6,' WEIGHT=',1pE16.6,' (DFA NCa energy)'/
596 & 'EDFAB= ',1pE16.6,' WEIGHT=',1pE16.6,' (DFA Beta energy)'/
597 & 'ETOT= ',1pE16.6,' (total)')
601 C-----------------------------------------------------------------------
602 subroutine elj(evdw,evdw_t)
604 C This subroutine calculates the interaction energy of nonbonded side chains
605 C assuming the LJ potential of interaction.
607 implicit real*8 (a-h,o-z)
609 include 'DIMENSIONS.ZSCOPT'
610 include "DIMENSIONS.COMPAR"
611 parameter (accur=1.0d-10)
614 include 'COMMON.LOCAL'
615 include 'COMMON.CHAIN'
616 include 'COMMON.DERIV'
617 include 'COMMON.INTERACT'
618 include 'COMMON.TORSION'
619 include 'COMMON.ENEPS'
620 include 'COMMON.SBRIDGE'
621 include 'COMMON.NAMES'
622 include 'COMMON.IOUNITS'
623 include 'COMMON.CONTACTS'
627 cd print *,'Entering ELJ nnt=',nnt,' nct=',nct,' expon=',expon
631 eneps_temp(j,i)=0.0d0
640 if (itypi.eq.ntyp1) cycle
641 itypi1=iabs(itype(i+1))
648 C Calculate SC interaction energy.
651 cd write (iout,*) 'i=',i,' iint=',iint,' istart=',istart(i,iint),
652 cd & 'iend=',iend(i,iint)
653 do j=istart(i,iint),iend(i,iint)
655 if (itypj.eq.ntyp1) cycle
659 C Change 12/1/95 to calculate four-body interactions
660 rij=xj*xj+yj*yj+zj*zj
662 c write (iout,*)'i=',i,' j=',j,' itypi=',itypi,' itypj=',itypj
663 eps0ij=eps(itypi,itypj)
668 ij=icant(itypi,itypj)
670 eneps_temp(1,ij)=eneps_temp(1,ij)+e1/dabs(eps0ij)
671 eneps_temp(2,ij)=eneps_temp(2,ij)+e2/eps0ij
674 cd sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
675 cd epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
676 cd write (iout,'(2(a3,i3,2x),6(1pd12.4)/2(3(1pd12.4),5x)/)')
677 cd & restyp(itypi),i,restyp(itypj),j,aa(itypi,itypj),
678 cd & bb(itypi,itypj),1.0D0/dsqrt(rrij),evdwij,epsi,sigm,
679 cd & (c(k,i),k=1,3),(c(k,j),k=1,3)
680 if (bb.gt.0.0d0) then
687 C Calculate the components of the gradient in DC and X
689 fac=-rrij*(e1+evdwij)
694 gvdwx(k,i)=gvdwx(k,i)-gg(k)
695 gvdwx(k,j)=gvdwx(k,j)+gg(k)
699 gvdwc(l,k)=gvdwc(l,k)+gg(l)
704 C 12/1/95, revised on 5/20/97
706 C Calculate the contact function. The ith column of the array JCONT will
707 C contain the numbers of atoms that make contacts with the atom I (of numbers
708 C greater than I). The arrays FACONT and GACONT will contain the values of
709 C the contact function and its derivative.
711 C Uncomment next line, if the correlation interactions include EVDW explicitly.
712 c if (j.gt.i+1 .and. evdwij.le.0.0D0) then
713 C Uncomment next line, if the correlation interactions are contact function only
714 if (j.gt.i+1.and. eps0ij.gt.0.0D0) then
716 sigij=sigma(itypi,itypj)
717 r0ij=rs0(itypi,itypj)
719 C Check whether the SC's are not too far to make a contact.
722 call gcont(rij,rcut,1.0d0,0.2d0*rcut,fcont,fprimcont)
723 C Add a new contact, if the SC's are close enough, but not too close (r<sigma).
725 if (fcont.gt.0.0D0) then
726 C If the SC-SC distance if close to sigma, apply spline.
727 cAdam call gcont(-rij,-1.03d0*sigij,2.0d0*sigij,1.0d0,
728 cAdam & fcont1,fprimcont1)
729 cAdam fcont1=1.0d0-fcont1
730 cAdam if (fcont1.gt.0.0d0) then
731 cAdam fprimcont=fprimcont*fcont1+fcont*fprimcont1
732 cAdam fcont=fcont*fcont1
734 C Uncomment following 4 lines to have the geometric average of the epsilon0's
735 cga eps0ij=1.0d0/dsqrt(eps0ij)
737 cga gg(k)=gg(k)*eps0ij
739 cga eps0ij=-evdwij*eps0ij
740 C Uncomment for AL's type of SC correlation interactions.
742 num_conti=num_conti+1
744 facont(num_conti,i)=fcont*eps0ij
745 fprimcont=eps0ij*fprimcont/rij
747 cAdam gacont(1,num_conti,i)=-fprimcont*xj+fcont*gg(1)
748 cAdam gacont(2,num_conti,i)=-fprimcont*yj+fcont*gg(2)
749 cAdam gacont(3,num_conti,i)=-fprimcont*zj+fcont*gg(3)
750 C Uncomment following 3 lines for Skolnick's type of SC correlation.
751 gacont(1,num_conti,i)=-fprimcont*xj
752 gacont(2,num_conti,i)=-fprimcont*yj
753 gacont(3,num_conti,i)=-fprimcont*zj
754 cd write (iout,'(2i5,2f10.5)') i,j,rij,facont(num_conti,i)
755 cd write (iout,'(2i3,3f10.5)')
756 cd & i,j,(gacont(kk,num_conti,i),kk=1,3)
762 num_cont(i)=num_conti
767 gvdwc(j,i)=expon*gvdwc(j,i)
768 gvdwx(j,i)=expon*gvdwx(j,i)
772 C******************************************************************************
776 C To save time, the factor of EXPON has been extracted from ALL components
777 C of GVDWC and GRADX. Remember to multiply them by this factor before further
780 C******************************************************************************
783 C-----------------------------------------------------------------------------
784 subroutine eljk(evdw,evdw_t)
786 C This subroutine calculates the interaction energy of nonbonded side chains
787 C assuming the LJK potential of interaction.
789 implicit real*8 (a-h,o-z)
791 include 'DIMENSIONS.ZSCOPT'
792 include "DIMENSIONS.COMPAR"
795 include 'COMMON.LOCAL'
796 include 'COMMON.CHAIN'
797 include 'COMMON.DERIV'
798 include 'COMMON.INTERACT'
799 include 'COMMON.ENEPS'
800 include 'COMMON.IOUNITS'
801 include 'COMMON.NAMES'
806 c print *,'Entering ELJK nnt=',nnt,' nct=',nct,' expon=',expon
809 eneps_temp(j,i)=0.0d0
816 if (itypi.eq.ntyp1) cycle
817 itypi1=iabs(itype(i+1))
822 C Calculate SC interaction energy.
825 do j=istart(i,iint),iend(i,iint)
827 if (itypj.eq.ntyp1) cycle
831 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
833 e_augm=augm(itypi,itypj)*fac_augm
836 r_shift_inv=1.0D0/(rij+r0(itypi,itypj)-sigma(itypi,itypj))
837 fac=r_shift_inv**expon
841 ij=icant(itypi,itypj)
842 eneps_temp(1,ij)=eneps_temp(1,ij)+(e1+a_augm)
843 & /dabs(eps(itypi,itypj))
844 eneps_temp(2,ij)=eneps_temp(2,ij)+e2/eps(itypi,itypj)
845 cd sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
846 cd epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
847 cd write (iout,'(2(a3,i3,2x),8(1pd12.4)/2(3(1pd12.4),5x)/)')
848 cd & restyp(itypi),i,restyp(itypj),j,aa(itypi,itypj),
849 cd & bb(itypi,itypj),augm(itypi,itypj),epsi,sigm,
850 cd & sigma(itypi,itypj),1.0D0/dsqrt(rrij),evdwij,
851 cd & (c(k,i),k=1,3),(c(k,j),k=1,3)
852 if (bb.gt.0.0d0) then
859 C Calculate the components of the gradient in DC and X
861 fac=-2.0D0*rrij*e_augm-r_inv_ij*r_shift_inv*(e1+e1+e2)
866 gvdwx(k,i)=gvdwx(k,i)-gg(k)
867 gvdwx(k,j)=gvdwx(k,j)+gg(k)
871 gvdwc(l,k)=gvdwc(l,k)+gg(l)
881 gvdwc(j,i)=expon*gvdwc(j,i)
882 gvdwx(j,i)=expon*gvdwx(j,i)
888 C-----------------------------------------------------------------------------
889 subroutine ebp(evdw,evdw_t)
891 C This subroutine calculates the interaction energy of nonbonded side chains
892 C assuming the Berne-Pechukas potential of interaction.
894 implicit real*8 (a-h,o-z)
896 include 'DIMENSIONS.ZSCOPT'
897 include "DIMENSIONS.COMPAR"
900 include 'COMMON.LOCAL'
901 include 'COMMON.CHAIN'
902 include 'COMMON.DERIV'
903 include 'COMMON.NAMES'
904 include 'COMMON.INTERACT'
905 include 'COMMON.ENEPS'
906 include 'COMMON.IOUNITS'
907 include 'COMMON.CALC'
909 c double precision rrsave(maxdim)
915 eneps_temp(j,i)=0.0d0
920 c print *,'Entering EBP nnt=',nnt,' nct=',nct,' expon=',expon
921 c if (icall.eq.0) then
929 if (itypi.eq.ntyp1) cycle
930 itypi1=iabs(itype(i+1))
934 dxi=dc_norm(1,nres+i)
935 dyi=dc_norm(2,nres+i)
936 dzi=dc_norm(3,nres+i)
937 dsci_inv=vbld_inv(i+nres)
939 C Calculate SC interaction energy.
942 do j=istart(i,iint),iend(i,iint)
945 if (itypj.eq.ntyp1) cycle
946 dscj_inv=vbld_inv(j+nres)
947 chi1=chi(itypi,itypj)
948 chi2=chi(itypj,itypi)
955 alf12=0.5D0*(alf1+alf2)
956 C For diagnostics only!!!
969 dxj=dc_norm(1,nres+j)
970 dyj=dc_norm(2,nres+j)
971 dzj=dc_norm(3,nres+j)
972 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
973 cd if (icall.eq.0) then
979 C Calculate the angle-dependent terms of energy & contributions to derivatives.
981 C Calculate whole angle-dependent part of epsilon and contributions
983 fac=(rrij*sigsq)**expon2
986 evdwij=eps1*eps2rt*eps3rt*(e1+e2)
987 eps2der=evdwij*eps3rt
988 eps3der=evdwij*eps2rt
989 evdwij=evdwij*eps2rt*eps3rt
990 ij=icant(itypi,itypj)
991 aux=eps1*eps2rt**2*eps3rt**2
992 eneps_temp(1,ij)=eneps_temp(1,ij)+e1*aux
993 & /dabs(eps(itypi,itypj))
994 eneps_temp(2,ij)=eneps_temp(2,ij)+e2*aux/eps(itypi,itypj)
995 if (bb.gt.0.0d0) then
1002 sigm=dabs(aa/bb)**(1.0D0/6.0D0)
1004 write (iout,'(2(a3,i3,2x),15(0pf7.3))')
1005 & restyp(itypi),i,restyp(itypj),j,
1006 & epsi,sigm,chi1,chi2,chip1,chip2,
1007 & eps1,eps2rt**2,eps3rt**2,1.0D0/dsqrt(sigsq),
1008 & om1,om2,om12,1.0D0/dsqrt(rrij),
1011 C Calculate gradient components.
1012 e1=e1*eps1*eps2rt**2*eps3rt**2
1013 fac=-expon*(e1+evdwij)
1016 C Calculate radial part of the gradient
1020 C Calculate the angular part of the gradient and sum add the contributions
1021 C to the appropriate components of the Cartesian gradient.
1030 C-----------------------------------------------------------------------------
1031 subroutine egb(evdw,evdw_t)
1033 C This subroutine calculates the interaction energy of nonbonded side chains
1034 C assuming the Gay-Berne potential of interaction.
1036 implicit real*8 (a-h,o-z)
1037 include 'DIMENSIONS'
1038 include 'DIMENSIONS.ZSCOPT'
1039 include "DIMENSIONS.COMPAR"
1040 include 'COMMON.CONTROL'
1041 include 'COMMON.GEO'
1042 include 'COMMON.VAR'
1043 include 'COMMON.LOCAL'
1044 include 'COMMON.CHAIN'
1045 include 'COMMON.DERIV'
1046 include 'COMMON.NAMES'
1047 include 'COMMON.INTERACT'
1048 include 'COMMON.ENEPS'
1049 include 'COMMON.IOUNITS'
1050 include 'COMMON.CALC'
1051 include 'COMMON.SBRIDGE'
1054 integer icant,xshift,yshift,zshift
1058 eneps_temp(j,i)=0.0d0
1061 c print *,'Entering EGB nnt=',nnt,' nct=',nct,' expon=',expon
1065 c if (icall.gt.0) lprn=.true.
1067 do i=iatsc_s,iatsc_e
1068 itypi=iabs(itype(i))
1069 if (itypi.eq.ntyp1) cycle
1070 itypi1=iabs(itype(i+1))
1074 C returning the ith atom to box
1076 if (xi.lt.0) xi=xi+boxxsize
1078 if (yi.lt.0) yi=yi+boxysize
1080 if (zi.lt.0) zi=zi+boxzsize
1081 if ((zi.gt.bordlipbot)
1082 &.and.(zi.lt.bordliptop)) then
1083 C the energy transfer exist
1084 if (zi.lt.buflipbot) then
1085 C what fraction I am in
1087 & ((zi-bordlipbot)/lipbufthick)
1088 C lipbufthick is thickenes of lipid buffore
1089 sslipi=sscalelip(fracinbuf)
1090 ssgradlipi=-sscagradlip(fracinbuf)/lipbufthick
1091 elseif (zi.gt.bufliptop) then
1092 fracinbuf=1.0d0-((bordliptop-zi)/lipbufthick)
1093 sslipi=sscalelip(fracinbuf)
1094 ssgradlipi=sscagradlip(fracinbuf)/lipbufthick
1104 dxi=dc_norm(1,nres+i)
1105 dyi=dc_norm(2,nres+i)
1106 dzi=dc_norm(3,nres+i)
1107 dsci_inv=vbld_inv(i+nres)
1109 C Calculate SC interaction energy.
1111 do iint=1,nint_gr(i)
1112 do j=istart(i,iint),iend(i,iint)
1113 IF (dyn_ss_mask(i).and.dyn_ss_mask(j)) THEN
1114 call dyn_ssbond_ene(i,j,evdwij)
1116 C write (iout,'(a6,2i5,0pf7.3,a3,2f10.3)')
1117 C & 'evdw',i,j,evdwij,' ss',evdw,evdw_t
1118 C triple bond artifac removal
1119 do k=j+1,iend(i,iint)
1120 C search over all next residues
1121 if (dyn_ss_mask(k)) then
1122 C check if they are cysteins
1123 C write(iout,*) 'k=',k
1124 call triple_ssbond_ene(i,j,k,evdwij)
1125 C call the energy function that removes the artifical triple disulfide
1126 C bond the soubroutine is located in ssMD.F
1128 C write (iout,'(a6,2i5,0pf7.3,a3,2f10.3)')
1129 C & 'evdw',i,j,evdwij,'tss',evdw,evdw_t
1130 endif!dyn_ss_mask(k)
1134 itypj=iabs(itype(j))
1135 if (itypj.eq.ntyp1) cycle
1136 dscj_inv=vbld_inv(j+nres)
1137 sig0ij=sigma(itypi,itypj)
1138 chi1=chi(itypi,itypj)
1139 chi2=chi(itypj,itypi)
1146 alf12=0.5D0*(alf1+alf2)
1147 C For diagnostics only!!!
1160 C returning jth atom to box
1162 if (xj.lt.0) xj=xj+boxxsize
1164 if (yj.lt.0) yj=yj+boxysize
1166 if (zj.lt.0) zj=zj+boxzsize
1167 if ((zj.gt.bordlipbot)
1168 &.and.(zj.lt.bordliptop)) then
1169 C the energy transfer exist
1170 if (zj.lt.buflipbot) then
1171 C what fraction I am in
1173 & ((zj-bordlipbot)/lipbufthick)
1174 C lipbufthick is thickenes of lipid buffore
1175 sslipj=sscalelip(fracinbuf)
1176 ssgradlipj=-sscagradlip(fracinbuf)/lipbufthick
1177 elseif (zj.gt.bufliptop) then
1178 fracinbuf=1.0d0-((bordliptop-zj)/lipbufthick)
1179 sslipj=sscalelip(fracinbuf)
1180 ssgradlipj=sscagradlip(fracinbuf)/lipbufthick
1189 aa=aa_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0
1190 & +aa_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
1191 bb=bb_lip(itypi,itypj)*(sslipi+sslipj)/2.0d0
1192 & +bb_aq(itypi,itypj)*(2.0d0-sslipi-sslipj)/2.0d0
1193 C if (aa.ne.aa_aq(itypi,itypj)) then
1195 C write(iout,*) "tu,", i,j,aa_aq(itypi,itypj)-aa,
1196 C & bb_aq(itypi,itypj)-bb,
1200 C write(iout,*),aa,aa_lip(itypi,itypj),aa_aq(itypi,itypj)
1201 C checking the distance
1202 dist_init=(xj-xi)**2+(yj-yi)**2+(zj-zi)**2
1207 C finding the closest
1211 xj=xj_safe+xshift*boxxsize
1212 yj=yj_safe+yshift*boxysize
1213 zj=zj_safe+zshift*boxzsize
1214 dist_temp=(xj-xi)**2+(yj-yi)**2+(zj-zi)**2
1215 if(dist_temp.lt.dist_init) then
1225 if (subchap.eq.1) then
1235 dxj=dc_norm(1,nres+j)
1236 dyj=dc_norm(2,nres+j)
1237 dzj=dc_norm(3,nres+j)
1238 c write (iout,*) i,j,xj,yj,zj
1239 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
1241 sss=sscale((1.0d0/rij)/sigma(itypi,itypj))
1242 sssgrad=sscagrad((1.0d0/rij)/sigma(itypi,itypj))
1243 if (sss.le.0.0) cycle
1244 C Calculate angle-dependent terms of energy and contributions to their
1249 sig=sig0ij*dsqrt(sigsq)
1250 rij_shift=1.0D0/rij-sig+sig0ij
1251 C I hate to put IF's in the loops, but here don't have another choice!!!!
1252 if (rij_shift.le.0.0D0) then
1257 c---------------------------------------------------------------
1258 rij_shift=1.0D0/rij_shift
1259 fac=rij_shift**expon
1262 evdwij=eps1*eps2rt*eps3rt*(e1+e2)
1263 eps2der=evdwij*eps3rt
1264 eps3der=evdwij*eps2rt
1265 evdwij=evdwij*eps2rt*eps3rt
1267 evdw=evdw+evdwij*sss
1269 evdw_t=evdw_t+evdwij*sss
1271 ij=icant(itypi,itypj)
1272 aux=eps1*eps2rt**2*eps3rt**2
1273 eneps_temp(1,ij)=eneps_temp(1,ij)+aux*e1
1274 & /dabs(eps(itypi,itypj))
1275 eneps_temp(2,ij)=eneps_temp(2,ij)+aux*e2/eps(itypi,itypj)
1276 c write (iout,*) "i",i," j",j," itypi",itypi," itypj",itypj,
1277 c & " ij",ij," eneps",aux*e1/dabs(eps(itypi,itypj)),
1278 c & aux*e2/eps(itypi,itypj)
1280 sigm=dabs(aa/bb)**(1.0D0/6.0D0)
1284 write (iout,'(2(a3,i3,2x),17(0pf7.3))')
1285 & restyp(itypi),i,restyp(itypj),j,
1286 & epsi,sigm,chi1,chi2,chip1,chip2,
1287 & eps1,eps2rt**2,eps3rt**2,sig,sig0ij,
1288 & om1,om2,om12,1.0D0/rij,1.0D0/rij_shift,
1290 write (iout,*) "partial sum", evdw, evdw_t
1294 if (energy_dec) write (iout,'(a6,2i5,0pf7.3)')
1297 C Calculate gradient components.
1298 e1=e1*eps1*eps2rt**2*eps3rt**2
1299 fac=-expon*(e1+evdwij)*rij_shift
1302 fac=fac+evdwij/sss*sssgrad/sigma(itypi,itypj)*rij
1303 C Calculate the radial part of the gradient
1307 C Calculate angular part of the gradient.
1310 C write(iout,*) "partial sum", evdw, evdw_t
1317 C-----------------------------------------------------------------------------
1318 subroutine egbv(evdw,evdw_t)
1320 C This subroutine calculates the interaction energy of nonbonded side chains
1321 C assuming the Gay-Berne-Vorobjev potential of interaction.
1323 implicit real*8 (a-h,o-z)
1324 include 'DIMENSIONS'
1325 include 'DIMENSIONS.ZSCOPT'
1326 include "DIMENSIONS.COMPAR"
1327 include 'COMMON.GEO'
1328 include 'COMMON.VAR'
1329 include 'COMMON.LOCAL'
1330 include 'COMMON.CHAIN'
1331 include 'COMMON.DERIV'
1332 include 'COMMON.NAMES'
1333 include 'COMMON.INTERACT'
1334 include 'COMMON.ENEPS'
1335 include 'COMMON.IOUNITS'
1336 include 'COMMON.CALC'
1337 common /srutu/ icall
1343 eneps_temp(j,i)=0.0d0
1348 c print *,'Entering EGB nnt=',nnt,' nct=',nct,' expon=',expon
1351 c if (icall.gt.0) lprn=.true.
1353 do i=iatsc_s,iatsc_e
1354 itypi=iabs(itype(i))
1355 if (itypi.eq.ntyp1) cycle
1356 itypi1=iabs(itype(i+1))
1360 dxi=dc_norm(1,nres+i)
1361 dyi=dc_norm(2,nres+i)
1362 dzi=dc_norm(3,nres+i)
1363 dsci_inv=vbld_inv(i+nres)
1365 C Calculate SC interaction energy.
1367 do iint=1,nint_gr(i)
1368 do j=istart(i,iint),iend(i,iint)
1370 itypj=iabs(itype(j))
1371 if (itypj.eq.ntyp1) cycle
1372 dscj_inv=vbld_inv(j+nres)
1373 sig0ij=sigma(itypi,itypj)
1374 r0ij=r0(itypi,itypj)
1375 chi1=chi(itypi,itypj)
1376 chi2=chi(itypj,itypi)
1383 alf12=0.5D0*(alf1+alf2)
1384 C For diagnostics only!!!
1397 dxj=dc_norm(1,nres+j)
1398 dyj=dc_norm(2,nres+j)
1399 dzj=dc_norm(3,nres+j)
1400 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
1402 C Calculate angle-dependent terms of energy and contributions to their
1406 sig=sig0ij*dsqrt(sigsq)
1407 rij_shift=1.0D0/rij-sig+r0ij
1408 C I hate to put IF's in the loops, but here don't have another choice!!!!
1409 if (rij_shift.le.0.0D0) then
1414 c---------------------------------------------------------------
1415 rij_shift=1.0D0/rij_shift
1416 fac=rij_shift**expon
1419 evdwij=eps1*eps2rt*eps3rt*(e1+e2)
1420 eps2der=evdwij*eps3rt
1421 eps3der=evdwij*eps2rt
1422 fac_augm=rrij**expon
1423 e_augm=augm(itypi,itypj)*fac_augm
1424 evdwij=evdwij*eps2rt*eps3rt
1425 if (bb.gt.0.0d0) then
1426 evdw=evdw+evdwij+e_augm
1428 evdw_t=evdw_t+evdwij+e_augm
1430 ij=icant(itypi,itypj)
1431 aux=eps1*eps2rt**2*eps3rt**2
1432 eneps_temp(1,ij)=eneps_temp(1,ij)+aux*(e1+e_augm)
1433 & /dabs(eps(itypi,itypj))
1434 eneps_temp(2,ij)=eneps_temp(2,ij)+aux*e2/eps(itypi,itypj)
1435 c eneps_temp(ij)=eneps_temp(ij)
1436 c & +(evdwij+e_augm)/eps(itypi,itypj)
1438 c sigm=dabs(aa(itypi,itypj)/bb(itypi,itypj))**(1.0D0/6.0D0)
1439 c epsi=bb(itypi,itypj)**2/aa(itypi,itypj)
1440 c write (iout,'(2(a3,i3,2x),17(0pf7.3))')
1441 c & restyp(itypi),i,restyp(itypj),j,
1442 c & epsi,sigm,sig,(augm(itypi,itypj)/epsi)**(1.0D0/12.0D0),
1443 c & chi1,chi2,chip1,chip2,
1444 c & eps1,eps2rt**2,eps3rt**2,
1445 c & om1,om2,om12,1.0D0/rij,1.0D0/rij_shift,
1449 C Calculate gradient components.
1450 e1=e1*eps1*eps2rt**2*eps3rt**2
1451 fac=-expon*(e1+evdwij)*rij_shift
1453 fac=rij*fac-2*expon*rrij*e_augm
1454 C Calculate the radial part of the gradient
1458 C Calculate angular part of the gradient.
1466 C-----------------------------------------------------------------------------
1467 subroutine sc_angular
1468 C Calculate eps1,eps2,eps3,sigma, and parts of their derivatives in om1,om2,
1469 C om12. Called by ebp, egb, and egbv.
1471 include 'COMMON.CALC'
1475 om1=dxi*erij(1)+dyi*erij(2)+dzi*erij(3)
1476 om2=dxj*erij(1)+dyj*erij(2)+dzj*erij(3)
1477 om12=dxi*dxj+dyi*dyj+dzi*dzj
1479 C Calculate eps1(om12) and its derivative in om12
1480 faceps1=1.0D0-om12*chiom12
1481 faceps1_inv=1.0D0/faceps1
1482 eps1=dsqrt(faceps1_inv)
1483 C Following variable is eps1*deps1/dom12
1484 eps1_om12=faceps1_inv*chiom12
1485 C Calculate sigma(om1,om2,om12) and the derivatives of sigma**2 in om1,om2,
1490 facsig=om1*chiom1+om2*chiom2-2.0D0*om1om2*chiom12
1491 sigsq=1.0D0-facsig*faceps1_inv
1492 sigsq_om1=(chiom1-chiom12*om2)*faceps1_inv
1493 sigsq_om2=(chiom2-chiom12*om1)*faceps1_inv
1494 sigsq_om12=-chi12*(om1om2*faceps1-om12*facsig)*faceps1_inv**2
1495 C Calculate eps2 and its derivatives in om1, om2, and om12.
1498 chipom12=chip12*om12
1499 facp=1.0D0-om12*chipom12
1501 facp1=om1*chipom1+om2*chipom2-2.0D0*om1om2*chipom12
1502 C Following variable is the square root of eps2
1503 eps2rt=1.0D0-facp1*facp_inv
1504 C Following three variables are the derivatives of the square root of eps
1505 C in om1, om2, and om12.
1506 eps2rt_om1=-4.0D0*(chipom1-chipom12*om2)*facp_inv
1507 eps2rt_om2=-4.0D0*(chipom2-chipom12*om1)*facp_inv
1508 eps2rt_om12=4.0D0*chip12*(om1om2*facp-om12*facp1)*facp_inv**2
1509 C Evaluate the "asymmetric" factor in the VDW constant, eps3
1510 eps3rt=1.0D0-alf1*om1+alf2*om2-alf12*om12
1511 C Calculate whole angle-dependent part of epsilon and contributions
1512 C to its derivatives
1515 C----------------------------------------------------------------------------
1517 implicit real*8 (a-h,o-z)
1518 include 'DIMENSIONS'
1519 include 'DIMENSIONS.ZSCOPT'
1520 include 'COMMON.CHAIN'
1521 include 'COMMON.DERIV'
1522 include 'COMMON.CALC'
1523 double precision dcosom1(3),dcosom2(3)
1524 eom1=eps2der*eps2rt_om1-2.0D0*alf1*eps3der+sigder*sigsq_om1
1525 eom2=eps2der*eps2rt_om2+2.0D0*alf2*eps3der+sigder*sigsq_om2
1526 eom12=evdwij*eps1_om12+eps2der*eps2rt_om12
1527 & -2.0D0*alf12*eps3der+sigder*sigsq_om12
1529 dcosom1(k)=rij*(dc_norm(k,nres+i)-om1*erij(k))
1530 dcosom2(k)=rij*(dc_norm(k,nres+j)-om2*erij(k))
1533 gg(k)=gg(k)+eom1*dcosom1(k)+eom2*dcosom2(k)
1536 gvdwx(k,i)=gvdwx(k,i)-gg(k)
1537 & +(eom12*(dc_norm(k,nres+j)-om12*dc_norm(k,nres+i))
1538 & +eom1*(erij(k)-om1*dc_norm(k,nres+i)))*dsci_inv
1539 gvdwx(k,j)=gvdwx(k,j)+gg(k)
1540 & +(eom12*(dc_norm(k,nres+i)-om12*dc_norm(k,nres+j))
1541 & +eom2*(erij(k)-om2*dc_norm(k,nres+j)))*dscj_inv
1544 C Calculate the components of the gradient in DC and X
1548 gvdwc(l,k)=gvdwc(l,k)+gg(l)
1553 c------------------------------------------------------------------------------
1554 subroutine vec_and_deriv
1555 implicit real*8 (a-h,o-z)
1556 include 'DIMENSIONS'
1557 include 'DIMENSIONS.ZSCOPT'
1558 include 'COMMON.IOUNITS'
1559 include 'COMMON.GEO'
1560 include 'COMMON.VAR'
1561 include 'COMMON.LOCAL'
1562 include 'COMMON.CHAIN'
1563 include 'COMMON.VECTORS'
1564 include 'COMMON.DERIV'
1565 include 'COMMON.INTERACT'
1566 dimension uyder(3,3,2),uzder(3,3,2),vbld_inv_temp(2)
1567 C Compute the local reference systems. For reference system (i), the
1568 C X-axis points from CA(i) to CA(i+1), the Y axis is in the
1569 C CA(i)-CA(i+1)-CA(i+2) plane, and the Z axis is perpendicular to this plane.
1571 c if (i.eq.nres-1 .or. itel(i+1).eq.0) then
1572 if (i.eq.nres-1) then
1573 C Case of the last full residue
1574 C Compute the Z-axis
1575 call vecpr(dc_norm(1,i),dc_norm(1,i-1),uz(1,i))
1576 costh=dcos(pi-theta(nres))
1577 fac=1.0d0/dsqrt(1.0d0-costh*costh)
1578 c write (iout,*) "i",i," dc_norm",dc_norm(:,i),dc_norm(:,i-1),
1584 C Compute the derivatives of uz
1586 uzder(2,1,1)=-dc_norm(3,i-1)
1587 uzder(3,1,1)= dc_norm(2,i-1)
1588 uzder(1,2,1)= dc_norm(3,i-1)
1590 uzder(3,2,1)=-dc_norm(1,i-1)
1591 uzder(1,3,1)=-dc_norm(2,i-1)
1592 uzder(2,3,1)= dc_norm(1,i-1)
1595 uzder(2,1,2)= dc_norm(3,i)
1596 uzder(3,1,2)=-dc_norm(2,i)
1597 uzder(1,2,2)=-dc_norm(3,i)
1599 uzder(3,2,2)= dc_norm(1,i)
1600 uzder(1,3,2)= dc_norm(2,i)
1601 uzder(2,3,2)=-dc_norm(1,i)
1604 C Compute the Y-axis
1607 uy(k,i)=fac*(dc_norm(k,i-1)-costh*dc_norm(k,i))
1610 C Compute the derivatives of uy
1613 uyder(k,j,1)=2*dc_norm(k,i-1)*dc_norm(j,i)
1614 & -dc_norm(k,i)*dc_norm(j,i-1)
1615 uyder(k,j,2)=-dc_norm(j,i)*dc_norm(k,i)
1617 uyder(j,j,1)=uyder(j,j,1)-costh
1618 uyder(j,j,2)=1.0d0+uyder(j,j,2)
1623 uygrad(l,k,j,i)=uyder(l,k,j)
1624 uzgrad(l,k,j,i)=uzder(l,k,j)
1628 call unormderiv(uy(1,i),uyder(1,1,1),facy,uygrad(1,1,1,i))
1629 call unormderiv(uy(1,i),uyder(1,1,2),facy,uygrad(1,1,2,i))
1630 call unormderiv(uz(1,i),uzder(1,1,1),fac,uzgrad(1,1,1,i))
1631 call unormderiv(uz(1,i),uzder(1,1,2),fac,uzgrad(1,1,2,i))
1635 C Compute the Z-axis
1636 call vecpr(dc_norm(1,i),dc_norm(1,i+1),uz(1,i))
1637 costh=dcos(pi-theta(i+2))
1638 fac=1.0d0/dsqrt(1.0d0-costh*costh)
1643 C Compute the derivatives of uz
1645 uzder(2,1,1)=-dc_norm(3,i+1)
1646 uzder(3,1,1)= dc_norm(2,i+1)
1647 uzder(1,2,1)= dc_norm(3,i+1)
1649 uzder(3,2,1)=-dc_norm(1,i+1)
1650 uzder(1,3,1)=-dc_norm(2,i+1)
1651 uzder(2,3,1)= dc_norm(1,i+1)
1654 uzder(2,1,2)= dc_norm(3,i)
1655 uzder(3,1,2)=-dc_norm(2,i)
1656 uzder(1,2,2)=-dc_norm(3,i)
1658 uzder(3,2,2)= dc_norm(1,i)
1659 uzder(1,3,2)= dc_norm(2,i)
1660 uzder(2,3,2)=-dc_norm(1,i)
1663 C Compute the Y-axis
1666 uy(k,i)=facy*(dc_norm(k,i+1)-costh*dc_norm(k,i))
1669 C Compute the derivatives of uy
1672 uyder(k,j,1)=2*dc_norm(k,i+1)*dc_norm(j,i)
1673 & -dc_norm(k,i)*dc_norm(j,i+1)
1674 uyder(k,j,2)=-dc_norm(j,i)*dc_norm(k,i)
1676 uyder(j,j,1)=uyder(j,j,1)-costh
1677 uyder(j,j,2)=1.0d0+uyder(j,j,2)
1682 uygrad(l,k,j,i)=uyder(l,k,j)
1683 uzgrad(l,k,j,i)=uzder(l,k,j)
1687 call unormderiv(uy(1,i),uyder(1,1,1),facy,uygrad(1,1,1,i))
1688 call unormderiv(uy(1,i),uyder(1,1,2),facy,uygrad(1,1,2,i))
1689 call unormderiv(uz(1,i),uzder(1,1,1),fac,uzgrad(1,1,1,i))
1690 call unormderiv(uz(1,i),uzder(1,1,2),fac,uzgrad(1,1,2,i))
1696 vbld_inv_temp(1)=vbld_inv(i+1)
1697 if (i.lt.nres-1) then
1698 vbld_inv_temp(2)=vbld_inv(i+2)
1700 vbld_inv_temp(2)=vbld_inv(i)
1705 uygrad(l,k,j,i)=vbld_inv_temp(j)*uygrad(l,k,j,i)
1706 uzgrad(l,k,j,i)=vbld_inv_temp(j)*uzgrad(l,k,j,i)
1714 C--------------------------------------------------------------------------
1715 subroutine set_matrices
1716 implicit real*8 (a-h,o-z)
1717 include 'DIMENSIONS'
1721 integer status(MPI_STATUS_SIZE)
1723 include 'DIMENSIONS.ZSCOPT'
1724 include 'COMMON.IOUNITS'
1725 include 'COMMON.GEO'
1726 include 'COMMON.VAR'
1727 include 'COMMON.LOCAL'
1728 include 'COMMON.CHAIN'
1729 include 'COMMON.DERIV'
1730 include 'COMMON.INTERACT'
1731 include 'COMMON.CONTACTS'
1732 include 'COMMON.TORSION'
1733 include 'COMMON.VECTORS'
1734 include 'COMMON.FFIELD'
1735 double precision auxvec(2),auxmat(2,2)
1737 C Compute the virtual-bond-torsional-angle dependent quantities needed
1738 C to calculate the el-loc multibody terms of various order.
1740 c write(iout,*) 'SET_MATRICES nphi=',nphi,nres
1742 if (i.gt. nnt+2 .and. i.lt.nct+2) then
1743 iti = itype2loc(itype(i-2))
1747 c if (i.gt. iatel_s+1 .and. i.lt.iatel_e+4) then
1748 if (i.gt. nnt+1 .and. i.lt.nct+1) then
1749 iti1 = itype2loc(itype(i-1))
1754 cost1=dcos(theta(i-1))
1755 sint1=dsin(theta(i-1))
1757 sint1cub=sint1sq*sint1
1758 sint1cost1=2*sint1*cost1
1760 write (iout,*) "bnew1",i,iti
1761 write (iout,*) (bnew1(k,1,iti),k=1,3)
1762 write (iout,*) (bnew1(k,2,iti),k=1,3)
1763 write (iout,*) "bnew2",i,iti
1764 write (iout,*) (bnew2(k,1,iti),k=1,3)
1765 write (iout,*) (bnew2(k,2,iti),k=1,3)
1768 b1k=bnew1(1,k,iti)+(bnew1(2,k,iti)+bnew1(3,k,iti)*cost1)*cost1
1770 gtb1(k,i-2)=cost1*b1k-sint1sq*
1771 & (bnew1(2,k,iti)+2*bnew1(3,k,iti)*cost1)
1772 b2k=bnew2(1,k,iti)+(bnew2(2,k,iti)+bnew2(3,k,iti)*cost1)*cost1
1774 if (calc_grad) gtb2(k,i-2)=cost1*b2k-sint1sq*
1775 & (bnew2(2,k,iti)+2*bnew2(3,k,iti)*cost1)
1778 aux=ccnew(1,k,iti)+(ccnew(2,k,iti)+ccnew(3,k,iti)*cost1)*cost1
1779 cc(1,k,i-2)=sint1sq*aux
1780 if (calc_grad) gtcc(1,k,i-2)=sint1cost1*aux-sint1cub*
1781 & (ccnew(2,k,iti)+2*ccnew(3,k,iti)*cost1)
1782 aux=ddnew(1,k,iti)+(ddnew(2,k,iti)+ddnew(3,k,iti)*cost1)*cost1
1783 dd(1,k,i-2)=sint1sq*aux
1784 if (calc_grad) gtdd(1,k,i-2)=sint1cost1*aux-sint1cub*
1785 & (ddnew(2,k,iti)+2*ddnew(3,k,iti)*cost1)
1787 cc(2,1,i-2)=cc(1,2,i-2)
1788 cc(2,2,i-2)=-cc(1,1,i-2)
1789 gtcc(2,1,i-2)=gtcc(1,2,i-2)
1790 gtcc(2,2,i-2)=-gtcc(1,1,i-2)
1791 dd(2,1,i-2)=dd(1,2,i-2)
1792 dd(2,2,i-2)=-dd(1,1,i-2)
1793 gtdd(2,1,i-2)=gtdd(1,2,i-2)
1794 gtdd(2,2,i-2)=-gtdd(1,1,i-2)
1797 aux=eenew(1,l,k,iti)+eenew(2,l,k,iti)*cost1
1798 EE(l,k,i-2)=sint1sq*aux
1800 & gtEE(l,k,i-2)=sint1cost1*aux-sint1cub*eenew(2,l,k,iti)
1803 EE(1,1,i-2)=EE(1,1,i-2)+e0new(1,iti)*cost1
1804 EE(1,2,i-2)=EE(1,2,i-2)+e0new(2,iti)+e0new(3,iti)*cost1
1805 EE(2,1,i-2)=EE(2,1,i-2)+e0new(2,iti)*cost1+e0new(3,iti)
1806 EE(2,2,i-2)=EE(2,2,i-2)-e0new(1,iti)
1808 gtEE(1,1,i-2)=gtEE(1,1,i-2)-e0new(1,iti)*sint1
1809 gtEE(1,2,i-2)=gtEE(1,2,i-2)-e0new(3,iti)*sint1
1810 gtEE(2,1,i-2)=gtEE(2,1,i-2)-e0new(2,iti)*sint1
1812 c b1tilde(1,i-2)=b1(1,i-2)
1813 c b1tilde(2,i-2)=-b1(2,i-2)
1814 c b2tilde(1,i-2)=b2(1,i-2)
1815 c b2tilde(2,i-2)=-b2(2,i-2)
1817 write (iout,*) 'i=',i-2,gtb1(2,i-2),gtb1(1,i-2)
1818 write(iout,*) 'b1=',(b1(k,i-2),k=1,2)
1819 write(iout,*) 'b2=',(b2(k,i-2),k=1,2)
1820 write (iout,*) 'theta=', theta(i-1)
1823 c if (i.gt. nnt+2 .and. i.lt.nct+2) then
1824 c iti = itype2loc(itype(i-2))
1828 c if (i.gt. iatel_s+1 .and. i.lt.iatel_e+4) then
1829 c if (i.gt. nnt+1 .and. i.lt.nct+1) then
1830 c iti1 = itype2loc(itype(i-1))
1840 CC(k,l,i-2)=ccold(k,l,iti)
1841 DD(k,l,i-2)=ddold(k,l,iti)
1842 EE(k,l,i-2)=eeold(k,l,iti)
1846 b1tilde(1,i-2)= b1(1,i-2)
1847 b1tilde(2,i-2)=-b1(2,i-2)
1848 b2tilde(1,i-2)= b2(1,i-2)
1849 b2tilde(2,i-2)=-b2(2,i-2)
1851 Ctilde(1,1,i-2)= CC(1,1,i-2)
1852 Ctilde(1,2,i-2)= CC(1,2,i-2)
1853 Ctilde(2,1,i-2)=-CC(2,1,i-2)
1854 Ctilde(2,2,i-2)=-CC(2,2,i-2)
1856 Dtilde(1,1,i-2)= DD(1,1,i-2)
1857 Dtilde(1,2,i-2)= DD(1,2,i-2)
1858 Dtilde(2,1,i-2)=-DD(2,1,i-2)
1859 Dtilde(2,2,i-2)=-DD(2,2,i-2)
1861 write(iout,*) "i",i," iti",iti
1862 write(iout,*) 'b1=',(b1(k,i-2),k=1,2)
1863 write(iout,*) 'b2=',(b2(k,i-2),k=1,2)
1867 if (i .lt. nres+1) then
1904 if (i .gt. 3 .and. i .lt. nres+1) then
1905 obrot_der(1,i-2)=-sin1
1906 obrot_der(2,i-2)= cos1
1907 Ugder(1,1,i-2)= sin1
1908 Ugder(1,2,i-2)=-cos1
1909 Ugder(2,1,i-2)=-cos1
1910 Ugder(2,2,i-2)=-sin1
1913 obrot2_der(1,i-2)=-dwasin2
1914 obrot2_der(2,i-2)= dwacos2
1915 Ug2der(1,1,i-2)= dwasin2
1916 Ug2der(1,2,i-2)=-dwacos2
1917 Ug2der(2,1,i-2)=-dwacos2
1918 Ug2der(2,2,i-2)=-dwasin2
1920 obrot_der(1,i-2)=0.0d0
1921 obrot_der(2,i-2)=0.0d0
1922 Ugder(1,1,i-2)=0.0d0
1923 Ugder(1,2,i-2)=0.0d0
1924 Ugder(2,1,i-2)=0.0d0
1925 Ugder(2,2,i-2)=0.0d0
1926 obrot2_der(1,i-2)=0.0d0
1927 obrot2_der(2,i-2)=0.0d0
1928 Ug2der(1,1,i-2)=0.0d0
1929 Ug2der(1,2,i-2)=0.0d0
1930 Ug2der(2,1,i-2)=0.0d0
1931 Ug2der(2,2,i-2)=0.0d0
1933 c if (i.gt. iatel_s+2 .and. i.lt.iatel_e+5) then
1934 if (i.gt. nnt+2 .and. i.lt.nct+2) then
1935 iti = itype2loc(itype(i-2))
1939 c if (i.gt. iatel_s+1 .and. i.lt.iatel_e+4) then
1940 if (i.gt. nnt+1 .and. i.lt.nct+1) then
1941 iti1 = itype2loc(itype(i-1))
1945 cd write (iout,*) '*******i',i,' iti1',iti
1946 cd write (iout,*) 'b1',b1(:,iti)
1947 cd write (iout,*) 'b2',b2(:,iti)
1948 cd write (iout,*) 'Ug',Ug(:,:,i-2)
1949 c if (i .gt. iatel_s+2) then
1950 if (i .gt. nnt+2) then
1951 call matvec2(Ug(1,1,i-2),b2(1,i-2),Ub2(1,i-2))
1953 call matvec2(Ug(1,1,i-2),gtb2(1,i-2),gUb2(1,i-2))
1954 c write (iout,*) Ug(1,1,i-2),gtb2(1,i-2),gUb2(1,i-2),"chuj"
1956 c write(iout,*) "co jest kurwa", iti, EE(1,1,i),EE(2,1,i),
1957 c & EE(1,2,iti),EE(2,2,i)
1958 call matmat2(EE(1,1,i-2),Ug(1,1,i-2),EUg(1,1,i-2))
1959 call matmat2(gtEE(1,1,i-2),Ug(1,1,i-2),gtEUg(1,1,i-2))
1960 c write(iout,*) "Macierz EUG",
1961 c & eug(1,1,i-2),eug(1,2,i-2),eug(2,1,i-2),
1963 if (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0)
1965 call matmat2(CC(1,1,i-2),Ug(1,1,i-2),CUg(1,1,i-2))
1966 call matmat2(DD(1,1,i-2),Ug(1,1,i-2),DUg(1,1,i-2))
1967 call matmat2(Dtilde(1,1,i-2),Ug2(1,1,i-2),DtUg2(1,1,i-2))
1968 call matvec2(Ctilde(1,1,i-1),obrot(1,i-2),Ctobr(1,i-2))
1969 call matvec2(Dtilde(1,1,i-2),obrot2(1,i-2),Dtobr2(1,i-2))
1980 DtUg2(l,k,i-2)=0.0d0
1984 call matvec2(Ugder(1,1,i-2),b2(1,i-2),Ub2der(1,i-2))
1985 call matmat2(EE(1,1,i-2),Ugder(1,1,i-2),EUgder(1,1,i-2))
1987 muder(k,i-2)=Ub2der(k,i-2)
1989 c if (i.gt. iatel_s+1 .and. i.lt.iatel_e+4) then
1990 if (i.gt. nnt+1 .and. i.lt.nct+1) then
1991 if (itype(i-1).le.ntyp) then
1992 iti1 = itype2loc(itype(i-1))
2000 mu(k,i-2)=Ub2(k,i-2)+b1(k,i-1)
2003 write (iout,'(2hmu,i3,3f8.1,12f10.5)') i-2,rad2deg*theta(i-1),
2004 & rad2deg*theta(i),rad2deg*phi(i),mu(1,i-2),mu(2,i-2),
2005 & -b2(1,i-2),b2(2,i-2),b1(1,i-2),b1(2,i-2),
2006 & dsqrt(b2(1,i-1)**2+b2(2,i-1)**2)
2007 & +dsqrt(b1(1,i-1)**2+b1(2,i-1)**2),
2008 & ((ee(l,k,i-2),l=1,2),k=1,2)
2010 cd write (iout,*) 'mu1',mu1(:,i-2)
2011 cd write (iout,*) 'mu2',mu2(:,i-2)
2012 if (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or.wcorr6.gt.0.0d0)
2015 call matmat2(CC(1,1,i-1),Ugder(1,1,i-2),CUgder(1,1,i-2))
2016 call matmat2(DD(1,1,i-2),Ugder(1,1,i-2),DUgder(1,1,i-2))
2017 call matmat2(Dtilde(1,1,i-2),Ug2der(1,1,i-2),DtUg2der(1,1,i-2))
2018 call matvec2(Ctilde(1,1,i-1),obrot_der(1,i-2),Ctobrder(1,i-2))
2019 call matvec2(Dtilde(1,1,i-2),obrot2_der(1,i-2),Dtobr2der(1,i-2))
2021 C Vectors and matrices dependent on a single virtual-bond dihedral.
2022 call matvec2(DD(1,1,i-2),b1tilde(1,i-1),auxvec(1))
2023 call matvec2(Ug2(1,1,i-2),auxvec(1),Ug2Db1t(1,i-2))
2024 call matvec2(CC(1,1,i-1),Ub2(1,i-2),CUgb2(1,i-2))
2025 call matmat2(EUg(1,1,i-2),CC(1,1,i-1),EUgC(1,1,i-2))
2026 call matmat2(EUg(1,1,i-2),DD(1,1,i-1),EUgD(1,1,i-2))
2028 call matvec2(Ug2der(1,1,i-2),auxvec(1),Ug2Db1tder(1,i-2))
2029 call matvec2(CC(1,1,i-1),Ub2der(1,i-2),CUgb2der(1,i-2))
2030 call matmat2(EUgder(1,1,i-2),CC(1,1,i-1),EUgCder(1,1,i-2))
2031 call matmat2(EUgder(1,1,i-2),DD(1,1,i-1),EUgDder(1,1,i-2))
2035 C Matrices dependent on two consecutive virtual-bond dihedrals.
2036 C The order of matrices is from left to right.
2037 if (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or.wcorr6.gt.0.0d0)
2040 call matmat2(DtUg2(1,1,i-1),EUg(1,1,i),DtUg2EUg(1,1,i))
2042 call matmat2(DtUg2der(1,1,i-1),EUg(1,1,i),DtUg2EUgder(1,1,1,i))
2043 call matmat2(DtUg2(1,1,i-1),EUgder(1,1,i),DtUg2EUgder(1,1,2,i))
2045 call transpose2(DtUg2(1,1,i-1),auxmat(1,1))
2046 call matmat2(auxmat(1,1),EUg(1,1,i),Ug2DtEUg(1,1,i))
2048 call matmat2(auxmat(1,1),EUgder(1,1,i),Ug2DtEUgder(1,1,2,i))
2049 call transpose2(DtUg2der(1,1,i-1),auxmat(1,1))
2050 call matmat2(auxmat(1,1),EUg(1,1,i),Ug2DtEUgder(1,1,1,i))
2056 C--------------------------------------------------------------------------
2057 subroutine eelec(ees,evdw1,eel_loc,eello_turn3,eello_turn4)
2059 C This subroutine calculates the average interaction energy and its gradient
2060 C in the virtual-bond vectors between non-adjacent peptide groups, based on
2061 C the potential described in Liwo et al., Protein Sci., 1993, 2, 1715.
2062 C The potential depends both on the distance of peptide-group centers and on
2063 C the orientation of the CA-CA virtual bonds.
2065 implicit real*8 (a-h,o-z)
2069 include 'DIMENSIONS'
2070 include 'DIMENSIONS.ZSCOPT'
2071 include 'COMMON.CONTROL'
2072 include 'COMMON.IOUNITS'
2073 include 'COMMON.GEO'
2074 include 'COMMON.VAR'
2075 include 'COMMON.LOCAL'
2076 include 'COMMON.CHAIN'
2077 include 'COMMON.DERIV'
2078 include 'COMMON.INTERACT'
2079 include 'COMMON.CONTACTS'
2080 include 'COMMON.TORSION'
2081 include 'COMMON.VECTORS'
2082 include 'COMMON.FFIELD'
2083 include 'COMMON.TIME1'
2084 include 'COMMON.SPLITELE'
2085 dimension ggg(3),gggp(3),gggm(3),erij(3),dcosb(3),dcosg(3),
2086 & erder(3,3),uryg(3,3),urzg(3,3),vryg(3,3),vrzg(3,3)
2087 double precision acipa(2,2),agg(3,4),aggi(3,4),aggi1(3,4),
2088 & aggj(3,4),aggj1(3,4),a_temp(2,2),muij(4),gmuij(4)
2089 common /locel/ a_temp,agg,aggi,aggi1,aggj,aggj1,a22,a23,a32,a33,
2090 & dxi,dyi,dzi,dx_normi,dy_normi,dz_normi,xmedi,ymedi,zmedi,
2092 c 4/26/02 - AL scaling factor for 1,4 repulsive VDW interactions
2094 double precision scal_el /1.0d0/
2096 double precision scal_el /0.5d0/
2099 C 13-go grudnia roku pamietnego...
2100 double precision unmat(3,3) /1.0d0,0.0d0,0.0d0,
2101 & 0.0d0,1.0d0,0.0d0,
2102 & 0.0d0,0.0d0,1.0d0/
2103 cd write(iout,*) 'In EELEC'
2105 cd write(iout,*) 'Type',i
2106 cd write(iout,*) 'B1',B1(:,i)
2107 cd write(iout,*) 'B2',B2(:,i)
2108 cd write(iout,*) 'CC',CC(:,:,i)
2109 cd write(iout,*) 'DD',DD(:,:,i)
2110 cd write(iout,*) 'EE',EE(:,:,i)
2112 cd call check_vecgrad
2114 if (icheckgrad.eq.1) then
2116 fac=1.0d0/dsqrt(scalar(dc(1,i),dc(1,i)))
2118 dc_norm(k,i)=dc(k,i)*fac
2120 c write (iout,*) 'i',i,' fac',fac
2123 if (wel_loc.gt.0.0d0 .or. wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0
2124 & .or. wcorr6.gt.0.0d0 .or. wturn3.gt.0.0d0 .or.
2125 & wturn4.gt.0.0d0 .or. wturn6.gt.0.0d0) then
2126 c call vec_and_deriv
2132 time_mat=time_mat+MPI_Wtime()-time01
2136 cd write (iout,*) 'i=',i
2138 cd write (iout,'(i5,2f10.5)') k,uy(k,i),uz(k,i)
2141 cd write (iout,'(f10.5,2x,3f10.5,2x,3f10.5)')
2142 cd & uz(k,i),(uzgrad(k,l,1,i),l=1,3),(uzgrad(k,l,2,i),l=1,3)
2155 cd print '(a)','Enter EELEC'
2156 cd write (iout,*) 'iatel_s=',iatel_s,' iatel_e=',iatel_e
2158 gel_loc_loc(i)=0.0d0
2163 c 9/27/08 AL Split the interaction loop to ensure load balancing of turn terms
2165 C Loop over i,i+2 and i,i+3 pairs of the peptide groups
2167 C 14/01/2014 TURN3,TUNR4 does no go under periodic boundry condition
2168 do i=iturn3_start,iturn3_end
2170 C write(iout,*) "tu jest i",i
2171 if (itype(i).eq.ntyp1 .or. itype(i+1).eq.ntyp1
2172 C changes suggested by Ana to avoid out of bounds
2173 C Adam: Unnecessary: handled by iturn3_end and iturn3_start
2174 c & .or.((i+4).gt.nres)
2175 c & .or.((i-1).le.0)
2176 C end of changes by Ana
2177 C dobra zmiana wycofana
2178 & .or. itype(i+2).eq.ntyp1
2179 & .or. itype(i+3).eq.ntyp1) cycle
2180 C Adam: Instructions below will switch off existing interactions
2182 c if(itype(i-1).eq.ntyp1)cycle
2184 c if(i.LT.nres-3)then
2185 c if (itype(i+4).eq.ntyp1) cycle
2190 dx_normi=dc_norm(1,i)
2191 dy_normi=dc_norm(2,i)
2192 dz_normi=dc_norm(3,i)
2193 xmedi=c(1,i)+0.5d0*dxi
2194 ymedi=c(2,i)+0.5d0*dyi
2195 zmedi=c(3,i)+0.5d0*dzi
2196 xmedi=mod(xmedi,boxxsize)
2197 if (xmedi.lt.0) xmedi=xmedi+boxxsize
2198 ymedi=mod(ymedi,boxysize)
2199 if (ymedi.lt.0) ymedi=ymedi+boxysize
2200 zmedi=mod(zmedi,boxzsize)
2201 if (zmedi.lt.0) zmedi=zmedi+boxzsize
2203 call eelecij(i,i+2,ees,evdw1,eel_loc)
2204 if (wturn3.gt.0.0d0) call eturn3(i,eello_turn3)
2205 num_cont_hb(i)=num_conti
2207 do i=iturn4_start,iturn4_end
2209 if (itype(i).eq.ntyp1 .or. itype(i+1).eq.ntyp1
2210 C changes suggested by Ana to avoid out of bounds
2211 c & .or.((i+5).gt.nres)
2212 c & .or.((i-1).le.0)
2213 C end of changes suggested by Ana
2214 & .or. itype(i+3).eq.ntyp1
2215 & .or. itype(i+4).eq.ntyp1
2216 c & .or. itype(i+5).eq.ntyp1
2217 c & .or. itype(i).eq.ntyp1
2218 c & .or. itype(i-1).eq.ntyp1
2223 dx_normi=dc_norm(1,i)
2224 dy_normi=dc_norm(2,i)
2225 dz_normi=dc_norm(3,i)
2226 xmedi=c(1,i)+0.5d0*dxi
2227 ymedi=c(2,i)+0.5d0*dyi
2228 zmedi=c(3,i)+0.5d0*dzi
2229 C Return atom into box, boxxsize is size of box in x dimension
2231 c if (xmedi.gt.((0.5d0)*boxxsize)) xmedi=xmedi-boxxsize
2232 c if (xmedi.lt.((-0.5d0)*boxxsize)) xmedi=xmedi+boxxsize
2233 C Condition for being inside the proper box
2234 c if ((xmedi.gt.((0.5d0)*boxxsize)).or.
2235 c & (xmedi.lt.((-0.5d0)*boxxsize))) then
2239 c if (ymedi.gt.((0.5d0)*boxysize)) ymedi=ymedi-boxysize
2240 c if (ymedi.lt.((-0.5d0)*boxysize)) ymedi=ymedi+boxysize
2241 C Condition for being inside the proper box
2242 c if ((ymedi.gt.((0.5d0)*boxysize)).or.
2243 c & (ymedi.lt.((-0.5d0)*boxysize))) then
2247 c if (zmedi.gt.((0.5d0)*boxzsize)) zmedi=zmedi-boxzsize
2248 c if (zmedi.lt.((-0.5d0)*boxzsize)) zmedi=zmedi+boxzsize
2249 C Condition for being inside the proper box
2250 c if ((zmedi.gt.((0.5d0)*boxzsize)).or.
2251 c & (zmedi.lt.((-0.5d0)*boxzsize))) then
2254 xmedi=mod(xmedi,boxxsize)
2255 if (xmedi.lt.0) xmedi=xmedi+boxxsize
2256 ymedi=mod(ymedi,boxysize)
2257 if (ymedi.lt.0) ymedi=ymedi+boxysize
2258 zmedi=mod(zmedi,boxzsize)
2259 if (zmedi.lt.0) zmedi=zmedi+boxzsize
2261 num_conti=num_cont_hb(i)
2262 c write(iout,*) "JESTEM W PETLI"
2263 call eelecij(i,i+3,ees,evdw1,eel_loc)
2264 if (wturn4.gt.0.0d0 .and. itype(i+2).ne.ntyp1)
2265 & call eturn4(i,eello_turn4)
2266 num_cont_hb(i)=num_conti
2268 C Loop over all neighbouring boxes
2273 c Loop over all pairs of interacting peptide groups except i,i+2 and i,i+3
2276 do i=iatel_s,iatel_e
2279 if (itype(i).eq.ntyp1 .or. itype(i+1).eq.ntyp1
2280 C changes suggested by Ana to avoid out of bounds
2281 c & .or.((i+2).gt.nres)
2282 c & .or.((i-1).le.0)
2283 C end of changes by Ana
2284 c & .or. itype(i+2).eq.ntyp1
2285 c & .or. itype(i-1).eq.ntyp1
2290 dx_normi=dc_norm(1,i)
2291 dy_normi=dc_norm(2,i)
2292 dz_normi=dc_norm(3,i)
2293 xmedi=c(1,i)+0.5d0*dxi
2294 ymedi=c(2,i)+0.5d0*dyi
2295 zmedi=c(3,i)+0.5d0*dzi
2296 xmedi=mod(xmedi,boxxsize)
2297 if (xmedi.lt.0) xmedi=xmedi+boxxsize
2298 ymedi=mod(ymedi,boxysize)
2299 if (ymedi.lt.0) ymedi=ymedi+boxysize
2300 zmedi=mod(zmedi,boxzsize)
2301 if (zmedi.lt.0) zmedi=zmedi+boxzsize
2302 C xmedi=xmedi+xshift*boxxsize
2303 C ymedi=ymedi+yshift*boxysize
2304 C zmedi=zmedi+zshift*boxzsize
2306 C Return tom into box, boxxsize is size of box in x dimension
2308 c if (xmedi.gt.((xshift+0.5d0)*boxxsize)) xmedi=xmedi-boxxsize
2309 c if (xmedi.lt.((xshift-0.5d0)*boxxsize)) xmedi=xmedi+boxxsize
2310 C Condition for being inside the proper box
2311 c if ((xmedi.gt.((xshift+0.5d0)*boxxsize)).or.
2312 c & (xmedi.lt.((xshift-0.5d0)*boxxsize))) then
2316 c if (ymedi.gt.((yshift+0.5d0)*boxysize)) ymedi=ymedi-boxysize
2317 c if (ymedi.lt.((yshift-0.5d0)*boxysize)) ymedi=ymedi+boxysize
2318 C Condition for being inside the proper box
2319 c if ((ymedi.gt.((yshift+0.5d0)*boxysize)).or.
2320 c & (ymedi.lt.((yshift-0.5d0)*boxysize))) then
2324 c if (zmedi.gt.((zshift+0.5d0)*boxzsize)) zmedi=zmedi-boxzsize
2325 c if (zmedi.lt.((zshift-0.5d0)*boxzsize)) zmedi=zmedi+boxzsize
2326 cC Condition for being inside the proper box
2327 c if ((zmedi.gt.((zshift+0.5d0)*boxzsize)).or.
2328 c & (zmedi.lt.((zshift-0.5d0)*boxzsize))) then
2332 c write (iout,*) 'i',i,' ielstart',ielstart(i),' ielend',ielend(i)
2333 num_conti=num_cont_hb(i)
2335 do j=ielstart(i),ielend(i)
2337 C write (iout,*) i,j
2339 if (itype(j).eq.ntyp1.or. itype(j+1).eq.ntyp1
2340 C changes suggested by Ana to avoid out of bounds
2341 c & .or.((j+2).gt.nres)
2342 c & .or.((j-1).le.0)
2343 C end of changes by Ana
2344 c & .or.itype(j+2).eq.ntyp1
2345 c & .or.itype(j-1).eq.ntyp1
2347 call eelecij(i,j,ees,evdw1,eel_loc)
2349 num_cont_hb(i)=num_conti
2355 c write (iout,*) "Number of loop steps in EELEC:",ind
2357 cd write (iout,'(i3,3f10.5,5x,3f10.5)')
2358 cd & i,(gel_loc(k,i),k=1,3),gel_loc_loc(i)
2360 c 12/7/99 Adam eello_turn3 will be considered as a separate energy term
2361 ccc eel_loc=eel_loc+eello_turn3
2362 cd print *,"Processor",fg_rank," t_eelecij",t_eelecij
2365 C-------------------------------------------------------------------------------
2366 subroutine eelecij(i,j,ees,evdw1,eel_loc)
2367 implicit real*8 (a-h,o-z)
2368 include 'DIMENSIONS'
2369 include 'DIMENSIONS.ZSCOPT'
2373 include 'COMMON.CONTROL'
2374 include 'COMMON.IOUNITS'
2375 include 'COMMON.GEO'
2376 include 'COMMON.VAR'
2377 include 'COMMON.LOCAL'
2378 include 'COMMON.CHAIN'
2379 include 'COMMON.DERIV'
2380 include 'COMMON.INTERACT'
2381 include 'COMMON.CONTACTS'
2382 include 'COMMON.TORSION'
2383 include 'COMMON.VECTORS'
2384 include 'COMMON.FFIELD'
2385 include 'COMMON.TIME1'
2386 include 'COMMON.SPLITELE'
2387 include 'COMMON.SHIELD'
2388 dimension ggg(3),gggp(3),gggm(3),erij(3),dcosb(3),dcosg(3),
2389 & erder(3,3),uryg(3,3),urzg(3,3),vryg(3,3),vrzg(3,3)
2390 double precision acipa(2,2),agg(3,4),aggi(3,4),aggi1(3,4),
2391 & aggj(3,4),aggj1(3,4),a_temp(2,2),muij(4),gmuij1(4),gmuji1(4),
2392 & gmuij2(4),gmuji2(4)
2393 common /locel/ a_temp,agg,aggi,aggi1,aggj,aggj1,a22,a23,a32,a33,
2394 & dxi,dyi,dzi,dx_normi,dy_normi,dz_normi,xmedi,ymedi,zmedi,
2396 c 4/26/02 - AL scaling factor for 1,4 repulsive VDW interactions
2398 double precision scal_el /1.0d0/
2400 double precision scal_el /0.5d0/
2403 C 13-go grudnia roku pamietnego...
2404 double precision unmat(3,3) /1.0d0,0.0d0,0.0d0,
2405 & 0.0d0,1.0d0,0.0d0,
2406 & 0.0d0,0.0d0,1.0d0/
2407 integer xshift,yshift,zshift
2408 c time00=MPI_Wtime()
2409 cd write (iout,*) "eelecij",i,j
2413 if (j.eq.i+2 .and. itelj.eq.2) iteli=2
2414 aaa=app(iteli,itelj)
2415 bbb=bpp(iteli,itelj)
2416 ael6i=ael6(iteli,itelj)
2417 ael3i=ael3(iteli,itelj)
2421 dx_normj=dc_norm(1,j)
2422 dy_normj=dc_norm(2,j)
2423 dz_normj=dc_norm(3,j)
2424 C xj=c(1,j)+0.5D0*dxj-xmedi
2425 C yj=c(2,j)+0.5D0*dyj-ymedi
2426 C zj=c(3,j)+0.5D0*dzj-zmedi
2431 if (xj.lt.0) xj=xj+boxxsize
2433 if (yj.lt.0) yj=yj+boxysize
2435 if (zj.lt.0) zj=zj+boxzsize
2436 if ((zj.lt.0).or.(xj.lt.0).or.(yj.lt.0)) write (*,*) "CHUJ"
2437 dist_init=(xj-xmedi)**2+(yj-ymedi)**2+(zj-zmedi)**2
2445 xj=xj_safe+xshift*boxxsize
2446 yj=yj_safe+yshift*boxysize
2447 zj=zj_safe+zshift*boxzsize
2448 dist_temp=(xj-xmedi)**2+(yj-ymedi)**2+(zj-zmedi)**2
2449 if(dist_temp.lt.dist_init) then
2459 if (isubchap.eq.1) then
2468 C if ((i+3).lt.j) then !this condition keeps for turn3 and turn4 not subject to PBC
2470 c if (xj.gt.((0.5d0)*boxxsize)) xj=xj-boxxsize
2471 c if (xj.lt.((-0.5d0)*boxxsize)) xj=xj+boxxsize
2472 C Condition for being inside the proper box
2473 c if ((xj.gt.((0.5d0)*boxxsize)).or.
2474 c & (xj.lt.((-0.5d0)*boxxsize))) then
2478 c if (yj.gt.((0.5d0)*boxysize)) yj=yj-boxysize
2479 c if (yj.lt.((-0.5d0)*boxysize)) yj=yj+boxysize
2480 C Condition for being inside the proper box
2481 c if ((yj.gt.((0.5d0)*boxysize)).or.
2482 c & (yj.lt.((-0.5d0)*boxysize))) then
2486 c if (zj.gt.((0.5d0)*boxzsize)) zj=zj-boxzsize
2487 c if (zj.lt.((-0.5d0)*boxzsize)) zj=zj+boxzsize
2488 C Condition for being inside the proper box
2489 c if ((zj.gt.((0.5d0)*boxzsize)).or.
2490 c & (zj.lt.((-0.5d0)*boxzsize))) then
2493 C endif !endPBC condintion
2497 rij=xj*xj+yj*yj+zj*zj
2499 sss=sscale(sqrt(rij))
2500 sssgrad=sscagrad(sqrt(rij))
2501 c write (iout,*) "ij",i,j," rij",sqrt(rij)," r_cut",r_cut,
2502 c & " rlamb",rlamb," sss",sss
2503 c if (sss.gt.0.0d0) then
2509 cosa=dx_normi*dx_normj+dy_normi*dy_normj+dz_normi*dz_normj
2510 cosb=(xj*dx_normi+yj*dy_normi+zj*dz_normi)*rmij
2511 cosg=(xj*dx_normj+yj*dy_normj+zj*dz_normj)*rmij
2512 fac=cosa-3.0D0*cosb*cosg
2514 c 4/26/02 - AL scaling down 1,4 repulsive VDW interactions
2515 if (j.eq.i+2) ev1=scal_el*ev1
2520 el1=fac3*(4.0D0+fac*fac-3.0D0*(cosb*cosb+cosg*cosg))
2524 C 12/26/95 - for the evaluation of multi-body H-bonding interactions
2525 ees0ij=4.0D0+fac*fac-3.0D0*(cosb*cosb+cosg*cosg)
2526 if (shield_mode.gt.0) then
2529 el1=el1*fac_shield(i)**2*fac_shield(j)**2
2530 el2=el2*fac_shield(i)**2*fac_shield(j)**2
2539 evdw1=evdw1+evdwij*sss
2540 cd write(iout,'(2(2i3,2x),7(1pd12.4)/2(3(1pd12.4),5x)/)')
2541 cd & iteli,i,itelj,j,aaa,bbb,ael6i,ael3i,
2542 cd & 1.0D0/dsqrt(rrmij),evdwij,eesij,
2543 cd & xmedi,ymedi,zmedi,xj,yj,zj
2545 if (energy_dec) then
2546 write (iout,'(a6,2i5,0pf7.3,2i5,3e11.3)')
2548 &,iteli,itelj,aaa,evdw1,sss
2549 write (iout,'(a6,2i5,0pf7.3,2f8.3)') 'ees',i,j,eesij,
2550 &fac_shield(i),fac_shield(j)
2554 C Calculate contributions to the Cartesian gradient.
2557 facvdw=-6*rrmij*(ev1+evdwij)*sss
2558 facel=-3*rrmij*(el1+eesij)
2565 * Radial derivatives. First process both termini of the fragment (i,j)
2571 if ((fac_shield(i).gt.0).and.(fac_shield(j).gt.0).and.
2572 & (shield_mode.gt.0)) then
2574 do ilist=1,ishield_list(i)
2575 iresshield=shield_list(ilist,i)
2577 rlocshield=grad_shield_side(k,ilist,i)*eesij/fac_shield(i)
2579 gshieldx(k,iresshield)=gshieldx(k,iresshield)+
2581 & +grad_shield_loc(k,ilist,i)*eesij/fac_shield(i)*2.0
2582 gshieldc(k,iresshield-1)=gshieldc(k,iresshield-1)+rlocshield
2583 C gshieldc_loc(k,iresshield)=gshieldc_loc(k,iresshield)
2584 C & +grad_shield_loc(k,ilist,i)*eesij/fac_shield(i)
2585 C if (iresshield.gt.i) then
2586 C do ishi=i+1,iresshield-1
2587 C gshieldc(k,ishi)=gshieldc(k,ishi)+rlocshield
2588 C & +grad_shield_loc(k,ilist,i)*eesij/fac_shield(i)
2592 C do ishi=iresshield,i
2593 C gshieldc(k,ishi)=gshieldc(k,ishi)-rlocshield
2594 C & -grad_shield_loc(k,ilist,i)*eesij/fac_shield(i)
2600 do ilist=1,ishield_list(j)
2601 iresshield=shield_list(ilist,j)
2603 rlocshield=grad_shield_side(k,ilist,j)*eesij/fac_shield(j)
2605 gshieldx(k,iresshield)=gshieldx(k,iresshield)+
2607 & +grad_shield_loc(k,ilist,j)*eesij/fac_shield(j)*2.0
2608 gshieldc(k,iresshield-1)=gshieldc(k,iresshield-1)+rlocshield
2610 C & +grad_shield_loc(k,ilist,j)*eesij/fac_shield(j)
2611 C gshieldc_loc(k,iresshield)=gshieldc_loc(k,iresshield)
2612 C & +grad_shield_loc(k,ilist,j)*eesij/fac_shield(j)
2613 C if (iresshield.gt.j) then
2614 C do ishi=j+1,iresshield-1
2615 C gshieldc(k,ishi)=gshieldc(k,ishi)+rlocshield
2616 C & +grad_shield_loc(k,ilist,j)*eesij/fac_shield(j)
2620 C do ishi=iresshield,j
2621 C gshieldc(k,ishi)=gshieldc(k,ishi)-rlocshield
2622 C & -grad_shield_loc(k,ilist,j)*eesij/fac_shield(j)
2629 gshieldc(k,i)=gshieldc(k,i)+
2630 & grad_shield(k,i)*eesij/fac_shield(i)*2.0
2631 gshieldc(k,j)=gshieldc(k,j)+
2632 & grad_shield(k,j)*eesij/fac_shield(j)*2.0
2633 gshieldc(k,i-1)=gshieldc(k,i-1)+
2634 & grad_shield(k,i)*eesij/fac_shield(i)*2.0
2635 gshieldc(k,j-1)=gshieldc(k,j-1)+
2636 & grad_shield(k,j)*eesij/fac_shield(j)*2.0
2641 c ghalf=0.5D0*ggg(k)
2642 c gelc(k,i)=gelc(k,i)+ghalf
2643 c gelc(k,j)=gelc(k,j)+ghalf
2645 c 9/28/08 AL Gradient compotents will be summed only at the end
2646 C print *,"before", gelc_long(1,i), gelc_long(1,j)
2648 gelc_long(k,j)=gelc_long(k,j)+ggg(k)
2649 C & +grad_shield(k,j)*eesij/fac_shield(j)
2650 gelc_long(k,i)=gelc_long(k,i)-ggg(k)
2651 C & +grad_shield(k,i)*eesij/fac_shield(i)
2652 C gelc_long(k,i-1)=gelc_long(k,i-1)
2653 C & +grad_shield(k,i)*eesij/fac_shield(i)
2654 C gelc_long(k,j-1)=gelc_long(k,j-1)
2655 C & +grad_shield(k,j)*eesij/fac_shield(j)
2657 C print *,"bafter", gelc_long(1,i), gelc_long(1,j)
2660 * Loop over residues i+1 thru j-1.
2664 cgrad gelc(l,k)=gelc(l,k)+ggg(l)
2667 if (sss.gt.0.0) then
2668 ggg(1)=facvdw*xj+sssgrad*rmij*evdwij*xj
2669 ggg(2)=facvdw*yj+sssgrad*rmij*evdwij*yj
2670 ggg(3)=facvdw*zj+sssgrad*rmij*evdwij*zj
2677 c ghalf=0.5D0*ggg(k)
2678 c gvdwpp(k,i)=gvdwpp(k,i)+ghalf
2679 c gvdwpp(k,j)=gvdwpp(k,j)+ghalf
2681 c 9/28/08 AL Gradient compotents will be summed only at the end
2683 gvdwpp(k,j)=gvdwpp(k,j)+ggg(k)
2684 gvdwpp(k,i)=gvdwpp(k,i)-ggg(k)
2687 * Loop over residues i+1 thru j-1.
2691 cgrad gvdwpp(l,k)=gvdwpp(l,k)+ggg(l)
2697 facvdw=(ev1+evdwij)*sss
2700 fac=-3*rrmij*(facvdw+facvdw+facel)
2705 * Radial derivatives. First process both termini of the fragment (i,j)
2709 C+eesij*grad_shield(1,i)+eesij*grad_shield(1,j)
2711 C+eesij*grad_shield(2,i)+eesij*grad_shield(2,j)
2713 C+eesij*grad_shield(3,i)+eesij*grad_shield(3,j)
2715 c ghalf=0.5D0*ggg(k)
2716 c gelc(k,i)=gelc(k,i)+ghalf
2717 c gelc(k,j)=gelc(k,j)+ghalf
2719 c 9/28/08 AL Gradient compotents will be summed only at the end
2721 gelc_long(k,j)=gelc(k,j)+ggg(k)
2722 gelc_long(k,i)=gelc(k,i)-ggg(k)
2725 * Loop over residues i+1 thru j-1.
2729 cgrad gelc(l,k)=gelc(l,k)+ggg(l)
2732 c 9/28/08 AL Gradient compotents will be summed only at the end
2733 ggg(1)=facvdw*xj+sssgrad*rmij*evdwij*xj
2734 ggg(2)=facvdw*yj+sssgrad*rmij*evdwij*yj
2735 ggg(3)=facvdw*zj+sssgrad*rmij*evdwij*zj
2737 gvdwpp(k,j)=gvdwpp(k,j)+ggg(k)
2738 gvdwpp(k,i)=gvdwpp(k,i)-ggg(k)
2746 ecosa=2.0D0*fac3*fac1+fac4
2749 ecosb=(fac3*(fac1*cosg+cosb)+cosg*fac4)
2750 ecosg=(fac3*(fac1*cosb+cosg)+cosb*fac4)
2752 dcosb(k)=rmij*(dc_norm(k,i)-erij(k)*cosb)
2753 dcosg(k)=rmij*(dc_norm(k,j)-erij(k)*cosg)
2755 cd print '(2i3,2(3(1pd14.5),3x))',i,j,(dcosb(k),k=1,3),
2756 cd & (dcosg(k),k=1,3)
2758 ggg(k)=(ecosb*dcosb(k)+ecosg*dcosg(k))*
2759 & fac_shield(i)**2*fac_shield(j)**2
2762 c ghalf=0.5D0*ggg(k)
2763 c gelc(k,i)=gelc(k,i)+ghalf
2764 c & +(ecosa*(dc_norm(k,j)-cosa*dc_norm(k,i))
2765 c & + ecosb*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1)
2766 c gelc(k,j)=gelc(k,j)+ghalf
2767 c & +(ecosa*(dc_norm(k,i)-cosa*dc_norm(k,j))
2768 c & + ecosg*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1)
2772 cgrad gelc(l,k)=gelc(l,k)+ggg(l)
2775 C print *,"before22", gelc_long(1,i), gelc_long(1,j)
2778 & +((ecosa*(dc_norm(k,j)-cosa*dc_norm(k,i))
2779 & + ecosb*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1))
2780 & *fac_shield(i)**2*fac_shield(j)**2
2782 & +((ecosa*(dc_norm(k,i)-cosa*dc_norm(k,j))
2783 & + ecosg*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1))
2784 & *fac_shield(i)**2*fac_shield(j)**2
2785 gelc_long(k,j)=gelc_long(k,j)+ggg(k)
2786 gelc_long(k,i)=gelc_long(k,i)-ggg(k)
2788 C print *,"before33", gelc_long(1,i), gelc_long(1,j)
2793 IF (wel_loc.gt.0.0d0 .or. wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0
2794 & .or. wcorr6.gt.0.0d0 .or. wturn3.gt.0.0d0
2795 & .or. wturn4.gt.0.0d0 .or. wturn6.gt.0.0d0) THEN
2797 C 9/25/99 Mixed third-order local-electrostatic terms. The local-interaction
2798 C energy of a peptide unit is assumed in the form of a second-order
2799 C Fourier series in the angles lambda1 and lambda2 (see Nishikawa et al.
2800 C Macromolecules, 1974, 7, 797-806 for definition). This correlation terms
2801 C are computed for EVERY pair of non-contiguous peptide groups.
2804 if (j.lt.nres-1) then
2816 muij(kkk)=mu(k,i)*mu(l,j)
2817 c write(iout,*) 'mumu=', mu(k,i),mu(l,j),i,j,k,l
2820 gmuij1(kkk)=gtb1(k,i+1)*mu(l,j)
2821 c write(iout,*) 'k=',k,i,gtb1(k,i+1),gtb1(k,i+1)*mu(l,j)
2822 gmuij2(kkk)=gUb2(k,i)*mu(l,j)
2823 gmuji1(kkk)=mu(k,i)*gtb1(l,j+1)
2824 c write(iout,*) 'l=',l,j,gtb1(l,j+1),gtb1(l,j+1)*mu(k,i)
2825 gmuji2(kkk)=mu(k,i)*gUb2(l,j)
2831 write (iout,*) 'EELEC: i',i,' j',j
2832 write (iout,*) 'j',j,' j1',j1,' j2',j2
2833 write(iout,*) 'muij',muij
2834 write (iout,*) "uy",uy(:,i)
2835 write (iout,*) "uz",uz(:,j)
2836 write (iout,*) "erij",erij
2838 ury=scalar(uy(1,i),erij)
2839 urz=scalar(uz(1,i),erij)
2840 vry=scalar(uy(1,j),erij)
2841 vrz=scalar(uz(1,j),erij)
2842 a22=scalar(uy(1,i),uy(1,j))-3*ury*vry
2843 a23=scalar(uy(1,i),uz(1,j))-3*ury*vrz
2844 a32=scalar(uz(1,i),uy(1,j))-3*urz*vry
2845 a33=scalar(uz(1,i),uz(1,j))-3*urz*vrz
2846 fac=dsqrt(-ael6i)*r3ij
2851 cd write (iout,'(4i5,4f10.5)')
2852 cd & i,itortyp(itype(i)),j,itortyp(itype(j)),a22,a23,a32,a33
2853 cd write (iout,'(6f10.5)') (muij(k),k=1,4),fac,eel_loc_ij
2854 cd write (iout,'(2(3f10.5,5x)/2(3f10.5,5x))') uy(:,i),uz(:,i),
2855 cd & uy(:,j),uz(:,j)
2856 cd write (iout,'(4f10.5)')
2857 cd & scalar(uy(1,i),uy(1,j)),scalar(uy(1,i),uz(1,j)),
2858 cd & scalar(uz(1,i),uy(1,j)),scalar(uz(1,i),uz(1,j))
2859 cd write (iout,'(4f10.5)') ury,urz,vry,vrz
2860 cd write (iout,'(9f10.5/)')
2861 cd & fac22,a22,fac23,a23,fac32,a32,fac33,a33,eel_loc_ij
2862 C Derivatives of the elements of A in virtual-bond vectors
2864 call unormderiv(erij(1),unmat(1,1),rmij,erder(1,1))
2866 uryg(k,1)=scalar(erder(1,k),uy(1,i))
2867 uryg(k,2)=scalar(uygrad(1,k,1,i),erij(1))
2868 uryg(k,3)=scalar(uygrad(1,k,2,i),erij(1))
2869 urzg(k,1)=scalar(erder(1,k),uz(1,i))
2870 urzg(k,2)=scalar(uzgrad(1,k,1,i),erij(1))
2871 urzg(k,3)=scalar(uzgrad(1,k,2,i),erij(1))
2872 vryg(k,1)=scalar(erder(1,k),uy(1,j))
2873 vryg(k,2)=scalar(uygrad(1,k,1,j),erij(1))
2874 vryg(k,3)=scalar(uygrad(1,k,2,j),erij(1))
2875 vrzg(k,1)=scalar(erder(1,k),uz(1,j))
2876 vrzg(k,2)=scalar(uzgrad(1,k,1,j),erij(1))
2877 vrzg(k,3)=scalar(uzgrad(1,k,2,j),erij(1))
2879 C Compute radial contributions to the gradient
2897 C Add the contributions coming from er
2900 agg(k,1)=agg(k,1)+fac3*(uryg(k,1)*vry+vryg(k,1)*ury)
2901 agg(k,2)=agg(k,2)+fac3*(uryg(k,1)*vrz+vrzg(k,1)*ury)
2902 agg(k,3)=agg(k,3)+fac3*(urzg(k,1)*vry+vryg(k,1)*urz)
2903 agg(k,4)=agg(k,4)+fac3*(urzg(k,1)*vrz+vrzg(k,1)*urz)
2906 C Derivatives in DC(i)
2907 cgrad ghalf1=0.5d0*agg(k,1)
2908 cgrad ghalf2=0.5d0*agg(k,2)
2909 cgrad ghalf3=0.5d0*agg(k,3)
2910 cgrad ghalf4=0.5d0*agg(k,4)
2911 aggi(k,1)=fac*(scalar(uygrad(1,k,1,i),uy(1,j))
2912 & -3.0d0*uryg(k,2)*vry)!+ghalf1
2913 aggi(k,2)=fac*(scalar(uygrad(1,k,1,i),uz(1,j))
2914 & -3.0d0*uryg(k,2)*vrz)!+ghalf2
2915 aggi(k,3)=fac*(scalar(uzgrad(1,k,1,i),uy(1,j))
2916 & -3.0d0*urzg(k,2)*vry)!+ghalf3
2917 aggi(k,4)=fac*(scalar(uzgrad(1,k,1,i),uz(1,j))
2918 & -3.0d0*urzg(k,2)*vrz)!+ghalf4
2919 C Derivatives in DC(i+1)
2920 aggi1(k,1)=fac*(scalar(uygrad(1,k,2,i),uy(1,j))
2921 & -3.0d0*uryg(k,3)*vry)!+agg(k,1)
2922 aggi1(k,2)=fac*(scalar(uygrad(1,k,2,i),uz(1,j))
2923 & -3.0d0*uryg(k,3)*vrz)!+agg(k,2)
2924 aggi1(k,3)=fac*(scalar(uzgrad(1,k,2,i),uy(1,j))
2925 & -3.0d0*urzg(k,3)*vry)!+agg(k,3)
2926 aggi1(k,4)=fac*(scalar(uzgrad(1,k,2,i),uz(1,j))
2927 & -3.0d0*urzg(k,3)*vrz)!+agg(k,4)
2928 C Derivatives in DC(j)
2929 aggj(k,1)=fac*(scalar(uygrad(1,k,1,j),uy(1,i))
2930 & -3.0d0*vryg(k,2)*ury)!+ghalf1
2931 aggj(k,2)=fac*(scalar(uzgrad(1,k,1,j),uy(1,i))
2932 & -3.0d0*vrzg(k,2)*ury)!+ghalf2
2933 aggj(k,3)=fac*(scalar(uygrad(1,k,1,j),uz(1,i))
2934 & -3.0d0*vryg(k,2)*urz)!+ghalf3
2935 aggj(k,4)=fac*(scalar(uzgrad(1,k,1,j),uz(1,i))
2936 & -3.0d0*vrzg(k,2)*urz)!+ghalf4
2937 C Derivatives in DC(j+1) or DC(nres-1)
2938 aggj1(k,1)=fac*(scalar(uygrad(1,k,2,j),uy(1,i))
2939 & -3.0d0*vryg(k,3)*ury)
2940 aggj1(k,2)=fac*(scalar(uzgrad(1,k,2,j),uy(1,i))
2941 & -3.0d0*vrzg(k,3)*ury)
2942 aggj1(k,3)=fac*(scalar(uygrad(1,k,2,j),uz(1,i))
2943 & -3.0d0*vryg(k,3)*urz)
2944 aggj1(k,4)=fac*(scalar(uzgrad(1,k,2,j),uz(1,i))
2945 & -3.0d0*vrzg(k,3)*urz)
2946 cgrad if (j.eq.nres-1 .and. i.lt.j-2) then
2948 cgrad aggj1(k,l)=aggj1(k,l)+agg(k,l)
2963 aggi(k,l)=-aggi(k,l)
2964 aggi1(k,l)=-aggi1(k,l)
2965 aggj(k,l)=-aggj(k,l)
2966 aggj1(k,l)=-aggj1(k,l)
2970 if (j.lt.nres-1) then
2976 aggi(k,l)=-aggi(k,l)
2977 aggi1(k,l)=-aggi1(k,l)
2978 aggj(k,l)=-aggj(k,l)
2979 aggj1(k,l)=-aggj1(k,l)
2990 aggi(k,l)=-aggi(k,l)
2991 aggi1(k,l)=-aggi1(k,l)
2992 aggj(k,l)=-aggj(k,l)
2993 aggj1(k,l)=-aggj1(k,l)
2998 IF (wel_loc.gt.0.0d0) THEN
2999 C Contribution to the local-electrostatic energy coming from the i-j pair
3000 eel_loc_ij=a22*muij(1)+a23*muij(2)+a32*muij(3)
3003 write (iout,*) "muij",muij," a22",a22," a23",a23," a32",a32,
3005 write (iout,*) "ij",i,j," eel_loc_ij",eel_loc_ij,
3006 & " wel_loc",wel_loc
3008 if (shield_mode.eq.0) then
3015 eel_loc_ij=eel_loc_ij
3016 & *fac_shield(i)*fac_shield(j)
3017 if (energy_dec) write (iout,'(a6,2i5,0pf7.3)')
3018 & 'eelloc',i,j,eel_loc_ij
3019 c if (eel_loc_ij.ne.0)
3020 c & write (iout,'(a4,2i4,8f9.5)')'chuj',
3021 c & i,j,a22,muij(1),a23,muij(2),a32,muij(3),a33,muij(4)
3023 eel_loc=eel_loc+eel_loc_ij
3024 C Now derivative over eel_loc
3026 if ((fac_shield(i).gt.0).and.(fac_shield(j).gt.0).and.
3027 & (shield_mode.gt.0)) then
3030 do ilist=1,ishield_list(i)
3031 iresshield=shield_list(ilist,i)
3033 rlocshield=grad_shield_side(k,ilist,i)*eel_loc_ij
3036 gshieldx_ll(k,iresshield)=gshieldx_ll(k,iresshield)+
3038 & +grad_shield_loc(k,ilist,i)*eel_loc_ij/fac_shield(i)
3039 gshieldc_ll(k,iresshield-1)=gshieldc_ll(k,iresshield-1)
3043 do ilist=1,ishield_list(j)
3044 iresshield=shield_list(ilist,j)
3046 rlocshield=grad_shield_side(k,ilist,j)*eel_loc_ij
3049 gshieldx_ll(k,iresshield)=gshieldx_ll(k,iresshield)+
3051 & +grad_shield_loc(k,ilist,j)*eel_loc_ij/fac_shield(j)
3052 gshieldc_ll(k,iresshield-1)=gshieldc_ll(k,iresshield-1)
3059 gshieldc_ll(k,i)=gshieldc_ll(k,i)+
3060 & grad_shield(k,i)*eel_loc_ij/fac_shield(i)
3061 gshieldc_ll(k,j)=gshieldc_ll(k,j)+
3062 & grad_shield(k,j)*eel_loc_ij/fac_shield(j)
3063 gshieldc_ll(k,i-1)=gshieldc_ll(k,i-1)+
3064 & grad_shield(k,i)*eel_loc_ij/fac_shield(i)
3065 gshieldc_ll(k,j-1)=gshieldc_ll(k,j-1)+
3066 & grad_shield(k,j)*eel_loc_ij/fac_shield(j)
3071 c write (iout,*) 'i',i,' j',j,itype(i),itype(j),
3072 c & ' eel_loc_ij',eel_loc_ij
3073 C write(iout,*) 'muije=',i,j,muij(1),muij(2),muij(3),muij(4)
3074 C Calculate patrial derivative for theta angle
3076 geel_loc_ij=(a22*gmuij1(1)
3080 & *fac_shield(i)*fac_shield(j)
3081 c write(iout,*) "derivative over thatai"
3082 c write(iout,*) a22*gmuij1(1), a23*gmuij1(2) ,a32*gmuij1(3),
3084 gloc(nphi+i,icg)=gloc(nphi+i,icg)+
3085 & geel_loc_ij*wel_loc
3086 c write(iout,*) "derivative over thatai-1"
3087 c write(iout,*) a22*gmuij2(1), a23*gmuij2(2) ,a32*gmuij2(3),
3094 gloc(nphi+i-1,icg)=gloc(nphi+i-1,icg)+
3095 & geel_loc_ij*wel_loc
3096 & *fac_shield(i)*fac_shield(j)
3098 c Derivative over j residue
3099 geel_loc_ji=a22*gmuji1(1)
3103 c write(iout,*) "derivative over thataj"
3104 c write(iout,*) a22*gmuji1(1), a23*gmuji1(2) ,a32*gmuji1(3),
3107 gloc(nphi+j,icg)=gloc(nphi+j,icg)+
3108 & geel_loc_ji*wel_loc
3109 & *fac_shield(i)*fac_shield(j)
3116 c write(iout,*) "derivative over thataj-1"
3117 c write(iout,*) a22*gmuji2(1), a23*gmuji2(2) ,a32*gmuji2(3),
3119 gloc(nphi+j-1,icg)=gloc(nphi+j-1,icg)+
3120 & geel_loc_ji*wel_loc
3121 & *fac_shield(i)*fac_shield(j)
3123 cd write (iout,*) 'i',i,' j',j,' eel_loc_ij',eel_loc_ij
3125 C Partial derivatives in virtual-bond dihedral angles gamma
3127 & gel_loc_loc(i-1)=gel_loc_loc(i-1)+
3128 & (a22*muder(1,i)*mu(1,j)+a23*muder(1,i)*mu(2,j)
3129 & +a32*muder(2,i)*mu(1,j)+a33*muder(2,i)*mu(2,j))
3130 & *fac_shield(i)*fac_shield(j)
3132 gel_loc_loc(j-1)=gel_loc_loc(j-1)+
3133 & (a22*mu(1,i)*muder(1,j)+a23*mu(1,i)*muder(2,j)
3134 & +a32*mu(2,i)*muder(1,j)+a33*mu(2,i)*muder(2,j))
3135 & *fac_shield(i)*fac_shield(j)
3136 C Derivatives of eello in DC(i+1) thru DC(j-1) or DC(nres-2)
3138 ggg(l)=(agg(l,1)*muij(1)+
3139 & agg(l,2)*muij(2)+agg(l,3)*muij(3)+agg(l,4)*muij(4))
3140 & *fac_shield(i)*fac_shield(j)
3141 gel_loc_long(l,j)=gel_loc_long(l,j)+ggg(l)
3142 gel_loc_long(l,i)=gel_loc_long(l,i)-ggg(l)
3143 cgrad ghalf=0.5d0*ggg(l)
3144 cgrad gel_loc(l,i)=gel_loc(l,i)+ghalf
3145 cgrad gel_loc(l,j)=gel_loc(l,j)+ghalf
3149 cgrad gel_loc(l,k)=gel_loc(l,k)+ggg(l)
3152 C Remaining derivatives of eello
3154 gel_loc(l,i)=gel_loc(l,i)+(aggi(l,1)*muij(1)+
3155 & aggi(l,2)*muij(2)+aggi(l,3)*muij(3)+aggi(l,4)*muij(4))
3156 & *fac_shield(i)*fac_shield(j)
3158 gel_loc(l,i+1)=gel_loc(l,i+1)+(aggi1(l,1)*muij(1)+
3159 & aggi1(l,2)*muij(2)+aggi1(l,3)*muij(3)+aggi1(l,4)*muij(4))
3160 & *fac_shield(i)*fac_shield(j)
3162 gel_loc(l,j)=gel_loc(l,j)+(aggj(l,1)*muij(1)+
3163 & aggj(l,2)*muij(2)+aggj(l,3)*muij(3)+aggj(l,4)*muij(4))
3164 & *fac_shield(i)*fac_shield(j)
3166 gel_loc(l,j1)=gel_loc(l,j1)+(aggj1(l,1)*muij(1)+
3167 & aggj1(l,2)*muij(2)+aggj1(l,3)*muij(3)+aggj1(l,4)*muij(4))
3168 & *fac_shield(i)*fac_shield(j)
3175 C Change 12/26/95 to calculate four-body contributions to H-bonding energy
3176 c if (j.gt.i+1 .and. num_conti.le.maxconts) then
3177 if (wcorr+wcorr4+wcorr5+wcorr6.gt.0.0d0
3178 & .and. num_conti.le.maxconts) then
3179 c write (iout,*) i,j," entered corr"
3181 C Calculate the contact function. The ith column of the array JCONT will
3182 C contain the numbers of atoms that make contacts with the atom I (of numbers
3183 C greater than I). The arrays FACONT and GACONT will contain the values of
3184 C the contact function and its derivative.
3185 c r0ij=1.02D0*rpp(iteli,itelj)
3186 c r0ij=1.11D0*rpp(iteli,itelj)
3187 r0ij=2.20D0*rpp(iteli,itelj)
3188 c r0ij=1.55D0*rpp(iteli,itelj)
3189 call gcont(rij,r0ij,1.0D0,0.2d0*r0ij,fcont,fprimcont)
3190 if (fcont.gt.0.0D0) then
3191 num_conti=num_conti+1
3192 if (num_conti.gt.maxconts) then
3193 write (iout,*) 'WARNING - max. # of contacts exceeded;',
3194 & ' will skip next contacts for this conf.'
3196 jcont_hb(num_conti,i)=j
3197 cd write (iout,*) "i",i," j",j," num_conti",num_conti,
3198 cd & " jcont_hb",jcont_hb(num_conti,i)
3199 IF (wcorr4.gt.0.0d0 .or. wcorr5.gt.0.0d0 .or.
3200 & wcorr6.gt.0.0d0 .or. wturn6.gt.0.0d0) THEN
3201 C 9/30/99 (AL) - store components necessary to evaluate higher-order loc-el
3203 d_cont(num_conti,i)=rij
3204 cd write (2,'(3e15.5)') rij,r0ij+0.2d0*r0ij,rij
3205 C --- Electrostatic-interaction matrix ---
3206 a_chuj(1,1,num_conti,i)=a22
3207 a_chuj(1,2,num_conti,i)=a23
3208 a_chuj(2,1,num_conti,i)=a32
3209 a_chuj(2,2,num_conti,i)=a33
3210 C --- Gradient of rij
3213 grij_hb_cont(kkk,num_conti,i)=erij(kkk)
3220 a_chuj_der(k,l,m,1,num_conti,i)=agg(m,kkll)
3221 a_chuj_der(k,l,m,2,num_conti,i)=aggi(m,kkll)
3222 a_chuj_der(k,l,m,3,num_conti,i)=aggi1(m,kkll)
3223 a_chuj_der(k,l,m,4,num_conti,i)=aggj(m,kkll)
3224 a_chuj_der(k,l,m,5,num_conti,i)=aggj1(m,kkll)
3230 IF (wcorr4.eq.0.0d0 .and. wcorr.gt.0.0d0) THEN
3231 C Calculate contact energies
3233 wij=cosa-3.0D0*cosb*cosg
3236 c fac3=dsqrt(-ael6i)/r0ij**3
3237 fac3=dsqrt(-ael6i)*r3ij
3238 c ees0pij=dsqrt(4.0D0+cosa4+wij*wij-3.0D0*cosbg1*cosbg1)
3239 ees0tmp=4.0D0+cosa4+wij*wij-3.0D0*cosbg1*cosbg1
3240 if (ees0tmp.gt.0) then
3241 ees0pij=dsqrt(ees0tmp)
3245 c ees0mij=dsqrt(4.0D0-cosa4+wij*wij-3.0D0*cosbg2*cosbg2)
3246 ees0tmp=4.0D0-cosa4+wij*wij-3.0D0*cosbg2*cosbg2
3247 if (ees0tmp.gt.0) then
3248 ees0mij=dsqrt(ees0tmp)
3253 if (shield_mode.eq.0) then
3257 ees0plist(num_conti,i)=j
3258 C fac_shield(i)=0.4d0
3259 C fac_shield(j)=0.6d0
3261 ees0p(num_conti,i)=0.5D0*fac3*(ees0pij+ees0mij)
3262 & *fac_shield(i)*fac_shield(j)
3263 ees0m(num_conti,i)=0.5D0*fac3*(ees0pij-ees0mij)
3264 & *fac_shield(i)*fac_shield(j)
3265 C Diagnostics. Comment out or remove after debugging!
3266 c ees0p(num_conti,i)=0.5D0*fac3*ees0pij
3267 c ees0m(num_conti,i)=0.5D0*fac3*ees0mij
3268 c ees0m(num_conti,i)=0.0D0
3270 c write (iout,*) 'i=',i,' j=',j,' rij=',rij,' r0ij=',r0ij,
3271 c & ' ees0ij=',ees0p(num_conti,i),ees0m(num_conti,i),' fcont=',fcont
3272 C Angular derivatives of the contact function
3274 ees0pij1=fac3/ees0pij
3275 ees0mij1=fac3/ees0mij
3276 fac3p=-3.0D0*fac3*rrmij
3277 ees0pijp=0.5D0*fac3p*(ees0pij+ees0mij)
3278 ees0mijp=0.5D0*fac3p*(ees0pij-ees0mij)
3280 ecosa1= ees0pij1*( 1.0D0+0.5D0*wij)
3281 ecosb1=-1.5D0*ees0pij1*(wij*cosg+cosbg1)
3282 ecosg1=-1.5D0*ees0pij1*(wij*cosb+cosbg1)
3283 ecosa2= ees0mij1*(-1.0D0+0.5D0*wij)
3284 ecosb2=-1.5D0*ees0mij1*(wij*cosg+cosbg2)
3285 ecosg2=-1.5D0*ees0mij1*(wij*cosb-cosbg2)
3286 ecosap=ecosa1+ecosa2
3287 ecosbp=ecosb1+ecosb2
3288 ecosgp=ecosg1+ecosg2
3289 ecosam=ecosa1-ecosa2
3290 ecosbm=ecosb1-ecosb2
3291 ecosgm=ecosg1-ecosg2
3300 facont_hb(num_conti,i)=fcont
3303 fprimcont=fprimcont/rij
3304 cd facont_hb(num_conti,i)=1.0D0
3305 C Following line is for diagnostics.
3308 dcosb(k)=rmij*(dc_norm(k,i)-erij(k)*cosb)
3309 dcosg(k)=rmij*(dc_norm(k,j)-erij(k)*cosg)
3312 gggp(k)=ecosbp*dcosb(k)+ecosgp*dcosg(k)
3313 gggm(k)=ecosbm*dcosb(k)+ecosgm*dcosg(k)
3315 gggp(1)=gggp(1)+ees0pijp*xj
3316 gggp(2)=gggp(2)+ees0pijp*yj
3317 gggp(3)=gggp(3)+ees0pijp*zj
3318 gggm(1)=gggm(1)+ees0mijp*xj
3319 gggm(2)=gggm(2)+ees0mijp*yj
3320 gggm(3)=gggm(3)+ees0mijp*zj
3321 C Derivatives due to the contact function
3322 gacont_hbr(1,num_conti,i)=fprimcont*xj
3323 gacont_hbr(2,num_conti,i)=fprimcont*yj
3324 gacont_hbr(3,num_conti,i)=fprimcont*zj
3327 c 10/24/08 cgrad and ! comments indicate the parts of the code removed
3328 c following the change of gradient-summation algorithm.
3330 cgrad ghalfp=0.5D0*gggp(k)
3331 cgrad ghalfm=0.5D0*gggm(k)
3332 gacontp_hb1(k,num_conti,i)=!ghalfp
3333 & +(ecosap*(dc_norm(k,j)-cosa*dc_norm(k,i))
3334 & + ecosbp*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1)
3335 & *fac_shield(i)*fac_shield(j)
3337 gacontp_hb2(k,num_conti,i)=!ghalfp
3338 & +(ecosap*(dc_norm(k,i)-cosa*dc_norm(k,j))
3339 & + ecosgp*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1)
3340 & *fac_shield(i)*fac_shield(j)
3342 gacontp_hb3(k,num_conti,i)=gggp(k)
3343 & *fac_shield(i)*fac_shield(j)
3345 gacontm_hb1(k,num_conti,i)=!ghalfm
3346 & +(ecosam*(dc_norm(k,j)-cosa*dc_norm(k,i))
3347 & + ecosbm*(erij(k)-cosb*dc_norm(k,i)))*vbld_inv(i+1)
3348 & *fac_shield(i)*fac_shield(j)
3350 gacontm_hb2(k,num_conti,i)=!ghalfm
3351 & +(ecosam*(dc_norm(k,i)-cosa*dc_norm(k,j))
3352 & + ecosgm*(erij(k)-cosg*dc_norm(k,j)))*vbld_inv(j+1)
3353 & *fac_shield(i)*fac_shield(j)
3355 gacontm_hb3(k,num_conti,i)=gggm(k)
3356 & *fac_shield(i)*fac_shield(j)
3359 C Diagnostics. Comment out or remove after debugging!
3361 cdiag gacontp_hb1(k,num_conti,i)=0.0D0
3362 cdiag gacontp_hb2(k,num_conti,i)=0.0D0
3363 cdiag gacontp_hb3(k,num_conti,i)=0.0D0
3364 cdiag gacontm_hb1(k,num_conti,i)=0.0D0
3365 cdiag gacontm_hb2(k,num_conti,i)=0.0D0
3366 cdiag gacontm_hb3(k,num_conti,i)=0.0D0
3372 endif ! num_conti.le.maxconts
3376 if (wturn3.gt.0.0d0 .or. wturn4.gt.0.0d0) then
3379 ghalf=0.5d0*agg(l,k)
3380 aggi(l,k)=aggi(l,k)+ghalf
3381 aggi1(l,k)=aggi1(l,k)+agg(l,k)
3382 aggj(l,k)=aggj(l,k)+ghalf
3385 if (j.eq.nres-1 .and. i.lt.j-2) then
3388 aggj1(l,k)=aggj1(l,k)+agg(l,k)
3394 c t_eelecij=t_eelecij+MPI_Wtime()-time00
3397 C-----------------------------------------------------------------------------
3398 subroutine eturn3(i,eello_turn3)
3399 C Third- and fourth-order contributions from turns
3400 implicit real*8 (a-h,o-z)
3401 include 'DIMENSIONS'
3402 include 'DIMENSIONS.ZSCOPT'
3403 include 'COMMON.IOUNITS'
3404 include 'COMMON.GEO'
3405 include 'COMMON.VAR'
3406 include 'COMMON.LOCAL'
3407 include 'COMMON.CHAIN'
3408 include 'COMMON.DERIV'
3409 include 'COMMON.INTERACT'
3410 include 'COMMON.CONTACTS'
3411 include 'COMMON.TORSION'
3412 include 'COMMON.VECTORS'
3413 include 'COMMON.FFIELD'
3414 include 'COMMON.CONTROL'
3415 include 'COMMON.SHIELD'
3417 double precision auxmat(2,2),auxmat1(2,2),auxmat2(2,2),pizda(2,2),
3418 & e1t(2,2),e2t(2,2),e3t(2,2),e1tder(2,2),e2tder(2,2),e3tder(2,2),
3419 & e1a(2,2),ae3(2,2),ae3e2(2,2),auxvec(2),auxvec1(2),gpizda1(2,2),
3420 & gpizda2(2,2),auxgmat1(2,2),auxgmatt1(2,2),
3421 & auxgmat2(2,2),auxgmatt2(2,2)
3422 double precision agg(3,4),aggi(3,4),aggi1(3,4),
3423 & aggj(3,4),aggj1(3,4),a_temp(2,2),auxmat3(2,2)
3424 common /locel/ a_temp,agg,aggi,aggi1,aggj,aggj1,a22,a23,a32,a33,
3425 & dxi,dyi,dzi,dx_normi,dy_normi,dz_normi,xmedi,ymedi,zmedi,
3428 c write (iout,*) "eturn3",i,j,j1,j2
3433 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
3435 C Third-order contributions
3442 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
3443 cd call checkint_turn3(i,a_temp,eello_turn3_num)
3444 call matmat2(EUg(1,1,i+1),EUg(1,1,i+2),auxmat(1,1))
3445 c auxalary matices for theta gradient
3446 c auxalary matrix for i+1 and constant i+2
3447 call matmat2(gtEUg(1,1,i+1),EUg(1,1,i+2),auxgmat1(1,1))
3448 c auxalary matrix for i+2 and constant i+1
3449 call matmat2(EUg(1,1,i+1),gtEUg(1,1,i+2),auxgmat2(1,1))
3450 call transpose2(auxmat(1,1),auxmat1(1,1))
3451 call transpose2(auxgmat1(1,1),auxgmatt1(1,1))
3452 call transpose2(auxgmat2(1,1),auxgmatt2(1,1))
3453 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
3454 call matmat2(a_temp(1,1),auxgmatt1(1,1),gpizda1(1,1))
3455 call matmat2(a_temp(1,1),auxgmatt2(1,1),gpizda2(1,1))
3456 if (shield_mode.eq.0) then
3463 eello_turn3=eello_turn3+0.5d0*(pizda(1,1)+pizda(2,2))
3464 & *fac_shield(i)*fac_shield(j)
3465 eello_t3=0.5d0*(pizda(1,1)+pizda(2,2))
3466 & *fac_shield(i)*fac_shield(j)
3467 if (energy_dec) write (iout,'(6heturn3,2i5,0pf7.3)') i,i+2,
3471 C Derivatives in theta
3472 gloc(nphi+i,icg)=gloc(nphi+i,icg)
3473 & +0.5d0*(gpizda1(1,1)+gpizda1(2,2))*wturn3
3474 & *fac_shield(i)*fac_shield(j)
3475 gloc(nphi+i+1,icg)=gloc(nphi+i+1,icg)
3476 & +0.5d0*(gpizda2(1,1)+gpizda2(2,2))*wturn3
3477 & *fac_shield(i)*fac_shield(j)
3480 C Derivatives in shield mode
3481 if ((fac_shield(i).gt.0).and.(fac_shield(j).gt.0).and.
3482 & (shield_mode.gt.0)) then
3485 do ilist=1,ishield_list(i)
3486 iresshield=shield_list(ilist,i)
3488 rlocshield=grad_shield_side(k,ilist,i)*eello_t3/fac_shield(i)
3490 gshieldx_t3(k,iresshield)=gshieldx_t3(k,iresshield)+
3492 & +grad_shield_loc(k,ilist,i)*eello_t3/fac_shield(i)
3493 gshieldc_t3(k,iresshield-1)=gshieldc_t3(k,iresshield-1)
3497 do ilist=1,ishield_list(j)
3498 iresshield=shield_list(ilist,j)
3500 rlocshield=grad_shield_side(k,ilist,j)*eello_t3/fac_shield(j)
3502 gshieldx_t3(k,iresshield)=gshieldx_t3(k,iresshield)+
3504 & +grad_shield_loc(k,ilist,j)*eello_t3/fac_shield(j)
3505 gshieldc_t3(k,iresshield-1)=gshieldc_t3(k,iresshield-1)
3512 gshieldc_t3(k,i)=gshieldc_t3(k,i)+
3513 & grad_shield(k,i)*eello_t3/fac_shield(i)
3514 gshieldc_t3(k,j)=gshieldc_t3(k,j)+
3515 & grad_shield(k,j)*eello_t3/fac_shield(j)
3516 gshieldc_t3(k,i-1)=gshieldc_t3(k,i-1)+
3517 & grad_shield(k,i)*eello_t3/fac_shield(i)
3518 gshieldc_t3(k,j-1)=gshieldc_t3(k,j-1)+
3519 & grad_shield(k,j)*eello_t3/fac_shield(j)
3523 C if (energy_dec) write (iout,'(a6,2i5,0pf7.3)')
3524 cd write (2,*) 'i,',i,' j',j,'eello_turn3',
3525 cd & 0.5d0*(pizda(1,1)+pizda(2,2)),
3526 cd & ' eello_turn3_num',4*eello_turn3_num
3527 C Derivatives in gamma(i)
3528 call matmat2(EUgder(1,1,i+1),EUg(1,1,i+2),auxmat2(1,1))
3529 call transpose2(auxmat2(1,1),auxmat3(1,1))
3530 call matmat2(a_temp(1,1),auxmat3(1,1),pizda(1,1))
3531 gel_loc_turn3(i)=gel_loc_turn3(i)+0.5d0*(pizda(1,1)+pizda(2,2))
3532 & *fac_shield(i)*fac_shield(j)
3533 C Derivatives in gamma(i+1)
3534 call matmat2(EUg(1,1,i+1),EUgder(1,1,i+2),auxmat2(1,1))
3535 call transpose2(auxmat2(1,1),auxmat3(1,1))
3536 call matmat2(a_temp(1,1),auxmat3(1,1),pizda(1,1))
3537 gel_loc_turn3(i+1)=gel_loc_turn3(i+1)
3538 & +0.5d0*(pizda(1,1)+pizda(2,2))
3539 & *fac_shield(i)*fac_shield(j)
3540 C Cartesian derivatives
3542 c ghalf1=0.5d0*agg(l,1)
3543 c ghalf2=0.5d0*agg(l,2)
3544 c ghalf3=0.5d0*agg(l,3)
3545 c ghalf4=0.5d0*agg(l,4)
3546 a_temp(1,1)=aggi(l,1)!+ghalf1
3547 a_temp(1,2)=aggi(l,2)!+ghalf2
3548 a_temp(2,1)=aggi(l,3)!+ghalf3
3549 a_temp(2,2)=aggi(l,4)!+ghalf4
3550 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
3551 gcorr3_turn(l,i)=gcorr3_turn(l,i)
3552 & +0.5d0*(pizda(1,1)+pizda(2,2))
3553 & *fac_shield(i)*fac_shield(j)
3555 a_temp(1,1)=aggi1(l,1)!+agg(l,1)
3556 a_temp(1,2)=aggi1(l,2)!+agg(l,2)
3557 a_temp(2,1)=aggi1(l,3)!+agg(l,3)
3558 a_temp(2,2)=aggi1(l,4)!+agg(l,4)
3559 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
3560 gcorr3_turn(l,i+1)=gcorr3_turn(l,i+1)
3561 & +0.5d0*(pizda(1,1)+pizda(2,2))
3562 & *fac_shield(i)*fac_shield(j)
3563 a_temp(1,1)=aggj(l,1)!+ghalf1
3564 a_temp(1,2)=aggj(l,2)!+ghalf2
3565 a_temp(2,1)=aggj(l,3)!+ghalf3
3566 a_temp(2,2)=aggj(l,4)!+ghalf4
3567 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
3568 gcorr3_turn(l,j)=gcorr3_turn(l,j)
3569 & +0.5d0*(pizda(1,1)+pizda(2,2))
3570 & *fac_shield(i)*fac_shield(j)
3571 a_temp(1,1)=aggj1(l,1)
3572 a_temp(1,2)=aggj1(l,2)
3573 a_temp(2,1)=aggj1(l,3)
3574 a_temp(2,2)=aggj1(l,4)
3575 call matmat2(a_temp(1,1),auxmat1(1,1),pizda(1,1))
3576 gcorr3_turn(l,j1)=gcorr3_turn(l,j1)
3577 & +0.5d0*(pizda(1,1)+pizda(2,2))
3578 & *fac_shield(i)*fac_shield(j)
3585 C-------------------------------------------------------------------------------
3586 subroutine eturn4(i,eello_turn4)
3587 C Third- and fourth-order contributions from turns
3588 implicit real*8 (a-h,o-z)
3589 include 'DIMENSIONS'
3590 include 'DIMENSIONS.ZSCOPT'
3591 include 'COMMON.IOUNITS'
3592 include 'COMMON.GEO'
3593 include 'COMMON.VAR'
3594 include 'COMMON.LOCAL'
3595 include 'COMMON.CHAIN'
3596 include 'COMMON.DERIV'
3597 include 'COMMON.INTERACT'
3598 include 'COMMON.CONTACTS'
3599 include 'COMMON.TORSION'
3600 include 'COMMON.VECTORS'
3601 include 'COMMON.FFIELD'
3602 include 'COMMON.CONTROL'
3603 include 'COMMON.SHIELD'
3605 double precision auxmat(2,2),auxmat1(2,2),auxmat2(2,2),pizda(2,2),
3606 & e1t(2,2),e2t(2,2),e3t(2,2),e1tder(2,2),e2tder(2,2),e3tder(2,2),
3607 & e1a(2,2),ae3(2,2),ae3e2(2,2),auxvec(2),auxvec1(2),auxgvec(2),
3608 & auxgEvec1(2),auxgEvec2(2),auxgEvec3(2),
3609 & gte1t(2,2),gte2t(2,2),gte3t(2,2),
3610 & gte1a(2,2),gtae3(2,2),gtae3e2(2,2), ae3gte2(2,2),
3611 & gtEpizda1(2,2),gtEpizda2(2,2),gtEpizda3(2,2)
3612 double precision agg(3,4),aggi(3,4),aggi1(3,4),
3613 & aggj(3,4),aggj1(3,4),a_temp(2,2),auxmat3(2,2)
3614 common /locel/ a_temp,agg,aggi,aggi1,aggj,aggj1,a22,a23,a32,a33,
3615 & dxi,dyi,dzi,dx_normi,dy_normi,dz_normi,xmedi,ymedi,zmedi,
3618 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
3620 C Fourth-order contributions
3628 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
3629 cd call checkint_turn4(i,a_temp,eello_turn4_num)
3630 c write (iout,*) "eturn4 i",i," j",j," j1",j1," j2",j2
3631 c write(iout,*)"WCHODZE W PROGRAM"
3636 iti1=itype2loc(itype(i+1))
3637 iti2=itype2loc(itype(i+2))
3638 iti3=itype2loc(itype(i+3))
3639 c write(iout,*) "iti1",iti1," iti2",iti2," iti3",iti3
3640 call transpose2(EUg(1,1,i+1),e1t(1,1))
3641 call transpose2(Eug(1,1,i+2),e2t(1,1))
3642 call transpose2(Eug(1,1,i+3),e3t(1,1))
3643 C Ematrix derivative in theta
3644 call transpose2(gtEUg(1,1,i+1),gte1t(1,1))
3645 call transpose2(gtEug(1,1,i+2),gte2t(1,1))
3646 call transpose2(gtEug(1,1,i+3),gte3t(1,1))
3647 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
3648 c eta1 in derivative theta
3649 call matmat2(gte1t(1,1),a_temp(1,1),gte1a(1,1))
3650 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
3651 c auxgvec is derivative of Ub2 so i+3 theta
3652 call matvec2(e1a(1,1),gUb2(1,i+3),auxgvec(1))
3653 c auxalary matrix of E i+1
3654 call matvec2(gte1a(1,1),Ub2(1,i+3),auxgEvec1(1))
3657 s1=scalar2(b1(1,i+2),auxvec(1))
3658 c derivative of theta i+2 with constant i+3
3659 gs23=scalar2(gtb1(1,i+2),auxvec(1))
3660 c derivative of theta i+2 with constant i+2
3661 gs32=scalar2(b1(1,i+2),auxgvec(1))
3662 c derivative of E matix in theta of i+1
3663 gsE13=scalar2(b1(1,i+2),auxgEvec1(1))
3665 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
3666 c ea31 in derivative theta
3667 call matmat2(a_temp(1,1),gte3t(1,1),gtae3(1,1))
3668 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
3669 c auxilary matrix auxgvec of Ub2 with constant E matirx
3670 call matvec2(ae3(1,1),gUb2(1,i+2),auxgvec(1))
3671 c auxilary matrix auxgEvec1 of E matix with Ub2 constant
3672 call matvec2(gtae3(1,1),Ub2(1,i+2),auxgEvec3(1))
3676 s2=scalar2(b1(1,i+1),auxvec(1))
3677 c derivative of theta i+1 with constant i+3
3678 gs13=scalar2(gtb1(1,i+1),auxvec(1))
3679 c derivative of theta i+2 with constant i+1
3680 gs21=scalar2(b1(1,i+1),auxgvec(1))
3681 c derivative of theta i+3 with constant i+1
3682 gsE31=scalar2(b1(1,i+1),auxgEvec3(1))
3683 c write(iout,*) gs1,gs2,'i=',i,auxgvec(1),gUb2(1,i+2),gtb1(1,i+2),
3685 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
3686 c two derivatives over diffetent matrices
3687 c gtae3e2 is derivative over i+3
3688 call matmat2(gtae3(1,1),e2t(1,1),gtae3e2(1,1))
3689 c ae3gte2 is derivative over i+2
3690 call matmat2(ae3(1,1),gte2t(1,1),ae3gte2(1,1))
3691 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
3692 c three possible derivative over theta E matices
3694 call matmat2(ae3e2(1,1),gte1t(1,1),gtEpizda1(1,1))
3696 call matmat2(ae3gte2(1,1),e1t(1,1),gtEpizda2(1,1))
3698 call matmat2(gtae3e2(1,1),e1t(1,1),gtEpizda3(1,1))
3699 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3701 gsEE1=0.5d0*(gtEpizda1(1,1)+gtEpizda1(2,2))
3702 gsEE2=0.5d0*(gtEpizda2(1,1)+gtEpizda2(2,2))
3703 gsEE3=0.5d0*(gtEpizda3(1,1)+gtEpizda3(2,2))
3704 if (shield_mode.eq.0) then
3711 eello_turn4=eello_turn4-(s1+s2+s3)
3712 & *fac_shield(i)*fac_shield(j)
3713 eello_t4=-(s1+s2+s3)
3714 & *fac_shield(i)*fac_shield(j)
3715 c write(iout,*)'chujOWO', auxvec(1),b1(1,iti2)
3716 if (energy_dec) write (iout,'(a6,2i5,0pf7.3,3f7.3)')
3717 & 'eturn4',i,j,-(s1+s2+s3),s1,s2,s3
3718 C Now derivative over shield:
3719 if ((fac_shield(i).gt.0).and.(fac_shield(j).gt.0).and.
3720 & (shield_mode.gt.0)) then
3723 do ilist=1,ishield_list(i)
3724 iresshield=shield_list(ilist,i)
3726 rlocshield=grad_shield_side(k,ilist,i)*eello_t4/fac_shield(i)
3728 gshieldx_t4(k,iresshield)=gshieldx_t4(k,iresshield)+
3730 & +grad_shield_loc(k,ilist,i)*eello_t4/fac_shield(i)
3731 gshieldc_t4(k,iresshield-1)=gshieldc_t4(k,iresshield-1)
3735 do ilist=1,ishield_list(j)
3736 iresshield=shield_list(ilist,j)
3738 rlocshield=grad_shield_side(k,ilist,j)*eello_t4/fac_shield(j)
3740 gshieldx_t4(k,iresshield)=gshieldx_t4(k,iresshield)+
3742 & +grad_shield_loc(k,ilist,j)*eello_t4/fac_shield(j)
3743 gshieldc_t4(k,iresshield-1)=gshieldc_t4(k,iresshield-1)
3750 gshieldc_t4(k,i)=gshieldc_t4(k,i)+
3751 & grad_shield(k,i)*eello_t4/fac_shield(i)
3752 gshieldc_t4(k,j)=gshieldc_t4(k,j)+
3753 & grad_shield(k,j)*eello_t4/fac_shield(j)
3754 gshieldc_t4(k,i-1)=gshieldc_t4(k,i-1)+
3755 & grad_shield(k,i)*eello_t4/fac_shield(i)
3756 gshieldc_t4(k,j-1)=gshieldc_t4(k,j-1)+
3757 & grad_shield(k,j)*eello_t4/fac_shield(j)
3760 cd write (2,*) 'i,',i,' j',j,'eello_turn4',-(s1+s2+s3),
3761 cd & ' eello_turn4_num',8*eello_turn4_num
3763 gloc(nphi+i,icg)=gloc(nphi+i,icg)
3764 & -(gs13+gsE13+gsEE1)*wturn4
3765 & *fac_shield(i)*fac_shield(j)
3766 gloc(nphi+i+1,icg)= gloc(nphi+i+1,icg)
3767 & -(gs23+gs21+gsEE2)*wturn4
3768 & *fac_shield(i)*fac_shield(j)
3770 gloc(nphi+i+2,icg)= gloc(nphi+i+2,icg)
3771 & -(gs32+gsE31+gsEE3)*wturn4
3772 & *fac_shield(i)*fac_shield(j)
3774 c gloc(nphi+i+1,icg)=gloc(nphi+i+1,icg)-
3777 if (energy_dec) write (iout,'(a6,2i5,0pf7.3)')
3778 & 'eturn4',i,j,-(s1+s2+s3)
3779 c write (iout,*) 'i,',i,' j',j,'eello_turn4',-(s1+s2+s3),
3780 c & ' eello_turn4_num',8*eello_turn4_num
3781 C Derivatives in gamma(i)
3782 call transpose2(EUgder(1,1,i+1),e1tder(1,1))
3783 call matmat2(e1tder(1,1),a_temp(1,1),auxmat(1,1))
3784 call matvec2(auxmat(1,1),Ub2(1,i+3),auxvec(1))
3785 s1=scalar2(b1(1,i+2),auxvec(1))
3786 call matmat2(ae3e2(1,1),e1tder(1,1),pizda(1,1))
3787 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3788 gel_loc_turn4(i)=gel_loc_turn4(i)-(s1+s3)
3789 & *fac_shield(i)*fac_shield(j)
3790 C Derivatives in gamma(i+1)
3791 call transpose2(EUgder(1,1,i+2),e2tder(1,1))
3792 call matvec2(ae3(1,1),Ub2der(1,i+2),auxvec(1))
3793 s2=scalar2(b1(1,i+1),auxvec(1))
3794 call matmat2(ae3(1,1),e2tder(1,1),auxmat(1,1))
3795 call matmat2(auxmat(1,1),e1t(1,1),pizda(1,1))
3796 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3797 gel_loc_turn4(i+1)=gel_loc_turn4(i+1)-(s2+s3)
3798 & *fac_shield(i)*fac_shield(j)
3799 C Derivatives in gamma(i+2)
3800 call transpose2(EUgder(1,1,i+3),e3tder(1,1))
3801 call matvec2(e1a(1,1),Ub2der(1,i+3),auxvec(1))
3802 s1=scalar2(b1(1,i+2),auxvec(1))
3803 call matmat2(a_temp(1,1),e3tder(1,1),auxmat(1,1))
3804 call matvec2(auxmat(1,1),Ub2(1,i+2),auxvec(1))
3805 s2=scalar2(b1(1,i+1),auxvec(1))
3806 call matmat2(auxmat(1,1),e2t(1,1),auxmat3(1,1))
3807 call matmat2(auxmat3(1,1),e1t(1,1),pizda(1,1))
3808 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3809 gel_loc_turn4(i+2)=gel_loc_turn4(i+2)-(s1+s2+s3)
3810 & *fac_shield(i)*fac_shield(j)
3812 C Cartesian derivatives
3813 C Derivatives of this turn contributions in DC(i+2)
3814 if (j.lt.nres-1) then
3816 a_temp(1,1)=agg(l,1)
3817 a_temp(1,2)=agg(l,2)
3818 a_temp(2,1)=agg(l,3)
3819 a_temp(2,2)=agg(l,4)
3820 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
3821 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
3822 s1=scalar2(b1(1,i+2),auxvec(1))
3823 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
3824 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
3825 s2=scalar2(b1(1,i+1),auxvec(1))
3826 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
3827 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
3828 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3830 gcorr4_turn(l,i+2)=gcorr4_turn(l,i+2)-(s1+s2+s3)
3831 & *fac_shield(i)*fac_shield(j)
3834 C Remaining derivatives of this turn contribution
3836 a_temp(1,1)=aggi(l,1)
3837 a_temp(1,2)=aggi(l,2)
3838 a_temp(2,1)=aggi(l,3)
3839 a_temp(2,2)=aggi(l,4)
3840 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
3841 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
3842 s1=scalar2(b1(1,i+2),auxvec(1))
3843 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
3844 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
3845 s2=scalar2(b1(1,i+1),auxvec(1))
3846 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
3847 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
3848 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3849 gcorr4_turn(l,i)=gcorr4_turn(l,i)-(s1+s2+s3)
3850 & *fac_shield(i)*fac_shield(j)
3851 a_temp(1,1)=aggi1(l,1)
3852 a_temp(1,2)=aggi1(l,2)
3853 a_temp(2,1)=aggi1(l,3)
3854 a_temp(2,2)=aggi1(l,4)
3855 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
3856 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
3857 s1=scalar2(b1(1,i+2),auxvec(1))
3858 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
3859 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
3860 s2=scalar2(b1(1,i+1),auxvec(1))
3861 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
3862 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
3863 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3864 gcorr4_turn(l,i+1)=gcorr4_turn(l,i+1)-(s1+s2+s3)
3865 & *fac_shield(i)*fac_shield(j)
3866 a_temp(1,1)=aggj(l,1)
3867 a_temp(1,2)=aggj(l,2)
3868 a_temp(2,1)=aggj(l,3)
3869 a_temp(2,2)=aggj(l,4)
3870 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
3871 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
3872 s1=scalar2(b1(1,i+2),auxvec(1))
3873 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
3874 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
3875 s2=scalar2(b1(1,i+1),auxvec(1))
3876 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
3877 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
3878 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3879 gcorr4_turn(l,j)=gcorr4_turn(l,j)-(s1+s2+s3)
3880 & *fac_shield(i)*fac_shield(j)
3881 a_temp(1,1)=aggj1(l,1)
3882 a_temp(1,2)=aggj1(l,2)
3883 a_temp(2,1)=aggj1(l,3)
3884 a_temp(2,2)=aggj1(l,4)
3885 call matmat2(e1t(1,1),a_temp(1,1),e1a(1,1))
3886 call matvec2(e1a(1,1),Ub2(1,i+3),auxvec(1))
3887 s1=scalar2(b1(1,i+2),auxvec(1))
3888 call matmat2(a_temp(1,1),e3t(1,1),ae3(1,1))
3889 call matvec2(ae3(1,1),Ub2(1,i+2),auxvec(1))
3890 s2=scalar2(b1(1,i+1),auxvec(1))
3891 call matmat2(ae3(1,1),e2t(1,1),ae3e2(1,1))
3892 call matmat2(ae3e2(1,1),e1t(1,1),pizda(1,1))
3893 s3=0.5d0*(pizda(1,1)+pizda(2,2))
3894 c write (iout,*) "s1",s1," s2",s2," s3",s3," s1+s2+s3",s1+s2+s3
3895 gcorr4_turn(l,j1)=gcorr4_turn(l,j1)-(s1+s2+s3)
3896 & *fac_shield(i)*fac_shield(j)
3903 C-----------------------------------------------------------------------------
3904 subroutine vecpr(u,v,w)
3905 implicit real*8(a-h,o-z)
3906 dimension u(3),v(3),w(3)
3907 w(1)=u(2)*v(3)-u(3)*v(2)
3908 w(2)=-u(1)*v(3)+u(3)*v(1)
3909 w(3)=u(1)*v(2)-u(2)*v(1)
3912 C-----------------------------------------------------------------------------
3913 subroutine unormderiv(u,ugrad,unorm,ungrad)
3914 C This subroutine computes the derivatives of a normalized vector u, given
3915 C the derivatives computed without normalization conditions, ugrad. Returns
3918 double precision u(3),ugrad(3,3),unorm,ungrad(3,3)
3919 double precision vec(3)
3920 double precision scalar
3922 c write (2,*) 'ugrad',ugrad
3925 vec(i)=scalar(ugrad(1,i),u(1))
3927 c write (2,*) 'vec',vec
3930 ungrad(j,i)=(ugrad(j,i)-u(j)*vec(i))*unorm
3933 c write (2,*) 'ungrad',ungrad
3936 C-----------------------------------------------------------------------------
3937 subroutine escp(evdw2,evdw2_14)
3939 C This subroutine calculates the excluded-volume interaction energy between
3940 C peptide-group centers and side chains and its gradient in virtual-bond and
3941 C side-chain vectors.
3943 implicit real*8 (a-h,o-z)
3944 include 'DIMENSIONS'
3945 include 'DIMENSIONS.ZSCOPT'
3946 include 'COMMON.CONTROL'
3947 include 'COMMON.GEO'
3948 include 'COMMON.VAR'
3949 include 'COMMON.LOCAL'
3950 include 'COMMON.CHAIN'
3951 include 'COMMON.DERIV'
3952 include 'COMMON.INTERACT'
3953 include 'COMMON.FFIELD'
3954 include 'COMMON.IOUNITS'
3958 cd print '(a)','Enter ESCP'
3959 c write (iout,*) 'iatscp_s=',iatscp_s,' iatscp_e=',iatscp_e,
3960 c & ' scal14',scal14
3961 do i=iatscp_s,iatscp_e
3962 if (itype(i).eq.ntyp1 .or. itype(i+1).eq.ntyp1) cycle
3964 c write (iout,*) "i",i," iteli",iteli," nscp_gr",nscp_gr(i),
3965 c & " iscp",(iscpstart(i,j),iscpend(i,j),j=1,nscp_gr(i))
3966 if (iteli.eq.0) goto 1225
3967 xi=0.5D0*(c(1,i)+c(1,i+1))
3968 yi=0.5D0*(c(2,i)+c(2,i+1))
3969 zi=0.5D0*(c(3,i)+c(3,i+1))
3970 C Returning the ith atom to box
3972 if (xi.lt.0) xi=xi+boxxsize
3974 if (yi.lt.0) yi=yi+boxysize
3976 if (zi.lt.0) zi=zi+boxzsize
3977 do iint=1,nscp_gr(i)
3979 do j=iscpstart(i,iint),iscpend(i,iint)
3980 itypj=iabs(itype(j))
3981 if (itypj.eq.ntyp1) cycle
3982 C Uncomment following three lines for SC-p interactions
3986 C Uncomment following three lines for Ca-p interactions
3990 C returning the jth atom to box
3992 if (xj.lt.0) xj=xj+boxxsize
3994 if (yj.lt.0) yj=yj+boxysize
3996 if (zj.lt.0) zj=zj+boxzsize
3997 dist_init=(xj-xi)**2+(yj-yi)**2+(zj-zi)**2
4002 C Finding the closest jth atom
4006 xj=xj_safe+xshift*boxxsize
4007 yj=yj_safe+yshift*boxysize
4008 zj=zj_safe+zshift*boxzsize
4009 dist_temp=(xj-xi)**2+(yj-yi)**2+(zj-zi)**2
4010 if(dist_temp.lt.dist_init) then
4020 if (subchap.eq.1) then
4029 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
4030 C sss is scaling function for smoothing the cutoff gradient otherwise
4031 C the gradient would not be continuouse
4032 sss=sscale(1.0d0/(dsqrt(rrij)))
4033 if (sss.le.0.0d0) cycle
4034 sssgrad=sscagrad(1.0d0/(dsqrt(rrij)))
4036 e1=fac*fac*aad(itypj,iteli)
4037 e2=fac*bad(itypj,iteli)
4038 if (iabs(j-i) .le. 2) then
4041 evdw2_14=evdw2_14+(e1+e2)*sss
4044 c write (iout,'(a6,2i5,0pf7.3,2i3,3e11.3)')
4045 c & 'evdw2',i,j,evdwij,iteli,itypj,fac,aad(itypj,iteli),
4046 c & bad(itypj,iteli)
4047 evdw2=evdw2+evdwij*sss
4048 if (energy_dec) write (iout,'(a6,2i5,0pf7.3,2i3,3e11.3)')
4049 & 'evdw2',i,j,evdwij,iteli,itypj,fac,aad(itypj,iteli),
4054 C Calculate contributions to the gradient in the virtual-bond and SC vectors.
4056 fac=-(evdwij+e1)*rrij*sss
4057 fac=fac+(evdwij)*sssgrad*dsqrt(rrij)/expon
4062 cd write (iout,*) 'j<i'
4063 C Uncomment following three lines for SC-p interactions
4065 c gradx_scp(k,j)=gradx_scp(k,j)+ggg(k)
4068 cd write (iout,*) 'j>i'
4071 C Uncomment following line for SC-p interactions
4072 c gradx_scp(k,j)=gradx_scp(k,j)-ggg(k)
4076 gvdwc_scp(k,i)=gvdwc_scp(k,i)-0.5D0*ggg(k)
4080 cd write (iout,*) 'i=',i,' j=',j,' kstart=',kstart,' kend=',kend
4081 cd write (iout,*) ggg(1),ggg(2),ggg(3)
4084 gvdwc_scp(l,k)=gvdwc_scp(l,k)-ggg(l)
4094 gvdwc_scp(j,i)=expon*gvdwc_scp(j,i)
4095 gradx_scp(j,i)=expon*gradx_scp(j,i)
4098 C******************************************************************************
4102 C To save time the factor EXPON has been extracted from ALL components
4103 C of GVDWC and GRADX. Remember to multiply them by this factor before further
4106 C******************************************************************************
4109 C--------------------------------------------------------------------------
4110 subroutine edis(ehpb)
4112 C Evaluate bridge-strain energy and its gradient in virtual-bond and SC vectors.
4114 implicit real*8 (a-h,o-z)
4115 include 'DIMENSIONS'
4116 include 'DIMENSIONS.ZSCOPT'
4117 include 'COMMON.SBRIDGE'
4118 include 'COMMON.CHAIN'
4119 include 'COMMON.DERIV'
4120 include 'COMMON.VAR'
4121 include 'COMMON.INTERACT'
4122 include 'COMMON.CONTROL'
4123 include 'COMMON.IOUNITS'
4124 dimension ggg(3),ggg_peak(3,1000)
4129 c 8/21/18 AL: added explicit restraints on reference coords
4130 c write (iout,*) "restr_on_coord",restr_on_coord
4131 if (restr_on_coord) then
4135 if (itype(i).eq.ntyp1) cycle
4137 ecoor=ecoor+(c(j,i)-cref(j,i))**2
4138 ghpbc(j,i)=ghpbc(j,i)+bfac(i)*(c(j,i)-cref(j,i))
4140 if (itype(i).ne.10) then
4142 ecoor=ecoor+(c(j,i+nres)-cref(j,i+nres))**2
4143 ghpbx(j,i)=ghpbx(j,i)+bfac(i)*(c(j,i+nres)-cref(j,i+nres))
4146 if (energy_dec) write (iout,*)
4147 & "i",i," bfac",bfac(i)," ecoor",ecoor
4148 ehpb=ehpb+0.5d0*bfac(i)*ecoor
4153 C write (iout,*) ,"link_end",link_end,constr_dist
4154 cd write(iout,*)'edis: nhpb=',nhpb,' fbr=',fbr
4155 c write(iout,*)'link_start=',link_start,' link_end=',link_end,
4156 c & " constr_dist",constr_dist
4157 if (link_end.eq.0.and.link_end_peak.eq.0) return
4158 do i=link_start_peak,link_end_peak
4160 c print *,"i",i," link_end_peak",link_end_peak," ipeak",
4161 c & ipeak(1,i),ipeak(2,i)
4162 do ip=ipeak(1,i),ipeak(2,i)
4167 C iii and jjj point to the residues for which the distance is assigned.
4168 c if (ii.gt.nres) then
4175 if (ii.gt.nres) then
4180 if (jj.gt.nres) then
4185 aux=rlornmr1(dd,dhpb_peak(ip),dhpb1_peak(ip),forcon_peak(ip))
4186 aux=dexp(-scal_peak*aux)
4187 ehpb_peak=ehpb_peak+aux
4188 fac=rlornmr1prim(dd,dhpb_peak(ip),dhpb1_peak(ip),
4189 & forcon_peak(ip))*aux/dd
4191 ggg_peak(j,iip)=fac*(c(j,jj)-c(j,ii))
4193 if (energy_dec) write (iout,'(a6,3i5,6f10.3,i5)')
4194 & "edisL",i,ii,jj,dd,dhpb_peak(ip),dhpb1_peak(ip),
4195 & forcon_peak(ip),fordepth_peak(ip),ehpb_peak
4197 c write (iout,*) "ehpb_peak",ehpb_peak," scal_peak",scal_peak
4198 ehpb=ehpb-fordepth_peak(ipeak(1,i))*dlog(ehpb_peak)/scal_peak
4199 do ip=ipeak(1,i),ipeak(2,i)
4202 ggg(j)=ggg_peak(j,iip)/ehpb_peak
4206 C iii and jjj point to the residues for which the distance is assigned.
4207 if (ii.gt.nres) then
4216 ghpbx(j,iii)=ghpbx(j,iii)-ggg(j)
4221 ghpbx(j,jjj)=ghpbx(j,jjj)+ggg(j)
4225 ghpbc(k,jjj)=ghpbc(k,jjj)+ggg(k)
4226 ghpbc(k,iii)=ghpbc(k,iii)-ggg(k)
4230 do i=link_start,link_end
4231 C If ihpb(i) and jhpb(i) > NRES, this is a SC-SC distance, otherwise a
4232 C CA-CA distance used in regularization of structure.
4235 C iii and jjj point to the residues for which the distance is assigned.
4236 if (ii.gt.nres) then
4241 if (jj.gt.nres) then
4246 c write (iout,*) "i",i," ii",ii," iii",iii," jj",jj," jjj",jjj,
4247 c & dhpb(i),dhpb1(i),forcon(i)
4248 C 24/11/03 AL: SS bridges handled separately because of introducing a specific
4249 C distance and angle dependent SS bond potential.
4250 C if (ii.gt.nres .and. iabs(itype(iii)).eq.1 .and.
4251 C & iabs(itype(jjj)).eq.1) then
4252 cmc if (ii.gt.nres .and. itype(iii).eq.1 .and. itype(jjj).eq.1) then
4253 C 18/07/06 MC: Use the convention that the first nss pairs are SS bonds
4254 if (.not.dyn_ss .and. i.le.nss) then
4255 C 15/02/13 CC dynamic SSbond - additional check
4256 if (ii.gt.nres .and. iabs(itype(iii)).eq.1 .and.
4257 & iabs(itype(jjj)).eq.1) then
4258 call ssbond_ene(iii,jjj,eij)
4261 cd write (iout,*) "eij",eij
4262 cd & ' waga=',waga,' fac=',fac
4263 ! else if (ii.gt.nres .and. jj.gt.nres) then
4265 C Calculate the distance between the two points and its difference from the
4268 if (irestr_type(i).eq.11) then
4269 ehpb=ehpb+fordepth(i)!**4.0d0
4270 & *rlornmr1(dd,dhpb(i),dhpb1(i),forcon(i))
4271 fac=fordepth(i)!**4.0d0
4272 & *rlornmr1prim(dd,dhpb(i),dhpb1(i),forcon(i))/dd
4273 if (energy_dec) write (iout,'(a6,2i5,6f10.3,i5)')
4274 & "edisL",ii,jj,dd,dhpb(i),dhpb1(i),forcon(i),fordepth(i),
4275 & ehpb,irestr_type(i)
4276 else if (irestr_type(i).eq.10) then
4277 c AL 6//19/2018 cross-link restraints
4278 xdis = 0.5d0*(dd/forcon(i))**2
4279 expdis = dexp(-xdis)
4280 c aux=(dhpb(i)+dhpb1(i)*xdis)*expdis+fordepth(i)
4281 aux=(dhpb(i)+dhpb1(i)*xdis*xdis)*expdis+fordepth(i)
4282 c write (iout,*)"HERE: xdis",xdis," expdis",expdis," aux",aux,
4283 c & " wboltzd",wboltzd
4284 ehpb=ehpb-wboltzd*xlscore(i)*dlog(aux)
4285 c fac=-wboltzd*(dhpb1(i)*(1.0d0-xdis)-dhpb(i))
4286 fac=-wboltzd*xlscore(i)*(dhpb1(i)*(2.0d0-xdis)*xdis-dhpb(i))
4287 & *expdis/(aux*forcon(i)**2)
4288 if (energy_dec) write(iout,'(a6,2i5,6f10.3,i5)')
4289 & "edisX",ii,jj,dd,dhpb(i),dhpb1(i),forcon(i),fordepth(i),
4290 & -wboltzd*xlscore(i)*dlog(aux),irestr_type(i)
4291 else if (irestr_type(i).eq.2) then
4292 c Quartic restraints
4293 ehpb=ehpb+forcon(i)*gnmr1(dd,dhpb(i),dhpb1(i))
4294 if (energy_dec) write(iout,'(a6,2i5,5f10.3,i5)')
4295 & "edisQ",ii,jj,dd,dhpb(i),dhpb1(i),forcon(i),
4296 & forcon(i)*gnmr1(dd,dhpb(i),dhpb1(i)),irestr_type(i)
4297 fac=forcon(i)*gnmr1prim(dd,dhpb(i),dhpb1(i))/dd
4299 c Quadratic restraints
4301 C Get the force constant corresponding to this distance.
4303 C Calculate the contribution to energy.
4304 ehpb=ehpb+0.5d0*waga*rdis*rdis
4305 if (energy_dec) write(iout,'(a6,2i5,5f10.3,i5)')
4306 & "edisS",ii,jj,dd,dhpb(i),dhpb1(i),forcon(i),
4307 & 0.5d0*waga*rdis*rdis,irestr_type(i)
4309 C Evaluate gradient.
4313 c Calculate Cartesian gradient
4315 ggg(j)=fac*(c(j,jj)-c(j,ii))
4317 cd print '(i3,3(1pe14.5))',i,(ggg(j),j=1,3)
4318 C If this is a SC-SC distance, we need to calculate the contributions to the
4319 C Cartesian gradient in the SC vectors (ghpbx).
4322 ghpbx(j,iii)=ghpbx(j,iii)-ggg(j)
4327 ghpbx(j,jjj)=ghpbx(j,jjj)+ggg(j)
4331 ghpbc(k,jjj)=ghpbc(k,jjj)+ggg(k)
4332 ghpbc(k,iii)=ghpbc(k,iii)-ggg(k)
4338 C--------------------------------------------------------------------------
4339 subroutine ssbond_ene(i,j,eij)
4341 C Calculate the distance and angle dependent SS-bond potential energy
4342 C using a free-energy function derived based on RHF/6-31G** ab initio
4343 C calculations of diethyl disulfide.
4345 C A. Liwo and U. Kozlowska, 11/24/03
4347 implicit real*8 (a-h,o-z)
4348 include 'DIMENSIONS'
4349 include 'DIMENSIONS.ZSCOPT'
4350 include 'COMMON.SBRIDGE'
4351 include 'COMMON.CHAIN'
4352 include 'COMMON.DERIV'
4353 include 'COMMON.LOCAL'
4354 include 'COMMON.INTERACT'
4355 include 'COMMON.VAR'
4356 include 'COMMON.IOUNITS'
4357 double precision erij(3),dcosom1(3),dcosom2(3),gg(3)
4358 itypi=iabs(itype(i))
4362 dxi=dc_norm(1,nres+i)
4363 dyi=dc_norm(2,nres+i)
4364 dzi=dc_norm(3,nres+i)
4365 dsci_inv=dsc_inv(itypi)
4366 itypj=iabs(itype(j))
4367 dscj_inv=dsc_inv(itypj)
4371 dxj=dc_norm(1,nres+j)
4372 dyj=dc_norm(2,nres+j)
4373 dzj=dc_norm(3,nres+j)
4374 rrij=1.0D0/(xj*xj+yj*yj+zj*zj)
4379 om1=dxi*erij(1)+dyi*erij(2)+dzi*erij(3)
4380 om2=dxj*erij(1)+dyj*erij(2)+dzj*erij(3)
4381 om12=dxi*dxj+dyi*dyj+dzi*dzj
4383 dcosom1(k)=rij*(dc_norm(k,nres+i)-om1*erij(k))
4384 dcosom2(k)=rij*(dc_norm(k,nres+j)-om2*erij(k))
4390 deltat12=om2-om1+2.0d0
4392 eij=akcm*deltad*deltad+akth*(deltat1*deltat1+deltat2*deltat2)
4393 & +akct*deltad*deltat12
4394 & +v1ss*cosphi+v2ss*cosphi*cosphi+v3ss*cosphi*cosphi*cosphi
4395 c write(iout,*) i,j,"rij",rij,"d0cm",d0cm," akcm",akcm," akth",akth,
4396 c & " akct",akct," deltad",deltad," deltat",deltat1,deltat2,
4397 c & " deltat12",deltat12," eij",eij
4398 ed=2*akcm*deltad+akct*deltat12
4400 pom2=v1ss+2*v2ss*cosphi+3*v3ss*cosphi*cosphi
4401 eom1=-2*akth*deltat1-pom1-om2*pom2
4402 eom2= 2*akth*deltat2+pom1-om1*pom2
4405 gg(k)=ed*erij(k)+eom1*dcosom1(k)+eom2*dcosom2(k)
4408 ghpbx(k,i)=ghpbx(k,i)-gg(k)
4409 & +(eom12*dc_norm(k,nres+j)+eom1*erij(k))*dsci_inv
4410 ghpbx(k,j)=ghpbx(k,j)+gg(k)
4411 & +(eom12*dc_norm(k,nres+i)+eom2*erij(k))*dscj_inv
4414 C Calculate the components of the gradient in DC and X
4418 ghpbc(l,k)=ghpbc(l,k)+gg(l)
4423 C--------------------------------------------------------------------------
4424 c MODELLER restraint function
4425 subroutine e_modeller(ehomology_constr)
4426 implicit real*8 (a-h,o-z)
4427 include 'DIMENSIONS'
4428 include 'DIMENSIONS.ZSCOPT'
4429 include 'DIMENSIONS.FREE'
4430 integer nnn, i, j, k, ki, irec, l
4431 integer katy, odleglosci, test7
4432 real*8 odleg, odleg2, odleg3, kat, kat2, kat3, gdih(max_template)
4433 real*8 distance(max_template),distancek(max_template),
4434 & min_odl,godl(max_template),dih_diff(max_template)
4437 c FP - 30/10/2014 Temporary specifications for homology restraints
4439 double precision utheta_i,gutheta_i,sum_gtheta,sum_sgtheta,
4441 double precision, dimension (maxres) :: guscdiff,usc_diff
4442 double precision, dimension (max_template) ::
4443 & gtheta,dscdiff,uscdiffk,guscdiff2,guscdiff3,
4446 include 'COMMON.SBRIDGE'
4447 include 'COMMON.CHAIN'
4448 include 'COMMON.GEO'
4449 include 'COMMON.DERIV'
4450 include 'COMMON.LOCAL'
4451 include 'COMMON.INTERACT'
4452 include 'COMMON.VAR'
4453 include 'COMMON.IOUNITS'
4454 include 'COMMON.CONTROL'
4455 include 'COMMON.HOMRESTR'
4456 include 'COMMON.HOMOLOGY'
4457 include 'COMMON.SETUP'
4458 include 'COMMON.NAMES'
4461 distancek(i)=9999999.9
4466 c Pseudo-energy and gradient from homology restraints (MODELLER-like
4468 C AL 5/2/14 - Introduce list of restraints
4469 c write(iout,*) "waga_theta",waga_theta,"waga_d",waga_d
4471 write(iout,*) "------- dist restrs start -------"
4473 do ii = link_start_homo,link_end_homo
4477 c write (iout,*) "dij(",i,j,") =",dij
4479 do k=1,constr_homology
4480 if(.not.l_homo(k,ii)) then
4484 distance(k)=odl(k,ii)-dij
4485 c write (iout,*) "distance(",k,") =",distance(k)
4487 c For Gaussian-type Urestr
4489 distancek(k)=0.5d0*distance(k)**2*sigma_odl(k,ii) ! waga_dist rmvd from Gaussian argument
4490 c write (iout,*) "sigma_odl(",k,ii,") =",sigma_odl(k,ii)
4491 c write (iout,*) "distancek(",k,") =",distancek(k)
4492 c distancek(k)=0.5d0*waga_dist*distance(k)**2*sigma_odl(k,ii)
4494 c For Lorentzian-type Urestr
4496 if (waga_dist.lt.0.0d0) then
4497 sigma_odlir(k,ii)=dsqrt(1/sigma_odl(k,ii))
4498 distancek(k)=distance(k)**2/(sigma_odlir(k,ii)*
4499 & (distance(k)**2+sigma_odlir(k,ii)**2))
4503 c min_odl=minval(distancek)
4504 do kk=1,constr_homology
4505 if(l_homo(kk,ii)) then
4506 min_odl=distancek(kk)
4510 do kk=1,constr_homology
4511 if(l_homo(kk,ii) .and. distancek(kk).lt.min_odl)
4512 & min_odl=distancek(kk)
4514 c write (iout,* )"min_odl",min_odl
4516 write (iout,*) "ij dij",i,j,dij
4517 write (iout,*) "distance",(distance(k),k=1,constr_homology)
4518 write (iout,*) "distancek",(distancek(k),k=1,constr_homology)
4519 write (iout,* )"min_odl",min_odl
4524 if (waga_dist.ge.0.0d0) then
4530 do k=1,constr_homology
4531 c Nie wiem po co to liczycie jeszcze raz!
4532 c odleg3=-waga_dist(iset)*((distance(i,j,k)**2)/
4533 c & (2*(sigma_odl(i,j,k))**2))
4534 if(.not.l_homo(k,ii)) cycle
4535 if (waga_dist.ge.0.0d0) then
4537 c For Gaussian-type Urestr
4539 godl(k)=dexp(-distancek(k)+min_odl)
4540 odleg2=odleg2+godl(k)
4542 c For Lorentzian-type Urestr
4545 odleg2=odleg2+distancek(k)
4548 ccc write(iout,779) i,j,k, "odleg2=",odleg2, "odleg3=", odleg3,
4549 ccc & "dEXP(odleg3)=", dEXP(odleg3),"distance(i,j,k)^2=",
4550 ccc & distance(i,j,k)**2, "dist(i+1,j+1)=", dist(i+1,j+1),
4551 ccc & "sigma_odl(i,j,k)=", sigma_odl(i,j,k)
4554 c write (iout,*) "godl",(godl(k),k=1,constr_homology) ! exponents
4555 c write (iout,*) "ii i j",ii,i,j," odleg2",odleg2 ! sum of exps
4557 write (iout,*) "godl",(godl(k),k=1,constr_homology) ! exponents
4558 write (iout,*) "ii i j",ii,i,j," odleg2",odleg2 ! sum of exps
4560 if (waga_dist.ge.0.0d0) then
4562 c For Gaussian-type Urestr
4564 odleg=odleg-dLOG(odleg2/constr_homology)+min_odl
4566 c For Lorentzian-type Urestr
4569 odleg=odleg+odleg2/constr_homology
4573 c write (iout,*) "odleg",odleg ! sum of -ln-s
4576 c For Gaussian-type Urestr
4578 if (waga_dist.ge.0.0d0) sum_godl=odleg2
4580 do k=1,constr_homology
4581 c godl=dexp(((-(distance(i,j,k)**2)/(2*(sigma_odl(i,j,k))**2))
4582 c & *waga_dist)+min_odl
4583 c sgodl=-godl(k)*distance(k)*sigma_odl(k,ii)*waga_dist
4585 if(.not.l_homo(k,ii)) cycle
4586 if (waga_dist.ge.0.0d0) then
4587 c For Gaussian-type Urestr
4589 sgodl=-godl(k)*distance(k)*sigma_odl(k,ii) ! waga_dist rmvd
4591 c For Lorentzian-type Urestr
4594 sgodl=-2*sigma_odlir(k,ii)*(distance(k)/(distance(k)**2+
4595 & sigma_odlir(k,ii)**2)**2)
4597 sum_sgodl=sum_sgodl+sgodl
4599 c sgodl2=sgodl2+sgodl
4600 c write(iout,*) i, j, k, distance(i,j,k), "W GRADIENCIE1"
4601 c write(iout,*) "constr_homology=",constr_homology
4602 c write(iout,*) i, j, k, "TEST K"
4604 if (waga_dist.ge.0.0d0) then
4606 c For Gaussian-type Urestr
4608 grad_odl3=waga_homology(iset)*waga_dist
4609 & *sum_sgodl/(sum_godl*dij)
4611 c For Lorentzian-type Urestr
4614 c Original grad expr modified by analogy w Gaussian-type Urestr grad
4615 c grad_odl3=-waga_homology(iset)*waga_dist*sum_sgodl
4616 grad_odl3=-waga_homology(iset)*waga_dist*
4617 & sum_sgodl/(constr_homology*dij)
4620 c grad_odl3=sum_sgodl/(sum_godl*dij)
4623 c write(iout,*) i, j, k, distance(i,j,k), "W GRADIENCIE2"
4624 c write(iout,*) (distance(i,j,k)**2), (2*(sigma_odl(i,j,k))**2),
4625 c & (-(distance(i,j,k)**2)/(2*(sigma_odl(i,j,k))**2))
4627 ccc write(iout,*) godl, sgodl, grad_odl3
4629 c grad_odl=grad_odl+grad_odl3
4632 ggodl=grad_odl3*(c(jik,i)-c(jik,j))
4633 ccc write(iout,*) c(jik,i+1), c(jik,j+1), (c(jik,i+1)-c(jik,j+1))
4634 ccc write(iout,746) "GRAD_ODL_1", i, j, jik, ggodl,
4635 ccc & ghpbc(jik,i+1), ghpbc(jik,j+1)
4636 ghpbc(jik,i)=ghpbc(jik,i)+ggodl
4637 ghpbc(jik,j)=ghpbc(jik,j)-ggodl
4638 ccc write(iout,746) "GRAD_ODL_2", i, j, jik, ggodl,
4639 ccc & ghpbc(jik,i+1), ghpbc(jik,j+1)
4640 c if (i.eq.25.and.j.eq.27) then
4641 c write(iout,*) "jik",jik,"i",i,"j",j
4642 c write(iout,*) "sum_sgodl",sum_sgodl,"sgodl",sgodl
4643 c write(iout,*) "grad_odl3",grad_odl3
4644 c write(iout,*) "c(",jik,i,")",c(jik,i),"c(",jik,j,")",c(jik,j)
4645 c write(iout,*) "ggodl",ggodl
4646 c write(iout,*) "ghpbc(",jik,i,")",
4647 c & ghpbc(jik,i),"ghpbc(",jik,j,")",
4652 ccc write(iout,778)"TEST: odleg2=", odleg2, "DLOG(odleg2)=",
4653 ccc & dLOG(odleg2),"-odleg=", -odleg
4655 enddo ! ii-loop for dist
4657 write(iout,*) "------- dist restrs end -------"
4658 c if (waga_angle.eq.1.0d0 .or. waga_theta.eq.1.0d0 .or.
4659 c & waga_d.eq.1.0d0) call sum_gradient
4661 c Pseudo-energy and gradient from dihedral-angle restraints from
4662 c homology templates
4663 c write (iout,*) "End of distance loop"
4666 c write (iout,*) idihconstr_start_homo,idihconstr_end_homo
4668 write(iout,*) "------- dih restrs start -------"
4669 do i=idihconstr_start_homo,idihconstr_end_homo
4670 write (iout,*) "gloc_init(",i,icg,")",gloc(i,icg)
4673 do i=idihconstr_start_homo,idihconstr_end_homo
4675 c betai=beta(i,i+1,i+2,i+3)
4677 c write (iout,*) "betai =",betai
4678 do k=1,constr_homology
4679 dih_diff(k)=pinorm(dih(k,i)-betai)
4680 c write (iout,*) "dih_diff(",k,") =",dih_diff(k)
4681 c if (dih_diff(i,k).gt.3.14159) dih_diff(i,k)=
4682 c & -(6.28318-dih_diff(i,k))
4683 c if (dih_diff(i,k).lt.-3.14159) dih_diff(i,k)=
4684 c & 6.28318+dih_diff(i,k)
4686 kat3=-0.5d0*dih_diff(k)**2*sigma_dih(k,i) ! waga_angle rmvd from Gaussian argument
4688 kat3=(dcos(dih_diff(k))-1)*sigma_dih(k,i)
4690 c kat3=-0.5d0*waga_angle*dih_diff(k)**2*sigma_dih(k,i)
4693 c write(iout,*) "kat2=", kat2, "exp(kat3)=", exp(kat3)
4696 c write (iout,*) "gdih",(gdih(k),k=1,constr_homology) ! exps
4697 c write (iout,*) "i",i," betai",betai," kat2",kat2 ! sum of exps
4699 write (iout,*) "i",i," betai",betai," kat2",kat2
4700 write (iout,*) "gdih",(gdih(k),k=1,constr_homology)
4702 if (kat2.le.1.0d-14) cycle
4703 kat=kat-dLOG(kat2/constr_homology)
4704 c write (iout,*) "kat",kat ! sum of -ln-s
4706 ccc write(iout,778)"TEST: kat2=", kat2, "DLOG(kat2)=",
4707 ccc & dLOG(kat2), "-kat=", -kat
4710 c ----------------------------------------------------------------------
4712 c ----------------------------------------------------------------------
4716 do k=1,constr_homology
4718 sgdih=-gdih(k)*dih_diff(k)*sigma_dih(k,i) ! waga_angle rmvd
4720 sgdih=-gdih(k)*dsin(dih_diff(k))*sigma_dih(k,i)
4722 c sgdih=-gdih(k)*dih_diff(k)*sigma_dih(k,i)*waga_angle
4723 sum_sgdih=sum_sgdih+sgdih
4725 c grad_dih3=sum_sgdih/sum_gdih
4726 grad_dih3=waga_homology(iset)*waga_angle*sum_sgdih/sum_gdih
4728 c write(iout,*)i,k,gdih,sgdih,beta(i+1,i+2,i+3,i+4),grad_dih3
4729 ccc write(iout,747) "GRAD_KAT_1", i, nphi, icg, grad_dih3,
4730 ccc & gloc(nphi+i-3,icg)
4731 gloc(i,icg)=gloc(i,icg)+grad_dih3
4733 c write(iout,*) "i",i,"icg",icg,"gloc(",i,icg,")",gloc(i,icg)
4735 ccc write(iout,747) "GRAD_KAT_2", i, nphi, icg, grad_dih3,
4736 ccc & gloc(nphi+i-3,icg)
4738 enddo ! i-loop for dih
4740 write(iout,*) "------- dih restrs end -------"
4743 c Pseudo-energy and gradient for theta angle restraints from
4744 c homology templates
4745 c FP 01/15 - inserted from econstr_local_test.F, loop structure
4749 c For constr_homology reference structures (FP)
4751 c Uconst_back_tot=0.0d0
4754 c Econstr_back legacy
4757 c do i=ithet_start,ithet_end
4760 c do i=loc_start,loc_end
4763 duscdiffx(j,i)=0.0d0
4769 c write (iout,*) "ithet_start =",ithet_start,"ithet_end =",ithet_end
4770 c write (iout,*) "waga_theta",waga_theta
4771 if (waga_theta.gt.0.0d0) then
4773 write (iout,*) "usampl",usampl
4774 write(iout,*) "------- theta restrs start -------"
4775 c do i=ithet_start,ithet_end
4776 c write (iout,*) "gloc_init(",nphi+i,icg,")",gloc(nphi+i,icg)
4779 c write (iout,*) "maxres",maxres,"nres",nres
4781 do i=ithet_start,ithet_end
4784 c ii = ifrag_back(2,i,iset)-ifrag_back(1,i,iset)
4786 c Deviation of theta angles wrt constr_homology ref structures
4788 utheta_i=0.0d0 ! argument of Gaussian for single k
4789 gutheta_i=0.0d0 ! Sum of Gaussians over constr_homology ref structures
4790 c do j=ifrag_back(1,i,iset)+2,ifrag_back(2,i,iset) ! original loop
4791 c over residues in a fragment
4792 c write (iout,*) "theta(",i,")=",theta(i)
4793 do k=1,constr_homology
4795 c dtheta_i=theta(j)-thetaref(j,iref)
4796 c dtheta_i=thetaref(k,i)-theta(i) ! original form without indexing
4797 theta_diff(k)=thetatpl(k,i)-theta(i)
4799 utheta_i=-0.5d0*theta_diff(k)**2*sigma_theta(k,i) ! waga_theta rmvd from Gaussian argument
4800 c utheta_i=-0.5d0*waga_theta*theta_diff(k)**2*sigma_theta(k,i) ! waga_theta?
4801 gtheta(k)=dexp(utheta_i) ! + min_utheta_i?
4802 gutheta_i=gutheta_i+dexp(utheta_i) ! Sum of Gaussians (pk)
4803 c Gradient for single Gaussian restraint in subr Econstr_back
4804 c dutheta(j-2)=dutheta(j-2)+wfrag_back(1,i,iset)*dtheta_i/(ii-1)
4807 c write (iout,*) "gtheta",(gtheta(k),k=1,constr_homology) ! exps
4808 c write (iout,*) "i",i," gutheta_i",gutheta_i ! sum of exps
4812 c Gradient for multiple Gaussian restraint
4813 sum_gtheta=gutheta_i
4815 do k=1,constr_homology
4816 c New generalized expr for multiple Gaussian from Econstr_back
4817 sgtheta=-gtheta(k)*theta_diff(k)*sigma_theta(k,i) ! waga_theta rmvd
4819 c sgtheta=-gtheta(k)*theta_diff(k)*sigma_theta(k,i)*waga_theta ! right functional form?
4820 sum_sgtheta=sum_sgtheta+sgtheta ! cum variable
4823 c Final value of gradient using same var as in Econstr_back
4824 dutheta(i-2)=sum_sgtheta/sum_gtheta*waga_theta
4825 & *waga_homology(iset)
4826 c dutheta(i)=sum_sgtheta/sum_gtheta
4828 c Uconst_back=Uconst_back+waga_theta*utheta(i) ! waga_theta added as weight
4830 Eval=Eval-dLOG(gutheta_i/constr_homology)
4831 c write (iout,*) "utheta(",i,")=",utheta(i) ! -ln of sum of exps
4832 c write (iout,*) "Uconst_back",Uconst_back ! sum of -ln-s
4833 c Uconst_back=Uconst_back+utheta(i)
4834 enddo ! (i-loop for theta)
4836 write(iout,*) "------- theta restrs end -------"
4840 c Deviation of local SC geometry
4842 c Separation of two i-loops (instructed by AL - 11/3/2014)
4844 c write (iout,*) "loc_start =",loc_start,"loc_end =",loc_end
4845 c write (iout,*) "waga_d",waga_d
4848 write(iout,*) "------- SC restrs start -------"
4849 write (iout,*) "Initial duscdiff,duscdiffx"
4850 do i=loc_start,loc_end
4851 write (iout,*) i,(duscdiff(jik,i),jik=1,3),
4852 & (duscdiffx(jik,i),jik=1,3)
4855 do i=loc_start,loc_end
4856 usc_diff_i=0.0d0 ! argument of Gaussian for single k
4857 guscdiff(i)=0.0d0 ! Sum of Gaussians over constr_homology ref structures
4858 c do j=ifrag_back(1,i,iset)+1,ifrag_back(2,i,iset)-1 ! Econstr_back legacy
4859 c write(iout,*) "xxtab, yytab, zztab"
4860 c write(iout,'(i5,3f8.2)') i,xxtab(i),yytab(i),zztab(i)
4861 do k=1,constr_homology
4863 dxx=-xxtpl(k,i)+xxtab(i) ! Diff b/w x component of ith SC vector in model and kth ref str?
4864 c Original sign inverted for calc of gradients (s. Econstr_back)
4865 dyy=-yytpl(k,i)+yytab(i) ! ibid y
4866 dzz=-zztpl(k,i)+zztab(i) ! ibid z
4867 c write(iout,*) "dxx, dyy, dzz"
4868 c write(iout,'(2i5,3f8.2)') k,i,dxx,dyy,dzz
4870 usc_diff_i=-0.5d0*(dxx**2+dyy**2+dzz**2)*sigma_d(k,i) ! waga_d rmvd from Gaussian argument
4871 c usc_diff(i)=-0.5d0*waga_d*(dxx**2+dyy**2+dzz**2)*sigma_d(k,i) ! waga_d?
4872 c uscdiffk(k)=usc_diff(i)
4873 guscdiff2(k)=dexp(usc_diff_i) ! without min_scdiff
4874 guscdiff(i)=guscdiff(i)+dexp(usc_diff_i) !Sum of Gaussians (pk)
4875 c write (iout,'(i5,6f10.5)') j,xxtab(j),yytab(j),zztab(j),
4876 c & xxref(j),yyref(j),zzref(j)
4881 c Generalized expression for multiple Gaussian acc to that for a single
4882 c Gaussian in Econstr_back as instructed by AL (FP - 03/11/2014)
4884 c Original implementation
4885 c sum_guscdiff=guscdiff(i)
4887 c sum_sguscdiff=0.0d0
4888 c do k=1,constr_homology
4889 c sguscdiff=-guscdiff2(k)*dscdiff(k)*sigma_d(k,i)*waga_d !waga_d?
4890 c sguscdiff=-guscdiff3(k)*dscdiff(k)*sigma_d(k,i)*waga_d ! w min_uscdiff
4891 c sum_sguscdiff=sum_sguscdiff+sguscdiff
4894 c Implementation of new expressions for gradient (Jan. 2015)
4896 c grad_uscdiff=sum_sguscdiff/(sum_guscdiff*dtab) !?
4898 do k=1,constr_homology
4900 c New calculation of dxx, dyy, and dzz corrected by AL (07/11), was missing and wrong
4901 c before. Now the drivatives should be correct
4903 dxx=-xxtpl(k,i)+xxtab(i) ! Diff b/w x component of ith SC vector in model and kth ref str?
4904 c Original sign inverted for calc of gradients (s. Econstr_back)
4905 dyy=-yytpl(k,i)+yytab(i) ! ibid y
4906 dzz=-zztpl(k,i)+zztab(i) ! ibid z
4908 c New implementation
4910 sum_guscdiff=guscdiff2(k)*!(dsqrt(dxx*dxx+dyy*dyy+dzz*dzz))* -> wrong!
4911 & sigma_d(k,i) ! for the grad wrt r'
4912 c sum_sguscdiff=sum_sguscdiff+sum_guscdiff
4915 c New implementation
4916 sum_guscdiff = waga_homology(iset)*waga_d*sum_guscdiff
4918 duscdiff(jik,i-1)=duscdiff(jik,i-1)+
4919 & sum_guscdiff*(dXX_C1tab(jik,i)*dxx+
4920 & dYY_C1tab(jik,i)*dyy+dZZ_C1tab(jik,i)*dzz)/guscdiff(i)
4921 duscdiff(jik,i)=duscdiff(jik,i)+
4922 & sum_guscdiff*(dXX_Ctab(jik,i)*dxx+
4923 & dYY_Ctab(jik,i)*dyy+dZZ_Ctab(jik,i)*dzz)/guscdiff(i)
4924 duscdiffx(jik,i)=duscdiffx(jik,i)+
4925 & sum_guscdiff*(dXX_XYZtab(jik,i)*dxx+
4926 & dYY_XYZtab(jik,i)*dyy+dZZ_XYZtab(jik,i)*dzz)/guscdiff(i)
4929 write(iout,*) "jik",jik,"i",i
4930 write(iout,*) "dxx, dyy, dzz"
4931 write(iout,'(2i5,3f8.2)') k,i,dxx,dyy,dzz
4932 write(iout,*) "guscdiff2(",k,")",guscdiff2(k)
4933 c write(iout,*) "sum_sguscdiff",sum_sguscdiff
4934 cc write(iout,*) "dXX_Ctab(",jik,i,")",dXX_Ctab(jik,i)
4935 c write(iout,*) "dYY_Ctab(",jik,i,")",dYY_Ctab(jik,i)
4936 c write(iout,*) "dZZ_Ctab(",jik,i,")",dZZ_Ctab(jik,i)
4937 c write(iout,*) "dXX_C1tab(",jik,i,")",dXX_C1tab(jik,i)
4938 c write(iout,*) "dYY_C1tab(",jik,i,")",dYY_C1tab(jik,i)
4939 c write(iout,*) "dZZ_C1tab(",jik,i,")",dZZ_C1tab(jik,i)
4940 c write(iout,*) "dXX_XYZtab(",jik,i,")",dXX_XYZtab(jik,i)
4941 c write(iout,*) "dYY_XYZtab(",jik,i,")",dYY_XYZtab(jik,i)
4942 c write(iout,*) "dZZ_XYZtab(",jik,i,")",dZZ_XYZtab(jik,i)
4943 c write(iout,*) "duscdiff(",jik,i-1,")",duscdiff(jik,i-1)
4944 c write(iout,*) "duscdiff(",jik,i,")",duscdiff(jik,i)
4945 c write(iout,*) "duscdiffx(",jik,i,")",duscdiffx(jik,i)
4952 c uscdiff(i)=-dLOG(guscdiff(i)/(ii-1)) ! Weighting by (ii-1) required?
4953 c usc_diff(i)=-dLOG(guscdiff(i)/constr_homology) ! + min_uscdiff ?
4955 c write (iout,*) i," uscdiff",uscdiff(i)
4957 c Put together deviations from local geometry
4959 c Uconst_back=Uconst_back+wfrag_back(1,i,iset)*utheta(i)+
4960 c & wfrag_back(3,i,iset)*uscdiff(i)
4961 Erot=Erot-dLOG(guscdiff(i)/constr_homology)
4962 c write (iout,*) "usc_diff(",i,")=",usc_diff(i) ! -ln of sum of exps
4963 c write (iout,*) "Uconst_back",Uconst_back ! cum sum of -ln-s
4964 c Uconst_back=Uconst_back+usc_diff(i)
4966 c Gradient of multiple Gaussian restraint (FP - 04/11/2014 - right?)
4968 c New implment: multiplied by sum_sguscdiff
4971 enddo ! (i-loop for dscdiff)
4976 write(iout,*) "------- SC restrs end -------"
4977 write (iout,*) "------ After SC loop in e_modeller ------"
4978 do i=loc_start,loc_end
4979 write (iout,*) "i",i," gradc",(gradc(j,i,icg),j=1,3)
4980 write (iout,*) "i",i," gradx",(gradx(j,i,icg),j=1,3)
4982 if (waga_theta.eq.1.0d0) then
4983 write (iout,*) "in e_modeller after SC restr end: dutheta"
4984 do i=ithet_start,ithet_end
4985 write (iout,*) i,dutheta(i)
4988 if (waga_d.eq.1.0d0) then
4989 write (iout,*) "e_modeller after SC loop: duscdiff/x"
4991 write (iout,*) i,(duscdiff(j,i),j=1,3)
4992 write (iout,*) i,(duscdiffx(j,i),j=1,3)
4997 c Total energy from homology restraints
4999 write (iout,*) "odleg",odleg," kat",kat
5000 write (iout,*) "odleg",odleg," kat",kat
5001 write (iout,*) "Eval",Eval," Erot",Erot
5002 write (iout,*) "waga_homology(",iset,")",waga_homology(iset)
5003 write (iout,*) "waga_dist ",waga_dist,"waga_angle ",waga_angle
5004 write (iout,*) "waga_theta ",waga_theta,"waga_d ",waga_d
5007 c Addition of energy of theta angle and SC local geom over constr_homologs ref strs
5009 c ehomology_constr=odleg+kat
5011 c For Lorentzian-type Urestr
5014 if (waga_dist.ge.0.0d0) then
5016 c For Gaussian-type Urestr
5018 c ehomology_constr=(waga_dist*odleg+waga_angle*kat+
5019 c & waga_theta*Eval+waga_d*Erot)*waga_homology(iset)
5020 ehomology_constr=waga_dist*odleg+waga_angle*kat+
5021 & waga_theta*Eval+waga_d*Erot
5022 c write (iout,*) "ehomology_constr=",ehomology_constr
5025 c For Lorentzian-type Urestr
5027 c ehomology_constr=(-waga_dist*odleg+waga_angle*kat+
5028 c & waga_theta*Eval+waga_d*Erot)*waga_homology(iset)
5029 ehomology_constr=-waga_dist*odleg+waga_angle*kat+
5030 & waga_theta*Eval+waga_d*Erot
5031 c write (iout,*) "ehomology_constr=",ehomology_constr
5034 write (iout,*) "odleg",waga_dist,odleg," kat",waga_angle,kat,
5035 & "Eval",waga_theta,eval,
5036 & "Erot",waga_d,Erot
5037 write (iout,*) "ehomology_constr",ehomology_constr
5041 748 format(a8,f12.3,a6,f12.3,a7,f12.3)
5042 747 format(a12,i4,i4,i4,f8.3,f8.3)
5043 746 format(a12,i4,i4,i4,f8.3,f8.3,f8.3)
5044 778 format(a7,1X,f10.3,1X,a4,1X,f10.3,1X,a5,1X,f10.3)
5045 779 format(i3,1X,i3,1X,i2,1X,a7,1X,f7.3,1X,a7,1X,f7.3,1X,a13,1X,
5046 & f7.3,1X,a17,1X,f9.3,1X,a10,1X,f8.3,1X,a10,1X,f8.3)
5048 c-----------------------------------------------------------------------
5049 subroutine ebond(estr)
5051 c Evaluate the energy of stretching of the CA-CA and CA-SC virtual bonds
5053 implicit real*8 (a-h,o-z)
5054 include 'DIMENSIONS'
5055 include 'DIMENSIONS.ZSCOPT'
5056 include 'COMMON.LOCAL'
5057 include 'COMMON.GEO'
5058 include 'COMMON.INTERACT'
5059 include 'COMMON.DERIV'
5060 include 'COMMON.VAR'
5061 include 'COMMON.CHAIN'
5062 include 'COMMON.IOUNITS'
5063 include 'COMMON.NAMES'
5064 include 'COMMON.FFIELD'
5065 include 'COMMON.CONTROL'
5066 double precision u(3),ud(3)
5069 c write (iout,*) "distchainmax",distchainmax
5071 if (itype(i-1).eq.ntyp1 .and. itype(i).eq.ntyp1) cycle
5072 C estr1=estr1+gnmr1(vbld(i),-1.0d0,distchainmax)
5074 C gradb(j,i-1)=gnmr1prim(vbld(i),-1.0d0,distchainmax)
5075 C & *dc(j,i-1)/vbld(i)
5077 C if (energy_dec) write(iout,*)
5078 C & "estr1",i,vbld(i),distchainmax,
5079 C & gnmr1(vbld(i),-1.0d0,distchainmax)
5081 if (itype(i-1).eq.ntyp1 .or. itype(i).eq.ntyp1) then
5082 diff = vbld(i)-vbldpDUM
5083 C write(iout,*) i,diff
5085 diff = vbld(i)-vbldp0
5086 c write (iout,*) i,vbld(i),vbldp0,diff,AKP*diff*diff
5090 gradb(j,i-1)=AKP*diff*dc(j,i-1)/vbld(i)
5093 C write (iout,'(a7,i5,4f7.3)')
5094 C & "estr bb",i,vbld(i),vbldp0,diff,AKP*diff*diff
5096 estr=0.5d0*AKP*estr+estr1
5098 c 09/18/07 AL: multimodal bond potential based on AM1 CA-SC PMF's included
5102 if (iti.ne.10 .and. iti.ne.ntyp1) then
5105 diff=vbld(i+nres)-vbldsc0(1,iti)
5106 C write (iout,*) i,iti,vbld(i+nres),vbldsc0(1,iti),diff,
5107 C & AKSC(1,iti),AKSC(1,iti)*diff*diff
5108 estr=estr+0.5d0*AKSC(1,iti)*diff*diff
5110 gradbx(j,i)=AKSC(1,iti)*diff*dc(j,i+nres)/vbld(i+nres)
5114 diff=vbld(i+nres)-vbldsc0(j,iti)
5115 ud(j)=aksc(j,iti)*diff
5116 u(j)=abond0(j,iti)+0.5d0*ud(j)*diff
5130 uprod2=uprod2*u(k)*u(k)
5134 usumsqder=usumsqder+ud(j)*uprod2
5136 c write (iout,*) i,iti,vbld(i+nres),(vbldsc0(j,iti),
5137 c & AKSC(j,iti),abond0(j,iti),u(j),j=1,nbi)
5138 estr=estr+uprod/usum
5140 gradbx(j,i)=usumsqder/(usum*usum)*dc(j,i+nres)/vbld(i+nres)
5148 C--------------------------------------------------------------------------
5149 subroutine ebend(etheta,ethetacnstr)
5151 C Evaluate the virtual-bond-angle energy given the virtual-bond dihedral
5152 C angles gamma and its derivatives in consecutive thetas and gammas.
5154 implicit real*8 (a-h,o-z)
5155 include 'DIMENSIONS'
5156 include 'DIMENSIONS.ZSCOPT'
5157 include 'COMMON.LOCAL'
5158 include 'COMMON.GEO'
5159 include 'COMMON.INTERACT'
5160 include 'COMMON.DERIV'
5161 include 'COMMON.VAR'
5162 include 'COMMON.CHAIN'
5163 include 'COMMON.IOUNITS'
5164 include 'COMMON.NAMES'
5165 include 'COMMON.FFIELD'
5166 include 'COMMON.TORCNSTR'
5167 common /calcthet/ term1,term2,termm,diffak,ratak,
5168 & ak,aktc,termpre,termexp,sigc,sig0i,time11,time12,sigcsq,
5169 & delthe0,sig0inv,sigtc,sigsqtc,delthec,it
5170 double precision y(2),z(2)
5172 c time11=dexp(-2*time)
5175 c write (iout,*) "nres",nres
5176 c write (*,'(a,i2)') 'EBEND ICG=',icg
5177 c write (iout,*) ithet_start,ithet_end
5178 do i=ithet_start,ithet_end
5179 C if (itype(i-1).eq.ntyp1) cycle
5181 if ((itype(i-1).eq.ntyp1).or.itype(i-2).eq.ntyp1
5182 & .or.itype(i).eq.ntyp1) cycle
5183 C Zero the energy function and its derivative at 0 or pi.
5184 call splinthet(theta(i),0.5d0*delta,ss,ssd)
5186 ichir1=isign(1,itype(i-2))
5187 ichir2=isign(1,itype(i))
5188 if (itype(i-2).eq.10) ichir1=isign(1,itype(i-1))
5189 if (itype(i).eq.10) ichir2=isign(1,itype(i-1))
5190 if (itype(i-1).eq.10) then
5191 itype1=isign(10,itype(i-2))
5192 ichir11=isign(1,itype(i-2))
5193 ichir12=isign(1,itype(i-2))
5194 itype2=isign(10,itype(i))
5195 ichir21=isign(1,itype(i))
5196 ichir22=isign(1,itype(i))
5203 if (i.gt.3 .and. itype(i-3).ne.ntyp1) then
5207 c call proc_proc(phii,icrc)
5208 if (icrc.eq.1) phii=150.0
5219 if (i.lt.nres .and. itype(i+1).ne.ntyp1) then
5223 c call proc_proc(phii1,icrc)
5224 if (icrc.eq.1) phii1=150.0
5236 C Calculate the "mean" value of theta from the part of the distribution
5237 C dependent on the adjacent virtual-bond-valence angles (gamma1 & gamma2).
5238 C In following comments this theta will be referred to as t_c.
5239 thet_pred_mean=0.0d0
5241 athetk=athet(k,it,ichir1,ichir2)
5242 bthetk=bthet(k,it,ichir1,ichir2)
5244 athetk=athet(k,itype1,ichir11,ichir12)
5245 bthetk=bthet(k,itype2,ichir21,ichir22)
5247 thet_pred_mean=thet_pred_mean+athetk*y(k)+bthetk*z(k)
5249 c write (iout,*) "thet_pred_mean",thet_pred_mean
5250 dthett=thet_pred_mean*ssd
5251 thet_pred_mean=thet_pred_mean*ss+a0thet(it)
5252 c write (iout,*) "thet_pred_mean",thet_pred_mean
5253 C Derivatives of the "mean" values in gamma1 and gamma2.
5254 dthetg1=(-athet(1,it,ichir1,ichir2)*y(2)
5255 &+athet(2,it,ichir1,ichir2)*y(1))*ss
5256 dthetg2=(-bthet(1,it,ichir1,ichir2)*z(2)
5257 & +bthet(2,it,ichir1,ichir2)*z(1))*ss
5259 dthetg1=(-athet(1,itype1,ichir11,ichir12)*y(2)
5260 &+athet(2,itype1,ichir11,ichir12)*y(1))*ss
5261 dthetg2=(-bthet(1,itype2,ichir21,ichir22)*z(2)
5262 & +bthet(2,itype2,ichir21,ichir22)*z(1))*ss
5264 if (theta(i).gt.pi-delta) then
5265 call theteng(pi-delta,thet_pred_mean,theta0(it),f0,fprim0,
5267 call mixder(pi-delta,thet_pred_mean,theta0(it),fprim_tc0)
5268 call theteng(pi,thet_pred_mean,theta0(it),f1,fprim1,E_tc1)
5269 call spline1(theta(i),pi-delta,delta,f0,f1,fprim0,ethetai,
5271 call spline2(theta(i),pi-delta,delta,E_tc0,E_tc1,fprim_tc0,
5273 else if (theta(i).lt.delta) then
5274 call theteng(delta,thet_pred_mean,theta0(it),f0,fprim0,E_tc0)
5275 call theteng(0.0d0,thet_pred_mean,theta0(it),f1,fprim1,E_tc1)
5276 call spline1(theta(i),delta,-delta,f0,f1,fprim0,ethetai,
5278 call mixder(delta,thet_pred_mean,theta0(it),fprim_tc0)
5279 call spline2(theta(i),delta,-delta,E_tc0,E_tc1,fprim_tc0,
5282 call theteng(theta(i),thet_pred_mean,theta0(it),ethetai,
5285 etheta=etheta+ethetai
5286 c write (iout,'(a6,i5,0pf7.3,f7.3,i5)')
5287 c & 'ebend',i,ethetai,theta(i),itype(i)
5288 c write (iout,'(2i3,3f8.3,f10.5)') i,it,rad2deg*theta(i),
5289 c & rad2deg*phii,rad2deg*phii1,ethetai
5290 if (i.gt.3) gloc(i-3,icg)=gloc(i-3,icg)+wang*E_tc*dthetg1
5291 if (i.lt.nres) gloc(i-2,icg)=gloc(i-2,icg)+wang*E_tc*dthetg2
5292 gloc(nphi+i-2,icg)=wang*(E_theta+E_tc*dthett)
5296 C print *,ithetaconstr_start,ithetaconstr_end,"TU"
5297 do i=1,ntheta_constr
5298 itheta=itheta_constr(i)
5299 thetiii=theta(itheta)
5300 difi=pinorm(thetiii-theta_constr0(i))
5301 if (difi.gt.theta_drange(i)) then
5302 difi=difi-theta_drange(i)
5303 ethetacnstr=ethetacnstr+0.25d0*for_thet_constr(i)*difi**4
5304 gloc(itheta+nphi-2,icg)=gloc(itheta+nphi-2,icg)
5305 & +for_thet_constr(i)*difi**3
5306 else if (difi.lt.-drange(i)) then
5308 ethetacnstr=ethetacnstr+0.25d0*for_thet_constr(i)*difi**4
5309 gloc(itheta+nphi-2,icg)=gloc(itheta+nphi-2,icg)
5310 & +for_thet_constr(i)*difi**3
5314 C if (energy_dec) then
5315 C write (iout,'(a6,2i5,4f8.3,2e14.5)') "ethetc",
5316 C & i,itheta,rad2deg*thetiii,
5317 C & rad2deg*theta_constr0(i), rad2deg*theta_drange(i),
5318 C & rad2deg*difi,0.25d0*for_thet_constr(i)*difi**4,
5319 C & gloc(itheta+nphi-2,icg)
5322 C Ufff.... We've done all this!!!
5325 C---------------------------------------------------------------------------
5326 subroutine theteng(thetai,thet_pred_mean,theta0i,ethetai,E_theta,
5328 implicit real*8 (a-h,o-z)
5329 include 'DIMENSIONS'
5330 include 'COMMON.LOCAL'
5331 include 'COMMON.IOUNITS'
5332 common /calcthet/ term1,term2,termm,diffak,ratak,
5333 & ak,aktc,termpre,termexp,sigc,sig0i,time11,time12,sigcsq,
5334 & delthe0,sig0inv,sigtc,sigsqtc,delthec,it
5335 C Calculate the contributions to both Gaussian lobes.
5336 C 6/6/97 - Deform the Gaussians using the factor of 1/(1+time)
5337 C The "polynomial part" of the "standard deviation" of this part of
5341 sig=sig*thet_pred_mean+polthet(j,it)
5343 C Derivative of the "interior part" of the "standard deviation of the"
5344 C gamma-dependent Gaussian lobe in t_c.
5345 sigtc=3*polthet(3,it)
5347 sigtc=sigtc*thet_pred_mean+j*polthet(j,it)
5350 C Set the parameters of both Gaussian lobes of the distribution.
5351 C "Standard deviation" of the gamma-dependent Gaussian lobe (sigtc)
5352 fac=sig*sig+sigc0(it)
5355 C Following variable (sigsqtc) is -(1/2)d[sigma(t_c)**(-2))]/dt_c
5356 sigsqtc=-4.0D0*sigcsq*sigtc
5357 c print *,i,sig,sigtc,sigsqtc
5358 C Following variable (sigtc) is d[sigma(t_c)]/dt_c
5359 sigtc=-sigtc/(fac*fac)
5360 C Following variable is sigma(t_c)**(-2)
5361 sigcsq=sigcsq*sigcsq
5363 sig0inv=1.0D0/sig0i**2
5364 delthec=thetai-thet_pred_mean
5365 delthe0=thetai-theta0i
5366 term1=-0.5D0*sigcsq*delthec*delthec
5367 term2=-0.5D0*sig0inv*delthe0*delthe0
5368 C Following fuzzy logic is to avoid underflows in dexp and subsequent INFs and
5369 C NaNs in taking the logarithm. We extract the largest exponent which is added
5370 C to the energy (this being the log of the distribution) at the end of energy
5371 C term evaluation for this virtual-bond angle.
5372 if (term1.gt.term2) then
5374 term2=dexp(term2-termm)
5378 term1=dexp(term1-termm)
5381 C The ratio between the gamma-independent and gamma-dependent lobes of
5382 C the distribution is a Gaussian function of thet_pred_mean too.
5383 diffak=gthet(2,it)-thet_pred_mean
5384 ratak=diffak/gthet(3,it)**2
5385 ak=dexp(gthet(1,it)-0.5D0*diffak*ratak)
5386 C Let's differentiate it in thet_pred_mean NOW.
5388 C Now put together the distribution terms to make complete distribution.
5389 termexp=term1+ak*term2
5390 termpre=sigc+ak*sig0i
5391 C Contribution of the bending energy from this theta is just the -log of
5392 C the sum of the contributions from the two lobes and the pre-exponential
5393 C factor. Simple enough, isn't it?
5394 ethetai=(-dlog(termexp)-termm+dlog(termpre))
5395 C NOW the derivatives!!!
5396 C 6/6/97 Take into account the deformation.
5397 E_theta=(delthec*sigcsq*term1
5398 & +ak*delthe0*sig0inv*term2)/termexp
5399 E_tc=((sigtc+aktc*sig0i)/termpre
5400 & -((delthec*sigcsq+delthec*delthec*sigsqtc)*term1+
5401 & aktc*term2)/termexp)
5404 c-----------------------------------------------------------------------------
5405 subroutine mixder(thetai,thet_pred_mean,theta0i,E_tc_t)
5406 implicit real*8 (a-h,o-z)
5407 include 'DIMENSIONS'
5408 include 'COMMON.LOCAL'
5409 include 'COMMON.IOUNITS'
5410 common /calcthet/ term1,term2,termm,diffak,ratak,
5411 & ak,aktc,termpre,termexp,sigc,sig0i,time11,time12,sigcsq,
5412 & delthe0,sig0inv,sigtc,sigsqtc,delthec,it
5413 delthec=thetai-thet_pred_mean
5414 delthe0=thetai-theta0i
5415 C "Thank you" to MAPLE (probably spared one day of hand-differentiation).
5416 t3 = thetai-thet_pred_mean
5420 t14 = t12+t6*sigsqtc
5422 t21 = thetai-theta0i
5428 E_tc_t = -((sigcsq+2.D0*t3*sigsqtc)*t9-t14*sigcsq*t3*t16*t9
5429 & -aktc*sig0inv*t27)/t32+(t14*t9+aktc*t26)/t40
5430 & *(-t12*t9-ak*sig0inv*t27)
5434 C--------------------------------------------------------------------------
5435 subroutine ebend(etheta)
5437 C Evaluate the virtual-bond-angle energy given the virtual-bond dihedral
5438 C angles gamma and its derivatives in consecutive thetas and gammas.
5439 C ab initio-derived potentials from
5440 c Kozlowska et al., J. Phys.: Condens. Matter 19 (2007) 285203
5442 implicit real*8 (a-h,o-z)
5443 include 'DIMENSIONS'
5444 include 'DIMENSIONS.ZSCOPT'
5445 include 'COMMON.LOCAL'
5446 include 'COMMON.GEO'
5447 include 'COMMON.INTERACT'
5448 include 'COMMON.DERIV'
5449 include 'COMMON.VAR'
5450 include 'COMMON.CHAIN'
5451 include 'COMMON.IOUNITS'
5452 include 'COMMON.NAMES'
5453 include 'COMMON.FFIELD'
5454 include 'COMMON.CONTROL'
5455 include 'COMMON.TORCNSTR'
5456 double precision coskt(mmaxtheterm),sinkt(mmaxtheterm),
5457 & cosph1(maxsingle),sinph1(maxsingle),cosph2(maxsingle),
5458 & sinph2(maxsingle),cosph1ph2(maxdouble,maxdouble),
5459 & sinph1ph2(maxdouble,maxdouble)
5460 logical lprn /.false./, lprn1 /.false./
5462 c write (iout,*) "ithetyp",(ithetyp(i),i=1,ntyp1)
5463 do i=ithet_start,ithet_end
5465 C if (itype(i-1).eq.ntyp1) cycle
5467 if ((itype(i-1).eq.ntyp1).or.itype(i-2).eq.ntyp1
5468 & .or.itype(i).eq.ntyp1) cycle
5469 if (iabs(itype(i+1)).eq.20) iblock=2
5470 if (iabs(itype(i+1)).ne.20) iblock=1
5474 theti2=0.5d0*theta(i)
5475 ityp2=ithetyp((itype(i-1)))
5477 coskt(k)=dcos(k*theti2)
5478 sinkt(k)=dsin(k*theti2)
5488 if (i.gt.3 .and. itype(i-3).ne.ntyp1) then
5491 if (phii.ne.phii) phii=150.0
5495 ityp1=ithetyp((itype(i-2)))
5497 cosph1(k)=dcos(k*phii)
5498 sinph1(k)=dsin(k*phii)
5504 ityp1=ithetyp((itype(i-2)))
5510 if (i.lt.nres .and. itype(i+1).ne.ntyp1) then
5513 if (phii1.ne.phii1) phii1=150.0
5518 ityp3=ithetyp((itype(i)))
5520 cosph2(k)=dcos(k*phii1)
5521 sinph2(k)=dsin(k*phii1)
5526 ityp3=ithetyp((itype(i)))
5532 c write (iout,*) "i",i," ityp1",itype(i-2),ityp1,
5533 c & " ityp2",itype(i-1),ityp2," ityp3",itype(i),ityp3
5535 ethetai=aa0thet(ityp1,ityp2,ityp3,iblock)
5538 ccl=cosph1(l)*cosph2(k-l)
5539 ssl=sinph1(l)*sinph2(k-l)
5540 scl=sinph1(l)*cosph2(k-l)
5541 csl=cosph1(l)*sinph2(k-l)
5542 cosph1ph2(l,k)=ccl-ssl
5543 cosph1ph2(k,l)=ccl+ssl
5544 sinph1ph2(l,k)=scl+csl
5545 sinph1ph2(k,l)=scl-csl
5549 write (iout,*) "i",i," ityp1",ityp1," ityp2",ityp2,
5550 & " ityp3",ityp3," theti2",theti2," phii",phii," phii1",phii1
5551 write (iout,*) "coskt and sinkt"
5553 write (iout,*) k,coskt(k),sinkt(k)
5557 ethetai=ethetai+aathet(k,ityp1,ityp2,ityp3,iblock)*sinkt(k)
5558 dethetai=dethetai+0.5d0*k*aathet(k,ityp1,ityp2,ityp3,iblock)
5561 & write (iout,*) "k",k,"
5562 & aathet",aathet(k,ityp1,ityp2,ityp3,iblock),
5563 & " ethetai",ethetai
5566 write (iout,*) "cosph and sinph"
5568 write (iout,*) k,cosph1(k),sinph1(k),cosph2(k),sinph2(k)
5570 write (iout,*) "cosph1ph2 and sinph2ph2"
5573 write (iout,*) l,k,cosph1ph2(l,k),cosph1ph2(k,l),
5574 & sinph1ph2(l,k),sinph1ph2(k,l)
5577 write(iout,*) "ethetai",ethetai
5581 aux=bbthet(k,m,ityp1,ityp2,ityp3,iblock)*cosph1(k)
5582 & +ccthet(k,m,ityp1,ityp2,ityp3,iblock)*sinph1(k)
5583 & +ddthet(k,m,ityp1,ityp2,ityp3,iblock)*cosph2(k)
5584 & +eethet(k,m,ityp1,ityp2,ityp3,iblock)*sinph2(k)
5585 ethetai=ethetai+sinkt(m)*aux
5586 dethetai=dethetai+0.5d0*m*aux*coskt(m)
5587 dephii=dephii+k*sinkt(m)*(
5588 & ccthet(k,m,ityp1,ityp2,ityp3,iblock)*cosph1(k)-
5589 & bbthet(k,m,ityp1,ityp2,ityp3,iblock)*sinph1(k))
5590 dephii1=dephii1+k*sinkt(m)*(
5591 & eethet(k,m,ityp1,ityp2,ityp3,iblock)*cosph2(k)-
5592 & ddthet(k,m,ityp1,ityp2,ityp3,iblock)*sinph2(k))
5594 & write (iout,*) "m",m," k",k," bbthet",
5595 & bbthet(k,m,ityp1,ityp2,ityp3,iblock)," ccthet",
5596 & ccthet(k,m,ityp1,ityp2,ityp3,iblock)," ddthet",
5597 & ddthet(k,m,ityp1,ityp2,ityp3,iblock)," eethet",
5598 & eethet(k,m,ityp1,ityp2,ityp3,iblock)," ethetai",ethetai
5602 & write(iout,*) "ethetai",ethetai
5606 aux=ffthet(l,k,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(l,k)+
5607 & ffthet(k,l,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(k,l)+
5608 & ggthet(l,k,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(l,k)+
5609 & ggthet(k,l,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(k,l)
5610 ethetai=ethetai+sinkt(m)*aux
5611 dethetai=dethetai+0.5d0*m*coskt(m)*aux
5612 dephii=dephii+l*sinkt(m)*(
5613 & -ffthet(l,k,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(l,k)-
5614 & ffthet(k,l,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(k,l)+
5615 & ggthet(l,k,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(l,k)+
5616 & ggthet(k,l,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(k,l))
5617 dephii1=dephii1+(k-l)*sinkt(m)*(
5618 & -ffthet(l,k,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(l,k)+
5619 & ffthet(k,l,m,ityp1,ityp2,ityp3,iblock)*sinph1ph2(k,l)+
5620 & ggthet(l,k,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(l,k)-
5621 & ggthet(k,l,m,ityp1,ityp2,ityp3,iblock)*cosph1ph2(k,l))
5623 write (iout,*) "m",m," k",k," l",l," ffthet",
5624 & ffthet(l,k,m,ityp1,ityp2,ityp3,iblock),
5625 & ffthet(k,l,m,ityp1,ityp2,ityp3,iblock)," ggthet",
5626 & ggthet(l,k,m,ityp1,ityp2,ityp3,iblock),
5627 & ggthet(k,l,m,ityp1,ityp2,ityp3,iblock),
5628 & " ethetai",ethetai
5629 write (iout,*) cosph1ph2(l,k)*sinkt(m),
5630 & cosph1ph2(k,l)*sinkt(m),
5631 & sinph1ph2(l,k)*sinkt(m),sinph1ph2(k,l)*sinkt(m)
5637 if (lprn1) write (iout,'(i2,3f8.1,9h ethetai ,f10.5)')
5638 & i,theta(i)*rad2deg,phii*rad2deg,
5639 & phii1*rad2deg,ethetai
5640 etheta=etheta+ethetai
5641 if (i.gt.3) gloc(i-3,icg)=gloc(i-3,icg)+wang*dephii
5642 if (i.lt.nres) gloc(i-2,icg)=gloc(i-2,icg)+wang*dephii1
5643 c gloc(nphi+i-2,icg)=wang*dethetai
5644 gloc(nphi+i-2,icg)=gloc(nphi+i-2,icg)+wang*dethetai
5650 c-----------------------------------------------------------------------------
5651 subroutine esc(escloc)
5652 C Calculate the local energy of a side chain and its derivatives in the
5653 C corresponding virtual-bond valence angles THETA and the spherical angles
5655 implicit real*8 (a-h,o-z)
5656 include 'DIMENSIONS'
5657 include 'DIMENSIONS.ZSCOPT'
5658 include 'COMMON.GEO'
5659 include 'COMMON.LOCAL'
5660 include 'COMMON.VAR'
5661 include 'COMMON.INTERACT'
5662 include 'COMMON.DERIV'
5663 include 'COMMON.CHAIN'
5664 include 'COMMON.IOUNITS'
5665 include 'COMMON.NAMES'
5666 include 'COMMON.FFIELD'
5667 double precision x(3),dersc(3),xemp(3),dersc0(3),dersc1(3),
5668 & ddersc0(3),ddummy(3),xtemp(3),temp(3)
5669 common /sccalc/ time11,time12,time112,theti,it,nlobit
5672 C write (iout,*) 'ESC'
5673 do i=loc_start,loc_end
5675 if (it.eq.ntyp1) cycle
5676 if (it.eq.10) goto 1
5677 nlobit=nlob(iabs(it))
5678 c print *,'i=',i,' it=',it,' nlobit=',nlobit
5679 C write (iout,*) 'i=',i,' ssa=',ssa,' ssad=',ssad
5680 theti=theta(i+1)-pipol
5684 c write (iout,*) "i",i," x",x(1),x(2),x(3)
5686 if (x(2).gt.pi-delta) then
5690 call enesc(xtemp,escloci0,dersc0,ddersc0,.true.)
5692 call enesc(xtemp,escloci1,dersc1,ddummy,.false.)
5693 call spline1(x(2),pi-delta,delta,escloci0,escloci1,dersc0(2),
5695 call spline2(x(2),pi-delta,delta,dersc0(1),dersc1(1),
5696 & ddersc0(1),dersc(1))
5697 call spline2(x(2),pi-delta,delta,dersc0(3),dersc1(3),
5698 & ddersc0(3),dersc(3))
5700 call enesc_bound(xtemp,esclocbi0,dersc0,dersc12,.true.)
5702 call enesc_bound(xtemp,esclocbi1,dersc1,chuju,.false.)
5703 call spline1(x(2),pi-delta,delta,esclocbi0,esclocbi1,
5704 & dersc0(2),esclocbi,dersc02)
5705 call spline2(x(2),pi-delta,delta,dersc0(1),dersc1(1),
5707 call splinthet(x(2),0.5d0*delta,ss,ssd)
5712 dersc(k)=ss*dersc(k)+(1.0d0-ss)*dersc0(k)
5714 dersc(2)=dersc(2)+ssd*(escloci-esclocbi)
5715 write (iout,*) 'i=',i,x(2)*rad2deg,escloci0,escloci,
5717 escloci=ss*escloci+(1.0d0-ss)*esclocbi
5719 c write (iout,*) escloci
5720 else if (x(2).lt.delta) then
5724 call enesc(xtemp,escloci0,dersc0,ddersc0,.true.)
5726 call enesc(xtemp,escloci1,dersc1,ddummy,.false.)
5727 call spline1(x(2),delta,-delta,escloci0,escloci1,dersc0(2),
5729 call spline2(x(2),delta,-delta,dersc0(1),dersc1(1),
5730 & ddersc0(1),dersc(1))
5731 call spline2(x(2),delta,-delta,dersc0(3),dersc1(3),
5732 & ddersc0(3),dersc(3))
5734 call enesc_bound(xtemp,esclocbi0,dersc0,dersc12,.true.)
5736 call enesc_bound(xtemp,esclocbi1,dersc1,chuju,.false.)
5737 call spline1(x(2),delta,-delta,esclocbi0,esclocbi1,
5738 & dersc0(2),esclocbi,dersc02)
5739 call spline2(x(2),delta,-delta,dersc0(1),dersc1(1),
5744 call splinthet(x(2),0.5d0*delta,ss,ssd)
5746 dersc(k)=ss*dersc(k)+(1.0d0-ss)*dersc0(k)
5748 dersc(2)=dersc(2)+ssd*(escloci-esclocbi)
5749 c write (iout,*) 'i=',i,x(2)*rad2deg,escloci0,escloci,
5751 escloci=ss*escloci+(1.0d0-ss)*esclocbi
5752 C write (iout,*) 'i=',i, escloci
5754 call enesc(x,escloci,dersc,ddummy,.false.)
5757 escloc=escloc+escloci
5758 C write (iout,*) 'i=',i,' escloci=',escloci,' dersc=',dersc
5759 write (iout,'(a6,i5,0pf7.3)')
5760 & 'escloc',i,escloci
5762 gloc(nphi+i-1,icg)=gloc(nphi+i-1,icg)+
5764 gloc(ialph(i,1),icg)=wscloc*dersc(2)
5765 gloc(ialph(i,1)+nside,icg)=wscloc*dersc(3)
5770 C---------------------------------------------------------------------------
5771 subroutine enesc(x,escloci,dersc,ddersc,mixed)
5772 implicit real*8 (a-h,o-z)
5773 include 'DIMENSIONS'
5774 include 'COMMON.GEO'
5775 include 'COMMON.LOCAL'
5776 include 'COMMON.IOUNITS'
5777 common /sccalc/ time11,time12,time112,theti,it,nlobit
5778 double precision x(3),z(3),Ax(3,maxlob,-1:1),dersc(3),ddersc(3)
5779 double precision contr(maxlob,-1:1)
5781 c write (iout,*) 'it=',it,' nlobit=',nlobit
5785 if (mixed) ddersc(j)=0.0d0
5789 C Because of periodicity of the dependence of the SC energy in omega we have
5790 C to add up the contributions from x(3)-2*pi, x(3), and x(3+2*pi).
5791 C To avoid underflows, first compute & store the exponents.
5799 z(k)=x(k)-censc(k,j,it)
5804 Axk=Axk+gaussc(l,k,j,it)*z(l)
5810 expfac=expfac+Ax(k,j,iii)*z(k)
5818 C As in the case of ebend, we want to avoid underflows in exponentiation and
5819 C subsequent NaNs and INFs in energy calculation.
5820 C Find the largest exponent
5824 if (emin.gt.contr(j,iii)) emin=contr(j,iii)
5828 cd print *,'it=',it,' emin=',emin
5830 C Compute the contribution to SC energy and derivatives
5834 expfac=dexp(bsc(j,iabs(it))-0.5D0*contr(j,iii)+emin)
5835 cd print *,'j=',j,' expfac=',expfac
5836 escloc_i=escloc_i+expfac
5838 dersc(k)=dersc(k)+Ax(k,j,iii)*expfac
5842 ddersc(k)=ddersc(k)+(-Ax(2,j,iii)*Ax(k,j,iii)
5843 & +gaussc(k,2,j,it))*expfac
5850 dersc(1)=dersc(1)/cos(theti)**2
5851 ddersc(1)=ddersc(1)/cos(theti)**2
5854 escloci=-(dlog(escloc_i)-emin)
5856 dersc(j)=dersc(j)/escloc_i
5860 ddersc(j)=(ddersc(j)/escloc_i+dersc(2)*dersc(j))
5865 C------------------------------------------------------------------------------
5866 subroutine enesc_bound(x,escloci,dersc,dersc12,mixed)
5867 implicit real*8 (a-h,o-z)
5868 include 'DIMENSIONS'
5869 include 'COMMON.GEO'
5870 include 'COMMON.LOCAL'
5871 include 'COMMON.IOUNITS'
5872 common /sccalc/ time11,time12,time112,theti,it,nlobit
5873 double precision x(3),z(3),Ax(3,maxlob),dersc(3)
5874 double precision contr(maxlob)
5885 z(k)=x(k)-censc(k,j,it)
5891 Axk=Axk+gaussc(l,k,j,it)*z(l)
5897 expfac=expfac+Ax(k,j)*z(k)
5902 C As in the case of ebend, we want to avoid underflows in exponentiation and
5903 C subsequent NaNs and INFs in energy calculation.
5904 C Find the largest exponent
5907 if (emin.gt.contr(j)) emin=contr(j)
5911 C Compute the contribution to SC energy and derivatives
5915 expfac=dexp(bsc(j,iabs(it))-0.5D0*contr(j)+emin)
5916 escloc_i=escloc_i+expfac
5918 dersc(k)=dersc(k)+Ax(k,j)*expfac
5920 if (mixed) dersc12=dersc12+(-Ax(2,j)*Ax(1,j)
5921 & +gaussc(1,2,j,it))*expfac
5925 dersc(1)=dersc(1)/cos(theti)**2
5926 dersc12=dersc12/cos(theti)**2
5927 escloci=-(dlog(escloc_i)-emin)
5929 dersc(j)=dersc(j)/escloc_i
5931 if (mixed) dersc12=(dersc12/escloc_i+dersc(2)*dersc(1))
5935 c----------------------------------------------------------------------------------
5936 subroutine esc(escloc)
5937 C Calculate the local energy of a side chain and its derivatives in the
5938 C corresponding virtual-bond valence angles THETA and the spherical angles
5939 C ALPHA and OMEGA derived from AM1 all-atom calculations.
5940 C added by Urszula Kozlowska. 07/11/2007
5942 implicit real*8 (a-h,o-z)
5943 include 'DIMENSIONS'
5944 include 'DIMENSIONS.ZSCOPT'
5945 include 'COMMON.GEO'
5946 include 'COMMON.LOCAL'
5947 include 'COMMON.VAR'
5948 include 'COMMON.SCROT'
5949 include 'COMMON.INTERACT'
5950 include 'COMMON.DERIV'
5951 include 'COMMON.CHAIN'
5952 include 'COMMON.IOUNITS'
5953 include 'COMMON.NAMES'
5954 include 'COMMON.FFIELD'
5955 include 'COMMON.CONTROL'
5956 include 'COMMON.VECTORS'
5957 double precision x_prime(3),y_prime(3),z_prime(3)
5958 & , sumene,dsc_i,dp2_i,x(65),
5959 & xx,yy,zz,sumene1,sumene2,sumene3,sumene4,s1,s1_6,s2,s2_6,
5960 & de_dxx,de_dyy,de_dzz,de_dt
5961 double precision s1_t,s1_6_t,s2_t,s2_6_t
5963 & dXX_Ci1(3),dYY_Ci1(3),dZZ_Ci1(3),dXX_Ci(3),
5964 & dYY_Ci(3),dZZ_Ci(3),dXX_XYZ(3),dYY_XYZ(3),dZZ_XYZ(3),
5965 & dt_dCi(3),dt_dCi1(3)
5966 common /sccalc/ time11,time12,time112,theti,it,nlobit
5969 do i=loc_start,loc_end
5970 if (itype(i).eq.ntyp1) cycle
5971 costtab(i+1) =dcos(theta(i+1))
5972 sinttab(i+1) =dsqrt(1-costtab(i+1)*costtab(i+1))
5973 cost2tab(i+1)=dsqrt(0.5d0*(1.0d0+costtab(i+1)))
5974 sint2tab(i+1)=dsqrt(0.5d0*(1.0d0-costtab(i+1)))
5975 cosfac2=0.5d0/(1.0d0+costtab(i+1))
5976 cosfac=dsqrt(cosfac2)
5977 sinfac2=0.5d0/(1.0d0-costtab(i+1))
5978 sinfac=dsqrt(sinfac2)
5980 if (it.eq.10) goto 1
5982 C Compute the axes of tghe local cartesian coordinates system; store in
5983 c x_prime, y_prime and z_prime
5990 C write(2,*) "dc_norm", dc_norm(1,i+nres),dc_norm(2,i+nres),
5991 C & dc_norm(3,i+nres)
5993 x_prime(j) = (dc_norm(j,i) - dc_norm(j,i-1))*cosfac
5994 y_prime(j) = (dc_norm(j,i) + dc_norm(j,i-1))*sinfac
5997 z_prime(j) = -uz(j,i-1)*dsign(1.0d0,dfloat(itype(i)))
6000 c write (2,*) "x_prime",(x_prime(j),j=1,3)
6001 c write (2,*) "y_prime",(y_prime(j),j=1,3)
6002 c write (2,*) "z_prime",(z_prime(j),j=1,3)
6003 c write (2,*) "xx",scalar(x_prime(1),x_prime(1)),
6004 c & " xy",scalar(x_prime(1),y_prime(1)),
6005 c & " xz",scalar(x_prime(1),z_prime(1)),
6006 c & " yy",scalar(y_prime(1),y_prime(1)),
6007 c & " yz",scalar(y_prime(1),z_prime(1)),
6008 c & " zz",scalar(z_prime(1),z_prime(1))
6010 C Transform the unit vector of the ith side-chain centroid, dC_norm(*,i),
6011 C to local coordinate system. Store in xx, yy, zz.
6017 xx = xx + x_prime(j)*dc_norm(j,i+nres)
6018 yy = yy + y_prime(j)*dc_norm(j,i+nres)
6019 zz = zz + z_prime(j)*dc_norm(j,i+nres)
6026 C Compute the energy of the ith side cbain
6028 c write (2,*) "xx",xx," yy",yy," zz",zz
6031 x(j) = sc_parmin(j,it)
6034 Cc diagnostics - remove later
6036 yy1 = dsin(alph(2))*dcos(omeg(2))
6037 zz1 = -dsign(1.0d0,itype(i))*dsin(alph(2))*dsin(omeg(2))
6038 write(2,'(3f8.1,3f9.3,1x,3f9.3)')
6039 & alph(2)*rad2deg,omeg(2)*rad2deg,theta(3)*rad2deg,xx,yy,zz,
6041 C," --- ", xx_w,yy_w,zz_w
6044 sumene1= x(1)+ x(2)*xx+ x(3)*yy+ x(4)*zz+ x(5)*xx**2
6045 & + x(6)*yy**2+ x(7)*zz**2+ x(8)*xx*zz+ x(9)*xx*yy
6047 sumene2= x(11) + x(12)*xx + x(13)*yy + x(14)*zz + x(15)*xx**2
6048 & + x(16)*yy**2 + x(17)*zz**2 + x(18)*xx*zz + x(19)*xx*yy
6050 sumene3= x(21) +x(22)*xx +x(23)*yy +x(24)*zz +x(25)*xx**2
6051 & +x(26)*yy**2 +x(27)*zz**2 +x(28)*xx*zz +x(29)*xx*yy
6052 & +x(30)*yy*zz +x(31)*xx**3 +x(32)*yy**3 +x(33)*zz**3
6053 & +x(34)*(xx**2)*yy +x(35)*(xx**2)*zz +x(36)*(yy**2)*xx
6054 & +x(37)*(yy**2)*zz +x(38)*(zz**2)*xx +x(39)*(zz**2)*yy
6056 sumene4= x(41) +x(42)*xx +x(43)*yy +x(44)*zz +x(45)*xx**2
6057 & +x(46)*yy**2 +x(47)*zz**2 +x(48)*xx*zz +x(49)*xx*yy
6058 & +x(50)*yy*zz +x(51)*xx**3 +x(52)*yy**3 +x(53)*zz**3
6059 & +x(54)*(xx**2)*yy +x(55)*(xx**2)*zz +x(56)*(yy**2)*xx
6060 & +x(57)*(yy**2)*zz +x(58)*(zz**2)*xx +x(59)*(zz**2)*yy
6062 dsc_i = 0.743d0+x(61)
6064 dscp1=dsqrt(dsc_i**2+dp2_i**2-2*dsc_i*dp2_i
6065 & *(xx*cost2tab(i+1)+yy*sint2tab(i+1)))
6066 dscp2=dsqrt(dsc_i**2+dp2_i**2-2*dsc_i*dp2_i
6067 & *(xx*cost2tab(i+1)-yy*sint2tab(i+1)))
6068 s1=(1+x(63))/(0.1d0 + dscp1)
6069 s1_6=(1+x(64))/(0.1d0 + dscp1**6)
6070 s2=(1+x(65))/(0.1d0 + dscp2)
6071 s2_6=(1+x(65))/(0.1d0 + dscp2**6)
6072 sumene = ( sumene3*sint2tab(i+1) + sumene1)*(s1+s1_6)
6073 & + (sumene4*cost2tab(i+1) +sumene2)*(s2+s2_6)
6074 c write(2,'(i2," sumene",7f9.3)') i,sumene1,sumene2,sumene3,
6076 c & dscp1,dscp2,sumene
6077 c sumene = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
6078 escloc = escloc + sumene
6079 c write (2,*) "escloc",escloc
6080 c write (2,*) "i",i," escloc",sumene,escloc,it,itype(i),
6082 if (.not. calc_grad) goto 1
6085 C This section to check the numerical derivatives of the energy of ith side
6086 C chain in xx, yy, zz, and theta. Use the -DDEBUG compiler option or insert
6087 C #define DEBUG in the code to turn it on.
6089 write (2,*) "sumene =",sumene
6093 write (2,*) xx,yy,zz
6094 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
6095 de_dxx_num=(sumenep-sumene)/aincr
6097 write (2,*) "xx+ sumene from enesc=",sumenep
6100 write (2,*) xx,yy,zz
6101 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
6102 de_dyy_num=(sumenep-sumene)/aincr
6104 write (2,*) "yy+ sumene from enesc=",sumenep
6107 write (2,*) xx,yy,zz
6108 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
6109 de_dzz_num=(sumenep-sumene)/aincr
6111 write (2,*) "zz+ sumene from enesc=",sumenep
6112 costsave=cost2tab(i+1)
6113 sintsave=sint2tab(i+1)
6114 cost2tab(i+1)=dcos(0.5d0*(theta(i+1)+aincr))
6115 sint2tab(i+1)=dsin(0.5d0*(theta(i+1)+aincr))
6116 sumenep = enesc(x,xx,yy,zz,cost2tab(i+1),sint2tab(i+1))
6117 de_dt_num=(sumenep-sumene)/aincr
6118 write (2,*) " t+ sumene from enesc=",sumenep
6119 cost2tab(i+1)=costsave
6120 sint2tab(i+1)=sintsave
6121 C End of diagnostics section.
6124 C Compute the gradient of esc
6126 pom_s1=(1.0d0+x(63))/(0.1d0 + dscp1)**2
6127 pom_s16=6*(1.0d0+x(64))/(0.1d0 + dscp1**6)**2
6128 pom_s2=(1.0d0+x(65))/(0.1d0 + dscp2)**2
6129 pom_s26=6*(1.0d0+x(65))/(0.1d0 + dscp2**6)**2
6130 pom_dx=dsc_i*dp2_i*cost2tab(i+1)
6131 pom_dy=dsc_i*dp2_i*sint2tab(i+1)
6132 pom_dt1=-0.5d0*dsc_i*dp2_i*(xx*sint2tab(i+1)-yy*cost2tab(i+1))
6133 pom_dt2=-0.5d0*dsc_i*dp2_i*(xx*sint2tab(i+1)+yy*cost2tab(i+1))
6134 pom1=(sumene3*sint2tab(i+1)+sumene1)
6135 & *(pom_s1/dscp1+pom_s16*dscp1**4)
6136 pom2=(sumene4*cost2tab(i+1)+sumene2)
6137 & *(pom_s2/dscp2+pom_s26*dscp2**4)
6138 sumene1x=x(2)+2*x(5)*xx+x(8)*zz+ x(9)*yy
6139 sumene3x=x(22)+2*x(25)*xx+x(28)*zz+x(29)*yy+3*x(31)*xx**2
6140 & +2*x(34)*xx*yy +2*x(35)*xx*zz +x(36)*(yy**2) +x(38)*(zz**2)
6142 sumene2x=x(12)+2*x(15)*xx+x(18)*zz+ x(19)*yy
6143 sumene4x=x(42)+2*x(45)*xx +x(48)*zz +x(49)*yy +3*x(51)*xx**2
6144 & +2*x(54)*xx*yy+2*x(55)*xx*zz+x(56)*(yy**2)+x(58)*(zz**2)
6146 de_dxx =(sumene1x+sumene3x*sint2tab(i+1))*(s1+s1_6)
6147 & +(sumene2x+sumene4x*cost2tab(i+1))*(s2+s2_6)
6148 & +(pom1+pom2)*pom_dx
6150 write(2,*), "de_dxx = ", de_dxx,de_dxx_num
6153 sumene1y=x(3) + 2*x(6)*yy + x(9)*xx + x(10)*zz
6154 sumene3y=x(23) +2*x(26)*yy +x(29)*xx +x(30)*zz +3*x(32)*yy**2
6155 & +x(34)*(xx**2) +2*x(36)*yy*xx +2*x(37)*yy*zz +x(39)*(zz**2)
6157 sumene2y=x(13) + 2*x(16)*yy + x(19)*xx + x(20)*zz
6158 sumene4y=x(43)+2*x(46)*yy+x(49)*xx +x(50)*zz
6159 & +3*x(52)*yy**2+x(54)*xx**2+2*x(56)*yy*xx +2*x(57)*yy*zz
6160 & +x(59)*zz**2 +x(60)*xx*zz
6161 de_dyy =(sumene1y+sumene3y*sint2tab(i+1))*(s1+s1_6)
6162 & +(sumene2y+sumene4y*cost2tab(i+1))*(s2+s2_6)
6163 & +(pom1-pom2)*pom_dy
6165 write(2,*), "de_dyy = ", de_dyy,de_dyy_num
6168 de_dzz =(x(24) +2*x(27)*zz +x(28)*xx +x(30)*yy
6169 & +3*x(33)*zz**2 +x(35)*xx**2 +x(37)*yy**2 +2*x(38)*zz*xx
6170 & +2*x(39)*zz*yy +x(40)*xx*yy)*sint2tab(i+1)*(s1+s1_6)
6171 & +(x(4) + 2*x(7)*zz+ x(8)*xx + x(10)*yy)*(s1+s1_6)
6172 & +(x(44)+2*x(47)*zz +x(48)*xx +x(50)*yy +3*x(53)*zz**2
6173 & +x(55)*xx**2 +x(57)*(yy**2)+2*x(58)*zz*xx +2*x(59)*zz*yy
6174 & +x(60)*xx*yy)*cost2tab(i+1)*(s2+s2_6)
6175 & + ( x(14) + 2*x(17)*zz+ x(18)*xx + x(20)*yy)*(s2+s2_6)
6177 write(2,*), "de_dzz = ", de_dzz,de_dzz_num
6180 de_dt = 0.5d0*sumene3*cost2tab(i+1)*(s1+s1_6)
6181 & -0.5d0*sumene4*sint2tab(i+1)*(s2+s2_6)
6182 & +pom1*pom_dt1+pom2*pom_dt2
6184 write(2,*), "de_dt = ", de_dt,de_dt_num
6188 cossc=scalar(dc_norm(1,i),dc_norm(1,i+nres))
6189 cossc1=scalar(dc_norm(1,i-1),dc_norm(1,i+nres))
6190 cosfac2xx=cosfac2*xx
6191 sinfac2yy=sinfac2*yy
6193 dt_dCi(k) = -(dc_norm(k,i-1)+costtab(i+1)*dc_norm(k,i))*
6195 dt_dCi1(k)= -(dc_norm(k,i)+costtab(i+1)*dc_norm(k,i-1))*
6197 pom=(dC_norm(k,i+nres)-cossc*dC_norm(k,i))*vbld_inv(i+1)
6198 pom1=(dC_norm(k,i+nres)-cossc1*dC_norm(k,i-1))*vbld_inv(i)
6199 c write (iout,*) "i",i," k",k," pom",pom," pom1",pom1,
6200 c & " dt_dCi",dt_dCi(k)," dt_dCi1",dt_dCi1(k)
6201 c write (iout,*) "dC_norm",(dC_norm(j,i),j=1,3),
6202 c & (dC_norm(j,i-1),j=1,3)," vbld_inv",vbld_inv(i+1),vbld_inv(i)
6203 dXX_Ci(k)=pom*cosfac-dt_dCi(k)*cosfac2xx
6204 dXX_Ci1(k)=-pom1*cosfac-dt_dCi1(k)*cosfac2xx
6205 dYY_Ci(k)=pom*sinfac+dt_dCi(k)*sinfac2yy
6206 dYY_Ci1(k)=pom1*sinfac+dt_dCi1(k)*sinfac2yy
6210 dZZ_Ci(k)=dZZ_Ci(k)-uzgrad(j,k,2,i-1)
6211 & *dsign(1.0d0,dfloat(itype(i)))*dC_norm(j,i+nres)
6212 dZZ_Ci1(k)=dZZ_Ci1(k)-uzgrad(j,k,1,i-1)
6213 & *dsign(1.0d0,dfloat(itype(i)))*dC_norm(j,i+nres)
6216 dXX_XYZ(k)=vbld_inv(i+nres)*(x_prime(k)-xx*dC_norm(k,i+nres))
6217 dYY_XYZ(k)=vbld_inv(i+nres)*(y_prime(k)-yy*dC_norm(k,i+nres))
6218 dZZ_XYZ(k)=vbld_inv(i+nres)*(z_prime(k)-zz*dC_norm(k,i+nres))
6220 dt_dCi(k) = -dt_dCi(k)/sinttab(i+1)
6221 dt_dCi1(k)= -dt_dCi1(k)/sinttab(i+1)
6225 dXX_Ctab(k,i)=dXX_Ci(k)
6226 dXX_C1tab(k,i)=dXX_Ci1(k)
6227 dYY_Ctab(k,i)=dYY_Ci(k)
6228 dYY_C1tab(k,i)=dYY_Ci1(k)
6229 dZZ_Ctab(k,i)=dZZ_Ci(k)
6230 dZZ_C1tab(k,i)=dZZ_Ci1(k)
6231 dXX_XYZtab(k,i)=dXX_XYZ(k)
6232 dYY_XYZtab(k,i)=dYY_XYZ(k)
6233 dZZ_XYZtab(k,i)=dZZ_XYZ(k)
6237 c write (iout,*) "k",k," dxx_ci1",dxx_ci1(k)," dyy_ci1",
6238 c & dyy_ci1(k)," dzz_ci1",dzz_ci1(k)
6239 c write (iout,*) "k",k," dxx_ci",dxx_ci(k)," dyy_ci",
6240 c & dyy_ci(k)," dzz_ci",dzz_ci(k)
6241 c write (iout,*) "k",k," dt_dci",dt_dci(k)," dt_dci",
6243 c write (iout,*) "k",k," dxx_XYZ",dxx_XYZ(k)," dyy_XYZ",
6244 c & dyy_XYZ(k)," dzz_XYZ",dzz_XYZ(k)
6245 gscloc(k,i-1)=gscloc(k,i-1)+de_dxx*dxx_ci1(k)
6246 & +de_dyy*dyy_ci1(k)+de_dzz*dzz_ci1(k)+de_dt*dt_dCi1(k)
6247 gscloc(k,i)=gscloc(k,i)+de_dxx*dxx_Ci(k)
6248 & +de_dyy*dyy_Ci(k)+de_dzz*dzz_Ci(k)+de_dt*dt_dCi(k)
6249 gsclocx(k,i)= de_dxx*dxx_XYZ(k)
6250 & +de_dyy*dyy_XYZ(k)+de_dzz*dzz_XYZ(k)
6252 c write(iout,*) "ENERGY GRAD = ", (gscloc(k,i-1),k=1,3),
6253 c & (gscloc(k,i),k=1,3),(gsclocx(k,i),k=1,3)
6255 C to check gradient call subroutine check_grad
6262 c------------------------------------------------------------------------------
6263 subroutine gcont(rij,r0ij,eps0ij,delta,fcont,fprimcont)
6265 C This procedure calculates two-body contact function g(rij) and its derivative:
6268 C g(rij) = esp0ij*(-0.9375*x+0.625*x**3-0.1875*x**5) ! -1 =< x =< 1
6271 C where x=(rij-r0ij)/delta
6273 C rij - interbody distance, r0ij - contact distance, eps0ij - contact energy
6276 double precision rij,r0ij,eps0ij,fcont,fprimcont
6277 double precision x,x2,x4,delta
6281 if (x.lt.-1.0D0) then
6284 else if (x.le.1.0D0) then
6287 fcont=eps0ij*(x*(-0.9375D0+0.6250D0*x2-0.1875D0*x4)+0.5D0)
6288 fprimcont=eps0ij * (-0.9375D0+1.8750D0*x2-0.9375D0*x4)/delta
6295 c------------------------------------------------------------------------------
6296 subroutine splinthet(theti,delta,ss,ssder)
6297 implicit real*8 (a-h,o-z)
6298 include 'DIMENSIONS'
6299 include 'DIMENSIONS.ZSCOPT'
6300 include 'COMMON.VAR'
6301 include 'COMMON.GEO'
6304 if (theti.gt.pipol) then
6305 call gcont(theti,thetup,1.0d0,delta,ss,ssder)
6307 call gcont(-theti,-thetlow,1.0d0,delta,ss,ssder)
6312 c------------------------------------------------------------------------------
6313 subroutine spline1(x,x0,delta,f0,f1,fprim0,f,fprim)
6315 double precision x,x0,delta,f0,f1,fprim0,f,fprim
6316 double precision ksi,ksi2,ksi3,a1,a2,a3
6317 a1=fprim0*delta/(f1-f0)
6323 f=f0+(f1-f0)*ksi*(a1+ksi*(a2+a3*ksi))
6324 fprim=(f1-f0)/delta*(a1+ksi*(2*a2+3*ksi*a3))
6327 c------------------------------------------------------------------------------
6328 subroutine spline2(x,x0,delta,f0x,f1x,fprim0x,fx)
6330 double precision x,x0,delta,f0x,f1x,fprim0x,fx
6331 double precision ksi,ksi2,ksi3,a1,a2,a3
6336 a2=3*(f1x-f0x)-2*fprim0x*delta
6337 a3=fprim0x*delta-2*(f1x-f0x)
6338 fx=f0x+a1*ksi+a2*ksi2+a3*ksi3
6341 C-----------------------------------------------------------------------------
6343 C-----------------------------------------------------------------------------
6344 subroutine etor(etors,fact)
6345 implicit real*8 (a-h,o-z)
6346 include 'DIMENSIONS'
6347 include 'DIMENSIONS.ZSCOPT'
6348 include 'COMMON.VAR'
6349 include 'COMMON.GEO'
6350 include 'COMMON.LOCAL'
6351 include 'COMMON.TORSION'
6352 include 'COMMON.INTERACT'
6353 include 'COMMON.DERIV'
6354 include 'COMMON.CHAIN'
6355 include 'COMMON.NAMES'
6356 include 'COMMON.IOUNITS'
6357 include 'COMMON.FFIELD'
6358 include 'COMMON.TORCNSTR'
6360 C Set lprn=.true. for debugging
6364 do i=iphi_start,iphi_end
6365 if (itype(i-2).eq.ntyp1 .or. itype(i-1).eq.ntyp1
6366 & .or. itype(i).eq.ntyp1) cycle
6367 itori=itortyp(itype(i-2))
6368 itori1=itortyp(itype(i-1))
6371 C Proline-Proline pair is a special case...
6372 if (itori.eq.3 .and. itori1.eq.3) then
6373 if (phii.gt.-dwapi3) then
6375 fac=1.0D0/(1.0D0-cosphi)
6376 etorsi=v1(1,3,3)*fac
6377 etorsi=etorsi+etorsi
6378 etors=etors+etorsi-v1(1,3,3)
6379 gloci=gloci-3*fac*etorsi*dsin(3*phii)
6382 v1ij=v1(j+1,itori,itori1)
6383 v2ij=v2(j+1,itori,itori1)
6386 etors=etors+v1ij*cosphi+v2ij*sinphi+dabs(v1ij)+dabs(v2ij)
6387 gloci=gloci+j*(v2ij*cosphi-v1ij*sinphi)
6391 v1ij=v1(j,itori,itori1)
6392 v2ij=v2(j,itori,itori1)
6395 etors=etors+v1ij*cosphi+v2ij*sinphi+dabs(v1ij)+dabs(v2ij)
6396 gloci=gloci+j*(v2ij*cosphi-v1ij*sinphi)
6400 & write (iout,'(2(a3,2x,i3,2x),2i3,6f8.3/26x,6f8.3/)')
6401 & restyp(itype(i-2)),i-2,restyp(itype(i-1)),i-1,itori,itori1,
6402 & (v1(j,itori,itori1),j=1,6),(v2(j,itori,itori1),j=1,6)
6403 gloc(i-3,icg)=gloc(i-3,icg)+wtor*fact*gloci
6404 c write (iout,*) 'i=',i,' gloc=',gloc(i-3,icg)
6408 c------------------------------------------------------------------------------
6410 subroutine etor(etors,fact)
6411 implicit real*8 (a-h,o-z)
6412 include 'DIMENSIONS'
6413 include 'DIMENSIONS.ZSCOPT'
6414 include 'COMMON.VAR'
6415 include 'COMMON.GEO'
6416 include 'COMMON.LOCAL'
6417 include 'COMMON.TORSION'
6418 include 'COMMON.INTERACT'
6419 include 'COMMON.DERIV'
6420 include 'COMMON.CHAIN'
6421 include 'COMMON.NAMES'
6422 include 'COMMON.IOUNITS'
6423 include 'COMMON.FFIELD'
6424 include 'COMMON.TORCNSTR'
6426 C Set lprn=.true. for debugging
6430 do i=iphi_start,iphi_end
6432 if (itype(i-2).eq.ntyp1.or. itype(i-1).eq.ntyp1
6433 & .or. itype(i).eq.ntyp1 .or. itype(i-3).eq.ntyp1) cycle
6434 C if (itype(i-2).eq.ntyp1 .or. itype(i-1).eq.ntyp1
6435 C & .or. itype(i).eq.ntyp1) cycle
6436 if (itel(i-2).eq.0 .or. itel(i-1).eq.0) goto 1215
6437 if (iabs(itype(i)).eq.20) then
6442 itori=itortyp(itype(i-2))
6443 itori1=itortyp(itype(i-1))
6446 C Regular cosine and sine terms
6447 do j=1,nterm(itori,itori1,iblock)
6448 v1ij=v1(j,itori,itori1,iblock)
6449 v2ij=v2(j,itori,itori1,iblock)
6452 etors=etors+v1ij*cosphi+v2ij*sinphi
6453 gloci=gloci+j*(v2ij*cosphi-v1ij*sinphi)
6457 C E = SUM ----------------------------------- - v1
6458 C [v2 cos(phi/2)+v3 sin(phi/2)]^2 + 1
6460 cosphi=dcos(0.5d0*phii)
6461 sinphi=dsin(0.5d0*phii)
6462 do j=1,nlor(itori,itori1,iblock)
6463 vl1ij=vlor1(j,itori,itori1)
6464 vl2ij=vlor2(j,itori,itori1)
6465 vl3ij=vlor3(j,itori,itori1)
6466 pom=vl2ij*cosphi+vl3ij*sinphi
6467 pom1=1.0d0/(pom*pom+1.0d0)
6468 etors=etors+vl1ij*pom1
6469 c if (energy_dec) etors_ii=etors_ii+
6472 gloci=gloci+vl1ij*(vl3ij*cosphi-vl2ij*sinphi)*pom
6474 C Subtract the constant term
6475 etors=etors-v0(itori,itori1,iblock)
6477 & write (iout,'(2(a3,2x,i3,2x),2i3,6f8.3/26x,6f8.3/)')
6478 & restyp(itype(i-2)),i-2,restyp(itype(i-1)),i-1,itori,itori1,
6479 & (v1(j,itori,itori1,1),j=1,6),(v2(j,itori,itori1,1),j=1,6)
6480 gloc(i-3,icg)=gloc(i-3,icg)+wtor*fact*gloci
6481 c write (iout,*) 'i=',i,' gloc=',gloc(i-3,icg)
6486 c----------------------------------------------------------------------------
6487 subroutine etor_d(etors_d,fact2)
6488 C 6/23/01 Compute double torsional energy
6489 implicit real*8 (a-h,o-z)
6490 include 'DIMENSIONS'
6491 include 'DIMENSIONS.ZSCOPT'
6492 include 'COMMON.VAR'
6493 include 'COMMON.GEO'
6494 include 'COMMON.LOCAL'
6495 include 'COMMON.TORSION'
6496 include 'COMMON.INTERACT'
6497 include 'COMMON.DERIV'
6498 include 'COMMON.CHAIN'
6499 include 'COMMON.NAMES'
6500 include 'COMMON.IOUNITS'
6501 include 'COMMON.FFIELD'
6502 include 'COMMON.TORCNSTR'
6504 C Set lprn=.true. for debugging
6508 do i=iphi_start,iphi_end-1
6510 C if (itype(i-2).eq.ntyp1.or. itype(i-1).eq.ntyp1
6511 C & .or. itype(i).eq.ntyp1 .or. itype(i+1).eq.ntyp1) cycle
6512 if ((itype(i-2).eq.ntyp1).or.itype(i-3).eq.ntyp1.or.
6513 & (itype(i-1).eq.ntyp1).or.(itype(i).eq.ntyp1).or.
6514 & (itype(i+1).eq.ntyp1)) cycle
6515 if (itel(i-2).eq.0 .or. itel(i-1).eq.0 .or. itel(i).eq.0)
6517 itori=itortyp(itype(i-2))
6518 itori1=itortyp(itype(i-1))
6519 itori2=itortyp(itype(i))
6525 if (iabs(itype(i+1)).eq.20) iblock=2
6526 C Regular cosine and sine terms
6527 do j=1,ntermd_1(itori,itori1,itori2,iblock)
6528 v1cij=v1c(1,j,itori,itori1,itori2,iblock)
6529 v1sij=v1s(1,j,itori,itori1,itori2,iblock)
6530 v2cij=v1c(2,j,itori,itori1,itori2,iblock)
6531 v2sij=v1s(2,j,itori,itori1,itori2,iblock)
6532 cosphi1=dcos(j*phii)
6533 sinphi1=dsin(j*phii)
6534 cosphi2=dcos(j*phii1)
6535 sinphi2=dsin(j*phii1)
6536 etors_d=etors_d+v1cij*cosphi1+v1sij*sinphi1+
6537 & v2cij*cosphi2+v2sij*sinphi2
6538 gloci1=gloci1+j*(v1sij*cosphi1-v1cij*sinphi1)
6539 gloci2=gloci2+j*(v2sij*cosphi2-v2cij*sinphi2)
6541 do k=2,ntermd_2(itori,itori1,itori2,iblock)
6543 v1cdij = v2c(k,l,itori,itori1,itori2,iblock)
6544 v2cdij = v2c(l,k,itori,itori1,itori2,iblock)
6545 v1sdij = v2s(k,l,itori,itori1,itori2,iblock)
6546 v2sdij = v2s(l,k,itori,itori1,itori2,iblock)
6547 cosphi1p2=dcos(l*phii+(k-l)*phii1)
6548 cosphi1m2=dcos(l*phii-(k-l)*phii1)
6549 sinphi1p2=dsin(l*phii+(k-l)*phii1)
6550 sinphi1m2=dsin(l*phii-(k-l)*phii1)
6551 etors_d=etors_d+v1cdij*cosphi1p2+v2cdij*cosphi1m2+
6552 & v1sdij*sinphi1p2+v2sdij*sinphi1m2
6553 gloci1=gloci1+l*(v1sdij*cosphi1p2+v2sdij*cosphi1m2
6554 & -v1cdij*sinphi1p2-v2cdij*sinphi1m2)
6555 gloci2=gloci2+(k-l)*(v1sdij*cosphi1p2-v2sdij*cosphi1m2
6556 & -v1cdij*sinphi1p2+v2cdij*sinphi1m2)
6559 gloc(i-3,icg)=gloc(i-3,icg)+wtor_d*fact2*gloci1
6560 gloc(i-2,icg)=gloc(i-2,icg)+wtor_d*fact2*gloci2
6566 c---------------------------------------------------------------------------
6567 C The rigorous attempt to derive energy function
6568 subroutine etor_kcc(etors,fact)
6569 implicit real*8 (a-h,o-z)
6570 include 'DIMENSIONS'
6571 include 'DIMENSIONS.ZSCOPT'
6572 include 'COMMON.VAR'
6573 include 'COMMON.GEO'
6574 include 'COMMON.LOCAL'
6575 include 'COMMON.TORSION'
6576 include 'COMMON.INTERACT'
6577 include 'COMMON.DERIV'
6578 include 'COMMON.CHAIN'
6579 include 'COMMON.NAMES'
6580 include 'COMMON.IOUNITS'
6581 include 'COMMON.FFIELD'
6582 include 'COMMON.TORCNSTR'
6583 include 'COMMON.CONTROL'
6584 double precision c1(0:maxval_kcc),c2(0:maxval_kcc)
6586 c double precision thybt1(maxtermkcc),thybt2(maxtermkcc)
6587 C Set lprn=.true. for debugging
6590 C print *,"wchodze kcc"
6591 if (lprn) write (iout,*) "etor_kcc tor_mode",tor_mode
6593 do i=iphi_start,iphi_end
6594 C ANY TWO ARE DUMMY ATOMS in row CYCLE
6595 c if (((itype(i-3).eq.ntyp1).and.(itype(i-2).eq.ntyp1)).or.
6596 c & ((itype(i-2).eq.ntyp1).and.(itype(i-1).eq.ntyp1)) .or.
6597 c & ((itype(i-1).eq.ntyp1).and.(itype(i).eq.ntyp1))) cycle
6598 if (itype(i-2).eq.ntyp1.or. itype(i-1).eq.ntyp1
6599 & .or. itype(i).eq.ntyp1 .or. itype(i-3).eq.ntyp1) cycle
6600 itori=itortyp(itype(i-2))
6601 itori1=itortyp(itype(i-1))
6606 C to avoid multiple devision by 2
6607 c theti22=0.5d0*theta(i)
6608 C theta 12 is the theta_1 /2
6609 C theta 22 is theta_2 /2
6610 c theti12=0.5d0*theta(i-1)
6611 C and appropriate sinus function
6612 sinthet1=dsin(theta(i-1))
6613 sinthet2=dsin(theta(i))
6614 costhet1=dcos(theta(i-1))
6615 costhet2=dcos(theta(i))
6616 C to speed up lets store its mutliplication
6617 sint1t2=sinthet2*sinthet1
6619 C \sum_{i=1}^n (sin(theta_1) * sin(theta_2))^n * (c_n* cos(n*gamma)
6620 C +d_n*sin(n*gamma)) *
6621 C \sum_{i=1}^m (1+a_m*Tb_m(cos(theta_1 /2))+b_m*Tb_m(cos(theta_2 /2)))
6622 C we have two sum 1) Non-Chebyshev which is with n and gamma
6623 nval=nterm_kcc_Tb(itori,itori1)
6629 c1(j)=c1(j-1)*costhet1
6630 c2(j)=c2(j-1)*costhet2
6633 do j=1,nterm_kcc(itori,itori1)
6637 sint1t2n=sint1t2n*sint1t2
6643 sumvalc=sumvalc+v1_kcc(l,k,j,itori1,itori)*c1(k)*c2(l)
6644 gradvalct1=gradvalct1+
6645 & (k-1)*v1_kcc(l,k,j,itori1,itori)*c1(k-1)*c2(l)
6646 gradvalct2=gradvalct2+
6647 & (l-1)*v1_kcc(l,k,j,itori1,itori)*c1(k)*c2(l-1)
6650 gradvalct1=-gradvalct1*sinthet1
6651 gradvalct2=-gradvalct2*sinthet2
6657 sumvals=sumvals+v2_kcc(l,k,j,itori1,itori)*c1(k)*c2(l)
6658 gradvalst1=gradvalst1+
6659 & (k-1)*v2_kcc(l,k,j,itori1,itori)*c1(k-1)*c2(l)
6660 gradvalst2=gradvalst2+
6661 & (l-1)*v2_kcc(l,k,j,itori1,itori)*c1(k)*c2(l-1)
6664 gradvalst1=-gradvalst1*sinthet1
6665 gradvalst2=-gradvalst2*sinthet2
6666 etori=etori+sint1t2n*(sumvalc*cosphi+sumvals*sinphi)
6667 C glocig is the gradient local i site in gamma
6668 glocig=glocig+j*sint1t2n*(sumvals*cosphi-sumvalc*sinphi)
6669 C now gradient over theta_1
6670 glocit1=glocit1+sint1t2n*(gradvalct1*cosphi+gradvalst1*sinphi)
6671 & +j*sint1t2n1*costhet1*sinthet2*(sumvalc*cosphi+sumvals*sinphi)
6672 glocit2=glocit2+sint1t2n*(gradvalct2*cosphi+gradvalst2*sinphi)
6673 & +j*sint1t2n1*sinthet1*costhet2*(sumvalc*cosphi+sumvals*sinphi)
6676 C derivative over gamma
6677 gloc(i-3,icg)=gloc(i-3,icg)+wtor*glocig
6678 C derivative over theta1
6679 gloc(nphi+i-3,icg)=gloc(nphi+i-3,icg)+wtor*glocit1
6680 C now derivative over theta2
6681 gloc(nphi+i-2,icg)=gloc(nphi+i-2,icg)+wtor*glocit2
6683 write (iout,*) i-2,i-1,itype(i-2),itype(i-1),itori,itori1,
6684 & theta(i-1)*rad2deg,theta(i)*rad2deg,phii*rad2deg,etori
6685 write (iout,*) "c1",(c1(k),k=0,nval),
6686 & " c2",(c2(k),k=0,nval)
6687 write (iout,*) "sumvalc",sumvalc," sumvals",sumvals
6692 c---------------------------------------------------------------------------------------------
6693 subroutine etor_constr(edihcnstr)
6694 implicit real*8 (a-h,o-z)
6695 include 'DIMENSIONS'
6696 include 'DIMENSIONS.ZSCOPT'
6697 include 'COMMON.VAR'
6698 include 'COMMON.GEO'
6699 include 'COMMON.LOCAL'
6700 include 'COMMON.TORSION'
6701 include 'COMMON.INTERACT'
6702 include 'COMMON.DERIV'
6703 include 'COMMON.CHAIN'
6704 include 'COMMON.NAMES'
6705 include 'COMMON.IOUNITS'
6706 include 'COMMON.FFIELD'
6707 include 'COMMON.TORCNSTR'
6708 include 'COMMON.CONTROL'
6709 ! 6/20/98 - dihedral angle constraints
6711 c do i=1,ndih_constr
6712 c write (iout,*) "idihconstr_start",idihconstr_start,
6713 c & " idihconstr_end",idihconstr_end
6715 if (raw_psipred) then
6716 do i=idihconstr_start,idihconstr_end
6717 itori=idih_constr(i)
6719 gaudih_i=vpsipred(1,i)
6723 cos_i=(1.0d0-dcos(phii-phibound(j,i)))/s**2
6724 dexpcos_i=dexp(-cos_i*cos_i)
6725 gaudih_i=gaudih_i+vpsipred(j+1,i)*dexpcos_i
6726 gauder_i=gauder_i-2*vpsipred(j+1,i)*dsin(phii-phibound(j,i))
6727 & *cos_i*dexpcos_i/s**2
6729 edihcnstr=edihcnstr-wdihc*dlog(gaudih_i)
6730 gloc(itori-3,icg)=gloc(itori-3,icg)-wdihc*gauder_i/gaudih_i
6732 & write (iout,'(2i5,f8.3,f8.5,2(f8.5,2f8.3),f10.5)')
6733 & i,itori,phii*rad2deg,vpsipred(1,i),vpsipred(2,i),
6734 & phibound(1,i)*rad2deg,sdihed(1,i)*rad2deg,vpsipred(3,i),
6735 & phibound(2,i)*rad2deg,sdihed(2,i)*rad2deg,
6736 & -wdihc*dlog(gaudih_i)
6740 do i=idihconstr_start,idihconstr_end
6741 itori=idih_constr(i)
6743 difi=pinorm(phii-phi0(i))
6744 if (difi.gt.drange(i)) then
6746 edihcnstr=edihcnstr+0.25d0*ftors(i)*difi**4
6747 gloc(itori-3,icg)=gloc(itori-3,icg)+ftors(i)*difi**3
6748 else if (difi.lt.-drange(i)) then
6750 edihcnstr=edihcnstr+0.25d0*ftors(i)*difi**4
6751 gloc(itori-3,icg)=gloc(itori-3,icg)+ftors(i)*difi**3
6759 c write (iout,*) "ETOR_CONSTR",edihcnstr
6762 c----------------------------------------------------------------------------
6763 C The rigorous attempt to derive energy function
6764 subroutine ebend_kcc(etheta)
6766 implicit real*8 (a-h,o-z)
6767 include 'DIMENSIONS'
6768 include 'DIMENSIONS.ZSCOPT'
6769 include 'COMMON.VAR'
6770 include 'COMMON.GEO'
6771 include 'COMMON.LOCAL'
6772 include 'COMMON.TORSION'
6773 include 'COMMON.INTERACT'
6774 include 'COMMON.DERIV'
6775 include 'COMMON.CHAIN'
6776 include 'COMMON.NAMES'
6777 include 'COMMON.IOUNITS'
6778 include 'COMMON.FFIELD'
6779 include 'COMMON.TORCNSTR'
6780 include 'COMMON.CONTROL'
6782 double precision thybt1(maxang_kcc)
6783 C Set lprn=.true. for debugging
6786 C print *,"wchodze kcc"
6787 if (lprn) write (iout,*) "ebend_kcc tor_mode",tor_mode
6789 do i=ithet_start,ithet_end
6790 c print *,i,itype(i-1),itype(i),itype(i-2)
6791 if ((itype(i-1).eq.ntyp1).or.itype(i-2).eq.ntyp1
6792 & .or.itype(i).eq.ntyp1) cycle
6793 iti=iabs(itortyp(itype(i-1)))
6794 sinthet=dsin(theta(i))
6795 costhet=dcos(theta(i))
6796 do j=1,nbend_kcc_Tb(iti)
6797 thybt1(j)=v1bend_chyb(j,iti)
6799 sumth1thyb=v1bend_chyb(0,iti)+
6800 & tschebyshev(1,nbend_kcc_Tb(iti),thybt1(1),costhet)
6801 if (lprn) write (iout,*) i-1,itype(i-1),iti,theta(i)*rad2deg,
6803 ihelp=nbend_kcc_Tb(iti)-1
6804 gradthybt1=gradtschebyshev(0,ihelp,thybt1(1),costhet)
6805 etheta=etheta+sumth1thyb
6806 C print *,sumth1thyb,gradthybt1,sinthet*(-0.5d0)
6807 gloc(nphi+i-2,icg)=gloc(nphi+i-2,icg)-wang*gradthybt1*sinthet
6811 c-------------------------------------------------------------------------------------
6812 subroutine etheta_constr(ethetacnstr)
6814 implicit real*8 (a-h,o-z)
6815 include 'DIMENSIONS'
6816 include 'DIMENSIONS.ZSCOPT'
6817 include 'COMMON.VAR'
6818 include 'COMMON.GEO'
6819 include 'COMMON.LOCAL'
6820 include 'COMMON.TORSION'
6821 include 'COMMON.INTERACT'
6822 include 'COMMON.DERIV'
6823 include 'COMMON.CHAIN'
6824 include 'COMMON.NAMES'
6825 include 'COMMON.IOUNITS'
6826 include 'COMMON.FFIELD'
6827 include 'COMMON.TORCNSTR'
6828 include 'COMMON.CONTROL'
6830 C print *,ithetaconstr_start,ithetaconstr_end,"TU"
6831 do i=ithetaconstr_start,ithetaconstr_end
6832 itheta=itheta_constr(i)
6833 thetiii=theta(itheta)
6834 difi=pinorm(thetiii-theta_constr0(i))
6835 if (difi.gt.theta_drange(i)) then
6836 difi=difi-theta_drange(i)
6837 ethetacnstr=ethetacnstr+0.25d0*for_thet_constr(i)*difi**4
6838 gloc(itheta+nphi-2,icg)=gloc(itheta+nphi-2,icg)
6839 & +for_thet_constr(i)*difi**3
6840 else if (difi.lt.-drange(i)) then
6842 ethetacnstr=ethetacnstr+0.25d0*for_thet_constr(i)*difi**4
6843 gloc(itheta+nphi-2,icg)=gloc(itheta+nphi-2,icg)
6844 & +for_thet_constr(i)*difi**3
6848 if (energy_dec) then
6849 write (iout,'(a6,2i5,4f8.3,2e14.5)') "ethetc",
6850 & i,itheta,rad2deg*thetiii,
6851 & rad2deg*theta_constr0(i), rad2deg*theta_drange(i),
6852 & rad2deg*difi,0.25d0*for_thet_constr(i)*difi**4,
6853 & gloc(itheta+nphi-2,icg)
6858 c------------------------------------------------------------------------------
6859 c------------------------------------------------------------------------------
6860 subroutine eback_sc_corr(esccor)
6861 c 7/21/2007 Correlations between the backbone-local and side-chain-local
6862 c conformational states; temporarily implemented as differences
6863 c between UNRES torsional potentials (dependent on three types of
6864 c residues) and the torsional potentials dependent on all 20 types
6865 c of residues computed from AM1 energy surfaces of terminally-blocked
6866 c amino-acid residues.
6867 implicit real*8 (a-h,o-z)
6868 include 'DIMENSIONS'
6869 include 'DIMENSIONS.ZSCOPT'
6870 include 'COMMON.VAR'
6871 include 'COMMON.GEO'
6872 include 'COMMON.LOCAL'
6873 include 'COMMON.TORSION'
6874 include 'COMMON.SCCOR'
6875 include 'COMMON.INTERACT'
6876 include 'COMMON.DERIV'
6877 include 'COMMON.CHAIN'
6878 include 'COMMON.NAMES'
6879 include 'COMMON.IOUNITS'
6880 include 'COMMON.FFIELD'
6881 include 'COMMON.CONTROL'
6883 C Set lprn=.true. for debugging
6886 c write (iout,*) "EBACK_SC_COR",iphi_start,iphi_end,nterm_sccor
6888 do i=itau_start,itau_end
6889 if ((itype(i-2).eq.ntyp1).or.(itype(i-1).eq.ntyp1)) cycle
6891 isccori=isccortyp(itype(i-2))
6892 isccori1=isccortyp(itype(i-1))
6894 do intertyp=1,3 !intertyp
6895 cc Added 09 May 2012 (Adasko)
6896 cc Intertyp means interaction type of backbone mainchain correlation:
6897 c 1 = SC...Ca...Ca...Ca
6898 c 2 = Ca...Ca...Ca...SC
6899 c 3 = SC...Ca...Ca...SCi
6901 if (((intertyp.eq.3).and.((itype(i-2).eq.10).or.
6902 & (itype(i-1).eq.10).or.(itype(i-2).eq.ntyp1).or.
6903 & (itype(i-1).eq.ntyp1)))
6904 & .or. ((intertyp.eq.1).and.((itype(i-2).eq.10)
6905 & .or.(itype(i-2).eq.ntyp1).or.(itype(i-1).eq.ntyp1)
6906 & .or.(itype(i).eq.ntyp1)))
6907 & .or.((intertyp.eq.2).and.((itype(i-1).eq.10).or.
6908 & (itype(i-1).eq.ntyp1).or.(itype(i-2).eq.ntyp1).or.
6909 & (itype(i-3).eq.ntyp1)))) cycle
6910 if ((intertyp.eq.2).and.(i.eq.4).and.(itype(1).eq.ntyp1)) cycle
6911 if ((intertyp.eq.1).and.(i.eq.nres).and.(itype(nres).eq.ntyp1))
6913 do j=1,nterm_sccor(isccori,isccori1)
6914 v1ij=v1sccor(j,intertyp,isccori,isccori1)
6915 v2ij=v2sccor(j,intertyp,isccori,isccori1)
6916 cosphi=dcos(j*tauangle(intertyp,i))
6917 sinphi=dsin(j*tauangle(intertyp,i))
6918 esccor=esccor+v1ij*cosphi+v2ij*sinphi
6919 gloci=gloci+j*(v2ij*cosphi-v1ij*sinphi)
6921 C write (iout,*)"EBACK_SC_COR",esccor,i
6922 c write (iout,*) "EBACK_SC_COR",i,v1ij*cosphi+v2ij*sinphi,intertyp,
6923 c & nterm_sccor(isccori,isccori1),isccori,isccori1
6924 c gloc_sc(intertyp,i-3,icg)=gloc_sc(intertyp,i-3,icg)+wsccor*gloci
6926 & write (iout,'(2(a3,2x,i3,2x),2i3,6f8.3/26x,6f8.3/)')
6927 & restyp(itype(i-2)),i-2,restyp(itype(i-1)),i-1,itori,itori1,
6928 & (v1sccor(j,1,itori,itori1),j=1,6)
6929 & ,(v2sccor(j,1,itori,itori1),j=1,6)
6930 c gsccor_loc(i-3)=gloci
6935 c------------------------------------------------------------------------------
6936 subroutine multibody(ecorr)
6937 C This subroutine calculates multi-body contributions to energy following
6938 C the idea of Skolnick et al. If side chains I and J make a contact and
6939 C at the same time side chains I+1 and J+1 make a contact, an extra
6940 C contribution equal to sqrt(eps(i,j)*eps(i+1,j+1)) is added.
6941 implicit real*8 (a-h,o-z)
6942 include 'DIMENSIONS'
6943 include 'COMMON.IOUNITS'
6944 include 'COMMON.DERIV'
6945 include 'COMMON.INTERACT'
6946 include 'COMMON.CONTACTS'
6947 double precision gx(3),gx1(3)
6950 C Set lprn=.true. for debugging
6954 write (iout,'(a)') 'Contact function values:'
6956 write (iout,'(i2,20(1x,i2,f10.5))')
6957 & i,(jcont(j,i),facont(j,i),j=1,num_cont(i))
6972 num_conti=num_cont(i)
6973 num_conti1=num_cont(i1)
6978 if (j1.eq.j+ishift .or. j1.eq.j-ishift) then
6979 cd write(iout,*)'i=',i,' j=',j,' i1=',i1,' j1=',j1,
6980 cd & ' ishift=',ishift
6981 C Contacts I--J and I+ISHIFT--J+-ISHIFT1 occur simultaneously.
6982 C The system gains extra energy.
6983 ecorr=ecorr+esccorr(i,j,i1,j1,jj,kk)
6984 endif ! j1==j+-ishift
6993 c------------------------------------------------------------------------------
6994 double precision function esccorr(i,j,k,l,jj,kk)
6995 implicit real*8 (a-h,o-z)
6996 include 'DIMENSIONS'
6997 include 'COMMON.IOUNITS'
6998 include 'COMMON.DERIV'
6999 include 'COMMON.INTERACT'
7000 include 'COMMON.CONTACTS'
7001 double precision gx(3),gx1(3)
7006 cd write (iout,'(4i5,3f10.5)') i,j,k,l,eij,ekl,-eij*ekl
7007 C Calculate the multi-body contribution to energy.
7008 C Calculate multi-body contributions to the gradient.
7009 cd write (iout,'(2(2i3,3f10.5))')i,j,(gacont(m,jj,i),m=1,3),
7010 cd & k,l,(gacont(m,kk,k),m=1,3)
7012 gx(m) =ekl*gacont(m,jj,i)
7013 gx1(m)=eij*gacont(m,kk,k)
7014 gradxorr(m,i)=gradxorr(m,i)-gx(m)
7015 gradxorr(m,j)=gradxorr(m,j)+gx(m)
7016 gradxorr(m,k)=gradxorr(m,k)-gx1(m)
7017 gradxorr(m,l)=gradxorr(m,l)+gx1(m)
7021 gradcorr(ll,m)=gradcorr(ll,m)+gx(ll)
7026 gradcorr(ll,m)=gradcorr(ll,m)+gx1(ll)
7032 c------------------------------------------------------------------------------
7033 subroutine multibody_hb(ecorr,ecorr5,ecorr6,n_corr,n_corr1)
7034 C This subroutine calculates multi-body contributions to hydrogen-bonding
7035 implicit real*8 (a-h,o-z)
7036 include 'DIMENSIONS'
7037 include 'DIMENSIONS.ZSCOPT'
7038 include 'COMMON.IOUNITS'
7039 include 'COMMON.FFIELD'
7040 include 'COMMON.DERIV'
7041 include 'COMMON.INTERACT'
7042 include 'COMMON.CONTACTS'
7043 double precision gx(3),gx1(3)
7046 C Set lprn=.true. for debugging
7049 write (iout,'(a)') 'Contact function values:'
7051 write (iout,'(2i3,50(1x,i2,f5.2))')
7052 & i,num_cont_hb(i),(jcont_hb(j,i),facont_hb(j,i),
7053 & j=1,num_cont_hb(i))
7057 C Remove the loop below after debugging !!!
7064 C Calculate the local-electrostatic correlation terms
7065 do i=iatel_s,iatel_e+1
7067 num_conti=num_cont_hb(i)
7068 num_conti1=num_cont_hb(i+1)
7073 c write (iout,*) 'i=',i,' j=',j,' i1=',i1,' j1=',j1,
7074 c & ' jj=',jj,' kk=',kk
7075 if (j1.eq.j+1 .or. j1.eq.j-1) then
7076 C Contacts I-J and (I+1)-(J+1) or (I+1)-(J-1) occur simultaneously.
7077 C The system gains extra energy.
7078 ecorr=ecorr+ehbcorr(i,j,i+1,j1,jj,kk,0.72D0,0.32D0)
7080 else if (j1.eq.j) then
7081 C Contacts I-J and I-(J+1) occur simultaneously.
7082 C The system loses extra energy.
7083 c ecorr=ecorr+ehbcorr(i,j,i+1,j,jj,kk,0.60D0,-0.40D0)
7088 c write (iout,*) 'i=',i,' j=',j,' i1=',i1,' j1=',j1,
7089 c & ' jj=',jj,' kk=',kk
7091 C Contacts I-J and (I+1)-J occur simultaneously.
7092 C The system loses extra energy.
7093 c ecorr=ecorr+ehbcorr(i,j,i,j+1,jj,kk,0.60D0,-0.40D0)
7100 c------------------------------------------------------------------------------
7101 subroutine multibody_eello(ecorr,ecorr5,ecorr6,eturn6,n_corr,
7103 C This subroutine calculates multi-body contributions to hydrogen-bonding
7104 implicit real*8 (a-h,o-z)
7105 include 'DIMENSIONS'
7106 include 'DIMENSIONS.ZSCOPT'
7107 include 'COMMON.IOUNITS'
7111 include 'COMMON.FFIELD'
7112 include 'COMMON.DERIV'
7113 include 'COMMON.LOCAL'
7114 include 'COMMON.INTERACT'
7115 include 'COMMON.CONTACTS'
7116 include 'COMMON.CHAIN'
7117 include 'COMMON.CONTROL'
7118 include 'COMMON.SHIELD'
7119 double precision gx(3),gx1(3)
7120 integer num_cont_hb_old(maxres)
7122 double precision eello4,eello5,eelo6,eello_turn6
7123 external eello4,eello5,eello6,eello_turn6
7124 C Set lprn=.true. for debugging
7128 write (iout,'(a)') 'Contact function values:'
7130 write (iout,'(2i3,50(1x,i2,5f6.3))')
7131 & i,num_cont_hb(i),(jcont_hb(j,i),d_cont(j,i),
7132 & ((a_chuj(ll,kk,j,i),ll=1,2),kk=1,2),j=1,num_cont_hb(i))
7138 C Remove the loop below after debugging !!!
7145 C Calculate the dipole-dipole interaction energies
7146 if (wcorr6.gt.0.0d0 .or. wturn6.gt.0.0d0) then
7147 do i=iatel_s,iatel_e+1
7148 num_conti=num_cont_hb(i)
7157 C Calculate the local-electrostatic correlation terms
7158 c write (iout,*) "gradcorr5 in eello5 before loop"
7160 c write (iout,'(i5,3f10.5)')
7161 c & iii,(gradcorr5(jjj,iii),jjj=1,3)
7163 do i=min0(iatel_s,iturn4_start),max0(iatel_e+1,iturn3_end+1)
7164 c write (iout,*) "corr loop i",i
7166 num_conti=num_cont_hb(i)
7167 num_conti1=num_cont_hb(i+1)
7174 c write (iout,*) 'i=',i,' j=',j,' i1=',i1,' j1=',j1,
7175 c & ' jj=',jj,' kk=',kk
7176 c if (j1.eq.j+1 .or. j1.eq.j-1) then
7177 if ((j.gt.0 .and. j1.gt.0 .or. j.gt.0 .and. j1.lt.0
7178 & .or. j.lt.0 .and. j1.gt.0) .and.
7179 & (jp1.eq.jp+1 .or. jp1.eq.jp-1)) then
7180 C Contacts I-J and (I+1)-(J+1) or (I+1)-(J-1) occur simultaneously.
7181 C The system gains extra energy.
7183 sqd1=dsqrt(d_cont(jj,i))
7184 sqd2=dsqrt(d_cont(kk,i1))
7185 sred_geom = sqd1*sqd2
7186 IF (sred_geom.lt.cutoff_corr) THEN
7187 call gcont(sred_geom,r0_corr,1.0D0,delt_corr,
7189 cd write (iout,*) 'i=',i,' j=',jp,' i1=',i1,' j1=',jp1,
7190 cd & ' jj=',jj,' kk=',kk
7191 fac_prim1=0.5d0*sqd2/sqd1*fprimcont
7192 fac_prim2=0.5d0*sqd1/sqd2*fprimcont
7194 g_contij(l,1)=fac_prim1*grij_hb_cont(l,jj,i)
7195 g_contij(l,2)=fac_prim2*grij_hb_cont(l,kk,i1)
7198 cd write (iout,*) 'sred_geom=',sred_geom,
7199 cd & ' ekont=',ekont,' fprim=',fprimcont,
7200 cd & ' fac_prim1',fac_prim1,' fac_prim2',fac_prim2
7201 cd write (iout,*) "g_contij",g_contij
7202 cd write (iout,*) "grij_hb_cont i",grij_hb_cont(:,jj,i)
7203 cd write (iout,*) "grij_hb_cont i1",grij_hb_cont(:,jj,i1)
7204 call calc_eello(i,jp,i+1,jp1,jj,kk)
7205 if (wcorr4.gt.0.0d0)
7206 & ecorr=ecorr+eello4(i,jp,i+1,jp1,jj,kk)
7207 CC & *fac_shield(i)**2*fac_shield(j)**2
7208 if (energy_dec.and.wcorr4.gt.0.0d0)
7209 1 write (iout,'(a6,4i5,0pf7.3)')
7210 2 'ecorr4',i,j,i+1,j1,eello4(i,jp,i+1,jp1,jj,kk)
7211 c write (iout,*) "gradcorr5 before eello5"
7213 c write (iout,'(i5,3f10.5)')
7214 c & iii,(gradcorr5(jjj,iii),jjj=1,3)
7216 if (wcorr5.gt.0.0d0)
7217 & ecorr5=ecorr5+eello5(i,jp,i+1,jp1,jj,kk)
7218 c write (iout,*) "gradcorr5 after eello5"
7220 c write (iout,'(i5,3f10.5)')
7221 c & iii,(gradcorr5(jjj,iii),jjj=1,3)
7223 if (energy_dec.and.wcorr5.gt.0.0d0)
7224 1 write (iout,'(a6,4i5,0pf7.3)')
7225 2 'ecorr5',i,j,i+1,j1,eello5(i,jp,i+1,jp1,jj,kk)
7226 cd write(2,*)'wcorr6',wcorr6,' wturn6',wturn6
7227 cd write(2,*)'ijkl',i,jp,i+1,jp1
7228 if (wcorr6.gt.0.0d0 .and. (jp.ne.i+4 .or. jp1.ne.i+3
7229 & .or. wturn6.eq.0.0d0))then
7230 cd write (iout,*) '******ecorr6: i,j,i+1,j1',i,j,i+1,j1
7231 ecorr6=ecorr6+eello6(i,jp,i+1,jp1,jj,kk)
7232 if (energy_dec) write (iout,'(a6,4i5,0pf7.3)')
7233 1 'ecorr6',i,j,i+1,j1,eello6(i,jp,i+1,jp1,jj,kk)
7234 cd write (iout,*) 'ecorr',ecorr,' ecorr5=',ecorr5,
7235 cd & 'ecorr6=',ecorr6
7236 cd write (iout,'(4e15.5)') sred_geom,
7237 cd & dabs(eello4(i,jp,i+1,jp1,jj,kk)),
7238 cd & dabs(eello5(i,jp,i+1,jp1,jj,kk)),
7239 cd & dabs(eello6(i,jp,i+1,jp1,jj,kk))
7240 else if (wturn6.gt.0.0d0
7241 & .and. (jp.eq.i+4 .and. jp1.eq.i+3)) then
7242 cd write (iout,*) '******eturn6: i,j,i+1,j1',i,jip,i+1,jp1
7243 eturn6=eturn6+eello_turn6(i,jj,kk)
7244 if (energy_dec) write (iout,'(a6,4i5,0pf7.3)')
7245 1 'eturn6',i,j,i+1,j1,eello_turn6(i,jj,kk)
7246 cd write (2,*) 'multibody_eello:eturn6',eturn6
7255 num_cont_hb(i)=num_cont_hb_old(i)
7257 c write (iout,*) "gradcorr5 in eello5"
7259 c write (iout,'(i5,3f10.5)')
7260 c & iii,(gradcorr5(jjj,iii),jjj=1,3)
7264 c------------------------------------------------------------------------------
7265 double precision function ehbcorr(i,j,k,l,jj,kk,coeffp,coeffm)
7266 implicit real*8 (a-h,o-z)
7267 include 'DIMENSIONS'
7268 include 'DIMENSIONS.ZSCOPT'
7269 include 'COMMON.IOUNITS'
7270 include 'COMMON.DERIV'
7271 include 'COMMON.INTERACT'
7272 include 'COMMON.CONTACTS'
7273 include 'COMMON.SHIELD'
7274 include 'COMMON.CONTROL'
7275 double precision gx(3),gx1(3)
7278 C print *,"wchodze",fac_shield(i),shield_mode
7286 ees=-(coeffp*ees0pij*ees0pkl+coeffm*ees0mij*ees0mkl)
7288 C & fac_shield(i)**2*fac_shield(j)**2
7289 cd ees=-(coeffp*ees0pkl+coeffm*ees0mkl)
7290 C Following 4 lines for diagnostics.
7295 c write (iout,'(2(a,2i3,a,f10.5,a,2f10.5),a,f10.5,a,$)')
7296 c & 'Contacts ',i,j,
7297 c & ' eij',eij,' eesij',ees0pij,ees0mij,' and ',k,l
7298 c & ,' fcont ',ekl,' eeskl',ees0pkl,ees0mkl,' energy=',ekont*ees,
7300 C Calculate the multi-body contribution to energy.
7301 C ecorr=ecorr+ekont*ees
7302 C Calculate multi-body contributions to the gradient.
7303 coeffpees0pij=coeffp*ees0pij
7304 coeffmees0mij=coeffm*ees0mij
7305 coeffpees0pkl=coeffp*ees0pkl
7306 coeffmees0mkl=coeffm*ees0mkl
7308 cgrad ghalfi=ees*ekl*gacont_hbr(ll,jj,i)
7309 gradcorr(ll,i)=gradcorr(ll,i)!+0.5d0*ghalfi
7310 & -ekont*(coeffpees0pkl*gacontp_hb1(ll,jj,i)+
7311 & coeffmees0mkl*gacontm_hb1(ll,jj,i))
7312 gradcorr(ll,j)=gradcorr(ll,j)!+0.5d0*ghalfi
7313 & -ekont*(coeffpees0pkl*gacontp_hb2(ll,jj,i)+
7314 & coeffmees0mkl*gacontm_hb2(ll,jj,i))
7315 cgrad ghalfk=ees*eij*gacont_hbr(ll,kk,k)
7316 gradcorr(ll,k)=gradcorr(ll,k)!+0.5d0*ghalfk
7317 & -ekont*(coeffpees0pij*gacontp_hb1(ll,kk,k)+
7318 & coeffmees0mij*gacontm_hb1(ll,kk,k))
7319 gradcorr(ll,l)=gradcorr(ll,l)!+0.5d0*ghalfk
7320 & -ekont*(coeffpees0pij*gacontp_hb2(ll,kk,k)+
7321 & coeffmees0mij*gacontm_hb2(ll,kk,k))
7322 gradlongij=ees*ekl*gacont_hbr(ll,jj,i)-
7323 & ekont*(coeffpees0pkl*gacontp_hb3(ll,jj,i)+
7324 & coeffmees0mkl*gacontm_hb3(ll,jj,i))
7325 gradcorr_long(ll,j)=gradcorr_long(ll,j)+gradlongij
7326 gradcorr_long(ll,i)=gradcorr_long(ll,i)-gradlongij
7327 gradlongkl=ees*eij*gacont_hbr(ll,kk,k)-
7328 & ekont*(coeffpees0pij*gacontp_hb3(ll,kk,k)+
7329 & coeffmees0mij*gacontm_hb3(ll,kk,k))
7330 gradcorr_long(ll,l)=gradcorr_long(ll,l)+gradlongkl
7331 gradcorr_long(ll,k)=gradcorr_long(ll,k)-gradlongkl
7332 c write (iout,'(2f10.5,2x,$)') gradlongij,gradlongkl
7337 cgrad gradcorr(ll,m)=gradcorr(ll,m)+
7338 cgrad & ees*ekl*gacont_hbr(ll,jj,i)-
7339 cgrad & ekont*(coeffp*ees0pkl*gacontp_hb3(ll,jj,i)+
7340 cgrad & coeffm*ees0mkl*gacontm_hb3(ll,jj,i))
7345 cgrad gradcorr(ll,m)=gradcorr(ll,m)+
7346 cgrad & ees*eij*gacont_hbr(ll,kk,k)-
7347 cgrad & ekont*(coeffp*ees0pij*gacontp_hb3(ll,kk,k)+
7348 cgrad & coeffm*ees0mij*gacontm_hb3(ll,kk,k))
7351 c write (iout,*) "ehbcorr",ekont*ees
7352 C print *,ekont,ees,i,k
7354 C now gradient over shielding
7356 if (shield_mode.gt.0) then
7359 C print *,i,j,fac_shield(i),fac_shield(j),
7360 C &fac_shield(k),fac_shield(l)
7361 if ((fac_shield(i).gt.0).and.(fac_shield(j).gt.0).and.
7362 & (fac_shield(k).gt.0).and.(fac_shield(l).gt.0)) then
7363 do ilist=1,ishield_list(i)
7364 iresshield=shield_list(ilist,i)
7366 rlocshield=grad_shield_side(m,ilist,i)*ehbcorr/fac_shield(i)
7368 gshieldx_ec(m,iresshield)=gshieldx_ec(m,iresshield)+
7370 & +grad_shield_loc(m,ilist,i)*ehbcorr/fac_shield(i)
7371 gshieldc_ec(m,iresshield-1)=gshieldc_ec(m,iresshield-1)
7375 do ilist=1,ishield_list(j)
7376 iresshield=shield_list(ilist,j)
7378 rlocshield=grad_shield_side(m,ilist,j)*ehbcorr/fac_shield(j)
7380 gshieldx_ec(m,iresshield)=gshieldx_ec(m,iresshield)+
7382 & +grad_shield_loc(m,ilist,j)*ehbcorr/fac_shield(j)
7383 gshieldc_ec(m,iresshield-1)=gshieldc_ec(m,iresshield-1)
7388 do ilist=1,ishield_list(k)
7389 iresshield=shield_list(ilist,k)
7391 rlocshield=grad_shield_side(m,ilist,k)*ehbcorr/fac_shield(k)
7393 gshieldx_ec(m,iresshield)=gshieldx_ec(m,iresshield)+
7395 & +grad_shield_loc(m,ilist,k)*ehbcorr/fac_shield(k)
7396 gshieldc_ec(m,iresshield-1)=gshieldc_ec(m,iresshield-1)
7400 do ilist=1,ishield_list(l)
7401 iresshield=shield_list(ilist,l)
7403 rlocshield=grad_shield_side(m,ilist,l)*ehbcorr/fac_shield(l)
7405 gshieldx_ec(m,iresshield)=gshieldx_ec(m,iresshield)+
7407 & +grad_shield_loc(m,ilist,l)*ehbcorr/fac_shield(l)
7408 gshieldc_ec(m,iresshield-1)=gshieldc_ec(m,iresshield-1)
7412 C print *,gshieldx(m,iresshield)
7414 gshieldc_ec(m,i)=gshieldc_ec(m,i)+
7415 & grad_shield(m,i)*ehbcorr/fac_shield(i)
7416 gshieldc_ec(m,j)=gshieldc_ec(m,j)+
7417 & grad_shield(m,j)*ehbcorr/fac_shield(j)
7418 gshieldc_ec(m,i-1)=gshieldc_ec(m,i-1)+
7419 & grad_shield(m,i)*ehbcorr/fac_shield(i)
7420 gshieldc_ec(m,j-1)=gshieldc_ec(m,j-1)+
7421 & grad_shield(m,j)*ehbcorr/fac_shield(j)
7423 gshieldc_ec(m,k)=gshieldc_ec(m,k)+
7424 & grad_shield(m,k)*ehbcorr/fac_shield(k)
7425 gshieldc_ec(m,l)=gshieldc_ec(m,l)+
7426 & grad_shield(m,l)*ehbcorr/fac_shield(l)
7427 gshieldc_ec(m,k-1)=gshieldc_ec(m,k-1)+
7428 & grad_shield(m,k)*ehbcorr/fac_shield(k)
7429 gshieldc_ec(m,l-1)=gshieldc_ec(m,l-1)+
7430 & grad_shield(m,l)*ehbcorr/fac_shield(l)
7438 C---------------------------------------------------------------------------
7439 subroutine dipole(i,j,jj)
7440 implicit real*8 (a-h,o-z)
7441 include 'DIMENSIONS'
7442 include 'DIMENSIONS.ZSCOPT'
7443 include 'COMMON.IOUNITS'
7444 include 'COMMON.CHAIN'
7445 include 'COMMON.FFIELD'
7446 include 'COMMON.DERIV'
7447 include 'COMMON.INTERACT'
7448 include 'COMMON.CONTACTS'
7449 include 'COMMON.TORSION'
7450 include 'COMMON.VAR'
7451 include 'COMMON.GEO'
7452 dimension dipi(2,2),dipj(2,2),dipderi(2),dipderj(2),auxvec(2),
7454 iti1 = itortyp(itype(i+1))
7455 if (j.lt.nres-1) then
7456 itj1 = itype2loc(itype(j+1))
7461 dipi(iii,1)=Ub2(iii,i)
7462 dipderi(iii)=Ub2der(iii,i)
7463 dipi(iii,2)=b1(iii,i+1)
7464 dipj(iii,1)=Ub2(iii,j)
7465 dipderj(iii)=Ub2der(iii,j)
7466 dipj(iii,2)=b1(iii,j+1)
7470 call matvec2(a_chuj(1,1,jj,i),dipj(1,iii),auxvec(1))
7473 dip(kkk,jj,i)=scalar2(dipi(1,jjj),auxvec(1))
7480 call matvec2(a_chuj_der(1,1,lll,kkk,jj,i),dipj(1,iii),
7484 dipderx(lll,kkk,mmm,jj,i)=scalar2(dipi(1,jjj),auxvec(1))
7489 call transpose2(a_chuj(1,1,jj,i),auxmat(1,1))
7490 call matvec2(auxmat(1,1),dipderi(1),auxvec(1))
7492 dipderg(iii,jj,i)=scalar2(auxvec(1),dipj(1,iii))
7494 call matvec2(a_chuj(1,1,jj,i),dipderj(1),auxvec(1))
7496 dipderg(iii+2,jj,i)=scalar2(auxvec(1),dipi(1,iii))
7501 C---------------------------------------------------------------------------
7502 subroutine calc_eello(i,j,k,l,jj,kk)
7504 C This subroutine computes matrices and vectors needed to calculate
7505 C the fourth-, fifth-, and sixth-order local-electrostatic terms.
7507 implicit real*8 (a-h,o-z)
7508 include 'DIMENSIONS'
7509 include 'DIMENSIONS.ZSCOPT'
7510 include 'COMMON.IOUNITS'
7511 include 'COMMON.CHAIN'
7512 include 'COMMON.DERIV'
7513 include 'COMMON.INTERACT'
7514 include 'COMMON.CONTACTS'
7515 include 'COMMON.TORSION'
7516 include 'COMMON.VAR'
7517 include 'COMMON.GEO'
7518 include 'COMMON.FFIELD'
7519 double precision aa1(2,2),aa2(2,2),aa1t(2,2),aa2t(2,2),
7520 & aa1tder(2,2,3,5),aa2tder(2,2,3,5),auxmat(2,2)
7523 cd write (iout,*) 'calc_eello: i=',i,' j=',j,' k=',k,' l=',l,
7524 cd & ' jj=',jj,' kk=',kk
7525 cd if (i.ne.2 .or. j.ne.4 .or. k.ne.3 .or. l.ne.5) return
7526 cd write (iout,*) "a_chujij",((a_chuj(iii,jjj,jj,i),iii=1,2),jjj=1,2)
7527 cd write (iout,*) "a_chujkl",((a_chuj(iii,jjj,kk,k),iii=1,2),jjj=1,2)
7530 aa1(iii,jjj)=a_chuj(iii,jjj,jj,i)
7531 aa2(iii,jjj)=a_chuj(iii,jjj,kk,k)
7534 call transpose2(aa1(1,1),aa1t(1,1))
7535 call transpose2(aa2(1,1),aa2t(1,1))
7538 call transpose2(a_chuj_der(1,1,lll,kkk,jj,i),
7539 & aa1tder(1,1,lll,kkk))
7540 call transpose2(a_chuj_der(1,1,lll,kkk,kk,k),
7541 & aa2tder(1,1,lll,kkk))
7545 C parallel orientation of the two CA-CA-CA frames.
7547 iti=itype2loc(itype(i))
7551 itk1=itype2loc(itype(k+1))
7552 itj=itype2loc(itype(j))
7553 if (l.lt.nres-1) then
7554 itl1=itype2loc(itype(l+1))
7558 C A1 kernel(j+1) A2T
7560 cd write (iout,'(3f10.5,5x,3f10.5)')
7561 cd & (EUg(iii,jjj,k),jjj=1,2),(EUg(iii,jjj,l),jjj=1,2)
7563 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
7564 & aa2tder(1,1,1,1),1,.false.,EUg(1,1,l),EUgder(1,1,l),
7565 & AEA(1,1,1),AEAderg(1,1,1),AEAderx(1,1,1,1,1,1))
7566 C Following matrices are needed only for 6-th order cumulants
7567 IF (wcorr6.gt.0.0d0) THEN
7568 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
7569 & aa2tder(1,1,1,1),1,.false.,EUgC(1,1,l),EUgCder(1,1,l),
7570 & AECA(1,1,1),AECAderg(1,1,1),AECAderx(1,1,1,1,1,1))
7571 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
7572 & aa2tder(1,1,1,1),2,.false.,Ug2DtEUg(1,1,l),
7573 & Ug2DtEUgder(1,1,1,l),ADtEA(1,1,1),ADtEAderg(1,1,1,1),
7574 & ADtEAderx(1,1,1,1,1,1))
7576 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
7577 & aa2tder(1,1,1,1),2,.false.,DtUg2EUg(1,1,l),
7578 & DtUg2EUgder(1,1,1,l),ADtEA1(1,1,1),ADtEA1derg(1,1,1,1),
7579 & ADtEA1derx(1,1,1,1,1,1))
7581 C End 6-th order cumulants
7584 cd write (2,*) 'In calc_eello6'
7586 cd write (2,*) 'iii=',iii
7588 cd write (2,*) 'kkk=',kkk
7590 cd write (2,'(3(2f10.5),5x)')
7591 cd & ((ADtEA1derx(jjj,mmm,lll,kkk,iii,1),mmm=1,2),lll=1,3)
7596 call transpose2(EUgder(1,1,k),auxmat(1,1))
7597 call matmat2(auxmat(1,1),AEA(1,1,1),EAEAderg(1,1,1,1))
7598 call transpose2(EUg(1,1,k),auxmat(1,1))
7599 call matmat2(auxmat(1,1),AEA(1,1,1),EAEA(1,1,1))
7600 call matmat2(auxmat(1,1),AEAderg(1,1,1),EAEAderg(1,1,2,1))
7604 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,1),
7605 & EAEAderx(1,1,lll,kkk,iii,1))
7609 C A1T kernel(i+1) A2
7610 call kernel(aa1t(1,1),aa2(1,1),aa1tder(1,1,1,1),
7611 & a_chuj_der(1,1,1,1,kk,k),1,.false.,EUg(1,1,k),EUgder(1,1,k),
7612 & AEA(1,1,2),AEAderg(1,1,2),AEAderx(1,1,1,1,1,2))
7613 C Following matrices are needed only for 6-th order cumulants
7614 IF (wcorr6.gt.0.0d0) THEN
7615 call kernel(aa1t(1,1),aa2(1,1),aa1tder(1,1,1,1),
7616 & a_chuj_der(1,1,1,1,kk,k),1,.false.,EUgC(1,1,k),EUgCder(1,1,k),
7617 & AECA(1,1,2),AECAderg(1,1,2),AECAderx(1,1,1,1,1,2))
7618 call kernel(aa1t(1,1),aa2(1,1),aa1tder(1,1,1,1),
7619 & a_chuj_der(1,1,1,1,kk,k),2,.false.,Ug2DtEUg(1,1,k),
7620 & Ug2DtEUgder(1,1,1,k),ADtEA(1,1,2),ADtEAderg(1,1,1,2),
7621 & ADtEAderx(1,1,1,1,1,2))
7622 call kernel(aa1t(1,1),aa2(1,1),aa1tder(1,1,1,1),
7623 & a_chuj_der(1,1,1,1,kk,k),2,.false.,DtUg2EUg(1,1,k),
7624 & DtUg2EUgder(1,1,1,k),ADtEA1(1,1,2),ADtEA1derg(1,1,1,2),
7625 & ADtEA1derx(1,1,1,1,1,2))
7627 C End 6-th order cumulants
7628 call transpose2(EUgder(1,1,l),auxmat(1,1))
7629 call matmat2(auxmat(1,1),AEA(1,1,2),EAEAderg(1,1,1,2))
7630 call transpose2(EUg(1,1,l),auxmat(1,1))
7631 call matmat2(auxmat(1,1),AEA(1,1,2),EAEA(1,1,2))
7632 call matmat2(auxmat(1,1),AEAderg(1,1,2),EAEAderg(1,1,2,2))
7636 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,2),
7637 & EAEAderx(1,1,lll,kkk,iii,2))
7642 C Calculate the vectors and their derivatives in virtual-bond dihedral angles.
7643 C They are needed only when the fifth- or the sixth-order cumulants are
7645 IF (wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0) THEN
7646 call transpose2(AEA(1,1,1),auxmat(1,1))
7647 call matvec2(auxmat(1,1),b1(1,i),AEAb1(1,1,1))
7648 call matvec2(auxmat(1,1),Ub2(1,i),AEAb2(1,1,1))
7649 call matvec2(auxmat(1,1),Ub2der(1,i),AEAb2derg(1,2,1,1))
7650 call transpose2(AEAderg(1,1,1),auxmat(1,1))
7651 call matvec2(auxmat(1,1),b1(1,i),AEAb1derg(1,1,1))
7652 call matvec2(auxmat(1,1),Ub2(1,i),AEAb2derg(1,1,1,1))
7653 call matvec2(AEA(1,1,1),b1(1,k+1),AEAb1(1,2,1))
7654 call matvec2(AEAderg(1,1,1),b1(1,k+1),AEAb1derg(1,2,1))
7655 call matvec2(AEA(1,1,1),Ub2(1,k+1),AEAb2(1,2,1))
7656 call matvec2(AEAderg(1,1,1),Ub2(1,k+1),AEAb2derg(1,1,2,1))
7657 call matvec2(AEA(1,1,1),Ub2der(1,k+1),AEAb2derg(1,2,2,1))
7658 call transpose2(AEA(1,1,2),auxmat(1,1))
7659 call matvec2(auxmat(1,1),b1(1,j),AEAb1(1,1,2))
7660 call matvec2(auxmat(1,1),Ub2(1,j),AEAb2(1,1,2))
7661 call matvec2(auxmat(1,1),Ub2der(1,j),AEAb2derg(1,2,1,2))
7662 call transpose2(AEAderg(1,1,2),auxmat(1,1))
7663 call matvec2(auxmat(1,1),b1(1,j),AEAb1derg(1,1,2))
7664 call matvec2(auxmat(1,1),Ub2(1,j),AEAb2derg(1,1,1,2))
7665 call matvec2(AEA(1,1,2),b1(1,l+1),AEAb1(1,2,2))
7666 call matvec2(AEAderg(1,1,2),b1(1,l+1),AEAb1derg(1,2,2))
7667 call matvec2(AEA(1,1,2),Ub2(1,l+1),AEAb2(1,2,2))
7668 call matvec2(AEAderg(1,1,2),Ub2(1,l+1),AEAb2derg(1,1,2,2))
7669 call matvec2(AEA(1,1,2),Ub2der(1,l+1),AEAb2derg(1,2,2,2))
7670 C Calculate the Cartesian derivatives of the vectors.
7674 call transpose2(AEAderx(1,1,lll,kkk,iii,1),auxmat(1,1))
7675 call matvec2(auxmat(1,1),b1(1,i),
7676 & AEAb1derx(1,lll,kkk,iii,1,1))
7677 call matvec2(auxmat(1,1),Ub2(1,i),
7678 & AEAb2derx(1,lll,kkk,iii,1,1))
7679 call matvec2(AEAderx(1,1,lll,kkk,iii,1),b1(1,k+1),
7680 & AEAb1derx(1,lll,kkk,iii,2,1))
7681 call matvec2(AEAderx(1,1,lll,kkk,iii,1),Ub2(1,k+1),
7682 & AEAb2derx(1,lll,kkk,iii,2,1))
7683 call transpose2(AEAderx(1,1,lll,kkk,iii,2),auxmat(1,1))
7684 call matvec2(auxmat(1,1),b1(1,j),
7685 & AEAb1derx(1,lll,kkk,iii,1,2))
7686 call matvec2(auxmat(1,1),Ub2(1,j),
7687 & AEAb2derx(1,lll,kkk,iii,1,2))
7688 call matvec2(AEAderx(1,1,lll,kkk,iii,2),b1(1,l+1),
7689 & AEAb1derx(1,lll,kkk,iii,2,2))
7690 call matvec2(AEAderx(1,1,lll,kkk,iii,2),Ub2(1,l+1),
7691 & AEAb2derx(1,lll,kkk,iii,2,2))
7698 C Antiparallel orientation of the two CA-CA-CA frames.
7700 iti=itype2loc(itype(i))
7704 itk1=itype2loc(itype(k+1))
7705 itl=itype2loc(itype(l))
7706 itj=itype2loc(itype(j))
7707 if (j.lt.nres-1) then
7708 itj1=itype2loc(itype(j+1))
7712 C A2 kernel(j-1)T A1T
7713 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
7714 & aa2tder(1,1,1,1),1,.true.,EUg(1,1,j),EUgder(1,1,j),
7715 & AEA(1,1,1),AEAderg(1,1,1),AEAderx(1,1,1,1,1,1))
7716 C Following matrices are needed only for 6-th order cumulants
7717 IF (wcorr6.gt.0.0d0 .or. (wturn6.gt.0.0d0 .and.
7718 & j.eq.i+4 .and. l.eq.i+3)) THEN
7719 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
7720 & aa2tder(1,1,1,1),1,.true.,EUgC(1,1,j),EUgCder(1,1,j),
7721 & AECA(1,1,1),AECAderg(1,1,1),AECAderx(1,1,1,1,1,1))
7722 call kernel(aa2(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
7723 & aa2tder(1,1,1,1),2,.true.,Ug2DtEUg(1,1,j),
7724 & Ug2DtEUgder(1,1,1,j),ADtEA(1,1,1),ADtEAderg(1,1,1,1),
7725 & ADtEAderx(1,1,1,1,1,1))
7726 call kernel(aa1(1,1),aa2t(1,1),a_chuj_der(1,1,1,1,jj,i),
7727 & aa2tder(1,1,1,1),2,.true.,DtUg2EUg(1,1,j),
7728 & DtUg2EUgder(1,1,1,j),ADtEA1(1,1,1),ADtEA1derg(1,1,1,1),
7729 & ADtEA1derx(1,1,1,1,1,1))
7731 C End 6-th order cumulants
7732 call transpose2(EUgder(1,1,k),auxmat(1,1))
7733 call matmat2(auxmat(1,1),AEA(1,1,1),EAEAderg(1,1,1,1))
7734 call transpose2(EUg(1,1,k),auxmat(1,1))
7735 call matmat2(auxmat(1,1),AEA(1,1,1),EAEA(1,1,1))
7736 call matmat2(auxmat(1,1),AEAderg(1,1,1),EAEAderg(1,1,2,1))
7740 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,1),
7741 & EAEAderx(1,1,lll,kkk,iii,1))
7745 C A2T kernel(i+1)T A1
7746 call kernel(aa2t(1,1),aa1(1,1),aa2tder(1,1,1,1),
7747 & a_chuj_der(1,1,1,1,jj,i),1,.true.,EUg(1,1,k),EUgder(1,1,k),
7748 & AEA(1,1,2),AEAderg(1,1,2),AEAderx(1,1,1,1,1,2))
7749 C Following matrices are needed only for 6-th order cumulants
7750 IF (wcorr6.gt.0.0d0 .or. (wturn6.gt.0.0d0 .and.
7751 & j.eq.i+4 .and. l.eq.i+3)) THEN
7752 call kernel(aa2t(1,1),aa1(1,1),aa2tder(1,1,1,1),
7753 & a_chuj_der(1,1,1,1,jj,i),1,.true.,EUgC(1,1,k),EUgCder(1,1,k),
7754 & AECA(1,1,2),AECAderg(1,1,2),AECAderx(1,1,1,1,1,2))
7755 call kernel(aa2t(1,1),aa1(1,1),aa2tder(1,1,1,1),
7756 & a_chuj_der(1,1,1,1,jj,i),2,.true.,Ug2DtEUg(1,1,k),
7757 & Ug2DtEUgder(1,1,1,k),ADtEA(1,1,2),ADtEAderg(1,1,1,2),
7758 & ADtEAderx(1,1,1,1,1,2))
7759 call kernel(aa2t(1,1),aa1(1,1),aa2tder(1,1,1,1),
7760 & a_chuj_der(1,1,1,1,jj,i),2,.true.,DtUg2EUg(1,1,k),
7761 & DtUg2EUgder(1,1,1,k),ADtEA1(1,1,2),ADtEA1derg(1,1,1,2),
7762 & ADtEA1derx(1,1,1,1,1,2))
7764 C End 6-th order cumulants
7765 call transpose2(EUgder(1,1,j),auxmat(1,1))
7766 call matmat2(auxmat(1,1),AEA(1,1,1),EAEAderg(1,1,2,2))
7767 call transpose2(EUg(1,1,j),auxmat(1,1))
7768 call matmat2(auxmat(1,1),AEA(1,1,2),EAEA(1,1,2))
7769 call matmat2(auxmat(1,1),AEAderg(1,1,2),EAEAderg(1,1,2,2))
7773 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,2),
7774 & EAEAderx(1,1,lll,kkk,iii,2))
7779 C Calculate the vectors and their derivatives in virtual-bond dihedral angles.
7780 C They are needed only when the fifth- or the sixth-order cumulants are
7782 IF (wcorr5.gt.0.0d0 .or. wcorr6.gt.0.0d0 .or.
7783 & (wturn6.gt.0.0d0 .and. j.eq.i+4 .and. l.eq.i+3)) THEN
7784 call transpose2(AEA(1,1,1),auxmat(1,1))
7785 call matvec2(auxmat(1,1),b1(1,i),AEAb1(1,1,1))
7786 call matvec2(auxmat(1,1),Ub2(1,i),AEAb2(1,1,1))
7787 call matvec2(auxmat(1,1),Ub2der(1,i),AEAb2derg(1,2,1,1))
7788 call transpose2(AEAderg(1,1,1),auxmat(1,1))
7789 call matvec2(auxmat(1,1),b1(1,i),AEAb1derg(1,1,1))
7790 call matvec2(auxmat(1,1),Ub2(1,i),AEAb2derg(1,1,1,1))
7791 call matvec2(AEA(1,1,1),b1(1,k+1),AEAb1(1,2,1))
7792 call matvec2(AEAderg(1,1,1),b1(1,k+1),AEAb1derg(1,2,1))
7793 call matvec2(AEA(1,1,1),Ub2(1,k+1),AEAb2(1,2,1))
7794 call matvec2(AEAderg(1,1,1),Ub2(1,k+1),AEAb2derg(1,1,2,1))
7795 call matvec2(AEA(1,1,1),Ub2der(1,k+1),AEAb2derg(1,2,2,1))
7796 call transpose2(AEA(1,1,2),auxmat(1,1))
7797 call matvec2(auxmat(1,1),b1(1,j+1),AEAb1(1,1,2))
7798 call matvec2(auxmat(1,1),Ub2(1,l),AEAb2(1,1,2))
7799 call matvec2(auxmat(1,1),Ub2der(1,l),AEAb2derg(1,2,1,2))
7800 call transpose2(AEAderg(1,1,2),auxmat(1,1))
7801 call matvec2(auxmat(1,1),b1(1,l),AEAb1(1,1,2))
7802 call matvec2(auxmat(1,1),Ub2(1,l),AEAb2derg(1,1,1,2))
7803 call matvec2(AEA(1,1,2),b1(1,j+1),AEAb1(1,2,2))
7804 call matvec2(AEAderg(1,1,2),b1(1,j+1),AEAb1derg(1,2,2))
7805 call matvec2(AEA(1,1,2),Ub2(1,j),AEAb2(1,2,2))
7806 call matvec2(AEAderg(1,1,2),Ub2(1,j),AEAb2derg(1,1,2,2))
7807 call matvec2(AEA(1,1,2),Ub2der(1,j),AEAb2derg(1,2,2,2))
7808 C Calculate the Cartesian derivatives of the vectors.
7812 call transpose2(AEAderx(1,1,lll,kkk,iii,1),auxmat(1,1))
7813 call matvec2(auxmat(1,1),b1(1,i),
7814 & AEAb1derx(1,lll,kkk,iii,1,1))
7815 call matvec2(auxmat(1,1),Ub2(1,i),
7816 & AEAb2derx(1,lll,kkk,iii,1,1))
7817 call matvec2(AEAderx(1,1,lll,kkk,iii,1),b1(1,k+1),
7818 & AEAb1derx(1,lll,kkk,iii,2,1))
7819 call matvec2(AEAderx(1,1,lll,kkk,iii,1),Ub2(1,k+1),
7820 & AEAb2derx(1,lll,kkk,iii,2,1))
7821 call transpose2(AEAderx(1,1,lll,kkk,iii,2),auxmat(1,1))
7822 call matvec2(auxmat(1,1),b1(1,l),
7823 & AEAb1derx(1,lll,kkk,iii,1,2))
7824 call matvec2(auxmat(1,1),Ub2(1,l),
7825 & AEAb2derx(1,lll,kkk,iii,1,2))
7826 call matvec2(AEAderx(1,1,lll,kkk,iii,2),b1(1,j+1),
7827 & AEAb1derx(1,lll,kkk,iii,2,2))
7828 call matvec2(AEAderx(1,1,lll,kkk,iii,2),Ub2(1,j),
7829 & AEAb2derx(1,lll,kkk,iii,2,2))
7838 C---------------------------------------------------------------------------
7839 subroutine kernel(aa1,aa2t,aa1derx,aa2tderx,nderg,transp,
7840 & KK,KKderg,AKA,AKAderg,AKAderx)
7844 double precision aa1(2,2),aa2t(2,2),aa1derx(2,2,3,5),
7845 & aa2tderx(2,2,3,5),KK(2,2),KKderg(2,2,nderg),AKA(2,2),
7846 & AKAderg(2,2,nderg),AKAderx(2,2,3,5,2)
7851 call prodmat3(aa1(1,1),aa2t(1,1),KK(1,1),transp,AKA(1,1))
7853 call prodmat3(aa1(1,1),aa2t(1,1),KKderg(1,1,iii),transp,
7856 cd if (lprn) write (2,*) 'In kernel'
7858 cd if (lprn) write (2,*) 'kkk=',kkk
7860 call prodmat3(aa1derx(1,1,lll,kkk),aa2t(1,1),
7861 & KK(1,1),transp,AKAderx(1,1,lll,kkk,1))
7863 cd write (2,*) 'lll=',lll
7864 cd write (2,*) 'iii=1'
7866 cd write (2,'(3(2f10.5),5x)')
7867 cd & (AKAderx(jjj,mmm,lll,kkk,1),mmm=1,2)
7870 call prodmat3(aa1(1,1),aa2tderx(1,1,lll,kkk),
7871 & KK(1,1),transp,AKAderx(1,1,lll,kkk,2))
7873 cd write (2,*) 'lll=',lll
7874 cd write (2,*) 'iii=2'
7876 cd write (2,'(3(2f10.5),5x)')
7877 cd & (AKAderx(jjj,mmm,lll,kkk,2),mmm=1,2)
7884 C---------------------------------------------------------------------------
7885 double precision function eello4(i,j,k,l,jj,kk)
7886 implicit real*8 (a-h,o-z)
7887 include 'DIMENSIONS'
7888 include 'DIMENSIONS.ZSCOPT'
7889 include 'COMMON.IOUNITS'
7890 include 'COMMON.CHAIN'
7891 include 'COMMON.DERIV'
7892 include 'COMMON.INTERACT'
7893 include 'COMMON.CONTACTS'
7894 include 'COMMON.TORSION'
7895 include 'COMMON.VAR'
7896 include 'COMMON.GEO'
7897 double precision pizda(2,2),ggg1(3),ggg2(3)
7898 cd if (i.ne.1 .or. j.ne.5 .or. k.ne.2 .or.l.ne.4) then
7902 cd print *,'eello4:',i,j,k,l,jj,kk
7903 cd write (2,*) 'i',i,' j',j,' k',k,' l',l
7904 cd call checkint4(i,j,k,l,jj,kk,eel4_num)
7905 cold eij=facont_hb(jj,i)
7906 cold ekl=facont_hb(kk,k)
7908 eel4=-EAEA(1,1,1)-EAEA(2,2,1)
7910 cd eel41=-EAEA(1,1,2)-EAEA(2,2,2)
7911 gcorr_loc(k-1)=gcorr_loc(k-1)
7912 & -ekont*(EAEAderg(1,1,1,1)+EAEAderg(2,2,1,1))
7914 gcorr_loc(l-1)=gcorr_loc(l-1)
7915 & -ekont*(EAEAderg(1,1,2,1)+EAEAderg(2,2,2,1))
7917 gcorr_loc(j-1)=gcorr_loc(j-1)
7918 & -ekont*(EAEAderg(1,1,2,1)+EAEAderg(2,2,2,1))
7923 derx(lll,kkk,iii)=-EAEAderx(1,1,lll,kkk,iii,1)
7924 & -EAEAderx(2,2,lll,kkk,iii,1)
7925 cd derx(lll,kkk,iii)=0.0d0
7929 cd gcorr_loc(l-1)=0.0d0
7930 cd gcorr_loc(j-1)=0.0d0
7931 cd gcorr_loc(k-1)=0.0d0
7933 cd write (iout,*)'Contacts have occurred for peptide groups',
7934 cd & i,j,' fcont:',eij,' eij',' and ',k,l,
7935 cd & ' fcont ',ekl,' eel4=',eel4,' eel4_num',16*eel4_num
7936 if (j.lt.nres-1) then
7943 if (l.lt.nres-1) then
7951 cgrad ggg1(ll)=eel4*g_contij(ll,1)
7952 cgrad ggg2(ll)=eel4*g_contij(ll,2)
7953 glongij=eel4*g_contij(ll,1)+ekont*derx(ll,1,1)
7954 glongkl=eel4*g_contij(ll,2)+ekont*derx(ll,1,2)
7955 cgrad ghalf=0.5d0*ggg1(ll)
7956 gradcorr(ll,i)=gradcorr(ll,i)+ekont*derx(ll,2,1)
7957 gradcorr(ll,i+1)=gradcorr(ll,i+1)+ekont*derx(ll,3,1)
7958 gradcorr(ll,j)=gradcorr(ll,j)+ekont*derx(ll,4,1)
7959 gradcorr(ll,j1)=gradcorr(ll,j1)+ekont*derx(ll,5,1)
7960 gradcorr_long(ll,j)=gradcorr_long(ll,j)+glongij
7961 gradcorr_long(ll,i)=gradcorr_long(ll,i)-glongij
7962 cgrad ghalf=0.5d0*ggg2(ll)
7963 gradcorr(ll,k)=gradcorr(ll,k)+ekont*derx(ll,2,2)
7964 gradcorr(ll,k+1)=gradcorr(ll,k+1)+ekont*derx(ll,3,2)
7965 gradcorr(ll,l)=gradcorr(ll,l)+ekont*derx(ll,4,2)
7966 gradcorr(ll,l1)=gradcorr(ll,l1)+ekont*derx(ll,5,2)
7967 gradcorr_long(ll,l)=gradcorr_long(ll,l)+glongkl
7968 gradcorr_long(ll,k)=gradcorr_long(ll,k)-glongkl
7972 cgrad gradcorr(ll,m)=gradcorr(ll,m)+ggg1(ll)
7977 cgrad gradcorr(ll,m)=gradcorr(ll,m)+ggg2(ll)
7982 cgrad gradcorr(ll,m)=gradcorr(ll,m)+ekont*derx(ll,1,1)
7987 cgrad gradcorr(ll,m)=gradcorr(ll,m)+ekont*derx(ll,1,2)
7991 cd write (2,*) iii,gcorr_loc(iii)
7995 cd write (2,*) 'ekont',ekont
7996 cd write (iout,*) 'eello4',ekont*eel4
7999 C---------------------------------------------------------------------------
8000 double precision function eello5(i,j,k,l,jj,kk)
8001 implicit real*8 (a-h,o-z)
8002 include 'DIMENSIONS'
8003 include 'DIMENSIONS.ZSCOPT'
8004 include 'COMMON.IOUNITS'
8005 include 'COMMON.CHAIN'
8006 include 'COMMON.DERIV'
8007 include 'COMMON.INTERACT'
8008 include 'COMMON.CONTACTS'
8009 include 'COMMON.TORSION'
8010 include 'COMMON.VAR'
8011 include 'COMMON.GEO'
8012 double precision pizda(2,2),auxmat(2,2),auxmat1(2,2),vv(2)
8013 double precision ggg1(3),ggg2(3)
8014 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
8019 C /l\ / \ \ / \ / \ / C
8020 C / \ / \ \ / \ / \ / C
8021 C j| o |l1 | o | o| o | | o |o C
8022 C \ |/k\| |/ \| / |/ \| |/ \| C
8023 C \i/ \ / \ / / \ / \ C
8025 C (I) (II) (III) (IV) C
8027 C eello5_1 eello5_2 eello5_3 eello5_4 C
8029 C Antiparallel chains C
8032 C /j\ / \ \ / \ / \ / C
8033 C / \ / \ \ / \ / \ / C
8034 C j1| o |l | o | o| o | | o |o C
8035 C \ |/k\| |/ \| / |/ \| |/ \| C
8036 C \i/ \ / \ / / \ / \ C
8038 C (I) (II) (III) (IV) C
8040 C eello5_1 eello5_2 eello5_3 eello5_4 C
8042 C o denotes a local interaction, vertical lines an electrostatic interaction. C
8044 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
8045 cd if (i.ne.2 .or. j.ne.6 .or. k.ne.3 .or. l.ne.5) then
8050 cd & 'EELLO5: Contacts have occurred for peptide groups',i,j,
8052 itk=itype2loc(itype(k))
8053 itl=itype2loc(itype(l))
8054 itj=itype2loc(itype(j))
8059 cd call checkint5(i,j,k,l,jj,kk,eel5_1_num,eel5_2_num,
8060 cd & eel5_3_num,eel5_4_num)
8064 derx(lll,kkk,iii)=0.0d0
8068 cd eij=facont_hb(jj,i)
8069 cd ekl=facont_hb(kk,k)
8071 cd write (iout,*)'Contacts have occurred for peptide groups',
8072 cd & i,j,' fcont:',eij,' eij',' and ',k,l
8074 C Contribution from the graph I.
8075 cd write (2,*) 'AEA ',AEA(1,1,1),AEA(2,1,1),AEA(1,2,1),AEA(2,2,1)
8076 cd write (2,*) 'AEAb2',AEAb2(1,1,1),AEAb2(2,1,1)
8077 call transpose2(EUg(1,1,k),auxmat(1,1))
8078 call matmat2(AEA(1,1,1),auxmat(1,1),pizda(1,1))
8079 vv(1)=pizda(1,1)-pizda(2,2)
8080 vv(2)=pizda(1,2)+pizda(2,1)
8081 eello5_1=scalar2(AEAb2(1,1,1),Ub2(1,k))
8082 & +0.5d0*scalar2(vv(1),Dtobr2(1,i))
8084 C Explicit gradient in virtual-dihedral angles.
8085 if (i.gt.1) g_corr5_loc(i-1)=g_corr5_loc(i-1)
8086 & +ekont*(scalar2(AEAb2derg(1,2,1,1),Ub2(1,k))
8087 & +0.5d0*scalar2(vv(1),Dtobr2der(1,i)))
8088 call transpose2(EUgder(1,1,k),auxmat1(1,1))
8089 call matmat2(AEA(1,1,1),auxmat1(1,1),pizda(1,1))
8090 vv(1)=pizda(1,1)-pizda(2,2)
8091 vv(2)=pizda(1,2)+pizda(2,1)
8092 g_corr5_loc(k-1)=g_corr5_loc(k-1)
8093 & +ekont*(scalar2(AEAb2(1,1,1),Ub2der(1,k))
8094 & +0.5d0*scalar2(vv(1),Dtobr2(1,i)))
8095 call matmat2(AEAderg(1,1,1),auxmat(1,1),pizda(1,1))
8096 vv(1)=pizda(1,1)-pizda(2,2)
8097 vv(2)=pizda(1,2)+pizda(2,1)
8099 if (l.lt.nres-1) g_corr5_loc(l-1)=g_corr5_loc(l-1)
8100 & +ekont*(scalar2(AEAb2derg(1,1,1,1),Ub2(1,k))
8101 & +0.5d0*scalar2(vv(1),Dtobr2(1,i)))
8103 if (j.lt.nres-1) g_corr5_loc(j-1)=g_corr5_loc(j-1)
8104 & +ekont*(scalar2(AEAb2derg(1,1,1,1),Ub2(1,k))
8105 & +0.5d0*scalar2(vv(1),Dtobr2(1,i)))
8107 C Cartesian gradient
8111 call matmat2(AEAderx(1,1,lll,kkk,iii,1),auxmat(1,1),
8113 vv(1)=pizda(1,1)-pizda(2,2)
8114 vv(2)=pizda(1,2)+pizda(2,1)
8115 derx(lll,kkk,iii)=derx(lll,kkk,iii)
8116 & +scalar2(AEAb2derx(1,lll,kkk,iii,1,1),Ub2(1,k))
8117 & +0.5d0*scalar2(vv(1),Dtobr2(1,i))
8124 C Contribution from graph II
8125 call transpose2(EE(1,1,k),auxmat(1,1))
8126 call matmat2(auxmat(1,1),AEA(1,1,1),pizda(1,1))
8127 vv(1)=pizda(1,1)+pizda(2,2)
8128 vv(2)=pizda(2,1)-pizda(1,2)
8129 eello5_2=scalar2(AEAb1(1,2,1),b1(1,k))
8130 & -0.5d0*scalar2(vv(1),Ctobr(1,k))
8132 C Explicit gradient in virtual-dihedral angles.
8133 g_corr5_loc(k-1)=g_corr5_loc(k-1)
8134 & -0.5d0*ekont*scalar2(vv(1),Ctobrder(1,k))
8135 call matmat2(auxmat(1,1),AEAderg(1,1,1),pizda(1,1))
8136 vv(1)=pizda(1,1)+pizda(2,2)
8137 vv(2)=pizda(2,1)-pizda(1,2)
8139 g_corr5_loc(l-1)=g_corr5_loc(l-1)
8140 & +ekont*(scalar2(AEAb1derg(1,2,1),b1(1,k))
8141 & -0.5d0*scalar2(vv(1),Ctobr(1,k)))
8143 g_corr5_loc(j-1)=g_corr5_loc(j-1)
8144 & +ekont*(scalar2(AEAb1derg(1,2,1),b1(1,k))
8145 & -0.5d0*scalar2(vv(1),Ctobr(1,k)))
8147 C Cartesian gradient
8151 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,1),
8153 vv(1)=pizda(1,1)+pizda(2,2)
8154 vv(2)=pizda(2,1)-pizda(1,2)
8155 derx(lll,kkk,iii)=derx(lll,kkk,iii)
8156 & +scalar2(AEAb1derx(1,lll,kkk,iii,2,1),b1(1,k))
8157 & -0.5d0*scalar2(vv(1),Ctobr(1,k))
8166 C Parallel orientation
8167 C Contribution from graph III
8168 call transpose2(EUg(1,1,l),auxmat(1,1))
8169 call matmat2(AEA(1,1,2),auxmat(1,1),pizda(1,1))
8170 vv(1)=pizda(1,1)-pizda(2,2)
8171 vv(2)=pizda(1,2)+pizda(2,1)
8172 eello5_3=scalar2(AEAb2(1,1,2),Ub2(1,l))
8173 & +0.5d0*scalar2(vv(1),Dtobr2(1,j))
8175 C Explicit gradient in virtual-dihedral angles.
8176 g_corr5_loc(j-1)=g_corr5_loc(j-1)
8177 & +ekont*(scalar2(AEAb2derg(1,2,1,2),Ub2(1,l))
8178 & +0.5d0*scalar2(vv(1),Dtobr2der(1,j)))
8179 call matmat2(AEAderg(1,1,2),auxmat(1,1),pizda(1,1))
8180 vv(1)=pizda(1,1)-pizda(2,2)
8181 vv(2)=pizda(1,2)+pizda(2,1)
8182 g_corr5_loc(k-1)=g_corr5_loc(k-1)
8183 & +ekont*(scalar2(AEAb2derg(1,1,1,2),Ub2(1,l))
8184 & +0.5d0*scalar2(vv(1),Dtobr2(1,j)))
8185 call transpose2(EUgder(1,1,l),auxmat1(1,1))
8186 call matmat2(AEA(1,1,2),auxmat1(1,1),pizda(1,1))
8187 vv(1)=pizda(1,1)-pizda(2,2)
8188 vv(2)=pizda(1,2)+pizda(2,1)
8189 g_corr5_loc(l-1)=g_corr5_loc(l-1)
8190 & +ekont*(scalar2(AEAb2(1,1,2),Ub2der(1,l))
8191 & +0.5d0*scalar2(vv(1),Dtobr2(1,j)))
8192 C Cartesian gradient
8196 call matmat2(AEAderx(1,1,lll,kkk,iii,2),auxmat(1,1),
8198 vv(1)=pizda(1,1)-pizda(2,2)
8199 vv(2)=pizda(1,2)+pizda(2,1)
8200 derx(lll,kkk,iii)=derx(lll,kkk,iii)
8201 & +scalar2(AEAb2derx(1,lll,kkk,iii,1,2),Ub2(1,l))
8202 & +0.5d0*scalar2(vv(1),Dtobr2(1,j))
8207 C Contribution from graph IV
8209 call transpose2(EE(1,1,l),auxmat(1,1))
8210 call matmat2(auxmat(1,1),AEA(1,1,2),pizda(1,1))
8211 vv(1)=pizda(1,1)+pizda(2,2)
8212 vv(2)=pizda(2,1)-pizda(1,2)
8213 eello5_4=scalar2(AEAb1(1,2,2),b1(1,l))
8214 & -0.5d0*scalar2(vv(1),Ctobr(1,l))
8215 C Explicit gradient in virtual-dihedral angles.
8216 g_corr5_loc(l-1)=g_corr5_loc(l-1)
8217 & -0.5d0*ekont*scalar2(vv(1),Ctobrder(1,l))
8218 call matmat2(auxmat(1,1),AEAderg(1,1,2),pizda(1,1))
8219 vv(1)=pizda(1,1)+pizda(2,2)
8220 vv(2)=pizda(2,1)-pizda(1,2)
8221 g_corr5_loc(k-1)=g_corr5_loc(k-1)
8222 & +ekont*(scalar2(AEAb1derg(1,2,2),b1(1,l))
8223 & -0.5d0*scalar2(vv(1),Ctobr(1,l)))
8224 C Cartesian gradient
8228 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,2),
8230 vv(1)=pizda(1,1)+pizda(2,2)
8231 vv(2)=pizda(2,1)-pizda(1,2)
8232 derx(lll,kkk,iii)=derx(lll,kkk,iii)
8233 & +scalar2(AEAb1derx(1,lll,kkk,iii,2,2),b1(1,l))
8234 & -0.5d0*scalar2(vv(1),Ctobr(1,l))
8240 C Antiparallel orientation
8241 C Contribution from graph III
8243 call transpose2(EUg(1,1,j),auxmat(1,1))
8244 call matmat2(AEA(1,1,2),auxmat(1,1),pizda(1,1))
8245 vv(1)=pizda(1,1)-pizda(2,2)
8246 vv(2)=pizda(1,2)+pizda(2,1)
8247 eello5_3=scalar2(AEAb2(1,1,2),Ub2(1,j))
8248 & +0.5d0*scalar2(vv(1),Dtobr2(1,l))
8250 C Explicit gradient in virtual-dihedral angles.
8251 g_corr5_loc(l-1)=g_corr5_loc(l-1)
8252 & +ekont*(scalar2(AEAb2derg(1,2,1,2),Ub2(1,j))
8253 & +0.5d0*scalar2(vv(1),Dtobr2der(1,l)))
8254 call matmat2(AEAderg(1,1,2),auxmat(1,1),pizda(1,1))
8255 vv(1)=pizda(1,1)-pizda(2,2)
8256 vv(2)=pizda(1,2)+pizda(2,1)
8257 g_corr5_loc(k-1)=g_corr5_loc(k-1)
8258 & +ekont*(scalar2(AEAb2derg(1,1,1,2),Ub2(1,j))
8259 & +0.5d0*scalar2(vv(1),Dtobr2(1,l)))
8260 call transpose2(EUgder(1,1,j),auxmat1(1,1))
8261 call matmat2(AEA(1,1,2),auxmat1(1,1),pizda(1,1))
8262 vv(1)=pizda(1,1)-pizda(2,2)
8263 vv(2)=pizda(1,2)+pizda(2,1)
8264 g_corr5_loc(j-1)=g_corr5_loc(j-1)
8265 & +ekont*(scalar2(AEAb2(1,1,2),Ub2der(1,j))
8266 & +0.5d0*scalar2(vv(1),Dtobr2(1,l)))
8267 C Cartesian gradient
8271 call matmat2(AEAderx(1,1,lll,kkk,iii,2),auxmat(1,1),
8273 vv(1)=pizda(1,1)-pizda(2,2)
8274 vv(2)=pizda(1,2)+pizda(2,1)
8275 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)
8276 & +scalar2(AEAb2derx(1,lll,kkk,iii,1,2),Ub2(1,j))
8277 & +0.5d0*scalar2(vv(1),Dtobr2(1,l))
8283 C Contribution from graph IV
8285 call transpose2(EE(1,1,j),auxmat(1,1))
8286 call matmat2(auxmat(1,1),AEA(1,1,2),pizda(1,1))
8287 vv(1)=pizda(1,1)+pizda(2,2)
8288 vv(2)=pizda(2,1)-pizda(1,2)
8289 eello5_4=scalar2(AEAb1(1,2,2),b1(1,j))
8290 & -0.5d0*scalar2(vv(1),Ctobr(1,j))
8292 C Explicit gradient in virtual-dihedral angles.
8293 g_corr5_loc(j-1)=g_corr5_loc(j-1)
8294 & -0.5d0*ekont*scalar2(vv(1),Ctobrder(1,j))
8295 call matmat2(auxmat(1,1),AEAderg(1,1,2),pizda(1,1))
8296 vv(1)=pizda(1,1)+pizda(2,2)
8297 vv(2)=pizda(2,1)-pizda(1,2)
8298 g_corr5_loc(k-1)=g_corr5_loc(k-1)
8299 & +ekont*(scalar2(AEAb1derg(1,2,2),b1(1,j))
8300 & -0.5d0*scalar2(vv(1),Ctobr(1,j)))
8301 C Cartesian gradient
8305 call matmat2(auxmat(1,1),AEAderx(1,1,lll,kkk,iii,2),
8307 vv(1)=pizda(1,1)+pizda(2,2)
8308 vv(2)=pizda(2,1)-pizda(1,2)
8309 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)
8310 & +scalar2(AEAb1derx(1,lll,kkk,iii,2,2),b1(1,j))
8311 & -0.5d0*scalar2(vv(1),Ctobr(1,j))
8318 eel5=eello5_1+eello5_2+eello5_3+eello5_4
8319 cd if (i.eq.2 .and. j.eq.8 .and. k.eq.3 .and. l.eq.7) then
8320 cd write (2,*) 'ijkl',i,j,k,l
8321 cd write (2,*) 'eello5_1',eello5_1,' eello5_2',eello5_2,
8322 cd & ' eello5_3',eello5_3,' eello5_4',eello5_4
8324 cd write(iout,*) 'eello5_1',eello5_1,' eel5_1_num',16*eel5_1_num
8325 cd write(iout,*) 'eello5_2',eello5_2,' eel5_2_num',16*eel5_2_num
8326 cd write(iout,*) 'eello5_3',eello5_3,' eel5_3_num',16*eel5_3_num
8327 cd write(iout,*) 'eello5_4',eello5_4,' eel5_4_num',16*eel5_4_num
8329 if (j.lt.nres-1) then
8336 if (l.lt.nres-1) then
8346 cd write (2,*) 'eij',eij,' ekl',ekl,' ekont',ekont
8347 C 2/11/08 AL Gradients over DC's connecting interacting sites will be
8348 C summed up outside the subrouine as for the other subroutines
8349 C handling long-range interactions. The old code is commented out
8350 C with "cgrad" to keep track of changes.
8352 cgrad ggg1(ll)=eel5*g_contij(ll,1)
8353 cgrad ggg2(ll)=eel5*g_contij(ll,2)
8354 gradcorr5ij=eel5*g_contij(ll,1)+ekont*derx(ll,1,1)
8355 gradcorr5kl=eel5*g_contij(ll,2)+ekont*derx(ll,1,2)
8356 c write (iout,'(a,3i3,a,5f8.3,2i3,a,5f8.3,a,f8.3)')
8357 c & "ecorr5",ll,i,j," derx",derx(ll,2,1),derx(ll,3,1),derx(ll,4,1),
8358 c & derx(ll,5,1),k,l," derx",derx(ll,2,2),derx(ll,3,2),
8359 c & derx(ll,4,2),derx(ll,5,2)," ekont",ekont
8360 c write (iout,'(a,3i3,a,3f8.3,2i3,a,3f8.3)')
8361 c & "ecorr5",ll,i,j," gradcorr5",g_contij(ll,1),derx(ll,1,1),
8363 c & k,l," gradcorr5",g_contij(ll,2),derx(ll,1,2),gradcorr5kl
8364 cold ghalf=0.5d0*eel5*ekl*gacont_hbr(ll,jj,i)
8365 cgrad ghalf=0.5d0*ggg1(ll)
8367 gradcorr5(ll,i)=gradcorr5(ll,i)+ekont*derx(ll,2,1)
8368 gradcorr5(ll,i+1)=gradcorr5(ll,i+1)+ekont*derx(ll,3,1)
8369 gradcorr5(ll,j)=gradcorr5(ll,j)+ekont*derx(ll,4,1)
8370 gradcorr5(ll,j1)=gradcorr5(ll,j1)+ekont*derx(ll,5,1)
8371 gradcorr5_long(ll,j)=gradcorr5_long(ll,j)+gradcorr5ij
8372 gradcorr5_long(ll,i)=gradcorr5_long(ll,i)-gradcorr5ij
8373 cold ghalf=0.5d0*eel5*eij*gacont_hbr(ll,kk,k)
8374 cgrad ghalf=0.5d0*ggg2(ll)
8376 gradcorr5(ll,k)=gradcorr5(ll,k)+ekont*derx(ll,2,2)
8377 gradcorr5(ll,k+1)=gradcorr5(ll,k+1)+ekont*derx(ll,3,2)
8378 gradcorr5(ll,l)=gradcorr5(ll,l)+ekont*derx(ll,4,2)
8379 gradcorr5(ll,l1)=gradcorr5(ll,l1)+ekont*derx(ll,5,2)
8380 gradcorr5_long(ll,l)=gradcorr5_long(ll,l)+gradcorr5kl
8381 gradcorr5_long(ll,k)=gradcorr5_long(ll,k)-gradcorr5kl
8387 cold gradcorr5(ll,m)=gradcorr5(ll,m)+eel5*ekl*gacont_hbr(ll,jj,i)
8388 cgrad gradcorr5(ll,m)=gradcorr5(ll,m)+ggg1(ll)
8393 cold gradcorr5(ll,m)=gradcorr5(ll,m)+eel5*eij*gacont_hbr(ll,kk,k)
8394 cgrad gradcorr5(ll,m)=gradcorr5(ll,m)+ggg2(ll)
8400 cgrad gradcorr5(ll,m)=gradcorr5(ll,m)+ekont*derx(ll,1,1)
8405 cgrad gradcorr5(ll,m)=gradcorr5(ll,m)+ekont*derx(ll,1,2)
8409 cd write (2,*) iii,g_corr5_loc(iii)
8412 cd write (2,*) 'ekont',ekont
8413 cd write (iout,*) 'eello5',ekont*eel5
8416 c--------------------------------------------------------------------------
8417 double precision function eello6(i,j,k,l,jj,kk)
8418 implicit real*8 (a-h,o-z)
8419 include 'DIMENSIONS'
8420 include 'DIMENSIONS.ZSCOPT'
8421 include 'COMMON.IOUNITS'
8422 include 'COMMON.CHAIN'
8423 include 'COMMON.DERIV'
8424 include 'COMMON.INTERACT'
8425 include 'COMMON.CONTACTS'
8426 include 'COMMON.TORSION'
8427 include 'COMMON.VAR'
8428 include 'COMMON.GEO'
8429 include 'COMMON.FFIELD'
8430 double precision ggg1(3),ggg2(3)
8431 cd if (i.ne.1 .or. j.ne.3 .or. k.ne.2 .or. l.ne.4) then
8436 cd & 'EELLO6: Contacts have occurred for peptide groups',i,j,
8444 cd call checkint6(i,j,k,l,jj,kk,eel6_1_num,eel6_2_num,
8445 cd & eel6_3_num,eel6_4_num,eel6_5_num,eel6_6_num)
8449 derx(lll,kkk,iii)=0.0d0
8453 cd eij=facont_hb(jj,i)
8454 cd ekl=facont_hb(kk,k)
8460 eello6_1=eello6_graph1(i,j,k,l,1,.false.)
8461 eello6_2=eello6_graph1(j,i,l,k,2,.false.)
8462 eello6_3=eello6_graph2(i,j,k,l,jj,kk,.false.)
8463 eello6_4=eello6_graph4(i,j,k,l,jj,kk,1,.false.)
8464 eello6_5=eello6_graph4(j,i,l,k,jj,kk,2,.false.)
8465 eello6_6=eello6_graph3(i,j,k,l,jj,kk,.false.)
8467 eello6_1=eello6_graph1(i,j,k,l,1,.false.)
8468 eello6_2=eello6_graph1(l,k,j,i,2,.true.)
8469 eello6_3=eello6_graph2(i,l,k,j,jj,kk,.true.)
8470 eello6_4=eello6_graph4(i,j,k,l,jj,kk,1,.false.)
8471 if (wturn6.eq.0.0d0 .or. j.ne.i+4) then
8472 eello6_5=eello6_graph4(l,k,j,i,kk,jj,2,.true.)
8476 eello6_6=eello6_graph3(i,l,k,j,jj,kk,.true.)
8478 C If turn contributions are considered, they will be handled separately.
8479 eel6=eello6_1+eello6_2+eello6_3+eello6_4+eello6_5+eello6_6
8480 cd write(iout,*) 'eello6_1',eello6_1!,' eel6_1_num',16*eel6_1_num
8481 cd write(iout,*) 'eello6_2',eello6_2!,' eel6_2_num',16*eel6_2_num
8482 cd write(iout,*) 'eello6_3',eello6_3!,' eel6_3_num',16*eel6_3_num
8483 cd write(iout,*) 'eello6_4',eello6_4!,' eel6_4_num',16*eel6_4_num
8484 cd write(iout,*) 'eello6_5',eello6_5!,' eel6_5_num',16*eel6_5_num
8485 cd write(iout,*) 'eello6_6',eello6_6!,' eel6_6_num',16*eel6_6_num
8488 if (j.lt.nres-1) then
8495 if (l.lt.nres-1) then
8503 cgrad ggg1(ll)=eel6*g_contij(ll,1)
8504 cgrad ggg2(ll)=eel6*g_contij(ll,2)
8505 cold ghalf=0.5d0*eel6*ekl*gacont_hbr(ll,jj,i)
8506 cgrad ghalf=0.5d0*ggg1(ll)
8508 gradcorr6ij=eel6*g_contij(ll,1)+ekont*derx(ll,1,1)
8509 gradcorr6kl=eel6*g_contij(ll,2)+ekont*derx(ll,1,2)
8510 gradcorr6(ll,i)=gradcorr6(ll,i)+ekont*derx(ll,2,1)
8511 gradcorr6(ll,i+1)=gradcorr6(ll,i+1)+ekont*derx(ll,3,1)
8512 gradcorr6(ll,j)=gradcorr6(ll,j)+ekont*derx(ll,4,1)
8513 gradcorr6(ll,j1)=gradcorr6(ll,j1)+ekont*derx(ll,5,1)
8514 gradcorr6_long(ll,j)=gradcorr6_long(ll,j)+gradcorr6ij
8515 gradcorr6_long(ll,i)=gradcorr6_long(ll,i)-gradcorr6ij
8516 cgrad ghalf=0.5d0*ggg2(ll)
8517 cold ghalf=0.5d0*eel6*eij*gacont_hbr(ll,kk,k)
8519 gradcorr6(ll,k)=gradcorr6(ll,k)+ekont*derx(ll,2,2)
8520 gradcorr6(ll,k+1)=gradcorr6(ll,k+1)+ekont*derx(ll,3,2)
8521 gradcorr6(ll,l)=gradcorr6(ll,l)+ekont*derx(ll,4,2)
8522 gradcorr6(ll,l1)=gradcorr6(ll,l1)+ekont*derx(ll,5,2)
8523 gradcorr6_long(ll,l)=gradcorr6_long(ll,l)+gradcorr6kl
8524 gradcorr6_long(ll,k)=gradcorr6_long(ll,k)-gradcorr6kl
8530 cold gradcorr6(ll,m)=gradcorr6(ll,m)+eel6*ekl*gacont_hbr(ll,jj,i)
8531 cgrad gradcorr6(ll,m)=gradcorr6(ll,m)+ggg1(ll)
8536 cold gradcorr6(ll,m)=gradcorr6(ll,m)+eel6*eij*gacont_hbr(ll,kk,k)
8537 cgrad gradcorr6(ll,m)=gradcorr6(ll,m)+ggg2(ll)
8543 cgrad gradcorr6(ll,m)=gradcorr6(ll,m)+ekont*derx(ll,1,1)
8548 cgrad gradcorr6(ll,m)=gradcorr6(ll,m)+ekont*derx(ll,1,2)
8552 cd write (2,*) iii,g_corr6_loc(iii)
8555 cd write (2,*) 'ekont',ekont
8556 cd write (iout,*) 'eello6',ekont*eel6
8559 c--------------------------------------------------------------------------
8560 double precision function eello6_graph1(i,j,k,l,imat,swap)
8561 implicit real*8 (a-h,o-z)
8562 include 'DIMENSIONS'
8563 include 'DIMENSIONS.ZSCOPT'
8564 include 'COMMON.IOUNITS'
8565 include 'COMMON.CHAIN'
8566 include 'COMMON.DERIV'
8567 include 'COMMON.INTERACT'
8568 include 'COMMON.CONTACTS'
8569 include 'COMMON.TORSION'
8570 include 'COMMON.VAR'
8571 include 'COMMON.GEO'
8572 double precision vv(2),vv1(2),pizda(2,2),auxmat(2,2),pizda1(2,2)
8576 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
8578 C Parallel Antiparallel C
8584 C \ j|/k\| / \ |/k\|l / C
8589 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
8590 itk=itype2loc(itype(k))
8591 s1= scalar2(AEAb1(1,2,imat),CUgb2(1,i))
8592 s2=-scalar2(AEAb2(1,1,imat),Ug2Db1t(1,k))
8593 s3= scalar2(AEAb2(1,1,imat),CUgb2(1,k))
8594 call transpose2(EUgC(1,1,k),auxmat(1,1))
8595 call matmat2(AEA(1,1,imat),auxmat(1,1),pizda1(1,1))
8596 vv1(1)=pizda1(1,1)-pizda1(2,2)
8597 vv1(2)=pizda1(1,2)+pizda1(2,1)
8598 s4=0.5d0*scalar2(vv1(1),Dtobr2(1,i))
8599 vv(1)=AEAb1(1,2,imat)*b1(1,k)-AEAb1(2,2,imat)*b1(2,k)
8600 vv(2)=AEAb1(1,2,imat)*b1(2,k)+AEAb1(2,2,imat)*b1(1,k)
8601 s5=scalar2(vv(1),Dtobr2(1,i))
8602 cd write (2,*) 's1',s1,' s2',s2,' s3',s3,' s4', s4,' s5',s5
8603 eello6_graph1=-0.5d0*(s1+s2+s3+s4+s5)
8605 if (i.gt.1) g_corr6_loc(i-1)=g_corr6_loc(i-1)
8606 & -0.5d0*ekont*(scalar2(AEAb1(1,2,imat),CUgb2der(1,i))
8607 & -scalar2(AEAb2derg(1,2,1,imat),Ug2Db1t(1,k))
8608 & +scalar2(AEAb2derg(1,2,1,imat),CUgb2(1,k))
8609 & +0.5d0*scalar2(vv1(1),Dtobr2der(1,i))
8610 & +scalar2(vv(1),Dtobr2der(1,i)))
8611 call matmat2(AEAderg(1,1,imat),auxmat(1,1),pizda1(1,1))
8612 vv1(1)=pizda1(1,1)-pizda1(2,2)
8613 vv1(2)=pizda1(1,2)+pizda1(2,1)
8614 vv(1)=AEAb1derg(1,2,imat)*b1(1,k)-AEAb1derg(2,2,imat)*b1(2,k)
8615 vv(2)=AEAb1derg(1,2,imat)*b1(2,k)+AEAb1derg(2,2,imat)*b1(1,k)
8617 g_corr6_loc(l-1)=g_corr6_loc(l-1)
8618 & +ekont*(-0.5d0*(scalar2(AEAb1derg(1,2,imat),CUgb2(1,i))
8619 & -scalar2(AEAb2derg(1,1,1,imat),Ug2Db1t(1,k))
8620 & +scalar2(AEAb2derg(1,1,1,imat),CUgb2(1,k))
8621 & +0.5d0*scalar2(vv1(1),Dtobr2(1,i))+scalar2(vv(1),Dtobr2(1,i))))
8623 g_corr6_loc(j-1)=g_corr6_loc(j-1)
8624 & +ekont*(-0.5d0*(scalar2(AEAb1derg(1,2,imat),CUgb2(1,i))
8625 & -scalar2(AEAb2derg(1,1,1,imat),Ug2Db1t(1,k))
8626 & +scalar2(AEAb2derg(1,1,1,imat),CUgb2(1,k))
8627 & +0.5d0*scalar2(vv1(1),Dtobr2(1,i))+scalar2(vv(1),Dtobr2(1,i))))
8629 call transpose2(EUgCder(1,1,k),auxmat(1,1))
8630 call matmat2(AEA(1,1,imat),auxmat(1,1),pizda1(1,1))
8631 vv1(1)=pizda1(1,1)-pizda1(2,2)
8632 vv1(2)=pizda1(1,2)+pizda1(2,1)
8633 if (k.gt.1) g_corr6_loc(k-1)=g_corr6_loc(k-1)
8634 & +ekont*(-0.5d0*(-scalar2(AEAb2(1,1,imat),Ug2Db1tder(1,k))
8635 & +scalar2(AEAb2(1,1,imat),CUgb2der(1,k))
8636 & +0.5d0*scalar2(vv1(1),Dtobr2(1,i))))
8645 s1= scalar2(AEAb1derx(1,lll,kkk,iii,2,imat),CUgb2(1,i))
8646 s2=-scalar2(AEAb2derx(1,lll,kkk,iii,1,imat),Ug2Db1t(1,k))
8647 s3= scalar2(AEAb2derx(1,lll,kkk,iii,1,imat),CUgb2(1,k))
8648 call transpose2(EUgC(1,1,k),auxmat(1,1))
8649 call matmat2(AEAderx(1,1,lll,kkk,iii,imat),auxmat(1,1),
8651 vv1(1)=pizda1(1,1)-pizda1(2,2)
8652 vv1(2)=pizda1(1,2)+pizda1(2,1)
8653 s4=0.5d0*scalar2(vv1(1),Dtobr2(1,i))
8654 vv(1)=AEAb1derx(1,lll,kkk,iii,2,imat)*b1(1,k)
8655 & -AEAb1derx(2,lll,kkk,iii,2,imat)*b1(2,k)
8656 vv(2)=AEAb1derx(1,lll,kkk,iii,2,imat)*b1(2,k)
8657 & +AEAb1derx(2,lll,kkk,iii,2,imat)*b1(1,k)
8658 s5=scalar2(vv(1),Dtobr2(1,i))
8659 derx(lll,kkk,ind)=derx(lll,kkk,ind)-0.5d0*(s1+s2+s3+s4+s5)
8666 c----------------------------------------------------------------------------
8667 double precision function eello6_graph2(i,j,k,l,jj,kk,swap)
8668 implicit real*8 (a-h,o-z)
8669 include 'DIMENSIONS'
8670 include 'DIMENSIONS.ZSCOPT'
8671 include 'COMMON.IOUNITS'
8672 include 'COMMON.CHAIN'
8673 include 'COMMON.DERIV'
8674 include 'COMMON.INTERACT'
8675 include 'COMMON.CONTACTS'
8676 include 'COMMON.TORSION'
8677 include 'COMMON.VAR'
8678 include 'COMMON.GEO'
8680 double precision vv(2),pizda(2,2),auxmat(2,2),auxvec(2),
8681 & auxvec1(2),auxvec2(2),auxmat1(2,2)
8684 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
8686 C Parallel Antiparallel C
8692 C \ j|/k\| \ |/k\|l C
8697 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
8698 cd write (2,*) 'eello6_graph2: i,',i,' j',j,' k',k,' l',l
8699 C AL 7/4/01 s1 would occur in the sixth-order moment,
8700 C but not in a cluster cumulant
8702 s1=dip(1,jj,i)*dip(1,kk,k)
8704 call matvec2(ADtEA1(1,1,1),Ub2(1,k),auxvec(1))
8705 s2=-0.5d0*scalar2(Ub2(1,i),auxvec(1))
8706 call matvec2(ADtEA(1,1,2),Ub2(1,l),auxvec1(1))
8707 s3=-0.5d0*scalar2(Ub2(1,j),auxvec1(1))
8708 call transpose2(EUg(1,1,k),auxmat(1,1))
8709 call matmat2(ADtEA1(1,1,1),auxmat(1,1),pizda(1,1))
8710 vv(1)=pizda(1,1)-pizda(2,2)
8711 vv(2)=pizda(1,2)+pizda(2,1)
8712 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
8713 cd write (2,*) 'eello6_graph2:','s1',s1,' s2',s2,' s3',s3,' s4',s4
8715 eello6_graph2=-(s1+s2+s3+s4)
8717 eello6_graph2=-(s2+s3+s4)
8720 C Derivatives in gamma(i-1)
8724 s1=dipderg(1,jj,i)*dip(1,kk,k)
8726 s2=-0.5d0*scalar2(Ub2der(1,i),auxvec(1))
8727 call matvec2(ADtEAderg(1,1,1,2),Ub2(1,l),auxvec2(1))
8728 s3=-0.5d0*scalar2(Ub2(1,j),auxvec2(1))
8729 s4=-0.25d0*scalar2(vv(1),Dtobr2der(1,i))
8731 g_corr6_loc(i-1)=g_corr6_loc(i-1)-ekont*(s1+s2+s3+s4)
8733 g_corr6_loc(i-1)=g_corr6_loc(i-1)-ekont*(s2+s3+s4)
8735 c g_corr6_loc(i-1)=g_corr6_loc(i-1)-s3
8737 C Derivatives in gamma(k-1)
8739 s1=dip(1,jj,i)*dipderg(1,kk,k)
8741 call matvec2(ADtEA1(1,1,1),Ub2der(1,k),auxvec2(1))
8742 s2=-0.5d0*scalar2(Ub2(1,i),auxvec2(1))
8743 call matvec2(ADtEAderg(1,1,2,2),Ub2(1,l),auxvec2(1))
8744 s3=-0.5d0*scalar2(Ub2(1,j),auxvec2(1))
8745 call transpose2(EUgder(1,1,k),auxmat1(1,1))
8746 call matmat2(ADtEA1(1,1,1),auxmat1(1,1),pizda(1,1))
8747 vv(1)=pizda(1,1)-pizda(2,2)
8748 vv(2)=pizda(1,2)+pizda(2,1)
8749 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
8751 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s1+s2+s3+s4)
8753 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s2+s3+s4)
8755 c g_corr6_loc(k-1)=g_corr6_loc(k-1)-s3
8756 C Derivatives in gamma(j-1) or gamma(l-1)
8759 s1=dipderg(3,jj,i)*dip(1,kk,k)
8761 call matvec2(ADtEA1derg(1,1,1,1),Ub2(1,k),auxvec2(1))
8762 s2=-0.5d0*scalar2(Ub2(1,i),auxvec2(1))
8763 s3=-0.5d0*scalar2(Ub2der(1,j),auxvec1(1))
8764 call matmat2(ADtEA1derg(1,1,1,1),auxmat(1,1),pizda(1,1))
8765 vv(1)=pizda(1,1)-pizda(2,2)
8766 vv(2)=pizda(1,2)+pizda(2,1)
8767 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
8770 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*s1
8772 g_corr6_loc(j-1)=g_corr6_loc(j-1)-ekont*s1
8775 g_corr6_loc(j-1)=g_corr6_loc(j-1)-ekont*(s2+s3+s4)
8776 c g_corr6_loc(j-1)=g_corr6_loc(j-1)-s3
8778 C Derivatives in gamma(l-1) or gamma(j-1)
8781 s1=dip(1,jj,i)*dipderg(3,kk,k)
8783 call matvec2(ADtEA1derg(1,1,2,1),Ub2(1,k),auxvec2(1))
8784 s2=-0.5d0*scalar2(Ub2(1,i),auxvec2(1))
8785 call matvec2(ADtEA(1,1,2),Ub2der(1,l),auxvec2(1))
8786 s3=-0.5d0*scalar2(Ub2(1,j),auxvec2(1))
8787 call matmat2(ADtEA1derg(1,1,2,1),auxmat(1,1),pizda(1,1))
8788 vv(1)=pizda(1,1)-pizda(2,2)
8789 vv(2)=pizda(1,2)+pizda(2,1)
8790 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
8793 g_corr6_loc(j-1)=g_corr6_loc(j-1)-ekont*s1
8795 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*s1
8798 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*(s2+s3+s4)
8799 c g_corr6_loc(l-1)=g_corr6_loc(l-1)-s3
8801 C Cartesian derivatives.
8803 write (2,*) 'In eello6_graph2'
8805 write (2,*) 'iii=',iii
8807 write (2,*) 'kkk=',kkk
8809 write (2,'(3(2f10.5),5x)')
8810 & ((ADtEA1derx(jjj,mmm,lll,kkk,iii,1),mmm=1,2),lll=1,3)
8820 s1=dipderx(lll,kkk,1,jj,i)*dip(1,kk,k)
8822 s1=dip(1,jj,i)*dipderx(lll,kkk,1,kk,k)
8825 call matvec2(ADtEA1derx(1,1,lll,kkk,iii,1),Ub2(1,k),
8827 s2=-0.5d0*scalar2(Ub2(1,i),auxvec(1))
8828 call matvec2(ADtEAderx(1,1,lll,kkk,iii,2),Ub2(1,l),
8830 s3=-0.5d0*scalar2(Ub2(1,j),auxvec(1))
8831 call transpose2(EUg(1,1,k),auxmat(1,1))
8832 call matmat2(ADtEA1derx(1,1,lll,kkk,iii,1),auxmat(1,1),
8834 vv(1)=pizda(1,1)-pizda(2,2)
8835 vv(2)=pizda(1,2)+pizda(2,1)
8836 s4=-0.25d0*scalar2(vv(1),Dtobr2(1,i))
8837 cd write (2,*) 's1',s1,' s2',s2,' s3',s3,' s4',s4
8839 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s1+s2+s4)
8841 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s2+s4)
8844 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-s3
8846 derx(lll,kkk,iii)=derx(lll,kkk,iii)-s3
8854 c----------------------------------------------------------------------------
8855 double precision function eello6_graph3(i,j,k,l,jj,kk,swap)
8856 implicit real*8 (a-h,o-z)
8857 include 'DIMENSIONS'
8858 include 'DIMENSIONS.ZSCOPT'
8859 include 'COMMON.IOUNITS'
8860 include 'COMMON.CHAIN'
8861 include 'COMMON.DERIV'
8862 include 'COMMON.INTERACT'
8863 include 'COMMON.CONTACTS'
8864 include 'COMMON.TORSION'
8865 include 'COMMON.VAR'
8866 include 'COMMON.GEO'
8867 double precision vv(2),pizda(2,2),auxmat(2,2),auxvec(2)
8869 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
8871 C Parallel Antiparallel C
8877 C j|/k\| / |/k\|l / C
8882 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
8884 C 4/7/01 AL Component s1 was removed, because it pertains to the respective
8885 C energy moment and not to the cluster cumulant.
8886 iti=itortyp(itype(i))
8887 if (j.lt.nres-1) then
8888 itj1=itype2loc(itype(j+1))
8892 itk=itype2loc(itype(k))
8893 itk1=itype2loc(itype(k+1))
8894 if (l.lt.nres-1) then
8895 itl1=itype2loc(itype(l+1))
8900 s1=dip(4,jj,i)*dip(4,kk,k)
8902 call matvec2(AECA(1,1,1),b1(1,k+1),auxvec(1))
8903 s2=0.5d0*scalar2(b1(1,k),auxvec(1))
8904 call matvec2(AECA(1,1,2),b1(1,l+1),auxvec(1))
8905 s3=0.5d0*scalar2(b1(1,j+1),auxvec(1))
8906 call transpose2(EE(1,1,k),auxmat(1,1))
8907 call matmat2(auxmat(1,1),AECA(1,1,1),pizda(1,1))
8908 vv(1)=pizda(1,1)+pizda(2,2)
8909 vv(2)=pizda(2,1)-pizda(1,2)
8910 s4=-0.25d0*scalar2(vv(1),Ctobr(1,k))
8911 cd write (2,*) 'eello6_graph3:','s1',s1,' s2',s2,' s3',s3,' s4',s4,
8912 cd & "sum",-(s2+s3+s4)
8914 eello6_graph3=-(s1+s2+s3+s4)
8916 eello6_graph3=-(s2+s3+s4)
8919 C Derivatives in gamma(k-1)
8921 call matvec2(AECAderg(1,1,2),b1(1,l+1),auxvec(1))
8922 s3=0.5d0*scalar2(b1(1,j+1),auxvec(1))
8923 s4=-0.25d0*scalar2(vv(1),Ctobrder(1,k))
8924 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s3+s4)
8925 C Derivatives in gamma(l-1)
8926 call matvec2(AECAderg(1,1,1),b1(1,k+1),auxvec(1))
8927 s2=0.5d0*scalar2(b1(1,k),auxvec(1))
8928 call matmat2(auxmat(1,1),AECAderg(1,1,1),pizda(1,1))
8929 vv(1)=pizda(1,1)+pizda(2,2)
8930 vv(2)=pizda(2,1)-pizda(1,2)
8931 s4=-0.25d0*scalar2(vv(1),Ctobr(1,k))
8932 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*(s2+s4)
8933 C Cartesian derivatives.
8939 s1=dipderx(lll,kkk,4,jj,i)*dip(4,kk,k)
8941 s1=dip(4,jj,i)*dipderx(lll,kkk,4,kk,k)
8944 call matvec2(AECAderx(1,1,lll,kkk,iii,1),b1(1,k+1),
8946 s2=0.5d0*scalar2(b1(1,k),auxvec(1))
8947 call matvec2(AECAderx(1,1,lll,kkk,iii,2),b1(1,l+1),
8949 s3=0.5d0*scalar2(b1(1,j+1),auxvec(1))
8950 call matmat2(auxmat(1,1),AECAderx(1,1,lll,kkk,iii,1),
8952 vv(1)=pizda(1,1)+pizda(2,2)
8953 vv(2)=pizda(2,1)-pizda(1,2)
8954 s4=-0.25d0*scalar2(vv(1),Ctobr(1,k))
8956 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s1+s2+s4)
8958 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s2+s4)
8961 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-s3
8963 derx(lll,kkk,iii)=derx(lll,kkk,iii)-s3
8965 c derx(lll,kkk,iii)=derx(lll,kkk,iii)-s4
8972 c----------------------------------------------------------------------------
8973 double precision function eello6_graph4(i,j,k,l,jj,kk,imat,swap)
8974 implicit real*8 (a-h,o-z)
8975 include 'DIMENSIONS'
8976 include 'DIMENSIONS.ZSCOPT'
8977 include 'COMMON.IOUNITS'
8978 include 'COMMON.CHAIN'
8979 include 'COMMON.DERIV'
8980 include 'COMMON.INTERACT'
8981 include 'COMMON.CONTACTS'
8982 include 'COMMON.TORSION'
8983 include 'COMMON.VAR'
8984 include 'COMMON.GEO'
8985 include 'COMMON.FFIELD'
8986 double precision vv(2),pizda(2,2),auxmat(2,2),auxvec(2),
8987 & auxvec1(2),auxmat1(2,2)
8989 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
8991 C Parallel Antiparallel C
8997 C \ j|/k\| \ |/k\|l C
9002 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
9004 C 4/7/01 AL Component s1 was removed, because it pertains to the respective
9005 C energy moment and not to the cluster cumulant.
9006 cd write (2,*) 'eello_graph4: wturn6',wturn6
9007 iti=itype2loc(itype(i))
9008 itj=itype2loc(itype(j))
9009 if (j.lt.nres-1) then
9010 itj1=itype2loc(itype(j+1))
9014 itk=itype2loc(itype(k))
9015 if (k.lt.nres-1) then
9016 itk1=itype2loc(itype(k+1))
9020 itl=itype2loc(itype(l))
9021 if (l.lt.nres-1) then
9022 itl1=itype2loc(itype(l+1))
9026 cd write (2,*) 'eello6_graph4:','i',i,' j',j,' k',k,' l',l
9027 cd write (2,*) 'iti',iti,' itj',itj,' itj1',itj1,' itk',itk,
9028 cd & ' itl',itl,' itl1',itl1
9031 s1=dip(3,jj,i)*dip(3,kk,k)
9033 s1=dip(2,jj,j)*dip(2,kk,l)
9036 call matvec2(AECA(1,1,imat),Ub2(1,k),auxvec(1))
9037 s2=0.5d0*scalar2(Ub2(1,i),auxvec(1))
9039 call matvec2(ADtEA1(1,1,3-imat),b1(1,j+1),auxvec1(1))
9040 s3=-0.5d0*scalar2(b1(1,j),auxvec1(1))
9042 call matvec2(ADtEA1(1,1,3-imat),b1(1,l+1),auxvec1(1))
9043 s3=-0.5d0*scalar2(b1(1,l),auxvec1(1))
9045 call transpose2(EUg(1,1,k),auxmat(1,1))
9046 call matmat2(AECA(1,1,imat),auxmat(1,1),pizda(1,1))
9047 vv(1)=pizda(1,1)-pizda(2,2)
9048 vv(2)=pizda(2,1)+pizda(1,2)
9049 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
9050 cd write (2,*) 'eello6_graph4:','s1',s1,' s2',s2,' s3',s3,' s4',s4
9052 eello6_graph4=-(s1+s2+s3+s4)
9054 eello6_graph4=-(s2+s3+s4)
9056 C Derivatives in gamma(i-1)
9061 s1=dipderg(2,jj,i)*dip(3,kk,k)
9063 s1=dipderg(4,jj,j)*dip(2,kk,l)
9066 s2=0.5d0*scalar2(Ub2der(1,i),auxvec(1))
9068 call matvec2(ADtEA1derg(1,1,1,3-imat),b1(1,j+1),auxvec1(1))
9069 s3=-0.5d0*scalar2(b1(1,j),auxvec1(1))
9071 call matvec2(ADtEA1derg(1,1,1,3-imat),b1(1,l+1),auxvec1(1))
9072 s3=-0.5d0*scalar2(b1(1,l),auxvec1(1))
9074 s4=0.25d0*scalar2(vv(1),Dtobr2der(1,i))
9075 if (wturn6.gt.0.0d0 .and. k.eq.l+4 .and. i.eq.j+2) then
9076 cd write (2,*) 'turn6 derivatives'
9078 gel_loc_turn6(i-1)=gel_loc_turn6(i-1)-ekont*(s1+s2+s3+s4)
9080 gel_loc_turn6(i-1)=gel_loc_turn6(i-1)-ekont*(s2+s3+s4)
9084 g_corr6_loc(i-1)=g_corr6_loc(i-1)-ekont*(s1+s2+s3+s4)
9086 g_corr6_loc(i-1)=g_corr6_loc(i-1)-ekont*(s2+s3+s4)
9090 C Derivatives in gamma(k-1)
9093 s1=dip(3,jj,i)*dipderg(2,kk,k)
9095 s1=dip(2,jj,j)*dipderg(4,kk,l)
9098 call matvec2(AECA(1,1,imat),Ub2der(1,k),auxvec1(1))
9099 s2=0.5d0*scalar2(Ub2(1,i),auxvec1(1))
9101 call matvec2(ADtEA1derg(1,1,2,3-imat),b1(1,j+1),auxvec1(1))
9102 s3=-0.5d0*scalar2(b1(1,j),auxvec1(1))
9104 call matvec2(ADtEA1derg(1,1,2,3-imat),b1(1,l+1),auxvec1(1))
9105 s3=-0.5d0*scalar2(b1(1,l),auxvec1(1))
9107 call transpose2(EUgder(1,1,k),auxmat1(1,1))
9108 call matmat2(AECA(1,1,imat),auxmat1(1,1),pizda(1,1))
9109 vv(1)=pizda(1,1)-pizda(2,2)
9110 vv(2)=pizda(2,1)+pizda(1,2)
9111 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
9112 if (wturn6.gt.0.0d0 .and. k.eq.l+4 .and. i.eq.j+2) then
9114 gel_loc_turn6(k-1)=gel_loc_turn6(k-1)-ekont*(s1+s2+s3+s4)
9116 gel_loc_turn6(k-1)=gel_loc_turn6(k-1)-ekont*(s2+s3+s4)
9120 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s1+s2+s3+s4)
9122 g_corr6_loc(k-1)=g_corr6_loc(k-1)-ekont*(s2+s3+s4)
9125 C Derivatives in gamma(j-1) or gamma(l-1)
9126 if (l.eq.j+1 .and. l.gt.1) then
9127 call matvec2(AECAderg(1,1,imat),Ub2(1,k),auxvec(1))
9128 s2=0.5d0*scalar2(Ub2(1,i),auxvec(1))
9129 call matmat2(AECAderg(1,1,imat),auxmat(1,1),pizda(1,1))
9130 vv(1)=pizda(1,1)-pizda(2,2)
9131 vv(2)=pizda(2,1)+pizda(1,2)
9132 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
9133 g_corr6_loc(l-1)=g_corr6_loc(l-1)-ekont*(s2+s4)
9134 else if (j.gt.1) then
9135 call matvec2(AECAderg(1,1,imat),Ub2(1,k),auxvec(1))
9136 s2=0.5d0*scalar2(Ub2(1,i),auxvec(1))
9137 call matmat2(AECAderg(1,1,imat),auxmat(1,1),pizda(1,1))
9138 vv(1)=pizda(1,1)-pizda(2,2)
9139 vv(2)=pizda(2,1)+pizda(1,2)
9140 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
9141 if (wturn6.gt.0.0d0 .and. k.eq.l+4 .and. i.eq.j+2) then
9142 gel_loc_turn6(j-1)=gel_loc_turn6(j-1)-ekont*(s2+s4)
9144 g_corr6_loc(j-1)=g_corr6_loc(j-1)-ekont*(s2+s4)
9147 C Cartesian derivatives.
9154 s1=dipderx(lll,kkk,3,jj,i)*dip(3,kk,k)
9156 s1=dipderx(lll,kkk,2,jj,j)*dip(2,kk,l)
9160 s1=dip(3,jj,i)*dipderx(lll,kkk,3,kk,k)
9162 s1=dip(2,jj,j)*dipderx(lll,kkk,2,kk,l)
9166 call matvec2(AECAderx(1,1,lll,kkk,iii,imat),Ub2(1,k),
9168 s2=0.5d0*scalar2(Ub2(1,i),auxvec(1))
9170 call matvec2(ADtEA1derx(1,1,lll,kkk,iii,3-imat),
9171 & b1(1,j+1),auxvec(1))
9172 s3=-0.5d0*scalar2(b1(1,j),auxvec(1))
9174 call matvec2(ADtEA1derx(1,1,lll,kkk,iii,3-imat),
9175 & b1(1,l+1),auxvec(1))
9176 s3=-0.5d0*scalar2(b1(1,l),auxvec(1))
9178 call matmat2(AECAderx(1,1,lll,kkk,iii,imat),auxmat(1,1),
9180 vv(1)=pizda(1,1)-pizda(2,2)
9181 vv(2)=pizda(2,1)+pizda(1,2)
9182 s4=0.25d0*scalar2(vv(1),Dtobr2(1,i))
9184 if (wturn6.gt.0.0d0 .and. k.eq.l+4 .and. i.eq.j+2) then
9186 derx_turn(lll,kkk,3-iii)=derx_turn(lll,kkk,3-iii)
9189 derx_turn(lll,kkk,3-iii)=derx_turn(lll,kkk,3-iii)
9192 derx_turn(lll,kkk,iii)=derx_turn(lll,kkk,iii)-s3
9195 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-(s1+s2+s4)
9197 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-(s2+s4)
9199 derx(lll,kkk,iii)=derx(lll,kkk,iii)-s3
9203 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s1+s2+s4)
9205 derx(lll,kkk,iii)=derx(lll,kkk,iii)-(s2+s4)
9208 derx(lll,kkk,iii)=derx(lll,kkk,iii)-s3
9210 derx(lll,kkk,3-iii)=derx(lll,kkk,3-iii)-s3
9219 c----------------------------------------------------------------------------
9220 double precision function eello_turn6(i,jj,kk)
9221 implicit real*8 (a-h,o-z)
9222 include 'DIMENSIONS'
9223 include 'DIMENSIONS.ZSCOPT'
9224 include 'COMMON.IOUNITS'
9225 include 'COMMON.CHAIN'
9226 include 'COMMON.DERIV'
9227 include 'COMMON.INTERACT'
9228 include 'COMMON.CONTACTS'
9229 include 'COMMON.TORSION'
9230 include 'COMMON.VAR'
9231 include 'COMMON.GEO'
9232 double precision vtemp1(2),vtemp2(2),vtemp3(2),vtemp4(2),
9233 & atemp(2,2),auxmat(2,2),achuj_temp(2,2),gtemp(2,2),gvec(2),
9235 double precision vtemp1d(2),vtemp2d(2),vtemp3d(2),vtemp4d(2),
9236 & atempd(2,2),auxmatd(2,2),achuj_tempd(2,2),gtempd(2,2),gvecd(2)
9237 C 4/7/01 AL Components s1, s8, and s13 were removed, because they pertain to
9238 C the respective energy moment and not to the cluster cumulant.
9247 iti=itype2loc(itype(i))
9248 itk=itype2loc(itype(k))
9249 itk1=itype2loc(itype(k+1))
9250 itl=itype2loc(itype(l))
9251 itj=itype2loc(itype(j))
9252 cd write (2,*) 'itk',itk,' itk1',itk1,' itl',itl,' itj',itj
9253 cd write (2,*) 'i',i,' k',k,' j',j,' l',l
9254 cd if (i.ne.1 .or. j.ne.3 .or. k.ne.2 .or. l.ne.4) then
9259 cd & 'EELLO6: Contacts have occurred for peptide groups',i,j,
9261 cd call checkint_turn6(i,jj,kk,eel_turn6_num)
9265 derx_turn(lll,kkk,iii)=0.0d0
9272 eello6_5=eello6_graph4(l,k,j,i,kk,jj,2,.true.)
9274 cd write (2,*) 'eello6_5',eello6_5
9276 call transpose2(AEA(1,1,1),auxmat(1,1))
9277 call matmat2(EUg(1,1,i+1),auxmat(1,1),auxmat(1,1))
9278 ss1=scalar2(Ub2(1,i+2),b1(1,l))
9279 s1 = (auxmat(1,1)+auxmat(2,2))*ss1
9281 call matvec2(EUg(1,1,i+2),b1(1,l),vtemp1(1))
9282 call matvec2(AEA(1,1,1),vtemp1(1),vtemp1(1))
9283 s2 = scalar2(b1(1,k),vtemp1(1))
9285 call transpose2(AEA(1,1,2),atemp(1,1))
9286 call matmat2(atemp(1,1),EUg(1,1,i+4),atemp(1,1))
9287 call matvec2(Ug2(1,1,i+2),dd(1,1,k+1),vtemp2(1))
9288 s8 = -(atemp(1,1)+atemp(2,2))*scalar2(cc(1,1,l),vtemp2(1))
9290 call matmat2(EUg(1,1,i+3),AEA(1,1,2),auxmat(1,1))
9291 call matvec2(auxmat(1,1),Ub2(1,i+4),vtemp3(1))
9292 s12 = scalar2(Ub2(1,i+2),vtemp3(1))
9294 call transpose2(a_chuj(1,1,kk,i+1),achuj_temp(1,1))
9295 call matmat2(achuj_temp(1,1),EUg(1,1,i+2),gtemp(1,1))
9296 call matmat2(gtemp(1,1),EUg(1,1,i+3),gtemp(1,1))
9297 call matvec2(a_chuj(1,1,jj,i),Ub2(1,i+4),vtemp4(1))
9298 ss13 = scalar2(b1(1,k),vtemp4(1))
9299 s13 = (gtemp(1,1)+gtemp(2,2))*ss13
9301 c write (2,*) 's1,s2,s8,s12,s13',s1,s2,s8,s12,s13
9307 eel_turn6 = eello6_5 - 0.5d0*(s1+s2+s12+s8+s13)
9308 C Derivatives in gamma(i+2)
9313 call transpose2(AEA(1,1,1),auxmatd(1,1))
9314 call matmat2(EUgder(1,1,i+1),auxmatd(1,1),auxmatd(1,1))
9315 s1d = (auxmatd(1,1)+auxmatd(2,2))*ss1
9316 call transpose2(AEAderg(1,1,2),atempd(1,1))
9317 call matmat2(atempd(1,1),EUg(1,1,i+4),atempd(1,1))
9318 s8d = -(atempd(1,1)+atempd(2,2))*scalar2(cc(1,1,l),vtemp2(1))
9320 call matmat2(EUg(1,1,i+3),AEAderg(1,1,2),auxmatd(1,1))
9321 call matvec2(auxmatd(1,1),Ub2(1,i+4),vtemp3d(1))
9322 s12d = scalar2(Ub2(1,i+2),vtemp3d(1))
9328 gel_loc_turn6(i)=gel_loc_turn6(i)-0.5d0*ekont*(s1d+s8d+s12d)
9329 C Derivatives in gamma(i+3)
9331 call transpose2(AEA(1,1,1),auxmatd(1,1))
9332 call matmat2(EUg(1,1,i+1),auxmatd(1,1),auxmatd(1,1))
9333 ss1d=scalar2(Ub2der(1,i+2),b1(1,l))
9334 s1d = (auxmatd(1,1)+auxmatd(2,2))*ss1d
9336 call matvec2(EUgder(1,1,i+2),b1(1,l),vtemp1d(1))
9337 call matvec2(AEA(1,1,1),vtemp1d(1),vtemp1d(1))
9338 s2d = scalar2(b1(1,k),vtemp1d(1))
9340 call matvec2(Ug2der(1,1,i+2),dd(1,1,k+1),vtemp2d(1))
9341 s8d = -(atemp(1,1)+atemp(2,2))*scalar2(cc(1,1,l),vtemp2d(1))
9343 s12d = scalar2(Ub2der(1,i+2),vtemp3(1))
9345 call matmat2(achuj_temp(1,1),EUgder(1,1,i+2),gtempd(1,1))
9346 call matmat2(gtempd(1,1),EUg(1,1,i+3),gtempd(1,1))
9347 s13d = (gtempd(1,1)+gtempd(2,2))*ss13
9355 gel_loc_turn6(i+1)=gel_loc_turn6(i+1)
9356 & -0.5d0*ekont*(s1d+s2d+s8d+s12d+s13d)
9358 gel_loc_turn6(i+1)=gel_loc_turn6(i+1)
9359 & -0.5d0*ekont*(s2d+s12d)
9361 C Derivatives in gamma(i+4)
9362 call matmat2(EUgder(1,1,i+3),AEA(1,1,2),auxmatd(1,1))
9363 call matvec2(auxmatd(1,1),Ub2(1,i+4),vtemp3d(1))
9364 s12d = scalar2(Ub2(1,i+2),vtemp3d(1))
9366 call matmat2(achuj_temp(1,1),EUg(1,1,i+2),gtempd(1,1))
9367 call matmat2(gtempd(1,1),EUgder(1,1,i+3),gtempd(1,1))
9368 s13d = (gtempd(1,1)+gtempd(2,2))*ss13
9376 gel_loc_turn6(i+2)=gel_loc_turn6(i+2)-0.5d0*ekont*(s12d+s13d)
9378 gel_loc_turn6(i+2)=gel_loc_turn6(i+2)-0.5d0*ekont*(s12d)
9380 C Derivatives in gamma(i+5)
9382 call transpose2(AEAderg(1,1,1),auxmatd(1,1))
9383 call matmat2(EUg(1,1,i+1),auxmatd(1,1),auxmatd(1,1))
9384 s1d = (auxmatd(1,1)+auxmatd(2,2))*ss1
9386 call matvec2(EUg(1,1,i+2),b1(1,l),vtemp1d(1))
9387 call matvec2(AEAderg(1,1,1),vtemp1d(1),vtemp1d(1))
9388 s2d = scalar2(b1(1,k),vtemp1d(1))
9390 call transpose2(AEA(1,1,2),atempd(1,1))
9391 call matmat2(atempd(1,1),EUgder(1,1,i+4),atempd(1,1))
9392 s8d = -(atempd(1,1)+atempd(2,2))*scalar2(cc(1,1,l),vtemp2(1))
9394 call matvec2(auxmat(1,1),Ub2der(1,i+4),vtemp3d(1))
9395 s12d = scalar2(Ub2(1,i+2),vtemp3d(1))
9397 call matvec2(a_chuj(1,1,jj,i),Ub2der(1,i+4),vtemp4d(1))
9398 ss13d = scalar2(b1(1,k),vtemp4d(1))
9399 s13d = (gtemp(1,1)+gtemp(2,2))*ss13d
9407 gel_loc_turn6(i+3)=gel_loc_turn6(i+3)
9408 & -0.5d0*ekont*(s1d+s2d+s8d+s12d+s13d)
9410 gel_loc_turn6(i+3)=gel_loc_turn6(i+3)
9411 & -0.5d0*ekont*(s2d+s12d)
9413 C Cartesian derivatives
9418 call transpose2(AEAderx(1,1,lll,kkk,iii,1),auxmatd(1,1))
9419 call matmat2(EUg(1,1,i+1),auxmatd(1,1),auxmatd(1,1))
9420 s1d = (auxmatd(1,1)+auxmatd(2,2))*ss1
9422 call matvec2(EUg(1,1,i+2),b1(1,l),vtemp1(1))
9423 call matvec2(AEAderx(1,1,lll,kkk,iii,1),vtemp1(1),
9425 s2d = scalar2(b1(1,k),vtemp1d(1))
9427 call transpose2(AEAderx(1,1,lll,kkk,iii,2),atempd(1,1))
9428 call matmat2(atempd(1,1),EUg(1,1,i+4),atempd(1,1))
9429 s8d = -(atempd(1,1)+atempd(2,2))*
9430 & scalar2(cc(1,1,l),vtemp2(1))
9432 call matmat2(EUg(1,1,i+3),AEAderx(1,1,lll,kkk,iii,2),
9434 call matvec2(auxmatd(1,1),Ub2(1,i+4),vtemp3d(1))
9435 s12d = scalar2(Ub2(1,i+2),vtemp3d(1))
9442 derx_turn(lll,kkk,iii) = derx_turn(lll,kkk,iii)
9445 derx_turn(lll,kkk,iii) = derx_turn(lll,kkk,iii)
9449 derx_turn(lll,kkk,3-iii) = derx_turn(lll,kkk,3-iii)
9450 & - 0.5d0*(s8d+s12d)
9452 derx_turn(lll,kkk,3-iii) = derx_turn(lll,kkk,3-iii)
9461 call transpose2(a_chuj_der(1,1,lll,kkk,kk,i+1),
9463 call matmat2(achuj_tempd(1,1),EUg(1,1,i+2),gtempd(1,1))
9464 call matmat2(gtempd(1,1),EUg(1,1,i+3),gtempd(1,1))
9465 s13d=(gtempd(1,1)+gtempd(2,2))*ss13
9466 derx_turn(lll,kkk,2) = derx_turn(lll,kkk,2)-0.5d0*s13d
9467 call matvec2(a_chuj_der(1,1,lll,kkk,jj,i),Ub2(1,i+4),
9469 ss13d = scalar2(b1(1,k),vtemp4d(1))
9470 s13d = (gtemp(1,1)+gtemp(2,2))*ss13d
9471 derx_turn(lll,kkk,1) = derx_turn(lll,kkk,1)-0.5d0*s13d
9475 cd write(iout,*) 'eel6_turn6',eel_turn6,' eel_turn6_num',
9476 cd & 16*eel_turn6_num
9478 if (j.lt.nres-1) then
9485 if (l.lt.nres-1) then
9493 cgrad ggg1(ll)=eel_turn6*g_contij(ll,1)
9494 cgrad ggg2(ll)=eel_turn6*g_contij(ll,2)
9495 cgrad ghalf=0.5d0*ggg1(ll)
9497 gturn6ij=eel_turn6*g_contij(ll,1)+ekont*derx_turn(ll,1,1)
9498 gturn6kl=eel_turn6*g_contij(ll,2)+ekont*derx_turn(ll,1,2)
9499 gcorr6_turn(ll,i)=gcorr6_turn(ll,i)!+ghalf
9500 & +ekont*derx_turn(ll,2,1)
9501 gcorr6_turn(ll,i+1)=gcorr6_turn(ll,i+1)+ekont*derx_turn(ll,3,1)
9502 gcorr6_turn(ll,j)=gcorr6_turn(ll,j)!+ghalf
9503 & +ekont*derx_turn(ll,4,1)
9504 gcorr6_turn(ll,j1)=gcorr6_turn(ll,j1)+ekont*derx_turn(ll,5,1)
9505 gcorr6_turn_long(ll,j)=gcorr6_turn_long(ll,j)+gturn6ij
9506 gcorr6_turn_long(ll,i)=gcorr6_turn_long(ll,i)-gturn6ij
9507 cgrad ghalf=0.5d0*ggg2(ll)
9509 gcorr6_turn(ll,k)=gcorr6_turn(ll,k)!+ghalf
9510 & +ekont*derx_turn(ll,2,2)
9511 gcorr6_turn(ll,k+1)=gcorr6_turn(ll,k+1)+ekont*derx_turn(ll,3,2)
9512 gcorr6_turn(ll,l)=gcorr6_turn(ll,l)!+ghalf
9513 & +ekont*derx_turn(ll,4,2)
9514 gcorr6_turn(ll,l1)=gcorr6_turn(ll,l1)+ekont*derx_turn(ll,5,2)
9515 gcorr6_turn_long(ll,l)=gcorr6_turn_long(ll,l)+gturn6kl
9516 gcorr6_turn_long(ll,k)=gcorr6_turn_long(ll,k)-gturn6kl
9521 cgrad gcorr6_turn(ll,m)=gcorr6_turn(ll,m)+ggg1(ll)
9526 cgrad gcorr6_turn(ll,m)=gcorr6_turn(ll,m)+ggg2(ll)
9532 cgrad gcorr6_turn(ll,m)=gcorr6_turn(ll,m)+ekont*derx_turn(ll,1,1)
9537 cgrad gcorr6_turn(ll,m)=gcorr6_turn(ll,m)+ekont*derx_turn(ll,1,2)
9541 cd write (2,*) iii,g_corr6_loc(iii)
9544 eello_turn6=ekont*eel_turn6
9545 cd write (2,*) 'ekont',ekont
9546 cd write (2,*) 'eel_turn6',ekont*eel_turn6
9550 crc-------------------------------------------------
9551 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
9552 subroutine Eliptransfer(eliptran)
9553 implicit real*8 (a-h,o-z)
9554 include 'DIMENSIONS'
9555 include 'DIMENSIONS.ZSCOPT'
9556 include 'COMMON.GEO'
9557 include 'COMMON.VAR'
9558 include 'COMMON.LOCAL'
9559 include 'COMMON.CHAIN'
9560 include 'COMMON.DERIV'
9561 include 'COMMON.INTERACT'
9562 include 'COMMON.IOUNITS'
9563 include 'COMMON.CALC'
9564 include 'COMMON.CONTROL'
9565 include 'COMMON.SPLITELE'
9566 include 'COMMON.SBRIDGE'
9567 C this is done by Adasko
9571 C--bordliptop-- buffore starts
9572 C--bufliptop--- here true lipid starts
9574 C--buflipbot--- lipid ends buffore starts
9575 C--bordlipbot--buffore ends
9579 if (itype(i).eq.ntyp1) cycle
9581 positi=(mod(((c(3,i)+c(3,i+1))/2.0d0),boxzsize))
9582 if (positi.le.0) positi=positi+boxzsize
9584 C first for peptide groups
9585 c for each residue check if it is in lipid or lipid water border area
9586 if ((positi.gt.bordlipbot)
9587 &.and.(positi.lt.bordliptop)) then
9588 C the energy transfer exist
9589 if (positi.lt.buflipbot) then
9590 C what fraction I am in
9592 & ((positi-bordlipbot)/lipbufthick)
9593 C lipbufthick is thickenes of lipid buffore
9594 sslip=sscalelip(fracinbuf)
9595 ssgradlip=-sscagradlip(fracinbuf)/lipbufthick
9596 eliptran=eliptran+sslip*pepliptran
9597 gliptranc(3,i)=gliptranc(3,i)+ssgradlip*pepliptran/2.0d0
9598 gliptranc(3,i-1)=gliptranc(3,i-1)+ssgradlip*pepliptran/2.0d0
9599 C gliptranc(3,i-2)=gliptranc(3,i)+ssgradlip*pepliptran
9600 elseif (positi.gt.bufliptop) then
9601 fracinbuf=1.0d0-((bordliptop-positi)/lipbufthick)
9602 sslip=sscalelip(fracinbuf)
9603 ssgradlip=sscagradlip(fracinbuf)/lipbufthick
9604 eliptran=eliptran+sslip*pepliptran
9605 gliptranc(3,i)=gliptranc(3,i)+ssgradlip*pepliptran/2.0d0
9606 gliptranc(3,i-1)=gliptranc(3,i-1)+ssgradlip*pepliptran/2.0d0
9607 C gliptranc(3,i-2)=gliptranc(3,i)+ssgradlip*pepliptran
9608 C print *, "doing sscalefor top part"
9609 C print *,i,sslip,fracinbuf,ssgradlip
9611 eliptran=eliptran+pepliptran
9612 C print *,"I am in true lipid"
9615 C eliptran=elpitran+0.0 ! I am in water
9618 C print *, "nic nie bylo w lipidzie?"
9619 C now multiply all by the peptide group transfer factor
9620 C eliptran=eliptran*pepliptran
9621 C now the same for side chains
9624 if (itype(i).eq.ntyp1) cycle
9625 positi=(mod(c(3,i+nres),boxzsize))
9626 if (positi.le.0) positi=positi+boxzsize
9627 C print *,mod(c(3,i+nres),boxzsize),bordlipbot,bordliptop
9628 c for each residue check if it is in lipid or lipid water border area
9629 C respos=mod(c(3,i+nres),boxzsize)
9630 C print *,positi,bordlipbot,buflipbot
9631 if ((positi.gt.bordlipbot)
9632 & .and.(positi.lt.bordliptop)) then
9633 C the energy transfer exist
9634 if (positi.lt.buflipbot) then
9636 & ((positi-bordlipbot)/lipbufthick)
9637 C lipbufthick is thickenes of lipid buffore
9638 sslip=sscalelip(fracinbuf)
9639 ssgradlip=-sscagradlip(fracinbuf)/lipbufthick
9640 eliptran=eliptran+sslip*liptranene(itype(i))
9641 gliptranx(3,i)=gliptranx(3,i)
9642 &+ssgradlip*liptranene(itype(i))
9643 gliptranc(3,i-1)= gliptranc(3,i-1)
9644 &+ssgradlip*liptranene(itype(i))
9645 C print *,"doing sccale for lower part"
9646 elseif (positi.gt.bufliptop) then
9648 &((bordliptop-positi)/lipbufthick)
9649 sslip=sscalelip(fracinbuf)
9650 ssgradlip=sscagradlip(fracinbuf)/lipbufthick
9651 eliptran=eliptran+sslip*liptranene(itype(i))
9652 gliptranx(3,i)=gliptranx(3,i)
9653 &+ssgradlip*liptranene(itype(i))
9654 gliptranc(3,i-1)= gliptranc(3,i-1)
9655 &+ssgradlip*liptranene(itype(i))
9656 C print *, "doing sscalefor top part",sslip,fracinbuf
9658 eliptran=eliptran+liptranene(itype(i))
9659 C print *,"I am in true lipid"
9661 endif ! if in lipid or buffor
9663 C eliptran=elpitran+0.0 ! I am in water
9669 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
9671 SUBROUTINE MATVEC2(A1,V1,V2)
9672 implicit real*8 (a-h,o-z)
9673 include 'DIMENSIONS'
9674 DIMENSION A1(2,2),V1(2),V2(2)
9678 c 3 VI=VI+A1(I,K)*V1(K)
9682 vaux1=a1(1,1)*v1(1)+a1(1,2)*v1(2)
9683 vaux2=a1(2,1)*v1(1)+a1(2,2)*v1(2)
9688 C---------------------------------------
9689 SUBROUTINE MATMAT2(A1,A2,A3)
9690 implicit real*8 (a-h,o-z)
9691 include 'DIMENSIONS'
9692 DIMENSION A1(2,2),A2(2,2),A3(2,2)
9693 c DIMENSION AI3(2,2)
9697 c A3IJ=A3IJ+A1(I,K)*A2(K,J)
9703 ai3_11=a1(1,1)*a2(1,1)+a1(1,2)*a2(2,1)
9704 ai3_12=a1(1,1)*a2(1,2)+a1(1,2)*a2(2,2)
9705 ai3_21=a1(2,1)*a2(1,1)+a1(2,2)*a2(2,1)
9706 ai3_22=a1(2,1)*a2(1,2)+a1(2,2)*a2(2,2)
9714 c-------------------------------------------------------------------------
9715 double precision function scalar2(u,v)
9717 double precision u(2),v(2)
9720 scalar2=u(1)*v(1)+u(2)*v(2)
9724 C-----------------------------------------------------------------------------
9726 subroutine transpose2(a,at)
9728 double precision a(2,2),at(2,2)
9735 c--------------------------------------------------------------------------
9736 subroutine transpose(n,a,at)
9739 double precision a(n,n),at(n,n)
9747 C---------------------------------------------------------------------------
9748 subroutine prodmat3(a1,a2,kk,transp,prod)
9751 double precision a1(2,2),a2(2,2),a2t(2,2),kk(2,2),prod(2,2)
9753 crc double precision auxmat(2,2),prod_(2,2)
9756 crc call transpose2(kk(1,1),auxmat(1,1))
9757 crc call matmat2(a1(1,1),auxmat(1,1),auxmat(1,1))
9758 crc call matmat2(auxmat(1,1),a2(1,1),prod_(1,1))
9760 prod(1,1)=(a1(1,1)*kk(1,1)+a1(1,2)*kk(1,2))*a2(1,1)
9761 & +(a1(1,1)*kk(2,1)+a1(1,2)*kk(2,2))*a2(2,1)
9762 prod(1,2)=(a1(1,1)*kk(1,1)+a1(1,2)*kk(1,2))*a2(1,2)
9763 & +(a1(1,1)*kk(2,1)+a1(1,2)*kk(2,2))*a2(2,2)
9764 prod(2,1)=(a1(2,1)*kk(1,1)+a1(2,2)*kk(1,2))*a2(1,1)
9765 & +(a1(2,1)*kk(2,1)+a1(2,2)*kk(2,2))*a2(2,1)
9766 prod(2,2)=(a1(2,1)*kk(1,1)+a1(2,2)*kk(1,2))*a2(1,2)
9767 & +(a1(2,1)*kk(2,1)+a1(2,2)*kk(2,2))*a2(2,2)
9770 crc call matmat2(a1(1,1),kk(1,1),auxmat(1,1))
9771 crc call matmat2(auxmat(1,1),a2(1,1),prod_(1,1))
9773 prod(1,1)=(a1(1,1)*kk(1,1)+a1(1,2)*kk(2,1))*a2(1,1)
9774 & +(a1(1,1)*kk(1,2)+a1(1,2)*kk(2,2))*a2(2,1)
9775 prod(1,2)=(a1(1,1)*kk(1,1)+a1(1,2)*kk(2,1))*a2(1,2)
9776 & +(a1(1,1)*kk(1,2)+a1(1,2)*kk(2,2))*a2(2,2)
9777 prod(2,1)=(a1(2,1)*kk(1,1)+a1(2,2)*kk(2,1))*a2(1,1)
9778 & +(a1(2,1)*kk(1,2)+a1(2,2)*kk(2,2))*a2(2,1)
9779 prod(2,2)=(a1(2,1)*kk(1,1)+a1(2,2)*kk(2,1))*a2(1,2)
9780 & +(a1(2,1)*kk(1,2)+a1(2,2)*kk(2,2))*a2(2,2)
9783 c call transpose2(a2(1,1),a2t(1,1))
9786 crc print *,((prod_(i,j),i=1,2),j=1,2)
9787 crc print *,((prod(i,j),i=1,2),j=1,2)
9791 C-----------------------------------------------------------------------------
9792 double precision function scalar(u,v)
9794 double precision u(3),v(3)
9804 C-----------------------------------------------------------------------
9805 double precision function sscale(r)
9806 double precision r,gamm
9807 include "COMMON.SPLITELE"
9808 if(r.lt.r_cut-rlamb) then
9810 else if(r.le.r_cut.and.r.ge.r_cut-rlamb) then
9811 gamm=(r-(r_cut-rlamb))/rlamb
9812 sscale=1.0d0+gamm*gamm*(2*gamm-3.0d0)
9818 C-----------------------------------------------------------------------
9819 C-----------------------------------------------------------------------
9820 double precision function sscagrad(r)
9821 double precision r,gamm
9822 include "COMMON.SPLITELE"
9823 if(r.lt.r_cut-rlamb) then
9825 else if(r.le.r_cut.and.r.ge.r_cut-rlamb) then
9826 gamm=(r-(r_cut-rlamb))/rlamb
9827 sscagrad=gamm*(6*gamm-6.0d0)/rlamb
9833 C-----------------------------------------------------------------------
9834 C-----------------------------------------------------------------------
9835 double precision function sscalelip(r)
9836 double precision r,gamm
9837 include "COMMON.SPLITELE"
9838 C if(r.lt.r_cut-rlamb) then
9840 C else if(r.le.r_cut.and.r.ge.r_cut-rlamb) then
9841 C gamm=(r-(r_cut-rlamb))/rlamb
9842 sscalelip=1.0d0+r*r*(2*r-3.0d0)
9848 C-----------------------------------------------------------------------
9849 double precision function sscagradlip(r)
9850 double precision r,gamm
9851 include "COMMON.SPLITELE"
9852 C if(r.lt.r_cut-rlamb) then
9854 C else if(r.le.r_cut.and.r.ge.r_cut-rlamb) then
9855 C gamm=(r-(r_cut-rlamb))/rlamb
9856 sscagradlip=r*(6*r-6.0d0)
9863 C-----------------------------------------------------------------------
9864 subroutine set_shield_fac
9865 implicit real*8 (a-h,o-z)
9866 include 'DIMENSIONS'
9867 include 'DIMENSIONS.ZSCOPT'
9868 include 'COMMON.CHAIN'
9869 include 'COMMON.DERIV'
9870 include 'COMMON.IOUNITS'
9871 include 'COMMON.SHIELD'
9872 include 'COMMON.INTERACT'
9873 C this is the squar root 77 devided by 81 the epislion in lipid (in protein)
9874 double precision div77_81/0.974996043d0/,
9875 &div4_81/0.2222222222d0/,sh_frac_dist_grad(3)
9877 C the vector between center of side_chain and peptide group
9878 double precision pep_side(3),long,side_calf(3),
9879 &pept_group(3),costhet_grad(3),cosphi_grad_long(3),
9880 &cosphi_grad_loc(3),pep_side_norm(3),side_calf_norm(3)
9881 C the line belowe needs to be changed for FGPROC>1
9883 if ((itype(i).eq.ntyp1).and.itype(i+1).eq.ntyp1) cycle
9885 Cif there two consequtive dummy atoms there is no peptide group between them
9886 C the line below has to be changed for FGPROC>1
9889 if ((itype(k).eq.ntyp1).or.(itype(k).eq.10)) cycle
9893 C first lets set vector conecting the ithe side-chain with kth side-chain
9894 pep_side(j)=c(j,k+nres)-(c(j,i)+c(j,i+1))/2.0d0
9896 C and vector conecting the side-chain with its proper calfa
9897 side_calf(j)=c(j,k+nres)-c(j,k)
9898 C side_calf(j)=2.0d0
9899 pept_group(j)=c(j,i)-c(j,i+1)
9900 C lets have their lenght
9901 dist_pep_side=pep_side(j)**2+dist_pep_side
9902 dist_side_calf=dist_side_calf+side_calf(j)**2
9903 dist_pept_group=dist_pept_group+pept_group(j)**2
9905 dist_pep_side=dsqrt(dist_pep_side)
9906 dist_pept_group=dsqrt(dist_pept_group)
9907 dist_side_calf=dsqrt(dist_side_calf)
9909 pep_side_norm(j)=pep_side(j)/dist_pep_side
9910 side_calf_norm(j)=dist_side_calf
9912 C now sscale fraction
9913 sh_frac_dist=-(dist_pep_side-rpp(1,1)-buff_shield)/buff_shield
9914 C print *,buff_shield,"buff"
9916 if (sh_frac_dist.le.0.0) cycle
9917 C If we reach here it means that this side chain reaches the shielding sphere
9918 C Lets add him to the list for gradient
9919 ishield_list(i)=ishield_list(i)+1
9920 C ishield_list is a list of non 0 side-chain that contribute to factor gradient
9921 C this list is essential otherwise problem would be O3
9922 shield_list(ishield_list(i),i)=k
9923 C Lets have the sscale value
9924 if (sh_frac_dist.gt.1.0) then
9925 scale_fac_dist=1.0d0
9927 sh_frac_dist_grad(j)=0.0d0
9930 scale_fac_dist=-sh_frac_dist*sh_frac_dist
9931 & *(2.0*sh_frac_dist-3.0d0)
9932 fac_help_scale=6.0*(sh_frac_dist-sh_frac_dist**2)
9933 & /dist_pep_side/buff_shield*0.5
9934 C remember for the final gradient multiply sh_frac_dist_grad(j)
9935 C for side_chain by factor -2 !
9937 sh_frac_dist_grad(j)=fac_help_scale*pep_side(j)
9938 C print *,"jestem",scale_fac_dist,fac_help_scale,
9939 C & sh_frac_dist_grad(j)
9942 C if ((i.eq.3).and.(k.eq.2)) then
9943 C print *,i,sh_frac_dist,dist_pep,fac_help_scale,scale_fac_dist
9947 C this is what is now we have the distance scaling now volume...
9948 short=short_r_sidechain(itype(k))
9949 long=long_r_sidechain(itype(k))
9950 costhet=1.0d0/dsqrt(1.0+short**2/dist_pep_side**2)
9953 costhet_fac=costhet**3*short**2*(-0.5)/dist_pep_side**4
9956 costhet_grad(j)=costhet_fac*pep_side(j)
9958 C remember for the final gradient multiply costhet_grad(j)
9959 C for side_chain by factor -2 !
9960 C fac alfa is angle between CB_k,CA_k, CA_i,CA_i+1
9961 C pep_side0pept_group is vector multiplication
9962 pep_side0pept_group=0.0
9964 pep_side0pept_group=pep_side0pept_group+pep_side(j)*side_calf(j)
9966 cosalfa=(pep_side0pept_group/
9967 & (dist_pep_side*dist_side_calf))
9968 fac_alfa_sin=1.0-cosalfa**2
9969 fac_alfa_sin=dsqrt(fac_alfa_sin)
9970 rkprim=fac_alfa_sin*(long-short)+short
9972 cosphi=1.0d0/dsqrt(1.0+rkprim**2/dist_pep_side**2)
9973 cosphi_fac=cosphi**3*rkprim**2*(-0.5)/dist_pep_side**4
9976 cosphi_grad_long(j)=cosphi_fac*pep_side(j)
9977 &+cosphi**3*0.5/dist_pep_side**2*(-rkprim)
9978 &*(long-short)/fac_alfa_sin*cosalfa/
9979 &((dist_pep_side*dist_side_calf))*
9980 &((side_calf(j))-cosalfa*
9981 &((pep_side(j)/dist_pep_side)*dist_side_calf))
9983 cosphi_grad_loc(j)=cosphi**3*0.5/dist_pep_side**2*(-rkprim)
9984 &*(long-short)/fac_alfa_sin*cosalfa
9985 &/((dist_pep_side*dist_side_calf))*
9987 &cosalfa*side_calf(j)/dist_side_calf*dist_pep_side)
9990 VofOverlap=VSolvSphere/2.0d0*(1.0-costhet)*(1.0-cosphi)
9993 C now the gradient...
9994 C grad_shield is gradient of Calfa for peptide groups
9995 C write(iout,*) "shield_compon",i,k,VSolvSphere,scale_fac_dist,
9997 C write(iout,*) "cosphi_compon",i,k,pep_side0pept_group,
9998 C & dist_pep_side,dist_side_calf,c(1,k+nres),c(1,k),itype(k)
10000 grad_shield(j,i)=grad_shield(j,i)
10001 C gradient po skalowaniu
10002 & +(sh_frac_dist_grad(j)
10003 C gradient po costhet
10004 &-scale_fac_dist*costhet_grad(j)/(1.0-costhet)
10005 &-scale_fac_dist*(cosphi_grad_long(j))
10006 &/(1.0-cosphi) )*div77_81
10008 C grad_shield_side is Cbeta sidechain gradient
10009 grad_shield_side(j,ishield_list(i),i)=
10010 & (sh_frac_dist_grad(j)*(-2.0d0)
10011 & +scale_fac_dist*costhet_grad(j)*2.0d0/(1.0-costhet)
10012 & +scale_fac_dist*(cosphi_grad_long(j))
10013 & *2.0d0/(1.0-cosphi))
10014 & *div77_81*VofOverlap
10016 grad_shield_loc(j,ishield_list(i),i)=
10017 & scale_fac_dist*cosphi_grad_loc(j)
10018 & *2.0d0/(1.0-cosphi)
10019 & *div77_81*VofOverlap
10021 VolumeTotal=VolumeTotal+VofOverlap*scale_fac_dist
10023 fac_shield(i)=VolumeTotal*div77_81+div4_81
10024 C write(2,*) "TOTAL VOLUME",i,VolumeTotal,fac_shield(i)
10028 C--------------------------------------------------------------------------
10029 C first for shielding is setting of function of side-chains
10030 subroutine set_shield_fac2
10031 implicit real*8 (a-h,o-z)
10032 include 'DIMENSIONS'
10033 include 'DIMENSIONS.ZSCOPT'
10034 include 'COMMON.CHAIN'
10035 include 'COMMON.DERIV'
10036 include 'COMMON.IOUNITS'
10037 include 'COMMON.SHIELD'
10038 include 'COMMON.INTERACT'
10039 C this is the squar root 77 devided by 81 the epislion in lipid (in protein)
10040 double precision div77_81/0.974996043d0/,
10041 &div4_81/0.2222222222d0/,sh_frac_dist_grad(3)
10043 C the vector between center of side_chain and peptide group
10044 double precision pep_side(3),long,side_calf(3),
10045 &pept_group(3),costhet_grad(3),cosphi_grad_long(3),
10046 &cosphi_grad_loc(3),pep_side_norm(3),side_calf_norm(3)
10047 C the line belowe needs to be changed for FGPROC>1
10049 if ((itype(i).eq.ntyp1).and.itype(i+1).eq.ntyp1) cycle
10051 Cif there two consequtive dummy atoms there is no peptide group between them
10052 C the line below has to be changed for FGPROC>1
10055 if ((itype(k).eq.ntyp1).or.(itype(k).eq.10)) cycle
10059 C first lets set vector conecting the ithe side-chain with kth side-chain
10060 pep_side(j)=c(j,k+nres)-(c(j,i)+c(j,i+1))/2.0d0
10061 C pep_side(j)=2.0d0
10062 C and vector conecting the side-chain with its proper calfa
10063 side_calf(j)=c(j,k+nres)-c(j,k)
10064 C side_calf(j)=2.0d0
10065 pept_group(j)=c(j,i)-c(j,i+1)
10066 C lets have their lenght
10067 dist_pep_side=pep_side(j)**2+dist_pep_side
10068 dist_side_calf=dist_side_calf+side_calf(j)**2
10069 dist_pept_group=dist_pept_group+pept_group(j)**2
10071 dist_pep_side=dsqrt(dist_pep_side)
10072 dist_pept_group=dsqrt(dist_pept_group)
10073 dist_side_calf=dsqrt(dist_side_calf)
10075 pep_side_norm(j)=pep_side(j)/dist_pep_side
10076 side_calf_norm(j)=dist_side_calf
10078 C now sscale fraction
10079 sh_frac_dist=-(dist_pep_side-rpp(1,1)-buff_shield)/buff_shield
10080 C print *,buff_shield,"buff"
10082 if (sh_frac_dist.le.0.0) cycle
10083 C If we reach here it means that this side chain reaches the shielding sphere
10084 C Lets add him to the list for gradient
10085 ishield_list(i)=ishield_list(i)+1
10086 C ishield_list is a list of non 0 side-chain that contribute to factor gradient
10087 C this list is essential otherwise problem would be O3
10088 shield_list(ishield_list(i),i)=k
10089 C Lets have the sscale value
10090 if (sh_frac_dist.gt.1.0) then
10091 scale_fac_dist=1.0d0
10093 sh_frac_dist_grad(j)=0.0d0
10096 scale_fac_dist=-sh_frac_dist*sh_frac_dist
10097 & *(2.0d0*sh_frac_dist-3.0d0)
10098 fac_help_scale=6.0d0*(sh_frac_dist-sh_frac_dist**2)
10099 & /dist_pep_side/buff_shield*0.5d0
10100 C remember for the final gradient multiply sh_frac_dist_grad(j)
10101 C for side_chain by factor -2 !
10103 sh_frac_dist_grad(j)=fac_help_scale*pep_side(j)
10104 C sh_frac_dist_grad(j)=0.0d0
10105 C scale_fac_dist=1.0d0
10106 C print *,"jestem",scale_fac_dist,fac_help_scale,
10107 C & sh_frac_dist_grad(j)
10110 C this is what is now we have the distance scaling now volume...
10111 short=short_r_sidechain(itype(k))
10112 long=long_r_sidechain(itype(k))
10113 costhet=1.0d0/dsqrt(1.0d0+short**2/dist_pep_side**2)
10114 sinthet=short/dist_pep_side*costhet
10118 costhet_fac=costhet**3*short**2*(-0.5d0)/dist_pep_side**4
10119 C sinthet_fac=costhet**2*0.5d0*(short**3/dist_pep_side**4*costhet
10120 C & -short/dist_pep_side**2/costhet)
10121 C costhet_fac=0.0d0
10123 costhet_grad(j)=costhet_fac*pep_side(j)
10125 C remember for the final gradient multiply costhet_grad(j)
10126 C for side_chain by factor -2 !
10127 C fac alfa is angle between CB_k,CA_k, CA_i,CA_i+1
10128 C pep_side0pept_group is vector multiplication
10129 pep_side0pept_group=0.0d0
10131 pep_side0pept_group=pep_side0pept_group+pep_side(j)*side_calf(j)
10133 cosalfa=(pep_side0pept_group/
10134 & (dist_pep_side*dist_side_calf))
10135 fac_alfa_sin=1.0d0-cosalfa**2
10136 fac_alfa_sin=dsqrt(fac_alfa_sin)
10137 rkprim=fac_alfa_sin*(long-short)+short
10141 cosphi=1.0d0/dsqrt(1.0d0+rkprim**2/dist_pep_side**2)
10143 cosphi_fac=cosphi**3*rkprim**2*(-0.5d0)/dist_pep_side**4
10144 sinphi=rkprim/dist_pep_side/dsqrt(1.0d0+rkprim**2/
10145 & dist_pep_side**2)
10148 cosphi_grad_long(j)=cosphi_fac*pep_side(j)
10149 &+cosphi**3*0.5d0/dist_pep_side**2*(-rkprim)
10150 &*(long-short)/fac_alfa_sin*cosalfa/
10151 &((dist_pep_side*dist_side_calf))*
10152 &((side_calf(j))-cosalfa*
10153 &((pep_side(j)/dist_pep_side)*dist_side_calf))
10154 C cosphi_grad_long(j)=0.0d0
10155 cosphi_grad_loc(j)=cosphi**3*0.5d0/dist_pep_side**2*(-rkprim)
10156 &*(long-short)/fac_alfa_sin*cosalfa
10157 &/((dist_pep_side*dist_side_calf))*
10159 &cosalfa*side_calf(j)/dist_side_calf*dist_pep_side)
10160 C cosphi_grad_loc(j)=0.0d0
10162 C print *,sinphi,sinthet
10163 VofOverlap=VSolvSphere/2.0d0*(1.0d0-dsqrt(1.0d0-sinphi*sinthet))
10166 C now the gradient...
10168 grad_shield(j,i)=grad_shield(j,i)
10169 C gradient po skalowaniu
10170 & +(sh_frac_dist_grad(j)*VofOverlap
10171 C gradient po costhet
10172 & +scale_fac_dist*VSolvSphere/VSolvSphere_div/4.0d0*
10173 &(1.0d0/(-dsqrt(1.0d0-sinphi*sinthet))*(
10174 & sinphi/sinthet*costhet*costhet_grad(j)
10175 & +sinthet/sinphi*cosphi*cosphi_grad_long(j)))
10177 C grad_shield_side is Cbeta sidechain gradient
10178 grad_shield_side(j,ishield_list(i),i)=
10179 & (sh_frac_dist_grad(j)*(-2.0d0)
10181 & -scale_fac_dist*VSolvSphere/VSolvSphere_div/2.0d0*
10182 &(1.0d0/(-dsqrt(1.0d0-sinphi*sinthet))*(
10183 & sinphi/sinthet*costhet*costhet_grad(j)
10184 & +sinthet/sinphi*cosphi*cosphi_grad_long(j)))
10187 grad_shield_loc(j,ishield_list(i),i)=
10188 & scale_fac_dist*VSolvSphere/VSolvSphere_div/2.0d0*
10189 &(1.0d0/(dsqrt(1.0d0-sinphi*sinthet))*(
10190 & sinthet/sinphi*cosphi*cosphi_grad_loc(j)
10194 VolumeTotal=VolumeTotal+VofOverlap*scale_fac_dist
10196 fac_shield(i)=VolumeTotal*wshield+(1.0d0-wshield)
10197 c write(2,*) "TOTAL VOLUME",i,VolumeTotal,fac_shield(i),
10198 c & " wshield",wshield
10199 c write(2,*) "TU",rpp(1,1),short,long,buff_shield
10203 C--------------------------------------------------------------------------
10204 double precision function tschebyshev(m,n,x,y)
10206 include "DIMENSIONS"
10208 double precision x(n),y,yy(0:maxvar),aux
10209 c Tschebyshev polynomial. Note that the first term is omitted
10210 c m=0: the constant term is included
10211 c m=1: the constant term is not included
10215 yy(i)=2*yy(1)*yy(i-1)-yy(i-2)
10224 C--------------------------------------------------------------------------
10225 double precision function gradtschebyshev(m,n,x,y)
10227 include "DIMENSIONS"
10229 double precision x(n+1),y,yy(0:maxvar),aux
10230 c Tschebyshev polynomial. Note that the first term is omitted
10231 c m=0: the constant term is included
10232 c m=1: the constant term is not included
10236 yy(i)=2*y*yy(i-1)-yy(i-2)
10240 aux=aux+x(i+1)*yy(i)*(i+1)
10241 C print *, x(i+1),yy(i),i
10243 gradtschebyshev=aux
10246 c----------------------------------------------------------------------------
10247 double precision function sscale2(r,r_cut,r0,rlamb)
10249 double precision r,gamm,r_cut,r0,rlamb,rr
10251 c write (2,*) "r",r," r_cut",r_cut," r0",r0," rlamb",rlamb
10252 c write (2,*) "rr",rr
10253 if(rr.lt.r_cut-rlamb) then
10255 else if(rr.le.r_cut.and.rr.ge.r_cut-rlamb) then
10256 gamm=(rr-(r_cut-rlamb))/rlamb
10257 sscale2=1.0d0+gamm*gamm*(2*gamm-3.0d0)
10263 C-----------------------------------------------------------------------
10264 double precision function sscalgrad2(r,r_cut,r0,rlamb)
10266 double precision r,gamm,r_cut,r0,rlamb,rr
10268 if(rr.lt.r_cut-rlamb) then
10270 else if(rr.le.r_cut.and.rr.ge.r_cut-rlamb) then
10271 gamm=(rr-(r_cut-rlamb))/rlamb
10273 sscalgrad2=gamm*(6*gamm-6.0d0)/rlamb
10275 sscalgrad2=-gamm*(6*gamm-6.0d0)/rlamb
10282 c----------------------------------------------------------------------------
10283 subroutine e_saxs(Esaxs_constr)
10285 include 'DIMENSIONS'
10286 include 'DIMENSIONS.ZSCOPT'
10287 include 'DIMENSIONS.FREE'
10290 include "COMMON.SETUP"
10293 include 'COMMON.SBRIDGE'
10294 include 'COMMON.CHAIN'
10295 include 'COMMON.GEO'
10296 include 'COMMON.LOCAL'
10297 include 'COMMON.INTERACT'
10298 include 'COMMON.VAR'
10299 include 'COMMON.IOUNITS'
10300 include 'COMMON.DERIV'
10301 include 'COMMON.CONTROL'
10302 include 'COMMON.NAMES'
10303 include 'COMMON.FFIELD'
10304 include 'COMMON.LANGEVIN'
10306 double precision Esaxs_constr
10307 integer i,iint,j,k,l
10308 double precision PgradC(maxSAXS,3,maxres),
10309 & PgradX(maxSAXS,3,maxres),Pcalc(maxSAXS)
10311 double precision PgradC_(maxSAXS,3,maxres),
10312 & PgradX_(maxSAXS,3,maxres),Pcalc_(maxSAXS)
10314 double precision dk,dijCACA,dijCASC,dijSCCA,dijSCSC,
10315 & sigma2CACA,sigma2CASC,sigma2SCCA,sigma2SCSC,expCACA,expCASC,
10316 & expSCCA,expSCSC,CASCgrad,SCCAgrad,SCSCgrad,aux,auxC,auxC1,
10317 & auxX,auxX1,CACAgrad,Cnorm
10318 double precision sss2,ssgrad2,rrr,sscalgrad2,sscale2
10319 double precision dist
10321 c SAXS restraint penalty function
10323 write(iout,*) "------- SAXS penalty function start -------"
10324 write (iout,*) "nsaxs",nsaxs
10325 write (iout,*) "Esaxs: iatsc_s",iatsc_s," iatsc_e",iatsc_e
10326 write (iout,*) "Psaxs"
10328 write (iout,'(i5,e15.5)') i, Psaxs(i)
10331 Esaxs_constr = 0.0d0
10336 PgradC(k,l,j)=0.0d0
10337 PgradX(k,l,j)=0.0d0
10341 do i=iatsc_s,iatsc_e
10342 if (itype(i).eq.ntyp1) cycle
10343 do iint=1,nint_gr(i)
10344 do j=istart(i,iint),iend(i,iint)
10345 if (itype(j).eq.ntyp1) cycle
10348 dijCASC=dist(i,j+nres)
10349 dijSCCA=dist(i+nres,j)
10350 dijSCSC=dist(i+nres,j+nres)
10351 sigma2CACA=2.0d0/(pstok**2)
10352 sigma2CASC=4.0d0/(pstok**2+restok(itype(j))**2)
10353 sigma2SCCA=4.0d0/(pstok**2+restok(itype(i))**2)
10354 sigma2SCSC=4.0d0/(restok(itype(j))**2+restok(itype(i))**2)
10357 expCACA = dexp(-0.5d0*sigma2CACA*(dijCACA-dk)**2)
10358 if (itype(j).ne.10) then
10359 expCASC = dexp(-0.5d0*sigma2CASC*(dijCASC-dk)**2)
10363 if (itype(i).ne.10) then
10364 expSCCA = dexp(-0.5d0*sigma2SCCA*(dijSCCA-dk)**2)
10368 if (itype(i).ne.10 .and. itype(j).ne.10) then
10369 expSCSC = dexp(-0.5d0*sigma2SCSC*(dijSCSC-dk)**2)
10373 Pcalc(k) = Pcalc(k)+expCACA+expCASC+expSCCA+expSCSC
10375 write(iout,*) "i j k Pcalc",i,j,Pcalc(k)
10377 CACAgrad = sigma2CACA*(dijCACA-dk)*expCACA
10378 CASCgrad = sigma2CASC*(dijCASC-dk)*expCASC
10379 SCCAgrad = sigma2SCCA*(dijSCCA-dk)*expSCCA
10380 SCSCgrad = sigma2SCSC*(dijSCSC-dk)*expSCSC
10383 aux = CACAgrad*(C(l,j)-C(l,i))/dijCACA
10384 PgradC(k,l,i) = PgradC(k,l,i)-aux
10385 PgradC(k,l,j) = PgradC(k,l,j)+aux
10387 if (itype(j).ne.10) then
10388 aux = CASCgrad*(C(l,j+nres)-C(l,i))/dijCASC
10389 PgradC(k,l,i) = PgradC(k,l,i)-aux
10390 PgradC(k,l,j) = PgradC(k,l,j)+aux
10391 PgradX(k,l,j) = PgradX(k,l,j)+aux
10394 if (itype(i).ne.10) then
10395 aux = SCCAgrad*(C(l,j)-C(l,i+nres))/dijSCCA
10396 PgradX(k,l,i) = PgradX(k,l,i)-aux
10397 PgradC(k,l,i) = PgradC(k,l,i)-aux
10398 PgradC(k,l,j) = PgradC(k,l,j)+aux
10401 if (itype(i).ne.10 .and. itype(j).ne.10) then
10402 aux = SCSCgrad*(C(l,j+nres)-C(l,i+nres))/dijSCSC
10403 PgradC(k,l,i) = PgradC(k,l,i)-aux
10404 PgradC(k,l,j) = PgradC(k,l,j)+aux
10405 PgradX(k,l,i) = PgradX(k,l,i)-aux
10406 PgradX(k,l,j) = PgradX(k,l,j)+aux
10412 sigma2CACA=scal_rad**2*0.25d0/
10413 & (restok(itype(j))**2+restok(itype(i))**2)
10415 IF (saxs_cutoff.eq.0) THEN
10418 expCACA = dexp(-0.5d0*sigma2CACA*(dijCACA-dk)**2)
10419 Pcalc(k) = Pcalc(k)+expCACA
10420 CACAgrad = sigma2CACA*(dijCACA-dk)*expCACA
10422 aux = CACAgrad*(C(l,j)-C(l,i))/dijCACA
10423 PgradC(k,l,i) = PgradC(k,l,i)-aux
10424 PgradC(k,l,j) = PgradC(k,l,j)+aux
10428 rrr = saxs_cutoff*2.0d0/dsqrt(sigma2CACA)
10431 c write (2,*) "ijk",i,j,k
10432 sss2 = sscale2(dijCACA,rrr,dk,0.3d0)
10433 if (sss2.eq.0.0d0) cycle
10434 ssgrad2 = sscalgrad2(dijCACA,rrr,dk,0.3d0)
10435 expCACA = dexp(-0.5d0*sigma2CACA*(dijCACA-dk)**2)*sss2
10436 Pcalc(k) = Pcalc(k)+expCACA
10438 write(iout,*) "i j k Pcalc",i,j,Pcalc(k)
10440 CACAgrad = -sigma2CACA*(dijCACA-dk)*expCACA+
10441 & ssgrad2*expCACA/sss2
10444 aux = CACAgrad*(C(l,j)-C(l,i))/dijCACA
10445 PgradC(k,l,i) = PgradC(k,l,i)+aux
10446 PgradC(k,l,j) = PgradC(k,l,j)-aux
10455 if (nfgtasks.gt.1) then
10456 call MPI_Reduce(Pcalc(1),Pcalc_(1),nsaxs,MPI_DOUBLE_PRECISION,
10457 & MPI_SUM,king,FG_COMM,IERR)
10458 if (fg_rank.eq.king) then
10460 Pcalc(k) = Pcalc_(k)
10463 call MPI_Reduce(PgradC(k,1,1),PgradC_(k,1,1),3*maxsaxs*nres,
10464 & MPI_DOUBLE_PRECISION,MPI_SUM,king,FG_COMM,IERR)
10465 if (fg_rank.eq.king) then
10469 PgradC(k,l,i) = PgradC_(k,l,i)
10475 call MPI_Reduce(PgradX(k,1,1),PgradX_(k,1,1),3*maxsaxs*nres,
10476 & MPI_DOUBLE_PRECISION,MPI_SUM,king,FG_COMM,IERR)
10477 if (fg_rank.eq.king) then
10481 PgradX(k,l,i) = PgradX_(k,l,i)
10490 if (fg_rank.eq.king) then
10494 Cnorm = Cnorm + Pcalc(k)
10496 Esaxs_constr = dlog(Cnorm)-wsaxs0
10498 if (Pcalc(k).gt.0.0d0)
10499 & Esaxs_constr = Esaxs_constr - Psaxs(k)*dlog(Pcalc(k))
10501 write (iout,*) "k",k," Esaxs_constr",Esaxs_constr
10505 write (iout,*) "Cnorm",Cnorm," Esaxs_constr",Esaxs_constr
10515 & auxC = auxC +Psaxs(k)*PgradC(k,l,i)/Pcalc(k)
10516 auxC1 = auxC1+PgradC(k,l,i)
10518 auxX = auxX +Psaxs(k)*PgradX(k,l,i)/Pcalc(k)
10519 auxX1 = auxX1+PgradX(k,l,i)
10522 gsaxsC(l,i) = auxC - auxC1/Cnorm
10524 gsaxsX(l,i) = auxX - auxX1/Cnorm
10526 c write (iout,*) "l i",l,i," gradC",wsaxs*(auxC - auxC1/Cnorm),
10527 c * " gradX",wsaxs*(auxX - auxX1/Cnorm)
10535 c----------------------------------------------------------------------------
10536 subroutine e_saxsC(Esaxs_constr)
10538 include 'DIMENSIONS'
10539 include 'DIMENSIONS.ZSCOPT'
10540 include 'DIMENSIONS.FREE'
10543 include "COMMON.SETUP"
10546 include 'COMMON.SBRIDGE'
10547 include 'COMMON.CHAIN'
10548 include 'COMMON.GEO'
10549 include 'COMMON.LOCAL'
10550 include 'COMMON.INTERACT'
10551 include 'COMMON.VAR'
10552 include 'COMMON.IOUNITS'
10553 include 'COMMON.DERIV'
10554 include 'COMMON.CONTROL'
10555 include 'COMMON.NAMES'
10556 include 'COMMON.FFIELD'
10557 include 'COMMON.LANGEVIN'
10559 double precision Esaxs_constr
10560 integer i,iint,j,k,l
10561 double precision PgradC(3,maxres),PgradX(3,maxres),Pcalc,logPtot
10563 double precision gsaxsc_(3,maxres),gsaxsx_(3,maxres),logPtot_
10565 double precision dk,dijCASPH,dijSCSPH,
10566 & sigma2CA,sigma2SC,expCASPH,expSCSPH,
10567 & CASPHgrad,SCSPHgrad,aux,auxC,auxC1,
10569 c SAXS restraint penalty function
10571 write(iout,*) "------- SAXS penalty function start -------"
10572 write (iout,*) "nsaxs",nsaxs," isaxs_start",isaxs_start,
10573 & " isaxs_end",isaxs_end
10574 write (iout,*) "nnt",nnt," ntc",nct
10576 write(iout,'(a6,i5,3f10.5,5x,2f10.5)')
10577 & "CA",i,(C(j,i),j=1,3),pstok,restok(itype(i))
10580 write(iout,'(a6,i5,3f10.5)')"CSaxs",i,(Csaxs(j,i),j=1,3)
10583 Esaxs_constr = 0.0d0
10585 do j=isaxs_start,isaxs_end
10597 dijCASPH=dijCASPH+(C(l,i)-Csaxs(l,j))**2
10599 if (itype(i).ne.10) then
10601 dijSCSPH=dijSCSPH+(C(l,i+nres)-Csaxs(l,j))**2
10604 sigma2CA=2.0d0/pstok**2
10605 sigma2SC=4.0d0/restok(itype(i))**2
10606 expCASPH = dexp(-0.5d0*sigma2CA*dijCASPH)
10607 expSCSPH = dexp(-0.5d0*sigma2SC*dijSCSPH)
10608 Pcalc = Pcalc+expCASPH+expSCSPH
10610 write(*,*) "processor i j Pcalc",
10611 & MyRank,i,j,dijCASPH,dijSCSPH, Pcalc
10613 CASPHgrad = sigma2CA*expCASPH
10614 SCSPHgrad = sigma2SC*expSCSPH
10616 aux = (C(l,i+nres)-Csaxs(l,j))*SCSPHgrad
10617 PgradX(l,i) = PgradX(l,i) + aux
10618 PgradC(l,i) = PgradC(l,i)+(C(l,i)-Csaxs(l,j))*CASPHgrad+aux
10623 gsaxsc(l,i)=gsaxsc(l,i)+PgradC(l,i)/Pcalc
10624 gsaxsx(l,i)=gsaxsx(l,i)+PgradX(l,i)/Pcalc
10627 logPtot = logPtot - dlog(Pcalc)
10628 c print *,"me",me,MyRank," j",j," logPcalc",-dlog(Pcalc),
10629 c & " logPtot",logPtot
10632 if (nfgtasks.gt.1) then
10633 c write (iout,*) "logPtot before reduction",logPtot
10634 call MPI_Reduce(logPtot,logPtot_,1,MPI_DOUBLE_PRECISION,
10635 & MPI_SUM,king,FG_COMM,IERR)
10637 c write (iout,*) "logPtot after reduction",logPtot
10638 call MPI_Reduce(gsaxsC(1,1),gsaxsC_(1,1),3*nres,
10639 & MPI_DOUBLE_PRECISION,MPI_SUM,king,FG_COMM,IERR)
10640 if (fg_rank.eq.king) then
10643 gsaxsC(l,i) = gsaxsC_(l,i)
10647 call MPI_Reduce(gsaxsX(1,1),gsaxsX_(1,1),3*nres,
10648 & MPI_DOUBLE_PRECISION,MPI_SUM,king,FG_COMM,IERR)
10649 if (fg_rank.eq.king) then
10652 gsaxsX(l,i) = gsaxsX_(l,i)
10658 Esaxs_constr = logPtot