Advertisement
Guest User

Dist_Nciclo

a guest
Feb 6th, 2017
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ! Cálculo da distântica para a rede circular
  2. implicit complex(a-h,o-z)
  3.  
  4. real, dimension(2500,2500)      :: u, plu, pru
  5. complex, dimension(2500,2500)   :: rho, rhoI
  6.  
  7. real, dimension(2500)           :: ProbM !Vector for calculation of the average probability
  8.  
  9. integer, parameter              :: T = 100
  10. integer, parameter              :: N = 20
  11. integer, parameter              :: dim_R = 2*N !Dimension of the network
  12. real, parameter                 :: c = 1.0/sqrt(2.0)
  13.  
  14. integer, parameter              :: Ndiv = 20
  15. real, parameter                 :: p_min = 0.000001
  16. real, parameter                 :: p_max = 1.0
  17. real, parameter                 :: Pu = 1/N !1/N
  18.  
  19. real                            :: prob_medio
  20. real                            :: p, dist
  21.  
  22. open(1,file="Dados_Dist_N-cycle.dat")
  23.  
  24. print *, "Simulation Started ..."
  25. print *, "Parameters: "
  26. print *,"   >>> T = " , T
  27. print *, "  >>> N = ", N
  28. print *, "  >>> Nº division = ",Ndiv
  29. print *, "  >>> Minimum rate (p) = ", p_min
  30. print *, "  >>> Maximum rate (p) = ", p_max
  31. print *, " "
  32. do i = 2,N-1
  33.     k = 2*i-1
  34.     u(k-2,k) = c
  35.     u(k+3,k) = c
  36.     u(k-2,k+1) = c
  37.     u(k+3,k+1) = -c
  38. end do
  39.  
  40. !=> x=1: x-1 -> n (no zero)
  41. u(2*N-1,1) = c
  42. u(4,1) = c
  43. u(2*N-1,2) = c
  44. u(4,2) = -c
  45.  
  46. !=> x=n: x+1 -> 1
  47. u(2*N-3,2*N-1) = c
  48. u(2,2*N-1) = c
  49. u(2*N-3,2*N) = c
  50. u(2,2*N) = -c
  51.  
  52. do i = 2,dim_R,2
  53.     do j = 1,dim_R
  54.         plu(i-1,j) = u(i-1,j)
  55.         pru(i,j) = u(i,j)
  56.     end do
  57. end do
  58.  
  59. print *, " >>> Steps on time and calculation of the probabilities ..."
  60. p = p_min
  61. do l = 1,Ndiv
  62.  
  63.     do k = 1,dim_R
  64.         do j = 1,dim_R
  65.             rhoI(k,j) = (0.0,0.0)
  66.             rho(k,j) = (0.0,0.0)
  67.         end do
  68.     end do
  69.  
  70.     do i = 1,dim_R
  71.         ProbM(i) = 0.0
  72.     end do
  73.  
  74.     rhoI(1,1) = (0.5,0.0)
  75.     rhoI(1,2) = (0.0,-0.5)
  76.     rhoI(2,1) = (0.0,0.5)
  77.     rhoI(2,2) = (0.5,0.0)
  78.  
  79.     do m = 1,T
  80.         call caminhada(rho,rhoI,u,PLU,PRU,p,N)
  81.  
  82.         do i = 1,N
  83.             k = 2*i-1
  84.             pnl = rho(k,k)
  85.             pnr = rho(k+1,k+1)
  86.             prob = pnl + pnr
  87.  
  88.             ProbM(i) = ProbM(i) + prob
  89.         end do
  90.     end do
  91.     dist = 0.0
  92.  
  93.     do i = 1,N
  94.         prob_medio = ProbM(i)/T
  95.         dist = dist + abs(prob_medio - Pu)
  96.     end do
  97.  
  98.     write(1,*) p, dist
  99.     print *, l, p, dist
  100.  
  101.     p = p + (p_max - p_min)/Ndiv
  102. end do
  103. close(1)
  104. print *, " ... End of the Simulation"
  105. end                                     !--[[ Fim do Algoritmo ]]--!
  106.  
  107.  
  108. subroutine caminhada(rho,rhoI,u,plu,pru,p,N)
  109.  
  110.     implicit complex(a-h,o-z)
  111.  
  112.     real                            :: p
  113.     real, dimension(2500,2500)      :: u, PLU, PRU
  114.     complex,dimension(2500,2500)    :: rhoI, rho, aux1, aux2
  115.  
  116.     !Cálculo feito sem os sítios n = 1 e n = N
  117.     Nmin = 3
  118.     Nmax = 2*N-2
  119.  
  120.     do i = Nmin, Nmax
  121.         do j = i, Nmax
  122.             aux1(i,j) = (0.0,0.0)
  123.             aux2(i,j) = (0.0,0.0)
  124.  
  125.             do k=i-3,i+3
  126.                 do l = j-3,j+3
  127.                     aux1(i,j) = aux1(i,j) + u(i,k)*rhoI(k,l)*u(j,l)
  128.                     aux2(i,j) = aux2(i,j) + PLU(i,k)*rhoI(k,l)*PLU(j,l) + PRU(i,k)*rhoI(k,l)*PRU(j,l)
  129.                 end do
  130.             end do
  131.  
  132.             rho(i,j) = (1.0-p)*aux1(i,j) + p*aux2(i,j)
  133.             rho(j,i) = conjg(rho(i,j))
  134.  
  135.         end do
  136.     end do
  137.  
  138.     ! sítio n = 1
  139.     do i = 1,2
  140.         do j = 1,2*N
  141.             aux1(i,j) = (0.0,0.0)
  142.             aux2(i,j) = (0.0,0.0)
  143.  
  144.             ! A soma é feita em duas etapas: [3,4] e [2N-1,2N]
  145.  
  146.             ! Para n := [3,4]
  147.             do k = 3,4
  148.                 do l = 1, 2*N
  149.                     aux1(i,j) = aux1(i,j) + u(i,k)*rhoI(k,l)*u(j,l)
  150.                     aux2(i,j) = aux2(i,j) + PLU(i,k)*rhoI(k,l)*PLU(j,l) + PRU(i,k)*rhoI(k,l)*PRU(j,l)
  151.                 end do
  152.             end do
  153.  
  154.             ! Para n := [2N-1,2N]
  155.             do k = 2*N-1,2*N
  156.                 do l = 1,2*N
  157.                     aux1(i,j) = aux1(i,j) + u(i,k)*rhoI(k,l)*u(j,l)
  158.                     aux2(i,j) = aux2(i,j) + PLU(i,k)*rhoI(k,l)*PLU(j,l) + PRU(i,k)*rhoI(k,l)*PRU(j,l)
  159.                 end do
  160.             end do
  161.  
  162.  
  163.             rho(i,j) = (1.0-p)*aux1(i,j) + p*aux2(i,j)
  164.             rho(j,i) = conjg(rho(i,j))
  165.         end do
  166.     end do
  167.  
  168.     ! sítio n = N
  169.  
  170.     Nmin = 2*N-1
  171.     Nmax = 2*N
  172.  
  173.     do i = Nmin, Nmax
  174.         do j = 1, Nmax
  175.             aux1(i,j) = (0.0,0.0)
  176.             aux2(i,j) = (0.0,0.0)
  177.  
  178.             ! A soma é feita em duas etapas: [1,2] e [2N-3,2N-2]
  179.  
  180.             !Para n := [1,2]
  181.             do k = 1,2
  182.                 do l = 1,2*N
  183.                     aux1(i,j) = aux1(i,j) + u(i,k)*rhoI(k,l)*u(j,l)
  184.                     aux2(i,j) = aux2(i,j) + PLU(i,k)*rhoI(k,l)*PLU(j,l) + PRU(i,k)*rhoI(k,l)*PRU(j,l)
  185.                 end do
  186.             end do
  187.  
  188.             ! Para n := [2N-3,2N-2]
  189.             do k = 2*N-3, 2*N-2
  190.                 do l = 1,2*N
  191.                     aux1(i,j) = aux1(i,j) + u(i,k)*rhoI(k,l)*u(j,l)
  192.                     aux2(i,j) = aux2(i,j) + PLU(i,k)*rhoI(k,l)*PLU(j,l) + PRU(i,k)*rhoI(k,l)*PRU(j,l)
  193.                 end do
  194.             end do
  195.  
  196.  
  197.             rho(i,j) = (1.0-p)*aux1(i,j) + p*aux2(i,j)
  198.             rho(j,i) = conjg(rho(i,j))
  199.         end do
  200.     end do
  201.  
  202.  
  203.     do i = 1,2*N
  204.         do j = i, 2*N
  205.             rhoI(i,j) = rho(i,j)
  206.             rhoI(j,i) = rho(j,i)
  207.         end do
  208.     end do
  209. end subroutine
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement