1 subroutine proc_data(nvarr,x,*)
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 double precision fT(5),ftprim(5),ftbis(5),quot,quotl,quotl1,
32 & denom,kfac,kfacl,logfac,eplus,eminus,tanhT,entfacmax,
34 real csingle(3,maxres2)
35 double precision creff(3,maxres2),cc(3,maxres2)
36 double precision thetareff(maxres2),phireff(maxres2),
37 & xxreff(maxres2),yyreff(maxres2),zzreff(maxres2)
38 double precision przes(3),obrot(3,3),etoti
41 integer iprot,i,ind,ii,j,k,kk,l,ncl,is,ie,nsum,nng,nvarr,ng,
42 & inn,in,iref,ib,ibatch,num,itmp,imin
43 integer l1,l2,ncon_all
44 double precision rcyfr
45 integer jj,istart_conf,iend_conf,ipass_conf,iii
48 double precision ej,emaxj,sumP,sumP_t
50 double precision x(max_paropt)
51 double precision wconf(maxstr_proc)
52 double precision dx,dy,dz,dxref,dyref,dzref,
53 & dtheta,dphi,rmsthet,rmsphi,rmsside
54 double precision Fmean,SStot
55 double precision pinorm
58 double precision e_total_T_(maxstr_proc)
62 double precision rms,rmsave,rmsmin,rmsnat,qwolynes,qwolyness
67 write (iout,*) "fac0",fac0
68 write(iout,*) "torsional and valence angle mode",tor_mode
70 c Determine the number of variables and the initial vector of optimizable
74 if (restart_flag) then
75 call w2x(nvarr,x_orig,*11)
79 open (88,file=prefix(:ilen(prefix))//'.restin',status='unknown')
80 read(88,*,end=99,err=99) (x(i),i=1,nvarr)
84 & "Variables replaced with values from the restart file."
86 write (iout,'(i5,f15.5)') i,x(i)
92 & "Error - restart file nonexistent, incompatible or damaged."
94 call MPI_Finalize(Ierror)
97 & "Error - restart file nonexistent, incompatible or damaged."
100 write (iout,*) "PROC: after W2X nvarr",nvarr
110 c Setup weights for UNRES
139 if (.not.maxlik(iprot)) cycle
141 call restore_molinfo(iprot)
144 DO IBATCH=1,natlike(iprot)+2
146 c Calculate temperature-dependent weight scaling factors
147 do ib=1,nbeta(ibatch,iprot)
148 fac=betaT(ib,ibatch,iprot)
150 if (rescale_mode.eq.0) then
156 else if (rescale_mode.eq.1) then
163 denom=kfacl-1.0d0+quotl
165 ftprim(l)=-l*ft(l)*quotl1/(T0*denom)
166 ftbis(l)=l*kfacl*quotl1*
167 & (2*l*quotl-(l-1)*denom)/(quot*t0*t0*denom**3)
168 write (iout,*) "ib",ib," beta",betaT(ib,ibatch,iprot),
169 & " quot",quot," l",l,fT(l),fTprim(l),fTbis(l)
171 else if (rescale_mode.eq.2) then
178 logfac=1.0d0/dlog(eplus+eminus)
179 tanhT=(eplus-eminus)/(eplus+eminus)
180 fT(l)=1.12692801104297249644d0*logfac
181 ftprim(l)=-l*quotl1*ft(l)*tanhT*logfac/T0
182 ftbis(l)=(l-1)*ftprim(l)/(quot*T0)-
183 & 2*l*quotl1/T0*logfac*
184 & (2*l*quotl1*ft(l)/(T0*(eplus+eminus)**2)
188 write (iout,*) "Unknown RESCALE_MODE",rescale_mode
193 escal(k,ib,ibatch,iprot)=1.0d0
194 escalprim(k,ib,ibatch,iprot)=0.0d0
195 escalbis(k,ib,ibatch,iprot)=0.0d0
197 if (shield_mode.gt.0) then
198 escal(1,ib,ibatch,iprot)=ft(1)
199 escal(2,ib,ibatch,iprot)=ft(1)
200 escal(16,ib,ibatch,iprot)=ft(1)
201 escalprim(1,ib,ibatch,iprot)=ft(1)
202 escalprim(2,ib,ibatch,iprot)=ft(1)
203 escalprim(16,ib,ibatch,iprot)=ft(1)
204 escalbis(1,ib,ibatch,iprot)=ft(1)
205 escalbis(2,ib,ibatch,iprot)=ft(1)
206 escalbis(16,ib,ibatch,iprot)=ft(1)
208 escal(3,ib,ibatch,iprot)=ft(1)
209 escal(4,ib,ibatch,iprot)=ft(3)
210 escal(5,ib,ibatch,iprot)=ft(4)
211 escal(6,ib,ibatch,iprot)=ft(5)
212 escal(7,ib,ibatch,iprot)=ft(2)
213 escal(8,ib,ibatch,iprot)=ft(2)
214 escal(9,ib,ibatch,iprot)=ft(3)
215 escal(10,ib,ibatch,iprot)=ft(5)
216 escal(13,ib,ibatch,iprot)=ft(1)
217 escal(14,ib,ibatch,iprot)=ft(2)
218 escal(19,ib,ibatch,iprot)=ft(1)
219 escalprim(3,ib,ibatch,iprot)=ftprim(1)
220 escalprim(4,ib,ibatch,iprot)=ftprim(3)
221 escalprim(5,ib,ibatch,iprot)=ftprim(4)
222 escalprim(6,ib,ibatch,iprot)=ftprim(5)
223 escalprim(7,ib,ibatch,iprot)=ftprim(2)
224 escalprim(8,ib,ibatch,iprot)=ftprim(2)
225 escalprim(9,ib,ibatch,iprot)=ftprim(3)
226 escalprim(10,ib,ibatch,iprot)=ftprim(5)
227 escalprim(13,ib,ibatch,iprot)=ftprim(1)
228 escalprim(14,ib,ibatch,iprot)=ftprim(2)
229 escalprim(19,ib,ibatch,iprot)=ftprim(1)
230 escalbis(3,ib,ibatch,iprot)=ftbis(1)
231 escalbis(4,ib,ibatch,iprot)=ftbis(3)
232 escalbis(5,ib,ibatch,iprot)=ftbis(4)
233 escalbis(6,ib,ibatch,iprot)=ftbis(5)
234 escalbis(7,ib,ibatch,iprot)=ftbis(2)
235 escalbis(8,ib,ibatch,iprot)=ftbis(2)
236 escalbis(9,ib,ibatch,iprot)=ftbis(3)
237 escalbis(10,ib,ibatch,iprot)=ftbis(5)
238 escalbis(13,ib,ibatch,iprot)=ftbis(1)
239 escalbis(14,ib,ibatch,iprot)=ftbis(2)
240 escalbis(19,ib,ibatch,iprot)=ftbis(1)
243 betmin(ibatch,iprot)=betaT(1,ibatch,iprot)
244 betmax(ibatch,iprot)=betaT(1,ibatch,iprot)
245 do ib=2,nbeta(ibatch,iprot)
246 if (betaT(ib,ibatch,iprot).lt.betmin(ibatch,iprot))
247 & betmin(ibatch,iprot)=betaT(ib,ibatch,iprot)
248 if (betaT(ib,ibatch,iprot).gt.betmax(ibatch,iprot))
249 & betmax(ibatch,iprot)=betaT(ib,ibatch,iprot)
251 write (iout,'(2(a,i5,2x),2(a,f7.2,2x))')
252 & "Protein",iprot," batch",ibatch,
253 & " betmin",betmin(ibatch,iprot)," betmax",betmax(ibatch,iprot)
259 c Compute energy and entropy histograms to filter out conformations
260 c with potntially too low or too high weights.
262 call determine_histograms
264 c Make the working list of conformations
266 call make_list(.true.,.true.,nvarr,x)
268 call make_list_MD(.true.)
270 c 3/8/2013 Calculate RMSDs/Qs and the Ptab array
272 c AL 5/13/2019 Compute variances of MD forces
275 if (.not.fmatch(iprot)) cycle
277 open (icbase,file=bprotfiles_MD(iprot),status="old",
278 & form="unformatted",access="direct",recl=lenrec_MD(iprot))
281 do ii=1,ntot_work_MD(iprot),maxstr_proc
283 iend_conf=min0(ii+maxstr_proc-1,ntot_MD(iprot))
284 call daread_MDcoords(iprot,istart_conf,iend_conf)
285 do j=istart_conf,iend_conf
286 c jj=list_conf_MD(j,iprot)
287 c write (iout,*) "iprot",iprot," j",j," jj",jj
290 Fmean=Fmean+CGforce_MD(k,i,j,iprot)
296 Fmean=Fmean/(3*nsite(iprot)*ntot_work_MD(iprot))
297 write(iout,*) "PROC_DATA Protein",iprot," Fmean",Fmean
301 do j=1,ntot_work_MD(iprot)
302 c jj=list_conf_MD(j,iprot)
305 SStot=SStot+(CGforce_MD(k,i,j,iprot)-Fmean)**2
310 varforce(iprot)=SStot/(3*nsite(iprot)*ntot_work_MD(iprot))
311 meanforce(iprot)=Fmean
312 write (iout,*) "PROC_DATA Protein",iprot," varforce",
313 & varforce(iprot)," mean force",meanforce(iprot)
322 c-------------------------------------------------------------------------------
323 subroutine determine_histograms
326 include "DIMENSIONS.ZSCOPT"
328 parameter (maxind=1000)
331 integer Ierror,Errcode,status(MPI_STATUS_SIZE),tag
334 include "COMMON.COMPAR"
335 include "COMMON.ENERGIES"
336 include "COMMON.VMCPAR"
337 include "COMMON.WEIGHTS"
338 include "COMMON.PROTNAME"
339 include "COMMON.IOUNITS"
340 include "COMMON.FFIELD"
341 include "COMMON.PROTFILES"
342 include "COMMON.CHAIN"
343 include "COMMON.CONTROL"
344 include "COMMON.CLASSES"
345 integer iprot,i,ii,iii,j,k,l,ibatch,inde,indt,idelte,ideltt
346 double precision eminh,emaxh,tminh,tmaxh
347 integer he(0:maxind),
348 & ht(0:maxind),hemax,htmax
350 c Construct energy and entropy histograms
352 write (iout,*) "Calling DETERMINE HISTOGRAMS"
355 if (.not.maxlik(iprot)) cycle
366 if (eini(iii,iprot).lt.eminh)
367 & eminh=eini(iii,iprot)
368 if (eini(iii,iprot).gt.emaxh)
369 & emaxh=eini(iii,iprot)
370 if (entfac(iii,iprot).lt.tminh)
371 & tminh=entfac(iii,iprot)
372 if (entfac(iii,iprot).gt.tmaxh)
373 & tmaxh=entfac(iii,iprot)
375 c write (2,*) "DETERMINE HISTOGRAMS 1"
379 inde=eini(iii,iprot)-eminh
380 indt=entfac(iii,iprot)-tminh
381 if (inde.le.maxind) he(inde)=he(inde)+1
382 if (indt.le.maxind) ht(indt)=ht(indt)+1
384 c write (2,*) "DETERMINE HISTOGRAMS 2"
388 c write (iout,*) "idelte",idelte," ideltt",ideltt
391 c write (iout,*) "i",i," he",he(i)," hemax",hemax
393 if (he(i).gt.hemax) hemax=he(i)
397 c write (iout,*) "i",i," ht",ht(i)," htmax",htmax
399 if (ht(i).gt.htmax) htmax=ht(i)
401 c write (2,*) "DETERMINE HISTOGRAMS 3"
403 hemax=hemax/hefac(iprot)
404 if (hemax.lt.hemax_low(iprot))
405 & hemax=hemax_low(iprot)
406 htmax=htmax/htfac(iprot)
407 if (htmax.lt.htmax_low(iprot))
408 & htmax=htmax_low(iprot)
410 do while (i.lt.idelte .and. he(i).lt.hemax)
413 c write (2,*) "DETERMINE HISTOGRAMS 4"
415 e_lowb(iprot)=eminh+i
417 do while (i.lt.ideltt .and. ht(i).lt.htmax)
420 t_lowb(iprot)=tminh+i
422 write (iout,*) "protein",iprot
423 write (iout,*) "energy histogram"
425 write (iout,'(f15.5,i10)') eminh+i,he(i)
427 write (iout,*) "entropy histogram"
429 write (iout,'(f15.5,i10)') tminh+i,ht(i)
431 write (iout,*) "emin",eminh," tmin",tminh,
432 & " hemax",hemax," htmax",htmax,
433 & " e_lowb",e_lowb(iprot),
434 & " t_lowb",t_lowb(iprot)
440 c------------------------------------------------------------------------------
441 subroutine imysort(n, x, ipermut)
451 if (x(j).lt.xtemp) then
459 ipermut(imax)=ipermut(i)
464 c--------------------------------------------------------------------------
465 subroutine write_conf_count
468 include "DIMENSIONS.ZSCOPT"
469 include "COMMON.CLASSES"
470 include "COMMON.COMPAR"
471 include "COMMON.VMCPAR"
472 include "COMMON.PROTNAME"
473 include "COMMON.IOUNITS"
474 include "COMMON.PROTFILES"
475 integer iprot,ibatch,i,ii,j,kk
480 write (iout,*)"Numbers of conformations after applying the cutoff"
483 write (iout,'(a,2x,a,i10)') "Protein",
484 & protname(iprot)(:ilen(protname(iprot))),
489 c-------------------------------------------------------------------------
490 double precision function fdum()