Advertisement
Guest User

Untitled

a guest
Jun 10th, 2018
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  implicit none
  2.       integer i,j,d,L,MCS,ii,N,k
  3.       parameter(L=35,N=850,MCS=23000)
  4.       real x(N),y(N),Nr(100000)
  5.       real r,ran1,jj,q,w,T,xn,yn,dx,dy,dr2,U0,Ut,dU,ro,dr,r1,licznik
  6.  
  7.       d=-1
  8.       open(1,file='zad2.txt')
  9.  
  10.       jj=-0.5
  11.       do i=1,N
  12.        x(i)=mod(i-1,L)+0.5
  13.        if(mod(i-1,L).eq.0) then
  14.         jj=jj+1
  15.        endif
  16.        y(i)=jj
  17.       enddo
  18.      
  19.       T=0.7
  20.       ro=N/(L*L*1.0)
  21.       Nr=0
  22.  
  23.       do j=1,MCS
  24.  
  25.        do i=1,N
  26.         U0=0
  27.         Ut=0
  28.          
  29.           xn=x(i)+(ran1(d)-0.5)*0.1
  30.           if(xn.ge.L) xn=xn-L
  31.           if(xn.lt.0) xn=xn+L
  32.           yn=y(i)+(ran1(d)-0.5)*0.1
  33.           if(yn.ge.L) yn=yn-L
  34.           if(yn.lt.0) yn=yn+L
  35.  
  36.           do ii=1,N
  37.            if(ii.ne.i) then
  38.  
  39.              dx=xn-x(ii)
  40.              if(dx.ge.(0.5*L)) dx=L-dx
  41.              dy=yn-y(ii)
  42.              if(dy.ge.(0.5*L)) dy=L-dy
  43.              dr2=dx*dx+dy*dy
  44.              
  45.              if(sqrt(dr2).le.2.5) then
  46.               Ut=Ut+4*(dr2**(-6)-dr2**(-3))
  47.              endif
  48.  
  49.              dx=x(i)-x(ii)
  50.              if(dx.ge.(0.5*L)) dx=L-dx
  51.              dy=y(i)-y(ii)
  52.              if(dy.ge.(0.5*L)) dy=L-dy
  53.              dr2=dx*dx+dy*dy
  54.  
  55.              if(sqrt(dr2).le.2.5) then
  56.               U0=U0+4*(dr2**(-6)-dr2**(-3))
  57.              endif
  58.              
  59.              if(j.gt.30) then
  60.               if(mod(j,10).eq.0) then
  61.                licznik=licznik+1
  62.                 do k=1, 1000
  63.                   dr=k*0.01
  64.                   r1=sqrt(dr2)
  65.                   if(r1.le.dr) then
  66.                     if(r1.gt.(dr-0.01)) then
  67.                      Nr(k)=Nr(k)+1
  68.                     endif
  69.                   endif
  70.                 enddo
  71.                endif
  72.              endif
  73.              
  74.             endif
  75.            enddo
  76.  
  77.           dU=Ut-U0
  78.            w=min(1.0,exp(-dU/T))
  79.            q=ran1(d)
  80.             if(q.le.w) then
  81.               x(i)=xn
  82.               y(i)=yn
  83.             endif
  84.            
  85.        enddo
  86.        
  87.       enddo
  88.  
  89.       do k=1,1000
  90.         Nr(k)=Nr(k)/(2.0*3.1415*k*0.01*0.01*N*200*ro)
  91.         write(1,*) 0.01*k, Nr(k)
  92.       enddo
  93.        
  94.       do i=1, N
  95.        write(1,*) x(i), y(i)
  96.       enddo
  97.  
  98.       write (*,*) 'end'
  99.       close(1)
  100.  
  101.       read(*,*)
  102.       end
  103.  
  104.       FUNCTION ran1(idum)
  105.       INTEGER idum,IA,IM,IQ,IR,NTAB,NDIV
  106.       REAL ran1,AM,EPS,RNMX
  107.       PARAMETER (IA=16807,IM=2147483647,AM=1./IM,IQ=127773,IR=2836,
  108.      *NTAB=32,NDIV=1+(IM-1)/NTAB,EPS=1.2e-7,RNMX=1.-EPS)
  109.       INTEGER j,k,iv(NTAB),iy
  110.       SAVE iv,iy
  111.       DATA iv /NTAB*0/, iy /0/
  112.       if (idum.le.0.or.iy.eq.0) then
  113.         idum=max(-idum,1)
  114.         do 11 j=NTAB+8,1,-1
  115.           k=idum/IQ
  116.           idum=IA*(idum-k*IQ)-IR*k
  117.           if (idum.lt.0) idum=idum+IM
  118.           if (j.le.NTAB) iv(j)=idum
  119. 11      continue
  120.         iy=iv(1)
  121.       endif
  122.       k=idum/IQ
  123.       idum=IA*(idum-k*IQ)-IR*k
  124.       if (idum.lt.0) idum=idum+IM
  125.  
  126.       j=1+iy/NDIV
  127.       iy=iv(j)
  128.       iv(j)=idum
  129.       ran1=min(AM*iy,RNMX)
  130.       return
  131.       END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement