+#define DEBUG
#ifdef MPI
subroutine MREMD
implicit real*8 (a-h,o-z)
integer iremd_iset(maxprocs)
integer*2 i_index
& (maxprocs/4,maxprocs/20,maxprocs/200,maxprocs/200)
- double precision remd_ene(0:n_ene+4,maxprocs),t_bath_old
+ double precision remd_ene(0:n_ene+4,maxprocs),t_bath_old,e_tmp
integer iremd_acc(maxprocs),iremd_tot(maxprocs)
integer iremd_acc_usa(maxprocs),iremd_tot_usa(maxprocs)
integer ilen,rstcount
endif
mremd_rst_name=prefix(:ilen(prefix))//"_mremd.rst"
-cd print *,'MREMD',nodes
+cd print *,'MREMD',nodes,homol_nset
cd print *,'mmm',me,remd_mlist,(remd_m(i),i=1,nrep)
cde write (iout,*) "Start MREMD: me",me," t_bath",t_bath
endif
if(usampl.or.hremd.gt.0.or.homol_nset.gt.1) then
iset=i2set(me)
+c broadcast iset to slaves
+ if (nfgtasks.gt.1) then
+ call MPI_Bcast(11,1,MPI_INTEGER,king,FG_COMM,IERROR)
+ call MPI_Bcast(iset,1,MPI_INTEGER,king,FG_COMM,IERROR)
+ endif
if (hremd.gt.0) call set_hweights(iset)
if(me.eq.king.or..not.out1file)
& write(iout,*) me,"iset=",iset,"t_bath=",t_bath
if (me.eq.king .or. .not. out1file)
& write (iout,*) "****** SAFETY increased to",safety," s"
endif
- if (ovrtim()) end_of_run=.true.
+ if (ovrtim() .and. me.eq.king) end_of_run=.true.
+ call MPI_Bcast(end_of_run,1,MPI_LOGICAL,king,CG_COMM,IERR)
endif
if(synflag.and..not.end_of_run) then
time02=MPI_WTIME()
i_set_temp=iset
iset=iset+1
if (homol_nset.gt.1) then
- call e_modeller(potEcomp(n_ene+3))
+c broadcast iset to slaves and reduce energy
+ if (nfgtasks.gt.1) then
+ call MPI_Bcast(12,1,MPI_INTEGER,king,FG_COMM,IERROR)
+ call MPI_Bcast(iset,1,MPI_INTEGER,king,FG_COMM,IERROR)
+ call e_modeller(e_tmp)
+c write(iout,*) "iset+1 before reduce",e_tmp
+ call MPI_Barrier(FG_COMM,IERR)
+ call MPI_Reduce(e_tmp,potEcomp(n_ene+3),1,
+ & MPI_DOUBLE_PRECISION,MPI_SUM,king,FG_COMM,IERR)
+ else
+ call e_modeller(potEcomp(n_ene+3))
+ endif
c write(iout,*) "iset+1",potEcomp(n_ene+3)
else
call EconstrQ
potEcomp(n_ene+3)=Uconst
endif
iset=i_set_temp
+c broadcast iset to slaves
+ if (nfgtasks.gt.1) then
+ call MPI_Bcast(11,1,MPI_INTEGER,king,FG_COMM,IERROR)
+ call MPI_Bcast(iset,1,MPI_INTEGER,king,FG_COMM,IERROR)
+ endif
+ else
+ potEcomp(n_ene+3)=0.0
endif
if (iset.gt.1) then
i_set_temp=iset
iset=iset-1
if (homol_nset.gt.1) then
- call e_modeller(potEcomp(n_ene+4))
+c broadcast iset to slaves and reduce energy
+ if (nfgtasks.gt.1) then
+ call MPI_Bcast(12,1,MPI_INTEGER,king,FG_COMM,IERROR)
+ call MPI_Bcast(iset,1,MPI_INTEGER,king,FG_COMM,IERROR)
+ call e_modeller(e_tmp)
+c write(iout,*) "iset-1 before reduce",e_tmp
+ call MPI_Barrier(FG_COMM,IERR)
+ call MPI_Reduce(e_tmp,potEcomp(n_ene+4),1,
+ & MPI_DOUBLE_PRECISION,MPI_SUM,king,FG_COMM,IERR)
+ else
+ call e_modeller(potEcomp(n_ene+4))
+ endif
c write(iout,*) "iset-1",potEcomp(n_ene+4)
else
call EconstrQ
potEcomp(n_ene+4)=Uconst
endif
iset=i_set_temp
+c broadcast iset to slaves
+ if (nfgtasks.gt.1) then
+ call MPI_Bcast(11,1,MPI_INTEGER,king,FG_COMM,IERROR)
+ call MPI_Bcast(iset,1,MPI_INTEGER,king,FG_COMM,IERROR)
+ endif
+ else
+ potEcomp(n_ene+4)=0.0
endif
endif
if(hremd.gt.0) potEcomp(n_ene+2)=iset
if (me.eq.king) then
- write(iout,*)
+ if(homol_nset.gt.1) write(iout,*)
& 'energy_c temperature iset energy_c(iset+1) energy_c(iset-1)'
do i=1,nodes
remd_t_bath(i)=remd_ene(n_ene+1,i)
iremd_iset(i)=remd_ene(n_ene+2,i)
- write(iout,'(i4,f10.3,f6.0,i3,2f10.3)')
+ if(homol_nset.gt.1)
+ & write(iout,'(i4,f10.3,f6.0,i3,2f10.3)')
& i,remd_ene(i_econstr,i),
& remd_ene(n_ene+1,i),iremd_iset(i),
& remd_ene(n_ene+3,i),remd_ene(n_ene+4,i)
& CG_COMM,ierr)
cd write (iout,*) "After scatter"
cd call flush(iout)
- if(usampl.or.hremd.gt.0.or.homol_nset.gt.1)
- & call mpi_scatter(iremd_iset,1,mpi_integer,
+ if(usampl.or.hremd.gt.0.or.homol_nset.gt.1) then
+ call mpi_scatter(iremd_iset,1,mpi_integer,
& iset,1,mpi_integer,king,
& CG_COMM,ierr)
+c 8/31/2015 Correction by AL: send new iset to slaves
+ if (nfgtasks.gt.1) then
+ call MPI_Bcast(11,1,MPI_INTEGER,king,FG_COMM,IERROR)
+ call MPI_Bcast(iset,1,MPI_INTEGER,king,FG_COMM,IERROR)
+ endif
+
+ endif
time07=MPI_WTIME()
if (me.eq.king .or. .not. out1file) then
include 'COMMON.CHAIN'
include 'COMMON.SBRIDGE'
include 'COMMON.INTERACT'
+ include 'COMMON.CONTROL'
real d_restart1(3,2*maxres*maxprocs),r_d(3,2*maxres),
& d_restart2(3,2*maxres*maxprocs)
include 'COMMON.CHAIN'
include 'COMMON.SBRIDGE'
include 'COMMON.INTERACT'
+ include 'COMMON.CONTROL'
real d_restart1(3,2*maxres*maxprocs),r_d(3,2*maxres),
& t5_restart1(5)
integer*2 i_index
#endif
enddo
enddo
+#ifdef DEBUG
+ write (iout,*) "Conformation read",il
+ do i=1,nres
+ write (iout,'(i5,3f10.5,5x,3f10.5)')
+ & i,(d_restart1(j,i+2*nres*il),j=1,3),
+ & (d_restart1(j,nres+i+2*nres*il),j=1,3)
+ enddo
+#endif
enddo
endif
call mpi_scatter(d_restart1,3*2*nres,mpi_real,
call mpi_bcast(i2set(0),nodes,mpi_integer,king,
& CG_COMM,ierr)
iset=i2set(me)
-
+c broadcast iset to slaves
+ if (nfgtasks.gt.1) then
+ call MPI_Bcast(11,1,MPI_INTEGER,king,FG_COMM,IERROR)
+ call MPI_Bcast(iset,1,MPI_INTEGER,king,FG_COMM,IERROR)
+ endif
endif