2 implicit real*8 (a-h,o-z)
5 include 'COMMON.CONTROL'
8 include 'COMMON.LAGRANGE'
9 include 'COMMON.QRESTR'
11 include 'COMMON.LANGEVIN'
13 include 'COMMON.LANGEVIN.lang0'
15 include 'COMMON.CHAIN'
16 include 'COMMON.DERIV'
18 include 'COMMON.LOCAL'
19 include 'COMMON.INTERACT'
20 include 'COMMON.IOUNITS'
21 include 'COMMON.NAMES'
22 include 'COMMON.TIME1'
24 include 'COMMON.SETUP'
26 include 'COMMON.HAIRPIN'
28 double precision cm(3),L(3),vcm(3)
29 double precision energia(0:n_ene)
30 double precision remd_t_bath(maxprocs)
31 integer iremd_iset(maxprocs)
33 & (maxprocs/4,maxprocs/20,maxprocs/200,maxprocs/200)
34 double precision remd_ene(0:n_ene+8,maxprocs)
35 integer iremd_acc(maxprocs),iremd_tot(maxprocs)
36 integer iremd_acc_usa(maxprocs),iremd_tot_usa(maxprocs)
42 cold integer nup(0:maxprocs),ndown(0:maxprocs)
43 integer rep2i(0:maxprocs),ireqi(maxprocs)
44 integer icache_all(maxprocs)
45 integer status(MPI_STATUS_SIZE),statusi(MPI_STATUS_SIZE,maxprocs)
46 logical synflag,end_of_run,file_exist /.false./,ovrtim
52 if(me.eq.king.or..not.out1file) then
53 write (iout,*) 'MREMD',nodes,'time before',time00-walltime
54 write (iout,*) "NREP=",nrep
58 if (ilen(tmpdir).gt.0 .and. (me.eq.king)) then
59 call copy_to_tmp(pref_orig(:ilen(pref_orig))//"_mremd.rst")
61 mremd_rst_name=prefix(:ilen(prefix))//"_mremd.rst"
63 cd print *,'MREMD',nodes
64 cd print *,'mmm',me,remd_mlist,(remd_m(i),i=1,nrep)
65 cde write (iout,*) "Start MREMD: me",me," t_bath",t_bath
69 do il1=1,max0(mset(il),1)
85 if(me.eq.king.or..not.out1file) then
86 write(iout,*) (i2rep(i),i=0,nodes-1)
87 write(iout,*) (i2set(i),i=0,nodes-1)
92 write(iout,*) i,j,il,il1,i_index(i,j,il,il1)
99 c print *,'i2rep',me,i2rep(me)
100 c print *,'rep2i',(rep2i(i),i=0,nrep)
102 cold if (i2rep(me).eq.nrep) then
105 cold nup(0)=remd_m(i2rep(me)+1)
106 cold k=rep2i(int(i2rep(me)))+1
113 cd print '(i4,a4,100i4)',me,' nup',(nup(i),i=0,nup(0))
115 cold if (i2rep(me).eq.1) then
118 cold ndown(0)=remd_m(i2rep(me)-1)
119 cold k=rep2i(i2rep(me)-2)+1
126 cd print '(i4,a6,100i4)',me,' ndown',(ndown(i),i=0,ndown(0))
129 write (*,*) "Processor",me," rest",rest,"
130 & restart1fie",restart1file
131 if(rest.and.restart1file) then
133 & inquire(file=mremd_rst_name,exist=file_exist)
134 cd write (*,*) me," Before broadcast: file_exist",file_exist
135 call MPI_Bcast(file_exist,1,MPI_LOGICAL,king,CG_COMM,
137 cd write (*,*) me," After broadcast: file_exist",file_exist
139 if(me.eq.king.or..not.out1file)
140 & write (iout,*) 'Master is reading restart1file'
141 call read1restart(i_index)
143 if(me.eq.king.or..not.out1file)
144 & write (iout,*) 'WARNING : no restart1file'
147 if(me.eq.king.or..not.out1file) then
148 write(iout,*) "i2set",(i2set(i),i=0,nodes-1)
149 write(iout,*) "i_index"
154 write(iout,*) i,j,il,il1,i_index(i,j,il,il1)
163 if (rest.and..not.restart1file)
164 & inquire(file=mremd_rst_name,exist=file_exist)
165 if(.not.file_exist.and.rest.and..not.restart1file)
166 & write(iout,*) 'WARNING : no restart file',mremd_rst_name
167 IF (rest.and.file_exist.and..not.restart1file) THEN
168 write (iout,*) 'Master is reading restart file',
170 open(irest2,file=mremd_rst_name,status='unknown')
172 read (irest2,*) (i2rep(i),i=0,nodes-1)
174 read (irest2,*) (ifirst(i),i=1,remd_m(1))
177 read (irest2,*) nupa(0,il),(nupa(i,il),i=1,nupa(0,il))
179 read (irest2,*) ndowna(0,il),
180 & (ndowna(i,il),i=1,ndowna(0,il))
186 read (irest2,*) (mset(i),i=1,nset)
188 read (irest2,*) (i2set(i),i=0,nodes-1)
193 read(irest2,*) (i_index(i,j,il,il1),j=1,remd_m(i))
198 write(iout,*) "i2set",(i2set(i),i=0,nodes-1)
199 write(iout,*) "i_index"
204 write(iout,*) i,j,il,il1,i_index(i,j,il,il1)
213 write (iout,'(a6,1000i5)') "i2rep",(i2rep(i),i=0,nodes-1)
214 write (iout,'(a6,1000i5)') "ifirst",
215 & (ifirst(i),i=1,remd_m(1))
217 write (iout,'(a6,i4,a1,100i4)') "nupa",il,":",
218 & (nupa(i,il),i=1,nupa(0,il))
219 write (iout,'(a6,i4,a1,100i4)') "ndowna",il,":",
220 & (ndowna(i,il),i=1,ndowna(0,il))
222 ELSE IF (.not.(rest.and.file_exist)) THEN
228 if (i2rep(il-1).eq.nrep) then
231 nupa(0,il)=remd_m(i2rep(il-1)+1)
232 k=rep2i(int(i2rep(il-1)))+1
238 if (i2rep(il-1).eq.1) then
241 ndowna(0,il)=remd_m(i2rep(il-1)-1)
242 k=rep2i(i2rep(il-1)-2)+1
250 write (iout,'(a6,100i4)') "ifirst",
251 & (ifirst(i),i=1,remd_m(1))
253 write (iout,'(a6,i4,a1,100i4)') "nupa",il,":",
254 & (nupa(i,il),i=1,nupa(0,il))
255 write (iout,'(a6,i4,a1,100i4)') "ndowna",il,":",
256 & (ndowna(i,il),i=1,ndowna(0,il))
262 c t_bath=retmin+(retmax-retmin)*me/(nodes-1)
263 if(.not.(rest.and.file_exist.and.restart1file)) then
264 if (me .eq. king) then
267 t_bath=retmin+(retmax-retmin)*exp(float(i2rep(me)-nrep))
269 cd print *,'ttt',me,remd_tlist,(remd_t(i),i=1,nrep)
270 if (remd_tlist) t_bath=remd_t(int(i2rep(me)))
275 if(me.eq.king.or..not.out1file)
276 & write(iout,*) me,"iset=",iset,"t_bath=",t_bath
280 stdfp=dsqrt(2*Rb*t_bath/d_time)
282 stdfsc(i)=dsqrt(2*Rb*t_bath/d_time)
285 c print *,'irep',me,t_bath
287 if (me.eq.king .or. .not. out1file)
288 & write (iout,'(a60,f10.5)') "REMD Temperature:",t_bath
289 call rescale_weights(t_bath)
293 c------copy MD--------------
294 c The driver for molecular dynamics subroutines
295 c------------------------------------------------
301 if(me.eq.king.or..not.out1file)
302 & write (iout,'(20(1h=),a20,20(1h=))') "MD calculation started"
308 c Determine the inverse of the inertia matrix.
309 call setup_MD_matrices
313 if (me.eq.king .or. .not. out1file)
314 & write (iout,'(a60,f10.5)') "REMD restart Temperature:",t_bath
315 stdfp=dsqrt(2*Rb*t_bath/d_time)
317 stdfsc(i)=dsqrt(2*Rb*t_bath/d_time)
319 call rescale_weights(t_bath)
323 t_MDsetup = MPI_Wtime()-tt0
325 t_MDsetup = tcpu()-tt0
328 c Entering the MD loop
334 if (lang.eq.2 .or. lang.eq.3) then
338 call sd_verlet_p_setup
340 call sd_verlet_ciccotti_setup
344 pfric0_mat(i,j,0)=pfric_mat(i,j)
345 afric0_mat(i,j,0)=afric_mat(i,j)
346 vfric0_mat(i,j,0)=vfric_mat(i,j)
347 prand0_mat(i,j,0)=prand_mat(i,j)
348 vrand0_mat1(i,j,0)=vrand_mat1(i,j)
349 vrand0_mat2(i,j,0)=vrand_mat2(i,j)
354 flag_stoch(i)=.false.
358 & "LANG=2 or 3 NOT SUPPORTED. Recompile without -DLANG0"
360 call MPI_Abort(MPI_COMM_WORLD,IERROR,ERRCODE)
364 else if (lang.eq.1 .or. lang.eq.4) then
368 if (me.eq.king .or. .not. out1file)
369 & write(iout,*) 'Setup time',time00-walltime
372 t_langsetup=MPI_Wtime()-tt0
375 t_langsetup=tcpu()-tt0
380 do while(.not.end_of_run)
382 if(itime.eq.n_timestep.and.me.eq.king) end_of_run=.true.
383 if(mremdsync.and.itime.eq.n_timestep) end_of_run=.true.
385 if (lang.gt.0 .and. surfarea .and.
386 & mod(itime,reset_fricmat).eq.0) then
387 if (lang.eq.2 .or. lang.eq.3) then
391 call sd_verlet_p_setup
393 call sd_verlet_ciccotti_setup
397 pfric0_mat(i,j,0)=pfric_mat(i,j)
398 afric0_mat(i,j,0)=afric_mat(i,j)
399 vfric0_mat(i,j,0)=vfric_mat(i,j)
400 prand0_mat(i,j,0)=prand_mat(i,j)
401 vrand0_mat1(i,j,0)=vrand_mat1(i,j)
402 vrand0_mat2(i,j,0)=vrand_mat2(i,j)
407 flag_stoch(i)=.false.
410 else if (lang.eq.1 .or. lang.eq.4) then
413 write (iout,'(a,i10)')
414 & "Friction matrix reset based on surface area, itime",itime
416 if (reset_vel .and. tbf .and. lang.eq.0
417 & .and. mod(itime,count_reset_vel).eq.0) then
419 if (me.eq.king .or. .not. out1file)
420 & write(iout,'(a,f20.2)')
421 & "Velocities reset to random values, time",totT
424 d_t_old(j,i)=d_t(j,i)
428 if (reset_moment .and. mod(itime,count_reset_moment).eq.0) then
432 d_t(j,0)=d_t(j,0)-vcm(j)
435 kinetic_T=2.0d0/(dimen3*Rb)*EK
436 scalfac=dsqrt(T_bath/kinetic_T)
437 cd write(iout,'(a,f20.2)') "Momenta zeroed out, time",totT
440 d_t_old(j,i)=scalfac*d_t(j,i)
446 c Time-reversible RESPA algorithm
447 c (Tuckerman et al., J. Chem. Phys., 97, 1990, 1992)
448 call RESPA_step(itime)
450 c Variable time step algorithm.
451 call velverlet_step(itime)
455 call brown_step(itime)
457 print *,"Brown dynamics not here!"
459 call MPI_Abort(MPI_COMM_WORLD,IERROR,ERRCODE)
465 if (mod(itime,ntwe).eq.0) call statout(itime)
467 if (mod(itime,ntwx).eq.0.and..not.traj1file) then
468 write (tytul,'("time",f8.2," temp",f8.1)') totT,t_bath
470 call hairpin(.true.,nharp,iharp)
471 call secondary2(.true.)
472 call pdbout(potE,tytul,ipdb)
477 if (mod(itime,ntwx).eq.0.and.traj1file) then
478 if(ntwx_cache.lt.max_cache_traj_use) then
479 ntwx_cache=ntwx_cache+1
481 if (max_cache_traj_use.ne.1)
482 & print *,itime,"processor ",me," over cache ",ntwx_cache
485 totT_cache(i)=totT_cache(i+1)
486 EK_cache(i)=EK_cache(i+1)
487 potE_cache(i)=potE_cache(i+1)
488 t_bath_cache(i)=t_bath_cache(i+1)
489 Uconst_cache(i)=Uconst_cache(i+1)
490 iset_cache(i)=iset_cache(i+1)
493 qfrag_cache(ii,i)=qfrag_cache(ii,i+1)
496 qpair_cache(ii,i)=qpair_cache(ii,i+1)
499 utheta_cache(ii,i)=utheta_cache(ii,i+1)
500 ugamma_cache(ii,i)=ugamma_cache(ii,i+1)
501 uscdiff_cache(ii,i)=uscdiff_cache(ii,i+1)
507 c_cache(j,ii,i)=c_cache(j,ii,i+1)
513 totT_cache(ntwx_cache)=totT
514 EK_cache(ntwx_cache)=EK
515 potE_cache(ntwx_cache)=potE
516 t_bath_cache(ntwx_cache)=t_bath
517 Uconst_cache(ntwx_cache)=Uconst
518 iset_cache(ntwx_cache)=iset
521 qfrag_cache(i,ntwx_cache)=qfrag(i)
524 qpair_cache(i,ntwx_cache)=qpair(i)
527 utheta_cache(i,ntwx_cache)=utheta(i)
528 ugamma_cache(i,ntwx_cache)=ugamma(i)
529 uscdiff_cache(i,ntwx_cache)=uscdiff(i)
531 C print *,'przed returnbox'
533 C call enerprint(remd_ene(0,i))
536 c_cache(j,i,ntwx_cache)=c(j,i)
541 if ((rstcount.eq.1000.or.itime.eq.n_timestep)
542 & .and..not.restart1file) then
545 open(irest1,file=mremd_rst_name,status='unknown')
546 write (irest1,*) "i2rep"
547 write (irest1,*) (i2rep(i),i=0,nodes-1)
548 write (irest1,*) "ifirst"
549 write (irest1,*) (ifirst(i),i=1,remd_m(1))
551 write (irest1,*) "nupa",il
552 write (irest1,*) nupa(0,il),(nupa(i,il),i=1,nupa(0,il))
553 write (irest1,*) "ndowna",il
554 write (irest1,*) ndowna(0,il),
555 & (ndowna(i,il),i=1,ndowna(0,il))
558 write (irest1,*) "nset"
559 write (irest1,*) nset
560 write (irest1,*) "mset"
561 write (irest1,*) (mset(i),i=1,nset)
562 write (irest1,*) "i2set"
563 write (irest1,*) (i2set(i),i=0,nodes-1)
564 write (irest1,*) "i_index"
568 write(irest1,*) (i_index(i,j,il,il1),j=1,remd_m(i))
576 open(irest2,file=rest2name,status='unknown')
577 write(irest2,*) totT,EK,potE,totE,t_bath
579 write (irest2,'(3e15.5)') (d_t(j,i),j=1,3)
582 write (irest2,'(3e15.5)') (dc(j,i),j=1,3)
585 write (irest2,*) iset
592 c forced synchronization
593 if (mod(itime,i_sync_step).eq.0 .and. me.ne.king
594 & .and. .not. mremdsync) then
596 call mpi_iprobe(0,101,CG_COMM,synflag,status,ierr)
598 call mpi_recv(itime_master, 1, MPI_INTEGER,
599 & 0,101,CG_COMM, status, ierr)
600 call mpi_barrier(CG_COMM, ierr)
601 cdeb if (out1file.or.traj1file) then
602 cdeb call mpi_gather(itime,1,mpi_integer,
603 cdeb & icache_all,1,mpi_integer,king,
606 & call mpi_gather(ntwx_cache,1,mpi_integer,
607 & icache_all,1,mpi_integer,king,
610 & write(iout,*) 'REMD synchro at',itime_master,itime
611 if (itime_master.ge.n_timestep .or. ovrtim())
613 ctime call flush(iout)
618 if ((mod(itime,nstex).eq.0.and.me.eq.king
619 & .or.end_of_run.and.me.eq.king )
620 & .and. .not. mremdsync ) then
623 call mpi_isend(itime,1,MPI_INTEGER,i,101,
624 & CG_COMM, ireqi(i), ierr)
625 cd write(iout,*) 'REMD synchro with',i
628 call mpi_waitall(nodes-1,ireqi,statusi,ierr)
629 call mpi_barrier(CG_COMM, ierr)
631 write(iout,*) 'REMD synchro at',itime,'time=',time01-time00
632 if (out1file.or.traj1file) then
633 cdeb call mpi_gather(itime,1,mpi_integer,
634 cdeb & itime_all,1,mpi_integer,king,
636 cdeb write(iout,'(a19,8000i8)') ' REMD synchro itime',
637 cdeb & (itime_all(i),i=1,nodes)
639 cdeb imin_itime=itime_all(1)
641 cdeb if(itime_all(i).lt.imin_itime) imin_itime=itime_all(i)
643 cdeb ii_write=(imin_itime-imin_itime_old)/ntwx
644 cdeb imin_itime_old=int(imin_itime/ntwx)*ntwx
645 cdeb write(iout,*) imin_itime,imin_itime_old,ii_write
646 call mpi_gather(ntwx_cache,1,mpi_integer,
647 & icache_all,1,mpi_integer,king,
649 c write(iout,'(a19,8000i8)') ' ntwx_cache',
650 c & (icache_all(i),i=1,nodes)
651 ii_write=icache_all(1)
653 if(icache_all(i).lt.ii_write) ii_write=icache_all(i)
655 c write(iout,*) "MIN ii_write=",ii_write
658 ctime call flush(iout)
660 if(mremdsync .and. mod(itime,nstex).eq.0) then
662 if (me.eq.king .or. .not. out1file)
663 & write(iout,*) 'REMD synchro at',itime
666 call mpi_gather(ntwx_cache,1,mpi_integer,
667 & icache_all,1,mpi_integer,king,
670 write(iout,'(a19,8000i8)') ' ntwx_cache',
671 & (icache_all(i),i=1,nodes)
672 ii_write=icache_all(1)
674 if(icache_all(i).lt.ii_write) ii_write=icache_all(i)
676 write(iout,*) "MIN ii_write=",ii_write
682 c Update the time safety limiy
683 if (time001-time00.gt.safety) then
684 safety=time001-time00+600
685 write (iout,*) "****** SAFETY increased to",safety," s"
687 if (ovrtim()) end_of_run=.true.
689 if(synflag.and..not.end_of_run) then
693 write(iout,*) 'REMD before',me,t_bath
695 c call mpi_gather(t_bath,1,mpi_double_precision,
696 c & remd_t_bath,1,mpi_double_precision,king,
698 potEcomp(n_ene+1)=t_bath
700 potEcomp(n_ene+2)=iset
701 if (iset.lt.nset) then
706 call Econstr_back_qlike
710 potEcomp(n_ene+3)=Uconst+Uconst_back
718 call Econstr_back_qlike
722 potEcomp(n_ene+4)=Uconst+Uconst_back
726 c 9/11/17 Adaptive US
729 write (iout,*) "me ",me," itt",itt
731 if (itt.lt.nrep) then
735 potEcomp(n_ene+5)=Uconst
737 write (iout,*) "t_bath",t_bath_temp,t_bath,
740 if (iset.lt.nset) then
744 potEcomp(n_ene+7)=Uconst
746 write (iout,*)"iset",i_set_temp,iset," Uconst",Uconst
756 potEcomp(n_ene+6)=Uconst
758 write (iout,*) "t_bath",t_bath_temp,t_bath,
765 potEcomp(n_ene+8)=Uconst
767 write (iout,*)"iset",i_set_temp,iset," Uconst",Uconst
775 call mpi_gather(potEcomp(0),n_ene+9,mpi_double_precision,
776 & remd_ene(0,1),n_ene+9,mpi_double_precision,king,
779 call mpi_gather(elow,1,mpi_double_precision,
780 & elowi,1,mpi_double_precision,king,
782 call mpi_gather(ehigh,1,mpi_double_precision,
783 & ehighi,1,mpi_double_precision,king,
788 if (me.eq.king .or. .not. out1file) then
789 write(iout,*) 'REMD gather times=',time03-time01
793 if (restart1file) call write1rst(i_index)
796 if (me.eq.king .or. .not. out1file) then
797 write(iout,*) 'REMD writing rst time=',time04-time03
800 if (traj1file) call write1traj
802 cdeb call mpi_gather(ntwx_cache,1,mpi_integer,
803 cdeb & icache_all,1,mpi_integer,king,
805 cdeb write(iout,'(a19,8000i8)') ' ntwx_cache after traj1file',
806 cdeb & (icache_all(i),i=1,nodes)
811 if (me.eq.king .or. .not. out1file) then
812 write(iout,*) 'REMD writing traj time=',time05-time04
819 remd_t_bath(i)=remd_ene(n_ene+1,i)
820 iremd_iset(i)=remd_ene(n_ene+2,i)
824 co write(iout,*) 'REMD exchange temp,ene,elow,ehigh'
826 write(iout,'(i4,4f12.5)') i,remd_t_bath(i),remd_ene(0,i),
830 write(iout,*) 'REMD exchange temp,ene'
832 write(iout,'(i4,2f12.5)') i,remd_t_bath(i),remd_ene(0,i)
833 write(iout,'(6f12.5)') (remd_ene(j,i),j=1,n_ene)
837 c-------------------------------------
840 write (iout,*) "Enter exchnge, remd_m",remd_m(1),
842 write (iout,*) "remd_m(1)",remd_m(1)
845 i=ifirst(iran_num(1,remd_m(1)))
850 & write (iout,*) "i",i," nupa(0,i)",int(nupa(0,i))
851 if(i.gt.0.and.nupa(0,i).gt.0) then
853 c if (i.eq.1 .and. int(nupa(0,i)).eq.1) then
855 c & "CHUJ ABSOLUTNY!!! No way to sample a distinct replica in MREMD"
857 c call MPI_Abort(MPI_COMM_WORLD,ERRCODE,ierr)
859 c do while (iex.eq.i)
860 c write (iout,*) "upper",nupa(int(nupa(0,i)),i)
861 iex=nupa(iran_num(1,int(nupa(0,i))),i)
863 c write (iout,*) "nupa(0,i)",nupa(0,i)," iex",iex
866 write (iout,*) "i",i,"iex",iex," temperatures",
867 & remd_t_bath(i),remd_t_bath(iex)
870 call muca_delta(remd_t_bath,remd_ene,i,iex,delta)
872 c Swap temperatures between conformations i and iex with recalculating the free energies
873 c following temperature changes.
874 ene_iex_iex=remd_ene(0,iex)
875 ene_i_i=remd_ene(0,i)
876 c write (iout,*) "i",i," ene_i_i",ene_i_i,
877 c & " iex",iex," ene_iex_iex",ene_iex_iex
878 c write (iout,*) "rescaling weights with temperature",
881 call rescale_weights(remd_t_bath(i))
883 c write (iout,*) "0,iex",remd_t_bath(i)
884 c call enerprint(remd_ene(0,iex))
886 call sum_energy(remd_ene(0,iex),.false.)
887 ene_iex_i=remd_ene(0,iex)
888 c write (iout,*) "ene_iex_i",remd_ene(0,iex)
890 c write (iout,*) "0,i",remd_t_bath(i)
891 c call enerprint(remd_ene(0,i))
893 call sum_energy(remd_ene(0,i),.false.)
894 c write (iout,*) "ene_i_i",remd_ene(0,i)
896 c write (iout,*) "rescaling weights with temperature",
898 if (real(ene_i_i).ne.real(remd_ene(0,i))) then
899 write (iout,*) "ERROR: inconsistent energies:",i,
900 & ene_i_i,remd_ene(0,i)
902 call rescale_weights(remd_t_bath(iex))
904 c write (iout,*) "0,i",remd_t_bath(iex)
905 c call enerprint(remd_ene(0,i))
907 call sum_energy(remd_ene(0,i),.false.)
908 c write (iout,*) "ene_i_iex",remd_ene(0,i)
910 ene_i_iex=remd_ene(0,i)
912 c write (iout,*) "0,iex",remd_t_bath(iex)
913 c call enerprint(remd_ene(0,iex))
915 call sum_energy(remd_ene(0,iex),.false.)
916 if (real(ene_iex_iex).ne.real(remd_ene(0,iex))) then
917 write (iout,*) "ERROR: inconsistent energies:",iex,
918 & ene_iex_iex,remd_ene(0,iex)
921 write (iout,*) "ene_iex_iex",remd_ene(0,iex)
922 write (iout,*) "i",i," iex",iex
923 write (iout,'(4(a,e15.5))') "ene_i_i",ene_i_i,
924 & " ene_i_iex",ene_i_iex,
925 & " ene_iex_i",ene_iex_i," ene_iex_iex",ene_iex_iex
928 delta=(ene_iex_iex-ene_i_iex)/(Rb*remd_t_bath(iex))-
929 & (ene_iex_i-ene_i_i)/(Rb*remd_t_bath(i))
931 c write(iout,*) 'delta',delta
932 c delta=(remd_t_bath(i)-remd_t_bath(iex))*
933 c & (remd_ene(i)-remd_ene(iex))/Rb/
934 c & (remd_t_bath(i)*remd_t_bath(iex))
936 if (delta .gt. 50.0d0) then
942 else if (delta.lt.-50.0d0) then
951 iremd_tot(int(i2rep(i-1)))=iremd_tot(int(i2rep(i-1)))+1
952 xxx=ran_number(0.0d0,1.0d0)
953 c write(iout,'(2i4,a6,2f12.5)') i,iex,' delta',delta,xxx
955 if (delta .gt. xxx) then
957 remd_t_bath(i)=remd_t_bath(iex)
959 remd_ene(0,i)=ene_i_iex
960 remd_ene(0,iex)=ene_iex_i
966 ehighi(i)=ehighi(iex)
973 nupa(k,i)=nupa(k,iex)
976 ndowna(k,i)=ndowna(k,iex)
980 if (ifirst(il).eq.i) ifirst(il)=iex
982 if (nupa(k,il).eq.i) then
984 elseif (nupa(k,il).eq.iex) then
989 if (ndowna(k,il).eq.i) then
991 elseif (ndowna(k,il).eq.iex) then
997 iremd_acc(int(i2rep(i-1)))=iremd_acc(int(i2rep(i-1)))+1
999 i2rep(i-1)=i2rep(iex-1)
1002 write(iout,*) 'exchange',i,iex
1003 write (iout,'(a8,100i4)') "@ ifirst",
1004 & (ifirst(k),k=1,remd_m(1))
1006 write (iout,'(a8,i4,a1,100i4)') "@ nupa",il,":",
1007 & (nupa(k,il),k=1,nupa(0,il))
1008 write (iout,'(a8,i4,a1,100i4)') "@ ndowna",il,":",
1009 & (ndowna(k,il),k=1,ndowna(0,il))
1014 remd_ene(0,iex)=ene_iex_iex
1015 remd_ene(0,i)=ene_i_i
1021 cd write (iout,*) "exchange completed"
1025 cd write(iout,*) "########",ii
1027 i_temp=iran_num(1,nrep)
1028 i_mult=iran_num(1,remd_m(i_temp))
1029 i_iset=iran_num(1,nset)
1030 i_mset=iran_num(1,mset(i_iset))
1031 i=i_index(i_temp,i_mult,i_iset,i_mset)
1033 cd write(iout,*) "i=",i,i_temp,i_mult,i_iset,i_mset
1036 cd write(iout,*) "i_dir=",i_dir
1038 if(i_dir.eq.1 .and. remd_m(i_temp+1).gt.0 )then
1041 i_mult1=iran_num(1,remd_m(i_temp1))
1043 i_mset1=iran_num(1,mset(i_iset1))
1044 iex=i_index(i_temp1,i_mult1,i_iset1,i_mset1)
1045 c 9/1/17 AL: Correction; otherwise the restraint energies are mis-assigned
1046 c on failed replica exchange attempt
1047 econstr_temp_i=remd_ene(20,i)
1048 econstr_temp_iex=remd_ene(20,iex)
1049 c 9/11/17 AL: Adaptive sampling (temperature dependent restraints potentials)
1051 remd_ene(20,i)=remd_ene(n_ene+5,i)
1052 remd_ene(20,iex)=remd_ene(n_ene+6,iex)
1054 elseif(i_dir.eq.2 .and. mset(i_iset+1).gt.0)then
1057 i_mult1=iran_num(1,remd_m(i_temp1))
1059 i_mset1=iran_num(1,mset(i_iset1))
1060 iex=i_index(i_temp1,i_mult1,i_iset1,i_mset1)
1061 econstr_temp_i=remd_ene(20,i)
1062 econstr_temp_iex=remd_ene(20,iex)
1063 remd_ene(20,i)=remd_ene(n_ene+3,i)
1064 remd_ene(20,iex)=remd_ene(n_ene+4,iex)
1066 elseif(remd_m(i_temp+1).gt.0.and.mset(i_iset+1).gt.0)then
1069 i_mult1=iran_num(1,remd_m(i_temp1))
1071 i_mset1=iran_num(1,mset(i_iset1))
1072 iex=i_index(i_temp1,i_mult1,i_iset1,i_mset1)
1073 econstr_temp_i=remd_ene(20,i)
1074 econstr_temp_iex=remd_ene(20,iex)
1076 remd_ene(20,i)=remd_ene(n_ene+7,i)
1077 remd_ene(20,iex)=remd_ene(n_ene+8,iex)
1079 remd_ene(20,i)=remd_ene(n_ene+3,i)
1080 remd_ene(20,iex)=remd_ene(n_ene+4,iex)
1086 cd write(iout,*) "iex=",iex,i_temp1,i_mult1,i_iset1,i_mset1
1089 c Swap temperatures between conformations i and iex with recalculating the free energies
1090 c following temperature changes.
1092 write (iout,*) "i_dir",i_dir," i",i," iex",iex,
1093 & " t_bath",remd_t_bath(i),remd_t_bath(iex)
1095 ene_iex_iex=remd_ene(0,iex)
1096 ene_i_i=remd_ene(0,i)
1097 co write (iout,*) "rescaling weights with temperature",
1099 call rescale_weights(remd_t_bath(i))
1101 call sum_energy(remd_ene(0,iex),.false.)
1102 ene_iex_i=remd_ene(0,iex)
1103 cd write (iout,*) "ene_iex_i",remd_ene(0,iex)
1104 c call sum_energy(remd_ene(0,i),.false.)
1105 cd write (iout,*) "ene_i_i",remd_ene(0,i)
1106 c write (iout,*) "rescaling weights with temperature",
1107 c & remd_t_bath(iex)
1108 c if (real(ene_i_i).ne.real(remd_ene(0,i))) then
1109 c write (iout,*) "ERROR: inconsistent energies:",i,
1110 c & ene_i_i,remd_ene(0,i)
1112 call rescale_weights(remd_t_bath(iex))
1113 call sum_energy(remd_ene(0,i),.false.)
1114 cd write (iout,*) "ene_i_iex",remd_ene(0,i)
1115 ene_i_iex=remd_ene(0,i)
1116 c call sum_energy(remd_ene(0,iex),.false.)
1117 c if (real(ene_iex_iex).ne.real(remd_ene(0,iex))) then
1118 c write (iout,*) "ERROR: inconsistent energies:",iex,
1119 c & ene_iex_iex,remd_ene(0,iex)
1121 cd write (iout,*) "ene_iex_iex",remd_ene(0,iex)
1122 c write (iout,*) "i",i," iex",iex
1123 cd write (iout,'(4(a,e15.5))') "ene_i_i",ene_i_i,
1124 cd & " ene_i_iex",ene_i_iex,
1125 cd & " ene_iex_i",ene_iex_i," ene_iex_iex",ene_iex_iex
1126 delta=(ene_iex_iex-ene_i_iex)/(Rb*remd_t_bath(iex))-
1127 & (ene_iex_i-ene_i_i)/(Rb*remd_t_bath(i))
1129 cd write(iout,*) 'delta',delta
1130 c delta=(remd_t_bath(i)-remd_t_bath(iex))*
1131 c & (remd_ene(i)-remd_ene(iex))/Rb/
1132 c & (remd_t_bath(i)*remd_t_bath(iex))
1133 if (delta .gt. 50.0d0) then
1138 if (i_dir.eq.1.or.i_dir.eq.3)
1139 & iremd_tot(int(i2rep(i-1)))=iremd_tot(int(i2rep(i-1)))+1
1140 if (i_dir.eq.2.or.i_dir.eq.3)
1141 & iremd_tot_usa(int(i2set(i-1)))=
1142 & iremd_tot_usa(int(i2set(i-1)))+1
1143 xxx=ran_number(0.0d0,1.0d0)
1144 cd write(iout,'(2i4,a6,2f12.5)') i,iex,' delta',delta,xxx
1145 if (delta .gt. xxx) then
1147 remd_t_bath(i)=remd_t_bath(iex)
1148 remd_t_bath(iex)=tmp
1151 iremd_iset(i)=iremd_iset(iex)
1152 iremd_iset(iex)=itmp
1154 remd_ene(0,i)=ene_i_iex
1155 remd_ene(0,iex)=ene_iex_i
1157 if (i_dir.eq.1.or.i_dir.eq.3)
1158 & iremd_acc(int(i2rep(i-1)))=iremd_acc(int(i2rep(i-1)))+1
1161 i2rep(i-1)=i2rep(iex-1)
1164 if (i_dir.eq.2.or.i_dir.eq.3)
1165 & iremd_acc_usa(int(i2set(i-1)))=
1166 & iremd_acc_usa(int(i2set(i-1)))+1
1169 i2set(i-1)=i2set(iex-1)
1172 itmp=i_index(i_temp,i_mult,i_iset,i_mset)
1173 i_index(i_temp,i_mult,i_iset,i_mset)=
1174 & i_index(i_temp1,i_mult1,i_iset1,i_mset1)
1175 i_index(i_temp1,i_mult1,i_iset1,i_mset1)=itmp
1178 remd_ene(0,iex)=ene_iex_iex
1179 remd_ene(0,i)=ene_i_i
1180 remd_ene(20,iex)=econstr_temp_iex
1181 remd_ene(20,i)=econstr_temp_i
1185 cd do il1=1,mset(il)
1188 cd write(iout,*) i,j,il,il1,i_index(i,j,il,il1)
1201 c-------------------------------------
1202 write (iout,*) "NREP",nrep
1204 if(iremd_tot(i).ne.0)
1205 & write(iout,'(a3,i4,2f12.5,i5)') 'ACC',i,remd_t(i)
1206 & ,iremd_acc(i)/(1.0*iremd_tot(i)),iremd_tot(i)
1211 if(iremd_tot_usa(i).ne.0)
1212 & write(iout,'(a10,i4,f12.5,i8)') 'ACC_usampl',i,
1213 & iremd_acc_usa(i)/(1.0*iremd_tot_usa(i)),iremd_tot_usa(i)
1219 cd write (iout,'(a6,100i4)') "ifirst",
1220 cd & (ifirst(i),i=1,remd_m(1))
1222 cd write (iout,'(a5,i4,a1,100i4)') "nup",il,":",
1223 cd & (nupa(i,il),i=1,nupa(0,il))
1224 cd write (iout,'(a5,i4,a1,100i4)') "ndown",il,":",
1225 cd & (ndowna(i,il),i=1,ndowna(0,il))
1230 cd write (iout,*) "Before scatter"
1232 call mpi_scatter(remd_t_bath,1,mpi_double_precision,
1233 & t_bath,1,mpi_double_precision,king,
1235 cd write (iout,*) "After scatter"
1238 & call mpi_scatter(iremd_iset,1,mpi_integer,
1239 & iset,1,mpi_integer,king,
1243 if (me.eq.king .or. .not. out1file) then
1244 write(iout,*) 'REMD scatter time=',time07-time06
1248 call mpi_scatter(elowi,1,mpi_double_precision,
1249 & elow,1,mpi_double_precision,king,
1251 call mpi_scatter(ehighi,1,mpi_double_precision,
1252 & ehigh,1,mpi_double_precision,king,
1255 call rescale_weights(t_bath)
1256 co write (iout,*) "Processor",me,
1257 co & " rescaling weights with temperature",t_bath
1259 stdfp=dsqrt(2*Rb*t_bath/d_time)
1261 stdfsc(i)=dsqrt(2*Rb*t_bath/d_time)
1264 cde write(iout,*) 'REMD after',me,t_bath
1266 if (me.eq.king .or. .not. out1file) then
1267 write(iout,*) 'REMD exchange time=',time08-time00
1273 if (restart1file) then
1274 if (me.eq.king .or. .not. out1file)
1275 & write(iout,*) 'writing restart at the end of run'
1276 call write1rst(i_index)
1279 if (traj1file) call write1traj
1281 cdeb call mpi_gather(ntwx_cache,1,mpi_integer,
1282 cdeb & icache_all,1,mpi_integer,king,
1283 cdeb & CG_COMM,ierr)
1284 cdeb write(iout,'(a40,8000i8)')
1285 cdeb & ' ntwx_cache after traj1file at the end',
1286 cdeb & (icache_all(i),i=1,nodes)
1291 t_MD=MPI_Wtime()-tt0
1295 if (me.eq.king .or. .not. out1file) then
1296 write (iout,'(//35(1h=),a10,35(1h=)/10(/a40,1pe15.5))')
1298 & 'MD calculations setup:',t_MDsetup,
1299 & 'Energy & gradient evaluation:',t_enegrad,
1300 & 'Stochastic MD setup:',t_langsetup,
1301 & 'Stochastic MD step setup:',t_sdsetup,
1303 write (iout,'(/28(1h=),a25,27(1h=))')
1304 & ' End of MD calculation '
1309 c-----------------------------------------------------------------------
1310 subroutine write1rst(i_index)
1311 implicit real*8 (a-h,o-z)
1312 include 'DIMENSIONS'
1314 include 'COMMON.CONTROL'
1316 include 'COMMON.LAGRANGE'
1317 include 'COMMON.QRESTR'
1318 include 'COMMON.IOUNITS'
1319 include 'COMMON.REMD'
1320 include 'COMMON.SETUP'
1321 include 'COMMON.CHAIN'
1322 include 'COMMON.SBRIDGE'
1323 include 'COMMON.INTERACT'
1325 real d_restart1(3,2*maxres*maxprocs),r_d(3,2*maxres),
1326 & d_restart2(3,2*maxres*maxprocs)
1330 & (maxprocs/4,maxprocs/20,maxprocs/200,maxprocs/200)
1331 common /przechowalnia/ d_restart1,d_restart2
1336 t5_restart1(4)=t_bath
1337 t5_restart1(5)=Uconst
1339 call mpi_gather(t5_restart1,5,mpi_real,
1340 & t_restart1,5,mpi_real,king,CG_COMM,ierr)
1348 call mpi_gather(r_d,3*2*nres,mpi_real,
1349 & d_restart1,3*2*nres,mpi_real,king,
1358 call mpi_gather(r_d,3*2*nres,mpi_real,
1359 & d_restart2,3*2*nres,mpi_real,king,
1364 call xdrfopen_(ixdrf,mremd_rst_name, "w", iret)
1366 call xdrfint_(ixdrf, i2rep(i), iret)
1369 call xdrfint_(ixdrf, ifirst(i), iret)
1373 call xdrfint_(ixdrf, nupa(i,il), iret)
1377 call xdrfint_(ixdrf, ndowna(i,il), iret)
1383 call xdrffloat_(ixdrf, t_restart1(j,il), iret)
1390 call xdrffloat_(ixdrf, d_restart1(j,i+2*nres*il), iret)
1397 call xdrffloat_(ixdrf, d_restart2(j,i+2*nres*il), iret)
1403 call xdrfint_(ixdrf, nset, iret)
1405 call xdrfint_(ixdrf,mset(i), iret)
1408 call xdrfint_(ixdrf,i2set(i), iret)
1414 itmp=i_index(i,j,il,il1)
1415 call xdrfint_(ixdrf,itmp, iret)
1422 call xdrfclose_(ixdrf, iret)
1424 call xdrfopen(ixdrf,mremd_rst_name, "w", iret)
1426 call xdrfint(ixdrf, i2rep(i), iret)
1429 call xdrfint(ixdrf, ifirst(i), iret)
1433 call xdrfint(ixdrf, nupa(i,il), iret)
1437 call xdrfint(ixdrf, ndowna(i,il), iret)
1443 call xdrffloat(ixdrf, t_restart1(j,il), iret)
1450 call xdrffloat(ixdrf, d_restart1(j,i+2*nres*il), iret)
1457 call xdrffloat(ixdrf, d_restart2(j,i+2*nres*il), iret)
1464 call xdrfint(ixdrf, nset, iret)
1466 call xdrfint(ixdrf,mset(i), iret)
1469 call xdrfint(ixdrf,i2set(i), iret)
1475 itmp=i_index(i,j,il,il1)
1476 call xdrfint(ixdrf,itmp, iret)
1483 call xdrfclose(ixdrf, iret)
1490 subroutine write1traj
1491 implicit real*8 (a-h,o-z)
1492 include 'DIMENSIONS'
1495 include 'COMMON.IOUNITS'
1496 include 'COMMON.REMD'
1497 include 'COMMON.QRESTR'
1498 include 'COMMON.SETUP'
1499 include 'COMMON.CHAIN'
1500 include 'COMMON.SBRIDGE'
1501 include 'COMMON.INTERACT'
1505 real xcoord(3,maxres2+2),prec
1506 real r_qfrag(50),r_qpair(100)
1507 real r_utheta(50),r_ugamma(100),r_uscdiff(100)
1508 real p_qfrag(50*maxprocs),p_qpair(100*maxprocs)
1509 real p_utheta(50*maxprocs),p_ugamma(100*maxprocs),
1510 & p_uscdiff(100*maxprocs)
1511 real p_c(3,(maxres2+2)*maxprocs),r_c(3,maxres2+2)
1512 common /przechowalnia/ p_c
1514 call mpi_bcast(ii_write,1,mpi_integer,
1515 & king,CG_COMM,ierr)
1518 c print *,'traj1file',me,ii_write,ntwx_cache
1522 if(me.eq.king) call xdrfopen_(ixdrf,cartname, "a", iret)
1524 if(me.eq.king) call xdrfopen(ixdrf,cartname, "a", iret)
1527 t5_restart1(1)=totT_cache(ii)
1528 t5_restart1(2)=EK_cache(ii)
1529 t5_restart1(3)=potE_cache(ii)
1530 t5_restart1(4)=t_bath_cache(ii)
1531 t5_restart1(5)=Uconst_cache(ii)
1532 call mpi_gather(t5_restart1,5,mpi_real,
1533 & t_restart1,5,mpi_real,king,CG_COMM,ierr)
1535 call mpi_gather(iset_cache(ii),1,mpi_integer,
1536 & iset_restart1,1,mpi_integer,king,CG_COMM,ierr)
1539 r_qfrag(i)=qfrag_cache(i,ii)
1542 r_qpair(i)=qpair_cache(i,ii)
1545 r_utheta(i)=utheta_cache(i,ii)
1546 r_ugamma(i)=ugamma_cache(i,ii)
1547 r_uscdiff(i)=uscdiff_cache(i,ii)
1550 call mpi_gather(r_qfrag,nfrag,mpi_real,
1551 & p_qfrag,nfrag,mpi_real,king,
1553 call mpi_gather(r_qpair,npair,mpi_real,
1554 & p_qpair,npair,mpi_real,king,
1556 call mpi_gather(r_utheta,nfrag_back,mpi_real,
1557 & p_utheta,nfrag_back,mpi_real,king,
1559 call mpi_gather(r_ugamma,nfrag_back,mpi_real,
1560 & p_ugamma,nfrag_back,mpi_real,king,
1562 call mpi_gather(r_uscdiff,nfrag_back,mpi_real,
1563 & p_uscdiff,nfrag_back,mpi_real,king,
1567 write (iout,*) "p_qfrag"
1569 write (iout,*) i,(p_qfrag((i-1)*nfrag+j),j=1,nfrag)
1571 write (iout,*) "p_qpair"
1573 write (iout,*) i,(p_qpair((i-1)*npair+j),j=1,npair)
1579 r_c(j,i)=c_cache(j,i,ii)
1583 call mpi_gather(r_c,3*2*nres,mpi_real,
1584 & p_c,3*2*nres,mpi_real,king,
1590 call xdrffloat_(ixdrf, real(t_restart1(1,il)), iret)
1591 call xdrffloat_(ixdrf, real(t_restart1(3,il)), iret)
1592 call xdrffloat_(ixdrf, real(t_restart1(5,il)), iret)
1593 call xdrffloat_(ixdrf, real(t_restart1(4,il)), iret)
1594 call xdrfint_(ixdrf, nss, iret)
1597 call xdrfint(ixdrf, idssb(j)+nres, iret)
1598 call xdrfint(ixdrf, jdssb(j)+nres, iret)
1600 call xdrfint_(ixdrf, ihpb(j), iret)
1601 call xdrfint_(ixdrf, jhpb(j), iret)
1604 call xdrfint_(ixdrf, nfrag+npair+3*nfrag_back, iret)
1605 call xdrfint_(ixdrf, iset_restart1(il), iret)
1607 call xdrffloat_(ixdrf, p_qfrag(i+(il-1)*nfrag), iret)
1610 call xdrffloat_(ixdrf, p_qpair(i+(il-1)*npair), iret)
1613 call xdrffloat_(ixdrf, p_utheta(i+(il-1)*nfrag_back), iret)
1614 call xdrffloat_(ixdrf, p_ugamma(i+(il-1)*nfrag_back), iret)
1615 call xdrffloat_(ixdrf, p_uscdiff(i+(il-1)*nfrag_back), iret)
1620 xcoord(j,i)=p_c(j,i+(il-1)*nres*2)
1625 xcoord(j,nres+i-nnt+1)=p_c(j,i+nres+(il-1)*nres*2)
1629 call xdrf3dfcoord_(ixdrf, xcoord, itmp, prec, iret)
1633 call xdrffloat(ixdrf, real(t_restart1(1,il)), iret)
1634 call xdrffloat(ixdrf, real(t_restart1(3,il)), iret)
1635 call xdrffloat(ixdrf, real(t_restart1(5,il)), iret)
1636 call xdrffloat(ixdrf, real(t_restart1(4,il)), iret)
1637 call xdrfint(ixdrf, nss, iret)
1640 call xdrfint(ixdrf, idssb(j)+nres, iret)
1641 call xdrfint(ixdrf, jdssb(j)+nres, iret)
1643 call xdrfint(ixdrf, ihpb(j), iret)
1644 call xdrfint(ixdrf, jhpb(j), iret)
1647 call xdrfint(ixdrf, nfrag+npair+3*nfrag_back, iret)
1648 call xdrfint(ixdrf, iset_restart1(il), iret)
1650 call xdrffloat(ixdrf, p_qfrag(i+(il-1)*nfrag), iret)
1653 call xdrffloat(ixdrf, p_qpair(i+(il-1)*npair), iret)
1656 call xdrffloat(ixdrf, p_utheta(i+(il-1)*nfrag_back), iret)
1657 call xdrffloat(ixdrf, p_ugamma(i+(il-1)*nfrag_back), iret)
1658 call xdrffloat(ixdrf, p_uscdiff(i+(il-1)*nfrag_back), iret)
1663 xcoord(j,i)=p_c(j,i+(il-1)*nres*2)
1668 xcoord(j,nres+i-nnt+1)=p_c(j,i+nres+(il-1)*nres*2)
1672 call xdrf3dfcoord(ixdrf, xcoord, itmp, prec, iret)
1678 if(me.eq.king) call xdrfclose_(ixdrf, iret)
1680 if(me.eq.king) call xdrfclose(ixdrf, iret)
1682 do i=1,ntwx_cache-ii_write
1684 totT_cache(i)=totT_cache(ii_write+i)
1685 EK_cache(i)=EK_cache(ii_write+i)
1686 potE_cache(i)=potE_cache(ii_write+i)
1687 t_bath_cache(i)=t_bath_cache(ii_write+i)
1688 Uconst_cache(i)=Uconst_cache(ii_write+i)
1689 iset_cache(i)=iset_cache(ii_write+i)
1692 qfrag_cache(ii,i)=qfrag_cache(ii,ii_write+i)
1695 qpair_cache(ii,i)=qpair_cache(ii,ii_write+i)
1698 utheta_cache(ii,i)=utheta_cache(ii,ii_write+i)
1699 ugamma_cache(ii,i)=ugamma_cache(ii,ii_write+i)
1700 uscdiff_cache(ii,i)=uscdiff_cache(ii,ii_write+i)
1705 c_cache(j,ii,i)=c_cache(j,ii,ii_write+i)
1709 ntwx_cache=ntwx_cache-ii_write
1714 subroutine read1restart(i_index)
1715 implicit real*8 (a-h,o-z)
1716 include 'DIMENSIONS'
1718 include 'COMMON.CONTROL'
1720 include 'COMMON.LAGRANGE'
1721 include 'COMMON.QRESTR'
1722 include 'COMMON.IOUNITS'
1723 include 'COMMON.REMD'
1724 include 'COMMON.SETUP'
1725 include 'COMMON.CHAIN'
1726 include 'COMMON.SBRIDGE'
1727 include 'COMMON.INTERACT'
1728 real d_restart1(3,2*maxres*maxprocs),r_d(3,2*maxres),
1731 & (maxprocs/4,maxprocs/20,maxprocs/200,maxprocs/200)
1732 common /przechowalnia/ d_restart1
1733 write (*,*) "Processor",me," called read1restart"
1736 open(irest2,file=mremd_rst_name,status='unknown')
1737 read(irest2,*,err=334) i
1738 write(iout,*) "Reading old rst in ASCI format"
1740 call read1restart_old
1744 call xdrfopen_(ixdrf,mremd_rst_name, "r", iret)
1747 call xdrfint_(ixdrf, i2rep(i), iret)
1750 call xdrfint_(ixdrf, ifirst(i), iret)
1753 call xdrfint_(ixdrf, nupa(0,il), iret)
1755 call xdrfint_(ixdrf, nupa(i,il), iret)
1758 call xdrfint_(ixdrf, ndowna(0,il), iret)
1760 call xdrfint_(ixdrf, ndowna(i,il), iret)
1765 call xdrffloat_(ixdrf, t_restart1(j,il), iret)
1769 call xdrfopen(ixdrf,mremd_rst_name, "r", iret)
1772 call xdrfint(ixdrf, i2rep(i), iret)
1775 call xdrfint(ixdrf, ifirst(i), iret)
1778 call xdrfint(ixdrf, nupa(0,il), iret)
1780 call xdrfint(ixdrf, nupa(i,il), iret)
1783 call xdrfint(ixdrf, ndowna(0,il), iret)
1785 call xdrfint(ixdrf, ndowna(i,il), iret)
1790 call xdrffloat(ixdrf, t_restart1(j,il), iret)
1795 call mpi_scatter(t_restart1,5,mpi_real,
1796 & t5_restart1,5,mpi_real,king,CG_COMM,ierr)
1800 t_bath=t5_restart1(4)
1805 c read(irest2,'(3e15.5)')
1806 c & (d_restart1(j,i+2*nres*il),j=1,3)
1809 call xdrffloat_(ixdrf, d_restart1(j,i+2*nres*il), iret)
1811 call xdrffloat(ixdrf, d_restart1(j,i+2*nres*il), iret)
1817 call mpi_scatter(d_restart1,3*2*nres,mpi_real,
1818 & r_d,3*2*nres,mpi_real,king,CG_COMM,ierr)
1828 c read(irest2,'(3e15.5)')
1829 c & (d_restart1(j,i+2*nres*il),j=1,3)
1832 call xdrffloat_(ixdrf, d_restart1(j,i+2*nres*il), iret)
1834 call xdrffloat(ixdrf, d_restart1(j,i+2*nres*il), iret)
1840 call mpi_scatter(d_restart1,3*2*nres,mpi_real,
1841 & r_d,3*2*nres,mpi_real,king,CG_COMM,ierr)
1852 call xdrfint_(ixdrf, nset, iret)
1854 call xdrfint_(ixdrf,mset(i), iret)
1857 call xdrfint_(ixdrf,i2set(i), iret)
1863 call xdrfint_(ixdrf,itmp, iret)
1864 i_index(i,j,il,il1)=itmp
1872 call xdrfint(ixdrf, nset, iret)
1874 call xdrfint(ixdrf,mset(i), iret)
1877 call xdrfint(ixdrf,i2set(i), iret)
1883 call xdrfint(ixdrf,itmp, iret)
1884 i_index(i,j,il,il1)=itmp
1891 Corrected AL 8/19/2014: each processor needs whole iset array not only its
1893 c call mpi_scatter(i2set,1,mpi_integer,
1894 c & iset,1,mpi_integer,king,
1896 call mpi_bcast(i2set(0),nodes,mpi_integer,king,
1903 if(me.eq.king) close(irest2)
1907 subroutine read1restart_old
1908 implicit real*8 (a-h,o-z)
1909 include 'DIMENSIONS'
1912 include 'COMMON.LAGRANGE'
1913 include 'COMMON.QRESTR'
1914 include 'COMMON.IOUNITS'
1915 include 'COMMON.REMD'
1916 include 'COMMON.SETUP'
1917 include 'COMMON.CHAIN'
1918 include 'COMMON.SBRIDGE'
1919 include 'COMMON.INTERACT'
1920 real d_restart1(3,2*maxres*maxprocs),r_d(3,2*maxres),
1922 common /przechowalnia/ d_restart1
1924 open(irest2,file=mremd_rst_name,status='unknown')
1925 read (irest2,*) (i2rep(i),i=0,nodes-1)
1926 read (irest2,*) (ifirst(i),i=1,remd_m(1))
1928 read (irest2,*) nupa(0,il),(nupa(i,il),i=1,nupa(0,il))
1929 read (irest2,*) ndowna(0,il),
1930 & (ndowna(i,il),i=1,ndowna(0,il))
1933 read(irest2,*) (t_restart1(j,il),j=1,4)
1936 call mpi_scatter(t_restart1,5,mpi_real,
1937 & t5_restart1,5,mpi_real,king,CG_COMM,ierr)
1941 t_bath=t5_restart1(4)
1946 read(irest2,'(3e15.5)')
1947 & (d_restart1(j,i+2*nres*il),j=1,3)
1951 call mpi_scatter(d_restart1,3*2*nres,mpi_real,
1952 & r_d,3*2*nres,mpi_real,king,CG_COMM,ierr)
1962 read(irest2,'(3e15.5)')
1963 & (d_restart1(j,i+2*nres*il),j=1,3)
1967 call mpi_scatter(d_restart1,3*2*nres,mpi_real,
1968 & r_d,3*2*nres,mpi_real,king,CG_COMM,ierr)
1974 if(me.eq.king) close(irest2)
1977 c------------------------------------------