Advertisement
Guest User

Untitled

a guest
Jan 5th, 2019
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. program ising
  2. implicit none
  3. integer,parameter :: sizeofbox=10
  4. real, dimension (sizeofbox,sizeofbox) :: grid
  5. integer,dimension(sizeofbox):: NI,PI
  6. integer, parameter ::seed=42
  7. integer :: i,j,k,l=1,m=1,t
  8. real ::temperature,dE,boltzman,w,R
  9. real, dimension(2)::wlist
  10. real, dimension(4200)::magnetisation,mcs, temp_energy
  11. real, dimension(sizeofbox**2):: hamilton
  12. real::average_magnetisation, average_magnetisation_2, average_magnetisation_4, energy, energy_2
  13. CHARACTER(LEN=15) :: str
  14. !INICJACJA TABLICY NAJBLIŻSZYCH SĄSIADÓW
  15. do i=1,sizeofbox
  16.     NI(i)=i+1
  17.     PI(i)=i-1
  18. end do
  19. NI(sizeofbox)=1
  20. PI(1)=sizeofbox
  21. !DONE
  22.  
  23.  
  24. !inicjacja grida
  25. call random_number(grid)
  26. do i=1,sizeofbox
  27.     do j=1,sizeofbox
  28.         IF (grid(i,j)>0.5) THEN
  29.         grid(i,j)=1
  30.         ELSE
  31.         grid(i,j)=-1
  32.     end IF
  33. end do
  34. end do
  35. !DONE
  36.  
  37. open(unit=1,file='average10x10')
  38. write(1,*)'Średniamagnetyzacja', 'Średniamagnetyzacja^2', 'sredniamagnetyzacja4', 'e', 'e2'
  39.  
  40. !metropolis
  41. do t=1,100
  42.     temperature=1.5+t*0.02
  43.     write(str, *) t
  44.     do k=1,500000
  45.         do i=1,sizeofbox
  46.             do j=1,sizeofbox
  47.                 dE=-2*grid(i,j)*(grid(NI(i),j)+grid(PI(i),j)+grid(i,NI(j))+grid(i,PI(j)))
  48.                 wlist(1)=1
  49.                 boltzman=exp(dE/temperature)
  50.                 wlist(2)=boltzman
  51.                 w=minval(wlist)
  52.                 R=rand()
  53.                 if (R<=w) then
  54.                     grid(i,j)=grid(i,j)*(-1)
  55.                 end if
  56.             end do
  57.         end do
  58.         if (k>80000 .AND. (MOD(k,100) == 0)) then
  59.             magnetisation(l)=sum(grid)/sizeofbox**2
  60.             mcs(l)=k
  61.             !print*, sum(grid)/sizeofbox**2
  62.             m=1
  63.             do i=1,sizeofbox
  64.                 do j=1,sizeofbox
  65.                     hamilton(m)=-2*grid(i,j)*(grid(NI(i),j)+grid(PI(i),j)+grid(i,NI(j))+grid(i,PI(j)))
  66.                     m=m+1
  67.                 end do
  68.             end do
  69.             temp_energy(l)=sum(hamilton)
  70.             l=l+1
  71.         end if
  72.     end do
  73. l=1
  74.  
  75. average_magnetisation=sum(abs(magnetisation))/4200.0
  76. average_magnetisation_2=sum(abs(magnetisation**2))/4200.0
  77. average_magnetisation_4=sum(abs(magnetisation**4))/4200.0
  78. energy=sum(temp_energy)/4200.0
  79. energy_2=sum(temp_energy**2)/4200.0
  80. !print*, 'SREDNIA MAGNETYZACJA', average_magnetisation
  81. print*, average_magnetisation
  82. write(1,*) temperature, average_magnetisation, average_magnetisation_2,average_magnetisation_4,energy, energy_2
  83. !do i=1,4200
  84. !    write(1,*) mcs(i), magnetisation(i)
  85. !end do
  86. end do
  87.  
  88. close(1)
  89. !print*, SIZE(average_magnetisation)
  90. end program ising
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement