nMax= mX*mY; HM=int(nMax/2)
DR='B:\ABE\DATA\In_Tl\'
EX1='.DAT'; EX2='.MAP'
P1 = 0.1D0
!-------------------------------------------------------------------------------------
FO='A006'; NB=1; PR=0.0527656; P2=0.006D0; tHM=1281820
! T=255.0 (K) ƒÀ/ƒÁ=16.667
FO='B010'; NB=1; PR=0.0432633; P2=0.01D0; tHM=1688384
! T=255.25 (K) ƒÀ/ƒÁ=10.0
FO='C020'; NB=3; PR=0.0216019; P2=0.02D0; tHM=1766152
! T=256.0 (K) ƒÀ/ƒÁ= 5.0
FO='D030_256'; NB=4; PR=0.0095959; P2=0.03D0; tHM= 3564041 ! T=256.7
(K) ƒÀ/ƒÁ= 3.333
!-------------------------------------------------------------------------------------
! FO='D015_1'; NB=1; PR=0.0095959; P2=0.015D0; tHM=3564041 !
T=256.7 (K) ƒÀ/ƒÁ= 6.667
! FO='D015_2'; NB=2; PR=0.0095959; P2=0.015D0; tHM=3564041 !
T=256.7 (K)
! FO='D015_3'; NB=3; PR=0.0095959; P2=0.015D0; tHM=3564041 !
T=256.7 (K)
! FO='D015_4'; NB=4; PR=0.0095959; P2=0.015D0; tHM=3564041 !
T=256.7 (K)
!-------------------------------------------------------------------------------------
FO='C015_1'; NB=1; PR=0.0216019; P2=0.015D0; tHM=1766152 ! T=256.0
(K) ƒÀ/ƒÁ= 6.667
FO='C015_2'; NB=2; PR=0.0216019; P2=0.015D0; tHM=1766152 ! T=256.0
(K)
FO='C015_3'; NB=3; PR=0.0216019; P2=0.015D0; tHM=1766152 ! T=256.0
(K)
! FO='C015_4'; NB=4; PR=0.0216019; P2=0.015D0; tHM=1766152 !
T=256.0 (K)
!-------------------------------------------------------------------------------------
! FO='C015_3'; NB=3; PR=0.0216019; P2=0.015D0; tHM=1766152 !
T=256.0 (K) ƒÀ/ƒÁ= 6.667
! FO='C050_3'; NB=3; PR=0.0216019; P2=0.05D0; tHM=1766152
! T=256.0 (K) ƒÀ/ƒÁ= 2.0
! FO='C100_3'; NB=3; PR=0.0216019; P2=0.1D0; tHM=1766152
! T=256.0 (K) ƒÀ/ƒÁ= 1.0
!-------------------------------------------------------------------------------------
! FO='B015_1'; NB=1; PR=0.0432633; P2=0.015D0; tHM=1688384 !
T=255.25 (K) ƒÀ/ƒÁ= 6.667
! FO='B050_1'; NB=1; PR=0.0432633; P2=0.05D0; tHM=1688384
! T=255.25 (K) ƒÀ/ƒÁ= 2.0
! FO='B100_1'; NB=1; PR=0.0432633; P2=0.1D0; tHM=1688384
! T=255.25 (K) ƒÀ/ƒÁ= 1.0
!-------------------------------------------------------------------------------------
ALLOCATE( S((-NB-1):(mX+NB+1),(-NB-1):(mY+NB+1)) )
IV = 40000
Vmax = 0.999
tmax = 0.5
nEC = INT( mX * mY * Vmax )
WRITE (*,*) 'Now Calculating'
File_curve=trim(DR)//trim(FO)//trim(EX1)
File_map =trim(DR)//trim(FO)//trim(EX2)
!==================================================
open( 7,FILE=File_curve )
!==================================================
WRITE(*,'(2I4,3F10.6,I3,F10.6)') mX, mY, P1, P2,
P1/P2, NB, PR
WRITE(7,'(2I4,2F10.6,I3,F10.6)') mX, mY, P1, P2,
NB, PR
write(*,*) File_curve
write(*,*) File_map
Iter = 0; nP = 0; nN = 0; nC = 0; n = 0; nFLG=0
do
Iter = Iter + 1; n = n + 1
call random_number(p)
iX = INT( p*mX+.5D0 )
call random_number(p)
iY = INT( p*mY+.5D0 )
!----------------------------------------------------------
IF ( S(iX,iY) > -1.0D0 .AND. S(iX,iY)
< 1.0D0 ) THEN
do
call random_number(p)
if (p/=0.5D0)
exit
end do
IF ( S(iX, iY)>= 0.0D0 .AND.p>0.5D0 ) THEN
SF = PR*P1
TW = 1
! variant I
ELSEIF ( S(iX, iY)>=0.0D0
.AND. p<0.5D0 ) THEN
SF = -PR*P2
TW = -1
! variant II
ELSEIF ( S(iX, iY) <
0.0D0 .AND. p < 0.5D0 ) THEN
SF = -PR*P1
TW = -1
! variant II
ELSEIF ( S(iX, iY) < 0.0D0
.AND. p > 0.5D0 ) THEN
SF = PR*P2
TW = 1
! variant I
END IF
S(iX,iY) = S(iX,iY) + TW*PR
!--------------------------------------------
! 1st-Neighbor
!--------------------------------------------
S(iX-1,iY ) = S(iX-1,iY
) + SF ! r = 1.0
S(iX+1,iY ) = S(iX+1,iY
) + SF
S(iX ,iY-1) = S(iX
,iY-1) + SF
S(iX ,iY+1) = S(iX
,iY+1) + SF
S(iX-1,iY-1) = S(iX-1,iY-1)
+ SF / 2.0 ! r = sqrt(2.0)
S(iX-1,iY+1) = S(iX-1,iY+1)
+ SF / 2.0
S(iX+1,iY-1) = S(iX+1,iY-1)
+ SF / 2.0
S(iX+1,iY+1) = S(iX+1,iY+1)
+ SF / 2.0
!--------------------------------------------
! 2nd-Neighbor
!--------------------------------------------
if (NB>=2) then
S(iX-2,iY ) = S(iX-2,iY ) + SF / 4.0
! r = 2.0
S(iX+2,iY
) = S(iX+2,iY ) + SF / 4.0
S(iX ,iY-2)
= S(iX ,iY-2) + SF / 4.0
S(iX ,iY+2)
= S(iX ,iY+2) + SF / 4.0
S(iX-2,iY-1)
= S(iX-2,iY-1) + SF / 5.0 ! r = sqrt(4.0+1.0)
S(iX-2,iY+1)
= S(iX-2,iY+1) + SF / 5.0
S(iX+2,iY-1)
= S(iX+2,iY-1) + SF / 5.0
S(iX+2,iY+1)
= S(iX+2,iY+1) + SF / 5.0
S(iX-1,iY-2)
= S(iX-1,iY-2) + SF / 5.0
S(iX-1,iY+2)
= S(iX-1,iY+2) + SF / 5.0
S(iX+1,iY-2)
= S(iX+1,iY-2) + SF / 5.0
S(iX+1,iY+2)
= S(iX+1,iY+2) + SF / 5.0
S(iX-2,iY-2)
= S(iX-2,iY-2) + SF / 8.0 ! r = sqrt(4.0 + 4.0)
S(iX-2,iY+2)
= S(iX-2,iY+2) + SF / 8.0
S(iX+2,iY-2)
= S(iX+2,iY-2) + SF / 8.0
S(iX+2,iY+2)
= S(iX+2,iY+2) + SF / 8.0
end if
!--------------------------------------------
! 3rd-Neighbor
!--------------------------------------------
if (NB>=3) then
S(iX-3,iY ) = S(iX-3,iY ) + SF / 9.0
! r = 3.0
S(iX+3,iY
) = S(iX+3,iY ) + SF / 9.0
S(iX ,iY-3)
= S(iX ,iY-3) + SF / 9.0
S(iX ,iY+3)
= S(iX ,iY+3) + SF / 9.0
S(iX-3,iY-1)
= S(iX-3,iY-1) + SF / 10.0 ! r = sqrt(9.0 + 1.0)
S(iX-3,iY+1)
= S(iX-3,iY+1) + SF / 10.0
S(iX+3,iY-1)
= S(iX+3,iY-1) + SF / 10.0
S(iX+3,iY+1)
= S(iX+3,iY+1) + SF / 10.0
S(iX-1,iY-3)
= S(iX-1,iY-3) + SF / 10.0
S(iX-1,iY+3)
= S(iX-1,iY+3) + SF / 10.0
S(iX+1,iY-3)
= S(iX+1,iY-3) + SF / 10.0
S(iX+1,iY+3)
= S(iX+1,iY+3) + SF / 10.0
S(iX-3,iY-2)
= S(iX-3,iY-2) + SF / 13.0 ! r = sqrt(9.0 + 4.0)
S(iX-3,iY+2)
= S(iX-3,iY+2) + SF / 13.0
S(iX+3,iY-2)
= S(iX+3,iY-2) + SF / 13.0
S(iX+3,iY+2)
= S(iX+3,iY+2) + SF / 13.0
S(iX-2,iY-3)
= S(iX-2,iY-3) + SF / 13.0
S(iX-2,iY+3)
= S(iX-2,iY+3) + SF / 13.0
S(iX+2,iY-3)
= S(iX+2,iY-3) + SF / 13.0
S(iX+2,iY+3)
= S(iX+2,iY+3) + SF / 13.0
S(iX-3,iY-3)
= S(iX-3,iY-3) + SF / 18.0 ! r = sqrt(9.0 + 9.0)
S(iX-3,iY+3)
= S(iX-3,iY+3) + SF / 18.0
S(iX+3,iY-3)
= S(iX+3,iY-3) + SF / 18.0
S(iX+3,iY+3)
= S(iX+3,iY+3) + SF / 18.0
end if
!--------------------------------------------
! 4th-Neighbor
!--------------------------------------------
if (NB>=4) then
S(iX-4,iY ) = S(iX-4,iY ) + SF / 16.0
! r = 4.0
S(iX+4,iY
) = S(iX+4,iY ) + SF / 16.0
S(iX ,iY-4)
= S(iX ,iY-4) + SF / 16.0
S(iX ,iY+4)
= S(iX ,iY+4) + SF / 16.0
S(iX-4,iY-1)
= S(iX-4,iY-1) + SF / 17.0 ! r = sqrt(16.0 + 1.0)
S(iX-4,iY+1)
= S(iX-4,iY+1) + SF / 17.0
S(iX+4,iY-1)
= S(iX+4,iY-1) + SF / 17.0
S(iX+4,iY+1)
= S(iX+4,iY+1) + SF / 17.0
S(iX-1,iY-4)
= S(iX-1,iY-4) + SF / 17.0
S(iX-1,iY+4)
= S(iX-1,iY+4) + SF / 17.0
S(iX+1,iY-4)
= S(iX+1,iY-4) + SF / 17.0
S(iX+1,iY+4)
= S(iX+1,iY+4) + SF / 17.0
S(iX-4,iY-2)
= S(iX-4,iY-2) + SF / 20.0 ! r = sqrt(16.0 + 4.0)
S(iX-4,iY+2)
= S(iX-4,iY+2) + SF / 20.0
S(iX+4,iY-2)
= S(iX+4,iY-2) + SF / 20.0
S(iX+4,iY+2)
= S(iX+4,iY+2) + SF / 20.0
S(iX-2,iY-4)
= S(iX-2,iY-4) + SF / 20.0
S(iX-2,iY+4)
= S(iX-2,iY+4) + SF / 20.0
S(iX+2,iY-4)
= S(iX+2,iY-4) + SF / 20.0
S(iX+2,iY+4)
= S(iX+2,iY+4) + SF / 20.0
S(iX-3,iY-4)
= S(iX-3,iY-4) + SF / 25.0 ! r = sqrt(9.0 + 16.0)
S(iX-3,iY+4)
= S(iX-3,iY+4) + SF / 25.0
S(iX+3,iY-4)
= S(iX+3,iY-4) + SF / 25.0
S(iX+3,iY+4)
= S(iX+3,iY+4) + SF / 25.0
S(iX-4,iY-3)
= S(iX-4,iY-3) + SF / 25.0
S(iX-4,iY+3)
= S(iX-4,iY+3) + SF / 25.0
S(iX+4,iY-3)
= S(iX+4,iY-3) + SF / 25.0
S(iX+4,iY+3)
= S(iX+4,iY+3) + SF / 25.0
S(iX-4,iY-4)
= S(iX-4,iY-4) + SF / 32.0 ! r = sqrt(16.0 + 16.0)
S(iX-4,iY+4)
= S(iX-4,iY+4) + SF / 32.0
S(iX+4,iY-4)
= S(iX+4,iY-4) + SF / 32.0
S(iX+4,iY+4)
= S(iX+4,iY+4) + SF / 32.0
end if
END IF
!==============================================
DO I = iX-NB, iX+NB
DO J = iY-NB, iY+NB
IF ( S(I,J)>=1.0D0
.AND. S(I,J)<=2.0D0 ) THEN
S(I,J) = 100.0
nP = nP
+1
ELSE IF (S(I,J)>=-2.0D0 .AND. S(I,J)<=-1.0D0)
THEN
S(I,J) = -100.0
nN= nN
+ 1
END IF
end do
end do
nC = nP + nN
ST = real(Iter)/real(tHM)/2.0
! Scaled Time
!-----------------------------------------------
IF (nC>=HM.and.nFLG==0 ) then
nHM=Iter; nFLG=1
end if
!========================
IF ( nC>=nEC ) exit
! IF ( ST>=tmax ) exit
!========================
IF ( n==IV ) THEN
SI = real(nC) / real(nMax)
! Scaled Intensity
SI1 = real(nP) / real(nMax)
SI2 = real(nN) / real(nMax)
WRITE(*,'(I10, F8.5, 3F10.6,I10)')
Iter, ST, SI1, SI2, SI, nC
WRITE(7,'(I10, F8.5, 3F10.6,I10)')
Iter, ST, SI1, SI2, SI, nC
n = 0
END IF
!---------------------------------------------------
end do
write(7,'(2I10)') nHM, Iter
write(*,*) nHM, Iter
CLOSE(7)
!=================================================
open( 8,FILE=File_map )
WRITE(8,'(2I4,I10,2F6.4,I3,F10.8)') mX, mY, nHM,
P1, P2, NB, PR
DO I=1, mX
DO J=1, mY
if (S(i,j)>=1.0) S(i,j)=1.0
if (S(i,j)<=-1.0) S(i,j)=-1.0
WRITE(8,'(F4.1)') S(I,J)
end do
end do
CLOSE(8)
end program ING
References
H. Abe et al., Mater.Trans. JIM, Vol.36, pp. 1200-1205 (1995).
Back
to Department of Materials Science and Engineering
Last Modified: April 1, 2009