Advertisement
Guest User

Untitled

a guest
May 24th, 2018
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.       implicit none
  2.       integer d1, L, MCS, i, j, k, FInew, dFI, D, index, m,o,t
  3.       real ran1, P, E, dH, n, ne, no
  4.       parameter (L = 20,D=70, MCS = 230000, P=3.14159265359, dFI = 10)
  5.       parameter (ne = 1.7, no = 1.5)
  6.       integer fi(1:D,1:L), nj(1:L), pj(1:L), ni(1:D), pi(1:D)
  7.       real P2(0:360)
  8.       open(8, file = 'L=20,D=70.txt', status = 'unknown')
  9.       !-----------------------------------------------------------------
  10.      
  11.       d1=-1
  12.       do i = 1, D
  13.          do j = 1, L
  14.               fi(i,j) = 0
  15.          enddo
  16.       enddo
  17.  
  18.       do i = 1, D
  19.          ni(i) = i + 1
  20.          pi(i) = i - 1
  21.       enddo
  22.       ni(D) = 1
  23.       pi(1) = D
  24.      
  25.       do i = 1, L
  26.          nj(i) = i + 1
  27.          pj(i) = i - 1
  28.       enddo
  29.      
  30.       do i = 0,360
  31.          P2(i) = 0.5*(3*cos(((i-180)*P)/180.0)**2-1)
  32.       enddo
  33.      
  34.       E=0.0
  35.       do t=0,215
  36.         write(*,*) E
  37.         index = 0
  38.         n = 0
  39.         do k = 1, MCS
  40.            do i = 1, D
  41.               do j = 2, L-1
  42.                  FInew = fi(i,j) + int((ran1(d1) - 0.5)*dFI)
  43.                  if(FInew>90) Finew = Finew - 180
  44.                  if(FInew<-90) Finew = Finew + 180
  45.                  dH=-20*(P2(FInew-fi(pi(i),j)+180)+
  46.      &          P2(FInew-fi(i,pj(j))+180)+P2(FInew-fi(ni(i),j)+180)+
  47.      &          P2(FInew-fi(i,nj(j))+180))-E**2*P2(90-FInew +180)
  48.      &          +20*(P2(fi(i,j)-fi(pi(i),j)+180)+
  49.      &          P2(fi(i,j)-fi(i,pj(j))+180)+P2(fi(i,j)-fi(ni(i),j)+180)+
  50.      &          P2(fi(i,j)-fi(i,nj(j))+180))+E**2*P2(90-fi(i,j)+180)
  51.                  if(dH<0) then
  52.                     fi(i,j) = FInew
  53.                  else if(ran1(d1)<=exp(-dH)) then
  54.                     fi(i,j) = FInew
  55.                  endif
  56.               enddo
  57.            enddo
  58.            if(k>30000.and.mod(k,100)==0) then
  59.               index = index + 1
  60.               do m = 1, D
  61.                  do o = 1, L
  62.                     n=n+(ne*no)/(no**2*cos(fi(m,o)/180.0*p)**2+
  63.      &              ne**2*sin(fi(m,o)/180.0*p)**2)**(0.5)
  64.                  enddo
  65.               enddo
  66.            endif
  67.         enddo
  68.         n = n/(index*L*D)
  69.         write(8,*) E, n
  70.         if(E>0.35.and.E<0.44) then
  71.            E=E+0.01
  72.         else
  73.            E=E+0.02
  74.         endif
  75.       enddo
  76.       end
  77.       !.................................................................
  78.  
  79.       FUNCTION ran1(idum)
  80.       INTEGER idum,IA,IM,IQ,IR,NTAB,NDIV
  81.       REAL ran1,AM,EPS,RNMX
  82.       PARAMETER (IA=16807,IM=2147483647,AM=1./IM,IQ=127773,IR=2836,
  83.      *NTAB=32,NDIV=1+(IM-1)/NTAB,EPS=1.2e-7,RNMX=1.-EPS)
  84.       INTEGER j,k,iv(NTAB),iy
  85.       SAVE iv,iy
  86.       DATA iv /NTAB*0/, iy /0/
  87.       if (idum.le.0.or.iy.eq.0) then
  88.         idum=max(-idum,1)
  89.         do 11 j=NTAB+8,1,-1
  90.           k=idum/IQ
  91.           idum=IA*(idum-k*IQ)-IR*k
  92.           if (idum.lt.0) idum=idum+IM
  93.           if (j.le.NTAB) iv(j)=idum
  94. 11      continue
  95.         iy=iv(1)
  96.       endif
  97.       k=idum/IQ
  98.       idum=IA*(idum-k*IQ)-IR*k
  99.       if (idum.lt.0) idum=idum+IM
  100.  
  101.       j=1+iy/NDIV
  102.       iy=iv(j)
  103.       iv(j)=idum
  104.       ran1=min(AM*iy,RNMX)
  105.       return
  106.       END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement