2 !-----------------------------------------------------------------------------
10 ! use control_data, only:maxprocs
14 !-----------------------------------------------------------------------------
16 ! common /remdrestart/
17 integer(kind=2),dimension(:),allocatable :: i2set !(0:maxprocs)
18 integer(kind=2),dimension(:),allocatable :: ifirst !(maxprocs)
19 integer(kind=2),dimension(:,:),allocatable :: nupa,&
20 ndowna !(0:maxprocs/4,0:maxprocs)
21 real(kind=4),dimension(:,:),allocatable :: t_restart1 !(5,maxprocs)
22 integer,dimension(:),allocatable :: iset_restart1 !(maxprocs)
24 real(kind=4),dimension(:),allocatable :: totT_cache,EK_cache,&
25 potE_cache,t_bath_cache,Uconst_cache !(max_cache_traj)
26 real(kind=4),dimension(:,:),allocatable :: qfrag_cache !(50,max_cache_traj)
27 real(kind=4),dimension(:,:),allocatable :: qpair_cache !(100,max_cache_traj)
28 real(kind=4),dimension(:,:),allocatable :: ugamma_cache,&
29 utheta_cache,uscdiff_cache !(maxfrag_back,max_cache_traj)
30 real(kind=4),dimension(:,:,:),allocatable :: c_cache !(3,maxres2+2,max_cache_traj)
31 integer :: ntwx_cache,ii_write !,max_cache_traj_use
32 integer,dimension(:),allocatable :: iset_cache !(max_cache_traj)
33 !-----------------------------------------------------------------------------
34 ! common /przechowalnia/
35 real(kind=4),dimension(:,:),allocatable :: d_restart1 !(3,2*nres*maxprocs)
36 real(kind=4),dimension(:,:),allocatable :: d_restart2 !(3,2*nres*maxprocs)
37 real(kind=4),dimension(:,:),allocatable :: p_c !(3,(nres2+2)*maxprocs)
38 !-----------------------------------------------------------------------------
41 !-----------------------------------------------------------------------------
43 !-----------------------------------------------------------------------------
45 !-----------------------------------------------------------------------------
47 !-----------------------------------------------------------------------------
52 use control, only:tcpu,ovrtim
53 use io_base, only:ilen
56 use random, only: iran_num,ran_number
57 use compare, only:hairpin,secondary2
58 use io, only:cartout,statout
59 ! implicit real*8 (a-h,o-z)
60 ! include 'DIMENSIONS'
62 ! include 'COMMON.CONTROL'
63 ! include 'COMMON.VAR'
66 ! include 'COMMON.LANGEVIN'
68 ! include 'COMMON.LANGEVIN.lang0'
70 ! include 'COMMON.CHAIN'
71 ! include 'COMMON.DERIV'
72 ! include 'COMMON.GEO'
73 ! include 'COMMON.LOCAL'
74 ! include 'COMMON.INTERACT'
75 ! include 'COMMON.IOUNITS'
76 ! include 'COMMON.NAMES'
77 ! include 'COMMON.TIME1'
78 ! include 'COMMON.REMD'
79 ! include 'COMMON.SETUP'
80 ! include 'COMMON.MUCA'
81 ! include 'COMMON.HAIRPIN'
83 real(kind=8),dimension(3) :: L,vcm
84 real(kind=8) :: energia(0:n_ene)
86 real(kind=8) :: remd_t_bath(Nprocs) !(maxprocs)
87 integer :: iremd_iset(Nprocs) !(maxprocs)
88 integer(kind=2) :: i_index(Nprocs,Nprocs/2,Nprocs/10,Nprocs/10)
89 ! (maxprocs/4,maxprocs/20,maxprocs/200,maxprocs/200)
90 real(kind=8) :: remd_ene(0:n_ene+4,Nprocs) !(0:n_ene+4,maxprocs)
91 integer :: iremd_acc(Nprocs),iremd_tot(Nprocs) !(maxprocs)
92 integer :: iremd_acc_usa(Nprocs),iremd_tot_usa(Nprocs) !(maxprocs)
93 integer :: rstcount !el ilen,
95 character(len=50) :: tytul
98 !old integer nup(0:maxprocs),ndown(0:maxprocs)
99 integer :: rep2i(0:Nprocs),ireqi(Nprocs) !(maxprocs)
100 integer :: icache_all(Nprocs) !(maxprocs)
101 integer :: status(MPI_STATUS_SIZE),statusi(MPI_STATUS_SIZE,Nprocs)! (MPI_STATUS_SIZE,maxprocs)
102 logical :: synflag, end_of_run, file_exist = .false.!, ovrtim
104 real(kind=8) :: delta,time00,time01,time001,time02,time03,time04,&
105 time05,time06,time07,time08,tt0,scalfac,ene_iex_iex,&
106 ene_i_i,ene_iex_i,ene_i_iex,xxx,tmp,econstr_temp_i,&
108 integer :: k,il,il1,i,j,nharp,ii,ierr,itime_master,irr,iex,&
109 i_set_temp,itmp,i_temp,i_mult,i_iset,i_mset,i_dir,i_temp1,&
110 i_mult1,i_iset1,i_mset1,ierror,itime,mnum
111 integer,dimension(4,nres) :: iharp !(4,nres/3)(4,maxres/3)
112 !deb imin_itime_old=0
114 WRITE(iout,*) "JUST AFTER CALL"
115 ! if (.not.allocated(remd_ene)) allocate(remd_ene(0:n_ene+4,Nprocs))
122 if(me.eq.king.or..not.out1file) then
123 write (iout,*) 'MREMD',nodes,'time before',time00-walltime
124 write (iout,*) "NREP=",nrep
128 if (ilen(tmpdir).gt.0 .and. (me.eq.king)) then
129 call copy_to_tmp(pref_orig(:ilen(pref_orig))//"_mremd.rst")
131 mremd_rst_name=prefix(:ilen(prefix))//"_mremd.rst"
133 print *,'MREMD',nodes
134 print *,'mmm',me,remd_mlist,(remd_m(i),i=1,nrep)
135 write (iout,*) "Start MREMD: me",me," t_bath",t_bath
136 print *,"NSET=",nset, "MSET=", mset
140 do il1=1,max0(mset(il),1)
150 i_index(i,j,il,il1)=k
156 if(me.eq.king.or..not.out1file) then
157 write(iout,*) (i2rep(i),i=0,nodes-1)
158 write(iout,*) (i2set(i),i=0,nodes-1)
163 write(iout,*) i,j,il,il1,i_index(i,j,il,il1)
170 ! print *,'i2rep',me,i2rep(me)
171 ! print *,'rep2i',(rep2i(i),i=0,nrep)
173 !old if (i2rep(me).eq.nrep) then
176 !old nup(0)=remd_m(i2rep(me)+1)
177 !old k=rep2i(int(i2rep(me)))+1
184 !d print '(i4,a4,100i4)',me,' nup',(nup(i),i=0,nup(0))
186 !old if (i2rep(me).eq.1) then
189 !old ndown(0)=remd_m(i2rep(me)-1)
190 !old k=rep2i(i2rep(me)-2)+1
197 !d print '(i4,a6,100i4)',me,' ndown',(ndown(i),i=0,ndown(0))
199 !el common /przechowalnia/
200 if(.not.allocated(d_restart1)) allocate(d_restart1(3,0:(nres2+1)*nodes))
201 if(.not.allocated(d_restart2)) allocate(d_restart2(3,0:(nres2+1)*nodes))
202 if(.not.allocated(p_c)) allocate(p_c(3,(nres2+2)*nodes))
205 write (*,*) "Processor",me," rest",rest,&
206 "restart1fie",restart1file
207 if(rest.and.restart1file) then
209 inquire(file=mremd_rst_name,exist=file_exist)
210 !d write (*,*) me," Before broadcast: file_exist",file_exist
211 call MPI_Bcast(file_exist,1,MPI_LOGICAL,king,CG_COMM,&
213 !d write (*,*) me," After broadcast: file_exist",file_exist
215 if(me.eq.king.or..not.out1file) &
216 write (iout,*) 'Master is reading restart1file'
217 call read1restart(i_index)
219 if(me.eq.king.or..not.out1file) &
220 write (iout,*) 'WARNING : no restart1file'
223 if(me.eq.king.or..not.out1file) then
224 write(iout,*) "i2set",(i2set(i),i=0,nodes-1)
225 write(iout,*) "i_index"
230 write(iout,*) i,j,il,il1,i_index(i,j,il,il1)
239 if (rest.and..not.restart1file) &
240 inquire(file=mremd_rst_name,exist=file_exist)
241 if(.not.file_exist.and.rest.and..not.restart1file) &
242 write(iout,*) 'WARNING : no restart file',mremd_rst_name
243 IF (rest.and.file_exist.and..not.restart1file) THEN
244 write (iout,*) 'Master is reading restart file',&
246 open(irest2,file=mremd_rst_name,status='unknown')
248 read (irest2,*) (i2rep(i),i=0,nodes-1)
250 read (irest2,*) (ifirst(i),i=1,remd_m(1))
253 read (irest2,*) nupa(0,il),(nupa(i,il),i=1,nupa(0,il))
255 read (irest2,*) ndowna(0,il),&
256 (ndowna(i,il),i=1,ndowna(0,il))
262 read (irest2,*) (mset(i),i=1,nset)
264 read (irest2,*) (i2set(i),i=0,nodes-1)
269 read(irest2,*) (i_index(i,j,il,il1),j=1,remd_m(i))
274 write(iout,*) "i2set",(i2set(i),i=0,nodes-1)
275 write(iout,*) "i_index"
280 write(iout,*) i,j,il,il1,i_index(i,j,il,il1)
289 write (iout,'(a6,1000i5)') "i2rep",(i2rep(i),i=0,nodes-1)
290 write (iout,'(a6,1000i5)') "ifirst",&
291 (ifirst(i),i=1,remd_m(1))
293 write (iout,'(a6,i4,a1,100i4)') "nupa",il,":",&
294 (nupa(i,il),i=1,nupa(0,il))
295 write (iout,'(a6,i4,a1,100i4)') "ndowna",il,":",&
296 (ndowna(i,il),i=1,ndowna(0,il))
298 ELSE IF (.not.(rest.and.file_exist)) THEN
304 if (i2rep(il-1).eq.nrep) then
307 nupa(0,il)=remd_m(i2rep(il-1)+1)
308 k=rep2i(int(i2rep(il-1)))+1
314 if (i2rep(il-1).eq.1) then
317 ndowna(0,il)=remd_m(i2rep(il-1)-1)
318 k=rep2i(i2rep(il-1)-2)+1
326 write (iout,'(a6,100i4)') "ifirst",&
327 (ifirst(i),i=1,remd_m(1))
329 write (iout,'(a6,i4,a1,100i4)') "nupa",il,":",&
330 (nupa(i,il),i=1,nupa(0,il))
331 write (iout,'(a6,i4,a1,100i4)') "ndowna",il,":",&
332 (ndowna(i,il),i=1,ndowna(0,il))
338 ! t_bath=retmin+(retmax-retmin)*me/(nodes-1)
339 if(.not.(rest.and.file_exist.and.restart1file)) then
340 if (me .eq. king) then
343 t_bath=retmin+(retmax-retmin)*exp(float(i2rep(me)-nrep))
345 !d print *,'ttt',me,remd_tlist,(remd_t(i),i=1,nrep)
346 if (remd_tlist) t_bath=remd_t(int(i2rep(me)))
351 if(me.eq.king.or..not.out1file) &
352 write(iout,*) me,"iset=",iset,"t_bath=",t_bath
356 stdfp(i)=dsqrt(2*Rb*t_bath/d_time)
360 stdfsc(i,j)=dsqrt(2*Rb*t_bath/d_time)
363 if (lang.gt.0 .and. .not.surfarea) then
366 stdforcp(i)=stdfp(mnum)*dsqrt(gamp(mnum))
370 if (itype(i,mnum).ne.ntyp1) stdforcsc(i)=stdfsc(iabs(itype(i,mnum)),mnum)&
371 *dsqrt(gamsc(iabs(itype(i,mnum)),mnum))
374 ! print *,'irep',me,t_bath
376 if (me.eq.king .or. .not. out1file) &
377 write (iout,'(a60,f10.5)') "REMD Temperature:",t_bath
378 call rescale_weights(t_bath)
382 !------copy MD--------------
383 ! The driver for molecular dynamics subroutines
384 !------------------------------------------------
390 if(me.eq.king.or..not.out1file) &
391 write (iout,'(20(1h=),a20,20(1h=))') "MD calculation started"
397 ! Determine the inverse of the inertia matrix.
398 call setup_MD_matrices
402 if (me.eq.king .or. .not. out1file) &
403 write (iout,'(a60,f10.5)') "REMD restart Temperature:",t_bath
405 stdfp(j)=dsqrt(2*Rb*t_bath/d_time)
407 stdfsc(i,j)=dsqrt(2*Rb*t_bath/d_time)
410 if (lang.gt.0 .and. .not.surfarea) then
413 stdforcp(i)=stdfp(mnum)*dsqrt(gamp(mnum))
414 ! write(iout,*) "stdforcp=",stdforcp(i),itype(i,mnum),i
418 if (itype(i,mnum).ne.ntyp1) stdforcsc(i)=stdfsc(iabs(itype(i,mnum)),mnum)&
419 *dsqrt(gamsc(iabs(itype(i,mnum)),mnum))
420 ! write(iout,*) "stdforcsc=",stdforcsc(i),itype(i,mnum),i
423 call rescale_weights(t_bath)
427 t_MDsetup = MPI_Wtime()-tt0
429 t_MDsetup = tcpu()-tt0
432 ! Entering the MD loop
438 if (lang.eq.2 .or. lang.eq.3) then
442 call sd_verlet_p_setup
444 call sd_verlet_ciccotti_setup
448 pfric0_mat(i,j,0)=pfric_mat(i,j)
449 afric0_mat(i,j,0)=afric_mat(i,j)
450 vfric0_mat(i,j,0)=vfric_mat(i,j)
451 prand0_mat(i,j,0)=prand_mat(i,j)
452 vrand0_mat1(i,j,0)=vrand_mat1(i,j)
453 vrand0_mat2(i,j,0)=vrand_mat2(i,j)
458 flag_stoch(i)=.false.
462 "LANG=2 or 3 NOT SUPPORTED. Recompile without -DLANG0"
464 call MPI_Abort(MPI_COMM_WORLD,IERROR,ERRCODE)
468 else if (lang.eq.1 .or. lang.eq.4) then
472 if (me.eq.king .or. .not. out1file) &
473 write(iout,*) 'Setup time',time00-walltime
476 t_langsetup=MPI_Wtime()-tt0
479 t_langsetup=tcpu()-tt0
486 do while(.not.end_of_run)
489 if(itime.eq.n_timestep.and.me.eq.king) end_of_run=.true.
490 if(mremdsync.and.itime.eq.n_timestep) end_of_run=.true.
492 if (lang.gt.0 .and. surfarea .and. &
493 mod(itime,reset_fricmat).eq.0) then
494 if (lang.eq.2 .or. lang.eq.3) then
498 call sd_verlet_p_setup
500 call sd_verlet_ciccotti_setup
504 pfric0_mat(i,j,0)=pfric_mat(i,j)
505 afric0_mat(i,j,0)=afric_mat(i,j)
506 vfric0_mat(i,j,0)=vfric_mat(i,j)
507 prand0_mat(i,j,0)=prand_mat(i,j)
508 vrand0_mat1(i,j,0)=vrand_mat1(i,j)
509 vrand0_mat2(i,j,0)=vrand_mat2(i,j)
514 flag_stoch(i)=.false.
517 else if (lang.eq.1 .or. lang.eq.4) then
520 write (iout,'(a,i10)') &
521 "Friction matrix reset based on surface area, itime",itime
523 if (reset_vel .and. tbf .and. lang.eq.0 &
524 .and. mod(itime,count_reset_vel).eq.0) then
526 if (me.eq.king .or. .not. out1file) &
527 write(iout,'(a,f20.2)') &
528 "Velocities reset to random values, time",totT
531 d_t_old(j,i)=d_t(j,i)
535 if (reset_moment .and. mod(itime,count_reset_moment).eq.0) then
539 d_t(j,0)=d_t(j,0)-vcm(j)
542 kinetic_T=2.0d0/(dimen3*Rb)*EK
543 scalfac=dsqrt(T_bath/kinetic_T)
544 !d write(iout,'(a,f20.2)') "Momenta zeroed out, time",totT
547 d_t_old(j,i)=scalfac*d_t(j,i)
553 ! Time-reversible RESPA algorithm
554 ! (Tuckerman et al., J. Chem. Phys., 97, 1990, 1992)
555 call RESPA_step(itime)
557 ! Variable time step algorithm.
558 call velverlet_step(itime)
562 call brown_step(itime)
564 print *,"Brown dynamics not here!"
566 call MPI_Abort(MPI_COMM_WORLD,IERROR,ERRCODE)
573 if (mod(itime,ntwe).eq.0) then
575 call enerprint(potEcomp)
578 if (mod(itime,ntwx).eq.0.and..not.traj1file) then
579 write (tytul,'("time",f8.2," temp",f8.1)') totT,t_bath
581 call hairpin(.true.,nharp,iharp)
582 call secondary2(.true.)
583 call pdbout(potE,tytul,ipdb)
588 if (mod(itime,ntwx).eq.0.and.traj1file) then
589 if(ntwx_cache.lt.max_cache_traj_use) then
590 ntwx_cache=ntwx_cache+1
592 if (max_cache_traj_use.ne.1) &
593 print *,itime,"processor ",me," over cache ",ntwx_cache
596 totT_cache(i)=totT_cache(i+1)
597 EK_cache(i)=EK_cache(i+1)
598 potE_cache(i)=potE_cache(i+1)
599 t_bath_cache(i)=t_bath_cache(i+1)
600 Uconst_cache(i)=Uconst_cache(i+1)
601 iset_cache(i)=iset_cache(i+1)
604 qfrag_cache(ii,i)=qfrag_cache(ii,i+1)
607 qpair_cache(ii,i)=qpair_cache(ii,i+1)
610 utheta_cache(ii,i)=utheta_cache(ii,i+1)
611 ugamma_cache(ii,i)=ugamma_cache(ii,i+1)
612 uscdiff_cache(ii,i)=uscdiff_cache(ii,i+1)
618 c_cache(j,ii,i)=c_cache(j,ii,i+1)
624 totT_cache(ntwx_cache)=totT
625 EK_cache(ntwx_cache)=EK
626 potE_cache(ntwx_cache)=potE
627 t_bath_cache(ntwx_cache)=t_bath
628 Uconst_cache(ntwx_cache)=Uconst
629 iset_cache(ntwx_cache)=iset
632 qfrag_cache(i,ntwx_cache)=qfrag(i)
635 qpair_cache(i,ntwx_cache)=qpair(i)
638 utheta_cache(i,ntwx_cache)=utheta(i)
639 ugamma_cache(i,ntwx_cache)=ugamma(i)
640 uscdiff_cache(i,ntwx_cache)=uscdiff(i)
645 c_cache(j,i,ntwx_cache)=c(j,i)
650 if ((rstcount.eq.1000.or.itime.eq.n_timestep) &
651 .and..not.restart1file) then
654 open(irest1,file=mremd_rst_name,status='unknown')
655 write (irest1,*) "i2rep"
656 write (irest1,*) (i2rep(i),i=0,nodes-1)
657 write (irest1,*) "ifirst"
658 write (irest1,*) (ifirst(i),i=1,remd_m(1))
660 write (irest1,*) "nupa",il
661 write (irest1,*) nupa(0,il),(nupa(i,il),i=1,nupa(0,il))
662 write (irest1,*) "ndowna",il
663 write (irest1,*) ndowna(0,il),&
664 (ndowna(i,il),i=1,ndowna(0,il))
667 write (irest1,*) "nset"
668 write (irest1,*) nset
669 write (irest1,*) "mset"
670 write (irest1,*) (mset(i),i=1,nset)
671 write (irest1,*) "i2set"
672 write (irest1,*) (i2set(i),i=0,nodes-1)
673 write (irest1,*) "i_index"
677 write(irest1,*) (i_index(i,j,il,il1),j=1,remd_m(i))
685 open(irest2,file=rest2name,status='unknown')
686 write(irest2,*) totT,EK,potE,totE,t_bath
688 write (irest2,'(3e15.5)') (d_t(j,i),j=1,3)
691 write (irest2,'(3e15.5)') (dc(j,i),j=1,3)
694 write (irest2,*) iset
701 ! forced synchronization
702 if (mod(itime,i_sync_step).eq.0 .and. me.ne.king &
703 .and. .not. mremdsync) then
705 call mpi_iprobe(0,101,CG_COMM,synflag,status,ierr)
707 call mpi_recv(itime_master, 1, MPI_INTEGER,&
708 0,101,CG_COMM, status, ierr)
709 call mpi_barrier(CG_COMM, ierr)
710 !deb if (out1file.or.traj1file) then
711 !deb call mpi_gather(itime,1,mpi_integer,
712 !deb & icache_all,1,mpi_integer,king,
715 call mpi_gather(ntwx_cache,1,mpi_integer,&
716 icache_all,1,mpi_integer,king,&
719 write(iout,*) 'REMD synchro at3',itime_master,itime
720 if (itime_master.ge.n_timestep .or. ovrtim()) &
722 !time call flush(iout)
727 if ((mod(itime,nstex).eq.0.and.me.eq.king &
728 .or.end_of_run.and.me.eq.king ) &
729 .and. .not. mremdsync ) then
732 call mpi_isend(itime,1,MPI_INTEGER,i,101, &
733 CG_COMM, ireqi(i), ierr)
734 !d write(iout,*) 'REMD synchro with',i
737 call mpi_waitall(nodes-1,ireqi,statusi,ierr)
738 call mpi_barrier(CG_COMM, ierr)
740 write(iout,*) 'REMD synchro at2',itime,'time=',time01-time00
741 if (out1file.or.traj1file) then
742 !deb call mpi_gather(itime,1,mpi_integer,
743 !deb & itime_all,1,mpi_integer,king,
745 !deb write(iout,'(a19,8000i8)') ' REMD synchro itime',
746 !deb & (itime_all(i),i=1,nodes)
748 !deb imin_itime=itime_all(1)
750 !deb if(itime_all(i).lt.imin_itime) imin_itime=itime_all(i)
752 !deb ii_write=(imin_itime-imin_itime_old)/ntwx
753 !deb imin_itime_old=int(imin_itime/ntwx)*ntwx
754 !deb write(iout,*) imin_itime,imin_itime_old,ii_write
755 call mpi_gather(ntwx_cache,1,mpi_integer,&
756 icache_all,1,mpi_integer,king,&
758 ! write(iout,'(a19,8000i8)') ' ntwx_cache',
759 ! & (icache_all(i),i=1,nodes)
760 ii_write=icache_all(1)
762 if(icache_all(i).lt.ii_write) ii_write=icache_all(i)
764 ! write(iout,*) "MIN ii_write=",ii_write
767 !time call flush(iout)
769 if(mremdsync .and. mod(itime,nstex).eq.0) then
771 if (me.eq.king .or. .not. out1file) &
772 write(iout,*) 'REMD synchro at1',itime,ntwx_cache,Nprocs,nodes
773 !!!!!!! TRIAL OF MINIM SYNC
774 ! if (me.eq.king) then
776 ! call mpi_isend(itime,1,MPI_INTEGER,i,101, &
777 ! CG_COMM, ireqi(i), ierr)
778 !!d write(iout,*) 'REMD synchro with',i
781 ! call mpi_waitall(nodes-1,ireqi,statusi,ierr)
782 ! call mpi_barrier(CG_COMM, ierr)
786 ! if (me.ne.king) then
787 ! call mpi_recv(itime_master, 1, MPI_INTEGER,&
788 ! 0,101,CG_COMM, status, ierr)
789 ! call mpi_barrier(CG_COMM, ierr)
790 !deb if (out1file.or.traj1file) then
793 write(iout,*) icache_all
795 write(iout,*) "before mpi_gather ntwx_cache"
796 call mpi_gather(ntwx_cache,1,mpi_integer,&
797 icache_all(1),1,mpi_integer,king,& ! CONSULT WITH ADAM
799 write(iout,*) "after mpi_gather ntwx_cache"
802 write(iout,'(a19,8000i8)') ' ntwx_cache',&
803 (icache_all(i),i=1,nodes)
804 ii_write=icache_all(1)
806 if(icache_all(i).lt.ii_write) ii_write=icache_all(i)
808 write(iout,*) "MIN ii_write=",ii_write
814 ! Update the time safety limiy
815 if (time001-time00.gt.safety) then
816 safety=time001-time00+600
817 write (iout,*) "****** SAFETY increased to",safety," s"
819 if (ovrtim()) end_of_run=.true.
821 if(synflag.and..not.end_of_run) then
825 write(iout,*) 'REMD before',me,t_bath
827 ! call mpi_gather(t_bath,1,mpi_double_precision,
828 ! & remd_t_bath,1,mpi_double_precision,king,
830 potEcomp(n_ene+1)=t_bath
832 potEcomp(n_ene+2)=iset
833 if (iset.lt.nset) then
837 potEcomp(n_ene+3)=Uconst
844 potEcomp(n_ene+4)=Uconst
848 call mpi_gather(potEcomp(0),n_ene+5,mpi_double_precision,&
849 remd_ene(0,1),n_ene+5,mpi_double_precision,king,&
852 call mpi_gather(elow,1,mpi_double_precision,&
853 elowi,1,mpi_double_precision,king,&
855 call mpi_gather(ehigh,1,mpi_double_precision,&
856 ehighi,1,mpi_double_precision,king,&
861 if (me.eq.king .or. .not. out1file) then
862 write(iout,*) 'REMD gather times=',time03-time01 &
866 if (restart1file) call write1rst(i_index)
869 if (me.eq.king .or. .not. out1file) then
870 write(iout,*) 'REMD writing rst time=',time04-time03
873 if (traj1file) call write1traj
875 !deb call mpi_gather(ntwx_cache,1,mpi_integer,
876 !deb & icache_all,1,mpi_integer,king,
878 !deb write(iout,'(a19,8000i8)') ' ntwx_cache after traj1file',
879 !deb & (icache_all(i),i=1,nodes)
884 if (me.eq.king .or. .not. out1file) then
885 write(iout,*) 'REMD writing traj time=',time05-time04
892 remd_t_bath(i)=remd_ene(n_ene+1,i)
893 iremd_iset(i)=remd_ene(n_ene+2,i)
897 !o write(iout,*) 'REMD exchange temp,ene,elow,ehigh'
899 write(iout,'(i4,4f12.5)') i,remd_t_bath(i),remd_ene(0,i),&
903 write(iout,*) 'REMD exchange temp,ene'
905 write(iout,'(i4,2f12.5)') i,remd_t_bath(i),remd_ene(0,i)
906 write(iout,'(6f12.5)') (remd_ene(j,i),j=1,n_ene)
910 !-------------------------------------
912 write (iout,*) "Enter exchnge, remd_m",remd_m(1),&
915 write (iout,*) "remd_m(1)",remd_m(1)
917 i=ifirst(iran_num(1,remd_m(1)))
924 write (iout,*) "i",i," nupa(0,i)",int(nupa(0,i))
926 if(i.gt.0.and.nupa(0,i).gt.0) then
928 ! if (i.eq.1 .and. int(nupa(0,i)).eq.1) then
930 ! & "CHUJ ABSOLUTNY!!! No way to sample a distinct replica in MREMD"
932 ! call MPI_Abort(MPI_COMM_WORLD,ERRCODE,ierr)
934 ! do while (iex.eq.i)
935 ! write (iout,*) "upper",nupa(int(nupa(0,i)),i)
936 iex=nupa(iran_num(1,int(nupa(0,i))),i)
938 ! write (iout,*) "nupa(0,i)",nupa(0,i)," iex",iex
940 call muca_delta(remd_t_bath,remd_ene,i,iex,delta)
942 ! Swap temperatures between conformations i and iex with recalculating the free energies
943 ! following temperature changes.
944 ene_iex_iex=remd_ene(0,iex)
945 ene_i_i=remd_ene(0,i)
946 ! write (iout,*) "i",i," ene_i_i",ene_i_i,
947 ! & " iex",iex," ene_iex_iex",ene_iex_iex
948 ! write (iout,*) "rescaling weights with temperature",
951 call rescale_weights(remd_t_bath(i))
953 ! write (iout,*) "0,iex",remd_t_bath(i)
954 ! call enerprint(remd_ene(0,iex))
956 call sum_energy(remd_ene(0,iex),.false.)
957 ene_iex_i=remd_ene(0,iex)
958 ! write (iout,*) "ene_iex_i",remd_ene(0,iex)
960 ! write (iout,*) "0,i",remd_t_bath(i)
961 ! call enerprint(remd_ene(0,i))
963 call sum_energy(remd_ene(0,i),.false.)
964 ! write (iout,*) "ene_i_i",remd_ene(0,i)
966 ! write (iout,*) "rescaling weights with temperature",
968 if (real(ene_i_i).ne.real(remd_ene(0,i))) then
969 write (iout,*) "ERROR: inconsistent energies:",i,&
970 ene_i_i,remd_ene(0,i)
972 call rescale_weights(remd_t_bath(iex))
974 ! write (iout,*) "0,i",remd_t_bath(iex)
975 ! call enerprint(remd_ene(0,i))
977 call sum_energy(remd_ene(0,i),.false.)
978 ! write (iout,*) "ene_i_iex",remd_ene(0,i)
980 ene_i_iex=remd_ene(0,i)
982 ! write (iout,*) "0,iex",remd_t_bath(iex)
983 call enerprint(remd_ene(0,iex))
985 call sum_energy(remd_ene(0,iex),.false.)
986 if (real(ene_iex_iex).ne.real(remd_ene(0,iex))) then
987 write (iout,*) "ERROR: inconsistent energies:",iex,&
988 ene_iex_iex,remd_ene(0,iex)
990 ! write (iout,*) "ene_iex_iex",remd_ene(0,iex)
991 ! write (iout,*) "i",i," iex",iex
992 ! write (iout,'(4(a,e15.5))') "ene_i_i",ene_i_i,
993 ! & " ene_i_iex",ene_i_iex,
994 ! & " ene_iex_i",ene_iex_i," ene_iex_iex",ene_iex_iex
996 delta=(ene_iex_iex-ene_i_iex)/(Rb*remd_t_bath(iex))- &
997 (ene_iex_i-ene_i_i)/(Rb*remd_t_bath(i))
999 ! write(iout,*) 'delta',delta
1000 ! delta=(remd_t_bath(i)-remd_t_bath(iex))*
1001 ! & (remd_ene(i)-remd_ene(iex))/Rb/
1002 ! & (remd_t_bath(i)*remd_t_bath(iex))
1004 if (delta .gt. 50.0d0) then
1008 if(isnan(delta))then
1010 else if (delta.lt.-50.0d0) then
1019 iremd_tot(int(i2rep(i-1)))=iremd_tot(int(i2rep(i-1)))+1
1020 xxx=ran_number(0.0d0,1.0d0)
1021 ! write(iout,'(2i4,a6,2f12.5)') i,iex,' delta',delta,xxx
1023 if (delta .gt. xxx) then
1025 remd_t_bath(i)=remd_t_bath(iex)
1026 remd_t_bath(iex)=tmp
1027 remd_ene(0,i)=ene_i_iex
1028 remd_ene(0,iex)=ene_iex_i
1034 ehighi(i)=ehighi(iex)
1041 nupa(k,i)=nupa(k,iex)
1044 ndowna(k,i)=ndowna(k,iex)
1048 if (ifirst(il).eq.i) ifirst(il)=iex
1050 if (nupa(k,il).eq.i) then
1052 elseif (nupa(k,il).eq.iex) then
1057 if (ndowna(k,il).eq.i) then
1059 elseif (ndowna(k,il).eq.iex) then
1065 iremd_acc(int(i2rep(i-1)))=iremd_acc(int(i2rep(i-1)))+1
1067 i2rep(i-1)=i2rep(iex-1)
1070 ! write(iout,*) 'exchange',i,iex
1071 ! write (iout,'(a8,100i4)') "@ ifirst",
1072 ! & (ifirst(k),k=1,remd_m(1))
1074 ! write (iout,'(a8,i4,a1,100i4)') "@ nupa",il,":",
1075 ! & (nupa(k,il),k=1,nupa(0,il))
1076 ! write (iout,'(a8,i4,a1,100i4)') "@ ndowna",il,":",
1077 ! & (ndowna(k,il),k=1,ndowna(0,il))
1082 remd_ene(0,iex)=ene_iex_iex
1083 remd_ene(0,i)=ene_i_i
1089 !d write (iout,*) "exchange completed"
1093 !d write(iout,*) "########",ii
1095 i_temp=iran_num(1,nrep)
1096 i_mult=iran_num(1,remd_m(i_temp))
1097 i_iset=iran_num(1,nset)
1098 i_mset=iran_num(1,mset(i_iset))
1099 i=i_index(i_temp,i_mult,i_iset,i_mset)
1101 !d write(iout,*) "i=",i,i_temp,i_mult,i_iset,i_mset
1104 !d write(iout,*) "i_dir=",i_dir
1106 if(i_dir.eq.1 .and. remd_m(i_temp+1).gt.0 )then
1109 i_mult1=iran_num(1,remd_m(i_temp1))
1111 i_mset1=iran_num(1,mset(i_iset1))
1112 iex=i_index(i_temp1,i_mult1,i_iset1,i_mset1)
1114 elseif(i_dir.eq.2 .and. mset(i_iset+1).gt.0)then
1117 i_mult1=iran_num(1,remd_m(i_temp1))
1119 i_mset1=iran_num(1,mset(i_iset1))
1120 iex=i_index(i_temp1,i_mult1,i_iset1,i_mset1)
1121 econstr_temp_i=remd_ene(20,i)
1122 econstr_temp_iex=remd_ene(20,iex)
1123 remd_ene(20,i)=remd_ene(n_ene+3,i)
1124 remd_ene(20,iex)=remd_ene(n_ene+4,iex)
1126 elseif(remd_m(i_temp+1).gt.0.and.mset(i_iset+1).gt.0)then
1129 i_mult1=iran_num(1,remd_m(i_temp1))
1131 i_mset1=iran_num(1,mset(i_iset1))
1132 iex=i_index(i_temp1,i_mult1,i_iset1,i_mset1)
1133 econstr_temp_i=remd_ene(20,i)
1134 econstr_temp_iex=remd_ene(20,iex)
1135 remd_ene(20,i)=remd_ene(n_ene+3,i)
1136 remd_ene(20,iex)=remd_ene(n_ene+4,iex)
1142 !d write(iout,*) "iex=",iex,i_temp1,i_mult1,i_iset1,i_mset1
1145 ! Swap temperatures between conformations i and iex with recalculating the free energies
1146 ! following temperature changes.
1147 ene_iex_iex=remd_ene(0,iex)
1148 ene_i_i=remd_ene(0,i)
1149 !o write (iout,*) "rescaling weights with temperature",
1151 call rescale_weights(remd_t_bath(i))
1153 call sum_energy(remd_ene(0,iex),.false.)
1154 ene_iex_i=remd_ene(0,iex)
1155 !d write (iout,*) "ene_iex_i",remd_ene(0,iex)
1156 ! call sum_energy(remd_ene(0,i),.false.)
1157 !d write (iout,*) "ene_i_i",remd_ene(0,i)
1158 ! write (iout,*) "rescaling weights with temperature",
1159 ! & remd_t_bath(iex)
1160 ! if (real(ene_i_i).ne.real(remd_ene(0,i))) then
1161 ! write (iout,*) "ERROR: inconsistent energies:",i,
1162 ! & ene_i_i,remd_ene(0,i)
1164 call rescale_weights(remd_t_bath(iex))
1165 call sum_energy(remd_ene(0,i),.false.)
1166 !d write (iout,*) "ene_i_iex",remd_ene(0,i)
1167 ene_i_iex=remd_ene(0,i)
1168 ! call sum_energy(remd_ene(0,iex),.false.)
1169 ! if (real(ene_iex_iex).ne.real(remd_ene(0,iex))) then
1170 ! write (iout,*) "ERROR: inconsistent energies:",iex,
1171 ! & ene_iex_iex,remd_ene(0,iex)
1173 !d write (iout,*) "ene_iex_iex",remd_ene(0,iex)
1174 ! write (iout,*) "i",i," iex",iex
1175 !d write (iout,'(4(a,e15.5))') "ene_i_i",ene_i_i,
1176 !d & " ene_i_iex",ene_i_iex,
1177 !d & " ene_iex_i",ene_iex_i," ene_iex_iex",ene_iex_iex
1178 delta=(ene_iex_iex-ene_i_iex)/(Rb*remd_t_bath(iex))- &
1179 (ene_iex_i-ene_i_i)/(Rb*remd_t_bath(i))
1181 !d write(iout,*) 'delta',delta
1182 ! delta=(remd_t_bath(i)-remd_t_bath(iex))*
1183 ! & (remd_ene(i)-remd_ene(iex))/Rb/
1184 ! & (remd_t_bath(i)*remd_t_bath(iex))
1185 if (delta .gt. 50.0d0) then
1190 if (i_dir.eq.1.or.i_dir.eq.3) &
1191 iremd_tot(int(i2rep(i-1)))=iremd_tot(int(i2rep(i-1)))+1
1192 if (i_dir.eq.2.or.i_dir.eq.3) &
1193 iremd_tot_usa(int(i2set(i-1)))= &
1194 iremd_tot_usa(int(i2set(i-1)))+1
1195 xxx=ran_number(0.0d0,1.0d0)
1196 !d write(iout,'(2i4,a6,2f12.5)') i,iex,' delta',delta,xxx
1197 if (delta .gt. xxx) then
1199 remd_t_bath(i)=remd_t_bath(iex)
1200 remd_t_bath(iex)=tmp
1203 iremd_iset(i)=iremd_iset(iex)
1204 iremd_iset(iex)=itmp
1206 remd_ene(0,i)=ene_i_iex
1207 remd_ene(0,iex)=ene_iex_i
1209 if (i_dir.eq.1.or.i_dir.eq.3) &
1210 iremd_acc(int(i2rep(i-1)))=iremd_acc(int(i2rep(i-1)))+1
1213 i2rep(i-1)=i2rep(iex-1)
1216 if (i_dir.eq.2.or.i_dir.eq.3) &
1217 iremd_acc_usa(int(i2set(i-1)))= &
1218 iremd_acc_usa(int(i2set(i-1)))+1
1221 i2set(i-1)=i2set(iex-1)
1224 itmp=i_index(i_temp,i_mult,i_iset,i_mset)
1225 i_index(i_temp,i_mult,i_iset,i_mset)= &
1226 i_index(i_temp1,i_mult1,i_iset1,i_mset1)
1227 i_index(i_temp1,i_mult1,i_iset1,i_mset1)=itmp
1230 remd_ene(0,iex)=ene_iex_iex
1231 remd_ene(0,i)=ene_i_i
1232 remd_ene(20,iex)=econstr_temp_iex
1233 remd_ene(20,i)=econstr_temp_i
1237 !d do il1=1,mset(il)
1240 !d write(iout,*) i,j,il,il1,i_index(i,j,il,il1)
1253 !-------------------------------------
1254 write (iout,*) "NREP",nrep
1256 if(iremd_tot(i).ne.0) &
1257 write(iout,'(a3,i4,2f12.5,i5)') 'ACC',i,remd_t(i) &
1258 ,iremd_acc(i)/(1.0*iremd_tot(i)),iremd_tot(i)
1263 if(iremd_tot_usa(i).ne.0) &
1264 write(iout,'(a10,i4,f12.5,i8)') 'ACC_usampl',i,&
1265 iremd_acc_usa(i)/(1.0*iremd_tot_usa(i)),iremd_tot_usa(i)
1271 !d write (iout,'(a6,100i4)') "ifirst",
1272 !d & (ifirst(i),i=1,remd_m(1))
1274 !d write (iout,'(a5,i4,a1,100i4)') "nup",il,":",
1275 !d & (nupa(i,il),i=1,nupa(0,il))
1276 !d write (iout,'(a5,i4,a1,100i4)') "ndown",il,":",
1277 !d & (ndowna(i,il),i=1,ndowna(0,il))
1282 !d write (iout,*) "Before scatter"
1285 if (me.eq.king) then
1286 write (iout,*) "t_bath before scatter",remd_t_bath
1290 call mpi_scatter(remd_t_bath,1,mpi_double_precision,&
1291 t_bath,1,mpi_double_precision,king,&
1293 !d write (iout,*) "After scatter"
1296 call mpi_scatter(iremd_iset,1,mpi_integer,&
1297 iset,1,mpi_integer,king,&
1301 if (me.eq.king .or. .not. out1file) then
1302 write(iout,*) 'REMD scatter time=',time07-time06
1306 call mpi_scatter(elowi,1,mpi_double_precision,&
1307 elow,1,mpi_double_precision,king,&
1309 call mpi_scatter(ehighi,1,mpi_double_precision,&
1310 ehigh,1,mpi_double_precision,king,&
1313 call rescale_weights(t_bath)
1314 !o write (iout,*) "Processor",me,
1315 !o & " rescaling weights with temperature",t_bath
1317 stdfp(j)=dsqrt(2*Rb*t_bath/d_time)
1319 stdfsc(i,j)=dsqrt(2*Rb*t_bath/d_time)
1322 !c Compute the standard deviations of stochastic forces for Langevin dynamics
1323 !c if the friction coefficients do not depend on surface area
1324 if (lang.gt.0 .and. .not.surfarea) then
1327 stdforcp(i)=stdfp(mnum)*dsqrt(gamp(mnum))
1331 if (itype(i,mnum).ne.ntyp1) stdforcsc(i)=stdfsc(iabs(itype(i,mnum)),mnum)&
1332 *dsqrt(gamsc(iabs(itype(i,mnum)),mnum))
1336 !de write(iout,*) 'REMD after',me,t_bath
1338 if (me.eq.king .or. .not. out1file) then
1339 write(iout,*) 'REMD exchange time 8-0=',time08-time00
1340 write(iout,*) 'REMD exchange time 8-7=',time08-time07
1341 write(iout,*) 'REMD exchange time 7-6=',time07-time06
1342 write(iout,*) 'REMD exchange time 6-5=',time06-time05
1343 write(iout,*) 'REMD exchange time 5-4=',time05-time04
1344 write(iout,*) 'REMD exchange time 4-3=',time04-time03
1345 write(iout,*) 'REMD exchange time 3-2=',time03-time02
1346 write(iout,*) 'REMD exchange time 2-1=',time02-time01
1347 write(iout,*) 'REMD exchange time 1-0=',time01-time00
1353 if (restart1file) then
1354 if (me.eq.king .or. .not. out1file) &
1355 write(iout,*) 'writing restart at the end of run'
1356 call write1rst(i_index)
1359 if (traj1file) call write1traj
1361 !deb call mpi_gather(ntwx_cache,1,mpi_integer,
1362 !deb & icache_all,1,mpi_integer,king,
1363 !deb & CG_COMM,ierr)
1364 !deb write(iout,'(a40,8000i8)')
1365 !deb & ' ntwx_cache after traj1file at the end',
1366 !deb & (icache_all(i),i=1,nodes)
1371 t_MD=MPI_Wtime()-tt0
1375 if (me.eq.king .or. .not. out1file) then
1376 write (iout,'(//35(1h=),a10,35(1h=)/10(/a40,1pe15.5))') &
1378 'MD calculations setup:',t_MDsetup,&
1379 'Energy & gradient evaluation:',t_enegrad,&
1380 'Stochastic MD setup:',t_langsetup,&
1381 'Stochastic MD step setup:',t_sdsetup,&
1383 write (iout,'(/28(1h=),a25,27(1h=))') &
1384 ' End of MD calculation '
1386 !el common /przechowalnia/
1387 ! deallocate(d_restart1)
1388 ! deallocate(d_restart2)
1392 end subroutine MREMD
1393 !-----------------------------------------------------------------------------
1394 subroutine write1rst(i_index)
1397 ! implicit real*8 (a-h,o-z)
1398 ! include 'DIMENSIONS'
1400 ! include 'COMMON.MD'
1401 ! include 'COMMON.IOUNITS'
1402 ! include 'COMMON.REMD'
1403 ! include 'COMMON.SETUP'
1404 ! include 'COMMON.CHAIN'
1405 ! include 'COMMON.SBRIDGE'
1406 ! include 'COMMON.INTERACT'
1408 !el real(kind=4) :: d_restart1(3,2*nres*maxprocs),&
1409 !el d_restart2(3,2*nres*maxprocs)
1410 real(kind=4) :: r_d(3,0:2*nres)
1411 real(kind=4) :: t5_restart1(5)
1412 integer :: iret,itmp
1413 ! integer(kind=2) :: i_index(Nprocs/4,Nprocs/20,Nprocs/200,Nprocs/200)
1414 integer(kind=2) :: i_index(Nprocs,Nprocs,Nprocs,Nprocs)
1416 !(maxprocs/4,maxprocs/20,maxprocs/200,maxprocs/200)
1417 !el common /przechowalnia/ d_restart1,d_restart2
1418 integer :: i,j,il,il1,ierr,ixdrf
1423 t5_restart1(4)=t_bath
1424 t5_restart1(5)=Uconst
1426 call mpi_gather(t5_restart1,5,mpi_real,&
1427 t_restart1,5,mpi_real,king,CG_COMM,ierr)
1435 call mpi_gather(r_d,3*2*nres+3,mpi_real,&
1436 d_restart1,3*2*nres+3,mpi_real,king,&
1448 call mpi_gather(r_d,3*2*nres+3,mpi_real,&
1449 d_restart2,3*2*nres+3,mpi_real,king,&
1454 call xdrfopen_(ixdrf,mremd_rst_name, "w", iret)
1456 call xdrfint_(ixdrf, i2rep(i), iret)
1459 call xdrfint_(ixdrf, ifirst(i), iret)
1463 call xdrfint_(ixdrf, nupa(i,il), iret)
1467 call xdrfint_(ixdrf, ndowna(i,il), iret)
1473 call xdrffloat_(ixdrf, t_restart1(j,il), iret)
1480 call xdrffloat_(ixdrf, d_restart1(j,i+(2*nres+1)*il), iret)
1487 call xdrffloat_(ixdrf, d_restart2(j,i+(2*nres+1)*il), iret)
1493 call xdrfint_(ixdrf, nset, iret)
1495 call xdrfint_(ixdrf,mset(i), iret)
1498 call xdrfint_(ixdrf,i2set(i), iret)
1504 itmp=i_index(i,j,il,il1)
1505 call xdrfint_(ixdrf,itmp, iret)
1512 call xdrfclose_(ixdrf, iret)
1514 call xdrfopen(ixdrf,mremd_rst_name, "w", iret)
1516 call xdrfint(ixdrf, i2rep(i), iret)
1519 call xdrfint(ixdrf, ifirst(i), iret)
1523 call xdrfint(ixdrf, nupa(i,il), iret)
1527 call xdrfint(ixdrf, ndowna(i,il), iret)
1533 call xdrffloat(ixdrf, t_restart1(j,il), iret)
1540 call xdrffloat(ixdrf, d_restart1(j,i+(2*nres+1)*il), iret)
1547 call xdrffloat(ixdrf, d_restart2(j,i+(2*nres+1)*il), iret)
1554 call xdrfint(ixdrf, nset, iret)
1556 call xdrfint(ixdrf,mset(i), iret)
1559 call xdrfint(ixdrf,i2set(i), iret)
1565 itmp=i_index(i,j,il,il1)
1566 call xdrfint(ixdrf,itmp, iret)
1573 call xdrfclose(ixdrf, iret)
1577 end subroutine write1rst
1578 !-----------------------------------------------------------------------------
1579 subroutine write1traj
1581 ! implicit real*8 (a-h,o-z)
1582 ! include 'DIMENSIONS'
1584 ! include 'COMMON.MD'
1585 ! include 'COMMON.IOUNITS'
1586 ! include 'COMMON.REMD'
1587 ! include 'COMMON.SETUP'
1588 ! include 'COMMON.CHAIN'
1589 ! include 'COMMON.SBRIDGE'
1590 ! include 'COMMON.INTERACT'
1592 real(kind=4) :: t5_restart1(5)
1593 integer :: iret,itmp
1594 real(kind=4) :: xcoord(3,2*nres+2),prec
1595 real(kind=4) :: r_qfrag(50),r_qpair(100)
1596 real(kind=4) :: r_utheta(50),r_ugamma(100),r_uscdiff(100)
1597 real(kind=4) :: p_qfrag(50*Nprocs),p_qpair(100*Nprocs) !(100*maxprocs)
1598 real(kind=4) :: p_utheta(50*Nprocs),p_ugamma(100*Nprocs),&
1599 p_uscdiff(100*Nprocs) !(100*maxprocs)
1600 !el real(kind=4) :: p_c(3,(nres2+2)*maxprocs)
1601 real(kind=4) :: r_c(3,2*nres+2)
1602 !el common /przechowalnia/ p_c
1604 integer :: i,j,il,ierr,ii,ixdrf
1606 call mpi_bcast(ii_write,1,mpi_integer,&
1610 ! print *,'traj1file',me,ii_write,ntwx_cache
1614 if(me.eq.king) call xdrfopen_(ixdrf,cartname, "a", iret)
1616 if(me.eq.king) call xdrfopen(ixdrf,cartname, "a", iret)
1619 ! write (iout,*) "before gather write1traj: from node",ii
1621 ! write (iout,*) totT_cache(ii),EK_cache(ii),potE_cache(ii),t_bath_cache(ii),Uconst_cache(ii)
1623 t5_restart1(1)=totT_cache(ii)
1624 t5_restart1(2)=EK_cache(ii)
1625 t5_restart1(3)=potE_cache(ii)
1626 t5_restart1(4)=t_bath_cache(ii)
1627 t5_restart1(5)=Uconst_cache(ii)
1628 ! write (iout,*) "before gather write1traj: from node",ii,t5_restart1(1),t5_restart1(3),t5_restart1(5),t5_restart1(4)
1630 call mpi_gather(t5_restart1,5,mpi_real,&
1631 t_restart1,5,mpi_real,king,CG_COMM,ierr)
1633 ! write (iout,*) "after gather write1traj: from node",il,t_restart1(1,il),t_restart1(3,il),t_restart1(5,il),t_restart1(4,il)
1636 call mpi_gather(iset_cache(ii),1,mpi_integer,&
1637 iset_restart1,1,mpi_integer,king,CG_COMM,ierr)
1640 r_qfrag(i)=qfrag_cache(i,ii)
1643 r_qpair(i)=qpair_cache(i,ii)
1646 r_utheta(i)=utheta_cache(i,ii)
1647 r_ugamma(i)=ugamma_cache(i,ii)
1648 r_uscdiff(i)=uscdiff_cache(i,ii)
1651 call mpi_gather(r_qfrag,nfrag,mpi_real,&
1652 p_qfrag,nfrag,mpi_real,king,&
1654 call mpi_gather(r_qpair,npair,mpi_real,&
1655 p_qpair,npair,mpi_real,king,&
1657 call mpi_gather(r_utheta,nfrag_back,mpi_real,&
1658 p_utheta,nfrag_back,mpi_real,king,&
1660 call mpi_gather(r_ugamma,nfrag_back,mpi_real,&
1661 p_ugamma,nfrag_back,mpi_real,king,&
1663 call mpi_gather(r_uscdiff,nfrag_back,mpi_real,&
1664 p_uscdiff,nfrag_back,mpi_real,king,&
1668 write (iout,*) "p_qfrag"
1670 write (iout,*) i,(p_qfrag((i-1)*nfrag+j),j=1,nfrag)
1672 write (iout,*) "p_qpair"
1674 write (iout,*) i,(p_qpair((i-1)*npair+j),j=1,npair)
1680 r_c(j,i)=c_cache(j,i,ii)
1684 call mpi_gather(r_c,3*2*nres,mpi_real,&
1685 p_c,3*2*nres,mpi_real,king,&
1691 call xdrffloat_(ixdrf, real(t_restart1(1,il)), iret)
1692 call xdrffloat_(ixdrf, real(t_restart1(3,il)), iret)
1693 call xdrffloat_(ixdrf, real(t_restart1(5,il)), iret)
1694 call xdrffloat_(ixdrf, real(t_restart1(4,il)), iret)
1695 call xdrfint_(ixdrf, nss, iret)
1698 call xdrfint(ixdrf, idssb(j)+nres, iret)
1699 call xdrfint(ixdrf, jdssb(j)+nres, iret)
1701 call xdrfint_(ixdrf, ihpb(j), iret)
1702 call xdrfint_(ixdrf, jhpb(j), iret)
1705 call xdrfint_(ixdrf, nfrag+npair+3*nfrag_back, iret)
1706 call xdrfint_(ixdrf, iset_restart1(il), iret)
1708 call xdrffloat_(ixdrf, p_qfrag(i+(il-1)*nfrag), iret)
1711 call xdrffloat_(ixdrf, p_qpair(i+(il-1)*npair), iret)
1714 call xdrffloat_(ixdrf, p_utheta(i+(il-1)*nfrag_back), iret)
1715 call xdrffloat_(ixdrf, p_ugamma(i+(il-1)*nfrag_back), iret)
1716 call xdrffloat_(ixdrf, p_uscdiff(i+(il-1)*nfrag_back), iret)
1721 xcoord(j,i)=p_c(j,i+(il-1)*nres*2)
1726 xcoord(j,nres+i-nnt+1)=p_c(j,i+nres+(il-1)*nres*2)
1730 call xdrf3dfcoord_(ixdrf, xcoord, itmp, prec, iret)
1734 call xdrffloat(ixdrf, real(t_restart1(1,il)), iret)
1735 call xdrffloat(ixdrf, real(t_restart1(3,il)), iret)
1736 call xdrffloat(ixdrf, real(t_restart1(5,il)), iret)
1737 call xdrffloat(ixdrf, real(t_restart1(4,il)), iret)
1738 ! write (iout,*) "write1traj: from node",ii,t_restart1(1,il),t_restart1(3,il),t_restart1(5,il),t_restart1(4,il)
1739 call xdrfint(ixdrf, nss, iret)
1742 call xdrfint(ixdrf, idssb(j)+nres, iret)
1743 call xdrfint(ixdrf, jdssb(j)+nres, iret)
1745 call xdrfint(ixdrf, ihpb(j), iret)
1746 call xdrfint(ixdrf, jhpb(j), iret)
1749 call xdrfint(ixdrf, nfrag+npair+3*nfrag_back, iret)
1750 call xdrfint(ixdrf, iset_restart1(il), iret)
1752 call xdrffloat(ixdrf, p_qfrag(i+(il-1)*nfrag), iret)
1755 call xdrffloat(ixdrf, p_qpair(i+(il-1)*npair), iret)
1758 call xdrffloat(ixdrf, p_utheta(i+(il-1)*nfrag_back), iret)
1759 call xdrffloat(ixdrf, p_ugamma(i+(il-1)*nfrag_back), iret)
1760 call xdrffloat(ixdrf, p_uscdiff(i+(il-1)*nfrag_back), iret)
1765 xcoord(j,i)=p_c(j,i+(il-1)*nres*2)
1770 xcoord(j,nres+i-nnt+1)=p_c(j,i+nres+(il-1)*nres*2)
1774 call xdrf3dfcoord(ixdrf, xcoord, itmp, prec, iret)
1780 if(me.eq.king) call xdrfclose_(ixdrf, iret)
1782 if(me.eq.king) call xdrfclose(ixdrf, iret)
1784 do i=1,ntwx_cache-ii_write
1786 totT_cache(i)=totT_cache(ii_write+i)
1787 EK_cache(i)=EK_cache(ii_write+i)
1788 potE_cache(i)=potE_cache(ii_write+i)
1789 t_bath_cache(i)=t_bath_cache(ii_write+i)
1790 Uconst_cache(i)=Uconst_cache(ii_write+i)
1791 iset_cache(i)=iset_cache(ii_write+i)
1794 qfrag_cache(ii,i)=qfrag_cache(ii,ii_write+i)
1797 qpair_cache(ii,i)=qpair_cache(ii,ii_write+i)
1800 utheta_cache(ii,i)=utheta_cache(ii,ii_write+i)
1801 ugamma_cache(ii,i)=ugamma_cache(ii,ii_write+i)
1802 uscdiff_cache(ii,i)=uscdiff_cache(ii,ii_write+i)
1807 c_cache(j,ii,i)=c_cache(j,ii,ii_write+i)
1811 ntwx_cache=ntwx_cache-ii_write
1813 end subroutine write1traj
1814 !-----------------------------------------------------------------------------
1815 subroutine read1restart(i_index)
1817 ! implicit real*8 (a-h,o-z)
1818 ! include 'DIMENSIONS'
1820 ! include 'COMMON.MD'
1821 ! include 'COMMON.IOUNITS'
1822 ! include 'COMMON.REMD'
1823 ! include 'COMMON.SETUP'
1824 ! include 'COMMON.CHAIN'
1825 ! include 'COMMON.SBRIDGE'
1826 ! include 'COMMON.INTERACT'
1827 !el real(kind=4) :: d_restart1(3,2*nres*maxprocs)
1828 real(kind=4) :: r_d(3,0:2*nres),t5_restart1(5)
1829 ! integer(kind=2) :: i_index(Nprocs/4,Nprocs/20,Nprocs/200,Nprocs/200)
1830 integer(kind=2) :: i_index(Nprocs,Nprocs,Nprocs,Nprocs)
1832 !(maxprocs/4,maxprocs/20,maxprocs/200,maxprocs/200)
1833 !el common /przechowalnia/ d_restart1
1834 integer :: i,j,il,il1,ierr,itmp,iret,ixdrf
1836 write (*,*) "Processor",me," called read1restart"
1839 open(irest2,file=mremd_rst_name,status='unknown')
1840 read(irest2,*,err=334) i
1841 write(iout,*) "Reading old rst in ASCI format"
1843 call read1restart_old
1847 call xdrfopen_(ixdrf,mremd_rst_name, "r", iret)
1850 call xdrfint_(ixdrf, i2rep(i), iret)
1853 call xdrfint_(ixdrf, ifirst(i), iret)
1856 call xdrfint_(ixdrf, nupa(0,il), iret)
1858 call xdrfint_(ixdrf, nupa(i,il), iret)
1861 call xdrfint_(ixdrf, ndowna(0,il), iret)
1863 call xdrfint_(ixdrf, ndowna(i,il), iret)
1868 call xdrffloat_(ixdrf, t_restart1(j,il), iret)
1872 call xdrfopen(ixdrf,mremd_rst_name, "r", iret)
1875 call xdrfint(ixdrf, i2rep(i), iret)
1878 call xdrfint(ixdrf, ifirst(i), iret)
1881 call xdrfint(ixdrf, nupa(0,il), iret)
1883 call xdrfint(ixdrf, nupa(i,il), iret)
1886 call xdrfint(ixdrf, ndowna(0,il), iret)
1888 call xdrfint(ixdrf, ndowna(i,il), iret)
1893 call xdrffloat(ixdrf, t_restart1(j,il), iret)
1898 call mpi_scatter(t_restart1,5,mpi_real,&
1899 t5_restart1,5,mpi_real,king,CG_COMM,ierr)
1903 t_bath=t5_restart1(4)
1908 ! read(irest2,'(3e15.5)')
1909 ! & (d_restart1(j,i+2*nres*il),j=1,3)
1912 call xdrffloat_(ixdrf, d_restart1(j,i+(2*nres+1)*il), iret)
1914 call xdrffloat(ixdrf, d_restart1(j,i+(2*nres+1)*il), iret)
1920 call mpi_scatter(d_restart1,3*2*nres+3,mpi_real,&
1921 r_d,3*2*nres+3,mpi_real,king,CG_COMM,ierr)
1931 ! read(irest2,'(3e15.5)')
1932 ! & (d_restart1(j,i+2*nres*il),j=1,3)
1935 call xdrffloat_(ixdrf, d_restart1(j,i+(2*nres+1)*il), iret)
1937 call xdrffloat(ixdrf, d_restart1(j,i+(2*nres+1)*il), iret)
1943 call mpi_scatter(d_restart1,3*2*nres+3,mpi_real,&
1944 r_d,3*2*nres+3,mpi_real,king,CG_COMM,ierr)
1955 call xdrfint_(ixdrf, nset, iret)
1957 call xdrfint_(ixdrf,mset(i), iret)
1960 call xdrfint_(ixdrf,i2set(i), iret)
1966 call xdrfint_(ixdrf,itmp, iret)
1967 i_index(i,j,il,il1)=itmp
1975 call xdrfint(ixdrf, nset, iret)
1977 call xdrfint(ixdrf,mset(i), iret)
1980 call xdrfint(ixdrf,i2set(i), iret)
1986 call xdrfint(ixdrf,itmp, iret)
1987 i_index(i,j,il,il1)=itmp
1994 call mpi_scatter(i2set,1,mpi_integer,&
1995 iset,1,mpi_integer,king,&
2000 if(me.eq.king) close(irest2)
2002 end subroutine read1restart
2003 !-----------------------------------------------------------------------------
2004 subroutine read1restart_old
2006 ! implicit real*8 (a-h,o-z)
2007 ! include 'DIMENSIONS'
2009 ! include 'COMMON.MD'
2010 ! include 'COMMON.IOUNITS'
2011 ! include 'COMMON.REMD'
2012 ! include 'COMMON.SETUP'
2013 ! include 'COMMON.CHAIN'
2014 ! include 'COMMON.SBRIDGE'
2015 ! include 'COMMON.INTERACT'
2016 !el real(kind=4) :: d_restart1(3,2*nres*maxprocs)
2017 real(kind=4) :: r_d(3,0:2*nres),t5_restart1(5)
2018 !el common /przechowalnia/ d_restart1
2020 integer :: i,j,il,ierr
2023 open(irest2,file=mremd_rst_name,status='unknown')
2024 read (irest2,*) (i2rep(i),i=0,nodes-1)
2025 read (irest2,*) (ifirst(i),i=1,remd_m(1))
2027 read (irest2,*) nupa(0,il),(nupa(i,il),i=1,nupa(0,il))
2028 read (irest2,*) ndowna(0,il),&
2029 (ndowna(i,il),i=1,ndowna(0,il))
2032 read(irest2,*) (t_restart1(j,il),j=1,4)
2035 call mpi_scatter(t_restart1,5,mpi_real,&
2036 t5_restart1,5,mpi_real,king,CG_COMM,ierr)
2040 t_bath=t5_restart1(4)
2045 read(irest2,'(3e15.5)') &
2046 (d_restart1(j,i+(2*nres+1)*il),j=1,3)
2050 call mpi_scatter(d_restart1,3*2*nres+3,mpi_real,&
2051 r_d,3*2*nres+3,mpi_real,king,CG_COMM,ierr)
2061 read(irest2,'(3e15.5)') &
2062 (d_restart1(j,i+(2*nres+1)*il),j=1,3)
2066 call mpi_scatter(d_restart1,3*2*nres+3,mpi_real,&
2067 r_d,3*2*nres+3,mpi_real,king,CG_COMM,ierr)
2073 if(me.eq.king) close(irest2)
2075 end subroutine read1restart_old
2076 !----------------------------------------------------------------
2077 subroutine alloc_MREMD_arrays
2079 ! if(.not.allocated(mset)) allocate(mset(max0(nset,1)))
2080 if(.not.allocated(stdfsc)) allocate(stdfsc(ntyp1,5)) !(ntyp1))
2082 ! common /remdcommon/ in io: read_REMDpar
2083 ! real(kind=8),dimension(:),allocatable :: remd_t !(maxprocs)
2084 ! integer,dimension(:),allocatable :: remd_m !(maxprocs)
2085 ! common /remdrestart/
2086 if(.not.allocated(i2rep)) allocate(i2rep(0:2*nodes))
2088 allocate(i2set(0:2*nodes)) !(0:maxprocs)
2089 allocate(ifirst(0:nodes)) !(maxprocs)
2090 allocate(nupa(0:nodes,0:2*nodes))
2091 allocate(ndowna(0:nodes,0:2*nodes)) !(0:maxprocs/4,0:maxprocs)
2092 allocate(t_restart1(5,nodes)) !(5,maxprocs)
2093 allocate(iset_restart1(nodes)) !(maxprocs)
2094 ! common /traj1cache/
2095 allocate(totT_cache(max_cache_traj),EK_cache(max_cache_traj))
2096 allocate(potE_cache(max_cache_traj),t_bath_cache(max_cache_traj))
2097 allocate(Uconst_cache(max_cache_traj)) !(max_cache_traj)
2098 allocate(qfrag_cache(nfrag,max_cache_traj)) !(50,max_cache_traj)
2099 allocate(qpair_cache(npair,max_cache_traj)) !(100,max_cache_traj)
2100 allocate(ugamma_cache(nfrag_back,max_cache_traj))
2101 allocate(utheta_cache(nfrag_back,max_cache_traj))
2102 allocate(uscdiff_cache(nfrag_back,max_cache_traj)) !(maxfrag_back,max_cache_traj)
2103 allocate(c_cache(3,2*nres+2,max_cache_traj)) !(3,maxres2+2,max_cache_traj)
2104 allocate(iset_cache(max_cache_traj)) !(max_cache_traj)
2107 end subroutine alloc_MREMD_arrays
2108 !-----------------------------------------------------------------------------
2109 !-----------------------------------------------------------------------------