4 include "DIMENSIONS.ZSCOPT"
7 integer Ierror,Errcode,status(MPI_STATUS_SIZE),tag
10 include "COMMON.CONTROL"
11 include "COMMON.ENERGIES"
12 include "COMMON.VMCPAR"
13 include "COMMON.OPTIM"
14 include "COMMON.WEIGHTS"
15 include "COMMON.PROTNAME"
16 include "COMMON.IOUNITS"
17 include "COMMON.FFIELD"
18 include "COMMON.PROTFILES"
19 include "COMMON.COMPAR"
20 include "COMMON.CHAIN"
21 include "COMMON.CLASSES"
22 include "COMMON.THERMAL"
23 include "COMMON.WEIGHTDER"
25 include "COMMON.SBRIDGE"
26 include "COMMON.INTERACT"
28 include "COMMON.TIME1"
29 include "COMMON.FMATCH"
30 double precision fac0,t0
31 real csingle(3,maxres2)
32 double precision entfacmax,sument,sumentsq,aux
33 double precision creff(3,maxres2),cc(3,maxres2)
34 double precision thetareff(maxres2),phireff(maxres2),
35 & xxreff(maxres2),yyreff(maxres2),zzreff(maxres2)
36 double precision przes(3),obrot(3,3),etoti
37 integer iprot,i,ind,ii,j,k,kk,l,ncl,is,ie,nsum,nng,nvarr,ng,
38 & inn,in,iref,ib,ibatch,num,itmp,imin,iperm
39 integer jj,istart_conf,iend_conf,ipass_conf,iii
42 double precision ej,emaxj,sumP,sumP_t
44 double precision dx,dy,dz,dxref,dyref,dzref,
45 & dtheta,dphi,rmsthet,rmsphi,rmsside
47 double precision e_total_T_(maxstr_proc)
49 double precision rms,rmsave,rmsmin,rmsnat,rmscalc,rmscalc_thet,
50 & rmscalc_phi,rmscalc_side,qwolynes,qwolyness
54 call restore_molinfo(iprot)
56 open (icbase,file=bprotfiles(iprot),status="old",
57 & form="unformatted",access="direct",recl=lenrec(iprot))
58 entfacmax=entfac(1,iprot)
59 sument=entfac(1,iprot)
60 sumentsq=entfac(1,iprot)**2
61 do i=2,ntot_work(iprot)
62 if (entfac(i,iprot).gt.entfacmax) entfacmax=entfac(i,iprot)
63 sument=sument+entfac(i,iprot)
64 sumentsq=sumentsq+entfac(i,iprot)**2
66 sument=sument/ntot_work(iprot)
67 sumentsq=dsqrt(sumentsq/ntot_work(iprot)-sument**2)
68 write (2,*) "entfacmax",entfacmax," entave",sument,
72 nchunk_conf(iprot) = iroof(scount(me1,iprot),maxstr_proc)
76 do i=indstart(me1,iprot),indend(me1,iprot),maxstr_proc
77 ipass_conf=ipass_conf+1
78 write (iout,*) "Pass",ipass_conf
80 iend_conf=min0(i+maxstr_proc-1,indend(me1,iprot))
82 nchunk_conf(iprot) = iroof(ntot(iprot),maxstr_proc)
85 do i=1,ntot(iprot),maxstr_proc
86 ipass_conf=ipass_conf+1
87 write (iout,*) "Pass",ipass_conf
89 iend_conf=min0(i+maxstr_proc-1,ntot(iprot))
92 c Read the chunk of conformations off a DA scratchfile.
94 call daread_ccoords(iprot,istart_conf,iend_conf)
96 IF (GEOM_AND_WHAM_WEIGHTS) THEN
99 do ib=1,nbeta(1,iprot)
100 write (iout,*) "IB",ib," IPROT",iprot," NREF",nref(ib,iprot)
102 do iii=istart_conf,iend_conf
108 etoti=etoti+ww(k)*escal(k,ib,1,iprot)
111 e_total_T(iii,ib)=entfac(kk,iprot)
112 & +betaT(ib,1,iprot)*(etoti-elowest(ib,1,iprot))
116 write (iout,*) "Energies before Gather"
117 do iii=1,ntot_work(iprot)
118 write (iout,'(i5,100E12.5)') iii,
119 & (e_total_T(iii,ib),ib=1,nbeta(1,iprot))
123 do ib=1,nbeta(1,iprot)
124 do k=1,scount(me1,iprot)
125 e_total_T_(k)=e_total_T(indstart(me1,iprot)+k-1,ib)
127 c call MPI_AllGatherv(e_total_T(indstart(me1,iprot),ib),
128 c & scount(me1,iprot),MPI_DOUBLE_PRECISION,e_total_T(1,ib),
129 c & scount(0,iprot),idispl(0,iprot),MPI_DOUBLE_PRECISION,
131 call MPI_AllGatherv(e_total_T_(1),
132 & scount(me1,iprot),MPI_DOUBLE_PRECISION,e_total_T(1,ib),
133 & scount(0,iprot),idispl(0,iprot),MPI_DOUBLE_PRECISION,
137 write (iout,*) "Energies after Gather"
138 do iii=1,ntot_work(iprot)
139 write (iout,'(i5,100E12.5)') iii,
140 & (e_total_T(iii,ib),ib=1,nbeta(1,iprot))
145 ENDIF ! GEOM_AND_WHAM_WEIGHTS
148 c write (iout,*) "Start calculating weirms",istart_conf,iend_conf
149 do iii=istart_conf,iend_conf
152 c write (iout,*) "Calculating weirms iii",iii," ii",ii," k",k
154 call restore_ccoords(iprot,ii)
155 c Calculate the rmsds of the current conformations and convert them into weights
156 c to approximate equal weighting of all points of the conformational space
162 c 7/6/16 AL Add angle comparison
163 if (anglecomp(iprot) .or. sidecomp(iprot)) then
164 call int_from_cart(.true.,.false.)
165 call sc_loc_geom(.false.)
168 thetareff(k)=theta(k)
174 do ib=1,nbeta(1,iprot)
178 c caonly(iprot)=.true.
180 do iref=1,ntot_work(iprot)
181 if (iref.ne.iii) then
182 read(icbase,rec=iref) ((csingle(l,k),l=1,3),k=1,nres),
183 & ((csingle(l,k),l=1,3),k=nnt+nres,nct+nres),
184 & nss,(ihpb(k),jhpb(k),k=1,nss),eini(iref,iprot),
185 & entfac(iref,iprot),
186 & ((nu(k,l,ii,iprot),k=1,maxdimnat),l=1,natlike(iprot))
194 write (iout,'(i5,3f10.5,5x,3f10.5)') k,(c(l,k),l=1,3),
200 if (rmscomp(iprot)) then
201 rms=rmscalc(c(1,1),creff(1,1),iref,iii,iprot,iperm)
203 write (iout,*) "iref",iref," iii",iii," rms",rms
206 write (2,*) "iii",iii," iref=",iref," ib",ib," etotal",
207 & e_total_T(iref,ib),
208 & e_total_T(iii,ib),-e_total_T(iref,ib)+e_total_T(iii,ib),
209 & " rms",rms," fac",dexp(-0.5d0*(rms/sigma2(iprot))**2),
210 & dexp(-e_total_T(iref,ib)+e_total_T(iii,ib)),
211 & dexp(-0.5d0*(rms/sigma2(iprot))**2)*
212 & dexp(-e_total_T(iref,ib)+e_total_T(iii,ib))
214 aux=dexp(-0.5d0*(rms/sigma2(iprot))**2)
216 write (iout,*)"iref",iref," iii",iii," rms",rms," aux",aux
219 rms=qwolyness(creff,iprot)
221 write (2,*) "iii",iii," iref=",iref," ib",ib," etotal",
222 & e_total_T(iref,ib),
223 & e_total_T(iii,ib),-e_total_T(iref,ib)+e_total_T(iii,ib),
224 & " rms",-dlog(rms)," fac",rms,
225 & dexp(-e_total_T(iref,ib)+e_total_T(iii,ib)),
226 & rms*dexp(-e_total_T(iref,ib)+e_total_T(iii,ib))
230 c 7/6/16 AL Add angle comparison
231 if (anglecomp(iprot).or.sidecomp(iprot))
232 & call int_from_cart(.true.,.false.)
233 if (anglecomp(iprot)) then
234 c write (iout,*) "jj",jj," iref",iref
235 rmsthet=rmscalc_thet(theta(1),thetareff(1),iperm)
236 rmsphi=rmscalc_phi(phi(1),phireff(1),iperm)
238 write (iout,*) "rmsthet",rmsthet," rmsphi",rmsphi
240 aux=aux*dexp(-0.5d0*(rmsthet**2+rmsphi**2)/
241 & sigmaang2(iprot)**2)
243 write (iout,*) "rmsthet",rmsthet," rmsphi",rmsphi,
247 if (sidecomp(iprot)) then
248 call sc_loc_geom(.false.)
249 rmsside=rmscalc_side(xxtab(1),yytab(1),zztab(1),
250 & xxreff(1),yyreff(1),zzreff(1),iperm)
252 write (iout,*) "rmsside",rmsside
254 aux=aux*dexp(-0.5d0*(rmsside/sigmaside2(iprot))**2)
259 do ib=1,nbeta(1,iprot)
260 if (GEOM_AND_WHAM_WEIGHTS) then
261 weirms(iii,ib) = weirms(iii,ib)
262 & +aux*dexp(-e_total_T(iref,ib)+e_total_T(iii,ib))
264 weirms(iii,ib) = weirms(iii,ib)+aux
270 c caonly(iprot)=.false.
273 write (iout,*) "weirms"
274 do iii=istart_conf,iend_conf
275 write (iout,"(i5,20e12.5)") iii,(weirms(iii,ib),ib=1,
283 nchunk_conf(iprot) = iroof(scount(me1,iprot),maxstr_proc)
284 DO IB=1,NBETA(1,IPROT)
286 write(csa_bank,'(a,f4.0,4hPtab,i4.4)')
287 & protname(iprot)(:ilen(protname(iprot))),
288 & 1.0d0/(0.001987*betaT(ib,1,iprot)),me
289 open (icsa_bank,file=csa_bank,status="unknown")
294 do i=indstart(me1,iprot),indend(me1,iprot),maxstr_proc
295 ipass_conf=ipass_conf+1
296 write (iout,*) "Pass",ipass_conf
298 iend_conf=min0(i+maxstr_proc-1,indend(me1,iprot))
300 nchunk_conf(iprot) = iroof(ntot(iprot),maxstr_proc)
303 do i=1,ntot(iprot),maxstr_proc
304 ipass_conf=ipass_conf+1
305 write (iout,*) "Pass",ipass_conf
307 iend_conf=min0(i+maxstr_proc-1,ntot(iprot))
311 c Read the chunk of conformations off a DA scratchfile.
313 call daread_ccoords(iprot,istart_conf,iend_conf)
314 write (iout,*) "IB",ib," IPROT",iprot," NREF",nref(ib,iprot)
315 do iii=istart_conf,iend_conf
323 call restore_ccoords(iprot,ii)
324 c write (iout,*) "zeroing Ptab",iii,ii,jj
325 Ptab(jj,ib,iprot)=0.0d0
326 if (rmscomp(iprot)) then
327 do iref=1,nref(ib,iprot)
331 call pdbout(0.0d0,"conf")
332 c write (2,*) "nstart_sup",nstart_sup(iprot),
333 c & " nend_sup",nend_sup(iprot)
334 c do k=nstart_sup(iprot),nend_sup(iprot)
335 c write(2,'(i5,3f10.5,5x,3f10.5)') k,(c(l,k),l=1,3),
336 c & (cref(l,k,iref,ib,iprot),l=1,3)
338 c do k=nstart_sup(iprot),nend_sup(iprot)
339 c write(2,'(i5,3f10.5,5x,3f10.5)') k,(c(l,k+nres),l=1,3),
340 c & (cref(l,k+nres,iref,ib,iprot),l=1,3)
345 c(l,k)=cref(l,k,iref,ib,iprot)
348 call pdbout(0.0d0,"ref")
356 rms=rmsnat(ib,jj,iref,iprot,iperm)
358 write (iout,*) iii,iref," rmsnat",rms
360 c 7/6/16 AL Add angle comparison
361 c write(iout,*) "anglecomp",anglecomp
362 if (anglecomp(iprot).or.sidecomp(iprot))
363 & call int_from_cart(.true.,.false.)
364 if (anglecomp(iprot)) then
365 c write (iout,*) "jj",jj," iref",iref
366 rmsthet=rmscalc_thet(theta(1),
367 & theta_ref(1,iref,ib,iprot),iperm)
368 rmsphi=rmscalc_phi(phi(1),phi_ref(1,iref,ib,iprot),
371 write (iout,*) "rmsthet",rmsthet," rmsphi",rmsphi
374 if (sidecomp(iprot)) then
375 call sc_loc_geom(.false.)
376 rmsside=rmscalc_side(xxtab(1),yytab(1),zztab(1),
377 & xxref(1,iref,ib,iprot),yyref(1,iref,ib,iprot),
378 & zzref(1,iref,ib,iprot),iperm)
380 write (iout,*) "rmsside",rmsside
384 write (iout,*) "ii",ii," jj",jj," iref",iref,
385 & " rms",rms," rmsthet",rmsthet," rmsphi",rmsphi,
386 & " efree",efreeref(iref,ib,iprot)
390 if (rms.lt.rmsmin) then
395 Ptab(jj,ib,iprot)=Ptab(jj,ib,iprot)
396 & +dexp(-efreeref(iref,ib,iprot)
397 & -0.5d0*(rms/sigma2(iprot))**2)
398 if (anglecomp(iprot))
399 & Ptab(jj,ib,iprot)=Ptab(jj,ib,iprot)*
400 & dexp(-0.5d0*(rmsthet**2+rmsphi**2)/sigmaang2(iprot)**2)
402 & Ptab(jj,ib,iprot)=Ptab(jj,ib,iprot)*
403 & dexp(-0.5d0*(rmsside/sigmaside2(iprot))**2)
406 rmsave=rmsave/nref(ib,iprot)
409 c AL 1/24/2014 Correct the weight of a conformation to represent energy-free
410 c search of conformational space.
411 aux=dmin1(entfacmax-entfac(k,iprot),60.0d0)
412 Ptab(jj,ib,iprot)=Ptab(jj,ib,iprot)*dexp(aux)
414 write (iout,*) "iprot",iprot," ib",ib," iii",iii," k",k,
415 c & " entfac",entfac(k,iprot),"aux",aux," Ptab",Ptab(jj,ib,iprot)
416 & "entfac",entfac(k,iprot)," weirms",weirms(iii,ib),
417 & " Ptab",Ptab(jj,ib,iprot)
419 #elif defined(WEIDIST)
420 c write (iout,*) "iii",iii," Ptab",Ptab(jj,ib,iprot),
421 c & " weirms",weirms(iii,ib)," Ptab/weirms",
422 c & Ptab(jj,ib,iprot)/weirms(iii,ib)
424 write (icsa_bank,'(2i6,3f10.5,2f8.4)')
425 & iii,imin,-dlog(Ptab(jj,ib,iprot)),
426 & -dlog(weirms(iii,ib)),
427 & -dlog(Ptab(jj,ib,iprot)/weirms(iii,ib)),
430 if (ib.eq.1) rmstb(iii,iprot)=rmsmin
431 Ptab(jj,ib,iprot)=Ptab(jj,ib,iprot)/weirms(iii,ib)
432 #elif defined(WEICLUST)
433 Ptab(jj,ib,iprot)=Ptab(jj,ib,iprot)/weirms(iii,iprot)
435 sumP=sumP+Ptab(jj,ib,iprot)
437 do iref=1,nref(ib,iprot)
438 rms = qwolynes(ib,iref,iprot)
440 write (iout,*) "iii",iii," ii",ii," jj",jj,
441 & "iref",iref," rms",rms,-dlog(rms),
442 & "efree",efreeref(iref,ib,iprot)
444 Ptab(jj,ib,iprot)=Ptab(jj,ib,iprot)+rms*
445 & *dexp(-efreeref(iref,ib,iprot))
448 c AL 1/24/2014 Correct the weight of a conformation to represent energy-free
449 c search of conformational space.
450 aux=dmin1(entfacmax-entfac(k,iprot),60.0d0)
451 Ptab(jj,ib,iprot)=Ptab(jj,ib,iprot)*dexp(aux)
453 write (iout,*) "iprot",iprot," ib",ib," iii",iii," k",k,
454 & " entfac",entfac(k,iprot)," aux",aux," Ptab",Ptab(jj,ib,iprot)
456 #elif defined(WEICLUST)
457 Ptab(jj,ib,iprot)=Ptab(jj,ib,iprot)/weirms(k,iprot)
458 #elif defined(WEIDIST)
459 write (iout,*) "iii",iii," Ptab",Ptab(jj,ib,iprot),
460 & " weirms",weirms(iii,ib)," Ptab/weirms",
461 & Ptab(jj,ib,iprot)/weirms(iii,ib)
462 Ptab(jj,ib,iprot)=Ptab(jj,ib,iprot)/weirms(iii,ib)
464 sumP=sumP+Ptab(jj,ib,iprot)
467 write (iout,*) "ii",ii," jj",jj," ib",ib," iprot",iprot,
468 & " Ptab",Ptab(jj,ib,iprot)," sumP",sumP
473 write (iout,*) "iprot",iprot," ib",ib," sumP before REDUCE",sumP
476 call MPI_Allreduce(sumP,sumP_t,1,MPI_DOUBLE_PRECISION,
477 & MPI_SUM,Comm1,IERROR)
481 write (iout,*) "iprot",iprot," ib",ib," sumP after REDUCE",sumP
484 do iii=indstart(me1,iprot),indend(me1,iprot)
487 write (iout,*) "iii",iii," jj",jj," Ptab",Ptab(jj,ib,iprot)
489 Ptab(jj,ib,iprot)=Ptab(jj,ib,iprot)/sumP
491 write (iout,*) "iii",iii," jj",jj," Ptab",Ptab(jj,ib,iprot)
501 write (iout,*) "ELOWEST at the end of PROC_DATA"
503 do ibatch=1,natlike(iprot)+2
504 do ib=1,nbeta(ibatch,iprot)
505 write (iout,*) "iprot",iprot," ibatch",ibatch," ib",ib,
506 & " elowest",elowest(ib,ibatch,iprot)
510 write (iout,*) "Ptab at the end of PROC"
512 do ib=1,nbeta(1,iprot)
513 write (iout,*) "Protein",iprot," beta",ib
515 do i=indstart(me1,iprot),indend(me1,iprot)
517 write (iout,*) iprot,ib,ii,jj,Ptab(jj,ib,iprot)