1 subroutine make_list(lprn,first_call,nvarr,x)
4 include "DIMENSIONS.ZSCOPT"
7 integer IERROR,ErrCode,Status(MPI_STATUS_SIZE,10)
8 integer req(10),msg_in(5),msg_out(5),address,size
9 character*1 buffer(8*(2*maxstr_proc*nntyp+8000))
12 include "COMMON.WEIGHTS"
13 include "COMMON.WEIGHTDER"
14 include "COMMON.ENERGIES"
15 include "COMMON.IOUNITS"
16 include "COMMON.VMCPAR"
17 include "COMMON.NAMES"
18 include "COMMON.INTERACT"
19 include "COMMON.TIME1"
20 include "COMMON.CHAIN"
21 include "COMMON.PROTFILES"
24 include "COMMON.OPTIM"
25 include "COMMON.CLASSES"
26 include "COMMON.COMPAR"
27 include "COMMON.TORSION"
28 C Define local variables
30 integer i,ii,iii,ibatch,kkk,jj,j,k,kk,l,iprot,ib,nn
31 integer ipass_conf,istart_conf,iend_conf,Previous,Next
32 double precision energia(0:max_ene)
33 double precision etoti,elowesti,dene
34 double precision tcpu_ini,tcpu_fin,tcpu
35 double precision elowest_t(2,maxT),etot_aux,enepsjk,
36 & emini,elowest_aux(2,maxT)
39 logical lprn,first_call
40 logical*1 lflag(maxstr)
41 integer ipermut(maxstr)
42 integer list_conf_(maxstr,maxprot)
43 double precision x(nvarr)
44 double precision ftune_eps
47 double precision e_total_(maxstr_proc)
49 write (iout,*) "Making the worklist of conformations."
50 write (iout,*) "enecut",(enecut(i),i=1,nprot)
51 write (iout,*) "first_call ",first_call," nvarr",nvarr
57 ntot_work(iprot)=ntot(iprot)
61 c Divide the whole database between processors
65 if (Previous.lt.0) Previous = Nprocs-1
66 if (Next.ge.Nprocs) Next = 0
67 call work_partition(lprn)
74 call restore_molinfo(iprot)
75 c write (iout,*) "Processor",me," iprot",iprot,
76 c & " indstart",indstart(me1,iprot)," indend",indend(me1,iprot),
77 c & " init_ene",init_ene," mod_fourier",mod_fourier(0),
78 c & " mod_elec",mod_elec," mod_scp",mod_scp
79 call restore_molinfo(iprot)
81 c Loop over the conformations of protein IPROT assigned to the current processor.
82 c The conformations are read off a DA scratchfile and processed in passes, each
83 c of which requires no more than MAXSTR_PROC conformations to be stored in memory
86 if (.not.init_ene .and. mod_fourier(nloctyp).eq.0
87 & .and. .not. mod_elec .and. .not. mod_scp) then
88 open (ientin,file=benefiles(iprot),status="old",
89 & form="unformatted",access="direct",recl=lenrec_ene(iprot))
91 open (icbase,file=bprotfiles(iprot),status="old",
92 & form="unformatted",access="direct",recl=lenrec(iprot))
93 open (ientout,file=benefiles(iprot),status="old",
94 & form="unformatted",access="direct",recl=lenrec_ene(iprot))
98 nchunk_ene(iprot) = iroof(scount(me1,iprot),maxstr)
99 nchunk_conf(iprot) = iroof(scount(me1,iprot),maxstr_proc)
100 write (iout,*)"Protein",iprot," energy evaluation in",
101 & nchunk_conf(iprot)," passes."
104 do i=indstart(me1,iprot),indend(me1,iprot),maxstr_proc
105 ipass_conf=ipass_conf+1
106 write (iout,*) "MAKE_LIST: Pass",ipass_conf
108 iend_conf=min0(i+maxstr_proc-1,indend(me1,iprot))
110 nchunk_ene(iprot) = iroof(ntot(iprot),maxstr)
111 nchunk_conf(iprot) = iroof(ntot(iprot),maxstr_proc)
112 write (iout,*)"Protein",iprot," energy evaluation in",
113 & nchunk_conf," passes."
115 do i=1,ntot(iprot),maxstr_proc
116 ipass_conf=ipass_conf+1
117 write (iout,*) "MAKE_LIST: Pass",ipass_conf
119 iend_conf=min0(i+maxstr_proc-1,ntot(iprot))
123 c Read the chunk of conformations off a DA scratchfile.
125 if (.not.init_ene .and. mod_fourier(nloctyp).eq.0
126 & .and. .not. mod_elec .and. .not. mod_scp) then
128 c If energy components have been pre-computed read them off a DA file.
130 call daread_ene(iprot,istart_conf,iend_conf)
131 do iii=istart_conf,iend_conf
135 enetb(ii,1,iprot)=0.0d0
138 enetb(ii,1,iprot)=enetb(ii,1,iprot)+ftune_eps(eps(j,k))*
139 & eneps(1,icant(j,k),ii,iprot)+
140 & eps(j,k)*eneps(2,icant(j,k),ii,iprot)
146 etot_aux=etot_aux+ww(j)*enetb(ii,j,iprot)
148 e_total(iii,iprot)=etot_aux
150 write (iout,'(i5,16(1pe12.4))') iii,
151 & (enetb(ii,j,iprot),j=1,n_ene),e_total(iii,iprot)
155 if (first_call .and. mod_side) then
156 write (iout,*) "Callig x2w"
158 call x2w(nvarr,x_orig)
159 write (iout,*) "After x2w"
162 do iii=istart_conf,iend_conf
164 enetb_oorig(ii,1,iprot)=0.0d0
167 enetb_oorig(ii,1,iprot)=enetb_oorig(ii,1,iprot)+
168 & ftune_eps(eps(j,k))*eneps(1,icant(j,k),ii,iprot)+
169 & eps(j,k)*eneps(2,icant(j,k),ii,iprot)
173 enetb_oorig(ii,j,iprot)=enetb(ii,j,iprot)
179 call daread_ccoords(iprot,istart_conf,iend_conf)
181 c Compute the energies of the conformations currently in memory and compute
182 c the lowest energies.
184 do iii=istart_conf,iend_conf
187 call restore_ccoords(iprot,ii)
188 call int_from_cart1(.false.)
190 write (iout,*) "Before etotal",iii,i
193 call etotal(energia(0))
195 write (iout,*) "After etotal",i
197 call enerprint(energia(0))
198 c write (iout,'(i5,16(1pe12.4))') i,
199 c & (energia(j),j=1,n_ene),energia(0)
203 write (iout,*) "Conformation:",i
204 write (iout,'(8f10.5)') ((c(l,k),l=1,3),k=1,nres)
205 write (iout,'(8f10.5)') ((c(l,k+nres),l=1,3),k=nnt,nct)
206 write (iout,'(8f10.4)') (vbld(k),k=2,nres)
207 write (iout,'(8f10.4)') (vbld(k+nres),k=nnt,nct)
208 write (iout,'(8f10.4)') (rad2deg*theta(k),k=3,nres)
209 write (iout,'(8f10.4)') (rad2deg*phi(k),k=4,nres)
210 write (iout,'(8f10.4)') (rad2deg*alph(k),k=2,nres-1)
211 write (iout,'(8f10.4)') (rad2deg*omeg(k),k=2,nres-1)
212 call enerprint(energia(0))
214 e_total(iii,iprot)=energia(0)
216 enetb(ii,j,iprot)=energia(j)
220 eneps(1,icant(j,k),ii,iprot)=eneps_temp(1,icant(j,k))
221 eneps(2,icant(j,k),ii,iprot)=eneps_temp(2,icant(j,k))
225 write (iout,'(i5,20(1pe12.4))') iii,
226 & (energia(j),j=1,n_ene),energia(0),eini(iii,iprot),
230 if (energia(0).ge.1.0d99) then
232 & "MAKE_LIST:CHUJ NASTAPIL in energy evaluation for",
233 & " point",i,". Probably NaNs in some of the energy components."
234 write (iout,*) "The components of the energy are:"
235 call enerprint(energia(0))
236 write (iout,*) "Conformation:",i
237 write (iout,'(8f10.5)') ((c(l,k),l=1,3),k=1,nres)
238 write (iout,'(8f10.5)') ((c(l,k+nres),l=1,3),k=nnt,nct)
239 write (iout,'(8f10.4)') (vbld(k),k=2,nres)
240 write (iout,'(8f10.4)') (vbld(k+nres),k=nnt,nct)
241 write (iout,'(8f10.4)') (rad2deg*theta(k),k=3,nres)
242 write (iout,'(8f10.4)') (rad2deg*phi(k),k=4,nres)
243 write (iout,'(8f10.4)') (rad2deg*alph(k),k=2,nres-1)
244 write (iout,'(8f10.4)') (rad2deg*omeg(k),k=2,nres-1)
245 write (iout,*) "Calculation terminated at this point.",
246 & " Check the database of conformations"
248 call MPI_Abort(MPI_COMM_WORLD,ErrCode,IERROR)
250 stop "SEVERE error in energy calculation"
254 do ii=1,iend_conf-istart_conf+1
256 enetb_orig(ii,j,iprot)=enetb(ii,j,iprot)
260 call x2w(nvarr,x_orig)
262 write (iout,*) "x,xorig"
264 write (iout,'(i5,2f10.5)') k,x(k),x_orig(k)
267 do iii=istart_conf,iend_conf
269 call restore_ccoords(iprot,ii)
270 call int_from_cart1(.false.)
271 call etotal(energia(0))
273 write (iout,*) "Conformation:",iii,ii
274 write (iout,'(8f10.5)') ((c(l,k),l=1,3),k=1,nres)
275 write (iout,'(8f10.5)') ((c(l,k+nres),l=1,3),k=nnt,nct)
276 write (iout,'(8f10.4)') (vbld(k),k=2,nres)
277 write (iout,'(8f10.4)') (vbld(k+nres),k=nnt,nct)
278 write (iout,'(8f10.4)') (rad2deg*theta(k),k=3,nres)
279 write (iout,'(8f10.4)') (rad2deg*phi(k),k=4,nres)
280 write (iout,'(8f10.4)') (rad2deg*alph(k),k=2,nres-1)
281 write (iout,'(8f10.4)') (rad2deg*omeg(k),k=2,nres-1)
282 call enerprint(energia(0))
285 enetb_oorig(ii,j,iprot)=energia(j)
288 write (iout,'(2i5,20(1pe12.4))') iii,ii,
289 & (energia(j),j=1,n_ene),energia(0)
290 write (iout,'(2i5,20(1pe12.4))') iii,ii,
291 & (enetb(ii,j,iprot),j=1,n_ene)
294 if (energia(0).ge.1.0d99) then
295 write (iout,*) "CHUJ NASTAPIL in energy evaluation for",
296 & " point",i,". Probably NaNs in some of the energy components."
297 write (iout,*) "The components of the energy are:"
298 call enerprint(energia(0))
299 write (iout,*) "Calculation terminated at this point.",
300 & " Check the database of conformations"
302 call MPI_Abort(MPI_COMM_WORLD,ErrCode,IERROR)
304 stop "SEVERE error in energy calculation"
307 write (iout,*) "MAKE_LIST Callig x2w"
310 write (iout,*) "After x2w"
313 write (iout,*) "make_list: calling dawrite_ene"
314 write (iout,*) "istart_conf",istart_conf,
315 & " iend_conf",iend_conf
316 call dawrite_ene(iprot,istart_conf,iend_conf,ientout)
318 c Distribute energy components through ring
319 call MPI_Barrier(WHAM_COMM,IERROR)
320 write (iout,*) "Processes synchronized in make_list"
322 msg_out(1)= 5*me1+1000*ipass_conf+1
323 msg_out(2)= 5*me1+1000*ipass_conf+2
324 msg_out(3)= 5*me1+1000*ipass_conf+3
325 msg_out(4)= 5*me1+1000*ipass_conf+4
326 msg_out(5)= 5*me1+1000*ipass_conf+5
328 c Send the current energy tables to the right neighbor
329 c Receive the energy tables produced by processor kkk from the left neighbor
330 kkk = mod(me1-iii+NProcs,Nprocs)
331 msg_in(1)= 5*kkk+1000*ipass_conf+1
332 msg_in(2)= 5*kkk+1000*ipass_conf+2
333 msg_in(3)= 5*kkk+1000*ipass_conf+3
334 msg_in(4)= 5*kkk+1000*ipass_conf+4
335 msg_in(5)= 5*kkk+1000*ipass_conf+5
336 write (iout,*) "me1",me1," iii",iii," Previous",Previous,
337 & " Next",Next," kkk",kkk
338 write (iout,*) "msg_in",msg_in
339 write (iout,*) "msg_out",msg_out
341 write (iout,*) "Processor",me1," Start Send and receive"
343 call MPI_Send(istart_conf,1,MPI_INTEGER,Next,msg_out(1),
345 write (iout,*) "Send",msg_out(1)," complete"
347 call MPI_Recv(istart_conf,1,MPI_INTEGER,Previous,
348 & msg_in(1),WHAM_COMM,STATUS(1,6),IERROR)
349 write (iout,*) "Recv",msg_in(1)," complete"
351 call MPI_Send(iend_conf,1,MPI_INTEGER,Next,msg_out(2),
353 write (iout,*) "Send",msg_out(2)," complete"
355 call MPI_Recv(iend_conf,1,MPI_INTEGER,Previous,
356 & msg_in(2),WHAM_COMM,STATUS(1,7),IERROR)
357 write (iout,*) "Recv",msg_in(2)," complete"
359 call MPI_Buffer_Attach(buffer(1),8*(2*maxstr_proc*n_ene+800),
361 call MPI_BSend(enetb(1,1,iprot),maxstr_proc*n_ene,
362 & MPI_DOUBLE_PRECISION,Next,msg_out(3),
364 write (iout,*) "Send",msg_out(3)," complete (enetb)"
366 call MPI_Recv(enetb(1,1,iprot),maxstr_proc*n_ene,
367 & MPI_DOUBLE_PRECISION,Previous,msg_in(3),WHAM_COMM,
368 & STATUS(1,8),IERROR)
369 write (iout,*) "Recv",msg_in(3)," complete (enetb)"
371 call MPI_Buffer_Detach(address,size,IERROR)
372 c write (iout,*) "MPI_Buffer_Detach complete (enetb)"
374 call MPI_Buffer_Attach(buffer(1),8*(2*maxstr_proc*nntyp+800),
376 c write (iout,*) "MPI_Buffer_Attach complete (eneps)"
378 call MPI_BSend(eneps(1,1,1,iprot),2*maxstr_proc*nntyp,
379 & MPI_DOUBLE_PRECISION,Next,msg_out(4),
381 write (iout,*) "Send",msg_out(4)," complete (eneps)"
383 call MPI_Recv(eneps(1,1,1,iprot),2*maxstr_proc*nntyp,
384 & MPI_DOUBLE_PRECISION,Previous,msg_in(4),WHAM_COMM,
385 & STATUS(1,9),IERROR)
386 write (iout,*) "Recv",msg_in(4)," complete (eneps)"
388 call MPI_Buffer_Detach(address,size,IERROR)
389 call MPI_Buffer_Attach(buffer(1),8*(2*maxstr_proc*maxnatlike
391 call MPI_BSend(nu(1,1,1,iprot),
392 & maxstr_proc*maxnatlike*maxdimnat,
393 & MPI_DOUBLE_PRECISION,Next,msg_out(5),
395 write (iout,*) "Send",msg_out(5)," complete (nu)"
397 call MPI_Recv(nu(1,1,1,iprot),
398 & maxstr_proc*maxnatlike*maxdimnat,
399 & MPI_DOUBLE_PRECISION,Previous,msg_in(5),WHAM_COMM,
400 & STATUS(1,10),IERROR)
401 write (iout,*) "Recv",msg_in(5)," complete (nu)"
403 call MPI_Buffer_Detach(address,size,IERROR)
404 write (iout,*) "Send and receive complete"
406 write (iout,*) "Processor",me1," calling dawrite_ene",
407 & " istart_conf",istart_conf," iend_conf",iend_conf
410 c write (iout,*) "assignment of enetb_orig"
411 do ii=1,iend_conf-istart_conf+1
413 enetb_orig(ii,j,iprot)=enetb(ii,j,iprot)
415 c write (iout,'(i5,20f8.2)')
416 c & ii,(enetb_orig(ii,j,iprot),j=1,n_ene)
419 call dawrite_ene(iprot,istart_conf,iend_conf,ientout)
427 if (.not.init_ene .and. mod_fourier(nloctyp).eq.0
428 & .and. .not. mod_elec .and. .not. mod_scp) then
437 c Lowest free energies of structural classes
441 IF (NCHUNK_CONF(IPROT).EQ.1) THEN
444 do i=1,ntot_work(iprot)
448 do i=indstart(me1,iprot),indend(me1,iprot)
452 istart_conf=indstart(me1,iprot)
453 iend_conf=indend(me1,iprot)
455 do i=1,ntot_work(iprot)
459 iend_conf=ntot_work(iprot)
462 write (iout,*) "i2ii at make_list"
463 do i=1,ntot_work(iprot)
464 write (iout,*) "i",i," i2ii",i2ii(i,iprot)
468 open (ientin,file=benefiles(iprot),status="old",
469 & form="unformatted",access="direct",recl=lenrec_ene(iprot))
470 call daread_ene(iprot,istart_conf,iend_conf)
471 call emin_search(iprot)
475 open (ientin,file=benefiles(iprot),status="old",
476 & form="unformatted",access="direct",recl=lenrec_ene(iprot))
479 do istart_conf=indstart(me1,iprot),indend(me1,iprot),maxstr_proc
480 iend_conf=min0(istart_conf+maxstr_proc-1,indend(me1,iprot))
482 do istart_conf=1,ntot_work(iprot),maxstr_proc
483 iend_conf=min0(istart_conf+maxstr_proc-1,ntot_work(iprot))
486 c Read the chunk of energies and derivatives off a DA scratchfile.
488 ipass_conf=ipass_conf+1
489 do i=1,ntot_work(iprot)
493 do i=istart_conf,iend_conf
498 write (iout,*) "ipass_conf",ipass_conf,
499 & " istart_conf",istart_conf," iend_conf",iend_conf
500 do i=1,ntot_work(iprot)
501 write (iout,*) "i",i," i2ii",i2ii(i,iprot)
505 call daread_ene(iprot,istart_conf,iend_conf)
506 call emin_search(iprot)
514 c Complete the calculation of the lowest energies over all classes and
515 c distribute the values to all procs
517 do ibatch=1,natlike(iprot)+2
519 do ib=1,nbeta(ibatch,iprot)
520 write (iout,'(7hELOWEST,3i3,f15.3,i12)') iprot,ibatch,ib,
521 & elowest(ib,ibatch,iprot),ind_lowest(ib,ibatch,iprot)
524 do ib=1,nbeta(ibatch,iprot)
525 elowest_aux(1,ib)=elowest(ib,ibatch,iprot)
526 elowest_aux(2,ib)=ind_lowest(ib,ibatch,iprot)
528 call MPI_Allreduce(elowest_aux(1,1),elowest_t(1,1),
529 & nbeta(ibatch,iprot),
530 & MPI_2DOUBLE_PRECISION, MPI_MINLOC, Comm1, IERROR)
532 do ib=1,nbeta(ibatch,iprot)
533 write (iout,*) "beta=",betaT(ib,ibatch,iprot)
534 write (iout,'(9helowest_t,10f15.3)')
535 & elowest_t(1,ib),elowest_t(2,ib)
537 write (iout,*) "Processor",me,me1," finished MPI_Reduce: 2"
539 do ib=1,nbeta(ibatch,iprot)
540 elowest(ib,ibatch,iprot)=elowest_t(1,ib)
541 ind_lowest(ib,ibatch,iprot)=elowest_t(2,ib)
546 do ibatch=1,natlike(iprot)+2
547 do ib=1,nbeta(ibatch,iprot)
548 write (iout,*) "iprot",iprot," ibatch",ibatch," ib",ib,
549 & " elowest",elowest(ib,ibatch,iprot)
554 c Allgather to provide all energies to all processors
557 do i=1,scount(me1,iprot)
558 e_total_(i)=e_total(indstart(me1,iprot)+i-1,iprot)
560 call MPI_Allgatherv(e_total_(1),
561 & scount(me1,iprot),MPI_DOUBLE_PRECISION,e_total(1,iprot),
562 & scount(0,iprot),idispl(0,iprot),MPI_DOUBLE_PRECISION,
564 c call MPI_Allgatherv(e_total(indstart(me1,iprot),iprot),
565 c & scount(me1,iprot),MPI_DOUBLE_PRECISION,e_total(1,iprot),
566 c & scount(0,iprot),idispl(0,iprot),MPI_DOUBLE_PRECISION,
571 c Now determine which conformations will enter the database.
574 call restore_molinfo(iprot)
575 c Clear the list of conformations
576 do i=1,min0(ntot(iprot),maxstr)
582 c Make the list of conformations based on energy cut-off.
585 write (iout,*) "iprot",iprot," ibatch",ibatch," betmin",
586 & betmin(ibatch,iprot)
589 write (iout,*) "e_lowb",e_lowb(iprot)
590 write (iout,*) "t_lowb",t_lowb(iprot)
592 do ibatch=1,natlike(iprot)+2
596 c write (iout,*) "i",i," ii",ii," indstart",
597 c & indstart(me1,iprot)," indend",indend(me1,iprot)
598 if (i.ge.indstart(me1,iprot).and.i.le.indend(me1,iprot))
601 c write (iout,*) "i",i," ii",ii," kbatch",kbatch(i,iprot),
603 if (.not.lflag(i)) then
604 c if (eini(i,iprot).lt.e_lowb(iprot) .or.
605 c & entfac(i,iprot).lt.t_lowb(iprot)) then
607 c write (iout,*) "Conformation",i," eini",eini(i,iprot),
608 c & " entfac",entfac(i,iprot)," e_lowb",
610 c & " t_lowb",t_lowb(iprot)
615 do ib=1,nbeta(ibatch,iprot)
616 dene=betaT(ib,ibatch,iprot)*(e_total(i,iprot)
617 & -elowest(ib,ibatch,iprot))+entfac(i,iprot)
619 write (iout,*) "beta",betaT(ib,ibatch,iprot),
622 & " elowest",elowest(ib,ibatch,iprot)," dene",dene,
623 & " enecut",enecut(iprot)
625 if (dene.lt.enecut(iprot)) then
627 list_conf(nn,iprot)=i
640 if (nn.gt.maxstr) then
641 write (iout,*) "Error - after applying cutoff the number",
642 & " of conformations for protein ",i," exceeds MAXSTR:",
644 write (iout,*) "The calculation is terminating."
647 call MPI_Finalize(ierror)
651 call imysort(ntot_work(iprot),list_conf(1,iprot),ipermut)
652 write (iout,*) "Protein",iprot,ntot_work(iprot),
653 & " conformations within scaled energy cut-off=",enecut(iprot),
654 & " found at processor",me
657 c All workers get the complete list of conformations.
659 call MPI_Allgather(ntot_work(iprot),1,MPI_INTEGER,
660 & scount(0,iprot),1,MPI_INTEGER,Comm1,IERROR)
663 idispl(i,iprot)=idispl(i-1,iprot)+scount(i-1,iprot)
666 write (iout,*) "Protein",iprot," Scount and Idispl"
668 write (iout,*) i,scount(i,iprot),idispl(i,iprot)
670 write (iout,*) "Protein",i,
671 & " local list of conformations of processor",me
672 do i=1,ntot_work(iprot)
673 write(iout,*) i,list_conf(i,iprot)
675 write (iout,*) "Before REDUCE: ntot_work",ntot_work(iprot)
678 call MPI_Allreduce(ntot_work(iprot),nn,1,MPI_INTEGER,MPI_SUM,
682 write (iout,*) "After REDUCE: ntot_work",ntot_work(iprot)
685 call MPI_Allgatherv(list_conf(1,iprot),
686 & scount(me1,iprot),MPI_INTEGER,list_conf_(1,iprot),
687 & scount(0,iprot),idispl(0,iprot),MPI_INTEGER,Comm1,IERROR)
688 do i=1,ntot_work(iprot)
689 list_conf(i,iprot)=list_conf_(i,iprot)
692 write (iout,*) "Protein",i,
693 & " global list of conformations of processor",me
694 do i=1,ntot_work(iprot)
695 write(iout,'(2i5,e15.5,33f7.3)')i,list_conf(i,iprot),
696 & e_total(list_conf(i,iprot),iprot)
697 c & ,(nu(k,i,iprot),k=1,natlike(iprot))
703 c Construct the mapping of the new list to the original numbers of
709 do i=1,ntot_work(iprot)
710 tsil(list_conf(i,iprot),iprot)=i
713 write (iout,*) "Protein",i," List-to-conformation mapping"
715 write(iout,*) i,tsil(i,iprot)
720 c Divide the work again based on the current lists of conformations
722 call work_partition(.true.)
724 c If the conformations fit into memory, read them off a DA scratchfile.
727 call restore_molinfo(iprot)
729 nchunk_conf(iprot)=iroof(scount(me1,iprot),maxstr_proc)
731 nchunk_conf(iprot)=iroof(ntot_work(iprot),maxstr_proc)
733 if (nchunk_conf(iprot).eq.1) then
734 write (iout,*) "Protein",iprot,
735 & " in-memory storage of conformations."
736 if (init_ene .or. mod_fourier(nloctyp).gt.0
737 & .or. mod_elec .or. mod_scp) then
738 open (icbase,file=bprotfiles(iprot),status="old",
739 & form="unformatted",access="direct",recl=lenrec(iprot))
741 call daread_ccoords(iprot,indstart(me1,iprot),
744 call daread_ccoords(iprot,1,ntot_work(iprot))
748 open (ientin,file=benefiles(iprot),status="old",
749 & form="unformatted",access="direct",recl=lenrec_ene(iprot))
751 call daread_ene(iprot,indstart(me1,iprot),
754 call daread_ene(iprot,1,ntot_work(iprot))
757 open (icbase,file=bprotfiles(iprot),status="old",
758 & form="unformatted",access="direct",recl=lenrec(iprot))
760 call daread_ccoords(iprot,indstart(me1,iprot),
763 call daread_ccoords(iprot,1,ntot_work(iprot))
768 write (iout,*) "Protein",i,
769 & " global list of conformations of processor",me
770 do i=1,ntot_work(iprot)
771 write(iout,'(2i5,e15.5,33f7.3)')i,list_conf(i,iprot),
772 & e_total(list_conf(i,iprot),iprot)
776 write (iout,*) "Protein",iprot,
777 & " off-memory storage of conformations; ",
778 & "energy will be evaluated in",nchunk_conf(iprot)," passes."
786 write (iout,*) "E_TOTAL and ETOT_ORIG of protein",iprot
788 do i=1,ntot_work(iprot)
789 etot_orig(i,iprot)=e_total(list_conf(i,iprot),iprot)
791 write (iout,*) i,list_conf(i,iprot),
792 & e_total(list_conf(i,iprot),iprot),etot_orig(i,iprot)
795 do ibatch=1,natlike(iprot)+2
796 do ib=1,nbeta(ibatch,iprot)
797 emini = elowest(ib,ibatch,iprot)
798 if (elowest(ib,ibatch,iprot) .lt. emini)
799 & emini = elowest(ib,ibatch,iprot)
800 emin_orig(ib,ibatch,iprot)=emini
805 if (me1 .eq. Master) call write_conf_count
807 call write_conf_count
810 write (iout,*) "ELOWEST at the end of MAKE_LIST"
812 do ibatch=1,natlike(iprot)+2
813 do ib=1,nbeta(ibatch,iprot)
814 write (iout,*) "iprot",iprot," ibatch",ibatch," ib",ib,
815 & " elowest",elowest(ib,ibatch,iprot)
820 tcpu_fin = tcpu() - tcpu_ini
821 write (iout,*) "Time for creating list of conformations",tcpu_fin
823 t_func = t_func + tcpu_fin
826 c----------------------------------------------------------------------------
827 subroutine emin_search(iprot)
830 include "DIMENSIONS.ZSCOPT"
833 integer IERROR,ErrCode,Status(MPI_STATUS_SIZE,10)
834 integer req(10),msg_in(5),msg_out(5),address,size
835 character*1 buffer(8*(2*maxstr_proc*nntyp+8000))
838 include "COMMON.WEIGHTS"
839 include "COMMON.WEIGHTDER"
840 include "COMMON.COMPAR"
841 include "COMMON.ENERGIES"
842 include "COMMON.IOUNITS"
843 include "COMMON.VMCPAR"
844 include "COMMON.NAMES"
845 include "COMMON.INTERACT"
846 include "COMMON.TIME1"
847 include "COMMON.CHAIN"
848 include "COMMON.PROTFILES"
851 include "COMMON.CLASSES"
852 C Define local variables
853 integer i,ii,iii,kkk,jj,j,k,kk,l,iprot,ib,ibatch,nn
854 integer ipass_conf,istart_conf,iend_conf,Previous,Next
855 double precision energia(0:max_ene)
856 double precision etoti,elowesti,dene
857 double precision tcpu_ini,tcpu_fin,tcpu
858 double precision etot_aux,enepsjk,
859 & emini,elowest_aux(2,maxT)
864 do ibatch=1,natlike(iprot)+2
865 do ib=1,nbeta(ibatch,iprot)
866 elowest(ib,ibatch,iprot)=1.0d20
869 do ibatch=1,natlike(iprot)+2
875 do ib=1,nbeta(ibatch,iprot)
878 etoti=etoti+ww(kk)*enetb(jj,kk,iprot)
879 & *escal(kk,ib,ibatch,iprot)
881 if (ib.eq.1 .and. etoti.lt.elowest_ent(1,ibatch,iprot))
883 elowest_ent(1,ibatch,iprot)=etoti
884 elowest_ent(2,ibatch,iprot)=entfac(k,iprot)
887 c & etoti=etoti+entfac(k,iprot)/betaT(ib,ibatch,iprot)
888 etoti=etoti+entfac(k,iprot)/betaT(ib,ibatch,iprot)
889 if (etoti.lt.elowest(ib,ibatch,iprot)) then
890 elowest(ib,ibatch,iprot)=etoti
891 ind_lowest(ib,ibatch,iprot)=k
893 c write (iout,*) ib,betaT(ib,ibatch,iprot),etoti,
896 write (iout,'(2i5,2e15.5,f8.3)') k,jj,
897 & etoti,elowest(ib,ibatch,iprot),betaT(ib,ibatch,iprot)
901 write (iout,'(2i5,20f8.2)') j,jj,(enetb(jj,kk,iprot),