Advertisement
Guest User

Untitled

a guest
Apr 26th, 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,N,L,step,dU,MCS,ii,f,licznik,a
  3.       parameter(L=40,MCS=600000)
  4.       integer S(L,L),ni(L),pi(L)
  5.       real r,ran1,k,T,P,w,m,suma,ms,ms2,ms4,x,E,Es,C,Es2,y,U
  6.       real ex(5)
  7.      
  8.       d=-1
  9.       open(1,file='L=40B.txt')
  10.       open(2,file='data.txt')
  11.      
  12.       do i=1,L
  13.        ni(i)=i+1
  14.        pi(i)=i-1
  15.       enddo
  16.       ni(L)=1
  17.       pi(1)=L
  18.  
  19.       do i=1,L
  20.         do j=1,L
  21.           k=ran1(d)
  22.           if(k.lt.0.5) then
  23.           S(i,j)=-1
  24.           elseif(k.ge.0.5) then
  25.           S(i,j)=1
  26.           endif
  27.         enddo
  28.       enddo
  29.      
  30.       !T=1.68
  31.       DO a=1,51
  32.       !x=-5.95+(a-1)*0.16
  33.       !T=2.269*(1-exp(x)/L)
  34.       T=2.0+(a-1)*0.007
  35.       licznik=0
  36.       ms=0
  37.       ms2=0
  38.       ms4=0
  39.       Es=0
  40.       Es2=0
  41.      
  42.       do i=1,5
  43.         ex(i)=exp(-(-8+(i-1)*4)/T)
  44.       enddo
  45.      
  46.       do ii=1,MCS
  47.        suma=0
  48.        E=0
  49.        
  50.        do i=1,L
  51.         do j=1,L
  52.           dU=2*S(i,j)*(S(ni(i),j)+S(pi(i),j)+S(i,ni(j))+S(i,pi(j)))
  53.           f=(dU+8)/4+1
  54.           w=min(1.0,ex(f))
  55.           P=ran1(d)
  56.             if(P.le.w) then
  57.               S(i,j)=-S(i,j)
  58.             endif
  59.            suma=suma+S(i,j)
  60.            E=E+0.5*S(i,j)*(S(ni(i),j)+S(pi(i),j)+S(i,ni(j))+S(i,pi(j)))
  61.         enddo
  62.        enddo
  63.        
  64.        if(ii.gt.30000) then
  65.          if(mod(ii,100).eq.0) then
  66.           licznik=licznik+1
  67.           m=suma/(L*L)
  68.           ms=ms+abs(m)
  69.           ms2=ms2+m**2
  70.           ms4=ms4+m**4
  71.           E=E/(L*L)
  72.           Es=Es+E
  73.           Es2=Es2+E**2
  74.           !write(1,*) ii, m
  75.           !write(*,*) ii, m
  76.          endif
  77.        endif
  78.  
  79.       !if(ii.lt.30) then         !termalizacja
  80.          !m=suma/(L*L)
  81.           !write(1,*) ii, m
  82.           !write(*,*) ii, m
  83.        !endif
  84.        
  85.       enddo
  86.      
  87.       ms=ms/float(licznik)
  88.       ms2=ms2/float(licznik)
  89.       ms4=ms4/float(licznik)
  90.       x=L*L*(ms2-ms**2)/T
  91.       Es=-Es/float(licznik)
  92.       Es2=Es2/float(licznik)
  93.       C=(Es2-Es**2)/(T*T*L*L)
  94.       !x=log(abs(1-T/2.269)*L)
  95.       !y=log(ms*L**0.125)
  96.       U=1-ms4/(3*(ms2**2))
  97.      
  98.       write(1,*) T, U
  99.       write(*,*) T, U
  100.      
  101.       ENDDO
  102.  
  103.         !do j=1,L
  104.           !write(2,1000)(S(i,j),i=1,200)
  105.         !enddo
  106. 1000        !format(1x,200I4)
  107.  
  108.       close(1)
  109.       close(2)
  110.  
  111.       read(*,*)
  112.       end
  113.  
  114.       FUNCTION ran1(idum)
  115.       INTEGER idum,IA,IM,IQ,IR,NTAB,NDIV
  116.       REAL ran1,AM,EPS,RNMX
  117.       PARAMETER (IA=16807,IM=2147483647,AM=1./IM,IQ=127773,IR=2836,
  118.      *NTAB=32,NDIV=1+(IM-1)/NTAB,EPS=1.2e-7,RNMX=1.-EPS)
  119.       INTEGER j,k,iv(NTAB),iy
  120.       SAVE iv,iy
  121.       DATA iv /NTAB*0/, iy /0/
  122.       if (idum.le.0.or.iy.eq.0) then
  123.         idum=max(-idum,1)
  124.         do 11 j=NTAB+8,1,-1
  125.           k=idum/IQ
  126.           idum=IA*(idum-k*IQ)-IR*k
  127.           if (idum.lt.0) idum=idum+IM
  128.           if (j.le.NTAB) iv(j)=idum
  129. 11      continue
  130.         iy=iv(1)
  131.       endif
  132.       k=idum/IQ
  133.       idum=IA*(idum-k*IQ)-IR*k
  134.       if (idum.lt.0) idum=idum+IM
  135.  
  136.       j=1+iy/NDIV
  137.       iy=iv(j)
  138.       iv(j)=idum
  139.       ran1=min(AM*iy,RNMX)
  140.       return
  141.       END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement