Merge branch 'UCGM' of mmka.chem.univ.gda.pl:unres4 into UCGM
[unres4.git] / source / unres / MREMD.F90
index 75062ed..37c7720 100644 (file)
@@ -85,7 +85,7 @@
 
       real(kind=8) :: remd_t_bath(Nprocs) !(maxprocs)
       integer :: iremd_iset(Nprocs) !(maxprocs)
-      integer(kind=2) :: i_index(Nprocs/2,Nprocs/2,Nprocs/10,Nprocs/10)
+      integer(kind=2) :: i_index(Nprocs,Nprocs/2,Nprocs/10,Nprocs/10)
 ! (maxprocs/4,maxprocs/20,maxprocs/200,maxprocs/200)
       real(kind=8) :: remd_ene(0:n_ene+4,Nprocs) !(0:n_ene+4,maxprocs)
       integer :: iremd_acc(Nprocs),iremd_tot(Nprocs) !(maxprocs)
                  econstr_temp_iex
       integer :: k,il,il1,i,j,nharp,ii,ierr,itime_master,irr,iex,&
             i_set_temp,itmp,i_temp,i_mult,i_iset,i_mset,i_dir,i_temp1,&
-            i_mult1,i_iset1,i_mset1,ierror,itime
-      integer,dimension(4,nres/3) :: iharp     !(4,nres/3)(4,maxres/3)
+            i_mult1,i_iset1,i_mset1,ierror,itime,mnum
+      integer,dimension(4,nres) :: iharp       !(4,nres/3)(4,maxres/3)
 !deb      imin_itime_old=0
       integer :: nres2 !el
       WRITE(iout,*) "JUST AFTER CALL"
           stdfsc(i,j)=dsqrt(2*Rb*t_bath/d_time)
        enddo 
        enddo
-
+         if (lang.gt.0 .and. .not.surfarea) then
+           do i=nnt,nct-1
+             mnum=(molnum(i))
+             stdforcp(i)=stdfp(mnum)*dsqrt(gamp(mnum))
+           enddo
+           do i=nnt,nct
+            mnum=molnum(i)
+             if (itype(i,mnum).ne.ntyp1) stdforcsc(i)=stdfsc(iabs(itype(i,mnum)),mnum)&
+                        *dsqrt(gamsc(iabs(itype(i,mnum)),mnum))
+           enddo
+         endif
 !      print *,'irep',me,t_bath
        if (.not.rest) then  
         if (me.eq.king .or. .not. out1file) &
           stdfsc(i,j)=dsqrt(2*Rb*t_bath/d_time)
        enddo 
        enddo
+         if (lang.gt.0 .and. .not.surfarea) then
+           do i=nnt,nct-1
+             mnum=(molnum(i))
+             stdforcp(i)=stdfp(mnum)*dsqrt(gamp(mnum))
+!             write(iout,*) "stdforcp=",stdforcp(i),itype(i,mnum),i
+           enddo
+           do i=nnt,nct
+            mnum=molnum(i)
+             if (itype(i,mnum).ne.ntyp1) stdforcsc(i)=stdfsc(iabs(itype(i,mnum)),mnum)&
+                        *dsqrt(gamsc(iabs(itype(i,mnum)),mnum))
+!              write(iout,*) "stdforcsc=",stdforcsc(i),itype(i,mnum),i
+           enddo
+         endif
        call rescale_weights(t_bath)
       endif
 
               ugamma_cache(i,ntwx_cache)=ugamma(i)
               uscdiff_cache(i,ntwx_cache)=uscdiff(i)
             enddo
-!            call returnbox
+            call returnbox
             do i=1,nres*2
              do j=1,3
               c_cache(j,i,ntwx_cache)=c(j,i)
            stdfsc(i,j)=dsqrt(2*Rb*t_bath/d_time)
          enddo 
          enddo
+!c Compute the standard deviations of stochastic forces for Langevin dynamics
+!c if the friction coefficients do not depend on surface area
+         if (lang.gt.0 .and. .not.surfarea) then
+           do i=nnt,nct-1
+             mnum=(molnum(i))
+             stdforcp(i)=stdfp(mnum)*dsqrt(gamp(mnum))
+           enddo
+           do i=nnt,nct
+            mnum=molnum(i)
+             if (itype(i,mnum).ne.ntyp1) stdforcsc(i)=stdfsc(iabs(itype(i,mnum)),mnum)&
+                        *dsqrt(gamsc(iabs(itype(i,mnum)),mnum))
+           enddo
+         endif
 
 !de         write(iout,*) 'REMD after',me,t_bath
            time08=MPI_WTIME()