c----------------------------------------------------------- subroutine random_vel implicit real*8 (a-h,o-z) include 'DIMENSIONS' include 'COMMON.CONTROL' include 'COMMON.VAR' include 'COMMON.MD' #ifndef LANG0 include 'COMMON.LANGEVIN' #else include 'COMMON.LANGEVIN.lang0' #endif include 'COMMON.CHAIN' include 'COMMON.DERIV' include 'COMMON.GEO' include 'COMMON.LOCAL' include 'COMMON.INTERACT' include 'COMMON.IOUNITS' include 'COMMON.NAMES' include 'COMMON.TIME1' double precision xv,sigv,lowb,highb c Generate random velocities from Gaussian distribution of mean 0 and std of KT/m c First generate velocities in the eigenspace of the G matrix c write (iout,*) "Calling random_vel dimen dimen3",dimen,dimen3 c call flush(iout) xv=0.0d0 ii=0 do i=1,dimen do k=1,3 ii=ii+1 sigv=dsqrt((Rb*t_bath)/geigen(i)) lowb=-5*sigv highb=5*sigv d_t_work_new(ii)=anorm_distr(xv,sigv,lowb,highb) c write (iout,*) "i",i," ii",ii," geigen",geigen(i), c & " d_t_work_new",d_t_work_new(ii) enddo enddo c diagnostics c Ek1=0.0d0 c ii=0 c do i=1,dimen c do k=1,3 c ii=ii+1 c Ek1=Ek1+0.5d0*geigen(i)*d_t_work_new(ii)**2 c enddo c enddo c write (iout,*) "Ek from eigenvectors",Ek1 c end diagnostics c Transform velocities to UNRES coordinate space do k=0,2 do i=1,dimen ind=(i-1)*3+k+1 d_t_work(ind)=0.0d0 do j=1,dimen d_t_work(ind)=d_t_work(ind) & +Gvec(i,j)*d_t_work_new((j-1)*3+k+1) enddo c write (iout,*) "i",i," ind",ind," d_t_work",d_t_work(ind) c call flush(iout) enddo enddo c Transfer to the d_t vector do j=1,3 d_t(j,0)=d_t_work(j) enddo ind=3 do i=nnt,nct-1 do j=1,3 ind=ind+1 d_t(j,i)=d_t_work(ind) enddo enddo do i=nnt,nct if (itype(i).ne.10) then do j=1,3 ind=ind+1 d_t(j,i+nres)=d_t_work(ind) enddo endif enddo c call kinetic(EK) c write (iout,*) "Kinetic energy",Ek,EK1," kinetic temperature", c & 2.0d0/(dimen3*Rb)*EK,2.0d0/(dimen3*Rb)*EK1 c call flush(iout) return end