Advertisement
Guest User

Untitled

a guest
Jan 21st, 2019
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. program krysztal
  2. implicit none
  3. integer,parameter :: sizeofbox=20
  4. integer, dimension (sizeofbox,sizeofbox) :: grid
  5. integer,dimension(sizeofbox):: NI,PI
  6. integer, parameter ::seed=42
  7. integer :: i,j,k,l=1,m=1,E, fi_new
  8. real ::electric_field,dE,boltzman,w,R, dEold, dEnew, pie=3.141, n1=1.5, n2=1.7,neff_node
  9. real, dimension(2)::wlist
  10. real, dimension(4200)::neff
  11. real, dimension(360) :: P2(-180:180)
  12. !INICJACJA TABLICY NAJBLIŻSZYCH SĄSIADÓW
  13. do i=1,sizeofbox
  14.     NI(i)=i+1
  15.     PI(i)=i-1
  16. end do
  17. NI(sizeofbox)=1
  18. PI(1)=sizeofbox
  19. !DONE
  20.  
  21. ! inicjacja tablicy P2
  22. do i=-180,180
  23.     P2(i)=0.5*(3.0*cos(real(i)*pie/180.0)*cos(real(i)*pie/180)-1)
  24. end do
  25.  
  26. !inicjacja grida
  27. do i=1,sizeofbox
  28.     do j=1,sizeofbox
  29.         grid(i,j)=0
  30.     end do
  31. end do
  32.  
  33.  
  34. do j=1,sizeofbox
  35.     grid(1,j)=0
  36.     grid(sizeofbox,j)=0
  37. end do
  38. open(unit=1,file='average5x5')
  39.  
  40. print*, grid
  41. do E=0,10
  42.     print*, E
  43.     electric_field=0.5+E*0.1
  44.     do k=1,500000
  45.         do i=2,sizeofbox-1
  46.             do j=1,sizeofbox
  47.                 fi_new=grid(i,j)+int((rand()-0.5)*3)
  48.                 if (fi_new>90) then
  49.                     fi_new=fi_new-180
  50.                 end if
  51.  
  52.                 if (fi_new<-90) then
  53.                     fi_new=fi_new+180
  54.                 end if
  55.                 dEold=-20.0*(P2(grid(i,j)-grid(NI(i),j))+P2(grid(i,j)-grid(i,NI(j)))&
  56.                 +P2(grid(i,j)-grid(i,PI(j)))+P2(grid(i,j)-grid(PI(i),j)))&
  57.                 +(-electric_field*electric_field*P2(grid(i,j)-90))
  58.  
  59.                 dEnew=-20.0*(P2(fi_new-grid(NI(i),j))+P2(fi_new-grid(i,NI(j)))&
  60.                 +P2(fi_new-grid(i,PI(j)))+P2(fi_new-grid(PI(i),j)))&
  61.                 +(-electric_field*electric_field*P2(fi_new-90))
  62.                 dE=dEnew-dEold
  63.                 wlist(1)=1
  64.                 boltzman=exp(-dE)
  65.                 wlist(2)=boltzman
  66.                
  67.                 w=minval(wlist)
  68.                 R=rand()
  69.                 if (R<=w) then
  70.                     grid(i,j)=fi_new
  71.                 end if
  72.             end do
  73.         end do
  74.  
  75.  
  76.  
  77.         if (k>80000 .AND. (MOD(k,100) == 0)) then
  78.             m=1
  79.             neff_node=0
  80.             do i=1,sizeofbox
  81.                 do j=1,sizeofbox
  82.                     neff_node=neff_node+(n1*n2)/sqrt(n1**2*cos(grid(i,j)*pie/180)**2&
  83.                     +n2**2*sin(grid(i,j)*pie/180)**2)
  84.                 end do
  85.             end do
  86.             neff(l)=neff_node/(sizeofbox*sizeofbox)
  87.             l=l+1
  88.         end if
  89.     end do
  90.     l=1
  91.     print*, sum(neff)/4200
  92.     write(1,*) electric_field , sum(neff)/4200
  93.  
  94. end do
  95.  
  96. write(1,*) grid
  97. close(1)
  98. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement